From 87e78140373c700e98ef270067ba08d7f4fea25c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 03:25:44 +0000 Subject: [PATCH] deploy: 41257d63b88ee4fb0622406cb02b38bdb459b80a --- 404.html | 8 +- CNAME | 1 - app/index.html | 8 +- ...-arch-e9c849fb7a81df7821f43c49b27f46b7.svg | 623 --------------- ...-data-67cd9f631367cc39f743e38daea7c377.svg | 728 ------------------ ...-type-3118cd5f279e72ce2768e9b698a142d8.svg | 654 ---------------- ...in-vm-a08b66af2c866b714e05aa6a4066bd14.svg | 506 ------------ ...ction-a92ecdda4e229b9078273b25e7303a17.svg | 511 ------------ ...ystem-bc4a8ceadac821add490057854417ab5.svg | 454 ----------- ...model-46f5640406a1caae8e0ab67c5251807a.svg | 560 -------------- ...-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg | 566 -------------- assets/js/087bcfde.00fb6169.js | 1 - assets/js/0c125c2b.bbc3f0bb.js | 1 - assets/js/13c002e8.46adacda.js | 1 - assets/js/17896441.2d94139d.js | 1 - assets/js/1f391b9e.28f273ba.js | 1 - assets/js/2ae76f65.d6bcf79e.js | 1 - assets/js/306a8c6c.2163c7e8.js | 1 - ...394e9.26532507.js => 308394e9.efbc629e.js} | 2 +- assets/js/386fda77.3e5ec425.js | 1 - assets/js/49b2de74.b79f9acf.js | 1 - assets/js/6875c492.baf4982b.js | 1 - assets/js/831b5c01.07ee4a6a.js | 1 - assets/js/8485.28ee2776.js | 1 - assets/js/a54713d3.a096338a.js | 1 - assets/js/a8378f8b.9c5f747b.js | 1 - assets/js/b2f554cd.86c2df08.js | 1 - assets/js/c6a65125.80345f31.js | 1 - assets/js/ccc49370.80aafd6b.js | 1 - assets/js/ec0679b0.a7d27dc2.js | 1 - assets/js/edc931f8.d7cf7051.js | 1 - assets/js/main.28e04bb6.js | 2 - assets/js/main.592074ea.js | 2 + ...CENSE.txt => main.592074ea.js.LICENSE.txt} | 0 assets/js/main.6cbf0c8c.js | 2 - assets/js/main.9a68e9ac.js | 2 - assets/js/main.9a68e9ac.js.LICENSE.txt | 132 ---- ...n.b9e13249.js => runtime~main.300f48b2.js} | 2 +- assets/js/runtime~main.5dab4f82.js | 1 - assets/js/runtime~main.f45653f9.js | 1 - blog/archive/index.html | 8 +- blog/conversational-computing/index.html | 8 +- blog/index.html | 8 +- .../index.html | 8 +- blog/tags/cogine/index.html | 8 +- blog/tags/index.html | 8 +- blog/tags/open-source/index.html | 8 +- blog/tags/reality-world/index.html | 8 +- blog/the-evolution-of-ECS/index.html | 8 +- blog/thinking/index.html | 8 +- cogine/index.html | 8 +- community/about-open-source/index.html | 8 +- community/about-reality-world/index.html | 8 +- community/contact/index.html | 8 +- community/index.html | 22 - community/questions/index.html | 8 +- community/resources/index.html | 8 +- community/roadmap/index.html | 8 +- docs/intro/index.html | 8 +- docs/introduction/advantage/index.html | 8 +- docs/introduction/business-model/index.html | 8 +- docs/introduction/current/index.html | 8 +- docs/introduction/evolution/index.html | 8 +- docs/introduction/index.html | 8 +- docs/introduction/user/index.html | 8 +- docs/introduction/value/index.html | 8 +- feature/chidori/index.html | 8 +- feature/cogine/index.html | 8 +- feature/features/index.html | 8 +- feature/langchain/index.html | 8 +- features/index.html | 8 +- index.html | 8 +- learning/Reality-World/index.html | 8 +- pdf/Reality-World.pdf | Bin 2157123 -> 0 bytes reality-create/index.html | 8 +- reality-world-paper/index.html | 8 +- search-index-default.json | 2 +- search-index-docs-community-current.json | 1 - search-index-docs-default-current.json | 2 +- self-deploying/index.html | 8 +- whitepaper/index.html | 10 +- zh/404.html | 8 +- zh/app/index.html | 8 +- ...-arch-e9c849fb7a81df7821f43c49b27f46b7.svg | 623 --------------- ...-data-67cd9f631367cc39f743e38daea7c377.svg | 728 ------------------ ...-type-3118cd5f279e72ce2768e9b698a142d8.svg | 654 ---------------- ...in-vm-a08b66af2c866b714e05aa6a4066bd14.svg | 506 ------------ ...ction-a92ecdda4e229b9078273b25e7303a17.svg | 511 ------------ ...ystem-bc4a8ceadac821add490057854417ab5.svg | 454 ----------- ...model-46f5640406a1caae8e0ab67c5251807a.svg | 560 -------------- ...-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg | 566 -------------- zh/assets/js/087bcfde.00fb6169.js | 1 - zh/assets/js/0c125c2b.b8426788.js | 1 - zh/assets/js/13c002e8.5db7e18c.js | 1 - zh/assets/js/17896441.2d94139d.js | 1 - zh/assets/js/1f391b9e.28f273ba.js | 1 - zh/assets/js/2ae76f65.e0ceff67.js | 1 - zh/assets/js/306a8c6c.6f9f76f5.js | 1 - ...394e9.5d6b53fc.js => 308394e9.e298d7e2.js} | 2 +- zh/assets/js/386fda77.7c7456dc.js | 1 - zh/assets/js/49b2de74.b79f9acf.js | 1 - zh/assets/js/6875c492.baf4982b.js | 1 - zh/assets/js/831b5c01.07ee4a6a.js | 1 - zh/assets/js/8485.28ee2776.js | 1 - zh/assets/js/927d70e2.bb1d543b.js | 1 - zh/assets/js/a54713d3.57e90409.js | 1 - zh/assets/js/a8378f8b.9c5f747b.js | 1 - zh/assets/js/c6a65125.9ec47e51.js | 1 - zh/assets/js/ccc49370.80aafd6b.js | 1 - zh/assets/js/ec0679b0.a7d27dc2.js | 1 - zh/assets/js/edc931f8.45b93a45.js | 1 - zh/assets/js/main.111c70cd.js | 2 - zh/assets/js/main.111c70cd.js.LICENSE.txt | 132 ---- zh/assets/js/main.85e16a82.js | 2 + .../assets/js/main.85e16a82.js.LICENSE.txt | 0 zh/assets/js/main.c0db0840.js | 2 - zh/assets/js/main.c0db0840.js.LICENSE.txt | 132 ---- zh/assets/js/main.d44be7d9.js | 2 - zh/assets/js/main.d44be7d9.js.LICENSE.txt | 132 ---- ...n.7f3ba15c.js => runtime~main.4c614863.js} | 2 +- zh/assets/js/runtime~main.55716104.js | 1 - zh/assets/js/runtime~main.ccfa2fff.js | 1 - zh/blog/archive/index.html | 8 +- zh/blog/conversational-computing/index.html | 8 +- zh/blog/index.html | 8 +- .../index.html | 8 +- zh/blog/tags/cogine/index.html | 8 +- zh/blog/tags/index.html | 8 +- zh/blog/tags/open-source/index.html | 8 +- zh/blog/tags/reality-world/index.html | 8 +- zh/blog/the-evolution-of-ECS/index.html | 8 +- zh/blog/thinking/index.html | 8 +- zh/cogine/index.html | 8 +- zh/community/about-open-source/index.html | 8 +- zh/community/about-reality-world/index.html | 8 +- zh/community/contact/index.html | 8 +- zh/community/index.html | 22 - zh/community/questions/index.html | 8 +- zh/community/resources/index.html | 8 +- zh/community/roadmap/index.html | 8 +- zh/docs/intro/index.html | 8 +- zh/docs/introduction/advantage/index.html | 8 +- .../introduction/business-model/index.html | 8 +- zh/docs/introduction/current/index.html | 8 +- zh/docs/introduction/evolution/index.html | 8 +- zh/docs/introduction/index.html | 8 +- zh/docs/introduction/user/index.html | 8 +- zh/docs/introduction/value/index.html | 8 +- zh/feature/chidori/index.html | 8 +- zh/feature/cogine/index.html | 8 +- zh/feature/features/index.html | 8 +- zh/feature/langchain/index.html | 8 +- zh/features/index.html | 8 +- zh/index.html | 8 +- zh/learning/Reality-World/index.html | 8 +- zh/reality-create/index.html | 8 +- zh/reality-world-paper/index.html | 8 +- zh/search-index-default.json | 2 +- zh/search-index-docs-community-current.json | 1 - zh/search-index-docs-default-current.json | 2 +- zh/self-deploying/index.html | 8 +- zh/whitepaper/index.html | 10 +- 162 files changed, 318 insertions(+), 10147 deletions(-) delete mode 100644 CNAME delete mode 100644 assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg delete mode 100644 assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg delete mode 100644 assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg delete mode 100644 assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg delete mode 100644 assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg delete mode 100644 assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg delete mode 100644 assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg delete mode 100644 assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg delete mode 100644 assets/js/087bcfde.00fb6169.js delete mode 100644 assets/js/0c125c2b.bbc3f0bb.js delete mode 100644 assets/js/13c002e8.46adacda.js delete mode 100644 assets/js/17896441.2d94139d.js delete mode 100644 assets/js/1f391b9e.28f273ba.js delete mode 100644 assets/js/2ae76f65.d6bcf79e.js delete mode 100644 assets/js/306a8c6c.2163c7e8.js rename assets/js/{308394e9.26532507.js => 308394e9.efbc629e.js} (57%) delete mode 100644 assets/js/386fda77.3e5ec425.js delete mode 100644 assets/js/49b2de74.b79f9acf.js delete mode 100644 assets/js/6875c492.baf4982b.js delete mode 100644 assets/js/831b5c01.07ee4a6a.js delete mode 100644 assets/js/8485.28ee2776.js delete mode 100644 assets/js/a54713d3.a096338a.js delete mode 100644 assets/js/a8378f8b.9c5f747b.js delete mode 100644 assets/js/b2f554cd.86c2df08.js delete mode 100644 assets/js/c6a65125.80345f31.js delete mode 100644 assets/js/ccc49370.80aafd6b.js delete mode 100644 assets/js/ec0679b0.a7d27dc2.js delete mode 100644 assets/js/edc931f8.d7cf7051.js delete mode 100644 assets/js/main.28e04bb6.js create mode 100644 assets/js/main.592074ea.js rename assets/js/{main.28e04bb6.js.LICENSE.txt => main.592074ea.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.6cbf0c8c.js delete mode 100644 assets/js/main.9a68e9ac.js delete mode 100644 assets/js/main.9a68e9ac.js.LICENSE.txt rename assets/js/{runtime~main.b9e13249.js => runtime~main.300f48b2.js} (52%) delete mode 100644 assets/js/runtime~main.5dab4f82.js delete mode 100644 assets/js/runtime~main.f45653f9.js delete mode 100644 community/index.html delete mode 100644 pdf/Reality-World.pdf delete mode 100644 search-index-docs-community-current.json delete mode 100644 zh/assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg delete mode 100644 zh/assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg delete mode 100644 zh/assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg delete mode 100644 zh/assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg delete mode 100644 zh/assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg delete mode 100644 zh/assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg delete mode 100644 zh/assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg delete mode 100644 zh/assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg delete mode 100644 zh/assets/js/087bcfde.00fb6169.js delete mode 100644 zh/assets/js/0c125c2b.b8426788.js delete mode 100644 zh/assets/js/13c002e8.5db7e18c.js delete mode 100644 zh/assets/js/17896441.2d94139d.js delete mode 100644 zh/assets/js/1f391b9e.28f273ba.js delete mode 100644 zh/assets/js/2ae76f65.e0ceff67.js delete mode 100644 zh/assets/js/306a8c6c.6f9f76f5.js rename zh/assets/js/{308394e9.5d6b53fc.js => 308394e9.e298d7e2.js} (57%) delete mode 100644 zh/assets/js/386fda77.7c7456dc.js delete mode 100644 zh/assets/js/49b2de74.b79f9acf.js delete mode 100644 zh/assets/js/6875c492.baf4982b.js delete mode 100644 zh/assets/js/831b5c01.07ee4a6a.js delete mode 100644 zh/assets/js/8485.28ee2776.js delete mode 100644 zh/assets/js/927d70e2.bb1d543b.js delete mode 100644 zh/assets/js/a54713d3.57e90409.js delete mode 100644 zh/assets/js/a8378f8b.9c5f747b.js delete mode 100644 zh/assets/js/c6a65125.9ec47e51.js delete mode 100644 zh/assets/js/ccc49370.80aafd6b.js delete mode 100644 zh/assets/js/ec0679b0.a7d27dc2.js delete mode 100644 zh/assets/js/edc931f8.45b93a45.js delete mode 100644 zh/assets/js/main.111c70cd.js delete mode 100644 zh/assets/js/main.111c70cd.js.LICENSE.txt create mode 100644 zh/assets/js/main.85e16a82.js rename assets/js/main.6cbf0c8c.js.LICENSE.txt => zh/assets/js/main.85e16a82.js.LICENSE.txt (100%) delete mode 100644 zh/assets/js/main.c0db0840.js delete mode 100644 zh/assets/js/main.c0db0840.js.LICENSE.txt delete mode 100644 zh/assets/js/main.d44be7d9.js delete mode 100644 zh/assets/js/main.d44be7d9.js.LICENSE.txt rename zh/assets/js/{runtime~main.7f3ba15c.js => runtime~main.4c614863.js} (51%) delete mode 100644 zh/assets/js/runtime~main.55716104.js delete mode 100644 zh/assets/js/runtime~main.ccfa2fff.js delete mode 100644 zh/community/index.html delete mode 100644 zh/search-index-docs-community-current.json diff --git a/404.html b/404.html index b83de45..ea85db5 100644 --- a/404.html +++ b/404.html @@ -6,8 +6,8 @@ Page Not Found | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/CNAME b/CNAME deleted file mode 100644 index 61234f7..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -realityworld.com \ No newline at end of file diff --git a/app/index.html b/app/index.html index d779b43..2142d4c 100644 --- a/app/index.html +++ b/app/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -17,7 +17,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg b/assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg deleted file mode 100644 index 0f92281..0000000 --- a/assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg +++ /dev/null @@ -1,623 +0,0 @@ - - - -(a)(b) diff --git a/assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg b/assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg deleted file mode 100644 index 2958491..0000000 --- a/assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg +++ /dev/null @@ -1,728 +0,0 @@ - - - -(a)(b)no protectiontransportprotectionmemoryapplication sandboxapplicationapplicationVMmemory sandbox diff --git a/assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg b/assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg deleted file mode 100644 index 9b36392..0000000 --- a/assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg +++ /dev/null @@ -1,654 +0,0 @@ - - - -(b)(a)parserparser diff --git a/assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg b/assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg deleted file mode 100644 index e804172..0000000 --- a/assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg +++ /dev/null @@ -1,506 +0,0 @@ - - - -security & parsertype systemVMprogram diff --git a/assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg b/assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg deleted file mode 100644 index 21d5880..0000000 --- a/assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg +++ /dev/null @@ -1,511 +0,0 @@ - - - -ACB(a)(b) diff --git a/assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg b/assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg deleted file mode 100644 index 4d0321f..0000000 --- a/assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg +++ /dev/null @@ -1,454 +0,0 @@ - - - -(a)(b) diff --git a/assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg b/assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg deleted file mode 100644 index 6f30776..0000000 --- a/assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg +++ /dev/null @@ -1,560 +0,0 @@ - - - -(a)(b) diff --git a/assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg b/assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg deleted file mode 100644 index 3312b95..0000000 --- a/assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg +++ /dev/null @@ -1,566 +0,0 @@ - - - -interoperabilityVM数据与功能耦合失去互操作性self-evolving局部与整体耦合失去自治能力 diff --git a/assets/js/087bcfde.00fb6169.js b/assets/js/087bcfde.00fb6169.js deleted file mode 100644 index 133952d..0000000 --- a/assets/js/087bcfde.00fb6169.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3111],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/0c125c2b.bbc3f0bb.js b/assets/js/0c125c2b.bbc3f0bb.js deleted file mode 100644 index 5a07cbd..0000000 --- a/assets/js/0c125c2b.bbc3f0bb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6259],{4137:(t,e,l)=>{l.d(e,{Zo:()=>u,kt:()=>k});var a=l(7294);function n(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function i(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,a)}return l}function r(t){for(var e=1;e=0||(n[l]=t[l]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,l)&&(n[l]=t[l])}return n}var s=a.createContext({}),p=function(t){var e=a.useContext(s),l=e;return t&&(l="function"==typeof t?t(e):r(r({},e),t)),l},u=function(t){var e=p(t.components);return a.createElement(s.Provider,{value:e},t.children)},c="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var l=t.components,n=t.mdxType,i=t.originalType,s=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),c=p(l),m=n,k=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return l?a.createElement(k,r(r({ref:e},u),{},{components:l})):a.createElement(k,r({ref:e},u))}));function k(t,e){var l=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=l.length,r=new Array(i);r[0]=m;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=t,o[c]="string"==typeof t?t:n,r[1]=o;for(var p=2;p{l.r(e),l.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=l(7462),n=(l(7294),l(4137));const i={slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},r=void 0,o={permalink:"/blog/thinking",source:"@site/blog/2021-08-26-thinking/index.md",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",description:"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"Reality World",permalink:"/blog/tags/reality-world"}],readingTime:79.295,hasTruncateMarker:!1,authors:[{name:"Chunlin Qin",title:"Creator of Reality World",url:"https://github.com/ElvisQin",imageURL:"https://github.com/ElvisQin.png"}],frontMatter:{slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},prevItem:{title:"Conversational computing: a new programming model empower LLM applications",permalink:"/blog/conversational-computing"}},s={authorsImageUrls:[void 0]},p=[{value:"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f",id:"reality-world\u4e0d\u662f\u4ec0\u4e48",level:2},{value:"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01",id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce",level:3},{value:"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",level:3},{value:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",level:2},{value:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",level:3},{value:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",level:3},{value:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",level:3},{value:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",level:3},{value:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",level:3},{value:"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",level:3},{value:"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf",id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf",level:3},{value:"\u62e5\u62b1Rust",id:"\u62e5\u62b1rust",level:2},{value:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",level:2},{value:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"\u53c2\u4e0eReality World\u5f00\u53d1",id:"\u53c2\u4e0ereality-world\u5f00\u53d1",level:2},{value:"\u5173\u4e8e\u878d\u8d44",id:"\u5173\u4e8e\u878d\u8d44",level:2},{value:"\u540e\u8bb0",id:"\u540e\u8bb0",level:2}],u={toc:p},c="wrapper";function d(t){let{components:e,...i}=t;return(0,n.kt)(c,(0,a.Z)({},u,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,(0,n.kt)("img",{src:l(1694).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u53ef\u80fd\u6709\u4e00\u4e9b\u670b\u53cb\u5173\u6ce8\u8fc7\u6211\u8fd9\u4e00\u5e74\u4e00\u76f4\u5728\u6298\u817e\u7684Reality World\u521b\u4e1a\u7684\u4e8b\u60c5\uff0c\u7136\u800c\u5f88\u9057\u61be\u7684\u662f\u4e00\u76f4\u6ca1\u6709\u5206\u4eab\u592a\u591a\u5173\u4e8e\u5b83\u7684\u4fe1\u606f\u3002\u4e00\u6765\u662f\u56e0\u4e3a\u5b83\u6240\u6d89\u53ca\u7684\u6280\u672f\u6709\u6bd4\u8f83\u591a\u7684\u521b\u65b0\u5c1d\u8bd5\uff0c\u5728\u8fd8\u6ca1\u6709\u771f\u6b63\u7684\u6280\u672f\u5f00\u53d1\u5b9e\u8df5\u4e4b\u524d\u5bb9\u6613\u5f15\u8d77\u6bd4\u8f83\u591a\u7684\u4e89\u8bae\uff1b\u4e8c\u6765\u662f\u56e0\u4e3a\u53bb\u5e74\u5f97\u5230\u4e86\u4e00\u4e9b\u5927\u8d44\u672c\u6781\u5927\u7684\u5174\u8da3\uff0c\u56e0\u6b64\u6211\u60f3\u7740\u4e00\u9f13\u4f5c\u6c14\u7b49\u62ff\u5230\u6295\u8d44\u4e4b\u540e\u518d\u516c\u5e03\u4e00\u4e9b\u4fe1\u606f\u3002\u5f53\u7136\u56e0\u4e3a\u5404\u79cd\u539f\u56e0\u5230\u73b0\u5728\u4e5f\u8fd8\u6ca1\u6709\u8c08\u5b9a\u6295\u8d44\uff0c\u6240\u4ee5\u8fd1\u51e0\u4e2a\u6708\u6211\u5c31\u5c06\u5168\u90e8\u7cbe\u529b\u7528\u4e8e\u5f00\u53d1\u4e86\u3002\u7ecf\u8fc7\u51e0\u4e2a\u6708\u7684\u8270\u82e6\u594b\u6218\uff0c\u4eca\u5929\u7ec8\u4e8e\u6709\u673a\u4f1a\u53ef\u4ee5\u7ed9\u5927\u5bb6\u5206\u4eab\u4e00\u4e9b\u6211\u7684\u60f3\u6cd5\uff0c\u4ee5\u53ca\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u8fc7\u7a0b\u3002\u5f53\u7136Reality World\u8fd8\u5904\u4e8e\u975e\u5e38\u65e9\u671f\u548c\u539f\u578b\u7684\u9636\u6bb5\uff0c\u6211\u9884\u8ba1\u8fd8\u4f1a\u518d\u8fed\u4ee3\u51e0\u4e2a\u7248\u672c\u5230v0.5.0\u5de6\u53f3\u624d\u4f1a\u5f00\u59cb\u6b63\u5f0f\u516c\u5e03\u6216\u8005\u5185\u6d4b\uff0c\u6240\u4ee5\u8fd9\u91cc\u6211\u4e5f\u4e0d\u4f1a\u6d89\u53ca\u592a\u591a\u6280\u672f\u7ec6\u8282\uff0c\u4f46\u662f\u6211\u53ef\u4ee5\u5206\u4eab\u6211\u4eec\u60f3\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u4ee5\u53ca\u4e3a\u4ec0\u4e48\u8981\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0c\u5e76\u5927\u6982\u8bf4\u660e\u4e00\u4e9b\u601d\u8def\uff0c\u8fd9\u6837\u5927\u5bb6\u5e94\u8be5\u80fd\u591f\u521d\u6b65\u4e86\u89e3Reality World\u662f\u4ec0\u4e48\uff0c\u540c\u65f6\u6211\u89c9\u5f97\uff0c\u5bf9\u8fd9\u4e9b\u95ee\u9898\u7684\u601d\u8003\u5176\u5b9e\u662f\u975e\u5e38\u6709\u4ef7\u503c\u7684\u90e8\u5206\u3002"),(0,n.kt)("h2",{id:"reality-world\u4e0d\u662f\u4ec0\u4e48"},"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6211\u8fc7\u53bb\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\uff0c\u4ee5\u53caReality Create\u4e5f\u5305\u542b\u76843D\u652f\u6301\uff0c\u5728\u6211\u4e0e\u6295\u8d44\u4eba\u6216\u8005\u5176\u4ed6\u670b\u53cb\u4ea4\u6d41\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5927\u5bb6\u666e\u904d\u7684\u5370\u8c61\u662f\u8fd9\u662f\u4e00\u4e2a\u65b0\u7684\u6e38\u620f\u5f15\u64ce\uff0c\u6240\u4ee5\u5927\u5bb6\u7684\u601d\u8def\u5c31\u662f\u4f60\u8ddfUnity\uff0cUnreal Engine\u4ee5\u53ca\u751a\u81f3\u5305\u62ec\u56fd\u5185\u8fd1\u51e0\u5e74\u4e5f\u6709\u5f88\u591a\u6e38\u620f\u5f15\u64ce\u521b\u4e1a\u7684\u4e00\u4e9b\u533a\u522b\u6216\u8005\u8bf4\u7ade\u4e89\u5173\u7cfb\uff0c\u800c\u4f1a\u5ffd\u89c6\u6211\u4eec\u6280\u672f\u4e0a\u53cd\u800c\u662f\u66f4\u52a0\u6838\u5fc3\u548c\u521b\u65b0\u7684\u90e8\u5206\uff0c\u6240\u4ee5\u8fd9\u4e2a\u8bef\u533a\u7684\u6f84\u6e05\u975e\u5e38\u91cd\u8981\uff1a"),(0,n.kt)("h3",{id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce"},"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01"),(0,n.kt)("p",null,"\u867d\u7136\u6211\u672c\u4eba\u591a\u5e74\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\u90fd\u662f\u4e0e\u6e38\u620f\u5f15\u64ce\u548c\u6e32\u67d3\u76f8\u5173\uff0c\u540c\u65f6\u73b0\u4ee3\u6e38\u620f\u5f15\u64ce\u5de5\u4e1a\u7684\u6280\u672f\u4e5f\u5728\u4e0d\u65ad\u53d1\u5c55\uff0c\u4f46\u662f\u6211\u4e00\u76f4\u89c9\u5f97\u5236\u7ea6\u7528\u6237\u968f\u5fc3\u6240\u6b32\u8868\u8fbe\u5185\u5bb9\u548c\u903b\u8f91\u7684\u90e8\u5206\u4e3b\u8981\u8fd8\u662f\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7a0b\u5e8f\u8fd0\u884c\u7684\u673a\u5236\uff0c\u800c\u6e38\u620f\u5f15\u64ce\u67b6\u6784\u548c\u6d41\u7a0b\u672c\u8eab\u867d\u7136\u4e5f\u5f88\u590d\u6742\uff0c\u4f46\u8fd9\u90e8\u5206\u90fd\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u7684\uff0c\u4f8b\u5982\u9664\u4e86\u7f16\u7a0b\u90e8\u5206\uff0c\u4e00\u4e9b\u7f8e\u672f\u751a\u81f3\u7b56\u5212\u4e5f\u662f\u80fd\u591f\u6bd4\u8f83\u597d\u7684\u4f7f\u7528\u5f15\u64ce\u7684\u4e00\u4e9b\u76f8\u5173\u529f\u80fd\uff0c\u4f46\u662f\u4e0e\u4e4b\u76f8\u53cd\u7684\u662f\uff0c\u903b\u8f91\u7684\u8868\u8fbe\u548c\u7f16\u7a0b\u901a\u5e38\u8fd8\u662f\u9700\u8981\u4e13\u95e8\u7684\u7a0b\u5e8f\u5458\u3002\u867d\u7136\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u6e38\u620f\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6216\u8005\u914d\u7f6e\u7684\u5f62\u5f0f\u90e8\u5206\u5b9e\u73b0\u975e\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f46\u8fd9\u6837\u7684\u67b6\u6784\u8fd8\u662f\u5f88\u96be\u505a\u5230\u901a\u7528\uff0c\u663e\u7136\u6570\u5b57\u4e16\u754c\u8fd8\u6709\u7740\u975e\u5e38\u591a\u7684\u5404\u5f0f\u5404\u6837\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u9700\u6c42\u9700\u8981\u4e00\u4e9b\u901a\u7528\u7684\u903b\u8f91\u8868\u8fbe\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u7684\u6838\u5fc3\u662f\u4e00\u5957\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u90e8\u5206\u7406\u89e3\u4e3a\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u4f46\u662f\u4e0e\u4f20\u7edf\u5355\u7eaf\u89e3\u91ca\u6e90\u4ee3\u7801\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u865a\u62df\u673a\u76f8\u6bd4\uff0c\u5b83\u5305\u542b\u4e00\u4e9b\u6e90\u4ee3\u7801\u89e3\u91ca\u7ffb\u8bd1\u4e4b\u5916\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6743\u9650\u9a8c\u8bc1\u3001\u6c99\u76d2\u5b89\u5168\u4e0e\u4e92\u64cd\u4f5c\u3001\u5206\u5e03\u5f0f\u5185\u5bb9\u5206\u53d1\u4e0e\u540c\u6b65\u3001\u7ec4\u4ef6\u7684\u4f9d\u8d56\u7ba1\u7406\u548c\u52a8\u6001\u52a0\u8f7d\u7b49\u7b49\uff0c\u56e0\u6b64\u53ef\u4ee5\u7406\u89e3\u4e3aReality World\u662f\u4e00\u4e2a\u50cf\u533a\u5757\u94fe\u7c7b\u4f3c\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff1b\u540c\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u6e90\u4ee3\u7801\u7684\u7ffb\u8bd1\u89e3\u91ca\u90e8\u5206\uff0cReality World\u4e5f\u6709\u7740\u5f88\u591a\u533a\u522b\u4e8e\u4f20\u7edf\u52a8\u6001\u8bed\u8a00\u865a\u62df\u673a\u89e3\u91ca\u7684\u6d41\u7a0b\u548c\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u8fd9\u5957\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6211\u4eec\u4f1a\u6784\u5efa3D\u5f15\u64ce\u7684\u80fd\u529b\u4ee5\u4f7f\u7528\u6237\u53ef\u4ee5\u5f00\u53d13D\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u8fd9\u90e8\u5206\u6280\u672f\u8ddf\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u4f7f\u7528\u7684\u6280\u672f\u4e0d\u4f1a\u6709\u592a\u5927\u5dee\u5f02\uff0c\u5f53\u7136\u56e0\u4e3a\u8fd0\u884c\u65f6\u73af\u5883\u4e0d\u540c\uff0c\u4e0e\u4e4b\u76f8\u5173\u76843D\u5f15\u64ce\u7684\u67b6\u6784\u548c\u6d41\u7a0b\u80af\u5b9a\u4f1a\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u9884\u671f\u5c06\u6765Reality Create\u7684\u6d41\u7a0b\u5e94\u8be5\u662f\u53ef\u4ee5\u6709\u4e00\u4e9b\u4e0d\u540c\u7684\u521b\u65b0\u4f53\u9a8c\u7684\u3002"),(0,n.kt)("p",null,"\u9664\u4e863D\u6e32\u67d3\uff0cReality Create\u7684\u8ba1\u5212\u4e5f\u53ef\u4ee5\u5f00\u53d12D\u5e94\u7528\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528\u4e00\u79cd\u7edf\u4e00\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6765\u7edf\u4e003D\u548c\u4f20\u7edf2D\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u6240\u4ee5\u5b83\u786e\u5207\u7684\u5b9a\u4f4d\u5e94\u8be5\u662f\u4e00\u4e2a\u57fa\u4e8e\u5206\u5e03\u5f0f\u7684\u3001\u901a\u7528\u7684\u5e94\u7528\u6784\u9020\u548c\u5f00\u53d1\u5e73\u53f0\uff0c\u800c\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u3002"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5173\u7684\u662f\uff0c"),(0,n.kt)("h3",{id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"},"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\uff0c\u81f3\u5c11\u76ee\u524d\u7684\u5143\u5b87\u5b99\u5927\u90e8\u5206\u90fd\u662f\u504f\u5411\u4e8e3D\uff0c\u7136\u540e\u671f\u671b\u4eba\u4eec\u6709\u4e9b\u66f4\u591a\u6c89\u6d78\u5f0f\u7684\u865a\u62df\u751f\u6d3b\u3002\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u8ddfReality World\u7684\u7406\u5ff5\u751a\u81f3\u662f\u76f8\u53cd\u7684\uff0c\u4ece\u540d\u5b57\u5c31\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u9009\u62e9Reality\u8fd9\u4e2a\u8bcd\uff0c\u662f\u5e0c\u671b\u6211\u4eec\u80fd\u591f\u5f15\u5bfc\u7528\u6237\u66f4\u591a\u5173\u6ce8\u73b0\u5b9e\uff0cReality World\u7684\u76ee\u6807\u662f\u5e0c\u671b\u901a\u8fc7\u63d0\u4f9b\u66f4\u7b80\u5316\u3001\u66f4\u5177\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f7f\u66f4\u591a\u7684\u4eba\u80fd\u591f\u968f\u5fc3\u6240\u6b32\u5730\u8868\u8fbeTA\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\uff0c\u5e76\u5c06\u8fd9\u4e9b\u7406\u89e3\u8f6c\u5316\u4e3a\u53ef\u4ea4\u4e92\u7684\u6570\u5b57\u7684\u5f62\u5f0f\uff0c\u4e0e\u5176\u4ed6\u66f4\u591a\u4eba\u5206\u4eab\uff0c\u6211\u89c9\u5f97\u5e94\u7528\u7684\u5f00\u53d1\u548c\u6784\u9020\u4e0e\u6587\u5b57\u3001\u56fe\u7247\u3001\u89c6\u9891\u4ee5\u53ca\u5176\u4ed6\u4fe1\u606f\u8f7d\u4f53\u4e00\u6837\uff0c\u6700\u5927\u7684\u4ef7\u503c\u4ecd\u7136\u662f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u6700\u6df1\u523b\u7684\u601d\u8003\u3001\u667a\u6167\u548c\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u6211\u5fc3\u91cc\u9762\u5bf9Reality World\u7684\u6700\u7cbe\u51c6\u7684\u63cf\u8ff0\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A self-evolving interoperable system.")),(0,n.kt)("p",null,"\u6216\u8005\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperating with multi-applications in a modular and composable system.")),(0,n.kt)("p",null,"\u4e5f\u8bb8\u770b\u4e86\u540e\u9762\u7684\u4e00\u4e9b\u4ecb\u7ecd\u4f60\u80fd\u591f\u5927\u6982\u7406\u89e3\u4e0a\u9762\u4e24\u53e5\u8bdd\u7684\u542b\u4e49"),(0,n.kt)("h2",{id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"},"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(1072).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u662fReality World\u6700\u6838\u5fc3\u7684\u673a\u5236"),(0,n.kt)("p",null,"\u6211\u5370\u8c61\u4e2d\uff0c\u5de5\u4e1a\u754c\u548c\u5a92\u4f53\u5f00\u59cb\u771f\u6b63\u8ba8\u8bba\u4e92\u64cd\u4f5c\u6027\u53ca\u5176\u76f8\u5173\u7684\u4e00\u4e9b\u8bba\u636e\uff0c\u5927\u90e8\u5206\u90fd\u6765\u6e90\u4e8eTim Sweeney\u7684\u90a3\u7bc7\u6f14\u8bb2\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/10.1145/3306307.3339844"},"https://dl.acm.org/doi/10.1145/3306307.3339844")),(0,n.kt)("p",null,"\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0cReality World\u7684\u76ee\u6807\u8ddfTim\u7684\u4e00\u4e9b\u63cf\u8ff0\u548c\u613f\u666f\u662f\u76f8\u4f3c\u7684\uff0c\u4f46\u4e5f\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6839\u672c\u4e0d\u540c\uff0c\u6211\u9996\u5148\u63cf\u8ff0\u8ddfTim\u6f14\u8bb2\u7684\u4e00\u4e9b\u5173\u7cfb\u548c\u903b\u8f91\uff0c\u7136\u540e\u518d\u4ecb\u7ecd\u6211\u4eec\u7684\u601d\u8003\uff0c\u901a\u8fc7\u8fd9\u4e9b\u95ee\u9898\u5c31\u53ef\u4ee5\u6bd4\u8f83\u81ea\u7136\u5730\u7406\u89e3Reality World\u7684\u76ee\u6807\u4ee5\u53ca\u60f3\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\u6211\u7b2c\u4e00\u6b21\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u662f\u5728\u53bb\u5e747\u6708\u5de6\u53f3\uff0c\u90a3\u4e2a\u65f6\u5019\u6211\u7684\u57fa\u672c\u67b6\u6784\u7684\u6784\u601d\u5df2\u7ecf\u521d\u6b65\u5b8c\u6210\uff0c\u5c24\u5176\u662f\u6700\u6838\u5fc3\u4e5f\u662f\u6700\u91cd\u8981\u7684\u4e00\u6b65\u57fa\u7840\u5df2\u7ecf\u8bbe\u8ba1\u597d\uff0c\u5f53\u65f6\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u611f\u5230\u5f88\u591a\u5171\u9e23\uff0c\u4e5f\u662f\u5bf9\u81ea\u5df1\u7684\u4e00\u79cd\u5f88\u5927\u7684\u6fc0\u52b1\uff0c\u6bd5\u7adf\u6709\u5bf9\u6280\u672f\u548c\u884c\u4e1a\u90fd\u6709\u975e\u5e38\u7ecf\u9a8c\u548c\u5f71\u54cd\u529b\u7684\u5927\u4f6c\u4e5f\u6709\u7c7b\u4f3c\u7684\u601d\u8003\u548c\u884c\u52a8\u3002\u4f46\u4ece\u53bb\u5e74\u5230\u73b0\u5728\uff0c\u6211\u4eec\u8fd8\u662f\u6cbf\u7740\u6211\u4eec\u65e9\u5148\u7684\u6280\u672f\u601d\u8def\uff0c\u57fa\u672c\u4e0a\u5e76\u6ca1\u6709\u53bb\u5173\u6ce8\u548c\u53c2\u8003\u592a\u591aEpic\u7684\u4e1c\u897f\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u4ece\u6280\u672f\u65b9\u6848\u5230\u76ee\u6807\u90fd\u662f\u6709\u5f88\u591a\u4e0d\u540c\u3002"),(0,n.kt)("p",null,"\u5728\u6280\u672f\u5c42\u9762\uff0cTim\u8ba4\u4e3a\u8fd9\u6837\u7684\u76ee\u6807\u5927\u6982\u53ef\u80fd\u9700\u898110\u5e74\u624d\u80fd\u5b8c\u6210\uff0c\u4f46Epic\u4f1a\u671d\u7740\u8fd9\u4e2a\u76ee\u6807\u9010\u6b65\u903c\u8fd1\u3002Epic\u7684\u8def\u7ebf\u5927\u6982\u662f\u51e0\u6b65\uff1a\u9996\u5148\u5c06\u4e00\u4e9b\u504f\u793e\u4ea4\u6216\u8005\u73a9\u5bb6\u7684\u975e\u4e13\u4e1a\u6e38\u620f\u5f00\u53d1\u8005\u8f6c\u79fb\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\uff0c\u8fd9\u90e8\u5206\u5f00\u53d1\u8005\u90fd\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u6e38\u620f\u5185\u90e8\u800c\u4e0d\u662f\u5355\u72ec\u4f7f\u7528Unreal Engine\u53bb\u521b\u4f5c\uff0c\u8fd9\u4e2a\u6a21\u5f0f\u5176\u5b9e\u7c7b\u4f3cRoblox\u7684\u6a21\u5f0f\uff0c\u5b83\u4e5f\u662f\u4e00\u79cd\u6e38\u620f\u5f15\u64ce\u8fd9\u79cd\u5546\u4e1a\u6a21\u5f0f\u7684\u8f6c\u578b\uff1a\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u53ea\u662f\u4e00\u4e2a\u5355\u673a\u7684\u751f\u6210\u5e94\u7528\u7a0b\u5e8f\u7684\u8f6f\u4ef6\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5185\u5bb9\u7531\u81ea\u5df1\u53bb\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837\u6e38\u620f\u5f15\u64ce\u4ec5\u4f5c\u4e3a\u4e00\u4e2a\u5de5\u5177\uff0c\u5b83\u53ea\u53c2\u4e0e\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u800c\u65e0\u6cd5\u53c2\u4e0e\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u56e0\u6b64\u65e0\u6cd5\u5f62\u6210\u751f\u6001\uff0c\u6240\u4ee5\u5c3d\u7ba1\u4e00\u4e9b\u5f15\u64ce\u6709\u5e9e\u5927\u7684\u5f00\u53d1\u8005\u6570\u91cf\u548c\u7fa4\u4f53\uff0c\u4f46\u662f\u8fd9\u79cd\u6570\u91cf\u5e76\u6ca1\u6709\u5f88\u6709\u6548\u7684\u65b9\u5f0f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u751f\u6001\u3002\u7136\u800cRoblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f60\u7684\u5185\u5bb9\u5fc5\u987b\u5206\u53d1\u5230\u8fd9\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5e76\u7531\u7279\u5b9a\u7684\u5ba2\u6237\u7aef\u8fd0\u884c\u65f6\u73af\u5883\u6765\u8fd0\u884c\uff0c\u800c\u65e0\u6cd5\u50cf\u5355\u72ec\u7684\u6e38\u620f\u5f15\u64ce\u90a3\u6837\u81ea\u884c\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837Roblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5c31\u53ef\u4ee5\u53c2\u4e0e\u6574\u4e2a\u5185\u5bb9\u7684\u5168\u90e8\u751f\u547d\u5468\u671f\uff0c\u8fd9\u6837\u5c31\u5f62\u6210\u751f\u6001\uff0c\u5176\u4ed6\u7684\u670d\u52a1\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u5957\u5206\u5e03\u5f0f\u7cfb\u7edf\u8fdb\u884c\u63d0\u4f9b\uff0c\u800c\u5bf9\u7528\u6237\u7684\u597d\u5904\u4e5f\u662f\u7b80\u5316\u4e86\u5185\u5bb9\u7684\u5206\u53d1\u90e8\u7f72\uff0c\u4ee5\u53ca\u66f4\u591a\u4fbf\u6377\u7684\u96c6\u6210\u670d\u52a1\uff0c\u4f8b\u5982\u4e0e\u5176\u4ed6\u73a9\u5bb6\u7684\u4e92\u52a8\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9606).Z,width:"1932",height:"1162"})),(0,n.kt)("p",null,"\u300a\u5821\u5792\u4e4b\u591c\u300bCreative\u6a21\u5f0f"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8981\u4f7f\u7528\u6237\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fdb\u884c\u5185\u5bb9\u5f00\u53d1\uff0c\u5c31\u5e26\u6765\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a\u4e00\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u95ee\u9898\uff0c\u4e8c\u662f\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\u3002\u8981\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fd0\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u672a\u53d7\u4fe1\u4efb\u7684\u4ee3\u7801\uff0c\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u96be\u7684\u95ee\u9898\uff0c\u8fd9\u4e5f\u6d89\u53ca\u5230Reality World\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u6838\u5fc3\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9467).Z,width:"1446",height:"486"})),(0,n.kt)("p",null,"\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"NaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002"),(0,n.kt)("p",null,"Web Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9875).Z,width:"1920",height:"1079"})),(0,n.kt)("p",null,"Epic\u63a8\u51faVerse language"),(0,n.kt)("p",null,"\u56de\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\uff0cEpic\u663e\u7136\u4e0d\u53ef\u80fd\u8ba9\u73a9\u5bb6\u4f7f\u7528Unreal Engine\u7684C++\u6216\u8005blueprint\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u5185\u5b58\u73af\u5883\u4e2d\u8fd0\u884c\uff0cUnreal Engine\u76ee\u524d\u4e5f\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\u65b9\u6848\uff0c\u56e0\u6b64Epic\u9700\u8981\u5f00\u53d1\u4e00\u5957\u65b0\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u5c31\u662f\u4eca\u5e74\u65e9\u4e9b\u65f6\u5019\u53d1\u5e03\u7684Verse programming language\u3002Epic\u4e3a\u6b64\u6316\u6765\u4e86Haskell\u7684\u4f5c\u8005Simon Peyton Jones\uff0c\u4ee5\u53ca\u4e4b\u524d\u6536\u8d2d\u7684\u4e00\u4e2a\u4e3aUnreal Engine\u5f00\u53d1\u811a\u672c\u8bed\u8a00\u7684\u56e2\u961fSkookumScript\uff0c\u636e\u8bf4\u8fd8\u6709\u5199V8\u5185\u6838\u7684\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u5173\u4e8eVerse language\u672c\u8eab\uff0c\u76ee\u524d\u8fd8\u6ca1\u6709\u592a\u591a\u4fe1\u606f\uff0c\u4f46\u662f\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u7684\u4f7f\u547d\u4e00\u662f\u4e3a\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u521b\u4f5c\u63d0\u4f9b\u4e00\u79cd\u5b89\u5168\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u800c\u4e14\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u5fc5\u7136\u5305\u542b\u4e00\u5b9a\u7684\u6c99\u76d2\u673a\u5236\uff0c\u6765\u4fdd\u8bc1\u5b89\u5168\u6027\u3002"),(0,n.kt)("p",null,"\u534f\u4f5c\u7684\u7b2c\u4e8c\u4e2a\u8981\u6c42\u662f\u4e92\u64cd\u4f5c\uff0c\u4e92\u64cd\u4f5c\u6027\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"If two or more systems use commondata formatsandcommunication protocolsand are capable of communicating with each other, they exhibit",(0,n.kt)("em",{parentName:"p"},"syntactic interoperability"),". XML and SQL are examples of common data formats and protocols.")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u548c\u8f6f\u4ef6\u9694\u79bb\u901a\u5e38\u662f\u76f8\u4e92\u77db\u76fe\u7684\uff0c\u4e92\u64cd\u4f5c\u8868\u73b0\u4e3a\u6211\u5e0c\u671b\u66f4\u7b80\u5355\u66f4\u65b9\u4fbf\u5730\u8bbf\u95ee\u522b\u4eba\u7684\u6570\u636e\u6216\u63a5\u53e3\uff0c\u800c\u9694\u79bb\u5219\u5047\u8bbe\u9664\u6211\u4e4b\u5916\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u53ef\u4fe1\u7684\uff0c\u4e0d\u8981\u8f7b\u6613\u5730\u8bbf\u95ee\uff0c\u6216\u8005\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\u4f7f\u8fd9\u79cd\u8bbf\u95ee\u7684\u4ee3\u4ef7\u548c\u96be\u5ea6\u589e\u52a0\u3002\u5c24\u5176\u5728\u6e38\u620f\u8fd9\u79cd\u5b9e\u65f6\u7684\u8fd0\u884c\u73af\u5883\uff0c\u8fd9\u79cd\u4ee3\u4ef7\u548c\u96be\u5ea6\u5f80\u5f80\u610f\u5473\u7740\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"Tim\u57282019\u5e74\u7684\u6f14\u8bb2\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u540e\u7eed\u57fa\u4e8eVerse\u7684\u4ee3\u7801\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0cReality World\u90fd\u6709\u7740\u4e0d\u540c\u7684\u6280\u672f\u601d\u8003\u548c\u65b9\u6848\u3002"),(0,n.kt)("h3",{id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"},"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"),(0,n.kt)("p",null,"\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cReality World\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"},"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u6027\u8fd9\u4e2a\u6982\u5ff5\uff0c\u6211\u8ddf\u5927\u90e8\u5206\u6295\u8d44\u4eba\u89e3\u91ca\u57fa\u672c\u4e0a\u90fd\u662f\u5f88\u96be\u7406\u89e3\u7684\uff0c\u5f53\u7136\u8fd9\u91cc\u53ef\u80fd\u6211\u5bf9\u4e92\u64cd\u4f5c\u6027\u8d4b\u4e88\u4e86\u66f4\u591a\u7684\u610f\u4e49\u3002\u4ece\u7a0b\u5e8f\u673a\u5236\u4e0a\u6765\u8bb2\uff0c\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u6d89\u53ca\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c\u76f8\u4e92\u8c03\u7528\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5927\u90e8\u5206\u8bed\u8a00\u90fd\u53ef\u4ee5\u901a\u8fc7C\u63a5\u53e3\u5b9e\u73b0\u76f8\u4e92\u8c03\u7528\uff0c\u518d\u5f80\u4e0a\u4e00\u70b9\uff0c\u4efb\u4f55\u7a0b\u5e8f\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\u7136\u540e\u5185\u90e8\u8fdb\u884c\u683c\u5f0f\u89e3\u91ca\uff0c\u4e5f\u4ecd\u7136\u662f\u80fd\u591f\u8fdb\u884c\u901a\u4fe1\u7684\u3002\u5b9e\u9645\u4e0a\u4e92\u8054\u7f51\u7684\u673a\u5236\u5c31\u662f\u5982\u6b64\uff0cOSI\uff08Open systems Interconnection\uff09\u7684\u673a\u5236\u5c31\u662f\u5b9e\u73b0\u4e86\u4efb\u4f55\u8ba1\u7b97\u673a\u6216\u8005\u4efb\u610f\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5b57\u7b26\u4e32\u901a\u4fe1\uff0c\u4ece\u800c\u89e3\u51b3\u4e86\u6574\u4e2a\u8ba1\u7b97\u673a\u7f51\u7edc\u4e92\u8054\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u7684\u5176\u4e2d\u4e00\u4e2a\u91cd\u8981\u673a\u5236\uff0c\u5c31\u662f\u8981\u8ba9\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\uff0c\u5176\u5b9a\u4e49\u7684\u6570\u636e\u63a5\u53e3\u975e\u5e38\u8f7b\u6613\u5730\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u8bbf\u95ee\uff0c\u540c\u65f6\u7ed3\u5408\u4e0a\u9762\u7684\u6c99\u76d2\u6280\u672f\u4fdd\u8bc1\u8fd9\u79cd\u6570\u636e\u8bbf\u95ee\u7684\u5b89\u5168\uff0c\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u7684\u6c99\u76d2\u6280\u672f\u4e0d\u80fd\u53ea\u662f\u5728\u6700\u5e95\u5c42\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9984).Z,width:"1954",height:"864"})),(0,n.kt)("p",null,"Pixar USD"),(0,n.kt)("p",null,"\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"API\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-text"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("p",null,"\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3819).Z,width:"2157",height:"1113"})),(0,n.kt)("p",null,"Modular"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cReality World\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002"),(0,n.kt)("p",null,"\u7ed3\u5408\u524d\u9762\u8ba8\u8bba\u7684\u6c99\u76d2\u6280\u672f\u3001\u4e92\u64cd\u4f5c\u3001\u788e\u7247\u5316\u7b49\u7b49\u673a\u5236\uff0cReality World\u5e0c\u671b\u80fd\u591f\u901a\u8fc7\u4e00\u4e9b\u521b\u65b0\u63a2\u7d22\uff0c\u6784\u5efa\u8d77\u4e00\u4e2a\u66f4\u597d\u7684\u4e92\u64cd\u4f5c\u5e73\u53f0\uff0c\u4f7f\u5f97\u4e0a\u9762\u7684\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u5b83\u770b\u8d77\u6765\u50cf\u662f\u57fa\u4e8eOSI\u4e4b\u4e0a\u6dfb\u52a0\u7684\u4e00\u4e2a\u4e92\u64cd\u4f5c\u5c42\uff0c\u5728\u8fd9\u4e2a\u4e92\u64cd\u4f5c\u5c42\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u64cd\u4f5c\u7684\u662f\u6765\u81ea\u5176\u4ed6\u5e94\u7528\u7684\u5185\u5b58\u6570\u636e\uff0c\u5c31\u50cf\u4f60\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u6570\u636e\u4e00\u6837\u7b80\u5355\uff0c\u5c3d\u7ba1\u8fd9\u4e2a\u6570\u636e\u53ef\u80fd\u6765\u81ea\u4e8e\u5176\u4ed6\u7684\u670d\u52a1\u5668\u3002"),(0,n.kt)("h2",{id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(2382).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u5bf9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u5f88\u591a\u8c03\u6574"),(0,n.kt)("p",null,"\u6211\u4eec\u7a0b\u5e8f\u5458\uff0c\u7ec8\u5176\u4e00\u751f\u53ef\u80fd\u90fd\u5e0c\u671b\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u7a0b\u5e8f\u5230\u5e95\u662f\u600e\u4e48\u8fd0\u884c\u7684\uff0c\u8fd9\u79cd\u7406\u89e3\u4e0d\u5149\u80fd\u591f\u8ba9\u6211\u4eec\u66f4\u9ad8\u6548\u5730\u7f16\u5199\u66f4\u5065\u58ee\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u521b\u9020\u8f6f\u4ef6\u7684\u4ef7\u503c\uff0c\u540c\u65f6\uff0c\u7f16\u7a0b\u7684\u673a\u5236\u672c\u8eab\u5145\u6ee1\u7740\u65e0\u7a77\u7684\u9b45\u529b\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4eba\u7c7b\u6709\u53f2\u4ee5\u6765\u80fd\u591f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u590d\u6742\u7684\u601d\u7ef4\u548c\u903b\u8f91\u7684\u6700\u597d\u7684\u673a\u5236\u4e4b\u4e00\uff0c\u5b83\u5c06\u4eba\u7c7b\u5bf9\u7269\u7406\u4e16\u754c\u7684\u7406\u89e3\u53ca\u5176\u5f62\u6210\u7684\u667a\u6167\u8f6c\u5316\u4e3a\u4e3a\u4eba\u7c7b\u670d\u52a1\u7684\u5de5\u5177\u548c\u529b\u91cf\uff0c\u8fd9\u662f\u6211\u4eec\u70ed\u7231\u7f16\u7a0b\u7684\u5176\u4e2d\u4e00\u4e9b\u539f\u56e0\u3002"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u6765\uff0c\u5bf9\u4e8e\u7f16\u7a0b\uff0c\u6211\u4e00\u76f4\u6709\u4e24\u79cd\u4e0d\u4e00\u6837\u7684\u60c5\u611f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6211\u4e00\u76f4\u4e0d\u559c\u6b22\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u6211\u66f4\u559c\u6b22\u5f00\u53d1\u80fd\u591f\u7528\u4e8e\u6784\u9020\u8f6f\u4ef6\u7684\u8f6f\u4ef6")),(0,n.kt)("p",null,"\u4eca\u5929\uff0cReality World\u7684\u7b2c\u4e8c\u4e2a\u6838\u5fc3\u5173\u6ce8\u70b9\u548c\u57fa\u7840\u5c31\u662f\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u65b0\u7684\u63a2\u7d22\u3002\u4e16\u754c\u4e0a\u53ea\u6709\u5927\u7ea6\u4e0d\u52300.5%\u7684\u4eba\u662f\u4f1a\u7f16\u5199\u4ee3\u7801\u7684\uff0c\u7ea63000\u4e07\u5de6\u53f3\uff0c\u6240\u4ee5\u6570\u5b57\u5316\u8868\u8fbe\u7684\u6f5c\u529b\u8fd8\u8fdc\u8fdc\u6ca1\u6709\u88ab\u53d1\u6325\u51fa\u6765\u3002\u5982\u679c\u6211\u4eec\u5c06\u8fd9\u4e2a\u6570\u5b57\u63d0\u5347\u52305\u4ebf~10\u4ebf\uff0c\u770b\u770b\u8fd8\u6709\u54ea\u4e9b\u53d8\u9769\u9700\u8981\u53d1\u751f\uff0c\u53ef\u80fd\u4e0e\u4f60\u60f3\u8c61\u4e2d\u4e0d\u592a\u4e00\u6837\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u672c\u8eab\u53ef\u80fd\u5e76\u4e0d\u662f\u5236\u7ea6\u56e0\u7d20\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"},"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u5de5\u4f5c\u7ecf\u5386\uff0c\u6211\u5199\u8fc7C#\u3001C\u3001C++\u3001Ruby\u3001Lua\u3001Rust\u7b49\uff0c\u4ee5\u53ca\u6700\u8fd1\u4e00\u5e74\u591a\uff0c\u6211\u51e0\u4e4e\u770b\u4e86\u6240\u6709\u80fd\u4e70\u5230\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u7b49\u76f8\u5173\u7684\u4e66\u7c4d\uff08\u540e\u9762\u4f1a\u4ecb\u7ecd\uff09\u3002\u5728\u6211\u5199\u8fc7\u7684\u4ee3\u7801\u4e2d\uff0c\u603b\u6709\u4e00\u79cd\u611f\u89c9\uff0c\u4e0d\u7ba1\u6211\u770b\u8fc7\u591a\u5c11\u8bbe\u8ba1\u6a21\u5f0f\u6216\u8005\u67b6\u6784\u76f8\u5173\u7684\u8d44\u6599\uff0c\u6211\u603b\u662f\u89c9\u5f97\u5f88\u96be\u5199\u51fa\u90a3\u79cd\u903b\u8f91\u7ed3\u6784\u7279\u522b\u6e05\u6670\u7684\u67b6\u6784\u548c\u4ee3\u7801\uff0c\u56e0\u6b64\u7f16\u7a0b\u4f53\u9a8c\u50cf\u662f\u603b\u6709\u4e00\u4e2a\u4ec0\u4e48\u4e1c\u897f\uff0c\u5835\u5728\u6211\u7684\u5fc3\u91cc\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u77e5\u4e4e "),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/people/16d0cb25df98c0c909e60b135a5800c5"},"@\u5927\u5bbd\u5bbd")),(0,n.kt)("p",null," \u6709\u4e00\u7bc7\u56de\u7b54\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/29888990/answer/703226836"},"\u5982\u4f55\u770b\u5f85Erlang\u4e4b\u7236Joe Armstrong\u89c9\u5f97OO\u7f16\u7a0b\u5f88\u70c2\uff1f"),"\uff0c\u5176\u4e2d\u5f15\u7528\u5230Erlang\u4e4b\u7236Joe Armstrong\u7684\u4e00\u6bb5\u91c7\u8bbf\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/"},"Ralph Johnson, Joe Armstrong on the State of OOP")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Alan Kay himself wrote this famous thing and said ",(0,n.kt)("strong",{parentName:"p"},'"The notion of object oriented programming is completely')," ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"misunderstood"),(0,n.kt)("strong",{parentName:"p"},". It's not about objects and classes, it's all about messages"),'". He wrote that and he said that the initial ',(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"reaction")," to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.")),(0,n.kt)("p",null,"Alan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(6081).Z,width:"1155",height:"697"})),(0,n.kt)("p",null,"Erlang\u4e4b\u7236Joe Armstrong\uff08\u53f3\uff09"),(0,n.kt)("p",null,"Erlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about")),(0,n.kt)("p",null,"\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002Reality World\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002"),(0,n.kt)("h3",{id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u800c\u8a00\uff0c\u5f53\u524d\u6709\u5f88\u591aScratch\u7f16\u7a0b\u5e73\u53f0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7b80\u5355\u7684\u4efb\u52a1\uff1a\u5373\u53ea\u6709\u5c11\u91cf\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u4e14\u901a\u5e38\u53ea\u6709\u4e00\u4e2a\u6216\u5c11\u6570\u51e0\u4e2a\u51fd\u6570\u7684\u4efb\u52a1\uff0c\u5927\u90e8\u5206\u6709\u4e00\u4e9b\u57fa\u672c\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u80fd\u529b\u7684\u4eba\u662f\u53ef\u4ee5\u5728\u5f88\u77ed\u65f6\u95f4\u5185\u5b66\u4f1a\u7684\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u7eaf\u7684\u903b\u8f91\u8ba1\u7b97\u5e76\u4e0d\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002\u5728\u300a\u8ba1\u7b97\u673a\u7a0b\u5e8f\u7684\u6784\u9020\u548c\u89e3\u91ca\u300b\u4e00\u4e66\u4e2d\u6307\u51fa\uff0c\u7f16\u7a0b\u6a21\u578b\u672c\u8d28\u4e0a\u8981\u89e3\u51b3\u7684\u662f\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u4e0d\u7ba1\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u6b63\u662f\u8fd9\u4e9b\u4e3a\u4e86\u5e2e\u52a9\u4eba\u4eec\u7ba1\u7406\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u673a\u5236\uff0c\u63d0\u5347\u4e86\u7f16\u7a0b\u7684\u95e8\u69db\uff0c\u4f8b\u5982\u975e\u7a0b\u5e8f\u5458\u80af\u5b9a\u53ef\u4ee5\u5f88\u5feb\u7406\u89e3\u7c7b\u548c\u5bf9\u8c61\u7684\u6982\u5ff5\uff0c\u4f46\u662f\u7406\u89e3\u865a\u51fd\u6570\u548c\u591a\u6001\u5c31\u662f\u53e6\u5916\u4e00\u56de\u4e8b\u4e86\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u673a\u5236\u7684\u6dfb\u52a0\u770b\u8d77\u6765\u662f\u7406\u6240\u5f53\u7136\u7684\uff0c\u4f46\u662f\u7a0d\u5fae\u6df1\u5165\u7406\u89e3\u4e00\u4e0b\u7f16\u7a0b\u8bed\u8a00\u7684\u7f16\u8bd1\u8fc7\u7a0b\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u662f\u8ddf\u5e95\u5c42\u7684\u7f16\u8bd1\u673a\u5236\u76f8\u5173\u7684\uff0c\u800c\u73b0\u4ee3\u7684\u7f16\u8bd1\u6d41\u7a0b\u53c8\u51e0\u4e4e\u662f\u4e0e\u5e95\u5c42\u7684\u786c\u4ef6\u67b6\u6784\u6709\u5173\u7684\u3002\u4f8b\u5982\u7ee7\u627f\u7684\u673a\u5236\u548c\u9650\u5236\uff0c\u4f7f\u5f97\u7f16\u8bd1\u5668\u53ef\u4ee5\u8ba1\u7b97\u6b63\u786e\u7684\u51fd\u6570\u5730\u5740\uff0c\u4f8b\u5982\u4f60\u5fc5\u987b\u8981\u4ece\u4e00\u5806\u590d\u6742\u7684\u4ee3\u7801\u4e2d\u62ff\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u8fd9\u4f7f\u5f97\u4f60\u4e0d\u5f97\u4e0d\u628a\u591a\u4e2a\u4ee3\u7801\u6587\u4ef6\u4ea4\u7ec7\u5728\u4e00\u8d77\uff09\u624d\u80fd\u6b63\u786e\u5730\u8bbf\u95ee\u76f8\u5e94\u7684\u65b9\u6cd5\uff0c\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u51e0\u4e4e\u603b\u662f\u5145\u6ee1\u590d\u6742\u7684\u5f15\u7528\u5173\u7cfb\uff0c\u5c3d\u7ba1\u8fd9\u770b\u8d77\u6765\u50cf\u662f\u5fc5\u987b\u7684\uff0c\u4f8b\u5982\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u4f46\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u5fc5\u987b\u8981\u8fd9\u6837\u624d\u80fd\u83b7\u5f97\u6b63\u786e\u7684\u5bf9\u8c61\u5730\u5740\uff0c\u4ece\u800c\u8bbf\u95ee\u5176\u4e2d\u7684\u6570\u636e\u548c\u65b9\u6cd5\u3002\u4f46\u662f\u5982\u679c\u4ec5\u4ec5\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u6709\u5f88\u591a\u673a\u5236\uff0c\u4e0d\u662f\u8bf4\u6211\u4e00\u5b9a\u8981\u6bcf\u6b21\u4eb2\u81ea\u5230\u4e00\u4e2a\u5e97\u4e70\u5230\u7684\u4e1c\u897f\u624d\u662f\u7edd\u5bf9\u5b89\u5168\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5feb\u9012\u5458\u672c\u8eab\u662f\u67d0\u79cd\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u6211\u5c31\u53ef\u4ee5\u4e0d\u7528\u4eb2\u81ea\u53bb\u5e97\u91cc\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6211\u60f3\u8981\u7684\u6570\u636e\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u8981\u5173\u6ce8\u7684\u53ea\u662f\u4ec0\u4e48\u4e1c\u897f\uff08\u6570\u636e\u7c7b\u578b\uff09\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7269\u7406\u5730\u5740\uff08\u5bf9\u8c61\u5f15\u7528\uff09\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u7ed3\u6784\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\u5176\u4e00\u662f\u5355\u4e2a\u51fd\u6570\u6216\u8005\u5355\u4e2a\u5bf9\u8c61\u672c\u8eab\u7684\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\u7684\u903b\u8f91\uff0c\u5176\u4e2d\u53ef\u80fd\u4ec5\u4ec5\u6d89\u53ca\u6700\u57fa\u672c\u7684\u7b97\u672f\u548c\u903b\u8f91\u8ba1\u7b97\uff1b\u800c\u53e6\u4e00\u90e8\u5206\u5219\u662f\u4e3a\u4e86\u5e2e\u52a9\u8ba1\u7b97\u673a\u7f16\u8bd1\u7cfb\u7edf\uff08\u53ef\u80fd\u4e5f\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7406\u89e3\uff09\u6784\u9020\u5927\u89c4\u6a21\u8f6f\u4ef6\u63d0\u4f9b\u7684\u4e00\u4e9b\u4fe1\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3090).Z,width:"2546",height:"1427"})),(0,n.kt)("p",null,"Reality World\u5728\u7a0b\u5e8f\u7ed3\u6784\u65b9\u9762\u7684\u76ee\u6807\uff0c\u5c31\u662f\u8981\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u67b6\u6784\uff0c\u4f7f\u5f97\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u88ab\u9690\u85cf\u5728\u7f16\u8bd1\u7cfb\u7edf\u548c\u8fd0\u884c\u65f6\u5185\u90e8\uff0c\u8fd9\u6837\u5f00\u53d1\u8005\u5c31\u53ea\u9700\u8981\u5173\u6ce8\u6700\u57fa\u672c\u7684\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u3002\u6211\u4eec\u901a\u8fc7\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u6765\u4f7f\u5f97\u8fd0\u884c\u65f6\u7cfb\u7edf\u53ef\u4ee5\u52a8\u6001\u63a8\u5bfc\u51fa\u4e00\u4e9b\u6784\u6210\u5927\u89c4\u6a21\u7a0b\u5e8f\u9700\u8981\u7684\u7ed3\u6784\u3002"),(0,n.kt)("h3",{id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"},"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u548c\u7a0b\u5e8f\u7ed3\u6784\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u901a\u5e38\u5bb9\u6613\u5ffd\u7565\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u56e0\u4e3a\u76ee\u524d\u7f16\u7a0b\u7684\u5927\u90e8\u5206\u90fd\u662f\u4e13\u4e1a\u7a0b\u5e8f\u5458\uff0c\u8fd9\u4e2a\u95ee\u9898\u770b\u8d77\u6765\u7406\u6240\u5f53\u7136\u3002\u90a3\u5c31\u662f\u5173\u4e8e\u6570\u636e\u7ba1\u7406\u3002\u6570\u636e\u7ba1\u7406\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u5b83\u65e2\u5173\u4e4e\u7a0b\u5e8f\u7684\u590d\u6742\u5ea6\uff0c\u53c8\u5173\u4e4e\u524d\u9762\u63d0\u5230\u7684\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,"\u5728\u5e94\u7528\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u65e2\u9700\u8981\u7f16\u5199\u903b\u8f91\u4ee3\u7801\uff0c\u8fd8\u9700\u8981\u5904\u7406\u6570\u636e\u7ba1\u7406\uff1a\u6570\u636e\u5728\u4ec0\u4e48\u65f6\u5019\u521d\u59cb\u5316\uff0c\u5728\u90a3\u4e2a\u4ee3\u7801\u903b\u8f91\u5904\u521d\u59cb\u5316\uff0c\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u8c61\u88ab\u4fee\u6539\u4e86\u600e\u6837\u4fdd\u5b58\u6570\u636e\u7b49\u7b49\uff0c\u751a\u81f3\u5305\u62ec\u4e3a\u4e86\u8003\u8651\u7f13\u5b58\u6027\u80fd\u6240\u505a\u51fa\u7684\u4e00\u4e9b\u5904\u7406\uff0c\u8fd9\u4e9b\u5de5\u4f5c\u662f\u975e\u5e38\u7e41\u7410\u7684\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u5f00\u53d1\u8005\u51e0\u4e4e\u603b\u662f\u8fd8\u8981\u5173\u5fc3\u5b58\u50a8\uff0c\u9664\u975e\u662f\u4ec5\u5b58\u50a8\u5728\u672c\u5730\uff0c\u5426\u5219\u8fd8\u9700\u8981\u8bbe\u7f6e\u670d\u52a1\u5668\u5b58\u50a8\u548c\u83b7\u53d6\u4e00\u4e9b\u6570\u636e\u3002\u8fd9\u4e9b\u5de5\u4f5c\u5bf9\u4e8e\u666e\u901a\u7684\u7528\u6237\u5f00\u53d1\u5e94\u7528\u7a0b\u5e8f\u800c\u8a00\u90fd\u662f\u6bd4\u8f83\u56f0\u96be\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9800).Z,width:"1610",height:"399"})),(0,n.kt)("p",null,"GrapQL"),(0,n.kt)("p",null,"\u6240\u4ee5\u7ed3\u5408\u4e0a\u8ff0\u7684\u7a0b\u5e8f\u7ed3\u6784\u5316\u7684\u81ea\u52a8\u7ba1\u7406\uff0c\u4e00\u79cd\u597d\u7684\u7b56\u7565\u662f\u7a0b\u5e8f\u7684\u6570\u636e\u4e5f\u53ef\u4ee5\u81ea\u52a8\u7ba1\u7406\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f00\u53d1\u8005\u4ec5\u5173\u6ce8\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u57fa\u672c\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6240\u6709\u6d89\u53ca\u5230\u6216\u8005\u8bf4\u53ea\u662f\u7f16\u8bd1\u5668\u6216\u7f16\u8bd1\u7cfb\u7edf\u9700\u8981\u7684\u7ba1\u7406\u90fd\u5e94\u8be5\u5c3d\u53ef\u80fd\u4ea4\u7ed9\u8fd0\u884c\u65f6\u3002GraphQL\u5728\u8fd9\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u6bd4\u8f83\u597d\u7684\u5c1d\u8bd5\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u544a\u77e5\u4e00\u4e2a\u60f3\u8981\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u83b7\u53d6\u5230\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u800c\u5c06\u8fd9\u4e9b\u6570\u636e\u80cc\u540e\u7684\u590d\u6742\u903b\u8f91\u9690\u85cf\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u6570\u636e\u672c\u8eab\u7684\u7ba1\u7406\uff0c\u6570\u636e\u8fd8\u6d89\u53ca\u5230\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\uff0c\u7528\u6237\u5e0c\u671b\u81ea\u5df1\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5176\u4ed6\u5e94\u7528\u65b9\u4fbf\u5730\u8bbf\u95ee\uff0c\u8fd9\u4e9b\u673a\u5236\u90fd\u662f\u548c\u6570\u636e\u7684\u7ba1\u7406\u8fc7\u7a0b\u53ca\u5176\u8bbe\u8ba1\u606f\u606f\u76f8\u5173\u7684\u3002"),(0,n.kt)("h2",{id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3206).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u7684\u7a0b\u5e8f\u7ed3\u6784\u4e0e\u6587\u672c\u5408\u6210\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("p",null,"ChatGPT\u5e2d\u5377\u4e86\u6574\u4e2a\u4e16\u754c\uff0c\u6216\u8005\u81f3\u5c11\u662f\u79d1\u6280\u5708\uff0c\u4e0d\u7ba1\u662f\u4ece\u8d44\u672c\uff0c\u56fd\u4f01\uff0c\u6c11\u4f01\uff0c\u7a0b\u5e8f\u5458\u4e2a\u4eba\u7b49\u7b49\u90fd\u662f\u53d7\u5230\u5f88\u5927\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u4e5f\u6709\u50cf\u6211\u4eec\u5c0f\u5b69\u7684\u5988\u5988\uff0c\u4ee5\u53ca\u4ed6\u5988\u5988\u7684\u670b\u53cb\uff0c\u76ee\u524d\u8fd8\u4e0d\u592a\u4e86\u89e3ChatGPT\u662f\u5e72\u4ec0\u4e48\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4e8e2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\u5e76\u5f00\u59cb\u7814\u7a76\u548c\u8bbe\u8ba1Reality World\u7684\u67b6\u6784\uff0c\u90a3\u4e2a\u65f6\u5019\u7684\u70ed\u70b9\u8fd8\u662f\u5143\u5b87\u5b99\u3002\u90a3\u4e2a\u65f6\u5019\uff0c\u7531\u4e8e\u6ca1\u6709\u73b0\u5728\u5927\u6a21\u578b\u7684\u8fd9\u79cd\u80fd\u529b\uff0c\u6211\u4eec\u5f53\u7136\u4e5f\u6ca1\u6709\u4e3b\u8981\u53bb\u601d\u8003AI\u65b9\u9762\u7684\uff0c\u4f46\u662f\u4ece\u6211\u4eec\u81ea\u5df1\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\uff0c\u6211\u548c\u6211\u4eec\u516c\u53f8\u76842\u53f7\u5458\u5de5\uff0c\u57282020\u5e74\u7684\u65f6\u5019\u5c31\u601d\u8003\u548c\u8ba8\u8bba\u5c06\u6765\u600e\u6837\u8ba9AI\u5199\u4ee3\u7801\uff0c\u5f53\u7136\u6211\u4eec\u8bf4\u7684\u4e0d\u662f\u73b0\u5728\u8fd9\u79cd\u57fa\u4e8e\u5927\u6a21\u578b\u6765\u751f\u6210\u6587\u672c\u7684\u65b9\u5f0f\u751f\u6210\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u5927\u6a21\u578b\u786e\u5b9e\u52a0\u901f\u4e86\u6211\u4eec\u7684\u4e00\u4e9b\u60f3\u6cd5\u3002"),(0,n.kt)("h3",{id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"},"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u8d77\u521d\u7684\u76ee\u6807\u662f\u8ba9\u666e\u901a\u4eba\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u5e76\u6784\u9020\u4e00\u4e2a\u5b8c\u6574\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u4e5f\u662f\u6211\u4eec\u524d\u9762\u7b2c3\u90e8\u5206\u8ba8\u8bba\u7684\u5185\u5bb9\u3002\u7136\u800c\u6bd4\u8f83\u5de7\u5408\u548c\u60ca\u8bb6\u7684\u662f\uff0c\u81f3\u5c11\u4ece\u6211\u4eec\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\u770b\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u8ba9\u666e\u901a\u4eba\u4f1a\u7f16\u5199\u4ee3\u7801\u4e0e\u8ba9AI\u7f16\u5199\u4ee3\u7801\u7684\u903b\u8f91\u662f\u7c7b\u4f3c\u7684\u3002")),(0,n.kt)("p",null,"\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u53ef\u4ee5\u7528\u8bed\u8a00\u8868\u8ff0\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u4eba\u7c7b\u7684\u4efb\u4f55\u4fe1\u606f\u4e0e\u667a\u6167\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528\u81ea\u7136\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u3002\u7136\u800c\u8bed\u8a00\u6587\u5b57\u662f\u4e00\u79cd\u9762\u5411\u4eba\u7c7b\u7684\u4fe1\u606f\u8f7d\u4f53\uff0c\u5b83\u662f\u4e3a\u4e86\u4fbf\u4e8e\u4eba\u7c7b\u4e4b\u95f4\u8fdb\u884c\u4fe1\u606f\u4ea4\u6d41\u800c\u8bbe\u8ba1\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u80fd\u4e0d\u90a3\u4e48\u4e25\u8c28\uff0c\u751a\u81f3\u6ca1\u6709\u592a\u591a\u7ed3\u6784\u6027\uff0c\u4eba\u4eec\u4e4b\u95f4\u9700\u8981\u4fe1\u606f\u7f16\u89e3\u7801\uff0c\u7f16\u89e3\u7801\u7684\u6548\u7387\u548c\u80fd\u529b\u53ef\u80fd\u5dee\u5f02\u90fd\u975e\u5e38\u5de8\u5927\u3002\u800c\u7a0b\u5e8f\uff0c\u5219\u662f\u5728\u81ea\u7136\u8bed\u8a00\u57fa\u7840\u4e4b\u4e0a\u52a0\u5165\u66f4\u591a\u7684\u7ed3\u6784\u6027\uff0c\u5b83\u5728\u8868\u8ff0\u548c\u8bb0\u8f7d\u903b\u8f91\u7684\u540c\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0e\u8ba1\u7b97\u673a\u548c\u5176\u4ed6\u7a0b\u5e8f\u8fdb\u884c\u6c9f\u901a\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u7c7b\u5927\u8111\u4e2d\u7684\u903b\u8f91\u4e0d\u5149\u53ef\u4ee5\u7528\u4e8e\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6d41\uff0c\u8fd8\u53ef\u4ee5\u66f4\u76f4\u63a5\u5730\u8f6c\u5316\u4e3a\u751f\u4ea7\u529b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8981\u8ba9AI\u80fd\u591f\u751f\u6210\u4ee3\u7801\uff0c\u8fd9\u4ef6\u4e8b\u60c5\u80af\u5b9a\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u5f53\u7136\u7531\u4e8eChatGPT\u7684\u51fa\u73b0\u76f8\u4fe1\u73b0\u5728\u5927\u90e8\u5206\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u611f\u53d7\u5230AI\u7684\u4ee3\u7801\u751f\u6210\u80fd\u529b\uff0c\u6709\u4e9b\u4eba\u6bd4\u8f83\u575a\u4fe1AI\u80fd\u591f\u4ee3\u66ff\u7a0b\u5e8f\u5458\u751f\u6210\u7a0b\u5e8f\uff0c\u6709\u4e9b\u4eba\u5219\u60b2\u89c2\u4e00\u4e9b\uff0c\u81f3\u5c11\u5728\u77ed\u671f\u5185\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u6682\u4e14\u4e0d\u4e89\u8bbaAI\u5230\u5e95\u80fd\u4e0d\u80fd\u6216\u8005\u4ec0\u4e48\u65f6\u5019\u66ff\u4ee3\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u56de\u5230\u95ee\u9898\u672c\u8eab\u3002\u4f20\u7edf\u7684\u6587\u672c\u5408\u6210\uff0c\u8ba1\u7b97\u7684\u662f\u6587\u5b57\u4e0e\u6587\u5b57\u4e4b\u95f4\uff0c\u53e5\u5b50\u4e0e\u53e5\u5b50\u4e4b\u95f4\u7684\u7ec4\u5408\u6982\u7387\uff0c\u8fd9\u91cc\u6709\u4e24\u4e2a\u4e8b\u60c5\u503c\u5f97\u6ce8\u610f\uff1a\u7b2c\u4e00\u662f\u4efb\u4f55\u5b57\u4e4b\u95f4\u90fd\u53ef\u4ee5\u7ec4\u5408\uff0c\u6240\u4ee5ChatGPT\u603b\u662f\u53ef\u4ee5\u7ed9\u6211\u4eec\u7b54\u6848\uff0c\u54ea\u6015\u5176\u4e2d\u7684\u53e5\u5b50\u7ec4\u5408\u548c\u903b\u8f91\u662f\u5b8c\u5168\u9519\u8bef\u7684\uff1b\u7b2c\u4e8c\u662f\u4e00\u822c\u5e38\u7528\u4e8e\u8868\u8ff0\u6b63\u786e\u8bed\u6cd5\u548c\u8bed\u4e49\u7684\u54ea\u4e9b\u6587\u5b57\u4fe1\u606f\u662f\u975e\u5e38\u591a\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4ChatGPT\u7406\u89e3\u6211\u4eec\u4e00\u822c\u7684\u6bd4\u8f83\u5927\u4f17\u5316\u7684\u8bed\u4e49\u662f\u5f88\u5bb9\u6613\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u673a\u7a0b\u5e8f\u5728\u8fd9\u4e24\u4e2a\u5c42\u9762\u90fd\u4e0e\u4e00\u822c\u7684\u6587\u672c\u77e5\u8bc6\u4fe1\u606f\u4e0d\u540c\uff1a\u9996\u5148\u4e24\u6bb5\u4ee3\u7801\u662f\u4e0d\u80fd\u7b80\u5355\u5408\u6210\u7684\uff0c\u4e24\u4e2a\u4ee3\u7801\u4e4b\u95f4\u5728\u5355\u7eaf\u5730\u50cf\u4e24\u6bb5\u6587\u5b57\u653e\u5728\u4e00\u8d77\u4e4b\u5916\uff0c\u8fd8\u9700\u8981\u5904\u7406\u53c2\u6570\u7684\u6570\u91cf\uff0c\u53c2\u6570\u7684\u540d\u79f0\uff0c\u7c7b\u578b\uff0c\u53d8\u91cf\u4ece\u54ea\u91cc\u83b7\u53d6\uff0cAPI\u4ece\u54ea\u91cc\u83b7\u53d6\u7b49\u7b49\uff0c\u8fd9\u8fdc\u8fdc\u8d85\u51fa\u7b80\u5355\u6587\u5b57\u5408\u6210\u7684\u8303\u56f4\u3002\u4f60\u53ef\u4ee5\u5408\u6210\u4e00\u4e2a\u6587\u672c\u7ec4\u5408\u7684\u6e90\u4ee3\u7801\u7ed3\u679c\uff0c\u4f46\u662f\u5176\u4e2d\u7684\u903b\u8f91\u53ef\u80fd\u5b8c\u5168\u662f\u9519\u8bef\u7684\uff0c\u51fd\u6570\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u53c2\u6570\u662f\u9519\u8bef\u7684\u3002\u56e0\u6b64\u76ee\u524d\u6765\u8bb2\uff0c\u5927\u90e8\u5206AI\u8fd8\u662f\u7528\u4e8e\u8f85\u52a9\u6bd4\u8f83\u5c40\u90e8\u3001\u72ec\u7acb\u7684\u4ee3\u7801\u751f\u6210\uff0c\u68c0\u67e5\uff0c\u63d0\u793a\u7b49\u7b49\uff0c\u8ddd\u79bb\u6784\u9020\u590d\u6742\u4e00\u70b9\u7684\u903b\u8f91\u663e\u7136\u8fd8\u7f3a\u4e4f\u4e00\u4e9b\u57fa\u7840\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u59a8\u788d\u5b83\u73b0\u5728\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u4e0d\u9519\u7684\u52a9\u624b\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5728Reality World\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\uff0c\u4e3a\u4e86\u8981\u8ba9\u666e\u904d\u7528\u6237\u53ef\u4ee5\u6784\u9020\u7a0b\u5e8f\uff0c\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u591a\u5904\u8c03\u6574\uff0c\u4ece\u7c7b\u578b\u5b9a\u4e49\uff0c\u6570\u636e\u521d\u59cb\u5316\u548c\u7ba1\u7406\uff0c\u4e92\u64cd\u4f5c\u6027\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a8\u6f14\uff0c\u7ebf\u7a0b\u9694\u79bb\u7b49\u7b49\u3002\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u5c31\u662f\u7ec4\u5408\u6027\uff0c\u8fd9\u79cd\u7ec4\u5408\u6027\u4f7f\u5f97\u4e24\u4e2a\u76f8\u5173\u7684\u7ec4\u4ef6\uff0c\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u6dfb\u52a0\u4efb\u4f55\u53c2\u6570\u6216\u8005\u8f93\u5165\u8f93\u51fa\u7684\u8bbe\u7f6e\uff0c\u5c31\u53ef\u4ee5\u6b63\u786e\u5730\u6784\u9020\u7a0b\u5e8f\uff0c\u4f8b\u5982\u5982\u4e0b\u7684\u8fd9\u6bb5\u590d\u6742\u7684\u903b\u8f91\uff0c\u6574\u4e2aGraph\u7684\u8282\u70b9\u662f\u4e0d\u9700\u8981\u7528\u6237\u8fde\u63a5\u7684\uff0c\u5168\u90e8\u662f\u81ea\u52a8\u751f\u6210\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(373).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fde\u63a5\u5173\u7cfb\u662f\u81ea\u52a8\u63a8\u5bfc\u7684"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u6027\u770b\u8d77\u6765\u662f\u4e0d\u53ef\u601d\u8bae\u7684\uff0c\u8fd9\u91cc\u6211\u4e0d\u4f1a\u8ba8\u8bba\u5177\u4f53\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fd9\u6837\u60f3\u8c61\u4e00\u4e0b\uff1a\u7f16\u8bd1\u5668\u5bf9\u4e8e\u4e00\u4e2a\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\uff0c\u672c\u6765\u5c31\u662f\u9996\u5148\u5f53\u6210\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u6a21\u5757\u8fdb\u884c\u7f16\u8bd1\u7684\uff0c\u53ea\u4e0d\u8fc7\u7f16\u8bd1\u5668\u9664\u4e86\u7f16\u8bd1\u6bcf\u4e2a\u6307\u4ee4\u672c\u8eab\uff0c\u8fd8\u4f7f\u7528\u4e00\u4e9b\u7b26\u53f7\u8868\u8bb0\u8f7d\u4e86\u6240\u6709\u5916\u90e8\u6a21\u5757\u5f15\u7528\u7684\u5173\u7cfb\u548c\u5730\u5740\uff0c\u7136\u540e\u5728\u94fe\u63a5\u9636\u6bb5\u5c06\u8fd9\u4e9b\u5730\u5740\u4fee\u6539\u4e3a\u6700\u7ec8\u7684\u7edd\u5bf9\u5730\u5740\u3002\u4ece\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u662f\u6709\u53ef\u80fd\u4ee5\u66f4\u5e95\u5c42\u7684\u65b9\u5f0f\u53bb\u5b8c\u6210\uff0c\u800c\u4e0d\u662f\u628a\u8fd9\u90e8\u5206\u4ea4\u7ed9\u7a0b\u5e8f\u5458\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u80fd\u529b\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u53d8\u6210\u4e86\u5355\u7eaf\u7684\u5408\u6210\uff0c\u6ca1\u9519\uff0c\u8fd9\u4e2a\u5408\u6210\u7684\u65b9\u5f0f\u8ddf\u6587\u672c\u5408\u6210\u662f\u975e\u5e38\u76f8\u4f3c\u7684\uff1a\u5b83\u4eec\u4ec5\u4ec5\u662f\u653e\u5230\u4e00\u8d77\uff0c\u4e0d\u9700\u8981\u6307\u5b9a\u989d\u5916\u7684\u7a0b\u5e8f\u7ed3\u6784\u4fe1\u606f\uff0c\u4f8b\u5982\u53c2\u6570\uff0c\u53d8\u91cf\uff0c\u51fd\u6570\u5730\u5740\u7b49\u7b49\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u6709\u673a\u4f1a\u8ba9AI\u53bb\u751f\u6210\u7a0b\u5e8f\uff0c\u8fd9\u91ccAI\u53ea\u9700\u8981\u4ece\u4e00\u822c\u7684\u6587\u5b57\u610f\u4e49\u4e0a\u53bb\u7406\u89e3\u7ec4\u4ef6\u7684\u8bed\u4e49\uff0c\u5e76\u7ed9\u51fa\u7ec4\u4ef6\u5408\u6210\u5e8f\u5217\uff0c\u800c\u5e95\u5c42\u7684\u8fd0\u884c\u65f6\u5f15\u64ce\u5c06\u8fd9\u4e9b\u5e8f\u5217\u8f6c\u5316\u4e3a\u771f\u6b63\u7684\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0e\u76f4\u63a5ChatGPT\u6784\u9020\u7a0b\u5e8f\u4ee3\u7801\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u4ee3\u7801\u4e00\u65e6\u88ab\u6784\u9020\uff0c\u5c31\u662f\u6b63\u786e\u7684\uff0c\u53ef\u4ee5\u8fd0\u884c\u7684\uff0c\u800c\u4e0d\u9700\u8981\u4eba\u53bb\u68c0\u67e5\u5176\u4e2d\u53ef\u80fd\u5b58\u5728\u7684\u7a0b\u5e8f\u903b\u8f91\u7684\u9519\u8bef\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf"},"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u4e0e\u76f4\u63a5\u8ba9AI\u6784\u9020\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u76f8\u6bd4\uff0c\u66f4\u597d\u7684\u4f7f\u7528\u65b9\u5f0f\u53ef\u80fd\u662fAutoGPT\u6216\u8005OpenAI\u7684\u63d2\u4ef6\u7cfb\u7edf\uff0c\u5728\u8fd9\u79cd\u67b6\u6784\u4e2d\uff0cAI\u66f4\u591a\u662f\u8d1f\u8d23\u6bd4\u8f83\u901a\u7528\u7684\u4e00\u4e9b\u8bed\u4e49\u7406\u89e3\uff0c\u7136\u540e\u628a\u5177\u4f53\u7684\u4e00\u4e9b\u4e0e\u9886\u57df\u7cfb\u7edf\u7684\u4ea4\u4e92\u4ea4\u7ed9\u4e13\u95e8\u7684\u63d2\u4ef6\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5728OpenAI\u7684Plugin\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2aPlugin\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u5e94\u7528\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u63cf\u8ff0\u597d\u7684\u8c03\u7528\u903b\u8f91\u4f7f\u5f97ChatGPT\u53ef\u4ee5\u6b63\u786e\u5730\u8c03\u7528\u5404\u4e2a\u5e94\u7528\u8f6f\u4ef6\u7684\u63a5\u53e3\uff0c\u4f46\u5982\u679c\u4f60\u7684\u4f7f\u7528\u672c\u8eab\u662f\u8981\u5728\u591a\u4e2aplugin\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u60f3\u6784\u9020\u4efb\u610f\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u628a\u6bcf\u4e2aplugin\u63a5\u53e3\u5f53\u4f5c\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u53c8\u4f1a\u56de\u5230\u8ba9AI\u7f16\u5199\u903b\u8f91\u4ee3\u7801\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u8fd9\u79cdPlugin\u7cfb\u7edf\uff0cReality World\u63d0\u4f9b\u7684\u4e0d\u662f\u4e00\u4e2a\u5355\u4e2aplugin\uff0c\u800c\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u80fd\u529b\uff0c\u5b83\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u4e00\u79cd\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\uff0c\u56e0\u4e3aAI\u53d1\u51fa\u7684\u6587\u672c\u5e8f\u5217\uff0c\u4f1a\u88abReality World\u5f53\u4f5c\u8f93\u5165\uff0c\u7136\u540e\u6309\u7167\u7a0b\u5e8f\u6784\u9020\u7684\u903b\u8f91\u53bb\u68c0\u7d22\u76f8\u5e94\u7684\u7ec4\u4ef6\u5e76\u7ec4\u5408\u6784\u9020\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u8981\u4e48\u662f\u6784\u9020\u4e0d\u51fa\u6765\u7684\uff0c\u8981\u4e48\u5c31\u662f\u81f3\u5c11\u80fd\u591f\u6210\u529f\u8fd0\u884c\u7684\uff0c\u800c\u5269\u4e0b\u7684\u6b63\u786e\u6027\u95ee\u9898\u5c31\u53d6\u51b3\u4e8e\u7ec4\u4ef6\u63cf\u8ff0\u7684\u51c6\u786e\u6027\u548cAI\u5bf9\u8bed\u4e49\u7684\u7406\u89e3\u4e86\u3002"),(0,n.kt)("h2",{id:"\u62e5\u62b1rust"},"\u62e5\u62b1Rust"),(0,n.kt)("p",null,"\u6211\u539f\u672c\u4ee5\u4e3a\u7684\u5f00\u53d1\u5468\u671f\u8fd8\u662f\u4f1a\u6bd4\u8f83\u957f\u7684\uff0c\u6bd5\u7adf\u8bbe\u8ba1\u7684\u7cfb\u7edf\u8bbe\u8ba1\u8fd8\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u65e9\u5148\u6211\u4f7f\u7528\u7684\u662fC++/C\u8fdb\u884c\u5f00\u53d1\uff0c\u8fdb\u884c\u4e86\u4e00\u4e9b\u7b80\u5355\u7684\u8bed\u8a00\u5305\u88c5\u548c\u7f16\u8bd1\u6d41\u7a0b\u5b9a\u5236\u3002\u56e0\u4e3a\u6211\u4eec2\u53f7\u5458\u5de5\u4e00\u76f4\u662fRust\u7231\u597d\u8005\uff0c\u4e00\u76f4\u5728\u9f13\u52a8\u6211\u4f7f\u7528Rust\uff0c\u867d\u7136\u4e4b\u524d\u770b\u8fc7Rust\u7684\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u4f46\u662f\u611f\u89c9\u8fd8\u662f\u6ca1\u6709\u7279\u522b\u7684\u52a8\u529b\u53bb\u5b8c\u5168\u5207\u6362\u5230Rust\u3002"),(0,n.kt)("p",null,"\u540e\u6765\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4f7f\u7528Rust\u8fdb\u884c\u5f00\u53d1\uff0c\u5f00\u59cb\u4e5f\u662f\u6709\u4e9b\u4e0d\u4e60\u60ef\uff0c\u4f46\u662f\u5728\u9010\u6b65\u5b66\u4e60\u548c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u611f\u53d7\u5230\u4e86Rust\u7684\u597d\u5904\uff0c\u8fd9\u91cc\u7ed9\u5927\u5bb6\u5206\u4eab\u548c\u63a8\u8350\u4e00\u4e0b\u3002"),(0,n.kt)("p",null,"Rust\u5bf9\u6211\u800c\u8a00\u6700\u5927\u7684\u597d\u5904\u548c\u4f53\u9a8c\u662f\uff0c\u8fed\u4ee3\u901f\u5ea6\u6bd4\u8f83\u5feb\uff0c\u8fd9\u7b26\u5408\u6211\u73b0\u5728\u7684\u9700\u6c42\u3002\u53ea\u8981\u4ee3\u7801\u7f16\u8bd1\u901a\u8fc7\uff0c\u51e0\u4e4e\u4e0d\u4f1a\u82b1\u65f6\u95f4\u53bb\u6392\u67e5\u4e00\u4e9b\u6bd4\u8f83\u8be1\u5f02\uff0c\u751a\u81f3\u9700\u8981\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u65ad\u6b65\u8c03\u8bd5\u624d\u80fd\u53d1\u73b0\u95ee\u9898\u7684bug\uff0c\u4e00\u822c\u6709bug\u5c31\u57fa\u672c\u4e0a\u5927\u90e8\u5206\u8fd8\u662f\u903b\u8f91\u95ee\u9898\uff0c\u800c\u4e14Rust\u7f16\u8bd1\u5668\u53ef\u4ee5\u6bd4\u8f83\u7cbe\u51c6\u5730\u544a\u8bc9\u4f60\u95ee\u9898\u7684\u4f4d\u7f6e\uff0c\u57fa\u672c\u4e0a\u4e00\u770b\u63d0\u793a\u5c31\u77e5\u9053\u8be5\u600e\u4e48\u6539\u4ee3\u7801\u4e86\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u4e3b\u8981\u662f\u5927\u5bb6\u8ba8\u8bba\u6bd4\u8f83\u591a\u7684\u9650\u5236\u4e86\uff0c\u4f60\u5f97\u5f88\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u8bbe\u8ba1\u6574\u4e2a\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u5982\u679c\u50cf\u4f20\u7edfC++\u90a3\u6837\u5230\u5904\u662f\u76f8\u4e92\u5f15\u7528\u663e\u7136\u51e0\u4e4e\u80af\u5b9a\u662f\u4f60\u5b8c\u5168\u6ca1\u6cd5\u901a\u8fc7\u7f16\u8bd1\u5668\uff0c\u4f60\u5f97\u8bbe\u8ba1\u597d\u6574\u4e2a\u7a0b\u5e8f\u5bf9\u8c61\u7684\u7ed3\u6784\uff0c\u8fd9\u91cc\u63a8\u8350Bevy\u5f15\u64ce\u5c31\u662f\u975e\u5e38\u597d\u7684\u67b6\u6784\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u51e0\u4e4e\u80fd\u89e3\u51b3\u5927\u90e8\u5206\u76f8\u4e92\u5f15\u7528\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u6bd4\u8f83\u5927\u7684\u95ee\u9898\u662f\u591a\u6b21\u5f15\u7528\u548c\u501f\u7528\u7684\u95ee\u9898\u4e86\uff0c\u8fd9\u4e2a\u95ee\u9898\u76f8\u5bf9\u597d\u89e3\u51b3\u4e00\u70b9\uff0c\u9996\u5148\u67b6\u6784\u597d\u4f1a\u5c11\u6389\u5f88\u591a\u8fd9\u79cd\u95ee\u9898\uff1b\u5176\u6b21\u5bf9\u4e8e\u5c40\u90e8\u7684\u4e00\u4e9b\u65b9\u6cd5\uff0c\u5b9e\u5728\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u4e07\u80fd\u5927\u6cd5\u5c31\u662f\u590d\u5236\u6570\u636e\u5c31\u597d\uff0c\u8fd9\u4e2a\u4e5f\u4e0d\u9700\u8981\u5b8c\u5168\u56de\u907f\uff0c\u6bd5\u7adf\u5728C++\u4e2d\u4e5f\u7ecf\u5e38\u4f1a\u5b58\u5728\u5bf9\u8c61\u590d\u5236\uff1b\u518d\u6709\u7a0d\u5fae\u590d\u6742\u4e00\u70b9\u5c31\u662f\u4f7f\u7528move\uff0c\u5148\u5c06\u6570\u636emove\u51fa\u6765\uff0c\u7136\u540e\u8fdb\u884c\u64cd\u4f5c\u4e4b\u540e\u518d\u586b\u56de\u53bb\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u6ca1\u6709\u5e76\u53d1\u95ee\u9898\uff0c\u8fd9\u79cd\u601d\u8def\u4e5f\u662f\u4e00\u79cd\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u5173\u4e8e\u6709\u4e9b\u4eba\u4f1a\u89c9\u5f97\uff0c\u50cfRust\u8fd9\u6837\u5f3a\u8feb\u5f00\u53d1\u8005\u8fc7\u65e9\u5173\u6ce8\u67b6\u6784\u4f1a\u5f71\u54cd\u5feb\u901f\u8fed\u4ee3\u3002\u8fd9\u4e00\u70b9\u6211\u4e0d\u662f\u5f88\u8d5e\u540c\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u9879\u76ee\uff0c\u5feb\u901f\u8fed\u4ee3\u4e5f\u662f\u8981\u6b63\u786e\u8fd0\u884c\u7684\uff0c\u800c\u4e14\u5982\u679c\u9879\u76ee\u672c\u8eab\u601d\u8003\u7740\u8db3\u591f\u591a\uff0c\u6216\u8005\u9879\u76ee\u6700\u7ec8\u80af\u5b9a\u662f\u8981\u4e0a\u7ebf\u4f7f\u7528\u7684\uff0c\u6211\u89c9\u5f97\u6162\u4e00\u70b9\u4e00\u8fb9\u8fed\u4ee3\u4e00\u8fb9\u5c31\u628a\u4ee3\u7801\u67b6\u6784\u5199\u7684\u66f4\u597d\uff0c\u4e5f\u8bb8\u6700\u7ec8\u662f\u4e00\u4ef6\u66f4\u597d\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"},"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u6211\u4ece2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\uff0c\u51e0\u4e4e\u6574\u6574\u4e00\u5e74\u65f6\u95f4\u5168\u90e8\u90fd\u5728\u601d\u8003\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u540e\u671f\u7684\u5f00\u53d1\u3002\u521a\u5f00\u59cb2\u4e2a\u6708\uff0c\u601d\u8def\u8fd8\u4e0d\u662f\u7279\u522b\u6e05\u6670\uff0c\u53ea\u662f\u5728\u4e0d\u505c\u3001\u75af\u72c2\u5730\u770b\u4e66\uff0c\u6211\u51e0\u4e4e\u628a\u6240\u6709\u80fd\u4e70\u5230\u7684\u4e2d\u6587\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u76f8\u5173\u7684\u4e66\u90fd\u770b\u4e86\u4e00\u9762\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u9010\u5b57\u9010\u53e5\u6162\u6162\u770b\uff0c\u90fd\u662f\u98de\u5feb\u5730\u6d4f\u89c8\uff0c\u5e76\u4e14\u8111\u888b\u4e2d\u9ad8\u901f\u8fd0\u8f6c\u7740\uff0c\u968f\u65f6\u90fd\u60f3\u7740\u6211\u8111\u888b\u4e2d\u7684\u54ea\u4e9b\u95ee\u9898\u600e\u4e48\u89e3\u51b3\uff0c\u8fd9\u6837\u5e26\u7740\u95ee\u9898\u770b\u4e66\u7684\u597d\u5904\u662f\uff0c\u53ea\u8981\u77e5\u8bc6\u4e4b\u95f4\u6709\u4e00\u70b9\u7684\u76f8\u5173\u6027\uff0c\u5c31\u80fd\u591f\u975e\u5e38\u654f\u9510\u5730\u6355\u6349\u5e76\u5173\u8054\u4e0a\uff0c\u7136\u540e\u518d\u5bf9\u8fd9\u5757\u77e5\u8bc6\u8fdb\u884c\u6df1\u5165\u5b66\u4e60\uff0c\u6700\u7ec8\u53ef\u4ee5\u8df3\u51fa\u5355\u7eaf\u7684\u77e5\u8bc6\u672c\u8eab\u53bb\u5e94\u7528\u8fd9\u4e9b\u77e5\u8bc6\uff0c\u751a\u81f3\u5c06\u4e00\u79cd\u77e5\u8bc6\u7684\u601d\u7ef4\u7528\u6765\u89e3\u51b3\u53e6\u4e00\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u4e00\u5e74\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8d85\u8fc750\u672c\u76f8\u5173\u7684\u4e66\u7c4d\uff0c\u5e76\u4e14\u5927\u90e8\u5206\u6bd4\u8f83\u76f8\u5173\u7684\u77e5\u8bc6\u90fd\u662f\u53cd\u590d\u9605\u8bfb\u7684\u3002"),(0,n.kt)("p",null,"\u65e9\u671f\u6211\u4e60\u60ef\u4f7f\u7528iPhone\u7684\u5907\u5fd8\u5f55app\u8bb0\u5f55\u4e00\u4e9b\u60f3\u6cd5\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u65b9\u4fbf\uff0c\u4efb\u4f55\u65f6\u5019\u60f3\u5230\u4e00\u70b9\u4e1c\u897f\u5c31\u53ef\u4ee5\u8bb0\u4e0b\u6765\uff0c\u5f88\u591a\u65f6\u5019\u665a\u4e0a\u534a\u591c\u90fd\u4f1a\u8d77\u6765\u8bb0\u5f55\uff0c\u786e\u5b9e\u6709\u4e9b\u4e1c\u897f\u5f88\u5feb\u5c31\u662f\u53ef\u4ee5\u5fd8\u8bb0\u7684\u3002\u540e\u6765\u4f53\u7cfb\u6bd4\u8f83\u5b8c\u6574\u7684\u65f6\u5019\u6211\u9010\u6b65\u5c06\u8fd9\u4e9b\u4fe1\u606f\u6574\u7406\u5230Markdown\u4e2d\uff0c\u5e76\u9010\u6b65\u79ef\u7d2f\uff0c\u73b0\u5728\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u5df2\u7ecf\u8d85\u8fc722\u4e07\u5b57\uff0c\u6574\u6574400\u591a\u9875\uff0c\u91cc\u9762\u5305\u542b\u4e86\u975e\u5e38\u591a\u7684\u6280\u672f\u7406\u89e3\u548c\u601d\u8003\u3002\u7b49\u9002\u5f53\u7684\u65f6\u5019\u6211\u4f1a\u5c06\u8fd9\u4e9b\u5185\u5bb9\u6574\u7406\u6210\u56fe\u4e66\u51fa\u7248\u3002"),(0,n.kt)("p",null,"\u8c46\u74e3\u4e0a\u6211\u5217\u4e86\u4e2atop 10\u7684\u56fe\u4e66\u699c\u5355\uff0c\u7f16\u7a0b\u76f8\u5173\u7684\u662f\uff1a\u300a\u7f16\u8bd1\u539f\u7406\u300b\u3001\u300aErlang\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\u300b\u3001\u300a\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u6a21\u5f0f\u300b\u3001\u300a\u6e38\u620f\u673a\u5236\u300b\u3001\u300a\u94fe\u63a5\u5668\u4e0e\u52a0\u8f7d\u5668\u300b\u3001\u300aData-oriented design\u300b\u3001\u300a\u51fd\u6570\u5f0f\u7f16\u7a0b\u601d\u7ef4\u300b\u3001\u300a\u51e4\u51f0\u67b6\u6784\u300b\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u56fe\u4e66\uff0c\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u5bf9\u6211\u5f71\u54cd\u6bd4\u8f83\u5927\u7684\u662f\uff1aErlang\u3001USD\u3001LLVM\u3001MLIR\u3001ECS\u3001Web Assembly\u3001Machinations\u3001\u300a\u5821\u5792\u4e4b\u591c\u300b\u3001Snapchat\u3001Bevy\u7b49\u7b49\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"},"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u53ef\u80fd\u5f88\u591a\u670b\u53cb\u4f1a\u5173\u5fc3\u4f60\u7684\u5546\u4e1a\u6a21\u5f0f\u662f\u4ec0\u4e48\uff0c\u8fd9\u91cc\u6211\u4e0d\u60f3\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u76ee\u524d\u53ea\u8ddf\u6295\u8d44\u4eba\u4e4b\u95f4\u624d\u4f1a\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u5f53\u7136\u6709\u5f88\u591a\u601d\u8003\uff0c\u4f46\u662f\u5728\u7f3a\u4e4f\u5f88\u591a\u80cc\u666f\u4e0b\uff0c\u6211\u89c9\u5f97\u73b0\u5728\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u8fd8\u662f\u592a\u65e9\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u4ecb\u610f\u5927\u5bb6\u8ba8\u8bba\u3002"),(0,n.kt)("h2",{id:"\u53c2\u4e0ereality-world\u5f00\u53d1"},"\u53c2\u4e0eReality World\u5f00\u53d1"),(0,n.kt)("p",null,"\u6beb\u65e0\u7591\u95ee\uff0cReality World\u6d89\u53ca\u5230\u5f88\u591a\u6280\u672f\u601d\u7ef4\uff0c\u751a\u81f3\u5305\u542b\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u6211\u76f8\u4fe1\u53c2\u4e0e\u8fd9\u4e2a\u9879\u76ee\u672c\u8eab\u80af\u5b9a\u4f1a\u5b66\u5230\u5f88\u591a\u77e5\u8bc6\u3002\u4f46\u73b0\u9636\u6bb5\u8fd8\u4e0d\u80fd\u6b63\u5f0f\u516c\u5e03\uff0c\u6211\u4eec\u9884\u8ba1\u4f1a\u57286\u4e2a\u6708\u5de6\u53f3\uff0c\u5728\u5185\u90e8\u8fed\u4ee3\u4e00\u4e9b\u7248\u672c\u518d\u6b63\u5f0f\u516c\u5e03\uff0c\u6240\u4ee5\u5728\u8fd9\u4e2a\u9636\u6bb5\u6211\u4e5f\u4e0d\u4f1a\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u592a\u591a\u5177\u4f53\u7684\u6280\u672f\u7ec6\u8282\u3002\u56e0\u4e3a\u5728\u4e2d\u56fd\u505a\u8fd9\u79cd\u4e8b\u60c5\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\uff0c\u7f51\u7edc\u4e0a\u4f1a\u6709\u5404\u79cd\u5404\u6837\u7684\u58f0\u97f3\uff0c\u6211\u4e0d\u5e0c\u671b\u53d7\u8fd9\u79cd\u5e72\u6270\uff0c\u4e3a\u4e86\u628a\u8fd9\u4ef6\u4e8b\u60c5\u505a\u6210\uff0c\u9700\u8981\u4e00\u9897\u5b89\u9759\u7684\u5fc3\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4f60\u5bf9Reality World\u611f\u5174\u8da3\uff0c\u4f60\u53ef\u4ee5\u8054\u7cfb\u6211\uff0c\u79c1\u4eba\u4e4b\u95f4\u6709\u65f6\u5019\u6211\u4f1a\u8ba8\u8bba\u4e00\u4e9b\u6280\u672f\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u878d\u8d44"},"\u5173\u4e8e\u878d\u8d44"),(0,n.kt)("p",null,"\u5766\u767d\u8bf4\uff0c\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u8fd8\u6ca1\u6709\u62ff\u5230\u4efb\u4f55\u6295\u8d44\uff0c\u66fe\u7ecf\u6709\u975e\u5e38\u9876\u7ea7\u7684\u8d44\u672c\u804a\u4e86\u5f88\u4e45\uff0c\u5408\u4f19\u4eba\u4e5f\u975e\u5e38\u8ba4\u53ef\u8fd9\u4e2a\u9879\u76ee\u7684\u4ef7\u503c\uff0c\u4f46\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u8c08\u5b9a\u3002\u5728\u65e9\u671f\uff0c\u6211\u80af\u5b9a\u72af\u4e86\u5f88\u591a\u9519\u8bef\uff0c\u4f8b\u5982\u5bf9\u9879\u76ee\u7684\u89c4\u5212\uff0c\u4f30\u503c\u9884\u671f\uff0c\u751a\u81f3\u8868\u8fbe\u7b49\u7b49\u90fd\u8fd8\u662f\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5f53\u7136\u4e5f\u662f\u4e00\u79cd\u6210\u957f\uff1b\u6b64\u5916\u53bb\u5e74\u53c8\u9047\u5230\u75ab\u60c5\uff0c\u8fd8\u6709\uff0c\u4f60\u61c2\u7684\uff0c\u4eca\u5e74\u7684ChatGPT..."),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u540e\u7eed\u7684\u5f00\u53d1\u80af\u5b9a\u8fd8\u662f\u9700\u8981\u56e2\u961f\u548c\u8d44\u672c\uff0c\u6211\u4e00\u4e2a\u4eba\u5f88\u96be\u8fd9\u6837\u4e00\u76f4\u6301\u7eed\u4e0b\u5348\uff0c\u6b22\u8fce\u5404\u4f4d\u611f\u5174\u8da3\u7684\u8d44\u672c\u3001\u5f00\u53d1\u8005\u751a\u81f3\u52a0\u6cb9\u52a9\u5a01\u7684\u670b\u53cb\u4e0e\u6211\u8054\u7cfb\u3002"),(0,n.kt)("p",null,"\u5fae\u4fe1\uff1aARealityWorld"),(0,n.kt)("h2",{id:"\u540e\u8bb0"},"\u540e\u8bb0"),(0,n.kt)("p",null,"\u5728\u8fd9\u4e00\u5e74\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ddf\u5f88\u591a\u4e0d\u540c\u7684\u670b\u53cb\u6709\u8fc7\u5f88\u591a\u4ea4\u6d41\uff0c\u5f88\u591a\u670b\u53cb\u90fd\u5728\u9f13\u52b1\u548c\u652f\u6301\uff0c\u5e0c\u671b\uff0c\u6700\u7ec8\u4e0d\u4f1a\u8f9c\u8d1f\u4f60\u4eec\uff01"))}d.isMDXComponent=!0},1694:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/2-ea7a0b77be7f3ea877430d34be6a9c33.jpg"},1072:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/3-2935ce82c46c3780bb9a6be5605f32ff.jpg"},373:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/4-c18cbdad8df763f282adf9e615337ed8.jpg"},3206:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/5-25bf33bec4ab499cbb1f75fe4af6dc4e.jpg"},6081:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/Robert_Virding_and_Joe_Armstrong-82ddcf57cc160dd3b30ce80b0351bb6b.jpg"},3090:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/create-83a4808a18d663f143cd67c47dccbd84.png"},9800:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/graphql-b82a89e1f03ad72a5c43b193911c69a7.png"},9606:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/island-ed77d6189ea90804947341de732b2a5f.png"},9467:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/luau-8dcd3e07aca728930025b827afc3d0d9.png"},3819:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/modular-ec183275c9c4d2f77583a82e8119e52f.png"},2382:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/pl-01db64776749f259941139b1e0b0fd19.jpg"},9984:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/usd-1109031da5c391a7ac8194a67e234d38.png"},9875:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/verse-3604fc0feca3a40971cf71a64a6a61b6.png"}}]); \ No newline at end of file diff --git a/assets/js/13c002e8.46adacda.js b/assets/js/13c002e8.46adacda.js deleted file mode 100644 index fc98050..0000000 --- a/assets/js/13c002e8.46adacda.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3915],{4137:(t,e,l)=>{l.d(e,{Zo:()=>u,kt:()=>k});var a=l(7294);function n(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function i(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,a)}return l}function r(t){for(var e=1;e=0||(n[l]=t[l]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,l)&&(n[l]=t[l])}return n}var s=a.createContext({}),p=function(t){var e=a.useContext(s),l=e;return t&&(l="function"==typeof t?t(e):r(r({},e),t)),l},u=function(t){var e=p(t.components);return a.createElement(s.Provider,{value:e},t.children)},c="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var l=t.components,n=t.mdxType,i=t.originalType,s=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),c=p(l),m=n,k=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return l?a.createElement(k,r(r({ref:e},u),{},{components:l})):a.createElement(k,r({ref:e},u))}));function k(t,e){var l=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=l.length,r=new Array(i);r[0]=m;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=t,o[c]="string"==typeof t?t:n,r[1]=o;for(var p=2;p{l.r(e),l.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=l(7462),n=(l(7294),l(4137));const i={slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},r=void 0,o={permalink:"/blog/thinking",source:"@site/blog/2021-08-26-thinking/index.md",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",description:"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"Reality World",permalink:"/blog/tags/reality-world"}],readingTime:79.295,hasTruncateMarker:!1,authors:[{name:"Chunlin Qin",title:"Creator of Reality World",url:"https://github.com/ElvisQin",imageURL:"https://github.com/ElvisQin.png"}],frontMatter:{slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},prevItem:{title:"Conversational computing: a new programming model empower LLM applications",permalink:"/blog/conversational-computing"}},s={authorsImageUrls:[void 0]},p=[{value:"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f",id:"reality-world\u4e0d\u662f\u4ec0\u4e48",level:2},{value:"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01",id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce",level:3},{value:"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",level:3},{value:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",level:2},{value:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",level:3},{value:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",level:3},{value:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",level:3},{value:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",level:3},{value:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",level:3},{value:"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",level:3},{value:"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf",id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf",level:3},{value:"\u62e5\u62b1Rust",id:"\u62e5\u62b1rust",level:2},{value:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",level:2},{value:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"\u53c2\u4e0eReality World\u5f00\u53d1",id:"\u53c2\u4e0ereality-world\u5f00\u53d1",level:2},{value:"\u5173\u4e8e\u878d\u8d44",id:"\u5173\u4e8e\u878d\u8d44",level:2},{value:"\u540e\u8bb0",id:"\u540e\u8bb0",level:2}],u={toc:p},c="wrapper";function d(t){let{components:e,...i}=t;return(0,n.kt)(c,(0,a.Z)({},u,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,(0,n.kt)("img",{src:l(1694).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u53ef\u80fd\u6709\u4e00\u4e9b\u670b\u53cb\u5173\u6ce8\u8fc7\u6211\u8fd9\u4e00\u5e74\u4e00\u76f4\u5728\u6298\u817e\u7684Reality World\u521b\u4e1a\u7684\u4e8b\u60c5\uff0c\u7136\u800c\u5f88\u9057\u61be\u7684\u662f\u4e00\u76f4\u6ca1\u6709\u5206\u4eab\u592a\u591a\u5173\u4e8e\u5b83\u7684\u4fe1\u606f\u3002\u4e00\u6765\u662f\u56e0\u4e3a\u5b83\u6240\u6d89\u53ca\u7684\u6280\u672f\u6709\u6bd4\u8f83\u591a\u7684\u521b\u65b0\u5c1d\u8bd5\uff0c\u5728\u8fd8\u6ca1\u6709\u771f\u6b63\u7684\u6280\u672f\u5f00\u53d1\u5b9e\u8df5\u4e4b\u524d\u5bb9\u6613\u5f15\u8d77\u6bd4\u8f83\u591a\u7684\u4e89\u8bae\uff1b\u4e8c\u6765\u662f\u56e0\u4e3a\u53bb\u5e74\u5f97\u5230\u4e86\u4e00\u4e9b\u5927\u8d44\u672c\u6781\u5927\u7684\u5174\u8da3\uff0c\u56e0\u6b64\u6211\u60f3\u7740\u4e00\u9f13\u4f5c\u6c14\u7b49\u62ff\u5230\u6295\u8d44\u4e4b\u540e\u518d\u516c\u5e03\u4e00\u4e9b\u4fe1\u606f\u3002\u5f53\u7136\u56e0\u4e3a\u5404\u79cd\u539f\u56e0\u5230\u73b0\u5728\u4e5f\u8fd8\u6ca1\u6709\u8c08\u5b9a\u6295\u8d44\uff0c\u6240\u4ee5\u8fd1\u51e0\u4e2a\u6708\u6211\u5c31\u5c06\u5168\u90e8\u7cbe\u529b\u7528\u4e8e\u5f00\u53d1\u4e86\u3002\u7ecf\u8fc7\u51e0\u4e2a\u6708\u7684\u8270\u82e6\u594b\u6218\uff0c\u4eca\u5929\u7ec8\u4e8e\u6709\u673a\u4f1a\u53ef\u4ee5\u7ed9\u5927\u5bb6\u5206\u4eab\u4e00\u4e9b\u6211\u7684\u60f3\u6cd5\uff0c\u4ee5\u53ca\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u8fc7\u7a0b\u3002\u5f53\u7136Reality World\u8fd8\u5904\u4e8e\u975e\u5e38\u65e9\u671f\u548c\u539f\u578b\u7684\u9636\u6bb5\uff0c\u6211\u9884\u8ba1\u8fd8\u4f1a\u518d\u8fed\u4ee3\u51e0\u4e2a\u7248\u672c\u5230v0.5.0\u5de6\u53f3\u624d\u4f1a\u5f00\u59cb\u6b63\u5f0f\u516c\u5e03\u6216\u8005\u5185\u6d4b\uff0c\u6240\u4ee5\u8fd9\u91cc\u6211\u4e5f\u4e0d\u4f1a\u6d89\u53ca\u592a\u591a\u6280\u672f\u7ec6\u8282\uff0c\u4f46\u662f\u6211\u53ef\u4ee5\u5206\u4eab\u6211\u4eec\u60f3\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u4ee5\u53ca\u4e3a\u4ec0\u4e48\u8981\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0c\u5e76\u5927\u6982\u8bf4\u660e\u4e00\u4e9b\u601d\u8def\uff0c\u8fd9\u6837\u5927\u5bb6\u5e94\u8be5\u80fd\u591f\u521d\u6b65\u4e86\u89e3Reality World\u662f\u4ec0\u4e48\uff0c\u540c\u65f6\u6211\u89c9\u5f97\uff0c\u5bf9\u8fd9\u4e9b\u95ee\u9898\u7684\u601d\u8003\u5176\u5b9e\u662f\u975e\u5e38\u6709\u4ef7\u503c\u7684\u90e8\u5206\u3002"),(0,n.kt)("h2",{id:"reality-world\u4e0d\u662f\u4ec0\u4e48"},"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6211\u8fc7\u53bb\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\uff0c\u4ee5\u53caReality Create\u4e5f\u5305\u542b\u76843D\u652f\u6301\uff0c\u5728\u6211\u4e0e\u6295\u8d44\u4eba\u6216\u8005\u5176\u4ed6\u670b\u53cb\u4ea4\u6d41\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5927\u5bb6\u666e\u904d\u7684\u5370\u8c61\u662f\u8fd9\u662f\u4e00\u4e2a\u65b0\u7684\u6e38\u620f\u5f15\u64ce\uff0c\u6240\u4ee5\u5927\u5bb6\u7684\u601d\u8def\u5c31\u662f\u4f60\u8ddfUnity\uff0cUnreal Engine\u4ee5\u53ca\u751a\u81f3\u5305\u62ec\u56fd\u5185\u8fd1\u51e0\u5e74\u4e5f\u6709\u5f88\u591a\u6e38\u620f\u5f15\u64ce\u521b\u4e1a\u7684\u4e00\u4e9b\u533a\u522b\u6216\u8005\u8bf4\u7ade\u4e89\u5173\u7cfb\uff0c\u800c\u4f1a\u5ffd\u89c6\u6211\u4eec\u6280\u672f\u4e0a\u53cd\u800c\u662f\u66f4\u52a0\u6838\u5fc3\u548c\u521b\u65b0\u7684\u90e8\u5206\uff0c\u6240\u4ee5\u8fd9\u4e2a\u8bef\u533a\u7684\u6f84\u6e05\u975e\u5e38\u91cd\u8981\uff1a"),(0,n.kt)("h3",{id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce"},"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01"),(0,n.kt)("p",null,"\u867d\u7136\u6211\u672c\u4eba\u591a\u5e74\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\u90fd\u662f\u4e0e\u6e38\u620f\u5f15\u64ce\u548c\u6e32\u67d3\u76f8\u5173\uff0c\u540c\u65f6\u73b0\u4ee3\u6e38\u620f\u5f15\u64ce\u5de5\u4e1a\u7684\u6280\u672f\u4e5f\u5728\u4e0d\u65ad\u53d1\u5c55\uff0c\u4f46\u662f\u6211\u4e00\u76f4\u89c9\u5f97\u5236\u7ea6\u7528\u6237\u968f\u5fc3\u6240\u6b32\u8868\u8fbe\u5185\u5bb9\u548c\u903b\u8f91\u7684\u90e8\u5206\u4e3b\u8981\u8fd8\u662f\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7a0b\u5e8f\u8fd0\u884c\u7684\u673a\u5236\uff0c\u800c\u6e38\u620f\u5f15\u64ce\u67b6\u6784\u548c\u6d41\u7a0b\u672c\u8eab\u867d\u7136\u4e5f\u5f88\u590d\u6742\uff0c\u4f46\u8fd9\u90e8\u5206\u90fd\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u7684\uff0c\u4f8b\u5982\u9664\u4e86\u7f16\u7a0b\u90e8\u5206\uff0c\u4e00\u4e9b\u7f8e\u672f\u751a\u81f3\u7b56\u5212\u4e5f\u662f\u80fd\u591f\u6bd4\u8f83\u597d\u7684\u4f7f\u7528\u5f15\u64ce\u7684\u4e00\u4e9b\u76f8\u5173\u529f\u80fd\uff0c\u4f46\u662f\u4e0e\u4e4b\u76f8\u53cd\u7684\u662f\uff0c\u903b\u8f91\u7684\u8868\u8fbe\u548c\u7f16\u7a0b\u901a\u5e38\u8fd8\u662f\u9700\u8981\u4e13\u95e8\u7684\u7a0b\u5e8f\u5458\u3002\u867d\u7136\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u6e38\u620f\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6216\u8005\u914d\u7f6e\u7684\u5f62\u5f0f\u90e8\u5206\u5b9e\u73b0\u975e\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f46\u8fd9\u6837\u7684\u67b6\u6784\u8fd8\u662f\u5f88\u96be\u505a\u5230\u901a\u7528\uff0c\u663e\u7136\u6570\u5b57\u4e16\u754c\u8fd8\u6709\u7740\u975e\u5e38\u591a\u7684\u5404\u5f0f\u5404\u6837\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u9700\u6c42\u9700\u8981\u4e00\u4e9b\u901a\u7528\u7684\u903b\u8f91\u8868\u8fbe\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u7684\u6838\u5fc3\u662f\u4e00\u5957\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u90e8\u5206\u7406\u89e3\u4e3a\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u4f46\u662f\u4e0e\u4f20\u7edf\u5355\u7eaf\u89e3\u91ca\u6e90\u4ee3\u7801\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u865a\u62df\u673a\u76f8\u6bd4\uff0c\u5b83\u5305\u542b\u4e00\u4e9b\u6e90\u4ee3\u7801\u89e3\u91ca\u7ffb\u8bd1\u4e4b\u5916\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6743\u9650\u9a8c\u8bc1\u3001\u6c99\u76d2\u5b89\u5168\u4e0e\u4e92\u64cd\u4f5c\u3001\u5206\u5e03\u5f0f\u5185\u5bb9\u5206\u53d1\u4e0e\u540c\u6b65\u3001\u7ec4\u4ef6\u7684\u4f9d\u8d56\u7ba1\u7406\u548c\u52a8\u6001\u52a0\u8f7d\u7b49\u7b49\uff0c\u56e0\u6b64\u53ef\u4ee5\u7406\u89e3\u4e3aReality World\u662f\u4e00\u4e2a\u50cf\u533a\u5757\u94fe\u7c7b\u4f3c\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff1b\u540c\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u6e90\u4ee3\u7801\u7684\u7ffb\u8bd1\u89e3\u91ca\u90e8\u5206\uff0cReality World\u4e5f\u6709\u7740\u5f88\u591a\u533a\u522b\u4e8e\u4f20\u7edf\u52a8\u6001\u8bed\u8a00\u865a\u62df\u673a\u89e3\u91ca\u7684\u6d41\u7a0b\u548c\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u8fd9\u5957\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6211\u4eec\u4f1a\u6784\u5efa3D\u5f15\u64ce\u7684\u80fd\u529b\u4ee5\u4f7f\u7528\u6237\u53ef\u4ee5\u5f00\u53d13D\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u8fd9\u90e8\u5206\u6280\u672f\u8ddf\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u4f7f\u7528\u7684\u6280\u672f\u4e0d\u4f1a\u6709\u592a\u5927\u5dee\u5f02\uff0c\u5f53\u7136\u56e0\u4e3a\u8fd0\u884c\u65f6\u73af\u5883\u4e0d\u540c\uff0c\u4e0e\u4e4b\u76f8\u5173\u76843D\u5f15\u64ce\u7684\u67b6\u6784\u548c\u6d41\u7a0b\u80af\u5b9a\u4f1a\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u9884\u671f\u5c06\u6765Reality Create\u7684\u6d41\u7a0b\u5e94\u8be5\u662f\u53ef\u4ee5\u6709\u4e00\u4e9b\u4e0d\u540c\u7684\u521b\u65b0\u4f53\u9a8c\u7684\u3002"),(0,n.kt)("p",null,"\u9664\u4e863D\u6e32\u67d3\uff0cReality Create\u7684\u8ba1\u5212\u4e5f\u53ef\u4ee5\u5f00\u53d12D\u5e94\u7528\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528\u4e00\u79cd\u7edf\u4e00\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6765\u7edf\u4e003D\u548c\u4f20\u7edf2D\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u6240\u4ee5\u5b83\u786e\u5207\u7684\u5b9a\u4f4d\u5e94\u8be5\u662f\u4e00\u4e2a\u57fa\u4e8e\u5206\u5e03\u5f0f\u7684\u3001\u901a\u7528\u7684\u5e94\u7528\u6784\u9020\u548c\u5f00\u53d1\u5e73\u53f0\uff0c\u800c\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u3002"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5173\u7684\u662f\uff0c"),(0,n.kt)("h3",{id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"},"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\uff0c\u81f3\u5c11\u76ee\u524d\u7684\u5143\u5b87\u5b99\u5927\u90e8\u5206\u90fd\u662f\u504f\u5411\u4e8e3D\uff0c\u7136\u540e\u671f\u671b\u4eba\u4eec\u6709\u4e9b\u66f4\u591a\u6c89\u6d78\u5f0f\u7684\u865a\u62df\u751f\u6d3b\u3002\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u8ddfReality World\u7684\u7406\u5ff5\u751a\u81f3\u662f\u76f8\u53cd\u7684\uff0c\u4ece\u540d\u5b57\u5c31\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u9009\u62e9Reality\u8fd9\u4e2a\u8bcd\uff0c\u662f\u5e0c\u671b\u6211\u4eec\u80fd\u591f\u5f15\u5bfc\u7528\u6237\u66f4\u591a\u5173\u6ce8\u73b0\u5b9e\uff0cReality World\u7684\u76ee\u6807\u662f\u5e0c\u671b\u901a\u8fc7\u63d0\u4f9b\u66f4\u7b80\u5316\u3001\u66f4\u5177\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f7f\u66f4\u591a\u7684\u4eba\u80fd\u591f\u968f\u5fc3\u6240\u6b32\u5730\u8868\u8fbeTA\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\uff0c\u5e76\u5c06\u8fd9\u4e9b\u7406\u89e3\u8f6c\u5316\u4e3a\u53ef\u4ea4\u4e92\u7684\u6570\u5b57\u7684\u5f62\u5f0f\uff0c\u4e0e\u5176\u4ed6\u66f4\u591a\u4eba\u5206\u4eab\uff0c\u6211\u89c9\u5f97\u5e94\u7528\u7684\u5f00\u53d1\u548c\u6784\u9020\u4e0e\u6587\u5b57\u3001\u56fe\u7247\u3001\u89c6\u9891\u4ee5\u53ca\u5176\u4ed6\u4fe1\u606f\u8f7d\u4f53\u4e00\u6837\uff0c\u6700\u5927\u7684\u4ef7\u503c\u4ecd\u7136\u662f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u6700\u6df1\u523b\u7684\u601d\u8003\u3001\u667a\u6167\u548c\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u6211\u5fc3\u91cc\u9762\u5bf9Reality World\u7684\u6700\u7cbe\u51c6\u7684\u63cf\u8ff0\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A self-evolving interoperable system.")),(0,n.kt)("p",null,"\u6216\u8005\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperating with multi-applications in a modular and composable system.")),(0,n.kt)("p",null,"\u4e5f\u8bb8\u770b\u4e86\u540e\u9762\u7684\u4e00\u4e9b\u4ecb\u7ecd\u4f60\u80fd\u591f\u5927\u6982\u7406\u89e3\u4e0a\u9762\u4e24\u53e5\u8bdd\u7684\u542b\u4e49"),(0,n.kt)("h2",{id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"},"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(1072).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u662fReality World\u6700\u6838\u5fc3\u7684\u673a\u5236"),(0,n.kt)("p",null,"\u6211\u5370\u8c61\u4e2d\uff0c\u5de5\u4e1a\u754c\u548c\u5a92\u4f53\u5f00\u59cb\u771f\u6b63\u8ba8\u8bba\u4e92\u64cd\u4f5c\u6027\u53ca\u5176\u76f8\u5173\u7684\u4e00\u4e9b\u8bba\u636e\uff0c\u5927\u90e8\u5206\u90fd\u6765\u6e90\u4e8eTim Sweeney\u7684\u90a3\u7bc7\u6f14\u8bb2\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/10.1145/3306307.3339844"},"https://dl.acm.org/doi/10.1145/3306307.3339844")),(0,n.kt)("p",null,"\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0cReality World\u7684\u76ee\u6807\u8ddfTim\u7684\u4e00\u4e9b\u63cf\u8ff0\u548c\u613f\u666f\u662f\u76f8\u4f3c\u7684\uff0c\u4f46\u4e5f\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6839\u672c\u4e0d\u540c\uff0c\u6211\u9996\u5148\u63cf\u8ff0\u8ddfTim\u6f14\u8bb2\u7684\u4e00\u4e9b\u5173\u7cfb\u548c\u903b\u8f91\uff0c\u7136\u540e\u518d\u4ecb\u7ecd\u6211\u4eec\u7684\u601d\u8003\uff0c\u901a\u8fc7\u8fd9\u4e9b\u95ee\u9898\u5c31\u53ef\u4ee5\u6bd4\u8f83\u81ea\u7136\u5730\u7406\u89e3Reality World\u7684\u76ee\u6807\u4ee5\u53ca\u60f3\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\u6211\u7b2c\u4e00\u6b21\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u662f\u5728\u53bb\u5e747\u6708\u5de6\u53f3\uff0c\u90a3\u4e2a\u65f6\u5019\u6211\u7684\u57fa\u672c\u67b6\u6784\u7684\u6784\u601d\u5df2\u7ecf\u521d\u6b65\u5b8c\u6210\uff0c\u5c24\u5176\u662f\u6700\u6838\u5fc3\u4e5f\u662f\u6700\u91cd\u8981\u7684\u4e00\u6b65\u57fa\u7840\u5df2\u7ecf\u8bbe\u8ba1\u597d\uff0c\u5f53\u65f6\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u611f\u5230\u5f88\u591a\u5171\u9e23\uff0c\u4e5f\u662f\u5bf9\u81ea\u5df1\u7684\u4e00\u79cd\u5f88\u5927\u7684\u6fc0\u52b1\uff0c\u6bd5\u7adf\u6709\u5bf9\u6280\u672f\u548c\u884c\u4e1a\u90fd\u6709\u975e\u5e38\u7ecf\u9a8c\u548c\u5f71\u54cd\u529b\u7684\u5927\u4f6c\u4e5f\u6709\u7c7b\u4f3c\u7684\u601d\u8003\u548c\u884c\u52a8\u3002\u4f46\u4ece\u53bb\u5e74\u5230\u73b0\u5728\uff0c\u6211\u4eec\u8fd8\u662f\u6cbf\u7740\u6211\u4eec\u65e9\u5148\u7684\u6280\u672f\u601d\u8def\uff0c\u57fa\u672c\u4e0a\u5e76\u6ca1\u6709\u53bb\u5173\u6ce8\u548c\u53c2\u8003\u592a\u591aEpic\u7684\u4e1c\u897f\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u4ece\u6280\u672f\u65b9\u6848\u5230\u76ee\u6807\u90fd\u662f\u6709\u5f88\u591a\u4e0d\u540c\u3002"),(0,n.kt)("p",null,"\u5728\u6280\u672f\u5c42\u9762\uff0cTim\u8ba4\u4e3a\u8fd9\u6837\u7684\u76ee\u6807\u5927\u6982\u53ef\u80fd\u9700\u898110\u5e74\u624d\u80fd\u5b8c\u6210\uff0c\u4f46Epic\u4f1a\u671d\u7740\u8fd9\u4e2a\u76ee\u6807\u9010\u6b65\u903c\u8fd1\u3002Epic\u7684\u8def\u7ebf\u5927\u6982\u662f\u51e0\u6b65\uff1a\u9996\u5148\u5c06\u4e00\u4e9b\u504f\u793e\u4ea4\u6216\u8005\u73a9\u5bb6\u7684\u975e\u4e13\u4e1a\u6e38\u620f\u5f00\u53d1\u8005\u8f6c\u79fb\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\uff0c\u8fd9\u90e8\u5206\u5f00\u53d1\u8005\u90fd\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u6e38\u620f\u5185\u90e8\u800c\u4e0d\u662f\u5355\u72ec\u4f7f\u7528Unreal Engine\u53bb\u521b\u4f5c\uff0c\u8fd9\u4e2a\u6a21\u5f0f\u5176\u5b9e\u7c7b\u4f3cRoblox\u7684\u6a21\u5f0f\uff0c\u5b83\u4e5f\u662f\u4e00\u79cd\u6e38\u620f\u5f15\u64ce\u8fd9\u79cd\u5546\u4e1a\u6a21\u5f0f\u7684\u8f6c\u578b\uff1a\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u53ea\u662f\u4e00\u4e2a\u5355\u673a\u7684\u751f\u6210\u5e94\u7528\u7a0b\u5e8f\u7684\u8f6f\u4ef6\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5185\u5bb9\u7531\u81ea\u5df1\u53bb\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837\u6e38\u620f\u5f15\u64ce\u4ec5\u4f5c\u4e3a\u4e00\u4e2a\u5de5\u5177\uff0c\u5b83\u53ea\u53c2\u4e0e\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u800c\u65e0\u6cd5\u53c2\u4e0e\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u56e0\u6b64\u65e0\u6cd5\u5f62\u6210\u751f\u6001\uff0c\u6240\u4ee5\u5c3d\u7ba1\u4e00\u4e9b\u5f15\u64ce\u6709\u5e9e\u5927\u7684\u5f00\u53d1\u8005\u6570\u91cf\u548c\u7fa4\u4f53\uff0c\u4f46\u662f\u8fd9\u79cd\u6570\u91cf\u5e76\u6ca1\u6709\u5f88\u6709\u6548\u7684\u65b9\u5f0f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u751f\u6001\u3002\u7136\u800cRoblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f60\u7684\u5185\u5bb9\u5fc5\u987b\u5206\u53d1\u5230\u8fd9\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5e76\u7531\u7279\u5b9a\u7684\u5ba2\u6237\u7aef\u8fd0\u884c\u65f6\u73af\u5883\u6765\u8fd0\u884c\uff0c\u800c\u65e0\u6cd5\u50cf\u5355\u72ec\u7684\u6e38\u620f\u5f15\u64ce\u90a3\u6837\u81ea\u884c\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837Roblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5c31\u53ef\u4ee5\u53c2\u4e0e\u6574\u4e2a\u5185\u5bb9\u7684\u5168\u90e8\u751f\u547d\u5468\u671f\uff0c\u8fd9\u6837\u5c31\u5f62\u6210\u751f\u6001\uff0c\u5176\u4ed6\u7684\u670d\u52a1\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u5957\u5206\u5e03\u5f0f\u7cfb\u7edf\u8fdb\u884c\u63d0\u4f9b\uff0c\u800c\u5bf9\u7528\u6237\u7684\u597d\u5904\u4e5f\u662f\u7b80\u5316\u4e86\u5185\u5bb9\u7684\u5206\u53d1\u90e8\u7f72\uff0c\u4ee5\u53ca\u66f4\u591a\u4fbf\u6377\u7684\u96c6\u6210\u670d\u52a1\uff0c\u4f8b\u5982\u4e0e\u5176\u4ed6\u73a9\u5bb6\u7684\u4e92\u52a8\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9606).Z,width:"1932",height:"1162"})),(0,n.kt)("p",null,"\u300a\u5821\u5792\u4e4b\u591c\u300bCreative\u6a21\u5f0f"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8981\u4f7f\u7528\u6237\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fdb\u884c\u5185\u5bb9\u5f00\u53d1\uff0c\u5c31\u5e26\u6765\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a\u4e00\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u95ee\u9898\uff0c\u4e8c\u662f\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\u3002\u8981\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fd0\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u672a\u53d7\u4fe1\u4efb\u7684\u4ee3\u7801\uff0c\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u96be\u7684\u95ee\u9898\uff0c\u8fd9\u4e5f\u6d89\u53ca\u5230Reality World\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u6838\u5fc3\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9467).Z,width:"1446",height:"486"})),(0,n.kt)("p",null,"\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"NaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002"),(0,n.kt)("p",null,"Web Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9875).Z,width:"1920",height:"1079"})),(0,n.kt)("p",null,"Epic\u63a8\u51faVerse language"),(0,n.kt)("p",null,"\u56de\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\uff0cEpic\u663e\u7136\u4e0d\u53ef\u80fd\u8ba9\u73a9\u5bb6\u4f7f\u7528Unreal Engine\u7684C++\u6216\u8005blueprint\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u5185\u5b58\u73af\u5883\u4e2d\u8fd0\u884c\uff0cUnreal Engine\u76ee\u524d\u4e5f\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\u65b9\u6848\uff0c\u56e0\u6b64Epic\u9700\u8981\u5f00\u53d1\u4e00\u5957\u65b0\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u5c31\u662f\u4eca\u5e74\u65e9\u4e9b\u65f6\u5019\u53d1\u5e03\u7684Verse programming language\u3002Epic\u4e3a\u6b64\u6316\u6765\u4e86Haskell\u7684\u4f5c\u8005Simon Peyton Jones\uff0c\u4ee5\u53ca\u4e4b\u524d\u6536\u8d2d\u7684\u4e00\u4e2a\u4e3aUnreal Engine\u5f00\u53d1\u811a\u672c\u8bed\u8a00\u7684\u56e2\u961fSkookumScript\uff0c\u636e\u8bf4\u8fd8\u6709\u5199V8\u5185\u6838\u7684\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u5173\u4e8eVerse language\u672c\u8eab\uff0c\u76ee\u524d\u8fd8\u6ca1\u6709\u592a\u591a\u4fe1\u606f\uff0c\u4f46\u662f\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u7684\u4f7f\u547d\u4e00\u662f\u4e3a\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u521b\u4f5c\u63d0\u4f9b\u4e00\u79cd\u5b89\u5168\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u800c\u4e14\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u5fc5\u7136\u5305\u542b\u4e00\u5b9a\u7684\u6c99\u76d2\u673a\u5236\uff0c\u6765\u4fdd\u8bc1\u5b89\u5168\u6027\u3002"),(0,n.kt)("p",null,"\u534f\u4f5c\u7684\u7b2c\u4e8c\u4e2a\u8981\u6c42\u662f\u4e92\u64cd\u4f5c\uff0c\u4e92\u64cd\u4f5c\u6027\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"If two or more systems use commondata formatsandcommunication protocolsand are capable of communicating with each other, they exhibit",(0,n.kt)("em",{parentName:"p"},"syntactic interoperability"),". XML and SQL are examples of common data formats and protocols.")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u548c\u8f6f\u4ef6\u9694\u79bb\u901a\u5e38\u662f\u76f8\u4e92\u77db\u76fe\u7684\uff0c\u4e92\u64cd\u4f5c\u8868\u73b0\u4e3a\u6211\u5e0c\u671b\u66f4\u7b80\u5355\u66f4\u65b9\u4fbf\u5730\u8bbf\u95ee\u522b\u4eba\u7684\u6570\u636e\u6216\u63a5\u53e3\uff0c\u800c\u9694\u79bb\u5219\u5047\u8bbe\u9664\u6211\u4e4b\u5916\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u53ef\u4fe1\u7684\uff0c\u4e0d\u8981\u8f7b\u6613\u5730\u8bbf\u95ee\uff0c\u6216\u8005\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\u4f7f\u8fd9\u79cd\u8bbf\u95ee\u7684\u4ee3\u4ef7\u548c\u96be\u5ea6\u589e\u52a0\u3002\u5c24\u5176\u5728\u6e38\u620f\u8fd9\u79cd\u5b9e\u65f6\u7684\u8fd0\u884c\u73af\u5883\uff0c\u8fd9\u79cd\u4ee3\u4ef7\u548c\u96be\u5ea6\u5f80\u5f80\u610f\u5473\u7740\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"Tim\u57282019\u5e74\u7684\u6f14\u8bb2\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u540e\u7eed\u57fa\u4e8eVerse\u7684\u4ee3\u7801\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0cReality World\u90fd\u6709\u7740\u4e0d\u540c\u7684\u6280\u672f\u601d\u8003\u548c\u65b9\u6848\u3002"),(0,n.kt)("h3",{id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"},"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"),(0,n.kt)("p",null,"\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cReality World\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"},"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u6027\u8fd9\u4e2a\u6982\u5ff5\uff0c\u6211\u8ddf\u5927\u90e8\u5206\u6295\u8d44\u4eba\u89e3\u91ca\u57fa\u672c\u4e0a\u90fd\u662f\u5f88\u96be\u7406\u89e3\u7684\uff0c\u5f53\u7136\u8fd9\u91cc\u53ef\u80fd\u6211\u5bf9\u4e92\u64cd\u4f5c\u6027\u8d4b\u4e88\u4e86\u66f4\u591a\u7684\u610f\u4e49\u3002\u4ece\u7a0b\u5e8f\u673a\u5236\u4e0a\u6765\u8bb2\uff0c\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u6d89\u53ca\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c\u76f8\u4e92\u8c03\u7528\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5927\u90e8\u5206\u8bed\u8a00\u90fd\u53ef\u4ee5\u901a\u8fc7C\u63a5\u53e3\u5b9e\u73b0\u76f8\u4e92\u8c03\u7528\uff0c\u518d\u5f80\u4e0a\u4e00\u70b9\uff0c\u4efb\u4f55\u7a0b\u5e8f\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\u7136\u540e\u5185\u90e8\u8fdb\u884c\u683c\u5f0f\u89e3\u91ca\uff0c\u4e5f\u4ecd\u7136\u662f\u80fd\u591f\u8fdb\u884c\u901a\u4fe1\u7684\u3002\u5b9e\u9645\u4e0a\u4e92\u8054\u7f51\u7684\u673a\u5236\u5c31\u662f\u5982\u6b64\uff0cOSI\uff08Open systems Interconnection\uff09\u7684\u673a\u5236\u5c31\u662f\u5b9e\u73b0\u4e86\u4efb\u4f55\u8ba1\u7b97\u673a\u6216\u8005\u4efb\u610f\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5b57\u7b26\u4e32\u901a\u4fe1\uff0c\u4ece\u800c\u89e3\u51b3\u4e86\u6574\u4e2a\u8ba1\u7b97\u673a\u7f51\u7edc\u4e92\u8054\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u7684\u5176\u4e2d\u4e00\u4e2a\u91cd\u8981\u673a\u5236\uff0c\u5c31\u662f\u8981\u8ba9\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\uff0c\u5176\u5b9a\u4e49\u7684\u6570\u636e\u63a5\u53e3\u975e\u5e38\u8f7b\u6613\u5730\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u8bbf\u95ee\uff0c\u540c\u65f6\u7ed3\u5408\u4e0a\u9762\u7684\u6c99\u76d2\u6280\u672f\u4fdd\u8bc1\u8fd9\u79cd\u6570\u636e\u8bbf\u95ee\u7684\u5b89\u5168\uff0c\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u7684\u6c99\u76d2\u6280\u672f\u4e0d\u80fd\u53ea\u662f\u5728\u6700\u5e95\u5c42\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9984).Z,width:"1954",height:"864"})),(0,n.kt)("p",null,"Pixar USD"),(0,n.kt)("p",null,"\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"API\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-text"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("p",null,"\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3819).Z,width:"2157",height:"1113"})),(0,n.kt)("p",null,"Modular"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cReality World\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002"),(0,n.kt)("p",null,"\u7ed3\u5408\u524d\u9762\u8ba8\u8bba\u7684\u6c99\u76d2\u6280\u672f\u3001\u4e92\u64cd\u4f5c\u3001\u788e\u7247\u5316\u7b49\u7b49\u673a\u5236\uff0cReality World\u5e0c\u671b\u80fd\u591f\u901a\u8fc7\u4e00\u4e9b\u521b\u65b0\u63a2\u7d22\uff0c\u6784\u5efa\u8d77\u4e00\u4e2a\u66f4\u597d\u7684\u4e92\u64cd\u4f5c\u5e73\u53f0\uff0c\u4f7f\u5f97\u4e0a\u9762\u7684\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u5b83\u770b\u8d77\u6765\u50cf\u662f\u57fa\u4e8eOSI\u4e4b\u4e0a\u6dfb\u52a0\u7684\u4e00\u4e2a\u4e92\u64cd\u4f5c\u5c42\uff0c\u5728\u8fd9\u4e2a\u4e92\u64cd\u4f5c\u5c42\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u64cd\u4f5c\u7684\u662f\u6765\u81ea\u5176\u4ed6\u5e94\u7528\u7684\u5185\u5b58\u6570\u636e\uff0c\u5c31\u50cf\u4f60\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u6570\u636e\u4e00\u6837\u7b80\u5355\uff0c\u5c3d\u7ba1\u8fd9\u4e2a\u6570\u636e\u53ef\u80fd\u6765\u81ea\u4e8e\u5176\u4ed6\u7684\u670d\u52a1\u5668\u3002"),(0,n.kt)("h2",{id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(2382).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u5bf9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u5f88\u591a\u8c03\u6574"),(0,n.kt)("p",null,"\u6211\u4eec\u7a0b\u5e8f\u5458\uff0c\u7ec8\u5176\u4e00\u751f\u53ef\u80fd\u90fd\u5e0c\u671b\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u7a0b\u5e8f\u5230\u5e95\u662f\u600e\u4e48\u8fd0\u884c\u7684\uff0c\u8fd9\u79cd\u7406\u89e3\u4e0d\u5149\u80fd\u591f\u8ba9\u6211\u4eec\u66f4\u9ad8\u6548\u5730\u7f16\u5199\u66f4\u5065\u58ee\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u521b\u9020\u8f6f\u4ef6\u7684\u4ef7\u503c\uff0c\u540c\u65f6\uff0c\u7f16\u7a0b\u7684\u673a\u5236\u672c\u8eab\u5145\u6ee1\u7740\u65e0\u7a77\u7684\u9b45\u529b\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4eba\u7c7b\u6709\u53f2\u4ee5\u6765\u80fd\u591f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u590d\u6742\u7684\u601d\u7ef4\u548c\u903b\u8f91\u7684\u6700\u597d\u7684\u673a\u5236\u4e4b\u4e00\uff0c\u5b83\u5c06\u4eba\u7c7b\u5bf9\u7269\u7406\u4e16\u754c\u7684\u7406\u89e3\u53ca\u5176\u5f62\u6210\u7684\u667a\u6167\u8f6c\u5316\u4e3a\u4e3a\u4eba\u7c7b\u670d\u52a1\u7684\u5de5\u5177\u548c\u529b\u91cf\uff0c\u8fd9\u662f\u6211\u4eec\u70ed\u7231\u7f16\u7a0b\u7684\u5176\u4e2d\u4e00\u4e9b\u539f\u56e0\u3002"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u6765\uff0c\u5bf9\u4e8e\u7f16\u7a0b\uff0c\u6211\u4e00\u76f4\u6709\u4e24\u79cd\u4e0d\u4e00\u6837\u7684\u60c5\u611f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6211\u4e00\u76f4\u4e0d\u559c\u6b22\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u6211\u66f4\u559c\u6b22\u5f00\u53d1\u80fd\u591f\u7528\u4e8e\u6784\u9020\u8f6f\u4ef6\u7684\u8f6f\u4ef6")),(0,n.kt)("p",null,"\u4eca\u5929\uff0cReality World\u7684\u7b2c\u4e8c\u4e2a\u6838\u5fc3\u5173\u6ce8\u70b9\u548c\u57fa\u7840\u5c31\u662f\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u65b0\u7684\u63a2\u7d22\u3002\u4e16\u754c\u4e0a\u53ea\u6709\u5927\u7ea6\u4e0d\u52300.5%\u7684\u4eba\u662f\u4f1a\u7f16\u5199\u4ee3\u7801\u7684\uff0c\u7ea63000\u4e07\u5de6\u53f3\uff0c\u6240\u4ee5\u6570\u5b57\u5316\u8868\u8fbe\u7684\u6f5c\u529b\u8fd8\u8fdc\u8fdc\u6ca1\u6709\u88ab\u53d1\u6325\u51fa\u6765\u3002\u5982\u679c\u6211\u4eec\u5c06\u8fd9\u4e2a\u6570\u5b57\u63d0\u5347\u52305\u4ebf~10\u4ebf\uff0c\u770b\u770b\u8fd8\u6709\u54ea\u4e9b\u53d8\u9769\u9700\u8981\u53d1\u751f\uff0c\u53ef\u80fd\u4e0e\u4f60\u60f3\u8c61\u4e2d\u4e0d\u592a\u4e00\u6837\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u672c\u8eab\u53ef\u80fd\u5e76\u4e0d\u662f\u5236\u7ea6\u56e0\u7d20\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"},"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u5de5\u4f5c\u7ecf\u5386\uff0c\u6211\u5199\u8fc7C#\u3001C\u3001C++\u3001Ruby\u3001Lua\u3001Rust\u7b49\uff0c\u4ee5\u53ca\u6700\u8fd1\u4e00\u5e74\u591a\uff0c\u6211\u51e0\u4e4e\u770b\u4e86\u6240\u6709\u80fd\u4e70\u5230\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u7b49\u76f8\u5173\u7684\u4e66\u7c4d\uff08\u540e\u9762\u4f1a\u4ecb\u7ecd\uff09\u3002\u5728\u6211\u5199\u8fc7\u7684\u4ee3\u7801\u4e2d\uff0c\u603b\u6709\u4e00\u79cd\u611f\u89c9\uff0c\u4e0d\u7ba1\u6211\u770b\u8fc7\u591a\u5c11\u8bbe\u8ba1\u6a21\u5f0f\u6216\u8005\u67b6\u6784\u76f8\u5173\u7684\u8d44\u6599\uff0c\u6211\u603b\u662f\u89c9\u5f97\u5f88\u96be\u5199\u51fa\u90a3\u79cd\u903b\u8f91\u7ed3\u6784\u7279\u522b\u6e05\u6670\u7684\u67b6\u6784\u548c\u4ee3\u7801\uff0c\u56e0\u6b64\u7f16\u7a0b\u4f53\u9a8c\u50cf\u662f\u603b\u6709\u4e00\u4e2a\u4ec0\u4e48\u4e1c\u897f\uff0c\u5835\u5728\u6211\u7684\u5fc3\u91cc\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u77e5\u4e4e "),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/people/16d0cb25df98c0c909e60b135a5800c5"},"@\u5927\u5bbd\u5bbd")),(0,n.kt)("p",null," \u6709\u4e00\u7bc7\u56de\u7b54\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/29888990/answer/703226836"},"\u5982\u4f55\u770b\u5f85Erlang\u4e4b\u7236Joe Armstrong\u89c9\u5f97OO\u7f16\u7a0b\u5f88\u70c2\uff1f"),"\uff0c\u5176\u4e2d\u5f15\u7528\u5230Erlang\u4e4b\u7236Joe Armstrong\u7684\u4e00\u6bb5\u91c7\u8bbf\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/"},"Ralph Johnson, Joe Armstrong on the State of OOP")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Alan Kay himself wrote this famous thing and said ",(0,n.kt)("strong",{parentName:"p"},'"The notion of object oriented programming is completely')," ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"misunderstood"),(0,n.kt)("strong",{parentName:"p"},". It's not about objects and classes, it's all about messages"),'". He wrote that and he said that the initial ',(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"reaction")," to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.")),(0,n.kt)("p",null,"Alan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(6081).Z,width:"1155",height:"697"})),(0,n.kt)("p",null,"Erlang\u4e4b\u7236Joe Armstrong\uff08\u53f3\uff09"),(0,n.kt)("p",null,"Erlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about")),(0,n.kt)("p",null,"\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002Reality World\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002"),(0,n.kt)("h3",{id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u800c\u8a00\uff0c\u5f53\u524d\u6709\u5f88\u591aScratch\u7f16\u7a0b\u5e73\u53f0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7b80\u5355\u7684\u4efb\u52a1\uff1a\u5373\u53ea\u6709\u5c11\u91cf\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u4e14\u901a\u5e38\u53ea\u6709\u4e00\u4e2a\u6216\u5c11\u6570\u51e0\u4e2a\u51fd\u6570\u7684\u4efb\u52a1\uff0c\u5927\u90e8\u5206\u6709\u4e00\u4e9b\u57fa\u672c\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u80fd\u529b\u7684\u4eba\u662f\u53ef\u4ee5\u5728\u5f88\u77ed\u65f6\u95f4\u5185\u5b66\u4f1a\u7684\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u7eaf\u7684\u903b\u8f91\u8ba1\u7b97\u5e76\u4e0d\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002\u5728\u300a\u8ba1\u7b97\u673a\u7a0b\u5e8f\u7684\u6784\u9020\u548c\u89e3\u91ca\u300b\u4e00\u4e66\u4e2d\u6307\u51fa\uff0c\u7f16\u7a0b\u6a21\u578b\u672c\u8d28\u4e0a\u8981\u89e3\u51b3\u7684\u662f\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u4e0d\u7ba1\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u6b63\u662f\u8fd9\u4e9b\u4e3a\u4e86\u5e2e\u52a9\u4eba\u4eec\u7ba1\u7406\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u673a\u5236\uff0c\u63d0\u5347\u4e86\u7f16\u7a0b\u7684\u95e8\u69db\uff0c\u4f8b\u5982\u975e\u7a0b\u5e8f\u5458\u80af\u5b9a\u53ef\u4ee5\u5f88\u5feb\u7406\u89e3\u7c7b\u548c\u5bf9\u8c61\u7684\u6982\u5ff5\uff0c\u4f46\u662f\u7406\u89e3\u865a\u51fd\u6570\u548c\u591a\u6001\u5c31\u662f\u53e6\u5916\u4e00\u56de\u4e8b\u4e86\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u673a\u5236\u7684\u6dfb\u52a0\u770b\u8d77\u6765\u662f\u7406\u6240\u5f53\u7136\u7684\uff0c\u4f46\u662f\u7a0d\u5fae\u6df1\u5165\u7406\u89e3\u4e00\u4e0b\u7f16\u7a0b\u8bed\u8a00\u7684\u7f16\u8bd1\u8fc7\u7a0b\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u662f\u8ddf\u5e95\u5c42\u7684\u7f16\u8bd1\u673a\u5236\u76f8\u5173\u7684\uff0c\u800c\u73b0\u4ee3\u7684\u7f16\u8bd1\u6d41\u7a0b\u53c8\u51e0\u4e4e\u662f\u4e0e\u5e95\u5c42\u7684\u786c\u4ef6\u67b6\u6784\u6709\u5173\u7684\u3002\u4f8b\u5982\u7ee7\u627f\u7684\u673a\u5236\u548c\u9650\u5236\uff0c\u4f7f\u5f97\u7f16\u8bd1\u5668\u53ef\u4ee5\u8ba1\u7b97\u6b63\u786e\u7684\u51fd\u6570\u5730\u5740\uff0c\u4f8b\u5982\u4f60\u5fc5\u987b\u8981\u4ece\u4e00\u5806\u590d\u6742\u7684\u4ee3\u7801\u4e2d\u62ff\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u8fd9\u4f7f\u5f97\u4f60\u4e0d\u5f97\u4e0d\u628a\u591a\u4e2a\u4ee3\u7801\u6587\u4ef6\u4ea4\u7ec7\u5728\u4e00\u8d77\uff09\u624d\u80fd\u6b63\u786e\u5730\u8bbf\u95ee\u76f8\u5e94\u7684\u65b9\u6cd5\uff0c\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u51e0\u4e4e\u603b\u662f\u5145\u6ee1\u590d\u6742\u7684\u5f15\u7528\u5173\u7cfb\uff0c\u5c3d\u7ba1\u8fd9\u770b\u8d77\u6765\u50cf\u662f\u5fc5\u987b\u7684\uff0c\u4f8b\u5982\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u4f46\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u5fc5\u987b\u8981\u8fd9\u6837\u624d\u80fd\u83b7\u5f97\u6b63\u786e\u7684\u5bf9\u8c61\u5730\u5740\uff0c\u4ece\u800c\u8bbf\u95ee\u5176\u4e2d\u7684\u6570\u636e\u548c\u65b9\u6cd5\u3002\u4f46\u662f\u5982\u679c\u4ec5\u4ec5\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u6709\u5f88\u591a\u673a\u5236\uff0c\u4e0d\u662f\u8bf4\u6211\u4e00\u5b9a\u8981\u6bcf\u6b21\u4eb2\u81ea\u5230\u4e00\u4e2a\u5e97\u4e70\u5230\u7684\u4e1c\u897f\u624d\u662f\u7edd\u5bf9\u5b89\u5168\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5feb\u9012\u5458\u672c\u8eab\u662f\u67d0\u79cd\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u6211\u5c31\u53ef\u4ee5\u4e0d\u7528\u4eb2\u81ea\u53bb\u5e97\u91cc\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6211\u60f3\u8981\u7684\u6570\u636e\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u8981\u5173\u6ce8\u7684\u53ea\u662f\u4ec0\u4e48\u4e1c\u897f\uff08\u6570\u636e\u7c7b\u578b\uff09\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7269\u7406\u5730\u5740\uff08\u5bf9\u8c61\u5f15\u7528\uff09\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u7ed3\u6784\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\u5176\u4e00\u662f\u5355\u4e2a\u51fd\u6570\u6216\u8005\u5355\u4e2a\u5bf9\u8c61\u672c\u8eab\u7684\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\u7684\u903b\u8f91\uff0c\u5176\u4e2d\u53ef\u80fd\u4ec5\u4ec5\u6d89\u53ca\u6700\u57fa\u672c\u7684\u7b97\u672f\u548c\u903b\u8f91\u8ba1\u7b97\uff1b\u800c\u53e6\u4e00\u90e8\u5206\u5219\u662f\u4e3a\u4e86\u5e2e\u52a9\u8ba1\u7b97\u673a\u7f16\u8bd1\u7cfb\u7edf\uff08\u53ef\u80fd\u4e5f\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7406\u89e3\uff09\u6784\u9020\u5927\u89c4\u6a21\u8f6f\u4ef6\u63d0\u4f9b\u7684\u4e00\u4e9b\u4fe1\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3090).Z,width:"2546",height:"1427"})),(0,n.kt)("p",null,"Reality World\u5728\u7a0b\u5e8f\u7ed3\u6784\u65b9\u9762\u7684\u76ee\u6807\uff0c\u5c31\u662f\u8981\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u67b6\u6784\uff0c\u4f7f\u5f97\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u88ab\u9690\u85cf\u5728\u7f16\u8bd1\u7cfb\u7edf\u548c\u8fd0\u884c\u65f6\u5185\u90e8\uff0c\u8fd9\u6837\u5f00\u53d1\u8005\u5c31\u53ea\u9700\u8981\u5173\u6ce8\u6700\u57fa\u672c\u7684\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u3002\u6211\u4eec\u901a\u8fc7\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u6765\u4f7f\u5f97\u8fd0\u884c\u65f6\u7cfb\u7edf\u53ef\u4ee5\u52a8\u6001\u63a8\u5bfc\u51fa\u4e00\u4e9b\u6784\u6210\u5927\u89c4\u6a21\u7a0b\u5e8f\u9700\u8981\u7684\u7ed3\u6784\u3002"),(0,n.kt)("h3",{id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"},"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u548c\u7a0b\u5e8f\u7ed3\u6784\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u901a\u5e38\u5bb9\u6613\u5ffd\u7565\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u56e0\u4e3a\u76ee\u524d\u7f16\u7a0b\u7684\u5927\u90e8\u5206\u90fd\u662f\u4e13\u4e1a\u7a0b\u5e8f\u5458\uff0c\u8fd9\u4e2a\u95ee\u9898\u770b\u8d77\u6765\u7406\u6240\u5f53\u7136\u3002\u90a3\u5c31\u662f\u5173\u4e8e\u6570\u636e\u7ba1\u7406\u3002\u6570\u636e\u7ba1\u7406\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u5b83\u65e2\u5173\u4e4e\u7a0b\u5e8f\u7684\u590d\u6742\u5ea6\uff0c\u53c8\u5173\u4e4e\u524d\u9762\u63d0\u5230\u7684\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,"\u5728\u5e94\u7528\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u65e2\u9700\u8981\u7f16\u5199\u903b\u8f91\u4ee3\u7801\uff0c\u8fd8\u9700\u8981\u5904\u7406\u6570\u636e\u7ba1\u7406\uff1a\u6570\u636e\u5728\u4ec0\u4e48\u65f6\u5019\u521d\u59cb\u5316\uff0c\u5728\u90a3\u4e2a\u4ee3\u7801\u903b\u8f91\u5904\u521d\u59cb\u5316\uff0c\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u8c61\u88ab\u4fee\u6539\u4e86\u600e\u6837\u4fdd\u5b58\u6570\u636e\u7b49\u7b49\uff0c\u751a\u81f3\u5305\u62ec\u4e3a\u4e86\u8003\u8651\u7f13\u5b58\u6027\u80fd\u6240\u505a\u51fa\u7684\u4e00\u4e9b\u5904\u7406\uff0c\u8fd9\u4e9b\u5de5\u4f5c\u662f\u975e\u5e38\u7e41\u7410\u7684\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u5f00\u53d1\u8005\u51e0\u4e4e\u603b\u662f\u8fd8\u8981\u5173\u5fc3\u5b58\u50a8\uff0c\u9664\u975e\u662f\u4ec5\u5b58\u50a8\u5728\u672c\u5730\uff0c\u5426\u5219\u8fd8\u9700\u8981\u8bbe\u7f6e\u670d\u52a1\u5668\u5b58\u50a8\u548c\u83b7\u53d6\u4e00\u4e9b\u6570\u636e\u3002\u8fd9\u4e9b\u5de5\u4f5c\u5bf9\u4e8e\u666e\u901a\u7684\u7528\u6237\u5f00\u53d1\u5e94\u7528\u7a0b\u5e8f\u800c\u8a00\u90fd\u662f\u6bd4\u8f83\u56f0\u96be\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9800).Z,width:"1610",height:"399"})),(0,n.kt)("p",null,"GrapQL"),(0,n.kt)("p",null,"\u6240\u4ee5\u7ed3\u5408\u4e0a\u8ff0\u7684\u7a0b\u5e8f\u7ed3\u6784\u5316\u7684\u81ea\u52a8\u7ba1\u7406\uff0c\u4e00\u79cd\u597d\u7684\u7b56\u7565\u662f\u7a0b\u5e8f\u7684\u6570\u636e\u4e5f\u53ef\u4ee5\u81ea\u52a8\u7ba1\u7406\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f00\u53d1\u8005\u4ec5\u5173\u6ce8\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u57fa\u672c\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6240\u6709\u6d89\u53ca\u5230\u6216\u8005\u8bf4\u53ea\u662f\u7f16\u8bd1\u5668\u6216\u7f16\u8bd1\u7cfb\u7edf\u9700\u8981\u7684\u7ba1\u7406\u90fd\u5e94\u8be5\u5c3d\u53ef\u80fd\u4ea4\u7ed9\u8fd0\u884c\u65f6\u3002GraphQL\u5728\u8fd9\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u6bd4\u8f83\u597d\u7684\u5c1d\u8bd5\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u544a\u77e5\u4e00\u4e2a\u60f3\u8981\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u83b7\u53d6\u5230\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u800c\u5c06\u8fd9\u4e9b\u6570\u636e\u80cc\u540e\u7684\u590d\u6742\u903b\u8f91\u9690\u85cf\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u6570\u636e\u672c\u8eab\u7684\u7ba1\u7406\uff0c\u6570\u636e\u8fd8\u6d89\u53ca\u5230\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\uff0c\u7528\u6237\u5e0c\u671b\u81ea\u5df1\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5176\u4ed6\u5e94\u7528\u65b9\u4fbf\u5730\u8bbf\u95ee\uff0c\u8fd9\u4e9b\u673a\u5236\u90fd\u662f\u548c\u6570\u636e\u7684\u7ba1\u7406\u8fc7\u7a0b\u53ca\u5176\u8bbe\u8ba1\u606f\u606f\u76f8\u5173\u7684\u3002"),(0,n.kt)("h2",{id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3206).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u7684\u7a0b\u5e8f\u7ed3\u6784\u4e0e\u6587\u672c\u5408\u6210\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("p",null,"ChatGPT\u5e2d\u5377\u4e86\u6574\u4e2a\u4e16\u754c\uff0c\u6216\u8005\u81f3\u5c11\u662f\u79d1\u6280\u5708\uff0c\u4e0d\u7ba1\u662f\u4ece\u8d44\u672c\uff0c\u56fd\u4f01\uff0c\u6c11\u4f01\uff0c\u7a0b\u5e8f\u5458\u4e2a\u4eba\u7b49\u7b49\u90fd\u662f\u53d7\u5230\u5f88\u5927\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u4e5f\u6709\u50cf\u6211\u4eec\u5c0f\u5b69\u7684\u5988\u5988\uff0c\u4ee5\u53ca\u4ed6\u5988\u5988\u7684\u670b\u53cb\uff0c\u76ee\u524d\u8fd8\u4e0d\u592a\u4e86\u89e3ChatGPT\u662f\u5e72\u4ec0\u4e48\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4e8e2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\u5e76\u5f00\u59cb\u7814\u7a76\u548c\u8bbe\u8ba1Reality World\u7684\u67b6\u6784\uff0c\u90a3\u4e2a\u65f6\u5019\u7684\u70ed\u70b9\u8fd8\u662f\u5143\u5b87\u5b99\u3002\u90a3\u4e2a\u65f6\u5019\uff0c\u7531\u4e8e\u6ca1\u6709\u73b0\u5728\u5927\u6a21\u578b\u7684\u8fd9\u79cd\u80fd\u529b\uff0c\u6211\u4eec\u5f53\u7136\u4e5f\u6ca1\u6709\u4e3b\u8981\u53bb\u601d\u8003AI\u65b9\u9762\u7684\uff0c\u4f46\u662f\u4ece\u6211\u4eec\u81ea\u5df1\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\uff0c\u6211\u548c\u6211\u4eec\u516c\u53f8\u76842\u53f7\u5458\u5de5\uff0c\u57282020\u5e74\u7684\u65f6\u5019\u5c31\u601d\u8003\u548c\u8ba8\u8bba\u5c06\u6765\u600e\u6837\u8ba9AI\u5199\u4ee3\u7801\uff0c\u5f53\u7136\u6211\u4eec\u8bf4\u7684\u4e0d\u662f\u73b0\u5728\u8fd9\u79cd\u57fa\u4e8e\u5927\u6a21\u578b\u6765\u751f\u6210\u6587\u672c\u7684\u65b9\u5f0f\u751f\u6210\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u5927\u6a21\u578b\u786e\u5b9e\u52a0\u901f\u4e86\u6211\u4eec\u7684\u4e00\u4e9b\u60f3\u6cd5\u3002"),(0,n.kt)("h3",{id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"},"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u8d77\u521d\u7684\u76ee\u6807\u662f\u8ba9\u666e\u901a\u4eba\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u5e76\u6784\u9020\u4e00\u4e2a\u5b8c\u6574\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u4e5f\u662f\u6211\u4eec\u524d\u9762\u7b2c3\u90e8\u5206\u8ba8\u8bba\u7684\u5185\u5bb9\u3002\u7136\u800c\u6bd4\u8f83\u5de7\u5408\u548c\u60ca\u8bb6\u7684\u662f\uff0c\u81f3\u5c11\u4ece\u6211\u4eec\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\u770b\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u8ba9\u666e\u901a\u4eba\u4f1a\u7f16\u5199\u4ee3\u7801\u4e0e\u8ba9AI\u7f16\u5199\u4ee3\u7801\u7684\u903b\u8f91\u662f\u7c7b\u4f3c\u7684\u3002")),(0,n.kt)("p",null,"\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u53ef\u4ee5\u7528\u8bed\u8a00\u8868\u8ff0\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u4eba\u7c7b\u7684\u4efb\u4f55\u4fe1\u606f\u4e0e\u667a\u6167\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528\u81ea\u7136\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u3002\u7136\u800c\u8bed\u8a00\u6587\u5b57\u662f\u4e00\u79cd\u9762\u5411\u4eba\u7c7b\u7684\u4fe1\u606f\u8f7d\u4f53\uff0c\u5b83\u662f\u4e3a\u4e86\u4fbf\u4e8e\u4eba\u7c7b\u4e4b\u95f4\u8fdb\u884c\u4fe1\u606f\u4ea4\u6d41\u800c\u8bbe\u8ba1\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u80fd\u4e0d\u90a3\u4e48\u4e25\u8c28\uff0c\u751a\u81f3\u6ca1\u6709\u592a\u591a\u7ed3\u6784\u6027\uff0c\u4eba\u4eec\u4e4b\u95f4\u9700\u8981\u4fe1\u606f\u7f16\u89e3\u7801\uff0c\u7f16\u89e3\u7801\u7684\u6548\u7387\u548c\u80fd\u529b\u53ef\u80fd\u5dee\u5f02\u90fd\u975e\u5e38\u5de8\u5927\u3002\u800c\u7a0b\u5e8f\uff0c\u5219\u662f\u5728\u81ea\u7136\u8bed\u8a00\u57fa\u7840\u4e4b\u4e0a\u52a0\u5165\u66f4\u591a\u7684\u7ed3\u6784\u6027\uff0c\u5b83\u5728\u8868\u8ff0\u548c\u8bb0\u8f7d\u903b\u8f91\u7684\u540c\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0e\u8ba1\u7b97\u673a\u548c\u5176\u4ed6\u7a0b\u5e8f\u8fdb\u884c\u6c9f\u901a\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u7c7b\u5927\u8111\u4e2d\u7684\u903b\u8f91\u4e0d\u5149\u53ef\u4ee5\u7528\u4e8e\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6d41\uff0c\u8fd8\u53ef\u4ee5\u66f4\u76f4\u63a5\u5730\u8f6c\u5316\u4e3a\u751f\u4ea7\u529b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8981\u8ba9AI\u80fd\u591f\u751f\u6210\u4ee3\u7801\uff0c\u8fd9\u4ef6\u4e8b\u60c5\u80af\u5b9a\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u5f53\u7136\u7531\u4e8eChatGPT\u7684\u51fa\u73b0\u76f8\u4fe1\u73b0\u5728\u5927\u90e8\u5206\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u611f\u53d7\u5230AI\u7684\u4ee3\u7801\u751f\u6210\u80fd\u529b\uff0c\u6709\u4e9b\u4eba\u6bd4\u8f83\u575a\u4fe1AI\u80fd\u591f\u4ee3\u66ff\u7a0b\u5e8f\u5458\u751f\u6210\u7a0b\u5e8f\uff0c\u6709\u4e9b\u4eba\u5219\u60b2\u89c2\u4e00\u4e9b\uff0c\u81f3\u5c11\u5728\u77ed\u671f\u5185\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u6682\u4e14\u4e0d\u4e89\u8bbaAI\u5230\u5e95\u80fd\u4e0d\u80fd\u6216\u8005\u4ec0\u4e48\u65f6\u5019\u66ff\u4ee3\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u56de\u5230\u95ee\u9898\u672c\u8eab\u3002\u4f20\u7edf\u7684\u6587\u672c\u5408\u6210\uff0c\u8ba1\u7b97\u7684\u662f\u6587\u5b57\u4e0e\u6587\u5b57\u4e4b\u95f4\uff0c\u53e5\u5b50\u4e0e\u53e5\u5b50\u4e4b\u95f4\u7684\u7ec4\u5408\u6982\u7387\uff0c\u8fd9\u91cc\u6709\u4e24\u4e2a\u4e8b\u60c5\u503c\u5f97\u6ce8\u610f\uff1a\u7b2c\u4e00\u662f\u4efb\u4f55\u5b57\u4e4b\u95f4\u90fd\u53ef\u4ee5\u7ec4\u5408\uff0c\u6240\u4ee5ChatGPT\u603b\u662f\u53ef\u4ee5\u7ed9\u6211\u4eec\u7b54\u6848\uff0c\u54ea\u6015\u5176\u4e2d\u7684\u53e5\u5b50\u7ec4\u5408\u548c\u903b\u8f91\u662f\u5b8c\u5168\u9519\u8bef\u7684\uff1b\u7b2c\u4e8c\u662f\u4e00\u822c\u5e38\u7528\u4e8e\u8868\u8ff0\u6b63\u786e\u8bed\u6cd5\u548c\u8bed\u4e49\u7684\u54ea\u4e9b\u6587\u5b57\u4fe1\u606f\u662f\u975e\u5e38\u591a\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4ChatGPT\u7406\u89e3\u6211\u4eec\u4e00\u822c\u7684\u6bd4\u8f83\u5927\u4f17\u5316\u7684\u8bed\u4e49\u662f\u5f88\u5bb9\u6613\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u673a\u7a0b\u5e8f\u5728\u8fd9\u4e24\u4e2a\u5c42\u9762\u90fd\u4e0e\u4e00\u822c\u7684\u6587\u672c\u77e5\u8bc6\u4fe1\u606f\u4e0d\u540c\uff1a\u9996\u5148\u4e24\u6bb5\u4ee3\u7801\u662f\u4e0d\u80fd\u7b80\u5355\u5408\u6210\u7684\uff0c\u4e24\u4e2a\u4ee3\u7801\u4e4b\u95f4\u5728\u5355\u7eaf\u5730\u50cf\u4e24\u6bb5\u6587\u5b57\u653e\u5728\u4e00\u8d77\u4e4b\u5916\uff0c\u8fd8\u9700\u8981\u5904\u7406\u53c2\u6570\u7684\u6570\u91cf\uff0c\u53c2\u6570\u7684\u540d\u79f0\uff0c\u7c7b\u578b\uff0c\u53d8\u91cf\u4ece\u54ea\u91cc\u83b7\u53d6\uff0cAPI\u4ece\u54ea\u91cc\u83b7\u53d6\u7b49\u7b49\uff0c\u8fd9\u8fdc\u8fdc\u8d85\u51fa\u7b80\u5355\u6587\u5b57\u5408\u6210\u7684\u8303\u56f4\u3002\u4f60\u53ef\u4ee5\u5408\u6210\u4e00\u4e2a\u6587\u672c\u7ec4\u5408\u7684\u6e90\u4ee3\u7801\u7ed3\u679c\uff0c\u4f46\u662f\u5176\u4e2d\u7684\u903b\u8f91\u53ef\u80fd\u5b8c\u5168\u662f\u9519\u8bef\u7684\uff0c\u51fd\u6570\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u53c2\u6570\u662f\u9519\u8bef\u7684\u3002\u56e0\u6b64\u76ee\u524d\u6765\u8bb2\uff0c\u5927\u90e8\u5206AI\u8fd8\u662f\u7528\u4e8e\u8f85\u52a9\u6bd4\u8f83\u5c40\u90e8\u3001\u72ec\u7acb\u7684\u4ee3\u7801\u751f\u6210\uff0c\u68c0\u67e5\uff0c\u63d0\u793a\u7b49\u7b49\uff0c\u8ddd\u79bb\u6784\u9020\u590d\u6742\u4e00\u70b9\u7684\u903b\u8f91\u663e\u7136\u8fd8\u7f3a\u4e4f\u4e00\u4e9b\u57fa\u7840\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u59a8\u788d\u5b83\u73b0\u5728\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u4e0d\u9519\u7684\u52a9\u624b\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5728Reality World\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\uff0c\u4e3a\u4e86\u8981\u8ba9\u666e\u904d\u7528\u6237\u53ef\u4ee5\u6784\u9020\u7a0b\u5e8f\uff0c\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u591a\u5904\u8c03\u6574\uff0c\u4ece\u7c7b\u578b\u5b9a\u4e49\uff0c\u6570\u636e\u521d\u59cb\u5316\u548c\u7ba1\u7406\uff0c\u4e92\u64cd\u4f5c\u6027\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a8\u6f14\uff0c\u7ebf\u7a0b\u9694\u79bb\u7b49\u7b49\u3002\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u5c31\u662f\u7ec4\u5408\u6027\uff0c\u8fd9\u79cd\u7ec4\u5408\u6027\u4f7f\u5f97\u4e24\u4e2a\u76f8\u5173\u7684\u7ec4\u4ef6\uff0c\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u6dfb\u52a0\u4efb\u4f55\u53c2\u6570\u6216\u8005\u8f93\u5165\u8f93\u51fa\u7684\u8bbe\u7f6e\uff0c\u5c31\u53ef\u4ee5\u6b63\u786e\u5730\u6784\u9020\u7a0b\u5e8f\uff0c\u4f8b\u5982\u5982\u4e0b\u7684\u8fd9\u6bb5\u590d\u6742\u7684\u903b\u8f91\uff0c\u6574\u4e2aGraph\u7684\u8282\u70b9\u662f\u4e0d\u9700\u8981\u7528\u6237\u8fde\u63a5\u7684\uff0c\u5168\u90e8\u662f\u81ea\u52a8\u751f\u6210\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(373).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fde\u63a5\u5173\u7cfb\u662f\u81ea\u52a8\u63a8\u5bfc\u7684"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u6027\u770b\u8d77\u6765\u662f\u4e0d\u53ef\u601d\u8bae\u7684\uff0c\u8fd9\u91cc\u6211\u4e0d\u4f1a\u8ba8\u8bba\u5177\u4f53\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fd9\u6837\u60f3\u8c61\u4e00\u4e0b\uff1a\u7f16\u8bd1\u5668\u5bf9\u4e8e\u4e00\u4e2a\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\uff0c\u672c\u6765\u5c31\u662f\u9996\u5148\u5f53\u6210\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u6a21\u5757\u8fdb\u884c\u7f16\u8bd1\u7684\uff0c\u53ea\u4e0d\u8fc7\u7f16\u8bd1\u5668\u9664\u4e86\u7f16\u8bd1\u6bcf\u4e2a\u6307\u4ee4\u672c\u8eab\uff0c\u8fd8\u4f7f\u7528\u4e00\u4e9b\u7b26\u53f7\u8868\u8bb0\u8f7d\u4e86\u6240\u6709\u5916\u90e8\u6a21\u5757\u5f15\u7528\u7684\u5173\u7cfb\u548c\u5730\u5740\uff0c\u7136\u540e\u5728\u94fe\u63a5\u9636\u6bb5\u5c06\u8fd9\u4e9b\u5730\u5740\u4fee\u6539\u4e3a\u6700\u7ec8\u7684\u7edd\u5bf9\u5730\u5740\u3002\u4ece\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u662f\u6709\u53ef\u80fd\u4ee5\u66f4\u5e95\u5c42\u7684\u65b9\u5f0f\u53bb\u5b8c\u6210\uff0c\u800c\u4e0d\u662f\u628a\u8fd9\u90e8\u5206\u4ea4\u7ed9\u7a0b\u5e8f\u5458\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u80fd\u529b\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u53d8\u6210\u4e86\u5355\u7eaf\u7684\u5408\u6210\uff0c\u6ca1\u9519\uff0c\u8fd9\u4e2a\u5408\u6210\u7684\u65b9\u5f0f\u8ddf\u6587\u672c\u5408\u6210\u662f\u975e\u5e38\u76f8\u4f3c\u7684\uff1a\u5b83\u4eec\u4ec5\u4ec5\u662f\u653e\u5230\u4e00\u8d77\uff0c\u4e0d\u9700\u8981\u6307\u5b9a\u989d\u5916\u7684\u7a0b\u5e8f\u7ed3\u6784\u4fe1\u606f\uff0c\u4f8b\u5982\u53c2\u6570\uff0c\u53d8\u91cf\uff0c\u51fd\u6570\u5730\u5740\u7b49\u7b49\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u6709\u673a\u4f1a\u8ba9AI\u53bb\u751f\u6210\u7a0b\u5e8f\uff0c\u8fd9\u91ccAI\u53ea\u9700\u8981\u4ece\u4e00\u822c\u7684\u6587\u5b57\u610f\u4e49\u4e0a\u53bb\u7406\u89e3\u7ec4\u4ef6\u7684\u8bed\u4e49\uff0c\u5e76\u7ed9\u51fa\u7ec4\u4ef6\u5408\u6210\u5e8f\u5217\uff0c\u800c\u5e95\u5c42\u7684\u8fd0\u884c\u65f6\u5f15\u64ce\u5c06\u8fd9\u4e9b\u5e8f\u5217\u8f6c\u5316\u4e3a\u771f\u6b63\u7684\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0e\u76f4\u63a5ChatGPT\u6784\u9020\u7a0b\u5e8f\u4ee3\u7801\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u4ee3\u7801\u4e00\u65e6\u88ab\u6784\u9020\uff0c\u5c31\u662f\u6b63\u786e\u7684\uff0c\u53ef\u4ee5\u8fd0\u884c\u7684\uff0c\u800c\u4e0d\u9700\u8981\u4eba\u53bb\u68c0\u67e5\u5176\u4e2d\u53ef\u80fd\u5b58\u5728\u7684\u7a0b\u5e8f\u903b\u8f91\u7684\u9519\u8bef\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf"},"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u4e0e\u76f4\u63a5\u8ba9AI\u6784\u9020\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u76f8\u6bd4\uff0c\u66f4\u597d\u7684\u4f7f\u7528\u65b9\u5f0f\u53ef\u80fd\u662fAutoGPT\u6216\u8005OpenAI\u7684\u63d2\u4ef6\u7cfb\u7edf\uff0c\u5728\u8fd9\u79cd\u67b6\u6784\u4e2d\uff0cAI\u66f4\u591a\u662f\u8d1f\u8d23\u6bd4\u8f83\u901a\u7528\u7684\u4e00\u4e9b\u8bed\u4e49\u7406\u89e3\uff0c\u7136\u540e\u628a\u5177\u4f53\u7684\u4e00\u4e9b\u4e0e\u9886\u57df\u7cfb\u7edf\u7684\u4ea4\u4e92\u4ea4\u7ed9\u4e13\u95e8\u7684\u63d2\u4ef6\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5728OpenAI\u7684Plugin\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2aPlugin\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u5e94\u7528\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u63cf\u8ff0\u597d\u7684\u8c03\u7528\u903b\u8f91\u4f7f\u5f97ChatGPT\u53ef\u4ee5\u6b63\u786e\u5730\u8c03\u7528\u5404\u4e2a\u5e94\u7528\u8f6f\u4ef6\u7684\u63a5\u53e3\uff0c\u4f46\u5982\u679c\u4f60\u7684\u4f7f\u7528\u672c\u8eab\u662f\u8981\u5728\u591a\u4e2aplugin\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u60f3\u6784\u9020\u4efb\u610f\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u628a\u6bcf\u4e2aplugin\u63a5\u53e3\u5f53\u4f5c\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u53c8\u4f1a\u56de\u5230\u8ba9AI\u7f16\u5199\u903b\u8f91\u4ee3\u7801\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u8fd9\u79cdPlugin\u7cfb\u7edf\uff0cReality World\u63d0\u4f9b\u7684\u4e0d\u662f\u4e00\u4e2a\u5355\u4e2aplugin\uff0c\u800c\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u80fd\u529b\uff0c\u5b83\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u4e00\u79cd\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\uff0c\u56e0\u4e3aAI\u53d1\u51fa\u7684\u6587\u672c\u5e8f\u5217\uff0c\u4f1a\u88abReality World\u5f53\u4f5c\u8f93\u5165\uff0c\u7136\u540e\u6309\u7167\u7a0b\u5e8f\u6784\u9020\u7684\u903b\u8f91\u53bb\u68c0\u7d22\u76f8\u5e94\u7684\u7ec4\u4ef6\u5e76\u7ec4\u5408\u6784\u9020\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u8981\u4e48\u662f\u6784\u9020\u4e0d\u51fa\u6765\u7684\uff0c\u8981\u4e48\u5c31\u662f\u81f3\u5c11\u80fd\u591f\u6210\u529f\u8fd0\u884c\u7684\uff0c\u800c\u5269\u4e0b\u7684\u6b63\u786e\u6027\u95ee\u9898\u5c31\u53d6\u51b3\u4e8e\u7ec4\u4ef6\u63cf\u8ff0\u7684\u51c6\u786e\u6027\u548cAI\u5bf9\u8bed\u4e49\u7684\u7406\u89e3\u4e86\u3002"),(0,n.kt)("h2",{id:"\u62e5\u62b1rust"},"\u62e5\u62b1Rust"),(0,n.kt)("p",null,"\u6211\u539f\u672c\u4ee5\u4e3a\u7684\u5f00\u53d1\u5468\u671f\u8fd8\u662f\u4f1a\u6bd4\u8f83\u957f\u7684\uff0c\u6bd5\u7adf\u8bbe\u8ba1\u7684\u7cfb\u7edf\u8bbe\u8ba1\u8fd8\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u65e9\u5148\u6211\u4f7f\u7528\u7684\u662fC++/C\u8fdb\u884c\u5f00\u53d1\uff0c\u8fdb\u884c\u4e86\u4e00\u4e9b\u7b80\u5355\u7684\u8bed\u8a00\u5305\u88c5\u548c\u7f16\u8bd1\u6d41\u7a0b\u5b9a\u5236\u3002\u56e0\u4e3a\u6211\u4eec2\u53f7\u5458\u5de5\u4e00\u76f4\u662fRust\u7231\u597d\u8005\uff0c\u4e00\u76f4\u5728\u9f13\u52a8\u6211\u4f7f\u7528Rust\uff0c\u867d\u7136\u4e4b\u524d\u770b\u8fc7Rust\u7684\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u4f46\u662f\u611f\u89c9\u8fd8\u662f\u6ca1\u6709\u7279\u522b\u7684\u52a8\u529b\u53bb\u5b8c\u5168\u5207\u6362\u5230Rust\u3002"),(0,n.kt)("p",null,"\u540e\u6765\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4f7f\u7528Rust\u8fdb\u884c\u5f00\u53d1\uff0c\u5f00\u59cb\u4e5f\u662f\u6709\u4e9b\u4e0d\u4e60\u60ef\uff0c\u4f46\u662f\u5728\u9010\u6b65\u5b66\u4e60\u548c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u611f\u53d7\u5230\u4e86Rust\u7684\u597d\u5904\uff0c\u8fd9\u91cc\u7ed9\u5927\u5bb6\u5206\u4eab\u548c\u63a8\u8350\u4e00\u4e0b\u3002"),(0,n.kt)("p",null,"Rust\u5bf9\u6211\u800c\u8a00\u6700\u5927\u7684\u597d\u5904\u548c\u4f53\u9a8c\u662f\uff0c\u8fed\u4ee3\u901f\u5ea6\u6bd4\u8f83\u5feb\uff0c\u8fd9\u7b26\u5408\u6211\u73b0\u5728\u7684\u9700\u6c42\u3002\u53ea\u8981\u4ee3\u7801\u7f16\u8bd1\u901a\u8fc7\uff0c\u51e0\u4e4e\u4e0d\u4f1a\u82b1\u65f6\u95f4\u53bb\u6392\u67e5\u4e00\u4e9b\u6bd4\u8f83\u8be1\u5f02\uff0c\u751a\u81f3\u9700\u8981\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u65ad\u6b65\u8c03\u8bd5\u624d\u80fd\u53d1\u73b0\u95ee\u9898\u7684bug\uff0c\u4e00\u822c\u6709bug\u5c31\u57fa\u672c\u4e0a\u5927\u90e8\u5206\u8fd8\u662f\u903b\u8f91\u95ee\u9898\uff0c\u800c\u4e14Rust\u7f16\u8bd1\u5668\u53ef\u4ee5\u6bd4\u8f83\u7cbe\u51c6\u5730\u544a\u8bc9\u4f60\u95ee\u9898\u7684\u4f4d\u7f6e\uff0c\u57fa\u672c\u4e0a\u4e00\u770b\u63d0\u793a\u5c31\u77e5\u9053\u8be5\u600e\u4e48\u6539\u4ee3\u7801\u4e86\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u4e3b\u8981\u662f\u5927\u5bb6\u8ba8\u8bba\u6bd4\u8f83\u591a\u7684\u9650\u5236\u4e86\uff0c\u4f60\u5f97\u5f88\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u8bbe\u8ba1\u6574\u4e2a\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u5982\u679c\u50cf\u4f20\u7edfC++\u90a3\u6837\u5230\u5904\u662f\u76f8\u4e92\u5f15\u7528\u663e\u7136\u51e0\u4e4e\u80af\u5b9a\u662f\u4f60\u5b8c\u5168\u6ca1\u6cd5\u901a\u8fc7\u7f16\u8bd1\u5668\uff0c\u4f60\u5f97\u8bbe\u8ba1\u597d\u6574\u4e2a\u7a0b\u5e8f\u5bf9\u8c61\u7684\u7ed3\u6784\uff0c\u8fd9\u91cc\u63a8\u8350Bevy\u5f15\u64ce\u5c31\u662f\u975e\u5e38\u597d\u7684\u67b6\u6784\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u51e0\u4e4e\u80fd\u89e3\u51b3\u5927\u90e8\u5206\u76f8\u4e92\u5f15\u7528\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u6bd4\u8f83\u5927\u7684\u95ee\u9898\u662f\u591a\u6b21\u5f15\u7528\u548c\u501f\u7528\u7684\u95ee\u9898\u4e86\uff0c\u8fd9\u4e2a\u95ee\u9898\u76f8\u5bf9\u597d\u89e3\u51b3\u4e00\u70b9\uff0c\u9996\u5148\u67b6\u6784\u597d\u4f1a\u5c11\u6389\u5f88\u591a\u8fd9\u79cd\u95ee\u9898\uff1b\u5176\u6b21\u5bf9\u4e8e\u5c40\u90e8\u7684\u4e00\u4e9b\u65b9\u6cd5\uff0c\u5b9e\u5728\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u4e07\u80fd\u5927\u6cd5\u5c31\u662f\u590d\u5236\u6570\u636e\u5c31\u597d\uff0c\u8fd9\u4e2a\u4e5f\u4e0d\u9700\u8981\u5b8c\u5168\u56de\u907f\uff0c\u6bd5\u7adf\u5728C++\u4e2d\u4e5f\u7ecf\u5e38\u4f1a\u5b58\u5728\u5bf9\u8c61\u590d\u5236\uff1b\u518d\u6709\u7a0d\u5fae\u590d\u6742\u4e00\u70b9\u5c31\u662f\u4f7f\u7528move\uff0c\u5148\u5c06\u6570\u636emove\u51fa\u6765\uff0c\u7136\u540e\u8fdb\u884c\u64cd\u4f5c\u4e4b\u540e\u518d\u586b\u56de\u53bb\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u6ca1\u6709\u5e76\u53d1\u95ee\u9898\uff0c\u8fd9\u79cd\u601d\u8def\u4e5f\u662f\u4e00\u79cd\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u5173\u4e8e\u6709\u4e9b\u4eba\u4f1a\u89c9\u5f97\uff0c\u50cfRust\u8fd9\u6837\u5f3a\u8feb\u5f00\u53d1\u8005\u8fc7\u65e9\u5173\u6ce8\u67b6\u6784\u4f1a\u5f71\u54cd\u5feb\u901f\u8fed\u4ee3\u3002\u8fd9\u4e00\u70b9\u6211\u4e0d\u662f\u5f88\u8d5e\u540c\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u9879\u76ee\uff0c\u5feb\u901f\u8fed\u4ee3\u4e5f\u662f\u8981\u6b63\u786e\u8fd0\u884c\u7684\uff0c\u800c\u4e14\u5982\u679c\u9879\u76ee\u672c\u8eab\u601d\u8003\u7740\u8db3\u591f\u591a\uff0c\u6216\u8005\u9879\u76ee\u6700\u7ec8\u80af\u5b9a\u662f\u8981\u4e0a\u7ebf\u4f7f\u7528\u7684\uff0c\u6211\u89c9\u5f97\u6162\u4e00\u70b9\u4e00\u8fb9\u8fed\u4ee3\u4e00\u8fb9\u5c31\u628a\u4ee3\u7801\u67b6\u6784\u5199\u7684\u66f4\u597d\uff0c\u4e5f\u8bb8\u6700\u7ec8\u662f\u4e00\u4ef6\u66f4\u597d\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"},"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u6211\u4ece2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\uff0c\u51e0\u4e4e\u6574\u6574\u4e00\u5e74\u65f6\u95f4\u5168\u90e8\u90fd\u5728\u601d\u8003\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u540e\u671f\u7684\u5f00\u53d1\u3002\u521a\u5f00\u59cb2\u4e2a\u6708\uff0c\u601d\u8def\u8fd8\u4e0d\u662f\u7279\u522b\u6e05\u6670\uff0c\u53ea\u662f\u5728\u4e0d\u505c\u3001\u75af\u72c2\u5730\u770b\u4e66\uff0c\u6211\u51e0\u4e4e\u628a\u6240\u6709\u80fd\u4e70\u5230\u7684\u4e2d\u6587\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u76f8\u5173\u7684\u4e66\u90fd\u770b\u4e86\u4e00\u9762\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u9010\u5b57\u9010\u53e5\u6162\u6162\u770b\uff0c\u90fd\u662f\u98de\u5feb\u5730\u6d4f\u89c8\uff0c\u5e76\u4e14\u8111\u888b\u4e2d\u9ad8\u901f\u8fd0\u8f6c\u7740\uff0c\u968f\u65f6\u90fd\u60f3\u7740\u6211\u8111\u888b\u4e2d\u7684\u54ea\u4e9b\u95ee\u9898\u600e\u4e48\u89e3\u51b3\uff0c\u8fd9\u6837\u5e26\u7740\u95ee\u9898\u770b\u4e66\u7684\u597d\u5904\u662f\uff0c\u53ea\u8981\u77e5\u8bc6\u4e4b\u95f4\u6709\u4e00\u70b9\u7684\u76f8\u5173\u6027\uff0c\u5c31\u80fd\u591f\u975e\u5e38\u654f\u9510\u5730\u6355\u6349\u5e76\u5173\u8054\u4e0a\uff0c\u7136\u540e\u518d\u5bf9\u8fd9\u5757\u77e5\u8bc6\u8fdb\u884c\u6df1\u5165\u5b66\u4e60\uff0c\u6700\u7ec8\u53ef\u4ee5\u8df3\u51fa\u5355\u7eaf\u7684\u77e5\u8bc6\u672c\u8eab\u53bb\u5e94\u7528\u8fd9\u4e9b\u77e5\u8bc6\uff0c\u751a\u81f3\u5c06\u4e00\u79cd\u77e5\u8bc6\u7684\u601d\u7ef4\u7528\u6765\u89e3\u51b3\u53e6\u4e00\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u4e00\u5e74\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8d85\u8fc750\u672c\u76f8\u5173\u7684\u4e66\u7c4d\uff0c\u5e76\u4e14\u5927\u90e8\u5206\u6bd4\u8f83\u76f8\u5173\u7684\u77e5\u8bc6\u90fd\u662f\u53cd\u590d\u9605\u8bfb\u7684\u3002"),(0,n.kt)("p",null,"\u65e9\u671f\u6211\u4e60\u60ef\u4f7f\u7528iPhone\u7684\u5907\u5fd8\u5f55app\u8bb0\u5f55\u4e00\u4e9b\u60f3\u6cd5\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u65b9\u4fbf\uff0c\u4efb\u4f55\u65f6\u5019\u60f3\u5230\u4e00\u70b9\u4e1c\u897f\u5c31\u53ef\u4ee5\u8bb0\u4e0b\u6765\uff0c\u5f88\u591a\u65f6\u5019\u665a\u4e0a\u534a\u591c\u90fd\u4f1a\u8d77\u6765\u8bb0\u5f55\uff0c\u786e\u5b9e\u6709\u4e9b\u4e1c\u897f\u5f88\u5feb\u5c31\u662f\u53ef\u4ee5\u5fd8\u8bb0\u7684\u3002\u540e\u6765\u4f53\u7cfb\u6bd4\u8f83\u5b8c\u6574\u7684\u65f6\u5019\u6211\u9010\u6b65\u5c06\u8fd9\u4e9b\u4fe1\u606f\u6574\u7406\u5230Markdown\u4e2d\uff0c\u5e76\u9010\u6b65\u79ef\u7d2f\uff0c\u73b0\u5728\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u5df2\u7ecf\u8d85\u8fc722\u4e07\u5b57\uff0c\u6574\u6574400\u591a\u9875\uff0c\u91cc\u9762\u5305\u542b\u4e86\u975e\u5e38\u591a\u7684\u6280\u672f\u7406\u89e3\u548c\u601d\u8003\u3002\u7b49\u9002\u5f53\u7684\u65f6\u5019\u6211\u4f1a\u5c06\u8fd9\u4e9b\u5185\u5bb9\u6574\u7406\u6210\u56fe\u4e66\u51fa\u7248\u3002"),(0,n.kt)("p",null,"\u8c46\u74e3\u4e0a\u6211\u5217\u4e86\u4e2atop 10\u7684\u56fe\u4e66\u699c\u5355\uff0c\u7f16\u7a0b\u76f8\u5173\u7684\u662f\uff1a\u300a\u7f16\u8bd1\u539f\u7406\u300b\u3001\u300aErlang\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\u300b\u3001\u300a\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u6a21\u5f0f\u300b\u3001\u300a\u6e38\u620f\u673a\u5236\u300b\u3001\u300a\u94fe\u63a5\u5668\u4e0e\u52a0\u8f7d\u5668\u300b\u3001\u300aData-oriented design\u300b\u3001\u300a\u51fd\u6570\u5f0f\u7f16\u7a0b\u601d\u7ef4\u300b\u3001\u300a\u51e4\u51f0\u67b6\u6784\u300b\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u56fe\u4e66\uff0c\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u5bf9\u6211\u5f71\u54cd\u6bd4\u8f83\u5927\u7684\u662f\uff1aErlang\u3001USD\u3001LLVM\u3001MLIR\u3001ECS\u3001Web Assembly\u3001Machinations\u3001\u300a\u5821\u5792\u4e4b\u591c\u300b\u3001Snapchat\u3001Bevy\u7b49\u7b49\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"},"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u53ef\u80fd\u5f88\u591a\u670b\u53cb\u4f1a\u5173\u5fc3\u4f60\u7684\u5546\u4e1a\u6a21\u5f0f\u662f\u4ec0\u4e48\uff0c\u8fd9\u91cc\u6211\u4e0d\u60f3\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u76ee\u524d\u53ea\u8ddf\u6295\u8d44\u4eba\u4e4b\u95f4\u624d\u4f1a\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u5f53\u7136\u6709\u5f88\u591a\u601d\u8003\uff0c\u4f46\u662f\u5728\u7f3a\u4e4f\u5f88\u591a\u80cc\u666f\u4e0b\uff0c\u6211\u89c9\u5f97\u73b0\u5728\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u8fd8\u662f\u592a\u65e9\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u4ecb\u610f\u5927\u5bb6\u8ba8\u8bba\u3002"),(0,n.kt)("h2",{id:"\u53c2\u4e0ereality-world\u5f00\u53d1"},"\u53c2\u4e0eReality World\u5f00\u53d1"),(0,n.kt)("p",null,"\u6beb\u65e0\u7591\u95ee\uff0cReality World\u6d89\u53ca\u5230\u5f88\u591a\u6280\u672f\u601d\u7ef4\uff0c\u751a\u81f3\u5305\u542b\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u6211\u76f8\u4fe1\u53c2\u4e0e\u8fd9\u4e2a\u9879\u76ee\u672c\u8eab\u80af\u5b9a\u4f1a\u5b66\u5230\u5f88\u591a\u77e5\u8bc6\u3002\u4f46\u73b0\u9636\u6bb5\u8fd8\u4e0d\u80fd\u6b63\u5f0f\u516c\u5e03\uff0c\u6211\u4eec\u9884\u8ba1\u4f1a\u57286\u4e2a\u6708\u5de6\u53f3\uff0c\u5728\u5185\u90e8\u8fed\u4ee3\u4e00\u4e9b\u7248\u672c\u518d\u6b63\u5f0f\u516c\u5e03\uff0c\u6240\u4ee5\u5728\u8fd9\u4e2a\u9636\u6bb5\u6211\u4e5f\u4e0d\u4f1a\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u592a\u591a\u5177\u4f53\u7684\u6280\u672f\u7ec6\u8282\u3002\u56e0\u4e3a\u5728\u4e2d\u56fd\u505a\u8fd9\u79cd\u4e8b\u60c5\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\uff0c\u7f51\u7edc\u4e0a\u4f1a\u6709\u5404\u79cd\u5404\u6837\u7684\u58f0\u97f3\uff0c\u6211\u4e0d\u5e0c\u671b\u53d7\u8fd9\u79cd\u5e72\u6270\uff0c\u4e3a\u4e86\u628a\u8fd9\u4ef6\u4e8b\u60c5\u505a\u6210\uff0c\u9700\u8981\u4e00\u9897\u5b89\u9759\u7684\u5fc3\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4f60\u5bf9Reality World\u611f\u5174\u8da3\uff0c\u4f60\u53ef\u4ee5\u8054\u7cfb\u6211\uff0c\u79c1\u4eba\u4e4b\u95f4\u6709\u65f6\u5019\u6211\u4f1a\u8ba8\u8bba\u4e00\u4e9b\u6280\u672f\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u878d\u8d44"},"\u5173\u4e8e\u878d\u8d44"),(0,n.kt)("p",null,"\u5766\u767d\u8bf4\uff0c\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u8fd8\u6ca1\u6709\u62ff\u5230\u4efb\u4f55\u6295\u8d44\uff0c\u66fe\u7ecf\u6709\u975e\u5e38\u9876\u7ea7\u7684\u8d44\u672c\u804a\u4e86\u5f88\u4e45\uff0c\u5408\u4f19\u4eba\u4e5f\u975e\u5e38\u8ba4\u53ef\u8fd9\u4e2a\u9879\u76ee\u7684\u4ef7\u503c\uff0c\u4f46\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u8c08\u5b9a\u3002\u5728\u65e9\u671f\uff0c\u6211\u80af\u5b9a\u72af\u4e86\u5f88\u591a\u9519\u8bef\uff0c\u4f8b\u5982\u5bf9\u9879\u76ee\u7684\u89c4\u5212\uff0c\u4f30\u503c\u9884\u671f\uff0c\u751a\u81f3\u8868\u8fbe\u7b49\u7b49\u90fd\u8fd8\u662f\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5f53\u7136\u4e5f\u662f\u4e00\u79cd\u6210\u957f\uff1b\u6b64\u5916\u53bb\u5e74\u53c8\u9047\u5230\u75ab\u60c5\uff0c\u8fd8\u6709\uff0c\u4f60\u61c2\u7684\uff0c\u4eca\u5e74\u7684ChatGPT..."),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u540e\u7eed\u7684\u5f00\u53d1\u80af\u5b9a\u8fd8\u662f\u9700\u8981\u56e2\u961f\u548c\u8d44\u672c\uff0c\u6211\u4e00\u4e2a\u4eba\u5f88\u96be\u8fd9\u6837\u4e00\u76f4\u6301\u7eed\u4e0b\u5348\uff0c\u6b22\u8fce\u5404\u4f4d\u611f\u5174\u8da3\u7684\u8d44\u672c\u3001\u5f00\u53d1\u8005\u751a\u81f3\u52a0\u6cb9\u52a9\u5a01\u7684\u670b\u53cb\u4e0e\u6211\u8054\u7cfb\u3002"),(0,n.kt)("p",null,"\u5fae\u4fe1\uff1aARealityWorld"),(0,n.kt)("h2",{id:"\u540e\u8bb0"},"\u540e\u8bb0"),(0,n.kt)("p",null,"\u5728\u8fd9\u4e00\u5e74\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ddf\u5f88\u591a\u4e0d\u540c\u7684\u670b\u53cb\u6709\u8fc7\u5f88\u591a\u4ea4\u6d41\uff0c\u5f88\u591a\u670b\u53cb\u90fd\u5728\u9f13\u52b1\u548c\u652f\u6301\uff0c\u5e0c\u671b\uff0c\u6700\u7ec8\u4e0d\u4f1a\u8f9c\u8d1f\u4f60\u4eec\uff01"))}d.isMDXComponent=!0},1694:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/2-ea7a0b77be7f3ea877430d34be6a9c33.jpg"},1072:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/3-2935ce82c46c3780bb9a6be5605f32ff.jpg"},373:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/4-c18cbdad8df763f282adf9e615337ed8.jpg"},3206:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/5-25bf33bec4ab499cbb1f75fe4af6dc4e.jpg"},6081:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/Robert_Virding_and_Joe_Armstrong-82ddcf57cc160dd3b30ce80b0351bb6b.jpg"},3090:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/create-83a4808a18d663f143cd67c47dccbd84.png"},9800:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/graphql-b82a89e1f03ad72a5c43b193911c69a7.png"},9606:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/island-ed77d6189ea90804947341de732b2a5f.png"},9467:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/luau-8dcd3e07aca728930025b827afc3d0d9.png"},3819:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/modular-ec183275c9c4d2f77583a82e8119e52f.png"},2382:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/pl-01db64776749f259941139b1e0b0fd19.jpg"},9984:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/usd-1109031da5c391a7ac8194a67e234d38.png"},9875:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/verse-3604fc0feca3a40971cf71a64a6a61b6.png"}}]); \ No newline at end of file diff --git a/assets/js/17896441.2d94139d.js b/assets/js/17896441.2d94139d.js deleted file mode 100644 index e188649..0000000 --- a/assets/js/17896441.2d94139d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[7918],{7562:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ie});var a=n(7294),l=n(5463),r=n(3768);const o=a.createContext(null);function s(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(o.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(o);if(null===e)throw new r.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(4334),m=n(3488),u=n(7462),v=n(7325),b=n(3672);function p(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,v.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&a.createElement(b.Z,(0,u.Z)({},t,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(b.Z,(0,u.Z)({},n,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function h(){const{metadata:e}=c();return a.createElement(p,{previous:e.previous,next:e.next})}var g=n(9962),E=n(3699),f=n(868),L=n(3702),N=n(6409),C=n(8801);const Z={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function _(e){const t=Z[e.versionMetadata.banner];return a.createElement(t,e)}function k(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(v.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(E.Z,{to:n,onClick:l},a.createElement(v.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,g.Z)(),{pluginId:r}=(0,f.gA)({failfast:!0}),{savePreferredVersionName:o}=(0,N.J)(r),{latestDocSuggestion:s,latestVersionSuggestion:c}=(0,f.Jo)(r),i=s??(m=c).docs.find((e=>e.id===m.mainDocId));var m;return a.createElement("div",{className:(0,d.Z)(t,L.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(_,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(k,{versionLabel:c.label,to:i.path,onClick:()=>o(c.name)})))}function T(e){let{className:t}=e;const n=(0,C.E)();return n.banner?a.createElement(x,{className:t,versionMetadata:n}):null}function H(e){let{className:t}=e;const n=(0,C.E)();return n.badge?a.createElement("span",{className:(0,d.Z)(t,L.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(v.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function w(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function U(e){let{lastUpdatedBy:t}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function y(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:L.k.common.lastUpdated},a.createElement(v.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(w,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(U,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var A=n(1882),M=n(1540);const I={lastUpdated:"lastUpdated_vwxv"};function B(e){return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(M.Z,e)))}function O(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(A.Z,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",I.lastUpdated)},(n||l)&&a.createElement(y,{lastUpdatedAt:n,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function P(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:r,tags:o}=e,s=o.length>0,i=!!(t||n||r);return s||i?a.createElement("footer",{className:(0,d.Z)(L.k.docs.docFooter,"docusaurus-mt-lg")},s&&a.createElement(B,{tags:o}),i&&a.createElement(O,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:r,formattedLastUpdatedAt:l})):null}var V=n(4639),S=n(2728);const R={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function D(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",R.tocCollapsibleButton,!t&&R.tocCollapsibleButtonExpanded,n.className)}),a.createElement(v.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const F={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function z(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:r}=e;const{collapsed:o,toggleCollapsed:s}=(0,V.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(F.tocCollapsible,!o&&F.tocCollapsibleExpanded,n)},a.createElement(D,{collapsed:o,onClick:s}),a.createElement(V.z,{lazy:!0,className:F.tocCollapsibleContent,collapsed:o},a.createElement(S.Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:r})))}const q={tocMobile:"tocMobile_ITEo"};function j(){const{toc:e,frontMatter:t}=c();return a.createElement(z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(L.k.docs.docTocMobile,q.tocMobile)})}var G=n(3811);function W(){const{toc:e,frontMatter:t}=c();return a.createElement(G.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:L.k.docs.docTocDesktop})}var $=n(495),J=n(6220);function Q(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(L.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement($.Z,{as:"h1"},n)),a.createElement(J.Z,null,t))}var X=n(8259),Y=n(9003),K=n(9524);function ee(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const te={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function ne(){const e=(0,K.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(E.Z,{"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},a.createElement(ee,{className:te.breadcrumbHomeIcon})))}const ae={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function le(e){let{children:t,href:n,isLast:l}=e;const r="breadcrumbs__link";return l?a.createElement("span",{className:r,itemProp:"name"},t):n?a.createElement(E.Z,{className:r,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:r},t)}function re(e){let{children:t,active:n,index:l,addMicrodata:r}=e;return a.createElement("li",(0,u.Z)({},r&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(l+1)}))}function oe(){const e=(0,X.s1)(),t=(0,Y.Ns)();return e?a.createElement("nav",{className:(0,d.Z)(L.k.docs.docBreadcrumbs,ae.breadcrumbsContainer),"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(ne,null),e.map(((t,n)=>{const l=n===e.length-1;return a.createElement(re,{key:n,active:l,index:n,addMicrodata:!!t.href},a.createElement(le,{href:t.href,isLast:l},t.label))})))):null}const se={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function ce(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),l=e.hide_table_of_contents,r=!l&&t.length>0;return{hidden:l,mobile:r?a.createElement(j,null):void 0,desktop:!r||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(W,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&se.docItemCol)},a.createElement(T,null),a.createElement("div",{className:se.docItemContainer},a.createElement("article",null,a.createElement(oe,null),a.createElement(H,null),n.mobile,a.createElement(Q,null,t),a.createElement(P,null)),a.createElement(h,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function ie(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(s,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(i,null),a.createElement(ce,null,a.createElement(n,null))))}},1882:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(7294),l=n(7325),r=n(3702),o=n(7462),s=n(4334);const c={iconEdit:"iconEdit_Z9Sw"};function i(e){let{className:t,...n}=e;return a.createElement("svg",(0,o.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(c.iconEdit,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function d(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},a.createElement(i,null),a.createElement(l.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},3672:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(7294),l=n(4334),r=n(3699);function o(e){const{permalink:t,title:n,subLabel:o,isNext:s}=e;return a.createElement(r.Z,{className:(0,l.Z)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},o&&a.createElement("div",{className:"pagination-nav__sublabel"},o),a.createElement("div",{className:"pagination-nav__label"},n))}},2728:(e,t,n)=>{n.d(t,{Z:()=>b});var a=n(7462),l=n(7294),r=n(107);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function m(e){const t=(0,l.useRef)(void 0),n=d();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=i(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const v=l.memo(u);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:d,maxHeadingLevel:u,...b}=e;const p=(0,r.L)(),h=d??p.tableOfContents.minHeadingLevel,g=u??p.tableOfContents.maxHeadingLevel,E=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>s({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:h,maxHeadingLevel:g});return m((0,l.useMemo)((()=>{if(c&&i)return{linkClassName:c,linkActiveClassName:i,minHeadingLevel:h,maxHeadingLevel:g}}),[c,i,h,g])),l.createElement(v,(0,a.Z)({toc:E,className:n,linkClassName:c},b))}},3811:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(7462),l=n(7294),r=n(4334),o=n(2728);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",i="table-of-contents__link--active";function d(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(s.tableOfContents,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:i})))}},1693:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(7294),l=n(4334),r=n(3699);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function s(e){let{permalink:t,label:n,count:s}=e;return a.createElement(r.Z,{href:t,className:(0,l.Z)(o.tag,s?o.tagWithCount:o.tagRegular)},n,s&&a.createElement("span",null,s))}},1540:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(7294),l=n(4334),r=n(7325),o=n(1693);const s={tags:"tags_jXut",tag:"tag_QGVx"};function c(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,l.Z)(s.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:s.tag},a.createElement(o.Z,{label:t,permalink:n}))}))))}},8801:(e,t,n)=>{n.d(t,{E:()=>s,q:()=>o});var a=n(7294),l=n(3768);const r=a.createContext(null);function o(e){let{children:t,version:n}=e;return a.createElement(r.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocsVersionProvider");return e}},3132:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(7294),l=n(1141),r=n(7410);function o(e){return a.createElement(a.Fragment,null,a.createElement(l.Z,e))}(void 0!==n.g?n.g:window).Prism=r.Z,n(9385)}}]); \ No newline at end of file diff --git a/assets/js/1f391b9e.28f273ba.js b/assets/js/1f391b9e.28f273ba.js deleted file mode 100644 index 4c4457e..0000000 --- a/assets/js/1f391b9e.28f273ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3085],{2865:(e,n,t)=>{t.r(n),t.d(n,{default:()=>d});var a=t(7294),l=t(4334),r=t(5463),c=t(3702),i=t(64),o=t(6220),s=t(3811);const m={mdxPageWrapper:"mdxPageWrapper_j9I6"};function d(e){const{content:n}=e,{metadata:{title:t,description:d,frontMatter:u}}=n,{wrapperClassName:f,hide_table_of_contents:v}=u;return a.createElement(r.FG,{className:(0,l.Z)(f??c.k.wrapper.mdxPages,c.k.page.mdxPage)},a.createElement(r.d,{title:t,description:d}),a.createElement(i.Z,null,a.createElement("main",{className:"container container--fluid margin-vert--lg"},a.createElement("div",{className:(0,l.Z)("row",m.mdxPageWrapper)},a.createElement("div",{className:(0,l.Z)("col",!v&&"col--8")},a.createElement("article",null,a.createElement(o.Z,null,a.createElement(n,null)))),!v&&n.toc.length>0&&a.createElement("div",{className:"col col--2"},a.createElement(s.Z,{toc:n.toc,minHeadingLevel:u.toc_min_heading_level,maxHeadingLevel:u.toc_max_heading_level}))))))}},2728:(e,n,t)=>{t.d(n,{Z:()=>v});var a=t(7462),l=t(7294),r=t(107);function c(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const a=t.slice(2,e.level);e.parentIndex=Math.max(...a),t[e.level]=n}));const a=[];return n.forEach((e=>{const{parentIndex:t,...l}=e;t>=0?n[t].children.push(l):a.push(l)})),a}function i(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return n.flatMap((e=>{const n=i({toc:e.children,minHeadingLevel:t,maxHeadingLevel:a});return function(e){return e.level>=t&&e.level<=a}(e)?[{...e,children:n}]:n}))}function o(e){const n=e.getBoundingClientRect();return n.top===n.bottom?o(e.parentNode):n}function s(e,n){let{anchorTopOffset:t}=n;const a=e.find((e=>o(e).top>=t));if(a){return function(e){return e.top>0&&e.bottom{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,l.useRef)(void 0),t=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:c}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const a=[];for(let l=n;l<=t;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:c}),o=s(i,{anchorTopOffset:t.current}),m=e.find((e=>o&&o.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(l),e.classList.add(l),n.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,t])}function u(e){let{toc:n,className:t,linkClassName:a,isChild:r}=e;return n.length?l.createElement("ul",{className:r?void 0:t},n.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:t,linkClassName:a}))))):null}const f=l.memo(u);function v(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...v}=e;const g=(0,r.L)(),h=m??g.tableOfContents.minHeadingLevel,L=u??g.tableOfContents.maxHeadingLevel,p=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:c(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:h,maxHeadingLevel:L});return d((0,l.useMemo)((()=>{if(o&&s)return{linkClassName:o,linkActiveClassName:s,minHeadingLevel:h,maxHeadingLevel:L}}),[o,s,h,L])),l.createElement(f,(0,a.Z)({toc:p,className:t,linkClassName:o},v))}},3811:(e,n,t)=>{t.d(n,{Z:()=>m});var a=t(7462),l=t(7294),r=t(4334),c=t(2728);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},o="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:n,...t}=e;return l.createElement("div",{className:(0,r.Z)(i.tableOfContents,"thin-scrollbar",n)},l.createElement(c.Z,(0,a.Z)({},t,{linkClassName:o,linkActiveClassName:s})))}},3132:(e,n,t)=>{t.d(n,{Z:()=>c});var a=t(7294),l=t(1141),r=t(7410);function c(e){return a.createElement(a.Fragment,null,a.createElement(l.Z,e))}(void 0!==t.g?t.g:window).Prism=r.Z,t(9385)}}]); \ No newline at end of file diff --git a/assets/js/2ae76f65.d6bcf79e.js b/assets/js/2ae76f65.d6bcf79e.js deleted file mode 100644 index be17a82..0000000 --- a/assets/js/2ae76f65.d6bcf79e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6641],{4137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),d=o,m=u["".concat(l,".").concat(d)]||u[d]||f[d]||a;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(7462),o=(n(7294),n(4137));const a={},i=void 0,s={type:"mdx",permalink:"/feature/cogine",source:"@site/src/pages/feature/cogine.mdx",description:"First define a Story struct with editor:",frontMatter:{}},l=[],c={toc:l},p="wrapper";function u(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"First define a Story struct with editor:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"std",src:n(452).Z,width:"1362",height:"589"})),(0,o.kt)("p",null,"Then define your component's input and output using the above defined struct also with editor:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"std",src:n(5811).Z,width:"1618",height:"504"})),(0,o.kt)("p",null,"Then define your logic flow:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"std",src:n(6453).Z,width:"1614",height:"303"})),(0,o.kt)("p",null,"Finally write your component's code with Lua:"),(0,o.kt)("p",null,"fetch_top_hn.lua:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local story_ids = get_url("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty")\n for i = 1, #story_ids do\n local url = string.format("https://hacker-news.firebaseio.com/v0/item/%s.json?print=pretty", story_ids[i])\n stories[i] = get_url(url)\n end\nend\n')),(0,o.kt)("p",null,"interpret_the_group.lua:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("Based on the following list of HackerNews threads, filter this list to only launches of new AI projects: %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information", prompt)\n if result["ok"] == true then\n for i = 1, #result["content"] do\n local story = {}\n out_stories[i] = result["content"][i]\n end\n end\nend\n')),(0,o.kt)("p",null,"format_and_rank.lua:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("this list of new AI projects in markdown, ranking the most interesting projects from most interesting to least. %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information",prompt)\n\n local msg = "The news with AI topics are:\\n"\n if result["ok"] == true then\n for i = 1, #result["content"] do\n msg = string.format("%s%d. %s\\n",msg,i,result["content"][i]["title"])\n end\n end\n \n message["content"] = msg\n message["receiver"] = "user"\nend\n')))}u.isMDXComponent=!0},5811:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cogine-components-c811dd4b9b3bcee1dcddcd64eeb2e83b.png"},6453:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cogine-flow-a9536cf3eaca92b6114d933df6f95c55.png"},452:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cogine-standards-afa43691cf3fe033e9a474df75d9608c.png"}}]); \ No newline at end of file diff --git a/assets/js/306a8c6c.2163c7e8.js b/assets/js/306a8c6c.2163c7e8.js deleted file mode 100644 index ecc896b..0000000 --- a/assets/js/306a8c6c.2163c7e8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[7616],{9479:e=>{e.exports=JSON.parse('{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"community":[{"type":"link","label":"index","href":"/community/","docId":"index"}]},"docs":{"index":{"id":"index","title":"index","description":"","sidebar":"community"}}}')}}]); \ No newline at end of file diff --git a/assets/js/308394e9.26532507.js b/assets/js/308394e9.efbc629e.js similarity index 57% rename from assets/js/308394e9.26532507.js rename to assets/js/308394e9.efbc629e.js index cd3bb2c..9a9a943 100644 --- a/assets/js/308394e9.26532507.js +++ b/assets/js/308394e9.efbc629e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3650],{4137:(e,t,l)=>{l.d(t,{Zo:()=>u,kt:()=>c});var a=l(7294);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,a)}return l}function r(e){for(var t=1;t=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}var s=a.createContext({}),p=function(e){var t=a.useContext(s),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var l=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),k=p(l),d=n,c=k["".concat(s,".").concat(d)]||k[d]||m[d]||i;return l?a.createElement(c,r(r({ref:t},u),{},{components:l})):a.createElement(c,r({ref:t},u))}));function c(e,t){var l=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=l.length,r=new Array(i);r[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[k]="string"==typeof e?e:n,r[1]=o;for(var p=2;p{l.r(t),l.d(t,{contentTitle:()=>r,default:()=>k,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var a=l(7462),n=(l(7294),l(4137));const i={},r="\u6587\u6863\u8bf4\u660e",o={type:"mdx",permalink:"/learning/Reality-World",source:"@site/src/pages/learning/Reality-World.md",title:"\u6587\u6863\u8bf4\u660e",description:"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002",frontMatter:{}},s=[{value:"1.1 \u53d8\u9769",id:"11-\u53d8\u9769",level:2},{value:"1.1.1 \u5f62\u6001\u53d8\u5316",id:"111-\u5f62\u6001\u53d8\u5316",level:3},{value:"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",level:3},{value:"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb",id:"1121-\u4e1a\u52a1\u6bd4\u55bb",level:4},{value:"1.1.3 \u6280\u672f\u6311\u6218",id:"113-\u6280\u672f\u6311\u6218",level:3},{value:"1.2 \u73b0\u72b6",id:"12-\u73b0\u72b6",level:2},{value:"1.3 \u6280\u672f\u4f18\u52bf",id:"13-\u6280\u672f\u4f18\u52bf",level:2},{value:"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",level:3},{value:"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236",id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236",level:3},{value:"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017",id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017",level:3},{value:"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f",id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f",level:3},{value:"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"1.4 \u5546\u4e1a\u6a21\u5f0f",id:"14-\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",level:3},{value:"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",level:3},{value:"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",level:4},{value:"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d",id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",level:3},{value:"1.4.5 \u6301\u7eed\u6d88\u8d39",id:"145-\u6301\u7eed\u6d88\u8d39",level:3},{value:"1.5 \u7528\u6237",id:"15-\u7528\u6237",level:2},{value:"1.5.1 \u666e\u901a\u7528\u6237",id:"151-\u666e\u901a\u7528\u6237",level:3},{value:"1.5.2 \u521b\u4f5c\u7528\u6237",id:"152-\u521b\u4f5c\u7528\u6237",level:3},{value:"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b",id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b",level:4},{value:"1.5.3 \u5f00\u53d1\u8005",id:"153-\u5f00\u53d1\u8005",level:3},{value:"1.5.4 \u6807\u51c6\u4f5c\u8005",id:"154-\u6807\u51c6\u4f5c\u8005",level:3},{value:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c",id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c",level:2},{value:"2.1 Creation Scene Description",id:"21-creation-scene-description",level:2},{value:"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8",id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8",level:3},{value:"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f",id:"212-\u5185\u5b58\u5206\u5e03\u5f0f",level:3},{value:"2.2 Creation Script",id:"22-creation-script",level:2},{value:"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09",id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868",level:3},{value:"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868",id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868",level:4},{value:"2.2.1.2 \u7b26\u53f7\u8868",id:"2212-\u7b26\u53f7\u8868",level:4},{value:"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",level:4},{value:"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027",id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027",level:4},{value:"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf",id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf",level:4},{value:"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",level:4},{value:"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",level:4},{value:"2.2.1.8 \u5b58\u6863\u5c5e\u6027",id:"2218-\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.2 Entity",id:"222-entity",level:3},{value:"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",level:3},{value:"2.2.3.1 \u79c1\u6709\u53d8\u91cf",id:"2231-\u79c1\u6709\u53d8\u91cf",level:4},{value:"2.2.3.2 \u5199\u5165\u6743\u9650",id:"2232-\u5199\u5165\u6743\u9650",level:4},{value:"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",level:4},{value:"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",level:3},{value:"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",level:4},{value:"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",level:4},{value:"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026",id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026",level:4},{value:"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026",level:4},{value:"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316",id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316",level:3},{value:"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",level:4},{value:"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations",id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations",level:4},{value:"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",level:4},{value:"2.2.6 \u7ec4\u4ef6\u67e5\u8be2",id:"226-\u7ec4\u4ef6\u67e5\u8be2",level:3},{value:"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",level:4},{value:"2.2.6.2 \u663e\u5f0f\u58f0\u660e",id:"2262-\u663e\u5f0f\u58f0\u660e",level:4},{value:"2.2.6.3 RUST ECS",id:"2263-rust-ecs",level:4},{value:"2.2.6.4 Labels/Layers",id:"2264-labelslayers",level:4},{value:"2.2.7 Component + System",id:"227-component--system",level:3},{value:"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",level:4},{value:"2.2.7.2 Change-driven update",id:"2272-change-driven-update",level:4},{value:"2.2.7.3 ECS",id:"2273-ecs",level:4},{value:"2.2.7.4 ECS\u53c2\u6570",id:"2274-ecs\u53c2\u6570",level:4},{value:"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",level:4},{value:"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6",id:"2276-\u5355\u4f8b\u7ec4\u4ef6",level:4},{value:"2.2.8 \u6d88\u606f\u901a\u4fe1",id:"228-\u6d88\u606f\u901a\u4fe1",level:3},{value:"2.2.8.1 \u7cfb\u7edf\u673a\u5236",id:"2281-\u7cfb\u7edf\u673a\u5236",level:4},{value:"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168",id:"2282-\u7ec4\u4ef6\u5b89\u5168",level:4},{value:"2.2.8.3 \u6743\u9650\u63a7\u5236",id:"2283-\u6743\u9650\u63a7\u5236",level:4},{value:"2.2.8.4 \u65f6\u5e8f\u6027",id:"2284-\u65f6\u5e8f\u6027",level:4},{value:"2.2.8.5 \u6027\u80fd\u95ee\u9898",id:"2285-\u6027\u80fd\u95ee\u9898",level:4},{value:"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f",id:"2286-\u4e09\u79cd\u6a21\u5f0f",level:4},{value:"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863",id:"229-\u6570\u636e\u4e0e\u5b58\u6863",level:3},{value:"2.2.9.1 \u6570\u636e\u914d\u7f6e",id:"2291-\u6570\u636e\u914d\u7f6e",level:4},{value:"2.2.9.2 \u5b58\u6863",id:"2292-\u5b58\u6863",level:4},{value:"2.2.9.3 \u4e0d\u8db3",id:"2293-\u4e0d\u8db3",level:4},{value:"2.2.10 \u901a\u7528\u6027",id:"2210-\u901a\u7528\u6027",level:3},{value:"2.2.10.1 \u72ec\u7acb\u7c7b",id:"22101-\u72ec\u7acb\u7c7b",level:4},{value:"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",level:4},{value:"2.2.10.3 \u6709\u8fd4\u56de\u503c",id:"22103-\u6709\u8fd4\u56de\u503c",level:4},{value:"2.2.10.4 \u7ee7\u627f",id:"22104-\u7ee7\u627f",level:4},{value:"2.2.10.5 \u7ed3\u6784\u4f53",id:"22105-\u7ed3\u6784\u4f53",level:4},{value:"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387",id:"22106-\u63a7\u5236tick\u7684\u9891\u7387",level:4},{value:"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026",level:3},{value:"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c",id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c",level:4},{value:"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165",id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165",level:4},{value:"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",level:4},{value:"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",level:4},{value:"2.2.12 \u7b26\u53f7\u6cdb\u578b",id:"2212-\u7b26\u53f7\u6cdb\u578b",level:3},{value:"2.2.12.1 \u53d8\u91cf\u540d\u79f0",id:"22121-\u53d8\u91cf\u540d\u79f0",level:4},{value:"2.2.12.2 \u6a21\u5f0f\u5339\u914d",id:"22122-\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",level:4},{value:"2.2.13 \u5e76\u53d1",id:"2213-\u5e76\u53d1",level:3},{value:"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b",id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b",level:4},{value:"2.2.13.2 Erlang\u53caOOP",id:"22132-erlang\u53caoop",level:4},{value:"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",level:4},{value:"2.2.14 \u667a\u80fd\u611f\u77e5",id:"2214-\u667a\u80fd\u611f\u77e5",level:3},{value:"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92",id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92",level:3},{value:"2.2.14.1 HelpComponent",id:"22141-helpcomponent",level:4},{value:"2.2.15 Components",id:"2215-components",level:3},{value:"2.2.15.1 NeuralComponent",id:"22151-neuralcomponent",level:4},{value:"2.2.15.2 TagComponent",id:"22152-tagcomponent",level:4},{value:"2.2.15.3 RealityIDComponent",id:"22153-realityidcomponent",level:4},{value:"2.2.15.4 HelpComponent",id:"22154-helpcomponent",level:4},{value:"2.2.15.5 DeltaComponent",id:"22155-deltacomponent",level:4},{value:"2.2.16 \u6700\u4f73\u5b9e\u8df5",id:"2216-\u6700\u4f73\u5b9e\u8df5",level:3},{value:"2.2.16.1 more granular is better",id:"22161-more-granular-is-better",level:4},{value:"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f",id:"22162-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",level:3},{value:"2.2.17.1 \u6570\u636e\u6cdb\u578b",id:"22171-\u6570\u636e\u6cdb\u578b",level:4},{value:"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e",id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e",level:4},{value:"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",level:3},{value:"2.2.18.1 Update\u673a\u5236",id:"22181-update\u673a\u5236",level:4},{value:"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",level:4},{value:"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6",id:"22183-\u67b6\u6784\u590d\u6742\u5ea6",level:4},{value:"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI",id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai",level:3},{value:"2.2.20 \u5b89\u5168",id:"2220-\u5b89\u5168",level:3},{value:"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56",id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56",level:3},{value:"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",level:4},{value:"2.2.21.2 \u5173\u8054\u7ec4\u4ef6",id:"22212-\u5173\u8054\u7ec4\u4ef6",level:4},{value:"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f",id:"22213-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.22 \u5206\u5e03\u5f0f",id:"2222-\u5206\u5e03\u5f0f",level:3},{value:"2.2.23 \u5f02\u5e38",id:"2223-\u5f02\u5e38",level:3},{value:"2.2.23.1 \u81ea\u52a8\u5b58\u6863",id:"22231-\u81ea\u52a8\u5b58\u6863",level:4},{value:"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863",id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863",level:4},{value:"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9",id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9",level:4},{value:"2.2.24 \u7ec4\u4ef6\u5c5e\u6027",id:"2224-\u7ec4\u4ef6\u5c5e\u6027",level:3},{value:"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",level:3},{value:"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",level:4},{value:"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",level:4},{value:"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",level:4},{value:"2.3 Creation VM",id:"23-creation-vm",level:2},{value:"2.3.1 Creation Table Engine",id:"231-creation-table-engine",level:3},{value:"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4",id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4",level:4},{value:"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",level:4},{value:"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*",id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406",level:4},{value:"2.3.2 Add\u3001Remove",id:"232-addremove",level:3},{value:"2.3.3 Change-driven Update",id:"233-change-driven-update",level:3},{value:"2.3.3.1 \u7406\u8bba\u57fa\u7840",id:"2331-\u7406\u8bba\u57fa\u7840",level:4},{value:"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6",id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6",level:4},{value:"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a",id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a",level:4},{value:"2.3.3.4 Version Tracking",id:"2334-version--tracking",level:4},{value:"2.3.3.5 Bevy's Change Detection",id:"2335-bevys-change-detection",level:4},{value:"2.3.4 \u7f16\u8bd1",id:"234-\u7f16\u8bd1",level:3},{value:"2.3.4.1 AOT",id:"2341-aot",level:4},{value:"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",level:4},{value:"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",level:4},{value:"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d",id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d",level:3},{value:"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",level:3},{value:"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",level:4},{value:"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",level:4},{value:"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:4},{value:"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",level:4},{value:"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*",id:"237-\u9690\u5f0f\u865a\u62df\u673a",level:3},{value:"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",level:4},{value:"2.3.8 \u8c03\u5ea6\u5668",id:"238-\u8c03\u5ea6\u5668",level:3},{value:"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868",id:"239-\u52a8\u6001\u7b26\u53f7\u8868",level:3},{value:"2.3.10 \u865a\u62df\u673a\u67b6\u6784",id:"2310-\u865a\u62df\u673a\u67b6\u6784",level:3},{value:"2.3.10.1 \u670d\u52a1\u7aef",id:"23101-\u670d\u52a1\u7aef",level:4},{value:"2.3.10.2 \u5ba2\u6237\u7aef",id:"23102-\u5ba2\u6237\u7aef",level:4},{value:"2.4. CreationXR",id:"24-creationxr",level:2},{value:"2.4.1 Unified XR Input",id:"241-unified-xr-input",level:3},{value:"2.4.2 XR Scene Understanding",id:"242-xr-scene-understanding",level:3},{value:"2.4.3 Data-driven Architecture",id:"243-data-driven-architecture",level:3},{value:"2.4.4 \u4ea4\u4e92",id:"244-\u4ea4\u4e92",level:3},{value:"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",level:4},{value:"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92",id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92",level:4},{value:"2.5 Creation AI",id:"25-creation-ai",level:2},{value:"2.5.1 Semantics-based Creating",id:"251-semantics-based-creating",level:3},{value:"2.5.2 Procedural Content Generation",id:"252-procedural-content-generation",level:3},{value:"2.5.3 Intelligent Simulation",id:"253-intelligent-simulation",level:3},{value:"2.5.4 Research",id:"254-research",level:3},{value:"2.6 Creation Cloud",id:"26-creation-cloud",level:2},{value:"2.6.1 Creation Management",id:"261-creation-management",level:3},{value:"2.6.1.1 CreationID",id:"2611-creationid",level:4},{value:"2.6.2 Creation Code Library",id:"262--creation-code-library",level:3},{value:"2.6.2.1 \u6807\u51c6\u7ba1\u7406",id:"2621-\u6807\u51c6\u7ba1\u7406",level:4},{value:"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",level:4},{value:"2.6.3 Multi-player Services",id:"263-multi-player--services",level:3},{value:"2.6.3.1 Voice Service",id:"2631-voice-service",level:4},{value:"2.6.4 \u7aef\u4e91\u534f\u540c",id:"264-\u7aef\u4e91\u534f\u540c",level:3},{value:"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",level:4},{value:"2.6.4.2 Client as a Display",id:"2642-client-as-a-display",level:4},{value:"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",level:4},{value:"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",level:4},{value:"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f",id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f",level:4},{value:"2.6.5 \u5e76\u884c\u8ba1\u7b97",id:"265-\u5e76\u884c\u8ba1\u7b97",level:3},{value:"2.6.5.1 \u5206\u5e03\u5f0fCreation Table",id:"2651-\u5206\u5e03\u5f0fcreation-table",level:4},{value:"2.6.6 RPC",id:"266-rpc",level:3},{value:"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",level:2},{value:"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf",id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf",level:3},{value:"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b",id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143",id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143",level:4},{value:"2.7.2.2 \u5217\u8868\u64cd\u4f5c",id:"2722-\u5217\u8868\u64cd\u4f5c",level:4},{value:"2.7.3 \u6570\u636e\u9a71\u52a8",id:"273-\u6570\u636e\u9a71\u52a8",level:3},{value:"2.7.4 ECS",id:"274-ecs",level:3},{value:"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",level:3},{value:"2.7.6 \u52a8\u6001\u89e3\u91ca",id:"276-\u52a8\u6001\u89e3\u91ca",level:3},{value:"2.7.7 \u8d23\u6743\u8ba9\u6e21",id:"277-\u8d23\u6743\u8ba9\u6e21",level:3},{value:"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217",id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217",level:3},{value:"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",level:4},{value:"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027",id:"2782-\u5e76\u884c\u4f38\u7f29\u6027",level:4},{value:"2.7.9 Let is crash",id:"279-let-is-crash",level:3},{value:"2.7.9.1 \u5bb9\u9519\u673a\u5236",id:"2791-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6",id:"2792-\u5e76\u53d1\u8c03\u5ea6",level:4},{value:"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",level:3},{value:"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",level:4},{value:"2.7.10.2 Machinations",id:"27102-machinations",level:4},{value:"2.7.11 \u6a21\u5f0f\u5339\u914d",id:"2711-\u6a21\u5f0f\u5339\u914d",level:3},{value:"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.12.2 \u540d\u5b57\u5339\u914d",id:"27122-\u540d\u5b57\u5339\u914d",level:4},{value:"2.7.12 \u5206\u5e03\u5f0f",id:"2712-\u5206\u5e03\u5f0f",level:3},{value:"2.7.12.1 Actor\u6a21\u578b",id:"27121-actor\u6a21\u578b",level:4},{value:"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",level:3},{value:"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6",id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6",level:4},{value:"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",level:4},{value:"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",level:4},{value:"2.7.14 Serverless",id:"2714-serverless",level:3},{value:"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5",id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5",level:3},{value:"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:3},{value:"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",level:4},{value:"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",level:4},{value:"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:4},{value:"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",level:4},{value:"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",level:4},{value:"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf",id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf",level:3},{value:"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570",id:"27171-\u5355\u53c2\u6570\u51fd\u6570",level:4},{value:"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b",id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",level:3},{value:"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027",id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027",level:4},{value:"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",level:4},{value:"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",level:4},{value:"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",level:4},{value:"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5",id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5",level:4},{value:"2.7.20 \u8ba1\u7b97\u56fe",id:"2720-\u8ba1\u7b97\u56fe",level:3},{value:"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf",id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf",level:2},{value:"2.8.1 \u52a8\u6001\u7f16\u8bd1",id:"281-\u52a8\u6001\u7f16\u8bd1",level:3},{value:"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",level:3},{value:"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f",id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f",level:3},{value:"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0",id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0",level:3},{value:"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",level:3},{value:"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",level:3},{value:"2.8.7 \u52a8\u6001\u5524\u9192",id:"287-\u52a8\u6001\u5524\u9192",level:3},{value:"2.9 \u4e92\u64cd\u4f5c\u6027",id:"29-\u4e92\u64cd\u4f5c\u6027",level:2},{value:"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",level:3},{value:"2.9.1.1 Object models",id:"2911-object-models",level:4},{value:"2.9.1.2 Virtual machines",id:"2912-virtual-machines",level:4},{value:"2.9.1.3 Foreign function interfaces",id:"2913-foreign-function-interfaces",level:4},{value:"2.9.1.4 Challenges",id:"2914-challenges",level:4},{value:"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",level:4},{value:"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",level:4},{value:"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",level:4},{value:"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",level:4},{value:"2.9.5 \u4ea4\u4e92\u6a21\u5f0f",id:"295-\u4ea4\u4e92\u6a21\u5f0f",level:3},{value:"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94",id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94",level:4},{value:"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027",id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027",level:4},{value:"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",level:4},{value:"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",level:3},{value:"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528",id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528",level:4},{value:"2.10 GPU VM",id:"210-gpu-vm",level:2},{value:"2.11 Render VM",id:"211-render-vm",level:2},{value:"2.12 RealityIS Runtime",id:"212-realityis-runtime",level:2},{value:"2.13 \u6027\u80fd\u56e0\u7d20",id:"213-\u6027\u80fd\u56e0\u7d20",level:2},{value:"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931",id:"2131-\u5c40\u90e8\u6027\u4e27\u5931",level:3},{value:"2.13.2 \u65e0\u6548\u8ba1\u7b97",id:"2132-\u65e0\u6548\u8ba1\u7b97",level:3},{value:"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*",id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d",level:2},{value:"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840",id:"2141-realityis\u6838\u5fc3\u57fa\u7840",level:3},{value:"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027",id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027",level:3},{value:"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5",id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5",level:3},{value:"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",level:4},{value:"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027",id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027",level:4},{value:"2.14.3.3 \u7248\u672c\u7ba1\u7406",id:"21433-\u7248\u672c\u7ba1\u7406",level:4},{value:"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",level:4},{value:"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",level:3},{value:"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",level:2},{value:"2.15.1 \u590d\u6742\u7cfb\u7edf",id:"2151-\u590d\u6742\u7cfb\u7edf",level:3},{value:"2.15.2 \u7ec6\u80de\u6a21\u578b",id:"2152-\u7ec6\u80de\u6a21\u578b",level:3},{value:"2.15.2.1 Isolation",id:"21521-isolation",level:4},{value:"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",level:3},{value:"2.15.3.1 Is Erlang object oriented?",id:"21531-is-erlang-object-oriented",level:4},{value:"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb",id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb",level:4},{value:"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236",id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236",level:4},{value:"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",level:3},{value:"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",level:4},{value:"2.15.4.2 \u6d88\u606f\u4f20\u9012",id:"21542-\u6d88\u606f\u4f20\u9012",level:4},{value:"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",level:4},{value:"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5",id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5",level:4},{value:"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7",id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7",level:4},{value:"2.15.4.6 \u591a\u6001",id:"21546-\u591a\u6001",level:4},{value:"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb",id:"21547-\u5bf9\u8c61\u5173\u7cfb",level:4},{value:"2.15.4.8 \u5bb9\u9519\u673a\u5236",id:"21548-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",level:2},{value:"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027",id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027",level:3},{value:"2.16.1.1 java class loader & security",id:"21611-java-class-loader--security",level:4},{value:"2.16.1.2 Java applets",id:"21612-java-applets",level:4},{value:"2.16.1.3 MVM",id:"21613-mvm",level:4},{value:"2.16.2 Program Security Mechanisms",id:"2162-program-security-mechanisms",level:3},{value:"2.16.2.1 CFI",id:"21621-cfi",level:4},{value:"2.16.2.2 SFI",id:"21622-sfi",level:4},{value:"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",level:5},{value:"2.16.2.2.2 Heavyweight Transitions",id:"216222-heavyweight-transitions",level:5},{value:"2.16.2.3 object space model",id:"21623-object--space-model",level:4},{value:"2.16.2.4 lua Environment",id:"21624-lua-environment",level:4},{value:"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236",id:"21625-erlang-\u9694\u79bb\u673a\u5236",level:4},{value:"2.16.3 Webassembly Security",id:"2163-webassembly-security",level:3},{value:"2.16.3.1 Module & CFI",id:"21631-module--cfi",level:4},{value:"2.16.3.2 Memory safety",id:"21632-memory-safety",level:4},{value:"2.16.3.3 Isolation without Taxation",id:"21633-isolation-without-taxation",level:4},{value:"2.16.3.3.1 Zero-cost conditions",id:"216331-zero-cost-conditions",level:5},{value:"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",level:3},{value:"2.16.4.1 \u5bf9\u8c61\u9694\u79bb",id:"21641-\u5bf9\u8c61\u9694\u79bb",level:4},{value:"2.16.4.2 app spaces",id:"21642-app-spaces",level:4},{value:"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1",id:"21643-\u5bf9\u8c61\u901a\u4fe1",level:4},{value:"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",level:4},{value:"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784",id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784",level:2},{value:"2.17.1 LLVM",id:"2171-llvm",level:3},{value:"2.17.2 USD",id:"2172-usd",level:3},{value:"2.17.3 MLIR",id:"2173-mlir",level:3},{value:"2.17.4 Lua C API",id:"2174-lua-c-api",level:3},{value:"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",level:3},{value:"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",level:2},{value:"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236",id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236",level:3},{value:"2.18.2 \u94fe\u63a5\u673a\u5236",id:"2182-\u94fe\u63a5\u673a\u5236",level:3},{value:"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236",id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236",level:3},{value:"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",level:2},{value:"3.1 Creation ID",id:"31-creation-id",level:2},{value:"3.2 Creation Simulation",id:"32-creation-simulation",level:2},{value:"3.3 UI\u7ec4\u4ef6",id:"33-ui\u7ec4\u4ef6",level:2},{value:"3.3.1 Bevy UI",id:"331-bevy-ui",level:3},{value:"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",level:3},{value:"4.1 Reality ID",id:"41-reality-id",level:2},{value:"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406",id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406",id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406",level:3},{value:"4.2 The Reality World app",id:"42-the-reality-world-app",level:2},{value:"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",level:3},{value:"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",level:4},{value:"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",level:4},{value:"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",level:4},{value:"4.2.2 \u4f20\u9001\u95e8",id:"422-\u4f20\u9001\u95e8",level:3},{value:"4.2.3 Point and Click",id:"423-point-and-click",level:3},{value:"4.3 \u6e90\u52a8\u529b",id:"43-\u6e90\u52a8\u529b",level:2},{value:"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",level:3},{value:"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",level:3},{value:"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e",id:"4321-\u6301\u7eed\u7ecf\u6d4e",level:4},{value:"4.3.2.2 \u5e7f\u544a\u5185\u5bb9",id:"4322-\u5e7f\u544a\u5185\u5bb9",level:4},{value:"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",level:3},{value:"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743",id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743",level:2},{value:"4.4.1 RealityIDComponent",id:"441-realityidcomponent",level:3},{value:"4.4.2 readonly",id:"442-readonly",level:3},{value:"4.4.3 \u91cd\u65b0\u52a0\u8f7d",id:"443-\u91cd\u65b0\u52a0\u8f7d",level:3},{value:"4.5 \u7a33\u5b9a\u6027",id:"45-\u7a33\u5b9a\u6027",level:2},{value:"4.5.1 Reality Verified Components",id:"451-reality-verified-components",level:3},{value:"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",level:3},{value:"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613",id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613",level:2},{value:"4.6.1 \u53ca\u65f6\u8d2d\u4e70",id:"461-\u53ca\u65f6\u8d2d\u4e70",level:3},{value:"4.6.2 \u667a\u80fd\u8d2d\u4e70",id:"462-\u667a\u80fd\u8d2d\u4e70",level:3},{value:"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",level:3},{value:"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",level:4},{value:"4.6.4 \u5e02\u573a\u7ecf\u6d4e",id:"464-\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",level:4},{value:"4.6.5 \u533a\u5757\u94fe",id:"465-\u533a\u5757\u94fe",level:3},{value:"4.6.5.1 \u4ef7\u503c\u5173\u8054",id:"4651-\u4ef7\u503c\u5173\u8054",level:4},{value:"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a",id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a",level:4},{value:"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",level:4},{value:"4.6.6 Royalty",id:"466-royalty",level:3},{value:"4.6.6.1 \u6807\u51c6\u7a0e",id:"4661-\u6807\u51c6\u7a0e",level:4},{value:"4.6.6.2 \u7ec4\u4ef6\u7a0e",id:"4662-\u7ec4\u4ef6\u7a0e",level:4},{value:"4.6.9 \u5b8c\u6574\u7684\u751f\u6001",id:"469-\u5b8c\u6574\u7684\u751f\u6001",level:3},{value:"4.7 Social",id:"47-social",level:2},{value:"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4",id:"471-\u79c1\u4eba\u5316\u793e\u4ea4",level:3},{value:"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1",id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1",level:4},{value:"4.7.2 \u5173\u6ce8\u73b0\u5b9e",id:"472--\u5173\u6ce8\u73b0\u5b9e",level:3},{value:"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",level:2},{value:"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027",id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027",level:3},{value:"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",level:3},{value:"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",level:3},{value:"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c",id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c",level:3},{value:"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f",id:"485-\u521b\u9020\u7684\u65b9\u5f0f",level:3},{value:"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",level:3},{value:"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",level:3},{value:"4.9 Third party apps",id:"49-third-party-apps",level:2},{value:"4.10 \u793e\u4f1a\u4ef7\u503c",id:"410--\u793e\u4f1a\u4ef7\u503c",level:2},{value:"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",level:3},{value:"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",level:3},{value:"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",level:3},{value:"4.11 \u6807\u51c6",id:"411-\u6807\u51c6",level:2},{value:"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",level:3},{value:"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"4.11.3 \u6807\u51c6\u7ba1\u7406",id:"4113-\u6807\u51c6\u7ba1\u7406",level:3},{value:"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5",id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236",id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236",level:4},{value:"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09",id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236",level:4},{value:"4.11.4 \u8de8\u8d8a\u6807\u51c6",id:"4114-\u8de8\u8d8a\u6807\u51c6",level:3},{value:"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",level:4},{value:"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse",id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse",level:2},{value:"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c",id:"4121-\u6807\u51c6\u7684\u4ef7\u503c",level:3},{value:"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",level:3},{value:"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",level:3},{value:"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",level:4},{value:"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",level:3},{value:"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",level:4},{value:"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",level:4},{value:"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",level:4},{value:"4.13 \u7528\u6237\u521b\u4f5c",id:"413-\u7528\u6237\u521b\u4f5c",level:2},{value:"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",level:3},{value:"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",level:3},{value:"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7",id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7",level:3},{value:"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",level:2},{value:"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458",id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458",level:3},{value:"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI",id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai",level:3},{value:"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",level:4},{value:"5.1 \u4ee3\u5e01\u7ecf\u6d4e",id:"51-\u4ee3\u5e01\u7ecf\u6d4e",level:2},{value:"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",level:3},{value:"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",level:3},{value:"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97",id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97",level:2},{value:"5.2.1 \u7ed3\u7b97\u6027\u80fd",id:"521-\u7ed3\u7b97\u6027\u80fd",level:3},{value:"5.3 \u667a\u80fd\u5408\u7ea6",id:"53-\u667a\u80fd\u5408\u7ea6",level:2},{value:"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",level:2},{value:"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01",id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01",level:3},{value:"5.4.2 \u6d41\u52a8\u6027",id:"542-\u6d41\u52a8\u6027",level:3},{value:"5.5 \u5e73\u53f0\u4fe1\u7528",id:"55-\u5e73\u53f0\u4fe1\u7528",level:2},{value:"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae",id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae",level:3},{value:"5.5.2 \u4ee3\u5e01\u534f\u8bae",id:"552-\u4ee3\u5e01\u534f\u8bae",level:3},{value:"5.6 \u73b0\u5b9e\u5e94\u7528",id:"56-\u73b0\u5b9e\u5e94\u7528",level:2},{value:"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",level:2},{value:"5.7.1 \u73a9\u5bb6\u9053\u5fb7",id:"571-\u73a9\u5bb6\u9053\u5fb7",level:3},{value:"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1",id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1",level:3},{value:"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",level:2},{value:"5.8.1 \u793e\u4ea4\u5206\u4eab",id:"581-\u793e\u4ea4\u5206\u4eab",level:3},{value:"5.8.2 \u53c2\u4e0e\u5185\u6d4b",id:"582-\u53c2\u4e0e\u5185\u6d4b",level:3},{value:"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",level:2},{value:"5.10 \u67b6\u6784\u7f3a\u9677",id:"510-\u67b6\u6784\u7f3a\u9677",level:2},{value:"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",level:3},{value:"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",level:3},{value:"7.1 \u6570\u636e\u683c\u5f0f",id:"71-\u6570\u636e\u683c\u5f0f",level:2},{value:"7.1.1 USD",id:"711-usd",level:3},{value:"7.1.1.1 \u65b0\u601d\u60f3",id:"7111-\u65b0\u601d\u60f3",level:4},{value:"7.1.1.2 \u6280\u672f\u65b9\u6848",id:"7112-\u6280\u672f\u65b9\u6848",level:4},{value:"7.1.1.3 USDZ",id:"7113-usdz",level:4},{value:"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0",id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0",level:4},{value:"7.1.1.5 \u5bf9\u6bd4",id:"7115-\u5bf9\u6bd4",level:4},{value:"7.1.2 Alembic formats",id:"712-alembic-formats",level:3},{value:"7.1.3 Unity Prefabs",id:"713-unity-prefabs",level:3},{value:"7.1.4 \u4ee3\u7801\u751f\u6210",id:"714-\u4ee3\u7801\u751f\u6210",level:3},{value:"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784",id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784",level:2},{value:"7.2.1 Unity DOTS/ECS",id:"721-unity-dotsecs",level:3},{value:"7.2.2 ECS",id:"722-ecs",level:3},{value:"7.2.3 UE5 MASS",id:"723-ue5-mass",level:3},{value:"7.2.4 Data-oriented and -driven",id:"724-data-oriented-and--driven",level:3},{value:"7.2.5 Rust ECS",id:"725--rust-ecs",level:3},{value:"7.3 \u7f16\u8bd1\u5668\u4e0eDSL",id:"73-\u7f16\u8bd1\u5668\u4e0edsl",level:2},{value:"7.3.1 Taichi",id:"731--taichi",level:3},{value:"7.3.1.1 \u65b0\u601d\u60f3",id:"7311-\u65b0\u601d\u60f3",level:4},{value:"7.3.1.2 \u6280\u672f\u65b9\u6848",id:"7312-\u6280\u672f\u65b9\u6848",level:4},{value:"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0",id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0",level:4},{value:"7.3.1.4 \u5bf9\u6bd4",id:"7314-\u5bf9\u6bd4",level:4},{value:"7.3.2 Modular AI",id:"732-modular-ai",level:3},{value:"7.3.2.1 \u65b0\u601d\u60f3",id:"7321-\u65b0\u601d\u60f3",level:4},{value:"7.3.2.2 Challenges",id:"7322-challenges",level:4},{value:"7.3.2.3 Core additions to MLIR",id:"7323-core-additions-to-mlir",level:4},{value:"7.3.2.4 \u7b14\u8bb0",id:"7324-\u7b14\u8bb0",level:4},{value:"7.3.3 Jittor",id:"733-jittor",level:3},{value:"7.3.3.1 The front-end",id:"7331-the-front-end",level:4},{value:"7.3.3.2 The back-end",id:"7332-the-back-end",level:4},{value:"7.3.4 PyTorch",id:"734-pytorch",level:3},{value:"7.3.4.1 Perform focused implementation",id:"7341-perform-focused-implementation",level:4},{value:"7.3.5 OneFlow",id:"735-oneflow",level:3},{value:"7.3.6 PREDA",id:"736-preda",level:3},{value:"7.3.7 Web Assembly",id:"737-web-assembly",level:3},{value:"7.4 Others",id:"74-others",level:2},{value:"7.4.1 \u795e\u7ecf\u7f51\u7edc",id:"741-\u795e\u7ecf\u7f51\u7edc",level:3},{value:"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",level:3},{value:"7.4.2.1 pip",id:"7421-pip",level:4},{value:"7.4.2.2 Rust",id:"7422-rust",level:4},{value:"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01",id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01",level:3},{value:"7.4.4 Rust",id:"744-rust",level:3},{value:"7.4.5 Unity EditorXR and SceneFusion",id:"745-unity-editorxr-and-scenefusion",level:3},{value:"7.4.6 BEVYengine",id:"746-bevyengine",level:3},{value:"7.4.8 magicavoxel",id:"748-magicavoxel",level:3},{value:"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",level:3},{value:"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b",id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b",level:3},{value:"7.4.11 Meta Builder bot",id:"7411-meta-builder-bot",level:3},{value:"7.4.12 Houdini: Node-based Workflow",id:"7412-houdini-node-based-workflow",level:3},{value:"7.4.13 realityOS",id:"7413-realityos",level:3},{value:"7.4.14 OpenXR",id:"7414-openxr",level:3},{value:"7.4.15 ECS + AI",id:"7415-ecs--ai",level:3},{value:"7.4.16 Unreal blueprint",id:"7416-unreal-blueprint",level:3},{value:"7.4.17 Pixar",id:"7417-pixar",level:3},{value:"7.4.18 Gaia procedural-worlds.com",id:"7418-gaia-procedural-worldscom",level:3},{value:"7.4.19 Google Maps API",id:"7419-google-maps-api",level:3},{value:"7.4.20 Procedural content generation",id:"7420-procedural-content-generation",level:3},{value:"7.4.21 casualcreator",id:"7421-casualcreator",level:3},{value:"7.4.22 \u5fae\u670d\u52a1\u5316",id:"7422-\u5fae\u670d\u52a1\u5316",level:3},{value:"7.4.23 Google Tilt Brush",id:"7423-google-tilt-brush",level:3},{value:"7.4.24 GitHub",id:"7424-github",level:3},{value:"7.4.25 Stechfab",id:"7425-stechfab",level:3},{value:"7.4.26 Game pigeon: games for iMessage",id:"7426-game-pigeon-games-for-imessage",level:3},{value:"7.5 \u5e94\u7528",id:"75-\u5e94\u7528",level:2},{value:"7.5.1 \u5821\u5792\u4e4b\u591c",id:"751--\u5821\u5792\u4e4b\u591c",level:3},{value:"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",level:4},{value:"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1",id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1",level:4},{value:"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4",id:"7513-\u79c1\u5bc6\u793e\u4ea4",level:4},{value:"7.5.1.4 Verse Language",id:"7514-verse-language",level:4},{value:"7.5.2 ROBLOX",id:"752-roblox",level:3},{value:"7.5.3 NIANTIC",id:"753-niantic",level:3},{value:"7.5.4 SNAPCHAT",id:"754-snapchat",level:3},{value:"7.5.5 Meta",id:"755-meta",level:3},{value:"7.5.6 Omniverse",id:"756-omniverse",level:3},{value:"7.5.7 Minecraft",id:"757-minecraft",level:3},{value:"7.5.8 Wilder World",id:"758-wilder-world",level:3},{value:"7.6 \u533a\u5757\u94fe",id:"76-\u533a\u5757\u94fe",level:2},{value:"7.6.1 \u95ee\u9898",id:"761-\u95ee\u9898",level:3},{value:"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f",id:"7611-\u6210\u672c\u95ee\u9898",level:4},{value:"7.6.1.2 \u793e\u533a\u6cbb\u7406",id:"7612-\u793e\u533a\u6cbb\u7406",level:4},{value:"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7",id:"7614-\u7cfb\u7edf\u5347\u7ea7",level:4},{value:"7.6.2 \u6982\u5ff5",id:"762-\u6982\u5ff5",level:3},{value:"7.6.2.1 \u667a\u80fd\u5408\u7ea6",id:"7621-\u667a\u80fd\u5408\u7ea6",level:4},{value:"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01",id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01",level:4},{value:"7.6.2.3 ICO",id:"7623-ico",level:4},{value:"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09",id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7",level:4},{value:"7.7 Machinations",id:"77-machinations",level:2},{value:"7.8 Render Graph",id:"78-render-graph",level:2},{value:"7.8.1 WorldRenderer challenges",id:"781-worldrenderer-challenges",level:3},{value:"7.8.2 Modular WorldRenderer goals",id:"782-modular-worldrenderer-goals",level:3},{value:"7.9 MLIR",id:"79-mlir",level:2},{value:"7.9.1 \u4ecb\u7ecd",id:"791-\u4ecb\u7ecd",level:3},{value:"7.9.2 \u8bbe\u8ba1\u539f\u5219",id:"792-\u8bbe\u8ba1\u539f\u5219",level:3},{value:"7.9.3 MLIR structure",id:"793-mlir-structure",level:3},{value:"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR",id:"794-llvm-irspir-vmlir",level:3},{value:"7.9.4.1 LLVM IR",id:"7941-llvm-ir",level:4},{value:"7.9.4.2 SPIR-V",id:"7942-spir-v",level:4},{value:"7.9.4.3 MLIR",id:"7943-mlir",level:4},{value:"7.9.5 MLIR Dialect",id:"795-mlir-dialect",level:3},{value:"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6",id:"7951-\u57fa\u7840\u7ec4\u4ef6",level:4},{value:"7.9.5.2 Dialect\u4f53\u7cfb",id:"7952-dialect\u4f53\u7cfb",level:4},{value:"7.9.5.3 Operations",id:"7953-operations",level:4},{value:"7.9.6 Analysis and Transformation",id:"796-analysis-and-transformation",level:3},{value:"7.9.6.1 C++ style pattern-match and rewrite",id:"7961-c-style--pattern-match-and-rewrite",level:4},{value:"7.9.6.2 \u603b\u7ed3",id:"7962-\u603b\u7ed3",level:4},{value:"7.9.7 Generic Transformation with Interfaces",id:"797-generic-transformation-with-interfaces",level:3},{value:"7.9.8 Lowering",id:"798-lowering",level:3},{value:"7.9.8.1 Dialect Conversions",id:"7981-dialect-conversions",level:4},{value:"7.9.9 Lowering to LLVM",id:"799-lowering-to-llvm",level:3},{value:"7.9.10 MLIR Language",id:"7910-mlir-language",level:3},{value:"7.9.10.1 Dialects",id:"79101-dialects",level:4},{value:"7.9.11 Pattern Rewriting",id:"7911-pattern-rewriting",level:3},{value:"7.10 AI",id:"710-ai",level:2},{value:"7.10.1 Apple Shortcuts",id:"7101-apple-shortcuts",level:3},{value:"7.11 Slack",id:"711-slack",level:2},{value:"8.1 Script languages",id:"81-script-languages",level:2},{value:"8.1.1 SkookumScript",id:"811-skookumscript",level:3},{value:"8.1.1.1 Time-flow logic",id:"8111-time-flow-logic",level:4},{value:"7.1.1.2 Conditional flow control",id:"7112-conditional-flow-control",level:4},{value:"8.1.2 Lua",id:"812-lua",level:3},{value:"8.1.3 GameMonkey",id:"813-gamemonkey",level:3},{value:"8.1.4 Python",id:"814-python",level:3},{value:"8.1.5 JavaScript",id:"815-javascript",level:3},{value:"8.1.6 TypeScript",id:"816-typescript",level:3},{value:"8.1.7 SCUMM",id:"817-scumm",level:3},{value:"8.1.8 Mono-script",id:"818-mono-script",level:3},{value:"8.1.9 AngelScript",id:"819-angelscript",level:3},{value:"8.1.10 Scheme/Guile",id:"8110-schemeguile",level:3},{value:"8.1.11 ActionScript",id:"8111-actionscript",level:3},{value:"8.1.12 mruby",id:"8112-mruby",level:3},{value:"8.2 Erlang",id:"82-erlang",level:2},{value:"8.2.1 Beam VM",id:"821-beam-vm",level:3},{value:"8.4.2 Concurrency Oriented Languages",id:"842-concurrency-oriented-languages",level:3},{value:"8.4.2.1 Programming by observing the real world",id:"8421-programming-by-observing-the-real-world",level:4},{value:"8.4.2.2 Characteristics of a COPL",id:"8422-characteristics-of-a-copl",level:4},{value:"8.4.2.3 Process isolation*",id:"8423-process-isolation",level:4},{value:"8.4.2.4 Names of processes",id:"8424-names-of-processes",level:4},{value:"8.4.2.5 Message passing",id:"8425-message-passing",level:4},{value:"8.4.2.6 Protocols*",id:"8426-protocols",level:4},{value:"8.3 Move",id:"83-move",level:2},{value:"8.3.1 \u95ee\u9898",id:"831-\u95ee\u9898",level:3},{value:"8.3.2 Move Design Goals",id:"832-move-design-goals",level:3},{value:"8.3.3 Move Overview",id:"833-move-overview",level:3},{value:"8.3.3.1 Peer-to-Peer Payment Transaction Script",id:"8331-peer-to-peer-payment-transaction-script",level:4},{value:"8.3.3.2 Module",id:"8332-module",level:4},{value:"8.3.4 The Move Language",id:"834-the-move-language",level:3},{value:"8.4 Smalltalk",id:"84-smalltalk",level:2},{value:"8.4.1 Object Model",id:"841-object-model",level:3},{value:"8.4.2.1 Message",id:"8421-message",level:4},{value:"8.4.2.2 Message Sending Syntax",id:"8422-message-sending-syntax",level:4},{value:"8.4.2.3 Discussion of Smalltalk Syntax",id:"8423-discussion-of-smalltalk-syntax",level:4},{value:"8.4.2.4 The Distinction Between Types and Classes",id:"8424-the-distinction-between-types-and-classes",level:4},{value:"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61",id:"842-smalltalk\u9762\u5411\u5bf9\u8c61",level:3},{value:"8.5 Verse",id:"85-verse",level:2},{value:"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f",id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48",level:2},{value:"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f",id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48",level:2},{value:"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",level:2},{value:"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236",id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236",level:2},{value:"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf",id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf",level:2},{value:"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",level:2},{value:"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:3},{value:"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c",id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c",level:2},{value:"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",level:2},{value:"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:2},{value:"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",level:2},{value:"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",level:3},{value:"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",level:3}],p={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,n.kt)(u,(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\u6587\u6863\u8bf4\u660e"},"\u6587\u6863\u8bf4\u660e"),(0,n.kt)("p",null,"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u4f46\u6211\u4ecd\u7136\u628a\u8fd9\u4e9b\u5185\u5bb9\u653e\u5728\u8fd9\u91cc\uff0c\u662f\u56e0\u4e3a\u6211\u89c9\u5f97\u5b83\u5bf9\u4e8e\u60f3\u6df1\u5165\u5b66\u4e60Reality World\u80cc\u540e\u601d\u60f3\u7684\u670b\u53cb\u6709\u5b66\u4e60\u4ef7\u503c"),(0,n.kt)("p",null,"\u672c\u6587\u7684Markdown\u7edf\u8ba1\u5927\u6982\u670920\u4e07\u5b57\u3002"),(0,n.kt)("h1",{id:"1--introduction"},"1. Introduction"),(0,n.kt)("p",null,"\u6e38\u620f\uff0c\u4f5c\u4e3a\u4e00\u79cd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u5b9e\u65f6\u8fd0\u884c\u7684\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u5b83\u4e0d\u5149\u5728\u4ea7\u54c1\u5f62\u6001\u4e0a\u8ddf\u4e00\u822c\u7684\u5e94\u7528\u7a0b\u5e8f\u4f53\u9a8c\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4e00\u822c\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u662f\u529f\u80fd\u578b\u7684\uff0c\u5176\u529f\u80fd\u662f\u660e\u786e\u800c\u5177\u4f53\u7684\uff0c\u800c\u6e38\u620f\u5f80\u5f80\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u6ca1\u6709\u76f4\u89c2\u786e\u5b9a\u6027\u7684\u529f\u80fd\uff0c\u6bcf\u4e2a\u4eba\u83b7\u5f97\u7684\u4f53\u9a8c\u53ef\u80fd\u90fd\u4e0d\u4e00\u6837\uff0c\u5b83\u7684\u6574\u4e2a\u7a0b\u5e8f\u7ec4\u7ec7\u53ca\u5176\u5f00\u53d1\u5de5\u5177\u66f4\u662f\u4e0e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u662f\u6309\u987a\u5e8f\u6267\u884c\uff0c\u800c\u6e38\u620f\u4e3a\u4e86\u5b9e\u73b0\u5bf9\u771f\u5b9e\u5b9e\u65f6\u4e16\u754c\u7684\u6a21\u62df\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u4e0d\u95f4\u65ad\u7684\u5b9e\u65f6\u8f6e\u8be2\u7684\u673a\u5236\u3002\u8fd9\u79cd\u8f6e\u8be2\u4e0d\u5149\u9020\u5c31\u4e86\u6e38\u620f\u4e2d\u5404\u4e2a\u52a8\u6001\u7cfb\u7edf\u7684\u5b9e\u65f6\u6027\uff0c\u5b83\u5bf9\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u4ee5\u53ca\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\uff0c\u90fd\u63d0\u4f9b\u4e86\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u53ef\u80fd\u6027\u548c\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u673a\u5236\u4e3b\u8981\u88ab\u7528\u6765\u5236\u4f5c\u6e38\u620f\uff0c\u800c\u6e38\u620f\u8fd9\u79cd\u7a0b\u5e8f\u673a\u5236\u7684\u4e00\u4e9b\u96be\u70b9\uff0c\u901a\u5e38\u9700\u8981\u975e\u5e38\u4e13\u4e1a\u7684\u6e38\u620f\u516c\u53f8\u624d\u80fd\u505a\u51fa\u4e0d\u9519\u7684\u6e38\u620f\u4ea7\u54c1\u3002\u800c\u53cd\u89c2\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u7531\u4e8e\u5b83\u4eec\u7684\u673a\u5236\u66f4\u7b80\u5355\uff0c\u6613\u4e8e\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\uff0c\u4e0d\u4ec5\u5bf9\u4eba\u4eec\u7684\u751f\u6d3b\u5e26\u6765\u66f4\u5927\u7684\u5f71\u54cd\uff0c\u4e5f\u5927\u5927\u5730\u4fc3\u8fdb\u4e86\u793e\u4f1a\u8fdb\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd1\u5e74\u6765\uff0c\u968f\u7740\u865a\u62df\u73b0\u5b9e\u548c\u5143\u5b87\u5b99\u6982\u5ff5\u548c\u8d8b\u52bf\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7cfb\u7edf\u8d8a\u6765\u8d8a\u9891\u7e41\u88ab\u7528\u4e8e\u5230\u6e38\u620f\u4e4b\u5916\u66f4\u6cdb\u5316\u7684\u9886\u57df\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u624b\u673a\u7684AR\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Snapchat"),"\u7ed9\u7528\u6237\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u6ee4\u955c\u4f53\u9a8c\uff0c\u4e0d\u540c\u4e8e\u4f20\u7edf\u89c6\u9891\u548c\u56fe\u7247\uff0c\u8fd9\u4e9b\u6ee4\u955c\u662f\u4ea4\u4e92\u5f0f\u7684\uff0c\u7528\u6237\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u79cd\u4ea4\u4e92\u80fd\u529b\u751f\u6210\u8fd8\u5bcc\u6709\u8868\u8fbe\u80fd\u529b\u7684\u89c6\u9891\uff0c\u501f\u52a9\u8fd9\u79cd\u80fd\u529b\uff0cSnapchat\u8fc5\u901f\u79f0\u4e3a\u4e00\u6b3e\u6d41\u884c\u7684\u793e\u4ea4\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u6837\u662f\u57fa\u4e8e\u624b\u673aAR\u7684\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Niantic"),"\u501f\u52a9\u624b\u673a\u540e\u7f6e\u6444\u50cf\u5934\u7684\u89c6\u89c9\u5b9a\u4f4d\u80fd\u529b\uff08VPS\uff09\uff0c\u5f00\u53d1\u4e86\u8bf8\u5982Pokemon Go\u7b49\u5e94\u7528\uff0c\u8fd9\u79cd\u65b0\u7684\u57fa\u4e8e\u771f\u5b9e\u5730\u7406\u4f4d\u7f6e\u7684\u5e94\u7528\u8ddf\u4eba\u4eec\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\u7684\u6d3b\u52a8\u8054\u7cfb\u8d77\u6765\uff0c\u5e76\u501f\u52a93D\u4e92\u52a8\u7684\u80fd\u529b\uff0c\u628a\u4eba\u4eec\u7684\u751f\u6d3b\u8054\u7cfb\u5f97\u66f4\u7d27\u5bc6\uff0c\u662f\u4e00\u6b3e\u5178\u578b\u7528\u4e8e\u589e\u5f3a\u793e\u4ea4\u5173\u7cfb\u7684\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5",(0,n.kt)("strong",{parentName:"li"},"Roblox"),"\u4e3a\u9996\u7684\u521b\u4f5c\u7c7b\u5de5\u5177\uff0c\u901a\u8fc7\u7b80\u5316\u7a0b\u5e8f\u5206\u53d1\u548c\u90e8\u7f72\u3001\u63d0\u4f9b\u7edf\u4e00\u7684\u591a\u4eba\u5728\u7ebf\u7b49\u670d\u52a1\uff0c\u964d\u4f4e\u4e86\u6e38\u620f\u5f00\u53d1\u7684\u95e8\u69db\uff0c\u4f7f\u5f97\u66f4\u591a\u7684\u4e2d\u5c0f\u4e2a\u4eba\u521b\u4f5c\u4e92\u52a8\u5185\u5bb9\u66f4\u52a0\u7b80\u5355\u3002\u5e76\u901a\u8fc7\u4e91\u539f\u751f\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u4f7f\u793e\u4ea4\u6e38\u620f\u7684\u6548\u679c\u88ab\u653e\u5927\uff0c\u6210\u4e3a\u672a\u6765\u7684\u91cd\u8981\u8d8b\u52bf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u7c7bMinecraft\u6c99\u76d2\u673a\u5236\u5ef6\u4f38\u7684\u5927\u9003\u6740\u6c99\u76d2\u6e38\u620f",(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b"),"\uff0c\u501f\u52a9\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\uff0c\u4f8b\u5982\u5305\u62ec\u5bf9\u591a\u4eba\u5b9e\u65f6\u6e38\u620f\u66f4\u53cb\u597d\u7684\u5728\u7ebf\u8bed\u97f3\u670d\u52a1\u7b49\uff0c\u4f7f\u5f97\u793e\u4ea4\u5c5e\u6027\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u88ab\u8fdb\u4e00\u6b65\u52a0\u5f3a\u3002\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u4ee5\u53ca\u5821\u5792\u4e4b\u591c\u672c\u8eab\u9003\u751f\u7c7b\u6e38\u620f\u66f4\u597d\u5730\u534f\u540c\u673a\u5236\uff0c\u4f7f\u5f97\u5821\u5792\u4e4b\u591c\u7684\u793e\u4ea4\u5c5e\u6027\u79f0\u4e3a\u4f53\u9a8c\u6700\u597d\u7684\u793e\u4ea4\u5c5e\u6027\uff0c\u5176\u5f00\u521b\u548c\u4e3e\u529e\u7684\u865a\u62df\u6d3e\u5bf9Marshmello\u66f4\u662f\u6380\u8d77\u4e86\u865a\u62df\u6f14\u5531\u4f1a\u7684\u70ed\u6f6e\u3002")),(0,n.kt)("p",null,"\u6240\u6709\u8fd9\u4e9b\u53d8\u5316\u548c\u53d1\u5c55\uff0c\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53ca\u751f\u6001\u90fd\u5e26\u6765\u4e86\u5de8\u5927\u7684\u5f71\u54cd\u548c\u53d8\u5316\uff0c\u8fd9\u4e9b\u5f71\u54cd\u548c\u53d8\u5316\u540e\u9762\uff0c\u9700\u8981\u5168\u65b0\u7684\u6280\u672f\u8303\u5f0f\uff0c\u800c\u8fd9\u4e9b\u65b0\u7684\u6280\u672f\u8303\u5f0f\u53c8\u5c06\u521b\u9020\u589e\u91cf\u7684\u4ef7\u503c\u548c\u4f53\u9a8c\u3002"),(0,n.kt)("h2",{id:"11-\u53d8\u9769"},"1.1 \u53d8\u9769"),(0,n.kt)("h3",{id:"111-\u5f62\u6001\u53d8\u5316"},"1.1.1 \u5f62\u6001\u53d8\u5316"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e9b\u53d8\u5316\uff0c\u4ece\u4e0a\u5f80\u4e0b\u770b\uff0c\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e09\u4e2a\u7ef4\u5ea6\u7684\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005"),"\uff1a\u7531\u4e13\u4e1a\u5f00\u53d1\u8005\u5411\u666e\u901a\u7528\u6237\u8f6c\u79fb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u65b9\u5f0f"),"\uff1a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u65b9\u5f0f\u7531\u5b8c\u5168\u5f00\u53d1\u5230\u57fa\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u73a9\u5bb6\u4f53\u9a8c"),"\uff0c\u7531\u5b8c\u5168\u64cd\u63a7\u5230XR\u8f85\u52a9")),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u5de5\u5177\u65b9\u9762\uff0cRoblox\u548cSnapchat\u7684Lens Studio\u90fd\u9762\u5411\u666e\u901a\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u5171\u540c\u7684\u7279\u70b9\u5305\u62ec\u7b80\u5316\u7684\u811a\u672c\uff0c\u4ee5\u53ca\u4e00\u952e\u53d1\u5e03\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005 \u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u53bb\u5904\u7406\u5e73\u53f0\u76f8\u5173\u95ee\u9898\u3002\u53e6\u4e00\u65b9\u9762\u662f\u8fd9\u7c7b\u5de5\u5177\u90fd\u662f\u6df1\u5165\u96c6\u6210\u5e73\u53f0\u7684\u7279\u5b9a\u529f\u80fd\uff0c\u4f8b\u5982Lens Studio\u5e95\u5c42\u7684AR\u573a\u666f\u7406\u89e3\u7b97\u6cd5\uff0c\u4ee5\u53caRoblox\u5185\u7f6e\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u3002",(0,n.kt)("strong",{parentName:"p"},"\u6df1\u5ea6\u96c6\u6210\u5e73\u53f0\u4e0e\u7b97\u6cd5\uff0c\u76f8\u6bd4\u4e8e\u4f20\u7edf\u901a\u7528\u6e38\u620f\u5f15\u64ce\uff0c\u5c06\u6210\u4e3a\u672a\u6765\u7684\u4e00\u4e2a\u65b9\u5411\u548c\u4f18\u52bf"),"\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"roblox",src:l(3616).Z,width:"1002",height:"288"})),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u65b9\u5f0f\u65b9\u9762\uff0c\u4f20\u7edf\u7684\u6d41\u7a0b\u9700\u8981\u5f00\u53d1\u8005\u5b9a\u4e49\u6240\u6709\u7684\u903b\u8f91\uff0c\u5305\u62ec\u89e6\u53d1\u903b\u8f91\u7684\u673a\u5236\uff0c\u8fd9\u90e8\u5206\u5c24\u5176\u590d\u6742\u3002\u5728Snapchat\u57fa\u4e8eAR\u7684\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u4e2d\uff0c\u8fd9\u7c7b\u4e92\u52a8\u5185\u5bb9\u7684\u9a71\u52a8\u5b8c\u5168\u6765\u6e90\u4e8e\u624b\u673a\u5bf9\u573a\u666f\u7406\u89e3\uff0c\u8fd9\u4e9b\u90fd\u7531AR\u7b97\u6cd5\u6765\u63d0\u4f9b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5904\u7406\u4efb\u4f55\u4ea4\u4e92\u9a71\u52a8\u65b9\u9762\u7684\u903b\u8f91\uff0c\u800c\u53ea\u9700\u8981\u5173\u7cfb\u5bf9\u4ea4\u4e92\u7684\u54cd\u5e94\u903b\u8f91\u3002\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u4ec5\u5927\u5927\u7b80\u5316\u4e86\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\uff0c\u4e5f\u4ece\u6839\u672c\u4e0a\u5bf9\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u7684\u6d41\u7a0b\u5e26\u6765\u4e86\u5f88\u5927\u7684\u53d8\u9769\u3002",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u903b\u8f91\u5f00\u53d1\u7684\u89e6\u53d1\u673a\u5236\uff0c\u89e6\u53d1\u673a\u5236\u6570\u636e\u5316\uff0c\u6df1\u5ea6\u4e0e\u5e73\u53f0\u96c6\u6210\uff0c\u662f\u672a\u6765\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u8d70\u5411\u5e73\u6c11\u5316\u7684\u91cd\u8981\u65b9\u5f0f \u4e4b\u4e00"),"\u3002\u5f53\u7136\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u57fa\u4e8e\u4ee3\u7406\u7684\u7269\u4f53\u4f4d\u7f6e\u6446\u653e\u673a\u5236\u4e5f\u8d77\u5230\u4e86\u5f88\u5927\u7684\u8f85\u52a9\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u540c\u6837\u501f\u52a9\u4e0e\u4e8b\u4ef6\u89e6\u53d1\u673a\u5236\u7684\u6570\u636e\u5316\uff0c\u4ee5\u53ca\u57fa\u4e8eXR\u8bbe\u5907\u5bf9\u573a\u666f\u7684\u7406\u89e3\uff0c\u7528\u6237\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u90e8\u5206\u64cd\u4f5c\uff0c\u7531\u539f\u6765\u4e3b\u52a8\u3001\u7cbe\u7ec6\u5730\u63a7\u5236\u865a\u62df\u6444\u50cf\u673a\u548c\u7269\u4f53\uff0c\u53d8\u4e3a\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7b97\u6cd5\u7684\u81ea\u52a8\u9a71\u52a8\uff0c\u8fd9\u5927\u5927\u7b80\u5316\u4e86\u4ea4\u4e92\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5404\u4e2a\u5c42\u9762\u7684\u53d8\u5316\uff0c\u6700\u7ec8\u90fd\u4f1a\u5bfc\u81f4\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5236\u4f5c\u6d41\u7a0b\u4f1a\u53d1\u751f\u8f83\u5927\u7684\u53d8\u5316\u3002"),(0,n.kt)("h3",{id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"},"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"),(0,n.kt)("p",null,"\u4ece\u5f00\u53d1\u7684\u89d2\u5ea6\uff0c\u4ece\u4e0b\u5f80\u4e0a\u770b\uff0c\u8fd9\u5e26\u6765\u7684\u662f\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"change",src:l(3822).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\u7684\uff0c\u4ece\u786c\u4ef6\u5230\u8f6f\u4ef6\uff0c\u6240\u6709\u4e00\u5207\u6d41\u7a0b\u548c\u529f\u80fd\u90fd\u662f\u9488\u5bf9\u8fd9\u4e2a\u6a21\u578b\u8bbe\u8ba1\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u7801\u90fd\u4f1a\u88ab\u7f16\u8bd1\u548c\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u53ef\u80fd\u76f8\u4e92\u5f15\u7528\uff0c\u6240\u6709\u9700\u8981\u94fe\u63a5\u5668\u6765\u91cd\u65b0\u5b9a\u4f4d\u6bcf\u4e2a\u5f15\u7528\u53d8\u91cf\u7684\u5730\u5740\u3002\u8fd9\u6837\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u975e\u5e38\u9002\u5408\u4e8e\u5904\u7406\u5177\u6709\u72ec\u7acb\u529f\u80fd\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u4f46\u5b83\u6709\u6bd4\u8f83\u81f4\u547d\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u56e0\u4e3a\u6240\u6709\u6e90\u4ee3\u7801\u7f16\u8bd1\u7684\u76ee\u6807\u4ee3\u7801\u90fd\u4f1a\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u6240\u4ee5\u5b83\u4eec\u4ece\u6839\u672c\u4e0a\u5c31\u4e0d\u652f\u6301\u5927\u89c4\u6a21\u5e94\u7528\u7a0b\u5e8f\uff0c\u56e0\u4e3a\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u53ef\u80fd\u7531\u6d77\u91cf\u7684\u6e90\u4ee3\u7801\u7ec4\u6210\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\uff0c\u56e0\u6b64\u5b83\u4eec\u5f88\u96be\u652f\u6301\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u72ec\u7acb\u5b50\u7a0b\u5e8f\u901a\u4fe1\uff0c\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u603b\u662f\u9700\u8981\u5f15\u7528\u6e90\u4ee3\u7801\u624d\u53ef\u4ee5\u901a\u4fe1\uff0c\u8fd9\u4f7f\u5f97\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u65e0\u6cd5\u6210\u4e3a\u4e00\u4e2a\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\u5f00\u653e\u7cfb\u7edf\uff0c\u800c\u603b\u662f\u9700\u8981\u4e00\u4e2a\u5f00\u53d1\u5546\u6765\u8fdb\u884c\u7ef4\u62a4")),(0,n.kt)("p",null,"\u968f\u7740UGC\u548c\u5143\u5b87\u5b99\u65f6\u4ee3\u7684\u5230\u6765\uff0c\u8fd9\u79cd\u5927\u89c4\u6a21\u7684\u3001\u5177\u6709\u5185\u751f\u5f00\u653e\u5b50\u7cfb\u7edf\u7684\u591a\u5e94\u7528\u4ea4\u4e92\u67b6\u6784\u8d8a\u6765\u8d8a\u6210\u4e3a\u6700\u6838\u5fc3\u7684\u9700\u6c42\uff0c\u8fd9\u9700\u8981\u6211\u4eec\u5728\u8ba1\u7b97\u67b6\u6784\u4e0a\u505a\u51fa\u8f83\u5927\u7684\u53d8\u9769\u3002"),(0,n.kt)("h4",{id:"1121-\u4e1a\u52a1\u6bd4\u55bb"},"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u817e\u8baf\u6709\u975e\u5e38\u6d77\u91cf\u7684\u4e1a\u52a1\uff0c\u6bd4\u5982\u5fae\u4fe1\uff0c\u97f3\u4e50\uff0c\u89c6\u9891\u7b49\uff0c\u76ee\u524d\u8fd9\u4e9b\u4e1a\u52a1\u4e4b\u95f4\u76f8\u4e92\u662f\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u4ed6\u4eec\u7ec4\u7ec7\u4e3a\u76f8\u4e92\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u76f8\u4e92\u6bd4\u8f83\u72ec\u7acb\u7684\u6570\u636e\u7ba1\u7406\uff0c\u670d\u52a1\u5668\u67b6\u6784\u548c\u7ec4\u7ec7\uff0c\u867d\u7136\u5f7c\u6b64\u4e4b\u95f4\u5b58\u5728\u4e00\u5b9a\u5173\u8054\uff0c\u4f46\u662f\u8fd9\u79cd\u5173\u8054\u662f\u9ad8\u5ea6\u7ed3\u6784\u5316\u548c\u89c4\u5219\u5316\u7684\uff0c\u4e14\u5173\u8054\u5f88\u5c11\u3002"),(0,n.kt)("p",null,"\u5f00\u653e\u4e16\u754c\u5219\u610f\u5473\u7740\uff0c\u73b0\u5728\u6240\u6709\u8fd9\u4e9b\u4e1a\u52a1\u9700\u8981\u5728\u4e00\u4e2a\u5e94\u7528\u5185\u7ec4\u7ec7\uff0c\u5b83\u7684\u590d\u6742\u5ea6\u662f\u975e\u5e38\u9ad8\u7684\uff0c\u67b6\u6784\u4e5f\u975e\u5e38\u590d\u6742\uff0c\u6570\u636e\u7ba1\u7406\u548c\u5206\u5e03\u5f0f\u8ba1\u7b97\u90fd\u975e\u5e38\u590d\u6742\uff0c\u5e76\u4e14\u7531\u4e8e\u4f20\u7edf\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u5728\u8fd9\u79cd\u4f53\u91cf\u4e0b\u6839\u672c\u65e0\u6cd5\u6709\u6548\u7ba1\u7406\u7ec4\u7ec7\u548c\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97"),(0,n.kt)("p",null,"\u53ef\u884c\u7684\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5fae\u670d\u52a1\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u5f0f\u7f16\u7a0b")),(0,n.kt)("p",null,"\u5fae\u670d\u52a1\u5316\u662f\u4e00\u79cd\u8f6f\u4ef6\u67b6\u6784\uff0c\u9700\u8981\u9ad8\u5ea6\u4f9d\u8d56\u4e8e\u5bf9\u903b\u8f91\u7684\u8bbe\u8ba1\u548c\u5212\u5206\uff0c\u4ed6\u4e0d\u662f\u4e00\u79cd\u57fa\u7840\u7f16\u7a0b\u6a21\u578b\uff0c\u56e0\u6b64\u65e0\u6cd5\u652f\u6491\u5f00\u653e\u5f0f\u7684\u8bbe\u8ba1\uff0c\u8fd9\u4e9b\u5fae\u670d\u52a1\u901a\u5e38\u90fd\u53ea\u80fd\u662f\u5f00\u53d1\u5546\u8bbe\u8ba1\u597d\u7684\uff0c\u666e\u901a\u7528\u6237\u6ca1\u6cd5\u4fee\u6539\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\u4e0d\u652f\u6301\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("h3",{id:"113-\u6280\u672f\u6311\u6218"},"1.1.3 \u6280\u672f\u6311\u6218"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\uff0c\u4e0a\u8ff0\u7684\u4e00\u4e9b\u53d8\u9769\u5e26\u6765\u7684\u6280\u672f\u6311\u6218\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5168\u65b0\u652f\u6301\u591a\u5e94\u7528\u76f8\u4e92\u901a\u4fe1\u7684\u8ba1\u7b97\u67b6\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u80fd\u591f\u5728\u6240\u6709\u8ba1\u7b97\u8f7b\u677e\u5728\u591a\u4e2a\u670d\u52a1\u5668\u4e4b\u95f4\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97\u7684\u6570\u636e\u548c\u8ba1\u7b97\u67b6\u6784")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u8fd9\u4e24\u4e2a\u5e95\u5c42\u6839\u672c\u6027\u7684\u6311\u6218\uff0c\u4e0a\u5c42\u8fd8\u5305\u62ec\u4e00\u4e9b\u5176\u4ed6\u6311\u6218\uff0c\u6bd4\u5982\u72ec\u7acb\u7a0b\u5e8f\u4e4b\u95f4\u9ad8\u6548\u7684\u901a\u4fe1\u6807\u51c6\u6216\u8005\u673a\u5236\uff0c\u7528\u6237\u5bf9\u6743\u9650\u63a7\u5236\u4e0e\u4ee3\u7801\u7684\u5206\u79bb\uff0c\u666e\u901a\u7528\u6237\u600e\u6837\u65e0\u4ee3\u7801\u7f16\u7a0b\u7b49\u7b49\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u8fdb\u4e00\u6b65\u5206\u6790\u3002"),(0,n.kt)("h2",{id:"12-\u73b0\u72b6"},"1.2 \u73b0\u72b6"),(0,n.kt)("p",null,"\u4e0d\u80fd\u968f\u65f6\u968f\u5730\u9ad8\u6548\u7684\u5185\u5bb9\u521b\u5efa\uff0c\u4e0e\u968f\u65f6\u968f\u5730\u65b9\u4fbf\u7684\u5c06\u521b\u5efa\u7684\u5185\u5bb9\u8fdb\u884c\u793e\u4ea4\u5206\u4eab\uff0c\u662f\u5f53\u524d\u6700\u5927\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u662f3D\u6570\u5b57\u4e16\u754c\u53d1\u5c55\u7684\u4e00\u4e9b\u91cd\u8981\u57fa\u7840\uff1b\u524d\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u7f16\u7a0b\uff08\u901a\u5e38\u9700\u8981\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u80fd\u529b\uff09\uff0c\u6240\u6709\u903b\u8f91\u90fd\u662f\u901a\u8fc7\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u5f0f\u521b\u5efa\u51fa\u6765\u7684\uff08\u5927\u90e8\u5206\u4eba\u90fd\u4e0d\u5177\u5907\uff09\uff1b\u800c\u540e\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u4e00\u5957\u65b0\u7684\u652f\u6301\u5206\u5e03\u5f0f\u534f\u540c\u7f16\u8f91\u548c\u5206\u53d1\u7684\u5e95\u5c42\u6570\u636e\u683c\u5f0f\u8868\u8ff0\uff0c\u8fd9\u4e0e\u5f53\u524d\u5927\u90e8\u5206\u5f15\u64ce\u79c1\u6709\u683c\u5f0f\u90fd\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,"1\u3001\u4e3b\u8981\u57fa\u4e8e\u573a\u666f\u7406\u89e3"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206AR\u5e94\u7528\u90fd\u662f\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7684\u7b80\u5355\u7279\u6548/\u6ee4\u955c\u5448\u73b0\uff0c\u4ee5\u53ca\u56f4\u7ed5\u8fd9\u4e9b\u6ee4\u955c\u975e\u5e38\u7b80\u5355\u7684\u4ea4\u4e92\uff0c\u6ca1\u6709\u56f4\u7ed5\u573a\u666f\u6784\u5efa\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u5373\u5821\u5792\u4e4b\u591c\u7684\u65b9\u5f0f\uff0c\u5305\u62ec\u66f4\u590d\u6742\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"2\u30013D\u5185\u5bb9\u5206\u53d1"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206\u4e0d\u80fd\u5206\u53d13D\u5185\u5bb9\u672c\u8eab\uff0c\u800c\u662f\u5206\u4eab\u5f55\u5236\u7684\u89c6\u9891\uff1b\u6216\u8005\u53ea\u662f\u5206\u4eab\u76f8\u540c\u7684\u6ee4\u955c\u7ed9\u670b\u53cb\uff0c\u4f7f\u7528\u4f53\u9a8c\u6ca1\u6709\u5dee\u5f02\u6027"),(0,n.kt)("p",null,"3\u3001\u7528\u6237\u521b\u5efa\u53c2\u4e0e\u611f\u5f88\u5f31"),(0,n.kt)("p",null,"\u7edd\u5927\u90e8\u5206\u90fd\u662f\u573a\u666f\u7406\u89e3\u9a71\u52a8\uff0c\u4ec5\u6709\u7eaf\u89c6\u89c9\u7684\u4f53\u9a8c\uff0c\u6ca1\u67093D\u771f\u6b63\u590d\u6742\u7684\u4ea4\u4e92\u548c\u521b\u5efa\u4f53\u9a8c"),(0,n.kt)("p",null,"4\u3001\u5927\u90e8\u5206\u805a\u7126\u865a\u62df\u7a7a\u95f4"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u5373\u793e\u4ea4\u65b9\u5411\u884c\u4e1a\u5927\u90e8\u5206\u5728\u505a\u865a\u62df\u7a7a\u95f4\uff1a\u5143\u8c61\u3001RecRoom\u3001monoAI\u7b49"),(0,n.kt)("p",null,"5\u30013D\u521b\u5efa\u7684\u4ef7\u503c/Minecraft "),(0,n.kt)("p",null,"\u9664\u4e86\u7cbe\u5fc3\u7684\u6e38\u620f\u89c4\u5219\u8bbe\u8ba1\uff08\u8fd9\u9700\u8981\u5f88\u9ad8\u7684\u5f00\u53d1\u6280\u5de7\u548c\u80fd\u529b\uff09\uff0c3D\u5185\u5bb9\u7684\u521b\u5efa\u672c\u8eab\u4e5f\u662f\u5f88\u6709\u4e50\u8da3\u7684\uff0c\u800c\u80fd\u591f\u521b\u5efa\u81ea\u5df1\u8bbe\u8ba1\u7684\u4e00\u5b9a\u89c4\u5219\u7684\u5185\u5bb9\u5c31\u66f4\u6709\u8da3"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u6ca1\u6709\u96c6\u4e2d\u4e8e\u9762\u5411\u666e\u901a\u7528\u6237\u521b\u5efa3D\u5185\u5bb9\u7684\u80fd\u529b\u6216\u4f53\u9a8c\uff0cRoblox \u9762\u5411\u6709\u4e00\u5b9a\u7ecf\u9a8c\u7684\u5f00\u53d1\u8005\uff0c\u5e76\u4e14\u5f00\u53d1\u6a21\u5f0f\u672c\u8d28\u4e0a\u4e0e\u4f20\u7edf\u6e38\u620f\u5f00\u53d1\u7c7b\u4f3c\uff0c\u53ea\u662f\u5206\u53d1\u673a\u5236\u4e0d\u4e00\u6837\uff0cNV\u548c\u592a\u6781\u9762\u5411\u7528\u6237\u521b\u4f5c\uff0c\u4f46\u662f\u6ca1\u6709\u9762\u5411\u79fb\u52a8\u7aef\uff0c\u800c\u4e14\u662f\u7eaf\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"6\u3001\u5e95\u5c42\u521b\u65b0"),(0,n.kt)("p",null,"\u5f53\u524d\u666e\u904d\u805a\u7126\u4e0a\u5c42\u67b6\u6784\uff0c\u56f4\u7ed5\u600e\u6837\u5c06\u4f20\u7edf\u6e38\u620f\u7684\u6d41\u7a0b\u548c\u4f53\u9a8c\u5f80\u5143\u5b87\u5b99\u4e0a\u9760\uff0c\u5176\u7ed3\u679c\u5927\u591a\u6570\u865a\u62df\u7a7a\u95f4\u7c7b\u4ea7\u54c1\uff0c\u805a\u7126\u5e95\u5c42\u534f\u4f5c\u7684\u4e3b\u8981\u662fOmniverse\u548c\u592a\u6781\uff0c\u5176\u4e2d\u6df1\u5165\u5e95\u5c42\u6027\u80fd\u7684\u53ea\u6709\u592a\u6781\uff0c\u4f46\u5728\u4e2d\u95f4\u5c42\u4e0a\u4e0b\u534f\u540c\u65b9\u9762\u7f3a\u4e4f\u91cd\u70b9\u521b\u65b0\uff0c\u5176\u4e2d\u592a\u6781\u548c\u5143\u8c61\u90fd\u5728\u4e3b\u6253\u4e91\u6e32\u67d3\uff0c\u592a\u6781\u8fd8\u5f3a\u8c03\u5728\u7ebf\u534f\u540c\u7f16\u8f91\uff0cOmniverse\u5219\u652f\u6301\u4e00\u822c\u7684\u534f\u540c\u7f16\u8f91"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u7a7a\u95f4\u4e5f\u4e3b\u8981\u662f\u7eaf\u89c6\u89c9\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u53ea\u662f\u5728\u91cc\u9762\u884c\u8d70\uff0c\u4e0d\u80fd\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u66f4\u4e0d\u80fd\u521b\u4f5c\uff0c\u6216\u8005\u6709\u7684\u4e5f\u662f\u56fa\u5b9a\u89c4\u5219\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982Roblox \u91cc\u9762\u7684\u4e00\u4e9b\u6a21\u62df\u7ecf\u9a8c\u7684\u6e38\u620f"),(0,n.kt)("p",null,"8\u3001\u6e38\u620f\u66f4\u65b0\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u4e00\u822c\u9700\u8981\u91cd\u65b0\u53d1\u5e03\u7684\u6d41\u7a0b\uff0cUbisoft Scalar\u8bd5\u56fe\u901a\u8fc7\u4e91\u7aef\u5fae\u670d\u52a1\u67b6\u6784\u5b9e\u73b0\u53ca\u65f6\u66f4\u65b0\uff0c\u53e6\u5916\u4e91\u539f\u751f\u57fa\u672c\u4e0a\u5929\u751f\u5c31\u662f\u53ca\u65f6\u66f4\u65b0\u7684\uff0c\u56e0\u4e3a\u5b83\u7684\u8d44\u6e90\u90fd\u5728\u4e91\u7aef"),(0,n.kt)("h2",{id:"13-\u6280\u672f\u4f18\u52bf"},"1.3 \u6280\u672f\u4f18\u52bf"),(0,n.kt)("h3",{id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"},"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"\u73b0\u5728\u5927\u90e8\u5206\u5e94\u7528\u90fd\u662f\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7279\u5b9a\u573a\u666f\uff0c\u63d0\u4f9b\u5b98\u65b9\u7279\u5b9a\u7684\u5e94\u7528\u3001\u89c4\u5219\u6216\u73a9\u6cd5\uff0c\u8ddf\u6e38\u620f\u7684\u601d\u8def\u7c7b\u4f3c\uff0c\u66f4\u5f3a\u8c03\u7528\u6237\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u9664\u4e86\u6e38\u620f\u5f15\u64ce\uff0c\u80fd\u8ba9\u7528\u6237\u521b\u4f5c\u7684\u53ea\u6709Roblox \u53ea\u7c7b\u578b\u7684"),(0,n.kt)("p",null,"\u80fd\u591f\u9762\u5411\u666e\u901a\u7528\u6237\uff0c\u4e14\u9488\u5bf9\u4ea4\u4e92\u5185\u5bb9\u8fdb\u884c\u521b\u4f5c\u7684\uff0c\u53ea\u6709\u4e00\u5bb6\uff0c\u5b83\u662f\u672a\u6765\u6700\u57fa\u7840\u7684\u6a21\u5f0f\u548c\u80fd\u529b\uff0c\u5f53\u524d\u6ca1\u6709\u4e00\u5bb6\u5728\u8fd9\u4e2a\u5c42\u9762\uff0c\u72ec\u6b64\u4e00\u5bb6"),(0,n.kt)("p",null,"\u7528\u6237\u53ef\u4ee5\u57fa\u4e8eRealityWorld \u521b\u4f5c\u6e38\u620f\uff0c\u6216\u8005\u7b80\u5355\u7684\u4f5c\u54c1\uff0c\u8ddfRoblox \u4e00\u6837\uff0c\u4f46\u662f\u5b83\u901a\u8fc7\u4e24\u4e2a\u95e8\u69db\u4ee5\u53ca\u4e30\u5bcc\u521b\u4f5c\u7684\u7c7b\u522b\uff0c\u8ba9\u66f4\u591a\u666e\u901a\u7528\u6237\u53ef\u4ee5\u53c2\u4e0e\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u7528\u6237\u7fa4\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u5728\u8fd9\u4e2a\u5e73\u53f0\u4e0a\u5f00\u53d1\u6e38\u620f\u6709\u53ef\u80fd\u5177\u6709\u66f4\u5927\u7684\u7528\u6237\u7fa4"),(0,n.kt)("h3",{id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236"},"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"CreationXR runtime\uff0c"),"\u53ef\u4ee5\u88ab\u4efb\u610f\u7b2c\u4e09\u65b9app\u96c6\u6210"),(0,n.kt)("p",null,"\u4ed6\u98a0\u8986\u4e86\u4f20\u7edf\u5f00\u53d1\u8005\u751f\u6001\u7684\u65b9\u5f0f\uff0c\u4f20\u7edf\u7684\u5c0f\u7a0b\u5e8f\u6216\u8005Roblox \u6216\u8005Snapchat \u53ea\u80fd\u96c6\u4e2d\u5f0f\uff0c\u53ea\u6709\u5e73\u53f0\u4e00\u4e2a\u5165\u53e3\uff0c\u800c\u50cfNiantic \u8fd9\u79cd\u4ec5\u5f00\u653e\u5e95\u5c42\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u63a5\u5165\u5b9e\u9645\u5f88\u56f0\u96be\uff0c\u56e0\u4e3a\u8981\u8c03\u7528\u4f17\u591a\u7684API"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u5b58\u5728\u5197\u4f59\uff0c\u91cd\u590d\uff0c\u8fd9\u90e8\u5206\u53ef\u4ee5\u5171\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64\u6bcf\u4e2aapp\u5f00\u53d1\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u7c7b\u4f3c\uff0c\u4f46\u662f3D\u90e8\u4efd\u5374\u8981\u91cd\u590d\u5f00\u53d1\uff0c\u4f8b\u5982\u8981\u63a5\u5165\u9884\u89c8\u6d41\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5728\u81ea\u5df1\u7684app\u91cc\u9762\u5171\u4eab\u4e00\u5957\u5f00\u53d1\u6807\u51c6\uff0cUnity\u4e0d\u7b97\u6807\u51c6\uff0c\u56e0\u4e3a\u4ed6\u66f4\u504f\u4f4e\u5c42\uff0c\u6ca1\u6709\u5b9a\u4e49\u592a\u591a\u89c4\u8303\uff0c\u5bfc\u81f4\u6bcf\u4e2a\u4eba\u5f00\u53d1\u4e0d\u4e00\u6837\uff0c\u800cRealityCreate \u662f\u9ad8\u5ea6\u89c4\u8303\u5316\u7684")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u53ef\u4ee5\u5171\u4eabRealityCreate \u9ad8\u5ea6\u89c4\u8303\u5316\u7684\u6d41\u7a0b\uff0c\u53c8\u53ef\u4ee5\u6700\u7b80\u5355\u7684\u6210\u672c\u548c\u65b9\u5f0f\u63a5\u5165\u81ea\u5df1app\uff0c\u4ece\u800c\u662f\u5f00\u53d1\u8005\u805a\u7126\u521b\u4f5c\u672c\u8eab\uff0c\u540c\u65f6\u80fd\u4eab\u53d7\u4e91\u539f\u751f\uff0c\u7528\u6237\u534f\u4f5c\u7b49\u7b49\u6240\u6709Creation XR\u5f97\u597d\u5904"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e5f\u53ef\u4ee5\u907f\u514din-house \u5f15\u64ce\u7684\u95ee\u9898\uff0cin-house \u5f15\u64ce\u4e3b\u8981\u7684\u95ee\u9898\u662f\u4e0d\u80fd\u88ab\u5176\u4ed6app\u7b80\u5355\u4f7f\u7528\uff0c\u6709\u56fa\u5b9a\u7684\u6d41\u7a0b\uff0c\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u6309\u7167in-house \u7684\u505a\u6cd5\u5feb\u901f\u63d0\u5347\u81ea\u5df1\u7684\u5dee\u5f02\u6027\uff0c\u800c\u907f\u514d\u9677\u5165Unreal\u548cUnity \u90a3\u6837\u7684\u901a\u7528\u5f15\u64ce"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u80fd\u50cfUnity\u4e00\u6837\u88ab\u7528\u4e8e\u5f00\u53d1\u72ec\u7acb\u5e94\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u6293\u4f4f\u4e86\u751f\u6001")),(0,n.kt)("p",null,"\u8fd9\u79cd\u6a21\u5f0f\u8fd8\u6709\u4e00\u4e2a\u597d\u5904\uff0c\u9664\u4e86\u5e94\u7528\u90e8\u7f72\u672c\u8eab\uff0c\u4ed6\u8fd8\u63d0\u4f9b\u5982\u5e94\u7528\u7684\u7edf\u8ba1\u5206\u6790\u7b49\u529f\u80fd\uff0c\u5e94\u7528\u7684\u5b58\u50a8\uff0c\u8fd9\u4e9b\u539f\u672c\u90fd\u662f\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u5bf9\u63a5\u7684\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u770b\u6709\u591a\u4e48\u590d\u6742\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u81ea\u5df1\u81ea\u5df1Unity\u5f00\u53d1app\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u62ec\u5927\u91cf\u7684\u7f8e\u672f\u8d44\u6e90\u548c\u903b\u8f91\u5f00\u53d1\u662f\u6bcf\u4e2a\u6e38\u620f\u5f00\u53d1\u8005\u6bd4\u8f83\u91cd\u590d\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u6253\u5305\u90e8\u7f72\uff0c\u8fd9\u8981\u6c42\u4e00\u4e9b\u5e73\u53f0\u5c42\u7684\u6280\u5de7\u548c\u7ecf\u9a8c\uff0c\u8fd9\u4e9b\u5176\u5b9e\u8d85\u51fa\u4e86\u5f00\u53d1\u8005\u5bf9\u5185\u5bb9\u7684\u805a\u7126\uff0c\u9664\u4e86\u5185\u5bb9\u548c\u73a9\u6cd5\uff0c\u4e00\u4e2a\u6e38\u620f\u521b\u4e1a\u516c\u53f8\u8fd8\u9700\u8981\u82b1\u5f88\u591a\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd8\u9700\u8981\u5bf9\u63a5\u5404\u79cdSDK\uff0c\u5305\u62ec\u7aef\u4fa7\u7684\u548c\u4e91\u4fa7\u7684\uff0c\u800c\u5404\u79cdSDK\u90fd\u8981\u516c\u53f8\u81ea\u5df1\u5b66\u4e60\uff0c\u5e76\u4e14\u4e0d\u540c\u516c\u53f8\u4e4b\u95f4\u8fd9\u4e9b\u5de5\u4f5c\u4e5f\u662f\u91cd\u590d\u7684\uff0c\u4f46\u662f\u6bcf\u4e2a\u516c\u53f8\u90fd\u7684\u62db\u4eba\u53bb\u6316\u5751\uff0c\u6709\u65f6\u5019\u8fd9\u4e9b\u53cd\u800c\u6210\u4e3a\u4e00\u4e9b\u5c0f\u56e2\u961f\u6bd4\u8f83\u963b\u788d\u53d1\u5e03\u7684\u4e00\u4e9b\u969c\u788d"),(0,n.kt)("li",{parentName:"ul"},"\u540e\u671f\u7684\u8fd0\u7ef4\u4e5f\u9700\u8981\u4e00\u4e9b\u7cbe\u529b\u548c\u4eba\u529b\u4e5f\u81ea\u5df1\u5f00\u53d1\u7ecf\u9a8c\u7684\u6295\u5165")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u6e38\u620f\u5f00\u53d1\u56e2\u961f\u82b1\u4e86\u8f83\u591a\u7684\u7cbe\u529b\u5728\u4e00\u4e9b\u7e41\u7410\u7684\u4e8b\u60c5\u4e0a\uff0c\u800c\u4e14\u516c\u53f8\u4e4b\u95f4\u7684\u8fd9\u4e9b\u80fd\u529b\u672c\u53ef\u4ee5\u5171\u4eab\u7684\uff0c\u5f00\u53d1\u8005\u672c\u5e94\u8be5\u805a\u7126\u5185\u5bb9\u5f00\u53d1"),(0,n.kt)("p",null,"\u539f\u56e0\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u8981\u81ea\u5df1\u53d1\u5e03app\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u53bb\u7edf\u4e00\u96c6\u6210\u4e00\u4e9b\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u672c\u8eab\u6ca1\u6709\u6807\u51c6\uff0c\u5f88\u96be\u7edf\u4e00"),(0,n.kt)("p",null,"\u5f53\u7136\u5927\u7684\u5e94\u7528\u672c\u8eab\u9700\u8981\u66f4\u7075\u6d3b\u7684\u80fd\u529b\uff0c\u6709\u592a\u591a\u9650\u5236\u53cd\u800c\u4e0d\u5229\u4e8e\u5f00\u53d1\uff0c\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u5c0f\u5185\u5bb9\uff0c\u5c24\u5176\u662f\u4e2a\u4eba\u5185\u5bb9\uff0c\u8fd9\u662f\u53ef\u884c\u7684\uff0c\u800c\u4e14\u4e2a\u4eba\u5f00\u53d1\u8005\u9700\u8981\u8fd9\u6837\u7684\u751f\u6001"),(0,n.kt)("p",null,"Roblox \u5c31\u662f\u505a\u4e86\u8fd9\u4e9b\u4e8b\u60c5\uff0c\u5e94\u7528\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u62c5\u5fc3\u5176\u4ed6\u4e8b\u60c5\uff0c\u4f46\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301Roblox\u4e4b\u5916\u7684\u5206\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301\u94fe\u63a5\u7684\u65b9\u5f0f\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u8981\u9762\u5411PC\u548c\u624b\u673a\uff0c\u6ca1\u6709\u9488\u5bf9XR\u7684\u7b97\u6cd5\u5c42\u63a5\u53e3\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837\u6240\u4ee5\u4e0d\u53ef\u80fd\u652f\u6301XR\u8bbe\u5907\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u5178\u578b\u7684\u4e13\u4e1a\u5f00\u53d1+\u666e\u901a\u7528\u6237\u73a9\u7684\u6a21\u5f0f\uff0c\u6ca1\u6709\u666e\u901a\u7528\u6237\u7684\u521b\u5efa\u6a21\u5f0f\u548c\u521b\u9020\u4f53\u9a8c")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee5\u6b64\u4e3a\u57fa\u7840\uff0c\u6784\u5efa\u5fae\u670d\u52a1\u67b6\u6784")),(0,n.kt)("p",null,"\u7f8e\u672f\u8d44\u6e90\u7684\u91cd\u590d\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f20\u7edf\u4e92\u52a8\u5185\u5bb9\u6700\u91cd\u8981\u7684\u662f\u73a9\u6cd5\u3001\u6545\u4e8b\uff0c\u7f8e\u672f\u76f8\u5bf9\u4e0d\u662f\u6700\u6838\u5fc3\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u8d44\u6e90\u80fd\u591f\u63d0\u4f9b\u72ec\u7279\u7684\u89c6\u89c9\u8bed\u8a00\uff0c\u4f46\u662f\u8fd9\u4e9b\u89c6\u89c9\u8bed\u8a00\u66f4\u591a\u662f\u98ce\u683c\u5316\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\u5728\u540c\u4e00\u79cd\u5199\u5b9e\u98ce\u683c\u7c7b\u578b\u4e0b\uff0c\u73a9\u5bb6\u5bf9\u4e0d\u540c\u7684\u573a\u666f\u611f\u77e5\u7684\u5dee\u5f02\u5c31\u4f1a\u5c0f\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u573a\u666f\u901a\u8fc7\u7a0b\u5e8f\u5316\u751f\u6210\u65b9\u6cd5\u662f\u80fd\u63d0\u4f9b\u8f83\u597d\u7684\u5dee\u5f02\u6027\u548c\u72ec\u7279\u6027\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u79cd\u7a0b\u5e8f\u5316\u65b9\u6cd5\u66f4\u52a0\u652f\u6301\u98ce\u683c\u5316\uff0c\u90a3\u4e48\u5c31\u80fd\u6ee1\u8db3\u4e0a\u8ff0\u7684\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u98ce\u683c\u5316\u4e3b\u8981\u8868\u73b0\u4e3a\u7eb9\u7406\u6216\u8005\u57fa\u7840\u6750\u8d28\uff0c\u6709\u65f6\u7f51\u683c\u4e5f\u6709\u4e00\u5b9a\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u90fd\u53ef\u4ee5\u8fdb\u884c\u7814\u7a76")),(0,n.kt)("h3",{id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017"},"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017"),(0,n.kt)("p",null,"\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u57fa\u4e8eOOP\u8fdb\u884c\u5f00\u53d1\uff0c\u5176\u4e2d\u7684\u5f15\u7528\u5173\u7cfb\u9519\u7efc\u590d\u6742\uff0c\u5bf9\u73b0\u4ee3\u5185\u5b58\u786c\u4ef6\u67b6\u6784\u6781\u5ea6\u4e0d\u53cb\u597d\uff0c\u9700\u8981\u91cd\u65b0\u5bf9\u6e38\u620f\u7684\u8fd0\u884c\u65f6\u5185\u5b58\u6570\u636e\u8fdb\u884c\u66f4\u597d\u7684\u7ba1\u7406\uff0c\u5e76\u4e14\u8fd9\u4e9b\u7ba1\u7406\u53c8\u4e0d\u80fd\u7ed9\u5f00\u53d1\u8005\u5e26\u6765\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.1\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f"},"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u76f8\u4f3c\u7684\u539f\u56e0\uff0c\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u65e0\u6cd5\u4f7f\u7528\u5927\u89c4\u6a21\u5e76\u53d1\u7684\u9700\u6c42\uff0c\u4f8b\u5982\u5355\u53f0\u670d\u52a1\u5668\u6700\u591a\u53ea\u80fd\u652f\u6301\u4e0a\u767e\u4eba\u540c\u65f6\u5728\u7ebf\u3002\u8fd9\u4e3b\u8981\u662f\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u7a0b\u5e8f\u548c\u6570\u636e\u8026\u5408\u5ea6\u975e\u5e38\u9ad8\uff0c\u5bfc\u81f4\u5355\u53f0\u670d\u52a1\u5668\u5fc5\u987b\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u7ba1\u5355\u53f0\u670d\u52a1\u5668\u7684\u5185\u5b58\u4e0d\u591f\uff0c\u4e5f\u4f1a\u5e26\u6765\u591a\u53f0\u670d\u52a1\u5668\u91cd\u590d\u52a0\u8f7d\uff0c\u4ee5\u53ca\u91cd\u590d\u52a0\u8f7d\u5bfc\u81f4\u7684\u6570\u636e\u540c\u6b65\u5bfc\u81f4\u7684\u590d\u6742\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.2.13\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"},"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u4f20\u7edf\u7684\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u6240\u6709\u7684\u903b\u8f91\u90fd\u662f\u5305\u542b\u5728\u7a0b\u5e8f\u4e2d\u4e0d\u53ef\u4fee\u6539\uff0c\u6240\u6709\u7684\u5173\u5361\u3001\u5267\u60c5\u7b49\u7b49\u90fd\u662f\u56fa\u5b9a\u7684\uff0c\u8ddf\u7535\u5f71\u6bd4\u8f83\u7c7b\u4f3c\uff0c\u552f\u4e00\u4e0d\u540c\u7684\u53ef\u80fd\u662f\u6e38\u620f\u5177\u6709\u4ea4\u4e92\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u66f4\u65b0\u7a0b\u5e8f\u65f6\uff0c\u901a\u5e38\u901a\u8fc7DLC\u6216Mod\u7b49\u673a\u5236\u5bf9\u6e38\u620f\u8fdb\u884c\u6269\u5c55\u6216\u589e\u5f3a\uff0c\u4f46\u662f\u8fd9\u4e24\u79cd\u673a\u5236\u901a\u5e38\u90fd\u6bd4\u8f83\u53d7\u9650\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\uff0c\u81f3\u5c11\u4e00\u4e2a\u5df2\u7ecf\u53d1\u5e03\u7684\u6e38\u620f\u5176\u6838\u5fc3\u4f53\u9a8c\u662f\u5f88\u96be\u6539\u53d8\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u5f00\u653e\u7684Metaverse\u4e0d\u4ec5\u9700\u8981\u53ef\u4ee5\u4efb\u610f\u6dfb\u52a0\u72ec\u7acb\u7a0b\u5e8f\u7684\u80fd\u529b\uff0c\u8fd8\u9700\u8981\u80fd\u591f\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u81ea\u52a8\u7b5b\u9009\u4f18\u79c0\u5185\u5bb9\u7684\u80fd\u529b\uff0c\u5426\u5219\u7528\u6237\u53ef\u80fd\u5f88\u5feb\u5c31\u6c89\u5165\u5f88\u591a\u5783\u573e\u6216\u8005\u8d28\u91cf\u8f83\u4f4e\u7684\u4fe1\u606f\u5f53\u4e2d\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u8fd9\u79cd\u5185\u5bb9\u90fd\u662f\u9700\u8981\u5e73\u53f0\u4f7f\u7528\u4e00\u5b9a\u7684\u7b97\u6cd5\u8fdb\u884c\u63a8\u8350\uff0c\u8fd9\u79cd\u63a8\u8350\u7b97\u6cd5\u4e00\u822c\u7531\u7528\u6237\u5bf9\u81ea\u5df1\u7684\u5185\u5bb9\u8bbe\u7f6e\u4e00\u4e9b\u6807\u7b7e\uff0c\u7136\u540e\u5e73\u53f0\u5efa\u7acb\u4e00\u4e9b\u76f8\u5173\u5ea6\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u771f\u5b9e\u4e16\u754c\u5374\u662f\u76f8\u53cd\u7684\uff0c\u5b83\u4eec\u7531\u6bcf\u4e2a\u6839\u636e\u81ea\u5df1\u7684\u5224\u65ad\u548c\u9009\u62e9\uff0c\u6765\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fdb\u5316\u3002\u53c2\u89c14.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"14-\u5546\u4e1a\u6a21\u5f0f"},"1.4 \u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("h3",{id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"},"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5728\u7ebf\u4e92\u52a8\u6709\u4e09\u79cd\u5f62\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89c6\u9891\u7535\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u5728\u7ebf\u6e38\u620f\uff0c\u5982\u300a\u523a\u6fc0\u6218\u573a\u300b"),(0,n.kt)("li",{parentName:"ul"},"\u300aRoblox\u300b\u7c7b\u7684\u865a\u62df\u623f\u95f4")),(0,n.kt)("p",null,"\u5176\u4e2d\u6e38\u620f\u7c7b\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u8fd8\u662f\u4ee5\u6e38\u620f\u4e3a\u4e3b\uff0c\u8fd9\u4e9b\u4ea4\u4e92\u901a\u5e38\u53ea\u662f\u804a\u5929\u6216\u8005\u8bed\u97f3\uff0c\u6709\u70b9\u50cf\u5728\u73b0\u573a\u4e00\u8d77\u73a9\u6e38\u620f\u5927\u5bb6\u53ef\u4ee5\u76f8\u4e92\u8ba8\u8bba\uff1b\u6574\u4f53\u7684\u6d3b\u52a8\u8fd8\u662f\u4ee5\u73a9\u6e38\u620f\u4e3a\u4e3b\uff0c\u4e92\u52a8\u662f\u8f85\u52a9\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u623f\u95f4\u7c7b\u7684\u4ea4\u4e92\uff0c\u76f8\u5bf9\u79c1\u5bc6\u4e00\u70b9\uff0c\u4f46\u662f\u8fd9\u4e9b\u5e94\u7528\u7684\u6e38\u620f\u6027\u5f80\u5f80\u5f88\u5f31\uff0c\u6bd4\u8f83\u5c40\u9650\u4e8e\u5f62\u5f0f\u4e0a\u7684\u5728\u7ebf\u4e92\u52a8\uff0c\u76ee\u7684\u6027\u548c\u5a31\u4e50\u6027\u90fd\u4e0d\u591f\u5f3a\u3002"),(0,n.kt)("p",null,"Reality World\u76f8\u5bf9\u4e0a\u8ff0\u7684\u6a21\u5f0f\uff0c\u5b58\u5728\u4e00\u4e0b\u7684\u4e00\u4e9b\u72ec\u7279\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e92\u52a8\u7684\u89c4\u5219\u548c\u5185\u5bb9\u5f80\u5f80\u662f\u53ef\u4ee5\u7531\u5176\u4e2d\u4e00\u4e2a\u7528\u6237\u521b\u4f5c\u7684\uff0c\u5177\u6709",(0,n.kt)("strong",{parentName:"li"},"\u72ec\u7279\u6027"),"\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u9488\u5bf9\u6027"),"\uff0c\u6bd4\u5982\u9488\u5bf9\u4e00\u4e2a\u751f\u65e5\u4e13\u95e8\u8bbe\u7f6e\u7684\u4e0e\u670b\u53cb\u76f8\u5173\u7684\u573a\u666f\u548c\u4e92\u52a8\u5185\u5bb9\uff1b",(0,n.kt)("strong",{parentName:"li"},"\u8fd9\u79cd\u72ec\u7279\u6027\u4f7f\u5f97Reality World\u7684\u5185\u5bb9\u66f4\u5bb9\u6613\u5728\u597d\u53cb\u4e4b\u95f4\u53d1\u8d77\u4e92\u52a8")),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u5728\u4e92\u52a8\u7684\u8fc7\u7a0b\u4e2d\u8fdb\u884c\u5171\u540c\u521b\u4f5c\uff0c\u6bd4\u5982\u4f60\u5411\u86cb\u7cd5\u4e0a\u5207\u4e00\u5200\u4e0b\u53bb\uff0c\u6240\u6709\u4eba\u90fd\u53ef\u4ee5\u770b\u5230\u86cb\u7cd5\u88ab\u5207\u6210\u4e24\u4efd\uff0c\u8fd9\u662f\u56e0\u4e3aReality World\u7684\u573a\u666f\u591a\u4eba\u534f\u4f5c\u7279\u6027\uff0c\u800c\u5176\u4ed6\u4e92\u52a8\u7684\u5185\u5bb9\u662f\u56fa\u5b9a\u7684\uff0c\u6bcf\u4e2a\u73a9\u5bb6\u53ea\u80fd\u4f53\u9a8c\u8fd9\u4e9b\u8bbe\u8ba1\u597d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"Reality World\u7684\u5185\u5bb9\u53ef\u4ee5\u5373\u4f7f\u521b\u4f5c\u548c\u5206\u4eab\uff0c\u4e0d\u9700\u8981\u63d0\u4ea4\u5230\u5546\u5e97\uff0c\u7136\u540e\u7528\u6237\u4e0b\u8f7d\uff0c\u53ea\u9700\u8981\u9a6c\u4e0a\u521b\u4f5c\u4e4b\u540e\u53d1\u9001\u7ed9\u597d\u53cb\u4e00\u4e2a\u94fe\u63a5\u5c31\u53ef\u4ee5\u53ca\u65f6\u6253\u5f00")),(0,n.kt)("h3",{id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"},"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5728\u73b0\u4ee3\u6570\u5b57\u7ecf\u6d4e\u4e2d\uff0c\u9664\u4e86\u89c6\u9891\u3001\u56fe\u7247\u548c\u97f3\u4e50\u8fd9\u79cd\u80fd\u76f4\u63a5\u4f53\u9a8c\u7684\u6570\u5b57\u5185\u5bb9\uff0c\u5176\u4ed6\u7684\u5927\u90e8\u5206\u5185\u5bb9\uff0c\u5176\u5b9e\u4f53\u548c\u5bf9\u5e94\u7684\u6570\u5b57\u8868\u8ff0\u90fd\u662f\u5206\u5272\u7684\uff0c\u4f8b\u5982\u6dd8\u5b9d\u90fd\u4e70\u7684\u5546\u54c1\u53ea\u662f\u6570\u5b57\u5316\u540e\u7684\u4e00\u4e2a\u8bb0\u5f55\uff0c\u4f60\u5fc5\u987b\u6536\u5230\u4e1c\u897f\u4e4b\u540e\u624d\u80fd\u4f53\u9a8c\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u4e0e\u4e4b\u76f8\u5173\u7684\u6570\u5b57\u7ecf\u6d4e\u662f\u5e7f\u544a\uff0c\u5e7f\u544a\u4f5c\u4e3a\u4e00\u4e2a\u5c55\u793a\u4ea7\u54c1\u7684\u65b9\u5f0f\uff0c\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u5b83\u4eec\u5f80\u5f80\u4ee5\u89c6\u9891\u6216\u8005\u56fe\u7247\u7684\u5f62\u5f0f\u5448\u73b0\u3002\u7136\u800c\u5728\u8fd9\u79cd\u65b9\u5f0f\u4e2d\uff0c\u5e7f\u544a\u8bed\u4ea7\u54c1\u901a\u5e38\u662f\u5272\u88c2\u7684\uff0c\u53d7\u9650\u4e8e\u5b9e\u7269\u9700\u8981\u573a\u5730\u53ca\u8fd0\u8f93\u7b49\u95ee\u9898\uff0c\u6211\u4eec\u5e76\u4e0d\u80fd\u603b\u662f\u5728\u4efb\u610f\u4e00\u4e2a\u5e7f\u544a\u65c1\u8fb9\u653e\u4e0a\u5b9e\u7269\uff0c\u4f7f\u5f97\u4efb\u4f55\u770b\u5230\u5e7f\u544a\u7684\u4eba\u5c31\u53ef\u4ee5\u8d2d\u4e70\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u5bf9\u4e8e\u540e\u8005\u624d\u662f\u7406\u60f3\u7684\u5e7f\u544a\u5f62\u6001\uff1a\u5c31\u662f\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1\uff0c\u6216\u8005\u8bf4\u5e7f\u544a\u53ef\u4ee5\u4e00\u952e\u76f4\u8fbe\u4ea7\u54c1\u4f53\u9a8c\u548c\u8d2d\u4e70\u3002"),(0,n.kt)("h4",{id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"},"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u4ea7\u54c1\u5c31\u662f\u6570\u5b57\u5185\u5bb9\uff0c\u800c\u975e\u5b9e\u4f53\u5185\u5bb9\uff0c\u7406\u8bba\u4e0a\u662f\u53ef\u4ee5\u505a\u5230\u8fd9\u79cd\u4e00\u952e\u4f53\u9a8c\u7684\u6548\u679c\u7684\u3002\u6bd4\u5982\u5982\u679c\u4ea7\u54c1\u662f\u4e00\u4e2a\u6e38\u620f\u6216\u8005\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u70b9\u51fb\u4e0b\u8f7d\uff0c\u8fd9\u79cd\u5f62\u5f0f\u73b0\u5728\u5f88\u666e\u904d\u3002\u7136\u800c\u8fd9\u79cd\u65b9\u5f0f\u5e76\u4e0d\u662f\u6700\u597d\u7684\u6a21\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7684\u4ea7\u54c1\u90fd\u5f97\u5f00\u53d1\u4e00\u4e2aapp"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u53ef\u80fd\u5e76\u4e0d\u60f3\u8981\u5b89\u88c5\u90a3\u4e48\u591aapp"),(0,n.kt)("li",{parentName:"ul"},"\u56e0\u4e3a\u6bcf\u4e2aapp\u5b89\u88c5\u9664\u4e86\u4f53\u9a8c\u4ea7\u54c1\u8fd8\u6709\u5f88\u591a\u989d\u5916\u7684\u8d1f\u62c5\uff1a\u6ce8\u518c\uff0c\u767b\u5f55\uff0c\u8fdb\u53bb\u4e86\u89e3\u8f6f\u4ef6\u7684\u5bfc\u822a\u529f\u80fd\u7b49\u7b49")),(0,n.kt)("p",null,"\u6240\u4ee5\u5143\u5b87\u5b99\u662f\u4e00\u4e2a\u66f4\u597d\u7684\u5e7f\u544a\u5e73\u53f0\uff0c\u6bcf\u4e2a\u4ea7\u54c1\u53ea\u9700\u8981\u8bbe\u8ba1\u4e00\u4e2a\u4ea4\u4e92\uff0c\u73a9\u5bb6\u76f4\u63a5\u4f53\u9a8c\u4e00\u4e0b\u5c31\u662f\u3002\u4f46\u662f\u73b0\u5728\u7684\u6280\u672f\u5e76\u4e0d\u80fd\u505a\u5230\u8fd9\u79cd\u4f53\u9a8c\uff0c\u8fd9\u91cc\u9762\u7684\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u5e73\u53f0\u65e0\u6cd5\u652f\u6491\u4efb\u4f55\u5f00\u53d1\u8005\u81ea\u7531\u5f00\u53d1\u4ea4\u4e92\u5185\u5bb9\uff0c\u5f80\u5f80\u53ea\u80fd\u901a\u8fc7\u5e73\u53f0\u53d1\u5e03\uff0c\u8fd9\u6837\u5e7f\u544a\u80fd\u529b\u5f88\u53d7\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u589e\u52a0\u4e86\u65b0\u529f\u80fd\uff0c\u4e5f\u9700\u8981\u6240\u6709\u73a9\u5bb6\u90fd\u66f4\u65b0\uff0c\u6709\u65f6\u5019\u4e00\u4e2a\u5e7f\u544a\u53ea\u6709\u5c11\u6570\u4eba\u6709\u4f53\u9a8c\u9700\u6c42")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0cReality World\u53ef\u4ee5\u505a\u5230\u5382\u5546\u53ef\u4ee5\u4efb\u610f\u53d1\u5e03\u5e26\u6709\u4ea4\u4e92\u7684\u5e7f\u544a\uff0c\u7136\u540e\u4efb\u4f55\u73a9\u5bb6\u53ea\u8981\u770b\u5230\u5b83\uff0c\u5c31\u53ef\u4ee5\u53ca\u65f6\u4f53\u9a8c\u548c\u8d2d\u4e70\uff0c\u771f\u6b63\u505a\u5230\uff1a\u4ea7\u54c1\u53ca\u5e7f\u544a\uff0c\u5e7f\u544a\u53ca\u4ea7\u54c1\uff0c\u8fd9\u79cd\u6a21\u5f0f\u6709\u671b\u91cd\u5851\u4e00\u4e2a\u5168\u65b0\u7684\u865a\u62df\u7ecf\u6d4e\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u5185\u5bb9\u662f\u5b9e\u4f53\u5185\u5bb9\uff0c\u4ecd\u7136\u53ef\u4ee5\u865a\u62df\u5316\u4f53\u9a8c\uff0c\u6216\u8005\u901a\u8fc7\u4ea4\u4e92\uff0c\u76f8\u6bd4\u89c6\u9891\u548c\u56fe\u7247\u66f4\u597d\u7684\u4e86\u89e3\u4ea7\u54c1\u3002"),(0,n.kt)("p",null,"\u89c14.6.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e"},"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u66f4\u6709\u4ef7\u503c\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"},"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684NFT\u7c7b\u7684\u6570\u5b57\u4ea4\u6613\u5e02\u573a\uff0c\u4ea4\u6613\u7684\u662f\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\uff0c\u662f\u4e00\u4e2a\u62f7\u8d1d\uff0c\u8fd9\u4e2a\u62f7\u8d1d\u9664\u975e\u901a\u8fc7\u4e00\u5b9a\u7684\u624b\u6bb5\u8ddf\u8e2a\u8f6c\u552e\u8bb0\u5f55\uff0c\u6216\u8005\u751a\u81f3\u9650\u5236\u8f6c\u552e\uff0c\u5f88\u96be\u4fdd\u8bc1\u521b\u4f5c\u8005\u7684\u6743\u76ca\u3002"),(0,n.kt)("p",null,"\u800cReality World\u4ea4\u6613\u7684\u4e3b\u8981\u662f\u7ec4\u4ef6\u548c\u6807\u51c6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u548c\u6807\u51c6\u5e76\u4e0d\u4f1a\u62f7\u8d1d\u4e00\u4efd\uff0c\u800c\u53ea\u662f\u4e00\u4e2a\u5f15\u7528\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6e90\u5934\u62c9\u53d6\u6700\u65b0\u4ee3\u7801\u3002\u6240\u4ee5\u4ed6\u5929\u751f\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u4e86\u89e3\u4f7f\u7528\u8005\u7684\u60c5\u51b5\uff0c\u6bd4\u5982\u4e00\u4e2a\u6807\u51c6\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u5176\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4e5f\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6807\u51c6\u5f00\u53d1\u8005\u4e0d\u80fd\u80fd\u591f\u6536\u53d6\u6240\u6709\u4f7f\u7528\u8005\u7684\u8d39\u7528\uff0c\u5e76\u4e14\u8fd8\u6709\u5f88\u597d\u7684\u66f4\u65b0\u673a\u5236\uff0c\u901a\u77e5\u7528\u6237\u8d2d\u4e70\u76f8\u5173\u548c\u6700\u65b0\u4ea7\u54c1\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002"),(0,n.kt)("h3",{id:"145-\u6301\u7eed\u6d88\u8d39"},"1.4.5 \u6301\u7eed\u6d88\u8d39"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u5316\u8fdb\u7a0b\u4e2d\uff0c\u6570\u5b57\u5316\u4ea7\u54c1\u5f80\u5f80\u662f\u4e00\u6b21\u6027\u6d88\u8d39\uff0c\u8fd9\u5bfc\u81f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f6f\u4ef6\u5f00\u53d1\u8005\u5347\u7ea7\u52a8\u529b\u4e0d\u5927\uff0c\u5bf9\u521b\u65b0\u53ca\u521b\u65b0\u7684\u901f\u5ea6\u662f\u6781\u4e3a\u4e0d\u5229\u7684\uff0c\u56e0\u4e3a\u65b0\u7528\u6237\u4f1a\u8d8a\u6765\u8d8a\u5c11"),(0,n.kt)("li",{parentName:"ul"},"\u5927\u91cf\u9648\u65e7\u4ee3\u7801\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u517c\u5bb9\u6210\u672c\u9ad8\uff0c\u4e00\u65b9\u9762\u662f\u7528\u6237\u4f7f\u7528\u6bd4\u8f83\u9648\u65e7\u7684\u6280\u672f\u6216\u4f53\u9a8c")),(0,n.kt)("p",null,"\u9700\u8981\u6539\u53d8\u8fd9\u79cd\u5c40\u9762\uff0c\u624d\u80fd\u66f4\u5927\u5730\u6fc0\u6d3b\u6570\u5b57\u6d88\u8d39\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.12.4.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"15-\u7528\u6237"},"1.5 \u7528\u6237"),(0,n.kt)("p",null,"Reality World\u5e73\u53f0\u6709\u56db\u79cd\u7c7b\u578b\u7684\u7528\u6237\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u4ece\u521b\u4f5c\u5c42\u9762\u533a\u5206\uff0c\u4e0d\u6d89\u53ca\u5546\u4e1a\u65b9\u9762\u7684\u5206\u7c7b\u6216\u8005\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\uff1a\u7c7b\u4f3c\u4e8e\u6296\u97f3\u5e73\u53f0\u53ea\u89c2\u770b\u89c6\u9891\uff0c\u4ece\u6765\u6ca1\u6709\u6216\u8005\u5f88\u5c11\u53d1\u5e03\u5185\u5bb9\u7684\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7528\u6237\uff1a\u6307\u53ea\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u501f\u52a9PC\u7f16\u8f91\u5668\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\uff1a\u4f7f\u7528PC\u7f16\u8f91\u5668Reality Create\u57fa\u4e8e\u6807\u51c6\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4f5c\u8005\uff1a\u57fa\u4e8e\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\u63d0\u51fa\u67d0\u79cd\u62bd\u8c61\uff0c\u5e76\u5c06\u5176\u8f6c\u6362\u4e3a\u6807\u51c6\uff0c\u4ee5\u53ca\u6301\u7eed\u7ef4\u62a4\u6807\u51c6\u7684\u66f4\u65b0")),(0,n.kt)("h3",{id:"151-\u666e\u901a\u7528\u6237"},"1.5.1 \u666e\u901a\u7528\u6237"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u666e\u901a\u7528\u6237\u4e0d\u8fdb\u884c\u4efb\u4f55\u5f62\u5f0f\u7684\u521b\u4f5c\uff0c\u4f46TA\u4ecd\u7136\u662f\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\u5f88\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u90fd\u5176\u4ed6\u521b\u4f5c\u5185\u5bb9\u7684\u4f7f\u7528\u548c\u4f53\u9a8c\u4ea7\u751f\u6d88\u8d39"),(0,n.kt)("li",{parentName:"ul"},"TA\u901a\u8fc7\u79c1\u4eba\u793e\u4ea4\u7f51\u7edc\uff0c\u4ea7\u751f\u7684\u5bf9\u597d\u7684\u5185\u5bb9\u7684\u4e3b\u52a8\u63a8\u8350\u884c\u4e3a\uff0c\u4fc3\u8fdb\u4e86\u6574\u4e2a\u5e02\u573a\u7ecf\u6d4e")),(0,n.kt)("p",null,"\u5f53\u7136\u6240\u6709\u4eba\u90fd\u662f\u666e\u901a\u7528\u6237\uff0c\u5e76\u4e14\u666e\u901a\u7528\u6237\u4e5f\u6709\u53ef\u80fd\u8f6c\u6362\u4e3a\u5176\u4ed6\u521b\u4f5c\u7528\u6237\u3002"),(0,n.kt)("h3",{id:"152-\u521b\u4f5c\u7528\u6237"},"1.5.2 \u521b\u4f5c\u7528\u6237"),(0,n.kt)("p",null,"\u5e73\u53f0\u5f88\u5927\u4e00\u90e8\u5206\u6280\u672f\u7684\u67b6\u6784\u90fd\u662f\u4e3a\u4e86\u521b\u4f5c\u7528\u6237\uff0c\u8fd9\u662f\u533a\u522b\u5176\u4ed6\u7c7b\u4f3c\u5e73\u53f0\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u521b\u4f5c\u6709\u4e24\u7c7b\u4e3b\u6d41\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e4b\u7c7b\u7684\u6c99\u76d2\u6e38\u620f"),"\uff0c\u5728\u8fd9\u7c7b\u6e38\u620f\u4e2d\uff0c\u6574\u4e2a\u4e16\u754c\u7684\u89c4\u5219\u7c7b\u578b\u6bd4\u8f83\u4e00\u81f4\uff0c\u6bd4\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u5821\u5792\u5efa\u9020\u4e0e\u9003\u751f\uff0c\u300a\u6211\u7684\u4e16\u754c\u300b\u4e2d\u7684\u602a\u7269\u673a\u5236\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5185\u7f6e\u4e8e\u7cfb\u7edf\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u5927\u91cf\u5177\u6709\u56fa\u5b9a\u884c\u4e3a\u7684\u7269\u4ef6\uff0c\u73a9\u5bb6\u521b\u4f5c\u7684\u81ea\u7531\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff1a\u57fa\u672c\u4e0a\u4e0d\u6d89\u53ca\u903b\u8f91\u672c\u8eab\u7684\u6784\u9020\uff0c\u53ea\u6709\u8ddf\u7269\u7406\u4f4d\u7f6e\uff0c\u7269\u4f53\u7ec4\u5408\u7b49\u76f8\u5173\u4e0e\u6e38\u620f\u884c\u4e3a\u65e0\u5173\u7684\u7b56\u7565"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"AR\u4e8b\u4ef6\u9a71\u52a8\u7684\u589e\u5f3a\u73b0\u5b9e\u4f53\u9a8c"),"\uff0c\u8fd9\u4e9b\u5e94\u7528\u4ee5\u300aSnapchat\u300b\u4e3a\u4ee3\u8868\uff0c\u5b83\u63d0\u4f9b\u4e00\u4e9b\u56fa\u5b9a\u7684\u5177\u6709\u4e92\u52a8\u4f53\u9a8c\u7684\u9053\u5177\u6216\u8005\u6ee4\u955c\uff0c\u7528\u6237\u501f\u52a9\u6444\u50cf\u673a\u8fdb\u884c\u4f53\u9a8c\uff1b\u8fd9\u79cd\u4f53\u9a8c\u672c\u8eab\u4e0d\u6d89\u53ca3D\u7684\u521b\u4f5c\uff0c\u4f8b\u5982\u5236\u4f5c\u4e00\u4e2a\u65b0\u7684\u6ee4\u955c\u6216\u8005\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u5b83\u4eec\u4ea7\u751f\u4e86\u4e00\u4e2a\u72ec\u4e00\u65e0\u4e8c\u7684\u89c6\u9891\u5185\u5bb9\uff0c\u5e76\u4e14\u8fd9\u4e2a\u5185\u5bb9\u662f\u8ddf\u81ea\u5df1\u9ad8\u5ea6\u76f8\u5173\u7684\u3002")),(0,n.kt)("p",null,"\u300aSnapchat\u300b\u7684\u6a21\u677f\u53ea\u80fd\u5728PC\u7aef\u5236\u4f5c\uff0c\u300aReality World\u300b\u5219\u53ef\u4ee5\u53ca\u65f6\u521b\u4f5c\u300aSnapchat\u300b\u7c7b\u4f3c\u7684\u6a21\u677f\uff0c\u5e76\u4e14\u53ef\u4ee5\u9009\u62e9\u66f4\u4e30\u5bcc\u7684\u529f\u80fd\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u300aReality World\u300b\u9700\u8981\u652f\u6301\u4efb\u610f\u7684\u7ec4\u4ef6\u4f7f\u7528\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u4efb\u610f\u534f\u4f5c\uff0c\u8fd9\u6837\u624d\u80fd\u4e0d\u9650\u5236\u521b\u4f5c\uff0c\u4e0d\u7136\u5c31\u4f1a\u5f88\u5bb9\u6613\u5c40\u9650\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u7ec4\u4ef6\u5305\uff0c\u6216\u8005\u4e00\u4e9b\u7279\u5b9a\u7684\u4e92\u52a8\u7c7b\u578b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4efb\u610f\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u901a\u4fe1\u548c\u7ec4\u5408\u662fReality World\u72ec\u7279\u7684\u529f\u80fd\uff0c\u5b83\u80fd\u591f\u91ca\u653e\u521b\u4f5c\u8005\u65e0\u9650\u7684\u521b\u610f"),"\u3002"),(0,n.kt)("p",null,"XR\u8bbe\u5907\u4e0a\u7684\u521b\u4f5c\u7528\u6237\u5fc5\u987b\u8d2d\u4e70\u8d44\u6e90\uff0c\u56e0\u4e3a\u4ed6\u4eec\u53ea\u80fd\u57fa\u4e8e\u5df2\u6709\u7684\u8d44\u6e90\u8fdb\u884c\u521b\u4f5c\uff0c\u5f53\u7136\u6709\u4e00\u4e9b\u8d44\u6e90\u5305\u6216\u8005\u7ec4\u4ef6\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5316\u751f\u6210\u5185\u5bb9\u7684\uff0c\u8fd9\u7c7b\u7ec4\u4ef6\u53ef\u4ee5\u751f\u6210\u4e00\u4e9b\u968f\u673a\u4e0d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u8d44\u6e90\u7684\u7c7b\u578b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u8d44\u6e90\uff1a\u6a21\u578b\uff08\u5982\u6811\u6728\u3001\u6c7d\u8f66\u3001\u5f13\u7bad\u7b49\uff09\u3001\u7eb9\u7406\u3001\u7c92\u5b50\u7279\u6548\u3001\u52a8\u753b\u7b49\uff0cReality World\u5b98\u65b9\u5e94\u8be5\u63d0\u4f9b\u8f83\u591a\u7684\u57fa\u7840\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u529f\u80fd\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u662f\u6700\u57fa\u672c\u7684\u884c\u4e3a\uff0c\u5b83\u4eec\u662f\u7528\u6237\u770b\u4e0d\u89c1\u7684\u903b\u8f91\u4ee3\u7801\uff0c\u5b83\u4eec\u7528\u6765\u63a7\u5236\u7269\u4f53\u5728\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u884c\u4e3a\uff1b\u4e0d\u540c\u7ec4\u4ef6\u5305\u4e4b\u95f4\u7684\u7ec4\u4ef6\u53ef\u4ee5\u4efb\u4f55\u7ec4\u5408\uff0c\u521b\u4f5c\u8005\u9700\u8981\u533a\u5206\u5b83\u4eec\u7684\u529f\u80fd\uff0c\u624d\u80fd\u751f\u6210\u66f4\u597d\u7684\u5408\u7406\u7684\u4ea4\u4e92\u903b\u8f91\u3002\u8fd9\u662f\u521b\u4f5c\u4f53\u9a8c\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u90e8\u4ef6\u6216\u8005\u7269\u4f53\uff0c\u7531\u4e00\u5b9a\u7684\u7ec4\u4ef6\u7ec4\u5408\u5f62\u6210\uff0c\u5177\u6709\u67d0\u4e9b\u7279\u5b9a\u903b\u8f91\u529f\u80fd\u7684\u6e38\u620f\u5bf9\u8c61\u6216\u8005\u5b9e\u4f53\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u662f\u76f4\u63a5\u5b58\u5728\u4e8e\u6e38\u620f\u573a\u666f\u7ed3\u6784\u4e2d\u7684\u5143\u7d20\uff0c\u8fd9\u4e9b\u7269\u4f53\u53ef\u80fd\u5305\u542b\u6a21\u578b\u3001\u52a8\u753b\u3001\u4ee5\u53ca\u80fd\u591f\u826f\u597d\u63a7\u5236\u8fd9\u4e9b\u6a21\u578b\u53ca\u5176\u884c\u4e3a\u7684\u7ec4\u4ef6\u7ec4\u5408\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u7528\u6237\u76f4\u63a5\u653e\u7f6e\u5728\u573a\u666f\u4e2d\u5c31\u53ef\u4ee5\u4f7f\u7528\u7684\uff0c\u7c7b\u4f3c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5f53\u4e2d\u7684\u7269\u4f53\uff1b\u5b83\u4eec\u6709\u4e9b\u4e5f\u662f\u7528\u4e8e\u5e2e\u52a9\u521b\u4f5c\u4e00\u4e2a\u573a\u666f\u7684\u7ed3\u6784\u6027\u7684\u7ec4\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u5305\u542bTAG\u7684Entity\uff0c\u4e00\u4e2aNPC\u602a\u7269\u7b49\uff1b\u4e5f\u5305\u542b\u4e00\u4e9b\u7279\u6b8a\u5185\u7f6e\u529f\u80fd\u7684\u90e8\u4ef6\uff0c\u4f8b\u5982Layer\u8868\u7b49\u3002")),(0,n.kt)("h4",{id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b"},"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u8005\u9996\u5148\u6d4f\u89c8Creation\u5546\u5e97\uff0c\u4e0b\u8f7d\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u57fa\u672c\u7684\u8d44\u6e90\uff0c\u5982\u4e0a\u9762\u4ecb\u7ecd\u7684\u9759\u6001\u8d44\u6e90\u3001\u529f\u80fd\u7ec4\u4ef6\u548c\u7269\u4f53\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5c06\u5176\u62d6\u5165\u521d\u59cb\u7684\u7a7a\u573a\u666f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u9009\u62e9\u7269\u4f53\u5bf9\u5176\u5c5e\u6027\u8fdb\u884c\u7f16\u8f91\uff0c\u5176\u4e2d\u53ef\u4ee5\u5bf9\u5176\u6dfb\u52a0\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u6309\u7c7b\u578b\u8fdb\u884c\u7ec4\u7ec7\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u6709\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\u53ca\u8bf4\u660e\uff0c\u8bf4\u660e\u5e94\u8be5\u600e\u6837\u4f7f\u7528\u8be5\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u7ec4\u4ef6\u7684\u5c5e\u6027\u53c2\u6570\u7b49\uff0c\u7ec4\u4ef6\u901a\u8fc7\u53c2\u6570\u6765\u6539\u53d8\u7269\u4f53\u7684\u884c\u4e3a\u6216\u8005\u89c6\u89c9\uff0c\u4f8b\u5982\u5982\u679c\u662f\u7a0b\u5e8f\u5316\u751f\u6210\u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u751f\u6210\u4e0d\u540c\u7684\u573a\u666f\uff0c\u5982\u679c\u662f\u7c92\u5b50\u7279\u6548\u7ec4\u4ef6\uff0c\u5219\u5f62\u6210\u4e0d\u540c\u7684\u89c6\u89c9\u6548\u679c"),(0,n.kt)("li",{parentName:"ul"},"\u64ad\u653e\u9884\u89c8"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u94fe\u63a5\u53d1\u9001\u7ed9\u597d\u53cb"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u70b9\u51fb\u94fe\u63a5\u52a0\u5165\u4e00\u8d77\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u597d\u53cb\u5177\u6709\u6743\u9650\uff0c\u53ef\u4ee5\u8fdb\u884c\u5171\u540c\u7f16\u8f91\uff0c\u8fd9\u4e9b\u7f16\u8f91\u4e5f\u53ef\u4ee5\u662f\u540c\u65f6\u5728\u7ebf\u534f\u540c\u7684")),(0,n.kt)("h3",{id:"153-\u5f00\u53d1\u8005"},"1.5.3 \u5f00\u53d1\u8005"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u53ea\u80fd\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5fc5\u987b\u652f\u6301\u67d0\u4e2a\u6807\u51c6\uff0c\u5f53\u7136\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u652f\u6301\u591a\u4e2a\u6807\u51c6\uff0c\u6765\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u548c\u7ec4\u4ef6\u662f\u9694\u79bb\u7684\u3002\u9664\u6765\u81ea\u6807\u51c6\u4e4b\u5916\u7684\u7b26\u53f7\uff0c\u5176\u4ed6\u7b26\u53f7\u90fd\u662f\u79c1\u6709\u53d8\u91cf\u3002"),(0,n.kt)("h3",{id:"154-\u6807\u51c6\u4f5c\u8005"},"1.5.4 \u6807\u51c6\u4f5c\u8005"),(0,n.kt)("p",null,"\u67d0\u4e2a\u6807\u51c6\u7684\u8d1f\u8d23\u4eba\uff0c\u5f53\u7136\u6807\u51c6\u53ef\u4ee5\u8f6c\u5356\uff0c\u5f53\u524d\u8d1f\u8d23\u4eba\u4e0d\u4e00\u5b9a\u662f\u521b\u59cb\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u6807\u51c6\u4e0d\u4e00\u5b9a\u9700\u8981\u7f16\u7a0b\uff0c\u5b83\u4ec5\u4ec5\u6d89\u53ca\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u62bd\u8c61\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u3002\u56e0\u6b64\uff0c\u4e0d\u5177\u5907\u7f16\u7a0b\u80fd\u529b\uff0c\u4f46\u662f\u5177\u6709\u8f83\u5f3a\u62bd\u8c61\u80fd\u529b\u7684\u4eba\u4e5f\u53ef\u4ee5\u521b\u5efa\u548c\u7ef4\u62a4\u6807\u51c6\u3002\u4f46\u662f\u4ece\u66f4\u597d\u7684\u6570\u636e\u7ed3\u6784\u5b9a\u4e49\u89d2\u5ea6\uff0c\u7531\u7f16\u7a0b\u4eba\u5458\u7ef4\u62a4\u6807\u51c6\u662f\u6700\u5408\u9002\u7684\uff0c\u4f46\u662f\u7f16\u7a0b\u4eba\u5458\u7684\u62bd\u8c61\u80fd\u529b\u5f80\u5f80\u4e0d\u591f\u3002\u6240\u4ee5\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u662f\u67d0\u4e2a\u6807\u51c6\u540e\u9762\u6709\u62bd\u8c61\u80fd\u529b\u8f83\u5f3a\u548c\u7f16\u7a0b\u80fd\u529b\u8f83\u5f3a\u4e24\u8005\u7684\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.11\u548c4.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c"},"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f88\u663e\u7136\uff0c\u8fd9\u79cd\u7531\u7528\u6237\u9a71\u52a8\u7684\u5168\u65b0\u4f53\u9a8c\u9700\u6c42\uff0c\u7528\u5f53\u4e0b\u7684\u6280\u672f\u67b6\u6784\u662f\u505a\u4e0d\u5230\u7684\uff0c\u800c\u4e14\u5b83\u7684\u9650\u5236\u7684\u6839\u6e90\u6765\u6e90\u4e8e\u66f4\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u3002\u5728\u8fd1\u51e0\u5341\u5e74\u7684\u8ba1\u7b97\u673a\u65f6\u4ee3\u4e2d\uff0c\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u53d1\u751f\u592a\u6839\u672c\u6027\u53d8\u5316\uff0c\u4f8b\u5982\u6211\u4eec\u80fd\u611f\u77e5\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u8bd1\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u4e00\u4e9b10\u5e74\u524d\u7684\u7ecf\u5178\u8457\u540d\u57fa\u672c\u4e0a\u73b0\u5728\u8fd8\u662f\u9002\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\u4e5f\u6ca1\u6709\u9769\u547d\u6027\u7684\u53d8\u5316\uff0c\u4e0d\u4ec5\u81f32010\u5e74\u4e4b\u540e\u5f88\u5c11\u63a8\u51fa\u5168\u65b0\u7684\u8bed\u8a00\uff0c\u5927\u90e8\u5206\u8bed\u8a00\u8bbe\u8ba1\u4e5f\u53ea\u662f\u9488\u5bf9\u4e00\u4e9b\u5f00\u53d1\u4f53\u9a8c\u5c42\u9762\u7684\u9009\u62e9\uff0c\u5f88\u591a\u8bed\u8a00\u7684\u6838\u5fc3\u601d\u60f3\u751a\u81f3\u65e9\u57282000\u5e74\u4e4b\u524d\u5c31\u786e\u5b9a")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"add",src:l(958).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u662f\u8ba1\u7b97\u67b6\u6784\u6700\u91cd\u8981\u7684\u6307\u5411\uff0c\u56e0\u4e3a\u5b83\u4eec\u8fde\u63a5\u8ba1\u7b97\u673a\u786c\u4ef6\u548c\u5e94\u7528\u8f6f\u4ef6\uff0c\u5b83\u4eec\u7684\u53d8\u9769\u5f80\u5f80\u80fd\u591f\u51b3\u5b9a\u4e0a\u5c42\u8f6f\u4ef6\u5f62\u6001\u7684\u53d8\u9769\uff0c\u4ece\u800c\u51b3\u5b9a\u6280\u672f\u5e26\u7ed9\u6d88\u8d39\u8005\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f53\u5143\u5b87\u5b99\u5e26\u6765\u771f\u6b63\u5927\u89c4\u6a21\u3001\u4e92\u64cd\u4f5c\u3001\u5927\u5e76\u53d1\u7b49\u7b49\u8fd9\u4e9b\u4f20\u7edf\u8ba1\u7b97\u6a21\u578b\u4e0d\u80fd\u5e94\u4ed8\u7684\u9700\u6c42\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5168\u65b0\u7684\u601d\u8def\uff0c\u5728\u8ba1\u7b97\u67b6\u6784\u5c42\u9762\u521b\u9020\u5168\u65b0\u7684\u589e\u91cf\u4ef7\u503c\uff0c\u624d\u6709\u673a\u4f1a\u9a71\u52a8\u6574\u4e2a\u5143\u5b87\u5b99\u7684\u53d8\u9769\u3002"),(0,n.kt)("h1",{id:"2-reality-interoperable-system"},"2. Reality Interoperable System"),(0,n.kt)("p",null,"\u7ed3\u6784\u62bd\u8c61\uff0c\u5bf9\u4e8eXR\u7aef\u7684\u9009\u62e9\uff0c\u5982\u679c\u5361\u5305\u592a\u591a\uff0c\u4f1a\u5bfc\u81f4\u9009\u62e9\u64cd\u4f5c\u5f88\u590d\u6742\uff0c\u53c2\u8003\u6dd8\u5b9d\u8d2d\u7269\uff0c\u5927\u5bb6\u4f1a\u628a\u60f3\u4e70\u7684\u5546\u54c1\u653e\u8fdb\u8d2d\u7269\u8f66\uff0c\u6700\u540e\u4e00\u6b21\u6027\u4ed8\u6b3e"),(0,n.kt)("p",null,"\u8ba9\u7528\u6237\u5728\u624b\u673a\u7aef\u5750\u597d\u5f52\u7c7b\uff0c\u7cbe\u9009\u51fa\u786e\u5b9a\u6216\u8005\u5927\u6982\u7387\u4f1a\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7136\u540e\u7b80\u5316\u5b9e\u9645\u7684\u9009\u62e9\uff0c\u751a\u81f3\u901a\u8fc7\u66f4\u52a0\u53cb\u597d\u7684\u547d\u540d\u89c4\u8303\u6765\u4f7f\u7528\u8bed\u8a00\u9009\u62e9"),(0,n.kt)("p",null,"\u603b\u4e4b\u5c31\u662f\u9700\u8981\u66f4\u597d\u7684\u7c7b\u578b\u5316\uff0c\u5e76\u4e14\u5c06\u7528\u6237\u5bf9\u8d44\u6e90\u7684\u9009\u62e9\u8fc7\u7a0b\u4e2d\uff0c\u878d\u5165\u5206\u7c7b\uff0c\u5f62\u6210\u4e00\u4e2a\u5929\u7136\u7684\u7b5b\u9009\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u5b9a\u4e49\u521b\u4f5c\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u4ec5\u4ec5\u662fCreate\u4e2d\u7684\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u50cf\u5907\u5fd8\u5f55\u7b14\u8bb0\u4e00\u6837\u968f\u65f6\u8bb0\u5f55"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u6e90\u7684\u9009\u62e9\u51c6\u5907\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u770b\u522b\u4eba\u7684\u521b\u4f5c\u4e5f\u662f\u521b\u4f5c\u601d\u8003\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u903b\u8f91\u4e0a\u7684\u7ec4\u7ec7\u53ef\u80fd\u6709\u4e00\u90e8\u4efd\u662f\u975e\u89c6\u89c9\u76f8\u5173\u7684\uff0c\u6240\u4ee5\u8d44\u6e90\u7ba1\u7406\u672c\u8eab\u8981\u878d\u5165\u521b\u4f5c\u8fc7\u7a0b\uff0c\u5373\u5b83\u4e0d\u5149\u662f\u8d44\u6e90\u7ba1\u7406\uff0c\u4e5f\u5305\u542b\u4e00\u5b9a\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f8b\u5982\u6545\u4e8b\u5927\u7eb2\u7ed3\u6784\u7b49\u7b49\uff0c\u5c31\u50cf\u7b56\u5212\u5728\u7ec4\u7ec7\u8868\u683c\u7684\u65f6\u5019\uff0c\u6bd4\u5982\u7f16\u5199\u4eba\u7269\u6545\u4e8b\u5bf9\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u80fd\u4ec5\u4f9d\u8d56\u4e8e\u8d44\u6e90\u8d2d\u4e70+XR\u7aef\u9009\u62e9\u8fd9\u6837\u7684\u4f20\u7edf\u6a21\u5f0f\uff0c\u5373\u4ea4\u4e92\u590d\u6742\uff0c\u4e5f\u4e0d\u7b26\u5408\u5b9e\u9645\u7684\u521b\u4f5c\u6d41\u7a0b")),(0,n.kt)("h2",{id:"21-creation-scene-description"},"2.1 Creation Scene Description"),(0,n.kt)("p",null,"\u9700\u8981\u52a0\u5165\u7528\u6237\u7248\u6743\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"USD\u7684asset resolution\u673a\u5236\uff0c\u4f7f\u5f97\u53ef\u4ee5\u76f4\u63a5\u52a0\u8f7dcreation.id\u7684\u5185\u5b58\uff0c\u800c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u52a0\u8f7d\u6a21\u5757\uff0c\u4f46\u662f\u9700\u8981\u5728\u81ea\u5b9a\u4e49resolution\u4e2d\u52a0\u5165\u6743\u9650\u9a8c\u8bc1\uff0c\u4f8b\u5982\u4f20\u5165\u6d88\u8d39\u7684app\u4ee5\u53ca\u7528\u6237\u4fe1\u606f\uff08Reality ID\uff09\u3002"),(0,n.kt)("p",null,"USDZ\u53ef\u80fd\u662f\u5c06\u4e00\u4e9bBehavior\u8f6c\u6362\u4e3aSchema\uff0c\u56e0\u4e3a\u8fd9\u4e9bSchema\u662fC++\u5e93\uff0c\u6240\u4ee5\u9700\u8981\u5c06USD\u7684C++\u5e93\u653e\u8fdbiOS\u7cfb\u7edf\u4e2d\uff1b\u867d\u7136USD\u63d0\u4f9b\u6709Python binding\uff0c\u4f46\u662f\u5b83\u53ea\u662f\u63a5\u53e3\u7684\u5c01\u88c5\uff0c\u56e0\u4e3aUSD\u672c\u8eab\u4e5f\u662f\u4e00\u95e8\u8bed\u8a00\uff0c\u8bed\u8a00\u672c\u8eab\u9700\u8981\u89e3\u91ca\u6216\u8005\u7f16\u8bd1\uff0cUSD\u662f\u5c06\u65b0\u7684Schema\u751f\u6210\u89e3\u6790\u7684C++\u6587\u4ef6\uff0c\u6240\u4ee5\u9700\u8981\u653e\u7f6e\u5728\u8fd0\u884c\u65f6\uff0c\u6240\u4ee5\u5c31\u4e0d\u80fd\u52a8\u6001\u5b9a\u4e49\uff0c\u53ea\u80fd\u662f\u7cfb\u7edf\u7ea7\u522b\u7684Schema\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u811a\u672c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u8fd8\u662f\u9700\u8981\u589e\u52a0\u4e00\u5c42\u89e3\u6790\uff1b"),(0,n.kt)("p",null,"\u4e3a\u6b64USD\u6587\u4ef6\u4e2d\u9700\u8981\u5305\u542b\u4e00\u4e9b\u975eUSD\u7684\u7247\u6bb5\uff0c\u4f8b\u5982\u5b9a\u4e49\u4e00\u4e2a\u7279\u6b8a\u7684Component\u6216\u8005Model\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7asset resolution\u6765\u4e0eUSD\u4e00\u8d77\u9002\u914d\u5de5\u4f5c\u3002\u8fd9\u4e00\u90e8\u5206\u53ef\u4ee5\u4e0d\u662fUSD\u8bed\u8a00\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u5b9a\u4e49\u7684\u8bed\u6cd5\uff1b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aUSD\u6587\u4ef6\u4e0d\u5e94\u8be5\u8ba9\u7528\u6237\u770b\u5230\u548c\u7f16\u8f91\uff0c\u7528\u6237\u770b\u5230\u7684\u662f\u5de5\u7a0b\u6216\u8005\u53ef\u89c6\u5316\u7684\u63cf\u8ff0\uff0c\u6216\u8005\u5c5e\u6027\u8868\u8ff0\u3002\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u4e5f\u4e0d\u9700\u8981\u7f16\u8f91\u8fd9\u4e48\u590d\u6742\u7684\u7ed3\u6784\uff0cUSD\u672c\u8d28\u4e0a\u8fd8\u662f\u9762\u5411\u6570\u636e\u7ed3\u6784\u6216\u8005\u7a0b\u5e8f\u5458\u7684\uff0cRW\u7684\u7ed3\u6784\u5e94\u8be5\u66f4\u7b80\u5355\u3001\u6241\u5e73\u3002"),(0,n.kt)("h3",{id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8"},"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h3",{id:"212-\u5185\u5b58\u5206\u5e03\u5f0f"},"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5c3d\u91cf\u907f\u514d\u5185\u5b58\u4e2d\u8f83\u5927\u7684\u5c42\u6b21\u6027\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e94\u8be5\u90fd\u662f\u6241\u5e73\u7684\uff0c\u76f8\u5173\u6027\u901a\u8fc7\u7ec4\u4ef6\u901a\u4fe1\u6765\u5b9e\u73b0\u3002\u6240\u6709\u6570\u636e\u90fd\u662f\u6241\u5e73\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f51\u683c\u3001\u6750\u8d28\u3001\u52a8\u753b\u7b49\u6570\u636e\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u5185\u90e8\u5b58\u5230\u5927\u91cf\u76f8\u5173\u6027\u3001\u5f15\u7528\u7b49\uff0c\u5982\u679c\u5c06\u5b83\u4eec\u5b58\u50a8\u4e3a\u6241\u5e73\u7684\uff0c\u5219\u89e3\u6790\u4ee3\u7801\u7684\u6548\u7387\u4f1a\u6bd4\u8f83\u4f4e\uff0c\u901a\u5e38\u8fd9\u79cd\u7d27\u8026\u5408\u7684\u6570\u636e\u90fd\u662f\u4f7f\u7528OOP\u7684\u65b9\u5f0f\u6765\u89e3\u6790\u548c\u6267\u884c\u8ba1\u7b97\u3002\u8fd9\u79cd\u6570\u636e\u6211\u4eec\u5c31\u4fdd\u7559\u4f20\u7edf\u7684\u65b9\u5f0f\uff0c\u4f7f\u7528USD\u6765\u4fdd\u5b58\u8fd9\u4e9b\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6211\u4eec\u5b58\u50a8\u7cfb\u7edf\u91cc\u9762\u4f1a\u6709\u4e24\u7c7b\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662fUSD\uff0c\u7528\u6765\u89e3\u6790\u4f20\u7edf\u7684\u6a21\u578b\u3001\u52a8\u753b\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5355\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662f\u903b\u8f91\u90e8\u5206")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5176\u4ed6\u4e00\u4e9b\u590d\u6742\u7ed3\u6784\uff0c\u4f8b\u5982\u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u3001AI\u7b49\uff0c\u5982\u679c\u8fd9\u4e9b\u89c4\u5219\u662f\u76f8\u5bf9\u56fa\u5b9a\u7684\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u5355\u72ec\u7684\u683c\u5f0f\u5b58\u50a8\uff0c\u5b83\u4eec\u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u50cf\u7c7b\u4f3cUSD\u90a3\u6837\u7684\u6587\u4ef6\u5f62\u5f0f\u5b58\u50a8\uff0c\u7136\u540e\u5b9e\u4f53\u5bf9\u8c61\u6309\u5355\u72ec\u7684\u673a\u5236\u52a0\u8f7d\u5b83\u4eec\u5e76\u8fdb\u884c\u89e3\u6790\u3002\u4f1a\u5b9a\u4e49\u4e00\u4e9b\u4e13\u95e8\u7684\u52a0\u8f7d\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u64cd\u4f5c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5185\u5b58\u4e2d\u8981\u5c3d\u91cf\u907f\u514d\u4f7f\u7528\u5c42\u6b21\u7ed3\u6784\u53bb\u805a\u5408\u591a\u4e2a\u6570\u636e\uff0c\u9664\u4e86\u50cfUSD\u8fd9\u79cd\u4f20\u7edf\u7684\u6570\u636e\u9664\u5916\uff0c\u5f53\u7136\u5bf9\u4e8eUSD\uff0c\u6211\u4eec\u4e5f\u8981\u5c3d\u91cf\u5229\u7528\u6570\u636e\u9a71\u52a8\u7684\u7279\u6027\u5c3d\u91cf\u628a\u4e0d\u76f8\u5173\u72ec\u7acb\u7684\u6570\u636e\u62c6\u5f00\u3002\u5c3d\u91cf\u907f\u514d\u8f83\u5927\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("h2",{id:"22-creation-script"},"2.2 Creation Script"),(0,n.kt)("p",null,"Creation\u6709\u4e00\u4e2a\u6838\u5fc3\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5e94\u8be5\u50cfLua\u4e00\u6837\u7b80\u5355\uff0c\u8f7b\u91cf\u7684\u8fd0\u884c\u65f6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8bf4\u660e\u6587\u6863\u53ea\u670950\u9875pdf\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u53ea\u9700\u8981\u4e86\u89e3\u8fd920\u9875\u6587\u6863\uff0c\u4e0d\u518d\u9700\u8981\u9605\u8bfb\u5176\u4ed6\u8d44\u6599\u5df2\u5b66\u4e60\u66f4\u9ad8\u7ea7\u7684\u6280\u5de7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u540c\u65f6\u9762\u5411\u4e13\u4e1a\u5f00\u53d1\u8005\u548c\u666e\u901a\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u5c3d\u53ef\u80fd\u5c11\u7684\u7cfb\u7edf\u5c42API\uff0c\u4e0d\u8981\u5168\u90e8\u66b4\u9732\u5f15\u64ce\u5c42\u7684API\uff0c\u751a\u81f3\u53ef\u4ee5\u5c06\u5f15\u64ce\u5c42\u7684API\u4fee\u6539\u4e0d\u540c\u7684\u6613\u4e8e\u4e1a\u52a1\u4fa7\u7406\u89e3\u7684API\u540d\u5b57\uff0c\u5b83\u7684\u6240\u6709API\u5e94\u8be5\u50cfHoudini\u4e00\u6837\uff0c\u5168\u90e8\u4e13\u6ce8\u4e8e\u4e1a\u52a1\uff0c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u4e86\u89e3\u7684\u5c31\u4e0d\u66b4\u9732\u7ed9\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"Creation Script\u7684\u6838\u5fc3\u76ee\u6807\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u8981\u6784\u5efa\u4e00\u5957\u80fd\u591f\u4fbf\u4e8e\u666e\u901a\u7528\u6237\u7f16\u8f91\u3001\u548c\u5171\u4eab\u903b\u8f91\u7684\u67b6\u6784\uff1b\u6240\u4ee5\u4ed6\u5fc5\u987b\u80fd\u591f\u52a8\u6001\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u6b21\u8981\u76ee\u6807\u662f\u7b80\u5316\u5f00\u53d1\u8005\u7684\u5f00\u53d1\u4f53\u9a8c\uff0c\u4f8b\u5982\u53ea\u4e13\u6ce8\u4e8e\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u7ec4\u7ec7\u8bbe\u8ba1\uff0c\u518d\u6bd4\u5982\u7b80\u5316\u591a\u7ebf\u7a0b\u7684\u5f00\u53d1\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u611f\u77e5\u4e0d\u5230\u5e76\u53d1\u7f16\u7a0b\uff1b\u4f8b\u5982\u4e0d\u80fd\u4e3a\u4e86\u65b9\u4fbf\u5bf9Component \u8fdb\u884c\u7ba1\u7406\uff0c\u5c31\u8981\u6c42\u7528\u6237\u53bb\u914d\u7f6e\u4e00\u4e2a\u5305\u5f15\u7528\u6587\u4ef6\uff0c\u800c\u5e94\u8be5\u81ea\u52a8\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u8be5\u662f\u56fe\u7075\u5b8c\u5907\u7684\uff0c\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u4ed6\u5e94\u8be5\u57fa\u4e8e\u4e00\u4e2a\u5df2\u6709\u7684\u811a\u672c\u8bed\u8a00\uff0c\u4f7f\u4ed6\u4e13\u6ce8\u4e8e\u4e0a\u5c42\u67b6\u6784\uff0c\u800c\u4e0d\u662f\u53bb\u6784\u5efa\u4e00\u5957\u5e95\u5c42\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5bf9\u8c61\u7684\u6784\u5efa\u5728\u5bbf\u4e3b\uff0c\u811a\u672c\u4e3b\u8981\u505a\u8f7b\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5783\u573e\u56de\u6536\uff0c\u6240\u6709\u5806\u4e0a\u7684\u5bf9\u8c61\u5747\u6709\u5bbf\u4e3b\u5206\u914d\u548c\u7ba1\u7406")),(0,n.kt)("p",null,"\u4f20\u7edf\u8bed\u8a00\u51e0\u4e4e\u90fd\u662f\u4e3a\u4e86\u9762\u5411\u5bf9\u8c61\u800c\u751f\u7684\uff0c\u6240\u4ee5\u5305\u542b\u5f88\u591a\u4e3a\u652f\u6301\u9762\u5411\u5bf9\u8c61\u7684\u529f\u80fd\uff0c\u5982\u679c\u6570\u636e\u9a71\u52a8\u662f\u9700\u8981\u7684\u6838\u5fc3\uff0c\u662f\u4e0d\u662f\u5e94\u8be5\u6709\u4e00\u79cd\u65b0\u7684\u8bed\u8a00\uff0c\u76ee\u524d\u770b\u6765Lua\u66f4\u63a5\u8fd1\u8fd9\u79cd\u8bed\u8a00"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u7528\u9014\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u7528\u4e8e\u68c0\u67e5ECS\u7684\u7ed3\u6784\uff0c\u4e0d\u5408\u6cd5\u7684\u7c7b\u7ed3\u6784\u4e0d\u80fd\u88ab\u52a0\u5165\u5230\u6700\u7ec8\u7a0b\u5e8f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u68c0\u67e5Component \u6570\u636e\u5185\u5b58\u5206\u914d\u5927\u5c0f\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u4e8e\u5c06\u5e95\u5c42\u9762\u5411\u5bf9\u8c61\u7684\u80fd\u529b\u7981\u6b62\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u4fdd\u6301\u5e95\u5c42\u80fd\u529b\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u4f7f\u7528")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7c7b\u578b\u68c0\u67e5")),(0,n.kt)("p",null,"TypeScript\u6709\u5f88\u597d\u7684\u7684\u7c7b\u578b\u68c0\u67e5\uff0c\u4f46\u662f\u5f80\u5f80\u5f3a\u7c7b\u578b\u7684\u8bed\u8a00\u4e5f\u6709\u4e00\u5b9a\u7684\u9650\u5236\uff0c\u4f8b\u5982\u4e0d\u5141\u8bb8\u50cflua\u4e00\u6837\uff0c\u5728\u540c\u4e00\u4f5c\u7528\u57df\u5185\u76f8\u540c\u7684\u53d8\u91cf\u540d\u79f0\u6539\u53d8\u7c7b\u578b\uff0c\u53e6\u5916\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u4e00\u822c\u7c7b\u578b\u68c0\u67e5\u8fd9\u79cd\u529f\u80fd\u5728\u8fd0\u884c\u65f6\u4e5f\u662f\u5b58\u5728\u7684\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5bf9\u4e8e\u8fd0\u884c\u65f6\u4e0d\u518d\u5fc5\u987b\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u88ab\u68c0\u67e5\u8fc7\u7684\u6e90\u7801\u6ca1\u6709\u88ab\u4fee\u6539\uff0c\u4e00\u822c\u8bed\u8a00\u4e0d\u4f1a\u628a\u8fd9\u4e2a\u529f\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u53ef\u9009\u9879"),(0,n.kt)("p",null,"\u56e0\u6b64\u6709\u5fc5\u8981\u8bbe\u8ba1\u4e00\u79cd\u7c7b\u578b\u68c0\u67e5\uff0c\u5b83\u53ef\u4ee5\u88ab\u79fb\u9664\uff0c\u4f7f\u5f97\u4ec5\u5728\u7f16\u8f91\u65f6\u53d1\u751f\u4f5c\u7528\uff0c\u800c\u4e00\u65e6\u53d1\u5e03\u4e4b\u540e\uff0c\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u4e0d\u9700\u8981\u8fd9\u4e2a\u7c7b\u578b\u68c0\u67e5\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd8\u662f\u4f1a\u4fdd\u7559\u5168\u90e8\u7684\u6e90\u4ee3\u7801\u4fe1\u606f\u3002\u5e76\u4e14\u81ea\u5b9a\u4e49\u7684\u7c7b\u578b\u68c0\u67e5\u53ef\u4ee5\u5bb9\u8bb8\u66f4\u5c11\u7684\u9650\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u600e\u6837\u4e3aLua\u6dfb\u52a0\u65b0\u7684\u8bed\u6cd5")),(0,n.kt)("p",null,"\u53c2\u8003TypeScript\u76f8\u5bf9\u4e8eJavaScript \u6dfb\u52a0\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"Unity DOTS\u4e3a\u4ec0\u4e48\u6ca1\u6709\u9ed8\u8ba4\u628aSystem\u4e2d\u7684\u5e76\u884c\u6027\u6307\u5b9a\u53bb\u6389\uff0c\u662f\u56e0\u4e3a\u4ed6\u5e0c\u671b\u517c\u5bb9\u4f20\u7edf\u7684Component\u811a\u672c\uff0c\u800c\u6309\u7167\u4f20\u7edf\u7684\u5199\u6cd5\uff0c\u6ca1\u6cd5\u53bb\u63a7\u5236\u884c\u4e3a\uff0c\u6240\u4ee5\u53ea\u80fd\u5f00\u53d1\u8005\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5426\u5219\u5c31\u9700\u8981\u50cfRoblox\u4e00\u6837\uff0c\u9700\u8981\u7528\u6237\u81ea\u5df1\u5c06\u811a\u672c\u6302\u5728entity\u4e0a\uff0c\u8fd9\u5c31\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u907f\u514d\u8ba9\u5f00\u53d1\u8005\u624b\u52a8\u5c06Component\u4e0eSystem\u4e4b\u95f4\u8fdb\u884c\u5173\u8054"),(0,n.kt)("p",null,"Minecraft\u901a\u8fc7\u76f4\u63a5\u5728\u5c5e\u6027\u4e2d\u8fdb\u884c\u7f16\u5199MOLANG\u4ee3\u7801\u6765\u907f\u514d\u8be5\u95ee\u9898"),(0,n.kt)("p",null,"\u4f8b\u5982\u5f00\u53d1\u8005\u770b\u5230\u7684\u6587\u4ef6\u6216\u8005\u5bf9\u8c61\u53ea\u6709Component\uff0c\u8fd9\u6837\u8feb\u4f7f\u5f00\u53d1\u8005\u5bf9\u6570\u636e\u8fdb\u884c\u62bd\u8c61\uff1b"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\uff0c\u6211\u4eec\u9996\u5148\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u8054\u4e00\u4e2aComponent\u548c\u4e00\u4e2aSystem\uff0c\u4ed6\u4eec\u5e94\u8be5\u81ea\u52a8\u5173\u8054\uff0c\u4f8b\u5982\u901a\u8fc7Component\u6765\u6253\u5f00\u5bf9\u5e94\u7684System\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91"),(0,n.kt)("p",null,"Component\u9664\u4e86\u81ea\u8eab\u7684\u903b\u8f91\u5c5e\u6027\uff0c\u53e6\u5916\u4e00\u4e9b\u5c5e\u6027\u7528\u6765\u63a7\u5236\u7cfb\u7edf\u7ed3\u6784\uff0c\u4f8b\u5982System\u6267\u884c\u7684\u987a\u5e8f\u7b49\uff0c\u53ef\u4ee5\u5728Component\u4e2d\u660e\u786e\u533a\u5206\u4e24\u79cd\u6570\u636e\uff0c\u6216\u8005\u8fd9\u4e9b\u56fa\u5b9a\u7ed3\u6784\u7684\u6570\u636e\u5c31\u4ee5\u4e00\u4e2aComponent\u672c\u8eab\u7684Property\u5f62\u5f0f\u663e\u793a\uff0c\u907f\u514d\u5f00\u53d1\u8005\u5199\u9519"),(0,n.kt)("p",null,"\u4f46System\u53ef\u80fd\u9700\u8981\u591a\u4e2aComponent\u7684\u6570\u636e\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u4e00\u4e2aSystem\u5fc5\u987b\u5bf9\u5e94\u4e00\u4e2a\u4e3bComponent\uff08\u5373\u4f7f\u8fd9\u4e2aComponent\u53ef\u80fd\u53ea\u662f\u4e00\u4e2a\u540d\u5b57\uff0c\u800c\u5e76\u6ca1\u6709\u4efb\u4f55\u6570\u636e\uff0c\u662f\u6709\u8fd9\u79cd\u60c5\u51b5\u7684\uff0c\u5c31\u662f\u67d0\u4e9b\u903b\u8f91\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff0c\u4ed6\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5bf9\u591a\u79cd\u903b\u8f91\u8fdb\u884c\u8ba1\u7b97\u7684\u4e00\u4e2a\u7ec4\u5408\u903b\u8f91\uff0c\u4f46\u662f\u8fd9\u79cd\u5e94\u8be5\u5f88\u5c11\u624d\u5bf9\uff0c\u6bd5\u7adf\u5927\u90e8\u5206System\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u81ea\u5df1\uff0c\u5176\u4ed6\u7684\u662f\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff09\uff0c\u8fd9\u6837\u4ecd\u7136\u53ef\u4ee5\u5c06System\u9690\u85cf\u5728Component\u4e2d\uff0c\u4f46\u662fSystem\u81ea\u8eab\u80fd\u591f\u6307\u5b9a\u5f15\u7528\u7684\u5176\u4ed6Component\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff0c\u4e5f\u5373\u662f\u5728\u5b9a\u4e49ArchType\uff0c\u53ef\u4ee5\u5728System\u7684\u9876\u90e8\u4f7f\u7528\u7c7b\u4f3c\u3002"),(0,n.kt)("p",null,"XXXComponent a;"),(0,n.kt)("p",null,"BBBComponent b; "),(0,n.kt)("p",null,"\u7136\u540e\u5728\u6b63\u6587\u4e2d\u5c31\u53ef\u4ee5\u5f15\u7528\u8fd9\u4e9b\u5bf9\u8c61\uff0c\u89e3\u91ca\u5668\u4f1a\u81ea\u52a8\u5c06\u8be5\u53d8\u91cf\u4eceEntity\u4e2d\u8fdb\u884c\u67e5\u8be2\uff0c\u5e76\u4e14\u68c0\u67e5\u5982\u679cEntity\u4e0d\u5305\u542b\u8be5Component\u7684\u65f6\u5019\u8fdb\u884c\u81ea\u52a8\u6dfb\u52a0\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u68c0\u67e5\u5197\u4f59\uff0c\u5373\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u4f7f\u7528\u5219\u4e0d\u9700\u8981\u6dfb\u52a0"),(0,n.kt)("p",null,"\u4f46\u662fComponent\u7684\u7248\u672c\u53f7\u5728\u54ea\u91cc\u8bbe\u7f6e\uff0c\u4f7f\u7528\u660e\u660e\u7a7a\u95f4\u52a0\u7248\u672c\u53f7\uff1f"),(0,n.kt)("p",null,"BBBBComponent(reality:name,1.2.3)"),(0,n.kt)("p",null,"\u600e\u4e48\u9ed8\u8ba4\u6307\u5b9a\uff1f"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u80af\u5b9a\u662f\u5148\u4e0b\u8f7d\u4e86\u4e00\u4e2a\u5305\u542bComponent\u7684\u5305\u518d\u8fdb\u884c\u7f16\u7a0b\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u80fd\u6709\u51b2\u7a81\uff0c\u6240\u4ee5\u6700\u597d\u662f\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u800c\u4e0d\u662f\u81ea\u52a8\u5206\u914d\uff0c\u56e0\u4e3a\u603b\u6709\u4e00\u4e2a\u5730\u65b9\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u4f7f\u7528\u5355\u72ec\u7684\u914d\u7f6e\u6587\u4ef6\u770b\u8d77\u6765\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python\u5d4c\u5165 (Embed in Python)"),"\u3002Python\u6781\u5176\u6613\u4e8e\u5b66\u4e60\u5e76\u4e14\u88ab\u5e7f\u6cdb\u91c7\u7528\u3002Taichi\u7684\u524d\u7aef\u8bed\u6cd5\u662fPython\u7684\u5b50\u96c6\uff0c\u8fd9\u4f7f\u5f97\u4efb\u4f55\u4e00\u4e2aPython\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u8f7b\u6613\u5730\u5b66\u4e60\u3001\u4f7f\u7528Taichi\u3002\u6211\u4eec\u4f7f\u7528Python AST\u7075\u6d3b\u7684\u81ea\u7701 (inspection) \u673a\u5236\u6765\u628aPython\u7684AST\u8f6c\u5316\u4e3aTaichi\u7684AST\uff0c\u968f\u540e\u8fdb\u5165\u6211\u4eec\u81ea\u5df1\u7684\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7cfb\u7edf\u3002\u5c06Taichi\u7684\u524d\u7aef\u5d4c\u5165\u8fdbPython\u6709\u5982\u4e0b\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u8fd0\u884c\u3002\u5d4c\u5165\u5728\u89e3\u91ca\u6027\u7684Python\u8bed\u8a00\u800c\u4e0d\u662f\u7f16\u8bd1\u6027\u7684\u8bed\u8a00\u4e2d\uff0c\u5927\u5927\u65b9\u4fbf\u4e86Taichi\u7a0b\u5e8f\u7684\u8fd0\u884c\uff0c\u56e0\u4e3a\u6bcd\u4f53\u8bed\u8a00\u7684\u9884\u5148\u7f16\u8bd1 (ahead-of-time compilation) \u4e0d\u518d\u9700\u8981\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u91cd\u7528\u5df2\u6709\u7684Python\u57fa\u7840\u8bbe\u65bd\u5e76\u4e0e\u5176\u4ea4\u4e92\uff0c\u5305\u62ecIDE (PyCharm\u7b49)\u3001\u5305\u7ba1\u7406\u5668 (pip)\u3001\u5df2\u6709\u7684Python\u5305\uff08\u5982matplotlib\u3001numpy\u3001torch\u7b49\uff09\u3002")),(0,n.kt)("p",null,"\u5373\u65f6 (Just-in-time, JIT) \u7f16\u8bd1\u3002JIT\u4e0d\u4f46\u63d0\u4f9b\u4e86\u6781\u5f3a\u7684\u7f16\u7a0b\u7075\u6d3b\u6027\uff0c\u8fd8\u5ef6\u8fdf\u4e86\u201d\u7f16\u8bd1\u671f\u5e38\u91cf\u201c\u7684\u9700\u6c42\u3002\u6bd4\u5982\uff0c\u5728\u7269\u7406\u6a21\u62df\u5668\u4e2d\uff0c\u65f6\u95f4\u6b65\u957f \u2206t \u901a\u5e38\u88ab\u5b9e\u73b0\u6210\u8fd0\u884c\u65f6\u53d8\u91cf\uff0c\u800c\u4f7f\u7528JIT\u7684\u65f6\u5019\u5219\u53ef\u4ee5\u88ab\u5904\u7406\u6210\u7f16\u8bd1\u671f\u5e38\u91cf\u3002\u8fd9\u5141\u8bb8\u7f16\u8bd1\u5668\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\uff0c\u5982\u5e38\u91cf\u6298\u53e0 (constant folding)\u3002\u540c\u65f6\uff0cTaichi\u652f\u6301\u6a21\u677f\u5143\u7f16\u7a0b\uff0c\u4f34\u968f\u7740JIT\u7684\u61d2\u60f0\u7f16\u8bd1\u6280\u672f\u5927\u91cf\u8282\u7701\u4e86\u4e0d\u5fc5\u8981\u7684\u7f16\u8bd1\u65f6\u95f4\u3002\u53e6\u5916\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u8fd0\u884cPython\u7684\u73af\u5883\uff0c\u5982\u79fb\u52a8\u7aef\u8bbe\u5907\uff0c\u6211\u4eec\u4e5f\u63d0\u4f9b\u63d0\u524d\u7f16\u8bd1 (Ahead of time, AOT) \u76f8\u5173\u8bbe\u65bd"),(0,n.kt)("p",null,"\u5bf9\u5927\u4f17\u7528\u6237\u3001\u6216\u8005\u504f\u7f8e\u672f\u3001\u827a\u672f\u7c7b\u7528\u6237\uff0c\u6700\u597d\u7684\u811a\u672c\u8bed\u8a00\u662f\u4ec0\u4e48\uff1f\u56fe\u5f62\u5316\u7684\u5417\uff1f\u4ed6\u5e94\u8be5\u5177\u6709\u4e24\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e00\u822c\u7528\u6237\u53cb\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408\u6570\u636e\u9a71\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408DSL\u7f16\u8bd1\u5904\u7406")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff1a")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u662f\u9762\u5411\u4e8b\u4ef6\u7f16\u7a0b\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u5199\u7684\u6240\u6709\u903b\u8f91\u51e0\u4e4e\u90fd\u662f\u5728\u6bcf\u4e00\u4e2aframe\u7684\u67d0\u4e2a\u4e8b\u4ef6\u4e2d\u53d1\u751f\u7684\u4e8b\u60c5\uff0c\u4f8b\u5982\u5728Unreal\u7684\u84dd\u56fe\u4e2d\uff0c\u5b83\u7684\u8d77\u70b9\u4e5f\u662f\u9488\u5bf9\u67d0\u4e2a\u4e8b\u4ef6\uff0c\u8fd9\u6709\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u7684\u7c92\u5ea6\uff0c\u6e38\u620f\u903b\u8f91\u4e2d\uff0c\u51e0\u4e4e\u4e3b\u8981\u903b\u8f91\u90fd\u662f\u4e8b\u4ef6\u9a71\u52a8\uff0c\u56e0\u6b64\u8be6\u7ec6\u7684\u4e8b\u4ef6\u975e\u5e38\u591a\uff0c\u6240\u4ee5\u5927\u90e8\u5206\u90fd\u662f\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u7531\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u72b6\u6001\u673a\u6765\u8fdb\u884c\u7ba1\u7406\uff0cFramework\u5c42\u53ea\u6709\u51e0\u4e2a\u57fa\u672c\u7684\u6e38\u620f\u751f\u547d\u5468\u671f\u4e8b\u4ef6\uff0c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4e4b\u95f4\u6ca1\u6709\u6807\u51c6\uff0c\u6216\u8005\u975e\u5e38\u590d\u6742\uff0c\u4e0d\u65b9\u4fbf\u7ef4\u62a4")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u4e0e\u903b\u8f91\u4e0d\u4e00\u81f4\uff0c\u50cfUE\u7684\u84dd\u56fe\u662f\u57fa\u4e8e\u4e8b\u4ef6\u7f16\u7a0b\uff0c\u5982\u679c\u6211\u4eec\u8981\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\u7ed9\u666e\u901a\u7528\u6237\uff0c\u8fd9\u79cd\u6ca1\u6709\u6807\u51c6\u7684\u4e8b\u4ef6\u5b9a\u4e49\u5e76\u4e0d\u9002\u5408\u8ba9\u7528\u53bb\u53bb\u5b66\u4e60\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u901a\u5e38\u4e5f\u6ca1\u6709\u5fc5\u7136\u7684\u903b\u8f91\u8054\u7cfb\uff0c\u4e0d\u5bb9\u6613\u7406\u89e3\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u53ef\u80fd\u5bf9\u5e94\u591a\u4e2a\u4e8b\u4ef6\uff0c\u663e\u7136\u7528\u6237\u9700\u8981\u4e86\u89e3\u7684\u662f\u903b\u8f91\uff0c\u800c\u975e\u4e8b\u4ef6")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u6240\u4ee5\u5e73\u53f0\u5927\u90e8\u5206\u90fd\u5728\u8bbe\u8ba1\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u4e5f\u4fbf\u4e8e\u7406\u89e3\uff0c\u540c\u65f6\u5b83\u4ee3\u8868\u7684\u4e0d\u662f\u6700\u5c0f\u903b\u8f91\uff0c\u800c\u662f\u903b\u8f91\u6a21\u5757\uff0c\u6240\u4ee5\u4ed6\u5c06\u903b\u8f91\u5185\u90e8\u7684\u5b9e\u73b0\u7ec6\u8282\uff08\u4f17\u591a\u7684\u788e\u7247\u4e8b\u4ef6\uff09\u8fdb\u884c\u9690\u85cf")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4e5f\u4ee3\u8868\u63a5\u53e3\uff0c\u6570\u636e\u7684\u6807\u51c6\u6709\u52a9\u4e8e\u6784\u5efa\u7ed3\u6784\u5316\u8868\u8fbe\uff0c\u662f\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ee5\u4e00\u79cd\u66f4\u6e05\u6670\u7684\u65b9\u5f0f\u7ec4\u7ec7"))),(0,n.kt)("p",null,"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5c31\u50cfHoudini \u4e2d\u9762\u5411Node\u7f16\u7a0b\u4e00\u6837\uff0c\u4e00\u6bb5Python \u4ee3\u7801\u662f\u53d7\u9650\u7684\uff0c\u5b83\u7684\u8f93\u5165\u8f93\u51fa\u662fnode \uff0c\u540c\u65f6\u53c8\u53ef\u4ee5\u4f7f\u7528\u5230python \u672c\u8eab\u7684\u4efb\u610f\u8bed\u8a00\u7279\u6027\u548c\u80fd\u529b\uff1b\u4e0e\u6b64\u7c7b\u4f3c\uff0c\u9762\u5411\u6570\u636e\u7f16\u7a0b\u4e5f\u662f\u9488\u5bf9\u4e00\u4e2a\u7279\u5b9a\u7684\u201c\u6570\u636e\u201d\u7f16\u5199\u811a\u672c\uff0c\u7528\u6237\u7f16\u5199\u7684\u662fSystem\uff0c\u4ed6\u7684\u8f93\u5165\u8f93\u51fa\u662f\u6570\u636eComponent "),(0,n.kt)("p",null,"\u4f46\u8ddf\u4f20\u7edf\u7684ECS\u67b6\u6784\u4e0d\u4e00\u6837\u7684\u662f\uff0c\u5b83\u7684Component \u548cSystem\u4e4b\u95f4\u4e0d\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c\u751a\u81f3\u4e0d\u662f\u81ea\u52a8\u6302\u8f7d\u7684\uff0c\u8fd9\u4e2a\u673a\u5236\u975e\u5e38\u91cd\u8981\uff0c\u4e00\u4e2aComponent \u7406\u8bba\u4e0a\u53ef\u4ee5\u88ab\u591a\u4e2aSystem\u6d88\u8d39\uff0c\u5f53\u7136\u901a\u5e38\u4e00\u4e2a\u7279\u5b9a\u7684Entity\u5b9e\u4f8b\u53ea\u6709\u4e00\u5bf9Component \u4e0eSystem\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u7406\u8bba\u4e0a\u5bf9\u4e00\u4e2a\u5b9e\u4f8b\u7684\u4e00\u4e2a\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u64cd\u4f5c\u903b\u8f91\uff0c\u9664\u975e\u591a\u4e2aSystem\u4e4b\u95f4\u903b\u8f91\u4e0d\u4e00\u6837\uff0c\u4ed6\u4eec\u53ef\u80fd\u504f\u91cd\u6570\u636e\u7684\u67d0\u4e00\u90e8\u4efd\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u6570\u636e\u7684\u7c92\u5ea6\u592a\u5927\u4e86\uff0c\u53ef\u4ee5\u518d\u8fdb\u4e00\u6b65\u7ec6\u5206\uff0c\u5f53\u7136\u53ef\u80fd\u6709\u4e00\u4e9b\u7279\u4f8b\u9700\u8981\u7ef4\u6301\u8f83\u5927\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u4f7f\u5f97app\u5305\u91cc\u53ef\u80fd\u5305\u542b\u4e00\u4e2a\u6570\u636e\u5b9a\u4e49\u7684\u591a\u79cd\u903b\u8f91\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u4f7f\u7528\u81ea\u52a8\u6302\u8f7d\uff0c\u800c\u9700\u8981\u4f9d\u8d56\u4e8e\u7248\u672c\u5236\u5b9a\uff0c\u5728\u5f00\u53d1\u6216\u751f\u6210\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5c06\u4e00\u4e2aSystem\u6dfb\u52a0\u81f3\u4e00\u4e2aEntity\uff0c\u4ed6\u5c31\u751f\u6210\u5bf9\u5e94\u7684System\u5f15\u7528\u548c\u7248\u672c\u53f7\uff0c\u52a0\u8f7d\u7684\u65f6\u5019\u662f\u6839\u636e\u8fd9\u4e2a\u8fdb\u884c\u903b\u8f91\u6302\u8f7d\uff0c\u5f53\u7136\u4e00\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u672c\u8eab\u5728\u9876\u5c42\u4e5f\u4f1a\u8bb0\u5f55\u6240\u6709\u5f15\u7528\u7684Component\u548cSystem\uff0c\u8fd9\u6837\u4fbf\u4e8e\u9884\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6bd4\u5982\u5982\u679c\u6570\u636e\u662f\u6d89\u53ca\u52a8\u753b\uff0c\u5219\u6570\u636e\u5305\u542b\u52a8\u753b\u65f6\u95f4\u548c\u5f53\u524dframe number \u7b49\u52a8\u753b\u4fe1\u606f"),(0,n.kt)("p",null,"\u628a\u6570\u636e\u5f53\u4f5c\u4e00\u4e2a\u7c7b\u4f3cHoudini \u91cc\u9762\u7684\u53ef\u89c6\u8282\u70b9\uff0cSystem\u662f\u53e6\u4e00\u79cd\u7c7b\u578b\u7684\u8282\u70b9\uff0c\u62d6\u52a8\u4efb\u610f\u4e00\u4e2a\u8282\u70b9\u5230\u4e00\u4e2aEntity\u4f1a\u81ea\u52a8\u52a0\u8f7d\u53d8\u91cf\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u7ec4\u4ef6\u7248\u672c\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Creation Script")," "),(0,n.kt)("p",null,"\u5b83\u7684\u8bed\u6cd5\u90e8\u5206\u63a5\u8fd1Lua\uff0c\u4f46\u662f\u56e0\u4e3a\u6240\u6709Table\u5168\u90e8\u7531Table Engine\u63a5\u7ba1\uff0c\u811a\u672c\u4e2d\u53ea\u6709\u7d22\u5f15\u548c\u57fa\u672c\u7c7b\u578b\uff0c\u4e0d\u5b58\u5728\u5806\u4e2d\u5206\u914d\u7684\u5bf9\u8c61\uff0c\u6240\u4ee5\u4e0d\u9700\u8981GC"),(0,n.kt)("p",null,"\u811a\u672c\u53ea\u6709\u7b80\u5355\u7684\u8ba1\u7b97\u548c\u51fd\u6570\u5f62\u5f0f\uff0c\u6240\u6709\u64cd\u4f5c\u5bf9\u8c61\u7edf\u4e00\uff0c\u51fd\u6570\u53ea\u6709\u7b80\u5355\u7684\u6570\u503c\u64cd\u4f5c\uff0c\u5bf9\u8c61\u90fd\u7531\u5e95\u5c42\u5206\u914d"),(0,n.kt)("p",null,"\u811a\u672c\u8d1f\u8d23\u51fd\u6570\u5185\u7684\u6808\u4e0a\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5e95\u5c42\u8d1f\u8d23\u5806\u4e0a\u5185\u5b58\u5206\u914d"),(0,n.kt)("p",null,"\u8fd9\u5f97\u76ca\u4e8e\u7edf\u4e00\u7684\u6570\u636e\u7ed3\u6784\u548c\u5185\u5b58\u7ba1\u7406"),(0,n.kt)("h3",{id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868"},"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u7684\u6838\u5fc3\u610f\u4e49\u5728\u4e8e\uff0c\u8ba9\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u4ea4\u4e92\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u662f\u8fd9\u6837\uff0c\u90a3\u4e48\u6211\u4eec\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5c31\u53ea\u80fd\u4f9d\u8d56\u4e8e\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u6bcf\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u53ea\u80fd\u72ec\u7acb\u5de5\u4f5c\u800c\u4e0d\u80fd\u76f8\u4e92\u4ea4\u4e92\uff08\u5728\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u6d41\u7a0b\u4e2d\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u53d8\u91cf\u8d4b\u503c\u548c\u5f15\u7528\u624b\u52a8\u5efa\u7acb\u8d77\u4e86\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff09")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u9690\u542b\u7684\u903b\u8f91\u662f\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u6d89\u53ca\u7684\u53d8\u91cf\u5e94\u8be5\u8db3\u591f\u5c11\uff0c\u5927\u90e8\u5206\u5e94\u8be5\u662f\u5185\u90e8\u72b6\u6001"),"\uff0c\u4f8b\u5982COC\u4e2d\u7684Cannon\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Damage per second: 11\nHitpoints : 650/650\n\nRange : 4-11tiles\nDamage type : Area Splash\nTargets : Ground\nFavorite target : Any\n")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc-cannon",src:l(7865).Z,width:"2532",height:"1170"}),"\u7b26\u53f7\u8868\u4f7f\u6211\u4eec\u66f4\u52a0\u5c0f\u5fc3\u5730\u5b9a\u4e49\u6211\u4eec\u7684\u53d8\u91cf\uff0c\u4f7f\u5f97\u4e0d\u90a3\u4e48\u968f\u610f\uff0c\u7b26\u53f7\u8868\u7684\u5168\u5c40\u901a\u7528\u6027\u5730\u4f4d\u4f7f\u6211\u4eec\u66f4\u597d\u5730\u5730\u62bd\u8c61\u903b\u8f91\uff0c\u786e\u4fdd\u8bbe\u7f6e\u786e\u5b9e\u7684\u53cd\u5e94\u903b\u8f91\u72b6\u6001\u7684\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7b26\u53f7\u8868\u662f\u4e00\u79cd\u5f88\u597d\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u5f88\u5bb9\u6613\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u7684\u5185\u90e8\u4e34\u65f6\u53d8\u91cf\u548c\u5bf9\u5916\u8868\u73b0\u7279\u5f81\u7684\u91cd\u8981\u72b6\u6001\u53d8\u91cf\u533a\u5206\u51fa\u6765\uff0c\u903b\u8f91\u66f4\u597d\u6e05\u6670\u3002\u4f7f\u5f97\u4ee3\u7801\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ed6\u4eba\u9605\u8bfb\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\nnamespace Global{\n iHP //\u8868\u793a\u8840\u91cf\n iHelath //\n iCoin //\n vfPosition\n sLabelName //\u7528\u4e8eUI\u663e\u793a\u540d\u79f0\n}\n")),(0,n.kt)("p",null,"\u5f53\u7136\u7b26\u53f7\u8868\u66f4\u91cd\u8981\u7684\u4ef7\u503c\u662f\uff0c\u5b9e\u73b0\u7ec4\u4ef6\u4e4b\u95f4\u76f8\u4e92\u8c03\u7528\u7684\u9690\u5f0f\u53c2\u6570\u4f20\u9012\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u901a\u5e38\u662f\u6bd4\u8f83\u5c11\u7684\u53d8\u91cf\uff0c\u5728OOP\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u5373\u662f\u4e24\u4e2a\u7c7b\u4e4b\u95f4\u65b9\u6cd5\u8c03\u7528\u7684\u53c2\u6570\uff0c\u5982\u679c\u6211\u4eec\u4e0d\u533a\u5206\u516c\u5171\u548c\u79c1\u6709\u53d8\u91cf\uff0c\u5219\u53ea\u8981\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u6709\u4f9d\u8d56\uff0c\u5c31\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e0a\u6709\u4e9b\u6570\u636e\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u56e0\u6b64\u5b83\u6709\u5229\u4e8e\u63d0\u5347\u6027\u80fd\uff0c\u53ea\u52a0\u8f7d\u6bcf\u4e2a\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8bbe\u7f6eout\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u5bf9\u5e94\u7684\u5c5e\u6027\u6570\u636e\u4f1a\u88ab\u81ea\u52a8\u586b\u5145\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u624b\u52a8\u7684\u53d8\u91cf\u5b9a\u4e49\u3001\u521d\u59cb\u5316\u548c\u53c2\u6570\u7684\u4f20\u9012\uff0c\u8fd9\u662f\u9690\u5f0f\u51fd\u6570\u8c03\u7528\u7684\u6838\u5fc3\u673a\u5236\u3002\u5f53\u7136\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u4fdd\u8bc1\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\u5e94\u8be5\u540c\u65f6\u5177\u6709\u6d88\u8d39\u8005\u548c\u903b\u8f91\u5904\u7406\uff0c\u5426\u5219\u8fd9\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e2a\u901a\u8fc7\u8bbe\u8ba1\u6765\u89c4\u907f\uff0c\u7f16\u8bd1\u5668\u53ef\u4ee5\u534f\u52a9\u63d0\u793a\uff0c\u56e0\u4e3a\u4e00\u4e2a\u6b63\u5e38\u7684\u8bbe\u8ba1\u80af\u5b9a\u662f\u4e24\u8005\u90fd\u6709\u7684\uff1b\u5f53\u7136\u4e5f\u6709\u53ef\u80fd\u4e00\u4e2a\u7ec4\u4ef6\u65e2\u5145\u5f53\u751f\u4ea7\u8005\u4e5f\u5145\u5f53\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u6700\u6838\u5fc3\u7684\u673a\u5236\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u8fd9\u6837\uff0c\u8981\u60f3\u5728\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u5fc5\u987b\u5b9a\u4e49\u4e00\u79cd\u534f\u8bae\uff0c\u8fd9\u79cd\u534f\u8bae\u901a\u5e38\u5c31\u662f\u4f20\u7edf\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u7684\u5f15\u7528\u673a\u5236\uff0c\u56e0\u4e3a\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u8fd0\u884c\u65f6\u53d8\u91cf\u53ef\u4ee5\u8bc6\u522b\uff0c\u8fd9\u5c31\u9700\u8981\u5728B\u4e2d\u5b9a\u4e49\u516c\u5171\u53d8\u91cf\uff0c\u7136\u540eA\u7ec4\u4ef6\u9700\u8981\u5f15\u7528B\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u5f62\u6210\u8026\u5408\uff0c\u4f46\u662f\u4e0d\u5f15\u7528\uff0c\u8bed\u8a00\u672c\u8eab\u7684\u673a\u5236\u6ca1\u6cd5\u4fdd\u8bc1\u54ea\u6015\u662f\u540c\u4e00\u4e2a\u540d\u5b57\u7684\u53d8\u91cf\u6267\u884c\u540c\u4e00\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u901a\u8fc7\u7b26\u53f7\u8868\uff0c\u6574\u4e2a\u4e8b\u60c5\u53d8\u5f97\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u53d8\u91cf\u53ea\u9700\u8981\u5b9a\u4e49\u76f8\u540c\u7684\u540d\u5b57\uff0c\u800c\u4e0d\u9700\u8981\u5f15\u7528\uff0c\u8fd9\u4e2a\u76f8\u540c\u7684\u540d\u5b57\u7531\u7b26\u53f7\u8868\u4fdd\u8bc1\uff0c\u800c\u4e0d\u662f\u5b57\u7b26\u4e32\uff0c\u56e0\u4e3a\u5b57\u7b26\u4e32\u53c8\u8bbe\u8ba1\u5bf9\u5e94\u7684\u89e3\u6790\uff0c\u5e26\u6765\u89e3\u91ca\u8d1f\u62c5\u3002\u800c\u4f20\u7edf\u7f16\u8bd1\u5668\u4e2d\u7684\u7b26\u53f7\u8868\u5929\u751f\u5c31\u662f\u7528\u6765\u5c06\u591a\u4e2a\u540d\u5b57\u76f8\u540c\u7684\u7b26\u53f7\u6307\u5411\u540c\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4e86\u901a\u7528\u8bed\u8a00\u4e2d\u53ea\u80fd\u901a\u8fc7\u5f15\u7528\u6765\u5b9e\u73b0\u53c2\u6570\u4f9d\u8d56\u548c\u4f20\u9012\uff0c\u800c\u8fd9\u79cd\u4f9d\u8d56\u662f\u5bfc\u81f4\u6ca1\u6cd5\u7b80\u5316\u7f16\u7a0b\u751a\u81f3\u65e0\u4ee3\u7801\u7f16\u7a0b\u7684\u6839\u672c\u539f\u56e0\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7b26\u53f7\u8868\u673a\u5236\u4e0d\u9002\u5408\u901a\u7528\u8bed\u8a00\uff0c\u5b83\u662f\u6e38\u620f\u8fd9\u79cdUpdate\u673a\u5236\u76f8\u7ed3\u5408\u624d\u80fd\u53d1\u6325\u4f5c\u7528\uff0c\u56e0\u4e3a\u4e24\u4e2aUpdate\u4e4b\u95f4\u7684\u65f6\u95f4\u5f88\u5c0f\uff0c\u6709\u53ef\u80fd\u901a\u8fc7\u5e27\u4e4b\u95f4\u7684\u53d8\u91cf\u5171\u4eab\u6765\u5b9e\u73b0\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u3002\u5426\u5219\u8fd9\u79cd\u673a\u5236\u5c31\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cd\u673a\u5236\u5fc5\u987b\u914d\u5408\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u5de5\u4f5c\uff0c\u6bd4\u5982\u5355\u7eaf\u96c6\u6210Lua\u6216\u8005C#\u662f\u4e0d\u591f\u7684\u3002"),(0,n.kt)("h4",{id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868"},"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u4e2d\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u52a8\u6001\u7684\uff0c\u4ee5\u63d0\u5347\u89e3\u91ca\u7684\u6027\u80fd\u3002\u56e0\u4e3a\u7b26\u53f7\u53ef\u80fd\u4f1a\u975e\u5e38\u591a\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u5728\u521b\u5efa\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6839\u636e\u9009\u62e9\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6240\u6709\u7528\u5230\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u52a8\u6001\u751f\u6210\u4e00\u4e2a\u7b26\u53f7\u8868\uff0c\u8fd9\u53ef\u4ee5\u662f\u4e91\u7aef\u7684\u4e00\u4e2a\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u4fee\u6539\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u91cd\u65b0\u751f\u6210\u65b0\u7684\u7b26\u53f7\u8868\u3002"),(0,n.kt)("h4",{id:"2212-\u7b26\u53f7\u8868"},"2.2.1.2 \u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u6240\u6709\u4ea4\u4e92\u90fd\u6765\u6e90\u4e8e\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u57fa\u672c\u4e0a\u5c31\u662f\u4e3a\u4e86\u4ea4\u4e92\u800c\u751f"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f15\u7528\u5c31\u662f\u4e3a\u4e86\u907f\u514d\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u76f4\u63a5\u5f15\u7528\u5f15\u5165\u4e86\u4ee3\u7801\u7f16\u7a0b\u601d\u60f3\uff0c\u9650\u5236\u4e86\u7ec4\u5408\u7684\u80fd\u529b\uff0c\u9664\u975e\u7ec4\u4ef6\u4e4b\u95f4\u5b8c\u5168\u72ec\u7acb\u65e0\u4ea4\u4e92\uff0c\u53ea\u8981\u4ea4\u4e92\u901a\u8fc7\u76f4\u63a5\u5f15\u7528\u5c31\u8026\u5408\u4e86\u7c7b\u578b\uff0c\u7b26\u53f7\u8868\u8fd9\u662f\u5b9e\u73b0\u7c7b\u578b\u89e3\u8026\u7684\u5173\u952e"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u9700\u8981\u662f\u516c\u5171\u8d44\u6e90\u7684\u5f62\u5f0f\u7ba1\u7406\uff0c\u7528\u6237\u53ef\u4ee5\u4e0b\u8f7d\u5f88\u591a\u5f00\u53d1\u8005\u5b9a\u4e49\u548c\u4e0a\u4f20\u7684\u7b26\u53f7\u8868\uff0c\u8fd9\u4e9b\u7b26\u53f7\u8868\u7531\u5f00\u53d1\u8005\u4e0a\u4f20\uff0c\u6bd4\u8f83\u6709\u540d\u7684\u7b26\u53f7\u8868\u53ef\u80fd\u4f1a\u5f97\u5230\u5f88\u591a\u5176\u4ed6\u5f00\u53d1\u8005\u7684\u652f\u6301\u548c\u517c\u5bb9\uff0c\u4ece\u800c\u5b9e\u73b0\u8de8\u5f00\u53d1\u8005\u4e4b\u95f4\u7684\u534f\u4f5c"),(0,n.kt)("p",null,"\u591a\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u4e5f\u53ef\u80fd\u6709\u91cd\u590d\uff0c\u9700\u8981\u7edf\u4e00\u7684\u673a\u5236\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f3a\u5316\u5168\u5c40\u8868\uff0c\u628a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u53d1\u5c55\u4e3a\u5168\u5c40\u8868"),(0,n.kt)("li",{parentName:"ul"},"\u5168\u5c40\u8868\u5206\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u5efa\u7acb\u8868\u4e4b\u95f4\u7684\u6620\u5c04\u548c\u5173\u8054\uff0c\u8fd9\u6bd4\u8f83\u590d\u6742")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u7c7b\u578b\u5f15\u7528\u90fd\u901a\u8fc7\u6570\u636e\u67e5\u627e"),(0,n.kt)("p",null,"\u4f46\u662f\u6570\u636e\u4e0d\u80fd\u5b8c\u5168\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"\u67d0\u79cd\u7a0b\u5ea6\u4e0a\uff0c\u6570\u636e\u7684\u7ec4\u5408\u624d\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"ECS\u7684\u6700\u5927\u95ee\u9898\u53ef\u80fd\u662f\u65e0\u6cd5\u533a\u5206\u7c7b\u578b\uff0c\u53ea\u6709\u5b9a\u4e49\u5b57\u7b26\u4e32\u6216\u8005\u679a\u4e3e\u6570\u503c\uff0ctag\u4e4b\u7c7b\u7684\uff1f\u8fd9\u4e9b\u7c7b\u578b\u7531\u53d8\u91cf\u7684\u503c\u800c\u4e0d\u662f\u7b26\u53f7\u672c\u8eab\u51b3\u5b9a\uff0c\u8fd9\u4e9b\u503c\u53ef\u4ee5\u6709\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u63a7\u5236"),(0,n.kt)("p",null,"\u4f46\u662ftag\u9700\u8981\u662f\u9488\u5bf9\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5b9e\u4f53"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f53\u53ef\u4ee5\u4efb\u610f\u590d\u6742\uff0c\u4ed6\u4e0d\u53ef\u80fd\u5177\u6709\u5355\u4e00\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u7c7b\u578b\u53ef\u80fd\u88ab\u591a\u79cd\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u5185\u5b58\u65e0\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5b9a\u4e49\u591a\u4e2a\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u5305\u542b\u81ea\u5df1\u7684\u6807\u7b7e\uff0c\u6216\u8005\u8de8\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6570\u636e\u5fc5\u987b\u662f\u7ed3\u6784\u4f53\u7b26\u53f7\uff0c\u8fd9\u6837\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u5305\u542b\u4e86\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u5c5e\u6027\u91cd\u590d\u7684\u7ed3\u6784\u4f53\uff0c\u4f46\u8fd9\u6ca1\u5173\u7cfb\uff0c\u672c\u8eab\u6570\u636e\u5c31\u662f\u6709\u4e0d\u540c\u610f\u4e49\u7684\uff0c\u5373\u4f7f\u6570\u636e\u7ed3\u6784\u5dee\u4e0d\u591a"),(0,n.kt)("p",null,"\u8003\u8651\u53ea\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u602a\u7269\u7684\u8840\u91cf\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u7c7b\u578b\u6807\u5fd7\u5e94\u8be5\u662f\u8ddfHP\u5173\u8054\u5728\u4e00\u8d77\uff0c\u8fd8\u662f\u8ddf\u602a\u7269\u5b9e\u4f53\u5462\uff1f"),(0,n.kt)("p",null,"\u9700\u8981\u4e00\u4e2a\u4e07\u80fd\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u4e00\u4e2a\uff0c\u4f46\u662f\u540d\u5b57\u76f8\u540c\uff0c\u7f16\u8bd1\u5668\u4fdd\u8bc1\u91cd\u590d\u95ee\u9898"),(0,n.kt)("p",null,"\u539f\u5b50\u201c\u6570\u636e\u201d"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u6216\u8005\u6570\u636e\u5217\u8868\u5e94\u8be5\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u4e2a\u6570\u636e\u7684\u7ec4\u5408\u5e94\u8be5\u5145\u5f53\u7c7b\u578b\uff0c\u8868\u793a\u4e00\u7c7b\u529f\u80fd\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u6bd4\u5982HP\u548cHealth \u901a\u5e38\u662f\u7ec4\u5408\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u5355\u72ec\u4f7f\u7528HP\uff0c\u5982\u679c\u6709\u591a\u79cd\u7c7b\u578b\u90fd\u9700\u8981\u4f7f\u7528HP\uff0c\u8fd9\u5c31\u9700\u8981\u5b9a\u4e49\u4e00\u4e2a\u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6ca1\u95ee\u9898\uff0c\u7b26\u53f7\u8868\u7684\u610f\u4e49\u5e76\u4e0d\u662f\u5168\u90e8\u6253\u6563\u6210\u72ec\u7acb\u7684\u7b26\u53f7\uff0c\u800c\u662f\u4e3a\u4e86\u907f\u514d\u7c7b\u578b\u5f15\u7528\uff0c\u4f46\u6709\u4e00\u4e0b\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u53ef\u4ee5\u4e3a\u540c\u4e00\u5b9e\u4f53\u6dfb\u52a0\u591a\u4e2aHP\uff0c\u8fd9\u9700\u8981\u5f00\u53d1\u8005\u7528\u6237\u6765\u907f\u514d")),(0,n.kt)("p",null,"\u6240\u4ee5\u7c7b\u578b\u770b\u8d77\u6765\u66f4\u591a\u5e94\u8be5\u662f\u7531\u7ec4\u4ef6\u7684\u6570\u636e\u5408\u4f5c\u9690\u5f0f\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u8db3\u591f\u677e\u6563\uff0c\u8fd9\u6837\u6765\u4fdd\u8bc1\u6700\u5927\u7684\u7075\u6d3b\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5b9a\u4e49\u7684TAG\u53d8\u91cf\u4e0d\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u4f46\u662f\u548c\u7b26\u53f7\u8868\u7c7b\u4f3c\u7684\u5b9a\u4e49\uff0c\u7f16\u8bd1\u5668\u7279\u6b8a\u5904\u7406"),(0,n.kt)("p",null,"\u6216\u8005TAG\u6570\u7ec4\u7ec4\u4ef6\u672c\u8eab\uff0c\u662f\u4e00\u4e2a\u7528\u6765\u53d6\u4ee3\u5f15\u7528\u7ec4\u4ef6\u7c7b\u578b\u540d\u79f0\u672c\u8eab\u7684\u4e00\u4e2a\u6807\u5fd7"),(0,n.kt)("h4",{id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"},"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u6982\u5ff5\u4e0a\uff0c\u7b26\u53f7\u8868\u8868\u793a\u7684\u662f\u4e00\u4e2a\u53d8\u91cf\u5c5e\u6027\uff0c\u6216\u8005\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u5b83\u7684\u76ee\u7684\u770b\u8d77\u6765\u5c31\u662f\u4e3a\u89e3\u8026\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u5f15\u7528\u670d\u52a1\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4ece\u7cfb\u7edf\u7684\u9700\u6c42\u4e0a\u770b\uff0c\u4e00\u4e2a\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u5305\u542b\u4e00\u4e2a\u5b8c\u6574\u7684\u5bf9\u67d0\u4e00\u4e9b\u4e8b\u60c5\u6216\u67d0\u4e00\u7c7b\u903b\u8f91\u7684\u4e00\u4e2a\u5b8c\u6574\u6570\u636e\u7ed3\u6784\uff0c\u56e0\u6b64\u5b83\u5b9a\u4e49\u7684\u662f\u4e00\u4e2a\u6807\u51c6\u3002\u53c2\u89c12.7\u8282\u3002"),(0,n.kt)("h4",{id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027"},"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u540d\u79f0\uff1a\u53ef\u4ee5\u505a\u4e00\u4e2a\u6620\u5c04\uff0c\u7f16\u8bd1\u5668\u76f4\u63a5\u5904\u7406\uff0c\u751a\u81f3\u7ec4\u4ef6\u53ef\u4ee5\u4e00\u952e\u5347\u7ea7\uff0c\u4ee3\u7801\u66ff\u6362\u6700\u65b0\u540d\u5b57"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7\uff1a\u5982\u679c\u53d1\u73b0\u7f3a\u5931\u76f8\u5173\u7b26\u53f7\uff0c\u76f8\u5173\u7684\u7ec4\u4ef6\u4e0d\u518d\u88ab\u89e3\u91ca/\u7f16\u8bd1\u4ec5\u7a0b\u5e8f\uff0c\u5e76\u63d0\u793a\u7528\u6237\u7ec4\u4ef6\u8fc7\u671f\uff0c\u9700\u8981\u66f4\u65b0\uff1b\u8fd9\u90e8\u5206\u901a\u77e5\u901a\u8fc7Reality World\u8fdb\u884c\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7\uff1a\u4f1a\u901a\u77e5\u5f00\u53d1\u8005\uff0c\u5efa\u8bae\u5f00\u53d1\u8005\u652f\u6301")),(0,n.kt)("h4",{id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf"},"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7ec4\u4ef6\u5e76\u4e0d\u771f\u6b63\u7684\u5b9a\u4e49\u53d8\u91cf\uff0c\u4f8b\u5982\u5b83\u53ea\u80fd\u9009\u62e9\u53d8\u91cf\uff0c\u4f46\u662f\u4e0d\u80fd\u51b3\u5b9a\u53d8\u91cf\u7684\u7c7b\u578b\uff1b\u6b64\u5916\uff0c\u5b83\u5b58\u5728\u7740\u91cd\u590d\u5b9a\u4e49\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u59822.7.16.5\u8282\u63cf\u8ff0\u7684\u91cd\u590d\u5b9a\u4e49\u53d8\u91cf\u7684\u95ee\u9898\uff0c\u7ec4\u4ef6\u4e2d\u7684\u53d8\u91cf\u5b9a\u4e49\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u3002\u6574\u4e2a\u53d8\u91cf\u5b9a\u4e49\u548c\u4f7f\u7528\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u552f\u4e00\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf\uff0c\u4f46\u5176\u5b9e\u5b83\u5e76\u6ca1\u6709\u5206\u914d\u5185\u5b58\uff0c\u4f46\u5b83\u51b3\u5b9a\u4e86\u53d8\u91cf\u7684\u7c7b\u578b\u548c\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u4e2d\u5f15\u7528\u7b26\u53f7\u8868\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u4f46\u4e5f\u4e0d\u662f\u7b80\u5355\u7684\u5f15\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u4e00\u4e2a\u5bf9\u8c61\u7b2c\u4e00\u6b21\u9047\u5230\u67d0\u4e2a\u7b26\u53f7\u65f6\uff0c\u5b83\u5728\u8be5\u5bf9\u8c61\u4e0a\u6dfb\u52a0\u8be5\u53d8\u91cf\uff0c\u5e76\u5206\u914d\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u540e\u7eed\u7684\u7ec4\u4ef6\u5f15\u7528\u76f8\u540c\u7684\u53d8\u91cf\u65f6\uff0c\u5b83\u59cb\u7ec8\u5c06\u5730\u5740\u6307\u5411\u524d\u9762\u5206\u914d\u597d\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u89c12.7.16.5\u8282\u7684\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h4",{id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"},"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b26\u53f7\u5e94\u8be5\u5b9a\u4e49\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u6570\u636e\u96c6\u5408\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Position {\n float x;\n float y;\n float z;\n}\n")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u4ee5\u4e0a\u7684\u5c5e\u6027\u603b\u662f\u540c\u65f6\u51fa\u73b0\uff0c\u90a3\u4e48\u5c06\u5b83\u4eec\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\u3002"),(0,n.kt)("p",null,"\u5c06\u591a\u4e2a\u76f8\u5173\u7684\u7b26\u53f7\u5b9a\u4e49\u5728\u4e00\u8d77\uff0c\u4f1a\u8feb\u4f7f\u8fd9\u4e9b\u53d8\u91cf\u603b\u662f\u5b58\u50a8\u5728\u540c\u4e00\u4e2a\u5bf9\u8c61\u4e0a\uff0c\u907f\u514d\u4e86\u51fd\u6570\u56e0\u4e3a\u591a\u4e2a\u53c2\u6570\u5206\u5e03\u5728\u591a\u4e2a\u5bf9\u8c61\u4e0a\u5bfc\u81f4\u7684\u591a\u5c42\u5d4c\u5957\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"},"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"),(0,n.kt)("p",null,"\u9664\u4e86\u90a3\u4e9b\u5904\u4e8e\u5d4c\u5957\u51fd\u6570\u6700\u5e95\u5c42\u7684\u51fd\u6570\u6240\u6d88\u8d39\u7684\u5c5e\u6027\uff0c\u8fd9\u7c7b\u5c5e\u6027\u901a\u5e38\u4e0d\u4f1a\u89e6\u53d1\u5176\u4ed6\u7684\u51fd\u6570\u6267\u884c\u8ba1\u7b97\uff08\u663e\u793a\u3001\u5b58\u50a8\u4e4b\u7c7b\u7684\u51fd\u6570\u9664\u5916\uff09\uff0c\u5927\u90e8\u5206\u5c5e\u6027\u9664\u4e86\u6570\u503c\u672c\u8eab\uff0c\u8fd8\u5177\u6709\u901a\u77e5\u5c5e\u6027\uff1a\u5373\u544a\u77e5\u5176\u4ed6\u76f8\u5173\u7ec4\u4ef6\uff0c\u6211\u7684\u6570\u503c\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u76f8\u5173\u7ec4\u4ef6\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u503c\u6ca1\u6709\u53d1\u751f\u4efb\u4f55\u53d8\u5316\uff0c\u6839\u636e\u7ec4\u4ef6\u4f5c\u4e3a\u7eaf\u51fd\u6570\u7684\u673a\u5236\uff0c\u540e\u7eed\u76f8\u5173\u7ec4\u4ef6\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\uff0c\u9664\u4e86\u58f0\u660e.UseDt\u7684\u52a8\u753b\u7c7b\u7ec4\u4ef6\u9664\u5916\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u5982\u679c\u52a8\u753b\u7c7b\u7ec4\u4ef6\u4e0d\u53d7\u901a\u77e5\u673a\u5236\u7684\u5f71\u54cd\uff0c\u90a3\u4e48\u5b83\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u5916\u5916\u90e8\u5bf9\u8c61\u6765\u6267\u884c\u4e00\u4e2a\u7c7b\u4f3cEnable/Begin\u548cDisable/End\u4e4b\u7c7b\u7684\u64cd\u4f5c\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7Spawn\u6765\u5b9e\u73b0\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7c7b\u4f3c\u83b7\u53d6\u5f15\u7528\u6765\u5b9e\u73b0\u63a7\u5236\uff0c\u540e\u7eed\u9700\u8981\u76f8\u5173\u5206\u6790\u4e00\u4e0b\u3002")),(0,n.kt)("p",null,"\u5982\u679c\u9700\u8981\u901a\u8fc7\u503c\u7684\u662f\u5426\u53d8\u5316\u4f5c\u4e3a\u540e\u7eed\u7ec4\u4ef6\u8ba1\u7b97\u7684\u4f9d\u636e\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5c5e\u6027\u503c\u5b9e\u9645\u4e0a\u627f\u62c5\u4e86\u4e24\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u540e\u7eed\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u7684\u8f93\u5165\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u77e5\u529f\u80fd")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e24\u4e2a\u529f\u80fd\u662f\u6709\u6b67\u4e49\u7684\uff0c\u4f8b\u5982\u5982\u679c\u4e00\u4e2a\u6280\u80fd\u8981\u6c42\u6263\u9664\u7684HP\u662f3\uff0c\u6240\u4ee5\u6574\u4e2a\u503c3\u540c\u65f6\u627f\u62c5\u4e86\u901a\u77e5\u529f\u80fd\u548c\u6263\u9664\u7684\u5177\u4f53\u6570\u503c\u7684\u529f\u80fd\uff0c\u4f46\u662f\u5982\u679c\u4e0b\u4e00\u5e27\u8be5\u6280\u80fd\u7ee7\u7eed\u91ca\u653e\uff0c\u90a3\u4e48\u5c5e\u6027\u503c\u4f9d\u65e7\u4e3a3\uff0c\u4f46\u662f\u6b64\u65f6\u7cfb\u7edf\u4f1a\u8ba4\u4e3a\u8be5\u503c\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u56e0\u6b64\u901a\u77e5\u529f\u80fd\u5931\u6548\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u4e00\u7684\u503c\u4e0d\u80fd\u540c\u65f6\u627f\u8f7d\u4e24\u4e2a\u529f\u80fd\uff0c\u5b83\u4eec\u5206\u522b\u9700\u8981\u81ea\u5df1\u7684\u6570\u503c\u6216\u8005\u6807\u8bb0\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u89e3\u51b3\u601d\u8def\u662f\u5728\u6bcf\u4e00\u5e27\u7684\u672b\u5c3e\uff0c\u628a\u8fd9\u4e9b\u6570\u503c\u6e05\u96f6\u3002\u4f46\u662f\u8fd9\u6837\u505a\uff0c\u5176\u4ed6\u6709\u4e9b\u5c5e\u6027\u4f1a\u53d7\u5f71\u54cd\uff0c\u5c31\u662f\u90a3\u4e9b\u4e0d\u662f\u589e\u91cf\u503c\u7684\u53d8\u91cf\uff0c\u5b83\u4eec\u9700\u8981\u59cb\u7ec8\u5b58\u50a8\u81ea\u5df1\u7684\u503c\uff0c\u5b9e\u9645\u4e0a\u53ea\u6709\u50cf\u6280\u80fd\u8fd9\u79cd\u6263\u9664\u6027\u7684\u589e\u5f3a\u5c5e\u6027\u624d\u53ef\u4ee5\u8fd9\u6837\u505a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u8981\u6c42\u6240\u6709\u589e\u91cf\u578b\u7684\u53d8\u91cf\u59cb\u7ec8\u6267\u884c\uff0c\u8ba9\u5f00\u53d1\u8005\u4fdd\u8bc1\u7ed3\u679c\u662f\u6b63\u786e\u7684\uff0c\u4f8b\u5982\u4e0b\u4e00\u5e27\u5982\u679c\u8be5\u6280\u80fd\u6ca1\u6709\u91ca\u653e\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u628a\u503c\u7f6e\u96f6\u3002\u4f46\u5176\u5b9e\u8fd9\u79cd\u7f6e\u96f6\u7684\u8fc7\u7a0b\u4f1a\u662f\u540e\u7eed\u7684\u7ec4\u4ef6\u8bef\u4ee5\u4e3a\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u6839\u636e\u9ed8\u8ba4\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u95ee\u9898\u5728\u4f20\u7edf\u7684\u5f00\u53d1\u4e2d\u4e0d\u4f1a\u5b58\u5728\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u5927\u591a\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7684\u8c03\u7528\u903b\u8f91\uff0c\u5373\u53d1\u8d77\u6280\u80fd\u7684\u51fd\u6570\u4f1a\u901a\u8fc7\u67d0\u79cd\u5f62\u5f0f\u76f4\u63a5\u80fd\u591f\u89e6\u53d1\u5bf9\u6263\u8840\u51fd\u6570\u7684\u8c03\u7528\uff08\u4f8b\u5982\u901a\u8fc7\u4e00\u4e9bManager\u4e4b\u7c7b\u7684\u51fd\u6570\uff09\uff0c\u56e0\u6b64\u5176\u5b9e\u5b83\u4eec\u4e0d\u4f1a\u5b58\u5728\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\u7684\u589e\u91cf\u503c\uff0c\u56e0\u4e3a\u4e0b\u4e00\u6b21\u6ca1\u6709\u6280\u80fd\u91ca\u653e\u5219\u538b\u6839\u5c31\u4e0d\u4f1a\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u901a\u8fc7\u6d88\u606f\u7684\u673a\u5236\uff0c\u4f20\u7edf\u7684\u6d88\u606f\u673a\u5236\u662f\u5c06\u6d88\u606f\u5b58\u653e\u5230\u4e00\u4e2a\u961f\u5217\u4e2d\uff0c\u7136\u540e\u54cd\u5e94\u8005\u4ece\u6d88\u606f\u5217\u8868\u83b7\u53d6\u6d88\u606f\u5e76\u8fdb\u884c\u5904\u7406\uff0c\u5f53\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u8fd9\u6761\u6d88\u606f\u5c31\u4f1a\u88ab\u5220\u9664\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u5c5e\u6027\u901a\u8fc7\u6309\u4f9d\u8d56\u987a\u5e8f\u6267\u884c\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5c5e\u6027\u5145\u5f53\u4e86\u6d88\u606f\u7684\u529f\u80fd\u3002\u4f46\u662f\u8fd9\u4e2a\u6d88\u606f\u5728\u4e00\u5e27\u7ed3\u675f\u540e\u5e76\u6ca1\u6709\u6e05\u9664\uff0c\u800c\u662f\u8fd9\u4e2a\u503c\u4f1a\u6c38\u4e45\u5b58\u5728\uff0c\u56e0\u6b64\u5e26\u6765\u4e86\u4e0a\u8ff0\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u50cf\u786c\u4ef6\u7684\u8f93\u5165\u4e8b\u4ef6\uff0c\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\u95ee\u9898\uff0c\u4f46\u662f\u901a\u5e38\u7cfb\u7edf\u8f93\u5165\u5e76\u6ca1\u6709\u4f7f\u7528\u6d88\u606f\u7684\u673a\u5236\u4f20\u9012\uff0c\u800c\u662f\u76f4\u63a5\u7f16\u5199update\u51fd\u6570\uff0c\u8fd9\u6837\u76d1\u542c\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e00\u5e27\u7684\u8ba1\u7b97\u7ed3\u679c\u90fd\u4e0d\u4f1a\u8fdb\u5165\u4e0d\u53ef\u9884\u671f\u7684\u5206\u652f\u3002\u4f46\u662f\u56e0\u4e3a\u5904\u7406\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4e0d\u4f1a\u5f88\u591a\uff0c\u6240\u4ee5\u4e0d\u4f1a\u5bfc\u81f4\u592a\u5927\u7684\u95ee\u9898\u3002\u4f46\u662f\u5982\u679c\u7cfb\u7edf\u5927\u91cf\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u903b\u8f91\u4e5f\u5df2\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u5219\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u65b9\u6cd5\u662f\u4f7f\u7528.UseDt(true)\u4f7f\u5176\u50cf\u8f93\u5165\u7ec4\u4ef6\u4e00\u6837\u5e94\u7528\u6267\u884c\u3002\u540e\u7eed\u518d\u8003\u8651\u4f18\u5316\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"2218-\u5b58\u6863\u5c5e\u6027"},"2.2.1.8 \u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1\u4f1a\u6709\u5927\u91cf\u7684\u5c5e\u6027\uff0c\u663e\u7136\u6709\u5f88\u591a\u5c5e\u6027\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u800c\u5e73\u53f0\u4e5f\u65e0\u6cd5\u5224\u65ad\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u4e5f\u65e0\u6cd5\u8ba9\u521b\u4f5c\u7528\u6237\u5728\u521b\u4f5c\u7684\u65f6\u5019\u53bb\u6307\u5b9a\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u5b58\u6863\u7684\u529f\u80fd\u5c5e\u6027\u672c\u8eab\u662f\u5f00\u53d1\u8005\u548c\u6807\u51c6\u5236\u5b9a\u8005\u53ef\u4ee5\u51b3\u5b9a\u7684\u3002\u6240\u4ee5\uff0c\u5b58\u6863\u5c5e\u6027\u5e94\u8be5\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u662f\u5171\u4eab\u7b26\u53f7\u8868\u6216\u79c1\u6709\u7b26\u53f7\u8868\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7b26\u53f7\u662f\u5426\u9700\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u5168\u5c40\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u6709\u4e9b\u4ec5\u662f\u7528\u6765\u5b9e\u73b0\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u4ea4\u6362\u7684\u7b26\u53f7\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u4f8b\u5982\u90a3\u4e9b\u4ec5\u4ec5\u662f\u65e0\u5173\u7d27\u8981\u7684\u901a\u77e5\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b58\u6863\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4f1a\u4fdd\u8bc1\u5f53\u7ec4\u4ef6\u6b63\u5e38\u6267\u884c\u540e\uff0c\u5176\u4fee\u6539\u7684\u7ed3\u679c\u4f1a\u88ab\u5b58\u6863\u3002"),(0,n.kt)("h3",{id:"222-entity"},"2.2.2 Entity"),(0,n.kt)("p",null,"ID + TAG"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5b9e\u4f53\u6709\u4e2a\u9690\u85cfprivate\u53d8\u91cf\uff1aTAG\u548cTARGET\u7528\u6765\u5b9a\u4e49\u7ec4\u4ef6\u672c\u8eab\u7684\u6807\u8bc6\u7b26\uff0c\u4ee5\u53ca\u7528\u4f5c\u67e5\u8be2\u6761\u4ef6\u7684\u6807\u5fd7\u7b26"),(0,n.kt)("p",null,"\u5728Entity\u4e0a\u589e\u52a0TAG\uff0c\u56e0\u6b64\u5145\u5f53\u4e00\u4e2aEntity\u7684\u7c7b\u578b\u533a\u5206\uff0c\u521b\u4f5c\u8005\u53ef\u4ee5\u5728Creation\u4e2d\u521b\u5efa\u4e00\u4e2aLayer\u8868\u5bf9\u5176\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u4ee5\u7edf\u4e00\u547d\u540d\u7b49\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\u7684TARGET\uff0c\u5b83\u6307\u5411Entity\u7684TAG\u5c5e\u6027\uff0c\u867d\u7136System\u5bf9\u4e8e\u4e00\u4e2aCreation\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662fSystem\u672c\u8eab\u53ea\u5305\u542b\u65b9\u6cd5\uff0cSystem\u7684\u72b6\u6001\u6570\u636e\uff08private\u79c1\u6709\u53d8\u91cf\uff09\u662f\u5b58\u50a8\u5728\u6bcf\u4e2aEntity\u5185\u90e8\u7684\uff0c\u5b83\u5177\u6709\u591a\u4e2a\u5b9e\u4f8b\u3002\u56e0\u6b64\u5bf9\u4e8eTARGET\u6765\u8bf4\uff0c\u6bcf\u4e2aEntity\u7684\u503c\u90fd\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64Entity\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u7c7b\u578b\u76ee\u6807Entity\u3002"),(0,n.kt)("h3",{id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"},"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 5\n\nnamespace SomeComponent{\n query Global.HP as hp\n query Global.HP[] as hps\n\n public Global.HP as hp\n \n private fTemp = 100.\n private TARGET = 20\n}\n")),(0,n.kt)("p",null,"\u4e09\u79cd\u7c7b\u578b\u53d8\u91cf\u8bf4\u660e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"private \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u79c1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u8be5\u7ec4\u4ef6\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\u76f4\u63a5\u58f0\u660e\u5b9e\u73b0\uff0c\u56e0\u4e3a\u6ca1\u6709\u4ece\u5168\u5c40\u7b26\u53f7\u8868\u5f15\u7528\u58f0\u660e\uff0c\u6240\u4ee5\u5176\u4ed6\u7ec4\u4ef6\u6ca1\u6709\u53ef\u80fd\u5bf9\u5176\u8fdb\u884c\u8bbf\u95ee\uff1bprivate\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"public \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u516c\u5171\u53d8\u91cf\uff0c\u53ef\u4ee5\u88ab\u5b9e\u4f53\u5185\u8de8\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u4e5f\u53ef\u4ee5\u88ab\u5176\u4ed6\u5b9e\u4f53\u8bbf\u95ee\uff1bpublic\u4e5f\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf\uff1b\u901a\u5e38public\u53d8\u91cf\u7531\u4f7f\u7528\u8be5\u53d8\u91cf\u7684\u7ec4\u4ef6\u5b9a\u4e49\uff0c\u53ef\u4ee5\u591a\u4e2a\u7ec4\u4ef6\u4e2d\u90fd\u91cd\u590d\u5b9a\u4e49\uff0c\u4f1a\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"query\u4e0d\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u53d8\u91cf\uff0c\u5b83\u662f\u6307\u5411\u5916\u90e8\u53d8\u91cf\u7684\u5f15\u7528\uff0c\u5b83\u53ea\u80fd\u8bbf\u95ee\u90a3\u4e9b\u5b9a\u4e49\u4e3apublic\u7684\u5b9e\u4f53")),(0,n.kt)("h4",{id:"2231-\u79c1\u6709\u53d8\u91cf"},"2.2.3.1 \u79c1\u6709\u53d8\u91cf"),(0,n.kt)("p",null,"\u79c1\u6709\u53d8\u91cf\u53ea\u662f\u5b9e\u4f53\u5185\u7ec4\u4ef6\u624d\u53ef\u4ee5\u8bbf\u95ee\u7684\u5c5e\u6027\uff0c\u5b9e\u4f53\u662f\u7528\u6237\u521b\u5efa\u7684\uff0c\u5176\u6240\u6709\u6743\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u540c\u6837\uff0c\u8be5\u5b9e\u4f53\u6240\u6709\u7684\u7ec4\u4ef6\u662f\u7531\u7528\u6237\u9009\u62e9\u7684\uff0c\u6240\u4ee5\u8fd9\u4e2a\u9009\u62e9\u95f4\u63a5\u5305\u542b\u7528\u6237\u5bf9\u8be5\u7ec4\u4ef6\u8bbf\u95ee\u8be5\u5b9e\u4f53\u6570\u636e\u7684\u6743\u9650\u3002"),(0,n.kt)("p",null,"\u9009\u62e9\u7ec4\u4ef6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u662f\u4e00\u79cd\u529f\u80fd\u6784\u5efa\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u4e00\u79cd\u6388\u6743\u884c\u4e3a")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u80fd\u591f\u8bbf\u95ee\u81ea\u5df1\u6240\u5728\u5b9e\u4f53\u7684\u4efb\u4f55\u5c5e\u6027\uff0c\u4e0d\u652f\u6301\u5728\u5b9e\u4f53\u5185\u518d\u5212\u5206\u6743\u9650\uff0c\u90a3\u4e48\u5c06\u4f1a\u589e\u52a0\u590d\u6742\u5ea6\uff0c\u800c\u4e14\u770b\u8d77\u6765\u6ca1\u6709\u90a3\u79cd\u5fc5\u8981\uff0c\u5b9e\u4f53\u8fd9\u4e2a\u7c92\u5ea6\u4f5c\u4e3a\u6743\u9650\u5355\u4f4d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u662f\u8db3\u591f\u7684\uff0c\u5408\u7406\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u7528\u6237\u8bbe\u7f6e\u548c\u7ba1\u7406\u8d77\u6765\u76f8\u5bf9\u6bd4\u8f83\u5bb9\u6613\u7684")),(0,n.kt)("h4",{id:"2232-\u5199\u5165\u6743\u9650"},"2.2.3.2 \u5199\u5165\u6743\u9650"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u6709\u5bf9\u81ea\u8eab\u5b9e\u4f53\u6240\u5728\u7684\u5c5e\u6027\u624d\u5177\u6709\u5199\u7684\u6743\u9650\uff0c\u4e0d\u80fd\u5bf9\u5176\u4ed6\u5b9e\u4f53\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5426\u5219\u6743\u9650\u4e0d\u53ef\u63a7\u5236\uff0c\u56e0\u4e3a\u6743\u9650\u662f\u6309\u7167\u5b9e\u4f53\u4e3a\u5355\u4f4d\u8fdb\u884c\u6784\u9020\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u62c9\u53d6\u6a21\u5f0f\uff0c\u53c2\u89c12.2.11.2\u8282\u3002"),(0,n.kt)("h4",{id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"},"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f53\u7684\u5c5e\u6027\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u51fa\uff0c\u5b83\u603b\u662f\u5bf9\u4e00\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u50cf\u7c7b\u4f3c\u52a8\u753b\u6216\u8005\u4e00\u4e9b\u81ea\u5b9a\u4e49\u8de8\u5e27\u903b\u8f91\u7684\u8fd9\u79cd\u7ec4\u4ef6\uff0c\u4ed6\u53ef\u80fd\u9700\u8981\u5b58\u50a8\u4e00\u4e9b\u8de8\u5e27\u7684\u72b6\u6001\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u901a\u8fc7\u79c1\u6709\u7684\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u4f46\u5b83\u4eec\u8ddf\u5176\u4ed6\u5c5e\u6027\u4e4b\u95f4\u5b58\u5728\u4e00\u4e2a\u4e3b\u8981\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u53d8\u91cf\u4e00\u822c\u53ea\u80fd\u88ab\u4e00\u4e2a\u552f\u4e00\u7684\u7ec4\u4ef6\u611f\u77e5\uff0c\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u4e5f\u4e0d\u9700\u8981\u77e5\u9053\u5b83\u7684\u5b58\u5728")),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u53ea\u8fd9\u6837\uff0c\u5c31\u9020\u6210\u4e00\u79cd\u6f5c\u5728\u7684\u95ee\u9898\uff0c\u8fd9\u4e9b\u53d8\u91cf\u770b\u8d77\u6765\u5145\u5f53\u4e86\u8fd9\u4e9b\u7ec4\u4ef6\u7684\u72b6\u6001\uff1a\u56e0\u4e3a\u8f93\u5165\u6761\u4ef6\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u7834\u574f\u4e86\u7ec4\u4ef6\u5145\u5f53\u7eaf\u51fd\u6570\u7684\u76ee\u6807\uff0c\u4e5f\u4f7f\u5f97\u901a\u8fc7\u8f93\u5165\u662f\u5426\u53d8\u66f4\u6765\u51b3\u5b9a\u662f\u5426\u9700\u8981\u6267\u884c\u7ec4\u4ef6\u8ba1\u7b97\u53d8\u5f97\u56f0\u96be\uff0c\u53c2\u89c12.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u4e00\u79cd\u89e3\u51b3\u65b9\u6848\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u8fd9\u4e9b\u4e2d\u95f4\u53d8\u91cf\u6210\u4e3a\u65f6\u95f4\u7684\u51fd\u6570\uff0c\u5728\u6bcf\u4e00\u6b21\u51fd\u6570\u8ba1\u7b97\u4e2d\uff0c\u7531\u7ec4\u4ef6\u51fd\u6570\u6839\u636edt\u53c2\u6570\u8ba1\u7b97\u800c\u5f97")),(0,n.kt)("p",null,"\u8fd9\u79cd\u53ef\u80fd\u4f1a\u6bcf\u5e27\u91cd\u590d\u8ba1\u7b97\u4e00\u4e9b\u5185\u5bb9\uff0c\u4f46\u662f\u5176\u5b9e\u53ef\u80fd\u95ee\u9898\u4e0d\u5927\uff0c\u56e0\u4e3a\u90a3\u4e9b\u5b58\u50a8\u7684\u4e2d\u95f4\u72b6\u6001\uff0c\u5176\u5b9e\u5927\u90e8\u5206\u662f\u6bcf\u5e27\u90fd\u8981\u4ee3\u5165dt\u8fdb\u884c\u91cd\u65b0\u8ba1\u7b97\u7684\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u53ef\u80fd\u5e26\u6765\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u76f8\u5bf9\u5e26\u6765\u67b6\u6784\u7684\u7b80\u6d01\u6027\uff0c\u662f\u53ef\u53d6\u7684\u3002\u4f8b\u5982\u5728\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u5f53\u4e2d\uff0c\u4e3a\u4e86\u7ef4\u6301\u51fd\u6570\u7684\u7eaf\u51fd\u6570\u7279\u6027\uff0c\u4ee5\u53ca\u53d8\u91cf\u7684\u4e0d\u53ef\u4fee\u6539\u7279\u6027\uff0c\u5176\u5b9e\u4e5f\u505a\u4e86\u5927\u91cf\u590d\u5236\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u76f8\u5bf9\u6027\u80fd\uff0c\u5b83\u4eec\u5e26\u6765\u7684\u67b6\u6784\u4ef7\u503c\u66f4\u5927\u3002\u4f55\u51b5RealityIS\u53ef\u4ee5\u901a\u8fc7\u5206\u5e03\u5f0f\u53ca\u5176\u4ed6\u7279\u6027\u6765\u5f25\u8865\u8fd9\u4e9b\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("h3",{id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"},"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u7a0b\u5e8f\u6267\u884c\u6307\u4ee4\u7684\u8026\u5408\uff0c\u662f\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u6700\u5927\u7684\u9650\u5236\uff0c\u8fd9\u53ef\u80fd\u67092\u79cd\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u8981\u662f\u8fd8\u662f\u57fa\u4e8e\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\uff0c\u5b83\u4e0a\u9762\u6240\u505a\u7684\u62bd\u8c61\uff0c\u66f4\u591a\u662f\u56f4\u7ed5\u7528\u5f00\u53d1\u8005\uff08\u4eba\u7684\uff09\u7684\u89d2\u5ea6\u600e\u4e48\u53bb\u7406\u89e3\u548c\u7ec4\u7ec7\u673a\u5668\u4ee3\u7801\u7684\u7ed3\u6784\uff0c\u800c\u6ca1\u6709\u56f4\u7ed5\u4eba\u7c7b\u7406\u89e3\u4e8b\u7269\u771f\u6b63\u7684\u903b\u8f91\u53bb\u8fdb\u884c\u8c03\u6574\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u90fd\u662f\u56f4\u7ed5\u5355\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\uff0c\u5373\u4f7f\u6709\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u9700\u8981\u4ea4\u4e92\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u5c11\u91cf\u4e14\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\u9700\u6c42\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u6807\u51c6\u7684\u5f62\u5f0f\u89e3\u51b3\uff0c\u4f8b\u5982HTTP\u534f\u8bae\u3002")),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5143\u5b87\u5b99\u65f6\u4ee3\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e9b\u5168\u65b0\u7684\u7f16\u7a0b\u67b6\u6784\uff0c\u6240\u4ee5\u6700\u91cd\u8981\u7684\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6211\u4eec\u9700\u8981\u5728\u786c\u4ef6\u67b6\u6784\u548c\u5e94\u7528\u67b6\u6784\u4e4b\u95f4\uff0c\u5efa\u7acb\u8d77\u4e00\u4e2a\u6570\u636e\u62bd\u8c61\u67b6\u6784\uff0c\u5c06\u4f20\u7edf\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\u9650\u5236\u9690\u85cf\u8d77\u6765\uff0c\u5e76\u4e14\u4e0a\u5c42\u5e94\u7528\u67b6\u6784\u7684\u80fd\u529b\u53ef\u4ee5\u66f4\u5927\u7684\u91ca\u653e"),"\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u7684\u6838\u5fc3\u903b\u8f91\uff0c\u662f\u901a\u8fc7\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u7684\u6539\u9020\uff0c\u5728\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e2a\u65b0\u7684\u8f6c\u6362\u5c42\uff0c\u662f\u80fd\u591f\u5c06\u57fa\u4e8e\u6570\u636e\u62bd\u8c61\u7684\u7a0b\u5e8f\u67b6\u6784\uff0c\u8f6c\u6362\u4e3a\u4f20\u7edf\u57fa\u4e8e\u786c\u4ef6\u67b6\u6784\u7684\u7a0b\u5e8f\u7ed3\u6784\u3002"),(0,n.kt)("h4",{id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"},"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'#version 1.0.0\n#order 1000\n\nnamespace SomeComponent{\n public Global.iHP as iHP = 5\n public Global.vfPosition = (1000.0, 234.5, 400.8)\n public Global.sLabelName = "Super Man"\n \n private fTemp = 500.6 \n \n fn Update(fTime){\n fTemp = fTemp * fTime\n iHP = fTemp\n }\n}\n')),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u53d8\u91cf\u7684\u987a\u5e8f\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u8981\u8fdb\u884c\u6392\u5e8f\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u8fd9\u91cc\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u540d\u4e0e\u5c40\u90e8\u7b80\u5199\u540d\u5b57\u7684\u533a\u522b\uff0c\u5728\u89e3\u91ca\u5668\u4e2d\uff0c\u9700\u8981\u53bb\u9664\u672c\u5730\u53d8\u91cf\u540d\u79f0\uff0c\u4f7f\u7528\u7edf\u4e00\u7684\u5168\u5c40\u540d\u79f0\uff0c\u56e0\u4e3a\u4e0d\u540c\u7ec4\u4ef6\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\uff0c\u53ef\u80fd\u4f7f\u7528\u4e0d\u540c\u7684\u5c40\u90e8\u53d8\u91cf\u7b80\u5199\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9700\u8981\u5904\u7406\u5176\u4ed6\u7269\u4f53\u7684\u7ec4\u4ef6\uff0c\u5b9a\u4e49\u4e00\u4e2a\u6570\u7ec4\u7684\u5f62\u5f0f\uff0c\u89e3\u91ca\u5668\u81ea\u52a8\u67e5\u627e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 1000\n\nnamespace HandleOtherComponent{\n outer Global.iHP[]\n outer Global.vPosition[]\n \n out vPosition as position\n \n fn Upadte{\n for i in iHP{\n if(distance(vPosition[i]-position)<10){\n iHP[i]-=1\n vPosition[i]=(10,10,10)\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7c7b\u578b\u7528\u4e8e\u7531\u4e00\u4e9b\u7279\u5b9a\u5bf9\u8c61\u53d1\u8d77\u7684\u884c\u4e3a\uff0c\u5982\u679c\u662f\u5168\u5c40\u7ec4\u4ef6\uff0c\u5168\u5c40\u7ec4\u4ef6\u6bcf\u4e2a\u573a\u666f\u53ea\u6709\u4e00\u4e2aEntity\u53ef\u4ee5\u62e5\u6709"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 10\n\nnamespace PhysicalComponent{\n unique Global.Collider[] clliders\n}\n")),(0,n.kt)("p",null,"\u5b9a\u4e49\u4e86global\u7684\u5c5e\u6027\u89e3\u91ca\u5668\u4f1a\u89e3\u91ca\u552f\u4e00\u6027\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6709\u4e9b\u7ec4\u4ef6\u662f\u6ca1\u6709\u65b9\u6cd5\u7684\uff0c\u4f46\u6ca1\u5173\u7cfb\uff0c\u4ece\u7528\u6237\u89d2\u5ea6\u6765\u8bf4\u5b83\u4ecd\u7136\u662f\u4e00\u4e2a\u529f\u80fd\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 100\n\nnamespace ClidderComponent{\n public Global.Cllider\n public TAG = 100\n}\n")),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u7ec4\u4ef6\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u81ea\u8eab\u8fdb\u884c\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u5176\u4ed6\u5bf9\u8c61\u8fdb\u884c\u4fee\u6539\uff0c\u8fd9\u79cd\u60c5\u51b5\u6709\u4e00\u4e2a\u53d1\u8d77\u7684\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u662f\u6ca1\u6709\u7279\u5b9a\u53d1\u8d77\u7684\u5bf9\u8c61\uff0c\u5b83\u662f\u5bf9\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u901a\u7528\u884c\u4e3a\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce")),(0,n.kt)("h4",{id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"},"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"),(0,n.kt)("p",null,"\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u90fd\u53ef\u4ee5\u8bbe\u7f6e\u521d\u59cb\u503c\uff0c\u5176\u4e2d\u4e00\u4e2a\u4fee\u6539\u4f1a\u590d\u5199\u53e6\u4e00\u4e2a\uff0c\u56e0\u4e3a\u5bf9\u4e8e\u5171\u4eab\u53d8\u91cf\uff0c\u4e00\u4e2a\u5b9e\u4f53\u53ea\u6709\u4e00\u4efd\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u521d\u59cb\u5316\u7684\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\u5668\u4e2d\u4fee\u6539\uff0c\u6bcf\u6b21\u9009\u62e9\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u8bbe\u7f6e\u540e\uff0c\u4e0b\u6b21\u5176\u4ed6\u7ec4\u4ef6\u52a0\u8f7d\u7684\u4e5f\u662f\u4fee\u6539\u540e\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fd0\u884c\u65f6\uff0c\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u8fd0\u884c\u6001\u7528\u6237\u53ea\u770b\u5f97\u89c1\u4e00\u4efd\u5171\u4eab\u53d8\u91cf\uff0c\u7ec4\u4ef6\u53ea\u6709\u79c1\u6709\u53d8\u91cf\u53ef\u4ee5\u5355\u72ec\u8bbe\u7f6e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4ee3\u7801\u7684\u5f62\u5f0f\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u6309\u65f6\u95f4\u8986\u5199\u6570\u503c\u3002\u4f46\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u7ec4\u4ef6\u7684\u521d\u59cb\u503c\u5e94\u8be5\u7531\u5176\u5b9a\u4e49\u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u5426\u5219\u5bb9\u6613\u9020\u6210\u8ff7\u60d1\u3002\u4e00\u65e6\u5b9e\u4f8b\u8fd0\u884c\u4e00\u6bb5\u65f6\u95f4\u4e4b\u540e\uff0c\u503c\u5e94\u8be5\u7531\u6301\u4e45\u5316\u7684\u6570\u636e\u8fdb\u884c\u52a0\u8f7d\u521d\u59cb\u5316\u3002")),(0,n.kt)("h4",{id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026"},"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5bf9\u611f\u5174\u8da3\u7684\u6570\u636e\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4fdd\u8bc1\u4e24\u4e2a\u5bf9\u540c\u6837\u6570\u636e\u611f\u5174\u8da3\u7684\u6570\u636e\u90fd\u80fd\u591f\u6309\u987a\u5e8f\u88ab\u6267\u884c")),(0,n.kt)("p",null,"\u5269\u4e0b\u53ea\u8981\u6211\u4eec\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u987a\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u5c31\u53ef\u4ee5\u4ee5\u95f4\u63a5\u7684\u65b9\u5f0f\u5b9e\u73b0\u4ea4\u4e92\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u5171\u540c\u611f\u5174\u8da3\u7684\u53c2\u6570\u5145\u5f53\u4e86\u51fd\u6570\u53c2\u6570\uff0c\u540c\u65f6\u4e0d\u9700\u8981\u5f15\u7528\u5176\u4ed6\u7ec4\u4ef6\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u5168\u65b0\u7684\u673a\u5236\uff0c\u53ea\u6709\u8fd9\u6837\uff0c\u624d\u80fd\u5b9e\u73b0\u4e24\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u800c\u4e14\uff0c\u9664\u4e86\u5bf9\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u89e3\u8026\uff0c\u5b83\u8fd8\u6709\u4e00\u4e0b\u4e09\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u4e0d\u9700\u8981\u53bb\u5173\u5fc3\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982\u5c31\u4e0d\u4f1a\u51fa\u73b0\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u5e38\u89c1\u7684\u4f60\u8c03\u6211\u8fd8\u662f\u6211\u8c03\u7528\u4f60\u7684\u95ee\u9898\uff0c\u8fd9\u8ba9\u6211\u4eec\u5c06\u7f16\u7a0b\u601d\u60f3\u56de\u5f52\u5230\u672c\u8d28\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u53ea\u662f\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u5e76\u8f93\u51fa\u76f8\u5173\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u4e2a\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u4e0d\u592a\u4e00\u6837\u3002\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u5927\u90e8\u5206\u529f\u80fd\u90fd\u662f\u5728\u5904\u7406\u6570\u636e\uff0c\u8fd9\u79cd\u601d\u7ef4\u7406\u89e3\u8d77\u6765\u66f4\u7b80\u6d01\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\uff0c\u5927\u90e8\u5206\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\u90fd\u662f\u7531\u4e8e\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u5bf9\u8c61\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u3002\u4e0d\u4ec5\u4e0d\u5229\u4e8e\u5e76\u884c\u8ba1\u7b97\uff0c\u800c\u4e14\u5bb9\u6613\u5bfc\u81f4\u5404\u79cd\u5e76\u53d1\u95ee\u9898\uff0c\u4f8b\u5982\u6b7b\u9501\uff0c\u8d44\u6e90\u62a2\u5360\u7b49\u7b49\uff0c\u56e0\u4e3a\u4e0d\u53ef\u9884\u671f\u7684\u591a\u4e2a\u5bf9\u8c61\u4f1a\u8bbf\u95ee\u540c\u4e00\u4e2a\u5bf9\u8c61\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u80fd\u51cf\u5c11\u56e0\u4e3a\u53d8\u5316\u5bfc\u81f4\u7684\u91cd\u6784\u3001\u91cd\u65b0\u53d1\u5e03\u7a0b\u5e8f\u7b49\u95ee\u9898\u3002\u5f53\u4e00\u4e2a\u51fd\u6570\u53c2\u6570\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u5fc5\u987b\u8981\u4fee\u6539\u8c03\u7528\u8005\u7684\u4ee3\u7801\uff0c\u5b83\u53ef\u80fd\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u518d\u53ef\u7528\u6216\u8005\u5d29\u6e83\uff0c\u56e0\u800c\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u592a\u613f\u610f\u66f4\u65b0\u5230\u6700\u65b0\u5f15\u7528\uff0c\u4ece\u800c\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5316\u5f88\u6162\u3002\u51fd\u6570\u89e3\u8026\u53ef\u4ee5\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u7684\u4fee\u6539\u81f3\u5c11\u5e76\u4e0d\u4f1a\u5f71\u54cd\u7a0b\u5e8f\u7684\u8fd0\u884c\u3002\u5f53\u7136\u5982\u679c\u903b\u8f91\u53d1\u751f\u4e86\u8f83\u5927\u7684\u53d8\u5316\uff0c\u7a0b\u5e8f\u7684\u8ba1\u7b97\u7ed3\u679c\u53ef\u80fd\u903b\u8f91\u4e0a\u662f\u4e0d\u53ca\u9884\u671f\u7684\u3002\u8fd9\u79cd\u8981\u6709\u597d\u7684\u673a\u5236\u4fdd\u8bc1\u53ca\u65f6\u66f4\u65b0\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u662f\u7cfb\u7edf\u66f4\u4e0a\u4e00\u5c42\u7684\u673a\u5236\uff0c\u5728\u7cfb\u7edf\u5c42\uff0c\u6211\u4eec\u9996\u5148\u5e94\u8be5\u4fdd\u8bc1\u5e73\u53f0\u8fd0\u884c\u7684\u7a33\u5b9a\u6027\u3002")),(0,n.kt)("h4",{id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("h3",{id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316"},"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u673a\u5236\u5e26\u6765\u7684\u6700\u5927\u4ef7\u503c\uff0c\u662f\u5b83\u6d88\u9664\u4e86\u6a21\u5757\u4e4b\u95f4\u7684\u663e\u793a\u8c03\u7528\u53c2\u6570\u4f20\u9012\uff0c\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u9000\u5316\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u800c\u9690\u85cf\u4e86\u4f20\u7edf\u7f16\u7a0b\u4e2d\u8981\u4f7f\u529f\u80fd\u8fd0\u884c\u8d77\u6765\u7684\u53c2\u6570\u4f20\u9012\uff0c\u56e0\u4e3a\u8fd9\u5c31\u9700\u8981\u53d8\u91cf\u7684\u58f0\u660e\u548c\u521d\u59cb\u5316\uff0c\u800c\u53d8\u91cf\u7684\u5b9a\u4e49\u6709\u6d89\u53ca\u7c7b\u578b\u7cfb\u7edf\u3002\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u5bfc\u81f4\u5bf9\u7f16\u7a0b\u7684\u5b66\u4e60\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u62bd\u8c61\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u5b83\u5c31\u53ef\u4ee5\u8bed\u4e49\u5316\uff0c\u4e00\u4e2a\u529f\u80fd\u7528\u4e00\u4e2a\u8bed\u4e49\u8868\u793a\uff0c\u800c\u8bed\u4e49\u662f\u6240\u6709\u4eba\u53ef\u4ee5\u7406\u89e3\u7684\u3002\u4e00\u65e6\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u8bed\u4e49\uff0c\u5bf9\u5e94\u7684\u529f\u80fd\u53ca\u5176\u8ddf\u5176\u4ed6\u529f\u80fd\u4e4b\u95f4\u7684\u4ea4\u4e92\u5c31\u4f1a\u81ea\u52a8\u9002\u914d\u548c\u5de5\u4f5c\uff0c\u7528\u6237\u6700\u591a\u9700\u8981\u8bbe\u7f6e\u4e00\u4e9b\u7279\u5b9a\u7684\u5c5e\u6027\u503c\u3002"),(0,n.kt)("h4",{id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"},"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u53ca\u5176\u6e38\u620fUpdate\u673a\u5236\uff0c\u8054\u5408\u8d77\u6765\u89e3\u51b3\u4e86\u4e24\u4e2a\u51fd\u6570\u4e4b\u95f4\u53c2\u6570\u9690\u5f0f\u4f20\u9012\u7684\u95ee\u9898\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u663e\u5f0f\u6307\u5b9a\u4e24\u4e2a\u6a21\u5757\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u65e2\u7b80\u5316\u4e86\u903b\u8f91\u5f00\u53d1\uff0c\u53c8\u4f7f\u5f97\u51fd\u6570\u6216\u8005\u4ee3\u7801\u529f\u80fd\u7684\u8bed\u4e49\u5316\u6210\u4e3a\u53ef\u80fd"),(0,n.kt)("p",null,"\u8bed\u4e49\u5316\u4ee5\u540e\u7684\u7a0b\u5e8f\uff0c\u5f62\u6210\u53ef\u4ee5\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u7684\u7ed3\u6784\uff0c\u6709\u4e86\u8fd9\u4e2a\u57fa\u7840\uff0c\u518d\u7ed3\u5408\u81ea\u7136\u8bed\u8a00\u4eba\u5de5\u667a\u80fd\u548c\u8bed\u97f3\u65b9\u9762\u7684\u8fdb\u5c55\uff0c\u53ef\u4ee5\u505a\u5230\u6700\u7b80\u5316\u7684\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u7136\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u5316\u8bed\u8a00")),(0,n.kt)("p",null,"\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u673a\u5236\uff0c\u867d\u7136\u81ea\u7136\u8bed\u8a00\u4e2d\u672c\u8eab\u4e5f\u662f\u6709\u53e5\u5b50\u8bed\u6cd5\u7ed3\u6784\u7684\uff0c\u4f46\u662f\u81ea\u7136\u8bed\u8a00\u672c\u8eab\u5e76\u6ca1\u6709\u7f16\u7a0b\u8bed\u8a00\u90a3\u4e48\u9ad8\u5ea6\u7ed3\u6784\u5316\uff0c\u4f8b\u5982\u5373\u4f7f\u5305\u542b\u8bed\u6cd5\u9519\u8bef\uff0c\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4ea4\u6d41\u4e5f\u53ef\u80fd\u56e0\u4e3a\u76f8\u540c\u7684\u7ecf\u5386\u3001\u77e5\u8bc6\u7b49\u539f\u56e0\u5bf9\u5176\u8fdb\u884c\u7ea0\u9519\uff0c\u4ece\u800c\u5ffd\u7565\u9519\u8bef\u7684\u8bed\u6cd5\uff0c\u7136\u800c\u673a\u5668\u6267\u884c\u7684\u7ed3\u6784\u5316\u8bed\u8a00\u4e5f\u4e0d\u540c\uff0c\u9664\u975e\u662f\u57fa\u4e8eAI\u8fdb\u884c\u5b66\u4e60\uff0c\u4f46\u662f\u90a3\u6837\u53c8\u9700\u8981\u5927\u91cf\u7684\u6570\u636e\u5b66\u4e60"),(0,n.kt)("p",null,"\u53ef\u89c6\u5316\u56fe\u901a\u5e38\u7531\u4e00\u4e9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u548c"),(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u4e4b\u95f4\u7684\u8fde\u63a5\u5173\u7cfb")),(0,n.kt)("p",null,"\u6765\u8868\u793a\uff0c\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u6d41\u7a0b\u7684\u529f\u80fd\uff0c\u800c\u8fde\u63a5\u5173\u7cfb\u4e0d\u4ec5\u8868\u793a\u4e86\u67d0\u79cd\u6d41\u7a0b\u987a\u5e8f\uff0c\u4ed6\u8fd8\u8868\u793a\u4e86\u6d41\u7a0b\u4e4b\u95f4\u9700\u8981\u9075\u5faa\u7684\u53c2\u6570\u7ea6\u5b9a"),(0,n.kt)("p",null,"\u65e2\u7136\u7b26\u53f7\u8868\u89e3\u51b3\u4e86\u53c2\u6570\u4f20\u9012\uff0c\u90a3\u4e48\u5269\u4e0b\u53ea\u9700\u8981\u663e\u5f0f\u58f0\u660e\u8282\u70b9\u7684\u529f\u80fd\u5b9a\u4e49\uff0c\u5219\u6574\u4e2a\u56fe\u53ef\u4ee5\u6784\u6210\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\uff0c\u540c\u65f6\u4e5f\u662f\u53ef\u89c6\u5316\u7684"),(0,n.kt)("p",null,"\u7531\u4e8e\u81ea\u7136\u8bed\u8a00\u4e0d\u5177\u5907\u7cbe\u786e\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5b9a\u4e49\u660e\u786e\u7684\u8282\u70b9\u7ed3\u6784"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ed3\u6784\u6700\u597d\u662f\u4e00\u79cd\u63cf\u8ff0\u8bed\u8a00\uff0c\u4ed6\u5177\u6709\u57fa\u7840\u7684\u8bed\u6cd5\u7ed3\u6784\uff0c\u800c\u57fa\u4e8e\u8fd9\u4e9b\u7ed3\u6784\u8fdb\u884c\u6269\u5c55\u53ef\u4ee5\u6784\u5efa\u5177\u4f53\u3001\u590d\u6742\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u6240\u8c13\u8bed\u8a00\u7ed3\u6784\uff0c\u5373\u5305\u62ec\u5b83\u7684\u53c2\u6570\uff08\u8fde\u63a5\u5c5e\u6027\uff09\uff0c\u5b83\u7684\u529f\u80fd\u5c5e\u6027\u90fd\u662f\u660e\u786e\u7684"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u53ea\u662f\u4efb\u610f\u5b9a\u4e49\u4e00\u4e9b\u6ca1\u6709\u8054\u7cfb\u7684\u57fa\u7c7b\uff0c\u5219\u65e0\u52a9\u4e8e\u6784\u5efa\u6709\u4ef7\u503c\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u56e0\u4e3a\u5c3d\u7ba1\u4ed6\u53ef\u4ee5\u8fde\u63a5\u4e00\u4e9b\u8282\u70b9\u6784\u6210\u56fe\uff0c\u4f46\u662f\u8fd9\u4e2a\u56fe\u7684\u6d41\u7a0b\u548c\u610f\u4e49\u662f\u5b8c\u5168\u6ca1\u6709\u610f\u4e49\u7684\uff0c\u6ca1\u6709\u4ef7\u503c\u7684"),(0,n.kt)("h4",{id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations"},"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations"),(0,n.kt)("p",null,"Machinations \u63d0\u4f9b\u4e86\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\uff0c\u4ed6\u80fd\u6784\u5efa\u8d77\u6613\u4e8e\u7406\u89e3\u5177\u6709\u4e00\u5b9a\u903b\u8f91\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u4f46\u662f\u5b83\u7684\u7ed3\u6784\u662f\u4ee5\u7ecf\u6d4e\u6d41\u52a8\u4e3a\u57fa\u7840\u7684\uff0c\u6709\u4e9b\u903b\u8f91\u4e0d\u4e00\u5b9a\u6709\u660e\u663e\u7684\u7ecf\u6d4e\u56e0\u7d20\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u6269\u5c55\uff0c\u6709\u4e86\u8fd9\u6837\u4e25\u8c28\u7684\u8bed\u8a00\u7ed3\u6784\uff0c\u518d\u628a\u7ec4\u4ef6\u5b9a\u4e49\u4e3a\u8fd9\u6837\u7684\u903b\u8f91\u5355\u5143\u8282\u70b9\uff0c\u5219\u8282\u70b9\u7684\u8bed\u4e49\u5c31\u660e\u786e\u800c\u4e14\u53c8\u610f\u4e49\u4e86\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u53ef\u4ee5\u65b9\u4fbf\u7528\u6237\u6d89\u53caGameplay\u7684\u73a9\u6cd5"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e2aMachinations\u4e2d\u7684\u5143\u7d20\uff0c\u8bbe\u8ba1\u5bf9\u5e94\u7684Component\uff0c\u53ea\u8981\u4ece\u8fd9\u4e9bComponent\u96c6\u6210\u7684\u7ec4\u4ef6\uff0c\u5c31\u81ea\u52a8\u9075\u5faa\u76f8\u5e94\u7684\u529f\u80fd\u6216\u8005\u63a5\u53e3\u9700\u6c42\uff0c\u5c31\u53ef\u4ee5\u81ea\u52a8\u751f\u6210\u8bbe\u8ba1\u7684\u53ef\u89c6\u5316\u56fe\u3002"),(0,n.kt)("video",{src:"resources/New-Intro-Video-Averages-comp.mp4"}),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u53ef\u4ee5\u6839\u636eMachinations\u53cd\u5411\u751f\u6210\u521d\u59cb\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u5982\u679cMachinations\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u6709\u7684\u7ec4\u4ef6\u5c31\u8981\u6c42\u5f00\u53d1\u8005\u8fd9\u6837\u53bb\u505a\uff0c\u8fd9\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u5c31\u66f4\u597d\u63a7\u5236\u903b\u8f91\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u5bf9Machinations\u8fdb\u884c\u6df1\u5165\u5206\u6790\uff0c\u52a0\u4e00\u5b9a\u7684\u6539\u9020\u3002"),(0,n.kt)("h4",{id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"},"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\uff0c\u5bf9\u73b0\u4ee3\u5de5\u4e1a\u5f88\u591a\u7814\u7a76\u76f4\u89c2\u91cd\u8981\uff0c\u5e76\u4e14\u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6df1\u523b\u90fd\u673a\u5236\u90fd\u6df1\u85cf\u4e8e\u590d\u6742\u7cfb\u7edf\u4e2d\uff0c\u5f80\u5f80\u90a3\u4e9b\u76f4\u89c2\u7b80\u5355\u7684\u7ed3\u6784\u5316\u673a\u5236\u5e76\u4e0d\u8db3\u4ee5\u6d1e\u6089\u8fd9\u4e9b\u7cfb\u7edf\u7684\u539f\u7406\u548c\u5f71\u54cd\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u66f4\u597d\u7684\u7a0b\u5e8f\u673a\u5236\u6765\u652f\u6301\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u7531\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u7279\u5f81\uff0c\u73b0\u5728\u8ba1\u7b97\u67b6\u6784\u5e76\u4e0d\u80fd\u5f88\u597d\u7684\u5904\u7406\u8fd9\u7c7b\u4efb\u52a1\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u7528\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u901a\u5e38\u65e0\u6cd5\u7ef4\u62a4\u8fd9\u4e48\u5e9e\u5927\u7684\u7cfb\u7edf\u4ea4\u4e92\u5173\u7cfb\uff0c\u5f88\u96be\u5efa\u6a21"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u4e00\u822c\u90fd\u662f\u5b9e\u65f6\u7cfb\u7edf\uff0c\u5b83\u5e76\u4e0d\u592a\u9002\u7528\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\uff0c\u6240\u4ee5\u73b0\u5728\u5927\u90e8\u5206\u4eff\u771f\u4efb\u52a1\u90fd\u662f\u4f7f\u7528\u6e38\u620f\u5f15\u64ce\u6765\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u8fd8\u5305\u542b\u4eba\u7684\u4ea4\u4e92\u5f71\u54cd\uff0c\u662f\u4e00\u4e2a\u4ea4\u4e92\u5f0f\u7cfb\u7edf")),(0,n.kt)("p",null,"\u6240\u4ee5\u76ee\u524d\u5e76\u6ca1\u6709\u5f88\u597d\u7684\u89e3\u51b3\u590d\u6742\u95ee\u9898\u4eff\u771f\u7684\u7a0b\u5e8f\u673a\u5236\u6216\u8005\u7cfb\u7edf\u8f6f\u4ef6\uff0cRealityIS\u6709\u673a\u4f1a\u5728\u8fd9\u65b9\u9762\u63d0\u4f9b\u66f4\u597d\u7684\u57fa\u7840\u67b6\u6784\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"226-\u7ec4\u4ef6\u67e5\u8be2"},"2.2.6 \u7ec4\u4ef6\u67e5\u8be2"),(0,n.kt)("p",null,"To read or write data, you must first find the data you want to change. "),(0,n.kt)("p",null,"The main way of processing DOTS data is ECS queries. Iterating over all entities that have a matching set of components, is at the center of the ECS architecture. "),(0,n.kt)("p",null,"To identify which entities a system should process, use an ",(0,n.kt)("a",{parentName:"p",href:"https://docs.unity3d.com/Packages/com.unity.entities@0.14/api/Unity.Entities.EntityQuery.html"},"EntityQuery"),". An entity query searches the existing archetypes for those that have the components that match your requirements. You can specify the following component requirements with a query:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c#"},"var queryDescription = new EntityQueryDesc\n{\n None = new ComponentType[] { typeof(Frozen) },\n All = new ComponentType[]{ typeof(RotationQuaternion),\n ComponentType.ReadOnly() }\n};\nEntityQuery query = GetEntityQuery(queryDescription);\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6309\u7c7b\u578b\u67e5\u8be2\u7ec4\u4ef6\u5bf9\u7528\u6237\u6765\u8bb2\u4e0d\u592a\u597d\u7406\u89e3\uff0c\u5b83\u8ba9\u4f60\u5fc5\u987b\u5f88\u6e05\u695a\u6240\u6709\u5b9e\u4f53\u4e2d\u54ea\u4e9b\u5b9e\u4f53\u5177\u6709\u54ea\u4e9b\u7ec4\u4ef6\u7684\u7ec4\u5408")),(0,n.kt)("p",null,"\u6309\u7c7b\u578b\u67e5\u627e\u4e5f\u9650\u5236\u4e86\u7ec4\u4ef6\u7684\u884c\u4e3a\uff0c\u5b83\u53ea\u8ddf\u7c7b\u578b\u4e00\u81f4\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u4e00\u4e2a\u653b\u51fb\u53ef\u80fd\u53ea\u9488\u5bf9\u67d0\u4e9b\u7c7b\u578b\u7684\u602a\u7269\uff0c\u8fd9\u4e9b\u602a\u7269\u7684\u6570\u636e\u5c5e\u6027\u662f\u76f8\u540c\u7684\uff0c\u5373\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u503c\u7684\u533a\u95f4\u4e0d\u540c\uff0c\u5b83\u4eec\u88ab\u5206\u4e3a\u4e0d\u540c\u7684\u7c7b\u522b\uff0c\u9664\u975e\u4f60\u91cd\u590d\u5b9a\u4e49Component\uff0c\u8fd9\u4e9bComponent\u6709\u76f8\u540c\u7684\u5c5e\u6027\uff0c\u5426\u5219\u4f60\u65e0\u6cd5\u533a\u5206\u5b83\u4eec\uff0c\u5373Component\u5145\u5f53\u4e86\u7c7b\u578b\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5b83\u53ea\u662f\u6570\u636e\uff0c\u4e0d\u80fd\u5b8c\u5168\u5145\u5f53\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u5bf9\u4e8eDOTS\u4e2d\u7684\u67e5\u8be2\uff0c\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u610f\u4e49\u662f\u53d6\u4ee3\u7c7b\u578b\u5f15\u7528\u7684\uff0c\u6240\u4ee5ECS\u4e2dComponent\u7684\u7c7b\u578b\u9700\u8981\u653e\u5230\u7b26\u53f7\u8868\u4e2d\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u7b26\u53f7\u8868\u4e2d\u7684\u540d\u79f0\u540c\u65f6\u4e5f\u8868\u793a\u4e86\u7b26\u53f7\uff0c\u56e0\u6b64\u7b26\u53f7\u8868\u9700\u8981\u662f\u7ed3\u6784\u4f53\uff0c\u50cfshader\u4e2d\u7684\u53d8\u91cf\u4e00\u6837\uff0c\u8fd9\u4e2a\u7ed3\u6784\u4f53\u7684\u540d\u79f0\u6216\u8005\u8fd9\u4e2a\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u4ee3\u8868\u4e86\u7ec4\u4ef6\u7c7b\u578b\uff1a"),(0,n.kt)("p",null,"\u4f8b\u5982\u7b26\u53f7\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"struct Position{\n float x\n float y\n float z\n}\n")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e2d\u7684\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 1\n\nnamespace SomeComponent : Component{\n public Global.Position as position\n \n fn update(float dt){\n \n }\n} \n")),(0,n.kt)("p",null,"\u5916\u90e8\u5f15\u7528\u7684\u7ec4\u4ef6\uff0c\u4f7f\u7528query\u4fee\u9970\u7b26\uff0c\u8868\u793a\u8fd9\u4e2a\u53d8\u91cf\u4e0d\u662f\u8be5\u5bf9\u8c61\u81ea\u8eab\u7684\u53d8\u91cf\uff0c\u800c\u662f\u67e5\u8be2\u7ed3\u679c\uff0c\u5982\u679c\u6709\u591a\u91cd\u67e5\u8be2\uff0c\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u8054\u5408\u67e5\u8be2\u7684\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u5148\u4ec5\u8003\u8651\u4f46\u7ec4\u4ef6\u67e5\u8be2\uff0cUnity\u95f4\u63a5\u4f7f\u7528\u4e86\u591a\u79cd\u7ec4\u4ef6\u7684\u67d0\u4e9b\u7279\u5b9a\u7ec4\u5408\u6570\u636e\u6765\u5b9a\u4e49\u4e00\u4e2aSystem\uff0c\u56e0\u4e3a\u5355\u4e2a\u7ec4\u4ef6\u65e0\u6cd5\u786e\u5b9a\u6570\u636e\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 2\n\nnamespace AttackComponent:Component{\n query Global.Position[] as positions\n query Global.HP[] as hps\n \n public Global.HP as hp\n public Global.Position position\n \n fn update(float dt){\n if input == 'B' {\n for i in positions{\n if(distance(position-positions)<10){\n positions[i].x -= hp\n }\n }\n }\n }\n}\n")),(0,n.kt)("h4",{id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"},"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"),(0,n.kt)("p",null,"\u5728Unity DOTS\u4e2d\uff0c\u6309\u7ec4\u4ef6\u7ec4\u5408\u67e5\u8be2\u6709\u4e24\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5927\u7684\u597d\u5904\u662f\u76f4\u63a5\u83b7\u53d6\u6570\u636e\uff0c\u56e0\u4e3aSystem\u9700\u8981\u64cd\u4f5c\u8fd9\u4e9b\u6570\u636e\uff0c\u6240\u4ee5\u76f4\u63a5\u58f0\u660e\u8fd9\u4e9b\u7c7b\u578b\u5c31\u4e0d\u4f1a\u51fa\u9519"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u624d\u662f\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\uff0c\u5c06\u7ec4\u5408\u5b9a\u4e49\u4e3a\u4e00\u79cd\u7279\u5b9a\u7684\u903b\u8f91\u7c7b\u578b")),(0,n.kt)("p",null,"\u76ee\u524d\u770b\u8d77\u6765\u5f62\u6210\u8fd9\u5957\u673a\u5236\u7684\u6838\u5fc3\u539f\u56e0\u662f\u56e0\u4e3a\u524d\u8005\uff1b\u4f46\u662f\u8fd9\u79cd\u7ec4\u5408\u672c\u8d28\u4e0a\u4e0d\u662f\u771f\u6b63\u7684\u67e5\u8be2\u6761\u4ef6\uff0c\u4ed6\u53ef\u80fd\u5bfc\u81f4\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4e00\u4e2aComponent\u80fd\u88ab\u591a\u4e2aSystem\u4f7f\u7528\uff0c\u5c31\u8bf4\u660eComponent\u672c\u8eab\u53ef\u4ee5\u5177\u5907\u591a\u4e2a\u610f\u4e49\uff0c\u4f8b\u5982\u4e24\u4e2a\u4e0d\u540c\u7684System\u6709\u53ef\u80fd\u5b8c\u5168\u6309\u7167\u76f8\u53cd\u7684\u903b\u8f91\u53bb\u5904\u7406\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u5b9a\u4e49\u4e00\u4e2aComponent\u6709\u53ef\u80fd\u521a\u597d\u4e0d\u662f\u67d0\u4e2aSystem\u671f\u671b\u7684\u65b9\u5f0f\uff0c\u7136\u800c\u6700\u7ec8\u5b83\u8fd8\u662f\u88ab\u5f53\u4f5c\u4e86\u67e5\u8be2\u6761\u4ef6\u3002w"),(0,n.kt)("h4",{id:"2262-\u663e\u5f0f\u58f0\u660e"},"2.2.6.2 \u663e\u5f0f\u58f0\u660e"),(0,n.kt)("p",null,"\u8fd8\u662f\u9700\u8981\u67d0\u79cd\u663e\u5f0f\u58f0\u660e\u7684\u7c7b\u578b\uff0c\u54ea\u6015\u662fLayer\u8fd9\u6837"),(0,n.kt)("p",null,"\u611f\u5174\u8da3\u7684\u6570\u636e+TAG\u6570\u7ec4\uff08\u591a\u4e2aTAG\u611f\u5174\u8da3\uff09"),(0,n.kt)("p",null,"\u53ea\u9700\u8981\u58f0\u660e\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\u5c31\u884c"),(0,n.kt)("p",null,"\u7531\u4e8e\u6570\u636e\u65e0\u6cd5\u8868\u8fbe\u7c7b\u578b\uff0c\u6709\u7528\u6237\u624b\u52a8\u8bbe\u5b9a"),(0,n.kt)("p",null,"\u53ef\u4ee5\u50cfUnity\u4e00\u6837\u5b9a\u4e49\u4e00\u4e2aLayer\u5217\u8868\uff0c\u65b9\u4fbf\u7528\u6237\u5bf9\u5bf9\u8c61\u8fdb\u884c\u5f52\u7c7b"),(0,n.kt)("p",null,"Unity\u7684Component \u7ec4\u5408\u67e5\u8be2\u53cd\u800c\u4e0d\u597d\u7406\u89e3\uff0c\u592a\u590d\u6742\uff0c\u9700\u8981\u8bb0\u5fc6\u66f4\u590d\u6742\u7684\u4e1c\u897f\uff0c\u76f8\u6bd4Tag\uff0ctag\u6982\u5ff5\u8db3\u591f\u7b80\u5355"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8981\u80fd\u4efb\u610f\u67e5\u8be2\uff0c\u5c31\u53ef\u4ee5\u6ee1\u8db3\u901a\u7528\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u6ee1\u8db3\u4efb\u610f\u7ec4\u4ef6\u95f4\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8bed\u4e49\u5316")),(0,n.kt)("h4",{id:"2263-rust-ecs"},"2.2.6.3 RUST ECS"),(0,n.kt)("p",null,'You can use empty structs to help you identify specific entities. These are known as "marker components". Useful with ',(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),"."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Add this to all menu ui entities to help identify them\n#[derive(Component)]\nstruct MainMenuUI;\n\n/// Marker for hostile game units\n#[derive(Component)]\nstruct Enemy;\n\n/// This will be used to identify the main player entity\n#[derive(Component)]\nstruct Player;\n")),(0,n.kt)("h4",{id:"2264-labelslayers"},"2.2.6.4 Labels/Layers"),(0,n.kt)("h3",{id:"227-component--system"},"2.2.7 Component + System"),(0,n.kt)("p",null,"Unity\u5c06Component\u548cSystem\u533a\u5206\u5f00\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\u5c06\u4ee3\u7801\u548c\u6570\u636e\u5206\u5f00\uff0c\u4f7f\u5f97System\u4e2d\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff1b\u5373System\u672c\u8eab\u4e5f\u4e0d\u80fd\u6709\u4efb\u4f55\u5b9e\u4f8b\u6570\u636e\uff0c\u56e0\u4e3a\u90a3\u6837\u76f8\u5bf9\u4e8e\u5b83\u9700\u8981\u5904\u7406\u7684Component\u800c\u8a00\uff0c\u5176\u4e2d\u5b58\u5728\u4e86\u201c\u5168\u5c40\u53d8\u91cf\u201d\uff0c\u8fd9\u5f15\u5165\u4e86\u5b9e\u4f53\u95f4\u7684\u76f8\u5173\u6027\uff0c\u8026\u5408\uff0c\u5e76\u4f7f\u5f97\u5f88\u96be\u5b9a\u4e49\u6bcf\u4e2aComponent\u4e4b\u95f4\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e5f\u5e26\u6765\u4e86\u4e0d\u597d\u7684\u540e\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u8005\u9700\u8981\u5206\u522b\u5355\u72ec\u6dfb\u52a0Component\u548cSystem"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4f7f\u7528\u8005\u5fc5\u987b\u5f88\u5c0f\u5fc3\u5904\u7406\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6bd4\u5982\u4f60\u5b9a\u4e49\u4e86Component\uff0c\u4f46\u662f\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u6ca1\u6709\u6dfb\u52a0\u76f8\u5e94\u7684System\uff0c\u5219\u6570\u636e\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u884c\u4e3a\u5b9a\u4e49\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5f15\u5165\u4e86System\uff0c\u4f46\u662f\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u5bf9\u5e94Component\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u5219\u8fd9\u4e9bSystem\u4e5f\u65e0\u6cd5\u53d1\u6325\u4f5c\u7528\u3002")),(0,n.kt)("p",null,"Creation\u540c\u65f6\u89e3\u51b3\u4e86\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0c\u65b9\u6cd5\u662f\u5c06\u4e24\u8005\u878d\u4e3a\u4e00\u4f53\uff0c\u4f46\u662f\u901a\u8fc7\u7f16\u8bd1\u5668\u5c06\u5c5e\u6027\u62bd\u53d6\u4e3aComponent\uff08\u5f53\u7136Unity\u4e5f\u5b58\u5728\u7c7b\u4f3c\u7684\u8f6c\u6362\u673a\u5236\uff09\uff1b\u66f4\u8fdb\u4e00\u6b65\uff0cCreation\u901a\u8fc7public\u3001private\u548cquery\u6807\u5fd7\u7b26\u533a\u5206\u4e86\u516c\u5171\u53d8\u91cf\u3001\u79c1\u6709\u53d8\u91cf\u548c\u5f15\u7528\u53d8\u91cf\uff0c\u4f7f\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cCreation\u548cUnity\u5728\u529f\u80fd\u5c42\u9762\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("h4",{id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"},"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u672a\u77e5\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5bf9\u5b9e\u4f53\u6267\u884c\u64cd\u4f5c\uff0c\u6240\u6709\u5f88\u96be\u4fdd\u8bc1\u987a\u5e8f\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u6bd4Unity DOTS\u8981\u590d\u6742\uff0c\u540e\u8005\u7531\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u6240\u6709\u7ec4\u4ef6\uff0c\u80fd\u591f\u4e25\u683c\u4fdd\u8bc1\u903b\u8f91\u987a\u5e8f\u3002\u4f46\u662fRealityIS\u4e2d\uff0c\u540c\u4e00\u4e2a\u5b9e\u4f53\u53ef\u80fd\u5305\u542b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u987a\u5e8f\uff0c\u53ef\u80fd\u4f1a\u5b8c\u5168\u51b2\u7a81\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5141\u8bb8\u7528\u6237\u81ea\u884c\u53bb\u8c03\u6574\u6267\u884c\u987a\u5e8f\uff0c\u4f1a\u4e00\u4e0b\u5b50\u5bf9\u7528\u6237\u63d0\u9ad8\u4e86\u5f88\u591a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u4ed4\u7ec6\u53bb\u5206\u6790\u4e00\u4e0b\u4e00\u822c\u7684\u60c5\u51b5\uff0c\u5982\u679c\u80fd\u591f\u5728\u505a\u4e00\u4e0b\u5047\u8bbe\u6216\u8005\u7ea6\u675f\uff0c\u90a3\u4e48\u95ee\u9898\u5c31\u4f1a\u7b80\u5316\u5f88\u591a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ea\u8bfb\u7684\u7ec4\u4ef6\u90fd\u653e\u5728\u6700\u540e\u6267\u884c\uff0c\u6240\u6709\u5bf9\u53d8\u91cf\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u4e0d\u7528\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"2\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ef\u5199\u5165\u6216\u8005\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u90fd\u987a\u5e8f\u65e0\u5173")),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u8fdb\u4e00\u6b65\uff0c\u6211\u4eec\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"3\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u5c5e\u6027")),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2a\u95ee\u9898\u5c31\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u88ab\u5904\u7406\uff0c\u865a\u62df\u673a\u52a8\u6001\u8c03\u6574\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5728\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e2d\uff0c\u8fd9\u4e09\u4e2a\u6761\u4ef6\u8fd8\u662f\u6bd4\u8f83\u5bb9\u6613\u6ee1\u8db3\u3002\u5176\u4e2d\u5bf9\u4e8e\u7b2c3\u6761\uff0c\u8fd9\u5c31\u6709\u70b9\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u662f\u4e00\u4e2a \u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ea\u6709\u4e00\u4e2a\u8f93\u51fa\u503c\uff0c\u5e76\u4e14\u6240\u6709\u8f93\u5165\u53c2\u6570\u90fd\u662f\u53ea\u8bfb\u7684\u3002\u5982\u679c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u7684\u5c5e\u6027\uff0c\u90a3\u4e48\u5c31\u5f88\u5bb9\u6613\u533a\u5206\u51fa\u6240\u6709\u53ea\u8bfb\u548c\u53ef\u5199\u5165\u4e24\u5927\u7c7b\u7ec4\u4ef6\u3002\u5373\u662f\u8bf4\uff0c\u7b2c\u4e09\u4e2a\u5047\u8bbe\u53ef\u4ee5\u628a\u6240\u6709\u7ec4\u4ef6\u5206\u4e3a\u4e24\u7c7b\uff1a\u53ea\u8bfb\u7684\u7ec4\u4ef6\u548c\u53ea\u5199\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5373\u4fbf\u5982\u6b64\uff0c\u8fd8\u662f\u5269\u4e0b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u7ec4\u4ef6\u5bf9\u4e24\u4e2a\u5c5e\u6027\u4ea4\u53c9\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8bfb\u6216\u8005\u53ea\u5199\u5c5e\u6027\u4e4b\u95f4\u7531\u4f9d\u8d56\u5173\u7cfb")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u5728\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u81ea\u52a8\u6392\u5e8f\u65f6\uff0c\u5c06\u65e0\u6cd5\u63a8\u7b97\u5b9e\u9645\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6709\u4e24\u79cd\u5904\u7406\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u9047\u5230\u51b2\u7a81\u65f6\u4ea4\u7531\u7528\u6237\u6765\u6307\u5b9a\uff0c\u4f46\u662f\u7531\u4e8e\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u5168\u5c40\u7684\uff0c\u800c\u4e0d\u662f\u6839\u636e\u7528\u6237\u8bbe\u7f6e\u6765\u7684\uff0c\u4f8b\u5982\u4e24\u4e2a\u7528\u6237\u53ef\u80fd\u8bbe\u7f6e\u4e86\u76f8\u53cd\u7684\u987a\u5e8f\uff0c\u6240\u4ee5\u8fd9\u79cd\u65b9\u6cd5\u4e0d\u53ef\u53d6\uff0c\u5e76\u4e14\u5b83\u9700\u8981\u7528\u6237\u4ecb\u5165\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u662f\u7531\u5f00\u53d1\u8005\u6765\u89e3\u51b3\u51b2\u7a81")),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u5f00\u53d1\u8005\u662f\u6700\u4e86\u89e3\u903b\u8f91\u7684\uff0c\u800c\u4e14\u5f00\u53d1\u8005\u4e00\u65e6\u89e3\u51b3\u597d\u51b2\u7a81\u5c31\u4e0d\u9700\u8981\u7528\u6237\u5728\u505a\u4e0d\u5fc5\u8981\u5e76\u4e14\u589e\u52a0\u590d\u6742\u5ea6\u7684\u8bbe\u7f6e\u3002\u53ef\u4ee5\u628a\u6240\u6709\u4ee3\u7801\u770b\u6210\u4e00\u4e2a\u6574\u4e2a\uff0c\u5f53\u5f00\u53d1\u8005\u5728\u63d0\u4ea4\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u5e76\u4e0d\u53ea\u662f\u8981\u8003\u8651\u81ea\u5df1\u7684\u4ee3\u7801\u51b2\u7a81\uff0c\u8fd8\u8981\u8003\u8651\u5168\u5c40\u4ee3\u7801\u51b2\u7a81\u3002\u4e24\u4e2a\u5f00\u53d1\u8005\u63d0\u4ea4\u4ee3\u7801\u603b\u662f\u6709\u65f6\u95f4\u5148\u540e\u987a\u5e8f\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u4e8e\u540e\u63d0\u4ea4\u4ee3\u7801\u7684\u4eba\uff0c\u7cfb\u7edf\u629b\u51fa\u6240\u6709\u53ef\u80fd\u4e0e\u4e4b\u51b2\u7a81\u7684\u7ec4\u4ef6\u3002\u6709\u5f00\u53d1\u8005\u901a\u8fc7\u4e86\u89e3\u51b2\u7a81\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u5e76\u6bd4\u8f83\u81ea\u5df1\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u6765\u8bbe\u7f6e\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u4e5f\u4e0d\u662f\u5b8c\u5168\u53ef\u9760\uff0c\u4f8b\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u6839\u672c\u6ca1\u6709\u770b\u5bf9\u65b9\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u968f\u4fbf\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u987a\u5e8f\uff0c\u8fd9\u65f6\u5019\u53ef\u80fd\u5bfc\u81f4\u9519\u8bef\u903b\u8f91\u3002\u4e00\u79cd\u53ef\u80fd\u7684\u65b9\u6cd5\u662f\uff0c\u5bf9\u8fd9\u4e9b\u6709\u51b2\u7a81\u7684\u7ec4\u4ef6\uff0c\u540e\u9762\u5f00\u53d1\u8005\u7684\u8bbe\u7f6e \u7ed3\u679c\u4f1a\u53d1\u9001\u7ed9\u524d\u9762\u5f00\u53d1\u8005\uff0c\u524d\u9762\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u6267\u884c\u987a\u5e8f\u63d0\u51fa\u5f02\u8bae\u6216\u8005\u540c\u610f\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5206\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5c3d\u91cf\u907f\u514d\u7f16\u5199\u8fd9\u79cd\u5728\u4e00\u5e27\u4e4b\u5185\u6709\u590d\u6742\u4f9d\u8d56\u7684\u7ec4\u4ef6\uff0c\u6bd4\u5982\u5982\u679c\u7ec4\u4ef6\u4e4b\u524d\u90fd\u5b8c\u5168\u6ca1\u6709\u4f9d\u8d56\uff0c\u90a3\u5c31\u4e0d\u4f1a\u5b58\u5728\u8fd9\u4e2a\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\uff0c\u5177\u6709\u8fd9\u79cd\u590d\u6742\u987a\u5e8f\u7684\u7ec4\u4ef6\uff0c\u901a\u5e38\u5bf9\u5e94\u7684\u662f\u4e00\u4e2a\u5f00\u53d1\u8005\u5185\u90e8\u7684\u903b\u8f91\uff0c\u8fd9\u65f6\u5019\u5b83\u81ea\u5df1\u8bbe\u7f6e\u6b63\u786e\u7684\u987a\u5e8f\u5c31\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8fd9\u79cd\u53ef\u80fd\u6027\uff0c\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u6ca1\u6709\u610f\u4e49\uff0c\u53ef\u4ee5\u4e0d\u7528\u7406\u4f1a\uff0c\u7531\u7528\u6237\u81ea\u884c\u53d1\u73b0\u95ee\u9898\u540e\u53cd\u9988\u7ed9\u5f00\u53d1\u8005\u534f\u5546\u5904\u7406")),(0,n.kt)("h4",{id:"2272-change-driven-update"},"2.2.7.2 Change-driven update"),(0,n.kt)("p",null,"\u4e8b\u4ef6\u8868\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u5efa\u7acb\u4e8b\u4ef6\u961f\u5217\uff0c\u5ef6\u8fdf\u5230\u4e00\u8d77\u6267\u884c\uff0c\u6d88\u9664\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5e76\u53d1\uff0c\u540c\u65f6\u80fd\u591f\u505a\u5230\u5e76\u884c\u8ba1\u7b97\uff0c\u56e0\u4e3a\u4e00\u4e9b\u76f8\u540c\u7c7b\u578b\u7684\u4e8b\u4ef6\u53ef\u80fd\u5bf9\u5e94\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5373\u4f7f\u540c\u4e00\u4e2a\u4e8b\u4ef6\u5bf9\u5e94\u4e0d\u540c\u7684\u7ec4\u4ef6\uff0c\u901a\u8fc7\u6309\u7ec4\u4ef6\u7c7b\u578b\u6392\u5e8f\u548c\u7ec4\u7ec7\uff0c\u4e5f\u80fd\u5b66\u5230\u6309\u987a\u5e8f\u5e76\u884c\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4e00\u90e8\u5206\u7531\u72b6\u6001\u53d8\u5316\u5bfc\u81f4\u7684\u5206\u652f\u8f6c\u5316\u4e3a\u4e8b\u4ef6\u5e8f\u5217\uff0c\u5f53\u7136\u5b9e\u9645\u5904\u7406\u673a\u5236\u53ef\u80fd\u4e0d\u4e00\u6837")),(0,n.kt)("p",null,"\u6570\u636e\u5e93\u91cd\u7ec4\u6d89\u53ca\u66f4\u65b0\u7b26\u53f7\u8868\u3001\u4ee5\u53caTable\u7684\u6570\u636e\u91cd\u65b0\u8c03\u6574\uff0c\u7b26\u53f7\u8868\u548cTable API\u4e00\u6837\uff0c\u9700\u8981\u7b26\u53f7\u8868API"),(0,n.kt)("h4",{id:"2273-ecs"},"2.2.7.3 ECS"),(0,n.kt)("p",null,"Unity\u4e2dECS\u7684system \u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u8ddfComponent \u4e4b\u95f4\u7684\u8054\u7cfb\u7531System \u5bf9Entity\u7684Query\u5b9a\u4e49\uff0c\u4f46\u662f\u5e26\u6765\u7684\u7ed3\u679c\u662f\u7cfb\u7edf\u521d\u59cb\u5316\u7684\u65f6\u5019\u9700\u8981\u72ec\u7acb\u5b8c\u6210\u4e24\u4e2a\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bbe\u7f6e\u6bcf\u4e2aEntity\u7684Component "),(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f8b\u5316\u6240\u6709\u7cfb\u7edf\u4f1a\u4f7f\u7528\u7684System ")),(0,n.kt)("p",null,"\u8fd9\u79cd\u5f31\u5173\u7cfb\u7684\u4e00\u4e2a\u53ef\u80fd\u7684\u7ed3\u679c\u662f\u6709\u4e9bSystem \u53ef\u80fd\u67e5\u8be2\u4e0d\u5230\u4efb\u4f55\u5177\u6709\u611f\u5174\u8da3\u7684Component \uff0c\u800c\u4e14\u7cfb\u7edf\u6ca1\u6cd5\u81ea\u52a8\u8ba1\u7b97\uff0c\u53ea\u80fd\u7531\u5f00\u53d1\u8005\u624b\u52a8\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cdSystem \u5bf9Component \u7c7b\u578b\u7684\u786e\u5b9a\u6027\u5f15\u7528\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u5f88\u96be\u52a8\u6001\u6784\u5efa\u65b0\u7684\u573a\u666f"),(0,n.kt)("p",null,"\u800c\u4e14\u5173\u952e\u662f\u666e\u901a\u7528\u6237\u5f88\u96be\u53bb\u7406\u89e3\u4e0a\u8ff0\u4e24\u4e2a\u64cd\u4f5c\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u7ed9\u4e00\u4e2aEntity \u6dfb\u52a0\u4e86\u67d0\u4e2aComponent \uff0c\u4f46\u662f\u4ed6\u5f88\u96be\u6bd4\u8f83\u660e\u786e\u5730\u8981\u53bb\u518d\u6dfb\u52a0\u54ea\u4e9bSystem \uff0c\u8fd9\u53ef\u80fd\u9700\u8981\u7c7b\u4f3c\u4e8e\u7ed9\u4e00\u4e2a\u5bf9\u5e94\u8868\uff0c\u800c\u8fd9\u79cd\u5bf9\u5e94\u5173\u7cfb\u53ef\u80fd\u6709\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u6309\u7167System \u7684\u529f\u80fd\u63cf\u8ff0\u6dfb\u52a0\u4e86\u67d0\u4e2aSystem \uff0c\u4ed6\u53c8\u53ef\u80fd\u5fd8\u4e86\u8981\u7ed9\u4e00\u4e9bEntity \u6dfb\u52a0\u5bf9\u5e94\u7684Component \uff0c\u7a0b\u5e8f\u6ca1\u529e\u6cd5\u68c0\u67e5\u8fd9\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u66f4\u4e25\u91cd\u7684\uff0cSystem \u7684\u5b9a\u4e49\u548c\u5f00\u53d1\u5fc5\u987b\u4e86\u89e3Component \u7684\u5b9a\u4e49\uff0c\u8fd9\u5c31\u56de\u5230\u4ee5\u524d\u7684\u95ee\u9898\uff1aComponent \u9700\u8981\u534f\u8bae\uff0c\u8fd9\u5f88\u590d\u6742")),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aSystem \u548cComponent \u662f\u4e25\u683c\u76f8\u5173\u7684\uff0c\u4ed6\u4eec\u5206\u5f00\u6ca1\u6709\u610f\u4e49\uff0c\u5728OOP\u4e2d\u5b83\u4eec\u5c31\u662f\u5b9a\u4e49\u5728\u4e00\u8d77\u7684\uff0c\u5728\u4e00\u8d77\u53ef\u4ee5\u907f\u514d\u9700\u8981\u505a\u4e24\u4e2a\u72ec\u7acb\u770b\u8d77\u6765\u4e0d\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u5b9e\u9645\u4e0a\u662f\u76f8\u5173\u7684"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u548c\u5728\u4e00\u8d77\uff0c\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u4e2a\u65b0\u7684\u7406\u89e3\u4e0a\u7684\u95ee\u9898\uff1a"),(0,n.kt)("p",null,"System \u5168\u5c40\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662f\u968f\u7740Component \u4e00\u8d77\u52a0\u5230\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f7f\u5f97\u770b\u8d77\u6765\u6bcf\u4e2aEntity \u5bf9\u4f1a\u6267\u884c\u8fd9\u4e2a\u65b9\u6cd5"),(0,n.kt)("p",null,"\u4f46\u8fd9\u95ee\u9898\u662f\u5426\u4e5f\u4e0d\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5185\u90e8\u7ec4\u4ef6\uff0c\u4ed6\u672c\u6765\u4e5f\u662f\u9700\u8981\u6bcf\u4e2a\u5bf9\u8c61\u6267\u884c\u4e00\u6b21\uff0c\u5728ECS\u4e2d\u53ea\u662f\u6211\u4eec\u5f3a\u8c03\u5e76\u884c\uff0c\u5176\u4e2d\u4e00\u4efd\u4ee3\u7801\u5bf9\u591a\u4e2a\u6570\u636e\u6267\u884c\uff0c\u800c\u9690\u85cf\u4e86System \u5176\u5b9e\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u6267\u884c\u7684\u611f\u89c9\uff0c\u4f46\u662f\u5728\u5185\u90e8\u5176\u5b9e\u662f\u5faa\u73af\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u8981\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7279\u5b9a\u5b9e\u4f53\u904d\u5386\u5176\u4ed6\u5b9e\u4f53\uff0c\u4ed6\u5176\u5b9e\u4e5f\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u4f1a\u6267\u884c\uff0c\u6bd4\u5982\u4e00\u4e2a\u5854\u9632\u6e38\u620f\uff0c\u90a3\u4e2a\u70ae\u5854\u90fd\u8981\u904d\u5386\u884c\u8d70\u7684\u602a\u7269\uff0c\u770b\u770b\u662f\u5426\u5728\u8303\u56f4\u5185\uff0c\u5982\u679c\u5728\u8303\u56f4\u5185\u5c31\u5bf9\u5176\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5168\u5c40\u7684\uff0c\u90a3\u5c31\u66f4\u597d\u7406\u89e3\uff0c\u89e3\u91ca\u5668\u4fdd\u8bc1\u5168\u5c40\u53ea\u6709\u4e00\u4e2a\uff0c\u90a3\u4e48\u5c31\u662f\u8be5\u5b9e\u4f53\u6267\u884c\u4e86\u4e00\u6b21")),(0,n.kt)("p",null,"\u5230\u8fd9\u91cc\u4e3b\u8981\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5bf9\u591a\u4e2a\u5b9e\u4f53\u7684\u904d\u5386\u5f80\u5f80\u5e26\u6709\u4e00\u4e2a\u6761\u4ef6\u5f62\u6210\u5206\u652f\uff0c\u5e76\u4e14\u90a3\u4e2a\u5e76\u884c\u7684\u7ec4\u4ef6A\u5185\u90e8\u90fd\u5728\u5355\u72ec\u8bbf\u95ee\u6240\u6709\u5b9e\u4f53\uff0c\u53c8\u53ef\u80fd\u9020\u6210\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1\u51b2\u7a81\uff0c\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u8bbf\u95ee\u540c\u4e00\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u5c40\u90e8\u6027\u7834\u574f\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5206\u522b\u8bbf\u95ee\u4e0d\u540c\u7684\u6570\u636e")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u95ee\u9898\uff0c\u89e3\u91ca\u5668\u8981\u628a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u7684\u6267\u884c\u8f6c\u6362\u4e3a\u4e00\u4e2a\u4e00\u4e2a\u7ec4\u4ef6A\u987a\u5e8f\u6267\u884c\uff0c\u5728\u6bcf\u4e2a\u987a\u5e8f\u6267\u884c\u7684\u7ec4\u4ef6\u5185\u5bf9\u611f\u5174\u8da3\u7684\u6570\u7ec4\u8fdb\u884c\u5e76\u53d1\u8ba1\u7b97"),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u597d\u7684\u65b9\u6848\uff0c\u5bf9\u6240\u6709\u611f\u5174\u8da3\u7684\u5b9e\u4f53\u6570\u7ec4\uff0c\u5e76\u53d1\u5730\u5b89\u987a\u6267\u884c\u7ec4\u4ef6A\u5bf9\u5e94\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u89e3\u91ca\u5668\u7684\u597d\u5904"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u7531\u4e8eSystem \u770b\u8d77\u6765\u53ef\u80fd\u88ab\u6784\u9020\u591a\u4e2a\u5b9e\u4f8b\uff0c\u6240\u4ee5\u9700\u8981\u89e3\u91ca\u5668\u53ea\u6784\u9020\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u8bb0\u4f4f\u54ea\u4e9b\u7ec4\u4ef6\u5f15\u7528\u4e86\u8fd9\u4e2a\u5b9e\u4f8b\uff0c\u4e5f\u5c31\u662f\u5728Unity\u4e2d\u4e3a\u4e86\u652f\u6301Entity\u7684Query\uff0c\u4ed6\u4e5f\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u6570\u636e\u5e93\u6765\u8bb0\u5f55\u8fd9\u4e9b\u5f15\u7528\u5173\u7cfb\uff0c\u5373\u4f7f\u9488\u5bf9\u7b2c\u4e00\u79cd\u548c\u7b2c\u4e09\u79cd\u7ec4\u4ef6\u4e5f\u662f\u4e00\u6837\u7684"),(0,n.kt)("h4",{id:"2274-ecs\u53c2\u6570"},"2.2.7.4 ECS\u53c2\u6570"),(0,n.kt)("p",null,"\u57fa\u4e8eComponent \u7ec4\u5408\u7684\u65b9\u5f0f\u6539\u53d8\u4e86\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u6a21\u578b\u90fd\u9700\u8981\u53c2\u6570\u4f20\u9012\uff0c\u4e0d\u7ba1\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u7528\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u89c6\u5316\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u58f0\u660e\u5f0f\u7f16\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"HOUDINI \u7a0b\u5e8f\u5316\u7f16\u7a0b")),(0,n.kt)("p",null,"\u4e00\u4e2aSystem \u5904\u7406\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u5206\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u90e8\u5b9a\u4e49\u6570\u636e\uff0c\u5728\u5bf9\u5e94\u7684Component \u4e2d\uff0c\u5185\u90e8\u5b9a\u4e49\u901a\u5e38\u7528\u6765\u4fdd\u5b58\u5e27\u4e0e\u5e27\u4e4b\u95f4\u7684\u5185\u90e8\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5916\u90e8\u5f15\u7528\u6570\u636e\uff0c\u5b9a\u4e49\u4e00\u4e2a\u5168\u5c40\u8f83\u5927\u7684\u516c\u5171\u5c5e\u6027\u540d\u79f0\uff0c\u6bcf\u4e2a\u540d\u79f0\u6709\u7279\u5b9a\u542b\u4e49\uff0c\u4ec5\u6709\u5f15\u7528\u7684\u540d\u79f0\u624d\u4f1a\u52a8\u6001\u7ec4\u5408\u6210\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u673a\u5236\u9760\u7f16\u8bd1\u5668\u6765\u5904\u7406\uff0c\u5168\u5c40\u5c5e\u6027\u8868\u4e4b\u95f4\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u7f16\u8bd1\u5668\u81ea\u52a8\u5f15\u5165\uff1b\u5982\u679c\u4e00\u4e2a\u63d2\u4ef6\u5f00\u53d1\u8005\u6216\u8005Creation\u5f00\u53d1\u8005\u7f16\u5199\u7684\u7ec4\u4ef6\u9700\u8981\u8de8\u7cfb\u7edf\u5f15\u7528\uff0c\u9700\u8981\u5b9a\u4e49\u79c1\u6709\u540d\u79f0\u5217\u8868")),(0,n.kt)("p",null,"Global Name "),(0,n.kt)("p",null,"Private Name"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e00\u6765\uff0cTable Engine \u6240\u505a\u7684\u5927\u90e8\u5206\u64cd\u4f5c\u5c31\u662f\u8fdb\u884c\u6570\u7ec4\u7684\u751f\u6210\u3001\u521d\u59cb\u5316\u3001\u590d\u5236\u3001\u6392\u5e8f\u3001\u4fee\u6539\u3001SOA\u7b49\uff0c\u8fd9\u90e8\u5206\u901a\u8fc7\u539f\u751f\u7684\u9ad8\u6548\u5b9e\u73b0\uff0c\u901a\u5e38Table\u662f\u52a8\u6001\u751f\u6210\u7684\uff0c\u4e0d\u77e5\u9053\u7ef4\u5ea6\u548c\u957f\u5ea6\u7b49\u4fe1\u606f\uff0c\u8fd9\u5c31\u662fTable\u8981\u505a\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"Global Name\u4e2d\u7684\u6bcf\u4e2a\u5c5e\u6027\u540d\u79f0\u90fd\u662f\u5177\u6709\u8bed\u4e49\u7684\uff0c\u76f8\u5f53\u4e8e\u5bbe\u8bed\uff0c\u800c\u6bcf\u4e2aSystem\u5f15\u7528\u7684Name\u90fd\u53ef\u4ee5\u8ffd\u8e2a\uff0c\u56e0\u6b64\u53ef\u4ee5\u5f52\u7eb3\u51faSystem\u5927\u81f4\u7684\u8bed\u4e49\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,"\u5728\u4ec0\u4e48\u6761\u4ef6\u4e0b\u505a\u4ec0\u4e48\u4e8b\u60c5\uff0c\u6761\u4ef6\u901a\u5e38\u662fGlobal Name\u4e2d\u67d0\u4e2a\u5c5e\u6027\u7684\u503c"),(0,n.kt)("p",null,"\u6761\u4ef6 \u4e3b\u8bed \u8c13\u8bed\u52a8\u8bcd \u5bbe\u8bed "),(0,n.kt)("p",null,"\u5982\u679c$NAME<5 System \u7531System\u5f00\u53d1\u8005\u586b\u5199\uff0c\u53ef\u4ee5\u591a\u4e2a Global Name"),(0,n.kt)("p",null,"\u6570\u636e\u5f88\u5c11\u662f\u53ea\u6709\u4e00\u4e2aSystem \u5355\u72ec\u6d88\u8d39\uff0c\u901a\u5e38\u662f\u591a\u4e2aSystem \u4f1a\u5171\u4eab\u4e00\u4e9bcomponent \u6570\u636e\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce\u7ec4\u4ef6\u3001\u52a8\u753b\u7cfb\u7edf\u6216\u5176\u4ed6\u7ec4\u4ef6\u4f1a\u4fee\u6539\u4f4d\u7f6e\uff0c\u800c\u6e32\u67d3\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u8fd9\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u6e32\u67d3"),(0,n.kt)("p",null,"\u4e00\u79cd\u5e38\u7528\u7684\u6a21\u5f0f\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6216\u591a\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u8fdb\u884c\u6d88\u8d39\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u53ea\u8bfb\uff0c\u5e76\u4e14\u4f7f\u7528\u76ee\u7684\u901a\u5e38\u662f\u4e3a\u4e86\u7ed9\u7528\u6237\u53cd\u9988\uff0c\u6216\u8005\u5199\u5165\u5230\u7cfb\u7edf\u6216\u8005\u8fdb\u884c\u6570\u636e\u5b58\u6863")),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u7ec4\u4ef6\u4f1a\u8bbf\u95ee\u6570\u636e\uff0c\u56e0\u6b64\u4e3a\u4e86\u907f\u514d\u6570\u636e\u91cd\u590d\u5b9a\u4e49\uff0c\u6709\u5fc5\u8981\u5b9a\u4e49\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u6807\u51c6\u6570\u636e\u548c\u5bf9\u5e94\u5c5e\u6027\u540d\u79f0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7cfb\u7edf\u901a\u8fc7\u5f15\u7528\u4f7f\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7cfb\u7edf\u4ec5\u4f7f\u7528\u90e8\u5206\u6570\u636e\u5c5e\u6027\uff0c\u901a\u8fc7\u663e\u793a\u58f0\u660e\u5f15\u7528")),(0,n.kt)("h4",{id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"},"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"),(0,n.kt)("p",null,"\u4e24\u79cd\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e8b\u4ef6\uff0c\u53c2\u89c12.2.7.2\u8282\uff0c\u672c\u8d28\u4e0a\u662f\u72b6\u6001\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u8c03\u7528\uff0c\u5c31\u662f\u6b63\u5e38\u65b9\u6cd5")),(0,n.kt)("h4",{id:"2276-\u5355\u4f8b\u7ec4\u4ef6"},"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u6709\u4e00\u7c7b\u7ec4\u4ef6\uff0c\u53ea\u53ef\u4ee5\u6dfb\u52a0\u5230Root\u5bf9\u8c61\u4e0a\uff0c\u5b83\u4e0d\u53ef\u4ee5\u88ab\u6dfb\u52a0\u5230\u4efb\u4f55\u81ea\u5b9a\u4e49\u5b9e\u4f53\u5bf9\u8c61\u4e0a\u3002\u8fd9\u53ef\u4ee5\u7528\u6765\u5904\u7406\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\u3002"),(0,n.kt)("h3",{id:"228-\u6d88\u606f\u901a\u4fe1"},"2.2.8 \u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,"\u7528\u6237\u95f4\u901a\u4fe1\u7684\u60c5\u51b5\u6216\u7c7b\u578b\u6709\u51e0\u4e0b\u51e0\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u548c\u611f\u77e5\uff0c\u8fd9\u662f\u6700\u57fa\u672c\u6743\u9650\uff0c\u8ba9\u522b\u4eba\u53ef\u4ee5\u4e86\u89e3\u4e00\u4e9b\u4f60\u7684\u5c5e\u6027\uff0c\u72b6\u6001 \uff0c\u751a\u81f3\u6027\u683c\uff0c\u4ee5\u53ca\u53ef\u4ee5\u600e\u6837\u4e0e\u4f60\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\uff0c\u6240\u6709\u7528\u6237\u4e4b\u95f4\u7684\u6d89\u53ca\u4fee\u6539\u7684\u64cd\u4f5c\u90fd\u662f\u4e00\u79cd\u4ea4\u6613\uff0c\u4f60\u5fc5\u987b\u6d88\u8017\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90\uff0c\u53e6\u4e00\u65b9\u83b7\u5f97\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90")),(0,n.kt)("p",null,"\u6682\u65f6\u4e0d\u5f00\u653e\u90a3\u79cd\u4f1a\u5bf9\u5176\u4ed6\u4eba\u9020\u6210\u7834\u574f\u6027\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u653b\u51fb\u522b\u4eba\uff0c\u4e5f\u5c31\u662fReality World\u6ca1\u6709\u66b4\u529b\uff0c\u6ca1\u6709\u574f\u4eba\uff0c\u6ca1\u6709\u7834\u574f\u3002"),(0,n.kt)("p",null,"\u4f46\u4f60\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7ecf\u9a8c\u4e0d\u5584\u800c\u7834\u4ea7\uff0c\u4f8b\u5982\u5730\u76ae\u662f\u9700\u8981\u79df\u91d1\u7684\uff0c\u56e0\u6b64\u4f60\u5fc5\u987b\u8d5a\u94b1\uff0c\u5426\u5219\u4f60\u5c31\u6ca1\u6709\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6700\u597d\u7684\u673a\u5236\u662f\u4f60\u7684\u521b\u9020\u529b\u8d8a\u5f3a\uff0c\u4ed8\u51fa\u7684\u65f6\u95f4\u8d8a\u591a\uff0c\u6536\u5165\u8d8a\u9ad8\uff0c\u76f8\u6bd4\u4f20\u7edf\u7684\u6a21\u62df\u7ecf\u8425\u6e38\u620f\u4e3b\u8981 \u4f9d\u8d56\u4e8e\u65f6\u95f4\uff0c\u8fd9\u91cc\u6211\u4eec\u66f4\u5f3a\u8c03\u521b\u9020\u529b\uff0c\u5176\u5b9e\u4e5f\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u80fd\u529b\u3002"),(0,n.kt)("h4",{id:"2281-\u7cfb\u7edf\u673a\u5236"},"2.2.8.1 \u7cfb\u7edf\u673a\u5236"),(0,n.kt)("p",null,"\u4f46\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e9b\u5168\u5c40\u884c\u4e3a\uff0c\u4f8b\u5982\u5929\u6c14\u5bf9\u5168\u4f53\u57ce\u5e02\u4eba\u5458\u7684 \u5f71\u54cd \uff0c\u4f8b\u5982\u653f\u5e9c\u7684\u653f\u7b56\u7b49\uff0c\u8fd9\u4e9b\u540e\u7eed\u518d\u8003\u8651\u3002\u65e9\u671f\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u4ea4\u6613\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6d88\u606f\u901a\u4fe1\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8eID"),"\uff1a\u5728\u7ec4\u4ef6\u5185\u4fdd\u5b58\u7ec4\u4ef6ID\uff0c\u7136\u540e\u76f4\u63a5\u53d1\u9001\u53ea\u7279\u5b9a\u7684\u4e00\u4e2a\u6216\u591a\u4e2aID\uff0c\u5c31\u50cfErlang\u4e2d\u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8e\u7c7b\u578b"),"\uff1a\u4f7f\u7528\u7c7b\u578b+UserID\u8fdb\u884c\u5224\u65ad")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u673a\u5236\u5176\u5b9e\u7c7b\u4f3c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u673a\u5236\uff1a\u9996\u5148\u4f60\u9700\u8981\u53d6\u5f97\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u7136\u540e\u4f60\u5c31\u53ef\u4ee5\u5411\u5176\u53d1\u9001\u6d88\u606f\uff08\u8c03\u7528\u51fd\u6570\uff09\uff0c\u5f53\u7136Erlang\u4f7f\u7528Pid\u8026\u5408\u5ea6\u66f4\u4f4e \u4e00\u4e9b\u3002\u4f46\u8026\u5408\u4ecd\u7136\u662f\u5b58\u5728\u7684\uff0c\u4f8b\u5982\u5bf9\u65b9\u51fd\u6570\u7b7e\u540d\u4fee\u6539\u4e86\uff0c\u6216\u8005\u751a\u81f3\u5220\u9664\u4e0d\u5b58\u5728\u4e86\uff0c\u6216\u8005PID\u88ab\u4fee\u6539\u4e86\uff0c\u90fd\u662f\u53ef\u80fd\u5f15\u8d77\u95ee\u9898\u7684\uff0c\u7a0b\u5e8f\u5f00\u53d1\u8005\u9700\u8981\u53bb\u5c0f\u5fc3\u5730\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\u548c\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"RealityIS\u91c7\u7528\u7684\u662f\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u76f8\u5bf9\u4e8e\u57fa\u4e8eID\u7684\u673a\u5236\u4f1a\u5f15\u5165\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff0c\u5373 N:N\u7684\u5173\u7cfb\uff0c\u57fa\u4e8eID\u7684\u673a\u5236\u672c\u8d28\u4e0a\u662f1:1\u7684\u5173\u7cfb\uff0c\u51761:N\u7684\u5173\u7cfb\u4e5f\u662f\u6309\u987a\u5e8f\u4e00\u4e2a\u4e00\u4e2a\u53d1\u9001\u7684\uff0c\u8fd9\u4e9b\u53d1\u9001\u6d88\u606f\u672c\u8eab\u4e5f\u662f\u6309\u987a\u5e8f\u4e32\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4ecb\u7ecd\u4e24\u79cd\u5e38\u89c1\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Unity\u673a\u5236"),"\uff1aUnity\u7684System\u5e76\u4e0d\u662f\u5355\u4e2a\u7ec4\u4ef6\u7684\u8ba1\u7b97\uff0c\u5b83\u672c\u8d28\u4e0a\u8981\u6c42\u5f00\u53d1\u8005\u7ef4\u62a4\u96c6\u5408\u64cd\u4f5c\u7ed3\u6784\uff0c\u90a3\u4e48\u5bf9\u4e8eN:N\u7684\u95ee\u9898\uff0c\u5f00\u53d1\u8005\u81ea\u5df1\u7f16\u5199\u4e24\u4e2a\u5d4c\u5957\u7684\u5faa\u73af\u7ed3\u6784\u5c31\u53ef\u4ee5\u4e86\uff0c\u4f46\u95ee\u9898\u662f\u6bcf\u4e00\u4e2aSystem\u90fd\u9700\u8981\u7f16\u5199\u8fd9\u79cd\u5faa\u73af\u63a7\u5236\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Erlang\u673a\u5236"),"\uff1a\u5c3d\u7ba1Erlang\u7684\u53d1\u9001\u6d88\u606f\u662f1:1\u7684\uff0c\u4f46\u662f\u63a5\u53d7\u6d88\u606f\u786e\u662fN:1\u7684\uff0cErlang\u7684\u673a\u5236\u662f\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e00\u4e2a\u90ae\u7bb1\u5b58\u50a8\u4e00\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u5e76\u4e0d\u9700\u8981\u611f\u77e5\u5230\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u8fd8\u662f\u5bf9\u5355\u4e2a\u6d88\u606f\u7684\u5904\u7406\uff0c\u4f46\u8981\u6c42\u5f00\u53d1\u8005\u4e3b\u52a8\u7f16\u5199\u4e00\u4e2a\u83b7\u53d6\u6d88\u606f\u7684\u64cd\u4f5c\uff0c\u7136\u540e\u6bcf\u4e2areceive\u7684\u64cd\u4f5c\u5c31\u4f1a\u88ab\u5206\u914d\u4e00\u4e2a\u6d88\u606f\uff0c\u76f4\u81f3\u90ae\u7bb1\u4e2d\u7684\u6240\u6709\u6d88\u606f\u88ab\u5904\u7406\u5b8c\u6bd5")),(0,n.kt)("p",null,"\u663e\u7136Erlang\u7684\u673a\u5236\u5bf9\u5f00\u53d1\u8005\u66f4\u53cb\u597d\u4e00\u4e9b\uff0c\u4f46\u5bf9\u4e8e\u6d88\u606f\u7684\u53d1\u9001\u65b9\u9762\uff0c\u7531\u4e8e\u57fa\u4e8e\u7c7b\u578b\u7684\u8fc7\u6ee4\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u95f4\u63a5\u591a\u540c\u65f6\u5411\u591a\u4e2a\u7ec4\u4ef6\u53d1\u9001\u6d88\u606f\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u8ba9\u5f00\u53d1\u8005\u7ef4\u62a4\u4e00\u4e2aPID\u5217\u8868\u9010\u4e2a\u9010\u4e2a\u53d1\u9001\uff0c\u56e0\u6b64\u9700\u8981\u8fd0\u884c\u65f6\u5c06\u8fd9\u4e2a\u53d1\u9001\u7684\u8fc7\u7a0b\u5f62\u6210\u4e00\u6b21\u5217\u8868\u64cd\u4f5c\uff0c\u6765\u5b9e\u73b0Unity\u673a\u5236\u4e2d\u7684\u5916\u90e8\u5faa\u73af\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u907f\u514d\u5f15\u5165\u5217\u8868\u64cd\u4f5c\u7684\u6982\u5ff5\uff0c\u800c\u4e13\u6ce8\u4e8e\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d1\u9001\u6d88\u606f\u7684\u903b\u8f91\u662f\u901a\u8fc7\u8bfb\u53d6\u7ec4\u4ef6\u5c5e\u6027\u6765\u5b9e\u73b0\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6d88\u606f\u7684\u903b\u8f91\u5219\u662f\u901a\u8fc7\u5199\u5165\u5c5e\u6027\u6765\u5b9e\u73b0\u7684")),(0,n.kt)("p",null,"\u8fd9\u6837\u5c31\u8981\u6c42\u8bfb\u53d6\u7684\u7ec4\u4ef6\u5c5e\u6027\u4e0d\u80fd\u8d85\u8fc71\u4e2a\uff0c\u5426\u5219\u540c\u65f6\u5904\u7406\u591a\u4e2a\u7ec4\u4ef6\u7684\u6d88\u606f\u5c31\u53d8\u5f97\u4e0d\u53ef\u80fd\uff0c\u9664\u975e\u8fd9\u591a\u4e2a\u5c5e\u6027\u540c\u65f6\u6765\u81ea\u4e8e\u540c\u4e00\u4e2a\u5b9e\u4f53\u3002\u8fd9\u4e5f\u662f\u4e00\u79cd\u8fc7\u6ee4\u7684\u6761\u4ef6\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u80fd\u4e0d\u4e00\u5b9a\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8de8\u5b9e\u4f53\u8981\u6c42\u53ea\u8bfb\u53d6\u4e00\u4e2a\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u4e00\u5b9e\u4f53\u53ef\u4ee5\u8bfb\u53d6\u591a\u4e2a\u5c5e\u6027")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u6837\uff0c\u53d1\u9001\u8005\u548c\u63a5\u53d7\u8005\u53ea\u80fd\u662f\u4e00\u4e2a\u5b9e\u4f53\u3002\u8bfb\u53d6\u7684\u6240\u6709\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u53d1\u9001\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u800c\u5199\u5165\u7684\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u63a5\u53d7\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\u3002\u5269\u4e0b\u7684\u95ee\u9898\u5c31\u662fUnity \u4e5f\u9762\u4e34\u7684\u95ee\u9898\uff0c\u5373\u5355\u7eaf\u4f9d\u9760\u7c7b\u578b\u8fc7\u6ee4\u662f\u4e0d\u591f\u7684\uff0c\u9700\u8981\u53e6\u4e00\u4e2a\u5c42\u6b21\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u5c31\u662f\u7528\u6237\u6dfb\u52a0\u7684Type\uff0c\u4f46\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u8003\u8651\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u56e0\u4e3a\u8fd9\u79cd\u7279\u5b9a\u7684\u4e8b\u60c5\u662f\u7531\u4e1a\u52a1\u903b\u8f91\u51b3\u5b9a\u7684\u3002\u5982\u679c\u6709\u5b9a\u4e49\uff0c\u63a5\u53d7\u8005\u548c\u53d1\u9001\u8005\u5fc5\u987b\u624b\u6301\u76f8\u540c\u7684CID\uff0c\u5e76\u4e14\u53ea\u8981\u5176\u4e2d\u4e00\u4e2a\u62e5\u6709CID\uff0c\u5b83\u4eec\u5c31\u4e0d\u80fd\u4e0e\u6240\u6709\u4e0d\u5177\u5907\u76f8\u540cCID\u7684\u7ec4\u4ef6\u8fdb\u884c\u901a\u4fe1\uff0c\u8fdb\u4e00\u6b65\uff0c\u8fd9\u79cdCID\u53ef\u4ee5\u8f6c\u5316\u4e3a\u516c\u94a5\u548c\u79c1\u94a5\uff0c\u907f\u514d\u88ab\u76f8\u540c\u7684CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4f8b\u5982\u653b\u51fb\u8005\u4f1a\u5c1d\u8bd5\u4e0e\u6240\u6709CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4e8b\u5b9e\u4e0a\u4ed6\u5e94\u8be5\u662f\u9ed8\u8ba4\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"2282-\u7ec4\u4ef6\u5b89\u5168"},"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168"),(0,n.kt)("p",null,"\u4e0d\u80fd\u5bf9\u5176\u4ed6\u4eba\u7684Creation\u6216\u8005\u5b9e\u4f53\u8fdb\u884c\u5220\u9664\u6216\u8005\u4fee\u6539\uff0c\u7406\u8bba\u4e0a\uff0c\u5bf9\u5176\u4ed6\u4eba\u7684\u6570\u636e\u53ea\u80fd\u8bfb\u53d6\uff0c\u6240\u6709\u7684\u4fee\u6539\u64cd\u4f5c\u5747\u662f\u4ea4\u6613"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u6709"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u4e4b\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7528\u6237\uff08\u5305\u62ec\u964c\u751f\u4eba\uff09")),(0,n.kt)("h4",{id:"2283-\u6743\u9650\u63a7\u5236"},"2.2.8.3 \u6743\u9650\u63a7\u5236"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u516c\u5171\u5c5e\u6027\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u6838\u5fc3\u5b9a\u4e49\uff0c\u5176\u4ed6\u7684\u5747\u662f\u5bf9\u5b83\u7684\u5f15\u7528\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u5bf9\u8c61\u53ea\u58f0\u660e\u4e00\u6b21\uff0c\u56e0\u6b64\u5b83\u7684\u6743\u9650\u4e5f\u5728\u8fd9\u91cc\u88ab\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5728Creation Script\u4e2d\uff0c\u7531\u4e8e\u53d8\u91cf\u76f4\u63a5\u53d8\u6210\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5b9a\u4e49\u7684\u6982\u5ff5\u88ab\u6a21\u7cca\uff0c\u7b26\u53f7\u8868\u4e4b\u540e\u7684\u5f15\u7528\u6b63\u786e\u88ab\u4fdd\u8bc1\uff0c\u4f46\u662f\u7b26\u53f7\u8868\u7684\u6765\u6e90\u786e\u5b9e\u4e0d\u6e05\u6670\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u63a7\u5236\u53d8\u91cf\u53ea\u80fd\u5728\u4e00\u4e2a\u5730\u65b9\u88ab\u5b9a\u4e49\u3002\u751a\u81f3\u6ca1\u6cd5\u533a\u5206\u662f\u8c01\u201c\u5b9a\u4e49\u4e86\u201d\u53d8\u91cf\u3002\u6bd4\u5982\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u540c\u65f6\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5c5e\u6027\uff0c\u4f46\u5206\u522b\u4f7f\u7528\u4e86\u4e0d\u540c\u7684\u6743\u9650\u63a7\u5236\uff0c\u5219\u53ef\u80fd\u4ea7\u751f\u6b67\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"namespace ComponentA {\n public readonly Global.HP as hp\n}\n\nnamespace ComponentB { \n public readwrite Global.HP as hp\n}\n")),(0,n.kt)("p",null,"\u5f53\u4e0a\u8ff0\u4e24\u4e2a\u7ec4\u4ef6\u88ab\u6dfb\u52a0\u5230\u540c\u4e00\u4e2a\u5b9e\u4f53\u4e86\uff0c\u6743\u9650\u5c06\u53d1\u751f\u6b67\u4e49\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u91cc\u7531\u4ee3\u7801\u5f00\u53d1\u8005\u6765\u5b9a\u4e49\u6743\u9650\u662f\u4e0d\u5408\u9002\u7684\uff0c\u5728\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u4e3a\u4ec0\u4e48\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49\u6743\u9650\uff0c\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u5373\u662f\u5e94\u7528\u7684\u62e5\u6709\u8005\uff0c\u6216\u8005\u8bf4\u5f00\u53d1\u8005\u662f\u6309\u7167\u62e5\u6709\u6240\u5c5e\u8005\u7684\u65e8\u610f\u6216\u610f\u613f\u8fdb\u884c\u8bbe\u7f6e\u7684\uff0c\u6240\u4ee5\u4e0d\u7ba1\u600e\u6837\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u662f\u540c\u4e00\u4eba"),"\u3002"),(0,n.kt)("p",null,"\u968f\u7740UGC\u6216\u7528\u6237\u521b\u4f5c\u5e73\u53f0\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u8eab\u4efd\u7684\u7edf\u4e00\u6027\u53d1\u751f\u4e86\u53d8\u5316\uff1a\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u53ef\u80fd\u662f\u72ec\u7acb\u4e0d\u540c\u7684\u4eba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6743\u9650\u5b8c\u5168\u7531\u5f00\u53d1\u8005\u6307\u5b9a\u662f\u4e0d\u5408\u9002\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u53e6\u5916\u4e00\u4e9b\u7eaf\u8ba1\u7b97\u7684\u6570\u636e\u5c5e\u6027\uff0c\u53ea\u6709\u4ee3\u7801\u5185\u90e8\u624d\u4f1a\u7528\u5230\uff0c\u5e76\u4e14\u7528\u6237\u4e0d\u4f1a\u5173\u5fc3\uff0c\u8fd9\u4e9b\u6570\u636e\u663e\u7136\u662f\u5e94\u8be5\u7531\u5f00\u53d1\u8005\u63a7\u5236\u7684\uff0c\u800c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u533a\u5206\u8fd9\u4e24\u79cd\u53d8\u91cf\u7684\u6743\u9650\uff1a\u903b\u8f91\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u6216\u8005\u7528\u6237\u53d8\u91cf\u3002\u5c3d\u7ba1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49public\u548cprivate\u6743\u9650\uff0c\u4f46\u662f\u8fd9\u79cd\u5b9a\u4e49\u4ecd\u7136\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u7684\u804c\u8d23\u5c31\u4e0d\u662f\u4e3a\u4e86\u533a\u5206\u7528\u6237\u63a7\u5236\u4e0e\u5f00\u53d1\u4e2d\u95f4\u7684\u533a\u522b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u5f80\u5f80\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u610f\u8bc6"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6743\u9650\u548c\u7528\u6237Owner\u9700\u6c42\u4e4b\u95f4\u53ef\u80fd\u662f\u6709\u51b2\u7a81\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u628a\u6743\u9650\u8bbe\u5b9a\u4e4b\u540e\u5c31\u4e0d\u80fd\u66f4\u6539\u4e86\uff0c\u800c\u5b9e\u9645\u4e0a\u7528\u6237\u6743\u9650\u662f\u53ef\u4ee5\u53d1\u751f\u4fee\u6539\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e24\u8005\u4e4b\u95f4\u7684\u5b9a\u4e49\u6ca1\u6709\u5f88\u5f3a\u7684\u7ea6\u675f\u6027\uff0c\u4f8b\u5982\u7406\u8bba\u4e0a\u5f00\u53d1\u8005\u5c06\u6240\u6709\u5c5e\u6027\u90fd\u5b9a\u4e49\u4e3apublic\u90fd\u662f\u53ef\u4ee5\u7684\uff0c\u800cCreation Script\u4fdd\u8bc1public\u5c5e\u6027\u5fc5\u987b\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u4f7f\u5f97\u5f00\u53d1\u8005\u4f1a\u5c0f\u5fc3\u5730\u533a\u5206\u3002")),(0,n.kt)("p",null,"Creation Script\u5b8c\u7f8e\u7684\u533a\u5206\u4e86\u8fd9\u4e24\u8005\u7684\u5b9a\u4e49\uff0c\u5e76\u4e14\u53ef\u4ee5\u5b9e\u73b0\u7528\u6237\u7684\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u6240\u5c5e\u7684\u4e1c\u897f\u662f\u8d44\u4ea7\u62e5\u6709\u8005\u53ef\u4ee5\u968f\u4fbf\u4fee\u6539\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u56fe\u4e66\u9986\uff0c\u7528\u6237\u53ef\u4ee5\u8bbe\u7f6e\u5b83\u662f\u5426\u53ef\u4ee5\u88ab\u8bbf\u95ee\uff0c\u53ef\u4ee5\u5f00\u542f\u548c\u5173\u95ed\u3002\u4f20\u7edf\u7684\u505a\u6cd5\u662f\u628a\u8fd9\u4e9b\u5c5e\u6027\u6620\u5c04\u5230\u4e00\u4e2a\u6570\u636e\u8868\uff0c\u7136\u540e\u7531\u53e6\u4e00\u4e2a\u7a0b\u5e8f\u53bb\u8bfb\u53d6\u5e76\u4fee\u6539\u8fd9\u4e2a\u6570\u636e\u8868\u3002\u8fd9\u4e2a\u6d41\u7a0b\u975e\u5e38\u590d\u6742\uff0c\u589e\u52a0\u4e86\u7a0b\u5e8f\u7684\u590d\u6742\u6027\uff0c\u800cCreation Script\u76f8\u5f53\u4e8e\u662f\u76f4\u63a5\u201c\u4fee\u6539\u7a0b\u5e8f\u201d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u76f4\u63a5\u63a7\u5236\u6570\u636e\uff0c\u751a\u81f3\u76f4\u63a5\u63a7\u5236\u4ee3\u7801\uff0c\u662f\u6211\u4eec\u8fd9\u4e2a\u4e16\u754c\u672c\u6765\u7684\u5f62\u5f0f\u3002")),(0,n.kt)("h4",{id:"2284-\u65f6\u5e8f\u6027"},"2.2.8.4 \u65f6\u5e8f\u6027"),(0,n.kt)("p",null,"\u89c12.3.6.1\u8282\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2285-\u6027\u80fd\u95ee\u9898"},"2.2.8.5 \u6027\u80fd\u95ee\u9898"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h4",{id:"2286-\u4e09\u79cd\u6a21\u5f0f"},"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u51fd\u6570\u7684\u8f93\u51fa\u9650\u5236\u53ea\u6709\u4e00\u4e2a\u53d8\u91cf\uff0c\u8fd9\u4e5f\u662f\u5927\u591a\u6570\u7a0b\u5e8f\u8bed\u8a00\u7684\u89c4\u8303\uff0c\u90a3\u4e48\u51fd\u6570\u4e4b\u95f4\u7684\u8c03\u7528\u6709\u4e09\u79cd\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u81ea\u5df1\u7684\u5176\u4ed6\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u5212\u5206\u4e5f\u9690\u542b\u5730\u610f\u5473\u7740\u53c2\u4e0e\u51fd\u6570\u4ea4\u4e92\u7684\u5bf9\u8c61\u4e0d\u8d85\u8fc72\u4e2a\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u6837\u7684\u5212\u5206\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u7684\u7a0b\u5e8f\u8c03\u7528\uff1a\u53ef\u4ee5\u662f\u4e3b\u52a8\u4fee\u6539\u522b\u4eba\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u662f\u88ab\u52a8\u6d88\u606f\u901a\u77e5\u7684\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u6837\u7684\u5212\u5206\u5bf9\u4e8e\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u6765\u8bb2\uff0c\u4f1a\u5b58\u5728\u4e00\u4e9b\u5e72\u6270\uff0c\u4f7f\u5f97\u53ef\u80fd\u6ca1\u6cd5\u8ba1\u7b97\u51fa\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u4e3a\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u53ef\u80fd\u5b58\u5728\u5faa\u73af\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u8003\u8651\u5230\u4e3b\u52a8\u5f0f\u4fee\u6539\u7684\u5e94\u8be5\u662f\u5c11\u6570\uff0c\u800c\u4e14\u5177\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u9650\u5b9a\u4e3b\u52a8\u5f0f\uff08\u5373\u4e0a\u8ff0\u7b2c\u4e00\u79cd\u60c5\u51b5\uff09\u7684\u7ec4\u4ef6\u603b\u662f\u6700\u4f18\u5148\u6267\u884c\uff0c\u53ea\u6709\u6240\u6709\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u6267\u884c\u5b8c\u4e86\u624d\u4f1a\u6267\u884c\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u65f6\u5019\u7ec4\u4ef6\u7684\u987a\u5e8f\u9700\u8981\u91cd\u65b0\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u66ff\u4ee3\u4e86\u4f20\u7edf\u7684\u6d88\u606f\u5217\u8868\u673a\u5236\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u603b\u662f\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u53ea\u4e0e\u5f53\u524d\u5e27\u6709\u5173\uff0c\u4e0d\u4f1a\u7f13\u5b58\u6d88\u606f\uff0c\u5b9e\u9645\u4e0a\u5b83\u90fd\u4e0d\u9700\u8981\u6d88\u606f\u5217\u8868\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7f16\u7a0b\u4e2d\u7684\u7acb\u5373\u8c03\u7528\uff0c\u4f46\u662f\u6240\u6709\u7684\u7406\u89e3\u8c03\u7528\u662f\u5e76\u884c\u6267\u884c\u7684\u3002")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u662f\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5185\u4fee\u6539\u5176\u4ed6\u7ec4\u4ef6\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u7f13\u5b58\u8fd9\u79cd\u4e00\u6b21\u6027\u7684\u6d88\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u662f\u8fd9\u79cd\u5bf9\u5916\u4e3b\u52a8\u5f0f\u5199\u5165\u7684\u64cd\u4f5c\u4f1a\u5bfc\u81f4\u5e76\u53d1\u51b2\u7a81\u3002"),"Erlang\u4e3a\u4ec0\u4e48\u6ca1\u6709\u5e76\u53d1\u51b2\u7a81\u5c31\u662f\u5b83\u6ca1\u6709\u4e3b\u52a8\u5f0f\u8c03\u7528\uff0c\u90fd\u662f\u54cd\u5e94\u5f0f\u7684\uff0c\u4efb\u4f55\u5bf9\u51fd\u6570\u7684\u8c03\u7528\u90fd\u662f\u8f6c\u6362\u4e3a\u5176\u4ed6\u51fd\u6570\u7684\u6d88\u606f\u5217\u8868\uff0c\u7136\u540e\u518d\u5176\u4ed6\u51fd\u6570\u5185\u90e8\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"229-\u6570\u636e\u4e0e\u5b58\u6863"},"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863"),(0,n.kt)("p",null,"\u63d0\u4f9b\u6570\u636e\u914d\u7f6e\u8868\uff0c\u4ee5\u53ca\u5728\u811a\u672c\u4e2d\u8bbf\u95ee\u6570\u636e\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6570\u636e\u5b58\u50a8\u90fd\u81ea\u52a8\u53d1\u751f\uff0c\u6240\u4ee5\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u7684\u6570\u636e\u90fd\u9700\u8981\u5b58\u6863\uff0c\u4f46\u4e0d\u9700\u8981\u7528\u6237\u6307\u5b9a\u3002"),(0,n.kt)("h4",{id:"2291-\u6570\u636e\u914d\u7f6e"},"2.2.9.1 \u6570\u636e\u914d\u7f6e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc2",src:l(9674).Z,width:"2532",height:"1170"})),(0,n.kt)("h4",{id:"2292-\u5b58\u6863"},"2.2.9.2 \u5b58\u6863"),(0,n.kt)("p",null,"\u5c06\u73a9\u5bb6\u7684\u8fdb\u5ea6\u6570\u636e\u5b58\u6863\uff0c\u9700\u8981\u5b58\u50a8\u81f3\u4e91\u7aef"),(0,n.kt)("h4",{id:"2293-\u4e0d\u8db3"},"2.2.9.3 \u4e0d\u8db3"),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u8ddf\u5bf9\u8c61\u7ba1\u7406\u8d77\u6765\uff0c\u4e0d\u8db3\u7684\u5730\u65b9\u662f\u6570\u636e\u4f1a\u968f\u7740\u5bf9\u8c61\u7684\u5220\u9664\u800c\u5220\u9664\uff0c\u4e0d\u50cf\u4f20\u7edf\u7684\u6570\u636e\u662f\u72ec\u7acb\u5b58\u50a8 \u5728\u6570\u636e\u5e93\u4e2d\uff0c\u5220\u9664\u5bf9\u8c61\u5e76\u4e0d\u4f1a\u5f71\u54cd\u6570\u636e\uff0c\u7136\u540e\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u903b\u8f91\u628a\u6570\u636e\u52a0\u8f7d\u4e0d\u540c\u7684\u5bf9\u8c61\u4e0a\u3002\u8fd9\u5757\u9700\u8981\u6709\u9002\u5f53\u7684\u673a\u5236\u3002"),(0,n.kt)("h3",{id:"2210-\u901a\u7528\u6027"},"2.2.10 \u901a\u7528\u6027"),(0,n.kt)("h4",{id:"22101-\u72ec\u7acb\u7c7b"},"2.2.10.1 \u72ec\u7acb\u7c7b"),(0,n.kt)("p",null,"\u72ec\u7acb\u7684\u7c7b\u5b9a\u4e49\u548cECS\u662f\u7b49\u4ef7\u7684\uff0c\u76f8\u5f53\u4e8e\u628a\u7c7b\u7684\u6bcf\u4e2a\u65b9\u6cd5\u62c6\u4e3a\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u7c7b\u7684\u5b9e\u4f8b\u53d8\u91cf\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\u5171\u4eab\uff0c\u8fd9\u6837\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u53ef\u4ee5\u8bfb\u5199\uff1b\u800cCreation Script\u4f1a\u533a\u5206\u7ec4\u4ef6\u5185\u90e8\u548c\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u6b64\u628a\u4e00\u4e9b\u53ea\u6709\u65b9\u6cd5\u5185\u90e8\u4f1a\u4f7f\u7528\u7684\u53d8\u91cf\u8bbe\u7f6e\u4e3a\u79c1\u6709\u53d8\u91cf\uff0c\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff1b\u800c\u4f20\u7edfOOP\u4e2d\uff0c\u6bcf\u4e2a\u7c7b\u62e5\u6709\u590d\u6742\u7684\u53d8\u91cf--\u56e0\u6b64\u590d\u6742\u7684\u72b6\u6001\uff0c\u8fd9\u4e9b\u72b6\u6001\u6709\u4e9b\u662f\u8868\u5f81\u5b9e\u4f8b\u7ea7\u522b\u72b6\u6001\u7684\uff0c\u800c\u6709\u4e9b\u5219\u53ea\u662f\u5185\u90e8\u4e24\u6b21Update\u4e4b\u95f4\u7684\u4e00\u4e9b\u4e34\u65f6\u72b6\u6001\u3002\u56e0\u6b64\u8fd9\u79cd\u5212\u5206\u4f7f\u7c7b\u7ed3\u6784\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff0c\u6211\u4eec\u80fd\u591f\u533a\u5206\u548c\u5173\u6ce8\u90a3\u4e9b\u771f\u6b63\u5bf9\u5916\u8868\u73b0\u81ea\u8eab\u5c5e\u6027\u7684\u72b6\u6001\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u7406\u8bba\u4e0aA\u548cB\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u4e0d\u9700\u8981\u77e5\u9053\u5bf9\u65b9\u7684\u5b58\u5728\uff0c\u4f46\u8fd9\u79cd\u5b8c\u5168\u65e0\u5173\u7684\u4ea4\u4e92\u5e26\u6765\u7684\u4e00\u4e2a\u540e\u679c\u662f\u7ec4\u4ef6\u6267\u884c\u7684\u987a\u5e8f\u975e\u5e38\u91cd\u8981"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u81ea\u52a8\u8bc6\u522b\u8bfb\u5199\u987a\u5e8f\uff0c\u4f46\u8fd9\u901a\u5e38\u6700\u591a\u4fdd\u8bc1\u8bfb\u548c\u5199\u4e4b\u95f4\uff0c\u4f46\u662f\u591a\u4e2a\u5199\u4e4b\u95f4\u4e5f\u6709\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u5904\u7406\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u540e\u4e00\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52a8\u6807\u8bb0\u6267\u884c\u987a\u5e8f")),(0,n.kt)("h4",{id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"},"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5728A\u548cB\u7ec4\u4ef6\u4e4b\u95f4\u8bbe\u7f6e\u516c\u5171\u53d8\u91cf\uff0c\u5982\uff1a"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"out Global.iHP as iHP\n"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u662fA\u8c03\u7528B\uff0c\u5373A\u9700\u8981\u5411B\u4f20\u9012\u53c2\u6570\uff0c\u5219A\u7684order\u8bbe\u7f6e\u5c0f\u4e8eB\uff0c\u8ba9A\u5148\u4e8eB\u6267\u884c\u5373\u53ef\uff0c\u8fd9\u6837B\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u5f97\u5230A\u8ba1\u7b97\u751f\u6210\u7684\u53c2\u6570")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u90e8\u6709\u591a\u4e2a\u5176\u4ed6\u7c7b\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u6309\u987a\u5e8f\u8bbe\u7f6e\u591a\u4e2a\u7ec4\u4ef6\u7684order"))),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u5c06OOP\u4e2d\u7684\u65b9\u6cd5\u8c03\u7528\u987a\u5e8f\u8f6c\u6362\u4e3a\u7ec4\u4ef6order\u7684\u987a\u5e8f"),(0,n.kt)("h4",{id:"22103-\u6709\u8fd4\u56de\u503c"},"2.2.10.3 \u6709\u8fd4\u56de\u503c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u8f85\u52a9\u65b9\u6cd5\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aLibrary\u800c\u4e0d\u662f\u7ec4\u4ef6\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u5b9e\u4f8b\uff0c\u5177\u6709\u81ea\u5df1\u7684\u5b9e\u4f8b\u53d8\u91cf\uff0c\u8fd9\u4e2a\u65f6\u5019\u9700\u8981\u5c0f\u5fc3\u5730\u5c06\u4e24\u8005\u7684\u65b9\u6cd5\u8c03\u7528\u5173\u7cfb\u62c6\u5206\u5230\u4e24\u5e27\u4e4b\u95f4\uff1aA\u9996\u5148\u6216\u8005B\u4e0a\u4e00\u5e27\u8f93\u51fa\u7684\u7ed3\u679c\uff0c\u8fdb\u884c\u8ba1\u7b97\uff0c\u76f8\u5f53\u4e8eB\u7684\u8fd4\u56de\u503c\uff1b\u7136\u540eA\u5c06\u53c2\u6570\u8f93\u51fa\uff0cB\u6267\u884c\u7684\u65f6\u5019\u6216\u8005A\u7684\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5165\u5230\u5bf9\u7528\u7684\u8f93\u51fa\u53c2\u6570\uff1b\u7136\u540eA\u5728\u4e0b\u4e00\u5e27\u6216\u8005B\u8f93\u51fa\u7684\u53c2\u6570\u8fdb\u884c\u8ba1\u7b97")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5982\u679c\u539f\u6765\u7684OOP\u7c7b\u7279\u522b\u590d\u6742\uff0c\u5c31\u9700\u8981\u5c0f\u5fc3\u5730\u8fdb\u884c\u91cd\u6784\uff0c\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u6709\u4e24\u4e2a\u5373\u4ee5\u4e0a\u7684\u5b9e\u4f8b\u95f4\u51fd\u6570\u8fd4\u56de\u503c\u8c03\u7528\uff0c\u4e0a\u8ff0\u7684\u65b9\u6cd5\u5c31\u4e0d\u884c\uff0c\u9700\u8981\u5bf9\u903b\u8f91\u8fdb\u884c\u8fdb\u4e00\u6b65\u68b3\u7406\uff0c\u6bd4\u5982\u5982\u679c\u662f\u524d\u540e\u6ca1\u6709\u4f9d\u8d56\u72ec\u7acb\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u53ef\u4ee5\u5f88\u597d\u6ef4\u62c6\u5206"),(0,n.kt)("h4",{id:"22104-\u7ee7\u627f"},"2.2.10.4 \u7ee7\u627f"),(0,n.kt)("p",null,"\u7ee7\u627f\u901a\u8fc7\u7ec4\u5408\u5b9e\u73b0"),(0,n.kt)("h4",{id:"22105-\u7ed3\u6784\u4f53"},"2.2.10.5 \u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u7531\u4e8e\u5e95\u5c42\u7684Creation Table Engine\u9700\u8981\u4fdd\u8bc1\u6570\u636e\u662f\u7b80\u5355\u7684\u6570\u7ec4\u7ed3\u6784\uff0c\u56e0\u4e3a\u4e0d\u80fd\u8bbe\u7f6e\u592a\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u4e0d\u652f\u6301\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u53ea\u652f\u6301\u57fa\u672c\u7c7b\u578b\u548c\u77e2\u91cf\u7b49\u57fa\u672c\u7c7b\u578b\uff0c\u5176\u4e2dVector\u901a\u8fc7\u5185\u90e8\u7ed3\u6784\u8fdb\u884c\u5904\u7406"),(0,n.kt)("p",null,"\u5f53\u7136\u5176\u5b9e\u7ec4\u4ef6\u7684\u6570\u636e\u672c\u8eab\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7ed3\u6784\u4f53\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u9700\u8981\u5171\u4eab\u591a\u4e2a\u53d8\u91cf\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u591a\u4e2aout\u53c2\u6570\u5b9e\u73b0\uff0c\u8fd9\u5c31\u76f8\u5f53\u4e8e\u4f20\u9012\u4e00\u4e2a\u9690\u5f0f\u7684\u7ed3\u6784\u4f53\u3002"),(0,n.kt)("h4",{id:"22106-\u63a7\u5236tick\u7684\u9891\u7387"},"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387"),(0,n.kt)("h3",{id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670"),(0,n.kt)("h4",{id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c"},"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c"),(0,n.kt)("p",null,"\u5269\u4e0b\u64cd\u4f5c\u53ea\u6709\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6 ."),(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u8fd0\u7b97\uff0c+=")),(0,n.kt)("p",null,"\u5176\u4e2d\u8bfb\u53d6\u64cd\u4f5c\u4e3b\u8981\u7528\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5224\u65ad\u8d44\u6e90\u662f\u5426\u591f\u7528\uff0c\u5982\u679c\u4e0d\u591f\u7528\u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u4f7f\u7528\u65b9\u53ef\u4ee5\u65b9\u4fbf\u663e\u793a\u4e00\u4e9b\u63d0\u793a\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e9b\u4f9d\u8d56\u4e8e\u603b\u91cf\u7684\u589e\u91cf\u8fd0\u7b97\uff0c\u4f8b\u5982\u589e\u52a0\u603b\u91cf\u768410%")),(0,n.kt)("h4",{id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165"},"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165"),(0,n.kt)("p",null,"\u8d44\u6e90\u7684\u4e24\u79cd\u6d41\u52a8\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d41\u5165\u6a21\u5f0f\uff0c\u4e00\u822c\u5bf9\u5e94\u4e8e\u6536\u96c6\u8d44\u6e90\uff0c\u6b64\u65f6\u9700\u8981\u628a\u4e00\u5b9a\u6570\u91cf\u7684\u8d44\u6e90\u4f20\u5165\u4e00\u4e2a\u5bb9\u5668\uff0c\u800c\u4e0d\u662f\u7531\u8be5\u5bb9\u5668\u53bb\u62c9\u53d6\uff0c\u56e0\u4e3a\u5b83\u5e76\u6ca1\u6709\u4e00\u4e2a\u62c9\u53d6\u6e90\uff0c\u800c\u662f\u76f4\u63a5\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u589e\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u62c9\u53d6\u6a21\u5f0f\uff0c\u5f53\u6211\u4eec\u9700\u8981\u6d88\u8017\u8d44\u6e90\u5df2\u5b8c\u6210\u67d0\u4ef6\u4e8b\u60c5\u65f6\uff0c\u901a\u5e38\u7531\u5b8c\u6210\u8be5\u4e8b\u60c5\u7684\u5b9e\u4f53\u4ece\u8d44\u6e90\u5bb9\u5668\u8fdb\u884c\u62c9\u53d6\uff0c\u8be5\u5b9e\u4f53\u9996\u5148\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u51cf\u91cf\u8ba1\u7b97\uff08\u5f53\u7136\u9700\u8981\u5224\u65ad\u5bb9\u91cf\u662f\u5426\u8db3\u591f\uff09\uff0c\u7136\u540e\u6267\u884c\u81ea\u5df1\u7684\u5904\u7406\u903b\u8f91\uff1b")),(0,n.kt)("p",null,"\u9664\u4e86\u751f\u4ea7\u8d44\u6e90\u7684\u6e90\u5934\uff0c\u5927\u90e8\u5206\u903b\u8f91\u90fd\u5e94\u8be5\u662f\u62c9\u53d6\u6a21\u5f0f\u3002\u8fd9\u91cc\u4e3b\u8981\u7684\u539f\u56e0\u662f\u8026\u5408\uff1a\u5982\u679c\u9700\u8981\u8d44\u6e90\u53d8\u5316\u7684\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u5176\u4ed6\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u662f\u4e0d\u5408\u7406\u7684\uff0c\u8d44\u6e90\u7684\u53d8\u5316\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u77e5\u9053\u8fd9\u4e9b\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u903b\u8f91\u662f\u53d8\u5316\u7684\uff0c\u53ef\u80fd\u589e\u52a0\u65b0\u7684\u903b\u8f91\uff0c\u90a3\u4e48\u8fd9\u6839\u672c\u65e0\u6cd5\u5b9e\u73b0")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e94\u8be5\u662f\u7531\u54cd\u5e94\u7ec4\u4ef6\u6765\u62c9\u53d6\uff0c\u5982\u679c\u67d0\u4e2a\u503c\u53d8\u5316\u4e86\uff0c\u611f\u5174\u8da3\u7684\u7ec4\u4ef6\u81ea\u884c\u6765\u8bfb\u53d6\u503c\u8fdb\u884c\u903b\u8f91\u5904\u7406\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ef\u80fd\u968f\u65f6\u589e\u52a0\u5bf9\u8fd9\u4e9b\u53d8\u5316\u611f\u5174\u8da3\u7684\u65b0\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"},"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u4e2d\uff0c\u8c03\u7528\u67d0\u4e2a\u51fd\u6570\u4f20\u9012\u7684\u53c2\u6570\u901a\u5e38\u662f\u589e\u91cf\u503c\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u6263\u9664\u591a\u5c11\u8840\u91cf\u3002\u8fd9\u4e2a\u51fd\u6570\u4e00\u65e6\u8c03\u7528\u5b8c\u6bd5\uff0c\u5219\u9700\u8981\u4e0b\u4e00\u6b21\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u624d\u4f1a\u518d\u6b21\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728OOP\u7684\u505a\u6cd5\u662f\uff0c\u4e00\u4e2a\u5927\u7684\u51fd\u6570\u4f53\uff0c\u6709\u5f88\u591a\u5206\u652f\uff0c\u51fd\u6570\u9996\u5148\u5224\u65ad\u8f93\u5165\uff0c\u5982\u679c\u9002\u914d\u6280\u80fd\u7684\u4f7f\u7528\uff0c\u5c31\u8fdb\u884c\u6280\u80fd\u91ca\u653e\u5206\u652f\uff0c\u7136\u540e\u8fdb\u800c\u5bf9\u5b9e\u9645\u7684\u6263\u8840\u7684\u51fd\u6570\u8fdb\u884c\u8c03\u7528\uff1b\u5982\u679c\u6ca1\u6709\u8f93\u5165\u53d1\u751f\u6216\u8005\u6ca1\u6709\u8fdb\u5165\u6280\u80fd\u6267\u884c\u5206\u652f\uff0c\u5219\u540e\u7eed\u7684\u51fd\u6570\u5c31\u4e0d\u4f1a\u88ab\u8c03\u7528\u3002\u5c3d\u7ba1\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u6280\u80fd\u7684\u6263\u8840\u589e\u91cf\u503c\u8fd8\u662f\u88ab\u5b58\u653e\u5728\u6280\u80fd\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u5207\u7ec4\u4ef6\u90fd\u662f\u6241\u5e73\u7684\uff0c\u610f\u5473\u7740\u524d\u9762\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u5206\u652f\u6765\u963b\u6321\u524d\u9762\u7684\u6d41\u7a0b\uff0c\u6240\u6709\u7ec4\u4ef6\u9ed8\u8ba4\u90fd\u4f1a\u88ab\u6267\u884c\u3002\u4e3a\u4e86\u5b9e\u73b0\u529f\u80fd\uff0c\u6709\u4e24\u79cd\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u589e\u91cf\u5c5e\u6027\u90fd\u5bf9\u5e94\u4e00\u4e2a\u72b6\u6001\u91cf\uff0c\u4ee5\u8bf4\u660e\u662f\u5426\u9700\u8981\u6267\u884c\u540e\u7eed\u7684\u64cd\u4f5c\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u628aOOP\u65b9\u6cd5\u4e2d\u90a3\u4e9b\u5206\u652f\u8f6c\u6362\u4e3a\u72b6\u6001\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u589e\u51cf\u7ec4\u4ef6\uff0c\u4f8b\u5982\u6ca1\u6709\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u5c31\u5220\u9664\u6280\u80fd\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u5728\u5b9e\u8df5\u4e0a\u5f88\u96be\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6c38\u8fdc\u4f20\u9012\u589e\u91cf\uff0c\u4f8b\u5982\u6280\u80fd\u7ec4\u4ef6\uff0c\u5982\u679c\u91ca\u653e\u5f53\u505a\u6267\u884c\uff0c\u4fee\u6539\u503c\u5c31\u8bbe\u7f6e\u4e3a\u67d0\u4e2a\u5177\u4f53\u7684\u6570\u503c\uff0c\u5426\u5219\u5c31\u8bbe\u7f6e\u4e3a0\uff0c\u8fd9\u6837\u5bf9\u540e\u7eed\u7ec4\u4ef6\u6ca1\u6709\u5b9e\u8d28\u6027\u7684\u5f71\u54cd\uff0c\u8fd9\u91cc\u6570\u503c0\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u72b6\u6001\u503c\uff0c\u4ed6\u544a\u8bc9\u540e\u7eed\u7ec4\u4ef6\u8be5\u4e8b\u4ef6\u6ca1\u6709\u53d1\u751f\uff0c\u4f46\u53c8\u53ef\u4ee5\u8ba9\u540e\u7eed\u7ec4\u4ef6\u4e0d\u9700\u8981\u5904\u7406\u72b6\u6001\uff0c\u8ba4\u4e3a\u4e00\u76f4\u5728\u53d1\u751f\u3002")),(0,n.kt)("p",null,"\u7b2c\u4e09\u79cd\u60c5\u51b5\u662f\u6700\u7b80\u5355\u7684\u67b6\u6784\uff0c\u4f46\u662f\u5b58\u5728\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u76f8\u5f53\u4e8e\u4f20\u7edfOOP\u4e2d\u90a3\u4e9b\u6240\u6709\u7684\u5206\u652f\u90fd\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u6216\u8005\u6bcf\u5e27\u5f00\u59cb\u4e4b\u524d\uff0c\u9700\u8981\u5bf9\u589e\u91cf\u503c\u8fdb\u884c\u6e05\u96f6\u64cd\u4f5c")),(0,n.kt)("p",null,"\u524d\u8005\u53ef\u4ee5\u901a\u8fc7\u914d\u5408change-driven\u7684\u67b6\u6784\u6765\u5b9e\u73b0\uff0c\u800c\u5bf9\u4e8e\u540e\u8005\uff0c\u4f8b\u5982\u5bf9\u4e8e\u589e\u91cf\u7ec4\u4ef6\u6765\u8bb2\uff0c\u5b83\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u5f71\u54cd\u662f\u5904\u4e8e\u5916\u5faa\u73af\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u5728\u6267\u884c\u5b8c\u6240\u6709\u88ab\u901a\u77e5\u7ec4\u4ef6\u4e4b\u540e\u81ea\u52a8\u6e05\u96f6\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u8981\u533a\u5206\u54ea\u4e9b\u662f\u589e\u91cf\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u505a\u6cd5\u662f\uff0c\u8ba9\u4e3b\u52a8\u53d1\u751f\u6d88\u606f\u7684\u7ec4\u4ef6\u81ea\u5df1\u7ef4\u62a4\u589e\u91cf\u503c\uff0c\u8fd9\u6837\u5c31\u9700\u8981\u4fdd\u8bc1\u8fd9\u7c7b\u7ec4\u4ef6\u7528\u4e8e\u90fd\u9700\u8981\u6267\u884c\uff0c\u4e0d\u53d7change-driven\u673a\u5236\u7684\u5f71\u54cd\u3002\u4f8b\u5982\u5bf9\u4e8e\u91ca\u653e\u6280\u80fd\u7684\u7ec4\u4ef6\uff0c\u5b83\u6bcf\u5e27\u7684\u76d1\u542c\u8f93\u5165\uff0c\u5982\u679c\u8f93\u5165\u9002\u914d\uff0c\u5c31\u5c06\u589e\u91cf\u8bbe\u7f6e\u4e3a\u9884\u8bbe\u503c\uff0c\u5426\u5219\u8bbe\u7f6e\u4e3a0\u3002\u8fd9\u79cd\u65b9\u6cd5\u5e94\u8be5\u662f\u6700\u7b80\u5355\u7684\uff0c\u4e0d\u80fd\u7ed9\u8fd0\u884c\u65f6\u52a0\u5165\u592a\u591a\u903b\u8f91\u7684\u4e1c\u897f\uff0c\u800c\u4e14\u901a\u5e38\u53d1\u51fa\u4e8b\u4ef6\u7684\u7ec4\u4ef6\u6570\u91cf\u662f\u5c11\u6570\u7684\uff0c\u4f8b\u5982\u5927\u90e8\u5206\u65f6\u95f4\u65f6\u95f4\u90fd\u662f\u968f\u65f6\u8f93\u5165\u6216\u8005\u67d0\u4e9b\u7528\u6237\u4ea4\u4e92\u89e6\u53d1\u7684\uff0c\u8fdb\u800c\u89e6\u53d1\u4e00\u8fde\u4e32\u7684\u8ba1\u7b97\uff0c\u5982\u679c\u6e90\u5934\u4e0d\u4f1a\u4f20\u9012\uff0c\u540e\u7eed\u7684\u5f88\u591a\u8ba1\u7b97\u4e5f\u95f4\u63a5\u7701\u6389\u4e86\uff0c\u5c31\u50cfOOP\u4e2d\u7684\u5206\u652f\u90a3\u6837\u3002\u4f46\u662f\u76f8\u5bf9\u4e8eOOP\uff0c\u81f3\u5c11\u53ef\u4ee5\u8282\u7701\u8ba1\u7b97\uff0c\u4f46\u7701\u4e0d\u4e86\u5185\u5b58\u3002"),(0,n.kt)("h4",{id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"},"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"),(0,n.kt)("p",null,"\u5982\u679c\u5168\u90e8\u4f7f\u7528\u62c9\u53d6\uff0c\u4f1a\u5b58\u5728\u6548\u7387\u7684\u95ee\u9898\uff0c\u5e76\u4e14\u62c9\u53d6\u8981\u6c42\u88ab\u5f71\u54cd\u7740\u81ea\u884c\u652f\u6301\u76f8\u5173\u903b\u8f91\uff0c\u8fd9\u6709\u65f6\u5019\u4e0d\u591f\u7075\u6d3b\uff0c\u4f8b\u5982\u5df2\u6709\u7684\u7ec4\u4ef6\u6ca1\u6709\u8fd9\u4e2a\u903b\u8f91\uff0c\u5982\u679c\u65b0\u52a0\u4e00\u4e2a\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u8fd9\u4e9b\u903b\u8f91\uff0c\u90a3\u4e48\u4fee\u6539\u4f1a\u53d8\u5f97\u7b80\u5355\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5f00\u653e\u578b\u53ef\u4e92\u64cd\u4f5c\u7684\u7a0b\u5e8f\uff0c\u4e5f\u8bb8\u8fd9\u6837\u7684\u903b\u8f91\u662f\u5408\u7406\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u6743\u9650\u5185\u7684\u7ec4\u4ef6\u4f7f\u7528\u4e3b\u52a8\u5199\u5165\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f7f\u7528\u62c9\u53d6\u7684\u65b9\u5f0f")),(0,n.kt)("p",null,"\u5199\u5165\u7684\u65b9\u5f0f\u5012\u662f\u5f88\u597d\u5b9e\u73b0\uff0c\u6bd4\u5982\u901a\u8fc7writein\u6216\u8005writeout\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u63a8\u5bfc\u51fa\u5e94\u8be5\u600e\u6837\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u540c\u65f6\u652f\u6301\u53cc\u5411\u7684\u64cd\u4f5c\uff0c\u6709\u53ef\u80fd\u5c06\u4f7f\u5f97\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\u4e0d\u53ef\u63a8\u5bfc\u3002\u8fd9\u65b9\u9762\u540e\u7eed\u9700\u8981\u597d\u597d\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"2212-\u7b26\u53f7\u6cdb\u578b"},"2.2.12 \u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22121-\u53d8\u91cf\u540d\u79f0"},"2.2.12.1 \u53d8\u91cf\u540d\u79f0"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5305\u542b\u6570\u636e\u7ed3\u6784\uff0c\u53ea\u80fd\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u7ed3\u6784\u4f53\u6709\u540d\u79f0\uff0c\u7ed3\u6784\u4f53\u4e2d\u7684\u53d8\u91cf\u4e5f\u5305\u542b\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u5b9a\u4e49\u65b0\u7684\u7ed3\u6784\uff0c\u800c\u53ea\u80fd\u4f7f\u7528\u5143\u7ec4\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7b26\u53f7\u5b9a\u4e49\u5230\u7ec4\u4ef6\u53d8\u91cf\u4e4b\u95f4\u7684\u6620\u5c04\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Point \n{\n X = 10,\n Y = 20.0\n Z = 30.0\n}\n")),(0,n.kt)("h4",{id:"22122-\u6a21\u5f0f\u5339\u914d"},"2.2.12.2 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4f7f\u7b26\u53f7\u5b9a\u4e49\u4e0e\u7ec4\u4ef6\u53d8\u91cf\u540d\u79f0\u4e4b\u95f4\u8fdb\u884c\u89e3\u8026\uff0c\u53ef\u4ee5\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002\u4f46\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684=\u7b26\u53f7\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd8\u662f\u9700\u8981\u8d4b\u503c\u7b26\u53f7\uff0c\u8fd9\u91cc\u4f7f\u7528\u64cd\u4f5c\u7b26as\uff0c\u4f46\u5b83\u7684\u610f\u4e49\u5c31\u76f8\u5f53\u4e8eFP\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,"\u6ce8\u610f\uff0c\u5728Lua\u4e2d\u4f7f\u7528\u7d22\u5f15\u503c\u6765\u907f\u514d\u8c03\u7528\u8005\u8ddf\u88ab\u8c03\u7528\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u81ea\u7136\uff0c\u8fd8\u662f\u9700\u8981\u5f15\u5165\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u5c06\u503c\uff08\u5185\u5b58\u5730\u5740\uff09\u7ed1\u5b9a\u5230\u771f\u6b63\u81ea\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u79f0\u4e0a\u3002"),(0,n.kt)("p",null,"CS\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u53ea\u5728\u7ec4\u4ef6\u53d8\u91cf\u7ed1\u5b9a\u65f6\u4f7f\u7528\uff0c\u5176\u4ed6\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u79f0\u4e3a\u7b26\u53f7\u7ed1\u5b9a\u66f4\u6709\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u53d8\u91cf\u7ed1\u5b9a\u5fc5\u987b\u6765\u81ea\u4e8e\u7b26\u53f7\u8868\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u66ff\u6362\uff0c\u4f46\u4e5f\u662f\u66ff\u6362\u53e6\u4e00\u4e2a\u7b26\u53f7\u8868\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(X, Y, Z) <- Point //read from\nH -> HP //write to\n")),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u5b9e\u73b0\u4e86\u56db\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\uff1a\u5373\u4f7f\u7ed3\u6784\u540d\u5b57\u6216\u8005\u5185\u90e8\u53d8\u91cf\u7684\u540d\u5b57\u4e0d\u540c\uff0c\u53ea\u8981\u7c7b\u578b\u5339\u914d\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u53c2\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u6cdb\uff1a\u53ef\u4ee5\u5c06\u9ed8\u8ba4\u7684Point\u7b26\u53f7\u66ff\u6362\u4e3a\u5176\u4ed6\u7ed3\u6784\u76f8\u540c\u7684\u7b26\u53f7\uff0c\u4ece\u800c\u5b9e\u73b0\u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u5199\uff1a\u5199\u5165\u6570\u636e\uff0c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u5165\u5230\u53d8\u91cf\uff0c\u6216\u8005\u8bf4\u9700\u8981\u6784\u9020\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u5efa\uff1a\u9664\u4e86\u83b7\u53d6\u53d8\u91cf\u53ca\u7ed1\u5b9a\u4e4b\u5916\uff0c\u6784\u9020\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u53caSpaw\u51fd\u6570\u53ef\u80fd\u4e5f\u9700\u8981\u6a21\u5f0f\u5339\u914d\u3002")),(0,n.kt)("h4",{id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"},"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u7c7b\u578b\u4e3b\u8981\u7528\u4e8e\u4e0d\u540c\u7c7b\u6216\u8005\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u591a\u53d8\u91cf\u7684\u805a\u5408\u65b9\u5f0f\uff0c\u53ea\u9700\u8981\u4f20\u64ad\u5355\u4e2a\u7c7b\u578b\u53d8\u91cf\u540d\u79f0\u65e2\u53ef\u4ee5\u4f20\u9012\u591a\u4e2a\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u4e00\u4e2a\u65b9\u6cd5\u5185\u90e8\u6765\u8bb2\uff0c\u4ed6\u8981\u5904\u7406\u7684\u5168\u90e8\u662f\u5355\u4e2a\u53d8\u91cf\uff0c\u591a\u53d8\u91cf\u805a\u5408\u7684\u540d\u79f0\u5bf9\u4e8e\u51fd\u6570\u6765\u8bb2\u6ca1\u6709\u610f\u4e49\uff0c\u53cd\u800c\u9700\u8981\u66f4\u590d\u6742\u7684\u673a\u5236\u53bb\u65b9\u6cd5\u805a\u5408\u4f53\u5185\u90e8\u7684\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bb2\uff0c\u6a21\u5f0f\u5339\u914d\u7b80\u5316\u4e86\u8fd9\u79cd\u5bf9\u5b9e\u9645\u5185\u90e8\u53d8\u91cf\u7684\u8bbf\u95ee\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u5b83\u5e26\u6765\u7684\u4e0d\u597d\u4e00\u9762\uff0c\u53ef\u80fd\u662f\u6784\u9020\u5b9e\u4f8b\u7684\u65f6\u5019\u4e0d\u80fd\u4ee5\u4e00\u4e2a\u805a\u5408\u7c7b\u578b\u7684\u6574\u4f53\u8fdb\u884c\u8d4b\u503c\uff0c\u800c\u662f\u9700\u8981\u5bf9\u5176\u4e2d\u7684\u6bcf\u4e2a\u53d8\u91cf\u90fd\u8d4b\u503c\uff0c\u4f46\u662f\u5176\u5b9e\u672c\u6765\u4e5f\u662f\u9700\u8981\u5bf9\u6bcf\u4e2a\u53d8\u91cf\u8d4b\u503c\u7684\u3002"),(0,n.kt)("h3",{id:"2213-\u5e76\u53d1"},"2.2.13 \u5e76\u53d1"),(0,n.kt)("p",null,"\u9762\u5411\u5bf9\u8c61\u7684\u65e0\u5e8f\u76f8\u4e92\u5f15\u7528\uff0c\u901a\u5e38\u5bfc\u81f4\u5e76\u53d1\uff0c\u800c\u903b\u8f91\u4e0a\u4ed6\u4eec\u4e0d\u4e00\u5b9a\u6709\u5e76\u53d1\uff0c\u800c\u4e14\u6211\u4eec\u6ca1\u6709\u529e\u6cd5\u4ece\u903b\u8f91\u4e0a\u53bb\u63a7\u5236\u8fd9\u79cd\u5e76\u53d1\u7684\u987a\u5e8f\uff0c\u592a\u590d\u6742\uff0c\u5b8c\u5168\u65e0\u6cd5\u9884\u6599\u5bf9\u8c61\u4e4b\u95f4\u4ee5\u4ec0\u4e48\u6837\u7684\u987a\u5e8f\u548c\u65f6\u673a\u89e6\u53d1\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u4ee5\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\u7ec4\u7ec7\uff0c\u80fd\u591f\u66f4\u597d\u5730\u63a7\u5236\u903b\u8f91\u7684\u987a\u5e8f\uff0c\u4ece\u800c\u80fd\u8ddf\u5728\u903b\u8f91\u4e0a\u6bd4\u8f83\u7b80\u5355\u5730\u907f\u514d\u6389\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u5e76\u53d1"),(0,n.kt)("p",null,"\u5c06\u5171\u4eab\u53d8\u91cf\u548c\u79c1\u6709\u53d8\u91cf\u533a\u5206\uff0c\u79c1\u6709\u53d8\u91cf\u4e0d\u4f1a\u89e6\u53d1\u5e76\u53d1\uff0c\u800c\u5171\u4eab\u53d8\u91cf\u56e0\u4e3a\u4ece\u7b26\u53f7\u8868\u5f15\u7528\uff0c\u4ece\u800c\u7f16\u8bd1\u5668\u80fd\u591f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u7ec4\u4ef6\u5bf9\u5171\u4eab\u53d8\u91cf\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u6bd4\u5982\u80fd\u591f\u628a\u4e00\u4e9b\u76f8\u4e92\u72ec\u7acb\u7684\u7ec4\u4ef6\u5e76\u884c\u6267\u884c"),(0,n.kt)("p",null,"\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\uff0c\u90a3\u4e2a\u5bf9\u8c61\u6267\u884c\u7684\u903b\u8f91\u592a\u590d\u6742\uff0c\u5b58\u5728\u4e0d\u53ef\u9884\u6d4b\u7684\u5206\u652f\u3001\u8df3\u8f6c\u7b49\u903b\u8f91\uff0c\u90a3\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\u53ef\u80fd\u5bfc\u81f4\u4e0d\u53ef\u9884\u6d4b\u7684\u6307\u4ee4\u6267\u884c\u987a\u5e8f\u548c\u5e8f\u5217\uff0c\u56e0\u800c\u65e0\u6cd5\u5f88\u597d\u5730\u4f7f\u7528\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u56e0\u6b64\u901a\u5e38\u53ea\u80fd\u4f9d\u8d56\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u4f46\u4e0d\u53ef\u9884\u6d4b\u7684\u6df7\u4e71\u7684\u5bf9\u8c61\u5f15\u7528\u5173\u7cfb\u5c06\u5927\u5927\u5730\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898"),(0,n.kt)("p",null,"\u901a\u8fc7\u7cbe\u5fc3\u5c06\u540c\u4e00\u7ec4\u4ef6\u7684\u6570\u636e\u7ec4\u7ec7\u6210\u6570\u7ec4\uff0c\u4e0d\u5149\u662f\u80fd\u591f\u63a7\u5236\u903b\u8f91\u987a\u5e8f\uff0c\u4ece\u800c\u907f\u514d\u4e00\u90e8\u5206\u5e76\u53d1\uff0c\u540c\u65f6\u5c06\u5bf9\u8c61\u7ea7\u522b\u7684\u7ebf\u7a0b\u5e76\u884c\u8f6c\u5316\u4e3a\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u8fdb\u4e00\u6b65\uff0c\u901a\u8fc7\u5bf9\u4f9d\u8d56\u5173\u7cfb\u7684\u8bc6\u522b\u80fd\u591f\u66f4\u597d\u5730\u5c06\u591a\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u6267\u884c\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u8fd9\u91cc\u7684\u6838\u5fc3\u662f\u80fd\u591f\u901a\u8fc7\u5168\u5c40\u7b26\u53f7\u8868\u548c\u663e\u5f0f\u5171\u4eab\u5173\u7cfb\u8bc6\u522b\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("h4",{id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b"},"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"22132-erlang\u53caoop"},"2.2.13.2 Erlang\u53caOOP"),(0,n.kt)("h4",{id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"},"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"),(0,n.kt)("h3",{id:"2214-\u667a\u80fd\u611f\u77e5"},"2.2.14 \u667a\u80fd\u611f\u77e5"),(0,n.kt)("p",null,"\u5f53\u9760\u8fd1\u4e00\u4e2a\u7269\u4f53\uff0c\u6216\u8005\u4f7f\u7528\u4e00\u4e2a\u7279\u5b9a\u7684\u63a2\u7d22\u547d\u4ee4\u7684\u65f6\u5019\uff0c\u5982\u679c\u5176\u672c\u8eab\u4e0d\u5177\u5907\u8bc6\u522b\u5bf9\u65b9\u7684\u64cd\u4f5c\uff0c\u53ef\u4ee5\u52a8\u6001\u67e5\u8be2\u5bf9\u65b9\u7684\u5c5e\u6027\uff0c\u7136\u540e\u52a8\u6001\u63d0\u793a\u662f\u5426\u9700\u8981\u5b89\u88c5\u65b0\u7684\u64cd\u4f5c\u811a\u672c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6bcf\u4e2a\u811a\u672c\u9700\u8981\u7528\u6237\u624b\u52a8\u9009\u62e9\uff0c\u4e0d\u53ef\u80fd\u81ea\u52a8\u5b89\u88c5\u6240\u6709\u811a\u672c\uff0c\u4f46\u662f\u7cfb\u7edf\u672c\u8eab\u662f\u53ef\u4ee5\u611f\u77e5\u7684\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u8d2d\u4e70\u4e00\u8f86\u8f66\uff0c\u9700\u8981\u4f7f\u7528\u7279\u5b9a\u7684\u8d2d\u4e70\u65b9\u5f0f\u7b49\u3002"),(0,n.kt)("p",null,"\u4e24\u4e2a\u76ee\u6807\u6216\u4ef7\u503c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u79fb\u9664"),"\uff1a\u5f53\u4e00\u4e2a\u573a\u666f\u4e2d\u5e76\u4e0d\u5305\u542b\u67d0\u4e2a\u811a\u672c\u53ef\u64cd\u4f5c\u7684\u5b9e\u4f53\u65f6\uff0c\u53ef\u4ee5\u79fb\u9664\u4e00\u4e9b\u7ec4\u4ef6\uff0c\u6216\u8005\u5355\u7eaf\u7565\u8fc7\u8fd9\u4e9b\u7ec4\u4ef6\uff08\u51fa\u4e8e\u52a8\u6001\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff09\uff0c\u6bd4\u5982\u7528\u6237\u89d2\u8272\u53ef\u80fd\u5b89\u88c5\u975e\u5e38\u591a\u7684\u611f\u77e5\u548c\u4ea4\u4e92\u7ec4\u4ef6\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u53ef\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u6dfb\u52a0"),"\uff1a\u6709\u4e9b\u7c7b\u578b\u7684\u5b9e\u4f53\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u544a\u7269\u4f53\uff0c\u901a\u5e38\u5176\u672c\u8eab\u5e76\u4e0d\u5305\u542b\u5168\u573a\u666f\u7684\u673a\u5236\uff0c\u4ed6\u4eec\u53ea\u662f \u4e34\u65f6\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u667a\u80fd\u8d2d\u4e70"),"\uff1a\u8ba9\u7528\u6237\u5728\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70")),(0,n.kt)("h3",{id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92"},"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92"),(0,n.kt)("p",null,"\u6240\u6709\u7528\u6237\u4e4b\u95f4\u6d89\u53ca\u4fee\u6539\u6570\u636e\u7684\u7684\u4ea4\u4e92\u90fd\u662f\u4ea4\u6613\uff0c\u5f53\u7136\u5176\u4ed6\u7684\u4e00\u822c\u4e0d\u5177\u5907\u7834\u574f\u6027\u7684\u4ea4\u4e92\u4e5f\u53ef\u4ee5\uff0c\u4f8b\u5982 \u8bfb\u53d6 \u6570\u636e \u3002"),(0,n.kt)("h4",{id:"22141-helpcomponent"},"2.2.14.1 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h3",{id:"2215-components"},"2.2.15 Components"),(0,n.kt)("h4",{id:"22151-neuralcomponent"},"2.2.15.1 NeuralComponent"),(0,n.kt)("h4",{id:"22152-tagcomponent"},"2.2.15.2 TagComponent"),(0,n.kt)("h4",{id:"22153-realityidcomponent"},"2.2.15.3 RealityIDComponent"),(0,n.kt)("h4",{id:"22154-helpcomponent"},"2.2.15.4 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h4",{id:"22155-deltacomponent"},"2.2.15.5 DeltaComponent"),(0,n.kt)("p",null,"\u53c2\u89c12.2.11.3\u8282\u3002"),(0,n.kt)("h3",{id:"2216-\u6700\u4f73\u5b9e\u8df5"},"2.2.16 \u6700\u4f73\u5b9e\u8df5"),(0,n.kt)("h4",{id:"22161-more-granular-is-better"},"2.2.16.1 more granular is better"),(0,n.kt)("p",null,'Bevy has a smart scheduling algorithm that runs your systems in parallel as much as possible. It does that automatically, when your functions don\'t require conflicting access to the same data. Your game will scale to run on multiple CPU cores "for free"; that is, without requiring extra development effort from you.'),(0,n.kt)("p",null,"To improve the chances for parallelism, you can make your data and code more granular. Split your data into smaller types / ",(0,n.kt)("inlineCode",{parentName:"p"},"struct"),"s. Split your logic into multiple smaller systems / functions. Have each system access only the data that is relevant to it. The fewer access conflicts, the faster your game will run."),(0,n.kt)("p",null,"The general rule of thumb for Bevy performance is: more granular is better."),(0,n.kt)("h4",{id:"22162-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("p",null,"\u53c2\u89c12.2.7.1\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"},"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u662f\u4e0d\u53d8\u7684\uff0c\u4f46\u662f\u6570\u636e\u7ed3\u6784\u662f\u53d8\u5f97\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u6570\u636e\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u8fd9\u5c31\u5bfc\u81f4\u597d\u50cf\u4e00\u4e2a\u6e38\u620f\u7684\u6570\u636e\u662f\u4e0d\u53ef\u7a7a\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u4e0e\u6570\u636e\u6216\u8005\u6570\u636e\u7c7b\u578b\u5e94\u8be5\u662f\u89e3\u8026\u7684\uff0c\u6682\u4e14\u79f0\u4e4b\u4e3a\u6570\u636e\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"AI\u7f16\u8bd1\u5668\u6216\u8005AI\u8ba1\u7b97\u5e73\u53f0\u80fd\u591f\u5927\u529b\u53d1\u5c55\uff0c\u6a21\u5757\u5316\uff0c\u5f88\u597d\u7684\u4f18\u5316\uff0c\u662f\u56e0\u4e3aAI\u7684\u6570\u636e\u7ed3\u6784\u7279\u5f81\u5f88\u660e\u663e\uff0c\u6216\u8005\u62bd\u8c61\u5f97\u5f88\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u628a\u6570\u636e\u62bd\u8c61\u51fa\u6765\uff0c\u624d\u66f4\u5bb9\u6613\u770b\u6e05\u903b\u8f91\u7684\u672c\u8d28\uff0c\u6bd4\u5982\u6613\u4e8e\u7ba1\u7406\uff0c\u4f8b\u5982\u80fd\u591f\u5224\u65ad\u54ea\u4e9b\u903b\u8f91\u53ef\u4ee5\u5e76\u884c\uff0c\u4e0d\u7136\u903b\u8f91\u9690\u85cf\u4e8e\u4e00\u56e2\u4e71\u9ebb\u4e4b\u4e2d\uff0c\u4eba\u548c\u8ba1\u7b97\u673a\u90fd\u4e0d\u5bb9\u6613\u8bc6\u522b\u5176\u4e2d\u7684\u79e9\u5e8f")),(0,n.kt)("h4",{id:"22171-\u6570\u636e\u6cdb\u578b"},"2.2.17.1 \u6570\u636e\u6cdb\u578b"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u6709\u4e9b\u65b9\u6cd5\uff0c\u9053\u7406\u6216\u8005\u903b\u8f91\uff0c\u4ed6\u4eec\u5bf9\u8bb8\u591a\u4e0d\u540c\u7684\u6570\u636e\u6216\u4e8b\u7269\u90fd\u662f\u76f8\u901a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u65b9\u6cd5\u5e94\u7528\u5728\u4e0d\u540c\u7684\u9886\u57df\uff0c\u6bd4\u5982\u4e00\u8f86\u8f66\u5b50\uff0c\u4ed6\u5176\u5b9e\u53ef\u4ee5\u88c5\u4efb\u4f55\u4e1c\u897f\uff0c\u4f46\u662f\u5728\u7a0b\u5e8f\u5458\uff0c\u4e00\u4e2a\u5bf9\u8c61\u6240\u80fd\u5904\u7406\u6570\u636e\u5374\u5f80\u5f80\u5305\u542b\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f7f\u5f97\u65b9\u6cd5\u7684\u5904\u7406\u4e0d\u591f\u901a\u7528"),(0,n.kt)("p",null,"\u53ea\u8981\u903b\u8f91\u4e0a\u80fd\u591f\u4fdd\u8bc1\u5408\u7406\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u7531\u7528\u6237\u786e\u5b9a\uff0c\u90a3\u4e48\u4e00\u4e2a\u903b\u8f91\u5e94\u8be5\u53ef\u4ee5\u4f5c\u7528\u5728\u5177\u6709\u4e0d\u540c\u610f\u4e49\u7684\u76f8\u540c\u6570\u636e\u7c7b\u578b\u4e0a\uff0c\u53ea\u8981\u7528\u6237\u6307\u5b9a\u597d\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u79cd\u65b0\u578b\u6cdb\u578b")),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e"},"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e"),(0,n.kt)("p",null,"\u63a5\u53e3\u662f\u7528\u6765\u4fdd\u8bc1\u7c7b\u4e4b\u95f4\u534f\u4f5c\u7684\u534f\u8bae\uff0c\u8fd9\u4e2a\u534f\u8bae\u6ca1\u95ee\u9898\uff0c\u5b83\u4fdd\u8bc1\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("p",null,"\u4f46\u662f\u5728\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u9664\u4e86\u534f\u8bae\uff0c\u5b83\u8fd8\u591a\u4e86\u4e00\u79cd\u8eab\u4efd\uff0c\u5145\u5f53\u7c7b\u578b\uff0c\u7c7b\u578b\u88ab\u7528\u4e8e\u5e2e\u52a9\u8bed\u8a00\u8fdb\u884c\u68c0\u67e5\uff0c\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5408\u6cd5\u6027"),(0,n.kt)("p",null,"\u4f46\u8fd9\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9700\u6c42\uff0c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u534f\u8bae\u7684\u9700\u6c42\uff0c\u6bd4\u5982\uff0c\u5728\u73b0\u5b9e\u4e2d\uff0cA\u548cB\u534f\u4f5c\uff0c\u5b83\u4eec\u90fd\u4f1a\u81ea\u5df1\u9075\u5faa\u4e00\u79cd\u7b2c\u4e09\u65b9\u6807\u51c6\uff0cA\u548cB\u4e4b\u95f4\u4e8b\u524d\u4e0d\u9700\u8981\u76f8\u4e92\u534f\u5546\uff0c\u5b83\u4eec\u53ef\u4ee5\u4e0e\u4efb\u610f\u9075\u5faa\u6807\u51c6\u7684\u5b9e\u4f53\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u7b97A\u548cB\u6700\u7ec8\u53d1\u73b0\u5b83\u4eec\u9075\u5faa\u7684\u6807\u51c6\u7248\u672c\u4e0d\u4e00\u6837\uff0c\u4f46\u662f\u5927\u591a\u6570\u60c5\u51b5\u662f\u4e00\u6837\u7684"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u7279\u70b9\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u540c\u5728\u4e8eA\u548cB\u4e8b\u524d\u5b8c\u5168\u4e92\u4e0d\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u90fd\u80fd\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5f80\u5f80\u662f\u6765\u81ea\u72ec\u7acb\u7684\u7b2c\u4e09\u65b9")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u5f80\u5f80\u9700\u8981\u5f15\u5165\u63a5\u53e3\u58f0\u660e\uff0c\u8fd9\u79cd\u8026\u5408\u4e0d\u5149\u662f\u534f\u8bae\u672c\u8eab\uff0c\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u534f\u8bae\u5916\u7684\u8ddf\u7a0b\u5e8f\u76f8\u5173\u7684\u4e1c\u897f\uff0c\u4f8b\u5982\u7279\u5b9a\u7684\u7a0b\u5e8f\u5305\u3001\u7b7e\u540d\u7684\u987a\u5e8f\uff0c\u751a\u81f3\u6709\u65f6\u5019\u4f9d\u8d56\u7684\u987a\u5e8f\uff0c\u66f4\u7cdf\u7cd5\u7684\u662f\uff0c\u8fd8\u5fc5\u987b\u628a\u8fd9\u4e9b\u5185\u5bb9\u63d2\u5165\u5230\u4ee3\u7801\u4e2d"),(0,n.kt)("p",null,"\u4f60\u5fc5\u987b\u4ece\u90a3\u4e2a\u63a5\u53e3\u7ee7\u627f\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u9075\u5faa\u4e00\u4e2a\u63a5\u53e3\u534f\u8bae"),(0,n.kt)("p",null,"\u5373\u4f7f\u4f60\u6709\u81ea\u5df1\u7684\u65b9\u6cd5\u505a\u4e86\u534f\u8bae\u4e00\u6837\u7684\u4e8b\u60c5\uff0c\u8fd9\u8fd8\u4e0d\u591f\uff0c\u4f60\u5fc5\u987b\u628a\u4ee3\u7801\u79fb\u5230\u63a5\u53e3\u65b9\u6cd5\u3001\u5305\u88c5\u4e00\u4e0b\u7b49\u7b49\uff0c\u4f60\u7684\u4fee\u6539\u4ee3\u7801"),(0,n.kt)("p",null,"\u5728\u9075\u5faa\u534f\u8bae\u4e4b\u5916\uff0c\u5f15\u5165\u4e86\u4e00\u4e9b\u989d\u5916\u7684\u8d1f\u62c5"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff1a\u534f\u8bae\u901a\u5e38\u5173\u6ce8\u6570\u636e\uff0c\u4f60\u80fd\u628a\u8fd9\u4e2a\u6570\u636e\u8fdb\u884c\u5904\u7406\uff0c\u6bd4\u5982\u6211\u4e70\u4e86\u4e00\u79cd\u7279\u5b9a\u7684\u539f\u6750\u6599\uff0c\u6211\u62ff\u8fc7\u6765\u8fdb\u884c\u52a0\u5de5\uff0c\u7136\u540e\u751f\u4ea7\u53e6\u4e00\u79cd\u6750\u6599\uff0c\u5356\u7ed9\u5176\u4ed6\u5382\u5bb6\uff0c\u6211\u4eec\u7ea6\u5b9a\u7684\u534f\u8bae\u662f\u539f\u6750\u6599\u7684\u89c4\u683c\u548c\u54c1\u7c7b\uff0c\u4f46\u4e0d\u662f\u6211\u4eec\u52a0\u5de5\u7684\u65b9\u6cd5\u6216\u8005\u6b65\u9aa4\uff0c\u6211\u7684\u65b9\u6cd5\u548c\u6d41\u7a0b\u968f\u65f6\u53ef\u4ee5\u53d8\u52a8\uff0c\u53ea\u8981\u6211\u8f93\u5165\u548c\u8f93\u51fa\u7684\u89c4\u683c\u4e0d\u53d8"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u63a5\u53e3\u4e2d\uff0c\u672c\u610f\u4e5f\u662f\u5173\u6ce8\u8f93\u5165\u8f93\u51fa\u7684\u6570\u636e\u89c4\u683c\uff0c\u8fd9\u672c\u53ef\u4ee5\u4ec5\u901a\u8fc7\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u5373\u53ef\uff0c\u4f46\u662f\u7a0b\u5e8f\u9700\u8981\u4fdd\u8bc1\u8fd0\u884c\u65f6\u5bf9\u8c61\u521d\u59cb\u5316\u3001\u53d8\u91cf\u8d4b\u503c\u3001\u53d8\u91cf\u7684\u5408\u6cd5\u6027\u7b49\u7b49\u5404\u79cd\u539f\u56e0\uff0c\u4ed6\u628a\u8f93\u5165\u8f93\u51fa\u6570\u636e\u548c\u65b9\u6cd5\u653e\u5230\u4e86\u4e00\u8d77\uff0c\u8fd9\u91cc\u9762\u4e5f\u6709\u66f4\u91cd\u8981\u7684\u539f\u56e0\u662f\u5b9e\u65f6\u6027\u548c\u987a\u5e8f\uff1a\u8c03\u7528\u65b9\u9700\u8981\u7acb\u5373\u83b7\u53d6\u8fd4\u56de\u7ed3\u679c"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u7684\u534f\u8bae\u7ea6\u5b9a\u7684\u66f4\u50cf\u662f\u65b9\u6cd5\u800c\u4e0d\u662f\u6570\u636e\uff0c\u53c8\u52a0\u4e0a\u7f16\u8bd1\u5668\u7684\u7c7b\u578b\u7cfb\u7edf\u7b49\u539f\u56e0\uff0c\u534f\u8bae\u88ab\u6df1\u5ea6\u8026\u5408\u5728\u7cfb\u7edf\u4e2d\uff0c\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"CreationXR\u4ec5\u5173\u6ce8\u6570\u636e\u53ca\u5176\u7ed3\u6784\uff0c\u5e76\u4e14\u901a\u8fc7\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4e5f\u80fd\u4fdd\u8bc1\u8fd4\u56de\u503c\u88ab\u7acb\u5373\u53d6\u5f97\uff0c\u4f46\u662f\u5b83\u5f31\u5316\u4e86\u5bf9\u65b9\u6cd5\u76f8\u5173\u7684\u4f9d\u8d56\uff0c\u800c\u6570\u636e\u53ef\u4ee5\u901a\u8fc7\u516c\u5171\u7b26\u53f7\u8868\u5b9a\u4e49\uff0c\u4e0d\u7ba1\u662f\u57fa\u672c\u7c7b\u578b\u8fd8\u662f\u805a\u5408\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u79cd\u89e3\u8026\u5927\u5927\u7684\u7b80\u5316\u4e86\u7a0b\u5e8f\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u3001\u4e5f\u589e\u52a0\u4e86\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u53ef\u4ee5\u968f\u65f6\u589e\u52a0\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u6216\u8005\u6267\u884c\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u4f46\u5176\u4ed6\u90e8\u5206\u5b8c\u5168\u4e0d\u53d7\u5f71\u54cd"),(0,n.kt)("p",null,"\u5f53\u7136\u5e26\u6765\u7684\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\u662f\uff1a\u8fd9\u79cd\u9690\u5f0f\u7684\u53c2\u6570\u4f20\u9012\u5bfc\u81f4\u7ec4\u4ef6\u7684\u5b9e\u9645\u76ee\u6807\u5e76\u4e0d\u662f\u5f88\u660e\u786e\uff0c\u56e0\u4e3a\u5b83\u5f88\u6709\u53ef\u80fd\u505a\u4e86\u4e00\u4e9b\u4e0d\u53ef\u63a7\u7684\u4e8b\u60c5\uff0c\u8fd9\u79cd\u9700\u8981\u5bf9\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u63cf\u8ff0\uff0c\u5c31\u50cf\u4e00\u4e2a\u4ea7\u54c1\u8bf4\u660e\u4e66\uff0c\u4ed6\u5230\u5e95\u505a\u4e86\u4ec0\u4e48\uff0c\u8fd9\u6837\u7684\u8bf4\u660e\u4e66\u662f\u666e\u901a\u7528\u6237\u53ef\u4ee5\u7406\u89e3\u7684\uff0c\u8bed\u4e49\u5316\u7684"),(0,n.kt)("h3",{id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"},"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"),(0,n.kt)("h4",{id:"22181-update\u673a\u5236"},"2.2.18.1 Update\u673a\u5236"),(0,n.kt)("p",null,"Update\u662f\u6e38\u620f\u7684\u6838\u5fc3\u9a71\u52a8\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u65e2\u662f\u5f62\u6210\u52a8\u6001\u4e16\u754c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\u53c8\u7531\u4e8e\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5728\u5b9e\u65f6\u66f4\u65b0\u81ea\u5df1\u7684\u72b6\u6001\uff0c\u56e0\u6b64\u4f7f\u5f97\u7cfb\u7edf\u4e4b\u95f4\u7684\u89e3\u8026\u53d8\u5f97\u53ef\u80fd\uff0c\u5373\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u7684\u72b6\u6001")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u53ea\u64cd\u4f5c\u4e1a\u52a1\u89c4\u5219\uff0c\u6ca1\u6709\u5b9e\u4f53\u5316\uff0c\u4ed6\u4eec\u901a\u5e38\u9762\u5bf9\u7684\u662f\u6570\u636e\uff0c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u79cd\u6570\u636e\u901a\u5e38\u53cd\u5e94\u7684\u662f\u89c4\u5219\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f97\u6982\u5ff5"),(0,n.kt)("h4",{id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"},"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u7a0b\u5e8f\u5305\u5927\u5c0f\u90fd\u6bd4\u8f83\u5c0f\uff0c\u4f8b\u5982\u4e00\u4e2a\u624b\u673aapp\u53ea\u6709\u51e0\u5341\u6700\u591a\u4e0a\u767eM\uff0c\u4f46\u662f\u4e00\u4e2a\u6e38\u620f\u5f80\u5f80\u90fd\u591a\u5927\u51e0\u4e2aG\uff0c\u4e3b\u673a\u6e38\u620f\u751a\u81f3\u51e0\u5341\u5230\u4e0a\u767eG\u3002"),(0,n.kt)("p",null,"\u4e0d\u5149\u7a0b\u5e8f\u5305\u7684\u5927\u5c0f\uff0c\u8ba1\u7b97\u65f6\u52a0\u8f7d\u5230\u663e\u5b58\u7684\u6570\u636e\u91cf\u66f4\u662f\u5dee\u5f02\u5de8\u5927 \uff0c\u4f8b\u5982\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u53ea\u9700\u8981\u52a0\u8f7d\u5c11\u91cf\u6709\u5173\u7684\u6570\u636e\uff0c\u5e38\u9a7b\u5185\u5b58\u4e2d\u7684\u6570\u636e\u901a\u5e38\u4e0d\u591a\uff0c\u6bcf\u4e2a\u4e1a\u52a1\u903b\u8f91\u76f8\u5173\u7684\u6570\u636e\u901a\u5e38\u90fd\u6bd4\u8f83\u72ec\u7acb\uff0c\u5373\u4f7f\u5c11\u91cf\u5355\u4e2a\u903b\u8f91\u9700\u8981\u7684\u6570\u636e\u91cf\u6bd4\u8f83\u5927\uff0c\u4e5f\u4ec5\u9700\u5728\u8ba1\u7b97\u7684\u65f6\u5019\u5373\u4f7f\u52a0\u8f7d\u5c31\u50cf\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u5bf9\u5b9e\u65f6\u6027\u8981\u6c42\u6ca1\u90a3\u4e48\u9ad8\u3002"),(0,n.kt)("p",null,"\u800c\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u901a\u5e38\u9ad8\u5ea6\u5173\u8054\uff0c\u4e14\u5305\u542b\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u5f80\u5f80\u6570\u636e\u4f1a\u975e\u5e38\u5927\uff0c\u4e14\u5927\u591a\u9700\u8981\u5e38\u9a7b\u5185\u5b58\uff0c\u4f7f\u5f97\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u7684\u663e\u5b58\u5f80\u5f80\u662f\u4e0d\u591f\u7684\u3002\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\u4e0d\u4ec5\u610f\u5473\u7740\u6bd4\u4e00\u822c\u7684\u6570\u636e\u91cf\u8981\u5927\uff0c\u800c\u4e14\u4e3a\u4e86\u52a0\u901f\u8ba1\u7b97\uff0c\u901a\u5e38\u8fd8\u9700\u8981\u5305\u542b\u5f88\u591a\u5197\u4f59\u7684\u6570\u636e\u548c\u6570\u636e\u7ed3\u6784\u6765\u8fbe\u5230\u5b9e\u65f6\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u672a\u6765\u7684\u865a\u62df\u5f00\u653e\u5927\u4e16\u754c\u9700\u8981\u66f4\u5927\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u80fd\u8fdc\u8fdc\u8d85\u51fa\u5355\u53f0\u8ba1\u7b97\u673a\u80fd\u591f\u627f\u8f7d\u7684\u663e\u5b58\u5927\u5c0f\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8fd9\u6837\u7684\u5927\u4e16\u754c\u5c06\u5f88\u96be\u6709\u6548\u5730\u8fd0\u884c\uff0c\u9700\u8981\u65b0\u7684\u6280\u672f\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u6269\u5c55\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"22183-\u67b6\u6784\u590d\u6742\u5ea6"},"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6"),(0,n.kt)("h3",{id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai"},"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI"),(0,n.kt)("h3",{id:"2220-\u5b89\u5168"},"2.2.20 \u5b89\u5168"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8ba9\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u8fd0\u884c\uff0c\u4ee5\u53ca\u6765\u81ea\u4e0d\u540c\u7528\u6237\u7684\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u8fdb\u884c\u4ea4\u4e92\uff0c\u5b89\u5168\u6027\u662f\u4e00\u4e2a\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002\u8fd9\u91cc\u7684\u5b89\u5168\u6027\u6d89\u53ca\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801bug\u5f15\u8d77\u7684\u7a0b\u5e8f\u5d29\u6e83"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u84c4\u610f\u7834\u574f\u7cfb\u7edf\u548c\u4ed6\u4eba\u6570\u636e")),(0,n.kt)("p",null,"\u540e\u9762\u901a\u8fc7\u4e25\u683c\u63a7\u5236\u7a0b\u5e8f\u5b9e\u4f8b\u5316\u5bf9\u8c61\u6765\u5b9e\u73b0\uff0c\u901a\u8fc7Creation Script\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5206\u914d\u81ea\u5df1\u7684\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u65e0\u6cd5\u6784\u9020\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u7cfb\u7edf\u5e26\u6709\u4f17\u591a\u6570\u636e\u7684\u7ed3\u6784\uff0c\u4f8b\u5982\u573a\u666f\u6811")),(0,n.kt)("p",null,"\u6240\u6709\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u63a5\u53e3\u90fd\u8981\u4fdd\u8bc1\u7528\u6237\u548c\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("h3",{id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56"},"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56"),(0,n.kt)("h4",{id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"},"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"),(0,n.kt)("p",null,"\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\uff1a\u5c06\u5d4c\u5957\u7684\u51fd\u6570\u7ed3\u6784\u8f6c\u5316\u4e3a\u6241\u5e73\u7ed3\u6784\uff0c\u5176\u4ee3\u4ef7\u662f\u5b58\u5728\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\u5c5e\u6027\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u53d8\u91cf\u4e0d\u80fd\u7b97\u662f\u7834\u574f\u4e86\u7eaf\u51fd\u6570\u7684\u7ed3\u6784\uff0c\u4f46\u662f\u4ed6\u4eec\u5e26\u6765\u4e00\u5b9a\u7684\u5e72\u6270\uff0c\u5e76\u4e14\u5927\u91cf\u7684\u4e2d\u95f4\u53d8\u91cf\u5982\u679c\u90fd\u5b58\u50a8\u8d77\u6765\uff0c\u65e2\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u4e5f\u6d6a\u8d39\u5185\u5b58\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u5728RealityIS\u4e2d\u7ec4\u4ef6\u5c5e\u6027\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u6240\u5c5e\u5173\u7cfb\uff0c\u5b83\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u62e5\u6709\u7684\uff0c\u4e5f\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u7684\uff0c\u8fd9\u4e5f\u662fRealityIS\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u4e0d\u53ef\u80fd\u7b80\u5355\u5730\u901a\u8fc7\u5728\u5c5e\u6027\u4e0a\u52a0\u5165\u4e00\u4e9b\u53d8\u91cfattribute \u6765\u58f0\u660e\u5c5e\u6027\u662f\u5426\u5e94\u8be5\u88ab\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u5c5e\u6027\u5e76\u4e0d\u662f\u5728\u4f7f\u7528\u7684\u5730\u65b9\u5b9a\u4e49\u7684\uff0c\u5373\u4e0d\u662f\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u7684\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u7a0b\u4e5f\u662f\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\uff0cRealityIS\u5c5e\u6027\u5b9a\u4e49\u7684\u5730\u65b9\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u8fd9\u662f\u552f\u4e00\u5b9a\u4e49\u7684\u5730\u65b9\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9battribute \u5b9a\u4e49\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u5373\u53ea\u6709\u7b26\u53f7\u8868\u8981\u6c42\u5b58\u50a8\u7684\u53d8\u91cf\u624d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u5176\u4ed6\u6570\u636e\u90fd\u8ba4\u4e3a\u662f\u4e2d\u95f4\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e5f\u4e0d\u80fd\u4e3a\u4e86\u6301\u4e45\u5316\u628a\u4e2d\u95f4\u53d8\u91cf\u90fd\u653e\u5230\u79c1\u6709\u8868\u4e2d\uff0c\u90a3\u6837\u5c31\u4e0d\u5177\u5907\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u901a\u4fe1\u7684\u80fd\u529b\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u7684\u4e3b\u8981\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u4e3a\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u6240\u6709\u9700\u8981\u4e92\u64cd\u4f5c\u7684\u90fd\u9700\u8981\u5b9a\u4e49\u5728\u5168\u5c40\u8868\u4e2d\uff0c\u5230\u5168\u5c40\u8868\u4e5f\u6709\u4e0d\u9700\u8981\u6301\u4e45\u5316\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4e2d\u95f4\u53d8\u91cf\u5b58\u5728\u4e8e\u79c1\u6709\u8868\u4e5f\u53ef\u4ee5\uff0c\u4f46\u662f\u4ed6\u53ef\u80fd\u9700\u8981\u5173\u8054\u7ec4\u4ef6\uff0c\u4f7f\u5f97\u8ba1\u7b97\u7684\u6700\u7ec8\u7ed3\u679c\u662f\u4e00\u4e2a\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u7684\u5c5e\u6027\u3002"),(0,n.kt)("h4",{id:"22212-\u5173\u8054\u7ec4\u4ef6"},"2.2.21.2 \u5173\u8054\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\u6211\u4eec\u662f\u5426\u5e94\u8be5\u8981\u6c42\u79c1\u6709\u8868\u4e2d\u7684\u7b26\u53f7\u603b\u662f\u4e0d\u5e94\u8be5\u6301\u4e45\u5316\uff0c\u8fd9\u6837\u5c31\u4f1a\u66f4\u52a0\u8feb\u4f7f\u5f00\u53d1\u8005\u9488\u5bf9\u516c\u5171\u53ef\u4ea4\u4e92\u5c5e\u6027\u8fdb\u884c\u5f00\u53d1\uff0c\u5426\u5219\u5f00\u53d1\u7684\u7ec4\u4ef6\u5c06\u6ca1\u6709\u4efb\u4f55\u7528\u5904\u3002"),(0,n.kt)("p",null,"\u8fd9\u5e26\u6765\u4e24\u4e2a\u597d\u5904\uff1a1\u662f\u7ec4\u4ef6\u4e0d\u518d\u4e8e\u5355\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u800c\u4e14\u4e00\u4e2a\u76f8\u5173\u8054\u7684\u7ec4\uff0c\u8fd9\u6837\u7684\u7ec4\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u7c92\u5ea6\u66f4\u5927\u4e00\u70b9\uff0c2\u662f\u6807\u51c6\u7684\u5730\u4f4d\u66f4\u9ad8\uff0c\u6240\u4ee5\u7ec4\u4ef6\u771f\u6b63\u662f\u5fc5\u987b\u4f9d\u8d56\u4e8e\u6807\u51c6\uff0c\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u6574\u4e2a\u7a0b\u5e8f\u673a\u5236\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u7ba1\u4e2d\u95f4\u72b6\u6001\u5982\u4f55\uff0c\u4ed6\u7684\u7b2c\u4e00\u4e2a\u8f93\u5165\uff08\u6216\u8005\u591a\u4e2a\u53c2\u6570\u7684\u5176\u4e2d\u4e4b\u4e00\uff09\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u7136\u540e\u6700\u540e\u4e00\u4e2a\u5199\u5165\u7684\u5c5e\u6027\u4e5f\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4e2d\u95f4\u7684\u5927\u91cf\u5c5e\u6027\u5c5e\u4e8e\u4e2d\u95f4\u5c5e\u6027\uff0c\u6765\u81ea\u79c1\u6709\u8868\uff0c\u4e0d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u6240\u6709\u8fd9\u4e00\u8fde\u4e32\u7684\u7ec4\u4ef6\u6210\u4e3a\u5173\u8054\u7ec4\u4ef6\uff0c\u4ed6\u4eec\u5f62\u6210\u4f9d\u8d56\u5173\u7cfb\uff0c\u800c\u6240\u6709\u76f8\u4e92\u4f9d\u8d56\u7684\u7ec4\u5f62\u6210\u4e00\u4e2a\u7eaf\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u7ec4\u4ef6\u7ec4\u4e2d\u7684\u6240\u6709\u51fd\u6570\u5982\u679c\u5747\u662f\u4f5c\u7528\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5219\u4ed6\u4eec\u53ef\u4ee5\u5408\u5e76\u4e3a\u4e00\u4e2a\u5927\u51fd\u6570\uff0c\u56e0\u4e3a\u53cd\u6b63\u4e2d\u95f4\u8fc7\u7a0b\u522b\u4eba\u65e0\u6cd5\u4ea4\u4e92\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u62c6\u5206\u3002"),(0,n.kt)("p",null,"\u62c6\u5206\u6210\u591a\u4e2a\u4e2d\u95f4\u53d8\u91cf\u9002\u5408\u4e8e\uff1a\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u5206\u5e03\u4e8e\u591a\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u6216\u8005\u8bf4\u7684\u8f93\u5165\u6765\u81ea\u4e8e\u591a\u4e2a\u5b9e\u4f53\uff0c\u8fd9\u79cd\u60c5\u51b5\u5fc5\u987b\u8981\u501f\u7528\u4e2d\u95f4\u53d8\u91cf\u624d\u80fd\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7406\u8bba\u4e0a\u8bf4\uff0c\u53ea\u8981\u8f93\u5165\u5168\u5c40\u7b26\u53f7\u53c2\u6570\u5927\u4e8e\u7b49\u4e8e2\uff0c\u5c31\u9700\u8981\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u4e2d\u95f4\u53d8\u91cf\uff0c\u6765\u8fdb\u884c\u5f52\u5e76\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u4e00\u79cd\u91cd\u8f7d\u7684\u673a\u5236\uff0c\u5982\u679c\u67d0\u4e2a\u5bf9\u8c61\u540c\u65f6\u5305\u542b\u4e86\u591a\u4e2a\u53c2\u6570\uff0c\u53ef\u4ee5\u51cf\u5c11\u4e2d\u95f4\u53d8\u91cf\u7684\u5f52\u5e76\u8fc7\u7a0b\uff0c\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7a0b\u5ea6\u7684\u6027\u80fd\u63d0\u5347\uff0c\u4f46\u662f\u5bf9\u67b6\u6784\u7b80\u6d01\u6027\u9020\u6210\u7684\u4ee3\u4ef7\u53ef\u80fd\u6709\u70b9\u5927\uff0c\u5e26\u6765\u7f16\u7801\u548c\u8fd0\u884c\u65f6\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5927\u7684\u7ec4\u4ef6\u7ec4\u7531\u591a\u4e2a\u5c0f\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u8fd9\u4e9b\u5c0f\u7ec4\u4ef6\u6784\u6210\u4e00\u4e2a\u8f83\u5927\u903b\u8f91\u7684\u590d\u6742\u7ec6\u8282\uff0c\u800c\u7ec4\u4ef6\u7ec4\u5219\u662f\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u7684\u5355\u4f4d\uff0c\u7ec4\u4ef6\u7ec4\u5185\u5c5e\u4e8e\u5f00\u53d1\u8005\u8fdb\u884c\u7ef4\u62a4\u7684\u5355\u4f4d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5f00\u53d1\u8005\u7684\u7ec4\u4ef6\u662f\u591a\u4e2a\u8f93\u5165\u53c2\u6570\uff0c\u6765\u81ea\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u5219\u4ed6\u5e94\u8be5\u77e5\u9053\u53ea\u6709\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\u7684\u5355\u4e2a\u5bf9\u8c61\u624d\u80fd\u6267\u884c\u8ba1\u7b97\uff0c\u5426\u5219\u4ed6\u5e94\u8be5\u59cb\u7ec8\u5047\u8bbe\u5355\u53d8\u91cf\u8f93\u5165\u7684\u5f62\u6210\uff0c\u901a\u8fc7\u4e2d\u95f4\u53d8\u91cf\u7ec4\u5408\u3002"),(0,n.kt)("h4",{id:"22213-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("h3",{id:"2222-\u5206\u5e03\u5f0f"},"2.2.22 \u5206\u5e03\u5f0f"),(0,n.kt)("h3",{id:"2223-\u5f02\u5e38"},"2.2.23 \u5f02\u5e38"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u5c06\u4e00\u4e9b\u5b8c\u6574\u7684\u64cd\u4f5c\u5206\u6563\u5230\u591a\u4e2a\u7ec4\u4ef6\u5f53\u4e2d\uff0c\u5355\u4e2a\u7f3a\u4e4f\u539f\u5b50\u6027\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4e0e\u5176\u4ed6\u7ec4\u4ef6\u4e00\u8d77\u6784\u6210\u4e86\u6574\u4e2a\u5b8c\u6574\u8ba1\u7b97\u3002\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u50cfErlang\u90a3\u6837\u91c7\u53d6\u4e22\u5f03\u5355\u4e2a\u8fdb\u7a0b\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\u5728Erlang\u4e2d\u4e00\u4e2a\u8fdb\u7a0b\u5d29\u6e83\u4e86\u5e76\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u8fdb\u7a0b\uff0c\u800c\u4e14Erlang\u5355\u4e2a\u8fdb\u7a0b\u7684\u4efb\u52a1\u6bd4\u8f83\u72ec\u7acb\u3002\u800cRealityIS\u4e2d\u67d0\u4e9b\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u610f\u5473\u7740\u524d\u9762\u67d0\u4e9b\u8ba1\u7b97\u4e5f\u9700\u8981\u53d6\u6d88\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3aRealityIS\u5c06\u91c7\u53d6\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u5f02\u5e38\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u6574\u4e2a\u8be5\u5e27\u7684\u6240\u6709\u8ba1\u7b97\u90fd\u9700\u8981\u4e22\u5f03")),(0,n.kt)("p",null,"\u6bd4\u5982\u91c7\u53d6\u54cd\u5e94\u5f0f\uff0c\u5982\u679c\u4e00\u4e2a\u70b8\u5f39\u7206\u70b8\u4e86\uff0c\u4f46\u662f\u540e\u7eed\u5bf9\u70b8\u5f39\u8fdb\u884c\u76f8\u5e94\u7684\u7ec4\u4ef6\u5374\u5d29\u6e83\u4e86\uff0c\u8fd9\u4e2a\u65f6\u5019\u524d\u9762\u7684\u70b8\u5f39\u5c31\u65e0\u6548\u4e86\u3002\u5982\u679c\u662f\u4e00\u4e9b\u5176\u4ed6\u66f4\u91cd\u8981\u7684\u903b\u8f91\u53d1\u751f\uff0c\u8fd9\u6837\u7684\u5f71\u54cd\u5c31\u4f1a\u975e\u5e38\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u6e38\u620f\u7684\u505a\u6cd5\u662f\uff0c\u5f53\u4e00\u4e2a\u5730\u65b9\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u4e86\uff0c\u6e38\u620f\u4f1a\u4ece\u4e00\u4e9b\u56fa\u5b9a\u7684\u5b58\u6863\u8282\u70b9\u6062\u590d\uff0c\u73a9\u5bb6\u9700\u8981\u4ece\u90a3\u4e9b\u56fa\u5b9a\u5b58\u6863\u91cd\u65b0\u5f00\u59cb\u73a9\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u91cd\u590d\u3002"),(0,n.kt)("p",null,"\u91cd\u590d\u80af\u5b9a\u662f\u5fc5\u987b\u7684\uff0c\u95ee\u9898\u662f\u5bf9\u4e8e\u4e00\u4e2a\u6ca1\u6709\u5173\u5361\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5b83\u7684\u5b58\u6863\u8282\u70b9\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u7cfb\u7edf\u9700\u8981\u4e00\u5957\u81ea\u52a8\u5316\u7684\u5b58\u6863\u673a\u5236\u3002"),(0,n.kt)("h4",{id:"22231-\u81ea\u52a8\u5b58\u6863"},"2.2.23.1 \u81ea\u52a8\u5b58\u6863"),(0,n.kt)("p",null,"\u6784\u5efa\u4e00\u4e2a\u5b58\u6863\u673a\u5236\uff0c\u7136\u540e\u5d29\u6e83\u4e4b\u540e\u63d0\u793a\u7528\u6237\u9000\u51fa\uff0c\u5e76\u81ea\u52a8\u56de\u9000\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u5feb\u7167\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff0c\u5c3d\u7ba1\u5f88\u591a\u7528\u6237\u5171\u540c\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\u8fd0\u884c\u7ec4\u4ef6\uff0c\u4f46\u662f\u5927\u90e8\u5206\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1\u8fd8\u90fd\u662f\u5728RealityID\u4e4b\u5185\u7684\uff0c\u6240\u4ee5\u4e00\u822c\u60c5\u51b5\u53ea\u9700\u8981\u9000\u51fa\u5355\u4e2a\u7528\u6237\u5373\u53ef\u3002\u4f46\u4e5f\u6709\u53ef\u80fd\u67d0\u4e2a\u8de8\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f1a\u5f71\u54cd\u5230\u591a\u4e2a\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5185\u5bb9\u662f\u7531\u666e\u901a\u7528\u6237\u521b\u5efa\u7684\uff0c\u6240\u4ee5\u9700\u8981\u907f\u514d\u4f20\u7edf\u6e38\u620f\u8bbe\u7f6e\u7684\u4e13\u95e8\u7684\u5b58\u6863\u8282\u70b9\u7684\u673a\u5236\uff0c\u539f\u56e0\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u5f88\u96be\u6709\u8fd9\u6837\u7684\u80fd\u529b\uff0c\u5b58\u6863\u5f80\u5f80\u662f\u8981\u6253\u5f00\u7a0b\u5e8f\u7684\u7ed3\u6784\u7684\uff0c\u589e\u52a0\u590d\u6742\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u653e\u5f0f\u7684\u4e16\u754c\u5176\u5b9e\u5f88\u96be\u8bbe\u7f6e\u5b58\u6863\u8282\u70b9")),(0,n.kt)("p",null,"\u4f46\u6bcf\u5e27\u5b58\u50a8\u80af\u5b9a\u4ee3\u4ef7\u503c\u5f88\u5927\u7684\uff0c\u6240\u4ee5\u4e5f\u8981\u907f\u514d\u6bcf\u5e27\u5b58\u50a8\u3002"),(0,n.kt)("h4",{id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"},"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u5f53\u5c5e\u6027\u5b9a\u4e49\u4e3a\u5b58\u6863\u5c5e\u6027\u65f6\uff0c\u5982\u679c\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u7406\u8bba\u4e0a\u8fd9\u4e9b\u4fee\u6539\u90fd\u8981\u5b58\u50a8\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("h4",{id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863"},"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h4",{id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9"},"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9"),(0,n.kt)("p",null,"\u603b\u7684\u6765\u8bf4\uff0c\u6709\u4e24\u4e2a\u5b58\u50a8\u65f6\u95f4\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u7684\u67d0\u4e2a\u7ec4\u4ef6\u8fdb\u7a0b\u5bfc\u81f4\u5d29\u6e83\u65f6")),(0,n.kt)("p",null,"CreationVM\u4f1a\u5305\u542b\u4e24\u4efd\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u5b58\u6863\u6570\u636e")),(0,n.kt)("p",null,"\u5f53\u8fd0\u884c\u65f6\u7ec4\u4ef6\u4fee\u6539\u4e86\u67d0\u4e2a\u5b58\u6863\u5c5e\u6027\uff0c\u8fd9\u4e9b\u503c\u4f1a\u88ab\u8bb0\u5f55\u5728\u5185\u5b58\u4e2d\u3002\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u5e94\u8be5\u4fdd\u8bc1\u4e00\u65e6\u8fd9\u4e9b\u503c\u88ab\u4fee\u6539\uff0c\u5176\u4e4b\u524d\u7684\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\u3001\u539f\u5b50\u6027\u7684\u3001\u4e0d\u53ef\u4fee\u6539\u7684\u3002\u6240\u4ee5\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u88ab\u968f\u65f6\u5199\u5165\u5230\u7528\u6237\u771f\u6b63\u7684\u6570\u636e\u5e93\u6587\u4ef6\u4e2d\u3002"),(0,n.kt)("p",null,"\u53ea\u662f\u56e0\u4e3a\u9891\u7e41\u5199\u5165\u6570\u636e\u5e93\u7684IO\u64cd\u4f5c\uff0c\u6211\u4eec\u9009\u62e9\u5728\u4e00\u4e9b\u5173\u952e\u4e8b\u4ef6\u53d1\u751f\u65f6\u5728\u5199\u5165\u6570\u636e\u5e93\u3002\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\uff0c\u5982\u679cCreationVM\u673a\u5668\u672c\u8eab\u5d29\u6e83\uff0c\u6709\u5bfc\u81f4\u6709\u4e9b\u5c5e\u6027\u6ca1\u6709\u88ab\u5b58\u6863\uff0c\u56e0\u6b64\u4e0b\u6b21\u7528\u6237\u9700\u8981\u91cd\u590d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002\u4f46\u662f\u8fd9\u5e76\u6ca1\u6709\u592a\u5927\u95ee\u9898\uff0c\u6e38\u620f\u73a9\u5bb6\u5df2\u7ecf\u4e60\u60ef\u8fd9\u79cd\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u7684\u673a\u5236\uff0c\u5f53\u7528\u6237\u7ec4\u4ef6\u8fdb\u7a0b\u53d1\u751f\u5d29\u6e83\u65f6\uff0c\u7531\u4e8eCreationVM\u7684\u5b58\u6863\u5c5e\u6027\u5e76\u4e0d\u5305\u542b\u4e00\u4e9b\u4e2d\u95f4\u503c\uff0c\u6240\u4ee5\u6240\u6709\u8fd9\u4e9b\u90fd\u4e0d\u4f1a\u88ab\u5199\u5165\u5230\u6570\u636e\u5e93\u3002\u53cd\u4e4b\uff0cCreationVM\u63a5\u6536\u5230\u5d29\u6e83\u901a\u77e5\u4e4b\u540e\uff0c\u4f1a\u7acb\u5373\u5c06\u4e4b\u524d\u7684\u5b58\u6863\u5c5e\u6027\u5199\u5165\u7684\u6570\u636e\u5e93\uff0c\u5e76\u5199\u5165\u5d29\u6e83\u65e5\u5fd7\u3002\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6\u4e5f\u662f\u540c\u6837\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u8be5\u673a\u5236\u7684\u6210\u529f\u8fd0\u4f5c\u9700\u8981\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u534f\u540c\u5de5\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8981\u4fdd\u8bc1\u5f53\u5bf9\u4e00\u4e2a\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u65f6\uff0c\u4e4b\u524d\u7684\u6240\u6709\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u653e\u5fc3\u5b58\u50a8\u8fd9\u4e9b\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\uff0c\u5982\u679c\u7ec4\u4ef6\u5728\u5b58\u6863\u5c5e\u6027\u7684\u4fee\u6539\u4e4b\u524d\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u90a3\u4e48\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\u5bf9\u5b58\u6863\u5c5e\u6027\u7684\u5199\u5165\u5e94\u8be5\u4e5f\u4e0d\u4f1a\u51fa\u73b0\u95ee\u9898")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u8fd4\u56de\u503c\u5e94\u8be5\u59cb\u7ec8\u4f4d\u4e8e\u51fd\u6570\u7684\u6700\u540e\uff0c\u4e0d\u80fd\u518d\u4e2d\u95f4\u8fd4\u56de\uff0c\u6216\u8005\u5bf9\u8fd4\u56de\u503c\u5bf9\u8c61\u8d4b\u503c\uff0c\u6216\u8005\u5199\u6210\u4ee5\u4e0b\u65b9\u5f0f\u66f4\u597d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\nGlobal.HP = map() {\n ...\n x + y + z\n}\n")),(0,n.kt)("p",null,"\u6700\u540e\u4e00\u4e2a\u5b57\u53e5\u9ed8\u8ba4\u662f\u8fd4\u56de\u503c\uff0c\u4e0d\u9700\u8981return\u5173\u952e\u5b57\uff0c\u5b83\u8fd4\u56de\u7684\u503c\u4f1a\u8d4b\u503c\u7ed9Global.HP\uff0c\u8fd9\u91cc\u4ecd\u7136\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u4f7f\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u53bb\u5173\u5fc3Global.HP\u7684\u5185\u90e8\u7ed3\u6784\u3002\u540c\u65f6\u7701\u6389\u4e86\u4e00\u4e9b\u58f0\u660e\uff0c\u5982\u679c\u8ddf\u8f93\u5165\u53d8\u91cf\u4e00\u6837\u7684\u58f0\u660e\u5f62\u5f0f\u4f1a\u591a\u5199\u4e00\u4e9b\u65e0\u7528\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2224-\u7ec4\u4ef6\u5c5e\u6027"},"2.2.24 \u7ec4\u4ef6\u5c5e\u6027"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".Component(name) //\u7ec4\u4ef6\u6587\u4ef6\u540d\u548c\u540d\u79f0\n.UseDt(true) //\u662f\u5426\u4f7f\u7528dt\u53c2\u6570\uff0c\u4e00\u822c\u7528\u4e8e\u52a8\u753b\u6216\u8005\u8de8\u5e27\u884c\u4e3a\n")),(0,n.kt)("h3",{id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"},"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("p",null,"\u6570\u636e\u548c\u903b\u8f91\u662f\u7a0b\u5e8f\u7684\u4e24\u4e2a\u6700\u57fa\u672c\u5143\u7d20\u548c\u6982\u5ff5\uff0c\u6709\u4e86\u8fd9\u4e24\u4e2a\u57fa\u672c\u5143\u7d20\uff0c\u6211\u4eec\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u7f16\u5199\u4efb\u4f55\u7a0b\u5e8f\u3002"),(0,n.kt)("h4",{id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u65e0\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u5728\u89e3\u51b3\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u6d41\u7684\u4e24\u79cd\u8f6f\u4ef6\u6784\u9020\u601d\u8def\u662f\u9762\u5411\u5bf9\u8c61\u548c\u51fd\u6570\u5f0f\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"},"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"),(0,n.kt)("p",null,"\u53c2\u89c12.7.13.3\u8282\uff0cRealityIS\u4e2d\u7684\u5b9e\u4f53\u5bf9\u8c61\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u5373\u590d\u5408\u51fd\u6570\uff0c\u56e0\u6b64\u5b9e\u4f53\u5bf9\u8c61\u4ece\u6982\u5ff5\u4e0a\u4ec5\u5305\u542b\u903b\u8f91\uff0c\u4e0d\u5305\u542b\u6570\u636e\uff0c\u8fd9\u4e5f\u662f\u7b80\u5316\u7528\u6237\u7ec4\u7ec7\u903b\u8f91\u7684\u5173\u952e\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5373\u7528\u6237\u4e0d\u9700\u8981\u5173\u5fc3\u6570\u636e\uff0c\u5173\u5fc3\u7684\u4ec5\u4ec5\u662f\u529f\u80fd"),"\u3002"),(0,n.kt)("p",null,"\u90a3\u4e48\u6570\u636e\u5728\u54ea\u91cc\uff1f\u4ee5\u53ca\u6570\u636e\u662f\u4ec0\u4e48\u6837\u7684\u6982\u5ff5\uff1f"),(0,n.kt)("p",null,"\u5982\u679c\u8bf4\u6570\u636e\u88ab\u9690\u85cf\u8d77\u6765\uff0c\u5b83\u5728\u54ea\u91cc\u4ee5\u4ec0\u4e48\u5f62\u5f0f\u5b58\u5728\u5462\uff1f\u4ece\u7528\u6237\u5c42\u9762\u6765\u8bb2\uff0c\u8868\u9762\u4e0a\u770b\u6570\u636e\u4ecd\u7136\u662f\u9644\u7740\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u6dfb\u52a0\u4e86\u67d0\u4e2a\u51fd\u6570\u6216\u8005\u590d\u5408\u51fd\u6570\u4e4b\u540e\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c06\u4f1a\u663e\u793a\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7528\u6237\u9700\u8981\u77e5\u6653\u8fd9\u4e9b\u53c2\u6570\u6765\u4e86\u89e3\u51fd\u6570\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u6570\u636e\u672c\u8d28\u4e0a\u662f\u4e0d\u9700\u8981\u7528\u6237\u7ba1\u7406\u7684\uff0cRealityIS\u8ba4\u4e3a\uff0c\u6240\u6709\u6570\u636e\u90fd\u662f\u7528\u6237\u6570\u636e\uff0c\u5373\u6240\u6709\u6570\u636e\u662f\u4e00\u4e2a\u7528\u6237\u7684\u5de8\u5927\u6570\u636e\u8868\uff0c\u5f53\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4ee5\u5b9e\u73b0\u67d0\u4e2a\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5bf9\u8fd9\u4e2a\u5927\u7684\u7528\u6237\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u7684\u67d0\u4e9b\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u548c\u5199\u5165\u6570\u636e\u7684\u64cd\u4f5c\u5219\u7531\u7cfb\u7edf\u5b8c\u6210\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u6570\u636e\uff0c\u90a3\u6837\u5c31\u53d8\u6210\u4f20\u7edf\u7684\u9762\u5411\u6570\u636e\u5e93\u7f16\u7a0b\u7684\u6a21\u5f0f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u6839\u636e\u5bf9\u8c61\u7ec4\u4ef6\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u4ece\u6570\u636e\u5e93\u4e2d\u627e\u51fa\u8fd9\u4e9b\u6570\u636e\uff0c\u5e76\u6309\u7167\u5bf9\u8c61\u7684\u5f62\u5f0f\u5206\u6563\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u5404\u4e2a\u4f4d\u7f6e\uff0c\u6574\u4e2a\u8fd0\u884c\u65f6\u7684\u884c\u4e3a\u5b9e\u9645\u4e0a\u8ddf\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff0c\u66f4\u786e\u5207\u5730\u8bf4ECS\u7684\u5185\u5b58\u5e03\u5c40\u662f\u7c7b\u4f3c\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u770b\u5f85\u548c\u5904\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u662fRealityIS\u4e0e\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u7684\u5de8\u5927\u5dee\u5f02\u3002"),(0,n.kt)("h4",{id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"},"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\\2. \u201c\u6709\u201d\u548c\u201d\u80fd\u201d\u548c\u5b9e\u73b0"),(0,n.kt)("p",{parentName:"blockquote"},"\u5728\u7ec4\u4ef6\u6a21\u578b\u4e2d\uff0c\u5bf9\u8c61\u7531\u7ec4\u4ef6\u7ec4\u6210\uff0c\u6240\u4ee5\u5176\u884c\u4e3a\u4e5f\u7531\u7ec4\u4ef6\u4e3b\u5bfc\uff0c\u4f8b\u5982\u4e00\u4e2a\u5bf9\u8c61\u62e5\u6709","[Movement]"," \u548c ","[Location]","\uff0c\u5219\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u80fd\u591f\u79fb\u52a8\uff0c\u8fd9\u5728\u6574\u4f53\u4e0a\u662f\u5341\u5206\u548c\u8c10\u81ea\u7136\u7684\uff0c\u4f46\u5f53\u6211\u4eec\u4ed4\u7ec6\u8003\u91cf\uff0c\u8fd9\u4e2a",(0,n.kt)("strong",{parentName:"p"},'"\u80fd"'),"\u662f\u7531\u4e8e\u4ec0\u4e48\u5462\uff0c\u662f\u56e0\u4e3a ","[Movement]","\u5417\uff0c\u662f\u56e0\u4e3a","[Location]","\u5417\uff0c\u8fd8\u662f\u540c\u65f6\u56e0\u4e3a ","[Movement]"," \u548c ","[Location]","\uff1f\u5f53\u7136\u662f\u540c\u65f6\uff08\u8fd9\u91cc\u4fbf\u63ed\u793a\u51fa\u4e86\u7ec4\u4ef6\u548c\u63a5\u53e3\u7684\u5c55\u5e73\u5bf9\u8c61\u65b9\u5f0f\u662f\u6b63\u4ea4\u7684\uff09\uff0c\u90a3\u79fb\u52a8\u7684\u903b\u8f91\u653e\u5230\u54ea\u5462\uff1f\u7b54\u6848\u662f\u653e\u5728\u8fd9\u4e2a\u201c\u5207\u7247\u201c\u4e0a\u3002\u4f46\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u4f1a\u770b\u5230\u628a\u903b\u8f91\u653e\u5728 ","[Movement]"," \u4e0a\u7684\u505a\u6cd5\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u90fd\u662f\u53ef\u53d6\u7684\uff0c\u540e\u4e00\u79cd\u62e5\u6709\u8f83\u4e3a\u7b80\u5355\u7684\u5b9e\u73b0\u5e76\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u800c",(0,n.kt)("strong",{parentName:"p"},"\u524d\u4e00\u79cd\u62e5\u6709\u66f4\u7cbe\u51c6\u7684\u8bed\u4e49\uff0c\u66f4\u597d\u7684\u62bd\u8c61"),"\uff08\u540e\u4e00\u79cd\u79cd\u65b9\u5f0f\u4e2d ","[Movement]"," \u53bb\u8bbf\u95ee\u5e76\u4fee\u6539\u4e86 ","[Location]"," \u7684\u6570\u636e\uff0c\u8fd9\u7834\u574f\u4e86\u4e00\u5b9a\u7684\u5c01\u95ed\u6027\uff0c\u4e14\u5f62\u6210\u4e86\u8026\u5408\uff0c\u5f53\u7136\u8fd9\u79cd\u8026\u5408\u4e5f\u6709\u4e00\u5b9a\u7684\u597d\u5904\uff0c\u5982\u907f\u514d\u53ea\u6dfb\u52a0\u4e86 ","[Movement]"," \u8fd9\u79cd\u65e0\u610f\u4e49\u7684\u60c5\u51b5\u53d1\u751f\uff09\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aBenzzZX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://zhuanlan.zhihu.com/p/41652478"},"https://zhuanlan.zhihu.com/p/41652478"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h4",{id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"},"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"),(0,n.kt)("h4",{id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"},"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"),(0,n.kt)("h2",{id:"23-creation-vm"},"2.3 Creation VM"),(0,n.kt)("p",null,"\u8ddf\u5f15\u64ce\u9ad8\u5ea6\u4e00\u4f53\u5316\uff0c\u4e0d\u662f\u72ec\u7acb\u7684\u865a\u62df\u673a"),(0,n.kt)("h3",{id:"231-creation-table-engine"},"2.3.1 Creation Table Engine"),(0,n.kt)("p",null,"Table Engine\u7ef4\u62a4\u4e00\u4e2aDatabase\uff0c\u4e3b\u8981\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u9020\u548c\u5b58\u50a8\u6240\u6709\u57fa\u4e8eData-driven\u7684\u6570\u636e\uff0c\u5305\u62ecComponent\u7684\u6570\u636e\u3001\u4e8b\u4ef6\u5217\u8868\u3001Hierarchical Level\u6570\u636e\u3001\u884c\u4e3a\u6811/\u72b6\u6001\u673a\u7b49\u7ed3\u6784\uff0c\u6240\u6709\u6570\u636e\u90fd\u5df2\u6570\u7ec4\u7684\u5f62\u5f0f\u7ec4\u7ec7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9Table\u6570\u636e\u8fdb\u884c\u65b0\u589e\u3001\u5220\u9664\u3001\u4fee\u6539\u3001\u6392\u5e8f\u7b49\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u9700\u8981\u5ef6\u8fdf\u5230Component\u8fdb\u884c\u540e\u7edf\u4e00\u8fdb\u884c\u5904\u7406\uff0c\u800c\u4e0d\u662f\u7acb\u5373\u5904\u7406\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8eComponent\u7684\u6570\u636e\uff0c\u7531\u4e8e\u6240\u6709\u6570\u636e\u6df7\u5728\u4e00\u8d77\uff0c\u9700\u8981\u6309\u7167ArchType\u8fdb\u884c\u7ec4\u7ec7\u3002\u5e76\u4e14\u5757\u5143\u7d20\u7684\u5927\u5c0f\u8fdb\u884c\u81ea\u52a8\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u63d0\u4f9b\u4e00\u4e9b\u6807\u51c6\u7f16\u7a0b\u6848\u4f8b"),(0,n.kt)("p",null,"\u865a\u62df\u673a\u7684\u8bbe\u8ba1\uff1a"),(0,n.kt)("p",null,"\u5982\u679c\u6570\u636e\u90fd\u662fTable\u7c7b\u578b\u7684\u683c\u5f0f\uff0c\u90a3\u4e48\u52a8\u6001\u9700\u8981\u7684\u865a\u62df\u673a\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u5904\u7406\u539f\u751f\u7c7b\u578b\uff0c\u6240\u6709Table\u6570\u636e\u7684\u5206\u914d\u548c\u7ba1\u7406\u90fd\u4ea4\u7ed9\u7cfb\u7edf\u5c42\uff0c\u8fd9\u6837\u811a\u672c\u9700\u8981\u751f\u6210\u7684\u4ee3\u7801\u4e5f\u4e3a\u201c\u7eaf\u4ee3\u7801\u201d\uff0c\u8fd9\u4e9b\u5b57\u8282\u7801\u5bf9\u5e94\u7684\u64cd\u4f5c\u6570\u5730\u5740\u7684\u5206\u914d\u5219\u4e3aC++\u5c42\u7684\u7f16\u8bd1\u578b\u4ee3\u7801\uff0c\u800c\u4e0d\u662f\u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u907f\u514d\u4e86\u811a\u672c\u8bed\u8a00\u590d\u6742\u7684\u6570\u636e\u5730\u5740\u5206\u914d\uff1a\u4f8b\u5982\u6784\u9020\u865a\u62df\u5bc4\u5b58\u5668\u6216\u8005\u865a\u62df\u6808\uff0c\u4ee5\u53ca\u5bf9\u5e94\u4e3a\u4e86\u6784\u5efa\u865a\u62df\u5bc4\u5b58\u5668\u800c\u6784\u9020\u7684\u7b26\u53f7\u8868\u4ee5\u53ca\u7b26\u53f7\u8868\u7684\u89e3\u91ca\u6620\u5c04\u7b49"),(0,n.kt)("p",null,"\u6240\u6709\u7684\u4ee3\u7801\uff0c\u5728\u865a\u62df\u673a\u8fd9\u4e00\u5c42\u90fd\u662f\u8f6c\u5316\u4e3a\u5bf9table\u7684\u67d0\u79cd\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u5c01\u88c5\u4e3a\u57fa\u7840\u7684C++\u5c42\u7684\u4ee3\u7801\uff0c\u81ea\u52a8\u5c31\u5904\u7406\u4e86\u5185\u5b58\u5730\u5740\u7684\u5206\u914d"),(0,n.kt)("p",null,"\u8981\u62c6\u89e3Table\u7684\u57fa\u672c\u64cd\u4f5c\uff0c\u4e5f\u5c31\u662fSTL\u4e2d\u57fa\u7840Vector\u7684\u57fa\u7840\u6570\u636e\u64cd\u4f5c\uff0c\u5e94\u8be5\u80fd\u591f\u63d0\u70bc\u51fa\u6240\u6709\u53ef\u80fd\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u7136\u540e\u5c01\u88c5\u4e3a\u865a\u62df\u673a\u5c42\u7684\u9ad8\u7ea7\u57fa\u7840\u6307\u4ee4"),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2aTable Library \u5c31\u662f\u4e00\u4e2a\u7c7b\u4f3cSTL\u7684\u5e93\uff0c\u5b83\u5c01\u88c5\u4e00\u4e9b\u7279\u5b9a\u7684Table\u7684\u64cd\u4f5c\u7c7b\u578b\u548c\u64cd\u4f5c\u65b9\u6cd5\uff0c\u9762\u5411\u6570\u636e\u9a71\u52a8\u7684\u6574\u4e2a\u67b6\u6784\uff0c\u65e2\u652f\u6301\u539f\u751fC++\u8c03\u7528\uff0c\u4e5f\u652f\u6301\u865a\u62df\u673a\u57fa\u7840\u6307\u4ee4\u5c01\u88c5\uff0c\u8fd9\u5c31\u597d\u6bd4Lua\u7684\u67d0\u4e9b\u65b9\u6cd5\u7531C\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684C\u64cd\u4f5c\u662f\u66f4\u4f4e\u5c42\u7684\u64cd\u4f5c\uff0c\u5e76\u4e14\u8fd9\u91cc\u7684\u6570\u636e\u7531C\u5b9a\u4e49\u548c\u5206\u914d\uff0c\u800c\u4e0d\u662f\u50cfLua\u4e00\u6837\u7531Lua\u5206\u914d\u518d\u4f20\u7ed9C\uff0c\u6240\u4ee5\u8fd9\u91cc\u811a\u672c\u8bed\u8a00\u7684\u5b9a\u4e49\u8bed\u8a00\u5904\u7406\u7279\u6b8a\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u4f8b\u5982\u811a\u672c\u8bed\u8a00\u4e2d\u5bf9\u53d8\u91cf\u7684\u4f7f\u7528\u90fd\u7ffb\u8bd1\u4e3a\u5bf9C\u5bf9\u8c61\u7684\u4f7f\u7528\uff0c\u6ca1\u6709\u53d8\u91cf\u590d\u5236\uff0c\u6ca1\u6709\u6570\u636e\u53ea\u6709\u6307\u4ee4"),(0,n.kt)("p",null,"\u5982\u679c\u811a\u672c\u8bed\u8a00\u4e2d\u4e0d\u542b\u7ed3\u6784\u58f0\u660e\uff0c\u6216\u8005\u6ca1\u6709\u81ea\u5df1\u7684\u7ed3\u6784\u4f53\uff0c\u53ea\u6709\u7b80\u5355\u53d8\u91cf\uff0c\u90a3\u4e48\u6574\u4e2a\u89e3\u91ca\u8fc7\u7a0b\u662f\u4e0d\u662f\u4f1a\u5feb\u5f88\u591a"),(0,n.kt)("h4",{id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4"},"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5355\u72ec\u7f16\u8bd1\uff0c\u9996\u5148\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u5f97\u662f\u72ec\u7acb\u7684\uff0c\u53e6\u5916\u8fd9\u4e9b\u6570\u636e\u7684\u5e03\u5c40\u5f97\u662f\u56fa\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ec4\u4ef6\u9700\u8981\u8bbf\u95ee\u7684\u6bcf\u4e2a\u53d8\u91cf\uff0c\u4f7f\u7528\u6307\u9488\u7684\u65b9\u5f0f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u8fd9\u610f\u5473\u7740\u865a\u62df\u673a\u9700\u8981\u52a8\u6001\u7ed9\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u6bcf\u4e2a\u5730\u5740\u8d4b\u503c\uff0c\u8fd9\u51e0\u4e4e\u662f\u4e0d\u65e0\u505a\u5230\u7684\uff0c\u56e0\u4e3a\u865a\u62df\u673a\u53ea\u5904\u7406\u89c4\u5219\u7684\u5185\u5bb9\uff0c\u901a\u7528\u6027\u7684\u89c4\u5219\uff0c\u4f46\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u786e\u5b9e\u4e0d\u4e00\u6837\u7684\uff0c\u9664\u975e\u662f\u89e3\u91ca\u5668\u6216\u8005\u865a\u62df\u673a\u81ea\u5df1\u5206\u914d\u7684\u5185\u5b58\uff0c\u4f46\u662f\u8fd9\u91cc\u4e00\u4e2a\u5b9e\u4f53\u7684\u7ec4\u4ef6\u7684\u6570\u636e\u4e0d\u662f\u7531\u7ec4\u4ef6\u4ee3\u7801\u81ea\u5df1\u5206\u914d\u7684\uff08\u4f60\u5982\u4f20\u7edf\u7684\u5bc4\u5b58\u5668\u5bfb\u5740\uff0c\u5c31\u662f\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u76f4\u63a5\u9488\u5bf9\u4ee3\u7801\u8bbe\u7f6e\u597d\u5bc4\u5b58\u5668\u5730\u5740\uff09\uff0c\u800c\u662f\u7531Creation Table\u81ea\u5df1\u5206\u914d\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u79cd\u5206\u79bb\uff0c\u7ec4\u597d\u7684\u65b9\u5f0f\u5c31\u662f\u5c06\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u653e\u5728\u4e00\u4e2a\u8fde\u7eed\u7684\u5185\u5b58\u5730\u5740\u4e2d\uff0c\u7136\u540e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u673a\u53ea\u8981\u52a8\u6001\u5c06\u8d77\u59cb\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u89c4\u5219\u662f\u901a\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u5668\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u5bfb\u5740\u8f6c\u6362\u4e3a\u57fa\u4e8e\u76f8\u5bf9\u4f4d\u7f6e\u7684\u5bfb\u5740")),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u865a\u62df\u673a\u4e2d\u6267\u884c\u51fd\u6570\u8c03\u7528\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u91c7\u7528\u6808\u5f0f\u65b9\u6cd5\uff0c\u6240\u6709\u51fd\u6570\u9700\u8981\u8bbf\u95ee\u7684\u53d8\u91cf\u5b58\u50a8\u5728\u4e00\u4e2a\u6808\u4e2d\uff0c\u51fd\u6570\u6309\u7d22\u5f15\u5bf9\u6808\u4e2d\u7684\u5185\u5b58\u8fdb\u884c\u8bbf\u95ee\u3002"),(0,n.kt)("h4",{id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"},"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u53ea\u6709\u7ec4\u4ef6\u7c7b\u578b\uff0c\u7ec4\u4ef6\u53ea\u6709\u6570\u636e\uff0c\u6ca1\u6709\u65b0\u7684\u7ed3\u6784\u4f53\u5b9a\u4e49"),"\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u6709\u4e00\u5b9a\u7684\u57fa\u7840\u6570\u636e\u7ed3\u6784\uff0c\u4f46\u662f\u5176\u4ed6\u7684\u6570\u636e\u7ed3\u6784\u5747\u6709\u7ec4\u4ef6\u7684\u6570\u636e\u5b9a\u4e49\u9690\u5f0f\u51b3\u5b9a\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7c7b\u578b\u5b9a\u4e49\u5728\u811a\u672c\u8bed\u8a00\u4e2d\uff0c\u5e76\u4e14\u662f\u6309\u7167\u5355\u4e2a\u7ec4\u4ef6\u7684\u7c7b\u578b\u8fdb\u884c\u5b9a\u4e49\u7684\uff0c\u5373AOS\uff08array of struct\uff09\uff0c\u4e24\u4e2a\u539f\u56e0 \uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u5e76\u4e0d\u5229\u4e8e\u9ad8\u6027\u80fd \u8ba1\u7b97\uff0c\u9ad8\u6027\u80fd\u8ba1\u7b97\u9700\u8981\u662fSOA\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u5e95\u5c42\u865a\u62df\u673a\u5e76\u4e0d\u4e86\u89e3\u7ec4\u4ef6\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5bfc\u81f4\u4e0d\u80fd\u52a8\u6001\u6784\u9020\u5bf9\u8c61\uff1b\u56e0\u6b64\u9700\u8981\u5728\u811a\u672c\u8bed\u8a00\u5c42\u9762\u76f4\u63a5\u6784\u9020\u5bf9\u8c61\uff0c\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u5c31\u9700\u8981\u5b9e\u73b0\u590d\u6742\u5bf9\u8c61\uff0c\u53ca\u5176\u76f8\u5e94\u7684\u5783\u573e\u56de\u6536\u673a\u5236\uff1b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0cUnity\u4f7f\u7528\u4e86\u79bb\u7ebf\u7f16\u8bd1\u7684\u65b9\u5f0f\uff0c\u5c06\u7ec4\u4ef6\u6570\u636e\u7684\u6784\u9020\u8f6c\u6362\u6210\u4e86\u53e6\u5916\u67d0\u79cd\u5f62\u5f0f\u7684\u4e2d\u95f4\u4ee3\u7801\uff1b\u8fd9\u6837\u4f7f\u5f97\u53ef\u4ee5SOA\u7684\u5f62\u5f0f\u8fdb\u884c \u6570\u636e\u7ba1\u7406\uff0c\u4f46\u662f\u5b83 \u53ef\u80fd\u4e0d\u652f\u6301\u52a8\u6001\u66f4\u65b0\uff0c\u6216\u8005\u81f3\u5c11\u9700\u8981\u52a8\u6001\u66f4\u65b0\u6574\u4e2a\u7f16\u8bd1\u540e\u7684\u4e2d\u95f4\u4ee3\u7801\uff1f"),(0,n.kt)("p",null,"\u5f53CTE\u8bd5\u56fe\u5c06 \u4e0a\u8ff0\u8fc7\u7a0b\u653e\u5230\u8fd0\u884c\u65f6\u52a8\u6001\u89e3\u6790\u65f6\uff0c\u6027\u80fd\u662f\u9700\u8981\u91cd\u70b9\u8003\u8651 \u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u7eafA OS->SOA\u7684\u5f00\u9500"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5f53\u573a\u666f\u4e2d\u6709 \u5927\u91cf\u5bf9\u8c61\u65f6 \uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u7684\u6570\u636e\u5173\u7cfb\u7b49\u7b49\u7684\u5224\u65ad\u53ef\u80fd\u4f1a\u975e\u5e38 \u6d88\u8017\u65f6\u95f4")),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u597d\u597d\u5212\u5206\u9636\u6bb5\uff0c\u5e76\u628a\u90e8\u5206\u6570\u636e\u662f\u5426\u53ef\u4ee5\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2aCreation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u786e\u5b9a\u5b83\u5f15\u7528\u7684\u6240\u6709\u53d8\u91cf\u53ca\u5176\u7ec4\u5408\u5173\u7cfb\uff0c\u8fd9\u90e8\u5206\u662f\u5426\u53ef\u4ee5\u9884\u8ba1\u7b97\u6210 \u67d0\u79cd\u683c\u5f0f\uff0c\u5373\u662f\u8ba1\u7b97ArchType\u7684\u65f6\u95f4\uff0c\u8fd9\u4e9b\u53ef\u4ee5 \u5728\u4e91\u7aef\u4e0b\u8f7d \u8d44\u6e90 \u7684 \u65f6\u5019\u8ba1\u7b97 \u597d\uff0c\u4e0b\u8f7d\u65f6\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd0\u884c\u65f6\u9996\u5148\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u5173\u7cfb\u521d\u59cb\u5316\u6570\u7ec4"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6d89\u53ca\u7528\u6237\u5728\u7aef\u4fa7\u7f16\u8f91\u6570\u636e\uff0c\u5219\u9488\u5bf9\u6bcf\u4e2a\u5bf9\u8c61\u52a8\u6001\u4fee\u6539 \uff0c\u4f46\u6b64\u65f6\u5e94\u8be5\u4e0d\u4f1a\u592a\u5f71\u54cd\u6027\u80fd\u3002")),(0,n.kt)("p",null,"\u56e0\u4e3a\u8fd9\u79cdAOS->SOA\u7684\u8f6c\u6362\uff0c\u4f7f\u5f97\u4e0a\u5c42\u811a\u672c\u8bed\u8a00\u5b9a\u4e49\u7684\u5bf9\u8c61\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e0a\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u4ece\u800c\u51cf\u5c11\u811a\u672c\u5c42\u9762\u7684\u590d\u6742\u5ea6\uff0c\u5e76\u4f7f\u5f97\u539f\u751f\u8bed\u8a00 \u7ba1\u7406\u5bf9\u8c61\u6027\u80fd\u66f4\u9ad8\u6548\u3002\u800c\u8fd9\u79cd\u8f6c\u6362\u673a\u5236\u80cc\u540e\u7684\u6838\u5fc3\u56e0\u7d20\u662f\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u89e3\u91ca\u5668\u52a8\u6001\u8bc6\u522b\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e76\u4ece\u4e2d\u63d0\u53d6\u5c5e\u6027\u53ca\u5176\u7b26\u53f7")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4ee5\u53ca\u5e95\u5c42ECS\u7684\u673a\u5236\u5c06\u8fd9\u4e9b\u5c5e\u6027\u8f6c\u6362\u4e3aSOA\u6570\u7ec4\uff0c\u7531\u4e8e\u6574\u4e2aCTE\u90fd\u662f\u5df2\u77e5\u57fa\u7840\u6570\u636e\u7c7b\u578b\u7684\u6570\u7ec4\uff0c\u6240\u4ee5\u95f4\u63a5\u5730\u4e0d\u9700\u8981\u5173\u6ce8\u4e0a\u5c42 \u811a\u672c\u5b9e\u9645\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6bcf\u4e2a\u5143\u7d20\u6309\u7167\u7d22\u5f15\u8fdb\u884c\u5bfb\u5740\u5373\u53ef\u3002"))),(0,n.kt)("p",null,"\u6574\u4e2aTable\u4e2d\u6ca1\u6709\u4efb\u4f55\u672a\u77e5Struct\u5bf9\u8c61\uff0c\u6240\u8c13\u672a\u77e5\u5373\u662f\u7528\u6237\u5b9a\u4e49\u7684struct\u3002\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u5c31\u662f\u89e3\u91ca\u5668\u52a8\u6001\u5bf9\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\u8fdb\u884c\u91cd\u65b0\u6620\u5c04\uff0c\u901a\u8fc7\u6570\u7ec4\u7d22\u5f15+\u57fa\u7840\u53d8\u91cf\u7c7b\u578b\uff0c\u5c31\u80fd\u8ba1\u7b97\u51fa\u6b63\u786e\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002\u56e0\u4e3a\u6570\u636e\u5728\u5185\u5b58\u4e2d\u662f\u6ca1\u6709struct\u7684\u6982\u5ff5\u7684\uff0cstruct\u7684\u4f5c\u7528\u5728\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u6216\u8005\u89e3\u91ca\u5668\u8ba1\u7b97\u5185\u5b58\u4e2d\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u6211\u4eec\u4e0d\u80fd\u652f\u6301\u7528\u6237\u7aef\u81ea\u5b9a\u4e49struct\uff0c\u5426\u5219\u865a\u62df\u673a\u65e0\u6cd5\u8bc6\u522b\uff0c\u5c31\u9700\u8981\u590d\u6742\u7684\u673a\u5236\u6765\u8bc6\u522b\u7ed3\u6784\u4f53\u3002\u7531\u4e8e\u6e38\u620f\u7684\u7279\u6b8a\u6027\uff1a\u5b83\u80fd\u591f\u5c06\u6240\u6709\u6570\u636e\u901a\u8fc7ECS\u7684\u673a\u5236\u8f6c\u5316\u4e3aTable\uff0c\u6240\u4ee5\u6211\u4eec\u6709\u5c31\u4f1a\u53bb\u9664\u6389\u7ed3\u6784\u4f53\u6216\u8005\u76f8\u5173\u7684\u7c7b\u578b\u89e3\u6790\uff0c\u53d8\u6210\u66f4\u7b80\u5355\u7684\u7d22\u5f15\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u8003\u8651\u6027\u80fd\uff0c\u8fd9\u91cc\u53ef\u80fd\u9700\u8981\u8003\u8651AOT\u7684\u673a\u5236\uff0c\u5373\u63d0\u524d\u5c06\u7d22\u5f15\u7684\u8ba1\u7b97\u8f6c\u5316\u4e3a\u4e2d\u95f4\u5f62\u5f0f\uff0c\u4e0d\u7136\u6bcf\u6b21\u8981\u901a\u8fc7\u865a\u62df\u673a\u4e2d\u7684\u7d22\u5f15\u6620\u5c04\u65b9\u6cd5\u6765\u52a8\u6001\u8ba1\u7b97\u7d22\u5f15\uff0c\u6027\u80fd\u5f00\u652f\u5c31\u4f1a\u6bd4\u8f83\u5927\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u4e2a\u7d22\u5f15\u662f\u8ddf\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u76f8\u5173\u8054\u7684\uff0c\u6240\u4ee5\u9700\u8981\u5728\u5bf9\u8c61\u7684\u521b\u5efa/\u4fee\u6539/\u5220\u9664\u7b49\u73af\u8282\u8fdb\u884c\u91cd\u65b0\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406"},"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*"),(0,n.kt)("p",null,"\u5c3d\u7ba1Table\u4e2d\u7684\u6570\u636e\u5728\u4e0d\u65ad\u53d8\u5316\uff0c\u4f46\u662f\u8fd9\u90e8\u5206\u7684\u53d8\u5316\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8ddf\u5783\u573e\u56de\u6536\u7684\u601d\u8def\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u6bb5\u8fde\u7eed\u7684\u5185\u5b58\u4e0d\u591f\u65f6\uff0c\u9700\u8981\u91cd\u65b0\u5ea6\u6570\u636e\u7684\u5e03\u5c40\u8fdb\u884c\u8c03\u6574"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u5199\u5bf9\u8c61\u4e0d\u518d\u4f7f\u7528\u65f6\uff0c\u5783\u573e\u56de\u6536\u5668\u53ef\u80fd\u9700\u8981\u5bf9\u67d0\u6bb5\u5185\u5b58\u6570\u636e\u8fdb\u884c\u64e6\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u8bb0\u5f55\u5bf9\u8c61\u4e4b\u95f4\u7684\u7d22\u5f15\uff0c\u5173\u7cfb\u7b49\u7b49")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u90e8\u5206\u601d\u60f3\u53ef\u4ee5\u53c2\u8003\u5783\u573e\u56de\u6536\u7684\u4e00\u4e9b\u601d\u60f3\u548c\u7b97\u6cd5\u3002"),(0,n.kt)("h3",{id:"232-addremove"},"2.3.2 Add\u3001Remove"),(0,n.kt)("p",null,"\u5bf9\u6570\u7ec4\u7684\u64cd\u4f5c\u4e00\u822c\u7531Component\u53d1\u8d77\uff0c\u4f46\u662f\u4e0d\u80fd\u7acb\u5373\u5bf9Table\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u4e3a\u5176\u4ed6Component\u6b63\u5728\u8bbf\u95ee\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u4e9b\u4fee\u6539\u9700\u8981\u5ef6\u8fdf\u5230Component\u548c\u5176\u4ed6\u64cd\u4f5c\u6267\u884c\u5b8c\u6bd5\uff0c\u9700\u8981\u4f7f\u7528\u8bf8\u5982\u7f13\u5b58\u961f\u5217\u4e4b\u7c7b\u7684\u67b6\u6784\u3002\u539f\u5219\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u7ec4\u7ed3\u6784\u7684\u4fee\u6539\u9700\u8981\u5355\u72ec\u4e0d\u7406\uff0c\u4e0d\u80fd\u5f71\u54cd\u5f53\u524d\u64cd\u4f5c")),(0,n.kt)("h3",{id:"233-change-driven-update"},"2.3.3 Change-driven Update"),(0,n.kt)("p",null,"\u5728\u6bcf\u4e00\u5e27\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u901a\u5e38\u505a\u4e09\u79cd\u7c7b\u578b\u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u505a\u4efb\u4f55\u5224\u65ad\uff0c\u628a\u6574\u4e2a\u903b\u8f91\u5b8c\u6574\u6267\u884c\u4e00\u904d\uff0c\u54ea\u6015\u5176\u4e2d\u6d89\u53ca\u7684\u6570\u636e\u6ca1\u6709\u4efb\u4f55\u53d8\u5316\uff08\u56e0\u6b64\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u4efb\u4f55\u53d8\u5316\uff09\uff0c\u8fd9\u79cd\u8ba1\u7b97\u7b56\u7565\u662f\u975e\u5e38\u6d6a\u8d39\u7684\uff0c\u4f46\u662f\u5b83\u786e\u662f\u7ba1\u7406\u6210\u672c\u6700\u4f4e\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u7c7b\u578b\u5305\u542b\u903b\u8f91\u5224\u65ad\uff0c\u56e0\u6b64\u4e00\u90e8\u5206\u8ba1\u7b97\u6307\u4ee4\u96c6\u4e8e\u67d0\u4e9b\u5c5e\u6027\u503c\u7684\u4e0d\u540c\u53ef\u80fd\u4e0d\u4f1a\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u7c7b\u662f\u5305\u542b\u4e00\u4e9b\u9700\u8981\u8de8\u8d8a\u591a\u5e27\u6267\u884c\u7684\u903b\u8f91\uff0c\u4f8b\u5982\u52a8\u753b\uff0c\u5b83\u4eec\u901a\u5e38\u53ea\u6267\u884c\u4e00\u6bb5\u8fde\u7eed\u7684\u65f6\u95f4\uff0c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7531\u4e8e\u5c5e\u6027\u6570\u636e\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u5b83\u9700\u8981\u50cf\u7b2c\u4e00\u79cd\u65b9\u5f0f\u4e00\u6837\u5b8c\u6574\u6267\u884c\uff1b\u4f46\u662f\u4e00\u65e6\u8fd9\u6bb5\u65f6\u95f4\u7ed3\u675f\uff0c\u5b83\u53ef\u80fd\u5c31\u4e0d\u518d\u9700\u8981\u88ab\u6267\u884c\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u548c\u7b2c\u4e8c\u79cd\u7c7b\u578b\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e00\u79cd\uff0c\u56e0\u4e3a\u5982\u679c\u6240\u6709\u8f93\u5165\u6570\u636e\u90fd\u4e0d\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u7406\u8bba\u4e0a\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u53d8\u5316\uff0c\u56e0\u6b64\u53ef\u4ee5\u4e0d\u7528\u6267\u884c\u3002\u7406\u8bba\u4e0a\u7b2c\u4e00\u79cd\u60c5\u51b5\u53ef\u4ee5\u628a\u67d0\u4e9b\u5c5e\u6027\u6570\u636e\u4f5c\u4e3a\u5224\u65ad\u6761\u4ef6\uff0c\u7136\u540e\u7b2c\u4e00\u79cd\u60c5\u51b5\u5c31\u53d8\u4e3a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u3002\u5bf9\u4e8e\u8fd9\u4e24\u79cd\u60c5\u51b5\uff0c\u4e5f\u6709\u53ef\u80fd\u5224\u65ad\u6761\u4ef6\u4f1a\u5305\u542b\u591a\u4e2a\uff0c\u56e0\u6b64\u6839\u636eECS\u7684\u601d\u8def\u53ef\u4ee5\u62c6\u5206\uff0c\u81f3\u5c11\u62c6\u5206\u6210\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u4e2a\u5224\u65ad\u6761\u4ef6\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u79cd\u5224\u65ad\u6761\u4ef6\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u628a\u8fd9\u4e2a\u5224\u65ad\u6761\u4ef6\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u89c2\u5bdf\u503c\uff0c\u53ea\u6709\u8fd9\u4e2a\u503c\u53d1\u751f\u53d8\u5316\u65f6\u624d\u9700\u8981\u5b8c\u6574\u6267\u884c\u6574\u4e2a\u7ec4\u4ef6\u7684\u903b\u8f91\u3002\u8fd9\u5c31\u662fChange-driven update\u7684\u6838\u5fc3\u601d\u8def\u3002\u5f53\u7136\u5904\u4e8e\u7b80\u5355\uff0c\u6211\u4eec\u53ea\u5224\u65ad\u503c\u662f\u5426\u53d1\u751f\u53d8\u5316\uff0c\u800c\u4e0d\u662f\u68c0\u6d4b\u66f4\u5177\u4f53\u7684\u6761\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u6761\u4ef6\u662f\u53d8\u91cfa\u5927\u4e8e10\uff0c\u90a3\u4e48a\u75313\u53d8\u62104\u4e5f\u662f\u89e6\u53d1\u903b\u8f91\u66f4\u65b0\u3002\u4f46\u662f\u5c06\u903b\u8f91\u5224\u65ad\u9644\u52a0\u5230\u5c5e\u6027\u503c\u4e0a\u5219\u4f1a\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u8fd9\u5bf9\u4e8e\u4e00\u4e9b\u5305\u542b\u590d\u6742\u8ba1\u7b97\u6216\u8005\u6d89\u53ca\u8f83\u5927\u6570\u636e\u52a0\u8f7d\u7684\u7ec4\u4ef6\u90fd\u662f\u975e\u5e38\u6709\u76ca\u7684\u3002\u800c\u4e14\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bb2\u4e5f\u4e0d\u7b97\u590d\u6742\uff0c\u53ef\u80fd\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u72b6\u6001\u53d8\u91cf\uff0c\u5e76\u77e5\u9053\u8fd9\u51e0\u4e2a\u53d8\u91cf\u9700\u8981\u68c0\u6d4b\u5373\u53ef\u3002\u5f53\u7136\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5224\u65ad\u662f\u5426\u8fd9\u4e9b\u503c\u7684\u53d8\u5316\u80fd\u5b8c\u5168\u51b3\u5b9a\u6216\u8986\u76d6\u6574\u4e2a\u903b\u8f91\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u53ea\u6709\u4fee\u6539\u8fc7\u7684\u6570\u636e\u624d\u4f1aUpdate"),(0,n.kt)("h4",{id:"2331-\u7406\u8bba\u57fa\u7840"},"2.3.3.1 \u7406\u8bba\u57fa\u7840"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7406\u8bba\u4e0a\u662f\u4e00\u4e2a\u7eaf\u51fd\u6570\uff0c\u5373\u5982\u679c\u8f93\u5165\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8f93\u51fa\u4e5f\u4e0d\u4f1a\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76d1\u6d4b\u8f93\u5165\uff0c\u53ea\u8981\u8f93\u5165\u7684\u503c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5bf9\u5176\u76f8\u5173\u7684\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5f53\u7136\u8fd9\u91cc\u52a8\u753b\u662f\u4e2a\u4f8b\u5916\uff0c\u4ee5\u53ca\u4e00\u4e9b\u81ea\u884c\u5b9a\u4e49\u8de8\u5e27\u8ba1\u7b97\u903b\u8f91\u7684\u7ec4\u4ef6"),"\uff0c\u6240\u4ee5\u8fd9\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u7684\u5c5e\u6027\u8fdb\u884c\u8bbe\u7f6e\uff0c\u8981\u6c42\u662f\u5426\u5bf9\u8f93\u5165\u8fdb\u884c\u76d1\u6d4b\uff0c\u4ee5\u9a71\u52a8\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".ChangedDriven(True)\n")),(0,n.kt)("p",null,"\u5f53\u7136\u53c2\u89c12.2.3.3\u8282\u53ef\u89c1\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u6240\u6709\u8de8\u5e27\u72b6\u6001\u770b\u505a\u662fdt\u7684\u51fd\u6570\uff0c\u9700\u8981\u5728\u6bcf\u5e27\u8fdb\u884c\u91cd\u590d\u8ba1\u7b97\uff0c\u6240\u4ee5\u7ec4\u4ef6\u51fd\u6570\u672c\u8eab\u4ecd\u7136\u662f\u7eaf\u51fd\u6570\uff0c\u8fd9\u91cc\u5b9e\u8d28\u4e0a\u662f\u5c06dt\u4e5f\u770b\u505a\u4e86\u4e00\u4e2a \u8f93\u5165\u53c2\u6570\uff0c\u800c\u5176\u4ed6\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u4e0d\u4f1a\u4f7f\u7528\u7ec4\u4ef6\u53c2\u6570\u7684\u3002\u6240\u4ee5\u8fd9\u91cc\u5c06\u7ec4\u4ef6\u5c5e\u6027\u540d\u6539\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".UseDt(True)\n")),(0,n.kt)("p",null,"\u53ef\u80fd\u66f4\u5408\u9002\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u8fd9\u91cc\u8868\u9762\u4e0a\u770b\uff0c\u597d\u50cf\u53ef\u4ee5\u901a\u8fc7\u51fd\u6570\u662f\u5426\u5f15\u7528dt\u8fdb\u884c\u81ea\u52a8\u63a8\u5bfc\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u4f8b\u5982\u51fd\u6570\u53ea\u662f\u4f7f\u7528dt\u6765\u751f\u6210\u968f\u673a\u6570\uff0c\u5e76\u4e0d\u662f\u8ba1\u7b97\u8de8\u5e27\u72b6\u6001\u3002\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4e0d\u80fd\u5bf9dt\u7684\u4f7f\u7528\u6709\u4efb\u4f55\u5047\u8bbe\u3002")),(0,n.kt)("h4",{id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6"},"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6"),(0,n.kt)("p",null,"\u603b\u7684\u539f\u5219\uff0c\u8f93\u5165\u53d8\u5316\u4e86\u624d\u4f1a\u5bfc\u81f4\u7ec4\u4ef6\u6267\u884c\u8fd9\u4ef6\u4e8b\u60c5\u662f\u4e0d\u9700\u8981\u8ba9\u5f00\u53d1\u8005\u611f\u77e5\u7684\uff0c\u66f4\u4e0d\u5e94\u8be5\u9700\u8981\u5b83\u6765\u63a7\u5236\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u662f\u5b8c\u5168\u80fd\u591f\u8ba1\u7b97/\u63a8\u5bfc\u51fa\u8fd9\u4e00\u5207\u7684\u3002\u5f53\u7136\uff0c\u52a8\u753b\u9664\u5916\uff0c\u6216\u8005\u66f4\u786e\u5207\u5730\u8bf4\uff0c\u662f\u90a3\u4e9b\u4e0d\u4f9d\u8d56\u4e8e\u8f93\u5165\uff0c\u800c\u81ea\u884c\u5b9a\u4e49\u4e86\u79c1\u6709\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u6240\u4ee5\u5b9a\u4e49\u79c1\u6709\u53d8\u91cf\uff0c\u5176\u76ee\u7684\u5c31\u662f\u5728\u76f8\u540c\u7684\u8f93\u5165\u4e0b\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u5c31\u662f\u4f20\u7edfOOP\u4e2d\u72b6\u6001\u7684\u5f71\u54cd\u3002\u53c2\u89c12.2.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u5728Bevy\u4e2d\uff0c\u5b83\u4f9d\u8d56\u4e8e\u7531\u7a0b\u5e8f\u5458\u51b3\u5b9a\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5426\u5bf9\u67d0\u4e2aComponent\u9020\u6210\u4e86\u4fee\u6539\uff0c\u4ed6\u9700\u8981\u6bcf\u4e2a\u7ec4\u4ef6\u4f7f\u7528mut\u5173\u952e\u5b57\u7684\u67e5\u8be2\uff0c\u8fd9\u6837\u7cfb\u7edf\u5c31\u53ef\u4ee5\u5224\u65ad\u5176\u503c\u662f\u5426\u53ef\u80fd\u88ab\u4fee\u6539\uff0c\u4f46\u662f\u4e0d\u53ef\u4fee\u6539\u7684\u901a\u5e38\u662f\u5c11\u6570\u3002"),(0,n.kt)("p",null,"\u8ddfUnity\u4e0d\u4e00\u6837\uff0c\u6211\u4eec\u4e0d\u80fd\u628aVersion Number\u66b4\u9732\u5728Query\u4e2d\u8ba9\u5f00\u53d1\u8005\u53bb\u6bd4\u8f83\uff0c\u56e0\u4e3a\u8fd9\u672c\u53ef\u4ee5\u81ea\u52a8\u8fdb\u884c\u7684\u3002\u4f55\u51b5\u5728Query\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u4ecd\u7136\u8fdb\u53bb\u4e86\uff0c\u53ea\u662f\u8fdb\u53bb\u4e4b\u540e\u624d\u53d1\u73b0\u4e0d\u9700\u8981\u8ba1\u7b97\u3002\u8fd9\u4e2a\u5224\u65ad\u7684\u56fa\u5b9a\u7ed3\u6784\u5b8c\u5168\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u53bb\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,"CreationVM\u8fd0\u884c\u65f6\u9700\u8981\u5bf9\u6bcf\u4e2a\u5757\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5982\u679c\u53d1\u73b0\u6ca1\u6709\u4fee\u6539\u5e76\u4e14\u4e0d\u662f\u52a8\u753b\u7c7b\u578b\u7684\uff0c\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a"},"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a"),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u5197\u4f59\u7684\u5b58\u5728\uff0c\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u5f53\u8f93\u5165\u53d1\u751f\u6539\u53d8\u7684\u65f6\u5019\u624d\u8fdb\u884c\u8ba1\u7b97\uff0c\u53ef\u80fd\u4f1a\u5b58\u5728\u5927\u91cf\u91cd\u590d\u8ba1\u7b97\u3002\u6b64\u5916\uff0c\u5373\u4f7f\u662f\u4e0d\u540c\u7684\u8f93\u5165\uff0c\u4e5f\u53ef\u80fd\u5b58\u5728\u76f8\u540c\u7684\u8f93\u51fa\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u4e0d\u80fd\u50cfUnity/Bevy\u90a3\u6837\u4ec5\u51ed\u7ec4\u4ef6\u662f\u5426\u5bf9\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u6765\u8fdb\u884c\u5224\u65ad\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5199\u64cd\u4f5c\u8fd9\u79cd\u903b\u8f91\u662f\u4e0d\u53d8\u7684\uff0c\u610f\u5473\u7740\u5982\u679c\u5b58\u5728\u5927\u91cf\u7684\u6d6a\u8d39\uff0c\u90a3\u4e48\u8fd9\u79cd\u6d6a\u8d39\u4f1a\u4e00\u76f4\u6301\u7eed\uff0c\u8fd9\u672c\u8eab\u662f\u4e00\u79cd\u7ed3\u6784\u6027\u7279\u5f81\uff0c\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u62c9\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bcf\u4e2a\u503c\u8fdb\u884c\u5224\u522b\u6765\u51b3\u5b9a\u5176\u5c5e\u6027\u662f\u5426\u53d1\u751f\u53d8\u66f4\uff0c\u4f46\u7531\u4e8e\u7ec4\u4ef6\u5904\u5728\u5e76\u884c\u8ba1\u7b97\u4e2d\uff0c\u4e0d\u80fd\u7edf\u4e00\u5bf9\u4e00\u4e2a\u5757\u8bbe\u7f6e\u4e00\u4e2aisChanged\u53d8\u91cf\uff0c\u4e3a\u4e86\u907f\u514d\u5bf9\u5171\u4eab\u53d8\u91cf\u7684\u5199\u64cd\u4f5c\uff0c\u9700\u8981\u4f7f\u7528\u548c\u7ec4\u4ef6\u6570\u636e\u4e00\u6837\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u53ef\u4ee5\u9488\u5bf9\u6bcf\u4e2a\u5757\u4e2d\u7684\u6bcf\u4e2a\u53ef\u5199\u5c5e\u6027\u8bbe\u7f6e\u4e00\u4e2a\u901a\u7528\u7684\u6574\u6570\u6570\u7ec4\uff0c\u5f53\u7136\u8fd8\u662fSOA\u7684\u5f62\u5f0f\uff0c\u4f7f\u5f97\u5b83\u4eec\u597d\u50cf\u7ec4\u4ef6\u7684\u53e6\u5916\u4e00\u4e2a\u5c5e\u6027\uff0c\u53ea\u662f\u8fd9\u4e2a\u5c5e\u6027\u662f\u7531\u5757\u8fdb\u884c\u7ba1\u7406\u7684\uff0c\u800c\u5b9e\u4f53\u6216\u8005\u7ec4\u4ef6\u662f\u611f\u77e5\u4e0d\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u51fd\u6570\u5bf9\u8f93\u5165\u503c\u8fdb\u884c\u5199\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u7f16\u8bd1\u5668\u4f1a\u81ea\u52a8\u4e3a\u673a\u5668\u7801\u52a0\u5165\u4e00\u6bb5\u51fd\u6570\uff0c\u8fd9\u7aef\u51fd\u6570\u5176\u5b9e\u505a\u4e86\u4e00\u4e2a\u5224\u65ad\uff1a\u5982\u679c\u8d4b\u503c\u7684\u503c\u4e0e\u539f\u6765\u7684\u503c\u4e0d\u4e00\u6837\uff0c\u5219\u5bf9\u5e94\u5b9e\u4f53\u5bf9\u8c61\u5bf9\u5e94\u7684\u503c\u4e3a1\uff0c\u5426\u5219\u4e3a 0\u3002\u6240\u4ee5\u6bd4\u5982\u4e00\u4e2a\u5305\u542b8\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u7684\u5757\uff0c\u5176\u8ba1\u7b97\u5b8c\u4e4b\u540e\u7684\u503c\u5982\u679c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u5219\u503c\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"00000000\n")),(0,n.kt)("p",null,"\u5982\u679c\u5176\u4e2d\u7684\u4efb\u4f55\u503c\u4e3a1\uff0c\u5219\u610f\u5473\u7740\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u6240\u6709\u540e\u7eed\u4f9d\u8d56\u4e8e\u8be5\u5c5e\u6027\u7684\u7ec4\u4ef6\u90fd\u5e94\u8be5\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5bf9\u5e94\u7684\u8c03\u5ea6\u5668\u5e94\u8be5\u628a\u8fd9\u4e2a\u6539\u53d8\u7684\u72b6\u6001\u4f20\u9012\u7ed9\u6240\u6709\u5f15\u7528\u8be5\u5c5e\u6027\u7684\u5757\u3002\u7136\u540e\u5728\u8fd9\u4e9b\u5757\u8ba1\u7b97\u7684\u65f6\u5019\uff0c\u9996\u5148\u8fdb\u884c\u5224\u65ad\uff0c\u9664\u975e\u6240\u6709\u503c\u90fd\u4e3a0\uff0c\u5426\u5219\u6574\u4e2a\u5757\u90fd\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u5757\u53ea\u9700\u8981\u4fdd\u5b58\u4e00\u4e2a\u6570\u5b57\uff0c\u901a\u8fc7\u4f7f\u7528\u7279\u6b8a\u7684\u5bf9\u4f4d\u8fdb\u884c\u64cd\u4f5c\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u6211\u4eec\u751a\u81f3\u6bcf\u4e2a\u5bf9\u8c61\u53ea\u9700\u8981\u5360\u7528\u4e00\u4e2abit\u7684\u5b58\u50a8\uff0c\u8fd9\u4e2a\u5927\u5c0f\u8ddfUnity DOTS\u7684Version Number\u5360\u7528\u7684\u5b58\u50a8\u5dee\u4e0d\u591a\uff0c\u4f46\u662f\u5176\u539f\u7406\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u5e76\u4e14\u57fa\u4e8e\u503c\uff08\u800c\u4e0d\u662f\u903b\u8f91\uff09\u7684\u6bd4\u8f83\u66f4\u53ef\u9760\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u7684\u9002\u914d\uff0c\u6027\u80fd\u5f00\u9500\u4e5f\u51e0\u4e4e\u53ef\u4ee5\u7701\u7565\u3002"),(0,n.kt)("h4",{id:"2334-version--tracking"},"2.3.3.4 Version Tracking"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"version-tracking",src:l(4305).Z,width:"2360",height:"1318"})),(0,n.kt)("p",null,"Change tracking is a hard problem to solve efficiently and robustly. It\u2019s easier to make it a responsibility of the content creators. They define what is static and what is dynamic. Unity doesn\u2019t want to add complexity to content creators."),(0,n.kt)("p",null,"Fortunately the DOTS architecture has a nice solution for this problem. DOTS queries define read and write access properties to each component included in the query. This helps with scheduling, as multiple reads of the same data are race free and can be executed concurrently."),(0,n.kt)("p",null,"Since the write access is tracked explicitly and misuse is guarded by the compiler, we know which component arrays in each chunk were potentially modified."),(0,n.kt)("p",null,"To implement a \u201cfree\u201d data version tracking system, we add a version number to each component array in each chunk. When write access is requested, the array version number is bumped to the global version counter, which is monotonically increasing. Systems store previously seen global version counter value. This value can be used as version change filter in future queries, to limit the query over chunks that have changed since the system saw them previously. This change tracking system is more robust than dirty flags and doesn\u2019t require any additional bookkeeping."),(0,n.kt)("p",null,"We rely heavily on DOTS change tracking in the hybrid renderer."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Version numbers")),(0,n.kt)("p",null,"Version numbers (also known as generations) detect potential changes. You can use them to implement efficient optimization strategies, such as to skip processing when data hasn't changed since the last frame of the application. It's useful to perform quick version checks on entities to improve the performance of your application."),(0,n.kt)("p",null,"This page outlines all of the different version numbers ECS uses, and the conditions that causes them to change."),(0,n.kt)("p",null,"All version numbers are 32-bit signed integers. They always increase unless they wrap around: signed integer overflow is defined behavior in C#. This means that to compare version numbers, you should use the (in)equality operator, not relational operators."),(0,n.kt)("p",null,"For example, the correct way to check if VersionB is more recent than VersionA is to use the following:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"bool VersionBIsMoreRecent = (VersionB - VersionA) > 0;\n")),(0,n.kt)("p",null,"There is usually no guarantee how much a version number increases by."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityId.Version")),(0,n.kt)("p",null,"An ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is made of an index and a version number. Because ECS recycles indices, the version number is increased in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager")," every time the entity is destroyed. If there is a mismatch in the version numbers when an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is looked up in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager"),", it means that the entity referred to doesn\u2019t exist anymore."),(0,n.kt)("p",null,"For example, before you fetch the position of the enemy that a unit is tracking via an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId"),", you can call ",(0,n.kt)("inlineCode",{parentName:"p"},"ComponentDataFromEntity.Exists"),". This uses the version number to check if the entity still exists."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"World.Version")),(0,n.kt)("p",null,"ECS increases the version number of a World every time it creates or destroys a manager (i.e. system)."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityDataManager.GlobalVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," is increased before every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"System.LastSystemVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion")," takes the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," after every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion[]"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Chunk.ChangeVersion")),(0,n.kt)("p",null,"For each component type in the archetype, this array contains the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," at the time the component array was last accessed as writeable within this chunk. This does not guarantee that anything has changed, only that it might have changed."),(0,n.kt)("p",null,"You can never access shared components as writeable, even if there is a version number stored for those too: it serves no purpose."),(0,n.kt)("p",null,"When you use the ",(0,n.kt)("inlineCode",{parentName:"p"},"WithChangeFilter()")," function in an ",(0,n.kt)("inlineCode",{parentName:"p"},"Entities.ForEach")," construction, ECS compares the ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion")," for that specific component to ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),", and it only processes chunks whose component arrays have been accessed as writeable after the system last started running."),(0,n.kt)("p",null,"For example, if the amount of health points of a group of units is guaranteed not to have changed since the previous frame, you can skip checking if those units should update their damage model."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityManager.m_ComponentTypeOrderVersion[]")),(0,n.kt)("p",null,"For each non-shared component type, ECS increases the version number every time an iterator involving that type becomes invalid. In other words, anything that might modify arrays of that type (not instances)."),(0,n.kt)("p",null,"For example, if you have static objects that a particular component identifies, and a per-chunk bounding box, you only need to update those bounding boxes if the type order version changes for that component."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SharedComponentDataManager.m_SharedComponentVersion[]")),(0,n.kt)("p",null,"These version numbers increase when any structural change happens to the entities stored in a chunk that reference the shared component."),(0,n.kt)("p",null,"For example, if you keep a count of entities per shared component, you can rely on that version number to only redo each count if the corresponding version number changes."),(0,n.kt)("h4",{id:"2335-bevys-change-detection"},"2.3.3.5 Bevy's Change Detection"),(0,n.kt)("p",null,"Bevy allows you to easily detect when data is changed. You can use this to perform actions in response to changes."),(0,n.kt)("p",null,"One of the main use cases is optimization \u2013 avoiding unnecessary work by only doing it if the relevant data has changed. Another use case is triggering special actions to occur on changes, like configuring something or sending the data somewhere."),(0,n.kt)("p",null,"Filtering"),(0,n.kt)("p",null,"You can make a ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html"},"query")," that only yields entities if specific ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/ec.html#components"},"components")," on them have been modified."),(0,n.kt)("p",null,"Use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Added")),(0,n.kt)("p",{parentName:"li"},": detect new component instances"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"if the component was added to an existing entity"),(0,n.kt)("li",{parentName:"ul"},"if a new entity with the component was spawned"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Changed")),(0,n.kt)("p",{parentName:"li"},": detect component instances that have been changed"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"triggers when the component is accessed mutably"),(0,n.kt)("li",{parentName:"ul"},"also triggers if the component is newly-added (as per ",(0,n.kt)("a",{parentName:"li",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added")),")")))),(0,n.kt)("p",null,"(If you want to react to removals, see the page on ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/removal-detection.html"},"removal detection"),". It works differently and is much trickier to use.)"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},'/// Print the stats of friendly players when they change\nfn debug_stats_change(\n query: Query<\n // components\n (&Health, &PlayerXp),\n // filters\n (Without, Or<(Changed, Changed)>), \n >,\n) {\n for (health, xp) in query.iter() {\n eprintln!(\n "hp: {}+{}, xp: {}",\n health.hp, health.extra, xp.0\n );\n }\n}\n\n/// detect new enemies and print their health\nfn debug_new_hostiles(\n query: Query<(Entity, &Health), Added>,\n) {\n for (entity, health) in query.iter() {\n eprintln!("Entity {:?} is now an enemy! HP: {}", entity, health.hp);\n }\n}\n')),(0,n.kt)("p",null,"Checking"),(0,n.kt)("p",null,"If you want to access all the entities, as normal, regardless of if they have been modified, but you just want to check the status, you can use the special ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.ChangeTrackers.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ChangeTrackers"))," query parameter."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Make sprites flash red on frames when the Health changes\nfn debug_damage(\n mut query: Query<(&mut Sprite, ChangeTrackers)>,\n) {\n for (mut sprite, tracker) in query.iter_mut() {\n // detect if the Health changed this frame\n if tracker.is_changed() {\n sprite.color = Color::RED;\n } else {\n // extra check so we don't mutate on every frame without changes\n if sprite.color != Color::WHITE {\n sprite.color = Color::WHITE;\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"This is useful for processing all entities, but doing different things depending on if they have been modified."),(0,n.kt)("p",null,"For ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resources"),", change detection is provided via methods on the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.Res.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Res")),"/",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.ResMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ResMut"))," system parameters."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn check_res_changed(\n my_res: Res,\n) {\n if my_res.is_changed() {\n // do something\n }\n}\n\nfn check_res_added(\n // use Option, not to panic if the resource doesn't exist yet\n my_res: Option>,\n) {\n if let Some(my_res) = my_res {\n // the resource exists\n\n if my_res.is_added() {\n // it was just added\n // do something\n }\n }\n}\n")),(0,n.kt)("p",null,"Note that change detection cannot currently be used to detect ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," changes (via the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/schedule/struct.State.html"},(0,n.kt)("inlineCode",{parentName:"a"},"State"))," ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resource"),") (",(0,n.kt)("a",{parentName:"p",href:"https://github.com/bevyengine/bevy/issues/2343"},"bug"),")."),(0,n.kt)("p",null,"What gets detected"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Changed.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Changed"))," detection is triggered by ",(0,n.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/stable/std/ops/trait.DerefMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"DerefMut")),". Simply accessing components via a mutable query, without actually performing a ",(0,n.kt)("inlineCode",{parentName:"p"},"&mut")," access, will ",(0,n.kt)("em",{parentName:"p"},"not")," trigger it."),(0,n.kt)("p",null,"This makes change detection quite accurate. You can rely on it to optimize your game's performance, or to otherwise trigger things to happen."),(0,n.kt)("p",null,"Also note that when you mutate a component, Bevy does not track if the new value is actually different from the old value. It will always trigger the change detection. If you want to avoid that, simply check it yourself:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn update_player_xp(\n mut query: Query<&mut PlayerXp>,\n) {\n for mut xp in query.iter_mut() {\n let new_xp = maybe_lvl_up(&xp);\n\n // avoid triggering change detection if the value is the same\n if new_xp != *xp {\n *xp = new_xp;\n }\n }\n}\n")),(0,n.kt)("p",null,"Change detection works on a per-",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/systems.html"},"system")," granularity, and is reliable. A system will not detect changes that it made itself, only those done by other systems, and only if it has not seen them before (the changes happened since the last time it ran). If your system only runs sometimes (such as with ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," or ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/run-criteria.html"},"run criteria"),"), you do ",(0,n.kt)("em",{parentName:"p"},"not")," have to worry about missing changes."),(0,n.kt)("p",null,"Beware of frame delay / 1-frame-lag. This can occur if Bevy runs the detecting system before the changing system. The detecting system will see the change the next time it runs, typically on the next frame update."),(0,n.kt)("p",null,"If you need to ensure that changes are handled immediately / during the same frame, you can use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/system-order.html"},"explicit system ordering"),"."),(0,n.kt)("p",null,"However, when detecting component additions with ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added"))," (which are typically done using ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/commands.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Commands")),"), this is not enough; you need ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/stages.html"},"stages"),"."),(0,n.kt)("h3",{id:"234-\u7f16\u8bd1"},"2.3.4 \u7f16\u8bd1"),(0,n.kt)("p",null,"\u7531\u4e8eSystem\u662f\u4e0d\u4f9d\u8d56\u4e8e\u6570\u636e\u53ca\u6570\u636e\u7ed3\u6784\u7684\uff0c\u5b83\u53ea\u5305\u542b\u4e00\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\uff0c\u6bcf\u4e2aSystem\u4f7f\u7528\u7684\u6240\u6709\u6570\u636e\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\u8fdb\u884c\u67e5\u627e\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u53ea\u662f\u8ba1\u7b97\u4e86\u6bcf\u4e2a\u53d8\u91cf\u7684\u4e00\u4e2a\u7d22\u5f15\u5730\u5740\uff0c\u901a\u8fc7\u5806\u800c\u4e0d\u662f\u5806\u6808\u6307\u9488\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u5f00\u53d1\u5b8c\u6210\u4e4b\u540e\u5b83\u7684\u7f16\u8bd1\u5de5\u4f5c\u5c31\u7ed3\u675f\u4e86\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5b9e\u9645\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5b9e\u4f53\uff0c\u4e91\u7aef\u4f1a\u6839\u636e\u8fd9\u4e2a\u5b9e\u4f53\u914d\u7f6e\uff08\u5bf9\u7ec4\u4ef6\u7684\u5f15\u7528\uff09\uff0c\u5bf9\u5b9e\u4f53\u7684\u6570\u636e\u8fdb\u884c\u7ec4\u7ec7\uff0c\u5b83\u4f1a\u6839\u636eSystem\u5bf9\u6570\u636e\u7684\u4f7f\u7528\u5b9a\u4e49\uff0c\u5c06\u8fd9\u4e9b\u6570\u636e\u7cbe\u5fc3\u7ec4\u7ec7\u5728Creation Table\u4e2d\uff0c\u7136\u540e\u518d\u5c06\u9002\u5f53\u7684\u6570\u7ec4\u53ca\u5176\u7d22\u5f15\u53d1\u9001\u7ed9System\u7684\u4ee3\u7801\u8fdb\u884c\u6267\u884c\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7f16\u8f91\u5668Reality Create\u4e2d\uff0c\u5f00\u53d1\u8005\u6bcf\u5199\u5b8c\u4e00\u4e2a\u7ec4\u4ef6\uff08\u4f8b\u5982\u4e00\u4e2aSystem\uff09\u90fd\u4f1a\u8fdb\u884c\u7f16\u8bd1\uff0c\u9664\u975e\u4ed6\u518d\u6b21\u4fee\u6539\u7ec4\u4ef6\u6e90\u4ee3\u7801\uff0c\u5426\u5219\u4e0d\u9700\u8981\u518d\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c5e\u4e8e\u4e00\u79cdAOT\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7528\u6237\uff0c\u5b83\u901a\u5e38\u76f4\u63a5\u5728Reality World app\u4e2d\u8fdb\u884c\u64cd\u4f5c\uff0cTA\u505a\u7684\u4e8b\u60c5\u4e3b\u8981\u662f\u4fee\u6539\u5b9e\u4f53\u7684\u914d\u7f6e\u6570\u636e\uff0c\u5f53\u8fd9\u4e9b\u6570\u636e\u53d1\u751f\u4fee\u6539\u4e4b\u540e\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f1a\u6d89\u53ca\u4ee3\u7801\u91cd\u65b0\u7f16\u8bd1\uff0c\u53ea\u6709Creation Table\u5bf9\u6570\u636e\u7684\u5185\u5b58\u5e03\u5c40\u8fdb\u884c\u91cd\u65b0\u8c03\u6574\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5c3d\u7ba1\u6574\u4e2a\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u770b\u8d77\u6765\u5f88\u590d\u6742\uff0c\u5f97\u76ca\u4e8e\u8fd9\u79cd\u6570\u636e\u5206\u79bb\u7684\u673a\u5236\uff0c\u7f16\u8bd1\u903b\u8f91\u76f8\u5bf9\u8fd8\u662f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("h4",{id:"2341-aot"},"2.3.4.1 AOT"),(0,n.kt)("h4",{id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"},"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u865a\u62df\u673a\u5185\u90e8\u7684\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f\u662f\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4fee\u6539\u7ec4\u4ef6\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u4f4d\u7f6e\uff0c\u6309\u7167\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u8fdb\u884c\u5b58\u50a8\uff0c\u8fd9\u6837\u7ec4\u4ef6\u6307\u4ee4\u7684\u52a0\u8f7d\u5c06\u80fd\u591f\u5145\u5206\u5229\u7528\u7f13\u5b58\u7279\u6027\uff0c\u8fdb\u4e00\u6b65\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"},"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"),(0,n.kt)("p",null,"\u6709\u4e9b\u5ba2\u6237\u7aef\uff0c\u5982iOS\u5e76\u4e0d\u6c38\u7eed\u76f4\u63a5\u52a0\u8f7d\u673a\u5668\u7801\uff0c\u8fd9\u65f6\u5019\u4f1a\u9000\u5316\u4e3a\u6267\u884c\u5b57\u8282\u7801\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u5df2\u7ecf\u5173\u4e8e\u7ec4\u4ef6\u548c\u6570\u636e\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u5bf9\u7aef\u4fa7\u7684\u5b57\u8282\u7801\u865a\u62df\u673a\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u7aef\u4fa7\u53ea\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u903b\u8f91\uff0c\u6838\u5fc3\u3001\u590d\u6742\u7684\u8ba1\u7b97\u903b\u8f91\u8fd8\u662f\u5728\u540e\u7aef\u8fdb\u884c\u8ba1\u7b97\uff0c\u6240\u4ee5\u6027\u80fd\u5f71\u54cd\u5e76\u4e0d\u5927\u3002\u56e0\u4e3a\u7aef\u4fa7\u5176\u4ed6\u903b\u8f91\u5982\u6e32\u67d3\u548c\u7269\u7406\u6a21\u62df\uff0c\u4ecd\u7136\u662fC++\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\uff0c\u56e0\u4e3a\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\u4e86\u7c7b\u578b\u53ca\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u5b83\u4eec\u9700\u8981\u94fe\u63a5\u5728\u4e00\u8d77\u3002\u867d\u7136\u4e3a\u4e86\u5b9e\u73b0\u5982\u589e\u91cf\u66f4\u65b0\u7b49\uff0c\u80fd\u591f\u907f\u514d\u6539\u52a8\u4e00\u4e2a\u95ee\u9898\u5c31\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u7cfb\u7edf\uff0c\u4f46\u662f\u94fe\u63a5\u8fc7\u7a0b\u662f\u7701\u4e0d\u4e86\u7684\uff0c\u94fe\u63a5\u7684\u8fc7\u7a0b\u5373\u662f\u628a\u5404\u4e2a\u6e90\u4ee3\u7801\u4e2d\u76f8\u4e92\u5f15\u7528\u7684\u90e8\u5206\u94fe\u63a5\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u7684\u673a\u5236\u5bf9\u4e8e\u5927\u578b\u5b9e\u65f6\u7cfb\u7edf\u7684\u9650\u5236\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u52a0\u4e86\u542f\u52a8\u65f6\u7684\u52a0\u8f7d\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u5f97\u7a0b\u5e8f\u89c4\u6a21\u5f88\u96be\u4f38\u7f29\uff0c\u56e0\u4e3a\u66f4\u5927\u89c4\u6a21\u7684\u7a0b\u5e8f\u610f\u5473\u7740\u66f4\u5927\u89c4\u6a21\u7684\u94fe\u63a5\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\uff0c\u5982\u679c\u94fe\u63a5\u6587\u4ef6\u589e\u591a\uff0c\u5f88\u96be\u7ba1\u7406\u5230\u5e95\u8981\u52a0\u8f7d\u90a3\u4e9b\u52a8\u6001\u5e93\uff0c\u5982\u679c\u6bcf\u4e2a\u52a8\u6001\u5e93\u53ea\u4f7f\u7528\u4e00\u70b9\u4fe1\u606f\uff0c\u90a3\u7cfb\u7edf\u5185\u5b58\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u6d6a\u8d39\u3002")),(0,n.kt)("p",null,"\u867d\u7136\u9759\u6001\u7c7b\u578b\u7684\u8bed\u8a00\u5176\u94fe\u63a5\u8fc7\u7a0b\u53ea\u9700\u8981\u53d1\u751f\u4e00\u6b21\uff0c\u4f46\u662f\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u8fd9\u6837\u7684\u94fe\u63a5\u8fc7\u7a0b\u9700\u8981\u5728\u52a0\u8f7d\u7684\u65f6\u5019\u6267\u884c\uff0c\u8fd9\u589e\u52a0\u4e86\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u52a0\u8f7d\u65f6\u7684\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u89e3\u51b3\u5927\u578b\u7cfb\u7edf\u7684\u52a8\u6001\u89e3\u91ca\u95ee\u9898\uff0c\u6211\u4eec\u5fc5\u987b\u8981\u8981\u80fd\u591f\u5c06\u7a0b\u5e8f\u5206\u6210\u5f88\u5c0f\u7684\u788e\u7247\uff0c\u5e76\u4e14\u53bb\u9664\u76f8\u4e92\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4ece\u800c\u5f7b\u5e95\u53bb\u9664\u6389\u94fe\u63a5\u8fd9\u4e2a\u73af\u5883"),"\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u9700\u8981\u505a\u5230\u51e0\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u4e4b\u95f4\u6ca1\u6709\u76f8\u4e92\u7c7b\u578b\u5f15\u7528\uff0c\u6216\u8005\u8bf4\u6e90\u4ee3\u7801\u6ca1\u6709\u590d\u6742\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u53ea\u6709\u57fa\u672c\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8bbf\u95ee\u7684\u6570\u636e\u5730\u5740\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u5206\u914d\uff0c\u5373\u4e0d\u9700\u8981\u901a\u8fc7\u7f16\u8bd1\u5668\u5b9e\u73b0\u6307\u5b9a\u548c\u8ba1\u7b97\u6570\u636e\u5730\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u6570\u636e\u7684\u52a8\u6001\u5206\u914d\u8981\u8db3\u591f\u7b80\u5355\uff0c\u5426\u5219\u4e5f\u4f1a\u589e\u52a0\u6027\u80fd\u5f00\u652f\uff0c\u53c2\u89c1Creation Table\u76f8\u5173\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8981\u8db3\u591f\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u5c3d\u53ef\u80fd\u52a0\u8f7d\u66f4\u5c11\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u6700\u7ec8\uff0cRealityIS\u51e0\u4e4e\u53ef\u4ee5\u5b8c\u5168\u629b\u5f03\u52a8\u6001\u94fe\u63a5\u8fd9\u4e00\u90e8\u5206\u7684\u8ba1\u7b97\u8fc7\u7a0b\u3002"),(0,n.kt)("h3",{id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"},"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u7ef4\u62a4\u4e00\u4e2a\u8868\uff0c\u8bb0\u5f55\u6240\u6709\u5f53\u524d\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u5e76\u6839\u636e\u7ec4\u4ef6\u4e2d\u7684\u6570\u636e\u5b9a\u4e49\uff0c\u7ba1\u7406\u5b9e\u4f53\u5bf9\u8c61\u5185\u5b58\u6570\u636e\u7684\u5e03\u5c40\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u7b49\u4e8b\u60c5\u3002"),(0,n.kt)("h4",{id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"},"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6216\u8005Creation\uff0c\u9996\u5148\u9700\u8981\u6839\u636e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u8ba1\u7b97\u5b83\u4eec\u7684\u6267\u884c\u987a\u5e8f\u3002\u57fa\u4e8e\u4e00\u4e0b\u7684\u539f\u7406\u53ef\u4ee5\u8ba1\u7b97\u51fa\u8fd9\u4e2a\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u8f93\u5165\u548c\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u90fd\u6765\u81ea\u7b26\u53f7\u8868")),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u5173\u7cfb\uff0c\u53ef\u4ee5\u8ba1\u7b97\u51fa\u6240\u6709\u7ec4\u4ef6\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6309\u7167\u8fd9\u6837\u7684\u987a\u5e8f\u6267\u884c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u4fdd\u8bc1\u65f6\u5e8f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6709\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u5904\u7406\u590d\u6742\u7684\u987a\u5e8f\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u590d\u6742\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u987a\u5e8f\u51e0\u4e4e\u662f\u4e0d\u53ef\u7ef4\u62a4\u7684")),(0,n.kt)("p",null,"\u5f88\u591a\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u91c7\u7528\u6d88\u606f\u673a\u5236\u6216\u8005\u54cd\u5e94\u5f0f\u7684\u65b9\u5f0f\uff0c\u5f88\u96be\u4fdd\u8bc1\u65f6\u5e8f\u7684\u95ee\u9898\uff0c\u800c\u65f6\u5e8f\u7684\u95ee\u9898\u53ef\u80fd\u4f1a\u5e26\u6765\u5f88\u591abug\u4ee5\u53ca\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u672c\u8d28\u4e0a\u662f\u5c06\u6d88\u606f\u5217\u8868\u8fdb\u884c\u7cbe\u5fc3\u7684\u7ec4\u7ec7\uff0c\u4f7f\u5f97\u4e8b\u4ef6\u7684\u5206\u53d1\u4e0d\u518d\u662f\u5f02\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"},"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"Actor\u6a21\u5f0f\u672c\u8eab\u662f\u4e0d\u9700\u8981\u4fdd\u5b58\u72b6\u6001\u7684\uff0c\u800c\u6e38\u620f\u4e2d\u7684\u6570\u636e\u9700\u8981\u6301\u4e45\u4fdd\u5b58\uff0c\u9664\u975e\u5bf9\u8c61\u88ab\u9500\u6bc1")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u521b\u5efa\u5bf9\u8c61\u5b9e\u9645\u4e0a\u662f\u521b\u5efa\u4e86\u4e00\u4e2a\u8ba1\u7b97\u56fe\uff0c\u53ea\u4e0d\u8fc7\u4e0e\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u8ba1\u7b97\u56fe\u76f8\u6bd4\uff0c\u5b83\u4eec\u7684\u8282\u70b9\u90fd\u5177\u6709\u5168\u5c40\u5c5e\u6027\uff0c\u4ece\u800c\u6839\u636e\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u8fdb\u884c\u63a8\u65ad\uff0c\u800cRealityIS\u9700\u8981\u6839\u636e\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u63a8\u65ad\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff0c\u6240\u6709Creation\u5185\u90e8\u7684\u6bcf\u4e2a\u5bf9\u8c61\u7684\u7ec4\u4ef6\u5f62\u6210\u4e00\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\uff0c\u591a\u4e2a\u5bf9\u8c61\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u5728\u5408\u5e76\u5728\u4e00\u4e2a\u7edf\u4e00\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u3002\u6700\u7ec8\u8fd0\u884c\u65f6\u6309\u7167\u8fd9\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\u7684\u987a\u5e8f\u8fdb\u884c\u8ba1\u7b97\u3002\u7531\u4e8e\u8981\u8003\u8651\u5e76\u884c\u6027\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5e94\u7684\u591a\u4e2a\u5bf9\u8c61\u65f6\u5e76\u884c\u8ba1\u7b97\u7684\uff0c\u56e0\u6b64\u6570\u636e\u7684\u7ec4\u7ec7\u4e5f\u662f\u4e0d\u4e00\u6837\u7684\u3002")),(0,n.kt)("p",null,"\u5728\u5224\u65ad\u591a\u4e2a\u5bf9\u8c61\u7684\u5e76\u884c\u6027\u65f6\u9700\u8981\u6ce8\u610f\uff0c\u53ea\u6709\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u4e8e\u76f8\u540c\u7684\u7b26\u53f7\u65f6\uff0c\u6211\u4eec\u624d\u8ba4\u4e3a\u5b83\u662f\u903b\u8f91\u4e0a\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\u7684\u3002\u5982\u679c\u4e00\u4e2a\u76f8\u540c\u7684\u7ec4\u4ef6\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u4f5c\u7528\u57df\u4e0d\u540c\u7684\u7b26\u53f7\uff0c\u5219\u5b83\u5e94\u8be5\u72ec\u7acb\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h4",{id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"},"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"),(0,n.kt)("p",null,"\u7531\u4e8e\u9700\u8981\u52a8\u6001\u8c03\u7528\u7ec4\u4ef6\u673a\u5668\u7801\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u8c03\u7528\u7684\u4ee3\u7801\u5e8f\u5217\u4e0d\u80fd\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u56e0\u6b64\u52a8\u6001\u7684\u811a\u672c\u4ee3\u7801\u662f\u65e0\u6cd5\u77e5\u9053\u7ec4\u4ef6\u51fd\u6570\u4fe1\u606f\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u77e5\u9053\u8be5\u600e\u4e48\u5c06\u5b9e\u4f53\u7684\u7ec4\u4ef6\u6570\u636e\u4f20\u9012\u5230\u7ec4\u4ef6\u51fd\u6570\u8c03\u7528\u6808\u4e0a\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u9700\u8981\u5b58\u50a8\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u7b7e\u540d\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ef\u4ee5\u76f4\u63a5\u636e\u6b64\u6784\u9020\u51fd\u6570\u8c03\u7528\u6808\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6574\u4e2a\u53c2\u6570\u4f20\u9012\u7684\u8fc7\u7a0b\u662f\u52a8\u6001\u7684\uff0c\u4f46\u662f\u5b83\u53ea\u6d89\u53ca\u5c0f\u6bb5\u6570\u636e\u7684\u590d\u5236\uff0c\u5927\u90e8\u5206\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u8ba1\u7b97\u5c31\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\uff0c\u5e76\u4e14\u662f\u6309\u7167\u673a\u5668\u7801\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u5176\u4e2d\u52a8\u6001\u7684\u4e00\u90e8\u5206\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u53ef\u80fd\u4f7f\u7528AOT\u5c06\u6240\u6709\u903b\u8f91\u4e8b\u5148\u7f16\u8bd1\uff0c\u53ea\u6709\u7ec4\u4ef6\u662f\u53ef\u4ee5\u7f16\u8bd1\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u4fdd\u8bc1\u4efb\u610f\u7684\u5e76\u53d1\u5206\u914d\uff0c\u5e76\u53d1\u7684\u7ba1\u7406\u90e8\u5206\u90fd\u662f\u5fc5\u987b\u52a8\u6001\u7684\uff0c\u8fd9\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002"),(0,n.kt)("h3",{id:"237-\u9690\u5f0f\u865a\u62df\u673a"},"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*"),(0,n.kt)("p",null,"\u53ea\u8981\u6709\u865a\u62df\u673a\u7684\u5b58\u5728\uff0c\u6e90\u4ee3\u7801\u90fd\u662f\u7f16\u8bd1\u4e3a\u67d0\u79cd\u5f62\u5f0f\u7684\u5b57\u8282\u7801\uff0c\u7136\u540e\u8fd9\u4e9b\u5b57\u8282\u7801\u5728\u865a\u62df\u673a\u4e0a\u6267\u884c\u3002\u7531\u4e8e\u5b57\u8282\u7801\u4e0d\u662f\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u8bfb\u53d6\u4e00\u6761\u4e00\u6761\u7684\u5b57\u8282\u7801\u8fdb\u884c\u89e3\u91ca\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u76f4\u63a5\u5bfc\u81f4\u4e00\u4e2a\u7ed3\u679c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u5e8f\u5217\u5b8c\u5168\u65e0\u6cd5\u88ab\u786c\u4ef6\u4f18\u5316\uff0c\u4f8b\u5982\u6307\u4ee4\u9884\u53d6\u7b49"))),(0,n.kt)("p",null,"\u786c\u4ef6\u53ea\u80fd\u8bc6\u522b\u865a\u62df\u673a\u4e2d\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u6307\u4ee4\uff0c\u800c\u865a\u62df\u673a\u901a\u5e38\u4e0d\u5305\u542b\u903b\u8f91\uff0c\u53ea\u6709\u4e00\u4e9b\u901a\u7528\u51fd\u6570\uff0c\u6240\u4ee5\u6574\u4e2a\u8ba1\u7b97\u4e2d\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\u6307\u4ee4\u4f1a\u5b58\u5728\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u6700\u6781\u7aef\u7684\u60c5\u51b5\u4e0b\uff0c\u6574\u4e2a\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u65e0\u6cd5\u7f13\u5b58\uff0c\u800c\u6bcf\u4e00\u4e2a\u6307\u4ee4\u7684\u6267\u884c\u90fd\u9700\u8981\u72ec\u7acb\u4ece\u5185\u5b58\u4e2d\u52a0\u8f7d\u6307\u4ee4\u5230\u5bc4\u5b58\u5668\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u811a\u672c\u903b\u8f91\u6e90\u4ee3\u7801\u4e2d\u5305\u542b\u5f88\u591a\u987a\u5e8f\u6307\u4ee4\uff0c\u786c\u4ef6\u4e5f\u65e0\u6cd5\u5f88\u597d\u7684\u9884\u53d6\uff0c\u56e0\u4e3a\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u865a\u62df\u673a\u4ee3\u7801\u5e76\u4e0d\u5305\u542b\u8fd9\u4e9b\u903b\u8f91\u6307\u4ee4\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u679c\u662f\u9759\u6001\u8bed\u8a00\uff0c\u5728\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\u5c06IR\u8f6c\u6362\u4e3a\u673a\u5668\u7801\u7684\u65f6\u5019\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u5176\u4e2d\u7684\u6bcf\u4e2a\u7b26\u53f7\u7684\u5730\u5740\u90fd\u8f6c\u6362\u4e3a\u6808\u4e2d\u7684\u4e00\u4e2a\u5730\u5740\uff0c\u800c\u6808\u9876\u6307\u9488\u7531\u7ef4\u6301\u7740\u4e00\u4e2a\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u4e2a\u4f4d\u7f6e\u7531\u8fd0\u884c\u65f6\u5b9e\u65f6\u5206\u914d\uff0c\u6808\u9876\u6307\u9488\u901a\u5e38\u4f1a\u88ab\u4fdd\u6301\u5728\u5bc4\u5b58\u5668\u4e2d\uff0c\u6240\u4ee5\u8bbf\u95ee\u901f\u5ea6\u5f88\u5feb\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4f7fCreation Script\u5b9e\u73b0\u7c7b\u578b\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"AOT\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u88ab\u5f53\u505a\u4e00\u4e2a\u51fd\u6570\uff0c\u7ec4\u4ef6\u4e2d\u8bbf\u95ee\u7684\u7b26\u53f7\u5168\u90e8\u88ab\u8f6c\u6362\u4e3a\u76f8\u5bf9\u4f4d\u7f6e\uff1b\u5176\u5b9e\u6bcf\u4e2a\u7ec4\u4ef6\u5b8c\u5168\u6309\u7167\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u9759\u6001\u7f16\u7a0b\u8bed\u8a00\u4e2d\u51fd\u6570\u7684\u65b9\u5f0f\u8fdb\u884c\u7f16\u8bd1\uff0c\u6bd4\u5982\u5206\u914d\u51fd\u6570\u8c03\u7528\u4e4b\u524d\u7684\u6808\u521d\u59cb\u5316\uff0c\u4ee5\u53ca\u7ed3\u675f\u540e\u6e05\u695a\u6808\u4e2d\u7684\u6570\u636e\u3002\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u6808\u4e2d\u7684\u6570\u636e\u7531\u865a\u62df\u673a\u5b9e\u65f6\u7684\u653e\u8fdb\u53bb\uff0c\u800c\u4e0d\u662f\u673a\u5668\u7801\u4e2d\u63d2\u5165\u7684\u4ee3\u7801\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u4f46\u662f\u4fdd\u6301\u540e\u9762\u51fd\u6570\u5bf9\u6808\u4e2d\u6570\u636e\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f\u4e00\u6837\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u865a\u62df\u673a\u9996\u5148\u5206\u914d\u6808\u4e2d\u7684\u6570\u636e\uff0c\u53ef\u80fd\u6d89\u53ca\u5c06Creation Table\u4e2d\u7684\u6570\u636e\u590d\u5236\u5230\u65b9\u6cd5\u6808\u4e2d\uff0c\u7136\u540e\u7ec4\u4ef6\u65b9\u6cd5\u4e2d\u7684\u673a\u5668\u7801\u5c31\u53ef\u4ee5\u6b63\u5e38\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u6267\u884c\u7ed3\u675f\u4e4b\u540e\uff0c\u865a\u62df\u673a\u9700\u8981\u5c06\u5176\u4e2d\u7684\u7ed3\u679c\u8bfb\u56de\u5230Creation Table\u4e2d\u5bf9\u5e94\u7684\u6570\u636e\u4e2d")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u9762\u4e24\u4e2a\u8fc7\u7a0b\uff0c\u53ef\u80fd\u65e0\u6cd5\u5728\u865a\u62df\u673a\u4e2d\u52a8\u6001\u51b3\u5b9a\uff0c\u56e0\u4e3a\u5176\u4e2d\u5305\u542b\u4e0d\u540c\u7684\u7d22\u5f15\uff0c\u540d\u79f0\u7b49\u7b49\uff0c\u53ef\u80fd\u8fd8\u9700\u8981\u9700\u8981\u8bb2\u76f8\u5e94\u7684\u4ee3\u7801\u7f16\u8bd1\u5230\u7ec4\u4ef6\u51fd\u6570\u7684\u9996\u90e8\u548c\u5c3e\u90e8\uff0c\u8ba9 \u5b83\u4eec\u81ea\u5df1\u6765\u51b3\u5b9a\u6267\u884c\u6808\u4e2d\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u8fd9\u91cc\u662f\u5426\u53ef\u4ee5\u8003\u8651\u80fd\u591f\u7701\u6389\u5411\u6808\u4e2d\u590d\u5236\u6570\u636e\u7684\u95ee\u9898\uff0c\u6539\u4e3a\u76f4\u63a5\u8bfb\u53d6Table\u4e2d\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u8fde\u7eed\uff0c\u4f46\u662f\u7531\u4e8e\u4e0d\u540c\u7ec4\u4ef6\u4f7f\u7528\u7684\u6807\u51c6\u7b26\u53f7\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u53d8\u91cf\u90fd\u8fde\u7eed\uff08\u50cf\u4e00\u4e2a\u65b9\u6cd5\u6808\u4e00\u6837\uff09\uff0c\u6240\u4ee5\u53ef\u80fd\u590d\u5236\u8fd8\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002"),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u901a\u8fc7\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"},"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u65b9\u6cd5\u7684\u673a\u5668\u7801\uff0c\u5e76\u4e14\u65b9\u6cd5\u6536\u5c3e\u5305\u542b\u5bf9\u65b9\u6cd5\u6808\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u90a3\u4e48\u7531\u4e8e\u8fd9\u4e9b\u64cd\u4f5c\u7684\u673a\u5668\u7801\u662f\u56fa\u5b9a\u7684\uff0c\u5206\u914d\u7684\u5185\u5b58\u5730\u5740\u53ca\u5bc4\u5b58\u5668\u7b49\u4e5f\u662f\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u8981\u4fdd\u8bc1\u8ddf\u8fd0\u884c\u65f6\u7684Table VM\u6709\u6548\u914d\u5408\uff0cTable VM\u4f20\u7ed9\u65b9\u6cd5\u7ec4\u4ef6\u7684\u6570\u636e\u7684\u987a\u5e8f\u5fc5\u987b\u662f\u56fa\u5b9a\u7684\uff0c\u8fd9\u90e8\u5206\u8981\u901a\u8fc7\u4e0a\u4e00\u8282\u7684\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6765\u5904\u7406\u3002\u8fd9\u6837\u7ec4\u4ef6\u673a\u5668\u7801\u624d\u80fd\u53d6\u5230\u6b63\u786e\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"call-stack",src:l(4015).Z,width:"1239",height:"578"})),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u6700\u5927\u7684\u95ee\u9898\u662f\u673a\u5668\u7801\u4e2d\u7f16\u7801\u4e86\u5bf9\u5185\u5b58\u7684\u8c03\u7528\uff0c\u5373\u5bc4\u5b58\u5668\u5206\u914d\u90e8\u5206\uff0c\u8fd9\u90e8\u5206\u4e5f\u662f\u7f16\u8bd1\u8ddf\u89e3\u91ca\u6700\u5927\u7684\u4e0d\u540c\u3002\u901a\u8fc7\u56fa\u5b9a\u5206\u914d\u597d\u7684\u5bc4\u5b58\u5668\uff0cCPU\u80fd\u591f\u4f7f\u7528\u5bc4\u5b58\u5668\u6765\u7f13\u5b58\u53d8\u91cf\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u4e2a\u53d8\u91cf\u90fd\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\uff0c\u90a3\u6837\u5c31\u591a\u4e86\u5f88\u591a\u5bc4\u5b58\u5668\u53d8\u91cf\u8bfb\u53d6\u5199\u5165\u7684\u6307\u4ee4\uff0c\u5e76\u4e14\u65e0\u6cd5\u5229\u7528\u4f20\u7edfCPU\u7684\u4e00\u4e9b\u786c\u4ef6\u4f18\u5316\u624b\u6bb5\uff0c\u5982\u6307\u4ee4\u9884\u53d6\u7b49\u3002"),(0,n.kt)("p",null,"\u7f16\u8bd1\u7684\u673a\u5668\u7801\u5305\u542b\u4e86\u53d8\u91cf\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u8fd9\u4e9b\u5bc4\u5b58\u5668\u5730\u5740\u901a\u5e38\u662f\u57fa\u4e8e\u4e00\u4e2a\u8c03\u7528\u6808\u6765\u5b9e\u73b0\u7684\uff0c\u901a\u8fc7\u8c03\u7528\u6808\uff0c\u6bcf\u4e2a\u51fd\u6570\u6267\u884c\u7684\u6240\u6709\u6307\u4ee4\u90fd\u662f\u56fa\u5b9a\u4e0d\u53d8\u7684\u3002\u800c\u4fdd\u8bc1\u4efb\u610f\u51fd\u6570\u8c03\u7528\u90fd\u53ef\u4ee5\u6709\u5e8f\u8fdb\u884c\u7684\u534f\u4f5c\u673a\u5236\u4e3b\u8981\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6808\u9876\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u4e24\u4e2a\u6570\u503c\u9700\u8981\u8fd0\u884c\u65f6\u52a8\u6001\u4f20\u7ed9\u7ec4\u4ef6\u7684\u51fd\u6570\u673a\u5668\u7801\u3002\u5728\u4f20\u7edf\u7684\u9759\u6001\u7f16\u8bd1\u578b\u8bed\u8a00\u4e2d\uff0c\u8c03\u7528\u51fd\u6570\u7684\u90e8\u5206\u4e5f\u662f\u673a\u5668\u7801\uff0c\u56e0\u6b64\u4ece\u54ea\u91cc\u83b7\u53d6\u51fd\u6570\u53c2\u6570\u7684\u503c\u90fd\u53ef\u4ee5\u7f16\u7801\u4e3a\u56fa\u5b9a\u7684\u6307\u4ee4\uff0c\u4f46\u662f\u5728\u52a8\u6001\u6027\u8bed\u8a00\u4e2d\uff0c\u8fd9\u90e8\u5206\u662f\u53ef\u53d8\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3451).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u53c2\u7167\u52a8\u6001\u6027\u8bed\u8a00\u865a\u62df\u673a\u7684\u505a\u6cd5\uff0c\u5728\u4e00\u4e2a\u865a\u62df\u673a\u7684\u5faa\u73af\u4e2d\u8bfb\u53d6\u53d8\u91cf\u5e76\u83b7\u53d6\u5730\u5740\uff0c\u7136\u540e\u4f20\u9012\u7ed9\u88ab\u8c03\u51fd\u6570\u7684\u51fd\u6570\u8c03\u7528\u6808\uff0c\u5305\u62ec\u6808\u9876\u6307\u9488\u548c\u51fd\u6570\u8fd4\u56de\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u91cc\u7684\u95ee\u9898\u53ef\u80fd\u662f\uff0c\u865a\u62df\u673a\u5e76\u4e0d\u77e5\u9053\u7ec4\u4ef6\u7684\u51fd\u6570\u8c03\u7528\u6808\u7684\u5e03\u5c40\uff0c\u5373\u662f\u51fd\u6570\u7684\u7b7e\u540d\u6216\u8005\u7c7b\u578b\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u7b7e\u540d\u4fe1\u606f\u5b58\u653e\u5728\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6570\u636e\u4e2d\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u53e6\u5916\u4e00\u4e2a\u7cbe\u5de7\u7684\u70b9\u662f\uff0cHotSpot VM\u4f7f\u7528OS\u7ebf\u7a0b\u6765\u5b9e\u73b0Java\u7ebf\u7a0b\uff0c\u5e76\u4e14\u4e00\u4e2aJava\u7ebf\u7a0b\u4e0a\u8fd0\u884c\u7684\u6240\u6709native\u51fd\u6570\u548cJava\u65b9\u6cd5\u90fd\u5171\u7528\u4e00\u4e2a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E8%B0%83%E7%94%A8%E6%A0%88&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A143053269%7D"},"\u8c03\u7528\u6808"),"\u3002\u6240\u4ee5HotSpot VM\u4e5f\u628a\u8fd9\u79cd\u505a\u6cd5\u53eb\u505a\u201c\u6df7\u5408\u6a21\u5f0f\u6808\u201d\uff08mixed-mode stack\u6216\u8005\u7b80\u79f0mixed stack\uff09\u3002\u89e3\u91ca\u5668\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528CPU\u7684\u6808\u6307\u9488\u5bc4\u5b58\u5668\u6765\u8868\u793a\u81ea\u5df1\u7684\u6808\u9876\u6307\u9488\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aRednaxelaFX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/55141871/answer/143053269"},"https://www.zhihu.com/question/55141871/answer/143053269"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"238-\u8c03\u5ea6\u5668"},"2.3.8 \u8c03\u5ea6\u5668"),(0,n.kt)("p",null,"\u5982\u679c\u5b8c\u5168\u6309\u7167\u7ec4\u4ef6\u4e3a\u7c92\u5ea6\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u80fd\u5bfc\u81f4\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u4f17\u591a\u7ec4\u4ef6\u88ab\u5206\u914d\u5230\u8f83\u591a\u7684\u670d\u52a1\u5668\uff0c\u6240\u4ee5\u5355\u4e2a\u5ba2\u6237\u7aef\u9700\u8981\u548c\u5f88\u591a\u670d\u52a1\u5668\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u5176\u5b9e\u662f\u4e24\u4e2a\u76f8\u4e92\u51b2\u7a81\u7684\u76ee\u6807\u7684\u6743\u8861\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c06\u5c3d\u53ef\u80fd\u591a\u7684\u6765\u81ea\u4e0d\u540c\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u653e\u5728\u4e00\u4e2a\u670d\u52a1\u5668\u6267\u884c\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u6027\uff0c\u751a\u81f3\u53ef\u4ee5\u653e\u5230GPU\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u540c\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u5c3d\u53ef\u80fd\u653e\u5728\u540c\u4e00\u4e2a\u670d\u52a1\u5668\uff0c\u53ef\u4ee5\u8f83\u5c11\u5ba2\u6237\u7aef\u7684\u94fe\u63a5\u6570\u91cf")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5c3d\u53ef\u80fd\u5c06\u5355\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u81f3\u5c11\u653e\u5230\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\u8fdb\u884c\u8ba1\u7b97\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u662f\u53ef\u884c\u7684\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u4e3b\u8981\u8fd8\u662f\u4f9d\u8d56\u4e8eCPU\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u5f88\u5927\u7684\u5e76\u884c\u5ea6\uff0c\u4f8b\u59828\u4e2a\u300116\u4e2a\u6216\u8005\u6700\u591a32\u4e2a\u7ec4\u4ef6\u4e00\u8d77\u6267\u884c\u5c31\u5dee\u4e0d\u591a\uff0c\u800c\u8fd9\u6837\u7684\u8981\u6c42\u5f88\u5bb9\u6613\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,"\u5355\u4e2a\u7ec4\u4ef6\u5355\u6b21\u8ba1\u7b97\u7684\u6570\u91cf\u4e0d\u8981\u592a\u591a\uff0c\u8fd9\u6837\u5bf9\u8fd0\u884c\u65f6\u7ec4\u7ec7\u7ba1\u7406\u6570\u636e\u7684\u8981\u6c42\u4f1a\u964d\u4f4e\uff0c\u4f8b\u59828/16/32\u4e2a\u3002\u8fd9\u6837\u5c11\u91cf\u7684\u7ec4\u4ef6\u5e76\u884c\u8ba1\u7b97\u9700\u6c42\u4e5f\u66f4\u5bb9\u6613\u5bf9\u5ba2\u6237\u7aef\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u80fd\u4e00\u4e24\u4e2a\u5ba2\u6237\u7aef\u751a\u81f3\u5355\u4e2a\u5ba2\u6237\u7aef\u90fd\u53ef\u4ee5\u8fbe\u5230\u8fd9\u4e2a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u8bbe\u7f6e\u5ba2\u6237\u7aef\u7ba1\u7406\u8c03\u5ea6\uff0c\u6bcf\u4e2a\u5ba2\u6237\u7aef\u5c3d\u53ef\u80fd\u8ddf\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u670d\u52a1\u5668\u8c03\u5ea6\u7ba1\u7406\u5668\u76f8\u8fde\u63a5\uff0c\u800c\u8fd9\u4e9b\u8c03\u5ea6\u5668\u8d1f\u8d23\u5bf9\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u670d\u52a1\u5668\u8fdb\u884c\u7ba1\u7406\uff0c\u4e3b\u8981\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6536\u96c6\u6765\u81ea\u540c\u4e00\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u4e0d\u540c\u670d\u52a1\u5668\u7684\u7ec4\u4ef6\u8ba1\u7b97\u7ed3\u679c\uff0c\u7136\u540e\u901a\u8fc7\u5355\u6b21\u94fe\u63a5\u4e0e\u5355\u4e2a\u5ba2\u6237\u7aef\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("h3",{id:"239-\u52a8\u6001\u7b26\u53f7\u8868"},"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u7f16\u8bd1\u67b6\u6784\u4e2d\uff0c\u7b26\u53f7\u8868\u4e3b\u8981\u7528\u4e8e\u8bb0\u5f55\u7528\u6237\u81ea\u5b9a\u4e49\u7c7b\u578b\u7684\u7ed3\u6784\uff0c\u4ee5\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\u3002\u5f53\u7136\u73b0\u4ee3\u9762\u5411\u5bf9\u8c61\u5bf9\u8c61\u4e2d\uff0c\u81ea\u5b9a\u4e49\u7ed3\u6784\u672c\u8eab\u662f\u53ef\u4ee5\u5d4c\u5957\u7684\uff0c\u5e76\u4e14\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\u53ef\u80fd\u4f1a\u5305\u542b\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u4e5f\u7528\u6765\u8f85\u52a9\u4f5c\u7528\u57df\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("img",{src:"resources/symbol-table.jpeg",alt:"symbol-table"}),(0,n.kt)("p",null,"\u672c\u8d28\u4e0a\uff0c\u7b26\u53f7\u8868\u7531\u6e90\u4ee3\u7801\u4e2d\u751f\u6210\uff0c\u7136\u540e\u7528\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\uff0c\u7136\u540e\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u5c31\u4e0d\u518d\u9700\u8981\u7b26\u53f7\u8868\uff0c\u7b26\u53f7\u8868\u53ea\u662f\u4f5c\u4e3a\u7f16\u8bd1\u9636\u6bb5\u7684\u4e00\u79cd\u4e2d\u95f4\u6570\u636e\u3002\u4f46\u8fd9\u4e5f\u8bf4\u660e\uff0c\u4ece\u6e90\u4ee3\u7801\u672c\u8eab\u5c31\u53ef\u4ee5\u63a8\u5bfc\u5b9e\u9645\u8fd0\u884c\u65f6\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u52a8\u6001\u8bed\u8a00\u7684\u539f\u7406\u5373\u4f7f\u5982\u679c\uff0c\u5b83\u4eec\u52a8\u6001\u5730\u4ece\u7b26\u53f7\u8868\u8ba1\u7b97\u4e00\u4e2a\u53d8\u91cf\u7684\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4f9d\u8d56\u7f16\u8bd1\u5206\u914d\u597d\u7684\u56fa\u5b9a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u57fa\u672c\u4e0a\uff0c\u5982\u679c\u8bed\u8a00\u9700\u8981\u5177\u6709\u67d0\u79cd\u52a8\u6001\u6027\uff0c\u8fd0\u884c\u65f6\u5185\u5b58\u4e2d\u5b9e\u65f6\u8ba1\u7b97\u548c\u5b58\u50a8\u7b26\u53f7\u8868\u5c31\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002\u8fd9\u91cc\u7684\u52a8\u6001\u6027\u4e3b\u8981\u662f\u6307\u90a3\u4e9b\u5fc5\u987b\u4ece\u7b26\u53f7\u8868\u7c7b\u578b\u7cfb\u7edf\u63a8\u5bfc\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u5bf9\u8c61\u67d0\u4e2a\u5c5e\u6027\u7684\u5730\u5740\uff0c\u51fd\u6570\u7684\u53c2\u6570\u5217\u8868\u4ee5\u53ca\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u7531\u6b64\u770b\uff0c\u52a8\u6001\u8bed\u8a00\u81f3\u5c11\u6709\u4ee5\u4e0b\u4e24\u79cd\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7b26\u53f7\u67e5\u8be2\uff0c\u7b26\u53f7\u8868\u5f80\u5f80\u662f\u6bd4\u8f83\u590d\u6742\u7684\u6811\u5f62\u7ed3\u6784\uff0c\u67e5\u8be2\u6548\u7387\u8f83\u4f4e"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\u4e2d\u7684\u5bc4\u5b58\u5668\u6ca1\u6709\u5206\u914d\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u9700\u8981\u4ece\u5185\u5b58\u800c\u4e0d\u662f\u5bc4\u5b58\u5668\u8bfb\u53d6")),(0,n.kt)("p",null,"RealityIS\u9488\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0c\u5bf9\u4e8e\u524d\u8005\uff0c\u5b83\u91c7\u7528\u5982\u4e0b\u7684\u4f18\u5316\u624b\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u7c7b\u578b\u7ed3\u6784\uff0c\u66f4\u5c11\u7684\u5c42\u6b21\uff0c\u57fa\u672c\u4e0a\u6ca1\u6709\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784\uff0c\u66f4\u7b80\u5355\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u65e0\u6cd5\u5b9a\u4e49\u590d\u6742\u7684\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u5355\u53f0VM\u5177\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u7531\u4e8e\u6bcf\u4e2aVM\u503e\u5411\u4e8e\u5c06\u5927\u91cf\u76f8\u4f3c\u7684\u903b\u8f91\u653e\u5230\u540c\u4e00\u53f0\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u56e0\u6b64\u540c\u4e00\u53f0\u670d\u52a1\u5668\u62e5\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u4fe1\u606f\u53ca\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u4e2a\u4f18\u5316\uff0cRealityIS\u5bf9\u4e8e\u7c7b\u578b\u7684\u52a8\u6001\u6027\u65b9\u9762\u7684\u6027\u80fd\u635f\u5931\u5c31\u964d\u5230\u4e86\u6bd4\u8f83\u4f4e\u7684\u6c34\u5e73\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u7ec4\u4ef6\u7684\u903b\u8f91\u662f\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u5c3d\u7ba1\u7ec4\u4ef6\u5b9a\u4e49\u7684\u65f6\u5019\u5173\u8054\u4e86\u4e00\u5b9a\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f46\u662f\u6211\u4eec\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u7ed1\u5b9a\u51fd\u6570\u8c03\u7528\u6808\u6765\u4f7f\u51fd\u6570\u7684\u673a\u5668\u7801\u53ef\u4ee5\u72ec\u7acb\u7f16\u8bd1\u3002\u56e0\u6b64\u7406\u8bba\u4e0a\u7ec4\u4ef6\u7684\u8ba1\u7b97\u6548\u7387\u53ef\u4ee5\u63a5\u8fd1\u9759\u6001\u578b\u8bed\u8a00\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.7.1\u8282\u3002"),(0,n.kt)("h3",{id:"2310-\u865a\u62df\u673a\u67b6\u6784"},"2.3.10 \u865a\u62df\u673a\u67b6\u6784"),(0,n.kt)("h4",{id:"23101-\u670d\u52a1\u7aef"},"2.3.10.1 \u670d\u52a1\u7aef"),(0,n.kt)("p",null,"\u540e\u7aef\u7531\u4e8e\u53ef\u4ee5\u52a8\u6001\u52a0\u8f7d\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u6240\u4ee5\u76f4\u63a5\u4f7f\u7528JIT"),(0,n.kt)("h4",{id:"23102-\u5ba2\u6237\u7aef"},"2.3.10.2 \u5ba2\u6237\u7aef"),(0,n.kt)("p",null,"\u5ba2\u6237\u7aef\u7531\u4e8eiOS\u4e0d\u5141\u8bb8\u4f7f\u7528JIT\uff0c\u6240\u4ee5\u53ea\u80fd\u4f7f\u7528\u89e3\u91ca\u5668\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Wasm3\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u7528\u4e8e\u5c06Wasm\u5b57\u8282\u7801\u52a8\u6001\u89e3\u91ca\u6267\u884c\uff0c\u53d1\u751f\u5728\u8fd0\u884c\u65f6"),(0,n.kt)("li",{parentName:"ul"},"Wasm interpreter\uff0c\u8be5\u89e3\u91ca\u5668\u7528\u4e8e\u5c06CreationScript\u89e3\u91ca\u4e3aWasm\u5b57\u8282\u7801\uff0c\u4e3b\u8981\u53d1\u751f\u5728\u7f16\u8f91\u65f6")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3451).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u56e0\u4e3a\u51fd\u6570\u8c03\u7528\u6808\u53ca\u5176\u76f8\u5173\u7684\u673a\u5236\uff0c\u662f\u88ab\u7f16\u8bd1\u5668\u7f16\u8bd1\u5230\u6700\u7ec8\u7684\u4ee3\u7801\u4e2d\u53bb\u7684\uff0c\u662f\u5728\u4ee3\u7801\u7684\u6bcf\u4e2a\u51fd\u6570\u9996\u4f4d\u63d2\u5165\u4e86\u4e00\u6bb5\u63a7\u5236\u4ee3\u7801\uff0c\u7136\u540e\u7a0b\u5e8f\u5c31\u80fd\u591f\u6309\u7167\u8fd9\u79cd\u673a\u5236\u6267\u884c\uff0c\u800c\u4e0d\u662f\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u4e86\u8be5\u673a\u5236\uff0c\u8fd9\u91cc\u64cd\u4f5c\u7cfb\u7edf\u5176\u5b9e\u53ea\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6808\u9876\u6307\u9488\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u8fd9\u79cd\u673a\u5236\u4e5f\u90e8\u5206\u5b9e\u73b0\u5728\u865a\u62df\u673a\u4e2d\uff0c\u9996\u5148\u865a\u62df\u673a\u6dfb\u52a0\u4e24\u4e2a\u65b9\u6cd5\u5757\uff0c\u7c7b\u4f3c\u4e8e\u539f\u6765\u9759\u6001\u8bed\u8a00\u4ee3\u7801\u4e2d\u51fd\u6570\u9996\u5c3e\u6dfb\u52a0\u7684\u90e8\u5206\uff0c\u7531\u4e8e\u8fd9\u90e8\u5206\u7684\u4ee3\u7801\u7ed3\u6784\u90fd\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e2d\u6dfb\u52a0\u4e24\u4e2a\u4ee3\u7801\u5757\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e24\u90e8\u5206\u7684\u53c2\u6570\u90e8\u5206\u4ece\u89e3\u91ca\u5668\u52a8\u6001\u5f97\u6765\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u5f53\u4e00\u4e2a\u51fd\u6570\u7ec4\u4ef6\u5f00\u59cb\u8c03\u7528\u7684\u4e4b\u524d\uff0c\u9996\u5148\u8fd0\u884c\u65f6\u6784\u9020\u597d\u8c03\u7528\u6808\u7684\u53c2\u6570\u4fe1\u606f\uff0c\u5e76\u8c03\u7528\u865a\u62df\u673a\u9996\u5148\u6267\u884c\u51fd\u6570\u5f00\u59cb\u5757\uff0c\u4f20\u5165\u8c03\u7528\u6808\u7684\u6808\u9876\u6307\u9488\u4ee5\u53ca\u8fd4\u56de/\u56de\u8c03\u5730\u5740\uff0c\u8fd9\u6837\u865a\u62df\u673a\u540e\u9762\u7684\u4ee3\u7801\u4e2d\u7684\u53c2\u6570\u5c31\u53ea\u9700\u8981\u6307\u5b9a\u76f8\u5bf9\u5730\u5740\uff0c\u53ef\u4ee5\u6bd4\u8f83\u4f5c\u4e3a\u5e38\u6570\u5199\u5165\u5230Wasm\u6307\u4ee4\u4e2d\uff0c\u8fd9\u6837Wasm\u89e3\u91ca\u5668\u6267\u884c\u6307\u4ee4\u5c31\u4e0d\u9700\u8981\u518d\u67e5\u627e\u5185\u5b58\u5730\u5740\uff0cCPU\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u5199\u56de\u5230\u5bc4\u5b58\u5668\u800c\u4e0d\u662f\u5185\u5b58\uff0c\u56e0\u4e3a\u6211\u4eec\u5047\u8bbe\u5730\u5740\u90fd\u662f\u76f8\u5bf9\u7684\uff0c\u90a3\u4e48\u5728\u89e3\u91ca\u4e3aWasm\u6307\u4ee4\u7684\u89e3\u91ca\u5668\u4e2d\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u628a\u4ee3\u7801\u8f6c\u5316\u4e3a\u5bf9\u5bc4\u5b58\u5668\u7684\u610f\u4e49\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7ed9\u4ed6\u503c\uff0c\u5047\u8bbeCPU\u5565\u4e5f\u4e0d\u77e5\u9053\uff0c\u5b8c\u5168\u9700\u8981\u89e3\u91ca\u5668\u6839\u636e\u6bcf\u4e2a\u6307\u4ee4\u7684\u610f\u4e49\u52a8\u6001\u5224\u65ad\u3002\u6700\u540e\u51fd\u6570\u6267\u884c\u5b8c\u4e86\uff0c\u518d\u56de\u8c03\u89e3\u91ca\u5668\u5f00\u59cb\u4e0b\u4e00\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u8282\u7701\u6bcf\u4e2a\u6307\u4ee4\u90fd\u9700\u8981\u5199\u5165\u5199\u51fa\u5185\u5b58\u7684\u64cd\u4f5c\uff0c\u56e0\u4e3a\u5185\u5b58\u5730\u5740\u5df2\u77e5\u4e86\uff0c\u6240\u4ee5\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u662f\u5e38\u6570\uff0c\u5c31\u4e0d\u9700\u8981\u518d\u5185\u5b58\u4e2d\u67e5\u627e\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u5269\u4e0b\u4e3b\u8981\u7684\u6027\u80fd\u635f\u5931\uff0c\u5c31\u662f\u6307\u4ee4\u7684\u7f13\u5b58\u3001\u9884\u53d6\u8fd9\u4e9b\u64cd\u4f5c\u4e86\uff0c\u56e0\u4e3a\u786c\u4ef6\u7ea7\u7684\u6307\u4ee4\u9884\u53d6\u80af\u5b9a\u662f\u53ea\u80fd\u6765\u81ea\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u8ddfOS\u6709\u5173\uff0c\u65e0\u6cd5\u907f\u514d\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6307\u4ee4\u4e0d\u662f\u673a\u5668\u7801\uff0c\u865a\u62df\u673a\u65e0\u6cd5\u5e94\u7528\u8fd9\u4e9b\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u5185\u5b58\u7684\u6d41\u8fdb\u6d41\u51fa\uff0c\u5176\u5e26\u6765\u7684\u6027\u80fd\u635f\u5931\u5e94\u8be5\u53ef\u4ee5\u5b8c\u5168\u62b5\u6d88\u6389\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u6838\u5fc3\u5728\u5916\u90e8\u52a8\u6001\u6784\u9020\u65b9\u6cd5\u8c03\u7528\u6808\u3002\u8fd9\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f20\u7edf\u7684OOP\u7b49\u6784\u9020\u65b9\u6cd5\uff0c\u56e0\u4e3a\u4e0d\u80fd\u7ba1\u7406\u6570\u636e\uff0c\u6240\u4ee5\u5f88\u96be\u52a8\u6001\u6784\u9020\uff0c\u56e0\u4e3a\u4f60\u65e0\u6cd5\u77e5\u9053\u65b9\u6cd5\u7b7e\u540d\uff0c\u9700\u8981\u53cd\u5c04\u7b49\u5f88\u590d\u6742\u7684\u673a\u5236\u3002\u8fd9\u5176\u5b9e\u76f8\u5f53\u4e8e\u628a \u7f16\u8bd1\u5668\u9759\u6001\u7f16\u8bd1\u65f6\u5bf9\u65b9\u6cd5\u53c2\u6570\u7684\u4fe1\u606f\u62ff\u90fd\u8fd0\u884c\u65f6\uff0c\u52a8\u6001\u8ba1\u7b97\u5f88\u8d39\u6027\u80fd\uff0c\u8fd9\u4e9b\u4fe1\u606f\u4e00\u822c\u5728\u8fd0\u884c\u65f6\u90fd\u6ca1\u6709\u4e86\u3002"),(0,n.kt)("p",null,"\u8bb0\u5f97\u597d\u50cf\u300a\u7f16\u8bd1\u539f\u7406\u300b\u4e2d\u8bf4\u539f\u672c\u51fd\u6570\u6dfb\u52a0\u7684\u9996\u5c3e\u4e24\u5757\u63a7\u5236\u7a0b\u5e8f\u662f\u53ef\u4ee5\u653e\u5230\u51fd\u6570\u5916\u7801\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u8c03\u7528\u7b80\u5355\u5168\u90e8\u590d\u5236\u5230\u6bcf\u4e2a\u51fd\u5185\u90e8\u3002\u6211\u4eec\u7684\u65b9\u6cd5\u76f8\u5f53\u4e8e\u662f\u628a\u8fd9\u4e2a\u8fd8\u539f\u56de\u6765\uff0c\u628a\u5b83\u5206\u6765\u3002\u56e0\u4e3a\u6211\u4eec\u73b0\u5728\u51fd\u6570\u662f\u52a8\u6001\u7684\uff0c\u6240\u4ee5\u4e0d\u80fd\u90a3\u6837\u53bb\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u6211\u4eec\u89e3\u91ca\u5668\u751f\u6210\u7684\u6307\u4ee4\u4e2d\uff0c\u5927\u90e8\u5206\u64cd\u4f5c\u6570\u90fd\u662f\u5e38\u91cf\u800c\u4e0d\u662f\u53d8\u91cf\uff0c\u53d8\u91cf\u610f\u5473\u7740Wasm\u5b57\u8282\u7801\u5728\u89e3\u91ca\u6267\u884c\u7684\u65f6\u5019\u6709\u9700\u8981\u591a\u51e0\u6761\u8bfb\u53d6\u5185\u5b58\u5730\u5740\u7684\u6307\u4ee4\uff0c\u8fd9\u5e26\u6765\u4e24\u4e2a\u7ed3\u679c\uff1a1\uff09\u6307\u4ee4\u6570\u51cf\u5c11\uff0c\u8fd9\u4e5f\u51cf\u5c11\u4e86Wasm\u865a\u62df\u673a\u4e2d\u67e5\u627e\u673a\u5668\u7801\u6307\u4ee4\u8df3\u6765\u8df3\u53bb\u7684\u9891\u7387\uff0c\u4f20\u7edf\u7684\u865a\u62df\u673a\u76f8\u5bf9\u4e0e\u9759\u6001\u8bed\u8a00\u7684\u4ee3\u7801\u4e0a\u7684\u5dee\u522b\u5c31\u662f\uff0c\u9759\u6001\u4ee3\u7801\u662f\u8fde\u7eed\u7684\uff0c\u4f46\u662f\u4f1a\u5b58\u5728\u4ee3\u7801\u91cd\u590d\uff0c\u865a\u62df\u673a\u7684\u673a\u5668\u7801\u662f\u5f88\u5c11\u7684\uff0c\u53ea\u6709\u6807\u51c6\u6307\u4ee4\uff0c\u4f46\u662f\u5c31\u4f1a\u8df3\u8f6c\u6bd4\u8f83\u9891\u7e41\u4ee5\u514b\u670d\u6ca1\u6709\u91cd\u590d\u7684\u95ee\u9898\uff0c\u4e0d\u8fc7\u53d6\u6307\u4ee4\u76f8\u5bf9\u4e8e\u8ba1\u7b97\u90fd\u662f\u72ec\u7acb\u7684\u6307\u4ee4\uff0c\u5e94\u8be5\u5f88\u5feb\u7684\uff1b2\uff09\u56e0\u4e3a\u4e2d\u95f4\u8ba1\u7b97\u7ed3\u679c\u76f4\u63a5\u653e\u5bc4\u5b58\u5668\uff0c\u51cf\u5c11\u5185\u5b58\u6d41\u8fdb\u6d41\u51fa\u3002")),(0,n.kt)("p",null,"\u8fd9\u6837\u51fd\u6570\u4f5c\u4e3a\u7c7b\u578b\u5c31\u662f\u6709\u975e\u5e38\u5927\u4ef7\u503c\u7684\uff0c\u5b83\u5e2e\u52a9CreationScript\u89e3\u91ca\u5668\u600e\u6837\u751f\u6210Wasm\u5b57\u8282\u7801\uff0c\u4ee5\u7ba1\u7406\u4e0a\u8ff0\u884c\u4e3a\u7684\u6267\u884c\u3002\u800c\u4e14\u5b83\u53ea\u9700\u8981\u51fd\u6570\u7c7b\u578b\u6216\u8005\u5b9a\u4e49\u5c31\u884c\uff0c\u4e0d\u9700\u8981\u77e5\u9053\u5177\u4f53\u8c03\u7528\u4ec0\u4e48\u51fd\u6570\uff0c\u53ef\u4ee5\u5355\u72ec\u7f16\u8bd1/\u89e3\u91ca\u6bcf\u4e2a\u7ec4\u4ef6\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u5c31\u662flua\u7684\u673a\u5236\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0")),(0,n.kt)("p",null,"\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\uff0c\u64cd\u4f5c\u6570\u7684\u6570\u636e\u7ed3\u6784\u662f\u5b58\u653e\u5728CPU\u7684\u5bc4\u5b58\u5668\u4e2d\u7684\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u6a21\u578b\u6765\u8bf4\u6ca1\u6709PUSH\u548cPOP\u64cd\u4f5c\uff0c\u4f46\u662f\u6307\u4ee4\u4e2d\u9700\u8981\u5305\u542b\u64cd\u4f5c\u6570\u7684\u5730\u5740(\u6216\u8005\u662f\u5bc4\u5b58\u5668)\uff0c\u5e76\u4e14\u6307\u4ee4\u9700\u8981\u663e\u5f0f\u7684\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u5730\u5740\uff0c\u800c\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u6307\u4ee4\u4e0d\u5305\u542b\u64cd\u4f5c\u6570\u7684\u4fe1\u606f\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u5f97\u5230\uff0c\u4f8b\u5982\uff0c\u5728\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u4e0b\uff0c\u4e00\u4e2a\u52a0\u6cd5\u64cd\u4f5c\u5176\u6307\u4ee4\u5c06\u4f1a\u662f\u4e0b\u9762\u8fd9\u5e45\u56fe\u6240\u793a\uff0e\n",(0,n.kt)("img",{alt:"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0",src:l(3172).Z,width:"667",height:"326"})),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"ADD R1, R2, R3 ;# Add contents of R1 and R2, store result in R3\n")),(0,n.kt)("p",null,"\u5c31\u50cf\u4e0a\u9762\u63d0\u5230\u7684\u4e00\u6837\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u662f\u6ca1\u6709PUSH\u548cPOP\u8fd9\u7c7b\u64cd\u4f5c\u7684\uff0c\u56e0\u6b64\u52a0\u6cd5\u6307\u4ee4\u53ea\u6709\u4e00\u884c\uff0c\u4e0d\u50cf\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u90a3\u6837\uff0c\u8fd9\u91cc\u9700\u8981\u663e\u5f0f\u8bf4\u660e\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e(\u8fd9\u91cc\u662f\u653e\u5728R1\uff0cR2\u5bc4\u5b58\u5668\u4e2d)\uff0c\u4f18\u70b9\u5c31\u662f\u907f\u514d\u4e86\u5927\u91cfPUSH\u548cPOP\u7684\u5f00\u9500\uff0c\u56e0\u6b64\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u5728\u6307\u4ee4\u5206\u53d1\u5faa\u73af\u8981\u6bd4\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u8981\u5feb\uff0e\n\u9664\u4e86\u4e0a\u9762\u7684\u63d0\u5230\u7684\u53ef\u4ee5\u907f\u514dPOP\u548cPUSH\u8fd9\u7c7b\u64cd\u4f5c\u5e26\u6765\u7684\u5f00\u9500\u5916\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7684\u4f18\u70b9\uff0c \u4f8b\u5982\u53ef\u4ee5\u5b9e\u73b0\u67d0\u4e9b\u65e0\u6cd5\u5728\u57fa\u4e8e\u5806\u6808\u5b9e\u73b0\u7684\u865a\u62df\u673a\u4e2d\u5b8c\u6210\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u5047\u8bbe\u73b0\u5728\u8981\u6267\u884c\u4e00\u6761\u51cf\u6cd5\u64cd\u4f5c\uff0c\u5bf9\u4e8e\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u6765\u8bf4\u4f1a\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u4fdd\u5b58\u5728\u4e00\u4e2a\u5bc4\u5b58\u5668\u4e2d\uff0c\u5f53\u8fd9\u6761\u51cf\u6cd5\u6307\u4ee4\u518d\u6b21\u6267\u884c\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u5f97\u5230\u8ba1\u7b97\u7ed3\u679c\uff0c\u4e0d\u9700\u8981\u518d\u6b21\u6267\u884c\uff0e\n\u5c3d\u7ba1\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u53c8\u5982\u4e0a\u8bf8\u591a\u7684\u4f18\u70b9\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u6765\u8bf4\uff0c\u4e5f\u5b58\u5728\u7740\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u7684\u6307\u4ee4\u5e73\u5747\u957f\u5ea6\u90fd\u8981\u5927\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\uff0c\u56e0\u4e3a\u524d\u8005\u9700\u8981\u5c06\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u653e\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u540e\u8005\u6307\u4ee4\u662f\u4e0d\u9700\u8981\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u7684\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u83b7\u5f97\uff0c\u56e0\u4e3a\u540e\u8005\u7684\u6307\u4ee4\u957f\u5ea6\u8981\u5c0f\u4e8e\u524d\u8005\uff0e"),(0,n.kt)("p",null,"\u5bc4\u5b58\u5668\u6570\u91cf\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u4e5f\u6709\u4e0d\u540c\uff1a")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u6307\u4ee4\u957f\u5ea6\u7684\u95ee\u9898\u3002\u5bc4\u5b58\u5668\u865a\u62df\u673a\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u76f4\u63a5\u6267\u884c\u5185\u5b58\u5730\u5740\uff0c\u5730\u5740\u6bd4\u8f83\u957f\uff0c\u5b83\u6ca1\u6709\u8c03\u7528\u6808\uff0c\u6570\u636e\u5728\u5185\u5b58\u4e2d\u6ca1\u6709\u987a\u5e8f\u3002\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u6784\u9020\u8c03\u7528\u6808\u6765\u662f\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u53d8\u6210\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u6837\u6307\u4ee4\u5c31\u6bd4\u8f83\u5c0f\u3002"),(0,n.kt)("p",null,"Lua\u53ea\u662f\u4e3a\u4e86\u6267\u884c\u6027\u80fd\uff0c\u53ef\u4ee5\u4e0d\u8003\u8651\u8c03\u7528\u6808\uff0c\u4f46\u662f\u6211\u4eec\u8981\u8003\u8651\u5b89\u5168\u6027\uff0c\u8c03\u7528\u6808\u662f\u5fc5\u987b\u5f97\uff0c\u56e0\u6b64\u53ef\u4ee5\u7ed3\u5408\u4e24\u8005\u4f18\u52bf\u3002"),(0,n.kt)("p",null,"\u6307\u4ee4\u957f\u5ea6\u7684\u51cf\u5c11\u53ef\u4ee5\u5927\u5927\u51cf\u5c11Wasm\u5b57\u8282\u7801\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u5927\u5c0f\u3002"),(0,n.kt)("h2",{id:"24-creationxr"},"2.4. CreationXR"),(0,n.kt)("p",null,"\u8ddf\u624b\u673a\u6700\u5927\u4e0d\u540c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u624b\u5177\u6709\u5728\u4e09\u7ef4\u4e16\u754c\u4e2d\u7684\u4f4d\u7f6e\uff0c\u5177\u5907\u521b\u5efa\u7acb\u4f53\u89c6\u89c9\u7269\u4f53\u7684\u57fa\u7840\uff0c\u4e0d\u518d\u4ec5\u9650\u4e8e\u5e73\u9762"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8eSLAM\uff0c\u4eba\u5728\u4e09\u7ef4\u4e16\u754c\u7684\u79fb\u52a8\u4e5f\u5177\u67093D\u4f4d\u7f6e\uff0c\u6240\u4ee5\u4eba\u8eab\u7684\u79fb\u52a8\u4e5f\u662f\u4ea4\u4e92\u7684\u4e00\u79cd\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"XR\u773c\u955c\u7684\u5c4f\u5e55\u66f4\u5927\uff0c\u4e16\u754c\u4e0d\u518d\u4ec5\u9650\u4e8e\u624b\u673a\u5927\u5c0f\u7684\u5c4f\u5e55\u5c3a\u5bf8")),(0,n.kt)("p",null,"\u5f53\u7136\u524d\u4e24\u8005\u5728\u624b\u673a\u4e5f\u662f\u53ef\u4ee5\u505a\u5230\uff0c\u53ea\u662f\u4f53\u9a8c\u6ca1\u90a3\u4e48\u597d"),(0,n.kt)("p",null,"\u786c\u4ef6\u8bbe\u5907\u7684\u4ea4\u4e92\u53ea\u9650\u4e8e\u624b\u52bf\u8bc6\u522b\u3001\u5b9a\u4f4d\u7b49\u57fa\u7840\u63a5\u53e3\uff0c\u5e94\u7528\u5c42\u8981\u5b9a\u4e49\u771f\u6b63\u7684\u4ea4\u4e92\u63a5\u53e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u968f\u7740\u624b\u6307\u7684\u79fb\u52a8\uff0c\u751f\u6210\u4e0d\u540c\u98ce\u683c\u7684\u7b14\u5237"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u52fe\u52d2\u4e00\u4e2a\u591a\u8fb9\u5f62\u4e4b\u540e\uff0c\u751f\u6210\u5c01\u95ed\u7684\u51e0\u4f55\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u5c06\u4e24\u4e2a\u591a\u8fb9\u5f62\u62fc\u5728\u4e00\u8d77\uff0c\u81ea\u52a8\u5408\u5e76\u6210\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u51e0\u4f55\u8868\u9762\u7684\u7eb9\u7406\u6d82\u9e26\u3001\u6750\u8d28\u7f16\u8f91\uff0c\u55b7\u7ed8"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u80fd\u6d89\u53ca\u5f88\u591a\u7269\u7406\u6a21\u62df\uff0c\u8fd9\u6837\u66f4\u52a0\u771f\u5b9e")),(0,n.kt)("p",null,"\u7531\u4e8e\u624b\u52bf\u4f4d\u7f6e\u4e0d\u662f\u7edd\u5bf9\u7cbe\u51c6\u7684\uff0c\u6240\u4ee5snapping \u7b97\u6cd5\u5f88\u5173\u952e\u2026\u2026"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u624b\u52bf\u8bc6\u522b\u5f88\u5173\u952e")),(0,n.kt)("p",null,"\u4f20\u7edfPC\u6216\u8005\u624b\u673a\u4e8c\u7ef4\u7a7a\u95f4\u521b\u5efa3D\u5f88\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u90fd\u9700\u8981\u4e00\u4e2a\u83dc\u5355\uff0c\u6216\u8005\u8bf4\u6bcf\u4e00\u4e2a\u529f\u80fd\u90fd\u662f\u4e00\u4e2a\u83dc\u5355\uff0c\u4e00\u4e2a3D\u8f6f\u4ef6\u57fa\u672c\u662f\u5c31\u662f\u4e00\u4e2a\u83dc\u5355\u7684\u51e0\u4f55\uff0c\u7528\u6237\u9700\u8981\u9996\u5148\u539f\u5219\u4e00\u79cd\u6a21\u5f0f\uff0c\u7136\u540e\u5728\u8be5\u6a21\u5f0f\u4e0b\u539f\u5219\u5177\u4f53\u7684\u529f\u80fd\u8fdb\u884c\u64cd\u4f5c\uff0c\u83dc\u5355\u53ef\u80fd\u4e0a\u767e\uff0c\u60f3\u8c61\u5c31\u662f\u5821\u5792\u4e4b\u591c\u90fd\u597d\u591a\u83dc\u5355"),(0,n.kt)("p",null,"\u4f46\u5f53\u9009\u62e9\u83dc\u5355\u4ee5\u540e\uff0c\u5b9e\u9645\u7684\u539f\u5b503D\u64cd\u4f5c\u5e76\u4e0d\u591a\uff0c\u5728XR\u4e2d\uff0c\u8fd9\u4e00\u5207\u90fd\u53ef\u4ee5\u901a\u8fc7\u624b\u52bf\u6765\u5927\u5927\u7b80\u5316\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u624b\u4e94\u6307\u6536\u62e2\u5c31\u662f\u7f29\u5c0f\uff0c\u5f20\u5f00\u5c31\u662f\u653e\u5927"),(0,n.kt)("li",{parentName:"ul"},"\u98df\u6307\u79fb\u52a8\u5c31\u662f\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u5de6\u624b\u638c\ud83d\udd90\ufe0f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e2a\u7269\u4f53\uff0c\u5de6\u624b\u624b\u52bf\u5145\u5f53\u4e00\u4e9b\u63a7\u5236\u6a21\u5f0f")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2D vs. 3D")),(0,n.kt)("p",null,"\u4f20\u7edf2D\u9f20\u6807\u6ca1\u6709\u524d\u540e\u6df1\u5ea6\u4e0a\u7684\u6982\u5ff5\uff0c\u7136\u800c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u573a\u666f\u662f3D\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u524d\u7684\u6444\u50cf\u673a\u4e3b\u8981\u662f\u7279\u5b9a\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u8fd1\u7684\u7269\u4f53")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u4f60\u9700\u8981\u5bf9\u67d0\u4e9b\u8ddd\u79bb\u6bd4\u8f83\u8fdc\u7684\u7269\u4f53\u8fdb\u884c\u7f16\u8f91\u65f6\uff0c\u5fc5\u987b\u8981\u5c06\u6444\u50cf\u673a\u79fb\u52a8\u5230\u8fd9\u4e9b\u5730\u65b9\u9644\u8fd1\uff0c\u7136\u800cPC\u4e0a\u79fb\u52a8\u6444\u50cf\u673a\u975e\u5e38\u9ebb\u70e6\uff0c\u56e0\u4e3a\u6ca1\u67093D\u8ddd\u79bb\uff0c\u6211\u4eec\u53ea\u80fd\u501f\u52a9\u9f20\u6807\u6216\u8005\u5c4f\u5e55\u4e0a\u5de6\u53f3\u4e0a\u4e0b\u7684\u6982\u5ff5\uff0c\u8fd9\u79cd\u5e73\u9762\u54113D\u7684\u6620\u5c04\u4f7f\u5f97\u53ea\u80fd\u5b9e\u73b0\u76f8\u5bf9\u4e8e\u5f53\u524d\u4f4d\u7f6e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5de6\u53f3\u4e0a\u4e0b\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5de6\u53f3\u4e0a\u4e0b\u65cb\u8f6c")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\u79fb\u52a8\u5230\u4e00\u4e2a\u8f83\u8fdc\u7684\u5730\u65b9\u4f1a\u975e\u5e38\u9ebb\u70e6\uff0c\u800c3D\u7684\u4ea4\u4e92\u5219\u4e0d\u4e00\u6837\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c06\u624b\u6307\u89e6\u53ca\u5230\u7684\u4e00\u4e2a\u70b9\u62c9\u5230\u773c\u524d"),(0,n.kt)("h3",{id:"241-unified-xr-input"},"2.4.1 Unified XR Input"),(0,n.kt)("h3",{id:"242-xr-scene-understanding"},"2.4.2 XR Scene Understanding"),(0,n.kt)("h3",{id:"243-data-driven-architecture"},"2.4.3 Data-driven Architecture"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u5e94\u8be5\u4ec5\u5173\u6ce8\u7528\u6237\u903b\u8f91\u5c42\uff0c\u5f15\u64ce\u5c42\u9762\u7684\u5f00\u53d1\u8fd8\u662f\u4f7f\u7528\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\uff0c\u6216\u8005\u6709\u4e00\u4e9b\u6570\u636e\u9a71\u52a8\uff0c\u4f46\u5b83\u4e0d\u662fECS\u67b6\u6784\uff0c\u800c\u662f\u4e3a\u4e86\u4fbf\u4e8e\u5982\u8de8\u5e73\u53f0\u6027\u3001\u6e32\u67d3\u7ba1\u7ebf\u914d\u7f6e\u7b49\u8fd9\u6837\u7684\u76ee\u7684\uff0c\u9664\u6b64\u4e4b\u5916\uff0c\u9762\u5411\u5bf9\u8c61\u5177\u6709\u66f4\u597d\u7684\u80fd\u529b\xb7"),(0,n.kt)("h3",{id:"244-\u4ea4\u4e92"},"2.4.4 \u4ea4\u4e92"),(0,n.kt)("p",null,"\u8981\u60f3\u5728XR\u8bbe\u5907\u4e0a\u8fdb\u884c\u4ea4\u4e92\uff08\u5305\u62ec\u5185\u5bb9\u521b\u4f5c\uff09\uff0c\u5e76\u4e14\u9762\u5411\u66f4\u5927\u4f17\u7684\u7528\u6237\uff0c\u5fc5\u987b\u5177\u6709\u66f4\u4f4e\u4ea4\u4e92\u95e8\u69db\uff0c\u4f20\u7edf\u7684\u4e92\u52a8\u7a0b\u5e8f\u5982\u6e38\u620f\u7684\u64cd\u4f5c\u95e8\u69db\u8fd8\u662f\u6bd4\u8f83\u9ad8\u3002\u4f8b\u5982\uff0c\u4f7f\u7528\u624b\u52bf\u89e6\u6478\u7b49\u6309\u952e\u63a7\u5236\u4eba\u7269\u57283D\u7a7a\u95f4\u4e2d\u8fdb\u884c\u884c\u8d70\uff0c\u4f7f\u7528\u590d\u6742\u7684\u6309\u952e\u7ec4\u5408\u63a7\u5236\u89d2\u8272\u5b8c\u6210\u4e00\u4e9b\u590d\u6742\u7684\u4e1c\u897f\uff0c\u4ecd\u7136\u662f\u6e38\u620f\u95e8\u69db\u6bd4\u8f83\u9ad8\u7684\u5176\u4e2d\u4e00\u4e2a\u90e8\u95e8\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u64cd\u63a7\u6280\u5de7\u672c\u8eab\u88ab\u5f53\u505a\u6e38\u620f\u673a\u5236\u5f88\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u5b83\u80fd\u5e26\u6765\u73a9\u6cd5\u7684\u4e50\u8da3\uff0c\u8fd9\u65e0\u53ef\u539a\u975e\uff0c\u4f46\u662f\u4e92\u52a8\u5185\u5bb9\u80cc\u540e\u672c\u8eab\u6240\u8868\u8fbe\u7684\u6545\u4e8b\u3001\u7cfb\u7edf\u4e4b\u95f4\u4ea4\u4e92\u7684\u673a\u5236\u7b49\u4ecd\u7136\u624d\u662f\u4e92\u52a8\u5185\u5bb9\u7684\u6838\u5fc3\uff0c\u5b83\u8868\u8fbe\u7684\u4e1c\u897f\u4f1a\u66f4\u591a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u548c\u8ba1\u7b97\u67b6\u6784\u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5728\u4ea4\u4e92\u9886\u57df\u505a\u4e00\u4e9b\u57fa\u7840\u521b\u65b0\u3002"),(0,n.kt)("h4",{id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"},"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u7a7a\u95f4\u4ea4\u4e92\u5f0f\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u7684\u4e3b\u8981\u5f62\u5f0f\uff0c\u5305\u62ec\u79fb\u52a8\u6444\u50cf\u5934\u3001\u79fb\u52a8\u573a\u666f\u3001\u9009\u62e9\u7269\u4f53\u3001\u79fb\u52a8\u7269\u4f53\u7b49\u7b49\uff0c\u5e38\u7528\u7684\u4e00\u4e9b\u64cd\u4f5c\u65b9\u5f0f\uff0c\u5982\u624b\u673a\u4e0a\u7684\u6ed1\u52a8\u3001\u70b9\u51fb\u3001\u53cc\u51fb\u7b49\u624b\u52bf\uff0c\u4ee5\u53caPC\u4e0a\u7684\u952e\u76d8\u548c\u9f20\u6807\uff0c\u6216\u8005\u4e3b\u673a\u6e38\u620f\u673a\u4e0a\u7684\u9065\u611f\u548c\u63a7\u5236\u624b\u67c4\u3002"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4e92\u52a8\u5185\u5bb9\u6700\u9891\u7e41\u548c\u6700\u6838\u5fc3\u7684\u64cd\u4f5c\u662f\u5173\u4e8eCamera\u7684\u79fb\u52a8\uff0c\u8fd9\u65e2\u53ef\u4ee5\u662f\u79fb\u52a8\u89d2\u8272\uff0c\u4e5f\u53ef\u4ee5\u662f\u79fb\u52a8\u573a\u666f\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\uff0c\u51e0\u4e4e\u90fd\u9700\u8981\u4e00\u79cd\u673a\u5236\u80fd\u591f\u63a7\u5236\u5728\u6574\u4e2a\u7a7a\u95f4\u8fdb\u884c\u64cd\u4f5c\u3002\u8fd9\u6837\u7684\u624b\u52bf\u64cd\u4f5c\u901a\u5e38\u6bd4\u8f83\u590d\u6742\uff0c\u5c24\u5176\u5bf9\u4e8e\u8f83\u8fdc\u5904\u7269\u4f53\u7684\u64cd\u4f5c\uff0c\u4f1a\u968f\u7740\u8ddd\u79bb\u548c\u906e\u6321\u7b49\u95ee\u9898\u53d8\u5f97\u66f4\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u4ee5\u89d2\u8272\u5bf9\u53c2\u8003\u7cfb\u79fb\u52a8\u4e16\u754c\uff0c\u548c\u4ee5\u4e16\u754c\u4e3a\u53c2\u8003\u7cfb\u79fb\u52a8\u89d2\u8272\uff0c\u8fd9\u4e24\u79cd\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u4f46\u662f\u5f53\u4f60\u9700\u8981\u540c\u65f6\u652f\u6301\u8fd9\u4e24\u8005\u662f\uff0c\u4e8b\u60c5\u4f1a\u53d8\u5f97\u590d\u6742\uff0c\u5c24\u5176\u79fb\u52a8\u7269\u4f53\u4f1a\u9762\u4e34\u66f4\u591a\u7a7a\u95f4\u6761\u4ef6\u3002\u300a\u5821\u5792\u4e4b\u591c\u300b\u9488\u5bf9\u6b64\u8bbe\u8ba1\u4e86\u4e00\u79cd\u7edf\u4e00\u7684\u67b6\u6784\uff0c\u5728\u624b\u673a\u6a21\u5f0f\u4e2d\uff0c\u5b83\u5c06\u7269\u4f53\u4e0e\u89d2\u8272\u4e4b\u95f4\uff0c\u501f\u52a9\u56fa\u5b9a\u7684\u5c4f\u5e55\u4e2d\u592e\u4f4d\u7f6e\u4fdd\u6301\u4e00\u79cd\u76f8\u5bf9\u5173\u7cfb\uff0c\u56e0\u6b64\u53ef\u4ee5\u628a\u7269\u4f53\u7684\u79fb\u52a8\u64cd\u4f5c\u4e0e\u73a9\u5bb6\u7684Camera\u7ed3\u5408\u8d77\u6765\u3002\u5927\u5927\u7b80\u5316\u4e86\u8fd9\u79cd\u4ea4\u4e92\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite-Creative-Mode",src:l(4892).Z,width:"3342",height:"1668"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u79cd\u65b9\u5f0f\u7b80\u5316\u4e86\u64cd\u4f5c\uff0c\u4f46\u662f\u5982\u679c\u5728XR\u7684\u73af\u5883\uff08\u5305\u62ec\u624b\u673a\u3001AR\u548cVR\u773c\u955c\uff09\uff0c\u7531\u4e8e\u8bbe\u5907\u672c\u8eab\u5177\u5907\u5b9a\u4f4d\u529f\u80fd\uff0c\u56e0\u6b64\u5b83\u8ddf\u771f\u5b9e\u4e16\u754c\u76843\u7ef4\u7a7a\u95f4\u5173\u8054\u8d77\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4eba\u5728\u771f\u5b9e3\u7ef4\u7a7a\u95f4\u7684\u79fb\u52a8\u4e0e\u865a\u62dfCamera\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u7a7a\u95f4\u662f\u53ef\u4ee5\u76f8\u5bf9\u9759\u6b62\u4e0d\u52a8\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u771f\u5b9e\u7a7a\u95f4\u4eba\u7684\u79fb\u52a8\u5145\u5f53\u4e86\u865a\u62dfCamera\u7684\u79fb\u52a8")),(0,n.kt)("p",null,"\u501f\u52a9\u4e0a\u8ff0\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u6709\u671b\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7b80\u5316XR\u7684\u7a7a\u95f4\u4ea4\u4e92\u95e8\u69db\u3002"),(0,n.kt)("h4",{id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92"},"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4f20\u7edf\u7684\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u90fd\u662f\u53ea\u6d89\u53ca\u52303D\u7684\u7a7a\u95f4\u4ea4\u4e92\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u4ea4\u4e92\u8f6c\u6362\u5230XR\u8bbe\u5907\u65f6\uff0c\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u539f\u672c\u5728\u624b\u673a\u4e0a\u53ea\u9700\u8981\u70b9\u51fb\u5c4f\u5e55\u9009\u62e9\u7684\u65b9\u5f0f\uff0c\u4e5f\u9700\u8981\u53d8\u6210\u4e00\u79cd\u7a7a\u95f4\u4ea4\u4e92")),(0,n.kt)("p",null,"\u8fd9\u5927\u5927\u589e\u52a0\u4e86\u95e8\u69db\uff0c\u4f8b\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6bcf\u4e00\u4e2a\u7269\u54c1\u7684\u9009\u62e9\u90fd\u9700\u8981\u79fb\u52a8\u865a\u62df\u9065\u611f\u6765\u786e\u5b9a\u8981\u64cd\u4f5c\u7684\u5185\u5bb9\u3002\u8fd9\u5728\u4f20\u7edf\u7684\u624b\u673a\u6216\u8005PC\u4e0a\u539f\u672c\u662f\u5f88\u7b80\u5355\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"kokid",src:l(5979).Z,width:"640",height:"360"})),(0,n.kt)("p",null,"\u9488\u5bf9\u6b64\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684\u7a7a\u95f4\u53d8\u6362\u65b9\u6cd5\uff0c\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u662f\u8ba9\u6240\u64cd\u4f5c\u7684\u5185\u5bb9\u5c3d\u53ef\u80fd\u8bed\u4e49\u5316\uff0c\u7136\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u501f\u52a9\u8bed\u97f3\u6765\u8f85\u52a9\u64cd\u4f5c\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u5f88\u96be\u4f7f\u7528\u8bed\u97f3\u8f85\u52a9\uff0c\u56e0\u4e3a\u4fe1\u606f\u90fd\u662f\u6309\u7ed3\u6784\u63cf\u8ff0\u7684\uff0c\u4fe1\u606f\u901a\u8fc7\u6ca1\u6709\u8bed\u4e49\u3002\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5bf9\u6bcf\u4e2a\u5143\u7d20\u52a0\u4e2a\u6807\u7b7e\u4e4b\u7c7b\u7684\u6765\u8f85\u52a9\u8bed\u97f3\u3002"),(0,n.kt)("p",null,"RealityIS\u7ec4\u4ef6\u7684\u8bed\u4e49\u7279\u6027\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u80fd\u5728\u521b\u4f5c\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u5c3d\u53ef\u80fd\u8f83\u5c11\u5bf9\u7a7a\u95f4\u4ea4\u4e92\u7684\u4f9d\u8d56\uff0c\u4ece\u800c\u4f7f\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u66f4\u7b80\u5355\u3002"),(0,n.kt)("h2",{id:"25-creation-ai"},"2.5 Creation AI"),(0,n.kt)("h3",{id:"251-semantics-based-creating"},"2.5.1 Semantics-based Creating"),(0,n.kt)("p",null,"\u57fa\u4e8e \u8bed\u4e49 \u7684 \u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("h3",{id:"252-procedural-content-generation"},"2.5.2 Procedural Content Generation"),(0,n.kt)("h3",{id:"253-intelligent-simulation"},"2.5.3 Intelligent Simulation"),(0,n.kt)("h3",{id:"254-research"},"2.5.4 Research"),(0,n.kt)("p",null,"\u884c\u4e3a\u5206\u6790\u4e0e\u7814\u7a76"),(0,n.kt)("h2",{id:"26-creation-cloud"},"2.6 Creation Cloud"),(0,n.kt)("h3",{id:"261-creation-management"},"2.6.1 Creation Management"),(0,n.kt)("h4",{id:"2611-creationid"},"2.6.1.1 CreationID"),(0,n.kt)("p",null,"2\u3001\u573a\u666f\u5230\u8fbe\u53ca\u65f6\u6027"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u7684\u573a\u666f\u90fd\u5f88\u5927\uff0c\u800c\u4e14\u90fd\u9884\u8bbe\u4e00\u5b9a\u7684\u6d41\u7a0b\u548c\u8def\u7ebf\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u73a9\u5bb6\u90fd\u5fc5\u987b\u4ece\u8d77\u70b9\uff0c\u901a\u8fc7\u524d\u9762\u6240\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u8bbe\u8ba1\u7684\u5173\u5361\uff0c\u624d\u80fd\u5230\u8fbe\u67d0\u4e2a\u573a\u666f\u70b9\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u662f\u9759\u6001\u573a\u666f\u5982\u5854\u9632\uff0c\u4e09\u6d88\u6e38\u620f\uff0c\u6a21\u62df\u7ecf\u8425\u6e38\u620f\uff0c\u5b83\u7684\u72b6\u6001\u4e5f\u4e0d\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u4ece\u96f6\u5f00\u59cb\u628a\u524d\u9762\u7684\u7b49\u7ea7\u90fd\u5b8c\u6210\u4e86\uff0c\u624d\u80fd\u770b\u5230\u8be5\u573a\u666f\u7684\u67d0\u4e2a\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5982\u4e16\u754c\u76f8\u5bf9\u6bd4\u8f83\u9759\u6001\u7684\u5f00\u653e\u573a\u666f\uff0c\u5b83\u7684\u6574\u4e2a\u4e16\u754c\u90fd\u5f88\u5927\uff0c\u4f60\u5f88\u96be\u8ba9\u53e6\u4e00\u4e2a\u73a9\u5bb6\u76f4\u63a5\u5b9a\u4f4d\u5230\u67d0\u4e2a\u4f60\u6307\u5b9a\u7684\u5730\u65b9\uff0c\u4ed6\u4eec\u53ef\u80fd\u8981\u6709\u4e00\u4f1a\u624d\u80fd\u5230\u8fbe\uff0c\u4f8b\u5982\u4e00\u822c\u4f1a\u5206\u4e3a\u4e00\u4e9b\u533a\uff0c\u73a9\u5bb6\u53ef\u80fd\u80fd\u8fdb\u53bb\u4e00\u4e2a\u5927\u533a\u4e00\u4e2a\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u4f46\u662f\u5269\u4e0b\u7684\u8981\u72ec\u7acb\u884c\u8d70\u4e00\u6bb5\u65f6\u95f4\uff0c\u5e76\u4e14\u8981\u77e5\u9053\u65b9\u5411")),(0,n.kt)("p",null,"\u7136\u800c\u6211\u4eec\u9700\u8981\u7684\u662f\u8ba9\u88ab\u5206\u4eab\u7684\u73a9\u5bb6\u80fd\u591f\u6700\u53ca\u65f6\u7684\u3001\u7acb\u523b\u5448\u73b0\u67d0\u4e2a\u5174\u8da3\u70b9\uff0c\u5e76\u4e14\u670b\u53cb\u770b\u5230\u7684\u662f\u540c\u4e00\u72b6\u6001\uff0c\u751a\u81f3\u540c\u4e00\u4e2aCamera\u7684\u4f4d\u7f6e\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u901a\u5e38\u662f\u5c0f\u573a\u666f\u7684\uff0c\u72ec\u7acb\u7684\uff0c\u65e0\u6bd4\u8f83\u590d\u6742\u72b6\u6001\u7684\u64cd\u4f5c"),(0,n.kt)("h3",{id:"262--creation-code-library"},"2.6.2 Creation Code Library"),(0,n.kt)("p",null,"\u4ee3\u7801\u5e93\u662f\u4ee5\u6807\u51c6\u4e3a\u5355\u4f4d\u5bf9\u5176\u8fdb\u884c\u5206\u7c7b\uff0c\u6bcf\u4e2a\u6807\u51c6\u4f1a\u5bf9\u5e94\u65e0\u6570\u4e2a\u5b9e\u73b0\u8be5\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u6807\u51c6\u5e76\u4e0d\u5305\u542b\u7ec4\u4ef6\uff0c\u5b83\u53ea\u4f5c\u4e3a\u7528\u6237\u9009\u62e9\u7ec4\u4ef6\u6216\u8005\u5f00\u53d1\u8005\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u5206\u7c7b\uff0c\u4f8b\u5982\u4e3a\u4e86\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u67d0\u4e2a\u7ec4\u4ef6\u53ef\u80fd\u4f7f\u7528\u6765\u81ea\u4e24\u4e2a\u6807\u51c6\u7684\u7b26\u53f7\u3002"),(0,n.kt)("h4",{id:"2621-\u6807\u51c6\u7ba1\u7406"},"2.6.2.1 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u5b83\u5c31\u662f\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u56f4\u7ed5\u6807\u51c6\u4f1a\u6709\u793e\u533a\u548c\u8ba8\u8bba\uff0c\u6807\u51c6\u4f5c\u4e3a\u4e00\u79cd\u7ec4\u4ef6\u5206\u7c7b\u548c\u68c0\u7d22\u4f9d\u636e\uff0c\u53ef\u4ee5\u67e5\u8be2\u6240\u6709\u4e0e\u8be5\u6807\u51c6\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u540d\u79f0\u662f\u552f\u4e00\u7684\u3002"),(0,n.kt)("p",null,"\u4e0d\u540c\u7684\u5f00\u53d1\u8005\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7c7b\u4f3c\u7684\u6807\u51c6\uff0c\u53ea\u662f\u4f60\u9700\u8981\u53bb\u53d1\u5c55\u81ea\u5df1\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u901a\u8fc7\u81ea\u5df1\u5f00\u53d1\u66f4\u4e30\u5bcc\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u9080\u8bf7\u522b\u7684\u5f00\u53d1\u8005\u9488\u5bf9\u4f60\u7684\u6807\u51c6\u5f00\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u6807\u51c6\u53ea\u5305\u542b\u4e24\u4e2a\u7248\u672c\uff0c\u4ee5\u51cf\u5c11\u7248\u672c\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff0c\u4ee5\u53ca\u59cb\u7ec8\u4fdd\u6301\u7528\u6237\u7ec4\u4ef6\u66f4\u65b0\uff0c\u53c2\u89c14.11.3.4\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"},"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5305\u7684\u7ba1\u7406\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8868\u5199\u7ec4\u4ef6\u65f6\uff0c\u5bf9\u5f15\u7528\u7684\u6807\u51c6\u7b26\u53f7\u8fdb\u884c\u89e3\u91ca\u548c\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u5bf9\u5b9e\u4f53\u6dfb\u52a0\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u65f6\uff0c\u81ea\u52a8\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u4ee5\u53ca\u52a8\u6001\u4fee\u6539Creation Table\u7684\u5e03\u5c40")),(0,n.kt)("p",null,"\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u8fd9\u91cc\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u624b\u52a8\u7ef4\u62a4\u7248\u672c\u53f7\uff0c\u53c2\u89c12.7.5\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"263-multi-player--services"},"2.6.3 Multi-player Services"),(0,n.kt)("h4",{id:"2631-voice-service"},"2.6.3.1 Voice Service"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And epic is con conscientiously making an effort to do this in everything we do. Uh, for example, we're moving to a web RTC based, uh, voice coms framework, um, in Fortnite for voice and text and video chat, so that we can start integrating with other services, you know, other platforms, other stores, other echo systems, other chat clients, um, and have shared social experiences across different game clients. You know, we already have some standards for identity and authentication. We can expand them from there with new standards, for friends and connectivity.")),(0,n.kt)("h3",{id:"264-\u7aef\u4e91\u534f\u540c"},"2.6.4 \u7aef\u4e91\u534f\u540c"),(0,n.kt)("p",null,"\u73b0\u6709\u5f15\u64ce\u67b6\u6784\u5f88\u96be\u505a\u5230\u7aef\u4e91\u534f\u540c\uff0c\u4f8b\u5982\u5927\u5bb6\u60f3\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u548c\u4ea4\u4e92\u653e\u7aef\u4fa7"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u7aef\u53ef\u4ee5\u5171\u4eab\u7684\u5728\u591a\u4e2a\u7528\u6237\u4e4b\u95f4\u5171\u4eab")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u90fd\u5f88\u96be\uff0c\u6216\u8005\u5728\u539f\u6709\u5f15\u64ce\u67b6\u6784\u4e0b\u62c6\u5206\u5f88\u96be\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5176\u5b9e\u8fd8\u6709\u53e6\u5916\u4e00\u4e9b\u534f\u540c\uff0c\u4f8b\u5982AOT\u7684\u9884\u7f16\u8bd1\u7b49\uff0c\u8fd9\u79cd\u9700\u8981\u8f6f\u4ef6\u67b6\u6784\u8ddf\u81ea\u5df1\u6d41\u7a0b\u7684\u8054\u5408\u8bbe\u8ba1\u3002"),(0,n.kt)("h4",{id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"},"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7ec4\u4ef6\u90fd\u5e94\u8be5\u5728\u4e91\u7aef\u6267\u884c\uff0c\u5c24\u5176\u8003\u8651\u5230\u5f88\u591a\u903b\u8f91\u5b9e\u9645\u4e0a\u8ddf\u7528\u6237\u663e\u793a\u662f\u65e0\u5173\u7684\u3002"),(0,n.kt)("h4",{id:"2642-client-as-a-display"},"2.6.4.2 Client as a Display"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6838\u5fc3\u601d\u8def\uff1a\u7aef\u4fa7\u53ea\u9700\u8981\u5b58\u50a8\u548c\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u5185\u5bb9\uff0c\u6bd4\u5982\u5927\u90e8\u5206UI\u548c\u89c6\u89c9\u6548\u679c\u76f8\u5173\u7684\u5185\u5bb9\u3002\u5176\u4ed6\u7684\u903b\u8f91\u548c\u6570\u636e\uff0c\u5982\u679c\u5b83\u4eec\u867d\u7136\u662f\u6838\u5fc3\u6570\u636e\uff0c\u4f46\u662f\u4e0d\u4f1a\u76f4\u63a5\u663e\u793a\uff0c\u4e5f\u4e0d\u5e94\u8be5\u5b58\u5728\u4e8e\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u811a\u672c\u4e2d\u8981\u533a\u5206\u54ea\u4e9b\u662f\u663e\u793a\u7ec4\u4ef6\uff0c\u54ea\u4e9b\u6570\u636e\u662f\u8ddf\u663e\u793a\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u4e0e\u663e\u793a\u76f8\u5173\u7684\u6570\u636e\uff0c\u5b83\u4eec\u5728\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u90fd\u4f1a\u6709\u5b58\u50a8\u7684\u503c\uff0c\u4f46\u662f\u8fd9\u4e9b\u503c\u6709\u53ef\u80fd\u662f\u670d\u52a1\u5668\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u5982\u679c\u662f\u670d\u52a1\u5668\u5199\u5165\u7684\u503c\uff0c\u670d\u52a1\u5668\u4f1a\u81ea\u52a8\u5904\u7406\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u8fd9\u4e2a\u503c\u597d\u50cf\u5c31\u662f\u7aef\u4fa7\u81ea\u5df1\u67d0\u4e2a\u903b\u8f91\u8ba1\u7b97\u7684\uff0c\u5b83\u968f\u65f6\u53ef\u4ee5\u4ece\u5185\u5b58\u4e2d\u83b7\u53d6\u5230\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u8981\u5c06\u8fd9\u4e00\u5207\u9690\u85cf\u8d77\u6765\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u4ed6\u50cf\u4e00\u4e2a\u865a\u62df\u5185\u5b58\uff0c\u7aef\u4fa7\u968f\u65f6\u90fd\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("h4",{id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"},"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"),(0,n.kt)("h4",{id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"},"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"),(0,n.kt)("h4",{id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f"},"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f"),(0,n.kt)("h3",{id:"265-\u5e76\u884c\u8ba1\u7b97"},"2.6.5 \u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u5f88\u96be\u62bd\u53d6\u51fa\u5c0f\u9897\u7c92\u7684\u8ba1\u7b97\uff0c\u6240\u4ee5\u51e0\u4e4e\u65e0\u6cd5\u505a\u5e76\u884c\u8ba1\u7b97\uff0c\u4e00\u4e2a\u6e38\u620f\u5fc5\u987b\u5728\u4e00\u4e2a\u673a\u5668\u4e0a\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\u548c\u4ee3\u7801\u3002\u800c\u5f53\u8fd9\u4e2a\u201c\u6e38\u620f\u201d\u662f\u4e00\u4e2a\u65e0\u7a77\u7684\u5143\u5b87\u5b99\u4e16\u754c\u65f6\uff0c\u8fd9\u79cd\u8ba1\u7b97\u4f1a\u53d8\u5f97\u8d8a\u6765\u8d8a\u4f4e\u6548\u548c\u6602\u8d35\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u505a\u6cd5\uff0c\u5982\u679c\u4e0d\u5bf9\u6570\u636e\u505a\u7cbe\u5fc3\u7684\u7ba1\u7406\uff0c\u6700\u591a\u53ea\u80fd\u505a\u5230\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5757\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u5316\u6d41\u6c34\u7ebf")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u4e3b\u8981\u95ee\u9898\u662f\uff0c\u5b83\u7684\u6570\u636e\u4ecd\u7136\u6ca1\u6709\u62c6\u5206\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u5b83\u53ef\u4ee5\u5728\u4e00\u4e2a\u673a\u5668\u5185\u5f88\u597d\u5730\u505a\u591a\u7ebf\u7a0b\uff0c\u4f46\u662f\u5f53\u5206\u914d\u5230\u591a\u53f0\u673a\u5668\u65f6\uff0c\u6bcf\u53f0\u673a\u5668\u90fd\u8981\u62f7\u8d1d\u51e0\u4e4e\u6240\u6709\u7684\u3001\u76f8\u540c\u7684\u6570\u636e\uff0c\u4f7f\u5f97\u5e76\u884c\u8ba1\u7b97\u7684\u7ba1\u7406\u96be\u5ea6\u5927\u5927\u589e\u52a0\u3002"),(0,n.kt)("p",null,"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b\uff0c\u56e0\u4e3a\u6d41\u6c34\u7ebf\u4e4b\u95f4\u7684\u987a\u5e8f\uff0c\u4e5f\u4f1a\u589e\u52a0\u7ba1\u7406\u548c\u8c03\u5ea6\u7684\u96be\u5ea6\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u4e3b\u8981\u9488\u5bf9 GPU\uff0c\u7531\u4e8eGPU\u8ba1\u7b97\u662f\u9ad8\u5ea6\u5e76\u884c\u7684\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u4f9d\u8d56\u6bd4\u8f83\u5c0f \uff0c\u6240\u6709\u7406\u8bba\u4e0a\u53ef\u4ee5\u5206\u533a\u57df\u6216\u8005\u5206\u5757\u8fdb\u884c\u8ba1\u7b97\u3002\u4f46\u8fd9\u4e0d\u662f\u7edd\u5bf9\u7684\uff0c\u4f8b\u5982\u7eb9\u7406\u91c7\u6837\uff0c\u9634\u5f71\uff0c\u540e\u5904\u7406\u7b49\u6280\u672f\uff0c\u901a\u8fc7\u662f\u9700\u8981\u5bf9\u7eb9\u7406\u8fdb\u884c\u4efb\u610f\u91c7\u6837\u7684\uff0c\u91c7\u7528\u865a\u62df\u5316\u6d41\u6c34\u7ebf\u8fd9\u4e00\u5757\u6709\u5f88\u591a\u95ee\u9898\u9700\u8981\u5904\u7406\u3002\u76ee\u524d\u770b\u8d77\u6765\u4ec5\u6709\u7c7b\u4f3cEpic Games\u7684\u51e0\u4f55\u88c1\u526a\u662f\u5408\u7406\u7684\uff0c\u4fdd\u8bc1\u8ba1\u7b97\u662f\u7ef4\u6301\u5728\u4e00\u4e2a\u4e0a\u9650\uff0c\u800c\u73b0\u4ee3GPU\u8ba1\u7b97\u8fd9\u6837\u7684\u4e0a\u9650\u901a\u5e38\u95ee\u9898\u4e0d\u5927\u3002\u4f46\u7f3a\u70b9\u662f\u8fd9\u90e8\u5206\u6570\u636e\u7ba1\u7406\u7684\u5f00\u9500\u4e5f\u4e0d\u5c0f\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0d\u7ba1\u600e\u6837\uff0cGPU\u7684\u6e32\u67d3\u90e8\u5206\u901a\u8fc7\u88c1\u526a\uff0c\u76ee\u524d\u770b\u8d77\u6765\u662f\u5b58\u5728\u6bd4\u8f83\u5b8c\u5584\u7684\u7406\u8bba\u548c\u5de5\u7a0b\u5b9e\u8df5\u4e86\uff0c\u6240\u4ee5\u6700\u5927\u7684\u95ee\u9898\u662fCPU\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5f53\u6240\u6709\u8ba1\u7b97\u5904\u4e8e\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\uff0c\u903b\u8f91\u8ba1\u7b97\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u770b\uff0cOOP\u5fc5\u7136\u4e0d\u5408\u9002\uff0cUnreal Engine\u7684\u65b9\u5f0f\u8fd8\u6ca1\u6709\u5b58\u5728\u8f83\u5927\u7684\u95ee\u9898\uff0c\u662f\u56e0\u4e3a\u5b83\u7684\u6e38\u620f\u903b\u8f91\u90e8\u5206\u7684\u89c4\u6a21\u8fd8\u4e0d\u591f\u5927\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5fc5\u7136\u8981\u5c06\u6570\u636e\u548c\u903b\u8f91\u62c6\u5206\u6210\u4e00\u6bb5\u4e00\u6bb5\u5c0f\u7684\u8ba1\u7b97\u5355\u5143\uff0c\u4e0d\u7ba1\u5bf9\u4e8e\u6570\u636e\u8fd8\u662f\u8ba1\u7b97\u6307\u4ee4\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f97\u53ef\u4ee5\u65e0\u9650\u5e76\u884c\u5316\uff0c\u56e0\u6b64ECS\u7c7b\u4f3c\u7684\u6570\u636e\u9a71\u52a8\u51e0\u4e4e\u662f\u672a\u6765\u552f\u4e00\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5b83\u5728\u4e00\u4e2a\u7a0b\u5e8f\u5185\u90e8\u5929\u751f\u5730\u5c06\u6570\u636e\u548c\u903b\u8f91\u533a\u5206\u51fa\u6765\u3002"),(0,n.kt)("h4",{id:"2651-\u5206\u5e03\u5f0fcreation-table"},"2.6.5.1 \u5206\u5e03\u5f0fCreation Table"),(0,n.kt)("p",null,"\u5f53\u8ba1\u7b97\u548c\u6570\u636e\u80fd\u591f\u88ab\u5212\u5206\u4e3a\u5c0f\u5757\u6570\u636e\u65f6\uff0c\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u4e0d\u518d\u88ab\u770b\u505a\u662f\u4e00\u4e2a\u4e0d\u53ef \u5206\u5272\u7684\u6574\u4f53\uff0c\u5b83\u7684\u6570\u636e\u548c\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u88ab\u7b80\u5355\u5730\u5212\u5206\u4e3a\u591a\u4e2a\u72ec\u7acb\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u5f88\u5bb9\u6613\u88ab\u5206\u914d\u5230\u591a\u53f0\u670d\u52a1\u5668\u4e0a\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u4fdd\u8bc1\u77e5\u9053\u4e0d\u540c\u7684\u6e38\u620f\u5bf9\u8c61\u5bf9\u5e94\u7684\u670d\u52a1\u5668\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u5e76\u884c\u8ba1\u7b97\u67b6\u6784\u53d8\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e32\u67d3\u5728\u5ba2\u6237\u7aef\u6267\u884c\uff0c\u901a\u8fc7\u5f88\u597d\u7684\u51e0\u4f55\u88c1\u526a\u4fdd\u8bc1\u6027\u80fd\u7684\u4e0a\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5728\u4e91\u7aef\u88ab\u5f88\u597d\u5730\u5206\u5e03\u8ba1\u7b97")),(0,n.kt)("h3",{id:"266-rpc"},"2.6.6 RPC"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d"),(0,n.kt)("h2",{id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"},"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"),(0,n.kt)("h3",{id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf"},"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf"),(0,n.kt)("h3",{id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b"},"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143"},"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143"),(0,n.kt)("p",null,"\u4ee5\u5217\u8868\u4e3a\u6838\u5fc3\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u5c06\u4ee3\u7801\u5206\u4e3a\u4e24\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u64cd\u4f5c\u5217\u8868\u7684\u6838\u5fc3\u529f\u80fd\uff0c\u5982filter\uff0cmap\u548creduce"),(0,n.kt)("li",{parentName:"ul"},"\u9ad8\u9636\u51fd\u6570")),(0,n.kt)("p",null,"\u524d\u8005\u5728\u51fd\u6570\u5f0f\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u901a\u5e38\u901a\u8fc7\u5e93\u7684\u5f62\u5f0f\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u66f4\u591a\u4f7f\u7528\u8fd9\u4e9b\u5e93\u5e76\u63d0\u4f9b\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\u6709\u7c7b\u4f3c\u7684\u601d\u60f3\uff0c\u6211\u4eec\u5c06\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u770b\u505a\u5217\u8868\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u90fd\u662f\u5e76\u884c\u8ba1\u7b97\uff0c\u90fd\u662f\u9488\u5bf9\u5217\u8868\u7684\u8ba1\u7b97\uff0c\u54ea\u6015\u6574\u4e2a\u5217\u8868\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\uff08\u8fd0\u884c\u65f6\u4f1a\u6839\u636e\u5143\u7d20\u4e2a\u6570\u4ee5\u51b3\u5b9a\u662f\u5426\u9700\u8981\u4f7f\u7528\u5e76\u884c\u5316\u6307\u4ee4\uff09\u3002\u5728RealityIS\u4e2d\uff0cfilter\uff0cmap\u548creduce\u8fd9\u4e9b\u5e95\u5c42\u51fd\u6570\u7531\u5e73\u53f0\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u7c7b\u4f3c\u4e8e\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u7ec4\u4ef6\u5305\u542b\u4e09\u4e2a\u51fd\u6570\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"filter\uff1a\u63d0\u4f9b\u7b5b\u9009\u6761\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"map\uff1a\u4e00\u822c\u7684\u903b\u8f91\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"reduce\uff1a\u5408\u5e76\u7edf\u8ba1\u4e4b\u7c7b\u7684\u529f\u80fd\uff0c\u9700\u8981\u6dfb\u52a0\u4e00\u4e9b\u7d2f\u52a0\u503c\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd0\u884c\u65f6\u4f1a\u9996\u5148\u6267\u884cfilter\u51fd\u6570\uff0c\u4ee5\u786e\u4fddmap\u548creduce\u6267\u884c\u7684\u51fd\u6570\u53c2\u6570\u5bf9\u8c61\u4e0d\u80fd\u4e3a\u7a7a\uff0c\u4e8b\u5b9e\u4e0a\u8fd0\u884c\u65f6\u4e5f\u4fdd\u8bc1filter\u6267\u884c\u7684\u96c6\u5408\u5217\u8868\u4e5f\u4e0d\u4f1a\u4e3a\u7a7a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5CreationSctipt\u6ca1\u6709\u7a7a\u503c\u7684\u6982\u5ff5\u3002\u6bcf\u4e2a\u7ec4\u4ef6\u5904\u7406\u7684\u4e5f\u90fd\u662f\u5355\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5b83\u4eec\u4e00\u822c\u4e0d\u5904\u7406\u96c6\u5408\u3002"),(0,n.kt)("h4",{id:"2722-\u5217\u8868\u64cd\u4f5c"},"2.7.2.2 \u5217\u8868\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u5b83\u4e0d\u5149\u662f\u5904\u7406\u8be5\u7ec4\u4ef6\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4ed6\u5176\u5b9e\u4e5f\u5305\u542b\u5904\u7406\u96c6\u5408\u7684\u529f\u80fd\uff0c\u5373\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4f8b\u5982map"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u6240\u5728\u96c6\u5408\u7684\u903b\u8f91\uff0c\u4f8b\u5982filter\u6216\u8005reduce\uff0corder\u7b49")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u540e\u8005\u6765\u8bf4\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u901a\u5e38\u6d89\u53cafor\uff0cwhile\u5faa\u73af\u7b49\uff0c\u5728\u4e00\u4e2a\u96c6\u5408\u7684\u5c42\u9762\u53bb\u64cd\u4f5c\uff0c\u4f8b\u5982Unity ECS\u4e2d\u5f00\u53d1\u8005\u662f\u83b7\u53d6\u4e00\u4e2a\u7c7b\u578b\u7684\u5217\u8868\uff0c\u7136\u540e\u5f00\u53d1\u8005\u81ea\u5b9a\u51b3\u5b9a\u5bf9\u5217\u8868\u7684\u904d\u5386\u3002"),(0,n.kt)("p",null,"\u501f\u52a9\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u4e00\u5217\u7406\u5ff5\uff0c\u4f8b\u5982Erlang\uff0c\u5b83\u4eec\u628afor\u6216\u8005while\u4e4b\u7c7b\u7684\u5faa\u73af\u8f6c\u6362\u4e3a\u9012\u5f52\uff0c\u7136\u540e\u5f00\u53d1\u8005\u5c31\u53ef\u4ee5\u805a\u7126\u4e8e\u5904\u7406\u5bf9\u5355\u4e2a\u5143\u7d20\u7684\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5c06\u5bf9\u5217\u8868\u7684\u64cd\u4f5c\u548c\u5bf9\u5143\u7d20\u7684\u64cd\u4f5c\u7edf\u4e00\u5230\u5355\u4e2a\u64cd\u4f5c\u4e2d\u3002\u5f53\u7136\u5bf9\u4e8e\u96c6\u5408\u64cd\u4f5c\u6765\u8bb2\uff0c\u5176\u4e2d\u7684\u5355\u4e2a\u64cd\u4f5c\u53ef\u80fd\u6d89\u53ca\u5230\u5bf9\u591a\u79cd\u60c5\u51b5\u7684\u5904\u7406\uff0c\u8fd9\u79cd\u60c5\u51b5\u5012\u662f\u5f88\u597d\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u53c2\u89c1Erlang\u7684lists\u6a21\u5757\u3002"),(0,n.kt)("h3",{id:"273-\u6570\u636e\u9a71\u52a8"},"2.7.3 \u6570\u636e\u9a71\u52a8"),(0,n.kt)("h3",{id:"274-ecs"},"2.7.4 ECS"),(0,n.kt)("h3",{id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"},"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"),(0,n.kt)("p",null,"\u5305\u7ba1\u7406\u7684\u673a\u5236\u4e3b\u8981\u662f\u907f\u514d\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u89e6\u78b0\u548c\u914d\u7f6e\u522b\u4eba\u7684\u6e90\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u601d\u60f3\u4e0d\u540c\uff0cReality World\u7684\u4e3b\u8981\u521b\u65b0\u5728\u4e8e\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u914d\u7f6e\u7248\u672c\u53f7\u4e4b\u7c7b\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e0d\u7ba1\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u7528\u6237\u6765\u8bb2\uff0c\u6574\u4e2a\u6d41\u7a0b\u548c\u601d\u8def\u90fd\u7b80\u5316\u4e86\u5f88\u591a\u3002"),(0,n.kt)("h3",{id:"276-\u52a8\u6001\u89e3\u91ca"},"2.7.6 \u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e8b\u60c5\u90fd\u5728\u5b9e\u65f6\u53d8\u5316\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u7f16\u8bd1\u578b\u5e73\u53f0\u80af\u5b9a\u4e0d\u518d\u5408\u9002\u3002\u52a8\u6001\u89e3\u6790\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\uff0c\u53ea\u662f\u8981\u505a\u5230\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c40\u90e8\u89e3\u6790\uff0c\u6bcf\u4e2a\u5c40\u90e8\u7ec4\u4ef6\u53ef\u4ee5\u5355\u72ec\u89e3\u91ca\uff0c\u800c\u4e0d\u9700\u8981\u6539\u4e86\u4e00\u4e2a\u811a\u672c\u9700\u8981\u5176\u4ed6\u4eba\u90fd\u91cd\u65b0\u89e3\u91ca\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u6548\u7387\u8981\u8db3\u591f\u9ad8")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u53d1\u5e03\u7684\u65f6\u5019\u5c31\u7f16\u8bd1\u597d\u4e86\uff0c\u540e\u7eed\u5bf9\u7ec4\u4ef6\u7684\u4f7f\u7528\u90fd\u4e0d\u4f1a\u91cd\u65b0\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u7f16\u8bd1\u3002\u5f53\u7136\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5e95\u5c42\u7684\u865a\u62df\u673a\u9700\u8981\u5c06\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u5730\u5740\u8ba1\u7b97\u6b63\u786e\u5e76\u7ed9\u5230\u7ec4\u4ef6\u6e90\u4ee3\u7801\u3002\u8fd9\u79cd\u9700\u6c42\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\u662f\u4e0d\u592a\u53ef\u884c\u7684\uff0c\u4f46\u662f\u6709\u4e86Creation Table\u5c06\u6240\u6709\u6570\u636e\u8f6c\u6362\u4e3a\u6570\u7ec4\u7684\u5f62\u5f0f\u540e\uff0c\u7ec4\u4ef6\u4e2d\u7684\u6240\u6709\u5730\u5740\u90fd\u662f\u4e00\u4e2a\u76f8\u5bf9\u5730\u5740\u7684\u504f\u79fb\uff0c\u6240\u4ee5\u80fd\u591f\u7b80\u5316\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7684\u52a8\u6001\u4ee3\u7801\u6267\u884c\uff0c\u6574\u4e2a\u7f16\u8bd1\u7cfb\u7edf\u5fc5\u987b\u4ee5\u4e00\u4e2a\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u80fd\u8ddf\u5176\u4ed6\u7684\u4ee3\u7801\u6709\u4efb\u4f55\u5f62\u5f0f\u7684\u5173\u8054\u6216\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136\uff0c\u4f20\u7edf\u7684\u591a\u4e2a\u4ee3\u7801\u94fe\u63a5\u5728\u4e00\u8d77\u7684\u8fc7\u7a0b\u5f0f\u56e0\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u4f8b\u5982\u7f16\u8bd1\u5668\u4e3a\u4e86\u89e3\u91ca\u67d0\u4e2a\u7c7b\u578b\uff0c\u6216\u8005\u5c06\u53d8\u91cf\u6267\u884c\u67d0\u4e2a\u5185\u5b58\u5730\u5740\uff0c\u6216\u8005\u4e3a\u67d0\u4e2a\u5bf9\u8c61\u5206\u914d\u591a\u5927\u7684\u5185\u5b58\u6570\u636e\uff0c\u8fd9\u4e9b\u5bfc\u81f4\u9700\u8981\u4ea4\u53c9\u5173\u8054\u3002\u800c\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u662f\u65e0\u5173\u8054\u7684\uff0c\u81f3\u5c11\u7ec4\u4ef6\u4e0d\u9700\u8981\u77e5\u9053\u5176\u4ed6\u7ec4\u4ef6\u7684\u4efb\u4f55\u4fe1\u606f\uff0c\u800c\u5373\u4f7f\u7b80\u6d01\u7684\u5173\u7cfb\u4e5f\u662f\u7531\u865a\u62df\u673a\u6765\u51b3\u5b9a\u7684\uff0c\u6240\u4ee5\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u5bf9\u6bcf\u4e2a\u7ec4\u4ef6\u6267\u884c\u72ec\u7acb\u7684\u7f16\u8bd1\u5c31\u8db3\u591f\u4e86\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u662f\u5728Runtime\u7684\u65f6\u5019\uff0c\u6839\u636e\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u5b9e\u65f6\u52a0\u8f7d\u7f16\u8bd1\u597d\u7684\u7ec4\u4ef6\u673a\u5668\u7801\u6216\u8005\u5b57\u8282\u7801\uff0c\u7136\u540e\u6839\u636e\u914d\u7f6e\u8fdb\u884c\u5b9e\u65f6\u6570\u636e\u5206\u914d\uff0c\u5e76\u5c06\u5b9e\u65f6\u7684\u6570\u636e\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\u6307\u4ee4\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u52a8\u6001\u5206\u914d\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u5e03\u4f1a\u5f71\u54cd\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u4f46\u8fd9\u6837\u7684\u65f6\u673a\u53ea\u53d1\u751f\u5728\u7b2c\u4e00\u6b21\u52a0\u8f7d\u7a0b\u5e8f\uff0c\u4ee5\u53ca\u7528\u6237\u5bf9\u5b9e\u4f53\u7684\u7ec4\u4ef6\u8fdb\u884c\u4fee\u6539\u7684\u65f6\u5019\uff0c\u56e0\u6b64\u603b\u4f53\u4e0a\u4e0d\u4f1a\u5bf9\u8fd0\u884c\u65f6\u6027\u80fd\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6548\u7387\u6bd4\u8f83\u4f4e\uff0c\u56e0\u6b64\u53c8\u4e0d\u80fd\u5c06\u6240\u6709\u7684\u903b\u8f91\u548c\u6570\u636e\u90fd\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u90a3\u6837\u6574\u4e2a\u7cfb\u7edf\u7684\u6548\u7387\u5c06\u4f1a\u975e\u5e38\u4f4e\u3002\u7406\u60f3\u7684\u72b6\u6001\u662f\u80fd\u591f\u7ed3\u5408\u811a\u672c\u8bed\u8a00\u7684\u7075\u6d3b\u6027\u4e0e\u539f\u751f\u7cfb\u7edf\u8bed\u8a00\u7684\u9ad8\u6027\u80fd\uff0c\u7136\u540e\u4e00\u822c\u7684\u8bed\u8a00\u673a\u5236\u5374\u5f88\u96be\u505a\u5230\u8fd9\u6837\uff0c\u56e0\u4e3a\u6570\u636e\u8ddf\u7a0b\u5e8f\u903b\u8f91\u901a\u5e38\u662f\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5b83\u901a\u5e38\u90fd\u662f\u6709\u4e00\u53f0\u673a\u5668\u540c\u65f6\u6267\u884c\u6570\u636e\u7684\u5206\u914d\u548c\u903b\u8f91\u7684\u89e3\u91ca\u3002\u6bd4\u5982\u73b0\u5728\u7684\u811a\u672c\u8bed\u8a00\uff0c\u5b83\u90fd\u5305\u542b\u81ea\u5df1\u72ec\u7acb\u7684\u865a\u62df\u673a\uff0c\u4f7f\u5f97\u811a\u672c\u4e2d\u7684\u4e00\u4e9b\u90fd\u662f\u7531\u8be5\u865a\u62df\u673a\u7ba1\u7406\u7684\u3002\u865a\u62df\u673a\u672c\u8eab\u5c31\u662f\u4e00\u53f0\u80fd\u591f\u6267\u884c\u901a\u7528\u8ba1\u7b97\u7684\u673a\u5668\u3002\u5373\u4f7f\u811a\u672c\u8bed\u8a00\u4e5f\u80fd\u591f\u8ddf\u81ea\u5b9a\u4e49\u7684\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u4ea4\u4e92\uff0c\u6574\u4e2a\u4ea4\u4e92\u7684\u8fc7\u7a0b\u5374\u662f\u975e\u5e38\u590d\u6742\uff0c\u6bd4\u5982\u8fd9\u79cd\u590d\u6742\u7684\u8fc7\u7a0b\u80af\u5b9a\u4e0d\u9002\u5408\u666e\u901a\u7684\u7528\u6237\u53bb\u914d\u7f6e\uff0c\u800c\u4e14\u4ed6\u4e5f\u8981\u6c42\u66b4\u9732\u4e00\u4e9b\u5e95\u5c42\u7684\u63a5\u53e3\u7ed9\u5e73\u53f0\uff0c\u8fd9\u6837\u5c06\u4f1a\u5e26\u6765\u5b89\u5168\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u914d\u4ea4\u7ed9\u865a\u62df\u673a\u6765\u505a\uff0c\u80fd\u591f\u7b80\u5316\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u8ba9\u5bbf\u4e3b\u5c42\u6765\u7ba1\u7406\u548c\u52a0\u8f7d\u6570\u636e\uff0c\u5c06\u5927\u5927\u63d0\u5347\u7cfb\u7edf\u7684\u6027\u80fd\u3002\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u7701\u6389\u5f88\u591a\u4e8b\u60c5\uff0c\u53ea\u4e13\u6ce8\u4e8e\u552f\u4e00\u9700\u8981\u4e13\u6ce8\u7684\u903b\u8f91\u8ba1\u7b97\u6307\u4ee4\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7528\u62c5\u5fc3\u590d\u6742\u6570\u636e\u7684\u5206\u914d\u548c\u5bfb\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u5783\u573e\u56de\u6536\u7ba1\u7406\u590d\u6742\u7684\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u7701\u6389\u6570\u636e\u5206\u914d\uff0c\u4ee5\u53ca\u66f4\u7b80\u5355\u7684\u7ec4\u4ef6\u5f00\u53d1\u89c4\u5219\uff08\u4f8b\u5982\u4e0d\u9700\u8981\u5b9a\u4e49\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u673a\u5236\uff09\uff0c\u6574\u4e2a\u89e3\u91ca\u5668\u4e5f\u4f1a\u53d8\u5f97\u975e\u5e38\u7b80\u5355")),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6574\u4f53\u4e0a\u7c7b\u4f3cAOT\uff0c\u4f46\u662f\u5b83\u4e5f\u4e0d\u662f\u5168\u90e8AOT\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u636e\u7ec4\u7ec7\u90e8\u5206\u9700\u8981\u5728Runtime\u6267\u884c\uff0c\u8fd9\u6837\u4fdd\u8bc1\u65e2\u6709\u6bd4\u8f83\u597d\u7684\u52a8\u6001\u6027\uff0c\u53c8\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\u4fdd\u8bc1\u3002"),(0,n.kt)("h3",{id:"277-\u8d23\u6743\u8ba9\u6e21"},"2.7.7 \u8d23\u6743\u8ba9\u6e21"),(0,n.kt)("p",null,"\u5c06\u5f88\u591a\u539f\u672c\u9700\u8981\u7a0b\u5e8f\u5458\u7ba1\u7406\u7684\u4e8b\u60c5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u7ba1\u7406\uff0c\u4f8b\u5982\u5bf9\u8c61\u7684\u67e5\u627e\u7b5b\u9009\uff0c\u8d4b\u503c\uff0c\u8fd0\u7528\uff0c\u5bf9\u8c61\u72b6\u6001\u7ba1\u7406\u7b49"),(0,n.kt)("h3",{id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217"},"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6700\u597d\u7684\u5e76\u53d1\u6a21\u578b\u5c31\u662fErlang\u7684\u72ec\u7acb\u8fdb\u7a0b\u5e76\u53d1\u65b9\u5f0f\uff0c\u4f46\u662f\u57fa\u4e8eECS\u7684\u6570\u636e\u7ba1\u7406\u4f1a\u8ba9\u8fd9\u4e2a\u4e8b\u60c5\u53ef\u4ee5\u505a\u7684\u66f4\u597d\u3002"),(0,n.kt)("h4",{id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"},"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6309\u7167\u4f20\u7edf\u7684\u505a\u6cd5\u53ef\u80fd\u5c31\u662f\u9700\u8981\u5355\u72ec\u6784\u5efa\u4e00\u4e9b\u6d88\u606f\u961f\u5217\uff0c\u8ba9\u540e\u901a\u8fc7\u6d88\u606f\u961f\u5217\u9a71\u52a8\u66f4\u65b0\uff0c\u6216\u8005\u8bf4\u5c31\u662f\u5355\u7eaf\u7684\u4f46\u6d88\u606f\u76f4\u63a5\u901a\u77e5\u3002"),(0,n.kt)("p",null,"\u5728ECS\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5b9e\u4f53\u5bf9\u8c61\u7684\u6570\u636e\u5217\u8868\u672c\u8eab\u5c31\u5f53\u505a\u4e00\u4e2a\u6d88\u606f\u961f\u5217\uff0c\u5b83\u6ee1\u8db3\u6d88\u606f\u961f\u5217\u7684\u57fa\u672c\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5217\u8868\u90fd\u5904\u7406\u540c\u7c7b\u578b\u7684\u6d88\u606f\uff0c\u56e0\u6b64\u80fd\u591f\u5b9a\u4f4d\u63a5\u53d7\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u672c\u8eab\u5c31\u643a\u5e26\u4e86\u901a\u4fe1\u7684\u6d88\u606f\u6570\u636e")),(0,n.kt)("p",null,"\u518d\u52a0\u4e0a\u4e00\u4e9b\u5bf9\u5217\u8868\u7684filter\u7b49\u64cd\u4f5c\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e00\u4e9b\u5197\u4f59\u7684\u6570\u636e\uff0c\u6bd4\u5982\u90a3\u4e9b\u6ca1\u6709\u4efb\u4f55\u53d8\u66f4\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3afilter\u672c\u8eab\u7684\u4e00\u4e2a\u9009\u9879\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6f5c\u5728\u7684\u95ee\u9898\u662f\u6027\u80fd\u95ee\u9898\uff0c\u5373\u5217\u8868\u6570\u636e\u4e0d\u53ef\u4ee5\u4fee\u6539\uff0c\u6216\u8005\u91cd\u65b0\u7ec4\u7ec7\u7684\u4ee3\u4ef7\u5f88\u9ad8\u3002\u4f46\u662f\u4e5f\u6709\u4e24\u79cd\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8003\u8651\u5230\u6570\u636e\u662f\u53ea\u8bfb\u7684\uff0c\u5176\u5b9e\u4e5f\u53ef\u4ee5\u628a\u8fd9\u90e8\u5206\u91cd\u65b0\u590d\u5236\u4e00\u4efd\u91cd\u65b0\u7ec4\u7ec7\uff0c\u4f20\u9012\u7ed9\u4f7f\u7528\u8005\uff0c\u8fd9\u6837\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u8ba1\u7b97\u6027\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5e72\u8106\u4e0d\u7ba1\u7406\u95ee\u9898\u4e5f\u4e0d\u5927")),(0,n.kt)("h4",{id:"2782-\u5e76\u884c\u4f38\u7f29\u6027"},"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027"),(0,n.kt)("p",null,"Erlang\u5e76\u4e0d\u64c5\u957f\u505aGPU\u7f16\u7a0b\uff0c\u56e0\u4e3a\u8fd9\u7c7b\u95ee\u9898\u901a\u5e38\u90fd\u9700\u8981\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u6570\u503c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"Erlang\u4e2d\u7684\u6613\u5e76\u884c\u95ee\u9898\u6240\u5904\u7684\u5c42\u7ea7\u8981\u66f4\u9ad8\u4e00\u4e9b\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5b83\u4eec\u90fd\u662f\u50cf\u804a\u5929\u670d\u52a1\u5668\uff0c\u7535\u8bdd\u4ea4\u6362\u673a\uff0cweb\u670d\u52a1\u5668\uff0c\u6d88\u606f\u961f\u5217\uff0cweb\u722c\u866b\u4e4b\u7c7b\u7684\u5e94\u7528\uff0c\u53ef\u4ee5 \u628a\u8fd9\u7c7b\u5e94\u7528\u4e2d\u5de5\u4f5c\u7684\u6267\u884c\u4f53\u8868\u793a\u6210\u4e00\u7ec4\u76f8\u4e92\u72ec\u7acb\u7684\u903b\u8f91\u5b9e\u4f53\u3002"),(0,n.kt)("p",null,"Erlang\u4ec5\u5173\u6ce8\u51fd\u6570\u534a\u8eab\uff0c\u4e0d\u5173\u6ce8\u6570\u636e\u7ba1\u7406\uff0c\u56e0\u6b64\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u50cfOOP\u4e00\u6837\uff0c\u5206\u5e03\u5728\u5206\u6563\u7684\u533a\u57df\uff0c\u4e0d\u5177\u5907\u6570\u636e\u5c40\u90e8\u6027\u3002"),(0,n.kt)("p",null,"RealityIS\u80fd\u591f\u7cbe\u5fc3\u5730\u5bf9\u540c\u7c7b\u578b\u6570\u636e\u8fdb\u884c\u66f4\u597d\u5730\u7ba1\u7406\uff0c\u4ee5\u5b9e\u73b0\u66f4\u597d\u7684\u5e76\u884c\u8ba1\u7b97\u3002\u4ece\u8fd9\u4e2a\u5c42\u9762\u770b\uff0c\u4ed6\u6709\u70b9\u7c7b\u4f3c\u4e8e\u628aErlang\u4e2d\u90a3\u4e9b\u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u90fd\u4e32\u8054\u8d77\u6765\uff0c\u653e\u5728\u5176\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u7531\u4e8eErlang\u5e76\u6ca1\u6709\u7ba1\u7406\u6570\u636e\uff0c\u6240\u6709\u8981\u60f3\u5728Erlang\u4e2d\u7ba1\u7406\u5e76\u884c\u5176\u5b9e\u5f88\u96be\uff0c\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u8fd9\u4e00\u5c42\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cErlang\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0e\u4e4b\u76f8\u5173\u7684\u7f3a\u70b9\u662f\uff0c\u4e0d\u80fd\u4fdd\u8bc1\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u987a\u5e8f\u3002\u4f60\u53ea\u80fd\u53d1\u8d77\u8fdb\u7a0b\uff0c\u751a\u81f3\u4e0d\u80fd\u53d6\u56de\u8fd4\u56de\u503c\uff0c\u4e5f\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u6216\u8005\u6709\u6ca1\u6709\u6267\u884c\u5b8c\u6bd5\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u4e0a\u8ff0\u7684\u56e0\u7d20\uff0c\u5728RealityIS\u4e2d\uff0c\u8fd8\u53ef\u4ee5\u5b9e\u73b0\u5927\u89c4\u6a21\u5e76\u884c\u8ba1\u7b97\u3002\u5728\u4f20\u7edf\u7684\u7aef\u4fa7\u6216\u8005\u5355\u673a\u7684\u6e38\u620f\u8fd0\u884c\u65f6\uff0c\u540c\u4e00\u7c7b\u578b\u7684\u5b9e\u4f53\u5bf9\u8c61\u901a\u5e38\u662f\u5c11\u6570\uff0c\u6bd4\u5982\u53ef\u80fd\u5c31\u662f\u51e0\u4e2a\uff0c\u751a\u81f3\u5f88\u5c11\u8d85\u8fc7\u51e0\u5341\u4e2a\uff0c\u9664\u975e\u8ddf\u56fe\u5f62\u6e32\u67d3\u76f8\u5173\u7684\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u6211\u4eec\u628a\u8fd9\u4e9b\u8ba1\u7b97\u653e\u5230\u4e91\u7aef\uff0c\u591a\u4e2a\u7528\u6237\u5c31\u53ef\u80fd\u6c47\u96c6\u66f4\u5927\u7684\u540c\u7c7b\u5bf9\u8c61\uff0c\u8fd9\u79cd\u6570\u91cf\u4e5f\u8bb8\u5927\u5230\u51e0\u5343\u4e0a\u4e07\u800c\u53ef\u4ee5 \u5b8c\u5168\u8f6c\u79fb\u5230GPU\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u3002\u8fd9\u80fd\u591f\u66f4\u5145\u5206\u7684\u5229\u7528\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u95ee\u9898\u662f\uff0c\u6bcf\u4e2a \u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u7ed3\u679c\u6216\u6d88\u606f\u53ef\u80fd\u8981\u5206\u53d1\u5230\u6570\u5343\u4e2a\u5ba2\u6237\u7aef\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4e5f\u8bb8\u53ef\u4ee5\u901a\u8fc7\u4f20\u7edf\u7684\u4e00\u4e9b\u670d\u52a1\u5668\u76f8\u5173\u6280\u672f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"279-let-is-crash"},"2.7.9 Let is crash"),(0,n.kt)("p",null,"\u9519\u8bef\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u56e0\u6b64\u627e\u51fa\u597d\u7684\u5904\u7406\u9519\u8bef\u548c\u95ee\u9898\u7684\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u4f01\u56fe\u9632\u6b62\u9519\u8bef\u7684\u51fa\u73b0\uff0c\u8fd9\u662fErlang\u7684\u54f2\u5b66\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u65b9\u5f0f\u6216\u8005\u539f\u5219\uff1a\u5982\u679c\u7cfb\u7edf\u4e2d\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u9519\u8bef\uff0c\u9020\u6210\u4e86\u6570\u636e\u7834\u574f\uff0c\u90a3\u4e48\u8fd9\u4e2a\u90e8\u5206\u5e94\u8be5\u5c3d\u5feb\u6b7b\u5fd9\u4ee5\u9632\u6b62\u9519\u8bef\u548c\u574f\u6570\u636e\u4f20\u64ad\u5230\u7cfb\u7edf\u7684\u5269\u4f59\u90e8\u5206\u3002"),(0,n.kt)("h4",{id:"2791-\u5bb9\u9519\u673a\u5236"},"2.7.9.1 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("p",null,"\u4e00\u79cd\u66f4\u5b89\u5168\u7684\u89e3\u51b3\u65b9\u6cd5\u662f\uff0c\u786e\u4fdd\u8ba9\u5d29\u6e83\u548c\u6b63\u5e38\u5173\u95ed\u5177\u6709\u540c\u6837\u7684\u6548\u679c\u3002\u8fd9\u79cd\u6548\u679c\u53ef\u4ee5\u901a\u8fc7\u50cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5171\u4eab\uff0c\u7cfb\u7edf\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u5b8c\u5168\u9694\u79bb"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u8d4b\u503c\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u9694\u79bb\u5355\u4e00\u8fdb\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4f7f\u7528\u9501\uff0c\u5982\u679c\u53d1\u751f\u5d29\u6e83\u65f6\u6709\u90e8\u5206\u6570\u636e\u662f\u88ab\u52a0\u9501\u7684\uff0c\u90a3\u4e48\u4f1a\u5bfc\u81f4\u5176\u4ed6\u8fdb\u7a0b\u65e0\u6cd5\u8bbf\u95ee\u8fd9\u90e8\u5206\u6570\u636e\uff0c\u5bfc\u81f4\u8fd9\u90e8\u5206\u6570\u636e\u72b6\u6001\u4e0d\u4e00\u81f4")),(0,n.kt)("p",null,"\u5728Erlang\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u574f\u4e86\uff0c\u4f1a\u53d1\u9001\u6700\u540e\u4e00\u6761\u6d88\u606f\u51fa\u53bb\uff0c\u5e76\u4e14\u7cfb\u7edf\u4f1a\u4fdd\u8bc1\u8fd9\u6761\u6d88\u606f\u88ab\u53d1\u51fa\u53bb\uff0c\u53ca\u8fd9\u4e2a\u90e8\u5206\u9ed8\u8ba4\u8ba4\u4e3a\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5185\u90e8\u7684\u4e0d\u540c\u5730\u65b9\u53ef\u80fd\u5bfc\u81f4\u51fa\u9519\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u4e0d\u662f\u50cfErlang\u4e00\u6837\u72ec\u7acb\u8fdb\u7a0b\u6267\u884c\uff0c\u800c\u662f\u4f1a\u53bb\u4fee\u6539\u4e00\u4e9b\u5171\u4eab\u6570\u636e\uff0c\u56e0\u6b64\u5982\u679c\u8fd9\u79cd\u4fee\u6539\u4e4b\u540e\u518d\u53d1\u751f\u5d29\u6e83\uff0c\u5c31\u4f1a\u5bfc\u81f4\u5176\u4ed6\u6a21\u5757\u7684\u72b6\u6001\u53ef\u80fd\u4e0d\u662f\u9884\u671f\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u9632\u6b62\u76f8\u5173\u7684\u4e0d\u4e00\u81f4\u95ee\u9898\uff0c\u53ef\u4ee5\u4ece\u4e00\u4e0b\u65b9\u9762\u8fbe\u5230\u7c7b\u4f3cErlang\u7684\u6548\u679c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u5141\u8bb8\u4fee\u6539\u4e00\u4e2a\u5171\u4eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u540c\u65f6\u5bf9\u591a\u4e2a\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u3002\u56e0\u4e3a\u672c\u8eab\u6211\u4eec\u7684\u5c5e\u6027\u7ecf\u8fc7\u4e86\u6807\u51c6\u7684\u7cbe\u5fc3\u8bbe\u8ba1\uff0c\u6bcf\u4e2a\u5c5e\u6027\u90fd\u662f\u4ee3\u8868\u5177\u6709\u6bd4\u8f83\u72ec\u7acb\u7684\u610f\u4e49\uff0c\u56e0\u6b64\u4e0d\u540c\u5c5e\u6027\u7684\u4fee\u6539\u5e94\u8be5\u4f7f\u7528\u4e0d\u540c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5fc5\u987b\u786e\u4fdd\u5728\u6574\u4e2a\u7ec4\u4ef6\u6ca1\u6709\u9519\u8bef\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u540e\u624d\u4f1a\u5b89\u5168\u5730\u4fee\u6539\u5c5e\u6027\uff0c\u8fd9\u4e2a\u5c5e\u6027\u4fee\u6539\u5c31\u50cfErlang\u628a\u6d88\u606f\u53d1\u51fa\u53bb\u4e00\u6837\uff0c\u672c\u8eab\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u4e0a\u8ff0\u7684\u5c5e\u6027\uff0cRealityIS\u4e2d\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u5c31\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e00\u6837\uff0c\u5bf9\u5176\u4ed6\u72b6\u6001\u6570\u636e\u4e0d\u4f1a\u9020\u6210\u4efb\u4f55\u7834\u574f\uff0c\u56e0\u6b64\u53ef\u4ee5\u968f\u610f\u4e22\u5f03\u6389\u8be5\u7ec4\u4ef6\u6267\u884c\u7684\u90e8\u5206\u800c\u4e0d\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u50cfReduce\u7d2f\u52a0\u6570\u7684\u6982\u5ff5\u4e5f\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5904\u7406Reduce\uff0c\u5219\u5b83\u4e0d\u80fd\u5904\u7406Map\uff0c\u56e0\u4e3a\u4e24\u4e2a\u903b\u8f91\u53ef\u4ee5\u8fdb\u4e00\u6b65\u62c6\u5206\uff0c\u5426\u5219\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4e0d\u597d\u7ba1\u7406\u3002")),(0,n.kt)("h4",{id:"2792-\u5e76\u53d1\u8c03\u5ea6"},"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u4e86\u57fa\u4e8e\u5f02\u6b65\u6d88\u606f\u4f20\u9012\u7684\u8f7b\u91cf\u8fdb\u7a0b\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4e0d\u80fd\u4f9d\u9760\u64cd\u4f5c\u7cfb\u7edf\u6765\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u800c\u662f\u901a\u8fc7\u5728VM\u4e2d\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u4f7f\u53ef\u4ee5\u5bf9\u4f18\u5316\u548c\u53ef\u9760\u6027\u8fdb\u884c\u5b8c\u5168\u638c\u63a7\u3002\u6bd4\u5982\uff0c\u5728Erlang\u4e2d\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5927\u6982\u5360\u7528300\u4e2a\u5b57\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u521b\u5efa\u65f6\u95f4\u53ea\u6709\u51e0\u5fae\u79d2\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7ba1\u7406\u7a0b\u5e8f\u6240\u521b\u5efa\u7684\u6240\u6709\u8fdb\u7a0b\uff0cVM\u4f1a\u4e3a\u6bcf\u4e2a\u6838\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\u6765\u5145\u5f53\u4e00\u4e2a\u8c03\u5ea6\u5668\uff08scheduler\uff09\u3002\u6bcf\u4e2a\u8c03\u5ea6\u5668\u6709\u4e00\u4e2a\u8fd0\u884c\u961f\u5217\uff08run queue\uff09\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2aErlang\u8fdb\u7a0b\u5217\u8868\uff0c\u4f1a\u7ed9\u5176\u4e2d\u7684\u6bcf\u4e2a\u8fdb\u7a0b\u5206\u914d\u4e00\u5c0f\u6bb5\u8fd0\u884c\u65f6\u95f4\u7247\u3002\u5f53\u67d0\u4e2a\u8c03\u5ea6\u5668\u7684\u8fd0\u884c\u961f\u5217\u4e2d\u4efb\u52a1\u8fc7\u591a\u65f6\uff0c\u4f1a\u628a\u4e00\u90e8\u5206\u4efb\u52a1\u8fc1\u79fb\u5230\u5176\u4ed6\u961f\u5217\u4e2d\u3002\u8fd9\u610f\u5473\u7740\uff0c\u6bcf\u4e2aErlangVM\u90fd\u4f1a\u8fdb\u884c\u8d1f\u8f7d\u64cd\u4f5c\uff0c\u7a0b\u5e8f\u5458\u65e0\u9700\u5173\u5fc3\u3002VM\u8fd8\u4f1a\u8fdb\u884c\u5176\u4ed6\u4f18\u5316\u5de5\u4f5c\uff0c\u4f8b\u5982\uff0c\u5bf9\u53d1\u5411\u8fc7\u8f7d\u8fdb\u7a0b\u7684\u6d88\u606f\u8fdb\u884c\u9650\u901f\uff0c\u4ee5\u8c03\u8282\u548c\u5747\u8861\u8d1f\u8f7d\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddfRealityIS\u7684\u8bbe\u8ba1\u7406\u5ff5\u4e00\u6837\uff0c\u8c03\u5ea6\u5668\u662f\u6bcf\u4e2a\u6838\u7684\u65f6\u949f\u63a7\u5236\uff0c\u5c31\u662f\u6e38\u620f\u4e2d\u7684update\u5faa\u73af\uff0c\u5f53\u7136\u8fd9\u91cc\u5904\u7406\u65f6\u95f4\u5206\u914d\u672c\u8eab\uff0c\u8fd8\u9700\u8981\u505a\u4e00\u4e9b\u5728\u6838\u5185\u8fdb\u884c\u8c03\u5ea6\u548c\u6838\u4e4b\u95f4\u901a\u4fe1\u7684\u4e8b\u60c5\u3002\u800c\u6d88\u606f\u5217\u8868\u5b9e\u9645\u4e0a\u662f\u643a\u5e26\u8005\u51fd\u6570\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u800c\u5728RealityIS\u4e2d\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5217\u8868\u7684\u6570\u636e\uff0c\u5b9e\u9645\u4e0a\u4e5f\u5c31\u662f\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u5230\u7684\u51fd\u6570\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u53ea\u4e0d\u8fc7\u76f8\u5bf9\u4e8eErlang\u7684\u5e76\u53d1\u6027\uff0cRealityIS\u8fd8\u540c\u65f6\u5b9e\u73b0\u4e86\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"},"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"),(0,n.kt)("p",null,"OOP\u901a\u5e38\u901a\u8fc7\u590d\u6742\u7684\u7ee7\u627f\u673a\u5236\u6765\u5b9a\u4e49\u4e00\u4e2a\u5305\u542b\u7279\u5b9a\u529f\u80fd\u96c6\u5408\u7684\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u529f\u80fd\u90fd\u5df2\u51fd\u6570\u7684\u5f62\u5f0f\u88ab\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u4e2d\u3002"),(0,n.kt)("p",null,"FP\u5219\u5f3a\u8c03\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f\uff0c\u5176\u4e2d\u7684\u903b\u8f91\u4e3b\u8981\u662f\u56e0\u4e3aFP\u4e2d\u7684\u51fd\u6570\u901a\u5e38\u662f\u201c\u65e0\u72b6\u6001\u7684\u201d\uff0c\u72ec\u7acb\u7684\uff0c\u5bf9\u5e94\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u8f93\u5165\uff0c\u5b83\u7684\u8f93\u51fa\u603b\u662f\u4fdd\u6301\u4e0d\u53d8\uff0c\u56e0\u4e3a\u4e0d\u6d89\u53ca\u5230\u4efb\u4f55\u5185\u90e8\u72b6\u6001\u7684\u4fee\u6539\uff0c\u6240\u4ee5\u540c\u6837\u7684\u8f93\u5165\u4e0d\u4f1a\u53d7\u5230\u4efb\u4f55\u5f71\u54cd\u3002\u56e0\u6b64\uff0c\u8fd9\u6837\u7684\u76f8\u4e92\u72ec\u7acb\u7684\u7eaf\u51fd\u6570\u662f\u53ef\u4ee5\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4e0d\u540c\u51fd\u6570\u7ec4\u5408\u7684\u4e00\u4e2a\u66f4\u590d\u6742\u7684\u51fd\u6570\u5c31\u6784\u6210\u4e00\u4e2a\u7279\u5b9a\u529f\u80fd\u7684\u590d\u6742\u51fd\u6570\u6216\u8005\u590d\u6742\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u63cf\u8ff0\u53ef\u4ee5\u770b\u51fa\uff0c\u6240\u8c13\u7684\u7ec4\u5408\u5176\u5b9e\u5e76\u6ca1\u6709\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5e76\u4e0d\u50cfECS\u4e2d\u90a3\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e00\u6837\uff0c\u4ed6\u5176\u5b9e\u9690\u542b\u7740\u4e00\u5b9a\u7684\u7f16\u7a0b\u903b\u8f91\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u51fd\u6570\u7684\u7ec4\u5408\u662f\u901a\u8fc7\u5c06\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u5408\uff0c\u5b83\u66f4\u50cf\u662f\u4e00\u4e9b\u51fd\u6570\u8fde\u8f7d\u4e00\u8d77\uff0c\u800c\u6bcf\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\uff0c\u50cf\u63d2\u69fd\u4e00\u6837\u6263\u5728\u4e00\u8d77\uff0c\u4f46\u662f\u8fd9\u4e9b\u5361\u6263\u672c\u8eab\u662f\u6709\u4e00\u5b9a\u903b\u8f91\u7684\uff0c\u4f60\u9700\u8981\u77e5\u9053\u5c06\u54ea\u4e2a\u51fd\u6570\u8fde\u5728\u53e6\u5916\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u4e0a\uff0c\u4e5f\u5373\u662f\u610f\u5473\u7740\u4f60\u5176\u5b9e\u8981\u660e\u767d\u6240\u6709\u8fd9\u4e9b\u51fd\u6570\u8fde\u5728\u4e00\u8d77\u7684\u6267\u884c\u903b\u8f91\u548c\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e00\u822c\u8fd9\u79cd\u7ec4\u5408\u7684\u5c42\u6b21\u4e0d\u4f1a\u5f88\u6df1\uff0c\u4f8b\u5982\u901a\u5e38\u90fd\u662f\u4e00\u4e2a\u201c\u4e1a\u52a1\u51fd\u6570\u201d+\u4e00\u4e2a\u9ad8\u9636\u51fd\u6570\u5373\u53ef\uff0c\u4f46\u7406\u8bba\u4e0a\u53ef\u4ee5\u6839\u636e\u62bd\u8c61\u5c42\u7ea7\u4ea7\u751f\u90a3\u79cd\u591a\u5c42\u7684\u590d\u6742\u51fd\u6570\u5d4c\u5957\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5982\u679c\u67d0\u4e2a\u51fd\u6570\u7684\u4fee\u6539\u6d89\u53ca\u5230\u53c2\u6570\u53ca\u8fd4\u56de\u503c\u7c7b\u578b\u8fd9\u79cd\u7ed3\u6784\u6027\u7684\u4fee\u6539\uff0c\u5176\u5b9e\u201c\u7ec4\u5408\u201d\u672c\u8eab\u8fd8\u662f\u9700\u8981\u4fee\u6539\u7684\uff0c\u53ea\u662f\u76f8\u5bf9\u4e8eOOP\u800c\u8a00\uff0c\u5b83\u53ef\u80fd\u53ea\u4fee\u6539\u76f8\u5173\u7684\u51fd\u6570\u8c03\u7528\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u91cd\u65b0\u53bb\u4fee\u6539\u7ee7\u627f\u7ed3\u6784\u6216\u8005\u4fee\u6539\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u800c\u8a00\uff0c\u7ec4\u4ef6\u672c\u8eab\u5145\u5f53\u4e86\u4e1a\u52a1\u51fd\u6570\uff0c\u9ad8\u9636\u51fd\u6570\u88ab\u9690\u85cf\u5728\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u8c03\u5ea6\u4e2d\uff0c\u56e0\u6b64\u8fd9\u91cc\u4e0d\u5b58\u5728\u90a3\u79cd\u51fd\u6570\u8c03\u7528\u51fd\u6570\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u56e0\u6b64\u4e5f\u5373\u610f\u5473\u7740\u6211\u4eec\u65e0\u6cd5\u5b9e\u73b0\u591a\u5c42\u51fd\u6570\u5d4c\u5957\uff0c\u56e0\u4e3a\u603b\u5171\u5c31\u53ea\u6709\u4e24\u5c42\uff1a\u5e73\u53f0\u4e00\u5c42\uff08\u9ad8\u9636\u51fd\u6570\uff09\uff0c\u7ec4\u4ef6\u4e00\u5c42\u3002"),(0,n.kt)("h4",{id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"},"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("p",null,"\u5f53\u7136\u7ec4\u4ef6\u4e4b\u95f4\u662f\u5b58\u5728\u5173\u7cfb\u7684\uff0c\u8fd9\u79cd\u5173\u7cfb\u4f53\u73b0\u5728\u524d\u540e\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4e32\u8054\uff1a\u524d\u8005\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5728\u5728\u4e00\u4e2a\u53d8\u91cf\u4e2d\u4f5c\u4e3a\u540e\u4e00\u4e2a\u7ec4\u4ef6\u7684\u53c2\u6570\uff0c\u8fd9\u79cd\u5173\u7cfb\u8ddf\u591a\u4e2a\u51fd\u6570\u5d4c\u5957\u662f\u7c7b\u4f3c\u7684\uff1a\u4e00\u4e2a\u51fd\u6570\u88ab\u4f5c\u4e3a\u51fd\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u4e5f\u53ea\u662f\u5728\u90a3\u4e2a\u51fd\u6570\u4e2d\u53bb\u8ba1\u7b97\u4e00\u4e2a\u7279\u5b9a\u7684\u503c\uff0c\u8fd9\u4e2a\u51fd\u6570\u6700\u7ec8\u5b9e\u9645\u4f7f\u7528\u7684\u4e5f\u662f\u5b83\u8ba1\u7b97\u7684\u7ed3\u679c\uff0c\u81f3\u4e8e\u5b83\u52a8\u6001\u4f20\u7ed9\u5b83\u7684\u53c2\u6570\uff0c\u672c\u8eab\u5b58\u5728\u4e8eRealityIS\u7684\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u4e0a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\uff0c\u8ddfFP\u4e2d\u57fa\u4e8e\u51fd\u6570\u7684\u7ec4\u5408\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u867d\u7136\u7ec4\u4ef6\u4e4b\u4e2d\u770b\u8d77\u6765\u6709\u72b6\u6001\u53c2\u6570\uff0c\u4f46\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u5b9e\u73b0\u8ddfFP\u4e2d\u7684\u51fd\u6570\u662f\u4e00\u6837\u72ec\u7acb\u7684\uff0c\u8fd9\u4e9b\u53c2\u6570\u53ea\u662f\u7531\u4e1a\u52a1\u5c42\u4f20\u6765\u7684\u5b9e\u9645\u5904\u7406\u7684\u4e00\u4e2a\u6570\u636e\u800c\u5df2"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u5bf9\u4e8eFP\u800c\u8a00\uff0c\u4ed6\u5f88\u591a\u65f6\u5019\u4e5f\u9700\u8981\u53bb\u8bb0\u4f4f\u4e00\u4e9b\u72b6\u6001\uff0c\u7ec4\u4ef6\u7b80\u5316\u4e86\u8fd9\u79cd\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u7279\u522b\u7684\uff0c\u8fd9\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u8981\u6c42\u7528\u6237\u7406\u89e3\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u8fd9\u79cd\u903b\u8f91\u5173\u7cfb\u8fd8\u5305\u62ec\u51fd\u6570\u7684\u7b7e\u540d\u53ca\u51fd\u6570\u7b49\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u6d41\u7a0b")),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u662f\uff0c\u8fd9\u6837\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u592a\u5bb9\u6613\u4ece\u5168\u5c40\u628a\u63e1\u6e05\u695a\uff0c\u800c\u4e14\u6709\u53ef\u80fd\u6f0f\u6389\u4e00\u4e9b\u4e1c\u897f\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u597d\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fdb\u884c\u81ea\u52a8\u8f7d\u5165\u3002"),(0,n.kt)("h4",{id:"27102-machinations"},"2.7.10.2 Machinations"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u7531Machinations\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"2711-\u6a21\u5f0f\u5339\u914d"},"2.7.11 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u7684\u51e0\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u7ed1\u5b9a\uff0c\u7701\u7565\u53c2\u6570\u4f20\u9012\u7684\u8d4b\u503c\uff0c\u7ed1\u5b9a\u7b49\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u89e3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u6761\u4ef6\u8bed\u53e5"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8c03\u7528\u89e3\u8026")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u56e0\u7d20\u5728CreationScript\u4e2d\u672c\u8eab\u5c31\u4e0d\u662f\u95ee\u9898\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\uff0c\u56e0\u4e3a\u5728\u7ec4\u4ef6\u4e2d\u5f00\u53d1\u8005\u90fd\u6ca1\u6709\u673a\u4f1a\u53bb\u6784\u5efa\u7ed3\u6784\u548c\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u8fd8\u662f\u9700\u8981\u63d0\u4f9b\u3002\u4f46\u4e0d\u7528\u50cfFP\u90a3\u6837\u6210\u4e3a\u8bed\u8a00\u7684\u6838\u5fc3\u529f\u80fd\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c"},"enum ShapeType {Retangle, Circle, Square};\nstruct Shape {\n enum ShapeType kind;\n union {\n struct {int width, height; } retangleData;\n struct {int radius; } circleData;\n struct {int side; } squareData;\n } shapeData;\n};\n\ndouble area(struct Shape* s){\n if(s->kind == Rectangle) {\n int width, ht;\n width = s->ShapeData.rectangleData.width;\n ht = s->ShapeData.rectangleData.height;\n return width * ht;\n }\n else if(s->kind == Circle){\n ...\n }\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5C\u4ee3\u7801\u57fa\u672c\u4e0a\u5c31\u662f\u5bf9\u51fd\u6570\u7684\u53c2\u6570\u6267\u884c\u6a21\u5f0f\u5339\u914d\u64cd\u4f5c\uff0c\u4f46\u7a0b\u5e8f\u5458\u5fc5\u987b\u7f16\u5199\u6a21\u5f0f\u5339\u914d\u7684\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u5b83\u662f\u6b63\u786e\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5bf9\u5e94\u7684Erlang\u4ee3\u7801\u91cc\uff0c\u6211\u4eec\u53ea\u9700\u8981\u7f16\u5199\u6a21\u5f0f\uff0cErlang\u7f16\u8bd1\u5668\u5c31\u4f1a\u751f\u6210\u6700\u4f73\u7684\u6a21\u5f0f\u5339\u914d\u4ee3\u7801\uff0c\u7528\u5b83\u6765\u9009\u62e9\u6b63\u786e\u7684\u7a0b\u5e8f\u5165\u53e3\u70b9\u3002"),(0,n.kt)("h4",{id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"},"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u867d\u7136CreationScript\u5e76\u4e0d\u9700\u8981\u5411\u5f00\u53d1\u8005\u63d0\u4f9b\u6a21\u5f0f\u5339\u914d\u7684\u8bed\u6cd5\u548c\u80fd\u529b\uff0c\u4f46\u662fCreationScript\u672c\u8eab\u5219\u4f1a\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5b9a\u4e49\u7ec4\u4ef6\u53c2\u6570\u7684\u65f6\u5019\uff0c\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u89e3\u6784\u7279\u5b9a\u89e3\u6784\u7684\u5c5e\u6027\u5e26\u6765\u7684\u8026\u5408\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\n")),(0,n.kt)("p",null,"\u8fd9\u91ccPosition\u53ef\u80fd\u5bf9\u5185\u90e8\u7684\u5143\u7ec4\u4f7f\u7528\u4e0d\u540c\u7684\u5c5e\u6027\u540d\u5b57\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5f00\u53d1\u8005\u9700\u8981\u53bb\u4e86\u89e3\u8fd9\u4e2a\u540d\u5b57\uff0c\u8fdb\u800c\u7f16\u5199\u7684\u7ec4\u4ef6\u4ee3\u7801\u4e0e\u6574\u4e2a\u540d\u5b57\u8026\u5408\uff0c\u6240\u4ee5\u4e0d\u5229\u7528\u51fd\u6570\u91cd\u7528\uff0c\u4f8b\u5982\u5177\u6709\u76f8\u540c\u6570\u636e\u7c7b\u578b\u7ec4\u5408\u7684\u5143\u7ec4\u5c31\u4e0d\u80fd\u518d\u4f7f\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7ec4\u4ef6\u7684\u53c2\u6570\u5fc5\u987b\u4f7f\u7528\u5143\u7ec4\u7684\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u8ba9\u7ec4\u4ef6\u53ef\u4ee5\u7f16\u5199\u4e0e\u5177\u4f53\u7ed3\u6784\u65e0\u5173\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h4",{id:"27122-\u540d\u5b57\u5339\u914d"},"2.7.12.2 \u540d\u5b57\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u662f\u5339\u914d\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6982\u5ff5\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\uff0c\u5373\u7f16\u8bd1\u5668\u53ea\u662f\u5e2e\u52a9\u4f60\u505a\u4e00\u4e2a\u7c7b\u578b\u68c0\u67e5\uff0c\u53ef\u4ee5\u8fbe\u5230\u4e24\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u5b9a\u51fd\u6570\u8c03\u7528\u7684\u5408\u6cd5\u6027\uff0c\u4fdd\u8bc1\u6b63\u786e\u7684\u53c2\u6570\u53ca\u5176\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5e2e\u52a9\u8282\u7701\u4e00\u4e9b\u5197\u4f59\u4ee3\u7801\uff0c\u6bd4\u5982\u5982\u679c\u4e24\u4e2a\u6570\u636e\u7684\u6570\u636e\u7c7b\u578b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5219\u9700\u8981\u62c6\u5f00\u4e3a\u57fa\u672c\u7c7b\u578b\u518d\u8fdb\u884c\u9010\u4e2a\u6bd4\u8f83\uff0c\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801\u4e0d\u5149\u5305\u542b\u4ece\u6570\u636e\u7ed3\u6784\u4e2d\u8bfb\u53d6\u7279\u5b9a\u7684\u6570\u636e\u5b57\u6bb5\uff0c\u8fd8\u5305\u62ec\u5bf9\u63a5\u53d7\u51fd\u6570\u53c2\u6570\u53d8\u91cf\u7684\u8d4b\u503c\uff0c\u6a21\u5f0f\u5339\u914d\u907f\u514d\u4e86\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801")),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e2a\u5b8c\u6574\u7684\u51fd\u6570\u7684\u8c03\u7528\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6307\u5b9a\u51fd\u6570\u53c2\u6570\uff0c\u5bf9\u4e8e\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u8fd8\u9700\u8981\u4e86\u89e3\u7ed3\u6784\u540e\u9762\u7684\u6570\u636e\u5e03\u5c40\uff0c\u8fd9\u4e9b\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u90fd\u662f\u5f88\u7e41\u7410\u7684\u3002"),(0,n.kt)("p",null,"\u540d\u5b57\u5339\u914d\u662f\u6a21\u5f0f\u5339\u914d\u7684\u5347\u7ea7\u7248\u672c\uff0c\u5b83\u6709\u4e24\u70b9\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7b80\u5316\u4e86\u6570\u636e\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u5b83\u9f13\u52b1\u66f4\u6241\u5e73\u7684\u6570\u636e\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u9664\u4e86\u4fdd\u8bc1\u7ed3\u6784\u5339\u914d\uff0c\u8fd8\u9700\u8981\u4fdd\u8bc1\u540d\u5b57\u5339\u914d\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u907f\u514d\u7528\u6237\u8f93\u5165\u53c2\u6570\uff0c\u51fd\u6570\u8c03\u7528\u9000\u5316\u4e3a\u8bed\u4e49\u7ec4\u5408")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u8fd9\u6837\u505a\u9700\u8981\u7ed3\u5408\u6570\u636e\u5b9a\u4e49\u7684\u5171\u8bc6\uff0c\u5373\u6240\u6709\u7a0b\u5e8f\u9762\u5411\u516c\u5171\u6570\u636e\u7f16\u7a0b\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7528\u6237\u53ef\u4ee5\u624b\u5de5\u6307\u5b9a\u53c2\u6570\uff0c\u6b64\u65f6\u540d\u5b57\u5339\u914d\u9000\u5316\u4e3a\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("h3",{id:"2712-\u5206\u5e03\u5f0f"},"2.7.12 \u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5206\u5e03\u5f0f\u5185\u7f6e\u4e8e\u8bed\u8a00\u5185\uff0c\u5728CreationVM\u4e0a\u5b9e\u73b0\u5206\u5e03\u5f0f\u8c03\u5ea6\uff0c\u4ee5\u53caUDP\u8fdc\u7a0b\u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"distributed",src:l(3973).Z,width:"2544",height:"1384"})),(0,n.kt)("h4",{id:"27121-actor\u6a21\u578b"},"2.7.12.1 Actor\u6a21\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Actor\u6a21\u578b\u4e2d\uff0cActor\u4e4b\u95f4\u662f\u9ad8\u5ea6\u72ec\u7acb\u7684\uff0c\u5e76\u4e14\u8ba1\u7b97\u5b8c\u8fd4\u56de\u7ed3\u679c\u5c31\u53ef\u4ee5\uff0c\u7136\u800c\u6e38\u620f\u4e2d\u7684\u72b6\u6001\u662f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u7684\uff0c\u6240\u4ee5\u8fd9\u5bfc\u81f4\u5b83\u5e76\u4e0d\u80fd\u5355\u7eaf\u5730\u628aActor\u5f53\u6210\u4e00\u4e2a\u72ec\u7acb\u5bf9\u8c61\uff0c\u4ec5\u4ec5\u4f7f\u7528\u6d88\u606f\u901a\u4fe1\u662f\u4e0d\u591f\u7684\uff0c\u4e5f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u5728\u7ba1\u7406\u4e0a\uff0c\u4ed6\u9700\u8981\u7ef4\u62a4\u4e00\u4e2aActor\u5217\u8868\uff0c\u5e76\u4fdd\u8bc1\u5b83\u4eec\u6bcf\u4e00\u5e27\u90fd\u4f1a\u6309\u7167\u67d0\u79cd\u987a\u5e8f\u6267\u884c\uff0cActor\u4e4b\u95f4\u5305\u542b\u4f9d\u8d56\u5173\u7cfb\uff1b\u800c\u4e0d\u4ec5\u4ec5\u662f\u72ec\u7acb\u7ba1\u7406\u6bcf\u4e2aActor\u81ea\u8eab\u7684\u72b6\u6001\u3002"),(0,n.kt)("h3",{id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"},"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u6709\u591a\u4e2a\u53c2\u6570\uff0c\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\u7684\u503c\u53ef\u4ee5\u5e26\u5165\u51fd\u6570\uff0c\u4f46\u662f\u6b64\u65f6\u4e0d\u8ba1\u7b97\uff0c\u800c\u662f\u5f62\u6210\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u5305\u542b\u4e00\u90e8\u5206\u4e0a\u4e0b\u6587\uff0c\u4f46\u662f\u8fd9\u4e2a\u4e0a\u4e0b\u6587\u662f\u4e0d\u53d8\u7684\u3002\u7136\u540e\u5f53\u6211\u4eec\u628a\u5269\u4e0b\u7684\u53c2\u6570\u5e26\u5165\u51fd\u6570\uff0c\u8fdb\u884c\u6574\u4e2a\u51fd\u6570\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u6548\u679c\u5c31\u662f\u67ef\u91cc\u5316\u6216\u8005\u79f0\u4e3a\u90e8\u5206\u65bd\u7528\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\uff0cRealityIS\u7684\u6574\u4e2a\u7ec4\u4ef6\u8ba1\u7b97\u65b9\u5f0f\uff0c\u8ddf\u67ef\u91cc\u5316\u7684\u601d\u8def\u662f\u7c7b\u4f3c\u7684\u3002\u4e00\u90e8\u5206\u5c5e\u6027\u5148\u5e26\u5165\u65e9\u671f\u7684\u4e00\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\uff0c\u662f\u5728\u4e3a\u540e\u7eed\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6784\u9020\u4e0a\u4e0b\u6587\u3002\u53ea\u4e0d\u8fc7\u6574\u4e2a\u4e0a\u4e0b\u6587\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u7ba1\u7406\uff0c\u800c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u624b\u52a8\u7ba1\u7406\uff0c\u5e76\u8bb0\u4f4f\u90a3\u4e9b\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(5335).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u8fd9\u4e2a\u601d\u8def\u662fRealityIS\u53ef\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u7684\u7406\u8bba\u57fa\u7840\uff0c\u6b63\u662f\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u90a3\u79cd\u5d4c\u5957\u7684\u67ef\u91cc\u5316\u673a\u5236\u53ef\u4ee5\u8f6c\u53d8\u4e3a\u6241\u5e73\u7684\u7ec4\u5408\u7ed3\u6784\u3002\u4f46\u662f\u5176\u540e\u9762\u7684\u6838\u5fc3\u7406\u8bba\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5982\u679c\u53ef\u89c6\u5316\u5c55\u5f00\uff0cRealityIS\u7684\u7ec4\u5408\u4e5f\u5e94\u8be5\u662f\u5d4c\u5957\u7684\uff0c\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u7ed3\u679c\u662f\u4e00\u81f4\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd0\u884c\u65f6\u4ee5\u4e0d\u540c\u7684\u65b9\u5f0f\u53bb\u7ef4\u6301\u95ed\u5305\u91cc\u9762\u7684\u90a3\u4e9b\u53d8\u91cf\u3002"),(0,n.kt)("h4",{id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6"},"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8bc1\u660e\uff0c\u7406\u8bba\u4e0aRealityIS\u7684\u7ec4\u4ef6\u7ec4\u5408\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u662f\u7b49\u6548\u7684\uff0c\u90a3\u4e48\u4e3a\u4ec0\u4e48\u80fd\u5b9e\u73b0\u6241\u5e73\u7ec4\u5408\u5462\uff1f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fd9\u91cc\u7684\u6838\u5fc3\u79d8\u5bc6\u5728\u4e8e\uff0c\u6e38\u620f\u673a\u5236\u4e2d\u7ec4\u4ef6\u7684\u8de8\u5e27\u901a\u4fe1\u5c06\u8d4b\u503c\u8bed\u53e5\u89e3\u8026\u4e86\uff01")),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u6216\u8005\u51fd\u6570\u7f16\u7a0b\u4e2d\uff0c\u4e00\u4e2a\u51fd\u6570\u63a5\u53d7\u53e6\u4e00\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u8d4b\u503c\u7ed9\u4e00\u4e2a\u53d8\u91cf\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u5b58\u50a8\u8d77\u6765\uff0c\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u901a\u5e38\u6839\u636e\u51fd\u6570\u7684\u4f5c\u7528\u57df\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u6b63\u662f\u56e0\u4e3a\u8d4b\u503c\u8bed\u53e5\uff0c\u6240\u4ee5\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u53ea\u80fd\u5d4c\u5957\u8fdb\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u968f\u610f\u7ec4\u5408\u5230\u4e00\u8d77\u7531\u5b83\u4eec\u81ea\u7531\u53d1\u6325\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u610f\u7ec4\u5408\u8981\u60f3\u81ea\u52a8\u53d1\u6325\u4f5c\u4e3a\uff0c\u8fd8\u9700\u8981\u53c2\u6570\u4e0e\u51fd\u6570\u4e4b\u95f4\u81ea\u52a8\u5173\u8054\u548c\u5173\u7cfb\uff0c\u8fd9\u5c31\u662fRealityIS\u5728\u5b9a\u4e49\u53d8\u91cf\u7684\u65f6\u5019\u5c31\u7ea6\u675f\u597d\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u901a\u8fc7\u8de8\u5e27\u7684\u8d4b\u503c\uff0c\u51fd\u6570\u53c2\u6570\u5c31\u4e00\u4e0d\u7528\u8ddf\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u662f\u8026\u5408\u5728\u4e00\u8d77\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u72ec\u7acb\u5b58\u5728\u548c\u7ec4\u5408\uff0c\u518d\u52a0\u4e0a\u4e0a\u8ff0\u63cf\u8ff0\u7684\u51fd\u6570\u4e0e\u53d8\u91cf\u4e4b\u95f4\u7684\u81ea\u52a8\u5173\u7cfb\uff0c\u6240\u4ee5\u5c31\u80fd\u591f\u5b9e\u73b0\u5d4c\u5957\u51fd\u6570\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1RealityIS\u4e0d\u652f\u6301\u53d6\u81ea\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5b9e\u4f53\u5bf9\u8c61\u7684\u53c2\u6570\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u628a\u6765\u81eaA\u7684\u5f71\u54cd\u8ba1\u7b97\u7684\u51fd\u6570\u7ed3\u679c\u5b58\u50a8\u5728B\u4e2d\uff0c\u7136\u540e\u518d\u53d6B\u7684\u503c\u5728C\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u5176\u5b9e\u95f4\u63a5\u5c31\u662f\u4e00\u4e2a\u591a\u4e2a\u6df1\u5c42\u51fd\u6570\u5d4c\u5957\u7684\u7ed3\u679c\u3002\u66f4\u6df1\u5c42\u6b21\u7684\u5d4c\u5957\u53ef\u4ee5\u4e00\u6b21\u6765\u63a8\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u662f\u5b8c\u5168\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u53ea\u662f\u4e0a\u4e0b\u6587\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u8ba1\u7b97\u7ed3\u679c\u88ab\u8de8\u5e27\u7684\u5b9e\u4f53\u53d8\u91cf\u8fdb\u884c\u4fdd\u5b58\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u7b80\u5316\u4e86\u6574\u4e2a\u8ba1\u7b97\u67b6\u6784\uff0c\u540c\u65f6\u7b80\u5316\u4e86\u7528\u6237\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"},"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u901a\u8fc7\u5d4c\u5957\u6765\u5b9e\u73b0\u7ec4\u5408\u3002\u5c3d\u7ba1\u5355\u4e2a\u51fd\u6570\u7684\u529f\u80fd\u662f\u5c0f\u7c92\u5ea6\u7684\uff0c\u4f46\u662f\u5d4c\u5957\u7684\u51fd\u6570\u5219\u5f62\u6210\u4e86\u7279\u5316\uff0c\u5d4c\u5957\u7ec4\u5408\u540e\u7684\u51fd\u6570\u51e0\u4e4e\u90fd\u662f\u5177\u6709\u4e0d\u540c\u903b\u8f91\u7684\u51fd\u6570\uff0c\u56e0\u6b64\u51e0\u4e4e\u65e0\u6cd5\u8fdb\u884c\u5e76\u884c\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u56e0\u4e3a\u51fd\u6570\u7684\u53c2\u6570\u672c\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u4e00\u822c\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u51fd\u6570\u53ef\u80fd\u5177\u6709\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u5373\u4f7f\u6211\u4eec\u80fd\u591f\u628a\u6240\u6709\u5bf9\u8fd9\u4e9b\u51fd\u6570\u7684\u8c03\u7528\u6c47\u96c6\u8d77\u6765\uff0c\u4ecd\u7136\u4e0d\u80fd\u591f\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u63d0\u5347\u5e76\u884c\u6027\uff0c\u6211\u4eec\u9700\u8981\u628a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u7684\u673a\u5236\u8f6c\u6362\u4e3a\u4f20\u9012\u503c\u7684\u673a\u5236\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4f20\u9012\u7684\u53c2\u6570\u662f\u4e00\u4e2a\u503c\uff0c\u4f46\u662f\u56e0\u4e3a\u6bcf\u4e00\u4e2a\u5b9e\u9645\u8ba1\u7b97\u7684\u503c\u90fd\u7ecf\u8fc7\u4e86\u524d\u9762\u4e00\u8fde\u4e32\u7684\u51fd\u6570\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7ec4\u5408\u4ecd\u7136\u6ee1\u8db3\u4e00\u4e2a\u5d4c\u5957\u7684\u590d\u5408\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u800cRealityIS\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\uff0c\u901a\u8fc7\u6241\u5e73\u5316\uff0c\u4e0d\u4ec5\u4fdd\u7559\u4e86\u51fd\u6570\u5f0f\u7f16\u7a0b\u672c\u8eab\u7684\u7279\u8d28\uff0c\u800c\u4e14\u901a\u8fc7\u5c06\u6bcf\u4e2a\u51fd\u6570\u8c03\u7528\u90fd\u72ec\u7acb\u51fa\u6765\uff0c\u4f7f\u5f97\u76f8\u540c\u7684\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"},"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"),(0,n.kt)("p",null,"\u51fd\u6570\u5f0f\u7f16\u7a0b\uff08FP\uff09\u672c\u8eab\u7684\u6982\u5ff5\u6bd4\u8f83\u7b80\u5355\u4e86\uff0c\u5c31\u662f\u76f8\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\uff08OOP\uff09\uff0cFP\u7684\u51fd\u6570\u5185\u90e8\u6ca1\u6709\u72b6\u6001\uff0c\u5b8c\u5168\u4f9d\u8d56\u4e8e\u5916\u90e8\u8f93\u5165\uff0c\u6240\u4ee5\u4efb\u4f55\u8f93\u5165\u90fd\u6709\u552f\u4e00\u7684\u8f93\u51fa\uff0c\u8fd9\u79cd\u79f0\u4e3a\u6ca1\u6709\u526f\u4f5c\u7528\u7684\u65b9\u5f0f\uff0c\u5c31\u5f88\u5bb9\u6613\u5b9e\u73b0\u5e76\u53d1\uff0c\u4e5f\u5f88\u5bb9\u6613\u7ba1\u7406\u4ee3\u7801\u590d\u7528\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u539f\u7406")),(0,n.kt)("p",null,"\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u628a\u591a\u4e2a\u7ec4\u4ef6\u4ee5\u67d0\u79cd\u65b9\u5f0f\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u4e00\u822c\u6765\u8bf4\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5176\u5f62\u6210\u7684\u6574\u4f53\u4e5f\u662f\u4e00\u4e2a\u590d\u5408\u4f53\u3002\u5bf9\u4e8e\u590d\u5408\u64cd\u4f5c\u672c\u8eab\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u4e0d\u9700\u8981\u5904\u7406\u5404\u79cd\u590d\u6742\u7684\u53c2\u6570\uff0c\u56e0\u4e3a\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u7b80\u5355\u7684\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u51fd\u6570\u672c\u8eab\u5305\u542b\u6709\u6620\u5c04\u5173\u7cfb")),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u5e0c\u671b\u540e\u8005\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u5c01\u88c5\u673a\u5236\u4e0d\u592a\u5229\u4e8e\u7528\u6765\u4f5c\u4e3a\u4e00\u79cd\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u590d\u7528\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u590d\u5408\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u590d\u5408\u4f53\u662f\u5426\u5305\u542b\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u8be5\u590d\u5408\u4f53\u4ec5\u4ec5\u662f\u4e00\u4e2a\u529f\u80fd\u7ec4\u5408\u4f53")),(0,n.kt)("p",null,"\u5176\u4e2d\u524d\u8005\u5c31\u662f\u4f20\u7edf\u7684\u547d\u4ee4\u5f0f\u7f16\u7a0b\u6240\u4ee3\u8868\u7684\u65b9\u6cd5\uff0c\u5728OOP\u4e2d\uff0c\u65b9\u6cd5\u4e00\u822c\u662f\u9644\u7740\u4e8e\u67d0\u4e2a\u5bf9\u8c61\u7684\uff0c\u800c\u5bf9\u8c61\u4e00\u822c\u62e5\u6709\u79c1\u6709\u72b6\u6001\uff0c\u56e0\u6b64\u5373\u4f7f\u591a\u4e2a\u5bf9\u8c61\u4ee5\u67d0\u79cd\u65b9\u5f0f\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\uff0c\u5f53\u5728\u4f7f\u7528\u67d0\u4e2a\u8fd9\u6837\u7684\u590d\u5408\u4f53\u65f6\uff0c\u8c03\u7528\u8005\u5c31\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u4e0d\u540c\u7684\u53c2\u6570\u4e0b\u590d\u5408\u4f53\u4f1a\u8868\u73b0\u51fa\u4e0d\u540c\u7684\u529f\u80fd\u7ed3\u679c\u3002\u8fd9\u6837\u5c31\u4f7f\u5f97\u590d\u5408\u4f53\u4e0d\u5229\u4e8e\u4f7f\u7528\uff0c\u5c3d\u7ba1\u590d\u5408\u4f53\u672c\u8eab\u53ef\u4ee5\u5305\u542b\u4e00\u4e9b\u9ed8\u8ba4\u53c2\u6570\uff0c\u4f46\u662f\u8fd8\u662f\u9700\u8981\u5c0f\u5fc3\u7ef4\u62a4\u8fd9\u4e9b\u53c2\u6570\u624d\u80fd\u4fdd\u8bc1\u7ed3\u6784\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u5f88\u591a\u8f6f\u4ef6\u6216\u8005\u5e93\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u6709\u65f6\u5019\u54ea\u4e9b\u53c2\u6570\u5fd8\u6389\u4e86\u6216\u8005\u8bbe\u7f6e\u9519\u4e86\uff0c\u6574\u4e2a\u8f6f\u4ef6\u5c31\u53ef\u80fd\u51fa\u73b0\u4e0d\u53ef\u9884\u671f\u7684\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4f20\u7edf\u7684\u5b9e\u4f53\u7ecf\u6d4e\u4e2d\u7684\u5927\u90e8\u5206\u90e8\u4ef6\u662f\u4ee5\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4f8b\u5982\u6bcf\u4e2a\u673a\u5668\u90fd\u5e26\u6709\u5404\u79cd\u53c2\u6570\uff0c\u4f7f\u7528\u8005\u9700\u8981\u9996\u5148\u8bbe\u7f6e\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7136\u540e\u518d\u4e0b\u8fbe\u8fd0\u4f5c\u547d\u4ee4\u3002\u4f8b\u5982\u6d17\u8863\u673a\u7684\u547d\u4ee4\u53ef\u80fd\u5f88\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4ed6\u4e00\u4e9b\u5de5\u4e1a\u673a\u5668\u53ef\u80fd\u5219\u6bd4\u8f83\u590d\u6742\u3002\u8fd9\u662f\u56e0\u4e3a\u4e00\u53f0\u5b9e\u4f53\u7684\u673a\u5668\uff0c\u5b83\u6ca1\u6709\u529e\u6cd5\u63a5\u53d7\u4e00\u4e2a\u5916\u5728\u7684\u8f93\u5165\u8bbe\u7f6e\uff0c\u4e3b\u8981\u7684\u8f93\u5165\u65b9\u6cd5\u662f\u624b\u5de5\u64cd\u4f5c\uff0c\u5927\u90e8\u5206\u673a\u5668\u5e76\u4e0d\u5141\u8bb8\u63d2\u5165\u4e00\u4e2a\u5916\u63a5\u4fe1\u53f7\u6e90\u4ee5\u53ef\u7f16\u7a0b\u7684\u65b9\u5f0f\u8bbe\u7f6e\u53c2\u6570\u3002\u7136\u800c\u5728\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e2d\u6211\u4eec\u4f7f\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u72b6\u6001\u5168\u90e8\u8c03\u6574\u4e3a\u590d\u5408\u4f53\u7684\u53c2\u6570\uff0c\u8ba9\u590d\u5408\u4f53\u672c\u8eab\u4e0d\u5e26\u4efb\u4f55\u72b6\u6001\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u56e0\u4e3a\u4e00\u65e6\u590d\u5408\u4f53\u7684\u4f7f\u7528\u5305\u542b\u624b\u5de5\u8bbe\u7f6e\u53c2\u6570\u7684\u6d41\u7a0b\uff0c\u5e76\u4e14\u8fd9\u4e9b\u8bbe\u7f6e\u7684\u4f4d\u7f6e\u548c\u683c\u5f0f\u8fd8\u591a\u79cd\u591a\u6837\uff0c\u4f7f\u7528\u8005\u5c31\u65e0\u6cd5\u505a\u5230\u81ea\u52a8\u5316\uff0c\u5e76\u4e14\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u5229\u4e8e\u666e\u901a\u7528\u6237\u4f7f\u7528"),"\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u6700\u6838\u5fc3\u7684\u90e8\u5206\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u4e0d\u80fd\u4ee5\u5e26\u6709\u72b6\u6001\u7684\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u590d\u5408"),"\uff0c\u8fd9\u4e5f\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u6a21\u5f0f\u4e2d\u590d\u5408\u673a\u5236\u7684\u7279\u5f81\uff0c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e2d\u4ee5\u5bf9\u8c61\u5bf9\u5355\u4f4d\uff0c\u5bf9\u8c61\u662f\u7b2c\u4e00\u7b49\u516c\u6c11\uff0c\u51fd\u6570\u662f\u5bf9\u8c61\u7684\u7ec4\u6210\u90e8\u5206\uff0c\u6240\u4ee5\u5bf9\u8c61\u672c\u8eab\u5c31\u5f88\u5bb9\u6613\u5305\u542b\u72b6\u6001\uff0c\u4ee5\u81f3\u4e8e\u5f88\u96be\u5f62\u6210\u4e00\u79cd\u5f88\u597d\u7684\u590d\u5408\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u6bd4\u4ee5\u51fd\u6570\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\u8981\u7b80\u5355\u7684\u591a\uff0c\u51fd\u6570\u7684\u7c92\u5ea6\u8fd8\u662f\u6bd4\u8f83\u7ec6\u3002\u6240\u4ee5\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u4e00\u4e2a\u5bf9\u8c61\u5373\u662f\u4e00\u4e2a\u590d\u5408\u4f53\uff0c\u5bf9\u8c61\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u72b6\u6001\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u5176\u5b9e\u5c31\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684\u4e00\u4e2a\u590d\u5408\u51fd\u6570\u7684\u6241\u5e73\u5f62\u5f0f\u3002\u6b64\u5916\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5e76\u4e0d\u662f\u5355\u7eaf\u4e00\u5806\u51fd\u6570\u7684\u7ec4\u5408\uff0c\u8fd9\u4e9b\u51fd\u6570\u4e4b\u95f4\u5fc5\u987b\u662f\u6709\u76f8\u4e92\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bf9\u8c61\u539f\u5219\u4e0a\u53ea\u4ee3\u8868\u4e00\u4e2a\u590d\u5408\u51fd\u6570\uff0c\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u5185\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u590d\u5408\u51fd\u6570\u662f\u5b64\u7acb\u7684\uff0c\u5219\u4ed6\u4eec\u5e94\u8be5\u8868\u793a\u4e3a\u4e0d\u540c\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u673a\u5236")),(0,n.kt)("p",null,"\u5173\u4e8eFP\u7684\u590d\u5408\uff0c\u4ed6\u5176\u5b9e\u548c\u6570\u5b66\u4e2d\u7684\u590d\u5408\u51fd\u6570\u6982\u5ff5\u662f\u7c7b\u4f3c\u7684\uff0c\u5c31\u662f\u4e00\u4e2a\u5d4c\u5957\u7684\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4106).Z,width:"538",height:"36"})),(0,n.kt)("p",null,"FP\u5b9e\u73b0\u590d\u5408\u7684\u673a\u5236\u5c31\u662f\u5c06\u51fd\u6570\u672c\u8eab\u770b\u4f5c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u53c2\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u76f8\u5f53\u4e8e\u53e6\u4e00\u4e2a\u51fd\u6570\u4e2d\u67d0\u4e2a\u672a\u77e5\u53d8\u91cf\u662f\u7531\u8fd9\u4e2a\u4f5c\u4e3a\u53c2\u6570\u7684\u51fd\u6570\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u8fd9\u6837\u5f62\u6210\u7684\u7ed3\u679c\u51e0\u4e4e\u5c31\u8ddf\u590d\u5408\u51fd\u6570\u662f\u4e00\u6837\u7684\u6548\u679c\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u770b\u590d\u5408\u51fd\u6570\uff0c\u5b83\u662f\u6709\u7ed3\u6784\u7684\uff0c\u4e0d\u662f\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4f60\u9700\u8981\u7406\u89e3\u51e0\u4e2a\u51fd\u6570\u590d\u5408\u4e4b\u540e\u7684\u90a3\u4e2a\u7ed3\u679c\u7684\u7ed3\u6784\u624d\u80fd\u5f88\u597d\u5730\u590d\u5408\uff0c\u4f8b\u5982\u4f60\u6362\u4e00\u4e2a\u51fd\u6570\u590d\u5408\u4ee5\u540e\u8868\u73b0\u51fa\u7684\u7279\u5f81\u53ef\u80fd\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u3002\u56e0\u6b64\u8fd9\u79cd\u590d\u5408\u65b9\u5f0f\u53ea\u9002\u5408\u7a0b\u5e8f\u5458\uff0c\u4e0d\u80fd\u628a\u8fd9\u79cd\u65b9\u5f0f\u4e22\u7ed9\u666e\u901a\u7528\u6237\uff0c\u666e\u901a\u7528\u6237\u9700\u8981\u4e00\u79cd\u66f4\u6241\u5e73\u7684\uff0c\u4e0d\u9700\u8981\u4e86\u89e3\u90a3\u4e48\u591a\u7ed3\u6784\u7684\u7ec4\u5408\u65b9\u5f0f\uff1a\u591a\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u662f\u591a\u4e00\u4e2a\u529f\u80fd\uff0c\u4f46\u4ed6\u4e0d\u4f1a\u8bf4\u8ba9\u884c\u4e3a\u7ed3\u679c\u5b8c\u5168\u53d8\u4e86\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2714-serverless"},"2.7.14 Serverless"),(0,n.kt)("p",null,"\u4ece\u6982\u5ff5\u4e0a\u8bb2\uff0cCreationScript\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u5c31\u662f\u4e00\u79cd\u771f\u6b63\u7684Serverless\u670d\u52a1\uff1a\u5373\u5f00\u53d1\u8005\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u51fd\u6570\uff0c\u5e73\u53f0\u81ea\u52a8\u5b9e\u73b0\u4f38\u7f29\u548c\u5e76\u53d1\uff0c\u5f00\u53d1\u8005\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u670d\u52a1\u5668\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"Serverless\u662f\u4e00\u79cd\u7406\u5ff5\uff0c\u73b0\u6709\u4e91\u5382\u5546\u6709\u4e00\u79cd\u5b9e\u73b0\uff0c\u4f46\u8fd9\u79cd\u5b9e\u73b0\u5e76\u4e0d\u662fSeverless\u7684\u7ec8\u6781\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u4e91\u5382\u5546\u63d0\u4f9b\u7684Serverless\uff0c\u4ed6\u4eec\u5176\u5b9e\u8fd8\u53ea\u662f\u5c06\u8ba1\u7b97\u6258\u7ba1\u7b80\u5316\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u6574\u4e2a\u7a0b\u5e8f\uff0c\u8fd9\u6837\u4fbf\u4e8e\u4f38\u7f29\uff0c\u800c\u4e91\u5382\u5546\u5b9e\u73b0\u7684\u4f38\u7f29\u4e5f\u6bd4\u8f83\u7b80\u5355\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u51fd\u6570\u672c\u8eab\u662f\u4e0e\u5176\u4ed6\u4e1a\u52a1\u6ca1\u6709\u8026\u5408\u7684\uff0c\u6240\u4ee5\u4ed6\u4eec\u628a\u51fd\u6570\u548c\u6570\u636e\u590d\u5236\u5230\u5176\u4ed6\u670d\u52a1\u5668\u6267\u884c\u5c31\u597d\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u8fd9\u91cc\u9762\u6709\u5f88\u5927\u7684\u9650\u5236\uff0c\u4ed6\u53ea\u9650\u4e8e\u51e0\u4e4e\u5b8c\u5168\u72ec\u7acb\u7684\u51fd\u6570\uff0c\u65e0\u6cd5\u590d\u7528\u72b6\u6001\uff08\u6e38\u620f\u6bcf\u4e00\u5e27\u90fd\u8981\u8ba1\u7b97\uff0c\u9700\u8981\u7ef4\u6301\u4e00\u4e9b\u72b6\u6001\uff09\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0Streaming\u7b49\u7b49\u4e00\u4e9b\u7279\u6027\uff0c\u5bf9\u5b9e\u65f6\u6027\u652f\u6301\u4e5f\u6bd4\u8f83\u5dee\uff0c\u51fd\u6570\u5b58\u6d3b\u7684\u65f6\u95f4\u4e5f\u4e0d\u597d\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4ed6\u4eec\u53ea\u662f\u5355\u7eaf\u6267\u884c\u4e00\u4e2a\u51fd\u6570\uff0c\u5e76\u6ca1\u6709\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u800c\u5b8c\u5168\u8981\u4f9d\u8d56\u4e8e\u5f00\u53d1\u8005\u81ea\u8eab\u53bb\u8003\u8651\u600e\u6837\u62c6\u5206\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u7684CreationScript\uff0c\u4ed6\u662f\u7ed3\u5408\u81ea\u5df1\u7684\u6570\u636e\u7279\u5f81\u548c\u6e38\u620f\u8fd0\u884c\u673a\u5236\uff0c\u5b9e\u73b0\u7684\u4e00\u5957\u5e76\u53d1\u63a7\u5236\u8bed\u8a00\uff0c\u5b83\u901a\u8fc7\u865a\u62df\u673a\u4e0e\u7ec4\u4ef6\uff08\u4e00\u4e2a\u51fd\u6570\uff09\u7684\u914d\u5408\u6765\u5b9e\u73b0\u4e00\u4e9b\u5982\u72b6\u6001\u6301\u4e45\u5171\u4eab\uff0cStreaming\uff0c\u5e76\u53d1\u5206\u53d1\uff0c\u51fd\u6570\u4e4b\u95f4\u7684\u901a\u4fe1\u7b49\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5982\u679c\u6ca1\u6709\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u5b9a\u5236\u662f\u5f88\u96be\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u51fd\u6570/\u7ec4\u4ef6\u8ddf\u8bed\u8a00\u3001\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u7ed3\u5408\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u7ec4\u4ef6\u4e4b\u95f4\u600e\u4e48\u53bb\u7ec4\u7ec7\u903b\u8f91\u7684\u4e8b\u60c5\uff0c\u5e73\u53f0\u4f1a\u81ea\u52a8\u628a\u8fd9\u4e9b\u7ec4\u4ef6\u51fd\u6570\u5206\u914d\u5230Serverless\u7684\u67b6\u6784\u4e2d\u53bb\uff0c\u8fd9\u5c31\u662f\u6211\u4eec\u5b9a\u4e49\u7684\u4e0d\u540c\u7684\u66f4\u597d\u7684Serverless\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u5f3a\u8c03RealityIS\u662f\u4e00\u4e2a\u5927\u578b\u7684\u52a8\u6001\u7a0b\u5e8f\u7684\u539f\u56e0\uff0c\u91cc\u9762\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u90fd\u662f\u4e00\u4e2a\u5f88\u5c0f\u7684\u903b\u8f91\uff0c\u90fd\u53ef\u4ee5\u88ab\u72ec\u7acb\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u4e5f\u662f\u4f4e\u8026\u5408\u7684\uff0c\u6240\u4ee5\u6211\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u5730\u63a7\u5236\u4ed6\u4eec\uff0c\u6839\u636e\u9700\u8981\u53ea\u52a0\u8f7d\u4f1a\u7528\u5230\u7684\u90a3\u4e00\u90e8\u5206\u7a0b\u5e8f\uff0c\u4e5f\u53ef\u4ee5\u6839\u636e\u670d\u52a1\u5668\u8d1f\u8f7d\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u5e76\u4e0d\u4ec5\u4ec5\u662f\u6309\u51fd\u6570\u628a\u4ed6\u4eec\u62c6\u51fa\u6765\u800c\u5df2\uff0c\u51fd\u6570\u4e4b\u95f4\u8fd8\u662f\u6709\u5173\u7cfb\u7684\uff0c\u5e76\u4e0d\u662f\u5b8c\u5168\u72ec\u7acb\u7684\uff0c\u8fd9\u79cd\u8c03\u7528\u5173\u7cfb\u8981\u9760RealityIS\u8fd0\u884c\u65f6\u865a\u62df\u673a\u6765\u652f\u6301\uff0c\u8fd9\u662f\u6700\u5173\u952e\u7684\u90e8\u5206\uff0c\u5426\u5219\u4ed6\u5c31\u53ea\u662f\u4e00\u4e2a\u73b0\u5728\u7684\u4e91\u5382\u5546\u7c7b\u4f3c\u7684Serverless\u670d\u52a1\u800c\u5df2\u3002"),(0,n.kt)("h3",{id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5"},"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u90a3\u4e9b\u52a8\u753b\u3001\u6e32\u67d3\u3001\u7269\u7406\u6a21\u62df\u7b49\u89c6\u89c9\u56e0\u7d20\u4e4b\u540e\uff0c\u6e38\u620f\u80cc\u540e\u7684\u673a\u5236\u53ef\u4ee5\u62bd\u8c61\u4e3a\u4e00\u5957\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5176\u4e2d\u6240\u6709\u7684\u884c\u4e3a\u90fd\u62bd\u8c61\u4e3a\u8d44\u6e90\uff0c\u8fd9\u5957\u673a\u5236\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u5404\u79cd\u5404\u6837\u7684\u8d44\u6e90\u968f\u7740\u73a9\u5bb6\u7684\u4ecb\u5165\u8fdb\u884c\u600e\u6837\u7684\u6d41\u52a8\uff0c\u4f8b\u5982\u73a9\u5bb6\u7528\u91d1\u5e01\u8d2d\u4e70\u9053\u5177\uff0c\u7528\u4e0d\u540c\u7684\u9053\u5177\u7ec4\u5408\u5f62\u6210\u65b0\u7684\u9053\u5177\uff0c\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u8bf4\u662f\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u800cMachinations \u53ef\u4ee5\u6a21\u62df\u8fd9\u5957\u6d41\u52a8\u7684\u673a\u5236\uff0c\u5b83\u662f\u4e00\u5957\u8bed\u8a00\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u6a21\u62df\u6240\u6709\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d41\u52a8\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u7684\u4ef7\u503c\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e38\u620f\u673a\u5236\u7684\u6570\u503c\u5e73\u8861\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u5feb\u901f\u6d4b\u8bd5\u8fd9\u5957\u673a\u5236\u7684\u5408\u7406\u6027\uff0c\u8fdb\u800c\u8c03\u6574\u6570\u503c\uff0c\u5426\u5219\u4e0d\u5408\u7406\u7684\u673a\u5236\u76f4\u63a5\u5c31\u5bfc\u81f4\u73a9\u5bb6\u6d41\u5931\uff0c\u8fd9\u8ddf\u5e94\u7528\u7a0b\u5e8f\u4e0d\u592a\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6211\u4eec\u7684\u53ef\u7ec4\u5408\u6027\u8db3\u591f\u597d\uff0c\u6211\u4eec\u662f\u53ef\u4ee5\u5728\u8fd9\u5957\u7cfb\u7edf\u548c\u7a0b\u5e8f\u4e4b\u95f4\u81ea\u52a8\u8f6c\u6362\u7684\uff0c\u8fd9\u6837\u5c31\u8fdb\u4e00\u6b65\u964d\u4f4e\u95e8\u69db\uff0c\u8bbe\u8ba1\u5e08\u662f\u7528\u66f4\u7b26\u5408\u903b\u8f91\u7684\u89c6\u89c9\u65b9\u5f0f\u53bb\u8bbe\u8ba1\u6e38\u620f\uff0c\u800c\u4e0d\u662f\u53bb\u601d\u8003\u4ee3\u7801\u7ed3\u6784\uff0c\u8fd9\u4e2a\u5176\u5b9e\u662f\u6211\u4eec\u7ec4\u5408\u7ec4\u4ef6\u8fdb\u884c\u521b\u4f5c\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u5b83\u4f1a\u6210\u4e3a\u6211\u4eec\u9762\u5411\u7ec4\u5408\u7684\u201c\u5f00\u53d1\u6216\u8005\u8bbe\u8ba1\u8bed\u8a00\u201d")),(0,n.kt)("p",null,"\u5c06\u6765\u6211\u4eec\u7b2c\u4e00\u5bb6\u8981\u6536\u8d2d\u7684\u516c\u53f8\u5c31\u662fMachinations \uff0c\u5f53\u7136\u5982\u679c\u4e0d\u80fd\u6536\u8d2d\uff0c\u6211\u4eec\u81ea\u5df1\u4e5f\u4f1a\u505a\u4e00\u5957\u7c7b\u4f3c\u601d\u8def\u7684\u5de5\u5177\u3002"),(0,n.kt)("h3",{id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6570\u636e\u901a\u5e38\u5b58\u5728\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u6570\u636e\u6700\u7ec8\u662f\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u901a\u4fe1\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u77e5\u9053\u6570\u636e\u4ece\u54ea\u91cc\u6765\uff0c\u600e\u6837\u88ab\u5b9a\u4e49\uff0c\u600e\u6837\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9\u51fd\u6570\uff0c\u56e0\u6b64\uff0c\u6574\u4e2a\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u51e0\u4e4e\u603b\u5728\u5173\u6ce8\u5bf9\u8c61\uff0c\u56e0\u4e3a\u5bf9\u8c61\u662f\u6570\u636e\u7684\u5c01\u88c5\u5b9e\u4f53\u3002\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5f62\u6210\u6570\u636e\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5305\u542b\u4e86\u592a\u591a\u989d\u5916\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u901a\u5e38\u662f\u8ddf\u5177\u4f53\u95ee\u9898\u8026\u5408\u7684\uff0c\u56e0\u4e3a\u5bf9\u8c61\u7684\u7ed3\u6784\u901a\u5e38\u5c31\u662f\u8fd9\u4e9b\u95ee\u9898\u7684\u6620\u5c04"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u7684\u5b9e\u73b0\u672c\u8eab\u6ca1\u6709\u7edf\u4e00\u6807\u51c6")),(0,n.kt)("p",null,"\u56e0\u6b64\u4e0d\u4ec5\u4f7f\u7528\u7684\u4eba\u9700\u8981\u53bb\u7406\u89e3\u548c\u5173\u6ce8\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\uff0c\u5f00\u53d1\u7684\u4eba\u4e5f\u5bb9\u6613\u5c06\u4e00\u4e9b\u7c7b\u578b\u4fe1\u606f\u8026\u5408\u5230\u51fd\u6570\u65b9\u6cd5\u4e2d\u3002\u8fd9\u4e9b\u90fd\u662f\u989d\u5916\u7684\u8d1f\u62c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u6765\u5206\u6790\u4e00\u4e9b\u4e0d\u540c\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"},"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u65b9\u6cd5\u7684\u8bbe\u8ba1\u4e0d\u7528\u5e26\u5e26\u5165\u592a\u591a\u81ea\u5b9a\u4e49\u7c7b\u578b\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u5f53\u6211\u4eec\u5728\u8bbe\u8ba1\u4e00\u4e2a\u65b9\u6cd5\u7684\u65f6\u5019\uff0c\u8111\u888b\u4e2d\u5e94\u8be5\u60f3\u5230\u7684\u662f\u5b83\u5e94\u8be5\u662f\u4e00\u4e2a\u901a\u7528\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u9488\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u5bf9\u8c61\u8bbe\u8ba1\u7684\u65b9\u6cd5\u3002\u6240\u4ee5\u6211\u4eec\u7b2c\u4e00\u4ef6\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u786e\u4fdd\u65b9\u6cd5\u7684\u53c2\u6570\u4e2d\u6ca1\u6709\u4efb\u4f55\u7279\u5b9a\u7684\u81ea\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u9664\u975e\u8fd9\u79cd\u7ed3\u6784\u662f\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3001\u7406\u89e3\u548c\u8ba4\u53ef\u3001\u5e76\u4e14\u4e0d\u4f1a\u9891\u7e41\u6539\u52a8\u7684\u5171\u8bc6\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u60c5\u51b5\u8fd9\u4e9b\u7279\u6b8a\u7684\u6570\u636e\u7c7b\u578b\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u7c7b\u4f3c\u57fa\u672c\u7c7b\u578b\u7684\u5730\u4f4d\u3002\u4ed6\u53ef\u80fd\u5e94\u7528\u4e8e\u67d0\u4e2a\u9886\u57df\u6216\u8005\u4e00\u4e2a\u884c\u4e1a\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e3a\u4e86\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u800c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7c7b\u578b\u90fd\u662f\u5927\u5bb6\u5df2\u77e5\u7684\u201c\u57fa\u672c\u7c7b\u578b\u201d\uff0c\u6211\u4eec\u5728\u4f20\u9012\u53c2\u6570\u7684\u65f6\u5019\u5c31\u4e0d\u518d\u9700\u8981\u5b9a\u4e49\u56fa\u5b9a\u7684\u8c03\u7528\u8005\u53ca\u5904\u7406\u8c03\u7528\u5173\u7cfb\uff0c\u4efb\u4f55\u53ea\u8981\u5177\u6709\u8fd9\u4e9b\u53c2\u6570\u7684\u4e0a\u4e0b\u6587\u5747\u53ef\u4ee5\u968f\u610f\u53d1\u8d77\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"},"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u65b9\u6cd5\u7684\u53c2\u6570\u7c7b\u578b\u5b8c\u5168\u4e0d\u7528\u81ea\u5b9a\u4e49\u7c7b\u578b\uff0c\u6bd4\u5982\u59822.7.17\u8282\u7684\u63cf\u8ff0\u6240\u793a\uff0c\u62e5\u6709\u591a\u4e2a\u51fd\u6570\u53c2\u6570\u5728RealityIS\u4e2d\u662f\u4e0d\u53ef\u63a7\u7684\uff0c\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5c06\u4e00\u4e9b\u6570\u636e\u8fdb\u884c\u805a\u5408\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u53c2\u6570\u53ea\u80fd\u88ab\u5b58\u653e\u5728\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u51fd\u6570\u7684\u53c2\u6570\u4f7f\u7528\u4e86\u7ed3\u6784\u4f53\uff0c\u5e76\u4e14\u8fd9\u79cd\u7ed3\u6784\u4f53\u5185\u7684\u53d8\u91cf\u5141\u8bb8\u4f7f\u7528\u4e0d\u540c\u7684\u540d\u5b57\uff0c\u90a3\u4e48\u8fd9\u6837\u5c31\u4f1a\u662f\u51fd\u6570\u7684\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u7279\u5b9a\u89e3\u6784\u53d1\u751f\u8026\u5408\uff0c\u4e3a\u6b64\uff0cRealityIS\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u53c2\u89c12.7.12.1\u8282\u3002"),(0,n.kt)("h4",{id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"},"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e9b\u65b9\u6cd5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u67b6\u6784\u6765\u907f\u514d\u4e00\u4e9b\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u7684\u95ee\u9898\uff0c\u6e38\u620f\u4e2d\u8457\u540d\u7684\u6570\u636e\u9a71\u52a8\u67b6\u6784\u662fECS\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7c7b\u65b9\u6cd5\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u8f83\u5f31\uff0c\u5f88\u96be\u6bd4\u8f83\u76f4\u89c2\u5730\u770b\u51fa\u6570\u636e\u4e0e\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u800c\u5bf9\u4e8eRealityIS\u6765\u5c06\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u6570\u636e\u4e0e\u51fd\u6570\u7684\u5173\u7cfb\u6765\u63a8\u5bfc\u5f88\u591a\u4e8b\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u9700\u8981\u5f00\u53d1\u8005\u5c0f\u5fc3\u5730\u7ef4\u62a4\uff0c\u4f8b\u5982\u4f60\u53ef\u80fd\u7ed9\u5b9e\u4f53\u5bf9\u8c61\u6dfb\u52a0\u4e86Component\uff0c\u4f46\u662f\u4f60\u53ef\u80fd\u5fd8\u4e86\u5728System\u6dfb\u52a0\u76f8\u5e94\u7684filter\uff1b\u4f60\u53ef\u80fd\u6b63\u786e\u5730\u5904\u7406\u597d\u4e86System\uff0c\u4f46\u662f\u53ef\u80fd\u5fd8\u4e86\u7ed9\u6b63\u786e\u7684Entity\u6dfb\u52a0\u5bf9\u5e94\u7684Component\u3002\u56e0\u4e3a\u8fd9\u4e24\u8005\u662f\u5206\u79bb\u7684\uff0c\u5f88\u96be\u7ef4\u62a4\u3002")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cECS\u4e2dSystem\u5b9e\u9645\u4e0a\u8026\u5408\u4e86Component\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u6240\u4ee5Component\u7684\u4fee\u6539\u5fc5\u7136\u6d89\u53ca\u5230System\u7684\u4fee\u6539\u3002"),(0,n.kt)("h4",{id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4691).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("h4",{id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"},"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h4",{id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"},"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u5e26\u6765\u7684\u53e6\u4e00\u4e2a\u53d8\u5316\u662f\uff0cRealityIS\u7684\u5bf9\u8c61\u662f\u7531\u7528\u6237\u5b9a\u4e49\u7684\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u3002\u7528\u6237\u5b9a\u4e49\u7684\u6570\u636e\u53ef\u4ee5\u5f62\u6210\u4efb\u610f\u7684\u5206\u5e03\uff0c\u8fd9\u4e5f\u4e3a\u7a0b\u5e8f\u8fdb\u4e00\u6b65\u5e26\u6765\u4e86\u590d\u6742\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf"},"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf"),(0,n.kt)("p",null,"\u4e0a\u4e00\u8282\u7684\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5b83\u5b9e\u9645\u4e0a\u5047\u8bbe\uff0c\u51fd\u6570\u7684\u53c2\u6570\u53ef\u80fd\u4f1a\u6765\u81ea\u4efb\u610f\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u8fd9\u4ece\u7f16\u7a0b\u672c\u8eab\u7684\u6982\u5ff5\u770b\u662f\u6ca1\u95ee\u9898\u7684\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u5f15\u5165\u7531\u8fd0\u884c\u65f6\u7ba1\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u66f4\u591a\u662f\u901a\u8fc7\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u7ec4\u5408\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7684\u5bf9\u8c61\u8fdb\u884c\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6307\u5b9a\u5bf9\u8c61\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u7a0b\u5e8f\u5199\u6b7b\uff0c\u8fd9\u6837\u5c31\u65e0\u6cd5\u52a8\u6001\u9002\u5e94\u53d8\u5316\u7684\u573a\u666f"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u5fc5\u987b\u901a\u8fc7\u7528\u6237\u624b\u52a8\u6307\u5b9a\u51fd\u6570\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,"\u8fd9\u4e24\u8005\u90fd\u4f1a\u5bfc\u81f4\u53ef\u4f38\u7f29\u6027\u548c\u6613\u7528\u6027\u95ee\u9898\u3002\u56e0\u6b64RealityIS\u9009\u62e9\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u81ea\u52a8\u5339\u914d\uff0c\u4f46\u8fd9\u5e26\u6765\u591a\u5c42\u5faa\u73af\u7684\u95ee\u9898\u3002\u4f8b\u5982\u5982\u4e0b\u7684\u573a\u666f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6240\u6709\u53d8\u91cf\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6574\u4e2a\u7ec4\u4ef6\u5c31\u662f\u6267\u884c\u4e00\u6b21\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6709\u4e00\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5219\u9700\u8981\u589e\u52a0\u4e00\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u53e6\u59162\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u5916\u4e24\u4e2a\u5bf9\u8c61\uff0c\u5c31\u9700\u89812\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u7c7b\u63a8\u3002\u3002\u3002")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4691).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\u5e26\u6765\u4e86\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u65e0\u6cd5\u9884\u77e5\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u60c5\u51b5\u4f1a\u662f\u600e\u6837\uff0c\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u6765\u81ea\u4efb\u610f\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u5bf9\u8c61\u5b8c\u5168\u662f\u7531\u7528\u6237\u6765\u7ec4\u7ec7\u7684\u3002\u4e3a\u4e86\u5e94\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u4f5c\u4e3a\u4e24\u4e2a\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u4f7f\u7528\u4e862\u4e2a\u4ee5\u4e0a\u7684\u53c2\u6570\uff0c\u6211\u4eec\u9ed8\u8ba4\u8ba4\u4e3a\u5f00\u53d1\u8005\u662f\u5e0c\u671b\u6240\u6709\u8fd9\u4e9b\u53c2\u6570\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ea\u8981\u7b5b\u9009\u51fa\u540c\u65f6\u5177\u6709\u6240\u6709\u5c5e\u6027\u7684\u5bf9\u8c61\u5373\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u5982\u679c\u7528\u6237\u6307\u5b9a\u4e86\u5916\u90e8\u53d8\u91cf\uff0c\u90a3\u4e48\u4e00\u4e2a\u51fd\u6570\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2a\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u4e3a\u591a\u91cd\u5d4c\u5957\u7684\u5faa\u73af\u4f1a\u5e26\u6765\u590d\u6742\u6027")),(0,n.kt)("h4",{id:"27171-\u5355\u53c2\u6570\u51fd\u6570"},"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570"),(0,n.kt)("p",null,"\u9650\u5236\u5355\u53c2\u6570\u51fd\u6570\uff0c\u7406\u8bba\u4e0a\u4e0d\u4f1a\u5bf9\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\u5e26\u6765\u9650\u5236\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u57fa\u7840\u7684\u64cd\u4f5c\u7b26\u90fd\u662f\u4e8c\u5143\u751a\u81f3\u4e00\u5143\u64cd\u4f5c\u7b26\uff0c\u5176\u4ed6\u7684\u64cd\u4f5c\u7b26\u90fd\u53ef\u4ee5\u8f6c\u6362\u4e3a\u4e8c\u5143\u64cd\u4f5c\u7b26\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"AST",src:l(4542).Z,width:"960",height:"514"})),(0,n.kt)("p",null,"\u4f46\u662f\u62c6\u6563\u6210\u4e8c\u5143\u64cd\u4f5c\u786e\u5b9e\u4f1a\u5e26\u6765\u4e00\u5b9a\u590d\u6742\u6027\uff0c\u8fd9\u4e9b\u590d\u6742\u6027\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e0b\u51e0\u4e2a\u65b9\u9762\u8fdb\u884c\u7f13\u89e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f8\u5173\u5c5e\u6027\u5c3d\u91cf\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\uff0c\u8fd9\u6837\u5c31\u4fdd\u8bc1\u5b83\u4eec\u59cb\u7ec8\u5b58\u5728\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u6240\u4ee5\u5176\u5b9e\u5c3d\u7ba1\u6700\u7ec8\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u662f\u4e8c\u5143\u7684\uff0c\u4f46\u662f\u5185\u90e8\u7684\u5f88\u591a\u903b\u8f91\u8fd8\u662f\u4e0d\u53d7\u9650\u5236\u7684\uff0c\u8fd9\u6837\u7684\u5173\u7cfb\u5b9e\u9645\u4e0a\u7c7b\u4f3c\u4e8e\u4ea4\u4e92\u7684\u5bf9\u8c61\u662f\u4e24\u4e2a\uff0c\u8fd9\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e5f\u662f\u6bd4\u8f83\u5ba2\u89c2\u7684\uff0c\u4ea4\u6613\u7684\u5bf9\u8c61\u4e4b\u95f4\u901a\u5e38\u90fd\u662f\u4e24\u4e2a\u4eba\uff0c\u591a\u8fb9\u534f\u8bae\u7684\u673a\u5236\u662f\u6bd4\u8f83\u5c11\u7684\uff0c\u591a\u8fb9\u7684\u673a\u5236\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5404\u79cd\u5bfb\u627e\u4e00\u4e2a\u4ee3\u7406\u51fa\u6765\u4ea4\u6613\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u5185\u90e8\u53d8\u91cf\u8fdb\u884c\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f52\u5e76\u7684\u4e8b\u60c5\u7531\u7ec4\u4ef6\u5f00\u53d1\u8005\u6765\u9690\u85cf\u3002\u7ec4\u4ef6\u5f00\u53d1\u8005\u901a\u8fc7\u4e00\u4e9b\u5185\u90e8\u79c1\u6709\u53d8\u91cf\u6765\u9690\u85cf\u5927\u91cf\u5f52\u5e76\u7684\u7ec6\u8282\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u770b\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u6574\u4f53\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("h3",{id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b"},"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bb9\u6613\u5bfc\u81f4\u5e76\u53d1\uff0c\u56e0\u6b64RealityIS\u4e3b\u8981\u662f\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u4f46\u662f\u4e0e\u5176\u4ed6\u5b8c\u5168\u901a\u8fc7\u6d88\u606f\u901a\u8fc7\u7684\u673a\u5236\u4e0d\u540c\uff0cRealityIS\u80fd\u591f\u5b9e\u73b0\u539f\u751f\u7684\u53c2\u6570\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4e4b\u5e26\u6765\u7684\u95ee\u9898\u662f\u539f\u5b50\u6027\uff0c\u6bd4\u5982\u5728Erlang\u5355\u4e2a\u8fdb\u7a0b\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\uff0c\u4f46\u662fRealityIS\u7684\u5355\u4e2a\u8fdb\u7a0b\u53ea\u662f\u6267\u884c\u4e0a\u72ec\u7acb\uff0c\u4f46\u662f\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u5b58\u5728\u8f83\u5f3a\u7684\u5173\u8054\u3002\u8fd9\u65b9\u9762\u4e3b\u8981\u901a\u8fc7\u5b58\u6863\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"},"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"),(0,n.kt)("p",null,"\u786c\u4ef6\u67b6\u6784\u672c\u8eab\u5e76\u6ca1\u6709\u9650\u5236\u548c\u5b9a\u4e49\u4e00\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u600e\u6837\u7ec4\u7ec7\uff0c\u5b83\u8ddf\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u662f\u5206\u79bb\u7684\uff0c\u786c\u4ef6\u53ea\u9700\u8981\u77e5\u9053\u6211\u81ea\u6267\u884c\u67d0\u4e2a\u6307\u4ee4\u7684\u65f6\u5019\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u4ee5\u53ca\u5c06\u6570\u636e\uff08\u8ba1\u7b97\u7ed3\u679c\u6216\u4e2d\u95f4\u53d8\u91cf\uff09\u5199\u56de\u5230\u54ea\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u7a0b\u5e8f\u4ee3\u7801\u6587\u4ef6\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e86\u4e00\u5b9a\u7684\u5b9a\u4e49\uff0c\u6bd4\u5982\u52a0\u8f7d\u5e76\u6267\u884c\u5305\u542b\u673a\u5668\u7801\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002\u7f16\u8bd1\u5668\u5e94\u8be5\u5c06\u7a0b\u5e8f\u4ee3\u7801\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6216\u591a\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5728\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e2d\uff0c\u7a0b\u5e8f\u88ab\u7ec4\u7ec7\u4e3a\u4e00\u4e9b\u65b9\u6cd5\u6784\u6210\u7684\u4ee3\u7801\u5757\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u5757\u751f\u6210\u5730\u5740\uff0c\u5e76\u5c06\u5730\u5740\u6620\u5c04\u5230\u7a0b\u5e8f\u4e2d\u7684\u7b26\u53f7\u5bf9\u5e94\u7684\u5730\u5740\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u4e5f\u6ca1\u6709\u5bf9\u7a0b\u5e8f\u6e90\u4ee3\u7801\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e00\u5b9a\u7684\u7ea6\u675f\uff0c\u4f8b\u5982\u7a0b\u5e8f\u4e2d\u5bf9\u4efb\u4f55\u4ee3\u7801\u5757\u6216\u8005\u53d8\u91cf\u7684\u5730\u5740\u6620\u5c04\u8fd8\u662f\u7531\u7f16\u8bd1\u5668\u51b3\u5b9a\u7684\u3002\u800c\u8fd9\u4e9b\u4ee3\u7801\u5757\u672c\u8eab\u662f\u600e\u4e48\u751f\u6210\u7684\uff0c\u4f8b\u5982\u662f\u7531OOP\u4e2d\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u8fd8\u662f\u7531\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u6241\u5e73\u4e0e\u6570\u636e\u72b6\u6001\u72ec\u7acb\u7684\u7ec4\u7ec7\u5173\u7cfb\uff0c\u8fd9\u4e9b\u90fd\u6ca1\u6709\u4efb\u4f55\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u548c\u7f16\u8bd1\u7406\u8bba\u4e0a\u53ef\u4ee5\u662f\u4efb\u610f\u7684\uff0c\u9762\u5411\u5bf9\u8c61\u6216\u8005\u51fd\u6570\u5f0f\u7f16\u7a0b\u90fd\u53ea\u662f\u5176\u4e2d\u4e00\u79cd\u7279\u6b8a\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7406\u8bba\u4e0a\uff0c\u6784\u5efa\u4e00\u79cd\u6781\u5ea6\u52a8\u6001\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u662f\u53ef\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u7a0b\u5e8f\u7684\u7f16\u8bd1\u8fc7\u7a0b\uff0c\u65e9\u671f\u7684\u7f16\u7a0b\u8bed\u8a00\u5927\u591a\u662f\u9759\u6001\u7684\uff0c\u5373\u4e00\u65e6\u7f16\u8bd1\u5b8c\u6210\u4e4b\u540e\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u90fd\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u4e8c\u8fdb\u5236\u673a\u5668\u7801\u3002\u5982\u679c\u9700\u8981\u5bf9\u4ee3\u7801\u8fdb\u884c\u4fee\u6539\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u8fdb\u884c\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7a0b\u5e8f\u4ecd\u7136\u5177\u6709\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f8b\u5982\u4f60\u53ef\u4ee5\u58f0\u660e\u4e00\u4e2a\u6267\u884c\u67d0\u4e2a\u65b9\u6cd5\u7684\u5730\u5740\u6307\u9488\uff0c\u5982\u679c\u4f60\u77e5\u9053\u81ea\u5df1\u7a0b\u5e8f\u4e2d\u6709\u591a\u4e2a\u65b9\u6cd5\u5305\u542b\u76f8\u540c\u7684\u7b7e\u540d\uff0c\u90a3\u4e48\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u65b9\u6cd5\u7684\u5185\u5b58\u5730\u5740\u8d4b\u503c\u7ed9\u4e00\u4e2a\u76f8\u540c\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u7a0b\u5e8f\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u5730\u5bf9\u4e0d\u540c\u7684\u65b9\u6cd5\u8fdb\u884c\u8c03\u7528\u3002\u4e0e\u4e4b\u7c7b\u4f3c\uff0c\u4e00\u4e2a\u6307\u9488\u4e5f\u53ef\u4ee5\u6267\u884c\u591a\u4e2a\u5177\u6709\u76f8\u540c\u7c7b\u578b\u5b9a\u4e49\u7684\u5bf9\u8c61\uff0c\u8fd0\u884c\u65f6\u5bf9\u8fd9\u4e9b\u51fd\u6570\u5bf9\u8c61\u7684\u52a8\u6001\u65b9\u6cd5\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u8fd9\u6837\u7684\u52a8\u6001\u80fd\u529b\u662f\u975e\u5e38\u6709\u9650\u7684\uff0c\u672c\u8d28\u4e0a\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u5b9a\u4e49\u662f\u56fa\u5b9a\u7684\uff0c\u7a0b\u5e8f\u53ea\u662f\u5728\u67d0\u4e9b\u4ee3\u7801\u5757\u6267\u884c\u7684\u5148\u540e\u987a\u5e8f\u4e0a\u80fd\u591f\u8fdb\u884c\u4e00\u5b9a\u7684\u81ea\u7531\u7ec4\u5408\u800c\u5df2\u3002"),(0,n.kt)("h4",{id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027"},"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u968f\u7740\u4e92\u64cd\u4f5c\u3001\u53ef\u6269\u5c55\u6027\u7b49\u9700\u6c42\u8d8a\u6765\u8d8a\u5927\uff0c\u4ee5\u53ca\u90e8\u7f72\u5230\u7528\u6237\u73af\u5883\u7684\u6210\u672c\u3002\u6211\u4eec\u8d8a\u6765\u8d8a\u9700\u8981\u7a0b\u5e8f\u5177\u6709\u66f4\u5f3a\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u5df2\u6709\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u7528\u4e8e\u5b9e\u73b0\u4e00\u4e9b\u52a8\u6001\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5bf9\u4e8e\u672a\u6765\u800c\u8a00\uff0c\u6700\u91cd\u8981\u7684\u52a8\u6001\u6027\u5728\u4e8e\uff0c\u7531\u4e8e\u6240\u6709\u5b50\u7a0b\u5e8f\u672c\u8d28\u4e0a\u5904\u4e8e\u4e00\u4e2a\u5171\u540c\u7684\u5185\u5b58\u73af\u5883\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u65b9\u5f0f\u4f1a\u53d1\u751f\u6839\u672c\u6027\u7684\u53d8\u5316\uff0c\u8fd9\u4e9b\u53d8\u5316\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4ee3\u7801\u672c\u8eab\u975e\u5e38\u5de8\u5927\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u7f16\u8bd1\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u603b\u7684\u7a0b\u5e8f\u6570\u91cf\u5de8\u5927\uff0c\u56e0\u6b64\u5b83\u4e0d\u53ef\u80fd\u5168\u90e8\u52a0\u8f7d\u5230\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5fc5\u987b\u8981\u8fdb\u884c\u6309\u9700\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u610f\u5473\u7740\u9700\u8981\u5206\u6790\u7528\u6237\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u52a8\u6001\u5730\u51b3\u5b9a\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u4ee3\u7801\u7ec4\u7ec7\u610f\u5473\u7740\uff0c\u4f20\u7edf\u7a0b\u5e8f\u4e2d\u90a3\u4e9b\u7c7b\u578b\u67e5\u8be2\u3001\u5185\u5b58\u5730\u5740\u8ba1\u7b97\u90fd\u8981\u52a8\u6001\u8ba1\u7b97")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u9700\u6c42\u4e0e\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u662f\u5929\u751f\u4e0d\u517c\u5bb9\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u8981\u5f00\u53d1\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"RealityIS.005",src:l(4986).Z,width:"1920",height:"1080"})),(0,n.kt)("h4",{id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"},"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"),(0,n.kt)("p",null,"\u52a8\u6001\u6027\u662f\u6307\u4e00\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u4e0d\u5fc5\u6309\u7167\u5b8c\u5168\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u6267\u884c\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u52a8\u6001\u6027\u5f80\u5f80\u610f\u5473\u7740\u80fd\u591f\u5bf9\u5df2\u7ecf\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u6269\u5c55\u6216\u8005\u66f4\u65b0\u3002\u524d\u9762\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5bf9\u4e8e\u9759\u6001\u8bed\u8a00\u800c\u8a00\uff0c\u5b83\u4e5f\u5b58\u5728\u7740\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u8fd9\u53ef\u4ee5\u79f0\u4e3a\u903b\u8f91\u4e0a\u7684\u52a8\u6001\u6027\uff0c\u5373\u6240\u6709\u903b\u8f91\u662f\u56fa\u5b9a\u7f16\u8bd1\u597d\u7684\uff0c\u53ea\u662f\u7a0b\u5e8f\u6839\u636e\u8fd0\u884c\u65f6\u73af\u5883\u52a8\u6001\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e00\u822c\u90fd\u662f\u57fa\u4e8e\u6307\u9488\u6765\u5b9e\u73b0\u7684\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u7c7b\u578b")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u52a8\u6001\u6027\u4e25\u683c\u6765\u8bf4\u5bf9\u7a0b\u5e8f\u7684\u53ef\u6269\u5c55\u80fd\u529b\u5e76\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u9664\u975e\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5df2\u7ecf\u5305\u542b\u6240\u6709\u53ef\u80fd\u7684\u529f\u80fd\uff0c\u4f46\u663e\u7136\u90a3\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u56e0\u6b64\u6211\u4eec\u66f4\u5e38\u671f\u5f85\u7684\u52a8\u6001\u6027\uff0c\u66f4\u591a\u662f\u6307\u6269\u5c55\u52a8\u6001\u6027\uff0c\u5373\u80fd\u591f\u52a8\u6001\u52a0\u5165\u4e00\u4e9b\u4e4b\u524d\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4e0d\u5177\u5907\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6269\u5c55\u52a8\u6001\u6027\u5305\u62ec\u53ef\u4ee5\u901a\u8fc7\u5f88\u591a\u65b9\u5f0f\u8fdb\u884c\u5b9e\u73b0\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u7684\u7a0b\u5e8f\u5e93\uff0c\u53ef\u4ee5\u901a\u8fc7\u94fe\u63a5\u8fc7\u7a0b\u52a8\u6001\u52a0\u8f7d\u7b2c\u4e09\u65b9\u9759\u6001\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u79cd\u4e00\u822c\u901a\u8fc7\u865a\u62df\u673a\u5bf9\u52a8\u6001\u7684\u51fd\u6570\u548c\u7c7b\u578b\u8fdb\u884c\u89e3\u91ca")),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u9759\u6001\u7a0b\u5e8f\u5e93\uff0c\u5b83\u672c\u8d28\u4e0a\u662f\u5229\u7528\u524d\u9762\u7684\u903b\u8f91\u52a8\u6001\u6027\u80fd\u529b\u6765\u5b9e\u73b0\u7684\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u5e93\u4e2d\u53ef\u80fd\u5305\u62ec\u65b0\u7684\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\uff0c\u4f46\u662f\u5b83\u4eec\u5747\u5df2\u7ecf\u7f16\u8bd1\u4e3a\u9759\u6001\u7684\u673a\u5668\u7801\uff0c\u5373\u81ea\u8eab\u5df2\u7ecf\u5305\u542b\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u673a\u5236\uff0c\u4f8b\u5982\u5bf9\u8fd9\u4e9b\u7c7b\u578b\u8fdb\u884c\u89e3\u6790\u4ee5\u8ba1\u7b97\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u800c\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5219\u4e0d\u540c\uff0c\u7531\u4e8e\u5176\u4e2d\u6d89\u53ca\u7684\u65b0\u7684\u6570\u636e\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\u6ca1\u6709\u8fb9\u7f16\u8bd1\u4e3a\u9759\u6001\u673a\u5668\u7801\uff0c\u6240\u4ee5\u8fd9\u4e9b\u811a\u672c\u8bed\u8a00\u9700\u8981\u88ab\u4e00\u79cd\u79f0\u4e3a\u865a\u62df\u673a\u7684\u7a0b\u5e8f\u8fdb\u884c\u52a8\u6001\u7684\u89e3\u91ca\uff0c\u8fd9\u4e2a\u89e3\u91ca\u7684\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u52a8\u6001\u5730\u6a21\u62df\u7f16\u8bd1\u7684\u8fc7\u7a0b\uff0c\u5bf9\u7c7b\u578b\u7684\u7ed3\u6784\u8fdb\u884c\u67e5\u8be2\u4ee5\u8ba1\u7b97\u5730\u5740\u3002\u4f46\u7531\u4e8e\u8fd9\u4e9b\u5b9a\u4e49\u7684\u51fd\u6570\u5e76\u6ca1\u6709\u88ab\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u52a8\u6001\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6267\u884c\u8fc7\u7a0b\u5e76\u4e0d\u80fd\u591f\u5f88\u597d\u7684\u5229\u7528\u5230\u786c\u4ef6\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u4f8b\u5982\u6307\u4ee4\u7684\u9884\u53d6\uff0c\u5206\u652f\u9884\u6d4b\u7b49\u7b49\u3002\u56e0\u6b64\u52a8\u6001\u811a\u672c\u8bed\u8a00\u7684\u6027\u80fd\u901a\u5e38\u6bd4\u673a\u5668\u7801\u8981\u4f4e\u5f97\u591a\u3002"),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u8fd9\u4e9b\u52a8\u6001\u7684\u80fd\u529b\uff0c\u52a0\u4e0a\u5408\u9002\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u53ef\u4ee5\u8bbe\u8ba1\u51fa\u5177\u6709\u6bd4\u8f83\u597d\u6269\u5c55\u6027\u7684\u7a0b\u5e8f\u3002\u51e0\u4e2a\u4f8b\u5b50\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f20\u7edf\u6e38\u620f\u5f15\u64ce\u4e2d\u7684\u63d2\u4ef6\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982Lua\u811a\u672c\u8bed\u8a00\u53ef\u4ee5\u589e\u52a0\u65b0\u7684\u903b\u8f91\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u5728Erlang\u4e2d\uff0c\u7531\u4e8e\u6bcf\u4e2a\u8fdb\u7a0b\u542f\u52a8\u65f6\u59cb\u7ec8\u52a0\u8f7d\u6700\u65b0\u7684\u811a\u672c\u4ee3\u7801\uff0c\u56e0\u6b64\u53ef\u4ee5\u5b9e\u73b0\u52a8\u6001\u66f4\u65b0\u3002\u6ce8\u610f\u8fd9\u79cd\u673a\u5236\u4e0eLua\u76f8\u6bd4\u5b58\u5728\u672c\u8d28\u67b6\u6784\u4e0a\u7684\u533a\u522b\uff0cLua\u7684\u70ed\u52a0\u8f7d\u53ea\u662f\u4e00\u79cd\u8bed\u8a00\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd9\u4e2a\u52a0\u8f7d\u7684\u8fc7\u7a0b\u6216\u8005\u8bf4\u67b6\u6784\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u6784\u5efa\u3002\u4e0d\u540c\u7684\u5e94\u7528\u5f80\u5f80\u4f1a\u8bbe\u8ba1\u51fa\u4e0d\u540c\u7684\u70ed\u66f4\u65b0\u673a\u5236\u3002\u800cErlang\u662f\u4e00\u79cd\u5185\u5efa\u4e8e\u8bed\u8a00\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u5c06\u5bf9\u5e94\u76ee\u5f55\u4e0b\u7684\u4ee3\u7801\u66f4\u65b0\uff0cErlang\u4f1a\u81ea\u884c\u52a0\u8f7d\uff0c\u66f4\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u505a\u989d\u5916\u7684\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u6df1\u5165\u601d\u8003\u52a8\u6001\u6027\u7684\u672c\u8d28\uff0c\u6216\u8005\u8bf4\u7406\u89e3\u5b83\u8981\u89e3\u51b3\u7684\u6838\u5fc3\u95ee\u9898\uff0c\u5927\u6982\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u52a8\u66f4\u65b0")),(0,n.kt)("p",null,"\u53bb\u8026\u5408\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u673a\u5236\u672c\u8eab\u770b\u5f85\u52a8\u6001\u6027\uff0c\u8bed\u8a00\u5c42\u9762\u7684\u52a8\u6001\u6027\u5927\u591a\u6d89\u53ca\u67d0\u79cd\u89e3\u8026\u7684\u64cd\u4f5c\uff0c\u4f7f\u8fd0\u884c\u65f6\u53ef\u4ee5\u52a8\u6001\u66ff\u6362\u4e00\u4e9b\u65b9\u6cd5\u6216\u8005\u8bf4\u89e3\u6790\u67d0\u4e9b\u65b0\u7684\u7c7b\u578b\u3002\u53ef\u6269\u5c55\u6027\u662f\u4ece\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u8005\u7684\u89d2\u5ea6\u770b\u5f85\u52a8\u6001\u6027\uff0c\u5b83\u5f80\u5f80\u662f\u8fd0\u7528\u524d\u9762\u8bed\u8a00\u63d0\u4f9b\u7684\u89e3\u8026\u673a\u5236\u6765\u5b9e\u73b0\u7684\u67d0\u79cd\u67b6\u6784\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"dynamic",src:l(216).Z,width:"2022",height:"400"})),(0,n.kt)("p",null,"\u800c\u81ea\u52a8\u66f4\u65b0\u662f\u9488\u5bf9\u7528\u6237\u800c\u8a00\u7684\uff0c\u5b83\u5177\u6709\u6700\u9ad8\u7684\u8981\u6c42\u3002\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u53d7\u9650\u4e8e\u7f16\u7a0b\u8bed\u8a00\u7684\u67b6\u6784\uff0c\u5f53\u7a0b\u5e8f\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u7528\u6237\u4e0d\u5f97\u4e0d\u91cd\u65b0\u5b89\u88c5\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\u867d\u7136\u50cf\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u4f1a\u4f7f\u7528\u5982Lua\u8fd9\u6837\u7684\u52a8\u6001\u811a\u672c\u8bed\u8a00\u6765\u5b9e\u73b0\u67d0\u4e9b\u7a0b\u5ea6\u7684\u70ed\u66f4\u65b0\uff0c\u4f46\u662f\u5927\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u8fd8\u662f\u9700\u8981\u91cd\u65b0\u4e0b\u8f7d\u548c\u5b89\u88c5\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u73b0\u5728\u5982App Store\u7b49\u4f7f\u7528\u4e00\u79cd\u81ea\u52a8\u66f4\u65b0\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u8fdb\u884c\u5e94\u7528\u66f4\u65b0\uff0c\u770b\u8d77\u6765\u5b9e\u73b0\u4e86\u5e94\u7528\u7684\u81ea\u52a8\u66f4\u65b0\uff0c\u56e0\u4e3a\u5bf9\u7528\u6237\u57fa\u672c\u4e0a\u6ca1\u6709\u9020\u6210\u4ec0\u4e48\u56f0\u6270\u3002\u4f46\u662f\u8fd9\u4e2a\u95ee\u9898\u5176\u5b9e\u672c\u8d28\u4e0a\u8fd8\u4e0d\u662f\u7528\u6237\u5c42\u9762\u7684\u95ee\u9898\uff0c\u5b83\u662f\u7531\u7528\u6237\u9700\u6c42\u63a8\u751f\u51fa\u7684\u5f00\u53d1\u8005\u7684\u95ee\u9898\u3002\u5c3d\u7ba1\u5bf9\u6574\u4e2a\u6b63\u5e38\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u91cd\u65b0\u53d1\u5e03\u6574\u4e2a\u7a0b\u5e8f\u4e0d\u4f1a\u5bf9\u7528\u6237\u9020\u6210\u56f0\u6270\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u5728\u4e24\u4e2a\u65b9\u9762\u505a\u7684\u66f4\u597d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u80fd\u5426\u503c\u4fee\u6539\u90e8\u5206\u4ee3\u7801\uff0c\u7136\u540e\u4e0d\u9700\u8981\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c31\u53ef\u4ee5\u6700\u7b80\u5355\u5730\u53d1\u5e03\u66f4\u65b0\u3002\u5f53\u7136\u8fd9\u91cc\u8bf4\u7684\u662f\u5b8c\u6574\u529f\u80fd\u7684\u4fee\u6539\uff0c\u800c\u4e0d\u662f\u5982Lua\u90a3\u6837\u7684\u6269\u5c55\u4fee\u6539\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u7684\u73af\u5883\uff0c\u600e\u6837\u8ba9\u76f8\u4e92\u5f15\u7528\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u6267\u884c\u66f4\u597d\u5730\u534f\u4f5c\u66f4\u65b0")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\uff0c\u5f53\u524d\u7684\u8bed\u8a00\u673a\u5236\u51e0\u4e4e\u662f\u505a\u4e0d\u5230\u7684\uff0c\u8fd9\u9700\u8981\u5bf9\u8bed\u8a00\u548c\u7f16\u8bd1\u8fc7\u7a0b\u8fdb\u884c\u91cd\u6784\u3002"),(0,n.kt)("h4",{id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"},"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u901a\u8fc7\u4e0a\u8ff0\u7684\u4e00\u4e9b\u673a\u5236\uff0c\u73b0\u4ee3\u7684\u8ba1\u7b97\u67b6\u6784\u4e5f\u80fd\u591f\u5b9e\u73b0\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f46\u57fa\u672c\u4e0a\u73b0\u5728\u7684\u52a8\u6001\u6027\u67b6\u6784\u672c\u8d28\u4e0a\u4e0d\u662f\u4e3a\u4e86\u771f\u6b63\u7684\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u800c\u8bbe\u8ba1\u7684\uff0c\u5b83\u4eec\u66f4\u591a\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u7684\u89d2\u5ea6\u53bb\u8bbe\u8ba1\uff0c\u53ea\u662f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b9\u4fbf\u5f00\u53d1\u8005\u8fdb\u884c\u4e00\u5b9a\u9650\u5ea6\u6269\u5c55\u7684\u673a\u5236\u3002\u4f8b\u5982\u65b0\u7684\u811a\u672c\u4e0d\u80fd\u4efb\u610f\u8bbf\u95ee\u4e4b\u524d\u5185\u5b58\u6570\u636e\uff0c\u5f80\u5f80\u90fd\u662f\u9884\u7559\u56fa\u5b9a\u7684\u63a5\u53e3\u3002\u8fd9\u4f7f\u5f97\u65b0\u7684\u811a\u672c\u57fa\u672c\u4e0a\u53ea\u80fd\u7528\u6765\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u6269\u5c55\u65b0\u529f\u80fd\uff0c\u5e76\u4e14\u8fd9\u4e9b\u65b0\u529f\u80fd\u5bf9\u4e4b\u524d\u7684\u4ee3\u7801\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u3002"),(0,n.kt)("h4",{id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"},"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"),(0,n.kt)("p",null,"\u5982\u679c\u6240\u6709\u7684\u5b50\u7a0b\u5e8f\u5728\u540c\u4e00\u4e2a\u201c\u5185\u5b58\u201d\u6216\u8005\u6267\u884c\u73af\u5883\u8fd0\u884c\uff0c\u4f7f\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u8d85\u7ea7\u5de8\u5927\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u542b\u5343\u5343\u4e07\u4e07\u751a\u81f3\u4e0a\u4ebf\u7ea7\u7684\u4ee3\u7801\u6587\u4ef6\u3002\u90a3\u4e48\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7528\u6237\u800c\u8a00\uff0cTA\u6240\u9700\u8981\u8fd0\u884c\u5b9e\u9645\u8ba1\u7b97\u7684\u201c\u7a0b\u5e8f\u201d\u53ea\u80fd\u662f\u8fd9\u4e9b\u6240\u6709\u7a0b\u5e8f\u4e2d\u7684\u5f88\u5c0f\u4e00\u90e8\u5206\u3002\u540c\u6837\u5f88\u663e\u7136\u7684\u662f\uff0c\u8fd9\u4e2a\u7528\u6237\u201c\u7a0b\u5e8f\u201d\u5fc5\u7136\u662f\u52a8\u6001\u751f\u6210\u7684\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u52a8\u6001\u7ec4\u5408\u67d0\u4e2a\u7528\u6237\u5b9a\u4e49\u7684\u201c\u7a0b\u5e8f\u201d\uff0c\u5c31\u6210\u4e3a\u52a8\u6001\u6027\u7684\u6700\u5927\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u52a8\u6001\u7ec4\u5408\u7a0b\u5e8f\uff0c\u4e0d\u50cf\u60f3\u8c61\u4e2d\u90a3\u4e48\u7b80\u5355\uff0c\u6bd4\u5982\u8bf4\u6bcf\u4e2a\u4ee3\u7801\u6587\u4ef6\u8bbe\u7f6e\u4e00\u4e2aID\uff0c\u7136\u540e\u5efa\u7acb\u4e00\u4e2a\u7528\u6237\u7a0b\u5e8f\u6570\u636e\u5e93\u3002\u56e0\u4e3a\u7a0b\u5e8f\u4ee3\u7801\u603b\u662f\u5173\u8054\u7740\u7c7b\u578b\uff0c\u7c7b\u578b\u548c\u65b9\u6cd5\u5f15\u7528\u5f80\u5f80\u6765\u81ea\u5176\u4ed6\u6587\u4ef6\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7ed3\u6784\u672c\u8eab\u662f\u4e00\u4e2a\u53ca\u5176\u9519\u7efc\u590d\u6742\u7684\u7cfb\u7edf\uff0c\u6839\u672c\u4e0d\u53ef\u80fd\u901a\u8fc7\u6587\u4ef6\u7ea7\u522b\u8fdb\u884c\u5212\u5206\u548c\u7ec4\u5408\u3002\u800c\u5982\u679c\u8981\u901a\u8fc7\u4f20\u7edf\u7684\u7f16\u8bd1\u89e3\u91ca\u673a\u5236\uff1a\u5373\u901a\u8fc7\u9996\u5148\u6784\u5efa\u6240\u6709\u7c7b\u578b\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u901a\u8fc7\u7b26\u53f7\u8868\u67e5\u8be2\u548c\u8ba1\u7b97\u5730\u5740\u7a7a\u95f4\uff0c\u8fd9\u5c31\u51e0\u4e4e\u7b49\u4e8e\u6bcf\u4e00\u6b21\u8fd0\u884c\u7528\u6237\u7a0b\u5e8f\u5c31\u9700\u8981\u52a0\u8f7d\u89e3\u6790\u51e0\u4e4e\u6240\u6709\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5e94\u5bf9\u548c\u7ba1\u7406\u8fd9\u79cd\u65b0\u7684\u9700\u6c42\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\u65b9\u5f0f\u9700\u8981\u53d1\u751f\u5f88\u5927\u7684\u53d8\u5316\u3002\u8fc7\u53bb\u7684\u601d\u7ef4\u662f\u6211\u4eec\u4e0d\u8003\u8651\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u53ea\u9700\u8981\u8003\u8651\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u7c7b\u578b\u5f15\u7528\u5b89\u5168\uff0c\u7136\u540e\u4f9d\u9760\u7f16\u8bd1\u5668\u6765\u5bf9\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u4ee3\u7801\u8c03\u7528\u987a\u5e8f\u8fdb\u884c\u7ba1\u7406\u548c\u7ec4\u7ec7\u3002\u800c\u73b0\u5728\u6211\u4eec\u9700\u8981\u5728\u4e0d\u5f15\u5165\u6240\u6709\u4ee3\u7801\u7684\u60c5\u51b5\u4e0b\u63d0\u524d\u8ba1\u7b97\u6309\u9700\u52a0\u8f7d\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u8fd9\u5c31\u9700\u8981\u5728\u4ee3\u7801\u7ec4\u7ec7\u4e0a\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4f7f\u5f97\u52a0\u8f7d\u5668\u53ef\u4ee5\u76f4\u63a5\u77e5\u9053\u4ec5\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\uff0c\u4ece\u8bed\u8a00\u673a\u5236\u4e2d\u62bd\u53d6\u51fa\u6765\uff0c\u7136\u540e\u5b58\u81f3\u6570\u636e\u5e93\u4e2d\u3002\u4f46\u662f\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u4e0d\u662f\u90a3\u4e48\u597d\u8bc6\u522b\u7684\uff0c\u5e76\u4e14\u6211\u4eec\u4e0d\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u8c03\u6574\u6216\u91cd\u7ec4\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u53ef\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u66f4\u65b0\u3002\u6240\u4ee5\u597d\u7684\u601d\u8def\u662f\u6211\u4eec\u9700\u8981\u5bf9\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ee5\u4fbf\u4e8e\u80fd\u591f\u8fd9\u79cd\u7ec4\u7ec7\u672c\u8eab\u80fd\u591f\u5e2e\u52a9\u6784\u5efa\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8868\u73b0\u4e3a\u5b83\u4f7f\u7528\u7684\u53c2\u6570\uff0c\u800c\u8fd9\u4e2a\u53c2\u6570\u5e76\u4e0d\u662f\u7531\u5f00\u53d1\u8005\u968f\u4fbf\u5b9a\u4e49\u7684\uff08\u5426\u5219\u5b83\u53ef\u4ee5\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u7cfb\u7edf\u6839\u672c\u65e0\u6cd5\u5bf9\u5176\u8fdb\u884c\u63d0\u53d6\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u90a3\u6837\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4eec\u6765\u81ea\u4e8e\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u5171\u4eab\u7b26\u53f7\u8868\u5bf9\u5e94\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5b83\u4e0e\u5176\u4ed6\u7a0b\u5e8f\u4e4b\u95f4\u90fd\u9075\u5faa\u76f8\u540c\u7684\u7b26\u53f7\u5b9a\u4e49")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\u5c31\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u62bd\u53d6\u51fa\u4efb\u4f55\u7528\u6237\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fd9\u662fRealityIS\u5b9e\u73b0\u52a8\u6001\u6027\u7684\u6838\u5fc3\u56e0\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u5c06\u7ec4\u4ef6\u7684\u65b9\u6cd5\u4e0e\u6570\u636e\u4e00\u4e00\u5173\u8054\u8d77\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u5efa\u7acb\u5171\u540c\u9075\u5faa\u7684\u7b26\u53f7\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u4efb\u4f55\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5c31\u4f7f\u5f97\u5bf9\u8c61\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u53ef\u4ee5\u63a8\u7b97\u51fa\u6765\u7684")),(0,n.kt)("p",null,"\u5c06\u7a0b\u5e8f\u8bed\u8a00\u7684\u4f9d\u8d56\u5173\u7cfb\u62bd\u53d6\u51fa\u6765\u4e4b\u540e\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u53d1\u751f\u4e86\u975e\u5e38\u5927\u7684\u53d8\u5316\uff0c\u4ece\u603b\u4f53\u4e0a\u770b\uff0c\u5b83\u53d8\u6210\u4e86\u4e00\u79cd\u590d\u6742\u7684\u5173\u7cfb\u8868\uff0c\u5176\u4e2d\u7684\u4efb\u610f\u7ec4\u5408\u90fd\u53ef\u4ee5\u63a8\u7b97\u51fa\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u662f\u5b9e\u73b0\u5927\u578b\u52a8\u6001\u7cfb\u7edf\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"obj-com",src:l(2717).Z,width:"2666",height:"898"})),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u548c\u7ec4\u4ef6\u878d\u5408\u4e3a\u4e00\u4f53\u662f\u5173\u952e\u601d\u60f3\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u662f\u6ca1\u6709\u8fd9\u79cd\u673a\u5236\u7684\uff0c\u751a\u81f3\u662f\u4e0d\u53ef\u7406\u89e3\u7684\uff0c\u4f46\u662f\u4e0d\u7a81\u7834\u8fd9\u4e00\u70b9\u5c31\u65e0\u6cd5\u5b9e\u73b0\u4e0a\u8ff0\u7684\u529f\u80fd\uff0c\u8fd9\u79cd\u601d\u8def\u89e3\u51b3\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u4e86\u5f00\u53d1\u8005\u6216\u8005\u5bf9\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u5173\u7cfb\u7684\u624b\u52a8\u4e14\u5bb9\u6613\u51fa\u9519\u6216\u9020\u6210\u5197\u4f59\u7684\u7ef4\u62a4")),(0,n.kt)("p",null,"\u8fd9\u65b9\u9762\u7684\u5185\u5bb9\u53c2\u89c1\u9762\u5411\u6570\u636e\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5"},"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5"),(0,n.kt)("p",null,"\u8981\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b8c\u5168\u6309\u8fd9\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\uff0c\u5fc5\u7136\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u4e9b\u95ee\u9898\u81f3\u5c11\u6765\u81ea\u4e24\u4e2a\u65b9\u9762\uff1a1\uff09\u52a8\u6001\u67e5\u8be2\u6570\u636e\u5e93\uff1b2\uff09\u52a8\u6001\u7f16\u8bd1\u3001\u89e3\u91ca\u3001\u94fe\u63a5\u7b49\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u4e0a\u8ff0\u7684\u95ee\u9898\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6211\u4eec\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u64cd\u4f5c\u8fc7\u7a0b\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\u3002\u6839\u636e\u6574\u4e2a\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u8fc7\u7a0b\uff0c\u5927\u6982\u53ef\u4ee5\u5212\u5206\u4e3a\u4e09\u4e2a\u9636\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7f16\u8bd1\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5f00\u53d1\u7ec4\u4ef6\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7f16\u8f91\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u4f7f\u7528\u7ec4\u4ef6\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u52a0\u8f7d\u65f6\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u6267\u884c\u4e4b\u524d")),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u7f16\u8f91\u597d\u5bf9\u8c61\u4e4b\u540e\uff0c\u5176\u76f8\u5e94\u4f7f\u7528\u7684\u7ec4\u4ef6\u53ca\u5176\u6570\u636e\u7ed3\u6784\u5c31\u56fa\u5b9a\u4e0b\u6765\u4e86\uff0c\u800c\u7ec4\u4ef6\u7684\u4ee3\u7801\u5b9e\u9645\u4e0a\u5728\u5f00\u53d1\u8005\u63d0\u4ea4\u5230\u4ee3\u7801\u5e93\u4e4b\u524d\u5c31\u5df2\u7ecf\u7f16\u8bd1\u597d\u4e86\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\u52a8\u6001\u8ba1\u7b97\u7684\u5185\u5bb9\u5c31\u6bd4\u8f83\u7b80\u5355\u3002\u4ec5\u6d89\u53ca\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u987a\u5e8f\u7b49\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2720-\u8ba1\u7b97\u56fe"},"2.7.20 \u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c12.3.6\u8282"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7531\u8f93\u5165\u8f93\u51fa\u7684\u5173\u7cfb\u51b3\u5b9a\u6267\u884c\u987a\u5e8f\uff0c\u8fd9\u6784\u6210\u4e86\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\u3002"),(0,n.kt)("h2",{id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf"},"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64RealityIS\u5e94\u8be5\u662f\u4e00\u4e2a\u5b8c\u5168\u52a8\u6001\u7684\u7cfb\u7edf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u4f53\u73b0\u5728\u591a\u4e2a\u5c42\u9762\u3002"),(0,n.kt)("h3",{id:"281-\u52a8\u6001\u7f16\u8bd1"},"2.8.1 \u52a8\u6001\u7f16\u8bd1"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u7a0b\u5e8f\u662f\u6700\u6838\u5fc3\u7684\u52a8\u6001\u5185\u5bb9\uff0c\u800c\u4e14\u7531\u4e8e\u6574\u4e2a\u4e16\u754c\u4ee3\u7801\u91cf\u5f88\u5927\uff0c\u56e0\u6b64\u5fc5\u987b\u5b8c\u5168\u52a8\u6001\u89e3\u91ca\u3002"),(0,n.kt)("p",null,"\u8d77\u7801\u8981\u6ee1\u8db3\u4e24\u4e2a\u65b9\u9762\u7684\u9700\u6c42\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u6587\u4ef6\u72ec\u7acb\u7f16\u8bd1\uff0c\u4e0d\u80fd\u653e\u5230\u4e00\u6b21\u6027\u7f16\u8bd1"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u94fe\u63a5\u8fc7\u7a0b\uff0c\u53c8\u5fc5\u987b\u505a\u5230\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4e4b\u95f4\u4e0d\u80fd\u6709\u5f15\u7528\uff0c\u56e0\u4e3a\u5f15\u7528\u5c31\u610f\u5473\u7740\u8981\u52a0\u8f7d\u5de8\u5927\u7684\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u52a0\u8f7d\u9700\u8981\u7684\u7ec4\u4ef6\u53ca\u6e90\u4ee3\u7801\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5927\u91cf\u7684\u4e0d\u4f1a\u88ab\u6267\u884c\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u53c2\u89c12.7.6\u8282\u7684\u5185\u5bb9\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u5927\u89c4\u6a21\u7a0b\u5e8f\u5b9e\u65f6\u89e3\u91ca\u7684\uff0cRealityIS\u4f7f\u7528\u4e86\u7279\u6b8a\u7684\u67b6\u6784\u6765\u4fdd\u8bc1\u6574\u4e2a\u7a0b\u5e8f\u5728\u89e3\u91ca\u65f6\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6e90\u4ee3\u7801\u7684\u52a8\u6001\u89e3\u91ca\uff0c\u5b83\u53ea\u53d1\u751f\u5728\u4ee3\u7801\u5f00\u53d1\u7684\u65f6\u5019\uff0c\u4e5f\u5c31\u662f\u5f00\u53d1\u8005\u5728Reality Create\u4e2d\u7f16\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4ee5\u53ca\u53d1\u5e03\u7ec4\u4ef6\u7684\u65f6\u5019\u3002\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u652f\u6301\u5927\u89c4\u6a21\u7684\u4ee3\u7801\u6267\u884c\uff0c\u8fd9\u79cd\u7f16\u8bd1\u53ea\u9488\u5bf9\u5355\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u80fd\u5bf9\u591a\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136RealityIS\u4e5f\u53ef\u4ee5\u907f\u514d\u8fd9\u6837\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cRealityIS\u5728\u5176\u4ed6\u5730\u65b9\uff0c\u5e76\u4e0d\u9700\u8981\u7f16\u8bd1\u3002\u6574\u4e2a\u8fc7\u7a0b\u76f8\u5bf9\u6bd4\u8f83\u8f7b\u91cf\uff0c\u66f4\u591a\u7684\u662f\u52a8\u6001\u4e00\u4e9b\u5b9e\u4f53\u4e0e\u7ec4\u4ef6\u5173\u7cfb\u7684\u7ba1\u7406\u7b49\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u6839\u636e2.3.1.3\u8282\u7684\u5185\u5bb9\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u8ba9\u52a8\u6001\u7684Creation Script\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"},"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"),(0,n.kt)("p",null,"\u5728Reality World\u8fd9\u6837\u5b8c\u5168\u5f00\u653e\u7684\u4e16\u754c\u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u53ea\u80fd\u4e8b\u5148\u8bbe\u7f6e\u597d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u4f8b\u5982\u7528\u6237\u53ef\u4ee5\u4e00\u8fb9\u73a9\u4e00\u8fb9\u4fee\u6539\u573a\u666f\uff0c\u8fd9\u79cd\u521b\u5efa\u7684\u8fc7\u7a0b\u672c\u8eab\u4e5f\u662f\u4e00\u79cd\u73a9\u6cd5\u3002"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u7f16\u8bd1\u597d\u7684\uff0c\u6240\u4ee5\u8fd9\u79cd\u4fee\u6539\u4e0d\u6d89\u53ca\u5230\u4ee3\u7801\u7684\u4fee\u6539\uff0c\u56e0\u6b64\u52a8\u6001\u64cd\u4f5c\u662f\u975e\u5e38\u5bb9\u6613\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7528\u6237\u4fee\u6539\u4e00\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u56e0\u4e3a\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u6570\u636e\u9a71\u52a8\u7684\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u53ea\u6d89\u53ca\u5230\u6570\u636e\u7684\u8c03\u6574\u3002\u7136\u800c\uff0c\u56e0\u4e3aRealityIS\u7684Runtime\u4f1a\u627f\u62c5\u4e00\u90e8\u5206\u89e3\u91ca\u4ee5\u53ca\u7ed9\u6307\u4ee4\u5206\u914d\u6b63\u786e\u5185\u5b58\u5730\u5740\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u7528\u6237\u7684\u6570\u636e\u8c03\u6574\u4f1a\u5bfc\u81f4Creation Table Engine\u5bf9\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e03\u5c40\u8fdb\u884c\u8c03\u6574\u3002\u5f53\u7136\u8fd9\u79cd\u8c03\u6574\u76f4\u53d1\u751f\u5728\u4fee\u6539\u7684\u65f6\u5019\uff0c\u6240\u4ee5\u603b\u4f53\u5e94\u8be5\u4e0d\u4f1a\u5f71\u54cd\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f"},"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f"),(0,n.kt)("p",null,"Reality World\u662f\u4e00\u4e2a\u975e\u5e38\u5de8\u5927\u7684\u4e16\u754c\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u80fd\u6309\u7167\u4f20\u7edf\u7684\u65b9\u5f0f\u4e00\u4e0b\u5b50\u52a0\u8f7d\u6574\u4e2a\u7a0b\u5e8f\uff0c\u800c\u662f\u53ea\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u7528\u6237\u9700\u8981\u7684\u6570\u636e\u3002\u8fd9\u91cc\u9762\u53ef\u80fd\u8981\u6d89\u53ca\u5f88\u591a\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u6570\u636e\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0"},"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0"),(0,n.kt)("p",null,"\u5f53\u7528\u6237A\u4fee\u6539\u4e86\u5185\u5bb9\uff0c\u5176\u4ed6\u4e0e\u8fd9\u4e2a\u5185\u5bb9\u76f8\u5173\u7684\u7528\u6237\u5f53\u524d\u7684\u573a\u666f\u5fc5\u987b\u52a8\u6001\u66f4\u65b0\u3002"),(0,n.kt)("h3",{id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"},"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u7531\u4e8e\u6574\u4e2a\u5185\u5bb9\u7684\u521b\u5efa\u3001\u52a0\u8f7d\u3001\u66f4\u65b0\u548c\u63a8\u9001\u7b49\u7b49\uff0c\u90fd\u662f\u52a8\u6001\u53d1\u751f\u7684\uff0c\u4efb\u52a1\u590d\u6742\u800c\u4e14\u8ba1\u7b97\u91cf\u8f83\u5927\uff0c\u6240\u4ee5\u9700\u8981\u52a8\u6001\u7684\u5206\u914d\u670d\u52a1\u5668\uff0c\u4e0d\u80fd\u6709\u4e00\u4e9b\u592a\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6216\u8005\u9700\u8981\u4eba\u5de5\u8fdb\u884c\u67d0\u4e9b\u914d\u7f6e\u7684\u5de5\u4f5c\uff0c\u800c\u4e14\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u884c\u4f38\u7f29\u7684\u3002"),(0,n.kt)("h3",{id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"},"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u673a\u5236\u4e2d\uff0c\u89d2\u8272Avator\u662f\u4e00\u4e2a\u6bd4\u8f83\u590d\u6742\u7684\u7c7b\uff0c\u4ed6\u9700\u8981\u627f\u8f7d\u6240\u6709Avator\u6240\u80fd\u64cd\u4f5c\u7684\u529f\u80fd\uff0c\u5176\u4ed6\u7269\u4f53\u5bf9\u8c61\u7684\u811a\u672c\u901a\u5e38\u5219\u6bd4\u8f83\u7b80\u5355\u56fa\u5b9a\u3002avator\u51e0\u4e4e\u53ef\u4ee5\u8ddf\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u4e00\u5207\u7269\u4f53\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u5c31\u5bfc\u81f4\u4e00\u4e2a\u95ee\u9898\uff0c\u5373avator\u6240\u643a\u5e26\u7684\u5927\u90e8\u5206\u7ec4\u4ef6\u529f\u80fd\uff0c\u5728\u67d0\u4e2a\u65f6\u523b\u53ef\u80fd\u90fd\u4e0d\u9700\u8981\uff0c\u56e0\u4e3a\u5b83\u4e00\u6b21\u53ef\u80fd\u53ea\u8ddf\u5c11\u6570\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u4e92\uff0c\u4f7f\u7528\u5c11\u6570\u6280\u80fd\u3002"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u53d1\u7684\u5927\u4e16\u754c\uff0c\u8fd9\u6837\u7684\u95ee\u9898\u5c31\u66f4\u52a0\u4e25\u91cd\uff0c\u56e0\u4e3a\u6240\u6709avator\u80fd\u591f\u6267\u884c\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u65e0\u7a77\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u52a0\u8f7d\u5728avator\u8eab\u4e0a\uff0c\u800c\u5fc5\u987b\u5b9e\u73b0\u6839\u636e\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u3002\u4f8b\u5982\uff0c\u73a9\u5bb6\u8981\u8fdb\u5165\u4e00\u5757\u51b0\u96ea\u4e4b\u5730\uff0c\u5468\u56f4\u7684\u73af\u5883\u4f1a\u5bf9\u5b83\u7684\u4f53\u80fd\u6d88\u8017\u9020\u6210\u5f71\u54cd\uff0c\u8fd9\u79cd\u53ea\u6709\u5728\u8fd9\u4e2a\u73af\u5883\u624d\u80fd\u53d1\u6325\u4f5c\u7528\u7684\u7ec4\u4ef6\uff0c\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e2a\u533a\u57df\uff0c\u73a9\u5bb6\u8fdb\u5165\u8fd9\u4e2a\u533a\u57df\u7684\u65f6\u5019\u52a8\u6001\u52a0\u8f7d\u8fd9\u4e2a\u7ec4\u4ef6\uff0c\u7136\u540e\u79bb\u5f00\u7684\u65f6\u5019\u5378\u8f7d\u8be5\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u8fd9\u79cd\u52a8\u6001\u52a0\u8f7d\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd8\u662f\u6709\u4e00\u4e9b\u60c5\u51b5\u53ef\u4ee5\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u8fd9\u79cd\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2aBounding box"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u73a9\u5bb6\u4e3b\u52a8\u9009\u62e9\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u8d5b\u8f66\u5e7f\u544a\uff0c\u73a9\u5bb6\u9ed8\u8ba4\u80af\u5b9a\u662f\u4e0d\u5e26\u8fd9\u4e9b\u7ec4\u4ef6\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u7ec4\u4ef6\uff0c\u8ba9\u73a9\u5bb6\u9009\u62e9\u9700\u8981\u52a0\u8f7d\u8d5b\u8f66\u7ec4\u4ef6\uff1b\u4e8b\u5b9e\u4e0a\u8fd9\u5e94\u8be5\u6210\u4e3a\u9ed8\u8ba4\u673a\u5236\uff0c\u5373\u73a9\u5bb6\u770b\u5230\u67d0\u4e2a\u7269\u4f53\uff0c\u4f46\u662f\u5374\u4e0d\u80fd\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\u7684\u65f6\u5019\uff0c\u73a9\u5bb6\u5c31\u53ef\u4ee5\u9009\u62e9\u8fd9\u4e2a\u7269\u4f53\uff0c\u6309\u4e00\u4e2a\u7279\u6b8a\u7684\u952e\uff0c\u5c31\u81ea\u52a8\u88c5\u4e0a\u5bf9\u5e94\u7684\u7ec4\u4ef6\uff0c\u540c\u6837\u73a9\u5bb6\u53ef\u4ee5\u5378\u8f7d\uff0c\u73a9\u5bb6\u53ef\u4ee5\u67e5\u770b\u8eab\u4e0a\u88c5\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u957f\u65f6\u95f4\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7cfb\u7edf\u53ef\u4ee5\u81ea\u884c\u5378\u8f7d\u6389\uff0c\u751a\u81f3\u8bbe\u7f6e\u4e00\u4e2a\u6700\u5927\u7ec4\u4ef6\u6570\u91cf\u3002\u4f8b\u5982\u73a9\u5bb6\u81ea\u5df1\u5f88\u6e05\u695a\u9700\u8981\u73a9\u54ea\u4e00\u4e2a\u6e38\u620f\uff0c\u5b83\u53ef\u80fd\u4e3b\u52a8\u88c5\u8f7d\u4e0a\u4e0e\u4e4b\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u53d8\u5316\u7f16\u7a0b\uff0c\u5373\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\u4e0d\u4f1a\u53d1\u751f\u8ba1\u7b97\u548c\u7f51\u7edc\u4f20\u8f93\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u4ecd\u7136\u5360\u636e\u5185\u5b58\uff0c\u5e76\u4e0d\u662f\u5f88\u53ef\u53d6\u7684\u65b9\u6848\u3002")),(0,n.kt)("h3",{id:"287-\u52a8\u6001\u5524\u9192"},"2.8.7 \u52a8\u6001\u5524\u9192"),(0,n.kt)("p",null,"\u5373\u65f6\u5524\u9192\uff1a\u5982\u679c\u77e5\u9053\u54ea\u4e9b\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u53d8\u91cf\u611f\u5174\u8da3\uff0c\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u8ba9\u8fd9\u4e9b\u6570\u636e\u5b9e\u65f6\u5904\u4e8e\u5185\u5b58\uff0c\u800c\u53ef\u4ee5\u4e3b\u52a8\u5373\u65f6\u52a0\u8f7d\u4ee3\u7801\u5e76\u6267\u884c\uff0c\u76f8\u5f53\u4e8e\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u6570\u636e\u5b58\u50a8\u5230\u4e86\u786c\u76d8\uff0c\u7136\u540e\u901a\u8fc7\u7f13\u5b58\u673a\u5236\u52a8\u6001\u52a0\u8f7d\uff0c\u5b9e\u9645\u4e0a\u7f13\u5b58\u7cfb\u7edf\u672c\u6765\u4e5f\u662f\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u5f53\u5185\u5b58\u6570\u636e\u8fc7\u591a\u65f6\uff0c\u90a3\u4e9b\u4e0d\u5e38\u7528\u7684\u6570\u636e\u5c31\u4f1a\u88ab\u7f13\u5b58\u5230\u786c\u76d8\uff0c\u4f46\u53c8\u53ef\u4ee5\u5373\u65f6\u88ab\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"29-\u4e92\u64cd\u4f5c\u6027"},"2.9 \u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems."),(0,n.kt)("p",null,"\u5e7f\u4e49\u4e0a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u6307\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u4e2d\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u8ddf\u4e24\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u534f\u8c03\u5de5\u4f5c\u3002\u8fd9\u4e9b\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u53ef\u4ee5\u662f\u4efb\u4f55\u9886\u57df\uff0c\u6bd4\u5982\u91d1\u878d\u3001\u533b\u7597\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"With respect to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Software"},"software"),", the term ",(0,n.kt)("em",{parentName:"p"},"interoperability")," is used to describe the capability of different programs to exchange data via a common set of exchange formats, to read and write the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/File_format"},"file formats"),", and to use the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Protocol_(computing)"},"protocols"),". The lack of interoperability can be a consequence of a lack of attention to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Standardization"},"standardization")," during the design of a program."),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e8e\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u7528\u4e8e\u63cf\u8ff0\u4e24\u4e2a\u4e0d\u540c\u7684\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u4e00\u5b9a\u7684\u4ea4\u6362\u683c\u5f0f\u4ea4\u6362\u6570\u636e\u7684\u80fd\u529b\uff0c\u8be5\u4e24\u4e2a\u7a0b\u5e8f\u80fd\u591f\u901a\u8fc7\u76f8\u540c\u7684\u534f\u8bae\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u6027\u6ce8\u91cd\u7684\u662f\u7cfb\u7edf\u4e4b\u95f4\u7684\u6807\u51c6\uff0c\u5982\u679c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u9700\u8981\u5f88\u597d\u5730\u534f\u4f5c\uff0c\u9700\u8981\u4e8b\u5148\u5f88\u597d\u5730\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\uff0c\u5426\u5219\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u6839\u672c\u65e0\u6cd5\u534f\u540c\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u968f\u7740\u5f00\u653e\u5143\u5b87\u5b99\u548c\u53bb\u4e2d\u5fc3\u5316\u7684\u9700\u6c42\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\uff0cRealityIS\u6709\u4e00\u4e9b\u4e0d\u4e00\u6837\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u8981\u6c42\u4f7f\u5f97\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u5f88\u96be\u53bb\u6784\u5efa\u8fd9\u6837\u7684\u80fd\u529b\u3002\u672c\u8282\u901a\u8fc7\u7cfb\u7edf\u68b3\u7406\u4e92\u64cd\u4f5c\u6027\u7684\u6982\u5ff5\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u89e3\u91caRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u601d\u8def\u548c\u65b9\u6cd5\uff0c\u4ee5\u53ca\u5b83\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"},"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7684\u4e92\u64cd\u4f5c\u6027\u90fd\u9700\u8981\u4e00\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u673a\u5236\u6765\u652f\u6301\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u662f\u6307\u8bed\u8a00\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Language interoperability")," is the capability of two different ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Programming_languages"},"programming languages")," to natively interact as part of the same system and operate on the same kind of data structures."),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\u6027\u662f\u6307\u4e24\u4e2a\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u4e4b\u95f4\uff0c\u80fd\u591f\u539f\u751f\u5730\u8fdb\u884c\u4ea4\u4e92\uff0c\u4ee5\u53ca\u5bf9\u76f8\u540c\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u64cd\u4f5c\u7684\u80fd\u529b\u3002\u5176\u4e2d\u4e24\u79cd\u6bd4\u8f83\u91cd\u8981\u7684\u673a\u5236\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u6807\u8bb0\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u901a\u8fc7\u865a\u62df\u673a")),(0,n.kt)("p",null,"\u8fdb\u884c\u4e92\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"There are many ways programming languages are interoperable with one another. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/HTML"},"HTML"),", ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Cascading_Style_Sheets"},"CSS"),", and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/JavaScript"},"JavaScript")," are interoperable as they are used in tandem in webpages. Some ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Object_oriented"},"object oriented")," languages are interoperable thanks to their shared hosting ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (e.g. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_CLI_languages"},".NET CLI compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Common_Language_Runtime"},"Common Language Runtime")," and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_JVM_languages"},"JVM compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Java_virtual_machine"},"Java Virtual Machine"),")."),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u6807\u8bb0\u8bed\u8a00\uff0c\u5f53HTML+CSS\u6807\u8bb0\u8bed\u8a00\u5728\u6d4f\u89c8\u5668\u4e2d\u8fdb\u884c\u89e3\u91ca\u6267\u884c\u6027\uff0c\u5176\u4e2d\u5b9a\u4e49\u7684\u5143\u7d20\u80fd\u591f\u88abJavaScript\u8bed\u8a00\u8fdb\u884c\u89e3\u91ca\uff1b\u800c\u5bf9\u4e8e\u57fa\u4e8e\u865a\u62df\u673a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5b83\u4eec\u4e3b\u8981\u662f\u501f\u52a9\u865a\u62df\u673a\u7684\u76f8\u540c\u4e2d\u95f4\u8bed\u8a00\u53ca\u5185\u5b58\u7ed3\u6784\uff0c\u4e0d\u540c\u8bed\u8a00\u7f16\u5199\u7684\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"2911-object-models"},"2.9.1.1 Object models"),(0,n.kt)("p",null,"Object models are standardised models which allow objects to be represented in a language-agnostic way, such that the same objects may be used across programs and across languages. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/CORBA"},"CORBA")," and the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Component_Object_Model"},"COM")," are the most popular object models."),(0,n.kt)("h4",{id:"2912-virtual-machines"},"2.9.1.2 Virtual machines"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"vm-il",src:l(9080).Z,width:"2210",height:"1052"})),(0,n.kt)("p",null,"Different Languages compile into a shared runtime"),(0,n.kt)("p",null,"A ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (VM) is a specialised intermediate language that several different languages compile down to. Languages that use the same virtual machine can interoperate, as they will share a memory model and compiler and thus libraries from one language can be re-used for others on the same VM. VMs can incorporate type systems to ensure the correctness of participating languages and give languages a common ground for their type information. The use of an intermediate language during compilation or interpretation can provide more opportunities for optimisation."),(0,n.kt)("h4",{id:"2913-foreign-function-interfaces"},"2.9.1.3 Foreign function interfaces"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Foreign_function_interface"},"Foreign function interfaces")," (FFI) allow programs written in one language to call functions written in another language. There are often considerations that preclude simply treating foreign functions as functions written in the host language, such as differences in types and execution model. Foreign function interfaces enable building ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Wrapper_library"},"wrapper libraries")," that provide functionality from a library from another language in the host language, often in a style that is more idiomatic for the language. Most languages have FFIs to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/C_(programming_language)"},"C"),', which is the "lingua franca" of programming today.'),(0,n.kt)("h4",{id:"2914-challenges"},"2.9.1.4 Challenges"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Object model differences")),(0,n.kt)("p",null,"Object oriented languages attempt to pair containers of data with code, but how each language chooses how to do that may be slightly different. Those design decisions do not always map to other languages easily. For instance, classes using multiple inheritance from a language that permits it will not translate well to a language that does not permit multiple inheritance. A common approach to this issue is defining a subset of a language that is compatible with another language's features.[",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Language_interoperability#cite_note-3"},"3","]")," This approach does mean in order for the code using features outside the subset to interoperate it will need to wrap some of its interfaces into classes that can be understood by the subset."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Memory models")),(0,n.kt)("p",null,"Differences in how programming languages handle de-allocation of memory is another issue when trying create interoperability. Languages with automatic de-allocation will not interoperate well with those with manual de-allocation, and those with deterministic destruction will be incompatible with those with nondeterministic destruction. Based on the constraints of the language there are many different strategies for bridging the different behaviors. For example: C++ programs, which normally use manual de-allocation, could interoperate with a Java style garbage collector by changing de-allocation behavior to delete the object, but not reclaim the memory. This requires that each object will have to manually be de-allocated, in order for the garbage collector to release the memory safely."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Mutability")),(0,n.kt)("p",null,"Mutability becomes an issue when trying to create interoperability between pure functional and procedural languages. Languages like ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Haskell_(programming_language)"},"Haskell")," have no mutable types, whereas C++ does not provide such rigorous guarantees. Many functional types when bridged to object oriented languages can not guarantee that the underlying objects won't be modified."),(0,n.kt)("h3",{id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"In addition to the perspective of scalability, we also need to think from a practical perspective, why we need interoperability, or why we need cross-chain. Traditionally, blockchain can solve the problem of trust. If scalability can be solved, then the problem of performance will also be solved. Interoperability can actually solve the broader problem of trust when the above two issues are resolved."),(0,n.kt)("p",null,"At present, different application scenarios have different alliance chains and public chains. With these chains in place, we need to use interoperability to communicate useful data. This will involve different approaches to cross-chain or interoperability. In the future, we will see a blockchain system with extremely blurred boundaries, that is, private chains, alliance chains, and public chains are interconnected in some way."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"blockchain-op",src:l(7681).Z,width:"2360",height:"982"})),(0,n.kt)("p",null,"The interoperability in the blockchain field, why is it not explicitly mentioned in traditional Internet applications? Because the Internet infrastructure now provides these functions, such as various SDKs and APIs. If you make an application and want to call the data on WeChat, then you can get the data down through the SDK and interface on WeChat. If you want to make a payment, Alipay also has a corresponding payment channel. When you write the code, you can call the API to make the payment. At present, the reason why it cannot be done on the blockchain is that our data is still in an isolated state due to the different consensus and block structures of various blockchains. In order for the data on different islands to communicate, we must connect different blockchains through interoperability and cross-chain systems."),(0,n.kt)("p",null,"What are the specific ways of interoperability and cross-chain protocols? The first way is the notary model. There is a notary between different chains. The second way to relatively decentralize is the side chain pattern. Through the side chain method, on the chain B, it can be verified which transactions on the chain A are written into the block, then the chain B can verify the operations on A and perform corresponding operations on B such as transfer. The third method is hash time lock. This is a relatively complex protocol. It is a cross-chain operation that integrates decentralized and transparent transaction assets conversion. To put it simply, if I trade bitcoin for Ethereum, I put a lock on Bitcoin, and at the same time, the other party also puts a lock on Ethereum. I give him the key, and I can get the corresponding Ethereum with the same key, and at the same time he can get the corresponding Bitcoin based on the key. There is also a time lock, which guarantees that both parties can only unlock Ethereum and Bitcoin within a limited time, otherwise the agreement will automatically terminate and neither party will obtain the assets of the other."),(0,n.kt)("h3",{id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Understanding Metaverse Interoperability")),(0,n.kt)("p",null,"Interoperability is the preeminent driving force behind the development of the metaverse. Let\u2019s take a look at ",(0,n.kt)("a",{parentName:"p",href:"https://www.oodlestechnologies.com/blockchain-applications-development/"},"blockchain technology")," to decode how interoperability works in the metaverse. "),(0,n.kt)("p",null,"In blockchain environments, we have both non-interoperable as well as interoperable platforms. However, interoperability is imperative if we are seeking to devise blockchain-powered high-utility services in the metaverse."),(0,n.kt)("p",null,"Interoperability equips the blockchain ecosystem to communicate, use one another\u2019s features and services, share arbitrary data, and more. Similarly, interoperability enables a myriad of metaverse projects to function in a unified manner through sharing of services, data, features, and experiences. It also allows cross-platform trading as well as other activities that are nearly impossible to function in siloed spaces."),(0,n.kt)("p",null,"To understand the concept of metaverse interoperability in a different way, let us take a look at the internet. It is equipped with layered standards that enable diverse networks as well as subnetworks to seamlessly interact with each other. "),(0,n.kt)("p",null,"In the real world, when we move between different locations, our identities also travel from one place to another without any trouble. Even our assets and possessions can be effectively transferred to different locations without undergoing any major changes. It signifies that there is a continuity in the real world that altogether keeps us as well as our assets intact during any transit. "),(0,n.kt)("p",null,"This is the reason why metaverse \u2013 the integration of borderless virtual worlds \u2013 aims at furnishing a transparent platform for socio-cultural interaction, similar to the physical world. Such amalgamation would make all digital realms, irrespective of their canvas and size, an integral part of a larger existence or entity."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Domains of Interoperability")),(0,n.kt)("p",null,"To illustrate various domains of interoperability in the metaverse, here is a representation for a quick reference:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Connectivity: Networking, communications"),(0,n.kt)("li",{parentName:"ul"},"Persistence: Ownership, Identity, History, Accounting"),(0,n.kt)("li",{parentName:"ul"},"Presentation: Physical properties, graphic models"),(0,n.kt)("li",{parentName:"ul"},"Meaning: Semantics, metadata, ontologies"),(0,n.kt)("li",{parentName:"ul"},"Behavior: Economies, rules, consequence, power")),(0,n.kt)("h3",{id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u5185\u5bb9\u53ef\u4ee5\u770b\u51fa\uff0c\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u805a\u7126\u5728\u4e24\u4e2a\u4e0d\u540c\u7684\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c",(0,n.kt)("strong",{parentName:"p"},"\u4fe1\u606f\u4ea4\u6362"),"\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728HTML\u4e2d\u6267\u884cJavaScript\u811a\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u5728JVM\u4e4b\u95f4\u5b9e\u73b0\u4e0d\u540c\u8bed\u8a00\u7684\u76f8\u4e92\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"C\u548cLua\u4e4b\u95f4\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e24\u4e2a\u72ec\u7acb\u7684\u533a\u5757\u94fe\u4e2d\u8054\u901a\uff0c\u5df2\u5b9e\u73b0\u8de8\u94fe\u7684\u4ea4\u6613\uff0c\u5e76\u786e\u4fdd\u94fe\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6362\u662f\u53ef\u4fe1\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u80fd\u591f\u6b63\u786e\u8bc6\u522b\u4e0d\u540c\u7528\u6237\u7684\u8eab\u4efd\u3001\u7ecf\u6d4e\u3001\u7269\u7406\u5916\u89c2\u7b49\u4e00\u4e9b\u57fa\u672c\u5c5e\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u5f88\u597d\u7684\u6982\u5ff5\uff0c\u4f46\u5b9e\u9645\u5b83\u4eec\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u5f62\u6210\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u9769\u65b0\u3002\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u4f20\u7edf\u8bed\u8a00\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u6027\u7279\u6027\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u662f\u4f20\u7edf\u7684\u4e92\u8054\u7f51\u5e94\u7528\u4e4b\u95f4\u901a\u8fc7\u5404\u81ea\u7684API\u6216\u8005SDK\u65e9\u5c31\u5df2\u7ecf\u5b9e\u73b0")),(0,n.kt)("p",null,"RealityIS\u5bf9\u4e92\u64cd\u4f5c\u6027\u6709\u5168\u65b0\u7684\u7406\u89e3\u548c\u76ee\u6807\uff0c\u8fd9\u4e9b\u9700\u6c42\u662f\u672a\u6765\u8ba1\u7b97\u67b6\u6784\u548c\u6d88\u8d39\u8005\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u5ba2\u89c2\u9700\u6c42\u3002\u4e3a\u4e86\u66f4\u597d\u5730\u7406\u89e3\u8fd9\u4e9b\u9700\u6c42\uff0c\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027 \u6709\u54ea\u4e9b\u4e0d\u8db3\u3002"),(0,n.kt)("h4",{id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"},"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8bed\u8a00\u4e92\u64cd\u4f5c\u4e3b\u8981\u5f3a\u8c03\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5171\u4eab\uff1a\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u53ef\u4ee5\u4f20\u9012\u6d88\u606f\uff0c\u5f53\u7136\u8fd9\u4e2a\u6d88\u606f\u901a\u5e38\u4e0d\u4ec5\u4ec5\u662f\u5355\u7eaf\u7684\u5b57\u7b26\u4e32\uff0c\u800c\u662f\u5305\u542b\u4e24\u8005\u90fd\u80fd\u591f\u7406\u89e3\u548c\u89e3\u91ca\u7684\u683c\u5f0f\u534f\u8bae\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u5305\u542b\u4e00\u5b9a\u7684\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6570\u636e\u7ed3\u6784\u5f80\u5f80\u662f\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u5f62\u6210\u7684\u901a\u4fe1\u6807\u51c6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u5171\u4eab\uff1a\u5176\u4e2d\u4e00\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u7f16\u5199\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u53ef\u4ee5\u5728\u53e6\u4e00\u4e2a\u7cfb\u7edf\u4e2d\u6267\u884c\uff0c\u4f8b\u5982JavaScript\u4ee3\u7801\uff0c\u6216\u8005\u5728JVM\u4e0a\u4f7f\u7528\u4e0d\u540c\u8bed\u8a00\u5f00\u53d1\u7684\u5e93\uff0c\u4f8b\u5982Scala\u8bed\u8a00\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u4f20\u7edfJava\u8bed\u8a00\u7f16\u5199\u7684\u4ee3\u7801\u5e93\u3002")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u662f\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4f46\u662f\u603b\u7684\u6765\u8bb2\uff0c\u5728\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u4e2d\u4e24\u4e2a\u8bed\u8a00\u901a\u5e38\u5e76\u4e0d\u5bf9\u7b49\uff0c\u5176\u4e2d\u4e00\u4e2a\u5f80\u5f80\u662f\u53e6\u4e00\u4e2a\u8bed\u8a00\u7684\u8f85\u52a9\u7cfb\u7edf\u3002\u5176\u4e3b\u8981\u7684\u53cd\u6620\u51fa\u6765\u7684\u7279\u5f81\u662f\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u5728\u5176\u4e2d\u4e00\u4e2a\u7cfb\u7edf\u6216\u8bed\u8a00\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u6682\u4e14\u79f0\u4e3a\u5bbf\u4e3b\u8bed\u8a00\uff0c\u53e6\u4e00\u4e2a\u8bed\u8a00\u6ca1\u6709\u81ea\u5df1\u7684\u8fd0\u884c\u65f6\uff0c\u5b83\u7684\u4ee3\u7801\u9700\u8981\u4f9d\u9644\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u8fd0\u884c\u65f6\u4e2d\u8fd0\u884c\uff0c\u800c\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\u4e4b\u6240\u4ee5\u80fd\u591f\u8fd0\u884c\u5916\u6765\u8bed\u8a00\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u80fd\u591f\u6267\u884c\u8fd9\u90e8\u5206\u5e26\u6765\u8bed\u8a00\u7684\u4ee3\u7801\uff0c\u5e76\u53ef\u4ee5\u501f\u52a9\u865a\u62df\u673a\u4e0e\u5bbf\u4e3b\u5171\u4eab\u5185\u5b58\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u53ef\u4ee5\u5171\u4eab\u5185\u5b58\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u4e9b\u5185\u5b58\u4e2d\u6570\u636e\u7684\u6240\u6709\u8005\u901a\u5e38\u662f\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5185\u5b58\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u5bf9\u8c61\u57fa\u672c\u4e0a\u90fd\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u5206\u914d\u548c\u7ba1\u7406\u3002\u5916\u6765\u8bed\u8a00\u5c3d\u7ba1\u53ef\u4ee5\u7528\u4e8e\u58f0\u660e\u6216\u6784\u9020\u81ea\u5df1\u7684\u53d8\u91cf\uff0c\u4f46\u8fd9\u4e9b\u53d8\u91cf\u901a\u5e38\u662f\u5c40\u90e8\u53d8\u91cf\uff0c\u5916\u6765\u8bed\u8a00\u7684\u4ee3\u7801\u603b\u7684\u6765\u8bf4\u66f4\u50cf\u662f\u4e00\u4e2a\u51fd\u6570\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u4e2d\u6267\u884c\uff0c\u5e76\u4e14\u901a\u5e38\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u5f62\u6210\u8fd9\u79cd\u4e0d\u5bf9\u7b49\uff0c\u662f\u56e0\u4e3a\u4e00\u4e2a\u8bed\u8a00\u5bf9\u5e94\u7684\u7a0b\u5e8f\u5728\u8fd0\u884c\u65f6\u662f\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u4ee3\u7801\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u4e0a\u4e0b\u6587\u7684\u6570\u636e\u6784\u9020\u7684\uff0c\u800c\u4f5c\u4e3a\u4e00\u4e2a\u7b80\u5355\u6d88\u606f\u4f20\u9012\u8fc7\u6765\u7684\u4ee3\u7801\uff0c\u6839\u672c\u4e0d\u8db3\u4e8e\u6784\u9020\u5927\u91cf\u5c5e\u4e8e\u5b83\u81ea\u5df1\u7684\u4e0a\u4e0b\u6587\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7406\u8bba\u4e0a\u53ef\u4ee5\u7f16\u5199\u590d\u6742\u7684\u4ee3\u7801\u4f20\u7ed9\u5bbf\u4e3b\u8bed\u8a00\uff0c\u6216\u8005\u5728\u5bbf\u4e3b\u8bed\u8a00\u4e2d\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e48\u591a\u7684\u4ee3\u7801\u4e0e\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u4ea4\u4e92\u5c06\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u6240\u4ee5\u5927\u90e8\u5206\u4e92\u64cd\u4f5c\u4e3b\u8981\u662f\u7528\u6765\u5b9e\u73b0\u4e00\u4e9b\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u7684\u5c11\u90e8\u5206\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ea7\u522b\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u8db3\u4e8e\u771f\u6b63\u6253\u7834\u4e24\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5272\u88c2\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u771f\u6b63\u9700\u6c42\u7684\uff0c\u4e5f\u662fRealityIS\u5b9a\u4e49\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u5c06\u4e24\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u770b\u505a\u5bf9\u7b49\u7684\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e0d\u5b58\u5728\u5bbf\u4e3b\u548c\u5916\u6765\u8bed\u8a00\u7684\u6982\u5ff5\uff0c\u5b83\u4eec\u540c\u65f6\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5168\u90e8\u6570\u636e\uff0c\u5b83\u4eec\u540c\u65f6\u62e5\u6709\u5404\u81ea\u5b8c\u6574\u7684\u5168\u90e8\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u53ef\u4ee5\u8fdb\u884c\u4efb\u4f55\u4ee3\u7801\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u76f8\u4e92\u8c03\u7528\u548c\u5171\u4eab\uff0c\u53ea\u8981\u7528\u6237\u7528\u6237\u5b83\u4eec\u6709\u8fd9\u6837\u7684\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"},"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"is",src:l(7939).Z,width:"2720",height:"1406"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5176\u6839\u57fa\u8fd8\u662f\u9762\u5411\u5355\u5e94\u7528\uff0c\u5b83\u89e3\u51b3\u7684\u662f\u5355\u5e94\u7528\u6216\u8005\u5355\u4e2a\u7cfb\u7edf\u8ddf\u5916\u754c\u4e4b\u95f4\u600e\u6837\u901a\u4fe1\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u901a\u4fe1\u901a\u5e38\u5f88\u7b80\u5355\uff0c\u6bd4\u5982\u5bf9\u4e8e\u5fae\u4fe1\u3001\u652f\u4ed8\u5b9d\u6765\u8bf4\uff0c\u8c03\u7528\u5b83\u4eec\u63d0\u4f9b\u7684API\u5176\u5b9e\u5c31\u662f\u4e00\u79cd\u548c\u8fd9\u4e9b\u7cfb\u7edf\u7684\u4e92\u64cd\u4f5c\u3002\u8fd9\u79cd\u4e92\u64cd\u4f5c\u4e4b\u95f4\u4f20\u9012\u7684\u4fe1\u606f\u7528\u4e00\u4e9b\u7b80\u5355\u7ed3\u6784\u7684\u5b57\u7b26\u4e32\u90fd\u53ef\u4ee5\u3002\u8fd9\u4e9b\u7cfb\u7edf\u4e4b\u95f4\u7684\u534f\u8bae\u6216\u8005\u6807\u51c6\u901a\u5e38\u4e5f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u901a\u5e38\u8868\u73b0\u51fa\u4e00\u4e0b\u51e0\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u662f\u5355\u5411\u7684\uff0c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u901a\u5e38\u4e0d\u5bf9\u7b49\uff0c\u8868\u73b0\u4e3a\u4f17\u591a\u5c0f\u5e94\u7528\u4f9d\u9644\u4e8e\u4e00\u4e9b\u5927\u7684\u5e73\u53f0\uff0c\u4f8b\u5982\u73b0\u5728\u7684\u5c0f\u7a0b\u5e8f\u3001\u5fae\u4fe1\u5e73\u53f0\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u901a\u4fe1\u7684\u5185\u5bb9\u6bd4\u8f83\u7b80\u5355\uff0c\u6269\u5c55\u80fd\u529b\u8f83\u5dee\uff0c\u4f8b\u5982\u5982\u679c\u9700\u8981\u6269\u5c55\u4e00\u4e9b\u6d88\u606f\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u5b9a\u4e49\u53cc\u65b9\u7684\u89e3\u6790\u683c\u5f0f\uff0c\u66f4\u4e0d\u7528\u8bf4\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u6d88\u606f\u901a\u4fe1\u4e86")),(0,n.kt)("p",null,"RealityIS\u8ddf\u8fd9\u4e9b\u673a\u5236\u7684\u6700\u5927\u4e0d\u540c\uff0c\u5728\u4e8e\u5b83\u5c1d\u8bd5\u89e3\u51b3\u4e24\u4e2a\u66f4\u590d\u6742\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u7b49\u6027"),"\uff0c\u5373\u4e92\u64cd\u4f5c\u7684\u4e24\u4e2a\u7a0b\u5e8f\u6216\u7cfb\u7edf\u4e4b\u95f4\u662f\u5bf9\u7b49\u7684\uff0c\u4e0d\u662f\u4f9d\u9644\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6269\u5c55\u6027"),"\uff0c\u53ef\u4ee5\u6bd4\u8f83\u5bb9\u6613\u5730\u5b9e\u73b0\u4efb\u610f\u901a\u4fe1\uff0c\u800c\u4e0d\u662f\u5c40\u9650\u4e8e\u5c11\u6570\uff08\u4e5f\u6bd4\u8f83\u5bb9\u6613\u5b9e\u73b0\u7684\uff09\u534f\u5b9a\u7684\u683c\u5f0f")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8981\u6c42\u5bf9\u4e92\u64cd\u4f5c\u6027\u7684\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u4e86\u5168\u65b0\u7684\u6311\u6218\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u57fa\u672c\u4e0a\u5f88\u96be\u652f\u6301\u8fd9\u6837\u7684\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u5bf9\u7b49\u6027\u5bf9\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u7684\u4e3b\u8981\u6311\u6218\u662f\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u5171\u4eab\uff0c\u5373\u6240\u6709\u5b50\u7a0b\u5e8f\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u5747\u6709\u5404\u81ea\u7684\u5b8c\u6574\u7684\u5185\u5b58\u4e0a\u4e0b\u6587\uff1a\u5373\u6240\u6709\u6570\u636e\u548c\u4ee3\u7801\uff0c\u629b\u5f00\u6389\u4e92\u64cd\u4f5c\u6027\u7684\u9700\u8981\uff0c\u6bcf\u4e2a\u5b50\u7a0b\u5e8f\u90fd\u662f\u4e00\u4e2a\u72ec\u7acb\u771f\u6b63\u7684\u7a0b\u5e8f\u3002\u56e0\u4e3a\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u90fd\u53ef\u4ee5\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u4e2a\u8ba1\u7b97\u67b6\u6784\u7684\u6839\u672c\u53d8\u9769\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u9488\u5bf9\u5355\u5e94\u7528\u7684\uff0c\u56e0\u6b64\u6574\u4e2a\u5185\u5b58\u7684\u6570\u636e\u90fd\u53ef\u4ee5\u7531\u8be5\u7a0b\u5e8f\u81ea\u7531\u63a7\u5236\u548c\u5904\u7406\uff0c\u73b0\u5728\u7f16\u7a0b\u8bed\u8a00\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u6574\u4e2a\u7f16\u8bd1\u8fc7\u7a0b\u90fd\u662f\u56f4\u7ed5\u6574\u4e2a\u76ee\u6807\u8bbe\u8ba1\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u8ba9\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5171\u5904\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u8fd9\u4e2a\u9996\u5148\u5e26\u6765\u7684\u6311\u6218\u5c31\u662f\u6570\u636e\u5b89\u5168\uff1a\u5982\u679c\u6309\u7167\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\uff0c\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u6307\u9488\u4f7f\u53ef\u4ee5\u8bbf\u95ee\u4efb\u610f\u5730\u5740\u7684\uff0c\u8fd9\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u4e0d\u518d\u662f\u5b89\u5168\u7684\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6ca1\u6709\u4efb\u4f55\u673a\u5236\u53ef\u4ee5\u4fdd\u62a4\u8fd9\u4e2a\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u662f\u7b80\u5355\u5730\u5047\u8bbe\uff0c\u53ea\u8981\u4f60\u7684\u4ee3\u7801\u5728\u4e00\u4e2a\u8fd0\u884c\u65f6\u73af\u5883\u4e2d\u8fd0\u884c\uff0c\u90a3\u4e48\u6574\u4e2a\u5185\u5b58\u73af\u5883\u90fd\u662f\u4f60\u7684\uff0c\u4f60\u53ef\u4ee5\u4efb\u610f\u7834\u574f\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u56e0\u4e3a\u4ee3\u7801\u6709\u4efb\u610f\u7834\u574f\u7684\u80fd\u529b\uff0c\u624d\u9700\u8981\u5404\u79cd\u8bed\u8a00\u673a\u5236\uff08\u5982\u7c7b\u578b\u68c0\u67e5\uff09\u6765\u7ea6\u675f\u5f00\u53d1\u8005\u8fdb\u884c\u5b89\u5168\u7f16\u7a0b\uff0c\u800c\u50cfC\u8fd9\u6837\u7684\u8bed\u8a00\u5c31\u901a\u5e38\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u4e0d\u5b89\u5168\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u76ee\u524d\u6211\u4eec\u65e0\u6cd5\u4ece\u6839\u672c\u4e0a\u7a81\u7834\u8fd9\u4e00\u7f3a\u9677\uff0c\u53ef\u9884\u89c1\u7684\u77ed\u671f\u5c06\u6765\u4e5f\u4e0d\u4f1a\u6709\u7c7b\u4f3c\u7684\u8ba1\u7b97\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u9700\u6c42\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u57fa\u4e8e\u5f53\u524d\u7684\u7f16\u8bd1\u67b6\u6784\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u529f\u80fd\u3002\u800c\u5f53\u524d\u7f16\u8bd1\u4f53\u7cfb\u4e0b\u552f\u4e00\u80fd\u591f\u5b9e\u73b0\u8fd9\u6837\u529f\u80fd\u7684\u65b9\u5f0f\uff0c\u53ef\u80fd\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u8ba9\u5b50\u7a0b\u5e8f\u5728\u5806\u4e0a\u5206\u914d\u4efb\u4f55\u5185\u5b58\uff0c\u5b83\u4eec\u53ea\u80fd\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5806\u6808\u4e0a\u5b9e\u73b0\u53d8\u91cf\u7684\u5206\u914d\u548c\u4f7f\u7528"),"\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u5b50\u7a0b\u5e8f\u4e0d\u80fd\u4f7f\u7528\u6307\u9488\uff0c\u4e0d\u80fd\u6784\u9020\u5bf9\u8c61\uff0c\u65e0\u6cd5\u5f15\u7528\u5bf9\u8c61\uff0c\u5b83\u4eec\u80fd\u591f\u4f7f\u7528\u7684\u90fd\u662f\u5728\u6808\u4e0a\u5206\u914d\u7684\u503c\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u73b0\u4ee3\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u4e0a\u8ff0\u8fd9\u4e9b\u7ea6\u675f\u90fd\u662f\u6781\u5927\u7684\u9650\u5236\uff0c\u8fd9\u4e5f\u5fc5\u5c06\u5927\u5927\u9650\u5236\u7a0b\u5e8f\u7684\u80fd\u529b\u3002\u7136\u800cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u5373\u4f7f\u5728\u8fd9\u6837\u7684\u9650\u5236\u4e0b\uff0c\u8bed\u8a00\u80cc\u540e\u7684\u8fd0\u884c\u65f6\u548c\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9e\u73b0\u4efb\u4f55\u5176\u4ed6\u8bed\u8a00\u53ef\u4ee5\u5177\u5907\u7684\u80fd\u529b\u3002\u8fd9\u4e9b\u673a\u5236\u53c2\u89c1\u524d\u9762\u7ae0\u8282\u7684\u5185\u5bb9\uff0c\u4f46\u8fd9\u91cc\u603b\u7ed3\u5b83\u7684\u6838\u5fc3\u7406\u5ff5\u548c\u673a\u5236\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u601d\u7ef4\u8bc1\u660e\u591a\u4e2a\u72ec\u7acb\u7eaf\u51fd\u6570\u53ef\u4ee5\u590d\u5408\u6784\u6210\u6210\u590d\u6742\u51fd\u6570\uff0c\u8fdb\u800c\u89e3\u51b3\u4efb\u4f55\u903b\u8f91\u95ee\u9898\uff0c\u800c\u7eaf\u51fd\u6570\u672c\u8eab\uff0c\u9664\u4e86\u5b83\u6ca1\u6709\u5185\u90e8\u72b6\u6001\u8fd9\u4e00\u5916\u5728\u6982\u5ff5\u4e4b\u5916\uff0c\u4ece\u7f16\u8bd1\u673a\u5236\u6765\u8bb2\uff0c\u5b83\u7684\u4e00\u4e2a\u6838\u5fc3\u7684\u7ea6\u675f\u662f\u6bcf\u4e2a\u7eaf\u51fd\u6570\u53ea\u80fd\u5728\u6808\u4e0a\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u53d8\u91cf\u4f1a\u968f\u7740\u51fd\u6570\u7684\u8c03\u7528\u7ed3\u675f\u800c\u4e22\u5f03\uff0c\u6240\u4ee5\u5b83\u4eec\u4e0d\u80fd\u5b58\u50a8\u72b6\u6001\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5141\u8bb8\u4e00\u4e2a\u51fd\u6570\u80fd\u591f\u6784\u9020\u6216\u8005\u8bbf\u95ee\u4e00\u4e2a\u5bf9\u8c61\u6216\u8005\u5f15\u7528\u7c7b\u4f3c\uff0c\u90a3\u4e48\u8fd9\u4e2a\u51fd\u6570\u53ef\u80fd\u5c31\u4f1a\u8bb0\u4f4f\u67d0\u4e9b\u72b6\u6001"),"\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u7684\u673a\u5236\u5206\u6790\uff0c\u6211\u4eec\u5b8c\u5168\u6709\u53ef\u80fd\u6784\u9020\u4e00\u79cd\u591a\u5e94\u7528\u5bf9\u7b49\u5171\u4eab\u540c\u4e00\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u7684\u673a\u5236\uff0c\u5728\u6b64\u57fa\u7840\u4e4b\u4e0a\uff0c\u53ea\u9700\u8981\u505a\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u4e2a\u5b50\u51fd\u6570\u7ec4\u4ef6\u53ef\u4ee5\u7531\u8fd0\u884c\u65f6\u6765\u7ec4\u5408\u4e3a\u590d\u5408\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u6765\u7ba1\u7406\u5b50\u7a0b\u5e8f\u81ea\u8eab\u6240\u5c5e\u6570\u636e\uff08\u4e0d\u662f\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u6570\u636e\uff0c\u800c\u662f\u5b50\u7a0b\u5e8f\u7684\u6570\u636e\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u63d0\u4f9b\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u51fd\u6570\u76f8\u4e92\u8c03\u7528\u7684\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5728\u8fd9\u4e2a\u8c03\u7528\u7684\u8fc7\u7a0b\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u6743\u9650\u63a7\u5236")),(0,n.kt)("p",null,"RealityIS\u5b9e\u73b0\u4e86\u4e0a\u8ff0\u6240\u6709\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\u4e0d\u592a\u4e00\u6837\u7684\u662f\uff0c\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u66f4\u5f3a\u8c03\u4e24\u79cd\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3002\u800cRealityIS\u76ee\u524d\u53ea\u80fd\u652f\u6301\u5355\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\uff0c\u5c3d\u7ba1\u4eceJVM\u7684\u89d2\u5ea6\u770b\uff0c\u652f\u6301\u591a\u8bed\u8a00\u4e5f\u4e0d\u662f\u4e0d\u53ef\u80fd\uff0c\u4f46\u662f\u7531\u4e8eCreationScript\u672c\u8eab\u5df2\u7ecf\u662f\u4e00\u79cd\u6781\u5ea6\u7b80\u5316\u7684\u8bed\u8a00\uff0c\u8fd9\u6837\u7684\u591a\u8bed\u8a00\u652f\u6301\u6ca1\u6709\u592a\u5927\u7684\u610f\u4e49\u3002\u4f20\u7edf\u7684\u591a\u8bed\u8a00\u4e92\u64cd\u4f5c\u662f\u56e0\u4e3a\u4e0d\u540c\u8bed\u8a00\u4e4b\u95f4\u5f80\u5f80\u5b58\u5728\u7740\u8f83\u5927\u7684\u7279\u6027\u5dee\u5f02\uff0c\u6216\u8005\u64c5\u957f\u5904\u7406\u7684\u5b50\u7cfb\u7edf\u5177\u6709\u4e0d\u540c\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u95ee\u9898\u5728RealityIS\u4e2d\u662f\u4e0d\u5b58\u5728\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5982\u679c\uff0cRealityIS\u672c\u8eab\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u67b6\u6784\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u903b\u8f91\uff0c\u5e76\u4e14RealityIS\u5185\u90e8\u4e5f\u662f\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5bf9\u7b49\u7684\u5b50\u7a0b\u5e8f\u3002\u8fd9\u6837\u7684\u4e92\u64cd\u4f5c\u80fd\u529b\uff0c\u8981\u5927\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5173\u4e8e\u6269\u5c55\u6027\uff0c\u8fd9\u6d89\u53ca\u53e6\u4e00\u4e2a\u6982\u5ff5\uff0c\u5373\u6807\u51c6\u76f8\u5173\u7684\u95ee\u9898\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"},"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"),(0,n.kt)("p",null,"\u53ef\u6269\u5c55\u6027\u5b9e\u8d28\u662f\u6d89\u53ca\u6807\u51c6\u7684\u95ee\u9898\uff0c\u5e94\u7528\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u5fc5\u7136\u901a\u8fc7\u6807\u51c6\u6765\u5b9e\u73b0\uff0c\u56e0\u6b64\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\u662f\u5173\u4e8e\u80fd\u591f\u600e\u6837\u7b80\u5355\u9ad8\u6548\u5730\u6d89\u53ca\u4e00\u4e2a\u6807\u51c6\uff0c\u80fd\u591f\u8ba9\u5e0c\u671b\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5feb\u901f\u96c6\u6210\u652f\u6301\u8fd9\u6837\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u4e4b\u95f4\u6807\u51c6\u7684\u673a\u5236\u662f\u600e\u6837\u8fd0\u4f5c\u7684\u3002\u4f20\u7edf\u7684\u5927\u5e73\u53f0\u5982\u5fae\u4fe1\u548c\u652f\u4ed8\u5b9d\uff0c\u5b83\u4eec\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u5b83\u4eec\u63d0\u4f9b\u7684\u6807\u51c6\u5927\u5bb6\u90fd\u4f1a\u53bb\u9075\u5b88\uff0c\u5373\u4fbf\u8fd9\u79cd\u6807\u51c6\u7684\u89c4\u8303\u7279\u522b\u5dee\uff0c\u5f00\u53d1\u8005\u4e5f\u53ea\u80fd\u53bb\u517c\u5bb9\u548c\u652f\u6301\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\u5e73\u53f0\u4e4b\u95f4\u5b9a\u4e49\u6807\u51c6\u7684\u65b9\u5f0f\u5dee\u522b\u5f88\u5927\uff0c\u9020\u6210\u5206\u5316\uff0c\u5c0f\u5f00\u53d1\u8005\u9700\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u5927\u5e73\u53f0\u9002\u914d\u4e0d\u540c\u7684\u6807\u51c6\u5f62\u5f0f\u3002\u6bd4\u5982\u4e00\u4e2a\u6e38\u620f\u901a\u5e38\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u53d1\u884c\u5e73\u53f0\u4ecb\u5165\u5f88\u591a\u5bb6SDK\uff0c\u4f46\u672c\u8d28\u4e0a\u5b83\u4eec\u7684\u529f\u80fd\u90fd\u5dee\u4e0d\u591a\uff0c\u8fd9\u4e5f\u5bfc\u81f4\u4e00\u4e9b\u63d0\u4f9b\u7edf\u4e00\u670d\u52a1\u63a5\u53e3\u7684\u670d\u52a1\uff0c\u4f8b\u5982AnySDK\uff0c\u4f8b\u5982Unity\u63d0\u4f9b\u7684ARFundation\u5f88\u5927\u7a0b\u5ea6\u4e0a\u90fd\u662f\u5728\u7edf\u4e00ARCore\u548cARKit\u7684\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e09\u4e2a\u95ee\u9898\u662f\uff0c\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\u901a\u5e38\u53ea\u6709\u5c0f\u5e94\u7528\u53bb\u96c6\u6210\u5927\u5e73\u53f0\u6216\u8005\u5927\u5e94\u7528\uff0c\u800c\u5927\u5e94\u7528\u4e0d\u4f1a\u53bb\u517c\u987e\u5c0f\u5e94\u7528\u7684\u4e92\u64cd\u4f5c\u6027\u3002\u6240\u4ee5\u8fd9\u662f\u4e00\u79cd\u9644\u5c5e\u5e94\u7528\uff0c\u9644\u5c5e\u5f62\u6001\uff0c\u800c\u4e0d\u662f\u4e00\u79cd\u5171\u751f\u5e73\u7b49\u5f62\u6001\u3002\u4f46\u8fd9\u79cd\u5f62\u6001\u5176\u663e\u7136\u7684\u7f3a\u70b9\u662f\uff0c\u8fd9\u79cd\u751f\u6001\u5b83\u7684\u603b\u4f53\u529f\u80fd\u5c31\u662f\u56f4\u7ed5\u5927\u5e94\u7528\u6216\u8005\u5927\u5e73\u53f0\u7684\u8303\u56f4\u53bb\u6269\u5c55\u7684\u8303\u56f4\uff0c\u8fd9\u4e2a\u8303\u56f4\u7684\u5927\u5c0f\u57fa\u672c\u4e0a\u662f\u53d7\u5927\u5e73\u53f0\u672c\u8eab\u7684\u6027\u8d28\u6240\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u56f4\u7ed5YouTube\u7684\u5c31\u662f\u89c6\u9891\u751f\u6001\uff0c\u56f4\u7ed5\u5fae\u4fe1\u7684\u793e\u4ea4\u751f\u6001\uff0c\u4ee5\u53ca\u56f4\u7ed5\u652f\u4ed8\u5b9d\u7684\u7535\u5546\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u8981\u60f3\u5f00\u53d1\u4e00\u4e2a\u5171\u751f\u5171\u4eab\u7684\u5f00\u653e\u5e73\u53f0\uff0c\u663e\u7136\u6807\u51c6\u7684\u5f62\u6001\u9700\u8981\u53d8\u9769\u3002\u8fd9\u81f3\u5c11\u9700\u8981\u601d\u8003\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u7edf\u4e00\u6807\u51c6\u5236\u5b9a\u5f62\u5f0f\uff0c\u600e\u6837\u8ba9\u5927\u5bb6\u5236\u5b9a\u66f4\u5bb9\u6613\u96c6\u6210\u3001\u66f4\u7edf\u4e00\u3001\u66f4\u7b80\u5355\u5730\u89c4\u8303\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u662f\u8ba9\u5f71\u54cd\u529b\u6ca1\u90a3\u4e48\u5927\u7684\u7ec4\u7ec7\u6216\u8005\u7cfb\u7edf\u5236\u5b9a\u7684\u6807\u51c6\uff0c\u80fd\u591f\u6709\u673a\u4f1a\u6162\u6162\u8fdb\u5316\uff0c\u8fdb\u800c\u6709\u53ef\u80fd\u8ba9\u5f71\u54cd\u529b\u66f4\u5927\u7684\u7cfb\u7edf\u6765\u53cd\u5411\u652f\u6301\uff0c\u5b9e\u73b0\u7cfb\u7edf\u4e4b\u95f4\u7684\u5bf9\u7b49")),(0,n.kt)("p",null,"\u4ee5\u524d\u662f\u901a\u8fc7\u5f71\u54cd\u529b\u5e26\u52a8\u6807\u51c6\uff0c\u7531\u5b83\u4eec\u6765\u5236\u5b9a\u6807\u51c6\uff0c\u6240\u4ee5\u6574\u4e2a\u4e92\u64cd\u4f5c\u7684\u751f\u6001\u6838\u5fc3\u8fd8\u662f\u5927\u5e73\u53f0\u7684\u5730\u4f4d\u3002\u5c0f\u5e94\u7528\u6ca1\u6709\u673a\u4f1a\u53bb\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u66f4\u5e0c\u671b\u5b83\u50cf\u771f\u5b9e\u793e\u4f1a\uff0c\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u90fd\u53ef\u4ee5\u53bb\u53d1\u8d77\u81ea\u5df1\u7684\u751f\u610f\uff0c\u53ea\u8981\u5b83\u4eec\u7684\u751f\u610f\u505a\u5f97\u8db3\u591f\u597d\uff0c\u6162\u6162\u5c31\u4f1a\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002\u800c\u4e14\uff0c\u5f53\u5176\u4ed6\u7684\u7ec4\u7ec7\u6216\u8005\u4e2a\u4eba\u53d1\u73b0\u8fd9\u4e2a\u4ea7\u54c1\u7684\u65f6\u5019\uff0c\u4ed6\u4eec\u4e5f\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u4e0e\u4e4b\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f9b\u5e94\u5173\u7cfb\uff0c\u800c\u975e\u5e73\u53f0\u5f71\u54cd\u529b\u7684\u5ef6\u4f38\uff0c\u624d\u80fd\u771f\u6b63\u4fc3\u8fdb\u521b\u65b0\u3002\u800c\u5927\u5e73\u53f0\u4f1a\u627c\u6740\u5f88\u591a\u521b\u65b0\uff0c\u5e76\u4e14\u4f1a\u62a2\u593a\u5f88\u591a\u5177\u6709\u521b\u9020\u80fd\u529b\u7684\u4e2a\u4eba\u6216\u8005\u7ec4\u7ec7\u7684\u8d44\u6e90\uff0c\u800c\u8fd9\u9760\u7684\u4e0d\u662f\u5b9e\u529b\u548c\u4ea7\u54c1\uff0c\u800c\u5355\u7eaf\u5c31\u662f\u5e73\u53f0\u7684\u5784\u65ad\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e73\u53f0\u7684\u5f71\u54cd\u529b\u4e0d\u518d\u662f\u4e3b\u5bfc\u7684\uff0c\u90a3\u4e48\u6807\u51c6\u672c\u8eab\u5c31\u5e94\u8be5\u662f\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u56e0\u7d20\uff0c\u5728\u5e73\u53f0\u7ed9\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u63d0\u4f9b\u516c\u5e73\u673a\u4f1a\u4f7f\u5927\u5bb6\u90fd\u6709\u673a\u4f1a\u6210\u957f\u7684\u65f6\u5019\uff0c\u8fd8\u9700\u8981\u4e00\u4e2a\u80fd\u591f\u4f7f\u4e4b\u4e0e\u5176\u4ed6\u7ec4\u7ec7\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u7684\u7b80\u5355\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5c06\u6807\u51c6\u5355\u72ec\u5206\u79bb\u5904\u7406\uff0c\u5206\u79bb\u4e4b\u540e\uff0c\u6807\u51c6\u7684\u5730\u4f4d\u63d0\u5347\uff0c\u6807\u51c6\u662f\u516c\u7acb\u7ec4\u7ec7\uff0c\u5b83\u4e0d\u53d7\u5176\u4ed6\u5b9e\u9645\u5f00\u53d1\u4ea7\u54c1\u7684\u7ec4\u7ec7\u6216\u4e2a\u4eba\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u5b83\u4eec\u53ef\u4ee5\u5f62\u6210\u5efa\u8bae\uff0c\u4f46\u603b\u7684\u6765\u8bf4\uff0c\u90a3\u4e9b\u6709\u5f71\u54cd\u529b\u7684\u5927\u5e94\u7528\u6ca1\u6709\u529e\u6cd5\u901a\u8fc7\u6807\u51c6\u53bb\u627c\u6740\u5c0f\u5e94\u7528\uff0c\u56e0\u4e3a\u6807\u51c6\u672c\u8eab\u5177\u6709\u4e00\u4e2a\u5de8\u5927\u7684\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6807\u51c6\u662f\u5f00\u653e\u7684")),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u53ea\u662f\u901a\u4fe1\u63a5\u53e3\uff0c\u5b83\u4e0d\u662f\u7ba1\u9053\u6216\u5176\u4ed6\u4e1c\u897f\uff0c\u4f60\u6ca1\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5173\u4e8e\u6807\u51c6\u76f8\u5173\u7684\u5185\u5bb9\u53c2\u89c14.11\u8282\uff0cRealityIS\u7684\u6807\u51c6\u673a\u5236\u4f7f\u5f97\u4efb\u4f55\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u5c31\u4efb\u4f55\u611f\u5174\u8da3\u90e8\u5206\u8fdb\u884c\u901a\u4fe1\u3002"),(0,n.kt)("h4",{id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"},"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u7406\u89e3RealityIS\u7684\u4e92\u64cd\u4f5c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u4e92\u64cd\u4f5c\u6027\u4e0e\u53ef\u7ec4\u5408\u6027\u7684\u5173\u7cfb\uff0cRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u4ec5\u4ec5\u662f\u4e3a\u4e86\u5e94\u7528\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u8fd9\u79cd\u901a\u4fe1\u7684\u76ee\u7684\u4e3b\u8981\u662f\u4e3a\u4e86\u5b9e\u73b0\u81ea\u52a8\u7ec4\u5408\uff0c\u4ece\u800c\u5927\u5927\u7b80\u5316\u5e94\u7528\u5f00\u53d1\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(5335).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u5982\u4eca\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u867d\u7136\u901a\u8fc7\u8f6f\u4ef6\u67b6\u6784\u8bbe\u8ba1\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u505a\u5230\u4e00\u5b9a\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u5408\u6027\u51e0\u4e4e\u90fd\u5e02\u9488\u5bf9\u5f00\u53d1\u8005\u7684\uff0c\u666e\u901a\u7528\u6237\u5f88\u96be\u5229\u7528\u5230\u8fd9\u79cd\u80fd\u529b\uff0c\u8fd9\u662f\u56e0\u4e3a\u8fd9\u4e9b\u903b\u8f91\u4e0a\u7684\u7ec4\u5408\uff0c\u672c\u8d28\u4e0a\u5c31\u662f\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u51fd\u6570\u8c03\u7528\uff0c\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u7684\u4f1a\u6d89\u53ca\u5230\u51fd\u6570\u7684\u5b9a\u4e49\u3001\u5730\u5740\u3001\u53c2\u6570\u5217\u8868\u3001\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u8fd9\u4e9b\u7a0b\u5e8f\u7684\u673a\u5236\uff0c\u800c\u666e\u901a\u7528\u6237\u65e2\u65e0\u6cd5\u5b66\u4e60\u548c\u7406\u89e3\u8fd9\u4e9b\u6982\u5ff5\uff0c\u4e5f\u5f88\u96be\u5728\u8fd0\u884c\u65f6\u4e0d\u901a\u8fc7\u4ee3\u7801\u7684\u65b9\u5f0f\u53bb\u62ff\u5230\u8fd9\u4e00\u5207\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7RealityIS\u9488\u5bf9\u4e92\u64cd\u4f5c\u6027\u8bbe\u8ba1\u7684\u4e00\u5957\u6807\u51c6\u8fd0\u4f5c\u673a\u5236\uff0cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u9690\u5f0f\u5730\u8fdb\u884c\u51fd\u6570\u8c03\u7528\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u4e4b\u95f4\u4e0d\u518d\u9700\u8981\u663e\u5f0f\u6307\u5b9a\u8c03\u7528\u51fd\u6570\u7684\u65b9\u6cd5\u540d\u79f0\u3001\u51fd\u6570\u5730\u5740\u3001\u53c2\u6570\u6570\u91cf\u3001\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u4fe1\u606f\uff0c\u800c\u662f\u5b83\u4eec\u4ec5\u4ec5\u9700\u8981\u9488\u5bf9\u4e00\u5b9a\u7684\u6807\u51c6\u63a5\u53e3\u5b9e\u73b0\u81ea\u5df1\u611f\u5174\u8da3\u7684\u529f\u80fd\u5373\u53ef"),"\u3002\u6b63\u662f\u8fd9\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u7528\u6237\u4e0d\u9700\u8981\u53bb\u4e86\u89e3\u4e00\u4e9b\u7a0b\u5e8f\u672f\u8bed\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u88ab\u5f53\u505a\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u529f\u80fd\u770b\u5f85\uff0c\u56e0\u6b64\u4f7f\u5f97\u666e\u901a\u7528\u6237\u80fd\u591f\u6bd4\u8f83\u7b80\u5355\u5730\u53bb\u5b9a\u4e49\u81ea\u5df1\u7684\u7a0b\u5e8f\u6216\u8005\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cRealityIS\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u5176\u5b9e\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u5b83\u7684\u4e92\u64cd\u4f5c\u6027\u673a\u5236\u6765\u5b9e\u73b0\u7684\uff0c\u5426\u5219\u6211\u4eec\u7528\u4e8e\u65e0\u6cd5\u7834\u9664\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u8fd9\u6837\u5373\u4f7f\u6709\u8f83\u597d\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u4e5f\u53ea\u80fd\u4e3b\u8981\u9488\u5bf9\u4e13\u4e1a\u5f00\u53d1\u8005\u3002RealityIS\u901a\u8fc7\u4e92\u64cd\u4f5c\u6027\u5b9e\u73b0\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f7f\u5f97RealityIS\u5e73\u53f0\u7684\u4ef7\u503c\u6709\u4e86\u66f4\u5927\u7684\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u76f8\u5173\u5185\u5bb9\u53c2\u89c12.7.10\u8282\u3002"),(0,n.kt)("h3",{id:"295-\u4ea4\u4e92\u6a21\u5f0f"},"2.9.5 \u4ea4\u4e92\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u673a\u5236\u672c\u8eab\uff0c\u7a0b\u5e8f\u4e4b\u95f4\u7684\u901a\u4fe1\u6216\u8005\u4e92\u64cd\u4f5c\u5f80\u5f80\u8fd8\u6d89\u53ca\u4e00\u4e2a\u8c03\u7528\u65b9\u5411\u7684\u95ee\u9898\uff0c\u8fd9\u4e2a\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\u5c24\u5176\u660e\u663e\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u7279\u522b\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\uff0c\u65b9\u6cd5\u548c\u6570\u636e\u5f80\u5f80\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u6216\u8005\u4e00\u4e2a\u76f8\u5bf9\u76f8\u5173\u7684\u6a21\u5757\u5f53\u524d\uff0c\u8fd9\u5c31\u5bfc\u81f4\u51fd\u6570\u7684\u4ea4\u4e92\u5177\u6709\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u8fd9\u4e9b\u6a21\u5f0f\u5bf9\u6574\u4f53\u67b6\u6784\u548c\u590d\u6742\u5ea6\u90fd\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u4ee5\u9762\u5411\u5bf9\u8c61\u4e3a\u4f8b\uff0c\u8bbe\u60f3\u6709\u4e00\u4e2a\u89d2\u8272\u5bf9\u8c61A\uff0c\u4f7f\u7528\u4e86\u4e00\u4e2a\u9053\u5177\u780d\u4f24\u4e86\u4e00\u4e2a\u602a\u7269\u5bf9\u8c61B\uff0c\u5bf9\u5176\u9020\u62105\u70b9\u4f24\u5bb3\uff0c\u6839\u636e\u5176\u4ea4\u4e92\u6a21\u5f0f\u7684\u4e0d\u540c\uff0c\u8fd9\u91cc\u53ef\u80fd\u6709\u4e00\u4e0b\u4e09\u4e2d\u903b\u8f91\u7ec4\u7ec7\u65b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9020\u6210\u4f24\u5bb3\u7684\u4ee3\u7801\u5c01\u88c5\u5728A\u7c7b\u4e2d\uff0c\u56e0\u4e3a\u6211\u4eec\u8ba4\u4e3a\u662f\u89d2\u8272\u7684\u52a8\u4f5c\u5bfc\u81f4\u7684\u7ed3\u679c\uff0c\u6240\u4ee5A\u7c7b\u4e2d\u7684\u67d0\u4e2a\u65b9\u6cd5\u9700\u8981\u53d6\u5f97\u5bf9\u8c61B\u7684\u5f15\u7528\uff0c\u7136\u540e\u5bf9\u5bf9\u8c61B\u4e2d\u7684HP\u53d8\u91cf\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u6b64\u8fd9\u4e5f\u8981\u6c42B\u66b4\u9732\u8be5\u5c5e\u6027\u7684\u8bbf\u95ee\u6743\u9650\u3002\u5f53\u7136\u6211\u4eec\u53ef\u4ee5\u5c06\u5bf9\u8fd9\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u6539\u4e3a\u65b9\u6cd5\u7684\u5f62\u5f0f\uff0c\u8ba9A\u5bf9\u8c03\u7528\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u4f46\u4e24\u8005\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u95ee\u9898\u662fA\u9700\u8981\u8c03\u7528B\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u89e3\u9664\u4e24\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u53e6\u4e00\u4e2a\u65b9\u6cd5\u662f\u91c7\u7528\u54cd\u5e94\u7684\u6a21\u5f0f\uff0cA\u4e0d\u4f1a\u76f4\u63a5\u4fee\u6539B\uff0c\u800c\u662f\u53d1\u51fa\u4e00\u4e2a\u6d88\u606f\u5230\u4e00\u4e2a\u5730\u65b9\uff0c\u7136\u540eB\u4f1a\u53bb\u8fd9\u4e2a\u5730\u65b9\u68c0\u6d4b\u8fd9\u4e2a\u6d88\u606f\uff0c\u5982\u679c\u53d1\u73b0\u5177\u6709\u67d0\u6761\u6d88\u606f\uff0c\u5219\u6267\u884c\u4e00\u4e2a\u6389\u8840\u7684\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u8fc7\u7a0bA\u548cB\u4e0d\u4f1a\u8026\u5408\uff0c\u8fd9\u4e2a\u5177\u4f53\u7684\u6263\u8840\u64cd\u4f5c\u4e3b\u8981\u662f\u7531B\u53d1\u8d77\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u8fd8\u6709\u4e00\u79cd\u975e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\uff0c\u8fd9\u79cd\u65b9\u6cd5\u4ee5\u65b9\u6cd5\u4e3a\u6838\u5fc3\uff0c\u5b83\u540c\u65f6\u4f20\u5165A\u548cB\u4e24\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c3d\u7ba1A\u548cB\u4e4b\u95f4\u4e0d\u4f1a\u76f4\u63a5\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u7684\u610f\u4e49\u4e0d\u5927\uff0c\u9664\u4e86\u8981\u5728\u989d\u5916\u4e0d\u76f8\u5173\u7684\u5730\u65b9\u53bb\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\uff0c\u800c\u4e14\u4e00\u65e6\u7531\u4efb\u4f55\u7ed3\u6784\u7684\u4fee\u6539\uff0c\u51e0\u4e2a\u5730\u65b9\u4e5f\u4f1a\u53d7\u5230\u5f71\u54cd\u3002")),(0,n.kt)("p",null,"\u9009\u62e9\u7b2c\u4e00\u8fd8\u662f\u7b2c\u4e8c\u79cd\uff0c\u4e00\u822c\u7684\u7f16\u7a0b\u8bed\u8a00\u5e76\u6ca1\u6709\u9650\u5236\uff0c\u4f46\u662f\u5728\u5927\u90e8\u5206\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u9009\u62e9\u4e00\u7684\u53ef\u80fd\u4f1a\u66f4\u591a\uff0c\u8fd9\u79cd\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e8c\u4f1a\u5e26\u6765\u4e00\u4e9b\u989d\u5916\u7684\u7ed3\u6784\u4ee5\u53ca\u7ef4\u62a4\uff0c\u5e76\u4e14\u6ca1\u6709\u4e00\u90a3\u4e48\u5bb9\u6613\u8c03\u5f0f\u3002\u4f46\u662f\u4e00\u5b9e\u9645\u4e0a\u4f1a\u5e26\u6765\u5f88\u591a\u95ee\u9898\uff0c\u6211\u4eec\u628a\u4e00\u79f0\u4e3a\u4e3b\u52a8\u5f0f\uff0c\u76f8\u5e94\u7684\u628a\u4e8c\u79f0\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u76f4\u63a5\u5f15\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c \u5e76\u901a\u8fc7\u8c03\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u65b9\u6cd5\u6216\u8005\u5c5e\u6027\u8bbf\u95ee\u6765\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u79cd\u65b9\u5f0f\u51e0\u4e4e\u662f\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u652f\u6301\u7684\u673a\u5236\uff0c\u5b83\u4e5f\u662f\u7f16\u5199\u8d77\u6765\u6700\u76f4\u63a5\u548c\u7b80\u5355\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u7531\u5f88\u591a\u7f3a\u70b9\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u7684\u95ee\u9898\u5927\u6982\u53ef\u4ee5\u5f52\u4e3a\u4ee5\u4e0b\u51e0\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u6269\u5c55\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u8026\u5408\uff0c\u5f88\u660e\u663eA\u76f4\u63a5\u8c03\u7528\u4e86B\uff0cA\u548cB\u4e4b\u95f4\u5b58\u5728\u76f4\u63a5\u8026\u5408\uff0c\u5982\u679cA\u548cB\u4e4b\u95f4\u76f8\u5173\u8c03\u7528\u90e8\u5206\u7684\u7ed3\u6784\u53d1\u751f\u53d8\u5316\uff0c\u4e24\u8005\u90fd\u5fc5\u987b\u54cd\u5e94\u8c03\u6574\u3002\u6b64\u5916\uff0c\u8026\u5408\u5e26\u6765\u7684\u66f4\u5927\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u4e3a\u4e86\u8bbf\u95eeB\u7684\u6210\u5458\uff0c\u7c7bB\u4e0d\u5f97\u4e0d\u5c06\u8fd9\u4e9b\u53d8\u91cf\u6216\u65b9\u6cd5\u7684\u8bbf\u95ee\u6743\u9650\u516c\u5f00\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4efb\u4f55\u4ee3\u7801\u7406\u8bba\u4e0a\u90fd\u53ef\u4ee5\u8bbf\u95ee\uff0c\u9020\u6210\u8f83\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002\u5c3d\u7ba1\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u6210\u5458\u7684\u6743\u9650\u8303\u56f4\uff0c\u4f8b\u5982\u7a0b\u5e8f\u96c6\u5185\u90e8\uff0c\u53cb\u5143\u7b49\u673a\u5236\uff0c\u4f46\u8fd9\u4e9b\u6743\u9650\u63a7\u5236\u7684\u7075\u6d3b\u6027\u8fdc\u8fdc\u4e0d\u591f\u3002"),(0,n.kt)("p",null,"\u5176\u6b21\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5e26\u6765\u903b\u8f91\u4e0a\u7684\u4e00\u4e9b\u5173\u7cfb\u6df7\u4e71\uff0c\u6709\u65f6\u5019A\u548cB\u76f4\u63a5\u5e76\u6ca1\u6709\u5fc5\u8981\u7684\u56e0\u679c\u5173\u7cfb\uff0c\u4f46\u662f\u5176\u6d41\u7a0b\u4e0a\u4e5f\u53ef\u4ee5\u8fd9\u6837\u53bb\u6267\u884c\u3002\u518d\u6bd4\u5982\u6709\u65f6\u5019\u6211\u4eec\u5355\u7eaf\u4ece\u7c7bB\u53bb\u8003\u5bdf\u5b83\u7684\u529f\u80fd\uff0c\u6211\u4eec\u53ef\u80fd\u6839\u672c\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u4f1a\u88ab\u8c03\u7528\uff0c\u88ab\u8c01\u8c03\u7528\uff0c\u6211\u4eec\u65e0\u6cd5\u9884\u6d4b\u7a0b\u5e8f\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5c24\u5176\u662f\u5728\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\u4e2d\u518d\u5939\u6742\u7740\u72b6\u6001\u7684\u60c5\u51b5\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u7c7bB\u7684\u4e00\u4e9b\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u6709\u65f6\u5019\u53ef\u80fd\u5e76\u4e0d\u4ec5\u4ec5\u6765\u81eaA\uff0c\u8fd8\u8981\u8003\u8651\u5176\u4ed6\u5bf9\u8c61\u7684\u5f71\u54cd\uff0c\u4f46\u662fA\u4f5c\u4e3a\u8c03\u7528\u65b9\u53ef\u80fd\u6839\u672c\u65e0\u6cd5\u53bb\u611f\u77e5\u8fd9\u6837\u7684\u4e8b\u60c5\u3002\u5b9e\u9645\u4e0a\u901a\u8fc7\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u53ef\u77e5\uff0c\u54cd\u5e94\u5f0f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\u624d\u662f\u5927\u90e8\u5206\u6d3b\u52a8\u8fdb\u884c\u4ea4\u4e92\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53ef\u6269\u5c55\u6027\uff0c\u8fd9\u8ddf\u8026\u5408\u5b9e\u9645\u4e0a\u4e5f\u662f\u76f8\u5173\u7684\uff0c\u7531\u4e8eB\u6267\u884c\u4ec0\u4e48\u6837\u7684\u903b\u8f91\u4ee5\u53ca\u4ec0\u4e48\u65f6\u5019\u6267\u884c\u7531A\u6765\u63a7\u5236\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u5982\u679cB\u5bf9\u4e8e\u67d0\u4e00\u7c7b\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c\u6709\u5176\u4ed6\u7684\u4e00\u4e9b\u903b\u8f91\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u53d7\u5176\u4ed6\u4e00\u4e9b\u65b0\u52a0\u5165\u7684\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u5b83\u5f88\u96be\u901a\u8fc7\u5728\u4e0d\u5f71\u54cdA\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u6216\u6269\u5c55\u3002\u8fd9\u79cd\u6269\u5c55\u4e0d\u4ec5\u4ec5\u662f\u8981\u6c42A\u4fee\u6539\u63a5\u53e3\u90a3\u4e48\u7b80\u5355\uff0c\u6709\u65f6\u5019\u6d89\u53ca\u4f1a\u878d\u5408\u66f4\u591a\u7684\u903b\u8f91\uff0c\u8fd9\u6837\u8c03\u6574\u8d77\u6765\u7684\u4ee3\u4ef7\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u6211\u4eec\u540e\u9762\u4f1a\u770b\u5230\uff0c\u5982\u679c\u91c7\u7528\u54cd\u5e94\u5f0f\uff0cA\u7684\u5f71\u54cd\u5c31\u53ea\u662f\u4f1a\u62bd\u8c61\u4e3a\u4e00\u4e2a\u56e0\u7d20\uff0c\u800cB\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u5404\u79cd\u56e0\u7d20\u4e4b\u540e\u505a\u51fa\u771f\u6b63\u7684\u54cd\u5e94\u3002\u5373\u4f7f\u54cd\u5e94\u7684\u903b\u8f91\u6216\u8005\u89c4\u5219\u53d8\u4e86\uff0c\u4f46\u662f\u53ea\u8981A\u8fd9\u4e2a\u56e0\u7d20\u672c\u8eab\u7684\u903b\u8f91\u6ca1\u53d8\uff0cA\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u4efb\u4f55\u4fee\u6539\u3002\u8fd9\u6837\u7684\u65b9\u5f0f\u5c31\u4f7f\u5f97B\u5f88\u5bb9\u6613\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u4e0e\u6269\u5c55\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898\uff0c\u5bf9\u4e2a\u5bf9\u8c61\u5bf9B\u7684\u8c03\u7528\u5b8c\u5168\u4e0d\u4f1a\u4e5f\u4e0d\u53ef\u80fd\u8003\u8651\u5230B\u7684\u72b6\u6001\uff0c\u4f8b\u5982\u662f\u5426\u6b63\u5728\u88ab\u5176\u4ed6\u7684\u8fdb\u7a0b\u8bbf\u95ee\u3002\u8fd9\u4e2d\u60c5\u51b5\u5c31\u5f88\u5bb9\u6613\u5bfc\u81f4\u5171\u4eab\u7ade\u4e89\uff0c\u800c\u4e14\u9664\u4e86\u52a0\u9501\u51e0\u4e4e\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002\u800c\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u5b83\u4eec\u901a\u5e38\u53ef\u4ee5\u901a\u8fc7\u5148\u6536\u96c6\u5404\u79cd\u5f71\u54cd\u56e0\u7d20\uff0c\u7136\u540e\u8fdb\u884c\u7edf\u4e00\u7684\u6d88\u606f\u5904\u7406\uff0c\u800c\u907f\u514d\u4efb\u4f55\u5e76\u53d1\u7684\u95ee\u9898\u3002\u56e0\u4e3a\u5185\u90e8\u7684\u6d88\u606f\u59cb\u7ec8\u662f\u4e32\u884c\u7684\u65b9\u5f0f\u6267\u884c\u3002"),(0,n.kt)("h4",{id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94"},"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94"),(0,n.kt)("p",null,"\u73b0\u4ee3\u7f16\u7a0b\u7684\u4e00\u4e9b\u673a\u5236\u5f80\u5f80\u662f\u53d7\u786c\u4ef6\u67b6\u6784\uff0c\u4ee5\u53ca\u7f16\u7a0b\u8bed\u8a00\u7f16\u8bd1\u8fc7\u7a0b\u7684\u4e00\u4e9b\u9650\u5236\u6216\u5f71\u54cd\uff0c\u5b83\u4eec\u539f\u751f\u5e76\u4e0d\u662f\u4e3a\u4e86\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u4ea4\u4e92\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u9996\u5148\u6765\u89c2\u5bdf\u4e00\u4e0b\u771f\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u6d3b\u52a8\u4ea4\u4e92\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u8003\u8651\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4eba\u7c7b\u6d3b\u52a8\uff0c\u6bd4\u5982\u6cd5\u5f8b\uff0c\u56fd\u5bb6\u4f1a\u6307\u5b9a\u4e00\u4e9b\u6cd5\u5f8b\u4ee5\u7ea6\u675f\u4eba\u4eec\u7684\u4e00\u4e9b\u884c\u4e3a\uff0c\u4ece\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u89d2\u5ea6\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u7f16\u5199\u4e00\u4e2a\u6cd5\u5f8b\u673a\u6784\u7684\u5bf9\u8c61A\uff0c\u7136\u540e\u7528B\u6765\u8868\u793a\u4eba\u7c7b\uff0cA\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528B\u7684\u5c5e\u6027\u6216\u8005\u65b9\u6cd5\u8981\u6c42B\u4e0d\u80fd\u8fdd\u53cd\u67d0\u4e2a\u6cd5\u5f8b\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5728\u4eba\u7c7b\u6d3b\u52a8\u4e2d\uff0c\u4eba\u662f\u601d\u7ef4\u7684\u4e3b\u4f53\uff0c\u4eba\u7c7b\u7684\u6574\u4e2a\u6d3b\u52a8\u51e0\u4e4e\u90fd\u662f\u7531\u4f17\u591a\u4e2a\u4eba\u610f\u5fd7\u51b3\u5b9a\u7684\u7ed3\u679c\u3002\u867d\u7136\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5728\u5b8f\u89c2\u7684\u89d2\u5ea6\u770b\uff0c\u4e2a\u4eba\u7684\u610f\u5fd7\u662f\u53d7\u4e00\u5b9a\u7684\u7ea6\u675f\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5e76\u4e0d\u80fd\u7531\u6b64\u5c31\u6309\u7167\u4e3b\u52a8\u5f0f\u7684\u65b9\u5f0f\u5bf9\u6574\u4e2a\u4eba\u7c7b\u6d3b\u52a8\u8fdb\u884c\u7f16\u7a0b\u3002\u9664\u4e86\u8fd9\u79cd\u8d1f\u9762\u7684\u4e8b\u5b9c\uff0c\u5373\u4f7f\u662f\u6b63\u9762\u7684\u6d3b\u52a8\u4e5f\u662f\u5982\u6b64\uff0c\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u7ed9\u522b\u4eba\u5f88\u591a\u5fe0\u544a\u6216\u8005\u5efa\u8bae\uff0c\u4f46\u5373\u4f7f\u8fd9\u4e9b\u5fe0\u544a\u6216\u8005\u5efa\u8bae\u771f\u6b63\u662f\u88ab\u8bc1\u660e\u6709\u4ef7\u503c\u7684\uff0c\u5176\u4ed6\u4eba\u4ecd\u7136\u6709\u53ef\u80fd\u56e0\u4e3a\u67d0\u4e9b\u56e0\u7d20\u800c\u9009\u62e9\u4e0d\u53bb\u91c7\u7eb3\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Brain-to-Brain-Communication",src:l(3136).Z,width:"850",height:"450"})),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u6b63\u662f\u4e00\u79cd\u54cd\u5e94\u5f0f\u7684\u4f53\u73b0\u3002\u54cd\u5e94\u5f0f\u7f16\u7a0b\u662f\u4ee5\u63a5\u53d7\u4fe1\u606f\u8005\u4e3a\u4e2d\u5fc3\uff0c\u5b83\u5047\u8bbe\u63a5\u53d7\u4fe1\u606f\u7684\u5bf9\u8c61\u62e5\u6709\u81ea\u6211\u610f\u5fd7\uff0c\u5b83\u5e94\u8be5\u7531\u81ea\u5df1\u6765\u51b3\u5b9a\u5e94\u8be5\u600e\u6837\u57fa\u4e8e\u5916\u90e8\u7684\u4fe1\u606f\u8fdb\u884c\u51b3\u7b56\u548c\u54cd\u5e94\u3002\u6b63\u662f\u8fd9\u79cd\u81ea\u6211\u610f\u5fd7\uff0c\u4ece\u7a0b\u5e8f\u7684\u89d2\u5ea6\u4e0d\u5149\u4f7f\u5176\u66f4\u5177\u6709\u6269\u5c55\u6027\uff0c\u4ece\u8fdb\u5316\u7684\u89d2\u5ea6\uff0c\u8fd9\u6837\u7684\u7cfb\u7edf\u80fd\u591f\u4ea7\u751f\u51fa\u66f4\u52a0\u4e30\u5bcc\u800c\u521b\u65b0\u7684\u6210\u679c\u3002\u800c\u5982\u679c\u662f\u4e3b\u52a8\u5f0f\u7f16\u7a0b\uff0c\u5728\u5f88\u591a\u89c4\u5219\u51e0\u4e4e\u5c31\u662f\u4e00\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u4e2a\u7cfb\u7edf\u5f88\u96be\u5177\u5907\u6709\u8fdb\u5316\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u518d\u6765\u5206\u6790\u4e00\u4e9b\u5927\u81ea\u7136\u6d3b\u52a8\uff0c\u5c3d\u7ba1\u5b83\u4eec\u770b\u8d77\u6765\u7269\u7406\u5ba2\u89c2\u89c4\u5f8b\u662f\u56fa\u5b9a\u7684\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u6765\u5904\u7406\u6240\u6709\u4e8b\u60c5\u3002\u4f46\u5b9e\u9645\u4e0a\u4efb\u4f55\u4e8b\u60c5\u90fd\u662f\u53d7\u5230\u5404\u79cd\u590d\u6742\u73af\u5883\u56e0\u7d20\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u7269\u4f53\u4ece\u7a7a\u4e2d\u6389\u4e0b\u6765\uff0c\u53d6\u51b3\u4e8e\u5730\u9762\u662f\u6c34\u3001\u6ce5\u571f\u3001\u6df7\u6ce5\u571f\u3001\u706b\u7b49\u5404\u79cd\u60c5\u51b5\uff0c\u5176\u7ed3\u679c\u4f1a\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\uff0c\u4efb\u4f55\u4e8b\u60c5\u7684\u5f71\u54cd\uff0c\u90fd\u65e0\u6cd5\u6709\u786e\u5b9a\u6027\u7684\u56e0\u7d20\uff0c\u5982\u679c\u4e00\u4e2a\u7269\u4f53\u7684\u67d0\u4e2a\u7ed3\u679c\u9700\u8981\u6709\u5916\u90e8\u67d0\u4e2a\u5bf9\u8c61\u6765\u51b3\u5b9a\uff0c\u8fd9\u901a\u5e38\u662f\u4e0d\u5408\u9002\u7684\u3002\u65e2\u4e0d\u5177\u5907\u6269\u5c55\u6027\uff0c\u540c\u65f6\u4e5f\u4e0d\u80fd\u4fdd\u8bc1\u6b63\u786e\u6027\u3002\u53ea\u6709\u7269\u4f53\u81ea\u8eab\uff0c\u5b83\u4efb\u4f55\u65f6\u523b\u90fd\u80fd\u591f\u611f\u77e5\u81ea\u5df1\u7684\u73af\u5883\uff0c\u53ea\u6709\u57fa\u4e8e\u6240\u6709\u73af\u5883\u56e0\u7d20\u7684\u7efc\u5408\u6027\u5224\u65ad\uff0c\u624d\u80fd\u66f4\u597d\u5730\u51b3\u5b9a\u5176\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\u4efb\u4f55\u4e8b\u7269\u65f6\u95f4\u7684\u4ea4\u4e92\uff0c\u51e0\u4e4e\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5f53\u7136\u4ece\u7f16\u7a0b\u7684\u89d2\u5ea6\uff0c\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e5f\u5b58\u5728\u4e00\u5b9a\u7684\u95ee\u9898\uff0c\u4e3b\u8981\u662f\u4ee5\u4e0b\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53cd\u9988\u673a\u5236 ")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6027\u80fd\u95ee\u9898\uff0c\u4f8b\u5982\u6709\u591a\u4e2a\u7c7b\u578bB\u7684\u5bf9\u8c61\u5217\u8868\uff0c\u539f\u672cA\u53ea\u9700\u8981\u904d\u5386\u4ee5\u4e0b\u961f\u5217B\uff0c\u4fee\u6539\u4ee5\u4e0b\u5c5e\u6027\u5373\u53ef\uff0c\u4f46\u662f\u73b0\u5728\u53ef\u80fd\u9700\u8981\u7ed9\u6bcf\u4e2a\u5bf9\u8c61B\u6dfb\u52a0\u4e00\u4e2a\u65b9\u6cd5\uff0c\u7136\u540e\u7531B\u5206\u522b\u6267\u884c\u4e00\u4e0b\u65b9\u6cd5\u3002\u5c3d\u7ba1\u770b\u8d77\u6765\u4f1a\u5b58\u5728\u6027\u80fd\u95ee\u9898\uff0c\u4f46\u662f\u5bf9\u4e8e\u76f8\u540c\u7684\u903b\u8f91\uff0c\u4e24\u79cd\u65b9\u5f0f\u8c03\u7528\u7684\u6838\u5fc3\u4ee3\u7801\u51e0\u4e4e\u662f\u4e00\u6837\u7684\uff0c\u5269\u4e0b\u5c31\u662f\u4e0d\u540c\u673a\u5236\u5728\u7ec4\u7ec7\u6570\u636e\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u79cd\u673a\u5236\u4e0a\u7684\u5dee\u5f02\u76f8\u5bf9\u4e8e\u6838\u5fc3\u4ee3\u7801\u6765\u8bb2\uff0c\u51e0\u4e4e\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u3002\u672c\u8d28\u4e0a\u4e24\u79cd\u65b9\u6cd5\u7684\u6027\u80fd\u5dee\u5f02\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u95ee\u9898\u5c5e\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7279\u6709\u7684\u4e00\u4e2a\u95ee\u9898\uff0c\u6bd4\u5982\u5982\u679cA\u9700\u8981\u6263\u6389B\u7684\u67d0\u4e2a\u6570\u503c\u53d8\u91cf\uff0c\u5982\u679c\u6574\u4e2a\u903b\u8f91\u6b63\u5e38\u6267\u884c\u5f53\u7136\u6ca1\u95ee\u9898\u3002\u4f46\u662f\u8bbe\u60f3\u5982\u679cB\u7684\u8fd9\u4e2a\u8d44\u6e90\u4e0d\u591f\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u8fd9\u4e2a\u64cd\u4f5c\u4e0d\u5e94\u8be5\u6267\u884c\u3002\u5982\u679c\u662f\u91c7\u7528\u4e3b\u52a8\u5f0f\uff0c\u7531\u4e8eA\u662f\u53ef\u4ee5\u8bbf\u95eeB\u7684\u6210\u5458\u7684\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5224\u65ad\u662f\u5426\u53ef\u4ee5\u6267\u884c\u8ba1\u7b97\uff0c\u8fd9\u5c31\u7b80\u5316\u4e86\u6574\u4e2a\u95ee\u9898\u3002\u5f53\u7136\u5176\u4ee3\u4ef7\u662fB\u4e0d\u5f97\u4e0d\u66b4\u9732\u6570\u636e\u8bbf\u95ee\u6743\u9650\u7ed9\u5916\u90e8\uff0c\u9020\u6210\u5de8\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u5e0c\u671b\u6240\u6709\u6d89\u53ca\u53cc\u65b9\u8d44\u6e90\u53d8\u5316\u7684\u8ba1\u7b97\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u4e2d\u6267\u884c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u6d89\u53ca\u4e24\u4e2a\u5bf9\u8c61\uff0c\u4e24\u4e2a\u5bf9\u8c61\u90fd\u643a\u5e26\u5404\u81ea\u76f8\u5173\u7684\u5c5e\u6027\u6570\u636e\uff0c\u7136\u540e\u901a\u8fc7\u4e00\u4e9b\u7279\u6b8a\u7684\u4ea4\u6613\u51fd\u6570\u6765\u83b7\u5f97\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027"},"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027"),(0,n.kt)("p",null,"\u5728\u4e86\u89e3\u54cd\u5e94\u673a\u5236\u7684\u65b9\u5f0f\u4e4b\u524d\uff0c\u6211\u4eec\u8981\u5148\u4e86\u89e3\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u7279\u6027\uff0c\u5373\u4e8b\u4ef6\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e3b\u8981\u901a\u8fc7\u4e8b\u4ef6\u6d88\u606f\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u8fd9\u901a\u5e38\u7531\u4e24\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u6309\u7c7b\u578b\u5efa\u7acb\u5168\u5c40\u7684\u4e8b\u4ef6\u5217\u8868\uff0c\u7136\u540e\u54cd\u5e94\u4e8b\u4ef6\u7684\u5bf9\u8c61\u5206\u522b\u4ece\u8fd9\u4e2a\u5217\u8868\u53bb\u83b7\u53d6\u4e8b\u4ef6\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u79cd\u662f\u7c7b\u4f3cErlang\u7684\u673a\u5236\uff0c\u7cfb\u7edf\u4f1a\u5c06\u8fd9\u4e9b\u4e8b\u4ef6\u6d88\u606f\u5206\u53d1\u5230\u5177\u4f53\u6bcf\u4e2a\u8fdb\u7a0b\u5185\u90e8\uff0c\u5f62\u6210\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5c40\u90e8\u6d88\u606f\u5217\u8868")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u4e0a\u8ff0\u54ea\u79cd\u5f62\u5f0f\uff0c\u5b83\u4eec\u7684\u4e00\u4e2a\u76f8\u540c\u70b9\u90fd\u662f\uff0c\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\u53ea\u662f\u4e34\u65f6\u5b58\u5728\uff0c\u4e00\u65e6\u7cfb\u7edf\u6ce8\u518c\u7684\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\uff0c\u6d88\u606f\u5c31\u4f1a\u88ab\u4e22\u5f03\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u7684\u6d88\u606f\u901a\u77e5\u673a\u5236\u4e0d\u662f\u6309\u7167\u4e0a\u8ff0\u4e24\u79cd\u4e2d\u7684\u4efb\u610f\u4e00\u79cd\u7ec4\u7ec7\u7684\uff0c\u800c\u662f\u6309\u7167\u666e\u901a\u7684\u51fd\u6570\u4f20\u9012\u673a\u5236\uff0c\u5e76\u4e14\u8fd9\u4e2a\u51fd\u6570\u4f20\u9012\u662f\u6bcf\u5e27\u90fd\u6267\u884c\u7684\uff0c\u6240\u4ee5\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u4e4b\u540e\uff0c\u53d1\u9001\u4e00\u6761\u6263\u9664HP\u6570\u91cf\u4e3a3\u7684\u6d88\u606f\uff0c\u54cd\u5e94\u8005\u5728\u6263\u96643\u4e2aHP\u4e4b\u540e\uff0c\u8fd9\u4e2a\u503c\u53ef\u80fd\u4f1a\u5728\u4e0b\u4e00\u5e27\u88ab\u4fdd\u5b58\uff0c\u9664\u975e\u5f00\u53d1\u8005\u4fdd\u8bc1\u53d1\u51fa\u6d88\u606f\u7684\u7ec4\u4ef6\u6bcf\u5e27\u603b\u662f\u6267\u884c\u3002\u4f46\u662fRealityIS\u7684Change-Driven\u673a\u5236\u4f7f\u5f97\u6709\u53ef\u80fd\u7ed5\u8fc7\u8fd9\u4e2a\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u901a\u8fc7\u5bf9\u5c5e\u6027\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u6027\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Message]\nfloat HP\n")),(0,n.kt)("p",null,"\u5982\u679c\u662fMessage\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4fdd\u8bc1\u5728\u6bcf\u5e27\u7684\u6240\u6709\u7ec4\u4ef6\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\uff0c\u5c06\u5176\u6e05\u96f6\u3002",(0,n.kt)("strong",{parentName:"p"},"\u4f46\u8fd9\u53ef\u80fd\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\u5f62\u5f0f\uff0c\u8fd9\u4e00\u5757\u8fd8\u8981\u8fdb\u4e00\u6b65\u601d\u8003"),"\u3002"),(0,n.kt)("h4",{id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"},"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53cd\u9988\u7684\u95ee\u9898\uff0c\u4f20\u7edf\u7684\u89e3\u51b3\u65b9\u6848\u662f\u5f80\u56de\u53d1\u9001\u786e\u8ba4\u6d88\u606f\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u5b9a\u7684\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5206\u6790\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u5728\u5927\u591a\u6570\u8bf7\u4e0b\u5b83\u4eec\u662f\u53ef\u4ee5\u6b63\u786e\u6267\u884c\u7684\uff0c\u53ea\u6709\u5728\u5c11\u6570\u6781\u7aef\u60c5\u51b5\u4e0b\u7a0b\u5e8f\u4f1a\u51fa\u73b0\u5f02\u5e38\uff0c\u4f8b\u5982\u786c\u4ef6\u95ee\u9898\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6211\u4eec\u5374\u8981\u4e3a\u4e86\u9632\u6b62\u8fd9\u79cd\u95ee\u9898\uff0c\u800c\u5bf9\u6240\u6709\u6d88\u606f\u5904\u7406\u4f7f\u7528\u4e00\u79cd\u53cd\u9988\u7684\u673a\u5236\u3002\u53cd\u9988\u6d89\u53ca\u5230\u5f02\u6b65\uff0c\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u901a\u4fe1\u90fd\u8981\u7ef4\u62a4\u8fd9\u79cd\u5f02\u6b65\u7684\u786e\u8ba4\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5230\u6e38\u620f\u7684\u4e00\u4e9b\u7279\u5f81\uff0c\u6e38\u620f\u4e2d\u5927\u91cf\u5185\u5b58\u5f53\u4e2d\u9700\u8981\u8bb0\u5f55\u548c\u8ba1\u7b97\u7684\u4e00\u4e9b\u5bf9\u8c61\u4e0d\u4e00\u5b9a\u90fd\u9700\u8981\u9700\u8981\u5b58\u6863\u7684\uff0c\u5982\u679c\u628a\u6240\u6709\u8fd9\u4e9b\u6570\u636e\u5b58\u6863\uff0c\u4f1a\u5bfc\u81f4\u5f88\u5927\u7684\u95ee\u9898\uff0c\u5373\u7a0b\u5e8f\u5728\u6062\u590d\u7684\u65f6\u5019\u6839\u672c\u65e0\u6cd5\u7cbe\u786e\u6062\u590d\u5230\u67d0\u4e9b\u4e2d\u95f4\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6539\u53d8\u4e86\u4e00\u79cd\u7b56\u7565\uff0c\u5b83\u53ea\u5bf9\u67d0\u4e9b\u5173\u952e\u65f6\u95f4\u70b9\u8fdb\u884c\u5b58\u6863\uff0c\u800c\u5728\u8fd9\u4e9b\u5b58\u6863\u8282\u70b9\u4e4b\u95f4\uff0c\u4e00\u5207\u6570\u636e\u90fd\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\u3002\u6240\u4ee5\u5f53\u6709\u5f02\u5e38\u53d1\u751f\u65f6\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6062\u590d\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u8282\u70b9\u5373\u53ef\u3002"),(0,n.kt)("h3",{id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"},"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability",src:l(1594).Z,width:"2556",height:"1406"})),(0,n.kt)("h4",{id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528"},"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability-1",src:l(3402).Z,width:"2530",height:"1372"})),(0,n.kt)("h2",{id:"210-gpu-vm"},"2.10 GPU VM"),(0,n.kt)("h2",{id:"211-render-vm"},"2.11 Render VM"),(0,n.kt)("h2",{id:"212-realityis-runtime"},"2.12 RealityIS Runtime"),(0,n.kt)("p",null,"RealityIS Runtime\u53ef\u4ee5\u7ed9\u7b2c\u4e09\u65b9\u4f7f\u7528\uff0c\u901a\u8fc7\u96c6\u6210\u5230\u7b2c\u4e09\u65b9App\u5f62\u6210\u72ec\u7acb\u5206\u53d1\u7684App\u5f62\u6001\u3002RealityIS Runtime\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7aef\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u6e32\u67d3\u4ee5\u53ca\u8d44\u6e90\u52a0\u8f7d\u76f8\u5173\u7684\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u4e91\u7aef\u7684\u5206\u5e03\u5f0f\u80fd\u529b")),(0,n.kt)("p",null,"\u57fa\u4e8e\u6b64\uff0c\u5176\u4e2d\u7684\u4e00\u4e9b\u53d8\u5316\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7aef\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u96c6\u6210\u81ea\u5df1\u7684C++\u5e93\uff0c\u53ef\u4ee5\u6269\u5c55\u5e94\u7528\u7684\u80fd\u529b\uff0c\u5e76\u4e0e\u672c\u5730App\u5176\u4ed6\u6a21\u5757\u8fdb\u884c\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e91\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u81ea\u5df1\u7684\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7C++\u6269\u5c55\u80fd\u529b")),(0,n.kt)("p",null,"\u4e0d\u53d8\u7684\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Creation\u7684\u6258\u7ba1\u5b58\u50a8\u662f\u4e0d\u53d8\u7684\uff0c\u8fd9\u4e2a\u53ea\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u8fd0\u884c\u65f6\u7684\u5b9e\u9645\u6570\u636e\u90fd\u662f\u5b58\u50a8\u5728\u81ea\u5b9a\u4e49\u670d\u52a1\u5668\u4e2d\u7684"),(0,n.kt)("li",{parentName:"ul"},"RealityID\u662f\u4e0d\u53d8\u7684\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6ce8\u518cRealityID\uff0c\u8fdb\u884c\u7edf\u4e00\u5b89\u5168\u9a8c\u8bc1\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u8ddf\u81ea\u5df1\u6570\u636e\u5e93\u7684\u8bb0\u5f55\u8fdb\u884c\u6620\u5c04")),(0,n.kt)("p",null,"\u4ece\u4ef7\u503c\u4e0a\u770b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7edf\u4e00\u4e86\u5e94\u7528\u5f00\u53d1\u7684\u65b9\u5f0f\uff0c\u7b80\u5316\u4e86\u90e8\u7f72"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528C++\u5bf9\u7cfb\u7edf\u8fdb\u884c\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u628aRealityIS\u5f53\u505a\u4e00\u79cd\u9762\u5411\u9886\u57df\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u3001\u7edf\u4e00\u3001\u7b80\u5355\u7f16\u7a0b\u6216\u8005\u81ea\u5b9a\u4e49\u7684\u673a\u5236")),(0,n.kt)("h2",{id:"213-\u6027\u80fd\u56e0\u7d20"},"2.13 \u6027\u80fd\u56e0\u7d20"),(0,n.kt)("h3",{id:"2131-\u5c40\u90e8\u6027\u4e27\u5931"},"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931"),(0,n.kt)("p",null,"\u8fc7\u53bb\u5f88\u591a\u51fd\u6570\u5185\u90e8\u7684\u4e34\u65f6\u53d8\u91cf\uff0c\u5176\u751f\u547d\u5468\u671f\u672c\u6765\u53ea\u5305\u542b\u51fd\u6570\u5185\uff0c\u7b49\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u4e4b\u540e\u5c31\u4f1a\u91ca\u653e\uff0c\u4f46\u662f\u7531\u4e8e\u9700\u8981\u5728\u4e0a\u4e0b\u6e38\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u53c2\u6570\uff0c\u5b83\u6709\u53ef\u80fd\u4f1a\u5347\u7ea7\u4e3a\u5b9e\u4f53\u53d8\u91cf\uff0c\u8fd9\u5c31\u5bfc\u81f4\u5176\u5b58\u50a8\u65f6\u95f4\u6bd4\u8f83\u957f\uff0c\u5185\u5b58\u5360\u7528\u66f4\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u5c40\u90e8\u6027\u4e27\u5931")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u4f20\u7edfOOP\u4e2d\u7684\u79c1\u6709\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u800c\u8a00\uff0c\u8fd9\u4e9b\u53d8\u91cf\u672c\u8eab\u5c31\u662f\u6301\u4e45\u5b58\u50a8\u7684\uff0c\u6240\u4ee5\u8fd9\u90e8\u5206\u5f71\u54cd\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u4e3b\u8981\u662f\u5927\u90e8\u5206\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u4f7f\u7528\uff0c\u8fd9\u91cc\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5728\u4f20\u7edf\u4e2d\u5355\u4e2a\u51fd\u6570\u53ef\u4ee5\u72ec\u7acb\u5b8c\u6210\u7684\u4e8b\u60c5\uff0c\u5728RealityIS\u4e2d\u4e5f\u662f\u72ec\u7acb\u5b8c\u6210\uff0c\u90a3\u4e48\u4e24\u8005\u662f\u7b49\u6548\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f20\u7edfOOP\u4e2d\u7684\u4e00\u4e2a\u590d\u6742\u51fd\u6570\u9700\u8981\u62c6\u6210\u591a\u4e2a\u51fd\u6570\uff0c\u8fd9\u79cd\u60c5\u51b5\u5728\u4f20\u7edfOOP\u4e2d\u5c3d\u7ba1\u51fd\u6570\u7684\u6267\u884c\u65f6\u95f4\u8fb9\u957f\uff0c\u4f46\u662f\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u5176\u5b58\u50a8\u65f6\u95f4\u6700\u591a\u4e5f\u53ea\u5728\u51fd\u6570\u6267\u884c\u671f\u95f4\uff1b\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u4e0d\u7ba1\u5d4c\u5957\u7ed3\u6784\u5982\u4f55\uff0c\u4e5f\u80fd\u4fdd\u8bc1\u53ea\u5b58\u50a8\u4e8e\u9700\u8981\u7684\u5d4c\u5957\u671f\u95f4\uff0c\u8ddfOOP\u57fa\u672c\u4e0a\u7b49\u4ef7\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u88ab\u6253\u4e71\u7684\uff0c\u65e0\u6cd5\u4fdd\u8bc1\u76f8\u5173\u7684\u4e24\u4e2a\u903b\u8f91\u4e00\u5b9a\u662f\u6309\u7d27\u90bb\u6267\u884c\u7684\uff0c\u6781\u7aef\u60c5\u51b5\u4e0b\u53ef\u80fd\u4e2d\u95f4\u9694\u4e86\u5f88\u591a\u65e0\u5173\u7684\u7ec4\u4ef6\uff0c\u751a\u81f3\u53ef\u80fd\u540e\u7eed\u90fd\u4e0d\u4f1a\u518d\u88ab\u4f7f\u7528\uff0c\u4f8b\u5982\u540e\u7eed\u7684\u6761\u4ef6\u5224\u65ad\u5bfc\u81f4\u65e0\u6cd5\u8fdb\u884c\u76f8\u5e94\u7ec4\u4ef6\u5206\u652f\uff0c\u56e0\u6b64\u5f88\u96be\u9884\u6d4b\u5176\u53d8\u91cf\u7684\u5b58\u7eed\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u4f46\u597d\u5904\u662f\u5b83\u53ea\u5206\u914d\u4e00\u6b21\uff0c\u907f\u514d\u4e0b\u6b21\u5bf9\u8be5\u53d8\u91cf\u7684\u91cd\u590d\u6784\u9020\u3002\u4ee5\u5b58\u50a8\u6362\u53d6\u8ba1\u7b97\uff08\u8fd9\u91cc\u4e3b\u8981\u6307\u5bf9\u8c61\u7684\u5206\u914d\u548c\u521d\u59cb\u5316\uff0c\u9500\u6bc1\u7b49\u64cd\u4f5c\uff09\u7684\u4e00\u79cd\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u4e9b\u53d8\u91cf\u8ddf\u5783\u573e\u56de\u6536\u4e2d\u7684\u53d8\u91cf\u8fd8\u662f\u4e0d\u4e00\u6837\uff0c\u81f3\u5c11\u8fd9\u4e9b\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u662f\u8ddf\u5b9e\u4f53\u5bf9\u8c61\u4e00\u81f4\u7684\uff0c\u5b83\u4eec\u4f1a\u968f\u7740\u5b9e\u4f53\u5bf9\u8c61\u7684\u9500\u6bc1\u800c\u81ea\u52a8\u56de\u6536\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u4f18\u5316\u65b9\u6cd5\u662f\uff0c\u8fd9\u4e9b\u6ca1\u6709\u6807\u8bb0\u6c38\u4e45\u5b58\u50a8\u7684\u3001\u4e34\u65f6\u7684\u53d8\u91cf\uff0c\u5728\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u5168\u90e8\u9500\u6bc1\uff0c\u8fd9\u6837\u81f3\u5c11\u4e0b\u4e00\u5e27\u8fd8\u6ca1\u6709\u521d\u59cb\u5316 \u8fd9\u4e2a\u53d8\u91cf\u7684\u65f6\u5019\u5185\u5b58\u5360\u7528\u662f\u4e0d\u9700\u8981\u7684\uff0c\u4f46\u662f\u8fd9\u6837\u89e3\u51b3\u4e0d\u4e86\u6839\u672c\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u5e27\u7ed3\u675f\u7684\u65f6\u5019\u5185\u5b58\u8fd8\u662f\u4f1a\u5f88\u9ad8\uff0c\u800c\u8fd9\u4e9b\u5f62\u6210\u4e00\u4e2a\u9608\u503c\u8fd8\u662f\u4f1a\u9650\u5236\u5355\u53f0\u670d\u52a1\u5668\u7684\u80fd\u529b\uff0c\u800c\u4e14\u8fd9\u79cd\u4f18\u5316\u5e26\u6765\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6700\u597d\u7684\u6307\u5bfc\u662f")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u7684\u53d8\u91cf\u4e0d\u6d89\u53ca\u8ddf\u5176\u4ed6\u5bf9\u8c61\u901a\u4fe1\uff0c\u5219\u6700\u597d\u6240\u6709\u6d89\u53ca\u7684\u79c1\u6709\u64cd\u4f5c\u90fd\u96c6\u4e2d\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u76f4\u5230\u8f93\u51fa\u5168\u5c40\u5c5e\u6027\u672a\u77e5\uff0c\u8fd9\u6837\u5185\u90e8\u7684\u53d8\u91cf\u90fd\u662f\u4e34\u65f6\u53d8\u91cf\uff0c\u8ddfOOP\u4e00\u6837\u7684\u6548\u679c\u3002\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u9700\u8981\u901a\u4fe1\uff0c\u90a3\u4e48\u8fd9\u76f8\u5f53\u4e8eOOP\u4e2d\u7684\u5bf9\u8c61\u79c1\u6709\u53d8\u91cf\uff0c\u672c\u8eab\u4e5f\u662f\u4e00\u76f4\u5b58\u50a8\u7684\uff0c\u8fd9\u4e5f\u662f\u7b49\u6548\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6709\u70b9\u8fdd\u80cc\u7ec4\u5408\u7684\u601d\u8def\uff0c\u4f46\u662f\u6211\u4eec\u6240\u63d0\u5021\u7684\u7ec4\u5408\u601d\u60f3\uff0c\u4e5f\u5e76\u4e0d\u662f\u8bf4\u628a\u6240\u6709\u51fd\u6570\u62c6\u6210\u5c0f\u51fd\u6570\uff0c\u7ec4\u5408\u7684\u662f\u7ed3\u6784\u6027\u7684\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u662f\u5bf9\u4e8e\u5df2\u7ecf\u7f16\u8f91\u597d\u7684\u5bf9\u8c61\uff0c\u53ef\u4ee5\u5bf9\u7ec4\u5408\u8fdb\u884c\u5408\u6279\u64cd\u4f5c\uff0c\u5373\u5c06\u90a3\u4e9b\u7ecf\u8fc7\u7ec4\u5408\u5f62\u6210\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5982\u679c\u4ed6\u4eec\u4e2d\u95f4\u5904\u7406\u7684\u90fd\u662f\u79c1\u6709\u53d8\u91cf\uff0c\u5e76\u4e14\u6ca1\u6709\u5916\u90e8\u4ea4\u4e92\uff0c\u53ef\u4ee5\u5408\u6279\u6210\u4e00\u4e2a\u51fd\u6570\u7684\u6548\u679c\uff0c\u5f53\u7136\u8fd9\u53ef\u80fd\u9700\u8981\u5728\u51fd\u6570\u6d3e\u53d1\u5c42\u505a\u4e00\u70b9\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5e26\u6765\u8fd0\u884c\u65f6\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u4f46\u8003\u8651\u5230\u5206\u5e03\u5f0f\u7684\u7ed3\u679c\uff0c\u5355\u53f0\u673a\u5668\u4e0d\u4f1a\u6210\u4e3a\u6027\u80fd\u74f6\u9888\uff0c\u800c\u4e14\u73b0\u4ee3\u8ba1\u7b97\u673a\u8ba1\u7b97\u662f\u74f6\u9888\uff0c\u800c\u5185\u5b58\u5e76\u4e0d\u662f\u5927\u7684\u74f6\u9888\uff0c\u9664\u975e\u90a3\u79cd\u6570\u636e\u7ed3\u6784\u7279\u522b\u5927\u4e14\u4e0d\u6613\u4e8e\u62c6\u5206\u7684\u573a\u666f\uff0c\u603b\u4f53\u6765\u8bb2\u95ee\u9898\u4e0d\u5927\u3002"),(0,n.kt)("h3",{id:"2132-\u65e0\u6548\u8ba1\u7b97"},"2.13.2 \u65e0\u6548\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u6bd4\u6e38\u620f\u7a0b\u5e8f\u7684\u6027\u80fd\u9ad8\uff0c\u662f\u56e0\u4e3a\u5e94\u7528\u7a0b\u5e8f\u5927\u591a\u91c7\u7528\u4e8b\u4ef6\u9a71\u52a8\u7684\u673a\u5236\uff0c\u4e3b\u5faa\u73af\u53ea\u6709\u4e00\u4e2a\uff0c\u5f53\u5f53\u524d\u4efb\u52a1\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u5b83\u4f1a\u5728\u67d0\u4e2a\u5730\u65b9\u5904\u4e8e\u7b49\u5f85\u72b6\u6001\uff0c\u6216\u8005\u5c31\u662f\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u6ca1\u6709\u518d\u9700\u8981\u6267\u884c\u7684\u4efb\u52a1\u4e86\u3002\u5f53\u7cfb\u7edf\u68c0\u6d4b\u5230\u67d0\u4e2a\u4e8b\u4ef6\u65f6\uff0c\u4e00\u822c\u662f\u7528\u6237\u8f93\u5165\u4e8b\u4ef6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u89e6\u53d1\u4ee3\u7801\u7684\u6267\u884c\uff0c\u4e3a\u6b64\uff0c\u4e00\u822c\u7684\u65b9\u5f0f\u662f\u5728main\u4e2d\u7ef4\u6301\u4e00\u4e2a\u5c0f\u5faa\u73af\u6765\u4e13\u95e8\u68c0\u6d4b\u7cfb\u7edf\u4e8b\u4ef6\uff0c\u4ee5\u4fbf\u4e8e\u63a5\u6536\u5230\u7cfb\u7edf\u4e8b\u4ef6\u7684\u65f6\u5019\u53ef\u4ee5\u6b63\u786e\u89e6\u53d1\u6267\u884c\u903b\u8f91\u7684\u4ee3\u7801\uff0c\u56e0\u4e3a\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u6307\u4ee4\u5df2\u7ecf\u505c\u6b62\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u7ed3\u6784\u662f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\u7684\uff0c\u6240\u4ee5\u8fd9\u5f88\u5bb9\u6613\u901a\u8fc7\u4ee3\u7801\u6765\u63a7\u5236\u6574\u4e2a\u6d41\u7a0b\uff0c\u4f8b\u5982\u5982\u679c\u7528\u6237\u8f93\u5165\u6ca1\u6709\u53d1\u751f\uff0c\u90a3\u4e48\u6761\u4ef6\u5224\u65ad\u903b\u8f91\u4f1a\u4fdd\u8bc1\u540e\u7eed\u7684\u903b\u8f91\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u65e0\u5e8f\u7684\u8ba1\u7b97\u6307\u4ee4\u88ab\u8f6c\u6362\u4e3a\u6709\u5e8f\u5217\u8868\u4e4b\u540e\uff0c\u5e26\u6765\u7684\u4e00\u4e2a\u4ee3\u4ef7\u662f\u8fd9\u79cd\u524d\u540e\u903b\u8f91\u5206\u652f\u63a7\u5236\u80fd\u529b\u7684\u4e27\u5931\uff1a\u540e\u7eed\u7684\u51fd\u6570\u552f\u4e00\u7684\u5f71\u54cd\u56e0\u7d20\u662f\u8f93\u5165\u53c2\u6570\uff0c\u53ea\u80fd\u6839\u636e\u53c2\u6570\u8fdb\u884c\u5224\u65ad\u662f\u5426\u8981\u8fdb\u884c\u8ba1\u7b97\uff0c\u4f46\u56e0\u4e3a\u6570\u636e\u5168\u90e8\u662f\u88ab\u653e\u5230block\u91cc\u9762\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u68c0\u6d4bblock\u4e2d\u5c5e\u6027\u72b6\u6001\u7684\u6539\u53d8\uff0c\u4e3b\u8981\u6709\u4e00\u4e2a\u53d1\u751f\u53d8\u5316\u5c31\u9700\u8981\u6267\u884c\u51fd\u6570\u8ba1\u7b97\u3002"),(0,n.kt)("h2",{id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*"),(0,n.kt)("h3",{id:"2141-realityis\u6838\u5fc3\u57fa\u7840"},"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0a\u5c42\u7cfb\u7edf\u6709\u5f88\u591a\u4e0d\u540c\u7684\u673a\u5236\u3001\u4e0d\u540c\u7684\u8f6f\u4ef6\u67b6\u6784\u601d\u8def\uff0c\u4f46RealityIS\u7684\u6838\u5fc3\u57fa\u7840\u5176\u5b9e\u662f\u8ba1\u7b97\u673a\u7a0b\u5e8f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u673a\u5236\u548c\u539f\u7406\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u539f\u7406\u57fa\u672c\u4e0a\u90fd\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u800c\u4e0a\u5c42\u7684\u7f16\u8bd1\u539f\u7406\u548c\u66f4\u4e0b\u5c42\u7684\u786c\u4ef6\u6307\u4ee4\u548c\u6c47\u7f16\u90fd\u662f\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u8fd9\u4f7f\u5f97\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u91cd\u8981\u6027\u6ca1\u6709\u88ab\u7ed9\u4e88\u8db3\u591f\u7684\u91cd\u89c6\u3002\u5c3d\u7ba1\u5b83\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u662f\u5b83\u5374\u5bf9\u4e0a\u5c42\u7684\u7f16\u8bd1\u8fc7\u7a0b\u751a\u81f3\u7f16\u7a0b\u8bed\u8a00\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u662f\u4f53\u73b0\u5728\u5b83\u4fc3\u8fdb\u4e86\u4e0a\u5c42\u7684\u53d1\u5c55\u548c\u8fdb\u5316\uff0c\u76f8\u53cd\uff0c\u5b83\u675f\u7f1a\u4e86\u4e0a\u9762\u7684\u8fdb\u5316\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u548c\u52a0\u8f7d\u6709\u5f88\u591a\u91cd\u8981\u7684\u7279\u70b9\uff0c\u4f7f\u5f97\u5b83\u65e2\u91cd\u8981\u53c8\u8db3\u591f\u7b80\u5355\uff0c\u540c\u65f6\u5bf9\u4e0a\u4e0b\u6e38\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u66f4\u786e\u5207\u8bf4\u8f83\u5927\u7684\u7ea6\u675f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u975e\u5e38\u7b80\u5355"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f\u4e00\u79cd\u975e\u5e38\u4f18\u96c5\u7684\u7ed3\u6784\u6027\u62bd\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u548c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4ea7\u751f\u4e86\u5de8\u5927\u7684\u675f\u7f1a"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f")),(0,n.kt)("p",null,"\u6b63\u56e0\u4e3a\u5982\u6b64\uff0cRealityIS\u8bde\u751f\u6700\u5173\u952e\u7684\u8fdb\u7a0b\u662f\u9996\u5148\u4ece\u7b26\u53f7\u8868\u5f97\u5230\u542f\u793a\uff0c\u800c\u4e0d\u662f\u76f8\u53cd\u4ece\u6e38\u620f\u7a0b\u5e8f\u7684\u7ed3\u6784\u7740\u624b\u3002\u524d\u8005\u53ef\u4ee5\u8ba4\u4e3a\u662f\u81ea\u4e0b\u5411\u4e0a\u7684\uff0c\u800c\u540e\u8005\u662f\u81ea\u4e0a\u5411\u4e0b\u7684\u3002\u6ca1\u6709\u5bf9\u7b26\u53f7\u8868\u7684\u5173\u952e\u7406\u89e3\uff0c\u6e38\u620f\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ba1\u7406\u53ea\u80fd\u7528\u4f5c\u5f00\u53d1\u5546\u5185\u90e8\u66f4\u597d\u7684\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\uff0c\u5c3d\u7ba1\u4e5f\u53ef\u4ee5\u7b80\u5316\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u4f7f\u7528\u590d\u7528\u6765\u63d0\u9ad8\u5de5\u4e1a\u5316\u751f\u4ea7\uff0c\u4f46\u662f\u5b83\u65e0\u6cd5\u76f4\u63a5\u5230\u8fbe\u4e92\u64cd\u4f5c\u6027\u3002\u5bf9\u7b26\u53f7\u8868\u7684\u542f\u793a\u624d\u5bfc\u81f4\u4e86\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u5207\u673a\u5236\u3002\u800c\u7b26\u53f7\u8868\u6b63\u662f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u6838\u5fc3\u3002"),(0,n.kt)("h3",{id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027"},"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027"),(0,n.kt)("h3",{id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5"},"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5"),(0,n.kt)("h4",{id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"},"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"),(0,n.kt)("p",null,"\u8fd9\u79cd\u67b6\u6784\u4ea7\u751f\u4e86\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u5176\u4e2d\u6700\u6838\u5fc3\u7684\u662f\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u4e00\u4e2a\u6574\u4f53\uff0c\u800c\u8fd9\u662f\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\uff0c\u5c06\u6bcf\u4e2a\u51fd\u6570\u90fd\u72ec\u7acb\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\uff0c\u4f1a\u5bfc\u81f4\u52a8\u6001\u67e5\u8be2\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u8fd9\u662f\u7531\u4e8e\u5185\u5b58\u7684\u5bfb\u5740\u67b6\u6784\u51b3\u5b9a\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u9488\u5bf9\u6bcf\u6570\u636e\u6bb5\u548c\u7a0b\u5e8f\u6bb5\u90fd\u5206\u914d\u7edd\u5bf9\u5730\u5740\uff0c\u90a3\u6837\u4e0d\u7ba1\u662f\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7684\u8fc7\u7a0b\u90fd\u6709\u5de8\u5927\u5f71\u54cd\uff0c\u800c\u76f8\u5bf9\u5bfb\u5740\u4f7f\u5f97\u7a0b\u5e8f\u66f4\u5bb9\u6613\u5408\u5e76\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5c06\u7a0b\u5e8f\u7ed3\u6784\u8fdb\u884c\u4e86\u7b80\u5316\u5904\u7406\uff0c\u4f7f\u5f97\u8fd9\u4e2a\u52a8\u6001\u67e5\u8be2\u7684\u5f00\u9500\u53d8\u5f97\u5f88\u4f4e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u8fdb\u5236\u7684\u5b89\u5168\u6027\uff0c\u52a8\u6001\u7ec4\u7ec7\u5b58\u5728\u8f83\u5927\u7684\u4e8c\u8fdb\u5236\u7248\u672c\u95ee\u9898\uff0c\u8fdb\u800c\u4ea7\u751f\u5b89\u5168\u6027\u95ee\u9898\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5728\u66f4\u4e0a\u5c42\u7684\u811a\u6b65\u8bed\u8a00\u5c42\u9762\u8fdb\u884c\u52a8\u6001\u7ec4\u7ec7\uff0c\u51cf\u5c11\u5bf9\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("h4",{id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027"},"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21433-\u7248\u672c\u7ba1\u7406"},"2.14.3.3 \u7248\u672c\u7ba1\u7406"),(0,n.kt)("h4",{id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"},"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u52a8\u6001\u94fe\u63a5\u6280\u672f\u4e2d\u5305\u542b\u8f83\u5927\u7684\u5171\u4eab\u5e93\u7b26\u53f7\u8868\u3001\u7a0b\u5e8f\u5bf9\u5171\u4eab\u5e93\u7b26\u53f7\u7684\u5f15\u7528\u90fd\u9700\u8981\u52a8\u6001\u67e5\u627e\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5f15\u8d77\u8f83\u5927\u7684\u6027\u80fd\u5f00\u652f\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u51cf\u5c11\u6027\u80fd\u5f00\u652f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u5168\u5c40\u7b26\u53f7\u67e5\u627e\uff0c\u51fd\u6570\u90fd\u662f\u9759\u6001\u6307\u9488\uff0c\u8fd9\u5f97\u76ca\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u98ce\u683c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u662f\u7eaf\u51fd\u6570\uff0c\u5373\u4f7f\u5bf9\u4e8eiOS\u7cfb\u7edf\uff0c\u53ea\u80fd\u91c7\u53d6\u89e3\u91ca\u6027\u7684\u6267\u884c\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u51fd\u6570\u4f7f\u7528\u7684\u5730\u5740\u4e5f\u662f\u5728\u4e00\u4e2a\u5f88\u5c0f\u7684\u5185\u5b58\u5730\u5740\u7a7a\u95f4\uff0c\u6b64\u65f6\u7684\u4ee3\u7801\u5f62\u6210\u4e00\u79cd\u201c\u9690\u5f0f\u7684\u7b26\u53f7\u8868\u201d\uff0c\u56e0\u4e3a\u6211\u4eec\u901a\u4ee3\u7801\u83b7\u53d6\u7b26\u53f7\u5728\u6808\u4e2d\u7684\u5730\u5740\uff0c\u8fd9\u907f\u514d\u4e86\u5927\u91cf\u7684\u5168\u5c40\u67e5\u627e"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5bf9\u4e8eRealityIS\u8fd0\u884c\u65f6\uff0c\u4ed6\u9700\u8981\u67e5\u627e\u5168\u5c40\u7b26\u53f7\u8868\u6765\u83b7\u53d6\u5730\u5740\uff0c\u6211\u4eec\u7684\u7b26\u53f7\u8868\u7ed3\u6784\u4e5f\u66f4\u52a0\u5de7\u5999\u3002\u8fd9\u79cd\u67e5\u627e\u88ab\u8f6c\u5316\u4e3a\u53e6\u4e00\u79cd\u5f62\u5f0f\uff1a\u5373\u5728\u7f16\u8bd1\u65f6\u5efa\u7acb\u4e86\u51fd\u6570\u7ec4\u4ef6\u548c\u7b26\u53f7\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u7136\u540e\u8fd9\u79cd\u5173\u7cfb\u5728\u52a0\u8f7d\u65f6\u88ab\u4fdd\u5b58\u4e3a\u5185\u5b58\u4e2d\u6570\u636e\u548c\u4ee3\u7801\u7684\u4e00\u4e2a\u5f71\u89c6\uff0c\u8fd9\u5c31\u662f\u4e00\u4e2aC++\u7684\u6307\u9488\u5c31\u627e\u5230\u4e86\u5bf9\u5e94\u7684\u5730\u5740\uff0c\u6240\u4ee5\u8fd9\u95f4\u63a5\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u6bcf\u6b21\u7b26\u53f7\u8868\u5168\u5c40\u67e5\u627e\uff0c\u56e0\u4e3a\u5b83\u53ea\u5728\u52a0\u8f7d\u65f6\u8ba1\u7b97\u4e00\u6b21\uff0c\u800c\u4e0d\u662f\u9700\u8981\u6bcf\u6b21\u9047\u5230\u7b26\u53f7\u52a8\u6001\u4e14\u91cd\u590d\u67e5\u627e\u3002\u7ec4\u4ef6\u548c\u51fd\u6570\u4e4b\u95f4\u7684\u786e\u5b9a\u5173\u7cfb\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\u3002")),(0,n.kt)("h3",{id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"},"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("p",null,"\u5c06\u57282.16\u8282\u4e13\u95e8\u8ba8\u8bba"),(0,n.kt)("h2",{id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"},"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"),(0,n.kt)("h3",{id:"2151-\u590d\u6742\u7cfb\u7edf"},"2.15.1 \u590d\u6742\u7cfb\u7edf"),(0,n.kt)("h3",{id:"2152-\u7ec6\u80de\u6a21\u578b"},"2.15.2 \u7ec6\u80de\u6a21\u578b"),(0,n.kt)("p",null,"But for Dr. Kay, he states that ",(0,n.kt)("a",{parentName:"p",href:"http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en"},"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.")," Why? Well, part of his background was cell biology and when he did the math on their computational power, he realized that while software routinely has trouble scaling, cells can easily coordinate and scale by a factor of over a trillion, creating some of the most fantastically complex things in existence, capable of correcting their own errors. By comparison, the most sophisticated computer software programs are slow, tiny, bugfests. ",(0,n.kt)("em",{parentName:"p"},"Kay's")," conception of OOP starts with a single question: how can we get our software to match this scalability?"),(0,n.kt)("h4",{id:"21521-isolation"},"2.15.2.1 Isolation"),(0,n.kt)("p",null,'First, let\'s discuss isolation. This is a shorter term than "local retention and protection and hiding of state-process".'),(0,n.kt)("p",null,"The interior of a cell is messy and confusing, but the cell membrance wraps this up in a tidy package, hiding the internal details. It's estimated that around 50 to 70 ",(0,n.kt)("em",{parentName:"p"},"billion")," cells die in your body every day. But you don't. Could your software keep running if you had millions of exceptions being thrown every minute? I doubt it."),(0,n.kt)("p",null,"You not dying when your cells die isn't encapsulation; it's isolation. Consider the following (awful) example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"class MyExample:\n def reciprocal(self, num):\n return 1.0/num\n\nexample = MyExample()\nprint example.reciprocal(4);\nprint example.reciprocal(0);\n")),(0,n.kt)("p",null,"In the above code, we've encapsulated the reciprocal equation in the class, but then ..."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'0.25\nTraceback (most recent call last):\n File "class.py", line 7, in \n print example.reciprocal(0);\n File "class.py", line 3, in reciprocal\n return 1.0/num\nZeroDivisionError: float division by zero\n')),(0,n.kt)("p",null,"The object dies, as does the code which contained it. This is the antithesis of what Dr. Kay is trying to get us to understand."),(0,n.kt)("p",null,"If you think of Web browsers and servers as objects, however, we see something closer to his vision. If your browser crashed every time a web server crashed or was otherwise unavailable, Microsoft IIS would never have reached 2.0."),(0,n.kt)("p",null,"Now that we sort of understand a core idea of Kay's, Lets take it further. Kay points out that from the early days of Arpanet in the 60s, to the time of his OOPSLA keynote in 1997, Arpanet had grown roughly 100 million times the size of what it was. And it didn't have to be repeatedly taken down for maintenance every time we wanted to extend it. The internet, today, is sometimes cited by Kay as the only working example of his OO model."),(0,n.kt)("h3",{id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"},"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"),(0,n.kt)("h4",{id:"21531-is-erlang-object-oriented"},"2.15.3.1 Is Erlang object oriented?"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Joe Armstrong:")," Smalltalk got a lot of the things right. So if your question is about what I think about object oriented programming, I sort of changed my mind over that. I wrote a an article, a blog thing, years ago - Why object oriented programming is silly. I mainly wanted to provoke people with it. They had a quite interesting response to that and I managed to annoy a lot of people, which was part of the intention actually. I started wondering about what object oriented programming was and I thought Erlang wasn't object oriented, it was a functional programming language."),(0,n.kt)("p",null,"Then, my thesis supervisor said \"But you're wrong, Erlang is extremely object oriented\". He said object oriented languages aren't object oriented. I might think, though I'm not quite sure if I believe this or not, but Erlang might be the only object oriented language because the 3 tenets of object oriented programming are that it's based on message passing, that you have isolation between objects and have polymorphism."),(0,n.kt)("p",null,"Alan Kay himself wrote this famous thing and said \"The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages\". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back."),(0,n.kt)("p",null,"But you don't really do that and you don't really have isolation which is one of the problems. Dan Ingalls said yesterday (I thought it was very nice) about messaging that once you got messaging, you don't have to care where the message came from. You don't really have to care, the runtime system has to organize the delivery of the message, we don't have to care about how it's processed. It sort of decouples the sender and the receiver in this kind of mutual way. That's why I love messaging."),(0,n.kt)("p",null,"The 3 things that object oriented programming has it's messaging, which is possibly the most important thing. The next thing is isolation and that's what I talked about earlier, that my program shouldn't crash your program, if the 2 things are isolated, then any mistakes I make in my program will not crash your program. This is certainly not true with Java. You cannot take 2 Java applications, bung them in the JVM and one of them still halts the machine and the other one will halt as well. You can crash somebody else's application, so they are not isolated."),(0,n.kt)("p",null,"The third thing you want is polymorphism. Polymorphism is especially regarding messaging, that's just there for the programmer's convenience. It's very nice to have for all objects or all processes or whatever you call them, to have a printMe method - \"Go print yourself\" and then they print themselves. That's because the programmers, if they all got different names, the programmer is never going to remember this, so it's a polymorphism. It just means \"OK, all objects have a printMe method. All objects have a what's your size method or introspection method.\""),(0,n.kt)("p",null,"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about. You can try it and see it for yourself."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://www.infoq.com/interviews/johnson-armstrong-oop/"},"https://www.infoq.com/interviews/johnson-armstrong-oop/"))),(0,n.kt)("h4",{id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb"},"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb"),(0,n.kt)("p",null,"\u6309\u7167Alan Kay\u7684\u5b9a\u4e49\uff0cOOP\u7684\u6838\u5fc3\u4e09\u8981\u7d20\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"message passing, "),(0,n.kt)("li",{parentName:"ul"},"that you have isolation between objects "),(0,n.kt)("li",{parentName:"ul"},"and have polymorphism.")),(0,n.kt)("p",null,"\u5927\u591a\u6570\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u90fd\u652f\u6301\u591a\u6001\uff0c\u4f46\u662f\u5173\u4e8e\u9694\u79bb\u7684\u610f\u4e49\uff0c\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u7684\u7406\u89e3\u662f\u4e0d\u592a\u5b8c\u6574\u7684\u3002\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u4eba\u4eec\u8bf4\u7684\u66f4\u591a\u7684\u662f\u5c01\u88c5\u800c\u4e0d\u662f\u9694\u79bb\uff0c\u8868\u9762\u4e0a\u770b\u5c01\u88c5\u5176\u5b9e\u5c31\u662f\u628a\u5404\u79cd\u7ec6\u8282\u9690\u85cf\u5728\u5bf9\u8c61\u5185\u90e8\uff0c\u4ece\u800c\u5b9e\u73b0\u4e86\u9694\u79bb\u3002\u4f46\u8fd9\u53ea\u662f\u6982\u5ff5\u4e0a\u7684\u9694\u79bb\uff0c\u800c\u4e0d\u662f\u771f\u6b63\u8fd0\u884c\u65f6\u7684\u5bf9\u8c61\u9694\u79bb\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u63d0\u51faisolation\u7684\u6982\u5ff5\uff0c\u5b83\u7684\u610f\u4e49\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7a0b\u5e8f\u7684\u5065\u58ee\u6027\uff0c\u6bd4\u5982\u57281000\u4e2a\u5bf9\u8c61\u8fd0\u884c\u7684\u7a0b\u5e8f\u4e2d\uff0c\u5982\u679c\u6709\u5176\u4e2d\u51e0\u4e2a\u5bf9\u8c61\u53d1\u751f\u4e86\u9519\u8bef\uff0c\u5982\u679c\u5b83\u7684\u903b\u8f91\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u5bf9\u8c61\uff0c\u5219\u6574\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u4e0d\u53d7\u5230\u5f71\u54cd\u3002\u6240\u4ee5\u5b83\u662f\u4ece\u7a0b\u5e8f\u6784\u9020\u65b9\u9762\u7684\u610f\u4e49\uff0c\u800c\u5c01\u88c5\u5e76\u4e0d\u80fd\u89e3\u51b3\u4e0a\u8ff0\u7684\u5065\u58ee\u6027\u95ee\u9898\uff0c\u5c01\u88c5\u7684\u6982\u5ff5\u66f4\u591a\u7684\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u800c\u8a00\u7684\uff0c\u8ba9\u7a0b\u5e8f\u5458\u628a\u4e00\u7ec4\u76f8\u5173\u7684\u65b9\u6cd5\u548c\u5c5e\u6027\u5c01\u88c5\u5728\u4e00\u4e2a\u5bf9\u8c61\u4e0a\u662f\u6613\u4e8e\u7406\u89e3\u548c\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u662f\u9762\u5411\u8f6f\u4ef6\u6784\u9020\u7684\u610f\u4e49\uff0c\u5373\u9762\u5411\u673a\u5668\uff0c\u800c\u4e0d\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7406\u89e3\u7684\u610f\u4e49\uff0c\u800c\u5f53\u4eca\u5927\u591a\u6570\u5173\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u6982\u5ff5\u66f4\u591a\u662f\u56f4\u7ed5\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u7684\u89d2\u5ea6\u3002")),(0,n.kt)("p",null,"\u90a3\u4e3a\u4ec0\u4e48\u5bf9\u8c61\u5c01\u88c5\u89e3\u51b3\u4e0d\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u800cErlang\u89e3\u51b3\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u6838\u5fc3\u539f\u56e0\u5728\u4e8eErlang\u4e3a\u4e86\u4fdd\u8bc1\u5065\u58ee\u6027\uff0c\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u72ec\u7acb\u8fd0\u884c\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9694\u79bb\uff0c\u4e00\u4e2a\u5bf9\u8c61\u7684Crash\u4e0d\u80fd\u5f71\u54cd\u5176\u4ed6\u5bf9\u8c61\uff0c\u6240\u4ee5Erlang\u628a\u65b9\u6cd5\u8c03\u7528\u8fdb\u884c\u4e86\u5207\u9664\u3002\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u51e0\u4e4e\u9664Erlang\u4e4b\u5916\u7684\u6240\u6709\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4eec\u4e3a\u4e86\u4fdd\u8bc1\u7a0b\u5e8f\u6267\u884c\u7684\u5e8f\u5217\uff0c\u90fd\u662f\u91c7\u7528\u76f4\u63a5\u8c03\u7528\u7684\u65b9\u6cd5\uff0c\u5373\u5f53A\u5bf9\u8c61\u8c03\u7528B\u5bf9\u8c61\u7684\u65b9\u6cd5\u65f6\uff0cA\u5bf9\u8c61\u7684\u6307\u4ee4\u4f1a\u88ab\u6302\u8d77\uff0c\u7a0b\u5e8f\u4f1a\u8fdb\u5165\u5230B\u5bf9\u8c61\u5185\u90e8\u76f8\u5e94\u7684\u65b9\u6cd5\u8fdb\u884c\u6267\u884c\uff0c\u5e76\u4e14\u7b49\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u8fd4\u56de\u503c\u7ed9A\u5bf9\u8c61\uff0c\u5e76\u5c06\u6267\u884c\u6307\u4ee4\u7684\u6307\u9488\u8fd4\u56de\u5230\u5bf9\u8c61A\u8c03\u7528\u65b9\u6cd5\u540e\u9762\u7684\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u73b0\u4ee3\u7f16\u8bd1\u67b6\u6784\u90fd\u662f\u6309\u7167\u4e0a\u8ff0\u7684\u6d41\u7a0b\u6784\u5efa\u7684\uff0c\u6bd4\u5982\u5728\u65b9\u6cd5\u8c03\u7528\u7684\u65f6\u5019\uff0c\u7a0b\u5e8f\u8df3\u8f6c\u5230B\u5bf9\u8c61\u76f8\u5e94\u7684\u4ee3\u7801\u533a\u57df\uff0c\u5e76\u4f7f\u7528\u5bc4\u5b58\u5668\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u7136\u540e\u65b9\u6cd5\u6267\u884c\u5b8c\u6bd5\u540e\u8df3\u8f6c\u56de\u5230\u539f\u6765\u7684\u8fd4\u56de\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u6837\u7684\u6d41\u7a0b\u5bf9\u4e8e\u7f16\u8bd1\u5668\u67b6\u6784\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u7a0b\u5e8f\u5458\u90fd\u662f\u76f8\u5bf9\u5bb9\u6613\u7406\u89e3\u7684\uff1a\u5f97\u5230\u8fd4\u56de\u503c\u540e\u63a5\u7740\u6267\u884c\u540e\u9762\u7684\u8bed\u53e5\uff0c\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u601d\u8def\u662f\u8fde\u8d2f\u7684\u3002\u5e76\u4e14\u5982\u524d\u9762\u5173\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u6216\u8005\u7edf\u7b79\u7f16\u7a0b\u76f8\u5173\u7684\u63cf\u8ff0\uff0c\u7a0b\u5e8f\u5458\u4e0d\u9700\u8981\u989d\u5916\u4fdd\u5b58\u8ba1\u7b97\u7ed3\u679c\uff0c\u76f4\u63a5\u4f7f\u7528\u5f53\u524d\u7684\u503c\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u7ba1\u7406\u662f\u6700\u7b80\u5355\u7684\u3002\u5426\u5219\u6211\u4eec\u9700\u8981\u4e00\u5957\u590d\u6742\u7684\u673a\u5236\u6765\u7ba1\u7406\u903b\u8f91\uff0c\u6bd4\u5982\u9700\u8981\u4fdd\u5b58\u4e00\u4e9b\u503c\u5728\u540e\u9762\u67d0\u4e2a\u65f6\u5019\u4f7f\u7528\uff0c\u800c\u5982\u679c\u4f7f\u7528\u7684\u65f6\u5019\u4ee3\u7801\u5728\u5176\u4ed6\u4f4d\u7f6e\uff0c\u8fd8\u6d89\u53ca\u600e\u4e48\u53d6\u5f97\u8fd9\u4e9b\u5b58\u50a8\u7684\u8ba1\u7b97\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u79cd\u8026\u5408\u7684\u903b\u8f91\u7834\u574f\u4e86\u9694\u79bb\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u88ab\u8c03\u7528\u65b9\u6cd5Crash\uff0c\u6bd4\u5982\u4f1a\u5f71\u54cd\u540e\u9762\u6574\u4e2a\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u8ba9\u6574\u4e2a\u7a0b\u5e8f\u5d29\u6e83\u3002\u8fd8\u4e0d\u8bf4\u8fd9\u79cd\u8026\u5408\u5bfc\u81f4\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u5355\u4e00\u6027\u95ee\u9898\uff0c\u5373\u6574\u4e2a\u7a0b\u5e8f\u9700\u8981\u88ab\u4e00\u6b21\u6027\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cA\u5bf9B\u7684\u5f15\u7528\uff0c\u5f62\u6210\u4e86\u8026\u5408\uff0cB\u4e0d\u80fd\u52a8\u6001\u66f4\u65b0\uff0c\u5982\u679cB\u6709\u4fee\u6539\uff0c\u4e5f\u9700\u8981\u6574\u4e2a\u7a0b\u5e8f\u91cd\u65b0\u7f16\u8bd1\uff0c\u5373\u4f7f\u52a8\u6001\u8bed\u8a00\uff0c\u4e5f\u4f1a\u5f62\u6210\u5f88\u6df1\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u8981\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u6211\u4eec\u5fc5\u987b\u5c06\u65b9\u6cd5\u8c03\u7528\u5207\u5f00\uff0c\u5373A\u65b9\u6cd5\u4e0d\u9700\u8981\u7b49\u5f85B\u65b9\u6cd5\u7684\u8fd4\u56de\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u53ef\u4ee5\u6709\u5f88\u591a\u4e0d\u540c\u7684\u5b9e\u73b0\u673a\u5236\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\u90fd\u4f1a\u7ed9\u7cfb\u7edf\u67b6\u6784\u548c\u5f00\u53d1\u8005\u5e26\u6765\u4e00\u4e9b\u4e0d\u4fbf\uff0c\u6216\u8005\u8bf4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"We need to isolate all the code that runs in order to achieve a goal in such a way that we can detect if any errors occurred when trying to achieve a goal. Also, when we are trying to simultaneously achieve multiple goals we do not want a sodware error occurring in one part of the system to propagate to another part of the system."),(0,n.kt)("p",{parentName:"blockquote"},"The essential problem that must be solved in making a fault-tolerant sodware system is therefore that of fault-isolation. Dicerent programmers will write dicerent modules, some modules will be correct, others will have errors. We do not want the errors in one module to adversely acect the behaviour of a module which does not have any errors."),(0,n.kt)("p",{parentName:"blockquote"},"To provide fault-isolation we use the traditional operating system no- tion of a process. Processes provide protection domains, so that an error in one process cannot acect the operation of other processes. Dicerent pro- grammers write dicerent applications which are run in dicerent processes; errors in one application should not have a negative influence on the other applications running in the system."),(0,n.kt)("p",{parentName:"blockquote"},"-- from Joe Armstrong\u2018s Phd thesis")),(0,n.kt)("p",null,"Erlang\u9009\u62e9\u4e86\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u4e4b\u95f4\u5b8c\u5168\u9694\u79bb\uff0c\u6240\u4ee5\u5929\u751f\u5c31\u89e3\u51b3\u4e86\u9694\u79bb\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e14\u8fd9\u79cd\u9694\u79bb\u6027\u662f\u975e\u5e38\u5f7b\u5e95\u7684\u3002\u5c3d\u7ba1\u5728\u4e00\u4e2a\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u521b\u5efa\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f46\u662f\u5b83\u5374\u4e0d\u80fd\u76f4\u63a5\u8c03\u7528\uff0c\u6240\u6709\u7684\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u5c31\u81ea\u7136\u53d8\u6210\u4e86\u6d88\u606f\u3002\u8fd9\u53c8\u5929\u751f\u7b26\u5408\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u6838\u5fc3\uff0c\u5373\u6d88\u606f\u4f20\u9012\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5982\u679c\u6ca1\u6709\u5b9e\u73b0\u65b9\u6cd5\u8c03\u7528\u7684\u5207\u5272\uff0c\u4ece\u7406\u8bba\u4e0a\u8bf4\u5c31\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u6d88\u606f\u4f20\u9012\u3002")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation.")),(0,n.kt)("p",null,"\u5728Smalltalk\u4e2d\uff0c\u5c3d\u7ba1\u8bed\u8a00\u5f00\u53d1\u8005\u8ba4\u4e3a\u65b9\u6cd5\u8c03\u7528\u662f\u6d88\u606f\u4f20\u9012\uff0c\u800c\u4e0d\u662f\u4f20\u7edf\u7f16\u7a0b\u610f\u4e49\u4e0a\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u79cd\u6d88\u606f\u4f20\u9012\u6ca1\u80fd\u591f\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0cSmalltalk\u7684\u6d88\u606f\u4f20\u9012\u66f4\u591a\u662f\u7ed3\u5408\u5ef6\u8fdf\u7ed1\u5b9a\u7684\u52a8\u6001\u7279\u6027\u4f7f\u5f97\u54cd\u5e94\u8005\u6709\u4e00\u5b9a\u7684\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u5bf9\u4e00\u4e2a\u201c\u65b9\u6cd5\u8c03\u7528\u201d\u7684\u6d88\u606f\u4ea7\u751f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u54cd\u5e94\uff0c\u8fd9\u5f97\u76ca\u4e8e\u5ef6\u8fdf\u7ed1\u5b9a\uff0c\u4f8b\u5982\u53ef\u4ee5\u901a\u8fc7\u8fd0\u884c\u65f6\u7684\u4e00\u6761\u60c5\u51b5\u6267\u884c\u4e0d\u540c\u7684\u54cd\u5e94\u3002\u4f46\u8fd9\u79cd\u7279\u6027\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u8f6f\u4ef6\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u6700\u91cd\u8981\u7684\u9694\u79bb\u95ee\u9898\u3002\u800c\u53ef\u6269\u5c55\u6027\u5e76\u4e0d\u662fSmalltalk\u552f\u4e00 \u7684\u4f18\u52bf\uff0c\u5f88\u591a\u52a8\u6001\u8bed\u8a00\u90fd\u80fd\u591f\u505a\u5230\u8fd9\u6837\u7684\u3002"),(0,n.kt)("p",null," \u5f53\u7136\u5bf9\u4e8e\u5065\u58ee\u6027\uff0cSmalltalk\u7684\u601d\u8def\u662f\uff1a1\uff09\u9996\u5148\u4fdd\u5b58\u5feb\u7167\uff1b2\uff09\u7136\u540e\u53ef\u4ee5\u52a8\u6001\u4fee\u6539\u4ee3\u7801\u8fdb\u884c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"Erlang\u7684\u6d88\u606f\u4f20\u9012\u6a21\u578b\u5e26\u6765\u4e86\u5bf9\u8c61\u4e4b\u95f4\u5173\u7cfb\u7684\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f46\u5b83\u4fdd\u8bc1\u4e86\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u7684\u771f\u6b63\u6838\u5fc3\u7279\u6027\u3002\u8fd9\u79cd\u4e0d\u4e00\u6837\u7684\u7279\u6027\u662f\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u90fd\u4e0d\u5177\u5907\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u8bf4\u662f\u552f\u4e00 \u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002"),(0,n.kt)("h4",{id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236"},"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Each independent activity should be performed in a completely isolated process. Such processes should share no data, and only commu- nicate by message passing. This is to limit the consequences of a sodware error."),(0,n.kt)("p",{parentName:"blockquote"},"As soon as two processes share any common resource, for example, memory or a pointer to memory, or a mutex etc the possibility exists that a sodware error in one of the processes will corrupt the shared resource. Since eliminating all such sodware errors for large sodware systems is an unsolved problem I think that the only realistic way to build large reliable systems is by partitioning the system into independent parallel processes, and by providing mechanisms for monitoring and restarting these pro- cesses.")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u4e2d\u7684\u5bf9\u8c61\u4e4b\u95f4\u5f80\u5f80\u90fd\u5305\u542b\u7740\u590d\u6742\u7684\u5173\u7cfb\uff0c\u5bf9\u8c61\u6570\u636e\u7684\u5f15\u7528\uff0c\u65b9\u6cd5\u8c03\u7528\uff0c\u6216\u8005\u7b2c\u4e09\u65b9\u5171\u4eab\u6570\u636e\uff0c\u8fd9\u4e9b\u90fd\u662f\u5e76\u53d1\u548c\u9694\u79bb\u9762\u5bf9\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u65b9\u9762Erlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u66f4\u597d\u7684\u65b9\u6cd5\uff0c\u53ea\u662f\u5f3a\u884c\u5c06\u5bf9\u8c61\u5b8c\u5168\u9694\u79bb\u5f00\uff0c\u6240\u4ee5\u5bf9\u8c61\u4e4b\u95f4\u7684\u6240\u6709\u901a\u4fe1\u5c31\u53d8\u6210\u6d88\u606f\uff0c\u8fd9\u4e9b\u6d88\u606f\u53ef\u80fd\u662f\u5bf9\u53e6\u4e00\u4e2a\u5bf9\u8c61\u67d0\u4e2a\u6570\u636e\u7684\u8bfb\u53d6\uff0c\u67d0\u4e2a\u65b9\u6cd5\u7684\u8c03\u7528\u7b49\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u5168\u90e8\u8f6c\u5316\u4e3a\u6d88\u606f\uff1b\u5e76\u4e14\u7531\u4e8e\u6d88\u606f\u7684\u5f02\u6b65\u6027\uff0c\u7a0b\u5e8f\u7684\u987a\u5e8f\u88ab\u6253\u4e71\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u975e\u76f4\u63a5\u7684\u65b9\u5f0f\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u867d\u7136\u672c\u8d28\u4e0a\u6240\u6709\u7684\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u8fd9\u4e48\u53bb\u8f6c\u5316\uff0c\u4f46\u662f\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u590d\u6742\u6027\uff0c\u800cErlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u5f88\u597d\u7684\u673a\u5236\u53bb\u89e3\u51b3\u8fd9\u79cd\u590d\u6742\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u8fd9\u5c31\u4f7f\u5f97Erlang\u57fa\u672c\u4e0a\u53ea\u9002\u5408\u4e8e\u90a3\u79cd\u9ad8\u5e76\u53d1\u4f46\u662f\u7ebf\u7a0b\u76f8\u5bf9\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0b\u4e00\u8282\u5c06\u770b\u5230\uff0cRealityIS\u901a\u8fc7\u5f15\u5165\u4e00\u79cd\u65b0\u7684\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"},"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u80fd\u4fee\u6539\u81ea\u8eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u4fee\u6539\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\uff0c\u53ea\u80fd\u7ed9\u5176\u4ed6\u5bf9\u8c61\u8f93\u5165\u53c2\u6570\uff0c\u7531\u5176\u4ed6\u5bf9\u8c61\u81ea\u884c\u5904\u7406\uff0c\u8fd9\u6837\u7684\u53c2\u6570\u8f93\u5165\u5b9e\u9645\u4e0a\u5c31\u662f\u6d88\u606f"),(0,n.kt)("h4",{id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"},"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"),(0,n.kt)("p",null,"\u5e76\u4e0d\u9700\u8981\u6240\u6709\u7ebf\u7a0b\u771f\u6b63\u9694\u79bb\uff0c\u771f\u6b63\u9694\u79bb\u5e26\u6765\u5f88\u591a\u7f16\u7a0b\u4e0a\u7684\u4e0d\u4fbf\u3002"),(0,n.kt)("p",null,"\u539f\u59cb\u9694\u79bb\u7684\u5b9a\u4e49\u662f\u5e0c\u671b\u6bcf\u4e2a\u4ee3\u7801\u90fd\u4e0d\u5f71\u54cd\u5176\u4ed6\u4ee3\u7801\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u53ea\u662f\u4e00\u4e2a\u7c92\u5ea6\u7684\u95ee\u9898\uff0c\u6bd4\u5982\u4e25\u683c\u7684\u4e00\u70b9\u7684\u662f\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u90fd\u9694\u79bb\uff0c\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u5f7c\u6b64\u90fd\u4e0d\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u7a0d\u5fae\u653e\u677e\u4e00\u4e0b\u8fd9\u79cd\u9694\u79bb\uff0c\u4f60\u5f71\u54cd\u53ef\u4ee5\u5f71\u54cd\u4e00\u5b9a\u7684\u8303\u56f4\uff0c\u5355\u53ea\u53ea\u8981\u6700\u7ec8\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8bc6\u522b\u8fd9\u79cd\u5f71\u54cd\uff0c\u5e76\u5c06\u6240\u6709\u53d7\u5f71\u54cd\u7684\u90e8\u5206\u5168\u90e8\u53bb\u9664\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662fRealityIS\u4e2d\u7684\u673a\u5236\uff0c\u5b83\u901a\u8fc7\u5b9a\u4e49\u5173\u952e\u5b58\u6863\u5c5e\u6027\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u5411Smalltalk\u90a3\u6837\u5c1d\u8bd5\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b58\u6863\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u53ef\u4ee5\u4ece\u4efb\u610f\u4f4d\u7f6e\u6062\u590d\u3002\u76f8\u53cd\uff0cRealityIS\u53ea\u80fd\u4ece\u4e00\u4e9b\u5173\u952e\u8282\u70b9\u8fdb\u884c\u6062\u590d\uff0c\u5e94\u7528\u7a0b\u5e8f\u6216\u8005\u7ec4\u4ef6\u9700\u8981\u5bf9\u5bf9\u8c61\u7684\u6570\u636e\u5b57\u6bb5\u8fdb\u884c\u6062\u590d\uff0c\u8fd9\u4e9b\u5b57\u6bb5\u6839\u636e\u4e0a\u4e00\u4e2a\u672a\u53d7\u5f71\u54cd\u7684\u5173\u952e\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u63a8\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4\u7684\u9694\u79bb\u6027\u6982\u5ff5\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4fdd\u6301\u7a0b\u5e8f\u7684\u63a7\u5236\u80fd\u529b\uff0c\u4f7f\u7a0b\u5e8f\u5458\u53ef\u4ee5\u50cf\u4f20\u7edf\u7a0b\u5e8f\u90a3\u6837\u8fdb\u884c\u64cd\u4f5c\uff0c\u540c\u65f6\u53c8\u80fd\u4fdd\u8bc1\u9694\u79bb\u6027\u3002\u5bf9\u8c61\u4e4b\u95f4\u4ecd\u7136\u4ee5\u6d88\u606f\u8fdb\u884c\u4f20\u9012\uff0c\u4f46\u662f\u8fd9\u79cd\u6d88\u606f\u66f4\u7c7b\u4f3c\u4e8e\u65b9\u6cd5\u8c03\u7528\uff0c\u8c03\u7528\u7684\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u6bcf\u4e2a\u8c03\u7528\u90fd\u9700\u8981\u5c01\u88c5\u4e3a\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u9694\u79bb\u5e26\u6765\u5f88\u591a\u597d\u5904\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u5730\u5e76\u53d1\u5904\u7406\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u4e00\u4e2a\u4e3b\u8981\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5065\u58ee\u6027\uff0c\u66f4\u597d\u5bb9\u9519\uff0c\u4e00\u90e8\u5206\u7684error\u4e0d\u4f1a\u5f71\u54cd\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u9996\u8981\u548c\u6838\u5fc3\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u7684\u903b\u8f91\u7ba1\u7406\u548c\u7ec4\u7ec7"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5b89\u5168\u6027\uff0c\u5c24\u5176\u5728\u591a\u5e94\u7528\u73af\u5883\uff0c\u8fd9\u5bf9RealityIS\u66f4\u91cd\u8981\uff0c\u8fd9\u90e8\u5206\u5728\u7b2c2.16\u8282\u4e13\u95e8\u8ba8\u8bba\u3002")),(0,n.kt)("h4",{id:"21542-\u6d88\u606f\u4f20\u9012"},"2.15.4.2 \u6d88\u606f\u4f20\u9012"),(0,n.kt)("p",null,"\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"},"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In our system concurrency plays a central role, so much so that I have coined the term ",(0,n.kt)("em",{parentName:"p"},"Concurrency Oriented Programming")," to distinguish this style of programming from other programming styles."),(0,n.kt)("p",{parentName:"blockquote"},"In Concurrency Oriented Programming the concurrent structure of the program should follow the concurrent structure of the application. It is particularly suited to programming applications which model or interact with the real world."),(0,n.kt)("p",{parentName:"blockquote"},"The word concurrency refers to sets of events which happen simulta- neously. The real world is concurrent, and consists of a large number of events many of which happen simultaneously. At an atomic level our bodies are made up of atoms, and molecules, in simultaneous motion. At a macroscopic level the universe is populated with galaxies of stars in simultaneous motion."),(0,n.kt)("p",{parentName:"blockquote"},"When we perform a simple action, like driving a car along a freeway, we are aware of the fact that there may be several hundreds of cars within our immediate environment, yet we are able to perform the complex task of driving a car, and avoiding all these potential hazards without even thinking about it."),(0,n.kt)("p",{parentName:"blockquote"},"In the real world sequential activities are a rarity. As we walk down the street we would be very surprised to find only one thing happening, we expect to encounter many simultaneous events."),(0,n.kt)("p",{parentName:"blockquote"},"If we did not have the ability to analyze and predict the outcome of many simultaneous events we would live in great danger, and tasks like driving a car would be impossible. The fact that we can do things which require processing massive amounts of parallel information suggests that we are equipped with perceptual mechanisms which allow us to intuitively understand concurrency without consciously thinking about it.")),(0,n.kt)("p",null,"\u4e16\u754c\u5929\u7136\u662f\u5e76\u53d1\u7684\uff0c\u6211\u4eec\u7684\u5927\u8111\u7684\u601d\u8003\u65b9\u5f0f\u4e5f\u5929\u751f\u9002\u914d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5e76\u53d1\u6a21\u578b\uff0c\u7528\u8fd9\u79cd\u5bf9\u771f\u5b9e\u4e16\u754c\u7684\u903b\u8f91\u6d41\u7a0b\u6765\u5f00\u53d1\u7a0b\u5e8f\u662f\u6700\u597d\u7684\uff0c\u7136\u800c\u6211\u4eec\u51e0\u4e4e\u4ece\u6765\u6ca1\u6709\u8fd9\u79cd\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u6216\u8005\u7f16\u7a0b\u6a21\u578b\u90fd\u662f\u987a\u5e8f\u7f16\u7a0b\u6a21\u578b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"When it comes to computer programming things suddenly become inverted. Programming a sequential chain of activities is viewed the norm , and in some sense is thought of as being easy, whereas programming collections of concurrent activities is avoided as much as possible, and is generally perceived as being diecult."),(0,n.kt)("p",{parentName:"blockquote"},"I believe that this is due to the poor support which is provided for con- currency in virtually all conventional programming languages. The vast majority of programming languages are essentially sequential; any concur- rency in the language is provided by the underlying operating system, and not by the programming language."),(0,n.kt)("p",{parentName:"blockquote"},"In this thesis I present a view of the world where concurrency is pro- vided by the programming language, and not by the underlying operating system. Languages which have good support for concurrency I call Concur ",(0,n.kt)("em",{parentName:"p"},"rency Oriented Languages,")," or COPLs for short.")),(0,n.kt)("p",null,"\u54cd\u5e94\u5f0f"),(0,n.kt)("h4",{id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5"},"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5"),(0,n.kt)("h4",{id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7"},"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7"),(0,n.kt)("h4",{id:"21546-\u591a\u6001"},"2.15.4.6 \u591a\u6001"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Concurrency Oriented Programming also provides the two major ad- vantages commonly associated with object-oriented programming. These are polymorphism and the use of defined protocols having the same mes- sage passing interface between instances of dicerent process types."),(0,n.kt)("p",{parentName:"blockquote"},"When we partition a problem into a number of concurrent processes we can arrange that all the processes respond to the same messages (ie they are polymorphic,) and that they all follow the same message passing interface.")),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4ea4\u4e92\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u53ef\u4ee5\u54cd\u5e94\u4e0d\u540c\u7684\u6d88\u606f\uff0c\u771f\u5b9e\u4e16\u754c\u5929\u751f\u662f\u591a\u6001\u7684\uff0c\u7136\u800c\u8fd9\u4f1a\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a7\u5236\u53d8\u5f97\u56f0\u96be\uff0c\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u7684\u591a\u6001\u6027\u5219\u76f8\u53cd\uff0c\u5b83\u5e0c\u671b\u5c3d\u53ef\u80fd\u5c11\u7684\u591a\u6001\u6027\uff0c\u56e0\u4e3a\u66f4\u5e7f\u6cdb\u7684\u591a\u6001\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u53d8\u5f97\u590d\u6742\u96be\u4ee5\u7406\u89e3\uff0c\u5e76\u4e14\u52a8\u6001\u7684\u8ba1\u7b97\u5730\u5740\u5c06\u4f1a\u5bfc\u81f4\u66f4\u5927\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"21547-\u5bf9\u8c61\u5173\u7cfb"},"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",{parentName:"blockquote"},"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",{parentName:"blockquote"},"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u7ebf\u7a0b\u4e4b\u95f4\u7684\u5b89\u5168\uff0cErlang\u4f7f\u7528Name\u6765\u8868\u5f81\u6743\u9650\uff0c\u4f60\u62e5\u6709\u67d0\u4e2a\u7ebf\u7a0b\u7684name\uff0c\u4f60\u5c31\u6709\u6743\u9650\u4e0e\u4e4b\u8fdb\u884c\u6d88\u606f\u901a\u4fe1\u3002\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\uff0c\u4f60\u51e0\u4e4e\u603b\u662f\u4e0e\u4f60\u8ba4\u8bc6\u7684\u4eba\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u51e0\u4e4e\u4e0d\u4f1a\u8ddf\u964c\u751f\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\uff0c\u6216\u8005\u4e00\u4e2a\u66f4\u5f00\u653e\u7684\u7a0b\u5e8f\u4e16\u754c\uff0c\u9664\u4e86\u8fd9\u79cd\u57fa\u4e8ename\u7684\u4ea4\u4e92\u5173\u7cfb\uff0c\u8fd8\u6709\u5927\u91cf\u7684\u903b\u4e0d\u662f\u57fa\u4e8ename\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u64ad\u7684\u6d88\u606f\u80af\u5b9a\u4e0d\u4f1a\u53bb\u6309\u4e00\u4e2a\u4e00\u4e2a\u7684name\u8fdb\u884c\u4f20\u9012\uff0c\u800c\u4e14\u6309\u7167name\u7684\u8bbe\u8ba1\u521d\u8877\uff0c\u5b83\u4e5f\u4e0d\u4f1a\u8f7b\u6613\u8ba9\u4e00\u4e2a\u8fdb\u7a0b\u638c\u63e1\u6240\u8fdb\u7a0b\u7684name\uff0c\u5426\u5219name\u7684\u8bbe\u8ba1\u5c31\u4f1a\u5931\u53bb\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u6743\u9650\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e09\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7cfb\u7edf\u6743\u9650\uff0c\u53ef\u4ee5\u5411\u6240\u6709\u4eba\u53d1\u9001\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u6743\u9650\uff0c\u57fa\u4e8e\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u68c0\u7d22\uff0c\u4f46\u662f\u9644\u5e26\u597d\u53cb\u6743\u9650\u7b5b\u9009"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u7528\u5185\u6743\u9650\uff0c\u7406\u8bba\u4e0a\u4e00\u4e2a\u5e94\u7528\u5185\u90e8\u7684\u7ec4\u4ef6\u5728\u5e94\u7528\u5185\u90e8\u62e5\u6709\u6240\u6709\u6743\u9650\uff0c\u5c31\u50cf\u4e00\u4e2a\u5e94\u7528\u5e94\u7528\uff0c\u9664\u975e\u7528\u6237\u7981\u6b62\u67d0\u4e2a\u6570\u636e\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u6bcf\u4e2aobject\u9700\u8981\u643a\u5e26\u5f88\u591a\u4fe1\u606f\uff0c\u4f8b\u5982appid\uff0cusderid\u7b49\u5f85\u3002"),(0,n.kt)("h4",{id:"21548-\u5bb9\u9519\u673a\u5236"},"2.15.4.8 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("h2",{id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"},"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The inability to isolate sodware components from each other is the main reason why many popular programming languages cannot be used for making robust system sodware."),(0,n.kt)("p",{parentName:"blockquote"},"It is essential for security to be able to isolate mistrusting pro- grams from one another, and to protect the host platform from such programs. Isolation is diecult in object-oriented systems because objects can easily become aliased.4\u2014Bryce ","[21]"),(0,n.kt)("p",{parentName:"blockquote"},"Bryce goes on to say that object aliasing is diecult if not impossible to detect in practice, and recommends the use of protection domains (akin to OS processes) to solve this problem."),(0,n.kt)("p",{parentName:"blockquote"},"In a paper on Java Czajkowski, and Dayn`es, from Sun Microsystems, write:"),(0,n.kt)("p",{parentName:"blockquote"},"The only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and to execute each JVM in a separate OS process. This introduces various ineeciencies in resource utilization, which downgrades perfor- mance, scalability, and application startup time. The benefits the language can ocer are thus reduced mainly to portability and improved programmer productivity. Granted these are important, but the full potential of language-provided safety is not realized. Instead there exists a curious distinction between \u201clanguage safety,\u201d and \u201creal safety\u201d. \u2014 ","[28]"),(0,n.kt)("p",{parentName:"blockquote"},"In this paper they introduce the MVM (an extension to the JVM) where their goal is:"),(0,n.kt)("p",{parentName:"blockquote"},"... to turn the JVM into an execution environment akin to an OS. In particular, the abstraction of a process, ocered by modern OSes, is the role model in terms of features; isolation from other computations, resources accountability and control, and ease of termination and resource reclamation."),(0,n.kt)("p",{parentName:"blockquote"},"To achieve this they conclude that:"),(0,n.kt)("p",{parentName:"blockquote"},"... tasks cannot directly share objects, and that the only way for tasks to communicate is to use standard, copying commu- nication mechanisms, ..."),(0,n.kt)("p",{parentName:"blockquote"},"These conclusions are not new. Very similar conclusions were arrived at some two decades earlier by Jim Gray who described the architecture of the Tandem Computer in his highly readable paper Why do computers stop and what can be done about it. He says:"),(0,n.kt)("p",{parentName:"blockquote"},"As with hardware, the key to sodware fault-tolerance is to hier- archically decompose large systems into modules, each mod- ule being a unit of service and a unit of failure. A failure of a module does not propagate beyond the module."),(0,n.kt)("p",{parentName:"blockquote"},"..."),(0,n.kt)("p",{parentName:"blockquote"},"The process achieves fault containment by sharing no state with other processes; its only contact with other processes is via messages carried by a kernel message system. \u2014 ","[38]"),(0,n.kt)("p",{parentName:"blockquote"},"Language which support this style of programming (parallel processes, no shared data, pure message passing) are what Andrews and Schneider ","[4]"," refer to as a \u201cMessage oriented languages.\u201d The language with the delightful name PLITS5 (1978) ","[35]"," is probably the first example of such a programming language:"),(0,n.kt)("p",{parentName:"blockquote"},"The fundamental design decision in the implementation of RIG6 was to allow a strict message discipline with no shared data structures. All communication between user and server messages is through messages which are routed by the Aleph kernel. This message discipline has proved to be very flexible and reliable. \u2014 ","[35]")),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5728\u7ec4\u4ef6\u4e4b\u95f4\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4f20\u9012\u57fa\u672c\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e76\u4e14\u4e0d\u5305\u542b\u4efb\u4f55\u6307\u9488\u548c\u5f15\u7528\u6765\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5b89\u5168\u6027\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h3",{id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027"},"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21611-java-class-loader--security"},"2.16.1.1 java class loader & security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Today's computer users cannot realistically trust that the programs they run are bug or virus free. It is cruicial then that the host be able to run a non-trusted program in isolation from its services. This means that client programs not be able to communicate with services, or that they can only do so under the control of a security policy that decides whether each method call from a program to the servers is permitted."),(0,n.kt)("p",{parentName:"blockquote"},"In comparison, the ability to isolate programs in this fashion is awkward in Java using loader spaces. In Java, each program is allocated its own class loader, which is responsible for loading versions of the classes for the program. An object instantiated from a class loaded by one loader is considered as possesing a distinct type to objects of the same class loaded by another loader. This means that the assignment of an object reference in one domain to a variable in another domain consititues a type error. This model is inconvenient for client-sever comunication, since parameter objects must be serialized (transferred by value).")),(0,n.kt)("p",null,"Java\u7684class loader\u4e0d\u5b89\u5168\uff0c\u6240\u6709\u5177\u6709\u5916\u90e8\u7b26\u53f7\u7684\u865a\u62df\u673a\u52a0\u8f7d\u65b9\u5f0f\uff0c\u5728multitasking \u60c5\u51b5\u4e0b\u90fd\u662f\u8fd9\u6837\uff1f"),(0,n.kt)("p",null,"\u5728OOP\u4e2d\uff0c\u7c7b\u4f3c\u4e4b\u95f4\u5305\u542b\u7ee7\u627f\u5173\u7cfb\uff0c\u4e0d\u540c\u7684\u7c7b\u578b\u4e4b\u95f4\u4e5f\u53ef\u80fd\u5305\u542b\u5f15\u7528\u5173\u7cfb\uff0c\u8fd9\u4f7f\u5f97object\u5f80\u5f80\u4e0d\u662f\u72ec\u7acb\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u5bf9\u8c61\u7684\u7c7b\u578b\u4fe1\u606f\u5305\u542b\u5728\u7c7b\u4f3cClass\u8fd9\u6837\u7684\u5bf9\u8c61\u4e2d\uff0c\u800c\u8fd9\u6837\u7684\u5bf9\u8c61\u88ab\u6240\u6709\u8be5\u7c7b\u578b\u7684\u5bf9\u8c61\u5f15\u7528\uff0c\u6240\u4ee5\u5c31\u5bfc\u81f4\u5bf9\u8c61\u4e0d\u80fd\u5177\u6709\u72ec\u7acb\u3001\u5b8c\u5168\u9694\u79bb\u7684domain space\uff0c\u56e0\u4e3a\u90a3\u6837\u5c06\u5931\u53bb\u7c7b\u578b\u4fe1\u606f\uff0c\u9664\u975e\u5bf9\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u590d\u5236\uff0c\u4f46\u8fd9\u4f1a\u5360\u636e\u5927\u91cf\u7684\u5b58\u50a8\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u540c\u4e00\u4e2adomain space\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b8c\u5168\u4e0d\u5b58\u5728\u76f8\u4e92\u5f15\u7528\uff0c\u90a3\u6837\u8bed\u8a00\u662f\u53ef\u4ee5\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u4f46\u662f\u4e00\u65e6\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u83b7\u5f97\u5f15\u7528\u7684\u5bf9\u8c61\u5c31\u53ef\u4ee5\u8c03\u7528\u6240\u6709\u8be5\u5bf9\u8c61\u7684\u516c\u5171\u65b9\u6cd5\u3002\u867d\u7136\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u516c\u5171\u5c5e\u6027\u6765\u63a7\u5236\u8bbf\u95ee\u6743\u9650\uff0c\u4f46\u8fd9\u5f80\u5f80\u53ea\u662f\u9488\u5bf9\u7c7b\u578b\u672c\u8eab\u7684\u7279\u6027\uff0c\u800c\u4e0d\u80fd\u63a7\u5236\u5e94\u7528\u7a0b\u5e8f\u903b\u8f91\u4e0d\u5c0f\u5fc3\u5c06\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u7ed9\u975e\u6cd5\u7684\u5bf9\u8c61\u3002\u4f8b\u5982\u5728\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\uff0c\u6709\u65f6\u5019\u53ea\u662f\u4e3a\u4e86\u83b7\u53d6\u6570\u636e\uff0c\u800c\u7b80\u4fbf\u5730\u628a\u4e00\u4e2a\u6574\u4e2a\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u8fc7\u53bb\uff0c\u8fd9\u5c31\u5e26\u6765\u4e86\u98ce\u9669\uff0c\u56e0\u4e3a\u83b7\u5f97\u8fd9\u4e2a\u5f15\u7528\u7684\u7a0b\u5e8f\u4e0d\u4f46\u53ef\u4ee5\u83b7\u53d6\u53d8\u91cf\u7684\u503c\uff0c\u5b83\u8fd8\u53ef\u4ee5\u975e\u6cd5\u65b9\u6cd5\u6240\u6709\u7684\u516c\u5171\u65b9\u6cd5\u3002\u5f53\u6574\u4e2a\u7a0b\u5e8f\u90fd\u5c5e\u4e8e\u4e00\u4e2a\u5f00\u53d1\u5546\u65f6\uff0c\u8fd9\u6ca1\u95ee\u9898\uff0c\u4f46\u662f\u5728multitasking\u7684\u73af\u5883\u4e0b\uff0c\u5c31\u5b58\u5728\u5b89\u5168\u95ee\u9898\u3002\u4e0d\u540cDomain\u7684object\u53ef\u4ee5\u901a\u8fc7\u5168\u5c40\u53d8\u91cf\u7b49\u65b9\u5f0f\u83b7\u53d6\u5230\u4e00\u4e9b\u4e0d\u5c5e\u4e8e \u81ea\u5df1Domain\u7684\u5bf9\u8c61\uff0c\u4f8b\u5982\u901a\u8fc7\u4e00\u4e2a\u516c\u5171\u7684\u4e8b\u4ef6\u7ba1\u7406\u5668\uff0c\u4efb\u4f55task\u53ef\u80fd\u90fd\u53ef\u4ee5\u83b7\u5f97\u6574\u4e2a\u4e8b\u4ef6\u961f\u5217\u3002"),(0,n.kt)("p",null,"\u4fdd\u8bc1\u6240\u6709\u7684object\u4e4b\u95f4\u7684\u901a\u8fc7\u90fd\u901a\u8fc7\u4f20\u9012\u503c\uff0c\u6216\u8005\u590d\u5236\u5bf9\u8c61\u7684\u65b9\u5f0f\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\uff0c\u4f46\u662f\u8fd9\u6837\u53c8\u4f1a\u7ed9\u7f16\u7a0b\u5e26\u6765\u4e0d\u4fbf\u3002"),(0,n.kt)("h4",{id:"21612-java-applets"},"2.16.1.2 Java applets"),(0,n.kt)("p",null,"Java\u6709\u4e00\u4e9b\u9ad8\u7ea7\u7684security model\uff0c\u5176\u4e2d\u5305\u62ecprotection domian\uff0c\u5176\u8bbe\u8ba1\u76ee\u6807\u662f\u5bf9applets\u8fdb\u884c\u9694\u79bb\u3002class loader\u53ea\u662fjava\u7684\u57fa\u672c\u9694\u79bb\u673a\u5236\u3002Java\u4e2d\u7684\u6bcf\u4e2aapplet\u62e5\u6709\u81ea\u5df1\u72ec\u7acb\u7684class loader\uff0c\u6bcf\u4e2a\u72ec\u7acb\u7684class loader\u4f1a\u5728\u81ea\u5df1\u7684protection domain\u52a0\u8f7d\u72ec\u7acb\u548c\u79c1\u6709\u7248\u672c\u7684class\u3002Java\u4f1a\u4fdd\u8bc1\u540c\u4e00\u4e2aclass\u5728\u4e0d\u540c\u7684protection domain\u4e2d\u6709\u4e0d\u540c\u7684\u7684\u7c7b\u578b\uff08distinct type\uff09\uff0c\u56e0\u6b64\u7c7b\u578b\u662f\u9694\u79bb\u673a\u5236\u7684\u57fa\u7840\uff0c\u56e0\u4e3a\u5c06\u4e00\u4e2aloader space\u7684\u5bf9\u8c61\u5f15\u7528\u8d4b\u503c\u7ed9\u53e6\u4e00\u4e2aloader space\u4e2d\u76f8\u540c\u540d\u79f0\u7684class\u4f1a\u5bfc\u81f4\u7c7b\u578b\u9519\u8bef\u3002\u8fd9\u662f\u4e00\u79cd\u52a8\u6001\u7c7b\u578b\uff08dynamic typing\uff09\u68c0\u67e5\u7cfb\u7edf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u65b0\u7684\u7c7b\u578b\u673a\u5236\u7531\u8fd0\u884c\u65f6\u63d0\u4f9b\u800c\u4e0d\u662f\u7f16\u8bd1\u65f6\u53ef\u4ee5\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u7684\u95ee\u9898\u662f\uff0c\u6240\u6709\u7cfb\u7edf\u7ea7\u522b\u7684\u7c7b\u578b\uff08\u4f8b\u5982java.lang\u7b49\u7b49\uff09\u662f\u5171\u4eab\u7684\uff0c\u56e0\u6b64\u8fd8\u662f\u4f1a\u5bfc\u81f4aliasing\u3002\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u7ee7\u627f\u81eaPasswordID\u7684Password\u7c7b\uff0c\u4e24\u4e2aclass loader\u5206\u522b\u521b\u5efa\u81ea\u5df1space\u52a0\u8f7dPassword\u7c7b\uff0c\u4f46\u662f\u6ca1\u6709\u52a0\u8f7dPasswordID\u7c7b\uff0c\u8fd9\u4e2a\u65f6\u5019\u4f7f\u7528\u5230\u7684PasswordID\u7c7b\u4f1a\u7531system loader\u8fdb\u884c\u52a0\u8f7d\uff0c\u6b64\u65f6\u5982\u679c\u4e24\u4e2aspace\u7684\u5f15\u7528\u901a\u8fc7PasswordID\u7c7b\u578b\u8fdb\u884c\u8d4b\u503c\u4f20\u9012\uff0c\u5219\u5c31\u4f1a\u9020\u6210aliasing\u3002"),(0,n.kt)("h4",{id:"21613-mvm"},"2.16.1.3 MVM"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Improved scalability results from an aggressive application of the main design principle of MVM: share as much of the runtime as possible among applications and replicate everything else.")),(0,n.kt)("p",null,"Java class loader\u53ea\u80fd\u505a\u5230\u7c7b\u578b\u5b89\u5168\uff0c\u6240\u4ee5\u5e94\u7528\u9700\u8981\u4fdd\u8bc1Java\u6587\u4ef6\u7684\u6765\u6e90\u662f\u53ef\u9760\u7684\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The existing application isolation mechanisms, such as class loaders ","[16]",", do not guarantee that two arbitrary applications executing in the same instance of the JVM will not interfere with one another. Such interference can occur in many places. For instance, mutable parts of classes can leak object references and can allow one application to prevent the others from invoking certain methods. The internalized strings introduce shared, easy to capture monitors. Sharing event and finalization queues and their associated handling threads can block or hinder the execution of some application. Monopolizing of computational resources, such as heap memory, by one application can starve the others.")),(0,n.kt)("p",null,"\u56e0\u6b64\u552f\u4e00\u7684\u5b89\u5168\u65b9\u5f0f\u662f\u4fdd\u8bc1\u6bcf\u4e2aapp\u53ea\u8fd0\u884c\u4e8e\u4e00\u4e2a\u72ec\u7acb\u7684JVM\u73af\u5883\uff0c\u4f46\u8fd9\u4f1a\u5bfc\u81f4\u8d44\u6e90\u7684\u5229\u7528\u7387\u4f4e\uff0c\u6027\u80fd\u3001\u53ef\u4f38\u7f29\u6027\u548c\u542f\u52a8\u65f6\u95f4\u7684\u95ee\u9898\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Their existence perpetuates the current situation, where the only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and execute each JVM in a separate OS process.")),(0,n.kt)("p",null,"\u9488\u5bf9\u591a\u5e94\u7528\u7684\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u7ea7\u522b\u7684\u5b89\u5168\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"language safety"),(0,n.kt)("li",{parentName:"ul"},"real safety")),(0,n.kt)("p",null,"\u524d\u8005\u666e\u904d\u7f3a\u4e4f\uff0c\u5df2\u6709\u7684\u65b9\u6848\u90fd\u6216\u591a\u6216\u5c11\u9650\u5236\u8bed\u8a00\u6216\u8005\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u540e\u8005\u5219\u5927\u591a\u6570\u4f9d\u8d56\u4e8ehardware-assisted\uff0c OS-style\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Three goals dictate our design choices: (i) no form of interference among executing applications should be allowed, (ii) an illusion of having the JVM (with all core APIs and standard mechanisms) to itself should be provided for each task, and (iii) MVM should perform and scale well. The motivation is to make the system attractive from the practical point of view."),(0,n.kt)("p",{parentName:"blockquote"},"The key design principle of MVM is: examine each component of the JVM and determine whether sharing it among tasks can lead to any interference among them. In some cases this approach yields a clear verdict that the given component can be shared without jeopardizing the safety of the tasks. Other components are either replicated on a per-task basis or made ",(0,n.kt)("em",{parentName:"p"},"task re-entrant"),", that is, usable by many tasks without causing any inter-task interference. This builds on the ideas described in ","[6]",". The technique presented in that work \u2013 replicating static fields and class monitors \u2013 has been generalized in MVM to classify all components of the JVM as \u2018shareable\u2019 or \u2018non-shareable\u2019.")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"A simple way of explaining the model is to first think of a straightforward approach to multitasking in the JavaTM application environment: all applications share all classes. The essential observation at this point is that a safe language already has some built-in support for isolating applications: data references cannot be forged, unsafe casting is not allowed, and jumping to an arbitrary code location is impossible. Consequently, the only data exchange mechanism (barring explicit inter-application communication) is through static fields. This can only occur either by explicit manipulation of static fields or by invoking methods which access these fields. It can lead to unexpected and incorrect behavior depending on how applications use the same class with static fields."),(0,n.kt)("p",{parentName:"blockquote"},"The above observation suggests an approach for achieving isolation among applications: to maintain a separate copy of the static fields for each class, one copy per application that uses the given class. However, only one copy of the ",(0,n.kt)("em",{parentName:"p"},"code")," of any class should exist in the system, regardless of how many applications use it, since methods cannot transfer data from one application to another once the static fields communication channel is removed. (Dealing with covert communication channels is beyond the scope of this paper). Our proposal effectively gives each application the illusion that it has exclusive access to static fields while in reality each application has a separate copy of these fields.")),(0,n.kt)("h3",{id:"2162-program-security-mechanisms"},"2.16.2 Program Security Mechanisms"),(0,n.kt)("p",null,"\u6709\u8bb8\u591a\u5de5\u4f5c\u7528\u4e8e\u5bf9\u7a0b\u5e8f\u96c6\u6210access control\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e4b\u95f4\u6dfb\u52a0\u4e00\u4e2asecurity policy checker\uff0c\u4f8b\u5982Java\u7684\u7cfb\u7edf\u7c7b\u5305\u542b\u4e00\u4e2a\u5bf9SecurityManager\u5bf9\u8c61\u7684\u8c03\u7528\u7528\u4e8e\u68c0\u67e5\u7ebf\u7a0b\u4e4b\u95f4\u7684\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u4e9b\u5b89\u5168\u7b56\u7565\u5219\u7531\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u652f\u6301\uff0c\u7f16\u7a0b\u8bed\u8a00\u5e26\u6709 \u4e00\u5b9a\u7684\u8bbf\u95ee\u6743\u9650\u7684notion\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e9b\u5bf9\u8c61\u5bf9\u53e6\u4e00\u4e9b\u5bf9\u8c61\u7684\u8bbf\u95ee\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u4eca\u66f4\u591a\u7684\u8bed\u8a00\u8bbe\u8ba1\u8005\u5219\u66f4\u591a\u503e\u5411\u4e8e\u5c06\u5b89\u5168\u4e0e\u7c7b\u578b\u7b49\u4ef7\uff0c\u8fd9\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u9759\u6001\u6216\u8005\u52a8\u6001\u68c0\u67e5\u6280\u672f")),(0,n.kt)("h4",{id:"21621-cfi"},"2.16.2.1 CFI"),(0,n.kt)("p",null,"Current software attacks often build on exploits that subvert ma- chine-code execution. The enforcement of a basic safety property, Control-Flow Integrity (CFI), can prevent such attacks from arbi- trarily controlling program behavior. CFI enforcement is simple, and its guarantees can be established formally, even with respect to powerful adversaries. Moreover, CFI enforcement is practical: it is compatible with existing software and can be done efficiently using software rewriting in commodity systems. Finally, CFI pro- vides a useful foundation for enforcing further security policies, as we demonstrate with efficient software implementations of a pro- tected shadow call stack and of access control for memory regions."),(0,n.kt)("h4",{id:"21622-sfi"},"2.16.2.2 SFI"),(0,n.kt)("p",null,"\u5185\u5b58\u5b89\u5168\u662f\u6700\u5927\u6613\u53d7\u4e25\u91cd\u653b\u51fb\u7684\u6765\u6e90\uff0c\u5927\u7ea670%\uff0c\u4e00\u4e9b\u6000\u6709\u6076\u610f\u7684\u653b\u51fb\u8005\u4f8b\u5982\u4e00\u4e9b\u5185\u5b58\u5b89\u5168\u7684bug\u6765\u653b\u51fb\u8f6f\u4ef6\uff0cSoftware sandboxing\u6216\u8005software-based fault isolation (SFI) \u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u8fd9\u4e9b\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cdbug\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7684\u4e00\u4e9b\u4f8b\u5b50\uff0c\u5982OS kernels\uff0cdatabases, browsers , language runtime, and serverless clouds.")),(0,n.kt)("p",null,"SFI\u5f3a\u5236\u5c06\u672a\u4fe1\u4efb\u7684\u4ee3\u7801\u9694\u79bb\u5230\u81ea\u5df1\u7684\u6c99\u76d2\u73af\u5883\uff0c\u5e76\u4fdd\u8bc1\u6bcf\u6b21\u5185\u5b58\u8bbf\u95ee\u90fd\u88ab\u52a8\u6001\u68c0\u67e5\u3002\u4f8b\u5982NaCI\u548cWasm\u90fd\u6709\u63aa\u65bd\u4fdd\u8bc1\u672a\u4fe1\u4efb\u7684\u7ec4\u4ef6\u7684\u5185\u5b58 \u8bbf\u95ee\u90fd\u5904\u4e8e\u81ea\u5df1\u7684\u6c99\u76d2\u533a\u57df\uff0c\u5e76\u4e14\u6dfb\u52a0\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u68c0\u67e5\u4ee5\u4fdd\u8bc1\u6240\u6709\u7684control flow\u90fd\u88ab\u9650\u5b9a\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u8def\u57fa\u5185\u90e8\u3002"),(0,n.kt)("p",null,"\u5b89\u5168\u548c\u6027\u80fd\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u8fd0\u884c\u65f6\u4ee3\u7801\u8fd8\u5f97\u4fdd\u8bc1\u8fd9\u79cd\u68c0\u67e5\u672c\u8eab\u662f\u5b89\u5168\u548c\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u901a\u5e38\u673a\u5236\u5c31\u6bd4\u8f83\u590d\u6742\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u6f0f\u6389\u7684\u68c0\u67e5\u90fd\u53ef\u80fd\u5bfc\u81f4\u653b\u51fb\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u5b89\u5168\u6027\u548c\u6b63\u786e\u6027\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u6b63\u786e\u6027\u548c\u8ba1\u7b97\u91cf\u4e5f\u662f\u5f71\u54cd\u5b89\u5168\u548c\u6027\u80fd\u7684\u91cd\u8981\u6765\u6e90")),(0,n.kt)("p",null,"\u5728\u4e00\u4e9b\u6c99\u76d2\u5e94\u7528\u67b6\u6784\u6bd4\u8f83\u91cd\u7684\u5e94\u7528\u4e2d\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u53ef\u80fd\u5360\u636e\u4e86\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u4f8b\u5982Firefox\u53ef\u80fd\u56e0\u4e3a\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u5f71\u54cd\u4e86\u8f83\u5927\u7684\u6027\u80fd\u800c\u4e0d\u5f97\u4e0d\u5f03\u6389\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u3002"),(0,n.kt)("h5",{id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"},"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u4e0b\u4ee3\u7801\uff0c\u5728\u6d4f\u89c8\u5668\u4e2d\u6267\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u7684\u5b57\u4f53\u6e32\u67d3\u5e93\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"void onPageLoad(int* text) {\n ...\n int* screen = ...; // stored in r12 \n int* temp_buf = ...; \n gr_get_pixel_buffer(text, temp_buf); \n memcpy(screen, temp_buf, 100);\n ...\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5\u4ee3\u7801\u8c03\u7528libgraphite\u5e93\u7684gr_get_pixel_buffer\u65b9\u6cd5\u5c06\u6587\u672c\u6e32\u67d3\u5230\u4e00\u4e2a\u4e34\u65f6\u7684buffer\u4e2d\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u4e34\u65f6buffer\u7684\u5185\u5bb9\u62f7\u8d1d\u5230\u5c4f\u5e55\u53d8\u91cf\u4e2d\u7528\u4e8e\u6e32\u67d3\u3002\u4f7f\u7528SFI\u5c06\u5e93\u7684\u5185\u5b58\u9694\u79bb\u8d77\u6765\uff0c\u5373\u5185\u5b58\u9694\u79bb\u673a\u5236\u4f7f\u5f97gr_get_pixel_buffer\u4e0d\u80fd\u591f\u83b7\u53d6\u4efb\u4f55onPageLoad\u6216\u5176\u4ed6\u90e8\u5206\u7684\u6d4f\u89c8\u5668\u5806\u548c\u6808\u5185\u5b58\u3002\u7136\u800c\u4e0d\u4fe1\u7684\u4e8b\uff0c\u5355\u7eaf\u7684\u5185\u5b58\u9694\u79bb\u662f\u4e0d\u591f\u7684\uff0c\u5982\u679c\u6574\u4e2a\u5207\u6362\u4ec5\u4ec5\u662f\u4e00\u4e2a\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u653b\u51fb\u8005\u53ef\u80fd\u8fdd\u80cc\u65b9\u6cd5\u8c03\u7528\u7684\u7ea6\u5b9a\u4ee5\u6253\u7834\u9694\u79bb\uff0c\u51e0\u79cdlibgraphite\u53ef\u4ee5\u4f7f\u7528\u7684\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Clobbering Callee-Save Registers"),"\uff1a\u5047\u8bbe\u4e0a\u8ff0\u7684screen\u53d8\u91cf\u7f16\u8bd1\u5230\u5bc4\u5b58\u5668r12\u4e2d\uff0c\u5728System V\u8c03\u7528\u7ea6\u5b9a\uff08calling convention\uff09\u4e2d\uff0cr12\u662f\u4e00\u4e2acallee-saved register\uff0c\u6240\u4ee5\u5982\u679cgr_get_pixel_buffer\u52ab\u6301r12\uff0c\u5b83\u53ef\u4ee5\u5728\u8c03\u7528\u8fd4\u56de\u4e4b\u524d\u83b7\u53d6\u8be5\u5bc4\u5b58\u5668\u6307\u5411\u7684\u5b9e\u9645\u5185\u5b58\u7684\u503c\uff0c\u8fd8\u53ef\u4ee5\u5c06\u8be5\u5bc4\u5b58\u5668\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u8be5\u6c99\u76d2\u4e2d\u7684\u5185\u5b58\u5730\u5740\uff0c\u8fd9\u6837\u5728\u540e\u9762\u7684memcpy\u6307\u4ee4\u4e2d\u8fdb\u884c\u590d\u5236\uff0c\u8fd9\u5c31\u53ef\u4ee5\u7ed9\u653b\u51fb\u8005\u4e00\u79cd\u65b9\u6cd5\u4f7f\u5b83\u53ef\u4ee5\u52ab\u6301\u6d4f\u89c8\u5668\u7684control flow\u3002\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u5f62\u5f0f\u7684\u653b\u51fb\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1callee-save register integrity\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u5728\u8fd4\u56de\u4e4b\u524d\u5c06 callee-save register\u91cd\u7f6e\u4e3a\u539f\u6765\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Leaking Scratch Registers"),"\uff1a\u540c\u6837\u7684\uff0c\u5176\u4ed6scratch registers\u4e5f\u53ef\u80fd\u4f1a\u6cc4\u9732\u654f\u611f\u4fe1\u606f\u7ed9\u6c99\u76d2\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u4fdd\u5b58\u4e86\u4e00\u4e2a\u5bc6\u94a5\u5728scratch register\u4e2d\uff0c\u4ec5\u4ec5\u662f\u5185\u5b58\u9694\u79bb\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u53d7\u653b\u51fb\u8005\u63a7\u5236\u7684libgraphite\u4e0d\u4f1a\u8bfb\u53d6\u548c\u4f7f\u7528\u8fd9\u4e9b\u5bc4\u5b58\u5668\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u6cc4\u9732\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1scratch register confidentiality"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Reading and corrupting stack frames"),"\uff1a\u6700\u540e\uff0c\u5982\u679c\u5bbf\u4e3b\u548c\u6c99\u76d2\u5e94\u7528\u7a0b\u5e8f\u5171\u4eab\u4e00\u4e2a\u6808\uff0c\u653b\u51fb\u8005\u5c31\u53ef\u80fd\u8bfb\u53d6\u6216\u8005 \u7834\u574f\u6808\u4e2d\u7684\u6570\u636e\u6216\u8005\u6307\u9488\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u653b\u51fb\uff0c\u9700\u8981stack frame encapsulation\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u4e0d\u80fd\u8bbf\u95ee\u8c03\u7528\u6808\u3002")),(0,n.kt)("h5",{id:"216222-heavyweight-transitions"},"2.16.2.2.2 Heavyweight Transitions"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684SFI\u90fd\u4f7f\u7528\u6bd4\u8f83\u91cd\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u6280\u672f\uff0c\u4f8b\u5982NaCI\u4ee5\u53caWasm\u7f16\u8bd1\u5668Lucet\uff0c\u8fd9\u79cd\u6280\u672f\u5c06\u6240\u6709\u7684\u8c03\u7528\u548c\u8fd4\u56de\u503c\u90fd\u5c01\u88c5\u8d77\u6765\u4ee5\u5e94\u5bf9\u524d\u9762\u63d0\u5230\u7684\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u6837\u7684\u5207\u6362\u90fd\u662f\u5b89\u5168\u7684\uff0c\u4ed6\u4eec\u63d0\u4f9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Callee-save register integrity"),"\uff1a\u5728\u8c03\u7528\u7684\u65f6\u5019\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3aSpringboard\u7684\u4ee3\u7801\u6765\u5305\u88c5calls\uff0c\u5373\u5c06\u5bc4\u5b58\u5668\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5e94\u7528\u5185\u5b58\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u72ec\u7acb\u7684\u6808\u4e2d\uff1b\u5f53\u7531\u5e93\u8fd4\u56de\u5230\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3atrampoline\u7684\u4ee3\u7801\u5305\u88c5returns\uff0c\u5e76\u91cd\u7f6e\u5bc4\u5b58\u5668\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Scratch register confidentiality"),"\uff1a\u7531\u4e8e\u4efb\u4f55Scratch register \u90fd\u53ef\u80fd\u5305\u542b\u654f\u611f\u4fe1\u606f\uff0c\u6240\u4ee5Springboard\u5728\u5207\u6362\u5230\u6c99\u76d2\u4e4b\u524d\u4f1a\u6e05\u9664\u6240\u6709\u7684Scratch register\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Stack frame encapsulaton"),"\uff1a\u5927\u90e8\u5206\u7684SFI\u4f1a\u5bf9\u5bbf\u4e3b\u7a0b\u5e8f\u548c\u6c99\u76d2\u4ee3\u7801\u8bbe\u7f6e\u72ec\u7acb\u7684\u8c03\u7528\u6808\uff0c\u4ee5\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u65e0\u6cd5\u8bbf\u95ee\u53d7\u4fe1\u4efb\u7684\u8c03\u7528\u6808\u3002\u8be5\u673a\u5236\u540c\u6837\u7531Springboard\u548ctrampoline\u6765\u5b9e\u73b0\uff1a\u9996\u5148\uff0c\u8ffd\u8e2a\u6240\u6709\u6808\u6307\u9488\uff0c\u7136\u540eSpringboard\u4f1a\u5c06\u8fd9\u4e9b\u6808\u4e0a\u7684\u53c2\u6570\u5168\u90e8\u590d\u5236\u5230\u6c99\u76d2\u4ee3\u7801\u7684\u8c03\u7528\u6808\u4e2d\uff0c\u6700\u540etrampoline\u4f1a\u8ffd\u8e2a\u5b9e\u9645\u7684\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5185\u5b58\u4e2d\uff0c\u8fd9\u6837\u6c99\u76d2\u4ee3\u7801\u5e93\u5c06\u65e0\u6cd5\u7834\u574f\u5b83\u3002")),(0,n.kt)("p",null,"\u7531\u4e0a\u9762\u7684\u8fc7\u7a0b\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u673a\u5236\u53ef\u4ee5\u4fdd\u5b58\u5207\u6362\u7684\u5b89\u5168\uff0c\u4f46\u662f\u5177\u6709\u4e24\u4e2a\u6bd4\u8f83\u4e25\u91cd\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u5b83\u4eec\u7ed9SFI\u5e26\u6765\u8f83\u5927\u7684\u8d1f\u62c5\uff0c\u76f8\u6bd4\u4e8e\u5355\u7eaf\u7684\u65b9\u6cd5\u8c03\u7528\u8ba1\u7b97\u91cf\u8981\u5927\u5f97\u591a\uff0c\u8fd9\u79cd\u4fdd\u5b88\u5730\u5207\u6362\u4f1a\u5e26\u6765\u5927\u91cf\u7684\u4e0d\u5fc5\u8981\u7684\u72b6\u6001\u4fdd\u5b58\u548c\u6e05\u9664\uff0c\u51e0\u4e4e\u76f8\u5f53\u4e8e\u91cd\u65b0\u5b9e\u73b0OS\u8fdb\u7a0b\u7684\u5f88\u591a\u57fa\u7840\u529f\u80fd\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cSpringboard\u548ctrampoline\u5fc5\u987b\u9488\u5bf9\u4e0d\u540c\u7684\u5e73\u53f0\u5b9a\u5236\uff0c\u56e0\u4e3a\u6bcf\u4e2a\u5e73\u53f0\u6709\u4e0d\u540c\u7684calling convention\uff0c\u4efb\u4f55\u5b9e\u73b0\u9519\u8bef\u5c31\u53ef\u80fd\u5bfc\u81f4\u6c99\u76d2\u80fd\u591f\u9003\u79bb\u8fd9\u79cd\u653b\u51fb\u3002")),(0,n.kt)("h4",{id:"21623-object--space-model"},"2.16.2.3 object space model"),(0,n.kt)("h4",{id:"21624-lua-environment"},"2.16.2.4 lua Environment"),(0,n.kt)("h4",{id:"21625-erlang-\u9694\u79bb\u673a\u5236"},"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236"),(0,n.kt)("h3",{id:"2163-webassembly-security"},"2.16.3 Webassembly Security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://webassembly.org/docs/security/"},"https://webassembly.org/docs/security/"))),(0,n.kt)("h4",{id:"21631-module--cfi"},"2.16.3.1 Module & CFI"),(0,n.kt)("h4",{id:"21632-memory-safety"},"2.16.3.2 Memory safety"),(0,n.kt)("h4",{id:"21633-isolation-without-taxation"},"2.16.3.3 Isolation without Taxation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Heavyweight Transitions\u662f\u4fdd\u5b88\u7684\uff0c\u56e0\u4e3a\u5b83\u4eec\u5bf9\u6c99\u76d2\u4ee3\u7801\u7684\u8fd0\u884c\u7684\u7ed3\u6784\u505a\u4e86\u6bd4\u8f83\u5c11\u7684\u5047\u8bbe\u3002\u4f46NaCI\u548cWasm\u901a\u8fc7Springboard\u548ctrampoline\u7684\u673a\u5236\u786e\u5b9e\u4e5f\u7ed9\u6c99\u76d2\u4ee3\u7801\u5e93\u5f3a\u5236\u589e\u52a0\u4e86\u4e00\u5b9a\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7bc7\u8bba\u6587\u6307\u51fa\u901a\u8fc7\u8fdb\u4e00\u6b65\u5bf9\u6c99\u76d2\u4ee3\u7801\u589e\u52a0\u9002\u5f53\u7684\u7ed3\u6784\uff0c\u53ef\u4ee5\u907f\u514d\u6389\u51e0\u4e4e\u6240\u6709\u524d\u9762\u63d0\u5230\u7684\u7531Heavyweight Transitions\u5e26\u6765\u7684\u989d\u5916\u5de5\u4f5c\uff0c\u4f7f\u5f97\u6574\u4e2a\u4e0a\u4e0b\u6587\u5207\u6362\u66f4\u7b80\u5355\u3001\u8ba1\u7b97\u66f4\u5feb\uff0c\u540c\u65f6\u6613\u4e8e\u79fb\u690d\u3002\u5b83\u66f4\u50cf\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u62bd\u8c61\u3001\u53ef\u7ec4\u5408\u7684\u7f16\u7a0b\u8bed\u8a00\u3002\u9996\u5148\u63d0\u51fa\u80fd\u591f \u5b9e\u73b0zero-cost\u5207\u6362\u7684\u6761\u4ef6\u3002"),(0,n.kt)("h5",{id:"216331-zero-cost-conditions"},"2.16.3.3.1 Zero-cost conditions"),(0,n.kt)("p",null,"\u5047\u8bbe\u6c99\u76d2\u5e93\u4ee3\u7801\u662f\u6709\u4e00\u4e9b\u51fd\u6570\u53ca\u5176\u671f\u671b\u7684\u53c2\u6570\u7ec4\u6210\uff0c\u8fd9\u7bc7\u8bba\u6587\u63d0\u51fa\u4e86\u4e00\u4e9b\u6761\u4ef6\uff0c\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\uff08\u5373\u5305\u542b\u8fd9\u79cd\u7ed3\u6784\uff09\u7684\u7b2c\u4e09\u65b9Wasm\u4ee3\u7801\u53ef\u4ee5\u88ab\u5f62\u5f0f\u5316\u7684\u9a8c\u8bc1\uff0c\u4ece\u800c\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u7684\u5b89\u5168\u3002\u8fd9\u4e9b\u6761\u4ef6\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Calee-save register restoration"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Well-bracketed control-flow"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Type-directed forward-edge CFI"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Local state encapsulation"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Confidentiality"),"\uff1a")),(0,n.kt)("p",null,"\u8fd9\u79cd\u65b9\u6cd5\u7684\u4ef7\u503c\u5728\u4e8e\u5b83\u80fd\u591f\u4ee5\u4e00\u79cd\u5f62\u5f0f\u5316\u7684\u7ed3\u6784\u6765\u63cf\u8ff0\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u4ee3\u7801\uff0c\u4f7f\u5f97\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u8fd9\u6837\u7684\u7ed3\u6784\u53bb\u6784\u9020\u7ec4\u4ef6\uff0c\u5219\u5176\u751f\u6210\u7684Wasm\u4ee3\u7801\u53ef\u4ee5\u662f\u88ab\u5f62\u5f0f\u5316\u9a8c\u8bc1\u7684\u3002\u8fd9\u4e9b\u6dfb\u52a0\u7684\u989d\u5916\u7ed3\u6784\u4e0d\u4ec5\u80fd\u591f\u7528\u4e8e\u5f62\u5f0f\u5316\u9a8c\u8bc1\uff0c\u8fd8\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u907f\u514d\u989d\u5916\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u8ba1\u7b97\u91cf\uff0c\u8fd9\u4e9b\u6761\u4ef6\u6240\u7ea6\u675f\u7684\u5b9e\u9645\u4e0a\u662f\u5e0c\u671b\u80fd\u591f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u6b63\u5e38\u7684\u9694\u79bb\u539f\u5219\uff0c\u5373\u4e0d\u8981\u53bb\u8bbf\u95ee\u8d85\u51fa\u81ea\u5df1\u8303\u56f4\u7684\u5185\u5b58\u548c\u4ee3\u7801\uff0c\u4e0d\u8981\u53bb\u901a\u8fc7\u5bc4\u5b58\u5668\u548c\u8fd4\u56de\u5730\u5740\u7b49\u53bb\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u7684control flow\u3002"),(0,n.kt)("p",null,"\u5373\u5982\u679c\u6211\u4eec\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u662f\u5b89\u5168\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u4e3a\u4e86\u9694\u79bb\u53bb\u505a\u4e00\u4e9b\u989d\u5916\u7684\u4fdd\u5b58\u6216\u8005\u6e05\u9664\u5de5\u4f5c\u3002\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u9700\u8981\u7ba1\u7406\u5458\u4fdd\u8bc1\u4e0d\u5f15\u5165\u6ca1\u6709\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u3002"),(0,n.kt)("h3",{id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"},"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"),(0,n.kt)("p",null,"\u591a\u5e94\u7528\u73af\u5883\u4e0b\u5e94\u7528\u7a0b\u5e8f\u7684\u9694\u79bb\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7eaf\u811a\u672c\u8bed\u8a00"),"\uff0c\u8fd9\u79cd\u8bed\u8a00\u4e0d\u5141\u8bb8\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4efb\u4f55\u5f62\u5f0f\u7684\u80fd\u591f\u5305\u542b\u4e8c\u8fdb\u5236\u5f62\u5f0f\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u7ec4\u4ef6\u80fd\u591f\u8c03\u7528\u7684\u5168\u90e8\u4e8c\u8fdb\u5236\u4ee3\u7801\u5747\u6765\u81ea\u4e8e\u5bbf\u4e3b\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ea\u9700\u8981\u7b80\u5355\u7684\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff1a1\uff09\u4e0d\u80fd\u8bbf\u95ee\u5168\u5c40\u5171\u4eab\u53d8\u91cf\uff0c2\uff09\u4e0d\u80fd\u5171\u4eab\u8c03\u7528\u6808\uff0c\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u89e3\u51b3\u591a\u5e94\u7528\u5b89\u5168\u6027\u95ee\u9898\u3002\u8fd9\u79cd\u8bed\u8a00\u7684\u4ee3\u8868\u662fErlang\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u6240\u6709\u4ee3\u7801\u90fd\u662fErlang\u811a\u672c\uff0c\u88abErlang\u89e3\u91ca\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u975e\u811a\u672c\u8bed\u8a00"),"\uff0c\u975e\u811a\u672c\u8bed\u8a00\u5373\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4e8c\u8fdb\u5236\u4ee3\u7801\u7684\u8bed\u8a00\uff0c\u5305\u62ec\u6d4f\u89c8\u5668\u4e2d\u7684NaCI\u8fd9\u79cd\u76f4\u63a5\u8c03\u7528\u4e8c\u8fdb\u5236\u4ee3\u7801\u5e93\u7684\u7cfb\u7edf\uff0c\u4e5f\u5305\u62ec\u50cfWasm\u8fd9\u79cd\u867d\u7136\u4ee5\u4e2d\u95f4IR\u5f62\u5f0f\u5b58\u50a8\uff0c\u4f46\u662f\u8fd9\u4e9b\u4e2d\u95f4IR\u662f\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u6307\u4ee4\u7684\uff0c\u6240\u4ee5\u5728\u88ab\u52a8\u6001\u7f16\u8bd1\u4e4b\u540e\u662f\u53ef\u4ee5\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u5185\u5b58\u7684\uff0c\u7b2c\u4e09\u79cd\u662f\u50cfPython\u8fd9\u79cd\uff0c\u7b2c\u4e09\u65b9Python\u5e93\u672c\u8eab\u662f\u53ef\u4ee5\u8c03\u7528C\u5e93\u4ee3\u7801\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("p",null,"\u603b\u800c\u8a00\u4e4b\uff0c\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u8fd8\u8981\u907f\u514d\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u8bbf\u95ee\u5bc4\u5b58\u5668\uff0c\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u80fd\u591f\u4ee5\u67d0\u79cd\u5f62\u5f0f\u5305\u542b\u5bc4\u5b58\u5668\uff0c\u5219\u53ef\u4ee5\u7ed5\u5f00\u5185\u5b58\u9694\u79bb\u3002CreateScript\u672c\u8eab\u5c5e\u4e8e\u7eaf\u811a\u672c\u578b\u8bed\u8a00\uff0c\u4f46\u662f\u96c6\u6210\u5230\u7b2c\u4e09\u65b9app\u4e2d\u5219\u4f1a\u5f15\u5165\u7b2c\u4e09\u65b9\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u4ee3\u7801\u3002\u6240\u4ee5\u540e\u671f\u5728\u5904\u7406\u8fd9\u90e8\u5206\u7684\u65f6\u5019\u8fd8\u662f\u9700\u8981\u8003\u8651\u4f20\u7edf\u7684SFI\u6280\u672f\u3002"),(0,n.kt)("h4",{id:"21641-\u5bf9\u8c61\u9694\u79bb"},"2.16.4.1 \u5bf9\u8c61\u9694\u79bb"),(0,n.kt)("p",null,"\u6ca1\u6709\u5168\u5c40\u53d8\u91cf\uff0c\u5168\u90e8\u90fd\u662f\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u73af\u5883\u53d8\u91cf\u90fd\u662f\u53ea\u8bfb\u7684\uff0c\u5982\u679c\u6709app\u76f8\u5173\u7684\uff0c\u521b\u5efa\u7279\u5b9aapp\u7684\u73af\u5883object"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u7531\u591a\u4e2a\u7ec4\u4ef6\u7ec4\u6210\uff0c\u5bf9\u8c61\u7531\u7528\u6237\u521b\u5efa\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u5185\u90e8\u7684\u901a\u4fe1\uff0c\u5728\u9694\u79bb\u8303\u56f4\u4e4b\u5185\uff0c\u6240\u4ee5\u91c7\u7528\u57fa\u672c\u7684\u7c7b\u578b\u5b89\u5168\u5c31\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u52a0\u5b89\u5168\u7b56\u7565\uff0c\u56e0\u4e3a\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u53ef\u80fd\u662f\u8de8\u5e94\u7528\u7684\uff08\u5c3d\u7ba1\u5927\u90e8\u5206\u53ef\u80fd\u662fapp\u5185\u90e8\u7684\uff09\uff0c\u8fd9\u662f\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027\u7684\u57fa\u7840")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u4f53\u662f\u57fa\u4e8e\u5bf9\u8c61\u7684\u5b89\u5168\u63a7\u5236\uff0c\u80cc\u540e\u7684\u63a7\u5236\u7b56\u7565\u662f\u5bf9\u8c61\u6240\u5c5e\u7684appId\u548cuserId\u4e4b\u95f4\u7684\u6743\u9650\u5173\u7cfb\uff0c\u5f53\u7136\u8fd9\u4e2a\u5173\u7cfb\u53ea\u9700\u8981\u9a8c\u8bc1\u4e00\u6b21\uff0c\u8fd9\u4e9b\u5173\u7cfb\u53ef\u4ee5\u4ee5\u52a0\u5bc6\u7684\u65b9\u5f0f\u9884\u5b58\u50a8\uff0c\u5728\u670d\u52a1\u7aef\u7edf\u4e00\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u8ba1\u7b97\u5bf9\u8c61\u7684\u5185\u90e8\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\u8ba1\u7b97\u9700\u8981\u8de8\u5bf9\u8c61\u901a\u4fe1\u7684\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u5176\u80cc\u540e\u7684\u903b\u8f91\u662f\uff0c\u5bf9\u8c61\u5185\u90e8\u9996\u5148\u53d1\u751f\u5185\u90e8\u53d8\u5316\uff0c\u7136\u540e\u8fd9\u79cd\u53d8\u5316\u5f71\u54cd\u5230\u5916\u90e8\u3002\u8fd9\u6837\u80fd\u907f\u514d\u4e00\u4e9b\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u4e2d\u4efb\u610f\u987a\u5e8f\u7684\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u6df7\u4e71\u7ec4\u7ec7\u7ed3\u6784\u548c\u903b\u8f91"),(0,n.kt)("h4",{id:"21642-app-spaces"},"2.16.4.2 app spaces"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"an approach to safe object sharing"),(0,n.kt)("p",{parentName:"blockquote"},"The crux of the problem is that once a reference is obtained, it can be used to name an object and to invoke methods of that object. We believe that naming and invocation must be sepatated, thus introducing access control into the language.")),(0,n.kt)("p",null,"access control"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5c5e\u4e8e\u4e00\u4e2aapp space\uff0c\u8fd9\u4e2aapp space\u7528\u4e8e\u63a7\u5236\u6743\u9650\uff0capp space\u4ee5\u7528\u6237\u4e3a\u57fa\u7840\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u7528\u6237\u62e5\u6709\u72ec\u7acb\u7684app space"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"app space\u5f71\u54cd\u5e76\u884c\u6027")),(0,n.kt)("p",null,"\u653e\u5230\u4e00\u8d77\u5e76\u884c\u8ba1\u7b97\u7684\u5bf9\u8c61\u5fc5\u987b\u662f\u540c\u4e00\u4e2aapp space\uff0c\u5c3d\u7ba1\u591a\u4e2a\u4e0d\u540cspace\u7684\u5bf9\u8c61\u53ef\u80fd\u62e5\u6709\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5b83\u4eec\u4f1a\u88ab\u72ec\u7acb\u8ba1\u7b97\uff0c\u4ee5\u53ca\u72ec\u7acb\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u65b9\u4fbf\u5e76\u884c\u8ba1\u7b97\uff0c\u4e0d\u662f\u5c06\u4e00\u4e2a\u5bf9\u8c61\u7684\u6240\u6709\u5c5e\u6027\u5b58\u50a8\u5230\u4e00\u8d77\uff0c\u800c\u662f\u4f1a\u6309\u7167\u7ec4\u4ef6\u7c7b\u578b\u5206\u5f00\u5b58\u50a8\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bcf\u4e2a\u76f8\u540c\u7c7b\u578b\u5bf9\u5e94\u7684\u5c5e\u6027 \uff0c\u5b83\u4eec\u5e94\u8be5\u770b\u8d77\u6765\u5c31\u50cf\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5b83\u4eec\u5f62\u6210\u4e00\u4e2agroup\uff0c\u6bcf\u4e2agroup\u65e2\u5c5e\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4e5f\u5c5e\u4e8e\u4e00\u4e2aspace\u3002\u5c31\u50cf \u628a\u4e00\u4e2a\u5bf9\u8c61\u5206\u6210\u591a\u6bb5\uff0c\u6bcf\u4e2a\u6bb5\u8ddf\u4f5c\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u6574\u4f53\u62e5\u6709\u76f8\u540c\u7684\u884c\u4e3a"),(0,n.kt)("h4",{id:"21643-\u5bf9\u8c61\u901a\u4fe1"},"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1"),(0,n.kt)("p",null,"\u5bf9\u8c61\u901a\u4fe1\u53ea\u80fd\u53d1\u751f\u57282\u4e2a\u5bf9\u8c61\u4e4b\u95f4\uff0c\u5373\uff0c\u5982\u679c\u5916\u90e8\u53c2\u6570\u5305\u542b\u591a\u4e2a\u53c2\u6570\uff0c\u5fc5\u987b\u662f\u6765\u81ea\u4e00\u4e2a\u5305\u542b\u6240\u6709\u8fd9\u4e9b\u5c5e\u6027\u7684\u5bf9\u8c61\uff0c\u4e0d\u80fd\u662f\u6765\u81ea\u591a\u4e2a\u5bf9\u8c61\u7684\u7ec4\u5408\u6240\u4ee5\u5f00\u53d1\u8005\u5e94\u8be5\u907f\u514d\u4f7f\u7528\u65e0\u5173\u7684\u591a\u4e2a\u53c2\u6570\u8f93\u5165\uff0c\u6700\u4f73\u65b9\u6cd5\u662f\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\uff0c\u56e0\u4e3a\u90a3\u662f\u4ee3\u8868\u7740\u4ea4\u4e92\u7684\u903b\u8f91\u53d8\u91cf\u3002\u5982\u679c\u4f7f\u75282\u4e2a\u4ee5\u4e0a\u7b26\u53f7\uff0c\u8fd9\u4e9b\u7b26\u53f7\u5e94\u8be5\u4ece\u903b\u8f91\u4e0a\u5e94\u8be5\u5728\u4e00\u8d77\uff0c\u6216\u8005\u5f00\u53d1\u8005\u4fdd\u8bc1\u4ed6\u4eec\u5e94\u8be5\u5728\u4e00\u8d77"),(0,n.kt)("h4",{id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"},"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6c99\u76d2\u673a\u5236\u90fd\u662f\u91c7\u7528\u7c7b\u4f3cCPU\u65f6\u95f4\u7247\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6574\u4e2a\u6267\u884c\u662f\u65e0\u5e8f\u7684\uff0c\u6240\u4ee5\u4f60\u65e0\u6cd5\u6309\u67d0\u79cd\u987a\u5e8f\u6267\u884c\u6574\u4e2a\u8f6f\u4ef6\uff0c\u53ea\u80fd\u5728\u4e0d\u540c\u7684\u7ebf\u7a0b\u4e4b\u95f4\u8fdb\u884c\u5207\u6362\uff1b\u867d\u7136Erlang\u5728\u7ebf\u7a0b\u4e4b\u95f4\u5206\u914d\u4f18\u5148\u7ea7\uff0c\u4f46\u662f\u4ecd\u7136\u662f\u9700\u8981\u5207\u6362\uff0c\u56e0\u4e3a\u7ebf\u7a0b\u6570\u91cf\u53ef\u80fd\u5f88\u591a\uff0c\u5e76\u4e14\u7cfb\u7edf\u4e0d\u77e5\u9053\u6bcf\u4e2a\u7ebf\u7a0b\u9700\u8981\u591a\u957f\u65f6\u95f4\u624d\u80fd\u6267\u884c\u5b8c\u5168\u90e8\u8ba1\u7b97\uff0c\u5373\u4f7f\u5b83\u53ef\u80fd\u8fd8\u5dee\u51e0\u4e2a\u6307\u4ee4\u5c31\u6267\u884c\u5b8c\u4e86\uff0c\u4e5f\u53ef\u80fd\u4f1a\u53d1\u751f\u5207\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u4e00\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6bd4\u8f83\u5927\uff0c\u6240\u4ee5\u65e0\u6cd5\u76f4\u63a5\u5c06\u4e00\u4e2a\u65b9\u6cd5\u8ba1\u7b97\u5b8c\u518d\u8fdb\u884c\u4e0b\u4e00\u4e2a\u8ba1\u7b97\uff0c\u4f60\u5fc5\u987b\u8981\u4fdd\u5b58\u72b6\u6001")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u7684\u539f\u56e0\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u5728\u7ebf\u7a0b\u4e4b\u95f4\u4e0d\u505c\u5730\u5207\u6362\u4e0a\u4e0b\u6587\uff0c\u8fd9\u5c31\u5bfc\u81f4\u8f83\u5927\u7684\u5f00\u9500\uff0c\u9700\u8981\u82b1\u5f88\u591a\u65f6\u95f4\u5904\u7406\u5185\u5b58\u6570\u636e\u7684\u6362\u8fdb\u6362\u51fa\u3002\u56e0\u4e3a\u7ebf\u7a0b\u5185\u90e8\u53ef\u80fd\u4fdd\u5b58\u7740\u590d\u6742\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7531\u4e8e\u6574\u4e2a\u6267\u884c\u7684\u6709\u5e8f\u7684\uff0c\u5373\u6240\u6709\u7ec4\u4ef6\u90fd\u9700\u8981\u5728\u4e00\u5e27\u4e4b\u5185\u88ab\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u56e0\u4e3a\u4e0d\u5fc5\u4e3a\u4e86\u8003\u8651\u4e24\u4e00\u4e2a \u7ebf\u7a0b\u88ab\u62d6\u5ef6\u65f6\u95f4\u800c\u6682\u65f6\u505c\u6b62\u5f53\u524d\u7ebf\u7a0b\u7684\u8ba1\u7b97\u5e76\u5207\u6362\u5230\u5176\u4ed6\u7ebf\u7a0b\u3002\u8fd9\u907f\u514d\u989d\u5927\u91cf\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u5bfc\u81f4\u7684\u5185\u5b58\u6362\u8fdb\u6362\u51fa\u7b49\u989d\u5916\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4ee3\u4ef7\u662f\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6240\u6709\u8ba1\u7b97\u5728\u6bcf\u4e00\u5e27\u90fd\u53ef\u4ee5\u88ab\u8ba1\u7b97\u5b8c\uff0c\u6bd4\u5982\u5c31\u4e0d\u80fd\u51fa\u73b0\u90a3\u79cd\u5355\u4e00\u7ec4\u4ef6\u9700\u8981\u6570\u5e27\u624d\u80fd\u8ba1\u7b97\u5b8c\u6bd5\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u9700\u8981\u5f02\u6b65\u5904\u7406\uff0c\u4e0d\u5f71\u54cd\u5f53\u524d\u5faa\u73af\u3002\u4f46\u6e38\u620f\u672c\u8eab\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\u7684\u3002"),(0,n.kt)("h2",{id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("h3",{id:"2171-llvm"},"2.17.1 LLVM"),(0,n.kt)("h3",{id:"2172-usd"},"2.17.2 USD"),(0,n.kt)("h3",{id:"2173-mlir"},"2.17.3 MLIR"),(0,n.kt)("h3",{id:"2174-lua-c-api"},"2.17.4 Lua C API"),(0,n.kt)("p",null,"\u76f4\u63a5\u83b7\u53d6\u5185\u5b58\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4ece\u5b57\u7b26\u4e32\u89e3\u6790\u3002"),(0,n.kt)("h3",{id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u5fc5\u7136\u57fa\u4e8e\u67d0\u79cd\u6807\u51c6\uff0c\u67d0\u79cd\u9884\u5b9a\u7684\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u67b6\u6784\u57fa\u672c\u4e0a\u662f\uff1a1\uff09\u9996\u5148\u8bbe\u8ba1\u597d\u67d0\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u5176\u4e2d\u7684\u683c\u5f0f\u51e0\u5305\u62ec\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\u3001\u5c5e\u6027\u7ec4\u7ec7\u7684\u6570\u636e\u7ed3\u6784\u3001\u4e5f\u53ef\u80fd\u5305\u542b\u5904\u7406\u8fd9\u4e9b\u6570\u636e\u7684\u7ea6\u5b9a\u63a5\u53e3\uff0c\u5f53\u7136\u63a5\u53e3\u7ea6\u5b9a\u5e76\u6ca1\u6709\u90a3\u4e48\u5927\u7684\u610f\u4e49\uff0c\u5904\u7406\u6570\u636e\u7684\u7a0b\u5e8f\u7406\u8bba\u4e0a\u53ef\u4ee5\u6309\u7167\u4efb\u4f55\u65b9\u5f0f\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\uff1b2\uff09\u53d1\u751f\u6570\u636e\u4e00\u65b9\u6309\u7167\u6570\u636e\u683c\u5f0f\u751f\u6210\u6570\u636e\uff1b3\uff09\u501f\u52a9\u5e73\u53f0\u63d0\u4f9b\u7684\u67d0\u79cd\u673a\u5236\u53d1\u751f\u6570\u636e\u7ed9\u63a5\u6536\u65b9\uff0c\u5176\u4e2d\u4f20\u8f93\u7684\u901a\u5e38\u662f\u5e8f\u5217\u5316\u4e4b\u540e\u7684\u5b57\u7b26\u4e32\u6216\u8005\u5bf9\u5e94\u7684\u4e8c\u8fdb\u5236\u6570\u636e\uff1b4\uff09\u63a5\u6536\u65b9\u63a5\u53d7\u5230\u6570\u636e\u9996\u5148\u8fdb\u884c\u53cd\u5e8f\u5217\u5316\uff0c\u7136\u540e\u6309\u7167\u683c\u5f0f\u6807\u51c6\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u6d41\u7a0b\u5b58\u5728\u4e09\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u5b58\u5728\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u95ee\u9898\uff0c\u53cc\u65b9\u53ea\u9700\u8981\u9075\u5faa\u683c\u5f0f\u6807\u51c6\uff0c\u4f46\u662f\u53d1\u9001\u548c\u89e3\u6790\u7684\u7a0b\u5e8f\u53ca\u5176\u63a5\u53e3\u90fd\u662f\u5b8c\u5168\u7531\u53cc\u65b9\u81ea\u5df1\u51b3\u5b9a\u7684\uff0c\u5f53\u6709\u5927\u91cf\u7684\u6570\u636e\u9700\u8981\u8fdb\u884c\u4e92\u64cd\u4f5c\u65f6\uff0c\u8fd9\u79cd\u5927\u91cf\u7684\u534f\u4f5c\u5c31\u4f1a\u5e26\u6765\u5de8\u5927\u7684\u6210\u672c\u3002\u7531\u4e8e\u53cc\u65b9\u7406\u8bba\u4e0a\u8bf4\u751a\u81f3\u53ef\u80fd\u91c7\u7528\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u4ee5\u5728\u5173\u4e8e\u600e\u4e48\u5904\u7406\u6570\u636e\uff08\u5305\u62ec\u53d1\u9001\u548c\u63a5\u6536\uff09\u4e0a\u6ca1\u6709\u673a\u5236\u80fd\u591f\u8fbe\u6210\u5171\u8bc6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u65b0\u95ee\u9898\uff0c\u5f53\u6807\u51c6\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u5b8c\u5168\u6ca1\u6709\u6709\u6548\u7684\u673a\u5236\u53ef\u4ee5\u4fdd\u8bc1\u53cc\u65b9\u53ef\u4ee5\u53ca\u65f6\u66f4\u65b0\uff0c\u5bfc\u81f4\u7a0b\u5e8f\u4e0d\u53ef\u7528\u6216\u8005\u5f88\u96be\u66f4\u65b0\u5230\u6700\u65b0\u529f\u80fd\u3002\u5c3d\u7ba1\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u8fd9\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u5728\u6570\u5b57\u4e16\u754c\uff0c\u6211\u4eec\u7406\u5e94\u6709\u65b9\u6cd5\u53ef\u80fd\u66f4\u597d\u5730\u7ba1\u7406\u8fd9\u79cd\u66f4\u65b0\u3002")),(0,n.kt)("p",null,"\u6309\u6743\u91cd\u770b\uff0c\u63a5\u53e3\u7684\u95ee\u9898\u662f\u6700\u5927\u7684\uff0c\u5176\u672c\u8d28\u7684\u95ee\u9898\u5728\u4e8e\u4ec5\u4ec5\u6709\u6570\u636e\u683c\u5f0f\uff0c\u6ca1\u6709\u5efa\u7acb\u8d77\u66f4\u4e0a\u4e00\u5c42\u5173\u4e8e\u6570\u636e\u683c\u5f0f\u7684\u5904\u7406\u6807\u51c6\u3002\u8fd9\u91cc\u9762\u5305\u542b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6570\u636e\u7684\u5c5e\u6027\u540d\u79f0\u7684\u95ee\u9898\uff0c\u8fd9\u8868\u73b0\u5728\uff0c\u5c3d\u7ba1\u53cc\u65b9\u90fd\u77e5\u9053\u683c\u5f0f\u4e2d\u5173\u4e8e\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6bcf\u4e2a\u7a0b\u5e8f\u5728\u5185\u90e8\u771f\u6b63\u5904\u7406\u7684\u7b97\u6cd5\u4e2d\uff0c\u5b83\u4f7f\u7528\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5e76\u4e0d\u4e00\u5b9a\u662f\u6807\u51c6\u683c\u5f0f\u4e2d\u5b9a\u4e49\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u5c31\u5bfc\u81f4\u53cc\u65b9\u5fc5\u7136\u8981\u505a\u4e00\u4e9b\u540d\u79f0\u548c\u6570\u636e\u7ed3\u6784\u8f6c\u5316\u4e4b\u7c7b\u7684\u5de5\u4f5c\u3002\u8fd9\u4e9b\u5de5\u4f5c\u4e0d\u5149\u662f\u7e41\u7410\u7684\uff0c\u800c\u4e14\u56e0\u4e3a\u6bcf\u4e2a\u7a0b\u5e8f\u5b9a\u4e49\u4e0d\u4e00\u6837 \uff0c\u8fd9\u79cd\u4eba\u5de5\u7684\u4e00\u4e9b\u5de5\u4f5c\u5bfc\u81f4\u5f88\u96be\u8fdb\u884c\u81ea\u52a8\u5316\uff0c\u6bd4\u5982\u6d89\u53ca\u7b2c\u4e09\u4e2a\u6807\u51c6\u66f4\u65b0\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u8ddf\u4e0a\u9762\u7684\u95ee\u9898\u6709\u5173\uff0c\u6ca1\u6709\u6bd4\u8f83\u6807\u51c6\u7684\u5bf9\u6570\u636e\u8fdb\u884c\u76f4\u63a5\u8bfb\u5199\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u4e0a\u9762\u7b2c\u4e00\u4e2a\u95ee\u9898\u53ef\u4ee5\u4f7f\u7528\u7b26\u53f7\u8868\u8fdb\u884c\u89e3\u51b3\uff0c\u7b26\u53f7\u8868\u56e0\u4e3a\u5b9a\u4e49\u7684\u5c31\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u6240\u4ee5\u5982\u679c\u6807\u51c6\u5b9a\u4e49\u7684\u4e0d\u4ec5\u4ec5\u662f\u683c\u5f0f\u672c\u8eab\uff0c\u800c\u662f\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u8fd0\u884c\u65f6\u7b26\u53f7\u7684\u89e3\u6790\uff0c\u8fd9\u5929\u751f\u5c31\u5c06\u5904\u7406\u53cc\u65b9\u7684\u6570\u636e\u540d\u79f0\u548c\u683c\u5f0f\u8fdb\u884c\u7edf\u4e00\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5b83\u7684\u601d\u60f3\u6765\u6e90\u4e8eUSD\u548cMLIR\uff0c\u5373\u6807\u51c6\u7cfb\u7edf\u4e0d\u4ec5\u8981\u89e3\u51b3\u4e2d\u95f4\u4ea4\u6362\u683c\u5f0f\u7684\u95ee\u9898\uff0c\u8fd8\u9700\u8981\u63d0\u4f9b\u5173\u4e8e\u5bf9\u4ea4\u6362\u6570\u636e\u8fdb\u884c\u89e3\u6790\u7684\u529f\u80fd\uff0c\u8fd9\u907f\u514d\u4e86\u53cc\u65b9\u5404\u81ea\u5199\u4e00\u4e9b\u72ec\u7acb\u7684\u91cd\u590d\u4ee3\u7801\uff0c\u53c8\u4f7f\u5f97\u5bf9\u6570\u636e\u7684\u8bfb\u5199\u4fee\u6539\u53d8\u5f97\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u4ece\u8fd9\u4e2a\u610f\u4e49\u4e0a\u8bf4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"CreateScript\u4e2d\u5b9a\u4e49\u7684\u7b26\u53f7\uff08\u53ca\u5c5e\u6027\u53ca\u5176\u6570\u636e\u7ed3\u6784\uff09\u5c31\u76f8\u5f53\u4e8eUSD\u6216\u8005MLIR\u4e2d\u5b9a\u4e49\u7684\u683c\u5f0f\u6807\u51c6"),(0,n.kt)("li",{parentName:"ul"},"\u800cCreate\u7684\u6574\u4e2a\u8fd0\u884c\u65f6\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u80fd\u591f\u83b7\u53d6\u5230\u6570\u636e\u8fdb\u884c\u5904\u7406\u7684\u673a\u5236\uff0c\u5c31\u50cfUSD/MLIR\u4e2d\u63d0\u4f9b\u7684\u5bf9\u81ea\u5b9a\u4e49\u6570\u636e\u683c\u5f0f\u7684\u89e3\u6790\uff0c\u53ea\u4e0d\u8fc7USD\u6216\u8005MLIR\u4e2d\u662f\u6309\u6a21\u677f\u751f\u6210\u7684\u5bf9\u5e94\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u800cCreateScript\u662f\u4e00\u79cd\u8fd0\u884c\u65f6\u7684\u8bed\u8a00\u673a\u5236\uff0c\u8fd9\u79cd\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u53ef\u4ee5\u76f4\u63a5\u4ece\u5185\u5b58\u4e2d\u8fdb\u884c\u6570\u636e\u8bfb\u53d6\uff0c\u800c\u4e0d\u662f\u4ece\u4e00\u4e2a\u6570\u636e\u6587\u4ef6\u4e2d\u8fdb\u884c\u89e3\u6790")),(0,n.kt)("h2",{id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"},"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u8bed\u8a00\u673a\u5236\u6216\u8005\u8bed\u6cd5\u7279\u6027\u4e0a\u770b\uff0cCreateScript\u8bbe\u8ba1\u4e86\u5f88\u591a\u4e0d\u4e00\u6837\u7684\u601d\u8def\uff0c\u4f46\u5bf9\u4e8e\u5b83\u4eec\u4e2d\u7684\u5927\u591a\u6570\uff0c\u90fd\u4e0d\u5355\u7eaf\u53ea\u662f\u4e00\u79cd\u4e0d\u4e00\u6837\u7684\u8bed\u6cd5\u5f62\u5f0f\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u7531\u5e95\u5c42\u6574\u4e2a\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u7cfb\u7edf\u53d1\u751f\u4e86\u5f88\u5927\u7684\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u8ddf\u8fd9\u4e9b\u53d8\u5316\u7684\u5e95\u5c42\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u5c06\u6240\u6709\u7684\u539f\u56e0\u548c\u56e0\u7d20\u5206\u4e3a\u4e09\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5e95\u5c42\u7684\u56e0\u7d20\uff0c\u8fd9\u6d89\u53ca\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u95f4\u5c42\u7684\u56e0\u7d20\uff0c\u6bd4\u5982\u4e92\u64cd\u4f5c\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e0a\u5c42\u66f4\u504f\u5411\u4e8e\u8bed\u8a00\u7684\u8bed\u6cd5\u5f62\u5f0f")),(0,n.kt)("p",null,"\u672c\u8282\u6211\u4eec\u8ba8\u8bba\u4e00\u4e9b\u6700\u5e95\u5c42\u7684\u673a\u5236\u548c\u95ee\u9898\uff0c\u7136\u540e\u53ef\u4ee5\u4ece\u4e2d\u63a8\u5bfc\u51fa\u6211\u4eec\u4e3a\u4ec0\u4e48\u5fc5\u987b\u8981\u8fd9\u4e48\u8bbe\u8ba1\uff0c\u4e5f\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u6574\u4e2aCreateScript\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\u8bf4\uff0cRealityIS\u4e3a\u4ec0\u4e48\u5fc5\u987b\u91cd\u65b0\u5f00\u53d1\u4e00\u6574\u5957\u5e95\u5c42\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u662f\u56e0\u4e3a\u5f53\u4eca\u6240\u6709\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u6bcf\u4e00\u4e2a\u90e8\u5206\uff0c\u90fd\u662f\u5728\u56f4\u7ed5\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\u800c\u8bbe\u8ba1\u7684\uff0c\u8fd9\u4ece\u6839\u672c\u4e0a\u5c31\u4f7f\u5f97\u591a\u5e94\u7528\u7684\u5efa\u6784\u5f88\u96be\u88ab\u6784\u5efa\uff0c\u8fd9\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u57fa\u4e8e\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6784\u5efa\u591a\u5e94\u7528\u73af\u5883\u5f88\u96be\u4fdd\u8bc1\u5b89\u5168\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u96be\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5e94\u7528\u7684\u8fd0\u884c\u65f6\u5f88\u96be\u88ab\u5916\u90e8\u5f00\u53d1\u8005\u8fdb\u884c\u6269\u5c55\uff0c\u5f53\u7136\u8fd9\u91cc\u6307\u7684\u662f\u6269\u5c55\u4e00\u4e2a\u5e94\u7528\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u8f6f\u4ef6\u3002\u6240\u8c13\u5e94\u7528\u662f\u6307\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\uff0c\u6240\u6709\u7684\u7528\u6237\u90fd\u53ef\u4ee5\u5373\u4f7f\u83b7\u5f97\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u7248\u672c\uff0c\u800c\u8f6f\u4ef6\u662f\u6307\u53ea\u80fd\u88ab\u67d0\u4e2a\u7528\u6237\u81ea\u5df1\u4f7f\u7528\u7684\u8f6f\u4ef6\u62f7\u8d1d\uff0c\u4f8b\u5982\u67d0\u4e2a\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8eUnreal Engine\u5f00\u53d1\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u6269\u5c55\u63d2\u4ef6\uff0c\u6765\u5f62\u6210\u4e00\u4e2a\u81ea\u5df1\u72ec\u7279\u7684\u7248\u672c\uff0c\u8fd9\u4e2a\u7248\u672c\u7684\u8f6f\u4ef6\u867d\u7136\u662f\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u7684\uff0c\u4f46\u662f\u8fd9\u4e2a\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u8f6f\u4ef6\u53ea\u80fd\u88ab\u8be5\u5f00\u53d1\u8005\u4e00\u4e2a\u4eba\u4f7f\u7528")),(0,n.kt)("p",null,"\u4e00\u4e0b\u6211\u4eec\u8be6\u7ec6\u63cf\u8ff0\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u90fd\u662f\u4e0e\u5177\u4f53\u7f16\u7a0b\u8bed\u8a00\u65e0\u5173\u7684\uff0c\u800c\u662f\u8bbe\u8ba1\u66f4\u5e95\u5c42\u7684\u4e00\u4e9b\u673a\u5236\u6216\u8005\u7ea6\u5b9a\uff0c\u4f8b\u5982\u65b9\u6cd5\u8c03\u7528\u7ea6\u5b9a\uff08Calling convention\uff09\u3002"),(0,n.kt)("h3",{id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236"},"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236"),(0,n.kt)("p",null,"\u65b9\u6cd5\u8c03\u7528\u662f\u7f16\u8bd1\u8fc7\u7a0b\u8981\u5904\u7406\u7684\u4e00\u4e2a\u91cd\u8981\u7684\u90e8\u5206\uff0c\u540c\u4e00\u4e2a\u65b9\u6cd5\u7684\u4ee3\u7801\u901a\u5e38\u7f16\u8bd1\u5230\u76f8\u90bb\u7684\u6307\u4ee4\u5e8f\u5217\u4e2d\uff0c\u5728\u5185\u5b58\u4e2d\u5904\u4e8e\u8fde\u7eed\u7684\u4f4d\u7f6e\uff0c\u56e0\u6b64CPU\u603b\u662f\u80fd\u591f\u6309\u987a\u5e8f\u6b63\u786e\u6267\u884c\u4e00\u4e2a\u65b9\u6cd5\u3002\u5373\u4f7f\u5bf9\u4e8e\u8df3\u8f6c\u8bed\u53e5\uff0c\u8df3\u8f6c\u5230\u4efb\u610f\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u5219\u610f\u5473\u7740\u540e\u7eed\u7684\u6267\u884c\u90fd\u5c06\u4ece\u65b0\u7684\u4f4d\u7f6e\u91cd\u65b0\u6309\u987a\u5e8f\u6267\u884c\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u8df3\u8f6c\u6307\u4ee4\u7528\u4e8e\u5c06\u5f53\u524d\u6307\u4ee4\u7684\u4f4d\u7f6e\u6539\u4e3a\u6307\u5411\u65b0\u7684\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u65b9\u6cd5\u8c03\u7528\u7684\u6d41\u7a0b\u5219\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u8df3\u8f6c\u6d41\u7a0b\uff0c\u5f53\u4e00\u4e2a\u51fd\u6570A\u4e2d\u7684\u67d0\u4e2a\u8bed\u53e5\u8c03\u7528\u51fd\u6570B\u65f6\uff0c\u7cfb\u7edf\u9700\u8981\u5c06\u6307\u4ee4\u6267\u884c\u8df3\u8f6c\u5230\u51fd\u6570B\u7684\u5f00\u59cb\u4f4d\u7f6e\uff0c\u540c\u65f6\u7b49\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u65f6\uff0c\u7cfb\u7edf\u8fd8\u9700\u8981\u80fd\u591f\u6b63\u786e\u8fd4\u56de\u5230\u51fd\u6570A\u4e2d\u540e\u7eed\u7684\u6307\u4ee4\u4f4d\u7f6e\u3002\u4e3a\u4e86\u80fd\u591f\u6b63\u786e\u5904\u7406\u4e0a\u8ff0\u7684\u6d41\u7a0b\uff0c\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u6d41\u7a0b\u4e2d\uff0c\u5bf9\u4e8e\u65b9\u6cd5\u7684\u8c03\u7528\uff0c\u5927\u591a\u6570\u662f\u4f7f\u7528\u4e00\u79cd\u76f8\u4e92\u534f\u4f5c\u7684\u673a\u5236\uff0c\u5373\u4f1a\u5728\u51fd\u6570A\u548c\u51fd\u6570B\u4e2d\u5206\u522b\u65b0\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u51fd\u6570A\u4e2d\u7684\u8c03\u7528\u4ee3\u7801\u5904\u8bbe\u7f6e\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\uff0c\u4f7f\u4e4b\u53ef\u4ee5\u8df3\u8f6c\u81f3\u51fd\u6570B\u7684\u4f4d\u7f6e\uff0c\u540c\u65f6\u5c06\u4e0b\u4e00\u6761\u8bed\u53e5\u7684\u5730\u5740\u4f20\u9012\u7ed9\u51fd\u6570B\uff0c\u4f7f\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u7cfb\u7edf\u53ef\u4ee5\u8fd4\u56de\u5230\u6b63\u786e\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570B\u4e2d\u5219\u4f1a\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff0c\u8be5\u4ee3\u7801\u9996\u5148\u4f1a\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5728\u51fd\u6570\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u6267\u884c\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\u4f7f\u4e4b\u8df3\u8f6c\u56de\u51fd\u6570A\u4e2d\u7684\u4e0b\u4e00\u6761\u8bed\u53e5")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u8fd4\u56de\u5730\u5740\u662f\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u51fd\u6570B\u5e76\u4e0d\u4f1a\u4fdd\u5b58\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u662f\u5c06\u8fd4\u56de\u5730\u5740\u5b58\u50a8\u5728\u6808\u4e2d\uff0c\u8fd9\u4e2a\u6808\u7684\u5730\u5740\u53ef\u4ee5\u540c\u65f6\u88abA\u548cB\u8bbf\u95ee\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51fd\u6570B\u53ef\u80fd\u4e0d\u9075\u5faa\u76f8\u5173\u7684\u7ea6\u5b9a\uff0c\u4f8b\u5982\u5b83\u53ef\u4ee5\u4fee\u6539\u8fd9\u4e2a\u8fd4\u56de\u51fd\u6570\u5730\u5740\uff0c\u4f7f\u4e4b\u6307\u5411\u4e0d\u5408\u6cd5\u7684\u4f4d\u7f6e\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u7684\u63a7\u5236\u6d41\u88ab\u7834\u574f\uff0c\u53ef\u80fd\u5f15\u8d77\u7a0b\u5e8f\u5d29\u6e83\u3002\u5728\u4e00\u4e9b\u7f13\u5b58\u6ea2\u51fa\u7684\u653b\u51fb\u4e2d\uff0c\u7834\u574f\u8005\u8fd8\u5229\u7528\u7f13\u5b58\u6ea2\u51fa\u6ce8\u5165\u7684\u51fd\u6570\u4ee3\u7801\uff0c\u4f7f\u7a0b\u5e8f\u6d41\u6307\u5411\u8fd9\u4e9b\u4ee3\u7801\u4ece\u800c\u53ef\u4ee5\u6267\u884c\u4e00\u4e9b\u975e\u6cd5\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2182-\u94fe\u63a5\u673a\u5236"},"2.18.2 \u94fe\u63a5\u673a\u5236"),(0,n.kt)("h3",{id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236"},"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236"),(0,n.kt)("h2",{id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"},"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("h1",{id:"3-reality-create"},"3. Reality Create"),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,"\u7b2c\u4e00\u76ee\u6807\u662f\u5168\u90e8\u7a0b\u5e8f\u52a8\u6001\u5316\uff0c\u4efb\u4f55\u6574\u4e2aCreation \u90fd\u53ef\u4ee5\u52a8\u6001\u4e0b\u8f7d\uff0c\u6240\u4ee5\u4e0d\u7528\u7f16\u5199C++\u4ee3\u7801\uff0c\u4e5f\u5c31\u610f\u5473\u7740\u5e95\u5c42\u5fc5\u987b\u9ad8\u5ea6\u4f18\u5316\uff0c\u811a\u672c\u7684\u8f6c\u6362\u90e8\u4efd\u4e5f\u8981\u9ad8\u5ea6\u4f18\u5316\uff0c\u53ef\u4ee5\u53bb\u9664\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u9762\u5411\u5bf9\u8c61\u5c5e\u6027"),(0,n.kt)("h2",{id:"31-creation-id"},"3.1 Creation ID"),(0,n.kt)("h2",{id:"32-creation-simulation"},"3.2 Creation Simulation"),(0,n.kt)("h2",{id:"33-ui\u7ec4\u4ef6"},"3.3 UI\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5c06UI\u5143\u7d20\u96c6\u4e8eCreation Script\u6784\u5efa\u6210\u7ec4\u4ef6\uff0c\u7136\u540e\u6574\u4e2a\u7f16\u8f91\u5668\u53ef\u4ee5\u96c6\u4e8eCreation Script\u6765\u521b\u5efa\uff0c\u5373\u6574\u4e2a\u7f16\u8f91\u5668\u5f53\u4f5c\u4e00\u4e2aCreation\u3002"),(0,n.kt)("p",null,"UI\u7ec4\u4ef6\u7684\u505a\u6cd5\u5176\u5b9e\u53ef\u4ee5\u6309\u71673D Renerer\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u552f\u4e00\u7684\u533a\u522b\u5c31\u662fCamera\u4e0d\u4e00\u81f4\uff0c3D\u7684\u6e32\u67d3\u90e8\u5206\u80af\u5b9a\u4e5f\u662f\u9700\u8981\u7ee7\u627f\u5230\u539f\u751fC++\u4ee3\u7801\u4e2d\uff0cUI\u6e32\u67d3\u5b8c\u5168\u4e5f\u662f\u7c7b\u4f3c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8f91\u5668\u4e2d\uff0c\u7f16\u8f91\u76f8\u5173\u7684\u529f\u80fd\u53ea\u662f\u5b58\u5728\u4e8e\u7f16\u8f91\u5668\u4e2d\uff0c\u4e0d\u4f1a\u5305\u542b\u5728\u8fd0\u884c\u65f6\uff0c\u8fd9\u5757\u4ecd\u7136\u9700\u8981\u5904\u7406\uff0c\u4f46\u662f\u81f3\u5c11\u6574\u4e2a\u7f16\u8f91\u5668\u7684\u6784\u5efa\u53ef\u4ee5\u4f7f\u7528\u7edf\u4e00\u7684\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u6709\u4e00\u90e8\u5206\u529f\u80fd\u662f\u7f16\u8f91\u5668\u7279\u6709\u7684\uff0c\u5305\u62ec\u4ee3\u7801\u7684\u63d0\u793a\uff0c\u8c03\u8bd5\u7b49\u7b49\u529f\u80fd\uff0c\u8fd9\u90e8\u5206\u5728Runtime\u90e8\u5206\u8fd8\u662f\u9700\u8981\u4ece\u865a\u62df\u673a\u4e2d\u62ff\u6389\u3002"),(0,n.kt)("h3",{id:"331-bevy-ui"},"3.3.1 Bevy UI"),(0,n.kt)("p",null,"A custom ECS-driven UI framework built specifically for Bevy"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Built directly on top of Bevy's ECS, Renderer, and Scene plugins"),(0,n.kt)("li",{parentName:"ul"},"Compose UIs dynamically in code or declaratively using the Bevy Scene format"),(0,n.kt)("li",{parentName:"ul"},'Use a familiar "flex box" model to layout your UIs')),(0,n.kt)("h3",{id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"},"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"),(0,n.kt)("h1",{id:"4-reality-world-niantic-opens-lightship-augmented-reality-platform-to-all-developers"},"4. Reality World ",(0,n.kt)("img",{alt:"niantic-opens-lightship-augmented-reality-platform-to-all-developers",src:l(7240).Z,width:"1200",height:"579"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6838\u5fc3\u4ea7\u54c1"),"\uff0c\u5c31\u662f\u4ee5\u73b0\u5b9e\u4e16\u754c\u7684\u5730\u9762\u5e73\u9762\u7279\u5f81\u4e3a\u5e95\u677f"),(0,n.kt)("p",null,"\u521b\u4f5c\u5143\u7d20\u3001\u6a21\u677f\u3001\u884c\u4e3a\u7ec4\u4ef6\u5206\u7c7b\u4e2d\u4ee5\u5efa\u7b51\u7c7b\u3001\u57ce\u5e02\u88c5\u626e\u7c7b\u4e3a\u6838\u5fc3\u6216\u8005\u4f18\u5148\uff0c\u4ee5\u5c0f\u4e16\u754c\u5408\u6210\u5927\u57ce\u5e02\u7684\u65b9\u5f0f\uff0c\u91cd\u65b0\u5b9a\u4e49\u6211\u4eec\u7684\u4e16\u754c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u5efa\u7b51\u4e4b\u5916\uff0c\u8fd8\u6709\u8bb8\u591a\u57ce\u5e02\u5143\u7d20\uff0c\u4f8b\u5982\u5e7f\u544a\uff0c\u4ea4\u901a"),(0,n.kt)("li",{parentName:"ul"},"\u57ce\u5e02\u4e3b\u9898\u7ed3\u6784\u5c06\u4e0d\u4ec5\u4ec5\u662f\u5efa\u7b51\uff0c\u53ef\u80fd\u975e\u5e38\u591a\u5947\u89c2\u521b\u9020\uff0c\u975e\u5e38\u591a\u5143"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u89c8\u57ce\u5e02\u5c06\u662f\u4e00\u79cd\u5f88\u72ec\u7279\u7684\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u6709\u673a\u5236\u5728\u57ce\u5e02\u4e2d\u6784\u9020\u6587\u5316")),(0,n.kt)("p",null,"\u540c\u65f6\u6574\u4e2a\u57fa\u7840\u4ecd\u7136\u662f\u53ef\u4ee5\u5c40\u90e8\u72ec\u7acb\u7269\u4f53\u53ef\u5206\u4eab\u7684\u65b9\u5f0f"),(0,n.kt)("p",null,"\u7b2c\u4e00\u671f\u4ea7\u54c1\u6574\u4f53\u4f1a\u6709\u4e09\u79cd\u4f53\u9a8c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5927\u7684\u73b0\u5b9e\u4e16\u754c"),(0,n.kt)("li",{parentName:"ul"},"\u72ec\u7acb\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5Code\u7684\u5f62\u5f0f\u521b\u9020\u5e73\u884c\u4e16\u754c")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u5efa\u7b51\u5185\u5bb9\u4e0d\u4f1a\u662f\u9759\u6001\u7684\uff0c\u5b83\u4f1a\u4e3a\u521b\u4f5c\u8005\u5e26\u6765\u6536\u76ca\uff0c\u6210\u957f\u6216\u8005\u5347\u7ea7\uff0c\u7c7b\u4f3c\u6a21\u62df\u7ecf\u8425\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u8fd9\u91cc\u4e3b\u8981\u662f\u9760\u521b\u9020\u7684\u827a\u672f\u6027\u3001\u6587\u5316\u6027\u7b49\uff0c\u901a\u8fc7\u521b\u9020\u7684\u72ec\u7acb\u6027\u5438\u5f15\u6d41\u91cf\uff0c\u4ece\u800c\u5f62\u6210\u533a\u57df\u7b49\u7ea7\u4e2d\u5fc3\u533a\u7b49\u7b49\uff0c\u8f83\u70ed\u95e8\u7684\u533a\u57df\u4f1a\u5e26\u6765\u66f4\u9ad8\u7684\u6536\u76ca\uff0c\u5f62\u6210\u57ce\u5e02\u6587\u5316\uff08\u521b\u4f5c\u672c\u8eab\u8574\u542b\u7740\u6587\u5316\uff09\uff0c\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5f62\u6210\u533a\u57df\u534f\u4f5c\uff0c\u5171\u540c\u5b9a\u4e49\u4e00\u4e9b\u6587\u5316\uff0c\u53ef\u4ee5\u7c7b\u4f3cEverdale\u673a\u5236\u534f\u4f5c\u5171\u5efa"),(0,n.kt)("p",null,"\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u505a\u6cd5\uff0c\u878d\u5165\u5efa\u9020\u548c\u6a21\u62df\u7ecf\u8425\uff0c\u5168\u9762\u5efa\u8bbe\u57ce\u5e02\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u9650\u5236\u8d44\u6e90\u7c7b\u578b\uff0c\u9f13\u52b1\u4ea4\u6613\uff0c\u9f13\u52b1\u5408\u4f5c\uff0c\u4fbf\u6e38\u620f\u4e00\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ea\u878d\u5165\u5c11\u91cf\u6e38\u620f\u5143\u7d20\uff0c\u4ee5\u521b\u9020\u4e3a\u6781\u9650\uff0c\u4e0d\u9650\u5236\u8d44\u6e90")),(0,n.kt)("p",null,"\u524d\u8005\u65e9\u671f\u53d1\u5c55\u66f4\u5feb\uff0c\u540e\u8005\u65e9\u671f\u53c2\u4e0e\u8f83\u5f31\uff0c\u53ef\u4ee5\u4e24\u8005\u7ed3\u5408"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&app=appid&cam=6dof"},"http://creation.id/=qwe&app=appid&cam=6dof")),(0,n.kt)("p",null,"\u5750\u6807\u7684\u6982\u5ff5\u4f7f\u5f97\u5927\u5bb6\u53ef\u4ee5\u5728RealityWorld \u4e4b\u5916\u5927\u91cf\u5ba3\u4f20\u4e00\u4e2a\u5730\u70b9\uff0c\u5c31\u5728\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u751a\u81f3\u5927\u5bb6\u56de\u53bb\u627e\u8fd9\u6837\u7684\u653b\u7565\u548c\u5217\u8868\uff0c\u800c\u4e0d\u662f\u901a\u8fc7\u91cc\u9762\u7684\u6e38\u89c8"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u6253\u5f00\u5f53\u524d\u4f4d\u7f6e\uff0c\u6240\u4ee5\u53bb\u54ea\u91cc\u90fd\u53ef\u4ee5\u770b\u770b"),(0,n.kt)("h2",{id:"41-reality-id"},"4.1 Reality ID"),(0,n.kt)("p",null,"\u7528\u6237\u4e2d\u5fc3"),(0,n.kt)("h3",{id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406"},"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u7248\u672c\u5347\u7ea7\uff0c\u7b49\u7b49\uff0c\u4fdd\u8bc1\u7ec4\u4ef6\u662f\u6700\u65b0\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7f16\u8bd1\u4e4b\u540e\u5217\u51fa\u6240\u6709\u95ee\u9898\uff0c\u7528\u6237\u4e5f\u53ef\u4ee5\u76f4\u63a5\u53d1\u9001\u4fe1\u606f\u7ed9\u5f00\u53d1\u8005\uff0c\u8981\u6c42\u66f4\u65b0\u7ec4\u4ef6\u4ee5\u652f\u6301\u67d0\u4e9b\u65b0\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u662f\u7528\u6237\u5bf9\u8c61\u7f16\u8bd1\u53d1\u751f\u7684\u5730\u65b9\uff0c\u56e0\u4e3a\u8fd9\u91cc\u8bbe\u7f6e\u7684\u4e1c\u897f\u57fa\u672c\u4e0a\u4e0d\u4f1a\u518d\u4fee\u6539\uff0c\u5f53\u7136\u4e5f\u5e94\u8be5\u652f\u6301\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u7f16\u8bd1\uff0c\u8fd9\u79cd\u662f\u5c11\u6570\u60c5\u51b5"),(0,n.kt)("h3",{id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406"},"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406"),(0,n.kt)("h2",{id:"42-the-reality-world-app"},"4.2 The Reality World app"),(0,n.kt)("h3",{id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"},"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"realworld",src:l(2853).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5bf9\u4e8e\u5143\u5b87\u5b99\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u4efb\u610f\u7684\u865a\u62df\u4e16\u754c\uff0c\u4f46\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u81f3\u5c11\u6709\u4ee5\u4e0b\u7f3a\u9677\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5c06\u6839\u73b0\u5b9e\u4e16\u754c\u5b8c\u5168\u8131\u8282\uff0c\u8fd9\u79cd\u5272\u88c2\u611f\u4f1a\u975e\u5e38\u5927\uff0c\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u91cc\u9762\u7684\u5185\u5bb9\u5f88\u96be\u8ddf\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e2a\u8054\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u8981\u60f3\u8ba9\u672a\u6765\u76843D\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u8fd9\u4e2a\u865a\u62df\u4e16\u754c\u4e00\u5b9a\u662f\u548c\u73b0\u5b9e\u4e16\u754c\u6709\u5173\u8054\u7684\uff0c\u5426\u5219\u5b83\u5c31\u6446\u8131\u4e0d\u4e86\u7c7b\u4f3c\u6e38\u620f\u7684\u6982\u5ff5\uff0c\u4eba\u4eec\u628a\u5b83\u5f53\u505a\u4e00\u4e2a\u4e13\u95e8\u7684\u5a31\u4e50\u65b9\u5f0f\uff0c\u5076\u5c14\u8fdb\u53bb\u4f53\u9a8c\u4e00\u4e0b\uff0c\u800c\u4e0d\u662f\u65f6\u65f6\u8ddf\u5b83\u4fdd\u6301\u8054\u7cfb\u548c\u8fde\u63a5"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4fc3\u8fdb\u5730\u7406\u4e0a\u9760\u8fd1\u7684\u4eba\u4e4b\u95f4\u8fdb\u884c\u4e92\u52a8\uff0c\u5728\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u4e2d\uff0c\u771f\u5b9e\u7684\u5730\u7406\u4f4d\u7f6e\u5728\u5176\u4e2d\u65e0\u6cd5\u4ea7\u751f\u8f83\u597d\u7684\u5173\u8054\uff0c\u56e0\u6b64\u5b83\u4eec\u7684\u4e92\u52a8\u901a\u5e38\u53ea\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u597d\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\uff0c\u6216\u8005\u8bf4\u901a\u8fc7\u67d0\u4e9b\u6e38\u620f\u5185\u5bb9\u7684\u673a\u5236\u4fc3\u8fdb\u7684\u5177\u6709\u7c7b\u4f3c\u7231\u597d\u548c\u5174\u8da3\u7684\u964c\u751f\u4eba\u4e4b\u95f4\u7684\u4e92\u52a8\u3002\u4f46\u662f\u57ce\u5e02\u4f5c\u4e3a\u4e00\u4e2a\u91cd\u8981\u7684\u6587\u5316\u8f7d\u4f53\u548c\u7b26\u53f7\uff0c\u5b83\u672c\u8eab\u4e5f\u662f\u5177\u6709\u4e30\u5bcc\u7684\u4fe1\u606f\u5728\u91cc\u9762\u7684\uff0c\u800c\u4e14\u4eba\u4e0e\u57ce\u5e02\u4e4b\u95f4\u7684\u5173\u7cfb\u662f\u73b0\u4ee3\u6587\u660e\u4e2d\u4eba\u7c7b\u4e0d\u53ef\u5ffd\u89c6\u7684\u91cd\u8981\u4f53\u9a8c\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u6240\u4ee5\u600e\u6837\u5229\u7528\u597d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5730\u7406\u5173\u7cfb\uff0c\u4e5f\u662f\u672a\u6765\u5143\u5b87\u5b99\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6210\u4e00\u90e8\u5206\u7684\u91cd\u8981\u90e8\u5206\u4e4b\u4e00"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5143\u5b87\u5b99\u4f5c\u4e3a\u73b0\u5b9e\u4e16\u754c\u7684\u5ef6\u5c55\uff0c\u5176\u5b9e\u524d\u9762\u4e24\u90e8\u5206\u90fd\u8bf4\u660e\u4e86\uff0c\u771f\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u5173\u8054\u548c\u5173\u7cfb\uff0c\u4f1a\u6210\u4e3a\u672a\u6765\u5143\u5b87\u5b99\u91cd\u8981\u7684\u6838\u5fc3\u673a\u5236\uff0c\u5426\u5219\u5b83\u4e0d\u4ec5\u4f1a\u5bf9\u6211\u4eec\u7684\u751f\u6d3b\u9020\u6210\u5272\u88c2\uff0c\u5e76\u4e14\u5b83\u65e0\u6cd5\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u5c31\u50cf\u4eca\u5929\u7684\u6cdb\u5a31\u4e50\u7c7b\u5e94\u7528\u5982\u6296\u97f3\u3001\u5fae\u4fe1\u7b49\u3002\u5e76\u4e14\u4f5c\u4e3a\u672a\u6765\u79d1\u6280\u751f\u6d3b\u91cd\u8981\u7684\u4e00\u9762\uff0c\u6211\u4eec\u5e0c\u671b\u5b83\u8981\u80fd\u591f\u7528\u6765\u63d0\u5347\u4eba\u4eec\u7684\u751f\u6d3b\u54c1\u8d28\uff0c\u8fd9\u5305\u62ec\u4e24\u4e2a\u5c42\u9762\uff1a\u4f7f\u4eba\u4eec\u611f\u5230\u66f4\u52a0\u5feb\u4e50\uff0c\u4ee5\u53ca\u5e2e\u52a9\u4eba\u4eec\u63d0\u4f9b\u66f4\u52a0\u4e30\u5bcc\u7684\u6570\u5b57\u5316\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u5c06\u4ee5\u73b0\u5b9e\u4e16\u754c\u771f\u5b9e\u5730\u56fe\u4e3a\u5e95\u677f\u8fdb\u884c\u6253\u9020\uff0c\u4ee5\u56f4\u7ed5\u73b0\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u7d27\u5bc6\u8054\u7cfb\u4e3a\u6838\u5fc3\u8bbe\u8ba1\u539f\u5219\uff0c\u5f00\u53d1\u80fd\u591f\u901a\u8fc7\u5143\u5b87\u5b99\u7684\u4e30\u5bcc\u6570\u5b57\u5316\u673a\u5236\u6765\u63d0\u5347\u4eba\u4eec\u751f\u6d3b\u54c1\u8d28\u7684\u5f00\u653e\u865a\u62df\u4e16\u754c\u3002"),(0,n.kt)("h4",{id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"},"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"),(0,n.kt)("p",null,"Reality World\u4e16\u754c\u7684\u5e95\u5ea7\u662f\u771f\u5b9e\u4e16\u754c\u7684\u5e73\u9762\u5730\u56fe\uff0c\u5e76\u4e14\u4fdd\u7559\u57ce\u5e02\u4e3b\u8981\u7684\u9053\u8def\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u505a\u6709\u51e0\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u865a\u62df\u4e16\u754c\u8ddf\u771f\u5b9e\u4e16\u754c\u662f\u6709\u5173\u8054\u7684\uff0c\u8fd9\u79cd\u5173\u8054\u4e0d\u4ec5\u662f\u6307\u5730\u7406\u4e0a\u7684\u4f4d\u7f6e\u5173\u8054\uff0c\u800c\u662f\u6211\u4eec\u6709\u673a\u4f1a\u53bb\u8868\u8fbe\u8ddf\u4e00\u4e2a\u57ce\u5e02\u76f8\u5173\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u5f53\u524d\u57ce\u5e02\u7684\u67d0\u4e9b\u6307\u6570\uff0c\u57ce\u5e02\u7684\u4e00\u4e9b\u6587\u5316\u98ce\u8c8c\uff0c\u53ef\u4ee5\u62bd\u8c61\u6210\u67d0\u79cd\u6e38\u620f\u673a\u5236\uff0c\u8fd9\u6837\u540c\u4e00\u4e2a\u57ce\u5e02\u4e2d\u7684\u5e02\u6c11\u90fd\u53ef\u4ee5\u611f\u53d7\u5230\u7c7b\u4f3c\u7684\u4e0e\u8be5\u5ea7\u57ce\u5e02\u72ec\u6709\u7684\u4f53\u9a8c\u3002\u8fd9\u4e9b\u4f53\u9a8c\u5f80\u5f80\u90fd\u662f\u5173\u4e8e\u73b0\u5b9e\u7684\u4fe1\u606f\uff0c\u5b83\u5305\u542b\u4eba\u4e0e\u57ce\u5e02\u548c\u5468\u56f4\u73af\u5883\u548c\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6240\u4ee5\u8fd9\u79cd\u673a\u5236\u5f62\u6210\u4e86\u5bf9\u73b0\u5b9e\u7684\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u6700\u91cd\u8981\u7684\u662f\u5173\u7cfb\uff0c\u5730\u7406\u4f4d\u7f6e\u662f\u4e00\u79cd\u91cd\u8981\u7684\u5173\u7cfb\uff0c\u5b83\u4e0d\u4ec5\u4ec5\u662f\u4f4d\u7f6e\u7684\u5173\u7cfb\uff0c\u5b83\u662f\u4e00\u79cd\u628a\u5927\u5bb6\u62c9\u5728\u4e00\u8d77\uff0c\u8fd9\u91cc\u7684\u4eba\u90fd\u6709\u5171\u540c\u7684\u4e00\u4e9b\u8ba4\u77e5\u7684\u5173\u7cfb\u3002\u6240\u4ee5\u5730\u7406\u4f4d\u7f6e\u5b9e\u9645\u4e0a\u9690\u85cf\u7740\u5f88\u591a\u4fe1\u606f\uff0c\u662f\u975e\u5e38\u91cd\u8981\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u771f\u5b9e\u4e16\u754c\u4e0d\u4e00\u6837\uff0c\u771f\u5b9e\u4e16\u754c\u7684\u5916\u89c2\u548c\u7ec6\u8282\u5728\u865a\u62df\u4e16\u754c\u4e2d\u4e0d\u662f\u6700\u91cd\u8981\u7684\uff0c\u4eba\u4eec\u5e0c\u671b\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u4e16\u754c\uff0c\u4eba\u4eec\u5e0c\u671b\u80fd\u591f\u6539\u53d8\u73b0\u5b9e\u4e16\u754c\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\uff0c\u4eba\u4eec\u6709\u53ef\u80fd\u521b\u9020\u51fa\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u865a\u62df\u4e16\u754c\uff0c\u8fd9\u4e2a\u4e16\u754c\u4ee3\u8868\u7740\u4eba\u4eec\u671f\u671b\u3001\u5411\u5f80\u548c\u60f3\u8c61\u4e2d\u7684\u4e00\u4e2a\u4e16\u754c\u3002\u4e5f\u4ee3\u8868\u7740\u4eba\u4eec\u5bf9\u73b0\u5b9e\u4e16\u754c\u4ee5\u53ca\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u601d\u8003\u3002"),(0,n.kt)("p",null,"\u4e0d\u8fc7\uff0c\u4e0e\u865a\u62df\u4e16\u754c\u4e2d\u7684\u5efa\u7b51\u7269\u7b49\u5916\u89c2\u4e0d\u4e00\u6837\u7c7b\u4f3c\uff0c\u5c3d\u7ba1\u5730\u9762\u7684\u9053\u8def\u4f4d\u7f6e\u662f\u4fdd\u7559\u7684\uff0c\u4f46\u662f\u9053\u8def\u7684\u540d\u79f0\u662f\u53ef\u4ee5\u66f4\u6539\u7684\u3002\u8fd9\u662f\u4e16\u754c\u7684\u9053\u8def\u7ed3\u6784\u53ca\u5176\u89c6\u89c9\u4f4d\u7f6e\u80fd\u591f\u5e2e\u52a9\u4eba\u4eec\u5728\u865a\u62df\u4e16\u754c\u66f4\u597d\u5730\u5bfc\u822a\uff0c\u6240\u4ee5\u5373\u4fbf\u8fd9\u4e9b\u9053\u8def\u7684\u540d\u5b57\u88ab\u4fee\u6539\u4e86\uff0c\u4eba\u4eec\u4ecd\u7136\u80fd\u591f\u5f88\u597d\u5730\u5173\u8054\u5b83\u4eec\u3002\u4f46\u662f\u5982\u679c\u8fd9\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u800c\u5de8\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u4eba\u4eec\u5219\u5f88\u96be\u8bb0\u4f4f\u90a3\u4e48\u591a\u7684\u5730\u5740\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u5143\u5b87\u5b99\u4e16\u754c\u5c06\u80fd\u591f\u63d0\u5347\u4eba\u4eec\u73b0\u5b9e\u751f\u6d3b\u7684\u751f\u6d3b\u54c1\u8d28\u3002"),(0,n.kt)("h4",{id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"},"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"),(0,n.kt)("p",null,"\u5730\u7406\u4e0d\u4ec5\u4ec5\u662f\u5730\u56fe\u4e0a\u7684\u4f4d\u7f6e\uff0c\u5b83\u8574\u85cf\u7740\u5f88\u591a\u610f\u4e49\uff0c\u51e0\u4e4e\u53ef\u4ee5\u8bf4\u8ddf\u6211\u4eec\u5927\u90e8\u5206\u7684\u65e5\u5e38\u751f\u6d3b\uff0c\u4ee5\u53ca\u65e5\u5e38\u751f\u6d3b\u4e4b\u5916\u66f4\u91cd\u8981\u7684\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\u5c42\u9762\uff0c\u8fd9\u4e9b\u4fe1\u606f\u66f4\u52a0\u91cd\u8981\uff0c\u5b83\u5173\u4e4e\u4eba\u7684\u60c5\u611f\u3001\u60c5\u7eea\u3001\u5bf9\u751f\u6d3b\u7684\u4f53\u9a8c\u548c\u54c1\u8d28\u7b49\u3002"),(0,n.kt)("p",null,"\u771f\u5b9e\u4e16\u754c\u662f\u5173\u4e8e\u5927\u5bb6\u901a\u8fc7\u4e00\u5b9a\u76f8\u90bb\u7684\u5730\u7406\u4f4d\u7f6e\u5f7c\u6b64\u805a\u5728\u4e00\u8d77\uff0c\u7136\u540e\u56e0\u6b64\u800c\u5171\u540c\u5173\u5fc3\u548c\u5173\u6ce8\u67d0\u4e9b\u76f8\u540c\u7684\u4e8b\u60c5\uff0c\u8fdb\u800c\u5f62\u6210\u67d0\u4e9b\u76f8\u5173\u8054\u7684\u5173\u7cfb\u3001\u4fe1\u7528\u3001\u4e16\u754c\u89c2\u3001\u6587\u5316\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6709\u65f6\u5019\u6211\u4eec\u8ddf\u5468\u56f4\u7684\u4eba\u5e76\u4e0d\u76f4\u63a5\u8ba4\u8bc6\uff0c\u4f46\u662f\u6211\u4eec\u8ddf\u4ed6\u4eec\u4e4b\u95f4\u4ecd\u7136\u6f5c\u85cf\u8fd9\u67d0\u4e9b\u8054\u7cfb\uff0c\u8fd9\u4e9b\u8054\u7cfb\u5e76\u4e0d\u4e00\u5b9a\u662f\u663e\u5f0f\u53ef\u89c1\u7684\uff0c\u4f46\u662f\u5b83\u4eec\u5374\u662f\u5ba2\u89c2\u5b58\u5728\u7684\u3002\u7136\u800c\u5bf9\u4e8e\u8fdc\u5728\u4e00\u4e2a\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u7684\u5730\u65b9\uff0c\u6240\u6709\u8fd9\u4e9b\u8054\u7cfb\u90fd\u4e0d\u5b58\u5728\uff0c\u6216\u8005\u8bf4\u5f88\u5f31\u3002\u6bd4\u5982\u8bf4\u5bf9\u4e8e\u6240\u6709\u4e2d\u56fd\u4eba\uff0c\u6211\u4eec\u4e4b\u95f4\u4ecd\u7136\u5b58\u5728\u4e00\u4e9b\u8054\u7cfb\u548c\u5173\u7cfb\uff0c\u4f46\u662f\u5bf9\u4e8e\u5927\u90e8\u5206\u4eba\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f88\u5f31\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5730\u7406\u4fe1\u606f\u751a\u81f3\u662f\u6bd4\u4eb2\u60c5\u66f4\u91cd\u8981\u7684\u610f\u4e49\uff0c\u4eb2\u60c5\u4e4b\u95f4\u7684\u8054\u7cfb\u53cd\u800c\u662f\u6bd4\u8f83\u7b80\u5355\u7684\uff0c\u6211\u4eec\u5927\u90e8\u5206\u7684\u60c5\u611f\u548c\u7cbe\u529b\u4e5f\u8bb8\u4f1a\u66f4\u591a\u82b1\u5728\u8fd9\u79cd\u57fa\u4e8e\u5730\u7406\u4f4d\u7f6e\u4fe1\u606f\u4e0a\u3002\u5f53\u7136\u6211\u4eec\u628a\u540c\u4e8b\u7b49\u5173\u7cfb\u4e5f\u5f52\u7ed3\u5230\u5730\u7406\u4fe1\u606f\u76f8\u5173\uff0c\u4f8b\u5982\u6211\u4eec\u8ddf\u53e6\u4e00\u4e2a\u57ce\u5e02\u7684\u540c\u4e8b\u5f80\u5f80\u6ca1\u6709\u672c\u5730\u540c\u4e8b\u4e4b\u95f4\u5173\u7cfb\u90a3\u4e48\u7d27\u5bc6\u3002\u540c\u6837\u7684\uff0c\u672c\u5730\u540c\u5b66\u4e4b\u95f4\u901a\u5e38\u4e5f\u8981\u6bd4\u5176\u4ed6\u57ce\u5e02\u7684\u540c\u5b66\u4e4b\u95f4\u5173\u7cfb\u7d27\u5bc6\uff0c\u56e0\u4e3a\u4ed6\u4eec\u4e4b\u95f4\u66f4\u6709\u53ef\u80fd\u4f1a\u6709\u66f4\u591a\u7684\u8054\u7cfb\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5143\u5b87\u5b99\u600e\u6837\u8868\u8fbe\u8fd9\u4e9b\u610f\u4e49\u5462"),"\uff1f"),(0,n.kt)("p",null,"\u5730\u7406\u4fe1\u606f\uff0c\u6216\u8005\u8bf4\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\uff0c\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u4fe1\u606f\uff0c\u53c2\u89c1\u7b2c4.10.1\u8282\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5f88\u96be\u7528\u4f20\u7edf\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u6709\u65f6\u5019\u751a\u81f3\u4e5f\u5f88\u96be\u4f7f\u7528\u7535\u5f71\u6216\u8005\u5c0f\u8bf4\u8fd9\u79cd\u53d9\u4e8b\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\u3002\u7531\u7b2c4.10.3\u8282\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u4fe1\u606f\u7c7b\u578b\u6700\u597d\u7684\u8868\u8fbe\u7684\u65b9\u5f0f\u662f\u80fd\u591f\u6a21\u62df\u590d\u6742\u7cfb\u7edf\u673a\u5236\u7684\u6e38\u620f\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5728Reality World\u4e2d\uff0c\u53ea\u8981\u6211\u4eec\u63d0\u4f9b\u8db3\u591f\u597d\u7684\u5e73\u53f0\u6280\u672f\uff0c\u8ba9\u666e\u901a\u5927\u4f17\u80fd\u591f\u8868\u8fbe\u81ea\u5df1\u7684\u673a\u5236\uff0c\u5c31\u80fd\u591f\u91ca\u653e\u8fd9\u79cd\u80fd\u529b\uff0c\u56e0\u4e3a\u5927\u4f17\u4e0d\u540c\u7684\u4eba\u80fd\u591f\u62bd\u8c61\u63d0\u70bc\u51fa\u8fd9\u79cd\u5173\u7cfb\u3002\u4ece\u800c\u5f62\u6210\u5173\u4e8e\u8fd9\u4e9b\u5173\u7cfb\u7684\u8868\u8fbe\u3002"),(0,n.kt)("h4",{id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"},"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c14.2.3\u8282\u4f20\u9001\u95e8"),(0,n.kt)("h3",{id:"422-\u4f20\u9001\u95e8"},"4.2.2 \u4f20\u9001\u95e8"),(0,n.kt)("p",null,"\u7531\u4e8e\u5730\u56fe\u7684\u9650\u5236\uff0c\u4ee5\u53ca\u590d\u6742\u5ea6\u7684\u63a7\u5236\uff0c\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\u7684\u4f20\u9001\u95e8\u673a\u5236\uff0c\u70b9\u51fb\u53ef\u4ee5\u8fdb\u5165\u79c1\u6709\u7684Creation"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7ba1\u662fReality World\u4e2d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u4e2a\u4eba\u72ec\u7acb\u7684Creation")),(0,n.kt)("p",null,"\u8fd9\u6837Reality World\u66f4\u50cf\u662f\u4e00\u4e2a\u591a\u91cd\u865a\u62df\u4e16\u754c\u7684\u5165\u53e3\uff0c\u4ed6\u53ef\u4ee5\u53bb\u5230\u5f88\u591a\u4e0d\u540c\u7684\u865a\u62df\u4e16\u754c\uff0c\u6bcf\u4e2a\u72ec\u7acb\u865a\u62df\u4e16\u754c\u5177\u6709\u66f4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\uff0c\u6bd4\u5982\u5728\u5b89\u5168\u65b9\u9762\u6ca1\u6709\u66f4\u591a\u7684\u9650\u5236\uff0c\u6bd4\u5982\u53ef\u4ee5\u4f7f\u7528\u66b4\u529b\uff0c\u6709\u574f\u4eba\uff0c\u5bb9\u6613\u906d\u5230\u653b\u51fb\u7b49\u7b49\u3002\u8fd9\u4e9b\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u662f\u4e00\u4e2a\u5e7f\u544a\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u4e00\u4e2a\u72ec\u7acb\u7684\u6e38\u620f\uff0c\u4e00\u4e2a\u5176\u4ed6\u4e92\u52a8\u5185\u5bb9\u7b49\u7b49\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"virtual-and-reality",src:l(2729).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7531\u4e8eReality World\u4e3b\u8981\u662f\u57fa\u4e8e\u73b0\u5b9e\u5730\u677f\uff0c\u56e0\u6b64\u5f62\u6210\u4e00\u79cd\u865a\u62df\u4e0e\u73b0\u5b9e\u7ed3\u5408\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"423-point-and-click"},"4.2.3 Point and Click"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u64cd\u63a7\uff0c\u53ef\u4ee5\u4f7f\u7528Point and Click\u6a21\u5f0f\u4e3a\u9ed8\u8ba4\u4e3b\u6a21\u5f0f\u3002"),(0,n.kt)("h2",{id:"43-\u6e90\u52a8\u529b"},"4.3 \u6e90\u52a8\u529b"),(0,n.kt)("h3",{id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"},"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5176\u4ed6\u5927\u4e16\u754c\uff0c\u56fa\u5b9a\u7684\u6a21\u5f0f\uff0c\u6a21\u677f\uff0c\u7528\u6237\u5b8c\u5168\u53ef\u4ee5\u81ea\u5b9a\u4e49\u81ea\u5df1\u6240\u5c5e\u7684\u4efb\u4f55\u4e1c\u897f\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u521b\u4f5c\u7684\u5efa\u7b51\u53ef\u4ee5\u6709\u5b8c\u5168\u4e0d\u540c\u7684\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u7684Avatar\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e0d\u540c\u7684\u884c\u4e3a")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u79cd\u81ea\u7531\u6027\u4ea7\u751f\u4e86\u4e24\u4e2a\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63a7\u5236\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4f53\u9a8c\uff0c\u81ea\u5df1\u8bbe\u8ba1\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u4e16\u754c\u7684\u4f53\u9a8c\u4f1a\u66f4\u52a0\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u53ef\u9884\u671f\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7528\u6237\u5c55\u793a\u7ed9\u5176\u4ed6\u73a9\u5bb6\u7684\u5185\u5bb9\u4e5f\u662f\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u56fa\u5b9a\u7684\u6a21\u677f")),(0,n.kt)("h3",{id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"},"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"),(0,n.kt)("p",null,"\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e2a\u66f4\u63a5\u8fd1\u771f\u5b9e\u793e\u4f1a\u7684\u7ecf\u6d4e\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u4f7f\u5f97Reality World\u91cc\u9762\u7684\u7ecf\u6d4e\u751f\u4ea7\u80fd\u591f\u6839\u636e\u5e02\u573a\u884c\u4e3a\uff0c\u4f7f\u4f18\u79c0\u7684\u5185\u5bb9\u66f4\u52a0\u83b7\u76ca\uff0c\u4ece\u800c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u66f4\u52a0\u6d3b\u8dc3\u548c\u7e41\u8363\uff0c\u6765\u4e3a\u4e0d\u540c\u7684\u7528\u6237\u521b\u9020\u4ef7\u503c\u3002"),(0,n.kt)("h4",{id:"4321-\u6301\u7eed\u7ecf\u6d4e"},"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u5e02\u573a\uff0c\u6784\u5efa\u6301\u7eed\u6d88\u8d39\u7684\u7ecf\u6d4e\u4f53\u5236\u6765\u662f\u5f00\u53d1\u8005\u83b7\u76ca\u66f4\u591a\uff0c\u5e76\u4e14\u53ef\u4ee5\u6301\u7eed\u83b7\u76ca\u3002\u53c2\u89c11.4.5\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"4322-\u5e7f\u544a\u5185\u5bb9"},"4.3.2.2 \u5e7f\u544a\u5185\u5bb9"),(0,n.kt)("p",null,"\u901a\u8fc7\u63d0\u4f9b\u72ec\u7279\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5e7f\u544a\u8bed\u4ea7\u54c1\u878d\u4e3a\u4e00\u4f53\uff0c\u63d0\u5347\u5e7f\u544a\u7684\u6548\u679c\uff0c\u4ece\u800c\u63d0\u9ad8\u9500\u552e\u6570\u91cf\u3002\u89c11.4.2\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"},"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"),(0,n.kt)("p",null,"\u6807\u51c6\u4f5c\u8005\u662fReality World\u91cc\u9762\u6700\u5177\u4ef7\u503c\u7684\u7528\u6237\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u5177\u6709\u5bf9\u73b0\u5b9e\u4e16\u754c\u6700\u9ad8\u7684\u62bd\u8c61\u548c\u8bbe\u8ba1\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u62bd\u8c61\u80fd\u529b\u4f7f\u5f97Reality World\u7684\u4f53\u9a8c\u80fd\u591f\u8fdb\u5316\u5f97\u8d8a\u6765\u8d8a\u597d\uff0c\u5e76\u4e14\u8986\u76d6\u7684\u8303\u56f4\u4f1a\u8d8a\u6765\u8d8a\u4e30\u5bcc"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u7ef4\u6301\u8fd9\u79cd\u5229\u76ca\uff0c\u6807\u51c6\u4f5c\u8005\u8fd8\u4f1a\u5f88\u597d\u5730\u7ef4\u62a4\u6807\u51c6\u793e\u533a\u7ec4\u4ef6\u7684\u5f00\u53d1")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e73\u53f0\u9700\u8981\u7ed9\u6807\u51c6\u4f5c\u8005\u6700\u9ad8\u7684\u7ecf\u6d4e\u5229\u76ca\uff0c\u53ea\u6709TA\u4eec\u624d\u4f1a\u4f7f\u6574\u4e2a\u5e73\u53f0\u8d8a\u6765\u8d8a\u5065\u5eb7\u3002"),(0,n.kt)("h2",{id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743"},"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743"),(0,n.kt)("p",null,"USD\u7684\u597d\u5904\u5728\u4e8e\uff0c\u53ef\u4ee5\u628a\u6bcf\u4e2a\u7528\u6237\u81ea\u5df1\u521b\u4f5c\u7684Creation\u4fdd\u5b58\u4e3a\u72ec\u7acb\u7684\u6587\u4ef6\uff0c\u8fd9\u6837\u65b9\u4fbf\u72ec\u7acb\u7684\u7f16\u8f91\u3001\u66f4\u65b0\u751a\u81f3\u5220\u9664\uff1b\u7136\u540e\u53c8\u53ef\u4ee5\u628a\u6240\u6709\u7528\u6237\u7684\u5185\u5bb9\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u5b83\u4eec\u7684\u76f8\u5bf9\u5750\u6807\u4f4d\u7f6e\u7b49\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u6837\u4e00\u4e2a\u5927\u4e16\u754c\u4e2d\uff0c\u6743\u9650\u6709\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u662f\u5bf9\u4e8e\u5355\u4e2a\u7528\u6237\u81ea\u5df1\u7684Creation\uff0c\u5176\u4e2d\u7684\u7ec4\u4ef6\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u5f00\u53d1\u8005\uff0c\u8fd9\u4e9b\u4e0d\u540c\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u80fd\u9700\u8981\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u662f\u5f53\u5c06\u6240\u6709\u7528\u6237\u7684Creation\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\u4e2d\uff0c\u5b83\u4eec\u53ef\u80fd\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u8fd9\u65f6\u5019\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u975e\u6cd5\u7684\u8bbf\u95ee")),(0,n.kt)("p",null,"\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u6765\u8bf4\uff0c\u6211\u4eec\u771f\u6b63\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u540e\u8005\u3002\u5373\u662f\u8bf4\uff0c\u5bf9\u4e8e\u524d\u8005\u6765\u8bb2\uff0c\u5c3d\u7ba1\u7528\u6237\u4f7f\u7528\u4e86\u591a\u4e2a\u5f00\u53d1\u8005\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u4f46\u662f\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u6700\u7ec8\u7684Creation\u90fd\u662f\u4ed6\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u4fdd\u8bc1\u7684\u662f\u6240\u6709\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\u662f\u5426\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\uff0c\u800c\u4e0d\u662f\u53bb\u5206\u914d\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8bbf\u95ee\u6743\u9650\uff1a\u4e00\u662f\u672c\u8d28\u4e0a\u7ec4\u4ef6\u8bbf\u95ee\u7684\u90fd\u662f\u4ed6\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e8c\u662f\u8fd9\u6837\u7684\u5173\u5fc3\u6d89\u53ca\u5230\u4e86\u4ee3\u7801\u7684\u7ec4\u7ec7\u548c\u5f00\u53d1\u903b\u8f91\uff0c\u8fd9\u4e0d\u662f\u7528\u6237\u5e94\u8be5\u5173\u5fc3\u7684\u3002\u4f46\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u786e\u5b9e\u4f1a\u5b58\u5728\u6709\u4e9b\u6076\u610f\u7ec4\u4ef6\u7834\u8bdd\u6570\u636e\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u5e94\u8be5\u5c0f\u5fc3\u5ba1\u6838\u7ec4\u4ef6\uff0c\u5e76\u4e14\u4f9d\u9760\u4e3e\u62a5\u7b49\u65b9\u5f0f\u76d1\u7ba1\u3002\u8fd9\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u76d1\u7ba1\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u8ba4\u4e3a\u4ed6\u4f7f\u7528\u7684\u7ec4\u4ef6\u5e94\u8be5\u90fd\u662f\u5b89\u5168\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u8d85\u51fa\u4e86\u7528\u6237\u7684\u9884\u671f\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u5e0c\u671b\u53ea\u8bfb\uff0c\u4f46\u662f\u8be5\u7ec4\u4ef6\u786e\u5b9e\u8bfb\u548c\u5199\u3002\u8fd9\u6837\u7684\u60c5\u51b5\u4e5f\u5e94\u8be5\u662f\u6b63\u5e38\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u5bf9\u53d8\u91cf\u7684\u8bbf\u95ee\u6743\u9650\u672c\u8eab\u662f\u5305\u542b\u5728\u7ec4\u4ef6\u7684\u903b\u8f91\u4e4b\u4e2d\u7684\u3002\u5982\u679c\u7528\u6237\u8ba4\u4e3a\u8fd9\u79cd\u6743\u9650\u8d8a\u754c\u4e86\uff0c\u7528\u6237\u5e94\u8be5\u9009\u62e9\u4f7f\u7528\u5176\u4ed6\u7ec4\u4ef6\uff0c\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u3002\u56e0\u4e3a\u76f4\u63a5\u4fee\u6539\u5c5e\u6027\u4e0d\u8ba9\u5176\u8bbf\u95ee\uff0c\u8fd9\u53ef\u80fd\u7834\u574f\u4e86\u7ec4\u4ef6\u672c\u8eab\u7684\u610f\u56fe\uff0c\u4f7f\u5f97\u5176\u7ec4\u4ef6\u7684\u529f\u80fd\u5b8c\u5168\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5readonly\u6216readwrite\u6743\u9650\u6807\u5fd7\u5e94\u8be5\u662f\u7528\u6765\u5904\u7406Reality World\u8fd9\u79cd\u591aCreation\u5171\u4eab\u7684\u573a\u666f\uff0c\u5373\u6211\u4eec\u7684\u6570\u636e\u80fd\u591f\u88ab\u4e0d\u8ba4\u8bc6\u7684\u4eba\u600e\u4e48\u8bbf\u95ee\u3002\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5b58\u5728\u4e00\u4e0b\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9\u5355\u4e2a\u53d8\u91cf\u8fdb\u884c\u58f0\u660e\u4f1a\u663e\u5f97\u975e\u5e38\u590d\u6742\uff0c\u6240\u6709\u5b9e\u4f53\u7684\u6240\u6709\u53d8\u91cf\u53ef\u80fd\u4f1a\u591a\u8fbe\u51e0\u767e\u4e2a"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9Creation\u65e2\u8fdb\u884c\u8bbe\u7f6e\u53c8\u4f1a\u5bfc\u81f4\u5927\u90e8\u5206\u5171\u4eab\u4ea4\u4e92\u7684\u673a\u5236\u5efa\u7acb\u4e0d\u8d77\u6765\uff0c\u56e0\u4e3a\u7528\u6237\u503e\u5411\u4e8e\u628a\u6240\u6709\u6570\u636e\u8bbe\u4e3a\u79c1\u6709\uff0c\u8fd9\u4f7f\u5f97\u57fa\u672c\u4e0a\u65e0\u6cd5\u4e0e\u5916\u754c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u8bf8\u5982RenderComponent\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u662f\u4e0d\u53ef\u4ee5\u8bbe\u7f6e\u6743\u9650\u7684\uff0c\u4e0d\u8fc7\u8fd9\u79cd\u60c5\u51b5\u7531\u7cfb\u7edf\u51b3\u5b9a\u5c31\u597d\u4e86\uff0c\u4f8b\u5982\u7cfb\u7edf\u4e0d\u8ba9\u7f16\u8f91\u8fd9\u90e8\u5206\u5c5e\u6027\uff0c\u4f8b\u5982\u7269\u7406\u548c\u53ef\u89c6\u76f8\u5173\u7684\u5c5e\u6027\u57fa\u672c\u4e0a\u90fd\u5c5e\u4e8e\u8fd9\u79cd\u5c5e\u6027")),(0,n.kt)("p",null,"\u7528\u6237\u8fd8\u662f\u5e94\u8be5\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u53d8\u91cf\u7ba1\u7406\u8fd9\u79cd\u6743\u9650\uff0c\u7531\u7f16\u8f91\u5668\u6216\u8005\u7cfb\u7edf\u52a8\u6001\u5c06\u6240\u6709\u516c\u5171\u7684\u7b26\u53f7\u53d8\u91cf\u603b\u7ed3\u5230\u4e00\u8d77\uff0c\u5e76\u6309\u7c7b\u522b\u5f62\u6210\u4e00\u4e2a\u5982iOS\u7cfb\u7edf\u4e2dSetting\u7684\u5217\u8868\uff0c\u7531\u7528\u6237\u7edf\u4e00\u8bbe\u7f6e\uff0c\u8fd9\u6837\u5728\u6253\u5305\u7684\u65f6\u5019\u76f4\u63a5\u4fee\u6539\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\uff0c\u8fd9\u6837\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\u5230\u5b9e\u4f53\u7ea7\u522b\u662f\u4e0d\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u79cdSetting\u8868\u53ea\u5bf9Reality World\u6709\u6548\uff0c\u5982\u679c\u4e0d\u53d1\u5e03\u81f3Reality World\uff0c\u5219\u8fd9\u4e2a\u529f\u80fd\u6839\u672c\u4e0d\u53ef\u89c1\u3002\u4e5f\u5373\u4e0d\u4f1a\u5141\u8bb8\u7b2c\u4e09\u65b9\u5f00\u53d1\u7c7b\u4f3cReality World\u7684\u5e94\u7528--\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u6982\u5ff5\uff0c\u4e5f\u7b80\u5316\u4e86\u6574\u4e2a\u6743\u9650\u8bbe\u7f6e\u7684\u590d\u6742\u5ea6\uff0c\u5373\u540c\u4e00\u4e2a\u7b26\u53f7\u5373\u4f7f\u6709\u591a\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u7684\u5168\u7cfb\u5747\u8bbe\u7f6e\u4e00\u6b21\uff0c\u907f\u514d\u4e86\u5bf9\u6240\u6709\u5c5e\u6027\u5b9e\u4f8b\u5206\u522b\u8bbe\u7f6e\uff0c\u56e0\u4e3a\u7b26\u53f7\u672c\u8eab\u4e5f\u662f\u5305\u542b\u4e86\u610f\u4e49\u5728\u91cc\u9762\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u968f\u4fbf\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u5b57\u3002"),(0,n.kt)("h3",{id:"441-realityidcomponent"},"4.4.1 RealityIDComponent"),(0,n.kt)("p",null,"\u6bcf\u4e2aEntity\u90fd\u5e94\u8be5\u5177\u6709RealityID\u8fd9\u4e2a\u5b57\u6bb5\uff0c\u7528\u4e8e\u533a\u5206System\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u77e5\u9053\u6240\u5c5e\u5173\u7cfb"),(0,n.kt)("h3",{id:"442-readonly"},"4.4.2 readonly"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u7684\u6743\u9650\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u80fd\u662freadonly\uff0c\u5373\u7528\u6237\u4e4b\u95f4\u53ea\u80fd\u8bfb\u53d6\u6570\u636e\uff0c\u4e0d\u540c\u5199\u6216\u8005\u4fee\u6539\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5c06System\u5f3a\u5236\u4e0e\u4e00\u4e2aComponent\u5173\u8054\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u6837System\u662f\u6709\u6240\u6709\u6743\u7684\uff0c\u5b83\u5c5e\u4e8e\u67d0\u4e00\u4e2a\u7279\u5b9a\u7684Entity\uff0c\u800c\u6bcf\u4e2aEntity\u62e5\u6709\u7279\u5b9a\u7684RealityID\uff0c\u56e0\u6b64\u53ef\u4ee5\u4fbf\u4e8e\u63a7\u5236\u3002\u5982\u679cSystem\u662f\u7cfb\u7edf\u72ec\u7acb\u65b9\u6cd5\uff0c\u5c31\u53ea\u80fd\u62ff\u5230Entity\u4e4b\u540e\u624d\u80fd\u51b3\u5b9a\u5176\u6570\u636e\u662f\u5426\u53ef\u7528\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5982\u679c\u6743\u9650\u4e0d\u591f\uff0c\u5219\u4f1a\u9020\u6210\u6d6a\u8d39\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7cfb\u7edf\u5e94\u8be5\u907f\u514d\u8bfb\u53d6\u6ca1\u6709\u6743\u9650\u7684\u6570\u636e\uff0c\u7531\u4e8eSystem\u4e0e\u5b9e\u4f53\u5173\u8054\uff0c\u5c31\u53ef\u4ee5\u6bd4\u8f83\u6743\u9650\uff0c\u5373\u5bf9\u4e8eRealityID\u4e0d\u7b49\u4e8e\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e0d\u80fd\u8fdb\u884c\u4fee\u6539\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5426\u53ef\u8bfb\u4e5f\u53d6\u51b3\u4e8e\u7528\u6237\u7684\u8bbe\u7f6e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5bf9\u4e8e\u7a0b\u5e8f\u800c\u8a00\uff0c\u6709\u4e09\u79cd\u6743\u9650\uff1a\u5176\u4e2dreadonly\u548creadwrite\u5e94\u8be5\u662fCreation\u5185\u90e8\u7684\u4e8b\u60c5\uff1b\u8fd9\u91cc\u7684readonly\u8fd8\u6709\u5e94\u8be5\u62c6\u5206\u6210RealityID\u5185\u90e8\u548cRealityID\u4e4b\u95f4\uff0c\u6bd4\u5982\u4f7f\u7528share"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"readonly"),(0,n.kt)("li",{parentName:"ul"},"readwrite"),(0,n.kt)("li",{parentName:"ul"},"share")),(0,n.kt)("h3",{id:"443-\u91cd\u65b0\u52a0\u8f7d"},"4.4.3 \u91cd\u65b0\u52a0\u8f7d"),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u6743\u9650\uff0c\u56e0\u6b64\u5f53\u67d0\u4e2a\u7528\u6237\u4fee\u6539\u4e4b\u540e\uff0c\u5176\u4ed6\u6b63\u5728Reality World\u7684\u5728\u7ebf\u7528\u6237\u5e94\u8be5\u5bf9\u5176\u8fdb\u884c\u91cd\u65b0\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"45-\u7a33\u5b9a\u6027"},"4.5 \u7a33\u5b9a\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u786e\u4fdd\u6bcf\u4e2aCreation\u5728\u63d0\u4ea4\u4e4b\u524d\uff0c\u8fd0\u884c\u65f6\u662f\u7a33\u5b9a\u7684\uff0c\u5426\u5219\u7a0b\u5e8f\u4e2d\u53ea\u8981\u5305\u542b\u8fd9\u4e2aCreation\u5c31\u53ef\u80fd\u5bfc\u81f4\u5d29\u6e83\u3002\u5728Reality World\u8fd9\u79cd\u5b8c\u5168\u5f00\u53d1\u7684\u4e16\u754c\u4e2d\uff0c\u8fd9\u4e2a\u95ee\u9898\u66f4\u662f\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\uff0c\u6838\u5fc3\u95ee\u9898\u5176\u5b9e\u5f52\u7ed3\u4e3a\u4e00\u4e2a\uff0c\u5373\u7a0b\u5e8f\u7684\u7a33\u5b9a\u6027\uff0c\u6240\u4ee5\u5bf9\u6240\u6709\u7684\u7ec4\u4ef6\u8981\u8fdb\u884c\u5ba1\u6838\uff0c\u4ee5\u51cf\u8f7b\u5bf9\u540e\u9762\u7528\u6237Creation\u7a33\u5b9a\u6027\u7684\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u6240\u6709\u9700\u8981\u63d0\u4ea4\u5230Reality World\u7684\u5fc5\u987b\u662f\u7ecf\u8fc7Reality World\u9a8c\u8bc1\u8fc7\u7684\u7ec4\u4ef6\uff0c\u5426\u5219\u65e0\u6cd5\u53d1\u5e03\u81f3Reality World\uff0c\u4f46\u662f\u7528\u6237\u81ea\u5df1\u7684Creation\u5219\u53ef\u4ee5\u4f7f\u7528\u672a\u7ecf\u9a8c\u8bc1\u7684\u7ec4\u4ef6\uff0c\u56e0\u4e3a\u8fd9\u5f71\u54cd\u7684\u7528\u6237\u8303\u56f4\u5f88\u5c0f\uff0c\u7528\u6237\u4e00\u65e6\u53d1\u73b0\u95ee\u9898\u81ea\u5df1\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"451-reality-verified-components"},"4.5.1 Reality Verified Components"),(0,n.kt)("p",null,"\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u5ba1\u6838\u4e0e\u6d4b\u8bd5\uff0c\u5408\u6cd5\u7684\u7ec4\u4ef6\u624d\u80fd\u88ab\u7528\u6237\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u672a\u7ecf\u5ba1\u6838\u7684\u7ec4\u4ef6\u81ea\u80fd\u7528\u4e8e\u5c0f\u8303\u56f4\u6d4b\u8bd5\u3002"),(0,n.kt)("h3",{id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"},"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u5408\u6cd5\u4f46\u662f\u6bd4\u8f83\u65e7\u7684\u7ec4\u4ef6\uff0c\u53ef\u80fd\u5bfc\u81f4\u8ddf\u6807\u51c6\u4e0d\u518d\u517c\u5bb9\u7b49\u5bfc\u81f4\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u8fc7\u671f\u884c\u4e3a\u8981\u8fdb\u884c\u5224\u65ad\u3002\u4ece\u4e24\u4e2a\u5c42\u9762\u6765\u4fdd\u8bc1\u7a33\u5b9a\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63d0\u9192\u7528\u6237\u53ca\u65f6\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u672a\u7ecf\u66f4\u65b0\u7684\u4ee3\u7801\uff0c\u7cfb\u7edf\u80fd\u591f\u5728\u52a0\u8f7d\u65f6\u52a8\u6001\u5224\u65ad\uff0c\u7136\u540e\u4e22\u5f03\u4e0e\u6807\u51c6\u4e0d\u517c\u5bb9\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u901a\u8fc7\u4ee5\u4e0a\u7684\u673a\u5236\uff0c\u80fd\u591f\u4fdd\u8bc1\u6574\u4e2aReality World\u7684\u7a33\u5b9a\u6027\u3002\u8fd9\u5bf9\u4e8e\u4e00\u4e2a\u5927\u7684\u52a8\u6001\u66f4\u65b0\u7684\u4e16\u754c\u81f3\u5173\u91cd\u8981\u3002\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u53c8\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u81ea\u7531\u63d0\u4ea4\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u4e0d\u5177\u5907\u5f00\u653e\u6027\uff0c\u4f46\u662f\u8fd9\u5c31\u5bb9\u6613\u5bfc\u81f4\u4e0d\u7a33\u5b9a\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\u5fc5\u987b\u4fdd\u8bc1\u6574\u4e2a\u7cfb\u7edf\u7684\u66f4\u65b0\u673a\u5236\uff0c\u56e0\u4e3a\u7ef4\u62a4\u592a\u591a\u8fc7\u671f\u7684\u7ec4\u4ef6\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7cfb\u7edf\u6765\u8bf4\u6210\u672c\u975e\u5e38\u9ad8\uff0c\u5fc5\u987b\u4fc3\u8fdb\u7cfb\u7edf\u5feb\u901f\u66f4\u65b0")),(0,n.kt)("h2",{id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613"},"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613"),(0,n.kt)("p",null,"\u7531\u4e8e\u5b89\u5168\u6027\u7684\u539f\u56e0\uff0c\u6240\u6709\u4e24\u4e2a\u7528\u6237\u4e4b\u95f4\u7684\u4ea4\u6613\uff0c\u90fd\u9700\u8981\u8c03\u7528\u4e00\u4e9b\u7279\u6b8a\u7684\u7cfb\u7edfAPI\uff0c\u8fd9\u4e9bAPI\u4e0d\u5e94\u8be5\u7279\u5b9a\u4e8eReality World\uff0c\u800c\u662f\u6240\u6709Creation\u4e2d\u6d89\u53ca\u6d88\u8d39\u7684\u90fd\u53ef\u4ee5\uff0c\u56e0\u4e3a\u672c\u8d28\u4e0a\u4ea4\u6613\u5c31\u662f\u4e24\u4e2aReality ID\u4e4b\u95f4\u53d1\u751f\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"461-\u53ca\u65f6\u8d2d\u4e70"},"4.6.1 \u53ca\u65f6\u8d2d\u4e70"),(0,n.kt)("p",null,"3D\u7684\u4e1c\u897f\u6ca1\u6cd5\u50cf\u4f20\u7edf\u5546\u54c1\u4e00\u6837\u901a\u8fc7\u56fe\u7247\u7684\u65b9\u5f0f\u6d4f\u89c8\u5c31\u53ef\u4ee5\u83b7\u5f97\u5f88\u597d\u7684\u4e86\u89e3\uff0c\u56e0\u4e3a\u5b83\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u89c6\u89c9\u53ea\u662f\u5176\u4e2d\u5f88\u5c0f\u7684\u5143\u7d20\uff0c\u751a\u81f3\u89c6\u9891\u4e5f\u4e0d\u662f\u6700\u597d\u7684\u4e86\u89e3\u65b9\u5f0f"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f20\u7edf\u7684\u5e7f\u544a\uff0c\u6211\u4eec\u901a\u5e38\u4e0d\u80fd\u83b7\u5f97\u592a\u591a\u4f53\u9a8c\u4e0a\u7684\u4fe1\u606f\uff0c\u66f4\u591a\u662f\u5176\u4ed6\u4e00\u4e9b\u975e\u4ea7\u54c1\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u4e00\u79cd\u65b0\u7684\u8d2d\u4e70\u6a21\u5f0f\uff1a\u5f53\u4f60\u5728\u4f53\u9a8c\u4e00\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u65f6\u5019\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u5728\u8bd5\u9a7e\u4e00\u8f86\u8f66\uff0c\u83b7\u5f97\u4e0d\u9519\u7684\u4f53\u9a8c\u4e4b\u540e\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u8ddf\u597d\u53cb\u4e00\u8d77\u73a9\u6e38\u620f\uff0c\u770b\u5230\u597d\u53cb\u4f7f\u7528\u7684\u67d0\u4e2a\u4ea4\u4e92\u5185\u5bb9"),(0,n.kt)("h3",{id:"462-\u667a\u80fd\u8d2d\u4e70"},"4.6.2 \u667a\u80fd\u8d2d\u4e70"),(0,n.kt)("p",null,"\u5728\u7528\u6237\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u6216\u8005\u770b\u5230\u67d0\u4e2a\u5185\u5bb9\u65f6\u53ef\u4ee5\u7406\u89e3\u8d2d\u4e70\uff0c\u5c31\u50cf\u5728\u5546\u573a\u7684\u8d2d\u4e70\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"},"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"You can play the game with. And that was incredibly interesting to see. Um, I think this is going to be the future of this shared 3d entertainment, medium. Um, it's not about Facebook pages, it's not about advertising. It's about actually delivering meaningful experiences that people can interact with. And that become part of this much larger world, right?")," So the programming model for the metaverse must incorporate, uh, the assumption that everybody's on objects, they build should be able to interact sensibly and fit and safely with everybody else's objects, your car, you know, built by Ford should be able to interact with your motorcycle built by Dati."),(0,n.kt)("p",null,"If an architect to be is a major work of architecture in the metaverse, you know, that should work with all the different player models have been introduced into the game and everything should work together. So I think the center, the focus of any programming model, uh, for the metaverse needs to be open world compatibility over time, open interfaces, um, which can evolve and be extended over time."),(0,n.kt)("h4",{id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"},"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"R-C",src:l(63).Z,width:"1170",height:"780"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u6837\u7684\u9700\u6c42\uff0c\u73b0\u6709\u53ef\u80fd\u7684\u505a\u6cd5\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u6bcf\u4e2a\u5e7f\u544a\u4ea7\u54c1\uff0c\u5e7f\u544a\u5546\u81ea\u5df1\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5e76\u53d1\u5e03\uff0c\u7531\u4e8e\u5f00\u53d1\u8005\u5177\u6709\u6240\u6709\u7684\u6e90\u4ee3\u7801\uff0c\u6240\u4ee5\u53ef\u4ee5\u4efb\u610f\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8981\u5b9e\u73b0\u81ea\u5b9a\u4e49\u590d\u6742\u4ea4\u4e92\uff0c\u6bcf\u4e2a\u5e7f\u544a\u5546\u9700\u8981\u628a\u6e90\u4ee3\u7801\u4ea4\u7ed9\u5e73\u53f0\uff0c\u7531\u5e73\u53f0\u7edf\u4e00\u90e8\u7f72\u53d1\u5e03\uff0c\u5e76\u8981\u6c42\u7528\u6237\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5e7f\u544a\u53ef\u4ee5\u4f7f\u7528\u6709\u9650\u7684\u4ea4\u4e92\uff0c\u6309\u7167\u4e00\u5b9a\u7684\u6807\u51c6\u5f00\u53d1\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4e0d\u7ecf\u8fc7\u5f00\u53d1\u5546\u81ea\u5b9a\u53d1\u5e03")),(0,n.kt)("p",null,"\u663e\u7136\u8fd9\u4e9b\u90fd\u4e0d\u662f\u6700\u597d\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5RealityIS\u53ef\u4ee5\u521b\u4f5c\u5168\u65b0\u7684\u5546\u4e1a\u6a21\u5f0f\uff0c\u8fd9\u91cc\u4efb\u610f\u5e7f\u544a\u5546\u53ef\u4ee5\u5b8c\u5168\u6309\u7167\u81ea\u5df1\u7684\u8bbe\u8ba1\u5b9a\u4e49\u529f\u80fd\u4e30\u5bcc\u7684\u4ea7\u54c1\uff0c\u7136\u540e\u5728Reality World\u4e2d\u81ea\u7531\u53d1\u5e03\u3002"),(0,n.kt)("h3",{id:"464-\u5e02\u573a\u7ecf\u6d4e"},"4.6.4 \u5e02\u573a\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u5b9e\u9645\u4ef7\u503c\u7531\u4eba\u4eec\u4e3b\u52a8\u53c2\u4e0e\u7ecf\u6d4e\u7684\u884c\u4e3a\u51b3\u5b9a\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7684\u6295\u7968\u6216\u8005\u5176\u4ed6\u673a\u5236\u51b3\u5b9a\uff0c\u786e\u4fdd\u865a\u62df\u8d27\u5e01\u7684\u6570\u91cf\u662f\u7531\u7ecf\u6d4e\u884c\u4e3a\u51b3\u5b9a\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u9700\u8981\u4e0e\u8fd9\u79cd\u884c\u4e3a\u4ea7\u751f\u76f4\u63a5\u5173\u8054\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5bf9\u4e8eReality World\u7684\u7ecf\u6d4e\u6765\u8bf4\uff0c\u6709\u4e24\u70b9\u662f\u81f3\u5173\u91cd\u8981\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u7ecf\u6d4e\u7684\u4e3b\u8981\u63a8\u52a8\u8005\u662f\u4eba\u4eec\u7684\u4e3b\u52a8\u7ecf\u6d4e\u53c2\u4e0e\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u865a\u62df\u7ecf\u6d4e\u7684\u8d27\u5e01\u4e0e\u4eba\u4eec\u5b9e\u9645\u611f\u53d7\u5230\u7684\u4ef7\u503c\u76f8\u5173\u8054")),(0,n.kt)("p",null,"Reality World\u901a\u8fc7\u6784\u5efa\u9ad8\u5ea6\u5f00\u653e\u7684\u4e16\u754c\uff0c\u907f\u514d\u4e2d\u592e\u5f0f\u7684\u5e72\u9884\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u7ecf\u6d4e\u8fd0\u4f5c\u3002\u540c\u65f6\u6807\u51c6\u7684\u53d1\u5e03\u3001\u53cd\u9988\u4ee5\u53ca\u4eba\u4eec\u5b9e\u9645\u4f7f\u7528\u76f8\u5173\u8054\uff0c\u901a\u8fc7\u4eba\u4eec\u7684\u4e3b\u52a8\u9009\u62e9\u6765\u5b9e\u73b0\u4ef7\u503c\u7684\u7b5b\u9009\u4e0e\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5f8b\u662f\u76f8\u5bf9\u786e\u5b9a\u4eba\uff0c\u4eba\u4eec\u4e0d\u7ba1\u662f\u5728\u771f\u5b9e\u4e16\u754c\u8fd8\u662f\u865a\u62df\u4e16\u754c\u4e2d\u90fd\u9700\u8981\u6709\u7c7b\u4f3c\u516c\u5e73\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u4eba\u4eec\u7684\u7ecf\u6d4e\u6d3b\u52a8\u53c2\u4e0e\u662f\u6709\u610f\u4e49\u7684\uff0c\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5219\u662f\u4eba\u7c7b\u6570\u5e74\u6765\u79ef\u7d2f\u7684\u6210\u679c\uff0c\u5b83\u4e5f\u662f\u4eba\u4eec\u719f\u6089\u7684\u601d\u7ef4\uff0c\u53ea\u4e0d\u8fc7\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u901a\u8fc7\u6570\u5b57\u6280\u672f\u66f4\u5c11\u4e2d\u592e\u96c6\u6743\u5f0f\u7684\u5e72\u9884\u3002"),(0,n.kt)("p",null,"\u90a3\u65e2\u7136\u662f\u8ddf\u771f\u5b9e\u793e\u4f1a\u4e00\u6837\u7684\u7ecf\u6d4e\u4f53\u9a8c\uff0c\u8fd8\u6709\u4ec0\u4e48\u610f\u4e49\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u865a\u62df\u4e16\u754c\u5462\uff1f\u5c3d\u7ba1\u4e24\u8005\u7684\u7ecf\u6d4e\u4f53\u5236\u76f8\u4f3c\uff0c\u4f46\u662f\u5728\u865a\u62df\u4e16\u754c\u4e2d\u53ef\u4ee5\u521b\u4f5c\u548c\u4f53\u9a8c\u5728\u771f\u5b9e\u4e16\u754c\u65e0\u6cd5\u5b9e\u73b0\u7684\u4e8b\u60c5\u548c\u4f53\u9a8c\uff0c\u8fd9\u5c31\u662f\u865a\u62df\u4e16\u754c\u7684\u4ef7\u503c\uff0c\u800c\u4e14\u8fd9\u79cd\u4ef7\u503c\u901a\u8fc7\u7ecf\u6d4e\u7684\u673a\u5236\u800c\u5f97\u4eba\u4eec\u89c9\u5f97\u4e5f\u662f\u6709\u610f\u4e49\u7684\u3002\u53cd\u4e4b\uff0c\u6ca1\u6709\u4efb\u4f55\u7ecf\u6d4e\u610f\u4e49\u7684\u4e8b\u60c5\u53ef\u80fd\u5c31\u662f\u65e0\u610f\u4e49\u7684\uff0c\u4eba\u4eec\u4f1a\u628a\u5f88\u591a\u4e8b\u60c5\u5f53\u6210\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\uff0c\u5373\u4f7f\u662f\u7cbe\u795e\u4e0a\u7684\u4f53\u9a8c\u4e5f\u53ef\u4ee5\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u7ecf\u6d4e\u601d\u7ef4\u662f\u4eba\u4eec\u89c9\u5f97\u6240\u6709\u53c2\u4e0e\u4e0e\u4ed8\u51fa\u4f1a\u6709\u610f\u4e49\u7684\u4e00\u79cd\u5fc3\u7406\u57fa\u7840\u3002"),(0,n.kt)("h4",{id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"},"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5c3d\u7ba1\u7528\u6237\u7684\u7ecf\u6d4e\u8d2d\u4e70\u884c\u4e3a\u4e3a\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4ea7\u751f\u4ef7\u503c\uff0c\u4f46\u662f\u8fd9\u79cd\u4ef7\u503c\u662f\u4e00\u79cd\u603b\u4f53\u884c\u4e3a\uff0c\u800c\u4e0d\u662f\u7531\u5355\u8bcd\u8d2d\u4e70\u51b3\u5b9a\u7684\u3002"),(0,n.kt)("h3",{id:"465-\u533a\u5757\u94fe"},"4.6.5 \u533a\u5757\u94fe"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u89e3\u51b3\u4e86\u4e24\u4ef6\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u901a\u8fc7\u6280\u672f\u624b\u6bb5\u5b9a\u4e49\u4e86\u7269\u6743\uff0c\u5e76\u4e14\u4e00\u65e6\u4f60\u62e5\u6709\u7269\u6743\uff0c\u522b\u4eba\u6ca1\u6cd5\u7be1\u6539\uff0c\u56e0\u4e3a\u6574\u4e2a\u4efb\u4f55\u5bf9\u8be5\u7269\u6743\u7684\u8f6c\u6362\u90fd\u4f1a\u88ab\u8bb0\u5f55\uff0c\u800c\u8fd9\u79cd\u8f6c\u6362\u53ea\u6709\u5728\u6240\u6709\u8005\u540c\u610f\u4e4b\u540e\u624d\u80fd\u88ab\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8d26\u672c\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u610f\u5473\u7740\u7269\u54c1\u53ef\u4ee5\u88ab\u4efb\u610f\u8f6c\u6362\u6216\u8005\u8bf4\u4ea4\u6613\uff0c\u8fd9\u5c31\u4e3a\u5546\u54c1\u7684\u81ea\u7531\u4ea4\u6613\u521b\u9020\u4e86\u53ef\u80fd\u3002\u53cd\u89c2\u4f20\u7edf\u7684\u4e2d\u592e\u5f0f\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u4e00\u4ef6\u7269\u54c1\u7684\u4ea4\u6613\u901a\u5e38\u53ea\u53d1\u751f\u4e00\u6b21\uff0c\u4e00\u822c\u5e73\u53f0\u4e0d\u4f1a\u63d0\u4f9b\u8fd9\u79cd\u65e0\u9650\u8f6c\u5356\u7684\u673a\u5236\uff0c\u5373\u4f7f\u63d0\u4f9b\u8fd9\u79cd\u673a\u5236\uff0c\u901a\u5e38\u4e5f\u662f\u8ba4\u4e3a\u4e0d\u53ef\u9760\u7684\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4ea4\u6613\u8d26\u672c\u53ef\u80fd\u88ab\u7be1\u6539\u3002")),(0,n.kt)("p",null,"\u4f46\u672c\u8d28\u4e0a\uff0c\u533a\u5757\u94fe\u53ea\u89e3\u51b3\u5173\u4e8e\u7269\u54c1\u4ea4\u6613\u7684\u8fc7\u7a0b\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u53ea\u662f\u8f85\u52a9\u6027\u7684\uff0c\u4f46\u662f\u5b83\u5e76\u4e0d\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u5168\u90e8\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u80fd\u5426\u4fdd\u8bc1\u865a\u62df\u8d27\u5e01\u4e0e\u771f\u5b9e\u4ef7\u503c\u7684\u6620\u5c04\u662f\u5426\u5b89\u5168\u53ef\u9760\u7684\u95ee\u9898\uff0c\u8fd9\u53ef\u80fd\u5bfc\u81f4\u4e0a\u5f53\u53d7\u9a97\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u7269\u54c1\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u600e\u6837\u66f4\u516c\u5e73\u5730\u51b3\u5b9a\u7269\u54c1\u4ef7\u503c\u7684\u673a\u5236\uff1b\u4f8b\u5982\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4eba\u4eec\u7684\u7ecf\u6d4e\u4ea4\u6613\u9664\u4e86\u4ea7\u751f\u7269\u54c1\u4ea4\u6362\uff0c\u8fd9\u79cd\u884c\u4e3a\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7ecf\u6d4e\u4ef7\u503c\uff0c\u6bd4\u5982\u6700\u6838\u5fc3\u7684\u662f\u51b3\u5b9a\u7269\u54c1\u7684\u4ef7\u503c\u3002\u8fd9\u4e9b\u673a\u5236\u8ddf\u533a\u5757\u94fe\u7684\u7406\u5ff5\u90fd\u5dee\u5f88\u8fdc\u3002")),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5b83\u7ea6\u6e38\u620f\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u5927\u5bb6\u5206\u4eab\u548c\u5171\u540c\u73a9\u6e38\u620f\u624d\u80fd\u4ea7\u751f\u4ef7\u503c\u7684\u7406\u5ff5\u662f\u76f8\u8fdd\u80cc\u7684\uff0c\u533a\u5757\u94fe\u66f4\u9f13\u52b1\u5c01\u95ed\u548c\u79d8\u5bc6\u7684\u884c\u4e3a\u3002"),(0,n.kt)("h4",{id:"4651-\u4ef7\u503c\u5173\u8054"},"4.6.5.1 \u4ef7\u503c\u5173\u8054"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u4e0d\u89e3\u51b3\u4ef7\u503c\u5173\u8054\u7684\u95ee\u9898\uff0c\u4e00\u5b9a\u6570\u91cf\u7684\u865a\u62df\u8d27\u5e01\u5230\u5e95\u5173\u8054\u591a\u5c11\u5b9e\u9645\u7269\u54c1\u7684\u4ef7\u503c\uff0c\u4ee5\u53ca\u600e\u6837\u5173\u8054\uff0c\u8fd9\u4e0d\u662f\u533a\u5757\u94fe\u4f1a\u8003\u8651\u7684\u3002\u5982\u679c\u8fd9\u4e2a\u95ee\u9898\u4e0d\u89e3\u51b3\uff0c\u4e5f\u8bb8\u4ece\u6e90\u5934\u4e0a\u5c31\u4e0d\u53ef\u63a7\u4e86\uff0c\u540e\u9762\u7684\u7269\u6743\u4fdd\u969c\u4e5f\u5c31\u6ca1\u6709\u610f\u4e49\u3002"),(0,n.kt)("h4",{id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a"},"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u7269\u54c1\u7684\u4ef7\u503c\u5230\u5e95\u600e\u6837\u53d8\u52a8\uff0c\u6ca1\u6709\u66f4\u597d\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4e00\u4e2a\u7269\u54c1\u7684\u4ef7\u503c\u80af\u5b9a\u4e0d\u662f\u7531\u6295\u7968\u6765\u51b3\u5b9a\u7684\uff0c\u5b83\u662f\u7531\u4eba\u4eec\u7684\u7ecf\u6d4e\u884c\u4e3a\u6765\u51b3\u5b9a\u7684\u3002\u6295\u7968\u662f\u53ef\u4ee5\u88ab\u64cd\u4f5c\u7684\uff0c\u6216\u8005\u4e5f\u53ef\u80fd\u662f\u865a\u5047\u7684\u3002\u4f46\u662f\u771f\u5b9e\u7684\u7ecf\u6d4e\u884c\u4e3a\u662f\u4e0d\u4f1a\u8bf4\u8c0e\u7684\uff0c\u5373\u4f7f\u67d0\u4e9b\u4e2a\u4f53\u5b58\u5728\u504f\u5dee\uff0c\u4f46\u603b\u4f53\u800c\u8a00\u662f\u5ba2\u89c2\u7684\uff0c\u8fd9\u5c31\u662f\u771f\u5b9e\u4e16\u754c\u7269\u54c1\u4ef7\u503c\u51b3\u5b9a\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728Reality World\uff0c\u6211\u4eec\u4ece\u6280\u672f\u4e0a\u628a\u4eba\u4eec\u8fd9\u79cd\u7ecf\u6d4e\u884c\u4e3a\u878d\u5165\u5230\u5546\u54c1\u4ef7\u503c\u4f53\u7cfb\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u4eba\u7f51\u7edc\u4e4b\u95f4\u7684\u53e3\u7891\uff0c\u4f8b\u5982\u5982\u679c\u4f60\u51b3\u5b9a\u67d0\u4e2a\u4e1c\u897f\u597d\uff0c\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u8fd9\u6837\u7684\u63a8\u8350\u66f4\u9760\u8c31\uff0c\u4f60\u7528\u670b\u53cb\u4e4b\u95f4\u7684\u5173\u7cfb\u6765\u4fdd\u969c\u4f60\u7684\u53e3\u7891\uff0c\u800c\u4e0d\u662f\u968f\u4fbf\u4e00\u53e5\u4e0d\u8d1f\u8d23\u4efb\u7684\u8bdd\u3002\u800c\u4e3a\u4ec0\u4e48\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u662f\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u7684\u4e92\u52a8\u5927\u90fd\u591a\u662f\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u8fdb\u884c\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7ade\u4e89\uff0c\u5bf9\u4e8e\u76f8\u4f3c\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5b9e\u73b0\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u4f1a\u76f8\u4e92\u7ade\u4e89\uff0c\u56e0\u6b64\u7ade\u4e89\u4e5f\u4f1a\u6307\u5bfc\u5b9a\u4ef7\uff0c\u5bf9\u6807\u51c6\u4e5f\u662f\u4e00\u6837\u3002")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u662f\u66f4\u63a5\u8fd1\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u4fdd\u8bc1\u7269\u54c1\u7684\u4ef7\u503c\u662f\u4e0e\u4f60\u9700\u8981\u4ed8\u51fa\u7684\u4ee3\u7801\u5339\u914d\u7684\u3002"),(0,n.kt)("h4",{id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"},"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684NFT\u7cfb\u7edf\u4e2d\uff0c\u7269\u54c1\u88ab\u53cd\u590d\u548c\u5927\u91cf\u8f6c\u5356\uff0c\u800c\u4e0d\u662f\u50cf\u6e38\u620f\u4e00\u6837\u88ab\u5927\u91cf\u73a9\u5bb6\u771f\u6b63\u7684\u4f53\u9a8c\u3002\u5728\u8fd9\u4e9b\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u751a\u81f3\u5927\u90e8\u5206\u4e70\u5bb6\u548c\u5356\u5bb6\u6839\u672c\u5c31\u6ca1\u6709\u53bb\u4f53\u9a8c\u5b83\u771f\u6b63\u7684\u5185\u5bb9\uff0c\u5f53\u7136\u4e5f\u4e0d\u53ef\u80fd\u6709\u673a\u4f1a\u53bb\u6539\u8fdb\u5b83\uff0c\u6216\u8005\u53bb\u589e\u52a0\u5b83\u7684\u4ef7\u503c\u3002\u8fd9\u6837\u7684\u7ecf\u6d4e\u6d3b\u52a8\u6beb\u65e0\u610f\u4e49\uff0c\u5b83\u5bf9\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u90fd\u6beb\u65e0\u8d21\u732e\u3002"),(0,n.kt)("h3",{id:"466-royalty"},"4.6.6 Royalty"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u4e2d\u7684\u751f\u4ea7\u8005\uff0c\u6709\u4e24\u79cd\u6fc0\u52b1\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u6b21\u6027\u8d39\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e")),(0,n.kt)("p",null,"\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u4e00\u6b21\u6027\u8d39\u7528\u901a\u5e38\u53d1\u751f\u5728\u5546\u54c1\u4ea4\u6613\u7684\u7ec8\u7aef\uff0c\u5373\u5546\u54c1\u8f6c\u79fb\u5230\u6700\u7ec8\u6d88\u8d39\u8005\u7684\u8fc7\u7a0b\u4e2d\u3002\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u5f3a\u52bf\u548c\u6280\u672f\u7ade\u4e89\u529b\u5f3a\u7684\u751f\u4ea7\u8005\uff0c\u4ed6\u4eec\u4e5f\u4f1a\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u5f95\u5361\u8ddf\u534e\u4e3a\u7684\u5408\u4f5c\uff0c\u662f\u6309\u7167\u624b\u673a\u9500\u91cf\u8fdb\u884c\u5206\u6210\u3002\u5f53\u7136\u8fd9\u4e9b\u90fd\u4f1a\u968f\u7740\u4e00\u4e9b\u8bdd\u8bed\u6743\u7b49\u56e0\u7d20\u53ef\u4ee5\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eReality World\u4e2d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5f71\u54cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e\u53ef\u80fd\u66f4\u52a0\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e00\u6b21\u6027\u8d39\u7528\u53ef\u80fd\u66f4\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u5f00\u53d1\u66f4\u591a\u7684\u5185\u5bb9\uff0c\u4f46\u4e5f\u8bb8\u5b83\u6ca1\u6709\u7cbe\u529b\u53bb\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u7ade\u4e89\u529b\uff0c\u56e0\u4e3a\u65e0\u6cd5\u8f6c\u5316\u5b58\u91cf\u7528\u6237\u7684\u4ef7\u503c\uff0c\u6c38\u8fdc\u53ea\u6709\u65b0\u7528\u6237\u624d\u80fd\u4ea7\u751f\u6536\u5165\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u5f00\u53d1\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u7248\u7a0e\u7684\u6536\u76ca\u4e3b\u8981\u662f\u53d6\u51b3\u4e8e\u5f71\u54cd\u529b\u548c\u77e5\u540d\u5ea6\uff0c\u4e0d\u540c\u7684\u5f71\u54cd\u529b\u548c\u540d\u6c14\u5176\u7248\u7a0e\u6536\u5165\u7684\u5dee\u8ddd\u975e\u5e38\u5927\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u66f4\u613f\u610f\u82b1\u5fc3\u601d\u63d0\u5347\u5355\u4e2a\u6807\u51c6\u6216\u7ec4\u4ef6\u7684\u54c1\u8d28\uff0c\u56e0\u4e3a\u53ea\u8981\u6709\u597d\u7684\u5f71\u54cd\u529b\uff0c\u8fd9\u5957\u673a\u5236\u4ee5\u4fdd\u8bc1ta\u8d5a\u53d6\u8db3\u591f\u7684\u6536\u5165\u3002\u5c31\u597d\u6bd4\u82f9\u679c\u624b\u673a\uff0cTA\u9700\u8981\u7ef4\u6301\u81ea\u5df1\u7684\u54c1\u724c\uff0c\u7136\u540e\u9500\u552e\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u5176\u4ed6\u4e00\u4e9b\u624b\u673a\u5382\u5546\u5219\u4f1a\u5c1d\u8bd5\u5f00\u53d1\u591a\u79cd\u4e0d\u540c\u5b9a\u4f4d\u7684\u4ea7\u54c1\u548c\u5f00\u53d1\u7ec6\u5206\u5e02\u573a\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u9700\u8981\u9f13\u52b1\u5f00\u53d1\u8005\u5236\u4f5c\u66f4\u597d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u6570\u91cf\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u3002\u6240\u6709\u5bf9\u8fd9\u4e24\u7c7b\u5f00\u53d1\u8005\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("h4",{id:"4661-\u6807\u51c6\u7a0e"},"4.6.6.1 \u6807\u51c6\u7a0e"),(0,n.kt)("p",null,"\u5373\u7ec4\u4ef6\u5f00\u53d1\u8005\uff0c\u5728\u6bcf\u9500\u552e\u4e00\u4ef6\u7ec4\u4ef6\u65f6\uff0c\u6807\u51c6\u7684\u5236\u5b9a\u8005\u53ef\u4ee5\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u53ea\u662f\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u800c\u6ca1\u6709\u5f62\u6210\u4efb\u4f55\u9500\u552e\u6536\u5165\uff0c\u662f\u4e0d\u9700\u8981\u5411\u6807\u51c6\u4f5c\u8005\u652f\u4ed8\u8d39\u7528\u7684\u3002\u8fd9\u6837\u964d\u4f4e\u7ec4\u4ef6\u5f00\u53d1\u8005\u7684\u95e8\u69db\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u6807\u51c6\u4f5c\u8005\u5728\u6ca1\u6709\u4efb\u4f55\u6807\u51c6\u7a0e\u6536\u5165\u4e4b\u524d\uff0c\u4e5f\u4e0d\u9700\u8981\u5411\u5e73\u53f0\u652f\u4ed8\u8d39\u7528\u3002"),(0,n.kt)("h4",{id:"4662-\u7ec4\u4ef6\u7a0e"},"4.6.6.2 \u7ec4\u4ef6\u7a0e"),(0,n.kt)("p",null,"\u5373\u666e\u901a\u7528\u6237\u4f7f\u7528\u67d0\u4e2a\u7ec4\u4ef6\u5f00\u53d1\u7684\u5185\u5bb9\uff0c\u5728\u4ea7\u751f\u6536\u5165\u7684\u65f6\u5019\u4f1a\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7ec4\u4ef6\u7a0e\u6765\u8bf4\u8981\u66f4\u590d\u6742\u4e00\u4e9b\uff0c\u56e0\u4e3a\u7528\u6237\u7684\u6536\u5165\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u7ec4\u4ef6\u7684\u7ed3\u679c\uff0c\u5f88\u96be\u6e05\u6670\u5224\u5b9a\u67d0\u5355\u4e2a\u7ec4\u4ef6\u7684\u8d21\u732e\u3002\u8fd9\u5757\u540e\u7eed\u5728\u68b3\u7406\u4e00\u4e0b\u601d\u8def\u3002"),(0,n.kt)("h3",{id:"469-\u5b8c\u6574\u7684\u751f\u6001"},"4.6.9 \u5b8c\u6574\u7684\u751f\u6001"),(0,n.kt)("p",null,"\u65e2\u8981\u6709\u6d88\u8d39\u8005\uff0c\u751f\u6210\u8005\uff0c\u5de5\u5177\u5236\u4f5c\uff0c\u4f9b\u5e94\u94fe\uff0c\u624d\u80fd\u5168\u57df\u6fc0\u6d3b"),(0,n.kt)("h2",{id:"47-social"},"4.7 Social"),(0,n.kt)("h3",{id:"471-\u79c1\u4eba\u5316\u793e\u4ea4"},"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4"),(0,n.kt)("img",{src:"resources/reworld.png"}),(0,n.kt)("p",null,"\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u73a9\uff0c\u4f1a\u7ed9\u670b\u53cb\u63a8\u8350\u81ea\u5df1\u89c9\u5f97\u8fd8\u73a9\u7684\u4e1c\u897f\uff0c\u5f62\u6210\u826f\u6027\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u95f4\u63a5\u4e5f\u4f1a\u5bfc\u81f4\u793e\u533a\u66f4\u6587\u660e"),(0,n.kt)("p",null,"\u5927\u591a\u6570\u7c7bRoblox \u5e73\u53f0\u90fd\u662f\u7c7b\u4f3c\u7684\u6a21\u5f0f\uff0c\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u5e94\u7528\u5e02\u573a"),(0,n.kt)("p",null,"\u53ea\u6709\u79c1\u4eba\u5316\u624d\u80fd\u4fc3\u8fdb\u5927\u4f17\u521b\u4f5c\uff0c\u5c31\u50cfSnapchat"),(0,n.kt)("p",null,"\u751a\u81f3\u6296\u97f3\u89c6\u9891\u5927\u90e8\u5206\u90fd\u662f\u56f4\u7ed5\u81ea\u5df1\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5e94\u7528\u5e02\u573a\u578b\u7684\u5e94\u7528\uff0c\u662f\u4e0d\u4f1a\u6fc0\u53d1\u666e\u901a\u7528\u6237\u7684\uff0c\u5c31\u50cf\u4f60\u8981\u6c42\u666e\u901a\u7528\u6237\u521b\u4f5c\u4e25\u8083\u7684\u5927\u7247\uff0c\u4ed6\u4eec\u505a\u4e0d\u5230\uff0c\u6240\u4ee5\u5fc5\u987b\u79c1\u4eba\u5316"),(0,n.kt)("p",null,"\u8ddf\u5fae\u4fe1\u7684\u6a21\u5f0f\uff0c\u501f\u52a9\u79c1\u4eba\u5c0f\u5708\u5b50\u7684\u5f3a\u70c8\u5206\u4eab\u548c\u521b\u4f5c\u9700\u6c42"),(0,n.kt)("h4",{id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1"},"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1"),(0,n.kt)("p",null,"\u6dd8\u5b9d\u7684\u6a21\u5f0f\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7ecf\u6d4e\u7684\u6570\u5b57\u5316\uff0c\u53ea\u662f\u4e00\u4e2a\u9500\u552e\u5e73\u53f0\uff0c\u793e\u4ea4\u6027\u51e0\u4e4e\u4e0d\u5b58\u5728\u3002\u8868\u73b0\u5728\u4e00\u4e9b\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f60\u4e70\u4e86\u4e00\u4e2a\u4e1c\u897f\uff0c\u51e0\u4e4e\u6ca1\u6709\u4ec0\u4e48\u6e20\u9053\u628a\u8fd9\u5bb6\u5e97\u6216\u8005\u8fd9\u4ef6\u5546\u54c1\u5206\u4eab\u7ed9\u597d\u53cb\uff0c\u751a\u81f3\u6709\u65f6\u5019\u8fd8\u9700\u8981\u901a\u8fc7\u5fae\u4fe1\u53bb\u5206\u4eab\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5bb6\u6dd8\u5b9d\u5e97\u7684\u54c1\u724c\u6548\u5e94\u76f8\u5bf9\u6bd4\u8f83\u5f31\uff0c\u4e00\u65b9\u9762\u662f\u591a\u5bb6\u5e97\u53ef\u80fd\u9500\u552e\u540c\u4e00\u79cd\u5546\u54c1\uff0c\u4e00\u65b9\u9762\u662f\u6ca1\u6709\u7ef4\u7cfb\u5e97\u5bb6\u548c\u6d88\u8d39\u8005\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u4e9b\u65b9\u5f0f\u6216\u5de5\u5177\u3002\u6240\u4ee5\u6dd8\u5b9d\u5546\u5e97\u7684\u58f0\u8a89\u6216\u540d\u58f0\u4e3b\u8981\u9760\u6d41\u91cf\uff0c\u6216\u8005\u9500\u91cf\u8fd9\u4e00\u5355\u4e00\u5c5e\u6027\uff0c\u4f46\u662f\u56e0\u4e3a\u53d7\u6d41\u91cf\u8fd9\u79cd\u5e73\u53f0\u63a7\u5236\u529b\u91cf\u7684\u5f71\u54cd\uff0c\u9500\u91cf\u672c\u8eab\u53c8\u662f\u53d7\u6d41\u91cf\u5f71\u54cd\u7684\uff0c\u5bfc\u81f4\u5c0f\u54c1\u724c\u4e0d\u6613\u4e8e\u6210\u957f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u4f60\u770b\u5230\u670b\u53cb\u7684\u67d0\u4e2a\u4e1c\u897f\u8f83\u597d\uff0c\u8fd9\u79cd\u793e\u4ea4\u5bfc\u81f4\u7684\u63a8\u8350\u6709\u65f6\u5019\u5e76\u4e0d\u80fd\u76f4\u63a5\u8f6c\u5316\u5230\u8fd9\u5bb6\u5e97\uff0c\u4e00\u662f\u5206\u4eab\u4e0d\u65b9\u4fbf\uff0c\u6211\u8fd8\u8981\u53bb\u8ba2\u5355\u91cc\u641c\u7d22\u7136\u540e\u8f6c\u53d1\uff0c\u8fd9\u662f\u4e00\u4e2a\u9ebb\u70e6\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u5bf9\u6bd4\u5fae\u4fe1 \uff0c\u6211\u60f3\u5206\u4eab\u7684\u4e1c\u897f\u90fd\u5728\u670b\u53cb\u5708\uff0c\u5927\u5bb6\u968f\u65f6\u53ef\u4ee5\u81ea\u5df1\u53bb\u770b\u3002\u5f53\u7136\u5bf9\u4e8e\u6dd8\u5b9d\uff0c\u66f4\u6709\u53ef\u80fd\u7684\u60c5\u51b5\u662f\u5927\u5bb6\u8bf4\u4e2a\u54c1\u724c\u540d\u5b57\uff0c\u5927\u5bb6\u81ea\u5df1\u53bb\u641c\u7d22\u8d2d\u4e70\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u54c1\u724c\u7684\u6548\u5e94\u7684\u66f4\u5927\u7684\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u7ed3\u8d77\u6765\u53ef\u80fd\u662f\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u5e76\u4e0d\u662f\u4e00\u4e2a\u521b\u4f5c\u5e73\u53f0\uff0c\u6240\u4ee5\u591a\u4e2a\u5546\u5e97\u4e4b\u95f4\u540c\u8d28\u5316\u5f88\u4e25\u91cd\uff0c\u5bfc\u81f4\u51e0\u4e4e\u6ca1\u6709\u54c1\u724c\u7ade\u4e89\u529b\uff1b\u800c\u53cd\u89c2\u6e38\u620f\u5e02\u573a\uff0c\u4e00\u4e2a\u6e38\u620f\u662f\u9760\u521b\u9020\u7684\u72ec\u7279\u6027\u6765\u5efa\u7acb\u54c1\u724c\u58f0\u8a89\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u6ca1\u6709\u793e\u4ea4\uff0c\u56e0\u4e3a\u5355\u7eaf\u56f4\u7ed5\u5546\u54c1\u8d2d\u4e70\u6784\u5efa\u793e\u4ea4\u662f\u6ca1\u6709\u592a\u5927\u5438\u5f15\u529b\u7684\u3002\u793e\u4ea4\u66f4\u591a\u6e90\u4e8e\u751f\u6d3b\uff0c\u5728\u5546\u54c1\u4e4b\u5916\uff0c\u8fd8\u6709\u66f4\u591a\u7684\u6d3b\u52a8\uff0c\u5546\u54c1\u8d2d\u4e70\u6d3b\u52a8\u751a\u81f3\u53ef\u80fd\u53ea\u5360\u4eba\u7c7b\u6d3b\u52a8\u5f88\u5c0f\u7684\u4e00\u90e8\u5206\uff0c\u6bd4\u5982\u5f88\u591a\u5176\u4ed6\u66f4\u5177\u4ef7\u503c\u7684\u670d\u52a1\u662f\u901a\u8fc7\u6dd8\u5b9d\u8d2d\u4e70\u4e0d\u5230\u7684\u3002\u4f55\u51b5\u4e00\u4e2a\u7eaf\u5546\u54c1\u63a8\u8350\u7684\u793e\u4ea4\u4f1a\u5f15\u8d77\u4eba\u4eec\u65b9\u6848\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6dd8\u5b9d\u6784\u5efa\u4e0d\u8d77\u793e\u4ea4\u80fd\u529b\u3002")),(0,n.kt)("p",null,"\u4f46\u662f\u53cd\u89c2\u5fae\u4fe1\uff0c\u5fae\u4fe1\u5b8c\u5168\u662f\u793e\u4ea4\u9a71\u52a8\u3002\u4f60\u7684\u6bcf\u4e00\u4e2a\u4f1a\u8bdd\uff0c\u6bcf\u4e00\u4e2a\u597d\u53cb\uff0c\u6bcf\u4e00\u6b21\u53c2\u52a0\u7fa4\u804a\uff0c\u90fd\u662f\u56e0\u4e3a\u4f60\u7684\u6587\u5b57\u6240\u6d89\u53ca\u7684\u67d0\u4ef6\u4e8b\u662f\u4e0e\u5176\u4ed6\u67d0\u4e2a\u4eba\u76f8\u5173\u7684\u3002\u8fd9\u4e9b\u5927\u91cf\u7684\u6c9f\u901a\u4ea4\u6d41\u76ee\u7684\uff0c\u5176\u5b9e\u80cc\u540e\u7684\u4ef7\u503c\u5f88\u5927\u90e8\u5206\u4e5f\u53ef\u80fd\u5f52\u7c7b\u4e3a\u4ef7\u503c\uff0c\u54ea\u6015\u662f\u4ea4\u5230\u4e00\u4e2a\u5355\u7eaf\u7684\u597d\u670b\u53cb\uff0c\u5176\u5b9e\u65e5\u540e\u4e5f\u4f1a\u4ea7\u751f\u67d0\u4e9b\u4ef7\u503c\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u53ef\u4ee5\u8bf4\u793e\u4ea4\u662f\u6784\u5efa\u4ef7\u503c\u7684\u91cd\u8981\u8fc7\u7a0b\u548c\u624b\u6bb5\uff0c\u800c\u6700\u540e\u7684\u4ea4\u6613\u53cd\u800c\u53ea\u662f\u4e00\u4e2a\u5f88\u7b80\u5355\u7684\u8fc7\u7a0b\u6216\u8005\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5fae\u4fe1\u6ca1\u6709\u4ef7\u503c\u4ea4\u6613\u7684\u65b9\u5f0f\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u6784\u5efa\u4ef7\u503c\u548c\u4ef7\u503c\u4ea4\u6613\u5206\u79bb\u7684\u67b6\u6784\u662f\u4e00\u79cd\u6bd4\u8f83\u597d\u7684\u67b6\u6784\uff0c\u6216\u8005\u8bf4\u6784\u67b6\u4ef7\u503c\u7684\u8fc7\u7a0b\u4e0e\u4ef7\u503c\u4ea4\u6613\u672c\u8eab\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7684\u8026\u5408\u3002"),(0,n.kt)("p",null,"\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4ea4\u6613\u5e73\u53f0\uff0c\u4f46\u662f\u6253\u901a\u6dd8\u5b9d\u7684\u5b9e\u7269\u6216\u8005\u7eaf\u5546\u54c1\u5316\u7684\u5f62\u5f0f\uff0c\u4f7f\u4e4b\u6cdb\u534e\u5230\u6240\u6709\u4ef7\u503c\u670d\u52a1\uff0c\u6bd4\u5982\u6e38\u620f\u4f53\u9a8c\uff0c\u8f6f\u4ef6\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u5e73\u53f0\uff0c\u521b\u4f5c\u4e0d\u5149\u751f\u4ea7\u5546\u54c1\uff0c\u800c\u4e14\u7ed3\u5408\u9500\u552e\u5e73\u53f0\uff0c\u4f7f\u5f97\u9500\u552e\u5546\u54c1\u540c\u8d28\u5316\u8f83\u4f4e\uff0c\u56e0\u4e3a\u5b83\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u9500\u552e\u5e73\u53f0\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u793e\u4ea4\uff0c\u6e38\u620f\u5929\u751f\u5177\u6709\u793e\u4ea4\u6027\uff0c\u4f46\u662f\u73b0\u5728\u7684\u6e38\u620f\u4e3b\u8981\u53ea\u662f\u4e00\u4e2a\u597d\u53cb\u5217\u8868\uff0c\u6392\u540d\u3002\u7f3a\u4e4f\u5fae\u4fe1\u90a3\u79cd\uff0c\u4e3a\u4e86\u67d0\u4e2a\u76ee\u6807\u6216\u5173\u7cfb\uff0c\u4e3b\u52a8\u53d1\u8d77\u793e\u4ea4\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u4f60\u53d1\u73b0\u4e00\u4e2a\u597d\u73a9\u7684\u6e38\u620f\uff0c\u662f\u5426\u53ef\u4ee5\u66f4\u597d\u5730\u9080\u8bf7\u670b\u53cb\u52a0\u5165\u8fdb\u6765\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u8981\u53bb\u5fae\u4fe1\u4e2d\u5206\u4eab\uff0c\u6bcf\u6b21\u8fdb\u5165\u90fd\u9700\u8981\u91cd\u65b0\u5206\u4eab\uff0c\u6709\u4e00\u79cd\u5272\u88c2\u3002\u800c\u6211\u4eec\u4f1a\u4fdd\u5b58\u4e00\u4e2a\u6700\u8fd1\u5217\u8868\uff0c\u5982\u679c\u4f60\u4eec\u7ecf\u5e38\u73a9\u4e00\u4e2a\u6e38\u620f\uff0c\u6253\u4e2a\u62db\u547c\u76f4\u63a5\u5c31\u8fdb\u5165\u4e86\u3002\u5fae\u4fe1\u4e0d\u4f1a\u4e3a\u4e00\u4e9b\u4e13\u7528\u7684\u793e\u4ea4\u76ee\u7684\u8fdb\u884c\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u5173\u4e8e\u793e\u4ea4\u4ea4\u6613\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u66f4\u597d\u7684\u63a8\u8350\uff0c\u5982\u4e0a\u9762\u7b2c\u4e09\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u4ea4\u6613")),(0,n.kt)("h3",{id:"472--\u5173\u6ce8\u73b0\u5b9e"},"4.7.2 \u5173\u6ce8\u73b0\u5b9e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"reality",src:l(4522).Z,width:"1920",height:"1080"})),(0,n.kt)("h2",{id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"},"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"),(0,n.kt)("p",null,"\u5728\u6e38\u620f\u548c\u7535\u5f71\u7b493D\u8f7d\u4f53\u7684\u5a31\u4e50\u4f53\u9a8c\u4e2d\uff0c\u6709\u4e09\u79cd\u4e3b\u8981\u7684\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7279\u7684\u7c7b\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6545\u4e8b\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u6027")),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u6e38\u620f\uff0c\u5b83\u662f\u6e38\u620f\u4e2d\u7684\u7075\u9b42\uff0c\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u6839\u636e\u81ea\u5df1\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\u8bbe\u8ba1\u51fa\u7684\uff0c\u8ba9\u73a9\u5bb6\u4ea7\u751f\u5fc3\u6d41\u7684\u77ac\u95f4\u4f53\u9a8c"),(0,n.kt)("p",null,"\u6545\u4e8b\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u7535\u5f71"),(0,n.kt)("p",null,"\u521b\u4f5c\u6027\u7684\u6700\u5927\u4e0d\u540c\u548c\u9b45\u529b\u5728\u4e8e\uff0c\u521b\u4f5c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u88ab\u52a8\u7684\u4f53\u9a8c\uff0c\u5b83\u662f\u9700\u8981\u601d\u8003\u3001\u6784\u601d\u3001\u81ea\u5df1\u4e2a\u4eba\u5bf9\u751f\u6d3b\u5404\u65b9\u9762\u7684\u7406\u89e3\u3001\u611f\u609f\u548c\u60f3\u8c61\u529b\u7684\uff0c\u56e0\u6b64\u8fd9\u79cd\u8981\u6c42\u66f4\u9ad8\uff0c\u5b83\u7684\u7ed3\u679c\u5bf9\u5e94\u7684\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u6e38\u620f\u6001\u7684\u5fc3\u6d41\uff0c\u5b83\u5bf9\u5e94\u4e8e\u6210\u5c31\u4e86\uff0c\u751a\u81f3\u67d0\u79cd\u7cbe\u795e\u7269\u8d28\uff0c\u521b\u4f5c\u7684\u4e1c\u897f\u624d\u66f4\u5bf9\u5e94\u4e8e\u4ef7\u503c\uff0c\u624d\u66f4\u5bb9\u6613\u4ea7\u751f\u4ea4\u6613"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bfc\u6f14\u6216\u8005\u4e00\u4e2a\u827a\u672f\u5de5\u4f5c\u8005\uff0c\u4ed6\u6301\u7eed\u521b\u4f5c\u4f18\u79c0\u4f5c\u54c1\u7684\u52a8\u529b\u4e3b\u8981\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u4f53\u9a8c\uff0c\u90a3\u4e48\u5c06\u8fd9\u79cd\u80fd\u529b\u91ca\u653e\u5230\u666e\u901a\u5927\u4f17\u5f53\u4e2d\uff0c\u4e5f\u4e00\u5b9a\u4f1a\u662f\u4e0d\u9519\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u8fc7\u53bb\u7684\u79d1\u6280\u6211\u4eec\u805a\u7126\u4e8e\u6539\u5584\u4e00\u4e9b\u5b9e\u7528\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u5b83\u4f53\u73b0\u5728\u53bb\u6d41\u7a0b\u3001\u4fbf\u6377\u6027\u3001\u6548\u7387\u7b49\uff1b\u4e92\u8054\u7f51\u65f6\u4ee3\u9664\u4e86\u63d0\u5347\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u6548\u7387\uff0c\u4ed6\u5f88\u5927\u7684\u4f53\u9a8c\u6539\u5584\u5728\u4e8e\u91ca\u653e\u4e86\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u5c31\u662f\u89c6\u9891\u548c\u7167\u7247\uff0c\u672c\u8d28\u4e0a\u7167\u7247\u548c\u89c6\u9891\u6240\u53cd\u5e94\u7684\u662f\u6bcf\u4e2a\u4eba\u611f\u77e5\u548c\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u4e0d\u540c\u89c6\u89d2\u955c\u5934\u89c2\u5bdf\u540c\u4e00\u4e16\u754c\u4e0d\u540c\u7684\u7f8e\u611f"),(0,n.kt)("li",{parentName:"ul"},"\u6355\u6349\u4e0d\u540c\u611f\u5174\u8da3\u7684\u753b\u9762\u8868\u8fbe\u81ea\u5df1\u7684\u4e2a\u6027\u3001\u7406\u89e3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u62cd\u6444\u611f\u5174\u8da3\u7684\u89c6\u9891\u6545\u4e8b\u53cd\u5e94\u81ea\u5df1\u7684\u5174\u8da3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u8f6c\u8f7d\u4e0d\u540c\u7684\u89c6\u9891\u548c\u56fe\u7247\u4fe1\u606f\u8868\u8fbe\u81ea\u5df1\u7684\u89c2\u70b9\u3001\u4ef7\u503c\u89c2\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5df2\u6709\u5e26\u6709\u5404\u79cd\u5386\u53f2\u3001\u6280\u672f\u3001\u6587\u5316\u7b49\u4fe1\u606f\u7684\u56fe\u7247\u548c\u89c6\u9891\u6dfb\u52a0\u81ea\u5df1\u7684\u7406\u89e3\uff0c\u6292\u53d1\u81ea\u5df1\u7684\u4e3b\u5f20\u3001\u8ba4\u77e5\u3001\u89c2\u70b9\uff1a\u4ef7\u503c\u7b49")),(0,n.kt)("p",null,"\u4f46\u6240\u6709\u8fd9\u4e9b\uff0c\u4ed6\u90fd\u662f\u5728\u89c2\u5bdf\u6216\u8005\u5b66\u4e60\u4e86\u89e3\u8fd9\u4e2a\u4e16\u754c\uff0c\u5b83\u7684\u5de5\u5177\u901a\u5e38\u53ea\u662f\u955c\u5934\uff0c\u9664\u6b64\u4e4b\u5916\u5b83\u51e0\u4e4e\u6ca1\u6709\u5176\u4ed6\u5de5\u5177\uff0c\u4ed6\u7684\u8868\u8fbe\u80fd\u529b\u5f88\u53d7\u9650\u4e8e\u6211\u4eec\u773c\u775b\u6240\u80fd\u770b\u5230\u7684\u4e8b\u7269"),(0,n.kt)("p",null,"\u800c\u53cd\u89c2\u6211\u4eec\u7684\u4e16\u754c\u4e3a\u4ec0\u4e48\u591a\u59ff\u591a\u5f69\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u7528\u5404\u79cd\u5de5\u5177\u5982\u521b\u9020\u4e86\u5efa\u7b51\u3001\u8f66\u5b50\u3001\u8863\u670d\u3001\u8349\u5730\u3001\u516c\u56ed\u3001\u827a\u672f\u4f5c\u54c1\u7b49\u7b49\u6574\u4e2a\u4e16\u754c\uff0c\u8fd9\u4e9b\u521b\u9020\u7684\u4ef7\u503c\u662f\u56e0\u4e3a\u4ed6\u4eec\u878d\u5165\u4e86\u4eba\u4eec\u7684\u7406\u89e3\u3001\u601d\u8003\u3001\u60f3\u8c61\u3001\u751a\u81f3\u68a6\u60f3\u548c\u671f\u671b\u7b49\u7b49"),(0,n.kt)("p",null,"\u521b\u9020\u4f34\u968f\u7740\u6574\u4e2a\u6587\u660e\uff0c\u56e0\u4e3a\u4eba\u4eec\u521b\u9020\u7684\u4e1c\u897f\u6539\u5584\u4e86\u8fd9\u4e2a\u4e16\u754c\uff0c\u63d0\u5347\u4e86\u4eba\u4eec\u7684\u8ba4\u77e5\u3001\u7406\u89e3\u3001\u751f\u6d3b\u6548\u7387\u3001\u751f\u6d3b\u8d28\u91cf\u7b49\u7b49\uff0c\u6240\u4ee5\u5b83\u4fc3\u8fdb\u4e86\u6587\u660e\u8fdb\u7a0b"),(0,n.kt)("p",null,"\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u521b\u9020\u6027\u662f\u5426\u8db3\u591f\u4e86\uff0c\u53d7\u9650\u4e8e\u5f88\u591a\u7269\u7406\u7ea6\u675f\uff0c\u5f88\u591a\u521b\u9020\u80af\u5b9a\u662f\u53d7\u9650\u7684"),(0,n.kt)("p",null,"\u4f46\u662f\u521b\u9020\u865a\u62df\u7684\u5185\u5bb9\u76f8\u8f83\u4e8e\u7269\u8d28\u7269\u54c1\u662f\u5426\u5177\u6709\u4ef7\u503c\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u53ea\u8981\u521b\u9020\u7684\u7ed3\u679c\u63d0\u5347\u4e86\u4eba\u4eec\u5bf9\u4e16\u754c\u7684\u8ba4\u77e5\u548c\u7406\u89e3\u3001\u63d0\u5347\u4e86\u751f\u6d3b\u8d28\u91cf\u3001\u7cbe\u795e\u4e16\u754c\uff0c\u4ece\u800c\u4e5f\u5c31\u4fc3\u8fdb\u4e86\u6587\u660e\u7684\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4ed6\u5c31\u548c\u7269\u7406\u4e16\u754c\u7684\u521b\u9020\u662f\u7b49\u4ef7\u7684"),"\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bf4\uff0c\u5b83\u751a\u81f3\u53ef\u4ee5\u4e0d\u9700\u8981\u8ddf\u7269\u7406\u4e16\u754c\u53d1\u751f\u5173\u8054\uff0c\u5c31\u50cf\u4e00\u4e9b\u79d1\u5e7b\u7535\u5f71\u6216\u8005\u4e00\u4e9b\u7384\u5e7b\u5c0f\u8bf4\u8bb2\u8ff0\u7684\u6545\u4e8b\u90a3\u6837"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u79d1\u6280\u7684\u4e0b\u4e00\u4e2a\u5177\u6709\u793e\u4f1a\u4ef7\u503c\u7684\u4f7f\u547d\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u5f53\u524d\u5728\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u65b9\u9762\u6700\u5bb9\u6613\u5b9e\u65bd\u7684\u662f\u5199\u4f5c\uff1a\u53ef\u4ee5\u57fa\u4e8e\u81ea\u5df1\u7684\u7406\u89e3\u521b\u9020\u65b0\u7684\u7406\u89e3\uff1b\u5176\u6b21\u662f\u7535\u5f71\u548c\u6e38\u620f\uff0c\u4f46\u662f\u4ed6\u4eec\u4ec5\u9762\u5411\u5c11\u6570\u5f00\u53d1\u8005\u6216\u8005\u7535\u5f71\u5de5\u4f5c\u8005"),(0,n.kt)("h3",{id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027"},"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u540c\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u865a\u62df\u7684\u521b\u9020\u4e5f\u5fc5\u7136\u9700\u8981\u5206\u5de5\uff0c\u4e0d\u53ef\u80fd\u6240\u6709\u4e1c\u897f\u90fd\u9700\u8981\u6bcf\u4e2a\u521b\u4f5c\u8005\u4ece\u96f6\u5f00\u59cb\u642d\u5efa"),(0,n.kt)("p",null,"\u5206\u5de5\u610f\u5473\u7740\u52b3\u52a8\u529b\u590d\u7528\uff0c\u8282\u7701\u65f6\u95f4\uff0c\u5206\u5de5\u4e5f\u610f\u5473\u7740\u4ef7\u503c\u7684\u4ea4\u6613"),(0,n.kt)("p",null,"\u5546\u5e97\u6570\u5b57\u8d44\u4ea7\u3001\u7ec4\u4ef6\u7b49\u5176\u5b9e\u5c31\u662f\u5206\u5de5\u7684\u4ea7\u7269"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e16\u754c\u7684\u5206\u5de5\u7531\u4eba\u7c7b\u81ea\u8eab\u9a71\u52a8\uff0c\u4f8b\u5982\u884c\u4e1a\u6807\u51c6\u7531\u884c\u4e1a\u5185\u90e8\u8ba8\u8bba\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5f00\u53d1\u51fa\u80fd\u591f\u6613\u4e8e\u5206\u5de5\u534f\u4f5c\u7684\u67b6\u6784\uff0c\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u7684\u91cd\u8981\u57fa\u7840"),(0,n.kt)("h3",{id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"},"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"),(0,n.kt)("p",null,"\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u4eba\u4eec\u4e4b\u95f4\u7684\u8ddd\u79bb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eb2\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u53cb\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e00\u8d77\u5de5\u4f5c\u6216\u5b66\u4e60")),(0,n.kt)("p",null,"\u56f4\u7ed5\u7740\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u6216\u8005\u8bf4\u4e3a\u4e86\u4e00\u4e9b\u5171\u540c\u7684\u76ee\u6807\u6216\u8005\u5546\u4e1a\u76ee\u7684\uff0c\u5408\u4f5c\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u8fd9\u662f\u751f\u6d3b\u4e2d\u6700\u591a\u7684\u62c9\u8fd1\u4eba\u4eec\u8ddd\u79bb\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e5f\u662f\u6211\u4eec\u65e5\u5e38\u793e\u4ea4\u5708\u5b50\u6269\u5c55\u7684\u4e3b\u8981\u6765\u6e90"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u9020\u6027\u4e0d\u4ec5\u4ec5\u9488\u5bf9\u4e2a\u4eba\uff0c\u8fd8\u9700\u8981\u56f4\u7ed5\u5171\u540c\u76ee\u6807\uff0c\u5171\u540c\u521b\u9020\u548c\u534f\u540c\uff0c\u624d\u80fd\u4fc3\u8fdb\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u548c\u4e86\u89e3"),(0,n.kt)("h3",{id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"},"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u6709\u73a9\u6cd5\uff0c\u76ee\u6807\uff0c\u7b56\u7565\uff0c\u5ef6\u7eed\u6027\u8f83\u5927\u3002"),(0,n.kt)("p",null,"\u4e00\u822c\u521b\u9020\u66f4\u591a\u53ea\u662f\u770b\u4e00\u4e0b\uff0c\u5373\u4f7f\u6709\u4ea4\u4e92\uff0c\u4ea4\u4e92\u7684\u76ee\u7684\u6027\u4e5f\u5f88\u5f31\uff0c\u6240\u4ee5\u9700\u8981\u628a\u5355\u4e2a\u4e00\u822c\u521b\u4f5c\u5185\u5bb9\u7684\u4f53\u9a8c\uff0c\u8f6c\u5316\u4e3a\u6301\u7eed\uff0c\u6709\u76ee\u6807\u548c\u5438\u5f15\u529b\u7684\u4e00\u79cd\u4f53\u9a8c\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d\u5f88\u591a\u65f6\u95f4\u7684\u64cd\u4f5c\u5728\u4e8e\u63a2\u7d22\uff0c\u63a2\u7d22\u4e2d\u4e00\u65b9\u9762\u662f\u4e86\u89e3\u73af\u5883\uff0c\u4e00\u65b9\u9762\u662f\u6536\u96c6\u8d44\u6e90\uff0c\u6240\u4ee5\u8fd9\u4e9b\u4e00\u822c\u76843D\u5185\u5bb9\u4e2d\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\uff0c\u4f8b\u5982\u6bcf\u4e2a\u5185\u5bb9\u90fd\u53ef\u4ee5\u83b7\u5f97\u4e00\u5b9a\u7684\u7ecf\u9a8c\uff0c\u4f46\u662f\u7ecf\u9a8c\u8ddf\u8bbe\u8ba1\u4ea4\u4e92\u6709\u5173\uff0c\u4f46\u7ecf\u9a8c\u662f\u5171\u4eab\u7684"),(0,n.kt)("h3",{id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c"},"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u53ea\u662f\u73a9\u522b\u4eba\u8bbe\u8ba1\u7684\u6e38\u620f\uff0c\u6216\u8005\u770b\u7535\u5f71\uff0c\u8fd9\u901a\u5e38\u53ea\u662f\u4e2a\u4eba\u89c6\u89c9\u4e0a\u7684\u4f53\u9a8c\u3001\u4e2a\u4eba\u7406\u89e3\u7684\u5347\u534e\u3001\u5fc3\u6d41\uff0c\u8fd9\u79cd\u5fc3\u7406\u611f\u89c9\u5f80\u5f80\u5f88\u96be\u4f20\u9012\u7ed9\u5176\u4ed6\u4eba\uff0c\u4f8b\u5982\u5f53\u522b\u4eba\u7ed9\u4f60\u8bb2\u8ff0\u67d0\u4e2a\u6e38\u620f\u4f53\u9a8c\u65f6\uff0c\u5982\u679c\u4f60\u8981\u83b7\u5f97\u7c7b\u4f3c\u7684\u4f53\u9a8c\uff0c\u4f60\u5fc5\u987b\u81ea\u5df1\u4eb2\u81ea\u73a9\u4e00\u4e0b\uff0c\u4ed6\u6ca1\u53d1\u901a\u8fc7\u53e3\u8ff0\u4f20\u9012\u7ed9\u4f60"),(0,n.kt)("p",null,"\u5373\uff0c\u5982\u679c\u8ba4\u4e3a\u8fd9\u79cd\u6e38\u620f\u4f53\u9a8c\u662f\u4e00\u79cd\u4ef7\u503c\uff0c\u90a3\u4e48\u53ea\u6709\u6e38\u620f\u5f00\u53d1\u8005\u521b\u9020\u4e86\u4ef7\u503c\uff0c\u800c\u5927\u90e8\u5206\u73a9\u5bb6\u4e5f\u662f\u83b7\u5f97\u4ef7\u503c\uff0c\u5e76\u4e14\u8fd9\u79cd\u4ef7\u503c\u4e0d\u53ef\u8f6c\u5316"),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e2a\u4e16\u754c\u4f1a\u884d\u751f\u4ef7\u503c\u548c\u521b\u9020\u4ef7\u503c\uff0c\u5219\u6211\u4eec\u5e0c\u671b\u666e\u901a\u7684\u7528\u6237\u80fd\u591f\u521b\u5efa\u53ef\u4ee5\u4ea4\u6613\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u65f6\u95f4\u53ef\u4ee5\u521b\u9020\u8fd9\u79cd\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u6ca1\u6709\u521b\u9020\uff0c\u4ec5\u4ec5\u662f\u4f53\u9a8c\uff0c\u8fd9\u5176\u5b9e\u53c8\u56de\u5230\u4e86\u4f20\u7edf\u6e38\u620f\u884c\u4e1a\uff1a"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u4eba\u53ef\u4ee5\u521b\u9020\u6e38\u620f"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u521b\u9020\u51fa\u597d\u73a9\u7684\u4f53\u9a8c\uff0c\u9700\u8981\u5de8\u5927\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u73a9\u5bb6\u90fd\u5728\u73a9\u540c\u6837\u4e00\u4e9b\u6e38\u620f"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u6e38\u620f\u6b63\u5728\u88ab\u5e7f\u6cdb\u4f53\u9a8c\uff0c\u5c11\u6570\u4eba\u53d7\u76ca"),(0,n.kt)("p",null,"\u4e30\u5bcc\u6027\u4e0d\u591f"),(0,n.kt)("p",null,"\u7f3a\u4e4f\u6e38\u620f\u4e4b\u5916\u7684\u5f88\u591a\u4f53\u9a8c"),(0,n.kt)("p",null,"\u53ea\u6709\u521b\u9020\u548c\u6e38\u620f\u4f53\u9a8c\u7ed3\u5408\uff0c\u624d\u80fd\u5747\u5206\u548c\u6d88\u8017\u66f4\u591a\u7684\u65f6\u95f4\uff0c\u8ba9\u7528\u6237\u80fd\u591f\u6301\u7eed\u6295\u5165\uff0c\u800c\u4f20\u7edf\u6e38\u620f\u7684\u6d3b\u8dc3\u5ea6\u5f80\u5f80\u8ddf\u4e00\u4e9b\u65b0\u6e38\u620f\u6216\u8005\u7ecf\u5178\u6e38\u620f\u76f8\u5173"),(0,n.kt)("h3",{id:"485-\u521b\u9020\u7684\u65b9\u5f0f"},"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec8\u7aef\u7528\u6237\u4e0d\u4f1a\u76f4\u63a5\u5efa\u6a21\uff0c\u9664\u975e\u662f\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e0d\u9700\u8981\u7528\u6237\u96d5\u7422\u7cbe\u7ec6\u7f51\u683c\uff0c\u8fd9\u90e8\u5206\u8fd8\u662f\u8981\u56de\u5f52\u4f20\u7edfDCC\uff0c\u90a3\u91cc\u53ef\u4ee5\u8fdb\u884c\u66f4\u7cbe\u81f4\u5fae\u8c03\uff0c\u57283\u7ef4\u7a7a\u95f4\u505a\u4e0d\u5230\uff08\u8fd9\u6837\u4e5f\u5c31\u907f\u514d\u5c06\u4f20\u7edfDCC\u7684\u5de5\u5177\u5f15\u5165\u8fdb\u6765\uff0c\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u505a\u8ddf\u4f4d\u7f6e\u76f8\u5173\u7684\u4ea4\u4e92\uff0c\u5927\u5927\u7b80\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u4eba\u4eec\u52a0\u5de5\u67d0\u4e2a\u4e1c\u897f\u4e5f\u662f\u57fa\u4e8e\u73b0\u6709\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u4ece\u96f6\u5f00\u59cb\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e00\u4e9b\u4e0d\u9700\u8981\u7cbe\u81f4\u7f51\u683c\uff0c\u5e76\u4e14\u6709\u81ea\u7531\u5ea6\u7684\u7269\u4f53\uff0c\u5982\u5730\u9762\uff0c\u5c71\u8109\u7b49\u7b49\uff0c\u5927\u90e8\u5206\u8ddf\u73af\u5883\u6709\u5173")),(0,n.kt)("p",null,"\u6700\u540e\u7684\u4ea4\u4e92\u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u4fbf\u7b26\u5408\u89c6\u89c9\u76f4\u89c2\u5e38\u8bc6\u7684\u4ea4\u4e92\u96c6\u5408\uff0c\u7528\u6237\u57fa\u672c\u662f\u73af\u5883\u9760\u57fa\u4e8e\u624b\u52bf\u7684\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e2a\u6027\u7269\u4f53\u9760\u6a21\u677f\uff0c\u8c22\u8c22\u6a21\u7248\u901a\u8fc7DCC\u751f\u6210\uff0c\u5927\u90e8\u5206\u811a\u672c\u548c\u903b\u8f91\u4e5f\u662f\u9488\u5bf9\u4e2a\u6027\u7269\u4f53"),(0,n.kt)("p",null,"\u7c98\u6027\uff0c\u7531\u4e8e\u521b\u9020\u82b1\u8d39\u4e86\u5de8\u5927\u7684\u65f6\u95f4\uff0c\u56e0\u6b64\u7c98\u6027\u66f4\u9ad8"),(0,n.kt)("h3",{id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"},"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"),(0,n.kt)("p",null,"\u5355\u6b21\u521b\u9020\u662f\u5c40\u90e8\u7684\uff0c\u5355\u4e2a\u5c40\u90e8\u573a\u666f\u53ef\u4ee5\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u5982\u679c\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\uff0c\u4f8b\u5982\u57fa\u4e8e\u4e00\u5757\u56fa\u5b9a\u7c7b\u578b\u7684\u5730\u6216\u8005\u73af\u5883\uff0c\u7ec4\u6210\u81ea\u5df1\u7684\u5c0f\u4e16\u754c\uff0c\u5c31\u5bb9\u6613\u8ba9\u4e00\u4e9b\u5fd7\u540c\u9053\u5408\u7684\u4eba\u4e00\u8d77\u53bb\u6784\u5efa\u4e00\u4e2a\u4ed6\u4eec\u559c\u6b22\u7684\u4e16\u754c\uff0c\u53ef\u4ee5\u662f\u79d1\u5e7b\uff0c\u6b66\u4fa0\u7b49\u7b49\u98ce\u683c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9f13\u52b1\u5408\u4f5c\u4e0e\u534f\u4f5c\uff0c\u662f\u975e\u5e38\u597d\u7684\u534f\u4f5c\u4f8b\u5b50"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u7ed9\u5176\u4ed6\u4eba\u7684\u6e38\u89c8\u5e26\u6765\u66f4\u5927\u7684\u5438\u5f15\u529b\uff0c\u5b8f\u5927\u7684\uff0c\u5f62\u6210\u4f17\u591a\u5177\u6709\u66f4\u590d\u6742\u8868\u8fbe\u548c\u6587\u5316\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u6587\u5316\u7684\u611f\u89c9\u9700\u8981\u590d\u6742\u6027\u6765\u8868\u73b0\uff0c\u5c40\u90e8\u8f83\u5c0f\u7684\u573a\u666f\u5f80\u5f80\u65e0\u6cd5\u8868\u8fbe\u4e00\u79cd\u6587\u5316\uff0c\u751a\u81f3\u4e00\u4e2a\u6587\u660e"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u660e\u672c\u8eab\u81ea\u5e26\u6545\u4e8b\u4e86")),(0,n.kt)("p",null,"\u5927\u5730\u56fe\u5728PC Create\u4e0a\u521b\u5efa\uff0c\u6216\u8005\u63d0\u4f9b\u4e00\u4e9b\u6a21\u7248\uff0c\u50cfMinecraft Editor \u4e00\u6837"),(0,n.kt)("h3",{id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"},"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"),(0,n.kt)("p",null,"\u867d\u7136\u6c89\u6d78\u5f0f\u3001\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\u5177\u6709\u5f88\u597d\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u76f8\u5bf9\u4e8e\u5f71\u89c6\u6765\u8bf4\uff0c\u5176\u63a2\u7d22\u6210\u672c\u66f4\u9ad8\uff0c\u4f8b\u5982\u770b\u5b8c\u4e00\u90e8\u9b54\u6212\u9700\u8981\u4e09\u4e2a\u5c0f\u65f6\uff0c\u4f46\u662f\u63a2\u7d22\u4e00\u4e2a\u4e2d\u571f\u4e16\u754c\u53ef\u80fd\u603b\u5171\u4f1a\u82b1\u8d39\u5f88\u591a\u5929\u65f6\u95f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u6765\u8bb2\u53ef\u80fd\u662f\u4e0d\u53ef\u884c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u53ef\u80fd\u4ec5\u4ec5\u968f\u4fbf\u770b\u770b\uff0c\u65e0\u6cd5\u6df1\u5165\u4f53\u9a8c\u6545\u4e8b"),(0,n.kt)("li",{parentName:"ul"},"\u73a9\u5bb6\u5bf9\u865a\u62df\u4e16\u754c\u7684\u63a2\u7d22\u672c\u8d28\u4e0a\u6e90\u4e8e\u672a\u77e5\u7684\u4f53\u9a8c\uff0c\u8fd9\u79cd\u672a\u77e5\u5e76\u4e0d\u662f\u5355\u5355\u4e00\u4e2a\u4e00\u4e2a\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u800c\u662f\u6545\u4e8b\u6216\u8005\u73a9\u6cd5\uff0c\u56e0\u6b64\u9700\u8981\u82b1\u5927\u91cf\u7cbe\u529b\u8bbe\u8ba1\uff0c\u800c\u4e00\u65e6\u73a9\u5bb6\u63a2\u7d22\u73a9\u6240\u6709\u672a\u77e5\uff0c\u90a3\u4e48\u8fd9\u4e2a\u4e16\u754c\u4fbf\u4e0d\u518d\u65b0\u5947\uff0c\u9664\u975e\u5b83\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u4e0d\u65ad\u4f1a\u6709\u65b0\u5947\u6545\u4e8b\u53d1\u751f\uff0c\u90a3\u5fc5\u987b\u662f\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u7528\u6237\u80fd\u591f\u9ad8\u5ea6\u81ea\u5b9a\u4e49\u6216\u8005\u751a\u81f3\u81ea\u6211\u6f14\u8fdb")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5f00\u653e\u4e16\u754c\u67b6\u6784\u53ca\u5176\u91cd\u8981"),(0,n.kt)("h2",{id:"49-third-party-apps"},"4.9 Third party apps"),(0,n.kt)("h2",{id:"410--\u793e\u4f1a\u4ef7\u503c"},"4.10 \u793e\u4f1a\u4ef7\u503c"),(0,n.kt)("h3",{id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"},"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"),(0,n.kt)("p",null,"\u6309\u7167\u4fe1\u606f\u7684\u7ec4\u7ec7\u7279\u5f81\uff0c\u5176\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u975e\u5e38\u7b80\u5355\uff0c\u80fd\u591f\u7528\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u7b80\u5355\u63cf\u8ff0\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u4e00\u4e2a\u516c\u5f0f\uff0c\u4e00\u95f4\u4e8b\u60c5\u7684\u65b9\u6cd5\uff0c\u83dc\u8c31\uff0c\u4e00\u6761\u670b\u53cb\u5708\uff0c\u4e00\u6bb5\u89c6\u9891\u7b49\u3002\u8fd9\u79cd\u4fe1\u606f\u6240\u8868\u793a\u7684\u542b\u4e49\u901a\u5e38\u662f\u660e\u786e\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u63cf\u8ff0\u4eba\u4e0e\u4eba\u3001\u6216\u8005\u4eba\u4e0e\u4e8b\u60c5\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u901a\u5e38\u6bd4\u8f83\u62bd\u8c61\uff0c\u5b83\u4e0d\u80fd\u6709\u4e00\u4e2a\u5f88\u786e\u5b9a\u7684\u3001\u7b80\u5355\u7684\u65b9\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff0c\u6bd4\u5982\u4e00\u4e2a\u6545\u4e8b\uff0c\u4e00\u95f4\u827a\u672f\u54c1\uff0c\u5bf9\u4ed6\u7684\u4f20\u64ad\u6d89\u53ca\u4e00\u4e9b\u89e3\u91ca\uff0c\u751a\u81f3\u4e00\u4e9b\u76f8\u5173\u7684\u89c6\u89c9\u7b26\u53f7\uff0c\u6587\u5316\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u79cd\u662f\u673a\u5236\uff0c\u8fd9\u79cd\u673a\u5236\u5f80\u5f80\u662f\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u65e2\u4e0d\u80fd\u50cf\u7b2c\u4e00\u79cd\u4fe1\u606f\u90a3\u6837\u80fd\u591f\u7b80\u5355\u63cf\u8ff0\u548c\u4f20\u64ad\uff0c\u4e5f\u4e0d\u50cf\u7535\u5f71\u7b49\u827a\u672f\u54c1\u90a3\u6837\u53ef\u4ee5\u76f4\u63a5\u89e3\u8bfb\uff0c\u7531\u4e8e\u673a\u5236\u5185\u5b50\u7cfb\u7edf\u6784\u9020\u590d\u6742\u7684\u76f8\u4e92\u5173\u7cfb\uff0c\u56e0\u6b64\u5b83\u9700\u8981\u65b0\u7684\u5a92\u4ecb\u8fdb\u884c\u4f20\u64ad\u3002")),(0,n.kt)("p",null,"\u7535\u5f71\u66f4\u591a\u662f\u5bf9\u4eba\u4e0e\u4eba\u6216\u8005\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7684\u5173\u7cfb\u8fdb\u884c\u63cf\u8ff0\uff0c\u7406\u89e3\u548c\u8868\u8fbe\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u662f\u975e\u7ed3\u6784\u5316\u7684\uff0c\u5b83\u5f88\u96be\u4f7f\u7528\u4e00\u5b9a\u7684\u89c4\u5219\u3001\u6a21\u578b\u3001\u5b9a\u5f8b\u3001\u516c\u5f0f\u7b49\u7b49\u8fdb\u884c\u63cf\u8ff0\uff0c\u6240\u4ee5\u8fd9\u79cd\u975e\u5e38\u9002\u5408\u4e8e\u6587\u5b66\u3001\u7535\u5f71\u3001\u7f8e\u672f\u3001\u620f\u5267\u7b49\u7b49\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u4e0e\u56f4\u7ed5\u4eba\u7684\u5173\u7cfb\u60c5\u611f\u4e0d\u540c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u7406\u89e3\u793e\u4f1a\u8fd0\u4f5c\u7684\u673a\u5236\uff0c\u6bd4\u5982\u4ea4\u901a\uff0c\u65c5\u6e38\u8def\u7ebf\uff0c\u57ce\u5e02\u4e0d\u540c\u7684\u5206\u533a\uff0c\u5de5\u4f5c\u4e0e\u516c\u53f8\u7684\u5206\u7c7b\u7b49\u7b49\uff0c\u8fd9\u4e9b\u53cd\u5e94\u7684\u662f\u793e\u4f1a\u673a\u5236\uff0c\u4ed6\u4eec\u662f\u53ef\u4ee5\u91cf\u5316\u548c\u7ed3\u6784\u5316\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"civilization",src:l(4858).Z,width:"3840",height:"2160"})),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u4e00\u4e2a\u7279\u70b9\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u5f80\u5f80\u662f\u5bb9\u6613\u7528\u6bd4\u8f83\u7b80\u5355\u7684\u4fe1\u606f\u8fdb\u884c\u8868\u8fbe\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u7b80\u77ed\u7684\u4fe1\u606f\u662f\u9700\u8981\u975e\u51e1\u7684\u4eba\u5bf9\u5176\u8fdb\u884c\u9ad8\u5ea6\u7406\u89e3\u548c\u62bd\u8c61\u63d0\u70bc\uff0c\u6bd4\u5982\u4e00\u90e8\u7535\u5f71\u901a\u5e38\u5c31\u8db3\u4ee5\u8bb2\u8ff0\u4e00\u4e2a\u6df1\u523b\u7684\u9053\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u673a\u5236\u5374\u662f\u66f4\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u673a\u5236\u672c\u8eab\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u7531\u8bb8\u591a\u76f8\u4e92\u76f8\u5173\u7684\u5b50\u7cfb\u7edf\u6784\u6210\uff0c\u800c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u4e0d\u662f\u4eba\u6613\u4e8e\u7406\u89e3\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4eba\u5f88\u5bb9\u6613\u7406\u89e3\u4e00\u4e2a\u516c\u5f0f\uff0c\u4f46\u662f\u590d\u6742\u7cfb\u7edf\u65e0\u6cd5\u8868\u8ff0\u6210\u4e00\u4e2a\u5355\u4e00\u7684\u516c\u5f0f\uff0c\u5b83\u662f\u4e00\u4e2a\u591a\u7ef4\u7ebf\u6027\u51fd\u6570\uff0c\u5b83\u7684\u7406\u89e3\u8574\u85cf\u5728\u6240\u6709\u90a3\u4e9b\u5173\u7cfb\u5f53\u4e2d\uff0c\u4e0d\u540c\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u4f1a\u5bfc\u81f4\u5dee\u5f02\u5f88\u5927\u7684\u5173\u7cfb\uff0c\u6709\u591a\u79cd\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6240\u4ee5\u4ed6\u6bd4\u5982\u4e0d\u592a\u80fd\u591f\u7528\u4e00\u90e8\u7535\u5f71\u6765\u8868\u8ff0\uff0c\u6216\u8005\u8bf4\u7535\u5f71\u4e1a\u52a1\u80fd\u591f\u505a\u4e00\u4e9b\u79d1\u666e\uff0c\u4f46\u662f\u771f\u6b63\u7684\u7406\u89e3\u4f60\u5fc5\u987b\u53bb\u4f7f\u7528\u90a3\u4e2a\u7cfb\u7edf\uff0c\u8fd9\u79cd\u201c\u4f7f\u7528\u201d\u4ece\u6570\u5b57\u5316\u7684\u89d2\u5ea6\u6765\u8bb2\u5c31\u662f\u6a21\u62df\uff0c\u800c\u6e38\u620f\u5c31\u662f\u8fd9\u6837\u6a21\u62df\u7684\u6838\u5fc3\u65b9\u5f0f\u4e4b\u4e00")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5927\u90e8\u5206\u8fd9\u6837\u7684\u793e\u4f1a\u673a\u5236\u90fd\u53ef\u4ee5\u501f\u52a93D\u6765\u8fdb\u884c\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u751a\u81f3\u53c2\u4e0e\u5f71\u54cd"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u4eba\u5176\u5b9e\u662f\u6df1\u5ea6\u8ddf\u793e\u4f1a\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5f88\u591a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u4e5f\u6765\u6e90\u4e8e\u793e\u4f1a\u673a\u5236\u7684\u5f71\u54cd\uff0c\u6240\u4ee5\u793e\u4f1a\u673a\u5236\u672c\u8d28\u4e0a\u4e5f\u662f\u53e6\u4e00\u79cd\u5e2e\u52a9\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u79cd\u65b9\u5f0f"),(0,n.kt)("h3",{id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"},"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"),(0,n.kt)("p",null,"\u5982\u4e0a\u4e00\u8282\u7684\u4fe1\u606f\u5206\u7c7b\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u6a21\u578b\u53ea\u9002\u5408\u5904\u7406\u7ed3\u6784\u5316\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u662f\u786e\u5b9a\u7684\uff0c\u5176\u5e94\u7528\u7ed3\u6784\u901a\u5e38\u4e5f\u662f\u4e0d\u4f1a\u7684\uff0c\u4f8b\u5982\u5fae\u4fe1\u3001\u6dd8\u5b9d\u3001\u6296\u97f3\u3001\u652f\u4ed8\u5b9d\u3001\u5927\u4f17\u70b9\u8bc4\u7b49\u7b49\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e9b\u7a0b\u5e8f\u5f53\u4e2d\uff0c\u901a\u5e38\u662f\u7531\u7528\u6237\u53d1\u51fa\u4e00\u4e2a\u64cd\u4f5c\u6307\u793a\uff0c\u7136\u540e\u5e94\u7528\u7a0b\u5e8f\u6309\u7167\u56fa\u5b9a\u7684\u903b\u8f91\u6267\u884c\u67d0\u4e2a\u7ed3\u6784\u57fa\u672c\u4e0a\u4e0d\u53d8\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"complex-system.024",src:l(5130).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u5f53\u4e2d\u8fd8\u6709\u5927\u91cf\u7684\u7c7b\u4f3c\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\uff0c\u8fd9\u7c7b\u4fe1\u606f\u5bf9\u4eba\u4eec\u7406\u89e3\u8fd9\u4e2a\u4e16\u754c\u548c\u793e\u4f1a\u53ef\u80fd\u66f4\u52a0\u81f3\u5173\u91cd\u8981\uff0c\u5e76\u4e14\u8fd9\u7c7b\u4fe1\u606f\u901a\u5e38\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u8fdb\u884c\u8868\u8fbe\u3002\u6e38\u620f\u7a0b\u5e8f\u67b6\u6784\u662f\u975e\u5e38\u9002\u5408\u5904\u7406\u8fd9\u7c7b\u4fe1\u606f\u7684\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u76ee\u524d\u8fd8\u6ca1\u6709\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u4e0d\u7ba1\u662f\u5728\u5f00\u53d1\u5de5\u5177\u3001\u5f00\u53d1\u6d41\u7a0b\u8fd8\u662f\u5f00\u53d1\u6210\u672c\u4e0a\u5b83\u90fd\u5b58\u5728\u7740\u5f88\u591a\u95ee\u9898\uff0c\u8fd8\u4e0d\u5177\u5907\u8fd9\u6837\u7684\u6f5c\u80fd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u6709\u673a\u4f1a\u53bb\u91ca\u653e\u8fd9\u6837\u7684\u6f5c\u80fd\uff0c\u4f7f\u5f97\u6e38\u620f\u7c7b\u5b9e\u65f6\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u4f8b\u5982\u8ddf\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5dee\u4e0d\u591a\u3002\u4e5f\u8bb8\u5728\u8fd9\u6837\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7684\u7a0b\u5e8f\u67b6\u6784\u4e5f\u8bb8\u53ef\u4ee5\u6210\u4e3a\u6574\u4e2a\u6570\u5b57\u5316\u7684\u5e38\u6001\u3002\u8fd9\u6837\u6570\u5b57\u5316\u80fd\u591f\u5728\u4eba\u7c7b\u6587\u660e\u8fdb\u7a0b\u4e2d\u8fdb\u4e00\u6b65\u53d1\u751f\u66f4\u5927\u7684\u63a8\u52a8\u4f5c\u7528\uff0c\u56e0\u4e3a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u6709\u4e00\u79cd\u66f4\u9ad8\u6548\u3001\u66f4\u5177\u8868\u8fbe\u529b\u7684\u4fe1\u606f\u8868\u8fbe\u65b9\u5f0f\u3002"),(0,n.kt)("h3",{id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"},"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7531\u8bb8\u591a\u90e8\u5206\u7ec4\u6210\uff0c\u8fd9\u4e9b\u90e8\u5206\u5355\u4e2a\u770b\u4e00\u822c\u90fd\u5f88\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u628a\u5b83\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\u540e\u5f62\u6210\u7684\u590d\u6742\u7cfb\u7edf\u5927\u90fd\u80fd\u8868\u73b0\u51fa\u65e0\u6cd5\u9884\u6d4b\u7684\u60ca\u4eba\u7279\u6027\uff0c\u5f88\u96be\u901a\u8fc7\u5355\u72ec\u62c6\u5206\u5206\u6790\u6bcf\u4e2a\u7ec4\u6210\u90e8\u5206\u6765\u89e3\u91ca\u8fd9\u79cd\u73b0\u8c61\u3002\u53ef\u4ee5\u901a\u8fc7\u5f15\u5165\u6b63/\u8d1f\u53cd\u9988\u5faa\u73af\u6765\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u5176\u5b9e\u80fd\u591f\u7528\u6765\u8868\u8fbe\u662f\u771f\u5b9e\u751f\u6d3b\u4e2d\u5927\u91cf\u7684\u4fe1\u606f\uff0c\u4ed6\u5bf9\u4e8e\u6211\u4eec\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u3001\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7b49\u7b49\u7684\u5173\u7cfb\u81f3\u5173\u91cd\u8981\u3002\u901a\u5e38\u8fd9\u4e9b\u77e5\u8bc6\u8981\u6bd4\u6211\u4eec\u4e00\u822c\u80fd\u591f\u4ece\u4e66\u4e2d\u770b\u5230\u7684\u4fe1\u606f\u8981\u591a\u5f97\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pasted-image",src:l(533).Z,width:"642",height:"449"})),(0,n.kt)("p",null,"\u4f8b\u5982\u5173\u4e8e\u7ba1\u7406\uff0c\u5176\u5b9e\u5b83\u4e5f\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u6709\u5f88\u591a\u5f71\u54cd\u56e0\u7d20\uff0c\u5982\u679c\u6211\u4eec\u628a\u8fd9\u4e9b\u56e0\u7d20\u7528\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u6765\u8868\u8fbe\uff0c\u8fd9\u6837\u5b66\u4e60\u8005\u53ef\u4ee5\u901a\u8fc7\u4ea4\u4e92\u7684\u65b9\u5f0f\uff0c\u5bf9\u67d0\u4e9b\u5b50\u7cfb\u7edf\u65bd\u52a0\u5f71\u54cd\uff0c\u6765\u5b9e\u65f6\u770b\u5230\u5b83\u4eec\u5bf9\u6574\u4e2a\u7ba1\u7406\u4f53\u7cfb\u5f71\u54cd\u7684\u6548\u679c\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u6211\u4eec\u4e0d\u4ec5\u53ef\u4ee5\u7528\u6765\u5b66\u4e60\u8fd9\u6837\u7684\u4e00\u4e9b\u7cfb\u7edf\u673a\u5236\uff0c\u4e5f\u53ef\u4ee5\u7528\u6765\u5bf9\u4e00\u4e9b\u673a\u5236\u5176\u8fdb\u884c\u6a21\u62df\u548c\u9884\u6d4b\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u80fd\u529b\u662f\u5f88\u96be\u901a\u8fc7\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u6765\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u8fd9\u6837\u7684\u7cfb\u7edf\u5c06\u7ed9\u4eba\u7c7b\u7684\u6587\u660e\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u63a8\u8fdb\u3002"),(0,n.kt)("h2",{id:"411-\u6807\u51c6"},"4.11 \u6807\u51c6"),(0,n.kt)("p",null,"\u57fa\u4e8e\u5168\u5c40\u548c\u516c\u5171\u7b26\u53f7\u8868\u6784\u5efa\u6c9f\u901a\u65b9\u5f0f\u548c\u6807\u51c6\u3002"),(0,n.kt)("h3",{id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"},"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"Epic CEO\u5728\u5176\u6f14\u8bb2\u300aFundamental Principles and Technologis for the Metaverse\u300b\u4e2d\u6307\u51fa\uff0c\u4e3a\u4e86\u5b9e\u73b0\u4e00\u4e2aOpen Metaverse\uff0c\u50cf\u6211\u4eec\u4eca\u5929\u7684\u5404\u79cd\u4e92\u64cd\u4f5c\u7cfb\u7edf\u5982Web\u7b49\u4e00\u6837\uff0c\u9700\u8981\u5b9a\u4e49\u975e\u5e38\u591a\u7684\u6807\u51c6\u7528\u6765\u5b9e\u73b0Metaverse\u5185\u90e8\u5404\u4e2a\u5b9e\u4f53\u3001\u5bf9\u8c61\u7b49\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4f8b\u5982\u5173\u4e8e\u7528\u6237\u7684\u8eab\u4efd\u3001\u8d44\u4ea7\u6240\u6709\u6743\u3001\u793e\u4ea4\u56fe\u8c31\u7b49\u7b49\u3002\u4ed6\u8fdb\u4e00\u6b65\u6307\u51fa\u53ef\u4ee5\u53c2\u89c1\u73b0\u5728\u7684\u4e00\u4e9b\u6807\u51c6\u5982Html+JavaScript\u7b49\u8fdb\u884c\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u4f46\u6211\u4eec\u518d\u6df1\u5165\u53bb\u601d\u8003\u8fd9\u79cd\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u4f1a\u53d1\u73b0\u4e5f\u8bb8\u6211\u4eec\u5e76\u4e0d\u80fd\u4f7f\u7528\u540c\u6837\u7684\u65b9\u5f0f\u53bb\u8bbe\u8ba1Metaverse\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u5176\u4e2d\u4e24\u4e2a\u6700\u91cd\u8981\u7684\u539f\u56e0\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b9e\u65f6\u6027"),"\uff1a\u73b0\u5728\u7684\u6807\u51c6\u6307\u5b9a\u90fd\u662f\u901a\u8fc7\u6587\u672c\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u5404\u4e2a\u5b50\u7cfb\u7edf\u5bf9\u6587\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u8fd9\u79cd\u5927\u91cf\u5b9e\u65f6\u7684\u6587\u672c\u89e3\u6790\u548c\u5b57\u7b26\u4e32\u5904\u7406\u5728\u6e38\u620f\u7a0b\u5e8f\u4e2d\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e92\u64cd\u4f5c\u6027"),"\uff1a\u5373\u4f7f\u53ef\u4ee5\u89e3\u51b3\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u672c\u8d28\u4e0a\u53ea\u662f\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u6211\u4eec\u5c06\u522b\u4eba\u7684\u4ee3\u7801\u653e\u5728\u6211\u4eec\u7684\u73af\u5883\u4e2d\u521d\u59cb\u5316\u548c\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u6b64\u53ef\u4ee5\u83b7\u5f97\u76f4\u63a5\u7684\u53d8\u91cf\u5730\u5740\uff0c\u4f46\u662f\u62ff\u5230\u5730\u5740\u4e4b\u540e\u8981\u8fdb\u884c\u6b63\u786e\u7684\u901a\u4fe1\u8fd8\u662f\u9700\u8981\u4e86\u89e3\u5173\u4e8e\u51fd\u6570\u7684\u5b9a\u4e49\u7b49\u7b49\uff0c\u5426\u5219\u6211\u4eec\u53ea\u80fd\u7ea6\u5b9a\u4e00\u4e9b\u56fa\u5b9a\u7684\u8c03\u7528\u884c\u4e3a\u3002")),(0,n.kt)("p",null,"\u4ee5\u4e0a\u8fd9\u5957\u673a\u5236\u5047\u8bf4\u80fd\u591f\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u5b83\u4e5f\u53ea\u662f\u9488\u5bf9\u53cc\u65b9\u7ea6\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u5c31\u9650\u5236\u4e86\u81ea\u7531\u5ea6\u3002\u4f20\u7edf\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u5b83\u4eec\u4e4b\u95f4\u7684\u901a\u4fe1\u975e\u5e38\u7b80\u5355\uff0c\u57fa\u672c\u4e0a\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u56fa\u5b9a\u7684\u89c4\u5219\u8fdb\u884c\u63cf\u8ff0\uff0c\u4e14\u6807\u51c6\u4e4b\u95f4\u53d8\u66f4\u7684\u9891\u7387\u975e\u5e38\u4f4e\u3002"),(0,n.kt)("p",null,"\u800cMetaverse\u662f\u4e00\u4e2a\u66f4\u52a0\u6d3b\u8dc3\u7684\u5927\u4e16\u754c\uff0c\u5b83\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u8fd0\u4f5c\uff0c\u56e0\u6b64\u5b83\u672c\u8d28\u4e0a\u4e0d\u80fd\u4f7f\u7528\u8fd9\u79cd\u9650\u5236\u6bd4\u8f83\u5927\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u6211\u4eec\u751f\u6d3b\u4e2d\u8ddf\u5176\u4ed6\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u975e\u5e38\u81ea\u7136\u7684\uff0c\u6211\u4eec\u6709\u5f88\u5927\u7684\u81ea\u7531\u5ea6\uff0c\u6ca1\u6709\u88ab\u4e25\u683c\u9650\u5236\u6bcf\u4ef6\u4e8b\u60c5\u4e00\u5b9a\u8981\u6309\u600e\u6837\u7684\u65b9\u5f0f\u505a\uff0c\u5f53\u7136\u5b83\u4e5f\u5b58\u5728\u4e00\u90e8\u5206\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u4f8b\u5982\u6211\u4eec\u8981\u9075\u5faa\u4ea4\u901a\u89c4\u5219\uff0c\u6cd5\u5f8b\u89c4\u5219\u7b49\u7b49\u3002"),(0,n.kt)("h3",{id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"},"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5982\u679cMetaverse\u662f\u8981\u5c3d\u53ef\u80fd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\uff0c\u6216\u8005\u8bf4\u5b83\u7684\u6574\u4e2a\u7cfb\u7edf\u66f4\u7b26\u5408\u4eba\u7c7b\u7684\u8ba4\u77e5\uff0c\u5b83\u7684\u6807\u51c6\u5fc5\u987b\u652f\u6301\u4e24\u79cd\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u8981\u80fd\u591f\u50cf\u4f20\u7edf\u7684\u6807\u51c6\u90a3\u6837\u5236\u5b9a\u56fa\u5b9a\u3001\u9700\u8981\u516c\u4f17\u5171\u540c\u9075\u5b88\u3001\u4e0d\u592a\u5bb9\u6613\u53d8\u5316\u7684\u6807\u51c6\uff0c\u5982\u4ea4\u901a\u89c4\u5219"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u8981\u80fd\u591f\u652f\u6301\u5c40\u90e8\u7fa4\u4f53\u4e4b\u95f4\u5b9a\u4e49\u81ea\u5df1\u7684\u5c0f\u6807\u51c6\uff0c\u5e76\u4e14\u5bf9\u4e8e\u8fd9\u4e9b\u5c0f\u6807\u51c6\uff0c\u7fa4\u4f53\u4e4b\u5916\u7684\u53c2\u4e0e\u8005\u53ea\u8981\u613f\u610f\u9075\u5faa\u8be5\u5c0f\u6807\u51c6\u5bf9\u5e94\u7684\u534f\u5b9a\uff0cTA\u4eec\u5c31\u53ef\u4ee5\u5f88\u8f7b\u677e\u5730\u53c2\u4e0e\u5230\u8fd9\u4e2a\u5c0f\u7fa4\u4f53\u4e2d\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u673a\u5236\u5f88\u50cf\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u8ba9\u4eba\u4eec\u5373\u6709\u5f88\u5927\u7684\u7075\u6d3b\u5ea6\u548c\u81ea\u7531\uff0c\u540c\u65f6\u4e5f\u53d7\u4e00\u5b9a\u7684\u793e\u4f1a\u7ea6\u675f\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u7b26\u53f7\u8868\u5c31\u63d0\u4f9b\u4e86\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u672c\u8eab\u63d0\u4f9b\u4e86\u4e00\u79cd\u5b9a\u4e49\u6807\u51c6\u7684\u673a\u5236\uff1a\u53ea\u8981\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u5305\u542b\uff08\u7c7b\u6bd4\u4e8e\u9075\u5faa\uff09\u8fd9\u6837\u7684\u7b26\u53f7\u6570\u636e\u5b9a\u4e49\uff0c\u5b83\u4eec\u81ea\u7136\u5c31\u9075\u5faa\u4e86\u76f8\u540c\u7684\u6807\u51c6\u3002\u6240\u4ee5\uff0c\u5bf9\u4e8e\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u5bf9\u5e94\u4e00\u4e9b\u516c\u5171\u6807\u51c6\uff0c\u800c\u5bf9\u4e8e\u4e00\u4e9b\u5c40\u90e8\u7684\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u53ef\u4ee5\u521b\u5efa\u81ea\u5df1\u7684\u5c40\u90e8\u7b26\u53f7\u8868\uff0c\u4ece\u800c\u6784\u5efa\u5c40\u90e8\u5c0f\u6807\u51c6\uff0c\u8fd9\u6837\u7406\u8bba\u4e0a\u6765\u8bf4\u5c31\u662f\u4e00\u79cd\u5b8c\u5168\u7684\u81ea\u7531\u5ea6\uff0c\u6bd4\u5982\u4f60\u751a\u81f3\u53ef\u4ee5\u5b9a\u4e49\u522b\u4eba\u5b8c\u5168\u4e0d\u77e5\u9053\u7684\u6807\u51c6\uff0c\u8fd9\u79cd\u81ea\u7531\u5ea6\u662f\u5b58\u5728\u7684\uff0c\u53ea\u662f\u90a3\u6837\u4f60\u6ca1\u6709\u529e\u6cd5\u8ddf\u522b\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4f60\u9700\u8981\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u8fd9\u79cd\u63a8\u5e7f\u4e5f\u4e0d\u662f\u628a\u4f60\u7684\u4e1c\u897f\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u5e02\u573a\u6216\u8005\u53bb\u505a\u5e7f\u544a\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7528\u6237\u5c42\u9762"),"\uff1a\u4f60\u53ea\u9700\u8981\u5c06\u4f60\u7684\u4f5c\u54c1\u653e\u7f6e\u5230\u8fd9\u4e2a\u4e16\u754c\u4e2d\uff0c\u5f53\u6709\u5176\u4ed6\u4eba\u4f53\u9a8c\u5230\u5b83\u65f6\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c31\u590d\u5236\u4f60\u7684\u7ec4\u4ef6\u3002\u867d\u7136\u8fd9\u79cd\u65b9\u5f0f\u5e76\u6ca1\u6709\u5f15\u5165\u65b0\u7684\u5f00\u53d1\u8005\u6765\u9075\u5faa\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u5b83\u5f15\u5165\u548c\u589e\u52a0\u4e86\u4f7f\u7528\u5b83\u7684\u7528\u6237\u3002\u5b9e\u9645\u4e0a\u6211\u4eec\u5efa\u7acb\u7684\u6807\u51c6\uff0c\u5f53\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u652f\u6301\u4e4b\u540e\uff0c\u6211\u4eec\u6700\u7ec8\u7684\u76ee\u7684\u8fd8\u662f\u5e0c\u671b\u901a\u8fc7\u66f4\u591a\u7684\u652f\u6301\u7a0b\u5e8f\u6765\u83b7\u5f97\u4f7f\u7528\u7684\u7528\u6237\uff0c\u4ece\u8fd9\u4e2a\u5c42\u9762\u6765\u8bb2\uff0c\u5b83\u7684\u7ed3\u679c\u662f\u4e00\u6837\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005\u5c42\u9762"),"\uff1a\u6bcf\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6807\u51c6\u90fd\u53ef\u4ee5\u53d1\u5e03\u5230\u4e00\u4e2a\u5171\u4eab\u6807\u51c6\u5e93\uff0c\u5176\u5b9e\u5c31\u662f\u5171\u4eab\u7b26\u53f7\u8868\u3002\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u641c\u7d22\u5171\u4eab\u5e93\uff0c\u5e76\u901a\u8fc7\u5bf9\u5176\u5f15\u7528\u4ee5\u652f\u6301\u8fd9\u4e2a\u6807\u51c6\u3002\u8fd9\u6837\uff0c\u5b9a\u4e49\u7684\u6bd4\u8f83\u597d\u7684\u6807\u51c6\u5c31\u5bb9\u6613\u88ab\u66f4\u591a\u7684\u5f00\u53d1\u8005\u5f15\u7528\u548c\u652f\u6301\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002")),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f62\u6210\u7684\u6807\u51c6\u7cfb\u7edf\u662f\u4e00\u5957\u81ea\u6211\u81ea\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784\uff0c\u5728\u8fd9\u6837\u7684\u67b6\u6784\u4e0b\uff0c\u4efb\u4f55\u6807\u51c6\u4e0d\u4ec5\u80fd\u591f\u88ab\u5176\u4ed6\u72ec\u7acb\u5f00\u53d1\u8005\u4efb\u610f\u652f\u6301\uff0c\u4ee5\u5f62\u6210\u6807\u51c6\u7684\u63a8\u5e7f\uff1b\u5e76\u4e14\u901a\u8fc7\u53ca\u65f6\u8d2d\u4e70\u7b49\u65b9\u5f0f\uff0c\u6807\u51c6\u80fd\u591f\u88ab\u66f4\u76f4\u63a5\u7684\u901a\u8fc7\u7528\u6237\u8fdb\u884c\u666e\u53ca\uff0c\u4ece\u800c\u80fd\u591f\u63a8\u52a8\u90a3\u4e9b\u66f4\u597d\u7684\u6807\u51c6\u88ab\u66f4\u591a\u7684\u4eba\u7fa4\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u79cd\u673a\u5236\uff0c\u6700\u7ec8\u6574\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u4f7f\u6807\u51c6\u5b9e\u73b0\u81ea\u6211\u8fdb\u5316\uff0c\u5e76\u4e14\u5e26\u52a8\u7740\u6574\u4e2a\u4e16\u754c\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u3002"),(0,n.kt)("h3",{id:"4113-\u6807\u51c6\u7ba1\u7406"},"4.11.3 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u5373\u662f\u6574\u4f53\u7cfb\u7edf\u8fdb\u884c\u81ea\u8fdb\u5316\u7684\u673a\u5236\uff0c\u4e5f\u662f\u5b9e\u73b0\u7528\u6237\u5b9e\u4f53\u529f\u80fd\u7684\u673a\u5236\u3002\u5b83\u7684\u6574\u4e2a\u7ba1\u7406\u548c\u66f4\u65b0\u5fc5\u987b\u975e\u5e38\u9ad8\u6548\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u501f\u9274\u4e86\u73b0\u4ee3\u5e94\u7528\u7a0b\u5e8f\u5e02\u573a\u7684\u63a8\u9001\u3001\u6e90\u4ee3\u7801\u5305\u7ba1\u7406\u3001Github\u591a\u7248\u672c\u7ba1\u7406\u7b49\u601d\u60f3\u3002\u4f46\u5b83\u540c\u65f6\u4e5f\u5305\u542b\u4e00\u4e9bRealityIS\u72ec\u7279\u7684\u673a\u5236\u3002\u5b83\u5b9e\u73b0\u7684\u529f\u80fd\u4e0d\u4ec5\u5305\u62ec\u5f00\u53d1\u8005\u5411\u7528\u6237\u7684\u63a8\u9001\uff0c\u4e5f\u5305\u62ec\u7528\u6237\u5411\u5f00\u53d1\u8005\u751a\u81f3\u6807\u51c6\u4f5c\u8005\u7684\u53cd\u5411\u5efa\u8bae\uff0c\u4ee5\u53ca\u6807\u51c6\u4f5c\u8005\u5efa\u8bae\u5f00\u53d1\u8005\u9488\u5bf9\u65b0\u7684\u7b26\u53f7\u8fdb\u884c\u5f00\u53d1\u7684\u5efa\u8bae\uff0c\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u66f4\u6539\uff1a\u5411\u7ec4\u4ef6\u5f00\u53d1\u8005\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u66f4\u6539\uff1a\u5411\u7528\u6237\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u6807\u51c6\u5efa\u8bae\uff1a\u6807\u51c6\u4f5c\u8005\u589e\u52a0\u65b0\u7684\u529f\u80fd\uff0c\u5efa\u8bae\u7ec4\u4ef6\u5f00\u53d1\u8005\u652f\u6301"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u589e\u5f3a\uff1a\u7528\u6237\u5bf9\u7ec4\u4ef6\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5efa\u8bae\uff1a\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5bf9\u6807\u51c6\u4f5c\u8005\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u7279\u6027\u5efa\u8bae\uff1a\u7528\u6237\u53ef\u4ee5\u9488\u5bf9\u6807\u51c6\u4f5c\u8005\u6216\u8005\u5f00\u53d1\u8005\u63d0\u51fa\u65b0\u7684\u76f8\u53cd\u7684\u7ec4\u4ef6\u5f00\u53d1\u5efa\u8bae")),(0,n.kt)("p",null,"\u6574\u4e2aRealityIS\u7684\u81ea\u6211\u8fdb\u5316\u529f\u80fd\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u7684\u4e00\u4e9b\u5217\u673a\u5236\u6765\u5b9e\u73b0\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u540c\u65f6\u6807\u51c6\u7ba1\u7406\u7684\u53e6\u5916\u4e00\u4e2a\u5927\u7684\u76ee\u6807\u662f\u4f7f\u7528\u6237\u7684\u7ec4\u4ef6\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0"),"\uff0c\u51cf\u5c11\u7ef4\u62a4\u65e7\u7ec4\u4ef6\u5e26\u6765\u7684\u590d\u6742\u517c\u5bb9\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u7ba1\u7406\u6709\u4e24\u6761\u7ebf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0a\u800c\u4e0b\u7684\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0b\u800c\u4e0a\u7684\u53cd\u9988\u5efa\u8bae")),(0,n.kt)("h4",{id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5"},"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u6807\u51c6\u672c\u8eab\u6709\u66f4\u6539\uff0c\u4f1a\u901a\u77e5\u5230\u6240\u6709\u652f\u6301\u8be5\u6807\u51c6\u7684\u5f00\u53d1\u8005\uff0c\u63d0\u9192\u4ed6\u4eec\u5347\u7ea7\u7248\u672c\u3002\u5f00\u53d1\u8005\u5728\u6536\u5230\u901a\u77e5\u4e4b\u540e\uff0c\u53ef\u4ee5\u53d1\u5e03\u652f\u6301\u65b0\u6807\u51c6\u7684\u65b0\u7248\u672c\u7ec4\u4ef6\u3002\u5f53\u7136\u7ec4\u4ef6\u5f00\u53d1\u8005\u9700\u8981\u5b9e\u73b0\u517c\u5bb9\u6027\u3002\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u91cd\u547d\u540d"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7")),(0,n.kt)("p",null,"\u6807\u51c6\u66f4\u65b0\u673a\u5236\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\uff0c\u800c\u4e0d\u4f1a\u7531\u4e8e\u4fe1\u606f\u7684\u6ede\u540e\u751a\u81f3\u4e0d\u77e5\u9053\u6807\u51c6\u7684\u6539\u8fdb\u800c\u5bfc\u81f4\u4e00\u4e2a\u6807\u51c6\u8fdf\u8fdf\u65e0\u6cd5\u5feb\u901f\u8fdb\u5316\u3002\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u65b9\u6cd5\uff0c\u6709\u4e24\u9879\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\uff0c\u6807\u51c6\u7684\u4fee\u6539\u53ef\u4ee5\u76f4\u63a5\u901a\u77e5\u5230\u6240\u6709\u5173\u6ce8\u8005\uff1b\u4e2d\u95f4\u6ca1\u6709\u4efb\u4f55\u65f6\u5ef6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u9700\u8981\u5f00\u53d1\u8005\u4e3b\u52a8\u53bb\u5173\u6ce8\u67d0\u4e2a\u6807\u51c6\uff0c\u4ee5\u5f00\u53d1\u8005\u4e3a\u4e2d\u5fc3\u53bb\u63a8\u52a8\u4e00\u9879\u6807\u51c6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u662f\u4e00\u4e2a\u5927\u5bb6\u5171\u540c\u6765\u5236\u5b9a\u6807\u51c6\u7684\u8fc7\u7a0b\uff0c\u8fd9\u79cd\u6548\u7387\u6781\u4f4e\uff0c\u800cRealityIS\u53cd\u8fc7\u6765\uff0c\u5148\u5b9a\u4e49\u6807\u51c6\u3002\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\u4e00\u4e2a\u539f\u56e0\u662fRealityIS\u7b80\u5316\u4e86\u6807\u51c6\u7684\u5b9a\u4e49\uff1a\u5b83\u4ec5\u5173\u6ce8\u4e00\u4e2a\u903b\u8f91\u7ed3\u6784\u4e2d\u9700\u8981\u76f8\u4e92\u901a\u4fe1\u7684\u53c2\u6570\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u76f4\u63a5\u544a\u77e5\u9700\u8981\u4fee\u6539\u7684\u5730\u65b9\uff0c\u7531\u4e8e\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8ddf\u7ec4\u4ef6\u7684\u53d8\u91cf\u5f15\u7528\u5173\u8054\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8ba1\u7b97\u51fa\u54ea\u4e9b\u7ec4\u4ef6\u9700\u8981\u4fee\u6539\uff0c\u4ec0\u4e48\u53d8\u91cf\u9700\u8981\u4fee\u6539\u3002\u800c\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u662f\u901a\u8fc7\u6587\u672c\u7684\u65b9\u5f0f\uff0c\u5982\u90ae\u4ef6\uff0c\u544a\u77e5\u4fee\u6539\u7684\u5185\u5bb9\uff0c\u7136\u540e\u5f00\u53d1\u8005\u518d\u5bf9\u7167\u4fee\u6539\u3002\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u80fd\u591f\u5feb\u901f\u8fdb\u884c\u4fee\u6539\u3002")),(0,n.kt)("h4",{id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"},"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u66f4\u65b0\u4e86\u7ec4\u4ef6\uff0c\u4e5f\u4f1a\u81ea\u52a8\u901a\u77e5\u5230\u6240\u6709\u4f7f\u7528\u8be5\u7ec4\u4ef6\u7684\u7528\u6237\u3002\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e00\u952e\u5347\u7ea7\uff0c\u6216\u8005\u7528\u6237\u53ef\u4ee5\u5f00\u542f\u81ea\u52a8\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u7531\u4e8e\u7ec4\u4ef6\u90fd\u662f\u7ed3\u6784\u5316\u7684\u3001\u6570\u636e\u9a71\u52a8\u7684\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u5199\u6b7b\u5728\u4ee3\u7801\u4e2d\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8f83\u4e3a\u5bb9\u6613\u5730\u5c06\u6240\u4ee5\u8fd9\u4e9b\u7ec4\u4ef6\u4fe1\u606f\u62bd\u53d6\u51fa\u6765\u5f62\u6210\u5217\u8868\u3002\u7528\u6237\u7684\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u4f4e\u7f57\u5217\u51fa\u6765\uff0c\u6240\u4ee5\u5c31\u66f4\u65b9\u4fbf\u7528\u6237\u5bf9\u8fd9\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u5f88\u65b9\u4fbf\u5730\u5bf9\u5b9e\u4f53\u5bf9\u8c61\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h4",{id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236"},"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236"),(0,n.kt)("p",null,"\u6709\u4ee5\u4e0b\u591a\u79cd\u53cd\u9988\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u5f00\u53d1\u8005\uff09\u53cd\u9988\u7ec4\u4ef6\u529f\u80fd\uff1a\u7528\u6237\u57fa\u4e8e\u7ec4\u4ef6\u7684\u529f\u80fd\u7406\u89e3\u548c\u9700\u6c42\uff0c\u7528\u6237\u53ef\u4ee5\u7ed9\u7ec4\u4ef6\u5f00\u53d1\u8005\u63d0\u4f9b\u53cd\u9988\u610f\u89c1\uff0c\u4ee5\u5b8c\u5584\u6216\u589e\u5f3a\u67d0\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u4f5c\u8005\uff09\u53cd\u9988\u6807\u51c6\u7ed3\u6784\uff1a\u53ef\u4ee5\u5411\u6807\u51c6\u7ec4\u7ec7\u63d0\u51fa\u5efa\u8bae\uff0c\u4f8b\u5982\u4fee\u6539\u3001\u5220\u9664\u6216\u8005\u91cd\u547d\u540d\u7b26\u53f7\u3002\u8fd9\u91cc\u7684\u53cd\u9988\u4e2d\u53ef\u4ee5\u662f\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u793e\u533a\uff09\u5f81\u8be2\u65b0\u529f\u80fd\u5f00\u53d1\uff1a\u53ef\u4ee5\u5728\u6807\u51c6\u793e\u533a\u53d1\u5e03\u65b0\u7684\u529f\u80fd\u9700\u6c42\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u6309\u7167\u76f8\u5173\u9700\u6c42\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1\u3002 ")),(0,n.kt)("h4",{id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236"},"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u5bf9\u65e7\u7ec4\u4ef6\u7684\u517c\u5bb9\u6027\u7ef4\u62a4\u6210\u672c\uff0c\u6240\u6709\u7ec4\u4ef6\u6700\u597d\u90fd\u662f\u4fdd\u6301\u6700\u65b0\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u5176\u4e2d\u4e00\u6761\u53ef\u9009\u7684\u505a\u6cd5\u5c31\u662f\u7528\u4e8e\u53ea\u4fdd\u5b58\u6700\u65b0\u7684\u6807\u51c6\uff0c\u8fd9\u6837\u65e7\u7684\u7ec4\u4ef6\u5c31\u5fc5\u987b\u5347\u7ea7\u3002\u4f46\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6709\u65f6\u5019\u5728\u7ec4\u4ef6\u6ca1\u6709\u66f4\u65b0\u4e4b\u524d\u65e0\u6cd5\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u5c31\u662f\u6807\u51c6\u4f5c\u8005\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e9b\u65e7\u6807\u51c6\u5b58\u7eed\u7684\u65f6\u95f4\uff0c\u7ed9\u5f00\u53d1\u8005\u548c\u7528\u6237\u4e00\u6bb5\u65f6\u95f4\u8fdb\u884c\u66f4\u65b0\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u7cfb\u7edf\u9ed8\u8ba4\u5c31\u662f\u4e24\u4e2a\u7248\u672c\uff0c\u5176\u4e2d\u6bcf\u4e00\u4e2a \u65b0\u7248\u672c\u53d1\u5e03\u4e4b\u540e\uff0c\u65e7\u7248\u672c\u6700\u591a\u5b58\u7eed\u56fa\u5b9a\u7684\u65f6\u95f4\uff0c\u5982\u4e09\u4e2a\u6708\uff0c\u4e09\u4e2a\u6708\u4e4b\u540e\u81ea\u52a8\u5220\u9664\u3002\u8fd9\u79cd\u65b9\u5f0f\u770b\u8d77\u6765\u662f\u4e24\u8005\u7684\u4e00\u4e2a\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"4114-\u8de8\u8d8a\u6807\u51c6"},"4.11.4 \u8de8\u8d8a\u6807\u51c6"),(0,n.kt)("p",null,"\u4ece\u903b\u8f91\u4e0a\u8bb2\uff0c\u7ec4\u4ef6\u5173\u6ce8\u7684\u53ea\u6709\u7b26\u53f7\uff0c\u800c\u4e0d\u662f\u6807\u51c6\uff0c\u6807\u51c6\u53ea\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u5728\u5f00\u53d1\u7ec4\u4ef6\u7684\u601d\u8003\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u53c2\u8003\uff0c\u4ed6\u5bf9\u6807\u51c6\u672c\u8eab\u6ca1\u6709\u76f4\u63a5\u7684\u6240\u5c5e\u6216\u8005\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u53ef\u4ee5\u8de8\u57df\u6807\u51c6\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u6bcf\u4e2a\u6807\u51c6\u7406\u89e3\u4e3a\u4e00\u4e2a\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u8fd9\u79cd\u8de8\u8d8a\u6807\u51c6\u7684\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4ece\u800c\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u8054\u7cfb\u6216\u8005\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u6574\u4e2a\u5929\u6c14\u7cfb\u7edf\u5305\u62ec\u4e91\u5c42\u5b50\u7cfb\u7edf\uff0c\u6d77\u6d0b\u5b50\u7cfb\u7edf\uff0c\u5929\u7a7a\u5b50\u7cfb\u7edf\uff0c\u9646\u5730\u5b50\u7cfb\u7edf\u7b49\u7b49\uff0c\u7136\u540e\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u662f\u5b58\u5728\u4e00\u5b9a\u6bd4\u8f83\u7b80\u5355\u7684\u5173\u7cfb\uff0c\u4ece\u800c\u5f62\u6210\u6574\u4e2a\u5929\u6c14\u590d\u6742\u7cfb\u7edf\u7684\u3002"),(0,n.kt)("h4",{id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"},"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5982\u679c\u628a\u6bcf\u4e2a\u6807\u51c6\u770b\u505a\u4e00\u4e2a\u66f4\u5927\u590d\u6742\u7cfb\u7edf\u7684\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u4e2d\u5fc5\u7136\u6709\u90e8\u5206\u5c5e\u6027\u662f\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u7684\u5c5e\u6027\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u6807\u51c6\u901a\u5e38\u4f1a\u5305\u542b\u5c11\u90e8\u5206\u4e0e\u76f8\u5173\u6807\u51c6\u6709\u5173\u7684\u7b26\u53f7\uff0c\u5bf9\u4e8e\u8fd9\u4e9b\u7b26\u53f7\uff0c\u5b83\u4eec\u7684\u5c5e\u6027\u503c\u901a\u5e38\u7531\u5185\u90e8\u7684\u673a\u5236\u8ba1\u7b97\uff0c\u7136\u540e\u8fd9\u4e9b\u503c\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u76f8\u5173\u6807\u51c6\u4e2d\u4e0e\u4e4b\u76f8\u5173\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u54ea\u4e9b\u662f\u76f8\u5173\u5c5e\u6027\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u53bb\u7ea6\u675f\u5b83\u3002\u8fd9\u53ea\u662f\u5f00\u53d1\u8005\u8111\u4e2d\u77e5\u9053\u7684\u4e00\u4e2a\u6982\u5ff5\u3002\u4ece\u7406\u8bba\u4e0a\u6765\u8bf4\uff0c\u6807\u51c6\u7684\u4efb\u4f55\u5c5e\u6027\u4e5f\u8bb8\u90fd\u53ef\u80fd\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u6709\u67d0\u79cd\u5173\u7cfb\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u9700\u8981\u9650\u5236\u4ed6\uff0c\u8fd9\u53ea\u662f\u5bf9\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u6307\u5bfc\u3002"),(0,n.kt)("h2",{id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse"},"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"4121-\u6807\u51c6\u7684\u4ef7\u503c"},"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u662f\u5b9e\u73b0\u591a\u7a0b\u5e8f/\u591a\u5e94\u7528\u4e4b\u95f4\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6807\u51c6\u5219\u6784\u5efa\u4e8e\u7b26\u53f7\u8868\u4e4b\u4e0a\uff0c\u5b83\u662f\u4e00\u7ec4\u8bed\u4e49\u4e0a\u76f8\u5173\u7684\u7b26\u5408\u96c6\u5408\u7684\u6982\u5ff5\u3002\u7b26\u53f7\u603b\u662f\u5b58\u5728\u4e8e\u4e00\u4e2a\u6807\u51c6\u4e4b\u4e2d\uff0c\u5373\u7b26\u53f7\u6309\u6807\u51c6\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u7ec7\u3002"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u5355\u4e2a\u7b26\u53f7\uff0c\u6807\u51c6\u662f\u5bf9\u73b0\u5b9e\u4e16\u754c\u67d0\u4e9b\u5173\u7cfb\u6216\u903b\u8f91\u7684\u62bd\u8c61\u3002\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u662f\u56f4\u7ed5\u67d0\u4e00\u7c7b\u5173\u7cfb\u6216\u8005\u67d0\u4e00\u7c7b\u4e8b\u7269\u7684\u6838\u5fc3\u7684\u6570\u636e\u5c5e\u6027\uff0c\u5176\u4e2d\u901a\u8fc7\u8fd9\u4e9b\u6570\u636e\u8981\u80fd\u591f\u63cf\u8ff0\u8be5\u7c7b\u5173\u7cfb\u6216\u6570\u636e\u7684\u7279\u5f81\u4ee5\u53ca\u5404\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5c5e\u6027\u5e94\u8be5\u662f\u4fbf\u4e8e\u4eba\u7c7b\u7406\u89e3\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u6807\u51c6\u662fReality World\u7684\u4e00\u4e2a\u6838\u5fc3\u6307\u6807\uff0c\u5b83\u4e5f\u662f\u4ee3\u8868\u7528\u6237\u521b\u4f5c\u7684\u6700\u9ad8\u62bd\u8c61\u80fd\u529b\uff0c\u6211\u4eec\u5bf9\u4e8e\u73b0\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u5173\u7cfb\u7684\u6df1\u523b\u62bd\u8c61\u7406\u89e3\u90fd\u8574\u85cf\u5728\u6807\u51c6\u7684\u5b9a\u4e49\u53ca\u5176\u7ed3\u6784\u4e2d\u3002")),(0,n.kt)("p",null,"Reality World\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u6765\u5f00\u53d1\u7684\uff0c\u8fd9\u4fdd\u8bc1\u7ec4\u4ef6\u4e0d\u4f1a\u592a\u6df7\u4e71\uff0c\u56e0\u4e3a\u5b83\u4eec\u662f\u6309\u7167\u5f88\u4e25\u683c\u7684\u903b\u8f91\u6765\u903b\u8f91\u7684\uff0c\u8fd9\u79cd\u903b\u8f91\u7531\u6807\u51c6\u6765\u5b9a\u4e49\u3002\u540c\u65f6\u4ed6\u4e5f\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u53d8\u5f97\u6709\u610f\u4e49\uff0c\u76f8\u5173\u6027\u6bd4\u8f83\u9ad8\uff0c\u56e0\u4e3a\u76f8\u5bf9\u4e8e\u540c\u4e00\u6807\u51c6\u7684\u4e0d\u540c\u7ec4\u4ef6\uff0c\u5b83\u4eec\u5f7c\u6b64\u77e5\u9053\u5e94\u8be5\u600e\u6837\u534f\u4f5c\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u4e0d\u4ec5\u5305\u542b\u4e00\u4e9b\u7684\u76f8\u5173\u6027\uff0c\u4e5f\u5305\u62ec\u5bf9\u903b\u8f91\u5f00\u53d1\u7684\u6307\u5bfc\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u5b9a\u4e49\u5f62\u5f0f\u4e5f\u4f7f\u5f97\u6807\u51c6",(0,n.kt)("strong",{parentName:"p"},"\u6613\u4e8e\u5b9a\u4e49"),"\uff1a\u6211\u4eec\u53ea\u9700\u8981\u627e\u51fa\u63cf\u8ff0\u67d0\u7c7b\u5173\u7cfb\u7684\u6570\u636e\uff0c\u800c\u4e0d\u662f\u9700\u8981\u53bb\u5b9e\u73b0\u6216\u5b9a\u4e49\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u64cd\u4f5c\u7684\u65b9\u6cd5\uff0c\u8fd9\u6837\u5c31\u662f\u7684\u6807\u51c6\u7684\u5b9a\u4e49\u6839\u672c\u4e0d\u9700\u8981\u5f88\u590d\u6742\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u6bd4\u5982\u7c7b\u4f3cUSD\u7c7b\u591a\u5c42\u7ea7\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u4e5f\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\uff0c\u6807\u51c6\u7684\u4f5c\u8005\u53ef\u4ee5\u5bf9\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8fdb\u884c\u65b0\u589e\u3001\u4fee\u6539\u3001\u91cd\u547d\u540d\u6216\u8005\u5220\u9664\u7b49\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u6765\u5b9e\u73b0\u6807\u51c6\u7684\u8fdb\u5316\uff0c\u5f62\u6210\u66f4\u597d\u7684\u62bd\u8c61\uff0c\u66f4\u597d\u7684\u6807\u51c6\u3002\u800c\u52a8\u6001\u7f16\u8bd1\u7684\u673a\u5236\uff0c\u4ee5\u53ca\u6807\u51c6\u66f4\u65b0\u901a\u77e5\u673a\u5236\uff0c\u4f7f\u5f97\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u6216\u8005\u7ec4\u4ef6\u53ef\u4ee5\u5f97\u5230\u901a\u77e5\uff0c\u4f7f\u5f97\u7ec4\u4ef6\u5728\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\u3002\u6700\u7ec8\u771f\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u662f\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u597d\u7684\u6807\u51c6\u4ee3\u8868\u7740\u4f18\u79c0\u7684\u4e8b\u60c5\uff0c\u4ed6\u4f1a\u88ab\u66f4\u591a\u7684\u4eba\u4f7f\u7528\uff0c\u5b83\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u6307\u6807"),(0,n.kt)("p",null,"\u6807\u51c6\u672c\u8eab\u4e5f\u662f\u4e00\u4e2a\u7c7b\u578b\u67e5\u627e\u7684\u4f9d\u636e\uff0c\u6807\u51c6\u7684\u8bbe\u8ba1\u5e94\u8be5\u56f4\u7ed5\u67d0\u4e00\u7c7b\u4e3b\u9898\uff0c\u800c\u4e0d\u662f\u6cdb\u6cdb\u7684\u6d89\u53ca\u591a\u4e2a\u65e0\u5173\u5185\u5bb9\u7684\u6807\u51c6\u3002\u8fd9\u4e9b\u4e5f\u662f\u666e\u901a\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u65f6\u7684\u7ec4\u4ef6\u7b5b\u9009\u673a\u5236\u4e4b\u4e00\u3002"),(0,n.kt)("h3",{id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"},"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b26\u53f7\u8868\u7684\u7248\u6743\uff0c\u7c7b\u6bd4\u6307\u5b9a\u6807\u51c6\uff0c\u7b26\u53f7\u8868\u6807\u51c6\u672c\u8eab\u6bd4\u5b9e\u73b0\u7684\u7ec4\u4ef6\u662f\u66f4\u9ad8\u4ef7\u503c\u7684\u4e1c\u897f"),(0,n.kt)("h3",{id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"},"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"),(0,n.kt)("h4",{id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"},"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"),(0,n.kt)("h3",{id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"},"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u524d\u8005\u662f\u6307\u4e00\u4e2a\u597d\u7684\u6807\u51c6\uff0c\u6709\u4e00\u5b9a\u7684\u673a\u5236\u88ab\u66f4\u591a\u4eba\u53d1\u73b0\uff0c\u4ece\u800c\u4fc3\u8fdb\u4e86\u6807\u51c6\u7684\u63a8\u5e7f\uff0c\u8fd9\u662f\u4e00\u79cd\u7ef4\u5ea6\u7684\u8fdb\u5316\uff0c\u56e0\u4e3a\u8fd9\u6837\u597d\u7684\u4e1c\u897f\u4f1a\u8d8a\u6765\u8d8a\u88ab\u66f4\u591a\u4f7f\u7528\uff0c\u4ece\u7528\u6237\u6765\u770b\uff0c\u8fd9\u4e2a\u4e16\u754c\u53d8\u5f97\u8d8a\u6765\u8d8a\u7f8e\u597d\u3002"),(0,n.kt)("p",null,"\u540e\u8005\u662f\u6307\uff0c\u4fc3\u8fdb\u6807\u51c6\u672c\u8eab\u7684\u8fdb\u5316\u3002\u5373\u5bf9\u4e8e\u4e00\u4e2a\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684\u6807\u51c6\uff0c\u8fd9\u4e2a\u6807\u51c6\u5e76\u4e0d\u662f100%\u5b8c\u7f8e\u7684\uff0c\u5b83\u672c\u8eab\u8fd8\u6709\u6539\u8fdb\u7a7a\u95f4\uff0c\u5b83\u672c\u8eab\u4e5f\u53ef\u4ee5\u5ef6\u540e"),(0,n.kt)("h4",{id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"},"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"),(0,n.kt)("h4",{id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"},"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"),(0,n.kt)("p",null,"\u8ba2\u9605\u7684\u673a\u5236"),(0,n.kt)("h4",{id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"},"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"),(0,n.kt)("p",null,"\u53c2\u89c14.11.3.4\u8282\uff0c\u6807\u51c6\u7684\u66f4\u65b0\u673a\u5236\uff08\u4fdd\u6301\u6700\u65b0\u4e24\u4e2a\u7248\u672c\uff09\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\u4ee5\u53ca\u7275\u5f15\u7528\u6237\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u7248\u672c\u673a\u5236\u8fd8\u4fc3\u8fdb\u4e86\u7ec4\u4ef6\u66f4\u65b0\uff0c\u5f53\u6807\u51c6\u66f4\u65b0\u4e86\uff0c\u53ef\u80fd\u4e0d\u4e45\u4e4b\u524d\uff0c\u6bd4\u5982\u4e00\u4e2a\u6708\u6216\u8005\u534a\u5e74\u7684\u7ec4\u4ef6\u5c06\u6709\u53ef\u80fd\u8fc7\u65f6\uff0c\u8fd9\u65f6\u5019\u4e3a\u4e86\u6301\u7eed\u88ab\u5176\u4ed6\u65b0\u7528\u6237\u4f7f\u7528\uff0c\u5b83\u5fc5\u987b\u66f4\u7ec6\u7ec4\u4ef6\uff0c\u5426\u5219\u65b0\u7528\u6237\u65e0\u6cd5\u8d2d\u4e70\uff0c\u8fd9\u6837\u5c31\u4fc3\u8fdb\u7ec4\u4ef6\u5f00\u53d1\u8005\u5feb\u901f\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u662f\u5df2\u7ecf\u8d2d\u4e70\u7684\u7528\u6237\uff0c\u5b83\u53ef\u4ee5\u53cd\u9988\u8981\u6c42\u7ec4\u4ef6\u66f4\u65b0\uff0c\u8fd9\u91cc\u9762\u5c31\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u523a\u6fc0\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8d2d\u4e70\u662f\u4e00\u6b21\u6027\u7684\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u4e0d\u7528\u5bf9\u8fc7\u671f\u8d1f\u8d23"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u7528\u6237\u9700\u8981\u5347\u7ea7\u7ec4\u4ef6\u65f6\uff0c\u8fd9\u662f\u4e00\u6b21\u91cd\u65b0\u8d2d\u4e70\u884c\u4e3a\uff0c\u5bf9\u5f00\u53d1\u8005\u6765\u8bb2\u6709 \u4e8c\u6b21\u6536\u5165\uff0c\u5f53\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u8bbe\u7f6e\u8001\u7528\u6237\u4f18\u60e0\uff0c\u751a\u81f3\u8001\u7528\u6237\u514d\u8d39\u5347\u7ea7\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u6709\u8db3\u591f\u5927\u7684\u52a8\u529b\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u4ece\u5b9e\u9645\u6765\u8bb2\uff0c\u771f\u5b9e\u793e\u4f1a\u4e5f\u662f\u8fd9\u4e2a\u6837\u5b50\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f60\u4e70\u7684\u4e1c\u897f\u662f\u5bb9\u6613\u8fc7\u65f6\u7684\uff0c\u4f60\u53ef\u80fd\u4f1a\u91cd\u65b0\u8d2d\u4e70\u76f8\u540c\u4ea7\u54c1\u7684\u65b0\u54c1\uff0c\u6bd4\u5982\u624b\u673a")),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5bf9\u4e8e\u8f6f\u4ef6\u6765\u8bb2\uff0c\u66f4\u65b0\u5f88\u5feb\uff0c\u4f60\u4e0d\u53ef\u80fd\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u5c31\u7528\u51e0\u5e74\uff0c\u8fd9\u79cd\u9648\u5e74\u7684\u8001\u4ee3\u7801\u540e\u9762\u4e00\u5b9a\u6709\u517c\u5bb9\u6027\u95ee\u9898\uff0c\u800c\u4e14\u5b83\u4e0d\u66f4\u65b0\u4e5f\u4ee3\u8868\u7740\u7528\u6237\u4f53\u9a8c\u7684\u8fd8\u662f\u5f88\u4e45\u4e4b\u524d\u7684\u4e1c\u897f\uff0c\u5f53\u7136\u8fd9\u4e9b\u4e1c\u897f\u4e5f\u6709\u53ef\u80fd\u7ecf\u5f97\u8d77\u65f6\u95f4\u8003\u9a8c\u3002\u4f46\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u8fd9\u79cd\u6bd4\u8f83\u7a33\u5b9a\u7684\u4ea7\u54c1\uff0c\u5176\u4ee3\u7801\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u5f00\u53d1\u8005\u6bcf\u6b21\u53ef\u80fd\u5e76\u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u591a\u65f6\u95f4\u5c31\u53ef\u4ee5\u66f4\u65b0\u5347\u7ea7\u4e00\u4e0b\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u6bcf\u4e2a\u6807\u51c6\u90fd\u662f\u4e00\u4e2a\u8fdb\u5316\u7684\u8fc7\u7a0b\uff0c\u5230\u4e00\u5b9a\u7684\u9636\u6bb5\u5b83\u4e5f\u4f1a\u8d8b\u4e8e\u7a33\u5b9a"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u6807\u51c6\u5f00\u53d1\u8005\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u6d41\u5931\uff0cTA\u4e5f\u8981\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u7a33\u5b9a\uff0c\u5426\u5219\u9891\u7e41\u53d8\u5316\u7684\u6807\u51c6\u6709\u53ef\u80fd\u4f1a\u6d41\u5931\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u5bf9\u4e8e\u4f20\u7edf\u7684App\u6765\u8bb2\uff0c\u6bd4\u5982\u6709\u65f6\u5019\u770b\u5230\u5f88\u591a\u975e\u5e38\u4e45\u7684app\u6ca1\u6709\u66f4\u65b0\u5347\u7ea7\u4e5f\u80fd\u8fd0\u884c\uff0c\u4f46\u662f\u56e0\u4e3a\u5b83\u662f\u72ec\u7acb\u7a0b\u5e8f\uff0c\u53ea\u8981OS\u4fdd\u6301\u4e00\u5b9a\u7684\u517c\u5bb9\u65f6\u95f4\u5373\u53ef\uff0c\u4f46\u662f\u5bf9\u4e8e\u5728\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u5f00\u653e\u5927\u4e16\u754c\u6765\u8bb2\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u590d\u6742\u5f97\u591a\uff0c\u6240\u4ee5\u524d\u671f\u4f7f\u7528\u66f4\u7b80\u5355\u7684\u65b9\u5f0f\u5904\u7406\u3002"),(0,n.kt)("h2",{id:"413-\u7528\u6237\u521b\u4f5c"},"4.13 \u7528\u6237\u521b\u4f5c"),(0,n.kt)("h3",{id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"},"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"),(0,n.kt)("h3",{id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"},"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"),(0,n.kt)("h3",{id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7"},"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7"),(0,n.kt)("h3",{id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"},"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("h2",{id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"},"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"),(0,n.kt)("h3",{id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458"},"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458"),(0,n.kt)("p",null,"ChatGPT\u65e9\u671f\u7684\u6d41\u91cf\u5927\u90e8\u5206\u6765\u81ea\u6280\u672f\u4eba\u5458\uff0c\u8ddf\u533a\u5757\u94fe\u4e00\u6837\uff0c\u5148\u7531\u6280\u672f\u4eba\u5458\u5230\u975e\u6280\u672f\u4eba\u5458\uff0c\u501f\u52a9\u73b0\u5728\u7684\u793e\u4ea4\u7f51\u7edc\uff0c\u73b0\u5728\u7684\u4fe1\u606f\u4f20\u64ad\u4f1a\u66f4\u5feb"),(0,n.kt)("h3",{id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai"},"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI"),(0,n.kt)("p",null,"\u4ee5ChatGPT\u4e3a\u4ee3\u8868\u7684\u5927\u6a21\u578b\uff0c\u662f\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u65b9\u5f0f\uff0c\u8fc7\u53bb\u5206\u6563\u5728\u591a\u4e2a\u8f6f\u4ef6\u4e2d\u7684\u4fe1\u606f\u548c\u529f\u80fd\uff0c\u73b0\u5728\u88ab\u96c6\u6210\u5230\u4e00\u4e2a\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u6a21\u578b\u548c\u516c\u53f8\u4e2d\uff0c\u4f7f\u5f97\u5355\u4e00\u516c\u53f8\u5bf9\u66f4\u5e7f\u6cdb\u7684\u80fd\u529b\u62e5\u6709\u66f4\u5f3a\u63a7\u5236\u6743\uff0c \u56e0\u6b64\u4fe1\u606f\u5b89\u5168\u4f1a\u66f4\u52a0\u590d\u6742\u3002\u56e0\u4e3a\u4e0d\u7ba1\u4e00\u4e2a\u6a21\u578b\u662f\u5426\u80fd\u591f\u52a8\u6001\u5b66\u4e60\u65b0\u77e5\u8bc6\u7684\u80fd\u529b\uff0c\u8fd8\u662f\u8bf4\u5b83\u7684\u6570\u636e\u5747\u6765\u81ea\u5206\u6563\u7684\u4e92\u8054\u7f51\uff0c\u4f46\u6700\u7ec8\u9762\u5411\u7528\u6237\u7684\u6574\u4e2a\u6d41\u7a0b\u662f\u901a\u8fc7\u5927\u6a21\u578b\u4e2d\u7684\u7b97\u5b50\u548c\u7a0b\u5e8f\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u4e9b\u8f93\u5165\u4fe1\u606f\u4e0d\u7ba1\u662f\u5426\u771f\u5b9e\u51c6\u786e\uff0c\u5927\u6a21\u578b\u7684\u8ba1\u7b97\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u5b83\u638c\u63e1\u7740\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u63a7\u5236\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u672a\u6765\u7684AI\u5e94\u8be5\u662f\u53bb\u4e2d\u5fc3\u5316\u7684\uff0c\u5e94\u8be5\u4ee5\u67d0\u79cd\u7528\u6237\u53ef\u63a7\u7684\u5f62\u5f0f\uff0c\u66f4\u5206\u6563\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u50cfRealityIS\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u7684\u662f\u57fa\u7840\u6a21\u5757\u800c\u4e0d\u662f\u6a21\u578b\uff0c\u7528\u6237\u53bb\u9009\u62e9\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u672a\u6765\u7684AI\u6216\u8bb8\u5e94\u8be5\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u95ee\u9898\u7684\u7ed3\u679c\u533a\u5206\uff0c\u5f53\u4eca\u7684ChatGPT\u7684\u6210\u529f\u5728\u4e8e\u5b83\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u4fe1\u606f\u7684\u7ed3\u679c\u8fdb\u884c\u5173\u8054\uff0c\u8fd9\u79cd\u5173\u8054\u4e00\u65b9\u9762\u65b9\u4fbf\u4e2d\u5fc3\u5316\u7684\u5927\u6a21\u578b\u8fdb\u884c\u5b66\u4e60\u5904\u7406\uff0c\u4f46\u4e5f\u540c\u65f6\u5e26\u6765\u4e86\u98ce\u9669\u3002\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u5c06\u83b7\u53d6\u7ed3\u679c\u90e8\u5206\u7684\u63a7\u5236\u6743\u4ea4\u7ed9\u7528\u6237\uff0c\u7531\u7528\u6237\u6765\u63a7\u5236\uff0c\u53ef\u4ee5\u6709\u8bb8\u591a\u65b9\u5f0f\uff0c\u4f8b\u5982RealityIS\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"},"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"),(0,n.kt)("p",null,"\u4ece\u53e6\u4e00\u4e2a\u89d2\u5ea6\uff0cchatGPT\u5f71\u54cd\u4e86\u4fe1\u606f\u7684\u4f20\u9012\uff0c\u6743\u5a01\u4fe1\u606f\u6bd4\u5982\u65b0\u95fb\u3001\u6280\u672f\u6587\u7ae0\uff0c\u6700\u6838\u5fc3\u7684\u539f\u5219\u80af\u5b9a\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u6bd4\u5982\u5404\u5927\u7f51\u7ad9\u9700\u8981\u63a8\u51fa\u81ea\u5df1\u7684\u5b98\u65b9\u7f51\u7ad9\u6216\u8005\u4fe1\u606f\u6e90\u4f9b\u7528\u6237\u76f4\u63a5\u6d88\u8d39\u3002\u76f4\u63a5\u4f20\u9012\u662f\u4fdd\u6301\u4fe1\u606f\u771f\u5b9e\u6027\u7684\u552f\u4e00\u9014\u5f84\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e00\u65e6\u4fe1\u606f\u7684\u4f20\u64ad\u65b9\u5f0f\u53d8\u5f97\u4e0d\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u8fd9\u5c06\u4f1a\u5927\u5927\u5f71\u54cd\u4fe1\u606f\u7684\u4f20\u64ad\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6e20\u9053\u53ef\u80fd\u4f1a\u4fee\u6539\u4fe1\u606f\u5185\u5bb9\u3002\u5373\u4f7f\u662f\u8f6c\u6458\uff0c\u4e5f\u5f88\u96be\u8fa8\u522b\u8f6c\u53d1\u8005\u505a\u4e86\u54ea\u4e9b\u4fe1\u606f\u4fee\u6539\uff0c\u9664\u975e\u4f60\u53bb\u770b\u539f\u6587\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u603b\u662f\u529b\u6c42\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012\uff0c\u4f20\u9012\u7684\u5a92\u4ecb\u662f\u62a5\u7eb8\uff0c\u62a5\u7eb8\u6709\u51fa\u7248\u793e\u6743\u5a01\u5370\u5237\u5382\u7ecf\u8fc7\u6743\u5a01\u6e20\u9053\u76f4\u63a5\u5230\u8fbe\u7528\u6237\u624b\u4e2d\uff0c\u4e00\u822c\u5f88\u96be\u7be1\u6539\u3002\u800c\u4e92\u8054\u7f51\u5e95\u5ea7\u7684\u4e92\u8054\u6a21\u578b\uff0c\u4e5f\u662f\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u5e95\u5c42\u673a\u5236\u4e0d\u4f1a\u7be1\u6539\u4f20\u8f93\u4fe1\u606f\uff0c\u5e76\u4ee5\u6807\u51c6\u7684\u5f62\u5f0f\u5f00\u653e\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u663e\u7136\u5927\u516c\u53f8\u7684\u5927\u6a21\u578b\u4f5c\u4e3a\u4e00\u4e2a\u4fe1\u606f\u4f20\u64ad\u6e20\u9053\u548c\u65b9\u5f0f\uff0c\u5b83\u65e0\u6cd5\u6709\u8fd9\u6837\u7684\u4fdd\u8bc1\u3002"),(0,n.kt)("h1",{id:"5-realitycoin"},"5. RealityCoin"),(0,n.kt)("p",null,"\u5c06\u8fc7\u53bb\u4f20\u7edf\u6e38\u620f\u5e02\u573a\u4e2d\uff0c\u53ea\u6709\u5f00\u53d1\u5546\u3001\u53d1\u884c\u5546\u548c\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\uff0c\u6269\u5c55\u4e3a\u5176\u4ed6\u4eba\u53ef\u4ee5\u53c2\u4e0e\u6295\u8d44\uff0c\u901a\u8fc7\u6295\u8d44\u6765\u9a71\u52a8\u6e38\u620f\u4f53\u9a8c\u6216\u5e94\u7528\u7a0b\u5e8f\u529f\u80fd\u83b7\u5f97\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4ee5\u592a\u574a\u7c7b\u4f3c\u7684\u53bb\u4e2d\u5fc3\u5316\u5e73\u53f0\uff0c\u7531\u4e8e\u4ee5\u592a\u574a\u53d1\u884c\u7684\u4ee3\u5e01\u8ddf\u5b9e\u9645\u8fd0\u884c\u7684\u4ea7\u4e1a\u4e4b\u95f4\u7f3a\u4e4f\u5173\u8054\uff0c\u672c\u8d28\u4e0a\u4ee5\u592a\u574a\u53ea\u4fdd\u8bc1\u4ea4\u6613\u7684\u6267\u884c\u548c\u5408\u7ea6\u7684\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ea4\u6613\u548c\u5408\u7ea6\u80cc\u540e\u7684\u5b9e\u4f53\u53ca\u5176\u5b9e\u4f53\u7684\u4fe1\u7528\u4f53\u7cfb\uff0c\u4ecd\u7136\u9700\u8981\u4f9d\u8d56\u4e8e\u7b2c\u4e09\u65b9\u673a\u6784\uff0c\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u673a\u6784\u5927\u90fd\u662f\u4e2d\u5fc3\u5316\u7684\u673a\u6784\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u7269\u4f53\u80fd\u4e0d\u80fd\u6309\u65f6\u9001\u8fbe"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u771f\u5b9e\u4e16\u754c\u7684\u7269\u6743\u662f\u5426\u771f\u5b9e\uff0c\u751a\u81f3\u662f\u5426\u771f\u6709\u5176\u6743"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u80cc\u540e\u7684\u56e2\u961f\u662f\u5426\u6709\u80fd\u529b\u6267\u884c\u4ee3\u5e01\u7684\u627f\u8bfa\uff0c\u751a\u81f3\u8c01\u6765\u9a8c\u8bc1\u8fd9\u4e2a\u56e2\u961f\u53ca\u5176\u6267\u884c")),(0,n.kt)("p",null,"\u7531\u4e8eRealityCoin\u53ea\u670d\u52a1\u4e8eReality World\u5e73\u53f0\u4e0a\u7684\u5e94\u7528\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u4ee3\u5e01\u548c\u5e73\u53f0\u4e4b\u95f4\u52a0\u5165\u4e00\u4e9b\u4fe1\u7528\u7ea6\u5b9a\uff0c\u7528\u4ee5\u4fdd\u8bc1\u4ee3\u5e01\u7684\u98ce\u9669\u53ef\u63a7\u3002\u5e76\u4e14\uff0c\u901a\u8fc7\u4fdd\u8bc1\u4ee3\u5e01\u5bf9\u5e94\u7684\u4ea7\u54c1\u786e\u6709\u5176\u7269\uff0c\u751a\u81f3\u53ef\u4ee5\u907f\u514d\u4e00\u4e9b\u8bc1\u5238\u76d1\u7ba1\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h2",{id:"51-\u4ee3\u5e01\u7ecf\u6d4e"},"5.1 \u4ee3\u5e01\u7ecf\u6d4e"),(0,n.kt)("h3",{id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"},"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"),(0,n.kt)("p",null,"\u9664\u4e86Reality World\u5185\u90e8\u7c7b\u4f3c\u5b9e\u4f53\u6216\u8005\u4e2a\u4f53\u7ecf\u6d4e\uff0c\u8fd9\u5728\u524d\u671f\u6ca1\u6709\u4ea7\u54c1\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u5c31\u662f\u9760\u8fd0\u8425\uff0c\u5176\u5b9e\u5c31\u662f\u6295\u653e\u6d41\u91cf\uff0c\u6216\u8005\u5c31\u5355\u7eaf\u9700\u8981\u9760\u4ea7\u54c1\u7684\u53e3\u7891\u3002\u524d\u8005\u6210\u672c\u8f83\u9ad8\uff0c\u800c\u540e\u8005\u6210\u529f\u7387\u8f83\u4f4e\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u903b\u8f91\uff0c\u5b83\u4e0d\u4ec5\u662f\u4e00\u4e2a\u5b89\u5168\u7684\u4ef7\u503c\u4ea4\u6613\u4e2d\u4ecb\uff0c\u5b83\u7684\u67b6\u6784\u4f53\u7cfb\u4e2d\u5929\u751f\u878d\u5165\u4e86\u6295\u8d44\u7684\u903b\u8f91\uff0c\u6bd4\u5982\u5b83\u9996\u5148\u662f\u53d1\u5e01\uff0c\u6b64\u65f6\u5b9e\u7269\u8fd8\u6ca1\u6709\u751f\u4ea7\u51fa\u6765\u6216\u8005\u4ea7\u54c1\u5904\u4e8e\u524d\u671f\u8fd0\u8425\u671f\uff0c\u4ea7\u54c1\u77e5\u540d\u5ea6\u8fd8\u6ca1\u6709\u90a3\u4e48\u9ad8\u3002\u6b64\u65f6\u5c31\u57fa\u4e8e\u6295\u8d44\u8005\u5bf9\u672a\u6765\u4ea7\u54c1\u7406\u5ff5\u6216\u8005\u6545\u4e8b\u7684\u9884\u671f\uff0c\u8fdb\u884c\u6295\u8d44\uff0c\u4f8b\u5982\u4ee3\u5e01\u5c31\u662f\u8fd9\u6837\uff1b\u5373\u4f7f\u6ca1\u6709\u6295\u8d44\uff0c\u5b9e\u73b0\u5206\u53d1\u7684\u865a\u62df\u8d27\u5e01\uff0c\u4e5f\u4f1a\u8ba9\u6301\u5e01\u8005\u4e3a\u4e86\u4f7f\u5f97\u6240\u6301\u8d27\u5e01\u589e\u503c\uff0c\u800c\u4f1a\u65e0\u5f62\u4e2d\u53c2\u4e0e\u5e2e\u52a9\u5e73\u53f0\u7684\u63a8\u5e7f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u4e00\u5957\u903b\u8f91\u80cc\u540e\uff0c\u80fd\u591f\u8ba9\u65e9\u5165\u5c40\u7684\u4eba\u5728\u4ee5\u540e\u83b7\u5f97\u66f4\u5927\u7684\u56de\u62a5\uff0c\u57fa\u4e8e\u5bf9\u5e73\u53f0\u6216\u8005\u4ea7\u54c1\u672a\u6765\u7684\u9884\u671f\u6216\u60f3\u8c61\u7a7a\u95f4\u3002\u56e0\u4e3a\u5982\u679c\u57fa\u4e8e\u6295\u8d44\u8005\u7684\u9884\u671f\uff0c\u65e5\u540e\u8fd9\u4e9b\u81ea\u5df1\u6240\u6301\u7684\u865a\u62df\u8d27\u5e01\u6216\u8005\u4ee3\u5e01\uff0c\u4f1a\u83b7\u5f97\u8f83\u5927\u7684\u4ef7\u503c\u589e\u503c\u7a7a\u95f4\u3002\u56e0\u6b64\u5e26\u6765\u7684\u7ed3\u679c\u662f\u5728\u4ea7\u54c1\u8fd8\u6ca1\u6709\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u5c31\u53ef\u4ee5\u5438\u5f15\u90a3\u4e9b\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u8fd9\u5e2e\u52a9\u4e86\u524d\u671f\u7684\u4ea7\u54c1\u63a8\u5e7f\u3002\u5e76\u4e14\u8d8a\u65e9\u53c2\u4e0e\u7684\u4eba\u83b7\u5f97\u7684\u589e\u503c\u7a7a\u95f4\u4f1a\u8d8a\u5927\uff0c\u6240\u4ee5\u65e9\u671f\u53ef\u4ee5\u5feb\u901f\u6210\u957f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u7740\u7528\u6237\u91cf\u589e\u591a\uff0c\u6216\u8005\u4ea7\u54c1\u5e02\u573a\u8d8a\u6210\u719f\uff0c\u8fd9\u79cd\u589e\u503c\u7a7a\u95f4\u5c31\u9010\u6e10\u53d8\u5c0f\uff0c\u4f46\u662f\u4ea7\u54c1\u7684\u5e02\u573a\u5374\u5df2\u7ecf\u7a33\u5b9a\u4e86\uff0c\u6b64\u65f6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u6295\u8d44\u8005\u4f1a\u6162\u6162\u9000\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u4ea7\u54c1\u5f00\u53d1\u8005\u8fd8\u662f\u53ef\u4ee5\u6301\u7eed\u83b7\u5f97\u8f83\u5927\u7684\u6536\u5165")),(0,n.kt)("h3",{id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"},"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u73a9\u5bb6\u4e3b\u8981\u662f\u4ed8\u8d39\u83b7\u5f97\u4f53\u9a8c\uff0c\u5c5e\u4e8e\u6d88\u8d39\u8005\u3002\u4ee3\u5e01\u7ecf\u6d4e\u53ca\u7cfb\u7edf\u53ef\u4ee5\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u53c2\u4e0e\u5bf9\u6e38\u620f\u7684\u6295\u8d44\uff0c\u8fd8\u53ef\u4ee5\u4ece\u4e2d\u83b7\u5f97\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u73a9\u5bb6\u5728\u73a9\u4e86\u67d0\u4e2a\u6e38\u620f\u4e4b\u540e\uff0c\u89c9\u5f97\u8bbe\u8ba1\u5f88\u597d\uff0c\u5c31\u53ef\u4ee5\u8d2d\u4e70\u5176\u6210\u957f\u4ee3\u5e01\uff0c\u65e5\u540e\u7b49\u6e38\u620f\u5927\u70ed\u4e4b\u540e\u5c31\u53ef\u4ee5\u56de\u62a5\u589e\u503c\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u73a9\u5bb6\u672c\u8eab\u4e5f\u4ed8\u8d39\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u73a9\u5bb6\u662f\u4e0d\u4f1a\u8d5a\u94b1\u7684\uff0c\u8fd9\u79cd\u6a21\u5f0f\u662f\u65e9\u671f\u7684\u73a9\u5bb6\u8d5a\u53d6\u540e\u6765\u52a0\u5165\u73a9\u5bb6\u7684\u94b1\uff0c\u8fd9\u4e5f\u4f7f\u5f97\u90a3\u4e9b\u613f\u610f\u6295\u8d44\u7684\u73a9\u5bb6\u66f4\u613f\u610f\u53bb\u53d1\u73b0\u4e00\u4e9b\u597d\u7684\u6e38\u620f\uff0c\u5e76\u4e14\u662f\u5904\u4e8e\u65e9\u671f\u7684\u6e38\u620f\uff0c\u8d8a\u662f\u65e9\u671f\u5b83\u4eec\u53ef\u80fd\u8d5a\u53d6\u7684\u589e\u503c\u7a7a\u95f4\u8d8a\u5927\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u5bf9\u6574\u4e2a\u65b0\u6e38\u620f\u7684\u53d1\u5c55\u5f62\u6210\u6b63\u5411\u53cd\u9988\u3002\u8fd9\u4e9b\u672c\u8eab\u4e5f\u662f\u9a71\u52a8\u6574\u4e2a\u7cfb\u7edf\u81ea\u6211\u8fdb\u5316\u7684\u4e00\u4e2a\u903b\u8f91\uff0c\u56e0\u4e3a\u90a3\u4e9b\u4e0d\u597d\u73a9\u7684\u6e38\u620f\uff0c\u80af\u5b9a\u6295\u8d44\u7684\u4eba\u5c31\u4f1a\u66f4\u5c11\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u628a\u4e2a\u4f53\u7ecf\u6d4e\u548c\u4ee3\u5e01\u7ecf\u6d4e\u7ed3\u5408\u8d77\u6765\uff0c\u901a\u8fc7\u5b9e\u9645\u4f53\u9a8c\u6765\u83b7\u5f97\u5bf9\u4ea7\u54c1\u7684\u611f\u53d7\uff0c\u7136\u540e\u57fa\u4e8e\u611f\u53d7\u8fdb\u884c\u6295\u8d44\uff0c\u8fd9\u6709\u70b9\u50cf\u98ce\u9669\u6295\u8d44\u8fc7\u7a0b\u4e2d\u7684\u4ea7\u54c1\u5c3d\u8c03\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("h2",{id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97"},"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u5e73\u53f0\u4e3b\u8981\u63d0\u4f9b\u9a8c\u8bc1\uff0c\u53ef\u4ee5\u5728\u4e2d\u5fc3\u5316\u5e73\u53f0\u63d0\u4f9b\u7ed3\u7b97\uff0c\u6709\u5e73\u53f0\u4fe1\u7528\u4fdd\u8bc1\u5bf9\u4e8e\u7ed3\u7b97\u7269\u6743\u7684\u6620\u5c04\u3002\u5b9e\u9645\u4e0a\u7528\u6237\u5173\u5fc3\u7684\u662f\u6570\u636e\u548c\u81ea\u4e3b\u7684\u6743\u5229\uff0c\u8fd9\u79cd\u6620\u5c04\u672c\u8eab\u4e5f\u65e0\u6cd5\u901a\u8fc7\u533a\u5757\u94fe\u4fdd\u8bc1\uff0c\u56e0\u4e3a\u4e0d\u80fd\u5c06\u6574\u4e2a\u5e94\u7528\u5185\u7f6e\u4e8e\u533a\u5757\u94fe\u5185\u3002"),(0,n.kt)("h3",{id:"521-\u7ed3\u7b97\u6027\u80fd"},"5.2.1 \u7ed3\u7b97\u6027\u80fd"),(0,n.kt)("p",null,"\u600e\u6837\u4fdd\u8bc1\u5b9e\u65f6\u7ed3\u7b97\u7684\u6027\u80fd"),(0,n.kt)("p",null,"IOTA"),(0,n.kt)("h2",{id:"53-\u667a\u80fd\u5408\u7ea6"},"5.3 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("p",null,"\u600e\u6837\u8ba9\u7528\u6237\u5b9a\u4e49\u4ee3\u5e01\uff0c\u4ee5\u53ca\u4ee3\u5e01\u4ea4\u6613\u7684\u89c4\u5219"),(0,n.kt)("h2",{id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"},"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u6240\u6709\u4ee3\u5e01\u4e4b\u95f4\u90fd\u53ef\u4ee5\u8fdb\u884c\u4ea4\u6613"),(0,n.kt)("p",null,"Lykke"),(0,n.kt)("h3",{id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01"},"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01"),(0,n.kt)("h3",{id:"542-\u6d41\u52a8\u6027"},"5.4.2 \u6d41\u52a8\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u770b\u5230\uff0c\u51e0\u4e4e\u6bcf\u4e00\u79cd\u65b0\u51fa\u73b0\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u90fd\u548c\u67d0\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c3d\u7ba1\u5f88\u591a\u9879\u76ee\u7ecf\u4e0d\u8d77\u63a8\u6572\uff0c\u800c\u501f\u6b64\u9879\u76ee\u53d1\u884c\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u88ab\u4eba\u4eec\u6316\u82e6\u4e3a \u201c\u7a7a\u6c14\u5e01\u201d\uff0c\u4e5f\u5c31\u662f\u9a97\u94b1\u7684\u5de5\u5177\uff0c\u4f46\u662f\u8fd9\u4e2a\u7ecf\u6d4e\u6a21\u578b\u7684\u51fa\u53d1\u70b9\u662f\u6b63\u9762\u7684\uff0c\u5373\u6bcf\u4e00\u4e2a\u53d1\u5e01\u7684\u533a\u5757\u94fe\u9879\u76ee\uff0c\u90fd\u5c1d\u8bd5\u4ee5\u5176\u6240\u53d1\u884c\u7684\u901a\u8bc1(tioken\uff09\u4f5c\u4e3a\u6fc0\u52b1\u5de5\u5177\uff0c\u4fc3\u8fdb\u53c2\u4e0e\u5404\u65b9\u79ef\u6781\u534f\u4f5c\u3002\u53c2\u4e0e\u8005\u5bf9\u8fd9\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7684\u8d21\u732e\u8d85\u5927\uff0c\u5f97\u5230\u7684\u5e01\u8d8a\u591a\u3002\u800c\u968f\u7740\u9879\u76ee\u53d1\u5c55\u6210\u719f\uff0c\u5f97\u5230\u5e02\u573a\u8d8a\u6765\u8d8a\u591a\u7684\u8ba4\u53ef\uff0c\u5e01\u7684\u4ef7\u503c\u4e5f\u5c06\u6c34\u6da8\u8239\u9ad8\u3002\n\u8fd9\u5c31\u662f\u4e00\u4e2a\u7406\u60f3\u7684 token\u7ecf\u6d4e\u7cfb\u7d71\u3002\u6362\u6210\u73b0\u5728\u65f6\u9ae6\u7684\u672f\u8bed-\u662f\u4e00\u4e2atoken \u7ecf\u6d4e\u751f\u6001\u5708\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0c\u5982\u679c\u52a0\u5bc6\u6570\u5b9a\u800c\u548c\u88dd\u548c\u8981\u4e3a\u578b\u5730\u6bdb\u9875\u7684\u7ecf\u6ecb\u884c\u4e3a\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5176\u793e\u4f1a\u7ecf\u6d4e\u4ef7\u503c\u4f1a\u66f4\u5927\uff0c\u4e5f\u66f4\u5bb9\u6613\u88ab\u63a5\u53d7\uff0c\u5728\u7ecf\u6d4e\u8131\u865a\u5411\u5b9e\u7684\u5927\u73af\u5883\u4e0b\u3002\u66f4\u6709\u52a9\u76ca\u3002\u8fd9\u7c7b\u7ecf\u6d4e\u6d3b\u52a8\u5e76\u4e0d\u662f\u6ca1\u6709\uff0c\u6b63\u5982\u7b2c3\u7ae0\u8ba8\u8bba\u7684\u77e5\u8bc6\u8d21\u732e\u4e0e\u5206\u4eab\u7684\u4f8b\u5b50\uff0c\u7c7b\u4f3c\u5e94\u7528\u573a\u666f\u8fd8\u6709\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u4e00\u4e2a\u6839\u672c\u80fd\u529b\u662f\u80fd\u591f\u5b9e\u73b0\u5357\u6d41\u5230\u534e\u3001\u5feb\u901f\u4ea4\u6613\u3001\u5feb\u901f\u6d41\u8f6c\u3001\u767b\u5168\u53ef\u7a2e\u7684\u529f\u80fd\u3002\u6211\u4eec\u53ef\u4ee5\u8bbe\u60f3\u4e00\u4e0b\uff0c\u628a\u5404\u79cd\u6743\u76ca\u8bc1\u660e\u6bd4\u5982\u95e8\u7968\u3001\u79ef\u5206\u3001\u5408\u540c\u3001\u8bc1\u4e66\u3001\u70b9\u5361\u3001\u8bc1\u5238\u3001\u6743\u9650\u3001\u8d44\u8d28\u7b49\u5168\u90e8\u8fdb\u4e2a\n\u901a\u8bc1\u5316 \uff08tokenization \uff09\uff0c\u5728\u533a\u5757\u94fe\u4e0a\u6d41\u8f6c\uff0c\u653e\u5230\u5e02\u573a\u4e0a\u4ea4\u6613\uff0c\u8ba9\u5e02\u573a\u81ea\u52a8\u786e\u5b9a\u5176\u4ef7\u683c\uff0c\u540c\u65f6\u5728\u73b0\u5b9e\u7ecf\u6d4e\u751f\u6d3b\u4e2d\u53ef\u4ee5\u6d88\u8d39\u3001\u53ef\u4ee5\u9a8c\u8bc1\uff0c\u8fd9\u4e9b\u90fd\u662f\u7d27\u8d34\u5b9e\u4f53\u7ecf\u6d4e\u7684\u826f\u6027\u5e94\u7528\u3002\ntoken \u7ecf\u6d4e\u5177\u6709\u4e00\u4e2a\u7279\u70b9\uff0c\u5c31\u662f\u5404\u4e2a\u7ecf\u6d4e\u751f\u6001\u5708\u7684 token \u90fd\u5177\u6709\u7279\u5b9a\u7ef4\u5ea6\u4e0a\u7684\u4ef7\u503c\uff0c\u5728\u5404\u81ea\u7684\u5708\u5b50\u5185\u662f\u4e0d\u53ef\u6216\u7f3a\u7684\u3002\u4f5c\u4e3a\u4e00\u4e2a\u5f00\u653e\u7684\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5708\u5185\u6210\u5458\u7684\u8fdb\u51fa\u4f1a\u5e26\u6765 token \u7684\u6d41\u52a8\u548c\u4ea4\u6362\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u51fa\u73b0\u7c7b\u4f3c\u4e0d\u540c\u8d27\u5e01\u4e4b\u95ee\u5151\u6362\u7684\u60c5\u51b5\u3002\u5404\u79cdtoken \u53ef\u4ee5\u7528\u6cd5\u5e01\u6807\u4ef7\uff0c\u4f46\u90fd\u7981\u6b62\u6cd5\u5e01\u76f4\u6309\u66ff\u4ee3\u5404\u79cd\u5e01\u5728\u6240\u5728\u7684 token \u7ecf\u6d4e\u751f\u6001\u5708\u5185\u4f7f\u7528\u3002\n\u8fd9\u79cd\u5207\u65ad\u4e86\u6cd5\u5e01\u8fdb\u5165token \u7ecf\u6d4e\u751f\u6001\u5708\uff0c\u800c\u5c06token \u4f5c\u4e3a\u6240\u5728\u7ecf\u6d4e\u751f\u6001\u5708\u7684\u201c\u56fe\u5e01\u201d\u7684\u7ecf\u6d4e\u73b0\u8c61\u662f\u503c\u5f97\u63a2\u8ba8\u7684\u3002\n\u8bd5\u60f3\u4e00\u4e2a\u8fd9\u6837\u7684\u793e\u4f1a\uff0c\u6cd5\u5e01\u4e0d\u518d\u662f\u6240\u6709\u7ecf\u6d4e\u6d3b\u52a8\u7684\u8d27\u5e01\u5a92\u4ecb\uff0c\u793e\u4f1a\u7ecf\u6d4e\u751f\u6d3b\u88ab\u5206\u6210\u4e86\u591a\u6837\u5316\u7684\u5f88\u540d\u516c\u5f00\u653e\u7684\u5708\u5b50\uff0c\u6bcf\u4e2a\u5708\u5b50\u90fd\u6709\u81ea\u5df1\u7684\u7ecf\u6d4e\u6d3b\u52a8\uff0c\u5728\u7279\u5b9a\u8303\u56f4\u5185\uff0c \u4f7f\u7528\u767d\u5df1\u7684\u201c\u5708\u5e01\u201d\u3002\u4f46\u4e5f\u6709\u4eba\n\u5728\u8fd9\u4e9b\u7ecf\u6d4e\u6d3b\u52a8\u4e4b\u5916\uff0c\u5904\u4e8e\u5e73\u5e38\u751f\n\u6d3b\n\u5b50\uff0c\u4f7f\u7528\u7684\u662f\u6cd5\u5e01\u4f5c\u4e3a\u4ea4"),(0,n.kt)("p",null,"\u6613\u5a92\u4ecb\u3002\u6bcf\u4e2a\u4eba\u6bcf\u65f6\u6bcf\u523b\u90fd\u5728\u4e0d\u540c\u7684\u5708\u5b50\u95f4\u6d41\u52a8\uff0c\u5728\u4e0d\u540c\u7684\u5708\u5b50\u904a\n\u5faa\u900f\u660e\u7684\u89c4\u5219\uff0c\u4f7f\u7528\u4e0d\u540c\u7684 \u201c\u5708\u5e01\u201d\n\uff0c\u76f8\u5e94\u4e5f\u7559\u4e0b\u4e86\u53ef\u8ffd\u6eaf\u548c\u4e0d\u53ef\n\u7be1\u6539\u7684\u6d3b\u52a8\u8bb0\u5f55\uff08\u56fe 4.3\uff09\u3002\n\u6743\u76ca\u8bc1\u660e\n\u5408\u7f51\n\u6cdf\u4e66\n\u56fe 4.3 \u6743\u76ca\u8bc1\u660e\u901a\u8bc1\u5316\n\u8fd9\u6216\u8bb8\u662f\u4e00\u4e2a\u66f4\u52a0\u6709\u5e8f\u7684\u793e\u4f1a\u5f62\u6001\u3002\u6709\u4e86token\uff0c\u53c2\u4e0e\u8005\u3001\u9879\n\u4e14\u5efa\u8bbe\u8005\u3001\u4ea7\u54c1\uff0c\u8fd9\u6b64\u8981\u7d20\u5728\u7279\u5b9a\u7ecf\u6d4e\u751f\u6001\u570b\u5185\u6709\u673a\u5730\u6d4e\u52a8\u8d77\u6765\u3002\u8fdb\u4eba\u5712\u5b50\u7684\u4eba\u8d8a\u591a\uff0c\u751f\u5e7f\u8bdd\u52a8\u8d8a\u660c\u76db\uff0ctoken\u5c31\u8d8a\u6709\u4ef7\u8857\u3002\u5927\u708e\u793e\u4f1a\u751f\u6d3b\u4f1a\u51fa\u73b0\u767d\u7ec4\u7ec7\u7ecf\u6d4e\u751f\u6001\uff0ctoken \u53ef\u4ee5\u65b9\u4fbf\u3001\u4f4e\u6210\u672c\u5730\u5b9e\u73b0\u95dc\n\u5185\u7684\u6295\u7968\u548c\u8868\u6c7a\u3002\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u8fd8\u4ece\u672a\u6709\u4e00\u4e2a\u56fd\u5bb6\u7ecf\u5386\u8fc7\u8fd9\u6837\u4e00\u4e2a\n\u5b58\u5728\u591a\u79cd\u4ef7\u503c\u7b26\u53f7\u548c\u591a\u79cd\u4ef7\u503c\u5c3a\u5ea6\u7684\u793e\u4f1a\uff0c\u5728\u8fd9\u4e2a\u793e\u4f1a\u4e2d\u793e\u4f1a\u6cbb\u7406\u3001\u56fd\u5bb6\u7ba1\u7406\u3001\u5b8f\u89c2\u7ecf\u6d4e\u7b49\u65b9\u9762\uff0c\u90fd\u4f1a\u51fa\u73b0\u524d\u6240\u672a\u6709\u7684\u8003\u9a8c\uff0c\u5f88\u591a\u7ecf\u6d4e\u548c\u793e\u4f1a\u89c4\u5219\u90fd\u4f1a\u9010\u6e10\u53d1\u751f\u6df1\u523b\u7684\u53d8\u5316\u3002"),(0,n.kt)("h2",{id:"55-\u5e73\u53f0\u4fe1\u7528"},"5.5 \u5e73\u53f0\u4fe1\u7528"),(0,n.kt)("p",null,"\u5e73\u53f0\u4fe1\u7528\u4e3b\u8981\u662f\u6307\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u7269\u6743\u5230\u5e73\u53f0\u8d44\u4ea7\u7684\u6620\u5c04\u4fe1\u7528\u4fdd\u8bc1\uff0c\u4f8b\u5982\u7ec4\u4ef6\uff0c\u6807\u51c6\u548c\u4f5c\u54c1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6295\u8d44\u8005\u548c\u521b\u4f5c\u7528\u6237\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u7c7b\u4f3c\u516c\u7ea6\u7684\u534f\u8bae\u673a\u5236\uff0c\u4fdd\u8bc1\u6295\u8d44\u8005\u6743\u76ca\uff0c\u4ee5\u53ca\u5efa\u7acb\u4e00\u4e9b\u8282\u7ea6\u65e0\u63a7\u5236\u4eba\u7ba1\u7406\u548c\u6cd5\u5f8b\u4e4b\u95f4\u7684\uff0c\u7c7b\u4f3c\u6cd5\u5f8b\u7684\u7ea6\u675f")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u672c\u8d28\u4e0a\u53ea\u80fd\u4fdd\u8bc1\u5b58\u5165\u533a\u5757\u94fe\u7684\u6570\u636e\u7684\u4e0d\u53ef\u7be1\u6539\u6027\uff0c\u6240\u4ee5\u8fd9\u91cc\u9762\u5c31\u5b58\u5728\u6f0f\u6d1e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u5728\u533a\u5757\u94fe\u4e2d\u7684\u6570\u636e\u662f\u65e0\u6cd5\u4fdd\u8bc1\u4fe1\u7528\u7684")),(0,n.kt)("p",null,"\u800c\u8fd9\u6837\u7684\u6570\u636e\u662f\u5f88\u591a\u7684\uff0c\u800c\u4e14\u51e0\u4e4e\u4e0d\u53ef\u80fd\u7edd\u5bf9\u4fdd\u8bc1\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u4e0a\uff0c\u56e0\u4e3a\u533a\u5757\u94fe\u7684\u6838\u5fc3\u7684\u5206\u5e03\u5f0f\u5b58\u50a8\u548c\u8ba1\u7b97\uff0c\u5c31\u5bfc\u81f4\u4eba\u7c7b\u4fe1\u606f\u51e0\u4e4e\u4e0d\u53ef\u80fd\u5c06\u6240\u6709\u4fe1\u606f\u8fc1\u79fb\u81f3\u533a\u5757\u94fe\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u4e0a\u4ea4\u6613\u7684\u6570\u503c\u867d\u7136\u662f\u7edd\u5bf9\u4e0d\u53ef\u7be1\u6539\u7684\uff0c\u4f46\u662f\u5176\u6570\u503c\u5bf9\u5e94\u5b9e\u7269\u7684\u6620\u5c04\u5173\u7cfb\u5219\u662f\u9700\u8981\u7b2c\u4e09\u65b9\u4fe1\u7528\u673a\u6784\u62c5\u4fdd\u7684\uff0c\u5426\u5219\u8fd9\u4e9b\u6570\u636e\u4e5f\u662f\u53ef\u80fd\u5b58\u5728\u6b3a\u9a97\u7684\uff0c\u800c\u5b9e\u9645\u4e0a\u4f20\u7edf\u7684\u5546\u4e1a\u6b3a\u8bc8\u4e2d\uff0c\u6570\u636e\u8d26\u672c\u672c\u8eab\u4f5c\u5047\u53ef\u80fd\u53cd\u800c\u662f\u8c28\u614e\u7684\uff0c\u56e0\u4e3a\u8fd9\u90e8\u5206\u6bd4\u8f83\u5bb9\u6613\u88ab\u67e5\u51fa\u6765\uff0c\u5c24\u5176\u73b0\u5728\u672c\u8eab\u6570\u5b57\u5316\u4e5f\u6bd4\u8f83\u591a\u4e86\uff0c\u4f46\u662f\u4f5c\u5047\u7684\u5f80\u5f80\u90fd\u5728\u4e8e\u8fd9\u4e9b\u8d44\u4ea7\u6240\u6807\u6ce8\u7684\u6570\u5b57\u8ddf\u5b9e\u9645\u4ef7\u503c\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u8fd9\u5374\u662f\u6700\u96be\u7ba1\u7406\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4e4e\u5927\u90e8\u5206\u9700\u8981\u5360\u7528\u5927\u91cf\u5b58\u50a8\u7684\u6570\u636e\u5f88\u96be\u5b58\u50a8\u5728\u533a\u5757\u94fe\uff0c\u4f8b\u5982\u628a\u4f60\u7f51\u76d8\u7684\u7167\u7247\u6570\u636e\u653e\u5230\u533a\u5757\u94fe\uff0c\u4f60\u627f\u62c5\u5f97\u8d77\u8fd9\u4e2a\u6210\u672c\u5417"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\uff0c\u8ba1\u7b97\u7a0b\u5e8f\u4e5f\u662f\u4e00\u4e2a\u4fe1\u7528\u95ee\u9898\u7684\u6765\u6e90\uff0c\u5982\u679c\u4f60\u7684\u8ba1\u7b97\u4e0d\u662f\u5728\u533a\u5757\u94fe\u4e0a\u7684\uff0c\u7406\u8bba\u4e0a\u8bf4\u8fd9\u4e5f\u662f\u5bb9\u6613\u51fa\u95ee\u9898\u7684\uff0c\u4f46\u662f\u8ba1\u7b97\u653e\u5728\u533a\u5757\u94fe\u51e0\u4e4e\u4e5f\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u6bd4\u5982\u4f60\u5f97\u628a\u6240\u6709\u4ee3\u7801\u8f6c\u5316\u6587\u533a\u5757\u94fe\u865a\u62df\u673a\u7684\u4ee3\u7801\uff0c\u53e6\u5916\u662f\u9762\u4e34\u6e90\u4ee3\u7801\u5f00\u6e90\u7684\u95ee\u9898\uff0c\u4ee5\u53ca\u540c\u6837\u7684\u5927\u89c4\u6a21\u8ba1\u7b97\u6027\u80fd\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7edd\u5bf9\u4fe1\u7528\u5b89\u5168\u7684\u533a\u5757\u94fe\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u903b\u8f91\u8ba1\u7b97\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u4ea7\u539f\u751f\u5c31\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u6240\u4ee5\u4e0d\u6d89\u53ca\u4efb\u4f55\u94fe\u5916\u7684\u5173\u8054\u548c\u64cd\u4f5c")),(0,n.kt)("p",null,"RealityIS\u5e73\u53f0\u4e2d\u7684\u6240\u6709\u8d44\u6e90\u539f\u751f\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u53ea\u8981\u4fdd\u8bc1\u597d\u533a\u5757\u94fe\u4fe1\u606f\u5230\u6570\u5b57\u8d44\u4ea7\u7684\u6620\u5c04\uff0c\u5c31\u80fd\u66f4\u5b89\u5168\u3002"),(0,n.kt)("h3",{id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae"},"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae"),(0,n.kt)("h3",{id:"552-\u4ee3\u5e01\u534f\u8bae"},"5.5.2 \u4ee3\u5e01\u534f\u8bae"),(0,n.kt)("h2",{id:"56-\u73b0\u5b9e\u5e94\u7528"},"5.6 \u73b0\u5b9e\u5e94\u7528"),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u62df\u548c\u8ddf\u8e2a\u771f\u5b9e\u4e16\u754c\u7684\u67d0\u4e9b\u89c4\u5f8b\uff0c\u6765\u89e3\u51b3\u73b0\u5b9e\u95ee\u9898"),(0,n.kt)("h2",{id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"},"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"),(0,n.kt)("h3",{id:"571-\u73a9\u5bb6\u9053\u5fb7"},"5.7.1 \u73a9\u5bb6\u9053\u5fb7"),(0,n.kt)("p",null,"\u53d1\u884c\u4ee3\u5e01\uff0c\u5982\u679c\u957f\u65f6\u95f4\u6ca1\u6709\u88ab\u4e3e\u62a5\u6709\u4e0d\u826f\u793e\u533a\u884c\u4e3a\u7684\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\uff0c\u901a\u8fc7\u5229\u76ca\u6765\u4fc3\u8fdb\u793e\u4f1a\u7684\u98ce\u6c14\u3002"),(0,n.kt)("h3",{id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1"},"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1"),(0,n.kt)("h2",{id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"},"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"),(0,n.kt)("h3",{id:"581-\u793e\u4ea4\u5206\u4eab"},"5.8.1 \u793e\u4ea4\u5206\u4eab"),(0,n.kt)("p",null,"\u7531\u4e8e\u793e\u4ea4\u5206\u4eab\u662f\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u53ef\u4ee5\u8ba9\u670b\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\u8f6c\u6362\u4e3aRealityCoin\u5956\u52b1"),(0,n.kt)("h3",{id:"582-\u53c2\u4e0e\u5185\u6d4b"},"5.8.2 \u53c2\u4e0e\u5185\u6d4b"),(0,n.kt)("p",null,"\u63d0\u4ea4bug\u6216\u8005\u5efa\u8bae\uff0c\u83b7\u5f97\u5f00\u53d1\u5546\u63a5\u53d7\u7684\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\u5956\u52b1\u3002"),(0,n.kt)("h2",{id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"},"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u4e2d\uff0c\u6e38\u620f\u4ee3\u5e01\u672c\u8eab\u4e0d\u4f1a\u5f71\u54cd\u5230\u6e38\u620f\u672c\u8eab\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u4ee3\u5e01\u5f62\u6210\u4e00\u79cd\u66f4\u5927\u8303\u56f4\u7684\u4e1c\u897f\uff0c\u4ed6\u53ef\u80fd\u5bf9\u6e38\u620f\u672c\u8eab\u9020\u6210\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u4f8b\u5982\u4ee3\u5e01\u53ef\u80fd\u4f1a\u8d2c\u503c\u6216\u8005\u5347\u503c\uff0c\u8fd9\u5728\u4f20\u7edf\u6e38\u620f\u5185\u662f\u4e0d\u4f1a\u53d1\u751f\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u65f6\u5019\u4ee3\u5e01\u7ecf\u6d4e\u7684\u4e00\u4e9b\u6839\u672c\u6027\u7f3a\u9677\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4e0d\u7a33"),(0,n.kt)("li",{parentName:"ul"},"\u516c\u4fe1\u529b\u4e0d\u5f3a"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u63a5\u53d7\u8303\u56f4\u6709\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u4ea7\u751f\u8f83\u5927\u7684\u8d1f\u5916\u90e8\u6027")),(0,n.kt)("p",null,"\u5b83\u5f88\u96be\u901a\u8fc7\u516c\u4f17\u548c\u5e02\u573a\u7684\u68c0\u9a8c\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u4e0d\u7ba1\u91c7\u7528\u7684\u6280\u672f\u6709\u591a\u5148\u8fdb\uff0c\u91c7\u7528\u8fd9\u7c7b\u52a0\u5bc6\u6570\u5b57\u5e01\u4f5c\u4e3a\u201c\u8d27\u5e01\u201d\uff0c\u4ecd\u662f\u8d70\u56de\u5934\u8def\uff0c\u662f\u56de\u5f52\u4e00\u79cd\u843d\u540e\u7684\u8d27\u5e01\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u4e9b\u7f3a\u70b9\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u50cf\u4f20\u7edf\u6e38\u620f\u4e00\u6837\uff0c\u5c06\u8d27\u5e01\u5c5e\u6027\u63a7\u5236\u5728\u6e38\u620f\u6216\u8005\u5e73\u53f0\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u4e25\u683c\u63a7\u5236\u6295\u673a\u884c\u4e3a\u5e26\u6765\u7684\u5f71\u54cd")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7406\u5ff5\u5b9e\u9645\u4e0a\u4f7f\u6211\u4eec\u5728\u4f7f\u7528\u4ee5\u533a\u5757\u94fe\u4e3a\u5f88\u7684\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u5b57\u7ecf\u6d4e\u65b9\u9762\u63d0\u51fa\u4e24\u4e2a\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u4e2d\u5fc3\u5316\uff0c\u662f\u7528\u6765\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\u548c\u4e2a\u4eba\u9690\u5f0f\uff0c\u662f\u7528\u6237\u7684\u5ba2\u89c2\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u8d27\u5e01\u7684\u884c\u4e3a\uff0c\u66f4\u591a\u662f\u5c11\u6570\u6295\u673a\u8005\u7684\u9700\u6c42\uff0c\u800c\u4e0d\u662f\u5e7f\u5927\u7528\u6237\u7684\u9700\u6c42\uff0c\u5f53\u7136\u4ee3\u5e01\u7ecf\u6d4e\u6709\u4e00\u5b9a\u7684\u4f18\u52bf\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u8fd9\u90e8\u5206\u63a7\u5236\u5728RealityIS\u5e73\u53f0\u5185\u90e8\uff0c\u800c\u4e0d\u4f1a\u50cf\u5176\u4ed6\u6570\u5b57\u8d27\u5e01\u4e00\u6837\u76ee\u6807\u4e3a\u901a\u7528\u7684\u4ef7\u503c\u4ea4\u6362\u65b9\u5f0f\u3002")),(0,n.kt)("h2",{id:"510-\u67b6\u6784\u7f3a\u9677"},"5.10 \u67b6\u6784\u7f3a\u9677"),(0,n.kt)("h3",{id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"},"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u516c\u94fe\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u548c\u8ba1\u7b97\u5b89\u5168\uff0c\u5bf9\u8282\u70b9\u7ed9\u4e88\u4e86\u8d85\u989d\u7684\u6fc0\u52b1\uff0c\u8fd9\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6316\u77ff\u4ea7\u751f\u7684\u539f\u59cb\u4ee3\u5e01\uff0c\u5e76\u4e14\u8fd9\u662f\u4ee3\u5e01\u7684\u539f\u751f\u548c\u552f\u4e00\u7684\u53d1\u884c\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u7684\u624b\u7eed\u8d39")),(0,n.kt)("p",null,"\u7531\u4e8e\u8282\u70b9\u6570\u91cf\u5e9e\u5927\uff0c\u4ee5\u53ca\u8282\u70b9\u9700\u8981\u6301\u7eed\u7ef4\u6301\u4e0b\u53bb\uff0c\u56e0\u6b64\u533a\u5757\u94fe\u8282\u70b9\u7684\u6210\u672c\u662f\u6781\u5ea6\u9ad8\u6602\u7684\uff0c\u5b83\u8fdc\u8fdc\u8d85\u51fa\u4e86\u8ba1\u7b97\u8d44\u6e90\u672c\u8eab\u4f5c\u4e3a\u4e91\u8ba1\u7b97\u57fa\u7840\u8bbe\u65bd\u7684\u6210\u672c\uff0c\u5b83\u8fd8\u5728\u53e6\u5916\u4e24\u4e2a\u5c42\u9762\u63a7\u5236\u7740\u8fd9\u79cd\u9ad8\u6602\u7684\u6fc0\u52b1\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u662f\u9700\u8981\u6c38\u4e45\u7ef4\u6301\u4e0b\u53bb\u7684\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u4e2a\u6301\u7eed\u9ad8\u6602\u6210\u672c")),(0,n.kt)("p",null,"\u5e76\u4e14\uff0c\u8282\u70b9\u867d\u7136\u8d5a\u53d6\u4e86\u5927\u91cf\u7684\u6fc0\u52b1\uff0c\u4f46\u662f\u5b83\u4eec\u786e\u5b9e\u6574\u4e2a\u4f53\u7cfb\u91cc\u6700\u6ca1\u6709\u521b\u9020\u6027\u7684\u52b3\u52a8\u4ed8\u51fa\uff0c\u76f8\u5bf9\u4e8e\u90a3\u4e9b\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ef4\u62a4\u5e73\u53f0\u8fed\u4ee3\u5f00\u53d1\u5347\u7ea7\u7684\u5f00\u53d1\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u90a3\u4e9b\u771f\u6b63\u521b\u9020\u52b3\u52a8\u4ef7\u503c\u7684\u751f\u6210\u8005")),(0,n.kt)("p",null,"\u8fd9\u90fd\u662f\u65e2\u4e0d\u79d1\u5b66\u7684\uff0c\u6781\u4e0d\u5408\u7406\u7684\uff0c\u90a3\u4e9b\u4f20\u7edf\u884c\u4e1a\u771f\u6b63\u4ece\u4e8b\u521b\u9020\u52b3\u52a8\u548c\u4ef7\u503c\u751f\u6210\u7684\u4ece\u4e1a\u8005\uff0c\u5b83\u4eec\u672c\u8d28\u4e0a\u6ca1\u6709\u4ece\u533a\u5757\u94fe\u83b7\u5f97\u592a\u591a\u597d\u5904\uff08\u9664\u4e86\u54ea\u4e9b\u81ea\u5e26\u64cd\u4f5c\u5c5e\u6027\u7684NFT\u4e4b\u7c7b\u7684\u521b\u4f5c\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u771f\u6b63\u751f\u6210\u5546\u54c1\u7684\u751f\u6210\u8005\uff0cTA\u7684\u7269\u54c1\u4ea4\u6613\u88ab\u8feb\u4f7f\u7528\u6570\u5b57\u8d27\u5e01\u8fdb\u884c\u7ed3\u7b97\uff0c\u8fd9\u5c31\u8feb\u4f7f\u4ed6\u4eec\u53bb\u8d2d\u4e70\u533a\u5757\u94fe\u539f\u751f\u6570\u5b57\u8d27\u5e01\uff0c\u8fd9\u5728\u5bfc\u81f4\u6570\u5b57\u8d27\u5e01\u6d41\u901a\u7684\u540c\u65f6\uff0c\u8feb\u4f7f\u8fd9\u4e9b\u4eba\u9762\u4e34\u7740\u6570\u5b57\u8d27\u5e01\u7684\u98ce\u9669\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u4ed6\u4eec\u7684\u8d2d\u4e70\u6570\u5b57\u8d27\u5e01\u7684\u672c\u8eab\u5c31\u627f\u62c5\u4e86\u65e9\u671f\u4ee5\u53ca\u6570\u5b57\u8d27\u5e01\u589e\u503c\u9020\u6210\u7684\u6ea2\u4ef7\u6210\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\u662f\uff0c\u7531\u4e8e\u8fd9\u79cd\u6ea2\u4ef7\u7684\u98ce\u9669\uff0c\u4ed6\u4eec\u638c\u63e1\u7684\u6570\u5b57\u8d27\u5e01\u9762\u4e34\u7740\u8d2c\u503c\u7684\u98ce\u9669")),(0,n.kt)("p",null,"\u800c\u8fd9\u79cd\u98ce\u9669\u51e0\u4e4e\u662f\u7edd\u5bf9\u5b58\u5728\u7684\uff0c\u56e0\u4e3a\u6570\u5b57\u8d27\u5e01\u603b\u4f53\u4e0a\u5e76\u4e0d\u662f\u8ddf\u7ecf\u6d4e\u751f\u6210\u6302\u94a9\u7684\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u7684\u989d\u5ea6\u5f88\u4f4e\uff0c\u4f46\u662f\u5b83\u4eec\u51e0\u4e4e\u5360\u636e\u4e00\u6837\u7684\u8ba1\u7b97\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u5b58\u5728\u5927\u91cf\u7684\u6295\u673a\u884c\u4e3a")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u6295\u673a\u884c\u4e3a\u4e0e\u771f\u5b9e\u7ecf\u6d4e\u884c\u4e3a\u6df7\u5728\u4e00\u8d77\uff0c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u751f\u6001\u6781\u4e0d\u5408\u7406\uff0c\u5bfc\u81f4\u6781\u4e0d\u7a33\u5b9a\uff0c\u98ce\u9669\u6781\u5927\u3002"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u5728\u5c06\u533a\u5757\u94fe\u7684\u597d\u5904\uff0c\u5f88\u5c11\u6709\u4eba\u4f1a\u53bb\u63ed\u793a\u8fd9\u4e9b\u98ce\u9669\uff0c\u4e5f\u5f88\u5c11\u6709\u53c2\u4e0e\u8005\u771f\u6b63\u4e86\u89e3\u8fd9\u4e9b\u98ce\u9669\u3002"),(0,n.kt)("h3",{id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"},"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"),(0,n.kt)("p",null,"\u5f53\u7136\u5bf9\u4e8e\u77ff\u5de5\u548cICO\u7684\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u56e0\u4e3a\u4ed6\u4eec\u7684\u6295\u5165\u662f\u53ef\u80fd\u6ca1\u6709\u4efb\u4f55\u56de\u62a5\u7684\uff0c\u56e0\u6b64\u65e9\u671f\u9762\u4e34\u7740\u6781\u5927\u7684\u98ce\u9669\uff0c\u80af\u5b9a\u662f\u9700\u8981\u6bd4\u6b63\u5e38\u66f4\u5927\u4e00\u4e9b\u7684\u7ecf\u6d4e\u56de\u62a5\u4f5c\u4e3a\u4ee3\u4ef7\uff0c\u5426\u5219\u4ed6\u4eec\u5c31\u4e0d\u4f1a\u5192\u8fd9\u4e2a\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u6fc0\u52b1\u7c7b\u4f3c\u521b\u4e1a\u7684\u673a\u5236\u3002\u4ed6\u4eec\u7684\u65e9\u671f\u884c\u4e3a\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u7c7b\u4f3c\u53c2\u4e0e\u521b\u4e1a\u3002"),(0,n.kt)("h1",{id:"6-applications"},"6. Applications"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u4ea7\u54c1\u8981\u601d\u80033D\u5e26\u6765\u7684\u4ef7\u503c\u589e\u76ca\uff0c\u800c\u4e0d\u662f\u7b80\u5355\u628a\u4e1c\u897f\u642c\u52303D\u6216XR"),(0,n.kt)("p",null,"1\u3001\u751f\u65e5\u5899"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env1",src:l(8250).Z,width:"1744",height:"1034"})),(0,n.kt)("p",null,"\u597d\u53cbA\u7528AR\u624b\u673a\u6216\u773c\u955c\u627e\u4e00\u5757\u5899\u9762\u8fdb\u884c\u521b\u4f5c\uff0c\u5176\u4e2d\u53ef\u4ee5\u628a\u80cc\u666f\u56fe\u8272\uff0c\u7eaf\u8272\u6216\u67d0\u79cdpattern\uff0c\u7136\u540e\u5728\u5899\u4e0a\u8bbe\u7f6e\u88c5\u9970\u548c\u5b9a\u5236\u795d\u798f\uff0c\u5176\u4e2d\u67d0\u4e9b\u5143\u7d20\u5305\u542b\u4e00\u4e9b\u4ea4\u4e92\uff1b\u6700\u540e\u5c06\u7ed3\u679c\u53d1\u7ed9\u597d\u53cbB\uff0c\u597d\u53cbB\u627e\u4e00\u4e2a\u7acb\u9762\u6216\u8005\u7eaf\u865a\u62df\u7684\u65b9\u5f0f\u5c31\u53ef\u4ee53D\u67e5\u770b\uff0c\u5982\u679c\u662f\u7acb\u9762\uff0c\u4e5f\u6839\u636e\u8bed\u4e49\u8bc6\u522b\uff0c\u5c06\u80cc\u666f\u5899\u6362\u8272"),(0,n.kt)("p",null,"\u53ef\u4ee5\u70b9\u51fb\u4ea4\u4e92\u6709\u751f\u65e5\u76f8\u5173\u7684\u6d41\u7a0b\uff0c\u4f8b\u5982\u70b9\u8721\u70db\uff0c\u51fa\u73b0\u7279\u6548\uff0c\u5531\u751f\u65e5\u6b4c\uff0c\u73b0\u5b9e\u7279\u5b9a\u7684\u4fe1\u606f\uff0c\u597d\u53cb\u4e00\u8d77\u56f4\u89c2\u7b49\u7b49"),(0,n.kt)("p",null,"2\u3001\u4e8c\u7ef4\u5899\u9762\u6d82\u9e26\u7c7b\u521b\u4f5c"),(0,n.kt)("p",null,"\u968f\u4fbf\u627e\u4e00\u5757\u7a7a\u5730\u5730\u9762\uff0c\u4ece\u5730\u9762\u62c9\u4e00\u4e2a\u5782\u76f4\u9762\uff0c\u5c31\u53ef\u4ee5\u8fdb\u884c\u5899\u9762\u827a\u672f\u521b\u4f5c"),(0,n.kt)("p",null,"\u6709\u4ea4\u4e92\u7684\u6d82\u9e26"),(0,n.kt)("p",null,"3\u30013D\u8131\u53e3\u79c0"),(0,n.kt)("p",null,"4\uff0c\u79fb\u52a8\u7684\u7075\u611f\u6c1b\u56f4"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env",src:l(5543).Z,width:"3344",height:"1114"})),(0,n.kt)("p",null),"5, \u505a\u4e00\u4e2a\u89e3\u5bc6\u6e38\u620f",(0,n.kt)("p",null,"![00 0O R]","(resources/00 0O R.gif)"),(0,n.kt)("p",null,"\u53ef\u80fd\u5305\u542b\u79fb\u52a8\u62fc\u56fe\uff0c\u5305\u542b\u62e8\u4e00\u5b9a\u7684\u987a\u5e8f\u70b9\u4eae\u6309\u94ae\uff0c\u6240\u4ee5\u9700\u8981\u5305\u542b\u4e00\u4e9b\u7279\u5b9a\u73a9\u6cd5\u7c7b\u578b\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"6\u3001\u77e5\u8bc6\u8bb2\u89e3\u7c7b\u4f1a\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6a21\u578b\uff0c\u6709\u4e9b\u4ea4\u4e92\u70b9\u51fb\u5c55\u793a\uff0c\u666e\u901a\u4eba\u53ef\u4ee5\u5236\u4f5c\uff0c\u4e0d\u53ea\u662f\u5b98\u65b9\u5236\u4f5c\u5c11\u91cf"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u623f\u95f4"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u7684\u865a\u62df\u804a\u5929\u7c7b\u573a\u666f\uff0c\u4e00\u822c\u90fd\u662f\u5b98\u65b9\u63d0\u4f9b\u7684\u5c11\u6570\u56fa\u5b9a\u573a\u666f\uff0c\u6216\u8005\u5141\u8bb8\u4e00\u5b9a\u7684\u5b9a\u5236\u6027\uff0c\u4f46\u662f\u901a\u5e38\u5b9a\u5236\u80fd\u529b\u6709\u9650\uff0c\u6bd4\u5982\u51e0\u4f55\u662f\u56fa\u5b9a\u7684\uff0c\u53ea\u5141\u8bb8\u6539\u6750\u8d28\uff0c\u6216\u8005\u53ea\u5141\u8bb8\u589e\u51cf\u90e8\u4ef6\uff0c\u6216\u8005\u79fb\u52a8\u4f4d\u7f6e"),(0,n.kt)("p",null,"\u5728RealityWorld \u91cc\u7528\u6237\u4e5f\u53ef\u4ee5\u521b\u5efa\u66f4\u52a0\u4e30\u5bcc\u591a\u6837\u7684\u804a\u5929\u73af\u5883\uff0c\u7136\u540e\u9080\u8bf7\u7528\u6237\u8fdb\u6765\u804a\u5929"),(0,n.kt)("p",null,"8\u3001\u4e2a\u4eba\u6536\u85cf\u9986"),(0,n.kt)("p",null,"\u6709\u4e00\u4e2a\u81ea\u5df1\u7684\u623f\u95f4\u6216\u8005\u7279\u5b9a\u7684\u573a\u666f\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u8bbe\u8ba1\u7684\uff0c\u6709\u81ea\u5df1\u7684\u6536\u85cf\uff0c\u53ef\u4ee5\u52a0\u5165\u4e00\u4e9b\u81ea\u5df1\u7684\u73a9\u6cd5\uff0c\u597d\u53cb\u53c2\u89c2\u53ef\u4ee5\u8d60\u9001Creation, Part"),(0,n.kt)("p",null,"9\u3001\u53bb\u4e00\u4e2a\u6d6a\u6f2b\u7684Creation \u4e2d\u7ea6\u4f1a"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&session=sessionid"},"creation.id/=qwe&session=sessionid")),(0,n.kt)("p",null,"10, \u57fa\u4e8e\u73b0\u5b9e\u7684\u521b\u4f5c"),(0,n.kt)("video",{src:"resources/2022-04-04 08.55.06.mov"}),(0,n.kt)("p",null,"\u73b0\u5b9e\u63d0\u4f9b\u7c97\u7565\u7684\u51e0\u4f55\u4e0e\u53c2\u8003\u6750\u8d28\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("p",null,"11\u3001"),(0,n.kt)("img",{src:"resources/APPLE ARCADE.jpg",alt:"APPLE ARCADE"}),(0,n.kt)("p",null,"12\u3001\u8fde\u7eed\u5267\uff0c\u6574\u4e2a\u5f00\u53d1\u5468\u671f\u5747\u53ef\u53d1\u5e03"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5173\u5361\u6216\u8005\u6545\u4e8b\u4e00\u70b9\u4e00\u70b9\u66f4\u65b0\uff0c\u6bcf\u6b21\u73a9\u5bb6\u73a9\u4e00\u5c0f\u6bb5\uff0c\u50cf\u8fde\u7eed\u5267\u4e00\u6837\uff0c\u751a\u81f3\u4e16\u754c\u90fd\u662f\u4e00\u70b9\u4e00\u70b9\u6784\u5efa\uff1b\u6216\u8005\u6709\u70b9\u89c2\u770b\u521b\u4f5c\u8fc7\u7a0b\uff0c\u8fc7\u53bb\u6574\u4e2a\u6e38\u620f\u9700\u8981\u4e00\u6b21\u6027\u505a\u5b8c\u518d\u8d70\u53d1\u5e03\u6d41\u7a0b\uff0c\u8fd9\u79cd\u53ef\u4ee5\u5b9e\u65f6\u628a\u4e2d\u95f4\u521b\u4f5c\u8fc7\u7a0b\u5171\u4eab\u51fa\u6765\uff0c\u53ef\u4ee5\u53cd\u9988\uff0c\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u4e2d\u95f4\u4efb\u4f55\u72b6\u6001\u90fd\u53ef\u4ee5\u53d1\u5e03\uff0c\u800c\u4e0d\u662f\u8981\u7559\u5230\u6700\u540e\u53ea\u505a\u5b8c\u4e86\u518d\u53bb\u5904\u7406\u53d1\u5e03\u76f8\u5173\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e9b\u4e8b\u60c5\u5bfc\u81f4\u4e0d\u80fd\u63d0\u524d\u53d1\u5e03\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u4e00\u79cd\u6d41\u7a0b\u4e0a\u7684\u521b\u65b0\uff0c\u5e26\u6765\u5168\u65b0\u7684\u6a21\u5f0f"),(0,n.kt)("p",null,"13\u3001story telling"),(0,n.kt)("p",null,"![Pasted Graphic]","(resources/Pasted Graphic.jpg)"),(0,n.kt)("p",null,"*Like a well-executed joke, the pleasure is in the experience more than it is in the retelling. You have to be there."),(0,n.kt)("p",null,"Super Brothers \u5f00\u521b\u4e86\u4e00\u79cd\u53d9\u4e8b+\u4ea4\u4e92\u7684\u975e\u5e38\u4f18\u79c0\u7684\u4f53\u9a8c\uff0c\u76f8\u5bf9\u4e8e\u5355\u7eaf\u6e38\u620f\uff0c\u4ed6\u7684\u6545\u4e8b\u7ebf\u8ba9\u6574\u4e2a\u4e16\u754c\u89c2\u5448\u73b0\u66f4\u5b8c\u6574\uff0c\u76f8\u5bf9\u4e8e\u7535\u5f71\uff0c\u4ed6\u7684\u4ea4\u4e92\u53ef\u4ee5\u8ba9\u6545\u4e8b\u7684\u4f53\u9a8c\u66f4\u771f\u5b9e"),(0,n.kt)("p",null,"\u521b\u4f5c\u90e8\u5206\u6d89\u53ca\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u5747\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("p",null,"\u6545\u4e8b\u7684\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73af\u5883\uff0c\u7269\u7406\u73af\u5883\u901a\u5e38\u662f\u9759\u6001\u7684\uff0c\u4f46\u4e00\u4e9b\u91cd\u8981\u7269\u54c1\u901a\u5e38\u662f\u52a8\u6001\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4fe1\u606f\uff0c\u9700\u8981\u63a2\u7d22\u4e0d\u540c\u7684\u5730\u65b9\u4e86\u89e3\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u4e92\uff0c\u5bf9\u4fe1\u606f\u7684\u63a2\u7d22\u662f\u4e00\u79cd\u4ea4\u4e92\uff0c\u5176\u4ed6\u6bd4\u5982\u89e3\u5bc6\uff0c\u5f00\u52a8\u673a\u5173\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u4e16\u754c\u72b6\u6001")),(0,n.kt)("p",null,"14\u3001\u4e92\u52a8\u5c0f\u8bf4/\u6545\u4e8b"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u5c0f\u8bf4\u7684\u57fa\u7840\u4e0a\uff0c2D+3D\uff0c\u5148\u6587\u5b57\u4ecb\u7ecd\u57fa\u672c\u5267\u60c5\u548c\u80cc\u666f\uff0c\u7136\u540e\u8fdb\u53bb3D\u573a\u666f\uff0c\u5177\u6709\u6c89\u6d78\u611f\uff0c\u800c\u4e14\u56e0\u4e3a\u524d\u9762\u7684\u6587\u5b57\u5267\u60c5\uff0c\u5bf9\u573a\u666f\u7684\u63a2\u7d22\u4f1a\u66f4\u878d\u5165\uff0c\u7136\u540e\u6761\u4ef6\u662f\u9700\u8981\u57283D\u573a\u666f\u4e2d\u5b8c\u6210\u4e00\u5b9a\u7684\u4efb\u52a1\u624d\u80fd\u8fdb\u5165\u4e0b\u4e00\u7ae0\uff0c\u628a\u6e38\u620f\u7684\u673a\u5236\u878d\u5165\u8fdb\u6765\uff0c\u6e38\u620f\u7ed3\u5408\u6587\u5b57\u5267\u60c5\uff0c\u5f25\u8865\u4e86\u7eaf\u6e38\u620f\u63a2\u7d22\u9700\u8981\u8bdd\u8d39\u5927\u91cf\u65f6\u95f4\uff0c\u5e76\u4e14\u5267\u60c5\u6bd4\u8f83\u96f6\u788e\u7684\u611f\u89c9"),(0,n.kt)("h1",{id:"7-\u6838\u5fc3\u53c2\u8003\u67b6\u6784"},"7. \u6838\u5fc3\u53c2\u8003\u67b6\u6784"),(0,n.kt)("p",null,"\u672c\u6587\u4ecb\u7ecd\u5bf9Reality World\u6709\u5f71\u54cd\u6216\u8005\u53ef\u4ee5\u53c2\u8003\u7684\u6280\u672f\u67b6\u6784\uff0c\u901a\u8fc7\u5206\u6790\u4ed6\u4eec\u7684\u6280\u672f\u539f\u7406\uff0c\u8bc6\u522b\u5176\u80cc\u540e\u7684\u6280\u672f\u67b6\u6784\uff0c\u4ee5\u53ca\u5176\u7279\u5b9a\u6280\u672f\u67b6\u6784\u8574\u85cf\u7740\u7684\u5bf9\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u751f\u6001\u7684\u5f71\u54cd\u3002\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u6280\u672f\u65b9\u6848\uff0c\u4e5f\u4f1a\u5206\u6790\u5176\u4f18\u7f3a\u70b9\uff0c\u4ee5\u53caReality World\u5e94\u8be5\u600e\u6837\u5438\u6536\u8fd9\u4e9b\u4f18\u70b9\uff0c\u6700\u91cd\u8981\u7684\uff0c\u6211\u4eec\u5e94\u8be5\u4ece\u8fd9\u4e9b\u67b6\u6784\u4e2d\u5f97\u5230\u4ec0\u4e48\u66f4\u6df1\u5c42\u6b21\u7684\u3001\u6709\u4ef7\u503c\u7684\u4fe1\u606f\u4ee5\u5e2e\u52a9Reality World\u6784\u5efa\u66f4\u597d\u7684\u6280\u672f\u67b6\u6784\u548c\u6280\u672f\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u53c2\u8003\u67b6\u6784\u6309\u5982\u4e0b\u7684\u683c\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u65b0\u601d\u60f3"),"\uff1a\u76f8\u5bf9\u4f20\u7edf\u6280\u672f\u65b9\u6848\uff0c\u8be5\u6280\u672f\u65b9\u6848\u8be5\u6765\u4ec0\u4e48\u65b0\u601d\u60f3\u6216\u65b0\u601d\u8def"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6280\u672f\u65b9\u6848"),"\uff1a\u5bf9\u76f8\u5173\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\u8fdb\u884c\u8868\u8ff0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e0d\u8db3\u53ca\u539f\u56e0"),"\uff1a\u5728Reality World\u7684\u65b9\u5411\u4e0a\uff0c\u8be5\u6280\u672f\u65b9\u6848\u6ca1\u6709\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u6216\u8005\u65e0\u6cd5\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff1b\u5176\u4e2d\u7684\u539f\u56e0\u662f\u56e0\u4e3a\u6280\u672f\u65b9\u6848\u7684\u4e0d\u8db3\uff0c\u8fd8\u662f\u4ea7\u54c1\u5b9a\u4f4d\u548c\u65b9\u5411\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u6bd4"),"\uff1aReality World\u4e0e\u5176\u5bf9\u6bd4\u5b58\u5728\u54ea\u4e9b\u5dee\u5f02\uff0c\u6216\u8005\u8bf4Reality World\u901a\u8fc7\u4ec0\u4e48\u6837\u7684\u6280\u672f\u65b9\u6848\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898")),(0,n.kt)("h2",{id:"71-\u6570\u636e\u683c\u5f0f"},"7.1 \u6570\u636e\u683c\u5f0f"),(0,n.kt)("h3",{id:"711-usd"},"7.1.1 USD"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"piper-banner",src:l(9641).Z,width:"2540",height:"1120"})),(0,n.kt)("p",null,"Universal Scene Description (USD) is the first publicly available software that addresses the need to robustly and scalably interchange and augment arbitrary 3D scenes that may be** ",(0,n.kt)("strong",{parentName:"p"},"composed")," **from many elemental assets."),(0,n.kt)("h4",{id:"7111-\u65b0\u601d\u60f3"},"7.1.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u534f\u4f5c"),"\uff1aUSD\u662f\u4e00\u4e2a\u4e3a\u4e86\u5927\u89c4\u6a21\u534f\u4f5c\u7684\u9ad8\u6027\u80fd\u53ef\u6269\u5c55\u8f6f\u4ef6\u5e73\u53f0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4ea4\u6362"),"\uff1aUSD\u63d0\u4f9b\u4e86\u5728\u591a\u4e2aDCC\u5de5\u5177\u4e4b\u95f4\u8fdb\u884c\u4ea4\u6362\u7684\u683c\u5f0f\uff0c\u8fd9\u901a\u8fc7\u5185\u7f6e\u7684\u4e00\u4e9bschema\u5b9e\u73b0\uff0c\u5305\u62ecgeometry\uff0cshading\uff0clighting\u548cphysics\u7b49"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5408\u6210"),"\uff1aUSD\u72ec\u7279\u7684\u5408\u6210\u7279\u6027\u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u6536\u76ca\uff0c\u6bd4\u5982\u80fd\u591f\u5c06\u4e30\u5bcc\u591a\u6837\u7684individual asset\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u8fd9\u5141\u8bb8\u591a\u4eba\u540c\u6b65\u534f\u4f5c\uff08\u800c\u4e0d\u4f1a\u5bfc\u81f4\u51b2\u7a81\uff09")),(0,n.kt)("p",null,"USD\u7684\u5408\u6210\u5f15\u64ce\u5bf9\u4efb\u4f55\u7279\u5b9a\u7684domain\u662f\u65e0\u611f\u77e5\u7684\uff08agnostic\uff09\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u88ab\u6269\u5c55\u6765\u7f16\u7801\uff08encode\uff09\u4e0e\u5408\u6210\u5176\u4ed6domain\u3002"),(0,n.kt)("h4",{id:"7112-\u6280\u672f\u65b9\u6848"},"7.1.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Schema")),(0,n.kt)("p",null,"Schema\u7528\u4e8e\u4eceUsdObject\u7f16\u8f91\u3001\u67e5\u8be2\u548c\u5b9a\u4e49\u7ed3\u6784\u5316\u7684\u6570\u636e\uff08structured data\uff09\uff0c\u5927\u90e8\u5206\u6838\u5fc3\u5e93\u4e2d\u7684Schema\u662fprim schemas\uff0c\u8fd9\u53c8\u5206\u4e3a\u4e24\u7c7b\uff1a1\uff09IsA Schemas\uff1b2\uff09API Schemas\uff1b3\uff09\u53e6\u5916\u8fd8\u6709\u4e00\u4e9bSchema\u79f0\u4e3aproperty schemas\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2aprim\u53ef\u4ee5\u8ba2\u9605\u591a\u4e2aAPI Schema\uff0c\u4f46\u662f\u53ea\u80fd\u8ba2\u9605\u4e00\u4e2aIsA Schema\uff0cUSD\u63d0\u4f9b\u4e86\u5de5\u5177\u7528\u4e8e\u751f\u6210Schema\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"IsA Schema")),(0,n.kt)("p",null,"IsA Schema\u7528\u4e8e\u5b9a\u4e49\u4e00\u4e2aprim\u5728Stage\u4e2d\u7684\u89d2\u8272\u6216\u8005\u76ee\u7684\uff0c\u5b83\u7ee7\u627f\u81eaUsdTyped\u7c7b\uff0c\u5e76\u53ef\u4ee5\u6307\u5b9atypeName metadata\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"UsdPrim::IsA()\n")),(0,n.kt)("p",null,"IsA Schema\u53ef\u4ee5\u662f\u5b9e\u7684\u6216\u8005\u865a\u7684\uff0c\u4f8b\u5982UsdGeomImageeable\u662f\u865a\u7684IsA Schema\uff0c\u800cUsdGeomMesh\u662f\u5b9e\u7684IsA Schema\uff0c\u56e0\u4e3a\u5b83\u5305\u542b\u4e00\u4e2aDefine()\u65b9\u9762\u53ef\u4ee5\u5b9a\u4e49typeName\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"API Schema")),(0,n.kt)("p",null,"API Schema\u662fprim\u7684Schema\uff0c\u5b83\u4eec\u7528\u4e8e\u63d0\u4f9b\u63a5\u53e3\uff08API\uff09\u5bf9prim\u76f8\u5173\u7684\u6570\u636e\u8fdb\u884c\u5b9a\u4e49\u3001\u7f16\u8f91\u548c\u63d0\u53d6\u3002\u5b83\u7ee7\u627f\u81eaUsdAPISchemaBase\u7c7b\u800c\u4e0d\u662fUsdTyped\uff0c\u56e0\u6b64\u76f8\u5bf9\u4e8e\u201cis a\u201d\u53ef\u4ee5\u79f0\u4e3a\u201chas a\u201d\u3002API Schema\u6709\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Non-applied API Schemas"),(0,n.kt)("li",{parentName:"ul"},"Single and Multiple Apply Schemas"),(0,n.kt)("li",{parentName:"ul"},"Multiple-apply schemas")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Model, component and Assembly")),(0,n.kt)("p",null,"Kind\u662f\u4e00\u4e2aprim-level\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u5b83\u76f8\u5bf9\u4e8eschema type\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\uff0c\u5bf9\u5e94\u4e8eModel Hierarchy\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"model\uff0ckind\u7684\u62bd\u8c61\u57fa\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"group"),(0,n.kt)("li",{parentName:"ul"},"assembly"),(0,n.kt)("li",{parentName:"ul"},"component"),(0,n.kt)("li",{parentName:"ul"},"subcomponenet")),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u66f4\u7ec6\u788e\u7684asset\u6216\u8005prim\uff0cmodel\u63d0\u4f9b\u4e00\u79cd\u5c06\u573a\u666f\u7ed3\u6784\u8fdb\u884c\u7ec6\u5206\u7684\u67b6\u6784\uff1bmodel\u7ed3\u6784\u4e5f\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u65b9\u5f0f\u7ba1\u7406\u548c\u5f15\u7528\u8d44\u6e90\uff0c\u5426\u5219\u5bf9\u66f4\u5bf9referenced assets\u5f15\u7528\u548c\u63a8\u7406\u4f1a\u53d8\u5f97\u590d\u6742\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "TreeSpruce" (\n kind = "component"\n)\n{\n # Geometry and shading prims that define a Spruce tree...\n\n def "Cone_1" (\n kind = "subcomponent"\n references = @Cones/PineConeA.usd@\n )\n {\n }\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Asset AssetInfo and Asset Resolution")),(0,n.kt)("p",null,"Asset\u662f\u80fd\u591f\u4f7f\u7528\u4e00\u4e2a\u5b57\u7b26\u4e32\u6807\u5fd7\u7b26\uff08via asset resolution\uff09\u88ab\u8bc6\u522b\u548c\u5b9a\u4f4d\u7684\u8d44\u6e90\uff0casset\u53ef\u4ee5\u662f\u4e00\u4e2a\u6587\u4ef6\uff0c\u6216\u8005\u591a\u4e2a\u6587\u4ef6\u7ec4\u5408\u5f15\u7528\u5f62\u6210\u7684\u5355\u4e2a\u6587\u4ef6\uff0c\u5b83\u4e00\u822c\u6709\u7248\u672c\u63a7\u5236\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e00\u4e9b\u5982asset dependency analysis\u7b49\u64cd\u4f5c\uff0cUSD\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7279\u6b8a\u7684\u5b57\u7b26\u4e32\u7c7b\u578b\uff0casset\uff08represents a resolvable path to another asset\uff09\uff0c\u8fd9\u6837\u6240\u6709\u7684metadata\u548cattributes\u90fd\u80fd\u88ab\u5f88\u5feb\u5730\u5b9a\u4f4d\u548c\u8bc6\u522b\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1USD\u7684composition arcs\u80fd\u591f\u7528\u6765\u5408\u6210\u573a\u666f\uff0c\u4f46\u662f\u4ed6\u4eec\u5e76\u4e0d\u65b9\u4fbf\u5728\u5185\u5b58\u4e2d\u5bf9\u8d44\u6e90\u8fdb\u884c\u5b9a\u4f4d\u548c\u8bc6\u522b\uff0cAssetInfo\u662fcomposition arcs\u7684\u8865\u5145\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "Forest_set" (\n assetInfo = {\n asset identifier = @Forest_set/usd/Forest_set.usd@\n string name = "Forest_set"\n }\n kind = "assembly"\n)\n{\n # Possibly deep namespace hierarchy of prims, with references to other assets\n}\n')),(0,n.kt)("p",null,"Asset Resolution\u662f\u5c06\u4e00\u4e2aasset path\u8f6c\u6362\u4e3a\u53ef\u4ee5\u5b9a\u4f4d\u4e00\u4e2a\u8d44\u6e90\u7684location\u7684\u8fc7\u7a0b\uff0c\u9ed8\u8ba4\u6309\u7167\u6587\u4ef6\u8def\u5f84\u8fdb\u884c\u641c\u7d22\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5b9a\u4f4d\u903b\u8f91\uff0c\u751a\u81f3\u8d44\u6e90\u4e0d\u4e00\u5b9a\u9700\u8981\u5b58\u50a8\u5728\u78c1\u76d8\u4e2d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Prim, Property and Attribute")),(0,n.kt)("p",null,"USD\u7684\u547d\u540d\u7a7a\u95f4\u4e3b\u8981\u7531\uff1aPrim\u548cProperty\u7ec4\u6210\uff0c\u5176\u4e2dPrim\u63d0\u4f9b\u5bf9\u5408\u6210\u573a\u666f\u7684\u7ec4\u7ec7\u548c\u7d22\u5f15\uff0c\u5b83\u662fUSD\u7684\u4e3b\u8981\u5bb9\u5668\uff0cprim\u53ef\u4ee5\u5305\u542b\u53e6\u4e00\u4e2aprim\uff0c\u5f62\u6210\u4e00\u4e2anamespace hierarchy Stage\uff1b"),(0,n.kt)("p",null,"Prim\uff0c\u8fde\u540c\u5b83\u7684indices\uff0c\u662fStage\u4e2d\u552f\u4e00\u88ab\u6301\u4e45\u5316\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff1b\u5bf9prim\u8fdb\u884c\u64cd\u4f5c\u7684\u63a5\u53e3\u7531UsdPrim\u7c7b\u63d0\u4f9b\uff1bprim\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2aschema typename\uff0c\u4e5f\u53ef\u4ee5\u63d0\u4f9b\u5982scene-level instancing, load/unload behavior, and deactivation\u7b49\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u800cProperty\u63d0\u4f9breal data\u3002\u6709\u4e24\u79cd\u7c7b\u578b\u7684Property\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Attribute"),(0,n.kt)("li",{parentName:"ul"},"Relationship")),(0,n.kt)("p",null,"Property\u53ef\u4ee5\u88ab\u7ec4\u6210\u65b0\u7684\u5c42\u7ea7\u4e14\u4e0d\u9700\u8981\u5f15\u5165\u65b0\u7684Prim\uff0c\u8fd9\u53ef\u4ee5\u63d0\u5347\u5185\u5b58\u7684\u5c40\u90e8\u6027\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#usda 1.0\n\nover MyMesh\n{\n rel material:binding = \n color3f[] primvars:displayColor = [ (.4, .2, .6) ]\n}\n")),(0,n.kt)("p",null,"Attribute\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Sphere "BigBall"\n{\n double radius = 100\n double radius.timeSamples = {\n 1: 100,\n 24: 500,\n }\n}\n')),(0,n.kt)("h4",{id:"7113-usdz"},"7.1.1.3 USDZ"),(0,n.kt)("p",null,"USD\u7684\u6838\u5fc3\u662f\u65b9\u4fbf\u5bf9\u4f17\u591a\u5206\u6563\u7684\u8d44\u6e90\u8fdb\u884c\u5408\u6210\uff0c\u5176\u4e2d\u8d44\u6e90\u5df2\u5206\u6563\u7684\u788e\u7247\u5f62\u5f0f\u5206\u5e03\uff0c\u8fd9\u79cd\u673a\u5236\u662f\u4e3a\u4e86\u7f16\u8f91\u6001\u8bbe\u8ba1\u7684\uff0c\u6b64\u65f6\u6574\u4e2a\u573a\u666f\u8fd8\u6ca1\u6709\u7f16\u8f91\u5b8c\u6210\uff0c\u9700\u8981\u7ee7\u7eed\u7ef4\u6301\u8fd9\u79cd\u5206\u6563\u7684\u72b6\u6001\uff1b\u7136\u800c\u5f53\u6211\u4eec\u7684\u5185\u5bb9\u5168\u90e8\u7f16\u8f91\u5b8c\u6210\u65f6\uff0c\u5206\u6563\u7684\u6587\u4ef6\u5374\u4e0d\u4fbf\u4e8e\u7ba1\u7406\uff0c\u6b64\u65f6\u7684\u6838\u5fc3\u9700\u6c42\u662f\u5206\u53d1\uff0c\u5b83\u8981\u6c42\u4e00\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"A single object, from marshaling and transmission perspectives"),(0,n.kt)("li",{parentName:"ol"},"Potentially streamable"),(0,n.kt)("li",{parentName:"ol"},"Usable without unpacking to a filesystem")),(0,n.kt)("p",null,"USDZ\u901a\u8fc7USD\u63d0\u4f9b\u7684FileFormat plugin\u673a\u5236\u5b9e\u73b0\uff1aUsdUsdzFileFormat"),(0,n.kt)("h4",{id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0"},"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0"),(0,n.kt)("p",null,"USD\u4e3b\u8981\u805a\u7126\u4e8e\u600e\u6837\u5bf9\u5408\u6210\u7684\u573a\u666f\u8fdb\u884c\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u56e0\u6b64\u5b83\u504f\u5411\u4e8e\u201clow-memory footprint, higher-latency data access\u201d \u800c\u4e0d\u662f \u201chigh-memory footprint, low-latency access to data\u201d\uff0c\u56e0\u4e3a\u5728\u5185\u5b58\u4e2d\u7f13\u5b58\u66f4\u591a\u6570\u636e\uff0c\u4f1a\u5f71\u54cd\u5bf9\u57fa\u4e8e\u5408\u6210\u7ed3\u6784\u573a\u666f\u7684\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u5e26\u6765\u590d\u6742\u6027\uff0c\u56e0\u4e3a\u5728\u7f16\u8f91\u9636\u6bb5\u4f1a\u6709\u66f4\u591a\u7684\u6570\u636e\u4fee\u6539\uff0c\u800c\u8fd0\u884c\u65f6\u9636\u6bb5\u5219\u57fa\u672c\u4e0a\u4fdd\u6301\u6570\u636e\u4e0d\u53d8\u3002\u6240\u4ee5USD\u4e0d\u592a\u9002\u5408\u8fd0\u884c\u65f6\u3002\u4f46\u662fUSD\u63d0\u4f9b\u4e86\u4e00\u4e9b\u4fbf\u5229\u548c\u5de5\u5177\uff08facilities\uff09\uff0c\u4f7f\u5f97\u5ba2\u6237\u7aef\u53ef\u4ee5\u5bf9UsdStage\u6784\u5efa\u4e00\u4e9b\u6269\u5c55\u6027\u7684\u7f13\u5b58\uff0c\u4ee5\u63d0\u4f9b\u5bf9USD\u6570\u636e\u7684\u4f4e\u5ef6\u65f6\u8bbf\u95ee\u3002"),(0,n.kt)("p",null,"USDZ\u4ece\u5206\u53d1\u7684\u89d2\u5ea6\u5bf9USD\u8fdb\u884c\u4e86\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0cUSD\u4e3b\u8981\u662f\u4e3a\u4e86\u5728DCC\u4e4b\u95f4\u8fdb\u884c\u6570\u636e\u4ea4\u6362\u548c\u534f\u540c\uff0c\u8fd9\u5168\u662f\u7f16\u8f91\u65f6\u7684\u9700\u6c42\uff0c\u6709\u5f88\u591a\u529f\u80fd\u672c\u8eab\u5bf9\u8fd0\u884c\u65f6\u6ca1\u6709\u4efb\u4f55\u7528\u5904\uff0c\u4f8b\u5982\u7531\u5927\u91cf\u7684\u788e\u7247\u7ec4\u5408\u5f62\u6210\u7684\u5927\u578b\u573a\u666f\u867d\u7136\u9002\u5408\u7f16\u8f91\u65f6\uff0c\u4f46\u662f\u5374\u4e0d\u5229\u4e8e\u8fd0\u884c\u65f6\u52a0\u8f7d\uff0c\u6240\u4ee5\u9700\u8981\u5728\u8fd0\u884c\u65f6\u5bf9USD\u8fdb\u884c\u4e00\u5b9a\u7684\u5b9a\u5236\uff0c\u4f8b\u5982\u662f\u5426\u4eceCore\u4e2d\u5220\u9664\u4e00\u4e9b\u6a21\u5757\uff0c\u6216\u8005\u53bb\u6389\u4e00\u4e9b\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6570\u5b57\u5185\u5bb9\u7684\u751f\u547d\u5468\u671f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\uff08USD"),(0,n.kt)("li",{parentName:"ul"},"\u5206\u53d1\uff08USDZ"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff08USDX\uff09")),(0,n.kt)("p",null,"\u9700\u8981\u5728USDZ\u57fa\u7840\u4e0a\u8fdb\u884c\u8fd0\u884c\u65f6\u6539\u9020\uff0c\u4f7f\u5176\u5206\u53d1\u5f97\u662f\u9002\u5408\u8fd0\u884c\u6001\u5f97\u683c\u5f0f\uff0c\u6240\u4ee5\u53ef\u4ee5\u9690\u85cf\u5206\u53d1\u6001\uff0c\u53ea\u9700\u8981\u7f16\u8f91\u548c\u8fd0\u884c\u65f6\u4e24\u4e2a\u5f62\u6001\uff1b"),(0,n.kt)("p",null,"\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u7ee7\u7eed\u7f16\u8f91\uff0c\u9700\u8981\u5c06\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001\u533a\u5206\uff0c\u4f46\u662f"),(0,n.kt)("h4",{id:"7115-\u5bf9\u6bd4"},"7.1.1.5 \u5bf9\u6bd4"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"USD\u592a\u8fc7\u590d\u6742\uff0c\u6709\u5f88\u591a\u989d\u5916\u7684\u5c5e\u6027\u90fd\u662f\u4e3a\u4e86\u5408\u6210\u573a\u666f\u7684\u76ee\u7684\uff0c\u800c\u5408\u6210\u573a\u666f\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u9700\u8981\u7684\uff0c\u6216\u8005\u8bf4\u4e00\u65e6\u5230\u4e86\u8fd0\u884c\u65f6\uff0c\u6709\u4e9b\u5408\u6210\u5c5e\u6027\u5df2\u7ecf\u56fa\u5b9a\u4e86\uff0c\u6211\u4eec\u4fbf\u4e0d\u518d\u9700\u8981\u90a3\u4e48\u590d\u6742\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u81f3\u5c11\u4e0d\u518d\u9700\u8981\u5355\u4e00\u573a\u666f\uff08\u4e00\u4e2a\u5fae\u578bapp\uff09\u5185\u90e8\u6240\u6709\u5408\u6210\u5c5e\u6027\uff0c\u90a3\u4e48\u8be5\u5fae\u578b\u573a\u666f\u5c31\u5e94\u8be5\u8f6c\u5316\u4e3a\u56fa\u5b9a\u683c\u5f0f\u573a\u666f\uff0c\u800c\u6574\u4e2a\u5408\u6210\u80fd\u529b\u4fdd\u6301\u5728\u5fae\u578b\u573a\u666f\u5c42\u9762\u5c31\u53ef\u4ee5"),(0,n.kt)("li",{parentName:"ul"},"\u4e14\u5bf9\u8fd0\u884c\u65f6\u4e0d\u592a\u53cb\u597d\uff0c\u6709\u5f88\u591a\u5c5e\u6027\uff0c\u8ddf\u4e0a\u9762\u4e00\u6837\uff0c\u6709\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u5408\u6210\u7ec6\u8282\u5728\u8fd0\u884c\u65f6\u6267\u884c\uff0c\u8fd9\u90e8\u5206\u8981\u53bb\u6389")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u7279\u6027\uff0c\u6709\u5fc5\u8981\u5f00\u53d1\u4e00\u4e2a\u4e2d\u95f4\u683c\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5728\u5f00\u53d1\u8005\u4fdd\u5b58\u573a\u666f\u81f3RW\u65f6\u6267\u884c\u9884\u5904\u7406\uff0c\u5176\u8ba1\u7b97\u8fc7\u7a0b\u4e3b\u8981\u662f\u63d0\u524d\u8ba1\u7b97\u4e00\u4e9b\u5408\u6210\u65b9\u9762\u7684\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u7ec8\u8fd0\u884c\u65f6\u76f4\u63a5\u52a0\u8f7d\u8be5\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"DSL\u9488\u5bf9\u8be5\u683c\u5f0f\u5c31\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6bcf\u4e2a\u5fae\u578b\u573a\u666f\uff0c\u5f00\u53d1\u8005\u672c\u5730\u4f1a\u4fdd\u5b58\u539f\u59cbUSD\u6587\u4ef6\uff0c\u4e0b\u6b21\u4ed6\u4ecd\u7136\u5bf9\u539f\u59cb\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91\uff0c\u7136\u540e\u63d0\u4ea4\u65f6\u8fdb\u884c\u9884\u5904\u7406\uff0c\u518d\u4fdd\u5b58\u4e2d\u95f4\u683c\u5f0f\u81f3\u4e91\u7aef\u5185\u5bb9\u670d\u52a1\u5668")),(0,n.kt)("p",null,"\u517c\u5bb9\u7b2c\u4e09\u65b9\uff0c\u5728\u7b2c\u4e09\u65b9\u505a\u63d2\u4ef6\uff0c\u8f6c\u5316\u4e3aRW\u652f\u6301\u7684\u683c\u5f0f\uff0c\u7136\u540e\u5728RW\u505a\u573a\u666f\u548c\u4ea4\u4e92\u7f16\u8f91"),(0,n.kt)("p",null,"\u7136\u800c\u600e\u4e48\u5b9e\u65f6\u591a\u4eba\u534f\u540c\u4fee\u6539\uff0c\u53e6\u5916\u7528\u6237\u5f00\u53d1\u5fae\u578b\u573a\u666f\u5927\u90e8\u5206\u90fd\u662f\u5728\u7aef\u4fa7\u8fd0\u884c\u65f6\u8fdb\u884c"),(0,n.kt)("p",null,"\u5177\u6709\u5bf9\u7528\u6237\u53ef\u8bfb\u7684\u8868\u8ff0\u5f62\u5f0f\uff0c\u548c\u5bf9\u7a0b\u5e8f\u9ad8\u6548\u52a0\u8f7d\u7684\u4e8c\u8fdb\u5236\u5f62\u5f0f"),(0,n.kt)("h3",{id:"712-alembic-formats"},"7.1.2 Alembic formats"),(0,n.kt)("h3",{id:"713-unity-prefabs"},"7.1.3 Unity Prefabs"),(0,n.kt)("h3",{id:"714-\u4ee3\u7801\u751f\u6210"},"7.1.4 \u4ee3\u7801\u751f\u6210"),(0,n.kt)("p",null,"USD\u4e2d\u7684Schema\u548cLLVM\u4e2d\u7684TableGen\uff0c\u90fd\u662f\u6309\u7167\u4e00\u79cd\u6587\u672c\u683c\u5f0f\uff0c\u5b9a\u4e49\u4e00\u79cd\u683c\u5f0f\uff0c\u7136\u540e\u751f\u6210\u5bf9\u5e94\u7684C++\u4ee3\u7801\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("h2",{id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784"},"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784"),(0,n.kt)("h3",{id:"721-unity-dotsecs"},"7.2.1 Unity DOTS/ECS"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DOTS\u6216\u8005ECS\u8fd8\u662f\u4ec5\u5173\u6ce8\u6027\u80fd\u5c42\u9762\uff0c\u4f46\u662f\u6570\u636e\u9a71\u52a8\u7684\u597d\u5904\u662f\u5b83\u8ba9\u5f00\u53d1\u8005\u628a\u903b\u8f91\u533a\u5206\u4e86\u51fa\u6765\uff0c\u6240\u4ee5\u5728\u8fd9\u4e9b\u903b\u8f91\u7684\u7ec4\u7ec7\u5c42\u9762\u518d\u52a0\u4e0a\u4e00\u5c42\u7ba1\u7406\uff0c\u5c31\u53ef\u4ee5\u5411\u4e0a\u5c42\u7528\u6237\u5c42\u8fdb\u4e00\u6b65\u7b80\u5316\u903b\u8f91\u5f00\u53d1"),(0,n.kt)("p",null,"SRP Batcher\u628a\u6750\u8d28\u6570\u636e\u4ece\u539f\u6765\u7684raw data\u91cc\u9762\u62bd\u53d6\u51fa\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9GameObject rendering\u7684\u6027\u80fd\u968f\u7740scriptable pupeline\u5f97\u5230\u63d0\u5347"),(0,n.kt)("li",{parentName:"ul"},"GPU\u4e2d\u53ef\u4ee5\u7f13\u5b58\u6750\u8d28\u6570\u636e\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u6b21\u90fd\u5207\u6362shader\uff0c\u56e0\u4e3adraw call\u63d0\u4ea4\u7684\u9891\u7387\u8fdc\u9ad8\u4e8e\u6750\u8d28\u6570\u636e\u5207\u6362\u548c\u63d0\u4ea4\u7684\u9891\u7387")),(0,n.kt)("p",null,"System \u5bf9component \u7684\u5f15\u7528\u6bd4\u8f83\u590d\u6742\uff0cUnity\u4e3a\u4e86\u7b80\u5316\u4ee5\u53ca\u4e0d\u6539\u53d8\u539f\u6765\u7684\u4ee3\u7801\uff0c\u8ba9\u5f00\u53d1\u8005\u5b9e\u73b0\u4e00\u4e2a\u539f\u6765\u7684Component \u7c7b\uff0c\u7136\u540e\u81ea\u52a8\u62c6\u5206\uff0c\u8fd9\u6837\u4e5f\u8bb8\u4f1a\u4f7f\u5f97\u7528\u6237\u4e0d\u6613\u4e8e\u5f7b\u5e95\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u601d\u60f3\uff0c\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4e00\u4e2a\u7279\u6b8a\u7684\u8bed\u6cd5\u7cd6\u5305\u88c5\u5f15\u7528\uff0c\u7136\u540e\u7f16\u8bd1\u5668\u81ea\u52a8\u5c06\u5f15\u7528\u8f6c\u5316\u4e3a\u901a\u8fc7Component \u590d\u5236\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f15\u7528"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\u8ba1\u7b97\uff1a")),(0,n.kt)("p",null,"Unity\u7684EntityQuery\u4f3c\u4e4e\u53ef\u4ee5\u6309\u4e0a\u8ff0\u7684\u601d\u8def\u53bb\u4f18\u5316\uff0c\u751a\u81f3\u5e76\u884c\u8ba1\u7b97\u7684\u663e\u793a\u8c03\u7528\u90fd\u662f\u9690\u85cf\u7684\uff0c\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\uff0c\u7528\u6237\u5bf9\u5355\u4e2aSystem \u7684\u6267\u884c\u81ea\u52a8\u8f6c\u53d8\u4e3a\u5e76\u884c\uff0c\u5305\u62ec\u5b9e\u9645\u7684\u67e5\u8be2\u548c\u5e76\u884c\u6267\u884c\uff0c\u53ea\u9700\u8981\u6bcf\u4e2asystem\u5fc5\u987b\u5728\u5934\u90e8\u5f15\u7528Components \u5373\u53ef\uff08\u58f0\u660e\u5305\u62ec\u662f\u5426\u53ea\u8bfb\u7684\u4f7f\u7528\u8bf4\u660e\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u5f15\u7528\u58f0\u660e\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u5f15\u7528\u5efa\u7acbarchetype "),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u901a\u8fc7\u8bbe\u5b9a\u903b\u8f91\u7c7b\u578b\u548c\u51e0\u4f55\u6216\u8005\u5916\u89c2\u7c7b\u578b\u4e4b\u95f4\u7684\u7ea6\u675f\u548c\u5bf9\u5e94\u5173\u7cfb\u6765\u63a7\u5236\u65b0\u7c7b\u578b\u7684\u521b\u5efa\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ec5\u53d1\u751f\u5728\u7f16\u8bd1\u671f\u95f4")),(0,n.kt)("p",null,"\u592a\u6781\u7684Megakernel programming \u6709\u8fd9\u6837\u7684\u601d\u60f3\uff0c\u5c06\u4f20\u7edfelement-wise\u7684\u7f16\u7a0b\uff0c\u591a\u4e2a\u8ba1\u7b97\u9636\u6bb5\u5408\u5e76\u4e3a\u4e00\u4e2asingle kernel \uff0c\u7f16\u7a0b\u7406\u89e3\u66f4\u81ea\u7136"),(0,n.kt)("p",null,"\u4e00\u5f00\u59cb\u5c31\u8981\u6559\u4f1a\u7528\u6237\uff0c\u600e\u6837\u57fa\u4e8e\u903b\u8f91\u6216\u8005\u529f\u80fd\u7ec4\u5408\u6765\u521b\u5efa\uff0c\u8fd9\u4e9b\u90fd\u662f\u57fa\u672c\u89c4\u5f8b\u548c\u903b\u8f91\uff0c\u8bbe\u8ba1\u7684\u65f6\u5019\u8981\u8003\u8651\u9ad8\u5ea6\u901a\u7528\u6027\u3001\u62bd\u8c61\u6027\u3001\u903b\u8f91\u6027\uff0c\u8fd9\u6837\u7528\u6237\u7406\u89e3\u6210\u672c\u6700\u4f4e\uff0c\u800c\u5728\u8bbe\u8ba1\u7684\u65f6\u5019\u6784\u601d\u7684\u6210\u672c\u4e5f\u6700\u4f4e\uff0c\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u662f\u672c\u8d28\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u5efa\u5b50\u903b\u8f91\u53ca\u5176\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u4e0e\u5916\u89c2\u7684\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u5916\u89c2\u53ca\u5176\u7c7b\u578b\u4e0e\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u6709\u4e00\u5957\u6846\u67b6\u6765\u652f\u6491\u8fd9\u4e2a\u4f53\u7cfb")),(0,n.kt)("p",null,"Unity\u7684DOTS\u505a\u7684\u8fd8\u4e0d\u591f\u5f7b\u5e95\uff0c\u5b83\u8fd8\u662f\u4e3a\u4e86\u517c\u5bb9\u539f\u6765\u7684Component\uff0c\u4f9d\u8d56\u4e8e\u7f16\u8f91\u5668\u5c5e\u6027\u628aComponent\u548cSystem\u5206\u79bb\u51fa\u6765\uff0c\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u3001\u5173\u7cfb\u548c\u533a\u522b\u90fd\u6ca1\u6709\u90a3\u4e48\u660e\u663e\uff0c\u4e0d\u5229\u4e8e\u6df1\u5165\u8d2f\u5f7b\u6570\u636e\u9a71\u52a8\u8fd9\u4e00\u7406\u5ff5"),(0,n.kt)("p",null,"\u5728RW\u4e2d\uff0c\u6240\u6709\u903b\u8f91\u548c\u6570\u636e\u5fc5\u987b\u5206\u5f00\uff0c\u5b83\u4eec\u6ca1\u6709\u529e\u6cd5\u6df7\u5230\u4e00\u8d77\uff0c\u4f46\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u5c06\u7ec4\u4ef6\u53d1\u5e03\uff0c\u53d8\u6210private\u7684\uff0c\u4f46\u8f6f\u4ef6\u67b6\u6784\u4e00\u6837\uff0c\u5e76\u4e14\u9075\u5faa\u540c\u6837\u7684\u5305\u7ba1\u7406\uff0c\u4e2d\u5fc3\u5316\u7684\u7ec4\u4ef6\u7ba1\u7406\u548c\u52a0\u8f7d\uff0c\u7248\u672c\u7ba1\u7406\uff0c\u53ea\u662f\u7ec4\u4ef6\u4e0d\u5bf9\u5916\u516c\u5f00\u800c\u5df2"),(0,n.kt)("p",null,"\u5176\u4e2d\u4e00\u79cd\u8ba9\u591a\u4e2a\u5f00\u53d1\u8005\u9075\u5faa\u516c\u5171\u534f\u5b9a\u7684\u65b9\u6cd5\uff0c\u662f\u7531\u5e73\u53f0\u6765\u5b9a\u4e49\u6570\u636e\uff0c\u5e73\u53f0\u5b9a\u4e49\u7684\u662f\u4e00\u4e9b\u4e1a\u52a1\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u6210\u4e3a\u516c\u5171\u63a5\u53e3\uff0c\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u5c31\u53ef\u4ee5\u76f8\u4e92\u72ec\u7acb\u5de5\u4f5c\uff1b\u5982\u679c\u5e73\u53f0\u7f3a\u4e4f\u67d0\u4e9b\u7c7b\u578b\u516c\u5171\u63a5\u53e3\uff0c\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u81ea\u884c\u5b9a\u4e49\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u9700\u8981\u9009\u62e9\u54ea\u4e9b\u5c5e\u6027\u662f\u516c\u5171\u63a5\u53e3\uff0c\u7136\u540e\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u4e9b\u516c\u5171\u63a5\u53e3\u5f00\u53d1\uff0c\u8fd9\u4e9b\u516c\u5171\u6570\u636e\u63a5\u53e3\u8ddf\u4e0e\u7279\u5b9a\u65b9\u6cd5\u76f8\u5173\u7684\u6570\u636e\u63a5\u53e3\u5206\u5f00"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u7684\u91cd\u8981\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u53ef\u4ee5\u91cd\u7528\uff0c\u6240\u4ee5\u6709\u673a\u4f1a\u5c06\u4e00\u90e8\u5f00\u53d1\u8005\u5199\u7684\u4ee3\u7801\u5171\u4eab\u7ed9\u5176\u4ed6\u4eba"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4ee3\u7801\u4ece\u6570\u636e\u5265\u79bb\u51fa\u6765\uff0c\u624d\u53ef\u4ee5\u505a\u5230\u666e\u901a\u7528\u6237\u80fd\u591f\u6784\u5efa\u4e30\u5bcc\u7684\u529f\u80fd")),(0,n.kt)("p",null,"\u539f\u5219\uff1a"),(0,n.kt)("p",null,"Composition over inheritance "),(0,n.kt)("p",null,"\u867d\u7136ECS\u76f8\u8f83\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u6982\u5ff5\u6ca1\u90a3\u4e48\u76f4\u89c2\uff0c\u4f46\u662fOOP\u53ca\u5176\u7ee7\u627f\u7684\u65b9\u5f0f\u5e26\u6765\u7684\u903b\u8f91\u4e0a\u7684\u590d\u6742\u6027\u548c\u53ef\u7ef4\u62a4\u6027\uff0cECS\u5176\u5b9e\u66f4\u7b80\u5316\u4e86\uff0c\u5b83\u7b80\u5316\u7684\u539f\u56e0\u662f\u4e24\u4e2a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u95ee\u9898\u5206\u800c\u6cbb\u4e4b"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c42\u6b21\u66f4\u6241\u5e73\uff0c\u7ec4\u7ec7\u590d\u6742\u6027\u964d\u4f4e")),(0,n.kt)("p",null,"\u5f00\u6e90ECS\u5b9e\u73b0\uff1aFlecs"),(0,n.kt)("p",null,"ECS\u662f\u5b9e\u73b0in-game editor\u7684\u6838\u5fc3"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u4e5f\u8981\u652f\u6301\u7f51\u7edc\u670d\u52a1\u76f8\u5173\u7684\u529f\u80fd"),(0,n.kt)("p",null,"\u534f\u8bae\u7531\u5b98\u65b9\u6765\u5b9a\u4e49\uff0c\u5f00\u53d1\u8005\u5b9e\u73b0\u529f\u80fd\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5f00\u653e\u7ed9\u5f00\u53d1\u8005\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5728\u5185\u90e8\u5b9e\u73b0\u534f\u8bae\u5b9a\u4e49\uff0c\u7136\u540e\u901a\u8fc7\u79c1\u4ed3\u6216\u8005\u4ee3\u7801\u6587\u4ef6\u5206\u4eab\u7ed9\u522b\u4eba\uff0c\u524d\u8005\u6700\u597d\uff0c\u7136\u540e\u4f18\u79c0\u7684\u534f\u8bae\u4e13\u4e3a\u516c\u5171\u7684"),(0,n.kt)("h3",{id:"722-ecs"},"7.2.2 ECS"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u7ec4\u4ef6\uff1a\u5305\u542b\u5173\u7cfb\u548c\u5904\u7406\u987a\u5e8f\uff0c\u8fd9\u4e9b\u6982\u5ff5\u4fc3\u8fdb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u8de8\u7cfb\u7edf\u901a\u4fe1\uff1a\u4e24\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u95f4\u9700\u8981\u901a\u4fe1")),(0,n.kt)("p",null,"ECS game engine design "),(0,n.kt)("p",null,"\u7528\u6237\u611f\u77e5\u7684\u5e94\u8be5\u53ea\u6709Component \uff0c\u4ed6\u4e0d\u9700\u8981\u77e5\u9053\u6709\u4e2aSystem\uff0cComponent \u7684\u8bbe\u8ba1\u539f\u5219\u5e94\u8be5\u662f\u4e00\u4e2a\u529f\u80fd\u8282\u70b9\uff0cNode\uff0c\u50cfHoudini \u4e2d\u7684\u8282\u70b9\u4e00\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u8282\u70b9\u544a\u8bc9\u7528\u6237\u8be5\u8282\u70b9\u4e3a\u76ee\u6807\u7269\u4f53\u6dfb\u52a0\u4e86\u4ec0\u4e48\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u529f\u80fd\u5e94\u8be5\u7528\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u540d\u5b57\u63cf\u8ff0\uff0c\u4e00\u5b9a\u8981\u8d77\u4e00\u4e2a\u5f88\u597d\u7684\u540d\u5b57\uff0c\u5b98\u65b9\u8981\u4fdd\u7559\u4e00\u4e9b\u5e38\u89c1\u529f\u80fd\u7684\u540d\u5b57\u5217\u8868\uff0c\u6709\u4e00\u4e2a\u603b\u7684\u540d\u5b57\u5217\u8868\uff0c\u4e0d\u80fd\u5f00\u53d1\u8005\u968f\u610f\u8d77\u540d\u5b57\uff0c\u9664\u975e\u662f\u4ed6\u5185\u90e8\u79c1\u6709\u7684\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u5168\u5c40\u7684\u529f\u80fd\u8282\u70b9\u5217\u8868\u53ef\u4ee5\u5728\u6587\u6863\u4e2d\u7ea2\u7528\u6237\u9009\u62e9\u548c\u67e5\u8be2\uff0c\u666e\u901a\u7528\u6237\u771f\u6b63\u4f7f\u7528\u7684\u662f\u516c\u5171\u5217\u8868\u4e2d\u7684\u529f\u80fd\u8282\u70b9\uff0c\u5b98\u65b9\u7ea6\u5b9a\u548c\u7ef4\u62a4\u5176\u4e2d\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u63d0\u4ea4\u65b0\u7684\u8282\u70b9\u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u63d0\u4ea4\u7ecf\u8fc7\u5b98\u65b9\u5ba1\u6838\uff0c\u5ba1\u6838\u6570\u636e\u89c4\u8303\uff0c\u8ddf\u5176\u4ed6\u8282\u70b9\u4e4b\u95f4\u7684\u517c\u5bb9\u6027\uff0c\u4f8b\u5982\u67d0\u4e9b\u7c7b\u578b\u7684\u8282\u70b9\u4e0d\u9002\u5408\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u4e00\u4e2a\u8282\u70b9\u5b9a\u4e49\u53ea\u80fd\u6709\u4e00\u4e2aSystem \uff0c\u4f46\u662fSystem \u4e4b\u95f4\u7684\u5b9e\u73b0\u5dee\u5f02\u5f88\u5927\uff0c\u5c24\u5176\u6027\u80fd\u5dee\u5f02\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u6027\u80fd\u6d4b\u8bd5\u65b9\u6cd5\u9009\u62e9\u5176\u4e2d\u6700\u4f18\u7684\u7248\u672c\u4e3a\u9ed8\u8ba4\u7248\u672c\uff0c\u6700\u597d\u4e0d\u8981\u8ba9\u7528\u6237\u9009\u62e9\u7248\u672c\uff0c\u54ea\u6015\u662f\u968f\u673a\u9009\u62e9\u4e00\u4e2a\u7248\u672c\u4e5f\u8981\uff0c\u4f8b\u5982\u63d0\u4ea4\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u8981\u6c42\u5f00\u53d1\u8005\u63d0\u4f9b\u6027\u80fd\u6d4b\u8bd5\u7ed3\u679c\uff0c\u6240\u4ee5\u8282\u70b9\u7684\u5b9e\u73b0\u8981\u5b9a\u4e49\u4e00\u5957\u597d\u7684\u4eff\u771f\u6d4b\u8bd5\u5de5\u5177\u548c\u6846\u67b6"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u8981\u901a\u8fc7\u7528\u6237\u53bb\u67e5\u770b\u5176\u4e2d\u7684\u6570\u636e\u624d\u80fd\u7406\u89e3\u8282\u70b9\u7684\u542b\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u9700\u8981\u4fee\u6539\u53c2\u6570\u7684\u65f6\u5019\u624d\u4f1a\u53bb\u6253\u5f00\u8282\u70b9\u7684\u53c2\u6570")),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u548c\u82f9\u679c\u7684USDZ\u7684\u601d\u60f3\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u82f9\u679c\u53ea\u5b9a\u4e49\u4e86\u5c11\u91cf\u8282\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u51e0\u767e\u79cd\u8282\u70b9\u5b9e\u73b0\u5f88\u4e30\u5bcc\u7684\u529f\u80fd"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Houdini \u6709\u51e0\u767e\u79cd"),(0,n.kt)("li",{parentName:"ul"},"Fornite \u4e5f\u6709100\u591a\u79cd")),(0,n.kt)("p",null,"\u901a\u7528\u5f15\u64ce\u4e0d\u4f1a\u8fd9\u4e48\u505a\uff0c\u53ea\u6709in-house\u6216\u8005\u5821\u5792\u4e4b\u591c\u8fd9\u79cd\u6c99\u76d2\u6e38\u620f\u4f1a\u8fd9\u4e48\u505a"),(0,n.kt)("h3",{id:"723-ue5-mass"},"7.2.3 UE5 MASS"),(0,n.kt)("h3",{id:"724-data-oriented-and--driven"},"7.2.4 Data-oriented and -driven"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.dataorienteddesign.com"},"https://www.dataorienteddesign.com")),(0,n.kt)("p",null,"Data Oriented Programming unlearning objects (book)"),(0,n.kt)("h3",{id:"725--rust-ecs"},"7.2.5 Rust ECS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://specs.amethyst.rs/docs/tutorials/"},"https://specs.amethyst.rs/docs/tutorials/")),(0,n.kt)("h2",{id:"73-\u7f16\u8bd1\u5668\u4e0edsl"},"7.3 \u7f16\u8bd1\u5668\u4e0eDSL"),(0,n.kt)("p",null,"RW\u5e95\u5c42\u9700\u8981\u6781\u9ad8\u7684\u6027\u80fd\u6765\u652f\u6491\u4e0a\u5c42\u590d\u6742\u7684\u56fe\u5f62\u548c\u903b\u8f91\u8ba1\u7b97\uff0c\u540c\u65f6\u8fd9\u79cd\u6027\u80fd\u4f18\u5316\u53c8\u8981\u540c\u65f6\u5bf9\u8de8\u5e73\u53f0\u79fb\u690d\u6027\u548c\u5f00\u53d1\u6548\u7387\u5e26\u6765\u597d\u5904\uff0c\u6240\u4ee5\u5b83\u4e0d\u662f\u5355\u7eaf\u7684\u6027\u80fd\u4f18\u5316\uff0c\u662f\u4e00\u5957\u9ad8\u5ea6\u4f18\u826f\u7684\u5e95\u5c42\u6846\u67b6\uff0c\u5177\u4f53\u4e4b\u524d\u4e00\u4e0b\u51e0\u4e2a\u91cd\u8981\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u5f62\u7ba1\u7ebf\u7684\u6df1\u5ea6\u5b9a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u9a71\u52a8\u7684\u4f18\u5316\uff0c\u6570\u636e\u9a71\u52a8\u9664\u4e86\u8ba9\u666e\u901a\u7528\u6237\u80fd\u591f\u4f7f\u7528\u903b\u8f91\uff0c\u8fd8\u8981\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6765\u7b80\u5316\u5f00\u53d1\u8005\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4f8b\u5982\u53ea\u8981\u6309\u7167\u67d0\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u4e0d\u4ec5\u80fd\u4f7f\u6d41\u7a0b\u66f4\u7b80\u5355\uff0c\u8fd8\u4f1a\u662f\u7684\u5e95\u5c42\u7f16\u8bd1\u65f6\u548c\u8fd0\u884c\u65f6\u80fd\u591f\u9488\u5bf9\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u8bed\u8a00\u7684\u6df1\u5165\u5b9a\u5236\uff0c\u8ddf\u4e0a\u9762\u7684\u6570\u636e\u9a71\u52a8\u76f8\u7ed3\u5408\uff0c\u7528\u6237\u8d77\u6765\u6781\u5176\u7b80\u5355")),(0,n.kt)("h3",{id:"731--taichi"},"7.3.1 Taichi"),(0,n.kt)("p",null,"Born from the MIT CSAIL lab, Taichi was designed to facilitate computer graphics researchers' everyday life, by helping them quickly implement visual computing and physics simulation algorithms that are executable on GPU. The path Taichi took was an innovative one: Taichi is embedded in Python and uses modern just-in-time (JIT) frameworks (for example LLVM, SPIR-V) to offload the Python source code to native GPU or CPU instructions, offering the performance at both development time and runtime."),(0,n.kt)("h4",{id:"7311-\u65b0\u601d\u60f3"},"7.3.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"Taichi\u662f\u4e00\u95e8\u9762\u5411\u7269\u7406\u6a21\u62df\u548c\u8ba1\u7b97\u673a\u89c6\u89c9\u8ba1\u7b97\u7684\u9886\u57df\u7279\u5b9a\u8bed\u8a00\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u4f7f\u7528C++\u7b49\u8bed\u8a00\u81ea\u884c\u5b9e\u73b0\u7684\u7b97\u6cd5\uff0ctaichi\u63d0\u4f9b\u4e00\u4e0b\u65b9\u9762\u7684\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u63d0\u4f9b\u4e86\u5e76\u884c\u8ba1\u7b97\u62bd\u8c61"),"\uff0c\u4f7f\u5f97\u5f00\u53d1\u4eba\u5458\u4e0d\u9700\u8981\u7279\u522b\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u7ba1\u7406\uff0c\u5e76\u4e14\u5177\u6709\u8f83\u597d\u7684\u4e00\u81f4\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u4e86\u4ee3\u7801\u590d\u6742\u5ea6\u6027"),"\uff0c\u4e3b\u8981\u662f\u4e24\u4e2a\u65b9\u9762\uff0c\u4e00\u4e2a\u662f\u56e0\u4e3a\u4e0d\u7528\u5173\u5fc3\u5e76\u884c\u8ba1\u7b97\uff0c\u5f00\u53d1\u8005\u4e13\u6ce8\u4e8e\u5355\u4e2aKernel\uff0c\u7701\u6389\u4e86\u4e00\u5b9a\u7684\u590d\u6742\u5ea6\uff0c\u540c\u65f6\u903b\u8f91\u66f4\u6e05\u6670\uff1b\u53e6\u4e00\u4e2a\u662f\u901a\u8fc7\u5c06\u6570\u636e\u548c\u7b97\u6cd5\u5206\u79bb\uff0c\u4f7f\u5f97\u50cf\u7a00\u758f\u7ed3\u6784\u8fd9\u6837\u7684\u7b97\u6cd5\u88ab\u81ea\u52a8\u4f18\u5316\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u4e3a\u4e86\u6027\u80fd\u7f16\u5199\u5f88\u591a\u590d\u6742\u7684\u4ee3\u7801\uff0c\u4f8b\u5982\u5bf9\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u590d\u6742\u7684\u7ba1\u7406\u548c\u6392\u5e03")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9ad8\u6027\u80fd"),"\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u8fdb\u884c\u4e86\u5927\u91cf\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u7684\u4f18\u5316\uff0c\u56e0\u6b64\u6027\u80fd\u63d0\u5347\u6bd4\u8f83\u5927\uff0c\u4f46\u6bd4\u8f83\u5c40\u9650\u4e8e\u4e00\u4e9b\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4f18\u5316\u6b63\u5f0f\u9488\u5bf9\u8fd9\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u7ed3\u6784\u6216\u8005\u5f62\u5f0f\u8fdb\u884c\u4f18\u5316\u7684")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u5373\u65f6\u7f16\u8bd1"),"\uff0cTaichi\u63d0\u4f9b\u5373\u65f6\u7f16\u8bd1\u548c\u9884\u7f16\u8bd1\u4e24\u79cd\u65b9\u6848\uff0c\u5176\u4e2d\u9488\u5bf9\u5373\u65f6\u7f16\u8bd1\uff0c\u7531\u4e8e\u80fd\u591f\u77e5\u9053\u4e00\u4e9b\u8fd0\u884c\u65f6\u7684\u4fe1\u606f\uff0c\u56e0\u6b64Taichi\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u4f18\u5316")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u8de8\u5e73\u53f0\u90e8\u7f72"),"\uff0c\u5c06\u4e0a\u5c42\u7b97\u6cd5\u5168\u90e8\u8f6c\u6362\u4e3a\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u6709\u5229\u4e8e\u8de8\u5e73\u53f0\u90e8\u7f72\uff0c\u8fd9\u4e5f\u51cf\u8f7b\u4e86\u5f00\u53d1\u8005\u9488\u5bf9\u591a\u4e2a\u5e73\u53f0\u8fdb\u884c\u9002\u914d\u7684\u75db\u82e6\u8fc7\u7a0b"))),(0,n.kt)("p",null,"\u5176\u4ed6\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Academia"),"\uff0c\u5b66\u672f\u754c\u7684\u7814\u7a76\u5b9e\u73b0\u4e2d\uff0c\u5f80\u5f80\u56e0\u4e3a\u7f3a\u4e4f\u4f18\u5316\uff0c\u4e34\u65f6\u7684\u5b9e\u73b0\u65b9\u6848\uff0c\u5f80\u5f80\u5bfc\u81f4\u5f88\u96be\u590d\u7528\uff0cTaichi\u5e0c\u671b\u6539\u53d8\u8fd9\u4e2a\u5c40\u9762\uff0c\u4e00\u65b9\u9762\u901a\u8fc7\u4f18\u5316\u7684\u5e95\u5c42\u6280\u672f\u652f\u6301\uff0c\u4e00\u65b9\u9762\u63d0\u4f9b\u7edf\u4e00\u7684\u63a5\u53e3"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Apps & game engine integration"),"\uff0c\u7531\u4e8e\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u4f7f\u5f97Taichi\u5bb9\u6613\u8de8\u5e73\u53f0\uff0cTaichi\u53ef\u4ee5\u7f16\u8bd1\u4e00\u4e9b\u8de8\u5e73\u53f0\u7684\u5e93\u4f9b\u5176\u4ed6\u5e73\u53f0\u8c03\u7528\uff0c\u4f8b\u5982Taichi\u7684AOT\uff08Ahead of time\uff09\u6a21\u5757\u53ef\u4ee5\u6784\u5efa\u5e76\u4fdd\u5b58\u5728computer shaders\uff0c\u8fd9\u6837\u53ef\u4ee5\u88ab\u5176\u4ed6\u8fd0\u884c\u65f6\u8c03\u7528\uff0cAOT\u548cJIT\u662f\u4e24\u79cd\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"General-purpose computing"),"\uff0c\u867d\u7136\u65e9\u671f\u9762\u5411\u7279\u5b9a\u7684\u76ee\u6807\u5982\u7269\u7406\u6a21\u62df\uff0c\u4f46\u662f\u4e5f\u4f1a\u6709\u66f4\u591a\u7684\u901a\u7528\u8ba1\u7b97\u652f\u6301\uff0c\u4f8b\u5982TaichiSLAM"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Maybe a new frontend"),"\uff0c\u53ef\u4ee5\u5c06Python\u6539\u4e3a\u5176\u4ed6\u524d\u7aef")),(0,n.kt)("h4",{id:"7312-\u6280\u672f\u65b9\u6848"},"7.3.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,"\u4ee5\u4e0b\u4e3aTaichi\u8bed\u8a00\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"taichi-kernel",src:l(6383).Z,width:"3110",height:"1586"})),(0,n.kt)("p",null,"Taichi\u7684\u6838\u5fc3\u662f\u4e00\u4e2a\u7f16\u8bd1\u5668\uff08compiler\uff09\uff0c\u5728\u8fd9\u4e2a\u7f16\u8bd1\u5668\u4e2d\uff0c\u5b83\u9488\u5bf9\u7279\u5b9a\u7684\u4e00\u4e9b\u8ba1\u7b97\u4efb\u52a1\uff0c\u5982\u7269\u7406\u6a21\u62df\uff0c\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u7684\u7c7b\u578b\u7b49\u8fdb\u884c\u4f18\u5316\uff0c\u901a\u8fc7\u4fee\u6539\u548c\u8c03\u6574\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u7684\u5185\u5bb9\u5e03\u5c40\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u8ba1\u7b97\u7684\u7f13\u5b58\u5c40\u90e8\u6027\u66f4\u597d\uff0c\u540c\u65f6\u4e5f\u901a\u8fc7\u5411\u91cf\u5316\u7684\u6570\u636e\u7c7b\u578b\u7cfb\u7edf\uff0c\u4f7f\u5f97\u5e94\u7528\u7684\u5185\u5b58\u5360\u7528\u66f4\u5c0f\uff0c\u4ece\u800c\u4e5f\u51cf\u5c11\u5185\u5b58\u5bf9\u5e26\u5bbd\u7684\u5360\u7528\uff0c\u4e0d\u4ec5\u63d0\u9ad8\u4e86\u8ba1\u7b97\u6548\u7387\uff0c\u4e5f\u51cf\u5c11\u4e86\u5185\u5b58\u5360\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u76ee\u7684\uff0cTaichi\u5728\u524d\u7aef\u8bed\u8a00\u4e2d\uff08\u76ee\u524d\u662fPython\uff09\uff0c\u901a\u8fc7\u5143\u7f16\u7a0b\u5b9a\u4e49\u4e86\u7279\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'import taichi as ti\n\nti.init(arch=ti.gpu)\n\nn = 320\npixels = ti.field(dtype=float, shape=(n * 2, n))\n\n@ti.func\ndef complex_sqr(z):\n return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])\n\n@ti.kernel\ndef paint(t: float):\n for i, j in pixels: # Parallelized over all pixels\n c = ti.Vector([-0.8, ti.cos(t) * 0.2])\n z = ti.Vector([i / n - 1, j / n - 0.5]) * 2\n iterations = 0\n while z.norm() < 20 and iterations < 50:\n z = complex_sqr(z) + c\n iterations += 1\n pixels[i, j] = 1 - iterations * 0.02\n\ngui = ti.GUI("Julia Set", res=(n * 2, n))\n\ni = 0\nwhile gui.running:\n paint(i * 0.03)\n gui.set_image(pixels)\n gui.show()\n i = i + 1\n')),(0,n.kt)("p",null,"\u8fd9\u4e9b\u81ea\u5b9a\u4e49\u7c7b\u578b\u6784\u6210Taichi\u8bed\u8a00\uff0c\u5b83\u4eec\u501f\u52a9Python\u7684AST\u63a7\u5236\u80fd\u529b\uff0c\u751f\u6210\u5e26\u6765Taichi\u7c7b\u578b\u4fe1\u606f\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u7136\u540e\u5e95\u5c42\u7684\u7f16\u8bd1\u5668\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u7279\u5b9a\u7684\u4ee3\u7801\u4f18\u5316\u548c\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5176\u4e2d\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f16\u8bd1\u4f18\u5316\u8fc7\u7a0b\uff0cTaichi\u66f4\u662f\u9488\u5bf9\u4f8b\u5982\u7a00\u758f\u7ed3\u6784\u7b49\u7279\u5b9a\u7684\u8ba1\u7b97\u8fdb\u884c\u4e86\u5927\u91cf\u7684\u4ee3\u7801\u8c03\u6574\uff0c\u751f\u6210\u76f8\u5bf9\u4e8e\u524d\u7aef\u6570\u500d\u7684\u4ee3\u7801\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f46\u51cf\u5c11\u4e86\u4e0a\u5c42\u8bed\u8a00\u7684\u4ee3\u7801\u91cf\uff0c\u8fd8\u5bf9\u5176\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u505a\u4e86\u5927\u91cf\u7684\u8c03\u6574\uff0c\u4ee5\u63d0\u5347\u8ba1\u7b97\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u4e0a\u8ff0\u80fd\u529b\u7684\u5176\u4e2d\u6700\u91cd\u8981\u7684\u601d\u8def\u662f\u6570\u636e\u9a71\u52a8\uff0c\u5b83\u5c06\u4e00\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u8868\u8ff0\u4ece\u7b97\u6cd5\u6307\u4ee4\u5f53\u4e2d\u5206\u79bb\u51fa\u6765\uff0c\u4ece\u800c\u4f7f\u5f97\u7f16\u8bd1\u5668\u80fd\u591f\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5df2\u751f\u6210\u66f4\u52a0\u4f18\u5316\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u3002\u5f53\u7136\uff0c\u8fd9\u6837\u7684\u4e0a\u4e0b\u6587\u77e5\u8bc6\u5fc5\u987b\u9488\u5bf9\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u5e76\u4e0d\u662f\u5bf9\u6240\u6709\u7b97\u6cd5\u90fd\u80fd\u5b9e\u73b0\u4f18\u5316\u3002"),(0,n.kt)("h4",{id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0"},"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eReality World\u7684\u4ea7\u54c1\u65b9\u5411\uff0cTaichi\u5b58\u5728\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u7b97\u6cd5\u800c\u4e0d\u662f\u903b\u8f91"),"\uff0c\u5c3d\u7ba1Taichi\u53ef\u4ee5\u51cf\u5c11\u4ee3\u7801\u91cf\uff0c\u4f46\u662f\u5b83\u7684\u6838\u5fc3\u662f\u9762\u5411\u7279\u5b9a\u7b97\u6cd5\u7ed3\u6784\u7684\u4f18\u5316\uff0c\u5b83\u4e0d\u6d89\u53ca\u903b\u8f91\u5c42\u9762\u7684\u8003\u8651\uff0c\u4f8b\u5982\u600e\u4e48\u5e2e\u52a9\u5f00\u53d1\u8005\u5b9e\u73b0\u4ea4\u4e92\u903b\u8f91\uff1b")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u652f\u6301\u52a8\u6001\u521b\u5efa")))),(0,n.kt)("p",null,"Taichi\u6700\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u5e95\u5c42\u4f18\u5316\u7279\u522b\u91cd\uff0c\u8fd9\u4e5f\u662f\u5b9e\u73b0\u6027\u80fd\u63d0\u5347\u7684\u5173\u952e\uff0c\u800c\u8fd9\u4e00\u5c42\u4f18\u5316\u5b9e\u73b0\u4e8eC++\u4e2d\uff0c\u56e0\u6b64Taichi\u7684\u8fd0\u884c\u65f6\u7a0b\u5e8f\u53ea\u80fd\u662f\u4e24\u79cd\u60c5\u51b5\u4e4b\u4e00\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u662f\u8fd0\u884c\u65f6\u5e26\u4e0aTaichi\u7684\u7f16\u8bd1\u5668\uff0c\u8fd9\u79cd\u60c5\u51b5\u53ef\u4ee5\u652f\u6301\u4efb\u610f\u7684\u7b97\u6cd5\u4fee\u6539\uff0c\u8fd9\u4e5f\u662fPC\u4e0a\u7684\u4e00\u822c\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ol"},"\u5982\u679c\u8fd0\u884c\u65f6\u6ca1\u6709Taichi\u7684\u7f16\u8bd1\u73af\u5883\uff0c\u9700\u8981\u63d0\u524d\u5c06Taichi\u7a0b\u5e8f\u7f16\u8bd1\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7a0b\u5e8f\u4e00\u65e6\u90e8\u7f72\u5c31\u4e0d\u80fd\u4fee\u6539")),(0,n.kt)("p",null,"\u7b2c\u4e00\u79cd\u6a21\u5f0f\u662f\u6bd4\u8f83\u6162\u7684\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u9700\u8981\u5373\u65f6\u7f16\u8bd1\uff0c\u5e76\u4e14Taichi\u7684\u7f16\u8bd1\u8fc7\u7a0b\u76f8\u5bf9\u4e8e\u4e00\u822c\u7684\u7a0b\u5e8f\u7f16\u8bd1\u8981\u66f4\u52a0\u590d\u6742\uff0c\u56e0\u6b64\u8fd9\u79cd\u6a21\u5f0f\u4e0d\u9002\u5408\u5b9e\u65f6\u7684\u6e38\u620f\u5f15\u64ce\u7cfb\u7edf\uff1b\u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u6a21\u5f0f\uff0c\u7531\u4e8e\u7b97\u6cd5\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u5e95\u5c42\u673a\u5668\u8bed\u8a00\uff0c\u56e0\u6b64\u7a0b\u5e8f\u4e0d\u80fd\u518d\u88ab\u52a8\u6001\u4fee\u6539\uff0c\u9664\u975eTaichi\u5c06\u6240\u6709\u7684\u89e3\u91ca\u8fc7\u7a0b\u4e0a\u79fb\u81f3\u811a\u672c\u8bed\u8a00\uff08Python\uff09\u8fd9\u4e00\u5c42\uff0c\u4f46\u5c3d\u7ba1\u5982\u6b64\uff0c\u867d\u7136\u80fd\u591f\u652f\u6301\u52a8\u6001\u7a0b\u5e8f\uff0c\u4f46\u662f\u4e0a\u5c42\u7684\u89e3\u91ca\u8fc7\u7a0b\u4ecd\u7136\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"Reality World\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898\u7684\u65b9\u6cd5\u662f\u53ea\u63d0\u4f9b\u811a\u672c\u8bed\u8a00\u5c42\u9762\u7684\u4f18\u5316\u6216\u8005\u89e3\u91ca\uff0c\u800c\u4e3a\u4e86\u4fdd\u6301\u6027\u80fd\uff0cRW\u4e0d\u4f1a\u8fdb\u884c\u4efb\u4f55\u5e95\u5c42\u7684\u7279\u5b9a\u4f18\u5316\uff0c\u540c\u65f6\u56e0\u4e3aRW\u8981\u4fdd\u6301\u8ba1\u7b97\u7684\u901a\u7528\u6027\uff0c\u4ee5\u53ca\u5b83\u7684\u76ee\u6807\u662f\u9762\u5411\u903b\u8f91\u7ed3\u6784\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u53bb\u505a\u8fd9\u4e00\u5c42\uff0c\u53ea\u9700\u8981\u901a\u8fc7\u811a\u672c\u8bed\u8a00\u5c42\u7684DSL\u4f7f\u5f97\u5f00\u53d1\u8fc7\u7a0b\u8db3\u591f\u7b80\u5355\u5c31\u884c\uff0cRW\u7684\u67b6\u6784\u66f4\u50cfUnity DOTS\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e9bReality Create\u7684\u5185\u7f6e\u56fa\u5b9a\u7b97\u6cd5\u9002\u5408\u7528Taichi\u7f16\u8bd1\u5417\uff1f")),(0,n.kt)("p",null,"Taichi\u7684\u53e6\u5916\u4e00\u4e2a\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u7f16\u8bd1\u662f\u8ddf\u7b97\u6cd5\u6570\u636e\u7ed3\u6784\u76f8\u5173\u7684\uff0c\u4f8b\u5982\u5206\u914d\u7684\u5217\u8868\u662f5\u4e2a\u8fd8\u662f10\u4e2a\u5143\u7d20\uff0c\u8fd9\u4e9b\u90fd\u4f1a\u8ddf\u7f16\u8bd1\u5668\u8026\u5408\uff0c\u5b83\u662f\u4e00\u4e2a\u4e0e\u6570\u636e\u6709\u5173\u7684\u4f18\u5316\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e0e\u62bd\u8c61\u7ed3\u6784\u6709\u5173\u7684\u4f18\u5316\uff0c\u6216\u8005\u8fd9\u4e9b\u6570\u503c\u5373\u4f7f\u4e0d\u662f\u6765\u6e90\u4e8e\u8fd0\u884c\u65f6\uff0c\u4e5f\u662f\u4e0e\u7c7b\u578b\u7684\u5b9a\u4e49\u6709\u5173\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u5b83\u53ea\u9002\u5408\u4e0e\u56fa\u5b9a\u7684\u7b97\u6cd5\u5b9e\u73b0\u3002"),(0,n.kt)("h4",{id:"7314-\u5bf9\u6bd4"},"7.3.1.4 \u5bf9\u6bd4"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null}),(0,n.kt)("th",{parentName:"tr",align:null},"Taichi"),(0,n.kt)("th",{parentName:"tr",align:null},"Creation Script"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u76ee\u6807"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u5e95\u5c42\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u4e0a\u5c42\u8bed\u4e49\u3001\u529f\u80fd\u3001\u903b\u8f91")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u7f16\u8bd1\u7c7b\u578b"),(0,n.kt)("td",{parentName:"tr",align:null},"C++\u4fa7"),(0,n.kt)("td",{parentName:"tr",align:null},"\u811a\u672c\u4fa7")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u4f18\u5316\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u6df1\u5ea6\u4f18\u5316\uff0c\u4f8b\u5982\u9488\u5bf9\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u8fdb\u884c\u6df1\u5ea6\u7684\u4f18\u5316"),(0,n.kt)("td",{parentName:"tr",align:null},"\u4ec5\u9488\u5bf9\u5f00\u53d1\u590d\u6742\u7684\u8fdb\u884c\u4e00\u5b9a\u7684\u4f18\u5316\uff0c\u4f8b\u5982\u7b80\u5316\u5e76\u884c\u8ba1\u7b97\uff0c\u5f15\u5165\u4e00\u4e9b\u5feb\u6377\u53d8\u91cf\uff0c\u4e00\u4e9b\u8fb9\u754c\u9650\u5236\u7b49")))),(0,n.kt)("h3",{id:"732-modular-ai"},"7.3.2 Modular AI"),(0,n.kt)("h4",{id:"7321-\u65b0\u601d\u60f3"},"7.3.2.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"\u6211\u4eec\u9700\u8981\u4e0b\u4e00\u4ee3\u7f16\u8bd1\u5668\u548c\u7f16\u7a0b\u8bed\u8a00\u6765\u5e2e\u52a9\u89e3\u51b3\u8fd9\u79cd\u788e\u7247\u5316"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u8ba1\u7b97\u673a\u884c\u4e1a\u9700\u8981\u66f4\u597d\u7684\u786c\u4ef6\u62bd\u8c61\uff0c\u786c\u4ef6\u62bd\u8c61\u662f\u5141\u8bb8\u8f6f\u4ef6\u521b\u65b0\u7684\u65b9\u5f0f\uff0c\u4e0d\u9700\u8981\u8ba9\u6bcf\u79cd\u4e0d\u540c\u8bbe\u5907\u53d8\u5f97\u8fc7\u4e8e\u4e13\u7528\u5316\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u6211\u4eec\u9700\u8981\u652f\u6301\u5f02\u6784\u8ba1\u7b97\uff0c\u56e0\u4e3a\u8981\u5728\u4e00\u4e2a\u6df7\u5408\u8ba1\u7b97\u77e9\u9635\u91cc\u505a\u77e9\u9635\u4e58\u6cd5\u3001\u89e3\u7801JPEG\u3001\u975e\u7ed3\u6784\u5316\u8ba1\u7b97\u7b49\u7b49\u3002\u7136\u540e\uff0c\u8fd8\u9700\u8981\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u8bed\u8a00\uff0c\u4ee5\u53ca\u666e\u901a\u4eba\u4e5f\u53ef\u4ee5\u7528\u7684\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5177\u5907\u9ad8\u8d28\u91cf\u3001\u9ad8\u53ef\u9760\u6027\u548c\u9ad8\u5ef6\u5c55\u6027\u7684\u67b6\u6784\u3002")),(0,n.kt)("p",null,"\u5728GCC\u4e4b\u524d\uff0c\u6bcf\u5bb6\u516c\u53f8\u90fd\u8981\u5f00\u53d1\u81ea\u5df1\u7684\uff1a\u524d\u7aef->\u4f18\u5316\u5668->\u540e\u7aef\uff0c\u6bcf\u5bb6\u516c\u53f8\u901a\u5e38\u53ea\u5f00\u53d1\u4e00\u79cd\u524d\u7aef\u548c\u4e00\u79cd\u540e\u7aef\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff1bGCC\u5c06\u4e09\u8005\u5206\u79bb\uff0c\u51cf\u5c11\u4e86\u788e\u7247\u5316\uff1b"),(0,n.kt)("p",null,"LVVM\u662f\u4e00\u7cfb\u5217\u5e93\u7684\u7ec4\u5408\uff0c\u5b83\u7684\u6a21\u5757\u6027\u51f8\u663e\u4e86\u63a5\u53e3\u548c\u7ec4\u4ef6\u7684\u91cd\u8981\u6027\uff0cKey insight\uff1aCompilers as libraries\uff0cnot an app"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Enable embedding in other applications"),(0,n.kt)("li",{parentName:"ul"},"Mix and match components"),(0,n.kt)("li",{parentName:"ul"},"No hard coded lowering pipeline ")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cLLVM\u8fd8\u8ba9JIT\u7f16\u8bd1\uff08\u5373\u65f6\u7f16\u8bd1\uff09\u80fd\u6709\u66f4\u591a\u4f5c\u4e3a\u3002\u867d\u7136JIT\u7f16\u8bd1\u5668\u5df2\u7ecf\u662f\u4e00\u79cd\u8457\u540d\u7684\u6280\u672f\uff0c\u4f46\u5b83\u4e00\u5f00\u59cb\u662f\u7528\u5728\u5176\u4ed6\u5730\u65b9\u3002\u6709\u4e86LLVM\u4ee5\u540e\uff0c\u82af\u7247\u8bbe\u8ba1\u3001HLS\u5de5\u5177\u3001\u56fe\u5f62\u5904\u7406\u3001\u90fd\u66f4\u52a0\u4fbf\u6377\uff0c\u8fd8\u4fc3\u8fdb\u4e86CUDA\u548cGPGPU\u7684\u8bde\u751f\uff0c\u8fd9\u4e9b\u90fd\u662f\u5f88\u4e86\u4e0d\u8d77\u7684\u6210\u5c31\u3002\u4f46\u66f4\u91cd\u8981\u7684\u7684\u662f\uff0cLLVM\u6574\u5408\u4e86\u7684\u788e\u7247\u5316\u3002LLVM\u51fa\u73b0\u4e4b\u524d\u6709\u5f88\u591a\u79cdJIT\u7f16\u8bd1\u5668\u6846\u67b6\uff0c\u4f46LLVM\u7684\u5b58\u5728\uff0c\u63d0\u5347\u4e86JIT\u7f16\u8bd1\u5668\u7684\u57fa\u7ebf\uff0c\u8ba9\u5b83\u8ff8\u53d1\u51fa\u66f4\u591a\u53ef\u80fd\uff0c\u4e5f\u8ba9\u884c\u4e1a\u53ef\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u5c42\u6b21\u7684\u521b\u65b0\u3002"),(0,n.kt)("p",null,"LLVM\u7684\u4e3b\u8981\u7f3a\u70b9\u662f\u4e0d\u592a\u9002\u5408\u505a\u5e76\u884c\u5904\u7406\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u52a0\u901f\u5668\u662f\u4ec0\u4e48\uff1f\u53ef\u4ee5\u628a\u5b83\u9ad8\u5ea6\u7b80\u5316\u6210\u4e24\u4e2a\u90e8\u5206:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u4e2a\u662f\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u3002\u56e0\u4e3a\u7845\u672c\u8eab\u7684\u7ed3\u6784\u4e5f\u662f\u5e76\u884c\u7684\uff0c\u52a0\u901f\u5668\u8981\u7528\u5230\u8bb8\u591a\u6676\u4f53\u7ba1\uff0c\u4e5f\u5c31\u9700\u8981\u5f88\u591a\u7845\u6765\u8fbe\u6210\u8fd9\u79cd\u5e76\u884c\u5904\u7406\u80fd\u529b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u4e2a\u90e8\u5206\u8d77\u63a7\u5236\u4f5c\u7528\u3002\u5b83\u7684\u540d\u5b57\u4e0d\u592a\u7edf\u4e00\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u63a7\u5236\u5904\u7406\u5668\uff08Control Processor\uff09\u201d\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u5e8f\u5217\u5668\uff08Sequencer\uff09\u201d\u3002\u6709\u4eba\u5e0c\u671b\u5b83\u5c0f\u4e00\u70b9\uff0c\u6240\u4ee5\u4f1a\u505a\u72b6\u6001\u673a\u7136\u540e\u5d4c\u5165\u5bc4\u5b58\u5668\u3002\u8fd9\u4e2a\u90e8\u5206\u57fa\u672c\u4e0a\u8d77\u5230\u7f16\u6392\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u7684\u4f5c\u7528\u3002\u5982\u679c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u662f\u4e00\u4e2a\u5927\u578b\u77e9\u9635\u4e58\u6cd5\u5355\u5143\uff0c\u63a7\u5236\u5904\u7406\u5668\u5c31\u4f1a\u547d\u4ee4\u5b83\u6267\u884c\u4e00\u4e9b\u5b8f\u64cd\u4f5c\uff0c\u4f8b\u5982\u4ece\u8fd9\u4e2a\u5185\u5b58\u533a\u52a0\u8f7d\u3001\u6267\u884c\u67d0\u4e00\u64cd\u4f5c\u3001\u6267\u884c\u53e6\u4e00\u64cd\u4f5c\u3001\u66f4\u65b0SRAM\u7b49\u3002")),(0,n.kt)("p",null,"\u8fd8\u6709\u4e00\u4e9b\u52a0\u901f\u5668\u5f88\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u63a7\u5236\u903b\u8f91\u548c\u8ba1\u7b97\u4e4b\u95f4\u7684\u6bd4\u7387\u4e5f\u5404\u6709\u4e0d\u540c\u3002\u6b63\u5982Patterson\u548cHennessy\u6240\u8bf4\u90a3\u6837\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u70b9\uff0c\u4f46\u6bcf\u4e2a\u70b9\u90fd\u9700\u8981\u4e00\u5b9a\u7a0b\u5ea6\u7684\u7f16\u6392\u3002\u4f46\u4eba\u4eec\u5e38\u5e38\u5fd8\u8bb0\u5176\u4ed6\u4e00\u4e9b\u76f8\u5173\u7684\u5de5\u4f5c\uff0c\u6bd4\u5982\uff0c\u4f60\u4e0d\u6b62\u9700\u8981\u7f16\u6392\uff0c\u8fd8\u8981\u89e3\u51b3\u542f\u52a8\u95ee\u9898\uff0c\u6bd4\u5982\u7535\u6e90\u7ba1\u7406\uff0c\u8fd8\u8981\u4e0d\u65ad\u8c03\u8bd5\u6392\u9519\u3002\u5982\u679c\u4f60\u60f3\u505a\u5f97\u5c3d\u5584\u5c3d\u7f8e\uff0c\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u90e8\u4ef6\u8fdb\u884c\u7f16\u7a0b\uff1b\u5982\u679c\u4f60\u5e0c\u671b\u7b80\u5355\u4e00\u70b9\uff0c\u53ef\u4ee5\u628a\u8fd9\u4e9b\u90e8\u4ef6\u505a\u5f97\u5f88\u5c0f\u3002"),(0,n.kt)("p",null,"\u5f53\u63a7\u5236\u5904\u7406\u5668\u548c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u90fd\u9f50\u5907\u4e4b\u540e\uff0c\u600e\u4e48\u7ed9\u5b83\u4eec\u8f93\u5165\u548c\u8f93\u51fa\u4fe1\u606f\uff1f\u8fd9\u65f6\u5c31\u9700\u8981\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u3002\u6839\u636e\u62bd\u8c61\u7b49\u7ea7\u7684\u4e0d\u540c\uff0c\u8fd9\u4e2a\u5185\u5b58\u63a5\u53e3\u53ef\u4ee5\u662f\u5c0f\u578b\u7684block\uff0c\u4e5f\u53ef\u4ee5\u662f\u652f\u6301\u7269\u8054\u7f51\u7684\u82af\u7247\uff0c\u8fd9\u6837\u52a0\u901f\u5668\u5c31\u53ef\u4ee5\u548c\u8be5\u82af\u7247\u8fde\u63a5\u6574\u4e2a\u7f51\u7edc\u901a\u4fe1\u4e86\u3002\u8fd9\u91cc\u9700\u8981\u7528\u5230\u50cfAMBA\u6216\u7c7b\u4f3c\u7684\u6280\u672f\u3002"),(0,n.kt)("p",null,"\u4f60\u53ef\u4ee5\u5728\u66f4\u5927\u7684\u7c92\u5ea6\uff08granularity\uff09\u4e0a\u6784\u5efa\u6574\u4e2a ASIC\uff0c\u6240\u6709\u7684 ASIC \u90fd\u5728\u52a0\u901f\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4f60\u53ef\u80fd\u6b63\u5728\u4e0e PCI \u901a\u4fe1\uff0c\u5e76\u4e14\u6b63\u5728\u82af\u7247\u5916\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u4f46\u8fd9\u79cd\u201c\u6211\u6709\u4e00\u4e2a\u63a7\u5236\u5904\u7406\u5668\uff0c\u6709\u4e00\u4e2a\u8ba1\u7b97\u5355\u5143\u548c\u6709\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u201d\u7684\u6a21\u578b\uff0c\u662f\u6784\u5efa\u8fd9\u4e9b\u4e1c\u897f\u7684\u4e00\u79cd\u975e\u5e38\u6807\u51c6\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u6211\u7684\u4e3b\u5f20\u662f\u521b\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u53d1\u5c55\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u901a\u8fc7\u4e0d\u65ad\u521b\u65b0\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u6211\u4eec\u5e94\u8be5\u5bf9\u6b64\u8fc7\u7a0b\u6240\u9700\u7684\u4e00\u5207\u5b9e\u884c\u6807\u51c6\u5316\uff0c\u901a\u8fc7\u6807\u51c6\u5316\u80fd\u591f\u5feb\u901f\u5b8c\u6210\u5de5\u4f5c\uff0c\u7136\u540e\u5c31\u53ef\u4ee5\u628a\u65f6\u95f4\u82b1\u5728\u771f\u6b63\u91cd\u8981\u7684\u4e8b\u60c5\u4e0a\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6709\u4e00\u79cd\u76f8\u5bf9\u8f83\u65b0\u7684\u7f16\u8bd1\u5668\u6280\u672fMLIR\u53ef\u4ee5\u5e2e\u4e0a\u5fd9\u3002\u4f60\u53ef\u4ee5\u628aMLIR\u770b\u4f5c\u662f\u4e00\u4e2a\u5143\u7f16\u8bd1\u5668\uff0c\u5b83\u5141\u8bb8\u4f60\u975e\u5e38\u5feb\u901f\u5730\u6784\u5efa\u52a0\u901f\u5668/\u7f16\u8bd1\u5668\u3002MLIR\u7684\u5168\u79f0\u662f\u201c\u591a\u7ea7\u4e2d\u95f4\u8868\u793a\u201d\uff0c\u5b83\u652f\u6301\u6784\u5efa\u5206\u5c42\u7f16\u8bd1\u5668\uff0c\u5e76\u4ee5\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u65b9\u5f0f\u6784\u5efa\uff0c\u540c\u65f6\u4fdd\u7559\u9886\u57df\u7684\u590d\u6742\u6027\u3002\u7136\u540e\uff0c\u4f7f\u7528MLIR\u63d0\u4f9b\u7684\u5927\u91cf\u5e93\u548c\u4f8b\u7a0b\u6765\u505a\u4e00\u4e9b\u4e8b\u60c5\uff0c\u6bd4\u5982\uff0c\u7528\u591a\u9762\u4f53\u7f16\u8bd1\u5668\u6765\u505a\u5faa\u73af\u5c55\u5f00\u548c\u5faa\u73af\u878d\u5408\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\uff0c\u6211\u4eec\u5f00\u59cb\u770b\u5230\u7684\u662f\uff0cMLIR\u5f00\u59cb\u7edf\u4e00\u5f02\u6784\u8ba1\u7b97\u7684\u4e16\u754c\uff0c\u8fd9\u4e5f\u662f\u6211\u5e0c\u671b\u770b\u5230\u7684\u3002\u6240\u6709\u7684\u5927\u516c\u53f8\u73b0\u5728\u90fd\u5728\u4e0d\u540c\u7a0b\u5ea6\u5730\u4f7f\u7528MLIR\uff0c\u6211\u8ba4\u4e3a\uff0c\u5efa\u7acb\u5728RISC-V\u4e4b\u4e0a\u7684MLIR\u5f88\u6709\u5fc5\u8981\uff0c\u56e0\u4e3a\u4e00\u65e6\u5f00\u59cb\u4ece\u4e0b\u5f80\u4e0a\u6574\u5408\u884c\u4e1a\uff0c\u5c31\u53ef\u4ee5\u5f00\u59cb\u628a\u8d8a\u6765\u8d8a\u591a\u7684\u5c42\uff08layer\uff09\u62c9\u5230\u4e00\u8d77\uff0c\u91cd\u590d\u4f7f\u7528\u66f4\u591a\u7684\u6280\u672f\u3002\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4e13\u6ce8\u5728\u5806\u6808\u4e2d\u66f4\u6709\u8da3\u7684\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u4e00\u904d\u53c8\u4e00\u904d\u5730\u91cd\u65b0\u53d1\u660e\u8f6e\u5b50\u3002"),(0,n.kt)("p",null,"\u4e5f\u8bb8\u4f60\u4e0d\u4f1a\u611f\u5230\u60ca\u8bb6\uff0c\u4f46\u6211\u8ba4\u4e3a\u7b54\u6848\u662f\u7f16\u8bd1\u5668\uff0c\u8fd9\u662f\u771f\u6b63\u8981\u8d70\u7684\u4e00\u6761\u8def\u3002"),(0,n.kt)("p",null,"\u4f5c\u4e3a\u7f16\u8bd1\u5668\u7f16\u7a0b\u8bed\u8a00\u4ece\u4e1a\u8005\uff0c\u6211\u8ba4\u4e3a\u786c\u4ef6\u8bbe\u8ba1\u8fd9\u4e2a\u9886\u57df\u5df2\u7ecf\u5230\u4e86\u91cd\u65b0\u8bc4\u4f30\u7684\u5730\u6b65\u3002\u6574\u4e2a\u9886\u57df\u662f\u5efa\u7acb\u5728\u4e24\u79cd\u6280\u672f\u4e4b\u4e0a\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e3b\u8981\u662f\u4e00\u79cd\u53eb\u505aVerilog\u7684\u6280\u672f\uff0c\u4f60\u5927\u6982\u7387\u53ef\u80fd\u4e0d\u559c\u6b22Verilog\u3002\u5b83\u6709\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u6807\u51c6\uff0c\u5f53\u6211\u770b\u5b83\u65f6\uff0c\u4e0d\u77e5\u9053\u5b83\u662f\u88ab\u8bbe\u8ba1\u6210\u4e00\u4e2aIR\uff0c\u4e5f\u5373\u4e00\u4e2a\u4e0d\u540c\u5de5\u5177\u4e4b\u95f4\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u8fd8\u662f\u88ab\u8bbe\u8ba1\u6210\u8ba9\u4eba\u4eec\u76f4\u63a5\u4e66\u5199\u7684\u4e1c\u897f\u3002\u6211\u8ba4\u4e3a\uff0c\u5b83\u5728\u8fd9\u4e24\u65b9\u9762\u90fd\u5f88\u5931\u8d25\uff0c\u5b83\u771f\u7684\u5f88\u96be\u4f7f\u7528\uff0c\u5bf9\u5de5\u5177\u6765\u8bf4\u4e5f\u5f88\u96be\u751f\u6210\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0cEDA\u5de5\u5177\u3001\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u5df2\u7ecf\u975e\u5e38\u6210\u719f\uff0c\u5b83\u4eec\u975e\u5e38\u6807\u51c6\u5316\uff0c\u6709\u5f88\u591a\u5927\u516c\u53f8\u6b63\u5728\u63a8\u52a8\u548c\u5f00\u53d1\u8fd9\u4e9b\u5de5\u5177\u3002\u4f46\u4ed6\u4eec\u7684\u521b\u65b0\u901f\u5ea6\u5e76\u4e0d\u5feb\uff0c\u8bbe\u8ba1\u65f6\u5e76\u4e0d\u6ce8\u91cd\u53ef\u7528\u6027\u3002\u5b83\u4eec\u6bd4\u52a0\u901f\u5668\u7f16\u8bd1\u5668\u8981\u5dee\u5f97\u591a\uff0c\u7edd\u5bf9\u4e0d\u662f\u4ee5\u8f6f\u4ef6\u67b6\u6784\u7684\u6700\u4f73\u5b9e\u8df5\u6765\u6784\u5efa\u7684\uff0c\u800c\u4e14\u6210\u672c\u4e5f\u975e\u5e38\u9ad8\u3002\u56e0\u6b64\uff0c\u8fd9\u4e2a\u9886\u57df\u6709\u5de8\u5927\u7684\u521b\u65b0\u673a\u4f1a\u3002"),(0,n.kt)("p",null,"\u6211\u4e0d\u662f\u7b2c\u4e00\u4e2a\u8ba4\u8bc6\u5230\u8fd9\u4e00\u70b9\u7684\u4eba\u3002\u5728\u5f00\u6e90\u793e\u533a\uff0c\u5df2\u7ecf\u6784\u5efa\u4e86\u4e00\u5806\u5de5\u5177\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u8fd9\u4e9b\u5de5\u5177\u975e\u5e38\u68d2\uff0c\u6bd4\u5982Verilator\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0cYosys\u662f\u53e6\u4e00\u4e2a\u975e\u5e38\u68d2\u7684\u5de5\u5177\uff0c\u5b83\u6709\u5f88\u597d\u7684\u5b9a\u7406\u8bc1\u660e\u5668\uff08Theorem Prover\uff09\u3002"),(0,n.kt)("p",null,"\u6211\u7684\u62c5\u5fe7\u5728\u4e8e\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u7406\u60f3\u76ee\u6807\u662f\u8bd5\u56fe\u50cf\u4e13\u6709\u5de5\u5177\u4e00\u6837\u597d\uff0c\u800c\u6211\u5e76\u4e0d\u771f\u7684\u8ba4\u4e3a\u4e13\u6709\u5de5\u5177\u6709\u90a3\u4e48\u597d\u3002\u53e6\u5916\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u8bbe\u8ba1\u8005\u5e76\u6ca1\u6709\u5408\u4f5c\u3002\u6bcf\u4e2a\u5de5\u5177\u90fd\u5728\u9075\u5faa\u5355\u4e00\u50f5\u5316\u7684\u65b9\u6cd5\uff0c\u6ca1\u6709\u5b9e\u73b0\u5927\u7a0b\u5ea6\u7684\u6a21\u5757\u5316\u6216\u91cd\u590d\u4f7f\u7528\uff0c\u53ef\u4ee5\u4ece\u5176\u4e2d\u4e00\u4e9b\u5de5\u5177\u4e2d\u5f97\u5230\u7f51\u7edc\u5217\u8868\uff0c\u7528\u5b83\u6765\u89e3\u6790\u4e00\u4e9bVerilog\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\u4f46\u662f\uff0c\u5b83\u4e0d\u662f\u7531\u57fa\u4e8e\u5e93\u7684\u8bbe\u8ba1\u6784\u5efa\uff0c\u4e0eLLVM\u4e4b\u7c7b\u7684\u4e1c\u897f\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u8981\u521b\u5efa\u5728\u8bed\u6cd5\u4e0a\u6b63\u786e\uff0c\u5e76\u4e14\u80fd\u8868\u8fbe\u4f60\u60f3\u8981\u7684\u4e1c\u897f\u7684Verilog\u975e\u5e38\u56f0\u96be\u3002\u6b64\u5916\uff0c\u56e0\u4e3a\u8bb8\u591a\u4e0eVerilog\u6709\u5173\u7684\u5de5\u5177\u90fd\u6709\u70b9\u5947\u602a\uff0c\u800c\u4e14\u5f88\u96be\u9ad8\u8d28\u91cf\u5730\u9884\u6d4b\u3002\u751f\u6210\u4e0e\u5de5\u5177\u517c\u5bb9\u7684Verilog\u662f\u6bcf\u4e2a\u524d\u7aef\u5de5\u5177\u90fd\u5fc5\u987b\u91cd\u65b0\u53d1\u660e\u7684\u4e00\u95e8\u9ed1\u79d1\u6280\u3002\u56e0\u6b64\uff0c\u5728\u5806\u6808\u4e2d\u771f\u7684\u7f3a\u5931\u4e86\u4e00\u79cd\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u5141\u8bb8\u4eba\u4eec\u5728\u7f16\u7a0b\u6a21\u578b\u6c34\u5e73\u4e0a\u8fdb\u884c\u521b\u65b0\uff0c\u5e76\u5141\u8bb8\u4eba\u4eec\u627e\u5230\u65b9\u6cd5\u8ba9\u6240\u6709\u5de5\u5177\u90fd\u63a5\u53d7\u5b83\u3002"),(0,n.kt)("p",null,'\u6709\u4e00\u4e2a\u53ebCIRCT\u7684\u65b0\u5f00\u6e90\u9879\u76ee\u6b63\u8bd5\u56fe\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002CIRCT\u7684\u5168\u79f0\u662f"Circuit IR for Compilers and Tools\uff08\u7f16\u8bd1\u5668\u548c\u5de5\u5177\u7684Circuit IR\uff09"\uff0c\u5b83\u6784\u5efa\u5728MLIR\u548cLLVM\u4e4b\u4e0a\u3002CIRCT\u793e\u533a\u7684\u76ee\u7684\u662f\u63d0\u5347\u6574\u4e2a\u786c\u4ef6\u8bbe\u8ba1\u4e16\u754c\uff0c\u4fc3\u8fdb\u7f16\u7a0b\u6a21\u578b\u7684\u521b\u65b0\uff0c\u5e76\u542f\u7528\u4e00\u5957\u65b0\u7684\u6a21\u5757\u5316\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u3002\u5b83\u786e\u5b9e\u8fd0\u7528\u4e86\u5f88\u591a\u6211\u4eec\u5230\u76ee\u524d\u4e3a\u6b62\u4e00\u76f4\u5728\u8ba8\u8bba\u7684\u57fa\u4e8e\u5e93\u7684\u6280\u672f\u3002'),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u7ec4\u5408\u7684\u57fa\u4e8e\u5e93\u7684\u5de5\u5177\u94fe\uff0c\u53ef\u4ee5\u5efa\u7acb\u6709\u8da3\u7684\u65b0\u7684\u5f39\u6027\u63a5\u53e3\u8fde\u63a5\uff0c\u4f60\u53ef\u4ee5\u5efa\u7acbChisel\u793e\u533a\u6b63\u5728\u63a2\u7d22\u7684\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u7528\u5b83\u6765\u52a0\u901fChisel\u6d41\u7a0b\u3002\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\uff0c\u53ef\u4ee5\u8ba9\u5f88\u591a\u4eba\u4e00\u8d77\u5de5\u4f5c\uff0c\u63a8\u52a8\u4e0d\u540c\u65b9\u5f0f\u7684\u521b\u65b0\u3002\u6211\u4eec\u6b63\u5728\u5efa\u7acb\u4e00\u4e2a\u771f\u6b63\u4f1f\u5927\u7684\u5c0f\u4e16\u754c\uff0c\u8ba9\u5173\u5fc3\u786c\u4ef6\u7f16\u8bd1\u5668\u7684\u4eba\u5728\u4e00\u8d77\u5de5\u4f5c\uff0c\u8fd9\u5f88\u6709\u8da3\u3002\u8fd9\u9879\u5de5\u4f5c\u4ecd\u5904\u4e8e\u65e9\u671f\uff0c\u76ee\u6807\u662f\u66f4\u5feb\u5730\u6784\u5efa\u52a0\u901f\u5668\uff0c\u8ba9\u52a0\u901f\u5668\u53d8\u5f97\u66f4\u5feb\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Modular,")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"composable &")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"layered architecture")," is what the world of AI needs, and ",(0,n.kt)("strong",{parentName:"li"},"we are building it for everyone."))),(0,n.kt)("h4",{id:"7322-challenges"},"7.3.2.2 Challenges"),(0,n.kt)("p",null,"Compiling an AI graph is actually quite different from traditional compilation problems. "),(0,n.kt)("p",null,"An AI graph contains two things: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"the graph topology (how the layers are interconnected) and "),(0,n.kt)("li",{parentName:"ul"},"the model weights (parameters associated with specific layers). ")),(0,n.kt)("p",null,"In terms of size, the graph topology is on the order of kilobytes, whereas weights are on the order of megabytes and gigabytes. For example, look at some of the bigger models released by Meta. The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/facebookresearch/metaseq/tree/main/projects/OPT"},"Open Pre-trained Transformers")," have 30B, 66B, or even 175B+ parameters, which equates to 100+ gigabytes of weights. There are even larger models like ",(0,n.kt)("a",{parentName:"p",href:"https://www.deepmind.com/blog/language-modelling-at-scale-gopher-ethical-considerations-and-retrieval"},"Gopher")," or ",(0,n.kt)("a",{parentName:"p",href:"https://www.microsoft.com/en-us/research/blog/using-deepspeed-and-megatron-to-train-megatron-turing-nlg-530b-the-worlds-largest-and-most-powerful-generative-language-model/"},"Megatron")," too."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR in the Modular compilation stack")),(0,n.kt)("p",null,"The Modular stack leverages the ",(0,n.kt)("a",{parentName:"p",href:"http://mlir.llvm.org/"},"MLIR compiler infrastructure")," to represent and transform AI models, including AI operator graphs (for multiple frameworks), mid-level runtime primitives, and low-level machine code generation. Our team has many of the ",(0,n.kt)("a",{parentName:"p",href:"https://arxiv.org/abs/2002.11054"},"foundational architects of MLIR"),", who were deeply involved in ",(0,n.kt)("a",{parentName:"p",href:"https://www.blog.google/technology/ai/mlir-accelerating-ai-open-source-infrastructure/"},"releasing MLIR to the world"),", and we continue to actively maintain large portions of core ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," today."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR is a good thing, but its approach for managing weights was not!")),(0,n.kt)("p",null,"One of the fundamental building blocks of MLIR is an ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"Attribute"),", which you can think of as a form constant data that is \u201cunique\u2019d\u201d (aka, memoized, or ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/String_interning"},"intern\u2019ed"),"). Attributes are user extensible, meaning they may take various forms depending on the use case. Attributes are used for things like constant expression values (e.g. \u201c5\u201d, \u201c10.0\u201d, etc.), string literals, for enumerators (e.g. \u201cless than\u201d, \u201cgreater than\u201d, \u201cequal to\u201d, etc.), for arrays of data \u2026 and far more. Most MLIR-based AI tooling uses attributes to hold weights for AI models."),(0,n.kt)("p",null,"However, this is a problem: model weights can be enormous, and MLIR stores a two-gigabyte weight tensor the same way as a four-byte tensor \u2014 in an attribute containing a unique\u2019d array of elements. This creates an obvious problem given we just used the words ",(0,n.kt)("strong",{parentName:"p"},"unique\u2019d")," and ",(0,n.kt)("strong",{parentName:"p"},"gigabytes")," so close together!"),(0,n.kt)("p",null,'Here is the challenge: when something is unique\u2019d in MLIR, it is allocated, hashed, and stored within an "',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),'". These objects have lifetimes attached to the ',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),", and they are not destroyed until the context is destroyed. This is great for small values because we can pass them around and compare unique'd objects by pointer, share allocations for attributes (very common), and more."),(0,n.kt)("p",null,"These benefits turn into a liability with huge weight tensors: we don\u2019t want to reallocate, copy, or unique them. We also don\u2019t want them to live forever: it is important to deallocate big weights when the computation no longer references them. For example, when we run a tool that quantizes our model, it needs to transform the operator graph and generate new weights \u2014 and can end up with multiple copies of that data which all live for the duration of the compilation process."),(0,n.kt)("p",null,"Another problem for ML tooling is how MLIR was serialized to the file system. When we started, MLIR had no binary serialization format - just a textual format. This is a problem for large weights because each byte of binary data ended up being emitted in a hexadecimal form - taking 2x the space as the data it is encoding. That means that we end up not only taking a long time to create the hex ",(0,n.kt)("em",{parentName:"p"},"(about 20 seconds for a decently sized multi-gigabyte model)"),", but our intermediate files are twice as big as they should be - 2x an already big number!"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A bigger impact than just developer productivity")),(0,n.kt)("p",null,"This well-intended design mechanism can cripple even the best compilers. The most obvious challenge is that it compounds the time necessary to compile, inspect, and transform a model. If you have ever used the excuse, \"My code's compiling,\" you'll be aware of the pain this creates. Here, we are forcing the processor to continuously allocate, copy, and hash multiple gigabytes of data."),(0,n.kt)("p",null,"A bigger problem than compile-time is that memory use impacts larger scale architectural features in the Modular stack. For example, because our compiler and technology stack itself is highly parallel and utilizes advanced features like online search, memory use directly affects the amount of work we can do in parallel. This is important to get the highest quality of results."),(0,n.kt)("p",null,"At Modular, it is core to our ethos that we build tools that users will fall in love with. We realize that advanced features simply won\u2019t get used if they are difficult to use, impact productivity, or have significant caveats (e.g. they don\u2019t work in all cases). We love that fixing ",(0,n.kt)("strong",{parentName:"p"},"these foundational problems with large weights"),", allows us to ",(0,n.kt)("em",{parentName:"p"},"subtract complexity")," from our users lives and workflows."),(0,n.kt)("h4",{id:"7323-core-additions-to-mlir"},"7.3.2.3 Core additions to MLIR"),(0,n.kt)("p",null,"We took a step back to understand what we needed to solve this problem with large model tooling and listed out:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Only allocate memory when necessary"),": We know it is more efficient to memory map large data (like weights) from disk, instead of copying data into malloc\u2019d blocks.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"No hashing or uniquing"),": Let\u2019s not check equality of 2 gigabytes blobs of data; weights should be identified by name instead of being implicitly unique\u2019d by content.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enabling Inline Mutation"),": If there is only one user of the data, we should be able to quantize, transform and manipulate data in place instead of making a copy of it first.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enable deallocation"),": The data we are working with is huge, and we need to deallocate it when the last reference to the data is destroyed.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Fast serialization"),": Whether JITing, searching optimization parameters, or just iterating locally, we cache IR for many reasons, and it should be ",(0,n.kt)("strong",{parentName:"li"},"fast."))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fixing the weight attributes")),(0,n.kt)("p",null,"\u6a21\u578b\u4e2d\u7684weight\u662f\u5e38\u91cf\uff0c\u5728\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u53d8\u3002\u8fd9\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u57fa\u7840\uff0c\u8ddf\u5176\u4ed6\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u60c5\u51b5\u4e0d\u4e00\u6837\uff0c\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u4e0d\u53d8\u91cf\u662f\u5c11\u6570\uff0c\u800c\u5927\u90e8\u5206\u53d8\u91cf\u90fd\u4f1a\u968f\u7740\u8ba1\u7b97\u8fc7\u7a0b\u800c\u53d1\u751f\u53d8\u5316\u3002"),(0,n.kt)("p",null,"The first four requirements address one fundamental problem with how we've been using MLIR: weights are constant data, but shouldn't be managed like other MLIR attributes. Until now, we've been trying to place a square peg into a round hole, creating a lot of wasted space that's costing us development velocity (and, therefore, money for users of the tools)."),(0,n.kt)("p",null,'We decided we needed to manage this weight data differently than other types of attributes. This prompted our first fundamental extension to MLIR, "Resources," a mechanism to separate data from its references within the computation.'),(0,n.kt)("p",null,"\u7b2c\u4e00\u4e2a\u57fa\u672c\u6269\u5c55\uff1aresources\uff0c\u4e00\u79cd\u5c06\u6570\u636e\u53ca\u5176\u5f15\u7528\u8fdb\u884c\u5206\u79bb\u7684\u673a\u5236"),(0,n.kt)("p",null,"Each blob of serialized MLIR may now contain additional sections, known as \u201cresource\u201d sections. These sections either include "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u201cdialect\u201d resources (a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/LangRef/#dialects"},"dialect")," is essentially a namespace-like abstraction used when extending MLIR) or "),(0,n.kt)("li",{parentName:"ul"},"\u201cexternal\u201d resources (for toolchain-specific data). ")),(0,n.kt)("p",null,"The data within these sections is represented using a simple key-value pairing, creating a json-like structure, like so:"),(0,n.kt)("p",null,"Encoding resources this way also brings some secondary benefits:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Printing IR for debugging is less error-prone, leading to a better development experience"),": Resources are specialized sections; we don\u2019t have to worry about accidentally dumping 4 gigabytes to the screen while debugging something.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"We can soundly process the IR without the data present"),": With the IR only holding references to the data and not the data itself, we can omit the underlying resource data if desired. For example, this greatly simplifies reproducers that don\u2019t need the big weight data (consider sending a colleague a 20-megabyte file instead of a 1.2-gigabyte file).")),(0,n.kt)("p",null,"By introducing resources as a new concept, we\u2019ve finally been able to build a clean separation between program and data. Now we never pass our weight data directly to an attribute. Instead, we pass a weak reference to the attribute and pass the data to a specialized manager. With this, we now have much more control over when and how weights are allocated, mutated, and destroyed."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A new binary encoding for MLIR")),(0,n.kt)("p",null,"With a better representation of our weights, the only thing we needed now was a more efficient method of storing these weights when serializing our MLIR representation."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"What is the user impact?")),(0,n.kt)("p",null,"In the end, adding resources and a binary encoding to MLIR has made our toolchain and development workflow significantly faster and reduced our memory usage substantially - making our performance and velocity incredible. It\u2019s also made everything about MLIR better \u2014 more on that later."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},(0,n.kt)("img",{parentName:"a",src:"https://uploads-ssl.webflow.com/62a8b4a3467401a65a14d263/636c536434d44a0efd47c896_mlir-dot-touch.jpg",alt:"img"}))),(0,n.kt)("p",null,"Said by every ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," developer, everywhere"),(0,n.kt)("p",null,"\u200d"),(0,n.kt)("p",null,"To validate this, we tested our changes across models of various sizes, measuring the speed of a real-life lowering and optimization pipeline in our MLIR-based graph compiler (from a TensorFlow serialized model to the input format of our runtime) and the memory used during that process."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Compilation Workflow","*")),(0,n.kt)("p",null,"MLIR is now significantly faster. Going from a serialized TensorFlow model (from a checkout of TensorFlow 2.10) to our runtime input format, a process that involves many transformations of the underlying program representation, was ~1.8-2x faster in terms of wall clock time than before, with speed scaling consistently across the various model sizes."),(0,n.kt)("p",null,"Diving a bit deeper, the TF serialized model processing is now basically instant \u2014 all our time is spent writing the big-weight data to disk when generating the MLIR. In fact, the actual time spent in our code is about 10x faster than before. Most of the time is now bounded by the speed at which the SSD writes >1 gigabyte of data to disk."),(0,n.kt)("p",null,"For ML developers using our tools this means faster model compilation, thereby improving productivity and iteration time. This has benefits for production environments as well when loading (and compiling) models. For example, when dynamically loading and unloading models based on incoming traffic \u2014 e.g., use cases with many of personalized/fine-tuned user models."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Serialization","*")),(0,n.kt)("p",null,"Also faster is serialization due to the introduction of a binary encoding. Interacting with MLIR via external tools depends on the reading and writing of serialized MLIR \u2014 whether for introspection, caching, reproducer generation, etc. Again, we tested serialization performance across various model sizes and saw a significant speed-up, peak performance being SSD bound. More specifically, reading textual data for larger models took ~5 seconds compared to <10ms for reading binary. And writing was > ~5x faster for binary than textual formats."),(0,n.kt)("p",null,"For Modular, this enables us to develop infrastructure and tooling around MLIR that would otherwise be prohibitively slow or expensive. For example, this would allow us to provide an efficient debugger that relies on caching model representations throughout the compilation workflow, improving the underlying compiler performance, and much much more."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Memory Usage","*")),(0,n.kt)("p",null,"Finally, the mmap capabilities of our binary serialization and the separation of IR and data via resources have also significantly reduced memory consumption. Across all model sizes, we are using less memory during the compilation process. Where before we had to allocate the relative size of the weights in a model, we no longer have to allocate at all for the weights, meaning we save significant memory every time we compile."),(0,n.kt)("h4",{id:"7324-\u7b14\u8bb0"},"7.3.2.4 \u7b14\u8bb0"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u5e73\u53f0\uff0c\u6bd4\u5982TensorFlow\u3001PyTorch\u548cCUDA\uff0c\u4ed6\u4eec\u5e76\u4e0d\u662f\u6a21\u5757\u5316\u7684\uff0c\u6240\u4ee5\u5b83\u4eec\u968f\u7740\u6280\u672f\u7684\u4e0d\u65ad\u53d1\u5c55\u79ef\u7d2f\u4e86\u8d8a\u6765\u8d8a\u591a\u7684\u76f8\u4e92\u4f9d\u8d56\u548c\u8026\u5408\uff0c\u7136\u540e\u5728\u4f01\u4e1a\u5b9e\u9645\u90e8\u7f72\u5e94\u7528\u7684\u65f6\u5019\uff0c\u9762\u5bf9\u5f02\u6784\u7684\u786c\u4ef6\u5e73\u53f0\u548c\u52a0\u901f\u5668\uff0c\u6bd4\u5982\u670d\u52a1\u5668\u3001\u79fb\u52a8\u7aef\u3001microcontroller\uff0c\u6216\u8005\u6d4f\u89c8\u5668\u767b\uff0c\u4f01\u4e1a\u5c31\u9700\u8981\u8ddf\u8fd9\u79cd\u8026\u5408\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Modular\u76ee\u6807\u662f\u9762\u5411\u5f02\u6784\u73af\u5883\u7684\u5b9e\u9645\u90e8\u7f72\u95ee\u9898\uff0c\u5728\u8f6f\u4ef6\u7684\u6784\u5efa\u5c42\u9762\uff0c\u901a\u8fc7\u63d0\u4f9b\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\uff0c\u6765\u9002\u5e94\u8fd9\u79cd\u73af\u5883\u53d8\u5316\uff0c\u4f7f\u5f97\u90e8\u7f72\u6210\u672c\u66f4\u4f4e\uff0c\u90e8\u7f72\u5176\u5b9e\u4e5f\u5c31\u662f\u4ea7\u54c1\u5316\u7684\u6838\u5fc3\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5e73\u53f0\u6784\u5efa\u51fa\u7684\u662f\u5355\u4e00\u7684\u5927\u578b\u7cfb\u7edf\uff08monolithic system\uff09\uff0c\u4e00\u65e6\u8131\u79bb\u5b83\u4eec\u521d\u59cb\u7684\u76ee\u6807\uff0c\u5c31\u4e0d\u5bb9\u6613\u6269\u5c55\u548c\u6cdb\u5316\u3002\u8fd9\u79cd\u5c40\u9762\u5bfc\u81f4\u4e86\u786c\u4ef6\u4ea7\u751f\u9488\u5bf9\u8fd9\u4e9b\u5e73\u53f0\u5f00\u53d1\u5404\u79cd\u5de5\u5177\uff0c\u5bfc\u81f4AI\u5de5\u4e1a\u7684\u788e\u7247\u5316\uff0c\u8fd9\u4e9b\u5de5\u5177\u5177\u6709\u5404\u81ea\u7684\u9650\u5236\u548c\u4e00\u4e9b\u6743\u8861\u3002\u8fd9\u6837\u7684\u8bbe\u8ba1\u6a21\u5f0f\u5bfc\u81f4\u8fd9\u4e9b\u521b\u65b0\u5de5\u4f5c\u4e0d\u6613\u4e8e\u4f7f\u7528\uff0c\u4e0d\u6613\u4e8e\u79fb\u690d\uff0c\u4e5f\u4e0d\u6613\u4e8e\u4f38\u7f29\u3002\u8fd9\u6837\u7684\u6280\u672f\u4f7f\u5f97\u53ea\u6709\u5927\u516c\u53f8\u7684\u5168\u6808\u4e13\u5bb6\u624d\u80fd\u591f\u5f88\u597d\u5730\u638c\u63e1\u548c\u4f7f\u7528\u8fd9\u4e9b\u6280\u672f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"AI\u6280\u672f\u5fc5\u987b\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u88ab\u4efb\u4f55\u4eba\u4f7f\u7528\uff0c\u8fd9\u6837\u624d\u80fd\u4f7f\u5f97\u521b\u65b0\u4ea7\u54c1\u53ef\u4ee5\u590d\u6742\u7684\u8f6f\u4ef6\u548c\u786c\u4ef6\u94fe\u4e2d\u89e3\u653e\u51fa\u6765\uff0c\u4ece\u800c\u5de8\u5927\u5730\u63d0\u5347\u6211\u4eec\u7684\u65e5\u5e38\u751f\u6d3b\u3002Imagine a world where ML research ",(0,n.kt)("em",{parentName:"strong"},"truly flows")," rapidly and effectively into production from a large global community. One where these breakthroughs are more accessible to everyone, allowing product innovators to drastically improve our daily lives and be freed from the chains of software and hardware complexity.")),(0,n.kt)("h3",{id:"733-jittor"},"7.3.3 Jittor"),(0,n.kt)("p",null,"The development of deep learning frameworks revolves around improving human productivity and com- putational performance. To achieve good performance from modern processors, developers often need to write assembly language, use special instruction sets, or use specialised languages or libraries, such as shaders for GPU programming, CUDA ","[9]",", and OpenCL ","[10]",". Although these provide excellent perfor- mance, they are difficult to use and debug, and furthermore, programmers need a good understanding of the underlying hardware. Scripting languages such as Python and JavaScript are interpreted, giving immediate feedback, further reducing the difficulty of programming, but this sacrifices performance."),(0,n.kt)("p",null,"To simultaneously improve productivity and performance, various scientific computing libraries and deep learning frameworks have been developed. A widely used optimization method is static compilation with dynamic binding. This optimization method uses C, C ++, CUDA ","[9]",", or other languages to statically compile the operators needed in deep learning, while the user dynamically applies them via scripting languages such as Python and Javascript. Many frameworks adopt this approach, including Numpy ","[11]",", Matlab, Theano ","[2]",", TensorFlow ","[4]",", MXNet ","[12]",", and PyTorch ","[5]","."),(0,n.kt)("p",null,"Dynamic binding allows users to take full advantage of the underlying hardware performance when using a scripting language, but it has a problem: all operations are statically compiled, making optimiza- tions such as operator fusion difficult; this important optimization technique combines multiple operators into one operator, so that intermediate results do not need to be stored. Dynamic binding with a scripting language cannot use this optimization. For example, the user may need to calculate d = ab + c, where a, b, c are tensors. First, the scripting interpreter executes tmp = TensorMul(a,b) and then executes d = TensorAdd(tmp,c). If we could compile the whole expression, rather than applying operators one by one, we could execute d = TensorMulAndAdd(a,b,c) directly without the need for temporary storage. This is significant, as on modern processors, memory access is often much slower than calculation. However, we cannot guess what combinations of operators the user may require, and static compilation of all possible combinations is obviously infeasible. To solve this problem, we may use JIT compilation technology to dynamically compile and optimize the operators that the user needs."),(0,n.kt)("p",null,"Jittor is a completely new design of deep learning framework based on JIT compilation technology. Following the above discussion, Jittor is designed based on the following principles."),(0,n.kt)("p",null,"\u2022 It should be highly customizable yet easy to use. Users should be able to define new operators and models with just a few lines of code."),(0,n.kt)("p",null,"\u2022 It should separate coding from optimization. Users should be able to focus on coding using the front-end interface, while the code is automatically optimized by the back-end. This improves readability of the front-end code, while well-tested, standard optimization code in the back-end ensures robustness."),(0,n.kt)("p",null,"\u2022 Everything should be compiled JIT. This includes the back-end and operations. Users should be able to change the source code at any time."),(0,n.kt)("h4",{id:"7331-the-front-end"},"7.3.3.1 The front-end"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Meta-operators")),(0,n.kt)("p",null,"\u5143\u64cd\u4f5c\u662f\u5728\u4e00\u822c\u7684\u64cd\u4f5c\u4e0a\u6dfb\u52a0\u4e86\u4e00\u4e2a\u7279\u5b9a\u7684\u7c7b\u522b\uff0c\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u63d0\u4f9b\u8bb8\u591a\u5185\u7f6e\u7684\u64cd\u4f5c\u4f7f\u5f00\u53d1\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u901a\u5e38\u505a\u4e00\u4e9b\u76f8\u4f3c\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u64cd\u4f5c\u5efa\u7acb\u66f4\u9ad8\u7684\u62bd\u8c61\u3002\u901a\u5e38\u8fd9\u4e9b\u64cd\u4f5c\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Reindex\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u5efa\u7acbone-to-many\u7684\u6620\u5c04\uff0c\u4f8b\u5982broadcast\u3001pad\u3001slice\uff0cIn short, the reindex operator rearranges the input and stores it in appropriate positions of the output. Index bounds checking is also performed based on the indexing function."),(0,n.kt)("li",{parentName:"ul"},"Reindex-reduce\uff0c\u63d0\u4f9bmany-to-one\u7684\u6620\u5c04\uff0c\u4f8b\u5982sum\u3001product"),(0,n.kt)("li",{parentName:"ul"},"Element-wise\uff0c\u9010\u5143\u7d20\u8ba1\u7b97\uff0c\u4f8b\u5982\u77e9\u9635\u8ba1\u7b97\uff0c\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u5177\u6709\u76f8\u540c\u7684shape")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(2248).Z,width:"1498",height:"998"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fusion of operators")),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u7684\u7c7b\u578b\u4fe1\u606f\uff0cJittor\u53ef\u4ee5\u5c06\u591a\u4e2a\u64cd\u4f5c\u8fdb\u884c\u5408\u5e76\uff0c\u8ba1\u7b97\u51fa\u4e00\u4e2a\u65b0\u7684\u8ba1\u7b97\u516c\u5f0f\uff0c\u4f7f\u5f97\u5f88\u591a\u4e2d\u95f4\u53d8\u91cf\u7684\u5b58\u50a8\u88ab\u7701\u6389\u3002"),(0,n.kt)("p",null,"\u4f46\u5176\u6838\u5fc3\u662f\u901a\u8fc7\u5143\u64cd\u4f5c\u7684\u7c7b\u578b\u548c\u5206\u7c7b\uff0c\u77e5\u9053\u548c\u6bcf\u4e2a\u64cd\u4f5c\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u5c3d\u7ba1\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u6211\u4eec\u5728\u8fdb\u884c\u6570\u5b66\u51fd\u6570\u7684\u5408\u5e76\u65f6\uff0c\u6211\u4eec\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u6bcf\u4e2a\u503c\u662f\u591a\u5c11\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u6839\u636e\u51fd\u6570\u7684\u5f62\u5f0f\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u4e4b\u540e\uff0c\u518d\u5c06\u503c\u5e26\u5165\u6700\u540e\u7684\u51fd\u6570\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Variables")),(0,n.kt)("p",null,"Variables are tensors with the following properties:"),(0,n.kt)("p",null,"\u2022 A shape attribute.\n\u2022 A data type attribute, dtype, e.g., float or int.\n\u2022 A stop grad attribute to prevent gradient back propagation for this variable.\n\u2022 A stop fuse attribute to prevent fusion of operators associated with this variable.\nThe stop grad attribute is usually used in testing or inferencing, while the stop fuse attribute provides control over operator fusion: the user may get better performance by careful use of these attributes. For example, operator fusion will consume register resources in a GPU. With sufficient resources, fusion will always improve performance, but fusing hundreds of operators will exhaust resources and cause performance degradation."),(0,n.kt)("h4",{id:"7332-the-back-end"},"7.3.3.2 The back-end"),(0,n.kt)("p",null,"The back-end is responsible for resource management, process scheduling and compilation optimization. It includes the operator fuser, which decides the fusing strategy used for the meta-operators, external operators, which are customized operators provided by users or third-party libraries, the JIT compiler, the integrated compiler used to optimize meta-operators, and the unified graph execution, which unifies static and dynamic graphs execution."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operator fuser")),(0,n.kt)("p",null,"\u5b9e\u9645\u7684\u8ba1\u7b97\u56fe\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4e3a\u4e86\u66f4\u7b80\u5355\u5730\u5904\u7406\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c06\u8ba1\u7b97\u56fe\u770b\u505a\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u64cd\u4f5c\uff0c\u800c\u8fb9\u8868\u793a\u53d8\u91cf\uff0c\u901a\u8fc7\u5c06\u56fe\u5212\u5206\u6210\u591a\u4e2a\u5b50\u56fe\u7684\u65b9\u6cd5\u6765\u8fdb\u884cfuse\u64cd\u4f5c\u3002\u5176\u5224\u65ad\u7684\u4f9d\u636e\u4f7f\u5f97\u603b\u7684\u4ee3\u4ef7\u6700\u5c0f\uff0c\u5176\u4e2d\u4ee3\u4ef7\u51fd\u6570 \u8868\u793a\u4e3a\u6bcf\u4e2a\u5b50\u56fe\u5bf9\u53d8\u91cf\u7684\u8bfb\u548c\u5199\u7684\u6307\u4ee4\u7684\u603b\u6570\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u7684\u6027\u80fd\u74f6\u9888\u4e3b\u8981\u5728\u4e8e\u5185\u5b58\u64cd\u4f5c\u3002fusion\u901a\u8fc7\u51cf\u5c11\u5185\u5b58\u64cd\u4f5c\u6765\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u51e0\u4e2a\u7279\u5b9a\u7684\u89c4\u5219\u9700\u8981\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"JIT compiler")),(0,n.kt)("p",null,"\u5728fuser\u4e4b\u540e\uff0c\u5c06\u4ee3\u7801\u7f16\u8bd1\u4e3a\u9ad8\u6027\u80fdC++\u4ee3\u7801\u3002\u5e76\u4f1a\u8fdb\u4e00\u6b65\u88abLVVM\u4f18\u5316\u81f3\u4e0d\u540c\u7684\u786c\u4ef6\u5e73\u53f0\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unified graph execution")),(0,n.kt)("p",null,"According to the execution method of computational graphs, deep-learning frameworks can be based either on a static graph execution (also called a define-and-run approach) or a dynamic graph execution (define-by-run, eager execution). Static graph based frameworks are efficient and easy to optimize, and dynamic graph based frameworks are easy-to-use and flexible. Most current frameworks, including TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer, support dynamic graphs."),(0,n.kt)("p",null,"As an alternative, we propose our unified graph execution approach. Unified graph execution provides an imperative style interface which has the same flexibility as a dynamic graph. And it is also as efficient as a static graph."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(6203).Z,width:"1732",height:"1642"})),(0,n.kt)("p",null,"\u9759\u6001\u56fe\u5728\u8fd0\u884c\u4e4b\u524d\u5b9a\u4e49model\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u5bf9\u6570\u636e\u6267\u884c\u64cd\u4f5c\u3002\u5176\u4e2d\u5728\u7f16\u8bd1\u7684\u65f6\u5019\u4f7f\u7528\u4e00\u4e2aplaceholder\u6765\u8868\u793a\u6570\u636e\uff0c\u7f16\u8bd1\u5668\u5bf9\u8ba1\u7b97\u56fe\u8fdb\u884c\u4f18\u5316\u3002\u7531\u4e8e\u53ea\u6709\u8fd0\u884c\u65f6\u624d\u4f1a\u77e5\u9053\u6570\u636e\uff0c\u6240\u4ee5\u50cfprint\u8fd9\u6837\u7684\u65b9\u6cd5\u65e0\u6cd5\u652f\u6301\uff0c\u4e0d\u5229\u4e8e\u8c03\u8bd5\u7b49\u3002\u7279\u70b9\u662f\u6027\u80fd\u9ad8\u3001\u5b9e\u73b0\u7b80\u5355\u3002TensorFlow\u91c7\u7528\u8fd9\u79cd\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"Eager execution executes each operator immediately when it is added to the graph. Because addition of operators is performed on the CPU while they are executed on the GPU, eager execution will lower the latency between CPU and GPU, thus reducing overheads, allowing this approach to achieve competitive performance with the static graph approach. this furthermore allows the user to manipulate intermediate results during model building. This provides users with a great deal of flexibility: for example data can be printed, and the model can be changed according to the intermediate results obtained, which is hard to do with static graphs, and is essential in applications such as generative adversarial networks (GANs) ","[18]"," and reinforcement learning ","[19]",". For example, when training a GAN, the computation graph keeps changing between the discriminator and generator. This flexibility has made dynamic graphs popular, and most frameworks (such as TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer) currently support them."),(0,n.kt)("p",null,"To obtain the benefits of both approaches, without their drawbacks, we use a unified graph execution approach. It provides the full flexibility of a dynamic graph, and the graph can be rebuilt frequently without performance degradation, yet operator fusion is still possible. This is achieved by lazy execution. See Figure 7(c). Operators interpreted by Python are not executed immediately, but delayed until their results are needed. op1 in line 3 is not executed until x2 is printed: x2 is needed at that point, and it depends on x1 which in turn requires op1 to be executed. During printing in line 5, three things happen. First, unified execution will select all those operators in graph G that are required by printing, and split them off into a new sub-graph G\u2032; in Figure 7 this is op1 and op2. The sub-graph G\u2032 is then optimized using the operator fusion process in Subsection 4.1: the operator fuser takes G\u2032 as input, and partitions G\u2032 into multiple sub-graphs G\u2032\u2032, where each sub-graph represents one fused operator. Finally, sub-graph i G\u2032 is executed. In this very simple example, as op1 and op2 are executed together, there is an opportunity to fuse them before doing so. While addition and execution of operators is coupled in the dynamic graph, it is decoupled in the unified graph."),(0,n.kt)("h3",{id:"734-pytorch"},"7.3.4 PyTorch"),(0,n.kt)("p",null,"\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u662f\u4e00\u4e2alibrary\uff0c\u800c\u4e0d\u662f\u4e00\u95e8\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0clibrary\u610f\u5473\u7740\u5b83\u6709\u81ea\u5df1\u7684\u7279\u5b9a\u903b\u8f91\uff0c\u5b83\u53ea\u80fd\u5904\u7406\u5b83\u7684\u903b\u8f91\u6240\u5b9a\u4e49\u7684\u4e8b\u60c5\uff0c\u5c31\u50cf\u5176\u4ed6\u4efb\u4f55library\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u90fd\u662f\u4f7f\u7528\u9759\u6001\u6570\u636e\u6d41\u56fe\uff0c\u5b83\u4eec\u90fd\u662f\u73b0\u7f16\u8bd1\u597d\u6a21\u578b\uff0c\u7136\u540e\u6279\u91cf\u6267\u884c\u6570\u636e\u5904\u7406\uff0c\u8fd9\u867d\u7136\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\uff0c\u4f46\u662f\u4e27\u5931\u4e86\u6613\u7528\u6027\u3001\u7075\u6d3b\u6027\uff0c\u4e5f\u4e0d\u6613\u4e8e\u8c03\u8bd5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"define-by-run approach")),(0,n.kt)("p",null,"Separately, libraries such as NumPy","[12]",", Torch","[6]",", Eigen","[13]"," and Lush","[14]"," made ",(0,n.kt)("strong",{parentName:"p"},"array-based programming")," productive in general purpose languages such as Python, Lisp, C++ and Lua."),(0,n.kt)("p",null,"Easy and efficient ",(0,n.kt)("strong",{parentName:"p"},"interoperability")," is one of the top priorities for PyTorch because it opens the possibility to leverage the rich ecosystem of Python libraries as part of user programs. Hence, PyTorch allows for bidirectional exchange of data with external libraries. "),(0,n.kt)("p",null,"Moreover, many of the critical systems are designed specifically to be ",(0,n.kt)("strong",{parentName:"p"},"extensible"),". For instance, the automatic differentiation system allows users to add support for custom differentiable functions."),(0,n.kt)("p",null,"Most importantly, users are free to replace any component of PyTorch that does not meet the needs or performance requirements of their project. They are all designed to be completely interchangeable, and PyTorch takes great care not to impose any particular solution."),(0,n.kt)("h4",{id:"7341-perform-focused-implementation"},"7.3.4.1 Perform focused implementation"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python Global Interpreter Lock (GIL)")," is a type of process lock which is used by python whenever it deals with processes. Generally, Python only uses only one thread to execute the set of written statements. This means that in python only one thread will be executed at a time. The performance of the single-threaded process and the multi-threaded process will be the same in python and this is because of GIL in python. We can not achieve multithreading in python because we have global interpreter lock which restricts the threads and works as a single thread."),(0,n.kt)("p",null,"Running deep learning algorithms efficiently from a Python interpreter is notoriously challenging: for instance, the global interpreter lock ","[33]"," effectively ensures that only one of any number of concurrent threads is running at any given time. Deep learning frameworks based on the construction of a static data-flow graph sidestep this problem by deferring the evaluation of the computation to a custom interpreter."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"An efficient C++ core")),(0,n.kt)("p",null,"\u6838\u5fc3\u4ee3\u7801 \u90fd\u7531C++\u7f16\u5199\uff0c\u7136\u540ebinding\u5230Python\uff0c\u5305\u62ec\u6570\u636e\u7ed3\u6784\u3001CPU/GPU\u7b97\u5b50\u3001\u5e76\u884c\u8ba1\u7b97\u7b49\uff0c\u8fd9\u6837\u53ef\u4ee5\u7ed5\u5f00GIL\uff0c\u540c\u65f6\u8fd8\u53ef\u4ee5\u5c06PyTorch\u7684\u4ee3\u7801binding\u5230\u5176\u4ed6\u8bed\u8a00\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Separate control and data flow")),(0,n.kt)("p",null,"PyTorch\u4e25\u683c\u5730\u5c06\u63a7\u5236\u548c\u6570\u636e\u6d41\u5206\u5f00\uff0c\u8fd9\u91cc\u7684\u63a7\u5236\u4e3b\u8981\u662f\u6307CPU\u4e0a\u7684\u7a0b\u5e8f\u5206\u652f\u3001\u5faa\u73af\u7b49\u63a7\u5236\u7b97\u5b50\u7684\u903b\u8f91\uff0c\u8fd9\u90e8\u5206\u5728Python\u548c\u90e8\u5206C++\u4e2d\u6267\u884c\uff1b\u800c\u6570\u636e\u6d41\u6307\u7684\u662f\u7528\u4e8e\u5728GPU\u4e2d\u6267\u884c\u7684\u7b97\u5b50\u8c03\u7528\u53ca\u5176\u76f8\u5173\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u7406\u89e3\u5728\u5728GPU\u4e2d\u6267\u884c\u4e00\u6b21\u8ba1\u7b97\u9700\u8981\u7684\u7b97\u5b50\u5373\u6570\u636e\uff0c\u8fd9\u4e9b\u8ba1\u7b97\u6309\u7167\u7ebf\u6027\u7684\u65b9\u5f0f\u8fdb\u884c\u6392\u5e8f\uff0c\u7136\u540e\u88ab\u8f6c\u6362\u4e3aCUDA kernel\u7684\u961f\u5217\uff0c\u6309\u7167FIFO\u7684\u987a\u5e8f\u88ab\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u662f\u5f02\u6b65\u7684\uff0c\u80fd\u591f\u5145\u5206\u4f7fGPU\u7684\u8ba1\u7b97\u8fbe\u5230\u9971\u548c\uff0c\u5373\u4fbf\u662f\u5728Python\u8fd9\u6837\u7684\u89e3\u91ca\u6027\u8bed\u8a00\u4e2d\u4e5f\u53ef\u4ee5\u5f97\u5230\u975e\u5e38\u9ad8\u7684\u6027\u80fd\uff0c\u56e0\u4e3a\u771f\u6b63\u9700\u8981\u8bdd\u65f6\u95f4\u7684\u8ba1\u7b97\u90fd\u662fCUDA\u7f16\u8bd1\u7684\uff0c\u800cPython\u53ea\u8d1f\u8d23\u63a7\u5236\u903b\u8f91\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Custom caching tensor allocator")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f60\u77e5\u4e0d\u77e5\u9053\u4e3b\u6d41\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6pytorch\u662f\u6309\u7167\u7740Haskell typeclass SML module\u7684\u6a21\u6837\u67b6\u6784\u7684\uff0cPytorch\u4e3bmaintainer\u5c31\u662f\u4e00\u4e2aHaskell\u9ad8\u624b\uff0cPytorch\u8584\u7eb1Tensorflow\u5c31\u662fPL\u8584\u7eb1System\u7684\u4e00\u4e2a\u7edd\u4f73\u4f8b\u5b50\uff1f"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u5706\u89d2\u9a91\u58eb\u9b54\u7406\u6c99\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/21410150/answer/2740843224"},"https://www.zhihu.com/question/21410150/answer/2740843224"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"735-oneflow"},"7.3.5 OneFlow"),(0,n.kt)("p",null,"Deep learning frameworks such as TensorFlow and PyTorch provide a productive interface for expressing and training a deep neural network (DNN) model on a single device or using data parallelism. Still, they may not be flexible or efficient enough in training emerging large models on distributed devices, which require more sophisticated parallelism beyond data parallelism. Plugins or wrappers have been developed to strengthen these frameworks for model or pipeline parallelism, but they complicate the usage and implementation of distributed deep learning. Aiming at a simple, neat redesign of distributed deep learning frameworks for various paral- lelism paradigms, we present ",(0,n.kt)("em",{parentName:"p"},"OneFlow"),", a novel distributed training framework based on an ",(0,n.kt)("em",{parentName:"p"},"SBP")," (",(0,n.kt)("em",{parentName:"p"},"split"),", ",(0,n.kt)("em",{parentName:"p"},"broadcast")," and ",(0,n.kt)("em",{parentName:"p"},"partial-value"),") abstraction and the actor model. ",(0,n.kt)("em",{parentName:"p"},"SBP")," enables much easier programming of data parallelism and model parallelism than existing frameworks, and the actor model provides a succinct runtime mechanism to manage the complex dependencies imposed by resource constraints, data movement and computation in dis- tributed deep learning."),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("h3",{id:"736-preda"},"7.3.6 PREDA"),(0,n.kt)("p",null,"\u53ef\u4ee5\u7f16\u8bd1\u5230Web assembly\uff0c\u8ba4\u4e3a\u592a\u5305\u7f57\u4e07\u8c61\uff0c\u533a\u5757\u94fe\u662f\u975e\u5e38\u7b80\u5355\u7684\uff0c\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7279\u6027\u3001\u8d44\u6e90\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u4e0d\u9700\u8981GC\uff0c\u6267\u884c\u5b8c\u6240\u6709\u4e1c\u897f\u5168\u90e8\u5220\u6389\uff0c\u5e0c\u671b\u6709\u66f4\u8f7b\u91cf\u7ea7\u7684\u4e1c\u897f\u3002"),(0,n.kt)("h3",{id:"737-web-assembly"},"7.3.7 Web Assembly"),(0,n.kt)("p",null,"rust\u5728web assembly\u65b9\u9762\u8d70\u5728\u524d\u9762"),(0,n.kt)("p",null,"\u662f\u4e00\u5957\u65b0\u7684\u6307\u4ee4\u96c6\u3002"),(0,n.kt)("p",null,"Rust\u5f00\u53d1\u8005\u53d7\u5230\u7684\u7ea6\u675f\u6bd4\u8f83\u5927\uff0c\u6bd4\u5982\u7c7b\u578b\u7cfb\u7edf\u3002\u79ef\u6781\u62e5\u62b1\u4e00\u4e9b\u5b66\u672f\u7684\u6210\u679c\uff0cRust\u7684\u6210\u679c\u4ee3\u8868\u7f16\u7a0b\u8bed\u8a00\u7406\u8bba\u7684\u6210\u529f\u3002"),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u52a8\u673a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u7279\u5b9a\u7684\u95ee\u9898\uff0cjava\uff0cerlang\uff0crust"),(0,n.kt)("li",{parentName:"ul"},"\u5e73\u53f0\u578b\uff0cC#\uff0cSwift\uff0cGo\uff0c\u751f\u6001\uff0c\u672a\u6765\u6280\u672f\u6f14\u8fdb"),(0,n.kt)("li",{parentName:"ul"},"\u5174\u8da3\u3001\u5b66\u672f\u7814\u7a76\u578b\uff0cScala\uff0cHaskell\u7b49")),(0,n.kt)("h2",{id:"74-others"},"7.4 Others"),(0,n.kt)("h3",{id:"741-\u795e\u7ecf\u7f51\u7edc"},"7.4.1 \u795e\u7ecf\u7f51\u7edc"),(0,n.kt)("h3",{id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"},"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"),(0,n.kt)("h4",{id:"7421-pip"},"7.4.2.1 pip"),(0,n.kt)("h4",{id:"7422-rust"},"7.4.2.2 Rust"),(0,n.kt)("h3",{id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01"},"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01"),(0,n.kt)("p",null,"NFTCN/Bigverse/Opensea "),(0,n.kt)("p",null,"\u5f53\u524d\u7684NFT\u6570\u5b57\u8d44\u4ea7\u5e02\u573a\u4e3b\u8981\u8fd8\u662f\u504f2D"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"NFT\u8d44\u4ea7\u751f\u6210\u672c\u8eab\u5f88\u7b80\u5355\uff0c\u56e0\u6b64\u4e5f\u5bb9\u6613\u590d\u5236\u3001\u5c71\u5be8"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u65b9\u5f0f\u7b80\u5355\uff0c\u5927\u591a\u6570\u751a\u81f3\u90fd\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u56fe\u50cf\u5904\u7406\u53ca\u98ce\u683c\u5316\u5de5\u5177\u6216\u8005\u7b80\u5355\u7684\u7f16\u8f91\uff0c\u800c\u5f00\u53d13D\u7684\u5185\u5bb9\u751f\u6210\u8981\u96be\u5f97\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5e02\u573a\uff0c\u65e0\u5bf9\u5185\u5bb9\u8fdb\u884c\u4ef7\u503c\u53d1\u73b0\u548c\u4ef7\u503c\u589e\u503c\u7684\u65b9\u5f0f\u548c\u7a7a\u95f4\uff0c\u5f53\u524d\u4e3b\u8981\u7684\u673a\u5236\u662f\u4f4e\u4e70\u9ad8\u4e70\uff0c\u7a7a\u7b49\u7740\u589e\u503c\uff0c\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u6240\u8c13\u7684\u4e00\u4e9b\u4f30\u503c\u7684\u673a\u5236\u548c\u670d\u52a1\u6765\u5224\u5b9a\u4ef7\u503c\uff0c\u4f46\u5b9e\u9645\u4e0a\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e00\u4e2a\u827a\u672f\u54c1\u7684\u4ef7\u503c\u6709\u65f6\u662f\u901a\u8fc7\u4eba\u4eec\u7684\u4e86\u89e3\u3001\u5b66\u4e60\u3001\u7ed3\u6784\u3001\u7814\u7a76\u3001\u80cc\u540e\u7684\u6587\u5316\u4ef7\u503c\u548c\u793e\u4f1a\u4ef7\u503c\u7684\u53d1\u6398\u548c\u6f14\u8fdb\u540e\uff0c\u624d\u4f1a\u6162\u6162\u50ac\u751f\u4e00\u4e2a\u4f5c\u54c1\u7684\u4ef7\u503c\uff0c\u800c\u4e00\u4e2a\u5355\u5355\u7684\u5e02\u573a\u5e76\u4e0d\u8db3\u4ee5\u5f62\u6210\u8fd9\u6837\u7684\u673a\u5236\uff0c\u8fd9\u6837\u4f5c\u54c1\u9700\u8981\u4e00\u79cd\u80fd\u591f\u66f4\u751f\u6d3b\u5316\u7684\u5448\u73b0\u673a\u5236\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5217\u8868\uff0c\u5b83\u5e94\u8be5\u80fd\u591f\u8ba9\u66f4\u591a\u7684\u4eba\u5bf9\u5b83\u6709\u66f4\u591a\u7ef4\u5ea6\u3001\u66f4\u591a\u673a\u4f1a\u7684\u518d\u8ba4\u77e5\uff0c\u7ed3\u6784\u3001\u89e3\u8bfb\u3001\u6b23\u8d4f\u3001\u89c2\u5bdf\u3001\u4f53\u9a8c\uff0c\u8fd9\u6837\u624d\u6709\u673a\u4f1a\u53bb\u6316\u6398\u5b83\u7684\u4ef7\u503c\uff0c\u5b83\u7edd\u4e0d\u662f\u4f60\u4e70\u6765\u653e\u5728\u90a3\u91cc\u4ed6\u5c31\u81ea\u5df1\u4f1a\u589e\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u4e00\u4e2a\u5e02\u573a\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u72ec\u7acb\u76843D\u6216\u80053D\u7684\u5f62\u5f0f\u5c55\u73b0\uff0c\u7f3a\u4e4f\u4e0e\u4e4b\u76f8\u5173\u7684\u73af\u5883\uff0c\u7279\u522b\u662f3D\u4f5c\u54c1\u5f80\u5f80\u4e0d\u662f\u5355\u4e2a\u7269\u4f53\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u7684\u8868\u8fbe\u5f80\u5f80\u548c\u73af\u5883\u7b49\u56e0\u7d20\u6709\u5173\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684\u4f5c\u54c1\uff0c\u65e2\u5bb9\u6613\u88ab\u590d\u5236\u548c\u4e0b\u8f7d\uff0c\u53c8\u7f3a\u4e4f\u8868\u8fbe\u80fd\u529b")),(0,n.kt)("p",null,"\u62df\u5a32\u76843D\u521b\u4f5c\u66f4\u96be\uff0c\u5e76\u4e14\u5b83\u7684\u5185\u5bb9\u4e0d\u662f\u5355\u4e2a\u4e3b\u4f53\uff0c\u800c\u662f\u878d\u5165\u5728\u73af\u5883\u4e2d\uff0c\u751a\u81f3\u548c\u5176\u4ed6\u5185\u5bb9\u4e00\u8d77\u5448\u73b0\uff0c\u73af\u5883\u751a\u81f3\u7a0b\u5e8f\u90fd\u662f\u4e00\u90e8\u5206\uff0c\u5728\u8131\u79bb\u8fd9\u4e2a\u73af\u5883\uff0c\u4ed6\u751a\u81f3\u90fd\u65e0\u6cd5\u8fd0\u884c\uff0c\u88ab\u590d\u5236\u7684\u98ce\u9669\u964d\u4f4e\uff0c\u540c\u65f6\u5b83\u5e76\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u5e02\u573a\uff0c\u5b83\u66f4\u591a\u662f\u5904\u4e8e\u4e00\u79cd\u88ab\u6b23\u8d4f\u7684\u793e\u4f1a\u72b6\u6001\uff0c\u5b83\u7684\u4ef7\u503c\u66f4\u5bb9\u6613\u88ab\u89e3\u8bfb\u548c\u7ed3\u6784\uff0c\u878d\u5165\u771f\u6b63\u7684\u4ef7\u503c\u8bc4\u5224\u4f53\u7cfb\u548c\u65b9\u5f0f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"3D\u5185\u5bb9\u4e0d\u9002\u5408\u4ea4\u6613")),(0,n.kt)("p",null,"\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u50cf\u827a\u672f\uff0c\u66f4\u591a\u88ab\u6536\u85cf\uff0c\u4e92\u52a8\u5185\u5bb9\u662f\u52a8\u6001\u66f4\u65b0\u7684\uff0c\u5b83\u4e5f\u4e0e\u7279\u5b9a\u7684\u8fd0\u884c\u65f6\u73af\u5883\u548c\u64cd\u4f5c\u7cfb\u7edf\u9ad8\u5ea6\u8026\u5408\uff0c\u4ed6\u8fd8\u4f1a\u8fdb\u884c\u4e0d\u65ad\u66f4\u65b0\uff0c\u4fee\u590dbug\uff0c\u56e0\u6b64\u4ed6\u66f4\u9002\u5408\u6309\u73a9\u5bb6\u6536\u8d39\uff0c\u6309\u670d\u52a1\u6536\u8d39\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u4e00\u6b21\u6027\u7684\u4ea7\u54c1\u4e70\u5356\uff0c\u5f53\u7136\u4ec5\u4f5c\u4e3a\u7eaf\u8d44\u4ea7\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u865a\u62df\u5730\u5757\uff1a")),(0,n.kt)("p",null,"\u865a\u62df\u5730\u5757\u4e5f\u662f\u6ca1\u6709\u597d\u7684\u4ef7\u503c\u652f\u6491\uff0c\u5e76\u4e0d\u662f\u4efb\u4f55\u4e00\u4e2a\u865a\u62df\u7a7a\u95f4\u5f04\u4e00\u4e2a\u552f\u4e00\u5730\u5757\u5212\u5206\u7684\u673a\u5236\u5c31\u53ef\u4ee5\uff0c\u90a3\u6837\u7684\u8bdd\u5c31\u592a\u7b80\u5355\u4e86\u592a\u5bb9\u6613\u4e86\uff0c\u73b0\u5b9e\u5f88\u591a\u5143\u5b87\u5b99\u7684\u6982\u5ff5\u548c\u4ea7\u54c1\u7ed9\u4eba\u7684\u611f\u89c9\u5c31\u662f\u592a\u7b80\u5355\u592a\u5bb9\u6613\u4e86\uff0c\u8fd9\u662f\u4e0d\u7b26\u5408\u903b\u8f91\u7684\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u6ca1\u6709\u4ef7\u503c\u652f\u6491\uff0c\u6ca1\u6709\u5171\u540c\u7684\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u6bd4\u5982\u5982\u679c\u5728\u8d5b\u5c14\u8fbe\u91cc\u9762\u5efa\u7acb\u865a\u62df\u5730\u5757\uff0c\u90a3\u80af\u5b9a\u6709\u4ef7\u503c\uff0c\u56e0\u4e3a\u4ed6\u6709\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u4f46\u4f60\u968f\u4fbf\u642d\u5efa\u4e00\u4e2a\u5730\u5757\uff0c\u4ed6\u5e76\u4e0d\u5177\u5907\u5171\u540c\u8ba4\u540c\u4ef7\u503c\uff0c\u4ec5\u4ec5\u662f\u50cf\u8d4c\u535a\u4e00\u6837\u5c11\u90e8\u4efd\u4eba\u7684\u7092\u4f5c\uff0c\u5927\u90e8\u5206\u4eba\u5e76\u4e0d\u8ba4\u53ef\u8fd9\u4e9b\u4ef7\u503c"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u600e\u6837\u521b\u5efa\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\u662f\u6700\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u4ef7\u503c\u521b\u9020\u548c\u8ba4\u540c\u662f\u5f88\u96be\u7684\uff0c\u4e0d\u7136\u5c31\u7f16\u7a0b\u865a\u62df\u8d27\u5e01\u4e00\u6837\u4e00\u79cd\u7eaf\u673a\u5236\uff0c\u6ca1\u6709\u4ef7\u503c\u62c5\u4fdd"),(0,n.kt)("p",null,"\u4ef7\u503c\u8ba4\u540c\u9700\u8981\u6240\u6709\u4eba\u80fd\u591f\u53c2\u4e0e\uff0c\u4ee5\u67d0\u79cd\u65b9\u5f0f\uff0c\u624d\u80fd\u5f62\u6210\u4ef7\u503c\u8ba4\u540c\uff0c\u8fd9\u79cd\u53c2\u4e0e\u6216\u8005\u4ef7\u503c\u8ba4\u540c\u5e94\u8be5\u662f\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u9700\u8981\u4e00\u79cd\u5b9e\u9645\u7684\u53c2\u4e0e\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u50cf\u7092\u623f\u4e00\u6837\uff0c\u5c31\u662f\u8bf4\u5b83\u9700\u8981\u5177\u5907\u771f\u6b63\u7684\u4ef7\u503c\uff0c\u4e0d\u7ba1\u662f\u6e38\u620f\u5e26\u6765\u7cbe\u795e\u4e0a\u7684\uff0c\u6216\u8005\u5b83\u4f20\u8fbe\u4e86\u67d0\u79cd\u77e5\u8bc6\u6216\u8005\u6587\u5316\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u6570\u5b57\u5185\u5bb9\u5f97\u8d27\u5e01\u5316\u8fd8\u5b58\u5728\u4e00\u4e2a\u91cd\u8981\u95ee\u9898\uff0c\u5b83\u9700\u8981\u4e00\u79cd\u62c5\u4fdd\u673a\u5236\uff0c\u4e0d\u50cf\u5b9e\u7269\u4e00\u6837\u7269\u6743\u662f\u552f\u4e00\u7684\u660e\u786e\u7684\uff0c\u5f53\u7136\u8fd9\u4e5f\u662f\u6709\u56fd\u5bb6\u673a\u6784\u62c5\u4fdd\u8d1f\u8d23\u7269\u6743\u7ba1\u7406\uff0c\u865a\u62df\u8d27\u5e01\u6216\u8005\u533a\u5757\u94fe\u867d\u7136\u5728\u673a\u5236\u4e0a\u80fd\u64cd\u4f5c\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u662f\u8fd9\u4e2a\u6570\u5b57\u5185\u5bb9\u672c\u8eab\u662f\u53ef\u4ee5\u590d\u5236\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4f5c\u8005\u53ef\u4ee5\u5728\u4e0d\u540c\u7684\u6570\u5b57\u5e73\u53f0\u53d1\u5e03\uff0c\u7406\u8bba\u4e0a\uff0c\u53ea\u6709\u5e73\u53f0\u81ea\u8eab\u53ef\u4ee5\u4fdd\u8bc1\u7269\u6743\u552f\u4e00\uff0c\u5e73\u53f0\u5fc5\u987b\u4e0e\u4f5c\u8005\u8fbe\u6210\u5b9e\u7269\u6216\u8005\u539f\u59cb\u4f5c\u54c1\u7684\u7269\u6743\u534f\u8bae\uff0c\u6bd4\u5982\u4f5c\u8005\u4e0d\u80fd\u5728\u5176\u4ed6\u5e73\u53f0\u518d\u4f7f\u7528\u6b21\u4f5c\u54c1\uff0c\u6216\u8005\u4f5c\u8005\u9500\u6bc1\u539f\u59cb\u7535\u5b50\u7248\uff0c\u8fd9\u6837\u4fdd\u8bc1\u8be5\u5e73\u53f0\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u8fd9\u4e9b\u673a\u5236\u90fd\u4f9d\u8d56\u4e8e\u771f\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u4fdd\u969c\uff0c\u5b9e\u9645\u4e0a\u865a\u62df\u8d27\u5e01\u53ea\u8981\u662f\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054\u7684\uff0c\u5b83\u7684\u7269\u6743\u90fd\u9700\u8981\u73b0\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u7269\u6743\u4fdd\u969c"),(0,n.kt)("p",null,"\u9664\u975e\u662f\u5b8c\u5168\u865a\u62df\u8d27\u5e01\uff0c\u4ed6\u4e0d\u9700\u8981\u6620\u5c04\u5b9e\u7269\uff0c\u8d27\u5e01\u7684\u53d1\u884c\u672c\u8eab\u5c31\u662f\u57fa\u4e8e\u533a\u5757\u94fe\u5927\u578b\u7684\uff0c\u6240\u4ee5\u5b83\u672c\u8eab\u5c31\u6709\u7269\u6743\u4fdd\u8bc1\u4e86\uff0c\u4f46\u662f\u8fd9\u79cd\u4e5f\u662f\u6ca1\u6709\u6cd5\u5f8b\u4fdd\u969c"),(0,n.kt)("p",null,"\u62df\u5a32\u7684\u6570\u5b57\u5185\u5bb9\u662f\u7531\u7528\u6237\u521b\u5efa\u7684\uff0c\u6216\u8005\u5927\u90e8\u5206\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u5bfc\u5165\u4e00\u90e8\u5206\u5df2\u6709\u8d44\u6e90\uff0c\u8fd9\u90e8\u5206\u65e0\u6cd5\u63a7\u5236\u7269\u6743\u7684\u552f\u4e00\u6027\uff0c\u9700\u8981\u501f\u52a9\u73b0\u5b9e\u4e16\u754c\u7684\u7248\u6743\u673a\u5236\uff0c\u4f46\u662f\u5b83\u7684\u5927\u90e8\u5206\u5185\u5bb9\u662f\u7528\u6237\u57fa\u4e8e\u62df\u5a32\u5e73\u53f0\u521b\u5efa\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u5b83\u7684\u90a3\u4e2a\u5185\u5bb9\u5728\u521b\u5efa\u65f6\u5df2\u7ecf\u57fa\u4e8e\u533a\u5757\u94fe\u6280\u672f\u5f97\u5230\u7269\u6743\u4fdd\u969c"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\uff0c\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u7247\u6216\u8005\u89c6\u9891\uff0c\u5176\u5f88\u5bb9\u6613\u88ab\u590d\u5236\u4fdd\u5b58\uff0c\u4e5f\u4e0d\u50cf\u4f20\u7edf\u76843D\u5185\u5bb9\u4e00\u6837\u5bb9\u6613\u88ab\u4e0b\u8f7d\uff0c\u5b83\u672c\u8eab\u662f\u4e00\u79cd\u79c1\u6709\u683c\u5f0f\uff0c\u4ed6\u5fc5\u987b\u501f\u52a9\u5e73\u53f0\u624d\u80fd\u89e3\u6790\uff0c\u5b83\u7684\u5185\u5bb9\u4e5f\u5168\u90e8\u5b58\u50a8\u5728\u4e91\u7aef\uff0c\u8fd9\u4f7f\u5f97\u5b83\u7684\u7269\u6743\u80fd\u591f\u8fdb\u4e00\u6b65\u88ab\u4fdd\u969c\uff1a\u4f60\u53ea\u80fd\u5728\u8fd9\u4e2a\u5e73\u53f0\u624d\u80fd\u4f53\u9a8c\u8fd9\u4e2a\u4f5c\u54c1\uff0c\u4f46\u5728\u8fd9\u4e2a\u5e73\u53f0\u5b83\u662f\u552f\u4e00\u7684\uff0c\u4f60\u4e0d\u80fd\u5c06\u5b83\u590d\u5236\u5230\u5176\u4ed6\u5730\u65b9"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u62df\u5a32\u672c\u8eab\u8fd8\u6709\u4e00\u5957\u4ef7\u503c\u8ba4\u540c\u7684\u673a\u5236\uff0c\u5c31\u50cf\u6e38\u620f\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u8981\u53d1\u6325\u4f60\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\uff0c\u4ed8\u51fa\u65f6\u95f4\u548c\u601d\u8003\u624d\u80fd\u521b\u4f5c\u51fa\u597d\u7684\u4e1c\u897f\uff0c\u800c\u5176\u4ed6\u7528\u6237\u5728\u4f53\u9a8c\u8fc7\u7a0b\u4e2d\u4f53\u9a8c\u5230\u4e86\u4f60\u7684\u6587\u5316\u827a\u672f\u8868\u8fbe\uff0c\u4f60\u7684\u4ef7\u503c\u5e76\u88ab\u8ba4\u540c\uff0c\u7528\u6237\u6709\u4e00\u4e2a\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5546\u54c1\u4e70\u5356\uff0c\u8fd9\u7c7b\u4f3c\u4e8e\u5546\u54c1\u9700\u8981\u4f7f\u7528\u624d\u6709\u4ef7\u503c\uff0c\u8fd9\u4e2a\u4f7f\u7528\u5c31\u662f\u5bf9\u6570\u5b57\u5185\u5bb9\u6587\u5316\u827a\u672f\u8868\u8fbe\u7684\u4f53\u9a8c\uff0c\u4f7f\u7528+\u4ea4\u6613 \u624d\u80fd\u5f62\u6210\u5faa\u73af\uff1a\u4f7f\u7528\u53d1\u73b0\u4ef7\u503c\uff0c\u4fc3\u8fdb\u4ea4\u6613\uff0c\u8fdb\u800c\u4fc3\u8fdb\u4f7f\u7528\u4ef7\u503c\u7684\u521b\u9020"),(0,n.kt)("li",{parentName:"ul"},"\u9759\u60012D\u827a\u672f\u54c1\u5176\u5b9e\u8fd8\u662f\u7eb8\u8d28\u66f4\u73cd\u8d35\uff0c\u65e0\u8bba\u662f\u521b\u4f5c\u7684\u96be\u5ea6\u3001\u4eea\u5f0f\u611f\uff0c\u8fd8\u662f\u4f53\u9a8c\u6b23\u8d4f\u65f6\u7684\u4e13\u6ce8\u548c\u4eea\u5f0f\u611f\uff0c\u5728\u6570\u5b57\u5c4f\u5e55\u4e0a\u770b2D\u827a\u672f\u53d7\u5f88\u591a\u56e0\u7d20\u5f71\u54cd\uff0c\u6bd4\u5982\u53d7\u5c4f\u5e55\u5206\u8fa8\u7387\u3001\u8272\u5f69\u3001\u5c4f\u5e55\u5c3a\u5bf8\u7b49\u56e0\u7d20\u5f71\u54cd\uff0c\u4f463D\u6570\u5b57\u5185\u5bb9\u5219\u5929\u751f\u662f\u865a\u62df\u7684")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u6280\u672f\u5bfc\u81f4\u7684\u601d\u7ef4\u6709\u65f6\u5019\u5f88\u53d7\u9650\uff0c\u5927\u5bb6\u4f1a\u503e\u5411\u4e8e\u653e\u5927\u8fd9\u9879\u6280\u672f\u7684\u529f\u7528\uff0c\u8ba4\u4e3a\u4e00\u5207\u7686\u53ef\u4ee5\u4f7f\u7528\u533a\u5757\u94fe\uff0c\u56e0\u4e3a\u6240\u6709\u4e8b\u52a1\u672c\u8d28\u4e0a\u90fd\u6d89\u53ca\u7269\u6743\u548c\u4ea4\u6613\uff0c\u4f46\u4ed6\u6709\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6709\u65f6\u5019\u4f1a\u8ba9\u4e00\u4e9b\u4e8b\u60c5\u66f4\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u66f4\u5927\u7684\u95ee\u9898\u4ed6\u53ef\u80fd\u4f1a\u9650\u5236\u6211\u4eec\u7684\u60f3\u8c61\u529b\uff0c\u4f8b\u5982\u6e38\u620f\u7684\u5206\u53d1\u8ddf\u4f20\u7edf\u7684\u4ea4\u6613\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4f20\u7edf\u7684\u4ea4\u6613\u7269\u54c1\u662f\u72ec\u7acb\u7684\uff0c\u6216\u8005\u4e0d\u53ef\u5206\u5272\u7684\uff0c\u4e00\u6b21\u4ea4\u6613\u5bf9\u5e94\u4e00\u4ef6\u5177\u4f53\u7684\u7269\u54c1\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u662f\u6709\u6301\u7eed\u66f4\u65b0\u7684\uff0c\u5f53\u6e38\u620f\u8fd9\u79cd\u6570\u5b57\u8d44\u4ea7\u53d1\u751f\u53d8\u66f4\uff0c\u4ed6\u7684Token\u4f1a\u53d8\u66f4\u5417\uff0c\u53d8\u66f4\u4e86\u539f\u6765\u7684\u8d2d\u4e70\u5c31\u5931\u6548\u4e86\uff0c\u4f46\u4e0d\u4e0d\u53d8\u66f4\u600e\u6837\u8ba9\u8ba2\u9605\u7684\u7528\u6237\u4eab\u53d7\u5230\u65b0\u589e\u670d\u52a1\uff0c\u6240\u4ee5\u5f53\u524d\u7684NFT\u5e02\u573a\u4e3b\u8981\u805a\u7126\u4e8e\u56fe\u7247\u8fd9\u79cd\u901a\u5e38\u4e0d\u4f1a\u4fee\u6539\u7684\u9759\u6001\u5185\u5bb9\uff0c\u5b83\u672c\u8eab\u4e0d\u662f\u7a0b\u5e8f\uff0c\u800c3D\u6570\u5b57\u5185\u5bb9\u4f1a\u9762\u4e34\u66f4\u590d\u6742\u7684\u53d8\u66f4"),(0,n.kt)("li",{parentName:"ul"},"\u518d\u6bd4\u5982\uff0c\u4f20\u7edf\u7684\u4e66\u753b\u662f\u6536\u85cf\u7684\u6982\u5ff5\u4e3a\u4e3b\uff0c\u5b83\u672c\u8eab\u662f\u7531\u5b9e\u4f53\u552f\u4e00\u6027\u6f14\u53d8\u51fa\u6765\u7684\u65b9\u5f0f\uff0c\u901a\u5e38\u4e00\u4e2a\u753b\u5bb6\u4e0d\u4f1a\u6279\u91cf\u753b\u540c\u4e00\u526f\u753b\uff0c\u4f46\u4ea4\u4e92\u7a0b\u5e8f\u5929\u751f\u5c31\u662f\u6570\u5b57\u51fa\u751f\uff0c\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4e3a\u4e3b\uff0c\u4ed6\u8981\u9762\u5bf9\u7684\u662f\u73a9\u5bb6\u6570\u91cf\u7684\u6982\u5ff5\u548c\u6a21\u5f0f\uff0c\u5355\u5e45\u753b\u7684\u6536\u85cf\u4ef7\u683c\u5f88\u9ad8\uff0c\u666e\u901a\u4eba\u6839\u672c\u627f\u53d7\u4e0d\u8d77\uff1b\u800c\u6e38\u620f\u9762\u5411\u7fa4\u4f53\uff0c\u6240\u4ee5\u5355\u4e2a\u590d\u5236\u7684\u6210\u672c\u5f88\u4f4e\uff0c\u8fd9\u624d\u5bfc\u81f4\u666e\u901a\u4eba\u53ef\u4ee5\u53c2\u4e0e\uff0c\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u524d\u8005\u5bb9\u6613\u5bfc\u81f4\u53cd\u590d\u62cd\u5356\uff0c\u591a\u6b21\u4ea4\u6613\uff0c\u800c\u540e\u8005\u51e0\u4e4e\u53ea\u6709\u4e00\u6b21\u6027\u4ea4\u6613\uff0c\u9632\u7be1\u6539\u7684\u9700\u6c42\u5f88\u4f4e\uff0c\u6211\u4eec\u552f\u4e00\u9700\u8981\u4fdd\u8bc1\u7684\u662f\u7248\u6743\u800c\u975e\u7269\u6743\uff0c\u800c\u533a\u5757\u94fe\u6070\u597d\u4e0d\u64c5\u957f\u7248\u6743"),(0,n.kt)("li",{parentName:"ul"},"3D\u9632\u7be1\u6539\u7684\u9700\u6c42\u8fdc\u4f4e\u4e8e\u56fe\u50cf\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u7be1\u6539\u4e0d\u4ec5\u4ec5\u610f\u5473\u7740\u6570\u5b57\u5b58\u50a8\u7684\u5185\u5bb9\u53d8\u66f4\uff0c\u800c\u5f88\u6709\u53ef\u80fd\u7be1\u6539\u7684\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u7684\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u53ca\u5176\u4ed6\u4e00\u4e9b\u4f9d\u8d56\u5982\u8054\u7f51\u7b49\u9ad8\u5ea6\u76f8\u5173\uff0c\u5bf9\u4e8e\u6e38\u620f\u7a0b\u5e8f\u4eba\u4eec\u4e00\u822c\u7be1\u6539\u7684\u662f\u5916\u6302\u800c\u975e\u7a0b\u5e8f\u672c\u8eab\uff0c\u6211\u4eec\u4e3b\u8981\u4fdd\u62a4\u7684\u662f\u539f\u59cb\u7684\u7248\u6743\uff0c\u800c\u975e\u4ea4\u6613\u8fc7\u7a0b\u4e2d\u7684\u7269\u6743")),(0,n.kt)("h3",{id:"744-rust"},"7.4.4 Rust"),(0,n.kt)("p",null,"\u6e38\u620f\u548c\u56fe\u5f62\u7cfb\u7edf\u76f8\u5bf9\u4f20\u7edf\u5e94\u7528\u67b6\u6784\u5e76\u884c\u8ba1\u7b97\u7684\u884c\u4e3a\u66f4\u591a\uff0c\u8981\u91cd\u70b9\u5173\u6ce8\u8bed\u8a00\u5bf9\u5e76\u884c\u8ba1\u7b97\u7684\u652f\u6301"),(0,n.kt)("p",null,"embark.dev"),(0,n.kt)("p",null,"Rust-gpu"),(0,n.kt)("p",null,"Kajiya "),(0,n.kt)("p",null,"rafx "),(0,n.kt)("p",null,"gamedev.rs"),(0,n.kt)("h3",{id:"745-unity-editorxr-and-scenefusion"},"7.4.5 Unity EditorXR and SceneFusion"),(0,n.kt)("h3",{id:"746-bevyengine"},"7.4.6 BEVYengine"),(0,n.kt)("p",null,"\u57fa\u4e8e\u6570\u636e\u9a71\u52a8\u7684rust\u6e38\u620f\u5f15\u64ce"),(0,n.kt)("h3",{id:"748-magicavoxel"},"7.4.8 magicavoxel"),(0,n.kt)("p",null,"\u611f\u89c9\u4ee5Voxel \u4e3a\u57fa\u7840\u7684\u521b\u5efa\uff0c\u4e00\u662f\u6bd4\u7cbe\u7ec6\u7684\u4e09\u89d2\u5f62\u4fbf\u4e8e\u751f\u6210\uff0c\u800c\u4e14\u7b26\u5408\u7269\u7406\u521b\u5efa\u7684\u65b9\u5f0f"),(0,n.kt)("h3",{id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"},"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"),(0,n.kt)("p",null,"Unity unreal engine blender"),(0,n.kt)("h3",{id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b"},"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b"),(0,n.kt)("h3",{id:"7411-meta-builder-bot"},"7.4.11 Meta Builder bot"),(0,n.kt)("p",null,"\u8bed\u8a00\u6216\u6587\u672c\u81f3\u5c11\u751f\u6210\u8981\u7d20\uff0c\u5982\u679c\u6709\u8bef\u5dee\uff0c\u81f3\u5c11\u5927\u90e8\u5206\u8981\u7d20\uff0c\u7136\u540e\u7528\u6237\u4ea4\u4e92\u4e13\u6ce8\u4e8e\u7cbe\u8c03\uff0c\u6216\u8005\u628a\u8981\u7d20\u548c\u4ea4\u4e92\u5206\u5f00\uff0c\u5728\u7528\u6237\u786e\u5b9a\u8981\u7d20\u4e4b\u540e\uff0c\u76f8\u5f53\u4e8e\u6709\u4e86\u7c7b\u578b\u5148\u9a8c\uff0c\u518d\u786e\u5b9a\u4ea4\u4e92\u6709\u66f4\u591a\u80cc\u666f"),(0,n.kt)("p",null,"\u5728C\u7aef\uff0c\u4ece\u6570\u636e\u5e93\u9009\u62e9\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u7c7b\u578b\u5212\u5206\uff0c\u5e76\u5177\u6709\u4e00\u5b9a\u7684\u65e0\u6cd5\u5bf9\u5185\u5bb9\u8fdb\u884c\u7ec4\u7ec7\u53d8\u5f97\u975e\u5e38\u91cd\u8981\uff0c\u5927\u5927\u51cf\u5c11\u4ea4\u4e92\u6210\u672c\uff0c\u800c\u5c06\u4ea4\u4e92\u96c6\u4e2d\u4e8e\u5f53\u524d\u573a\u666f\u53ef\u4ee5\u770b\u5230\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u7684\u6309\u94ae\u90fd\u8f6c\u6210\u8bed\u97f3\u6216\u8005\u4e00\u4e9b\u5feb\u6377\u6587\u5b57\uff0c\u77ed\u8bed\uff0c\u5173\u952e\u5b57"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ"},"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ")),(0,n.kt)("h3",{id:"7412-houdini-node-based-workflow"},"7.4.12 Houdini: Node-based Workflow"),(0,n.kt)("p",null,"3\u3001Houdini "),(0,n.kt)("p",null,"\u8981\u50cfHoudini \u4e00\u6837\u628a\u590d\u6742\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u65b9\u6cd5\u6784\u9020\uff0c\u6d41\u7a0b\u5b9a\u4e49\uff0c\u53c2\u6570\u8d4b\u503c\uff0c\u7b49\u5168\u90e8\u53bb\u6389\uff0c\u7528\u6237\u53ea\u4e13\u5fc3\u5199\u903b\u8f91\uff0c\u6700\u540e\u6574\u4e2a\u7f16\u7a0b\u662f\u50cfHoudini \u90a3\u6837\u5e72\u51c0\u6574\u6d01\u7684\uff0c\u6ca1\u6709\u4ee3\u7801\u75d5\u8ff9\u7684"),(0,n.kt)("p",null,"Houdini\u7684node\u6ca1\u6709\u53c2\u6570\uff0c\u53ea\u6709\u8282\u70b9\uff0c\u4ed6\u628aoperation\u5206\u6210\u4e00\u4e9b\u7c7b\u578b\uff0c\u90a3\u4e2a\u7c7b\u578b\u4e4b\u95f4\u7684\u53c2\u6570\u4f20\u9012\u662f\u56fa\u5b9a\u7684"),(0,n.kt)("p",null,"Houdini\u7684Node network \u662f\u4e00\u79cd\u8fd0\u884c\u8fc7\u7a0b\uff0c\u4ed6\u65e2\u53ef\u4ee5\u5145\u5f53\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u914d\u7f6e\uff0c\u5982\u679c\u6240\u6709\u8282\u70b9\u6ca1\u6709\u5ef6\u8fdf\uff0c\u77ac\u65f6\u6267\u884c\uff0c\u4ed6\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9759\u6001\u8bbe\u7f6e\uff0c\u5982\u679c\u8fd9\u4e9b\u8282\u70b9\u7684\u6307\u4ee4\u80fd\u5728\u4e00\u5e27\u5185\u6267\u884c\u5b8c\uff0c\u8fd9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4e00\u4e2ausd\u6216\u8005\u5176\u4ed6\u5408\u9002\u6587\u4ef6\u7684\u52a0\u8f7d\u8fc7\u7a0b\uff0c\u76f8\u5f53\u4e8e\u5728\u52a0\u8f7d\u8fc7\u7a0b\u7684\u987a\u5e8f\u6267\u884c\u4e2d\uff0c\u540e\u7eed\u7684\u52a0\u8f7d\u53ef\u80fd\u4f1a\u4fee\u6539\u524d\u9762\u7684\u5c5e\u6027\uff0c\u4f46\u4e0d\u8db3\u7684\u65b9\u9762\u662f\u52a0\u8f7d\u7684\u8fc7\u7a0b\u65e0\u6cd5\u5e76\u884c\u5316\uff0c\u56e0\u4e3aNode network \u662f\u4e00\u4e2a\u987a\u5e8f\u6307\u4ee4"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u52a8\u753b\uff0c\u5982\u679c\u67d0\u4e9b\u8282\u70b9\u7684\u6267\u884c\u9700\u8981\u65f6\u95f4\uff0c\u4ed6\u5c31\u5f62\u6210\u52a8\u753b")),(0,n.kt)("p",null,"Houdini\u7684\u6d41\u7a0b\u548c\u6570\u636e\u9a71\u52a8\u7684\u6d41\u7a0b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4e00\u4e2a\u662f\u6267\u884c\u8ba1\u7b97\u7684\u8fc7\u7a0b\uff0c\u4e00\u4e2a\u662f\u5355\u7eaf\u7684\u7ec4\u5408\u914d\u7f6e\uff0c\u8fd9\u662f\u56e0\u4e3aHoudini \u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a\u5185\u5bb9\u751f\u6210\u7684\u8fc7\u7a0b\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u7f16\u8f91\u6001\uff0c\u800cECS\u662f\u8fd0\u884c\u6001"),(0,n.kt)("p",null,"\u5185\u5bb9\u751f\u6210\u8fc7\u7a0b\u4e2d\u600e\u4e48\u5bf9\u4e00\u4e2a\u57fa\u7840\u6a21\u578b\u8fdb\u884c\u53d8\u5f62\uff0c\u5176\u8f93\u5165\u8f93\u51fa\u53c2\u6570\u662f\u786e\u5b9a\u6216\u8005\u53ef\u4ee5\u63a8\u5bfc\u7684\uff0c\u4f46\u662f\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u5219\u6bd4\u8f83\u590d\u6742\uff0c\u6ca1\u6709\u89c4\u5219\uff0c\u9700\u8981\u5b9a\u4e49\u534f\u8bae"),(0,n.kt)("p",null,"Directable results "),(0,n.kt)("p",null,"\u7531\u4e8e\u6240\u6709\u8bbe\u8ba1\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u6700\u540e\u4e00\u523b\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4f20\u7edf\u7684\u786c\u7f16\u7801\uff0c\u5b83\u5177\u6709\u8bb8\u591a\u4e2d\u95f4\u5f62\u6001\uff0c\u6ca1\u6709\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\u6d41\u7a0b\u548c\u7ed3\u6784\uff0c\u6240\u4ee5\u5f88\u5bb9\u6613\u4e2d\u95f4\u67d0\u4e9b\u6d41\u7a0b\u6216\u8005\u903b\u8f91\u53d8\u4e86\uff0c\u5176\u540e\u9762\u7684\u6d41\u7a0b\u90fd\u53d7\u5230\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u751a\u81f3\u9700\u8981\u91cd\u65b0\u4fee\u6539\u540e\u9762\u7684\u4ee3\u7801\u548c\u903b\u8f91\uff0c\u8fed\u4ee3\u6210\u672c\u9ad8"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u6709\u70b9\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u53ef\u4ee5\u5b9e\u73b0\u8fd9\u4e2a\u76ee\u6807"),(0,n.kt)("p",null,"\u5176\u5b9e\u5c31\u6709\u70b9\u50cf\u7f16\u8bd1\u6d41\u7a0b\u6216\u8005\u6e32\u67d3\u7ba1\u7ebf\u4e00\u6837\uff0c\u4ed6\u5b9a\u4e49\u597d\u4e86\u6574\u4e2a\u7ba1\u7ebf\u4e4b\u95f4\u7684\u53c2\u6570\u548c\u63a5\u53e3\uff0c\u90a3\u4e48\u4e2d\u95f4\u7684\u8c03\u6574\u5c31\u4e0d\u4f1a\u5f71\u54cd\u90a3\u4e48\u5927\uff0c\u4f60\u53ea\u9700\u8981\u9075\u5faa\u63a5\u53e3\u89c4\u8303\u5c31\u884c"),(0,n.kt)("p",null,"Tool building "),(0,n.kt)("p",null,"\u57fa\u4e8enode-based\u7684\u5de5\u4f5c\u6d41\u7a0b\u53ef\u4ee5\u4f7f\u5f97\u81ea\u5b9a\u4e49node\u53d8\u5f97\u53ef\u80fd\uff0c\u53ea\u8981\u9075\u7167node\u4e4b\u95f4\u7684\u534f\u8bae\uff0c\u7136\u540enode\u5c31\u53ef\u4ee5\u5171\u4eab\uff0c\u5373\uff1a"),(0,n.kt)("p",null,"Houdini Digital Assets "),(0,n.kt)("p",null,"\u4e0a\u4e0b\u6e38\u7684\u53c2\u6570\u5f62\u5f0f\u57fa\u672c\u662f\u8fd8\u662fHoudini \u672c\u8eab\u7684node\u5b9a\u4e49\u7684\uff0c\u5f00\u53d1\u8005\u53ea\u662f\u628a\u4e2d\u95f4\u67d0\u4e9b\u5904\u7406\u8fc7\u7a0b\u4fdd\u5b58\u4e3a\u4e00\u4e2a.hda \u8d44\u4ea7\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u5b9a\u4e49\u53c2\u6570\uff0c\u521b\u4f5c\u505a\u7684\u53ea\u662f\u628a\u4e00\u4e2a\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u590d\u7528\uff0c\u8fd9\u4e9b\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u8fd8\u662f\u7528Houdini \u57fa\u672c\u7684\u64cd\u4f5c\uff0cHoudini\u6709\u6d77\u91cf\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u521b\u4f5c\u8005\u51e0\u4e4e\u5f88\u5c11\u4f1a\u7f16\u5199\u81ea\u5b9a\u4e49\u51fd\u6570\u4ee3\u7801\uff0c\u6216\u8005\u53ea\u9700\u8981\u7b80\u5355\u5f88\u5c0f\u7247\u6bb5\u7684\u4ee3\u7801"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u8981\u60f3\u505a\u5230\u8fd9\u4e00\u5c42\uff0c\u8981\u5bf9\u6e38\u620f\u903b\u8f91\u811a\u672c\u8fdb\u884c\u6df1\u5165\u5206\u7c7b\uff0c\u5e76\u628a\u8fd9\u4e9b\u6a21\u5f0f\u672f\u8bed\u5316\uff0c\u8fd9\u4e9b\u5206\u7c7b\u8981\u80fd\u591f\u5bf9\u6bd4\uff0c\u6240\u6709\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u5408\uff0c\u4ee5\u53ca\u4fdd\u8bc1\u76f8\u5e94\u7684\u7075\u6d3b\u6027\uff0c\u4f7f\u5f97\u81ea\u5b9a\u4e49\u7684\u6210\u672c\u6700\u4f4e\uff0c\u81ea\u5b9a\u4e49\u7684\u6a21\u5f0f\u66f4\u7b80\u5355"),(0,n.kt)("p",null,"A new way of thinking "),(0,n.kt)("p",null,"\u7531\u4e8e\u5168\u65b0\u7684\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5b9a\u4e49\u7684\u80fd\u529b\u800c\u4e0d\u662f\u9488\u5bf9\u5177\u4f53\u95ee\u9898\u91cd\u590d\u89e3\u51b3\uff0c\u5c31\u4f1a\u4ea7\u751f\u4e00\u79cd\u65b0\u7684\u521b\u5efa\u6570\u5b57\u5185\u5bb9\u7684\u601d\u7ef4"),(0,n.kt)("p",null,"\u7f16\u7a0b\u90fd\u662f\u5728node\u4e4b\u95f4\u7f16\u7a0b\uff0c\u56fa\u5b9a\u7684\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,"\u8ddfHoudini \u7684\u4e3b\u8981\u533a\u522b\u662f\u4ed6\u662f\u79bb\u7ebf\u7684\uff0c\u7f16\u8f91\u6001\u7684\uff0c\u4e0d\u9700\u8981\u5185\u5bb9\u5ba1\u67e5\uff0c\u517c\u5bb9\u6027\u68c0\u67e5\uff0c\u5b89\u5168\u6027\u7b49\uff0c\u800c\u62df\u5a32\u662f\u8fd0\u884c\u65f6\u7684\uff0c\u5305\u62ec\u5305\u7684\u5927\u5c0f\uff0c\u4eff\u771f\u6a21\u62df\uff0c\u5b89\u5168\uff0c\u517c\u5bb9\u6027\u7b49\u95ee\u9898\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\u53ef\u4ee5\u901a\u8fc7\u7f16\u8bd1\u5668\u8981\u505a\u4e00\u4e9b\u5206\u6790\uff0c\u53e6\u4e00\u65b9\u9762\u7528\u6237\u9700\u8981\u5728\u81ea\u5df1\u7684\u73af\u5883\u8dd1\u8d77\u6765"),(0,n.kt)("h3",{id:"7413-realityos"},"7.4.13 realityOS"),(0,n.kt)("h3",{id:"7414-openxr"},"7.4.14 OpenXR"),(0,n.kt)("p",null,"\u82f9\u679c\u9000\u51fa\u4e86OpenXR\u610f\u5473\u7740\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u82f9\u679c\u4f1a\u5bf9XR\u7684\u7406\u89e3\u6709\u8f83\u5927\u7684\u5dee\u5f02\uff0c\u82f9\u679c\u4e5f\u662f\u5e0c\u671b\u52a0\u5f3a\u8fd9\u79cd\u5dee\u5f02\u6765\u589e\u5f3a\u81ea\u5df1\u7684\u7ade\u4e89\u529b\u548c\u5dee\u5f02\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u6807\u51c6\u8fd8\u5b58\u5728\u5f88\u591a\u53d8\u6570\uff0c\u6807\u51c6\u672c\u8eab\u53ef\u80fd\u9762\u4e34\u8f83\u5927\u53d8\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u5f00\u53d1\u63a5\u53e3\u4f1a\u8fdb\u4e00\u6b65\u5206\u5316\uff0c\u5f00\u53d1\u8005\u9762\u5bf9\u66f4\u52a0\u590d\u6742\u7684\u6982\u5ff5\u548c\u5f00\u53d1\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u81ea\u7814\u7684\u63a5\u53e3\u5c01\u88c5\u4f1a\u66f4\u5feb\u901f\u76f8\u5e94\u8fd9\u79cd\u53d8\u5316\uff0c\u5e76\u4e14\u7b80\u5316\u7528\u6237\u5f00\u53d1")),(0,n.kt)("h3",{id:"7415-ecs--ai"},"7.4.15 ECS + AI"),(0,n.kt)("p",null,"EntitiesBT"),(0,n.kt)("p",null,"Behavior Tree "),(0,n.kt)("p",null,"\u5728\u539f\u751f\u7684ECS\u6846\u67b6\u4e0b\u5b9e\u73b0\u5177\u6709\u575a\u5f3a\u4f9d\u8d56\u5173\u7cfb\u7684\u529f\u80fd\u662f\u5426\u5f88\u96be\uff0c\u4f8b\u5982\u884c\u4e3a\u6811\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u662f\u50cf\u884c\u4e3a\u6811\u4e00\u6837\u76f8\u5bf9\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6211\u4eec\u53ef\u4ee5\u50cfUE blueprint \u4e00\u6837\u5b9a\u4e49\u5957\u6846\u67b6\uff0c\u7136\u540e\u5bf9\u4e8e\u8fd9\u4e2a\u6846\u67b6\u6309\u592a\u6781\u4e00\u6837\u7684\u601d\u8def\u5728\u7f16\u8bd1\u5c42\u5bf9\u4ee3\u7801\u505a\u91cd\u65b0\u8c03\u6574\uff0c\u5f53\u7136\u8981\u8003\u8651\u91cd\u65b0\u7f16\u8f91\u7684\u4fbf\u6377\u6027\uff0c\u6240\u4ee5\u53ef\u80fd\u662f\u62df\u5a32\u8fd0\u884c\u65f6\u4e0a\u7684\u4e00\u4e2a\u811a\u672c\u8f7b\u91cf\u7ea7JIT"),(0,n.kt)("h3",{id:"7416-unreal-blueprint"},"7.4.16 Unreal blueprint"),(0,n.kt)("p",null,"\u84dd\u56fe\u4ee5\u53ca\u76f8\u5e94\u7684\u5f88\u591a\u7f16\u8f91\u5668\u53caUI\u754c\u9762\uff0c\u672c\u8d28\u4e0a\u4ed6\u4eec\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4ed6\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fa\u5b9a\u7c7b\u578b\u7684\u5b9a\u4e49\uff1a\u5bf9\u4e8e\u4e00\u4e9b\u7279\u5b9a\u56fa\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982blueprint \u5305\u542b\u7684\u90a3\u4e9b\u7c7b\u578b\uff0c\u4ed6\u4eec\u5f80\u5f80\u5728OOP\u4e2d\u6709\u4e00\u5b9a\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\u4e00\u822c\u9700\u8981\u5b9a\u4e49\u90a3\u51e0\u4e2a\u7c7b\u6216\u8005\u5b9e\u4f8b\uff0c\u90a3\u4e2a\u7c7b\u9700\u8981\u5f15\u7528\u90a3\u4e9b\u7c7b\u7684\u5b9e\u4f8b\uff0c\u4ee5\u53ca\u600e\u6837\u5bf9\u8fd9\u4e9b\u5b9e\u4f8b\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u4e8e\u5b9e\u73b0\u8fd9\u4e9bblueprint\u5bf9\u5e94\u7684\u529f\u80fd\uff0c\u4ed6\u4eec\u7684\u8fd9\u79cd\u901a\u7528\u7ed3\u6784\u88ab\u8bbe\u8ba1\u51fa\u6765\uff0c\u5426\u5219\u90a3\u4e2a\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u5b9a\u4e49\u81ea\u5df1\u7684\u5bf9\u8c61\u6a21\u578b\uff0c\u6bcf\u4e2a\u4eba\u5b9a\u4e49\u7684\u53ef\u80fd\u5f88\u4e0d\u4e00\u6837\uff0c\u76f8\u5e94\u7684\u5185\u5b58\u7ba1\u7406\uff0c\u7b49\u7b49\u90fd\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5e94\u529f\u80fd\u7684\u521d\u59cb\u5316\uff0c\u6210\u5458\u53d8\u91cf\u590d\u5236\u7ba1\u7406\u7b49\u662f\u5f88\u7e41\u7410\u7684\u4e8b\u60c5\uff0c\u6309\u7167\u84dd\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4ed6\u5b9e\u9645\u4e0a\u628a\u6d41\u7a0b\u56fa\u5316\u4e86\uff0c\u56e0\u6b64\u8fd9\u4e9b\u57fa\u672c\u7684\u6d41\u7a0b\u5c31\u7b80\u5316\u4e86"),(0,n.kt)("li",{parentName:"ul"},"\u5269\u4e0b\u7528\u6237\u9700\u8981\u505a\u7684\u5c31\u662f\u9488\u5bf9\u56fa\u5b9a\u7ed3\u6784\u548c\u67b6\u6784\u4e0b\u7684\u5177\u4f53\u67d0\u4e2a\u51fd\u6570\u8fdb\u884c\u4ee3\u7801\u7f16\u5199")),(0,n.kt)("p",null,"\u574f\u5904\u662f\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u57fa\u4e8e\u4ee3\u7801\u7684\uff0c\u5e76\u4e14\u65e0\u6cd5\u81ea\u5b9a\u4e49\uff0c\u5b58\u5728\u4e00\u5b9a\u7684\u5197\u4f59\uff0c\u5982\u679c\u4e0d\u91c7\u7528\u5b83\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u81ea\u5df1\u4ece\u96f6\u5b9e\u73b0\uff0c\u90a3\u5c31\u9700\u8981\u5b9e\u73b0\u6574\u4e2a\u6a21\u5757\u7684\u67b6\u6784\uff0c\u5bf9\u8c61\u4e4b\u95f4\u7684\u7ba1\u7406\u7b49\uff0c\u4ee3\u4ef7\u66f4\u5927\uff0c\u4f46\u81ea\u7531\u5ea6\u66f4\u5927\uff0c\u4f8b\u5982\u53ef\u4ee5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\uff0cUE\u7684\u6d41\u7a0b\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\uff0c\u6216\u8005\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u6216\u8005\u73af\u5883\u4e0b\u4e0d\u4e00\u5b9a\u6700\u4f18"),(0,n.kt)("p",null,"\u84dd\u56fe\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u67b6\u6784\uff0c\u4ed6\u76f8\u5f53\u4e8eUE\u5e2e\u52a9\u6253\u4e86\u4e00\u4e2a\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5bf9\u5176\u4e2d\u7684\u65b9\u6cd5\u8fdb\u884c\u586b\u5145\uff0c\u6574\u4e2a\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7684\u601d\u8def\uff0c\u5bf9\u4e8eEpic \u6765\u8bb2\uff0c\u5b83\u9700\u8981\u53bb\u5b9e\u73b0\u5927\u91cf\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u6240\u4ee5\u5b83\u7684\u529f\u80fd\u6bd4Unity\u8981\u590d\u6742\u5f97\u591a\uff0c\u4f46\u8fd9\u4e9b\u5b9e\u73b0\u5bf9\u4e8e\u7279\u5b9a\u7684\u4e00\u4e2a\u6e38\u620f\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u4f18\u5316\u7684\uff0c\u4ed6\u4f1a\u727a\u7272\u6027\u80fd\u6765\u6362\u53d6\u8fd9\u79cd\u7b80\u5355\uff0c\u56e0\u4e3a\u901a\u7528\u7684\u67b6\u5b50\u5f80\u5f80\u4e0d\u662f\u6700\u4f18\u7684\uff0c\u800c\u5b83\u9762\u5411\u5bf9\u8c61\u7684\u6df1\u5ea6\u5b9e\u73b0\u5bfc\u81f4\u4ee3\u7801\u4e5f\u5f88\u96be\u4f18\u5316\uff0c\u4f8b\u5982\u67b6\u5b50\u91cc\u9762\u5b58\u5728\u5927\u91cf\u4ea4\u53c9\u5f15\u7528"),(0,n.kt)("p",null,"\u50cfUnity\u56e0\u4e3a\u6ca1\u6709\u63d0\u4f9b\u4f17\u591a\u8fd9\u79cd\u6df1\u5ea6\u5b9a\u5236\u7684\u67b6\u5b50\uff0c\u53cd\u800c\u80fd\u591f\u5bb9\u6613\u53bb\u5b9e\u73b0ECS\u8fd9\u79cd\u4f18\u5316"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eUnity\uff0c\u6709\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5\uff0c\u7c7b\u4f3c\u5b9a\u4e49\u4e86\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u8303\u5f0f\uff0c\u4f46\u8fd9\u4e9b\u8303\u5f0f\u672c\u8eab\u662f\u6309\u7167OOP\u7684\u65b9\u5f0f\u5b9a\u4e49\u7684\uff0c\u56e0\u6b64\u4ed6\u7684\u8303\u5f0f\u662f\u5b9e\u73b0\u4e86\u4e00\u4e9b\u7279\u5b9a\u7684\u529f\u80fd\uff0c\u800c\u4e0d\u662f\u5b9a\u4e49\u4e86\u4e00\u4e2a\u6846\u67b6\uff0c\u6240\u4ee5UE\u8981\u5b66\u4e60\u66f4\u591a\u7684\u77e5\u8bc6\uff0c\u5f88\u591a\u77e5\u8bc6\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u7279\u5b9a\u8303\u5f0f\u7684"),(0,n.kt)("p",null,"\u9664\u4e86\u8303\u5f0f\u672c\u8eab\uff0cBlueprint \u7684\u53e6\u4e00\u4e2a\u5f3a\u5927\u7684\u529f\u80fd\u5728\u4e8e\u5b83\u628a\u6574\u4e2a\u4e00\u4e2a\u4ee3\u7801\u5757\u6216\u8005\u4e00\u4e2a\u590d\u6742\u7684\u5b50\u6a21\u5757\u7cfb\u7edf\uff0c\u6253\u6563\u6210\u591a\u4e2a\u4ee5\u65b9\u6cd5\u4e3a\u5355\u4f4d\u7684\u53ef\u89c6\u7f16\u8f91\u6a21\u5757\uff0c\u8fd9\u6837\u662f\u7684\u4fee\u6539\u5355\u72ec\u7684\u6a21\u5757\u66f4\u52a0\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u5173\u6ce8\u51fd\u6570\u7684\u8f93\u5165\u8f93\u51fa\uff0c\u4e0d\u9700\u8981\u5728\u4ee3\u7801\u4e2d\u5bfb\u627e\u4fee\u6539\u51fd\u6570\u7684\u5165\u53e3\uff0c\u4e5f\u4e0d\u9700\u8981\u5f15\u5165\u4e00\u4e9b\u53d8\u91cf\u7684\u4fe1\u7528\u3001\u8bfb\u53d6\u6216\u8005\u4fee\u6539\u7e41\u7410\u7684\u4ee3\u7801"),(0,n.kt)("h3",{id:"7417-pixar"},"7.4.17 Pixar"),(0,n.kt)("p",null,"\u76ae\u514b\u65af\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408"),(0,n.kt)("p",null,"\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408\u7684\u7ed3\u679c\u662f\u4ec0\u4e48"),(0,n.kt)("h3",{id:"7418-gaia-procedural-worldscom"},"7.4.18 Gaia procedural-worlds.com"),(0,n.kt)("p",null,"\u7a0b\u5e8f\u5316\u9759\u6001\u5185\u5bb9\u751f\u6210\u5e94\u8be5\u8fd8\u662f\u6bd4\u8f83\u6210\u719f\u7684\u67b6\u6784\u4e86\uff0c\u540e\u671f\u5e94\u8be5\u80fd\u591f\u5bb9\u6613\u5f00\u53d1\uff0c\u5230\u4ea4\u4e92\u66f4\u96be"),(0,n.kt)("p",null,"\u4ea4\u4e92\u7684\u8bbe\u8ba1\u4e5f\u8981\u662f\u7a0b\u5e8f\u5316\u7684\uff0c\u5f53\u7136\u7531\u4e8eECS\u672c\u8eab\u662f\u7ec4\u4ef6\u5316\u7684\uff0c\u6ca1\u6709\u64cd\u4f5c\u987a\u5e8f\u4f9d\u8d56\uff0c\u6240\u4ee5\u8fd9\u4e2a\u95ee\u9898\u4e0d\u5927\u5b58\u5728\uff0c\u4f46\u662f\u5f53\u9700\u8981\u5bf9\u9759\u6001\u5185\u5bb9\u8bbe\u8ba1\u591a\u4e2a\u4fee\u6539\u65f6\uff0c\u64cd\u4f5c\u6b65\u9aa4\u7684\u5f71\u54cd\u5c31\u51fa\u6765\u4e86\uff0c\u7a0b\u5e8f\u5316\u7684\u597d\u5904\u662fdirectable\uff0c\u5b83\u7b80\u5316\u4e86\u5bf9\u64cd\u4f5c\u7684\u4efb\u610f\u4fee\u6539\uff0c\u4f20\u7edf\u7684\u8f6f\u4ef6\u5c31\u662f\u9075\u5faa\u89c4\u5219\u548c\u6b65\u9aa4\u7684\uff0c\u8fd9\u6837\u5982\u679c\u6709\u4e9b\u5386\u53f2\u64cd\u4f5c\u4fee\u6539\u4e86\u6216\u8005\u9700\u8981\u4fee\u6539\uff0c\u5f80\u5f80\u4f1a\u5f71\u54cd\u5176\u4ed6\u5927\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u4f46\u811a\u672c\u53ea\u662f\u9488\u5bf9\u5355\u4e2a\u7269\u4f53\u7684\u884c\u4e3a\uff0c\u6574\u4e2a\u573a\u666f\u7684\u7ed3\u67b6\u6784\u8bbe\u8ba1\u8fd8\u662f\u5e94\u8be5\u5c3d\u53ef\u80fd\u7684\u7a0b\u5e8f\u5316\uff0c\u800cRoblox \u6ca1\u6709\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7a0b\u5e8f\u5316\u7684\u573a\u666f\u8bbe\u8ba1\u4f7f\u5f97\u901a\u5e38\u53ef\u4ee5\u66f4\u9ad8\u6548\u5730\u8bbe\u8ba1\u5927\u73af\u5883\uff0c\u7136\u540e\u7cbe\u8c03\u5c0f\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u5bf9\u573a\u666f\u6bcf\u4e2a\u7269\u4f53\u90fd\u8981\u72ec\u7acb\u6446\u653e\u548c\u8bbe\u8ba1\uff0c\u56e0\u4e3a\u5927\u73af\u5883\u901a\u5e38\u90fd\u6709\u4e00\u5b9a\u7684\u968f\u673a\u6027"),(0,n.kt)("h3",{id:"7419-google-maps-api"},"7.4.19 Google Maps API"),(0,n.kt)("h3",{id:"7420-procedural-content-generation"},"7.4.20 Procedural content generation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DCC\u4f7f\u7528deforming, cutting, merging \u7b49\u4ee3\u66ff\u5bf9\u4e09\u89d2\u5f62\u7684\u76f4\u63a5\u64cd\u4f5c\uff0c\u4ece\u800c\u7b80\u5316\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"PCG\u4f7f\u7528\u6237\u4e13\u6ce8\u4e8e\u7528\u4e8e\u751f\u6210\u5185\u5bb9\u7684\u7a0b\u5e8f\u5316\u7b97\u6cd5\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7e41\u7410\u7684\u5185\u5bb9\u64cd\u4f5c\uff0c\u8fd9\u79cd\u7b97\u6cd5\u66f4\u7b26\u5408\u4eba\u7684\u903b\u8f91"),(0,n.kt)("p",null,"PCG\u7684\u8ba1\u7b97\u8fc7\u7a0b\u6bd4\u8f83\u590d\u6742\uff0c\u66f4\u9002\u5408PC\u7aef\uff0c\u79fb\u52a8\u7aef\u8981\u4e13\u6ce8\u73a9\u6cd5\u90e8\u4efd"),(0,n.kt)("p",null,"\u7b54\u4e3b\u5bf9\u751f\u6210\u7b97\u6cd5\u7684\u7406\u89e3\u5c31\u597d\u50cf\u67d0\u4e9b\u65f6\u671f\u5bf9\u706b\u836f\u7684\u7406\u89e3\uff1a\u7528\u6765\u653e\u70df\u82b1\u7684\u4e1c\u897f\uff0c\u9700\u8981\u7814\u7a76\u66f4\u597d\u7684\u706b\u836f\u4e48\uff1f\u4e0d\u662f\u7b97\u6cd5\u591f\u4e86\uff0c\u800c\u662f\u8bbe\u8ba1\u8005\u4e0d\u77e5\u9053\u8bbe\u8ba1\u76ee\u7684\u4e3a\u4f55\uff0c\u5bf9\u7b97\u6cd5\u6ca1\u6709\u8981\u6c42\u3002\u6e38\u620f\u6838\u5fc3\u8bbe\u8ba1\u7edd\u4e0d\u662f\u5267\u60c5\u3001\u573a\u666f\uff0c\u800c\u662f\u73a9\u6cd5\u3002\u73a9\u6cd5\u662f\u4ec0\u4e48\uff0c\u5c31\u662f\u7ed9\u73a9\u5bb6\u6709\u610f\u601d\u7684\u95ee\u9898\uff0c\u8ba9\u73a9\u5bb6\u89e3\u51b3\u95ee\u9898\u3002\u7528\u7b97\u6cd5\u63d0\u51fa\u7684\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u548c\u89e3\u51b3\u95ee\u9898\u96be\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u73a9\u5bb6\u5373\u4f7f\u77e5\u9053\u4e86\u4f60\u5982\u4f55\u751f\u6210\u95ee\u9898\uff0c\u4f46\u662f\u4ed6\u73b0\u5728\u4e5f\u4e0d\u77e5\u9053\u5982\u4f55\u6709\u6548\u7684\u89e3\u51b3\u95ee\u9898\u3002\u8fd9\u5c31\u662f\u8457\u540d\u7684NP/P\u95ee\u9898\uff0c\u6211\u5f53\u7136\u77e5\u9053\u4fc4\u7f57\u65af\u65b9\u5757\u968f\u673a\u751f\u6210\u7684\u65b9\u5757\u968f\u673a\u7b97\u6cd5\uff0c\u4f46\u5c31\u6ca1\u6709\u4e00\u4e2a\u9ad8\u6548\u7684\u7b97\u6cd5\u53bb\u89e3\u51b3\u4fc4\u7f57\u65af\u65b9\u5757\u62fc\u63a5\u95ee\u9898\uff0c\u6570\u72ec\u7684\u751f\u6210\u7b97\u6cd5\u5f88\u9ad8\u6548\uff0c\u89e3\u51b3\u6570\u72ec\u7684\u7b97\u6cd5\u5f88\u6162\uff0c\u751f\u6210\u5730\u56fe\u7684\u7b97\u6cd5\u9ad8\u6548\uff0c\u8bbf\u95ee\u5730\u56fe\u4e0a\u7684\u6bcf\u4e00\u4e2a\u70b9\u7684\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u5c31\u96be\u7206\u4e86\u3002\u4e3a\u5565\u89c9\u5f97\u751f\u6210\u7b97\u6cd5\u6ca1\u7528\uff0c\u56e0\u4e3a\u4e0d\u77e5\u9053\u8981\u6784\u9020\u4ec0\u4e48\u95ee\u9898\u7ed9\u73a9\u5bb6\uff0c\u8bbe\u8ba1\u76ee\u7684\u5230\u5e95\u662f\u4ec0\u4e48\uff0c\u800c\u662f\u6f2b\u65e0\u76ee\u7684\u5730\u53bb\u751f\u6210\u90a3\u4e9b\u82b1\u82b1\u8349\u8349\uff0c\u548c\u7528\u706b\u836f\u653e\u70df\u706b\u4e00\u4e2a\u9053\u7406\uff0c\u672c\u6765\u5c31\u4e0d\u662f\u8bbe\u8ba1\u7684\u6838\u5fc3\uff0c\u518d\u600e\u4e48\u63d0\u5347\u6280\u672f\u4e5f\u53ea\u662f\u88c5\u9970\u3002"),(0,n.kt)("p",null,"\u4fc4\u7f57\u65af\u65b9\u5757\u5c31\u662f\u4f8b\u5b50\uff0c\u771f\u6b63\u628a\u7b97\u6cd5\u751f\u6210\u8981\u7528\u4e8e\u73a9\u6cd5\u4e0a\uff0c\u5c31\u9700\u8981\u4e86\u89e3P/NP\u95ee\u9898\uff1a\u7528\u7b80\u5355\u7684\u4fe1\u606f\u662f\u53ef\u4ee5\u6784\u9020\u590d\u6742\u95ee\u9898\u3002\u5176\u5b9eMOBA\u6e38\u620f\u91cc\uff0c\u4e00\u4e2a\u65f6\u95f4\u6bb5\u7684\u8d70\u4f4d\u89c4\u5212\u4e5f\u662fNP\u95ee\u9898\uff1a\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\uff0c\u5982\u679c\u8981\u8bbf\u95ee\u548c\u4fa6\u5bdf\u5730\u56fe\u4e0a\u591a\u4e2a\u6218\u7565\u8981\u70b9\uff0c\u5982\u4f55\u624d\u80fd\u8d70\u6700\u5c11\u7684\u8def\uff0c\u6d88\u8017\u6700\u5c11\u7684\u65f6\u95f4\uff0c\u8fbe\u5230\u6218\u7565\u76ee\u6807\u3002\u6709\u65f6\u5019\u8fd9\u4e9b\u6218\u7565\u8981\u70b9\u8fd8\u662f\u5176\u4ed6\u73a9\u5bb6\u5f71\u54cd\u4e0b\u751f\u6210\u7684\u3002"),(0,n.kt)("h3",{id:"7421-casualcreator"},"7.4.21 casualcreator"),(0,n.kt)("h3",{id:"7422-\u5fae\u670d\u52a1\u5316"},"7.4.22 \u5fae\u670d\u52a1\u5316"),(0,n.kt)("p",null,'When it comes to cloud technology in gaming, most people associate it with game streaming. However, Scalar is based on cloud computing, which Romell as explained, is quite different from the term we\'ve heard about so often. "Cloud streaming is a distribution model; it improves people\u2019s access to games, but it doesn\u2019t change, in essence, what games are, or the quality of them. The game is still being run on a single-processing machine placed remotely and then streamed via the cloud to your screen," he said.'),(0,n.kt)("p",null,'"Cloud computing \u2013 what Ubisoft Scalar enables \u2013 means the processing power for a game isn\u2019t tied to a single machine, but a decentralized computation system. The processing is taking place in the cloud. This eliminates the limits of local hardware for players, improves the quality of games, and opens up new possibilities for game developers."'),(0,n.kt)("p",null,"\u66f4\u65b0\u4e0d\u4f1a\u505c\u670d"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5f15\u64ce\u7684\u591a\u4e2a\u7ec4\u4ef6\uff0c\u5982physics, AI\u7b49\u90fd\u8f6c\u6210\u5fae\u670d\u52a1\uff0c\u7136\u540e\u5355\u72ec\u5728\u4e91\u7aef\u8ba1\u7b97\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u4e0d\u53d7\u9650\u5236\uff0c\u4f20\u7edf\u7684\u5f15\u64ce\u628a\u6574\u4e2a\u5f15\u64ce\u5728\u4e00\u53f0\u673a\u5668\u65e0\u5f62\uff0c\u7531\u4e8e\u5171\u4eab\u6574\u4e2a\u573a\u666f\u5927\u91cf\u6570\u636e\uff0c\u56e0\u6b64\u4e0d\u597d\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"3\u670817\u65e5\u6d88\u606f\uff0c\u636e\u5916\u5a92\u62a5\u9053\uff0c\u5728\u5f53\u5730\u65f6\u95f4\u661f\u671f\u56db\u7684GDC\u6f14\u8bb2\u4e2d\uff0c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u7684\u603b\u7ecf\u7406Patrick Bach\u3001\u6280\u672f\u603b\u76d1Christian Holmqvist\u548c\u9996\u5e2d\u6280\u672f\u5b98/\u6280\u672f\u603b\u76d1Per-Olof Romell\u516c\u5e03\u4e86\u4e00\u9879\u5168\u65b0\u4e91\u8ba1\u7b97\u6280\u672f\uff0c\u8be5\u6280\u672f\u88ab\u79f0\u4e3aUbisoft Scalar\u3002\u4ed6\u4eec\u58f0\u79f0\u8be5\u6280\u672f\u5c06\u521b\u9020\u5168\u65b0\u7684\u6e38\u620f\u7c7b\u578b\u3002\u4ed6\u4eec\u8868\u793a\uff0c\u8fd9\u9879\u6280\u672f\u5c06\u4f7f\u80b2\u78a7\u80fd\u591f\u5236\u4f5c\u6bd4\u4ee5\u5f80\u66f4\u5927\uff0c\u66f4\u590d\u6742\u7684\u6e38\u620f\u4e16\u754c\uff0c\u8fd9\u4e9b\u6e38\u620f\u4e16\u754c\u53ef\u4ee5\u5b9e\u65f6\u66f4\u65b0\uff0c\u5e76\u7531\u5927\u91cf\u73a9\u5bb6\u586b\u5145\uff0c\u4ece\u800c\u521b\u9020\u65b0\u7684\u793e\u4ea4\u4f53\u9a8c\u3002\u5173\u4e8e\u4f7f\u7528\u8be5\u6280\u672f\u5f00\u53d1\u7684\u65b0\u4f5c\u3002Bach\u8868\u793a\uff1a\u201c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u6b63\u5728\u7814\u7a76\u4e0eScalar\u4e00\u8d77\u5f00\u53d1\u7684IP\uff0c\u76ee\u6807\u5f53\u7136\u662f\u5145\u5206\u5229\u7528\u8fd9\u9879\u65b0\u6280\u672f\u7684\u6240\u6709\u53ef\u80fd\u6027\uff0c\u4f46\u73b0\u5728\u8c08\u8bba\u8fd9\u4e2a\u8fd8\u4e3a\u65f6\u8fc7\u65e9\u201d\u3002"),(0,n.kt)("h3",{id:"7423-google-tilt-brush"},"7.4.23 Google Tilt Brush"),(0,n.kt)("p",null,"\u592a\u504f\u5e95\u5c42\uff0c\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u751f\u6210\u6700\u539f\u59cb\u7684Mesh\uff0c\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u63a7\u5236\u7cbe\u7ec6\u5ea6\u4e0d\u591f\uff0c\u6240\u4ee5\u7f51\u683c\u548c\u6750\u8d28\u90fd\u4e0d\u591f\u7cbe\u7ec6"),(0,n.kt)("li",{parentName:"ul"},"\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u90a3\u4e2a\u7269\u4f53\u90fd\u8981\u4ece\u65e0\u5230\u6709\u521b\u4f5c\uff0c\u6216\u8005\u57fa\u4e8e\u4e00\u4e9b\u57fa\u672c\u7684\u51e0\u4f55\u4f53\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u751f\u6210\u590d\u6742\u51e0\u4f55\uff0c\u66f4\u591a\u662f\u6982\u5ff5\u4e0a\u7684\u611f\u89c9"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u8fd9\u4e9b\u4f5c\u54c1\u5b9e\u9645\u4e0a\u5f88\u5c11\u6709\u88ab\u771f\u6b63\u4f7f\u7528\u6216\u8005\u88ab\u5f53\u4f5c\u827a\u672f\uff0c\u56e0\u4e3a\u521b\u4f5c\u5f88\u53d7\u9650")),(0,n.kt)("p",null,"\u5982\u679c\u8981\u63d0\u4f9b\u66f4\u7cbe\u7ec6\u7684\u63a7\u5236\uff0c\u5219\u9762\u4e34\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u592a\u590d\u6742\u4e0d\u597d\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52bf\u63a7\u5236\u7684\u7cbe\u5ea6\u8bef\u5dee\u6bd4\u8f83\u5927")),(0,n.kt)("p",null,"\u8fd9\u7c7b\u521b\u4f5c\u7684\u4f5c\u54c1\u901a\u5e38\u53ea\u662f\u534a\u6210\u54c1\uff0c\u53ef\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u573a\u666f\u548c\u6982\u5ff5\uff0c\u7136\u540e\u5728PC\u4e0a\u5728\u8fdb\u4e00\u6b65\u7cbe\u7ec6\u5fae\u8c03\uff0c\u4f46\u5982\u679c\u662f\u8fd9\u6837\uff0c\u5728PC\u4e0a\u6709\u66f4\u591a\u7684\u65b9\u5f0f\u751f\u6210\u8fd9\u6837\u7684\u6982\u5ff5"),(0,n.kt)("p",null,"\u5982\u679c\u76f4\u63a5\u4f7f\u7528\uff0c\u8fd9\u7c7b\u573a\u666f\u901a\u5e38\u6ca1\u6709\u592a\u5927\u7528\u5904\uff0c\u53ea\u6709\u9759\u6001\u7684\u4e1c\u897f\uff0c\u6ca1\u6cd5\u7f16\u8f91\u52a8\u753b\uff0c\u5f53\u7136\u5982\u679c\u8981\u5728XR\u8bbe\u5907\u52a0\u5165\u52a8\u753b\u7f16\u8f91\uff0c\u90a3\u53c8\u662f\u53e6\u5916\u4e00\u4e2a\u5f88\u590d\u6742\uff0c\u51e0\u4e4e\u4e0d\u592a\u53ef\u80fd\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u80fd\u76f4\u63a5\u521b\u4f5c\u539f\u59cb\u51e0\u4f55\uff0c\u56e0\u4e3a\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u6837\u51e0\u4f55\u662f\u9759\u6001\u7684\uff0c\u6ca1\u6709\u52a8\u753b"),(0,n.kt)("li",{parentName:"ul"},"\u592a\u7b80\u5355")),(0,n.kt)("p",null,"\u5b83\u53ea\u80fd\u662f\u57fa\u4e8e\u67d0\u4e9b\u6807\u51c6\u7ec4\u4ef6\u7684\u521b\u4f5c\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u901a\u5e38\u7531PC\u5236\u4f5c\uff0c\u5e26\u6709\u52a8\u753b\u548c\u4e00\u5b9a\u7684\u903b\u8f91\u5c5e\u6027\uff08\u56e0\u4e3aXR\u4e0a\u4e5f\u65e0\u6cd5\u7f16\u8f91\u903b\u8f91\uff09\uff0c\u5e76\u4e14\u5728XR\u8bbe\u5907\u4e0a\u4ea4\u4e92\u7684\u662fPCG\u7684\u65b9\u5f0f\uff0c\u8fd9\u6837\u4f7f\u5f97\u4ea4\u4e92\u9700\u8981\u7684\u5e76\u4e0d\u662f\u7cbe\u7ec6\u4f4d\u7f6e\uff0c\u800c\u4e14PCG\u7684\u53c2\u6570\uff0c\u8fd9\u6837\u53c2\u6570\u7684\u7a7a\u95f4\u548c\u8303\u56f4\u5c0f\u7684\u591a\uff0c\u540c\u65f6\u80fd\u591f\u751f\u6210\u66f4\u591a\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4e00\u4e2a\u57fa\u7840\u51e0\u4f55"),(0,n.kt)("h3",{id:"7424-github"},"7.4.24 GitHub"),(0,n.kt)("p",null,"\u591a\u4eba\u534f\u4f5c\u7684\u5178\u8303\uff0c\u5728\u534f\u4f5c\u4e2d\u4f53\u73b0\u8d21\u732e\u5ea6",(0,n.kt)("sup",{parentName:"p",id:"fnref-hello"},(0,n.kt)("a",{parentName:"sup",href:"#fn-hello",className:"footnote-ref"},"hello"))),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u53d1\u73b0\u67d0\u4e2aCreation \u5b58\u5728\u4e0d\u5408\u7406\uff0c\u63d0\u51fa\u4fee\u6539"),(0,n.kt)("h3",{id:"7425-stechfab"},"7.4.25 Stechfab"),(0,n.kt)("h3",{id:"7426-game-pigeon-games-for-imessage"},"7.4.26 Game pigeon: games for iMessage"),(0,n.kt)("img",{src:"resources/games-pen.png",alt:"games-pen"}),(0,n.kt)("h2",{id:"75-\u5e94\u7528"},"7.5 \u5e94\u7528"),(0,n.kt)("h3",{id:"751--\u5821\u5792\u4e4b\u591c"},"7.5.1 \u5821\u5792\u4e4b\u591c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite",src:l(8128).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"Game theme, starter island "),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4f1a\u968f\u7740theme\u53d8\u5316"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5821\u5792\u4e4b\u591c\u53ea\u4ece\u6a21\u677f\u521b\u5efa\uff0cRW\u5177\u6709\u80fd\u591f\u8ba9\u7528\u6237\u521b\u9020\u6a21\u677f\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u5ea6\u548c\u53ef\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a"),(0,n.kt)("p",null,"Accolade \u81ea\u52a8\u63a7\u5236XP\u7684\u83b7\u53d6\uff0c\u81ea\u52a8\u8ba1\u7b97\u5e73\u8861\uff0c\u6839\u636e\u65f6\u95f4"),(0,n.kt)("p",null,"\u8d44\u6e90\u662f\u5f15\u7528\u5185\u90e8\uff0c\u9700\u8981\u6e38\u620f\u5305\u5185\u767b\u5f55\u65f6\u4e0b\u8f7d\uff0c\u662f\u5426\u65e0\u6cd5\u7528\u6237\u81ea\u5df1\u52a8\u6001\u6dfb\u52a0"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u662f\u5b9e\u73b0\u4e86\u56fa\u5b9a\u4e00\u5957\u8d44\u6e90\u548c\u903b\u8f91\u7684\u6570\u636e\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u6bd4\u6e38\u620f\u89c4\u5219\u66f4\u590d\u6742\uff0c\u4e0d\u7ba1\u662f\u903b\u8f91\u8fd8\u662f\u573a\u666f\uff0c\u4ea4\u4e92\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u652f\u6301\u7f16\u7a0b\u6269\u5c55\u80fd\u529b"),(0,n.kt)("p",null,"\u4f8b\u5982\u5821\u5792\u4e4b\u591c\u91cc\u5927\u90e8\u5206\u8d44\u6e90\u5916\u89c2\u662f\u4e0d\u80fd\u4fee\u6539\u7684\uff0c\u4f46\u662f\u751f\u6d3b\u4e2d\u7684\u8bbe\u8ba1\u5f80\u5f80\u90fd\u8bbe\u7acb\u7167\u7247\u7f16\u8f91\uff0c\u81ea\u5b9a\u4e49\u4e00\u4e9b\u5185\u5bb9\uff0c\u56e0\u4e3a\u4ed6\u662f\u56fa\u5b9a\u7684\u7c7b\uff0c\u65e0\u6cd5\u7ec4\u5408\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u51cf\u5c11\u6216\u589e\u52a0\u529f\u80fd\u6765\u4fee\u6539\u5df2\u6709\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u7ec4\u5408\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u65b0\u7684\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u6ca1\u6709\u529e\u6cd5\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u6240\u6709\u90fd\u4f9d\u8d56\u4e8e\u5b98\u65b9\u6784\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u589e\u52a0\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u90fd\u8981\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u5c3d\u7ba1\u4ed6\u4eec\u6709\u590d\u7528\uff0c\u4ee3\u7801\u4f1a\u91cd\u590d\uff0c\u7528\u6237\u9700\u8981\u7406\u89e3\u548c\u8bb0\u4f4f\u7684\u7c7b\u578b\u975e\u5e38\u591a")),(0,n.kt)("p",null,"\u6240\u6709\u4e1c\u897f\u6216\u8005\u5927\u90e8\u5206\u4e1c\u897f\u90fd\u88ab\u89c6\u89c9\u5316\uff0c\u7136\u540e\u6570\u636e\u9a71\u52a8\uff0c\u4fee\u6539\u8bbe\u5b9a\u597d\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u7b80\u5316\u4e86\u6811\u5f62\u5c42\u7ea7\u7ed3\u6784\uff0c\u6240\u6709\u5185\u5bb9\u90fd\u662f\u6241\u5e73"),(0,n.kt)("h4",{id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"},"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u6709122\u79cddevices"),(0,n.kt)("h4",{id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1"},"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1"),(0,n.kt)("p",null,"\u97f3\u9891\u7684\u91cd\u8981\u6027"),(0,n.kt)("h4",{id:"7513-\u79c1\u5bc6\u793e\u4ea4"},"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"I, I, couldn't be more pleased with the situation in Fortnite. Fortnite is the most positive social experience I've ever interacted with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And, you know, we really are innately trained to, uh, you know, in ordinary circumstances, respect people when we're interacting with them personally far, far more than when we're interacting with them with text. And so I think this is an area where the matter verse will have a major advantage overall. So O other social media, it's that inherently by being focused on small groups and actual friends, engaging in a much larger outside world and in carrying all of the emotional content of voice and perhaps even facial capture in the future, uh, it'll be a much higher empathy platform, only much less subject to abuse where, you know, one nasty action affects millions of people, uh, because of curation.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"So, so I think we have a lot of positive things to be excited about there. Um, but the key point, the key challenge for this new medium is that to succeed anything that causes itself, the metaverse must actually be better than all other experiences competing for people's digital time. And that's a massive challenge. This means the metaverse needs to be better than an hour on the metaverse needs to be better than an hour on Facebook or Instagram or an hour on YouTube, uh, or an hour on Netflix.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, it'll be actual interactive objects, actual experiences, and actual engaging things and not just ads forced upon you. And, you know, I think we can completely escape an advertising based business model if we take this approach that the only way you ever get to see a commercial thing is if you decide to see it yourself, because it's really cool. And I think we'll see a whole new level of competition among brands to surface really awesome 3d content. Um, and you know, I think you can look to Fortnite and some of these other games is pioneering. A lot of these really exciting engaging non-advertising based, uh, mechanisms for exposing stuff.")),(0,n.kt)("h4",{id:"7514-verse-language"},"7.5.1.4 Verse Language"),(0,n.kt)("p",null,"Now, the next question is about programming model, because if we want to have this huge shared experience with many different types of games, other entertainment experiences, or, you know, any sort of experience at all, what you're talking about is a huge amount of user generated content in the form of 3d assets and also a huge amount of user written code, um, uh, per perhaps an unprecedented amount of user written code. And, you know, there's already some evidence of models like this working."),(0,n.kt)("p",null,"Um, I think the web with Java script is sort of a microcosm of this. Now the web is a much simpler programming model than the metaverse will have to be because on a website, all of the code that's running in Java script on that site is nominally under the control of the website operator. You can decide exactly what code runs and you don't ever have to deal with random user code being injected that might interact with you."),(0,n.kt)("p",null,"Um, uh, so the web BES, a closed world programming model, whereas the metaverse will need to be an open world programming model because the goal, it can't just be another app store, right?"),(0,n.kt)("p",null,"You can't have a thousand different experiences and you can be in one at a time. And when you're in that one experience, it dictates everything, right? The, the metaverse has gotta be about interoperability of user creative objects of all different types, right? Because, uh, besides having some core game experiences in the sort of place you're also going to have, you know, the equivalent of Facebook pages, uh, for every object that, that exists in the physical world, you know, uh, like Ford creates a new car, they're going to want to unveil the car, um, as a user drivable object, right?"),(0,n.kt)("p",null,"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"The Facebook page, you can have text and video, but in the virtual world, you can actually get in the car, you can go around it, you can look at it from all different angles. You can open the doors, you can drive it, you can see how it handles. Um, and you know, you can have a, a huge set of interactions that are much more interesting and organic as it's not just a, an advertisement, uh, for a product, but also something that you can experience and have fun with. And I think we need to look at, uh, all of the crossovers that have occurred, um, in recent years between games and, um, and other brands as kind of an indicator of where the metaverse will go.")),(0,n.kt)("h3",{id:"752-roblox"},"7.5.2 ROBLOX"),(0,n.kt)("p",null,"Roblox\u793e\u533a\u592a\u5c01\u95ed\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5177\u5907\u5f00\u653e\u80fd\u529b\uff0c\u6ca1\u6709\u5e73\u53f0\u5f00\u653e\u7684\u6a21\u5f0f\uff0c\u522b\u7684\u5e94\u7528\u65e0\u6cd5\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u4e4b\u95f4\u5f88\u96be\u5171\u4eab\uff0c\u6ca1\u6709\u7ec4\u4ef6\u751f\u6001\uff0c\u6574\u4e2a\u5f00\u53d1\u6a21\u5f0f\u8fd8\u662f\u4f20\u7edf\u5c01\u95ed\u7684app\u6a21\u5f0f\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u5355\u72ec\u9488\u5bf9\u81ea\u5df1\u7684app\u72ec\u7acb\u5f00\u53d1\uff0c\u5171\u4eab\u590d\u7528\u80fd\u529b\u4e0d\u591f\uff0c\u53ea\u662f\u6784\u5efa\u4e86\u4e00\u5957\u81ea\u5206\u53d1\u673a\u5236")),(0,n.kt)("p",null,"\u76f8\u540c\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8d44\u6e90\u90fd\u662f\u4e91\u7aef\u7684\uff0c\u8fd9\u4f7f\u5f97\u591a\u4eba\u534f\u4f5c\u66f4\u7b80\u5355\uff0c\u4e0d\u7ba1\u662f\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u5bf9\u4e8e\u7528\u6237\uff0c\u90fd\u6ca1\u6709\u672c\u5730\u8d44\u6e90\u6570\u636e\uff0c\u5168\u662f\u4e91\u7aef\u7684\uff0c\u8d44\u6e90\u4e0a\u4f20\u540eRoblox \u6709\u4e2a\u5185\u5bb9\u5ba1\u6838\u6d41\u7a0b\uff0c\u5927\u6982\u51e0\u5206\u949f"),(0,n.kt)("li",{parentName:"ul"},"Roblox packages, \u53ef\u590d\u7528\u7684\u6e38\u620f\u8d44\u6e90\uff0c\u6e38\u620f\u53ef\u4ee5\u5b9e\u65f6\u540c\u6b65\u5230\u6700\u65b0\u7248\u672c\uff0cRoblox \u7684\u8d44\u6e90\u5206\u4eab\u53ea\u5728\u6307\u5b9a\u597d\u53cb\u548c\u7ec4\u4e4b\u95f4\uff0c\u5207\u7248\u672c\u53f7\u76f8\u5bf9\u7b80\u5355\uff0c\u6bcf\u6b21\u63d0\u4ea4\u81ea\u52a8\u751f\u6210\u4e00\u4e2aV1, V2, V3\u2026\u4e4b\u7c7b\u7684\u7248\u672c\uff0c\u4ec5\u80fd\u6839\u636e\u65f6\u95f4\u5224\u522b\uff0c\u529f\u80fd\u5f88\u6709\u9650\uff0c\u4e0d\u5177\u5907\u5927\u89c4\u6a21\u534f\u540c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff1a\u7528\u6237\u6709group\u7684\u6982\u5ff5\uff1aMy packages\u548cGroup packages \uff0c\u6709Collaborators\u7684\u6982\u5ff5\uff0c\u4ed6\u4eec\u53ef\u4ee5\u7f16\u8f91\u6e38\u620f\uff0c\u5176\u4ed6\u7528\u6237\u7f16\u8f91\u65f6\uff0c\u9009\u4e2d\u4e00\u4e2a\u7269\u4f53\u4f1a\u5e26\u4e0d\u540c\u7684\u989c\u8272\uff0c\u5bf9\u4e8e\u811a\u672c\uff0c\u5f53\u5176\u4ed6\u4eba\u5728\u7f16\u8f91\u65f6\uff0c\u4f1a\u6709\u989c\u8272\u63d0\u793a\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u4ee5\u7f16\u8f91\uff0c\u7f16\u8f91\u5b8c\u4ee5\u540e\u4f1a\u6709\u8349\u7a3f\u5b58\u50a8\uff0c\u63d0\u4ea4\u4e4b\u540e\u53ef\u4ee5\u8fdb\u884c\u5408\u5e76\uff0c\u53ef\u4ee5\u4e0e\u670d\u52a1\u5668\u7248\u672c\u8fdb\u884c\u6bd4\u8f83\uff0c\u89e3\u51b3\u51b2\u7a81\u4e4b\u540e\u518d\u63d0\u4ea4\uff0c\u4e5f\u53ef\u4ee5\u56de\u6eda\uff0c\u7c7b\u4f3c\u7248\u672c\u7684\u6982\u5ff5\u4e86"),(0,n.kt)("li",{parentName:"ul"},"Data Store\u7528\u4e8e\u5b58\u50a8\u9700\u8981\u6301\u4e45\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u53ea\u80fd\u5728Script\u800c\u975eLocal Script\u4e2d\u8c03\u7528\uff0c\u6309\u5b57\u5178\u7684\u65b9\u5f0f\u5b58\u50a8\uff0c\u6709\u7248\u672c\u53f7\uff0c\u53ef\u4ee5\u7528\u4e8e\u4e00\u4e9b\u95ee\u9898\u5b9a\u4f4d\u548c\u652f\u6301\uff0c\u65e7\u7248\u672c\u7684\u5185\u5bb9\u4f1a\u572830\u5929\u540e\u88ab\u5220\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u5f15\u64ceplug-in\uff0c\u7528\u4e8e\u589e\u5f3a\u5f15\u64ce\uff0cmarketplace \uff0c\u8ddf\u5176\u4ed6\u5f15\u64ce\u5dee\u4e0d\u591a"),(0,n.kt)("li",{parentName:"ul"},"Client-service \u6a21\u5f0f\uff0c\u6240\u6709\u4e4b\u95f4\u4f20\u9012\u7684\u53c2\u6570\u90fd\u662f\u53ef\u4ee5Replicated\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c\u5426\u5219\u4f20\u9012\u7ed3\u679c\u4e3a\u7a7a\uff0c\u4f8b\u5982Part\u5c31\u662f\u4e0d\u53ef\u4ee5\u5728Server\u548cClient \u4e4b\u95f4\u8fdb\u884c\u4f20\u9012\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u975e\u76f4\u63a5\u64cd\u4f5c\u7684\u7269\u4f53\u90fd\u662f\u7269\u7406\u6a21\u62df\u7684\uff0c\u7269\u7406\u6a21\u62df\u53ef\u4ee5\u662fclient\u6216\u8005server \u8ba1\u7b97\uff0c\u4e00\u822c\u9760\u8fd1\u7528\u6237\u7684\u5730\u65b9\u4f1a\u9996\u5148\u5728\u8be5\u7528\u6237\u7684client device\u8ba1\u7b97\uff0c\u5426\u5219\u5728server\u7aef\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u5728\u7b80\u53163D\u5185\u5bb9\u7684\u5c42\u9762\u505a\u7684\u5f88\u597d\uff0c\u8fd9\u6837\u907f\u514d\u7528\u6237\u5411\u7740\u6700\u9ad8\u8d28\u91cf\u7684\u5185\u5bb9\u521b\u4f5c\uff0c\u6bd4\u5982\u7528\u65b9\u5757\u5c31\u80fd\u63cf\u8ff0\u6811\uff0c\u4f7f\u5f97\u6e32\u67d3\u5728\u79fb\u52a8\u7aef\u538b\u529b\u4e5f\u5c11\u4e86\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9690\u79c1\u4fdd\u62a4\uff0c\u5185\u5bb9\u7248\u6743")),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u7f16\u7a0b\u6a21\u5f0f\uff0c\u57fa\u672c\u4e0a\u8fd8\u662fUnity\u4f20\u7edf\u7684\u6a21\u5f0f\uff0c\u4e3b\u8981\u4e0d\u540c\u5728\u4e8e\u5929\u751f\u8054\u7f51"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u811a\u672c\u7684\u6302\u8f7d\u8ddf\u573a\u666f\u5c42\u7ea7\u6216\u8005\u5177\u4f53\u7269\u4f53\u6709\u5173\uff0c\u8fd8\u662f\u50cfUnity\u539f\u6765\u7684\u65b9\u5f0f\u4e00\u6837\u9488\u5bf9game object \u7f16\u5199\u811a\u672c\uff0c\u811a\u672c\u4e2d\u901a\u8fc7script.parent\u5f15\u7528\u6240\u5c5e\u5bf9\u8c61\uff0c\u8fd9\u5929\u751f\u5c31\u4f7f\u5f97\u811a\u672c\u4e0e\u7279\u5b9a\u573a\u666f\u7ed3\u6784\u6216\u7269\u4f53\u8026\u5408\uff0c\u4e0d\u5229\u4e8e\u590d\u7528\uff0c\u53ef\u590d\u7528\u7684\u811a\u672c\u5e94\u8be5\u4ec5\u5173\u6ce8\u6570\u636e\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u76843D\u7269\u4f53\uff0c\u8fd9\u79cd\u6570\u636e\u662f\u903b\u8f91\u6570\u636e\uff0c\u4ed6\u5c31\u4f7f\u5f97\u903b\u8f91\u548c\u8868\u73b0\u5206\u79bb\u51fa\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u6bd4\u5982\u5bf9\u4e8e\u4e00\u4e2aUI\u6309\u94ae\u7684\u70b9\u51fb\u4e8b\u4ef6\uff0c\u8fd8\u9700\u8981\u5199script.Parent.MouseButton1Click:Connect(function() end())"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u5c31\u7b49\u88c5\u7684\u4e3b\u8981\u662f\u7ed3\u6784\uff0c\u6709\u70b9\u7c7b\u4f3cUE blueprint \uff0c\u6216\u8005\u8bf4\u5b9a\u4e49\u4e86\u4e00\u4e9b\u89c4\u8303\uff0c\u4e00\u4e9b\u7ed3\u6784\uff0c\u8fd9\u4e9b\u89c4\u8303\u5927\u591a\u6570\u9488\u5bf9client-server\u67b6\u6784\u7684\u4e00\u4e9b\u8c03\u6574\uff0c\u6ca1\u6709\u50cfHoudini \u4e00\u6837\u6709\u4e9b\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"PNC/Weapons Kit\uff0c\u6709\u4e00\u5957\u56fa\u5b9a\u6a21\u7248\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8eUE\u4e2d\u5185\u7f6e\u7684\u5f88\u591a\u7cfb\u7edf\uff0c\u5e73\u53f0\u63d0\u4f9b\u4e86\u8fd9\u4e9b\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7cfb\u7edf\u7684\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5f80\u5f80\u4fee\u6539\u7684\u662f\uff1a\u589e\u52a0\u6216\u79fb\u9664\u67d0\u4e9b\u7ec4\u4ef6\uff1b\u4fee\u6539\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\uff1b\u6216\u8005\u57fa\u4e8e\u67b6\u5b50\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u4fee\u6539\u3002\u5176\u4e2d\u5982\u679c\u662f\u4fee\u6539\u7684\u662f\u4e00\u90e8\u5206\u51fd\u6570\u529f\u80fd\uff0cUE\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u5b9a\u4f4d\u65b9\u5f0f\uff0cRoblox\u5219\u66f4\u5bb9\u6613\u7834\u574f\u6574\u4e2a\u4f53\u7ed3\u6784\uff0c\u4f46Roblox\u63d0\u4f9b\u4e86\u57fa\u4e8e\u6a21\u7248\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u6027\u66f4\u5927\uff0c\u4f46\u662f\u96be\u5ea6\u4e5f\u66f4\u5927\uff0c\u4f8b\u5982\u9700\u8981\u5f15\u7528\u3001\u8bfb\u53d6\u548c\u7ba1\u7406\u53d8\u91cf\uff0c\u5bfb\u627e\u5165\u53e3\u51fd\u6570\uff0c\u5904\u7406\u8f93\u5165\u8f93\u51fa\u7b49"),(0,n.kt)("li",{parentName:"ul"},"Configuration\uff0c\u5bf9\u4e8eNPC kit\u8fd9\u6837\u6bd4\u8f83\u590d\u6742\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u6709\u8bb8\u591a\u516c\u5171\u5c5e\u6027\u88ab\u5f88\u591a\u811a\u672c\u8bbf\u95ee\uff0cRoblox \u5efa\u8bae\u5c06\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u5b58\u50a8\u5728\u4e00\u4e2avalue object\u4e2d\uff0c\u7528\u4e00\u4e2aConfiguration container\u5c01\u88c5\uff0c\u8fd9\u662f\u5178\u578b\u4f20\u7edf\u7684OOP\u601d\u60f3\uff0c\u5176\u4e2d\u5e26\u6765\u7684\u95ee\u9898\u6709\u5f88\u591a\uff0c\u6bd4\u5982\u591a\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\uff0c\u6bd4\u5982\u5982\u679c\u67d0\u4e9b\u53d8\u91cf\u88ab\u5220\u9664\u5176\u4e2d\u4e00\u4e9b\u811a\u672c\u53ef\u80fd\u4e0d\u5de5\u4f5c\uff0c\u4e5f\u53ef\u80fd\u79fb\u9664\u4e86\u4e00\u4e9b\u811a\u672c\u800c\u67d0\u4e9b\u53d8\u91cf\u538b\u6839\u5c31\u4e0d\u88ab\u4f7f\u7528\uff0c\u6838\u5fc3\u95ee\u9898\u5c31\u662f\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u8131\u79bb\u4e86\u5173\u7cfb\uff0c\u4f7f\u5f97\u9700\u8981\u989d\u5916\u5c0f\u5fc3\u8fd9\u79cd\u5173\u7cfb\u7684\u7ef4\u62a4"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u4e2d\u7684\u590d\u7528\u95ee\u9898\u4e00\u65b9\u9762\u901a\u8fc7ModuleScript\uff0c\u77e5\u8bc6\u4ee3\u7801\u7ea7\u7684\u590d\u7528"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u7684\u591a\u4eba\u5728\u7ebf\u7528\u6237\u6570\u8fd8\u662f\u6709\u9650\u768415\u4e2a\u4eba\uff0c\u6240\u4ee5\u8fd8\u662f\u91c7\u7528\u6bd4\u8f83\u4f20\u7edf\u7684\u591a\u4eba\u540c\u6b65\u67b6\u6784\uff0c\u6ca1\u6709\u5145\u5206\u53d1\u6325\u73b0\u4ee3\u4e91\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5fae\u670d\u52a1\u67b6\u6784\uff0c\u5141\u8bb8\u4e0d\u9650\u5236\u7684\u4eba\u6570")),(0,n.kt)("p",null,"Roblox \u7684\u6838\u5fc3\u4f18\u52bf\u5728\u4e8e\u4e91\u539f\u751f\uff0c\u4ed6\u53ef\u80fd\u4f1a\u81ea\u52a8\u5904\u7406\u5f88\u591a\u540c\u6b65\u95ee\u9898\uff0c\u4f8b\u5982\u5728Script\u4e2d\u8c03\u7528Instance.new\u5c31\u4f1a\u5728workspace\u4e2d\u521b\u5efa\u4e00\u4e2aPart\u5e76\u81ea\u52a8\u540c\u6b65\u5230\u5728\u7ebf\u573a\u666f\uff0c\u5927\u90e8\u5206\u7684\u811a\u672c\u90fd\u662f\u901a\u8fc7Script\u7f16\u5199\u7684\uff0c\u91cc\u9762\u7279\u522b\u662f\u5bf9Workspace\u4e2dpart\u7684\u4fee\u6539\u4f1a\u81ea\u52a8\u540c\u6b65\u5230\u7aef\u4fa7"),(0,n.kt)("p",null,"\u8ddfRoblox\u7684\u6700\u5927\u533a\u522b\u5728\u4e8e\uff0c\u6211\u4eec\u9700\u8981\u9762\u5411C\u7aef\u7684\u7528\u6237\uff0c\u7528\u6237\u53ef\u80fd\u662f\u4e0d\u4f9d\u8d56\u4e8ePC\u7684\uff0c\u800cRoblox\u7684\u6574\u4e2a\u751f\u6001\u8fd8\u662f\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u6a21\u5f0f\uff0c\u5176\u521b\u65b0\u5728\u4e8e\u4e91\u539f\u751f\u548c\u5206\u53d1\u6a21\u5f0f\uff0c\u4e3a\u4e86\u5b9e\u73b0\u5728C\u7aef\u521b\u4f5c\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u5373\u662f\u521b\u4f5c\u6001\uff0c\u5b83\u6bd4\u8f83\u5c11\u6709\u7f16\u8f91\u6001\u7684\u6982\u5ff5\uff0c\u50cfMinecraft \u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5728\u903b\u8f91\u5c42\u9762\u505a\u66f4\u591a\u7684\u67b6\u6784\u6765\u652f\u6491C\u7aef\u521b\u4f5c\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\uff1aRoblox + Houdini \uff0c\u800c\u7531\u6b64\u884d\u751f\u51fa\u6765\u7684\u6280\u672f\u548c\u67b6\u6784\u8981\u6bd4Roblox \u590d\u6742\u5f97\u591a\uff0c\u4f46\u5176\u7ed3\u679c\u662f\u4f1a\u6bd4Roblox \u5728\u521b\u4f5c\u5c42\u9762\u66f4\u5927\u91cf\u7684\u666e\u53ca")),(0,n.kt)("h3",{id:"753-niantic"},"7.5.3 NIANTIC"),(0,n.kt)("h3",{id:"754-snapchat"},"7.5.4 SNAPCHAT"),(0,n.kt)("h3",{id:"755-meta"},"7.5.5 Meta"),(0,n.kt)("h3",{id:"756-omniverse"},"7.5.6 Omniverse"),(0,n.kt)("h3",{id:"757-minecraft"},"7.5.7 Minecraft"),(0,n.kt)("p",null,"\u5f3a\u9879\u5728\u4e8e\u57fa\u4e8e\u50cf\u7d20\u5757\uff0c\u53ef\u4ee5\u81ea\u7531\u7ec4\u5408\uff0c\u81ea\u7531\u5ea6\u5927\uff0c\u53ef\u4ee5\u6784\u5efa\u4efb\u610f\u7ed3\u6784\u7684\u573a\u666f\u6216\u7269\u4f53\uff0c\u4e0d\u4f9d\u8d56\u4e8eDCC\u8f93\u51fa\uff0c\u56e0\u6b64\u771f\u6b63\u7684\u4f4e\u95e8\u69db"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4f7f\u7528\u5f3a\u5927\u7684DCC\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u50cf\u7d20\u5757\u677e\u6563\u7ec4\u5408\uff0c\u901a\u5e38\u65e0\u6cd5\u5bf9\u7269\u4f53\u7ea7\u8bbe\u7f6e\u73a9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e00\u5757\u5355\u72ec\u6784\u5efa\uff0c\u624b\u5de5\u91cf\u6781\u5927\uff0c\u5f53\u7136\u6709\u4e9b\u5c1d\u8bd5\u7528\u4e00\u4e9bDCC\u8f93\u51fa\u7684\u573a\u666f\u4f53\u7d20\u5316\u540e\u4f5c\u4e3a\u8f93\u5165")),(0,n.kt)("p",null,"Minecraft pc \u7f16\u8f91\u5668"),(0,n.kt)("p",null,"Minecraft MOD"),(0,n.kt)("p",null,"Minecraft \u7684\u6240\u6709\u5185\u5bb9\u90fd\u5728\u672c\u5730\uff0c\u8fdb\u5ea6\u9700\u8981\u81ea\u5df1\u5907\u4efd\uff0c\u5206\u4eab\u7684\u5185\u5bb9\u9700\u8981\u81ea\u5df1\u5b89\u88c5\u5728\u672c\u5730\u7279\u5b9a\u7684\u6587\u4ef6\u5939\uff0c\u7f51\u6613\u7684\u7248\u672c\u4f1a\u505a\u4e00\u4e9b\u8054\u7f51\u8d2d\u4e70"),(0,n.kt)("p",null,"\u4f7f\u7528\u56fa\u5b9a\u7684\u6587\u4ef6\u5939\u7ed3\u6784\uff0c\u5f88\u591a\u5185\u5bb9\u6df7\u5230\u4e00\u8d77\uff0c\u7ba1\u7406\u590d\u6742\u5ea6\u9ad8\uff0c\u5bb9\u6613\u9020\u6210\u5197\u4f59\u8d44\u6e90\uff0c\u4e0d\u65b9\u4fbf\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff0c\u4f8b\u5982\u6bcf\u4e2a\u72ec\u7acb\u7684json\u90fd\u5f15\u5165ID\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5220\u9664\u5bf9\u5e94\u7684\u8d44\u6e90\u8fd8\u9700\u8981\u89e3\u6790json\u6587\u4ef6\uff0c\u663e\u7136\u4e0d\u53ef\u80fd\uff0c\u8fd9\u4f7f\u5f97\u5907\u4efd\u4e5f\u4f1a\u62f7\u8d1d\u5197\u4f59\u6587\u4ef6\uff0c\u5982\u679c\u8d2d\u4e70\u4e86\u4e00\u4e2aPack\uff0c\u5219\u5728\u65b0\u7684\u521b\u4f5c\u8005\u5fc5\u987b\u5168\u90e8\u5bfc\u5165\u8be5Pack\uff0c\u8fd9\u662f\u4f20\u7edfUE\u548cUnity\u90a3\u79cd\u4f20\u7edf\u7684\u672c\u5730\u6587\u4ef6\u8d44\u6e90\u7ba1\u7406\u65b9\u5f0f\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u6309\u6587\u4ef6\u5939\u8fdb\u884c\u8d44\u6e90\u7ba1\u7406\uff0c\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u533a\u5206\u6587\u4ef6\u5939\u5185\u8d44\u6e90\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bb9\u6613\u5197\u4f59"),(0,n.kt)("li",{parentName:"ol"},"USD\u662f\u6309\u7167\u8d44\u6e90\u8fdb\u884c\u7ba1\u7406")),(0,n.kt)("p",null,"\u800cRealityWorld\u4f7f\u7528\u66f4\u52a0\u5148\u8fdb\u7684USD\u7ed3\u6784"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Molang: \u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u8ba9\u5f00\u53d1\u8005\u5199\u811a\u672c\uff1f")),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u539f\u56e0\u53ef\u80fd\u662f\u4e0d\u65b9\u4fbf\u7ba1\u7406\uff0c\u56e0\u4e3aMinecraft\u5b8c\u5168\u9650\u5b9a\u4e8e\u6570\u636e\u9a71\u52a8\uff0c\u5f00\u53d1\u8005\u80fd\u4fee\u6539\u7684\u662f\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u7ec4\u5408\u5f62\u6210\u65b0\u7684Entity")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u8005\u901a\u8fc7json\u7684\u5b9a\u4e49\u5b9e\u73b0\uff0c\u800c\u524d\u8005\u662f\u76f4\u63a5\u5728json\u4e2d\u7684\u5bf9\u8c61\u8fdb\u884c\u8d4b\u503c\u64cd\u4f5c\uff0c\u90a3\u4e48\u5982\u679c\u8981\u4f7f\u7528\u5355\u72ec\u7684\u811a\u672c\u6587\u4ef6\uff0c\u5219\u4f1a\u6d89\u53ca\u7684\u6570\u91cf\u975e\u5e38\u5927\uff0c\u8fd9\u4e9b\u811a\u672c\u6587\u4ef6\u600e\u4e48\u5173\u8054\uff0c\u5982\u679c\u9700\u8981\u624b\u52a8\u5173\u8054\u5c31\u5f15\u5165\u4e86\u590d\u6742\u6027\uff0c\u4f8b\u5982\u5728Roblox\u4e2d\u9700\u8981\u5c06\u811a\u672c\u624b\u52a8\u5173\u8054\u5230\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u800c\u5b9e\u4f53\u4e4b\u95f4\u5f80\u5f80\u8fd8\u6d89\u53ca\u5c42\u6b21\u8def\u5f84\u7ed3\u6784\uff0c\u5c31\u4f1a\u8fdb\u4e00\u6b65\u590d\u6742\u5316\uff0cMinecraft\u5219\u76f4\u63a5\u5c06\u811a\u672c\u5199\u5728\u5c5e\u6027\u8d4b\u503c\u7684\u5730\u65b9\uff0c\u7b80\u5316\u4e86\u5f88\u591a\u4e1c\u897f"),(0,n.kt)("p",null,"\u4f46\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u5f00\u53d1\u8005\u65e0\u6cd5\u81ea\u5b9a\u4e49\u884c\u4e3a\u65b9\u6cd5\uff0c\u4ed6\u53ea\u80fd\u662f\u5bf9\u56fa\u5b9a\u7684\u7ed3\u6784\u7684\u503c\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u65e0\u6cd5\u5b9a\u4e49\u65b0\u7684\u903b\u8f91"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8bbf\u95ee\u7cfb\u7edf\u5185\u5b58\u4e2d\u7684\u6e38\u620f\u72b6\u6001\u4e0e\u6570\u503c\uff0cMolang\u63d0\u4f9b\u4e86\u5927\u91cf\u7684Query function\u8fdb\u884c\u67e5\u8be2"),(0,n.kt)("p",null,"\u56e0\u6b64Molang\u662f\u4e00\u79cd\u57fa\u4e8e\u8868\u8fbe\u5f0f\u7684\u8bed\u8a00\uff1aexpression-based language "),(0,n.kt)("h3",{id:"758-wilder-world"},"7.5.8 Wilder World"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Wilder World")),(0,n.kt)("p",null,"Liquidity"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"One of the biggest problems in the NFT space is that the best content is reserved for the uber-wealthy. We are flipping this paradigm on its head by enabling fully fractionalized NFT ownership, which will not only drive more capital into the space but will make it available to a much wider audience.")),(0,n.kt)("p",null,"No Artist Fees"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Other platforms charge artists between 15% and 30%. We consider this is an antiquated way of thinking, older world not Wilder World. Instead, we have designed our native token to create value for all participants while redistributing wealth directly back into our Wilder community. There\u2019s no middleman or platform taking a cut of the artist\u2019s hard earned reward.")),(0,n.kt)("p",null,"\u4f20\u7edf\u6ca1\u6709\u73b0\u5b9e\u4ef7\u503c\u652f\u6491\u7684NFT\uff0c\u5927\u90e8\u5206\u7684\u4ef7\u503c\u6765\u6e90\u4e8e\uff0c\u6709\u70b9\u50cf\u4f20\u9500\u4e00\u6837\uff0c\u8f6c\u5356\uff0c\u65e9\u671f\u7684\u73a9\u5bb6\u8f6c\u5356\u7ed9\u540e\u7eed\u7684\u73a9\u5bb6\uff0c\u8d5a\u53d6\u5dee\u4ef7\uff0c\u800c\u540e\u7eed\u7684\u73a9\u5bb6\u8981\u60f3\u8d5a\u94b1\uff0c\u5fc5\u987b\u4e0d\u65ad\u6709\u4eba\u63a5\u9f99\uff0c\u7136\u540e\u4e00\u65e6\u5230\u4e86\u67d0\u4e9b\u4e0d\u53ef\u601d\u8bae\u7684\u4ef7\u503c\u5c31\u4e0d\u4f1a\u6709\u4eba\u63a5\u9f99"),(0,n.kt)("h2",{id:"76-\u533a\u5757\u94fe"},"7.6 \u533a\u5757\u94fe"),(0,n.kt)("h3",{id:"761-\u95ee\u9898"},"7.6.1 \u95ee\u9898"),(0,n.kt)("h4",{id:"7611-\u6210\u672c\u95ee\u9898"},"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u865a\u62df\u8d27\u5e01\u6709\u4e00\u90e8\u5206\u662f\u7531\u77ff\u673a\u4ea7\u751f\u7684\uff0c\u6536\u76ca\u5f52\u77ff\u4e3b\uff0c\u8fd9\u6837\u4ed6\u4eec\u624d\u6709\u5de8\u5927\u52a8\u529b\u548c\u7ecf\u6d4e\u5229\u76ca\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u4e5f\u624d\u80fd\u4fdd\u8bc1\u6574\u4e2a\u5206\u5e03\u5f0f\u8282\u70b9\u53ef\u4ee5\u5b89\u5168\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5149\u662f\u80fd\u6e90\u6d6a\u8d39"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u6210\u672c\u6d6a\u8d39")),(0,n.kt)("p",null,"\u76f8\u5f53\u5927\u4e00\u90e8\u5206\u865a\u62df\u8d27\u5e01\u90fd\u5206\u914d\u7ed9\u4e86\u77ff\u4e3b\uff0c\u6765\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8282\u70b9\u7684\u8fd0\u884c\uff0c\u5fc5\u987b\u7ed9\u4ed6\u4eec\u8db3\u591f\u7684\u5229\u76ca\u3002\u6240\u4ee5\u8fc7\u53bb\u7531\u4e2d\u4ecb\u6536\u53d6\u7684\u90a3\u4e9b\u8d39\u7528\u5176\u5b9e\u73b0\u5728\u8f6c\u79fb\u5230\u77ff\u4e3b\u624b\u4e0a\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u79cd\u8d39\u7528\u770b\u8d77\u6765\u4e0d\u662f\u7531\u7528\u6237 \u4ed8\u8d39\u7684\uff0c\u800c\u662f\u7ed9\u77ff\u4e3b\u7684\u4e00\u79cd\u201c\u4ee3\u5e01\u201d\uff0c\u4ed6\u53ef\u80fd\u73b0\u9636\u6bb5\u5e76\u4e0d\u503c\u94b1\uff0c\u800c\u662f\u5c06\u6765\u968f\u7740\u5e73\u53f0\u7684\u589e\u52a0\u800c\u5bfc\u81f4\u8fd9\u79cd\u4ee3\u5e01\u4f1a\u5347\u503c\u3002\u8fd9\u662f\u4e00\u79cd\u5bf9\u5c06\u6765\u6295\u673a\u7684\u884c\u4e3a\uff0c\u5982\u679c\u5e73\u53f0\u6ca1\u6709\u5efa\u7acb\u8d77\u6765\uff0c\u77ff\u4e3b\u6ca1\u6709\u4efb\u4f55\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u90a3\u5373\u4f7f\u5c06\u6765\u5e73\u53f0\u8d77\u6765\u4e86\uff0c\u8fd9\u4e9b\u77ff\u4e3b\u624b\u4e0a\u7684\u4ee3\u5e01\u7684\u5b9e\u9645\u5151\u73b0\u4f1a\u6709\u672a\u6765\u53c2\u5165\u8fdb\u6765\u7684\u4eba\u4e70\u5355\uff0c\u4e5f\u5c31\u662f\u672a\u6765\u90a3\u4e9b\u865a\u62df\u8d27\u5e01\u7684\u8d2d\u4e70\u8005\u6240\u652f\u4ed8\u7684\u8d39\u7528\u4e2d\uff0c\u5b9e\u9645\u6709\u90e8\u5206\u662f \u652f\u4ed8\u7ed9\u4e86\u65e9\u671f\u7684\u77ff\u4e3b\u6216\u8005\u65e9\u671f\u6d41\u901a\u7684\u4eba\u3002"),(0,n.kt)("p",null,"\u5982\u6b64\u4e0b\u53bb\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u5c06\u4f1a\u8d8a\u6765\u8d8a\u9ad8\uff0c\u800c\u540e\u52a0\u5165\u7684\u4eba\u9700\u8981\u652f\u4ed8\u66f4\u591a\u7684\u652f\u51fa\u7ed9\u524d\u9762\u7684\u6240\u6709\u4eba\u3002"),(0,n.kt)("p",null,"\u800c\u5982\u679c\u8fd9\u4e2a\u5e73\u53f0\u672c\u8eab\u5e76\u6ca1\u6709\u521b\u9020\u4ef7\u503c\u7684\u8bdd\uff0c\u90a3\u4e48\u8fd9\u4e2a\u6c14\u6ce1\u65e9\u665a\u4f1a\u7834\u706d\u3002\u9664\u975e\u8fd9\u4e2a\u5e73\u53f0\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u521b\u9020\u4e86\u65b0\u7684\u4ef7\u503c\uff0c\u6765\u5339\u914d\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5728\u540e\u7eed\u7684\u5e73\u53f0\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff0c\u6574\u4e2a\u8ba1\u7b97\u6301\u7eed\u5728\u8fd0\u884c\uff0c\u5e73\u53f0\u6301\u7eed\u5728\u7ed9\u8fd9\u4e9b\u77ff\u4e3b\u63d0\u4f9b\u66f4\u9ad8\u7684\u5956\u52b1\uff0c\u8fd9\u79cd\u5956\u52b1\u662f\u6301\u7eed\u4e0d\u65ad\u7684\uff0c\u800c\u4e14\u540e\u7eed\u7684\u5956\u52b1\u4ef7\u503c\u4f1a\u8d8a\u6765\u8d8a\u5927\uff0c\u90a3\u4e48\u600e\u6837\u624d\u80fd\u652f\u6491\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u8fd9\u79cd\u4e3a\u4e86\u7ef4\u6301\uff08\u91cd\u590d\u7684\uff09\u5206\u5e03\u5f0f\u8282\u70b9\u6240\u9700\u8981\u4ed8\u51fa\u7684\u9ad8\u6602\u7ecf\u6d4e\u5229\u76ca\u523a\u6fc0\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u96be\u4ee5\u627f\u53d7\uff0c\u5f53\u7136\u5e73\u53f0\u4e0d\u4f1a\u51fa\u4ec0\u4e48\u94b1\uff0c\u5b83\u4eec\u53ea\u9700\u8981\u53d1\u884c\u4e00\u4e9b\u4ee3\u5e01\uff0c\u7136\u540e\u628a\u751f\u6001\u505a\u5927\uff0c\u5b83\u4eec\u7684\u6536\u5165\u4e5f\u589e\u5927\uff0c\u4e5f\u8bb8\u5b83\u4eec\u4e2d\u9014\u5728\u9ad8\u70b9\u5957\u73b0\uff0c\u4f46\u662f\u5f53\u4ef7\u503c\u5f00\u59cb\u4e0b\u8dcc\u7684\u65f6\u5019\u5b83\u4eec\u4e5f\u6ca1\u6709\u4ec0\u4e48\u635f\u5931\uff0c\u56e0\u4e3a\u6574\u4e2a\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u5b83\u4eec\u5e76\u6ca1\u6709\u4ed8\u51fa\u4ec0\u4e48\u6210\u672c\uff0c\u77ff\u4e3b\u90fd\u662f\u5728\u4e3a\u4e86\u672a\u6765\u8d44\u6e90\u51fa\u94b1\u6765\u652f\u6301\u8fd9\u4e2a\u884c\u4e3a\u548c\u8fd0\u4f5c\u3002"),(0,n.kt)("p",null,"\u6bd4\u7279\u5e01\u7684\u5956\u52b1\u673a\u5236\u7c7b\u4f3c\u4e8e\u5f69\u7968\u7684\u673a\u5236\uff0c\u53ea\u6709\u80dc\u51fa\u7684\u673a\u5668\u624d\u4f1a\u83b7\u5f97\u6bd4\u7279\u5e01\u3002\u5f53\u7136\u8ddf\u5f69\u7968\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u79cd\u5f69\u7968\u8fd8\u4f1a\u5347\u503c\u3002"),(0,n.kt)("h4",{id:"7612-\u793e\u533a\u6cbb\u7406"},"7.6.1.2 \u793e\u533a\u6cbb\u7406"),(0,n.kt)("h4",{id:"7614-\u7cfb\u7edf\u5347\u7ea7"},"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7"),(0,n.kt)("h3",{id:"762-\u6982\u5ff5"},"7.6.2 \u6982\u5ff5"),(0,n.kt)("h4",{id:"7621-\u667a\u80fd\u5408\u7ea6"},"7.6.2.1 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("h4",{id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01"},"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01"),(0,n.kt)("h4",{id:"7623-ico"},"7.6.2.3 ICO"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7"},"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09"),(0,n.kt)("h2",{id:"77-machinations"},"7.7 Machinations"),(0,n.kt)("h2",{id:"78-render-graph"},"7.8 Render Graph"),(0,n.kt)("h3",{id:"781-worldrenderer-challenges"},"7.8.1 WorldRenderer challenges"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"explicit immediate mode\uff0c\u663e\u5f0f\u7684\u7acb\u5373\u6267\u884c\u6a21\u5f0f\u4e0d\u5229\u4e8e\u7edf\u7b79\u534f\u8c03"),(0,n.kt)("li",{parentName:"ul"},"explicit resource management\uff0c\u8d44\u6e90\u7ba1\u7406\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"tight coupling between rendering systems"),(0,n.kt)("li",{parentName:"ul"},"limited extensibility"),(0,n.kt)("li",{parentName:"ul"},"games teams must fork/diverge to customize\uff0c\u53ef\u590d\u7528\u6027\u5dee")),(0,n.kt)("h3",{id:"782-modular-worldrenderer-goals"},"7.8.2 Modular WorldRenderer goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"High-level knowledge of the full frame"),(0,n.kt)("li",{parentName:"ul"},"improved extensibility, 1) Decoupled and composable code modules; 2) automatic resource management"),(0,n.kt)("li",{parentName:"ul"},"Better visualizations and diagnostics")),(0,n.kt)("h2",{id:"79-mlir"},"7.9 MLIR"),(0,n.kt)("p",null,"MLIR\u7684\u76ee\u6807\u662f\u6784\u5efa\u53ef\u590d\u7528\u3001\u53ef\u6269\u5c55\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\uff0c\u4ece\u800c\u89e3\u51b3\u8f6f\u4ef6\u788e\u7247\u5316\u3001\u5f02\u6784\u786c\u4ef6\u7684\u7f16\u8bd1\u3001\u51cf\u5c11DSL\u7f16\u8bd1\u5668\u7684\u6784\u5efa\u65f6\u95f4\uff0c\u5e76\u5c06\u5df2\u6709\u7684\u7f16\u8bd1\u5668\u8fde\u63a5\u5728\u4e00\u8d77\u3002"),(0,n.kt)("p",null,"MLIR\u4f7f\u5404\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e0a\u7684\u4ee3\u7801\u751f\u6210\u3001\u8f6c\u6362\u5668\u3001\u4ee5\u53ca\u4f18\u5316\u5668\u53d8\u5f97\u7b80\u5355\uff0c\u5e76\u4e14\u8d2f\u7a7f\u5e94\u7528\u7a0b\u5e8f\u57df\u3001\u786c\u4ef6\u76ee\u6807\u3001\u4ee5\u53ca\u8fd0\u884c\u65f6\u73af\u5883\u3002"),(0,n.kt)("h3",{id:"791-\u4ecb\u7ecd"},"7.9.1 \u4ecb\u7ecd"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u9886\u57df\u6bd4\u8f83\u6210\u719f\u7684\u5e73\u53f0\u6280\u672f\uff0c\u4e00\u4e2a\u5171\u540c\u7684\u7279\u70b9\u5c31\u662f \uff1a\u201cone size fits all\u201d\uff0ca single abstraction level to interface with the system: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},'LLVM\uff0cis roughly "C with vectors"'),(0,n.kt)("li",{parentName:"ul"},'JVM\uff0cprovides an "object-oriented type system with garbage collector"')),(0,n.kt)("p",null,"\u4e0e\u6b64\u540c\u65f6\uff0c\u8bb8\u591a\u95ee\u9898\u53ef\u80fd\u9700\u8981\u66f4\u9ad8\u6216\u8005\u66f4\u4f4e\u7684\u5c42\u6b21\u62bd\u8c61\uff0c\u6bd4\u5982\u8bf4C++\u6e90\u4ee3\u7801\u7ea7\u522b\u7684\u5206\u6790\u4f7f\u7528LLVM IR\u5c31\u4f1a\u6bd4\u8f83\u56f0\u96be\uff0c\u8bb8\u591a\u8bed\u8a00\u5305\u62ecSwift\u3001Rust\u3001Julia\u3001Fortran\u7b49\u90fd\u5f00\u53d1\u4e86\u81ea\u5df1\u7684IR\u4ee5\u89e3\u51b3\u4e00\u4e9b\u9886\u57df\u7279\u5b9a\u95ee\u9898\uff0c\u6bd4\u5982\u4e00\u4e9b\u8bed\u8a00/\u5e93\u7279\u5b9a\u7684\u4f18\u5316\u3001\u4e00\u4e9b\u57fa\u4e8e\u6d41\u7684\u7c7b\u578b\u68c0\u6d4b\uff0c\u8fd8\u6709\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684ML graphs\u7b49\u3002"),(0,n.kt)("p",null,"\u5f00\u53d1\u8fd9\u79cd\u9886\u57df\u7279\u5b9a\u7684IR\u7f3a\u4e4f\u6bd4\u8f83\u7a0b\u5e8f\u7684\u4e00\u4e9b\u5de5\u5177\uff0c\u81ea\u884c\u5f00\u53d1\u7684\u5de5\u7a0b\u5b9e\u73b0\u5f80\u5f80\u8d28\u91cf\u6bd4\u8f83\u4f4e\u3001\u7f16\u8bd1\u6162\u3001\u7f3a\u4e4f\u597d\u7684\u8c03\u8bd5\u65b9\u6cd5\u3001\u4efb\u610f\u51fabug\u7b49\u4e0d\u7a33\u5b9a\u56e0\u7d20"),(0,n.kt)("p",null,"The MLIR project1 aims to directly tackle these program- ming language design and implementation challenges\u2014by making it cheap to define and introduce new abstraction levels, and provide \u201cin the box\u201d infrastructure to solve common compiler engineering problems. MLIR does this by "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"(1) \u628a\u57fa\u4e8eSSA\u7684IR\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u6807\u51c6\u5316"),(0,n.kt)("li",{parentName:"ul"},"(2) \u63d0\u4f9b\u4e00\u4e2a\u5b9a\u4e49\u7cfb\u7edf\u7528\u4e8e\u5b9a\u4e49IR dialect"),(0,n.kt)("li",{parentName:"ul"},"(3) \u63d0\u4f9b\u4e00\u4e9b\u5e7f\u6cdb\u7684\u57fa\u7840\u8bbe\u65bd\uff0c\u5305\u62ecdocumentation, parsing and printing logic, location tracking, multithreaded compilation support, pass management, etc.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0cMLIR\u5f15\u5165\u7684\u4e00\u4e9b\u7cfb\u7edf\u90fd\u662f\u57fa\u4e8e\u4f20\u7edf\u7684\u4e00\u4e9b\u6982\u5ff5\u548c\u7b97\u6cd5\u4e4b\u5916\u7684\uff0c\u8fd9\u7ed9\u5b66\u672f\u7814\u7a76\u5e26\u6765\u4e86\u5f88\u591a\u673a\u4f1a\uff0c\u4e00\u4e9b \u539f\u5219\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Parsimony:")," Apply Occam\u2019s razor to builtin semantics, concepts, and programming interface. Harness both intrin- sic and incidental complexity by abstracting properties of operations and types. Specify invariants once, but verify correctness throughout. Query properties in the context of a given compilation pass. With very little builtin, this opens the door to extensibility and customization."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Traceability:")," Retain rather than recover information. Declare rules and properties to enable transformation, rather than step wise imperative specification. Extensibility comes with generic means to trace information, enforced by extensive verification. Composable abstractions stem from \u201cglassboxing\u201d their properties and separating their roles\u2014type, control, data flow, etc."),(0,n.kt)("li",{parentName:"ul"},"Progressivity:* Premature lowering is the root of all evil. Beyond representation layers, allow multiple transformation paths that lower individual regions on demand. Together with abstraction-independent principles and interfaces, this enables reuse across multiple domains.")),(0,n.kt)("p",null,"\u8d21\u732e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4e00\u4e9b\u5df2\u7ecf\u88ab\u8bc1\u660e\u7684\u8bbe\u8ba1\u548c\u5de5\u7a0b\u539f\u5219\uff0c\u5b9a\u4f4d\u51fa\u7528\u4e8e\u89e3\u51b3\u53ef\u6269\u5c55\u548c\u6a21\u5757\u5316\u7684\u7f16\u8bd1\u7cfb\u7edf\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6ee1\u8db3\u8fd9\u4e9b\u539f\u5219\u7684\u5168\u65b0\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u63cf\u8ff0"),(0,n.kt)("li",{parentName:"ul"},"\u63a2\u7d22\u5df2\u6709\u7684\u5f15\u7528\uff0c\u5c55\u793a\u8fd9\u79cd\u57fa\u7840\u8bbe\u65bd\u7684\u901a\u7528\u6027")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Where did MLIR come from\uff1f")),(0,n.kt)("p",null,"\u89c2\u5bdf\u5230\u5f53\u4eca\u7684\u5927\u591a\u6570\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u57fa\u672c\u4e0a\u90fd\u7531\u4e00\u4e9b\u4e0d\u540c\u7684\u7f16\u8bd1\u5668\u3001\u56fe\u6280\u672f\u3001\u8fd0\u884c\u65f6 \u7ec4\u6210\uff0c\u5e76\u4e14\u5b83\u4eec\u4e4b\u95f4\u5e76\u6ca1\u6709\u5171\u4eab\u4e00\u4e9b\u901a\u7528\u7684\u57fa\u7840\u8bbe\u65bd\u6216\u8005\u8bbe\u8ba1\u539f\u5219\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u5f00\u53d1\u6210\u672c\uff0c\u53ef\u7ef4\u62a4\u6027\u7b49\u7b49\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5f88\u5feb\u6211\u4eec\u610f\u8bc6\u5230\u7f16\u8bd1\u5668\u5de5\u4e1a\u4e2d\u5b58\u5728\u76f8\u4f3c\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5df2\u6709\u7684\u7cfb\u7edf\u5982LLVM\u5728\u4e0d\u540c\u7684\u8bed\u8a00\u4e4b\u95f4\u8fdb\u884c\u7edf\u4e00\u548c\u96c6\u6210\u65b9\u9762\u975e\u5e38\u6210\u529f\uff0c\u4f46\u662f\u4e00\u4e9b\u9ad8\u5c42\u6b21\u7684\u8bed\u8a00\u901a\u5e38\u4f1a\u6784\u5efa\u81ea\u5df1\u7684\u9ad8\u5c42\u62bdIR\uff0c\u4ee5\u53ca\u4e3a\u8fd9\u4e9b\u9ad8\u5c42\u6b21\u62bd\u8c61\u6784\u5efa\u76f8\u4f3c\u7684\u6280\u672f"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u540c\u65f6\uff0cLLVM\u793e\u533a\u5374\u5728\u6323\u624e\u4e8e\u5e76\u884c\u6784\u9020\u7684\u8868\u8ff0\uff0c\u4ee5\u53ca\u600e\u6837\u5171\u4eab\u524d\u7aef\u7684lowering infrastructure")),(0,n.kt)("h3",{id:"792-\u8bbe\u8ba1\u539f\u5219"},"7.9.2 \u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Little Builtin, Everything Customizable ","[Parsimony]")),(0,n.kt)("p",null,"\u6574\u4e2a\u7cfb\u7edf\u57fa\u4e8e\u51e0\u4e2a\u6700\u5c11\u7684\u57fa\u7840\u6982\u5ff5\uff0c\u8ba9\u5927\u90e8\u5206\u4e2d\u95f4\u8868\u8ff0\u53ef\u4ee5\u5b8c\u5168\u81ea\u5b9a\u4e49\u3002IR\u4e2d\u6700\u5e38\u7528\u7684\u4e00\u4e9b\u62bd\u8c61\uff0c\u5982types\u3001operations\u3001\u4ee5\u53caattributes\u5e94\u8be5\u7528\u6765\u8868\u8ff0\u8fd9\u4e9bIR\uff0c\u8fd9\u6837\u4e00\u81f4\u6027\u5c31\u6bd4\u8f83\u597d\u3002\u53ef\u5b9a\u5236\u6027\u80fd\u591f\u9002\u5e94\u9700\u6c42\u7684\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u5e94\u8be5\u4f7f\u7528\u4e00\u4e9b\u53ef\u590d\u7528\u7684\u7ec4\u4ef6\u6765\u6784\u5efaIR\uff0c\u800c\u8ba9\u8bed\u8a00\u62bd\u8c61\u652f\u6301\u8fd9\u4e9b\u4e2d\u95f4\u8bed\u8a00\u7684\u8bed\u6cd5\u548c\u8bed\u4e49\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6210\u529f\u7684\u53ef\u5b9a\u5236\u6027\u7684\u6807\u51c6\u662f\uff0c\u5b83\u6709\u80fd\u529b\u53bb\u8868\u8fbe\u4e0d\u540c\u7684\u62bd\u8c61\uff0c\u6bd4\u5982\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u56fe\u3001\u5404\u79cdAST\u3001\u6570\u5b66\u62bd\u8c61\u4e2d\u7684\u591a\u6001\u7f16\u8bd1\u3001\u63a7\u5236\u6d41\u56fe\uff08Control Flow Graph\uff09\u3001\u6307\u4ee4\u7ea7\u7684IR\u5982LLVM IR\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7531\u4e8e\u6bd4\u8f83\u7cdf\u7cd5\u7684\u517c\u5bb9\u6027\u62bd\u8c61\uff0c\u53ef\u5b9a\u5236\u80fd\u529b\u5e26\u6765\u5185\u90e8\u788e\u7247\u5316\u7684\u98ce\u9669\uff0c\u8fd9\u770b\u8d77\u6765\u6ca1\u6709\u4ec0\u4e48\u597d\u7684\u6280\u672f\u65b9\u6848\uff0c\u4f46\u662f\u7cfb\u7edf\u5e94\u8be5\u9f13\u52b1\u6211\u4eec\u8bbe\u8ba1\u53ef\u590d\u7528\u7684\u62bd\u8c61\uff0c\u5e76\u4e14\u5047\u8bbe\u6211\u4eec\u8bbe\u8ba1\u7684\u62bd\u8c61\u53ef\u80fd\u4f1a\u88ab\u7528\u4e8e\u8d85\u51fa\u6211\u4eec\u521d\u59cb\u60f3\u6cd5\u7684\u8303\u56f4\uff0c\u4ee5\u4fbf\u4e8e\u66f4\u597d\u5730\u517c\u5bb9\u5916\u90e8\u62bd\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SSA and Regions ","[Parsimony]")),(0,n.kt)("p",null,"\u5c3d\u7ba1SSA\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u5b83\u4eec\u5927\u591a\u662f\u4e00\u4e9b\u6bd4\u8f83\u5e73\u7684\u3001\u7ebf\u6027\u7684CFG\uff0c\u4f46\u662f \u4e00\u4e9b \u9ad8\u5c42\u6b21\u7684\u62bd\u8c61\u5374\u5f15\u5165\u5c06\u5d4c\u5957\u7684\u533a\u5757\uff08nested regions\uff09\u4f5c\u4e3a\u7b2c\u4e00\u7b49\u516c\u6c11\u3002\u4e3a\u4e86\u652f\u6301\u5f02\u6784\u7f16\u8bd1\uff0c\u7cfb\u7edf \u5fc5\u987b\u652f\u6301\u80fd\u591f\u8868\u8fbe\u7ed3\u6784\u5316\u7684\u63a7\u5236\u6d41\u3001\u5e76\u884c\u7ed3\u6784\u3001\u6e90\u8bed\u8a00\u4e2d\u7684 \u95ed\u5305\uff0c\u4ee5\u53ca\u8bb8\u591a\u5176\u4ed6\u76ee\u7684\u3002\u5176\u4e2d\u4e00\u4e2a\u7279\u522b\u7684\u6311\u6218\u662f\u4f7f\u57fa\u4e8eCFG\u7684\u5206\u6790\u548c\u8f6c\u6362\u7ec4\u5408\u80fd\u591f\u57fa\u4e8enested region\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u5fc5\u987b\u8981\u727a\u7272\u4e00\u4e9bLVVM\u7684\u4e00\u822c\u751a\u81f3\u6bd4\u8f83\u6743\u5a01\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Maintain Higher-Level Semantics ","[Progressivity]",":")),(0,n.kt)("p",null,"\u7cfb\u7edf\u5e94\u8be5\u4fdd\u7559\u4e00\u4e9b\u7ed3\u6784\u4fe1\u606f\u5e2e\u52a9\u4e0b\u4e00\u5c42\u6b21\u8fdb\u884c\u5206\u6790\u548c\u4f18\u5316\uff0c\u8fd9\u79cd\u4fe1\u606f\u5e94\u8be5\u6e10\u8fdb\u5f0f\u5730\u5411\u4e0b\u4f20\u9012\uff0c\u7ed3\u6784\u4fe1\u606f\u7684\u4e22\u5f03\u5e94\u8be5\u4f7f\u5f97\u4e0b\u4e00\u5c42\u62bd\u8c61\u521a\u597d\u4e0d\u9700\u8981\u8fd9\u6837\u7684\u7ed3\u6784\u4fe1\u606f\u3002\u4f8b\u5982\u5728transformation\u9636\u6bb5\uff0c\u6240\u6709\u7684\u7ed3\u6784\u5316\u63a7\u5236\u6d41\u4fe1\u606f\uff0c\u4f8b\u5982\u5faa\u73af\u7ed3\u6784\u90fd\u9700\u8981\u4fdd\u7559\uff0c\u79fb\u9664\u8fd9\u6837\u7684\u4fe1\u606f\u5219\u610f\u5473\u7740\u540e\u7eed\u4e0d\u4f1a\u518d\u53d1\u751ftransformation\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ed3\u6784\u662f\uff0c\u4e0d\u540c\u62bd\u8c61\u5c42\u6b21\u7684\u6982\u5ff5\u4f1a\u5904\u4e8e\u540c\u4e00\u4e2aIR\u4e2d\uff0c\u4f7f\u5f97\u4f4e\u5c42\u6b21\u7684\u62bd\u8c61\u53ef\u4ee5\u4f7f\u7528\u9ad8\u5c42\u6b21\u7684\u4e00\u4e9b\u4fe1\u606f\u6765\u8f85\u52a9\u8fdb\u884c\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u7ed3\u6784\u662f\u7cfb\u7edf\u5e94\u8be5\u652f\u6301\u6e10\u8fdb\u5f0f\u5730lowering\uff0c\u5728\u591a\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e4b\u95f4\u4ee5small steps\u8fdb\u884c\u63a8\u8fdb\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u7684\u7f16\u8bd1\u5668\u5176\u5b9e\u4e5f\u5df2\u7ecf\u5305\u542b\u4e86\u5f88\u591a\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Declaration and Validation [Parsimony and Traceability")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Source Location Tracking ","[Traceability]")),(0,n.kt)("h3",{id:"793-mlir-structure"},"7.9.3 MLIR structure"),(0,n.kt)("p",null,"MLIR\u8bed\u8a00\u7528\u4e8e\u63cf\u8ff0high-level structure\uff0c\u8fd9\u4e2a\u7ed3\u6784\u5176\u5b9e\u662f\u4e00\u68f5\u6811\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u5305\u542boperation\u548coperand\u3002\u6240\u6709\u5bf9\u8fd9\u68f5\u6811\u7684\u64cd\u4f5c\uff0c\u6bd4\u5982 \u8f6c\u6362\u3001\u4f18\u5316\u7b49\uff0c\u90fd\u53ef\u4ee5\u8868\u793a\u4e3a\u5bf9\u6574\u4e2a\u6811\u7684\u904d\u5386\uff0cMLIR\u901a\u8fc7Pass\u6765\u5b9e\u73b0\u904d\u5386\uff0c\u6bcf\u4e2apass\u4ece\u67d0\u4e2aoperation\u5f00\u59cb\uff0c\u5927\u591a\u6570\u65f6\u5019\u6700\u9876\u5c42\u7684operation\u662fModuleOp\uff0cPassManager\u5c31\u88ab\u8bbe\u8ba1\u4e3a\u9650\u5236\u5176operation \u4e3aModuleOp\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void runOnOperation() override {\n Operation *op = getOperation();\n resetIndent();\n printOperation(op);\n }\n")),(0,n.kt)("p",null,"\u6574\u4e2a IR\u662f\u5d4c\u5957\u7684\uff0c\u9664\u4e86operation\uff0c\u8fd8\u6709 \u5176\u4ed6\u4e00\u4e9b\u5c42\u6b21\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"operation\uff0c\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u5d4c\u5957\u7684Regions"),(0,n.kt)("li",{parentName:"ul"},"Region\uff0c\u6709\u4e00\u4e2aBlock\u96c6\u5408\u5217\u8868\u7ec4\u6210"),(0,n.kt)("li",{parentName:"ul"},"Block\uff0c\u5305\u542b\u4e00\u7ec4operation\u7684\u96c6\u5408")),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f8b\u6570\u636e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"visiting op: 'builtin.module' with 0 operands and 0 results\n 1 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 3 operations\n visiting op: 'dialect.op1' with 0 operands and 4 results\n 1 attributes:\n - 'attribute name' : '42 : i32'\n 0 nested regions:\n visiting op: 'dialect.op2' with 0 operands and 0 results\n 2 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 1 operations\n visiting op: 'dialect.innerop1' with 2 operands and 0 results\n 0 nested regions:\n Region with 3 blocks:\n Block with 0 arguments, 2 successors, and 2 operations\n visiting op: 'dialect.innerop2' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop3' with 3 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop4' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop5' with 0 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop6' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop7' with 0 operands and 0 results\n 0 nested regions:\n 0 nested regions:\n")),(0,n.kt)("h3",{id:"794-llvm-irspir-vmlir"},"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"},"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"))),(0,n.kt)("h4",{id:"7941-llvm-ir"},"7.9.4.1 LLVM IR"),(0,n.kt)("p",null,"IR\u53ea\u662f\u7a0b\u5e8f\u7684\u4e00\u79cd\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u8bbe\u8ba1\u6ce8\u91cd\u652f\u6301\u53d8\u6362\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"IR\u7684\u4e09\u79cd\u5f62\u6001\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u8868\u793a\uff0c\u7528\u4e8e\u9ad8\u6548\u7684\u5206\u6790\u4e0e\u53d8\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\uff1a\u7528\u4e8e\u5b58\u50a8\u548c\u4ea4\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u672c\u8868\u793a\uff1a\u7528\u4e8e \u9605\u8bfb\u548c\u7ea0\u9519")),(0,n.kt)("p",null,"LLVM\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u5fc3\u5316\u548c\u5404\u79cd\u884d\u751f\uff1aLLVM IR\u662f\u524d\u540e\u7aef\u89e3\u8026\u7684\u57fa\u7840\uff0c\u5904\u4e8e\u6838\u5fc3/\u4e2d\u5fc3\u5730\u4f4d\uff0c\u5b8c\u6574\u7684\u7f16\u8bd1\u8def\u5f84\u5fc5\u987b\u7ecf\u8fc7LLVM IR\uff0c\u5bfc\u81f4\u5176\u8fdb\u5316\u7f13\u6162"),(0,n.kt)("li",{parentName:"ul"},"\u6f14\u8fdb\u4e0e\u517c\u5bb9\u6027\uff1a\u9a71\u52a8\u7684\u5347\u7ea7\u901a\u5e38\u65e0\u6cd5\u5f97\u5230\u4fdd\u8bc1\uff0c\u56e0\u6b64\u9a71\u52a8\u4f9d\u8d56\u7684LLVM IR\u5e93\u4e5f\u53ef\u80fd\u6c38\u8fdc\u5f97\u4e0d\u5230\u5347\u7ea7")),(0,n.kt)("h4",{id:"7942-spir-v"},"7.9.4.2 SPIR-V"),(0,n.kt)("p",null,"SPIR-V\u662fKhronos API\u5171\u7528\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u5305\u62ecVulkan\uff0cOpenGL\uff0cOpenCLass\u7b49\uff0cKhronos group\u7684\u6807\u8bed\u662f\uff1a\u94fe\u63a5\u8f6f\u4ef6\u4e0e\u786c\u4ef6\u3002"),(0,n.kt)("p",null,"LLVM IR\u76f8\u5bf9\u4e8eSPIR-V\u6709\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u540c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u6709\u6bd4\u8f83\u597d\u7684\u7248\u672c\u7ba1\u7406\u548c\u6269\u5c55\u7ba1\u7406\uff0c\u4e5f\u6709\u7a33\u5b9a\u7684\u5b57\u8282\u7801\u8868\u793a"),(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u4e3b\u8981\u7528\u4e8e\u9a71\u52a8\u5185\u90e8\u7684\u4e8c\u6b21\u7f16\u8bd1\uff08\u5728\u7ebf\u7f16\u8bd1\uff09")),(0,n.kt)("p",null,"\u7a33\u5b9a\u7684\u5b57\u8282\u7801\uff0c\u5b8c\u6574\u7684 GPU \u7f16\u8bd1\u5668\u88ab\u5206\u4e3a\u4e24\u90e8\u5206\u2014\u2014\u9996\u5148\u901a\u8fc7\u79bb\u7ebf\u5de5\u5177\u94fe\u4ece\u9ad8\u5c42\u6b21\u6e90\u4ee3\u7801\u751f\u6210 SPIR-V\uff0c\u7136\u540e\u901a\u8fc7\u9a71\u52a8\u5185\u90e8\u7f16\u8bd1\u5668\u5c06 SPIR-V \u5728\u7ebf\u7f16\u8bd1\u6210\u673a\u5668\u7801\u3002\u867d\u7136\u50cf LLVM IR \u4e00\u6837\u5728\u6574\u4e2a\u7f16\u8bd1\u6d41\u7a0b\u4e2d\u5904\u4e8e\u201c\u4e2d\u95f4\u201d\u4f4d\u7f6e\uff0cSPIR-V \u66f4\u4fa7\u91cd\u4e8e\u9a71\u52a8\u5185\u90e8\u4e8c\u6b21\u7f16\u8bd1\u7684\u9ad8\u6548\uff0c\u56e0\u4e3a\u8fd9\u4e00\u6b65\u5728\u8fd0\u884c\u65f6\u8fdb\u884c\u3002\u6240\u4ee5 SPIR-V \u7684\u6838\u5fc3\u662f\u5176\u5b57\u8282\u7801\u3002\u5176\u7f16\u7801\u6709\u5f88\u591a\u7b80\u5316\u9a71\u52a8\u4e8c\u6b21\u7f16\u8bd1\u7684\u8003\u91cf\uff0c\u50cf\u662f\u7528\u5404\u79cd\u63d0\u524d\u7684\u663e\u793a\u58f0\u660e\u6765\u907f\u514d\u8fd0\u884c\u65f6\u590d\u6742\u7684\u5206\u6790\u3002SPIR-V \u5e76\u6ca1\u6709\u5728\u89c4\u8303\u4e2d\u6307\u5b9a\u5185\u5b58\u8868\u793a\u6216\u8005\u6587\u672c\u8868\u793a\uff0c\u8fd9\u4e9b\u90fd\u662f\u5b9e\u73b0 SPIR-V \u6807\u51c6\u89c4\u8303\u7684\u5de5\u5177\u94fe\u81ea\u884c\u5b9a\u4e49\u7684\u3002\u6bd4\u5982 SPIRV-Tools \u6709\u5176\u81ea\u5df1\u7684\u5185\u5b58\u8868\u793a\u548c\u6587\u672c\u8868\u793a\uff0c \u540c\u6837 MLIR \u4e2d\u7684 SPIR-V dialect \u4e5f\u662f\u3002"),(0,n.kt)("p",null,"GPU\u9886\u57df\u4e13\u7528\uff1a\u5176\u5b9e SPIR-V \u7684 IR \u90e8\u5206\u548c LLVM IR \u76f8\u5dee\u5e76\u4e0d\u592a\u5927\u3002SPIR-V \u501f\u9274\u4e86\u5f88\u591a LLVM IR \u7684\u8bbe\u8ba1\u2014\u2014\u5b83\u540c\u6837\u662f\u7531\u63a7\u5236\u6d41\u3001\u57fa\u672c\u5757\u3001\u4ee5\u53ca\u9759\u6001\u5355\u8d4b\u503c\u6765\u8868\u793a\u7a0b\u5e8f\u3002\u6307\u4ee4\u7684\u7c92\u5ea6\u548c LLVM IR \u4e5f\u76f8\u5dee\u4e0d\u5927\u3002SPIR-V \u4e2d\u72ec\u7279\u7684\u90e8\u5206\u5728\u4e8e\u5bf9\u5f88\u591a GPU \u6982\u5ff5\u7684\u539f\u751f\u652f\u6301\u3002\u8fd9\u79cd\u652f\u6301\u901a\u8fc7\u5f88\u591a SPIR-V \u72ec\u6709\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982 decorations, builtins, \u4ee5\u53ca\u7279\u6b8a\u7684\u6307\u4ee4\uff08\u50cf\u662f\u5bfc\u6570\u8ba1\u7b97\u3001\u56fe\u50cf\u53d6\u6837\uff09\u3002\u53e6\u5916\u4e3a\u4e86\u652f\u6301\u56fe\u5f62\u56fe\u50cf\u548c\u9ad8\u6027\u80fd\u8ba1\u7b97\u7684\u4e24\u79cd\u4f7f\u7528\u573a\u666f\uff0c SPIR-V \u4e2d\u6709\u8bb8\u591a\u6267\u884c\u6a21\u578b\u548c\u6a21\u5f0f\u3002\u5f53\u7136\uff0c\u5bf9\u56fe\u5f62\u56fe\u50cf\u4e5f\u6709 structured control flow \u7684\u7279\u6b8a\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"7943-mlir"},"7.9.4.3 MLIR"),(0,n.kt)("p",null,"\u4e00\u4e2a GPU \u4e3a\u4e3b\u7684\u6807\u51c6\u89c4\u8303\u9700\u8981\u539f\u751f\u652f\u6301\u5404\u79cd GPU \u6982\u5ff5\uff0c\u80fd\u591f\u63d0\u4f9b\u4e0d\u540c\u7b49\u7ea7\u7684\u6269\u5c55\u9700\u6c42\uff0c \u4ee5\u53ca\u63d0\u4f9b\u7a33\u5b9a\u548c\u517c\u5bb9\u7684\u5b57\u8282\u7801\u3002\u8fd9\u4e9b\u9700\u6c42\u5e76\u4e0d\u7b26\u5408 LLVM IR \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u6240\u4ee5 Khronos Group \u63a8\u51fa\u4e86 SPIR-V\u3002\u4f46\u662f\u8bbe\u8ba1\u4e00\u5957\u4e2d\u95f4\u8868\u793a\u53ea\u662f\u4e2a\u5f00\u59cb\uff0c\u56f4\u7ed5\u5176\u5f00\u53d1\u548c\u7ef4\u62a4\u6574\u5957\u5de5\u5177\u94fe\u9700\u8981\u6301\u7eed\u4e0d\u65ad\u7684\u5de5\u7a0b\u6295\u5165\u3002SPIR-V \u4e0e LLVM IR \u5b8c\u5168\u65e0\u5173\uff0cSPIR-V \u7684\u7f16\u8bd1\u5668\u6808\u65e0\u6cd5\u5229\u7528\u73b0\u6709\u7684 LLVM \u5e93\u3002\u6240\u4ee5 SPIR-V \u7684\u6574\u4e2a\u6808\u662f\u4ece\u5934\u5f00\u59cb\u72ec\u7acb\u5f00\u53d1\u7684\uff0c\u4ece\u6c47\u7f16\u3001\u53cd\u6c47\u7f16\uff0c\u4e00\u6b65\u6b65\u5230\u5404\u79cd\u8bed\u8a00\u7684\u7f16\u8bd1\u5668\u548c\u4f18\u5316\u3002\u800cMLIR\u6070\u597d\u53ef\u4ee5\u5e2e\u52a9\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316 (infrastructurization)"),"\uff0cMLIR \u662f\u7528\u6765\u5f00\u53d1\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u3002\u5b83\u63d0\u4f9b\u4e00\u7cfb\u5217\u53ef\u590d\u7528\u7684\u6613\u6269\u5c55\u7684\u57fa\u7840\u7ec4\u4ef6\uff0c\u7528\u6765\u642d\u5efa\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u3002\u5728 LLVM IR \u548c SPIR-V \u4e2d\uff0c\u6211\u4eec\u6709\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u4e2d\u542b\u6709\u5b8c\u5907\u7684\u6307\u4ee4\u96c6\u6765\u7f16\u8bd1\u6240\u6709\u7684 CPU \u548c GPU \u7a0b\u5e8f\u3002MLIR \u4e2d\u5219\u6ca1\u6709\u5b8c\u5168\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\u7684\u4e2d\u95f4\u8868\u793a\u3002MLIR \u63d0\u4f9b\u57fa\u7840\u8bbe\u65bd\u6765\u5e2e\u52a9\u5b9a\u4e49 operation \u4ee5\u53ca\u5c06\u903b\u8f91\u76f8\u5173\u7684 operation \u7ec4\u5408\u6210 dialect\u3002\u53e6\u5916\uff0cMLIR \u4e5f\u63d0\u4f9b\u4e00\u4e9b\u666e\u9002\u7684 pattern \u6216\u8005 pass\uff0c\u8fd9\u4e9b pattern \u6216\u8005 pass \u5e76\u4e0d\u4e0e\u5177\u4f53\u7684 operation \u7ed1\u5b9a\uff0c\u80fd\u591f\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"\u65e0\u8bba\u662f\u5bf9 operation \u8fd8\u662f pattern/pass \u7684\u652f\u6301\u90fd\u8981\u6c42 MLIR \u4ee5\u66f4\u52a0\u7ec6\u7684\u7c92\u5ea6\u770b\u5f85\u7f16\u8bd1\u5668\u3002\u5728 MLIR \u4e2d\uff0coperation \u4e0d\u518d\u662f\u6700\u57fa\u7840\u7684\u90e8\u4ef6\uff0c\u7c92\u5ea6\u8fdb\u4e00\u6b65\u7ec6\u5316\u5230\u7c7b\u578b, \u503c, attribute, region, \u4ee5\u53ca interface (\u4f8b\u5982 attribute/type/operation interface).","[8]"),(0,n.kt)("p",null,"Operation \u53ef\u4ee5\u6709\u4efb\u610f\u6570\u91cf\u7684\u8f93\u5165\u3001\u8f93\u51fa\u3001attribute\uff0c\u5e76\u5305\u542b\u4efb\u610f\u6570\u91cf\u7684 region\u3002\u5176\u4e2d region \u80fd\u591f\u8868\u793a operation \u4e4b\u95f4\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u4ece\u800c\u7b80\u5316\u7f16\u8bd1\u5668\u7684\u5206\u6790\u548c\u8f6c\u6362\u3002Operation \u53ef\u4ee5\u5b9e\u73b0 operation interface\uff0cpattern \u548c pass \u7ed1\u5b9a\u7684\u662f operation interface\uff0c\u7531\u6b64\u800c\u5b9e\u73b0\u4e0e\u5177\u4f53 operation \u7684\u89e3\u7ed1\u5e76\u505a\u5230\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"MLIR \u91cc\u9762\u7684\u6982\u5ff5\u90fd\u8bbe\u8ba1\u7684\u6bd4\u8f83\u62bd\u8c61\uff0c\u76ee\u7684\u662f\u80fd\u6bd4\u8f83\u597d\u5730\u6620\u5c04\u5230\u4e0d\u540c\u7684\u9886\u57df\u548c\u573a\u666f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dialects, dialects, dialects"),"\uff0c\u5f53\u7136\uff0c\u8fd9\u5957\u57fa\u7840\u8bbe\u65bd\u5b58\u5728\u7684\u76ee\u7684\u662f\u5e2e\u52a9\u642d\u5efa\u6700\u7ec8\u7f16\u8bd1\u5668\u3002\u6211\u4eec\u5728\u5199 C++ \u7a0b\u5e8f\u7684\u7684\u65f6\u5019\u4f1a\u8c03\u7528 STL \u6216\u8005\u66f4\u52a0\u9ad8\u5c42\u6b21\u7684\u5e93\uff0c\u5f88\u5c11\u4f1a\u4ece\u5934\u5f00\u59cb\u5b9e\u73b0\u6240\u6709\u7684\u7ec6\u8282\u3002\u53e6\u5916\uff0c\u57fa\u7840\u8bbe\u65bd\u4e5f\u9700\u8981\u4e0e\u5176\u652f\u6301\u7684\u9886\u57df\u534f\u540c\u53d1\u5c55\uff0c\u56e0\u4e3a\u4f7f\u7528\u573a\u666f\u4e2d\u4f1a\u63d0\u4f9b\u5f88\u591a\u9700\u6c42\u3002\u56e0\u6b64\uff0cMLIR \u4ee3\u7801\u5e93\u4e2d\u81ea\u5e26\u5f88\u591a\u7528\u6765\u7ed9\u5404\u79cd\u5c42\u7ea7\u6982\u5ff5\u5efa\u6a21\u7684 dialect\u3002","[9]"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684 dialect \u751f\u6001\u76ee\u524d\u8fd8\u5728\u6269\u5f20\u6f14\u8fdb\u9636\u6bb5\uff0c\u4f46 dialect \u4e4b\u95f4\u7684\u7ec4\u7ec7\u7ed3\u6784\u4ee5\u53ca\u6709\u4e9b dialect \u5df2\u7ecf\u76f8\u5bf9\u7a33\u5b9a\u4e86\u3002"),"\u6bd4\u5982\u6211\u4eec\u6709 LLVM \u548c SPIR-V dialect \u4f5c\u4e3a\u4e0e\u5176\u4ed6\u7cfb\u7edf\u8f6c\u6362\u7684\u8fb9\u754c dialect\u3002\uff08\u5176\u5b9e MLIR \u53ef\u4ee5\u540c\u65f6\u8868\u793a LLVM IR \u548c SPIR-V \u8fd9\u4e00\u70b9\u4e5f\u8868\u660e\u4e86 MLIR \u7684\u57fa\u7840\u8bbe\u65bd\u89d2\u8272\u3002\uff09 \u62bd\u8c61\u5c42\u6b21\u5c45\u4e2d\u7684\u6709 Linalg, Tensor, Vector, SCF dialect\uff0c\u5b83\u4eec\u534f\u540c\u5408\u4f5c\u7528\u6765\u751f\u6210\u4ee3\u7801\u3002\u53e6\u5916\uff0cMLIR \u4e2d\u8fd8\u6709 Affine, Math, Arithmetic dialect \u7528\u6765\u63cf\u8ff0\u5e95\u5c42\u8ba1\u7b97\u3002\u5728 AI \u6846\u67b6\u5c42\u9762\uff0c\u6709 TensorFlow, TFLite, MHLO, Torch, TOSA \u8fdb\u884c\u5bf9\u63a5\u548c\u5bfc\u5165\u6a21\u578b\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7528\u9014\u7684 dialect\uff0c\u50cf\u662f PDL \u7528\u6765\u5b9a\u4e49\u7f16\u8bd1\u5668\u8f6c\u6362\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"Alex \u4e4b\u524d\u5728 MLIR \u8bba\u575b\u4e0a\u5206\u4eab\u7684\u5404 dialect \u4e4b\u95f4\u7684\u5173\u7cfb","[10]","\u975e\u5e38\u503c\u5f97\u4e00\u8bfb\uff0c\u4e4b\u540e\u6211\u4e5f\u4f1a\u5199\u4e0b\u6211\u7684\u7406\u89e3\u3002\u8fd9\u4e9b\u5404\u5f0f\u5404\u6837\u7684 dialect \u548c\u4ee5\u540e\u5305\u88c5\u5b83\u4eec\u800c\u4ea7\u751f\u7684\u5c40\u90e8\u6216\u8005\u5b8c\u6574\u7684\u8f6c\u6362\u6d41\u7a0b\u5c06\u6781\u5927\u7b80\u5316\u9886\u57df\u76f8\u5173\u7f16\u8bd1\u5668\u7684\u5f00\u53d1\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fdb\u4e00\u6b65\u89e3\u8026\u7f16\u8bd1\u5668\u548c\u4e2d\u95f4\u8868\u793a"),"\uff1a\u5176\u5b9e",(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316\u4ee5\u53ca\u7531\u6b64\u4ea7\u751f\u7684\u5927\u91cf dialect \u90fd\u662f\u8fdb\u4e00\u6b65\u89e3\u8026\u548c\u6a21\u5757\u5316\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u7684\u4e00\u79cd\u81ea\u7136\u7ed3\u679c"),"\u3002\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\u88ab\u8bb8\u591a\u4ee5 dialect \u5f62\u6001\u5b58\u5728\u7684\u90e8\u5206\u7684\u4e2d\u95f4\u8868\u793a\u53d6\u4ee3\u3002\u6ca1\u6709\u67d0\u4e2a\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u518d\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\uff0c\u90fd\u662f\u6309\u9700\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u8fdb\u4e00\u6b65\u89e3\u8026\u4e2d\u95f4\u8868\u793a\u4e5f\u8ba9\u6211\u4eec\u53ef\u4ee5\u7075\u6d3b\u5730\u6839\u636e\u9886\u57df\u8fdb\u884c\u8bbe\u8ba1\u548c\u6298\u4e2d\u3002\u6211\u4eec\u53ea\u9700\u9009\u53d6\u6240\u9700\u7684\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u6765\u7ec4\u5408\u6210\u5b8c\u6574\u7f16\u8bd1\u5668\uff0c\u4e0d\u518d\u9700\u8981\u5168\u76d8\u63a5\u6536\u50cf LLVM IR \u4e00\u6837\u7684\u4e00\u5957\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u3002\u56e0\u4e3a interface \u7684\u5b58\u5728\uff0c\u6269\u5c55\u6a21\u5757\u7684\u66f4\u80fd\u4e5f\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u2014\u2014\u6211\u4eec\u65e2\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 operation \u6765\u5b9e\u73b0\u5df2\u6709\u7684 interface\uff0c\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 interface \u7136\u540e\u652f\u6301\u73b0\u6709 operation\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0cLLVM IR \u5929\u7136\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u7edf\u4e00\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0cMLIR \u7684\u57fa\u7840\u8bbe\u65bd\u548c dialect \u751f\u6001\u5219\u5929\u7136\u662f\u53bb\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u79bb\u6563\u7684\u7f16\u8bd1\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u7684\u4e00\u822c\u53d1\u5c55\u8d8b\u52bf\u662f\u4ece\u5355\u4e00\u7684\u5f3a\u8026\u5408\u6574\u4f53\u5230\u9002\u7528\u4e0d\u540c\u573a\u666f\u7684\u591a\u79cd\u591a\u6837\u7684\u9009\u62e9\u3002\u5bf9\u4e8e\u6280\u672f\u6808\u7684\u4e0a\u5c42\u800c\u8a00\uff0c\u8fd9\u5c24\u5176\u660e\u663e\uff0c\u56e0\u4e3a\u8d8a\u5f80\u4e0a\u8d8a\u63a5\u8fd1\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\uff0c\u800c\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\u672c\u8eab\u5c31\u5404\u5f0f\u5404\u6837\uff0c\u7531\u5c42\u51fa\u4e0d\u7a77\u7684\u524d\u7aef\u6846\u67b6\u53ef\u89c1\u4e00\u6591\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u6808\u7684\u5e95\u5c42\u4e00\u822c\u76f8\u5bf9\u7a33\u5b9a\u3002\u5c11\u6570\u51e0\u79cd\u786c\u4ef6\u67b6\u6784\u3001\u7f16\u8bd1\u5668\u548c\u64cd\u4f5c\u7cfb\u7edf\u7edf\u6cbb\u5f88\u591a\u5e74\u3002\u4f46\u534a\u5bfc\u4f53\u8fdb\u5c55\u7684\u53d8\u6162\u548c\u8ba1\u7b97\u9700\u6c42\u7684\u7206\u70b8\u5f0f\u589e\u957f\u4e5f\u5728\u9a71\u52a8\u7740\u5e95\u5c42\u6280\u672f\u7684\u53d8\u9769\u3002\u73b0\u5728\u4f9d\u7136\u4f9d\u9760\u901a\u7528\u67b6\u6784\u548c\u666e\u9002\u4f18\u5316\u5f88\u96be\u518d\u6ee1\u8db3\u5404\u79cd\u9700\u6c42\uff0c\u5f00\u53d1\u9886\u57df\u4e13\u7528\u7684\u6574\u4f53\u7684\u89e3\u51b3\u65b9\u6848\u662f\u4e00\u6761\u51fa\u8def\u3002RISC-V \u5728\u82af\u7247\u6307\u4ee4\u96c6\u5c42\u6b21\u63a2\u7d22\u6a21\u5757\u5316\u548c\u5b9a\u5236\u5316\uff0cMLIR \u5219\u662f\u5728\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u5c42\u9762\u505a\u7c7b\u4f3c\u63a2\u7d22\u3002\u4e24\u8005\u8054\u624b\u4f1a\u7ed9\u5e95\u5c42\u6280\u672f\u6808\u5e26\u6765\u4f55\u79cd\u9769\u65b0\u662f\u4e00\u4e2a\u503c\u5f97\u62ed\u76ee\u4ee5\u5f85\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8de8\u7cfb\u7edf\u8fb9\u754c\u7684\u6e10\u8fdb\u5f0f\u4ee3\u7801\u8868\u793a\u9012\u964d")),(0,n.kt)("p",null,"\u5728\u7ed3\u675f\u672c\u7ae0\u4e4b\u524d\uff0c\u518d\u5570\u55e6\u6700\u540e\u4e00\u70b9\u3002\u5176\u5b9e\u6211\u4eec\u53ef\u4ee5\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u770b\u5f85 MLIR \u5e26\u6765\u7684\u89e3\u8026\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6c34\u5e73\u65b9\u5411\u4e0a\uff0cdialect \u628a\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u6253\u6563\u6210\u8bb8\u591a\u5c40\u90e8\u4e2d\u95f4\u8868\u793a\uff1b\u5782\u76f4\u65b9\u5411\u4e0a\uff0cMLIR \u8ba9\u6211\u4eec\u53ef\u4ee5\u5bf9\u5904\u4e8e\u4e0d\u540c\u5c42\u7ea7\u7684\u6982\u5ff5\u8fdb\u884c\u5efa\u6a21"),"\u3002\u8fd9\u5bf9\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u662f\u975e\u5e38\u6709\u7528\u7684\uff0c\u56e0\u4e3a\u9886\u57df\u4e13\u7528\u8bed\u8a00\u4e00\u822c\u662f\u9ad8\u5ea6\u62bd\u8c61\u7684\u58f0\u660e\u5f0f\u8bed\u8a00\uff0c\u53ea\u63cf\u8ff0\u4efb\u52a1\uff0c\u9700\u8981\u7f16\u8bd1\u5668\u5c06\u5176\u8f6c\u6362\u6210\u5177\u4f53\u7684\u547d\u4ee4\u5f0f\u673a\u5668\u6307\u4ee4\u3002\u4e00\u6b65\u8de8\u8d8a\u8fd9\u4e2a\u5de8\u5927\u7684\u62bd\u8c61\u5dee\u8ddd\u662f\u975e\u5e38\u96be\u7684\uff0c\u5229\u7528\u591a\u7ea7\u62bd\u8c61\u548c\u5efa\u6a21\u6765\u8fdb\u884c\u6e10\u8fdb\u5f0f lowering \u662f\u66f4\u52a0\u9002\u5408\u7684\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u5206\u79bb\u5404\u4e2a\u5c42\u6b21\u5173\u6ce8\u7684\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u4e5f\u66f4\u52a0\u7684\u6613\u5f00\u53d1\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u5e76\u4e0d\u662f\u4ec0\u4e48\u5168\u65b0\u7684\u6982\u5ff5\uff0c\u5728\u4e0d\u540c\u7684\u9879\u76ee\u4e2d\u6211\u4eec\u5df2\u7136\u770b\u5230\u5404\u79cd\u7c7b\u4e2d\u95f4\u8868\u793a\u7684\u8bbe\u7f6e\uff0c\u50cf\u662f Clang AST \u6216\u8005\u5404\u79cd\u673a\u5668\u5b66\u4e60\u6846\u67b6\u4e2d\u7684\u8ba1\u7b97\u56fe\u3002",(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684\u4f18\u52bf\u662f\u4f7f\u7528\u540c\u6837\u7684\u57fa\u7840\u8bbe\u65bd\u5c06\u8fd9\u4e9b\u4e0d\u540c\u5c42\u6b21\u7684\u8868\u793a\u8fde\u63a5\u8d77\u6765\uff0c\u8ba9\u5b83\u4eec\u4e4b\u95f4\u7684\u4fe1\u606f\u6d41\u901a\u53d8\u5f97\u66f4\u52a0\u987a\u7545\u3002"),"\u5176\u5b9e\u73b0\u4ee3\u590d\u6742\u7cfb\u7edf\u7684\u5f00\u53d1\u591a\u662f\u9009\u53d6\u5404\u79cd\u5b50\u7cfb\u7edf\u7136\u540e\u5c06\u5176\u7ec4\u5408\u3002\u5c06\u6765\u81ea\u524d\u4e00\u4e2a\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u8fdb\u884c\u9a8c\u8bc1\u3001\u8f6c\u5316\u7136\u540e\u4f20\u9012\u7ed9\u4e0b\u4e00\u4e2a\u5b50\u7cfb\u7edf\u6d88\u8017\u6389\u5f88\u591a\u5de5\u7a0b\u8d44\u6e90\u3002\u5982\u679c\u6240\u6709\u5b50\u7cfb\u7edf\u4f7f\u7528\u76f8\u540c\u7684\u5185\u90e8\u57fa\u7840\u8bbe\u65bd\uff0c\u8fd9\u4e9b\u8d44\u6e90\u6295\u5165\u5c31\u90fd\u53ef\u4ee5\u8282\u7701\u4e0b\u6765\uff0c\u53e6\u5916\uff0c\u4f7f\u7528\u76f8\u540c\u5de5\u5177\u4e5f\u4f1a\u4f7f\u5f97\u8de8\u7ec4\u8de8\u9879\u76ee\u7684\u6c9f\u901a\u534f\u8c03\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u3002"),(0,n.kt)("h3",{id:"795-mlir-dialect"},"7.9.5 MLIR Dialect"),(0,n.kt)("h4",{id:"7951-\u57fa\u7840\u7ec4\u4ef6"},"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u57fa\u672c\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002 \u5728\u8fd9\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4e00\u7cfb\u5217\u4e92\u8865\u534f\u4f5c\u7684\u64cd\u4f5c\uff0c\u548c\u8fd9\u4e9b\u64cd\u4f5c\u6240\u9700\u7684\u7c7b\u578b (type) \u4ee5\u53ca\u5c5e\u6027 (attribute) \u7b49\u7b49\u3002 \u7279\u5b9a\u7684\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u53ea\u9700\u8981\u7ec4\u5408\u73b0\u6709\u7684 dialect\uff0c\u5e76\u52a0\u4ee5\u81ea\u5df1\u7684\u6269\u5c55\u6216\u8005\u5b9a\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5185\u5d4c\u7ed3\u6784\u7684\u64cd\u4f5c\uff08Operations carrying structures\uff09")),(0,n.kt)("p",null,"MLIR \u4e2d\u64cd\u4f5c\u7684\u4e00\u4e2a\u7a81\u51fa\u7279\u6027\u662f\u53ef\u4ee5\u901a\u8fc7",(0,n.kt)("em",{parentName:"p"},"region"),"[2]","\u6765\u5185\u5d4c (nest) \u7ed3\u6784 (structure)\u3002MLIR \u4e2d\u5f88\u591a\u53ef\u4ee5\u6dfb\u52a0\u8d1f\u8f7d\u64cd\u4f5c (payload op) \u7684\u7ed3\u6784\u5316\u64cd\u4f5c (structured op) \u90fd\u4f9d\u8d56\u4e8e\u8fd9\u79cd\u7279\u6027\u3002\u8fd9\u4e9b\u7ed3\u6784\u5316\u64cd\u4f5c\u672c\u8eab\u53ea\u5b9a\u4e49\u67d0\u79cd\u7ed3\u6784\u6027\u8bed\u4e49\uff0c\u6bd4\u5982\u63a7\u5236\u6d41 (control flow)\u3002\u5177\u4f53\u7684\u8ba1\u7b97\u6027\u8bed\u4e49\u5219\u6765\u81ea\u4e8e\u6dfb\u52a0\u7684\u8d1f\u8f7d\u64cd\u4f5c\u3002\u7ed3\u6784\u5316\u64cd\u4f5c\u4e0e\u8d1f\u8f7d\u64cd\u4f5c\u76f8\u4e92\u7ec4\u5408\u3001\u76f8\u4e92\u6269\u5c55\u3002\u4e00\u4e2a\u7a81\u51fa\u7684\u4f8b\u5b50\u662f linalg.generic op\uff1b\u5f53\u7136\u51fd\u6570 (function) \u4ee5\u53ca\u6a21\u5757 (module) \u5176\u5b9e\u90fd\u662f\u8fd9\u79cd\u7ed3\u6784\u5316\u64cd\u4f5c\u3002Region \u7ed9\u8d1f\u8f7d\u64cd\u4f5c\u8bbe\u7f6e\u4e86\u660e\u786e\u7684\u8fb9\u754c\uff0c\u8fd9\u6709\u52a9\u4e8e\u7b80\u5316\u4e2d\u95f4\u8868\u793a\u8f6c\u6362\u65f6\u6240\u9700\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee3\u8868\u62bd\u8c61\u5c42\u6b21\u7684\u7c7b\u578b\uff08Types signaling abstraction levels\uff09")),(0,n.kt)("p",null,"\u64cd\u4f5c\u5f52\u6839\u5230\u5e95\u53ea\u662f\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u503c (value) \u6240\u8fdb\u884c\u7684\u67d0\u79cd\u8ba1\u7b97 (computation)\u3002\u7c7b\u578b\u624d\u662f\u62bd\u8c61\u5c42\u6b21 (abstraction level) \u7684\u4ee3\u8868\u3002\u4e3e\u4e2a\u6817\u5b50\uff0c\u5f20\u91cf (tensor)\u3001buffer\u3001\u4ee5\u53ca\u6807\u91cf (scalar) \u90fd\u53ef\u4ee5\u652f\u6301\u52a0\u51cf\u4e58\u9664\u7b49\u5404\u79cd\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u5728\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u591a\u5c11\u533a\u522b\uff0c\u4f46\u5b83\u4eec\u660e\u663e\u5c5e\u4e8e\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002\u5f20\u91cf\u5b58\u5728\u4e8e\u673a\u5668\u5b66\u4e60\u6846\u67b6\u6216\u8005\u7f16\u7a0b\u6a21\u578b (programming model) \u8fd9\u4e00\u9ad8\u5c42\u62bd\u8c61\u3002Buffer \u5b58\u5728\u4e8e\u6267\u884c\u7cfb\u7edf (system) \u548c\u5185\u5b58\u4f53\u7cfb (memory hierarchy) \u8fd9\u4e00\u4e2d\u5c42\u62bd\u8c61\u3002\u6807\u91cf\u5b58\u5728\u4e8e\u6267\u884c\u82af\u7247 (chip) \u548c\u5bc4\u5b58\u5668 (register) \u8fd9\u4e00\u5e95\u5c42\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u53ef\u4ee5\u81ea\u7531\u5730\u5b9a\u4e49\u5404\u79cd\u7c7b\u578b\u3002 MLIR \u7684\u6838\u5fc3\u57fa\u7840\u8bbe\u65bd\u4f1a\u65e0\u5dee\u522b\u5730\u5bf9\u5f85\u4ee5\u53ca\u7528\u7edf\u4e00\u7684\u673a\u5236\u652f\u6301\u6765\u81ea\u4e0d\u540c dialect \u7684\u7c7b\u578b\u3002 \u6bd4\u5982\uff0c",(0,n.kt)("em",{parentName:"p"},"type conversion")," ","[3]","\u5c31\u662f\u901a\u7528\u7684\u8f6c\u6362\u7c7b\u578b\u7684\u673a\u5236\u3002 Dialect A \u53ef\u4ee5\u91cd\u7528\u6765\u81ea dialect B \u7684\u7c7b\u578b\uff0c\u4e5f\u53ef\u4ee5\u5bf9\u5176\u8fdb\u4e00\u6b65\u6269\u5c55\u548c\u7ec4\u5408\uff0c\u4f8b\u5982\u5c06\u57fa\u7840\u7c7b\u578b (primitive type) \u653e\u5165\u5bb9\u5668\u7c7b\u578b\u4e2d (container type)\u3002 ",(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e2a dialect \u4e5f\u53ef\u4ee5\u5b9a\u4e49\u89c4\u5219\u6765\u5b9e\u73b0\u81ea\u8eab\u7c7b\u578b\u548c\u5176\u4ed6 dialect \u7c7b\u578b\u7684\u76f8\u4e92\u8f6c\u6362\u3002 \u628a\u8fd9\u4e9b\u89c4\u5219\u52a0\u5165\u5230 type converter \u4e2d\u540e\uff0c\u6240\u6709\u7684\u89c4\u5219\u4f1a\u76f8\u4e92\u7ec4\u5408\uff0c\u7531\u6b64 type conversion \u673a\u5236\u4f1a\u81ea\u884c\u627e\u51fa\u8f6c\u6362\u901a\u8def\u6765\u5b9e\u73b0\u8f6c\u6362\u3002")," \u4e0d\u8fc7\u603b\u800c\u8a00\u4e4b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u76f8\u8f83\u4e8e\u64cd\u4f5c\u7684\u7ec4\u5408\u4e0e\u8f6c\u6362\uff0c\u7c7b\u578b\u7684\u7ec4\u5408\u4ee5\u53ca\u8f6c\u6362\u901a\u5e38\u6709\u66f4\u591a\u9650\u5236\u4e5f\u66f4\u52a0\u590d\u6742\uff0c\u6bd5\u7adf\u7c7b\u578b\u7684\u5339\u914d\u5960\u5b9a\u4e86\u64cd\u4f5c\u53ef\u4ee5\u8854\u63a5\u7684\u57fa\u7840\u3002")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u540c\u5efa\u6a21\u7c92\u5ea6\u7684Dialect\uff08Dialects as modeling granularity\uff09")),(0,n.kt)("p",null,"\u901a\u8fc7\u5b9a\u4e49\u548c\u7ec4\u7ec7\u64cd\u4f5c\u548c\u7c7b\u578b\uff0cdialect \u7ed9\u7f16\u8bd1\u5668\u63d0\u4f9b\u4e86\u7c97\u7c92\u5ea6\u9ad8\u5c42\u6b21\u7684\u5efa\u6a21\u65b9\u5f0f\u3002\u5982\u679c\u4e24\u4e2a dialect \u6240\u6d89\u53ca\u7684\u7c7b\u578b\u76f8\u540c\uff0c\u90a3\u4e48\u5b83\u4eec\u57fa\u672c\u5c5e\u4e8e\u7edf\u4e00\u62bd\u8c61\u5c42\u6b21\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u6d89\u53ca\u4e0d\u540c\u7c7b\u578b\u7684 dialect \u8fdb\u884c\u8f6c\u6362\u672c\u8d28\u4e0a\u5219\u662f\u8f6c\u6362\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u4e3a\u7b80\u5316\u5b9e\u73b0\uff0c\u6211\u4eec\u4e00\u822c",(0,n.kt)("strong",{parentName:"p"},"\u5c06\u9ad8\u5c42\u6b21 (high-level) \u62bd\u8c61\u9012\u964d (lower) \u5230\u4f4e\u5c42\u6b21 (low-level) \u62bd\u8c61\u3002\u9012\u964d\u7684\u8fc7\u7a0b\u901a\u5e38\u4f1a\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u7684\u95ee\u9898\u5206\u89e3 (decomposition) \u6216\u8005\u8d44\u6e90\u5206\u914d (resource assignment) \u6765\u9010\u6e10\u8d34\u8fd1\u5e95\u5c42\u786c\u4ef6"),"\u3002\u524d\u8005\u7684\u4f8b\u5b50\u6709 tiling, vectorization \u7b49\u7b49\uff1b\u540e\u8005\u7684\u4f8b\u5b50\u6709 bufferization, \u5bc4\u5b58\u5668\u5206\u914d (register allocation) \u7b49\u7b49\u3002\u5373\u4fbf\u5982\u6b64\uff0c\u9012\u964d\u4f9d\u7136\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u6709\u4e0d\u540c\u7684\u76ee\u7684\u4ee5\u53ca\u5bf9\u6b63\u786e\u6027\u548c\u6027\u80fd\u7684\u7406\u89e3\u3002\u6bd4\u5982\u7f16\u7a0b\u6a21\u578b\u5c42\u8003\u8651\u7684\u662f\u4ee3\u7801\u7684\u8868\u793a\u80fd\u529b\u4ee5\u53ca\u7b80\u6d01\u6027\uff0c\u5f88\u5c11\u6d89\u53ca\u5177\u4f53\u786c\u4ef6\u7279\u6027\uff1b\u800c\u786c\u4ef6\u5c42\u8003\u8651\u7684\u662f\u8d44\u6e90\u7684\u6700\u4f73\u4f7f\u7528\uff0c\u5f88\u5c11\u8003\u8651\u6613\u4e8e\u7f16\u7a0b\u3002\u56e0\u6b64\uff0c\u5728\u8bf8\u591a MLIR \u673a\u5236\u4e2d\uff0c",(0,n.kt)("em",{parentName:"p"},"dialect conversion")," ","[4]","\u53ef\u80fd\u662f\u6700\u590d\u6742\u7684\u5c31\u5e76\u4e0d\u5947\u602a\u4e86\u3002"),(0,n.kt)("h4",{id:"7952-dialect\u4f53\u7cfb"},"7.9.5.2 Dialect\u4f53\u7cfb"),(0,n.kt)("p",null,"\u4ee5\u64cd\u4f5c\u548c\u7c7b\u578b\u7684\u53ef\u7ec4\u5408\u6027\u4ee5\u53ca\u53ef\u6269\u5c55\u6027\u4e3a\u57fa\u7840\uff0cdialect\u53ef\u4ee5\u4f5c\u4e3a\u7ec4\u5408\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u9ad8\u5c42\u6b21\u57fa\u7840\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"7953-operations"},"7.9.5.3 Operations"),(0,n.kt)("p",null,"\u4e00\u4e2aoperation\u7c7b\u7ee7\u627f\u4e8emlir::Op\u7c7b\uff0c\u5176\u4e2dmlir::Op\u7c7b\u643a\u5e26\u4e00\u4e9b\u53ef\u9009\u7684traits\u6765\u81ea\u5b9a\u4e49\u4e00\u4e9b\u884c\u4e3a\uff0cTraits\u63d0\u4f9b\u4e00\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u5bf9\u4e00\u4e2aOperation\u6ce8\u5165\u4e00\u4e9b\u884c\u4e3a\uff0c\u4f8b\u5982\u989d\u5916\u7684accessors\u3001verification\u7b49\u7b49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"class ConstantOp : public mlir::Op<\n /// `mlir::Op` is a CRTP class, meaning that we provide the\n /// derived class as a template parameter.\n ConstantOp,\n /// The ConstantOp takes zero input operands.\n mlir::OpTrait::ZeroOperands,\n /// The ConstantOp returns a single result.\n mlir::OpTrait::OneResult,\n /// We also provide a utility `getType` accessor that\n /// returns the TensorType of the single result.\n mlir::OpTraits::OneTypedResult::Impl> {\n\n public:\n /// Inherit the constructors from the base Op class.\n using Op::Op;\n\n /// Provide the unique name for this operation. MLIR will use this to register\n /// the operation and uniquely identify it throughout the system. The name\n /// provided here must be prefixed by the parent dialect namespace followed\n /// by a `.`.\n static llvm::StringRef getOperationName() { return \"toy.constant\"; }\n\n /// Return the value of the constant by fetching it from the attribute.\n mlir::DenseElementsAttr getValue();\n\n /// Operations may provide additional verification beyond what the attached\n /// traits provide. Here we will ensure that the specific invariants of the\n /// constant operation are upheld, for example the result type must be\n /// of TensorType and matches the type of the constant `value`.\n LogicalResult verifyInvariants();\n\n /// Provide an interface to build this operation from a set of input values.\n /// This interface is used by the `builder` classes to allow for easily\n /// generating instances of this operation:\n /// mlir::OpBuilder::create(...)\n /// This method populates the given `state` that MLIR uses to create\n /// operations. This state is a collection of all of the discrete elements\n /// that an operation may contain.\n /// Build a constant with the given return type and `value` attribute.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::Type result, mlir::DenseElementsAttr value);\n /// Build a constant and reuse the type from the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::DenseElementsAttr value);\n /// Build a constant by broadcasting the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n double value);\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u4e2aoperation\u53ef\u4ee5\u6ce8\u518c\u7ed9ToyDialect\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyDialect::initialize() {\n addOperations();\n}\n")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u5b9a\u4e49\u4e86\u4e00\u4e2aoperation\uff0c\u90a3\u4e48\u600e\u6837\u83b7\u53d6\u5b83\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u8f6c\u6362\u5462\uff1f"),(0,n.kt)("p",null,"\u5728MLIR\u4e2d\u6709\u4e24\u6839\u8ddfoperation\u76f8\u5173\u7684\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Operation"),"\uff1a\u5b83\u7528\u4e8e\u901a\u7528\u5730model all operations\uff0c\u5b83\u662f\u4e0d\u900f\u660e\u7684\uff0c\u610f\u5473\u7740\u5b83\u4e0d\u4f1a\u63cf\u8ff0\u4efb\u4f55operation\u7684\u5c5e\u6027\u6216\u8005\u7c7b\u578b\uff1b\u53cd\u4e4b\uff0c\u5b83\u63d0\u4f9b\u5bf9\u4e00\u4e2aoperation\u5b9e\u4f8b\u7684\u901a\u7528API\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"OP"),"\uff1a\u6bcf\u4e2a\u7279\u5b9a\u7c7b\u578b\u7684operation\u7ee7\u627f\u81eaOp\uff0c\u8fd9\u4e9b\u7ee7\u627f\u81eaOp\u7684\u7c7b\u50cf\u4e00\u4e2a\u6307\u5411\u4e00\u4e2aOperation*\u7684\u667a\u80fd\u6307\u9488\uff0c\u63d0\u4f9b\u4e00\u4e9b\u7279\u5b9a\u4e8e\u67d0\u4e2a\u64cd\u4f5c\u7684accessor\u65b9\u6cd5\u3001\u7c7b\u578b\u68c0\u67e5\u7b49\u7b49\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u6211\u4eec\u7ed9Toy\u5b9a\u4e49\u4e00\u4e2a operation\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5728\u5b9a\u4e49\u4e00\u7ec4\u5e72\u51c0\u3001\u5305\u542b\u4e00\u4e9b\u6709\u7528\u8bed\u4e49\u7684\u63a5\u53e3\uff0c\u901a\u8fc7\u8fd9\u4e9b\u63a5\u53e3\u53ef\u4ee5\u6784\u5efaOperation\u5e76\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\uff08interfaing\uff09\u3002\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u7ee7\u627f\u81eaOp\u7684\u7c7b\u4e0d\u5305\u542b\u4efb\u4f55\u7c7b\u5b57\u6bb5\uff08class field\uff09\uff0c\u6240\u6709\u56f4\u7ed5\u6574\u4e2aoperation\u7684\u6570\u636e\u90fd\u5b58\u50a8\u5728\u5f15\u7528 \u7684Operation\u4e2d\u3002\u8fd9\u5e26\u6765\u7684\u5176\u4e2d\u4e00\u4e2a\u8981\u6c42\u662f\uff0c\u6240\u6709\u7684Op\u7c7b\u7684\u4f20\u503c\u90fd\u5e94\u8be5\u662f\u503c\u7c7b\u578b\uff0c\u800c\u4e0d\u80fd \u662f\u6307\u9488\u6216\u8005\u5f15\u7528\u7c7b\u578b\u3002")),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u901a\u7528\u7684Operation*\u5b9e\u4f8b\uff0c\u6211\u4eec\u603b\u662f\u53ef\u4ee5\u83b7\u53d6\u5230\u4e00\u4e2a\u7279\u5b9a\u7684Op\u5b9e\u4f8b\uff0c\u53ef\u4ee5\u4f7f\u7528LLVM\u63d0\u4f9b\u7684\u8f6c\u6362\u65b9\u6cd5\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'void processConstantOp(mlir::Operation *operation) {\n ConstantOp op = llvm::dyn_cast(operation);\n\n // This operation is not an instance of `ConstantOp`.\n if (!op)\n return;\n\n // Get the internal operation instance wrapped by the smart pointer.\n mlir::Operation *internalOperation = op.getOperation();\n assert(internalOperation == operation &&\n "these operation instances are the same");\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operation Definition Specification\uff08ODS\uff09")),(0,n.kt)("p",null,"\u4f7f\u7528TableGen\u7684\u65b9\u5f0f\u5b9a\u4e49"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Base class for toy dialect operations. This operation inherits from the base\n// `Op` class in OpBase.td, and provides:\n// * The parent dialect of the operation.\n// * The mnemonic for the operation, or the name without the dialect prefix.\n// * A list of traits for the operation.\nclass Toy_Op traits = []> :\n Op;\n")),(0,n.kt)("p",null,"\u7136\u540e\u5b9a\u4e49operation\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def ConstantOp : Toy_Op<"constant"> {\n // Provide a summary and description for this operation. This can be used to\n // auto-generate documentation of the operations within our dialect.\n let summary = "constant operation";\n let description = [{\n Constant operation turns a literal into an SSA value. The data is attached\n to the operation as an attribute. For example:\n\n %0 = "toy.constant"()\n { value = dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]> : tensor<2x3xf64> }\n : () -> tensor<2x3xf64>\n }];\n\n // The constant operation takes an attribute as the only input.\n // `F64ElementsAttr` corresponds to a 64-bit floating-point ElementsAttr.\n let arguments = (ins F64ElementsAttr:$value);\n\n // The generic call operation returns a single value of TensorType.\n // F64Tensor corresponds to a 64-bit floating-point TensorType.\n let results = (outs F64Tensor);\n\n // Add additional verification logic to the constant operation. Setting this bit\n // to `1` will generate a `::mlir::LogicalResult verify()` declaration on the\n // operation class that is called after ODS constructs have been verified, for\n // example the types of arguments and results. We implement additional verification\n // in the definition of this `verify` method in the C++ source file. \n let hasVerifier = 1;\n \n \n // Add custom build methods for the constant operation. These methods populate\n // the `state` that MLIR uses to create operations, i.e. these are used when\n // using `builder.create(...)`.\n let builders = [\n // Build a constant with a given constant tensor value.\n OpBuilder<(ins "DenseElementsAttr":$value), [{\n // Call into an autogenerated `build` method.\n build(builder, result, value.getType(), value);\n }]>,\n\n // Build a constant with a given constant floating-point value. This builder\n // creates a declaration for `ConstantOp::build` with the given parameters.\n OpBuilder<(ins "double":$value)>\n ];\n}\n\n')),(0,n.kt)("h3",{id:"796-analysis-and-transformation"},"7.9.6 Analysis and Transformation"),(0,n.kt)("p",null,"\u672c\u8282\u4ecb\u7ecd\u600e\u6837\u5229\u7528Toy Dialect\u53ca\u5176\u9ad8\u5c42\u6b21\u8bed\u4e49\u6765\u6267\u884clocal pattern-match transformations\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5728LLVM\u4e2d\u4f1a\u5f88\u56f0\u96be\u3002"),(0,n.kt)("p",null,"\u6709\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u7528\u4e8e\u5b9e\u73b0pattern-match transformation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"imperative C++ pattern-match and rewrite"),(0,n.kt)("li",{parentName:"ul"},"declarative\uff0crule-based pattern-match and rewrite using table-driven Declarative Rewrite Rules\uff08DDR\uff09\uff0c\u6b64\u65f6operation\u5fc5\u987b\u662f\u4f7f\u7528ODS\u5b9a\u4e49\u7684")),(0,n.kt)("h4",{id:"7961-c-style--pattern-match-and-rewrite"},"7.9.6.1 C++ style pattern-match and rewrite"),(0,n.kt)("p",null,"\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u4f18\u5316\u8f6c\u7f6e\u7684\u8f6c\u7f6e\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u53ef\u4ee5\u76f4\u63a5\u8fd4\u56dex\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u4efb\u4f55\u8f6c\u7f6e\u64cd\u4f5c\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"def transpose_transpose(x) {\n return transpose(transpose(x));\n}\n")),(0,n.kt)("p",null,"\u6b63\u5e38\u7684IR\u662f\u8fd9\u6837\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n %0 = toy.transpose(%arg0 : tensor<*xf64>) to tensor<*xf64>\n %1 = toy.transpose(%0 : tensor<*xf64>) to tensor<*xf64>\n toy.return %1 : tensor<*xf64>\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u60c5\u51b5\u5bf9\u4e8eLLVM\u6765\u8bf4\u662f\u5f88\u96be\u7684\uff0c\u4f8b\u5982Clang\u4e0d\u80fd\u4f18\u5316\u6389\u4e34\u65f6\u6570\u7ec4\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u8f6c\u7f6e\u8ba1\u7b97\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c++"},"#define N 100\n#define M 100\n\nvoid sink(void *);\nvoid double_transpose(int A[N][M]) {\n int B[M][N];\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n B[j][i] = A[i][j];\n }\n }\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n A[i][j] = B[j][i];\n }\n }\n sink(A);\n}\n")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u5230\u5728IR\u4e2d\u5339\u914d\u4e00\u4e2atree-like\u7684\u6a21\u5f0f\uff0c\u5e76\u4e14\u5c06\u5176\u66ff\u6362\u4e3a\u4e00\u7ec4\u65b0\u7684operation\u3002we can plug into the MLIR ",(0,n.kt)("inlineCode",{parentName:"p"},"Canonicalizer")," pass by implementing a ",(0,n.kt)("inlineCode",{parentName:"p"},"RewritePattern"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'/// Fold transpose(transpose(x)) -> x\nstruct SimplifyRedundantTranspose : public mlir::OpRewritePattern {\n /// We register this pattern to match every toy.transpose in the IR.\n /// The "benefit" is used by the framework to order the patterns and process\n /// them in order of profitability.\n SimplifyRedundantTranspose(mlir::MLIRContext *context)\n : OpRewritePattern(context, /*benefit=*/1) {}\n\n /// This method is attempting to match a pattern and rewrite it. The rewriter\n /// argument is the orchestrator of the sequence of rewrites. It is expected\n /// to interact with it to perform any changes to the IR from here.\n mlir::LogicalResult\n matchAndRewrite(TransposeOp op,\n mlir::PatternRewriter &rewriter) const override {\n // Look through the input of the current transpose.\n mlir::Value transposeInput = op.getOperand();\n TransposeOp transposeInputOp = transposeInput.getDefiningOp();\n\n // Input defined by another transpose? If not, no match.\n if (!transposeInputOp)\n return failure();\n\n // Otherwise, we have a redundant transpose. Use the rewriter.\n rewriter.replaceOp(op, {transposeInputOp.getOperand()});\n return success();\n }\n};\n')),(0,n.kt)("p",null,"transformation\u4e3b\u8981\u5728operation canonicalization pass\u88ab\u6267\u884c\uff0ccanonicalization\u662fMLIR\u7684\u4e00\u4e2a\u91cd\u8981\u9636\u6bb5\uff0c\u80fd\u591f\u5bf9\u4ee3\u7801\u7684\u597d\u574f\u8fdb\u884c\u4e00\u4e9b\u63a8\u7406\uff0c\u6267\u884creliable compiler transformation\u3002\u4e3a\u4e86\u4fdd\u8bc1canonicalization\u80fd\u591f\u5e94\u7528\u6211\u4eec\u7684new transform\uff0c\u9700\u8981\u8bbe\u7f6ehasCanonicalizer=1\uff0c\u5e76\u4e14\u5c06\u6211\u4eec\u7684pattern\u6ce8\u518c\u5230canonicalization\u6846\u67b6\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Register our patterns for rewrite by the Canonicalization framework.\nvoid TransposeOp::getCanonicalizationPatterns(\n RewritePatternSet &results, MLIRContext *context) {\n results.add(context);\n}\n")),(0,n.kt)("p",null,"\u540c\u65f6\u6211\u4eec\u9700\u8981\u7ed9\u7f16\u8bd1\u5668\u589e\u52a0\u4e00\u4e2aoptimization pipeline\uff0cMLIR\u901a\u8fc7 \u4e00\u4e2aPassManager\u7ba1\u7406 \uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"}," mlir::PassManager pm(module.getContext());\n pm.addNestedPass(mlir::createCanonicalizerPass());\n")),(0,n.kt)("p",null,"\u6700\u7ec8\u4f18\u5316\u7684IR\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n toy.return %arg0 : tensor<*xf64>\n}\n")),(0,n.kt)("h4",{id:"7962-\u603b\u7ed3"},"7.9.6.2 \u603b\u7ed3"),(0,n.kt)("p",null,"\u5728\u8fd9\u91cc\uff0c\u6574\u4e2a\u8fc7\u7a0b\u4ee5Operation\u4e3a\u4e2d\u5fc3\uff0cOperation\u662fIR\u7684\u57fa\u672c\u5143\u7d20\uff0c\u5176\u5305\u542b\u7684\u662f\u4ee3\u7801\u7684\u57fa\u672c\u7ec4\u7ec7\u5143\u7d20\uff0c\u8fd9\u91cc\u901a\u8fc7\u5bf9\u4ee3\u7801\u7684\u7ed3\u6784\u8fdb\u884c\u5206\u79bb\u6765\u8fdb\u884c\u4f18\u5316\uff0c\u800c\u4f18\u5316\u6216\u8005transformation\u7684\u903b\u8f91\uff0c\u5176\u5b9e\u4e5f\u5c31\u662f\u5bf9Operation\u8fdb\u884c\u6539\u5199\uff0c\u5b83\u901a\u8fc7\u5bf9Operation\u8fdb\u884c\uff08\u66b4\u529b\uff09\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u8bd1\u5668\u5bf9AST\u7684\u5206\u6790\u8fc7\u7a0b\u662f\u7c7b\u4f3c\u7684\uff0c\u53ea\u4e0d\u8fc7MLIR\u4f7f\u7528\u4e00\u79cd\u7279\u5b9a\u7684\u7ed3\u6784\u6765\u8868\u793a\u4efb\u610f\u7684IR\uff0c\u8fd9\u4e2aIR\u53ef\u6709\u7528\u6237\u81ea\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u56fa\u5b9a\u7684IR\u7ed3\u6784\uff0c\u7136\u540e\u7531\u4e8e\u5404\u4e2aDialect\u4e86\u89e3\u5176\u4e2d\u7684\u6784\u6210\uff0c\u4f8b\u5982Operation\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u7279\u5b9a\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u4fee\u6539\u7684\u5176\u5b9e\u662fMLIR\u7684\u7ed3\u6784\uff0c\u8fd9\u79cd\u4fee\u6539\u662f\u7531\u7279\u5b9a\u7684Dialect\u5b9e\u4f8b\u8fdb\u884c\u6267\u884c\u7684\u3002MLIR\u7cfb\u7edf\u8bbe\u7f6e\u4e00\u4e2a\u6ce8\u518c\u7ba1\u7406\u7684\u673a\u5236\uff0c\u8ba9\u5404\u4e2aDialect\u8fdb\u884c\u81ea\u5b9a\u4e49\u5904\u7406\u3002"),(0,n.kt)("p",null,"MLIR\u4e3a\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\uff0c\u5b83\u7684Operation\u5b9e\u9645\u4e0a\u662f\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u8fd0\u884c\u65f6\u6267\u884c\u7684\u4ee3\u7801\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u6ca1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u7ed3\u6784\uff0c\u8fd9\u4e2a\u7ed3\u6784\u88ab\u8868\u8ff0\u4e3a\u4e00\u79cd\u683c\u5f0f\uff0c\u5b83\u53ef\u4ee5\u662fin memory\u7684\uff0c\u4e5f\u53ef\u4ee5\u662f\u6587\u672c\u7684\uff0c\u6240\u6709\u90a3\u4e9b\u5173\u4e8e\u5206\u6790\u3001\u4f18\u5316\u3001\u53d8\u6362\u7684\u64cd\u4f5c\u5176\u5b9e\u4e5f\u662f\u5728\u4fee\u6539\u8fd9\u4e2aIR\u7ed3\u6784\uff0c\u5f53\u7136 \u4e3b\u8981\u901a\u8fc7Operation\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u662fLLVM IR\u4e2d\u7684\u5355\u6761\u6307\u4ee4\u4e3a\u5355\u4f4d\u3002\u7531\u4e8eDialect\u6216\u8005Operation\u5305\u542b\u66f4\u9ad8\u5c42\u7684\u62bd\u8c61\u4fe1\u606f\uff0c\u56e0\u6b64\u4f18\u5316\u7684\u7a7a\u95f4\u66f4\u5927\u3002"),(0,n.kt)("h3",{id:"797-generic-transformation-with-interfaces"},"7.9.7 Generic Transformation with Interfaces"),(0,n.kt)("h3",{id:"798-lowering"},"7.9.8 Lowering"),(0,n.kt)("p",null,"Tensors represent an abstract value-typed sequence of data, meaning that they don\u2019t live in any memory. MemRefs, on the other hand, represent lower level buffer access, as they are concrete references to a region of memory."),(0,n.kt)("h4",{id:"7981-dialect-conversions"},"7.9.8.1 Dialect Conversions"),(0,n.kt)("p",null,"\u9700\u8981\u81f3\u5c11\u4e24\u4e2a\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#conversion-target"},"Conversion Target"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the formal specification of what operations or dialects are legal for the conversion. Operations that aren\u2019t legal will require rewrite patterns to perform ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/getting_started/Glossary/#legalization"},"legalization"),"."))),(0,n.kt)("li",{parentName:"ul"},"A set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#rewrite-pattern-specification"},"Rewrite Patterns"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/Tutorials/QuickstartRewrites/"},"patterns")," used to convert ",(0,n.kt)("em",{parentName:"li"},"illegal")," operations into a set of zero or more ",(0,n.kt)("em",{parentName:"li"},"legal")," ones."))),(0,n.kt)("li",{parentName:"ul"},"Optionally, a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#type-conversion"},"Type Converter"),".",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"If provided, this is used to convert the types of block arguments. ")))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Target")),(0,n.kt)("p",null,"\u8fd9\u91cc\u6211\u4eec\u5c06\u8ba1\u7b97\u6bd4\u8f83\u91cd\u7684Toy\u64cd\u4f5c\u8f6c\u5316\u4e3a\u6765\u81ea\u591a\u4e2adialect\u4e2d\u64cd\u4f5c\u7684\u96c6\u5408\uff1aAffine\u3001Arith\u3001Func\u4ee5\u53caMemRef\uff0c\u4ee5\u4fbf\u8fdb\u884c\u8fdb\u4e00\u6b65\u4f18\u5316\uff0c\u9996\u5148\u5b9a\u4e49conversion target\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n // The first thing to define is the conversion target. This will define the\n // final target for this lowering.\n mlir::ConversionTarget target(getContext());\n\n // We define the specific operations, or dialects, that are legal targets for\n // this lowering. In our case, we are lowering to a combination of the\n // `Affine`, `Arith`, `Func`, and `MemRef` dialects.\n target.addLegalDialect();\n\n // We also define the Toy dialect as Illegal so that the conversion will fail\n // if any of these operations are *not* converted. Given that we actually want\n // a partial lowering, we explicitly mark the Toy operations that don't want\n // to lower, `toy.print`, as *legal*. `toy.print` will still need its operands\n // to be updated though (as we convert from TensorType to MemRefType), so we\n // only treat it as `legal` if its operands are legal.\n target.addIllegalDialect();\n target.addDynamicallyLegalOp([](toy::PrintOp op) {\n return llvm::none_of(op->getOperandTypes(),\n [](Type type) { return type.isa(); });\n });\n ...\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Patterns")),(0,n.kt)("p",null,"\u8ddfCanonicalization\u6846\u67b6\u6709\u70b9\u7c7b\u4f3c\uff0cDialectConversion\u4e5f\u4f7f\u7528RewritePatterns\u6765\u6267\u884c\u8f6c\u5316\u903b\u8f91\u3002\u53ef\u4ee5\u4f7f\u7528\u4e24\u79cdpattern\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"RewritePattern"),(0,n.kt)("li",{parentName:"ul"},"ConversionPatterns\uff0c\u4e3b\u8981\u7684\u533a\u522b\u662f\u63a5\u53d7\u4e00\u4e2a\u989d\u5916\u7684\u53c2\u6570\uff1aoperands\uff0c\u8fd9\u4e9boperands\u53ef\u80fd\u662f\u4e4b\u524d\u88ab\u79fb\u9664\u6216\u8005\u88ab\u91cd\u65b0\u6620\u5c04\u7684\u64cd\u4f5c\u6570\uff0c\u56e0\u4e3a\u4e00\u4e9b\u64cd\u4f5c\u9700\u8981\u5bf9\u65e7\u7684\u4fe1\u606f\u8fdb\u884c\u5339\u914d")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"/// Lower the `toy.transpose` operation to an affine loop nest.\nstruct TransposeOpLowering : public mlir::ConversionPattern {\n TransposeOpLowering(mlir::MLIRContext *ctx)\n : mlir::ConversionPattern(TransposeOp::getOperationName(), 1, ctx) {}\n\n /// Match and rewrite the given `toy.transpose` operation, with the given\n /// operands that have been remapped from `tensor<...>` to `memref<...>`.\n mlir::LogicalResult\n matchAndRewrite(mlir::Operation *op, ArrayRef operands,\n mlir::ConversionPatternRewriter &rewriter) const final {\n auto loc = op->getLoc();\n\n // Call to a helper function that will lower the current operation to a set\n // of affine loops. We provide a functor that operates on the remapped\n // operands, as well as the loop induction variables for the inner most\n // loop body.\n lowerOpToLoops(\n op, operands, rewriter,\n [loc](mlir::PatternRewriter &rewriter,\n ArrayRef memRefOperands,\n ArrayRef loopIvs) {\n // Generate an adaptor for the remapped operands of the TransposeOp.\n // This allows for using the nice named accessors that are generated\n // by the ODS. This adaptor is automatically provided by the ODS\n // framework.\n TransposeOpAdaptor transposeAdaptor(memRefOperands);\n mlir::Value input = transposeAdaptor.input();\n\n // Transpose the elements by generating a load from the reverse\n // indices.\n SmallVector reverseIvs(llvm::reverse(loopIvs));\n return rewriter.create(loc, input, reverseIvs);\n });\n return success();\n }\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u5c06pattern\u6dfb\u52a0\u5230lowering process\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n ...\n\n // Now that the conversion target has been defined, we just need to provide\n // the set of patterns that will lower the Toy operations.\n mlir::RewritePatternSet patterns(&getContext());\n patterns.add<..., TransposeOpLowering>(&getContext());\n\n // With the target and rewrite patterns defined, we can now attempt the\n // conversion. The conversion will signal failure if any of our *illegal*\n // operations were not converted successfully.\n if (mlir::failed(mlir::applyPartialConversion(getOperation(), target, patterns)))\n signalPassFailure();\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5b9e\u4f8b")),(0,n.kt)("p",null,"\u4ee5\u4e0b\u7684IR\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @main() {\n %0 = toy.constant dense<[[1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]]> : tensor<2x3xf64>\n %2 = toy.transpose(%0 : tensor<2x3xf64>) to tensor<3x2xf64>\n %3 = toy.mul %2, %2 : tensor<3x2xf64>\n toy.print %3 : tensor<3x2xf64>\n toy.return\n}\n")),(0,n.kt)("p",null,"\u88ab\u8f6c\u6362\u4e3a\uff08\u5176\u4e2d\u5305\u542b\u4e00\u4e9bAffine\u4f18\u5316\uff09\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"func.func @main() {\n %cst = arith.constant 1.000000e+00 : f64\n %cst_0 = arith.constant 2.000000e+00 : f64\n %cst_1 = arith.constant 3.000000e+00 : f64\n %cst_2 = arith.constant 4.000000e+00 : f64\n %cst_3 = arith.constant 5.000000e+00 : f64\n %cst_4 = arith.constant 6.000000e+00 : f64\n\n // Allocating buffers for the inputs and outputs.\n %0 = memref.alloc() : memref<3x2xf64>\n %1 = memref.alloc() : memref<2x3xf64>\n\n // Initialize the input buffer with the constant values.\n affine.store %cst, %1[0, 0] : memref<2x3xf64>\n affine.store %cst_0, %1[0, 1] : memref<2x3xf64>\n affine.store %cst_1, %1[0, 2] : memref<2x3xf64>\n affine.store %cst_2, %1[1, 0] : memref<2x3xf64>\n affine.store %cst_3, %1[1, 1] : memref<2x3xf64>\n affine.store %cst_4, %1[1, 2] : memref<2x3xf64>\n\n affine.for %arg0 = 0 to 3 {\n affine.for %arg1 = 0 to 2 {\n // Load the transpose value from the input buffer.\n %2 = affine.load %1[%arg1, %arg0] : memref<2x3xf64>\n\n // Multiply and store into the output buffer.\n %3 = arith.mulf %2, %2 : f64\n affine.store %3, %0[%arg0, %arg1] : memref<3x2xf64>\n }\n }\n\n // Print the value held by the buffer.\n toy.print %0 : memref<3x2xf64>\n memref.dealloc %1 : memref<2x3xf64>\n memref.dealloc %0 : memref<3x2xf64>\n return\n}\n")),(0,n.kt)("h3",{id:"799-lowering-to-llvm"},"7.9.9 Lowering to LLVM"),(0,n.kt)("h3",{id:"7910-mlir-language"},"7.9.10 MLIR Language"),(0,n.kt)("p",null,"MLIR\u662f\u57fa\u4e8egraph-like\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"nodes\uff0c\u79f0\u4e3aOperations"),(0,n.kt)("li",{parentName:"ul"},"edges\uff0c\u79f0\u4e3aValues")),(0,n.kt)("p",null,"\u6bcf\u4e2aValue\u662f\u4e00\u4e2aOperation\u6216\u8005BLock\u7684\u8fd4\u56de\u503c\u53c2\u6570\uff0c\u5176\u4e2dValue Type\u4f7f\u7528\u7c7b\u578b\u7cfb\u7edf\u8fdb\u884c\u5b9a\u4e49\u3002Operation\u5305\u542b Region\uff0cRegion\u5305\u542bBlock\uff0cBlock\u53c8\u5305\u542bOperation\uff0c\u5f62\u6210\u5d4c\u5957\u7ed3\u6784\uff0c\u5176\u4e2d\u7684\u96c6\u5408\u7684\u987a\u5e8f\u7531\u5176\u7ed3\u6784\u51b3\u5b9a\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u987a\u5e8f\u4e0d\u4e00\u5b9a\u6709\u8bed\u4e49\u4e0a\u7684\u610f\u4e49\u3002"),(0,n.kt)("p",null,"Operation\u53ef\u4ee5\u8868\u8ff0\u8bb8\u591a\u4e0d\u540c\u7684\u6982\u5ff5\uff0c\u4ece\u9ad8\u62bd\u8c61\u5c42\u7ea7\u7684\u6982\u5ff5\u5982\u51fd\u6570\u5b9a\u4e49\u3001\u51fd\u6570\u8c03\u7528\u3001buffer\u5206\u914d\u7b49\u7b49\uff0c\u5230\u4f4e\u5c42\u6b21\u7684\u8ddf\u6570\u5b66\u3001\u6307\u4ee4\u3001\u5bc4\u5b58\u5668\u76f8\u5173\u7684\u6982\u5ff5\u7b49\u7b49\u3002\u8fd9\u79cd\u4e0d\u540c\u7684\u6982\u5ff5\u90fd\u53ef\u4ee5\u4f7f\u7528MLIR\u4e2d\u7684operation\u8868\u793a\uff0c\u4f7f\u5f97MLIR\u53ef\u4ee5\u88ab\u4efb\u610f\u6269\u5c55\u3002"),(0,n.kt)("p",null,"MLIR\u540c\u65f6\u8fd8\u63d0\u4f9b\u4e00\u4e2a\u53ef\u6269\u5c55\u7684\u6846\u67b6\u7528\u4e8e\u5b9e\u73b0operation\u7684\u53d8\u6362\uff0c\u8fd9\u4f7f\u7528\u7f16\u8bd1\u5668\u4e2d\u5e38\u7528\u7684Pass\u7684\u6982\u5ff5\u5b9e\u73b0\uff0c\u5728\u4efb\u610f\u7684operation\u96c6\u5408\u4e0a\u5b9e\u73b0\u4efb\u610f\u7684pass\u5bfc\u81f4\u4f38\u7f29\u6027\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u4e2aTransformation\u5fc5\u987b\u8003\u8651\u6bcf\u4e2aoperation\u7684\u8bed\u4e49\u3002MLIR\u901a\u8fc7\u4f7f\u7528Traits\u548cInterfaces\u6765\u62bd\u8c61\u5730\u63cf\u8ff0operation semantics\u6765\u514b\u670d\u8fd9\u4e2a\u95ee\u9898\uff0c\u4f7f\u5f97Transformation\u5728operation\u4e0a\u7684\u64cd\u4f5c\u662f\u66f4\u52a0\u901a\u7528\u7684\u3002\u5176\u5185\u90e8\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u7b5b\u9009\u3002"),(0,n.kt)("h4",{id:"79101-dialects"},"7.9.10.1 Dialects"),(0,n.kt)("p",null,"Dialects are the mechanism by which to engage with and extend the MLIR ecosystem. They allow for defining new ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#operations"},"operations"),", as well as ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"attributes")," and ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#type-system"},"types"),". Each dialect is given a unique ",(0,n.kt)("inlineCode",{parentName:"p"},"namespace")," that is prefixed to each defined attribute/operation/type. For example, the ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/Dialects/Affine/"},"Affine dialect")," defines the namespace: ",(0,n.kt)("inlineCode",{parentName:"p"},"affine"),"."),(0,n.kt)("p",null,"MLIR allows for multiple dialects, even those outside of the main tree, to co-exist together within one module. Dialects are produced and consumed by certain passes. MLIR provides a ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/DialectConversion/"},"framework")," to convert between, and within, different dialects."),(0,n.kt)("h3",{id:"7911-pattern-rewriting"},"7.9.11 Pattern Rewriting"),(0,n.kt)("p",null,"This document details the design and API of the pattern rewriting infrastructure present in MLIR, a general DAG-to-DAG transformation framework. This framework is widely used throughout MLIR for\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"canonicalization, "),(0,n.kt)("li",{parentName:"ul"},"conversion, and "),(0,n.kt)("li",{parentName:"ul"},"general transformation.")),(0,n.kt)("h2",{id:"710-ai"},"7.10 AI"),(0,n.kt)("h3",{id:"7101-apple-shortcuts"},"7.10.1 Apple Shortcuts"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"shortcuts",src:l(1310).Z,width:"2126",height:"982"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u5feb\u6377\u6307\u4ee4\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u5feb\u6377\u6307\u4ee4"),"\u53ef\u8ba9\u4f60\u4f7f\u7528 App \u5feb\u901f\u5b8c\u6210\u4efb\u52a1\uff0c\u53ea\u9700\u8f7b\u70b9\u4e00\u4e0b\u6216\u8be2\u95ee Siri \u5373\u53ef\u3002\u5feb\u6377\u6307\u4ee4\u53ef\u4ee5\u81ea\u52a8\u5316\u5404\u79cd\u4efb\u52a1\uff0c\u4f8b\u5982\uff0c\u83b7\u53d6\u524d\u5f80\u201c\u65e5\u5386\u201d\u4e0a\u4e0b\u4e00\u4e2a\u65e5\u7a0b\u7684\u8def\u7ebf\u3001\u5c06\u6587\u672c\u4ece\u4e00\u4e2a App \u79fb\u5230\u53e6\u4e00\u4e2a App\u3001\u751f\u6210\u652f\u51fa\u62a5\u544a\u7b49\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4f60\u4f7f\u7528 Apple \u8bbe\u5907\u7684\u65b9\u5f0f\uff08App \u4f7f\u7528\u4ee5\u53ca\u6d4f\u89c8\u5668\u3001\u7535\u5b50\u90ae\u4ef6\u548c\u4fe1\u606f\u5386\u53f2\u8bb0\u5f55\uff09\uff0cSiri \u4f1a\u5efa\u8bae\u7b80\u5355\u5b9e\u7528\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u5feb\u901f\u8f7b\u70b9\u5373\u53ef\u8fd0\u884c\u3002\u521b\u5efa\u5feb\u6377\u6307\u4ee4\u540e\uff0c\u4f60\u53ef\u4ee5\u6fc0\u6d3b Siri\uff0c\u7136\u540e\u8bf4\u51fa\u5feb\u6377\u6307\u4ee4\u7684\u540d\u79f0\u4ee5\u8fd0\u884c\u5b83\u3002\u9664\u4e86\u8fd0\u884c Siri \u5efa\u8bae\u7684\u7b80\u5355\u5feb\u6377\u6307\u4ee4\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u5c06\u73b0\u6709\u5feb\u6377\u6307\u4ee4\u6216\u81ea\u5b9a\u5feb\u6377\u6307\u4ee4\u6dfb\u52a0\u5230\u8bbe\u5907\u3002\u8be5 App \u53ef\u8ba9\u4f60\u5408\u5e76\u591a\u4e2a App \u95f4\u7684\u591a\u4e2a\u6b65\u9aa4\uff0c\u4ee5\u521b\u5efa\u529f\u80fd\u5f3a\u5927\u7684\u4efb\u52a1\u81ea\u52a8\u5316\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u64cd\u4f5c\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u64cd\u4f5c"),"\u662f\u5feb\u6377\u6307\u4ee4\u7684\u7ec4\u6210\u90e8\u5206\u3002\u6bcf\u4e00\u4e2a\u5feb\u6377\u6307\u4ee4\u7686\u7531\u4e00\u7cfb\u5217\u64cd\u4f5c\u7ec4\u6210\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u5373\u4e3a\u6267\u884c\u7279\u5b9a\u529f\u80fd\u7684\u4e00\u4e2a\u6b65\u9aa4\u3002\u4f8b\u5982\uff0c\u5171\u4eab\u52a8\u753b GIF \u7684\u5feb\u6377\u6307\u4ee4\u53ef\u80fd\u5305\u542b\u4e09\u4e2a\u8fde\u7eed\u7684\u64cd\u4f5c\uff1a\u201c\u83b7\u53d6\u6700\u65b0\u7684\u7167\u7247\u201d\u4f1a\u6293\u53d6\u4f7f\u7528\u8bbe\u5907\u62cd\u6444\u7684\u6700\u65b0\u7167\u7247\uff0c\u201c\u5236\u4f5c GIF\u201d\u4f7f\u7528\u8fd9\u4e9b\u7167\u7247\u6784\u5efa\u52a8\u753b GIF\uff0c\u201c\u53d1\u9001\u4fe1\u606f\u201d\u4f1a\u81ea\u52a8\u5c06 GIF \u53d1\u9001\u7ed9\u6536\u4ef6\u4eba\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u5206\u89e3\u6210\u8f83\u5c0f\u7684\u90e8\u5206\uff0c\u64cd\u4f5c\u53ef\u5b9e\u73b0 Apple \u8bbe\u5907\u4e0a App \u7684\u6700\u4f73\u529f\u80fd\u3002\u901a\u8fc7\u6570\u767e\u4e2a\u64cd\u4f5c\uff0c\u4f60\u53ef\u4ee5\u5c06\u5404\u79cd\u5355\u72ec\u7684\u6b65\u9aa4\u94fe\u63a5\u5728\u4e00\u8d77\u4ee5\u6784\u5efa\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u81ea\u52a8\u5316\uff1f")),(0,n.kt)("p",null,"\u81ea\u52a8\u5316\u662f\u4e00\u79cd\u7531\u4e8b\u4ef6\u6fc0\u6d3b\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u800c\u975e\u624b\u52a8\u542f\u52a8\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u8bbe\u7f6e\u4e2a\u4eba\u6216\u5bb6\u5ead\u81ea\u52a8\u5316\uff0c\u7136\u540e\u901a\u8fc7\u5230\u8fbe\u3001\u79bb\u5f00\u3001\u66f4\u6539 iPhone \u4e0a\u7684\u8bbe\u7f6e\u548c\u4e00\u5929\u4e2d\u7684\u67d0\u4e2a\u65f6\u95f4\u7b49\u4e8b\u4ef6\u89e6\u53d1\u81ea\u52a8\u5316\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("h2",{id:"711-slack"},"7.11 Slack"),(0,n.kt)("h1",{id:"8-programming-language"},"8. Programming Language"),(0,n.kt)("h2",{id:"81-script-languages"},"8.1 Script languages"),(0,n.kt)("h3",{id:"811-skookumscript"},"8.1.1 SkookumScript"),(0,n.kt)("p",null,"SkookumScript uses a ",(0,n.kt)("a",{parentName:"p",href:"http://en.wikipedia.org/wiki/Multi-pass_compiler"},"multi-pass compiler")," to determine what files and components are needed, and automatically manages them in the memory of the parser and runtime, so aspects such as dependencies are always up-to-date."),(0,n.kt)("h4",{id:"8111-time-flow-logic"},"8.1.1.1 Time-flow logic"),(0,n.kt)("p",null,"Coroutines and methods\nCommands that may take time (multiple frames) to complete are called ",(0,n.kt)("em",{parentName:"p"},"coroutines")," and have identfier names that must start with an underscore ",(0,n.kt)("inlineCode",{parentName:"p"},"_"),". Commands that start without an underscore such as ",(0,n.kt)("inlineCode",{parentName:"p"},"println()")," complete immediately (within the same frame) and are called ",(0,n.kt)("em",{parentName:"p"},"methods"),"."),(0,n.kt)("h4",{id:"7112-conditional-flow-control"},"7.1.1.2 Conditional flow control"),(0,n.kt)("h3",{id:"812-lua"},"8.1.2 Lua"),(0,n.kt)("p",null,'It provides "meta language" features. You can implement object-oriented structures, or pure procedural functions, etc. It has a very simple C interface, and gives the engine developer a lot of flexibility in the language itself.'),(0,n.kt)("p",null,"Artists tend to love Lua too because it's very approachable, with plain and forgiving syntax. If your codebase is C or C++, I would highly recommend it."),(0,n.kt)("p",null,"It has good runtime performance when compared to other scripting languages like Python. (...and it has full support for closures.)"),(0,n.kt)("p",null,"It has a small memory footprint (approx 150k), it has excellent C/C++ bindings making it easy to add new game specific APIs, it is easy to pick up, it is flexible - i.e Has elements of OO, imperative and functional - none of which are mandatory, it has good buy-in from from mod community from games such as WoW etc."),(0,n.kt)("p",null,"\u7b80\u5355\u7684\u8bf4\uff0cregister-based\u7684\u6307\u4ee4\u683c\u5f0f\u8bbe\u8ba1\u628astack-based\u7684\u6307\u4ee4\u4e2d\u5206\u51e0\u6761\u6307\u4ee4\u8981\u5b8c\u6210\u7684\u4e8b\u60c5\u7528\u4e00\u6761\u6307\u4ee4\u641e\u5b9a\u4e86\uff0c\u5feb\u5f53\u7136\u662f\u5feb\u4e86\uff0c\u96be\u5ea6\u4e5f\u52a0\u5927\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u8fd8\u6709\u4e00\u70b9\u4e0a\u9762\u7684\u56de\u7b54\u4e2d\u4f3c\u4e4e\u6ca1\u6709\u63d0\u5230\uff0cLua\u4f7f\u7528\u7684\u662f\u4e00\u904d\u904d\u5386\u5c31\u751f\u4ea7\u6307\u4ee4\u7684\u65b9\u5f0f\uff0c\u5b66\u8fc7\u7f16\u8bd1\u539f\u7406\u7684\uff0c\u5927\u6982\u90fd\u80fd\u77e5\u9053\u4e00\u822c\u5206\u4e24\u904d\u904d\u5386\uff0c\u7b2c\u4e00\u904d\u751f\u6210AST\uff0c\u518d\u4e00\u904d\u904d\u5386AST\u751f\u6210\u6307\u4ee4\uff0c\u800c\u5728Lua\u4e2d\u662f\u76f4\u63a5\u8df3\u8fc7\u4e86AST\u6307\u4ee4\u8fd9\u4e00\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5feb\u662f\u5feb\u4e86\uff0c\u4ee3\u7801\u7684\u5b9e\u73b0\u96be\u5ea6\u4e5f\u5927\u4e86\u4e9b\u3002\u6700\u65e9\u7684Lua\u89e3\u91ca\u5668\uff0c\u4e5f\u662f\u4f7f\u7528lex\u3001yacc\u8fd9\u6837\u7684\u5de5\u5177\u6765\u81ea\u52a8\u751f\u6210\u4ee3\u7801\u7684\uff0c\u540e\u6765\u4e3a\u4e86\u63d0\u5347\u6027\u80fd\uff0c\u4f5c\u8005\u6539\u6210\u4e86\u81ea\u5df1\u624b\u5199\u7684\u9012\u5f52\u4e0b\u964d\u7684\u5206\u6790\u5668\u3002\u8fd9\u90e8\u5206\u4ee3\u7801\u662f\u6211\u8ba4\u4e3aLua\u4ee3\u7801\u4e2d\u6700\u96be\u7406\u89e3\u7684\u4e00\u4e2a\u90e8\u5206\u4e86--\u56e0\u4e3a\u5b83\u8981\u4e00\u904d\u5206\u6790\u5e72\u592a\u591a\u7684\u4e8b\u60c5\u4e86\u3002"),(0,n.kt)("p",null,"\u6211\u5728\u9605\u8bfbLua\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u80fd\u5145\u5206\u611f\u53d7\u5230\u4f5c\u8005\u4e3a\u4e86Lua\u5728\u6027\u80fd\u4e0a\u7684\u63d0\u5347\u82b1\u8d39\u7684\u5fc3\u8840\uff0c\u81f4\u656c\u3002"),(0,n.kt)("p",null,"\u629b\u5f00\u7406\u8bba\u4e0d\u8c08\uff0c\u5982\u679c\u8981\u5728 Lua \u4e2d\u5b9e\u8df5\uff0c\u6211\u4eec\u5230\u5e95\u53ef\u4ee5\u505a\u70b9\u4ec0\u4e48\u5462\uff1f"),(0,n.kt)("p",null,"\u6211\u8ba4\u4e3a\u9700\u8981\u6709\u8fd9\u51e0\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u5e94\u8be5\u5bf9 Lua \u52a0\u5f3a\u7c7b\u578b\u7cfb\u7edf\u3002Lua \u7684\u52a8\u6001\u6027\u5929\u7136\u652f\u6301\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u805a\u5408\u5728\u4e00\u8d77\uff0c\u6211\u4eec\u628a\u4e0d\u540c\u7684 Component \u653e\u5728\u4e00\u5f20\u8868\u91cc\u7ec4\u5408\u6210 Entity \u5c31\u8db3\u591f\u4e86\u3002\u4f46\u5982\u679c Component \u5206\u7684\u5f88\u7ec6\u7684\u8bdd\uff0c\u7528\u5f88\u591a\u7684\u8868\u7ec4\u5408\u6210\u4e00\u4e2a Entity \u5bf9\u8c61\u7684\u989d\u5916\u5f00\u9500\u4e0d\u5c0f\u3002\u4e0d\u50cf C++ \uff0c\u7ed3\u6784\u4f53\u805a\u5408\u7684\u989d\u5916\u5f00\u9500\u51e0\u4e4e\u4e3a\u96f6\u3002\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u4e0d\u540c Component \u7684\u6570\u636e\u76f4\u63a5\u5e73\u5766\u653e\u5728\u4e00\u4e2a table \u4e2d\uff0c\u53ea\u8981\u952e\u503c\u4e0d\u51b2\u7a81\u5373\u53ef\u3002\u4f46\u662f\u6211\u4eec\u9700\u8981\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\u65b9\u4fbf\u8fd0\u884c\u65f6\u4ece Entity \u4e2d\u8403\u53d6\u51fa Component \u6765\u3002\u53e6\u5916\uff0c\u5982\u679c\u662f C / Lua \u6df7\u5408\u8bbe\u8ba1\u7684\u8bdd\uff0c\u67d0\u4e9b Component \u8fd8\u5e94\u8be5\u53ef\u4ee5\u662f userdata \u3002"),(0,n.kt)("p",null,"\u4ece\u8282\u7701\u7a7a\u95f4\u53ca\u65b9\u4fbf\u904d\u5386\u7684\u89d2\u5ea6\u8bb2\uff0c\u6211\u4eec\u751a\u81f3\u53ef\u4ee5\u628a\u540c\u7c7b\u7684 C Component \u805a\u5408\u5728\u4e00\u5927\u5757\u5185\u5b58\u4e2d\uff0c\u7136\u540e\u5728 Entity \u7684 table \u4e2d\u53ea\u4fdd\u7559\u4e00\u4e2a lightuserdata \u5373\u53ef\u3002ECS \u7684 System \u6700\u91cd\u8981\u7684\u64cd\u4f5c\u5c31\u662f\u904d\u5386\u5904\u7406\u540c\u7c7b Component \uff0c\u8fd9\u6837\u5929\u7136\u5c31\u53ef\u4ee5\u5206\u4e3a C System \u548c Lua System \u3002\u6570\u636e\u7684\u5185\u805a\u6027\u5f88\u9ad8\uff0c\u53ef\u4ee5\u76f4\u63a5\u533a\u5206\u5f00 C data \u548c Lua Data \u3002"),(0,n.kt)("p",null,"\u7136\u540e\u3001\u5c31\u662f\u65b9\u4fbf\u7684\u904d\u5386\u3002ECS \u7684 System \u9700\u8981\u505a\u7684\u5c31\u662f\u7b5b\u9009\u51fa\u5b83\u5173\u5fc3\u7684 Entity \uff0c\u9488\u5bf9\u5176\u4e2d\u7684 Component \u505a\u64cd\u4f5c\u3002\u5982\u679c\u9700\u8981\u7b5b\u9009\u7ed3\u679c\u5927\u5927\u5c11\u4e8e\u5168\u4f53 Entity \u6570\u91cf\uff0c\u904d\u5386\u9010\u4e2a\u5224\u65ad\u5c31\u4f1a\u6548\u7387\u5f88\u4f4e\u3002\u597d\u5728\u5728 Lua \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u5bb9\u6613\u5730\u505a\u51fa cache \uff0c\u53ea\u9700\u8981\u904d\u5386\u7b5b\u9009\u4e00\u6b21\uff0c\u5728\u76d1\u63a7\u65b0\u7684 Component \u7684\u8bde\u751f\u5c31\u53ef\u4ee5\u65b9\u4fbf\u7684\u7ef4\u62a4\u904d\u5386\u7528\u7684\u96c6\u5408\u4e86\u3002"),(0,n.kt)("p",null,"Squirrel"),(0,n.kt)("p",null,"\u53d7lua\u5f71\u54cd\u6700\u5927\uff0c\u4f46\u98ce\u683c\u662fC/C++\u98ce\u683c\u7684\uff0c\u5728lua\u57fa\u7840\u4e0a\u6dfb\u52a0\u4e86class\uff0carray\u7b49"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://squirrel-lang.org/#overview"},"http://squirrel-lang.org/#overview")),(0,n.kt)("p",null,"V8 JavaScript from Google"),(0,n.kt)("h3",{id:"813-gamemonkey"},"8.1.3 GameMonkey"),(0,n.kt)("p",null,"This one is used by several teams. It's faster than Lua and better at threading."),(0,n.kt)("p",null,"\u6ca1\u6709\u7ef4\u62a4\u4e86"),(0,n.kt)("h3",{id:"814-python"},"8.1.4 Python"),(0,n.kt)("p",null,"This one has been used in several games (e.g. Civilization IV)."),(0,n.kt)("p",null,"It is very easy to teach to non-programmers/designers. It is even easier to pick up for developers since it essentially reads like pseudocode. Being dynamically typed is just one of the aspects that help to get people with little to no prior coding experience up and running fast with the language."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The C bindings for python are much more geared towards extending python with C, than embedding python in C.")),(0,n.kt)("h3",{id:"815-javascript"},"8.1.5 JavaScript"),(0,n.kt)("h3",{id:"816-typescript"},"8.1.6 TypeScript"),(0,n.kt)("h3",{id:"817-scumm"},"8.1.7 SCUMM"),(0,n.kt)("h3",{id:"818-mono-script"},"8.1.8 Mono-script"),(0,n.kt)("p",null,"The Mono framework is faster than most (perhaps all?) of scripting languages out there because it's not interpreted, and because there's a layer between the compiler and the instruction set, it allows you to program in a variety of languages including C# and dialects of Python, Lua and Javascript."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"If you're doing console development (including iOS), JITing code is apparently out of the question because you can't mark data pages as executable. The IL it has to be pre-compiled to the target platform."),(0,n.kt)("li",{parentName:"ul"},"Mono has license restrictions. You need a commercial license if you want to use it in an environment where the end user is not allowed/able to upgrade the Mono runtime.")),(0,n.kt)("h3",{id:"819-angelscript"},"8.1.9 AngelScript"),(0,n.kt)("h3",{id:"8110-schemeguile"},"8.1.10 Scheme/Guile"),(0,n.kt)("p",null,"With guile you can have your own DSL (Domain Specific Language) just for your game. Once you get used to the parentheses and prefix notation, scheme is heaven to work with."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://www.gnu.org/software/guile/"},"http://www.gnu.org/software/guile/")),(0,n.kt)("p",null,"libguile "),(0,n.kt)("p",null,"Guile also provides an object library, libguile, that allows other applications to easily incorporate a complete Scheme interpreter. "),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u59cb\u7ec8\u5b9a\u4f4d\u4e3a\u4e00\u4e2a\u6269\u5c55\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"Guile\u4f7f\u7528\u4fdd\u5b88\u5783\u573e\u56de\u6536\uff0cconservative garbage collection "),(0,n.kt)("li",{parentName:"ul"},"it implements the Scheme concept of continuations by copying and reinstating the C stack\u2014but whose practical consequence is that most existing C code can be glued into Guile as is, without needing modifications to cope with strange Scheme execution flows. "),(0,n.kt)("li",{parentName:"ul"},"Module system\uff0c\u5b83\u4f7f\u5f97extensions\u53ef\u4ee5\u4e0e\u4e4b\u524d\u7684\u6a21\u5757\u5171\u5b58")),(0,n.kt)("p",null,"\u6700\u5f00\u59cb\u662f\u57fa\u4e8eEmacs Lisp\u4f5c\u4e3aEmacs\u6269\u5c55\u8bed\u8a00\u7684\u5de8\u5927\u6210\u529f\uff0cGNU Project\u63d0\u51fa\u4e00\u79cd\u5e0c\u671b\u53ef\u4ee5\u5bf9\u6240\u6709GNU \u5e94\u7528\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u5b9e\u73b0\u7c7b\u4f3c\u529f\u80fd\u7684\u8bed\u8a00"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"1.5 Supporting Multiple Languages")," "),(0,n.kt)("p",null,"Since the 2.0 release, Guile\u2019s architecture supports compiling any language to its core virtual machine bytecode, and Scheme is just one of the supported languages. Other supported languages are Emacs Lisp, ECMAScript (commonly known as Javascript) and Brainfuck, and work is under discussion for Lua, Ruby and Python. "),(0,n.kt)("p",null,"This means that users can program applications which use Guile in the language of their choice, rather than having the tastes of the application\u2019s author imposed on them. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.4 Writing Guile Extensions")," "),(0,n.kt)("p",null,"You can link Guile into your program and make Scheme available to the users of your program. You can also link your library into Guile and make its functionality available to all users of Guile. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.5 Using the Guile Module System")," "),(0,n.kt)("p",null,"Guile has support for dividing a program into modules. By using modules, you can group related code together and manage the composition of complete programs from largely in- dependent parts. "),(0,n.kt)("p",null,"Module\u4e4b\u95f4\u662f\u600e\u4e48\u901a\u4fe1\u7684\uff1f\u5b8c\u5168\u72ec\u7acb\u5417\uff1f"),(0,n.kt)("p",null,"3.1.1 Latent Typing "),(0,n.kt)("p",null,"\u6ca1\u6709\u529e\u6cd5\u4e3a\u4e00\u4e2a\u53d8\u91cf\u5b9a\u4e49\u7c7b\u578b\uff0c\u4ee5\u53ca\u4e3a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u5b9a\u4e49\u8fd4\u56de\u7c7b\u578b\uff0c\u6240\u6709\u7684\u53d8\u91cf\u548c\u8868\u8fbe\u5f0f\u90fd\u5fc5\u987b\u5728runtime\u7684\u65f6\u5019\u786e\u5b9a\uff0c\u4e00\u4e2a\u53d8\u91cf\u7684\u540d\u5b57x\u53ea\u4e0d\u8fc7\u8868\u793a\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u540c\u65f6\u7531\u4e8e\u53d8\u91cf\u6ca1\u6709\u7c7b\u578b\uff0c\u6240\u4ee5\u53ef\u4ee5\u8d4b\u4e88\u65b0\u7684\u7c7b\u578b\u7684\u503c"),(0,n.kt)("p",null,"3.2.1 Procedures as Values\n\u8ddf\u5176\u4ed6\u53d8\u91cf\u4e00\u6837\u5904\u4e8e\u540c\u4e00\u4e2a\u7a7a\u95f4\uff0c\u6240\u4ee5\u4f60\u751a\u81f3\u53ef\u4ee5\u5bf9\u4e00\u4e2aprocedure\u4f7f\u7528\u4e00\u4e2a\u4e0d\u540c\u7684\u540d\u5b57"),(0,n.kt)("p",null,"5.7 An Overview of Guile Programming "),(0,n.kt)("p",null,"5.7.1.2 Four Steps Required to Add Guile "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"First, \u5728Guile\u4e2drepresent\u5e94\u7528\u7a0b\u5e8f\u5bf9\u8c61\uff0c\u9664\u975e\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u5185\u7f6e\u6570\u636e\u7c7b\u578b\u5982\u6570\u5b57\uff0c\u5426\u5219\u6211\u4eec\u9700\u8981\u4f7f\u7528foreign object interface\u521b\u9020\u5bf9\u5e94\u7684Scheme\u6570\u636e\u7c7b\u578b\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u53d7\u5783\u573e\u56de\u6536\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"Second\u7f16\u5199\u53ef\u4ee5\u88abGuile\u8bbf\u95ee\u7684operations"),(0,n.kt)("li",{parentName:"ul"},"Third,\u5728\u5bbf\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u9700\u8981\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8c03\u7528\u6dfb\u52a0\u8fdb\u6765\u7684Guile\u65b9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"Finally,\u5728\u5e94\u7528\u7a0b\u5e8f\u7684top-level\uff0c\u9700\u8981\u505a\u4e00\u4e9b\u7ed3\u6784\u8c03\u6574\uff0c\u4f7f\u5f97\u53ef\u4ee5\u521d\u59cb\u5316Guile\u7684\u89e3\u91ca\u5668\uff0c\u4ee5\u53ca\u4e3aScheme\u5b9a\u4e49foreign objects\u548cprimitives")),(0,n.kt)("p",null,"5.7.1.3 How to Represent Dia Data in Scheme "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u8868\u8ff0\u5fc5\u987b\u80fd\u591f\u88ab\u539f\u59cb\u8bed\u8a00decodable\uff0c\u56e0\u4e3a\u539f\u751f\u8bed\u8a00\u9700\u8981\u83b7\u53d6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"The representation must also cope with Scheme code holding on to the value for later use. "),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u6570\u636e\u540c\u65f6\u88abC\u548cScheme\u8bbf\u95ee\uff0c\u4e0d\u80fd\u53ea\u662f\u7b80\u5355\u5730\u4f7f\u7528\u5783\u573e\u56de\u6536\u673a\u5236")),(0,n.kt)("p",null,"One resolution of these issues is for the Scheme-level representation of a shape to be a new, Scheme-specific C structure wrapped up as a foreign object. The foreign object is what is passed into and out of Scheme code, and the Scheme-specific C structure inside the foreign object points to Dia\u2019s underlying C structure so that the code for primitives like square? can get at it. "),(0,n.kt)("p",null,"9 Guile Implementation "),(0,n.kt)("h3",{id:"8111-actionscript"},"8.1.11 ActionScript"),(0,n.kt)("p",null,"This is a hybrid dynamic/static typed language used to create Flash games, which can be widely distributed on the web. It is fairly well supported with libraries like Flixel, FlashPunk and Box2d."),(0,n.kt)("h3",{id:"8112-mruby"},"8.1.12 mruby"),(0,n.kt)("h2",{id:"82-erlang"},"8.2 Erlang"),(0,n.kt)("p",null,"Erlang \u7b97\u4e0d\u4e0a\u51b7\u95e8\uff0c\u81f3\u5c11\u4f60\u8fd8\u77e5\u9053\u540d\u5b57\uff0c\u5f88\u591a\u4f60\u8fde\u540d\u5b57\u90fd\u6ca1\u542c\u8fc7\u7684\u624d\u7b97\u51b7\u95e8\u3002\uff08\u4f46\u662f\u5f88\u591a\u51b7\u95e8\u7684\u8bbe\u8ba1\u7406\u5ff5\u5374\u975e\u5e38\u5148\u8fdb\uff09"),(0,n.kt)("p",null,"Erlang \u5728\u9ad8\u5e76\u53d1\u65b9\u9762\u6709\u4f18\u52bf\u8fd9\u4e2a\u8bf4\u6cd5\uff0c\u5176\u5b9e\u975e\u5e38\u7247\u9762\u3002Erlang \u6700\u725b\u903c\u7684\u5730\u65b9\u662f\u5b83\u662f\u76ee\u524d\u552f\u4e00\u4e00\u4e2a\u5177\u5907\u8f6f\u5b9e\u65f6\uff08Software Realtime\uff09\u7ea7\u522b\u7684\u7cfb\u7edf\u3002Java \u6a21\u4eff\u4e0d\u4e86\uff0cGo \u6a21\u4eff\u4e0d\u4e86\u3002\u5f53\u7136\u5982\u679c\u4f60\u8981\u7528 C/Rust \u4e4b\u7c7b\u6765\u505a\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u662f\u5176\u5b9e\u5c31\u662f\u628a Erlang \u518d\u505a\u4e00\u904d\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u8f6f\u5b9e\u65f6\u6307\u7684\u662f\u5783\u573e\u56de\u6536\u6027\u80fd\u5e73\u7a33\u3002\u5982\u679c\u505a\u8bed\u97f3\u7c7b\u5e94\u7528\uff0c\u9700\u8981\u7f51\u7edc\u4f20\u8f93\u8fc7\u7a0b\u4e0d\u4f1a\u56e0\u4e3a GC \u56de\u6536\u5bfc\u81f4\u5ef6\u8fdf\u6296\u52a8\uff0cErlang \u662f\u4f60\u7684\u5f00\u7bb1\u5373\u7528\u7684\u6700\u4f73\u9009\u62e9\uff0c\u6ca1\u6709\u4e4b\u4e00\u3002"),(0,n.kt)("p",null,"\u201c\u542c\u8d77\u6765\u4e5f\u6ca1\u591a\u725b\u903c\u3002\u4e0d\u5c31\u662f GC \u6280\u672f\u7684\u4f18\u5316\u561b\u3002\u6211\u641e\u4e2a\u5e76\u53d1\u5f0f GC \u7b97\u6cd5\u4e0d\u5c31\u884c\u4e86\uff1f\u201c\u2014\u2014\u8bf4\u8fd9\u8bdd\u7684\uff0c\u53ea\u80fd\u8bf4\u7b2c\u4e00\u5e76\u4e0d\u4e86\u89e3 GC\uff0c\u7b2c\u4e8c\u4e5f\u6839\u672c\u4e0d\u77e5\u9053 Erlang \u7684\u6050\u6016\u4e4b\u5904\u3002\u53ea\u80fd\u8bf4\u670b\u53cb\uff0c\u4f60\u5bf9\u529b\u91cf\u4e00\u65e0\u6240\u77e5\u3002\u8fd9\u91cc\u4e0d\u60f3\u5c55\u5f00\u516b\u767e\u5b57\u590d\u8bfb\u673a\u5f0f\u4ecb\u7ecd\u3002\u81ea\u5df1\u53ef\u4ee5\u770b\u770b Erlang VM \u7684\u8bbe\u8ba1\u4ecb\u7ecd\u3002\u4f60\u4f1a\u660e\u767d\u4e3a\u4ec0\u4e48 Erlang \u91cc\u7684 GC \u624d\u662f\u771f\u6b63\u5b8c\u5168\u5e76\u884c\uff0c\u7edd\u65e0 Stop the World \u53ef\u80fd\uff0c\u800c\u4e14\u56de\u6536\u5ef6\u8fdf\u67d4\u6027\u53ef\u9884\u6d4b\u7684\u3002\u8fd9\u4e00\u5207\u4e0d\u662f\u6ca1\u6709\u4ee3\u4ef7\u7684\uff0c\u4ee3\u4ef7\u5c31\u662f\u53d8\u91cf\u5fc5\u987b\u7edd\u4e0d\u80fd\u88ab\u5171\u4eab\uff0c\u800c\u4e14\u4e0d\u80fd\u88ab\u4fee\u6539\u3002\u8fd9\u4e00\u6765 Java \u4e4b\u7c7b\u7684 C \u5bb6\u65cf\u8bed\u8a00\u8fd8\u73a9\u4e2a\u5565\uff0c\u51c9\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u4e00\u4e9b\u56de\u7b54\u91cc\uff0c\u770b\u4e86\u4e00\u5708\uff0c\u5176\u5b9e\u5f88\u591a\u4e5f\u53ea\u662f\u968f\u4fbf\u7528\u4e86\u4e00\u4e0b\u8bd5\u8bd5\u3002\u8bf4\u51e0\u4e2a\u70b9\uff1a"),(0,n.kt)("p",null,"1\u3001Erlang \u662f\u5b98\u65b9\u81ea\u5e26\u4e00\u5957\u9759\u6001\u7c7b\u578b\u5206\u6790\u7cfb\u7edf\u7684\u2014\u2014",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=dialyzer&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"dialyzer"),"\uff0c\u4f60\u4e0d\u9700\u8981\u5b8c\u5168\u6807\u6ce8\u6240\u6709\u7c7b\u578b\uff0c\u672a\u6807\u6ce8\u7684\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\uff1b\u5b98\u65b9\u5efa\u8bae\u4f60\u5728\u6240\u6709\u9879\u76ee\u91cc\u90fd\u9ed8\u8ba4\u4f7f\u7528\u5b83\u6765\u68c0\u67e5\u9879\u76ee\uff0c\u5982\u679c\u4f60\u9075\u5faa\u8fd9\u4e2a\u5efa\u8bae\uff0c\u90a3\u4e48\u4f60\u8fd8\u80fd\u4eab\u53d7\u81ea\u52a8\u751f\u6210\u6587\u6863\u7684\u597d\u5904\uff1b\u800c\u4e14\u5b98\u65b9\u6807\u51c6\u5e93\u91cc\u4e5f\u90fd\u5199\u4e86\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u4ec0\u4e48 Erlang \u6ca1\u6709\u628a\u9759\u6001\u7c7b\u578b\u5206\u6790\u4f5c\u4e3a\u5439\u7684\u70b9\uff1f"),(0,n.kt)("p",null,"\u56e0\u4e3a\u9759\u6001\u7c7b\u578b\u7cfb\u7edf\uff08\u7f16\u8bd1\u671f\u68c0\u67e5\uff09\u5176\u5b9e\u6709\u5176\u5c40\u9650\u6027\uff0c\u7279\u522b\u662f\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e0b\uff0c\u4e24\u4e2a\u7cfb\u7edf A \u548c B\uff0c\u5047\u8bbe\u67d0\u6570\u636e\u7c7b\u578b\u505a\u4e86\u5347\u7ea7\uff0c\u90a3\u4e48\u5b9e\u9645\u7cfb\u7edf\u5347\u7ea7\u91cc\uff0c\u4f1a\u51fa\u73b0 A \u5347\u7ea7\u4e86\uff0cB \u8fd8\u5904\u4e8e\u65e7\u7248\u672c\u7684\u60c5\u51b5\u3002\u8fd9\u4e2a\u65f6\u5019\u8fd8\u6709\u4e2a\u5c41\u7684\u7c7b\u578b\u4e00\u81f4\u3002\u6240\u4ee5\u4f9d\u8d56\u4e8e\u9759\u6001\u7c7b\u578b\u5206\u6790\u4fdd\u91cd\u7cfb\u7edf\u4e00\u81f4\uff0c\u53ea\u80fd\u5bf9\u4e8e\u5355\u4e2a\u975e\u5206\u5e03\u5f0f\u7cfb\u7edf\u6bd4\u8f83\u597d\u3002\u5bf9\u4e8e\u771f\u5b9e\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u8bbe\u8ba1\u51fa\u53d1\u70b9\u6839\u672c\u4e0d\u662f\u7c7b\u578b\u4e00\u81f4\u3002\u800c\u662f\u5373\u4f7f\u4e0d\u4e00\u81f4\uff0c\u4e5f\u8981\u80fd\u5bb9\u5fcd\u3002\u8fd9\u5c31\u662f\u53e6\u5916\u4e00\u4e2a\u8bdd\u9898\u4e86\u3002"),(0,n.kt)("p",null,"\u989d\u5916\u63d0\u4e00\u53e5\uff0cErlang \u7684\u7c7b\u578b\u7cfb\u7edf\u662f\u5728\u4e0d\u5141\u8bb8\u4f60\u81ea\u5df1\u5b9a\u4e49\u65b0\u7c7b\u578b\u7684\u57fa\u7840\u4e0a\uff0c\u5374\u80fd\u591f\u5b8c\u7f8e\u7684\u6ee1\u8db3\u4f60\u7684\u7c7b\u578b\u8981\u6c42\u7684\u8bbe\u8ba1\u3002\u8bf4\u771f\u7684\uff0c\u6ca1\u6709\u4eba\u548c\u6211\u63d0\u8fc7\u8fd9\u4e00\u70b9\uff0c\u4f46\u662f\u5f53\u6709\u4e00\u5929\u6211\u7a81\u7136\u610f\u8bc6\u5230\u7684\u65f6\u5019\uff0c\u90a3\u4e00\u77ac\u95f4\u662f\u6781\u5176\u9707\u60ca\u7684\u2026\u2026\uff08\u60f3\u60f3 Haskell\uff09"),(0,n.kt)("p",null,"2\u3001Erlang \u81ea\u5e26",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%BA%90%E4%BB%A3%E7%A0%81&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6e90\u4ee3\u7801"),"\u53d8\u6362\u7cfb\u7edf\uff0c\u8fd9\u73a9\u610f\u513f\u7528\u4eba\u8bdd\u8bf4\u5c31\u662f\uff0c\u4f60\u53ef\u4ee5\u5bf9\u4f60\u81ea\u5df1\u7684\u6e90\u4ee3\u7801\u8fdb\u884c\u53d8\u6362\u3002\u6bd4\u5982 Erlang \u5b98\u65b9\u81ea\u5df1\u7684 EUnit \u5e93\uff0c\u5b83\u662f\u4e00\u4e2a\u5355\u5143\u6d4b\u8bd5\u5e93\u3002\u5b83\u7684\u539f\u7406\u662f\u4ec0\u4e48\uff1f\u5b9e\u9645\u4e0a\u5c31\u662f\u5f53\u4f60\u5f15\u7528 EUnit \u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u5bfc\u81f4\u4f60\u7684\u5f53\u524d\u6a21\u5757\u589e\u52a0\u4e00\u4e2a parse_transform \u6807\u8bb0\u3002\u7136\u540e\u7f16\u8bd1\u671f\u5c31\u77e5\u9053\u8fd9\u4e2a\u6a21\u5757\u9700\u8981\u88ab\u5916\u90e8\u91cd\u5199\u3002\u6700\u7ec8\u5b9e\u9645\u4e0a\u662f\u4ea4\u7ed9 eunit_autoexport \u6a21\u5757\u6765\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u4e0d\u662f\u7279\u6743\u3002\u4f60\u81ea\u5df1\u4e5f\u53ef\u4ee5\u7528\u3002\u4f46\u662f\u8fd9\u4e2a feature \u786e\u5b9e\u6bd4\u8f83\u9ad8\u7ea7\uff0c\u6bd4\u8f83\u5c11\u6709\u4eba\u8ba8\u8bba\u3002"),(0,n.kt)("p",null,"\u524d\u7aef\u5de5\u7a0b\u5e08\u719f\u6089\u7684 Babel \u5176\u5b9e\u505a\u7684\u5c31\u662f\u8fd9\u4ef6\u4e8b\u3002\u53ea\u4e0d\u8fc7\u5dee\u522b\u5728\u4e8e\uff0cErlang \u76f4\u63a5\u628a\u8fd9\u4e2a\u505a\u5230\u4e86\u5185\u90e8\u800c\u5df2\u3002\u800c\u4e14\u975e\u5e38\u7b80\u6d01\u3002\u5927\u90e8\u5206\u65f6\u5019\u90fd\u7528\u4e0d\u5230\u8fd9\u4e2a\u3002\u5f53\u65f6\u5f53\u4f60\u6709\u90a3\u4e48\u4e00\u4e24\u4e2a feature \u771f\u7684\u9700\u8981\u7528\u725b\u5200\u7684\u65f6\u5019\uff0c\u4f60\u4e00\u5b9a\u4f1a\u53d1\u51fa\u5367\u69fd\u592a\u723d\u4e86\u7684\u8bc4\u4ef7\u3002"),(0,n.kt)("p",null,"3\u3001Erlang \u7684\u6a21\u5757\u7cfb\u7edf\u662f\u6211\u89c1\u8fc7\u6700\u4eba\u6027\u5316\u7684\uff0c\u7b80\u5355\u5230\u5c0f\u5b66\u751f\u90fd\u80fd\u660e\u767d\u3002\u4f60\u4e0d\u9700\u8981 ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=import&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"import")," \u4efb\u4f55\u6a21\u5757\u3002\u4f60\u60f3\u4f7f\u7528\uff0c\u5c31\u76f4\u63a5\u4f7f\u7528\u3002Erlang \u4f1a\u4e3a\u4f60\u81ea\u52a8\u5bfb\u627e\u5e76\u52a0\u8f7d\u3002\u670b\u53cb\u4eec\uff0c\u5176\u4ed6\u8bed\u8a00\u5934\u90e8\u90a3\u4e00\u5806 import \u600e\u4e48\u8bf4\u5462\uff0c\u771f\u7684\u662f\u8131\u88e4\u5b50\u653e\u5c41\u7684\u5b58\u5728\u3002\u56e0\u4e3a Erlang \u7684\u8bed\u6cd5\u4fdd\u8bc1\u4e86\uff0c\u80fd\u591f\u7b80\u5355\u7684\u626b\u63cf\u5f53\u524d\u6587\u4ef6\u5c31\u80fd\u63a8\u5bfc\u51fa\u5230\u5e95\u4f7f\u7528\u4e86\u54ea\u4e9b\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u53ef\u4ee5\u5728\u4e0d\u505c\u6b62\u7cfb\u7edf\u7684\u60c5\u51b5\u4e0b\u5b89\u5168\u7684\u70ed\u5347\u7ea7\u3002\u662f\u7684\uff0c",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%83%AD%E5%8D%87%E7%BA%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u70ed\u5347\u7ea7"),"\u5176\u5b9e Python\u3001JavaScript \u4e4b\u7c7b\u7684\u7528\u70b9 Hack \u5c0f\u6280\u5de7\uff0c\u4e5f\u80fd\u6a21\u4eff\u4e2a\u4e03\u516b\u5206\u3002\u95ee\u9898\u662f\u6ca1\u6709\u4e00\u4e2a\u6562\u8bf4\u201c\u5b89\u5168\u201d\u3002\u56e0\u4e3a Erlang \u7684\u6a21\u5757\u70ed\u5347\u7ea7\u662f\u591a\u7248\u672c\u5e76\u5b58\u7684\u3002\u5047\u8bbe\u4e00\u4e2a\u8fdb\u7a0b\u771f\u6b63\u8dd1\uff0c\u5b83\u4f7f\u7528\u7684\u662f\u8001\u7248\u672c\u6a21\u5757\u3002\u90a3\u4e48\u5347\u7ea7\u7684\u65f6\u5019\uff0c\u65b0\u8fdb\u7a0b\u4f1a\u4f7f\u7528\u65b0\u7248\u672c\u3002\u4e92\u4e0d\u5e72\u6270\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u65b0\u7248\u672c\u5e26\u6765\u4e86\u65b0\u95ee\u9898\uff0c\u4f60\u8fd8\u53ef\u4ee5\u65e0\u7f1d\u7684\u964d\u56de\u53bb\u3002\u5f53\u7136\uff0c\u4f60\u613f\u610f\uff0c\u4e5f\u53ef\u4ee5\u628a\u8001\u7684\u8fdb\u7a0b\u5e72\u6389\u4e00\u4e9b\uff0c\u76f4\u63a5\u5f3a\u5236\u5230\u65b0\u7248\u672c\u3002\u5176\u4ed6\u7cfb\u7edf\u8fd9\u4e48\u505a\u5b9e\u5728\u592a\u53ef\u6015\u3002\u53ef\u662f Erlang \u7684\u8fdb\u7a0b\u662f\u5bb9\u9519\u7684\uff0c\u72b6\u6001\u53ef\u6062\u590d\u800c\u4e14\u53ef\u5347\u7ea7\u7684\uff0c\u6240\u4ee5\u8fd9\u4e48\u505a\u8fd8\u662f\u53ef\u884c\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u70ed\u66f4\uff0c\u53ea\u662f\u5e94\u5bf9\u4e00\u4e9b\u5c40\u90e8\u5c0f\u4fee\u6539\u3002\u5982\u679c\u6a21\u5757\u95f4\u6709\u590d\u6742\u4f9d\u8d56\uff0c\u9700\u8981\u4e00\u6b21\u8fdb\u884c\u591a\u4e2a\u6a21\u5757\u70ed\u66f4\u600e\u4e48\u529e\uff1f\u653e\u5fc3\u5427\u3002Erlang \u6709\u5b8c\u6574\u7684\u65b9\u6848\u3002"),(0,n.kt)("p",null,"4\u3001\u5176\u4ed6\u8bed\u8a00\u91cc\uff0c\u7a0b\u5e8f\u57fa\u672c\u4e0a\u5c31\u662f\uff0c\u4e00\u4e2a\u4e3b\u5165\u53e3\uff0c\u7136\u540e\u8c03\u7528\u5176\u4ed6\u7b2c\u4e09\u65b9\u6a21\u5757\u8fd9\u6837\u7684\u8bbe\u8ba1\u3002\u4f46\u662f\u8fd9\u4e2a\u8bbe\u8ba1\u592a\u7b80\u964b\u3002Erlang \u7684\u8bbe\u8ba1\u662f\uff0c\u6574\u4e2a\u7cfb\u7edf\u662f\u7531\u4e00\u7cfb\u5217\u72ec\u7acb\u8fd0\u884c\u7684 Application \u7ec4\u6210\u7684\u3002\u6ca1\u9519\uff0c\u5176\u5b9e\u4f60\u53ea\u662f\u5728\u4e3a Erlang \u8fd9\u4e2a\u7cfb\u7edf\u91cc\u5f00\u53d1 Application\u3002\u5305\u62ec\u4fd7\u8bdd\u8bf4\u7684\u201c\u7cfb\u7edf",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%A0%87%E5%87%86%E5%BA%93&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6807\u51c6\u5e93"),"\u201d\u8fd9\u79cd\u73a9\u610f\u513f\uff0cErlang \u91cc\u4e5f\u662f\u72ec\u7acb\u7684 Application\u3002"),(0,n.kt)("p",null,"\u6709\u4f55\u533a\u522b\uff1f\u6bcf\u4e2a Application \u90fd\u6709\u81ea\u5df1\u7684\u4e00\u4e2a\u542f\u52a8\u8fc7\u7a0b\uff0c\u81ea\u5df1\u7684\u4e00\u7ec4\u8fdb\u7a0b\uff08\u6784\u6210\u76d1\u7763\u6811\uff0c\u5177\u5907\u72ec\u7acb\u7684\u5bb9\u9519\u6027\uff09\u3002\u76f8\u4e92\u4e4b\u95f4\u8fd0\u884c\u65f6\u8026\u5408\u662f\u677e\u6563\u7684\u3002\u6240\u4ee5\uff0cA \u548c B \u4e24\u4e2a Application \u4f60\u60f3\u8fd0\u884c\u5728\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6216\u8005\u591a\u53f0\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u4e0a\uff0c\u4ee3\u7801\u6709\u5dee\u522b\u5417\uff1f\u6ca1\u6709\u3002"),(0,n.kt)("p",null,"\u4f60\u611f\u89c9\u5230\u4e00\u4e1d\u5947\u602a\u7684\u6c14\u5473\u6ca1\u3002\u662f\u7684\uff0cErlang \u751a\u81f3\u6709\u81ea\u5df1\u7684 Shell \u7528\u6765\u7ba1\u7406\u548c\u63a7\u5236\u8fd9\u6574\u4e2a\u7cfb\u7edf\u3002\u800c\u8fd9\u4e2a Shell \u91cc\u5c31\u662f Erlang \u8bed\u8a00\u672c\u8eab\u3002\u5b8c\u7f8e\u7684\u4e00\u81f4\uff0c\u7b80\u76f4\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u987a\u5e26\u4e00\u63d0\uff0cErlang \u662f\u53ef\u4ee5\u5199\u811a\u672c\u7684\uff0c\u53eb\u505a escript\u3002\u539f\u6c41\u539f\u5473\uff0c\u4fdd\u8bc1\u9c9c\u7f8e\u3002"),(0,n.kt)("p",null,"5\u3001\u4e00\u822c\u8bed\u8a00\u7684\u5b57\u7b26\u4e32\u5904\u7406\uff0c\u611f\u89c9\u5f88\u65b9\u4fbf\u3002\u4f46\u662f\u5f88\u591a\u8bed\u8a00\u5185\u90e8\u662f\u53ea\u80fd\u5904\u7406 Unicode \u7684\u67d0\u4e00\u79cd\u7f16\u7801\u7684\uff08UTF-8\u3001UTF-16BE \u662f\u6d41\u884c\u9009\u62e9\uff09\u3002\u5982\u679c\u60f3\u8981\u968f\u5fc3\u6240\u6b32\u7684\u53bb\u652f\u6301\uff0c\u5c31\u5fc5\u987b\u628a\u5b57\u7b26\u4e32\u5f53\u4f5c\u539f\u59cb\u4e8c\u8fdb\u5236\u6570\u636e\u5904\u7406\u3002\u4f46\u662f Erlang \u91cc\u6839\u672c\u6ca1\u6709\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u5c55\u5f00\u8bf4\u6bd4\u8f83\u590d\u6742\u3002\u5f88\u591a\u4eba\u62b1\u6028 Erlang \u91cc\u5b57\u7b26\u4e32\u5904\u7406\u597d\u50cf\u4e0d\u65b9\u4fbf\u3002\u4e00\u4e2a\u91cd\u8981\u7684\u539f\u56e0\u662f\uff0c\u8fd9\u90e8\u5206\u7684\u7406\u89e3\u9700\u8981\u7a0d\u5fae\u6df1\u4e00\u70b9\u7684\u57fa\u7840\u77e5\u8bc6\uff08\u4e0d\u590d\u6742\uff09\u3002\u4ee5\u540e\u518d\u5c55\u5f00\u8bf4"),(0,n.kt)("p",null,"6\u3001Erlang \u91cc\u9762\u76f4\u63a5\u5305\u542b\u4e86\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u800c\u4e14\u53ea\u9700\u8981\u8fd9\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u662f\u7684\uff0c\u6bd4\u5982 Erlang \u91cc\u662f\u81ea\u5e26\u72b6\u6001\u673a\u6a21\u5f0f\u7684\u3002\u8bf4\u5230\u8fd9\u91cc\u2026\u2026"),(0,n.kt)("h3",{id:"821-beam-vm"},"8.2.1 Beam VM"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u77e5\u9053erlang\u8981\u89e3\u51b3\u7684\u95ee\u9898\u662f\u201c\u9ad8\u5e76\u53d1\u201d\u548c\u201d\u5206\u5e03\u5f0f\u201c\u95ee\u9898\uff0c\u8fd9\u6837\u8bf4\u6709\u70b9\u592a\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u6765\u8bf4\uff0cerlang\u5728\u5e94\u7528\u5c42\u548c\u64cd\u4f5c\u7cfb\u7edf\u5c42\u4e4b\u95f4\u53c8\u52a0\u5165\u4e86\u4e00\u4e2a\u7ec6\u7c92\u5ea6\u7684\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\u5c42\uff08beam vm\uff09\uff0c\u8fd9\u4e2a\u5206\u914d\u5c42\u81ea\u52a8\u628a\u8ba1\u7b97\u4efb\u52a1\u5206\u6d3e\u5230os\uff08thread\uff09\u5c42\u3002\u8fd9\u5176\u5b9e\u662f\u9ad8\u5e76\u53d1\u5904\u7406\u4e2d\u4e00\u4e2a\u5f88\u7406\u60f3\u7684\u73af\u5883\uff0c\u8ba1\u7b97\u8d44\u6e90\u53ef\u4ee5\u66f4\u5408\u7406\u7684\u914d\u7f6e\u3002\u7406\u8bba\u4e0a\u53ef\u4ee5\u505a\u5230\u52a8\u6001\u6269\u5927\u6216\u8005\u7f29\u5c0f\u6240\u9700\u7684\u786c\u4ef6\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u6709\u4e86\u7ec6\u7c92\u5ea6\u7684\u81ea\u52a8\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\uff0c\u5f88\u591a\u65f6\u5019\u5c31\u4e0d\u9700\u8981\u5728\u5e94\u7528\u5c42\u53bb\u8003\u8651\u8fd9\u4e2a\u95ee\u9898\u4e86\uff0c\u51cf\u5c11\u4e86\u5f88\u591a\u65e0\u8c13\u7684\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e0d\u6b63\u662f\u672a\u6765\u6240\u9700\u8981\u7684\u8ba1\u7b97\u6a21\u5f0f\u5417\uff1f"),(0,n.kt)("h3",{id:"842-concurrency-oriented-languages"},"8.4.2 Concurrency Oriented Languages"),(0,n.kt)("h4",{id:"8421-programming-by-observing-the-real-world"},"8.4.2.1 Programming by observing the real world"),(0,n.kt)("p",null,"We oden want to write programs that model the world or interact with the world. Writing such a program in a COPL is easy. Firstly, we perform an analysis which is a three-step process:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"We identify all the truly concurrent activities in our real world activ- ity."),(0,n.kt)("li",{parentName:"ol"},"We identify all message channels between the concurrent activities."),(0,n.kt)("li",{parentName:"ol"},"We write down all the messages which can flow on the dicerent message channels.")),(0,n.kt)("p",null,"Now we write the program. The structure of the program should exactly follow the structure of the problem. Each real world concurrent activity should be mapped onto exactly one concurrent process in our programming language. If there is a 1:1 mapping of the problem onto the program we say that the program is isomorphic to the problem."),(0,n.kt)("p",null,"It is extremely important that the mapping is exactly 1:1. The reason for this is that it minimizes the conceptual gap between the problem and the solution. If this mapping is not 1:1 the program will quickly degenerate, and become diecult to understand. This degeneration is oden observed when non-CO languages are used to solve concurrent problems. Oden the only way to get the program to work is to force several independent activities to be controlled by the same language thread or process. This leads to a inevitable loss of clarity, and makes the programs subject to complex and irreproducible interference errors."),(0,n.kt)("p",null,"In performing our analysis of the problem we must choose an appro- priate granularity for our model. For example, if we were writing an instant messaging system, we might choose to use one process per user and not one process for every atom in the user\u2019s body."),(0,n.kt)("h4",{id:"8422-characteristics-of-a-copl"},"8.4.2.2 Characteristics of a COPL"),(0,n.kt)("p",null,"COPLs are characterised by the following six properties:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"COPLs must support processes. A process can be thought of as a self-contained virtual machine."),(0,n.kt)("li",{parentName:"ol"},"Several processes operating on the same machine must be strongly isolated. A fault in one processe should not adversely ecect another process, unless such interaction is explicitly programmed."),(0,n.kt)("li",{parentName:"ol"},"Each process must be identified by a unique unforgeable identifier. We will call this the Pid of the process."),(0,n.kt)("li",{parentName:"ol"},"There should be no shared state between processes. Processes inter- act by sending messages. If you know the Pid of a process then you can send a message to the process."),(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be unreliable with no guarantee of delivery."),(0,n.kt)("li",{parentName:"ol"},"It should be possible for one process to detect failure in another process. We should also know the reason for failure.")),(0,n.kt)("h4",{id:"8423-process-isolation"},"8.4.2.3 Process isolation*"),(0,n.kt)("p",null,"The notion of ",(0,n.kt)("em",{parentName:"p"},"isolation")," is central to understanding COP, and to the con- struction of fault-tolerant sodware. Two processes operating on the same machine must be as independent as if they ran on physically separated machines."),(0,n.kt)("p",null,"Isolation has several consequences:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Processes have \u201cshare nothing\u201d semantics. This is obvious since they are imagined to run on physically separated machines."),(0,n.kt)("li",{parentName:"ol"},"Message passing is the only way to pass data between processes. Again since nothing is shared this is the only means possible to exchange data."),(0,n.kt)("li",{parentName:"ol"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation."),(0,n.kt)("li",{parentName:"ol"},"Since nothing is shared, everything necessary to perform a dis- tributed computation must be copied. Since nothing is shared, and the only way to communicate between processes is by message pass- ing, then we will never know if our messages arrive (remember we said that message passing is inherently unreliable.) The only way to know if a message has been correctly sent is to send a confirmation message back.")),(0,n.kt)("h4",{id:"8424-names-of-processes"},"8.4.2.4 Names of processes"),(0,n.kt)("p",null,"We require that the names of processes are unforgeable. This means that it should be impossible to guess the name of a process, and thereby interact with that process. We will assume that processes know their own names, and that processes which create other processes know the names of the processes which they have created. In other words, a parent process knows the names of its children."),(0,n.kt)("p",null,"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",null,"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",null,"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.\nIn many primitive religions it was believed that humans had powers over spirits if they could command them by their real names. Knowing the real name of a spirit gave you power over the spirit, and using this name you could command the spirit to do various things for you. COPLs use the same idea."),(0,n.kt)("h4",{id:"8425-message-passing"},"8.4.2.5 Message passing"),(0,n.kt)("p",null,"Message passing obeys the following rules:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be atomic which means that a mes- sage is either delivered in its entirety or not at all."),(0,n.kt)("li",{parentName:"ol"},"Message passing between a pair of processes is assumed to be or- dered meaning that if a sequence of messages is sent and received between any pair of processes then the messages will be received in the same order they were sent."),(0,n.kt)("li",{parentName:"ol"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"8426-protocols"},"8.4.2.6 Protocols*"),(0,n.kt)("p",null,"Isolation of components, and message passing between components, is architecturally suecient for protecting a system from the consequences of a sodware error, but it is not suecient to specify the behaviour of a system, nor, in the event of some kind of failure to determine which component has failed."),(0,n.kt)("p",null,"Up to now we have assumed that failure is a property of a single component, a single component will either do what it is supposed to do or fail as soon as possible. It might happen, however, that no components are observed to fail, and yet the system still does not work as expected."),(0,n.kt)("p",null,"To complete our programming model, we add therefore one more thing. Not only do we need completely isolated components that com- municate only by message passing, but also we need to specify the com- munication protocols that are used between each pair of components that communicate with each other."),(0,n.kt)("p",null,"By specifying the communication protocol that should be obeyed be- tween two components we can easily find out if either of the components involved has violated the protocol. Guaranteeing that the protocol is en- forced should be done by static analysis, if possible, or failing this by compiling run-time checks into the code."),(0,n.kt)("h2",{id:"83-move"},"8.3 Move"),(0,n.kt)("p",null,"Move,asafeandflexibleprogramminglanguagefortheLibraBlockchain","[1][2]",". Move is an executable bytecode language used to implement custom transactions and smart contracts. The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic: a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies. The safety and expressivity of Move have enabled us to implement significant parts of the Libra protocol in Move, including Libra coin, transaction processing, and validator management."),(0,n.kt)("h3",{id:"831-\u95ee\u9898"},"8.3.1 \u95ee\u9898"),(0,n.kt)("p",null,"\u76ee\u524d\u7684\u8bed\u8a00\u5b58\u5728\u51e0\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Indirect representation of assets\uff1a\u8d44\u6e90\u4ec5\u4ec5\u88ab\u7f16\u7801\u4e3a\u4e00\u4e2a\u6574\u6570\uff0c\u4f46\u662f\u4e00\u4e2a\u6574\u6570\u8ddf\u4e00\u4e2a\u8d44\u6e90\u8fd8\u662f \u6709\u5dee\u5f02\u7684\uff0c\u5c06\u8d44\u6e90\u8868\u8ff0\u4e3a\u4e00\u4e2a\u6574\u6570\u4f7f\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u5bb9\u6613\u51fa\u9519\u7684\u7a0b\u5e8f\uff0c\u8d44\u6e90\u9700\u8981\u88ab\u7279\u6b8a\u5bf9\u5f85"),(0,n.kt)("li",{parentName:"ul"},"Scarcity is not extensible: In addition, the scarcity protections are hardcoded directly in the language semantics. A programmer that wishes to create a custom asset must carefully reimplement scarcity with no support from the language."),(0,n.kt)("li",{parentName:"ul"},"Access control is not flexible\uff1a The only access control policy the model enforces is the signature scheme based on the public key. Like the scarcity protections, the access control policy is deeply embedded in the language semantics. It is not obvious how to extend the language to allow programmers to define custom access control policies.")),(0,n.kt)("h3",{id:"832-move-design-goals"},"8.3.2 Move Design Goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"First-Class Resources \uff1aBlockchain systems let users write programs that directly interact with digital assets. As we discussed in Section 2.2, digital assets have special characteristics that distinguish them from the values tradi- tionally used in programming, such as booleans, integers, and strings. A robust and elegant approach to programming with assets requires a representation that preserves these characteristics."),(0,n.kt)("p",{parentName:"li"},"The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic ","[3]",": a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Flexibility\uff1amodules/resources/procedures\uff0c\u6bcf\u4e2a\u4ea4\u6613\u5305\u542b\u4e00\u4e2aScript\uff0c\u8fd9\u4e2ascript\u53ef\u4ee5\u8c03\u7528\u4efb\u610fmodule\u4e2d\u7684procedure\uff0c\u63d0\u4f9b\u5de8\u5927\u7684\u7075\u6d3b\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Safety: resource safety, type safety, memory safety, Move\u5728\u8fd0\u884c\u65f6\uff08on-chain\uff09\u52a8\u6001\u5206\u6790")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Verifiability\uff1a\u5168\u90e8\u5728\u8fd0\u884c\u65f6\u505a\u9a8c\u8bc1\u4f1a\u5e26\u6765\u8ba1\u7b97\u590d\u6742\u5ea6\u548c\u534f\u8bae\u7684\u590d\u6742\u5ea6\uff0c\u6240\u4ee5\u7ed3\u5408off-chain + on-chain\u7684\u9a8c\u8bc1\uff0c\u4f7fon-chain\u5c3d\u53ef\u80fd\u8f7b\u91cf\u5e76\u4e14\u5c3d\u53ef\u80fd\u805a\u7126\u6838\u5fc3\u7684\u5b89\u5168\u5c5e\u6027\u4e0a"))),(0,n.kt)("p",null,"We have made several design decisions that make Move more amenable to static verification than most general-purpose languages:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"No dynamic dispatch. The target of each call site can be statically determined. This makes it easy for verification tools to reason precisely about the effects of a procedure call without performing a complex call graph construction analysis."),(0,n.kt)("li",{parentName:"ol"},"Limited mutability. Every mutation to a Move value occurs through a reference. References are temporary values that must be created and destroyed within the confines of a single transac- tion script. Move\u2019s bytecode verifier uses a \u201cborrow checking\u201d scheme similar to Rust to ensure that at most one mutable reference to a value exists at any point in time. In addition, the language ensures that global storage is always a tree instead of an arbitrary graph. This allows verification tools to modularize reasoning about the effects of a write operation."),(0,n.kt)("li",{parentName:"ol"},"Modularity. Move modules enforce data abstraction and localize critical operations on re- sources. The encapsulation enabled by a module combined with the protections enforced by the Move type system ensures that the properties established for a module\u2019s types cannot be violated by code outside the module. We expect this design to enable exhaustive functional ver- ification of important module invariants by looking at a module in isolation without considering its clients.")),(0,n.kt)("h3",{id:"833-move-overview"},"8.3.3 Move Overview"),(0,n.kt)("h4",{id:"8331-peer-to-peer-payment-transaction-script"},"8.3.3.1 Peer-to-Peer Payment Transaction Script"),(0,n.kt)("p",null,"We use the term resource safety to describe the guarantees that Move resources can never be copied, reused, or lost. These guarantees are quite powerful because Move programmers can implement custom resources that also enjoy these protections."),(0,n.kt)("h4",{id:"8332-module"},"8.3.3.2 Module"),(0,n.kt)("h3",{id:"834-the-move-language"},"8.3.4 The Move Language"),(0,n.kt)("h2",{id:"84-smalltalk"},"8.4 Smalltalk"),(0,n.kt)("h3",{id:"841-object-model"},"8.4.1 Object Model"),(0,n.kt)("h4",{id:"8421-message"},"8.4.2.1 Message"),(0,n.kt)("p",null,"To describe how the objects are represented, the programmer must list all the fields in the object, and give each field a name. To describe how the object will behave, the programmer will give a series of \u201cmethods\u201d."),(0,n.kt)("p",null,"A method is like a function, except that it is applied to a specific object. We also say that the method is \u201cinvoked\u201d on an object or \u201csent to\u201d an object. The object in question is called the \u201creceiver.\u201d Every method is invoked on a receiving object. In C++ and Java, the receiver is called the \u201cthis object\u201d, but Smalltalk does not use this this terminology. The \u201cthis\u201d terminology makes for awkward wordings."),(0,n.kt)("p",null,"Methods in Smalltalk are similar to methods in Java and C++, where they are called \u201cmember functions\u201d. Methods may take arguments and may return a result. The method body is a sequence of executable statements. Methods are invoked from expressions, just as in other languages."),(0,n.kt)("p",null,"There is an important distinction between \u201cmethods\u201d and \u201cmessages\u201d. A method is a body of code, while a message is something that is sent. A method is similar to a function; in this analogy, sending a message is similar to calling a function. An expression which invokes a method is called a \u201cmessage sending expression.\u201d"),(0,n.kt)("p",null,"Smalltalk terminology makes a clear distinction between \u201cmessage\u201d and \u201cmethod\u201d, but Java and C++ terminology sometimes confuses these concepts. A message-sending expression will send a message to the object. How the object responds to the message depends on the class of the object. Objects of different classes will respond to the same message differently, since they will invoke different methods."),(0,n.kt)("p",null,"When a message is sent to an object, a method will be selected and executed. Since we cannot know, in general, the class of the object until run-time, the method cannot be selected until the message is actually sent. This is called \u201cdynamic binding\u201d, and Java, C++, and Smalltalk all have it. With straight functions, the compiler can look at a \u201ccall\u201d statement and figure out at compile-time (i.e., \u201cstatically\u201d) which body of code to branch to. C++ (which always prefers efficiency over clarity) encourages static binding and refers to dynamically bound methods as \u201cvirtual\u201d methods, and refers to the virtual table."),(0,n.kt)("p",null,"In the Smalltalk programming model, all binding is dynamic. However, the compiler and virtual machine will often bind methods statically for greater execution efficiency when it is can be done safely and without changing the program\u2019s behavior."),(0,n.kt)("h4",{id:"8422-message-sending-syntax"},"8.4.2.2 Message Sending Syntax"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x reset "a message-send in Smalltalk"\nx.reset() // a message-send in Java\n\nmyDept manager name last\nmyDept.manager().name().last()\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Binary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x + y "in Smalltalk"\nx + y // in Java\nx.plus(y) //java\n')),(0,n.kt)("p",null,"\u5305\u62ec+ * <= == <===>"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Keyword Messages")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"}," x addKey: a value: b useMap: myMap ifError: errCode")," "),(0,n.kt)("p",null,"The message name is \u201caddKey:value:useMap:ifError:\u201d Four colons mean four arguments."),(0,n.kt)("h4",{id:"8423-discussion-of-smalltalk-syntax"},"8.4.2.3 Discussion of Smalltalk Syntax"),(0,n.kt)("p",null,"These rules are unfamiliar at first, and some readers are probably thinking \u201cthis is very different\u201d. The key is that Smalltalk syntax is very simple. In practice, the syntax is learned quickly and becomes second nature in no time."),(0,n.kt)("p",null,"Compared to Java or C++ syntax, Smalltalk syntax is simpler and cleaner. Technically, Smalltalk is LL(1), which means it can be parsed with the simplest top-down parsing algorithms, while C++ is LR(1) and cannot be parsed with any simple algorithms. What is hard for computers to parse is also hard for programmers to parse."),(0,n.kt)("p",null,"Smalltalk\u7684\u65b9\u5f0f\u66f4\u5229\u4e8e\u52a8\u6001binding\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728x + y \u4e2d\u4e0d\u9700\u8981\u5411\u540e\u770b\u76f4\u63a5\u5c31\u53ef\u4ee5\u63a8\u5bfc\u9700\u8981\u4f7f\u7528\u7684method"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e2d\uff0c\u5982x.processString (y, m, s, d)\uff0c\u6bcf\u4e2a\u53c2\u6570\u90fd\u6709\u540d\u5b57\uff0c\u5f62\u6210\u5305\u542b\u4fe1\u606f\u66f4\u591a\u7684\u51fd\u6570\u540d\u79f0processString:mapping:symbols:defaults:\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u5bf9\u51fd\u6570\u7684\u67e5\u627e")),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5728\u4f20\u7edf\u7684C++/Java\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7f16\u8bd1\u5668\u63a8\u5bfc\u7c7b\u578b\uff0c\u9700\u8981\u6784\u5efa\u8bed\u6cd5\u6811\uff0c\u4ee5\u53ca\u5404\u79cd\u8868\uff0c\u8fd9\u5bfc\u81f4\u52a8\u6001\u7ed1\u5b9a\u6216\u8005\u63a8\u5bfc\u7684\u80fd\u529b\u4e0b\u964d\u3002\u56e0\u4e3aSmalltalk\u662f\u5b8c\u5168\u65e0\u7c7b\u578b\u7684\uff0c\u4e0d\u50cfJava/C++\u6bcf\u4e2a\u53d8\u91cf\u90fd\u5fc5\u987b\u58f0\u660e\u4e00\u4e2a\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"One might reasonably ask, why bother to declare variables at all, if there is no typing information? The primary answer is that every variable must be declared so that the compiler can set aside space for each variable. Every variable will be allocated 32 bits and can hold either a pointer to an object or a SmallInteger."),(0,n.kt)("p",null,"A second reason for declaring variables is so that the compiler can guard against misspellings of variable names by the programmer. Every variable must be declared. If, in the body of executable statements, the programmer misspells a variable name, the compiler will complain that the variable has not been declared."),(0,n.kt)("h4",{id:"8424-the-distinction-between-types-and-classes"},"8.4.2.4 The Distinction Between Types and Classes"),(0,n.kt)("p",null,"Languages like Java and C++ make a distinction between \u201ctypes\u201d and \u201cclasses\u201d. In Java, there are 3 kinds of types: classes, interfaces, and primitive types (like \u201cint\u201d). Each variable is given a type at compile-time; this places restrictions on what values can be assigned to that variable at run-time."),(0,n.kt)("p",null,"In Smalltalk there are no constraints on what can be assigned to a variable. Any variable may point to any class of object. It is the programmer\u2019s responsibility to make sure that a variable\u2019s value is of the correct class at run-time."),(0,n.kt)("p",null,"Which is better: a typed language or an un-typed language? Both approaches have their strengths and weaknesses. In my opinion, neither approach is clearly superior."),(0,n.kt)("p",null,"If a type system is well-designed, then it is often the case that the compiler can catch bugs that would otherwise go unnoticed until run-time. In this way, typed languages make programs more reliable and readable. On the other hand, a strong type system occasionally makes it difficult to do certain things. The programmer ends up writing code to defeat or work around the language\u2019s type system. It sometimes seems that type system is a burden to the programmer, providing only a false sense of protection."),(0,n.kt)("p",null,"With an un-typed language, the program is not cluttered up with type definitions and casting expressions. The algorithm tends to show through more clearly. However, when reading complex code, it can sometimes be virtually impossible to guess what kinds of data a given variable might point to at some point in the code."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dynamic Typing")),(0,n.kt)("p",null,"Sometimes, un-typed languages like Smalltalk are said to be \u201cdynamically type,\u201d since each value has a type, but the compiler does not check the types. Languages like Java and C++ are said to be \u201cstatically typed.\u201d In a statically type language, the compiler checks to make sure every line of the program is type-correct. At runtime, there is no checking and, in theory, the program will run faster. In practice, Smalltalk pays only a very small penalty for dynamic type checking."),(0,n.kt)("p",null,"In a dynamically typed language, each value knows its type and these types are checked at run-time rather than at compile time. By \u201ceach value knows its type\u201d we mean that each object has an implicit pointer to its class. This is part of the object and you can\u2019t have an object without having immediate access to its class. Even with SmallIntegers, there is a tag bit that implicitly gives the class of the object as \u201cSmallInteger\u201d. Contrast this with C++, where you can have a 32-bit quantity without knowing whether it represents an \u201cint\u201d, or a pointer, or a \u201cfloat\u201d."),(0,n.kt)("p",null,"The term \u201cdynamic typing\u201d is somewhat confusing and should be avoided, since it confuses the ideas of \u201cclass\u201d and \u201ctype\u201d. Classes are not types. Sure, Smalltalk keeps class information around at run-time and relies on it, but so do \u201cstatically-typed\u201d languages like Java and C++."),(0,n.kt)("p",null,"Smalltalk is an \u201cuntyped, object-oriented\u201d language while Java is a \u201cstrongly typed, object-oriented language\u201d. C++, as always, defies any simple description."),(0,n.kt)("h3",{id:"842-smalltalk\u9762\u5411\u5bf9\u8c61"},"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u6797\u5efa\u5165\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/20275578/answer/26970925"},"https://www.zhihu.com/question/20275578/answer/26970925"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("p",null,"Smalltalk \u7684\u4eae\u70b9\u5c31\u5728\u4e8e\uff0c\u5b83\u5728\u8bed\u8a00\u5c42\u9762\u5f15\u5165\u4e86\u4e00\u79cd\u79f0\u4e3a\u201c\u5bf9\u8c61\u201d\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u7cfb\u7edf\u3002\u4e00\u4e2a Smalltalk \u7a0b\u5e8f\u7531\u4e00\u7cfb\u5217\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u6784\u6210\uff0c\u6bcf\u4e2a\u6a21\u5757\u4e4b\u95f4\u901a\u8fc7\u901a\u4fe1\u8fdb\u884c\u534f\u540c\u3002"),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u8bf4\uff0c",(0,n.kt)("strong",{parentName:"p"},"Smalltalk \u6240\u79c9\u627f\u7684\u9762\u5411\u5bf9\u8c61\u601d\u60f3\u4f7f\u5f97\u6574\u4e2a\u8f6f\u4ef6\u7cfb\u7edf\u7684\u53ef\u5206\u5272\u6027\u548c",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E5%8F%AF%E7%BB%84%E5%90%88%E6%80%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u53ef\u7ec4\u5408\u6027"),"\u8fc8\u4e0a\u4e86\u4e00\u4e2a\u65b0\u53f0\u9636\u3002\u8fd9\u662f",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E6%80%9D%E6%83%B3&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9762\u5411\u5bf9\u8c61\u601d\u60f3"),"\u7684\u5149\u8f89\u6240\u5728\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u56de\u8fc7\u5934\u6765\u770b\u770b C++ \u548c Java \u4e2d\u7684\u9762\u5411\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\uff0cC++ \u548c Java \u5728\u5b9e\u73b0\u9762\u5411\u5bf9\u8c61\u7684\u8def\u9014\u4e0a\u9047\u5230\u7684\u7b2c\u4e00\u9053\u574e\u662f\u4ed6\u4eec\u672c\u8eab\u90fd\u662f",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E9%9D%99%E6%80%81%E7%B1%BB&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9759\u6001\u7c7b"),"\u578b\u7684\u8bed\u8a00\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u7c7b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4fe1\u6761\u662f\u4e00\u5207\u7ed3\u6784\u7686\u987b\u9884\u5148\u63cf\u8ff0\uff0c\u56e0\u4e3a\u7f16\u8bd1\u5668\u8981\u68c0\u67e5\u3002\u4e8e\u662f\u6ca1\u4ec0\u4e48\u60ac\u5ff5\u7684\u7684\u5c31\u8d70\u4e0a\u4e86 Class-based OOP \u8fd9\u6761\u8def\uff08\u53e6\u4e00\u6761\u8def\u662f Prototype-based OOP\uff09\u3002"),(0,n.kt)("p",null,"Class-based OOP \u7684\u4e00\u4e2a\u7279\u5f81\u662f\u5bf9\u8c61\u7684\u7ed3\u6784\u9700\u8981\u9884\u5148\u58f0\u660e\uff0c\u5e76\u4e14\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u5141\u8bb8\u6539\u53d8\u2014\u2014 C++ \u548c Java \u7684\u4f5c\u8005\u6709\u4e00\u5343\u4e2a\u7406\u7531\u8fd9\u4e48\u5e72\uff0c\u6700\u57fa\u672c\u7684\u539f\u56e0\u5c31\u662f\u6027\u80fd\u8003\u8651\u2014\u2014\u4f46\u8fd9\u6837\u505a\u7684\u4ee3\u4ef7\u9996\u5148\u5c31\u524a\u5f31\u4e86\u7cfb\u7edf\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u66f4\u7cdf\u7cd5\u7684\u662f\uff0cC++ \u548c Java \u4e2d\uff0c\u8fde\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\u3002\u6211\u8fd9\u4e48\u8bf4\u4e00\u90e8\u5206\u670b\u53cb\u53ef\u80fd\u6ca1\u529e\u6cd5\u9a6c\u4e0a\u53cd\u5e94\u8fc7\u6765\u3002\u5176\u5b9e\u5c31\u662f\u8bf4\uff0c\u5728 Smalltalk \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4efb\u4f55\u4e00\u4e2a\u5bf9\u8c61\u968f\u610f\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\uff0c\u53ea\u8981\u4ed6\u4eec\u5bf9\u5916\u754c\u800c\u8a00\u884c\u4e3a\u4e00\u81f4\uff0c\u90a3\u4e48\u7cfb\u7edf\u4f9d\u7136\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\uff0c\u8fd9\u4e00\u70b9\uff0c\u5728\u5927\u5bb6\u66f4\u719f\u6089\u7684 Ruby\u3001Javascript \u7b49\u8bed\u8a00\u4e2d\uff0c\u88ab\u79f0\u4e3a Duck-Type \u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5728 C++ \u548c Java \u4e2d\uff0c\u4f60\u4e0d\u80fd\u968f\u610f\u627e\u4e2a\u5bf9\u8c61 x \u6765\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\u5bf9\u8c61 y\u3002\u5373\u4f7f\u4ed6\u4eec\u62e5\u6709\u5b8c\u5168\u76f8\u540c\u7684\u884c\u4e3a\u4e5f\u4e0d\u884c\u3002\u56e0\u4e3a C++ \u548c Java \u662f Class-based OOP \u6240\u4ee5\u8fde\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\uff01\u8fd9\u79cd\u58f0\u660e\u65b9\u5f0f\u5c31\u662f\u8ba9\u65e0\u6570\u4eba\u6f78\u7136\u6cea\u4e0b\u7684\u2014\u2014\u7ee7\u627f\uff01"),(0,n.kt)("p",null,"\u5373\u4f7f\u4e00\u4e2a\u5bf9\u8c61 x \u548c y \u7684\u884c\u4e3a\u662f\u5b8c\u5168\u4e00\u6837\u7684\uff0c\u4f60\u4e5f\u4e0d\u80fd\u7528 x \u53bb\u66ff\u6362 y\u3002\u5141\u8bb8\u4f60\u66ff\u6362\u7684\u552f\u4e00\u524d\u63d0\u662f\uff0cx \u88ab\u58f0\u660e\u4e3a\u7ee7\u627f\u81ea y \u7684\u3002"),(0,n.kt)("p",null,"\u5728\u6709\u7a7a\u7684\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u518d\u8be6\u7ec6\u8ba8\u8bba\u4e00\u4e0b\u7ee7\u627f\u3002\u4f46\u662f\u5728\u8fd9\u91cc\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5355\u7684\u6765\u8bf4\uff0c\u201c\u7ee7\u627f\u201d\u662f\u4e00\u4eba\u5206\u9970\u4e24\u89d2\u7684\u5178\u578b\u2014\u2014\u5b83\u65e2\u4f5c\u4e3a\u4ee3\u7801\u590d\u7528\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u540c\u65f6\u53c8\u6210\u4e3a\u4e86\u53ef\u66ff\u6362\u6027\u7684\u4e00\u79cd\u58f0\u660e\u3002\u8fd9\u79cd\u8bbe\u8ba1\u975e\u5e38\u5931\u8d25\uff0c\u96be\u4ee5\u4f7f\u7528\u5230\u76f4\u63a5\u5bfc\u81f4\u4e86\u9762\u5411\u5bf9\u8c61\u5728 C++ \u548c Java \u4e2d\u6210\u4e3a\u4e86\u4e00\u4e2a\u9609\u5272\u540e\u7684\u592a\u76d1\u3002")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5f25\u8865\u7ee7\u627f\u7684\u8fd9\u79cd\u7f3a\u9677\uff0c\u4e8e\u662f\u5f15\u5165\u4e86 Interface \uff08\u53ea\u8868\u660e\u53ef\u66ff\u6362\u6027\uff0c\u4e0d\u590d\u7528\u4ee3\u7801\uff09\uff0c\u4f46\u8fd9\u4e5f\u6539\u53d8\u4e0d\u4e86\u4ec0\u4e48\u4e86\u3002\u6bd5\u7adf Interface \u7adf\u7136\u4e5f\u5f00\u59cb\u4e92\u76f8\u73a9\u8d77\u4e86\u7ee7\u627f\u7684\u6e38\u620f\u2026\u2026"),(0,n.kt)("p",null,"\u4e8e\u662f\u6700\u540e\uff0c\u6211\u4eec\u770b\u5230\uff0c\u5c3d\u7ba1 C++ \u548c Java \u4e00\u76f4\u58f0\u79f0\u81ea\u5df1\u662f\u9762\u5411\u5bf9\u8c61\u7684\uff0c\u4f46\u662f\u548c Smalltakl \u4e4b\u7c7b\u7684\u8bed\u8a00\u4e00\u6bd4\uff0c\u8fd9\u79cd\u9762\u5411\u5bf9\u8c61\u7684\u5b9e\u73b0\u51e0\u4e4e\u662f\u4e2a\u53bb\u52bf\u540e\u7684\u592a\u76d1\uff0c\u4ed6\u4eec\u6562\u81ea\u79f0\u4e3a\u7537\u4eba\u771f\u662f\u4e2a\u7b11\u8bdd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5982\u679c\u53ef\u4ee5\u8bf4\u5f97\u76f4\u767d\u4e00\u4e9b\u7684\u8bdd\uff0cC++ \u672c\u8d28\u4e0a\u53ea\u80fd\u7b97\u662f\u4e00\u4e2a\u5e26\u6709\u5c11\u91cf\u9762\u5411\u5bf9\u8c61\u652f\u6301\u7684 C\uff0c\u800c Java \u66f4\u50cf\u662f\u4e00\u4e2a\u53bb\u6389\u4e86\u6307\u9488\uff0c\u5e26\u4e0a\u4e86\u5783\u573e\u56de\u6536\u7684 C++\u3002"),(0,n.kt)("p",null,"\u4f46\u518d\u600e\u4e48\u8bf4\uff0c\u9762\u5411\u5bf9\u8c61\u8fd9\u56de\u4e8b\uff0c\u5728 C++ \u548c Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u91cc\u7b80\u76f4\u90fd\u53ea\u80fd\u7b97\u4e2a\u70b9\u7f00\uff08\u53ef\u6015\u7684\u662f\u8fd9\u4e2a\u70b9\u7f00\u4f1a\u82b1\u6389\u4f60 70% \u7684\u5b66\u4e60\u65f6\u95f4\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u3002\u5728\u7ed3\u6784\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u52a8\u6001\u6027\u3002\u5b83\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u52a8\u6001\u6784\u9020\uff08\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\uff0c\u4e5f\u53ef\u4ee5\u6784\u9020\u4e00\u767e\u4e2a\uff09\uff0c\u52a8\u6001\u9500\u6bc1\u7684\uff1b\u5728\u62bd\u8c61\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u9694\u79bb\u6027\u3002\u5b83\u5e76\u4e0d\u76f4\u63a5\u4f9d\u8d56\u4e8e\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u662f\u901a\u8fc7\u901a\u4fe1\u6765\u4e0e\u4e4b\u534f\u4f5c\u7684\u3002\u53e6\u5916\uff0c\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u662f\u7cfb\u7edf\u5f39\u6027\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6211\u4eec\u90fd\u77e5\u9053\uff0c\u5b9e\u73b0\u4e0a\u8ff0\u7279\u6027\u5728\u76ee\u524d\u7684",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%BC%96%E8%AF%91%E6%8A%80%E6%9C%AF&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u7f16\u8bd1\u6280\u672f"),"\u6761\u4ef6\u4e0b\uff0c\u5f88\u96be\u4fdd\u8bc1\u9ad8\u6027\u80fd\u3002\u6240\u4ee5\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48 C++/Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u8981\u81ea\u6211\u9609\u5272\u7684\u539f\u56e0\u3002\u8fd9\u91cc\u9762\u4e0d\u5f97\u4e0d\u8bf4\u786e\u5b9e\u662f\u900f\u7740\u4e00\u4e1d\u65e0\u5948\u3002"),(0,n.kt)("h2",{id:"85-verse"},"8.5 Verse"),(0,n.kt)("h1",{id:"9-\u62df\u5a32\u54f2\u5b66"},"9. \u62df\u5a32\u54f2\u5b66"),(0,n.kt)("h2",{id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48"},"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u4ef7\u503c\u7531\u4e24\u90e8\u5206\u7ec4\u6210\uff1a"),(0,n.kt)("p",null,"\u4e00\u79cd\u662f\u901a\u8fc7\u89c6\u89c9\u3001\u97f3\u6548\u7b49\u7ed9\u4f60\u5e26\u6765\u5373\u65f6\u7684\u5feb\u4e50\uff1b\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4f5c\u54c1\u627f\u8f7d\u7684\u6545\u4e8b\u3001\u5bf9\u4e16\u754c\u7684\u7406\u89e3\u3001\u4e2a\u4eba\u7684\u751f\u6d3b\u7ecf\u9a8c\u3001\u77e5\u8bc6\u7b49\u4fe1\u606f\u5e26\u7ed9\u4e2a\u4eba\u7684\u7cbe\u795e\u529b\u91cf\uff0c\u8fd9\u79cd\u529b\u91cf\u4e0d\u80fd\u5355\u7eaf\u6bd4\u505a\u77e5\u8bc6\uff0c\u5b83\u66f4\u591a\u662f\u4e30\u5bcc\u6211\u4eec\u7684\u7cbe\u795e\u4e16\u754c\uff0c\u4f46\u662f\u8fd9\u79cd\u4e30\u5bcc\u53ef\u4ee5\u901a\u8fc7\u7ed9\u6211\u67d0\u4e9b\u610f\u8bc6\u4ece\u800c\u4f7f\u6211\u4eec\u5728\u5de5\u4f5c\u4e2d\u521b\u9020\u66f4\u5927\u4ef7\u503c\uff0c\u4f8b\u5982\u5b83\u8ba9\u6211\u4eec\u66f4\u52a0\u79ef\u6781\u3001\u52c7\u6562\u7b49"),(0,n.kt)("p",null,"\u865a\u62df\u4e16\u754c\u4ef7\u503c\u7684\u4ea7\u751f\uff1a"),(0,n.kt)("p",null,"\u521b\u9020\u7684\u8fc7\u7a0b\u548c\u7ed3\u679c\u90fd\u4ea7\u751f\u4ef7\u503c\uff0c\u521b\u9020\u8fc7\u7a0b\u4ea7\u751f\u7684\u4ef7\u503c\u76f8\u5bf9\u4e8e\u521b\u4f5c\u8005\u81ea\u8eab\uff0c\u53c2\u89c1\u5a01\u5ec9\u83ab\u91cc\u65af\u8bba\u8457\uff0c\u5f53\u7136\u9664\u4e86\u521b\u4f5c\u7684\u8fc7\u7a0b\u672c\u8eab\uff0c\u521b\u4f5c\u7684\u4ef7\u503c\u8fd8\u6709\u4e00\u90e8\u4efd\u6765\u6e90\u4e8e\u522b\u4eba\u7684\u8ba4\u53ef\uff0c\u6bd4\u5982\u4f60\u521b\u9020\u7684\u662f\u4e00\u4e2a\u5b8c\u5168\u65e0\u610f\u4e49\u7684\u4eba\uff0c\u9664\u975e\u4f60\u81ea\u5df1\u89c9\u5f97\u5f88\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u80fd\u4f53\u9a8c\u5230\u81ea\u8eab\u5bf9\u8fd9\u4e2a\u521b\u9020\u7684\u4f53\u9a8c\uff0c\u4f46\u5982\u679c\u4f60\u662f\u9884\u671f\u5b83\u53ef\u4ee5\u8ba9\u522b\u4eba\u611f\u5230\u5feb\u4e50\uff0c\u90a3\u4e48\u8fd9\u79cd\u9884\u671f\u4ee5\u53ca\u5b9e\u9645\u7684\u53cd\u9988\u4f1a\u8ba9\u4f60\u611f\u5230\u66f4\u5927\u7684\u5feb\u4e50"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u5feb\u4e50\u5c31\u662f\u4ef7\u503c"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u4f5c\u7684\u5feb\u4e50\uff0c\u4e0d\u4ec5\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u8fc7\u7a0b\uff0c\u66f4\u6765\u6e90\u4e8e\u4f5c\u54c1\u88ab\u5176\u4ed6\u7528\u6237\u6d88\u8d39\u548c\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u5305\u62ec\u53cd\u9988\uff0c\u4ee5\u53ca\u6539\u8fdb\u548c\u518d\u521b\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u521b\u4f5c\u7ed3\u679c\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e0a\u9762\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u901a\u8fc7\u6570\u5b57\u4f5c\u54c1\uff0c\u7279\u522b\u662f\u53d9\u4e8b\u6027\u89c6\u89c9\u827a\u672f\u4f5c\u54c1\u4ea7\u751f\u7684\u4ef7\u503c\uff0c\u4e0d\u5149\u662f\u8fd9\u79cd\u4e0a\u8ff0\u7684\u4ef7\u503c\u672c\u8eab\uff0c\u5979\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u610f\u4e49\u5728\u4e8e\uff1a\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u6211\u4eec\u6240\u6709\u7684\u4e8b\u60c5\u4e00\u822c\u901a\u8fc7\u6587\u5b57\u5f62\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u7406\u8bba\u4e0a\u4efb\u4f55\u6982\u5ff5\u90fd\u53ef\u4ee5\u901a\u8fc7\u7cbe\u51c6\u7684\u6587\u5b57\u8fdb\u884c\u8868\u8ff0\uff0c\u5c31\u50cf\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e00\u6837\uff0c\u4efb\u4f55\u8ba1\u7b97\u673a\u5bf9\u4e00\u6bb5\u7a0b\u5e8f\u7684\u7406\u89e3\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u7136\u800c\u4eba\u7c7b\u8bed\u8a00\u4e0d\u4e00\u6837\uff0c\u4eba\u7c7b\u8bed\u8a00\u7684\u5b57\u9762\u63cf\u8ff0\u901a\u5e38\u90fd\u5e26\u6709\u4e00\u5b9a\u7684\u80cc\u666f\u4fe1\u606f\uff0c\u540c\u6837\u4e00\u6bb5\u8bdd\uff0c\u4e0d\u540c\u80cc\u666f\u4fe1\u606f\u7684\u4eba\u7684\u7406\u89e3\u7a0b\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5e76\u4e14\u8fd9\u79cd\u80cc\u666f\u4fe1\u606f\u6709\u65f6\u5019\u4e0d\u4e00\u5b9a\u662f\u903b\u8f91\u4e0a\u7684\u77e5\u8bc6\uff0c\u8fd8\u6709\u6587\u5316\u3001\u827a\u672f\u3001\u751f\u6d3b\u7ecf\u5386\u7b49\u590d\u6742\u56e0\u7d20\uff0c\u56e0\u6b64\u5bfc\u81f4\u7684\u7ed3\u679c\u5c31\u662f\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("p",null,"\u6211\u544a\u8bc9\u4f60\u8981\u53d8\u5f97\u52c7\u6562\uff0c\u8fd9\u53e5\u8bdd\u5b57\u9762\u610f\u601d\u5f88\u6e05\u6670\uff0c\u4f46\u662f\u5173\u4e8e\u52c7\u6562\u662f\u4ec0\u4e48\uff0c\u4ed6\u53ef\u80fd\u6709\u5f88\u591a\u89e3\u91ca\uff0c\u5230\u5e95\u8981\u505a\u5230\u4ec0\u4e48\u624d\u7b97\u52c7\u6562\uff0c\u6ca1\u6709\u5b9a\u4e49"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u7ed9\u4f60\u770b\u4e86\u4e00\u90e8\u300a\u6307\u73af\u738b\u300b\u6216\u8005\u300a\u970d\u6bd4\u7279\u4eba\u300b\uff0c\u4f60\u9a6c\u4e0a\u5c31\u80fd\u83b7\u5f97\u5f88\u591a\u7cbe\u795e\u4e0a\u7684\u7406\u89e3\uff0c\u8fd9\u91cc\u9762\u4e0d\u5149\u662f\u7535\u5f71\u672c\u8eab\u5305\u542b\u4e86\u66f4\u591a\u4fe1\u606f\uff0c\u4ed6\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u89c6\u89c9\u8bed\u8a00\u3001\u4ee5\u53ca\u878d\u5165\u4f60\u5728\u770b\u8fd9\u4e9b\u8bd7\u53e5\u5185\u5bb9\u548c\u6545\u4e8b\u65f6\u4ea7\u751f\u7684\u81ea\u6211\u60f3\u8c61\u529b\uff0c\u7b49\u7b49\uff0c\u8fd9\u4e9b\u90fd\u662f\u975e\u5b57\u9762\u7684\u4fe1\u606f\u6240\u80fd\u8868\u8fbe\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4f5c\u54c1\u878d\u5165\u7684\u4e0d\u5149\u662f\u521b\u4f5c\u8005\u7684\u7ecf\u9a8c\u77e5\u8bc6\uff0c\u8fd8\u6709\u5f88\u591a\u903b\u8f91\uff0c\u8868\u8fbe\u624b\u6cd5\u7b49\u7b49\u5f88\u590d\u6742\u7684\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u662f\u521b\u4f5c\uff0c\u5b83\u662f\u4e00\u79cd\u8868\u8fbe\u5f62\u5f0f\uff0c\u5b83\u7684\u8868\u8fbe\u80fd\u529b\u8d85\u8d8a\u6587\u5b57\u7684\u5b57\u9762\u610f\u601d\uff0c\u8fd9\u4e5f\u5c31\u662f\u827a\u672f\u521b\u4f5c\u8fd9\u79cd\u4e8b\u7269\u7684\u4ef7\u503c\u6240\u5728"),(0,n.kt)("p",null,"\u4ea4\u6d41\u548c\u793e\u4ea4\u4ea7\u751f\u4ef7\u503c"),(0,n.kt)("h2",{id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48"},"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"RealityIS\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u662f\u4ece\u4e0a\u81f3\u4e0b\u7684\uff0c\u5373\u770b\u5230\u4e0a\u9762\u5e94\u7528\u5c42\u7684\u5f00\u653e\u95ee\u9898\uff0c\u7136\u540e\u627e\u5230\u95ee\u9898\u7684\u6839\u6e90\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u7136\u540e\u518d\u6df1\u5165\u5230\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u8ba1\u7b97\u673a\u4f53\u7cfb\u7ed3\u6784\u7684\u673a\u5236\uff0c\u6700\u540e\u5f97\u51fa\u89e3\u51b3\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddf\u4e00\u822c\u7684\u8f6f\u4ef6\u67b6\u6784\u8fc7\u7a0b\u5f88\u7c7b\u4f3c\uff0c\u7531\u4e1a\u52a1\u5c42\u7684\u9886\u57df\u9700\u6c42\uff0c\u6765\u5f15\u5bfc\u8f6f\u4ef6\u67b6\u6784\u7684\u8bbe\u8ba1\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u6df1\u5165\u5230\u4e86\u7f16\u7a0b\u8bed\u8a00\u8fd9\u4e00\u5c42\u3002\u7136\u800c\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u662f\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\uff0c\u56e0\u6b64\u5fc5\u7136\u5bfc\u81f4\u6cdb\u5316\u6027\u4e0d\u8db3\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u5f53\u6211\u4eec\u5f97\u5230\u8fd9\u5957\u6280\u672f\u67b6\u6784\u4e4b\u540e\uff0c\u518d\u53cd\u5411\u5411\u4e0a\u7406\u89e3\u7684\u65f6\u5019\uff0c\u5374\u53d1\u73b0\u5b83\u5177\u6709\u5f88\u5927\u7684\u901a\u7528\u548c\u6cdb\u534e\u80fd\u529b\uff0c\u8fd9\u4e00\u90e8\u5206\u539f\u56e0\u53ef\u80fd\u662f\u56e0\u4e3a\u6211\u4eec\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u53d1\u751f\u5728\u8bed\u8a00\u8fd9\u4e00\u8f83\u4f4e\u7684\u5c42\u6b21\uff0c\u5e76\u4e14\u6ca1\u6709\u6539\u53d8\u8bed\u8a00\u672c\u8eab\u7684\u673a\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u53e6\u4e00\u65b9\u9762\uff0c\u4e5f\u7531\u4e8e\u6211\u4eec\u5728\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\u6bd4\u8f83\u6ce8\u91cd\u5bf9\u6570\u636e\u7684\u7406\u89e3\uff0c\u5f53\u7136\u8fd9\u91cc\u4e5f\u6709\u5982\u6570\u636e\u9a71\u52a8\u3001\u9ad8\u6027\u80fd\u8ba1\u7b97\u3001\u9ad8\u5ea6\u5e76\u53d1\u7b49\u6280\u672f\u9700\u6c42\u6240\u5f15\u5411\u5bf9\u6570\u636e\u7684\u5173\u6ce8\uff0c\u4e5f\u6709\u523b\u610f\u8fed\u4ee3\u5730\u52a0\u6df1\u5bf9\u6570\u636e\u672c\u8d28\u7684\u601d\u8003\u548c\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5f53\u6211\u4eec\u56de\u8fc7\u5934\u6765\uff0c\u5bf9\u6570\u636e\u6709\u4e86\u66f4\u6df1\u523b\u7684\u7406\u89e3\u548c\u8ba4\u77e5\u4e4b\u540e\uff0c\u4f1a\u53d1\u73b0\uff0c\u4ece\u6839\u6e90\u4e0a\uff0cRealityIS\u7684\u8fd9\u4e9b\u6cdb\u5316\u6027\u80fd\u529b\uff0c\u6765\u6e90\u4e8e\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5f00\u53d1\u548c\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u4f20\u7edf\u4ee5\u786c\u4ef6\u5904\u7406\u5668\u4e3a\u6838\u5fc3\u7684\u7f16\u8bd1\u67b6\u6784\uff0c\u8f6c\u53d8\u4e3a\u4e86\u66f4\u7b26\u5408\u5b9e\u9645\u7269\u7406\u4e16\u754c\u76f4\u89c9\u7684\u673a\u5236\uff0c\u8fd9\u662f\u4e00\u4e2a\u6839\u672c\u6027\u8f6c\u53d8\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u6574\u4e2aRealityIS\u7684\u80fd\u529b\u548c\u601d\u7ef4\uff0c\u90fd\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u57fa\u4e8e\u6570\u636e\u7684\u7f16\u7a0b\u6a21\u578b\u3002\u5305\u62ec\u5982\u89e3\u8026\u3001\u5e76\u53d1\u3001\u6cdb\u578b\u3001\u81ea\u6211\u8fdb\u5316\u5f0f\u7684\u6807\u51c6\u673a\u5236\u7b49\u7b49\uff0c\u8fd9\u4e9b\u672c\u8d28\u4e0a\u90fd\u662f\u4ee5\u6570\u636e\u4e3a\u4e2d\u5fc3\u53bb\u601d\u8003\u624d\u80fd\u5f62\u6210\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5b83\u6709\u4e00\u79cd\u5076\u7136\uff0c\u4e5f\u6709\u5fc5\u7136\uff1b\u5076\u7136\u7684\u662f\u6211\u4eec\u5173\u6ce8\u5230\u6570\u636e\u8fd9\u4e2a\u4e2d\u5fc3\u95ee\u9898\uff0c\u5fc5\u7136\u7684\u662f\u6570\u636e\u4e3a\u4e2d\u5fc3\u7684\u6982\u5ff5\u662f\u4e00\u5957\u80fd\u591f\u4ee5\u771f\u5b9e\u4e16\u754c\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u4f5c\u4e1a\u7684\u89c4\u5219\u3002"),(0,n.kt)("p",null,"\u5c06\u6765\uff0c\u6211\u4eec\u8fd8\u4f1a\u7ee7\u7eed\u5b8c\u5584\u8fd9\u4e00\u6982\u5ff5\uff0c\u6700\u7ec8\uff0cRealityIS\u5c06\u53d8\u4e3a\u4e00\u4e2a\u4ee5\u771f\u5b9e\u4e16\u754c\u7684\u76f4\u89c9\u548c\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u7684\u6784\u5efa\u548c\u8fd0\u884c\uff0c\u8fd9\u5c06\u662f\u4e00\u79cd\u5168\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"mlp",src:l(6018).Z,width:"1400",height:"660"})),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u6df1\u5ea6\u5b66\u4e60\uff0c\u5b83\u7684\u5f88\u591a\u7406\u5ff5\u6765\u81ea\u4e8e\u5bf9\u5927\u8111\u673a\u5236\u7684\u601d\u8003\uff0c\u867d\u7136\u795e\u7ecf\u5143\u7684\u673a\u5236\u5e76\u4e0d\u4e00\u5b9a\u662f\u5927\u8111\u5b9e\u9645\u8fd0\u884c\u7684\u673a\u5236\uff08\u5b9e\u9645\u5f53\u7136\u8981\u590d\u6742\u5f97\u591a\uff09\uff0c\u4f46\u662f\u5b83\u53ef\u80fd\u81f3\u5c11\u662f\u5176\u4e2d\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u601d\u8003\u6293\u4f4f\u4e86\u4e00\u5b9a\u7684\u672c\u8d28\uff0c\u6240\u4ee5\u6700\u7ec8\u57fa\u4e8e\u795e\u7ecf\u5143\u8fd9\u79cd\u7b80\u5355\u7684\u7ed3\u6784\u6784\u5efa\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u80fd\u591f\u5728\u8f83\u5927\u7a0b\u5ea6\u4e0a\u6a21\u62df\u5927\u8111\u7684\u673a\u5236\u3002"),(0,n.kt)("h2",{id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"},"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"BMH-Week-2",src:l(7464).Z,width:"1000",height:"750"})),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236"},"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u662f\u66f4\u6709\u4ef7\u503c\u7684\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"economics",src:l(3625).Z,width:"1920",height:"1280"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h2",{id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf"},"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u5b50\u7cfb\u7edf\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\uff0c\u5b83\u4e5f\u5177\u6709\u9ad8\u5ea6\u7684\u5e76\u53d1\u6027\u3001\u5e76\u884c\u6027\uff0c\u4ee5\u53ca\u9ad8\u5ea6\u7684\u67b6\u6784\u590d\u6742\u5ea6\u7279\u5f81\u3002"),(0,n.kt)("p",null,"\u663e\u7136\u73b0\u6709\u7684\u5e95\u5c42\u8ba1\u7b97\u67b6\u6784\uff0c\u4ee5\u53ca\u4e0a\u5c42\u7684\u8f6f\u4ef6\u5efa\u6784\u90fd\u65e0\u6cd5\u652f\u6491\u8fd9\u6837\u7684\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf\uff0c\u81f3\u5c11\u9700\u8981\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u5e94\u7528\u4e92\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7f16\u8bd1\u548c\u89e3\u91ca"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u7a0b\u5e8f\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u6297\u7834\u574f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5b89\u5168")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\uff0c\u8fd9\u4e0d\u4ec5\u662f\u6280\u672f\u7684\u8981\u6c42\uff0c\u4e5f\u662f\u8fd9\u6837\u7684\u7cfb\u7edf\u7684\u4ef7\u503c\u6240\u5728\u3002\u5fc5\u987b\u5177\u6709\u72ec\u7acb\u5f00\u53d1\u8005\u80fd\u591f\u6269\u5c55\u7cfb\u7edf\u7684\u80fd\u529b\uff0c\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u7a0b\u5e8f\u624d\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u7531\u67d0\u4e2a\u5927\u516c\u53f8\u7ef4\u62a4\u7684\u7a0b\u5e8f\u4e0d\u7ba1\u5728\u89c4\u6a21\u4e0a\u3001\u8fd8\u662f\u529f\u80fd\u4e30\u5bcc\u6027\u4e0a\u90fd\u662f\u4e0d\u8db3\u4ee5\u652f\u6491\u8fd9\u79cd\u9700\u6c42\u3002\u5f53\u7136\u8fd9\u4e48\u591a\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4e5f\u8fd8\u6d89\u53ca\u5230\u66f4\u52a0\u4e25\u683c\u7684\u5b89\u5168\u63a7\u5236\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7a0b\u5e8f\u4f53\u975e\u5e38\u5927\uff0c\u4ee5\u53ca\u6240\u6709\u7a0b\u5e8f\u90fd\u6709\u53ef\u80fd\u4e0d\u65ad\u66f4\u65b0\u548c\u53d8\u5316\uff0c\u56e0\u6b64\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u52a8\u6001\u7f16\u8bd1\u7684\u3002\u7cfb\u7edf\u5fc5\u987b\u80fd\u591f\u968f\u65f6\u7f16\u8bd1\u5355\u4e2a\u7ec4\u4ef6\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5176\u4ed6\u6240\u6709\u7a0b\u5e8f\u3002\u6b64\u5916\uff0c\u6bcf\u4e2a\u6e90\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u4e4b\u95f4\uff0c\u6700\u597d\u8fd8\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5f15\u7528\u6216\u5bfc\u81f4\u975e\u5e38\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b\uff0c\u5373\u4f7f\u7ef4\u62a4\u8fd9\u6837\u7684\u5f15\u7528\u5173\u7cfb\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\u4e8b\u60c5\u3002\u8fd9\u4e5f\u51e0\u4e4e\u5bf9\u7f16\u7a0b\u6a21\u578b\u8fdb\u884c\u4e86\u9650\u5236\uff0c\u4f8b\u5982\u5982\u679c\u8ba9\u7528\u6237\u4f7f\u7528\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u8fdb\u884c\u5f00\u53d1\uff0c\u51e0\u4e4e\u5fc5\u7136\u7684\u7ed3\u679c\u662f\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5f88\u96be\u8fdb\u884c\u7f16\u8bd1\u548c\u89e3\u91ca\u3002\u6211\u4eec\u5fc5\u987b\u4ee5\u67d0\u79cd\u8ba1\u7b97\u67b6\u6784\u7ea7\u522b\u7684\u673a\u5236\uff0c\u4f7f\u53ef\u4ee5\u65e2\u4fdd\u8bc1\u5f00\u53d1\u8005\u5f00\u53d1\u529f\u80fd\u4e0d\u53d7\u9650\u5236\uff0c\u540c\u65f6\u53c8\u80fd\u5c06\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ef4\u6301\u4e00\u5b9a\u7684\u72ec\u7acb\u7ed3\u6784\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u8bed\u8a00\u53ef\u80fd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u8fd8\u5fc5\u987b\u6709\u67d0\u4e9b\u4e2d\u95f4\u62bd\u8c61\u6765\u51cf\u8f7b\u52a8\u6001\u8bed\u8a00\u7684\u6027\u80fd\u5f00\u9500\u3002"),(0,n.kt)("p",null,"\u4ec5\u4ec5\u80fd\u591f\u72ec\u7acb\u7f16\u8bd1\u8fd8\u4e0d\u591f\uff0c\u5b83\u4eec\u8fd8\u9700\u8981\u80fd\u591f\u6309\u9700\u52a0\u8f7d\uff0c\u53ea\u52a0\u8f7d\u5f53\u524d\u4efb\u52a1\u9700\u8981\u7684\u7a0b\u5e8f\u6307\u4ee4\uff0c\u53ea\u521d\u59cb\u5316\u5f53\u524d\u4efb\u52a1\u9700\u8981\u4f7f\u7528\u5230\u7684\u6570\u636e\u3002\u8fd9\u4e5f\u610f\u5473\u7740\u6240\u6709\u7684\u903b\u8f91\u5fc5\u987b\u5c3d\u53ef\u80fd\u4ee5\u6bd4\u8f83\u5c0f\u7c92\u5ea6\u7684\u7ed3\u6784\u7ec4\u7ec7\uff0c\u56e0\u4e3a\u592a\u5927\u7684\u903b\u8f91\u53ef\u80fd\u4f1a\u5b58\u5728\u4e00\u4e9b\u6d6a\u8d39\uff1a\u5185\u5b58\u4e2d\u53ef\u80fd\u4f1a\u5b58\u50a8\u5927\u91cf\u4e0d\u4f1a\u6267\u884c\u5230\u7684\u6307\u4ee4\u548c\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u9700\u8981\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316\u7684\u53e6\u4e00\u4e2a\u539f\u56e0\u662f\u4e3a\u4e86\u5e76\u884c\u5316\uff0c\u5f53\u7a0b\u5e8f\u67b6\u6784\u975e\u5e38\u590d\u6742\u65f6\uff0c\u662f\u5f88\u96be\u8fdb\u884c\u5e76\u884c\u6027\u548c\u5e76\u53d1\u4f18\u5316\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u5c06\u903b\u8f91\u5c3d\u53ef\u80fd\u5355\u5143\u5316\u3001\u72ec\u7acb\u5316\u624d\u6709\u53ef\u80fd\u8fdb\u884c\u7edf\u4e00\u7684\u8c03\u5ea6\u548c\u5206\u53d1\u3002\u5e76\u4e14\u8fd9\u79cd\u5206\u53d1\u4e0d\u5e94\u8be5\u662f\u7531\u5f00\u53d1\u8005\u81ea\u5df1\u6765\u5b9e\u73b0\uff0c\u56e0\u4e3a\u5e73\u53f0\u6ca1\u6709\u529e\u6cd5\u63a7\u5236\u5f00\u53d1\u8005\uff0c\u5982\u679c\u5f00\u53d1\u8005\u6ca1\u6709\u5b8c\u6210\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u90fd\u53d7\u5230\u5f71\u54cd\u3002\u56e0\u6b64\u5fc5\u987b\u662f\u4e00\u79cd\u5e73\u53f0\u7ea7\u7684\u673a\u5236\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5b58\u5728\u7740\u4e0d\u53d7\u63a7\u7684\u4ee3\u7801\uff0c\u56e0\u6b64\u7a33\u5b9a\u6027\u4f1a\u662f\u4e00\u4e2a\u91cd\u5927\u7684\u95ee\u9898\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u8981\u5bf9\u4ee3\u7801\u6709\u4e00\u5b9a\u7684\u5ba1\u6838\u548c\u6d4b\u8bd5\u673a\u5236\uff0c\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u53ef\u80fd\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u5d29\u6e83\u7684\u95ee\u9898\uff0c\u4f8b\u5982\u7531\u4e8e\u7ec4\u4ef6\u8fc7\u671f\u5bfc\u81f4\u7b26\u53f7\u53d8\u5316\u800c\u65e0\u6cd5\u521d\u59cb\u5316\u53d8\u91cf\u65f6\uff0c\u7cfb\u7edf\u8981\u80fd\u591f\u8bc6\u522b\u548c\u820d\u5f03\u8fd9\u6837\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u4fdd\u8bc1\u7cfb\u7edf\u7684\u7a33\u5b9a\u6027\u3002\u7a33\u5b9a\u6027\u7684\u5f88\u5927\u6765\u6e90\u662f\u6570\u636e\u7c7b\u578b\u95ee\u9898\u4ee5\u53ca\u6570\u636e\u6307\u9488\u7684\u6570\u636e\u5408\u6cd5\u6027\u95ee\u9898\uff0cRealityIS\u4fdd\u8bc1\u6240\u6709\u7684\u6570\u636e\u90fd\u662f\u503c\u7c7b\u578b\uff0c\u5e76\u4e14\u80fd\u591f\u68c0\u67e5\u7b26\u53f7\u8868\u7684\u5339\u914d\u5ea6\u4ece\u800c\u675c\u7edd\u7c7b\u578b\u7684\u95ee\u9898\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u7834\u574f\u6027\u4ee3\u7801\u7684\u6267\u884c\u3002"),(0,n.kt)("h2",{id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"},"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h3",{id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h2",{id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c"},"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c"),(0,n.kt)("h2",{id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"},"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h2",{id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4691).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h2",{id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"},"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"),(0,n.kt)("h3",{id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"},"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"),(0,n.kt)("p",null,"\u8fd9\u662f\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6700\u6838\u5fc3\u7684\u57fa\u7840\u548c\u7406\u5ff5\uff0c\u4e00\u76f4\u4ee5\u6765\uff0c\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\u7684\u7ed3\u6784\u90fd\u662f\u4ee5\u8ba9\u4eba\u4eec\u66f4\u5bb9\u6613\u7406\u89e3\u8f6f\u4ef6\u7684\u6784\u9020\u8fc7\u7a0b\u4e3a\u4e3b\uff0c\u5b83\u7684\u6838\u5fc3\u8fd8\u662f\u56f4\u7ed5\u5e95\u5c42\u7684\u786c\u4ef6\u5bf9\u673a\u5668\u4ee3\u7801\u7684\u6267\u884c\u673a\u5236\uff0c\u6216\u8005\u53ef\u4ee5\u7406\u89e3\u4e3a\u600e\u6837\u8ba9\u4eba\u66f4\u5bb9\u6613\u5730\u7406\u89e3\u673a\u5668\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u903b\u8f91\u3002\u5728\u8fd9\u6837\u7684\u601d\u8def\u80cc\u540e\uff0c\u8bed\u8a00\u5355\u7eaf\u53d8\u6210\u4e3a\u4e00\u4e2a\u673a\u5668\u8bed\u8a00\u7684\u9ad8\u7ea7\u62bd\u8c61\uff0c\u8fd9\u79cd\u62bd\u8c61\u4fdd\u7559\u4e86\u673a\u5668\u6267\u884c\u6307\u4ee4\u7684\u6d41\u7a0b\u548c\u903b\u8f91\uff0c\u800c\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u6309\u7167\u673a\u5668\u7684\u8fd9\u79cd\u903b\u8f91\u53bb\u7f16\u5199\u548c\u7ef4\u62a4\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u673a\u5668\u548c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\uff0c\u5bf9\u4e8e\u4e00\u4ef6\u4e8b\u60c5\uff0c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u4f1a\u628a\u5b83\u4eec\u62c6\u5206\u6210\u5f88\u591a\u6613\u4e8e\u7406\u89e3\u7684\u5b50\u6d41\u7a0b\uff0c\u4f1a\u8fdb\u884c\u4e00\u5b9a\u7684\u89c4\u5212\uff0c\u8bc6\u522b\u5176\u4e2d\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u91cd\u8981\u6027\u7a0b\u5ea6\u7b49\uff0c\u5e76\u53ef\u80fd\u4f1a\u5728\u5b9e\u65bd\u8fc7\u7a0b\u4e2d\u52a8\u6001\u8c03\u6574\uff0c\u6362\u53e5\u8bdd\u8bf4\u4eba\u5904\u7406\u4e8b\u60c5\u65f6\u65f6\u90fd\u8981\u5173\u6ce8\u5168\u5c40\u6027\uff0c\u800c\u964d\u4f4e\u5bf9\u5c40\u90e8\u7ec6\u8282\u7684\u6ce8\u610f\u529b\uff0c\u9664\u975e\u4ed6\u5f00\u59cb\u4e13\u6ce8\u53bb\u5904\u7406\u8fd9\u4e00\u5757\u4e8b\u60c5\uff1b\u673a\u5668\u7684\u903b\u8f91\u5219\u805a\u7126\u4e8e\u4fdd\u8bc1\u628a\u4e8b\u60c5\u505a\u6b63\u786e\uff0c\u5b83\u5fc5\u987b\u8981\u5448\u73b0\u5f88\u6e05\u6670\u7684\u6267\u884c\u6d41\u7a0b\uff0c\u4e3a\u4e86\u66f4\u7cbe\u786e\u5730\u63cf\u8ff0\u6d41\u7a0b\uff0c\u5b83\u4e00\u822c\u4e00\u4ef6\u4e8b\u60c5\u505a\u5b8c\u5c31\u7d27\u63a5\u7740\u5b8c\u6210\u53e6\u4e00\u4ef6\u4e8b\u60c5\uff0c\u539f\u6750\u6599\u4e00\u65e6\u6536\u5230\u5c31\u8981\u7acb\u5373\u8fdb\u884c\u52a0\u5de5\u5904\u7406\uff0c\u5904\u7406\u5b8c\u5c31\u8981\u5f00\u59cb\u8fd0\u8f93\u5165\u5e93\u7b49\u5f85\u3002\u8fd9\u91cc\u9762\u5c31\u4e0d\u7ed9\u7a0b\u5e8f\u5458\u89c4\u5212\u7684\u7a7a\u95f4\uff0c\u5f53\u7136\u7a0b\u5e8f\u5458\u53ef\u4ee5\u53bb\u6784\u5efa\u4e00\u4e9b\u66f4\u6613\u4e8e\u5168\u5c40\u7edf\u7b79\u7ba1\u7406\u3001\u89c4\u5212\u548c\u7406\u89e3\u7684\u67b6\u6784\uff0c\u4f46\u662f\u8fd9\u5f80\u5f80\u9700\u8981\u4ed8\u51fa\u5f88\u5927\u7684\u4ee3\u4ef7\u3002"),(0,n.kt)("p",null,"\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u601d\u60f3\uff0c\u5c31\u662f\u8981\u5728\u4fdd\u8bc1\u4e0e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u6267\u884c\u673a\u5236\u7b49\u4ef7\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u5c31\u662f\u8981\u4fdd\u8bc1\u56fe\u7075\u5b8c\u5907\u6027\uff0c\u8ba9\u7a0b\u5e8f\u7684\u6267\u884c\u6d41\u7a0b\u53ef\u4ee5\u88ab\u66f4\u597d\u5730\u89c4\u5212\u548c\u63a7\u5236\uff0c\u4f7f\u5f97\u4eba\u4eec\u53ef\u4ee5\u4f7f\u7528\u5927\u8111\u7684\u673a\u5236\u6765\u5bf9\u7a0b\u5e8f\u7684\u903b\u8f91\u8fdb\u884c\u7ba1\u7406\u3002\u53ef\u4ee5\u8ba4\u4e3a\u8fd9\u662f\u4e00\u5957\u6784\u5efa\u4e8e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u4e0a\u7684\u8f6f\u4ef6\u67b6\u6784\uff0c\u4f46\u662f\u90a3\u6837\u7684\u5b9e\u73b0\u7ed3\u679c\u53ef\u80fd\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u76f8\u53cd\uff0c\u6211\u4eec\u901a\u8fc7\u6df1\u5165\u5206\u6790\u5e95\u5c42\u51fd\u6570\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u8f6f\u4ef6\u6784\u9020\u7684\u8fc7\u7a0b\u4e2d\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ece\u800c\u66f4\u7b80\u5355\u5730\u5b9e\u73b0\u8f6f\u4ef6\u6784\u9020\u7684\u53ef\u63a7\u5236\u6027\uff0c\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u5c31\u662f\u53ef\u63a7\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u8f6f\u4ef6\u6784\u9020\u601d\u7ef4\u5728\u8fc7\u53bb\u662f\u4ece\u6765\u6ca1\u6709\u7684\uff0c\u4e5f\u662f\u8ddf\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6709\u7740\u672c\u8d28\u533a\u522b\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u8ba4\u4e3a\u5b83\u662f\u7ee7\u51fd\u6570\u5f0f\u7f16\u7a0b\u548c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e4b\u540e\u7684\u7b2c\u4e09\u79cd\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u3002\u8fd9\u6837\u7684\u601d\u7ef4\u8f6c\u53d8\u662f\u975e\u5e38\u57fa\u7840\u3001\u91cd\u8981\u548c\u672c\u8d28\u7684\uff0c\u53ef\u63a7\u6027\u5c06\u7ed9\u8f6f\u4ef6\u5de5\u4e1a\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u5168\u65b0\u7684\u672a\u6765\uff0c\u5c24\u5176\u662f\u4ee5\u4e0b\u4e09\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5f71\u54cd\u4e5f\u53cd\u5e94\u5728\u540e\u7eed\u7684\u53d8\u9769\u56e0\u7d20\u4e4b\u4e2d\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u6709\u5e8f\u548c\u53ef\u63a7\u6027\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u903b\u8f91\u7ec4\u7ec7\u548c\u7ba1\u7406\u53d8\u5f97\u66f4\u7b80\u5355\uff0c\u53ef\u4ee5\u9884\u671f\u4f1a\u6709\u76f8\u8f83\u4e8e\u73b0\u5728\u6307\u6570\u7ea7\u589e\u957f\u7684\u5f00\u53d1\u8005\u4f1a\u53c2\u4e0e\u5230\u8f6f\u4ef6\u5de5\u4e1a\u7684\u751f\u4ea7\u4e2d\uff0c\u751f\u4ea7\u529b\u548c\u521b\u65b0\u90fd\u4f1a\u6709\u5927\u5e45\u63d0\u5347\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u65b0\u7684\u7ec4\u7ec7\u548c\u6267\u884c\u6d41\u7a0b\uff0c\u5c06\u4f1a\u5bf9\u5e95\u5c42\u82af\u7247\u8bbe\u8ba1\u5e26\u6765\u542f\u53d1\uff0c\u8fd9\u53ef\u4ee5\u4fc3\u8fdb\u786c\u4ef6\u7684\u5de8\u5927\u521b\u65b0\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u53ef\u63a7\u6027\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u4e0d\u5149\u662f\u6613\u4e8e\u4eba\u7406\u89e3\u7684\uff0c\u4e5f\u662f\u6613\u4e8e\u673a\u5668\u7406\u89e3\u7684\uff0c\u8fd9\u5c06\u5e26\u6765\u4e24\u4e2a\u65b9\u9762\u7684\u7a81\u7834\uff1a\u4e00\u662f\u7f16\u8bd1\u5668\u672c\u8eab\u80fd\u591f\u66f4\u597d\u5730\u8bc6\u522b\u548c\u7ec4\u7ec7\u7a0b\u5e8f\u7684\u903b\u8f91\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7ba1\u7406\u66f4\u591a\u4e0e\u7a0b\u5e8f\u7ed3\u6784\u76f8\u5173\u7684\u7e41\u7410\u903b\u8f91\uff0c\u4f7f\u7a0b\u5e8f\u5458\u805a\u7126\u4e8e\u4e1a\u52a1\u90e8\u5206\uff1b\u4e8c\u662f\u7ed3\u5408\u6df1\u5ea6\u5b66\u4e60\uff0c\u6211\u4eec\u6709\u673a\u4f1a\u8ba9AI\u751f\u6210\u4e00\u5b9a\u903b\u8f91\u7684\u7a0b\u5e8f\u3002")),(0,n.kt)("h3",{id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"},"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"),(0,n.kt)("p",null,"\u524d\u9762\u7b2c2.1\u8282\u5df2\u7ecf\u8ba8\u8bba\u6700\u7b80\u5355\u7f16\u7a0b\u8bed\u8a00\u7684\u6982\u5ff5\u548c\u7279\u6027\uff0c\u8fd9\u91cc\u8bf4\u660e\u600e\u4e48\u901a\u8fc7\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6765\u5b9e\u73b0\u6700\u7b80\u5355\u7684\u7f16\u7a0b\u8bed\u8a00\uff0cCreationScript\u3002\u5177\u4f53\u6765\u8bb2\uff0c\u8fd9\u662f\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u81ea\u52a8\u7ba1\u7406")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6570\u636e\u8d44\u6e90\u7684\u81ea\u52a8\u7ba1\u7406"))),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u8ba8\u8bba\u53ef\u77e5\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6700\u590d\u6742\u7684\u90e8\u5206\u5728\u4e8e\u628a\u7a0b\u5e8f\u7ed3\u6784\u7684\u6784\u9020\u548c\u63a7\u5236\u5b8c\u5168\u4ea4\u7ed9\u5f00\u53d1\u4eba\u5458\u53bb\u5904\u7406\uff0c\u7f16\u7a0b\u8bed\u8a00\u4e2d\u66f4\u591a\u9700\u8981\u5173\u6ce8\u7684\u6982\u5ff5\u662f\u5173\u4e8e\u8f6f\u4ef6\u7ed3\u6784\u7684\u6784\u9020\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u7b97\u6cd5\u600e\u4e48\u7f16\u5199\u7684\u95ee\u9898\u3002\u5728RealityIS\u4e2d\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u6765\u63a7\u5236\u7a0b\u5e8f\u7684\u7ed3\u6784\uff1a1\uff09\u6211\u4eec\u52a0\u5f3a\u4e86\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u7684\u6784\u5efa\uff0c\u5e76\u628a\u8fd9\u4e9b\u4fe1\u606f\u4fdd\u5b58\u8d77\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\u591f\u6784\u9020\u51fa\u4efb\u4f55\u51fd\u6570\u7ec4\u5408\u7684\u6267\u884c\u987a\u5e8f\uff1b2\uff09\u5bf9\u4e8e\u5177\u4f53\u7684\u7a0b\u5e8f\u903b\u8f91\u7ec4\u5408\uff0c\u901a\u5b9e\u4f53\u5bf9\u8c61\u6765\u8bb0\u5f55\u7a0b\u5e8f\u7684\u529f\u80fd\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u548c\u5b9e\u4f53\u529f\u80fd\u7ed3\u6784\u7684\u4fe1\u606f\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u6784\u9020\u51fa\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u8fd9\u6837\u5c31\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u5fc3\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\uff0c\u4f8b\u5982\u7ee7\u627f\u5173\u7cfb\u3001\u91cd\u8f7d\u5b9e\u73b0\u3001\u591a\u6001\u51fd\u6570\u6d3e\u53d1\uff0c\u751a\u81f3\u624b\u52a8\u7684\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u7b49\u7b49\u7a0b\u5e8f\u7ed3\u6784\u6784\u9020\u6240\u9700\u8981\u505a\u7684\u4e00\u4e9b\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5c06\u5168\u90e8\u7cbe\u529b\u96c6\u4e2d\u4e8e\u4e1a\u52a1\u903b\u8f91\u7684\u5f00\u53d1\u4e0e\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u9700\u8981\u7a0b\u5e8f\u5458\u8fdb\u884c\u7e41\u91cd\u7684\u5904\u7406\uff0c\u5e76\u4e14\u4e0e\u903b\u8f91\u6ca1\u6709\u592a\u5927\u5173\u7cfb\u7684\u662f\u6570\u636e\u7684\u7ba1\u7406\u3002\u4ece\u4e1a\u52a1\u903b\u8f91\u6765\u8bf4\uff0c\u5f00\u53d1\u8005\u672c\u6765\u53ea\u9700\u8981\u5173\u6ce8\u4e1a\u52a1\u6d89\u53ca\u54ea\u4e9b\u6570\u636e\uff0c\u4ee5\u53ca\u4e0d\u540c\u7684\u6570\u636e\u8ddf\u51fd\u6570\u4e4b\u95f4\u662f\u5982\u4f55\u4ea4\u4e92\uff0c\u4f46\u5b9e\u9645\u9664\u4e86\u4e0a\u8ff0\u4efb\u52a1\uff0c\u5f00\u53d1\u8005\u82b1\u8d39\u4e86\u66f4\u591a\u7684\u65f6\u95f4\u53bb\u7ba1\u7406\u6570\u636e\u7684\u521b\u5efa\u3001\u4fee\u6539\u3001\u6301\u4e45\u5316\u3001\u5220\u9664\u7b49\uff0c\u8fd9\u4e9b\u5360\u636e\u7684\u7cbe\u529b\u975e\u5e38\u591a\u3002RealityIS\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5173\u6ce8\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7279\u6027\u4e5f\u662f\u524d\u9762\u6211\u4eec\u8ba8\u8bba\u8fc7\u7684\uff0c\u901a\u8fc7\u5c06\u7a0b\u5e8f\u7ed3\u6784\u7531\u65e0\u5e8f\u8f6c\u5316\u4e3a\u6709\u5e8f\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u53ef\u4ee5\u88ab\u673a\u5668\u7406\u89e3\uff0c\u4ece\u800c\u53ef\u4ee5\u8ba9\u673a\u5668\u5e2e\u6211\u4eec\u5b8c\u6210\u4e00\u4e9b\u7a0b\u5e8f\u6784\u9020\u7684\u4e8b\u60c5\uff0c\u4f7f\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u9762\u5411\u5927\u8111\u7684\u7406\u89e3\uff0c\u800c\u6709\u66f4\u591a\u9762\u5411\u673a\u5668\u7684\u673a\u5236\uff0c\u5b9e\u73b0\u4eba\u548c\u673a\u5668\u7684\u5b8c\u7f8e\u914d\u5408\u548c\u4e92\u8865\u3002"))}k.isMDXComponent=!0},3172:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/20151227220024116-155826feba0f55da04e0ac574f2637b3.jpg"},4542:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/AST-5592d94cf30e7e24589439feeb587560.jpeg"},7464:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/BMH-Week-2-686bbb717fb4b7ddb419ec738f1ec0ba.jpeg"},3136:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Brain-to-Brain-Communication-a56f385e9f7ffc1c0db5114ebff6c151.jpeg"},4892:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-Creative-Mode-85c81437c59bc60970ef01c6bf6e5e01.png"},8128:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-bcfc68fd70be596493a83e07ac4978a2.jpeg"},8250:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/IMG_2973-05d442834682b06c980380dbfeca49a2.jpg"},3402:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-1-269eb341c1aeb3d47e69340e9f16f58a.png"},1594:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-94b9d092532c47c07b29d9a0a994fc56.png"},63:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/R-C-1cd6b321f2f0d10c22cb436c82cf89e3.jpeg"},4986:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/RealityIS.005-bbb01a096532b9d457a7cb4fbfb96a40.jpeg"},958:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/add-c0fef0031b7f32b99f01a937935d1c93.png"},7681:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/blockchain-op-b4a2c1404f3dcf95af920c7cf5ec9147.png"},4015:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/call-stack-d16cc4e022ab0fc0ad74d1f0ecac35d2.jpeg"},3451:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/calling-sequence-6ab7a5989b5667984d84da76e4916b37.jpeg"},3822:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/change-5dab6429c98c6c2455ff7bb1f6bc1c61.png"},4858:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/civilization-a7bc89ba9d4cc408d55ea36d809fb337.jpeg"},7865:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc-cannon-af670062d2ec24bad2fb8cd67593bc0c.jpeg"},9674:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc2-a0ba60559161227add4794ba0eddd786.jpeg"},5130:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/complex-system.024-9efc11c76285e095cdd0e1d248089c92.png"},5335:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/composition-e57808b6f16a8b1944f4afd1361a0a01.png"},3973:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/distributed-a89c2bd2fe6959eea73acdaf0dc22f30.png"},216:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/dynamic-a8dcf87f6abb4a4f87fb2786d9f546c1.png"},3625:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/economics-50ff216d275f497eecf25fa18efefab8.jpeg"},5543:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/env-540070781a6ac0d4b6ca8117f89a14a8.png"},4106:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-a403e17499349f0fd4df5b59f437c43f.jpeg"},4691:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-0e16ea82d71123103fa8a738ce65f4eb.png"},7939:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/is-de628dd839078555017aab17db81094d.png"},2248:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-1-c9f4f83a6a4594ce09cdc10038fb2f06.png"},6203:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-2-d9c73723eb85ed71a10fae5305f2d51f.png"},5979:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/kokid-fe324d84cfb72dd1040e31aa37ef8aa7.gif"},6018:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/mlp-e52dda254b062984effe40f08310427a.jpeg"},7240:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/niantic-opens-lightship-augmented-reality-platform-to-all-developers-fe2e72432380174fb315c4b6f27ea147.webp"},2717:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/obj-com-7f45a33658652fde3b9d4f190300b311.png"},533:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/pasted-image-21192f0a0fbfabcd68ed3e3b365611e6.jpg"},9641:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/piper-banner-00ac70143f99b2c54633f2a156c5785a.png"},4522:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/reality-7ff4e3bf0a679fda0e1ba07e6c368129.png"},2853:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/realworld-aefc3b13bc81e1f876f6d55fe7fb4087.png"},3616:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/roblox-8225bc76c0c3889f67d33ce4012c6db9.jpg"},1310:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/shortcuts-f64049b04e494cf9bb397dca9f9bee89.png"},6383:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/taichi-kernel-f40d892825bd3ddc34d0a54a5cebca82.png"},4305:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/version-tracking-b45605deef79713e1be373d29c45ad3a.png"},2729:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/virtual-and-reality-881079faa7745b48133693081d1614a6.png"},9080:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/vm-il-cd2266988ce34973b9e27af79ae70a1c.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3650],{4137:(e,t,l)=>{l.d(t,{Zo:()=>u,kt:()=>c});var a=l(7294);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,a)}return l}function r(e){for(var t=1;t=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}var s=a.createContext({}),p=function(e){var t=a.useContext(s),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var l=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),k=p(l),d=n,c=k["".concat(s,".").concat(d)]||k[d]||m[d]||i;return l?a.createElement(c,r(r({ref:t},u),{},{components:l})):a.createElement(c,r({ref:t},u))}));function c(e,t){var l=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=l.length,r=new Array(i);r[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[k]="string"==typeof e?e:n,r[1]=o;for(var p=2;p{l.r(t),l.d(t,{contentTitle:()=>r,default:()=>k,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var a=l(7462),n=(l(7294),l(4137));const i={},r="\u6587\u6863\u8bf4\u660e",o={type:"mdx",permalink:"/learning/Reality-World",source:"@site/src/pages/learning/Reality-World.md",title:"\u6587\u6863\u8bf4\u660e",description:"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002",frontMatter:{}},s=[{value:"1.1 \u53d8\u9769",id:"11-\u53d8\u9769",level:2},{value:"1.1.1 \u5f62\u6001\u53d8\u5316",id:"111-\u5f62\u6001\u53d8\u5316",level:3},{value:"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",level:3},{value:"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb",id:"1121-\u4e1a\u52a1\u6bd4\u55bb",level:4},{value:"1.1.3 \u6280\u672f\u6311\u6218",id:"113-\u6280\u672f\u6311\u6218",level:3},{value:"1.2 \u73b0\u72b6",id:"12-\u73b0\u72b6",level:2},{value:"1.3 \u6280\u672f\u4f18\u52bf",id:"13-\u6280\u672f\u4f18\u52bf",level:2},{value:"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",level:3},{value:"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236",id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236",level:3},{value:"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017",id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017",level:3},{value:"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f",id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f",level:3},{value:"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"1.4 \u5546\u4e1a\u6a21\u5f0f",id:"14-\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",level:3},{value:"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",level:3},{value:"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",level:4},{value:"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d",id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",level:3},{value:"1.4.5 \u6301\u7eed\u6d88\u8d39",id:"145-\u6301\u7eed\u6d88\u8d39",level:3},{value:"1.5 \u7528\u6237",id:"15-\u7528\u6237",level:2},{value:"1.5.1 \u666e\u901a\u7528\u6237",id:"151-\u666e\u901a\u7528\u6237",level:3},{value:"1.5.2 \u521b\u4f5c\u7528\u6237",id:"152-\u521b\u4f5c\u7528\u6237",level:3},{value:"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b",id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b",level:4},{value:"1.5.3 \u5f00\u53d1\u8005",id:"153-\u5f00\u53d1\u8005",level:3},{value:"1.5.4 \u6807\u51c6\u4f5c\u8005",id:"154-\u6807\u51c6\u4f5c\u8005",level:3},{value:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c",id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c",level:2},{value:"2.1 Creation Scene Description",id:"21-creation-scene-description",level:2},{value:"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8",id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8",level:3},{value:"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f",id:"212-\u5185\u5b58\u5206\u5e03\u5f0f",level:3},{value:"2.2 Creation Script",id:"22-creation-script",level:2},{value:"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09",id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868",level:3},{value:"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868",id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868",level:4},{value:"2.2.1.2 \u7b26\u53f7\u8868",id:"2212-\u7b26\u53f7\u8868",level:4},{value:"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",level:4},{value:"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027",id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027",level:4},{value:"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf",id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf",level:4},{value:"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",level:4},{value:"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",level:4},{value:"2.2.1.8 \u5b58\u6863\u5c5e\u6027",id:"2218-\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.2 Entity",id:"222-entity",level:3},{value:"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",level:3},{value:"2.2.3.1 \u79c1\u6709\u53d8\u91cf",id:"2231-\u79c1\u6709\u53d8\u91cf",level:4},{value:"2.2.3.2 \u5199\u5165\u6743\u9650",id:"2232-\u5199\u5165\u6743\u9650",level:4},{value:"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",level:4},{value:"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",level:3},{value:"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",level:4},{value:"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",level:4},{value:"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026",id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026",level:4},{value:"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026",level:4},{value:"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316",id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316",level:3},{value:"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",level:4},{value:"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations",id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations",level:4},{value:"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",level:4},{value:"2.2.6 \u7ec4\u4ef6\u67e5\u8be2",id:"226-\u7ec4\u4ef6\u67e5\u8be2",level:3},{value:"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",level:4},{value:"2.2.6.2 \u663e\u5f0f\u58f0\u660e",id:"2262-\u663e\u5f0f\u58f0\u660e",level:4},{value:"2.2.6.3 RUST ECS",id:"2263-rust-ecs",level:4},{value:"2.2.6.4 Labels/Layers",id:"2264-labelslayers",level:4},{value:"2.2.7 Component + System",id:"227-component--system",level:3},{value:"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",level:4},{value:"2.2.7.2 Change-driven update",id:"2272-change-driven-update",level:4},{value:"2.2.7.3 ECS",id:"2273-ecs",level:4},{value:"2.2.7.4 ECS\u53c2\u6570",id:"2274-ecs\u53c2\u6570",level:4},{value:"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",level:4},{value:"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6",id:"2276-\u5355\u4f8b\u7ec4\u4ef6",level:4},{value:"2.2.8 \u6d88\u606f\u901a\u4fe1",id:"228-\u6d88\u606f\u901a\u4fe1",level:3},{value:"2.2.8.1 \u7cfb\u7edf\u673a\u5236",id:"2281-\u7cfb\u7edf\u673a\u5236",level:4},{value:"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168",id:"2282-\u7ec4\u4ef6\u5b89\u5168",level:4},{value:"2.2.8.3 \u6743\u9650\u63a7\u5236",id:"2283-\u6743\u9650\u63a7\u5236",level:4},{value:"2.2.8.4 \u65f6\u5e8f\u6027",id:"2284-\u65f6\u5e8f\u6027",level:4},{value:"2.2.8.5 \u6027\u80fd\u95ee\u9898",id:"2285-\u6027\u80fd\u95ee\u9898",level:4},{value:"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f",id:"2286-\u4e09\u79cd\u6a21\u5f0f",level:4},{value:"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863",id:"229-\u6570\u636e\u4e0e\u5b58\u6863",level:3},{value:"2.2.9.1 \u6570\u636e\u914d\u7f6e",id:"2291-\u6570\u636e\u914d\u7f6e",level:4},{value:"2.2.9.2 \u5b58\u6863",id:"2292-\u5b58\u6863",level:4},{value:"2.2.9.3 \u4e0d\u8db3",id:"2293-\u4e0d\u8db3",level:4},{value:"2.2.10 \u901a\u7528\u6027",id:"2210-\u901a\u7528\u6027",level:3},{value:"2.2.10.1 \u72ec\u7acb\u7c7b",id:"22101-\u72ec\u7acb\u7c7b",level:4},{value:"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",level:4},{value:"2.2.10.3 \u6709\u8fd4\u56de\u503c",id:"22103-\u6709\u8fd4\u56de\u503c",level:4},{value:"2.2.10.4 \u7ee7\u627f",id:"22104-\u7ee7\u627f",level:4},{value:"2.2.10.5 \u7ed3\u6784\u4f53",id:"22105-\u7ed3\u6784\u4f53",level:4},{value:"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387",id:"22106-\u63a7\u5236tick\u7684\u9891\u7387",level:4},{value:"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026",level:3},{value:"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c",id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c",level:4},{value:"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165",id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165",level:4},{value:"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",level:4},{value:"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",level:4},{value:"2.2.12 \u7b26\u53f7\u6cdb\u578b",id:"2212-\u7b26\u53f7\u6cdb\u578b",level:3},{value:"2.2.12.1 \u53d8\u91cf\u540d\u79f0",id:"22121-\u53d8\u91cf\u540d\u79f0",level:4},{value:"2.2.12.2 \u6a21\u5f0f\u5339\u914d",id:"22122-\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",level:4},{value:"2.2.13 \u5e76\u53d1",id:"2213-\u5e76\u53d1",level:3},{value:"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b",id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b",level:4},{value:"2.2.13.2 Erlang\u53caOOP",id:"22132-erlang\u53caoop",level:4},{value:"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",level:4},{value:"2.2.14 \u667a\u80fd\u611f\u77e5",id:"2214-\u667a\u80fd\u611f\u77e5",level:3},{value:"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92",id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92",level:3},{value:"2.2.14.1 HelpComponent",id:"22141-helpcomponent",level:4},{value:"2.2.15 Components",id:"2215-components",level:3},{value:"2.2.15.1 NeuralComponent",id:"22151-neuralcomponent",level:4},{value:"2.2.15.2 TagComponent",id:"22152-tagcomponent",level:4},{value:"2.2.15.3 RealityIDComponent",id:"22153-realityidcomponent",level:4},{value:"2.2.15.4 HelpComponent",id:"22154-helpcomponent",level:4},{value:"2.2.15.5 DeltaComponent",id:"22155-deltacomponent",level:4},{value:"2.2.16 \u6700\u4f73\u5b9e\u8df5",id:"2216-\u6700\u4f73\u5b9e\u8df5",level:3},{value:"2.2.16.1 more granular is better",id:"22161-more-granular-is-better",level:4},{value:"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f",id:"22162-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",level:3},{value:"2.2.17.1 \u6570\u636e\u6cdb\u578b",id:"22171-\u6570\u636e\u6cdb\u578b",level:4},{value:"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e",id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e",level:4},{value:"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",level:3},{value:"2.2.18.1 Update\u673a\u5236",id:"22181-update\u673a\u5236",level:4},{value:"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",level:4},{value:"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6",id:"22183-\u67b6\u6784\u590d\u6742\u5ea6",level:4},{value:"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI",id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai",level:3},{value:"2.2.20 \u5b89\u5168",id:"2220-\u5b89\u5168",level:3},{value:"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56",id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56",level:3},{value:"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",level:4},{value:"2.2.21.2 \u5173\u8054\u7ec4\u4ef6",id:"22212-\u5173\u8054\u7ec4\u4ef6",level:4},{value:"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f",id:"22213-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.22 \u5206\u5e03\u5f0f",id:"2222-\u5206\u5e03\u5f0f",level:3},{value:"2.2.23 \u5f02\u5e38",id:"2223-\u5f02\u5e38",level:3},{value:"2.2.23.1 \u81ea\u52a8\u5b58\u6863",id:"22231-\u81ea\u52a8\u5b58\u6863",level:4},{value:"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863",id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863",level:4},{value:"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9",id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9",level:4},{value:"2.2.24 \u7ec4\u4ef6\u5c5e\u6027",id:"2224-\u7ec4\u4ef6\u5c5e\u6027",level:3},{value:"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",level:3},{value:"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",level:4},{value:"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",level:4},{value:"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",level:4},{value:"2.3 Creation VM",id:"23-creation-vm",level:2},{value:"2.3.1 Creation Table Engine",id:"231-creation-table-engine",level:3},{value:"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4",id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4",level:4},{value:"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",level:4},{value:"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*",id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406",level:4},{value:"2.3.2 Add\u3001Remove",id:"232-addremove",level:3},{value:"2.3.3 Change-driven Update",id:"233-change-driven-update",level:3},{value:"2.3.3.1 \u7406\u8bba\u57fa\u7840",id:"2331-\u7406\u8bba\u57fa\u7840",level:4},{value:"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6",id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6",level:4},{value:"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a",id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a",level:4},{value:"2.3.3.4 Version Tracking",id:"2334-version--tracking",level:4},{value:"2.3.3.5 Bevy's Change Detection",id:"2335-bevys-change-detection",level:4},{value:"2.3.4 \u7f16\u8bd1",id:"234-\u7f16\u8bd1",level:3},{value:"2.3.4.1 AOT",id:"2341-aot",level:4},{value:"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",level:4},{value:"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",level:4},{value:"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d",id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d",level:3},{value:"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",level:3},{value:"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",level:4},{value:"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",level:4},{value:"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:4},{value:"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",level:4},{value:"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*",id:"237-\u9690\u5f0f\u865a\u62df\u673a",level:3},{value:"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",level:4},{value:"2.3.8 \u8c03\u5ea6\u5668",id:"238-\u8c03\u5ea6\u5668",level:3},{value:"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868",id:"239-\u52a8\u6001\u7b26\u53f7\u8868",level:3},{value:"2.3.10 \u865a\u62df\u673a\u67b6\u6784",id:"2310-\u865a\u62df\u673a\u67b6\u6784",level:3},{value:"2.3.10.1 \u670d\u52a1\u7aef",id:"23101-\u670d\u52a1\u7aef",level:4},{value:"2.3.10.2 \u5ba2\u6237\u7aef",id:"23102-\u5ba2\u6237\u7aef",level:4},{value:"2.4. CreationXR",id:"24-creationxr",level:2},{value:"2.4.1 Unified XR Input",id:"241-unified-xr-input",level:3},{value:"2.4.2 XR Scene Understanding",id:"242-xr-scene-understanding",level:3},{value:"2.4.3 Data-driven Architecture",id:"243-data-driven-architecture",level:3},{value:"2.4.4 \u4ea4\u4e92",id:"244-\u4ea4\u4e92",level:3},{value:"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",level:4},{value:"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92",id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92",level:4},{value:"2.5 Creation AI",id:"25-creation-ai",level:2},{value:"2.5.1 Semantics-based Creating",id:"251-semantics-based-creating",level:3},{value:"2.5.2 Procedural Content Generation",id:"252-procedural-content-generation",level:3},{value:"2.5.3 Intelligent Simulation",id:"253-intelligent-simulation",level:3},{value:"2.5.4 Research",id:"254-research",level:3},{value:"2.6 Creation Cloud",id:"26-creation-cloud",level:2},{value:"2.6.1 Creation Management",id:"261-creation-management",level:3},{value:"2.6.1.1 CreationID",id:"2611-creationid",level:4},{value:"2.6.2 Creation Code Library",id:"262--creation-code-library",level:3},{value:"2.6.2.1 \u6807\u51c6\u7ba1\u7406",id:"2621-\u6807\u51c6\u7ba1\u7406",level:4},{value:"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",level:4},{value:"2.6.3 Multi-player Services",id:"263-multi-player--services",level:3},{value:"2.6.3.1 Voice Service",id:"2631-voice-service",level:4},{value:"2.6.4 \u7aef\u4e91\u534f\u540c",id:"264-\u7aef\u4e91\u534f\u540c",level:3},{value:"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",level:4},{value:"2.6.4.2 Client as a Display",id:"2642-client-as-a-display",level:4},{value:"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",level:4},{value:"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",level:4},{value:"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f",id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f",level:4},{value:"2.6.5 \u5e76\u884c\u8ba1\u7b97",id:"265-\u5e76\u884c\u8ba1\u7b97",level:3},{value:"2.6.5.1 \u5206\u5e03\u5f0fCreation Table",id:"2651-\u5206\u5e03\u5f0fcreation-table",level:4},{value:"2.6.6 RPC",id:"266-rpc",level:3},{value:"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",level:2},{value:"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf",id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf",level:3},{value:"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b",id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143",id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143",level:4},{value:"2.7.2.2 \u5217\u8868\u64cd\u4f5c",id:"2722-\u5217\u8868\u64cd\u4f5c",level:4},{value:"2.7.3 \u6570\u636e\u9a71\u52a8",id:"273-\u6570\u636e\u9a71\u52a8",level:3},{value:"2.7.4 ECS",id:"274-ecs",level:3},{value:"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",level:3},{value:"2.7.6 \u52a8\u6001\u89e3\u91ca",id:"276-\u52a8\u6001\u89e3\u91ca",level:3},{value:"2.7.7 \u8d23\u6743\u8ba9\u6e21",id:"277-\u8d23\u6743\u8ba9\u6e21",level:3},{value:"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217",id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217",level:3},{value:"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",level:4},{value:"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027",id:"2782-\u5e76\u884c\u4f38\u7f29\u6027",level:4},{value:"2.7.9 Let is crash",id:"279-let-is-crash",level:3},{value:"2.7.9.1 \u5bb9\u9519\u673a\u5236",id:"2791-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6",id:"2792-\u5e76\u53d1\u8c03\u5ea6",level:4},{value:"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",level:3},{value:"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",level:4},{value:"2.7.10.2 Machinations",id:"27102-machinations",level:4},{value:"2.7.11 \u6a21\u5f0f\u5339\u914d",id:"2711-\u6a21\u5f0f\u5339\u914d",level:3},{value:"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.12.2 \u540d\u5b57\u5339\u914d",id:"27122-\u540d\u5b57\u5339\u914d",level:4},{value:"2.7.12 \u5206\u5e03\u5f0f",id:"2712-\u5206\u5e03\u5f0f",level:3},{value:"2.7.12.1 Actor\u6a21\u578b",id:"27121-actor\u6a21\u578b",level:4},{value:"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",level:3},{value:"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6",id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6",level:4},{value:"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",level:4},{value:"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",level:4},{value:"2.7.14 Serverless",id:"2714-serverless",level:3},{value:"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5",id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5",level:3},{value:"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:3},{value:"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",level:4},{value:"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",level:4},{value:"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:4},{value:"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",level:4},{value:"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",level:4},{value:"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf",id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf",level:3},{value:"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570",id:"27171-\u5355\u53c2\u6570\u51fd\u6570",level:4},{value:"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b",id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",level:3},{value:"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027",id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027",level:4},{value:"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",level:4},{value:"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",level:4},{value:"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",level:4},{value:"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5",id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5",level:4},{value:"2.7.20 \u8ba1\u7b97\u56fe",id:"2720-\u8ba1\u7b97\u56fe",level:3},{value:"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf",id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf",level:2},{value:"2.8.1 \u52a8\u6001\u7f16\u8bd1",id:"281-\u52a8\u6001\u7f16\u8bd1",level:3},{value:"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",level:3},{value:"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f",id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f",level:3},{value:"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0",id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0",level:3},{value:"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",level:3},{value:"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",level:3},{value:"2.8.7 \u52a8\u6001\u5524\u9192",id:"287-\u52a8\u6001\u5524\u9192",level:3},{value:"2.9 \u4e92\u64cd\u4f5c\u6027",id:"29-\u4e92\u64cd\u4f5c\u6027",level:2},{value:"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",level:3},{value:"2.9.1.1 Object models",id:"2911-object-models",level:4},{value:"2.9.1.2 Virtual machines",id:"2912-virtual-machines",level:4},{value:"2.9.1.3 Foreign function interfaces",id:"2913-foreign-function-interfaces",level:4},{value:"2.9.1.4 Challenges",id:"2914-challenges",level:4},{value:"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",level:4},{value:"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",level:4},{value:"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",level:4},{value:"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",level:4},{value:"2.9.5 \u4ea4\u4e92\u6a21\u5f0f",id:"295-\u4ea4\u4e92\u6a21\u5f0f",level:3},{value:"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94",id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94",level:4},{value:"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027",id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027",level:4},{value:"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",level:4},{value:"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",level:3},{value:"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528",id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528",level:4},{value:"2.10 GPU VM",id:"210-gpu-vm",level:2},{value:"2.11 Render VM",id:"211-render-vm",level:2},{value:"2.12 RealityIS Runtime",id:"212-realityis-runtime",level:2},{value:"2.13 \u6027\u80fd\u56e0\u7d20",id:"213-\u6027\u80fd\u56e0\u7d20",level:2},{value:"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931",id:"2131-\u5c40\u90e8\u6027\u4e27\u5931",level:3},{value:"2.13.2 \u65e0\u6548\u8ba1\u7b97",id:"2132-\u65e0\u6548\u8ba1\u7b97",level:3},{value:"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*",id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d",level:2},{value:"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840",id:"2141-realityis\u6838\u5fc3\u57fa\u7840",level:3},{value:"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027",id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027",level:3},{value:"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5",id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5",level:3},{value:"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",level:4},{value:"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027",id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027",level:4},{value:"2.14.3.3 \u7248\u672c\u7ba1\u7406",id:"21433-\u7248\u672c\u7ba1\u7406",level:4},{value:"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",level:4},{value:"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",level:3},{value:"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",level:2},{value:"2.15.1 \u590d\u6742\u7cfb\u7edf",id:"2151-\u590d\u6742\u7cfb\u7edf",level:3},{value:"2.15.2 \u7ec6\u80de\u6a21\u578b",id:"2152-\u7ec6\u80de\u6a21\u578b",level:3},{value:"2.15.2.1 Isolation",id:"21521-isolation",level:4},{value:"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",level:3},{value:"2.15.3.1 Is Erlang object oriented?",id:"21531-is-erlang-object-oriented",level:4},{value:"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb",id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb",level:4},{value:"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236",id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236",level:4},{value:"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",level:3},{value:"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",level:4},{value:"2.15.4.2 \u6d88\u606f\u4f20\u9012",id:"21542-\u6d88\u606f\u4f20\u9012",level:4},{value:"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",level:4},{value:"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5",id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5",level:4},{value:"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7",id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7",level:4},{value:"2.15.4.6 \u591a\u6001",id:"21546-\u591a\u6001",level:4},{value:"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb",id:"21547-\u5bf9\u8c61\u5173\u7cfb",level:4},{value:"2.15.4.8 \u5bb9\u9519\u673a\u5236",id:"21548-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",level:2},{value:"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027",id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027",level:3},{value:"2.16.1.1 java class loader & security",id:"21611-java-class-loader--security",level:4},{value:"2.16.1.2 Java applets",id:"21612-java-applets",level:4},{value:"2.16.1.3 MVM",id:"21613-mvm",level:4},{value:"2.16.2 Program Security Mechanisms",id:"2162-program-security-mechanisms",level:3},{value:"2.16.2.1 CFI",id:"21621-cfi",level:4},{value:"2.16.2.2 SFI",id:"21622-sfi",level:4},{value:"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",level:5},{value:"2.16.2.2.2 Heavyweight Transitions",id:"216222-heavyweight-transitions",level:5},{value:"2.16.2.3 object space model",id:"21623-object--space-model",level:4},{value:"2.16.2.4 lua Environment",id:"21624-lua-environment",level:4},{value:"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236",id:"21625-erlang-\u9694\u79bb\u673a\u5236",level:4},{value:"2.16.3 Webassembly Security",id:"2163-webassembly-security",level:3},{value:"2.16.3.1 Module & CFI",id:"21631-module--cfi",level:4},{value:"2.16.3.2 Memory safety",id:"21632-memory-safety",level:4},{value:"2.16.3.3 Isolation without Taxation",id:"21633-isolation-without-taxation",level:4},{value:"2.16.3.3.1 Zero-cost conditions",id:"216331-zero-cost-conditions",level:5},{value:"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",level:3},{value:"2.16.4.1 \u5bf9\u8c61\u9694\u79bb",id:"21641-\u5bf9\u8c61\u9694\u79bb",level:4},{value:"2.16.4.2 app spaces",id:"21642-app-spaces",level:4},{value:"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1",id:"21643-\u5bf9\u8c61\u901a\u4fe1",level:4},{value:"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",level:4},{value:"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784",id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784",level:2},{value:"2.17.1 LLVM",id:"2171-llvm",level:3},{value:"2.17.2 USD",id:"2172-usd",level:3},{value:"2.17.3 MLIR",id:"2173-mlir",level:3},{value:"2.17.4 Lua C API",id:"2174-lua-c-api",level:3},{value:"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",level:3},{value:"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",level:2},{value:"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236",id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236",level:3},{value:"2.18.2 \u94fe\u63a5\u673a\u5236",id:"2182-\u94fe\u63a5\u673a\u5236",level:3},{value:"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236",id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236",level:3},{value:"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",level:2},{value:"3.1 Creation ID",id:"31-creation-id",level:2},{value:"3.2 Creation Simulation",id:"32-creation-simulation",level:2},{value:"3.3 UI\u7ec4\u4ef6",id:"33-ui\u7ec4\u4ef6",level:2},{value:"3.3.1 Bevy UI",id:"331-bevy-ui",level:3},{value:"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",level:3},{value:"4.1 Reality ID",id:"41-reality-id",level:2},{value:"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406",id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406",id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406",level:3},{value:"4.2 The Reality World app",id:"42-the-reality-world-app",level:2},{value:"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",level:3},{value:"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",level:4},{value:"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",level:4},{value:"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",level:4},{value:"4.2.2 \u4f20\u9001\u95e8",id:"422-\u4f20\u9001\u95e8",level:3},{value:"4.2.3 Point and Click",id:"423-point-and-click",level:3},{value:"4.3 \u6e90\u52a8\u529b",id:"43-\u6e90\u52a8\u529b",level:2},{value:"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",level:3},{value:"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",level:3},{value:"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e",id:"4321-\u6301\u7eed\u7ecf\u6d4e",level:4},{value:"4.3.2.2 \u5e7f\u544a\u5185\u5bb9",id:"4322-\u5e7f\u544a\u5185\u5bb9",level:4},{value:"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",level:3},{value:"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743",id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743",level:2},{value:"4.4.1 RealityIDComponent",id:"441-realityidcomponent",level:3},{value:"4.4.2 readonly",id:"442-readonly",level:3},{value:"4.4.3 \u91cd\u65b0\u52a0\u8f7d",id:"443-\u91cd\u65b0\u52a0\u8f7d",level:3},{value:"4.5 \u7a33\u5b9a\u6027",id:"45-\u7a33\u5b9a\u6027",level:2},{value:"4.5.1 Reality Verified Components",id:"451-reality-verified-components",level:3},{value:"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",level:3},{value:"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613",id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613",level:2},{value:"4.6.1 \u53ca\u65f6\u8d2d\u4e70",id:"461-\u53ca\u65f6\u8d2d\u4e70",level:3},{value:"4.6.2 \u667a\u80fd\u8d2d\u4e70",id:"462-\u667a\u80fd\u8d2d\u4e70",level:3},{value:"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",level:3},{value:"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",level:4},{value:"4.6.4 \u5e02\u573a\u7ecf\u6d4e",id:"464-\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",level:4},{value:"4.6.5 \u533a\u5757\u94fe",id:"465-\u533a\u5757\u94fe",level:3},{value:"4.6.5.1 \u4ef7\u503c\u5173\u8054",id:"4651-\u4ef7\u503c\u5173\u8054",level:4},{value:"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a",id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a",level:4},{value:"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",level:4},{value:"4.6.6 Royalty",id:"466-royalty",level:3},{value:"4.6.6.1 \u6807\u51c6\u7a0e",id:"4661-\u6807\u51c6\u7a0e",level:4},{value:"4.6.6.2 \u7ec4\u4ef6\u7a0e",id:"4662-\u7ec4\u4ef6\u7a0e",level:4},{value:"4.6.9 \u5b8c\u6574\u7684\u751f\u6001",id:"469-\u5b8c\u6574\u7684\u751f\u6001",level:3},{value:"4.7 Social",id:"47-social",level:2},{value:"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4",id:"471-\u79c1\u4eba\u5316\u793e\u4ea4",level:3},{value:"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1",id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1",level:4},{value:"4.7.2 \u5173\u6ce8\u73b0\u5b9e",id:"472--\u5173\u6ce8\u73b0\u5b9e",level:3},{value:"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",level:2},{value:"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027",id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027",level:3},{value:"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",level:3},{value:"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",level:3},{value:"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c",id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c",level:3},{value:"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f",id:"485-\u521b\u9020\u7684\u65b9\u5f0f",level:3},{value:"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",level:3},{value:"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",level:3},{value:"4.9 Third party apps",id:"49-third-party-apps",level:2},{value:"4.10 \u793e\u4f1a\u4ef7\u503c",id:"410--\u793e\u4f1a\u4ef7\u503c",level:2},{value:"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",level:3},{value:"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",level:3},{value:"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",level:3},{value:"4.11 \u6807\u51c6",id:"411-\u6807\u51c6",level:2},{value:"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",level:3},{value:"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"4.11.3 \u6807\u51c6\u7ba1\u7406",id:"4113-\u6807\u51c6\u7ba1\u7406",level:3},{value:"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5",id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236",id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236",level:4},{value:"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09",id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236",level:4},{value:"4.11.4 \u8de8\u8d8a\u6807\u51c6",id:"4114-\u8de8\u8d8a\u6807\u51c6",level:3},{value:"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",level:4},{value:"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse",id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse",level:2},{value:"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c",id:"4121-\u6807\u51c6\u7684\u4ef7\u503c",level:3},{value:"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",level:3},{value:"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",level:3},{value:"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",level:4},{value:"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",level:3},{value:"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",level:4},{value:"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",level:4},{value:"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",level:4},{value:"4.13 \u7528\u6237\u521b\u4f5c",id:"413-\u7528\u6237\u521b\u4f5c",level:2},{value:"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",level:3},{value:"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",level:3},{value:"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7",id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7",level:3},{value:"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",level:2},{value:"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458",id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458",level:3},{value:"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI",id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai",level:3},{value:"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",level:4},{value:"5.1 \u4ee3\u5e01\u7ecf\u6d4e",id:"51-\u4ee3\u5e01\u7ecf\u6d4e",level:2},{value:"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",level:3},{value:"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",level:3},{value:"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97",id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97",level:2},{value:"5.2.1 \u7ed3\u7b97\u6027\u80fd",id:"521-\u7ed3\u7b97\u6027\u80fd",level:3},{value:"5.3 \u667a\u80fd\u5408\u7ea6",id:"53-\u667a\u80fd\u5408\u7ea6",level:2},{value:"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",level:2},{value:"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01",id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01",level:3},{value:"5.4.2 \u6d41\u52a8\u6027",id:"542-\u6d41\u52a8\u6027",level:3},{value:"5.5 \u5e73\u53f0\u4fe1\u7528",id:"55-\u5e73\u53f0\u4fe1\u7528",level:2},{value:"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae",id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae",level:3},{value:"5.5.2 \u4ee3\u5e01\u534f\u8bae",id:"552-\u4ee3\u5e01\u534f\u8bae",level:3},{value:"5.6 \u73b0\u5b9e\u5e94\u7528",id:"56-\u73b0\u5b9e\u5e94\u7528",level:2},{value:"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",level:2},{value:"5.7.1 \u73a9\u5bb6\u9053\u5fb7",id:"571-\u73a9\u5bb6\u9053\u5fb7",level:3},{value:"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1",id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1",level:3},{value:"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",level:2},{value:"5.8.1 \u793e\u4ea4\u5206\u4eab",id:"581-\u793e\u4ea4\u5206\u4eab",level:3},{value:"5.8.2 \u53c2\u4e0e\u5185\u6d4b",id:"582-\u53c2\u4e0e\u5185\u6d4b",level:3},{value:"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",level:2},{value:"5.10 \u67b6\u6784\u7f3a\u9677",id:"510-\u67b6\u6784\u7f3a\u9677",level:2},{value:"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",level:3},{value:"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",level:3},{value:"7.1 \u6570\u636e\u683c\u5f0f",id:"71-\u6570\u636e\u683c\u5f0f",level:2},{value:"7.1.1 USD",id:"711-usd",level:3},{value:"7.1.1.1 \u65b0\u601d\u60f3",id:"7111-\u65b0\u601d\u60f3",level:4},{value:"7.1.1.2 \u6280\u672f\u65b9\u6848",id:"7112-\u6280\u672f\u65b9\u6848",level:4},{value:"7.1.1.3 USDZ",id:"7113-usdz",level:4},{value:"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0",id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0",level:4},{value:"7.1.1.5 \u5bf9\u6bd4",id:"7115-\u5bf9\u6bd4",level:4},{value:"7.1.2 Alembic formats",id:"712-alembic-formats",level:3},{value:"7.1.3 Unity Prefabs",id:"713-unity-prefabs",level:3},{value:"7.1.4 \u4ee3\u7801\u751f\u6210",id:"714-\u4ee3\u7801\u751f\u6210",level:3},{value:"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784",id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784",level:2},{value:"7.2.1 Unity DOTS/ECS",id:"721-unity-dotsecs",level:3},{value:"7.2.2 ECS",id:"722-ecs",level:3},{value:"7.2.3 UE5 MASS",id:"723-ue5-mass",level:3},{value:"7.2.4 Data-oriented and -driven",id:"724-data-oriented-and--driven",level:3},{value:"7.2.5 Rust ECS",id:"725--rust-ecs",level:3},{value:"7.3 \u7f16\u8bd1\u5668\u4e0eDSL",id:"73-\u7f16\u8bd1\u5668\u4e0edsl",level:2},{value:"7.3.1 Taichi",id:"731--taichi",level:3},{value:"7.3.1.1 \u65b0\u601d\u60f3",id:"7311-\u65b0\u601d\u60f3",level:4},{value:"7.3.1.2 \u6280\u672f\u65b9\u6848",id:"7312-\u6280\u672f\u65b9\u6848",level:4},{value:"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0",id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0",level:4},{value:"7.3.1.4 \u5bf9\u6bd4",id:"7314-\u5bf9\u6bd4",level:4},{value:"7.3.2 Modular AI",id:"732-modular-ai",level:3},{value:"7.3.2.1 \u65b0\u601d\u60f3",id:"7321-\u65b0\u601d\u60f3",level:4},{value:"7.3.2.2 Challenges",id:"7322-challenges",level:4},{value:"7.3.2.3 Core additions to MLIR",id:"7323-core-additions-to-mlir",level:4},{value:"7.3.2.4 \u7b14\u8bb0",id:"7324-\u7b14\u8bb0",level:4},{value:"7.3.3 Jittor",id:"733-jittor",level:3},{value:"7.3.3.1 The front-end",id:"7331-the-front-end",level:4},{value:"7.3.3.2 The back-end",id:"7332-the-back-end",level:4},{value:"7.3.4 PyTorch",id:"734-pytorch",level:3},{value:"7.3.4.1 Perform focused implementation",id:"7341-perform-focused-implementation",level:4},{value:"7.3.5 OneFlow",id:"735-oneflow",level:3},{value:"7.3.6 PREDA",id:"736-preda",level:3},{value:"7.3.7 Web Assembly",id:"737-web-assembly",level:3},{value:"7.4 Others",id:"74-others",level:2},{value:"7.4.1 \u795e\u7ecf\u7f51\u7edc",id:"741-\u795e\u7ecf\u7f51\u7edc",level:3},{value:"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",level:3},{value:"7.4.2.1 pip",id:"7421-pip",level:4},{value:"7.4.2.2 Rust",id:"7422-rust",level:4},{value:"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01",id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01",level:3},{value:"7.4.4 Rust",id:"744-rust",level:3},{value:"7.4.5 Unity EditorXR and SceneFusion",id:"745-unity-editorxr-and-scenefusion",level:3},{value:"7.4.6 BEVYengine",id:"746-bevyengine",level:3},{value:"7.4.8 magicavoxel",id:"748-magicavoxel",level:3},{value:"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",level:3},{value:"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b",id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b",level:3},{value:"7.4.11 Meta Builder bot",id:"7411-meta-builder-bot",level:3},{value:"7.4.12 Houdini: Node-based Workflow",id:"7412-houdini-node-based-workflow",level:3},{value:"7.4.13 realityOS",id:"7413-realityos",level:3},{value:"7.4.14 OpenXR",id:"7414-openxr",level:3},{value:"7.4.15 ECS + AI",id:"7415-ecs--ai",level:3},{value:"7.4.16 Unreal blueprint",id:"7416-unreal-blueprint",level:3},{value:"7.4.17 Pixar",id:"7417-pixar",level:3},{value:"7.4.18 Gaia procedural-worlds.com",id:"7418-gaia-procedural-worldscom",level:3},{value:"7.4.19 Google Maps API",id:"7419-google-maps-api",level:3},{value:"7.4.20 Procedural content generation",id:"7420-procedural-content-generation",level:3},{value:"7.4.21 casualcreator",id:"7421-casualcreator",level:3},{value:"7.4.22 \u5fae\u670d\u52a1\u5316",id:"7422-\u5fae\u670d\u52a1\u5316",level:3},{value:"7.4.23 Google Tilt Brush",id:"7423-google-tilt-brush",level:3},{value:"7.4.24 GitHub",id:"7424-github",level:3},{value:"7.4.25 Stechfab",id:"7425-stechfab",level:3},{value:"7.4.26 Game pigeon: games for iMessage",id:"7426-game-pigeon-games-for-imessage",level:3},{value:"7.5 \u5e94\u7528",id:"75-\u5e94\u7528",level:2},{value:"7.5.1 \u5821\u5792\u4e4b\u591c",id:"751--\u5821\u5792\u4e4b\u591c",level:3},{value:"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",level:4},{value:"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1",id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1",level:4},{value:"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4",id:"7513-\u79c1\u5bc6\u793e\u4ea4",level:4},{value:"7.5.1.4 Verse Language",id:"7514-verse-language",level:4},{value:"7.5.2 ROBLOX",id:"752-roblox",level:3},{value:"7.5.3 NIANTIC",id:"753-niantic",level:3},{value:"7.5.4 SNAPCHAT",id:"754-snapchat",level:3},{value:"7.5.5 Meta",id:"755-meta",level:3},{value:"7.5.6 Omniverse",id:"756-omniverse",level:3},{value:"7.5.7 Minecraft",id:"757-minecraft",level:3},{value:"7.5.8 Wilder World",id:"758-wilder-world",level:3},{value:"7.6 \u533a\u5757\u94fe",id:"76-\u533a\u5757\u94fe",level:2},{value:"7.6.1 \u95ee\u9898",id:"761-\u95ee\u9898",level:3},{value:"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f",id:"7611-\u6210\u672c\u95ee\u9898",level:4},{value:"7.6.1.2 \u793e\u533a\u6cbb\u7406",id:"7612-\u793e\u533a\u6cbb\u7406",level:4},{value:"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7",id:"7614-\u7cfb\u7edf\u5347\u7ea7",level:4},{value:"7.6.2 \u6982\u5ff5",id:"762-\u6982\u5ff5",level:3},{value:"7.6.2.1 \u667a\u80fd\u5408\u7ea6",id:"7621-\u667a\u80fd\u5408\u7ea6",level:4},{value:"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01",id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01",level:4},{value:"7.6.2.3 ICO",id:"7623-ico",level:4},{value:"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09",id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7",level:4},{value:"7.7 Machinations",id:"77-machinations",level:2},{value:"7.8 Render Graph",id:"78-render-graph",level:2},{value:"7.8.1 WorldRenderer challenges",id:"781-worldrenderer-challenges",level:3},{value:"7.8.2 Modular WorldRenderer goals",id:"782-modular-worldrenderer-goals",level:3},{value:"7.9 MLIR",id:"79-mlir",level:2},{value:"7.9.1 \u4ecb\u7ecd",id:"791-\u4ecb\u7ecd",level:3},{value:"7.9.2 \u8bbe\u8ba1\u539f\u5219",id:"792-\u8bbe\u8ba1\u539f\u5219",level:3},{value:"7.9.3 MLIR structure",id:"793-mlir-structure",level:3},{value:"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR",id:"794-llvm-irspir-vmlir",level:3},{value:"7.9.4.1 LLVM IR",id:"7941-llvm-ir",level:4},{value:"7.9.4.2 SPIR-V",id:"7942-spir-v",level:4},{value:"7.9.4.3 MLIR",id:"7943-mlir",level:4},{value:"7.9.5 MLIR Dialect",id:"795-mlir-dialect",level:3},{value:"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6",id:"7951-\u57fa\u7840\u7ec4\u4ef6",level:4},{value:"7.9.5.2 Dialect\u4f53\u7cfb",id:"7952-dialect\u4f53\u7cfb",level:4},{value:"7.9.5.3 Operations",id:"7953-operations",level:4},{value:"7.9.6 Analysis and Transformation",id:"796-analysis-and-transformation",level:3},{value:"7.9.6.1 C++ style pattern-match and rewrite",id:"7961-c-style--pattern-match-and-rewrite",level:4},{value:"7.9.6.2 \u603b\u7ed3",id:"7962-\u603b\u7ed3",level:4},{value:"7.9.7 Generic Transformation with Interfaces",id:"797-generic-transformation-with-interfaces",level:3},{value:"7.9.8 Lowering",id:"798-lowering",level:3},{value:"7.9.8.1 Dialect Conversions",id:"7981-dialect-conversions",level:4},{value:"7.9.9 Lowering to LLVM",id:"799-lowering-to-llvm",level:3},{value:"7.9.10 MLIR Language",id:"7910-mlir-language",level:3},{value:"7.9.10.1 Dialects",id:"79101-dialects",level:4},{value:"7.9.11 Pattern Rewriting",id:"7911-pattern-rewriting",level:3},{value:"7.10 AI",id:"710-ai",level:2},{value:"7.10.1 Apple Shortcuts",id:"7101-apple-shortcuts",level:3},{value:"7.11 Slack",id:"711-slack",level:2},{value:"8.1 Script languages",id:"81-script-languages",level:2},{value:"8.1.1 SkookumScript",id:"811-skookumscript",level:3},{value:"8.1.1.1 Time-flow logic",id:"8111-time-flow-logic",level:4},{value:"7.1.1.2 Conditional flow control",id:"7112-conditional-flow-control",level:4},{value:"8.1.2 Lua",id:"812-lua",level:3},{value:"8.1.3 GameMonkey",id:"813-gamemonkey",level:3},{value:"8.1.4 Python",id:"814-python",level:3},{value:"8.1.5 JavaScript",id:"815-javascript",level:3},{value:"8.1.6 TypeScript",id:"816-typescript",level:3},{value:"8.1.7 SCUMM",id:"817-scumm",level:3},{value:"8.1.8 Mono-script",id:"818-mono-script",level:3},{value:"8.1.9 AngelScript",id:"819-angelscript",level:3},{value:"8.1.10 Scheme/Guile",id:"8110-schemeguile",level:3},{value:"8.1.11 ActionScript",id:"8111-actionscript",level:3},{value:"8.1.12 mruby",id:"8112-mruby",level:3},{value:"8.2 Erlang",id:"82-erlang",level:2},{value:"8.2.1 Beam VM",id:"821-beam-vm",level:3},{value:"8.4.2 Concurrency Oriented Languages",id:"842-concurrency-oriented-languages",level:3},{value:"8.4.2.1 Programming by observing the real world",id:"8421-programming-by-observing-the-real-world",level:4},{value:"8.4.2.2 Characteristics of a COPL",id:"8422-characteristics-of-a-copl",level:4},{value:"8.4.2.3 Process isolation*",id:"8423-process-isolation",level:4},{value:"8.4.2.4 Names of processes",id:"8424-names-of-processes",level:4},{value:"8.4.2.5 Message passing",id:"8425-message-passing",level:4},{value:"8.4.2.6 Protocols*",id:"8426-protocols",level:4},{value:"8.3 Move",id:"83-move",level:2},{value:"8.3.1 \u95ee\u9898",id:"831-\u95ee\u9898",level:3},{value:"8.3.2 Move Design Goals",id:"832-move-design-goals",level:3},{value:"8.3.3 Move Overview",id:"833-move-overview",level:3},{value:"8.3.3.1 Peer-to-Peer Payment Transaction Script",id:"8331-peer-to-peer-payment-transaction-script",level:4},{value:"8.3.3.2 Module",id:"8332-module",level:4},{value:"8.3.4 The Move Language",id:"834-the-move-language",level:3},{value:"8.4 Smalltalk",id:"84-smalltalk",level:2},{value:"8.4.1 Object Model",id:"841-object-model",level:3},{value:"8.4.2.1 Message",id:"8421-message",level:4},{value:"8.4.2.2 Message Sending Syntax",id:"8422-message-sending-syntax",level:4},{value:"8.4.2.3 Discussion of Smalltalk Syntax",id:"8423-discussion-of-smalltalk-syntax",level:4},{value:"8.4.2.4 The Distinction Between Types and Classes",id:"8424-the-distinction-between-types-and-classes",level:4},{value:"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61",id:"842-smalltalk\u9762\u5411\u5bf9\u8c61",level:3},{value:"8.5 Verse",id:"85-verse",level:2},{value:"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f",id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48",level:2},{value:"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f",id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48",level:2},{value:"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",level:2},{value:"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236",id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236",level:2},{value:"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf",id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf",level:2},{value:"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",level:2},{value:"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:3},{value:"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c",id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c",level:2},{value:"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",level:2},{value:"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:2},{value:"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",level:2},{value:"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",level:3},{value:"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",level:3}],p={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,n.kt)(u,(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\u6587\u6863\u8bf4\u660e"},"\u6587\u6863\u8bf4\u660e"),(0,n.kt)("p",null,"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u4f46\u6211\u4ecd\u7136\u628a\u8fd9\u4e9b\u5185\u5bb9\u653e\u5728\u8fd9\u91cc\uff0c\u662f\u56e0\u4e3a\u6211\u89c9\u5f97\u5b83\u5bf9\u4e8e\u60f3\u6df1\u5165\u5b66\u4e60Reality World\u80cc\u540e\u601d\u60f3\u7684\u670b\u53cb\u6709\u5b66\u4e60\u4ef7\u503c"),(0,n.kt)("p",null,"\u672c\u6587\u7684Markdown\u7edf\u8ba1\u5927\u6982\u670920\u4e07\u5b57\u3002"),(0,n.kt)("h1",{id:"1--introduction"},"1. Introduction"),(0,n.kt)("p",null,"\u6e38\u620f\uff0c\u4f5c\u4e3a\u4e00\u79cd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u5b9e\u65f6\u8fd0\u884c\u7684\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u5b83\u4e0d\u5149\u5728\u4ea7\u54c1\u5f62\u6001\u4e0a\u8ddf\u4e00\u822c\u7684\u5e94\u7528\u7a0b\u5e8f\u4f53\u9a8c\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4e00\u822c\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u662f\u529f\u80fd\u578b\u7684\uff0c\u5176\u529f\u80fd\u662f\u660e\u786e\u800c\u5177\u4f53\u7684\uff0c\u800c\u6e38\u620f\u5f80\u5f80\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u6ca1\u6709\u76f4\u89c2\u786e\u5b9a\u6027\u7684\u529f\u80fd\uff0c\u6bcf\u4e2a\u4eba\u83b7\u5f97\u7684\u4f53\u9a8c\u53ef\u80fd\u90fd\u4e0d\u4e00\u6837\uff0c\u5b83\u7684\u6574\u4e2a\u7a0b\u5e8f\u7ec4\u7ec7\u53ca\u5176\u5f00\u53d1\u5de5\u5177\u66f4\u662f\u4e0e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u662f\u6309\u987a\u5e8f\u6267\u884c\uff0c\u800c\u6e38\u620f\u4e3a\u4e86\u5b9e\u73b0\u5bf9\u771f\u5b9e\u5b9e\u65f6\u4e16\u754c\u7684\u6a21\u62df\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u4e0d\u95f4\u65ad\u7684\u5b9e\u65f6\u8f6e\u8be2\u7684\u673a\u5236\u3002\u8fd9\u79cd\u8f6e\u8be2\u4e0d\u5149\u9020\u5c31\u4e86\u6e38\u620f\u4e2d\u5404\u4e2a\u52a8\u6001\u7cfb\u7edf\u7684\u5b9e\u65f6\u6027\uff0c\u5b83\u5bf9\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u4ee5\u53ca\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\uff0c\u90fd\u63d0\u4f9b\u4e86\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u53ef\u80fd\u6027\u548c\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u673a\u5236\u4e3b\u8981\u88ab\u7528\u6765\u5236\u4f5c\u6e38\u620f\uff0c\u800c\u6e38\u620f\u8fd9\u79cd\u7a0b\u5e8f\u673a\u5236\u7684\u4e00\u4e9b\u96be\u70b9\uff0c\u901a\u5e38\u9700\u8981\u975e\u5e38\u4e13\u4e1a\u7684\u6e38\u620f\u516c\u53f8\u624d\u80fd\u505a\u51fa\u4e0d\u9519\u7684\u6e38\u620f\u4ea7\u54c1\u3002\u800c\u53cd\u89c2\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u7531\u4e8e\u5b83\u4eec\u7684\u673a\u5236\u66f4\u7b80\u5355\uff0c\u6613\u4e8e\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\uff0c\u4e0d\u4ec5\u5bf9\u4eba\u4eec\u7684\u751f\u6d3b\u5e26\u6765\u66f4\u5927\u7684\u5f71\u54cd\uff0c\u4e5f\u5927\u5927\u5730\u4fc3\u8fdb\u4e86\u793e\u4f1a\u8fdb\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd1\u5e74\u6765\uff0c\u968f\u7740\u865a\u62df\u73b0\u5b9e\u548c\u5143\u5b87\u5b99\u6982\u5ff5\u548c\u8d8b\u52bf\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7cfb\u7edf\u8d8a\u6765\u8d8a\u9891\u7e41\u88ab\u7528\u4e8e\u5230\u6e38\u620f\u4e4b\u5916\u66f4\u6cdb\u5316\u7684\u9886\u57df\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u624b\u673a\u7684AR\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Snapchat"),"\u7ed9\u7528\u6237\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u6ee4\u955c\u4f53\u9a8c\uff0c\u4e0d\u540c\u4e8e\u4f20\u7edf\u89c6\u9891\u548c\u56fe\u7247\uff0c\u8fd9\u4e9b\u6ee4\u955c\u662f\u4ea4\u4e92\u5f0f\u7684\uff0c\u7528\u6237\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u79cd\u4ea4\u4e92\u80fd\u529b\u751f\u6210\u8fd8\u5bcc\u6709\u8868\u8fbe\u80fd\u529b\u7684\u89c6\u9891\uff0c\u501f\u52a9\u8fd9\u79cd\u80fd\u529b\uff0cSnapchat\u8fc5\u901f\u79f0\u4e3a\u4e00\u6b3e\u6d41\u884c\u7684\u793e\u4ea4\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u6837\u662f\u57fa\u4e8e\u624b\u673aAR\u7684\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Niantic"),"\u501f\u52a9\u624b\u673a\u540e\u7f6e\u6444\u50cf\u5934\u7684\u89c6\u89c9\u5b9a\u4f4d\u80fd\u529b\uff08VPS\uff09\uff0c\u5f00\u53d1\u4e86\u8bf8\u5982Pokemon Go\u7b49\u5e94\u7528\uff0c\u8fd9\u79cd\u65b0\u7684\u57fa\u4e8e\u771f\u5b9e\u5730\u7406\u4f4d\u7f6e\u7684\u5e94\u7528\u8ddf\u4eba\u4eec\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\u7684\u6d3b\u52a8\u8054\u7cfb\u8d77\u6765\uff0c\u5e76\u501f\u52a93D\u4e92\u52a8\u7684\u80fd\u529b\uff0c\u628a\u4eba\u4eec\u7684\u751f\u6d3b\u8054\u7cfb\u5f97\u66f4\u7d27\u5bc6\uff0c\u662f\u4e00\u6b3e\u5178\u578b\u7528\u4e8e\u589e\u5f3a\u793e\u4ea4\u5173\u7cfb\u7684\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5",(0,n.kt)("strong",{parentName:"li"},"Roblox"),"\u4e3a\u9996\u7684\u521b\u4f5c\u7c7b\u5de5\u5177\uff0c\u901a\u8fc7\u7b80\u5316\u7a0b\u5e8f\u5206\u53d1\u548c\u90e8\u7f72\u3001\u63d0\u4f9b\u7edf\u4e00\u7684\u591a\u4eba\u5728\u7ebf\u7b49\u670d\u52a1\uff0c\u964d\u4f4e\u4e86\u6e38\u620f\u5f00\u53d1\u7684\u95e8\u69db\uff0c\u4f7f\u5f97\u66f4\u591a\u7684\u4e2d\u5c0f\u4e2a\u4eba\u521b\u4f5c\u4e92\u52a8\u5185\u5bb9\u66f4\u52a0\u7b80\u5355\u3002\u5e76\u901a\u8fc7\u4e91\u539f\u751f\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u4f7f\u793e\u4ea4\u6e38\u620f\u7684\u6548\u679c\u88ab\u653e\u5927\uff0c\u6210\u4e3a\u672a\u6765\u7684\u91cd\u8981\u8d8b\u52bf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u7c7bMinecraft\u6c99\u76d2\u673a\u5236\u5ef6\u4f38\u7684\u5927\u9003\u6740\u6c99\u76d2\u6e38\u620f",(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b"),"\uff0c\u501f\u52a9\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\uff0c\u4f8b\u5982\u5305\u62ec\u5bf9\u591a\u4eba\u5b9e\u65f6\u6e38\u620f\u66f4\u53cb\u597d\u7684\u5728\u7ebf\u8bed\u97f3\u670d\u52a1\u7b49\uff0c\u4f7f\u5f97\u793e\u4ea4\u5c5e\u6027\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u88ab\u8fdb\u4e00\u6b65\u52a0\u5f3a\u3002\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u4ee5\u53ca\u5821\u5792\u4e4b\u591c\u672c\u8eab\u9003\u751f\u7c7b\u6e38\u620f\u66f4\u597d\u5730\u534f\u540c\u673a\u5236\uff0c\u4f7f\u5f97\u5821\u5792\u4e4b\u591c\u7684\u793e\u4ea4\u5c5e\u6027\u79f0\u4e3a\u4f53\u9a8c\u6700\u597d\u7684\u793e\u4ea4\u5c5e\u6027\uff0c\u5176\u5f00\u521b\u548c\u4e3e\u529e\u7684\u865a\u62df\u6d3e\u5bf9Marshmello\u66f4\u662f\u6380\u8d77\u4e86\u865a\u62df\u6f14\u5531\u4f1a\u7684\u70ed\u6f6e\u3002")),(0,n.kt)("p",null,"\u6240\u6709\u8fd9\u4e9b\u53d8\u5316\u548c\u53d1\u5c55\uff0c\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53ca\u751f\u6001\u90fd\u5e26\u6765\u4e86\u5de8\u5927\u7684\u5f71\u54cd\u548c\u53d8\u5316\uff0c\u8fd9\u4e9b\u5f71\u54cd\u548c\u53d8\u5316\u540e\u9762\uff0c\u9700\u8981\u5168\u65b0\u7684\u6280\u672f\u8303\u5f0f\uff0c\u800c\u8fd9\u4e9b\u65b0\u7684\u6280\u672f\u8303\u5f0f\u53c8\u5c06\u521b\u9020\u589e\u91cf\u7684\u4ef7\u503c\u548c\u4f53\u9a8c\u3002"),(0,n.kt)("h2",{id:"11-\u53d8\u9769"},"1.1 \u53d8\u9769"),(0,n.kt)("h3",{id:"111-\u5f62\u6001\u53d8\u5316"},"1.1.1 \u5f62\u6001\u53d8\u5316"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e9b\u53d8\u5316\uff0c\u4ece\u4e0a\u5f80\u4e0b\u770b\uff0c\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e09\u4e2a\u7ef4\u5ea6\u7684\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005"),"\uff1a\u7531\u4e13\u4e1a\u5f00\u53d1\u8005\u5411\u666e\u901a\u7528\u6237\u8f6c\u79fb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u65b9\u5f0f"),"\uff1a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u65b9\u5f0f\u7531\u5b8c\u5168\u5f00\u53d1\u5230\u57fa\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u73a9\u5bb6\u4f53\u9a8c"),"\uff0c\u7531\u5b8c\u5168\u64cd\u63a7\u5230XR\u8f85\u52a9")),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u5de5\u5177\u65b9\u9762\uff0cRoblox\u548cSnapchat\u7684Lens Studio\u90fd\u9762\u5411\u666e\u901a\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u5171\u540c\u7684\u7279\u70b9\u5305\u62ec\u7b80\u5316\u7684\u811a\u672c\uff0c\u4ee5\u53ca\u4e00\u952e\u53d1\u5e03\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005 \u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u53bb\u5904\u7406\u5e73\u53f0\u76f8\u5173\u95ee\u9898\u3002\u53e6\u4e00\u65b9\u9762\u662f\u8fd9\u7c7b\u5de5\u5177\u90fd\u662f\u6df1\u5165\u96c6\u6210\u5e73\u53f0\u7684\u7279\u5b9a\u529f\u80fd\uff0c\u4f8b\u5982Lens Studio\u5e95\u5c42\u7684AR\u573a\u666f\u7406\u89e3\u7b97\u6cd5\uff0c\u4ee5\u53caRoblox\u5185\u7f6e\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u3002",(0,n.kt)("strong",{parentName:"p"},"\u6df1\u5ea6\u96c6\u6210\u5e73\u53f0\u4e0e\u7b97\u6cd5\uff0c\u76f8\u6bd4\u4e8e\u4f20\u7edf\u901a\u7528\u6e38\u620f\u5f15\u64ce\uff0c\u5c06\u6210\u4e3a\u672a\u6765\u7684\u4e00\u4e2a\u65b9\u5411\u548c\u4f18\u52bf"),"\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"roblox",src:l(3896).Z,width:"1002",height:"288"})),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u65b9\u5f0f\u65b9\u9762\uff0c\u4f20\u7edf\u7684\u6d41\u7a0b\u9700\u8981\u5f00\u53d1\u8005\u5b9a\u4e49\u6240\u6709\u7684\u903b\u8f91\uff0c\u5305\u62ec\u89e6\u53d1\u903b\u8f91\u7684\u673a\u5236\uff0c\u8fd9\u90e8\u5206\u5c24\u5176\u590d\u6742\u3002\u5728Snapchat\u57fa\u4e8eAR\u7684\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u4e2d\uff0c\u8fd9\u7c7b\u4e92\u52a8\u5185\u5bb9\u7684\u9a71\u52a8\u5b8c\u5168\u6765\u6e90\u4e8e\u624b\u673a\u5bf9\u573a\u666f\u7406\u89e3\uff0c\u8fd9\u4e9b\u90fd\u7531AR\u7b97\u6cd5\u6765\u63d0\u4f9b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5904\u7406\u4efb\u4f55\u4ea4\u4e92\u9a71\u52a8\u65b9\u9762\u7684\u903b\u8f91\uff0c\u800c\u53ea\u9700\u8981\u5173\u7cfb\u5bf9\u4ea4\u4e92\u7684\u54cd\u5e94\u903b\u8f91\u3002\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u4ec5\u5927\u5927\u7b80\u5316\u4e86\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\uff0c\u4e5f\u4ece\u6839\u672c\u4e0a\u5bf9\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u7684\u6d41\u7a0b\u5e26\u6765\u4e86\u5f88\u5927\u7684\u53d8\u9769\u3002",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u903b\u8f91\u5f00\u53d1\u7684\u89e6\u53d1\u673a\u5236\uff0c\u89e6\u53d1\u673a\u5236\u6570\u636e\u5316\uff0c\u6df1\u5ea6\u4e0e\u5e73\u53f0\u96c6\u6210\uff0c\u662f\u672a\u6765\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u8d70\u5411\u5e73\u6c11\u5316\u7684\u91cd\u8981\u65b9\u5f0f \u4e4b\u4e00"),"\u3002\u5f53\u7136\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u57fa\u4e8e\u4ee3\u7406\u7684\u7269\u4f53\u4f4d\u7f6e\u6446\u653e\u673a\u5236\u4e5f\u8d77\u5230\u4e86\u5f88\u5927\u7684\u8f85\u52a9\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u540c\u6837\u501f\u52a9\u4e0e\u4e8b\u4ef6\u89e6\u53d1\u673a\u5236\u7684\u6570\u636e\u5316\uff0c\u4ee5\u53ca\u57fa\u4e8eXR\u8bbe\u5907\u5bf9\u573a\u666f\u7684\u7406\u89e3\uff0c\u7528\u6237\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u90e8\u5206\u64cd\u4f5c\uff0c\u7531\u539f\u6765\u4e3b\u52a8\u3001\u7cbe\u7ec6\u5730\u63a7\u5236\u865a\u62df\u6444\u50cf\u673a\u548c\u7269\u4f53\uff0c\u53d8\u4e3a\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7b97\u6cd5\u7684\u81ea\u52a8\u9a71\u52a8\uff0c\u8fd9\u5927\u5927\u7b80\u5316\u4e86\u4ea4\u4e92\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5404\u4e2a\u5c42\u9762\u7684\u53d8\u5316\uff0c\u6700\u7ec8\u90fd\u4f1a\u5bfc\u81f4\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5236\u4f5c\u6d41\u7a0b\u4f1a\u53d1\u751f\u8f83\u5927\u7684\u53d8\u5316\u3002"),(0,n.kt)("h3",{id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"},"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"),(0,n.kt)("p",null,"\u4ece\u5f00\u53d1\u7684\u89d2\u5ea6\uff0c\u4ece\u4e0b\u5f80\u4e0a\u770b\uff0c\u8fd9\u5e26\u6765\u7684\u662f\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"change",src:l(326).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\u7684\uff0c\u4ece\u786c\u4ef6\u5230\u8f6f\u4ef6\uff0c\u6240\u6709\u4e00\u5207\u6d41\u7a0b\u548c\u529f\u80fd\u90fd\u662f\u9488\u5bf9\u8fd9\u4e2a\u6a21\u578b\u8bbe\u8ba1\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u7801\u90fd\u4f1a\u88ab\u7f16\u8bd1\u548c\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u53ef\u80fd\u76f8\u4e92\u5f15\u7528\uff0c\u6240\u6709\u9700\u8981\u94fe\u63a5\u5668\u6765\u91cd\u65b0\u5b9a\u4f4d\u6bcf\u4e2a\u5f15\u7528\u53d8\u91cf\u7684\u5730\u5740\u3002\u8fd9\u6837\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u975e\u5e38\u9002\u5408\u4e8e\u5904\u7406\u5177\u6709\u72ec\u7acb\u529f\u80fd\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u4f46\u5b83\u6709\u6bd4\u8f83\u81f4\u547d\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u56e0\u4e3a\u6240\u6709\u6e90\u4ee3\u7801\u7f16\u8bd1\u7684\u76ee\u6807\u4ee3\u7801\u90fd\u4f1a\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u6240\u4ee5\u5b83\u4eec\u4ece\u6839\u672c\u4e0a\u5c31\u4e0d\u652f\u6301\u5927\u89c4\u6a21\u5e94\u7528\u7a0b\u5e8f\uff0c\u56e0\u4e3a\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u53ef\u80fd\u7531\u6d77\u91cf\u7684\u6e90\u4ee3\u7801\u7ec4\u6210\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\uff0c\u56e0\u6b64\u5b83\u4eec\u5f88\u96be\u652f\u6301\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u72ec\u7acb\u5b50\u7a0b\u5e8f\u901a\u4fe1\uff0c\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u603b\u662f\u9700\u8981\u5f15\u7528\u6e90\u4ee3\u7801\u624d\u53ef\u4ee5\u901a\u4fe1\uff0c\u8fd9\u4f7f\u5f97\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u65e0\u6cd5\u6210\u4e3a\u4e00\u4e2a\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\u5f00\u653e\u7cfb\u7edf\uff0c\u800c\u603b\u662f\u9700\u8981\u4e00\u4e2a\u5f00\u53d1\u5546\u6765\u8fdb\u884c\u7ef4\u62a4")),(0,n.kt)("p",null,"\u968f\u7740UGC\u548c\u5143\u5b87\u5b99\u65f6\u4ee3\u7684\u5230\u6765\uff0c\u8fd9\u79cd\u5927\u89c4\u6a21\u7684\u3001\u5177\u6709\u5185\u751f\u5f00\u653e\u5b50\u7cfb\u7edf\u7684\u591a\u5e94\u7528\u4ea4\u4e92\u67b6\u6784\u8d8a\u6765\u8d8a\u6210\u4e3a\u6700\u6838\u5fc3\u7684\u9700\u6c42\uff0c\u8fd9\u9700\u8981\u6211\u4eec\u5728\u8ba1\u7b97\u67b6\u6784\u4e0a\u505a\u51fa\u8f83\u5927\u7684\u53d8\u9769\u3002"),(0,n.kt)("h4",{id:"1121-\u4e1a\u52a1\u6bd4\u55bb"},"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u817e\u8baf\u6709\u975e\u5e38\u6d77\u91cf\u7684\u4e1a\u52a1\uff0c\u6bd4\u5982\u5fae\u4fe1\uff0c\u97f3\u4e50\uff0c\u89c6\u9891\u7b49\uff0c\u76ee\u524d\u8fd9\u4e9b\u4e1a\u52a1\u4e4b\u95f4\u76f8\u4e92\u662f\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u4ed6\u4eec\u7ec4\u7ec7\u4e3a\u76f8\u4e92\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u76f8\u4e92\u6bd4\u8f83\u72ec\u7acb\u7684\u6570\u636e\u7ba1\u7406\uff0c\u670d\u52a1\u5668\u67b6\u6784\u548c\u7ec4\u7ec7\uff0c\u867d\u7136\u5f7c\u6b64\u4e4b\u95f4\u5b58\u5728\u4e00\u5b9a\u5173\u8054\uff0c\u4f46\u662f\u8fd9\u79cd\u5173\u8054\u662f\u9ad8\u5ea6\u7ed3\u6784\u5316\u548c\u89c4\u5219\u5316\u7684\uff0c\u4e14\u5173\u8054\u5f88\u5c11\u3002"),(0,n.kt)("p",null,"\u5f00\u653e\u4e16\u754c\u5219\u610f\u5473\u7740\uff0c\u73b0\u5728\u6240\u6709\u8fd9\u4e9b\u4e1a\u52a1\u9700\u8981\u5728\u4e00\u4e2a\u5e94\u7528\u5185\u7ec4\u7ec7\uff0c\u5b83\u7684\u590d\u6742\u5ea6\u662f\u975e\u5e38\u9ad8\u7684\uff0c\u67b6\u6784\u4e5f\u975e\u5e38\u590d\u6742\uff0c\u6570\u636e\u7ba1\u7406\u548c\u5206\u5e03\u5f0f\u8ba1\u7b97\u90fd\u975e\u5e38\u590d\u6742\uff0c\u5e76\u4e14\u7531\u4e8e\u4f20\u7edf\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u5728\u8fd9\u79cd\u4f53\u91cf\u4e0b\u6839\u672c\u65e0\u6cd5\u6709\u6548\u7ba1\u7406\u7ec4\u7ec7\u548c\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97"),(0,n.kt)("p",null,"\u53ef\u884c\u7684\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5fae\u670d\u52a1\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u5f0f\u7f16\u7a0b")),(0,n.kt)("p",null,"\u5fae\u670d\u52a1\u5316\u662f\u4e00\u79cd\u8f6f\u4ef6\u67b6\u6784\uff0c\u9700\u8981\u9ad8\u5ea6\u4f9d\u8d56\u4e8e\u5bf9\u903b\u8f91\u7684\u8bbe\u8ba1\u548c\u5212\u5206\uff0c\u4ed6\u4e0d\u662f\u4e00\u79cd\u57fa\u7840\u7f16\u7a0b\u6a21\u578b\uff0c\u56e0\u6b64\u65e0\u6cd5\u652f\u6491\u5f00\u653e\u5f0f\u7684\u8bbe\u8ba1\uff0c\u8fd9\u4e9b\u5fae\u670d\u52a1\u901a\u5e38\u90fd\u53ea\u80fd\u662f\u5f00\u53d1\u5546\u8bbe\u8ba1\u597d\u7684\uff0c\u666e\u901a\u7528\u6237\u6ca1\u6cd5\u4fee\u6539\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\u4e0d\u652f\u6301\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("h3",{id:"113-\u6280\u672f\u6311\u6218"},"1.1.3 \u6280\u672f\u6311\u6218"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\uff0c\u4e0a\u8ff0\u7684\u4e00\u4e9b\u53d8\u9769\u5e26\u6765\u7684\u6280\u672f\u6311\u6218\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5168\u65b0\u652f\u6301\u591a\u5e94\u7528\u76f8\u4e92\u901a\u4fe1\u7684\u8ba1\u7b97\u67b6\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u80fd\u591f\u5728\u6240\u6709\u8ba1\u7b97\u8f7b\u677e\u5728\u591a\u4e2a\u670d\u52a1\u5668\u4e4b\u95f4\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97\u7684\u6570\u636e\u548c\u8ba1\u7b97\u67b6\u6784")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u8fd9\u4e24\u4e2a\u5e95\u5c42\u6839\u672c\u6027\u7684\u6311\u6218\uff0c\u4e0a\u5c42\u8fd8\u5305\u62ec\u4e00\u4e9b\u5176\u4ed6\u6311\u6218\uff0c\u6bd4\u5982\u72ec\u7acb\u7a0b\u5e8f\u4e4b\u95f4\u9ad8\u6548\u7684\u901a\u4fe1\u6807\u51c6\u6216\u8005\u673a\u5236\uff0c\u7528\u6237\u5bf9\u6743\u9650\u63a7\u5236\u4e0e\u4ee3\u7801\u7684\u5206\u79bb\uff0c\u666e\u901a\u7528\u6237\u600e\u6837\u65e0\u4ee3\u7801\u7f16\u7a0b\u7b49\u7b49\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u8fdb\u4e00\u6b65\u5206\u6790\u3002"),(0,n.kt)("h2",{id:"12-\u73b0\u72b6"},"1.2 \u73b0\u72b6"),(0,n.kt)("p",null,"\u4e0d\u80fd\u968f\u65f6\u968f\u5730\u9ad8\u6548\u7684\u5185\u5bb9\u521b\u5efa\uff0c\u4e0e\u968f\u65f6\u968f\u5730\u65b9\u4fbf\u7684\u5c06\u521b\u5efa\u7684\u5185\u5bb9\u8fdb\u884c\u793e\u4ea4\u5206\u4eab\uff0c\u662f\u5f53\u524d\u6700\u5927\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u662f3D\u6570\u5b57\u4e16\u754c\u53d1\u5c55\u7684\u4e00\u4e9b\u91cd\u8981\u57fa\u7840\uff1b\u524d\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u7f16\u7a0b\uff08\u901a\u5e38\u9700\u8981\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u80fd\u529b\uff09\uff0c\u6240\u6709\u903b\u8f91\u90fd\u662f\u901a\u8fc7\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u5f0f\u521b\u5efa\u51fa\u6765\u7684\uff08\u5927\u90e8\u5206\u4eba\u90fd\u4e0d\u5177\u5907\uff09\uff1b\u800c\u540e\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u4e00\u5957\u65b0\u7684\u652f\u6301\u5206\u5e03\u5f0f\u534f\u540c\u7f16\u8f91\u548c\u5206\u53d1\u7684\u5e95\u5c42\u6570\u636e\u683c\u5f0f\u8868\u8ff0\uff0c\u8fd9\u4e0e\u5f53\u524d\u5927\u90e8\u5206\u5f15\u64ce\u79c1\u6709\u683c\u5f0f\u90fd\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,"1\u3001\u4e3b\u8981\u57fa\u4e8e\u573a\u666f\u7406\u89e3"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206AR\u5e94\u7528\u90fd\u662f\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7684\u7b80\u5355\u7279\u6548/\u6ee4\u955c\u5448\u73b0\uff0c\u4ee5\u53ca\u56f4\u7ed5\u8fd9\u4e9b\u6ee4\u955c\u975e\u5e38\u7b80\u5355\u7684\u4ea4\u4e92\uff0c\u6ca1\u6709\u56f4\u7ed5\u573a\u666f\u6784\u5efa\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u5373\u5821\u5792\u4e4b\u591c\u7684\u65b9\u5f0f\uff0c\u5305\u62ec\u66f4\u590d\u6742\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"2\u30013D\u5185\u5bb9\u5206\u53d1"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206\u4e0d\u80fd\u5206\u53d13D\u5185\u5bb9\u672c\u8eab\uff0c\u800c\u662f\u5206\u4eab\u5f55\u5236\u7684\u89c6\u9891\uff1b\u6216\u8005\u53ea\u662f\u5206\u4eab\u76f8\u540c\u7684\u6ee4\u955c\u7ed9\u670b\u53cb\uff0c\u4f7f\u7528\u4f53\u9a8c\u6ca1\u6709\u5dee\u5f02\u6027"),(0,n.kt)("p",null,"3\u3001\u7528\u6237\u521b\u5efa\u53c2\u4e0e\u611f\u5f88\u5f31"),(0,n.kt)("p",null,"\u7edd\u5927\u90e8\u5206\u90fd\u662f\u573a\u666f\u7406\u89e3\u9a71\u52a8\uff0c\u4ec5\u6709\u7eaf\u89c6\u89c9\u7684\u4f53\u9a8c\uff0c\u6ca1\u67093D\u771f\u6b63\u590d\u6742\u7684\u4ea4\u4e92\u548c\u521b\u5efa\u4f53\u9a8c"),(0,n.kt)("p",null,"4\u3001\u5927\u90e8\u5206\u805a\u7126\u865a\u62df\u7a7a\u95f4"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u5373\u793e\u4ea4\u65b9\u5411\u884c\u4e1a\u5927\u90e8\u5206\u5728\u505a\u865a\u62df\u7a7a\u95f4\uff1a\u5143\u8c61\u3001RecRoom\u3001monoAI\u7b49"),(0,n.kt)("p",null,"5\u30013D\u521b\u5efa\u7684\u4ef7\u503c/Minecraft "),(0,n.kt)("p",null,"\u9664\u4e86\u7cbe\u5fc3\u7684\u6e38\u620f\u89c4\u5219\u8bbe\u8ba1\uff08\u8fd9\u9700\u8981\u5f88\u9ad8\u7684\u5f00\u53d1\u6280\u5de7\u548c\u80fd\u529b\uff09\uff0c3D\u5185\u5bb9\u7684\u521b\u5efa\u672c\u8eab\u4e5f\u662f\u5f88\u6709\u4e50\u8da3\u7684\uff0c\u800c\u80fd\u591f\u521b\u5efa\u81ea\u5df1\u8bbe\u8ba1\u7684\u4e00\u5b9a\u89c4\u5219\u7684\u5185\u5bb9\u5c31\u66f4\u6709\u8da3"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u6ca1\u6709\u96c6\u4e2d\u4e8e\u9762\u5411\u666e\u901a\u7528\u6237\u521b\u5efa3D\u5185\u5bb9\u7684\u80fd\u529b\u6216\u4f53\u9a8c\uff0cRoblox \u9762\u5411\u6709\u4e00\u5b9a\u7ecf\u9a8c\u7684\u5f00\u53d1\u8005\uff0c\u5e76\u4e14\u5f00\u53d1\u6a21\u5f0f\u672c\u8d28\u4e0a\u4e0e\u4f20\u7edf\u6e38\u620f\u5f00\u53d1\u7c7b\u4f3c\uff0c\u53ea\u662f\u5206\u53d1\u673a\u5236\u4e0d\u4e00\u6837\uff0cNV\u548c\u592a\u6781\u9762\u5411\u7528\u6237\u521b\u4f5c\uff0c\u4f46\u662f\u6ca1\u6709\u9762\u5411\u79fb\u52a8\u7aef\uff0c\u800c\u4e14\u662f\u7eaf\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"6\u3001\u5e95\u5c42\u521b\u65b0"),(0,n.kt)("p",null,"\u5f53\u524d\u666e\u904d\u805a\u7126\u4e0a\u5c42\u67b6\u6784\uff0c\u56f4\u7ed5\u600e\u6837\u5c06\u4f20\u7edf\u6e38\u620f\u7684\u6d41\u7a0b\u548c\u4f53\u9a8c\u5f80\u5143\u5b87\u5b99\u4e0a\u9760\uff0c\u5176\u7ed3\u679c\u5927\u591a\u6570\u865a\u62df\u7a7a\u95f4\u7c7b\u4ea7\u54c1\uff0c\u805a\u7126\u5e95\u5c42\u534f\u4f5c\u7684\u4e3b\u8981\u662fOmniverse\u548c\u592a\u6781\uff0c\u5176\u4e2d\u6df1\u5165\u5e95\u5c42\u6027\u80fd\u7684\u53ea\u6709\u592a\u6781\uff0c\u4f46\u5728\u4e2d\u95f4\u5c42\u4e0a\u4e0b\u534f\u540c\u65b9\u9762\u7f3a\u4e4f\u91cd\u70b9\u521b\u65b0\uff0c\u5176\u4e2d\u592a\u6781\u548c\u5143\u8c61\u90fd\u5728\u4e3b\u6253\u4e91\u6e32\u67d3\uff0c\u592a\u6781\u8fd8\u5f3a\u8c03\u5728\u7ebf\u534f\u540c\u7f16\u8f91\uff0cOmniverse\u5219\u652f\u6301\u4e00\u822c\u7684\u534f\u540c\u7f16\u8f91"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u7a7a\u95f4\u4e5f\u4e3b\u8981\u662f\u7eaf\u89c6\u89c9\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u53ea\u662f\u5728\u91cc\u9762\u884c\u8d70\uff0c\u4e0d\u80fd\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u66f4\u4e0d\u80fd\u521b\u4f5c\uff0c\u6216\u8005\u6709\u7684\u4e5f\u662f\u56fa\u5b9a\u89c4\u5219\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982Roblox \u91cc\u9762\u7684\u4e00\u4e9b\u6a21\u62df\u7ecf\u9a8c\u7684\u6e38\u620f"),(0,n.kt)("p",null,"8\u3001\u6e38\u620f\u66f4\u65b0\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u4e00\u822c\u9700\u8981\u91cd\u65b0\u53d1\u5e03\u7684\u6d41\u7a0b\uff0cUbisoft Scalar\u8bd5\u56fe\u901a\u8fc7\u4e91\u7aef\u5fae\u670d\u52a1\u67b6\u6784\u5b9e\u73b0\u53ca\u65f6\u66f4\u65b0\uff0c\u53e6\u5916\u4e91\u539f\u751f\u57fa\u672c\u4e0a\u5929\u751f\u5c31\u662f\u53ca\u65f6\u66f4\u65b0\u7684\uff0c\u56e0\u4e3a\u5b83\u7684\u8d44\u6e90\u90fd\u5728\u4e91\u7aef"),(0,n.kt)("h2",{id:"13-\u6280\u672f\u4f18\u52bf"},"1.3 \u6280\u672f\u4f18\u52bf"),(0,n.kt)("h3",{id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"},"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"\u73b0\u5728\u5927\u90e8\u5206\u5e94\u7528\u90fd\u662f\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7279\u5b9a\u573a\u666f\uff0c\u63d0\u4f9b\u5b98\u65b9\u7279\u5b9a\u7684\u5e94\u7528\u3001\u89c4\u5219\u6216\u73a9\u6cd5\uff0c\u8ddf\u6e38\u620f\u7684\u601d\u8def\u7c7b\u4f3c\uff0c\u66f4\u5f3a\u8c03\u7528\u6237\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u9664\u4e86\u6e38\u620f\u5f15\u64ce\uff0c\u80fd\u8ba9\u7528\u6237\u521b\u4f5c\u7684\u53ea\u6709Roblox \u53ea\u7c7b\u578b\u7684"),(0,n.kt)("p",null,"\u80fd\u591f\u9762\u5411\u666e\u901a\u7528\u6237\uff0c\u4e14\u9488\u5bf9\u4ea4\u4e92\u5185\u5bb9\u8fdb\u884c\u521b\u4f5c\u7684\uff0c\u53ea\u6709\u4e00\u5bb6\uff0c\u5b83\u662f\u672a\u6765\u6700\u57fa\u7840\u7684\u6a21\u5f0f\u548c\u80fd\u529b\uff0c\u5f53\u524d\u6ca1\u6709\u4e00\u5bb6\u5728\u8fd9\u4e2a\u5c42\u9762\uff0c\u72ec\u6b64\u4e00\u5bb6"),(0,n.kt)("p",null,"\u7528\u6237\u53ef\u4ee5\u57fa\u4e8eRealityWorld \u521b\u4f5c\u6e38\u620f\uff0c\u6216\u8005\u7b80\u5355\u7684\u4f5c\u54c1\uff0c\u8ddfRoblox \u4e00\u6837\uff0c\u4f46\u662f\u5b83\u901a\u8fc7\u4e24\u4e2a\u95e8\u69db\u4ee5\u53ca\u4e30\u5bcc\u521b\u4f5c\u7684\u7c7b\u522b\uff0c\u8ba9\u66f4\u591a\u666e\u901a\u7528\u6237\u53ef\u4ee5\u53c2\u4e0e\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u7528\u6237\u7fa4\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u5728\u8fd9\u4e2a\u5e73\u53f0\u4e0a\u5f00\u53d1\u6e38\u620f\u6709\u53ef\u80fd\u5177\u6709\u66f4\u5927\u7684\u7528\u6237\u7fa4"),(0,n.kt)("h3",{id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236"},"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"CreationXR runtime\uff0c"),"\u53ef\u4ee5\u88ab\u4efb\u610f\u7b2c\u4e09\u65b9app\u96c6\u6210"),(0,n.kt)("p",null,"\u4ed6\u98a0\u8986\u4e86\u4f20\u7edf\u5f00\u53d1\u8005\u751f\u6001\u7684\u65b9\u5f0f\uff0c\u4f20\u7edf\u7684\u5c0f\u7a0b\u5e8f\u6216\u8005Roblox \u6216\u8005Snapchat \u53ea\u80fd\u96c6\u4e2d\u5f0f\uff0c\u53ea\u6709\u5e73\u53f0\u4e00\u4e2a\u5165\u53e3\uff0c\u800c\u50cfNiantic \u8fd9\u79cd\u4ec5\u5f00\u653e\u5e95\u5c42\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u63a5\u5165\u5b9e\u9645\u5f88\u56f0\u96be\uff0c\u56e0\u4e3a\u8981\u8c03\u7528\u4f17\u591a\u7684API"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u5b58\u5728\u5197\u4f59\uff0c\u91cd\u590d\uff0c\u8fd9\u90e8\u5206\u53ef\u4ee5\u5171\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64\u6bcf\u4e2aapp\u5f00\u53d1\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u7c7b\u4f3c\uff0c\u4f46\u662f3D\u90e8\u4efd\u5374\u8981\u91cd\u590d\u5f00\u53d1\uff0c\u4f8b\u5982\u8981\u63a5\u5165\u9884\u89c8\u6d41\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5728\u81ea\u5df1\u7684app\u91cc\u9762\u5171\u4eab\u4e00\u5957\u5f00\u53d1\u6807\u51c6\uff0cUnity\u4e0d\u7b97\u6807\u51c6\uff0c\u56e0\u4e3a\u4ed6\u66f4\u504f\u4f4e\u5c42\uff0c\u6ca1\u6709\u5b9a\u4e49\u592a\u591a\u89c4\u8303\uff0c\u5bfc\u81f4\u6bcf\u4e2a\u4eba\u5f00\u53d1\u4e0d\u4e00\u6837\uff0c\u800cRealityCreate \u662f\u9ad8\u5ea6\u89c4\u8303\u5316\u7684")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u53ef\u4ee5\u5171\u4eabRealityCreate \u9ad8\u5ea6\u89c4\u8303\u5316\u7684\u6d41\u7a0b\uff0c\u53c8\u53ef\u4ee5\u6700\u7b80\u5355\u7684\u6210\u672c\u548c\u65b9\u5f0f\u63a5\u5165\u81ea\u5df1app\uff0c\u4ece\u800c\u662f\u5f00\u53d1\u8005\u805a\u7126\u521b\u4f5c\u672c\u8eab\uff0c\u540c\u65f6\u80fd\u4eab\u53d7\u4e91\u539f\u751f\uff0c\u7528\u6237\u534f\u4f5c\u7b49\u7b49\u6240\u6709Creation XR\u5f97\u597d\u5904"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e5f\u53ef\u4ee5\u907f\u514din-house \u5f15\u64ce\u7684\u95ee\u9898\uff0cin-house \u5f15\u64ce\u4e3b\u8981\u7684\u95ee\u9898\u662f\u4e0d\u80fd\u88ab\u5176\u4ed6app\u7b80\u5355\u4f7f\u7528\uff0c\u6709\u56fa\u5b9a\u7684\u6d41\u7a0b\uff0c\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u6309\u7167in-house \u7684\u505a\u6cd5\u5feb\u901f\u63d0\u5347\u81ea\u5df1\u7684\u5dee\u5f02\u6027\uff0c\u800c\u907f\u514d\u9677\u5165Unreal\u548cUnity \u90a3\u6837\u7684\u901a\u7528\u5f15\u64ce"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u80fd\u50cfUnity\u4e00\u6837\u88ab\u7528\u4e8e\u5f00\u53d1\u72ec\u7acb\u5e94\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u6293\u4f4f\u4e86\u751f\u6001")),(0,n.kt)("p",null,"\u8fd9\u79cd\u6a21\u5f0f\u8fd8\u6709\u4e00\u4e2a\u597d\u5904\uff0c\u9664\u4e86\u5e94\u7528\u90e8\u7f72\u672c\u8eab\uff0c\u4ed6\u8fd8\u63d0\u4f9b\u5982\u5e94\u7528\u7684\u7edf\u8ba1\u5206\u6790\u7b49\u529f\u80fd\uff0c\u5e94\u7528\u7684\u5b58\u50a8\uff0c\u8fd9\u4e9b\u539f\u672c\u90fd\u662f\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u5bf9\u63a5\u7684\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u770b\u6709\u591a\u4e48\u590d\u6742\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u81ea\u5df1\u81ea\u5df1Unity\u5f00\u53d1app\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u62ec\u5927\u91cf\u7684\u7f8e\u672f\u8d44\u6e90\u548c\u903b\u8f91\u5f00\u53d1\u662f\u6bcf\u4e2a\u6e38\u620f\u5f00\u53d1\u8005\u6bd4\u8f83\u91cd\u590d\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u6253\u5305\u90e8\u7f72\uff0c\u8fd9\u8981\u6c42\u4e00\u4e9b\u5e73\u53f0\u5c42\u7684\u6280\u5de7\u548c\u7ecf\u9a8c\uff0c\u8fd9\u4e9b\u5176\u5b9e\u8d85\u51fa\u4e86\u5f00\u53d1\u8005\u5bf9\u5185\u5bb9\u7684\u805a\u7126\uff0c\u9664\u4e86\u5185\u5bb9\u548c\u73a9\u6cd5\uff0c\u4e00\u4e2a\u6e38\u620f\u521b\u4e1a\u516c\u53f8\u8fd8\u9700\u8981\u82b1\u5f88\u591a\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd8\u9700\u8981\u5bf9\u63a5\u5404\u79cdSDK\uff0c\u5305\u62ec\u7aef\u4fa7\u7684\u548c\u4e91\u4fa7\u7684\uff0c\u800c\u5404\u79cdSDK\u90fd\u8981\u516c\u53f8\u81ea\u5df1\u5b66\u4e60\uff0c\u5e76\u4e14\u4e0d\u540c\u516c\u53f8\u4e4b\u95f4\u8fd9\u4e9b\u5de5\u4f5c\u4e5f\u662f\u91cd\u590d\u7684\uff0c\u4f46\u662f\u6bcf\u4e2a\u516c\u53f8\u90fd\u7684\u62db\u4eba\u53bb\u6316\u5751\uff0c\u6709\u65f6\u5019\u8fd9\u4e9b\u53cd\u800c\u6210\u4e3a\u4e00\u4e9b\u5c0f\u56e2\u961f\u6bd4\u8f83\u963b\u788d\u53d1\u5e03\u7684\u4e00\u4e9b\u969c\u788d"),(0,n.kt)("li",{parentName:"ul"},"\u540e\u671f\u7684\u8fd0\u7ef4\u4e5f\u9700\u8981\u4e00\u4e9b\u7cbe\u529b\u548c\u4eba\u529b\u4e5f\u81ea\u5df1\u5f00\u53d1\u7ecf\u9a8c\u7684\u6295\u5165")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u6e38\u620f\u5f00\u53d1\u56e2\u961f\u82b1\u4e86\u8f83\u591a\u7684\u7cbe\u529b\u5728\u4e00\u4e9b\u7e41\u7410\u7684\u4e8b\u60c5\u4e0a\uff0c\u800c\u4e14\u516c\u53f8\u4e4b\u95f4\u7684\u8fd9\u4e9b\u80fd\u529b\u672c\u53ef\u4ee5\u5171\u4eab\u7684\uff0c\u5f00\u53d1\u8005\u672c\u5e94\u8be5\u805a\u7126\u5185\u5bb9\u5f00\u53d1"),(0,n.kt)("p",null,"\u539f\u56e0\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u8981\u81ea\u5df1\u53d1\u5e03app\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u53bb\u7edf\u4e00\u96c6\u6210\u4e00\u4e9b\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u672c\u8eab\u6ca1\u6709\u6807\u51c6\uff0c\u5f88\u96be\u7edf\u4e00"),(0,n.kt)("p",null,"\u5f53\u7136\u5927\u7684\u5e94\u7528\u672c\u8eab\u9700\u8981\u66f4\u7075\u6d3b\u7684\u80fd\u529b\uff0c\u6709\u592a\u591a\u9650\u5236\u53cd\u800c\u4e0d\u5229\u4e8e\u5f00\u53d1\uff0c\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u5c0f\u5185\u5bb9\uff0c\u5c24\u5176\u662f\u4e2a\u4eba\u5185\u5bb9\uff0c\u8fd9\u662f\u53ef\u884c\u7684\uff0c\u800c\u4e14\u4e2a\u4eba\u5f00\u53d1\u8005\u9700\u8981\u8fd9\u6837\u7684\u751f\u6001"),(0,n.kt)("p",null,"Roblox \u5c31\u662f\u505a\u4e86\u8fd9\u4e9b\u4e8b\u60c5\uff0c\u5e94\u7528\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u62c5\u5fc3\u5176\u4ed6\u4e8b\u60c5\uff0c\u4f46\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301Roblox\u4e4b\u5916\u7684\u5206\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301\u94fe\u63a5\u7684\u65b9\u5f0f\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u8981\u9762\u5411PC\u548c\u624b\u673a\uff0c\u6ca1\u6709\u9488\u5bf9XR\u7684\u7b97\u6cd5\u5c42\u63a5\u53e3\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837\u6240\u4ee5\u4e0d\u53ef\u80fd\u652f\u6301XR\u8bbe\u5907\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u5178\u578b\u7684\u4e13\u4e1a\u5f00\u53d1+\u666e\u901a\u7528\u6237\u73a9\u7684\u6a21\u5f0f\uff0c\u6ca1\u6709\u666e\u901a\u7528\u6237\u7684\u521b\u5efa\u6a21\u5f0f\u548c\u521b\u9020\u4f53\u9a8c")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee5\u6b64\u4e3a\u57fa\u7840\uff0c\u6784\u5efa\u5fae\u670d\u52a1\u67b6\u6784")),(0,n.kt)("p",null,"\u7f8e\u672f\u8d44\u6e90\u7684\u91cd\u590d\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f20\u7edf\u4e92\u52a8\u5185\u5bb9\u6700\u91cd\u8981\u7684\u662f\u73a9\u6cd5\u3001\u6545\u4e8b\uff0c\u7f8e\u672f\u76f8\u5bf9\u4e0d\u662f\u6700\u6838\u5fc3\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u8d44\u6e90\u80fd\u591f\u63d0\u4f9b\u72ec\u7279\u7684\u89c6\u89c9\u8bed\u8a00\uff0c\u4f46\u662f\u8fd9\u4e9b\u89c6\u89c9\u8bed\u8a00\u66f4\u591a\u662f\u98ce\u683c\u5316\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\u5728\u540c\u4e00\u79cd\u5199\u5b9e\u98ce\u683c\u7c7b\u578b\u4e0b\uff0c\u73a9\u5bb6\u5bf9\u4e0d\u540c\u7684\u573a\u666f\u611f\u77e5\u7684\u5dee\u5f02\u5c31\u4f1a\u5c0f\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u573a\u666f\u901a\u8fc7\u7a0b\u5e8f\u5316\u751f\u6210\u65b9\u6cd5\u662f\u80fd\u63d0\u4f9b\u8f83\u597d\u7684\u5dee\u5f02\u6027\u548c\u72ec\u7279\u6027\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u79cd\u7a0b\u5e8f\u5316\u65b9\u6cd5\u66f4\u52a0\u652f\u6301\u98ce\u683c\u5316\uff0c\u90a3\u4e48\u5c31\u80fd\u6ee1\u8db3\u4e0a\u8ff0\u7684\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u98ce\u683c\u5316\u4e3b\u8981\u8868\u73b0\u4e3a\u7eb9\u7406\u6216\u8005\u57fa\u7840\u6750\u8d28\uff0c\u6709\u65f6\u7f51\u683c\u4e5f\u6709\u4e00\u5b9a\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u90fd\u53ef\u4ee5\u8fdb\u884c\u7814\u7a76")),(0,n.kt)("h3",{id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017"},"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017"),(0,n.kt)("p",null,"\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u57fa\u4e8eOOP\u8fdb\u884c\u5f00\u53d1\uff0c\u5176\u4e2d\u7684\u5f15\u7528\u5173\u7cfb\u9519\u7efc\u590d\u6742\uff0c\u5bf9\u73b0\u4ee3\u5185\u5b58\u786c\u4ef6\u67b6\u6784\u6781\u5ea6\u4e0d\u53cb\u597d\uff0c\u9700\u8981\u91cd\u65b0\u5bf9\u6e38\u620f\u7684\u8fd0\u884c\u65f6\u5185\u5b58\u6570\u636e\u8fdb\u884c\u66f4\u597d\u7684\u7ba1\u7406\uff0c\u5e76\u4e14\u8fd9\u4e9b\u7ba1\u7406\u53c8\u4e0d\u80fd\u7ed9\u5f00\u53d1\u8005\u5e26\u6765\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.1\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f"},"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u76f8\u4f3c\u7684\u539f\u56e0\uff0c\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u65e0\u6cd5\u4f7f\u7528\u5927\u89c4\u6a21\u5e76\u53d1\u7684\u9700\u6c42\uff0c\u4f8b\u5982\u5355\u53f0\u670d\u52a1\u5668\u6700\u591a\u53ea\u80fd\u652f\u6301\u4e0a\u767e\u4eba\u540c\u65f6\u5728\u7ebf\u3002\u8fd9\u4e3b\u8981\u662f\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u7a0b\u5e8f\u548c\u6570\u636e\u8026\u5408\u5ea6\u975e\u5e38\u9ad8\uff0c\u5bfc\u81f4\u5355\u53f0\u670d\u52a1\u5668\u5fc5\u987b\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u7ba1\u5355\u53f0\u670d\u52a1\u5668\u7684\u5185\u5b58\u4e0d\u591f\uff0c\u4e5f\u4f1a\u5e26\u6765\u591a\u53f0\u670d\u52a1\u5668\u91cd\u590d\u52a0\u8f7d\uff0c\u4ee5\u53ca\u91cd\u590d\u52a0\u8f7d\u5bfc\u81f4\u7684\u6570\u636e\u540c\u6b65\u5bfc\u81f4\u7684\u590d\u6742\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.2.13\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"},"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u4f20\u7edf\u7684\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u6240\u6709\u7684\u903b\u8f91\u90fd\u662f\u5305\u542b\u5728\u7a0b\u5e8f\u4e2d\u4e0d\u53ef\u4fee\u6539\uff0c\u6240\u6709\u7684\u5173\u5361\u3001\u5267\u60c5\u7b49\u7b49\u90fd\u662f\u56fa\u5b9a\u7684\uff0c\u8ddf\u7535\u5f71\u6bd4\u8f83\u7c7b\u4f3c\uff0c\u552f\u4e00\u4e0d\u540c\u7684\u53ef\u80fd\u662f\u6e38\u620f\u5177\u6709\u4ea4\u4e92\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u66f4\u65b0\u7a0b\u5e8f\u65f6\uff0c\u901a\u5e38\u901a\u8fc7DLC\u6216Mod\u7b49\u673a\u5236\u5bf9\u6e38\u620f\u8fdb\u884c\u6269\u5c55\u6216\u589e\u5f3a\uff0c\u4f46\u662f\u8fd9\u4e24\u79cd\u673a\u5236\u901a\u5e38\u90fd\u6bd4\u8f83\u53d7\u9650\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\uff0c\u81f3\u5c11\u4e00\u4e2a\u5df2\u7ecf\u53d1\u5e03\u7684\u6e38\u620f\u5176\u6838\u5fc3\u4f53\u9a8c\u662f\u5f88\u96be\u6539\u53d8\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u5f00\u653e\u7684Metaverse\u4e0d\u4ec5\u9700\u8981\u53ef\u4ee5\u4efb\u610f\u6dfb\u52a0\u72ec\u7acb\u7a0b\u5e8f\u7684\u80fd\u529b\uff0c\u8fd8\u9700\u8981\u80fd\u591f\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u81ea\u52a8\u7b5b\u9009\u4f18\u79c0\u5185\u5bb9\u7684\u80fd\u529b\uff0c\u5426\u5219\u7528\u6237\u53ef\u80fd\u5f88\u5feb\u5c31\u6c89\u5165\u5f88\u591a\u5783\u573e\u6216\u8005\u8d28\u91cf\u8f83\u4f4e\u7684\u4fe1\u606f\u5f53\u4e2d\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u8fd9\u79cd\u5185\u5bb9\u90fd\u662f\u9700\u8981\u5e73\u53f0\u4f7f\u7528\u4e00\u5b9a\u7684\u7b97\u6cd5\u8fdb\u884c\u63a8\u8350\uff0c\u8fd9\u79cd\u63a8\u8350\u7b97\u6cd5\u4e00\u822c\u7531\u7528\u6237\u5bf9\u81ea\u5df1\u7684\u5185\u5bb9\u8bbe\u7f6e\u4e00\u4e9b\u6807\u7b7e\uff0c\u7136\u540e\u5e73\u53f0\u5efa\u7acb\u4e00\u4e9b\u76f8\u5173\u5ea6\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u771f\u5b9e\u4e16\u754c\u5374\u662f\u76f8\u53cd\u7684\uff0c\u5b83\u4eec\u7531\u6bcf\u4e2a\u6839\u636e\u81ea\u5df1\u7684\u5224\u65ad\u548c\u9009\u62e9\uff0c\u6765\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fdb\u5316\u3002\u53c2\u89c14.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"14-\u5546\u4e1a\u6a21\u5f0f"},"1.4 \u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("h3",{id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"},"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5728\u7ebf\u4e92\u52a8\u6709\u4e09\u79cd\u5f62\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89c6\u9891\u7535\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u5728\u7ebf\u6e38\u620f\uff0c\u5982\u300a\u523a\u6fc0\u6218\u573a\u300b"),(0,n.kt)("li",{parentName:"ul"},"\u300aRoblox\u300b\u7c7b\u7684\u865a\u62df\u623f\u95f4")),(0,n.kt)("p",null,"\u5176\u4e2d\u6e38\u620f\u7c7b\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u8fd8\u662f\u4ee5\u6e38\u620f\u4e3a\u4e3b\uff0c\u8fd9\u4e9b\u4ea4\u4e92\u901a\u5e38\u53ea\u662f\u804a\u5929\u6216\u8005\u8bed\u97f3\uff0c\u6709\u70b9\u50cf\u5728\u73b0\u573a\u4e00\u8d77\u73a9\u6e38\u620f\u5927\u5bb6\u53ef\u4ee5\u76f8\u4e92\u8ba8\u8bba\uff1b\u6574\u4f53\u7684\u6d3b\u52a8\u8fd8\u662f\u4ee5\u73a9\u6e38\u620f\u4e3a\u4e3b\uff0c\u4e92\u52a8\u662f\u8f85\u52a9\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u623f\u95f4\u7c7b\u7684\u4ea4\u4e92\uff0c\u76f8\u5bf9\u79c1\u5bc6\u4e00\u70b9\uff0c\u4f46\u662f\u8fd9\u4e9b\u5e94\u7528\u7684\u6e38\u620f\u6027\u5f80\u5f80\u5f88\u5f31\uff0c\u6bd4\u8f83\u5c40\u9650\u4e8e\u5f62\u5f0f\u4e0a\u7684\u5728\u7ebf\u4e92\u52a8\uff0c\u76ee\u7684\u6027\u548c\u5a31\u4e50\u6027\u90fd\u4e0d\u591f\u5f3a\u3002"),(0,n.kt)("p",null,"Reality World\u76f8\u5bf9\u4e0a\u8ff0\u7684\u6a21\u5f0f\uff0c\u5b58\u5728\u4e00\u4e0b\u7684\u4e00\u4e9b\u72ec\u7279\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e92\u52a8\u7684\u89c4\u5219\u548c\u5185\u5bb9\u5f80\u5f80\u662f\u53ef\u4ee5\u7531\u5176\u4e2d\u4e00\u4e2a\u7528\u6237\u521b\u4f5c\u7684\uff0c\u5177\u6709",(0,n.kt)("strong",{parentName:"li"},"\u72ec\u7279\u6027"),"\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u9488\u5bf9\u6027"),"\uff0c\u6bd4\u5982\u9488\u5bf9\u4e00\u4e2a\u751f\u65e5\u4e13\u95e8\u8bbe\u7f6e\u7684\u4e0e\u670b\u53cb\u76f8\u5173\u7684\u573a\u666f\u548c\u4e92\u52a8\u5185\u5bb9\uff1b",(0,n.kt)("strong",{parentName:"li"},"\u8fd9\u79cd\u72ec\u7279\u6027\u4f7f\u5f97Reality World\u7684\u5185\u5bb9\u66f4\u5bb9\u6613\u5728\u597d\u53cb\u4e4b\u95f4\u53d1\u8d77\u4e92\u52a8")),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u5728\u4e92\u52a8\u7684\u8fc7\u7a0b\u4e2d\u8fdb\u884c\u5171\u540c\u521b\u4f5c\uff0c\u6bd4\u5982\u4f60\u5411\u86cb\u7cd5\u4e0a\u5207\u4e00\u5200\u4e0b\u53bb\uff0c\u6240\u6709\u4eba\u90fd\u53ef\u4ee5\u770b\u5230\u86cb\u7cd5\u88ab\u5207\u6210\u4e24\u4efd\uff0c\u8fd9\u662f\u56e0\u4e3aReality World\u7684\u573a\u666f\u591a\u4eba\u534f\u4f5c\u7279\u6027\uff0c\u800c\u5176\u4ed6\u4e92\u52a8\u7684\u5185\u5bb9\u662f\u56fa\u5b9a\u7684\uff0c\u6bcf\u4e2a\u73a9\u5bb6\u53ea\u80fd\u4f53\u9a8c\u8fd9\u4e9b\u8bbe\u8ba1\u597d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"Reality World\u7684\u5185\u5bb9\u53ef\u4ee5\u5373\u4f7f\u521b\u4f5c\u548c\u5206\u4eab\uff0c\u4e0d\u9700\u8981\u63d0\u4ea4\u5230\u5546\u5e97\uff0c\u7136\u540e\u7528\u6237\u4e0b\u8f7d\uff0c\u53ea\u9700\u8981\u9a6c\u4e0a\u521b\u4f5c\u4e4b\u540e\u53d1\u9001\u7ed9\u597d\u53cb\u4e00\u4e2a\u94fe\u63a5\u5c31\u53ef\u4ee5\u53ca\u65f6\u6253\u5f00")),(0,n.kt)("h3",{id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"},"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5728\u73b0\u4ee3\u6570\u5b57\u7ecf\u6d4e\u4e2d\uff0c\u9664\u4e86\u89c6\u9891\u3001\u56fe\u7247\u548c\u97f3\u4e50\u8fd9\u79cd\u80fd\u76f4\u63a5\u4f53\u9a8c\u7684\u6570\u5b57\u5185\u5bb9\uff0c\u5176\u4ed6\u7684\u5927\u90e8\u5206\u5185\u5bb9\uff0c\u5176\u5b9e\u4f53\u548c\u5bf9\u5e94\u7684\u6570\u5b57\u8868\u8ff0\u90fd\u662f\u5206\u5272\u7684\uff0c\u4f8b\u5982\u6dd8\u5b9d\u90fd\u4e70\u7684\u5546\u54c1\u53ea\u662f\u6570\u5b57\u5316\u540e\u7684\u4e00\u4e2a\u8bb0\u5f55\uff0c\u4f60\u5fc5\u987b\u6536\u5230\u4e1c\u897f\u4e4b\u540e\u624d\u80fd\u4f53\u9a8c\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u4e0e\u4e4b\u76f8\u5173\u7684\u6570\u5b57\u7ecf\u6d4e\u662f\u5e7f\u544a\uff0c\u5e7f\u544a\u4f5c\u4e3a\u4e00\u4e2a\u5c55\u793a\u4ea7\u54c1\u7684\u65b9\u5f0f\uff0c\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u5b83\u4eec\u5f80\u5f80\u4ee5\u89c6\u9891\u6216\u8005\u56fe\u7247\u7684\u5f62\u5f0f\u5448\u73b0\u3002\u7136\u800c\u5728\u8fd9\u79cd\u65b9\u5f0f\u4e2d\uff0c\u5e7f\u544a\u8bed\u4ea7\u54c1\u901a\u5e38\u662f\u5272\u88c2\u7684\uff0c\u53d7\u9650\u4e8e\u5b9e\u7269\u9700\u8981\u573a\u5730\u53ca\u8fd0\u8f93\u7b49\u95ee\u9898\uff0c\u6211\u4eec\u5e76\u4e0d\u80fd\u603b\u662f\u5728\u4efb\u610f\u4e00\u4e2a\u5e7f\u544a\u65c1\u8fb9\u653e\u4e0a\u5b9e\u7269\uff0c\u4f7f\u5f97\u4efb\u4f55\u770b\u5230\u5e7f\u544a\u7684\u4eba\u5c31\u53ef\u4ee5\u8d2d\u4e70\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u5bf9\u4e8e\u540e\u8005\u624d\u662f\u7406\u60f3\u7684\u5e7f\u544a\u5f62\u6001\uff1a\u5c31\u662f\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1\uff0c\u6216\u8005\u8bf4\u5e7f\u544a\u53ef\u4ee5\u4e00\u952e\u76f4\u8fbe\u4ea7\u54c1\u4f53\u9a8c\u548c\u8d2d\u4e70\u3002"),(0,n.kt)("h4",{id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"},"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u4ea7\u54c1\u5c31\u662f\u6570\u5b57\u5185\u5bb9\uff0c\u800c\u975e\u5b9e\u4f53\u5185\u5bb9\uff0c\u7406\u8bba\u4e0a\u662f\u53ef\u4ee5\u505a\u5230\u8fd9\u79cd\u4e00\u952e\u4f53\u9a8c\u7684\u6548\u679c\u7684\u3002\u6bd4\u5982\u5982\u679c\u4ea7\u54c1\u662f\u4e00\u4e2a\u6e38\u620f\u6216\u8005\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u70b9\u51fb\u4e0b\u8f7d\uff0c\u8fd9\u79cd\u5f62\u5f0f\u73b0\u5728\u5f88\u666e\u904d\u3002\u7136\u800c\u8fd9\u79cd\u65b9\u5f0f\u5e76\u4e0d\u662f\u6700\u597d\u7684\u6a21\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7684\u4ea7\u54c1\u90fd\u5f97\u5f00\u53d1\u4e00\u4e2aapp"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u53ef\u80fd\u5e76\u4e0d\u60f3\u8981\u5b89\u88c5\u90a3\u4e48\u591aapp"),(0,n.kt)("li",{parentName:"ul"},"\u56e0\u4e3a\u6bcf\u4e2aapp\u5b89\u88c5\u9664\u4e86\u4f53\u9a8c\u4ea7\u54c1\u8fd8\u6709\u5f88\u591a\u989d\u5916\u7684\u8d1f\u62c5\uff1a\u6ce8\u518c\uff0c\u767b\u5f55\uff0c\u8fdb\u53bb\u4e86\u89e3\u8f6f\u4ef6\u7684\u5bfc\u822a\u529f\u80fd\u7b49\u7b49")),(0,n.kt)("p",null,"\u6240\u4ee5\u5143\u5b87\u5b99\u662f\u4e00\u4e2a\u66f4\u597d\u7684\u5e7f\u544a\u5e73\u53f0\uff0c\u6bcf\u4e2a\u4ea7\u54c1\u53ea\u9700\u8981\u8bbe\u8ba1\u4e00\u4e2a\u4ea4\u4e92\uff0c\u73a9\u5bb6\u76f4\u63a5\u4f53\u9a8c\u4e00\u4e0b\u5c31\u662f\u3002\u4f46\u662f\u73b0\u5728\u7684\u6280\u672f\u5e76\u4e0d\u80fd\u505a\u5230\u8fd9\u79cd\u4f53\u9a8c\uff0c\u8fd9\u91cc\u9762\u7684\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u5e73\u53f0\u65e0\u6cd5\u652f\u6491\u4efb\u4f55\u5f00\u53d1\u8005\u81ea\u7531\u5f00\u53d1\u4ea4\u4e92\u5185\u5bb9\uff0c\u5f80\u5f80\u53ea\u80fd\u901a\u8fc7\u5e73\u53f0\u53d1\u5e03\uff0c\u8fd9\u6837\u5e7f\u544a\u80fd\u529b\u5f88\u53d7\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u589e\u52a0\u4e86\u65b0\u529f\u80fd\uff0c\u4e5f\u9700\u8981\u6240\u6709\u73a9\u5bb6\u90fd\u66f4\u65b0\uff0c\u6709\u65f6\u5019\u4e00\u4e2a\u5e7f\u544a\u53ea\u6709\u5c11\u6570\u4eba\u6709\u4f53\u9a8c\u9700\u6c42")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0cReality World\u53ef\u4ee5\u505a\u5230\u5382\u5546\u53ef\u4ee5\u4efb\u610f\u53d1\u5e03\u5e26\u6709\u4ea4\u4e92\u7684\u5e7f\u544a\uff0c\u7136\u540e\u4efb\u4f55\u73a9\u5bb6\u53ea\u8981\u770b\u5230\u5b83\uff0c\u5c31\u53ef\u4ee5\u53ca\u65f6\u4f53\u9a8c\u548c\u8d2d\u4e70\uff0c\u771f\u6b63\u505a\u5230\uff1a\u4ea7\u54c1\u53ca\u5e7f\u544a\uff0c\u5e7f\u544a\u53ca\u4ea7\u54c1\uff0c\u8fd9\u79cd\u6a21\u5f0f\u6709\u671b\u91cd\u5851\u4e00\u4e2a\u5168\u65b0\u7684\u865a\u62df\u7ecf\u6d4e\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u5185\u5bb9\u662f\u5b9e\u4f53\u5185\u5bb9\uff0c\u4ecd\u7136\u53ef\u4ee5\u865a\u62df\u5316\u4f53\u9a8c\uff0c\u6216\u8005\u901a\u8fc7\u4ea4\u4e92\uff0c\u76f8\u6bd4\u89c6\u9891\u548c\u56fe\u7247\u66f4\u597d\u7684\u4e86\u89e3\u4ea7\u54c1\u3002"),(0,n.kt)("p",null,"\u89c14.6.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e"},"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u66f4\u6709\u4ef7\u503c\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"},"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684NFT\u7c7b\u7684\u6570\u5b57\u4ea4\u6613\u5e02\u573a\uff0c\u4ea4\u6613\u7684\u662f\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\uff0c\u662f\u4e00\u4e2a\u62f7\u8d1d\uff0c\u8fd9\u4e2a\u62f7\u8d1d\u9664\u975e\u901a\u8fc7\u4e00\u5b9a\u7684\u624b\u6bb5\u8ddf\u8e2a\u8f6c\u552e\u8bb0\u5f55\uff0c\u6216\u8005\u751a\u81f3\u9650\u5236\u8f6c\u552e\uff0c\u5f88\u96be\u4fdd\u8bc1\u521b\u4f5c\u8005\u7684\u6743\u76ca\u3002"),(0,n.kt)("p",null,"\u800cReality World\u4ea4\u6613\u7684\u4e3b\u8981\u662f\u7ec4\u4ef6\u548c\u6807\u51c6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u548c\u6807\u51c6\u5e76\u4e0d\u4f1a\u62f7\u8d1d\u4e00\u4efd\uff0c\u800c\u53ea\u662f\u4e00\u4e2a\u5f15\u7528\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6e90\u5934\u62c9\u53d6\u6700\u65b0\u4ee3\u7801\u3002\u6240\u4ee5\u4ed6\u5929\u751f\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u4e86\u89e3\u4f7f\u7528\u8005\u7684\u60c5\u51b5\uff0c\u6bd4\u5982\u4e00\u4e2a\u6807\u51c6\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u5176\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4e5f\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6807\u51c6\u5f00\u53d1\u8005\u4e0d\u80fd\u80fd\u591f\u6536\u53d6\u6240\u6709\u4f7f\u7528\u8005\u7684\u8d39\u7528\uff0c\u5e76\u4e14\u8fd8\u6709\u5f88\u597d\u7684\u66f4\u65b0\u673a\u5236\uff0c\u901a\u77e5\u7528\u6237\u8d2d\u4e70\u76f8\u5173\u548c\u6700\u65b0\u4ea7\u54c1\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002"),(0,n.kt)("h3",{id:"145-\u6301\u7eed\u6d88\u8d39"},"1.4.5 \u6301\u7eed\u6d88\u8d39"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u5316\u8fdb\u7a0b\u4e2d\uff0c\u6570\u5b57\u5316\u4ea7\u54c1\u5f80\u5f80\u662f\u4e00\u6b21\u6027\u6d88\u8d39\uff0c\u8fd9\u5bfc\u81f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f6f\u4ef6\u5f00\u53d1\u8005\u5347\u7ea7\u52a8\u529b\u4e0d\u5927\uff0c\u5bf9\u521b\u65b0\u53ca\u521b\u65b0\u7684\u901f\u5ea6\u662f\u6781\u4e3a\u4e0d\u5229\u7684\uff0c\u56e0\u4e3a\u65b0\u7528\u6237\u4f1a\u8d8a\u6765\u8d8a\u5c11"),(0,n.kt)("li",{parentName:"ul"},"\u5927\u91cf\u9648\u65e7\u4ee3\u7801\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u517c\u5bb9\u6210\u672c\u9ad8\uff0c\u4e00\u65b9\u9762\u662f\u7528\u6237\u4f7f\u7528\u6bd4\u8f83\u9648\u65e7\u7684\u6280\u672f\u6216\u4f53\u9a8c")),(0,n.kt)("p",null,"\u9700\u8981\u6539\u53d8\u8fd9\u79cd\u5c40\u9762\uff0c\u624d\u80fd\u66f4\u5927\u5730\u6fc0\u6d3b\u6570\u5b57\u6d88\u8d39\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.12.4.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"15-\u7528\u6237"},"1.5 \u7528\u6237"),(0,n.kt)("p",null,"Reality World\u5e73\u53f0\u6709\u56db\u79cd\u7c7b\u578b\u7684\u7528\u6237\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u4ece\u521b\u4f5c\u5c42\u9762\u533a\u5206\uff0c\u4e0d\u6d89\u53ca\u5546\u4e1a\u65b9\u9762\u7684\u5206\u7c7b\u6216\u8005\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\uff1a\u7c7b\u4f3c\u4e8e\u6296\u97f3\u5e73\u53f0\u53ea\u89c2\u770b\u89c6\u9891\uff0c\u4ece\u6765\u6ca1\u6709\u6216\u8005\u5f88\u5c11\u53d1\u5e03\u5185\u5bb9\u7684\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7528\u6237\uff1a\u6307\u53ea\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u501f\u52a9PC\u7f16\u8f91\u5668\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\uff1a\u4f7f\u7528PC\u7f16\u8f91\u5668Reality Create\u57fa\u4e8e\u6807\u51c6\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4f5c\u8005\uff1a\u57fa\u4e8e\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\u63d0\u51fa\u67d0\u79cd\u62bd\u8c61\uff0c\u5e76\u5c06\u5176\u8f6c\u6362\u4e3a\u6807\u51c6\uff0c\u4ee5\u53ca\u6301\u7eed\u7ef4\u62a4\u6807\u51c6\u7684\u66f4\u65b0")),(0,n.kt)("h3",{id:"151-\u666e\u901a\u7528\u6237"},"1.5.1 \u666e\u901a\u7528\u6237"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u666e\u901a\u7528\u6237\u4e0d\u8fdb\u884c\u4efb\u4f55\u5f62\u5f0f\u7684\u521b\u4f5c\uff0c\u4f46TA\u4ecd\u7136\u662f\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\u5f88\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u90fd\u5176\u4ed6\u521b\u4f5c\u5185\u5bb9\u7684\u4f7f\u7528\u548c\u4f53\u9a8c\u4ea7\u751f\u6d88\u8d39"),(0,n.kt)("li",{parentName:"ul"},"TA\u901a\u8fc7\u79c1\u4eba\u793e\u4ea4\u7f51\u7edc\uff0c\u4ea7\u751f\u7684\u5bf9\u597d\u7684\u5185\u5bb9\u7684\u4e3b\u52a8\u63a8\u8350\u884c\u4e3a\uff0c\u4fc3\u8fdb\u4e86\u6574\u4e2a\u5e02\u573a\u7ecf\u6d4e")),(0,n.kt)("p",null,"\u5f53\u7136\u6240\u6709\u4eba\u90fd\u662f\u666e\u901a\u7528\u6237\uff0c\u5e76\u4e14\u666e\u901a\u7528\u6237\u4e5f\u6709\u53ef\u80fd\u8f6c\u6362\u4e3a\u5176\u4ed6\u521b\u4f5c\u7528\u6237\u3002"),(0,n.kt)("h3",{id:"152-\u521b\u4f5c\u7528\u6237"},"1.5.2 \u521b\u4f5c\u7528\u6237"),(0,n.kt)("p",null,"\u5e73\u53f0\u5f88\u5927\u4e00\u90e8\u5206\u6280\u672f\u7684\u67b6\u6784\u90fd\u662f\u4e3a\u4e86\u521b\u4f5c\u7528\u6237\uff0c\u8fd9\u662f\u533a\u522b\u5176\u4ed6\u7c7b\u4f3c\u5e73\u53f0\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u521b\u4f5c\u6709\u4e24\u7c7b\u4e3b\u6d41\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e4b\u7c7b\u7684\u6c99\u76d2\u6e38\u620f"),"\uff0c\u5728\u8fd9\u7c7b\u6e38\u620f\u4e2d\uff0c\u6574\u4e2a\u4e16\u754c\u7684\u89c4\u5219\u7c7b\u578b\u6bd4\u8f83\u4e00\u81f4\uff0c\u6bd4\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u5821\u5792\u5efa\u9020\u4e0e\u9003\u751f\uff0c\u300a\u6211\u7684\u4e16\u754c\u300b\u4e2d\u7684\u602a\u7269\u673a\u5236\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5185\u7f6e\u4e8e\u7cfb\u7edf\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u5927\u91cf\u5177\u6709\u56fa\u5b9a\u884c\u4e3a\u7684\u7269\u4ef6\uff0c\u73a9\u5bb6\u521b\u4f5c\u7684\u81ea\u7531\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff1a\u57fa\u672c\u4e0a\u4e0d\u6d89\u53ca\u903b\u8f91\u672c\u8eab\u7684\u6784\u9020\uff0c\u53ea\u6709\u8ddf\u7269\u7406\u4f4d\u7f6e\uff0c\u7269\u4f53\u7ec4\u5408\u7b49\u76f8\u5173\u4e0e\u6e38\u620f\u884c\u4e3a\u65e0\u5173\u7684\u7b56\u7565"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"AR\u4e8b\u4ef6\u9a71\u52a8\u7684\u589e\u5f3a\u73b0\u5b9e\u4f53\u9a8c"),"\uff0c\u8fd9\u4e9b\u5e94\u7528\u4ee5\u300aSnapchat\u300b\u4e3a\u4ee3\u8868\uff0c\u5b83\u63d0\u4f9b\u4e00\u4e9b\u56fa\u5b9a\u7684\u5177\u6709\u4e92\u52a8\u4f53\u9a8c\u7684\u9053\u5177\u6216\u8005\u6ee4\u955c\uff0c\u7528\u6237\u501f\u52a9\u6444\u50cf\u673a\u8fdb\u884c\u4f53\u9a8c\uff1b\u8fd9\u79cd\u4f53\u9a8c\u672c\u8eab\u4e0d\u6d89\u53ca3D\u7684\u521b\u4f5c\uff0c\u4f8b\u5982\u5236\u4f5c\u4e00\u4e2a\u65b0\u7684\u6ee4\u955c\u6216\u8005\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u5b83\u4eec\u4ea7\u751f\u4e86\u4e00\u4e2a\u72ec\u4e00\u65e0\u4e8c\u7684\u89c6\u9891\u5185\u5bb9\uff0c\u5e76\u4e14\u8fd9\u4e2a\u5185\u5bb9\u662f\u8ddf\u81ea\u5df1\u9ad8\u5ea6\u76f8\u5173\u7684\u3002")),(0,n.kt)("p",null,"\u300aSnapchat\u300b\u7684\u6a21\u677f\u53ea\u80fd\u5728PC\u7aef\u5236\u4f5c\uff0c\u300aReality World\u300b\u5219\u53ef\u4ee5\u53ca\u65f6\u521b\u4f5c\u300aSnapchat\u300b\u7c7b\u4f3c\u7684\u6a21\u677f\uff0c\u5e76\u4e14\u53ef\u4ee5\u9009\u62e9\u66f4\u4e30\u5bcc\u7684\u529f\u80fd\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u300aReality World\u300b\u9700\u8981\u652f\u6301\u4efb\u610f\u7684\u7ec4\u4ef6\u4f7f\u7528\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u4efb\u610f\u534f\u4f5c\uff0c\u8fd9\u6837\u624d\u80fd\u4e0d\u9650\u5236\u521b\u4f5c\uff0c\u4e0d\u7136\u5c31\u4f1a\u5f88\u5bb9\u6613\u5c40\u9650\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u7ec4\u4ef6\u5305\uff0c\u6216\u8005\u4e00\u4e9b\u7279\u5b9a\u7684\u4e92\u52a8\u7c7b\u578b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4efb\u610f\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u901a\u4fe1\u548c\u7ec4\u5408\u662fReality World\u72ec\u7279\u7684\u529f\u80fd\uff0c\u5b83\u80fd\u591f\u91ca\u653e\u521b\u4f5c\u8005\u65e0\u9650\u7684\u521b\u610f"),"\u3002"),(0,n.kt)("p",null,"XR\u8bbe\u5907\u4e0a\u7684\u521b\u4f5c\u7528\u6237\u5fc5\u987b\u8d2d\u4e70\u8d44\u6e90\uff0c\u56e0\u4e3a\u4ed6\u4eec\u53ea\u80fd\u57fa\u4e8e\u5df2\u6709\u7684\u8d44\u6e90\u8fdb\u884c\u521b\u4f5c\uff0c\u5f53\u7136\u6709\u4e00\u4e9b\u8d44\u6e90\u5305\u6216\u8005\u7ec4\u4ef6\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5316\u751f\u6210\u5185\u5bb9\u7684\uff0c\u8fd9\u7c7b\u7ec4\u4ef6\u53ef\u4ee5\u751f\u6210\u4e00\u4e9b\u968f\u673a\u4e0d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u8d44\u6e90\u7684\u7c7b\u578b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u8d44\u6e90\uff1a\u6a21\u578b\uff08\u5982\u6811\u6728\u3001\u6c7d\u8f66\u3001\u5f13\u7bad\u7b49\uff09\u3001\u7eb9\u7406\u3001\u7c92\u5b50\u7279\u6548\u3001\u52a8\u753b\u7b49\uff0cReality World\u5b98\u65b9\u5e94\u8be5\u63d0\u4f9b\u8f83\u591a\u7684\u57fa\u7840\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u529f\u80fd\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u662f\u6700\u57fa\u672c\u7684\u884c\u4e3a\uff0c\u5b83\u4eec\u662f\u7528\u6237\u770b\u4e0d\u89c1\u7684\u903b\u8f91\u4ee3\u7801\uff0c\u5b83\u4eec\u7528\u6765\u63a7\u5236\u7269\u4f53\u5728\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u884c\u4e3a\uff1b\u4e0d\u540c\u7ec4\u4ef6\u5305\u4e4b\u95f4\u7684\u7ec4\u4ef6\u53ef\u4ee5\u4efb\u4f55\u7ec4\u5408\uff0c\u521b\u4f5c\u8005\u9700\u8981\u533a\u5206\u5b83\u4eec\u7684\u529f\u80fd\uff0c\u624d\u80fd\u751f\u6210\u66f4\u597d\u7684\u5408\u7406\u7684\u4ea4\u4e92\u903b\u8f91\u3002\u8fd9\u662f\u521b\u4f5c\u4f53\u9a8c\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u90e8\u4ef6\u6216\u8005\u7269\u4f53\uff0c\u7531\u4e00\u5b9a\u7684\u7ec4\u4ef6\u7ec4\u5408\u5f62\u6210\uff0c\u5177\u6709\u67d0\u4e9b\u7279\u5b9a\u903b\u8f91\u529f\u80fd\u7684\u6e38\u620f\u5bf9\u8c61\u6216\u8005\u5b9e\u4f53\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u662f\u76f4\u63a5\u5b58\u5728\u4e8e\u6e38\u620f\u573a\u666f\u7ed3\u6784\u4e2d\u7684\u5143\u7d20\uff0c\u8fd9\u4e9b\u7269\u4f53\u53ef\u80fd\u5305\u542b\u6a21\u578b\u3001\u52a8\u753b\u3001\u4ee5\u53ca\u80fd\u591f\u826f\u597d\u63a7\u5236\u8fd9\u4e9b\u6a21\u578b\u53ca\u5176\u884c\u4e3a\u7684\u7ec4\u4ef6\u7ec4\u5408\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u7528\u6237\u76f4\u63a5\u653e\u7f6e\u5728\u573a\u666f\u4e2d\u5c31\u53ef\u4ee5\u4f7f\u7528\u7684\uff0c\u7c7b\u4f3c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5f53\u4e2d\u7684\u7269\u4f53\uff1b\u5b83\u4eec\u6709\u4e9b\u4e5f\u662f\u7528\u4e8e\u5e2e\u52a9\u521b\u4f5c\u4e00\u4e2a\u573a\u666f\u7684\u7ed3\u6784\u6027\u7684\u7ec4\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u5305\u542bTAG\u7684Entity\uff0c\u4e00\u4e2aNPC\u602a\u7269\u7b49\uff1b\u4e5f\u5305\u542b\u4e00\u4e9b\u7279\u6b8a\u5185\u7f6e\u529f\u80fd\u7684\u90e8\u4ef6\uff0c\u4f8b\u5982Layer\u8868\u7b49\u3002")),(0,n.kt)("h4",{id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b"},"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u8005\u9996\u5148\u6d4f\u89c8Creation\u5546\u5e97\uff0c\u4e0b\u8f7d\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u57fa\u672c\u7684\u8d44\u6e90\uff0c\u5982\u4e0a\u9762\u4ecb\u7ecd\u7684\u9759\u6001\u8d44\u6e90\u3001\u529f\u80fd\u7ec4\u4ef6\u548c\u7269\u4f53\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5c06\u5176\u62d6\u5165\u521d\u59cb\u7684\u7a7a\u573a\u666f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u9009\u62e9\u7269\u4f53\u5bf9\u5176\u5c5e\u6027\u8fdb\u884c\u7f16\u8f91\uff0c\u5176\u4e2d\u53ef\u4ee5\u5bf9\u5176\u6dfb\u52a0\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u6309\u7c7b\u578b\u8fdb\u884c\u7ec4\u7ec7\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u6709\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\u53ca\u8bf4\u660e\uff0c\u8bf4\u660e\u5e94\u8be5\u600e\u6837\u4f7f\u7528\u8be5\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u7ec4\u4ef6\u7684\u5c5e\u6027\u53c2\u6570\u7b49\uff0c\u7ec4\u4ef6\u901a\u8fc7\u53c2\u6570\u6765\u6539\u53d8\u7269\u4f53\u7684\u884c\u4e3a\u6216\u8005\u89c6\u89c9\uff0c\u4f8b\u5982\u5982\u679c\u662f\u7a0b\u5e8f\u5316\u751f\u6210\u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u751f\u6210\u4e0d\u540c\u7684\u573a\u666f\uff0c\u5982\u679c\u662f\u7c92\u5b50\u7279\u6548\u7ec4\u4ef6\uff0c\u5219\u5f62\u6210\u4e0d\u540c\u7684\u89c6\u89c9\u6548\u679c"),(0,n.kt)("li",{parentName:"ul"},"\u64ad\u653e\u9884\u89c8"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u94fe\u63a5\u53d1\u9001\u7ed9\u597d\u53cb"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u70b9\u51fb\u94fe\u63a5\u52a0\u5165\u4e00\u8d77\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u597d\u53cb\u5177\u6709\u6743\u9650\uff0c\u53ef\u4ee5\u8fdb\u884c\u5171\u540c\u7f16\u8f91\uff0c\u8fd9\u4e9b\u7f16\u8f91\u4e5f\u53ef\u4ee5\u662f\u540c\u65f6\u5728\u7ebf\u534f\u540c\u7684")),(0,n.kt)("h3",{id:"153-\u5f00\u53d1\u8005"},"1.5.3 \u5f00\u53d1\u8005"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u53ea\u80fd\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5fc5\u987b\u652f\u6301\u67d0\u4e2a\u6807\u51c6\uff0c\u5f53\u7136\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u652f\u6301\u591a\u4e2a\u6807\u51c6\uff0c\u6765\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u548c\u7ec4\u4ef6\u662f\u9694\u79bb\u7684\u3002\u9664\u6765\u81ea\u6807\u51c6\u4e4b\u5916\u7684\u7b26\u53f7\uff0c\u5176\u4ed6\u7b26\u53f7\u90fd\u662f\u79c1\u6709\u53d8\u91cf\u3002"),(0,n.kt)("h3",{id:"154-\u6807\u51c6\u4f5c\u8005"},"1.5.4 \u6807\u51c6\u4f5c\u8005"),(0,n.kt)("p",null,"\u67d0\u4e2a\u6807\u51c6\u7684\u8d1f\u8d23\u4eba\uff0c\u5f53\u7136\u6807\u51c6\u53ef\u4ee5\u8f6c\u5356\uff0c\u5f53\u524d\u8d1f\u8d23\u4eba\u4e0d\u4e00\u5b9a\u662f\u521b\u59cb\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u6807\u51c6\u4e0d\u4e00\u5b9a\u9700\u8981\u7f16\u7a0b\uff0c\u5b83\u4ec5\u4ec5\u6d89\u53ca\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u62bd\u8c61\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u3002\u56e0\u6b64\uff0c\u4e0d\u5177\u5907\u7f16\u7a0b\u80fd\u529b\uff0c\u4f46\u662f\u5177\u6709\u8f83\u5f3a\u62bd\u8c61\u80fd\u529b\u7684\u4eba\u4e5f\u53ef\u4ee5\u521b\u5efa\u548c\u7ef4\u62a4\u6807\u51c6\u3002\u4f46\u662f\u4ece\u66f4\u597d\u7684\u6570\u636e\u7ed3\u6784\u5b9a\u4e49\u89d2\u5ea6\uff0c\u7531\u7f16\u7a0b\u4eba\u5458\u7ef4\u62a4\u6807\u51c6\u662f\u6700\u5408\u9002\u7684\uff0c\u4f46\u662f\u7f16\u7a0b\u4eba\u5458\u7684\u62bd\u8c61\u80fd\u529b\u5f80\u5f80\u4e0d\u591f\u3002\u6240\u4ee5\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u662f\u67d0\u4e2a\u6807\u51c6\u540e\u9762\u6709\u62bd\u8c61\u80fd\u529b\u8f83\u5f3a\u548c\u7f16\u7a0b\u80fd\u529b\u8f83\u5f3a\u4e24\u8005\u7684\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.11\u548c4.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c"},"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f88\u663e\u7136\uff0c\u8fd9\u79cd\u7531\u7528\u6237\u9a71\u52a8\u7684\u5168\u65b0\u4f53\u9a8c\u9700\u6c42\uff0c\u7528\u5f53\u4e0b\u7684\u6280\u672f\u67b6\u6784\u662f\u505a\u4e0d\u5230\u7684\uff0c\u800c\u4e14\u5b83\u7684\u9650\u5236\u7684\u6839\u6e90\u6765\u6e90\u4e8e\u66f4\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u3002\u5728\u8fd1\u51e0\u5341\u5e74\u7684\u8ba1\u7b97\u673a\u65f6\u4ee3\u4e2d\uff0c\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u53d1\u751f\u592a\u6839\u672c\u6027\u53d8\u5316\uff0c\u4f8b\u5982\u6211\u4eec\u80fd\u611f\u77e5\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u8bd1\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u4e00\u4e9b10\u5e74\u524d\u7684\u7ecf\u5178\u8457\u540d\u57fa\u672c\u4e0a\u73b0\u5728\u8fd8\u662f\u9002\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\u4e5f\u6ca1\u6709\u9769\u547d\u6027\u7684\u53d8\u5316\uff0c\u4e0d\u4ec5\u81f32010\u5e74\u4e4b\u540e\u5f88\u5c11\u63a8\u51fa\u5168\u65b0\u7684\u8bed\u8a00\uff0c\u5927\u90e8\u5206\u8bed\u8a00\u8bbe\u8ba1\u4e5f\u53ea\u662f\u9488\u5bf9\u4e00\u4e9b\u5f00\u53d1\u4f53\u9a8c\u5c42\u9762\u7684\u9009\u62e9\uff0c\u5f88\u591a\u8bed\u8a00\u7684\u6838\u5fc3\u601d\u60f3\u751a\u81f3\u65e9\u57282000\u5e74\u4e4b\u524d\u5c31\u786e\u5b9a")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"add",src:l(1377).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u662f\u8ba1\u7b97\u67b6\u6784\u6700\u91cd\u8981\u7684\u6307\u5411\uff0c\u56e0\u4e3a\u5b83\u4eec\u8fde\u63a5\u8ba1\u7b97\u673a\u786c\u4ef6\u548c\u5e94\u7528\u8f6f\u4ef6\uff0c\u5b83\u4eec\u7684\u53d8\u9769\u5f80\u5f80\u80fd\u591f\u51b3\u5b9a\u4e0a\u5c42\u8f6f\u4ef6\u5f62\u6001\u7684\u53d8\u9769\uff0c\u4ece\u800c\u51b3\u5b9a\u6280\u672f\u5e26\u7ed9\u6d88\u8d39\u8005\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f53\u5143\u5b87\u5b99\u5e26\u6765\u771f\u6b63\u5927\u89c4\u6a21\u3001\u4e92\u64cd\u4f5c\u3001\u5927\u5e76\u53d1\u7b49\u7b49\u8fd9\u4e9b\u4f20\u7edf\u8ba1\u7b97\u6a21\u578b\u4e0d\u80fd\u5e94\u4ed8\u7684\u9700\u6c42\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5168\u65b0\u7684\u601d\u8def\uff0c\u5728\u8ba1\u7b97\u67b6\u6784\u5c42\u9762\u521b\u9020\u5168\u65b0\u7684\u589e\u91cf\u4ef7\u503c\uff0c\u624d\u6709\u673a\u4f1a\u9a71\u52a8\u6574\u4e2a\u5143\u5b87\u5b99\u7684\u53d8\u9769\u3002"),(0,n.kt)("h1",{id:"2-reality-interoperable-system"},"2. Reality Interoperable System"),(0,n.kt)("p",null,"\u7ed3\u6784\u62bd\u8c61\uff0c\u5bf9\u4e8eXR\u7aef\u7684\u9009\u62e9\uff0c\u5982\u679c\u5361\u5305\u592a\u591a\uff0c\u4f1a\u5bfc\u81f4\u9009\u62e9\u64cd\u4f5c\u5f88\u590d\u6742\uff0c\u53c2\u8003\u6dd8\u5b9d\u8d2d\u7269\uff0c\u5927\u5bb6\u4f1a\u628a\u60f3\u4e70\u7684\u5546\u54c1\u653e\u8fdb\u8d2d\u7269\u8f66\uff0c\u6700\u540e\u4e00\u6b21\u6027\u4ed8\u6b3e"),(0,n.kt)("p",null,"\u8ba9\u7528\u6237\u5728\u624b\u673a\u7aef\u5750\u597d\u5f52\u7c7b\uff0c\u7cbe\u9009\u51fa\u786e\u5b9a\u6216\u8005\u5927\u6982\u7387\u4f1a\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7136\u540e\u7b80\u5316\u5b9e\u9645\u7684\u9009\u62e9\uff0c\u751a\u81f3\u901a\u8fc7\u66f4\u52a0\u53cb\u597d\u7684\u547d\u540d\u89c4\u8303\u6765\u4f7f\u7528\u8bed\u8a00\u9009\u62e9"),(0,n.kt)("p",null,"\u603b\u4e4b\u5c31\u662f\u9700\u8981\u66f4\u597d\u7684\u7c7b\u578b\u5316\uff0c\u5e76\u4e14\u5c06\u7528\u6237\u5bf9\u8d44\u6e90\u7684\u9009\u62e9\u8fc7\u7a0b\u4e2d\uff0c\u878d\u5165\u5206\u7c7b\uff0c\u5f62\u6210\u4e00\u4e2a\u5929\u7136\u7684\u7b5b\u9009\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u5b9a\u4e49\u521b\u4f5c\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u4ec5\u4ec5\u662fCreate\u4e2d\u7684\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u50cf\u5907\u5fd8\u5f55\u7b14\u8bb0\u4e00\u6837\u968f\u65f6\u8bb0\u5f55"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u6e90\u7684\u9009\u62e9\u51c6\u5907\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u770b\u522b\u4eba\u7684\u521b\u4f5c\u4e5f\u662f\u521b\u4f5c\u601d\u8003\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u903b\u8f91\u4e0a\u7684\u7ec4\u7ec7\u53ef\u80fd\u6709\u4e00\u90e8\u4efd\u662f\u975e\u89c6\u89c9\u76f8\u5173\u7684\uff0c\u6240\u4ee5\u8d44\u6e90\u7ba1\u7406\u672c\u8eab\u8981\u878d\u5165\u521b\u4f5c\u8fc7\u7a0b\uff0c\u5373\u5b83\u4e0d\u5149\u662f\u8d44\u6e90\u7ba1\u7406\uff0c\u4e5f\u5305\u542b\u4e00\u5b9a\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f8b\u5982\u6545\u4e8b\u5927\u7eb2\u7ed3\u6784\u7b49\u7b49\uff0c\u5c31\u50cf\u7b56\u5212\u5728\u7ec4\u7ec7\u8868\u683c\u7684\u65f6\u5019\uff0c\u6bd4\u5982\u7f16\u5199\u4eba\u7269\u6545\u4e8b\u5bf9\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u80fd\u4ec5\u4f9d\u8d56\u4e8e\u8d44\u6e90\u8d2d\u4e70+XR\u7aef\u9009\u62e9\u8fd9\u6837\u7684\u4f20\u7edf\u6a21\u5f0f\uff0c\u5373\u4ea4\u4e92\u590d\u6742\uff0c\u4e5f\u4e0d\u7b26\u5408\u5b9e\u9645\u7684\u521b\u4f5c\u6d41\u7a0b")),(0,n.kt)("h2",{id:"21-creation-scene-description"},"2.1 Creation Scene Description"),(0,n.kt)("p",null,"\u9700\u8981\u52a0\u5165\u7528\u6237\u7248\u6743\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"USD\u7684asset resolution\u673a\u5236\uff0c\u4f7f\u5f97\u53ef\u4ee5\u76f4\u63a5\u52a0\u8f7dcreation.id\u7684\u5185\u5b58\uff0c\u800c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u52a0\u8f7d\u6a21\u5757\uff0c\u4f46\u662f\u9700\u8981\u5728\u81ea\u5b9a\u4e49resolution\u4e2d\u52a0\u5165\u6743\u9650\u9a8c\u8bc1\uff0c\u4f8b\u5982\u4f20\u5165\u6d88\u8d39\u7684app\u4ee5\u53ca\u7528\u6237\u4fe1\u606f\uff08Reality ID\uff09\u3002"),(0,n.kt)("p",null,"USDZ\u53ef\u80fd\u662f\u5c06\u4e00\u4e9bBehavior\u8f6c\u6362\u4e3aSchema\uff0c\u56e0\u4e3a\u8fd9\u4e9bSchema\u662fC++\u5e93\uff0c\u6240\u4ee5\u9700\u8981\u5c06USD\u7684C++\u5e93\u653e\u8fdbiOS\u7cfb\u7edf\u4e2d\uff1b\u867d\u7136USD\u63d0\u4f9b\u6709Python binding\uff0c\u4f46\u662f\u5b83\u53ea\u662f\u63a5\u53e3\u7684\u5c01\u88c5\uff0c\u56e0\u4e3aUSD\u672c\u8eab\u4e5f\u662f\u4e00\u95e8\u8bed\u8a00\uff0c\u8bed\u8a00\u672c\u8eab\u9700\u8981\u89e3\u91ca\u6216\u8005\u7f16\u8bd1\uff0cUSD\u662f\u5c06\u65b0\u7684Schema\u751f\u6210\u89e3\u6790\u7684C++\u6587\u4ef6\uff0c\u6240\u4ee5\u9700\u8981\u653e\u7f6e\u5728\u8fd0\u884c\u65f6\uff0c\u6240\u4ee5\u5c31\u4e0d\u80fd\u52a8\u6001\u5b9a\u4e49\uff0c\u53ea\u80fd\u662f\u7cfb\u7edf\u7ea7\u522b\u7684Schema\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u811a\u672c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u8fd8\u662f\u9700\u8981\u589e\u52a0\u4e00\u5c42\u89e3\u6790\uff1b"),(0,n.kt)("p",null,"\u4e3a\u6b64USD\u6587\u4ef6\u4e2d\u9700\u8981\u5305\u542b\u4e00\u4e9b\u975eUSD\u7684\u7247\u6bb5\uff0c\u4f8b\u5982\u5b9a\u4e49\u4e00\u4e2a\u7279\u6b8a\u7684Component\u6216\u8005Model\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7asset resolution\u6765\u4e0eUSD\u4e00\u8d77\u9002\u914d\u5de5\u4f5c\u3002\u8fd9\u4e00\u90e8\u5206\u53ef\u4ee5\u4e0d\u662fUSD\u8bed\u8a00\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u5b9a\u4e49\u7684\u8bed\u6cd5\uff1b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aUSD\u6587\u4ef6\u4e0d\u5e94\u8be5\u8ba9\u7528\u6237\u770b\u5230\u548c\u7f16\u8f91\uff0c\u7528\u6237\u770b\u5230\u7684\u662f\u5de5\u7a0b\u6216\u8005\u53ef\u89c6\u5316\u7684\u63cf\u8ff0\uff0c\u6216\u8005\u5c5e\u6027\u8868\u8ff0\u3002\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u4e5f\u4e0d\u9700\u8981\u7f16\u8f91\u8fd9\u4e48\u590d\u6742\u7684\u7ed3\u6784\uff0cUSD\u672c\u8d28\u4e0a\u8fd8\u662f\u9762\u5411\u6570\u636e\u7ed3\u6784\u6216\u8005\u7a0b\u5e8f\u5458\u7684\uff0cRW\u7684\u7ed3\u6784\u5e94\u8be5\u66f4\u7b80\u5355\u3001\u6241\u5e73\u3002"),(0,n.kt)("h3",{id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8"},"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h3",{id:"212-\u5185\u5b58\u5206\u5e03\u5f0f"},"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5c3d\u91cf\u907f\u514d\u5185\u5b58\u4e2d\u8f83\u5927\u7684\u5c42\u6b21\u6027\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e94\u8be5\u90fd\u662f\u6241\u5e73\u7684\uff0c\u76f8\u5173\u6027\u901a\u8fc7\u7ec4\u4ef6\u901a\u4fe1\u6765\u5b9e\u73b0\u3002\u6240\u6709\u6570\u636e\u90fd\u662f\u6241\u5e73\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f51\u683c\u3001\u6750\u8d28\u3001\u52a8\u753b\u7b49\u6570\u636e\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u5185\u90e8\u5b58\u5230\u5927\u91cf\u76f8\u5173\u6027\u3001\u5f15\u7528\u7b49\uff0c\u5982\u679c\u5c06\u5b83\u4eec\u5b58\u50a8\u4e3a\u6241\u5e73\u7684\uff0c\u5219\u89e3\u6790\u4ee3\u7801\u7684\u6548\u7387\u4f1a\u6bd4\u8f83\u4f4e\uff0c\u901a\u5e38\u8fd9\u79cd\u7d27\u8026\u5408\u7684\u6570\u636e\u90fd\u662f\u4f7f\u7528OOP\u7684\u65b9\u5f0f\u6765\u89e3\u6790\u548c\u6267\u884c\u8ba1\u7b97\u3002\u8fd9\u79cd\u6570\u636e\u6211\u4eec\u5c31\u4fdd\u7559\u4f20\u7edf\u7684\u65b9\u5f0f\uff0c\u4f7f\u7528USD\u6765\u4fdd\u5b58\u8fd9\u4e9b\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6211\u4eec\u5b58\u50a8\u7cfb\u7edf\u91cc\u9762\u4f1a\u6709\u4e24\u7c7b\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662fUSD\uff0c\u7528\u6765\u89e3\u6790\u4f20\u7edf\u7684\u6a21\u578b\u3001\u52a8\u753b\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5355\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662f\u903b\u8f91\u90e8\u5206")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5176\u4ed6\u4e00\u4e9b\u590d\u6742\u7ed3\u6784\uff0c\u4f8b\u5982\u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u3001AI\u7b49\uff0c\u5982\u679c\u8fd9\u4e9b\u89c4\u5219\u662f\u76f8\u5bf9\u56fa\u5b9a\u7684\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u5355\u72ec\u7684\u683c\u5f0f\u5b58\u50a8\uff0c\u5b83\u4eec\u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u50cf\u7c7b\u4f3cUSD\u90a3\u6837\u7684\u6587\u4ef6\u5f62\u5f0f\u5b58\u50a8\uff0c\u7136\u540e\u5b9e\u4f53\u5bf9\u8c61\u6309\u5355\u72ec\u7684\u673a\u5236\u52a0\u8f7d\u5b83\u4eec\u5e76\u8fdb\u884c\u89e3\u6790\u3002\u4f1a\u5b9a\u4e49\u4e00\u4e9b\u4e13\u95e8\u7684\u52a0\u8f7d\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u64cd\u4f5c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5185\u5b58\u4e2d\u8981\u5c3d\u91cf\u907f\u514d\u4f7f\u7528\u5c42\u6b21\u7ed3\u6784\u53bb\u805a\u5408\u591a\u4e2a\u6570\u636e\uff0c\u9664\u4e86\u50cfUSD\u8fd9\u79cd\u4f20\u7edf\u7684\u6570\u636e\u9664\u5916\uff0c\u5f53\u7136\u5bf9\u4e8eUSD\uff0c\u6211\u4eec\u4e5f\u8981\u5c3d\u91cf\u5229\u7528\u6570\u636e\u9a71\u52a8\u7684\u7279\u6027\u5c3d\u91cf\u628a\u4e0d\u76f8\u5173\u72ec\u7acb\u7684\u6570\u636e\u62c6\u5f00\u3002\u5c3d\u91cf\u907f\u514d\u8f83\u5927\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("h2",{id:"22-creation-script"},"2.2 Creation Script"),(0,n.kt)("p",null,"Creation\u6709\u4e00\u4e2a\u6838\u5fc3\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5e94\u8be5\u50cfLua\u4e00\u6837\u7b80\u5355\uff0c\u8f7b\u91cf\u7684\u8fd0\u884c\u65f6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8bf4\u660e\u6587\u6863\u53ea\u670950\u9875pdf\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u53ea\u9700\u8981\u4e86\u89e3\u8fd920\u9875\u6587\u6863\uff0c\u4e0d\u518d\u9700\u8981\u9605\u8bfb\u5176\u4ed6\u8d44\u6599\u5df2\u5b66\u4e60\u66f4\u9ad8\u7ea7\u7684\u6280\u5de7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u540c\u65f6\u9762\u5411\u4e13\u4e1a\u5f00\u53d1\u8005\u548c\u666e\u901a\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u5c3d\u53ef\u80fd\u5c11\u7684\u7cfb\u7edf\u5c42API\uff0c\u4e0d\u8981\u5168\u90e8\u66b4\u9732\u5f15\u64ce\u5c42\u7684API\uff0c\u751a\u81f3\u53ef\u4ee5\u5c06\u5f15\u64ce\u5c42\u7684API\u4fee\u6539\u4e0d\u540c\u7684\u6613\u4e8e\u4e1a\u52a1\u4fa7\u7406\u89e3\u7684API\u540d\u5b57\uff0c\u5b83\u7684\u6240\u6709API\u5e94\u8be5\u50cfHoudini\u4e00\u6837\uff0c\u5168\u90e8\u4e13\u6ce8\u4e8e\u4e1a\u52a1\uff0c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u4e86\u89e3\u7684\u5c31\u4e0d\u66b4\u9732\u7ed9\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"Creation Script\u7684\u6838\u5fc3\u76ee\u6807\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u8981\u6784\u5efa\u4e00\u5957\u80fd\u591f\u4fbf\u4e8e\u666e\u901a\u7528\u6237\u7f16\u8f91\u3001\u548c\u5171\u4eab\u903b\u8f91\u7684\u67b6\u6784\uff1b\u6240\u4ee5\u4ed6\u5fc5\u987b\u80fd\u591f\u52a8\u6001\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u6b21\u8981\u76ee\u6807\u662f\u7b80\u5316\u5f00\u53d1\u8005\u7684\u5f00\u53d1\u4f53\u9a8c\uff0c\u4f8b\u5982\u53ea\u4e13\u6ce8\u4e8e\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u7ec4\u7ec7\u8bbe\u8ba1\uff0c\u518d\u6bd4\u5982\u7b80\u5316\u591a\u7ebf\u7a0b\u7684\u5f00\u53d1\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u611f\u77e5\u4e0d\u5230\u5e76\u53d1\u7f16\u7a0b\uff1b\u4f8b\u5982\u4e0d\u80fd\u4e3a\u4e86\u65b9\u4fbf\u5bf9Component \u8fdb\u884c\u7ba1\u7406\uff0c\u5c31\u8981\u6c42\u7528\u6237\u53bb\u914d\u7f6e\u4e00\u4e2a\u5305\u5f15\u7528\u6587\u4ef6\uff0c\u800c\u5e94\u8be5\u81ea\u52a8\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u8be5\u662f\u56fe\u7075\u5b8c\u5907\u7684\uff0c\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u4ed6\u5e94\u8be5\u57fa\u4e8e\u4e00\u4e2a\u5df2\u6709\u7684\u811a\u672c\u8bed\u8a00\uff0c\u4f7f\u4ed6\u4e13\u6ce8\u4e8e\u4e0a\u5c42\u67b6\u6784\uff0c\u800c\u4e0d\u662f\u53bb\u6784\u5efa\u4e00\u5957\u5e95\u5c42\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5bf9\u8c61\u7684\u6784\u5efa\u5728\u5bbf\u4e3b\uff0c\u811a\u672c\u4e3b\u8981\u505a\u8f7b\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5783\u573e\u56de\u6536\uff0c\u6240\u6709\u5806\u4e0a\u7684\u5bf9\u8c61\u5747\u6709\u5bbf\u4e3b\u5206\u914d\u548c\u7ba1\u7406")),(0,n.kt)("p",null,"\u4f20\u7edf\u8bed\u8a00\u51e0\u4e4e\u90fd\u662f\u4e3a\u4e86\u9762\u5411\u5bf9\u8c61\u800c\u751f\u7684\uff0c\u6240\u4ee5\u5305\u542b\u5f88\u591a\u4e3a\u652f\u6301\u9762\u5411\u5bf9\u8c61\u7684\u529f\u80fd\uff0c\u5982\u679c\u6570\u636e\u9a71\u52a8\u662f\u9700\u8981\u7684\u6838\u5fc3\uff0c\u662f\u4e0d\u662f\u5e94\u8be5\u6709\u4e00\u79cd\u65b0\u7684\u8bed\u8a00\uff0c\u76ee\u524d\u770b\u6765Lua\u66f4\u63a5\u8fd1\u8fd9\u79cd\u8bed\u8a00"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u7528\u9014\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u7528\u4e8e\u68c0\u67e5ECS\u7684\u7ed3\u6784\uff0c\u4e0d\u5408\u6cd5\u7684\u7c7b\u7ed3\u6784\u4e0d\u80fd\u88ab\u52a0\u5165\u5230\u6700\u7ec8\u7a0b\u5e8f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u68c0\u67e5Component \u6570\u636e\u5185\u5b58\u5206\u914d\u5927\u5c0f\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u4e8e\u5c06\u5e95\u5c42\u9762\u5411\u5bf9\u8c61\u7684\u80fd\u529b\u7981\u6b62\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u4fdd\u6301\u5e95\u5c42\u80fd\u529b\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u4f7f\u7528")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7c7b\u578b\u68c0\u67e5")),(0,n.kt)("p",null,"TypeScript\u6709\u5f88\u597d\u7684\u7684\u7c7b\u578b\u68c0\u67e5\uff0c\u4f46\u662f\u5f80\u5f80\u5f3a\u7c7b\u578b\u7684\u8bed\u8a00\u4e5f\u6709\u4e00\u5b9a\u7684\u9650\u5236\uff0c\u4f8b\u5982\u4e0d\u5141\u8bb8\u50cflua\u4e00\u6837\uff0c\u5728\u540c\u4e00\u4f5c\u7528\u57df\u5185\u76f8\u540c\u7684\u53d8\u91cf\u540d\u79f0\u6539\u53d8\u7c7b\u578b\uff0c\u53e6\u5916\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u4e00\u822c\u7c7b\u578b\u68c0\u67e5\u8fd9\u79cd\u529f\u80fd\u5728\u8fd0\u884c\u65f6\u4e5f\u662f\u5b58\u5728\u7684\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5bf9\u4e8e\u8fd0\u884c\u65f6\u4e0d\u518d\u5fc5\u987b\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u88ab\u68c0\u67e5\u8fc7\u7684\u6e90\u7801\u6ca1\u6709\u88ab\u4fee\u6539\uff0c\u4e00\u822c\u8bed\u8a00\u4e0d\u4f1a\u628a\u8fd9\u4e2a\u529f\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u53ef\u9009\u9879"),(0,n.kt)("p",null,"\u56e0\u6b64\u6709\u5fc5\u8981\u8bbe\u8ba1\u4e00\u79cd\u7c7b\u578b\u68c0\u67e5\uff0c\u5b83\u53ef\u4ee5\u88ab\u79fb\u9664\uff0c\u4f7f\u5f97\u4ec5\u5728\u7f16\u8f91\u65f6\u53d1\u751f\u4f5c\u7528\uff0c\u800c\u4e00\u65e6\u53d1\u5e03\u4e4b\u540e\uff0c\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u4e0d\u9700\u8981\u8fd9\u4e2a\u7c7b\u578b\u68c0\u67e5\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd8\u662f\u4f1a\u4fdd\u7559\u5168\u90e8\u7684\u6e90\u4ee3\u7801\u4fe1\u606f\u3002\u5e76\u4e14\u81ea\u5b9a\u4e49\u7684\u7c7b\u578b\u68c0\u67e5\u53ef\u4ee5\u5bb9\u8bb8\u66f4\u5c11\u7684\u9650\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u600e\u6837\u4e3aLua\u6dfb\u52a0\u65b0\u7684\u8bed\u6cd5")),(0,n.kt)("p",null,"\u53c2\u8003TypeScript\u76f8\u5bf9\u4e8eJavaScript \u6dfb\u52a0\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"Unity DOTS\u4e3a\u4ec0\u4e48\u6ca1\u6709\u9ed8\u8ba4\u628aSystem\u4e2d\u7684\u5e76\u884c\u6027\u6307\u5b9a\u53bb\u6389\uff0c\u662f\u56e0\u4e3a\u4ed6\u5e0c\u671b\u517c\u5bb9\u4f20\u7edf\u7684Component\u811a\u672c\uff0c\u800c\u6309\u7167\u4f20\u7edf\u7684\u5199\u6cd5\uff0c\u6ca1\u6cd5\u53bb\u63a7\u5236\u884c\u4e3a\uff0c\u6240\u4ee5\u53ea\u80fd\u5f00\u53d1\u8005\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5426\u5219\u5c31\u9700\u8981\u50cfRoblox\u4e00\u6837\uff0c\u9700\u8981\u7528\u6237\u81ea\u5df1\u5c06\u811a\u672c\u6302\u5728entity\u4e0a\uff0c\u8fd9\u5c31\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u907f\u514d\u8ba9\u5f00\u53d1\u8005\u624b\u52a8\u5c06Component\u4e0eSystem\u4e4b\u95f4\u8fdb\u884c\u5173\u8054"),(0,n.kt)("p",null,"Minecraft\u901a\u8fc7\u76f4\u63a5\u5728\u5c5e\u6027\u4e2d\u8fdb\u884c\u7f16\u5199MOLANG\u4ee3\u7801\u6765\u907f\u514d\u8be5\u95ee\u9898"),(0,n.kt)("p",null,"\u4f8b\u5982\u5f00\u53d1\u8005\u770b\u5230\u7684\u6587\u4ef6\u6216\u8005\u5bf9\u8c61\u53ea\u6709Component\uff0c\u8fd9\u6837\u8feb\u4f7f\u5f00\u53d1\u8005\u5bf9\u6570\u636e\u8fdb\u884c\u62bd\u8c61\uff1b"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\uff0c\u6211\u4eec\u9996\u5148\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u8054\u4e00\u4e2aComponent\u548c\u4e00\u4e2aSystem\uff0c\u4ed6\u4eec\u5e94\u8be5\u81ea\u52a8\u5173\u8054\uff0c\u4f8b\u5982\u901a\u8fc7Component\u6765\u6253\u5f00\u5bf9\u5e94\u7684System\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91"),(0,n.kt)("p",null,"Component\u9664\u4e86\u81ea\u8eab\u7684\u903b\u8f91\u5c5e\u6027\uff0c\u53e6\u5916\u4e00\u4e9b\u5c5e\u6027\u7528\u6765\u63a7\u5236\u7cfb\u7edf\u7ed3\u6784\uff0c\u4f8b\u5982System\u6267\u884c\u7684\u987a\u5e8f\u7b49\uff0c\u53ef\u4ee5\u5728Component\u4e2d\u660e\u786e\u533a\u5206\u4e24\u79cd\u6570\u636e\uff0c\u6216\u8005\u8fd9\u4e9b\u56fa\u5b9a\u7ed3\u6784\u7684\u6570\u636e\u5c31\u4ee5\u4e00\u4e2aComponent\u672c\u8eab\u7684Property\u5f62\u5f0f\u663e\u793a\uff0c\u907f\u514d\u5f00\u53d1\u8005\u5199\u9519"),(0,n.kt)("p",null,"\u4f46System\u53ef\u80fd\u9700\u8981\u591a\u4e2aComponent\u7684\u6570\u636e\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u4e00\u4e2aSystem\u5fc5\u987b\u5bf9\u5e94\u4e00\u4e2a\u4e3bComponent\uff08\u5373\u4f7f\u8fd9\u4e2aComponent\u53ef\u80fd\u53ea\u662f\u4e00\u4e2a\u540d\u5b57\uff0c\u800c\u5e76\u6ca1\u6709\u4efb\u4f55\u6570\u636e\uff0c\u662f\u6709\u8fd9\u79cd\u60c5\u51b5\u7684\uff0c\u5c31\u662f\u67d0\u4e9b\u903b\u8f91\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff0c\u4ed6\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5bf9\u591a\u79cd\u903b\u8f91\u8fdb\u884c\u8ba1\u7b97\u7684\u4e00\u4e2a\u7ec4\u5408\u903b\u8f91\uff0c\u4f46\u662f\u8fd9\u79cd\u5e94\u8be5\u5f88\u5c11\u624d\u5bf9\uff0c\u6bd5\u7adf\u5927\u90e8\u5206System\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u81ea\u5df1\uff0c\u5176\u4ed6\u7684\u662f\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff09\uff0c\u8fd9\u6837\u4ecd\u7136\u53ef\u4ee5\u5c06System\u9690\u85cf\u5728Component\u4e2d\uff0c\u4f46\u662fSystem\u81ea\u8eab\u80fd\u591f\u6307\u5b9a\u5f15\u7528\u7684\u5176\u4ed6Component\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff0c\u4e5f\u5373\u662f\u5728\u5b9a\u4e49ArchType\uff0c\u53ef\u4ee5\u5728System\u7684\u9876\u90e8\u4f7f\u7528\u7c7b\u4f3c\u3002"),(0,n.kt)("p",null,"XXXComponent a;"),(0,n.kt)("p",null,"BBBComponent b; "),(0,n.kt)("p",null,"\u7136\u540e\u5728\u6b63\u6587\u4e2d\u5c31\u53ef\u4ee5\u5f15\u7528\u8fd9\u4e9b\u5bf9\u8c61\uff0c\u89e3\u91ca\u5668\u4f1a\u81ea\u52a8\u5c06\u8be5\u53d8\u91cf\u4eceEntity\u4e2d\u8fdb\u884c\u67e5\u8be2\uff0c\u5e76\u4e14\u68c0\u67e5\u5982\u679cEntity\u4e0d\u5305\u542b\u8be5Component\u7684\u65f6\u5019\u8fdb\u884c\u81ea\u52a8\u6dfb\u52a0\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u68c0\u67e5\u5197\u4f59\uff0c\u5373\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u4f7f\u7528\u5219\u4e0d\u9700\u8981\u6dfb\u52a0"),(0,n.kt)("p",null,"\u4f46\u662fComponent\u7684\u7248\u672c\u53f7\u5728\u54ea\u91cc\u8bbe\u7f6e\uff0c\u4f7f\u7528\u660e\u660e\u7a7a\u95f4\u52a0\u7248\u672c\u53f7\uff1f"),(0,n.kt)("p",null,"BBBBComponent(reality:name,1.2.3)"),(0,n.kt)("p",null,"\u600e\u4e48\u9ed8\u8ba4\u6307\u5b9a\uff1f"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u80af\u5b9a\u662f\u5148\u4e0b\u8f7d\u4e86\u4e00\u4e2a\u5305\u542bComponent\u7684\u5305\u518d\u8fdb\u884c\u7f16\u7a0b\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u80fd\u6709\u51b2\u7a81\uff0c\u6240\u4ee5\u6700\u597d\u662f\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u800c\u4e0d\u662f\u81ea\u52a8\u5206\u914d\uff0c\u56e0\u4e3a\u603b\u6709\u4e00\u4e2a\u5730\u65b9\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u4f7f\u7528\u5355\u72ec\u7684\u914d\u7f6e\u6587\u4ef6\u770b\u8d77\u6765\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python\u5d4c\u5165 (Embed in Python)"),"\u3002Python\u6781\u5176\u6613\u4e8e\u5b66\u4e60\u5e76\u4e14\u88ab\u5e7f\u6cdb\u91c7\u7528\u3002Taichi\u7684\u524d\u7aef\u8bed\u6cd5\u662fPython\u7684\u5b50\u96c6\uff0c\u8fd9\u4f7f\u5f97\u4efb\u4f55\u4e00\u4e2aPython\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u8f7b\u6613\u5730\u5b66\u4e60\u3001\u4f7f\u7528Taichi\u3002\u6211\u4eec\u4f7f\u7528Python AST\u7075\u6d3b\u7684\u81ea\u7701 (inspection) \u673a\u5236\u6765\u628aPython\u7684AST\u8f6c\u5316\u4e3aTaichi\u7684AST\uff0c\u968f\u540e\u8fdb\u5165\u6211\u4eec\u81ea\u5df1\u7684\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7cfb\u7edf\u3002\u5c06Taichi\u7684\u524d\u7aef\u5d4c\u5165\u8fdbPython\u6709\u5982\u4e0b\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u8fd0\u884c\u3002\u5d4c\u5165\u5728\u89e3\u91ca\u6027\u7684Python\u8bed\u8a00\u800c\u4e0d\u662f\u7f16\u8bd1\u6027\u7684\u8bed\u8a00\u4e2d\uff0c\u5927\u5927\u65b9\u4fbf\u4e86Taichi\u7a0b\u5e8f\u7684\u8fd0\u884c\uff0c\u56e0\u4e3a\u6bcd\u4f53\u8bed\u8a00\u7684\u9884\u5148\u7f16\u8bd1 (ahead-of-time compilation) \u4e0d\u518d\u9700\u8981\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u91cd\u7528\u5df2\u6709\u7684Python\u57fa\u7840\u8bbe\u65bd\u5e76\u4e0e\u5176\u4ea4\u4e92\uff0c\u5305\u62ecIDE (PyCharm\u7b49)\u3001\u5305\u7ba1\u7406\u5668 (pip)\u3001\u5df2\u6709\u7684Python\u5305\uff08\u5982matplotlib\u3001numpy\u3001torch\u7b49\uff09\u3002")),(0,n.kt)("p",null,"\u5373\u65f6 (Just-in-time, JIT) \u7f16\u8bd1\u3002JIT\u4e0d\u4f46\u63d0\u4f9b\u4e86\u6781\u5f3a\u7684\u7f16\u7a0b\u7075\u6d3b\u6027\uff0c\u8fd8\u5ef6\u8fdf\u4e86\u201d\u7f16\u8bd1\u671f\u5e38\u91cf\u201c\u7684\u9700\u6c42\u3002\u6bd4\u5982\uff0c\u5728\u7269\u7406\u6a21\u62df\u5668\u4e2d\uff0c\u65f6\u95f4\u6b65\u957f \u2206t \u901a\u5e38\u88ab\u5b9e\u73b0\u6210\u8fd0\u884c\u65f6\u53d8\u91cf\uff0c\u800c\u4f7f\u7528JIT\u7684\u65f6\u5019\u5219\u53ef\u4ee5\u88ab\u5904\u7406\u6210\u7f16\u8bd1\u671f\u5e38\u91cf\u3002\u8fd9\u5141\u8bb8\u7f16\u8bd1\u5668\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\uff0c\u5982\u5e38\u91cf\u6298\u53e0 (constant folding)\u3002\u540c\u65f6\uff0cTaichi\u652f\u6301\u6a21\u677f\u5143\u7f16\u7a0b\uff0c\u4f34\u968f\u7740JIT\u7684\u61d2\u60f0\u7f16\u8bd1\u6280\u672f\u5927\u91cf\u8282\u7701\u4e86\u4e0d\u5fc5\u8981\u7684\u7f16\u8bd1\u65f6\u95f4\u3002\u53e6\u5916\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u8fd0\u884cPython\u7684\u73af\u5883\uff0c\u5982\u79fb\u52a8\u7aef\u8bbe\u5907\uff0c\u6211\u4eec\u4e5f\u63d0\u4f9b\u63d0\u524d\u7f16\u8bd1 (Ahead of time, AOT) \u76f8\u5173\u8bbe\u65bd"),(0,n.kt)("p",null,"\u5bf9\u5927\u4f17\u7528\u6237\u3001\u6216\u8005\u504f\u7f8e\u672f\u3001\u827a\u672f\u7c7b\u7528\u6237\uff0c\u6700\u597d\u7684\u811a\u672c\u8bed\u8a00\u662f\u4ec0\u4e48\uff1f\u56fe\u5f62\u5316\u7684\u5417\uff1f\u4ed6\u5e94\u8be5\u5177\u6709\u4e24\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e00\u822c\u7528\u6237\u53cb\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408\u6570\u636e\u9a71\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408DSL\u7f16\u8bd1\u5904\u7406")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff1a")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u662f\u9762\u5411\u4e8b\u4ef6\u7f16\u7a0b\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u5199\u7684\u6240\u6709\u903b\u8f91\u51e0\u4e4e\u90fd\u662f\u5728\u6bcf\u4e00\u4e2aframe\u7684\u67d0\u4e2a\u4e8b\u4ef6\u4e2d\u53d1\u751f\u7684\u4e8b\u60c5\uff0c\u4f8b\u5982\u5728Unreal\u7684\u84dd\u56fe\u4e2d\uff0c\u5b83\u7684\u8d77\u70b9\u4e5f\u662f\u9488\u5bf9\u67d0\u4e2a\u4e8b\u4ef6\uff0c\u8fd9\u6709\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u7684\u7c92\u5ea6\uff0c\u6e38\u620f\u903b\u8f91\u4e2d\uff0c\u51e0\u4e4e\u4e3b\u8981\u903b\u8f91\u90fd\u662f\u4e8b\u4ef6\u9a71\u52a8\uff0c\u56e0\u6b64\u8be6\u7ec6\u7684\u4e8b\u4ef6\u975e\u5e38\u591a\uff0c\u6240\u4ee5\u5927\u90e8\u5206\u90fd\u662f\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u7531\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u72b6\u6001\u673a\u6765\u8fdb\u884c\u7ba1\u7406\uff0cFramework\u5c42\u53ea\u6709\u51e0\u4e2a\u57fa\u672c\u7684\u6e38\u620f\u751f\u547d\u5468\u671f\u4e8b\u4ef6\uff0c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4e4b\u95f4\u6ca1\u6709\u6807\u51c6\uff0c\u6216\u8005\u975e\u5e38\u590d\u6742\uff0c\u4e0d\u65b9\u4fbf\u7ef4\u62a4")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u4e0e\u903b\u8f91\u4e0d\u4e00\u81f4\uff0c\u50cfUE\u7684\u84dd\u56fe\u662f\u57fa\u4e8e\u4e8b\u4ef6\u7f16\u7a0b\uff0c\u5982\u679c\u6211\u4eec\u8981\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\u7ed9\u666e\u901a\u7528\u6237\uff0c\u8fd9\u79cd\u6ca1\u6709\u6807\u51c6\u7684\u4e8b\u4ef6\u5b9a\u4e49\u5e76\u4e0d\u9002\u5408\u8ba9\u7528\u53bb\u53bb\u5b66\u4e60\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u901a\u5e38\u4e5f\u6ca1\u6709\u5fc5\u7136\u7684\u903b\u8f91\u8054\u7cfb\uff0c\u4e0d\u5bb9\u6613\u7406\u89e3\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u53ef\u80fd\u5bf9\u5e94\u591a\u4e2a\u4e8b\u4ef6\uff0c\u663e\u7136\u7528\u6237\u9700\u8981\u4e86\u89e3\u7684\u662f\u903b\u8f91\uff0c\u800c\u975e\u4e8b\u4ef6")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u6240\u4ee5\u5e73\u53f0\u5927\u90e8\u5206\u90fd\u5728\u8bbe\u8ba1\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u4e5f\u4fbf\u4e8e\u7406\u89e3\uff0c\u540c\u65f6\u5b83\u4ee3\u8868\u7684\u4e0d\u662f\u6700\u5c0f\u903b\u8f91\uff0c\u800c\u662f\u903b\u8f91\u6a21\u5757\uff0c\u6240\u4ee5\u4ed6\u5c06\u903b\u8f91\u5185\u90e8\u7684\u5b9e\u73b0\u7ec6\u8282\uff08\u4f17\u591a\u7684\u788e\u7247\u4e8b\u4ef6\uff09\u8fdb\u884c\u9690\u85cf")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4e5f\u4ee3\u8868\u63a5\u53e3\uff0c\u6570\u636e\u7684\u6807\u51c6\u6709\u52a9\u4e8e\u6784\u5efa\u7ed3\u6784\u5316\u8868\u8fbe\uff0c\u662f\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ee5\u4e00\u79cd\u66f4\u6e05\u6670\u7684\u65b9\u5f0f\u7ec4\u7ec7"))),(0,n.kt)("p",null,"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5c31\u50cfHoudini \u4e2d\u9762\u5411Node\u7f16\u7a0b\u4e00\u6837\uff0c\u4e00\u6bb5Python \u4ee3\u7801\u662f\u53d7\u9650\u7684\uff0c\u5b83\u7684\u8f93\u5165\u8f93\u51fa\u662fnode \uff0c\u540c\u65f6\u53c8\u53ef\u4ee5\u4f7f\u7528\u5230python \u672c\u8eab\u7684\u4efb\u610f\u8bed\u8a00\u7279\u6027\u548c\u80fd\u529b\uff1b\u4e0e\u6b64\u7c7b\u4f3c\uff0c\u9762\u5411\u6570\u636e\u7f16\u7a0b\u4e5f\u662f\u9488\u5bf9\u4e00\u4e2a\u7279\u5b9a\u7684\u201c\u6570\u636e\u201d\u7f16\u5199\u811a\u672c\uff0c\u7528\u6237\u7f16\u5199\u7684\u662fSystem\uff0c\u4ed6\u7684\u8f93\u5165\u8f93\u51fa\u662f\u6570\u636eComponent "),(0,n.kt)("p",null,"\u4f46\u8ddf\u4f20\u7edf\u7684ECS\u67b6\u6784\u4e0d\u4e00\u6837\u7684\u662f\uff0c\u5b83\u7684Component \u548cSystem\u4e4b\u95f4\u4e0d\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c\u751a\u81f3\u4e0d\u662f\u81ea\u52a8\u6302\u8f7d\u7684\uff0c\u8fd9\u4e2a\u673a\u5236\u975e\u5e38\u91cd\u8981\uff0c\u4e00\u4e2aComponent \u7406\u8bba\u4e0a\u53ef\u4ee5\u88ab\u591a\u4e2aSystem\u6d88\u8d39\uff0c\u5f53\u7136\u901a\u5e38\u4e00\u4e2a\u7279\u5b9a\u7684Entity\u5b9e\u4f8b\u53ea\u6709\u4e00\u5bf9Component \u4e0eSystem\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u7406\u8bba\u4e0a\u5bf9\u4e00\u4e2a\u5b9e\u4f8b\u7684\u4e00\u4e2a\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u64cd\u4f5c\u903b\u8f91\uff0c\u9664\u975e\u591a\u4e2aSystem\u4e4b\u95f4\u903b\u8f91\u4e0d\u4e00\u6837\uff0c\u4ed6\u4eec\u53ef\u80fd\u504f\u91cd\u6570\u636e\u7684\u67d0\u4e00\u90e8\u4efd\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u6570\u636e\u7684\u7c92\u5ea6\u592a\u5927\u4e86\uff0c\u53ef\u4ee5\u518d\u8fdb\u4e00\u6b65\u7ec6\u5206\uff0c\u5f53\u7136\u53ef\u80fd\u6709\u4e00\u4e9b\u7279\u4f8b\u9700\u8981\u7ef4\u6301\u8f83\u5927\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u4f7f\u5f97app\u5305\u91cc\u53ef\u80fd\u5305\u542b\u4e00\u4e2a\u6570\u636e\u5b9a\u4e49\u7684\u591a\u79cd\u903b\u8f91\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u4f7f\u7528\u81ea\u52a8\u6302\u8f7d\uff0c\u800c\u9700\u8981\u4f9d\u8d56\u4e8e\u7248\u672c\u5236\u5b9a\uff0c\u5728\u5f00\u53d1\u6216\u751f\u6210\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5c06\u4e00\u4e2aSystem\u6dfb\u52a0\u81f3\u4e00\u4e2aEntity\uff0c\u4ed6\u5c31\u751f\u6210\u5bf9\u5e94\u7684System\u5f15\u7528\u548c\u7248\u672c\u53f7\uff0c\u52a0\u8f7d\u7684\u65f6\u5019\u662f\u6839\u636e\u8fd9\u4e2a\u8fdb\u884c\u903b\u8f91\u6302\u8f7d\uff0c\u5f53\u7136\u4e00\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u672c\u8eab\u5728\u9876\u5c42\u4e5f\u4f1a\u8bb0\u5f55\u6240\u6709\u5f15\u7528\u7684Component\u548cSystem\uff0c\u8fd9\u6837\u4fbf\u4e8e\u9884\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6bd4\u5982\u5982\u679c\u6570\u636e\u662f\u6d89\u53ca\u52a8\u753b\uff0c\u5219\u6570\u636e\u5305\u542b\u52a8\u753b\u65f6\u95f4\u548c\u5f53\u524dframe number \u7b49\u52a8\u753b\u4fe1\u606f"),(0,n.kt)("p",null,"\u628a\u6570\u636e\u5f53\u4f5c\u4e00\u4e2a\u7c7b\u4f3cHoudini \u91cc\u9762\u7684\u53ef\u89c6\u8282\u70b9\uff0cSystem\u662f\u53e6\u4e00\u79cd\u7c7b\u578b\u7684\u8282\u70b9\uff0c\u62d6\u52a8\u4efb\u610f\u4e00\u4e2a\u8282\u70b9\u5230\u4e00\u4e2aEntity\u4f1a\u81ea\u52a8\u52a0\u8f7d\u53d8\u91cf\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u7ec4\u4ef6\u7248\u672c\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Creation Script")," "),(0,n.kt)("p",null,"\u5b83\u7684\u8bed\u6cd5\u90e8\u5206\u63a5\u8fd1Lua\uff0c\u4f46\u662f\u56e0\u4e3a\u6240\u6709Table\u5168\u90e8\u7531Table Engine\u63a5\u7ba1\uff0c\u811a\u672c\u4e2d\u53ea\u6709\u7d22\u5f15\u548c\u57fa\u672c\u7c7b\u578b\uff0c\u4e0d\u5b58\u5728\u5806\u4e2d\u5206\u914d\u7684\u5bf9\u8c61\uff0c\u6240\u4ee5\u4e0d\u9700\u8981GC"),(0,n.kt)("p",null,"\u811a\u672c\u53ea\u6709\u7b80\u5355\u7684\u8ba1\u7b97\u548c\u51fd\u6570\u5f62\u5f0f\uff0c\u6240\u6709\u64cd\u4f5c\u5bf9\u8c61\u7edf\u4e00\uff0c\u51fd\u6570\u53ea\u6709\u7b80\u5355\u7684\u6570\u503c\u64cd\u4f5c\uff0c\u5bf9\u8c61\u90fd\u7531\u5e95\u5c42\u5206\u914d"),(0,n.kt)("p",null,"\u811a\u672c\u8d1f\u8d23\u51fd\u6570\u5185\u7684\u6808\u4e0a\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5e95\u5c42\u8d1f\u8d23\u5806\u4e0a\u5185\u5b58\u5206\u914d"),(0,n.kt)("p",null,"\u8fd9\u5f97\u76ca\u4e8e\u7edf\u4e00\u7684\u6570\u636e\u7ed3\u6784\u548c\u5185\u5b58\u7ba1\u7406"),(0,n.kt)("h3",{id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868"},"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u7684\u6838\u5fc3\u610f\u4e49\u5728\u4e8e\uff0c\u8ba9\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u4ea4\u4e92\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u662f\u8fd9\u6837\uff0c\u90a3\u4e48\u6211\u4eec\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5c31\u53ea\u80fd\u4f9d\u8d56\u4e8e\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u6bcf\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u53ea\u80fd\u72ec\u7acb\u5de5\u4f5c\u800c\u4e0d\u80fd\u76f8\u4e92\u4ea4\u4e92\uff08\u5728\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u6d41\u7a0b\u4e2d\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u53d8\u91cf\u8d4b\u503c\u548c\u5f15\u7528\u624b\u52a8\u5efa\u7acb\u8d77\u4e86\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff09")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u9690\u542b\u7684\u903b\u8f91\u662f\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u6d89\u53ca\u7684\u53d8\u91cf\u5e94\u8be5\u8db3\u591f\u5c11\uff0c\u5927\u90e8\u5206\u5e94\u8be5\u662f\u5185\u90e8\u72b6\u6001"),"\uff0c\u4f8b\u5982COC\u4e2d\u7684Cannon\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Damage per second: 11\nHitpoints : 650/650\n\nRange : 4-11tiles\nDamage type : Area Splash\nTargets : Ground\nFavorite target : Any\n")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc-cannon",src:l(1077).Z,width:"2532",height:"1170"}),"\u7b26\u53f7\u8868\u4f7f\u6211\u4eec\u66f4\u52a0\u5c0f\u5fc3\u5730\u5b9a\u4e49\u6211\u4eec\u7684\u53d8\u91cf\uff0c\u4f7f\u5f97\u4e0d\u90a3\u4e48\u968f\u610f\uff0c\u7b26\u53f7\u8868\u7684\u5168\u5c40\u901a\u7528\u6027\u5730\u4f4d\u4f7f\u6211\u4eec\u66f4\u597d\u5730\u5730\u62bd\u8c61\u903b\u8f91\uff0c\u786e\u4fdd\u8bbe\u7f6e\u786e\u5b9e\u7684\u53cd\u5e94\u903b\u8f91\u72b6\u6001\u7684\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7b26\u53f7\u8868\u662f\u4e00\u79cd\u5f88\u597d\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u5f88\u5bb9\u6613\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u7684\u5185\u90e8\u4e34\u65f6\u53d8\u91cf\u548c\u5bf9\u5916\u8868\u73b0\u7279\u5f81\u7684\u91cd\u8981\u72b6\u6001\u53d8\u91cf\u533a\u5206\u51fa\u6765\uff0c\u903b\u8f91\u66f4\u597d\u6e05\u6670\u3002\u4f7f\u5f97\u4ee3\u7801\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ed6\u4eba\u9605\u8bfb\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\nnamespace Global{\n iHP //\u8868\u793a\u8840\u91cf\n iHelath //\n iCoin //\n vfPosition\n sLabelName //\u7528\u4e8eUI\u663e\u793a\u540d\u79f0\n}\n")),(0,n.kt)("p",null,"\u5f53\u7136\u7b26\u53f7\u8868\u66f4\u91cd\u8981\u7684\u4ef7\u503c\u662f\uff0c\u5b9e\u73b0\u7ec4\u4ef6\u4e4b\u95f4\u76f8\u4e92\u8c03\u7528\u7684\u9690\u5f0f\u53c2\u6570\u4f20\u9012\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u901a\u5e38\u662f\u6bd4\u8f83\u5c11\u7684\u53d8\u91cf\uff0c\u5728OOP\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u5373\u662f\u4e24\u4e2a\u7c7b\u4e4b\u95f4\u65b9\u6cd5\u8c03\u7528\u7684\u53c2\u6570\uff0c\u5982\u679c\u6211\u4eec\u4e0d\u533a\u5206\u516c\u5171\u548c\u79c1\u6709\u53d8\u91cf\uff0c\u5219\u53ea\u8981\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u6709\u4f9d\u8d56\uff0c\u5c31\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e0a\u6709\u4e9b\u6570\u636e\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u56e0\u6b64\u5b83\u6709\u5229\u4e8e\u63d0\u5347\u6027\u80fd\uff0c\u53ea\u52a0\u8f7d\u6bcf\u4e2a\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8bbe\u7f6eout\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u5bf9\u5e94\u7684\u5c5e\u6027\u6570\u636e\u4f1a\u88ab\u81ea\u52a8\u586b\u5145\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u624b\u52a8\u7684\u53d8\u91cf\u5b9a\u4e49\u3001\u521d\u59cb\u5316\u548c\u53c2\u6570\u7684\u4f20\u9012\uff0c\u8fd9\u662f\u9690\u5f0f\u51fd\u6570\u8c03\u7528\u7684\u6838\u5fc3\u673a\u5236\u3002\u5f53\u7136\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u4fdd\u8bc1\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\u5e94\u8be5\u540c\u65f6\u5177\u6709\u6d88\u8d39\u8005\u548c\u903b\u8f91\u5904\u7406\uff0c\u5426\u5219\u8fd9\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e2a\u901a\u8fc7\u8bbe\u8ba1\u6765\u89c4\u907f\uff0c\u7f16\u8bd1\u5668\u53ef\u4ee5\u534f\u52a9\u63d0\u793a\uff0c\u56e0\u4e3a\u4e00\u4e2a\u6b63\u5e38\u7684\u8bbe\u8ba1\u80af\u5b9a\u662f\u4e24\u8005\u90fd\u6709\u7684\uff1b\u5f53\u7136\u4e5f\u6709\u53ef\u80fd\u4e00\u4e2a\u7ec4\u4ef6\u65e2\u5145\u5f53\u751f\u4ea7\u8005\u4e5f\u5145\u5f53\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u6700\u6838\u5fc3\u7684\u673a\u5236\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u8fd9\u6837\uff0c\u8981\u60f3\u5728\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u5fc5\u987b\u5b9a\u4e49\u4e00\u79cd\u534f\u8bae\uff0c\u8fd9\u79cd\u534f\u8bae\u901a\u5e38\u5c31\u662f\u4f20\u7edf\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u7684\u5f15\u7528\u673a\u5236\uff0c\u56e0\u4e3a\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u8fd0\u884c\u65f6\u53d8\u91cf\u53ef\u4ee5\u8bc6\u522b\uff0c\u8fd9\u5c31\u9700\u8981\u5728B\u4e2d\u5b9a\u4e49\u516c\u5171\u53d8\u91cf\uff0c\u7136\u540eA\u7ec4\u4ef6\u9700\u8981\u5f15\u7528B\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u5f62\u6210\u8026\u5408\uff0c\u4f46\u662f\u4e0d\u5f15\u7528\uff0c\u8bed\u8a00\u672c\u8eab\u7684\u673a\u5236\u6ca1\u6cd5\u4fdd\u8bc1\u54ea\u6015\u662f\u540c\u4e00\u4e2a\u540d\u5b57\u7684\u53d8\u91cf\u6267\u884c\u540c\u4e00\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u901a\u8fc7\u7b26\u53f7\u8868\uff0c\u6574\u4e2a\u4e8b\u60c5\u53d8\u5f97\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u53d8\u91cf\u53ea\u9700\u8981\u5b9a\u4e49\u76f8\u540c\u7684\u540d\u5b57\uff0c\u800c\u4e0d\u9700\u8981\u5f15\u7528\uff0c\u8fd9\u4e2a\u76f8\u540c\u7684\u540d\u5b57\u7531\u7b26\u53f7\u8868\u4fdd\u8bc1\uff0c\u800c\u4e0d\u662f\u5b57\u7b26\u4e32\uff0c\u56e0\u4e3a\u5b57\u7b26\u4e32\u53c8\u8bbe\u8ba1\u5bf9\u5e94\u7684\u89e3\u6790\uff0c\u5e26\u6765\u89e3\u91ca\u8d1f\u62c5\u3002\u800c\u4f20\u7edf\u7f16\u8bd1\u5668\u4e2d\u7684\u7b26\u53f7\u8868\u5929\u751f\u5c31\u662f\u7528\u6765\u5c06\u591a\u4e2a\u540d\u5b57\u76f8\u540c\u7684\u7b26\u53f7\u6307\u5411\u540c\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4e86\u901a\u7528\u8bed\u8a00\u4e2d\u53ea\u80fd\u901a\u8fc7\u5f15\u7528\u6765\u5b9e\u73b0\u53c2\u6570\u4f9d\u8d56\u548c\u4f20\u9012\uff0c\u800c\u8fd9\u79cd\u4f9d\u8d56\u662f\u5bfc\u81f4\u6ca1\u6cd5\u7b80\u5316\u7f16\u7a0b\u751a\u81f3\u65e0\u4ee3\u7801\u7f16\u7a0b\u7684\u6839\u672c\u539f\u56e0\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7b26\u53f7\u8868\u673a\u5236\u4e0d\u9002\u5408\u901a\u7528\u8bed\u8a00\uff0c\u5b83\u662f\u6e38\u620f\u8fd9\u79cdUpdate\u673a\u5236\u76f8\u7ed3\u5408\u624d\u80fd\u53d1\u6325\u4f5c\u7528\uff0c\u56e0\u4e3a\u4e24\u4e2aUpdate\u4e4b\u95f4\u7684\u65f6\u95f4\u5f88\u5c0f\uff0c\u6709\u53ef\u80fd\u901a\u8fc7\u5e27\u4e4b\u95f4\u7684\u53d8\u91cf\u5171\u4eab\u6765\u5b9e\u73b0\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u3002\u5426\u5219\u8fd9\u79cd\u673a\u5236\u5c31\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cd\u673a\u5236\u5fc5\u987b\u914d\u5408\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u5de5\u4f5c\uff0c\u6bd4\u5982\u5355\u7eaf\u96c6\u6210Lua\u6216\u8005C#\u662f\u4e0d\u591f\u7684\u3002"),(0,n.kt)("h4",{id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868"},"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u4e2d\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u52a8\u6001\u7684\uff0c\u4ee5\u63d0\u5347\u89e3\u91ca\u7684\u6027\u80fd\u3002\u56e0\u4e3a\u7b26\u53f7\u53ef\u80fd\u4f1a\u975e\u5e38\u591a\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u5728\u521b\u5efa\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6839\u636e\u9009\u62e9\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6240\u6709\u7528\u5230\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u52a8\u6001\u751f\u6210\u4e00\u4e2a\u7b26\u53f7\u8868\uff0c\u8fd9\u53ef\u4ee5\u662f\u4e91\u7aef\u7684\u4e00\u4e2a\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u4fee\u6539\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u91cd\u65b0\u751f\u6210\u65b0\u7684\u7b26\u53f7\u8868\u3002"),(0,n.kt)("h4",{id:"2212-\u7b26\u53f7\u8868"},"2.2.1.2 \u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u6240\u6709\u4ea4\u4e92\u90fd\u6765\u6e90\u4e8e\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u57fa\u672c\u4e0a\u5c31\u662f\u4e3a\u4e86\u4ea4\u4e92\u800c\u751f"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f15\u7528\u5c31\u662f\u4e3a\u4e86\u907f\u514d\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u76f4\u63a5\u5f15\u7528\u5f15\u5165\u4e86\u4ee3\u7801\u7f16\u7a0b\u601d\u60f3\uff0c\u9650\u5236\u4e86\u7ec4\u5408\u7684\u80fd\u529b\uff0c\u9664\u975e\u7ec4\u4ef6\u4e4b\u95f4\u5b8c\u5168\u72ec\u7acb\u65e0\u4ea4\u4e92\uff0c\u53ea\u8981\u4ea4\u4e92\u901a\u8fc7\u76f4\u63a5\u5f15\u7528\u5c31\u8026\u5408\u4e86\u7c7b\u578b\uff0c\u7b26\u53f7\u8868\u8fd9\u662f\u5b9e\u73b0\u7c7b\u578b\u89e3\u8026\u7684\u5173\u952e"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u9700\u8981\u662f\u516c\u5171\u8d44\u6e90\u7684\u5f62\u5f0f\u7ba1\u7406\uff0c\u7528\u6237\u53ef\u4ee5\u4e0b\u8f7d\u5f88\u591a\u5f00\u53d1\u8005\u5b9a\u4e49\u548c\u4e0a\u4f20\u7684\u7b26\u53f7\u8868\uff0c\u8fd9\u4e9b\u7b26\u53f7\u8868\u7531\u5f00\u53d1\u8005\u4e0a\u4f20\uff0c\u6bd4\u8f83\u6709\u540d\u7684\u7b26\u53f7\u8868\u53ef\u80fd\u4f1a\u5f97\u5230\u5f88\u591a\u5176\u4ed6\u5f00\u53d1\u8005\u7684\u652f\u6301\u548c\u517c\u5bb9\uff0c\u4ece\u800c\u5b9e\u73b0\u8de8\u5f00\u53d1\u8005\u4e4b\u95f4\u7684\u534f\u4f5c"),(0,n.kt)("p",null,"\u591a\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u4e5f\u53ef\u80fd\u6709\u91cd\u590d\uff0c\u9700\u8981\u7edf\u4e00\u7684\u673a\u5236\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f3a\u5316\u5168\u5c40\u8868\uff0c\u628a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u53d1\u5c55\u4e3a\u5168\u5c40\u8868"),(0,n.kt)("li",{parentName:"ul"},"\u5168\u5c40\u8868\u5206\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u5efa\u7acb\u8868\u4e4b\u95f4\u7684\u6620\u5c04\u548c\u5173\u8054\uff0c\u8fd9\u6bd4\u8f83\u590d\u6742")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u7c7b\u578b\u5f15\u7528\u90fd\u901a\u8fc7\u6570\u636e\u67e5\u627e"),(0,n.kt)("p",null,"\u4f46\u662f\u6570\u636e\u4e0d\u80fd\u5b8c\u5168\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"\u67d0\u79cd\u7a0b\u5ea6\u4e0a\uff0c\u6570\u636e\u7684\u7ec4\u5408\u624d\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"ECS\u7684\u6700\u5927\u95ee\u9898\u53ef\u80fd\u662f\u65e0\u6cd5\u533a\u5206\u7c7b\u578b\uff0c\u53ea\u6709\u5b9a\u4e49\u5b57\u7b26\u4e32\u6216\u8005\u679a\u4e3e\u6570\u503c\uff0ctag\u4e4b\u7c7b\u7684\uff1f\u8fd9\u4e9b\u7c7b\u578b\u7531\u53d8\u91cf\u7684\u503c\u800c\u4e0d\u662f\u7b26\u53f7\u672c\u8eab\u51b3\u5b9a\uff0c\u8fd9\u4e9b\u503c\u53ef\u4ee5\u6709\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u63a7\u5236"),(0,n.kt)("p",null,"\u4f46\u662ftag\u9700\u8981\u662f\u9488\u5bf9\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5b9e\u4f53"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f53\u53ef\u4ee5\u4efb\u610f\u590d\u6742\uff0c\u4ed6\u4e0d\u53ef\u80fd\u5177\u6709\u5355\u4e00\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u7c7b\u578b\u53ef\u80fd\u88ab\u591a\u79cd\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u5185\u5b58\u65e0\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5b9a\u4e49\u591a\u4e2a\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u5305\u542b\u81ea\u5df1\u7684\u6807\u7b7e\uff0c\u6216\u8005\u8de8\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6570\u636e\u5fc5\u987b\u662f\u7ed3\u6784\u4f53\u7b26\u53f7\uff0c\u8fd9\u6837\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u5305\u542b\u4e86\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u5c5e\u6027\u91cd\u590d\u7684\u7ed3\u6784\u4f53\uff0c\u4f46\u8fd9\u6ca1\u5173\u7cfb\uff0c\u672c\u8eab\u6570\u636e\u5c31\u662f\u6709\u4e0d\u540c\u610f\u4e49\u7684\uff0c\u5373\u4f7f\u6570\u636e\u7ed3\u6784\u5dee\u4e0d\u591a"),(0,n.kt)("p",null,"\u8003\u8651\u53ea\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u602a\u7269\u7684\u8840\u91cf\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u7c7b\u578b\u6807\u5fd7\u5e94\u8be5\u662f\u8ddfHP\u5173\u8054\u5728\u4e00\u8d77\uff0c\u8fd8\u662f\u8ddf\u602a\u7269\u5b9e\u4f53\u5462\uff1f"),(0,n.kt)("p",null,"\u9700\u8981\u4e00\u4e2a\u4e07\u80fd\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u4e00\u4e2a\uff0c\u4f46\u662f\u540d\u5b57\u76f8\u540c\uff0c\u7f16\u8bd1\u5668\u4fdd\u8bc1\u91cd\u590d\u95ee\u9898"),(0,n.kt)("p",null,"\u539f\u5b50\u201c\u6570\u636e\u201d"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u6216\u8005\u6570\u636e\u5217\u8868\u5e94\u8be5\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u4e2a\u6570\u636e\u7684\u7ec4\u5408\u5e94\u8be5\u5145\u5f53\u7c7b\u578b\uff0c\u8868\u793a\u4e00\u7c7b\u529f\u80fd\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u6bd4\u5982HP\u548cHealth \u901a\u5e38\u662f\u7ec4\u5408\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u5355\u72ec\u4f7f\u7528HP\uff0c\u5982\u679c\u6709\u591a\u79cd\u7c7b\u578b\u90fd\u9700\u8981\u4f7f\u7528HP\uff0c\u8fd9\u5c31\u9700\u8981\u5b9a\u4e49\u4e00\u4e2a\u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6ca1\u95ee\u9898\uff0c\u7b26\u53f7\u8868\u7684\u610f\u4e49\u5e76\u4e0d\u662f\u5168\u90e8\u6253\u6563\u6210\u72ec\u7acb\u7684\u7b26\u53f7\uff0c\u800c\u662f\u4e3a\u4e86\u907f\u514d\u7c7b\u578b\u5f15\u7528\uff0c\u4f46\u6709\u4e00\u4e0b\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u53ef\u4ee5\u4e3a\u540c\u4e00\u5b9e\u4f53\u6dfb\u52a0\u591a\u4e2aHP\uff0c\u8fd9\u9700\u8981\u5f00\u53d1\u8005\u7528\u6237\u6765\u907f\u514d")),(0,n.kt)("p",null,"\u6240\u4ee5\u7c7b\u578b\u770b\u8d77\u6765\u66f4\u591a\u5e94\u8be5\u662f\u7531\u7ec4\u4ef6\u7684\u6570\u636e\u5408\u4f5c\u9690\u5f0f\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u8db3\u591f\u677e\u6563\uff0c\u8fd9\u6837\u6765\u4fdd\u8bc1\u6700\u5927\u7684\u7075\u6d3b\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5b9a\u4e49\u7684TAG\u53d8\u91cf\u4e0d\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u4f46\u662f\u548c\u7b26\u53f7\u8868\u7c7b\u4f3c\u7684\u5b9a\u4e49\uff0c\u7f16\u8bd1\u5668\u7279\u6b8a\u5904\u7406"),(0,n.kt)("p",null,"\u6216\u8005TAG\u6570\u7ec4\u7ec4\u4ef6\u672c\u8eab\uff0c\u662f\u4e00\u4e2a\u7528\u6765\u53d6\u4ee3\u5f15\u7528\u7ec4\u4ef6\u7c7b\u578b\u540d\u79f0\u672c\u8eab\u7684\u4e00\u4e2a\u6807\u5fd7"),(0,n.kt)("h4",{id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"},"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u6982\u5ff5\u4e0a\uff0c\u7b26\u53f7\u8868\u8868\u793a\u7684\u662f\u4e00\u4e2a\u53d8\u91cf\u5c5e\u6027\uff0c\u6216\u8005\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u5b83\u7684\u76ee\u7684\u770b\u8d77\u6765\u5c31\u662f\u4e3a\u89e3\u8026\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u5f15\u7528\u670d\u52a1\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4ece\u7cfb\u7edf\u7684\u9700\u6c42\u4e0a\u770b\uff0c\u4e00\u4e2a\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u5305\u542b\u4e00\u4e2a\u5b8c\u6574\u7684\u5bf9\u67d0\u4e00\u4e9b\u4e8b\u60c5\u6216\u67d0\u4e00\u7c7b\u903b\u8f91\u7684\u4e00\u4e2a\u5b8c\u6574\u6570\u636e\u7ed3\u6784\uff0c\u56e0\u6b64\u5b83\u5b9a\u4e49\u7684\u662f\u4e00\u4e2a\u6807\u51c6\u3002\u53c2\u89c12.7\u8282\u3002"),(0,n.kt)("h4",{id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027"},"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u540d\u79f0\uff1a\u53ef\u4ee5\u505a\u4e00\u4e2a\u6620\u5c04\uff0c\u7f16\u8bd1\u5668\u76f4\u63a5\u5904\u7406\uff0c\u751a\u81f3\u7ec4\u4ef6\u53ef\u4ee5\u4e00\u952e\u5347\u7ea7\uff0c\u4ee3\u7801\u66ff\u6362\u6700\u65b0\u540d\u5b57"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7\uff1a\u5982\u679c\u53d1\u73b0\u7f3a\u5931\u76f8\u5173\u7b26\u53f7\uff0c\u76f8\u5173\u7684\u7ec4\u4ef6\u4e0d\u518d\u88ab\u89e3\u91ca/\u7f16\u8bd1\u4ec5\u7a0b\u5e8f\uff0c\u5e76\u63d0\u793a\u7528\u6237\u7ec4\u4ef6\u8fc7\u671f\uff0c\u9700\u8981\u66f4\u65b0\uff1b\u8fd9\u90e8\u5206\u901a\u77e5\u901a\u8fc7Reality World\u8fdb\u884c\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7\uff1a\u4f1a\u901a\u77e5\u5f00\u53d1\u8005\uff0c\u5efa\u8bae\u5f00\u53d1\u8005\u652f\u6301")),(0,n.kt)("h4",{id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf"},"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7ec4\u4ef6\u5e76\u4e0d\u771f\u6b63\u7684\u5b9a\u4e49\u53d8\u91cf\uff0c\u4f8b\u5982\u5b83\u53ea\u80fd\u9009\u62e9\u53d8\u91cf\uff0c\u4f46\u662f\u4e0d\u80fd\u51b3\u5b9a\u53d8\u91cf\u7684\u7c7b\u578b\uff1b\u6b64\u5916\uff0c\u5b83\u5b58\u5728\u7740\u91cd\u590d\u5b9a\u4e49\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u59822.7.16.5\u8282\u63cf\u8ff0\u7684\u91cd\u590d\u5b9a\u4e49\u53d8\u91cf\u7684\u95ee\u9898\uff0c\u7ec4\u4ef6\u4e2d\u7684\u53d8\u91cf\u5b9a\u4e49\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u3002\u6574\u4e2a\u53d8\u91cf\u5b9a\u4e49\u548c\u4f7f\u7528\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u552f\u4e00\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf\uff0c\u4f46\u5176\u5b9e\u5b83\u5e76\u6ca1\u6709\u5206\u914d\u5185\u5b58\uff0c\u4f46\u5b83\u51b3\u5b9a\u4e86\u53d8\u91cf\u7684\u7c7b\u578b\u548c\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u4e2d\u5f15\u7528\u7b26\u53f7\u8868\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u4f46\u4e5f\u4e0d\u662f\u7b80\u5355\u7684\u5f15\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u4e00\u4e2a\u5bf9\u8c61\u7b2c\u4e00\u6b21\u9047\u5230\u67d0\u4e2a\u7b26\u53f7\u65f6\uff0c\u5b83\u5728\u8be5\u5bf9\u8c61\u4e0a\u6dfb\u52a0\u8be5\u53d8\u91cf\uff0c\u5e76\u5206\u914d\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u540e\u7eed\u7684\u7ec4\u4ef6\u5f15\u7528\u76f8\u540c\u7684\u53d8\u91cf\u65f6\uff0c\u5b83\u59cb\u7ec8\u5c06\u5730\u5740\u6307\u5411\u524d\u9762\u5206\u914d\u597d\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u89c12.7.16.5\u8282\u7684\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h4",{id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"},"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b26\u53f7\u5e94\u8be5\u5b9a\u4e49\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u6570\u636e\u96c6\u5408\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Position {\n float x;\n float y;\n float z;\n}\n")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u4ee5\u4e0a\u7684\u5c5e\u6027\u603b\u662f\u540c\u65f6\u51fa\u73b0\uff0c\u90a3\u4e48\u5c06\u5b83\u4eec\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\u3002"),(0,n.kt)("p",null,"\u5c06\u591a\u4e2a\u76f8\u5173\u7684\u7b26\u53f7\u5b9a\u4e49\u5728\u4e00\u8d77\uff0c\u4f1a\u8feb\u4f7f\u8fd9\u4e9b\u53d8\u91cf\u603b\u662f\u5b58\u50a8\u5728\u540c\u4e00\u4e2a\u5bf9\u8c61\u4e0a\uff0c\u907f\u514d\u4e86\u51fd\u6570\u56e0\u4e3a\u591a\u4e2a\u53c2\u6570\u5206\u5e03\u5728\u591a\u4e2a\u5bf9\u8c61\u4e0a\u5bfc\u81f4\u7684\u591a\u5c42\u5d4c\u5957\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"},"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"),(0,n.kt)("p",null,"\u9664\u4e86\u90a3\u4e9b\u5904\u4e8e\u5d4c\u5957\u51fd\u6570\u6700\u5e95\u5c42\u7684\u51fd\u6570\u6240\u6d88\u8d39\u7684\u5c5e\u6027\uff0c\u8fd9\u7c7b\u5c5e\u6027\u901a\u5e38\u4e0d\u4f1a\u89e6\u53d1\u5176\u4ed6\u7684\u51fd\u6570\u6267\u884c\u8ba1\u7b97\uff08\u663e\u793a\u3001\u5b58\u50a8\u4e4b\u7c7b\u7684\u51fd\u6570\u9664\u5916\uff09\uff0c\u5927\u90e8\u5206\u5c5e\u6027\u9664\u4e86\u6570\u503c\u672c\u8eab\uff0c\u8fd8\u5177\u6709\u901a\u77e5\u5c5e\u6027\uff1a\u5373\u544a\u77e5\u5176\u4ed6\u76f8\u5173\u7ec4\u4ef6\uff0c\u6211\u7684\u6570\u503c\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u76f8\u5173\u7ec4\u4ef6\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u503c\u6ca1\u6709\u53d1\u751f\u4efb\u4f55\u53d8\u5316\uff0c\u6839\u636e\u7ec4\u4ef6\u4f5c\u4e3a\u7eaf\u51fd\u6570\u7684\u673a\u5236\uff0c\u540e\u7eed\u76f8\u5173\u7ec4\u4ef6\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\uff0c\u9664\u4e86\u58f0\u660e.UseDt\u7684\u52a8\u753b\u7c7b\u7ec4\u4ef6\u9664\u5916\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u5982\u679c\u52a8\u753b\u7c7b\u7ec4\u4ef6\u4e0d\u53d7\u901a\u77e5\u673a\u5236\u7684\u5f71\u54cd\uff0c\u90a3\u4e48\u5b83\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u5916\u5916\u90e8\u5bf9\u8c61\u6765\u6267\u884c\u4e00\u4e2a\u7c7b\u4f3cEnable/Begin\u548cDisable/End\u4e4b\u7c7b\u7684\u64cd\u4f5c\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7Spawn\u6765\u5b9e\u73b0\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7c7b\u4f3c\u83b7\u53d6\u5f15\u7528\u6765\u5b9e\u73b0\u63a7\u5236\uff0c\u540e\u7eed\u9700\u8981\u76f8\u5173\u5206\u6790\u4e00\u4e0b\u3002")),(0,n.kt)("p",null,"\u5982\u679c\u9700\u8981\u901a\u8fc7\u503c\u7684\u662f\u5426\u53d8\u5316\u4f5c\u4e3a\u540e\u7eed\u7ec4\u4ef6\u8ba1\u7b97\u7684\u4f9d\u636e\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5c5e\u6027\u503c\u5b9e\u9645\u4e0a\u627f\u62c5\u4e86\u4e24\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u540e\u7eed\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u7684\u8f93\u5165\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u77e5\u529f\u80fd")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e24\u4e2a\u529f\u80fd\u662f\u6709\u6b67\u4e49\u7684\uff0c\u4f8b\u5982\u5982\u679c\u4e00\u4e2a\u6280\u80fd\u8981\u6c42\u6263\u9664\u7684HP\u662f3\uff0c\u6240\u4ee5\u6574\u4e2a\u503c3\u540c\u65f6\u627f\u62c5\u4e86\u901a\u77e5\u529f\u80fd\u548c\u6263\u9664\u7684\u5177\u4f53\u6570\u503c\u7684\u529f\u80fd\uff0c\u4f46\u662f\u5982\u679c\u4e0b\u4e00\u5e27\u8be5\u6280\u80fd\u7ee7\u7eed\u91ca\u653e\uff0c\u90a3\u4e48\u5c5e\u6027\u503c\u4f9d\u65e7\u4e3a3\uff0c\u4f46\u662f\u6b64\u65f6\u7cfb\u7edf\u4f1a\u8ba4\u4e3a\u8be5\u503c\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u56e0\u6b64\u901a\u77e5\u529f\u80fd\u5931\u6548\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u4e00\u7684\u503c\u4e0d\u80fd\u540c\u65f6\u627f\u8f7d\u4e24\u4e2a\u529f\u80fd\uff0c\u5b83\u4eec\u5206\u522b\u9700\u8981\u81ea\u5df1\u7684\u6570\u503c\u6216\u8005\u6807\u8bb0\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u89e3\u51b3\u601d\u8def\u662f\u5728\u6bcf\u4e00\u5e27\u7684\u672b\u5c3e\uff0c\u628a\u8fd9\u4e9b\u6570\u503c\u6e05\u96f6\u3002\u4f46\u662f\u8fd9\u6837\u505a\uff0c\u5176\u4ed6\u6709\u4e9b\u5c5e\u6027\u4f1a\u53d7\u5f71\u54cd\uff0c\u5c31\u662f\u90a3\u4e9b\u4e0d\u662f\u589e\u91cf\u503c\u7684\u53d8\u91cf\uff0c\u5b83\u4eec\u9700\u8981\u59cb\u7ec8\u5b58\u50a8\u81ea\u5df1\u7684\u503c\uff0c\u5b9e\u9645\u4e0a\u53ea\u6709\u50cf\u6280\u80fd\u8fd9\u79cd\u6263\u9664\u6027\u7684\u589e\u5f3a\u5c5e\u6027\u624d\u53ef\u4ee5\u8fd9\u6837\u505a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u8981\u6c42\u6240\u6709\u589e\u91cf\u578b\u7684\u53d8\u91cf\u59cb\u7ec8\u6267\u884c\uff0c\u8ba9\u5f00\u53d1\u8005\u4fdd\u8bc1\u7ed3\u679c\u662f\u6b63\u786e\u7684\uff0c\u4f8b\u5982\u4e0b\u4e00\u5e27\u5982\u679c\u8be5\u6280\u80fd\u6ca1\u6709\u91ca\u653e\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u628a\u503c\u7f6e\u96f6\u3002\u4f46\u5176\u5b9e\u8fd9\u79cd\u7f6e\u96f6\u7684\u8fc7\u7a0b\u4f1a\u662f\u540e\u7eed\u7684\u7ec4\u4ef6\u8bef\u4ee5\u4e3a\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u6839\u636e\u9ed8\u8ba4\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u95ee\u9898\u5728\u4f20\u7edf\u7684\u5f00\u53d1\u4e2d\u4e0d\u4f1a\u5b58\u5728\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u5927\u591a\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7684\u8c03\u7528\u903b\u8f91\uff0c\u5373\u53d1\u8d77\u6280\u80fd\u7684\u51fd\u6570\u4f1a\u901a\u8fc7\u67d0\u79cd\u5f62\u5f0f\u76f4\u63a5\u80fd\u591f\u89e6\u53d1\u5bf9\u6263\u8840\u51fd\u6570\u7684\u8c03\u7528\uff08\u4f8b\u5982\u901a\u8fc7\u4e00\u4e9bManager\u4e4b\u7c7b\u7684\u51fd\u6570\uff09\uff0c\u56e0\u6b64\u5176\u5b9e\u5b83\u4eec\u4e0d\u4f1a\u5b58\u5728\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\u7684\u589e\u91cf\u503c\uff0c\u56e0\u4e3a\u4e0b\u4e00\u6b21\u6ca1\u6709\u6280\u80fd\u91ca\u653e\u5219\u538b\u6839\u5c31\u4e0d\u4f1a\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u901a\u8fc7\u6d88\u606f\u7684\u673a\u5236\uff0c\u4f20\u7edf\u7684\u6d88\u606f\u673a\u5236\u662f\u5c06\u6d88\u606f\u5b58\u653e\u5230\u4e00\u4e2a\u961f\u5217\u4e2d\uff0c\u7136\u540e\u54cd\u5e94\u8005\u4ece\u6d88\u606f\u5217\u8868\u83b7\u53d6\u6d88\u606f\u5e76\u8fdb\u884c\u5904\u7406\uff0c\u5f53\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u8fd9\u6761\u6d88\u606f\u5c31\u4f1a\u88ab\u5220\u9664\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u5c5e\u6027\u901a\u8fc7\u6309\u4f9d\u8d56\u987a\u5e8f\u6267\u884c\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5c5e\u6027\u5145\u5f53\u4e86\u6d88\u606f\u7684\u529f\u80fd\u3002\u4f46\u662f\u8fd9\u4e2a\u6d88\u606f\u5728\u4e00\u5e27\u7ed3\u675f\u540e\u5e76\u6ca1\u6709\u6e05\u9664\uff0c\u800c\u662f\u8fd9\u4e2a\u503c\u4f1a\u6c38\u4e45\u5b58\u5728\uff0c\u56e0\u6b64\u5e26\u6765\u4e86\u4e0a\u8ff0\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u50cf\u786c\u4ef6\u7684\u8f93\u5165\u4e8b\u4ef6\uff0c\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\u95ee\u9898\uff0c\u4f46\u662f\u901a\u5e38\u7cfb\u7edf\u8f93\u5165\u5e76\u6ca1\u6709\u4f7f\u7528\u6d88\u606f\u7684\u673a\u5236\u4f20\u9012\uff0c\u800c\u662f\u76f4\u63a5\u7f16\u5199update\u51fd\u6570\uff0c\u8fd9\u6837\u76d1\u542c\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e00\u5e27\u7684\u8ba1\u7b97\u7ed3\u679c\u90fd\u4e0d\u4f1a\u8fdb\u5165\u4e0d\u53ef\u9884\u671f\u7684\u5206\u652f\u3002\u4f46\u662f\u56e0\u4e3a\u5904\u7406\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4e0d\u4f1a\u5f88\u591a\uff0c\u6240\u4ee5\u4e0d\u4f1a\u5bfc\u81f4\u592a\u5927\u7684\u95ee\u9898\u3002\u4f46\u662f\u5982\u679c\u7cfb\u7edf\u5927\u91cf\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u903b\u8f91\u4e5f\u5df2\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u5219\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u65b9\u6cd5\u662f\u4f7f\u7528.UseDt(true)\u4f7f\u5176\u50cf\u8f93\u5165\u7ec4\u4ef6\u4e00\u6837\u5e94\u7528\u6267\u884c\u3002\u540e\u7eed\u518d\u8003\u8651\u4f18\u5316\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"2218-\u5b58\u6863\u5c5e\u6027"},"2.2.1.8 \u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1\u4f1a\u6709\u5927\u91cf\u7684\u5c5e\u6027\uff0c\u663e\u7136\u6709\u5f88\u591a\u5c5e\u6027\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u800c\u5e73\u53f0\u4e5f\u65e0\u6cd5\u5224\u65ad\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u4e5f\u65e0\u6cd5\u8ba9\u521b\u4f5c\u7528\u6237\u5728\u521b\u4f5c\u7684\u65f6\u5019\u53bb\u6307\u5b9a\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u5b58\u6863\u7684\u529f\u80fd\u5c5e\u6027\u672c\u8eab\u662f\u5f00\u53d1\u8005\u548c\u6807\u51c6\u5236\u5b9a\u8005\u53ef\u4ee5\u51b3\u5b9a\u7684\u3002\u6240\u4ee5\uff0c\u5b58\u6863\u5c5e\u6027\u5e94\u8be5\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u662f\u5171\u4eab\u7b26\u53f7\u8868\u6216\u79c1\u6709\u7b26\u53f7\u8868\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7b26\u53f7\u662f\u5426\u9700\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u5168\u5c40\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u6709\u4e9b\u4ec5\u662f\u7528\u6765\u5b9e\u73b0\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u4ea4\u6362\u7684\u7b26\u53f7\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u4f8b\u5982\u90a3\u4e9b\u4ec5\u4ec5\u662f\u65e0\u5173\u7d27\u8981\u7684\u901a\u77e5\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b58\u6863\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4f1a\u4fdd\u8bc1\u5f53\u7ec4\u4ef6\u6b63\u5e38\u6267\u884c\u540e\uff0c\u5176\u4fee\u6539\u7684\u7ed3\u679c\u4f1a\u88ab\u5b58\u6863\u3002"),(0,n.kt)("h3",{id:"222-entity"},"2.2.2 Entity"),(0,n.kt)("p",null,"ID + TAG"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5b9e\u4f53\u6709\u4e2a\u9690\u85cfprivate\u53d8\u91cf\uff1aTAG\u548cTARGET\u7528\u6765\u5b9a\u4e49\u7ec4\u4ef6\u672c\u8eab\u7684\u6807\u8bc6\u7b26\uff0c\u4ee5\u53ca\u7528\u4f5c\u67e5\u8be2\u6761\u4ef6\u7684\u6807\u5fd7\u7b26"),(0,n.kt)("p",null,"\u5728Entity\u4e0a\u589e\u52a0TAG\uff0c\u56e0\u6b64\u5145\u5f53\u4e00\u4e2aEntity\u7684\u7c7b\u578b\u533a\u5206\uff0c\u521b\u4f5c\u8005\u53ef\u4ee5\u5728Creation\u4e2d\u521b\u5efa\u4e00\u4e2aLayer\u8868\u5bf9\u5176\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u4ee5\u7edf\u4e00\u547d\u540d\u7b49\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\u7684TARGET\uff0c\u5b83\u6307\u5411Entity\u7684TAG\u5c5e\u6027\uff0c\u867d\u7136System\u5bf9\u4e8e\u4e00\u4e2aCreation\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662fSystem\u672c\u8eab\u53ea\u5305\u542b\u65b9\u6cd5\uff0cSystem\u7684\u72b6\u6001\u6570\u636e\uff08private\u79c1\u6709\u53d8\u91cf\uff09\u662f\u5b58\u50a8\u5728\u6bcf\u4e2aEntity\u5185\u90e8\u7684\uff0c\u5b83\u5177\u6709\u591a\u4e2a\u5b9e\u4f8b\u3002\u56e0\u6b64\u5bf9\u4e8eTARGET\u6765\u8bf4\uff0c\u6bcf\u4e2aEntity\u7684\u503c\u90fd\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64Entity\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u7c7b\u578b\u76ee\u6807Entity\u3002"),(0,n.kt)("h3",{id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"},"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 5\n\nnamespace SomeComponent{\n query Global.HP as hp\n query Global.HP[] as hps\n\n public Global.HP as hp\n \n private fTemp = 100.\n private TARGET = 20\n}\n")),(0,n.kt)("p",null,"\u4e09\u79cd\u7c7b\u578b\u53d8\u91cf\u8bf4\u660e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"private \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u79c1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u8be5\u7ec4\u4ef6\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\u76f4\u63a5\u58f0\u660e\u5b9e\u73b0\uff0c\u56e0\u4e3a\u6ca1\u6709\u4ece\u5168\u5c40\u7b26\u53f7\u8868\u5f15\u7528\u58f0\u660e\uff0c\u6240\u4ee5\u5176\u4ed6\u7ec4\u4ef6\u6ca1\u6709\u53ef\u80fd\u5bf9\u5176\u8fdb\u884c\u8bbf\u95ee\uff1bprivate\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"public \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u516c\u5171\u53d8\u91cf\uff0c\u53ef\u4ee5\u88ab\u5b9e\u4f53\u5185\u8de8\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u4e5f\u53ef\u4ee5\u88ab\u5176\u4ed6\u5b9e\u4f53\u8bbf\u95ee\uff1bpublic\u4e5f\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf\uff1b\u901a\u5e38public\u53d8\u91cf\u7531\u4f7f\u7528\u8be5\u53d8\u91cf\u7684\u7ec4\u4ef6\u5b9a\u4e49\uff0c\u53ef\u4ee5\u591a\u4e2a\u7ec4\u4ef6\u4e2d\u90fd\u91cd\u590d\u5b9a\u4e49\uff0c\u4f1a\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"query\u4e0d\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u53d8\u91cf\uff0c\u5b83\u662f\u6307\u5411\u5916\u90e8\u53d8\u91cf\u7684\u5f15\u7528\uff0c\u5b83\u53ea\u80fd\u8bbf\u95ee\u90a3\u4e9b\u5b9a\u4e49\u4e3apublic\u7684\u5b9e\u4f53")),(0,n.kt)("h4",{id:"2231-\u79c1\u6709\u53d8\u91cf"},"2.2.3.1 \u79c1\u6709\u53d8\u91cf"),(0,n.kt)("p",null,"\u79c1\u6709\u53d8\u91cf\u53ea\u662f\u5b9e\u4f53\u5185\u7ec4\u4ef6\u624d\u53ef\u4ee5\u8bbf\u95ee\u7684\u5c5e\u6027\uff0c\u5b9e\u4f53\u662f\u7528\u6237\u521b\u5efa\u7684\uff0c\u5176\u6240\u6709\u6743\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u540c\u6837\uff0c\u8be5\u5b9e\u4f53\u6240\u6709\u7684\u7ec4\u4ef6\u662f\u7531\u7528\u6237\u9009\u62e9\u7684\uff0c\u6240\u4ee5\u8fd9\u4e2a\u9009\u62e9\u95f4\u63a5\u5305\u542b\u7528\u6237\u5bf9\u8be5\u7ec4\u4ef6\u8bbf\u95ee\u8be5\u5b9e\u4f53\u6570\u636e\u7684\u6743\u9650\u3002"),(0,n.kt)("p",null,"\u9009\u62e9\u7ec4\u4ef6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u662f\u4e00\u79cd\u529f\u80fd\u6784\u5efa\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u4e00\u79cd\u6388\u6743\u884c\u4e3a")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u80fd\u591f\u8bbf\u95ee\u81ea\u5df1\u6240\u5728\u5b9e\u4f53\u7684\u4efb\u4f55\u5c5e\u6027\uff0c\u4e0d\u652f\u6301\u5728\u5b9e\u4f53\u5185\u518d\u5212\u5206\u6743\u9650\uff0c\u90a3\u4e48\u5c06\u4f1a\u589e\u52a0\u590d\u6742\u5ea6\uff0c\u800c\u4e14\u770b\u8d77\u6765\u6ca1\u6709\u90a3\u79cd\u5fc5\u8981\uff0c\u5b9e\u4f53\u8fd9\u4e2a\u7c92\u5ea6\u4f5c\u4e3a\u6743\u9650\u5355\u4f4d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u662f\u8db3\u591f\u7684\uff0c\u5408\u7406\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u7528\u6237\u8bbe\u7f6e\u548c\u7ba1\u7406\u8d77\u6765\u76f8\u5bf9\u6bd4\u8f83\u5bb9\u6613\u7684")),(0,n.kt)("h4",{id:"2232-\u5199\u5165\u6743\u9650"},"2.2.3.2 \u5199\u5165\u6743\u9650"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u6709\u5bf9\u81ea\u8eab\u5b9e\u4f53\u6240\u5728\u7684\u5c5e\u6027\u624d\u5177\u6709\u5199\u7684\u6743\u9650\uff0c\u4e0d\u80fd\u5bf9\u5176\u4ed6\u5b9e\u4f53\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5426\u5219\u6743\u9650\u4e0d\u53ef\u63a7\u5236\uff0c\u56e0\u4e3a\u6743\u9650\u662f\u6309\u7167\u5b9e\u4f53\u4e3a\u5355\u4f4d\u8fdb\u884c\u6784\u9020\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u62c9\u53d6\u6a21\u5f0f\uff0c\u53c2\u89c12.2.11.2\u8282\u3002"),(0,n.kt)("h4",{id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"},"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f53\u7684\u5c5e\u6027\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u51fa\uff0c\u5b83\u603b\u662f\u5bf9\u4e00\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u50cf\u7c7b\u4f3c\u52a8\u753b\u6216\u8005\u4e00\u4e9b\u81ea\u5b9a\u4e49\u8de8\u5e27\u903b\u8f91\u7684\u8fd9\u79cd\u7ec4\u4ef6\uff0c\u4ed6\u53ef\u80fd\u9700\u8981\u5b58\u50a8\u4e00\u4e9b\u8de8\u5e27\u7684\u72b6\u6001\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u901a\u8fc7\u79c1\u6709\u7684\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u4f46\u5b83\u4eec\u8ddf\u5176\u4ed6\u5c5e\u6027\u4e4b\u95f4\u5b58\u5728\u4e00\u4e2a\u4e3b\u8981\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u53d8\u91cf\u4e00\u822c\u53ea\u80fd\u88ab\u4e00\u4e2a\u552f\u4e00\u7684\u7ec4\u4ef6\u611f\u77e5\uff0c\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u4e5f\u4e0d\u9700\u8981\u77e5\u9053\u5b83\u7684\u5b58\u5728")),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u53ea\u8fd9\u6837\uff0c\u5c31\u9020\u6210\u4e00\u79cd\u6f5c\u5728\u7684\u95ee\u9898\uff0c\u8fd9\u4e9b\u53d8\u91cf\u770b\u8d77\u6765\u5145\u5f53\u4e86\u8fd9\u4e9b\u7ec4\u4ef6\u7684\u72b6\u6001\uff1a\u56e0\u4e3a\u8f93\u5165\u6761\u4ef6\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u7834\u574f\u4e86\u7ec4\u4ef6\u5145\u5f53\u7eaf\u51fd\u6570\u7684\u76ee\u6807\uff0c\u4e5f\u4f7f\u5f97\u901a\u8fc7\u8f93\u5165\u662f\u5426\u53d8\u66f4\u6765\u51b3\u5b9a\u662f\u5426\u9700\u8981\u6267\u884c\u7ec4\u4ef6\u8ba1\u7b97\u53d8\u5f97\u56f0\u96be\uff0c\u53c2\u89c12.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u4e00\u79cd\u89e3\u51b3\u65b9\u6848\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u8fd9\u4e9b\u4e2d\u95f4\u53d8\u91cf\u6210\u4e3a\u65f6\u95f4\u7684\u51fd\u6570\uff0c\u5728\u6bcf\u4e00\u6b21\u51fd\u6570\u8ba1\u7b97\u4e2d\uff0c\u7531\u7ec4\u4ef6\u51fd\u6570\u6839\u636edt\u53c2\u6570\u8ba1\u7b97\u800c\u5f97")),(0,n.kt)("p",null,"\u8fd9\u79cd\u53ef\u80fd\u4f1a\u6bcf\u5e27\u91cd\u590d\u8ba1\u7b97\u4e00\u4e9b\u5185\u5bb9\uff0c\u4f46\u662f\u5176\u5b9e\u53ef\u80fd\u95ee\u9898\u4e0d\u5927\uff0c\u56e0\u4e3a\u90a3\u4e9b\u5b58\u50a8\u7684\u4e2d\u95f4\u72b6\u6001\uff0c\u5176\u5b9e\u5927\u90e8\u5206\u662f\u6bcf\u5e27\u90fd\u8981\u4ee3\u5165dt\u8fdb\u884c\u91cd\u65b0\u8ba1\u7b97\u7684\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u53ef\u80fd\u5e26\u6765\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u76f8\u5bf9\u5e26\u6765\u67b6\u6784\u7684\u7b80\u6d01\u6027\uff0c\u662f\u53ef\u53d6\u7684\u3002\u4f8b\u5982\u5728\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u5f53\u4e2d\uff0c\u4e3a\u4e86\u7ef4\u6301\u51fd\u6570\u7684\u7eaf\u51fd\u6570\u7279\u6027\uff0c\u4ee5\u53ca\u53d8\u91cf\u7684\u4e0d\u53ef\u4fee\u6539\u7279\u6027\uff0c\u5176\u5b9e\u4e5f\u505a\u4e86\u5927\u91cf\u590d\u5236\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u76f8\u5bf9\u6027\u80fd\uff0c\u5b83\u4eec\u5e26\u6765\u7684\u67b6\u6784\u4ef7\u503c\u66f4\u5927\u3002\u4f55\u51b5RealityIS\u53ef\u4ee5\u901a\u8fc7\u5206\u5e03\u5f0f\u53ca\u5176\u4ed6\u7279\u6027\u6765\u5f25\u8865\u8fd9\u4e9b\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("h3",{id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"},"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u7a0b\u5e8f\u6267\u884c\u6307\u4ee4\u7684\u8026\u5408\uff0c\u662f\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u6700\u5927\u7684\u9650\u5236\uff0c\u8fd9\u53ef\u80fd\u67092\u79cd\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u8981\u662f\u8fd8\u662f\u57fa\u4e8e\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\uff0c\u5b83\u4e0a\u9762\u6240\u505a\u7684\u62bd\u8c61\uff0c\u66f4\u591a\u662f\u56f4\u7ed5\u7528\u5f00\u53d1\u8005\uff08\u4eba\u7684\uff09\u7684\u89d2\u5ea6\u600e\u4e48\u53bb\u7406\u89e3\u548c\u7ec4\u7ec7\u673a\u5668\u4ee3\u7801\u7684\u7ed3\u6784\uff0c\u800c\u6ca1\u6709\u56f4\u7ed5\u4eba\u7c7b\u7406\u89e3\u4e8b\u7269\u771f\u6b63\u7684\u903b\u8f91\u53bb\u8fdb\u884c\u8c03\u6574\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u90fd\u662f\u56f4\u7ed5\u5355\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\uff0c\u5373\u4f7f\u6709\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u9700\u8981\u4ea4\u4e92\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u5c11\u91cf\u4e14\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\u9700\u6c42\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u6807\u51c6\u7684\u5f62\u5f0f\u89e3\u51b3\uff0c\u4f8b\u5982HTTP\u534f\u8bae\u3002")),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5143\u5b87\u5b99\u65f6\u4ee3\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e9b\u5168\u65b0\u7684\u7f16\u7a0b\u67b6\u6784\uff0c\u6240\u4ee5\u6700\u91cd\u8981\u7684\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6211\u4eec\u9700\u8981\u5728\u786c\u4ef6\u67b6\u6784\u548c\u5e94\u7528\u67b6\u6784\u4e4b\u95f4\uff0c\u5efa\u7acb\u8d77\u4e00\u4e2a\u6570\u636e\u62bd\u8c61\u67b6\u6784\uff0c\u5c06\u4f20\u7edf\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\u9650\u5236\u9690\u85cf\u8d77\u6765\uff0c\u5e76\u4e14\u4e0a\u5c42\u5e94\u7528\u67b6\u6784\u7684\u80fd\u529b\u53ef\u4ee5\u66f4\u5927\u7684\u91ca\u653e"),"\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u7684\u6838\u5fc3\u903b\u8f91\uff0c\u662f\u901a\u8fc7\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u7684\u6539\u9020\uff0c\u5728\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e2a\u65b0\u7684\u8f6c\u6362\u5c42\uff0c\u662f\u80fd\u591f\u5c06\u57fa\u4e8e\u6570\u636e\u62bd\u8c61\u7684\u7a0b\u5e8f\u67b6\u6784\uff0c\u8f6c\u6362\u4e3a\u4f20\u7edf\u57fa\u4e8e\u786c\u4ef6\u67b6\u6784\u7684\u7a0b\u5e8f\u7ed3\u6784\u3002"),(0,n.kt)("h4",{id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"},"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'#version 1.0.0\n#order 1000\n\nnamespace SomeComponent{\n public Global.iHP as iHP = 5\n public Global.vfPosition = (1000.0, 234.5, 400.8)\n public Global.sLabelName = "Super Man"\n \n private fTemp = 500.6 \n \n fn Update(fTime){\n fTemp = fTemp * fTime\n iHP = fTemp\n }\n}\n')),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u53d8\u91cf\u7684\u987a\u5e8f\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u8981\u8fdb\u884c\u6392\u5e8f\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u8fd9\u91cc\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u540d\u4e0e\u5c40\u90e8\u7b80\u5199\u540d\u5b57\u7684\u533a\u522b\uff0c\u5728\u89e3\u91ca\u5668\u4e2d\uff0c\u9700\u8981\u53bb\u9664\u672c\u5730\u53d8\u91cf\u540d\u79f0\uff0c\u4f7f\u7528\u7edf\u4e00\u7684\u5168\u5c40\u540d\u79f0\uff0c\u56e0\u4e3a\u4e0d\u540c\u7ec4\u4ef6\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\uff0c\u53ef\u80fd\u4f7f\u7528\u4e0d\u540c\u7684\u5c40\u90e8\u53d8\u91cf\u7b80\u5199\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9700\u8981\u5904\u7406\u5176\u4ed6\u7269\u4f53\u7684\u7ec4\u4ef6\uff0c\u5b9a\u4e49\u4e00\u4e2a\u6570\u7ec4\u7684\u5f62\u5f0f\uff0c\u89e3\u91ca\u5668\u81ea\u52a8\u67e5\u627e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 1000\n\nnamespace HandleOtherComponent{\n outer Global.iHP[]\n outer Global.vPosition[]\n \n out vPosition as position\n \n fn Upadte{\n for i in iHP{\n if(distance(vPosition[i]-position)<10){\n iHP[i]-=1\n vPosition[i]=(10,10,10)\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7c7b\u578b\u7528\u4e8e\u7531\u4e00\u4e9b\u7279\u5b9a\u5bf9\u8c61\u53d1\u8d77\u7684\u884c\u4e3a\uff0c\u5982\u679c\u662f\u5168\u5c40\u7ec4\u4ef6\uff0c\u5168\u5c40\u7ec4\u4ef6\u6bcf\u4e2a\u573a\u666f\u53ea\u6709\u4e00\u4e2aEntity\u53ef\u4ee5\u62e5\u6709"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 10\n\nnamespace PhysicalComponent{\n unique Global.Collider[] clliders\n}\n")),(0,n.kt)("p",null,"\u5b9a\u4e49\u4e86global\u7684\u5c5e\u6027\u89e3\u91ca\u5668\u4f1a\u89e3\u91ca\u552f\u4e00\u6027\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6709\u4e9b\u7ec4\u4ef6\u662f\u6ca1\u6709\u65b9\u6cd5\u7684\uff0c\u4f46\u6ca1\u5173\u7cfb\uff0c\u4ece\u7528\u6237\u89d2\u5ea6\u6765\u8bf4\u5b83\u4ecd\u7136\u662f\u4e00\u4e2a\u529f\u80fd\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 100\n\nnamespace ClidderComponent{\n public Global.Cllider\n public TAG = 100\n}\n")),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u7ec4\u4ef6\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u81ea\u8eab\u8fdb\u884c\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u5176\u4ed6\u5bf9\u8c61\u8fdb\u884c\u4fee\u6539\uff0c\u8fd9\u79cd\u60c5\u51b5\u6709\u4e00\u4e2a\u53d1\u8d77\u7684\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u662f\u6ca1\u6709\u7279\u5b9a\u53d1\u8d77\u7684\u5bf9\u8c61\uff0c\u5b83\u662f\u5bf9\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u901a\u7528\u884c\u4e3a\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce")),(0,n.kt)("h4",{id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"},"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"),(0,n.kt)("p",null,"\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u90fd\u53ef\u4ee5\u8bbe\u7f6e\u521d\u59cb\u503c\uff0c\u5176\u4e2d\u4e00\u4e2a\u4fee\u6539\u4f1a\u590d\u5199\u53e6\u4e00\u4e2a\uff0c\u56e0\u4e3a\u5bf9\u4e8e\u5171\u4eab\u53d8\u91cf\uff0c\u4e00\u4e2a\u5b9e\u4f53\u53ea\u6709\u4e00\u4efd\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u521d\u59cb\u5316\u7684\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\u5668\u4e2d\u4fee\u6539\uff0c\u6bcf\u6b21\u9009\u62e9\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u8bbe\u7f6e\u540e\uff0c\u4e0b\u6b21\u5176\u4ed6\u7ec4\u4ef6\u52a0\u8f7d\u7684\u4e5f\u662f\u4fee\u6539\u540e\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fd0\u884c\u65f6\uff0c\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u8fd0\u884c\u6001\u7528\u6237\u53ea\u770b\u5f97\u89c1\u4e00\u4efd\u5171\u4eab\u53d8\u91cf\uff0c\u7ec4\u4ef6\u53ea\u6709\u79c1\u6709\u53d8\u91cf\u53ef\u4ee5\u5355\u72ec\u8bbe\u7f6e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4ee3\u7801\u7684\u5f62\u5f0f\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u6309\u65f6\u95f4\u8986\u5199\u6570\u503c\u3002\u4f46\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u7ec4\u4ef6\u7684\u521d\u59cb\u503c\u5e94\u8be5\u7531\u5176\u5b9a\u4e49\u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u5426\u5219\u5bb9\u6613\u9020\u6210\u8ff7\u60d1\u3002\u4e00\u65e6\u5b9e\u4f8b\u8fd0\u884c\u4e00\u6bb5\u65f6\u95f4\u4e4b\u540e\uff0c\u503c\u5e94\u8be5\u7531\u6301\u4e45\u5316\u7684\u6570\u636e\u8fdb\u884c\u52a0\u8f7d\u521d\u59cb\u5316\u3002")),(0,n.kt)("h4",{id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026"},"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5bf9\u611f\u5174\u8da3\u7684\u6570\u636e\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4fdd\u8bc1\u4e24\u4e2a\u5bf9\u540c\u6837\u6570\u636e\u611f\u5174\u8da3\u7684\u6570\u636e\u90fd\u80fd\u591f\u6309\u987a\u5e8f\u88ab\u6267\u884c")),(0,n.kt)("p",null,"\u5269\u4e0b\u53ea\u8981\u6211\u4eec\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u987a\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u5c31\u53ef\u4ee5\u4ee5\u95f4\u63a5\u7684\u65b9\u5f0f\u5b9e\u73b0\u4ea4\u4e92\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u5171\u540c\u611f\u5174\u8da3\u7684\u53c2\u6570\u5145\u5f53\u4e86\u51fd\u6570\u53c2\u6570\uff0c\u540c\u65f6\u4e0d\u9700\u8981\u5f15\u7528\u5176\u4ed6\u7ec4\u4ef6\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u5168\u65b0\u7684\u673a\u5236\uff0c\u53ea\u6709\u8fd9\u6837\uff0c\u624d\u80fd\u5b9e\u73b0\u4e24\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u800c\u4e14\uff0c\u9664\u4e86\u5bf9\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u89e3\u8026\uff0c\u5b83\u8fd8\u6709\u4e00\u4e0b\u4e09\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u4e0d\u9700\u8981\u53bb\u5173\u5fc3\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982\u5c31\u4e0d\u4f1a\u51fa\u73b0\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u5e38\u89c1\u7684\u4f60\u8c03\u6211\u8fd8\u662f\u6211\u8c03\u7528\u4f60\u7684\u95ee\u9898\uff0c\u8fd9\u8ba9\u6211\u4eec\u5c06\u7f16\u7a0b\u601d\u60f3\u56de\u5f52\u5230\u672c\u8d28\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u53ea\u662f\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u5e76\u8f93\u51fa\u76f8\u5173\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u4e2a\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u4e0d\u592a\u4e00\u6837\u3002\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u5927\u90e8\u5206\u529f\u80fd\u90fd\u662f\u5728\u5904\u7406\u6570\u636e\uff0c\u8fd9\u79cd\u601d\u7ef4\u7406\u89e3\u8d77\u6765\u66f4\u7b80\u6d01\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\uff0c\u5927\u90e8\u5206\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\u90fd\u662f\u7531\u4e8e\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u5bf9\u8c61\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u3002\u4e0d\u4ec5\u4e0d\u5229\u4e8e\u5e76\u884c\u8ba1\u7b97\uff0c\u800c\u4e14\u5bb9\u6613\u5bfc\u81f4\u5404\u79cd\u5e76\u53d1\u95ee\u9898\uff0c\u4f8b\u5982\u6b7b\u9501\uff0c\u8d44\u6e90\u62a2\u5360\u7b49\u7b49\uff0c\u56e0\u4e3a\u4e0d\u53ef\u9884\u671f\u7684\u591a\u4e2a\u5bf9\u8c61\u4f1a\u8bbf\u95ee\u540c\u4e00\u4e2a\u5bf9\u8c61\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u80fd\u51cf\u5c11\u56e0\u4e3a\u53d8\u5316\u5bfc\u81f4\u7684\u91cd\u6784\u3001\u91cd\u65b0\u53d1\u5e03\u7a0b\u5e8f\u7b49\u95ee\u9898\u3002\u5f53\u4e00\u4e2a\u51fd\u6570\u53c2\u6570\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u5fc5\u987b\u8981\u4fee\u6539\u8c03\u7528\u8005\u7684\u4ee3\u7801\uff0c\u5b83\u53ef\u80fd\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u518d\u53ef\u7528\u6216\u8005\u5d29\u6e83\uff0c\u56e0\u800c\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u592a\u613f\u610f\u66f4\u65b0\u5230\u6700\u65b0\u5f15\u7528\uff0c\u4ece\u800c\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5316\u5f88\u6162\u3002\u51fd\u6570\u89e3\u8026\u53ef\u4ee5\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u7684\u4fee\u6539\u81f3\u5c11\u5e76\u4e0d\u4f1a\u5f71\u54cd\u7a0b\u5e8f\u7684\u8fd0\u884c\u3002\u5f53\u7136\u5982\u679c\u903b\u8f91\u53d1\u751f\u4e86\u8f83\u5927\u7684\u53d8\u5316\uff0c\u7a0b\u5e8f\u7684\u8ba1\u7b97\u7ed3\u679c\u53ef\u80fd\u903b\u8f91\u4e0a\u662f\u4e0d\u53ca\u9884\u671f\u7684\u3002\u8fd9\u79cd\u8981\u6709\u597d\u7684\u673a\u5236\u4fdd\u8bc1\u53ca\u65f6\u66f4\u65b0\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u662f\u7cfb\u7edf\u66f4\u4e0a\u4e00\u5c42\u7684\u673a\u5236\uff0c\u5728\u7cfb\u7edf\u5c42\uff0c\u6211\u4eec\u9996\u5148\u5e94\u8be5\u4fdd\u8bc1\u5e73\u53f0\u8fd0\u884c\u7684\u7a33\u5b9a\u6027\u3002")),(0,n.kt)("h4",{id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("h3",{id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316"},"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u673a\u5236\u5e26\u6765\u7684\u6700\u5927\u4ef7\u503c\uff0c\u662f\u5b83\u6d88\u9664\u4e86\u6a21\u5757\u4e4b\u95f4\u7684\u663e\u793a\u8c03\u7528\u53c2\u6570\u4f20\u9012\uff0c\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u9000\u5316\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u800c\u9690\u85cf\u4e86\u4f20\u7edf\u7f16\u7a0b\u4e2d\u8981\u4f7f\u529f\u80fd\u8fd0\u884c\u8d77\u6765\u7684\u53c2\u6570\u4f20\u9012\uff0c\u56e0\u4e3a\u8fd9\u5c31\u9700\u8981\u53d8\u91cf\u7684\u58f0\u660e\u548c\u521d\u59cb\u5316\uff0c\u800c\u53d8\u91cf\u7684\u5b9a\u4e49\u6709\u6d89\u53ca\u7c7b\u578b\u7cfb\u7edf\u3002\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u5bfc\u81f4\u5bf9\u7f16\u7a0b\u7684\u5b66\u4e60\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u62bd\u8c61\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u5b83\u5c31\u53ef\u4ee5\u8bed\u4e49\u5316\uff0c\u4e00\u4e2a\u529f\u80fd\u7528\u4e00\u4e2a\u8bed\u4e49\u8868\u793a\uff0c\u800c\u8bed\u4e49\u662f\u6240\u6709\u4eba\u53ef\u4ee5\u7406\u89e3\u7684\u3002\u4e00\u65e6\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u8bed\u4e49\uff0c\u5bf9\u5e94\u7684\u529f\u80fd\u53ca\u5176\u8ddf\u5176\u4ed6\u529f\u80fd\u4e4b\u95f4\u7684\u4ea4\u4e92\u5c31\u4f1a\u81ea\u52a8\u9002\u914d\u548c\u5de5\u4f5c\uff0c\u7528\u6237\u6700\u591a\u9700\u8981\u8bbe\u7f6e\u4e00\u4e9b\u7279\u5b9a\u7684\u5c5e\u6027\u503c\u3002"),(0,n.kt)("h4",{id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"},"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u53ca\u5176\u6e38\u620fUpdate\u673a\u5236\uff0c\u8054\u5408\u8d77\u6765\u89e3\u51b3\u4e86\u4e24\u4e2a\u51fd\u6570\u4e4b\u95f4\u53c2\u6570\u9690\u5f0f\u4f20\u9012\u7684\u95ee\u9898\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u663e\u5f0f\u6307\u5b9a\u4e24\u4e2a\u6a21\u5757\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u65e2\u7b80\u5316\u4e86\u903b\u8f91\u5f00\u53d1\uff0c\u53c8\u4f7f\u5f97\u51fd\u6570\u6216\u8005\u4ee3\u7801\u529f\u80fd\u7684\u8bed\u4e49\u5316\u6210\u4e3a\u53ef\u80fd"),(0,n.kt)("p",null,"\u8bed\u4e49\u5316\u4ee5\u540e\u7684\u7a0b\u5e8f\uff0c\u5f62\u6210\u53ef\u4ee5\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u7684\u7ed3\u6784\uff0c\u6709\u4e86\u8fd9\u4e2a\u57fa\u7840\uff0c\u518d\u7ed3\u5408\u81ea\u7136\u8bed\u8a00\u4eba\u5de5\u667a\u80fd\u548c\u8bed\u97f3\u65b9\u9762\u7684\u8fdb\u5c55\uff0c\u53ef\u4ee5\u505a\u5230\u6700\u7b80\u5316\u7684\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u7136\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u5316\u8bed\u8a00")),(0,n.kt)("p",null,"\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u673a\u5236\uff0c\u867d\u7136\u81ea\u7136\u8bed\u8a00\u4e2d\u672c\u8eab\u4e5f\u662f\u6709\u53e5\u5b50\u8bed\u6cd5\u7ed3\u6784\u7684\uff0c\u4f46\u662f\u81ea\u7136\u8bed\u8a00\u672c\u8eab\u5e76\u6ca1\u6709\u7f16\u7a0b\u8bed\u8a00\u90a3\u4e48\u9ad8\u5ea6\u7ed3\u6784\u5316\uff0c\u4f8b\u5982\u5373\u4f7f\u5305\u542b\u8bed\u6cd5\u9519\u8bef\uff0c\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4ea4\u6d41\u4e5f\u53ef\u80fd\u56e0\u4e3a\u76f8\u540c\u7684\u7ecf\u5386\u3001\u77e5\u8bc6\u7b49\u539f\u56e0\u5bf9\u5176\u8fdb\u884c\u7ea0\u9519\uff0c\u4ece\u800c\u5ffd\u7565\u9519\u8bef\u7684\u8bed\u6cd5\uff0c\u7136\u800c\u673a\u5668\u6267\u884c\u7684\u7ed3\u6784\u5316\u8bed\u8a00\u4e5f\u4e0d\u540c\uff0c\u9664\u975e\u662f\u57fa\u4e8eAI\u8fdb\u884c\u5b66\u4e60\uff0c\u4f46\u662f\u90a3\u6837\u53c8\u9700\u8981\u5927\u91cf\u7684\u6570\u636e\u5b66\u4e60"),(0,n.kt)("p",null,"\u53ef\u89c6\u5316\u56fe\u901a\u5e38\u7531\u4e00\u4e9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u548c"),(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u4e4b\u95f4\u7684\u8fde\u63a5\u5173\u7cfb")),(0,n.kt)("p",null,"\u6765\u8868\u793a\uff0c\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u6d41\u7a0b\u7684\u529f\u80fd\uff0c\u800c\u8fde\u63a5\u5173\u7cfb\u4e0d\u4ec5\u8868\u793a\u4e86\u67d0\u79cd\u6d41\u7a0b\u987a\u5e8f\uff0c\u4ed6\u8fd8\u8868\u793a\u4e86\u6d41\u7a0b\u4e4b\u95f4\u9700\u8981\u9075\u5faa\u7684\u53c2\u6570\u7ea6\u5b9a"),(0,n.kt)("p",null,"\u65e2\u7136\u7b26\u53f7\u8868\u89e3\u51b3\u4e86\u53c2\u6570\u4f20\u9012\uff0c\u90a3\u4e48\u5269\u4e0b\u53ea\u9700\u8981\u663e\u5f0f\u58f0\u660e\u8282\u70b9\u7684\u529f\u80fd\u5b9a\u4e49\uff0c\u5219\u6574\u4e2a\u56fe\u53ef\u4ee5\u6784\u6210\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\uff0c\u540c\u65f6\u4e5f\u662f\u53ef\u89c6\u5316\u7684"),(0,n.kt)("p",null,"\u7531\u4e8e\u81ea\u7136\u8bed\u8a00\u4e0d\u5177\u5907\u7cbe\u786e\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5b9a\u4e49\u660e\u786e\u7684\u8282\u70b9\u7ed3\u6784"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ed3\u6784\u6700\u597d\u662f\u4e00\u79cd\u63cf\u8ff0\u8bed\u8a00\uff0c\u4ed6\u5177\u6709\u57fa\u7840\u7684\u8bed\u6cd5\u7ed3\u6784\uff0c\u800c\u57fa\u4e8e\u8fd9\u4e9b\u7ed3\u6784\u8fdb\u884c\u6269\u5c55\u53ef\u4ee5\u6784\u5efa\u5177\u4f53\u3001\u590d\u6742\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u6240\u8c13\u8bed\u8a00\u7ed3\u6784\uff0c\u5373\u5305\u62ec\u5b83\u7684\u53c2\u6570\uff08\u8fde\u63a5\u5c5e\u6027\uff09\uff0c\u5b83\u7684\u529f\u80fd\u5c5e\u6027\u90fd\u662f\u660e\u786e\u7684"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u53ea\u662f\u4efb\u610f\u5b9a\u4e49\u4e00\u4e9b\u6ca1\u6709\u8054\u7cfb\u7684\u57fa\u7c7b\uff0c\u5219\u65e0\u52a9\u4e8e\u6784\u5efa\u6709\u4ef7\u503c\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u56e0\u4e3a\u5c3d\u7ba1\u4ed6\u53ef\u4ee5\u8fde\u63a5\u4e00\u4e9b\u8282\u70b9\u6784\u6210\u56fe\uff0c\u4f46\u662f\u8fd9\u4e2a\u56fe\u7684\u6d41\u7a0b\u548c\u610f\u4e49\u662f\u5b8c\u5168\u6ca1\u6709\u610f\u4e49\u7684\uff0c\u6ca1\u6709\u4ef7\u503c\u7684"),(0,n.kt)("h4",{id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations"},"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations"),(0,n.kt)("p",null,"Machinations \u63d0\u4f9b\u4e86\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\uff0c\u4ed6\u80fd\u6784\u5efa\u8d77\u6613\u4e8e\u7406\u89e3\u5177\u6709\u4e00\u5b9a\u903b\u8f91\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u4f46\u662f\u5b83\u7684\u7ed3\u6784\u662f\u4ee5\u7ecf\u6d4e\u6d41\u52a8\u4e3a\u57fa\u7840\u7684\uff0c\u6709\u4e9b\u903b\u8f91\u4e0d\u4e00\u5b9a\u6709\u660e\u663e\u7684\u7ecf\u6d4e\u56e0\u7d20\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u6269\u5c55\uff0c\u6709\u4e86\u8fd9\u6837\u4e25\u8c28\u7684\u8bed\u8a00\u7ed3\u6784\uff0c\u518d\u628a\u7ec4\u4ef6\u5b9a\u4e49\u4e3a\u8fd9\u6837\u7684\u903b\u8f91\u5355\u5143\u8282\u70b9\uff0c\u5219\u8282\u70b9\u7684\u8bed\u4e49\u5c31\u660e\u786e\u800c\u4e14\u53c8\u610f\u4e49\u4e86\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u53ef\u4ee5\u65b9\u4fbf\u7528\u6237\u6d89\u53caGameplay\u7684\u73a9\u6cd5"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e2aMachinations\u4e2d\u7684\u5143\u7d20\uff0c\u8bbe\u8ba1\u5bf9\u5e94\u7684Component\uff0c\u53ea\u8981\u4ece\u8fd9\u4e9bComponent\u96c6\u6210\u7684\u7ec4\u4ef6\uff0c\u5c31\u81ea\u52a8\u9075\u5faa\u76f8\u5e94\u7684\u529f\u80fd\u6216\u8005\u63a5\u53e3\u9700\u6c42\uff0c\u5c31\u53ef\u4ee5\u81ea\u52a8\u751f\u6210\u8bbe\u8ba1\u7684\u53ef\u89c6\u5316\u56fe\u3002"),(0,n.kt)("video",{src:"resources/New-Intro-Video-Averages-comp.mp4"}),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u53ef\u4ee5\u6839\u636eMachinations\u53cd\u5411\u751f\u6210\u521d\u59cb\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u5982\u679cMachinations\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u6709\u7684\u7ec4\u4ef6\u5c31\u8981\u6c42\u5f00\u53d1\u8005\u8fd9\u6837\u53bb\u505a\uff0c\u8fd9\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u5c31\u66f4\u597d\u63a7\u5236\u903b\u8f91\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u5bf9Machinations\u8fdb\u884c\u6df1\u5165\u5206\u6790\uff0c\u52a0\u4e00\u5b9a\u7684\u6539\u9020\u3002"),(0,n.kt)("h4",{id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"},"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\uff0c\u5bf9\u73b0\u4ee3\u5de5\u4e1a\u5f88\u591a\u7814\u7a76\u76f4\u89c2\u91cd\u8981\uff0c\u5e76\u4e14\u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6df1\u523b\u90fd\u673a\u5236\u90fd\u6df1\u85cf\u4e8e\u590d\u6742\u7cfb\u7edf\u4e2d\uff0c\u5f80\u5f80\u90a3\u4e9b\u76f4\u89c2\u7b80\u5355\u7684\u7ed3\u6784\u5316\u673a\u5236\u5e76\u4e0d\u8db3\u4ee5\u6d1e\u6089\u8fd9\u4e9b\u7cfb\u7edf\u7684\u539f\u7406\u548c\u5f71\u54cd\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u66f4\u597d\u7684\u7a0b\u5e8f\u673a\u5236\u6765\u652f\u6301\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u7531\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u7279\u5f81\uff0c\u73b0\u5728\u8ba1\u7b97\u67b6\u6784\u5e76\u4e0d\u80fd\u5f88\u597d\u7684\u5904\u7406\u8fd9\u7c7b\u4efb\u52a1\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u7528\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u901a\u5e38\u65e0\u6cd5\u7ef4\u62a4\u8fd9\u4e48\u5e9e\u5927\u7684\u7cfb\u7edf\u4ea4\u4e92\u5173\u7cfb\uff0c\u5f88\u96be\u5efa\u6a21"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u4e00\u822c\u90fd\u662f\u5b9e\u65f6\u7cfb\u7edf\uff0c\u5b83\u5e76\u4e0d\u592a\u9002\u7528\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\uff0c\u6240\u4ee5\u73b0\u5728\u5927\u90e8\u5206\u4eff\u771f\u4efb\u52a1\u90fd\u662f\u4f7f\u7528\u6e38\u620f\u5f15\u64ce\u6765\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u8fd8\u5305\u542b\u4eba\u7684\u4ea4\u4e92\u5f71\u54cd\uff0c\u662f\u4e00\u4e2a\u4ea4\u4e92\u5f0f\u7cfb\u7edf")),(0,n.kt)("p",null,"\u6240\u4ee5\u76ee\u524d\u5e76\u6ca1\u6709\u5f88\u597d\u7684\u89e3\u51b3\u590d\u6742\u95ee\u9898\u4eff\u771f\u7684\u7a0b\u5e8f\u673a\u5236\u6216\u8005\u7cfb\u7edf\u8f6f\u4ef6\uff0cRealityIS\u6709\u673a\u4f1a\u5728\u8fd9\u65b9\u9762\u63d0\u4f9b\u66f4\u597d\u7684\u57fa\u7840\u67b6\u6784\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"226-\u7ec4\u4ef6\u67e5\u8be2"},"2.2.6 \u7ec4\u4ef6\u67e5\u8be2"),(0,n.kt)("p",null,"To read or write data, you must first find the data you want to change. "),(0,n.kt)("p",null,"The main way of processing DOTS data is ECS queries. Iterating over all entities that have a matching set of components, is at the center of the ECS architecture. "),(0,n.kt)("p",null,"To identify which entities a system should process, use an ",(0,n.kt)("a",{parentName:"p",href:"https://docs.unity3d.com/Packages/com.unity.entities@0.14/api/Unity.Entities.EntityQuery.html"},"EntityQuery"),". An entity query searches the existing archetypes for those that have the components that match your requirements. You can specify the following component requirements with a query:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c#"},"var queryDescription = new EntityQueryDesc\n{\n None = new ComponentType[] { typeof(Frozen) },\n All = new ComponentType[]{ typeof(RotationQuaternion),\n ComponentType.ReadOnly() }\n};\nEntityQuery query = GetEntityQuery(queryDescription);\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6309\u7c7b\u578b\u67e5\u8be2\u7ec4\u4ef6\u5bf9\u7528\u6237\u6765\u8bb2\u4e0d\u592a\u597d\u7406\u89e3\uff0c\u5b83\u8ba9\u4f60\u5fc5\u987b\u5f88\u6e05\u695a\u6240\u6709\u5b9e\u4f53\u4e2d\u54ea\u4e9b\u5b9e\u4f53\u5177\u6709\u54ea\u4e9b\u7ec4\u4ef6\u7684\u7ec4\u5408")),(0,n.kt)("p",null,"\u6309\u7c7b\u578b\u67e5\u627e\u4e5f\u9650\u5236\u4e86\u7ec4\u4ef6\u7684\u884c\u4e3a\uff0c\u5b83\u53ea\u8ddf\u7c7b\u578b\u4e00\u81f4\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u4e00\u4e2a\u653b\u51fb\u53ef\u80fd\u53ea\u9488\u5bf9\u67d0\u4e9b\u7c7b\u578b\u7684\u602a\u7269\uff0c\u8fd9\u4e9b\u602a\u7269\u7684\u6570\u636e\u5c5e\u6027\u662f\u76f8\u540c\u7684\uff0c\u5373\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u503c\u7684\u533a\u95f4\u4e0d\u540c\uff0c\u5b83\u4eec\u88ab\u5206\u4e3a\u4e0d\u540c\u7684\u7c7b\u522b\uff0c\u9664\u975e\u4f60\u91cd\u590d\u5b9a\u4e49Component\uff0c\u8fd9\u4e9bComponent\u6709\u76f8\u540c\u7684\u5c5e\u6027\uff0c\u5426\u5219\u4f60\u65e0\u6cd5\u533a\u5206\u5b83\u4eec\uff0c\u5373Component\u5145\u5f53\u4e86\u7c7b\u578b\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5b83\u53ea\u662f\u6570\u636e\uff0c\u4e0d\u80fd\u5b8c\u5168\u5145\u5f53\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u5bf9\u4e8eDOTS\u4e2d\u7684\u67e5\u8be2\uff0c\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u610f\u4e49\u662f\u53d6\u4ee3\u7c7b\u578b\u5f15\u7528\u7684\uff0c\u6240\u4ee5ECS\u4e2dComponent\u7684\u7c7b\u578b\u9700\u8981\u653e\u5230\u7b26\u53f7\u8868\u4e2d\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u7b26\u53f7\u8868\u4e2d\u7684\u540d\u79f0\u540c\u65f6\u4e5f\u8868\u793a\u4e86\u7b26\u53f7\uff0c\u56e0\u6b64\u7b26\u53f7\u8868\u9700\u8981\u662f\u7ed3\u6784\u4f53\uff0c\u50cfshader\u4e2d\u7684\u53d8\u91cf\u4e00\u6837\uff0c\u8fd9\u4e2a\u7ed3\u6784\u4f53\u7684\u540d\u79f0\u6216\u8005\u8fd9\u4e2a\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u4ee3\u8868\u4e86\u7ec4\u4ef6\u7c7b\u578b\uff1a"),(0,n.kt)("p",null,"\u4f8b\u5982\u7b26\u53f7\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"struct Position{\n float x\n float y\n float z\n}\n")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e2d\u7684\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 1\n\nnamespace SomeComponent : Component{\n public Global.Position as position\n \n fn update(float dt){\n \n }\n} \n")),(0,n.kt)("p",null,"\u5916\u90e8\u5f15\u7528\u7684\u7ec4\u4ef6\uff0c\u4f7f\u7528query\u4fee\u9970\u7b26\uff0c\u8868\u793a\u8fd9\u4e2a\u53d8\u91cf\u4e0d\u662f\u8be5\u5bf9\u8c61\u81ea\u8eab\u7684\u53d8\u91cf\uff0c\u800c\u662f\u67e5\u8be2\u7ed3\u679c\uff0c\u5982\u679c\u6709\u591a\u91cd\u67e5\u8be2\uff0c\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u8054\u5408\u67e5\u8be2\u7684\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u5148\u4ec5\u8003\u8651\u4f46\u7ec4\u4ef6\u67e5\u8be2\uff0cUnity\u95f4\u63a5\u4f7f\u7528\u4e86\u591a\u79cd\u7ec4\u4ef6\u7684\u67d0\u4e9b\u7279\u5b9a\u7ec4\u5408\u6570\u636e\u6765\u5b9a\u4e49\u4e00\u4e2aSystem\uff0c\u56e0\u4e3a\u5355\u4e2a\u7ec4\u4ef6\u65e0\u6cd5\u786e\u5b9a\u6570\u636e\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 2\n\nnamespace AttackComponent:Component{\n query Global.Position[] as positions\n query Global.HP[] as hps\n \n public Global.HP as hp\n public Global.Position position\n \n fn update(float dt){\n if input == 'B' {\n for i in positions{\n if(distance(position-positions)<10){\n positions[i].x -= hp\n }\n }\n }\n }\n}\n")),(0,n.kt)("h4",{id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"},"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"),(0,n.kt)("p",null,"\u5728Unity DOTS\u4e2d\uff0c\u6309\u7ec4\u4ef6\u7ec4\u5408\u67e5\u8be2\u6709\u4e24\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5927\u7684\u597d\u5904\u662f\u76f4\u63a5\u83b7\u53d6\u6570\u636e\uff0c\u56e0\u4e3aSystem\u9700\u8981\u64cd\u4f5c\u8fd9\u4e9b\u6570\u636e\uff0c\u6240\u4ee5\u76f4\u63a5\u58f0\u660e\u8fd9\u4e9b\u7c7b\u578b\u5c31\u4e0d\u4f1a\u51fa\u9519"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u624d\u662f\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\uff0c\u5c06\u7ec4\u5408\u5b9a\u4e49\u4e3a\u4e00\u79cd\u7279\u5b9a\u7684\u903b\u8f91\u7c7b\u578b")),(0,n.kt)("p",null,"\u76ee\u524d\u770b\u8d77\u6765\u5f62\u6210\u8fd9\u5957\u673a\u5236\u7684\u6838\u5fc3\u539f\u56e0\u662f\u56e0\u4e3a\u524d\u8005\uff1b\u4f46\u662f\u8fd9\u79cd\u7ec4\u5408\u672c\u8d28\u4e0a\u4e0d\u662f\u771f\u6b63\u7684\u67e5\u8be2\u6761\u4ef6\uff0c\u4ed6\u53ef\u80fd\u5bfc\u81f4\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4e00\u4e2aComponent\u80fd\u88ab\u591a\u4e2aSystem\u4f7f\u7528\uff0c\u5c31\u8bf4\u660eComponent\u672c\u8eab\u53ef\u4ee5\u5177\u5907\u591a\u4e2a\u610f\u4e49\uff0c\u4f8b\u5982\u4e24\u4e2a\u4e0d\u540c\u7684System\u6709\u53ef\u80fd\u5b8c\u5168\u6309\u7167\u76f8\u53cd\u7684\u903b\u8f91\u53bb\u5904\u7406\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u5b9a\u4e49\u4e00\u4e2aComponent\u6709\u53ef\u80fd\u521a\u597d\u4e0d\u662f\u67d0\u4e2aSystem\u671f\u671b\u7684\u65b9\u5f0f\uff0c\u7136\u800c\u6700\u7ec8\u5b83\u8fd8\u662f\u88ab\u5f53\u4f5c\u4e86\u67e5\u8be2\u6761\u4ef6\u3002w"),(0,n.kt)("h4",{id:"2262-\u663e\u5f0f\u58f0\u660e"},"2.2.6.2 \u663e\u5f0f\u58f0\u660e"),(0,n.kt)("p",null,"\u8fd8\u662f\u9700\u8981\u67d0\u79cd\u663e\u5f0f\u58f0\u660e\u7684\u7c7b\u578b\uff0c\u54ea\u6015\u662fLayer\u8fd9\u6837"),(0,n.kt)("p",null,"\u611f\u5174\u8da3\u7684\u6570\u636e+TAG\u6570\u7ec4\uff08\u591a\u4e2aTAG\u611f\u5174\u8da3\uff09"),(0,n.kt)("p",null,"\u53ea\u9700\u8981\u58f0\u660e\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\u5c31\u884c"),(0,n.kt)("p",null,"\u7531\u4e8e\u6570\u636e\u65e0\u6cd5\u8868\u8fbe\u7c7b\u578b\uff0c\u6709\u7528\u6237\u624b\u52a8\u8bbe\u5b9a"),(0,n.kt)("p",null,"\u53ef\u4ee5\u50cfUnity\u4e00\u6837\u5b9a\u4e49\u4e00\u4e2aLayer\u5217\u8868\uff0c\u65b9\u4fbf\u7528\u6237\u5bf9\u5bf9\u8c61\u8fdb\u884c\u5f52\u7c7b"),(0,n.kt)("p",null,"Unity\u7684Component \u7ec4\u5408\u67e5\u8be2\u53cd\u800c\u4e0d\u597d\u7406\u89e3\uff0c\u592a\u590d\u6742\uff0c\u9700\u8981\u8bb0\u5fc6\u66f4\u590d\u6742\u7684\u4e1c\u897f\uff0c\u76f8\u6bd4Tag\uff0ctag\u6982\u5ff5\u8db3\u591f\u7b80\u5355"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8981\u80fd\u4efb\u610f\u67e5\u8be2\uff0c\u5c31\u53ef\u4ee5\u6ee1\u8db3\u901a\u7528\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u6ee1\u8db3\u4efb\u610f\u7ec4\u4ef6\u95f4\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8bed\u4e49\u5316")),(0,n.kt)("h4",{id:"2263-rust-ecs"},"2.2.6.3 RUST ECS"),(0,n.kt)("p",null,'You can use empty structs to help you identify specific entities. These are known as "marker components". Useful with ',(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),"."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Add this to all menu ui entities to help identify them\n#[derive(Component)]\nstruct MainMenuUI;\n\n/// Marker for hostile game units\n#[derive(Component)]\nstruct Enemy;\n\n/// This will be used to identify the main player entity\n#[derive(Component)]\nstruct Player;\n")),(0,n.kt)("h4",{id:"2264-labelslayers"},"2.2.6.4 Labels/Layers"),(0,n.kt)("h3",{id:"227-component--system"},"2.2.7 Component + System"),(0,n.kt)("p",null,"Unity\u5c06Component\u548cSystem\u533a\u5206\u5f00\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\u5c06\u4ee3\u7801\u548c\u6570\u636e\u5206\u5f00\uff0c\u4f7f\u5f97System\u4e2d\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff1b\u5373System\u672c\u8eab\u4e5f\u4e0d\u80fd\u6709\u4efb\u4f55\u5b9e\u4f8b\u6570\u636e\uff0c\u56e0\u4e3a\u90a3\u6837\u76f8\u5bf9\u4e8e\u5b83\u9700\u8981\u5904\u7406\u7684Component\u800c\u8a00\uff0c\u5176\u4e2d\u5b58\u5728\u4e86\u201c\u5168\u5c40\u53d8\u91cf\u201d\uff0c\u8fd9\u5f15\u5165\u4e86\u5b9e\u4f53\u95f4\u7684\u76f8\u5173\u6027\uff0c\u8026\u5408\uff0c\u5e76\u4f7f\u5f97\u5f88\u96be\u5b9a\u4e49\u6bcf\u4e2aComponent\u4e4b\u95f4\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e5f\u5e26\u6765\u4e86\u4e0d\u597d\u7684\u540e\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u8005\u9700\u8981\u5206\u522b\u5355\u72ec\u6dfb\u52a0Component\u548cSystem"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4f7f\u7528\u8005\u5fc5\u987b\u5f88\u5c0f\u5fc3\u5904\u7406\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6bd4\u5982\u4f60\u5b9a\u4e49\u4e86Component\uff0c\u4f46\u662f\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u6ca1\u6709\u6dfb\u52a0\u76f8\u5e94\u7684System\uff0c\u5219\u6570\u636e\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u884c\u4e3a\u5b9a\u4e49\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5f15\u5165\u4e86System\uff0c\u4f46\u662f\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u5bf9\u5e94Component\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u5219\u8fd9\u4e9bSystem\u4e5f\u65e0\u6cd5\u53d1\u6325\u4f5c\u7528\u3002")),(0,n.kt)("p",null,"Creation\u540c\u65f6\u89e3\u51b3\u4e86\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0c\u65b9\u6cd5\u662f\u5c06\u4e24\u8005\u878d\u4e3a\u4e00\u4f53\uff0c\u4f46\u662f\u901a\u8fc7\u7f16\u8bd1\u5668\u5c06\u5c5e\u6027\u62bd\u53d6\u4e3aComponent\uff08\u5f53\u7136Unity\u4e5f\u5b58\u5728\u7c7b\u4f3c\u7684\u8f6c\u6362\u673a\u5236\uff09\uff1b\u66f4\u8fdb\u4e00\u6b65\uff0cCreation\u901a\u8fc7public\u3001private\u548cquery\u6807\u5fd7\u7b26\u533a\u5206\u4e86\u516c\u5171\u53d8\u91cf\u3001\u79c1\u6709\u53d8\u91cf\u548c\u5f15\u7528\u53d8\u91cf\uff0c\u4f7f\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cCreation\u548cUnity\u5728\u529f\u80fd\u5c42\u9762\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("h4",{id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"},"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u672a\u77e5\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5bf9\u5b9e\u4f53\u6267\u884c\u64cd\u4f5c\uff0c\u6240\u6709\u5f88\u96be\u4fdd\u8bc1\u987a\u5e8f\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u6bd4Unity DOTS\u8981\u590d\u6742\uff0c\u540e\u8005\u7531\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u6240\u6709\u7ec4\u4ef6\uff0c\u80fd\u591f\u4e25\u683c\u4fdd\u8bc1\u903b\u8f91\u987a\u5e8f\u3002\u4f46\u662fRealityIS\u4e2d\uff0c\u540c\u4e00\u4e2a\u5b9e\u4f53\u53ef\u80fd\u5305\u542b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u987a\u5e8f\uff0c\u53ef\u80fd\u4f1a\u5b8c\u5168\u51b2\u7a81\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5141\u8bb8\u7528\u6237\u81ea\u884c\u53bb\u8c03\u6574\u6267\u884c\u987a\u5e8f\uff0c\u4f1a\u4e00\u4e0b\u5b50\u5bf9\u7528\u6237\u63d0\u9ad8\u4e86\u5f88\u591a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u4ed4\u7ec6\u53bb\u5206\u6790\u4e00\u4e0b\u4e00\u822c\u7684\u60c5\u51b5\uff0c\u5982\u679c\u80fd\u591f\u5728\u505a\u4e00\u4e0b\u5047\u8bbe\u6216\u8005\u7ea6\u675f\uff0c\u90a3\u4e48\u95ee\u9898\u5c31\u4f1a\u7b80\u5316\u5f88\u591a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ea\u8bfb\u7684\u7ec4\u4ef6\u90fd\u653e\u5728\u6700\u540e\u6267\u884c\uff0c\u6240\u6709\u5bf9\u53d8\u91cf\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u4e0d\u7528\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"2\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ef\u5199\u5165\u6216\u8005\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u90fd\u987a\u5e8f\u65e0\u5173")),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u8fdb\u4e00\u6b65\uff0c\u6211\u4eec\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"3\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u5c5e\u6027")),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2a\u95ee\u9898\u5c31\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u88ab\u5904\u7406\uff0c\u865a\u62df\u673a\u52a8\u6001\u8c03\u6574\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5728\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e2d\uff0c\u8fd9\u4e09\u4e2a\u6761\u4ef6\u8fd8\u662f\u6bd4\u8f83\u5bb9\u6613\u6ee1\u8db3\u3002\u5176\u4e2d\u5bf9\u4e8e\u7b2c3\u6761\uff0c\u8fd9\u5c31\u6709\u70b9\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u662f\u4e00\u4e2a \u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ea\u6709\u4e00\u4e2a\u8f93\u51fa\u503c\uff0c\u5e76\u4e14\u6240\u6709\u8f93\u5165\u53c2\u6570\u90fd\u662f\u53ea\u8bfb\u7684\u3002\u5982\u679c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u7684\u5c5e\u6027\uff0c\u90a3\u4e48\u5c31\u5f88\u5bb9\u6613\u533a\u5206\u51fa\u6240\u6709\u53ea\u8bfb\u548c\u53ef\u5199\u5165\u4e24\u5927\u7c7b\u7ec4\u4ef6\u3002\u5373\u662f\u8bf4\uff0c\u7b2c\u4e09\u4e2a\u5047\u8bbe\u53ef\u4ee5\u628a\u6240\u6709\u7ec4\u4ef6\u5206\u4e3a\u4e24\u7c7b\uff1a\u53ea\u8bfb\u7684\u7ec4\u4ef6\u548c\u53ea\u5199\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5373\u4fbf\u5982\u6b64\uff0c\u8fd8\u662f\u5269\u4e0b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u7ec4\u4ef6\u5bf9\u4e24\u4e2a\u5c5e\u6027\u4ea4\u53c9\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8bfb\u6216\u8005\u53ea\u5199\u5c5e\u6027\u4e4b\u95f4\u7531\u4f9d\u8d56\u5173\u7cfb")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u5728\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u81ea\u52a8\u6392\u5e8f\u65f6\uff0c\u5c06\u65e0\u6cd5\u63a8\u7b97\u5b9e\u9645\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6709\u4e24\u79cd\u5904\u7406\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u9047\u5230\u51b2\u7a81\u65f6\u4ea4\u7531\u7528\u6237\u6765\u6307\u5b9a\uff0c\u4f46\u662f\u7531\u4e8e\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u5168\u5c40\u7684\uff0c\u800c\u4e0d\u662f\u6839\u636e\u7528\u6237\u8bbe\u7f6e\u6765\u7684\uff0c\u4f8b\u5982\u4e24\u4e2a\u7528\u6237\u53ef\u80fd\u8bbe\u7f6e\u4e86\u76f8\u53cd\u7684\u987a\u5e8f\uff0c\u6240\u4ee5\u8fd9\u79cd\u65b9\u6cd5\u4e0d\u53ef\u53d6\uff0c\u5e76\u4e14\u5b83\u9700\u8981\u7528\u6237\u4ecb\u5165\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u662f\u7531\u5f00\u53d1\u8005\u6765\u89e3\u51b3\u51b2\u7a81")),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u5f00\u53d1\u8005\u662f\u6700\u4e86\u89e3\u903b\u8f91\u7684\uff0c\u800c\u4e14\u5f00\u53d1\u8005\u4e00\u65e6\u89e3\u51b3\u597d\u51b2\u7a81\u5c31\u4e0d\u9700\u8981\u7528\u6237\u5728\u505a\u4e0d\u5fc5\u8981\u5e76\u4e14\u589e\u52a0\u590d\u6742\u5ea6\u7684\u8bbe\u7f6e\u3002\u53ef\u4ee5\u628a\u6240\u6709\u4ee3\u7801\u770b\u6210\u4e00\u4e2a\u6574\u4e2a\uff0c\u5f53\u5f00\u53d1\u8005\u5728\u63d0\u4ea4\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u5e76\u4e0d\u53ea\u662f\u8981\u8003\u8651\u81ea\u5df1\u7684\u4ee3\u7801\u51b2\u7a81\uff0c\u8fd8\u8981\u8003\u8651\u5168\u5c40\u4ee3\u7801\u51b2\u7a81\u3002\u4e24\u4e2a\u5f00\u53d1\u8005\u63d0\u4ea4\u4ee3\u7801\u603b\u662f\u6709\u65f6\u95f4\u5148\u540e\u987a\u5e8f\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u4e8e\u540e\u63d0\u4ea4\u4ee3\u7801\u7684\u4eba\uff0c\u7cfb\u7edf\u629b\u51fa\u6240\u6709\u53ef\u80fd\u4e0e\u4e4b\u51b2\u7a81\u7684\u7ec4\u4ef6\u3002\u6709\u5f00\u53d1\u8005\u901a\u8fc7\u4e86\u89e3\u51b2\u7a81\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u5e76\u6bd4\u8f83\u81ea\u5df1\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u6765\u8bbe\u7f6e\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u4e5f\u4e0d\u662f\u5b8c\u5168\u53ef\u9760\uff0c\u4f8b\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u6839\u672c\u6ca1\u6709\u770b\u5bf9\u65b9\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u968f\u4fbf\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u987a\u5e8f\uff0c\u8fd9\u65f6\u5019\u53ef\u80fd\u5bfc\u81f4\u9519\u8bef\u903b\u8f91\u3002\u4e00\u79cd\u53ef\u80fd\u7684\u65b9\u6cd5\u662f\uff0c\u5bf9\u8fd9\u4e9b\u6709\u51b2\u7a81\u7684\u7ec4\u4ef6\uff0c\u540e\u9762\u5f00\u53d1\u8005\u7684\u8bbe\u7f6e \u7ed3\u679c\u4f1a\u53d1\u9001\u7ed9\u524d\u9762\u5f00\u53d1\u8005\uff0c\u524d\u9762\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u6267\u884c\u987a\u5e8f\u63d0\u51fa\u5f02\u8bae\u6216\u8005\u540c\u610f\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5206\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5c3d\u91cf\u907f\u514d\u7f16\u5199\u8fd9\u79cd\u5728\u4e00\u5e27\u4e4b\u5185\u6709\u590d\u6742\u4f9d\u8d56\u7684\u7ec4\u4ef6\uff0c\u6bd4\u5982\u5982\u679c\u7ec4\u4ef6\u4e4b\u524d\u90fd\u5b8c\u5168\u6ca1\u6709\u4f9d\u8d56\uff0c\u90a3\u5c31\u4e0d\u4f1a\u5b58\u5728\u8fd9\u4e2a\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\uff0c\u5177\u6709\u8fd9\u79cd\u590d\u6742\u987a\u5e8f\u7684\u7ec4\u4ef6\uff0c\u901a\u5e38\u5bf9\u5e94\u7684\u662f\u4e00\u4e2a\u5f00\u53d1\u8005\u5185\u90e8\u7684\u903b\u8f91\uff0c\u8fd9\u65f6\u5019\u5b83\u81ea\u5df1\u8bbe\u7f6e\u6b63\u786e\u7684\u987a\u5e8f\u5c31\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8fd9\u79cd\u53ef\u80fd\u6027\uff0c\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u6ca1\u6709\u610f\u4e49\uff0c\u53ef\u4ee5\u4e0d\u7528\u7406\u4f1a\uff0c\u7531\u7528\u6237\u81ea\u884c\u53d1\u73b0\u95ee\u9898\u540e\u53cd\u9988\u7ed9\u5f00\u53d1\u8005\u534f\u5546\u5904\u7406")),(0,n.kt)("h4",{id:"2272-change-driven-update"},"2.2.7.2 Change-driven update"),(0,n.kt)("p",null,"\u4e8b\u4ef6\u8868\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u5efa\u7acb\u4e8b\u4ef6\u961f\u5217\uff0c\u5ef6\u8fdf\u5230\u4e00\u8d77\u6267\u884c\uff0c\u6d88\u9664\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5e76\u53d1\uff0c\u540c\u65f6\u80fd\u591f\u505a\u5230\u5e76\u884c\u8ba1\u7b97\uff0c\u56e0\u4e3a\u4e00\u4e9b\u76f8\u540c\u7c7b\u578b\u7684\u4e8b\u4ef6\u53ef\u80fd\u5bf9\u5e94\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5373\u4f7f\u540c\u4e00\u4e2a\u4e8b\u4ef6\u5bf9\u5e94\u4e0d\u540c\u7684\u7ec4\u4ef6\uff0c\u901a\u8fc7\u6309\u7ec4\u4ef6\u7c7b\u578b\u6392\u5e8f\u548c\u7ec4\u7ec7\uff0c\u4e5f\u80fd\u5b66\u5230\u6309\u987a\u5e8f\u5e76\u884c\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4e00\u90e8\u5206\u7531\u72b6\u6001\u53d8\u5316\u5bfc\u81f4\u7684\u5206\u652f\u8f6c\u5316\u4e3a\u4e8b\u4ef6\u5e8f\u5217\uff0c\u5f53\u7136\u5b9e\u9645\u5904\u7406\u673a\u5236\u53ef\u80fd\u4e0d\u4e00\u6837")),(0,n.kt)("p",null,"\u6570\u636e\u5e93\u91cd\u7ec4\u6d89\u53ca\u66f4\u65b0\u7b26\u53f7\u8868\u3001\u4ee5\u53caTable\u7684\u6570\u636e\u91cd\u65b0\u8c03\u6574\uff0c\u7b26\u53f7\u8868\u548cTable API\u4e00\u6837\uff0c\u9700\u8981\u7b26\u53f7\u8868API"),(0,n.kt)("h4",{id:"2273-ecs"},"2.2.7.3 ECS"),(0,n.kt)("p",null,"Unity\u4e2dECS\u7684system \u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u8ddfComponent \u4e4b\u95f4\u7684\u8054\u7cfb\u7531System \u5bf9Entity\u7684Query\u5b9a\u4e49\uff0c\u4f46\u662f\u5e26\u6765\u7684\u7ed3\u679c\u662f\u7cfb\u7edf\u521d\u59cb\u5316\u7684\u65f6\u5019\u9700\u8981\u72ec\u7acb\u5b8c\u6210\u4e24\u4e2a\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bbe\u7f6e\u6bcf\u4e2aEntity\u7684Component "),(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f8b\u5316\u6240\u6709\u7cfb\u7edf\u4f1a\u4f7f\u7528\u7684System ")),(0,n.kt)("p",null,"\u8fd9\u79cd\u5f31\u5173\u7cfb\u7684\u4e00\u4e2a\u53ef\u80fd\u7684\u7ed3\u679c\u662f\u6709\u4e9bSystem \u53ef\u80fd\u67e5\u8be2\u4e0d\u5230\u4efb\u4f55\u5177\u6709\u611f\u5174\u8da3\u7684Component \uff0c\u800c\u4e14\u7cfb\u7edf\u6ca1\u6cd5\u81ea\u52a8\u8ba1\u7b97\uff0c\u53ea\u80fd\u7531\u5f00\u53d1\u8005\u624b\u52a8\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cdSystem \u5bf9Component \u7c7b\u578b\u7684\u786e\u5b9a\u6027\u5f15\u7528\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u5f88\u96be\u52a8\u6001\u6784\u5efa\u65b0\u7684\u573a\u666f"),(0,n.kt)("p",null,"\u800c\u4e14\u5173\u952e\u662f\u666e\u901a\u7528\u6237\u5f88\u96be\u53bb\u7406\u89e3\u4e0a\u8ff0\u4e24\u4e2a\u64cd\u4f5c\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u7ed9\u4e00\u4e2aEntity \u6dfb\u52a0\u4e86\u67d0\u4e2aComponent \uff0c\u4f46\u662f\u4ed6\u5f88\u96be\u6bd4\u8f83\u660e\u786e\u5730\u8981\u53bb\u518d\u6dfb\u52a0\u54ea\u4e9bSystem \uff0c\u8fd9\u53ef\u80fd\u9700\u8981\u7c7b\u4f3c\u4e8e\u7ed9\u4e00\u4e2a\u5bf9\u5e94\u8868\uff0c\u800c\u8fd9\u79cd\u5bf9\u5e94\u5173\u7cfb\u53ef\u80fd\u6709\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u6309\u7167System \u7684\u529f\u80fd\u63cf\u8ff0\u6dfb\u52a0\u4e86\u67d0\u4e2aSystem \uff0c\u4ed6\u53c8\u53ef\u80fd\u5fd8\u4e86\u8981\u7ed9\u4e00\u4e9bEntity \u6dfb\u52a0\u5bf9\u5e94\u7684Component \uff0c\u7a0b\u5e8f\u6ca1\u529e\u6cd5\u68c0\u67e5\u8fd9\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u66f4\u4e25\u91cd\u7684\uff0cSystem \u7684\u5b9a\u4e49\u548c\u5f00\u53d1\u5fc5\u987b\u4e86\u89e3Component \u7684\u5b9a\u4e49\uff0c\u8fd9\u5c31\u56de\u5230\u4ee5\u524d\u7684\u95ee\u9898\uff1aComponent \u9700\u8981\u534f\u8bae\uff0c\u8fd9\u5f88\u590d\u6742")),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aSystem \u548cComponent \u662f\u4e25\u683c\u76f8\u5173\u7684\uff0c\u4ed6\u4eec\u5206\u5f00\u6ca1\u6709\u610f\u4e49\uff0c\u5728OOP\u4e2d\u5b83\u4eec\u5c31\u662f\u5b9a\u4e49\u5728\u4e00\u8d77\u7684\uff0c\u5728\u4e00\u8d77\u53ef\u4ee5\u907f\u514d\u9700\u8981\u505a\u4e24\u4e2a\u72ec\u7acb\u770b\u8d77\u6765\u4e0d\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u5b9e\u9645\u4e0a\u662f\u76f8\u5173\u7684"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u548c\u5728\u4e00\u8d77\uff0c\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u4e2a\u65b0\u7684\u7406\u89e3\u4e0a\u7684\u95ee\u9898\uff1a"),(0,n.kt)("p",null,"System \u5168\u5c40\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662f\u968f\u7740Component \u4e00\u8d77\u52a0\u5230\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f7f\u5f97\u770b\u8d77\u6765\u6bcf\u4e2aEntity \u5bf9\u4f1a\u6267\u884c\u8fd9\u4e2a\u65b9\u6cd5"),(0,n.kt)("p",null,"\u4f46\u8fd9\u95ee\u9898\u662f\u5426\u4e5f\u4e0d\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5185\u90e8\u7ec4\u4ef6\uff0c\u4ed6\u672c\u6765\u4e5f\u662f\u9700\u8981\u6bcf\u4e2a\u5bf9\u8c61\u6267\u884c\u4e00\u6b21\uff0c\u5728ECS\u4e2d\u53ea\u662f\u6211\u4eec\u5f3a\u8c03\u5e76\u884c\uff0c\u5176\u4e2d\u4e00\u4efd\u4ee3\u7801\u5bf9\u591a\u4e2a\u6570\u636e\u6267\u884c\uff0c\u800c\u9690\u85cf\u4e86System \u5176\u5b9e\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u6267\u884c\u7684\u611f\u89c9\uff0c\u4f46\u662f\u5728\u5185\u90e8\u5176\u5b9e\u662f\u5faa\u73af\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u8981\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7279\u5b9a\u5b9e\u4f53\u904d\u5386\u5176\u4ed6\u5b9e\u4f53\uff0c\u4ed6\u5176\u5b9e\u4e5f\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u4f1a\u6267\u884c\uff0c\u6bd4\u5982\u4e00\u4e2a\u5854\u9632\u6e38\u620f\uff0c\u90a3\u4e2a\u70ae\u5854\u90fd\u8981\u904d\u5386\u884c\u8d70\u7684\u602a\u7269\uff0c\u770b\u770b\u662f\u5426\u5728\u8303\u56f4\u5185\uff0c\u5982\u679c\u5728\u8303\u56f4\u5185\u5c31\u5bf9\u5176\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5168\u5c40\u7684\uff0c\u90a3\u5c31\u66f4\u597d\u7406\u89e3\uff0c\u89e3\u91ca\u5668\u4fdd\u8bc1\u5168\u5c40\u53ea\u6709\u4e00\u4e2a\uff0c\u90a3\u4e48\u5c31\u662f\u8be5\u5b9e\u4f53\u6267\u884c\u4e86\u4e00\u6b21")),(0,n.kt)("p",null,"\u5230\u8fd9\u91cc\u4e3b\u8981\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5bf9\u591a\u4e2a\u5b9e\u4f53\u7684\u904d\u5386\u5f80\u5f80\u5e26\u6709\u4e00\u4e2a\u6761\u4ef6\u5f62\u6210\u5206\u652f\uff0c\u5e76\u4e14\u90a3\u4e2a\u5e76\u884c\u7684\u7ec4\u4ef6A\u5185\u90e8\u90fd\u5728\u5355\u72ec\u8bbf\u95ee\u6240\u6709\u5b9e\u4f53\uff0c\u53c8\u53ef\u80fd\u9020\u6210\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1\u51b2\u7a81\uff0c\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u8bbf\u95ee\u540c\u4e00\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u5c40\u90e8\u6027\u7834\u574f\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5206\u522b\u8bbf\u95ee\u4e0d\u540c\u7684\u6570\u636e")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u95ee\u9898\uff0c\u89e3\u91ca\u5668\u8981\u628a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u7684\u6267\u884c\u8f6c\u6362\u4e3a\u4e00\u4e2a\u4e00\u4e2a\u7ec4\u4ef6A\u987a\u5e8f\u6267\u884c\uff0c\u5728\u6bcf\u4e2a\u987a\u5e8f\u6267\u884c\u7684\u7ec4\u4ef6\u5185\u5bf9\u611f\u5174\u8da3\u7684\u6570\u7ec4\u8fdb\u884c\u5e76\u53d1\u8ba1\u7b97"),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u597d\u7684\u65b9\u6848\uff0c\u5bf9\u6240\u6709\u611f\u5174\u8da3\u7684\u5b9e\u4f53\u6570\u7ec4\uff0c\u5e76\u53d1\u5730\u5b89\u987a\u6267\u884c\u7ec4\u4ef6A\u5bf9\u5e94\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u89e3\u91ca\u5668\u7684\u597d\u5904"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u7531\u4e8eSystem \u770b\u8d77\u6765\u53ef\u80fd\u88ab\u6784\u9020\u591a\u4e2a\u5b9e\u4f8b\uff0c\u6240\u4ee5\u9700\u8981\u89e3\u91ca\u5668\u53ea\u6784\u9020\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u8bb0\u4f4f\u54ea\u4e9b\u7ec4\u4ef6\u5f15\u7528\u4e86\u8fd9\u4e2a\u5b9e\u4f8b\uff0c\u4e5f\u5c31\u662f\u5728Unity\u4e2d\u4e3a\u4e86\u652f\u6301Entity\u7684Query\uff0c\u4ed6\u4e5f\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u6570\u636e\u5e93\u6765\u8bb0\u5f55\u8fd9\u4e9b\u5f15\u7528\u5173\u7cfb\uff0c\u5373\u4f7f\u9488\u5bf9\u7b2c\u4e00\u79cd\u548c\u7b2c\u4e09\u79cd\u7ec4\u4ef6\u4e5f\u662f\u4e00\u6837\u7684"),(0,n.kt)("h4",{id:"2274-ecs\u53c2\u6570"},"2.2.7.4 ECS\u53c2\u6570"),(0,n.kt)("p",null,"\u57fa\u4e8eComponent \u7ec4\u5408\u7684\u65b9\u5f0f\u6539\u53d8\u4e86\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u6a21\u578b\u90fd\u9700\u8981\u53c2\u6570\u4f20\u9012\uff0c\u4e0d\u7ba1\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u7528\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u89c6\u5316\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u58f0\u660e\u5f0f\u7f16\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"HOUDINI \u7a0b\u5e8f\u5316\u7f16\u7a0b")),(0,n.kt)("p",null,"\u4e00\u4e2aSystem \u5904\u7406\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u5206\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u90e8\u5b9a\u4e49\u6570\u636e\uff0c\u5728\u5bf9\u5e94\u7684Component \u4e2d\uff0c\u5185\u90e8\u5b9a\u4e49\u901a\u5e38\u7528\u6765\u4fdd\u5b58\u5e27\u4e0e\u5e27\u4e4b\u95f4\u7684\u5185\u90e8\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5916\u90e8\u5f15\u7528\u6570\u636e\uff0c\u5b9a\u4e49\u4e00\u4e2a\u5168\u5c40\u8f83\u5927\u7684\u516c\u5171\u5c5e\u6027\u540d\u79f0\uff0c\u6bcf\u4e2a\u540d\u79f0\u6709\u7279\u5b9a\u542b\u4e49\uff0c\u4ec5\u6709\u5f15\u7528\u7684\u540d\u79f0\u624d\u4f1a\u52a8\u6001\u7ec4\u5408\u6210\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u673a\u5236\u9760\u7f16\u8bd1\u5668\u6765\u5904\u7406\uff0c\u5168\u5c40\u5c5e\u6027\u8868\u4e4b\u95f4\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u7f16\u8bd1\u5668\u81ea\u52a8\u5f15\u5165\uff1b\u5982\u679c\u4e00\u4e2a\u63d2\u4ef6\u5f00\u53d1\u8005\u6216\u8005Creation\u5f00\u53d1\u8005\u7f16\u5199\u7684\u7ec4\u4ef6\u9700\u8981\u8de8\u7cfb\u7edf\u5f15\u7528\uff0c\u9700\u8981\u5b9a\u4e49\u79c1\u6709\u540d\u79f0\u5217\u8868")),(0,n.kt)("p",null,"Global Name "),(0,n.kt)("p",null,"Private Name"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e00\u6765\uff0cTable Engine \u6240\u505a\u7684\u5927\u90e8\u5206\u64cd\u4f5c\u5c31\u662f\u8fdb\u884c\u6570\u7ec4\u7684\u751f\u6210\u3001\u521d\u59cb\u5316\u3001\u590d\u5236\u3001\u6392\u5e8f\u3001\u4fee\u6539\u3001SOA\u7b49\uff0c\u8fd9\u90e8\u5206\u901a\u8fc7\u539f\u751f\u7684\u9ad8\u6548\u5b9e\u73b0\uff0c\u901a\u5e38Table\u662f\u52a8\u6001\u751f\u6210\u7684\uff0c\u4e0d\u77e5\u9053\u7ef4\u5ea6\u548c\u957f\u5ea6\u7b49\u4fe1\u606f\uff0c\u8fd9\u5c31\u662fTable\u8981\u505a\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"Global Name\u4e2d\u7684\u6bcf\u4e2a\u5c5e\u6027\u540d\u79f0\u90fd\u662f\u5177\u6709\u8bed\u4e49\u7684\uff0c\u76f8\u5f53\u4e8e\u5bbe\u8bed\uff0c\u800c\u6bcf\u4e2aSystem\u5f15\u7528\u7684Name\u90fd\u53ef\u4ee5\u8ffd\u8e2a\uff0c\u56e0\u6b64\u53ef\u4ee5\u5f52\u7eb3\u51faSystem\u5927\u81f4\u7684\u8bed\u4e49\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,"\u5728\u4ec0\u4e48\u6761\u4ef6\u4e0b\u505a\u4ec0\u4e48\u4e8b\u60c5\uff0c\u6761\u4ef6\u901a\u5e38\u662fGlobal Name\u4e2d\u67d0\u4e2a\u5c5e\u6027\u7684\u503c"),(0,n.kt)("p",null,"\u6761\u4ef6 \u4e3b\u8bed \u8c13\u8bed\u52a8\u8bcd \u5bbe\u8bed "),(0,n.kt)("p",null,"\u5982\u679c$NAME<5 System \u7531System\u5f00\u53d1\u8005\u586b\u5199\uff0c\u53ef\u4ee5\u591a\u4e2a Global Name"),(0,n.kt)("p",null,"\u6570\u636e\u5f88\u5c11\u662f\u53ea\u6709\u4e00\u4e2aSystem \u5355\u72ec\u6d88\u8d39\uff0c\u901a\u5e38\u662f\u591a\u4e2aSystem \u4f1a\u5171\u4eab\u4e00\u4e9bcomponent \u6570\u636e\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce\u7ec4\u4ef6\u3001\u52a8\u753b\u7cfb\u7edf\u6216\u5176\u4ed6\u7ec4\u4ef6\u4f1a\u4fee\u6539\u4f4d\u7f6e\uff0c\u800c\u6e32\u67d3\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u8fd9\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u6e32\u67d3"),(0,n.kt)("p",null,"\u4e00\u79cd\u5e38\u7528\u7684\u6a21\u5f0f\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6216\u591a\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u8fdb\u884c\u6d88\u8d39\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u53ea\u8bfb\uff0c\u5e76\u4e14\u4f7f\u7528\u76ee\u7684\u901a\u5e38\u662f\u4e3a\u4e86\u7ed9\u7528\u6237\u53cd\u9988\uff0c\u6216\u8005\u5199\u5165\u5230\u7cfb\u7edf\u6216\u8005\u8fdb\u884c\u6570\u636e\u5b58\u6863")),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u7ec4\u4ef6\u4f1a\u8bbf\u95ee\u6570\u636e\uff0c\u56e0\u6b64\u4e3a\u4e86\u907f\u514d\u6570\u636e\u91cd\u590d\u5b9a\u4e49\uff0c\u6709\u5fc5\u8981\u5b9a\u4e49\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u6807\u51c6\u6570\u636e\u548c\u5bf9\u5e94\u5c5e\u6027\u540d\u79f0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7cfb\u7edf\u901a\u8fc7\u5f15\u7528\u4f7f\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7cfb\u7edf\u4ec5\u4f7f\u7528\u90e8\u5206\u6570\u636e\u5c5e\u6027\uff0c\u901a\u8fc7\u663e\u793a\u58f0\u660e\u5f15\u7528")),(0,n.kt)("h4",{id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"},"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"),(0,n.kt)("p",null,"\u4e24\u79cd\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e8b\u4ef6\uff0c\u53c2\u89c12.2.7.2\u8282\uff0c\u672c\u8d28\u4e0a\u662f\u72b6\u6001\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u8c03\u7528\uff0c\u5c31\u662f\u6b63\u5e38\u65b9\u6cd5")),(0,n.kt)("h4",{id:"2276-\u5355\u4f8b\u7ec4\u4ef6"},"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u6709\u4e00\u7c7b\u7ec4\u4ef6\uff0c\u53ea\u53ef\u4ee5\u6dfb\u52a0\u5230Root\u5bf9\u8c61\u4e0a\uff0c\u5b83\u4e0d\u53ef\u4ee5\u88ab\u6dfb\u52a0\u5230\u4efb\u4f55\u81ea\u5b9a\u4e49\u5b9e\u4f53\u5bf9\u8c61\u4e0a\u3002\u8fd9\u53ef\u4ee5\u7528\u6765\u5904\u7406\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\u3002"),(0,n.kt)("h3",{id:"228-\u6d88\u606f\u901a\u4fe1"},"2.2.8 \u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,"\u7528\u6237\u95f4\u901a\u4fe1\u7684\u60c5\u51b5\u6216\u7c7b\u578b\u6709\u51e0\u4e0b\u51e0\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u548c\u611f\u77e5\uff0c\u8fd9\u662f\u6700\u57fa\u672c\u6743\u9650\uff0c\u8ba9\u522b\u4eba\u53ef\u4ee5\u4e86\u89e3\u4e00\u4e9b\u4f60\u7684\u5c5e\u6027\uff0c\u72b6\u6001 \uff0c\u751a\u81f3\u6027\u683c\uff0c\u4ee5\u53ca\u53ef\u4ee5\u600e\u6837\u4e0e\u4f60\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\uff0c\u6240\u6709\u7528\u6237\u4e4b\u95f4\u7684\u6d89\u53ca\u4fee\u6539\u7684\u64cd\u4f5c\u90fd\u662f\u4e00\u79cd\u4ea4\u6613\uff0c\u4f60\u5fc5\u987b\u6d88\u8017\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90\uff0c\u53e6\u4e00\u65b9\u83b7\u5f97\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90")),(0,n.kt)("p",null,"\u6682\u65f6\u4e0d\u5f00\u653e\u90a3\u79cd\u4f1a\u5bf9\u5176\u4ed6\u4eba\u9020\u6210\u7834\u574f\u6027\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u653b\u51fb\u522b\u4eba\uff0c\u4e5f\u5c31\u662fReality World\u6ca1\u6709\u66b4\u529b\uff0c\u6ca1\u6709\u574f\u4eba\uff0c\u6ca1\u6709\u7834\u574f\u3002"),(0,n.kt)("p",null,"\u4f46\u4f60\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7ecf\u9a8c\u4e0d\u5584\u800c\u7834\u4ea7\uff0c\u4f8b\u5982\u5730\u76ae\u662f\u9700\u8981\u79df\u91d1\u7684\uff0c\u56e0\u6b64\u4f60\u5fc5\u987b\u8d5a\u94b1\uff0c\u5426\u5219\u4f60\u5c31\u6ca1\u6709\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6700\u597d\u7684\u673a\u5236\u662f\u4f60\u7684\u521b\u9020\u529b\u8d8a\u5f3a\uff0c\u4ed8\u51fa\u7684\u65f6\u95f4\u8d8a\u591a\uff0c\u6536\u5165\u8d8a\u9ad8\uff0c\u76f8\u6bd4\u4f20\u7edf\u7684\u6a21\u62df\u7ecf\u8425\u6e38\u620f\u4e3b\u8981 \u4f9d\u8d56\u4e8e\u65f6\u95f4\uff0c\u8fd9\u91cc\u6211\u4eec\u66f4\u5f3a\u8c03\u521b\u9020\u529b\uff0c\u5176\u5b9e\u4e5f\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u80fd\u529b\u3002"),(0,n.kt)("h4",{id:"2281-\u7cfb\u7edf\u673a\u5236"},"2.2.8.1 \u7cfb\u7edf\u673a\u5236"),(0,n.kt)("p",null,"\u4f46\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e9b\u5168\u5c40\u884c\u4e3a\uff0c\u4f8b\u5982\u5929\u6c14\u5bf9\u5168\u4f53\u57ce\u5e02\u4eba\u5458\u7684 \u5f71\u54cd \uff0c\u4f8b\u5982\u653f\u5e9c\u7684\u653f\u7b56\u7b49\uff0c\u8fd9\u4e9b\u540e\u7eed\u518d\u8003\u8651\u3002\u65e9\u671f\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u4ea4\u6613\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6d88\u606f\u901a\u4fe1\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8eID"),"\uff1a\u5728\u7ec4\u4ef6\u5185\u4fdd\u5b58\u7ec4\u4ef6ID\uff0c\u7136\u540e\u76f4\u63a5\u53d1\u9001\u53ea\u7279\u5b9a\u7684\u4e00\u4e2a\u6216\u591a\u4e2aID\uff0c\u5c31\u50cfErlang\u4e2d\u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8e\u7c7b\u578b"),"\uff1a\u4f7f\u7528\u7c7b\u578b+UserID\u8fdb\u884c\u5224\u65ad")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u673a\u5236\u5176\u5b9e\u7c7b\u4f3c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u673a\u5236\uff1a\u9996\u5148\u4f60\u9700\u8981\u53d6\u5f97\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u7136\u540e\u4f60\u5c31\u53ef\u4ee5\u5411\u5176\u53d1\u9001\u6d88\u606f\uff08\u8c03\u7528\u51fd\u6570\uff09\uff0c\u5f53\u7136Erlang\u4f7f\u7528Pid\u8026\u5408\u5ea6\u66f4\u4f4e \u4e00\u4e9b\u3002\u4f46\u8026\u5408\u4ecd\u7136\u662f\u5b58\u5728\u7684\uff0c\u4f8b\u5982\u5bf9\u65b9\u51fd\u6570\u7b7e\u540d\u4fee\u6539\u4e86\uff0c\u6216\u8005\u751a\u81f3\u5220\u9664\u4e0d\u5b58\u5728\u4e86\uff0c\u6216\u8005PID\u88ab\u4fee\u6539\u4e86\uff0c\u90fd\u662f\u53ef\u80fd\u5f15\u8d77\u95ee\u9898\u7684\uff0c\u7a0b\u5e8f\u5f00\u53d1\u8005\u9700\u8981\u53bb\u5c0f\u5fc3\u5730\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\u548c\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"RealityIS\u91c7\u7528\u7684\u662f\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u76f8\u5bf9\u4e8e\u57fa\u4e8eID\u7684\u673a\u5236\u4f1a\u5f15\u5165\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff0c\u5373 N:N\u7684\u5173\u7cfb\uff0c\u57fa\u4e8eID\u7684\u673a\u5236\u672c\u8d28\u4e0a\u662f1:1\u7684\u5173\u7cfb\uff0c\u51761:N\u7684\u5173\u7cfb\u4e5f\u662f\u6309\u987a\u5e8f\u4e00\u4e2a\u4e00\u4e2a\u53d1\u9001\u7684\uff0c\u8fd9\u4e9b\u53d1\u9001\u6d88\u606f\u672c\u8eab\u4e5f\u662f\u6309\u987a\u5e8f\u4e32\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4ecb\u7ecd\u4e24\u79cd\u5e38\u89c1\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Unity\u673a\u5236"),"\uff1aUnity\u7684System\u5e76\u4e0d\u662f\u5355\u4e2a\u7ec4\u4ef6\u7684\u8ba1\u7b97\uff0c\u5b83\u672c\u8d28\u4e0a\u8981\u6c42\u5f00\u53d1\u8005\u7ef4\u62a4\u96c6\u5408\u64cd\u4f5c\u7ed3\u6784\uff0c\u90a3\u4e48\u5bf9\u4e8eN:N\u7684\u95ee\u9898\uff0c\u5f00\u53d1\u8005\u81ea\u5df1\u7f16\u5199\u4e24\u4e2a\u5d4c\u5957\u7684\u5faa\u73af\u7ed3\u6784\u5c31\u53ef\u4ee5\u4e86\uff0c\u4f46\u95ee\u9898\u662f\u6bcf\u4e00\u4e2aSystem\u90fd\u9700\u8981\u7f16\u5199\u8fd9\u79cd\u5faa\u73af\u63a7\u5236\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Erlang\u673a\u5236"),"\uff1a\u5c3d\u7ba1Erlang\u7684\u53d1\u9001\u6d88\u606f\u662f1:1\u7684\uff0c\u4f46\u662f\u63a5\u53d7\u6d88\u606f\u786e\u662fN:1\u7684\uff0cErlang\u7684\u673a\u5236\u662f\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e00\u4e2a\u90ae\u7bb1\u5b58\u50a8\u4e00\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u5e76\u4e0d\u9700\u8981\u611f\u77e5\u5230\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u8fd8\u662f\u5bf9\u5355\u4e2a\u6d88\u606f\u7684\u5904\u7406\uff0c\u4f46\u8981\u6c42\u5f00\u53d1\u8005\u4e3b\u52a8\u7f16\u5199\u4e00\u4e2a\u83b7\u53d6\u6d88\u606f\u7684\u64cd\u4f5c\uff0c\u7136\u540e\u6bcf\u4e2areceive\u7684\u64cd\u4f5c\u5c31\u4f1a\u88ab\u5206\u914d\u4e00\u4e2a\u6d88\u606f\uff0c\u76f4\u81f3\u90ae\u7bb1\u4e2d\u7684\u6240\u6709\u6d88\u606f\u88ab\u5904\u7406\u5b8c\u6bd5")),(0,n.kt)("p",null,"\u663e\u7136Erlang\u7684\u673a\u5236\u5bf9\u5f00\u53d1\u8005\u66f4\u53cb\u597d\u4e00\u4e9b\uff0c\u4f46\u5bf9\u4e8e\u6d88\u606f\u7684\u53d1\u9001\u65b9\u9762\uff0c\u7531\u4e8e\u57fa\u4e8e\u7c7b\u578b\u7684\u8fc7\u6ee4\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u95f4\u63a5\u591a\u540c\u65f6\u5411\u591a\u4e2a\u7ec4\u4ef6\u53d1\u9001\u6d88\u606f\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u8ba9\u5f00\u53d1\u8005\u7ef4\u62a4\u4e00\u4e2aPID\u5217\u8868\u9010\u4e2a\u9010\u4e2a\u53d1\u9001\uff0c\u56e0\u6b64\u9700\u8981\u8fd0\u884c\u65f6\u5c06\u8fd9\u4e2a\u53d1\u9001\u7684\u8fc7\u7a0b\u5f62\u6210\u4e00\u6b21\u5217\u8868\u64cd\u4f5c\uff0c\u6765\u5b9e\u73b0Unity\u673a\u5236\u4e2d\u7684\u5916\u90e8\u5faa\u73af\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u907f\u514d\u5f15\u5165\u5217\u8868\u64cd\u4f5c\u7684\u6982\u5ff5\uff0c\u800c\u4e13\u6ce8\u4e8e\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d1\u9001\u6d88\u606f\u7684\u903b\u8f91\u662f\u901a\u8fc7\u8bfb\u53d6\u7ec4\u4ef6\u5c5e\u6027\u6765\u5b9e\u73b0\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6d88\u606f\u7684\u903b\u8f91\u5219\u662f\u901a\u8fc7\u5199\u5165\u5c5e\u6027\u6765\u5b9e\u73b0\u7684")),(0,n.kt)("p",null,"\u8fd9\u6837\u5c31\u8981\u6c42\u8bfb\u53d6\u7684\u7ec4\u4ef6\u5c5e\u6027\u4e0d\u80fd\u8d85\u8fc71\u4e2a\uff0c\u5426\u5219\u540c\u65f6\u5904\u7406\u591a\u4e2a\u7ec4\u4ef6\u7684\u6d88\u606f\u5c31\u53d8\u5f97\u4e0d\u53ef\u80fd\uff0c\u9664\u975e\u8fd9\u591a\u4e2a\u5c5e\u6027\u540c\u65f6\u6765\u81ea\u4e8e\u540c\u4e00\u4e2a\u5b9e\u4f53\u3002\u8fd9\u4e5f\u662f\u4e00\u79cd\u8fc7\u6ee4\u7684\u6761\u4ef6\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u80fd\u4e0d\u4e00\u5b9a\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8de8\u5b9e\u4f53\u8981\u6c42\u53ea\u8bfb\u53d6\u4e00\u4e2a\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u4e00\u5b9e\u4f53\u53ef\u4ee5\u8bfb\u53d6\u591a\u4e2a\u5c5e\u6027")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u6837\uff0c\u53d1\u9001\u8005\u548c\u63a5\u53d7\u8005\u53ea\u80fd\u662f\u4e00\u4e2a\u5b9e\u4f53\u3002\u8bfb\u53d6\u7684\u6240\u6709\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u53d1\u9001\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u800c\u5199\u5165\u7684\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u63a5\u53d7\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\u3002\u5269\u4e0b\u7684\u95ee\u9898\u5c31\u662fUnity \u4e5f\u9762\u4e34\u7684\u95ee\u9898\uff0c\u5373\u5355\u7eaf\u4f9d\u9760\u7c7b\u578b\u8fc7\u6ee4\u662f\u4e0d\u591f\u7684\uff0c\u9700\u8981\u53e6\u4e00\u4e2a\u5c42\u6b21\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u5c31\u662f\u7528\u6237\u6dfb\u52a0\u7684Type\uff0c\u4f46\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u8003\u8651\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u56e0\u4e3a\u8fd9\u79cd\u7279\u5b9a\u7684\u4e8b\u60c5\u662f\u7531\u4e1a\u52a1\u903b\u8f91\u51b3\u5b9a\u7684\u3002\u5982\u679c\u6709\u5b9a\u4e49\uff0c\u63a5\u53d7\u8005\u548c\u53d1\u9001\u8005\u5fc5\u987b\u624b\u6301\u76f8\u540c\u7684CID\uff0c\u5e76\u4e14\u53ea\u8981\u5176\u4e2d\u4e00\u4e2a\u62e5\u6709CID\uff0c\u5b83\u4eec\u5c31\u4e0d\u80fd\u4e0e\u6240\u6709\u4e0d\u5177\u5907\u76f8\u540cCID\u7684\u7ec4\u4ef6\u8fdb\u884c\u901a\u4fe1\uff0c\u8fdb\u4e00\u6b65\uff0c\u8fd9\u79cdCID\u53ef\u4ee5\u8f6c\u5316\u4e3a\u516c\u94a5\u548c\u79c1\u94a5\uff0c\u907f\u514d\u88ab\u76f8\u540c\u7684CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4f8b\u5982\u653b\u51fb\u8005\u4f1a\u5c1d\u8bd5\u4e0e\u6240\u6709CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4e8b\u5b9e\u4e0a\u4ed6\u5e94\u8be5\u662f\u9ed8\u8ba4\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"2282-\u7ec4\u4ef6\u5b89\u5168"},"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168"),(0,n.kt)("p",null,"\u4e0d\u80fd\u5bf9\u5176\u4ed6\u4eba\u7684Creation\u6216\u8005\u5b9e\u4f53\u8fdb\u884c\u5220\u9664\u6216\u8005\u4fee\u6539\uff0c\u7406\u8bba\u4e0a\uff0c\u5bf9\u5176\u4ed6\u4eba\u7684\u6570\u636e\u53ea\u80fd\u8bfb\u53d6\uff0c\u6240\u6709\u7684\u4fee\u6539\u64cd\u4f5c\u5747\u662f\u4ea4\u6613"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u6709"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u4e4b\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7528\u6237\uff08\u5305\u62ec\u964c\u751f\u4eba\uff09")),(0,n.kt)("h4",{id:"2283-\u6743\u9650\u63a7\u5236"},"2.2.8.3 \u6743\u9650\u63a7\u5236"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u516c\u5171\u5c5e\u6027\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u6838\u5fc3\u5b9a\u4e49\uff0c\u5176\u4ed6\u7684\u5747\u662f\u5bf9\u5b83\u7684\u5f15\u7528\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u5bf9\u8c61\u53ea\u58f0\u660e\u4e00\u6b21\uff0c\u56e0\u6b64\u5b83\u7684\u6743\u9650\u4e5f\u5728\u8fd9\u91cc\u88ab\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5728Creation Script\u4e2d\uff0c\u7531\u4e8e\u53d8\u91cf\u76f4\u63a5\u53d8\u6210\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5b9a\u4e49\u7684\u6982\u5ff5\u88ab\u6a21\u7cca\uff0c\u7b26\u53f7\u8868\u4e4b\u540e\u7684\u5f15\u7528\u6b63\u786e\u88ab\u4fdd\u8bc1\uff0c\u4f46\u662f\u7b26\u53f7\u8868\u7684\u6765\u6e90\u786e\u5b9e\u4e0d\u6e05\u6670\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u63a7\u5236\u53d8\u91cf\u53ea\u80fd\u5728\u4e00\u4e2a\u5730\u65b9\u88ab\u5b9a\u4e49\u3002\u751a\u81f3\u6ca1\u6cd5\u533a\u5206\u662f\u8c01\u201c\u5b9a\u4e49\u4e86\u201d\u53d8\u91cf\u3002\u6bd4\u5982\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u540c\u65f6\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5c5e\u6027\uff0c\u4f46\u5206\u522b\u4f7f\u7528\u4e86\u4e0d\u540c\u7684\u6743\u9650\u63a7\u5236\uff0c\u5219\u53ef\u80fd\u4ea7\u751f\u6b67\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"namespace ComponentA {\n public readonly Global.HP as hp\n}\n\nnamespace ComponentB { \n public readwrite Global.HP as hp\n}\n")),(0,n.kt)("p",null,"\u5f53\u4e0a\u8ff0\u4e24\u4e2a\u7ec4\u4ef6\u88ab\u6dfb\u52a0\u5230\u540c\u4e00\u4e2a\u5b9e\u4f53\u4e86\uff0c\u6743\u9650\u5c06\u53d1\u751f\u6b67\u4e49\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u91cc\u7531\u4ee3\u7801\u5f00\u53d1\u8005\u6765\u5b9a\u4e49\u6743\u9650\u662f\u4e0d\u5408\u9002\u7684\uff0c\u5728\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u4e3a\u4ec0\u4e48\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49\u6743\u9650\uff0c\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u5373\u662f\u5e94\u7528\u7684\u62e5\u6709\u8005\uff0c\u6216\u8005\u8bf4\u5f00\u53d1\u8005\u662f\u6309\u7167\u62e5\u6709\u6240\u5c5e\u8005\u7684\u65e8\u610f\u6216\u610f\u613f\u8fdb\u884c\u8bbe\u7f6e\u7684\uff0c\u6240\u4ee5\u4e0d\u7ba1\u600e\u6837\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u662f\u540c\u4e00\u4eba"),"\u3002"),(0,n.kt)("p",null,"\u968f\u7740UGC\u6216\u7528\u6237\u521b\u4f5c\u5e73\u53f0\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u8eab\u4efd\u7684\u7edf\u4e00\u6027\u53d1\u751f\u4e86\u53d8\u5316\uff1a\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u53ef\u80fd\u662f\u72ec\u7acb\u4e0d\u540c\u7684\u4eba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6743\u9650\u5b8c\u5168\u7531\u5f00\u53d1\u8005\u6307\u5b9a\u662f\u4e0d\u5408\u9002\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u53e6\u5916\u4e00\u4e9b\u7eaf\u8ba1\u7b97\u7684\u6570\u636e\u5c5e\u6027\uff0c\u53ea\u6709\u4ee3\u7801\u5185\u90e8\u624d\u4f1a\u7528\u5230\uff0c\u5e76\u4e14\u7528\u6237\u4e0d\u4f1a\u5173\u5fc3\uff0c\u8fd9\u4e9b\u6570\u636e\u663e\u7136\u662f\u5e94\u8be5\u7531\u5f00\u53d1\u8005\u63a7\u5236\u7684\uff0c\u800c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u533a\u5206\u8fd9\u4e24\u79cd\u53d8\u91cf\u7684\u6743\u9650\uff1a\u903b\u8f91\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u6216\u8005\u7528\u6237\u53d8\u91cf\u3002\u5c3d\u7ba1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49public\u548cprivate\u6743\u9650\uff0c\u4f46\u662f\u8fd9\u79cd\u5b9a\u4e49\u4ecd\u7136\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u7684\u804c\u8d23\u5c31\u4e0d\u662f\u4e3a\u4e86\u533a\u5206\u7528\u6237\u63a7\u5236\u4e0e\u5f00\u53d1\u4e2d\u95f4\u7684\u533a\u522b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u5f80\u5f80\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u610f\u8bc6"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6743\u9650\u548c\u7528\u6237Owner\u9700\u6c42\u4e4b\u95f4\u53ef\u80fd\u662f\u6709\u51b2\u7a81\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u628a\u6743\u9650\u8bbe\u5b9a\u4e4b\u540e\u5c31\u4e0d\u80fd\u66f4\u6539\u4e86\uff0c\u800c\u5b9e\u9645\u4e0a\u7528\u6237\u6743\u9650\u662f\u53ef\u4ee5\u53d1\u751f\u4fee\u6539\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e24\u8005\u4e4b\u95f4\u7684\u5b9a\u4e49\u6ca1\u6709\u5f88\u5f3a\u7684\u7ea6\u675f\u6027\uff0c\u4f8b\u5982\u7406\u8bba\u4e0a\u5f00\u53d1\u8005\u5c06\u6240\u6709\u5c5e\u6027\u90fd\u5b9a\u4e49\u4e3apublic\u90fd\u662f\u53ef\u4ee5\u7684\uff0c\u800cCreation Script\u4fdd\u8bc1public\u5c5e\u6027\u5fc5\u987b\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u4f7f\u5f97\u5f00\u53d1\u8005\u4f1a\u5c0f\u5fc3\u5730\u533a\u5206\u3002")),(0,n.kt)("p",null,"Creation Script\u5b8c\u7f8e\u7684\u533a\u5206\u4e86\u8fd9\u4e24\u8005\u7684\u5b9a\u4e49\uff0c\u5e76\u4e14\u53ef\u4ee5\u5b9e\u73b0\u7528\u6237\u7684\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u6240\u5c5e\u7684\u4e1c\u897f\u662f\u8d44\u4ea7\u62e5\u6709\u8005\u53ef\u4ee5\u968f\u4fbf\u4fee\u6539\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u56fe\u4e66\u9986\uff0c\u7528\u6237\u53ef\u4ee5\u8bbe\u7f6e\u5b83\u662f\u5426\u53ef\u4ee5\u88ab\u8bbf\u95ee\uff0c\u53ef\u4ee5\u5f00\u542f\u548c\u5173\u95ed\u3002\u4f20\u7edf\u7684\u505a\u6cd5\u662f\u628a\u8fd9\u4e9b\u5c5e\u6027\u6620\u5c04\u5230\u4e00\u4e2a\u6570\u636e\u8868\uff0c\u7136\u540e\u7531\u53e6\u4e00\u4e2a\u7a0b\u5e8f\u53bb\u8bfb\u53d6\u5e76\u4fee\u6539\u8fd9\u4e2a\u6570\u636e\u8868\u3002\u8fd9\u4e2a\u6d41\u7a0b\u975e\u5e38\u590d\u6742\uff0c\u589e\u52a0\u4e86\u7a0b\u5e8f\u7684\u590d\u6742\u6027\uff0c\u800cCreation Script\u76f8\u5f53\u4e8e\u662f\u76f4\u63a5\u201c\u4fee\u6539\u7a0b\u5e8f\u201d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u76f4\u63a5\u63a7\u5236\u6570\u636e\uff0c\u751a\u81f3\u76f4\u63a5\u63a7\u5236\u4ee3\u7801\uff0c\u662f\u6211\u4eec\u8fd9\u4e2a\u4e16\u754c\u672c\u6765\u7684\u5f62\u5f0f\u3002")),(0,n.kt)("h4",{id:"2284-\u65f6\u5e8f\u6027"},"2.2.8.4 \u65f6\u5e8f\u6027"),(0,n.kt)("p",null,"\u89c12.3.6.1\u8282\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2285-\u6027\u80fd\u95ee\u9898"},"2.2.8.5 \u6027\u80fd\u95ee\u9898"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h4",{id:"2286-\u4e09\u79cd\u6a21\u5f0f"},"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u51fd\u6570\u7684\u8f93\u51fa\u9650\u5236\u53ea\u6709\u4e00\u4e2a\u53d8\u91cf\uff0c\u8fd9\u4e5f\u662f\u5927\u591a\u6570\u7a0b\u5e8f\u8bed\u8a00\u7684\u89c4\u8303\uff0c\u90a3\u4e48\u51fd\u6570\u4e4b\u95f4\u7684\u8c03\u7528\u6709\u4e09\u79cd\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u81ea\u5df1\u7684\u5176\u4ed6\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u5212\u5206\u4e5f\u9690\u542b\u5730\u610f\u5473\u7740\u53c2\u4e0e\u51fd\u6570\u4ea4\u4e92\u7684\u5bf9\u8c61\u4e0d\u8d85\u8fc72\u4e2a\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u6837\u7684\u5212\u5206\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u7684\u7a0b\u5e8f\u8c03\u7528\uff1a\u53ef\u4ee5\u662f\u4e3b\u52a8\u4fee\u6539\u522b\u4eba\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u662f\u88ab\u52a8\u6d88\u606f\u901a\u77e5\u7684\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u6837\u7684\u5212\u5206\u5bf9\u4e8e\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u6765\u8bb2\uff0c\u4f1a\u5b58\u5728\u4e00\u4e9b\u5e72\u6270\uff0c\u4f7f\u5f97\u53ef\u80fd\u6ca1\u6cd5\u8ba1\u7b97\u51fa\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u4e3a\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u53ef\u80fd\u5b58\u5728\u5faa\u73af\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u8003\u8651\u5230\u4e3b\u52a8\u5f0f\u4fee\u6539\u7684\u5e94\u8be5\u662f\u5c11\u6570\uff0c\u800c\u4e14\u5177\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u9650\u5b9a\u4e3b\u52a8\u5f0f\uff08\u5373\u4e0a\u8ff0\u7b2c\u4e00\u79cd\u60c5\u51b5\uff09\u7684\u7ec4\u4ef6\u603b\u662f\u6700\u4f18\u5148\u6267\u884c\uff0c\u53ea\u6709\u6240\u6709\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u6267\u884c\u5b8c\u4e86\u624d\u4f1a\u6267\u884c\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u65f6\u5019\u7ec4\u4ef6\u7684\u987a\u5e8f\u9700\u8981\u91cd\u65b0\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u66ff\u4ee3\u4e86\u4f20\u7edf\u7684\u6d88\u606f\u5217\u8868\u673a\u5236\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u603b\u662f\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u53ea\u4e0e\u5f53\u524d\u5e27\u6709\u5173\uff0c\u4e0d\u4f1a\u7f13\u5b58\u6d88\u606f\uff0c\u5b9e\u9645\u4e0a\u5b83\u90fd\u4e0d\u9700\u8981\u6d88\u606f\u5217\u8868\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7f16\u7a0b\u4e2d\u7684\u7acb\u5373\u8c03\u7528\uff0c\u4f46\u662f\u6240\u6709\u7684\u7406\u89e3\u8c03\u7528\u662f\u5e76\u884c\u6267\u884c\u7684\u3002")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u662f\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5185\u4fee\u6539\u5176\u4ed6\u7ec4\u4ef6\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u7f13\u5b58\u8fd9\u79cd\u4e00\u6b21\u6027\u7684\u6d88\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u662f\u8fd9\u79cd\u5bf9\u5916\u4e3b\u52a8\u5f0f\u5199\u5165\u7684\u64cd\u4f5c\u4f1a\u5bfc\u81f4\u5e76\u53d1\u51b2\u7a81\u3002"),"Erlang\u4e3a\u4ec0\u4e48\u6ca1\u6709\u5e76\u53d1\u51b2\u7a81\u5c31\u662f\u5b83\u6ca1\u6709\u4e3b\u52a8\u5f0f\u8c03\u7528\uff0c\u90fd\u662f\u54cd\u5e94\u5f0f\u7684\uff0c\u4efb\u4f55\u5bf9\u51fd\u6570\u7684\u8c03\u7528\u90fd\u662f\u8f6c\u6362\u4e3a\u5176\u4ed6\u51fd\u6570\u7684\u6d88\u606f\u5217\u8868\uff0c\u7136\u540e\u518d\u5176\u4ed6\u51fd\u6570\u5185\u90e8\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"229-\u6570\u636e\u4e0e\u5b58\u6863"},"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863"),(0,n.kt)("p",null,"\u63d0\u4f9b\u6570\u636e\u914d\u7f6e\u8868\uff0c\u4ee5\u53ca\u5728\u811a\u672c\u4e2d\u8bbf\u95ee\u6570\u636e\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6570\u636e\u5b58\u50a8\u90fd\u81ea\u52a8\u53d1\u751f\uff0c\u6240\u4ee5\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u7684\u6570\u636e\u90fd\u9700\u8981\u5b58\u6863\uff0c\u4f46\u4e0d\u9700\u8981\u7528\u6237\u6307\u5b9a\u3002"),(0,n.kt)("h4",{id:"2291-\u6570\u636e\u914d\u7f6e"},"2.2.9.1 \u6570\u636e\u914d\u7f6e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc2",src:l(5813).Z,width:"2532",height:"1170"})),(0,n.kt)("h4",{id:"2292-\u5b58\u6863"},"2.2.9.2 \u5b58\u6863"),(0,n.kt)("p",null,"\u5c06\u73a9\u5bb6\u7684\u8fdb\u5ea6\u6570\u636e\u5b58\u6863\uff0c\u9700\u8981\u5b58\u50a8\u81f3\u4e91\u7aef"),(0,n.kt)("h4",{id:"2293-\u4e0d\u8db3"},"2.2.9.3 \u4e0d\u8db3"),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u8ddf\u5bf9\u8c61\u7ba1\u7406\u8d77\u6765\uff0c\u4e0d\u8db3\u7684\u5730\u65b9\u662f\u6570\u636e\u4f1a\u968f\u7740\u5bf9\u8c61\u7684\u5220\u9664\u800c\u5220\u9664\uff0c\u4e0d\u50cf\u4f20\u7edf\u7684\u6570\u636e\u662f\u72ec\u7acb\u5b58\u50a8 \u5728\u6570\u636e\u5e93\u4e2d\uff0c\u5220\u9664\u5bf9\u8c61\u5e76\u4e0d\u4f1a\u5f71\u54cd\u6570\u636e\uff0c\u7136\u540e\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u903b\u8f91\u628a\u6570\u636e\u52a0\u8f7d\u4e0d\u540c\u7684\u5bf9\u8c61\u4e0a\u3002\u8fd9\u5757\u9700\u8981\u6709\u9002\u5f53\u7684\u673a\u5236\u3002"),(0,n.kt)("h3",{id:"2210-\u901a\u7528\u6027"},"2.2.10 \u901a\u7528\u6027"),(0,n.kt)("h4",{id:"22101-\u72ec\u7acb\u7c7b"},"2.2.10.1 \u72ec\u7acb\u7c7b"),(0,n.kt)("p",null,"\u72ec\u7acb\u7684\u7c7b\u5b9a\u4e49\u548cECS\u662f\u7b49\u4ef7\u7684\uff0c\u76f8\u5f53\u4e8e\u628a\u7c7b\u7684\u6bcf\u4e2a\u65b9\u6cd5\u62c6\u4e3a\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u7c7b\u7684\u5b9e\u4f8b\u53d8\u91cf\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\u5171\u4eab\uff0c\u8fd9\u6837\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u53ef\u4ee5\u8bfb\u5199\uff1b\u800cCreation Script\u4f1a\u533a\u5206\u7ec4\u4ef6\u5185\u90e8\u548c\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u6b64\u628a\u4e00\u4e9b\u53ea\u6709\u65b9\u6cd5\u5185\u90e8\u4f1a\u4f7f\u7528\u7684\u53d8\u91cf\u8bbe\u7f6e\u4e3a\u79c1\u6709\u53d8\u91cf\uff0c\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff1b\u800c\u4f20\u7edfOOP\u4e2d\uff0c\u6bcf\u4e2a\u7c7b\u62e5\u6709\u590d\u6742\u7684\u53d8\u91cf--\u56e0\u6b64\u590d\u6742\u7684\u72b6\u6001\uff0c\u8fd9\u4e9b\u72b6\u6001\u6709\u4e9b\u662f\u8868\u5f81\u5b9e\u4f8b\u7ea7\u522b\u72b6\u6001\u7684\uff0c\u800c\u6709\u4e9b\u5219\u53ea\u662f\u5185\u90e8\u4e24\u6b21Update\u4e4b\u95f4\u7684\u4e00\u4e9b\u4e34\u65f6\u72b6\u6001\u3002\u56e0\u6b64\u8fd9\u79cd\u5212\u5206\u4f7f\u7c7b\u7ed3\u6784\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff0c\u6211\u4eec\u80fd\u591f\u533a\u5206\u548c\u5173\u6ce8\u90a3\u4e9b\u771f\u6b63\u5bf9\u5916\u8868\u73b0\u81ea\u8eab\u5c5e\u6027\u7684\u72b6\u6001\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u7406\u8bba\u4e0aA\u548cB\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u4e0d\u9700\u8981\u77e5\u9053\u5bf9\u65b9\u7684\u5b58\u5728\uff0c\u4f46\u8fd9\u79cd\u5b8c\u5168\u65e0\u5173\u7684\u4ea4\u4e92\u5e26\u6765\u7684\u4e00\u4e2a\u540e\u679c\u662f\u7ec4\u4ef6\u6267\u884c\u7684\u987a\u5e8f\u975e\u5e38\u91cd\u8981"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u81ea\u52a8\u8bc6\u522b\u8bfb\u5199\u987a\u5e8f\uff0c\u4f46\u8fd9\u901a\u5e38\u6700\u591a\u4fdd\u8bc1\u8bfb\u548c\u5199\u4e4b\u95f4\uff0c\u4f46\u662f\u591a\u4e2a\u5199\u4e4b\u95f4\u4e5f\u6709\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u5904\u7406\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u540e\u4e00\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52a8\u6807\u8bb0\u6267\u884c\u987a\u5e8f")),(0,n.kt)("h4",{id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"},"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5728A\u548cB\u7ec4\u4ef6\u4e4b\u95f4\u8bbe\u7f6e\u516c\u5171\u53d8\u91cf\uff0c\u5982\uff1a"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"out Global.iHP as iHP\n"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u662fA\u8c03\u7528B\uff0c\u5373A\u9700\u8981\u5411B\u4f20\u9012\u53c2\u6570\uff0c\u5219A\u7684order\u8bbe\u7f6e\u5c0f\u4e8eB\uff0c\u8ba9A\u5148\u4e8eB\u6267\u884c\u5373\u53ef\uff0c\u8fd9\u6837B\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u5f97\u5230A\u8ba1\u7b97\u751f\u6210\u7684\u53c2\u6570")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u90e8\u6709\u591a\u4e2a\u5176\u4ed6\u7c7b\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u6309\u987a\u5e8f\u8bbe\u7f6e\u591a\u4e2a\u7ec4\u4ef6\u7684order"))),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u5c06OOP\u4e2d\u7684\u65b9\u6cd5\u8c03\u7528\u987a\u5e8f\u8f6c\u6362\u4e3a\u7ec4\u4ef6order\u7684\u987a\u5e8f"),(0,n.kt)("h4",{id:"22103-\u6709\u8fd4\u56de\u503c"},"2.2.10.3 \u6709\u8fd4\u56de\u503c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u8f85\u52a9\u65b9\u6cd5\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aLibrary\u800c\u4e0d\u662f\u7ec4\u4ef6\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u5b9e\u4f8b\uff0c\u5177\u6709\u81ea\u5df1\u7684\u5b9e\u4f8b\u53d8\u91cf\uff0c\u8fd9\u4e2a\u65f6\u5019\u9700\u8981\u5c0f\u5fc3\u5730\u5c06\u4e24\u8005\u7684\u65b9\u6cd5\u8c03\u7528\u5173\u7cfb\u62c6\u5206\u5230\u4e24\u5e27\u4e4b\u95f4\uff1aA\u9996\u5148\u6216\u8005B\u4e0a\u4e00\u5e27\u8f93\u51fa\u7684\u7ed3\u679c\uff0c\u8fdb\u884c\u8ba1\u7b97\uff0c\u76f8\u5f53\u4e8eB\u7684\u8fd4\u56de\u503c\uff1b\u7136\u540eA\u5c06\u53c2\u6570\u8f93\u51fa\uff0cB\u6267\u884c\u7684\u65f6\u5019\u6216\u8005A\u7684\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5165\u5230\u5bf9\u7528\u7684\u8f93\u51fa\u53c2\u6570\uff1b\u7136\u540eA\u5728\u4e0b\u4e00\u5e27\u6216\u8005B\u8f93\u51fa\u7684\u53c2\u6570\u8fdb\u884c\u8ba1\u7b97")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5982\u679c\u539f\u6765\u7684OOP\u7c7b\u7279\u522b\u590d\u6742\uff0c\u5c31\u9700\u8981\u5c0f\u5fc3\u5730\u8fdb\u884c\u91cd\u6784\uff0c\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u6709\u4e24\u4e2a\u5373\u4ee5\u4e0a\u7684\u5b9e\u4f8b\u95f4\u51fd\u6570\u8fd4\u56de\u503c\u8c03\u7528\uff0c\u4e0a\u8ff0\u7684\u65b9\u6cd5\u5c31\u4e0d\u884c\uff0c\u9700\u8981\u5bf9\u903b\u8f91\u8fdb\u884c\u8fdb\u4e00\u6b65\u68b3\u7406\uff0c\u6bd4\u5982\u5982\u679c\u662f\u524d\u540e\u6ca1\u6709\u4f9d\u8d56\u72ec\u7acb\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u53ef\u4ee5\u5f88\u597d\u6ef4\u62c6\u5206"),(0,n.kt)("h4",{id:"22104-\u7ee7\u627f"},"2.2.10.4 \u7ee7\u627f"),(0,n.kt)("p",null,"\u7ee7\u627f\u901a\u8fc7\u7ec4\u5408\u5b9e\u73b0"),(0,n.kt)("h4",{id:"22105-\u7ed3\u6784\u4f53"},"2.2.10.5 \u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u7531\u4e8e\u5e95\u5c42\u7684Creation Table Engine\u9700\u8981\u4fdd\u8bc1\u6570\u636e\u662f\u7b80\u5355\u7684\u6570\u7ec4\u7ed3\u6784\uff0c\u56e0\u4e3a\u4e0d\u80fd\u8bbe\u7f6e\u592a\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u4e0d\u652f\u6301\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u53ea\u652f\u6301\u57fa\u672c\u7c7b\u578b\u548c\u77e2\u91cf\u7b49\u57fa\u672c\u7c7b\u578b\uff0c\u5176\u4e2dVector\u901a\u8fc7\u5185\u90e8\u7ed3\u6784\u8fdb\u884c\u5904\u7406"),(0,n.kt)("p",null,"\u5f53\u7136\u5176\u5b9e\u7ec4\u4ef6\u7684\u6570\u636e\u672c\u8eab\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7ed3\u6784\u4f53\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u9700\u8981\u5171\u4eab\u591a\u4e2a\u53d8\u91cf\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u591a\u4e2aout\u53c2\u6570\u5b9e\u73b0\uff0c\u8fd9\u5c31\u76f8\u5f53\u4e8e\u4f20\u9012\u4e00\u4e2a\u9690\u5f0f\u7684\u7ed3\u6784\u4f53\u3002"),(0,n.kt)("h4",{id:"22106-\u63a7\u5236tick\u7684\u9891\u7387"},"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387"),(0,n.kt)("h3",{id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670"),(0,n.kt)("h4",{id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c"},"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c"),(0,n.kt)("p",null,"\u5269\u4e0b\u64cd\u4f5c\u53ea\u6709\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6 ."),(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u8fd0\u7b97\uff0c+=")),(0,n.kt)("p",null,"\u5176\u4e2d\u8bfb\u53d6\u64cd\u4f5c\u4e3b\u8981\u7528\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5224\u65ad\u8d44\u6e90\u662f\u5426\u591f\u7528\uff0c\u5982\u679c\u4e0d\u591f\u7528\u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u4f7f\u7528\u65b9\u53ef\u4ee5\u65b9\u4fbf\u663e\u793a\u4e00\u4e9b\u63d0\u793a\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e9b\u4f9d\u8d56\u4e8e\u603b\u91cf\u7684\u589e\u91cf\u8fd0\u7b97\uff0c\u4f8b\u5982\u589e\u52a0\u603b\u91cf\u768410%")),(0,n.kt)("h4",{id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165"},"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165"),(0,n.kt)("p",null,"\u8d44\u6e90\u7684\u4e24\u79cd\u6d41\u52a8\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d41\u5165\u6a21\u5f0f\uff0c\u4e00\u822c\u5bf9\u5e94\u4e8e\u6536\u96c6\u8d44\u6e90\uff0c\u6b64\u65f6\u9700\u8981\u628a\u4e00\u5b9a\u6570\u91cf\u7684\u8d44\u6e90\u4f20\u5165\u4e00\u4e2a\u5bb9\u5668\uff0c\u800c\u4e0d\u662f\u7531\u8be5\u5bb9\u5668\u53bb\u62c9\u53d6\uff0c\u56e0\u4e3a\u5b83\u5e76\u6ca1\u6709\u4e00\u4e2a\u62c9\u53d6\u6e90\uff0c\u800c\u662f\u76f4\u63a5\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u589e\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u62c9\u53d6\u6a21\u5f0f\uff0c\u5f53\u6211\u4eec\u9700\u8981\u6d88\u8017\u8d44\u6e90\u5df2\u5b8c\u6210\u67d0\u4ef6\u4e8b\u60c5\u65f6\uff0c\u901a\u5e38\u7531\u5b8c\u6210\u8be5\u4e8b\u60c5\u7684\u5b9e\u4f53\u4ece\u8d44\u6e90\u5bb9\u5668\u8fdb\u884c\u62c9\u53d6\uff0c\u8be5\u5b9e\u4f53\u9996\u5148\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u51cf\u91cf\u8ba1\u7b97\uff08\u5f53\u7136\u9700\u8981\u5224\u65ad\u5bb9\u91cf\u662f\u5426\u8db3\u591f\uff09\uff0c\u7136\u540e\u6267\u884c\u81ea\u5df1\u7684\u5904\u7406\u903b\u8f91\uff1b")),(0,n.kt)("p",null,"\u9664\u4e86\u751f\u4ea7\u8d44\u6e90\u7684\u6e90\u5934\uff0c\u5927\u90e8\u5206\u903b\u8f91\u90fd\u5e94\u8be5\u662f\u62c9\u53d6\u6a21\u5f0f\u3002\u8fd9\u91cc\u4e3b\u8981\u7684\u539f\u56e0\u662f\u8026\u5408\uff1a\u5982\u679c\u9700\u8981\u8d44\u6e90\u53d8\u5316\u7684\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u5176\u4ed6\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u662f\u4e0d\u5408\u7406\u7684\uff0c\u8d44\u6e90\u7684\u53d8\u5316\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u77e5\u9053\u8fd9\u4e9b\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u903b\u8f91\u662f\u53d8\u5316\u7684\uff0c\u53ef\u80fd\u589e\u52a0\u65b0\u7684\u903b\u8f91\uff0c\u90a3\u4e48\u8fd9\u6839\u672c\u65e0\u6cd5\u5b9e\u73b0")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e94\u8be5\u662f\u7531\u54cd\u5e94\u7ec4\u4ef6\u6765\u62c9\u53d6\uff0c\u5982\u679c\u67d0\u4e2a\u503c\u53d8\u5316\u4e86\uff0c\u611f\u5174\u8da3\u7684\u7ec4\u4ef6\u81ea\u884c\u6765\u8bfb\u53d6\u503c\u8fdb\u884c\u903b\u8f91\u5904\u7406\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ef\u80fd\u968f\u65f6\u589e\u52a0\u5bf9\u8fd9\u4e9b\u53d8\u5316\u611f\u5174\u8da3\u7684\u65b0\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"},"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u4e2d\uff0c\u8c03\u7528\u67d0\u4e2a\u51fd\u6570\u4f20\u9012\u7684\u53c2\u6570\u901a\u5e38\u662f\u589e\u91cf\u503c\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u6263\u9664\u591a\u5c11\u8840\u91cf\u3002\u8fd9\u4e2a\u51fd\u6570\u4e00\u65e6\u8c03\u7528\u5b8c\u6bd5\uff0c\u5219\u9700\u8981\u4e0b\u4e00\u6b21\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u624d\u4f1a\u518d\u6b21\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728OOP\u7684\u505a\u6cd5\u662f\uff0c\u4e00\u4e2a\u5927\u7684\u51fd\u6570\u4f53\uff0c\u6709\u5f88\u591a\u5206\u652f\uff0c\u51fd\u6570\u9996\u5148\u5224\u65ad\u8f93\u5165\uff0c\u5982\u679c\u9002\u914d\u6280\u80fd\u7684\u4f7f\u7528\uff0c\u5c31\u8fdb\u884c\u6280\u80fd\u91ca\u653e\u5206\u652f\uff0c\u7136\u540e\u8fdb\u800c\u5bf9\u5b9e\u9645\u7684\u6263\u8840\u7684\u51fd\u6570\u8fdb\u884c\u8c03\u7528\uff1b\u5982\u679c\u6ca1\u6709\u8f93\u5165\u53d1\u751f\u6216\u8005\u6ca1\u6709\u8fdb\u5165\u6280\u80fd\u6267\u884c\u5206\u652f\uff0c\u5219\u540e\u7eed\u7684\u51fd\u6570\u5c31\u4e0d\u4f1a\u88ab\u8c03\u7528\u3002\u5c3d\u7ba1\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u6280\u80fd\u7684\u6263\u8840\u589e\u91cf\u503c\u8fd8\u662f\u88ab\u5b58\u653e\u5728\u6280\u80fd\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u5207\u7ec4\u4ef6\u90fd\u662f\u6241\u5e73\u7684\uff0c\u610f\u5473\u7740\u524d\u9762\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u5206\u652f\u6765\u963b\u6321\u524d\u9762\u7684\u6d41\u7a0b\uff0c\u6240\u6709\u7ec4\u4ef6\u9ed8\u8ba4\u90fd\u4f1a\u88ab\u6267\u884c\u3002\u4e3a\u4e86\u5b9e\u73b0\u529f\u80fd\uff0c\u6709\u4e24\u79cd\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u589e\u91cf\u5c5e\u6027\u90fd\u5bf9\u5e94\u4e00\u4e2a\u72b6\u6001\u91cf\uff0c\u4ee5\u8bf4\u660e\u662f\u5426\u9700\u8981\u6267\u884c\u540e\u7eed\u7684\u64cd\u4f5c\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u628aOOP\u65b9\u6cd5\u4e2d\u90a3\u4e9b\u5206\u652f\u8f6c\u6362\u4e3a\u72b6\u6001\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u589e\u51cf\u7ec4\u4ef6\uff0c\u4f8b\u5982\u6ca1\u6709\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u5c31\u5220\u9664\u6280\u80fd\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u5728\u5b9e\u8df5\u4e0a\u5f88\u96be\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6c38\u8fdc\u4f20\u9012\u589e\u91cf\uff0c\u4f8b\u5982\u6280\u80fd\u7ec4\u4ef6\uff0c\u5982\u679c\u91ca\u653e\u5f53\u505a\u6267\u884c\uff0c\u4fee\u6539\u503c\u5c31\u8bbe\u7f6e\u4e3a\u67d0\u4e2a\u5177\u4f53\u7684\u6570\u503c\uff0c\u5426\u5219\u5c31\u8bbe\u7f6e\u4e3a0\uff0c\u8fd9\u6837\u5bf9\u540e\u7eed\u7ec4\u4ef6\u6ca1\u6709\u5b9e\u8d28\u6027\u7684\u5f71\u54cd\uff0c\u8fd9\u91cc\u6570\u503c0\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u72b6\u6001\u503c\uff0c\u4ed6\u544a\u8bc9\u540e\u7eed\u7ec4\u4ef6\u8be5\u4e8b\u4ef6\u6ca1\u6709\u53d1\u751f\uff0c\u4f46\u53c8\u53ef\u4ee5\u8ba9\u540e\u7eed\u7ec4\u4ef6\u4e0d\u9700\u8981\u5904\u7406\u72b6\u6001\uff0c\u8ba4\u4e3a\u4e00\u76f4\u5728\u53d1\u751f\u3002")),(0,n.kt)("p",null,"\u7b2c\u4e09\u79cd\u60c5\u51b5\u662f\u6700\u7b80\u5355\u7684\u67b6\u6784\uff0c\u4f46\u662f\u5b58\u5728\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u76f8\u5f53\u4e8e\u4f20\u7edfOOP\u4e2d\u90a3\u4e9b\u6240\u6709\u7684\u5206\u652f\u90fd\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u6216\u8005\u6bcf\u5e27\u5f00\u59cb\u4e4b\u524d\uff0c\u9700\u8981\u5bf9\u589e\u91cf\u503c\u8fdb\u884c\u6e05\u96f6\u64cd\u4f5c")),(0,n.kt)("p",null,"\u524d\u8005\u53ef\u4ee5\u901a\u8fc7\u914d\u5408change-driven\u7684\u67b6\u6784\u6765\u5b9e\u73b0\uff0c\u800c\u5bf9\u4e8e\u540e\u8005\uff0c\u4f8b\u5982\u5bf9\u4e8e\u589e\u91cf\u7ec4\u4ef6\u6765\u8bb2\uff0c\u5b83\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u5f71\u54cd\u662f\u5904\u4e8e\u5916\u5faa\u73af\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u5728\u6267\u884c\u5b8c\u6240\u6709\u88ab\u901a\u77e5\u7ec4\u4ef6\u4e4b\u540e\u81ea\u52a8\u6e05\u96f6\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u8981\u533a\u5206\u54ea\u4e9b\u662f\u589e\u91cf\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u505a\u6cd5\u662f\uff0c\u8ba9\u4e3b\u52a8\u53d1\u751f\u6d88\u606f\u7684\u7ec4\u4ef6\u81ea\u5df1\u7ef4\u62a4\u589e\u91cf\u503c\uff0c\u8fd9\u6837\u5c31\u9700\u8981\u4fdd\u8bc1\u8fd9\u7c7b\u7ec4\u4ef6\u7528\u4e8e\u90fd\u9700\u8981\u6267\u884c\uff0c\u4e0d\u53d7change-driven\u673a\u5236\u7684\u5f71\u54cd\u3002\u4f8b\u5982\u5bf9\u4e8e\u91ca\u653e\u6280\u80fd\u7684\u7ec4\u4ef6\uff0c\u5b83\u6bcf\u5e27\u7684\u76d1\u542c\u8f93\u5165\uff0c\u5982\u679c\u8f93\u5165\u9002\u914d\uff0c\u5c31\u5c06\u589e\u91cf\u8bbe\u7f6e\u4e3a\u9884\u8bbe\u503c\uff0c\u5426\u5219\u8bbe\u7f6e\u4e3a0\u3002\u8fd9\u79cd\u65b9\u6cd5\u5e94\u8be5\u662f\u6700\u7b80\u5355\u7684\uff0c\u4e0d\u80fd\u7ed9\u8fd0\u884c\u65f6\u52a0\u5165\u592a\u591a\u903b\u8f91\u7684\u4e1c\u897f\uff0c\u800c\u4e14\u901a\u5e38\u53d1\u51fa\u4e8b\u4ef6\u7684\u7ec4\u4ef6\u6570\u91cf\u662f\u5c11\u6570\u7684\uff0c\u4f8b\u5982\u5927\u90e8\u5206\u65f6\u95f4\u65f6\u95f4\u90fd\u662f\u968f\u65f6\u8f93\u5165\u6216\u8005\u67d0\u4e9b\u7528\u6237\u4ea4\u4e92\u89e6\u53d1\u7684\uff0c\u8fdb\u800c\u89e6\u53d1\u4e00\u8fde\u4e32\u7684\u8ba1\u7b97\uff0c\u5982\u679c\u6e90\u5934\u4e0d\u4f1a\u4f20\u9012\uff0c\u540e\u7eed\u7684\u5f88\u591a\u8ba1\u7b97\u4e5f\u95f4\u63a5\u7701\u6389\u4e86\uff0c\u5c31\u50cfOOP\u4e2d\u7684\u5206\u652f\u90a3\u6837\u3002\u4f46\u662f\u76f8\u5bf9\u4e8eOOP\uff0c\u81f3\u5c11\u53ef\u4ee5\u8282\u7701\u8ba1\u7b97\uff0c\u4f46\u7701\u4e0d\u4e86\u5185\u5b58\u3002"),(0,n.kt)("h4",{id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"},"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"),(0,n.kt)("p",null,"\u5982\u679c\u5168\u90e8\u4f7f\u7528\u62c9\u53d6\uff0c\u4f1a\u5b58\u5728\u6548\u7387\u7684\u95ee\u9898\uff0c\u5e76\u4e14\u62c9\u53d6\u8981\u6c42\u88ab\u5f71\u54cd\u7740\u81ea\u884c\u652f\u6301\u76f8\u5173\u903b\u8f91\uff0c\u8fd9\u6709\u65f6\u5019\u4e0d\u591f\u7075\u6d3b\uff0c\u4f8b\u5982\u5df2\u6709\u7684\u7ec4\u4ef6\u6ca1\u6709\u8fd9\u4e2a\u903b\u8f91\uff0c\u5982\u679c\u65b0\u52a0\u4e00\u4e2a\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u8fd9\u4e9b\u903b\u8f91\uff0c\u90a3\u4e48\u4fee\u6539\u4f1a\u53d8\u5f97\u7b80\u5355\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5f00\u653e\u578b\u53ef\u4e92\u64cd\u4f5c\u7684\u7a0b\u5e8f\uff0c\u4e5f\u8bb8\u8fd9\u6837\u7684\u903b\u8f91\u662f\u5408\u7406\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u6743\u9650\u5185\u7684\u7ec4\u4ef6\u4f7f\u7528\u4e3b\u52a8\u5199\u5165\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f7f\u7528\u62c9\u53d6\u7684\u65b9\u5f0f")),(0,n.kt)("p",null,"\u5199\u5165\u7684\u65b9\u5f0f\u5012\u662f\u5f88\u597d\u5b9e\u73b0\uff0c\u6bd4\u5982\u901a\u8fc7writein\u6216\u8005writeout\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u63a8\u5bfc\u51fa\u5e94\u8be5\u600e\u6837\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u540c\u65f6\u652f\u6301\u53cc\u5411\u7684\u64cd\u4f5c\uff0c\u6709\u53ef\u80fd\u5c06\u4f7f\u5f97\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\u4e0d\u53ef\u63a8\u5bfc\u3002\u8fd9\u65b9\u9762\u540e\u7eed\u9700\u8981\u597d\u597d\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"2212-\u7b26\u53f7\u6cdb\u578b"},"2.2.12 \u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22121-\u53d8\u91cf\u540d\u79f0"},"2.2.12.1 \u53d8\u91cf\u540d\u79f0"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5305\u542b\u6570\u636e\u7ed3\u6784\uff0c\u53ea\u80fd\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u7ed3\u6784\u4f53\u6709\u540d\u79f0\uff0c\u7ed3\u6784\u4f53\u4e2d\u7684\u53d8\u91cf\u4e5f\u5305\u542b\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u5b9a\u4e49\u65b0\u7684\u7ed3\u6784\uff0c\u800c\u53ea\u80fd\u4f7f\u7528\u5143\u7ec4\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7b26\u53f7\u5b9a\u4e49\u5230\u7ec4\u4ef6\u53d8\u91cf\u4e4b\u95f4\u7684\u6620\u5c04\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Point \n{\n X = 10,\n Y = 20.0\n Z = 30.0\n}\n")),(0,n.kt)("h4",{id:"22122-\u6a21\u5f0f\u5339\u914d"},"2.2.12.2 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4f7f\u7b26\u53f7\u5b9a\u4e49\u4e0e\u7ec4\u4ef6\u53d8\u91cf\u540d\u79f0\u4e4b\u95f4\u8fdb\u884c\u89e3\u8026\uff0c\u53ef\u4ee5\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002\u4f46\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684=\u7b26\u53f7\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd8\u662f\u9700\u8981\u8d4b\u503c\u7b26\u53f7\uff0c\u8fd9\u91cc\u4f7f\u7528\u64cd\u4f5c\u7b26as\uff0c\u4f46\u5b83\u7684\u610f\u4e49\u5c31\u76f8\u5f53\u4e8eFP\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,"\u6ce8\u610f\uff0c\u5728Lua\u4e2d\u4f7f\u7528\u7d22\u5f15\u503c\u6765\u907f\u514d\u8c03\u7528\u8005\u8ddf\u88ab\u8c03\u7528\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u81ea\u7136\uff0c\u8fd8\u662f\u9700\u8981\u5f15\u5165\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u5c06\u503c\uff08\u5185\u5b58\u5730\u5740\uff09\u7ed1\u5b9a\u5230\u771f\u6b63\u81ea\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u79f0\u4e0a\u3002"),(0,n.kt)("p",null,"CS\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u53ea\u5728\u7ec4\u4ef6\u53d8\u91cf\u7ed1\u5b9a\u65f6\u4f7f\u7528\uff0c\u5176\u4ed6\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u79f0\u4e3a\u7b26\u53f7\u7ed1\u5b9a\u66f4\u6709\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u53d8\u91cf\u7ed1\u5b9a\u5fc5\u987b\u6765\u81ea\u4e8e\u7b26\u53f7\u8868\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u66ff\u6362\uff0c\u4f46\u4e5f\u662f\u66ff\u6362\u53e6\u4e00\u4e2a\u7b26\u53f7\u8868\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(X, Y, Z) <- Point //read from\nH -> HP //write to\n")),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u5b9e\u73b0\u4e86\u56db\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\uff1a\u5373\u4f7f\u7ed3\u6784\u540d\u5b57\u6216\u8005\u5185\u90e8\u53d8\u91cf\u7684\u540d\u5b57\u4e0d\u540c\uff0c\u53ea\u8981\u7c7b\u578b\u5339\u914d\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u53c2\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u6cdb\uff1a\u53ef\u4ee5\u5c06\u9ed8\u8ba4\u7684Point\u7b26\u53f7\u66ff\u6362\u4e3a\u5176\u4ed6\u7ed3\u6784\u76f8\u540c\u7684\u7b26\u53f7\uff0c\u4ece\u800c\u5b9e\u73b0\u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u5199\uff1a\u5199\u5165\u6570\u636e\uff0c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u5165\u5230\u53d8\u91cf\uff0c\u6216\u8005\u8bf4\u9700\u8981\u6784\u9020\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u5efa\uff1a\u9664\u4e86\u83b7\u53d6\u53d8\u91cf\u53ca\u7ed1\u5b9a\u4e4b\u5916\uff0c\u6784\u9020\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u53caSpaw\u51fd\u6570\u53ef\u80fd\u4e5f\u9700\u8981\u6a21\u5f0f\u5339\u914d\u3002")),(0,n.kt)("h4",{id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"},"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u7c7b\u578b\u4e3b\u8981\u7528\u4e8e\u4e0d\u540c\u7c7b\u6216\u8005\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u591a\u53d8\u91cf\u7684\u805a\u5408\u65b9\u5f0f\uff0c\u53ea\u9700\u8981\u4f20\u64ad\u5355\u4e2a\u7c7b\u578b\u53d8\u91cf\u540d\u79f0\u65e2\u53ef\u4ee5\u4f20\u9012\u591a\u4e2a\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u4e00\u4e2a\u65b9\u6cd5\u5185\u90e8\u6765\u8bb2\uff0c\u4ed6\u8981\u5904\u7406\u7684\u5168\u90e8\u662f\u5355\u4e2a\u53d8\u91cf\uff0c\u591a\u53d8\u91cf\u805a\u5408\u7684\u540d\u79f0\u5bf9\u4e8e\u51fd\u6570\u6765\u8bb2\u6ca1\u6709\u610f\u4e49\uff0c\u53cd\u800c\u9700\u8981\u66f4\u590d\u6742\u7684\u673a\u5236\u53bb\u65b9\u6cd5\u805a\u5408\u4f53\u5185\u90e8\u7684\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bb2\uff0c\u6a21\u5f0f\u5339\u914d\u7b80\u5316\u4e86\u8fd9\u79cd\u5bf9\u5b9e\u9645\u5185\u90e8\u53d8\u91cf\u7684\u8bbf\u95ee\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u5b83\u5e26\u6765\u7684\u4e0d\u597d\u4e00\u9762\uff0c\u53ef\u80fd\u662f\u6784\u9020\u5b9e\u4f8b\u7684\u65f6\u5019\u4e0d\u80fd\u4ee5\u4e00\u4e2a\u805a\u5408\u7c7b\u578b\u7684\u6574\u4f53\u8fdb\u884c\u8d4b\u503c\uff0c\u800c\u662f\u9700\u8981\u5bf9\u5176\u4e2d\u7684\u6bcf\u4e2a\u53d8\u91cf\u90fd\u8d4b\u503c\uff0c\u4f46\u662f\u5176\u5b9e\u672c\u6765\u4e5f\u662f\u9700\u8981\u5bf9\u6bcf\u4e2a\u53d8\u91cf\u8d4b\u503c\u7684\u3002"),(0,n.kt)("h3",{id:"2213-\u5e76\u53d1"},"2.2.13 \u5e76\u53d1"),(0,n.kt)("p",null,"\u9762\u5411\u5bf9\u8c61\u7684\u65e0\u5e8f\u76f8\u4e92\u5f15\u7528\uff0c\u901a\u5e38\u5bfc\u81f4\u5e76\u53d1\uff0c\u800c\u903b\u8f91\u4e0a\u4ed6\u4eec\u4e0d\u4e00\u5b9a\u6709\u5e76\u53d1\uff0c\u800c\u4e14\u6211\u4eec\u6ca1\u6709\u529e\u6cd5\u4ece\u903b\u8f91\u4e0a\u53bb\u63a7\u5236\u8fd9\u79cd\u5e76\u53d1\u7684\u987a\u5e8f\uff0c\u592a\u590d\u6742\uff0c\u5b8c\u5168\u65e0\u6cd5\u9884\u6599\u5bf9\u8c61\u4e4b\u95f4\u4ee5\u4ec0\u4e48\u6837\u7684\u987a\u5e8f\u548c\u65f6\u673a\u89e6\u53d1\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u4ee5\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\u7ec4\u7ec7\uff0c\u80fd\u591f\u66f4\u597d\u5730\u63a7\u5236\u903b\u8f91\u7684\u987a\u5e8f\uff0c\u4ece\u800c\u80fd\u8ddf\u5728\u903b\u8f91\u4e0a\u6bd4\u8f83\u7b80\u5355\u5730\u907f\u514d\u6389\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u5e76\u53d1"),(0,n.kt)("p",null,"\u5c06\u5171\u4eab\u53d8\u91cf\u548c\u79c1\u6709\u53d8\u91cf\u533a\u5206\uff0c\u79c1\u6709\u53d8\u91cf\u4e0d\u4f1a\u89e6\u53d1\u5e76\u53d1\uff0c\u800c\u5171\u4eab\u53d8\u91cf\u56e0\u4e3a\u4ece\u7b26\u53f7\u8868\u5f15\u7528\uff0c\u4ece\u800c\u7f16\u8bd1\u5668\u80fd\u591f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u7ec4\u4ef6\u5bf9\u5171\u4eab\u53d8\u91cf\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u6bd4\u5982\u80fd\u591f\u628a\u4e00\u4e9b\u76f8\u4e92\u72ec\u7acb\u7684\u7ec4\u4ef6\u5e76\u884c\u6267\u884c"),(0,n.kt)("p",null,"\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\uff0c\u90a3\u4e2a\u5bf9\u8c61\u6267\u884c\u7684\u903b\u8f91\u592a\u590d\u6742\uff0c\u5b58\u5728\u4e0d\u53ef\u9884\u6d4b\u7684\u5206\u652f\u3001\u8df3\u8f6c\u7b49\u903b\u8f91\uff0c\u90a3\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\u53ef\u80fd\u5bfc\u81f4\u4e0d\u53ef\u9884\u6d4b\u7684\u6307\u4ee4\u6267\u884c\u987a\u5e8f\u548c\u5e8f\u5217\uff0c\u56e0\u800c\u65e0\u6cd5\u5f88\u597d\u5730\u4f7f\u7528\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u56e0\u6b64\u901a\u5e38\u53ea\u80fd\u4f9d\u8d56\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u4f46\u4e0d\u53ef\u9884\u6d4b\u7684\u6df7\u4e71\u7684\u5bf9\u8c61\u5f15\u7528\u5173\u7cfb\u5c06\u5927\u5927\u5730\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898"),(0,n.kt)("p",null,"\u901a\u8fc7\u7cbe\u5fc3\u5c06\u540c\u4e00\u7ec4\u4ef6\u7684\u6570\u636e\u7ec4\u7ec7\u6210\u6570\u7ec4\uff0c\u4e0d\u5149\u662f\u80fd\u591f\u63a7\u5236\u903b\u8f91\u987a\u5e8f\uff0c\u4ece\u800c\u907f\u514d\u4e00\u90e8\u5206\u5e76\u53d1\uff0c\u540c\u65f6\u5c06\u5bf9\u8c61\u7ea7\u522b\u7684\u7ebf\u7a0b\u5e76\u884c\u8f6c\u5316\u4e3a\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u8fdb\u4e00\u6b65\uff0c\u901a\u8fc7\u5bf9\u4f9d\u8d56\u5173\u7cfb\u7684\u8bc6\u522b\u80fd\u591f\u66f4\u597d\u5730\u5c06\u591a\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u6267\u884c\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u8fd9\u91cc\u7684\u6838\u5fc3\u662f\u80fd\u591f\u901a\u8fc7\u5168\u5c40\u7b26\u53f7\u8868\u548c\u663e\u5f0f\u5171\u4eab\u5173\u7cfb\u8bc6\u522b\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("h4",{id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b"},"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"22132-erlang\u53caoop"},"2.2.13.2 Erlang\u53caOOP"),(0,n.kt)("h4",{id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"},"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"),(0,n.kt)("h3",{id:"2214-\u667a\u80fd\u611f\u77e5"},"2.2.14 \u667a\u80fd\u611f\u77e5"),(0,n.kt)("p",null,"\u5f53\u9760\u8fd1\u4e00\u4e2a\u7269\u4f53\uff0c\u6216\u8005\u4f7f\u7528\u4e00\u4e2a\u7279\u5b9a\u7684\u63a2\u7d22\u547d\u4ee4\u7684\u65f6\u5019\uff0c\u5982\u679c\u5176\u672c\u8eab\u4e0d\u5177\u5907\u8bc6\u522b\u5bf9\u65b9\u7684\u64cd\u4f5c\uff0c\u53ef\u4ee5\u52a8\u6001\u67e5\u8be2\u5bf9\u65b9\u7684\u5c5e\u6027\uff0c\u7136\u540e\u52a8\u6001\u63d0\u793a\u662f\u5426\u9700\u8981\u5b89\u88c5\u65b0\u7684\u64cd\u4f5c\u811a\u672c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6bcf\u4e2a\u811a\u672c\u9700\u8981\u7528\u6237\u624b\u52a8\u9009\u62e9\uff0c\u4e0d\u53ef\u80fd\u81ea\u52a8\u5b89\u88c5\u6240\u6709\u811a\u672c\uff0c\u4f46\u662f\u7cfb\u7edf\u672c\u8eab\u662f\u53ef\u4ee5\u611f\u77e5\u7684\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u8d2d\u4e70\u4e00\u8f86\u8f66\uff0c\u9700\u8981\u4f7f\u7528\u7279\u5b9a\u7684\u8d2d\u4e70\u65b9\u5f0f\u7b49\u3002"),(0,n.kt)("p",null,"\u4e24\u4e2a\u76ee\u6807\u6216\u4ef7\u503c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u79fb\u9664"),"\uff1a\u5f53\u4e00\u4e2a\u573a\u666f\u4e2d\u5e76\u4e0d\u5305\u542b\u67d0\u4e2a\u811a\u672c\u53ef\u64cd\u4f5c\u7684\u5b9e\u4f53\u65f6\uff0c\u53ef\u4ee5\u79fb\u9664\u4e00\u4e9b\u7ec4\u4ef6\uff0c\u6216\u8005\u5355\u7eaf\u7565\u8fc7\u8fd9\u4e9b\u7ec4\u4ef6\uff08\u51fa\u4e8e\u52a8\u6001\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff09\uff0c\u6bd4\u5982\u7528\u6237\u89d2\u8272\u53ef\u80fd\u5b89\u88c5\u975e\u5e38\u591a\u7684\u611f\u77e5\u548c\u4ea4\u4e92\u7ec4\u4ef6\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u53ef\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u6dfb\u52a0"),"\uff1a\u6709\u4e9b\u7c7b\u578b\u7684\u5b9e\u4f53\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u544a\u7269\u4f53\uff0c\u901a\u5e38\u5176\u672c\u8eab\u5e76\u4e0d\u5305\u542b\u5168\u573a\u666f\u7684\u673a\u5236\uff0c\u4ed6\u4eec\u53ea\u662f \u4e34\u65f6\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u667a\u80fd\u8d2d\u4e70"),"\uff1a\u8ba9\u7528\u6237\u5728\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70")),(0,n.kt)("h3",{id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92"},"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92"),(0,n.kt)("p",null,"\u6240\u6709\u7528\u6237\u4e4b\u95f4\u6d89\u53ca\u4fee\u6539\u6570\u636e\u7684\u7684\u4ea4\u4e92\u90fd\u662f\u4ea4\u6613\uff0c\u5f53\u7136\u5176\u4ed6\u7684\u4e00\u822c\u4e0d\u5177\u5907\u7834\u574f\u6027\u7684\u4ea4\u4e92\u4e5f\u53ef\u4ee5\uff0c\u4f8b\u5982 \u8bfb\u53d6 \u6570\u636e \u3002"),(0,n.kt)("h4",{id:"22141-helpcomponent"},"2.2.14.1 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h3",{id:"2215-components"},"2.2.15 Components"),(0,n.kt)("h4",{id:"22151-neuralcomponent"},"2.2.15.1 NeuralComponent"),(0,n.kt)("h4",{id:"22152-tagcomponent"},"2.2.15.2 TagComponent"),(0,n.kt)("h4",{id:"22153-realityidcomponent"},"2.2.15.3 RealityIDComponent"),(0,n.kt)("h4",{id:"22154-helpcomponent"},"2.2.15.4 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h4",{id:"22155-deltacomponent"},"2.2.15.5 DeltaComponent"),(0,n.kt)("p",null,"\u53c2\u89c12.2.11.3\u8282\u3002"),(0,n.kt)("h3",{id:"2216-\u6700\u4f73\u5b9e\u8df5"},"2.2.16 \u6700\u4f73\u5b9e\u8df5"),(0,n.kt)("h4",{id:"22161-more-granular-is-better"},"2.2.16.1 more granular is better"),(0,n.kt)("p",null,'Bevy has a smart scheduling algorithm that runs your systems in parallel as much as possible. It does that automatically, when your functions don\'t require conflicting access to the same data. Your game will scale to run on multiple CPU cores "for free"; that is, without requiring extra development effort from you.'),(0,n.kt)("p",null,"To improve the chances for parallelism, you can make your data and code more granular. Split your data into smaller types / ",(0,n.kt)("inlineCode",{parentName:"p"},"struct"),"s. Split your logic into multiple smaller systems / functions. Have each system access only the data that is relevant to it. The fewer access conflicts, the faster your game will run."),(0,n.kt)("p",null,"The general rule of thumb for Bevy performance is: more granular is better."),(0,n.kt)("h4",{id:"22162-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("p",null,"\u53c2\u89c12.2.7.1\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"},"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u662f\u4e0d\u53d8\u7684\uff0c\u4f46\u662f\u6570\u636e\u7ed3\u6784\u662f\u53d8\u5f97\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u6570\u636e\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u8fd9\u5c31\u5bfc\u81f4\u597d\u50cf\u4e00\u4e2a\u6e38\u620f\u7684\u6570\u636e\u662f\u4e0d\u53ef\u7a7a\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u4e0e\u6570\u636e\u6216\u8005\u6570\u636e\u7c7b\u578b\u5e94\u8be5\u662f\u89e3\u8026\u7684\uff0c\u6682\u4e14\u79f0\u4e4b\u4e3a\u6570\u636e\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"AI\u7f16\u8bd1\u5668\u6216\u8005AI\u8ba1\u7b97\u5e73\u53f0\u80fd\u591f\u5927\u529b\u53d1\u5c55\uff0c\u6a21\u5757\u5316\uff0c\u5f88\u597d\u7684\u4f18\u5316\uff0c\u662f\u56e0\u4e3aAI\u7684\u6570\u636e\u7ed3\u6784\u7279\u5f81\u5f88\u660e\u663e\uff0c\u6216\u8005\u62bd\u8c61\u5f97\u5f88\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u628a\u6570\u636e\u62bd\u8c61\u51fa\u6765\uff0c\u624d\u66f4\u5bb9\u6613\u770b\u6e05\u903b\u8f91\u7684\u672c\u8d28\uff0c\u6bd4\u5982\u6613\u4e8e\u7ba1\u7406\uff0c\u4f8b\u5982\u80fd\u591f\u5224\u65ad\u54ea\u4e9b\u903b\u8f91\u53ef\u4ee5\u5e76\u884c\uff0c\u4e0d\u7136\u903b\u8f91\u9690\u85cf\u4e8e\u4e00\u56e2\u4e71\u9ebb\u4e4b\u4e2d\uff0c\u4eba\u548c\u8ba1\u7b97\u673a\u90fd\u4e0d\u5bb9\u6613\u8bc6\u522b\u5176\u4e2d\u7684\u79e9\u5e8f")),(0,n.kt)("h4",{id:"22171-\u6570\u636e\u6cdb\u578b"},"2.2.17.1 \u6570\u636e\u6cdb\u578b"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u6709\u4e9b\u65b9\u6cd5\uff0c\u9053\u7406\u6216\u8005\u903b\u8f91\uff0c\u4ed6\u4eec\u5bf9\u8bb8\u591a\u4e0d\u540c\u7684\u6570\u636e\u6216\u4e8b\u7269\u90fd\u662f\u76f8\u901a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u65b9\u6cd5\u5e94\u7528\u5728\u4e0d\u540c\u7684\u9886\u57df\uff0c\u6bd4\u5982\u4e00\u8f86\u8f66\u5b50\uff0c\u4ed6\u5176\u5b9e\u53ef\u4ee5\u88c5\u4efb\u4f55\u4e1c\u897f\uff0c\u4f46\u662f\u5728\u7a0b\u5e8f\u5458\uff0c\u4e00\u4e2a\u5bf9\u8c61\u6240\u80fd\u5904\u7406\u6570\u636e\u5374\u5f80\u5f80\u5305\u542b\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f7f\u5f97\u65b9\u6cd5\u7684\u5904\u7406\u4e0d\u591f\u901a\u7528"),(0,n.kt)("p",null,"\u53ea\u8981\u903b\u8f91\u4e0a\u80fd\u591f\u4fdd\u8bc1\u5408\u7406\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u7531\u7528\u6237\u786e\u5b9a\uff0c\u90a3\u4e48\u4e00\u4e2a\u903b\u8f91\u5e94\u8be5\u53ef\u4ee5\u4f5c\u7528\u5728\u5177\u6709\u4e0d\u540c\u610f\u4e49\u7684\u76f8\u540c\u6570\u636e\u7c7b\u578b\u4e0a\uff0c\u53ea\u8981\u7528\u6237\u6307\u5b9a\u597d\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u79cd\u65b0\u578b\u6cdb\u578b")),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e"},"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e"),(0,n.kt)("p",null,"\u63a5\u53e3\u662f\u7528\u6765\u4fdd\u8bc1\u7c7b\u4e4b\u95f4\u534f\u4f5c\u7684\u534f\u8bae\uff0c\u8fd9\u4e2a\u534f\u8bae\u6ca1\u95ee\u9898\uff0c\u5b83\u4fdd\u8bc1\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("p",null,"\u4f46\u662f\u5728\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u9664\u4e86\u534f\u8bae\uff0c\u5b83\u8fd8\u591a\u4e86\u4e00\u79cd\u8eab\u4efd\uff0c\u5145\u5f53\u7c7b\u578b\uff0c\u7c7b\u578b\u88ab\u7528\u4e8e\u5e2e\u52a9\u8bed\u8a00\u8fdb\u884c\u68c0\u67e5\uff0c\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5408\u6cd5\u6027"),(0,n.kt)("p",null,"\u4f46\u8fd9\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9700\u6c42\uff0c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u534f\u8bae\u7684\u9700\u6c42\uff0c\u6bd4\u5982\uff0c\u5728\u73b0\u5b9e\u4e2d\uff0cA\u548cB\u534f\u4f5c\uff0c\u5b83\u4eec\u90fd\u4f1a\u81ea\u5df1\u9075\u5faa\u4e00\u79cd\u7b2c\u4e09\u65b9\u6807\u51c6\uff0cA\u548cB\u4e4b\u95f4\u4e8b\u524d\u4e0d\u9700\u8981\u76f8\u4e92\u534f\u5546\uff0c\u5b83\u4eec\u53ef\u4ee5\u4e0e\u4efb\u610f\u9075\u5faa\u6807\u51c6\u7684\u5b9e\u4f53\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u7b97A\u548cB\u6700\u7ec8\u53d1\u73b0\u5b83\u4eec\u9075\u5faa\u7684\u6807\u51c6\u7248\u672c\u4e0d\u4e00\u6837\uff0c\u4f46\u662f\u5927\u591a\u6570\u60c5\u51b5\u662f\u4e00\u6837\u7684"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u7279\u70b9\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u540c\u5728\u4e8eA\u548cB\u4e8b\u524d\u5b8c\u5168\u4e92\u4e0d\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u90fd\u80fd\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5f80\u5f80\u662f\u6765\u81ea\u72ec\u7acb\u7684\u7b2c\u4e09\u65b9")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u5f80\u5f80\u9700\u8981\u5f15\u5165\u63a5\u53e3\u58f0\u660e\uff0c\u8fd9\u79cd\u8026\u5408\u4e0d\u5149\u662f\u534f\u8bae\u672c\u8eab\uff0c\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u534f\u8bae\u5916\u7684\u8ddf\u7a0b\u5e8f\u76f8\u5173\u7684\u4e1c\u897f\uff0c\u4f8b\u5982\u7279\u5b9a\u7684\u7a0b\u5e8f\u5305\u3001\u7b7e\u540d\u7684\u987a\u5e8f\uff0c\u751a\u81f3\u6709\u65f6\u5019\u4f9d\u8d56\u7684\u987a\u5e8f\uff0c\u66f4\u7cdf\u7cd5\u7684\u662f\uff0c\u8fd8\u5fc5\u987b\u628a\u8fd9\u4e9b\u5185\u5bb9\u63d2\u5165\u5230\u4ee3\u7801\u4e2d"),(0,n.kt)("p",null,"\u4f60\u5fc5\u987b\u4ece\u90a3\u4e2a\u63a5\u53e3\u7ee7\u627f\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u9075\u5faa\u4e00\u4e2a\u63a5\u53e3\u534f\u8bae"),(0,n.kt)("p",null,"\u5373\u4f7f\u4f60\u6709\u81ea\u5df1\u7684\u65b9\u6cd5\u505a\u4e86\u534f\u8bae\u4e00\u6837\u7684\u4e8b\u60c5\uff0c\u8fd9\u8fd8\u4e0d\u591f\uff0c\u4f60\u5fc5\u987b\u628a\u4ee3\u7801\u79fb\u5230\u63a5\u53e3\u65b9\u6cd5\u3001\u5305\u88c5\u4e00\u4e0b\u7b49\u7b49\uff0c\u4f60\u7684\u4fee\u6539\u4ee3\u7801"),(0,n.kt)("p",null,"\u5728\u9075\u5faa\u534f\u8bae\u4e4b\u5916\uff0c\u5f15\u5165\u4e86\u4e00\u4e9b\u989d\u5916\u7684\u8d1f\u62c5"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff1a\u534f\u8bae\u901a\u5e38\u5173\u6ce8\u6570\u636e\uff0c\u4f60\u80fd\u628a\u8fd9\u4e2a\u6570\u636e\u8fdb\u884c\u5904\u7406\uff0c\u6bd4\u5982\u6211\u4e70\u4e86\u4e00\u79cd\u7279\u5b9a\u7684\u539f\u6750\u6599\uff0c\u6211\u62ff\u8fc7\u6765\u8fdb\u884c\u52a0\u5de5\uff0c\u7136\u540e\u751f\u4ea7\u53e6\u4e00\u79cd\u6750\u6599\uff0c\u5356\u7ed9\u5176\u4ed6\u5382\u5bb6\uff0c\u6211\u4eec\u7ea6\u5b9a\u7684\u534f\u8bae\u662f\u539f\u6750\u6599\u7684\u89c4\u683c\u548c\u54c1\u7c7b\uff0c\u4f46\u4e0d\u662f\u6211\u4eec\u52a0\u5de5\u7684\u65b9\u6cd5\u6216\u8005\u6b65\u9aa4\uff0c\u6211\u7684\u65b9\u6cd5\u548c\u6d41\u7a0b\u968f\u65f6\u53ef\u4ee5\u53d8\u52a8\uff0c\u53ea\u8981\u6211\u8f93\u5165\u548c\u8f93\u51fa\u7684\u89c4\u683c\u4e0d\u53d8"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u63a5\u53e3\u4e2d\uff0c\u672c\u610f\u4e5f\u662f\u5173\u6ce8\u8f93\u5165\u8f93\u51fa\u7684\u6570\u636e\u89c4\u683c\uff0c\u8fd9\u672c\u53ef\u4ee5\u4ec5\u901a\u8fc7\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u5373\u53ef\uff0c\u4f46\u662f\u7a0b\u5e8f\u9700\u8981\u4fdd\u8bc1\u8fd0\u884c\u65f6\u5bf9\u8c61\u521d\u59cb\u5316\u3001\u53d8\u91cf\u8d4b\u503c\u3001\u53d8\u91cf\u7684\u5408\u6cd5\u6027\u7b49\u7b49\u5404\u79cd\u539f\u56e0\uff0c\u4ed6\u628a\u8f93\u5165\u8f93\u51fa\u6570\u636e\u548c\u65b9\u6cd5\u653e\u5230\u4e86\u4e00\u8d77\uff0c\u8fd9\u91cc\u9762\u4e5f\u6709\u66f4\u91cd\u8981\u7684\u539f\u56e0\u662f\u5b9e\u65f6\u6027\u548c\u987a\u5e8f\uff1a\u8c03\u7528\u65b9\u9700\u8981\u7acb\u5373\u83b7\u53d6\u8fd4\u56de\u7ed3\u679c"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u7684\u534f\u8bae\u7ea6\u5b9a\u7684\u66f4\u50cf\u662f\u65b9\u6cd5\u800c\u4e0d\u662f\u6570\u636e\uff0c\u53c8\u52a0\u4e0a\u7f16\u8bd1\u5668\u7684\u7c7b\u578b\u7cfb\u7edf\u7b49\u539f\u56e0\uff0c\u534f\u8bae\u88ab\u6df1\u5ea6\u8026\u5408\u5728\u7cfb\u7edf\u4e2d\uff0c\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"CreationXR\u4ec5\u5173\u6ce8\u6570\u636e\u53ca\u5176\u7ed3\u6784\uff0c\u5e76\u4e14\u901a\u8fc7\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4e5f\u80fd\u4fdd\u8bc1\u8fd4\u56de\u503c\u88ab\u7acb\u5373\u53d6\u5f97\uff0c\u4f46\u662f\u5b83\u5f31\u5316\u4e86\u5bf9\u65b9\u6cd5\u76f8\u5173\u7684\u4f9d\u8d56\uff0c\u800c\u6570\u636e\u53ef\u4ee5\u901a\u8fc7\u516c\u5171\u7b26\u53f7\u8868\u5b9a\u4e49\uff0c\u4e0d\u7ba1\u662f\u57fa\u672c\u7c7b\u578b\u8fd8\u662f\u805a\u5408\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u79cd\u89e3\u8026\u5927\u5927\u7684\u7b80\u5316\u4e86\u7a0b\u5e8f\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u3001\u4e5f\u589e\u52a0\u4e86\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u53ef\u4ee5\u968f\u65f6\u589e\u52a0\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u6216\u8005\u6267\u884c\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u4f46\u5176\u4ed6\u90e8\u5206\u5b8c\u5168\u4e0d\u53d7\u5f71\u54cd"),(0,n.kt)("p",null,"\u5f53\u7136\u5e26\u6765\u7684\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\u662f\uff1a\u8fd9\u79cd\u9690\u5f0f\u7684\u53c2\u6570\u4f20\u9012\u5bfc\u81f4\u7ec4\u4ef6\u7684\u5b9e\u9645\u76ee\u6807\u5e76\u4e0d\u662f\u5f88\u660e\u786e\uff0c\u56e0\u4e3a\u5b83\u5f88\u6709\u53ef\u80fd\u505a\u4e86\u4e00\u4e9b\u4e0d\u53ef\u63a7\u7684\u4e8b\u60c5\uff0c\u8fd9\u79cd\u9700\u8981\u5bf9\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u63cf\u8ff0\uff0c\u5c31\u50cf\u4e00\u4e2a\u4ea7\u54c1\u8bf4\u660e\u4e66\uff0c\u4ed6\u5230\u5e95\u505a\u4e86\u4ec0\u4e48\uff0c\u8fd9\u6837\u7684\u8bf4\u660e\u4e66\u662f\u666e\u901a\u7528\u6237\u53ef\u4ee5\u7406\u89e3\u7684\uff0c\u8bed\u4e49\u5316\u7684"),(0,n.kt)("h3",{id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"},"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"),(0,n.kt)("h4",{id:"22181-update\u673a\u5236"},"2.2.18.1 Update\u673a\u5236"),(0,n.kt)("p",null,"Update\u662f\u6e38\u620f\u7684\u6838\u5fc3\u9a71\u52a8\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u65e2\u662f\u5f62\u6210\u52a8\u6001\u4e16\u754c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\u53c8\u7531\u4e8e\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5728\u5b9e\u65f6\u66f4\u65b0\u81ea\u5df1\u7684\u72b6\u6001\uff0c\u56e0\u6b64\u4f7f\u5f97\u7cfb\u7edf\u4e4b\u95f4\u7684\u89e3\u8026\u53d8\u5f97\u53ef\u80fd\uff0c\u5373\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u7684\u72b6\u6001")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u53ea\u64cd\u4f5c\u4e1a\u52a1\u89c4\u5219\uff0c\u6ca1\u6709\u5b9e\u4f53\u5316\uff0c\u4ed6\u4eec\u901a\u5e38\u9762\u5bf9\u7684\u662f\u6570\u636e\uff0c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u79cd\u6570\u636e\u901a\u5e38\u53cd\u5e94\u7684\u662f\u89c4\u5219\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f97\u6982\u5ff5"),(0,n.kt)("h4",{id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"},"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u7a0b\u5e8f\u5305\u5927\u5c0f\u90fd\u6bd4\u8f83\u5c0f\uff0c\u4f8b\u5982\u4e00\u4e2a\u624b\u673aapp\u53ea\u6709\u51e0\u5341\u6700\u591a\u4e0a\u767eM\uff0c\u4f46\u662f\u4e00\u4e2a\u6e38\u620f\u5f80\u5f80\u90fd\u591a\u5927\u51e0\u4e2aG\uff0c\u4e3b\u673a\u6e38\u620f\u751a\u81f3\u51e0\u5341\u5230\u4e0a\u767eG\u3002"),(0,n.kt)("p",null,"\u4e0d\u5149\u7a0b\u5e8f\u5305\u7684\u5927\u5c0f\uff0c\u8ba1\u7b97\u65f6\u52a0\u8f7d\u5230\u663e\u5b58\u7684\u6570\u636e\u91cf\u66f4\u662f\u5dee\u5f02\u5de8\u5927 \uff0c\u4f8b\u5982\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u53ea\u9700\u8981\u52a0\u8f7d\u5c11\u91cf\u6709\u5173\u7684\u6570\u636e\uff0c\u5e38\u9a7b\u5185\u5b58\u4e2d\u7684\u6570\u636e\u901a\u5e38\u4e0d\u591a\uff0c\u6bcf\u4e2a\u4e1a\u52a1\u903b\u8f91\u76f8\u5173\u7684\u6570\u636e\u901a\u5e38\u90fd\u6bd4\u8f83\u72ec\u7acb\uff0c\u5373\u4f7f\u5c11\u91cf\u5355\u4e2a\u903b\u8f91\u9700\u8981\u7684\u6570\u636e\u91cf\u6bd4\u8f83\u5927\uff0c\u4e5f\u4ec5\u9700\u5728\u8ba1\u7b97\u7684\u65f6\u5019\u5373\u4f7f\u52a0\u8f7d\u5c31\u50cf\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u5bf9\u5b9e\u65f6\u6027\u8981\u6c42\u6ca1\u90a3\u4e48\u9ad8\u3002"),(0,n.kt)("p",null,"\u800c\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u901a\u5e38\u9ad8\u5ea6\u5173\u8054\uff0c\u4e14\u5305\u542b\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u5f80\u5f80\u6570\u636e\u4f1a\u975e\u5e38\u5927\uff0c\u4e14\u5927\u591a\u9700\u8981\u5e38\u9a7b\u5185\u5b58\uff0c\u4f7f\u5f97\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u7684\u663e\u5b58\u5f80\u5f80\u662f\u4e0d\u591f\u7684\u3002\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\u4e0d\u4ec5\u610f\u5473\u7740\u6bd4\u4e00\u822c\u7684\u6570\u636e\u91cf\u8981\u5927\uff0c\u800c\u4e14\u4e3a\u4e86\u52a0\u901f\u8ba1\u7b97\uff0c\u901a\u5e38\u8fd8\u9700\u8981\u5305\u542b\u5f88\u591a\u5197\u4f59\u7684\u6570\u636e\u548c\u6570\u636e\u7ed3\u6784\u6765\u8fbe\u5230\u5b9e\u65f6\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u672a\u6765\u7684\u865a\u62df\u5f00\u653e\u5927\u4e16\u754c\u9700\u8981\u66f4\u5927\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u80fd\u8fdc\u8fdc\u8d85\u51fa\u5355\u53f0\u8ba1\u7b97\u673a\u80fd\u591f\u627f\u8f7d\u7684\u663e\u5b58\u5927\u5c0f\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8fd9\u6837\u7684\u5927\u4e16\u754c\u5c06\u5f88\u96be\u6709\u6548\u5730\u8fd0\u884c\uff0c\u9700\u8981\u65b0\u7684\u6280\u672f\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u6269\u5c55\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"22183-\u67b6\u6784\u590d\u6742\u5ea6"},"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6"),(0,n.kt)("h3",{id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai"},"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI"),(0,n.kt)("h3",{id:"2220-\u5b89\u5168"},"2.2.20 \u5b89\u5168"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8ba9\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u8fd0\u884c\uff0c\u4ee5\u53ca\u6765\u81ea\u4e0d\u540c\u7528\u6237\u7684\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u8fdb\u884c\u4ea4\u4e92\uff0c\u5b89\u5168\u6027\u662f\u4e00\u4e2a\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002\u8fd9\u91cc\u7684\u5b89\u5168\u6027\u6d89\u53ca\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801bug\u5f15\u8d77\u7684\u7a0b\u5e8f\u5d29\u6e83"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u84c4\u610f\u7834\u574f\u7cfb\u7edf\u548c\u4ed6\u4eba\u6570\u636e")),(0,n.kt)("p",null,"\u540e\u9762\u901a\u8fc7\u4e25\u683c\u63a7\u5236\u7a0b\u5e8f\u5b9e\u4f8b\u5316\u5bf9\u8c61\u6765\u5b9e\u73b0\uff0c\u901a\u8fc7Creation Script\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5206\u914d\u81ea\u5df1\u7684\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u65e0\u6cd5\u6784\u9020\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u7cfb\u7edf\u5e26\u6709\u4f17\u591a\u6570\u636e\u7684\u7ed3\u6784\uff0c\u4f8b\u5982\u573a\u666f\u6811")),(0,n.kt)("p",null,"\u6240\u6709\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u63a5\u53e3\u90fd\u8981\u4fdd\u8bc1\u7528\u6237\u548c\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("h3",{id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56"},"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56"),(0,n.kt)("h4",{id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"},"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"),(0,n.kt)("p",null,"\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\uff1a\u5c06\u5d4c\u5957\u7684\u51fd\u6570\u7ed3\u6784\u8f6c\u5316\u4e3a\u6241\u5e73\u7ed3\u6784\uff0c\u5176\u4ee3\u4ef7\u662f\u5b58\u5728\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\u5c5e\u6027\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u53d8\u91cf\u4e0d\u80fd\u7b97\u662f\u7834\u574f\u4e86\u7eaf\u51fd\u6570\u7684\u7ed3\u6784\uff0c\u4f46\u662f\u4ed6\u4eec\u5e26\u6765\u4e00\u5b9a\u7684\u5e72\u6270\uff0c\u5e76\u4e14\u5927\u91cf\u7684\u4e2d\u95f4\u53d8\u91cf\u5982\u679c\u90fd\u5b58\u50a8\u8d77\u6765\uff0c\u65e2\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u4e5f\u6d6a\u8d39\u5185\u5b58\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u5728RealityIS\u4e2d\u7ec4\u4ef6\u5c5e\u6027\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u6240\u5c5e\u5173\u7cfb\uff0c\u5b83\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u62e5\u6709\u7684\uff0c\u4e5f\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u7684\uff0c\u8fd9\u4e5f\u662fRealityIS\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u4e0d\u53ef\u80fd\u7b80\u5355\u5730\u901a\u8fc7\u5728\u5c5e\u6027\u4e0a\u52a0\u5165\u4e00\u4e9b\u53d8\u91cfattribute \u6765\u58f0\u660e\u5c5e\u6027\u662f\u5426\u5e94\u8be5\u88ab\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u5c5e\u6027\u5e76\u4e0d\u662f\u5728\u4f7f\u7528\u7684\u5730\u65b9\u5b9a\u4e49\u7684\uff0c\u5373\u4e0d\u662f\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u7684\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u7a0b\u4e5f\u662f\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\uff0cRealityIS\u5c5e\u6027\u5b9a\u4e49\u7684\u5730\u65b9\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u8fd9\u662f\u552f\u4e00\u5b9a\u4e49\u7684\u5730\u65b9\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9battribute \u5b9a\u4e49\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u5373\u53ea\u6709\u7b26\u53f7\u8868\u8981\u6c42\u5b58\u50a8\u7684\u53d8\u91cf\u624d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u5176\u4ed6\u6570\u636e\u90fd\u8ba4\u4e3a\u662f\u4e2d\u95f4\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e5f\u4e0d\u80fd\u4e3a\u4e86\u6301\u4e45\u5316\u628a\u4e2d\u95f4\u53d8\u91cf\u90fd\u653e\u5230\u79c1\u6709\u8868\u4e2d\uff0c\u90a3\u6837\u5c31\u4e0d\u5177\u5907\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u901a\u4fe1\u7684\u80fd\u529b\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u7684\u4e3b\u8981\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u4e3a\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u6240\u6709\u9700\u8981\u4e92\u64cd\u4f5c\u7684\u90fd\u9700\u8981\u5b9a\u4e49\u5728\u5168\u5c40\u8868\u4e2d\uff0c\u5230\u5168\u5c40\u8868\u4e5f\u6709\u4e0d\u9700\u8981\u6301\u4e45\u5316\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4e2d\u95f4\u53d8\u91cf\u5b58\u5728\u4e8e\u79c1\u6709\u8868\u4e5f\u53ef\u4ee5\uff0c\u4f46\u662f\u4ed6\u53ef\u80fd\u9700\u8981\u5173\u8054\u7ec4\u4ef6\uff0c\u4f7f\u5f97\u8ba1\u7b97\u7684\u6700\u7ec8\u7ed3\u679c\u662f\u4e00\u4e2a\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u7684\u5c5e\u6027\u3002"),(0,n.kt)("h4",{id:"22212-\u5173\u8054\u7ec4\u4ef6"},"2.2.21.2 \u5173\u8054\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\u6211\u4eec\u662f\u5426\u5e94\u8be5\u8981\u6c42\u79c1\u6709\u8868\u4e2d\u7684\u7b26\u53f7\u603b\u662f\u4e0d\u5e94\u8be5\u6301\u4e45\u5316\uff0c\u8fd9\u6837\u5c31\u4f1a\u66f4\u52a0\u8feb\u4f7f\u5f00\u53d1\u8005\u9488\u5bf9\u516c\u5171\u53ef\u4ea4\u4e92\u5c5e\u6027\u8fdb\u884c\u5f00\u53d1\uff0c\u5426\u5219\u5f00\u53d1\u7684\u7ec4\u4ef6\u5c06\u6ca1\u6709\u4efb\u4f55\u7528\u5904\u3002"),(0,n.kt)("p",null,"\u8fd9\u5e26\u6765\u4e24\u4e2a\u597d\u5904\uff1a1\u662f\u7ec4\u4ef6\u4e0d\u518d\u4e8e\u5355\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u800c\u4e14\u4e00\u4e2a\u76f8\u5173\u8054\u7684\u7ec4\uff0c\u8fd9\u6837\u7684\u7ec4\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u7c92\u5ea6\u66f4\u5927\u4e00\u70b9\uff0c2\u662f\u6807\u51c6\u7684\u5730\u4f4d\u66f4\u9ad8\uff0c\u6240\u4ee5\u7ec4\u4ef6\u771f\u6b63\u662f\u5fc5\u987b\u4f9d\u8d56\u4e8e\u6807\u51c6\uff0c\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u6574\u4e2a\u7a0b\u5e8f\u673a\u5236\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u7ba1\u4e2d\u95f4\u72b6\u6001\u5982\u4f55\uff0c\u4ed6\u7684\u7b2c\u4e00\u4e2a\u8f93\u5165\uff08\u6216\u8005\u591a\u4e2a\u53c2\u6570\u7684\u5176\u4e2d\u4e4b\u4e00\uff09\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u7136\u540e\u6700\u540e\u4e00\u4e2a\u5199\u5165\u7684\u5c5e\u6027\u4e5f\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4e2d\u95f4\u7684\u5927\u91cf\u5c5e\u6027\u5c5e\u4e8e\u4e2d\u95f4\u5c5e\u6027\uff0c\u6765\u81ea\u79c1\u6709\u8868\uff0c\u4e0d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u6240\u6709\u8fd9\u4e00\u8fde\u4e32\u7684\u7ec4\u4ef6\u6210\u4e3a\u5173\u8054\u7ec4\u4ef6\uff0c\u4ed6\u4eec\u5f62\u6210\u4f9d\u8d56\u5173\u7cfb\uff0c\u800c\u6240\u6709\u76f8\u4e92\u4f9d\u8d56\u7684\u7ec4\u5f62\u6210\u4e00\u4e2a\u7eaf\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u7ec4\u4ef6\u7ec4\u4e2d\u7684\u6240\u6709\u51fd\u6570\u5982\u679c\u5747\u662f\u4f5c\u7528\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5219\u4ed6\u4eec\u53ef\u4ee5\u5408\u5e76\u4e3a\u4e00\u4e2a\u5927\u51fd\u6570\uff0c\u56e0\u4e3a\u53cd\u6b63\u4e2d\u95f4\u8fc7\u7a0b\u522b\u4eba\u65e0\u6cd5\u4ea4\u4e92\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u62c6\u5206\u3002"),(0,n.kt)("p",null,"\u62c6\u5206\u6210\u591a\u4e2a\u4e2d\u95f4\u53d8\u91cf\u9002\u5408\u4e8e\uff1a\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u5206\u5e03\u4e8e\u591a\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u6216\u8005\u8bf4\u7684\u8f93\u5165\u6765\u81ea\u4e8e\u591a\u4e2a\u5b9e\u4f53\uff0c\u8fd9\u79cd\u60c5\u51b5\u5fc5\u987b\u8981\u501f\u7528\u4e2d\u95f4\u53d8\u91cf\u624d\u80fd\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7406\u8bba\u4e0a\u8bf4\uff0c\u53ea\u8981\u8f93\u5165\u5168\u5c40\u7b26\u53f7\u53c2\u6570\u5927\u4e8e\u7b49\u4e8e2\uff0c\u5c31\u9700\u8981\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u4e2d\u95f4\u53d8\u91cf\uff0c\u6765\u8fdb\u884c\u5f52\u5e76\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u4e00\u79cd\u91cd\u8f7d\u7684\u673a\u5236\uff0c\u5982\u679c\u67d0\u4e2a\u5bf9\u8c61\u540c\u65f6\u5305\u542b\u4e86\u591a\u4e2a\u53c2\u6570\uff0c\u53ef\u4ee5\u51cf\u5c11\u4e2d\u95f4\u53d8\u91cf\u7684\u5f52\u5e76\u8fc7\u7a0b\uff0c\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7a0b\u5ea6\u7684\u6027\u80fd\u63d0\u5347\uff0c\u4f46\u662f\u5bf9\u67b6\u6784\u7b80\u6d01\u6027\u9020\u6210\u7684\u4ee3\u4ef7\u53ef\u80fd\u6709\u70b9\u5927\uff0c\u5e26\u6765\u7f16\u7801\u548c\u8fd0\u884c\u65f6\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5927\u7684\u7ec4\u4ef6\u7ec4\u7531\u591a\u4e2a\u5c0f\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u8fd9\u4e9b\u5c0f\u7ec4\u4ef6\u6784\u6210\u4e00\u4e2a\u8f83\u5927\u903b\u8f91\u7684\u590d\u6742\u7ec6\u8282\uff0c\u800c\u7ec4\u4ef6\u7ec4\u5219\u662f\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u7684\u5355\u4f4d\uff0c\u7ec4\u4ef6\u7ec4\u5185\u5c5e\u4e8e\u5f00\u53d1\u8005\u8fdb\u884c\u7ef4\u62a4\u7684\u5355\u4f4d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5f00\u53d1\u8005\u7684\u7ec4\u4ef6\u662f\u591a\u4e2a\u8f93\u5165\u53c2\u6570\uff0c\u6765\u81ea\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u5219\u4ed6\u5e94\u8be5\u77e5\u9053\u53ea\u6709\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\u7684\u5355\u4e2a\u5bf9\u8c61\u624d\u80fd\u6267\u884c\u8ba1\u7b97\uff0c\u5426\u5219\u4ed6\u5e94\u8be5\u59cb\u7ec8\u5047\u8bbe\u5355\u53d8\u91cf\u8f93\u5165\u7684\u5f62\u6210\uff0c\u901a\u8fc7\u4e2d\u95f4\u53d8\u91cf\u7ec4\u5408\u3002"),(0,n.kt)("h4",{id:"22213-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("h3",{id:"2222-\u5206\u5e03\u5f0f"},"2.2.22 \u5206\u5e03\u5f0f"),(0,n.kt)("h3",{id:"2223-\u5f02\u5e38"},"2.2.23 \u5f02\u5e38"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u5c06\u4e00\u4e9b\u5b8c\u6574\u7684\u64cd\u4f5c\u5206\u6563\u5230\u591a\u4e2a\u7ec4\u4ef6\u5f53\u4e2d\uff0c\u5355\u4e2a\u7f3a\u4e4f\u539f\u5b50\u6027\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4e0e\u5176\u4ed6\u7ec4\u4ef6\u4e00\u8d77\u6784\u6210\u4e86\u6574\u4e2a\u5b8c\u6574\u8ba1\u7b97\u3002\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u50cfErlang\u90a3\u6837\u91c7\u53d6\u4e22\u5f03\u5355\u4e2a\u8fdb\u7a0b\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\u5728Erlang\u4e2d\u4e00\u4e2a\u8fdb\u7a0b\u5d29\u6e83\u4e86\u5e76\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u8fdb\u7a0b\uff0c\u800c\u4e14Erlang\u5355\u4e2a\u8fdb\u7a0b\u7684\u4efb\u52a1\u6bd4\u8f83\u72ec\u7acb\u3002\u800cRealityIS\u4e2d\u67d0\u4e9b\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u610f\u5473\u7740\u524d\u9762\u67d0\u4e9b\u8ba1\u7b97\u4e5f\u9700\u8981\u53d6\u6d88\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3aRealityIS\u5c06\u91c7\u53d6\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u5f02\u5e38\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u6574\u4e2a\u8be5\u5e27\u7684\u6240\u6709\u8ba1\u7b97\u90fd\u9700\u8981\u4e22\u5f03")),(0,n.kt)("p",null,"\u6bd4\u5982\u91c7\u53d6\u54cd\u5e94\u5f0f\uff0c\u5982\u679c\u4e00\u4e2a\u70b8\u5f39\u7206\u70b8\u4e86\uff0c\u4f46\u662f\u540e\u7eed\u5bf9\u70b8\u5f39\u8fdb\u884c\u76f8\u5e94\u7684\u7ec4\u4ef6\u5374\u5d29\u6e83\u4e86\uff0c\u8fd9\u4e2a\u65f6\u5019\u524d\u9762\u7684\u70b8\u5f39\u5c31\u65e0\u6548\u4e86\u3002\u5982\u679c\u662f\u4e00\u4e9b\u5176\u4ed6\u66f4\u91cd\u8981\u7684\u903b\u8f91\u53d1\u751f\uff0c\u8fd9\u6837\u7684\u5f71\u54cd\u5c31\u4f1a\u975e\u5e38\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u6e38\u620f\u7684\u505a\u6cd5\u662f\uff0c\u5f53\u4e00\u4e2a\u5730\u65b9\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u4e86\uff0c\u6e38\u620f\u4f1a\u4ece\u4e00\u4e9b\u56fa\u5b9a\u7684\u5b58\u6863\u8282\u70b9\u6062\u590d\uff0c\u73a9\u5bb6\u9700\u8981\u4ece\u90a3\u4e9b\u56fa\u5b9a\u5b58\u6863\u91cd\u65b0\u5f00\u59cb\u73a9\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u91cd\u590d\u3002"),(0,n.kt)("p",null,"\u91cd\u590d\u80af\u5b9a\u662f\u5fc5\u987b\u7684\uff0c\u95ee\u9898\u662f\u5bf9\u4e8e\u4e00\u4e2a\u6ca1\u6709\u5173\u5361\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5b83\u7684\u5b58\u6863\u8282\u70b9\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u7cfb\u7edf\u9700\u8981\u4e00\u5957\u81ea\u52a8\u5316\u7684\u5b58\u6863\u673a\u5236\u3002"),(0,n.kt)("h4",{id:"22231-\u81ea\u52a8\u5b58\u6863"},"2.2.23.1 \u81ea\u52a8\u5b58\u6863"),(0,n.kt)("p",null,"\u6784\u5efa\u4e00\u4e2a\u5b58\u6863\u673a\u5236\uff0c\u7136\u540e\u5d29\u6e83\u4e4b\u540e\u63d0\u793a\u7528\u6237\u9000\u51fa\uff0c\u5e76\u81ea\u52a8\u56de\u9000\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u5feb\u7167\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff0c\u5c3d\u7ba1\u5f88\u591a\u7528\u6237\u5171\u540c\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\u8fd0\u884c\u7ec4\u4ef6\uff0c\u4f46\u662f\u5927\u90e8\u5206\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1\u8fd8\u90fd\u662f\u5728RealityID\u4e4b\u5185\u7684\uff0c\u6240\u4ee5\u4e00\u822c\u60c5\u51b5\u53ea\u9700\u8981\u9000\u51fa\u5355\u4e2a\u7528\u6237\u5373\u53ef\u3002\u4f46\u4e5f\u6709\u53ef\u80fd\u67d0\u4e2a\u8de8\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f1a\u5f71\u54cd\u5230\u591a\u4e2a\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5185\u5bb9\u662f\u7531\u666e\u901a\u7528\u6237\u521b\u5efa\u7684\uff0c\u6240\u4ee5\u9700\u8981\u907f\u514d\u4f20\u7edf\u6e38\u620f\u8bbe\u7f6e\u7684\u4e13\u95e8\u7684\u5b58\u6863\u8282\u70b9\u7684\u673a\u5236\uff0c\u539f\u56e0\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u5f88\u96be\u6709\u8fd9\u6837\u7684\u80fd\u529b\uff0c\u5b58\u6863\u5f80\u5f80\u662f\u8981\u6253\u5f00\u7a0b\u5e8f\u7684\u7ed3\u6784\u7684\uff0c\u589e\u52a0\u590d\u6742\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u653e\u5f0f\u7684\u4e16\u754c\u5176\u5b9e\u5f88\u96be\u8bbe\u7f6e\u5b58\u6863\u8282\u70b9")),(0,n.kt)("p",null,"\u4f46\u6bcf\u5e27\u5b58\u50a8\u80af\u5b9a\u4ee3\u4ef7\u503c\u5f88\u5927\u7684\uff0c\u6240\u4ee5\u4e5f\u8981\u907f\u514d\u6bcf\u5e27\u5b58\u50a8\u3002"),(0,n.kt)("h4",{id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"},"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u5f53\u5c5e\u6027\u5b9a\u4e49\u4e3a\u5b58\u6863\u5c5e\u6027\u65f6\uff0c\u5982\u679c\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u7406\u8bba\u4e0a\u8fd9\u4e9b\u4fee\u6539\u90fd\u8981\u5b58\u50a8\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("h4",{id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863"},"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h4",{id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9"},"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9"),(0,n.kt)("p",null,"\u603b\u7684\u6765\u8bf4\uff0c\u6709\u4e24\u4e2a\u5b58\u50a8\u65f6\u95f4\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u7684\u67d0\u4e2a\u7ec4\u4ef6\u8fdb\u7a0b\u5bfc\u81f4\u5d29\u6e83\u65f6")),(0,n.kt)("p",null,"CreationVM\u4f1a\u5305\u542b\u4e24\u4efd\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u5b58\u6863\u6570\u636e")),(0,n.kt)("p",null,"\u5f53\u8fd0\u884c\u65f6\u7ec4\u4ef6\u4fee\u6539\u4e86\u67d0\u4e2a\u5b58\u6863\u5c5e\u6027\uff0c\u8fd9\u4e9b\u503c\u4f1a\u88ab\u8bb0\u5f55\u5728\u5185\u5b58\u4e2d\u3002\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u5e94\u8be5\u4fdd\u8bc1\u4e00\u65e6\u8fd9\u4e9b\u503c\u88ab\u4fee\u6539\uff0c\u5176\u4e4b\u524d\u7684\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\u3001\u539f\u5b50\u6027\u7684\u3001\u4e0d\u53ef\u4fee\u6539\u7684\u3002\u6240\u4ee5\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u88ab\u968f\u65f6\u5199\u5165\u5230\u7528\u6237\u771f\u6b63\u7684\u6570\u636e\u5e93\u6587\u4ef6\u4e2d\u3002"),(0,n.kt)("p",null,"\u53ea\u662f\u56e0\u4e3a\u9891\u7e41\u5199\u5165\u6570\u636e\u5e93\u7684IO\u64cd\u4f5c\uff0c\u6211\u4eec\u9009\u62e9\u5728\u4e00\u4e9b\u5173\u952e\u4e8b\u4ef6\u53d1\u751f\u65f6\u5728\u5199\u5165\u6570\u636e\u5e93\u3002\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\uff0c\u5982\u679cCreationVM\u673a\u5668\u672c\u8eab\u5d29\u6e83\uff0c\u6709\u5bfc\u81f4\u6709\u4e9b\u5c5e\u6027\u6ca1\u6709\u88ab\u5b58\u6863\uff0c\u56e0\u6b64\u4e0b\u6b21\u7528\u6237\u9700\u8981\u91cd\u590d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002\u4f46\u662f\u8fd9\u5e76\u6ca1\u6709\u592a\u5927\u95ee\u9898\uff0c\u6e38\u620f\u73a9\u5bb6\u5df2\u7ecf\u4e60\u60ef\u8fd9\u79cd\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u7684\u673a\u5236\uff0c\u5f53\u7528\u6237\u7ec4\u4ef6\u8fdb\u7a0b\u53d1\u751f\u5d29\u6e83\u65f6\uff0c\u7531\u4e8eCreationVM\u7684\u5b58\u6863\u5c5e\u6027\u5e76\u4e0d\u5305\u542b\u4e00\u4e9b\u4e2d\u95f4\u503c\uff0c\u6240\u4ee5\u6240\u6709\u8fd9\u4e9b\u90fd\u4e0d\u4f1a\u88ab\u5199\u5165\u5230\u6570\u636e\u5e93\u3002\u53cd\u4e4b\uff0cCreationVM\u63a5\u6536\u5230\u5d29\u6e83\u901a\u77e5\u4e4b\u540e\uff0c\u4f1a\u7acb\u5373\u5c06\u4e4b\u524d\u7684\u5b58\u6863\u5c5e\u6027\u5199\u5165\u7684\u6570\u636e\u5e93\uff0c\u5e76\u5199\u5165\u5d29\u6e83\u65e5\u5fd7\u3002\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6\u4e5f\u662f\u540c\u6837\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u8be5\u673a\u5236\u7684\u6210\u529f\u8fd0\u4f5c\u9700\u8981\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u534f\u540c\u5de5\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8981\u4fdd\u8bc1\u5f53\u5bf9\u4e00\u4e2a\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u65f6\uff0c\u4e4b\u524d\u7684\u6240\u6709\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u653e\u5fc3\u5b58\u50a8\u8fd9\u4e9b\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\uff0c\u5982\u679c\u7ec4\u4ef6\u5728\u5b58\u6863\u5c5e\u6027\u7684\u4fee\u6539\u4e4b\u524d\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u90a3\u4e48\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\u5bf9\u5b58\u6863\u5c5e\u6027\u7684\u5199\u5165\u5e94\u8be5\u4e5f\u4e0d\u4f1a\u51fa\u73b0\u95ee\u9898")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u8fd4\u56de\u503c\u5e94\u8be5\u59cb\u7ec8\u4f4d\u4e8e\u51fd\u6570\u7684\u6700\u540e\uff0c\u4e0d\u80fd\u518d\u4e2d\u95f4\u8fd4\u56de\uff0c\u6216\u8005\u5bf9\u8fd4\u56de\u503c\u5bf9\u8c61\u8d4b\u503c\uff0c\u6216\u8005\u5199\u6210\u4ee5\u4e0b\u65b9\u5f0f\u66f4\u597d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\nGlobal.HP = map() {\n ...\n x + y + z\n}\n")),(0,n.kt)("p",null,"\u6700\u540e\u4e00\u4e2a\u5b57\u53e5\u9ed8\u8ba4\u662f\u8fd4\u56de\u503c\uff0c\u4e0d\u9700\u8981return\u5173\u952e\u5b57\uff0c\u5b83\u8fd4\u56de\u7684\u503c\u4f1a\u8d4b\u503c\u7ed9Global.HP\uff0c\u8fd9\u91cc\u4ecd\u7136\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u4f7f\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u53bb\u5173\u5fc3Global.HP\u7684\u5185\u90e8\u7ed3\u6784\u3002\u540c\u65f6\u7701\u6389\u4e86\u4e00\u4e9b\u58f0\u660e\uff0c\u5982\u679c\u8ddf\u8f93\u5165\u53d8\u91cf\u4e00\u6837\u7684\u58f0\u660e\u5f62\u5f0f\u4f1a\u591a\u5199\u4e00\u4e9b\u65e0\u7528\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2224-\u7ec4\u4ef6\u5c5e\u6027"},"2.2.24 \u7ec4\u4ef6\u5c5e\u6027"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".Component(name) //\u7ec4\u4ef6\u6587\u4ef6\u540d\u548c\u540d\u79f0\n.UseDt(true) //\u662f\u5426\u4f7f\u7528dt\u53c2\u6570\uff0c\u4e00\u822c\u7528\u4e8e\u52a8\u753b\u6216\u8005\u8de8\u5e27\u884c\u4e3a\n")),(0,n.kt)("h3",{id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"},"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("p",null,"\u6570\u636e\u548c\u903b\u8f91\u662f\u7a0b\u5e8f\u7684\u4e24\u4e2a\u6700\u57fa\u672c\u5143\u7d20\u548c\u6982\u5ff5\uff0c\u6709\u4e86\u8fd9\u4e24\u4e2a\u57fa\u672c\u5143\u7d20\uff0c\u6211\u4eec\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u7f16\u5199\u4efb\u4f55\u7a0b\u5e8f\u3002"),(0,n.kt)("h4",{id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u65e0\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u5728\u89e3\u51b3\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u6d41\u7684\u4e24\u79cd\u8f6f\u4ef6\u6784\u9020\u601d\u8def\u662f\u9762\u5411\u5bf9\u8c61\u548c\u51fd\u6570\u5f0f\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"},"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"),(0,n.kt)("p",null,"\u53c2\u89c12.7.13.3\u8282\uff0cRealityIS\u4e2d\u7684\u5b9e\u4f53\u5bf9\u8c61\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u5373\u590d\u5408\u51fd\u6570\uff0c\u56e0\u6b64\u5b9e\u4f53\u5bf9\u8c61\u4ece\u6982\u5ff5\u4e0a\u4ec5\u5305\u542b\u903b\u8f91\uff0c\u4e0d\u5305\u542b\u6570\u636e\uff0c\u8fd9\u4e5f\u662f\u7b80\u5316\u7528\u6237\u7ec4\u7ec7\u903b\u8f91\u7684\u5173\u952e\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5373\u7528\u6237\u4e0d\u9700\u8981\u5173\u5fc3\u6570\u636e\uff0c\u5173\u5fc3\u7684\u4ec5\u4ec5\u662f\u529f\u80fd"),"\u3002"),(0,n.kt)("p",null,"\u90a3\u4e48\u6570\u636e\u5728\u54ea\u91cc\uff1f\u4ee5\u53ca\u6570\u636e\u662f\u4ec0\u4e48\u6837\u7684\u6982\u5ff5\uff1f"),(0,n.kt)("p",null,"\u5982\u679c\u8bf4\u6570\u636e\u88ab\u9690\u85cf\u8d77\u6765\uff0c\u5b83\u5728\u54ea\u91cc\u4ee5\u4ec0\u4e48\u5f62\u5f0f\u5b58\u5728\u5462\uff1f\u4ece\u7528\u6237\u5c42\u9762\u6765\u8bb2\uff0c\u8868\u9762\u4e0a\u770b\u6570\u636e\u4ecd\u7136\u662f\u9644\u7740\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u6dfb\u52a0\u4e86\u67d0\u4e2a\u51fd\u6570\u6216\u8005\u590d\u5408\u51fd\u6570\u4e4b\u540e\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c06\u4f1a\u663e\u793a\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7528\u6237\u9700\u8981\u77e5\u6653\u8fd9\u4e9b\u53c2\u6570\u6765\u4e86\u89e3\u51fd\u6570\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u6570\u636e\u672c\u8d28\u4e0a\u662f\u4e0d\u9700\u8981\u7528\u6237\u7ba1\u7406\u7684\uff0cRealityIS\u8ba4\u4e3a\uff0c\u6240\u6709\u6570\u636e\u90fd\u662f\u7528\u6237\u6570\u636e\uff0c\u5373\u6240\u6709\u6570\u636e\u662f\u4e00\u4e2a\u7528\u6237\u7684\u5de8\u5927\u6570\u636e\u8868\uff0c\u5f53\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4ee5\u5b9e\u73b0\u67d0\u4e2a\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5bf9\u8fd9\u4e2a\u5927\u7684\u7528\u6237\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u7684\u67d0\u4e9b\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u548c\u5199\u5165\u6570\u636e\u7684\u64cd\u4f5c\u5219\u7531\u7cfb\u7edf\u5b8c\u6210\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u6570\u636e\uff0c\u90a3\u6837\u5c31\u53d8\u6210\u4f20\u7edf\u7684\u9762\u5411\u6570\u636e\u5e93\u7f16\u7a0b\u7684\u6a21\u5f0f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u6839\u636e\u5bf9\u8c61\u7ec4\u4ef6\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u4ece\u6570\u636e\u5e93\u4e2d\u627e\u51fa\u8fd9\u4e9b\u6570\u636e\uff0c\u5e76\u6309\u7167\u5bf9\u8c61\u7684\u5f62\u5f0f\u5206\u6563\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u5404\u4e2a\u4f4d\u7f6e\uff0c\u6574\u4e2a\u8fd0\u884c\u65f6\u7684\u884c\u4e3a\u5b9e\u9645\u4e0a\u8ddf\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff0c\u66f4\u786e\u5207\u5730\u8bf4ECS\u7684\u5185\u5b58\u5e03\u5c40\u662f\u7c7b\u4f3c\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u770b\u5f85\u548c\u5904\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u662fRealityIS\u4e0e\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u7684\u5de8\u5927\u5dee\u5f02\u3002"),(0,n.kt)("h4",{id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"},"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\\2. \u201c\u6709\u201d\u548c\u201d\u80fd\u201d\u548c\u5b9e\u73b0"),(0,n.kt)("p",{parentName:"blockquote"},"\u5728\u7ec4\u4ef6\u6a21\u578b\u4e2d\uff0c\u5bf9\u8c61\u7531\u7ec4\u4ef6\u7ec4\u6210\uff0c\u6240\u4ee5\u5176\u884c\u4e3a\u4e5f\u7531\u7ec4\u4ef6\u4e3b\u5bfc\uff0c\u4f8b\u5982\u4e00\u4e2a\u5bf9\u8c61\u62e5\u6709","[Movement]"," \u548c ","[Location]","\uff0c\u5219\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u80fd\u591f\u79fb\u52a8\uff0c\u8fd9\u5728\u6574\u4f53\u4e0a\u662f\u5341\u5206\u548c\u8c10\u81ea\u7136\u7684\uff0c\u4f46\u5f53\u6211\u4eec\u4ed4\u7ec6\u8003\u91cf\uff0c\u8fd9\u4e2a",(0,n.kt)("strong",{parentName:"p"},'"\u80fd"'),"\u662f\u7531\u4e8e\u4ec0\u4e48\u5462\uff0c\u662f\u56e0\u4e3a ","[Movement]","\u5417\uff0c\u662f\u56e0\u4e3a","[Location]","\u5417\uff0c\u8fd8\u662f\u540c\u65f6\u56e0\u4e3a ","[Movement]"," \u548c ","[Location]","\uff1f\u5f53\u7136\u662f\u540c\u65f6\uff08\u8fd9\u91cc\u4fbf\u63ed\u793a\u51fa\u4e86\u7ec4\u4ef6\u548c\u63a5\u53e3\u7684\u5c55\u5e73\u5bf9\u8c61\u65b9\u5f0f\u662f\u6b63\u4ea4\u7684\uff09\uff0c\u90a3\u79fb\u52a8\u7684\u903b\u8f91\u653e\u5230\u54ea\u5462\uff1f\u7b54\u6848\u662f\u653e\u5728\u8fd9\u4e2a\u201c\u5207\u7247\u201c\u4e0a\u3002\u4f46\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u4f1a\u770b\u5230\u628a\u903b\u8f91\u653e\u5728 ","[Movement]"," \u4e0a\u7684\u505a\u6cd5\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u90fd\u662f\u53ef\u53d6\u7684\uff0c\u540e\u4e00\u79cd\u62e5\u6709\u8f83\u4e3a\u7b80\u5355\u7684\u5b9e\u73b0\u5e76\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u800c",(0,n.kt)("strong",{parentName:"p"},"\u524d\u4e00\u79cd\u62e5\u6709\u66f4\u7cbe\u51c6\u7684\u8bed\u4e49\uff0c\u66f4\u597d\u7684\u62bd\u8c61"),"\uff08\u540e\u4e00\u79cd\u79cd\u65b9\u5f0f\u4e2d ","[Movement]"," \u53bb\u8bbf\u95ee\u5e76\u4fee\u6539\u4e86 ","[Location]"," \u7684\u6570\u636e\uff0c\u8fd9\u7834\u574f\u4e86\u4e00\u5b9a\u7684\u5c01\u95ed\u6027\uff0c\u4e14\u5f62\u6210\u4e86\u8026\u5408\uff0c\u5f53\u7136\u8fd9\u79cd\u8026\u5408\u4e5f\u6709\u4e00\u5b9a\u7684\u597d\u5904\uff0c\u5982\u907f\u514d\u53ea\u6dfb\u52a0\u4e86 ","[Movement]"," \u8fd9\u79cd\u65e0\u610f\u4e49\u7684\u60c5\u51b5\u53d1\u751f\uff09\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aBenzzZX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://zhuanlan.zhihu.com/p/41652478"},"https://zhuanlan.zhihu.com/p/41652478"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h4",{id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"},"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"),(0,n.kt)("h4",{id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"},"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"),(0,n.kt)("h2",{id:"23-creation-vm"},"2.3 Creation VM"),(0,n.kt)("p",null,"\u8ddf\u5f15\u64ce\u9ad8\u5ea6\u4e00\u4f53\u5316\uff0c\u4e0d\u662f\u72ec\u7acb\u7684\u865a\u62df\u673a"),(0,n.kt)("h3",{id:"231-creation-table-engine"},"2.3.1 Creation Table Engine"),(0,n.kt)("p",null,"Table Engine\u7ef4\u62a4\u4e00\u4e2aDatabase\uff0c\u4e3b\u8981\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u9020\u548c\u5b58\u50a8\u6240\u6709\u57fa\u4e8eData-driven\u7684\u6570\u636e\uff0c\u5305\u62ecComponent\u7684\u6570\u636e\u3001\u4e8b\u4ef6\u5217\u8868\u3001Hierarchical Level\u6570\u636e\u3001\u884c\u4e3a\u6811/\u72b6\u6001\u673a\u7b49\u7ed3\u6784\uff0c\u6240\u6709\u6570\u636e\u90fd\u5df2\u6570\u7ec4\u7684\u5f62\u5f0f\u7ec4\u7ec7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9Table\u6570\u636e\u8fdb\u884c\u65b0\u589e\u3001\u5220\u9664\u3001\u4fee\u6539\u3001\u6392\u5e8f\u7b49\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u9700\u8981\u5ef6\u8fdf\u5230Component\u8fdb\u884c\u540e\u7edf\u4e00\u8fdb\u884c\u5904\u7406\uff0c\u800c\u4e0d\u662f\u7acb\u5373\u5904\u7406\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8eComponent\u7684\u6570\u636e\uff0c\u7531\u4e8e\u6240\u6709\u6570\u636e\u6df7\u5728\u4e00\u8d77\uff0c\u9700\u8981\u6309\u7167ArchType\u8fdb\u884c\u7ec4\u7ec7\u3002\u5e76\u4e14\u5757\u5143\u7d20\u7684\u5927\u5c0f\u8fdb\u884c\u81ea\u52a8\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u63d0\u4f9b\u4e00\u4e9b\u6807\u51c6\u7f16\u7a0b\u6848\u4f8b"),(0,n.kt)("p",null,"\u865a\u62df\u673a\u7684\u8bbe\u8ba1\uff1a"),(0,n.kt)("p",null,"\u5982\u679c\u6570\u636e\u90fd\u662fTable\u7c7b\u578b\u7684\u683c\u5f0f\uff0c\u90a3\u4e48\u52a8\u6001\u9700\u8981\u7684\u865a\u62df\u673a\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u5904\u7406\u539f\u751f\u7c7b\u578b\uff0c\u6240\u6709Table\u6570\u636e\u7684\u5206\u914d\u548c\u7ba1\u7406\u90fd\u4ea4\u7ed9\u7cfb\u7edf\u5c42\uff0c\u8fd9\u6837\u811a\u672c\u9700\u8981\u751f\u6210\u7684\u4ee3\u7801\u4e5f\u4e3a\u201c\u7eaf\u4ee3\u7801\u201d\uff0c\u8fd9\u4e9b\u5b57\u8282\u7801\u5bf9\u5e94\u7684\u64cd\u4f5c\u6570\u5730\u5740\u7684\u5206\u914d\u5219\u4e3aC++\u5c42\u7684\u7f16\u8bd1\u578b\u4ee3\u7801\uff0c\u800c\u4e0d\u662f\u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u907f\u514d\u4e86\u811a\u672c\u8bed\u8a00\u590d\u6742\u7684\u6570\u636e\u5730\u5740\u5206\u914d\uff1a\u4f8b\u5982\u6784\u9020\u865a\u62df\u5bc4\u5b58\u5668\u6216\u8005\u865a\u62df\u6808\uff0c\u4ee5\u53ca\u5bf9\u5e94\u4e3a\u4e86\u6784\u5efa\u865a\u62df\u5bc4\u5b58\u5668\u800c\u6784\u9020\u7684\u7b26\u53f7\u8868\u4ee5\u53ca\u7b26\u53f7\u8868\u7684\u89e3\u91ca\u6620\u5c04\u7b49"),(0,n.kt)("p",null,"\u6240\u6709\u7684\u4ee3\u7801\uff0c\u5728\u865a\u62df\u673a\u8fd9\u4e00\u5c42\u90fd\u662f\u8f6c\u5316\u4e3a\u5bf9table\u7684\u67d0\u79cd\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u5c01\u88c5\u4e3a\u57fa\u7840\u7684C++\u5c42\u7684\u4ee3\u7801\uff0c\u81ea\u52a8\u5c31\u5904\u7406\u4e86\u5185\u5b58\u5730\u5740\u7684\u5206\u914d"),(0,n.kt)("p",null,"\u8981\u62c6\u89e3Table\u7684\u57fa\u672c\u64cd\u4f5c\uff0c\u4e5f\u5c31\u662fSTL\u4e2d\u57fa\u7840Vector\u7684\u57fa\u7840\u6570\u636e\u64cd\u4f5c\uff0c\u5e94\u8be5\u80fd\u591f\u63d0\u70bc\u51fa\u6240\u6709\u53ef\u80fd\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u7136\u540e\u5c01\u88c5\u4e3a\u865a\u62df\u673a\u5c42\u7684\u9ad8\u7ea7\u57fa\u7840\u6307\u4ee4"),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2aTable Library \u5c31\u662f\u4e00\u4e2a\u7c7b\u4f3cSTL\u7684\u5e93\uff0c\u5b83\u5c01\u88c5\u4e00\u4e9b\u7279\u5b9a\u7684Table\u7684\u64cd\u4f5c\u7c7b\u578b\u548c\u64cd\u4f5c\u65b9\u6cd5\uff0c\u9762\u5411\u6570\u636e\u9a71\u52a8\u7684\u6574\u4e2a\u67b6\u6784\uff0c\u65e2\u652f\u6301\u539f\u751fC++\u8c03\u7528\uff0c\u4e5f\u652f\u6301\u865a\u62df\u673a\u57fa\u7840\u6307\u4ee4\u5c01\u88c5\uff0c\u8fd9\u5c31\u597d\u6bd4Lua\u7684\u67d0\u4e9b\u65b9\u6cd5\u7531C\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684C\u64cd\u4f5c\u662f\u66f4\u4f4e\u5c42\u7684\u64cd\u4f5c\uff0c\u5e76\u4e14\u8fd9\u91cc\u7684\u6570\u636e\u7531C\u5b9a\u4e49\u548c\u5206\u914d\uff0c\u800c\u4e0d\u662f\u50cfLua\u4e00\u6837\u7531Lua\u5206\u914d\u518d\u4f20\u7ed9C\uff0c\u6240\u4ee5\u8fd9\u91cc\u811a\u672c\u8bed\u8a00\u7684\u5b9a\u4e49\u8bed\u8a00\u5904\u7406\u7279\u6b8a\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u4f8b\u5982\u811a\u672c\u8bed\u8a00\u4e2d\u5bf9\u53d8\u91cf\u7684\u4f7f\u7528\u90fd\u7ffb\u8bd1\u4e3a\u5bf9C\u5bf9\u8c61\u7684\u4f7f\u7528\uff0c\u6ca1\u6709\u53d8\u91cf\u590d\u5236\uff0c\u6ca1\u6709\u6570\u636e\u53ea\u6709\u6307\u4ee4"),(0,n.kt)("p",null,"\u5982\u679c\u811a\u672c\u8bed\u8a00\u4e2d\u4e0d\u542b\u7ed3\u6784\u58f0\u660e\uff0c\u6216\u8005\u6ca1\u6709\u81ea\u5df1\u7684\u7ed3\u6784\u4f53\uff0c\u53ea\u6709\u7b80\u5355\u53d8\u91cf\uff0c\u90a3\u4e48\u6574\u4e2a\u89e3\u91ca\u8fc7\u7a0b\u662f\u4e0d\u662f\u4f1a\u5feb\u5f88\u591a"),(0,n.kt)("h4",{id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4"},"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5355\u72ec\u7f16\u8bd1\uff0c\u9996\u5148\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u5f97\u662f\u72ec\u7acb\u7684\uff0c\u53e6\u5916\u8fd9\u4e9b\u6570\u636e\u7684\u5e03\u5c40\u5f97\u662f\u56fa\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ec4\u4ef6\u9700\u8981\u8bbf\u95ee\u7684\u6bcf\u4e2a\u53d8\u91cf\uff0c\u4f7f\u7528\u6307\u9488\u7684\u65b9\u5f0f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u8fd9\u610f\u5473\u7740\u865a\u62df\u673a\u9700\u8981\u52a8\u6001\u7ed9\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u6bcf\u4e2a\u5730\u5740\u8d4b\u503c\uff0c\u8fd9\u51e0\u4e4e\u662f\u4e0d\u65e0\u505a\u5230\u7684\uff0c\u56e0\u4e3a\u865a\u62df\u673a\u53ea\u5904\u7406\u89c4\u5219\u7684\u5185\u5bb9\uff0c\u901a\u7528\u6027\u7684\u89c4\u5219\uff0c\u4f46\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u786e\u5b9e\u4e0d\u4e00\u6837\u7684\uff0c\u9664\u975e\u662f\u89e3\u91ca\u5668\u6216\u8005\u865a\u62df\u673a\u81ea\u5df1\u5206\u914d\u7684\u5185\u5b58\uff0c\u4f46\u662f\u8fd9\u91cc\u4e00\u4e2a\u5b9e\u4f53\u7684\u7ec4\u4ef6\u7684\u6570\u636e\u4e0d\u662f\u7531\u7ec4\u4ef6\u4ee3\u7801\u81ea\u5df1\u5206\u914d\u7684\uff08\u4f60\u5982\u4f20\u7edf\u7684\u5bc4\u5b58\u5668\u5bfb\u5740\uff0c\u5c31\u662f\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u76f4\u63a5\u9488\u5bf9\u4ee3\u7801\u8bbe\u7f6e\u597d\u5bc4\u5b58\u5668\u5730\u5740\uff09\uff0c\u800c\u662f\u7531Creation Table\u81ea\u5df1\u5206\u914d\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u79cd\u5206\u79bb\uff0c\u7ec4\u597d\u7684\u65b9\u5f0f\u5c31\u662f\u5c06\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u653e\u5728\u4e00\u4e2a\u8fde\u7eed\u7684\u5185\u5b58\u5730\u5740\u4e2d\uff0c\u7136\u540e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u673a\u53ea\u8981\u52a8\u6001\u5c06\u8d77\u59cb\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u89c4\u5219\u662f\u901a\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u5668\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u5bfb\u5740\u8f6c\u6362\u4e3a\u57fa\u4e8e\u76f8\u5bf9\u4f4d\u7f6e\u7684\u5bfb\u5740")),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u865a\u62df\u673a\u4e2d\u6267\u884c\u51fd\u6570\u8c03\u7528\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u91c7\u7528\u6808\u5f0f\u65b9\u6cd5\uff0c\u6240\u6709\u51fd\u6570\u9700\u8981\u8bbf\u95ee\u7684\u53d8\u91cf\u5b58\u50a8\u5728\u4e00\u4e2a\u6808\u4e2d\uff0c\u51fd\u6570\u6309\u7d22\u5f15\u5bf9\u6808\u4e2d\u7684\u5185\u5b58\u8fdb\u884c\u8bbf\u95ee\u3002"),(0,n.kt)("h4",{id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"},"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u53ea\u6709\u7ec4\u4ef6\u7c7b\u578b\uff0c\u7ec4\u4ef6\u53ea\u6709\u6570\u636e\uff0c\u6ca1\u6709\u65b0\u7684\u7ed3\u6784\u4f53\u5b9a\u4e49"),"\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u6709\u4e00\u5b9a\u7684\u57fa\u7840\u6570\u636e\u7ed3\u6784\uff0c\u4f46\u662f\u5176\u4ed6\u7684\u6570\u636e\u7ed3\u6784\u5747\u6709\u7ec4\u4ef6\u7684\u6570\u636e\u5b9a\u4e49\u9690\u5f0f\u51b3\u5b9a\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7c7b\u578b\u5b9a\u4e49\u5728\u811a\u672c\u8bed\u8a00\u4e2d\uff0c\u5e76\u4e14\u662f\u6309\u7167\u5355\u4e2a\u7ec4\u4ef6\u7684\u7c7b\u578b\u8fdb\u884c\u5b9a\u4e49\u7684\uff0c\u5373AOS\uff08array of struct\uff09\uff0c\u4e24\u4e2a\u539f\u56e0 \uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u5e76\u4e0d\u5229\u4e8e\u9ad8\u6027\u80fd \u8ba1\u7b97\uff0c\u9ad8\u6027\u80fd\u8ba1\u7b97\u9700\u8981\u662fSOA\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u5e95\u5c42\u865a\u62df\u673a\u5e76\u4e0d\u4e86\u89e3\u7ec4\u4ef6\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5bfc\u81f4\u4e0d\u80fd\u52a8\u6001\u6784\u9020\u5bf9\u8c61\uff1b\u56e0\u6b64\u9700\u8981\u5728\u811a\u672c\u8bed\u8a00\u5c42\u9762\u76f4\u63a5\u6784\u9020\u5bf9\u8c61\uff0c\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u5c31\u9700\u8981\u5b9e\u73b0\u590d\u6742\u5bf9\u8c61\uff0c\u53ca\u5176\u76f8\u5e94\u7684\u5783\u573e\u56de\u6536\u673a\u5236\uff1b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0cUnity\u4f7f\u7528\u4e86\u79bb\u7ebf\u7f16\u8bd1\u7684\u65b9\u5f0f\uff0c\u5c06\u7ec4\u4ef6\u6570\u636e\u7684\u6784\u9020\u8f6c\u6362\u6210\u4e86\u53e6\u5916\u67d0\u79cd\u5f62\u5f0f\u7684\u4e2d\u95f4\u4ee3\u7801\uff1b\u8fd9\u6837\u4f7f\u5f97\u53ef\u4ee5SOA\u7684\u5f62\u5f0f\u8fdb\u884c \u6570\u636e\u7ba1\u7406\uff0c\u4f46\u662f\u5b83 \u53ef\u80fd\u4e0d\u652f\u6301\u52a8\u6001\u66f4\u65b0\uff0c\u6216\u8005\u81f3\u5c11\u9700\u8981\u52a8\u6001\u66f4\u65b0\u6574\u4e2a\u7f16\u8bd1\u540e\u7684\u4e2d\u95f4\u4ee3\u7801\uff1f"),(0,n.kt)("p",null,"\u5f53CTE\u8bd5\u56fe\u5c06 \u4e0a\u8ff0\u8fc7\u7a0b\u653e\u5230\u8fd0\u884c\u65f6\u52a8\u6001\u89e3\u6790\u65f6\uff0c\u6027\u80fd\u662f\u9700\u8981\u91cd\u70b9\u8003\u8651 \u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u7eafA OS->SOA\u7684\u5f00\u9500"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5f53\u573a\u666f\u4e2d\u6709 \u5927\u91cf\u5bf9\u8c61\u65f6 \uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u7684\u6570\u636e\u5173\u7cfb\u7b49\u7b49\u7684\u5224\u65ad\u53ef\u80fd\u4f1a\u975e\u5e38 \u6d88\u8017\u65f6\u95f4")),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u597d\u597d\u5212\u5206\u9636\u6bb5\uff0c\u5e76\u628a\u90e8\u5206\u6570\u636e\u662f\u5426\u53ef\u4ee5\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2aCreation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u786e\u5b9a\u5b83\u5f15\u7528\u7684\u6240\u6709\u53d8\u91cf\u53ca\u5176\u7ec4\u5408\u5173\u7cfb\uff0c\u8fd9\u90e8\u5206\u662f\u5426\u53ef\u4ee5\u9884\u8ba1\u7b97\u6210 \u67d0\u79cd\u683c\u5f0f\uff0c\u5373\u662f\u8ba1\u7b97ArchType\u7684\u65f6\u95f4\uff0c\u8fd9\u4e9b\u53ef\u4ee5 \u5728\u4e91\u7aef\u4e0b\u8f7d \u8d44\u6e90 \u7684 \u65f6\u5019\u8ba1\u7b97 \u597d\uff0c\u4e0b\u8f7d\u65f6\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd0\u884c\u65f6\u9996\u5148\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u5173\u7cfb\u521d\u59cb\u5316\u6570\u7ec4"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6d89\u53ca\u7528\u6237\u5728\u7aef\u4fa7\u7f16\u8f91\u6570\u636e\uff0c\u5219\u9488\u5bf9\u6bcf\u4e2a\u5bf9\u8c61\u52a8\u6001\u4fee\u6539 \uff0c\u4f46\u6b64\u65f6\u5e94\u8be5\u4e0d\u4f1a\u592a\u5f71\u54cd\u6027\u80fd\u3002")),(0,n.kt)("p",null,"\u56e0\u4e3a\u8fd9\u79cdAOS->SOA\u7684\u8f6c\u6362\uff0c\u4f7f\u5f97\u4e0a\u5c42\u811a\u672c\u8bed\u8a00\u5b9a\u4e49\u7684\u5bf9\u8c61\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e0a\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u4ece\u800c\u51cf\u5c11\u811a\u672c\u5c42\u9762\u7684\u590d\u6742\u5ea6\uff0c\u5e76\u4f7f\u5f97\u539f\u751f\u8bed\u8a00 \u7ba1\u7406\u5bf9\u8c61\u6027\u80fd\u66f4\u9ad8\u6548\u3002\u800c\u8fd9\u79cd\u8f6c\u6362\u673a\u5236\u80cc\u540e\u7684\u6838\u5fc3\u56e0\u7d20\u662f\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u89e3\u91ca\u5668\u52a8\u6001\u8bc6\u522b\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e76\u4ece\u4e2d\u63d0\u53d6\u5c5e\u6027\u53ca\u5176\u7b26\u53f7")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4ee5\u53ca\u5e95\u5c42ECS\u7684\u673a\u5236\u5c06\u8fd9\u4e9b\u5c5e\u6027\u8f6c\u6362\u4e3aSOA\u6570\u7ec4\uff0c\u7531\u4e8e\u6574\u4e2aCTE\u90fd\u662f\u5df2\u77e5\u57fa\u7840\u6570\u636e\u7c7b\u578b\u7684\u6570\u7ec4\uff0c\u6240\u4ee5\u95f4\u63a5\u5730\u4e0d\u9700\u8981\u5173\u6ce8\u4e0a\u5c42 \u811a\u672c\u5b9e\u9645\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6bcf\u4e2a\u5143\u7d20\u6309\u7167\u7d22\u5f15\u8fdb\u884c\u5bfb\u5740\u5373\u53ef\u3002"))),(0,n.kt)("p",null,"\u6574\u4e2aTable\u4e2d\u6ca1\u6709\u4efb\u4f55\u672a\u77e5Struct\u5bf9\u8c61\uff0c\u6240\u8c13\u672a\u77e5\u5373\u662f\u7528\u6237\u5b9a\u4e49\u7684struct\u3002\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u5c31\u662f\u89e3\u91ca\u5668\u52a8\u6001\u5bf9\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\u8fdb\u884c\u91cd\u65b0\u6620\u5c04\uff0c\u901a\u8fc7\u6570\u7ec4\u7d22\u5f15+\u57fa\u7840\u53d8\u91cf\u7c7b\u578b\uff0c\u5c31\u80fd\u8ba1\u7b97\u51fa\u6b63\u786e\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002\u56e0\u4e3a\u6570\u636e\u5728\u5185\u5b58\u4e2d\u662f\u6ca1\u6709struct\u7684\u6982\u5ff5\u7684\uff0cstruct\u7684\u4f5c\u7528\u5728\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u6216\u8005\u89e3\u91ca\u5668\u8ba1\u7b97\u5185\u5b58\u4e2d\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u6211\u4eec\u4e0d\u80fd\u652f\u6301\u7528\u6237\u7aef\u81ea\u5b9a\u4e49struct\uff0c\u5426\u5219\u865a\u62df\u673a\u65e0\u6cd5\u8bc6\u522b\uff0c\u5c31\u9700\u8981\u590d\u6742\u7684\u673a\u5236\u6765\u8bc6\u522b\u7ed3\u6784\u4f53\u3002\u7531\u4e8e\u6e38\u620f\u7684\u7279\u6b8a\u6027\uff1a\u5b83\u80fd\u591f\u5c06\u6240\u6709\u6570\u636e\u901a\u8fc7ECS\u7684\u673a\u5236\u8f6c\u5316\u4e3aTable\uff0c\u6240\u4ee5\u6211\u4eec\u6709\u5c31\u4f1a\u53bb\u9664\u6389\u7ed3\u6784\u4f53\u6216\u8005\u76f8\u5173\u7684\u7c7b\u578b\u89e3\u6790\uff0c\u53d8\u6210\u66f4\u7b80\u5355\u7684\u7d22\u5f15\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u8003\u8651\u6027\u80fd\uff0c\u8fd9\u91cc\u53ef\u80fd\u9700\u8981\u8003\u8651AOT\u7684\u673a\u5236\uff0c\u5373\u63d0\u524d\u5c06\u7d22\u5f15\u7684\u8ba1\u7b97\u8f6c\u5316\u4e3a\u4e2d\u95f4\u5f62\u5f0f\uff0c\u4e0d\u7136\u6bcf\u6b21\u8981\u901a\u8fc7\u865a\u62df\u673a\u4e2d\u7684\u7d22\u5f15\u6620\u5c04\u65b9\u6cd5\u6765\u52a8\u6001\u8ba1\u7b97\u7d22\u5f15\uff0c\u6027\u80fd\u5f00\u652f\u5c31\u4f1a\u6bd4\u8f83\u5927\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u4e2a\u7d22\u5f15\u662f\u8ddf\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u76f8\u5173\u8054\u7684\uff0c\u6240\u4ee5\u9700\u8981\u5728\u5bf9\u8c61\u7684\u521b\u5efa/\u4fee\u6539/\u5220\u9664\u7b49\u73af\u8282\u8fdb\u884c\u91cd\u65b0\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406"},"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*"),(0,n.kt)("p",null,"\u5c3d\u7ba1Table\u4e2d\u7684\u6570\u636e\u5728\u4e0d\u65ad\u53d8\u5316\uff0c\u4f46\u662f\u8fd9\u90e8\u5206\u7684\u53d8\u5316\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8ddf\u5783\u573e\u56de\u6536\u7684\u601d\u8def\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u6bb5\u8fde\u7eed\u7684\u5185\u5b58\u4e0d\u591f\u65f6\uff0c\u9700\u8981\u91cd\u65b0\u5ea6\u6570\u636e\u7684\u5e03\u5c40\u8fdb\u884c\u8c03\u6574"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u5199\u5bf9\u8c61\u4e0d\u518d\u4f7f\u7528\u65f6\uff0c\u5783\u573e\u56de\u6536\u5668\u53ef\u80fd\u9700\u8981\u5bf9\u67d0\u6bb5\u5185\u5b58\u6570\u636e\u8fdb\u884c\u64e6\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u8bb0\u5f55\u5bf9\u8c61\u4e4b\u95f4\u7684\u7d22\u5f15\uff0c\u5173\u7cfb\u7b49\u7b49")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u90e8\u5206\u601d\u60f3\u53ef\u4ee5\u53c2\u8003\u5783\u573e\u56de\u6536\u7684\u4e00\u4e9b\u601d\u60f3\u548c\u7b97\u6cd5\u3002"),(0,n.kt)("h3",{id:"232-addremove"},"2.3.2 Add\u3001Remove"),(0,n.kt)("p",null,"\u5bf9\u6570\u7ec4\u7684\u64cd\u4f5c\u4e00\u822c\u7531Component\u53d1\u8d77\uff0c\u4f46\u662f\u4e0d\u80fd\u7acb\u5373\u5bf9Table\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u4e3a\u5176\u4ed6Component\u6b63\u5728\u8bbf\u95ee\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u4e9b\u4fee\u6539\u9700\u8981\u5ef6\u8fdf\u5230Component\u548c\u5176\u4ed6\u64cd\u4f5c\u6267\u884c\u5b8c\u6bd5\uff0c\u9700\u8981\u4f7f\u7528\u8bf8\u5982\u7f13\u5b58\u961f\u5217\u4e4b\u7c7b\u7684\u67b6\u6784\u3002\u539f\u5219\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u7ec4\u7ed3\u6784\u7684\u4fee\u6539\u9700\u8981\u5355\u72ec\u4e0d\u7406\uff0c\u4e0d\u80fd\u5f71\u54cd\u5f53\u524d\u64cd\u4f5c")),(0,n.kt)("h3",{id:"233-change-driven-update"},"2.3.3 Change-driven Update"),(0,n.kt)("p",null,"\u5728\u6bcf\u4e00\u5e27\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u901a\u5e38\u505a\u4e09\u79cd\u7c7b\u578b\u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u505a\u4efb\u4f55\u5224\u65ad\uff0c\u628a\u6574\u4e2a\u903b\u8f91\u5b8c\u6574\u6267\u884c\u4e00\u904d\uff0c\u54ea\u6015\u5176\u4e2d\u6d89\u53ca\u7684\u6570\u636e\u6ca1\u6709\u4efb\u4f55\u53d8\u5316\uff08\u56e0\u6b64\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u4efb\u4f55\u53d8\u5316\uff09\uff0c\u8fd9\u79cd\u8ba1\u7b97\u7b56\u7565\u662f\u975e\u5e38\u6d6a\u8d39\u7684\uff0c\u4f46\u662f\u5b83\u786e\u662f\u7ba1\u7406\u6210\u672c\u6700\u4f4e\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u7c7b\u578b\u5305\u542b\u903b\u8f91\u5224\u65ad\uff0c\u56e0\u6b64\u4e00\u90e8\u5206\u8ba1\u7b97\u6307\u4ee4\u96c6\u4e8e\u67d0\u4e9b\u5c5e\u6027\u503c\u7684\u4e0d\u540c\u53ef\u80fd\u4e0d\u4f1a\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u7c7b\u662f\u5305\u542b\u4e00\u4e9b\u9700\u8981\u8de8\u8d8a\u591a\u5e27\u6267\u884c\u7684\u903b\u8f91\uff0c\u4f8b\u5982\u52a8\u753b\uff0c\u5b83\u4eec\u901a\u5e38\u53ea\u6267\u884c\u4e00\u6bb5\u8fde\u7eed\u7684\u65f6\u95f4\uff0c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7531\u4e8e\u5c5e\u6027\u6570\u636e\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u5b83\u9700\u8981\u50cf\u7b2c\u4e00\u79cd\u65b9\u5f0f\u4e00\u6837\u5b8c\u6574\u6267\u884c\uff1b\u4f46\u662f\u4e00\u65e6\u8fd9\u6bb5\u65f6\u95f4\u7ed3\u675f\uff0c\u5b83\u53ef\u80fd\u5c31\u4e0d\u518d\u9700\u8981\u88ab\u6267\u884c\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u548c\u7b2c\u4e8c\u79cd\u7c7b\u578b\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e00\u79cd\uff0c\u56e0\u4e3a\u5982\u679c\u6240\u6709\u8f93\u5165\u6570\u636e\u90fd\u4e0d\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u7406\u8bba\u4e0a\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u53d8\u5316\uff0c\u56e0\u6b64\u53ef\u4ee5\u4e0d\u7528\u6267\u884c\u3002\u7406\u8bba\u4e0a\u7b2c\u4e00\u79cd\u60c5\u51b5\u53ef\u4ee5\u628a\u67d0\u4e9b\u5c5e\u6027\u6570\u636e\u4f5c\u4e3a\u5224\u65ad\u6761\u4ef6\uff0c\u7136\u540e\u7b2c\u4e00\u79cd\u60c5\u51b5\u5c31\u53d8\u4e3a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u3002\u5bf9\u4e8e\u8fd9\u4e24\u79cd\u60c5\u51b5\uff0c\u4e5f\u6709\u53ef\u80fd\u5224\u65ad\u6761\u4ef6\u4f1a\u5305\u542b\u591a\u4e2a\uff0c\u56e0\u6b64\u6839\u636eECS\u7684\u601d\u8def\u53ef\u4ee5\u62c6\u5206\uff0c\u81f3\u5c11\u62c6\u5206\u6210\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u4e2a\u5224\u65ad\u6761\u4ef6\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u79cd\u5224\u65ad\u6761\u4ef6\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u628a\u8fd9\u4e2a\u5224\u65ad\u6761\u4ef6\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u89c2\u5bdf\u503c\uff0c\u53ea\u6709\u8fd9\u4e2a\u503c\u53d1\u751f\u53d8\u5316\u65f6\u624d\u9700\u8981\u5b8c\u6574\u6267\u884c\u6574\u4e2a\u7ec4\u4ef6\u7684\u903b\u8f91\u3002\u8fd9\u5c31\u662fChange-driven update\u7684\u6838\u5fc3\u601d\u8def\u3002\u5f53\u7136\u5904\u4e8e\u7b80\u5355\uff0c\u6211\u4eec\u53ea\u5224\u65ad\u503c\u662f\u5426\u53d1\u751f\u53d8\u5316\uff0c\u800c\u4e0d\u662f\u68c0\u6d4b\u66f4\u5177\u4f53\u7684\u6761\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u6761\u4ef6\u662f\u53d8\u91cfa\u5927\u4e8e10\uff0c\u90a3\u4e48a\u75313\u53d8\u62104\u4e5f\u662f\u89e6\u53d1\u903b\u8f91\u66f4\u65b0\u3002\u4f46\u662f\u5c06\u903b\u8f91\u5224\u65ad\u9644\u52a0\u5230\u5c5e\u6027\u503c\u4e0a\u5219\u4f1a\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u8fd9\u5bf9\u4e8e\u4e00\u4e9b\u5305\u542b\u590d\u6742\u8ba1\u7b97\u6216\u8005\u6d89\u53ca\u8f83\u5927\u6570\u636e\u52a0\u8f7d\u7684\u7ec4\u4ef6\u90fd\u662f\u975e\u5e38\u6709\u76ca\u7684\u3002\u800c\u4e14\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bb2\u4e5f\u4e0d\u7b97\u590d\u6742\uff0c\u53ef\u80fd\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u72b6\u6001\u53d8\u91cf\uff0c\u5e76\u77e5\u9053\u8fd9\u51e0\u4e2a\u53d8\u91cf\u9700\u8981\u68c0\u6d4b\u5373\u53ef\u3002\u5f53\u7136\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5224\u65ad\u662f\u5426\u8fd9\u4e9b\u503c\u7684\u53d8\u5316\u80fd\u5b8c\u5168\u51b3\u5b9a\u6216\u8986\u76d6\u6574\u4e2a\u903b\u8f91\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u53ea\u6709\u4fee\u6539\u8fc7\u7684\u6570\u636e\u624d\u4f1aUpdate"),(0,n.kt)("h4",{id:"2331-\u7406\u8bba\u57fa\u7840"},"2.3.3.1 \u7406\u8bba\u57fa\u7840"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7406\u8bba\u4e0a\u662f\u4e00\u4e2a\u7eaf\u51fd\u6570\uff0c\u5373\u5982\u679c\u8f93\u5165\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8f93\u51fa\u4e5f\u4e0d\u4f1a\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76d1\u6d4b\u8f93\u5165\uff0c\u53ea\u8981\u8f93\u5165\u7684\u503c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5bf9\u5176\u76f8\u5173\u7684\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5f53\u7136\u8fd9\u91cc\u52a8\u753b\u662f\u4e2a\u4f8b\u5916\uff0c\u4ee5\u53ca\u4e00\u4e9b\u81ea\u884c\u5b9a\u4e49\u8de8\u5e27\u8ba1\u7b97\u903b\u8f91\u7684\u7ec4\u4ef6"),"\uff0c\u6240\u4ee5\u8fd9\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u7684\u5c5e\u6027\u8fdb\u884c\u8bbe\u7f6e\uff0c\u8981\u6c42\u662f\u5426\u5bf9\u8f93\u5165\u8fdb\u884c\u76d1\u6d4b\uff0c\u4ee5\u9a71\u52a8\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".ChangedDriven(True)\n")),(0,n.kt)("p",null,"\u5f53\u7136\u53c2\u89c12.2.3.3\u8282\u53ef\u89c1\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u6240\u6709\u8de8\u5e27\u72b6\u6001\u770b\u505a\u662fdt\u7684\u51fd\u6570\uff0c\u9700\u8981\u5728\u6bcf\u5e27\u8fdb\u884c\u91cd\u590d\u8ba1\u7b97\uff0c\u6240\u4ee5\u7ec4\u4ef6\u51fd\u6570\u672c\u8eab\u4ecd\u7136\u662f\u7eaf\u51fd\u6570\uff0c\u8fd9\u91cc\u5b9e\u8d28\u4e0a\u662f\u5c06dt\u4e5f\u770b\u505a\u4e86\u4e00\u4e2a \u8f93\u5165\u53c2\u6570\uff0c\u800c\u5176\u4ed6\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u4e0d\u4f1a\u4f7f\u7528\u7ec4\u4ef6\u53c2\u6570\u7684\u3002\u6240\u4ee5\u8fd9\u91cc\u5c06\u7ec4\u4ef6\u5c5e\u6027\u540d\u6539\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".UseDt(True)\n")),(0,n.kt)("p",null,"\u53ef\u80fd\u66f4\u5408\u9002\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u8fd9\u91cc\u8868\u9762\u4e0a\u770b\uff0c\u597d\u50cf\u53ef\u4ee5\u901a\u8fc7\u51fd\u6570\u662f\u5426\u5f15\u7528dt\u8fdb\u884c\u81ea\u52a8\u63a8\u5bfc\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u4f8b\u5982\u51fd\u6570\u53ea\u662f\u4f7f\u7528dt\u6765\u751f\u6210\u968f\u673a\u6570\uff0c\u5e76\u4e0d\u662f\u8ba1\u7b97\u8de8\u5e27\u72b6\u6001\u3002\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4e0d\u80fd\u5bf9dt\u7684\u4f7f\u7528\u6709\u4efb\u4f55\u5047\u8bbe\u3002")),(0,n.kt)("h4",{id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6"},"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6"),(0,n.kt)("p",null,"\u603b\u7684\u539f\u5219\uff0c\u8f93\u5165\u53d8\u5316\u4e86\u624d\u4f1a\u5bfc\u81f4\u7ec4\u4ef6\u6267\u884c\u8fd9\u4ef6\u4e8b\u60c5\u662f\u4e0d\u9700\u8981\u8ba9\u5f00\u53d1\u8005\u611f\u77e5\u7684\uff0c\u66f4\u4e0d\u5e94\u8be5\u9700\u8981\u5b83\u6765\u63a7\u5236\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u662f\u5b8c\u5168\u80fd\u591f\u8ba1\u7b97/\u63a8\u5bfc\u51fa\u8fd9\u4e00\u5207\u7684\u3002\u5f53\u7136\uff0c\u52a8\u753b\u9664\u5916\uff0c\u6216\u8005\u66f4\u786e\u5207\u5730\u8bf4\uff0c\u662f\u90a3\u4e9b\u4e0d\u4f9d\u8d56\u4e8e\u8f93\u5165\uff0c\u800c\u81ea\u884c\u5b9a\u4e49\u4e86\u79c1\u6709\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u6240\u4ee5\u5b9a\u4e49\u79c1\u6709\u53d8\u91cf\uff0c\u5176\u76ee\u7684\u5c31\u662f\u5728\u76f8\u540c\u7684\u8f93\u5165\u4e0b\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u5c31\u662f\u4f20\u7edfOOP\u4e2d\u72b6\u6001\u7684\u5f71\u54cd\u3002\u53c2\u89c12.2.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u5728Bevy\u4e2d\uff0c\u5b83\u4f9d\u8d56\u4e8e\u7531\u7a0b\u5e8f\u5458\u51b3\u5b9a\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5426\u5bf9\u67d0\u4e2aComponent\u9020\u6210\u4e86\u4fee\u6539\uff0c\u4ed6\u9700\u8981\u6bcf\u4e2a\u7ec4\u4ef6\u4f7f\u7528mut\u5173\u952e\u5b57\u7684\u67e5\u8be2\uff0c\u8fd9\u6837\u7cfb\u7edf\u5c31\u53ef\u4ee5\u5224\u65ad\u5176\u503c\u662f\u5426\u53ef\u80fd\u88ab\u4fee\u6539\uff0c\u4f46\u662f\u4e0d\u53ef\u4fee\u6539\u7684\u901a\u5e38\u662f\u5c11\u6570\u3002"),(0,n.kt)("p",null,"\u8ddfUnity\u4e0d\u4e00\u6837\uff0c\u6211\u4eec\u4e0d\u80fd\u628aVersion Number\u66b4\u9732\u5728Query\u4e2d\u8ba9\u5f00\u53d1\u8005\u53bb\u6bd4\u8f83\uff0c\u56e0\u4e3a\u8fd9\u672c\u53ef\u4ee5\u81ea\u52a8\u8fdb\u884c\u7684\u3002\u4f55\u51b5\u5728Query\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u4ecd\u7136\u8fdb\u53bb\u4e86\uff0c\u53ea\u662f\u8fdb\u53bb\u4e4b\u540e\u624d\u53d1\u73b0\u4e0d\u9700\u8981\u8ba1\u7b97\u3002\u8fd9\u4e2a\u5224\u65ad\u7684\u56fa\u5b9a\u7ed3\u6784\u5b8c\u5168\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u53bb\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,"CreationVM\u8fd0\u884c\u65f6\u9700\u8981\u5bf9\u6bcf\u4e2a\u5757\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5982\u679c\u53d1\u73b0\u6ca1\u6709\u4fee\u6539\u5e76\u4e14\u4e0d\u662f\u52a8\u753b\u7c7b\u578b\u7684\uff0c\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a"},"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a"),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u5197\u4f59\u7684\u5b58\u5728\uff0c\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u5f53\u8f93\u5165\u53d1\u751f\u6539\u53d8\u7684\u65f6\u5019\u624d\u8fdb\u884c\u8ba1\u7b97\uff0c\u53ef\u80fd\u4f1a\u5b58\u5728\u5927\u91cf\u91cd\u590d\u8ba1\u7b97\u3002\u6b64\u5916\uff0c\u5373\u4f7f\u662f\u4e0d\u540c\u7684\u8f93\u5165\uff0c\u4e5f\u53ef\u80fd\u5b58\u5728\u76f8\u540c\u7684\u8f93\u51fa\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u4e0d\u80fd\u50cfUnity/Bevy\u90a3\u6837\u4ec5\u51ed\u7ec4\u4ef6\u662f\u5426\u5bf9\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u6765\u8fdb\u884c\u5224\u65ad\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5199\u64cd\u4f5c\u8fd9\u79cd\u903b\u8f91\u662f\u4e0d\u53d8\u7684\uff0c\u610f\u5473\u7740\u5982\u679c\u5b58\u5728\u5927\u91cf\u7684\u6d6a\u8d39\uff0c\u90a3\u4e48\u8fd9\u79cd\u6d6a\u8d39\u4f1a\u4e00\u76f4\u6301\u7eed\uff0c\u8fd9\u672c\u8eab\u662f\u4e00\u79cd\u7ed3\u6784\u6027\u7279\u5f81\uff0c\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u62c9\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bcf\u4e2a\u503c\u8fdb\u884c\u5224\u522b\u6765\u51b3\u5b9a\u5176\u5c5e\u6027\u662f\u5426\u53d1\u751f\u53d8\u66f4\uff0c\u4f46\u7531\u4e8e\u7ec4\u4ef6\u5904\u5728\u5e76\u884c\u8ba1\u7b97\u4e2d\uff0c\u4e0d\u80fd\u7edf\u4e00\u5bf9\u4e00\u4e2a\u5757\u8bbe\u7f6e\u4e00\u4e2aisChanged\u53d8\u91cf\uff0c\u4e3a\u4e86\u907f\u514d\u5bf9\u5171\u4eab\u53d8\u91cf\u7684\u5199\u64cd\u4f5c\uff0c\u9700\u8981\u4f7f\u7528\u548c\u7ec4\u4ef6\u6570\u636e\u4e00\u6837\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u53ef\u4ee5\u9488\u5bf9\u6bcf\u4e2a\u5757\u4e2d\u7684\u6bcf\u4e2a\u53ef\u5199\u5c5e\u6027\u8bbe\u7f6e\u4e00\u4e2a\u901a\u7528\u7684\u6574\u6570\u6570\u7ec4\uff0c\u5f53\u7136\u8fd8\u662fSOA\u7684\u5f62\u5f0f\uff0c\u4f7f\u5f97\u5b83\u4eec\u597d\u50cf\u7ec4\u4ef6\u7684\u53e6\u5916\u4e00\u4e2a\u5c5e\u6027\uff0c\u53ea\u662f\u8fd9\u4e2a\u5c5e\u6027\u662f\u7531\u5757\u8fdb\u884c\u7ba1\u7406\u7684\uff0c\u800c\u5b9e\u4f53\u6216\u8005\u7ec4\u4ef6\u662f\u611f\u77e5\u4e0d\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u51fd\u6570\u5bf9\u8f93\u5165\u503c\u8fdb\u884c\u5199\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u7f16\u8bd1\u5668\u4f1a\u81ea\u52a8\u4e3a\u673a\u5668\u7801\u52a0\u5165\u4e00\u6bb5\u51fd\u6570\uff0c\u8fd9\u7aef\u51fd\u6570\u5176\u5b9e\u505a\u4e86\u4e00\u4e2a\u5224\u65ad\uff1a\u5982\u679c\u8d4b\u503c\u7684\u503c\u4e0e\u539f\u6765\u7684\u503c\u4e0d\u4e00\u6837\uff0c\u5219\u5bf9\u5e94\u5b9e\u4f53\u5bf9\u8c61\u5bf9\u5e94\u7684\u503c\u4e3a1\uff0c\u5426\u5219\u4e3a 0\u3002\u6240\u4ee5\u6bd4\u5982\u4e00\u4e2a\u5305\u542b8\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u7684\u5757\uff0c\u5176\u8ba1\u7b97\u5b8c\u4e4b\u540e\u7684\u503c\u5982\u679c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u5219\u503c\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"00000000\n")),(0,n.kt)("p",null,"\u5982\u679c\u5176\u4e2d\u7684\u4efb\u4f55\u503c\u4e3a1\uff0c\u5219\u610f\u5473\u7740\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u6240\u6709\u540e\u7eed\u4f9d\u8d56\u4e8e\u8be5\u5c5e\u6027\u7684\u7ec4\u4ef6\u90fd\u5e94\u8be5\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5bf9\u5e94\u7684\u8c03\u5ea6\u5668\u5e94\u8be5\u628a\u8fd9\u4e2a\u6539\u53d8\u7684\u72b6\u6001\u4f20\u9012\u7ed9\u6240\u6709\u5f15\u7528\u8be5\u5c5e\u6027\u7684\u5757\u3002\u7136\u540e\u5728\u8fd9\u4e9b\u5757\u8ba1\u7b97\u7684\u65f6\u5019\uff0c\u9996\u5148\u8fdb\u884c\u5224\u65ad\uff0c\u9664\u975e\u6240\u6709\u503c\u90fd\u4e3a0\uff0c\u5426\u5219\u6574\u4e2a\u5757\u90fd\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u5757\u53ea\u9700\u8981\u4fdd\u5b58\u4e00\u4e2a\u6570\u5b57\uff0c\u901a\u8fc7\u4f7f\u7528\u7279\u6b8a\u7684\u5bf9\u4f4d\u8fdb\u884c\u64cd\u4f5c\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u6211\u4eec\u751a\u81f3\u6bcf\u4e2a\u5bf9\u8c61\u53ea\u9700\u8981\u5360\u7528\u4e00\u4e2abit\u7684\u5b58\u50a8\uff0c\u8fd9\u4e2a\u5927\u5c0f\u8ddfUnity DOTS\u7684Version Number\u5360\u7528\u7684\u5b58\u50a8\u5dee\u4e0d\u591a\uff0c\u4f46\u662f\u5176\u539f\u7406\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u5e76\u4e14\u57fa\u4e8e\u503c\uff08\u800c\u4e0d\u662f\u903b\u8f91\uff09\u7684\u6bd4\u8f83\u66f4\u53ef\u9760\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u7684\u9002\u914d\uff0c\u6027\u80fd\u5f00\u9500\u4e5f\u51e0\u4e4e\u53ef\u4ee5\u7701\u7565\u3002"),(0,n.kt)("h4",{id:"2334-version--tracking"},"2.3.3.4 Version Tracking"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"version-tracking",src:l(2150).Z,width:"2360",height:"1318"})),(0,n.kt)("p",null,"Change tracking is a hard problem to solve efficiently and robustly. It\u2019s easier to make it a responsibility of the content creators. They define what is static and what is dynamic. Unity doesn\u2019t want to add complexity to content creators."),(0,n.kt)("p",null,"Fortunately the DOTS architecture has a nice solution for this problem. DOTS queries define read and write access properties to each component included in the query. This helps with scheduling, as multiple reads of the same data are race free and can be executed concurrently."),(0,n.kt)("p",null,"Since the write access is tracked explicitly and misuse is guarded by the compiler, we know which component arrays in each chunk were potentially modified."),(0,n.kt)("p",null,"To implement a \u201cfree\u201d data version tracking system, we add a version number to each component array in each chunk. When write access is requested, the array version number is bumped to the global version counter, which is monotonically increasing. Systems store previously seen global version counter value. This value can be used as version change filter in future queries, to limit the query over chunks that have changed since the system saw them previously. This change tracking system is more robust than dirty flags and doesn\u2019t require any additional bookkeeping."),(0,n.kt)("p",null,"We rely heavily on DOTS change tracking in the hybrid renderer."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Version numbers")),(0,n.kt)("p",null,"Version numbers (also known as generations) detect potential changes. You can use them to implement efficient optimization strategies, such as to skip processing when data hasn't changed since the last frame of the application. It's useful to perform quick version checks on entities to improve the performance of your application."),(0,n.kt)("p",null,"This page outlines all of the different version numbers ECS uses, and the conditions that causes them to change."),(0,n.kt)("p",null,"All version numbers are 32-bit signed integers. They always increase unless they wrap around: signed integer overflow is defined behavior in C#. This means that to compare version numbers, you should use the (in)equality operator, not relational operators."),(0,n.kt)("p",null,"For example, the correct way to check if VersionB is more recent than VersionA is to use the following:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"bool VersionBIsMoreRecent = (VersionB - VersionA) > 0;\n")),(0,n.kt)("p",null,"There is usually no guarantee how much a version number increases by."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityId.Version")),(0,n.kt)("p",null,"An ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is made of an index and a version number. Because ECS recycles indices, the version number is increased in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager")," every time the entity is destroyed. If there is a mismatch in the version numbers when an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is looked up in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager"),", it means that the entity referred to doesn\u2019t exist anymore."),(0,n.kt)("p",null,"For example, before you fetch the position of the enemy that a unit is tracking via an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId"),", you can call ",(0,n.kt)("inlineCode",{parentName:"p"},"ComponentDataFromEntity.Exists"),". This uses the version number to check if the entity still exists."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"World.Version")),(0,n.kt)("p",null,"ECS increases the version number of a World every time it creates or destroys a manager (i.e. system)."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityDataManager.GlobalVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," is increased before every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"System.LastSystemVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion")," takes the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," after every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion[]"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Chunk.ChangeVersion")),(0,n.kt)("p",null,"For each component type in the archetype, this array contains the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," at the time the component array was last accessed as writeable within this chunk. This does not guarantee that anything has changed, only that it might have changed."),(0,n.kt)("p",null,"You can never access shared components as writeable, even if there is a version number stored for those too: it serves no purpose."),(0,n.kt)("p",null,"When you use the ",(0,n.kt)("inlineCode",{parentName:"p"},"WithChangeFilter()")," function in an ",(0,n.kt)("inlineCode",{parentName:"p"},"Entities.ForEach")," construction, ECS compares the ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion")," for that specific component to ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),", and it only processes chunks whose component arrays have been accessed as writeable after the system last started running."),(0,n.kt)("p",null,"For example, if the amount of health points of a group of units is guaranteed not to have changed since the previous frame, you can skip checking if those units should update their damage model."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityManager.m_ComponentTypeOrderVersion[]")),(0,n.kt)("p",null,"For each non-shared component type, ECS increases the version number every time an iterator involving that type becomes invalid. In other words, anything that might modify arrays of that type (not instances)."),(0,n.kt)("p",null,"For example, if you have static objects that a particular component identifies, and a per-chunk bounding box, you only need to update those bounding boxes if the type order version changes for that component."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SharedComponentDataManager.m_SharedComponentVersion[]")),(0,n.kt)("p",null,"These version numbers increase when any structural change happens to the entities stored in a chunk that reference the shared component."),(0,n.kt)("p",null,"For example, if you keep a count of entities per shared component, you can rely on that version number to only redo each count if the corresponding version number changes."),(0,n.kt)("h4",{id:"2335-bevys-change-detection"},"2.3.3.5 Bevy's Change Detection"),(0,n.kt)("p",null,"Bevy allows you to easily detect when data is changed. You can use this to perform actions in response to changes."),(0,n.kt)("p",null,"One of the main use cases is optimization \u2013 avoiding unnecessary work by only doing it if the relevant data has changed. Another use case is triggering special actions to occur on changes, like configuring something or sending the data somewhere."),(0,n.kt)("p",null,"Filtering"),(0,n.kt)("p",null,"You can make a ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html"},"query")," that only yields entities if specific ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/ec.html#components"},"components")," on them have been modified."),(0,n.kt)("p",null,"Use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Added")),(0,n.kt)("p",{parentName:"li"},": detect new component instances"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"if the component was added to an existing entity"),(0,n.kt)("li",{parentName:"ul"},"if a new entity with the component was spawned"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Changed")),(0,n.kt)("p",{parentName:"li"},": detect component instances that have been changed"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"triggers when the component is accessed mutably"),(0,n.kt)("li",{parentName:"ul"},"also triggers if the component is newly-added (as per ",(0,n.kt)("a",{parentName:"li",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added")),")")))),(0,n.kt)("p",null,"(If you want to react to removals, see the page on ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/removal-detection.html"},"removal detection"),". It works differently and is much trickier to use.)"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},'/// Print the stats of friendly players when they change\nfn debug_stats_change(\n query: Query<\n // components\n (&Health, &PlayerXp),\n // filters\n (Without, Or<(Changed, Changed)>), \n >,\n) {\n for (health, xp) in query.iter() {\n eprintln!(\n "hp: {}+{}, xp: {}",\n health.hp, health.extra, xp.0\n );\n }\n}\n\n/// detect new enemies and print their health\nfn debug_new_hostiles(\n query: Query<(Entity, &Health), Added>,\n) {\n for (entity, health) in query.iter() {\n eprintln!("Entity {:?} is now an enemy! HP: {}", entity, health.hp);\n }\n}\n')),(0,n.kt)("p",null,"Checking"),(0,n.kt)("p",null,"If you want to access all the entities, as normal, regardless of if they have been modified, but you just want to check the status, you can use the special ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.ChangeTrackers.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ChangeTrackers"))," query parameter."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Make sprites flash red on frames when the Health changes\nfn debug_damage(\n mut query: Query<(&mut Sprite, ChangeTrackers)>,\n) {\n for (mut sprite, tracker) in query.iter_mut() {\n // detect if the Health changed this frame\n if tracker.is_changed() {\n sprite.color = Color::RED;\n } else {\n // extra check so we don't mutate on every frame without changes\n if sprite.color != Color::WHITE {\n sprite.color = Color::WHITE;\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"This is useful for processing all entities, but doing different things depending on if they have been modified."),(0,n.kt)("p",null,"For ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resources"),", change detection is provided via methods on the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.Res.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Res")),"/",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.ResMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ResMut"))," system parameters."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn check_res_changed(\n my_res: Res,\n) {\n if my_res.is_changed() {\n // do something\n }\n}\n\nfn check_res_added(\n // use Option, not to panic if the resource doesn't exist yet\n my_res: Option>,\n) {\n if let Some(my_res) = my_res {\n // the resource exists\n\n if my_res.is_added() {\n // it was just added\n // do something\n }\n }\n}\n")),(0,n.kt)("p",null,"Note that change detection cannot currently be used to detect ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," changes (via the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/schedule/struct.State.html"},(0,n.kt)("inlineCode",{parentName:"a"},"State"))," ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resource"),") (",(0,n.kt)("a",{parentName:"p",href:"https://github.com/bevyengine/bevy/issues/2343"},"bug"),")."),(0,n.kt)("p",null,"What gets detected"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Changed.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Changed"))," detection is triggered by ",(0,n.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/stable/std/ops/trait.DerefMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"DerefMut")),". Simply accessing components via a mutable query, without actually performing a ",(0,n.kt)("inlineCode",{parentName:"p"},"&mut")," access, will ",(0,n.kt)("em",{parentName:"p"},"not")," trigger it."),(0,n.kt)("p",null,"This makes change detection quite accurate. You can rely on it to optimize your game's performance, or to otherwise trigger things to happen."),(0,n.kt)("p",null,"Also note that when you mutate a component, Bevy does not track if the new value is actually different from the old value. It will always trigger the change detection. If you want to avoid that, simply check it yourself:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn update_player_xp(\n mut query: Query<&mut PlayerXp>,\n) {\n for mut xp in query.iter_mut() {\n let new_xp = maybe_lvl_up(&xp);\n\n // avoid triggering change detection if the value is the same\n if new_xp != *xp {\n *xp = new_xp;\n }\n }\n}\n")),(0,n.kt)("p",null,"Change detection works on a per-",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/systems.html"},"system")," granularity, and is reliable. A system will not detect changes that it made itself, only those done by other systems, and only if it has not seen them before (the changes happened since the last time it ran). If your system only runs sometimes (such as with ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," or ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/run-criteria.html"},"run criteria"),"), you do ",(0,n.kt)("em",{parentName:"p"},"not")," have to worry about missing changes."),(0,n.kt)("p",null,"Beware of frame delay / 1-frame-lag. This can occur if Bevy runs the detecting system before the changing system. The detecting system will see the change the next time it runs, typically on the next frame update."),(0,n.kt)("p",null,"If you need to ensure that changes are handled immediately / during the same frame, you can use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/system-order.html"},"explicit system ordering"),"."),(0,n.kt)("p",null,"However, when detecting component additions with ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added"))," (which are typically done using ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/commands.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Commands")),"), this is not enough; you need ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/stages.html"},"stages"),"."),(0,n.kt)("h3",{id:"234-\u7f16\u8bd1"},"2.3.4 \u7f16\u8bd1"),(0,n.kt)("p",null,"\u7531\u4e8eSystem\u662f\u4e0d\u4f9d\u8d56\u4e8e\u6570\u636e\u53ca\u6570\u636e\u7ed3\u6784\u7684\uff0c\u5b83\u53ea\u5305\u542b\u4e00\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\uff0c\u6bcf\u4e2aSystem\u4f7f\u7528\u7684\u6240\u6709\u6570\u636e\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\u8fdb\u884c\u67e5\u627e\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u53ea\u662f\u8ba1\u7b97\u4e86\u6bcf\u4e2a\u53d8\u91cf\u7684\u4e00\u4e2a\u7d22\u5f15\u5730\u5740\uff0c\u901a\u8fc7\u5806\u800c\u4e0d\u662f\u5806\u6808\u6307\u9488\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u5f00\u53d1\u5b8c\u6210\u4e4b\u540e\u5b83\u7684\u7f16\u8bd1\u5de5\u4f5c\u5c31\u7ed3\u675f\u4e86\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5b9e\u9645\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5b9e\u4f53\uff0c\u4e91\u7aef\u4f1a\u6839\u636e\u8fd9\u4e2a\u5b9e\u4f53\u914d\u7f6e\uff08\u5bf9\u7ec4\u4ef6\u7684\u5f15\u7528\uff09\uff0c\u5bf9\u5b9e\u4f53\u7684\u6570\u636e\u8fdb\u884c\u7ec4\u7ec7\uff0c\u5b83\u4f1a\u6839\u636eSystem\u5bf9\u6570\u636e\u7684\u4f7f\u7528\u5b9a\u4e49\uff0c\u5c06\u8fd9\u4e9b\u6570\u636e\u7cbe\u5fc3\u7ec4\u7ec7\u5728Creation Table\u4e2d\uff0c\u7136\u540e\u518d\u5c06\u9002\u5f53\u7684\u6570\u7ec4\u53ca\u5176\u7d22\u5f15\u53d1\u9001\u7ed9System\u7684\u4ee3\u7801\u8fdb\u884c\u6267\u884c\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7f16\u8f91\u5668Reality Create\u4e2d\uff0c\u5f00\u53d1\u8005\u6bcf\u5199\u5b8c\u4e00\u4e2a\u7ec4\u4ef6\uff08\u4f8b\u5982\u4e00\u4e2aSystem\uff09\u90fd\u4f1a\u8fdb\u884c\u7f16\u8bd1\uff0c\u9664\u975e\u4ed6\u518d\u6b21\u4fee\u6539\u7ec4\u4ef6\u6e90\u4ee3\u7801\uff0c\u5426\u5219\u4e0d\u9700\u8981\u518d\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c5e\u4e8e\u4e00\u79cdAOT\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7528\u6237\uff0c\u5b83\u901a\u5e38\u76f4\u63a5\u5728Reality World app\u4e2d\u8fdb\u884c\u64cd\u4f5c\uff0cTA\u505a\u7684\u4e8b\u60c5\u4e3b\u8981\u662f\u4fee\u6539\u5b9e\u4f53\u7684\u914d\u7f6e\u6570\u636e\uff0c\u5f53\u8fd9\u4e9b\u6570\u636e\u53d1\u751f\u4fee\u6539\u4e4b\u540e\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f1a\u6d89\u53ca\u4ee3\u7801\u91cd\u65b0\u7f16\u8bd1\uff0c\u53ea\u6709Creation Table\u5bf9\u6570\u636e\u7684\u5185\u5b58\u5e03\u5c40\u8fdb\u884c\u91cd\u65b0\u8c03\u6574\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5c3d\u7ba1\u6574\u4e2a\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u770b\u8d77\u6765\u5f88\u590d\u6742\uff0c\u5f97\u76ca\u4e8e\u8fd9\u79cd\u6570\u636e\u5206\u79bb\u7684\u673a\u5236\uff0c\u7f16\u8bd1\u903b\u8f91\u76f8\u5bf9\u8fd8\u662f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("h4",{id:"2341-aot"},"2.3.4.1 AOT"),(0,n.kt)("h4",{id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"},"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u865a\u62df\u673a\u5185\u90e8\u7684\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f\u662f\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4fee\u6539\u7ec4\u4ef6\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u4f4d\u7f6e\uff0c\u6309\u7167\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u8fdb\u884c\u5b58\u50a8\uff0c\u8fd9\u6837\u7ec4\u4ef6\u6307\u4ee4\u7684\u52a0\u8f7d\u5c06\u80fd\u591f\u5145\u5206\u5229\u7528\u7f13\u5b58\u7279\u6027\uff0c\u8fdb\u4e00\u6b65\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"},"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"),(0,n.kt)("p",null,"\u6709\u4e9b\u5ba2\u6237\u7aef\uff0c\u5982iOS\u5e76\u4e0d\u6c38\u7eed\u76f4\u63a5\u52a0\u8f7d\u673a\u5668\u7801\uff0c\u8fd9\u65f6\u5019\u4f1a\u9000\u5316\u4e3a\u6267\u884c\u5b57\u8282\u7801\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u5df2\u7ecf\u5173\u4e8e\u7ec4\u4ef6\u548c\u6570\u636e\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u5bf9\u7aef\u4fa7\u7684\u5b57\u8282\u7801\u865a\u62df\u673a\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u7aef\u4fa7\u53ea\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u903b\u8f91\uff0c\u6838\u5fc3\u3001\u590d\u6742\u7684\u8ba1\u7b97\u903b\u8f91\u8fd8\u662f\u5728\u540e\u7aef\u8fdb\u884c\u8ba1\u7b97\uff0c\u6240\u4ee5\u6027\u80fd\u5f71\u54cd\u5e76\u4e0d\u5927\u3002\u56e0\u4e3a\u7aef\u4fa7\u5176\u4ed6\u903b\u8f91\u5982\u6e32\u67d3\u548c\u7269\u7406\u6a21\u62df\uff0c\u4ecd\u7136\u662fC++\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\uff0c\u56e0\u4e3a\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\u4e86\u7c7b\u578b\u53ca\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u5b83\u4eec\u9700\u8981\u94fe\u63a5\u5728\u4e00\u8d77\u3002\u867d\u7136\u4e3a\u4e86\u5b9e\u73b0\u5982\u589e\u91cf\u66f4\u65b0\u7b49\uff0c\u80fd\u591f\u907f\u514d\u6539\u52a8\u4e00\u4e2a\u95ee\u9898\u5c31\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u7cfb\u7edf\uff0c\u4f46\u662f\u94fe\u63a5\u8fc7\u7a0b\u662f\u7701\u4e0d\u4e86\u7684\uff0c\u94fe\u63a5\u7684\u8fc7\u7a0b\u5373\u662f\u628a\u5404\u4e2a\u6e90\u4ee3\u7801\u4e2d\u76f8\u4e92\u5f15\u7528\u7684\u90e8\u5206\u94fe\u63a5\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u7684\u673a\u5236\u5bf9\u4e8e\u5927\u578b\u5b9e\u65f6\u7cfb\u7edf\u7684\u9650\u5236\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u52a0\u4e86\u542f\u52a8\u65f6\u7684\u52a0\u8f7d\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u5f97\u7a0b\u5e8f\u89c4\u6a21\u5f88\u96be\u4f38\u7f29\uff0c\u56e0\u4e3a\u66f4\u5927\u89c4\u6a21\u7684\u7a0b\u5e8f\u610f\u5473\u7740\u66f4\u5927\u89c4\u6a21\u7684\u94fe\u63a5\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\uff0c\u5982\u679c\u94fe\u63a5\u6587\u4ef6\u589e\u591a\uff0c\u5f88\u96be\u7ba1\u7406\u5230\u5e95\u8981\u52a0\u8f7d\u90a3\u4e9b\u52a8\u6001\u5e93\uff0c\u5982\u679c\u6bcf\u4e2a\u52a8\u6001\u5e93\u53ea\u4f7f\u7528\u4e00\u70b9\u4fe1\u606f\uff0c\u90a3\u7cfb\u7edf\u5185\u5b58\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u6d6a\u8d39\u3002")),(0,n.kt)("p",null,"\u867d\u7136\u9759\u6001\u7c7b\u578b\u7684\u8bed\u8a00\u5176\u94fe\u63a5\u8fc7\u7a0b\u53ea\u9700\u8981\u53d1\u751f\u4e00\u6b21\uff0c\u4f46\u662f\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u8fd9\u6837\u7684\u94fe\u63a5\u8fc7\u7a0b\u9700\u8981\u5728\u52a0\u8f7d\u7684\u65f6\u5019\u6267\u884c\uff0c\u8fd9\u589e\u52a0\u4e86\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u52a0\u8f7d\u65f6\u7684\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u89e3\u51b3\u5927\u578b\u7cfb\u7edf\u7684\u52a8\u6001\u89e3\u91ca\u95ee\u9898\uff0c\u6211\u4eec\u5fc5\u987b\u8981\u8981\u80fd\u591f\u5c06\u7a0b\u5e8f\u5206\u6210\u5f88\u5c0f\u7684\u788e\u7247\uff0c\u5e76\u4e14\u53bb\u9664\u76f8\u4e92\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4ece\u800c\u5f7b\u5e95\u53bb\u9664\u6389\u94fe\u63a5\u8fd9\u4e2a\u73af\u5883"),"\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u9700\u8981\u505a\u5230\u51e0\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u4e4b\u95f4\u6ca1\u6709\u76f8\u4e92\u7c7b\u578b\u5f15\u7528\uff0c\u6216\u8005\u8bf4\u6e90\u4ee3\u7801\u6ca1\u6709\u590d\u6742\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u53ea\u6709\u57fa\u672c\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8bbf\u95ee\u7684\u6570\u636e\u5730\u5740\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u5206\u914d\uff0c\u5373\u4e0d\u9700\u8981\u901a\u8fc7\u7f16\u8bd1\u5668\u5b9e\u73b0\u6307\u5b9a\u548c\u8ba1\u7b97\u6570\u636e\u5730\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u6570\u636e\u7684\u52a8\u6001\u5206\u914d\u8981\u8db3\u591f\u7b80\u5355\uff0c\u5426\u5219\u4e5f\u4f1a\u589e\u52a0\u6027\u80fd\u5f00\u652f\uff0c\u53c2\u89c1Creation Table\u76f8\u5173\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8981\u8db3\u591f\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u5c3d\u53ef\u80fd\u52a0\u8f7d\u66f4\u5c11\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u6700\u7ec8\uff0cRealityIS\u51e0\u4e4e\u53ef\u4ee5\u5b8c\u5168\u629b\u5f03\u52a8\u6001\u94fe\u63a5\u8fd9\u4e00\u90e8\u5206\u7684\u8ba1\u7b97\u8fc7\u7a0b\u3002"),(0,n.kt)("h3",{id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"},"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u7ef4\u62a4\u4e00\u4e2a\u8868\uff0c\u8bb0\u5f55\u6240\u6709\u5f53\u524d\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u5e76\u6839\u636e\u7ec4\u4ef6\u4e2d\u7684\u6570\u636e\u5b9a\u4e49\uff0c\u7ba1\u7406\u5b9e\u4f53\u5bf9\u8c61\u5185\u5b58\u6570\u636e\u7684\u5e03\u5c40\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u7b49\u4e8b\u60c5\u3002"),(0,n.kt)("h4",{id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"},"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6216\u8005Creation\uff0c\u9996\u5148\u9700\u8981\u6839\u636e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u8ba1\u7b97\u5b83\u4eec\u7684\u6267\u884c\u987a\u5e8f\u3002\u57fa\u4e8e\u4e00\u4e0b\u7684\u539f\u7406\u53ef\u4ee5\u8ba1\u7b97\u51fa\u8fd9\u4e2a\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u8f93\u5165\u548c\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u90fd\u6765\u81ea\u7b26\u53f7\u8868")),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u5173\u7cfb\uff0c\u53ef\u4ee5\u8ba1\u7b97\u51fa\u6240\u6709\u7ec4\u4ef6\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6309\u7167\u8fd9\u6837\u7684\u987a\u5e8f\u6267\u884c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u4fdd\u8bc1\u65f6\u5e8f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6709\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u5904\u7406\u590d\u6742\u7684\u987a\u5e8f\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u590d\u6742\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u987a\u5e8f\u51e0\u4e4e\u662f\u4e0d\u53ef\u7ef4\u62a4\u7684")),(0,n.kt)("p",null,"\u5f88\u591a\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u91c7\u7528\u6d88\u606f\u673a\u5236\u6216\u8005\u54cd\u5e94\u5f0f\u7684\u65b9\u5f0f\uff0c\u5f88\u96be\u4fdd\u8bc1\u65f6\u5e8f\u7684\u95ee\u9898\uff0c\u800c\u65f6\u5e8f\u7684\u95ee\u9898\u53ef\u80fd\u4f1a\u5e26\u6765\u5f88\u591abug\u4ee5\u53ca\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u672c\u8d28\u4e0a\u662f\u5c06\u6d88\u606f\u5217\u8868\u8fdb\u884c\u7cbe\u5fc3\u7684\u7ec4\u7ec7\uff0c\u4f7f\u5f97\u4e8b\u4ef6\u7684\u5206\u53d1\u4e0d\u518d\u662f\u5f02\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"},"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"Actor\u6a21\u5f0f\u672c\u8eab\u662f\u4e0d\u9700\u8981\u4fdd\u5b58\u72b6\u6001\u7684\uff0c\u800c\u6e38\u620f\u4e2d\u7684\u6570\u636e\u9700\u8981\u6301\u4e45\u4fdd\u5b58\uff0c\u9664\u975e\u5bf9\u8c61\u88ab\u9500\u6bc1")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u521b\u5efa\u5bf9\u8c61\u5b9e\u9645\u4e0a\u662f\u521b\u5efa\u4e86\u4e00\u4e2a\u8ba1\u7b97\u56fe\uff0c\u53ea\u4e0d\u8fc7\u4e0e\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u8ba1\u7b97\u56fe\u76f8\u6bd4\uff0c\u5b83\u4eec\u7684\u8282\u70b9\u90fd\u5177\u6709\u5168\u5c40\u5c5e\u6027\uff0c\u4ece\u800c\u6839\u636e\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u8fdb\u884c\u63a8\u65ad\uff0c\u800cRealityIS\u9700\u8981\u6839\u636e\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u63a8\u65ad\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff0c\u6240\u6709Creation\u5185\u90e8\u7684\u6bcf\u4e2a\u5bf9\u8c61\u7684\u7ec4\u4ef6\u5f62\u6210\u4e00\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\uff0c\u591a\u4e2a\u5bf9\u8c61\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u5728\u5408\u5e76\u5728\u4e00\u4e2a\u7edf\u4e00\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u3002\u6700\u7ec8\u8fd0\u884c\u65f6\u6309\u7167\u8fd9\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\u7684\u987a\u5e8f\u8fdb\u884c\u8ba1\u7b97\u3002\u7531\u4e8e\u8981\u8003\u8651\u5e76\u884c\u6027\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5e94\u7684\u591a\u4e2a\u5bf9\u8c61\u65f6\u5e76\u884c\u8ba1\u7b97\u7684\uff0c\u56e0\u6b64\u6570\u636e\u7684\u7ec4\u7ec7\u4e5f\u662f\u4e0d\u4e00\u6837\u7684\u3002")),(0,n.kt)("p",null,"\u5728\u5224\u65ad\u591a\u4e2a\u5bf9\u8c61\u7684\u5e76\u884c\u6027\u65f6\u9700\u8981\u6ce8\u610f\uff0c\u53ea\u6709\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u4e8e\u76f8\u540c\u7684\u7b26\u53f7\u65f6\uff0c\u6211\u4eec\u624d\u8ba4\u4e3a\u5b83\u662f\u903b\u8f91\u4e0a\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\u7684\u3002\u5982\u679c\u4e00\u4e2a\u76f8\u540c\u7684\u7ec4\u4ef6\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u4f5c\u7528\u57df\u4e0d\u540c\u7684\u7b26\u53f7\uff0c\u5219\u5b83\u5e94\u8be5\u72ec\u7acb\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h4",{id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"},"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"),(0,n.kt)("p",null,"\u7531\u4e8e\u9700\u8981\u52a8\u6001\u8c03\u7528\u7ec4\u4ef6\u673a\u5668\u7801\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u8c03\u7528\u7684\u4ee3\u7801\u5e8f\u5217\u4e0d\u80fd\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u56e0\u6b64\u52a8\u6001\u7684\u811a\u672c\u4ee3\u7801\u662f\u65e0\u6cd5\u77e5\u9053\u7ec4\u4ef6\u51fd\u6570\u4fe1\u606f\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u77e5\u9053\u8be5\u600e\u4e48\u5c06\u5b9e\u4f53\u7684\u7ec4\u4ef6\u6570\u636e\u4f20\u9012\u5230\u7ec4\u4ef6\u51fd\u6570\u8c03\u7528\u6808\u4e0a\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u9700\u8981\u5b58\u50a8\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u7b7e\u540d\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ef\u4ee5\u76f4\u63a5\u636e\u6b64\u6784\u9020\u51fd\u6570\u8c03\u7528\u6808\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6574\u4e2a\u53c2\u6570\u4f20\u9012\u7684\u8fc7\u7a0b\u662f\u52a8\u6001\u7684\uff0c\u4f46\u662f\u5b83\u53ea\u6d89\u53ca\u5c0f\u6bb5\u6570\u636e\u7684\u590d\u5236\uff0c\u5927\u90e8\u5206\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u8ba1\u7b97\u5c31\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\uff0c\u5e76\u4e14\u662f\u6309\u7167\u673a\u5668\u7801\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u5176\u4e2d\u52a8\u6001\u7684\u4e00\u90e8\u5206\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u53ef\u80fd\u4f7f\u7528AOT\u5c06\u6240\u6709\u903b\u8f91\u4e8b\u5148\u7f16\u8bd1\uff0c\u53ea\u6709\u7ec4\u4ef6\u662f\u53ef\u4ee5\u7f16\u8bd1\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u4fdd\u8bc1\u4efb\u610f\u7684\u5e76\u53d1\u5206\u914d\uff0c\u5e76\u53d1\u7684\u7ba1\u7406\u90e8\u5206\u90fd\u662f\u5fc5\u987b\u52a8\u6001\u7684\uff0c\u8fd9\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002"),(0,n.kt)("h3",{id:"237-\u9690\u5f0f\u865a\u62df\u673a"},"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*"),(0,n.kt)("p",null,"\u53ea\u8981\u6709\u865a\u62df\u673a\u7684\u5b58\u5728\uff0c\u6e90\u4ee3\u7801\u90fd\u662f\u7f16\u8bd1\u4e3a\u67d0\u79cd\u5f62\u5f0f\u7684\u5b57\u8282\u7801\uff0c\u7136\u540e\u8fd9\u4e9b\u5b57\u8282\u7801\u5728\u865a\u62df\u673a\u4e0a\u6267\u884c\u3002\u7531\u4e8e\u5b57\u8282\u7801\u4e0d\u662f\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u8bfb\u53d6\u4e00\u6761\u4e00\u6761\u7684\u5b57\u8282\u7801\u8fdb\u884c\u89e3\u91ca\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u76f4\u63a5\u5bfc\u81f4\u4e00\u4e2a\u7ed3\u679c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u5e8f\u5217\u5b8c\u5168\u65e0\u6cd5\u88ab\u786c\u4ef6\u4f18\u5316\uff0c\u4f8b\u5982\u6307\u4ee4\u9884\u53d6\u7b49"))),(0,n.kt)("p",null,"\u786c\u4ef6\u53ea\u80fd\u8bc6\u522b\u865a\u62df\u673a\u4e2d\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u6307\u4ee4\uff0c\u800c\u865a\u62df\u673a\u901a\u5e38\u4e0d\u5305\u542b\u903b\u8f91\uff0c\u53ea\u6709\u4e00\u4e9b\u901a\u7528\u51fd\u6570\uff0c\u6240\u4ee5\u6574\u4e2a\u8ba1\u7b97\u4e2d\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\u6307\u4ee4\u4f1a\u5b58\u5728\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u6700\u6781\u7aef\u7684\u60c5\u51b5\u4e0b\uff0c\u6574\u4e2a\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u65e0\u6cd5\u7f13\u5b58\uff0c\u800c\u6bcf\u4e00\u4e2a\u6307\u4ee4\u7684\u6267\u884c\u90fd\u9700\u8981\u72ec\u7acb\u4ece\u5185\u5b58\u4e2d\u52a0\u8f7d\u6307\u4ee4\u5230\u5bc4\u5b58\u5668\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u811a\u672c\u903b\u8f91\u6e90\u4ee3\u7801\u4e2d\u5305\u542b\u5f88\u591a\u987a\u5e8f\u6307\u4ee4\uff0c\u786c\u4ef6\u4e5f\u65e0\u6cd5\u5f88\u597d\u7684\u9884\u53d6\uff0c\u56e0\u4e3a\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u865a\u62df\u673a\u4ee3\u7801\u5e76\u4e0d\u5305\u542b\u8fd9\u4e9b\u903b\u8f91\u6307\u4ee4\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u679c\u662f\u9759\u6001\u8bed\u8a00\uff0c\u5728\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\u5c06IR\u8f6c\u6362\u4e3a\u673a\u5668\u7801\u7684\u65f6\u5019\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u5176\u4e2d\u7684\u6bcf\u4e2a\u7b26\u53f7\u7684\u5730\u5740\u90fd\u8f6c\u6362\u4e3a\u6808\u4e2d\u7684\u4e00\u4e2a\u5730\u5740\uff0c\u800c\u6808\u9876\u6307\u9488\u7531\u7ef4\u6301\u7740\u4e00\u4e2a\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u4e2a\u4f4d\u7f6e\u7531\u8fd0\u884c\u65f6\u5b9e\u65f6\u5206\u914d\uff0c\u6808\u9876\u6307\u9488\u901a\u5e38\u4f1a\u88ab\u4fdd\u6301\u5728\u5bc4\u5b58\u5668\u4e2d\uff0c\u6240\u4ee5\u8bbf\u95ee\u901f\u5ea6\u5f88\u5feb\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4f7fCreation Script\u5b9e\u73b0\u7c7b\u578b\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"AOT\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u88ab\u5f53\u505a\u4e00\u4e2a\u51fd\u6570\uff0c\u7ec4\u4ef6\u4e2d\u8bbf\u95ee\u7684\u7b26\u53f7\u5168\u90e8\u88ab\u8f6c\u6362\u4e3a\u76f8\u5bf9\u4f4d\u7f6e\uff1b\u5176\u5b9e\u6bcf\u4e2a\u7ec4\u4ef6\u5b8c\u5168\u6309\u7167\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u9759\u6001\u7f16\u7a0b\u8bed\u8a00\u4e2d\u51fd\u6570\u7684\u65b9\u5f0f\u8fdb\u884c\u7f16\u8bd1\uff0c\u6bd4\u5982\u5206\u914d\u51fd\u6570\u8c03\u7528\u4e4b\u524d\u7684\u6808\u521d\u59cb\u5316\uff0c\u4ee5\u53ca\u7ed3\u675f\u540e\u6e05\u695a\u6808\u4e2d\u7684\u6570\u636e\u3002\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u6808\u4e2d\u7684\u6570\u636e\u7531\u865a\u62df\u673a\u5b9e\u65f6\u7684\u653e\u8fdb\u53bb\uff0c\u800c\u4e0d\u662f\u673a\u5668\u7801\u4e2d\u63d2\u5165\u7684\u4ee3\u7801\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u4f46\u662f\u4fdd\u6301\u540e\u9762\u51fd\u6570\u5bf9\u6808\u4e2d\u6570\u636e\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f\u4e00\u6837\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u865a\u62df\u673a\u9996\u5148\u5206\u914d\u6808\u4e2d\u7684\u6570\u636e\uff0c\u53ef\u80fd\u6d89\u53ca\u5c06Creation Table\u4e2d\u7684\u6570\u636e\u590d\u5236\u5230\u65b9\u6cd5\u6808\u4e2d\uff0c\u7136\u540e\u7ec4\u4ef6\u65b9\u6cd5\u4e2d\u7684\u673a\u5668\u7801\u5c31\u53ef\u4ee5\u6b63\u5e38\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u6267\u884c\u7ed3\u675f\u4e4b\u540e\uff0c\u865a\u62df\u673a\u9700\u8981\u5c06\u5176\u4e2d\u7684\u7ed3\u679c\u8bfb\u56de\u5230Creation Table\u4e2d\u5bf9\u5e94\u7684\u6570\u636e\u4e2d")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u9762\u4e24\u4e2a\u8fc7\u7a0b\uff0c\u53ef\u80fd\u65e0\u6cd5\u5728\u865a\u62df\u673a\u4e2d\u52a8\u6001\u51b3\u5b9a\uff0c\u56e0\u4e3a\u5176\u4e2d\u5305\u542b\u4e0d\u540c\u7684\u7d22\u5f15\uff0c\u540d\u79f0\u7b49\u7b49\uff0c\u53ef\u80fd\u8fd8\u9700\u8981\u9700\u8981\u8bb2\u76f8\u5e94\u7684\u4ee3\u7801\u7f16\u8bd1\u5230\u7ec4\u4ef6\u51fd\u6570\u7684\u9996\u90e8\u548c\u5c3e\u90e8\uff0c\u8ba9 \u5b83\u4eec\u81ea\u5df1\u6765\u51b3\u5b9a\u6267\u884c\u6808\u4e2d\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u8fd9\u91cc\u662f\u5426\u53ef\u4ee5\u8003\u8651\u80fd\u591f\u7701\u6389\u5411\u6808\u4e2d\u590d\u5236\u6570\u636e\u7684\u95ee\u9898\uff0c\u6539\u4e3a\u76f4\u63a5\u8bfb\u53d6Table\u4e2d\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u8fde\u7eed\uff0c\u4f46\u662f\u7531\u4e8e\u4e0d\u540c\u7ec4\u4ef6\u4f7f\u7528\u7684\u6807\u51c6\u7b26\u53f7\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u53d8\u91cf\u90fd\u8fde\u7eed\uff08\u50cf\u4e00\u4e2a\u65b9\u6cd5\u6808\u4e00\u6837\uff09\uff0c\u6240\u4ee5\u53ef\u80fd\u590d\u5236\u8fd8\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002"),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u901a\u8fc7\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"},"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u65b9\u6cd5\u7684\u673a\u5668\u7801\uff0c\u5e76\u4e14\u65b9\u6cd5\u6536\u5c3e\u5305\u542b\u5bf9\u65b9\u6cd5\u6808\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u90a3\u4e48\u7531\u4e8e\u8fd9\u4e9b\u64cd\u4f5c\u7684\u673a\u5668\u7801\u662f\u56fa\u5b9a\u7684\uff0c\u5206\u914d\u7684\u5185\u5b58\u5730\u5740\u53ca\u5bc4\u5b58\u5668\u7b49\u4e5f\u662f\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u8981\u4fdd\u8bc1\u8ddf\u8fd0\u884c\u65f6\u7684Table VM\u6709\u6548\u914d\u5408\uff0cTable VM\u4f20\u7ed9\u65b9\u6cd5\u7ec4\u4ef6\u7684\u6570\u636e\u7684\u987a\u5e8f\u5fc5\u987b\u662f\u56fa\u5b9a\u7684\uff0c\u8fd9\u90e8\u5206\u8981\u901a\u8fc7\u4e0a\u4e00\u8282\u7684\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6765\u5904\u7406\u3002\u8fd9\u6837\u7ec4\u4ef6\u673a\u5668\u7801\u624d\u80fd\u53d6\u5230\u6b63\u786e\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"call-stack",src:l(9300).Z,width:"1239",height:"578"})),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u6700\u5927\u7684\u95ee\u9898\u662f\u673a\u5668\u7801\u4e2d\u7f16\u7801\u4e86\u5bf9\u5185\u5b58\u7684\u8c03\u7528\uff0c\u5373\u5bc4\u5b58\u5668\u5206\u914d\u90e8\u5206\uff0c\u8fd9\u90e8\u5206\u4e5f\u662f\u7f16\u8bd1\u8ddf\u89e3\u91ca\u6700\u5927\u7684\u4e0d\u540c\u3002\u901a\u8fc7\u56fa\u5b9a\u5206\u914d\u597d\u7684\u5bc4\u5b58\u5668\uff0cCPU\u80fd\u591f\u4f7f\u7528\u5bc4\u5b58\u5668\u6765\u7f13\u5b58\u53d8\u91cf\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u4e2a\u53d8\u91cf\u90fd\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\uff0c\u90a3\u6837\u5c31\u591a\u4e86\u5f88\u591a\u5bc4\u5b58\u5668\u53d8\u91cf\u8bfb\u53d6\u5199\u5165\u7684\u6307\u4ee4\uff0c\u5e76\u4e14\u65e0\u6cd5\u5229\u7528\u4f20\u7edfCPU\u7684\u4e00\u4e9b\u786c\u4ef6\u4f18\u5316\u624b\u6bb5\uff0c\u5982\u6307\u4ee4\u9884\u53d6\u7b49\u3002"),(0,n.kt)("p",null,"\u7f16\u8bd1\u7684\u673a\u5668\u7801\u5305\u542b\u4e86\u53d8\u91cf\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u8fd9\u4e9b\u5bc4\u5b58\u5668\u5730\u5740\u901a\u5e38\u662f\u57fa\u4e8e\u4e00\u4e2a\u8c03\u7528\u6808\u6765\u5b9e\u73b0\u7684\uff0c\u901a\u8fc7\u8c03\u7528\u6808\uff0c\u6bcf\u4e2a\u51fd\u6570\u6267\u884c\u7684\u6240\u6709\u6307\u4ee4\u90fd\u662f\u56fa\u5b9a\u4e0d\u53d8\u7684\u3002\u800c\u4fdd\u8bc1\u4efb\u610f\u51fd\u6570\u8c03\u7528\u90fd\u53ef\u4ee5\u6709\u5e8f\u8fdb\u884c\u7684\u534f\u4f5c\u673a\u5236\u4e3b\u8981\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6808\u9876\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u4e24\u4e2a\u6570\u503c\u9700\u8981\u8fd0\u884c\u65f6\u52a8\u6001\u4f20\u7ed9\u7ec4\u4ef6\u7684\u51fd\u6570\u673a\u5668\u7801\u3002\u5728\u4f20\u7edf\u7684\u9759\u6001\u7f16\u8bd1\u578b\u8bed\u8a00\u4e2d\uff0c\u8c03\u7528\u51fd\u6570\u7684\u90e8\u5206\u4e5f\u662f\u673a\u5668\u7801\uff0c\u56e0\u6b64\u4ece\u54ea\u91cc\u83b7\u53d6\u51fd\u6570\u53c2\u6570\u7684\u503c\u90fd\u53ef\u4ee5\u7f16\u7801\u4e3a\u56fa\u5b9a\u7684\u6307\u4ee4\uff0c\u4f46\u662f\u5728\u52a8\u6001\u6027\u8bed\u8a00\u4e2d\uff0c\u8fd9\u90e8\u5206\u662f\u53ef\u53d8\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3050).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u53c2\u7167\u52a8\u6001\u6027\u8bed\u8a00\u865a\u62df\u673a\u7684\u505a\u6cd5\uff0c\u5728\u4e00\u4e2a\u865a\u62df\u673a\u7684\u5faa\u73af\u4e2d\u8bfb\u53d6\u53d8\u91cf\u5e76\u83b7\u53d6\u5730\u5740\uff0c\u7136\u540e\u4f20\u9012\u7ed9\u88ab\u8c03\u51fd\u6570\u7684\u51fd\u6570\u8c03\u7528\u6808\uff0c\u5305\u62ec\u6808\u9876\u6307\u9488\u548c\u51fd\u6570\u8fd4\u56de\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u91cc\u7684\u95ee\u9898\u53ef\u80fd\u662f\uff0c\u865a\u62df\u673a\u5e76\u4e0d\u77e5\u9053\u7ec4\u4ef6\u7684\u51fd\u6570\u8c03\u7528\u6808\u7684\u5e03\u5c40\uff0c\u5373\u662f\u51fd\u6570\u7684\u7b7e\u540d\u6216\u8005\u7c7b\u578b\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u7b7e\u540d\u4fe1\u606f\u5b58\u653e\u5728\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6570\u636e\u4e2d\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u53e6\u5916\u4e00\u4e2a\u7cbe\u5de7\u7684\u70b9\u662f\uff0cHotSpot VM\u4f7f\u7528OS\u7ebf\u7a0b\u6765\u5b9e\u73b0Java\u7ebf\u7a0b\uff0c\u5e76\u4e14\u4e00\u4e2aJava\u7ebf\u7a0b\u4e0a\u8fd0\u884c\u7684\u6240\u6709native\u51fd\u6570\u548cJava\u65b9\u6cd5\u90fd\u5171\u7528\u4e00\u4e2a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E8%B0%83%E7%94%A8%E6%A0%88&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A143053269%7D"},"\u8c03\u7528\u6808"),"\u3002\u6240\u4ee5HotSpot VM\u4e5f\u628a\u8fd9\u79cd\u505a\u6cd5\u53eb\u505a\u201c\u6df7\u5408\u6a21\u5f0f\u6808\u201d\uff08mixed-mode stack\u6216\u8005\u7b80\u79f0mixed stack\uff09\u3002\u89e3\u91ca\u5668\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528CPU\u7684\u6808\u6307\u9488\u5bc4\u5b58\u5668\u6765\u8868\u793a\u81ea\u5df1\u7684\u6808\u9876\u6307\u9488\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aRednaxelaFX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/55141871/answer/143053269"},"https://www.zhihu.com/question/55141871/answer/143053269"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"238-\u8c03\u5ea6\u5668"},"2.3.8 \u8c03\u5ea6\u5668"),(0,n.kt)("p",null,"\u5982\u679c\u5b8c\u5168\u6309\u7167\u7ec4\u4ef6\u4e3a\u7c92\u5ea6\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u80fd\u5bfc\u81f4\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u4f17\u591a\u7ec4\u4ef6\u88ab\u5206\u914d\u5230\u8f83\u591a\u7684\u670d\u52a1\u5668\uff0c\u6240\u4ee5\u5355\u4e2a\u5ba2\u6237\u7aef\u9700\u8981\u548c\u5f88\u591a\u670d\u52a1\u5668\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u5176\u5b9e\u662f\u4e24\u4e2a\u76f8\u4e92\u51b2\u7a81\u7684\u76ee\u6807\u7684\u6743\u8861\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c06\u5c3d\u53ef\u80fd\u591a\u7684\u6765\u81ea\u4e0d\u540c\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u653e\u5728\u4e00\u4e2a\u670d\u52a1\u5668\u6267\u884c\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u6027\uff0c\u751a\u81f3\u53ef\u4ee5\u653e\u5230GPU\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u540c\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u5c3d\u53ef\u80fd\u653e\u5728\u540c\u4e00\u4e2a\u670d\u52a1\u5668\uff0c\u53ef\u4ee5\u8f83\u5c11\u5ba2\u6237\u7aef\u7684\u94fe\u63a5\u6570\u91cf")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5c3d\u53ef\u80fd\u5c06\u5355\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u81f3\u5c11\u653e\u5230\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\u8fdb\u884c\u8ba1\u7b97\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u662f\u53ef\u884c\u7684\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u4e3b\u8981\u8fd8\u662f\u4f9d\u8d56\u4e8eCPU\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u5f88\u5927\u7684\u5e76\u884c\u5ea6\uff0c\u4f8b\u59828\u4e2a\u300116\u4e2a\u6216\u8005\u6700\u591a32\u4e2a\u7ec4\u4ef6\u4e00\u8d77\u6267\u884c\u5c31\u5dee\u4e0d\u591a\uff0c\u800c\u8fd9\u6837\u7684\u8981\u6c42\u5f88\u5bb9\u6613\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,"\u5355\u4e2a\u7ec4\u4ef6\u5355\u6b21\u8ba1\u7b97\u7684\u6570\u91cf\u4e0d\u8981\u592a\u591a\uff0c\u8fd9\u6837\u5bf9\u8fd0\u884c\u65f6\u7ec4\u7ec7\u7ba1\u7406\u6570\u636e\u7684\u8981\u6c42\u4f1a\u964d\u4f4e\uff0c\u4f8b\u59828/16/32\u4e2a\u3002\u8fd9\u6837\u5c11\u91cf\u7684\u7ec4\u4ef6\u5e76\u884c\u8ba1\u7b97\u9700\u6c42\u4e5f\u66f4\u5bb9\u6613\u5bf9\u5ba2\u6237\u7aef\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u80fd\u4e00\u4e24\u4e2a\u5ba2\u6237\u7aef\u751a\u81f3\u5355\u4e2a\u5ba2\u6237\u7aef\u90fd\u53ef\u4ee5\u8fbe\u5230\u8fd9\u4e2a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u8bbe\u7f6e\u5ba2\u6237\u7aef\u7ba1\u7406\u8c03\u5ea6\uff0c\u6bcf\u4e2a\u5ba2\u6237\u7aef\u5c3d\u53ef\u80fd\u8ddf\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u670d\u52a1\u5668\u8c03\u5ea6\u7ba1\u7406\u5668\u76f8\u8fde\u63a5\uff0c\u800c\u8fd9\u4e9b\u8c03\u5ea6\u5668\u8d1f\u8d23\u5bf9\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u670d\u52a1\u5668\u8fdb\u884c\u7ba1\u7406\uff0c\u4e3b\u8981\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6536\u96c6\u6765\u81ea\u540c\u4e00\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u4e0d\u540c\u670d\u52a1\u5668\u7684\u7ec4\u4ef6\u8ba1\u7b97\u7ed3\u679c\uff0c\u7136\u540e\u901a\u8fc7\u5355\u6b21\u94fe\u63a5\u4e0e\u5355\u4e2a\u5ba2\u6237\u7aef\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("h3",{id:"239-\u52a8\u6001\u7b26\u53f7\u8868"},"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u7f16\u8bd1\u67b6\u6784\u4e2d\uff0c\u7b26\u53f7\u8868\u4e3b\u8981\u7528\u4e8e\u8bb0\u5f55\u7528\u6237\u81ea\u5b9a\u4e49\u7c7b\u578b\u7684\u7ed3\u6784\uff0c\u4ee5\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\u3002\u5f53\u7136\u73b0\u4ee3\u9762\u5411\u5bf9\u8c61\u5bf9\u8c61\u4e2d\uff0c\u81ea\u5b9a\u4e49\u7ed3\u6784\u672c\u8eab\u662f\u53ef\u4ee5\u5d4c\u5957\u7684\uff0c\u5e76\u4e14\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\u53ef\u80fd\u4f1a\u5305\u542b\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u4e5f\u7528\u6765\u8f85\u52a9\u4f5c\u7528\u57df\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("img",{src:"resources/symbol-table.jpeg",alt:"symbol-table"}),(0,n.kt)("p",null,"\u672c\u8d28\u4e0a\uff0c\u7b26\u53f7\u8868\u7531\u6e90\u4ee3\u7801\u4e2d\u751f\u6210\uff0c\u7136\u540e\u7528\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\uff0c\u7136\u540e\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u5c31\u4e0d\u518d\u9700\u8981\u7b26\u53f7\u8868\uff0c\u7b26\u53f7\u8868\u53ea\u662f\u4f5c\u4e3a\u7f16\u8bd1\u9636\u6bb5\u7684\u4e00\u79cd\u4e2d\u95f4\u6570\u636e\u3002\u4f46\u8fd9\u4e5f\u8bf4\u660e\uff0c\u4ece\u6e90\u4ee3\u7801\u672c\u8eab\u5c31\u53ef\u4ee5\u63a8\u5bfc\u5b9e\u9645\u8fd0\u884c\u65f6\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u52a8\u6001\u8bed\u8a00\u7684\u539f\u7406\u5373\u4f7f\u5982\u679c\uff0c\u5b83\u4eec\u52a8\u6001\u5730\u4ece\u7b26\u53f7\u8868\u8ba1\u7b97\u4e00\u4e2a\u53d8\u91cf\u7684\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4f9d\u8d56\u7f16\u8bd1\u5206\u914d\u597d\u7684\u56fa\u5b9a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u57fa\u672c\u4e0a\uff0c\u5982\u679c\u8bed\u8a00\u9700\u8981\u5177\u6709\u67d0\u79cd\u52a8\u6001\u6027\uff0c\u8fd0\u884c\u65f6\u5185\u5b58\u4e2d\u5b9e\u65f6\u8ba1\u7b97\u548c\u5b58\u50a8\u7b26\u53f7\u8868\u5c31\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002\u8fd9\u91cc\u7684\u52a8\u6001\u6027\u4e3b\u8981\u662f\u6307\u90a3\u4e9b\u5fc5\u987b\u4ece\u7b26\u53f7\u8868\u7c7b\u578b\u7cfb\u7edf\u63a8\u5bfc\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u5bf9\u8c61\u67d0\u4e2a\u5c5e\u6027\u7684\u5730\u5740\uff0c\u51fd\u6570\u7684\u53c2\u6570\u5217\u8868\u4ee5\u53ca\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u7531\u6b64\u770b\uff0c\u52a8\u6001\u8bed\u8a00\u81f3\u5c11\u6709\u4ee5\u4e0b\u4e24\u79cd\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7b26\u53f7\u67e5\u8be2\uff0c\u7b26\u53f7\u8868\u5f80\u5f80\u662f\u6bd4\u8f83\u590d\u6742\u7684\u6811\u5f62\u7ed3\u6784\uff0c\u67e5\u8be2\u6548\u7387\u8f83\u4f4e"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\u4e2d\u7684\u5bc4\u5b58\u5668\u6ca1\u6709\u5206\u914d\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u9700\u8981\u4ece\u5185\u5b58\u800c\u4e0d\u662f\u5bc4\u5b58\u5668\u8bfb\u53d6")),(0,n.kt)("p",null,"RealityIS\u9488\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0c\u5bf9\u4e8e\u524d\u8005\uff0c\u5b83\u91c7\u7528\u5982\u4e0b\u7684\u4f18\u5316\u624b\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u7c7b\u578b\u7ed3\u6784\uff0c\u66f4\u5c11\u7684\u5c42\u6b21\uff0c\u57fa\u672c\u4e0a\u6ca1\u6709\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784\uff0c\u66f4\u7b80\u5355\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u65e0\u6cd5\u5b9a\u4e49\u590d\u6742\u7684\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u5355\u53f0VM\u5177\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u7531\u4e8e\u6bcf\u4e2aVM\u503e\u5411\u4e8e\u5c06\u5927\u91cf\u76f8\u4f3c\u7684\u903b\u8f91\u653e\u5230\u540c\u4e00\u53f0\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u56e0\u6b64\u540c\u4e00\u53f0\u670d\u52a1\u5668\u62e5\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u4fe1\u606f\u53ca\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u4e2a\u4f18\u5316\uff0cRealityIS\u5bf9\u4e8e\u7c7b\u578b\u7684\u52a8\u6001\u6027\u65b9\u9762\u7684\u6027\u80fd\u635f\u5931\u5c31\u964d\u5230\u4e86\u6bd4\u8f83\u4f4e\u7684\u6c34\u5e73\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u7ec4\u4ef6\u7684\u903b\u8f91\u662f\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u5c3d\u7ba1\u7ec4\u4ef6\u5b9a\u4e49\u7684\u65f6\u5019\u5173\u8054\u4e86\u4e00\u5b9a\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f46\u662f\u6211\u4eec\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u7ed1\u5b9a\u51fd\u6570\u8c03\u7528\u6808\u6765\u4f7f\u51fd\u6570\u7684\u673a\u5668\u7801\u53ef\u4ee5\u72ec\u7acb\u7f16\u8bd1\u3002\u56e0\u6b64\u7406\u8bba\u4e0a\u7ec4\u4ef6\u7684\u8ba1\u7b97\u6548\u7387\u53ef\u4ee5\u63a5\u8fd1\u9759\u6001\u578b\u8bed\u8a00\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.7.1\u8282\u3002"),(0,n.kt)("h3",{id:"2310-\u865a\u62df\u673a\u67b6\u6784"},"2.3.10 \u865a\u62df\u673a\u67b6\u6784"),(0,n.kt)("h4",{id:"23101-\u670d\u52a1\u7aef"},"2.3.10.1 \u670d\u52a1\u7aef"),(0,n.kt)("p",null,"\u540e\u7aef\u7531\u4e8e\u53ef\u4ee5\u52a8\u6001\u52a0\u8f7d\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u6240\u4ee5\u76f4\u63a5\u4f7f\u7528JIT"),(0,n.kt)("h4",{id:"23102-\u5ba2\u6237\u7aef"},"2.3.10.2 \u5ba2\u6237\u7aef"),(0,n.kt)("p",null,"\u5ba2\u6237\u7aef\u7531\u4e8eiOS\u4e0d\u5141\u8bb8\u4f7f\u7528JIT\uff0c\u6240\u4ee5\u53ea\u80fd\u4f7f\u7528\u89e3\u91ca\u5668\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Wasm3\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u7528\u4e8e\u5c06Wasm\u5b57\u8282\u7801\u52a8\u6001\u89e3\u91ca\u6267\u884c\uff0c\u53d1\u751f\u5728\u8fd0\u884c\u65f6"),(0,n.kt)("li",{parentName:"ul"},"Wasm interpreter\uff0c\u8be5\u89e3\u91ca\u5668\u7528\u4e8e\u5c06CreationScript\u89e3\u91ca\u4e3aWasm\u5b57\u8282\u7801\uff0c\u4e3b\u8981\u53d1\u751f\u5728\u7f16\u8f91\u65f6")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3050).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u56e0\u4e3a\u51fd\u6570\u8c03\u7528\u6808\u53ca\u5176\u76f8\u5173\u7684\u673a\u5236\uff0c\u662f\u88ab\u7f16\u8bd1\u5668\u7f16\u8bd1\u5230\u6700\u7ec8\u7684\u4ee3\u7801\u4e2d\u53bb\u7684\uff0c\u662f\u5728\u4ee3\u7801\u7684\u6bcf\u4e2a\u51fd\u6570\u9996\u4f4d\u63d2\u5165\u4e86\u4e00\u6bb5\u63a7\u5236\u4ee3\u7801\uff0c\u7136\u540e\u7a0b\u5e8f\u5c31\u80fd\u591f\u6309\u7167\u8fd9\u79cd\u673a\u5236\u6267\u884c\uff0c\u800c\u4e0d\u662f\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u4e86\u8be5\u673a\u5236\uff0c\u8fd9\u91cc\u64cd\u4f5c\u7cfb\u7edf\u5176\u5b9e\u53ea\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6808\u9876\u6307\u9488\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u8fd9\u79cd\u673a\u5236\u4e5f\u90e8\u5206\u5b9e\u73b0\u5728\u865a\u62df\u673a\u4e2d\uff0c\u9996\u5148\u865a\u62df\u673a\u6dfb\u52a0\u4e24\u4e2a\u65b9\u6cd5\u5757\uff0c\u7c7b\u4f3c\u4e8e\u539f\u6765\u9759\u6001\u8bed\u8a00\u4ee3\u7801\u4e2d\u51fd\u6570\u9996\u5c3e\u6dfb\u52a0\u7684\u90e8\u5206\uff0c\u7531\u4e8e\u8fd9\u90e8\u5206\u7684\u4ee3\u7801\u7ed3\u6784\u90fd\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e2d\u6dfb\u52a0\u4e24\u4e2a\u4ee3\u7801\u5757\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e24\u90e8\u5206\u7684\u53c2\u6570\u90e8\u5206\u4ece\u89e3\u91ca\u5668\u52a8\u6001\u5f97\u6765\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u5f53\u4e00\u4e2a\u51fd\u6570\u7ec4\u4ef6\u5f00\u59cb\u8c03\u7528\u7684\u4e4b\u524d\uff0c\u9996\u5148\u8fd0\u884c\u65f6\u6784\u9020\u597d\u8c03\u7528\u6808\u7684\u53c2\u6570\u4fe1\u606f\uff0c\u5e76\u8c03\u7528\u865a\u62df\u673a\u9996\u5148\u6267\u884c\u51fd\u6570\u5f00\u59cb\u5757\uff0c\u4f20\u5165\u8c03\u7528\u6808\u7684\u6808\u9876\u6307\u9488\u4ee5\u53ca\u8fd4\u56de/\u56de\u8c03\u5730\u5740\uff0c\u8fd9\u6837\u865a\u62df\u673a\u540e\u9762\u7684\u4ee3\u7801\u4e2d\u7684\u53c2\u6570\u5c31\u53ea\u9700\u8981\u6307\u5b9a\u76f8\u5bf9\u5730\u5740\uff0c\u53ef\u4ee5\u6bd4\u8f83\u4f5c\u4e3a\u5e38\u6570\u5199\u5165\u5230Wasm\u6307\u4ee4\u4e2d\uff0c\u8fd9\u6837Wasm\u89e3\u91ca\u5668\u6267\u884c\u6307\u4ee4\u5c31\u4e0d\u9700\u8981\u518d\u67e5\u627e\u5185\u5b58\u5730\u5740\uff0cCPU\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u5199\u56de\u5230\u5bc4\u5b58\u5668\u800c\u4e0d\u662f\u5185\u5b58\uff0c\u56e0\u4e3a\u6211\u4eec\u5047\u8bbe\u5730\u5740\u90fd\u662f\u76f8\u5bf9\u7684\uff0c\u90a3\u4e48\u5728\u89e3\u91ca\u4e3aWasm\u6307\u4ee4\u7684\u89e3\u91ca\u5668\u4e2d\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u628a\u4ee3\u7801\u8f6c\u5316\u4e3a\u5bf9\u5bc4\u5b58\u5668\u7684\u610f\u4e49\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7ed9\u4ed6\u503c\uff0c\u5047\u8bbeCPU\u5565\u4e5f\u4e0d\u77e5\u9053\uff0c\u5b8c\u5168\u9700\u8981\u89e3\u91ca\u5668\u6839\u636e\u6bcf\u4e2a\u6307\u4ee4\u7684\u610f\u4e49\u52a8\u6001\u5224\u65ad\u3002\u6700\u540e\u51fd\u6570\u6267\u884c\u5b8c\u4e86\uff0c\u518d\u56de\u8c03\u89e3\u91ca\u5668\u5f00\u59cb\u4e0b\u4e00\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u8282\u7701\u6bcf\u4e2a\u6307\u4ee4\u90fd\u9700\u8981\u5199\u5165\u5199\u51fa\u5185\u5b58\u7684\u64cd\u4f5c\uff0c\u56e0\u4e3a\u5185\u5b58\u5730\u5740\u5df2\u77e5\u4e86\uff0c\u6240\u4ee5\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u662f\u5e38\u6570\uff0c\u5c31\u4e0d\u9700\u8981\u518d\u5185\u5b58\u4e2d\u67e5\u627e\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u5269\u4e0b\u4e3b\u8981\u7684\u6027\u80fd\u635f\u5931\uff0c\u5c31\u662f\u6307\u4ee4\u7684\u7f13\u5b58\u3001\u9884\u53d6\u8fd9\u4e9b\u64cd\u4f5c\u4e86\uff0c\u56e0\u4e3a\u786c\u4ef6\u7ea7\u7684\u6307\u4ee4\u9884\u53d6\u80af\u5b9a\u662f\u53ea\u80fd\u6765\u81ea\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u8ddfOS\u6709\u5173\uff0c\u65e0\u6cd5\u907f\u514d\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6307\u4ee4\u4e0d\u662f\u673a\u5668\u7801\uff0c\u865a\u62df\u673a\u65e0\u6cd5\u5e94\u7528\u8fd9\u4e9b\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u5185\u5b58\u7684\u6d41\u8fdb\u6d41\u51fa\uff0c\u5176\u5e26\u6765\u7684\u6027\u80fd\u635f\u5931\u5e94\u8be5\u53ef\u4ee5\u5b8c\u5168\u62b5\u6d88\u6389\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u6838\u5fc3\u5728\u5916\u90e8\u52a8\u6001\u6784\u9020\u65b9\u6cd5\u8c03\u7528\u6808\u3002\u8fd9\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f20\u7edf\u7684OOP\u7b49\u6784\u9020\u65b9\u6cd5\uff0c\u56e0\u4e3a\u4e0d\u80fd\u7ba1\u7406\u6570\u636e\uff0c\u6240\u4ee5\u5f88\u96be\u52a8\u6001\u6784\u9020\uff0c\u56e0\u4e3a\u4f60\u65e0\u6cd5\u77e5\u9053\u65b9\u6cd5\u7b7e\u540d\uff0c\u9700\u8981\u53cd\u5c04\u7b49\u5f88\u590d\u6742\u7684\u673a\u5236\u3002\u8fd9\u5176\u5b9e\u76f8\u5f53\u4e8e\u628a \u7f16\u8bd1\u5668\u9759\u6001\u7f16\u8bd1\u65f6\u5bf9\u65b9\u6cd5\u53c2\u6570\u7684\u4fe1\u606f\u62ff\u90fd\u8fd0\u884c\u65f6\uff0c\u52a8\u6001\u8ba1\u7b97\u5f88\u8d39\u6027\u80fd\uff0c\u8fd9\u4e9b\u4fe1\u606f\u4e00\u822c\u5728\u8fd0\u884c\u65f6\u90fd\u6ca1\u6709\u4e86\u3002"),(0,n.kt)("p",null,"\u8bb0\u5f97\u597d\u50cf\u300a\u7f16\u8bd1\u539f\u7406\u300b\u4e2d\u8bf4\u539f\u672c\u51fd\u6570\u6dfb\u52a0\u7684\u9996\u5c3e\u4e24\u5757\u63a7\u5236\u7a0b\u5e8f\u662f\u53ef\u4ee5\u653e\u5230\u51fd\u6570\u5916\u7801\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u8c03\u7528\u7b80\u5355\u5168\u90e8\u590d\u5236\u5230\u6bcf\u4e2a\u51fd\u5185\u90e8\u3002\u6211\u4eec\u7684\u65b9\u6cd5\u76f8\u5f53\u4e8e\u662f\u628a\u8fd9\u4e2a\u8fd8\u539f\u56de\u6765\uff0c\u628a\u5b83\u5206\u6765\u3002\u56e0\u4e3a\u6211\u4eec\u73b0\u5728\u51fd\u6570\u662f\u52a8\u6001\u7684\uff0c\u6240\u4ee5\u4e0d\u80fd\u90a3\u6837\u53bb\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u6211\u4eec\u89e3\u91ca\u5668\u751f\u6210\u7684\u6307\u4ee4\u4e2d\uff0c\u5927\u90e8\u5206\u64cd\u4f5c\u6570\u90fd\u662f\u5e38\u91cf\u800c\u4e0d\u662f\u53d8\u91cf\uff0c\u53d8\u91cf\u610f\u5473\u7740Wasm\u5b57\u8282\u7801\u5728\u89e3\u91ca\u6267\u884c\u7684\u65f6\u5019\u6709\u9700\u8981\u591a\u51e0\u6761\u8bfb\u53d6\u5185\u5b58\u5730\u5740\u7684\u6307\u4ee4\uff0c\u8fd9\u5e26\u6765\u4e24\u4e2a\u7ed3\u679c\uff1a1\uff09\u6307\u4ee4\u6570\u51cf\u5c11\uff0c\u8fd9\u4e5f\u51cf\u5c11\u4e86Wasm\u865a\u62df\u673a\u4e2d\u67e5\u627e\u673a\u5668\u7801\u6307\u4ee4\u8df3\u6765\u8df3\u53bb\u7684\u9891\u7387\uff0c\u4f20\u7edf\u7684\u865a\u62df\u673a\u76f8\u5bf9\u4e0e\u9759\u6001\u8bed\u8a00\u7684\u4ee3\u7801\u4e0a\u7684\u5dee\u522b\u5c31\u662f\uff0c\u9759\u6001\u4ee3\u7801\u662f\u8fde\u7eed\u7684\uff0c\u4f46\u662f\u4f1a\u5b58\u5728\u4ee3\u7801\u91cd\u590d\uff0c\u865a\u62df\u673a\u7684\u673a\u5668\u7801\u662f\u5f88\u5c11\u7684\uff0c\u53ea\u6709\u6807\u51c6\u6307\u4ee4\uff0c\u4f46\u662f\u5c31\u4f1a\u8df3\u8f6c\u6bd4\u8f83\u9891\u7e41\u4ee5\u514b\u670d\u6ca1\u6709\u91cd\u590d\u7684\u95ee\u9898\uff0c\u4e0d\u8fc7\u53d6\u6307\u4ee4\u76f8\u5bf9\u4e8e\u8ba1\u7b97\u90fd\u662f\u72ec\u7acb\u7684\u6307\u4ee4\uff0c\u5e94\u8be5\u5f88\u5feb\u7684\uff1b2\uff09\u56e0\u4e3a\u4e2d\u95f4\u8ba1\u7b97\u7ed3\u679c\u76f4\u63a5\u653e\u5bc4\u5b58\u5668\uff0c\u51cf\u5c11\u5185\u5b58\u6d41\u8fdb\u6d41\u51fa\u3002")),(0,n.kt)("p",null,"\u8fd9\u6837\u51fd\u6570\u4f5c\u4e3a\u7c7b\u578b\u5c31\u662f\u6709\u975e\u5e38\u5927\u4ef7\u503c\u7684\uff0c\u5b83\u5e2e\u52a9CreationScript\u89e3\u91ca\u5668\u600e\u6837\u751f\u6210Wasm\u5b57\u8282\u7801\uff0c\u4ee5\u7ba1\u7406\u4e0a\u8ff0\u884c\u4e3a\u7684\u6267\u884c\u3002\u800c\u4e14\u5b83\u53ea\u9700\u8981\u51fd\u6570\u7c7b\u578b\u6216\u8005\u5b9a\u4e49\u5c31\u884c\uff0c\u4e0d\u9700\u8981\u77e5\u9053\u5177\u4f53\u8c03\u7528\u4ec0\u4e48\u51fd\u6570\uff0c\u53ef\u4ee5\u5355\u72ec\u7f16\u8bd1/\u89e3\u91ca\u6bcf\u4e2a\u7ec4\u4ef6\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u5c31\u662flua\u7684\u673a\u5236\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0")),(0,n.kt)("p",null,"\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\uff0c\u64cd\u4f5c\u6570\u7684\u6570\u636e\u7ed3\u6784\u662f\u5b58\u653e\u5728CPU\u7684\u5bc4\u5b58\u5668\u4e2d\u7684\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u6a21\u578b\u6765\u8bf4\u6ca1\u6709PUSH\u548cPOP\u64cd\u4f5c\uff0c\u4f46\u662f\u6307\u4ee4\u4e2d\u9700\u8981\u5305\u542b\u64cd\u4f5c\u6570\u7684\u5730\u5740(\u6216\u8005\u662f\u5bc4\u5b58\u5668)\uff0c\u5e76\u4e14\u6307\u4ee4\u9700\u8981\u663e\u5f0f\u7684\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u5730\u5740\uff0c\u800c\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u6307\u4ee4\u4e0d\u5305\u542b\u64cd\u4f5c\u6570\u7684\u4fe1\u606f\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u5f97\u5230\uff0c\u4f8b\u5982\uff0c\u5728\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u4e0b\uff0c\u4e00\u4e2a\u52a0\u6cd5\u64cd\u4f5c\u5176\u6307\u4ee4\u5c06\u4f1a\u662f\u4e0b\u9762\u8fd9\u5e45\u56fe\u6240\u793a\uff0e\n",(0,n.kt)("img",{alt:"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0",src:l(2979).Z,width:"667",height:"326"})),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"ADD R1, R2, R3 ;# Add contents of R1 and R2, store result in R3\n")),(0,n.kt)("p",null,"\u5c31\u50cf\u4e0a\u9762\u63d0\u5230\u7684\u4e00\u6837\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u662f\u6ca1\u6709PUSH\u548cPOP\u8fd9\u7c7b\u64cd\u4f5c\u7684\uff0c\u56e0\u6b64\u52a0\u6cd5\u6307\u4ee4\u53ea\u6709\u4e00\u884c\uff0c\u4e0d\u50cf\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u90a3\u6837\uff0c\u8fd9\u91cc\u9700\u8981\u663e\u5f0f\u8bf4\u660e\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e(\u8fd9\u91cc\u662f\u653e\u5728R1\uff0cR2\u5bc4\u5b58\u5668\u4e2d)\uff0c\u4f18\u70b9\u5c31\u662f\u907f\u514d\u4e86\u5927\u91cfPUSH\u548cPOP\u7684\u5f00\u9500\uff0c\u56e0\u6b64\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u5728\u6307\u4ee4\u5206\u53d1\u5faa\u73af\u8981\u6bd4\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u8981\u5feb\uff0e\n\u9664\u4e86\u4e0a\u9762\u7684\u63d0\u5230\u7684\u53ef\u4ee5\u907f\u514dPOP\u548cPUSH\u8fd9\u7c7b\u64cd\u4f5c\u5e26\u6765\u7684\u5f00\u9500\u5916\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7684\u4f18\u70b9\uff0c \u4f8b\u5982\u53ef\u4ee5\u5b9e\u73b0\u67d0\u4e9b\u65e0\u6cd5\u5728\u57fa\u4e8e\u5806\u6808\u5b9e\u73b0\u7684\u865a\u62df\u673a\u4e2d\u5b8c\u6210\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u5047\u8bbe\u73b0\u5728\u8981\u6267\u884c\u4e00\u6761\u51cf\u6cd5\u64cd\u4f5c\uff0c\u5bf9\u4e8e\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u6765\u8bf4\u4f1a\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u4fdd\u5b58\u5728\u4e00\u4e2a\u5bc4\u5b58\u5668\u4e2d\uff0c\u5f53\u8fd9\u6761\u51cf\u6cd5\u6307\u4ee4\u518d\u6b21\u6267\u884c\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u5f97\u5230\u8ba1\u7b97\u7ed3\u679c\uff0c\u4e0d\u9700\u8981\u518d\u6b21\u6267\u884c\uff0e\n\u5c3d\u7ba1\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u53c8\u5982\u4e0a\u8bf8\u591a\u7684\u4f18\u70b9\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u6765\u8bf4\uff0c\u4e5f\u5b58\u5728\u7740\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u7684\u6307\u4ee4\u5e73\u5747\u957f\u5ea6\u90fd\u8981\u5927\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\uff0c\u56e0\u4e3a\u524d\u8005\u9700\u8981\u5c06\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u653e\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u540e\u8005\u6307\u4ee4\u662f\u4e0d\u9700\u8981\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u7684\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u83b7\u5f97\uff0c\u56e0\u4e3a\u540e\u8005\u7684\u6307\u4ee4\u957f\u5ea6\u8981\u5c0f\u4e8e\u524d\u8005\uff0e"),(0,n.kt)("p",null,"\u5bc4\u5b58\u5668\u6570\u91cf\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u4e5f\u6709\u4e0d\u540c\uff1a")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u6307\u4ee4\u957f\u5ea6\u7684\u95ee\u9898\u3002\u5bc4\u5b58\u5668\u865a\u62df\u673a\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u76f4\u63a5\u6267\u884c\u5185\u5b58\u5730\u5740\uff0c\u5730\u5740\u6bd4\u8f83\u957f\uff0c\u5b83\u6ca1\u6709\u8c03\u7528\u6808\uff0c\u6570\u636e\u5728\u5185\u5b58\u4e2d\u6ca1\u6709\u987a\u5e8f\u3002\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u6784\u9020\u8c03\u7528\u6808\u6765\u662f\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u53d8\u6210\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u6837\u6307\u4ee4\u5c31\u6bd4\u8f83\u5c0f\u3002"),(0,n.kt)("p",null,"Lua\u53ea\u662f\u4e3a\u4e86\u6267\u884c\u6027\u80fd\uff0c\u53ef\u4ee5\u4e0d\u8003\u8651\u8c03\u7528\u6808\uff0c\u4f46\u662f\u6211\u4eec\u8981\u8003\u8651\u5b89\u5168\u6027\uff0c\u8c03\u7528\u6808\u662f\u5fc5\u987b\u5f97\uff0c\u56e0\u6b64\u53ef\u4ee5\u7ed3\u5408\u4e24\u8005\u4f18\u52bf\u3002"),(0,n.kt)("p",null,"\u6307\u4ee4\u957f\u5ea6\u7684\u51cf\u5c11\u53ef\u4ee5\u5927\u5927\u51cf\u5c11Wasm\u5b57\u8282\u7801\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u5927\u5c0f\u3002"),(0,n.kt)("h2",{id:"24-creationxr"},"2.4. CreationXR"),(0,n.kt)("p",null,"\u8ddf\u624b\u673a\u6700\u5927\u4e0d\u540c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u624b\u5177\u6709\u5728\u4e09\u7ef4\u4e16\u754c\u4e2d\u7684\u4f4d\u7f6e\uff0c\u5177\u5907\u521b\u5efa\u7acb\u4f53\u89c6\u89c9\u7269\u4f53\u7684\u57fa\u7840\uff0c\u4e0d\u518d\u4ec5\u9650\u4e8e\u5e73\u9762"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8eSLAM\uff0c\u4eba\u5728\u4e09\u7ef4\u4e16\u754c\u7684\u79fb\u52a8\u4e5f\u5177\u67093D\u4f4d\u7f6e\uff0c\u6240\u4ee5\u4eba\u8eab\u7684\u79fb\u52a8\u4e5f\u662f\u4ea4\u4e92\u7684\u4e00\u79cd\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"XR\u773c\u955c\u7684\u5c4f\u5e55\u66f4\u5927\uff0c\u4e16\u754c\u4e0d\u518d\u4ec5\u9650\u4e8e\u624b\u673a\u5927\u5c0f\u7684\u5c4f\u5e55\u5c3a\u5bf8")),(0,n.kt)("p",null,"\u5f53\u7136\u524d\u4e24\u8005\u5728\u624b\u673a\u4e5f\u662f\u53ef\u4ee5\u505a\u5230\uff0c\u53ea\u662f\u4f53\u9a8c\u6ca1\u90a3\u4e48\u597d"),(0,n.kt)("p",null,"\u786c\u4ef6\u8bbe\u5907\u7684\u4ea4\u4e92\u53ea\u9650\u4e8e\u624b\u52bf\u8bc6\u522b\u3001\u5b9a\u4f4d\u7b49\u57fa\u7840\u63a5\u53e3\uff0c\u5e94\u7528\u5c42\u8981\u5b9a\u4e49\u771f\u6b63\u7684\u4ea4\u4e92\u63a5\u53e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u968f\u7740\u624b\u6307\u7684\u79fb\u52a8\uff0c\u751f\u6210\u4e0d\u540c\u98ce\u683c\u7684\u7b14\u5237"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u52fe\u52d2\u4e00\u4e2a\u591a\u8fb9\u5f62\u4e4b\u540e\uff0c\u751f\u6210\u5c01\u95ed\u7684\u51e0\u4f55\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u5c06\u4e24\u4e2a\u591a\u8fb9\u5f62\u62fc\u5728\u4e00\u8d77\uff0c\u81ea\u52a8\u5408\u5e76\u6210\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u51e0\u4f55\u8868\u9762\u7684\u7eb9\u7406\u6d82\u9e26\u3001\u6750\u8d28\u7f16\u8f91\uff0c\u55b7\u7ed8"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u80fd\u6d89\u53ca\u5f88\u591a\u7269\u7406\u6a21\u62df\uff0c\u8fd9\u6837\u66f4\u52a0\u771f\u5b9e")),(0,n.kt)("p",null,"\u7531\u4e8e\u624b\u52bf\u4f4d\u7f6e\u4e0d\u662f\u7edd\u5bf9\u7cbe\u51c6\u7684\uff0c\u6240\u4ee5snapping \u7b97\u6cd5\u5f88\u5173\u952e\u2026\u2026"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u624b\u52bf\u8bc6\u522b\u5f88\u5173\u952e")),(0,n.kt)("p",null,"\u4f20\u7edfPC\u6216\u8005\u624b\u673a\u4e8c\u7ef4\u7a7a\u95f4\u521b\u5efa3D\u5f88\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u90fd\u9700\u8981\u4e00\u4e2a\u83dc\u5355\uff0c\u6216\u8005\u8bf4\u6bcf\u4e00\u4e2a\u529f\u80fd\u90fd\u662f\u4e00\u4e2a\u83dc\u5355\uff0c\u4e00\u4e2a3D\u8f6f\u4ef6\u57fa\u672c\u662f\u5c31\u662f\u4e00\u4e2a\u83dc\u5355\u7684\u51e0\u4f55\uff0c\u7528\u6237\u9700\u8981\u9996\u5148\u539f\u5219\u4e00\u79cd\u6a21\u5f0f\uff0c\u7136\u540e\u5728\u8be5\u6a21\u5f0f\u4e0b\u539f\u5219\u5177\u4f53\u7684\u529f\u80fd\u8fdb\u884c\u64cd\u4f5c\uff0c\u83dc\u5355\u53ef\u80fd\u4e0a\u767e\uff0c\u60f3\u8c61\u5c31\u662f\u5821\u5792\u4e4b\u591c\u90fd\u597d\u591a\u83dc\u5355"),(0,n.kt)("p",null,"\u4f46\u5f53\u9009\u62e9\u83dc\u5355\u4ee5\u540e\uff0c\u5b9e\u9645\u7684\u539f\u5b503D\u64cd\u4f5c\u5e76\u4e0d\u591a\uff0c\u5728XR\u4e2d\uff0c\u8fd9\u4e00\u5207\u90fd\u53ef\u4ee5\u901a\u8fc7\u624b\u52bf\u6765\u5927\u5927\u7b80\u5316\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u624b\u4e94\u6307\u6536\u62e2\u5c31\u662f\u7f29\u5c0f\uff0c\u5f20\u5f00\u5c31\u662f\u653e\u5927"),(0,n.kt)("li",{parentName:"ul"},"\u98df\u6307\u79fb\u52a8\u5c31\u662f\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u5de6\u624b\u638c\ud83d\udd90\ufe0f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e2a\u7269\u4f53\uff0c\u5de6\u624b\u624b\u52bf\u5145\u5f53\u4e00\u4e9b\u63a7\u5236\u6a21\u5f0f")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2D vs. 3D")),(0,n.kt)("p",null,"\u4f20\u7edf2D\u9f20\u6807\u6ca1\u6709\u524d\u540e\u6df1\u5ea6\u4e0a\u7684\u6982\u5ff5\uff0c\u7136\u800c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u573a\u666f\u662f3D\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u524d\u7684\u6444\u50cf\u673a\u4e3b\u8981\u662f\u7279\u5b9a\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u8fd1\u7684\u7269\u4f53")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u4f60\u9700\u8981\u5bf9\u67d0\u4e9b\u8ddd\u79bb\u6bd4\u8f83\u8fdc\u7684\u7269\u4f53\u8fdb\u884c\u7f16\u8f91\u65f6\uff0c\u5fc5\u987b\u8981\u5c06\u6444\u50cf\u673a\u79fb\u52a8\u5230\u8fd9\u4e9b\u5730\u65b9\u9644\u8fd1\uff0c\u7136\u800cPC\u4e0a\u79fb\u52a8\u6444\u50cf\u673a\u975e\u5e38\u9ebb\u70e6\uff0c\u56e0\u4e3a\u6ca1\u67093D\u8ddd\u79bb\uff0c\u6211\u4eec\u53ea\u80fd\u501f\u52a9\u9f20\u6807\u6216\u8005\u5c4f\u5e55\u4e0a\u5de6\u53f3\u4e0a\u4e0b\u7684\u6982\u5ff5\uff0c\u8fd9\u79cd\u5e73\u9762\u54113D\u7684\u6620\u5c04\u4f7f\u5f97\u53ea\u80fd\u5b9e\u73b0\u76f8\u5bf9\u4e8e\u5f53\u524d\u4f4d\u7f6e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5de6\u53f3\u4e0a\u4e0b\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5de6\u53f3\u4e0a\u4e0b\u65cb\u8f6c")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\u79fb\u52a8\u5230\u4e00\u4e2a\u8f83\u8fdc\u7684\u5730\u65b9\u4f1a\u975e\u5e38\u9ebb\u70e6\uff0c\u800c3D\u7684\u4ea4\u4e92\u5219\u4e0d\u4e00\u6837\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c06\u624b\u6307\u89e6\u53ca\u5230\u7684\u4e00\u4e2a\u70b9\u62c9\u5230\u773c\u524d"),(0,n.kt)("h3",{id:"241-unified-xr-input"},"2.4.1 Unified XR Input"),(0,n.kt)("h3",{id:"242-xr-scene-understanding"},"2.4.2 XR Scene Understanding"),(0,n.kt)("h3",{id:"243-data-driven-architecture"},"2.4.3 Data-driven Architecture"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u5e94\u8be5\u4ec5\u5173\u6ce8\u7528\u6237\u903b\u8f91\u5c42\uff0c\u5f15\u64ce\u5c42\u9762\u7684\u5f00\u53d1\u8fd8\u662f\u4f7f\u7528\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\uff0c\u6216\u8005\u6709\u4e00\u4e9b\u6570\u636e\u9a71\u52a8\uff0c\u4f46\u5b83\u4e0d\u662fECS\u67b6\u6784\uff0c\u800c\u662f\u4e3a\u4e86\u4fbf\u4e8e\u5982\u8de8\u5e73\u53f0\u6027\u3001\u6e32\u67d3\u7ba1\u7ebf\u914d\u7f6e\u7b49\u8fd9\u6837\u7684\u76ee\u7684\uff0c\u9664\u6b64\u4e4b\u5916\uff0c\u9762\u5411\u5bf9\u8c61\u5177\u6709\u66f4\u597d\u7684\u80fd\u529b\xb7"),(0,n.kt)("h3",{id:"244-\u4ea4\u4e92"},"2.4.4 \u4ea4\u4e92"),(0,n.kt)("p",null,"\u8981\u60f3\u5728XR\u8bbe\u5907\u4e0a\u8fdb\u884c\u4ea4\u4e92\uff08\u5305\u62ec\u5185\u5bb9\u521b\u4f5c\uff09\uff0c\u5e76\u4e14\u9762\u5411\u66f4\u5927\u4f17\u7684\u7528\u6237\uff0c\u5fc5\u987b\u5177\u6709\u66f4\u4f4e\u4ea4\u4e92\u95e8\u69db\uff0c\u4f20\u7edf\u7684\u4e92\u52a8\u7a0b\u5e8f\u5982\u6e38\u620f\u7684\u64cd\u4f5c\u95e8\u69db\u8fd8\u662f\u6bd4\u8f83\u9ad8\u3002\u4f8b\u5982\uff0c\u4f7f\u7528\u624b\u52bf\u89e6\u6478\u7b49\u6309\u952e\u63a7\u5236\u4eba\u7269\u57283D\u7a7a\u95f4\u4e2d\u8fdb\u884c\u884c\u8d70\uff0c\u4f7f\u7528\u590d\u6742\u7684\u6309\u952e\u7ec4\u5408\u63a7\u5236\u89d2\u8272\u5b8c\u6210\u4e00\u4e9b\u590d\u6742\u7684\u4e1c\u897f\uff0c\u4ecd\u7136\u662f\u6e38\u620f\u95e8\u69db\u6bd4\u8f83\u9ad8\u7684\u5176\u4e2d\u4e00\u4e2a\u90e8\u95e8\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u64cd\u63a7\u6280\u5de7\u672c\u8eab\u88ab\u5f53\u505a\u6e38\u620f\u673a\u5236\u5f88\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u5b83\u80fd\u5e26\u6765\u73a9\u6cd5\u7684\u4e50\u8da3\uff0c\u8fd9\u65e0\u53ef\u539a\u975e\uff0c\u4f46\u662f\u4e92\u52a8\u5185\u5bb9\u80cc\u540e\u672c\u8eab\u6240\u8868\u8fbe\u7684\u6545\u4e8b\u3001\u7cfb\u7edf\u4e4b\u95f4\u4ea4\u4e92\u7684\u673a\u5236\u7b49\u4ecd\u7136\u624d\u662f\u4e92\u52a8\u5185\u5bb9\u7684\u6838\u5fc3\uff0c\u5b83\u8868\u8fbe\u7684\u4e1c\u897f\u4f1a\u66f4\u591a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u548c\u8ba1\u7b97\u67b6\u6784\u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5728\u4ea4\u4e92\u9886\u57df\u505a\u4e00\u4e9b\u57fa\u7840\u521b\u65b0\u3002"),(0,n.kt)("h4",{id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"},"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u7a7a\u95f4\u4ea4\u4e92\u5f0f\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u7684\u4e3b\u8981\u5f62\u5f0f\uff0c\u5305\u62ec\u79fb\u52a8\u6444\u50cf\u5934\u3001\u79fb\u52a8\u573a\u666f\u3001\u9009\u62e9\u7269\u4f53\u3001\u79fb\u52a8\u7269\u4f53\u7b49\u7b49\uff0c\u5e38\u7528\u7684\u4e00\u4e9b\u64cd\u4f5c\u65b9\u5f0f\uff0c\u5982\u624b\u673a\u4e0a\u7684\u6ed1\u52a8\u3001\u70b9\u51fb\u3001\u53cc\u51fb\u7b49\u624b\u52bf\uff0c\u4ee5\u53caPC\u4e0a\u7684\u952e\u76d8\u548c\u9f20\u6807\uff0c\u6216\u8005\u4e3b\u673a\u6e38\u620f\u673a\u4e0a\u7684\u9065\u611f\u548c\u63a7\u5236\u624b\u67c4\u3002"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4e92\u52a8\u5185\u5bb9\u6700\u9891\u7e41\u548c\u6700\u6838\u5fc3\u7684\u64cd\u4f5c\u662f\u5173\u4e8eCamera\u7684\u79fb\u52a8\uff0c\u8fd9\u65e2\u53ef\u4ee5\u662f\u79fb\u52a8\u89d2\u8272\uff0c\u4e5f\u53ef\u4ee5\u662f\u79fb\u52a8\u573a\u666f\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\uff0c\u51e0\u4e4e\u90fd\u9700\u8981\u4e00\u79cd\u673a\u5236\u80fd\u591f\u63a7\u5236\u5728\u6574\u4e2a\u7a7a\u95f4\u8fdb\u884c\u64cd\u4f5c\u3002\u8fd9\u6837\u7684\u624b\u52bf\u64cd\u4f5c\u901a\u5e38\u6bd4\u8f83\u590d\u6742\uff0c\u5c24\u5176\u5bf9\u4e8e\u8f83\u8fdc\u5904\u7269\u4f53\u7684\u64cd\u4f5c\uff0c\u4f1a\u968f\u7740\u8ddd\u79bb\u548c\u906e\u6321\u7b49\u95ee\u9898\u53d8\u5f97\u66f4\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u4ee5\u89d2\u8272\u5bf9\u53c2\u8003\u7cfb\u79fb\u52a8\u4e16\u754c\uff0c\u548c\u4ee5\u4e16\u754c\u4e3a\u53c2\u8003\u7cfb\u79fb\u52a8\u89d2\u8272\uff0c\u8fd9\u4e24\u79cd\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u4f46\u662f\u5f53\u4f60\u9700\u8981\u540c\u65f6\u652f\u6301\u8fd9\u4e24\u8005\u662f\uff0c\u4e8b\u60c5\u4f1a\u53d8\u5f97\u590d\u6742\uff0c\u5c24\u5176\u79fb\u52a8\u7269\u4f53\u4f1a\u9762\u4e34\u66f4\u591a\u7a7a\u95f4\u6761\u4ef6\u3002\u300a\u5821\u5792\u4e4b\u591c\u300b\u9488\u5bf9\u6b64\u8bbe\u8ba1\u4e86\u4e00\u79cd\u7edf\u4e00\u7684\u67b6\u6784\uff0c\u5728\u624b\u673a\u6a21\u5f0f\u4e2d\uff0c\u5b83\u5c06\u7269\u4f53\u4e0e\u89d2\u8272\u4e4b\u95f4\uff0c\u501f\u52a9\u56fa\u5b9a\u7684\u5c4f\u5e55\u4e2d\u592e\u4f4d\u7f6e\u4fdd\u6301\u4e00\u79cd\u76f8\u5bf9\u5173\u7cfb\uff0c\u56e0\u6b64\u53ef\u4ee5\u628a\u7269\u4f53\u7684\u79fb\u52a8\u64cd\u4f5c\u4e0e\u73a9\u5bb6\u7684Camera\u7ed3\u5408\u8d77\u6765\u3002\u5927\u5927\u7b80\u5316\u4e86\u8fd9\u79cd\u4ea4\u4e92\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite-Creative-Mode",src:l(9456).Z,width:"3342",height:"1668"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u79cd\u65b9\u5f0f\u7b80\u5316\u4e86\u64cd\u4f5c\uff0c\u4f46\u662f\u5982\u679c\u5728XR\u7684\u73af\u5883\uff08\u5305\u62ec\u624b\u673a\u3001AR\u548cVR\u773c\u955c\uff09\uff0c\u7531\u4e8e\u8bbe\u5907\u672c\u8eab\u5177\u5907\u5b9a\u4f4d\u529f\u80fd\uff0c\u56e0\u6b64\u5b83\u8ddf\u771f\u5b9e\u4e16\u754c\u76843\u7ef4\u7a7a\u95f4\u5173\u8054\u8d77\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4eba\u5728\u771f\u5b9e3\u7ef4\u7a7a\u95f4\u7684\u79fb\u52a8\u4e0e\u865a\u62dfCamera\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u7a7a\u95f4\u662f\u53ef\u4ee5\u76f8\u5bf9\u9759\u6b62\u4e0d\u52a8\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u771f\u5b9e\u7a7a\u95f4\u4eba\u7684\u79fb\u52a8\u5145\u5f53\u4e86\u865a\u62dfCamera\u7684\u79fb\u52a8")),(0,n.kt)("p",null,"\u501f\u52a9\u4e0a\u8ff0\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u6709\u671b\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7b80\u5316XR\u7684\u7a7a\u95f4\u4ea4\u4e92\u95e8\u69db\u3002"),(0,n.kt)("h4",{id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92"},"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4f20\u7edf\u7684\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u90fd\u662f\u53ea\u6d89\u53ca\u52303D\u7684\u7a7a\u95f4\u4ea4\u4e92\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u4ea4\u4e92\u8f6c\u6362\u5230XR\u8bbe\u5907\u65f6\uff0c\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u539f\u672c\u5728\u624b\u673a\u4e0a\u53ea\u9700\u8981\u70b9\u51fb\u5c4f\u5e55\u9009\u62e9\u7684\u65b9\u5f0f\uff0c\u4e5f\u9700\u8981\u53d8\u6210\u4e00\u79cd\u7a7a\u95f4\u4ea4\u4e92")),(0,n.kt)("p",null,"\u8fd9\u5927\u5927\u589e\u52a0\u4e86\u95e8\u69db\uff0c\u4f8b\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6bcf\u4e00\u4e2a\u7269\u54c1\u7684\u9009\u62e9\u90fd\u9700\u8981\u79fb\u52a8\u865a\u62df\u9065\u611f\u6765\u786e\u5b9a\u8981\u64cd\u4f5c\u7684\u5185\u5bb9\u3002\u8fd9\u5728\u4f20\u7edf\u7684\u624b\u673a\u6216\u8005PC\u4e0a\u539f\u672c\u662f\u5f88\u7b80\u5355\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"kokid",src:l(6186).Z,width:"640",height:"360"})),(0,n.kt)("p",null,"\u9488\u5bf9\u6b64\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684\u7a7a\u95f4\u53d8\u6362\u65b9\u6cd5\uff0c\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u662f\u8ba9\u6240\u64cd\u4f5c\u7684\u5185\u5bb9\u5c3d\u53ef\u80fd\u8bed\u4e49\u5316\uff0c\u7136\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u501f\u52a9\u8bed\u97f3\u6765\u8f85\u52a9\u64cd\u4f5c\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u5f88\u96be\u4f7f\u7528\u8bed\u97f3\u8f85\u52a9\uff0c\u56e0\u4e3a\u4fe1\u606f\u90fd\u662f\u6309\u7ed3\u6784\u63cf\u8ff0\u7684\uff0c\u4fe1\u606f\u901a\u8fc7\u6ca1\u6709\u8bed\u4e49\u3002\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5bf9\u6bcf\u4e2a\u5143\u7d20\u52a0\u4e2a\u6807\u7b7e\u4e4b\u7c7b\u7684\u6765\u8f85\u52a9\u8bed\u97f3\u3002"),(0,n.kt)("p",null,"RealityIS\u7ec4\u4ef6\u7684\u8bed\u4e49\u7279\u6027\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u80fd\u5728\u521b\u4f5c\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u5c3d\u53ef\u80fd\u8f83\u5c11\u5bf9\u7a7a\u95f4\u4ea4\u4e92\u7684\u4f9d\u8d56\uff0c\u4ece\u800c\u4f7f\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u66f4\u7b80\u5355\u3002"),(0,n.kt)("h2",{id:"25-creation-ai"},"2.5 Creation AI"),(0,n.kt)("h3",{id:"251-semantics-based-creating"},"2.5.1 Semantics-based Creating"),(0,n.kt)("p",null,"\u57fa\u4e8e \u8bed\u4e49 \u7684 \u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("h3",{id:"252-procedural-content-generation"},"2.5.2 Procedural Content Generation"),(0,n.kt)("h3",{id:"253-intelligent-simulation"},"2.5.3 Intelligent Simulation"),(0,n.kt)("h3",{id:"254-research"},"2.5.4 Research"),(0,n.kt)("p",null,"\u884c\u4e3a\u5206\u6790\u4e0e\u7814\u7a76"),(0,n.kt)("h2",{id:"26-creation-cloud"},"2.6 Creation Cloud"),(0,n.kt)("h3",{id:"261-creation-management"},"2.6.1 Creation Management"),(0,n.kt)("h4",{id:"2611-creationid"},"2.6.1.1 CreationID"),(0,n.kt)("p",null,"2\u3001\u573a\u666f\u5230\u8fbe\u53ca\u65f6\u6027"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u7684\u573a\u666f\u90fd\u5f88\u5927\uff0c\u800c\u4e14\u90fd\u9884\u8bbe\u4e00\u5b9a\u7684\u6d41\u7a0b\u548c\u8def\u7ebf\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u73a9\u5bb6\u90fd\u5fc5\u987b\u4ece\u8d77\u70b9\uff0c\u901a\u8fc7\u524d\u9762\u6240\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u8bbe\u8ba1\u7684\u5173\u5361\uff0c\u624d\u80fd\u5230\u8fbe\u67d0\u4e2a\u573a\u666f\u70b9\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u662f\u9759\u6001\u573a\u666f\u5982\u5854\u9632\uff0c\u4e09\u6d88\u6e38\u620f\uff0c\u6a21\u62df\u7ecf\u8425\u6e38\u620f\uff0c\u5b83\u7684\u72b6\u6001\u4e5f\u4e0d\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u4ece\u96f6\u5f00\u59cb\u628a\u524d\u9762\u7684\u7b49\u7ea7\u90fd\u5b8c\u6210\u4e86\uff0c\u624d\u80fd\u770b\u5230\u8be5\u573a\u666f\u7684\u67d0\u4e2a\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5982\u4e16\u754c\u76f8\u5bf9\u6bd4\u8f83\u9759\u6001\u7684\u5f00\u653e\u573a\u666f\uff0c\u5b83\u7684\u6574\u4e2a\u4e16\u754c\u90fd\u5f88\u5927\uff0c\u4f60\u5f88\u96be\u8ba9\u53e6\u4e00\u4e2a\u73a9\u5bb6\u76f4\u63a5\u5b9a\u4f4d\u5230\u67d0\u4e2a\u4f60\u6307\u5b9a\u7684\u5730\u65b9\uff0c\u4ed6\u4eec\u53ef\u80fd\u8981\u6709\u4e00\u4f1a\u624d\u80fd\u5230\u8fbe\uff0c\u4f8b\u5982\u4e00\u822c\u4f1a\u5206\u4e3a\u4e00\u4e9b\u533a\uff0c\u73a9\u5bb6\u53ef\u80fd\u80fd\u8fdb\u53bb\u4e00\u4e2a\u5927\u533a\u4e00\u4e2a\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u4f46\u662f\u5269\u4e0b\u7684\u8981\u72ec\u7acb\u884c\u8d70\u4e00\u6bb5\u65f6\u95f4\uff0c\u5e76\u4e14\u8981\u77e5\u9053\u65b9\u5411")),(0,n.kt)("p",null,"\u7136\u800c\u6211\u4eec\u9700\u8981\u7684\u662f\u8ba9\u88ab\u5206\u4eab\u7684\u73a9\u5bb6\u80fd\u591f\u6700\u53ca\u65f6\u7684\u3001\u7acb\u523b\u5448\u73b0\u67d0\u4e2a\u5174\u8da3\u70b9\uff0c\u5e76\u4e14\u670b\u53cb\u770b\u5230\u7684\u662f\u540c\u4e00\u72b6\u6001\uff0c\u751a\u81f3\u540c\u4e00\u4e2aCamera\u7684\u4f4d\u7f6e\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u901a\u5e38\u662f\u5c0f\u573a\u666f\u7684\uff0c\u72ec\u7acb\u7684\uff0c\u65e0\u6bd4\u8f83\u590d\u6742\u72b6\u6001\u7684\u64cd\u4f5c"),(0,n.kt)("h3",{id:"262--creation-code-library"},"2.6.2 Creation Code Library"),(0,n.kt)("p",null,"\u4ee3\u7801\u5e93\u662f\u4ee5\u6807\u51c6\u4e3a\u5355\u4f4d\u5bf9\u5176\u8fdb\u884c\u5206\u7c7b\uff0c\u6bcf\u4e2a\u6807\u51c6\u4f1a\u5bf9\u5e94\u65e0\u6570\u4e2a\u5b9e\u73b0\u8be5\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u6807\u51c6\u5e76\u4e0d\u5305\u542b\u7ec4\u4ef6\uff0c\u5b83\u53ea\u4f5c\u4e3a\u7528\u6237\u9009\u62e9\u7ec4\u4ef6\u6216\u8005\u5f00\u53d1\u8005\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u5206\u7c7b\uff0c\u4f8b\u5982\u4e3a\u4e86\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u67d0\u4e2a\u7ec4\u4ef6\u53ef\u80fd\u4f7f\u7528\u6765\u81ea\u4e24\u4e2a\u6807\u51c6\u7684\u7b26\u53f7\u3002"),(0,n.kt)("h4",{id:"2621-\u6807\u51c6\u7ba1\u7406"},"2.6.2.1 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u5b83\u5c31\u662f\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u56f4\u7ed5\u6807\u51c6\u4f1a\u6709\u793e\u533a\u548c\u8ba8\u8bba\uff0c\u6807\u51c6\u4f5c\u4e3a\u4e00\u79cd\u7ec4\u4ef6\u5206\u7c7b\u548c\u68c0\u7d22\u4f9d\u636e\uff0c\u53ef\u4ee5\u67e5\u8be2\u6240\u6709\u4e0e\u8be5\u6807\u51c6\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u540d\u79f0\u662f\u552f\u4e00\u7684\u3002"),(0,n.kt)("p",null,"\u4e0d\u540c\u7684\u5f00\u53d1\u8005\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7c7b\u4f3c\u7684\u6807\u51c6\uff0c\u53ea\u662f\u4f60\u9700\u8981\u53bb\u53d1\u5c55\u81ea\u5df1\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u901a\u8fc7\u81ea\u5df1\u5f00\u53d1\u66f4\u4e30\u5bcc\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u9080\u8bf7\u522b\u7684\u5f00\u53d1\u8005\u9488\u5bf9\u4f60\u7684\u6807\u51c6\u5f00\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u6807\u51c6\u53ea\u5305\u542b\u4e24\u4e2a\u7248\u672c\uff0c\u4ee5\u51cf\u5c11\u7248\u672c\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff0c\u4ee5\u53ca\u59cb\u7ec8\u4fdd\u6301\u7528\u6237\u7ec4\u4ef6\u66f4\u65b0\uff0c\u53c2\u89c14.11.3.4\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"},"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5305\u7684\u7ba1\u7406\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8868\u5199\u7ec4\u4ef6\u65f6\uff0c\u5bf9\u5f15\u7528\u7684\u6807\u51c6\u7b26\u53f7\u8fdb\u884c\u89e3\u91ca\u548c\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u5bf9\u5b9e\u4f53\u6dfb\u52a0\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u65f6\uff0c\u81ea\u52a8\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u4ee5\u53ca\u52a8\u6001\u4fee\u6539Creation Table\u7684\u5e03\u5c40")),(0,n.kt)("p",null,"\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u8fd9\u91cc\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u624b\u52a8\u7ef4\u62a4\u7248\u672c\u53f7\uff0c\u53c2\u89c12.7.5\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"263-multi-player--services"},"2.6.3 Multi-player Services"),(0,n.kt)("h4",{id:"2631-voice-service"},"2.6.3.1 Voice Service"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And epic is con conscientiously making an effort to do this in everything we do. Uh, for example, we're moving to a web RTC based, uh, voice coms framework, um, in Fortnite for voice and text and video chat, so that we can start integrating with other services, you know, other platforms, other stores, other echo systems, other chat clients, um, and have shared social experiences across different game clients. You know, we already have some standards for identity and authentication. We can expand them from there with new standards, for friends and connectivity.")),(0,n.kt)("h3",{id:"264-\u7aef\u4e91\u534f\u540c"},"2.6.4 \u7aef\u4e91\u534f\u540c"),(0,n.kt)("p",null,"\u73b0\u6709\u5f15\u64ce\u67b6\u6784\u5f88\u96be\u505a\u5230\u7aef\u4e91\u534f\u540c\uff0c\u4f8b\u5982\u5927\u5bb6\u60f3\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u548c\u4ea4\u4e92\u653e\u7aef\u4fa7"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u7aef\u53ef\u4ee5\u5171\u4eab\u7684\u5728\u591a\u4e2a\u7528\u6237\u4e4b\u95f4\u5171\u4eab")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u90fd\u5f88\u96be\uff0c\u6216\u8005\u5728\u539f\u6709\u5f15\u64ce\u67b6\u6784\u4e0b\u62c6\u5206\u5f88\u96be\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5176\u5b9e\u8fd8\u6709\u53e6\u5916\u4e00\u4e9b\u534f\u540c\uff0c\u4f8b\u5982AOT\u7684\u9884\u7f16\u8bd1\u7b49\uff0c\u8fd9\u79cd\u9700\u8981\u8f6f\u4ef6\u67b6\u6784\u8ddf\u81ea\u5df1\u6d41\u7a0b\u7684\u8054\u5408\u8bbe\u8ba1\u3002"),(0,n.kt)("h4",{id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"},"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7ec4\u4ef6\u90fd\u5e94\u8be5\u5728\u4e91\u7aef\u6267\u884c\uff0c\u5c24\u5176\u8003\u8651\u5230\u5f88\u591a\u903b\u8f91\u5b9e\u9645\u4e0a\u8ddf\u7528\u6237\u663e\u793a\u662f\u65e0\u5173\u7684\u3002"),(0,n.kt)("h4",{id:"2642-client-as-a-display"},"2.6.4.2 Client as a Display"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6838\u5fc3\u601d\u8def\uff1a\u7aef\u4fa7\u53ea\u9700\u8981\u5b58\u50a8\u548c\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u5185\u5bb9\uff0c\u6bd4\u5982\u5927\u90e8\u5206UI\u548c\u89c6\u89c9\u6548\u679c\u76f8\u5173\u7684\u5185\u5bb9\u3002\u5176\u4ed6\u7684\u903b\u8f91\u548c\u6570\u636e\uff0c\u5982\u679c\u5b83\u4eec\u867d\u7136\u662f\u6838\u5fc3\u6570\u636e\uff0c\u4f46\u662f\u4e0d\u4f1a\u76f4\u63a5\u663e\u793a\uff0c\u4e5f\u4e0d\u5e94\u8be5\u5b58\u5728\u4e8e\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u811a\u672c\u4e2d\u8981\u533a\u5206\u54ea\u4e9b\u662f\u663e\u793a\u7ec4\u4ef6\uff0c\u54ea\u4e9b\u6570\u636e\u662f\u8ddf\u663e\u793a\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u4e0e\u663e\u793a\u76f8\u5173\u7684\u6570\u636e\uff0c\u5b83\u4eec\u5728\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u90fd\u4f1a\u6709\u5b58\u50a8\u7684\u503c\uff0c\u4f46\u662f\u8fd9\u4e9b\u503c\u6709\u53ef\u80fd\u662f\u670d\u52a1\u5668\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u5982\u679c\u662f\u670d\u52a1\u5668\u5199\u5165\u7684\u503c\uff0c\u670d\u52a1\u5668\u4f1a\u81ea\u52a8\u5904\u7406\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u8fd9\u4e2a\u503c\u597d\u50cf\u5c31\u662f\u7aef\u4fa7\u81ea\u5df1\u67d0\u4e2a\u903b\u8f91\u8ba1\u7b97\u7684\uff0c\u5b83\u968f\u65f6\u53ef\u4ee5\u4ece\u5185\u5b58\u4e2d\u83b7\u53d6\u5230\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u8981\u5c06\u8fd9\u4e00\u5207\u9690\u85cf\u8d77\u6765\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u4ed6\u50cf\u4e00\u4e2a\u865a\u62df\u5185\u5b58\uff0c\u7aef\u4fa7\u968f\u65f6\u90fd\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("h4",{id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"},"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"),(0,n.kt)("h4",{id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"},"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"),(0,n.kt)("h4",{id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f"},"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f"),(0,n.kt)("h3",{id:"265-\u5e76\u884c\u8ba1\u7b97"},"2.6.5 \u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u5f88\u96be\u62bd\u53d6\u51fa\u5c0f\u9897\u7c92\u7684\u8ba1\u7b97\uff0c\u6240\u4ee5\u51e0\u4e4e\u65e0\u6cd5\u505a\u5e76\u884c\u8ba1\u7b97\uff0c\u4e00\u4e2a\u6e38\u620f\u5fc5\u987b\u5728\u4e00\u4e2a\u673a\u5668\u4e0a\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\u548c\u4ee3\u7801\u3002\u800c\u5f53\u8fd9\u4e2a\u201c\u6e38\u620f\u201d\u662f\u4e00\u4e2a\u65e0\u7a77\u7684\u5143\u5b87\u5b99\u4e16\u754c\u65f6\uff0c\u8fd9\u79cd\u8ba1\u7b97\u4f1a\u53d8\u5f97\u8d8a\u6765\u8d8a\u4f4e\u6548\u548c\u6602\u8d35\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u505a\u6cd5\uff0c\u5982\u679c\u4e0d\u5bf9\u6570\u636e\u505a\u7cbe\u5fc3\u7684\u7ba1\u7406\uff0c\u6700\u591a\u53ea\u80fd\u505a\u5230\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5757\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u5316\u6d41\u6c34\u7ebf")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u4e3b\u8981\u95ee\u9898\u662f\uff0c\u5b83\u7684\u6570\u636e\u4ecd\u7136\u6ca1\u6709\u62c6\u5206\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u5b83\u53ef\u4ee5\u5728\u4e00\u4e2a\u673a\u5668\u5185\u5f88\u597d\u5730\u505a\u591a\u7ebf\u7a0b\uff0c\u4f46\u662f\u5f53\u5206\u914d\u5230\u591a\u53f0\u673a\u5668\u65f6\uff0c\u6bcf\u53f0\u673a\u5668\u90fd\u8981\u62f7\u8d1d\u51e0\u4e4e\u6240\u6709\u7684\u3001\u76f8\u540c\u7684\u6570\u636e\uff0c\u4f7f\u5f97\u5e76\u884c\u8ba1\u7b97\u7684\u7ba1\u7406\u96be\u5ea6\u5927\u5927\u589e\u52a0\u3002"),(0,n.kt)("p",null,"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b\uff0c\u56e0\u4e3a\u6d41\u6c34\u7ebf\u4e4b\u95f4\u7684\u987a\u5e8f\uff0c\u4e5f\u4f1a\u589e\u52a0\u7ba1\u7406\u548c\u8c03\u5ea6\u7684\u96be\u5ea6\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u4e3b\u8981\u9488\u5bf9 GPU\uff0c\u7531\u4e8eGPU\u8ba1\u7b97\u662f\u9ad8\u5ea6\u5e76\u884c\u7684\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u4f9d\u8d56\u6bd4\u8f83\u5c0f \uff0c\u6240\u6709\u7406\u8bba\u4e0a\u53ef\u4ee5\u5206\u533a\u57df\u6216\u8005\u5206\u5757\u8fdb\u884c\u8ba1\u7b97\u3002\u4f46\u8fd9\u4e0d\u662f\u7edd\u5bf9\u7684\uff0c\u4f8b\u5982\u7eb9\u7406\u91c7\u6837\uff0c\u9634\u5f71\uff0c\u540e\u5904\u7406\u7b49\u6280\u672f\uff0c\u901a\u8fc7\u662f\u9700\u8981\u5bf9\u7eb9\u7406\u8fdb\u884c\u4efb\u610f\u91c7\u6837\u7684\uff0c\u91c7\u7528\u865a\u62df\u5316\u6d41\u6c34\u7ebf\u8fd9\u4e00\u5757\u6709\u5f88\u591a\u95ee\u9898\u9700\u8981\u5904\u7406\u3002\u76ee\u524d\u770b\u8d77\u6765\u4ec5\u6709\u7c7b\u4f3cEpic Games\u7684\u51e0\u4f55\u88c1\u526a\u662f\u5408\u7406\u7684\uff0c\u4fdd\u8bc1\u8ba1\u7b97\u662f\u7ef4\u6301\u5728\u4e00\u4e2a\u4e0a\u9650\uff0c\u800c\u73b0\u4ee3GPU\u8ba1\u7b97\u8fd9\u6837\u7684\u4e0a\u9650\u901a\u5e38\u95ee\u9898\u4e0d\u5927\u3002\u4f46\u7f3a\u70b9\u662f\u8fd9\u90e8\u5206\u6570\u636e\u7ba1\u7406\u7684\u5f00\u9500\u4e5f\u4e0d\u5c0f\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0d\u7ba1\u600e\u6837\uff0cGPU\u7684\u6e32\u67d3\u90e8\u5206\u901a\u8fc7\u88c1\u526a\uff0c\u76ee\u524d\u770b\u8d77\u6765\u662f\u5b58\u5728\u6bd4\u8f83\u5b8c\u5584\u7684\u7406\u8bba\u548c\u5de5\u7a0b\u5b9e\u8df5\u4e86\uff0c\u6240\u4ee5\u6700\u5927\u7684\u95ee\u9898\u662fCPU\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5f53\u6240\u6709\u8ba1\u7b97\u5904\u4e8e\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\uff0c\u903b\u8f91\u8ba1\u7b97\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u770b\uff0cOOP\u5fc5\u7136\u4e0d\u5408\u9002\uff0cUnreal Engine\u7684\u65b9\u5f0f\u8fd8\u6ca1\u6709\u5b58\u5728\u8f83\u5927\u7684\u95ee\u9898\uff0c\u662f\u56e0\u4e3a\u5b83\u7684\u6e38\u620f\u903b\u8f91\u90e8\u5206\u7684\u89c4\u6a21\u8fd8\u4e0d\u591f\u5927\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5fc5\u7136\u8981\u5c06\u6570\u636e\u548c\u903b\u8f91\u62c6\u5206\u6210\u4e00\u6bb5\u4e00\u6bb5\u5c0f\u7684\u8ba1\u7b97\u5355\u5143\uff0c\u4e0d\u7ba1\u5bf9\u4e8e\u6570\u636e\u8fd8\u662f\u8ba1\u7b97\u6307\u4ee4\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f97\u53ef\u4ee5\u65e0\u9650\u5e76\u884c\u5316\uff0c\u56e0\u6b64ECS\u7c7b\u4f3c\u7684\u6570\u636e\u9a71\u52a8\u51e0\u4e4e\u662f\u672a\u6765\u552f\u4e00\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5b83\u5728\u4e00\u4e2a\u7a0b\u5e8f\u5185\u90e8\u5929\u751f\u5730\u5c06\u6570\u636e\u548c\u903b\u8f91\u533a\u5206\u51fa\u6765\u3002"),(0,n.kt)("h4",{id:"2651-\u5206\u5e03\u5f0fcreation-table"},"2.6.5.1 \u5206\u5e03\u5f0fCreation Table"),(0,n.kt)("p",null,"\u5f53\u8ba1\u7b97\u548c\u6570\u636e\u80fd\u591f\u88ab\u5212\u5206\u4e3a\u5c0f\u5757\u6570\u636e\u65f6\uff0c\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u4e0d\u518d\u88ab\u770b\u505a\u662f\u4e00\u4e2a\u4e0d\u53ef \u5206\u5272\u7684\u6574\u4f53\uff0c\u5b83\u7684\u6570\u636e\u548c\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u88ab\u7b80\u5355\u5730\u5212\u5206\u4e3a\u591a\u4e2a\u72ec\u7acb\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u5f88\u5bb9\u6613\u88ab\u5206\u914d\u5230\u591a\u53f0\u670d\u52a1\u5668\u4e0a\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u4fdd\u8bc1\u77e5\u9053\u4e0d\u540c\u7684\u6e38\u620f\u5bf9\u8c61\u5bf9\u5e94\u7684\u670d\u52a1\u5668\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u5e76\u884c\u8ba1\u7b97\u67b6\u6784\u53d8\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e32\u67d3\u5728\u5ba2\u6237\u7aef\u6267\u884c\uff0c\u901a\u8fc7\u5f88\u597d\u7684\u51e0\u4f55\u88c1\u526a\u4fdd\u8bc1\u6027\u80fd\u7684\u4e0a\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5728\u4e91\u7aef\u88ab\u5f88\u597d\u5730\u5206\u5e03\u8ba1\u7b97")),(0,n.kt)("h3",{id:"266-rpc"},"2.6.6 RPC"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d"),(0,n.kt)("h2",{id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"},"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"),(0,n.kt)("h3",{id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf"},"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf"),(0,n.kt)("h3",{id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b"},"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143"},"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143"),(0,n.kt)("p",null,"\u4ee5\u5217\u8868\u4e3a\u6838\u5fc3\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u5c06\u4ee3\u7801\u5206\u4e3a\u4e24\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u64cd\u4f5c\u5217\u8868\u7684\u6838\u5fc3\u529f\u80fd\uff0c\u5982filter\uff0cmap\u548creduce"),(0,n.kt)("li",{parentName:"ul"},"\u9ad8\u9636\u51fd\u6570")),(0,n.kt)("p",null,"\u524d\u8005\u5728\u51fd\u6570\u5f0f\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u901a\u5e38\u901a\u8fc7\u5e93\u7684\u5f62\u5f0f\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u66f4\u591a\u4f7f\u7528\u8fd9\u4e9b\u5e93\u5e76\u63d0\u4f9b\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\u6709\u7c7b\u4f3c\u7684\u601d\u60f3\uff0c\u6211\u4eec\u5c06\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u770b\u505a\u5217\u8868\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u90fd\u662f\u5e76\u884c\u8ba1\u7b97\uff0c\u90fd\u662f\u9488\u5bf9\u5217\u8868\u7684\u8ba1\u7b97\uff0c\u54ea\u6015\u6574\u4e2a\u5217\u8868\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\uff08\u8fd0\u884c\u65f6\u4f1a\u6839\u636e\u5143\u7d20\u4e2a\u6570\u4ee5\u51b3\u5b9a\u662f\u5426\u9700\u8981\u4f7f\u7528\u5e76\u884c\u5316\u6307\u4ee4\uff09\u3002\u5728RealityIS\u4e2d\uff0cfilter\uff0cmap\u548creduce\u8fd9\u4e9b\u5e95\u5c42\u51fd\u6570\u7531\u5e73\u53f0\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u7c7b\u4f3c\u4e8e\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u7ec4\u4ef6\u5305\u542b\u4e09\u4e2a\u51fd\u6570\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"filter\uff1a\u63d0\u4f9b\u7b5b\u9009\u6761\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"map\uff1a\u4e00\u822c\u7684\u903b\u8f91\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"reduce\uff1a\u5408\u5e76\u7edf\u8ba1\u4e4b\u7c7b\u7684\u529f\u80fd\uff0c\u9700\u8981\u6dfb\u52a0\u4e00\u4e9b\u7d2f\u52a0\u503c\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd0\u884c\u65f6\u4f1a\u9996\u5148\u6267\u884cfilter\u51fd\u6570\uff0c\u4ee5\u786e\u4fddmap\u548creduce\u6267\u884c\u7684\u51fd\u6570\u53c2\u6570\u5bf9\u8c61\u4e0d\u80fd\u4e3a\u7a7a\uff0c\u4e8b\u5b9e\u4e0a\u8fd0\u884c\u65f6\u4e5f\u4fdd\u8bc1filter\u6267\u884c\u7684\u96c6\u5408\u5217\u8868\u4e5f\u4e0d\u4f1a\u4e3a\u7a7a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5CreationSctipt\u6ca1\u6709\u7a7a\u503c\u7684\u6982\u5ff5\u3002\u6bcf\u4e2a\u7ec4\u4ef6\u5904\u7406\u7684\u4e5f\u90fd\u662f\u5355\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5b83\u4eec\u4e00\u822c\u4e0d\u5904\u7406\u96c6\u5408\u3002"),(0,n.kt)("h4",{id:"2722-\u5217\u8868\u64cd\u4f5c"},"2.7.2.2 \u5217\u8868\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u5b83\u4e0d\u5149\u662f\u5904\u7406\u8be5\u7ec4\u4ef6\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4ed6\u5176\u5b9e\u4e5f\u5305\u542b\u5904\u7406\u96c6\u5408\u7684\u529f\u80fd\uff0c\u5373\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4f8b\u5982map"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u6240\u5728\u96c6\u5408\u7684\u903b\u8f91\uff0c\u4f8b\u5982filter\u6216\u8005reduce\uff0corder\u7b49")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u540e\u8005\u6765\u8bf4\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u901a\u5e38\u6d89\u53cafor\uff0cwhile\u5faa\u73af\u7b49\uff0c\u5728\u4e00\u4e2a\u96c6\u5408\u7684\u5c42\u9762\u53bb\u64cd\u4f5c\uff0c\u4f8b\u5982Unity ECS\u4e2d\u5f00\u53d1\u8005\u662f\u83b7\u53d6\u4e00\u4e2a\u7c7b\u578b\u7684\u5217\u8868\uff0c\u7136\u540e\u5f00\u53d1\u8005\u81ea\u5b9a\u51b3\u5b9a\u5bf9\u5217\u8868\u7684\u904d\u5386\u3002"),(0,n.kt)("p",null,"\u501f\u52a9\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u4e00\u5217\u7406\u5ff5\uff0c\u4f8b\u5982Erlang\uff0c\u5b83\u4eec\u628afor\u6216\u8005while\u4e4b\u7c7b\u7684\u5faa\u73af\u8f6c\u6362\u4e3a\u9012\u5f52\uff0c\u7136\u540e\u5f00\u53d1\u8005\u5c31\u53ef\u4ee5\u805a\u7126\u4e8e\u5904\u7406\u5bf9\u5355\u4e2a\u5143\u7d20\u7684\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5c06\u5bf9\u5217\u8868\u7684\u64cd\u4f5c\u548c\u5bf9\u5143\u7d20\u7684\u64cd\u4f5c\u7edf\u4e00\u5230\u5355\u4e2a\u64cd\u4f5c\u4e2d\u3002\u5f53\u7136\u5bf9\u4e8e\u96c6\u5408\u64cd\u4f5c\u6765\u8bb2\uff0c\u5176\u4e2d\u7684\u5355\u4e2a\u64cd\u4f5c\u53ef\u80fd\u6d89\u53ca\u5230\u5bf9\u591a\u79cd\u60c5\u51b5\u7684\u5904\u7406\uff0c\u8fd9\u79cd\u60c5\u51b5\u5012\u662f\u5f88\u597d\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u53c2\u89c1Erlang\u7684lists\u6a21\u5757\u3002"),(0,n.kt)("h3",{id:"273-\u6570\u636e\u9a71\u52a8"},"2.7.3 \u6570\u636e\u9a71\u52a8"),(0,n.kt)("h3",{id:"274-ecs"},"2.7.4 ECS"),(0,n.kt)("h3",{id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"},"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"),(0,n.kt)("p",null,"\u5305\u7ba1\u7406\u7684\u673a\u5236\u4e3b\u8981\u662f\u907f\u514d\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u89e6\u78b0\u548c\u914d\u7f6e\u522b\u4eba\u7684\u6e90\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u601d\u60f3\u4e0d\u540c\uff0cReality World\u7684\u4e3b\u8981\u521b\u65b0\u5728\u4e8e\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u914d\u7f6e\u7248\u672c\u53f7\u4e4b\u7c7b\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e0d\u7ba1\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u7528\u6237\u6765\u8bb2\uff0c\u6574\u4e2a\u6d41\u7a0b\u548c\u601d\u8def\u90fd\u7b80\u5316\u4e86\u5f88\u591a\u3002"),(0,n.kt)("h3",{id:"276-\u52a8\u6001\u89e3\u91ca"},"2.7.6 \u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e8b\u60c5\u90fd\u5728\u5b9e\u65f6\u53d8\u5316\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u7f16\u8bd1\u578b\u5e73\u53f0\u80af\u5b9a\u4e0d\u518d\u5408\u9002\u3002\u52a8\u6001\u89e3\u6790\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\uff0c\u53ea\u662f\u8981\u505a\u5230\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c40\u90e8\u89e3\u6790\uff0c\u6bcf\u4e2a\u5c40\u90e8\u7ec4\u4ef6\u53ef\u4ee5\u5355\u72ec\u89e3\u91ca\uff0c\u800c\u4e0d\u9700\u8981\u6539\u4e86\u4e00\u4e2a\u811a\u672c\u9700\u8981\u5176\u4ed6\u4eba\u90fd\u91cd\u65b0\u89e3\u91ca\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u6548\u7387\u8981\u8db3\u591f\u9ad8")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u53d1\u5e03\u7684\u65f6\u5019\u5c31\u7f16\u8bd1\u597d\u4e86\uff0c\u540e\u7eed\u5bf9\u7ec4\u4ef6\u7684\u4f7f\u7528\u90fd\u4e0d\u4f1a\u91cd\u65b0\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u7f16\u8bd1\u3002\u5f53\u7136\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5e95\u5c42\u7684\u865a\u62df\u673a\u9700\u8981\u5c06\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u5730\u5740\u8ba1\u7b97\u6b63\u786e\u5e76\u7ed9\u5230\u7ec4\u4ef6\u6e90\u4ee3\u7801\u3002\u8fd9\u79cd\u9700\u6c42\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\u662f\u4e0d\u592a\u53ef\u884c\u7684\uff0c\u4f46\u662f\u6709\u4e86Creation Table\u5c06\u6240\u6709\u6570\u636e\u8f6c\u6362\u4e3a\u6570\u7ec4\u7684\u5f62\u5f0f\u540e\uff0c\u7ec4\u4ef6\u4e2d\u7684\u6240\u6709\u5730\u5740\u90fd\u662f\u4e00\u4e2a\u76f8\u5bf9\u5730\u5740\u7684\u504f\u79fb\uff0c\u6240\u4ee5\u80fd\u591f\u7b80\u5316\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7684\u52a8\u6001\u4ee3\u7801\u6267\u884c\uff0c\u6574\u4e2a\u7f16\u8bd1\u7cfb\u7edf\u5fc5\u987b\u4ee5\u4e00\u4e2a\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u80fd\u8ddf\u5176\u4ed6\u7684\u4ee3\u7801\u6709\u4efb\u4f55\u5f62\u5f0f\u7684\u5173\u8054\u6216\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136\uff0c\u4f20\u7edf\u7684\u591a\u4e2a\u4ee3\u7801\u94fe\u63a5\u5728\u4e00\u8d77\u7684\u8fc7\u7a0b\u5f0f\u56e0\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u4f8b\u5982\u7f16\u8bd1\u5668\u4e3a\u4e86\u89e3\u91ca\u67d0\u4e2a\u7c7b\u578b\uff0c\u6216\u8005\u5c06\u53d8\u91cf\u6267\u884c\u67d0\u4e2a\u5185\u5b58\u5730\u5740\uff0c\u6216\u8005\u4e3a\u67d0\u4e2a\u5bf9\u8c61\u5206\u914d\u591a\u5927\u7684\u5185\u5b58\u6570\u636e\uff0c\u8fd9\u4e9b\u5bfc\u81f4\u9700\u8981\u4ea4\u53c9\u5173\u8054\u3002\u800c\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u662f\u65e0\u5173\u8054\u7684\uff0c\u81f3\u5c11\u7ec4\u4ef6\u4e0d\u9700\u8981\u77e5\u9053\u5176\u4ed6\u7ec4\u4ef6\u7684\u4efb\u4f55\u4fe1\u606f\uff0c\u800c\u5373\u4f7f\u7b80\u6d01\u7684\u5173\u7cfb\u4e5f\u662f\u7531\u865a\u62df\u673a\u6765\u51b3\u5b9a\u7684\uff0c\u6240\u4ee5\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u5bf9\u6bcf\u4e2a\u7ec4\u4ef6\u6267\u884c\u72ec\u7acb\u7684\u7f16\u8bd1\u5c31\u8db3\u591f\u4e86\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u662f\u5728Runtime\u7684\u65f6\u5019\uff0c\u6839\u636e\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u5b9e\u65f6\u52a0\u8f7d\u7f16\u8bd1\u597d\u7684\u7ec4\u4ef6\u673a\u5668\u7801\u6216\u8005\u5b57\u8282\u7801\uff0c\u7136\u540e\u6839\u636e\u914d\u7f6e\u8fdb\u884c\u5b9e\u65f6\u6570\u636e\u5206\u914d\uff0c\u5e76\u5c06\u5b9e\u65f6\u7684\u6570\u636e\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\u6307\u4ee4\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u52a8\u6001\u5206\u914d\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u5e03\u4f1a\u5f71\u54cd\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u4f46\u8fd9\u6837\u7684\u65f6\u673a\u53ea\u53d1\u751f\u5728\u7b2c\u4e00\u6b21\u52a0\u8f7d\u7a0b\u5e8f\uff0c\u4ee5\u53ca\u7528\u6237\u5bf9\u5b9e\u4f53\u7684\u7ec4\u4ef6\u8fdb\u884c\u4fee\u6539\u7684\u65f6\u5019\uff0c\u56e0\u6b64\u603b\u4f53\u4e0a\u4e0d\u4f1a\u5bf9\u8fd0\u884c\u65f6\u6027\u80fd\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6548\u7387\u6bd4\u8f83\u4f4e\uff0c\u56e0\u6b64\u53c8\u4e0d\u80fd\u5c06\u6240\u6709\u7684\u903b\u8f91\u548c\u6570\u636e\u90fd\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u90a3\u6837\u6574\u4e2a\u7cfb\u7edf\u7684\u6548\u7387\u5c06\u4f1a\u975e\u5e38\u4f4e\u3002\u7406\u60f3\u7684\u72b6\u6001\u662f\u80fd\u591f\u7ed3\u5408\u811a\u672c\u8bed\u8a00\u7684\u7075\u6d3b\u6027\u4e0e\u539f\u751f\u7cfb\u7edf\u8bed\u8a00\u7684\u9ad8\u6027\u80fd\uff0c\u7136\u540e\u4e00\u822c\u7684\u8bed\u8a00\u673a\u5236\u5374\u5f88\u96be\u505a\u5230\u8fd9\u6837\uff0c\u56e0\u4e3a\u6570\u636e\u8ddf\u7a0b\u5e8f\u903b\u8f91\u901a\u5e38\u662f\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5b83\u901a\u5e38\u90fd\u662f\u6709\u4e00\u53f0\u673a\u5668\u540c\u65f6\u6267\u884c\u6570\u636e\u7684\u5206\u914d\u548c\u903b\u8f91\u7684\u89e3\u91ca\u3002\u6bd4\u5982\u73b0\u5728\u7684\u811a\u672c\u8bed\u8a00\uff0c\u5b83\u90fd\u5305\u542b\u81ea\u5df1\u72ec\u7acb\u7684\u865a\u62df\u673a\uff0c\u4f7f\u5f97\u811a\u672c\u4e2d\u7684\u4e00\u4e9b\u90fd\u662f\u7531\u8be5\u865a\u62df\u673a\u7ba1\u7406\u7684\u3002\u865a\u62df\u673a\u672c\u8eab\u5c31\u662f\u4e00\u53f0\u80fd\u591f\u6267\u884c\u901a\u7528\u8ba1\u7b97\u7684\u673a\u5668\u3002\u5373\u4f7f\u811a\u672c\u8bed\u8a00\u4e5f\u80fd\u591f\u8ddf\u81ea\u5b9a\u4e49\u7684\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u4ea4\u4e92\uff0c\u6574\u4e2a\u4ea4\u4e92\u7684\u8fc7\u7a0b\u5374\u662f\u975e\u5e38\u590d\u6742\uff0c\u6bd4\u5982\u8fd9\u79cd\u590d\u6742\u7684\u8fc7\u7a0b\u80af\u5b9a\u4e0d\u9002\u5408\u666e\u901a\u7684\u7528\u6237\u53bb\u914d\u7f6e\uff0c\u800c\u4e14\u4ed6\u4e5f\u8981\u6c42\u66b4\u9732\u4e00\u4e9b\u5e95\u5c42\u7684\u63a5\u53e3\u7ed9\u5e73\u53f0\uff0c\u8fd9\u6837\u5c06\u4f1a\u5e26\u6765\u5b89\u5168\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u914d\u4ea4\u7ed9\u865a\u62df\u673a\u6765\u505a\uff0c\u80fd\u591f\u7b80\u5316\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u8ba9\u5bbf\u4e3b\u5c42\u6765\u7ba1\u7406\u548c\u52a0\u8f7d\u6570\u636e\uff0c\u5c06\u5927\u5927\u63d0\u5347\u7cfb\u7edf\u7684\u6027\u80fd\u3002\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u7701\u6389\u5f88\u591a\u4e8b\u60c5\uff0c\u53ea\u4e13\u6ce8\u4e8e\u552f\u4e00\u9700\u8981\u4e13\u6ce8\u7684\u903b\u8f91\u8ba1\u7b97\u6307\u4ee4\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7528\u62c5\u5fc3\u590d\u6742\u6570\u636e\u7684\u5206\u914d\u548c\u5bfb\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u5783\u573e\u56de\u6536\u7ba1\u7406\u590d\u6742\u7684\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u7701\u6389\u6570\u636e\u5206\u914d\uff0c\u4ee5\u53ca\u66f4\u7b80\u5355\u7684\u7ec4\u4ef6\u5f00\u53d1\u89c4\u5219\uff08\u4f8b\u5982\u4e0d\u9700\u8981\u5b9a\u4e49\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u673a\u5236\uff09\uff0c\u6574\u4e2a\u89e3\u91ca\u5668\u4e5f\u4f1a\u53d8\u5f97\u975e\u5e38\u7b80\u5355")),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6574\u4f53\u4e0a\u7c7b\u4f3cAOT\uff0c\u4f46\u662f\u5b83\u4e5f\u4e0d\u662f\u5168\u90e8AOT\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u636e\u7ec4\u7ec7\u90e8\u5206\u9700\u8981\u5728Runtime\u6267\u884c\uff0c\u8fd9\u6837\u4fdd\u8bc1\u65e2\u6709\u6bd4\u8f83\u597d\u7684\u52a8\u6001\u6027\uff0c\u53c8\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\u4fdd\u8bc1\u3002"),(0,n.kt)("h3",{id:"277-\u8d23\u6743\u8ba9\u6e21"},"2.7.7 \u8d23\u6743\u8ba9\u6e21"),(0,n.kt)("p",null,"\u5c06\u5f88\u591a\u539f\u672c\u9700\u8981\u7a0b\u5e8f\u5458\u7ba1\u7406\u7684\u4e8b\u60c5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u7ba1\u7406\uff0c\u4f8b\u5982\u5bf9\u8c61\u7684\u67e5\u627e\u7b5b\u9009\uff0c\u8d4b\u503c\uff0c\u8fd0\u7528\uff0c\u5bf9\u8c61\u72b6\u6001\u7ba1\u7406\u7b49"),(0,n.kt)("h3",{id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217"},"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6700\u597d\u7684\u5e76\u53d1\u6a21\u578b\u5c31\u662fErlang\u7684\u72ec\u7acb\u8fdb\u7a0b\u5e76\u53d1\u65b9\u5f0f\uff0c\u4f46\u662f\u57fa\u4e8eECS\u7684\u6570\u636e\u7ba1\u7406\u4f1a\u8ba9\u8fd9\u4e2a\u4e8b\u60c5\u53ef\u4ee5\u505a\u7684\u66f4\u597d\u3002"),(0,n.kt)("h4",{id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"},"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6309\u7167\u4f20\u7edf\u7684\u505a\u6cd5\u53ef\u80fd\u5c31\u662f\u9700\u8981\u5355\u72ec\u6784\u5efa\u4e00\u4e9b\u6d88\u606f\u961f\u5217\uff0c\u8ba9\u540e\u901a\u8fc7\u6d88\u606f\u961f\u5217\u9a71\u52a8\u66f4\u65b0\uff0c\u6216\u8005\u8bf4\u5c31\u662f\u5355\u7eaf\u7684\u4f46\u6d88\u606f\u76f4\u63a5\u901a\u77e5\u3002"),(0,n.kt)("p",null,"\u5728ECS\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5b9e\u4f53\u5bf9\u8c61\u7684\u6570\u636e\u5217\u8868\u672c\u8eab\u5c31\u5f53\u505a\u4e00\u4e2a\u6d88\u606f\u961f\u5217\uff0c\u5b83\u6ee1\u8db3\u6d88\u606f\u961f\u5217\u7684\u57fa\u672c\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5217\u8868\u90fd\u5904\u7406\u540c\u7c7b\u578b\u7684\u6d88\u606f\uff0c\u56e0\u6b64\u80fd\u591f\u5b9a\u4f4d\u63a5\u53d7\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u672c\u8eab\u5c31\u643a\u5e26\u4e86\u901a\u4fe1\u7684\u6d88\u606f\u6570\u636e")),(0,n.kt)("p",null,"\u518d\u52a0\u4e0a\u4e00\u4e9b\u5bf9\u5217\u8868\u7684filter\u7b49\u64cd\u4f5c\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e00\u4e9b\u5197\u4f59\u7684\u6570\u636e\uff0c\u6bd4\u5982\u90a3\u4e9b\u6ca1\u6709\u4efb\u4f55\u53d8\u66f4\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3afilter\u672c\u8eab\u7684\u4e00\u4e2a\u9009\u9879\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6f5c\u5728\u7684\u95ee\u9898\u662f\u6027\u80fd\u95ee\u9898\uff0c\u5373\u5217\u8868\u6570\u636e\u4e0d\u53ef\u4ee5\u4fee\u6539\uff0c\u6216\u8005\u91cd\u65b0\u7ec4\u7ec7\u7684\u4ee3\u4ef7\u5f88\u9ad8\u3002\u4f46\u662f\u4e5f\u6709\u4e24\u79cd\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8003\u8651\u5230\u6570\u636e\u662f\u53ea\u8bfb\u7684\uff0c\u5176\u5b9e\u4e5f\u53ef\u4ee5\u628a\u8fd9\u90e8\u5206\u91cd\u65b0\u590d\u5236\u4e00\u4efd\u91cd\u65b0\u7ec4\u7ec7\uff0c\u4f20\u9012\u7ed9\u4f7f\u7528\u8005\uff0c\u8fd9\u6837\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u8ba1\u7b97\u6027\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5e72\u8106\u4e0d\u7ba1\u7406\u95ee\u9898\u4e5f\u4e0d\u5927")),(0,n.kt)("h4",{id:"2782-\u5e76\u884c\u4f38\u7f29\u6027"},"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027"),(0,n.kt)("p",null,"Erlang\u5e76\u4e0d\u64c5\u957f\u505aGPU\u7f16\u7a0b\uff0c\u56e0\u4e3a\u8fd9\u7c7b\u95ee\u9898\u901a\u5e38\u90fd\u9700\u8981\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u6570\u503c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"Erlang\u4e2d\u7684\u6613\u5e76\u884c\u95ee\u9898\u6240\u5904\u7684\u5c42\u7ea7\u8981\u66f4\u9ad8\u4e00\u4e9b\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5b83\u4eec\u90fd\u662f\u50cf\u804a\u5929\u670d\u52a1\u5668\uff0c\u7535\u8bdd\u4ea4\u6362\u673a\uff0cweb\u670d\u52a1\u5668\uff0c\u6d88\u606f\u961f\u5217\uff0cweb\u722c\u866b\u4e4b\u7c7b\u7684\u5e94\u7528\uff0c\u53ef\u4ee5 \u628a\u8fd9\u7c7b\u5e94\u7528\u4e2d\u5de5\u4f5c\u7684\u6267\u884c\u4f53\u8868\u793a\u6210\u4e00\u7ec4\u76f8\u4e92\u72ec\u7acb\u7684\u903b\u8f91\u5b9e\u4f53\u3002"),(0,n.kt)("p",null,"Erlang\u4ec5\u5173\u6ce8\u51fd\u6570\u534a\u8eab\uff0c\u4e0d\u5173\u6ce8\u6570\u636e\u7ba1\u7406\uff0c\u56e0\u6b64\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u50cfOOP\u4e00\u6837\uff0c\u5206\u5e03\u5728\u5206\u6563\u7684\u533a\u57df\uff0c\u4e0d\u5177\u5907\u6570\u636e\u5c40\u90e8\u6027\u3002"),(0,n.kt)("p",null,"RealityIS\u80fd\u591f\u7cbe\u5fc3\u5730\u5bf9\u540c\u7c7b\u578b\u6570\u636e\u8fdb\u884c\u66f4\u597d\u5730\u7ba1\u7406\uff0c\u4ee5\u5b9e\u73b0\u66f4\u597d\u7684\u5e76\u884c\u8ba1\u7b97\u3002\u4ece\u8fd9\u4e2a\u5c42\u9762\u770b\uff0c\u4ed6\u6709\u70b9\u7c7b\u4f3c\u4e8e\u628aErlang\u4e2d\u90a3\u4e9b\u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u90fd\u4e32\u8054\u8d77\u6765\uff0c\u653e\u5728\u5176\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u7531\u4e8eErlang\u5e76\u6ca1\u6709\u7ba1\u7406\u6570\u636e\uff0c\u6240\u6709\u8981\u60f3\u5728Erlang\u4e2d\u7ba1\u7406\u5e76\u884c\u5176\u5b9e\u5f88\u96be\uff0c\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u8fd9\u4e00\u5c42\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cErlang\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0e\u4e4b\u76f8\u5173\u7684\u7f3a\u70b9\u662f\uff0c\u4e0d\u80fd\u4fdd\u8bc1\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u987a\u5e8f\u3002\u4f60\u53ea\u80fd\u53d1\u8d77\u8fdb\u7a0b\uff0c\u751a\u81f3\u4e0d\u80fd\u53d6\u56de\u8fd4\u56de\u503c\uff0c\u4e5f\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u6216\u8005\u6709\u6ca1\u6709\u6267\u884c\u5b8c\u6bd5\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u4e0a\u8ff0\u7684\u56e0\u7d20\uff0c\u5728RealityIS\u4e2d\uff0c\u8fd8\u53ef\u4ee5\u5b9e\u73b0\u5927\u89c4\u6a21\u5e76\u884c\u8ba1\u7b97\u3002\u5728\u4f20\u7edf\u7684\u7aef\u4fa7\u6216\u8005\u5355\u673a\u7684\u6e38\u620f\u8fd0\u884c\u65f6\uff0c\u540c\u4e00\u7c7b\u578b\u7684\u5b9e\u4f53\u5bf9\u8c61\u901a\u5e38\u662f\u5c11\u6570\uff0c\u6bd4\u5982\u53ef\u80fd\u5c31\u662f\u51e0\u4e2a\uff0c\u751a\u81f3\u5f88\u5c11\u8d85\u8fc7\u51e0\u5341\u4e2a\uff0c\u9664\u975e\u8ddf\u56fe\u5f62\u6e32\u67d3\u76f8\u5173\u7684\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u6211\u4eec\u628a\u8fd9\u4e9b\u8ba1\u7b97\u653e\u5230\u4e91\u7aef\uff0c\u591a\u4e2a\u7528\u6237\u5c31\u53ef\u80fd\u6c47\u96c6\u66f4\u5927\u7684\u540c\u7c7b\u5bf9\u8c61\uff0c\u8fd9\u79cd\u6570\u91cf\u4e5f\u8bb8\u5927\u5230\u51e0\u5343\u4e0a\u4e07\u800c\u53ef\u4ee5 \u5b8c\u5168\u8f6c\u79fb\u5230GPU\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u3002\u8fd9\u80fd\u591f\u66f4\u5145\u5206\u7684\u5229\u7528\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u95ee\u9898\u662f\uff0c\u6bcf\u4e2a \u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u7ed3\u679c\u6216\u6d88\u606f\u53ef\u80fd\u8981\u5206\u53d1\u5230\u6570\u5343\u4e2a\u5ba2\u6237\u7aef\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4e5f\u8bb8\u53ef\u4ee5\u901a\u8fc7\u4f20\u7edf\u7684\u4e00\u4e9b\u670d\u52a1\u5668\u76f8\u5173\u6280\u672f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"279-let-is-crash"},"2.7.9 Let is crash"),(0,n.kt)("p",null,"\u9519\u8bef\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u56e0\u6b64\u627e\u51fa\u597d\u7684\u5904\u7406\u9519\u8bef\u548c\u95ee\u9898\u7684\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u4f01\u56fe\u9632\u6b62\u9519\u8bef\u7684\u51fa\u73b0\uff0c\u8fd9\u662fErlang\u7684\u54f2\u5b66\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u65b9\u5f0f\u6216\u8005\u539f\u5219\uff1a\u5982\u679c\u7cfb\u7edf\u4e2d\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u9519\u8bef\uff0c\u9020\u6210\u4e86\u6570\u636e\u7834\u574f\uff0c\u90a3\u4e48\u8fd9\u4e2a\u90e8\u5206\u5e94\u8be5\u5c3d\u5feb\u6b7b\u5fd9\u4ee5\u9632\u6b62\u9519\u8bef\u548c\u574f\u6570\u636e\u4f20\u64ad\u5230\u7cfb\u7edf\u7684\u5269\u4f59\u90e8\u5206\u3002"),(0,n.kt)("h4",{id:"2791-\u5bb9\u9519\u673a\u5236"},"2.7.9.1 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("p",null,"\u4e00\u79cd\u66f4\u5b89\u5168\u7684\u89e3\u51b3\u65b9\u6cd5\u662f\uff0c\u786e\u4fdd\u8ba9\u5d29\u6e83\u548c\u6b63\u5e38\u5173\u95ed\u5177\u6709\u540c\u6837\u7684\u6548\u679c\u3002\u8fd9\u79cd\u6548\u679c\u53ef\u4ee5\u901a\u8fc7\u50cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5171\u4eab\uff0c\u7cfb\u7edf\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u5b8c\u5168\u9694\u79bb"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u8d4b\u503c\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u9694\u79bb\u5355\u4e00\u8fdb\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4f7f\u7528\u9501\uff0c\u5982\u679c\u53d1\u751f\u5d29\u6e83\u65f6\u6709\u90e8\u5206\u6570\u636e\u662f\u88ab\u52a0\u9501\u7684\uff0c\u90a3\u4e48\u4f1a\u5bfc\u81f4\u5176\u4ed6\u8fdb\u7a0b\u65e0\u6cd5\u8bbf\u95ee\u8fd9\u90e8\u5206\u6570\u636e\uff0c\u5bfc\u81f4\u8fd9\u90e8\u5206\u6570\u636e\u72b6\u6001\u4e0d\u4e00\u81f4")),(0,n.kt)("p",null,"\u5728Erlang\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u574f\u4e86\uff0c\u4f1a\u53d1\u9001\u6700\u540e\u4e00\u6761\u6d88\u606f\u51fa\u53bb\uff0c\u5e76\u4e14\u7cfb\u7edf\u4f1a\u4fdd\u8bc1\u8fd9\u6761\u6d88\u606f\u88ab\u53d1\u51fa\u53bb\uff0c\u53ca\u8fd9\u4e2a\u90e8\u5206\u9ed8\u8ba4\u8ba4\u4e3a\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5185\u90e8\u7684\u4e0d\u540c\u5730\u65b9\u53ef\u80fd\u5bfc\u81f4\u51fa\u9519\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u4e0d\u662f\u50cfErlang\u4e00\u6837\u72ec\u7acb\u8fdb\u7a0b\u6267\u884c\uff0c\u800c\u662f\u4f1a\u53bb\u4fee\u6539\u4e00\u4e9b\u5171\u4eab\u6570\u636e\uff0c\u56e0\u6b64\u5982\u679c\u8fd9\u79cd\u4fee\u6539\u4e4b\u540e\u518d\u53d1\u751f\u5d29\u6e83\uff0c\u5c31\u4f1a\u5bfc\u81f4\u5176\u4ed6\u6a21\u5757\u7684\u72b6\u6001\u53ef\u80fd\u4e0d\u662f\u9884\u671f\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u9632\u6b62\u76f8\u5173\u7684\u4e0d\u4e00\u81f4\u95ee\u9898\uff0c\u53ef\u4ee5\u4ece\u4e00\u4e0b\u65b9\u9762\u8fbe\u5230\u7c7b\u4f3cErlang\u7684\u6548\u679c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u5141\u8bb8\u4fee\u6539\u4e00\u4e2a\u5171\u4eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u540c\u65f6\u5bf9\u591a\u4e2a\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u3002\u56e0\u4e3a\u672c\u8eab\u6211\u4eec\u7684\u5c5e\u6027\u7ecf\u8fc7\u4e86\u6807\u51c6\u7684\u7cbe\u5fc3\u8bbe\u8ba1\uff0c\u6bcf\u4e2a\u5c5e\u6027\u90fd\u662f\u4ee3\u8868\u5177\u6709\u6bd4\u8f83\u72ec\u7acb\u7684\u610f\u4e49\uff0c\u56e0\u6b64\u4e0d\u540c\u5c5e\u6027\u7684\u4fee\u6539\u5e94\u8be5\u4f7f\u7528\u4e0d\u540c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5fc5\u987b\u786e\u4fdd\u5728\u6574\u4e2a\u7ec4\u4ef6\u6ca1\u6709\u9519\u8bef\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u540e\u624d\u4f1a\u5b89\u5168\u5730\u4fee\u6539\u5c5e\u6027\uff0c\u8fd9\u4e2a\u5c5e\u6027\u4fee\u6539\u5c31\u50cfErlang\u628a\u6d88\u606f\u53d1\u51fa\u53bb\u4e00\u6837\uff0c\u672c\u8eab\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u4e0a\u8ff0\u7684\u5c5e\u6027\uff0cRealityIS\u4e2d\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u5c31\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e00\u6837\uff0c\u5bf9\u5176\u4ed6\u72b6\u6001\u6570\u636e\u4e0d\u4f1a\u9020\u6210\u4efb\u4f55\u7834\u574f\uff0c\u56e0\u6b64\u53ef\u4ee5\u968f\u610f\u4e22\u5f03\u6389\u8be5\u7ec4\u4ef6\u6267\u884c\u7684\u90e8\u5206\u800c\u4e0d\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u50cfReduce\u7d2f\u52a0\u6570\u7684\u6982\u5ff5\u4e5f\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5904\u7406Reduce\uff0c\u5219\u5b83\u4e0d\u80fd\u5904\u7406Map\uff0c\u56e0\u4e3a\u4e24\u4e2a\u903b\u8f91\u53ef\u4ee5\u8fdb\u4e00\u6b65\u62c6\u5206\uff0c\u5426\u5219\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4e0d\u597d\u7ba1\u7406\u3002")),(0,n.kt)("h4",{id:"2792-\u5e76\u53d1\u8c03\u5ea6"},"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u4e86\u57fa\u4e8e\u5f02\u6b65\u6d88\u606f\u4f20\u9012\u7684\u8f7b\u91cf\u8fdb\u7a0b\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4e0d\u80fd\u4f9d\u9760\u64cd\u4f5c\u7cfb\u7edf\u6765\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u800c\u662f\u901a\u8fc7\u5728VM\u4e2d\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u4f7f\u53ef\u4ee5\u5bf9\u4f18\u5316\u548c\u53ef\u9760\u6027\u8fdb\u884c\u5b8c\u5168\u638c\u63a7\u3002\u6bd4\u5982\uff0c\u5728Erlang\u4e2d\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5927\u6982\u5360\u7528300\u4e2a\u5b57\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u521b\u5efa\u65f6\u95f4\u53ea\u6709\u51e0\u5fae\u79d2\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7ba1\u7406\u7a0b\u5e8f\u6240\u521b\u5efa\u7684\u6240\u6709\u8fdb\u7a0b\uff0cVM\u4f1a\u4e3a\u6bcf\u4e2a\u6838\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\u6765\u5145\u5f53\u4e00\u4e2a\u8c03\u5ea6\u5668\uff08scheduler\uff09\u3002\u6bcf\u4e2a\u8c03\u5ea6\u5668\u6709\u4e00\u4e2a\u8fd0\u884c\u961f\u5217\uff08run queue\uff09\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2aErlang\u8fdb\u7a0b\u5217\u8868\uff0c\u4f1a\u7ed9\u5176\u4e2d\u7684\u6bcf\u4e2a\u8fdb\u7a0b\u5206\u914d\u4e00\u5c0f\u6bb5\u8fd0\u884c\u65f6\u95f4\u7247\u3002\u5f53\u67d0\u4e2a\u8c03\u5ea6\u5668\u7684\u8fd0\u884c\u961f\u5217\u4e2d\u4efb\u52a1\u8fc7\u591a\u65f6\uff0c\u4f1a\u628a\u4e00\u90e8\u5206\u4efb\u52a1\u8fc1\u79fb\u5230\u5176\u4ed6\u961f\u5217\u4e2d\u3002\u8fd9\u610f\u5473\u7740\uff0c\u6bcf\u4e2aErlangVM\u90fd\u4f1a\u8fdb\u884c\u8d1f\u8f7d\u64cd\u4f5c\uff0c\u7a0b\u5e8f\u5458\u65e0\u9700\u5173\u5fc3\u3002VM\u8fd8\u4f1a\u8fdb\u884c\u5176\u4ed6\u4f18\u5316\u5de5\u4f5c\uff0c\u4f8b\u5982\uff0c\u5bf9\u53d1\u5411\u8fc7\u8f7d\u8fdb\u7a0b\u7684\u6d88\u606f\u8fdb\u884c\u9650\u901f\uff0c\u4ee5\u8c03\u8282\u548c\u5747\u8861\u8d1f\u8f7d\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddfRealityIS\u7684\u8bbe\u8ba1\u7406\u5ff5\u4e00\u6837\uff0c\u8c03\u5ea6\u5668\u662f\u6bcf\u4e2a\u6838\u7684\u65f6\u949f\u63a7\u5236\uff0c\u5c31\u662f\u6e38\u620f\u4e2d\u7684update\u5faa\u73af\uff0c\u5f53\u7136\u8fd9\u91cc\u5904\u7406\u65f6\u95f4\u5206\u914d\u672c\u8eab\uff0c\u8fd8\u9700\u8981\u505a\u4e00\u4e9b\u5728\u6838\u5185\u8fdb\u884c\u8c03\u5ea6\u548c\u6838\u4e4b\u95f4\u901a\u4fe1\u7684\u4e8b\u60c5\u3002\u800c\u6d88\u606f\u5217\u8868\u5b9e\u9645\u4e0a\u662f\u643a\u5e26\u8005\u51fd\u6570\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u800c\u5728RealityIS\u4e2d\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5217\u8868\u7684\u6570\u636e\uff0c\u5b9e\u9645\u4e0a\u4e5f\u5c31\u662f\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u5230\u7684\u51fd\u6570\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u53ea\u4e0d\u8fc7\u76f8\u5bf9\u4e8eErlang\u7684\u5e76\u53d1\u6027\uff0cRealityIS\u8fd8\u540c\u65f6\u5b9e\u73b0\u4e86\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"},"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"),(0,n.kt)("p",null,"OOP\u901a\u5e38\u901a\u8fc7\u590d\u6742\u7684\u7ee7\u627f\u673a\u5236\u6765\u5b9a\u4e49\u4e00\u4e2a\u5305\u542b\u7279\u5b9a\u529f\u80fd\u96c6\u5408\u7684\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u529f\u80fd\u90fd\u5df2\u51fd\u6570\u7684\u5f62\u5f0f\u88ab\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u4e2d\u3002"),(0,n.kt)("p",null,"FP\u5219\u5f3a\u8c03\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f\uff0c\u5176\u4e2d\u7684\u903b\u8f91\u4e3b\u8981\u662f\u56e0\u4e3aFP\u4e2d\u7684\u51fd\u6570\u901a\u5e38\u662f\u201c\u65e0\u72b6\u6001\u7684\u201d\uff0c\u72ec\u7acb\u7684\uff0c\u5bf9\u5e94\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u8f93\u5165\uff0c\u5b83\u7684\u8f93\u51fa\u603b\u662f\u4fdd\u6301\u4e0d\u53d8\uff0c\u56e0\u4e3a\u4e0d\u6d89\u53ca\u5230\u4efb\u4f55\u5185\u90e8\u72b6\u6001\u7684\u4fee\u6539\uff0c\u6240\u4ee5\u540c\u6837\u7684\u8f93\u5165\u4e0d\u4f1a\u53d7\u5230\u4efb\u4f55\u5f71\u54cd\u3002\u56e0\u6b64\uff0c\u8fd9\u6837\u7684\u76f8\u4e92\u72ec\u7acb\u7684\u7eaf\u51fd\u6570\u662f\u53ef\u4ee5\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4e0d\u540c\u51fd\u6570\u7ec4\u5408\u7684\u4e00\u4e2a\u66f4\u590d\u6742\u7684\u51fd\u6570\u5c31\u6784\u6210\u4e00\u4e2a\u7279\u5b9a\u529f\u80fd\u7684\u590d\u6742\u51fd\u6570\u6216\u8005\u590d\u6742\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u63cf\u8ff0\u53ef\u4ee5\u770b\u51fa\uff0c\u6240\u8c13\u7684\u7ec4\u5408\u5176\u5b9e\u5e76\u6ca1\u6709\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5e76\u4e0d\u50cfECS\u4e2d\u90a3\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e00\u6837\uff0c\u4ed6\u5176\u5b9e\u9690\u542b\u7740\u4e00\u5b9a\u7684\u7f16\u7a0b\u903b\u8f91\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u51fd\u6570\u7684\u7ec4\u5408\u662f\u901a\u8fc7\u5c06\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u5408\uff0c\u5b83\u66f4\u50cf\u662f\u4e00\u4e9b\u51fd\u6570\u8fde\u8f7d\u4e00\u8d77\uff0c\u800c\u6bcf\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\uff0c\u50cf\u63d2\u69fd\u4e00\u6837\u6263\u5728\u4e00\u8d77\uff0c\u4f46\u662f\u8fd9\u4e9b\u5361\u6263\u672c\u8eab\u662f\u6709\u4e00\u5b9a\u903b\u8f91\u7684\uff0c\u4f60\u9700\u8981\u77e5\u9053\u5c06\u54ea\u4e2a\u51fd\u6570\u8fde\u5728\u53e6\u5916\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u4e0a\uff0c\u4e5f\u5373\u662f\u610f\u5473\u7740\u4f60\u5176\u5b9e\u8981\u660e\u767d\u6240\u6709\u8fd9\u4e9b\u51fd\u6570\u8fde\u5728\u4e00\u8d77\u7684\u6267\u884c\u903b\u8f91\u548c\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e00\u822c\u8fd9\u79cd\u7ec4\u5408\u7684\u5c42\u6b21\u4e0d\u4f1a\u5f88\u6df1\uff0c\u4f8b\u5982\u901a\u5e38\u90fd\u662f\u4e00\u4e2a\u201c\u4e1a\u52a1\u51fd\u6570\u201d+\u4e00\u4e2a\u9ad8\u9636\u51fd\u6570\u5373\u53ef\uff0c\u4f46\u7406\u8bba\u4e0a\u53ef\u4ee5\u6839\u636e\u62bd\u8c61\u5c42\u7ea7\u4ea7\u751f\u90a3\u79cd\u591a\u5c42\u7684\u590d\u6742\u51fd\u6570\u5d4c\u5957\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5982\u679c\u67d0\u4e2a\u51fd\u6570\u7684\u4fee\u6539\u6d89\u53ca\u5230\u53c2\u6570\u53ca\u8fd4\u56de\u503c\u7c7b\u578b\u8fd9\u79cd\u7ed3\u6784\u6027\u7684\u4fee\u6539\uff0c\u5176\u5b9e\u201c\u7ec4\u5408\u201d\u672c\u8eab\u8fd8\u662f\u9700\u8981\u4fee\u6539\u7684\uff0c\u53ea\u662f\u76f8\u5bf9\u4e8eOOP\u800c\u8a00\uff0c\u5b83\u53ef\u80fd\u53ea\u4fee\u6539\u76f8\u5173\u7684\u51fd\u6570\u8c03\u7528\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u91cd\u65b0\u53bb\u4fee\u6539\u7ee7\u627f\u7ed3\u6784\u6216\u8005\u4fee\u6539\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u800c\u8a00\uff0c\u7ec4\u4ef6\u672c\u8eab\u5145\u5f53\u4e86\u4e1a\u52a1\u51fd\u6570\uff0c\u9ad8\u9636\u51fd\u6570\u88ab\u9690\u85cf\u5728\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u8c03\u5ea6\u4e2d\uff0c\u56e0\u6b64\u8fd9\u91cc\u4e0d\u5b58\u5728\u90a3\u79cd\u51fd\u6570\u8c03\u7528\u51fd\u6570\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u56e0\u6b64\u4e5f\u5373\u610f\u5473\u7740\u6211\u4eec\u65e0\u6cd5\u5b9e\u73b0\u591a\u5c42\u51fd\u6570\u5d4c\u5957\uff0c\u56e0\u4e3a\u603b\u5171\u5c31\u53ea\u6709\u4e24\u5c42\uff1a\u5e73\u53f0\u4e00\u5c42\uff08\u9ad8\u9636\u51fd\u6570\uff09\uff0c\u7ec4\u4ef6\u4e00\u5c42\u3002"),(0,n.kt)("h4",{id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"},"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("p",null,"\u5f53\u7136\u7ec4\u4ef6\u4e4b\u95f4\u662f\u5b58\u5728\u5173\u7cfb\u7684\uff0c\u8fd9\u79cd\u5173\u7cfb\u4f53\u73b0\u5728\u524d\u540e\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4e32\u8054\uff1a\u524d\u8005\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5728\u5728\u4e00\u4e2a\u53d8\u91cf\u4e2d\u4f5c\u4e3a\u540e\u4e00\u4e2a\u7ec4\u4ef6\u7684\u53c2\u6570\uff0c\u8fd9\u79cd\u5173\u7cfb\u8ddf\u591a\u4e2a\u51fd\u6570\u5d4c\u5957\u662f\u7c7b\u4f3c\u7684\uff1a\u4e00\u4e2a\u51fd\u6570\u88ab\u4f5c\u4e3a\u51fd\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u4e5f\u53ea\u662f\u5728\u90a3\u4e2a\u51fd\u6570\u4e2d\u53bb\u8ba1\u7b97\u4e00\u4e2a\u7279\u5b9a\u7684\u503c\uff0c\u8fd9\u4e2a\u51fd\u6570\u6700\u7ec8\u5b9e\u9645\u4f7f\u7528\u7684\u4e5f\u662f\u5b83\u8ba1\u7b97\u7684\u7ed3\u679c\uff0c\u81f3\u4e8e\u5b83\u52a8\u6001\u4f20\u7ed9\u5b83\u7684\u53c2\u6570\uff0c\u672c\u8eab\u5b58\u5728\u4e8eRealityIS\u7684\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u4e0a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\uff0c\u8ddfFP\u4e2d\u57fa\u4e8e\u51fd\u6570\u7684\u7ec4\u5408\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u867d\u7136\u7ec4\u4ef6\u4e4b\u4e2d\u770b\u8d77\u6765\u6709\u72b6\u6001\u53c2\u6570\uff0c\u4f46\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u5b9e\u73b0\u8ddfFP\u4e2d\u7684\u51fd\u6570\u662f\u4e00\u6837\u72ec\u7acb\u7684\uff0c\u8fd9\u4e9b\u53c2\u6570\u53ea\u662f\u7531\u4e1a\u52a1\u5c42\u4f20\u6765\u7684\u5b9e\u9645\u5904\u7406\u7684\u4e00\u4e2a\u6570\u636e\u800c\u5df2"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u5bf9\u4e8eFP\u800c\u8a00\uff0c\u4ed6\u5f88\u591a\u65f6\u5019\u4e5f\u9700\u8981\u53bb\u8bb0\u4f4f\u4e00\u4e9b\u72b6\u6001\uff0c\u7ec4\u4ef6\u7b80\u5316\u4e86\u8fd9\u79cd\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u7279\u522b\u7684\uff0c\u8fd9\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u8981\u6c42\u7528\u6237\u7406\u89e3\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u8fd9\u79cd\u903b\u8f91\u5173\u7cfb\u8fd8\u5305\u62ec\u51fd\u6570\u7684\u7b7e\u540d\u53ca\u51fd\u6570\u7b49\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u6d41\u7a0b")),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u662f\uff0c\u8fd9\u6837\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u592a\u5bb9\u6613\u4ece\u5168\u5c40\u628a\u63e1\u6e05\u695a\uff0c\u800c\u4e14\u6709\u53ef\u80fd\u6f0f\u6389\u4e00\u4e9b\u4e1c\u897f\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u597d\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fdb\u884c\u81ea\u52a8\u8f7d\u5165\u3002"),(0,n.kt)("h4",{id:"27102-machinations"},"2.7.10.2 Machinations"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u7531Machinations\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"2711-\u6a21\u5f0f\u5339\u914d"},"2.7.11 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u7684\u51e0\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u7ed1\u5b9a\uff0c\u7701\u7565\u53c2\u6570\u4f20\u9012\u7684\u8d4b\u503c\uff0c\u7ed1\u5b9a\u7b49\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u89e3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u6761\u4ef6\u8bed\u53e5"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8c03\u7528\u89e3\u8026")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u56e0\u7d20\u5728CreationScript\u4e2d\u672c\u8eab\u5c31\u4e0d\u662f\u95ee\u9898\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\uff0c\u56e0\u4e3a\u5728\u7ec4\u4ef6\u4e2d\u5f00\u53d1\u8005\u90fd\u6ca1\u6709\u673a\u4f1a\u53bb\u6784\u5efa\u7ed3\u6784\u548c\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u8fd8\u662f\u9700\u8981\u63d0\u4f9b\u3002\u4f46\u4e0d\u7528\u50cfFP\u90a3\u6837\u6210\u4e3a\u8bed\u8a00\u7684\u6838\u5fc3\u529f\u80fd\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c"},"enum ShapeType {Retangle, Circle, Square};\nstruct Shape {\n enum ShapeType kind;\n union {\n struct {int width, height; } retangleData;\n struct {int radius; } circleData;\n struct {int side; } squareData;\n } shapeData;\n};\n\ndouble area(struct Shape* s){\n if(s->kind == Rectangle) {\n int width, ht;\n width = s->ShapeData.rectangleData.width;\n ht = s->ShapeData.rectangleData.height;\n return width * ht;\n }\n else if(s->kind == Circle){\n ...\n }\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5C\u4ee3\u7801\u57fa\u672c\u4e0a\u5c31\u662f\u5bf9\u51fd\u6570\u7684\u53c2\u6570\u6267\u884c\u6a21\u5f0f\u5339\u914d\u64cd\u4f5c\uff0c\u4f46\u7a0b\u5e8f\u5458\u5fc5\u987b\u7f16\u5199\u6a21\u5f0f\u5339\u914d\u7684\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u5b83\u662f\u6b63\u786e\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5bf9\u5e94\u7684Erlang\u4ee3\u7801\u91cc\uff0c\u6211\u4eec\u53ea\u9700\u8981\u7f16\u5199\u6a21\u5f0f\uff0cErlang\u7f16\u8bd1\u5668\u5c31\u4f1a\u751f\u6210\u6700\u4f73\u7684\u6a21\u5f0f\u5339\u914d\u4ee3\u7801\uff0c\u7528\u5b83\u6765\u9009\u62e9\u6b63\u786e\u7684\u7a0b\u5e8f\u5165\u53e3\u70b9\u3002"),(0,n.kt)("h4",{id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"},"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u867d\u7136CreationScript\u5e76\u4e0d\u9700\u8981\u5411\u5f00\u53d1\u8005\u63d0\u4f9b\u6a21\u5f0f\u5339\u914d\u7684\u8bed\u6cd5\u548c\u80fd\u529b\uff0c\u4f46\u662fCreationScript\u672c\u8eab\u5219\u4f1a\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5b9a\u4e49\u7ec4\u4ef6\u53c2\u6570\u7684\u65f6\u5019\uff0c\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u89e3\u6784\u7279\u5b9a\u89e3\u6784\u7684\u5c5e\u6027\u5e26\u6765\u7684\u8026\u5408\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\n")),(0,n.kt)("p",null,"\u8fd9\u91ccPosition\u53ef\u80fd\u5bf9\u5185\u90e8\u7684\u5143\u7ec4\u4f7f\u7528\u4e0d\u540c\u7684\u5c5e\u6027\u540d\u5b57\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5f00\u53d1\u8005\u9700\u8981\u53bb\u4e86\u89e3\u8fd9\u4e2a\u540d\u5b57\uff0c\u8fdb\u800c\u7f16\u5199\u7684\u7ec4\u4ef6\u4ee3\u7801\u4e0e\u6574\u4e2a\u540d\u5b57\u8026\u5408\uff0c\u6240\u4ee5\u4e0d\u5229\u7528\u51fd\u6570\u91cd\u7528\uff0c\u4f8b\u5982\u5177\u6709\u76f8\u540c\u6570\u636e\u7c7b\u578b\u7ec4\u5408\u7684\u5143\u7ec4\u5c31\u4e0d\u80fd\u518d\u4f7f\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7ec4\u4ef6\u7684\u53c2\u6570\u5fc5\u987b\u4f7f\u7528\u5143\u7ec4\u7684\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u8ba9\u7ec4\u4ef6\u53ef\u4ee5\u7f16\u5199\u4e0e\u5177\u4f53\u7ed3\u6784\u65e0\u5173\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h4",{id:"27122-\u540d\u5b57\u5339\u914d"},"2.7.12.2 \u540d\u5b57\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u662f\u5339\u914d\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6982\u5ff5\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\uff0c\u5373\u7f16\u8bd1\u5668\u53ea\u662f\u5e2e\u52a9\u4f60\u505a\u4e00\u4e2a\u7c7b\u578b\u68c0\u67e5\uff0c\u53ef\u4ee5\u8fbe\u5230\u4e24\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u5b9a\u51fd\u6570\u8c03\u7528\u7684\u5408\u6cd5\u6027\uff0c\u4fdd\u8bc1\u6b63\u786e\u7684\u53c2\u6570\u53ca\u5176\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5e2e\u52a9\u8282\u7701\u4e00\u4e9b\u5197\u4f59\u4ee3\u7801\uff0c\u6bd4\u5982\u5982\u679c\u4e24\u4e2a\u6570\u636e\u7684\u6570\u636e\u7c7b\u578b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5219\u9700\u8981\u62c6\u5f00\u4e3a\u57fa\u672c\u7c7b\u578b\u518d\u8fdb\u884c\u9010\u4e2a\u6bd4\u8f83\uff0c\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801\u4e0d\u5149\u5305\u542b\u4ece\u6570\u636e\u7ed3\u6784\u4e2d\u8bfb\u53d6\u7279\u5b9a\u7684\u6570\u636e\u5b57\u6bb5\uff0c\u8fd8\u5305\u62ec\u5bf9\u63a5\u53d7\u51fd\u6570\u53c2\u6570\u53d8\u91cf\u7684\u8d4b\u503c\uff0c\u6a21\u5f0f\u5339\u914d\u907f\u514d\u4e86\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801")),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e2a\u5b8c\u6574\u7684\u51fd\u6570\u7684\u8c03\u7528\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6307\u5b9a\u51fd\u6570\u53c2\u6570\uff0c\u5bf9\u4e8e\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u8fd8\u9700\u8981\u4e86\u89e3\u7ed3\u6784\u540e\u9762\u7684\u6570\u636e\u5e03\u5c40\uff0c\u8fd9\u4e9b\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u90fd\u662f\u5f88\u7e41\u7410\u7684\u3002"),(0,n.kt)("p",null,"\u540d\u5b57\u5339\u914d\u662f\u6a21\u5f0f\u5339\u914d\u7684\u5347\u7ea7\u7248\u672c\uff0c\u5b83\u6709\u4e24\u70b9\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7b80\u5316\u4e86\u6570\u636e\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u5b83\u9f13\u52b1\u66f4\u6241\u5e73\u7684\u6570\u636e\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u9664\u4e86\u4fdd\u8bc1\u7ed3\u6784\u5339\u914d\uff0c\u8fd8\u9700\u8981\u4fdd\u8bc1\u540d\u5b57\u5339\u914d\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u907f\u514d\u7528\u6237\u8f93\u5165\u53c2\u6570\uff0c\u51fd\u6570\u8c03\u7528\u9000\u5316\u4e3a\u8bed\u4e49\u7ec4\u5408")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u8fd9\u6837\u505a\u9700\u8981\u7ed3\u5408\u6570\u636e\u5b9a\u4e49\u7684\u5171\u8bc6\uff0c\u5373\u6240\u6709\u7a0b\u5e8f\u9762\u5411\u516c\u5171\u6570\u636e\u7f16\u7a0b\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7528\u6237\u53ef\u4ee5\u624b\u5de5\u6307\u5b9a\u53c2\u6570\uff0c\u6b64\u65f6\u540d\u5b57\u5339\u914d\u9000\u5316\u4e3a\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("h3",{id:"2712-\u5206\u5e03\u5f0f"},"2.7.12 \u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5206\u5e03\u5f0f\u5185\u7f6e\u4e8e\u8bed\u8a00\u5185\uff0c\u5728CreationVM\u4e0a\u5b9e\u73b0\u5206\u5e03\u5f0f\u8c03\u5ea6\uff0c\u4ee5\u53caUDP\u8fdc\u7a0b\u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"distributed",src:l(9306).Z,width:"2544",height:"1384"})),(0,n.kt)("h4",{id:"27121-actor\u6a21\u578b"},"2.7.12.1 Actor\u6a21\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Actor\u6a21\u578b\u4e2d\uff0cActor\u4e4b\u95f4\u662f\u9ad8\u5ea6\u72ec\u7acb\u7684\uff0c\u5e76\u4e14\u8ba1\u7b97\u5b8c\u8fd4\u56de\u7ed3\u679c\u5c31\u53ef\u4ee5\uff0c\u7136\u800c\u6e38\u620f\u4e2d\u7684\u72b6\u6001\u662f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u7684\uff0c\u6240\u4ee5\u8fd9\u5bfc\u81f4\u5b83\u5e76\u4e0d\u80fd\u5355\u7eaf\u5730\u628aActor\u5f53\u6210\u4e00\u4e2a\u72ec\u7acb\u5bf9\u8c61\uff0c\u4ec5\u4ec5\u4f7f\u7528\u6d88\u606f\u901a\u4fe1\u662f\u4e0d\u591f\u7684\uff0c\u4e5f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u5728\u7ba1\u7406\u4e0a\uff0c\u4ed6\u9700\u8981\u7ef4\u62a4\u4e00\u4e2aActor\u5217\u8868\uff0c\u5e76\u4fdd\u8bc1\u5b83\u4eec\u6bcf\u4e00\u5e27\u90fd\u4f1a\u6309\u7167\u67d0\u79cd\u987a\u5e8f\u6267\u884c\uff0cActor\u4e4b\u95f4\u5305\u542b\u4f9d\u8d56\u5173\u7cfb\uff1b\u800c\u4e0d\u4ec5\u4ec5\u662f\u72ec\u7acb\u7ba1\u7406\u6bcf\u4e2aActor\u81ea\u8eab\u7684\u72b6\u6001\u3002"),(0,n.kt)("h3",{id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"},"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u6709\u591a\u4e2a\u53c2\u6570\uff0c\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\u7684\u503c\u53ef\u4ee5\u5e26\u5165\u51fd\u6570\uff0c\u4f46\u662f\u6b64\u65f6\u4e0d\u8ba1\u7b97\uff0c\u800c\u662f\u5f62\u6210\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u5305\u542b\u4e00\u90e8\u5206\u4e0a\u4e0b\u6587\uff0c\u4f46\u662f\u8fd9\u4e2a\u4e0a\u4e0b\u6587\u662f\u4e0d\u53d8\u7684\u3002\u7136\u540e\u5f53\u6211\u4eec\u628a\u5269\u4e0b\u7684\u53c2\u6570\u5e26\u5165\u51fd\u6570\uff0c\u8fdb\u884c\u6574\u4e2a\u51fd\u6570\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u6548\u679c\u5c31\u662f\u67ef\u91cc\u5316\u6216\u8005\u79f0\u4e3a\u90e8\u5206\u65bd\u7528\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\uff0cRealityIS\u7684\u6574\u4e2a\u7ec4\u4ef6\u8ba1\u7b97\u65b9\u5f0f\uff0c\u8ddf\u67ef\u91cc\u5316\u7684\u601d\u8def\u662f\u7c7b\u4f3c\u7684\u3002\u4e00\u90e8\u5206\u5c5e\u6027\u5148\u5e26\u5165\u65e9\u671f\u7684\u4e00\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\uff0c\u662f\u5728\u4e3a\u540e\u7eed\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6784\u9020\u4e0a\u4e0b\u6587\u3002\u53ea\u4e0d\u8fc7\u6574\u4e2a\u4e0a\u4e0b\u6587\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u7ba1\u7406\uff0c\u800c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u624b\u52a8\u7ba1\u7406\uff0c\u5e76\u8bb0\u4f4f\u90a3\u4e9b\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(4771).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u8fd9\u4e2a\u601d\u8def\u662fRealityIS\u53ef\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u7684\u7406\u8bba\u57fa\u7840\uff0c\u6b63\u662f\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u90a3\u79cd\u5d4c\u5957\u7684\u67ef\u91cc\u5316\u673a\u5236\u53ef\u4ee5\u8f6c\u53d8\u4e3a\u6241\u5e73\u7684\u7ec4\u5408\u7ed3\u6784\u3002\u4f46\u662f\u5176\u540e\u9762\u7684\u6838\u5fc3\u7406\u8bba\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5982\u679c\u53ef\u89c6\u5316\u5c55\u5f00\uff0cRealityIS\u7684\u7ec4\u5408\u4e5f\u5e94\u8be5\u662f\u5d4c\u5957\u7684\uff0c\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u7ed3\u679c\u662f\u4e00\u81f4\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd0\u884c\u65f6\u4ee5\u4e0d\u540c\u7684\u65b9\u5f0f\u53bb\u7ef4\u6301\u95ed\u5305\u91cc\u9762\u7684\u90a3\u4e9b\u53d8\u91cf\u3002"),(0,n.kt)("h4",{id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6"},"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8bc1\u660e\uff0c\u7406\u8bba\u4e0aRealityIS\u7684\u7ec4\u4ef6\u7ec4\u5408\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u662f\u7b49\u6548\u7684\uff0c\u90a3\u4e48\u4e3a\u4ec0\u4e48\u80fd\u5b9e\u73b0\u6241\u5e73\u7ec4\u5408\u5462\uff1f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fd9\u91cc\u7684\u6838\u5fc3\u79d8\u5bc6\u5728\u4e8e\uff0c\u6e38\u620f\u673a\u5236\u4e2d\u7ec4\u4ef6\u7684\u8de8\u5e27\u901a\u4fe1\u5c06\u8d4b\u503c\u8bed\u53e5\u89e3\u8026\u4e86\uff01")),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u6216\u8005\u51fd\u6570\u7f16\u7a0b\u4e2d\uff0c\u4e00\u4e2a\u51fd\u6570\u63a5\u53d7\u53e6\u4e00\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u8d4b\u503c\u7ed9\u4e00\u4e2a\u53d8\u91cf\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u5b58\u50a8\u8d77\u6765\uff0c\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u901a\u5e38\u6839\u636e\u51fd\u6570\u7684\u4f5c\u7528\u57df\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u6b63\u662f\u56e0\u4e3a\u8d4b\u503c\u8bed\u53e5\uff0c\u6240\u4ee5\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u53ea\u80fd\u5d4c\u5957\u8fdb\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u968f\u610f\u7ec4\u5408\u5230\u4e00\u8d77\u7531\u5b83\u4eec\u81ea\u7531\u53d1\u6325\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u610f\u7ec4\u5408\u8981\u60f3\u81ea\u52a8\u53d1\u6325\u4f5c\u4e3a\uff0c\u8fd8\u9700\u8981\u53c2\u6570\u4e0e\u51fd\u6570\u4e4b\u95f4\u81ea\u52a8\u5173\u8054\u548c\u5173\u7cfb\uff0c\u8fd9\u5c31\u662fRealityIS\u5728\u5b9a\u4e49\u53d8\u91cf\u7684\u65f6\u5019\u5c31\u7ea6\u675f\u597d\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u901a\u8fc7\u8de8\u5e27\u7684\u8d4b\u503c\uff0c\u51fd\u6570\u53c2\u6570\u5c31\u4e00\u4e0d\u7528\u8ddf\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u662f\u8026\u5408\u5728\u4e00\u8d77\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u72ec\u7acb\u5b58\u5728\u548c\u7ec4\u5408\uff0c\u518d\u52a0\u4e0a\u4e0a\u8ff0\u63cf\u8ff0\u7684\u51fd\u6570\u4e0e\u53d8\u91cf\u4e4b\u95f4\u7684\u81ea\u52a8\u5173\u7cfb\uff0c\u6240\u4ee5\u5c31\u80fd\u591f\u5b9e\u73b0\u5d4c\u5957\u51fd\u6570\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1RealityIS\u4e0d\u652f\u6301\u53d6\u81ea\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5b9e\u4f53\u5bf9\u8c61\u7684\u53c2\u6570\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u628a\u6765\u81eaA\u7684\u5f71\u54cd\u8ba1\u7b97\u7684\u51fd\u6570\u7ed3\u679c\u5b58\u50a8\u5728B\u4e2d\uff0c\u7136\u540e\u518d\u53d6B\u7684\u503c\u5728C\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u5176\u5b9e\u95f4\u63a5\u5c31\u662f\u4e00\u4e2a\u591a\u4e2a\u6df1\u5c42\u51fd\u6570\u5d4c\u5957\u7684\u7ed3\u679c\u3002\u66f4\u6df1\u5c42\u6b21\u7684\u5d4c\u5957\u53ef\u4ee5\u4e00\u6b21\u6765\u63a8\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u662f\u5b8c\u5168\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u53ea\u662f\u4e0a\u4e0b\u6587\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u8ba1\u7b97\u7ed3\u679c\u88ab\u8de8\u5e27\u7684\u5b9e\u4f53\u53d8\u91cf\u8fdb\u884c\u4fdd\u5b58\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u7b80\u5316\u4e86\u6574\u4e2a\u8ba1\u7b97\u67b6\u6784\uff0c\u540c\u65f6\u7b80\u5316\u4e86\u7528\u6237\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"},"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u901a\u8fc7\u5d4c\u5957\u6765\u5b9e\u73b0\u7ec4\u5408\u3002\u5c3d\u7ba1\u5355\u4e2a\u51fd\u6570\u7684\u529f\u80fd\u662f\u5c0f\u7c92\u5ea6\u7684\uff0c\u4f46\u662f\u5d4c\u5957\u7684\u51fd\u6570\u5219\u5f62\u6210\u4e86\u7279\u5316\uff0c\u5d4c\u5957\u7ec4\u5408\u540e\u7684\u51fd\u6570\u51e0\u4e4e\u90fd\u662f\u5177\u6709\u4e0d\u540c\u903b\u8f91\u7684\u51fd\u6570\uff0c\u56e0\u6b64\u51e0\u4e4e\u65e0\u6cd5\u8fdb\u884c\u5e76\u884c\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u56e0\u4e3a\u51fd\u6570\u7684\u53c2\u6570\u672c\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u4e00\u822c\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u51fd\u6570\u53ef\u80fd\u5177\u6709\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u5373\u4f7f\u6211\u4eec\u80fd\u591f\u628a\u6240\u6709\u5bf9\u8fd9\u4e9b\u51fd\u6570\u7684\u8c03\u7528\u6c47\u96c6\u8d77\u6765\uff0c\u4ecd\u7136\u4e0d\u80fd\u591f\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u63d0\u5347\u5e76\u884c\u6027\uff0c\u6211\u4eec\u9700\u8981\u628a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u7684\u673a\u5236\u8f6c\u6362\u4e3a\u4f20\u9012\u503c\u7684\u673a\u5236\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4f20\u9012\u7684\u53c2\u6570\u662f\u4e00\u4e2a\u503c\uff0c\u4f46\u662f\u56e0\u4e3a\u6bcf\u4e00\u4e2a\u5b9e\u9645\u8ba1\u7b97\u7684\u503c\u90fd\u7ecf\u8fc7\u4e86\u524d\u9762\u4e00\u8fde\u4e32\u7684\u51fd\u6570\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7ec4\u5408\u4ecd\u7136\u6ee1\u8db3\u4e00\u4e2a\u5d4c\u5957\u7684\u590d\u5408\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u800cRealityIS\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\uff0c\u901a\u8fc7\u6241\u5e73\u5316\uff0c\u4e0d\u4ec5\u4fdd\u7559\u4e86\u51fd\u6570\u5f0f\u7f16\u7a0b\u672c\u8eab\u7684\u7279\u8d28\uff0c\u800c\u4e14\u901a\u8fc7\u5c06\u6bcf\u4e2a\u51fd\u6570\u8c03\u7528\u90fd\u72ec\u7acb\u51fa\u6765\uff0c\u4f7f\u5f97\u76f8\u540c\u7684\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"},"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"),(0,n.kt)("p",null,"\u51fd\u6570\u5f0f\u7f16\u7a0b\uff08FP\uff09\u672c\u8eab\u7684\u6982\u5ff5\u6bd4\u8f83\u7b80\u5355\u4e86\uff0c\u5c31\u662f\u76f8\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\uff08OOP\uff09\uff0cFP\u7684\u51fd\u6570\u5185\u90e8\u6ca1\u6709\u72b6\u6001\uff0c\u5b8c\u5168\u4f9d\u8d56\u4e8e\u5916\u90e8\u8f93\u5165\uff0c\u6240\u4ee5\u4efb\u4f55\u8f93\u5165\u90fd\u6709\u552f\u4e00\u7684\u8f93\u51fa\uff0c\u8fd9\u79cd\u79f0\u4e3a\u6ca1\u6709\u526f\u4f5c\u7528\u7684\u65b9\u5f0f\uff0c\u5c31\u5f88\u5bb9\u6613\u5b9e\u73b0\u5e76\u53d1\uff0c\u4e5f\u5f88\u5bb9\u6613\u7ba1\u7406\u4ee3\u7801\u590d\u7528\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u539f\u7406")),(0,n.kt)("p",null,"\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u628a\u591a\u4e2a\u7ec4\u4ef6\u4ee5\u67d0\u79cd\u65b9\u5f0f\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u4e00\u822c\u6765\u8bf4\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5176\u5f62\u6210\u7684\u6574\u4f53\u4e5f\u662f\u4e00\u4e2a\u590d\u5408\u4f53\u3002\u5bf9\u4e8e\u590d\u5408\u64cd\u4f5c\u672c\u8eab\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u4e0d\u9700\u8981\u5904\u7406\u5404\u79cd\u590d\u6742\u7684\u53c2\u6570\uff0c\u56e0\u4e3a\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u7b80\u5355\u7684\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u51fd\u6570\u672c\u8eab\u5305\u542b\u6709\u6620\u5c04\u5173\u7cfb")),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u5e0c\u671b\u540e\u8005\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u5c01\u88c5\u673a\u5236\u4e0d\u592a\u5229\u4e8e\u7528\u6765\u4f5c\u4e3a\u4e00\u79cd\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u590d\u7528\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u590d\u5408\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u590d\u5408\u4f53\u662f\u5426\u5305\u542b\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u8be5\u590d\u5408\u4f53\u4ec5\u4ec5\u662f\u4e00\u4e2a\u529f\u80fd\u7ec4\u5408\u4f53")),(0,n.kt)("p",null,"\u5176\u4e2d\u524d\u8005\u5c31\u662f\u4f20\u7edf\u7684\u547d\u4ee4\u5f0f\u7f16\u7a0b\u6240\u4ee3\u8868\u7684\u65b9\u6cd5\uff0c\u5728OOP\u4e2d\uff0c\u65b9\u6cd5\u4e00\u822c\u662f\u9644\u7740\u4e8e\u67d0\u4e2a\u5bf9\u8c61\u7684\uff0c\u800c\u5bf9\u8c61\u4e00\u822c\u62e5\u6709\u79c1\u6709\u72b6\u6001\uff0c\u56e0\u6b64\u5373\u4f7f\u591a\u4e2a\u5bf9\u8c61\u4ee5\u67d0\u79cd\u65b9\u5f0f\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\uff0c\u5f53\u5728\u4f7f\u7528\u67d0\u4e2a\u8fd9\u6837\u7684\u590d\u5408\u4f53\u65f6\uff0c\u8c03\u7528\u8005\u5c31\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u4e0d\u540c\u7684\u53c2\u6570\u4e0b\u590d\u5408\u4f53\u4f1a\u8868\u73b0\u51fa\u4e0d\u540c\u7684\u529f\u80fd\u7ed3\u679c\u3002\u8fd9\u6837\u5c31\u4f7f\u5f97\u590d\u5408\u4f53\u4e0d\u5229\u4e8e\u4f7f\u7528\uff0c\u5c3d\u7ba1\u590d\u5408\u4f53\u672c\u8eab\u53ef\u4ee5\u5305\u542b\u4e00\u4e9b\u9ed8\u8ba4\u53c2\u6570\uff0c\u4f46\u662f\u8fd8\u662f\u9700\u8981\u5c0f\u5fc3\u7ef4\u62a4\u8fd9\u4e9b\u53c2\u6570\u624d\u80fd\u4fdd\u8bc1\u7ed3\u6784\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u5f88\u591a\u8f6f\u4ef6\u6216\u8005\u5e93\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u6709\u65f6\u5019\u54ea\u4e9b\u53c2\u6570\u5fd8\u6389\u4e86\u6216\u8005\u8bbe\u7f6e\u9519\u4e86\uff0c\u6574\u4e2a\u8f6f\u4ef6\u5c31\u53ef\u80fd\u51fa\u73b0\u4e0d\u53ef\u9884\u671f\u7684\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4f20\u7edf\u7684\u5b9e\u4f53\u7ecf\u6d4e\u4e2d\u7684\u5927\u90e8\u5206\u90e8\u4ef6\u662f\u4ee5\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4f8b\u5982\u6bcf\u4e2a\u673a\u5668\u90fd\u5e26\u6709\u5404\u79cd\u53c2\u6570\uff0c\u4f7f\u7528\u8005\u9700\u8981\u9996\u5148\u8bbe\u7f6e\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7136\u540e\u518d\u4e0b\u8fbe\u8fd0\u4f5c\u547d\u4ee4\u3002\u4f8b\u5982\u6d17\u8863\u673a\u7684\u547d\u4ee4\u53ef\u80fd\u5f88\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4ed6\u4e00\u4e9b\u5de5\u4e1a\u673a\u5668\u53ef\u80fd\u5219\u6bd4\u8f83\u590d\u6742\u3002\u8fd9\u662f\u56e0\u4e3a\u4e00\u53f0\u5b9e\u4f53\u7684\u673a\u5668\uff0c\u5b83\u6ca1\u6709\u529e\u6cd5\u63a5\u53d7\u4e00\u4e2a\u5916\u5728\u7684\u8f93\u5165\u8bbe\u7f6e\uff0c\u4e3b\u8981\u7684\u8f93\u5165\u65b9\u6cd5\u662f\u624b\u5de5\u64cd\u4f5c\uff0c\u5927\u90e8\u5206\u673a\u5668\u5e76\u4e0d\u5141\u8bb8\u63d2\u5165\u4e00\u4e2a\u5916\u63a5\u4fe1\u53f7\u6e90\u4ee5\u53ef\u7f16\u7a0b\u7684\u65b9\u5f0f\u8bbe\u7f6e\u53c2\u6570\u3002\u7136\u800c\u5728\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e2d\u6211\u4eec\u4f7f\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u72b6\u6001\u5168\u90e8\u8c03\u6574\u4e3a\u590d\u5408\u4f53\u7684\u53c2\u6570\uff0c\u8ba9\u590d\u5408\u4f53\u672c\u8eab\u4e0d\u5e26\u4efb\u4f55\u72b6\u6001\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u56e0\u4e3a\u4e00\u65e6\u590d\u5408\u4f53\u7684\u4f7f\u7528\u5305\u542b\u624b\u5de5\u8bbe\u7f6e\u53c2\u6570\u7684\u6d41\u7a0b\uff0c\u5e76\u4e14\u8fd9\u4e9b\u8bbe\u7f6e\u7684\u4f4d\u7f6e\u548c\u683c\u5f0f\u8fd8\u591a\u79cd\u591a\u6837\uff0c\u4f7f\u7528\u8005\u5c31\u65e0\u6cd5\u505a\u5230\u81ea\u52a8\u5316\uff0c\u5e76\u4e14\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u5229\u4e8e\u666e\u901a\u7528\u6237\u4f7f\u7528"),"\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u6700\u6838\u5fc3\u7684\u90e8\u5206\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u4e0d\u80fd\u4ee5\u5e26\u6709\u72b6\u6001\u7684\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u590d\u5408"),"\uff0c\u8fd9\u4e5f\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u6a21\u5f0f\u4e2d\u590d\u5408\u673a\u5236\u7684\u7279\u5f81\uff0c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e2d\u4ee5\u5bf9\u8c61\u5bf9\u5355\u4f4d\uff0c\u5bf9\u8c61\u662f\u7b2c\u4e00\u7b49\u516c\u6c11\uff0c\u51fd\u6570\u662f\u5bf9\u8c61\u7684\u7ec4\u6210\u90e8\u5206\uff0c\u6240\u4ee5\u5bf9\u8c61\u672c\u8eab\u5c31\u5f88\u5bb9\u6613\u5305\u542b\u72b6\u6001\uff0c\u4ee5\u81f3\u4e8e\u5f88\u96be\u5f62\u6210\u4e00\u79cd\u5f88\u597d\u7684\u590d\u5408\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u6bd4\u4ee5\u51fd\u6570\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\u8981\u7b80\u5355\u7684\u591a\uff0c\u51fd\u6570\u7684\u7c92\u5ea6\u8fd8\u662f\u6bd4\u8f83\u7ec6\u3002\u6240\u4ee5\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u4e00\u4e2a\u5bf9\u8c61\u5373\u662f\u4e00\u4e2a\u590d\u5408\u4f53\uff0c\u5bf9\u8c61\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u72b6\u6001\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u5176\u5b9e\u5c31\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684\u4e00\u4e2a\u590d\u5408\u51fd\u6570\u7684\u6241\u5e73\u5f62\u5f0f\u3002\u6b64\u5916\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5e76\u4e0d\u662f\u5355\u7eaf\u4e00\u5806\u51fd\u6570\u7684\u7ec4\u5408\uff0c\u8fd9\u4e9b\u51fd\u6570\u4e4b\u95f4\u5fc5\u987b\u662f\u6709\u76f8\u4e92\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bf9\u8c61\u539f\u5219\u4e0a\u53ea\u4ee3\u8868\u4e00\u4e2a\u590d\u5408\u51fd\u6570\uff0c\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u5185\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u590d\u5408\u51fd\u6570\u662f\u5b64\u7acb\u7684\uff0c\u5219\u4ed6\u4eec\u5e94\u8be5\u8868\u793a\u4e3a\u4e0d\u540c\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u673a\u5236")),(0,n.kt)("p",null,"\u5173\u4e8eFP\u7684\u590d\u5408\uff0c\u4ed6\u5176\u5b9e\u548c\u6570\u5b66\u4e2d\u7684\u590d\u5408\u51fd\u6570\u6982\u5ff5\u662f\u7c7b\u4f3c\u7684\uff0c\u5c31\u662f\u4e00\u4e2a\u5d4c\u5957\u7684\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(3631).Z,width:"538",height:"36"})),(0,n.kt)("p",null,"FP\u5b9e\u73b0\u590d\u5408\u7684\u673a\u5236\u5c31\u662f\u5c06\u51fd\u6570\u672c\u8eab\u770b\u4f5c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u53c2\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u76f8\u5f53\u4e8e\u53e6\u4e00\u4e2a\u51fd\u6570\u4e2d\u67d0\u4e2a\u672a\u77e5\u53d8\u91cf\u662f\u7531\u8fd9\u4e2a\u4f5c\u4e3a\u53c2\u6570\u7684\u51fd\u6570\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u8fd9\u6837\u5f62\u6210\u7684\u7ed3\u679c\u51e0\u4e4e\u5c31\u8ddf\u590d\u5408\u51fd\u6570\u662f\u4e00\u6837\u7684\u6548\u679c\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u770b\u590d\u5408\u51fd\u6570\uff0c\u5b83\u662f\u6709\u7ed3\u6784\u7684\uff0c\u4e0d\u662f\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4f60\u9700\u8981\u7406\u89e3\u51e0\u4e2a\u51fd\u6570\u590d\u5408\u4e4b\u540e\u7684\u90a3\u4e2a\u7ed3\u679c\u7684\u7ed3\u6784\u624d\u80fd\u5f88\u597d\u5730\u590d\u5408\uff0c\u4f8b\u5982\u4f60\u6362\u4e00\u4e2a\u51fd\u6570\u590d\u5408\u4ee5\u540e\u8868\u73b0\u51fa\u7684\u7279\u5f81\u53ef\u80fd\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u3002\u56e0\u6b64\u8fd9\u79cd\u590d\u5408\u65b9\u5f0f\u53ea\u9002\u5408\u7a0b\u5e8f\u5458\uff0c\u4e0d\u80fd\u628a\u8fd9\u79cd\u65b9\u5f0f\u4e22\u7ed9\u666e\u901a\u7528\u6237\uff0c\u666e\u901a\u7528\u6237\u9700\u8981\u4e00\u79cd\u66f4\u6241\u5e73\u7684\uff0c\u4e0d\u9700\u8981\u4e86\u89e3\u90a3\u4e48\u591a\u7ed3\u6784\u7684\u7ec4\u5408\u65b9\u5f0f\uff1a\u591a\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u662f\u591a\u4e00\u4e2a\u529f\u80fd\uff0c\u4f46\u4ed6\u4e0d\u4f1a\u8bf4\u8ba9\u884c\u4e3a\u7ed3\u679c\u5b8c\u5168\u53d8\u4e86\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2714-serverless"},"2.7.14 Serverless"),(0,n.kt)("p",null,"\u4ece\u6982\u5ff5\u4e0a\u8bb2\uff0cCreationScript\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u5c31\u662f\u4e00\u79cd\u771f\u6b63\u7684Serverless\u670d\u52a1\uff1a\u5373\u5f00\u53d1\u8005\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u51fd\u6570\uff0c\u5e73\u53f0\u81ea\u52a8\u5b9e\u73b0\u4f38\u7f29\u548c\u5e76\u53d1\uff0c\u5f00\u53d1\u8005\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u670d\u52a1\u5668\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"Serverless\u662f\u4e00\u79cd\u7406\u5ff5\uff0c\u73b0\u6709\u4e91\u5382\u5546\u6709\u4e00\u79cd\u5b9e\u73b0\uff0c\u4f46\u8fd9\u79cd\u5b9e\u73b0\u5e76\u4e0d\u662fSeverless\u7684\u7ec8\u6781\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u4e91\u5382\u5546\u63d0\u4f9b\u7684Serverless\uff0c\u4ed6\u4eec\u5176\u5b9e\u8fd8\u53ea\u662f\u5c06\u8ba1\u7b97\u6258\u7ba1\u7b80\u5316\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u6574\u4e2a\u7a0b\u5e8f\uff0c\u8fd9\u6837\u4fbf\u4e8e\u4f38\u7f29\uff0c\u800c\u4e91\u5382\u5546\u5b9e\u73b0\u7684\u4f38\u7f29\u4e5f\u6bd4\u8f83\u7b80\u5355\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u51fd\u6570\u672c\u8eab\u662f\u4e0e\u5176\u4ed6\u4e1a\u52a1\u6ca1\u6709\u8026\u5408\u7684\uff0c\u6240\u4ee5\u4ed6\u4eec\u628a\u51fd\u6570\u548c\u6570\u636e\u590d\u5236\u5230\u5176\u4ed6\u670d\u52a1\u5668\u6267\u884c\u5c31\u597d\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u8fd9\u91cc\u9762\u6709\u5f88\u5927\u7684\u9650\u5236\uff0c\u4ed6\u53ea\u9650\u4e8e\u51e0\u4e4e\u5b8c\u5168\u72ec\u7acb\u7684\u51fd\u6570\uff0c\u65e0\u6cd5\u590d\u7528\u72b6\u6001\uff08\u6e38\u620f\u6bcf\u4e00\u5e27\u90fd\u8981\u8ba1\u7b97\uff0c\u9700\u8981\u7ef4\u6301\u4e00\u4e9b\u72b6\u6001\uff09\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0Streaming\u7b49\u7b49\u4e00\u4e9b\u7279\u6027\uff0c\u5bf9\u5b9e\u65f6\u6027\u652f\u6301\u4e5f\u6bd4\u8f83\u5dee\uff0c\u51fd\u6570\u5b58\u6d3b\u7684\u65f6\u95f4\u4e5f\u4e0d\u597d\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4ed6\u4eec\u53ea\u662f\u5355\u7eaf\u6267\u884c\u4e00\u4e2a\u51fd\u6570\uff0c\u5e76\u6ca1\u6709\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u800c\u5b8c\u5168\u8981\u4f9d\u8d56\u4e8e\u5f00\u53d1\u8005\u81ea\u8eab\u53bb\u8003\u8651\u600e\u6837\u62c6\u5206\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u7684CreationScript\uff0c\u4ed6\u662f\u7ed3\u5408\u81ea\u5df1\u7684\u6570\u636e\u7279\u5f81\u548c\u6e38\u620f\u8fd0\u884c\u673a\u5236\uff0c\u5b9e\u73b0\u7684\u4e00\u5957\u5e76\u53d1\u63a7\u5236\u8bed\u8a00\uff0c\u5b83\u901a\u8fc7\u865a\u62df\u673a\u4e0e\u7ec4\u4ef6\uff08\u4e00\u4e2a\u51fd\u6570\uff09\u7684\u914d\u5408\u6765\u5b9e\u73b0\u4e00\u4e9b\u5982\u72b6\u6001\u6301\u4e45\u5171\u4eab\uff0cStreaming\uff0c\u5e76\u53d1\u5206\u53d1\uff0c\u51fd\u6570\u4e4b\u95f4\u7684\u901a\u4fe1\u7b49\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5982\u679c\u6ca1\u6709\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u5b9a\u5236\u662f\u5f88\u96be\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u51fd\u6570/\u7ec4\u4ef6\u8ddf\u8bed\u8a00\u3001\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u7ed3\u5408\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u7ec4\u4ef6\u4e4b\u95f4\u600e\u4e48\u53bb\u7ec4\u7ec7\u903b\u8f91\u7684\u4e8b\u60c5\uff0c\u5e73\u53f0\u4f1a\u81ea\u52a8\u628a\u8fd9\u4e9b\u7ec4\u4ef6\u51fd\u6570\u5206\u914d\u5230Serverless\u7684\u67b6\u6784\u4e2d\u53bb\uff0c\u8fd9\u5c31\u662f\u6211\u4eec\u5b9a\u4e49\u7684\u4e0d\u540c\u7684\u66f4\u597d\u7684Serverless\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u5f3a\u8c03RealityIS\u662f\u4e00\u4e2a\u5927\u578b\u7684\u52a8\u6001\u7a0b\u5e8f\u7684\u539f\u56e0\uff0c\u91cc\u9762\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u90fd\u662f\u4e00\u4e2a\u5f88\u5c0f\u7684\u903b\u8f91\uff0c\u90fd\u53ef\u4ee5\u88ab\u72ec\u7acb\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u4e5f\u662f\u4f4e\u8026\u5408\u7684\uff0c\u6240\u4ee5\u6211\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u5730\u63a7\u5236\u4ed6\u4eec\uff0c\u6839\u636e\u9700\u8981\u53ea\u52a0\u8f7d\u4f1a\u7528\u5230\u7684\u90a3\u4e00\u90e8\u5206\u7a0b\u5e8f\uff0c\u4e5f\u53ef\u4ee5\u6839\u636e\u670d\u52a1\u5668\u8d1f\u8f7d\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u5e76\u4e0d\u4ec5\u4ec5\u662f\u6309\u51fd\u6570\u628a\u4ed6\u4eec\u62c6\u51fa\u6765\u800c\u5df2\uff0c\u51fd\u6570\u4e4b\u95f4\u8fd8\u662f\u6709\u5173\u7cfb\u7684\uff0c\u5e76\u4e0d\u662f\u5b8c\u5168\u72ec\u7acb\u7684\uff0c\u8fd9\u79cd\u8c03\u7528\u5173\u7cfb\u8981\u9760RealityIS\u8fd0\u884c\u65f6\u865a\u62df\u673a\u6765\u652f\u6301\uff0c\u8fd9\u662f\u6700\u5173\u952e\u7684\u90e8\u5206\uff0c\u5426\u5219\u4ed6\u5c31\u53ea\u662f\u4e00\u4e2a\u73b0\u5728\u7684\u4e91\u5382\u5546\u7c7b\u4f3c\u7684Serverless\u670d\u52a1\u800c\u5df2\u3002"),(0,n.kt)("h3",{id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5"},"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u90a3\u4e9b\u52a8\u753b\u3001\u6e32\u67d3\u3001\u7269\u7406\u6a21\u62df\u7b49\u89c6\u89c9\u56e0\u7d20\u4e4b\u540e\uff0c\u6e38\u620f\u80cc\u540e\u7684\u673a\u5236\u53ef\u4ee5\u62bd\u8c61\u4e3a\u4e00\u5957\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5176\u4e2d\u6240\u6709\u7684\u884c\u4e3a\u90fd\u62bd\u8c61\u4e3a\u8d44\u6e90\uff0c\u8fd9\u5957\u673a\u5236\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u5404\u79cd\u5404\u6837\u7684\u8d44\u6e90\u968f\u7740\u73a9\u5bb6\u7684\u4ecb\u5165\u8fdb\u884c\u600e\u6837\u7684\u6d41\u52a8\uff0c\u4f8b\u5982\u73a9\u5bb6\u7528\u91d1\u5e01\u8d2d\u4e70\u9053\u5177\uff0c\u7528\u4e0d\u540c\u7684\u9053\u5177\u7ec4\u5408\u5f62\u6210\u65b0\u7684\u9053\u5177\uff0c\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u8bf4\u662f\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u800cMachinations \u53ef\u4ee5\u6a21\u62df\u8fd9\u5957\u6d41\u52a8\u7684\u673a\u5236\uff0c\u5b83\u662f\u4e00\u5957\u8bed\u8a00\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u6a21\u62df\u6240\u6709\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d41\u52a8\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u7684\u4ef7\u503c\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e38\u620f\u673a\u5236\u7684\u6570\u503c\u5e73\u8861\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u5feb\u901f\u6d4b\u8bd5\u8fd9\u5957\u673a\u5236\u7684\u5408\u7406\u6027\uff0c\u8fdb\u800c\u8c03\u6574\u6570\u503c\uff0c\u5426\u5219\u4e0d\u5408\u7406\u7684\u673a\u5236\u76f4\u63a5\u5c31\u5bfc\u81f4\u73a9\u5bb6\u6d41\u5931\uff0c\u8fd9\u8ddf\u5e94\u7528\u7a0b\u5e8f\u4e0d\u592a\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6211\u4eec\u7684\u53ef\u7ec4\u5408\u6027\u8db3\u591f\u597d\uff0c\u6211\u4eec\u662f\u53ef\u4ee5\u5728\u8fd9\u5957\u7cfb\u7edf\u548c\u7a0b\u5e8f\u4e4b\u95f4\u81ea\u52a8\u8f6c\u6362\u7684\uff0c\u8fd9\u6837\u5c31\u8fdb\u4e00\u6b65\u964d\u4f4e\u95e8\u69db\uff0c\u8bbe\u8ba1\u5e08\u662f\u7528\u66f4\u7b26\u5408\u903b\u8f91\u7684\u89c6\u89c9\u65b9\u5f0f\u53bb\u8bbe\u8ba1\u6e38\u620f\uff0c\u800c\u4e0d\u662f\u53bb\u601d\u8003\u4ee3\u7801\u7ed3\u6784\uff0c\u8fd9\u4e2a\u5176\u5b9e\u662f\u6211\u4eec\u7ec4\u5408\u7ec4\u4ef6\u8fdb\u884c\u521b\u4f5c\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u5b83\u4f1a\u6210\u4e3a\u6211\u4eec\u9762\u5411\u7ec4\u5408\u7684\u201c\u5f00\u53d1\u6216\u8005\u8bbe\u8ba1\u8bed\u8a00\u201d")),(0,n.kt)("p",null,"\u5c06\u6765\u6211\u4eec\u7b2c\u4e00\u5bb6\u8981\u6536\u8d2d\u7684\u516c\u53f8\u5c31\u662fMachinations \uff0c\u5f53\u7136\u5982\u679c\u4e0d\u80fd\u6536\u8d2d\uff0c\u6211\u4eec\u81ea\u5df1\u4e5f\u4f1a\u505a\u4e00\u5957\u7c7b\u4f3c\u601d\u8def\u7684\u5de5\u5177\u3002"),(0,n.kt)("h3",{id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6570\u636e\u901a\u5e38\u5b58\u5728\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u6570\u636e\u6700\u7ec8\u662f\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u901a\u4fe1\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u77e5\u9053\u6570\u636e\u4ece\u54ea\u91cc\u6765\uff0c\u600e\u6837\u88ab\u5b9a\u4e49\uff0c\u600e\u6837\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9\u51fd\u6570\uff0c\u56e0\u6b64\uff0c\u6574\u4e2a\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u51e0\u4e4e\u603b\u5728\u5173\u6ce8\u5bf9\u8c61\uff0c\u56e0\u4e3a\u5bf9\u8c61\u662f\u6570\u636e\u7684\u5c01\u88c5\u5b9e\u4f53\u3002\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5f62\u6210\u6570\u636e\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5305\u542b\u4e86\u592a\u591a\u989d\u5916\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u901a\u5e38\u662f\u8ddf\u5177\u4f53\u95ee\u9898\u8026\u5408\u7684\uff0c\u56e0\u4e3a\u5bf9\u8c61\u7684\u7ed3\u6784\u901a\u5e38\u5c31\u662f\u8fd9\u4e9b\u95ee\u9898\u7684\u6620\u5c04"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u7684\u5b9e\u73b0\u672c\u8eab\u6ca1\u6709\u7edf\u4e00\u6807\u51c6")),(0,n.kt)("p",null,"\u56e0\u6b64\u4e0d\u4ec5\u4f7f\u7528\u7684\u4eba\u9700\u8981\u53bb\u7406\u89e3\u548c\u5173\u6ce8\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\uff0c\u5f00\u53d1\u7684\u4eba\u4e5f\u5bb9\u6613\u5c06\u4e00\u4e9b\u7c7b\u578b\u4fe1\u606f\u8026\u5408\u5230\u51fd\u6570\u65b9\u6cd5\u4e2d\u3002\u8fd9\u4e9b\u90fd\u662f\u989d\u5916\u7684\u8d1f\u62c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u6765\u5206\u6790\u4e00\u4e9b\u4e0d\u540c\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"},"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u65b9\u6cd5\u7684\u8bbe\u8ba1\u4e0d\u7528\u5e26\u5e26\u5165\u592a\u591a\u81ea\u5b9a\u4e49\u7c7b\u578b\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u5f53\u6211\u4eec\u5728\u8bbe\u8ba1\u4e00\u4e2a\u65b9\u6cd5\u7684\u65f6\u5019\uff0c\u8111\u888b\u4e2d\u5e94\u8be5\u60f3\u5230\u7684\u662f\u5b83\u5e94\u8be5\u662f\u4e00\u4e2a\u901a\u7528\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u9488\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u5bf9\u8c61\u8bbe\u8ba1\u7684\u65b9\u6cd5\u3002\u6240\u4ee5\u6211\u4eec\u7b2c\u4e00\u4ef6\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u786e\u4fdd\u65b9\u6cd5\u7684\u53c2\u6570\u4e2d\u6ca1\u6709\u4efb\u4f55\u7279\u5b9a\u7684\u81ea\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u9664\u975e\u8fd9\u79cd\u7ed3\u6784\u662f\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3001\u7406\u89e3\u548c\u8ba4\u53ef\u3001\u5e76\u4e14\u4e0d\u4f1a\u9891\u7e41\u6539\u52a8\u7684\u5171\u8bc6\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u60c5\u51b5\u8fd9\u4e9b\u7279\u6b8a\u7684\u6570\u636e\u7c7b\u578b\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u7c7b\u4f3c\u57fa\u672c\u7c7b\u578b\u7684\u5730\u4f4d\u3002\u4ed6\u53ef\u80fd\u5e94\u7528\u4e8e\u67d0\u4e2a\u9886\u57df\u6216\u8005\u4e00\u4e2a\u884c\u4e1a\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e3a\u4e86\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u800c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7c7b\u578b\u90fd\u662f\u5927\u5bb6\u5df2\u77e5\u7684\u201c\u57fa\u672c\u7c7b\u578b\u201d\uff0c\u6211\u4eec\u5728\u4f20\u9012\u53c2\u6570\u7684\u65f6\u5019\u5c31\u4e0d\u518d\u9700\u8981\u5b9a\u4e49\u56fa\u5b9a\u7684\u8c03\u7528\u8005\u53ca\u5904\u7406\u8c03\u7528\u5173\u7cfb\uff0c\u4efb\u4f55\u53ea\u8981\u5177\u6709\u8fd9\u4e9b\u53c2\u6570\u7684\u4e0a\u4e0b\u6587\u5747\u53ef\u4ee5\u968f\u610f\u53d1\u8d77\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"},"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u65b9\u6cd5\u7684\u53c2\u6570\u7c7b\u578b\u5b8c\u5168\u4e0d\u7528\u81ea\u5b9a\u4e49\u7c7b\u578b\uff0c\u6bd4\u5982\u59822.7.17\u8282\u7684\u63cf\u8ff0\u6240\u793a\uff0c\u62e5\u6709\u591a\u4e2a\u51fd\u6570\u53c2\u6570\u5728RealityIS\u4e2d\u662f\u4e0d\u53ef\u63a7\u7684\uff0c\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5c06\u4e00\u4e9b\u6570\u636e\u8fdb\u884c\u805a\u5408\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u53c2\u6570\u53ea\u80fd\u88ab\u5b58\u653e\u5728\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u51fd\u6570\u7684\u53c2\u6570\u4f7f\u7528\u4e86\u7ed3\u6784\u4f53\uff0c\u5e76\u4e14\u8fd9\u79cd\u7ed3\u6784\u4f53\u5185\u7684\u53d8\u91cf\u5141\u8bb8\u4f7f\u7528\u4e0d\u540c\u7684\u540d\u5b57\uff0c\u90a3\u4e48\u8fd9\u6837\u5c31\u4f1a\u662f\u51fd\u6570\u7684\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u7279\u5b9a\u89e3\u6784\u53d1\u751f\u8026\u5408\uff0c\u4e3a\u6b64\uff0cRealityIS\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u53c2\u89c12.7.12.1\u8282\u3002"),(0,n.kt)("h4",{id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"},"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e9b\u65b9\u6cd5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u67b6\u6784\u6765\u907f\u514d\u4e00\u4e9b\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u7684\u95ee\u9898\uff0c\u6e38\u620f\u4e2d\u8457\u540d\u7684\u6570\u636e\u9a71\u52a8\u67b6\u6784\u662fECS\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7c7b\u65b9\u6cd5\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u8f83\u5f31\uff0c\u5f88\u96be\u6bd4\u8f83\u76f4\u89c2\u5730\u770b\u51fa\u6570\u636e\u4e0e\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u800c\u5bf9\u4e8eRealityIS\u6765\u5c06\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u6570\u636e\u4e0e\u51fd\u6570\u7684\u5173\u7cfb\u6765\u63a8\u5bfc\u5f88\u591a\u4e8b\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u9700\u8981\u5f00\u53d1\u8005\u5c0f\u5fc3\u5730\u7ef4\u62a4\uff0c\u4f8b\u5982\u4f60\u53ef\u80fd\u7ed9\u5b9e\u4f53\u5bf9\u8c61\u6dfb\u52a0\u4e86Component\uff0c\u4f46\u662f\u4f60\u53ef\u80fd\u5fd8\u4e86\u5728System\u6dfb\u52a0\u76f8\u5e94\u7684filter\uff1b\u4f60\u53ef\u80fd\u6b63\u786e\u5730\u5904\u7406\u597d\u4e86System\uff0c\u4f46\u662f\u53ef\u80fd\u5fd8\u4e86\u7ed9\u6b63\u786e\u7684Entity\u6dfb\u52a0\u5bf9\u5e94\u7684Component\u3002\u56e0\u4e3a\u8fd9\u4e24\u8005\u662f\u5206\u79bb\u7684\uff0c\u5f88\u96be\u7ef4\u62a4\u3002")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cECS\u4e2dSystem\u5b9e\u9645\u4e0a\u8026\u5408\u4e86Component\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u6240\u4ee5Component\u7684\u4fee\u6539\u5fc5\u7136\u6d89\u53ca\u5230System\u7684\u4fee\u6539\u3002"),(0,n.kt)("h4",{id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(9379).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("h4",{id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"},"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h4",{id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"},"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u5e26\u6765\u7684\u53e6\u4e00\u4e2a\u53d8\u5316\u662f\uff0cRealityIS\u7684\u5bf9\u8c61\u662f\u7531\u7528\u6237\u5b9a\u4e49\u7684\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u3002\u7528\u6237\u5b9a\u4e49\u7684\u6570\u636e\u53ef\u4ee5\u5f62\u6210\u4efb\u610f\u7684\u5206\u5e03\uff0c\u8fd9\u4e5f\u4e3a\u7a0b\u5e8f\u8fdb\u4e00\u6b65\u5e26\u6765\u4e86\u590d\u6742\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf"},"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf"),(0,n.kt)("p",null,"\u4e0a\u4e00\u8282\u7684\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5b83\u5b9e\u9645\u4e0a\u5047\u8bbe\uff0c\u51fd\u6570\u7684\u53c2\u6570\u53ef\u80fd\u4f1a\u6765\u81ea\u4efb\u610f\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u8fd9\u4ece\u7f16\u7a0b\u672c\u8eab\u7684\u6982\u5ff5\u770b\u662f\u6ca1\u95ee\u9898\u7684\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u5f15\u5165\u7531\u8fd0\u884c\u65f6\u7ba1\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u66f4\u591a\u662f\u901a\u8fc7\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u7ec4\u5408\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7684\u5bf9\u8c61\u8fdb\u884c\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6307\u5b9a\u5bf9\u8c61\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u7a0b\u5e8f\u5199\u6b7b\uff0c\u8fd9\u6837\u5c31\u65e0\u6cd5\u52a8\u6001\u9002\u5e94\u53d8\u5316\u7684\u573a\u666f"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u5fc5\u987b\u901a\u8fc7\u7528\u6237\u624b\u52a8\u6307\u5b9a\u51fd\u6570\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,"\u8fd9\u4e24\u8005\u90fd\u4f1a\u5bfc\u81f4\u53ef\u4f38\u7f29\u6027\u548c\u6613\u7528\u6027\u95ee\u9898\u3002\u56e0\u6b64RealityIS\u9009\u62e9\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u81ea\u52a8\u5339\u914d\uff0c\u4f46\u8fd9\u5e26\u6765\u591a\u5c42\u5faa\u73af\u7684\u95ee\u9898\u3002\u4f8b\u5982\u5982\u4e0b\u7684\u573a\u666f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6240\u6709\u53d8\u91cf\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6574\u4e2a\u7ec4\u4ef6\u5c31\u662f\u6267\u884c\u4e00\u6b21\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6709\u4e00\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5219\u9700\u8981\u589e\u52a0\u4e00\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u53e6\u59162\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u5916\u4e24\u4e2a\u5bf9\u8c61\uff0c\u5c31\u9700\u89812\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u7c7b\u63a8\u3002\u3002\u3002")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(9379).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\u5e26\u6765\u4e86\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u65e0\u6cd5\u9884\u77e5\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u60c5\u51b5\u4f1a\u662f\u600e\u6837\uff0c\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u6765\u81ea\u4efb\u610f\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u5bf9\u8c61\u5b8c\u5168\u662f\u7531\u7528\u6237\u6765\u7ec4\u7ec7\u7684\u3002\u4e3a\u4e86\u5e94\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u4f5c\u4e3a\u4e24\u4e2a\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u4f7f\u7528\u4e862\u4e2a\u4ee5\u4e0a\u7684\u53c2\u6570\uff0c\u6211\u4eec\u9ed8\u8ba4\u8ba4\u4e3a\u5f00\u53d1\u8005\u662f\u5e0c\u671b\u6240\u6709\u8fd9\u4e9b\u53c2\u6570\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ea\u8981\u7b5b\u9009\u51fa\u540c\u65f6\u5177\u6709\u6240\u6709\u5c5e\u6027\u7684\u5bf9\u8c61\u5373\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u5982\u679c\u7528\u6237\u6307\u5b9a\u4e86\u5916\u90e8\u53d8\u91cf\uff0c\u90a3\u4e48\u4e00\u4e2a\u51fd\u6570\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2a\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u4e3a\u591a\u91cd\u5d4c\u5957\u7684\u5faa\u73af\u4f1a\u5e26\u6765\u590d\u6742\u6027")),(0,n.kt)("h4",{id:"27171-\u5355\u53c2\u6570\u51fd\u6570"},"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570"),(0,n.kt)("p",null,"\u9650\u5236\u5355\u53c2\u6570\u51fd\u6570\uff0c\u7406\u8bba\u4e0a\u4e0d\u4f1a\u5bf9\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\u5e26\u6765\u9650\u5236\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u57fa\u7840\u7684\u64cd\u4f5c\u7b26\u90fd\u662f\u4e8c\u5143\u751a\u81f3\u4e00\u5143\u64cd\u4f5c\u7b26\uff0c\u5176\u4ed6\u7684\u64cd\u4f5c\u7b26\u90fd\u53ef\u4ee5\u8f6c\u6362\u4e3a\u4e8c\u5143\u64cd\u4f5c\u7b26\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"AST",src:l(7903).Z,width:"960",height:"514"})),(0,n.kt)("p",null,"\u4f46\u662f\u62c6\u6563\u6210\u4e8c\u5143\u64cd\u4f5c\u786e\u5b9e\u4f1a\u5e26\u6765\u4e00\u5b9a\u590d\u6742\u6027\uff0c\u8fd9\u4e9b\u590d\u6742\u6027\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e0b\u51e0\u4e2a\u65b9\u9762\u8fdb\u884c\u7f13\u89e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f8\u5173\u5c5e\u6027\u5c3d\u91cf\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\uff0c\u8fd9\u6837\u5c31\u4fdd\u8bc1\u5b83\u4eec\u59cb\u7ec8\u5b58\u5728\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u6240\u4ee5\u5176\u5b9e\u5c3d\u7ba1\u6700\u7ec8\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u662f\u4e8c\u5143\u7684\uff0c\u4f46\u662f\u5185\u90e8\u7684\u5f88\u591a\u903b\u8f91\u8fd8\u662f\u4e0d\u53d7\u9650\u5236\u7684\uff0c\u8fd9\u6837\u7684\u5173\u7cfb\u5b9e\u9645\u4e0a\u7c7b\u4f3c\u4e8e\u4ea4\u4e92\u7684\u5bf9\u8c61\u662f\u4e24\u4e2a\uff0c\u8fd9\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e5f\u662f\u6bd4\u8f83\u5ba2\u89c2\u7684\uff0c\u4ea4\u6613\u7684\u5bf9\u8c61\u4e4b\u95f4\u901a\u5e38\u90fd\u662f\u4e24\u4e2a\u4eba\uff0c\u591a\u8fb9\u534f\u8bae\u7684\u673a\u5236\u662f\u6bd4\u8f83\u5c11\u7684\uff0c\u591a\u8fb9\u7684\u673a\u5236\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5404\u79cd\u5bfb\u627e\u4e00\u4e2a\u4ee3\u7406\u51fa\u6765\u4ea4\u6613\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u5185\u90e8\u53d8\u91cf\u8fdb\u884c\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f52\u5e76\u7684\u4e8b\u60c5\u7531\u7ec4\u4ef6\u5f00\u53d1\u8005\u6765\u9690\u85cf\u3002\u7ec4\u4ef6\u5f00\u53d1\u8005\u901a\u8fc7\u4e00\u4e9b\u5185\u90e8\u79c1\u6709\u53d8\u91cf\u6765\u9690\u85cf\u5927\u91cf\u5f52\u5e76\u7684\u7ec6\u8282\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u770b\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u6574\u4f53\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("h3",{id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b"},"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bb9\u6613\u5bfc\u81f4\u5e76\u53d1\uff0c\u56e0\u6b64RealityIS\u4e3b\u8981\u662f\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u4f46\u662f\u4e0e\u5176\u4ed6\u5b8c\u5168\u901a\u8fc7\u6d88\u606f\u901a\u8fc7\u7684\u673a\u5236\u4e0d\u540c\uff0cRealityIS\u80fd\u591f\u5b9e\u73b0\u539f\u751f\u7684\u53c2\u6570\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4e4b\u5e26\u6765\u7684\u95ee\u9898\u662f\u539f\u5b50\u6027\uff0c\u6bd4\u5982\u5728Erlang\u5355\u4e2a\u8fdb\u7a0b\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\uff0c\u4f46\u662fRealityIS\u7684\u5355\u4e2a\u8fdb\u7a0b\u53ea\u662f\u6267\u884c\u4e0a\u72ec\u7acb\uff0c\u4f46\u662f\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u5b58\u5728\u8f83\u5f3a\u7684\u5173\u8054\u3002\u8fd9\u65b9\u9762\u4e3b\u8981\u901a\u8fc7\u5b58\u6863\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"},"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"),(0,n.kt)("p",null,"\u786c\u4ef6\u67b6\u6784\u672c\u8eab\u5e76\u6ca1\u6709\u9650\u5236\u548c\u5b9a\u4e49\u4e00\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u600e\u6837\u7ec4\u7ec7\uff0c\u5b83\u8ddf\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u662f\u5206\u79bb\u7684\uff0c\u786c\u4ef6\u53ea\u9700\u8981\u77e5\u9053\u6211\u81ea\u6267\u884c\u67d0\u4e2a\u6307\u4ee4\u7684\u65f6\u5019\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u4ee5\u53ca\u5c06\u6570\u636e\uff08\u8ba1\u7b97\u7ed3\u679c\u6216\u4e2d\u95f4\u53d8\u91cf\uff09\u5199\u56de\u5230\u54ea\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u7a0b\u5e8f\u4ee3\u7801\u6587\u4ef6\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e86\u4e00\u5b9a\u7684\u5b9a\u4e49\uff0c\u6bd4\u5982\u52a0\u8f7d\u5e76\u6267\u884c\u5305\u542b\u673a\u5668\u7801\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002\u7f16\u8bd1\u5668\u5e94\u8be5\u5c06\u7a0b\u5e8f\u4ee3\u7801\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6216\u591a\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5728\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e2d\uff0c\u7a0b\u5e8f\u88ab\u7ec4\u7ec7\u4e3a\u4e00\u4e9b\u65b9\u6cd5\u6784\u6210\u7684\u4ee3\u7801\u5757\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u5757\u751f\u6210\u5730\u5740\uff0c\u5e76\u5c06\u5730\u5740\u6620\u5c04\u5230\u7a0b\u5e8f\u4e2d\u7684\u7b26\u53f7\u5bf9\u5e94\u7684\u5730\u5740\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u4e5f\u6ca1\u6709\u5bf9\u7a0b\u5e8f\u6e90\u4ee3\u7801\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e00\u5b9a\u7684\u7ea6\u675f\uff0c\u4f8b\u5982\u7a0b\u5e8f\u4e2d\u5bf9\u4efb\u4f55\u4ee3\u7801\u5757\u6216\u8005\u53d8\u91cf\u7684\u5730\u5740\u6620\u5c04\u8fd8\u662f\u7531\u7f16\u8bd1\u5668\u51b3\u5b9a\u7684\u3002\u800c\u8fd9\u4e9b\u4ee3\u7801\u5757\u672c\u8eab\u662f\u600e\u4e48\u751f\u6210\u7684\uff0c\u4f8b\u5982\u662f\u7531OOP\u4e2d\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u8fd8\u662f\u7531\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u6241\u5e73\u4e0e\u6570\u636e\u72b6\u6001\u72ec\u7acb\u7684\u7ec4\u7ec7\u5173\u7cfb\uff0c\u8fd9\u4e9b\u90fd\u6ca1\u6709\u4efb\u4f55\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u548c\u7f16\u8bd1\u7406\u8bba\u4e0a\u53ef\u4ee5\u662f\u4efb\u610f\u7684\uff0c\u9762\u5411\u5bf9\u8c61\u6216\u8005\u51fd\u6570\u5f0f\u7f16\u7a0b\u90fd\u53ea\u662f\u5176\u4e2d\u4e00\u79cd\u7279\u6b8a\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7406\u8bba\u4e0a\uff0c\u6784\u5efa\u4e00\u79cd\u6781\u5ea6\u52a8\u6001\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u662f\u53ef\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u7a0b\u5e8f\u7684\u7f16\u8bd1\u8fc7\u7a0b\uff0c\u65e9\u671f\u7684\u7f16\u7a0b\u8bed\u8a00\u5927\u591a\u662f\u9759\u6001\u7684\uff0c\u5373\u4e00\u65e6\u7f16\u8bd1\u5b8c\u6210\u4e4b\u540e\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u90fd\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u4e8c\u8fdb\u5236\u673a\u5668\u7801\u3002\u5982\u679c\u9700\u8981\u5bf9\u4ee3\u7801\u8fdb\u884c\u4fee\u6539\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u8fdb\u884c\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7a0b\u5e8f\u4ecd\u7136\u5177\u6709\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f8b\u5982\u4f60\u53ef\u4ee5\u58f0\u660e\u4e00\u4e2a\u6267\u884c\u67d0\u4e2a\u65b9\u6cd5\u7684\u5730\u5740\u6307\u9488\uff0c\u5982\u679c\u4f60\u77e5\u9053\u81ea\u5df1\u7a0b\u5e8f\u4e2d\u6709\u591a\u4e2a\u65b9\u6cd5\u5305\u542b\u76f8\u540c\u7684\u7b7e\u540d\uff0c\u90a3\u4e48\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u65b9\u6cd5\u7684\u5185\u5b58\u5730\u5740\u8d4b\u503c\u7ed9\u4e00\u4e2a\u76f8\u540c\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u7a0b\u5e8f\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u5730\u5bf9\u4e0d\u540c\u7684\u65b9\u6cd5\u8fdb\u884c\u8c03\u7528\u3002\u4e0e\u4e4b\u7c7b\u4f3c\uff0c\u4e00\u4e2a\u6307\u9488\u4e5f\u53ef\u4ee5\u6267\u884c\u591a\u4e2a\u5177\u6709\u76f8\u540c\u7c7b\u578b\u5b9a\u4e49\u7684\u5bf9\u8c61\uff0c\u8fd0\u884c\u65f6\u5bf9\u8fd9\u4e9b\u51fd\u6570\u5bf9\u8c61\u7684\u52a8\u6001\u65b9\u6cd5\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u8fd9\u6837\u7684\u52a8\u6001\u80fd\u529b\u662f\u975e\u5e38\u6709\u9650\u7684\uff0c\u672c\u8d28\u4e0a\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u5b9a\u4e49\u662f\u56fa\u5b9a\u7684\uff0c\u7a0b\u5e8f\u53ea\u662f\u5728\u67d0\u4e9b\u4ee3\u7801\u5757\u6267\u884c\u7684\u5148\u540e\u987a\u5e8f\u4e0a\u80fd\u591f\u8fdb\u884c\u4e00\u5b9a\u7684\u81ea\u7531\u7ec4\u5408\u800c\u5df2\u3002"),(0,n.kt)("h4",{id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027"},"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u968f\u7740\u4e92\u64cd\u4f5c\u3001\u53ef\u6269\u5c55\u6027\u7b49\u9700\u6c42\u8d8a\u6765\u8d8a\u5927\uff0c\u4ee5\u53ca\u90e8\u7f72\u5230\u7528\u6237\u73af\u5883\u7684\u6210\u672c\u3002\u6211\u4eec\u8d8a\u6765\u8d8a\u9700\u8981\u7a0b\u5e8f\u5177\u6709\u66f4\u5f3a\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u5df2\u6709\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u7528\u4e8e\u5b9e\u73b0\u4e00\u4e9b\u52a8\u6001\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5bf9\u4e8e\u672a\u6765\u800c\u8a00\uff0c\u6700\u91cd\u8981\u7684\u52a8\u6001\u6027\u5728\u4e8e\uff0c\u7531\u4e8e\u6240\u6709\u5b50\u7a0b\u5e8f\u672c\u8d28\u4e0a\u5904\u4e8e\u4e00\u4e2a\u5171\u540c\u7684\u5185\u5b58\u73af\u5883\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u65b9\u5f0f\u4f1a\u53d1\u751f\u6839\u672c\u6027\u7684\u53d8\u5316\uff0c\u8fd9\u4e9b\u53d8\u5316\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4ee3\u7801\u672c\u8eab\u975e\u5e38\u5de8\u5927\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u7f16\u8bd1\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u603b\u7684\u7a0b\u5e8f\u6570\u91cf\u5de8\u5927\uff0c\u56e0\u6b64\u5b83\u4e0d\u53ef\u80fd\u5168\u90e8\u52a0\u8f7d\u5230\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5fc5\u987b\u8981\u8fdb\u884c\u6309\u9700\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u610f\u5473\u7740\u9700\u8981\u5206\u6790\u7528\u6237\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u52a8\u6001\u5730\u51b3\u5b9a\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u4ee3\u7801\u7ec4\u7ec7\u610f\u5473\u7740\uff0c\u4f20\u7edf\u7a0b\u5e8f\u4e2d\u90a3\u4e9b\u7c7b\u578b\u67e5\u8be2\u3001\u5185\u5b58\u5730\u5740\u8ba1\u7b97\u90fd\u8981\u52a8\u6001\u8ba1\u7b97")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u9700\u6c42\u4e0e\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u662f\u5929\u751f\u4e0d\u517c\u5bb9\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u8981\u5f00\u53d1\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"RealityIS.005",src:l(2234).Z,width:"1920",height:"1080"})),(0,n.kt)("h4",{id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"},"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"),(0,n.kt)("p",null,"\u52a8\u6001\u6027\u662f\u6307\u4e00\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u4e0d\u5fc5\u6309\u7167\u5b8c\u5168\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u6267\u884c\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u52a8\u6001\u6027\u5f80\u5f80\u610f\u5473\u7740\u80fd\u591f\u5bf9\u5df2\u7ecf\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u6269\u5c55\u6216\u8005\u66f4\u65b0\u3002\u524d\u9762\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5bf9\u4e8e\u9759\u6001\u8bed\u8a00\u800c\u8a00\uff0c\u5b83\u4e5f\u5b58\u5728\u7740\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u8fd9\u53ef\u4ee5\u79f0\u4e3a\u903b\u8f91\u4e0a\u7684\u52a8\u6001\u6027\uff0c\u5373\u6240\u6709\u903b\u8f91\u662f\u56fa\u5b9a\u7f16\u8bd1\u597d\u7684\uff0c\u53ea\u662f\u7a0b\u5e8f\u6839\u636e\u8fd0\u884c\u65f6\u73af\u5883\u52a8\u6001\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e00\u822c\u90fd\u662f\u57fa\u4e8e\u6307\u9488\u6765\u5b9e\u73b0\u7684\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u7c7b\u578b")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u52a8\u6001\u6027\u4e25\u683c\u6765\u8bf4\u5bf9\u7a0b\u5e8f\u7684\u53ef\u6269\u5c55\u80fd\u529b\u5e76\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u9664\u975e\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5df2\u7ecf\u5305\u542b\u6240\u6709\u53ef\u80fd\u7684\u529f\u80fd\uff0c\u4f46\u663e\u7136\u90a3\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u56e0\u6b64\u6211\u4eec\u66f4\u5e38\u671f\u5f85\u7684\u52a8\u6001\u6027\uff0c\u66f4\u591a\u662f\u6307\u6269\u5c55\u52a8\u6001\u6027\uff0c\u5373\u80fd\u591f\u52a8\u6001\u52a0\u5165\u4e00\u4e9b\u4e4b\u524d\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4e0d\u5177\u5907\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6269\u5c55\u52a8\u6001\u6027\u5305\u62ec\u53ef\u4ee5\u901a\u8fc7\u5f88\u591a\u65b9\u5f0f\u8fdb\u884c\u5b9e\u73b0\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u7684\u7a0b\u5e8f\u5e93\uff0c\u53ef\u4ee5\u901a\u8fc7\u94fe\u63a5\u8fc7\u7a0b\u52a8\u6001\u52a0\u8f7d\u7b2c\u4e09\u65b9\u9759\u6001\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u79cd\u4e00\u822c\u901a\u8fc7\u865a\u62df\u673a\u5bf9\u52a8\u6001\u7684\u51fd\u6570\u548c\u7c7b\u578b\u8fdb\u884c\u89e3\u91ca")),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u9759\u6001\u7a0b\u5e8f\u5e93\uff0c\u5b83\u672c\u8d28\u4e0a\u662f\u5229\u7528\u524d\u9762\u7684\u903b\u8f91\u52a8\u6001\u6027\u80fd\u529b\u6765\u5b9e\u73b0\u7684\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u5e93\u4e2d\u53ef\u80fd\u5305\u62ec\u65b0\u7684\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\uff0c\u4f46\u662f\u5b83\u4eec\u5747\u5df2\u7ecf\u7f16\u8bd1\u4e3a\u9759\u6001\u7684\u673a\u5668\u7801\uff0c\u5373\u81ea\u8eab\u5df2\u7ecf\u5305\u542b\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u673a\u5236\uff0c\u4f8b\u5982\u5bf9\u8fd9\u4e9b\u7c7b\u578b\u8fdb\u884c\u89e3\u6790\u4ee5\u8ba1\u7b97\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u800c\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5219\u4e0d\u540c\uff0c\u7531\u4e8e\u5176\u4e2d\u6d89\u53ca\u7684\u65b0\u7684\u6570\u636e\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\u6ca1\u6709\u8fb9\u7f16\u8bd1\u4e3a\u9759\u6001\u673a\u5668\u7801\uff0c\u6240\u4ee5\u8fd9\u4e9b\u811a\u672c\u8bed\u8a00\u9700\u8981\u88ab\u4e00\u79cd\u79f0\u4e3a\u865a\u62df\u673a\u7684\u7a0b\u5e8f\u8fdb\u884c\u52a8\u6001\u7684\u89e3\u91ca\uff0c\u8fd9\u4e2a\u89e3\u91ca\u7684\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u52a8\u6001\u5730\u6a21\u62df\u7f16\u8bd1\u7684\u8fc7\u7a0b\uff0c\u5bf9\u7c7b\u578b\u7684\u7ed3\u6784\u8fdb\u884c\u67e5\u8be2\u4ee5\u8ba1\u7b97\u5730\u5740\u3002\u4f46\u7531\u4e8e\u8fd9\u4e9b\u5b9a\u4e49\u7684\u51fd\u6570\u5e76\u6ca1\u6709\u88ab\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u52a8\u6001\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6267\u884c\u8fc7\u7a0b\u5e76\u4e0d\u80fd\u591f\u5f88\u597d\u7684\u5229\u7528\u5230\u786c\u4ef6\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u4f8b\u5982\u6307\u4ee4\u7684\u9884\u53d6\uff0c\u5206\u652f\u9884\u6d4b\u7b49\u7b49\u3002\u56e0\u6b64\u52a8\u6001\u811a\u672c\u8bed\u8a00\u7684\u6027\u80fd\u901a\u5e38\u6bd4\u673a\u5668\u7801\u8981\u4f4e\u5f97\u591a\u3002"),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u8fd9\u4e9b\u52a8\u6001\u7684\u80fd\u529b\uff0c\u52a0\u4e0a\u5408\u9002\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u53ef\u4ee5\u8bbe\u8ba1\u51fa\u5177\u6709\u6bd4\u8f83\u597d\u6269\u5c55\u6027\u7684\u7a0b\u5e8f\u3002\u51e0\u4e2a\u4f8b\u5b50\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f20\u7edf\u6e38\u620f\u5f15\u64ce\u4e2d\u7684\u63d2\u4ef6\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982Lua\u811a\u672c\u8bed\u8a00\u53ef\u4ee5\u589e\u52a0\u65b0\u7684\u903b\u8f91\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u5728Erlang\u4e2d\uff0c\u7531\u4e8e\u6bcf\u4e2a\u8fdb\u7a0b\u542f\u52a8\u65f6\u59cb\u7ec8\u52a0\u8f7d\u6700\u65b0\u7684\u811a\u672c\u4ee3\u7801\uff0c\u56e0\u6b64\u53ef\u4ee5\u5b9e\u73b0\u52a8\u6001\u66f4\u65b0\u3002\u6ce8\u610f\u8fd9\u79cd\u673a\u5236\u4e0eLua\u76f8\u6bd4\u5b58\u5728\u672c\u8d28\u67b6\u6784\u4e0a\u7684\u533a\u522b\uff0cLua\u7684\u70ed\u52a0\u8f7d\u53ea\u662f\u4e00\u79cd\u8bed\u8a00\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd9\u4e2a\u52a0\u8f7d\u7684\u8fc7\u7a0b\u6216\u8005\u8bf4\u67b6\u6784\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u6784\u5efa\u3002\u4e0d\u540c\u7684\u5e94\u7528\u5f80\u5f80\u4f1a\u8bbe\u8ba1\u51fa\u4e0d\u540c\u7684\u70ed\u66f4\u65b0\u673a\u5236\u3002\u800cErlang\u662f\u4e00\u79cd\u5185\u5efa\u4e8e\u8bed\u8a00\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u5c06\u5bf9\u5e94\u76ee\u5f55\u4e0b\u7684\u4ee3\u7801\u66f4\u65b0\uff0cErlang\u4f1a\u81ea\u884c\u52a0\u8f7d\uff0c\u66f4\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u505a\u989d\u5916\u7684\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u6df1\u5165\u601d\u8003\u52a8\u6001\u6027\u7684\u672c\u8d28\uff0c\u6216\u8005\u8bf4\u7406\u89e3\u5b83\u8981\u89e3\u51b3\u7684\u6838\u5fc3\u95ee\u9898\uff0c\u5927\u6982\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u52a8\u66f4\u65b0")),(0,n.kt)("p",null,"\u53bb\u8026\u5408\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u673a\u5236\u672c\u8eab\u770b\u5f85\u52a8\u6001\u6027\uff0c\u8bed\u8a00\u5c42\u9762\u7684\u52a8\u6001\u6027\u5927\u591a\u6d89\u53ca\u67d0\u79cd\u89e3\u8026\u7684\u64cd\u4f5c\uff0c\u4f7f\u8fd0\u884c\u65f6\u53ef\u4ee5\u52a8\u6001\u66ff\u6362\u4e00\u4e9b\u65b9\u6cd5\u6216\u8005\u8bf4\u89e3\u6790\u67d0\u4e9b\u65b0\u7684\u7c7b\u578b\u3002\u53ef\u6269\u5c55\u6027\u662f\u4ece\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u8005\u7684\u89d2\u5ea6\u770b\u5f85\u52a8\u6001\u6027\uff0c\u5b83\u5f80\u5f80\u662f\u8fd0\u7528\u524d\u9762\u8bed\u8a00\u63d0\u4f9b\u7684\u89e3\u8026\u673a\u5236\u6765\u5b9e\u73b0\u7684\u67d0\u79cd\u67b6\u6784\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"dynamic",src:l(7635).Z,width:"2022",height:"400"})),(0,n.kt)("p",null,"\u800c\u81ea\u52a8\u66f4\u65b0\u662f\u9488\u5bf9\u7528\u6237\u800c\u8a00\u7684\uff0c\u5b83\u5177\u6709\u6700\u9ad8\u7684\u8981\u6c42\u3002\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u53d7\u9650\u4e8e\u7f16\u7a0b\u8bed\u8a00\u7684\u67b6\u6784\uff0c\u5f53\u7a0b\u5e8f\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u7528\u6237\u4e0d\u5f97\u4e0d\u91cd\u65b0\u5b89\u88c5\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\u867d\u7136\u50cf\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u4f1a\u4f7f\u7528\u5982Lua\u8fd9\u6837\u7684\u52a8\u6001\u811a\u672c\u8bed\u8a00\u6765\u5b9e\u73b0\u67d0\u4e9b\u7a0b\u5ea6\u7684\u70ed\u66f4\u65b0\uff0c\u4f46\u662f\u5927\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u8fd8\u662f\u9700\u8981\u91cd\u65b0\u4e0b\u8f7d\u548c\u5b89\u88c5\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u73b0\u5728\u5982App Store\u7b49\u4f7f\u7528\u4e00\u79cd\u81ea\u52a8\u66f4\u65b0\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u8fdb\u884c\u5e94\u7528\u66f4\u65b0\uff0c\u770b\u8d77\u6765\u5b9e\u73b0\u4e86\u5e94\u7528\u7684\u81ea\u52a8\u66f4\u65b0\uff0c\u56e0\u4e3a\u5bf9\u7528\u6237\u57fa\u672c\u4e0a\u6ca1\u6709\u9020\u6210\u4ec0\u4e48\u56f0\u6270\u3002\u4f46\u662f\u8fd9\u4e2a\u95ee\u9898\u5176\u5b9e\u672c\u8d28\u4e0a\u8fd8\u4e0d\u662f\u7528\u6237\u5c42\u9762\u7684\u95ee\u9898\uff0c\u5b83\u662f\u7531\u7528\u6237\u9700\u6c42\u63a8\u751f\u51fa\u7684\u5f00\u53d1\u8005\u7684\u95ee\u9898\u3002\u5c3d\u7ba1\u5bf9\u6574\u4e2a\u6b63\u5e38\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u91cd\u65b0\u53d1\u5e03\u6574\u4e2a\u7a0b\u5e8f\u4e0d\u4f1a\u5bf9\u7528\u6237\u9020\u6210\u56f0\u6270\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u5728\u4e24\u4e2a\u65b9\u9762\u505a\u7684\u66f4\u597d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u80fd\u5426\u503c\u4fee\u6539\u90e8\u5206\u4ee3\u7801\uff0c\u7136\u540e\u4e0d\u9700\u8981\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c31\u53ef\u4ee5\u6700\u7b80\u5355\u5730\u53d1\u5e03\u66f4\u65b0\u3002\u5f53\u7136\u8fd9\u91cc\u8bf4\u7684\u662f\u5b8c\u6574\u529f\u80fd\u7684\u4fee\u6539\uff0c\u800c\u4e0d\u662f\u5982Lua\u90a3\u6837\u7684\u6269\u5c55\u4fee\u6539\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u7684\u73af\u5883\uff0c\u600e\u6837\u8ba9\u76f8\u4e92\u5f15\u7528\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u6267\u884c\u66f4\u597d\u5730\u534f\u4f5c\u66f4\u65b0")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\uff0c\u5f53\u524d\u7684\u8bed\u8a00\u673a\u5236\u51e0\u4e4e\u662f\u505a\u4e0d\u5230\u7684\uff0c\u8fd9\u9700\u8981\u5bf9\u8bed\u8a00\u548c\u7f16\u8bd1\u8fc7\u7a0b\u8fdb\u884c\u91cd\u6784\u3002"),(0,n.kt)("h4",{id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"},"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u901a\u8fc7\u4e0a\u8ff0\u7684\u4e00\u4e9b\u673a\u5236\uff0c\u73b0\u4ee3\u7684\u8ba1\u7b97\u67b6\u6784\u4e5f\u80fd\u591f\u5b9e\u73b0\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f46\u57fa\u672c\u4e0a\u73b0\u5728\u7684\u52a8\u6001\u6027\u67b6\u6784\u672c\u8d28\u4e0a\u4e0d\u662f\u4e3a\u4e86\u771f\u6b63\u7684\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u800c\u8bbe\u8ba1\u7684\uff0c\u5b83\u4eec\u66f4\u591a\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u7684\u89d2\u5ea6\u53bb\u8bbe\u8ba1\uff0c\u53ea\u662f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b9\u4fbf\u5f00\u53d1\u8005\u8fdb\u884c\u4e00\u5b9a\u9650\u5ea6\u6269\u5c55\u7684\u673a\u5236\u3002\u4f8b\u5982\u65b0\u7684\u811a\u672c\u4e0d\u80fd\u4efb\u610f\u8bbf\u95ee\u4e4b\u524d\u5185\u5b58\u6570\u636e\uff0c\u5f80\u5f80\u90fd\u662f\u9884\u7559\u56fa\u5b9a\u7684\u63a5\u53e3\u3002\u8fd9\u4f7f\u5f97\u65b0\u7684\u811a\u672c\u57fa\u672c\u4e0a\u53ea\u80fd\u7528\u6765\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u6269\u5c55\u65b0\u529f\u80fd\uff0c\u5e76\u4e14\u8fd9\u4e9b\u65b0\u529f\u80fd\u5bf9\u4e4b\u524d\u7684\u4ee3\u7801\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u3002"),(0,n.kt)("h4",{id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"},"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"),(0,n.kt)("p",null,"\u5982\u679c\u6240\u6709\u7684\u5b50\u7a0b\u5e8f\u5728\u540c\u4e00\u4e2a\u201c\u5185\u5b58\u201d\u6216\u8005\u6267\u884c\u73af\u5883\u8fd0\u884c\uff0c\u4f7f\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u8d85\u7ea7\u5de8\u5927\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u542b\u5343\u5343\u4e07\u4e07\u751a\u81f3\u4e0a\u4ebf\u7ea7\u7684\u4ee3\u7801\u6587\u4ef6\u3002\u90a3\u4e48\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7528\u6237\u800c\u8a00\uff0cTA\u6240\u9700\u8981\u8fd0\u884c\u5b9e\u9645\u8ba1\u7b97\u7684\u201c\u7a0b\u5e8f\u201d\u53ea\u80fd\u662f\u8fd9\u4e9b\u6240\u6709\u7a0b\u5e8f\u4e2d\u7684\u5f88\u5c0f\u4e00\u90e8\u5206\u3002\u540c\u6837\u5f88\u663e\u7136\u7684\u662f\uff0c\u8fd9\u4e2a\u7528\u6237\u201c\u7a0b\u5e8f\u201d\u5fc5\u7136\u662f\u52a8\u6001\u751f\u6210\u7684\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u52a8\u6001\u7ec4\u5408\u67d0\u4e2a\u7528\u6237\u5b9a\u4e49\u7684\u201c\u7a0b\u5e8f\u201d\uff0c\u5c31\u6210\u4e3a\u52a8\u6001\u6027\u7684\u6700\u5927\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u52a8\u6001\u7ec4\u5408\u7a0b\u5e8f\uff0c\u4e0d\u50cf\u60f3\u8c61\u4e2d\u90a3\u4e48\u7b80\u5355\uff0c\u6bd4\u5982\u8bf4\u6bcf\u4e2a\u4ee3\u7801\u6587\u4ef6\u8bbe\u7f6e\u4e00\u4e2aID\uff0c\u7136\u540e\u5efa\u7acb\u4e00\u4e2a\u7528\u6237\u7a0b\u5e8f\u6570\u636e\u5e93\u3002\u56e0\u4e3a\u7a0b\u5e8f\u4ee3\u7801\u603b\u662f\u5173\u8054\u7740\u7c7b\u578b\uff0c\u7c7b\u578b\u548c\u65b9\u6cd5\u5f15\u7528\u5f80\u5f80\u6765\u81ea\u5176\u4ed6\u6587\u4ef6\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7ed3\u6784\u672c\u8eab\u662f\u4e00\u4e2a\u53ca\u5176\u9519\u7efc\u590d\u6742\u7684\u7cfb\u7edf\uff0c\u6839\u672c\u4e0d\u53ef\u80fd\u901a\u8fc7\u6587\u4ef6\u7ea7\u522b\u8fdb\u884c\u5212\u5206\u548c\u7ec4\u5408\u3002\u800c\u5982\u679c\u8981\u901a\u8fc7\u4f20\u7edf\u7684\u7f16\u8bd1\u89e3\u91ca\u673a\u5236\uff1a\u5373\u901a\u8fc7\u9996\u5148\u6784\u5efa\u6240\u6709\u7c7b\u578b\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u901a\u8fc7\u7b26\u53f7\u8868\u67e5\u8be2\u548c\u8ba1\u7b97\u5730\u5740\u7a7a\u95f4\uff0c\u8fd9\u5c31\u51e0\u4e4e\u7b49\u4e8e\u6bcf\u4e00\u6b21\u8fd0\u884c\u7528\u6237\u7a0b\u5e8f\u5c31\u9700\u8981\u52a0\u8f7d\u89e3\u6790\u51e0\u4e4e\u6240\u6709\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5e94\u5bf9\u548c\u7ba1\u7406\u8fd9\u79cd\u65b0\u7684\u9700\u6c42\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\u65b9\u5f0f\u9700\u8981\u53d1\u751f\u5f88\u5927\u7684\u53d8\u5316\u3002\u8fc7\u53bb\u7684\u601d\u7ef4\u662f\u6211\u4eec\u4e0d\u8003\u8651\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u53ea\u9700\u8981\u8003\u8651\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u7c7b\u578b\u5f15\u7528\u5b89\u5168\uff0c\u7136\u540e\u4f9d\u9760\u7f16\u8bd1\u5668\u6765\u5bf9\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u4ee3\u7801\u8c03\u7528\u987a\u5e8f\u8fdb\u884c\u7ba1\u7406\u548c\u7ec4\u7ec7\u3002\u800c\u73b0\u5728\u6211\u4eec\u9700\u8981\u5728\u4e0d\u5f15\u5165\u6240\u6709\u4ee3\u7801\u7684\u60c5\u51b5\u4e0b\u63d0\u524d\u8ba1\u7b97\u6309\u9700\u52a0\u8f7d\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u8fd9\u5c31\u9700\u8981\u5728\u4ee3\u7801\u7ec4\u7ec7\u4e0a\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4f7f\u5f97\u52a0\u8f7d\u5668\u53ef\u4ee5\u76f4\u63a5\u77e5\u9053\u4ec5\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\uff0c\u4ece\u8bed\u8a00\u673a\u5236\u4e2d\u62bd\u53d6\u51fa\u6765\uff0c\u7136\u540e\u5b58\u81f3\u6570\u636e\u5e93\u4e2d\u3002\u4f46\u662f\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u4e0d\u662f\u90a3\u4e48\u597d\u8bc6\u522b\u7684\uff0c\u5e76\u4e14\u6211\u4eec\u4e0d\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u8c03\u6574\u6216\u91cd\u7ec4\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u53ef\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u66f4\u65b0\u3002\u6240\u4ee5\u597d\u7684\u601d\u8def\u662f\u6211\u4eec\u9700\u8981\u5bf9\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ee5\u4fbf\u4e8e\u80fd\u591f\u8fd9\u79cd\u7ec4\u7ec7\u672c\u8eab\u80fd\u591f\u5e2e\u52a9\u6784\u5efa\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8868\u73b0\u4e3a\u5b83\u4f7f\u7528\u7684\u53c2\u6570\uff0c\u800c\u8fd9\u4e2a\u53c2\u6570\u5e76\u4e0d\u662f\u7531\u5f00\u53d1\u8005\u968f\u4fbf\u5b9a\u4e49\u7684\uff08\u5426\u5219\u5b83\u53ef\u4ee5\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u7cfb\u7edf\u6839\u672c\u65e0\u6cd5\u5bf9\u5176\u8fdb\u884c\u63d0\u53d6\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u90a3\u6837\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4eec\u6765\u81ea\u4e8e\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u5171\u4eab\u7b26\u53f7\u8868\u5bf9\u5e94\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5b83\u4e0e\u5176\u4ed6\u7a0b\u5e8f\u4e4b\u95f4\u90fd\u9075\u5faa\u76f8\u540c\u7684\u7b26\u53f7\u5b9a\u4e49")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\u5c31\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u62bd\u53d6\u51fa\u4efb\u4f55\u7528\u6237\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fd9\u662fRealityIS\u5b9e\u73b0\u52a8\u6001\u6027\u7684\u6838\u5fc3\u56e0\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u5c06\u7ec4\u4ef6\u7684\u65b9\u6cd5\u4e0e\u6570\u636e\u4e00\u4e00\u5173\u8054\u8d77\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u5efa\u7acb\u5171\u540c\u9075\u5faa\u7684\u7b26\u53f7\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u4efb\u4f55\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5c31\u4f7f\u5f97\u5bf9\u8c61\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u53ef\u4ee5\u63a8\u7b97\u51fa\u6765\u7684")),(0,n.kt)("p",null,"\u5c06\u7a0b\u5e8f\u8bed\u8a00\u7684\u4f9d\u8d56\u5173\u7cfb\u62bd\u53d6\u51fa\u6765\u4e4b\u540e\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u53d1\u751f\u4e86\u975e\u5e38\u5927\u7684\u53d8\u5316\uff0c\u4ece\u603b\u4f53\u4e0a\u770b\uff0c\u5b83\u53d8\u6210\u4e86\u4e00\u79cd\u590d\u6742\u7684\u5173\u7cfb\u8868\uff0c\u5176\u4e2d\u7684\u4efb\u610f\u7ec4\u5408\u90fd\u53ef\u4ee5\u63a8\u7b97\u51fa\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u662f\u5b9e\u73b0\u5927\u578b\u52a8\u6001\u7cfb\u7edf\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"obj-com",src:l(3972).Z,width:"2666",height:"898"})),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u548c\u7ec4\u4ef6\u878d\u5408\u4e3a\u4e00\u4f53\u662f\u5173\u952e\u601d\u60f3\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u662f\u6ca1\u6709\u8fd9\u79cd\u673a\u5236\u7684\uff0c\u751a\u81f3\u662f\u4e0d\u53ef\u7406\u89e3\u7684\uff0c\u4f46\u662f\u4e0d\u7a81\u7834\u8fd9\u4e00\u70b9\u5c31\u65e0\u6cd5\u5b9e\u73b0\u4e0a\u8ff0\u7684\u529f\u80fd\uff0c\u8fd9\u79cd\u601d\u8def\u89e3\u51b3\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u4e86\u5f00\u53d1\u8005\u6216\u8005\u5bf9\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u5173\u7cfb\u7684\u624b\u52a8\u4e14\u5bb9\u6613\u51fa\u9519\u6216\u9020\u6210\u5197\u4f59\u7684\u7ef4\u62a4")),(0,n.kt)("p",null,"\u8fd9\u65b9\u9762\u7684\u5185\u5bb9\u53c2\u89c1\u9762\u5411\u6570\u636e\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5"},"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5"),(0,n.kt)("p",null,"\u8981\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b8c\u5168\u6309\u8fd9\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\uff0c\u5fc5\u7136\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u4e9b\u95ee\u9898\u81f3\u5c11\u6765\u81ea\u4e24\u4e2a\u65b9\u9762\uff1a1\uff09\u52a8\u6001\u67e5\u8be2\u6570\u636e\u5e93\uff1b2\uff09\u52a8\u6001\u7f16\u8bd1\u3001\u89e3\u91ca\u3001\u94fe\u63a5\u7b49\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u4e0a\u8ff0\u7684\u95ee\u9898\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6211\u4eec\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u64cd\u4f5c\u8fc7\u7a0b\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\u3002\u6839\u636e\u6574\u4e2a\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u8fc7\u7a0b\uff0c\u5927\u6982\u53ef\u4ee5\u5212\u5206\u4e3a\u4e09\u4e2a\u9636\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7f16\u8bd1\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5f00\u53d1\u7ec4\u4ef6\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7f16\u8f91\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u4f7f\u7528\u7ec4\u4ef6\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u52a0\u8f7d\u65f6\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u6267\u884c\u4e4b\u524d")),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u7f16\u8f91\u597d\u5bf9\u8c61\u4e4b\u540e\uff0c\u5176\u76f8\u5e94\u4f7f\u7528\u7684\u7ec4\u4ef6\u53ca\u5176\u6570\u636e\u7ed3\u6784\u5c31\u56fa\u5b9a\u4e0b\u6765\u4e86\uff0c\u800c\u7ec4\u4ef6\u7684\u4ee3\u7801\u5b9e\u9645\u4e0a\u5728\u5f00\u53d1\u8005\u63d0\u4ea4\u5230\u4ee3\u7801\u5e93\u4e4b\u524d\u5c31\u5df2\u7ecf\u7f16\u8bd1\u597d\u4e86\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\u52a8\u6001\u8ba1\u7b97\u7684\u5185\u5bb9\u5c31\u6bd4\u8f83\u7b80\u5355\u3002\u4ec5\u6d89\u53ca\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u987a\u5e8f\u7b49\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2720-\u8ba1\u7b97\u56fe"},"2.7.20 \u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c12.3.6\u8282"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7531\u8f93\u5165\u8f93\u51fa\u7684\u5173\u7cfb\u51b3\u5b9a\u6267\u884c\u987a\u5e8f\uff0c\u8fd9\u6784\u6210\u4e86\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\u3002"),(0,n.kt)("h2",{id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf"},"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64RealityIS\u5e94\u8be5\u662f\u4e00\u4e2a\u5b8c\u5168\u52a8\u6001\u7684\u7cfb\u7edf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u4f53\u73b0\u5728\u591a\u4e2a\u5c42\u9762\u3002"),(0,n.kt)("h3",{id:"281-\u52a8\u6001\u7f16\u8bd1"},"2.8.1 \u52a8\u6001\u7f16\u8bd1"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u7a0b\u5e8f\u662f\u6700\u6838\u5fc3\u7684\u52a8\u6001\u5185\u5bb9\uff0c\u800c\u4e14\u7531\u4e8e\u6574\u4e2a\u4e16\u754c\u4ee3\u7801\u91cf\u5f88\u5927\uff0c\u56e0\u6b64\u5fc5\u987b\u5b8c\u5168\u52a8\u6001\u89e3\u91ca\u3002"),(0,n.kt)("p",null,"\u8d77\u7801\u8981\u6ee1\u8db3\u4e24\u4e2a\u65b9\u9762\u7684\u9700\u6c42\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u6587\u4ef6\u72ec\u7acb\u7f16\u8bd1\uff0c\u4e0d\u80fd\u653e\u5230\u4e00\u6b21\u6027\u7f16\u8bd1"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u94fe\u63a5\u8fc7\u7a0b\uff0c\u53c8\u5fc5\u987b\u505a\u5230\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4e4b\u95f4\u4e0d\u80fd\u6709\u5f15\u7528\uff0c\u56e0\u4e3a\u5f15\u7528\u5c31\u610f\u5473\u7740\u8981\u52a0\u8f7d\u5de8\u5927\u7684\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u52a0\u8f7d\u9700\u8981\u7684\u7ec4\u4ef6\u53ca\u6e90\u4ee3\u7801\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5927\u91cf\u7684\u4e0d\u4f1a\u88ab\u6267\u884c\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u53c2\u89c12.7.6\u8282\u7684\u5185\u5bb9\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u5927\u89c4\u6a21\u7a0b\u5e8f\u5b9e\u65f6\u89e3\u91ca\u7684\uff0cRealityIS\u4f7f\u7528\u4e86\u7279\u6b8a\u7684\u67b6\u6784\u6765\u4fdd\u8bc1\u6574\u4e2a\u7a0b\u5e8f\u5728\u89e3\u91ca\u65f6\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6e90\u4ee3\u7801\u7684\u52a8\u6001\u89e3\u91ca\uff0c\u5b83\u53ea\u53d1\u751f\u5728\u4ee3\u7801\u5f00\u53d1\u7684\u65f6\u5019\uff0c\u4e5f\u5c31\u662f\u5f00\u53d1\u8005\u5728Reality Create\u4e2d\u7f16\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4ee5\u53ca\u53d1\u5e03\u7ec4\u4ef6\u7684\u65f6\u5019\u3002\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u652f\u6301\u5927\u89c4\u6a21\u7684\u4ee3\u7801\u6267\u884c\uff0c\u8fd9\u79cd\u7f16\u8bd1\u53ea\u9488\u5bf9\u5355\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u80fd\u5bf9\u591a\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136RealityIS\u4e5f\u53ef\u4ee5\u907f\u514d\u8fd9\u6837\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cRealityIS\u5728\u5176\u4ed6\u5730\u65b9\uff0c\u5e76\u4e0d\u9700\u8981\u7f16\u8bd1\u3002\u6574\u4e2a\u8fc7\u7a0b\u76f8\u5bf9\u6bd4\u8f83\u8f7b\u91cf\uff0c\u66f4\u591a\u7684\u662f\u52a8\u6001\u4e00\u4e9b\u5b9e\u4f53\u4e0e\u7ec4\u4ef6\u5173\u7cfb\u7684\u7ba1\u7406\u7b49\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u6839\u636e2.3.1.3\u8282\u7684\u5185\u5bb9\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u8ba9\u52a8\u6001\u7684Creation Script\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"},"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"),(0,n.kt)("p",null,"\u5728Reality World\u8fd9\u6837\u5b8c\u5168\u5f00\u653e\u7684\u4e16\u754c\u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u53ea\u80fd\u4e8b\u5148\u8bbe\u7f6e\u597d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u4f8b\u5982\u7528\u6237\u53ef\u4ee5\u4e00\u8fb9\u73a9\u4e00\u8fb9\u4fee\u6539\u573a\u666f\uff0c\u8fd9\u79cd\u521b\u5efa\u7684\u8fc7\u7a0b\u672c\u8eab\u4e5f\u662f\u4e00\u79cd\u73a9\u6cd5\u3002"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u7f16\u8bd1\u597d\u7684\uff0c\u6240\u4ee5\u8fd9\u79cd\u4fee\u6539\u4e0d\u6d89\u53ca\u5230\u4ee3\u7801\u7684\u4fee\u6539\uff0c\u56e0\u6b64\u52a8\u6001\u64cd\u4f5c\u662f\u975e\u5e38\u5bb9\u6613\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7528\u6237\u4fee\u6539\u4e00\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u56e0\u4e3a\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u6570\u636e\u9a71\u52a8\u7684\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u53ea\u6d89\u53ca\u5230\u6570\u636e\u7684\u8c03\u6574\u3002\u7136\u800c\uff0c\u56e0\u4e3aRealityIS\u7684Runtime\u4f1a\u627f\u62c5\u4e00\u90e8\u5206\u89e3\u91ca\u4ee5\u53ca\u7ed9\u6307\u4ee4\u5206\u914d\u6b63\u786e\u5185\u5b58\u5730\u5740\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u7528\u6237\u7684\u6570\u636e\u8c03\u6574\u4f1a\u5bfc\u81f4Creation Table Engine\u5bf9\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e03\u5c40\u8fdb\u884c\u8c03\u6574\u3002\u5f53\u7136\u8fd9\u79cd\u8c03\u6574\u76f4\u53d1\u751f\u5728\u4fee\u6539\u7684\u65f6\u5019\uff0c\u6240\u4ee5\u603b\u4f53\u5e94\u8be5\u4e0d\u4f1a\u5f71\u54cd\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f"},"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f"),(0,n.kt)("p",null,"Reality World\u662f\u4e00\u4e2a\u975e\u5e38\u5de8\u5927\u7684\u4e16\u754c\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u80fd\u6309\u7167\u4f20\u7edf\u7684\u65b9\u5f0f\u4e00\u4e0b\u5b50\u52a0\u8f7d\u6574\u4e2a\u7a0b\u5e8f\uff0c\u800c\u662f\u53ea\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u7528\u6237\u9700\u8981\u7684\u6570\u636e\u3002\u8fd9\u91cc\u9762\u53ef\u80fd\u8981\u6d89\u53ca\u5f88\u591a\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u6570\u636e\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0"},"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0"),(0,n.kt)("p",null,"\u5f53\u7528\u6237A\u4fee\u6539\u4e86\u5185\u5bb9\uff0c\u5176\u4ed6\u4e0e\u8fd9\u4e2a\u5185\u5bb9\u76f8\u5173\u7684\u7528\u6237\u5f53\u524d\u7684\u573a\u666f\u5fc5\u987b\u52a8\u6001\u66f4\u65b0\u3002"),(0,n.kt)("h3",{id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"},"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u7531\u4e8e\u6574\u4e2a\u5185\u5bb9\u7684\u521b\u5efa\u3001\u52a0\u8f7d\u3001\u66f4\u65b0\u548c\u63a8\u9001\u7b49\u7b49\uff0c\u90fd\u662f\u52a8\u6001\u53d1\u751f\u7684\uff0c\u4efb\u52a1\u590d\u6742\u800c\u4e14\u8ba1\u7b97\u91cf\u8f83\u5927\uff0c\u6240\u4ee5\u9700\u8981\u52a8\u6001\u7684\u5206\u914d\u670d\u52a1\u5668\uff0c\u4e0d\u80fd\u6709\u4e00\u4e9b\u592a\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6216\u8005\u9700\u8981\u4eba\u5de5\u8fdb\u884c\u67d0\u4e9b\u914d\u7f6e\u7684\u5de5\u4f5c\uff0c\u800c\u4e14\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u884c\u4f38\u7f29\u7684\u3002"),(0,n.kt)("h3",{id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"},"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u673a\u5236\u4e2d\uff0c\u89d2\u8272Avator\u662f\u4e00\u4e2a\u6bd4\u8f83\u590d\u6742\u7684\u7c7b\uff0c\u4ed6\u9700\u8981\u627f\u8f7d\u6240\u6709Avator\u6240\u80fd\u64cd\u4f5c\u7684\u529f\u80fd\uff0c\u5176\u4ed6\u7269\u4f53\u5bf9\u8c61\u7684\u811a\u672c\u901a\u5e38\u5219\u6bd4\u8f83\u7b80\u5355\u56fa\u5b9a\u3002avator\u51e0\u4e4e\u53ef\u4ee5\u8ddf\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u4e00\u5207\u7269\u4f53\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u5c31\u5bfc\u81f4\u4e00\u4e2a\u95ee\u9898\uff0c\u5373avator\u6240\u643a\u5e26\u7684\u5927\u90e8\u5206\u7ec4\u4ef6\u529f\u80fd\uff0c\u5728\u67d0\u4e2a\u65f6\u523b\u53ef\u80fd\u90fd\u4e0d\u9700\u8981\uff0c\u56e0\u4e3a\u5b83\u4e00\u6b21\u53ef\u80fd\u53ea\u8ddf\u5c11\u6570\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u4e92\uff0c\u4f7f\u7528\u5c11\u6570\u6280\u80fd\u3002"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u53d1\u7684\u5927\u4e16\u754c\uff0c\u8fd9\u6837\u7684\u95ee\u9898\u5c31\u66f4\u52a0\u4e25\u91cd\uff0c\u56e0\u4e3a\u6240\u6709avator\u80fd\u591f\u6267\u884c\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u65e0\u7a77\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u52a0\u8f7d\u5728avator\u8eab\u4e0a\uff0c\u800c\u5fc5\u987b\u5b9e\u73b0\u6839\u636e\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u3002\u4f8b\u5982\uff0c\u73a9\u5bb6\u8981\u8fdb\u5165\u4e00\u5757\u51b0\u96ea\u4e4b\u5730\uff0c\u5468\u56f4\u7684\u73af\u5883\u4f1a\u5bf9\u5b83\u7684\u4f53\u80fd\u6d88\u8017\u9020\u6210\u5f71\u54cd\uff0c\u8fd9\u79cd\u53ea\u6709\u5728\u8fd9\u4e2a\u73af\u5883\u624d\u80fd\u53d1\u6325\u4f5c\u7528\u7684\u7ec4\u4ef6\uff0c\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e2a\u533a\u57df\uff0c\u73a9\u5bb6\u8fdb\u5165\u8fd9\u4e2a\u533a\u57df\u7684\u65f6\u5019\u52a8\u6001\u52a0\u8f7d\u8fd9\u4e2a\u7ec4\u4ef6\uff0c\u7136\u540e\u79bb\u5f00\u7684\u65f6\u5019\u5378\u8f7d\u8be5\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u8fd9\u79cd\u52a8\u6001\u52a0\u8f7d\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd8\u662f\u6709\u4e00\u4e9b\u60c5\u51b5\u53ef\u4ee5\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u8fd9\u79cd\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2aBounding box"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u73a9\u5bb6\u4e3b\u52a8\u9009\u62e9\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u8d5b\u8f66\u5e7f\u544a\uff0c\u73a9\u5bb6\u9ed8\u8ba4\u80af\u5b9a\u662f\u4e0d\u5e26\u8fd9\u4e9b\u7ec4\u4ef6\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u7ec4\u4ef6\uff0c\u8ba9\u73a9\u5bb6\u9009\u62e9\u9700\u8981\u52a0\u8f7d\u8d5b\u8f66\u7ec4\u4ef6\uff1b\u4e8b\u5b9e\u4e0a\u8fd9\u5e94\u8be5\u6210\u4e3a\u9ed8\u8ba4\u673a\u5236\uff0c\u5373\u73a9\u5bb6\u770b\u5230\u67d0\u4e2a\u7269\u4f53\uff0c\u4f46\u662f\u5374\u4e0d\u80fd\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\u7684\u65f6\u5019\uff0c\u73a9\u5bb6\u5c31\u53ef\u4ee5\u9009\u62e9\u8fd9\u4e2a\u7269\u4f53\uff0c\u6309\u4e00\u4e2a\u7279\u6b8a\u7684\u952e\uff0c\u5c31\u81ea\u52a8\u88c5\u4e0a\u5bf9\u5e94\u7684\u7ec4\u4ef6\uff0c\u540c\u6837\u73a9\u5bb6\u53ef\u4ee5\u5378\u8f7d\uff0c\u73a9\u5bb6\u53ef\u4ee5\u67e5\u770b\u8eab\u4e0a\u88c5\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u957f\u65f6\u95f4\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7cfb\u7edf\u53ef\u4ee5\u81ea\u884c\u5378\u8f7d\u6389\uff0c\u751a\u81f3\u8bbe\u7f6e\u4e00\u4e2a\u6700\u5927\u7ec4\u4ef6\u6570\u91cf\u3002\u4f8b\u5982\u73a9\u5bb6\u81ea\u5df1\u5f88\u6e05\u695a\u9700\u8981\u73a9\u54ea\u4e00\u4e2a\u6e38\u620f\uff0c\u5b83\u53ef\u80fd\u4e3b\u52a8\u88c5\u8f7d\u4e0a\u4e0e\u4e4b\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u53d8\u5316\u7f16\u7a0b\uff0c\u5373\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\u4e0d\u4f1a\u53d1\u751f\u8ba1\u7b97\u548c\u7f51\u7edc\u4f20\u8f93\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u4ecd\u7136\u5360\u636e\u5185\u5b58\uff0c\u5e76\u4e0d\u662f\u5f88\u53ef\u53d6\u7684\u65b9\u6848\u3002")),(0,n.kt)("h3",{id:"287-\u52a8\u6001\u5524\u9192"},"2.8.7 \u52a8\u6001\u5524\u9192"),(0,n.kt)("p",null,"\u5373\u65f6\u5524\u9192\uff1a\u5982\u679c\u77e5\u9053\u54ea\u4e9b\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u53d8\u91cf\u611f\u5174\u8da3\uff0c\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u8ba9\u8fd9\u4e9b\u6570\u636e\u5b9e\u65f6\u5904\u4e8e\u5185\u5b58\uff0c\u800c\u53ef\u4ee5\u4e3b\u52a8\u5373\u65f6\u52a0\u8f7d\u4ee3\u7801\u5e76\u6267\u884c\uff0c\u76f8\u5f53\u4e8e\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u6570\u636e\u5b58\u50a8\u5230\u4e86\u786c\u76d8\uff0c\u7136\u540e\u901a\u8fc7\u7f13\u5b58\u673a\u5236\u52a8\u6001\u52a0\u8f7d\uff0c\u5b9e\u9645\u4e0a\u7f13\u5b58\u7cfb\u7edf\u672c\u6765\u4e5f\u662f\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u5f53\u5185\u5b58\u6570\u636e\u8fc7\u591a\u65f6\uff0c\u90a3\u4e9b\u4e0d\u5e38\u7528\u7684\u6570\u636e\u5c31\u4f1a\u88ab\u7f13\u5b58\u5230\u786c\u76d8\uff0c\u4f46\u53c8\u53ef\u4ee5\u5373\u65f6\u88ab\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"29-\u4e92\u64cd\u4f5c\u6027"},"2.9 \u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems."),(0,n.kt)("p",null,"\u5e7f\u4e49\u4e0a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u6307\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u4e2d\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u8ddf\u4e24\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u534f\u8c03\u5de5\u4f5c\u3002\u8fd9\u4e9b\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u53ef\u4ee5\u662f\u4efb\u4f55\u9886\u57df\uff0c\u6bd4\u5982\u91d1\u878d\u3001\u533b\u7597\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"With respect to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Software"},"software"),", the term ",(0,n.kt)("em",{parentName:"p"},"interoperability")," is used to describe the capability of different programs to exchange data via a common set of exchange formats, to read and write the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/File_format"},"file formats"),", and to use the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Protocol_(computing)"},"protocols"),". The lack of interoperability can be a consequence of a lack of attention to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Standardization"},"standardization")," during the design of a program."),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e8e\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u7528\u4e8e\u63cf\u8ff0\u4e24\u4e2a\u4e0d\u540c\u7684\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u4e00\u5b9a\u7684\u4ea4\u6362\u683c\u5f0f\u4ea4\u6362\u6570\u636e\u7684\u80fd\u529b\uff0c\u8be5\u4e24\u4e2a\u7a0b\u5e8f\u80fd\u591f\u901a\u8fc7\u76f8\u540c\u7684\u534f\u8bae\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u6027\u6ce8\u91cd\u7684\u662f\u7cfb\u7edf\u4e4b\u95f4\u7684\u6807\u51c6\uff0c\u5982\u679c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u9700\u8981\u5f88\u597d\u5730\u534f\u4f5c\uff0c\u9700\u8981\u4e8b\u5148\u5f88\u597d\u5730\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\uff0c\u5426\u5219\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u6839\u672c\u65e0\u6cd5\u534f\u540c\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u968f\u7740\u5f00\u653e\u5143\u5b87\u5b99\u548c\u53bb\u4e2d\u5fc3\u5316\u7684\u9700\u6c42\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\uff0cRealityIS\u6709\u4e00\u4e9b\u4e0d\u4e00\u6837\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u8981\u6c42\u4f7f\u5f97\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u5f88\u96be\u53bb\u6784\u5efa\u8fd9\u6837\u7684\u80fd\u529b\u3002\u672c\u8282\u901a\u8fc7\u7cfb\u7edf\u68b3\u7406\u4e92\u64cd\u4f5c\u6027\u7684\u6982\u5ff5\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u89e3\u91caRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u601d\u8def\u548c\u65b9\u6cd5\uff0c\u4ee5\u53ca\u5b83\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"},"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7684\u4e92\u64cd\u4f5c\u6027\u90fd\u9700\u8981\u4e00\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u673a\u5236\u6765\u652f\u6301\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u662f\u6307\u8bed\u8a00\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Language interoperability")," is the capability of two different ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Programming_languages"},"programming languages")," to natively interact as part of the same system and operate on the same kind of data structures."),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\u6027\u662f\u6307\u4e24\u4e2a\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u4e4b\u95f4\uff0c\u80fd\u591f\u539f\u751f\u5730\u8fdb\u884c\u4ea4\u4e92\uff0c\u4ee5\u53ca\u5bf9\u76f8\u540c\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u64cd\u4f5c\u7684\u80fd\u529b\u3002\u5176\u4e2d\u4e24\u79cd\u6bd4\u8f83\u91cd\u8981\u7684\u673a\u5236\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u6807\u8bb0\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u901a\u8fc7\u865a\u62df\u673a")),(0,n.kt)("p",null,"\u8fdb\u884c\u4e92\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"There are many ways programming languages are interoperable with one another. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/HTML"},"HTML"),", ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Cascading_Style_Sheets"},"CSS"),", and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/JavaScript"},"JavaScript")," are interoperable as they are used in tandem in webpages. Some ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Object_oriented"},"object oriented")," languages are interoperable thanks to their shared hosting ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (e.g. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_CLI_languages"},".NET CLI compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Common_Language_Runtime"},"Common Language Runtime")," and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_JVM_languages"},"JVM compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Java_virtual_machine"},"Java Virtual Machine"),")."),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u6807\u8bb0\u8bed\u8a00\uff0c\u5f53HTML+CSS\u6807\u8bb0\u8bed\u8a00\u5728\u6d4f\u89c8\u5668\u4e2d\u8fdb\u884c\u89e3\u91ca\u6267\u884c\u6027\uff0c\u5176\u4e2d\u5b9a\u4e49\u7684\u5143\u7d20\u80fd\u591f\u88abJavaScript\u8bed\u8a00\u8fdb\u884c\u89e3\u91ca\uff1b\u800c\u5bf9\u4e8e\u57fa\u4e8e\u865a\u62df\u673a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5b83\u4eec\u4e3b\u8981\u662f\u501f\u52a9\u865a\u62df\u673a\u7684\u76f8\u540c\u4e2d\u95f4\u8bed\u8a00\u53ca\u5185\u5b58\u7ed3\u6784\uff0c\u4e0d\u540c\u8bed\u8a00\u7f16\u5199\u7684\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"2911-object-models"},"2.9.1.1 Object models"),(0,n.kt)("p",null,"Object models are standardised models which allow objects to be represented in a language-agnostic way, such that the same objects may be used across programs and across languages. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/CORBA"},"CORBA")," and the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Component_Object_Model"},"COM")," are the most popular object models."),(0,n.kt)("h4",{id:"2912-virtual-machines"},"2.9.1.2 Virtual machines"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"vm-il",src:l(842).Z,width:"2210",height:"1052"})),(0,n.kt)("p",null,"Different Languages compile into a shared runtime"),(0,n.kt)("p",null,"A ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (VM) is a specialised intermediate language that several different languages compile down to. Languages that use the same virtual machine can interoperate, as they will share a memory model and compiler and thus libraries from one language can be re-used for others on the same VM. VMs can incorporate type systems to ensure the correctness of participating languages and give languages a common ground for their type information. The use of an intermediate language during compilation or interpretation can provide more opportunities for optimisation."),(0,n.kt)("h4",{id:"2913-foreign-function-interfaces"},"2.9.1.3 Foreign function interfaces"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Foreign_function_interface"},"Foreign function interfaces")," (FFI) allow programs written in one language to call functions written in another language. There are often considerations that preclude simply treating foreign functions as functions written in the host language, such as differences in types and execution model. Foreign function interfaces enable building ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Wrapper_library"},"wrapper libraries")," that provide functionality from a library from another language in the host language, often in a style that is more idiomatic for the language. Most languages have FFIs to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/C_(programming_language)"},"C"),', which is the "lingua franca" of programming today.'),(0,n.kt)("h4",{id:"2914-challenges"},"2.9.1.4 Challenges"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Object model differences")),(0,n.kt)("p",null,"Object oriented languages attempt to pair containers of data with code, but how each language chooses how to do that may be slightly different. Those design decisions do not always map to other languages easily. For instance, classes using multiple inheritance from a language that permits it will not translate well to a language that does not permit multiple inheritance. A common approach to this issue is defining a subset of a language that is compatible with another language's features.[",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Language_interoperability#cite_note-3"},"3","]")," This approach does mean in order for the code using features outside the subset to interoperate it will need to wrap some of its interfaces into classes that can be understood by the subset."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Memory models")),(0,n.kt)("p",null,"Differences in how programming languages handle de-allocation of memory is another issue when trying create interoperability. Languages with automatic de-allocation will not interoperate well with those with manual de-allocation, and those with deterministic destruction will be incompatible with those with nondeterministic destruction. Based on the constraints of the language there are many different strategies for bridging the different behaviors. For example: C++ programs, which normally use manual de-allocation, could interoperate with a Java style garbage collector by changing de-allocation behavior to delete the object, but not reclaim the memory. This requires that each object will have to manually be de-allocated, in order for the garbage collector to release the memory safely."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Mutability")),(0,n.kt)("p",null,"Mutability becomes an issue when trying to create interoperability between pure functional and procedural languages. Languages like ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Haskell_(programming_language)"},"Haskell")," have no mutable types, whereas C++ does not provide such rigorous guarantees. Many functional types when bridged to object oriented languages can not guarantee that the underlying objects won't be modified."),(0,n.kt)("h3",{id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"In addition to the perspective of scalability, we also need to think from a practical perspective, why we need interoperability, or why we need cross-chain. Traditionally, blockchain can solve the problem of trust. If scalability can be solved, then the problem of performance will also be solved. Interoperability can actually solve the broader problem of trust when the above two issues are resolved."),(0,n.kt)("p",null,"At present, different application scenarios have different alliance chains and public chains. With these chains in place, we need to use interoperability to communicate useful data. This will involve different approaches to cross-chain or interoperability. In the future, we will see a blockchain system with extremely blurred boundaries, that is, private chains, alliance chains, and public chains are interconnected in some way."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"blockchain-op",src:l(8619).Z,width:"2360",height:"982"})),(0,n.kt)("p",null,"The interoperability in the blockchain field, why is it not explicitly mentioned in traditional Internet applications? Because the Internet infrastructure now provides these functions, such as various SDKs and APIs. If you make an application and want to call the data on WeChat, then you can get the data down through the SDK and interface on WeChat. If you want to make a payment, Alipay also has a corresponding payment channel. When you write the code, you can call the API to make the payment. At present, the reason why it cannot be done on the blockchain is that our data is still in an isolated state due to the different consensus and block structures of various blockchains. In order for the data on different islands to communicate, we must connect different blockchains through interoperability and cross-chain systems."),(0,n.kt)("p",null,"What are the specific ways of interoperability and cross-chain protocols? The first way is the notary model. There is a notary between different chains. The second way to relatively decentralize is the side chain pattern. Through the side chain method, on the chain B, it can be verified which transactions on the chain A are written into the block, then the chain B can verify the operations on A and perform corresponding operations on B such as transfer. The third method is hash time lock. This is a relatively complex protocol. It is a cross-chain operation that integrates decentralized and transparent transaction assets conversion. To put it simply, if I trade bitcoin for Ethereum, I put a lock on Bitcoin, and at the same time, the other party also puts a lock on Ethereum. I give him the key, and I can get the corresponding Ethereum with the same key, and at the same time he can get the corresponding Bitcoin based on the key. There is also a time lock, which guarantees that both parties can only unlock Ethereum and Bitcoin within a limited time, otherwise the agreement will automatically terminate and neither party will obtain the assets of the other."),(0,n.kt)("h3",{id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Understanding Metaverse Interoperability")),(0,n.kt)("p",null,"Interoperability is the preeminent driving force behind the development of the metaverse. Let\u2019s take a look at ",(0,n.kt)("a",{parentName:"p",href:"https://www.oodlestechnologies.com/blockchain-applications-development/"},"blockchain technology")," to decode how interoperability works in the metaverse. "),(0,n.kt)("p",null,"In blockchain environments, we have both non-interoperable as well as interoperable platforms. However, interoperability is imperative if we are seeking to devise blockchain-powered high-utility services in the metaverse."),(0,n.kt)("p",null,"Interoperability equips the blockchain ecosystem to communicate, use one another\u2019s features and services, share arbitrary data, and more. Similarly, interoperability enables a myriad of metaverse projects to function in a unified manner through sharing of services, data, features, and experiences. It also allows cross-platform trading as well as other activities that are nearly impossible to function in siloed spaces."),(0,n.kt)("p",null,"To understand the concept of metaverse interoperability in a different way, let us take a look at the internet. It is equipped with layered standards that enable diverse networks as well as subnetworks to seamlessly interact with each other. "),(0,n.kt)("p",null,"In the real world, when we move between different locations, our identities also travel from one place to another without any trouble. Even our assets and possessions can be effectively transferred to different locations without undergoing any major changes. It signifies that there is a continuity in the real world that altogether keeps us as well as our assets intact during any transit. "),(0,n.kt)("p",null,"This is the reason why metaverse \u2013 the integration of borderless virtual worlds \u2013 aims at furnishing a transparent platform for socio-cultural interaction, similar to the physical world. Such amalgamation would make all digital realms, irrespective of their canvas and size, an integral part of a larger existence or entity."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Domains of Interoperability")),(0,n.kt)("p",null,"To illustrate various domains of interoperability in the metaverse, here is a representation for a quick reference:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Connectivity: Networking, communications"),(0,n.kt)("li",{parentName:"ul"},"Persistence: Ownership, Identity, History, Accounting"),(0,n.kt)("li",{parentName:"ul"},"Presentation: Physical properties, graphic models"),(0,n.kt)("li",{parentName:"ul"},"Meaning: Semantics, metadata, ontologies"),(0,n.kt)("li",{parentName:"ul"},"Behavior: Economies, rules, consequence, power")),(0,n.kt)("h3",{id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u5185\u5bb9\u53ef\u4ee5\u770b\u51fa\uff0c\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u805a\u7126\u5728\u4e24\u4e2a\u4e0d\u540c\u7684\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c",(0,n.kt)("strong",{parentName:"p"},"\u4fe1\u606f\u4ea4\u6362"),"\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728HTML\u4e2d\u6267\u884cJavaScript\u811a\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u5728JVM\u4e4b\u95f4\u5b9e\u73b0\u4e0d\u540c\u8bed\u8a00\u7684\u76f8\u4e92\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"C\u548cLua\u4e4b\u95f4\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e24\u4e2a\u72ec\u7acb\u7684\u533a\u5757\u94fe\u4e2d\u8054\u901a\uff0c\u5df2\u5b9e\u73b0\u8de8\u94fe\u7684\u4ea4\u6613\uff0c\u5e76\u786e\u4fdd\u94fe\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6362\u662f\u53ef\u4fe1\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u80fd\u591f\u6b63\u786e\u8bc6\u522b\u4e0d\u540c\u7528\u6237\u7684\u8eab\u4efd\u3001\u7ecf\u6d4e\u3001\u7269\u7406\u5916\u89c2\u7b49\u4e00\u4e9b\u57fa\u672c\u5c5e\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u5f88\u597d\u7684\u6982\u5ff5\uff0c\u4f46\u5b9e\u9645\u5b83\u4eec\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u5f62\u6210\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u9769\u65b0\u3002\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u4f20\u7edf\u8bed\u8a00\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u6027\u7279\u6027\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u662f\u4f20\u7edf\u7684\u4e92\u8054\u7f51\u5e94\u7528\u4e4b\u95f4\u901a\u8fc7\u5404\u81ea\u7684API\u6216\u8005SDK\u65e9\u5c31\u5df2\u7ecf\u5b9e\u73b0")),(0,n.kt)("p",null,"RealityIS\u5bf9\u4e92\u64cd\u4f5c\u6027\u6709\u5168\u65b0\u7684\u7406\u89e3\u548c\u76ee\u6807\uff0c\u8fd9\u4e9b\u9700\u6c42\u662f\u672a\u6765\u8ba1\u7b97\u67b6\u6784\u548c\u6d88\u8d39\u8005\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u5ba2\u89c2\u9700\u6c42\u3002\u4e3a\u4e86\u66f4\u597d\u5730\u7406\u89e3\u8fd9\u4e9b\u9700\u6c42\uff0c\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027 \u6709\u54ea\u4e9b\u4e0d\u8db3\u3002"),(0,n.kt)("h4",{id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"},"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8bed\u8a00\u4e92\u64cd\u4f5c\u4e3b\u8981\u5f3a\u8c03\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5171\u4eab\uff1a\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u53ef\u4ee5\u4f20\u9012\u6d88\u606f\uff0c\u5f53\u7136\u8fd9\u4e2a\u6d88\u606f\u901a\u5e38\u4e0d\u4ec5\u4ec5\u662f\u5355\u7eaf\u7684\u5b57\u7b26\u4e32\uff0c\u800c\u662f\u5305\u542b\u4e24\u8005\u90fd\u80fd\u591f\u7406\u89e3\u548c\u89e3\u91ca\u7684\u683c\u5f0f\u534f\u8bae\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u5305\u542b\u4e00\u5b9a\u7684\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6570\u636e\u7ed3\u6784\u5f80\u5f80\u662f\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u5f62\u6210\u7684\u901a\u4fe1\u6807\u51c6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u5171\u4eab\uff1a\u5176\u4e2d\u4e00\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u7f16\u5199\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u53ef\u4ee5\u5728\u53e6\u4e00\u4e2a\u7cfb\u7edf\u4e2d\u6267\u884c\uff0c\u4f8b\u5982JavaScript\u4ee3\u7801\uff0c\u6216\u8005\u5728JVM\u4e0a\u4f7f\u7528\u4e0d\u540c\u8bed\u8a00\u5f00\u53d1\u7684\u5e93\uff0c\u4f8b\u5982Scala\u8bed\u8a00\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u4f20\u7edfJava\u8bed\u8a00\u7f16\u5199\u7684\u4ee3\u7801\u5e93\u3002")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u662f\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4f46\u662f\u603b\u7684\u6765\u8bb2\uff0c\u5728\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u4e2d\u4e24\u4e2a\u8bed\u8a00\u901a\u5e38\u5e76\u4e0d\u5bf9\u7b49\uff0c\u5176\u4e2d\u4e00\u4e2a\u5f80\u5f80\u662f\u53e6\u4e00\u4e2a\u8bed\u8a00\u7684\u8f85\u52a9\u7cfb\u7edf\u3002\u5176\u4e3b\u8981\u7684\u53cd\u6620\u51fa\u6765\u7684\u7279\u5f81\u662f\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u5728\u5176\u4e2d\u4e00\u4e2a\u7cfb\u7edf\u6216\u8bed\u8a00\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u6682\u4e14\u79f0\u4e3a\u5bbf\u4e3b\u8bed\u8a00\uff0c\u53e6\u4e00\u4e2a\u8bed\u8a00\u6ca1\u6709\u81ea\u5df1\u7684\u8fd0\u884c\u65f6\uff0c\u5b83\u7684\u4ee3\u7801\u9700\u8981\u4f9d\u9644\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u8fd0\u884c\u65f6\u4e2d\u8fd0\u884c\uff0c\u800c\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\u4e4b\u6240\u4ee5\u80fd\u591f\u8fd0\u884c\u5916\u6765\u8bed\u8a00\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u80fd\u591f\u6267\u884c\u8fd9\u90e8\u5206\u5e26\u6765\u8bed\u8a00\u7684\u4ee3\u7801\uff0c\u5e76\u53ef\u4ee5\u501f\u52a9\u865a\u62df\u673a\u4e0e\u5bbf\u4e3b\u5171\u4eab\u5185\u5b58\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u53ef\u4ee5\u5171\u4eab\u5185\u5b58\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u4e9b\u5185\u5b58\u4e2d\u6570\u636e\u7684\u6240\u6709\u8005\u901a\u5e38\u662f\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5185\u5b58\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u5bf9\u8c61\u57fa\u672c\u4e0a\u90fd\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u5206\u914d\u548c\u7ba1\u7406\u3002\u5916\u6765\u8bed\u8a00\u5c3d\u7ba1\u53ef\u4ee5\u7528\u4e8e\u58f0\u660e\u6216\u6784\u9020\u81ea\u5df1\u7684\u53d8\u91cf\uff0c\u4f46\u8fd9\u4e9b\u53d8\u91cf\u901a\u5e38\u662f\u5c40\u90e8\u53d8\u91cf\uff0c\u5916\u6765\u8bed\u8a00\u7684\u4ee3\u7801\u603b\u7684\u6765\u8bf4\u66f4\u50cf\u662f\u4e00\u4e2a\u51fd\u6570\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u4e2d\u6267\u884c\uff0c\u5e76\u4e14\u901a\u5e38\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u5f62\u6210\u8fd9\u79cd\u4e0d\u5bf9\u7b49\uff0c\u662f\u56e0\u4e3a\u4e00\u4e2a\u8bed\u8a00\u5bf9\u5e94\u7684\u7a0b\u5e8f\u5728\u8fd0\u884c\u65f6\u662f\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u4ee3\u7801\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u4e0a\u4e0b\u6587\u7684\u6570\u636e\u6784\u9020\u7684\uff0c\u800c\u4f5c\u4e3a\u4e00\u4e2a\u7b80\u5355\u6d88\u606f\u4f20\u9012\u8fc7\u6765\u7684\u4ee3\u7801\uff0c\u6839\u672c\u4e0d\u8db3\u4e8e\u6784\u9020\u5927\u91cf\u5c5e\u4e8e\u5b83\u81ea\u5df1\u7684\u4e0a\u4e0b\u6587\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7406\u8bba\u4e0a\u53ef\u4ee5\u7f16\u5199\u590d\u6742\u7684\u4ee3\u7801\u4f20\u7ed9\u5bbf\u4e3b\u8bed\u8a00\uff0c\u6216\u8005\u5728\u5bbf\u4e3b\u8bed\u8a00\u4e2d\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e48\u591a\u7684\u4ee3\u7801\u4e0e\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u4ea4\u4e92\u5c06\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u6240\u4ee5\u5927\u90e8\u5206\u4e92\u64cd\u4f5c\u4e3b\u8981\u662f\u7528\u6765\u5b9e\u73b0\u4e00\u4e9b\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u7684\u5c11\u90e8\u5206\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ea7\u522b\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u8db3\u4e8e\u771f\u6b63\u6253\u7834\u4e24\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5272\u88c2\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u771f\u6b63\u9700\u6c42\u7684\uff0c\u4e5f\u662fRealityIS\u5b9a\u4e49\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u5c06\u4e24\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u770b\u505a\u5bf9\u7b49\u7684\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e0d\u5b58\u5728\u5bbf\u4e3b\u548c\u5916\u6765\u8bed\u8a00\u7684\u6982\u5ff5\uff0c\u5b83\u4eec\u540c\u65f6\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5168\u90e8\u6570\u636e\uff0c\u5b83\u4eec\u540c\u65f6\u62e5\u6709\u5404\u81ea\u5b8c\u6574\u7684\u5168\u90e8\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u53ef\u4ee5\u8fdb\u884c\u4efb\u4f55\u4ee3\u7801\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u76f8\u4e92\u8c03\u7528\u548c\u5171\u4eab\uff0c\u53ea\u8981\u7528\u6237\u7528\u6237\u5b83\u4eec\u6709\u8fd9\u6837\u7684\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"},"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"is",src:l(8732).Z,width:"2720",height:"1406"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5176\u6839\u57fa\u8fd8\u662f\u9762\u5411\u5355\u5e94\u7528\uff0c\u5b83\u89e3\u51b3\u7684\u662f\u5355\u5e94\u7528\u6216\u8005\u5355\u4e2a\u7cfb\u7edf\u8ddf\u5916\u754c\u4e4b\u95f4\u600e\u6837\u901a\u4fe1\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u901a\u4fe1\u901a\u5e38\u5f88\u7b80\u5355\uff0c\u6bd4\u5982\u5bf9\u4e8e\u5fae\u4fe1\u3001\u652f\u4ed8\u5b9d\u6765\u8bf4\uff0c\u8c03\u7528\u5b83\u4eec\u63d0\u4f9b\u7684API\u5176\u5b9e\u5c31\u662f\u4e00\u79cd\u548c\u8fd9\u4e9b\u7cfb\u7edf\u7684\u4e92\u64cd\u4f5c\u3002\u8fd9\u79cd\u4e92\u64cd\u4f5c\u4e4b\u95f4\u4f20\u9012\u7684\u4fe1\u606f\u7528\u4e00\u4e9b\u7b80\u5355\u7ed3\u6784\u7684\u5b57\u7b26\u4e32\u90fd\u53ef\u4ee5\u3002\u8fd9\u4e9b\u7cfb\u7edf\u4e4b\u95f4\u7684\u534f\u8bae\u6216\u8005\u6807\u51c6\u901a\u5e38\u4e5f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u901a\u5e38\u8868\u73b0\u51fa\u4e00\u4e0b\u51e0\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u662f\u5355\u5411\u7684\uff0c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u901a\u5e38\u4e0d\u5bf9\u7b49\uff0c\u8868\u73b0\u4e3a\u4f17\u591a\u5c0f\u5e94\u7528\u4f9d\u9644\u4e8e\u4e00\u4e9b\u5927\u7684\u5e73\u53f0\uff0c\u4f8b\u5982\u73b0\u5728\u7684\u5c0f\u7a0b\u5e8f\u3001\u5fae\u4fe1\u5e73\u53f0\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u901a\u4fe1\u7684\u5185\u5bb9\u6bd4\u8f83\u7b80\u5355\uff0c\u6269\u5c55\u80fd\u529b\u8f83\u5dee\uff0c\u4f8b\u5982\u5982\u679c\u9700\u8981\u6269\u5c55\u4e00\u4e9b\u6d88\u606f\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u5b9a\u4e49\u53cc\u65b9\u7684\u89e3\u6790\u683c\u5f0f\uff0c\u66f4\u4e0d\u7528\u8bf4\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u6d88\u606f\u901a\u4fe1\u4e86")),(0,n.kt)("p",null,"RealityIS\u8ddf\u8fd9\u4e9b\u673a\u5236\u7684\u6700\u5927\u4e0d\u540c\uff0c\u5728\u4e8e\u5b83\u5c1d\u8bd5\u89e3\u51b3\u4e24\u4e2a\u66f4\u590d\u6742\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u7b49\u6027"),"\uff0c\u5373\u4e92\u64cd\u4f5c\u7684\u4e24\u4e2a\u7a0b\u5e8f\u6216\u7cfb\u7edf\u4e4b\u95f4\u662f\u5bf9\u7b49\u7684\uff0c\u4e0d\u662f\u4f9d\u9644\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6269\u5c55\u6027"),"\uff0c\u53ef\u4ee5\u6bd4\u8f83\u5bb9\u6613\u5730\u5b9e\u73b0\u4efb\u610f\u901a\u4fe1\uff0c\u800c\u4e0d\u662f\u5c40\u9650\u4e8e\u5c11\u6570\uff08\u4e5f\u6bd4\u8f83\u5bb9\u6613\u5b9e\u73b0\u7684\uff09\u534f\u5b9a\u7684\u683c\u5f0f")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8981\u6c42\u5bf9\u4e92\u64cd\u4f5c\u6027\u7684\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u4e86\u5168\u65b0\u7684\u6311\u6218\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u57fa\u672c\u4e0a\u5f88\u96be\u652f\u6301\u8fd9\u6837\u7684\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u5bf9\u7b49\u6027\u5bf9\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u7684\u4e3b\u8981\u6311\u6218\u662f\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u5171\u4eab\uff0c\u5373\u6240\u6709\u5b50\u7a0b\u5e8f\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u5747\u6709\u5404\u81ea\u7684\u5b8c\u6574\u7684\u5185\u5b58\u4e0a\u4e0b\u6587\uff1a\u5373\u6240\u6709\u6570\u636e\u548c\u4ee3\u7801\uff0c\u629b\u5f00\u6389\u4e92\u64cd\u4f5c\u6027\u7684\u9700\u8981\uff0c\u6bcf\u4e2a\u5b50\u7a0b\u5e8f\u90fd\u662f\u4e00\u4e2a\u72ec\u7acb\u771f\u6b63\u7684\u7a0b\u5e8f\u3002\u56e0\u4e3a\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u90fd\u53ef\u4ee5\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u4e2a\u8ba1\u7b97\u67b6\u6784\u7684\u6839\u672c\u53d8\u9769\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u9488\u5bf9\u5355\u5e94\u7528\u7684\uff0c\u56e0\u6b64\u6574\u4e2a\u5185\u5b58\u7684\u6570\u636e\u90fd\u53ef\u4ee5\u7531\u8be5\u7a0b\u5e8f\u81ea\u7531\u63a7\u5236\u548c\u5904\u7406\uff0c\u73b0\u5728\u7f16\u7a0b\u8bed\u8a00\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u6574\u4e2a\u7f16\u8bd1\u8fc7\u7a0b\u90fd\u662f\u56f4\u7ed5\u6574\u4e2a\u76ee\u6807\u8bbe\u8ba1\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u8ba9\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5171\u5904\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u8fd9\u4e2a\u9996\u5148\u5e26\u6765\u7684\u6311\u6218\u5c31\u662f\u6570\u636e\u5b89\u5168\uff1a\u5982\u679c\u6309\u7167\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\uff0c\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u6307\u9488\u4f7f\u53ef\u4ee5\u8bbf\u95ee\u4efb\u610f\u5730\u5740\u7684\uff0c\u8fd9\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u4e0d\u518d\u662f\u5b89\u5168\u7684\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6ca1\u6709\u4efb\u4f55\u673a\u5236\u53ef\u4ee5\u4fdd\u62a4\u8fd9\u4e2a\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u662f\u7b80\u5355\u5730\u5047\u8bbe\uff0c\u53ea\u8981\u4f60\u7684\u4ee3\u7801\u5728\u4e00\u4e2a\u8fd0\u884c\u65f6\u73af\u5883\u4e2d\u8fd0\u884c\uff0c\u90a3\u4e48\u6574\u4e2a\u5185\u5b58\u73af\u5883\u90fd\u662f\u4f60\u7684\uff0c\u4f60\u53ef\u4ee5\u4efb\u610f\u7834\u574f\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u56e0\u4e3a\u4ee3\u7801\u6709\u4efb\u610f\u7834\u574f\u7684\u80fd\u529b\uff0c\u624d\u9700\u8981\u5404\u79cd\u8bed\u8a00\u673a\u5236\uff08\u5982\u7c7b\u578b\u68c0\u67e5\uff09\u6765\u7ea6\u675f\u5f00\u53d1\u8005\u8fdb\u884c\u5b89\u5168\u7f16\u7a0b\uff0c\u800c\u50cfC\u8fd9\u6837\u7684\u8bed\u8a00\u5c31\u901a\u5e38\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u4e0d\u5b89\u5168\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u76ee\u524d\u6211\u4eec\u65e0\u6cd5\u4ece\u6839\u672c\u4e0a\u7a81\u7834\u8fd9\u4e00\u7f3a\u9677\uff0c\u53ef\u9884\u89c1\u7684\u77ed\u671f\u5c06\u6765\u4e5f\u4e0d\u4f1a\u6709\u7c7b\u4f3c\u7684\u8ba1\u7b97\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u9700\u6c42\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u57fa\u4e8e\u5f53\u524d\u7684\u7f16\u8bd1\u67b6\u6784\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u529f\u80fd\u3002\u800c\u5f53\u524d\u7f16\u8bd1\u4f53\u7cfb\u4e0b\u552f\u4e00\u80fd\u591f\u5b9e\u73b0\u8fd9\u6837\u529f\u80fd\u7684\u65b9\u5f0f\uff0c\u53ef\u80fd\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u8ba9\u5b50\u7a0b\u5e8f\u5728\u5806\u4e0a\u5206\u914d\u4efb\u4f55\u5185\u5b58\uff0c\u5b83\u4eec\u53ea\u80fd\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5806\u6808\u4e0a\u5b9e\u73b0\u53d8\u91cf\u7684\u5206\u914d\u548c\u4f7f\u7528"),"\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u5b50\u7a0b\u5e8f\u4e0d\u80fd\u4f7f\u7528\u6307\u9488\uff0c\u4e0d\u80fd\u6784\u9020\u5bf9\u8c61\uff0c\u65e0\u6cd5\u5f15\u7528\u5bf9\u8c61\uff0c\u5b83\u4eec\u80fd\u591f\u4f7f\u7528\u7684\u90fd\u662f\u5728\u6808\u4e0a\u5206\u914d\u7684\u503c\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u73b0\u4ee3\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u4e0a\u8ff0\u8fd9\u4e9b\u7ea6\u675f\u90fd\u662f\u6781\u5927\u7684\u9650\u5236\uff0c\u8fd9\u4e5f\u5fc5\u5c06\u5927\u5927\u9650\u5236\u7a0b\u5e8f\u7684\u80fd\u529b\u3002\u7136\u800cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u5373\u4f7f\u5728\u8fd9\u6837\u7684\u9650\u5236\u4e0b\uff0c\u8bed\u8a00\u80cc\u540e\u7684\u8fd0\u884c\u65f6\u548c\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9e\u73b0\u4efb\u4f55\u5176\u4ed6\u8bed\u8a00\u53ef\u4ee5\u5177\u5907\u7684\u80fd\u529b\u3002\u8fd9\u4e9b\u673a\u5236\u53c2\u89c1\u524d\u9762\u7ae0\u8282\u7684\u5185\u5bb9\uff0c\u4f46\u8fd9\u91cc\u603b\u7ed3\u5b83\u7684\u6838\u5fc3\u7406\u5ff5\u548c\u673a\u5236\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u601d\u7ef4\u8bc1\u660e\u591a\u4e2a\u72ec\u7acb\u7eaf\u51fd\u6570\u53ef\u4ee5\u590d\u5408\u6784\u6210\u6210\u590d\u6742\u51fd\u6570\uff0c\u8fdb\u800c\u89e3\u51b3\u4efb\u4f55\u903b\u8f91\u95ee\u9898\uff0c\u800c\u7eaf\u51fd\u6570\u672c\u8eab\uff0c\u9664\u4e86\u5b83\u6ca1\u6709\u5185\u90e8\u72b6\u6001\u8fd9\u4e00\u5916\u5728\u6982\u5ff5\u4e4b\u5916\uff0c\u4ece\u7f16\u8bd1\u673a\u5236\u6765\u8bb2\uff0c\u5b83\u7684\u4e00\u4e2a\u6838\u5fc3\u7684\u7ea6\u675f\u662f\u6bcf\u4e2a\u7eaf\u51fd\u6570\u53ea\u80fd\u5728\u6808\u4e0a\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u53d8\u91cf\u4f1a\u968f\u7740\u51fd\u6570\u7684\u8c03\u7528\u7ed3\u675f\u800c\u4e22\u5f03\uff0c\u6240\u4ee5\u5b83\u4eec\u4e0d\u80fd\u5b58\u50a8\u72b6\u6001\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5141\u8bb8\u4e00\u4e2a\u51fd\u6570\u80fd\u591f\u6784\u9020\u6216\u8005\u8bbf\u95ee\u4e00\u4e2a\u5bf9\u8c61\u6216\u8005\u5f15\u7528\u7c7b\u4f3c\uff0c\u90a3\u4e48\u8fd9\u4e2a\u51fd\u6570\u53ef\u80fd\u5c31\u4f1a\u8bb0\u4f4f\u67d0\u4e9b\u72b6\u6001"),"\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u7684\u673a\u5236\u5206\u6790\uff0c\u6211\u4eec\u5b8c\u5168\u6709\u53ef\u80fd\u6784\u9020\u4e00\u79cd\u591a\u5e94\u7528\u5bf9\u7b49\u5171\u4eab\u540c\u4e00\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u7684\u673a\u5236\uff0c\u5728\u6b64\u57fa\u7840\u4e4b\u4e0a\uff0c\u53ea\u9700\u8981\u505a\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u4e2a\u5b50\u51fd\u6570\u7ec4\u4ef6\u53ef\u4ee5\u7531\u8fd0\u884c\u65f6\u6765\u7ec4\u5408\u4e3a\u590d\u5408\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u6765\u7ba1\u7406\u5b50\u7a0b\u5e8f\u81ea\u8eab\u6240\u5c5e\u6570\u636e\uff08\u4e0d\u662f\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u6570\u636e\uff0c\u800c\u662f\u5b50\u7a0b\u5e8f\u7684\u6570\u636e\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u63d0\u4f9b\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u51fd\u6570\u76f8\u4e92\u8c03\u7528\u7684\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5728\u8fd9\u4e2a\u8c03\u7528\u7684\u8fc7\u7a0b\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u6743\u9650\u63a7\u5236")),(0,n.kt)("p",null,"RealityIS\u5b9e\u73b0\u4e86\u4e0a\u8ff0\u6240\u6709\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\u4e0d\u592a\u4e00\u6837\u7684\u662f\uff0c\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u66f4\u5f3a\u8c03\u4e24\u79cd\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3002\u800cRealityIS\u76ee\u524d\u53ea\u80fd\u652f\u6301\u5355\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\uff0c\u5c3d\u7ba1\u4eceJVM\u7684\u89d2\u5ea6\u770b\uff0c\u652f\u6301\u591a\u8bed\u8a00\u4e5f\u4e0d\u662f\u4e0d\u53ef\u80fd\uff0c\u4f46\u662f\u7531\u4e8eCreationScript\u672c\u8eab\u5df2\u7ecf\u662f\u4e00\u79cd\u6781\u5ea6\u7b80\u5316\u7684\u8bed\u8a00\uff0c\u8fd9\u6837\u7684\u591a\u8bed\u8a00\u652f\u6301\u6ca1\u6709\u592a\u5927\u7684\u610f\u4e49\u3002\u4f20\u7edf\u7684\u591a\u8bed\u8a00\u4e92\u64cd\u4f5c\u662f\u56e0\u4e3a\u4e0d\u540c\u8bed\u8a00\u4e4b\u95f4\u5f80\u5f80\u5b58\u5728\u7740\u8f83\u5927\u7684\u7279\u6027\u5dee\u5f02\uff0c\u6216\u8005\u64c5\u957f\u5904\u7406\u7684\u5b50\u7cfb\u7edf\u5177\u6709\u4e0d\u540c\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u95ee\u9898\u5728RealityIS\u4e2d\u662f\u4e0d\u5b58\u5728\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5982\u679c\uff0cRealityIS\u672c\u8eab\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u67b6\u6784\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u903b\u8f91\uff0c\u5e76\u4e14RealityIS\u5185\u90e8\u4e5f\u662f\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5bf9\u7b49\u7684\u5b50\u7a0b\u5e8f\u3002\u8fd9\u6837\u7684\u4e92\u64cd\u4f5c\u80fd\u529b\uff0c\u8981\u5927\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5173\u4e8e\u6269\u5c55\u6027\uff0c\u8fd9\u6d89\u53ca\u53e6\u4e00\u4e2a\u6982\u5ff5\uff0c\u5373\u6807\u51c6\u76f8\u5173\u7684\u95ee\u9898\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"},"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"),(0,n.kt)("p",null,"\u53ef\u6269\u5c55\u6027\u5b9e\u8d28\u662f\u6d89\u53ca\u6807\u51c6\u7684\u95ee\u9898\uff0c\u5e94\u7528\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u5fc5\u7136\u901a\u8fc7\u6807\u51c6\u6765\u5b9e\u73b0\uff0c\u56e0\u6b64\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\u662f\u5173\u4e8e\u80fd\u591f\u600e\u6837\u7b80\u5355\u9ad8\u6548\u5730\u6d89\u53ca\u4e00\u4e2a\u6807\u51c6\uff0c\u80fd\u591f\u8ba9\u5e0c\u671b\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5feb\u901f\u96c6\u6210\u652f\u6301\u8fd9\u6837\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u4e4b\u95f4\u6807\u51c6\u7684\u673a\u5236\u662f\u600e\u6837\u8fd0\u4f5c\u7684\u3002\u4f20\u7edf\u7684\u5927\u5e73\u53f0\u5982\u5fae\u4fe1\u548c\u652f\u4ed8\u5b9d\uff0c\u5b83\u4eec\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u5b83\u4eec\u63d0\u4f9b\u7684\u6807\u51c6\u5927\u5bb6\u90fd\u4f1a\u53bb\u9075\u5b88\uff0c\u5373\u4fbf\u8fd9\u79cd\u6807\u51c6\u7684\u89c4\u8303\u7279\u522b\u5dee\uff0c\u5f00\u53d1\u8005\u4e5f\u53ea\u80fd\u53bb\u517c\u5bb9\u548c\u652f\u6301\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\u5e73\u53f0\u4e4b\u95f4\u5b9a\u4e49\u6807\u51c6\u7684\u65b9\u5f0f\u5dee\u522b\u5f88\u5927\uff0c\u9020\u6210\u5206\u5316\uff0c\u5c0f\u5f00\u53d1\u8005\u9700\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u5927\u5e73\u53f0\u9002\u914d\u4e0d\u540c\u7684\u6807\u51c6\u5f62\u5f0f\u3002\u6bd4\u5982\u4e00\u4e2a\u6e38\u620f\u901a\u5e38\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u53d1\u884c\u5e73\u53f0\u4ecb\u5165\u5f88\u591a\u5bb6SDK\uff0c\u4f46\u672c\u8d28\u4e0a\u5b83\u4eec\u7684\u529f\u80fd\u90fd\u5dee\u4e0d\u591a\uff0c\u8fd9\u4e5f\u5bfc\u81f4\u4e00\u4e9b\u63d0\u4f9b\u7edf\u4e00\u670d\u52a1\u63a5\u53e3\u7684\u670d\u52a1\uff0c\u4f8b\u5982AnySDK\uff0c\u4f8b\u5982Unity\u63d0\u4f9b\u7684ARFundation\u5f88\u5927\u7a0b\u5ea6\u4e0a\u90fd\u662f\u5728\u7edf\u4e00ARCore\u548cARKit\u7684\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e09\u4e2a\u95ee\u9898\u662f\uff0c\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\u901a\u5e38\u53ea\u6709\u5c0f\u5e94\u7528\u53bb\u96c6\u6210\u5927\u5e73\u53f0\u6216\u8005\u5927\u5e94\u7528\uff0c\u800c\u5927\u5e94\u7528\u4e0d\u4f1a\u53bb\u517c\u987e\u5c0f\u5e94\u7528\u7684\u4e92\u64cd\u4f5c\u6027\u3002\u6240\u4ee5\u8fd9\u662f\u4e00\u79cd\u9644\u5c5e\u5e94\u7528\uff0c\u9644\u5c5e\u5f62\u6001\uff0c\u800c\u4e0d\u662f\u4e00\u79cd\u5171\u751f\u5e73\u7b49\u5f62\u6001\u3002\u4f46\u8fd9\u79cd\u5f62\u6001\u5176\u663e\u7136\u7684\u7f3a\u70b9\u662f\uff0c\u8fd9\u79cd\u751f\u6001\u5b83\u7684\u603b\u4f53\u529f\u80fd\u5c31\u662f\u56f4\u7ed5\u5927\u5e94\u7528\u6216\u8005\u5927\u5e73\u53f0\u7684\u8303\u56f4\u53bb\u6269\u5c55\u7684\u8303\u56f4\uff0c\u8fd9\u4e2a\u8303\u56f4\u7684\u5927\u5c0f\u57fa\u672c\u4e0a\u662f\u53d7\u5927\u5e73\u53f0\u672c\u8eab\u7684\u6027\u8d28\u6240\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u56f4\u7ed5YouTube\u7684\u5c31\u662f\u89c6\u9891\u751f\u6001\uff0c\u56f4\u7ed5\u5fae\u4fe1\u7684\u793e\u4ea4\u751f\u6001\uff0c\u4ee5\u53ca\u56f4\u7ed5\u652f\u4ed8\u5b9d\u7684\u7535\u5546\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u8981\u60f3\u5f00\u53d1\u4e00\u4e2a\u5171\u751f\u5171\u4eab\u7684\u5f00\u653e\u5e73\u53f0\uff0c\u663e\u7136\u6807\u51c6\u7684\u5f62\u6001\u9700\u8981\u53d8\u9769\u3002\u8fd9\u81f3\u5c11\u9700\u8981\u601d\u8003\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u7edf\u4e00\u6807\u51c6\u5236\u5b9a\u5f62\u5f0f\uff0c\u600e\u6837\u8ba9\u5927\u5bb6\u5236\u5b9a\u66f4\u5bb9\u6613\u96c6\u6210\u3001\u66f4\u7edf\u4e00\u3001\u66f4\u7b80\u5355\u5730\u89c4\u8303\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u662f\u8ba9\u5f71\u54cd\u529b\u6ca1\u90a3\u4e48\u5927\u7684\u7ec4\u7ec7\u6216\u8005\u7cfb\u7edf\u5236\u5b9a\u7684\u6807\u51c6\uff0c\u80fd\u591f\u6709\u673a\u4f1a\u6162\u6162\u8fdb\u5316\uff0c\u8fdb\u800c\u6709\u53ef\u80fd\u8ba9\u5f71\u54cd\u529b\u66f4\u5927\u7684\u7cfb\u7edf\u6765\u53cd\u5411\u652f\u6301\uff0c\u5b9e\u73b0\u7cfb\u7edf\u4e4b\u95f4\u7684\u5bf9\u7b49")),(0,n.kt)("p",null,"\u4ee5\u524d\u662f\u901a\u8fc7\u5f71\u54cd\u529b\u5e26\u52a8\u6807\u51c6\uff0c\u7531\u5b83\u4eec\u6765\u5236\u5b9a\u6807\u51c6\uff0c\u6240\u4ee5\u6574\u4e2a\u4e92\u64cd\u4f5c\u7684\u751f\u6001\u6838\u5fc3\u8fd8\u662f\u5927\u5e73\u53f0\u7684\u5730\u4f4d\u3002\u5c0f\u5e94\u7528\u6ca1\u6709\u673a\u4f1a\u53bb\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u66f4\u5e0c\u671b\u5b83\u50cf\u771f\u5b9e\u793e\u4f1a\uff0c\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u90fd\u53ef\u4ee5\u53bb\u53d1\u8d77\u81ea\u5df1\u7684\u751f\u610f\uff0c\u53ea\u8981\u5b83\u4eec\u7684\u751f\u610f\u505a\u5f97\u8db3\u591f\u597d\uff0c\u6162\u6162\u5c31\u4f1a\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002\u800c\u4e14\uff0c\u5f53\u5176\u4ed6\u7684\u7ec4\u7ec7\u6216\u8005\u4e2a\u4eba\u53d1\u73b0\u8fd9\u4e2a\u4ea7\u54c1\u7684\u65f6\u5019\uff0c\u4ed6\u4eec\u4e5f\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u4e0e\u4e4b\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f9b\u5e94\u5173\u7cfb\uff0c\u800c\u975e\u5e73\u53f0\u5f71\u54cd\u529b\u7684\u5ef6\u4f38\uff0c\u624d\u80fd\u771f\u6b63\u4fc3\u8fdb\u521b\u65b0\u3002\u800c\u5927\u5e73\u53f0\u4f1a\u627c\u6740\u5f88\u591a\u521b\u65b0\uff0c\u5e76\u4e14\u4f1a\u62a2\u593a\u5f88\u591a\u5177\u6709\u521b\u9020\u80fd\u529b\u7684\u4e2a\u4eba\u6216\u8005\u7ec4\u7ec7\u7684\u8d44\u6e90\uff0c\u800c\u8fd9\u9760\u7684\u4e0d\u662f\u5b9e\u529b\u548c\u4ea7\u54c1\uff0c\u800c\u5355\u7eaf\u5c31\u662f\u5e73\u53f0\u7684\u5784\u65ad\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e73\u53f0\u7684\u5f71\u54cd\u529b\u4e0d\u518d\u662f\u4e3b\u5bfc\u7684\uff0c\u90a3\u4e48\u6807\u51c6\u672c\u8eab\u5c31\u5e94\u8be5\u662f\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u56e0\u7d20\uff0c\u5728\u5e73\u53f0\u7ed9\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u63d0\u4f9b\u516c\u5e73\u673a\u4f1a\u4f7f\u5927\u5bb6\u90fd\u6709\u673a\u4f1a\u6210\u957f\u7684\u65f6\u5019\uff0c\u8fd8\u9700\u8981\u4e00\u4e2a\u80fd\u591f\u4f7f\u4e4b\u4e0e\u5176\u4ed6\u7ec4\u7ec7\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u7684\u7b80\u5355\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5c06\u6807\u51c6\u5355\u72ec\u5206\u79bb\u5904\u7406\uff0c\u5206\u79bb\u4e4b\u540e\uff0c\u6807\u51c6\u7684\u5730\u4f4d\u63d0\u5347\uff0c\u6807\u51c6\u662f\u516c\u7acb\u7ec4\u7ec7\uff0c\u5b83\u4e0d\u53d7\u5176\u4ed6\u5b9e\u9645\u5f00\u53d1\u4ea7\u54c1\u7684\u7ec4\u7ec7\u6216\u4e2a\u4eba\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u5b83\u4eec\u53ef\u4ee5\u5f62\u6210\u5efa\u8bae\uff0c\u4f46\u603b\u7684\u6765\u8bf4\uff0c\u90a3\u4e9b\u6709\u5f71\u54cd\u529b\u7684\u5927\u5e94\u7528\u6ca1\u6709\u529e\u6cd5\u901a\u8fc7\u6807\u51c6\u53bb\u627c\u6740\u5c0f\u5e94\u7528\uff0c\u56e0\u4e3a\u6807\u51c6\u672c\u8eab\u5177\u6709\u4e00\u4e2a\u5de8\u5927\u7684\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6807\u51c6\u662f\u5f00\u653e\u7684")),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u53ea\u662f\u901a\u4fe1\u63a5\u53e3\uff0c\u5b83\u4e0d\u662f\u7ba1\u9053\u6216\u5176\u4ed6\u4e1c\u897f\uff0c\u4f60\u6ca1\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5173\u4e8e\u6807\u51c6\u76f8\u5173\u7684\u5185\u5bb9\u53c2\u89c14.11\u8282\uff0cRealityIS\u7684\u6807\u51c6\u673a\u5236\u4f7f\u5f97\u4efb\u4f55\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u5c31\u4efb\u4f55\u611f\u5174\u8da3\u90e8\u5206\u8fdb\u884c\u901a\u4fe1\u3002"),(0,n.kt)("h4",{id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"},"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u7406\u89e3RealityIS\u7684\u4e92\u64cd\u4f5c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u4e92\u64cd\u4f5c\u6027\u4e0e\u53ef\u7ec4\u5408\u6027\u7684\u5173\u7cfb\uff0cRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u4ec5\u4ec5\u662f\u4e3a\u4e86\u5e94\u7528\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u8fd9\u79cd\u901a\u4fe1\u7684\u76ee\u7684\u4e3b\u8981\u662f\u4e3a\u4e86\u5b9e\u73b0\u81ea\u52a8\u7ec4\u5408\uff0c\u4ece\u800c\u5927\u5927\u7b80\u5316\u5e94\u7528\u5f00\u53d1\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(4771).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u5982\u4eca\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u867d\u7136\u901a\u8fc7\u8f6f\u4ef6\u67b6\u6784\u8bbe\u8ba1\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u505a\u5230\u4e00\u5b9a\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u5408\u6027\u51e0\u4e4e\u90fd\u5e02\u9488\u5bf9\u5f00\u53d1\u8005\u7684\uff0c\u666e\u901a\u7528\u6237\u5f88\u96be\u5229\u7528\u5230\u8fd9\u79cd\u80fd\u529b\uff0c\u8fd9\u662f\u56e0\u4e3a\u8fd9\u4e9b\u903b\u8f91\u4e0a\u7684\u7ec4\u5408\uff0c\u672c\u8d28\u4e0a\u5c31\u662f\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u51fd\u6570\u8c03\u7528\uff0c\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u7684\u4f1a\u6d89\u53ca\u5230\u51fd\u6570\u7684\u5b9a\u4e49\u3001\u5730\u5740\u3001\u53c2\u6570\u5217\u8868\u3001\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u8fd9\u4e9b\u7a0b\u5e8f\u7684\u673a\u5236\uff0c\u800c\u666e\u901a\u7528\u6237\u65e2\u65e0\u6cd5\u5b66\u4e60\u548c\u7406\u89e3\u8fd9\u4e9b\u6982\u5ff5\uff0c\u4e5f\u5f88\u96be\u5728\u8fd0\u884c\u65f6\u4e0d\u901a\u8fc7\u4ee3\u7801\u7684\u65b9\u5f0f\u53bb\u62ff\u5230\u8fd9\u4e00\u5207\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7RealityIS\u9488\u5bf9\u4e92\u64cd\u4f5c\u6027\u8bbe\u8ba1\u7684\u4e00\u5957\u6807\u51c6\u8fd0\u4f5c\u673a\u5236\uff0cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u9690\u5f0f\u5730\u8fdb\u884c\u51fd\u6570\u8c03\u7528\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u4e4b\u95f4\u4e0d\u518d\u9700\u8981\u663e\u5f0f\u6307\u5b9a\u8c03\u7528\u51fd\u6570\u7684\u65b9\u6cd5\u540d\u79f0\u3001\u51fd\u6570\u5730\u5740\u3001\u53c2\u6570\u6570\u91cf\u3001\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u4fe1\u606f\uff0c\u800c\u662f\u5b83\u4eec\u4ec5\u4ec5\u9700\u8981\u9488\u5bf9\u4e00\u5b9a\u7684\u6807\u51c6\u63a5\u53e3\u5b9e\u73b0\u81ea\u5df1\u611f\u5174\u8da3\u7684\u529f\u80fd\u5373\u53ef"),"\u3002\u6b63\u662f\u8fd9\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u7528\u6237\u4e0d\u9700\u8981\u53bb\u4e86\u89e3\u4e00\u4e9b\u7a0b\u5e8f\u672f\u8bed\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u88ab\u5f53\u505a\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u529f\u80fd\u770b\u5f85\uff0c\u56e0\u6b64\u4f7f\u5f97\u666e\u901a\u7528\u6237\u80fd\u591f\u6bd4\u8f83\u7b80\u5355\u5730\u53bb\u5b9a\u4e49\u81ea\u5df1\u7684\u7a0b\u5e8f\u6216\u8005\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cRealityIS\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u5176\u5b9e\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u5b83\u7684\u4e92\u64cd\u4f5c\u6027\u673a\u5236\u6765\u5b9e\u73b0\u7684\uff0c\u5426\u5219\u6211\u4eec\u7528\u4e8e\u65e0\u6cd5\u7834\u9664\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u8fd9\u6837\u5373\u4f7f\u6709\u8f83\u597d\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u4e5f\u53ea\u80fd\u4e3b\u8981\u9488\u5bf9\u4e13\u4e1a\u5f00\u53d1\u8005\u3002RealityIS\u901a\u8fc7\u4e92\u64cd\u4f5c\u6027\u5b9e\u73b0\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f7f\u5f97RealityIS\u5e73\u53f0\u7684\u4ef7\u503c\u6709\u4e86\u66f4\u5927\u7684\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u76f8\u5173\u5185\u5bb9\u53c2\u89c12.7.10\u8282\u3002"),(0,n.kt)("h3",{id:"295-\u4ea4\u4e92\u6a21\u5f0f"},"2.9.5 \u4ea4\u4e92\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u673a\u5236\u672c\u8eab\uff0c\u7a0b\u5e8f\u4e4b\u95f4\u7684\u901a\u4fe1\u6216\u8005\u4e92\u64cd\u4f5c\u5f80\u5f80\u8fd8\u6d89\u53ca\u4e00\u4e2a\u8c03\u7528\u65b9\u5411\u7684\u95ee\u9898\uff0c\u8fd9\u4e2a\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\u5c24\u5176\u660e\u663e\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u7279\u522b\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\uff0c\u65b9\u6cd5\u548c\u6570\u636e\u5f80\u5f80\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u6216\u8005\u4e00\u4e2a\u76f8\u5bf9\u76f8\u5173\u7684\u6a21\u5757\u5f53\u524d\uff0c\u8fd9\u5c31\u5bfc\u81f4\u51fd\u6570\u7684\u4ea4\u4e92\u5177\u6709\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u8fd9\u4e9b\u6a21\u5f0f\u5bf9\u6574\u4f53\u67b6\u6784\u548c\u590d\u6742\u5ea6\u90fd\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u4ee5\u9762\u5411\u5bf9\u8c61\u4e3a\u4f8b\uff0c\u8bbe\u60f3\u6709\u4e00\u4e2a\u89d2\u8272\u5bf9\u8c61A\uff0c\u4f7f\u7528\u4e86\u4e00\u4e2a\u9053\u5177\u780d\u4f24\u4e86\u4e00\u4e2a\u602a\u7269\u5bf9\u8c61B\uff0c\u5bf9\u5176\u9020\u62105\u70b9\u4f24\u5bb3\uff0c\u6839\u636e\u5176\u4ea4\u4e92\u6a21\u5f0f\u7684\u4e0d\u540c\uff0c\u8fd9\u91cc\u53ef\u80fd\u6709\u4e00\u4e0b\u4e09\u4e2d\u903b\u8f91\u7ec4\u7ec7\u65b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9020\u6210\u4f24\u5bb3\u7684\u4ee3\u7801\u5c01\u88c5\u5728A\u7c7b\u4e2d\uff0c\u56e0\u4e3a\u6211\u4eec\u8ba4\u4e3a\u662f\u89d2\u8272\u7684\u52a8\u4f5c\u5bfc\u81f4\u7684\u7ed3\u679c\uff0c\u6240\u4ee5A\u7c7b\u4e2d\u7684\u67d0\u4e2a\u65b9\u6cd5\u9700\u8981\u53d6\u5f97\u5bf9\u8c61B\u7684\u5f15\u7528\uff0c\u7136\u540e\u5bf9\u5bf9\u8c61B\u4e2d\u7684HP\u53d8\u91cf\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u6b64\u8fd9\u4e5f\u8981\u6c42B\u66b4\u9732\u8be5\u5c5e\u6027\u7684\u8bbf\u95ee\u6743\u9650\u3002\u5f53\u7136\u6211\u4eec\u53ef\u4ee5\u5c06\u5bf9\u8fd9\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u6539\u4e3a\u65b9\u6cd5\u7684\u5f62\u5f0f\uff0c\u8ba9A\u5bf9\u8c03\u7528\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u4f46\u4e24\u8005\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u95ee\u9898\u662fA\u9700\u8981\u8c03\u7528B\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u89e3\u9664\u4e24\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u53e6\u4e00\u4e2a\u65b9\u6cd5\u662f\u91c7\u7528\u54cd\u5e94\u7684\u6a21\u5f0f\uff0cA\u4e0d\u4f1a\u76f4\u63a5\u4fee\u6539B\uff0c\u800c\u662f\u53d1\u51fa\u4e00\u4e2a\u6d88\u606f\u5230\u4e00\u4e2a\u5730\u65b9\uff0c\u7136\u540eB\u4f1a\u53bb\u8fd9\u4e2a\u5730\u65b9\u68c0\u6d4b\u8fd9\u4e2a\u6d88\u606f\uff0c\u5982\u679c\u53d1\u73b0\u5177\u6709\u67d0\u6761\u6d88\u606f\uff0c\u5219\u6267\u884c\u4e00\u4e2a\u6389\u8840\u7684\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u8fc7\u7a0bA\u548cB\u4e0d\u4f1a\u8026\u5408\uff0c\u8fd9\u4e2a\u5177\u4f53\u7684\u6263\u8840\u64cd\u4f5c\u4e3b\u8981\u662f\u7531B\u53d1\u8d77\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u8fd8\u6709\u4e00\u79cd\u975e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\uff0c\u8fd9\u79cd\u65b9\u6cd5\u4ee5\u65b9\u6cd5\u4e3a\u6838\u5fc3\uff0c\u5b83\u540c\u65f6\u4f20\u5165A\u548cB\u4e24\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c3d\u7ba1A\u548cB\u4e4b\u95f4\u4e0d\u4f1a\u76f4\u63a5\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u7684\u610f\u4e49\u4e0d\u5927\uff0c\u9664\u4e86\u8981\u5728\u989d\u5916\u4e0d\u76f8\u5173\u7684\u5730\u65b9\u53bb\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\uff0c\u800c\u4e14\u4e00\u65e6\u7531\u4efb\u4f55\u7ed3\u6784\u7684\u4fee\u6539\uff0c\u51e0\u4e2a\u5730\u65b9\u4e5f\u4f1a\u53d7\u5230\u5f71\u54cd\u3002")),(0,n.kt)("p",null,"\u9009\u62e9\u7b2c\u4e00\u8fd8\u662f\u7b2c\u4e8c\u79cd\uff0c\u4e00\u822c\u7684\u7f16\u7a0b\u8bed\u8a00\u5e76\u6ca1\u6709\u9650\u5236\uff0c\u4f46\u662f\u5728\u5927\u90e8\u5206\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u9009\u62e9\u4e00\u7684\u53ef\u80fd\u4f1a\u66f4\u591a\uff0c\u8fd9\u79cd\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e8c\u4f1a\u5e26\u6765\u4e00\u4e9b\u989d\u5916\u7684\u7ed3\u6784\u4ee5\u53ca\u7ef4\u62a4\uff0c\u5e76\u4e14\u6ca1\u6709\u4e00\u90a3\u4e48\u5bb9\u6613\u8c03\u5f0f\u3002\u4f46\u662f\u4e00\u5b9e\u9645\u4e0a\u4f1a\u5e26\u6765\u5f88\u591a\u95ee\u9898\uff0c\u6211\u4eec\u628a\u4e00\u79f0\u4e3a\u4e3b\u52a8\u5f0f\uff0c\u76f8\u5e94\u7684\u628a\u4e8c\u79f0\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u76f4\u63a5\u5f15\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c \u5e76\u901a\u8fc7\u8c03\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u65b9\u6cd5\u6216\u8005\u5c5e\u6027\u8bbf\u95ee\u6765\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u79cd\u65b9\u5f0f\u51e0\u4e4e\u662f\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u652f\u6301\u7684\u673a\u5236\uff0c\u5b83\u4e5f\u662f\u7f16\u5199\u8d77\u6765\u6700\u76f4\u63a5\u548c\u7b80\u5355\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u7531\u5f88\u591a\u7f3a\u70b9\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u7684\u95ee\u9898\u5927\u6982\u53ef\u4ee5\u5f52\u4e3a\u4ee5\u4e0b\u51e0\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u6269\u5c55\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u8026\u5408\uff0c\u5f88\u660e\u663eA\u76f4\u63a5\u8c03\u7528\u4e86B\uff0cA\u548cB\u4e4b\u95f4\u5b58\u5728\u76f4\u63a5\u8026\u5408\uff0c\u5982\u679cA\u548cB\u4e4b\u95f4\u76f8\u5173\u8c03\u7528\u90e8\u5206\u7684\u7ed3\u6784\u53d1\u751f\u53d8\u5316\uff0c\u4e24\u8005\u90fd\u5fc5\u987b\u54cd\u5e94\u8c03\u6574\u3002\u6b64\u5916\uff0c\u8026\u5408\u5e26\u6765\u7684\u66f4\u5927\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u4e3a\u4e86\u8bbf\u95eeB\u7684\u6210\u5458\uff0c\u7c7bB\u4e0d\u5f97\u4e0d\u5c06\u8fd9\u4e9b\u53d8\u91cf\u6216\u65b9\u6cd5\u7684\u8bbf\u95ee\u6743\u9650\u516c\u5f00\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4efb\u4f55\u4ee3\u7801\u7406\u8bba\u4e0a\u90fd\u53ef\u4ee5\u8bbf\u95ee\uff0c\u9020\u6210\u8f83\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002\u5c3d\u7ba1\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u6210\u5458\u7684\u6743\u9650\u8303\u56f4\uff0c\u4f8b\u5982\u7a0b\u5e8f\u96c6\u5185\u90e8\uff0c\u53cb\u5143\u7b49\u673a\u5236\uff0c\u4f46\u8fd9\u4e9b\u6743\u9650\u63a7\u5236\u7684\u7075\u6d3b\u6027\u8fdc\u8fdc\u4e0d\u591f\u3002"),(0,n.kt)("p",null,"\u5176\u6b21\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5e26\u6765\u903b\u8f91\u4e0a\u7684\u4e00\u4e9b\u5173\u7cfb\u6df7\u4e71\uff0c\u6709\u65f6\u5019A\u548cB\u76f4\u63a5\u5e76\u6ca1\u6709\u5fc5\u8981\u7684\u56e0\u679c\u5173\u7cfb\uff0c\u4f46\u662f\u5176\u6d41\u7a0b\u4e0a\u4e5f\u53ef\u4ee5\u8fd9\u6837\u53bb\u6267\u884c\u3002\u518d\u6bd4\u5982\u6709\u65f6\u5019\u6211\u4eec\u5355\u7eaf\u4ece\u7c7bB\u53bb\u8003\u5bdf\u5b83\u7684\u529f\u80fd\uff0c\u6211\u4eec\u53ef\u80fd\u6839\u672c\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u4f1a\u88ab\u8c03\u7528\uff0c\u88ab\u8c01\u8c03\u7528\uff0c\u6211\u4eec\u65e0\u6cd5\u9884\u6d4b\u7a0b\u5e8f\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5c24\u5176\u662f\u5728\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\u4e2d\u518d\u5939\u6742\u7740\u72b6\u6001\u7684\u60c5\u51b5\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u7c7bB\u7684\u4e00\u4e9b\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u6709\u65f6\u5019\u53ef\u80fd\u5e76\u4e0d\u4ec5\u4ec5\u6765\u81eaA\uff0c\u8fd8\u8981\u8003\u8651\u5176\u4ed6\u5bf9\u8c61\u7684\u5f71\u54cd\uff0c\u4f46\u662fA\u4f5c\u4e3a\u8c03\u7528\u65b9\u53ef\u80fd\u6839\u672c\u65e0\u6cd5\u53bb\u611f\u77e5\u8fd9\u6837\u7684\u4e8b\u60c5\u3002\u5b9e\u9645\u4e0a\u901a\u8fc7\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u53ef\u77e5\uff0c\u54cd\u5e94\u5f0f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\u624d\u662f\u5927\u90e8\u5206\u6d3b\u52a8\u8fdb\u884c\u4ea4\u4e92\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53ef\u6269\u5c55\u6027\uff0c\u8fd9\u8ddf\u8026\u5408\u5b9e\u9645\u4e0a\u4e5f\u662f\u76f8\u5173\u7684\uff0c\u7531\u4e8eB\u6267\u884c\u4ec0\u4e48\u6837\u7684\u903b\u8f91\u4ee5\u53ca\u4ec0\u4e48\u65f6\u5019\u6267\u884c\u7531A\u6765\u63a7\u5236\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u5982\u679cB\u5bf9\u4e8e\u67d0\u4e00\u7c7b\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c\u6709\u5176\u4ed6\u7684\u4e00\u4e9b\u903b\u8f91\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u53d7\u5176\u4ed6\u4e00\u4e9b\u65b0\u52a0\u5165\u7684\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u5b83\u5f88\u96be\u901a\u8fc7\u5728\u4e0d\u5f71\u54cdA\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u6216\u6269\u5c55\u3002\u8fd9\u79cd\u6269\u5c55\u4e0d\u4ec5\u4ec5\u662f\u8981\u6c42A\u4fee\u6539\u63a5\u53e3\u90a3\u4e48\u7b80\u5355\uff0c\u6709\u65f6\u5019\u6d89\u53ca\u4f1a\u878d\u5408\u66f4\u591a\u7684\u903b\u8f91\uff0c\u8fd9\u6837\u8c03\u6574\u8d77\u6765\u7684\u4ee3\u4ef7\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u6211\u4eec\u540e\u9762\u4f1a\u770b\u5230\uff0c\u5982\u679c\u91c7\u7528\u54cd\u5e94\u5f0f\uff0cA\u7684\u5f71\u54cd\u5c31\u53ea\u662f\u4f1a\u62bd\u8c61\u4e3a\u4e00\u4e2a\u56e0\u7d20\uff0c\u800cB\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u5404\u79cd\u56e0\u7d20\u4e4b\u540e\u505a\u51fa\u771f\u6b63\u7684\u54cd\u5e94\u3002\u5373\u4f7f\u54cd\u5e94\u7684\u903b\u8f91\u6216\u8005\u89c4\u5219\u53d8\u4e86\uff0c\u4f46\u662f\u53ea\u8981A\u8fd9\u4e2a\u56e0\u7d20\u672c\u8eab\u7684\u903b\u8f91\u6ca1\u53d8\uff0cA\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u4efb\u4f55\u4fee\u6539\u3002\u8fd9\u6837\u7684\u65b9\u5f0f\u5c31\u4f7f\u5f97B\u5f88\u5bb9\u6613\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u4e0e\u6269\u5c55\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898\uff0c\u5bf9\u4e2a\u5bf9\u8c61\u5bf9B\u7684\u8c03\u7528\u5b8c\u5168\u4e0d\u4f1a\u4e5f\u4e0d\u53ef\u80fd\u8003\u8651\u5230B\u7684\u72b6\u6001\uff0c\u4f8b\u5982\u662f\u5426\u6b63\u5728\u88ab\u5176\u4ed6\u7684\u8fdb\u7a0b\u8bbf\u95ee\u3002\u8fd9\u4e2d\u60c5\u51b5\u5c31\u5f88\u5bb9\u6613\u5bfc\u81f4\u5171\u4eab\u7ade\u4e89\uff0c\u800c\u4e14\u9664\u4e86\u52a0\u9501\u51e0\u4e4e\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002\u800c\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u5b83\u4eec\u901a\u5e38\u53ef\u4ee5\u901a\u8fc7\u5148\u6536\u96c6\u5404\u79cd\u5f71\u54cd\u56e0\u7d20\uff0c\u7136\u540e\u8fdb\u884c\u7edf\u4e00\u7684\u6d88\u606f\u5904\u7406\uff0c\u800c\u907f\u514d\u4efb\u4f55\u5e76\u53d1\u7684\u95ee\u9898\u3002\u56e0\u4e3a\u5185\u90e8\u7684\u6d88\u606f\u59cb\u7ec8\u662f\u4e32\u884c\u7684\u65b9\u5f0f\u6267\u884c\u3002"),(0,n.kt)("h4",{id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94"},"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94"),(0,n.kt)("p",null,"\u73b0\u4ee3\u7f16\u7a0b\u7684\u4e00\u4e9b\u673a\u5236\u5f80\u5f80\u662f\u53d7\u786c\u4ef6\u67b6\u6784\uff0c\u4ee5\u53ca\u7f16\u7a0b\u8bed\u8a00\u7f16\u8bd1\u8fc7\u7a0b\u7684\u4e00\u4e9b\u9650\u5236\u6216\u5f71\u54cd\uff0c\u5b83\u4eec\u539f\u751f\u5e76\u4e0d\u662f\u4e3a\u4e86\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u4ea4\u4e92\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u9996\u5148\u6765\u89c2\u5bdf\u4e00\u4e0b\u771f\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u6d3b\u52a8\u4ea4\u4e92\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u8003\u8651\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4eba\u7c7b\u6d3b\u52a8\uff0c\u6bd4\u5982\u6cd5\u5f8b\uff0c\u56fd\u5bb6\u4f1a\u6307\u5b9a\u4e00\u4e9b\u6cd5\u5f8b\u4ee5\u7ea6\u675f\u4eba\u4eec\u7684\u4e00\u4e9b\u884c\u4e3a\uff0c\u4ece\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u89d2\u5ea6\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u7f16\u5199\u4e00\u4e2a\u6cd5\u5f8b\u673a\u6784\u7684\u5bf9\u8c61A\uff0c\u7136\u540e\u7528B\u6765\u8868\u793a\u4eba\u7c7b\uff0cA\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528B\u7684\u5c5e\u6027\u6216\u8005\u65b9\u6cd5\u8981\u6c42B\u4e0d\u80fd\u8fdd\u53cd\u67d0\u4e2a\u6cd5\u5f8b\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5728\u4eba\u7c7b\u6d3b\u52a8\u4e2d\uff0c\u4eba\u662f\u601d\u7ef4\u7684\u4e3b\u4f53\uff0c\u4eba\u7c7b\u7684\u6574\u4e2a\u6d3b\u52a8\u51e0\u4e4e\u90fd\u662f\u7531\u4f17\u591a\u4e2a\u4eba\u610f\u5fd7\u51b3\u5b9a\u7684\u7ed3\u679c\u3002\u867d\u7136\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5728\u5b8f\u89c2\u7684\u89d2\u5ea6\u770b\uff0c\u4e2a\u4eba\u7684\u610f\u5fd7\u662f\u53d7\u4e00\u5b9a\u7684\u7ea6\u675f\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5e76\u4e0d\u80fd\u7531\u6b64\u5c31\u6309\u7167\u4e3b\u52a8\u5f0f\u7684\u65b9\u5f0f\u5bf9\u6574\u4e2a\u4eba\u7c7b\u6d3b\u52a8\u8fdb\u884c\u7f16\u7a0b\u3002\u9664\u4e86\u8fd9\u79cd\u8d1f\u9762\u7684\u4e8b\u5b9c\uff0c\u5373\u4f7f\u662f\u6b63\u9762\u7684\u6d3b\u52a8\u4e5f\u662f\u5982\u6b64\uff0c\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u7ed9\u522b\u4eba\u5f88\u591a\u5fe0\u544a\u6216\u8005\u5efa\u8bae\uff0c\u4f46\u5373\u4f7f\u8fd9\u4e9b\u5fe0\u544a\u6216\u8005\u5efa\u8bae\u771f\u6b63\u662f\u88ab\u8bc1\u660e\u6709\u4ef7\u503c\u7684\uff0c\u5176\u4ed6\u4eba\u4ecd\u7136\u6709\u53ef\u80fd\u56e0\u4e3a\u67d0\u4e9b\u56e0\u7d20\u800c\u9009\u62e9\u4e0d\u53bb\u91c7\u7eb3\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Brain-to-Brain-Communication",src:l(8369).Z,width:"850",height:"450"})),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u6b63\u662f\u4e00\u79cd\u54cd\u5e94\u5f0f\u7684\u4f53\u73b0\u3002\u54cd\u5e94\u5f0f\u7f16\u7a0b\u662f\u4ee5\u63a5\u53d7\u4fe1\u606f\u8005\u4e3a\u4e2d\u5fc3\uff0c\u5b83\u5047\u8bbe\u63a5\u53d7\u4fe1\u606f\u7684\u5bf9\u8c61\u62e5\u6709\u81ea\u6211\u610f\u5fd7\uff0c\u5b83\u5e94\u8be5\u7531\u81ea\u5df1\u6765\u51b3\u5b9a\u5e94\u8be5\u600e\u6837\u57fa\u4e8e\u5916\u90e8\u7684\u4fe1\u606f\u8fdb\u884c\u51b3\u7b56\u548c\u54cd\u5e94\u3002\u6b63\u662f\u8fd9\u79cd\u81ea\u6211\u610f\u5fd7\uff0c\u4ece\u7a0b\u5e8f\u7684\u89d2\u5ea6\u4e0d\u5149\u4f7f\u5176\u66f4\u5177\u6709\u6269\u5c55\u6027\uff0c\u4ece\u8fdb\u5316\u7684\u89d2\u5ea6\uff0c\u8fd9\u6837\u7684\u7cfb\u7edf\u80fd\u591f\u4ea7\u751f\u51fa\u66f4\u52a0\u4e30\u5bcc\u800c\u521b\u65b0\u7684\u6210\u679c\u3002\u800c\u5982\u679c\u662f\u4e3b\u52a8\u5f0f\u7f16\u7a0b\uff0c\u5728\u5f88\u591a\u89c4\u5219\u51e0\u4e4e\u5c31\u662f\u4e00\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u4e2a\u7cfb\u7edf\u5f88\u96be\u5177\u5907\u6709\u8fdb\u5316\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u518d\u6765\u5206\u6790\u4e00\u4e9b\u5927\u81ea\u7136\u6d3b\u52a8\uff0c\u5c3d\u7ba1\u5b83\u4eec\u770b\u8d77\u6765\u7269\u7406\u5ba2\u89c2\u89c4\u5f8b\u662f\u56fa\u5b9a\u7684\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u6765\u5904\u7406\u6240\u6709\u4e8b\u60c5\u3002\u4f46\u5b9e\u9645\u4e0a\u4efb\u4f55\u4e8b\u60c5\u90fd\u662f\u53d7\u5230\u5404\u79cd\u590d\u6742\u73af\u5883\u56e0\u7d20\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u7269\u4f53\u4ece\u7a7a\u4e2d\u6389\u4e0b\u6765\uff0c\u53d6\u51b3\u4e8e\u5730\u9762\u662f\u6c34\u3001\u6ce5\u571f\u3001\u6df7\u6ce5\u571f\u3001\u706b\u7b49\u5404\u79cd\u60c5\u51b5\uff0c\u5176\u7ed3\u679c\u4f1a\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\uff0c\u4efb\u4f55\u4e8b\u60c5\u7684\u5f71\u54cd\uff0c\u90fd\u65e0\u6cd5\u6709\u786e\u5b9a\u6027\u7684\u56e0\u7d20\uff0c\u5982\u679c\u4e00\u4e2a\u7269\u4f53\u7684\u67d0\u4e2a\u7ed3\u679c\u9700\u8981\u6709\u5916\u90e8\u67d0\u4e2a\u5bf9\u8c61\u6765\u51b3\u5b9a\uff0c\u8fd9\u901a\u5e38\u662f\u4e0d\u5408\u9002\u7684\u3002\u65e2\u4e0d\u5177\u5907\u6269\u5c55\u6027\uff0c\u540c\u65f6\u4e5f\u4e0d\u80fd\u4fdd\u8bc1\u6b63\u786e\u6027\u3002\u53ea\u6709\u7269\u4f53\u81ea\u8eab\uff0c\u5b83\u4efb\u4f55\u65f6\u523b\u90fd\u80fd\u591f\u611f\u77e5\u81ea\u5df1\u7684\u73af\u5883\uff0c\u53ea\u6709\u57fa\u4e8e\u6240\u6709\u73af\u5883\u56e0\u7d20\u7684\u7efc\u5408\u6027\u5224\u65ad\uff0c\u624d\u80fd\u66f4\u597d\u5730\u51b3\u5b9a\u5176\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\u4efb\u4f55\u4e8b\u7269\u65f6\u95f4\u7684\u4ea4\u4e92\uff0c\u51e0\u4e4e\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5f53\u7136\u4ece\u7f16\u7a0b\u7684\u89d2\u5ea6\uff0c\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e5f\u5b58\u5728\u4e00\u5b9a\u7684\u95ee\u9898\uff0c\u4e3b\u8981\u662f\u4ee5\u4e0b\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53cd\u9988\u673a\u5236 ")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6027\u80fd\u95ee\u9898\uff0c\u4f8b\u5982\u6709\u591a\u4e2a\u7c7b\u578bB\u7684\u5bf9\u8c61\u5217\u8868\uff0c\u539f\u672cA\u53ea\u9700\u8981\u904d\u5386\u4ee5\u4e0b\u961f\u5217B\uff0c\u4fee\u6539\u4ee5\u4e0b\u5c5e\u6027\u5373\u53ef\uff0c\u4f46\u662f\u73b0\u5728\u53ef\u80fd\u9700\u8981\u7ed9\u6bcf\u4e2a\u5bf9\u8c61B\u6dfb\u52a0\u4e00\u4e2a\u65b9\u6cd5\uff0c\u7136\u540e\u7531B\u5206\u522b\u6267\u884c\u4e00\u4e0b\u65b9\u6cd5\u3002\u5c3d\u7ba1\u770b\u8d77\u6765\u4f1a\u5b58\u5728\u6027\u80fd\u95ee\u9898\uff0c\u4f46\u662f\u5bf9\u4e8e\u76f8\u540c\u7684\u903b\u8f91\uff0c\u4e24\u79cd\u65b9\u5f0f\u8c03\u7528\u7684\u6838\u5fc3\u4ee3\u7801\u51e0\u4e4e\u662f\u4e00\u6837\u7684\uff0c\u5269\u4e0b\u5c31\u662f\u4e0d\u540c\u673a\u5236\u5728\u7ec4\u7ec7\u6570\u636e\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u79cd\u673a\u5236\u4e0a\u7684\u5dee\u5f02\u76f8\u5bf9\u4e8e\u6838\u5fc3\u4ee3\u7801\u6765\u8bb2\uff0c\u51e0\u4e4e\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u3002\u672c\u8d28\u4e0a\u4e24\u79cd\u65b9\u6cd5\u7684\u6027\u80fd\u5dee\u5f02\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u95ee\u9898\u5c5e\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7279\u6709\u7684\u4e00\u4e2a\u95ee\u9898\uff0c\u6bd4\u5982\u5982\u679cA\u9700\u8981\u6263\u6389B\u7684\u67d0\u4e2a\u6570\u503c\u53d8\u91cf\uff0c\u5982\u679c\u6574\u4e2a\u903b\u8f91\u6b63\u5e38\u6267\u884c\u5f53\u7136\u6ca1\u95ee\u9898\u3002\u4f46\u662f\u8bbe\u60f3\u5982\u679cB\u7684\u8fd9\u4e2a\u8d44\u6e90\u4e0d\u591f\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u8fd9\u4e2a\u64cd\u4f5c\u4e0d\u5e94\u8be5\u6267\u884c\u3002\u5982\u679c\u662f\u91c7\u7528\u4e3b\u52a8\u5f0f\uff0c\u7531\u4e8eA\u662f\u53ef\u4ee5\u8bbf\u95eeB\u7684\u6210\u5458\u7684\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5224\u65ad\u662f\u5426\u53ef\u4ee5\u6267\u884c\u8ba1\u7b97\uff0c\u8fd9\u5c31\u7b80\u5316\u4e86\u6574\u4e2a\u95ee\u9898\u3002\u5f53\u7136\u5176\u4ee3\u4ef7\u662fB\u4e0d\u5f97\u4e0d\u66b4\u9732\u6570\u636e\u8bbf\u95ee\u6743\u9650\u7ed9\u5916\u90e8\uff0c\u9020\u6210\u5de8\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u5e0c\u671b\u6240\u6709\u6d89\u53ca\u53cc\u65b9\u8d44\u6e90\u53d8\u5316\u7684\u8ba1\u7b97\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u4e2d\u6267\u884c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u6d89\u53ca\u4e24\u4e2a\u5bf9\u8c61\uff0c\u4e24\u4e2a\u5bf9\u8c61\u90fd\u643a\u5e26\u5404\u81ea\u76f8\u5173\u7684\u5c5e\u6027\u6570\u636e\uff0c\u7136\u540e\u901a\u8fc7\u4e00\u4e9b\u7279\u6b8a\u7684\u4ea4\u6613\u51fd\u6570\u6765\u83b7\u5f97\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027"},"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027"),(0,n.kt)("p",null,"\u5728\u4e86\u89e3\u54cd\u5e94\u673a\u5236\u7684\u65b9\u5f0f\u4e4b\u524d\uff0c\u6211\u4eec\u8981\u5148\u4e86\u89e3\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u7279\u6027\uff0c\u5373\u4e8b\u4ef6\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e3b\u8981\u901a\u8fc7\u4e8b\u4ef6\u6d88\u606f\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u8fd9\u901a\u5e38\u7531\u4e24\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u6309\u7c7b\u578b\u5efa\u7acb\u5168\u5c40\u7684\u4e8b\u4ef6\u5217\u8868\uff0c\u7136\u540e\u54cd\u5e94\u4e8b\u4ef6\u7684\u5bf9\u8c61\u5206\u522b\u4ece\u8fd9\u4e2a\u5217\u8868\u53bb\u83b7\u53d6\u4e8b\u4ef6\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u79cd\u662f\u7c7b\u4f3cErlang\u7684\u673a\u5236\uff0c\u7cfb\u7edf\u4f1a\u5c06\u8fd9\u4e9b\u4e8b\u4ef6\u6d88\u606f\u5206\u53d1\u5230\u5177\u4f53\u6bcf\u4e2a\u8fdb\u7a0b\u5185\u90e8\uff0c\u5f62\u6210\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5c40\u90e8\u6d88\u606f\u5217\u8868")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u4e0a\u8ff0\u54ea\u79cd\u5f62\u5f0f\uff0c\u5b83\u4eec\u7684\u4e00\u4e2a\u76f8\u540c\u70b9\u90fd\u662f\uff0c\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\u53ea\u662f\u4e34\u65f6\u5b58\u5728\uff0c\u4e00\u65e6\u7cfb\u7edf\u6ce8\u518c\u7684\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\uff0c\u6d88\u606f\u5c31\u4f1a\u88ab\u4e22\u5f03\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u7684\u6d88\u606f\u901a\u77e5\u673a\u5236\u4e0d\u662f\u6309\u7167\u4e0a\u8ff0\u4e24\u79cd\u4e2d\u7684\u4efb\u610f\u4e00\u79cd\u7ec4\u7ec7\u7684\uff0c\u800c\u662f\u6309\u7167\u666e\u901a\u7684\u51fd\u6570\u4f20\u9012\u673a\u5236\uff0c\u5e76\u4e14\u8fd9\u4e2a\u51fd\u6570\u4f20\u9012\u662f\u6bcf\u5e27\u90fd\u6267\u884c\u7684\uff0c\u6240\u4ee5\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u4e4b\u540e\uff0c\u53d1\u9001\u4e00\u6761\u6263\u9664HP\u6570\u91cf\u4e3a3\u7684\u6d88\u606f\uff0c\u54cd\u5e94\u8005\u5728\u6263\u96643\u4e2aHP\u4e4b\u540e\uff0c\u8fd9\u4e2a\u503c\u53ef\u80fd\u4f1a\u5728\u4e0b\u4e00\u5e27\u88ab\u4fdd\u5b58\uff0c\u9664\u975e\u5f00\u53d1\u8005\u4fdd\u8bc1\u53d1\u51fa\u6d88\u606f\u7684\u7ec4\u4ef6\u6bcf\u5e27\u603b\u662f\u6267\u884c\u3002\u4f46\u662fRealityIS\u7684Change-Driven\u673a\u5236\u4f7f\u5f97\u6709\u53ef\u80fd\u7ed5\u8fc7\u8fd9\u4e2a\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u901a\u8fc7\u5bf9\u5c5e\u6027\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u6027\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Message]\nfloat HP\n")),(0,n.kt)("p",null,"\u5982\u679c\u662fMessage\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4fdd\u8bc1\u5728\u6bcf\u5e27\u7684\u6240\u6709\u7ec4\u4ef6\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\uff0c\u5c06\u5176\u6e05\u96f6\u3002",(0,n.kt)("strong",{parentName:"p"},"\u4f46\u8fd9\u53ef\u80fd\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\u5f62\u5f0f\uff0c\u8fd9\u4e00\u5757\u8fd8\u8981\u8fdb\u4e00\u6b65\u601d\u8003"),"\u3002"),(0,n.kt)("h4",{id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"},"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53cd\u9988\u7684\u95ee\u9898\uff0c\u4f20\u7edf\u7684\u89e3\u51b3\u65b9\u6848\u662f\u5f80\u56de\u53d1\u9001\u786e\u8ba4\u6d88\u606f\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u5b9a\u7684\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5206\u6790\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u5728\u5927\u591a\u6570\u8bf7\u4e0b\u5b83\u4eec\u662f\u53ef\u4ee5\u6b63\u786e\u6267\u884c\u7684\uff0c\u53ea\u6709\u5728\u5c11\u6570\u6781\u7aef\u60c5\u51b5\u4e0b\u7a0b\u5e8f\u4f1a\u51fa\u73b0\u5f02\u5e38\uff0c\u4f8b\u5982\u786c\u4ef6\u95ee\u9898\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6211\u4eec\u5374\u8981\u4e3a\u4e86\u9632\u6b62\u8fd9\u79cd\u95ee\u9898\uff0c\u800c\u5bf9\u6240\u6709\u6d88\u606f\u5904\u7406\u4f7f\u7528\u4e00\u79cd\u53cd\u9988\u7684\u673a\u5236\u3002\u53cd\u9988\u6d89\u53ca\u5230\u5f02\u6b65\uff0c\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u901a\u4fe1\u90fd\u8981\u7ef4\u62a4\u8fd9\u79cd\u5f02\u6b65\u7684\u786e\u8ba4\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5230\u6e38\u620f\u7684\u4e00\u4e9b\u7279\u5f81\uff0c\u6e38\u620f\u4e2d\u5927\u91cf\u5185\u5b58\u5f53\u4e2d\u9700\u8981\u8bb0\u5f55\u548c\u8ba1\u7b97\u7684\u4e00\u4e9b\u5bf9\u8c61\u4e0d\u4e00\u5b9a\u90fd\u9700\u8981\u9700\u8981\u5b58\u6863\u7684\uff0c\u5982\u679c\u628a\u6240\u6709\u8fd9\u4e9b\u6570\u636e\u5b58\u6863\uff0c\u4f1a\u5bfc\u81f4\u5f88\u5927\u7684\u95ee\u9898\uff0c\u5373\u7a0b\u5e8f\u5728\u6062\u590d\u7684\u65f6\u5019\u6839\u672c\u65e0\u6cd5\u7cbe\u786e\u6062\u590d\u5230\u67d0\u4e9b\u4e2d\u95f4\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6539\u53d8\u4e86\u4e00\u79cd\u7b56\u7565\uff0c\u5b83\u53ea\u5bf9\u67d0\u4e9b\u5173\u952e\u65f6\u95f4\u70b9\u8fdb\u884c\u5b58\u6863\uff0c\u800c\u5728\u8fd9\u4e9b\u5b58\u6863\u8282\u70b9\u4e4b\u95f4\uff0c\u4e00\u5207\u6570\u636e\u90fd\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\u3002\u6240\u4ee5\u5f53\u6709\u5f02\u5e38\u53d1\u751f\u65f6\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6062\u590d\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u8282\u70b9\u5373\u53ef\u3002"),(0,n.kt)("h3",{id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"},"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability",src:l(8934).Z,width:"2556",height:"1406"})),(0,n.kt)("h4",{id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528"},"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability-1",src:l(4917).Z,width:"2530",height:"1372"})),(0,n.kt)("h2",{id:"210-gpu-vm"},"2.10 GPU VM"),(0,n.kt)("h2",{id:"211-render-vm"},"2.11 Render VM"),(0,n.kt)("h2",{id:"212-realityis-runtime"},"2.12 RealityIS Runtime"),(0,n.kt)("p",null,"RealityIS Runtime\u53ef\u4ee5\u7ed9\u7b2c\u4e09\u65b9\u4f7f\u7528\uff0c\u901a\u8fc7\u96c6\u6210\u5230\u7b2c\u4e09\u65b9App\u5f62\u6210\u72ec\u7acb\u5206\u53d1\u7684App\u5f62\u6001\u3002RealityIS Runtime\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7aef\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u6e32\u67d3\u4ee5\u53ca\u8d44\u6e90\u52a0\u8f7d\u76f8\u5173\u7684\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u4e91\u7aef\u7684\u5206\u5e03\u5f0f\u80fd\u529b")),(0,n.kt)("p",null,"\u57fa\u4e8e\u6b64\uff0c\u5176\u4e2d\u7684\u4e00\u4e9b\u53d8\u5316\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7aef\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u96c6\u6210\u81ea\u5df1\u7684C++\u5e93\uff0c\u53ef\u4ee5\u6269\u5c55\u5e94\u7528\u7684\u80fd\u529b\uff0c\u5e76\u4e0e\u672c\u5730App\u5176\u4ed6\u6a21\u5757\u8fdb\u884c\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e91\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u81ea\u5df1\u7684\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7C++\u6269\u5c55\u80fd\u529b")),(0,n.kt)("p",null,"\u4e0d\u53d8\u7684\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Creation\u7684\u6258\u7ba1\u5b58\u50a8\u662f\u4e0d\u53d8\u7684\uff0c\u8fd9\u4e2a\u53ea\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u8fd0\u884c\u65f6\u7684\u5b9e\u9645\u6570\u636e\u90fd\u662f\u5b58\u50a8\u5728\u81ea\u5b9a\u4e49\u670d\u52a1\u5668\u4e2d\u7684"),(0,n.kt)("li",{parentName:"ul"},"RealityID\u662f\u4e0d\u53d8\u7684\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6ce8\u518cRealityID\uff0c\u8fdb\u884c\u7edf\u4e00\u5b89\u5168\u9a8c\u8bc1\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u8ddf\u81ea\u5df1\u6570\u636e\u5e93\u7684\u8bb0\u5f55\u8fdb\u884c\u6620\u5c04")),(0,n.kt)("p",null,"\u4ece\u4ef7\u503c\u4e0a\u770b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7edf\u4e00\u4e86\u5e94\u7528\u5f00\u53d1\u7684\u65b9\u5f0f\uff0c\u7b80\u5316\u4e86\u90e8\u7f72"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528C++\u5bf9\u7cfb\u7edf\u8fdb\u884c\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u628aRealityIS\u5f53\u505a\u4e00\u79cd\u9762\u5411\u9886\u57df\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u3001\u7edf\u4e00\u3001\u7b80\u5355\u7f16\u7a0b\u6216\u8005\u81ea\u5b9a\u4e49\u7684\u673a\u5236")),(0,n.kt)("h2",{id:"213-\u6027\u80fd\u56e0\u7d20"},"2.13 \u6027\u80fd\u56e0\u7d20"),(0,n.kt)("h3",{id:"2131-\u5c40\u90e8\u6027\u4e27\u5931"},"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931"),(0,n.kt)("p",null,"\u8fc7\u53bb\u5f88\u591a\u51fd\u6570\u5185\u90e8\u7684\u4e34\u65f6\u53d8\u91cf\uff0c\u5176\u751f\u547d\u5468\u671f\u672c\u6765\u53ea\u5305\u542b\u51fd\u6570\u5185\uff0c\u7b49\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u4e4b\u540e\u5c31\u4f1a\u91ca\u653e\uff0c\u4f46\u662f\u7531\u4e8e\u9700\u8981\u5728\u4e0a\u4e0b\u6e38\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u53c2\u6570\uff0c\u5b83\u6709\u53ef\u80fd\u4f1a\u5347\u7ea7\u4e3a\u5b9e\u4f53\u53d8\u91cf\uff0c\u8fd9\u5c31\u5bfc\u81f4\u5176\u5b58\u50a8\u65f6\u95f4\u6bd4\u8f83\u957f\uff0c\u5185\u5b58\u5360\u7528\u66f4\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u5c40\u90e8\u6027\u4e27\u5931")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u4f20\u7edfOOP\u4e2d\u7684\u79c1\u6709\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u800c\u8a00\uff0c\u8fd9\u4e9b\u53d8\u91cf\u672c\u8eab\u5c31\u662f\u6301\u4e45\u5b58\u50a8\u7684\uff0c\u6240\u4ee5\u8fd9\u90e8\u5206\u5f71\u54cd\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u4e3b\u8981\u662f\u5927\u90e8\u5206\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u4f7f\u7528\uff0c\u8fd9\u91cc\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5728\u4f20\u7edf\u4e2d\u5355\u4e2a\u51fd\u6570\u53ef\u4ee5\u72ec\u7acb\u5b8c\u6210\u7684\u4e8b\u60c5\uff0c\u5728RealityIS\u4e2d\u4e5f\u662f\u72ec\u7acb\u5b8c\u6210\uff0c\u90a3\u4e48\u4e24\u8005\u662f\u7b49\u6548\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f20\u7edfOOP\u4e2d\u7684\u4e00\u4e2a\u590d\u6742\u51fd\u6570\u9700\u8981\u62c6\u6210\u591a\u4e2a\u51fd\u6570\uff0c\u8fd9\u79cd\u60c5\u51b5\u5728\u4f20\u7edfOOP\u4e2d\u5c3d\u7ba1\u51fd\u6570\u7684\u6267\u884c\u65f6\u95f4\u8fb9\u957f\uff0c\u4f46\u662f\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u5176\u5b58\u50a8\u65f6\u95f4\u6700\u591a\u4e5f\u53ea\u5728\u51fd\u6570\u6267\u884c\u671f\u95f4\uff1b\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u4e0d\u7ba1\u5d4c\u5957\u7ed3\u6784\u5982\u4f55\uff0c\u4e5f\u80fd\u4fdd\u8bc1\u53ea\u5b58\u50a8\u4e8e\u9700\u8981\u7684\u5d4c\u5957\u671f\u95f4\uff0c\u8ddfOOP\u57fa\u672c\u4e0a\u7b49\u4ef7\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u88ab\u6253\u4e71\u7684\uff0c\u65e0\u6cd5\u4fdd\u8bc1\u76f8\u5173\u7684\u4e24\u4e2a\u903b\u8f91\u4e00\u5b9a\u662f\u6309\u7d27\u90bb\u6267\u884c\u7684\uff0c\u6781\u7aef\u60c5\u51b5\u4e0b\u53ef\u80fd\u4e2d\u95f4\u9694\u4e86\u5f88\u591a\u65e0\u5173\u7684\u7ec4\u4ef6\uff0c\u751a\u81f3\u53ef\u80fd\u540e\u7eed\u90fd\u4e0d\u4f1a\u518d\u88ab\u4f7f\u7528\uff0c\u4f8b\u5982\u540e\u7eed\u7684\u6761\u4ef6\u5224\u65ad\u5bfc\u81f4\u65e0\u6cd5\u8fdb\u884c\u76f8\u5e94\u7ec4\u4ef6\u5206\u652f\uff0c\u56e0\u6b64\u5f88\u96be\u9884\u6d4b\u5176\u53d8\u91cf\u7684\u5b58\u7eed\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u4f46\u597d\u5904\u662f\u5b83\u53ea\u5206\u914d\u4e00\u6b21\uff0c\u907f\u514d\u4e0b\u6b21\u5bf9\u8be5\u53d8\u91cf\u7684\u91cd\u590d\u6784\u9020\u3002\u4ee5\u5b58\u50a8\u6362\u53d6\u8ba1\u7b97\uff08\u8fd9\u91cc\u4e3b\u8981\u6307\u5bf9\u8c61\u7684\u5206\u914d\u548c\u521d\u59cb\u5316\uff0c\u9500\u6bc1\u7b49\u64cd\u4f5c\uff09\u7684\u4e00\u79cd\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u4e9b\u53d8\u91cf\u8ddf\u5783\u573e\u56de\u6536\u4e2d\u7684\u53d8\u91cf\u8fd8\u662f\u4e0d\u4e00\u6837\uff0c\u81f3\u5c11\u8fd9\u4e9b\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u662f\u8ddf\u5b9e\u4f53\u5bf9\u8c61\u4e00\u81f4\u7684\uff0c\u5b83\u4eec\u4f1a\u968f\u7740\u5b9e\u4f53\u5bf9\u8c61\u7684\u9500\u6bc1\u800c\u81ea\u52a8\u56de\u6536\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u4f18\u5316\u65b9\u6cd5\u662f\uff0c\u8fd9\u4e9b\u6ca1\u6709\u6807\u8bb0\u6c38\u4e45\u5b58\u50a8\u7684\u3001\u4e34\u65f6\u7684\u53d8\u91cf\uff0c\u5728\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u5168\u90e8\u9500\u6bc1\uff0c\u8fd9\u6837\u81f3\u5c11\u4e0b\u4e00\u5e27\u8fd8\u6ca1\u6709\u521d\u59cb\u5316 \u8fd9\u4e2a\u53d8\u91cf\u7684\u65f6\u5019\u5185\u5b58\u5360\u7528\u662f\u4e0d\u9700\u8981\u7684\uff0c\u4f46\u662f\u8fd9\u6837\u89e3\u51b3\u4e0d\u4e86\u6839\u672c\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u5e27\u7ed3\u675f\u7684\u65f6\u5019\u5185\u5b58\u8fd8\u662f\u4f1a\u5f88\u9ad8\uff0c\u800c\u8fd9\u4e9b\u5f62\u6210\u4e00\u4e2a\u9608\u503c\u8fd8\u662f\u4f1a\u9650\u5236\u5355\u53f0\u670d\u52a1\u5668\u7684\u80fd\u529b\uff0c\u800c\u4e14\u8fd9\u79cd\u4f18\u5316\u5e26\u6765\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6700\u597d\u7684\u6307\u5bfc\u662f")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u7684\u53d8\u91cf\u4e0d\u6d89\u53ca\u8ddf\u5176\u4ed6\u5bf9\u8c61\u901a\u4fe1\uff0c\u5219\u6700\u597d\u6240\u6709\u6d89\u53ca\u7684\u79c1\u6709\u64cd\u4f5c\u90fd\u96c6\u4e2d\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u76f4\u5230\u8f93\u51fa\u5168\u5c40\u5c5e\u6027\u672a\u77e5\uff0c\u8fd9\u6837\u5185\u90e8\u7684\u53d8\u91cf\u90fd\u662f\u4e34\u65f6\u53d8\u91cf\uff0c\u8ddfOOP\u4e00\u6837\u7684\u6548\u679c\u3002\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u9700\u8981\u901a\u4fe1\uff0c\u90a3\u4e48\u8fd9\u76f8\u5f53\u4e8eOOP\u4e2d\u7684\u5bf9\u8c61\u79c1\u6709\u53d8\u91cf\uff0c\u672c\u8eab\u4e5f\u662f\u4e00\u76f4\u5b58\u50a8\u7684\uff0c\u8fd9\u4e5f\u662f\u7b49\u6548\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6709\u70b9\u8fdd\u80cc\u7ec4\u5408\u7684\u601d\u8def\uff0c\u4f46\u662f\u6211\u4eec\u6240\u63d0\u5021\u7684\u7ec4\u5408\u601d\u60f3\uff0c\u4e5f\u5e76\u4e0d\u662f\u8bf4\u628a\u6240\u6709\u51fd\u6570\u62c6\u6210\u5c0f\u51fd\u6570\uff0c\u7ec4\u5408\u7684\u662f\u7ed3\u6784\u6027\u7684\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u662f\u5bf9\u4e8e\u5df2\u7ecf\u7f16\u8f91\u597d\u7684\u5bf9\u8c61\uff0c\u53ef\u4ee5\u5bf9\u7ec4\u5408\u8fdb\u884c\u5408\u6279\u64cd\u4f5c\uff0c\u5373\u5c06\u90a3\u4e9b\u7ecf\u8fc7\u7ec4\u5408\u5f62\u6210\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5982\u679c\u4ed6\u4eec\u4e2d\u95f4\u5904\u7406\u7684\u90fd\u662f\u79c1\u6709\u53d8\u91cf\uff0c\u5e76\u4e14\u6ca1\u6709\u5916\u90e8\u4ea4\u4e92\uff0c\u53ef\u4ee5\u5408\u6279\u6210\u4e00\u4e2a\u51fd\u6570\u7684\u6548\u679c\uff0c\u5f53\u7136\u8fd9\u53ef\u80fd\u9700\u8981\u5728\u51fd\u6570\u6d3e\u53d1\u5c42\u505a\u4e00\u70b9\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5e26\u6765\u8fd0\u884c\u65f6\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u4f46\u8003\u8651\u5230\u5206\u5e03\u5f0f\u7684\u7ed3\u679c\uff0c\u5355\u53f0\u673a\u5668\u4e0d\u4f1a\u6210\u4e3a\u6027\u80fd\u74f6\u9888\uff0c\u800c\u4e14\u73b0\u4ee3\u8ba1\u7b97\u673a\u8ba1\u7b97\u662f\u74f6\u9888\uff0c\u800c\u5185\u5b58\u5e76\u4e0d\u662f\u5927\u7684\u74f6\u9888\uff0c\u9664\u975e\u90a3\u79cd\u6570\u636e\u7ed3\u6784\u7279\u522b\u5927\u4e14\u4e0d\u6613\u4e8e\u62c6\u5206\u7684\u573a\u666f\uff0c\u603b\u4f53\u6765\u8bb2\u95ee\u9898\u4e0d\u5927\u3002"),(0,n.kt)("h3",{id:"2132-\u65e0\u6548\u8ba1\u7b97"},"2.13.2 \u65e0\u6548\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u6bd4\u6e38\u620f\u7a0b\u5e8f\u7684\u6027\u80fd\u9ad8\uff0c\u662f\u56e0\u4e3a\u5e94\u7528\u7a0b\u5e8f\u5927\u591a\u91c7\u7528\u4e8b\u4ef6\u9a71\u52a8\u7684\u673a\u5236\uff0c\u4e3b\u5faa\u73af\u53ea\u6709\u4e00\u4e2a\uff0c\u5f53\u5f53\u524d\u4efb\u52a1\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u5b83\u4f1a\u5728\u67d0\u4e2a\u5730\u65b9\u5904\u4e8e\u7b49\u5f85\u72b6\u6001\uff0c\u6216\u8005\u5c31\u662f\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u6ca1\u6709\u518d\u9700\u8981\u6267\u884c\u7684\u4efb\u52a1\u4e86\u3002\u5f53\u7cfb\u7edf\u68c0\u6d4b\u5230\u67d0\u4e2a\u4e8b\u4ef6\u65f6\uff0c\u4e00\u822c\u662f\u7528\u6237\u8f93\u5165\u4e8b\u4ef6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u89e6\u53d1\u4ee3\u7801\u7684\u6267\u884c\uff0c\u4e3a\u6b64\uff0c\u4e00\u822c\u7684\u65b9\u5f0f\u662f\u5728main\u4e2d\u7ef4\u6301\u4e00\u4e2a\u5c0f\u5faa\u73af\u6765\u4e13\u95e8\u68c0\u6d4b\u7cfb\u7edf\u4e8b\u4ef6\uff0c\u4ee5\u4fbf\u4e8e\u63a5\u6536\u5230\u7cfb\u7edf\u4e8b\u4ef6\u7684\u65f6\u5019\u53ef\u4ee5\u6b63\u786e\u89e6\u53d1\u6267\u884c\u903b\u8f91\u7684\u4ee3\u7801\uff0c\u56e0\u4e3a\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u6307\u4ee4\u5df2\u7ecf\u505c\u6b62\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u7ed3\u6784\u662f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\u7684\uff0c\u6240\u4ee5\u8fd9\u5f88\u5bb9\u6613\u901a\u8fc7\u4ee3\u7801\u6765\u63a7\u5236\u6574\u4e2a\u6d41\u7a0b\uff0c\u4f8b\u5982\u5982\u679c\u7528\u6237\u8f93\u5165\u6ca1\u6709\u53d1\u751f\uff0c\u90a3\u4e48\u6761\u4ef6\u5224\u65ad\u903b\u8f91\u4f1a\u4fdd\u8bc1\u540e\u7eed\u7684\u903b\u8f91\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u65e0\u5e8f\u7684\u8ba1\u7b97\u6307\u4ee4\u88ab\u8f6c\u6362\u4e3a\u6709\u5e8f\u5217\u8868\u4e4b\u540e\uff0c\u5e26\u6765\u7684\u4e00\u4e2a\u4ee3\u4ef7\u662f\u8fd9\u79cd\u524d\u540e\u903b\u8f91\u5206\u652f\u63a7\u5236\u80fd\u529b\u7684\u4e27\u5931\uff1a\u540e\u7eed\u7684\u51fd\u6570\u552f\u4e00\u7684\u5f71\u54cd\u56e0\u7d20\u662f\u8f93\u5165\u53c2\u6570\uff0c\u53ea\u80fd\u6839\u636e\u53c2\u6570\u8fdb\u884c\u5224\u65ad\u662f\u5426\u8981\u8fdb\u884c\u8ba1\u7b97\uff0c\u4f46\u56e0\u4e3a\u6570\u636e\u5168\u90e8\u662f\u88ab\u653e\u5230block\u91cc\u9762\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u68c0\u6d4bblock\u4e2d\u5c5e\u6027\u72b6\u6001\u7684\u6539\u53d8\uff0c\u4e3b\u8981\u6709\u4e00\u4e2a\u53d1\u751f\u53d8\u5316\u5c31\u9700\u8981\u6267\u884c\u51fd\u6570\u8ba1\u7b97\u3002"),(0,n.kt)("h2",{id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*"),(0,n.kt)("h3",{id:"2141-realityis\u6838\u5fc3\u57fa\u7840"},"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0a\u5c42\u7cfb\u7edf\u6709\u5f88\u591a\u4e0d\u540c\u7684\u673a\u5236\u3001\u4e0d\u540c\u7684\u8f6f\u4ef6\u67b6\u6784\u601d\u8def\uff0c\u4f46RealityIS\u7684\u6838\u5fc3\u57fa\u7840\u5176\u5b9e\u662f\u8ba1\u7b97\u673a\u7a0b\u5e8f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u673a\u5236\u548c\u539f\u7406\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u539f\u7406\u57fa\u672c\u4e0a\u90fd\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u800c\u4e0a\u5c42\u7684\u7f16\u8bd1\u539f\u7406\u548c\u66f4\u4e0b\u5c42\u7684\u786c\u4ef6\u6307\u4ee4\u548c\u6c47\u7f16\u90fd\u662f\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u8fd9\u4f7f\u5f97\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u91cd\u8981\u6027\u6ca1\u6709\u88ab\u7ed9\u4e88\u8db3\u591f\u7684\u91cd\u89c6\u3002\u5c3d\u7ba1\u5b83\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u662f\u5b83\u5374\u5bf9\u4e0a\u5c42\u7684\u7f16\u8bd1\u8fc7\u7a0b\u751a\u81f3\u7f16\u7a0b\u8bed\u8a00\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u662f\u4f53\u73b0\u5728\u5b83\u4fc3\u8fdb\u4e86\u4e0a\u5c42\u7684\u53d1\u5c55\u548c\u8fdb\u5316\uff0c\u76f8\u53cd\uff0c\u5b83\u675f\u7f1a\u4e86\u4e0a\u9762\u7684\u8fdb\u5316\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u548c\u52a0\u8f7d\u6709\u5f88\u591a\u91cd\u8981\u7684\u7279\u70b9\uff0c\u4f7f\u5f97\u5b83\u65e2\u91cd\u8981\u53c8\u8db3\u591f\u7b80\u5355\uff0c\u540c\u65f6\u5bf9\u4e0a\u4e0b\u6e38\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u66f4\u786e\u5207\u8bf4\u8f83\u5927\u7684\u7ea6\u675f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u975e\u5e38\u7b80\u5355"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f\u4e00\u79cd\u975e\u5e38\u4f18\u96c5\u7684\u7ed3\u6784\u6027\u62bd\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u548c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4ea7\u751f\u4e86\u5de8\u5927\u7684\u675f\u7f1a"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f")),(0,n.kt)("p",null,"\u6b63\u56e0\u4e3a\u5982\u6b64\uff0cRealityIS\u8bde\u751f\u6700\u5173\u952e\u7684\u8fdb\u7a0b\u662f\u9996\u5148\u4ece\u7b26\u53f7\u8868\u5f97\u5230\u542f\u793a\uff0c\u800c\u4e0d\u662f\u76f8\u53cd\u4ece\u6e38\u620f\u7a0b\u5e8f\u7684\u7ed3\u6784\u7740\u624b\u3002\u524d\u8005\u53ef\u4ee5\u8ba4\u4e3a\u662f\u81ea\u4e0b\u5411\u4e0a\u7684\uff0c\u800c\u540e\u8005\u662f\u81ea\u4e0a\u5411\u4e0b\u7684\u3002\u6ca1\u6709\u5bf9\u7b26\u53f7\u8868\u7684\u5173\u952e\u7406\u89e3\uff0c\u6e38\u620f\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ba1\u7406\u53ea\u80fd\u7528\u4f5c\u5f00\u53d1\u5546\u5185\u90e8\u66f4\u597d\u7684\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\uff0c\u5c3d\u7ba1\u4e5f\u53ef\u4ee5\u7b80\u5316\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u4f7f\u7528\u590d\u7528\u6765\u63d0\u9ad8\u5de5\u4e1a\u5316\u751f\u4ea7\uff0c\u4f46\u662f\u5b83\u65e0\u6cd5\u76f4\u63a5\u5230\u8fbe\u4e92\u64cd\u4f5c\u6027\u3002\u5bf9\u7b26\u53f7\u8868\u7684\u542f\u793a\u624d\u5bfc\u81f4\u4e86\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u5207\u673a\u5236\u3002\u800c\u7b26\u53f7\u8868\u6b63\u662f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u6838\u5fc3\u3002"),(0,n.kt)("h3",{id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027"},"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027"),(0,n.kt)("h3",{id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5"},"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5"),(0,n.kt)("h4",{id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"},"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"),(0,n.kt)("p",null,"\u8fd9\u79cd\u67b6\u6784\u4ea7\u751f\u4e86\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u5176\u4e2d\u6700\u6838\u5fc3\u7684\u662f\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u4e00\u4e2a\u6574\u4f53\uff0c\u800c\u8fd9\u662f\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\uff0c\u5c06\u6bcf\u4e2a\u51fd\u6570\u90fd\u72ec\u7acb\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\uff0c\u4f1a\u5bfc\u81f4\u52a8\u6001\u67e5\u8be2\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u8fd9\u662f\u7531\u4e8e\u5185\u5b58\u7684\u5bfb\u5740\u67b6\u6784\u51b3\u5b9a\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u9488\u5bf9\u6bcf\u6570\u636e\u6bb5\u548c\u7a0b\u5e8f\u6bb5\u90fd\u5206\u914d\u7edd\u5bf9\u5730\u5740\uff0c\u90a3\u6837\u4e0d\u7ba1\u662f\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7684\u8fc7\u7a0b\u90fd\u6709\u5de8\u5927\u5f71\u54cd\uff0c\u800c\u76f8\u5bf9\u5bfb\u5740\u4f7f\u5f97\u7a0b\u5e8f\u66f4\u5bb9\u6613\u5408\u5e76\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5c06\u7a0b\u5e8f\u7ed3\u6784\u8fdb\u884c\u4e86\u7b80\u5316\u5904\u7406\uff0c\u4f7f\u5f97\u8fd9\u4e2a\u52a8\u6001\u67e5\u8be2\u7684\u5f00\u9500\u53d8\u5f97\u5f88\u4f4e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u8fdb\u5236\u7684\u5b89\u5168\u6027\uff0c\u52a8\u6001\u7ec4\u7ec7\u5b58\u5728\u8f83\u5927\u7684\u4e8c\u8fdb\u5236\u7248\u672c\u95ee\u9898\uff0c\u8fdb\u800c\u4ea7\u751f\u5b89\u5168\u6027\u95ee\u9898\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5728\u66f4\u4e0a\u5c42\u7684\u811a\u6b65\u8bed\u8a00\u5c42\u9762\u8fdb\u884c\u52a8\u6001\u7ec4\u7ec7\uff0c\u51cf\u5c11\u5bf9\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("h4",{id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027"},"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21433-\u7248\u672c\u7ba1\u7406"},"2.14.3.3 \u7248\u672c\u7ba1\u7406"),(0,n.kt)("h4",{id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"},"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u52a8\u6001\u94fe\u63a5\u6280\u672f\u4e2d\u5305\u542b\u8f83\u5927\u7684\u5171\u4eab\u5e93\u7b26\u53f7\u8868\u3001\u7a0b\u5e8f\u5bf9\u5171\u4eab\u5e93\u7b26\u53f7\u7684\u5f15\u7528\u90fd\u9700\u8981\u52a8\u6001\u67e5\u627e\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5f15\u8d77\u8f83\u5927\u7684\u6027\u80fd\u5f00\u652f\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u51cf\u5c11\u6027\u80fd\u5f00\u652f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u5168\u5c40\u7b26\u53f7\u67e5\u627e\uff0c\u51fd\u6570\u90fd\u662f\u9759\u6001\u6307\u9488\uff0c\u8fd9\u5f97\u76ca\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u98ce\u683c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u662f\u7eaf\u51fd\u6570\uff0c\u5373\u4f7f\u5bf9\u4e8eiOS\u7cfb\u7edf\uff0c\u53ea\u80fd\u91c7\u53d6\u89e3\u91ca\u6027\u7684\u6267\u884c\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u51fd\u6570\u4f7f\u7528\u7684\u5730\u5740\u4e5f\u662f\u5728\u4e00\u4e2a\u5f88\u5c0f\u7684\u5185\u5b58\u5730\u5740\u7a7a\u95f4\uff0c\u6b64\u65f6\u7684\u4ee3\u7801\u5f62\u6210\u4e00\u79cd\u201c\u9690\u5f0f\u7684\u7b26\u53f7\u8868\u201d\uff0c\u56e0\u4e3a\u6211\u4eec\u901a\u4ee3\u7801\u83b7\u53d6\u7b26\u53f7\u5728\u6808\u4e2d\u7684\u5730\u5740\uff0c\u8fd9\u907f\u514d\u4e86\u5927\u91cf\u7684\u5168\u5c40\u67e5\u627e"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5bf9\u4e8eRealityIS\u8fd0\u884c\u65f6\uff0c\u4ed6\u9700\u8981\u67e5\u627e\u5168\u5c40\u7b26\u53f7\u8868\u6765\u83b7\u53d6\u5730\u5740\uff0c\u6211\u4eec\u7684\u7b26\u53f7\u8868\u7ed3\u6784\u4e5f\u66f4\u52a0\u5de7\u5999\u3002\u8fd9\u79cd\u67e5\u627e\u88ab\u8f6c\u5316\u4e3a\u53e6\u4e00\u79cd\u5f62\u5f0f\uff1a\u5373\u5728\u7f16\u8bd1\u65f6\u5efa\u7acb\u4e86\u51fd\u6570\u7ec4\u4ef6\u548c\u7b26\u53f7\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u7136\u540e\u8fd9\u79cd\u5173\u7cfb\u5728\u52a0\u8f7d\u65f6\u88ab\u4fdd\u5b58\u4e3a\u5185\u5b58\u4e2d\u6570\u636e\u548c\u4ee3\u7801\u7684\u4e00\u4e2a\u5f71\u89c6\uff0c\u8fd9\u5c31\u662f\u4e00\u4e2aC++\u7684\u6307\u9488\u5c31\u627e\u5230\u4e86\u5bf9\u5e94\u7684\u5730\u5740\uff0c\u6240\u4ee5\u8fd9\u95f4\u63a5\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u6bcf\u6b21\u7b26\u53f7\u8868\u5168\u5c40\u67e5\u627e\uff0c\u56e0\u4e3a\u5b83\u53ea\u5728\u52a0\u8f7d\u65f6\u8ba1\u7b97\u4e00\u6b21\uff0c\u800c\u4e0d\u662f\u9700\u8981\u6bcf\u6b21\u9047\u5230\u7b26\u53f7\u52a8\u6001\u4e14\u91cd\u590d\u67e5\u627e\u3002\u7ec4\u4ef6\u548c\u51fd\u6570\u4e4b\u95f4\u7684\u786e\u5b9a\u5173\u7cfb\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\u3002")),(0,n.kt)("h3",{id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"},"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("p",null,"\u5c06\u57282.16\u8282\u4e13\u95e8\u8ba8\u8bba"),(0,n.kt)("h2",{id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"},"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"),(0,n.kt)("h3",{id:"2151-\u590d\u6742\u7cfb\u7edf"},"2.15.1 \u590d\u6742\u7cfb\u7edf"),(0,n.kt)("h3",{id:"2152-\u7ec6\u80de\u6a21\u578b"},"2.15.2 \u7ec6\u80de\u6a21\u578b"),(0,n.kt)("p",null,"But for Dr. Kay, he states that ",(0,n.kt)("a",{parentName:"p",href:"http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en"},"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.")," Why? Well, part of his background was cell biology and when he did the math on their computational power, he realized that while software routinely has trouble scaling, cells can easily coordinate and scale by a factor of over a trillion, creating some of the most fantastically complex things in existence, capable of correcting their own errors. By comparison, the most sophisticated computer software programs are slow, tiny, bugfests. ",(0,n.kt)("em",{parentName:"p"},"Kay's")," conception of OOP starts with a single question: how can we get our software to match this scalability?"),(0,n.kt)("h4",{id:"21521-isolation"},"2.15.2.1 Isolation"),(0,n.kt)("p",null,'First, let\'s discuss isolation. This is a shorter term than "local retention and protection and hiding of state-process".'),(0,n.kt)("p",null,"The interior of a cell is messy and confusing, but the cell membrance wraps this up in a tidy package, hiding the internal details. It's estimated that around 50 to 70 ",(0,n.kt)("em",{parentName:"p"},"billion")," cells die in your body every day. But you don't. Could your software keep running if you had millions of exceptions being thrown every minute? I doubt it."),(0,n.kt)("p",null,"You not dying when your cells die isn't encapsulation; it's isolation. Consider the following (awful) example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"class MyExample:\n def reciprocal(self, num):\n return 1.0/num\n\nexample = MyExample()\nprint example.reciprocal(4);\nprint example.reciprocal(0);\n")),(0,n.kt)("p",null,"In the above code, we've encapsulated the reciprocal equation in the class, but then ..."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'0.25\nTraceback (most recent call last):\n File "class.py", line 7, in \n print example.reciprocal(0);\n File "class.py", line 3, in reciprocal\n return 1.0/num\nZeroDivisionError: float division by zero\n')),(0,n.kt)("p",null,"The object dies, as does the code which contained it. This is the antithesis of what Dr. Kay is trying to get us to understand."),(0,n.kt)("p",null,"If you think of Web browsers and servers as objects, however, we see something closer to his vision. If your browser crashed every time a web server crashed or was otherwise unavailable, Microsoft IIS would never have reached 2.0."),(0,n.kt)("p",null,"Now that we sort of understand a core idea of Kay's, Lets take it further. Kay points out that from the early days of Arpanet in the 60s, to the time of his OOPSLA keynote in 1997, Arpanet had grown roughly 100 million times the size of what it was. And it didn't have to be repeatedly taken down for maintenance every time we wanted to extend it. The internet, today, is sometimes cited by Kay as the only working example of his OO model."),(0,n.kt)("h3",{id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"},"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"),(0,n.kt)("h4",{id:"21531-is-erlang-object-oriented"},"2.15.3.1 Is Erlang object oriented?"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Joe Armstrong:")," Smalltalk got a lot of the things right. So if your question is about what I think about object oriented programming, I sort of changed my mind over that. I wrote a an article, a blog thing, years ago - Why object oriented programming is silly. I mainly wanted to provoke people with it. They had a quite interesting response to that and I managed to annoy a lot of people, which was part of the intention actually. I started wondering about what object oriented programming was and I thought Erlang wasn't object oriented, it was a functional programming language."),(0,n.kt)("p",null,"Then, my thesis supervisor said \"But you're wrong, Erlang is extremely object oriented\". He said object oriented languages aren't object oriented. I might think, though I'm not quite sure if I believe this or not, but Erlang might be the only object oriented language because the 3 tenets of object oriented programming are that it's based on message passing, that you have isolation between objects and have polymorphism."),(0,n.kt)("p",null,"Alan Kay himself wrote this famous thing and said \"The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages\". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back."),(0,n.kt)("p",null,"But you don't really do that and you don't really have isolation which is one of the problems. Dan Ingalls said yesterday (I thought it was very nice) about messaging that once you got messaging, you don't have to care where the message came from. You don't really have to care, the runtime system has to organize the delivery of the message, we don't have to care about how it's processed. It sort of decouples the sender and the receiver in this kind of mutual way. That's why I love messaging."),(0,n.kt)("p",null,"The 3 things that object oriented programming has it's messaging, which is possibly the most important thing. The next thing is isolation and that's what I talked about earlier, that my program shouldn't crash your program, if the 2 things are isolated, then any mistakes I make in my program will not crash your program. This is certainly not true with Java. You cannot take 2 Java applications, bung them in the JVM and one of them still halts the machine and the other one will halt as well. You can crash somebody else's application, so they are not isolated."),(0,n.kt)("p",null,"The third thing you want is polymorphism. Polymorphism is especially regarding messaging, that's just there for the programmer's convenience. It's very nice to have for all objects or all processes or whatever you call them, to have a printMe method - \"Go print yourself\" and then they print themselves. That's because the programmers, if they all got different names, the programmer is never going to remember this, so it's a polymorphism. It just means \"OK, all objects have a printMe method. All objects have a what's your size method or introspection method.\""),(0,n.kt)("p",null,"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about. You can try it and see it for yourself."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://www.infoq.com/interviews/johnson-armstrong-oop/"},"https://www.infoq.com/interviews/johnson-armstrong-oop/"))),(0,n.kt)("h4",{id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb"},"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb"),(0,n.kt)("p",null,"\u6309\u7167Alan Kay\u7684\u5b9a\u4e49\uff0cOOP\u7684\u6838\u5fc3\u4e09\u8981\u7d20\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"message passing, "),(0,n.kt)("li",{parentName:"ul"},"that you have isolation between objects "),(0,n.kt)("li",{parentName:"ul"},"and have polymorphism.")),(0,n.kt)("p",null,"\u5927\u591a\u6570\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u90fd\u652f\u6301\u591a\u6001\uff0c\u4f46\u662f\u5173\u4e8e\u9694\u79bb\u7684\u610f\u4e49\uff0c\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u7684\u7406\u89e3\u662f\u4e0d\u592a\u5b8c\u6574\u7684\u3002\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u4eba\u4eec\u8bf4\u7684\u66f4\u591a\u7684\u662f\u5c01\u88c5\u800c\u4e0d\u662f\u9694\u79bb\uff0c\u8868\u9762\u4e0a\u770b\u5c01\u88c5\u5176\u5b9e\u5c31\u662f\u628a\u5404\u79cd\u7ec6\u8282\u9690\u85cf\u5728\u5bf9\u8c61\u5185\u90e8\uff0c\u4ece\u800c\u5b9e\u73b0\u4e86\u9694\u79bb\u3002\u4f46\u8fd9\u53ea\u662f\u6982\u5ff5\u4e0a\u7684\u9694\u79bb\uff0c\u800c\u4e0d\u662f\u771f\u6b63\u8fd0\u884c\u65f6\u7684\u5bf9\u8c61\u9694\u79bb\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u63d0\u51faisolation\u7684\u6982\u5ff5\uff0c\u5b83\u7684\u610f\u4e49\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7a0b\u5e8f\u7684\u5065\u58ee\u6027\uff0c\u6bd4\u5982\u57281000\u4e2a\u5bf9\u8c61\u8fd0\u884c\u7684\u7a0b\u5e8f\u4e2d\uff0c\u5982\u679c\u6709\u5176\u4e2d\u51e0\u4e2a\u5bf9\u8c61\u53d1\u751f\u4e86\u9519\u8bef\uff0c\u5982\u679c\u5b83\u7684\u903b\u8f91\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u5bf9\u8c61\uff0c\u5219\u6574\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u4e0d\u53d7\u5230\u5f71\u54cd\u3002\u6240\u4ee5\u5b83\u662f\u4ece\u7a0b\u5e8f\u6784\u9020\u65b9\u9762\u7684\u610f\u4e49\uff0c\u800c\u5c01\u88c5\u5e76\u4e0d\u80fd\u89e3\u51b3\u4e0a\u8ff0\u7684\u5065\u58ee\u6027\u95ee\u9898\uff0c\u5c01\u88c5\u7684\u6982\u5ff5\u66f4\u591a\u7684\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u800c\u8a00\u7684\uff0c\u8ba9\u7a0b\u5e8f\u5458\u628a\u4e00\u7ec4\u76f8\u5173\u7684\u65b9\u6cd5\u548c\u5c5e\u6027\u5c01\u88c5\u5728\u4e00\u4e2a\u5bf9\u8c61\u4e0a\u662f\u6613\u4e8e\u7406\u89e3\u548c\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u662f\u9762\u5411\u8f6f\u4ef6\u6784\u9020\u7684\u610f\u4e49\uff0c\u5373\u9762\u5411\u673a\u5668\uff0c\u800c\u4e0d\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7406\u89e3\u7684\u610f\u4e49\uff0c\u800c\u5f53\u4eca\u5927\u591a\u6570\u5173\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u6982\u5ff5\u66f4\u591a\u662f\u56f4\u7ed5\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u7684\u89d2\u5ea6\u3002")),(0,n.kt)("p",null,"\u90a3\u4e3a\u4ec0\u4e48\u5bf9\u8c61\u5c01\u88c5\u89e3\u51b3\u4e0d\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u800cErlang\u89e3\u51b3\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u6838\u5fc3\u539f\u56e0\u5728\u4e8eErlang\u4e3a\u4e86\u4fdd\u8bc1\u5065\u58ee\u6027\uff0c\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u72ec\u7acb\u8fd0\u884c\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9694\u79bb\uff0c\u4e00\u4e2a\u5bf9\u8c61\u7684Crash\u4e0d\u80fd\u5f71\u54cd\u5176\u4ed6\u5bf9\u8c61\uff0c\u6240\u4ee5Erlang\u628a\u65b9\u6cd5\u8c03\u7528\u8fdb\u884c\u4e86\u5207\u9664\u3002\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u51e0\u4e4e\u9664Erlang\u4e4b\u5916\u7684\u6240\u6709\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4eec\u4e3a\u4e86\u4fdd\u8bc1\u7a0b\u5e8f\u6267\u884c\u7684\u5e8f\u5217\uff0c\u90fd\u662f\u91c7\u7528\u76f4\u63a5\u8c03\u7528\u7684\u65b9\u6cd5\uff0c\u5373\u5f53A\u5bf9\u8c61\u8c03\u7528B\u5bf9\u8c61\u7684\u65b9\u6cd5\u65f6\uff0cA\u5bf9\u8c61\u7684\u6307\u4ee4\u4f1a\u88ab\u6302\u8d77\uff0c\u7a0b\u5e8f\u4f1a\u8fdb\u5165\u5230B\u5bf9\u8c61\u5185\u90e8\u76f8\u5e94\u7684\u65b9\u6cd5\u8fdb\u884c\u6267\u884c\uff0c\u5e76\u4e14\u7b49\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u8fd4\u56de\u503c\u7ed9A\u5bf9\u8c61\uff0c\u5e76\u5c06\u6267\u884c\u6307\u4ee4\u7684\u6307\u9488\u8fd4\u56de\u5230\u5bf9\u8c61A\u8c03\u7528\u65b9\u6cd5\u540e\u9762\u7684\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u73b0\u4ee3\u7f16\u8bd1\u67b6\u6784\u90fd\u662f\u6309\u7167\u4e0a\u8ff0\u7684\u6d41\u7a0b\u6784\u5efa\u7684\uff0c\u6bd4\u5982\u5728\u65b9\u6cd5\u8c03\u7528\u7684\u65f6\u5019\uff0c\u7a0b\u5e8f\u8df3\u8f6c\u5230B\u5bf9\u8c61\u76f8\u5e94\u7684\u4ee3\u7801\u533a\u57df\uff0c\u5e76\u4f7f\u7528\u5bc4\u5b58\u5668\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u7136\u540e\u65b9\u6cd5\u6267\u884c\u5b8c\u6bd5\u540e\u8df3\u8f6c\u56de\u5230\u539f\u6765\u7684\u8fd4\u56de\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u6837\u7684\u6d41\u7a0b\u5bf9\u4e8e\u7f16\u8bd1\u5668\u67b6\u6784\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u7a0b\u5e8f\u5458\u90fd\u662f\u76f8\u5bf9\u5bb9\u6613\u7406\u89e3\u7684\uff1a\u5f97\u5230\u8fd4\u56de\u503c\u540e\u63a5\u7740\u6267\u884c\u540e\u9762\u7684\u8bed\u53e5\uff0c\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u601d\u8def\u662f\u8fde\u8d2f\u7684\u3002\u5e76\u4e14\u5982\u524d\u9762\u5173\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u6216\u8005\u7edf\u7b79\u7f16\u7a0b\u76f8\u5173\u7684\u63cf\u8ff0\uff0c\u7a0b\u5e8f\u5458\u4e0d\u9700\u8981\u989d\u5916\u4fdd\u5b58\u8ba1\u7b97\u7ed3\u679c\uff0c\u76f4\u63a5\u4f7f\u7528\u5f53\u524d\u7684\u503c\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u7ba1\u7406\u662f\u6700\u7b80\u5355\u7684\u3002\u5426\u5219\u6211\u4eec\u9700\u8981\u4e00\u5957\u590d\u6742\u7684\u673a\u5236\u6765\u7ba1\u7406\u903b\u8f91\uff0c\u6bd4\u5982\u9700\u8981\u4fdd\u5b58\u4e00\u4e9b\u503c\u5728\u540e\u9762\u67d0\u4e2a\u65f6\u5019\u4f7f\u7528\uff0c\u800c\u5982\u679c\u4f7f\u7528\u7684\u65f6\u5019\u4ee3\u7801\u5728\u5176\u4ed6\u4f4d\u7f6e\uff0c\u8fd8\u6d89\u53ca\u600e\u4e48\u53d6\u5f97\u8fd9\u4e9b\u5b58\u50a8\u7684\u8ba1\u7b97\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u79cd\u8026\u5408\u7684\u903b\u8f91\u7834\u574f\u4e86\u9694\u79bb\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u88ab\u8c03\u7528\u65b9\u6cd5Crash\uff0c\u6bd4\u5982\u4f1a\u5f71\u54cd\u540e\u9762\u6574\u4e2a\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u8ba9\u6574\u4e2a\u7a0b\u5e8f\u5d29\u6e83\u3002\u8fd8\u4e0d\u8bf4\u8fd9\u79cd\u8026\u5408\u5bfc\u81f4\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u5355\u4e00\u6027\u95ee\u9898\uff0c\u5373\u6574\u4e2a\u7a0b\u5e8f\u9700\u8981\u88ab\u4e00\u6b21\u6027\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cA\u5bf9B\u7684\u5f15\u7528\uff0c\u5f62\u6210\u4e86\u8026\u5408\uff0cB\u4e0d\u80fd\u52a8\u6001\u66f4\u65b0\uff0c\u5982\u679cB\u6709\u4fee\u6539\uff0c\u4e5f\u9700\u8981\u6574\u4e2a\u7a0b\u5e8f\u91cd\u65b0\u7f16\u8bd1\uff0c\u5373\u4f7f\u52a8\u6001\u8bed\u8a00\uff0c\u4e5f\u4f1a\u5f62\u6210\u5f88\u6df1\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u8981\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u6211\u4eec\u5fc5\u987b\u5c06\u65b9\u6cd5\u8c03\u7528\u5207\u5f00\uff0c\u5373A\u65b9\u6cd5\u4e0d\u9700\u8981\u7b49\u5f85B\u65b9\u6cd5\u7684\u8fd4\u56de\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u53ef\u4ee5\u6709\u5f88\u591a\u4e0d\u540c\u7684\u5b9e\u73b0\u673a\u5236\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\u90fd\u4f1a\u7ed9\u7cfb\u7edf\u67b6\u6784\u548c\u5f00\u53d1\u8005\u5e26\u6765\u4e00\u4e9b\u4e0d\u4fbf\uff0c\u6216\u8005\u8bf4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"We need to isolate all the code that runs in order to achieve a goal in such a way that we can detect if any errors occurred when trying to achieve a goal. Also, when we are trying to simultaneously achieve multiple goals we do not want a sodware error occurring in one part of the system to propagate to another part of the system."),(0,n.kt)("p",{parentName:"blockquote"},"The essential problem that must be solved in making a fault-tolerant sodware system is therefore that of fault-isolation. Dicerent programmers will write dicerent modules, some modules will be correct, others will have errors. We do not want the errors in one module to adversely acect the behaviour of a module which does not have any errors."),(0,n.kt)("p",{parentName:"blockquote"},"To provide fault-isolation we use the traditional operating system no- tion of a process. Processes provide protection domains, so that an error in one process cannot acect the operation of other processes. Dicerent pro- grammers write dicerent applications which are run in dicerent processes; errors in one application should not have a negative influence on the other applications running in the system."),(0,n.kt)("p",{parentName:"blockquote"},"-- from Joe Armstrong\u2018s Phd thesis")),(0,n.kt)("p",null,"Erlang\u9009\u62e9\u4e86\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u4e4b\u95f4\u5b8c\u5168\u9694\u79bb\uff0c\u6240\u4ee5\u5929\u751f\u5c31\u89e3\u51b3\u4e86\u9694\u79bb\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e14\u8fd9\u79cd\u9694\u79bb\u6027\u662f\u975e\u5e38\u5f7b\u5e95\u7684\u3002\u5c3d\u7ba1\u5728\u4e00\u4e2a\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u521b\u5efa\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f46\u662f\u5b83\u5374\u4e0d\u80fd\u76f4\u63a5\u8c03\u7528\uff0c\u6240\u6709\u7684\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u5c31\u81ea\u7136\u53d8\u6210\u4e86\u6d88\u606f\u3002\u8fd9\u53c8\u5929\u751f\u7b26\u5408\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u6838\u5fc3\uff0c\u5373\u6d88\u606f\u4f20\u9012\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5982\u679c\u6ca1\u6709\u5b9e\u73b0\u65b9\u6cd5\u8c03\u7528\u7684\u5207\u5272\uff0c\u4ece\u7406\u8bba\u4e0a\u8bf4\u5c31\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u6d88\u606f\u4f20\u9012\u3002")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation.")),(0,n.kt)("p",null,"\u5728Smalltalk\u4e2d\uff0c\u5c3d\u7ba1\u8bed\u8a00\u5f00\u53d1\u8005\u8ba4\u4e3a\u65b9\u6cd5\u8c03\u7528\u662f\u6d88\u606f\u4f20\u9012\uff0c\u800c\u4e0d\u662f\u4f20\u7edf\u7f16\u7a0b\u610f\u4e49\u4e0a\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u79cd\u6d88\u606f\u4f20\u9012\u6ca1\u80fd\u591f\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0cSmalltalk\u7684\u6d88\u606f\u4f20\u9012\u66f4\u591a\u662f\u7ed3\u5408\u5ef6\u8fdf\u7ed1\u5b9a\u7684\u52a8\u6001\u7279\u6027\u4f7f\u5f97\u54cd\u5e94\u8005\u6709\u4e00\u5b9a\u7684\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u5bf9\u4e00\u4e2a\u201c\u65b9\u6cd5\u8c03\u7528\u201d\u7684\u6d88\u606f\u4ea7\u751f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u54cd\u5e94\uff0c\u8fd9\u5f97\u76ca\u4e8e\u5ef6\u8fdf\u7ed1\u5b9a\uff0c\u4f8b\u5982\u53ef\u4ee5\u901a\u8fc7\u8fd0\u884c\u65f6\u7684\u4e00\u6761\u60c5\u51b5\u6267\u884c\u4e0d\u540c\u7684\u54cd\u5e94\u3002\u4f46\u8fd9\u79cd\u7279\u6027\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u8f6f\u4ef6\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u6700\u91cd\u8981\u7684\u9694\u79bb\u95ee\u9898\u3002\u800c\u53ef\u6269\u5c55\u6027\u5e76\u4e0d\u662fSmalltalk\u552f\u4e00 \u7684\u4f18\u52bf\uff0c\u5f88\u591a\u52a8\u6001\u8bed\u8a00\u90fd\u80fd\u591f\u505a\u5230\u8fd9\u6837\u7684\u3002"),(0,n.kt)("p",null," \u5f53\u7136\u5bf9\u4e8e\u5065\u58ee\u6027\uff0cSmalltalk\u7684\u601d\u8def\u662f\uff1a1\uff09\u9996\u5148\u4fdd\u5b58\u5feb\u7167\uff1b2\uff09\u7136\u540e\u53ef\u4ee5\u52a8\u6001\u4fee\u6539\u4ee3\u7801\u8fdb\u884c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"Erlang\u7684\u6d88\u606f\u4f20\u9012\u6a21\u578b\u5e26\u6765\u4e86\u5bf9\u8c61\u4e4b\u95f4\u5173\u7cfb\u7684\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f46\u5b83\u4fdd\u8bc1\u4e86\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u7684\u771f\u6b63\u6838\u5fc3\u7279\u6027\u3002\u8fd9\u79cd\u4e0d\u4e00\u6837\u7684\u7279\u6027\u662f\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u90fd\u4e0d\u5177\u5907\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u8bf4\u662f\u552f\u4e00 \u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002"),(0,n.kt)("h4",{id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236"},"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Each independent activity should be performed in a completely isolated process. Such processes should share no data, and only commu- nicate by message passing. This is to limit the consequences of a sodware error."),(0,n.kt)("p",{parentName:"blockquote"},"As soon as two processes share any common resource, for example, memory or a pointer to memory, or a mutex etc the possibility exists that a sodware error in one of the processes will corrupt the shared resource. Since eliminating all such sodware errors for large sodware systems is an unsolved problem I think that the only realistic way to build large reliable systems is by partitioning the system into independent parallel processes, and by providing mechanisms for monitoring and restarting these pro- cesses.")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u4e2d\u7684\u5bf9\u8c61\u4e4b\u95f4\u5f80\u5f80\u90fd\u5305\u542b\u7740\u590d\u6742\u7684\u5173\u7cfb\uff0c\u5bf9\u8c61\u6570\u636e\u7684\u5f15\u7528\uff0c\u65b9\u6cd5\u8c03\u7528\uff0c\u6216\u8005\u7b2c\u4e09\u65b9\u5171\u4eab\u6570\u636e\uff0c\u8fd9\u4e9b\u90fd\u662f\u5e76\u53d1\u548c\u9694\u79bb\u9762\u5bf9\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u65b9\u9762Erlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u66f4\u597d\u7684\u65b9\u6cd5\uff0c\u53ea\u662f\u5f3a\u884c\u5c06\u5bf9\u8c61\u5b8c\u5168\u9694\u79bb\u5f00\uff0c\u6240\u4ee5\u5bf9\u8c61\u4e4b\u95f4\u7684\u6240\u6709\u901a\u4fe1\u5c31\u53d8\u6210\u6d88\u606f\uff0c\u8fd9\u4e9b\u6d88\u606f\u53ef\u80fd\u662f\u5bf9\u53e6\u4e00\u4e2a\u5bf9\u8c61\u67d0\u4e2a\u6570\u636e\u7684\u8bfb\u53d6\uff0c\u67d0\u4e2a\u65b9\u6cd5\u7684\u8c03\u7528\u7b49\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u5168\u90e8\u8f6c\u5316\u4e3a\u6d88\u606f\uff1b\u5e76\u4e14\u7531\u4e8e\u6d88\u606f\u7684\u5f02\u6b65\u6027\uff0c\u7a0b\u5e8f\u7684\u987a\u5e8f\u88ab\u6253\u4e71\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u975e\u76f4\u63a5\u7684\u65b9\u5f0f\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u867d\u7136\u672c\u8d28\u4e0a\u6240\u6709\u7684\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u8fd9\u4e48\u53bb\u8f6c\u5316\uff0c\u4f46\u662f\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u590d\u6742\u6027\uff0c\u800cErlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u5f88\u597d\u7684\u673a\u5236\u53bb\u89e3\u51b3\u8fd9\u79cd\u590d\u6742\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u8fd9\u5c31\u4f7f\u5f97Erlang\u57fa\u672c\u4e0a\u53ea\u9002\u5408\u4e8e\u90a3\u79cd\u9ad8\u5e76\u53d1\u4f46\u662f\u7ebf\u7a0b\u76f8\u5bf9\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0b\u4e00\u8282\u5c06\u770b\u5230\uff0cRealityIS\u901a\u8fc7\u5f15\u5165\u4e00\u79cd\u65b0\u7684\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"},"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u80fd\u4fee\u6539\u81ea\u8eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u4fee\u6539\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\uff0c\u53ea\u80fd\u7ed9\u5176\u4ed6\u5bf9\u8c61\u8f93\u5165\u53c2\u6570\uff0c\u7531\u5176\u4ed6\u5bf9\u8c61\u81ea\u884c\u5904\u7406\uff0c\u8fd9\u6837\u7684\u53c2\u6570\u8f93\u5165\u5b9e\u9645\u4e0a\u5c31\u662f\u6d88\u606f"),(0,n.kt)("h4",{id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"},"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"),(0,n.kt)("p",null,"\u5e76\u4e0d\u9700\u8981\u6240\u6709\u7ebf\u7a0b\u771f\u6b63\u9694\u79bb\uff0c\u771f\u6b63\u9694\u79bb\u5e26\u6765\u5f88\u591a\u7f16\u7a0b\u4e0a\u7684\u4e0d\u4fbf\u3002"),(0,n.kt)("p",null,"\u539f\u59cb\u9694\u79bb\u7684\u5b9a\u4e49\u662f\u5e0c\u671b\u6bcf\u4e2a\u4ee3\u7801\u90fd\u4e0d\u5f71\u54cd\u5176\u4ed6\u4ee3\u7801\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u53ea\u662f\u4e00\u4e2a\u7c92\u5ea6\u7684\u95ee\u9898\uff0c\u6bd4\u5982\u4e25\u683c\u7684\u4e00\u70b9\u7684\u662f\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u90fd\u9694\u79bb\uff0c\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u5f7c\u6b64\u90fd\u4e0d\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u7a0d\u5fae\u653e\u677e\u4e00\u4e0b\u8fd9\u79cd\u9694\u79bb\uff0c\u4f60\u5f71\u54cd\u53ef\u4ee5\u5f71\u54cd\u4e00\u5b9a\u7684\u8303\u56f4\uff0c\u5355\u53ea\u53ea\u8981\u6700\u7ec8\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8bc6\u522b\u8fd9\u79cd\u5f71\u54cd\uff0c\u5e76\u5c06\u6240\u6709\u53d7\u5f71\u54cd\u7684\u90e8\u5206\u5168\u90e8\u53bb\u9664\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662fRealityIS\u4e2d\u7684\u673a\u5236\uff0c\u5b83\u901a\u8fc7\u5b9a\u4e49\u5173\u952e\u5b58\u6863\u5c5e\u6027\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u5411Smalltalk\u90a3\u6837\u5c1d\u8bd5\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b58\u6863\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u53ef\u4ee5\u4ece\u4efb\u610f\u4f4d\u7f6e\u6062\u590d\u3002\u76f8\u53cd\uff0cRealityIS\u53ea\u80fd\u4ece\u4e00\u4e9b\u5173\u952e\u8282\u70b9\u8fdb\u884c\u6062\u590d\uff0c\u5e94\u7528\u7a0b\u5e8f\u6216\u8005\u7ec4\u4ef6\u9700\u8981\u5bf9\u5bf9\u8c61\u7684\u6570\u636e\u5b57\u6bb5\u8fdb\u884c\u6062\u590d\uff0c\u8fd9\u4e9b\u5b57\u6bb5\u6839\u636e\u4e0a\u4e00\u4e2a\u672a\u53d7\u5f71\u54cd\u7684\u5173\u952e\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u63a8\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4\u7684\u9694\u79bb\u6027\u6982\u5ff5\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4fdd\u6301\u7a0b\u5e8f\u7684\u63a7\u5236\u80fd\u529b\uff0c\u4f7f\u7a0b\u5e8f\u5458\u53ef\u4ee5\u50cf\u4f20\u7edf\u7a0b\u5e8f\u90a3\u6837\u8fdb\u884c\u64cd\u4f5c\uff0c\u540c\u65f6\u53c8\u80fd\u4fdd\u8bc1\u9694\u79bb\u6027\u3002\u5bf9\u8c61\u4e4b\u95f4\u4ecd\u7136\u4ee5\u6d88\u606f\u8fdb\u884c\u4f20\u9012\uff0c\u4f46\u662f\u8fd9\u79cd\u6d88\u606f\u66f4\u7c7b\u4f3c\u4e8e\u65b9\u6cd5\u8c03\u7528\uff0c\u8c03\u7528\u7684\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u6bcf\u4e2a\u8c03\u7528\u90fd\u9700\u8981\u5c01\u88c5\u4e3a\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u9694\u79bb\u5e26\u6765\u5f88\u591a\u597d\u5904\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u5730\u5e76\u53d1\u5904\u7406\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u4e00\u4e2a\u4e3b\u8981\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5065\u58ee\u6027\uff0c\u66f4\u597d\u5bb9\u9519\uff0c\u4e00\u90e8\u5206\u7684error\u4e0d\u4f1a\u5f71\u54cd\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u9996\u8981\u548c\u6838\u5fc3\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u7684\u903b\u8f91\u7ba1\u7406\u548c\u7ec4\u7ec7"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5b89\u5168\u6027\uff0c\u5c24\u5176\u5728\u591a\u5e94\u7528\u73af\u5883\uff0c\u8fd9\u5bf9RealityIS\u66f4\u91cd\u8981\uff0c\u8fd9\u90e8\u5206\u5728\u7b2c2.16\u8282\u4e13\u95e8\u8ba8\u8bba\u3002")),(0,n.kt)("h4",{id:"21542-\u6d88\u606f\u4f20\u9012"},"2.15.4.2 \u6d88\u606f\u4f20\u9012"),(0,n.kt)("p",null,"\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"},"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In our system concurrency plays a central role, so much so that I have coined the term ",(0,n.kt)("em",{parentName:"p"},"Concurrency Oriented Programming")," to distinguish this style of programming from other programming styles."),(0,n.kt)("p",{parentName:"blockquote"},"In Concurrency Oriented Programming the concurrent structure of the program should follow the concurrent structure of the application. It is particularly suited to programming applications which model or interact with the real world."),(0,n.kt)("p",{parentName:"blockquote"},"The word concurrency refers to sets of events which happen simulta- neously. The real world is concurrent, and consists of a large number of events many of which happen simultaneously. At an atomic level our bodies are made up of atoms, and molecules, in simultaneous motion. At a macroscopic level the universe is populated with galaxies of stars in simultaneous motion."),(0,n.kt)("p",{parentName:"blockquote"},"When we perform a simple action, like driving a car along a freeway, we are aware of the fact that there may be several hundreds of cars within our immediate environment, yet we are able to perform the complex task of driving a car, and avoiding all these potential hazards without even thinking about it."),(0,n.kt)("p",{parentName:"blockquote"},"In the real world sequential activities are a rarity. As we walk down the street we would be very surprised to find only one thing happening, we expect to encounter many simultaneous events."),(0,n.kt)("p",{parentName:"blockquote"},"If we did not have the ability to analyze and predict the outcome of many simultaneous events we would live in great danger, and tasks like driving a car would be impossible. The fact that we can do things which require processing massive amounts of parallel information suggests that we are equipped with perceptual mechanisms which allow us to intuitively understand concurrency without consciously thinking about it.")),(0,n.kt)("p",null,"\u4e16\u754c\u5929\u7136\u662f\u5e76\u53d1\u7684\uff0c\u6211\u4eec\u7684\u5927\u8111\u7684\u601d\u8003\u65b9\u5f0f\u4e5f\u5929\u751f\u9002\u914d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5e76\u53d1\u6a21\u578b\uff0c\u7528\u8fd9\u79cd\u5bf9\u771f\u5b9e\u4e16\u754c\u7684\u903b\u8f91\u6d41\u7a0b\u6765\u5f00\u53d1\u7a0b\u5e8f\u662f\u6700\u597d\u7684\uff0c\u7136\u800c\u6211\u4eec\u51e0\u4e4e\u4ece\u6765\u6ca1\u6709\u8fd9\u79cd\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u6216\u8005\u7f16\u7a0b\u6a21\u578b\u90fd\u662f\u987a\u5e8f\u7f16\u7a0b\u6a21\u578b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"When it comes to computer programming things suddenly become inverted. Programming a sequential chain of activities is viewed the norm , and in some sense is thought of as being easy, whereas programming collections of concurrent activities is avoided as much as possible, and is generally perceived as being diecult."),(0,n.kt)("p",{parentName:"blockquote"},"I believe that this is due to the poor support which is provided for con- currency in virtually all conventional programming languages. The vast majority of programming languages are essentially sequential; any concur- rency in the language is provided by the underlying operating system, and not by the programming language."),(0,n.kt)("p",{parentName:"blockquote"},"In this thesis I present a view of the world where concurrency is pro- vided by the programming language, and not by the underlying operating system. Languages which have good support for concurrency I call Concur ",(0,n.kt)("em",{parentName:"p"},"rency Oriented Languages,")," or COPLs for short.")),(0,n.kt)("p",null,"\u54cd\u5e94\u5f0f"),(0,n.kt)("h4",{id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5"},"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5"),(0,n.kt)("h4",{id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7"},"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7"),(0,n.kt)("h4",{id:"21546-\u591a\u6001"},"2.15.4.6 \u591a\u6001"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Concurrency Oriented Programming also provides the two major ad- vantages commonly associated with object-oriented programming. These are polymorphism and the use of defined protocols having the same mes- sage passing interface between instances of dicerent process types."),(0,n.kt)("p",{parentName:"blockquote"},"When we partition a problem into a number of concurrent processes we can arrange that all the processes respond to the same messages (ie they are polymorphic,) and that they all follow the same message passing interface.")),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4ea4\u4e92\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u53ef\u4ee5\u54cd\u5e94\u4e0d\u540c\u7684\u6d88\u606f\uff0c\u771f\u5b9e\u4e16\u754c\u5929\u751f\u662f\u591a\u6001\u7684\uff0c\u7136\u800c\u8fd9\u4f1a\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a7\u5236\u53d8\u5f97\u56f0\u96be\uff0c\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u7684\u591a\u6001\u6027\u5219\u76f8\u53cd\uff0c\u5b83\u5e0c\u671b\u5c3d\u53ef\u80fd\u5c11\u7684\u591a\u6001\u6027\uff0c\u56e0\u4e3a\u66f4\u5e7f\u6cdb\u7684\u591a\u6001\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u53d8\u5f97\u590d\u6742\u96be\u4ee5\u7406\u89e3\uff0c\u5e76\u4e14\u52a8\u6001\u7684\u8ba1\u7b97\u5730\u5740\u5c06\u4f1a\u5bfc\u81f4\u66f4\u5927\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"21547-\u5bf9\u8c61\u5173\u7cfb"},"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",{parentName:"blockquote"},"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",{parentName:"blockquote"},"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u7ebf\u7a0b\u4e4b\u95f4\u7684\u5b89\u5168\uff0cErlang\u4f7f\u7528Name\u6765\u8868\u5f81\u6743\u9650\uff0c\u4f60\u62e5\u6709\u67d0\u4e2a\u7ebf\u7a0b\u7684name\uff0c\u4f60\u5c31\u6709\u6743\u9650\u4e0e\u4e4b\u8fdb\u884c\u6d88\u606f\u901a\u4fe1\u3002\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\uff0c\u4f60\u51e0\u4e4e\u603b\u662f\u4e0e\u4f60\u8ba4\u8bc6\u7684\u4eba\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u51e0\u4e4e\u4e0d\u4f1a\u8ddf\u964c\u751f\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\uff0c\u6216\u8005\u4e00\u4e2a\u66f4\u5f00\u653e\u7684\u7a0b\u5e8f\u4e16\u754c\uff0c\u9664\u4e86\u8fd9\u79cd\u57fa\u4e8ename\u7684\u4ea4\u4e92\u5173\u7cfb\uff0c\u8fd8\u6709\u5927\u91cf\u7684\u903b\u4e0d\u662f\u57fa\u4e8ename\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u64ad\u7684\u6d88\u606f\u80af\u5b9a\u4e0d\u4f1a\u53bb\u6309\u4e00\u4e2a\u4e00\u4e2a\u7684name\u8fdb\u884c\u4f20\u9012\uff0c\u800c\u4e14\u6309\u7167name\u7684\u8bbe\u8ba1\u521d\u8877\uff0c\u5b83\u4e5f\u4e0d\u4f1a\u8f7b\u6613\u8ba9\u4e00\u4e2a\u8fdb\u7a0b\u638c\u63e1\u6240\u8fdb\u7a0b\u7684name\uff0c\u5426\u5219name\u7684\u8bbe\u8ba1\u5c31\u4f1a\u5931\u53bb\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u6743\u9650\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e09\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7cfb\u7edf\u6743\u9650\uff0c\u53ef\u4ee5\u5411\u6240\u6709\u4eba\u53d1\u9001\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u6743\u9650\uff0c\u57fa\u4e8e\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u68c0\u7d22\uff0c\u4f46\u662f\u9644\u5e26\u597d\u53cb\u6743\u9650\u7b5b\u9009"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u7528\u5185\u6743\u9650\uff0c\u7406\u8bba\u4e0a\u4e00\u4e2a\u5e94\u7528\u5185\u90e8\u7684\u7ec4\u4ef6\u5728\u5e94\u7528\u5185\u90e8\u62e5\u6709\u6240\u6709\u6743\u9650\uff0c\u5c31\u50cf\u4e00\u4e2a\u5e94\u7528\u5e94\u7528\uff0c\u9664\u975e\u7528\u6237\u7981\u6b62\u67d0\u4e2a\u6570\u636e\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u6bcf\u4e2aobject\u9700\u8981\u643a\u5e26\u5f88\u591a\u4fe1\u606f\uff0c\u4f8b\u5982appid\uff0cusderid\u7b49\u5f85\u3002"),(0,n.kt)("h4",{id:"21548-\u5bb9\u9519\u673a\u5236"},"2.15.4.8 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("h2",{id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"},"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The inability to isolate sodware components from each other is the main reason why many popular programming languages cannot be used for making robust system sodware."),(0,n.kt)("p",{parentName:"blockquote"},"It is essential for security to be able to isolate mistrusting pro- grams from one another, and to protect the host platform from such programs. Isolation is diecult in object-oriented systems because objects can easily become aliased.4\u2014Bryce ","[21]"),(0,n.kt)("p",{parentName:"blockquote"},"Bryce goes on to say that object aliasing is diecult if not impossible to detect in practice, and recommends the use of protection domains (akin to OS processes) to solve this problem."),(0,n.kt)("p",{parentName:"blockquote"},"In a paper on Java Czajkowski, and Dayn`es, from Sun Microsystems, write:"),(0,n.kt)("p",{parentName:"blockquote"},"The only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and to execute each JVM in a separate OS process. This introduces various ineeciencies in resource utilization, which downgrades perfor- mance, scalability, and application startup time. The benefits the language can ocer are thus reduced mainly to portability and improved programmer productivity. Granted these are important, but the full potential of language-provided safety is not realized. Instead there exists a curious distinction between \u201clanguage safety,\u201d and \u201creal safety\u201d. \u2014 ","[28]"),(0,n.kt)("p",{parentName:"blockquote"},"In this paper they introduce the MVM (an extension to the JVM) where their goal is:"),(0,n.kt)("p",{parentName:"blockquote"},"... to turn the JVM into an execution environment akin to an OS. In particular, the abstraction of a process, ocered by modern OSes, is the role model in terms of features; isolation from other computations, resources accountability and control, and ease of termination and resource reclamation."),(0,n.kt)("p",{parentName:"blockquote"},"To achieve this they conclude that:"),(0,n.kt)("p",{parentName:"blockquote"},"... tasks cannot directly share objects, and that the only way for tasks to communicate is to use standard, copying commu- nication mechanisms, ..."),(0,n.kt)("p",{parentName:"blockquote"},"These conclusions are not new. Very similar conclusions were arrived at some two decades earlier by Jim Gray who described the architecture of the Tandem Computer in his highly readable paper Why do computers stop and what can be done about it. He says:"),(0,n.kt)("p",{parentName:"blockquote"},"As with hardware, the key to sodware fault-tolerance is to hier- archically decompose large systems into modules, each mod- ule being a unit of service and a unit of failure. A failure of a module does not propagate beyond the module."),(0,n.kt)("p",{parentName:"blockquote"},"..."),(0,n.kt)("p",{parentName:"blockquote"},"The process achieves fault containment by sharing no state with other processes; its only contact with other processes is via messages carried by a kernel message system. \u2014 ","[38]"),(0,n.kt)("p",{parentName:"blockquote"},"Language which support this style of programming (parallel processes, no shared data, pure message passing) are what Andrews and Schneider ","[4]"," refer to as a \u201cMessage oriented languages.\u201d The language with the delightful name PLITS5 (1978) ","[35]"," is probably the first example of such a programming language:"),(0,n.kt)("p",{parentName:"blockquote"},"The fundamental design decision in the implementation of RIG6 was to allow a strict message discipline with no shared data structures. All communication between user and server messages is through messages which are routed by the Aleph kernel. This message discipline has proved to be very flexible and reliable. \u2014 ","[35]")),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5728\u7ec4\u4ef6\u4e4b\u95f4\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4f20\u9012\u57fa\u672c\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e76\u4e14\u4e0d\u5305\u542b\u4efb\u4f55\u6307\u9488\u548c\u5f15\u7528\u6765\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5b89\u5168\u6027\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h3",{id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027"},"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21611-java-class-loader--security"},"2.16.1.1 java class loader & security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Today's computer users cannot realistically trust that the programs they run are bug or virus free. It is cruicial then that the host be able to run a non-trusted program in isolation from its services. This means that client programs not be able to communicate with services, or that they can only do so under the control of a security policy that decides whether each method call from a program to the servers is permitted."),(0,n.kt)("p",{parentName:"blockquote"},"In comparison, the ability to isolate programs in this fashion is awkward in Java using loader spaces. In Java, each program is allocated its own class loader, which is responsible for loading versions of the classes for the program. An object instantiated from a class loaded by one loader is considered as possesing a distinct type to objects of the same class loaded by another loader. This means that the assignment of an object reference in one domain to a variable in another domain consititues a type error. This model is inconvenient for client-sever comunication, since parameter objects must be serialized (transferred by value).")),(0,n.kt)("p",null,"Java\u7684class loader\u4e0d\u5b89\u5168\uff0c\u6240\u6709\u5177\u6709\u5916\u90e8\u7b26\u53f7\u7684\u865a\u62df\u673a\u52a0\u8f7d\u65b9\u5f0f\uff0c\u5728multitasking \u60c5\u51b5\u4e0b\u90fd\u662f\u8fd9\u6837\uff1f"),(0,n.kt)("p",null,"\u5728OOP\u4e2d\uff0c\u7c7b\u4f3c\u4e4b\u95f4\u5305\u542b\u7ee7\u627f\u5173\u7cfb\uff0c\u4e0d\u540c\u7684\u7c7b\u578b\u4e4b\u95f4\u4e5f\u53ef\u80fd\u5305\u542b\u5f15\u7528\u5173\u7cfb\uff0c\u8fd9\u4f7f\u5f97object\u5f80\u5f80\u4e0d\u662f\u72ec\u7acb\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u5bf9\u8c61\u7684\u7c7b\u578b\u4fe1\u606f\u5305\u542b\u5728\u7c7b\u4f3cClass\u8fd9\u6837\u7684\u5bf9\u8c61\u4e2d\uff0c\u800c\u8fd9\u6837\u7684\u5bf9\u8c61\u88ab\u6240\u6709\u8be5\u7c7b\u578b\u7684\u5bf9\u8c61\u5f15\u7528\uff0c\u6240\u4ee5\u5c31\u5bfc\u81f4\u5bf9\u8c61\u4e0d\u80fd\u5177\u6709\u72ec\u7acb\u3001\u5b8c\u5168\u9694\u79bb\u7684domain space\uff0c\u56e0\u4e3a\u90a3\u6837\u5c06\u5931\u53bb\u7c7b\u578b\u4fe1\u606f\uff0c\u9664\u975e\u5bf9\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u590d\u5236\uff0c\u4f46\u8fd9\u4f1a\u5360\u636e\u5927\u91cf\u7684\u5b58\u50a8\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u540c\u4e00\u4e2adomain space\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b8c\u5168\u4e0d\u5b58\u5728\u76f8\u4e92\u5f15\u7528\uff0c\u90a3\u6837\u8bed\u8a00\u662f\u53ef\u4ee5\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u4f46\u662f\u4e00\u65e6\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u83b7\u5f97\u5f15\u7528\u7684\u5bf9\u8c61\u5c31\u53ef\u4ee5\u8c03\u7528\u6240\u6709\u8be5\u5bf9\u8c61\u7684\u516c\u5171\u65b9\u6cd5\u3002\u867d\u7136\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u516c\u5171\u5c5e\u6027\u6765\u63a7\u5236\u8bbf\u95ee\u6743\u9650\uff0c\u4f46\u8fd9\u5f80\u5f80\u53ea\u662f\u9488\u5bf9\u7c7b\u578b\u672c\u8eab\u7684\u7279\u6027\uff0c\u800c\u4e0d\u80fd\u63a7\u5236\u5e94\u7528\u7a0b\u5e8f\u903b\u8f91\u4e0d\u5c0f\u5fc3\u5c06\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u7ed9\u975e\u6cd5\u7684\u5bf9\u8c61\u3002\u4f8b\u5982\u5728\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\uff0c\u6709\u65f6\u5019\u53ea\u662f\u4e3a\u4e86\u83b7\u53d6\u6570\u636e\uff0c\u800c\u7b80\u4fbf\u5730\u628a\u4e00\u4e2a\u6574\u4e2a\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u8fc7\u53bb\uff0c\u8fd9\u5c31\u5e26\u6765\u4e86\u98ce\u9669\uff0c\u56e0\u4e3a\u83b7\u5f97\u8fd9\u4e2a\u5f15\u7528\u7684\u7a0b\u5e8f\u4e0d\u4f46\u53ef\u4ee5\u83b7\u53d6\u53d8\u91cf\u7684\u503c\uff0c\u5b83\u8fd8\u53ef\u4ee5\u975e\u6cd5\u65b9\u6cd5\u6240\u6709\u7684\u516c\u5171\u65b9\u6cd5\u3002\u5f53\u6574\u4e2a\u7a0b\u5e8f\u90fd\u5c5e\u4e8e\u4e00\u4e2a\u5f00\u53d1\u5546\u65f6\uff0c\u8fd9\u6ca1\u95ee\u9898\uff0c\u4f46\u662f\u5728multitasking\u7684\u73af\u5883\u4e0b\uff0c\u5c31\u5b58\u5728\u5b89\u5168\u95ee\u9898\u3002\u4e0d\u540cDomain\u7684object\u53ef\u4ee5\u901a\u8fc7\u5168\u5c40\u53d8\u91cf\u7b49\u65b9\u5f0f\u83b7\u53d6\u5230\u4e00\u4e9b\u4e0d\u5c5e\u4e8e \u81ea\u5df1Domain\u7684\u5bf9\u8c61\uff0c\u4f8b\u5982\u901a\u8fc7\u4e00\u4e2a\u516c\u5171\u7684\u4e8b\u4ef6\u7ba1\u7406\u5668\uff0c\u4efb\u4f55task\u53ef\u80fd\u90fd\u53ef\u4ee5\u83b7\u5f97\u6574\u4e2a\u4e8b\u4ef6\u961f\u5217\u3002"),(0,n.kt)("p",null,"\u4fdd\u8bc1\u6240\u6709\u7684object\u4e4b\u95f4\u7684\u901a\u8fc7\u90fd\u901a\u8fc7\u4f20\u9012\u503c\uff0c\u6216\u8005\u590d\u5236\u5bf9\u8c61\u7684\u65b9\u5f0f\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\uff0c\u4f46\u662f\u8fd9\u6837\u53c8\u4f1a\u7ed9\u7f16\u7a0b\u5e26\u6765\u4e0d\u4fbf\u3002"),(0,n.kt)("h4",{id:"21612-java-applets"},"2.16.1.2 Java applets"),(0,n.kt)("p",null,"Java\u6709\u4e00\u4e9b\u9ad8\u7ea7\u7684security model\uff0c\u5176\u4e2d\u5305\u62ecprotection domian\uff0c\u5176\u8bbe\u8ba1\u76ee\u6807\u662f\u5bf9applets\u8fdb\u884c\u9694\u79bb\u3002class loader\u53ea\u662fjava\u7684\u57fa\u672c\u9694\u79bb\u673a\u5236\u3002Java\u4e2d\u7684\u6bcf\u4e2aapplet\u62e5\u6709\u81ea\u5df1\u72ec\u7acb\u7684class loader\uff0c\u6bcf\u4e2a\u72ec\u7acb\u7684class loader\u4f1a\u5728\u81ea\u5df1\u7684protection domain\u52a0\u8f7d\u72ec\u7acb\u548c\u79c1\u6709\u7248\u672c\u7684class\u3002Java\u4f1a\u4fdd\u8bc1\u540c\u4e00\u4e2aclass\u5728\u4e0d\u540c\u7684protection domain\u4e2d\u6709\u4e0d\u540c\u7684\u7684\u7c7b\u578b\uff08distinct type\uff09\uff0c\u56e0\u6b64\u7c7b\u578b\u662f\u9694\u79bb\u673a\u5236\u7684\u57fa\u7840\uff0c\u56e0\u4e3a\u5c06\u4e00\u4e2aloader space\u7684\u5bf9\u8c61\u5f15\u7528\u8d4b\u503c\u7ed9\u53e6\u4e00\u4e2aloader space\u4e2d\u76f8\u540c\u540d\u79f0\u7684class\u4f1a\u5bfc\u81f4\u7c7b\u578b\u9519\u8bef\u3002\u8fd9\u662f\u4e00\u79cd\u52a8\u6001\u7c7b\u578b\uff08dynamic typing\uff09\u68c0\u67e5\u7cfb\u7edf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u65b0\u7684\u7c7b\u578b\u673a\u5236\u7531\u8fd0\u884c\u65f6\u63d0\u4f9b\u800c\u4e0d\u662f\u7f16\u8bd1\u65f6\u53ef\u4ee5\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u7684\u95ee\u9898\u662f\uff0c\u6240\u6709\u7cfb\u7edf\u7ea7\u522b\u7684\u7c7b\u578b\uff08\u4f8b\u5982java.lang\u7b49\u7b49\uff09\u662f\u5171\u4eab\u7684\uff0c\u56e0\u6b64\u8fd8\u662f\u4f1a\u5bfc\u81f4aliasing\u3002\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u7ee7\u627f\u81eaPasswordID\u7684Password\u7c7b\uff0c\u4e24\u4e2aclass loader\u5206\u522b\u521b\u5efa\u81ea\u5df1space\u52a0\u8f7dPassword\u7c7b\uff0c\u4f46\u662f\u6ca1\u6709\u52a0\u8f7dPasswordID\u7c7b\uff0c\u8fd9\u4e2a\u65f6\u5019\u4f7f\u7528\u5230\u7684PasswordID\u7c7b\u4f1a\u7531system loader\u8fdb\u884c\u52a0\u8f7d\uff0c\u6b64\u65f6\u5982\u679c\u4e24\u4e2aspace\u7684\u5f15\u7528\u901a\u8fc7PasswordID\u7c7b\u578b\u8fdb\u884c\u8d4b\u503c\u4f20\u9012\uff0c\u5219\u5c31\u4f1a\u9020\u6210aliasing\u3002"),(0,n.kt)("h4",{id:"21613-mvm"},"2.16.1.3 MVM"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Improved scalability results from an aggressive application of the main design principle of MVM: share as much of the runtime as possible among applications and replicate everything else.")),(0,n.kt)("p",null,"Java class loader\u53ea\u80fd\u505a\u5230\u7c7b\u578b\u5b89\u5168\uff0c\u6240\u4ee5\u5e94\u7528\u9700\u8981\u4fdd\u8bc1Java\u6587\u4ef6\u7684\u6765\u6e90\u662f\u53ef\u9760\u7684\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The existing application isolation mechanisms, such as class loaders ","[16]",", do not guarantee that two arbitrary applications executing in the same instance of the JVM will not interfere with one another. Such interference can occur in many places. For instance, mutable parts of classes can leak object references and can allow one application to prevent the others from invoking certain methods. The internalized strings introduce shared, easy to capture monitors. Sharing event and finalization queues and their associated handling threads can block or hinder the execution of some application. Monopolizing of computational resources, such as heap memory, by one application can starve the others.")),(0,n.kt)("p",null,"\u56e0\u6b64\u552f\u4e00\u7684\u5b89\u5168\u65b9\u5f0f\u662f\u4fdd\u8bc1\u6bcf\u4e2aapp\u53ea\u8fd0\u884c\u4e8e\u4e00\u4e2a\u72ec\u7acb\u7684JVM\u73af\u5883\uff0c\u4f46\u8fd9\u4f1a\u5bfc\u81f4\u8d44\u6e90\u7684\u5229\u7528\u7387\u4f4e\uff0c\u6027\u80fd\u3001\u53ef\u4f38\u7f29\u6027\u548c\u542f\u52a8\u65f6\u95f4\u7684\u95ee\u9898\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Their existence perpetuates the current situation, where the only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and execute each JVM in a separate OS process.")),(0,n.kt)("p",null,"\u9488\u5bf9\u591a\u5e94\u7528\u7684\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u7ea7\u522b\u7684\u5b89\u5168\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"language safety"),(0,n.kt)("li",{parentName:"ul"},"real safety")),(0,n.kt)("p",null,"\u524d\u8005\u666e\u904d\u7f3a\u4e4f\uff0c\u5df2\u6709\u7684\u65b9\u6848\u90fd\u6216\u591a\u6216\u5c11\u9650\u5236\u8bed\u8a00\u6216\u8005\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u540e\u8005\u5219\u5927\u591a\u6570\u4f9d\u8d56\u4e8ehardware-assisted\uff0c OS-style\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Three goals dictate our design choices: (i) no form of interference among executing applications should be allowed, (ii) an illusion of having the JVM (with all core APIs and standard mechanisms) to itself should be provided for each task, and (iii) MVM should perform and scale well. The motivation is to make the system attractive from the practical point of view."),(0,n.kt)("p",{parentName:"blockquote"},"The key design principle of MVM is: examine each component of the JVM and determine whether sharing it among tasks can lead to any interference among them. In some cases this approach yields a clear verdict that the given component can be shared without jeopardizing the safety of the tasks. Other components are either replicated on a per-task basis or made ",(0,n.kt)("em",{parentName:"p"},"task re-entrant"),", that is, usable by many tasks without causing any inter-task interference. This builds on the ideas described in ","[6]",". The technique presented in that work \u2013 replicating static fields and class monitors \u2013 has been generalized in MVM to classify all components of the JVM as \u2018shareable\u2019 or \u2018non-shareable\u2019.")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"A simple way of explaining the model is to first think of a straightforward approach to multitasking in the JavaTM application environment: all applications share all classes. The essential observation at this point is that a safe language already has some built-in support for isolating applications: data references cannot be forged, unsafe casting is not allowed, and jumping to an arbitrary code location is impossible. Consequently, the only data exchange mechanism (barring explicit inter-application communication) is through static fields. This can only occur either by explicit manipulation of static fields or by invoking methods which access these fields. It can lead to unexpected and incorrect behavior depending on how applications use the same class with static fields."),(0,n.kt)("p",{parentName:"blockquote"},"The above observation suggests an approach for achieving isolation among applications: to maintain a separate copy of the static fields for each class, one copy per application that uses the given class. However, only one copy of the ",(0,n.kt)("em",{parentName:"p"},"code")," of any class should exist in the system, regardless of how many applications use it, since methods cannot transfer data from one application to another once the static fields communication channel is removed. (Dealing with covert communication channels is beyond the scope of this paper). Our proposal effectively gives each application the illusion that it has exclusive access to static fields while in reality each application has a separate copy of these fields.")),(0,n.kt)("h3",{id:"2162-program-security-mechanisms"},"2.16.2 Program Security Mechanisms"),(0,n.kt)("p",null,"\u6709\u8bb8\u591a\u5de5\u4f5c\u7528\u4e8e\u5bf9\u7a0b\u5e8f\u96c6\u6210access control\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e4b\u95f4\u6dfb\u52a0\u4e00\u4e2asecurity policy checker\uff0c\u4f8b\u5982Java\u7684\u7cfb\u7edf\u7c7b\u5305\u542b\u4e00\u4e2a\u5bf9SecurityManager\u5bf9\u8c61\u7684\u8c03\u7528\u7528\u4e8e\u68c0\u67e5\u7ebf\u7a0b\u4e4b\u95f4\u7684\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u4e9b\u5b89\u5168\u7b56\u7565\u5219\u7531\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u652f\u6301\uff0c\u7f16\u7a0b\u8bed\u8a00\u5e26\u6709 \u4e00\u5b9a\u7684\u8bbf\u95ee\u6743\u9650\u7684notion\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e9b\u5bf9\u8c61\u5bf9\u53e6\u4e00\u4e9b\u5bf9\u8c61\u7684\u8bbf\u95ee\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u4eca\u66f4\u591a\u7684\u8bed\u8a00\u8bbe\u8ba1\u8005\u5219\u66f4\u591a\u503e\u5411\u4e8e\u5c06\u5b89\u5168\u4e0e\u7c7b\u578b\u7b49\u4ef7\uff0c\u8fd9\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u9759\u6001\u6216\u8005\u52a8\u6001\u68c0\u67e5\u6280\u672f")),(0,n.kt)("h4",{id:"21621-cfi"},"2.16.2.1 CFI"),(0,n.kt)("p",null,"Current software attacks often build on exploits that subvert ma- chine-code execution. The enforcement of a basic safety property, Control-Flow Integrity (CFI), can prevent such attacks from arbi- trarily controlling program behavior. CFI enforcement is simple, and its guarantees can be established formally, even with respect to powerful adversaries. Moreover, CFI enforcement is practical: it is compatible with existing software and can be done efficiently using software rewriting in commodity systems. Finally, CFI pro- vides a useful foundation for enforcing further security policies, as we demonstrate with efficient software implementations of a pro- tected shadow call stack and of access control for memory regions."),(0,n.kt)("h4",{id:"21622-sfi"},"2.16.2.2 SFI"),(0,n.kt)("p",null,"\u5185\u5b58\u5b89\u5168\u662f\u6700\u5927\u6613\u53d7\u4e25\u91cd\u653b\u51fb\u7684\u6765\u6e90\uff0c\u5927\u7ea670%\uff0c\u4e00\u4e9b\u6000\u6709\u6076\u610f\u7684\u653b\u51fb\u8005\u4f8b\u5982\u4e00\u4e9b\u5185\u5b58\u5b89\u5168\u7684bug\u6765\u653b\u51fb\u8f6f\u4ef6\uff0cSoftware sandboxing\u6216\u8005software-based fault isolation (SFI) \u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u8fd9\u4e9b\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cdbug\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7684\u4e00\u4e9b\u4f8b\u5b50\uff0c\u5982OS kernels\uff0cdatabases, browsers , language runtime, and serverless clouds.")),(0,n.kt)("p",null,"SFI\u5f3a\u5236\u5c06\u672a\u4fe1\u4efb\u7684\u4ee3\u7801\u9694\u79bb\u5230\u81ea\u5df1\u7684\u6c99\u76d2\u73af\u5883\uff0c\u5e76\u4fdd\u8bc1\u6bcf\u6b21\u5185\u5b58\u8bbf\u95ee\u90fd\u88ab\u52a8\u6001\u68c0\u67e5\u3002\u4f8b\u5982NaCI\u548cWasm\u90fd\u6709\u63aa\u65bd\u4fdd\u8bc1\u672a\u4fe1\u4efb\u7684\u7ec4\u4ef6\u7684\u5185\u5b58 \u8bbf\u95ee\u90fd\u5904\u4e8e\u81ea\u5df1\u7684\u6c99\u76d2\u533a\u57df\uff0c\u5e76\u4e14\u6dfb\u52a0\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u68c0\u67e5\u4ee5\u4fdd\u8bc1\u6240\u6709\u7684control flow\u90fd\u88ab\u9650\u5b9a\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u8def\u57fa\u5185\u90e8\u3002"),(0,n.kt)("p",null,"\u5b89\u5168\u548c\u6027\u80fd\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u8fd0\u884c\u65f6\u4ee3\u7801\u8fd8\u5f97\u4fdd\u8bc1\u8fd9\u79cd\u68c0\u67e5\u672c\u8eab\u662f\u5b89\u5168\u548c\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u901a\u5e38\u673a\u5236\u5c31\u6bd4\u8f83\u590d\u6742\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u6f0f\u6389\u7684\u68c0\u67e5\u90fd\u53ef\u80fd\u5bfc\u81f4\u653b\u51fb\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u5b89\u5168\u6027\u548c\u6b63\u786e\u6027\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u6b63\u786e\u6027\u548c\u8ba1\u7b97\u91cf\u4e5f\u662f\u5f71\u54cd\u5b89\u5168\u548c\u6027\u80fd\u7684\u91cd\u8981\u6765\u6e90")),(0,n.kt)("p",null,"\u5728\u4e00\u4e9b\u6c99\u76d2\u5e94\u7528\u67b6\u6784\u6bd4\u8f83\u91cd\u7684\u5e94\u7528\u4e2d\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u53ef\u80fd\u5360\u636e\u4e86\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u4f8b\u5982Firefox\u53ef\u80fd\u56e0\u4e3a\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u5f71\u54cd\u4e86\u8f83\u5927\u7684\u6027\u80fd\u800c\u4e0d\u5f97\u4e0d\u5f03\u6389\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u3002"),(0,n.kt)("h5",{id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"},"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u4e0b\u4ee3\u7801\uff0c\u5728\u6d4f\u89c8\u5668\u4e2d\u6267\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u7684\u5b57\u4f53\u6e32\u67d3\u5e93\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"void onPageLoad(int* text) {\n ...\n int* screen = ...; // stored in r12 \n int* temp_buf = ...; \n gr_get_pixel_buffer(text, temp_buf); \n memcpy(screen, temp_buf, 100);\n ...\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5\u4ee3\u7801\u8c03\u7528libgraphite\u5e93\u7684gr_get_pixel_buffer\u65b9\u6cd5\u5c06\u6587\u672c\u6e32\u67d3\u5230\u4e00\u4e2a\u4e34\u65f6\u7684buffer\u4e2d\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u4e34\u65f6buffer\u7684\u5185\u5bb9\u62f7\u8d1d\u5230\u5c4f\u5e55\u53d8\u91cf\u4e2d\u7528\u4e8e\u6e32\u67d3\u3002\u4f7f\u7528SFI\u5c06\u5e93\u7684\u5185\u5b58\u9694\u79bb\u8d77\u6765\uff0c\u5373\u5185\u5b58\u9694\u79bb\u673a\u5236\u4f7f\u5f97gr_get_pixel_buffer\u4e0d\u80fd\u591f\u83b7\u53d6\u4efb\u4f55onPageLoad\u6216\u5176\u4ed6\u90e8\u5206\u7684\u6d4f\u89c8\u5668\u5806\u548c\u6808\u5185\u5b58\u3002\u7136\u800c\u4e0d\u4fe1\u7684\u4e8b\uff0c\u5355\u7eaf\u7684\u5185\u5b58\u9694\u79bb\u662f\u4e0d\u591f\u7684\uff0c\u5982\u679c\u6574\u4e2a\u5207\u6362\u4ec5\u4ec5\u662f\u4e00\u4e2a\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u653b\u51fb\u8005\u53ef\u80fd\u8fdd\u80cc\u65b9\u6cd5\u8c03\u7528\u7684\u7ea6\u5b9a\u4ee5\u6253\u7834\u9694\u79bb\uff0c\u51e0\u79cdlibgraphite\u53ef\u4ee5\u4f7f\u7528\u7684\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Clobbering Callee-Save Registers"),"\uff1a\u5047\u8bbe\u4e0a\u8ff0\u7684screen\u53d8\u91cf\u7f16\u8bd1\u5230\u5bc4\u5b58\u5668r12\u4e2d\uff0c\u5728System V\u8c03\u7528\u7ea6\u5b9a\uff08calling convention\uff09\u4e2d\uff0cr12\u662f\u4e00\u4e2acallee-saved register\uff0c\u6240\u4ee5\u5982\u679cgr_get_pixel_buffer\u52ab\u6301r12\uff0c\u5b83\u53ef\u4ee5\u5728\u8c03\u7528\u8fd4\u56de\u4e4b\u524d\u83b7\u53d6\u8be5\u5bc4\u5b58\u5668\u6307\u5411\u7684\u5b9e\u9645\u5185\u5b58\u7684\u503c\uff0c\u8fd8\u53ef\u4ee5\u5c06\u8be5\u5bc4\u5b58\u5668\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u8be5\u6c99\u76d2\u4e2d\u7684\u5185\u5b58\u5730\u5740\uff0c\u8fd9\u6837\u5728\u540e\u9762\u7684memcpy\u6307\u4ee4\u4e2d\u8fdb\u884c\u590d\u5236\uff0c\u8fd9\u5c31\u53ef\u4ee5\u7ed9\u653b\u51fb\u8005\u4e00\u79cd\u65b9\u6cd5\u4f7f\u5b83\u53ef\u4ee5\u52ab\u6301\u6d4f\u89c8\u5668\u7684control flow\u3002\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u5f62\u5f0f\u7684\u653b\u51fb\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1callee-save register integrity\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u5728\u8fd4\u56de\u4e4b\u524d\u5c06 callee-save register\u91cd\u7f6e\u4e3a\u539f\u6765\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Leaking Scratch Registers"),"\uff1a\u540c\u6837\u7684\uff0c\u5176\u4ed6scratch registers\u4e5f\u53ef\u80fd\u4f1a\u6cc4\u9732\u654f\u611f\u4fe1\u606f\u7ed9\u6c99\u76d2\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u4fdd\u5b58\u4e86\u4e00\u4e2a\u5bc6\u94a5\u5728scratch register\u4e2d\uff0c\u4ec5\u4ec5\u662f\u5185\u5b58\u9694\u79bb\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u53d7\u653b\u51fb\u8005\u63a7\u5236\u7684libgraphite\u4e0d\u4f1a\u8bfb\u53d6\u548c\u4f7f\u7528\u8fd9\u4e9b\u5bc4\u5b58\u5668\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u6cc4\u9732\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1scratch register confidentiality"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Reading and corrupting stack frames"),"\uff1a\u6700\u540e\uff0c\u5982\u679c\u5bbf\u4e3b\u548c\u6c99\u76d2\u5e94\u7528\u7a0b\u5e8f\u5171\u4eab\u4e00\u4e2a\u6808\uff0c\u653b\u51fb\u8005\u5c31\u53ef\u80fd\u8bfb\u53d6\u6216\u8005 \u7834\u574f\u6808\u4e2d\u7684\u6570\u636e\u6216\u8005\u6307\u9488\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u653b\u51fb\uff0c\u9700\u8981stack frame encapsulation\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u4e0d\u80fd\u8bbf\u95ee\u8c03\u7528\u6808\u3002")),(0,n.kt)("h5",{id:"216222-heavyweight-transitions"},"2.16.2.2.2 Heavyweight Transitions"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684SFI\u90fd\u4f7f\u7528\u6bd4\u8f83\u91cd\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u6280\u672f\uff0c\u4f8b\u5982NaCI\u4ee5\u53caWasm\u7f16\u8bd1\u5668Lucet\uff0c\u8fd9\u79cd\u6280\u672f\u5c06\u6240\u6709\u7684\u8c03\u7528\u548c\u8fd4\u56de\u503c\u90fd\u5c01\u88c5\u8d77\u6765\u4ee5\u5e94\u5bf9\u524d\u9762\u63d0\u5230\u7684\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u6837\u7684\u5207\u6362\u90fd\u662f\u5b89\u5168\u7684\uff0c\u4ed6\u4eec\u63d0\u4f9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Callee-save register integrity"),"\uff1a\u5728\u8c03\u7528\u7684\u65f6\u5019\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3aSpringboard\u7684\u4ee3\u7801\u6765\u5305\u88c5calls\uff0c\u5373\u5c06\u5bc4\u5b58\u5668\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5e94\u7528\u5185\u5b58\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u72ec\u7acb\u7684\u6808\u4e2d\uff1b\u5f53\u7531\u5e93\u8fd4\u56de\u5230\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3atrampoline\u7684\u4ee3\u7801\u5305\u88c5returns\uff0c\u5e76\u91cd\u7f6e\u5bc4\u5b58\u5668\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Scratch register confidentiality"),"\uff1a\u7531\u4e8e\u4efb\u4f55Scratch register \u90fd\u53ef\u80fd\u5305\u542b\u654f\u611f\u4fe1\u606f\uff0c\u6240\u4ee5Springboard\u5728\u5207\u6362\u5230\u6c99\u76d2\u4e4b\u524d\u4f1a\u6e05\u9664\u6240\u6709\u7684Scratch register\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Stack frame encapsulaton"),"\uff1a\u5927\u90e8\u5206\u7684SFI\u4f1a\u5bf9\u5bbf\u4e3b\u7a0b\u5e8f\u548c\u6c99\u76d2\u4ee3\u7801\u8bbe\u7f6e\u72ec\u7acb\u7684\u8c03\u7528\u6808\uff0c\u4ee5\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u65e0\u6cd5\u8bbf\u95ee\u53d7\u4fe1\u4efb\u7684\u8c03\u7528\u6808\u3002\u8be5\u673a\u5236\u540c\u6837\u7531Springboard\u548ctrampoline\u6765\u5b9e\u73b0\uff1a\u9996\u5148\uff0c\u8ffd\u8e2a\u6240\u6709\u6808\u6307\u9488\uff0c\u7136\u540eSpringboard\u4f1a\u5c06\u8fd9\u4e9b\u6808\u4e0a\u7684\u53c2\u6570\u5168\u90e8\u590d\u5236\u5230\u6c99\u76d2\u4ee3\u7801\u7684\u8c03\u7528\u6808\u4e2d\uff0c\u6700\u540etrampoline\u4f1a\u8ffd\u8e2a\u5b9e\u9645\u7684\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5185\u5b58\u4e2d\uff0c\u8fd9\u6837\u6c99\u76d2\u4ee3\u7801\u5e93\u5c06\u65e0\u6cd5\u7834\u574f\u5b83\u3002")),(0,n.kt)("p",null,"\u7531\u4e0a\u9762\u7684\u8fc7\u7a0b\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u673a\u5236\u53ef\u4ee5\u4fdd\u5b58\u5207\u6362\u7684\u5b89\u5168\uff0c\u4f46\u662f\u5177\u6709\u4e24\u4e2a\u6bd4\u8f83\u4e25\u91cd\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u5b83\u4eec\u7ed9SFI\u5e26\u6765\u8f83\u5927\u7684\u8d1f\u62c5\uff0c\u76f8\u6bd4\u4e8e\u5355\u7eaf\u7684\u65b9\u6cd5\u8c03\u7528\u8ba1\u7b97\u91cf\u8981\u5927\u5f97\u591a\uff0c\u8fd9\u79cd\u4fdd\u5b88\u5730\u5207\u6362\u4f1a\u5e26\u6765\u5927\u91cf\u7684\u4e0d\u5fc5\u8981\u7684\u72b6\u6001\u4fdd\u5b58\u548c\u6e05\u9664\uff0c\u51e0\u4e4e\u76f8\u5f53\u4e8e\u91cd\u65b0\u5b9e\u73b0OS\u8fdb\u7a0b\u7684\u5f88\u591a\u57fa\u7840\u529f\u80fd\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cSpringboard\u548ctrampoline\u5fc5\u987b\u9488\u5bf9\u4e0d\u540c\u7684\u5e73\u53f0\u5b9a\u5236\uff0c\u56e0\u4e3a\u6bcf\u4e2a\u5e73\u53f0\u6709\u4e0d\u540c\u7684calling convention\uff0c\u4efb\u4f55\u5b9e\u73b0\u9519\u8bef\u5c31\u53ef\u80fd\u5bfc\u81f4\u6c99\u76d2\u80fd\u591f\u9003\u79bb\u8fd9\u79cd\u653b\u51fb\u3002")),(0,n.kt)("h4",{id:"21623-object--space-model"},"2.16.2.3 object space model"),(0,n.kt)("h4",{id:"21624-lua-environment"},"2.16.2.4 lua Environment"),(0,n.kt)("h4",{id:"21625-erlang-\u9694\u79bb\u673a\u5236"},"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236"),(0,n.kt)("h3",{id:"2163-webassembly-security"},"2.16.3 Webassembly Security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://webassembly.org/docs/security/"},"https://webassembly.org/docs/security/"))),(0,n.kt)("h4",{id:"21631-module--cfi"},"2.16.3.1 Module & CFI"),(0,n.kt)("h4",{id:"21632-memory-safety"},"2.16.3.2 Memory safety"),(0,n.kt)("h4",{id:"21633-isolation-without-taxation"},"2.16.3.3 Isolation without Taxation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Heavyweight Transitions\u662f\u4fdd\u5b88\u7684\uff0c\u56e0\u4e3a\u5b83\u4eec\u5bf9\u6c99\u76d2\u4ee3\u7801\u7684\u8fd0\u884c\u7684\u7ed3\u6784\u505a\u4e86\u6bd4\u8f83\u5c11\u7684\u5047\u8bbe\u3002\u4f46NaCI\u548cWasm\u901a\u8fc7Springboard\u548ctrampoline\u7684\u673a\u5236\u786e\u5b9e\u4e5f\u7ed9\u6c99\u76d2\u4ee3\u7801\u5e93\u5f3a\u5236\u589e\u52a0\u4e86\u4e00\u5b9a\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7bc7\u8bba\u6587\u6307\u51fa\u901a\u8fc7\u8fdb\u4e00\u6b65\u5bf9\u6c99\u76d2\u4ee3\u7801\u589e\u52a0\u9002\u5f53\u7684\u7ed3\u6784\uff0c\u53ef\u4ee5\u907f\u514d\u6389\u51e0\u4e4e\u6240\u6709\u524d\u9762\u63d0\u5230\u7684\u7531Heavyweight Transitions\u5e26\u6765\u7684\u989d\u5916\u5de5\u4f5c\uff0c\u4f7f\u5f97\u6574\u4e2a\u4e0a\u4e0b\u6587\u5207\u6362\u66f4\u7b80\u5355\u3001\u8ba1\u7b97\u66f4\u5feb\uff0c\u540c\u65f6\u6613\u4e8e\u79fb\u690d\u3002\u5b83\u66f4\u50cf\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u62bd\u8c61\u3001\u53ef\u7ec4\u5408\u7684\u7f16\u7a0b\u8bed\u8a00\u3002\u9996\u5148\u63d0\u51fa\u80fd\u591f \u5b9e\u73b0zero-cost\u5207\u6362\u7684\u6761\u4ef6\u3002"),(0,n.kt)("h5",{id:"216331-zero-cost-conditions"},"2.16.3.3.1 Zero-cost conditions"),(0,n.kt)("p",null,"\u5047\u8bbe\u6c99\u76d2\u5e93\u4ee3\u7801\u662f\u6709\u4e00\u4e9b\u51fd\u6570\u53ca\u5176\u671f\u671b\u7684\u53c2\u6570\u7ec4\u6210\uff0c\u8fd9\u7bc7\u8bba\u6587\u63d0\u51fa\u4e86\u4e00\u4e9b\u6761\u4ef6\uff0c\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\uff08\u5373\u5305\u542b\u8fd9\u79cd\u7ed3\u6784\uff09\u7684\u7b2c\u4e09\u65b9Wasm\u4ee3\u7801\u53ef\u4ee5\u88ab\u5f62\u5f0f\u5316\u7684\u9a8c\u8bc1\uff0c\u4ece\u800c\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u7684\u5b89\u5168\u3002\u8fd9\u4e9b\u6761\u4ef6\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Calee-save register restoration"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Well-bracketed control-flow"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Type-directed forward-edge CFI"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Local state encapsulation"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Confidentiality"),"\uff1a")),(0,n.kt)("p",null,"\u8fd9\u79cd\u65b9\u6cd5\u7684\u4ef7\u503c\u5728\u4e8e\u5b83\u80fd\u591f\u4ee5\u4e00\u79cd\u5f62\u5f0f\u5316\u7684\u7ed3\u6784\u6765\u63cf\u8ff0\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u4ee3\u7801\uff0c\u4f7f\u5f97\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u8fd9\u6837\u7684\u7ed3\u6784\u53bb\u6784\u9020\u7ec4\u4ef6\uff0c\u5219\u5176\u751f\u6210\u7684Wasm\u4ee3\u7801\u53ef\u4ee5\u662f\u88ab\u5f62\u5f0f\u5316\u9a8c\u8bc1\u7684\u3002\u8fd9\u4e9b\u6dfb\u52a0\u7684\u989d\u5916\u7ed3\u6784\u4e0d\u4ec5\u80fd\u591f\u7528\u4e8e\u5f62\u5f0f\u5316\u9a8c\u8bc1\uff0c\u8fd8\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u907f\u514d\u989d\u5916\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u8ba1\u7b97\u91cf\uff0c\u8fd9\u4e9b\u6761\u4ef6\u6240\u7ea6\u675f\u7684\u5b9e\u9645\u4e0a\u662f\u5e0c\u671b\u80fd\u591f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u6b63\u5e38\u7684\u9694\u79bb\u539f\u5219\uff0c\u5373\u4e0d\u8981\u53bb\u8bbf\u95ee\u8d85\u51fa\u81ea\u5df1\u8303\u56f4\u7684\u5185\u5b58\u548c\u4ee3\u7801\uff0c\u4e0d\u8981\u53bb\u901a\u8fc7\u5bc4\u5b58\u5668\u548c\u8fd4\u56de\u5730\u5740\u7b49\u53bb\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u7684control flow\u3002"),(0,n.kt)("p",null,"\u5373\u5982\u679c\u6211\u4eec\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u662f\u5b89\u5168\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u4e3a\u4e86\u9694\u79bb\u53bb\u505a\u4e00\u4e9b\u989d\u5916\u7684\u4fdd\u5b58\u6216\u8005\u6e05\u9664\u5de5\u4f5c\u3002\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u9700\u8981\u7ba1\u7406\u5458\u4fdd\u8bc1\u4e0d\u5f15\u5165\u6ca1\u6709\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u3002"),(0,n.kt)("h3",{id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"},"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"),(0,n.kt)("p",null,"\u591a\u5e94\u7528\u73af\u5883\u4e0b\u5e94\u7528\u7a0b\u5e8f\u7684\u9694\u79bb\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7eaf\u811a\u672c\u8bed\u8a00"),"\uff0c\u8fd9\u79cd\u8bed\u8a00\u4e0d\u5141\u8bb8\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4efb\u4f55\u5f62\u5f0f\u7684\u80fd\u591f\u5305\u542b\u4e8c\u8fdb\u5236\u5f62\u5f0f\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u7ec4\u4ef6\u80fd\u591f\u8c03\u7528\u7684\u5168\u90e8\u4e8c\u8fdb\u5236\u4ee3\u7801\u5747\u6765\u81ea\u4e8e\u5bbf\u4e3b\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ea\u9700\u8981\u7b80\u5355\u7684\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff1a1\uff09\u4e0d\u80fd\u8bbf\u95ee\u5168\u5c40\u5171\u4eab\u53d8\u91cf\uff0c2\uff09\u4e0d\u80fd\u5171\u4eab\u8c03\u7528\u6808\uff0c\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u89e3\u51b3\u591a\u5e94\u7528\u5b89\u5168\u6027\u95ee\u9898\u3002\u8fd9\u79cd\u8bed\u8a00\u7684\u4ee3\u8868\u662fErlang\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u6240\u6709\u4ee3\u7801\u90fd\u662fErlang\u811a\u672c\uff0c\u88abErlang\u89e3\u91ca\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u975e\u811a\u672c\u8bed\u8a00"),"\uff0c\u975e\u811a\u672c\u8bed\u8a00\u5373\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4e8c\u8fdb\u5236\u4ee3\u7801\u7684\u8bed\u8a00\uff0c\u5305\u62ec\u6d4f\u89c8\u5668\u4e2d\u7684NaCI\u8fd9\u79cd\u76f4\u63a5\u8c03\u7528\u4e8c\u8fdb\u5236\u4ee3\u7801\u5e93\u7684\u7cfb\u7edf\uff0c\u4e5f\u5305\u62ec\u50cfWasm\u8fd9\u79cd\u867d\u7136\u4ee5\u4e2d\u95f4IR\u5f62\u5f0f\u5b58\u50a8\uff0c\u4f46\u662f\u8fd9\u4e9b\u4e2d\u95f4IR\u662f\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u6307\u4ee4\u7684\uff0c\u6240\u4ee5\u5728\u88ab\u52a8\u6001\u7f16\u8bd1\u4e4b\u540e\u662f\u53ef\u4ee5\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u5185\u5b58\u7684\uff0c\u7b2c\u4e09\u79cd\u662f\u50cfPython\u8fd9\u79cd\uff0c\u7b2c\u4e09\u65b9Python\u5e93\u672c\u8eab\u662f\u53ef\u4ee5\u8c03\u7528C\u5e93\u4ee3\u7801\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("p",null,"\u603b\u800c\u8a00\u4e4b\uff0c\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u8fd8\u8981\u907f\u514d\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u8bbf\u95ee\u5bc4\u5b58\u5668\uff0c\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u80fd\u591f\u4ee5\u67d0\u79cd\u5f62\u5f0f\u5305\u542b\u5bc4\u5b58\u5668\uff0c\u5219\u53ef\u4ee5\u7ed5\u5f00\u5185\u5b58\u9694\u79bb\u3002CreateScript\u672c\u8eab\u5c5e\u4e8e\u7eaf\u811a\u672c\u578b\u8bed\u8a00\uff0c\u4f46\u662f\u96c6\u6210\u5230\u7b2c\u4e09\u65b9app\u4e2d\u5219\u4f1a\u5f15\u5165\u7b2c\u4e09\u65b9\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u4ee3\u7801\u3002\u6240\u4ee5\u540e\u671f\u5728\u5904\u7406\u8fd9\u90e8\u5206\u7684\u65f6\u5019\u8fd8\u662f\u9700\u8981\u8003\u8651\u4f20\u7edf\u7684SFI\u6280\u672f\u3002"),(0,n.kt)("h4",{id:"21641-\u5bf9\u8c61\u9694\u79bb"},"2.16.4.1 \u5bf9\u8c61\u9694\u79bb"),(0,n.kt)("p",null,"\u6ca1\u6709\u5168\u5c40\u53d8\u91cf\uff0c\u5168\u90e8\u90fd\u662f\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u73af\u5883\u53d8\u91cf\u90fd\u662f\u53ea\u8bfb\u7684\uff0c\u5982\u679c\u6709app\u76f8\u5173\u7684\uff0c\u521b\u5efa\u7279\u5b9aapp\u7684\u73af\u5883object"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u7531\u591a\u4e2a\u7ec4\u4ef6\u7ec4\u6210\uff0c\u5bf9\u8c61\u7531\u7528\u6237\u521b\u5efa\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u5185\u90e8\u7684\u901a\u4fe1\uff0c\u5728\u9694\u79bb\u8303\u56f4\u4e4b\u5185\uff0c\u6240\u4ee5\u91c7\u7528\u57fa\u672c\u7684\u7c7b\u578b\u5b89\u5168\u5c31\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u52a0\u5b89\u5168\u7b56\u7565\uff0c\u56e0\u4e3a\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u53ef\u80fd\u662f\u8de8\u5e94\u7528\u7684\uff08\u5c3d\u7ba1\u5927\u90e8\u5206\u53ef\u80fd\u662fapp\u5185\u90e8\u7684\uff09\uff0c\u8fd9\u662f\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027\u7684\u57fa\u7840")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u4f53\u662f\u57fa\u4e8e\u5bf9\u8c61\u7684\u5b89\u5168\u63a7\u5236\uff0c\u80cc\u540e\u7684\u63a7\u5236\u7b56\u7565\u662f\u5bf9\u8c61\u6240\u5c5e\u7684appId\u548cuserId\u4e4b\u95f4\u7684\u6743\u9650\u5173\u7cfb\uff0c\u5f53\u7136\u8fd9\u4e2a\u5173\u7cfb\u53ea\u9700\u8981\u9a8c\u8bc1\u4e00\u6b21\uff0c\u8fd9\u4e9b\u5173\u7cfb\u53ef\u4ee5\u4ee5\u52a0\u5bc6\u7684\u65b9\u5f0f\u9884\u5b58\u50a8\uff0c\u5728\u670d\u52a1\u7aef\u7edf\u4e00\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u8ba1\u7b97\u5bf9\u8c61\u7684\u5185\u90e8\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\u8ba1\u7b97\u9700\u8981\u8de8\u5bf9\u8c61\u901a\u4fe1\u7684\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u5176\u80cc\u540e\u7684\u903b\u8f91\u662f\uff0c\u5bf9\u8c61\u5185\u90e8\u9996\u5148\u53d1\u751f\u5185\u90e8\u53d8\u5316\uff0c\u7136\u540e\u8fd9\u79cd\u53d8\u5316\u5f71\u54cd\u5230\u5916\u90e8\u3002\u8fd9\u6837\u80fd\u907f\u514d\u4e00\u4e9b\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u4e2d\u4efb\u610f\u987a\u5e8f\u7684\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u6df7\u4e71\u7ec4\u7ec7\u7ed3\u6784\u548c\u903b\u8f91"),(0,n.kt)("h4",{id:"21642-app-spaces"},"2.16.4.2 app spaces"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"an approach to safe object sharing"),(0,n.kt)("p",{parentName:"blockquote"},"The crux of the problem is that once a reference is obtained, it can be used to name an object and to invoke methods of that object. We believe that naming and invocation must be sepatated, thus introducing access control into the language.")),(0,n.kt)("p",null,"access control"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5c5e\u4e8e\u4e00\u4e2aapp space\uff0c\u8fd9\u4e2aapp space\u7528\u4e8e\u63a7\u5236\u6743\u9650\uff0capp space\u4ee5\u7528\u6237\u4e3a\u57fa\u7840\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u7528\u6237\u62e5\u6709\u72ec\u7acb\u7684app space"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"app space\u5f71\u54cd\u5e76\u884c\u6027")),(0,n.kt)("p",null,"\u653e\u5230\u4e00\u8d77\u5e76\u884c\u8ba1\u7b97\u7684\u5bf9\u8c61\u5fc5\u987b\u662f\u540c\u4e00\u4e2aapp space\uff0c\u5c3d\u7ba1\u591a\u4e2a\u4e0d\u540cspace\u7684\u5bf9\u8c61\u53ef\u80fd\u62e5\u6709\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5b83\u4eec\u4f1a\u88ab\u72ec\u7acb\u8ba1\u7b97\uff0c\u4ee5\u53ca\u72ec\u7acb\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u65b9\u4fbf\u5e76\u884c\u8ba1\u7b97\uff0c\u4e0d\u662f\u5c06\u4e00\u4e2a\u5bf9\u8c61\u7684\u6240\u6709\u5c5e\u6027\u5b58\u50a8\u5230\u4e00\u8d77\uff0c\u800c\u662f\u4f1a\u6309\u7167\u7ec4\u4ef6\u7c7b\u578b\u5206\u5f00\u5b58\u50a8\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bcf\u4e2a\u76f8\u540c\u7c7b\u578b\u5bf9\u5e94\u7684\u5c5e\u6027 \uff0c\u5b83\u4eec\u5e94\u8be5\u770b\u8d77\u6765\u5c31\u50cf\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5b83\u4eec\u5f62\u6210\u4e00\u4e2agroup\uff0c\u6bcf\u4e2agroup\u65e2\u5c5e\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4e5f\u5c5e\u4e8e\u4e00\u4e2aspace\u3002\u5c31\u50cf \u628a\u4e00\u4e2a\u5bf9\u8c61\u5206\u6210\u591a\u6bb5\uff0c\u6bcf\u4e2a\u6bb5\u8ddf\u4f5c\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u6574\u4f53\u62e5\u6709\u76f8\u540c\u7684\u884c\u4e3a"),(0,n.kt)("h4",{id:"21643-\u5bf9\u8c61\u901a\u4fe1"},"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1"),(0,n.kt)("p",null,"\u5bf9\u8c61\u901a\u4fe1\u53ea\u80fd\u53d1\u751f\u57282\u4e2a\u5bf9\u8c61\u4e4b\u95f4\uff0c\u5373\uff0c\u5982\u679c\u5916\u90e8\u53c2\u6570\u5305\u542b\u591a\u4e2a\u53c2\u6570\uff0c\u5fc5\u987b\u662f\u6765\u81ea\u4e00\u4e2a\u5305\u542b\u6240\u6709\u8fd9\u4e9b\u5c5e\u6027\u7684\u5bf9\u8c61\uff0c\u4e0d\u80fd\u662f\u6765\u81ea\u591a\u4e2a\u5bf9\u8c61\u7684\u7ec4\u5408\u6240\u4ee5\u5f00\u53d1\u8005\u5e94\u8be5\u907f\u514d\u4f7f\u7528\u65e0\u5173\u7684\u591a\u4e2a\u53c2\u6570\u8f93\u5165\uff0c\u6700\u4f73\u65b9\u6cd5\u662f\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\uff0c\u56e0\u4e3a\u90a3\u662f\u4ee3\u8868\u7740\u4ea4\u4e92\u7684\u903b\u8f91\u53d8\u91cf\u3002\u5982\u679c\u4f7f\u75282\u4e2a\u4ee5\u4e0a\u7b26\u53f7\uff0c\u8fd9\u4e9b\u7b26\u53f7\u5e94\u8be5\u4ece\u903b\u8f91\u4e0a\u5e94\u8be5\u5728\u4e00\u8d77\uff0c\u6216\u8005\u5f00\u53d1\u8005\u4fdd\u8bc1\u4ed6\u4eec\u5e94\u8be5\u5728\u4e00\u8d77"),(0,n.kt)("h4",{id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"},"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6c99\u76d2\u673a\u5236\u90fd\u662f\u91c7\u7528\u7c7b\u4f3cCPU\u65f6\u95f4\u7247\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6574\u4e2a\u6267\u884c\u662f\u65e0\u5e8f\u7684\uff0c\u6240\u4ee5\u4f60\u65e0\u6cd5\u6309\u67d0\u79cd\u987a\u5e8f\u6267\u884c\u6574\u4e2a\u8f6f\u4ef6\uff0c\u53ea\u80fd\u5728\u4e0d\u540c\u7684\u7ebf\u7a0b\u4e4b\u95f4\u8fdb\u884c\u5207\u6362\uff1b\u867d\u7136Erlang\u5728\u7ebf\u7a0b\u4e4b\u95f4\u5206\u914d\u4f18\u5148\u7ea7\uff0c\u4f46\u662f\u4ecd\u7136\u662f\u9700\u8981\u5207\u6362\uff0c\u56e0\u4e3a\u7ebf\u7a0b\u6570\u91cf\u53ef\u80fd\u5f88\u591a\uff0c\u5e76\u4e14\u7cfb\u7edf\u4e0d\u77e5\u9053\u6bcf\u4e2a\u7ebf\u7a0b\u9700\u8981\u591a\u957f\u65f6\u95f4\u624d\u80fd\u6267\u884c\u5b8c\u5168\u90e8\u8ba1\u7b97\uff0c\u5373\u4f7f\u5b83\u53ef\u80fd\u8fd8\u5dee\u51e0\u4e2a\u6307\u4ee4\u5c31\u6267\u884c\u5b8c\u4e86\uff0c\u4e5f\u53ef\u80fd\u4f1a\u53d1\u751f\u5207\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u4e00\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6bd4\u8f83\u5927\uff0c\u6240\u4ee5\u65e0\u6cd5\u76f4\u63a5\u5c06\u4e00\u4e2a\u65b9\u6cd5\u8ba1\u7b97\u5b8c\u518d\u8fdb\u884c\u4e0b\u4e00\u4e2a\u8ba1\u7b97\uff0c\u4f60\u5fc5\u987b\u8981\u4fdd\u5b58\u72b6\u6001")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u7684\u539f\u56e0\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u5728\u7ebf\u7a0b\u4e4b\u95f4\u4e0d\u505c\u5730\u5207\u6362\u4e0a\u4e0b\u6587\uff0c\u8fd9\u5c31\u5bfc\u81f4\u8f83\u5927\u7684\u5f00\u9500\uff0c\u9700\u8981\u82b1\u5f88\u591a\u65f6\u95f4\u5904\u7406\u5185\u5b58\u6570\u636e\u7684\u6362\u8fdb\u6362\u51fa\u3002\u56e0\u4e3a\u7ebf\u7a0b\u5185\u90e8\u53ef\u80fd\u4fdd\u5b58\u7740\u590d\u6742\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7531\u4e8e\u6574\u4e2a\u6267\u884c\u7684\u6709\u5e8f\u7684\uff0c\u5373\u6240\u6709\u7ec4\u4ef6\u90fd\u9700\u8981\u5728\u4e00\u5e27\u4e4b\u5185\u88ab\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u56e0\u4e3a\u4e0d\u5fc5\u4e3a\u4e86\u8003\u8651\u4e24\u4e00\u4e2a \u7ebf\u7a0b\u88ab\u62d6\u5ef6\u65f6\u95f4\u800c\u6682\u65f6\u505c\u6b62\u5f53\u524d\u7ebf\u7a0b\u7684\u8ba1\u7b97\u5e76\u5207\u6362\u5230\u5176\u4ed6\u7ebf\u7a0b\u3002\u8fd9\u907f\u514d\u989d\u5927\u91cf\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u5bfc\u81f4\u7684\u5185\u5b58\u6362\u8fdb\u6362\u51fa\u7b49\u989d\u5916\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4ee3\u4ef7\u662f\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6240\u6709\u8ba1\u7b97\u5728\u6bcf\u4e00\u5e27\u90fd\u53ef\u4ee5\u88ab\u8ba1\u7b97\u5b8c\uff0c\u6bd4\u5982\u5c31\u4e0d\u80fd\u51fa\u73b0\u90a3\u79cd\u5355\u4e00\u7ec4\u4ef6\u9700\u8981\u6570\u5e27\u624d\u80fd\u8ba1\u7b97\u5b8c\u6bd5\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u9700\u8981\u5f02\u6b65\u5904\u7406\uff0c\u4e0d\u5f71\u54cd\u5f53\u524d\u5faa\u73af\u3002\u4f46\u6e38\u620f\u672c\u8eab\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\u7684\u3002"),(0,n.kt)("h2",{id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("h3",{id:"2171-llvm"},"2.17.1 LLVM"),(0,n.kt)("h3",{id:"2172-usd"},"2.17.2 USD"),(0,n.kt)("h3",{id:"2173-mlir"},"2.17.3 MLIR"),(0,n.kt)("h3",{id:"2174-lua-c-api"},"2.17.4 Lua C API"),(0,n.kt)("p",null,"\u76f4\u63a5\u83b7\u53d6\u5185\u5b58\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4ece\u5b57\u7b26\u4e32\u89e3\u6790\u3002"),(0,n.kt)("h3",{id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u5fc5\u7136\u57fa\u4e8e\u67d0\u79cd\u6807\u51c6\uff0c\u67d0\u79cd\u9884\u5b9a\u7684\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u67b6\u6784\u57fa\u672c\u4e0a\u662f\uff1a1\uff09\u9996\u5148\u8bbe\u8ba1\u597d\u67d0\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u5176\u4e2d\u7684\u683c\u5f0f\u51e0\u5305\u62ec\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\u3001\u5c5e\u6027\u7ec4\u7ec7\u7684\u6570\u636e\u7ed3\u6784\u3001\u4e5f\u53ef\u80fd\u5305\u542b\u5904\u7406\u8fd9\u4e9b\u6570\u636e\u7684\u7ea6\u5b9a\u63a5\u53e3\uff0c\u5f53\u7136\u63a5\u53e3\u7ea6\u5b9a\u5e76\u6ca1\u6709\u90a3\u4e48\u5927\u7684\u610f\u4e49\uff0c\u5904\u7406\u6570\u636e\u7684\u7a0b\u5e8f\u7406\u8bba\u4e0a\u53ef\u4ee5\u6309\u7167\u4efb\u4f55\u65b9\u5f0f\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\uff1b2\uff09\u53d1\u751f\u6570\u636e\u4e00\u65b9\u6309\u7167\u6570\u636e\u683c\u5f0f\u751f\u6210\u6570\u636e\uff1b3\uff09\u501f\u52a9\u5e73\u53f0\u63d0\u4f9b\u7684\u67d0\u79cd\u673a\u5236\u53d1\u751f\u6570\u636e\u7ed9\u63a5\u6536\u65b9\uff0c\u5176\u4e2d\u4f20\u8f93\u7684\u901a\u5e38\u662f\u5e8f\u5217\u5316\u4e4b\u540e\u7684\u5b57\u7b26\u4e32\u6216\u8005\u5bf9\u5e94\u7684\u4e8c\u8fdb\u5236\u6570\u636e\uff1b4\uff09\u63a5\u6536\u65b9\u63a5\u53d7\u5230\u6570\u636e\u9996\u5148\u8fdb\u884c\u53cd\u5e8f\u5217\u5316\uff0c\u7136\u540e\u6309\u7167\u683c\u5f0f\u6807\u51c6\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u6d41\u7a0b\u5b58\u5728\u4e09\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u5b58\u5728\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u95ee\u9898\uff0c\u53cc\u65b9\u53ea\u9700\u8981\u9075\u5faa\u683c\u5f0f\u6807\u51c6\uff0c\u4f46\u662f\u53d1\u9001\u548c\u89e3\u6790\u7684\u7a0b\u5e8f\u53ca\u5176\u63a5\u53e3\u90fd\u662f\u5b8c\u5168\u7531\u53cc\u65b9\u81ea\u5df1\u51b3\u5b9a\u7684\uff0c\u5f53\u6709\u5927\u91cf\u7684\u6570\u636e\u9700\u8981\u8fdb\u884c\u4e92\u64cd\u4f5c\u65f6\uff0c\u8fd9\u79cd\u5927\u91cf\u7684\u534f\u4f5c\u5c31\u4f1a\u5e26\u6765\u5de8\u5927\u7684\u6210\u672c\u3002\u7531\u4e8e\u53cc\u65b9\u7406\u8bba\u4e0a\u8bf4\u751a\u81f3\u53ef\u80fd\u91c7\u7528\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u4ee5\u5728\u5173\u4e8e\u600e\u4e48\u5904\u7406\u6570\u636e\uff08\u5305\u62ec\u53d1\u9001\u548c\u63a5\u6536\uff09\u4e0a\u6ca1\u6709\u673a\u5236\u80fd\u591f\u8fbe\u6210\u5171\u8bc6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u65b0\u95ee\u9898\uff0c\u5f53\u6807\u51c6\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u5b8c\u5168\u6ca1\u6709\u6709\u6548\u7684\u673a\u5236\u53ef\u4ee5\u4fdd\u8bc1\u53cc\u65b9\u53ef\u4ee5\u53ca\u65f6\u66f4\u65b0\uff0c\u5bfc\u81f4\u7a0b\u5e8f\u4e0d\u53ef\u7528\u6216\u8005\u5f88\u96be\u66f4\u65b0\u5230\u6700\u65b0\u529f\u80fd\u3002\u5c3d\u7ba1\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u8fd9\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u5728\u6570\u5b57\u4e16\u754c\uff0c\u6211\u4eec\u7406\u5e94\u6709\u65b9\u6cd5\u53ef\u80fd\u66f4\u597d\u5730\u7ba1\u7406\u8fd9\u79cd\u66f4\u65b0\u3002")),(0,n.kt)("p",null,"\u6309\u6743\u91cd\u770b\uff0c\u63a5\u53e3\u7684\u95ee\u9898\u662f\u6700\u5927\u7684\uff0c\u5176\u672c\u8d28\u7684\u95ee\u9898\u5728\u4e8e\u4ec5\u4ec5\u6709\u6570\u636e\u683c\u5f0f\uff0c\u6ca1\u6709\u5efa\u7acb\u8d77\u66f4\u4e0a\u4e00\u5c42\u5173\u4e8e\u6570\u636e\u683c\u5f0f\u7684\u5904\u7406\u6807\u51c6\u3002\u8fd9\u91cc\u9762\u5305\u542b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6570\u636e\u7684\u5c5e\u6027\u540d\u79f0\u7684\u95ee\u9898\uff0c\u8fd9\u8868\u73b0\u5728\uff0c\u5c3d\u7ba1\u53cc\u65b9\u90fd\u77e5\u9053\u683c\u5f0f\u4e2d\u5173\u4e8e\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6bcf\u4e2a\u7a0b\u5e8f\u5728\u5185\u90e8\u771f\u6b63\u5904\u7406\u7684\u7b97\u6cd5\u4e2d\uff0c\u5b83\u4f7f\u7528\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5e76\u4e0d\u4e00\u5b9a\u662f\u6807\u51c6\u683c\u5f0f\u4e2d\u5b9a\u4e49\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u5c31\u5bfc\u81f4\u53cc\u65b9\u5fc5\u7136\u8981\u505a\u4e00\u4e9b\u540d\u79f0\u548c\u6570\u636e\u7ed3\u6784\u8f6c\u5316\u4e4b\u7c7b\u7684\u5de5\u4f5c\u3002\u8fd9\u4e9b\u5de5\u4f5c\u4e0d\u5149\u662f\u7e41\u7410\u7684\uff0c\u800c\u4e14\u56e0\u4e3a\u6bcf\u4e2a\u7a0b\u5e8f\u5b9a\u4e49\u4e0d\u4e00\u6837 \uff0c\u8fd9\u79cd\u4eba\u5de5\u7684\u4e00\u4e9b\u5de5\u4f5c\u5bfc\u81f4\u5f88\u96be\u8fdb\u884c\u81ea\u52a8\u5316\uff0c\u6bd4\u5982\u6d89\u53ca\u7b2c\u4e09\u4e2a\u6807\u51c6\u66f4\u65b0\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u8ddf\u4e0a\u9762\u7684\u95ee\u9898\u6709\u5173\uff0c\u6ca1\u6709\u6bd4\u8f83\u6807\u51c6\u7684\u5bf9\u6570\u636e\u8fdb\u884c\u76f4\u63a5\u8bfb\u5199\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u4e0a\u9762\u7b2c\u4e00\u4e2a\u95ee\u9898\u53ef\u4ee5\u4f7f\u7528\u7b26\u53f7\u8868\u8fdb\u884c\u89e3\u51b3\uff0c\u7b26\u53f7\u8868\u56e0\u4e3a\u5b9a\u4e49\u7684\u5c31\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u6240\u4ee5\u5982\u679c\u6807\u51c6\u5b9a\u4e49\u7684\u4e0d\u4ec5\u4ec5\u662f\u683c\u5f0f\u672c\u8eab\uff0c\u800c\u662f\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u8fd0\u884c\u65f6\u7b26\u53f7\u7684\u89e3\u6790\uff0c\u8fd9\u5929\u751f\u5c31\u5c06\u5904\u7406\u53cc\u65b9\u7684\u6570\u636e\u540d\u79f0\u548c\u683c\u5f0f\u8fdb\u884c\u7edf\u4e00\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5b83\u7684\u601d\u60f3\u6765\u6e90\u4e8eUSD\u548cMLIR\uff0c\u5373\u6807\u51c6\u7cfb\u7edf\u4e0d\u4ec5\u8981\u89e3\u51b3\u4e2d\u95f4\u4ea4\u6362\u683c\u5f0f\u7684\u95ee\u9898\uff0c\u8fd8\u9700\u8981\u63d0\u4f9b\u5173\u4e8e\u5bf9\u4ea4\u6362\u6570\u636e\u8fdb\u884c\u89e3\u6790\u7684\u529f\u80fd\uff0c\u8fd9\u907f\u514d\u4e86\u53cc\u65b9\u5404\u81ea\u5199\u4e00\u4e9b\u72ec\u7acb\u7684\u91cd\u590d\u4ee3\u7801\uff0c\u53c8\u4f7f\u5f97\u5bf9\u6570\u636e\u7684\u8bfb\u5199\u4fee\u6539\u53d8\u5f97\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u4ece\u8fd9\u4e2a\u610f\u4e49\u4e0a\u8bf4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"CreateScript\u4e2d\u5b9a\u4e49\u7684\u7b26\u53f7\uff08\u53ca\u5c5e\u6027\u53ca\u5176\u6570\u636e\u7ed3\u6784\uff09\u5c31\u76f8\u5f53\u4e8eUSD\u6216\u8005MLIR\u4e2d\u5b9a\u4e49\u7684\u683c\u5f0f\u6807\u51c6"),(0,n.kt)("li",{parentName:"ul"},"\u800cCreate\u7684\u6574\u4e2a\u8fd0\u884c\u65f6\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u80fd\u591f\u83b7\u53d6\u5230\u6570\u636e\u8fdb\u884c\u5904\u7406\u7684\u673a\u5236\uff0c\u5c31\u50cfUSD/MLIR\u4e2d\u63d0\u4f9b\u7684\u5bf9\u81ea\u5b9a\u4e49\u6570\u636e\u683c\u5f0f\u7684\u89e3\u6790\uff0c\u53ea\u4e0d\u8fc7USD\u6216\u8005MLIR\u4e2d\u662f\u6309\u6a21\u677f\u751f\u6210\u7684\u5bf9\u5e94\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u800cCreateScript\u662f\u4e00\u79cd\u8fd0\u884c\u65f6\u7684\u8bed\u8a00\u673a\u5236\uff0c\u8fd9\u79cd\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u53ef\u4ee5\u76f4\u63a5\u4ece\u5185\u5b58\u4e2d\u8fdb\u884c\u6570\u636e\u8bfb\u53d6\uff0c\u800c\u4e0d\u662f\u4ece\u4e00\u4e2a\u6570\u636e\u6587\u4ef6\u4e2d\u8fdb\u884c\u89e3\u6790")),(0,n.kt)("h2",{id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"},"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u8bed\u8a00\u673a\u5236\u6216\u8005\u8bed\u6cd5\u7279\u6027\u4e0a\u770b\uff0cCreateScript\u8bbe\u8ba1\u4e86\u5f88\u591a\u4e0d\u4e00\u6837\u7684\u601d\u8def\uff0c\u4f46\u5bf9\u4e8e\u5b83\u4eec\u4e2d\u7684\u5927\u591a\u6570\uff0c\u90fd\u4e0d\u5355\u7eaf\u53ea\u662f\u4e00\u79cd\u4e0d\u4e00\u6837\u7684\u8bed\u6cd5\u5f62\u5f0f\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u7531\u5e95\u5c42\u6574\u4e2a\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u7cfb\u7edf\u53d1\u751f\u4e86\u5f88\u5927\u7684\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u8ddf\u8fd9\u4e9b\u53d8\u5316\u7684\u5e95\u5c42\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u5c06\u6240\u6709\u7684\u539f\u56e0\u548c\u56e0\u7d20\u5206\u4e3a\u4e09\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5e95\u5c42\u7684\u56e0\u7d20\uff0c\u8fd9\u6d89\u53ca\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u95f4\u5c42\u7684\u56e0\u7d20\uff0c\u6bd4\u5982\u4e92\u64cd\u4f5c\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e0a\u5c42\u66f4\u504f\u5411\u4e8e\u8bed\u8a00\u7684\u8bed\u6cd5\u5f62\u5f0f")),(0,n.kt)("p",null,"\u672c\u8282\u6211\u4eec\u8ba8\u8bba\u4e00\u4e9b\u6700\u5e95\u5c42\u7684\u673a\u5236\u548c\u95ee\u9898\uff0c\u7136\u540e\u53ef\u4ee5\u4ece\u4e2d\u63a8\u5bfc\u51fa\u6211\u4eec\u4e3a\u4ec0\u4e48\u5fc5\u987b\u8981\u8fd9\u4e48\u8bbe\u8ba1\uff0c\u4e5f\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u6574\u4e2aCreateScript\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\u8bf4\uff0cRealityIS\u4e3a\u4ec0\u4e48\u5fc5\u987b\u91cd\u65b0\u5f00\u53d1\u4e00\u6574\u5957\u5e95\u5c42\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u662f\u56e0\u4e3a\u5f53\u4eca\u6240\u6709\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u6bcf\u4e00\u4e2a\u90e8\u5206\uff0c\u90fd\u662f\u5728\u56f4\u7ed5\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\u800c\u8bbe\u8ba1\u7684\uff0c\u8fd9\u4ece\u6839\u672c\u4e0a\u5c31\u4f7f\u5f97\u591a\u5e94\u7528\u7684\u5efa\u6784\u5f88\u96be\u88ab\u6784\u5efa\uff0c\u8fd9\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u57fa\u4e8e\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6784\u5efa\u591a\u5e94\u7528\u73af\u5883\u5f88\u96be\u4fdd\u8bc1\u5b89\u5168\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u96be\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5e94\u7528\u7684\u8fd0\u884c\u65f6\u5f88\u96be\u88ab\u5916\u90e8\u5f00\u53d1\u8005\u8fdb\u884c\u6269\u5c55\uff0c\u5f53\u7136\u8fd9\u91cc\u6307\u7684\u662f\u6269\u5c55\u4e00\u4e2a\u5e94\u7528\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u8f6f\u4ef6\u3002\u6240\u8c13\u5e94\u7528\u662f\u6307\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\uff0c\u6240\u6709\u7684\u7528\u6237\u90fd\u53ef\u4ee5\u5373\u4f7f\u83b7\u5f97\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u7248\u672c\uff0c\u800c\u8f6f\u4ef6\u662f\u6307\u53ea\u80fd\u88ab\u67d0\u4e2a\u7528\u6237\u81ea\u5df1\u4f7f\u7528\u7684\u8f6f\u4ef6\u62f7\u8d1d\uff0c\u4f8b\u5982\u67d0\u4e2a\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8eUnreal Engine\u5f00\u53d1\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u6269\u5c55\u63d2\u4ef6\uff0c\u6765\u5f62\u6210\u4e00\u4e2a\u81ea\u5df1\u72ec\u7279\u7684\u7248\u672c\uff0c\u8fd9\u4e2a\u7248\u672c\u7684\u8f6f\u4ef6\u867d\u7136\u662f\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u7684\uff0c\u4f46\u662f\u8fd9\u4e2a\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u8f6f\u4ef6\u53ea\u80fd\u88ab\u8be5\u5f00\u53d1\u8005\u4e00\u4e2a\u4eba\u4f7f\u7528")),(0,n.kt)("p",null,"\u4e00\u4e0b\u6211\u4eec\u8be6\u7ec6\u63cf\u8ff0\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u90fd\u662f\u4e0e\u5177\u4f53\u7f16\u7a0b\u8bed\u8a00\u65e0\u5173\u7684\uff0c\u800c\u662f\u8bbe\u8ba1\u66f4\u5e95\u5c42\u7684\u4e00\u4e9b\u673a\u5236\u6216\u8005\u7ea6\u5b9a\uff0c\u4f8b\u5982\u65b9\u6cd5\u8c03\u7528\u7ea6\u5b9a\uff08Calling convention\uff09\u3002"),(0,n.kt)("h3",{id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236"},"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236"),(0,n.kt)("p",null,"\u65b9\u6cd5\u8c03\u7528\u662f\u7f16\u8bd1\u8fc7\u7a0b\u8981\u5904\u7406\u7684\u4e00\u4e2a\u91cd\u8981\u7684\u90e8\u5206\uff0c\u540c\u4e00\u4e2a\u65b9\u6cd5\u7684\u4ee3\u7801\u901a\u5e38\u7f16\u8bd1\u5230\u76f8\u90bb\u7684\u6307\u4ee4\u5e8f\u5217\u4e2d\uff0c\u5728\u5185\u5b58\u4e2d\u5904\u4e8e\u8fde\u7eed\u7684\u4f4d\u7f6e\uff0c\u56e0\u6b64CPU\u603b\u662f\u80fd\u591f\u6309\u987a\u5e8f\u6b63\u786e\u6267\u884c\u4e00\u4e2a\u65b9\u6cd5\u3002\u5373\u4f7f\u5bf9\u4e8e\u8df3\u8f6c\u8bed\u53e5\uff0c\u8df3\u8f6c\u5230\u4efb\u610f\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u5219\u610f\u5473\u7740\u540e\u7eed\u7684\u6267\u884c\u90fd\u5c06\u4ece\u65b0\u7684\u4f4d\u7f6e\u91cd\u65b0\u6309\u987a\u5e8f\u6267\u884c\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u8df3\u8f6c\u6307\u4ee4\u7528\u4e8e\u5c06\u5f53\u524d\u6307\u4ee4\u7684\u4f4d\u7f6e\u6539\u4e3a\u6307\u5411\u65b0\u7684\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u65b9\u6cd5\u8c03\u7528\u7684\u6d41\u7a0b\u5219\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u8df3\u8f6c\u6d41\u7a0b\uff0c\u5f53\u4e00\u4e2a\u51fd\u6570A\u4e2d\u7684\u67d0\u4e2a\u8bed\u53e5\u8c03\u7528\u51fd\u6570B\u65f6\uff0c\u7cfb\u7edf\u9700\u8981\u5c06\u6307\u4ee4\u6267\u884c\u8df3\u8f6c\u5230\u51fd\u6570B\u7684\u5f00\u59cb\u4f4d\u7f6e\uff0c\u540c\u65f6\u7b49\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u65f6\uff0c\u7cfb\u7edf\u8fd8\u9700\u8981\u80fd\u591f\u6b63\u786e\u8fd4\u56de\u5230\u51fd\u6570A\u4e2d\u540e\u7eed\u7684\u6307\u4ee4\u4f4d\u7f6e\u3002\u4e3a\u4e86\u80fd\u591f\u6b63\u786e\u5904\u7406\u4e0a\u8ff0\u7684\u6d41\u7a0b\uff0c\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u6d41\u7a0b\u4e2d\uff0c\u5bf9\u4e8e\u65b9\u6cd5\u7684\u8c03\u7528\uff0c\u5927\u591a\u6570\u662f\u4f7f\u7528\u4e00\u79cd\u76f8\u4e92\u534f\u4f5c\u7684\u673a\u5236\uff0c\u5373\u4f1a\u5728\u51fd\u6570A\u548c\u51fd\u6570B\u4e2d\u5206\u522b\u65b0\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u51fd\u6570A\u4e2d\u7684\u8c03\u7528\u4ee3\u7801\u5904\u8bbe\u7f6e\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\uff0c\u4f7f\u4e4b\u53ef\u4ee5\u8df3\u8f6c\u81f3\u51fd\u6570B\u7684\u4f4d\u7f6e\uff0c\u540c\u65f6\u5c06\u4e0b\u4e00\u6761\u8bed\u53e5\u7684\u5730\u5740\u4f20\u9012\u7ed9\u51fd\u6570B\uff0c\u4f7f\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u7cfb\u7edf\u53ef\u4ee5\u8fd4\u56de\u5230\u6b63\u786e\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570B\u4e2d\u5219\u4f1a\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff0c\u8be5\u4ee3\u7801\u9996\u5148\u4f1a\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5728\u51fd\u6570\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u6267\u884c\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\u4f7f\u4e4b\u8df3\u8f6c\u56de\u51fd\u6570A\u4e2d\u7684\u4e0b\u4e00\u6761\u8bed\u53e5")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u8fd4\u56de\u5730\u5740\u662f\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u51fd\u6570B\u5e76\u4e0d\u4f1a\u4fdd\u5b58\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u662f\u5c06\u8fd4\u56de\u5730\u5740\u5b58\u50a8\u5728\u6808\u4e2d\uff0c\u8fd9\u4e2a\u6808\u7684\u5730\u5740\u53ef\u4ee5\u540c\u65f6\u88abA\u548cB\u8bbf\u95ee\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51fd\u6570B\u53ef\u80fd\u4e0d\u9075\u5faa\u76f8\u5173\u7684\u7ea6\u5b9a\uff0c\u4f8b\u5982\u5b83\u53ef\u4ee5\u4fee\u6539\u8fd9\u4e2a\u8fd4\u56de\u51fd\u6570\u5730\u5740\uff0c\u4f7f\u4e4b\u6307\u5411\u4e0d\u5408\u6cd5\u7684\u4f4d\u7f6e\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u7684\u63a7\u5236\u6d41\u88ab\u7834\u574f\uff0c\u53ef\u80fd\u5f15\u8d77\u7a0b\u5e8f\u5d29\u6e83\u3002\u5728\u4e00\u4e9b\u7f13\u5b58\u6ea2\u51fa\u7684\u653b\u51fb\u4e2d\uff0c\u7834\u574f\u8005\u8fd8\u5229\u7528\u7f13\u5b58\u6ea2\u51fa\u6ce8\u5165\u7684\u51fd\u6570\u4ee3\u7801\uff0c\u4f7f\u7a0b\u5e8f\u6d41\u6307\u5411\u8fd9\u4e9b\u4ee3\u7801\u4ece\u800c\u53ef\u4ee5\u6267\u884c\u4e00\u4e9b\u975e\u6cd5\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2182-\u94fe\u63a5\u673a\u5236"},"2.18.2 \u94fe\u63a5\u673a\u5236"),(0,n.kt)("h3",{id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236"},"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236"),(0,n.kt)("h2",{id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"},"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("h1",{id:"3-reality-create"},"3. Reality Create"),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,"\u7b2c\u4e00\u76ee\u6807\u662f\u5168\u90e8\u7a0b\u5e8f\u52a8\u6001\u5316\uff0c\u4efb\u4f55\u6574\u4e2aCreation \u90fd\u53ef\u4ee5\u52a8\u6001\u4e0b\u8f7d\uff0c\u6240\u4ee5\u4e0d\u7528\u7f16\u5199C++\u4ee3\u7801\uff0c\u4e5f\u5c31\u610f\u5473\u7740\u5e95\u5c42\u5fc5\u987b\u9ad8\u5ea6\u4f18\u5316\uff0c\u811a\u672c\u7684\u8f6c\u6362\u90e8\u4efd\u4e5f\u8981\u9ad8\u5ea6\u4f18\u5316\uff0c\u53ef\u4ee5\u53bb\u9664\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u9762\u5411\u5bf9\u8c61\u5c5e\u6027"),(0,n.kt)("h2",{id:"31-creation-id"},"3.1 Creation ID"),(0,n.kt)("h2",{id:"32-creation-simulation"},"3.2 Creation Simulation"),(0,n.kt)("h2",{id:"33-ui\u7ec4\u4ef6"},"3.3 UI\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5c06UI\u5143\u7d20\u96c6\u4e8eCreation Script\u6784\u5efa\u6210\u7ec4\u4ef6\uff0c\u7136\u540e\u6574\u4e2a\u7f16\u8f91\u5668\u53ef\u4ee5\u96c6\u4e8eCreation Script\u6765\u521b\u5efa\uff0c\u5373\u6574\u4e2a\u7f16\u8f91\u5668\u5f53\u4f5c\u4e00\u4e2aCreation\u3002"),(0,n.kt)("p",null,"UI\u7ec4\u4ef6\u7684\u505a\u6cd5\u5176\u5b9e\u53ef\u4ee5\u6309\u71673D Renerer\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u552f\u4e00\u7684\u533a\u522b\u5c31\u662fCamera\u4e0d\u4e00\u81f4\uff0c3D\u7684\u6e32\u67d3\u90e8\u5206\u80af\u5b9a\u4e5f\u662f\u9700\u8981\u7ee7\u627f\u5230\u539f\u751fC++\u4ee3\u7801\u4e2d\uff0cUI\u6e32\u67d3\u5b8c\u5168\u4e5f\u662f\u7c7b\u4f3c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8f91\u5668\u4e2d\uff0c\u7f16\u8f91\u76f8\u5173\u7684\u529f\u80fd\u53ea\u662f\u5b58\u5728\u4e8e\u7f16\u8f91\u5668\u4e2d\uff0c\u4e0d\u4f1a\u5305\u542b\u5728\u8fd0\u884c\u65f6\uff0c\u8fd9\u5757\u4ecd\u7136\u9700\u8981\u5904\u7406\uff0c\u4f46\u662f\u81f3\u5c11\u6574\u4e2a\u7f16\u8f91\u5668\u7684\u6784\u5efa\u53ef\u4ee5\u4f7f\u7528\u7edf\u4e00\u7684\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u6709\u4e00\u90e8\u5206\u529f\u80fd\u662f\u7f16\u8f91\u5668\u7279\u6709\u7684\uff0c\u5305\u62ec\u4ee3\u7801\u7684\u63d0\u793a\uff0c\u8c03\u8bd5\u7b49\u7b49\u529f\u80fd\uff0c\u8fd9\u90e8\u5206\u5728Runtime\u90e8\u5206\u8fd8\u662f\u9700\u8981\u4ece\u865a\u62df\u673a\u4e2d\u62ff\u6389\u3002"),(0,n.kt)("h3",{id:"331-bevy-ui"},"3.3.1 Bevy UI"),(0,n.kt)("p",null,"A custom ECS-driven UI framework built specifically for Bevy"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Built directly on top of Bevy's ECS, Renderer, and Scene plugins"),(0,n.kt)("li",{parentName:"ul"},"Compose UIs dynamically in code or declaratively using the Bevy Scene format"),(0,n.kt)("li",{parentName:"ul"},'Use a familiar "flex box" model to layout your UIs')),(0,n.kt)("h3",{id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"},"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"),(0,n.kt)("h1",{id:"4-reality-world-niantic-opens-lightship-augmented-reality-platform-to-all-developers"},"4. Reality World ",(0,n.kt)("img",{alt:"niantic-opens-lightship-augmented-reality-platform-to-all-developers",src:l(738).Z,width:"1200",height:"579"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6838\u5fc3\u4ea7\u54c1"),"\uff0c\u5c31\u662f\u4ee5\u73b0\u5b9e\u4e16\u754c\u7684\u5730\u9762\u5e73\u9762\u7279\u5f81\u4e3a\u5e95\u677f"),(0,n.kt)("p",null,"\u521b\u4f5c\u5143\u7d20\u3001\u6a21\u677f\u3001\u884c\u4e3a\u7ec4\u4ef6\u5206\u7c7b\u4e2d\u4ee5\u5efa\u7b51\u7c7b\u3001\u57ce\u5e02\u88c5\u626e\u7c7b\u4e3a\u6838\u5fc3\u6216\u8005\u4f18\u5148\uff0c\u4ee5\u5c0f\u4e16\u754c\u5408\u6210\u5927\u57ce\u5e02\u7684\u65b9\u5f0f\uff0c\u91cd\u65b0\u5b9a\u4e49\u6211\u4eec\u7684\u4e16\u754c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u5efa\u7b51\u4e4b\u5916\uff0c\u8fd8\u6709\u8bb8\u591a\u57ce\u5e02\u5143\u7d20\uff0c\u4f8b\u5982\u5e7f\u544a\uff0c\u4ea4\u901a"),(0,n.kt)("li",{parentName:"ul"},"\u57ce\u5e02\u4e3b\u9898\u7ed3\u6784\u5c06\u4e0d\u4ec5\u4ec5\u662f\u5efa\u7b51\uff0c\u53ef\u80fd\u975e\u5e38\u591a\u5947\u89c2\u521b\u9020\uff0c\u975e\u5e38\u591a\u5143"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u89c8\u57ce\u5e02\u5c06\u662f\u4e00\u79cd\u5f88\u72ec\u7279\u7684\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u6709\u673a\u5236\u5728\u57ce\u5e02\u4e2d\u6784\u9020\u6587\u5316")),(0,n.kt)("p",null,"\u540c\u65f6\u6574\u4e2a\u57fa\u7840\u4ecd\u7136\u662f\u53ef\u4ee5\u5c40\u90e8\u72ec\u7acb\u7269\u4f53\u53ef\u5206\u4eab\u7684\u65b9\u5f0f"),(0,n.kt)("p",null,"\u7b2c\u4e00\u671f\u4ea7\u54c1\u6574\u4f53\u4f1a\u6709\u4e09\u79cd\u4f53\u9a8c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5927\u7684\u73b0\u5b9e\u4e16\u754c"),(0,n.kt)("li",{parentName:"ul"},"\u72ec\u7acb\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5Code\u7684\u5f62\u5f0f\u521b\u9020\u5e73\u884c\u4e16\u754c")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u5efa\u7b51\u5185\u5bb9\u4e0d\u4f1a\u662f\u9759\u6001\u7684\uff0c\u5b83\u4f1a\u4e3a\u521b\u4f5c\u8005\u5e26\u6765\u6536\u76ca\uff0c\u6210\u957f\u6216\u8005\u5347\u7ea7\uff0c\u7c7b\u4f3c\u6a21\u62df\u7ecf\u8425\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u8fd9\u91cc\u4e3b\u8981\u662f\u9760\u521b\u9020\u7684\u827a\u672f\u6027\u3001\u6587\u5316\u6027\u7b49\uff0c\u901a\u8fc7\u521b\u9020\u7684\u72ec\u7acb\u6027\u5438\u5f15\u6d41\u91cf\uff0c\u4ece\u800c\u5f62\u6210\u533a\u57df\u7b49\u7ea7\u4e2d\u5fc3\u533a\u7b49\u7b49\uff0c\u8f83\u70ed\u95e8\u7684\u533a\u57df\u4f1a\u5e26\u6765\u66f4\u9ad8\u7684\u6536\u76ca\uff0c\u5f62\u6210\u57ce\u5e02\u6587\u5316\uff08\u521b\u4f5c\u672c\u8eab\u8574\u542b\u7740\u6587\u5316\uff09\uff0c\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5f62\u6210\u533a\u57df\u534f\u4f5c\uff0c\u5171\u540c\u5b9a\u4e49\u4e00\u4e9b\u6587\u5316\uff0c\u53ef\u4ee5\u7c7b\u4f3cEverdale\u673a\u5236\u534f\u4f5c\u5171\u5efa"),(0,n.kt)("p",null,"\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u505a\u6cd5\uff0c\u878d\u5165\u5efa\u9020\u548c\u6a21\u62df\u7ecf\u8425\uff0c\u5168\u9762\u5efa\u8bbe\u57ce\u5e02\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u9650\u5236\u8d44\u6e90\u7c7b\u578b\uff0c\u9f13\u52b1\u4ea4\u6613\uff0c\u9f13\u52b1\u5408\u4f5c\uff0c\u4fbf\u6e38\u620f\u4e00\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ea\u878d\u5165\u5c11\u91cf\u6e38\u620f\u5143\u7d20\uff0c\u4ee5\u521b\u9020\u4e3a\u6781\u9650\uff0c\u4e0d\u9650\u5236\u8d44\u6e90")),(0,n.kt)("p",null,"\u524d\u8005\u65e9\u671f\u53d1\u5c55\u66f4\u5feb\uff0c\u540e\u8005\u65e9\u671f\u53c2\u4e0e\u8f83\u5f31\uff0c\u53ef\u4ee5\u4e24\u8005\u7ed3\u5408"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&app=appid&cam=6dof"},"http://creation.id/=qwe&app=appid&cam=6dof")),(0,n.kt)("p",null,"\u5750\u6807\u7684\u6982\u5ff5\u4f7f\u5f97\u5927\u5bb6\u53ef\u4ee5\u5728RealityWorld \u4e4b\u5916\u5927\u91cf\u5ba3\u4f20\u4e00\u4e2a\u5730\u70b9\uff0c\u5c31\u5728\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u751a\u81f3\u5927\u5bb6\u56de\u53bb\u627e\u8fd9\u6837\u7684\u653b\u7565\u548c\u5217\u8868\uff0c\u800c\u4e0d\u662f\u901a\u8fc7\u91cc\u9762\u7684\u6e38\u89c8"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u6253\u5f00\u5f53\u524d\u4f4d\u7f6e\uff0c\u6240\u4ee5\u53bb\u54ea\u91cc\u90fd\u53ef\u4ee5\u770b\u770b"),(0,n.kt)("h2",{id:"41-reality-id"},"4.1 Reality ID"),(0,n.kt)("p",null,"\u7528\u6237\u4e2d\u5fc3"),(0,n.kt)("h3",{id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406"},"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u7248\u672c\u5347\u7ea7\uff0c\u7b49\u7b49\uff0c\u4fdd\u8bc1\u7ec4\u4ef6\u662f\u6700\u65b0\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7f16\u8bd1\u4e4b\u540e\u5217\u51fa\u6240\u6709\u95ee\u9898\uff0c\u7528\u6237\u4e5f\u53ef\u4ee5\u76f4\u63a5\u53d1\u9001\u4fe1\u606f\u7ed9\u5f00\u53d1\u8005\uff0c\u8981\u6c42\u66f4\u65b0\u7ec4\u4ef6\u4ee5\u652f\u6301\u67d0\u4e9b\u65b0\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u662f\u7528\u6237\u5bf9\u8c61\u7f16\u8bd1\u53d1\u751f\u7684\u5730\u65b9\uff0c\u56e0\u4e3a\u8fd9\u91cc\u8bbe\u7f6e\u7684\u4e1c\u897f\u57fa\u672c\u4e0a\u4e0d\u4f1a\u518d\u4fee\u6539\uff0c\u5f53\u7136\u4e5f\u5e94\u8be5\u652f\u6301\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u7f16\u8bd1\uff0c\u8fd9\u79cd\u662f\u5c11\u6570\u60c5\u51b5"),(0,n.kt)("h3",{id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406"},"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406"),(0,n.kt)("h2",{id:"42-the-reality-world-app"},"4.2 The Reality World app"),(0,n.kt)("h3",{id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"},"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"realworld",src:l(6336).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5bf9\u4e8e\u5143\u5b87\u5b99\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u4efb\u610f\u7684\u865a\u62df\u4e16\u754c\uff0c\u4f46\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u81f3\u5c11\u6709\u4ee5\u4e0b\u7f3a\u9677\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5c06\u6839\u73b0\u5b9e\u4e16\u754c\u5b8c\u5168\u8131\u8282\uff0c\u8fd9\u79cd\u5272\u88c2\u611f\u4f1a\u975e\u5e38\u5927\uff0c\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u91cc\u9762\u7684\u5185\u5bb9\u5f88\u96be\u8ddf\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e2a\u8054\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u8981\u60f3\u8ba9\u672a\u6765\u76843D\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u8fd9\u4e2a\u865a\u62df\u4e16\u754c\u4e00\u5b9a\u662f\u548c\u73b0\u5b9e\u4e16\u754c\u6709\u5173\u8054\u7684\uff0c\u5426\u5219\u5b83\u5c31\u6446\u8131\u4e0d\u4e86\u7c7b\u4f3c\u6e38\u620f\u7684\u6982\u5ff5\uff0c\u4eba\u4eec\u628a\u5b83\u5f53\u505a\u4e00\u4e2a\u4e13\u95e8\u7684\u5a31\u4e50\u65b9\u5f0f\uff0c\u5076\u5c14\u8fdb\u53bb\u4f53\u9a8c\u4e00\u4e0b\uff0c\u800c\u4e0d\u662f\u65f6\u65f6\u8ddf\u5b83\u4fdd\u6301\u8054\u7cfb\u548c\u8fde\u63a5"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4fc3\u8fdb\u5730\u7406\u4e0a\u9760\u8fd1\u7684\u4eba\u4e4b\u95f4\u8fdb\u884c\u4e92\u52a8\uff0c\u5728\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u4e2d\uff0c\u771f\u5b9e\u7684\u5730\u7406\u4f4d\u7f6e\u5728\u5176\u4e2d\u65e0\u6cd5\u4ea7\u751f\u8f83\u597d\u7684\u5173\u8054\uff0c\u56e0\u6b64\u5b83\u4eec\u7684\u4e92\u52a8\u901a\u5e38\u53ea\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u597d\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\uff0c\u6216\u8005\u8bf4\u901a\u8fc7\u67d0\u4e9b\u6e38\u620f\u5185\u5bb9\u7684\u673a\u5236\u4fc3\u8fdb\u7684\u5177\u6709\u7c7b\u4f3c\u7231\u597d\u548c\u5174\u8da3\u7684\u964c\u751f\u4eba\u4e4b\u95f4\u7684\u4e92\u52a8\u3002\u4f46\u662f\u57ce\u5e02\u4f5c\u4e3a\u4e00\u4e2a\u91cd\u8981\u7684\u6587\u5316\u8f7d\u4f53\u548c\u7b26\u53f7\uff0c\u5b83\u672c\u8eab\u4e5f\u662f\u5177\u6709\u4e30\u5bcc\u7684\u4fe1\u606f\u5728\u91cc\u9762\u7684\uff0c\u800c\u4e14\u4eba\u4e0e\u57ce\u5e02\u4e4b\u95f4\u7684\u5173\u7cfb\u662f\u73b0\u4ee3\u6587\u660e\u4e2d\u4eba\u7c7b\u4e0d\u53ef\u5ffd\u89c6\u7684\u91cd\u8981\u4f53\u9a8c\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u6240\u4ee5\u600e\u6837\u5229\u7528\u597d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5730\u7406\u5173\u7cfb\uff0c\u4e5f\u662f\u672a\u6765\u5143\u5b87\u5b99\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6210\u4e00\u90e8\u5206\u7684\u91cd\u8981\u90e8\u5206\u4e4b\u4e00"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5143\u5b87\u5b99\u4f5c\u4e3a\u73b0\u5b9e\u4e16\u754c\u7684\u5ef6\u5c55\uff0c\u5176\u5b9e\u524d\u9762\u4e24\u90e8\u5206\u90fd\u8bf4\u660e\u4e86\uff0c\u771f\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u5173\u8054\u548c\u5173\u7cfb\uff0c\u4f1a\u6210\u4e3a\u672a\u6765\u5143\u5b87\u5b99\u91cd\u8981\u7684\u6838\u5fc3\u673a\u5236\uff0c\u5426\u5219\u5b83\u4e0d\u4ec5\u4f1a\u5bf9\u6211\u4eec\u7684\u751f\u6d3b\u9020\u6210\u5272\u88c2\uff0c\u5e76\u4e14\u5b83\u65e0\u6cd5\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u5c31\u50cf\u4eca\u5929\u7684\u6cdb\u5a31\u4e50\u7c7b\u5e94\u7528\u5982\u6296\u97f3\u3001\u5fae\u4fe1\u7b49\u3002\u5e76\u4e14\u4f5c\u4e3a\u672a\u6765\u79d1\u6280\u751f\u6d3b\u91cd\u8981\u7684\u4e00\u9762\uff0c\u6211\u4eec\u5e0c\u671b\u5b83\u8981\u80fd\u591f\u7528\u6765\u63d0\u5347\u4eba\u4eec\u7684\u751f\u6d3b\u54c1\u8d28\uff0c\u8fd9\u5305\u62ec\u4e24\u4e2a\u5c42\u9762\uff1a\u4f7f\u4eba\u4eec\u611f\u5230\u66f4\u52a0\u5feb\u4e50\uff0c\u4ee5\u53ca\u5e2e\u52a9\u4eba\u4eec\u63d0\u4f9b\u66f4\u52a0\u4e30\u5bcc\u7684\u6570\u5b57\u5316\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u5c06\u4ee5\u73b0\u5b9e\u4e16\u754c\u771f\u5b9e\u5730\u56fe\u4e3a\u5e95\u677f\u8fdb\u884c\u6253\u9020\uff0c\u4ee5\u56f4\u7ed5\u73b0\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u7d27\u5bc6\u8054\u7cfb\u4e3a\u6838\u5fc3\u8bbe\u8ba1\u539f\u5219\uff0c\u5f00\u53d1\u80fd\u591f\u901a\u8fc7\u5143\u5b87\u5b99\u7684\u4e30\u5bcc\u6570\u5b57\u5316\u673a\u5236\u6765\u63d0\u5347\u4eba\u4eec\u751f\u6d3b\u54c1\u8d28\u7684\u5f00\u653e\u865a\u62df\u4e16\u754c\u3002"),(0,n.kt)("h4",{id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"},"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"),(0,n.kt)("p",null,"Reality World\u4e16\u754c\u7684\u5e95\u5ea7\u662f\u771f\u5b9e\u4e16\u754c\u7684\u5e73\u9762\u5730\u56fe\uff0c\u5e76\u4e14\u4fdd\u7559\u57ce\u5e02\u4e3b\u8981\u7684\u9053\u8def\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u505a\u6709\u51e0\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u865a\u62df\u4e16\u754c\u8ddf\u771f\u5b9e\u4e16\u754c\u662f\u6709\u5173\u8054\u7684\uff0c\u8fd9\u79cd\u5173\u8054\u4e0d\u4ec5\u662f\u6307\u5730\u7406\u4e0a\u7684\u4f4d\u7f6e\u5173\u8054\uff0c\u800c\u662f\u6211\u4eec\u6709\u673a\u4f1a\u53bb\u8868\u8fbe\u8ddf\u4e00\u4e2a\u57ce\u5e02\u76f8\u5173\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u5f53\u524d\u57ce\u5e02\u7684\u67d0\u4e9b\u6307\u6570\uff0c\u57ce\u5e02\u7684\u4e00\u4e9b\u6587\u5316\u98ce\u8c8c\uff0c\u53ef\u4ee5\u62bd\u8c61\u6210\u67d0\u79cd\u6e38\u620f\u673a\u5236\uff0c\u8fd9\u6837\u540c\u4e00\u4e2a\u57ce\u5e02\u4e2d\u7684\u5e02\u6c11\u90fd\u53ef\u4ee5\u611f\u53d7\u5230\u7c7b\u4f3c\u7684\u4e0e\u8be5\u5ea7\u57ce\u5e02\u72ec\u6709\u7684\u4f53\u9a8c\u3002\u8fd9\u4e9b\u4f53\u9a8c\u5f80\u5f80\u90fd\u662f\u5173\u4e8e\u73b0\u5b9e\u7684\u4fe1\u606f\uff0c\u5b83\u5305\u542b\u4eba\u4e0e\u57ce\u5e02\u548c\u5468\u56f4\u73af\u5883\u548c\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6240\u4ee5\u8fd9\u79cd\u673a\u5236\u5f62\u6210\u4e86\u5bf9\u73b0\u5b9e\u7684\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u6700\u91cd\u8981\u7684\u662f\u5173\u7cfb\uff0c\u5730\u7406\u4f4d\u7f6e\u662f\u4e00\u79cd\u91cd\u8981\u7684\u5173\u7cfb\uff0c\u5b83\u4e0d\u4ec5\u4ec5\u662f\u4f4d\u7f6e\u7684\u5173\u7cfb\uff0c\u5b83\u662f\u4e00\u79cd\u628a\u5927\u5bb6\u62c9\u5728\u4e00\u8d77\uff0c\u8fd9\u91cc\u7684\u4eba\u90fd\u6709\u5171\u540c\u7684\u4e00\u4e9b\u8ba4\u77e5\u7684\u5173\u7cfb\u3002\u6240\u4ee5\u5730\u7406\u4f4d\u7f6e\u5b9e\u9645\u4e0a\u9690\u85cf\u7740\u5f88\u591a\u4fe1\u606f\uff0c\u662f\u975e\u5e38\u91cd\u8981\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u771f\u5b9e\u4e16\u754c\u4e0d\u4e00\u6837\uff0c\u771f\u5b9e\u4e16\u754c\u7684\u5916\u89c2\u548c\u7ec6\u8282\u5728\u865a\u62df\u4e16\u754c\u4e2d\u4e0d\u662f\u6700\u91cd\u8981\u7684\uff0c\u4eba\u4eec\u5e0c\u671b\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u4e16\u754c\uff0c\u4eba\u4eec\u5e0c\u671b\u80fd\u591f\u6539\u53d8\u73b0\u5b9e\u4e16\u754c\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\uff0c\u4eba\u4eec\u6709\u53ef\u80fd\u521b\u9020\u51fa\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u865a\u62df\u4e16\u754c\uff0c\u8fd9\u4e2a\u4e16\u754c\u4ee3\u8868\u7740\u4eba\u4eec\u671f\u671b\u3001\u5411\u5f80\u548c\u60f3\u8c61\u4e2d\u7684\u4e00\u4e2a\u4e16\u754c\u3002\u4e5f\u4ee3\u8868\u7740\u4eba\u4eec\u5bf9\u73b0\u5b9e\u4e16\u754c\u4ee5\u53ca\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u601d\u8003\u3002"),(0,n.kt)("p",null,"\u4e0d\u8fc7\uff0c\u4e0e\u865a\u62df\u4e16\u754c\u4e2d\u7684\u5efa\u7b51\u7269\u7b49\u5916\u89c2\u4e0d\u4e00\u6837\u7c7b\u4f3c\uff0c\u5c3d\u7ba1\u5730\u9762\u7684\u9053\u8def\u4f4d\u7f6e\u662f\u4fdd\u7559\u7684\uff0c\u4f46\u662f\u9053\u8def\u7684\u540d\u79f0\u662f\u53ef\u4ee5\u66f4\u6539\u7684\u3002\u8fd9\u662f\u4e16\u754c\u7684\u9053\u8def\u7ed3\u6784\u53ca\u5176\u89c6\u89c9\u4f4d\u7f6e\u80fd\u591f\u5e2e\u52a9\u4eba\u4eec\u5728\u865a\u62df\u4e16\u754c\u66f4\u597d\u5730\u5bfc\u822a\uff0c\u6240\u4ee5\u5373\u4fbf\u8fd9\u4e9b\u9053\u8def\u7684\u540d\u5b57\u88ab\u4fee\u6539\u4e86\uff0c\u4eba\u4eec\u4ecd\u7136\u80fd\u591f\u5f88\u597d\u5730\u5173\u8054\u5b83\u4eec\u3002\u4f46\u662f\u5982\u679c\u8fd9\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u800c\u5de8\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u4eba\u4eec\u5219\u5f88\u96be\u8bb0\u4f4f\u90a3\u4e48\u591a\u7684\u5730\u5740\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u5143\u5b87\u5b99\u4e16\u754c\u5c06\u80fd\u591f\u63d0\u5347\u4eba\u4eec\u73b0\u5b9e\u751f\u6d3b\u7684\u751f\u6d3b\u54c1\u8d28\u3002"),(0,n.kt)("h4",{id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"},"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"),(0,n.kt)("p",null,"\u5730\u7406\u4e0d\u4ec5\u4ec5\u662f\u5730\u56fe\u4e0a\u7684\u4f4d\u7f6e\uff0c\u5b83\u8574\u85cf\u7740\u5f88\u591a\u610f\u4e49\uff0c\u51e0\u4e4e\u53ef\u4ee5\u8bf4\u8ddf\u6211\u4eec\u5927\u90e8\u5206\u7684\u65e5\u5e38\u751f\u6d3b\uff0c\u4ee5\u53ca\u65e5\u5e38\u751f\u6d3b\u4e4b\u5916\u66f4\u91cd\u8981\u7684\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\u5c42\u9762\uff0c\u8fd9\u4e9b\u4fe1\u606f\u66f4\u52a0\u91cd\u8981\uff0c\u5b83\u5173\u4e4e\u4eba\u7684\u60c5\u611f\u3001\u60c5\u7eea\u3001\u5bf9\u751f\u6d3b\u7684\u4f53\u9a8c\u548c\u54c1\u8d28\u7b49\u3002"),(0,n.kt)("p",null,"\u771f\u5b9e\u4e16\u754c\u662f\u5173\u4e8e\u5927\u5bb6\u901a\u8fc7\u4e00\u5b9a\u76f8\u90bb\u7684\u5730\u7406\u4f4d\u7f6e\u5f7c\u6b64\u805a\u5728\u4e00\u8d77\uff0c\u7136\u540e\u56e0\u6b64\u800c\u5171\u540c\u5173\u5fc3\u548c\u5173\u6ce8\u67d0\u4e9b\u76f8\u540c\u7684\u4e8b\u60c5\uff0c\u8fdb\u800c\u5f62\u6210\u67d0\u4e9b\u76f8\u5173\u8054\u7684\u5173\u7cfb\u3001\u4fe1\u7528\u3001\u4e16\u754c\u89c2\u3001\u6587\u5316\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6709\u65f6\u5019\u6211\u4eec\u8ddf\u5468\u56f4\u7684\u4eba\u5e76\u4e0d\u76f4\u63a5\u8ba4\u8bc6\uff0c\u4f46\u662f\u6211\u4eec\u8ddf\u4ed6\u4eec\u4e4b\u95f4\u4ecd\u7136\u6f5c\u85cf\u8fd9\u67d0\u4e9b\u8054\u7cfb\uff0c\u8fd9\u4e9b\u8054\u7cfb\u5e76\u4e0d\u4e00\u5b9a\u662f\u663e\u5f0f\u53ef\u89c1\u7684\uff0c\u4f46\u662f\u5b83\u4eec\u5374\u662f\u5ba2\u89c2\u5b58\u5728\u7684\u3002\u7136\u800c\u5bf9\u4e8e\u8fdc\u5728\u4e00\u4e2a\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u7684\u5730\u65b9\uff0c\u6240\u6709\u8fd9\u4e9b\u8054\u7cfb\u90fd\u4e0d\u5b58\u5728\uff0c\u6216\u8005\u8bf4\u5f88\u5f31\u3002\u6bd4\u5982\u8bf4\u5bf9\u4e8e\u6240\u6709\u4e2d\u56fd\u4eba\uff0c\u6211\u4eec\u4e4b\u95f4\u4ecd\u7136\u5b58\u5728\u4e00\u4e9b\u8054\u7cfb\u548c\u5173\u7cfb\uff0c\u4f46\u662f\u5bf9\u4e8e\u5927\u90e8\u5206\u4eba\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f88\u5f31\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5730\u7406\u4fe1\u606f\u751a\u81f3\u662f\u6bd4\u4eb2\u60c5\u66f4\u91cd\u8981\u7684\u610f\u4e49\uff0c\u4eb2\u60c5\u4e4b\u95f4\u7684\u8054\u7cfb\u53cd\u800c\u662f\u6bd4\u8f83\u7b80\u5355\u7684\uff0c\u6211\u4eec\u5927\u90e8\u5206\u7684\u60c5\u611f\u548c\u7cbe\u529b\u4e5f\u8bb8\u4f1a\u66f4\u591a\u82b1\u5728\u8fd9\u79cd\u57fa\u4e8e\u5730\u7406\u4f4d\u7f6e\u4fe1\u606f\u4e0a\u3002\u5f53\u7136\u6211\u4eec\u628a\u540c\u4e8b\u7b49\u5173\u7cfb\u4e5f\u5f52\u7ed3\u5230\u5730\u7406\u4fe1\u606f\u76f8\u5173\uff0c\u4f8b\u5982\u6211\u4eec\u8ddf\u53e6\u4e00\u4e2a\u57ce\u5e02\u7684\u540c\u4e8b\u5f80\u5f80\u6ca1\u6709\u672c\u5730\u540c\u4e8b\u4e4b\u95f4\u5173\u7cfb\u90a3\u4e48\u7d27\u5bc6\u3002\u540c\u6837\u7684\uff0c\u672c\u5730\u540c\u5b66\u4e4b\u95f4\u901a\u5e38\u4e5f\u8981\u6bd4\u5176\u4ed6\u57ce\u5e02\u7684\u540c\u5b66\u4e4b\u95f4\u5173\u7cfb\u7d27\u5bc6\uff0c\u56e0\u4e3a\u4ed6\u4eec\u4e4b\u95f4\u66f4\u6709\u53ef\u80fd\u4f1a\u6709\u66f4\u591a\u7684\u8054\u7cfb\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5143\u5b87\u5b99\u600e\u6837\u8868\u8fbe\u8fd9\u4e9b\u610f\u4e49\u5462"),"\uff1f"),(0,n.kt)("p",null,"\u5730\u7406\u4fe1\u606f\uff0c\u6216\u8005\u8bf4\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\uff0c\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u4fe1\u606f\uff0c\u53c2\u89c1\u7b2c4.10.1\u8282\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5f88\u96be\u7528\u4f20\u7edf\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u6709\u65f6\u5019\u751a\u81f3\u4e5f\u5f88\u96be\u4f7f\u7528\u7535\u5f71\u6216\u8005\u5c0f\u8bf4\u8fd9\u79cd\u53d9\u4e8b\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\u3002\u7531\u7b2c4.10.3\u8282\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u4fe1\u606f\u7c7b\u578b\u6700\u597d\u7684\u8868\u8fbe\u7684\u65b9\u5f0f\u662f\u80fd\u591f\u6a21\u62df\u590d\u6742\u7cfb\u7edf\u673a\u5236\u7684\u6e38\u620f\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5728Reality World\u4e2d\uff0c\u53ea\u8981\u6211\u4eec\u63d0\u4f9b\u8db3\u591f\u597d\u7684\u5e73\u53f0\u6280\u672f\uff0c\u8ba9\u666e\u901a\u5927\u4f17\u80fd\u591f\u8868\u8fbe\u81ea\u5df1\u7684\u673a\u5236\uff0c\u5c31\u80fd\u591f\u91ca\u653e\u8fd9\u79cd\u80fd\u529b\uff0c\u56e0\u4e3a\u5927\u4f17\u4e0d\u540c\u7684\u4eba\u80fd\u591f\u62bd\u8c61\u63d0\u70bc\u51fa\u8fd9\u79cd\u5173\u7cfb\u3002\u4ece\u800c\u5f62\u6210\u5173\u4e8e\u8fd9\u4e9b\u5173\u7cfb\u7684\u8868\u8fbe\u3002"),(0,n.kt)("h4",{id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"},"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c14.2.3\u8282\u4f20\u9001\u95e8"),(0,n.kt)("h3",{id:"422-\u4f20\u9001\u95e8"},"4.2.2 \u4f20\u9001\u95e8"),(0,n.kt)("p",null,"\u7531\u4e8e\u5730\u56fe\u7684\u9650\u5236\uff0c\u4ee5\u53ca\u590d\u6742\u5ea6\u7684\u63a7\u5236\uff0c\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\u7684\u4f20\u9001\u95e8\u673a\u5236\uff0c\u70b9\u51fb\u53ef\u4ee5\u8fdb\u5165\u79c1\u6709\u7684Creation"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7ba1\u662fReality World\u4e2d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u4e2a\u4eba\u72ec\u7acb\u7684Creation")),(0,n.kt)("p",null,"\u8fd9\u6837Reality World\u66f4\u50cf\u662f\u4e00\u4e2a\u591a\u91cd\u865a\u62df\u4e16\u754c\u7684\u5165\u53e3\uff0c\u4ed6\u53ef\u4ee5\u53bb\u5230\u5f88\u591a\u4e0d\u540c\u7684\u865a\u62df\u4e16\u754c\uff0c\u6bcf\u4e2a\u72ec\u7acb\u865a\u62df\u4e16\u754c\u5177\u6709\u66f4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\uff0c\u6bd4\u5982\u5728\u5b89\u5168\u65b9\u9762\u6ca1\u6709\u66f4\u591a\u7684\u9650\u5236\uff0c\u6bd4\u5982\u53ef\u4ee5\u4f7f\u7528\u66b4\u529b\uff0c\u6709\u574f\u4eba\uff0c\u5bb9\u6613\u906d\u5230\u653b\u51fb\u7b49\u7b49\u3002\u8fd9\u4e9b\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u662f\u4e00\u4e2a\u5e7f\u544a\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u4e00\u4e2a\u72ec\u7acb\u7684\u6e38\u620f\uff0c\u4e00\u4e2a\u5176\u4ed6\u4e92\u52a8\u5185\u5bb9\u7b49\u7b49\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"virtual-and-reality",src:l(3482).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7531\u4e8eReality World\u4e3b\u8981\u662f\u57fa\u4e8e\u73b0\u5b9e\u5730\u677f\uff0c\u56e0\u6b64\u5f62\u6210\u4e00\u79cd\u865a\u62df\u4e0e\u73b0\u5b9e\u7ed3\u5408\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"423-point-and-click"},"4.2.3 Point and Click"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u64cd\u63a7\uff0c\u53ef\u4ee5\u4f7f\u7528Point and Click\u6a21\u5f0f\u4e3a\u9ed8\u8ba4\u4e3b\u6a21\u5f0f\u3002"),(0,n.kt)("h2",{id:"43-\u6e90\u52a8\u529b"},"4.3 \u6e90\u52a8\u529b"),(0,n.kt)("h3",{id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"},"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5176\u4ed6\u5927\u4e16\u754c\uff0c\u56fa\u5b9a\u7684\u6a21\u5f0f\uff0c\u6a21\u677f\uff0c\u7528\u6237\u5b8c\u5168\u53ef\u4ee5\u81ea\u5b9a\u4e49\u81ea\u5df1\u6240\u5c5e\u7684\u4efb\u4f55\u4e1c\u897f\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u521b\u4f5c\u7684\u5efa\u7b51\u53ef\u4ee5\u6709\u5b8c\u5168\u4e0d\u540c\u7684\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u7684Avatar\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e0d\u540c\u7684\u884c\u4e3a")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u79cd\u81ea\u7531\u6027\u4ea7\u751f\u4e86\u4e24\u4e2a\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63a7\u5236\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4f53\u9a8c\uff0c\u81ea\u5df1\u8bbe\u8ba1\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u4e16\u754c\u7684\u4f53\u9a8c\u4f1a\u66f4\u52a0\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u53ef\u9884\u671f\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7528\u6237\u5c55\u793a\u7ed9\u5176\u4ed6\u73a9\u5bb6\u7684\u5185\u5bb9\u4e5f\u662f\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u56fa\u5b9a\u7684\u6a21\u677f")),(0,n.kt)("h3",{id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"},"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"),(0,n.kt)("p",null,"\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e2a\u66f4\u63a5\u8fd1\u771f\u5b9e\u793e\u4f1a\u7684\u7ecf\u6d4e\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u4f7f\u5f97Reality World\u91cc\u9762\u7684\u7ecf\u6d4e\u751f\u4ea7\u80fd\u591f\u6839\u636e\u5e02\u573a\u884c\u4e3a\uff0c\u4f7f\u4f18\u79c0\u7684\u5185\u5bb9\u66f4\u52a0\u83b7\u76ca\uff0c\u4ece\u800c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u66f4\u52a0\u6d3b\u8dc3\u548c\u7e41\u8363\uff0c\u6765\u4e3a\u4e0d\u540c\u7684\u7528\u6237\u521b\u9020\u4ef7\u503c\u3002"),(0,n.kt)("h4",{id:"4321-\u6301\u7eed\u7ecf\u6d4e"},"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u5e02\u573a\uff0c\u6784\u5efa\u6301\u7eed\u6d88\u8d39\u7684\u7ecf\u6d4e\u4f53\u5236\u6765\u662f\u5f00\u53d1\u8005\u83b7\u76ca\u66f4\u591a\uff0c\u5e76\u4e14\u53ef\u4ee5\u6301\u7eed\u83b7\u76ca\u3002\u53c2\u89c11.4.5\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"4322-\u5e7f\u544a\u5185\u5bb9"},"4.3.2.2 \u5e7f\u544a\u5185\u5bb9"),(0,n.kt)("p",null,"\u901a\u8fc7\u63d0\u4f9b\u72ec\u7279\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5e7f\u544a\u8bed\u4ea7\u54c1\u878d\u4e3a\u4e00\u4f53\uff0c\u63d0\u5347\u5e7f\u544a\u7684\u6548\u679c\uff0c\u4ece\u800c\u63d0\u9ad8\u9500\u552e\u6570\u91cf\u3002\u89c11.4.2\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"},"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"),(0,n.kt)("p",null,"\u6807\u51c6\u4f5c\u8005\u662fReality World\u91cc\u9762\u6700\u5177\u4ef7\u503c\u7684\u7528\u6237\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u5177\u6709\u5bf9\u73b0\u5b9e\u4e16\u754c\u6700\u9ad8\u7684\u62bd\u8c61\u548c\u8bbe\u8ba1\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u62bd\u8c61\u80fd\u529b\u4f7f\u5f97Reality World\u7684\u4f53\u9a8c\u80fd\u591f\u8fdb\u5316\u5f97\u8d8a\u6765\u8d8a\u597d\uff0c\u5e76\u4e14\u8986\u76d6\u7684\u8303\u56f4\u4f1a\u8d8a\u6765\u8d8a\u4e30\u5bcc"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u7ef4\u6301\u8fd9\u79cd\u5229\u76ca\uff0c\u6807\u51c6\u4f5c\u8005\u8fd8\u4f1a\u5f88\u597d\u5730\u7ef4\u62a4\u6807\u51c6\u793e\u533a\u7ec4\u4ef6\u7684\u5f00\u53d1")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e73\u53f0\u9700\u8981\u7ed9\u6807\u51c6\u4f5c\u8005\u6700\u9ad8\u7684\u7ecf\u6d4e\u5229\u76ca\uff0c\u53ea\u6709TA\u4eec\u624d\u4f1a\u4f7f\u6574\u4e2a\u5e73\u53f0\u8d8a\u6765\u8d8a\u5065\u5eb7\u3002"),(0,n.kt)("h2",{id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743"},"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743"),(0,n.kt)("p",null,"USD\u7684\u597d\u5904\u5728\u4e8e\uff0c\u53ef\u4ee5\u628a\u6bcf\u4e2a\u7528\u6237\u81ea\u5df1\u521b\u4f5c\u7684Creation\u4fdd\u5b58\u4e3a\u72ec\u7acb\u7684\u6587\u4ef6\uff0c\u8fd9\u6837\u65b9\u4fbf\u72ec\u7acb\u7684\u7f16\u8f91\u3001\u66f4\u65b0\u751a\u81f3\u5220\u9664\uff1b\u7136\u540e\u53c8\u53ef\u4ee5\u628a\u6240\u6709\u7528\u6237\u7684\u5185\u5bb9\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u5b83\u4eec\u7684\u76f8\u5bf9\u5750\u6807\u4f4d\u7f6e\u7b49\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u6837\u4e00\u4e2a\u5927\u4e16\u754c\u4e2d\uff0c\u6743\u9650\u6709\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u662f\u5bf9\u4e8e\u5355\u4e2a\u7528\u6237\u81ea\u5df1\u7684Creation\uff0c\u5176\u4e2d\u7684\u7ec4\u4ef6\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u5f00\u53d1\u8005\uff0c\u8fd9\u4e9b\u4e0d\u540c\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u80fd\u9700\u8981\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u662f\u5f53\u5c06\u6240\u6709\u7528\u6237\u7684Creation\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\u4e2d\uff0c\u5b83\u4eec\u53ef\u80fd\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u8fd9\u65f6\u5019\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u975e\u6cd5\u7684\u8bbf\u95ee")),(0,n.kt)("p",null,"\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u6765\u8bf4\uff0c\u6211\u4eec\u771f\u6b63\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u540e\u8005\u3002\u5373\u662f\u8bf4\uff0c\u5bf9\u4e8e\u524d\u8005\u6765\u8bb2\uff0c\u5c3d\u7ba1\u7528\u6237\u4f7f\u7528\u4e86\u591a\u4e2a\u5f00\u53d1\u8005\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u4f46\u662f\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u6700\u7ec8\u7684Creation\u90fd\u662f\u4ed6\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u4fdd\u8bc1\u7684\u662f\u6240\u6709\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\u662f\u5426\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\uff0c\u800c\u4e0d\u662f\u53bb\u5206\u914d\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8bbf\u95ee\u6743\u9650\uff1a\u4e00\u662f\u672c\u8d28\u4e0a\u7ec4\u4ef6\u8bbf\u95ee\u7684\u90fd\u662f\u4ed6\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e8c\u662f\u8fd9\u6837\u7684\u5173\u5fc3\u6d89\u53ca\u5230\u4e86\u4ee3\u7801\u7684\u7ec4\u7ec7\u548c\u5f00\u53d1\u903b\u8f91\uff0c\u8fd9\u4e0d\u662f\u7528\u6237\u5e94\u8be5\u5173\u5fc3\u7684\u3002\u4f46\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u786e\u5b9e\u4f1a\u5b58\u5728\u6709\u4e9b\u6076\u610f\u7ec4\u4ef6\u7834\u8bdd\u6570\u636e\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u5e94\u8be5\u5c0f\u5fc3\u5ba1\u6838\u7ec4\u4ef6\uff0c\u5e76\u4e14\u4f9d\u9760\u4e3e\u62a5\u7b49\u65b9\u5f0f\u76d1\u7ba1\u3002\u8fd9\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u76d1\u7ba1\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u8ba4\u4e3a\u4ed6\u4f7f\u7528\u7684\u7ec4\u4ef6\u5e94\u8be5\u90fd\u662f\u5b89\u5168\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u8d85\u51fa\u4e86\u7528\u6237\u7684\u9884\u671f\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u5e0c\u671b\u53ea\u8bfb\uff0c\u4f46\u662f\u8be5\u7ec4\u4ef6\u786e\u5b9e\u8bfb\u548c\u5199\u3002\u8fd9\u6837\u7684\u60c5\u51b5\u4e5f\u5e94\u8be5\u662f\u6b63\u5e38\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u5bf9\u53d8\u91cf\u7684\u8bbf\u95ee\u6743\u9650\u672c\u8eab\u662f\u5305\u542b\u5728\u7ec4\u4ef6\u7684\u903b\u8f91\u4e4b\u4e2d\u7684\u3002\u5982\u679c\u7528\u6237\u8ba4\u4e3a\u8fd9\u79cd\u6743\u9650\u8d8a\u754c\u4e86\uff0c\u7528\u6237\u5e94\u8be5\u9009\u62e9\u4f7f\u7528\u5176\u4ed6\u7ec4\u4ef6\uff0c\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u3002\u56e0\u4e3a\u76f4\u63a5\u4fee\u6539\u5c5e\u6027\u4e0d\u8ba9\u5176\u8bbf\u95ee\uff0c\u8fd9\u53ef\u80fd\u7834\u574f\u4e86\u7ec4\u4ef6\u672c\u8eab\u7684\u610f\u56fe\uff0c\u4f7f\u5f97\u5176\u7ec4\u4ef6\u7684\u529f\u80fd\u5b8c\u5168\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5readonly\u6216readwrite\u6743\u9650\u6807\u5fd7\u5e94\u8be5\u662f\u7528\u6765\u5904\u7406Reality World\u8fd9\u79cd\u591aCreation\u5171\u4eab\u7684\u573a\u666f\uff0c\u5373\u6211\u4eec\u7684\u6570\u636e\u80fd\u591f\u88ab\u4e0d\u8ba4\u8bc6\u7684\u4eba\u600e\u4e48\u8bbf\u95ee\u3002\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5b58\u5728\u4e00\u4e0b\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9\u5355\u4e2a\u53d8\u91cf\u8fdb\u884c\u58f0\u660e\u4f1a\u663e\u5f97\u975e\u5e38\u590d\u6742\uff0c\u6240\u6709\u5b9e\u4f53\u7684\u6240\u6709\u53d8\u91cf\u53ef\u80fd\u4f1a\u591a\u8fbe\u51e0\u767e\u4e2a"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9Creation\u65e2\u8fdb\u884c\u8bbe\u7f6e\u53c8\u4f1a\u5bfc\u81f4\u5927\u90e8\u5206\u5171\u4eab\u4ea4\u4e92\u7684\u673a\u5236\u5efa\u7acb\u4e0d\u8d77\u6765\uff0c\u56e0\u4e3a\u7528\u6237\u503e\u5411\u4e8e\u628a\u6240\u6709\u6570\u636e\u8bbe\u4e3a\u79c1\u6709\uff0c\u8fd9\u4f7f\u5f97\u57fa\u672c\u4e0a\u65e0\u6cd5\u4e0e\u5916\u754c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u8bf8\u5982RenderComponent\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u662f\u4e0d\u53ef\u4ee5\u8bbe\u7f6e\u6743\u9650\u7684\uff0c\u4e0d\u8fc7\u8fd9\u79cd\u60c5\u51b5\u7531\u7cfb\u7edf\u51b3\u5b9a\u5c31\u597d\u4e86\uff0c\u4f8b\u5982\u7cfb\u7edf\u4e0d\u8ba9\u7f16\u8f91\u8fd9\u90e8\u5206\u5c5e\u6027\uff0c\u4f8b\u5982\u7269\u7406\u548c\u53ef\u89c6\u76f8\u5173\u7684\u5c5e\u6027\u57fa\u672c\u4e0a\u90fd\u5c5e\u4e8e\u8fd9\u79cd\u5c5e\u6027")),(0,n.kt)("p",null,"\u7528\u6237\u8fd8\u662f\u5e94\u8be5\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u53d8\u91cf\u7ba1\u7406\u8fd9\u79cd\u6743\u9650\uff0c\u7531\u7f16\u8f91\u5668\u6216\u8005\u7cfb\u7edf\u52a8\u6001\u5c06\u6240\u6709\u516c\u5171\u7684\u7b26\u53f7\u53d8\u91cf\u603b\u7ed3\u5230\u4e00\u8d77\uff0c\u5e76\u6309\u7c7b\u522b\u5f62\u6210\u4e00\u4e2a\u5982iOS\u7cfb\u7edf\u4e2dSetting\u7684\u5217\u8868\uff0c\u7531\u7528\u6237\u7edf\u4e00\u8bbe\u7f6e\uff0c\u8fd9\u6837\u5728\u6253\u5305\u7684\u65f6\u5019\u76f4\u63a5\u4fee\u6539\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\uff0c\u8fd9\u6837\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\u5230\u5b9e\u4f53\u7ea7\u522b\u662f\u4e0d\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u79cdSetting\u8868\u53ea\u5bf9Reality World\u6709\u6548\uff0c\u5982\u679c\u4e0d\u53d1\u5e03\u81f3Reality World\uff0c\u5219\u8fd9\u4e2a\u529f\u80fd\u6839\u672c\u4e0d\u53ef\u89c1\u3002\u4e5f\u5373\u4e0d\u4f1a\u5141\u8bb8\u7b2c\u4e09\u65b9\u5f00\u53d1\u7c7b\u4f3cReality World\u7684\u5e94\u7528--\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u6982\u5ff5\uff0c\u4e5f\u7b80\u5316\u4e86\u6574\u4e2a\u6743\u9650\u8bbe\u7f6e\u7684\u590d\u6742\u5ea6\uff0c\u5373\u540c\u4e00\u4e2a\u7b26\u53f7\u5373\u4f7f\u6709\u591a\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u7684\u5168\u7cfb\u5747\u8bbe\u7f6e\u4e00\u6b21\uff0c\u907f\u514d\u4e86\u5bf9\u6240\u6709\u5c5e\u6027\u5b9e\u4f8b\u5206\u522b\u8bbe\u7f6e\uff0c\u56e0\u4e3a\u7b26\u53f7\u672c\u8eab\u4e5f\u662f\u5305\u542b\u4e86\u610f\u4e49\u5728\u91cc\u9762\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u968f\u4fbf\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u5b57\u3002"),(0,n.kt)("h3",{id:"441-realityidcomponent"},"4.4.1 RealityIDComponent"),(0,n.kt)("p",null,"\u6bcf\u4e2aEntity\u90fd\u5e94\u8be5\u5177\u6709RealityID\u8fd9\u4e2a\u5b57\u6bb5\uff0c\u7528\u4e8e\u533a\u5206System\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u77e5\u9053\u6240\u5c5e\u5173\u7cfb"),(0,n.kt)("h3",{id:"442-readonly"},"4.4.2 readonly"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u7684\u6743\u9650\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u80fd\u662freadonly\uff0c\u5373\u7528\u6237\u4e4b\u95f4\u53ea\u80fd\u8bfb\u53d6\u6570\u636e\uff0c\u4e0d\u540c\u5199\u6216\u8005\u4fee\u6539\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5c06System\u5f3a\u5236\u4e0e\u4e00\u4e2aComponent\u5173\u8054\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u6837System\u662f\u6709\u6240\u6709\u6743\u7684\uff0c\u5b83\u5c5e\u4e8e\u67d0\u4e00\u4e2a\u7279\u5b9a\u7684Entity\uff0c\u800c\u6bcf\u4e2aEntity\u62e5\u6709\u7279\u5b9a\u7684RealityID\uff0c\u56e0\u6b64\u53ef\u4ee5\u4fbf\u4e8e\u63a7\u5236\u3002\u5982\u679cSystem\u662f\u7cfb\u7edf\u72ec\u7acb\u65b9\u6cd5\uff0c\u5c31\u53ea\u80fd\u62ff\u5230Entity\u4e4b\u540e\u624d\u80fd\u51b3\u5b9a\u5176\u6570\u636e\u662f\u5426\u53ef\u7528\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5982\u679c\u6743\u9650\u4e0d\u591f\uff0c\u5219\u4f1a\u9020\u6210\u6d6a\u8d39\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7cfb\u7edf\u5e94\u8be5\u907f\u514d\u8bfb\u53d6\u6ca1\u6709\u6743\u9650\u7684\u6570\u636e\uff0c\u7531\u4e8eSystem\u4e0e\u5b9e\u4f53\u5173\u8054\uff0c\u5c31\u53ef\u4ee5\u6bd4\u8f83\u6743\u9650\uff0c\u5373\u5bf9\u4e8eRealityID\u4e0d\u7b49\u4e8e\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e0d\u80fd\u8fdb\u884c\u4fee\u6539\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5426\u53ef\u8bfb\u4e5f\u53d6\u51b3\u4e8e\u7528\u6237\u7684\u8bbe\u7f6e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5bf9\u4e8e\u7a0b\u5e8f\u800c\u8a00\uff0c\u6709\u4e09\u79cd\u6743\u9650\uff1a\u5176\u4e2dreadonly\u548creadwrite\u5e94\u8be5\u662fCreation\u5185\u90e8\u7684\u4e8b\u60c5\uff1b\u8fd9\u91cc\u7684readonly\u8fd8\u6709\u5e94\u8be5\u62c6\u5206\u6210RealityID\u5185\u90e8\u548cRealityID\u4e4b\u95f4\uff0c\u6bd4\u5982\u4f7f\u7528share"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"readonly"),(0,n.kt)("li",{parentName:"ul"},"readwrite"),(0,n.kt)("li",{parentName:"ul"},"share")),(0,n.kt)("h3",{id:"443-\u91cd\u65b0\u52a0\u8f7d"},"4.4.3 \u91cd\u65b0\u52a0\u8f7d"),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u6743\u9650\uff0c\u56e0\u6b64\u5f53\u67d0\u4e2a\u7528\u6237\u4fee\u6539\u4e4b\u540e\uff0c\u5176\u4ed6\u6b63\u5728Reality World\u7684\u5728\u7ebf\u7528\u6237\u5e94\u8be5\u5bf9\u5176\u8fdb\u884c\u91cd\u65b0\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"45-\u7a33\u5b9a\u6027"},"4.5 \u7a33\u5b9a\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u786e\u4fdd\u6bcf\u4e2aCreation\u5728\u63d0\u4ea4\u4e4b\u524d\uff0c\u8fd0\u884c\u65f6\u662f\u7a33\u5b9a\u7684\uff0c\u5426\u5219\u7a0b\u5e8f\u4e2d\u53ea\u8981\u5305\u542b\u8fd9\u4e2aCreation\u5c31\u53ef\u80fd\u5bfc\u81f4\u5d29\u6e83\u3002\u5728Reality World\u8fd9\u79cd\u5b8c\u5168\u5f00\u53d1\u7684\u4e16\u754c\u4e2d\uff0c\u8fd9\u4e2a\u95ee\u9898\u66f4\u662f\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\uff0c\u6838\u5fc3\u95ee\u9898\u5176\u5b9e\u5f52\u7ed3\u4e3a\u4e00\u4e2a\uff0c\u5373\u7a0b\u5e8f\u7684\u7a33\u5b9a\u6027\uff0c\u6240\u4ee5\u5bf9\u6240\u6709\u7684\u7ec4\u4ef6\u8981\u8fdb\u884c\u5ba1\u6838\uff0c\u4ee5\u51cf\u8f7b\u5bf9\u540e\u9762\u7528\u6237Creation\u7a33\u5b9a\u6027\u7684\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u6240\u6709\u9700\u8981\u63d0\u4ea4\u5230Reality World\u7684\u5fc5\u987b\u662f\u7ecf\u8fc7Reality World\u9a8c\u8bc1\u8fc7\u7684\u7ec4\u4ef6\uff0c\u5426\u5219\u65e0\u6cd5\u53d1\u5e03\u81f3Reality World\uff0c\u4f46\u662f\u7528\u6237\u81ea\u5df1\u7684Creation\u5219\u53ef\u4ee5\u4f7f\u7528\u672a\u7ecf\u9a8c\u8bc1\u7684\u7ec4\u4ef6\uff0c\u56e0\u4e3a\u8fd9\u5f71\u54cd\u7684\u7528\u6237\u8303\u56f4\u5f88\u5c0f\uff0c\u7528\u6237\u4e00\u65e6\u53d1\u73b0\u95ee\u9898\u81ea\u5df1\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"451-reality-verified-components"},"4.5.1 Reality Verified Components"),(0,n.kt)("p",null,"\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u5ba1\u6838\u4e0e\u6d4b\u8bd5\uff0c\u5408\u6cd5\u7684\u7ec4\u4ef6\u624d\u80fd\u88ab\u7528\u6237\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u672a\u7ecf\u5ba1\u6838\u7684\u7ec4\u4ef6\u81ea\u80fd\u7528\u4e8e\u5c0f\u8303\u56f4\u6d4b\u8bd5\u3002"),(0,n.kt)("h3",{id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"},"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u5408\u6cd5\u4f46\u662f\u6bd4\u8f83\u65e7\u7684\u7ec4\u4ef6\uff0c\u53ef\u80fd\u5bfc\u81f4\u8ddf\u6807\u51c6\u4e0d\u518d\u517c\u5bb9\u7b49\u5bfc\u81f4\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u8fc7\u671f\u884c\u4e3a\u8981\u8fdb\u884c\u5224\u65ad\u3002\u4ece\u4e24\u4e2a\u5c42\u9762\u6765\u4fdd\u8bc1\u7a33\u5b9a\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63d0\u9192\u7528\u6237\u53ca\u65f6\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u672a\u7ecf\u66f4\u65b0\u7684\u4ee3\u7801\uff0c\u7cfb\u7edf\u80fd\u591f\u5728\u52a0\u8f7d\u65f6\u52a8\u6001\u5224\u65ad\uff0c\u7136\u540e\u4e22\u5f03\u4e0e\u6807\u51c6\u4e0d\u517c\u5bb9\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u901a\u8fc7\u4ee5\u4e0a\u7684\u673a\u5236\uff0c\u80fd\u591f\u4fdd\u8bc1\u6574\u4e2aReality World\u7684\u7a33\u5b9a\u6027\u3002\u8fd9\u5bf9\u4e8e\u4e00\u4e2a\u5927\u7684\u52a8\u6001\u66f4\u65b0\u7684\u4e16\u754c\u81f3\u5173\u91cd\u8981\u3002\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u53c8\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u81ea\u7531\u63d0\u4ea4\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u4e0d\u5177\u5907\u5f00\u653e\u6027\uff0c\u4f46\u662f\u8fd9\u5c31\u5bb9\u6613\u5bfc\u81f4\u4e0d\u7a33\u5b9a\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\u5fc5\u987b\u4fdd\u8bc1\u6574\u4e2a\u7cfb\u7edf\u7684\u66f4\u65b0\u673a\u5236\uff0c\u56e0\u4e3a\u7ef4\u62a4\u592a\u591a\u8fc7\u671f\u7684\u7ec4\u4ef6\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7cfb\u7edf\u6765\u8bf4\u6210\u672c\u975e\u5e38\u9ad8\uff0c\u5fc5\u987b\u4fc3\u8fdb\u7cfb\u7edf\u5feb\u901f\u66f4\u65b0")),(0,n.kt)("h2",{id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613"},"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613"),(0,n.kt)("p",null,"\u7531\u4e8e\u5b89\u5168\u6027\u7684\u539f\u56e0\uff0c\u6240\u6709\u4e24\u4e2a\u7528\u6237\u4e4b\u95f4\u7684\u4ea4\u6613\uff0c\u90fd\u9700\u8981\u8c03\u7528\u4e00\u4e9b\u7279\u6b8a\u7684\u7cfb\u7edfAPI\uff0c\u8fd9\u4e9bAPI\u4e0d\u5e94\u8be5\u7279\u5b9a\u4e8eReality World\uff0c\u800c\u662f\u6240\u6709Creation\u4e2d\u6d89\u53ca\u6d88\u8d39\u7684\u90fd\u53ef\u4ee5\uff0c\u56e0\u4e3a\u672c\u8d28\u4e0a\u4ea4\u6613\u5c31\u662f\u4e24\u4e2aReality ID\u4e4b\u95f4\u53d1\u751f\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"461-\u53ca\u65f6\u8d2d\u4e70"},"4.6.1 \u53ca\u65f6\u8d2d\u4e70"),(0,n.kt)("p",null,"3D\u7684\u4e1c\u897f\u6ca1\u6cd5\u50cf\u4f20\u7edf\u5546\u54c1\u4e00\u6837\u901a\u8fc7\u56fe\u7247\u7684\u65b9\u5f0f\u6d4f\u89c8\u5c31\u53ef\u4ee5\u83b7\u5f97\u5f88\u597d\u7684\u4e86\u89e3\uff0c\u56e0\u4e3a\u5b83\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u89c6\u89c9\u53ea\u662f\u5176\u4e2d\u5f88\u5c0f\u7684\u5143\u7d20\uff0c\u751a\u81f3\u89c6\u9891\u4e5f\u4e0d\u662f\u6700\u597d\u7684\u4e86\u89e3\u65b9\u5f0f"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f20\u7edf\u7684\u5e7f\u544a\uff0c\u6211\u4eec\u901a\u5e38\u4e0d\u80fd\u83b7\u5f97\u592a\u591a\u4f53\u9a8c\u4e0a\u7684\u4fe1\u606f\uff0c\u66f4\u591a\u662f\u5176\u4ed6\u4e00\u4e9b\u975e\u4ea7\u54c1\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u4e00\u79cd\u65b0\u7684\u8d2d\u4e70\u6a21\u5f0f\uff1a\u5f53\u4f60\u5728\u4f53\u9a8c\u4e00\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u65f6\u5019\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u5728\u8bd5\u9a7e\u4e00\u8f86\u8f66\uff0c\u83b7\u5f97\u4e0d\u9519\u7684\u4f53\u9a8c\u4e4b\u540e\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u8ddf\u597d\u53cb\u4e00\u8d77\u73a9\u6e38\u620f\uff0c\u770b\u5230\u597d\u53cb\u4f7f\u7528\u7684\u67d0\u4e2a\u4ea4\u4e92\u5185\u5bb9"),(0,n.kt)("h3",{id:"462-\u667a\u80fd\u8d2d\u4e70"},"4.6.2 \u667a\u80fd\u8d2d\u4e70"),(0,n.kt)("p",null,"\u5728\u7528\u6237\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u6216\u8005\u770b\u5230\u67d0\u4e2a\u5185\u5bb9\u65f6\u53ef\u4ee5\u7406\u89e3\u8d2d\u4e70\uff0c\u5c31\u50cf\u5728\u5546\u573a\u7684\u8d2d\u4e70\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"},"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"You can play the game with. And that was incredibly interesting to see. Um, I think this is going to be the future of this shared 3d entertainment, medium. Um, it's not about Facebook pages, it's not about advertising. It's about actually delivering meaningful experiences that people can interact with. And that become part of this much larger world, right?")," So the programming model for the metaverse must incorporate, uh, the assumption that everybody's on objects, they build should be able to interact sensibly and fit and safely with everybody else's objects, your car, you know, built by Ford should be able to interact with your motorcycle built by Dati."),(0,n.kt)("p",null,"If an architect to be is a major work of architecture in the metaverse, you know, that should work with all the different player models have been introduced into the game and everything should work together. So I think the center, the focus of any programming model, uh, for the metaverse needs to be open world compatibility over time, open interfaces, um, which can evolve and be extended over time."),(0,n.kt)("h4",{id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"},"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"R-C",src:l(5714).Z,width:"1170",height:"780"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u6837\u7684\u9700\u6c42\uff0c\u73b0\u6709\u53ef\u80fd\u7684\u505a\u6cd5\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u6bcf\u4e2a\u5e7f\u544a\u4ea7\u54c1\uff0c\u5e7f\u544a\u5546\u81ea\u5df1\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5e76\u53d1\u5e03\uff0c\u7531\u4e8e\u5f00\u53d1\u8005\u5177\u6709\u6240\u6709\u7684\u6e90\u4ee3\u7801\uff0c\u6240\u4ee5\u53ef\u4ee5\u4efb\u610f\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8981\u5b9e\u73b0\u81ea\u5b9a\u4e49\u590d\u6742\u4ea4\u4e92\uff0c\u6bcf\u4e2a\u5e7f\u544a\u5546\u9700\u8981\u628a\u6e90\u4ee3\u7801\u4ea4\u7ed9\u5e73\u53f0\uff0c\u7531\u5e73\u53f0\u7edf\u4e00\u90e8\u7f72\u53d1\u5e03\uff0c\u5e76\u8981\u6c42\u7528\u6237\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5e7f\u544a\u53ef\u4ee5\u4f7f\u7528\u6709\u9650\u7684\u4ea4\u4e92\uff0c\u6309\u7167\u4e00\u5b9a\u7684\u6807\u51c6\u5f00\u53d1\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4e0d\u7ecf\u8fc7\u5f00\u53d1\u5546\u81ea\u5b9a\u53d1\u5e03")),(0,n.kt)("p",null,"\u663e\u7136\u8fd9\u4e9b\u90fd\u4e0d\u662f\u6700\u597d\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5RealityIS\u53ef\u4ee5\u521b\u4f5c\u5168\u65b0\u7684\u5546\u4e1a\u6a21\u5f0f\uff0c\u8fd9\u91cc\u4efb\u610f\u5e7f\u544a\u5546\u53ef\u4ee5\u5b8c\u5168\u6309\u7167\u81ea\u5df1\u7684\u8bbe\u8ba1\u5b9a\u4e49\u529f\u80fd\u4e30\u5bcc\u7684\u4ea7\u54c1\uff0c\u7136\u540e\u5728Reality World\u4e2d\u81ea\u7531\u53d1\u5e03\u3002"),(0,n.kt)("h3",{id:"464-\u5e02\u573a\u7ecf\u6d4e"},"4.6.4 \u5e02\u573a\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u5b9e\u9645\u4ef7\u503c\u7531\u4eba\u4eec\u4e3b\u52a8\u53c2\u4e0e\u7ecf\u6d4e\u7684\u884c\u4e3a\u51b3\u5b9a\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7684\u6295\u7968\u6216\u8005\u5176\u4ed6\u673a\u5236\u51b3\u5b9a\uff0c\u786e\u4fdd\u865a\u62df\u8d27\u5e01\u7684\u6570\u91cf\u662f\u7531\u7ecf\u6d4e\u884c\u4e3a\u51b3\u5b9a\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u9700\u8981\u4e0e\u8fd9\u79cd\u884c\u4e3a\u4ea7\u751f\u76f4\u63a5\u5173\u8054\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5bf9\u4e8eReality World\u7684\u7ecf\u6d4e\u6765\u8bf4\uff0c\u6709\u4e24\u70b9\u662f\u81f3\u5173\u91cd\u8981\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u7ecf\u6d4e\u7684\u4e3b\u8981\u63a8\u52a8\u8005\u662f\u4eba\u4eec\u7684\u4e3b\u52a8\u7ecf\u6d4e\u53c2\u4e0e\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u865a\u62df\u7ecf\u6d4e\u7684\u8d27\u5e01\u4e0e\u4eba\u4eec\u5b9e\u9645\u611f\u53d7\u5230\u7684\u4ef7\u503c\u76f8\u5173\u8054")),(0,n.kt)("p",null,"Reality World\u901a\u8fc7\u6784\u5efa\u9ad8\u5ea6\u5f00\u653e\u7684\u4e16\u754c\uff0c\u907f\u514d\u4e2d\u592e\u5f0f\u7684\u5e72\u9884\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u7ecf\u6d4e\u8fd0\u4f5c\u3002\u540c\u65f6\u6807\u51c6\u7684\u53d1\u5e03\u3001\u53cd\u9988\u4ee5\u53ca\u4eba\u4eec\u5b9e\u9645\u4f7f\u7528\u76f8\u5173\u8054\uff0c\u901a\u8fc7\u4eba\u4eec\u7684\u4e3b\u52a8\u9009\u62e9\u6765\u5b9e\u73b0\u4ef7\u503c\u7684\u7b5b\u9009\u4e0e\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5f8b\u662f\u76f8\u5bf9\u786e\u5b9a\u4eba\uff0c\u4eba\u4eec\u4e0d\u7ba1\u662f\u5728\u771f\u5b9e\u4e16\u754c\u8fd8\u662f\u865a\u62df\u4e16\u754c\u4e2d\u90fd\u9700\u8981\u6709\u7c7b\u4f3c\u516c\u5e73\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u4eba\u4eec\u7684\u7ecf\u6d4e\u6d3b\u52a8\u53c2\u4e0e\u662f\u6709\u610f\u4e49\u7684\uff0c\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5219\u662f\u4eba\u7c7b\u6570\u5e74\u6765\u79ef\u7d2f\u7684\u6210\u679c\uff0c\u5b83\u4e5f\u662f\u4eba\u4eec\u719f\u6089\u7684\u601d\u7ef4\uff0c\u53ea\u4e0d\u8fc7\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u901a\u8fc7\u6570\u5b57\u6280\u672f\u66f4\u5c11\u4e2d\u592e\u96c6\u6743\u5f0f\u7684\u5e72\u9884\u3002"),(0,n.kt)("p",null,"\u90a3\u65e2\u7136\u662f\u8ddf\u771f\u5b9e\u793e\u4f1a\u4e00\u6837\u7684\u7ecf\u6d4e\u4f53\u9a8c\uff0c\u8fd8\u6709\u4ec0\u4e48\u610f\u4e49\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u865a\u62df\u4e16\u754c\u5462\uff1f\u5c3d\u7ba1\u4e24\u8005\u7684\u7ecf\u6d4e\u4f53\u5236\u76f8\u4f3c\uff0c\u4f46\u662f\u5728\u865a\u62df\u4e16\u754c\u4e2d\u53ef\u4ee5\u521b\u4f5c\u548c\u4f53\u9a8c\u5728\u771f\u5b9e\u4e16\u754c\u65e0\u6cd5\u5b9e\u73b0\u7684\u4e8b\u60c5\u548c\u4f53\u9a8c\uff0c\u8fd9\u5c31\u662f\u865a\u62df\u4e16\u754c\u7684\u4ef7\u503c\uff0c\u800c\u4e14\u8fd9\u79cd\u4ef7\u503c\u901a\u8fc7\u7ecf\u6d4e\u7684\u673a\u5236\u800c\u5f97\u4eba\u4eec\u89c9\u5f97\u4e5f\u662f\u6709\u610f\u4e49\u7684\u3002\u53cd\u4e4b\uff0c\u6ca1\u6709\u4efb\u4f55\u7ecf\u6d4e\u610f\u4e49\u7684\u4e8b\u60c5\u53ef\u80fd\u5c31\u662f\u65e0\u610f\u4e49\u7684\uff0c\u4eba\u4eec\u4f1a\u628a\u5f88\u591a\u4e8b\u60c5\u5f53\u6210\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\uff0c\u5373\u4f7f\u662f\u7cbe\u795e\u4e0a\u7684\u4f53\u9a8c\u4e5f\u53ef\u4ee5\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u7ecf\u6d4e\u601d\u7ef4\u662f\u4eba\u4eec\u89c9\u5f97\u6240\u6709\u53c2\u4e0e\u4e0e\u4ed8\u51fa\u4f1a\u6709\u610f\u4e49\u7684\u4e00\u79cd\u5fc3\u7406\u57fa\u7840\u3002"),(0,n.kt)("h4",{id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"},"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5c3d\u7ba1\u7528\u6237\u7684\u7ecf\u6d4e\u8d2d\u4e70\u884c\u4e3a\u4e3a\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4ea7\u751f\u4ef7\u503c\uff0c\u4f46\u662f\u8fd9\u79cd\u4ef7\u503c\u662f\u4e00\u79cd\u603b\u4f53\u884c\u4e3a\uff0c\u800c\u4e0d\u662f\u7531\u5355\u8bcd\u8d2d\u4e70\u51b3\u5b9a\u7684\u3002"),(0,n.kt)("h3",{id:"465-\u533a\u5757\u94fe"},"4.6.5 \u533a\u5757\u94fe"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u89e3\u51b3\u4e86\u4e24\u4ef6\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u901a\u8fc7\u6280\u672f\u624b\u6bb5\u5b9a\u4e49\u4e86\u7269\u6743\uff0c\u5e76\u4e14\u4e00\u65e6\u4f60\u62e5\u6709\u7269\u6743\uff0c\u522b\u4eba\u6ca1\u6cd5\u7be1\u6539\uff0c\u56e0\u4e3a\u6574\u4e2a\u4efb\u4f55\u5bf9\u8be5\u7269\u6743\u7684\u8f6c\u6362\u90fd\u4f1a\u88ab\u8bb0\u5f55\uff0c\u800c\u8fd9\u79cd\u8f6c\u6362\u53ea\u6709\u5728\u6240\u6709\u8005\u540c\u610f\u4e4b\u540e\u624d\u80fd\u88ab\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8d26\u672c\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u610f\u5473\u7740\u7269\u54c1\u53ef\u4ee5\u88ab\u4efb\u610f\u8f6c\u6362\u6216\u8005\u8bf4\u4ea4\u6613\uff0c\u8fd9\u5c31\u4e3a\u5546\u54c1\u7684\u81ea\u7531\u4ea4\u6613\u521b\u9020\u4e86\u53ef\u80fd\u3002\u53cd\u89c2\u4f20\u7edf\u7684\u4e2d\u592e\u5f0f\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u4e00\u4ef6\u7269\u54c1\u7684\u4ea4\u6613\u901a\u5e38\u53ea\u53d1\u751f\u4e00\u6b21\uff0c\u4e00\u822c\u5e73\u53f0\u4e0d\u4f1a\u63d0\u4f9b\u8fd9\u79cd\u65e0\u9650\u8f6c\u5356\u7684\u673a\u5236\uff0c\u5373\u4f7f\u63d0\u4f9b\u8fd9\u79cd\u673a\u5236\uff0c\u901a\u5e38\u4e5f\u662f\u8ba4\u4e3a\u4e0d\u53ef\u9760\u7684\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4ea4\u6613\u8d26\u672c\u53ef\u80fd\u88ab\u7be1\u6539\u3002")),(0,n.kt)("p",null,"\u4f46\u672c\u8d28\u4e0a\uff0c\u533a\u5757\u94fe\u53ea\u89e3\u51b3\u5173\u4e8e\u7269\u54c1\u4ea4\u6613\u7684\u8fc7\u7a0b\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u53ea\u662f\u8f85\u52a9\u6027\u7684\uff0c\u4f46\u662f\u5b83\u5e76\u4e0d\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u5168\u90e8\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u80fd\u5426\u4fdd\u8bc1\u865a\u62df\u8d27\u5e01\u4e0e\u771f\u5b9e\u4ef7\u503c\u7684\u6620\u5c04\u662f\u5426\u5b89\u5168\u53ef\u9760\u7684\u95ee\u9898\uff0c\u8fd9\u53ef\u80fd\u5bfc\u81f4\u4e0a\u5f53\u53d7\u9a97\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u7269\u54c1\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u600e\u6837\u66f4\u516c\u5e73\u5730\u51b3\u5b9a\u7269\u54c1\u4ef7\u503c\u7684\u673a\u5236\uff1b\u4f8b\u5982\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4eba\u4eec\u7684\u7ecf\u6d4e\u4ea4\u6613\u9664\u4e86\u4ea7\u751f\u7269\u54c1\u4ea4\u6362\uff0c\u8fd9\u79cd\u884c\u4e3a\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7ecf\u6d4e\u4ef7\u503c\uff0c\u6bd4\u5982\u6700\u6838\u5fc3\u7684\u662f\u51b3\u5b9a\u7269\u54c1\u7684\u4ef7\u503c\u3002\u8fd9\u4e9b\u673a\u5236\u8ddf\u533a\u5757\u94fe\u7684\u7406\u5ff5\u90fd\u5dee\u5f88\u8fdc\u3002")),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5b83\u7ea6\u6e38\u620f\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u5927\u5bb6\u5206\u4eab\u548c\u5171\u540c\u73a9\u6e38\u620f\u624d\u80fd\u4ea7\u751f\u4ef7\u503c\u7684\u7406\u5ff5\u662f\u76f8\u8fdd\u80cc\u7684\uff0c\u533a\u5757\u94fe\u66f4\u9f13\u52b1\u5c01\u95ed\u548c\u79d8\u5bc6\u7684\u884c\u4e3a\u3002"),(0,n.kt)("h4",{id:"4651-\u4ef7\u503c\u5173\u8054"},"4.6.5.1 \u4ef7\u503c\u5173\u8054"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u4e0d\u89e3\u51b3\u4ef7\u503c\u5173\u8054\u7684\u95ee\u9898\uff0c\u4e00\u5b9a\u6570\u91cf\u7684\u865a\u62df\u8d27\u5e01\u5230\u5e95\u5173\u8054\u591a\u5c11\u5b9e\u9645\u7269\u54c1\u7684\u4ef7\u503c\uff0c\u4ee5\u53ca\u600e\u6837\u5173\u8054\uff0c\u8fd9\u4e0d\u662f\u533a\u5757\u94fe\u4f1a\u8003\u8651\u7684\u3002\u5982\u679c\u8fd9\u4e2a\u95ee\u9898\u4e0d\u89e3\u51b3\uff0c\u4e5f\u8bb8\u4ece\u6e90\u5934\u4e0a\u5c31\u4e0d\u53ef\u63a7\u4e86\uff0c\u540e\u9762\u7684\u7269\u6743\u4fdd\u969c\u4e5f\u5c31\u6ca1\u6709\u610f\u4e49\u3002"),(0,n.kt)("h4",{id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a"},"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u7269\u54c1\u7684\u4ef7\u503c\u5230\u5e95\u600e\u6837\u53d8\u52a8\uff0c\u6ca1\u6709\u66f4\u597d\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4e00\u4e2a\u7269\u54c1\u7684\u4ef7\u503c\u80af\u5b9a\u4e0d\u662f\u7531\u6295\u7968\u6765\u51b3\u5b9a\u7684\uff0c\u5b83\u662f\u7531\u4eba\u4eec\u7684\u7ecf\u6d4e\u884c\u4e3a\u6765\u51b3\u5b9a\u7684\u3002\u6295\u7968\u662f\u53ef\u4ee5\u88ab\u64cd\u4f5c\u7684\uff0c\u6216\u8005\u4e5f\u53ef\u80fd\u662f\u865a\u5047\u7684\u3002\u4f46\u662f\u771f\u5b9e\u7684\u7ecf\u6d4e\u884c\u4e3a\u662f\u4e0d\u4f1a\u8bf4\u8c0e\u7684\uff0c\u5373\u4f7f\u67d0\u4e9b\u4e2a\u4f53\u5b58\u5728\u504f\u5dee\uff0c\u4f46\u603b\u4f53\u800c\u8a00\u662f\u5ba2\u89c2\u7684\uff0c\u8fd9\u5c31\u662f\u771f\u5b9e\u4e16\u754c\u7269\u54c1\u4ef7\u503c\u51b3\u5b9a\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728Reality World\uff0c\u6211\u4eec\u4ece\u6280\u672f\u4e0a\u628a\u4eba\u4eec\u8fd9\u79cd\u7ecf\u6d4e\u884c\u4e3a\u878d\u5165\u5230\u5546\u54c1\u4ef7\u503c\u4f53\u7cfb\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u4eba\u7f51\u7edc\u4e4b\u95f4\u7684\u53e3\u7891\uff0c\u4f8b\u5982\u5982\u679c\u4f60\u51b3\u5b9a\u67d0\u4e2a\u4e1c\u897f\u597d\uff0c\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u8fd9\u6837\u7684\u63a8\u8350\u66f4\u9760\u8c31\uff0c\u4f60\u7528\u670b\u53cb\u4e4b\u95f4\u7684\u5173\u7cfb\u6765\u4fdd\u969c\u4f60\u7684\u53e3\u7891\uff0c\u800c\u4e0d\u662f\u968f\u4fbf\u4e00\u53e5\u4e0d\u8d1f\u8d23\u4efb\u7684\u8bdd\u3002\u800c\u4e3a\u4ec0\u4e48\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u662f\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u7684\u4e92\u52a8\u5927\u90fd\u591a\u662f\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u8fdb\u884c\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7ade\u4e89\uff0c\u5bf9\u4e8e\u76f8\u4f3c\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5b9e\u73b0\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u4f1a\u76f8\u4e92\u7ade\u4e89\uff0c\u56e0\u6b64\u7ade\u4e89\u4e5f\u4f1a\u6307\u5bfc\u5b9a\u4ef7\uff0c\u5bf9\u6807\u51c6\u4e5f\u662f\u4e00\u6837\u3002")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u662f\u66f4\u63a5\u8fd1\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u4fdd\u8bc1\u7269\u54c1\u7684\u4ef7\u503c\u662f\u4e0e\u4f60\u9700\u8981\u4ed8\u51fa\u7684\u4ee3\u7801\u5339\u914d\u7684\u3002"),(0,n.kt)("h4",{id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"},"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684NFT\u7cfb\u7edf\u4e2d\uff0c\u7269\u54c1\u88ab\u53cd\u590d\u548c\u5927\u91cf\u8f6c\u5356\uff0c\u800c\u4e0d\u662f\u50cf\u6e38\u620f\u4e00\u6837\u88ab\u5927\u91cf\u73a9\u5bb6\u771f\u6b63\u7684\u4f53\u9a8c\u3002\u5728\u8fd9\u4e9b\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u751a\u81f3\u5927\u90e8\u5206\u4e70\u5bb6\u548c\u5356\u5bb6\u6839\u672c\u5c31\u6ca1\u6709\u53bb\u4f53\u9a8c\u5b83\u771f\u6b63\u7684\u5185\u5bb9\uff0c\u5f53\u7136\u4e5f\u4e0d\u53ef\u80fd\u6709\u673a\u4f1a\u53bb\u6539\u8fdb\u5b83\uff0c\u6216\u8005\u53bb\u589e\u52a0\u5b83\u7684\u4ef7\u503c\u3002\u8fd9\u6837\u7684\u7ecf\u6d4e\u6d3b\u52a8\u6beb\u65e0\u610f\u4e49\uff0c\u5b83\u5bf9\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u90fd\u6beb\u65e0\u8d21\u732e\u3002"),(0,n.kt)("h3",{id:"466-royalty"},"4.6.6 Royalty"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u4e2d\u7684\u751f\u4ea7\u8005\uff0c\u6709\u4e24\u79cd\u6fc0\u52b1\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u6b21\u6027\u8d39\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e")),(0,n.kt)("p",null,"\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u4e00\u6b21\u6027\u8d39\u7528\u901a\u5e38\u53d1\u751f\u5728\u5546\u54c1\u4ea4\u6613\u7684\u7ec8\u7aef\uff0c\u5373\u5546\u54c1\u8f6c\u79fb\u5230\u6700\u7ec8\u6d88\u8d39\u8005\u7684\u8fc7\u7a0b\u4e2d\u3002\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u5f3a\u52bf\u548c\u6280\u672f\u7ade\u4e89\u529b\u5f3a\u7684\u751f\u4ea7\u8005\uff0c\u4ed6\u4eec\u4e5f\u4f1a\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u5f95\u5361\u8ddf\u534e\u4e3a\u7684\u5408\u4f5c\uff0c\u662f\u6309\u7167\u624b\u673a\u9500\u91cf\u8fdb\u884c\u5206\u6210\u3002\u5f53\u7136\u8fd9\u4e9b\u90fd\u4f1a\u968f\u7740\u4e00\u4e9b\u8bdd\u8bed\u6743\u7b49\u56e0\u7d20\u53ef\u4ee5\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eReality World\u4e2d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5f71\u54cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e\u53ef\u80fd\u66f4\u52a0\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e00\u6b21\u6027\u8d39\u7528\u53ef\u80fd\u66f4\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u5f00\u53d1\u66f4\u591a\u7684\u5185\u5bb9\uff0c\u4f46\u4e5f\u8bb8\u5b83\u6ca1\u6709\u7cbe\u529b\u53bb\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u7ade\u4e89\u529b\uff0c\u56e0\u4e3a\u65e0\u6cd5\u8f6c\u5316\u5b58\u91cf\u7528\u6237\u7684\u4ef7\u503c\uff0c\u6c38\u8fdc\u53ea\u6709\u65b0\u7528\u6237\u624d\u80fd\u4ea7\u751f\u6536\u5165\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u5f00\u53d1\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u7248\u7a0e\u7684\u6536\u76ca\u4e3b\u8981\u662f\u53d6\u51b3\u4e8e\u5f71\u54cd\u529b\u548c\u77e5\u540d\u5ea6\uff0c\u4e0d\u540c\u7684\u5f71\u54cd\u529b\u548c\u540d\u6c14\u5176\u7248\u7a0e\u6536\u5165\u7684\u5dee\u8ddd\u975e\u5e38\u5927\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u66f4\u613f\u610f\u82b1\u5fc3\u601d\u63d0\u5347\u5355\u4e2a\u6807\u51c6\u6216\u7ec4\u4ef6\u7684\u54c1\u8d28\uff0c\u56e0\u4e3a\u53ea\u8981\u6709\u597d\u7684\u5f71\u54cd\u529b\uff0c\u8fd9\u5957\u673a\u5236\u4ee5\u4fdd\u8bc1ta\u8d5a\u53d6\u8db3\u591f\u7684\u6536\u5165\u3002\u5c31\u597d\u6bd4\u82f9\u679c\u624b\u673a\uff0cTA\u9700\u8981\u7ef4\u6301\u81ea\u5df1\u7684\u54c1\u724c\uff0c\u7136\u540e\u9500\u552e\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u5176\u4ed6\u4e00\u4e9b\u624b\u673a\u5382\u5546\u5219\u4f1a\u5c1d\u8bd5\u5f00\u53d1\u591a\u79cd\u4e0d\u540c\u5b9a\u4f4d\u7684\u4ea7\u54c1\u548c\u5f00\u53d1\u7ec6\u5206\u5e02\u573a\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u9700\u8981\u9f13\u52b1\u5f00\u53d1\u8005\u5236\u4f5c\u66f4\u597d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u6570\u91cf\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u3002\u6240\u6709\u5bf9\u8fd9\u4e24\u7c7b\u5f00\u53d1\u8005\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("h4",{id:"4661-\u6807\u51c6\u7a0e"},"4.6.6.1 \u6807\u51c6\u7a0e"),(0,n.kt)("p",null,"\u5373\u7ec4\u4ef6\u5f00\u53d1\u8005\uff0c\u5728\u6bcf\u9500\u552e\u4e00\u4ef6\u7ec4\u4ef6\u65f6\uff0c\u6807\u51c6\u7684\u5236\u5b9a\u8005\u53ef\u4ee5\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u53ea\u662f\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u800c\u6ca1\u6709\u5f62\u6210\u4efb\u4f55\u9500\u552e\u6536\u5165\uff0c\u662f\u4e0d\u9700\u8981\u5411\u6807\u51c6\u4f5c\u8005\u652f\u4ed8\u8d39\u7528\u7684\u3002\u8fd9\u6837\u964d\u4f4e\u7ec4\u4ef6\u5f00\u53d1\u8005\u7684\u95e8\u69db\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u6807\u51c6\u4f5c\u8005\u5728\u6ca1\u6709\u4efb\u4f55\u6807\u51c6\u7a0e\u6536\u5165\u4e4b\u524d\uff0c\u4e5f\u4e0d\u9700\u8981\u5411\u5e73\u53f0\u652f\u4ed8\u8d39\u7528\u3002"),(0,n.kt)("h4",{id:"4662-\u7ec4\u4ef6\u7a0e"},"4.6.6.2 \u7ec4\u4ef6\u7a0e"),(0,n.kt)("p",null,"\u5373\u666e\u901a\u7528\u6237\u4f7f\u7528\u67d0\u4e2a\u7ec4\u4ef6\u5f00\u53d1\u7684\u5185\u5bb9\uff0c\u5728\u4ea7\u751f\u6536\u5165\u7684\u65f6\u5019\u4f1a\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7ec4\u4ef6\u7a0e\u6765\u8bf4\u8981\u66f4\u590d\u6742\u4e00\u4e9b\uff0c\u56e0\u4e3a\u7528\u6237\u7684\u6536\u5165\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u7ec4\u4ef6\u7684\u7ed3\u679c\uff0c\u5f88\u96be\u6e05\u6670\u5224\u5b9a\u67d0\u5355\u4e2a\u7ec4\u4ef6\u7684\u8d21\u732e\u3002\u8fd9\u5757\u540e\u7eed\u5728\u68b3\u7406\u4e00\u4e0b\u601d\u8def\u3002"),(0,n.kt)("h3",{id:"469-\u5b8c\u6574\u7684\u751f\u6001"},"4.6.9 \u5b8c\u6574\u7684\u751f\u6001"),(0,n.kt)("p",null,"\u65e2\u8981\u6709\u6d88\u8d39\u8005\uff0c\u751f\u6210\u8005\uff0c\u5de5\u5177\u5236\u4f5c\uff0c\u4f9b\u5e94\u94fe\uff0c\u624d\u80fd\u5168\u57df\u6fc0\u6d3b"),(0,n.kt)("h2",{id:"47-social"},"4.7 Social"),(0,n.kt)("h3",{id:"471-\u79c1\u4eba\u5316\u793e\u4ea4"},"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4"),(0,n.kt)("img",{src:"resources/reworld.png"}),(0,n.kt)("p",null,"\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u73a9\uff0c\u4f1a\u7ed9\u670b\u53cb\u63a8\u8350\u81ea\u5df1\u89c9\u5f97\u8fd8\u73a9\u7684\u4e1c\u897f\uff0c\u5f62\u6210\u826f\u6027\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u95f4\u63a5\u4e5f\u4f1a\u5bfc\u81f4\u793e\u533a\u66f4\u6587\u660e"),(0,n.kt)("p",null,"\u5927\u591a\u6570\u7c7bRoblox \u5e73\u53f0\u90fd\u662f\u7c7b\u4f3c\u7684\u6a21\u5f0f\uff0c\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u5e94\u7528\u5e02\u573a"),(0,n.kt)("p",null,"\u53ea\u6709\u79c1\u4eba\u5316\u624d\u80fd\u4fc3\u8fdb\u5927\u4f17\u521b\u4f5c\uff0c\u5c31\u50cfSnapchat"),(0,n.kt)("p",null,"\u751a\u81f3\u6296\u97f3\u89c6\u9891\u5927\u90e8\u5206\u90fd\u662f\u56f4\u7ed5\u81ea\u5df1\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5e94\u7528\u5e02\u573a\u578b\u7684\u5e94\u7528\uff0c\u662f\u4e0d\u4f1a\u6fc0\u53d1\u666e\u901a\u7528\u6237\u7684\uff0c\u5c31\u50cf\u4f60\u8981\u6c42\u666e\u901a\u7528\u6237\u521b\u4f5c\u4e25\u8083\u7684\u5927\u7247\uff0c\u4ed6\u4eec\u505a\u4e0d\u5230\uff0c\u6240\u4ee5\u5fc5\u987b\u79c1\u4eba\u5316"),(0,n.kt)("p",null,"\u8ddf\u5fae\u4fe1\u7684\u6a21\u5f0f\uff0c\u501f\u52a9\u79c1\u4eba\u5c0f\u5708\u5b50\u7684\u5f3a\u70c8\u5206\u4eab\u548c\u521b\u4f5c\u9700\u6c42"),(0,n.kt)("h4",{id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1"},"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1"),(0,n.kt)("p",null,"\u6dd8\u5b9d\u7684\u6a21\u5f0f\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7ecf\u6d4e\u7684\u6570\u5b57\u5316\uff0c\u53ea\u662f\u4e00\u4e2a\u9500\u552e\u5e73\u53f0\uff0c\u793e\u4ea4\u6027\u51e0\u4e4e\u4e0d\u5b58\u5728\u3002\u8868\u73b0\u5728\u4e00\u4e9b\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f60\u4e70\u4e86\u4e00\u4e2a\u4e1c\u897f\uff0c\u51e0\u4e4e\u6ca1\u6709\u4ec0\u4e48\u6e20\u9053\u628a\u8fd9\u5bb6\u5e97\u6216\u8005\u8fd9\u4ef6\u5546\u54c1\u5206\u4eab\u7ed9\u597d\u53cb\uff0c\u751a\u81f3\u6709\u65f6\u5019\u8fd8\u9700\u8981\u901a\u8fc7\u5fae\u4fe1\u53bb\u5206\u4eab\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5bb6\u6dd8\u5b9d\u5e97\u7684\u54c1\u724c\u6548\u5e94\u76f8\u5bf9\u6bd4\u8f83\u5f31\uff0c\u4e00\u65b9\u9762\u662f\u591a\u5bb6\u5e97\u53ef\u80fd\u9500\u552e\u540c\u4e00\u79cd\u5546\u54c1\uff0c\u4e00\u65b9\u9762\u662f\u6ca1\u6709\u7ef4\u7cfb\u5e97\u5bb6\u548c\u6d88\u8d39\u8005\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u4e9b\u65b9\u5f0f\u6216\u5de5\u5177\u3002\u6240\u4ee5\u6dd8\u5b9d\u5546\u5e97\u7684\u58f0\u8a89\u6216\u540d\u58f0\u4e3b\u8981\u9760\u6d41\u91cf\uff0c\u6216\u8005\u9500\u91cf\u8fd9\u4e00\u5355\u4e00\u5c5e\u6027\uff0c\u4f46\u662f\u56e0\u4e3a\u53d7\u6d41\u91cf\u8fd9\u79cd\u5e73\u53f0\u63a7\u5236\u529b\u91cf\u7684\u5f71\u54cd\uff0c\u9500\u91cf\u672c\u8eab\u53c8\u662f\u53d7\u6d41\u91cf\u5f71\u54cd\u7684\uff0c\u5bfc\u81f4\u5c0f\u54c1\u724c\u4e0d\u6613\u4e8e\u6210\u957f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u4f60\u770b\u5230\u670b\u53cb\u7684\u67d0\u4e2a\u4e1c\u897f\u8f83\u597d\uff0c\u8fd9\u79cd\u793e\u4ea4\u5bfc\u81f4\u7684\u63a8\u8350\u6709\u65f6\u5019\u5e76\u4e0d\u80fd\u76f4\u63a5\u8f6c\u5316\u5230\u8fd9\u5bb6\u5e97\uff0c\u4e00\u662f\u5206\u4eab\u4e0d\u65b9\u4fbf\uff0c\u6211\u8fd8\u8981\u53bb\u8ba2\u5355\u91cc\u641c\u7d22\u7136\u540e\u8f6c\u53d1\uff0c\u8fd9\u662f\u4e00\u4e2a\u9ebb\u70e6\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u5bf9\u6bd4\u5fae\u4fe1 \uff0c\u6211\u60f3\u5206\u4eab\u7684\u4e1c\u897f\u90fd\u5728\u670b\u53cb\u5708\uff0c\u5927\u5bb6\u968f\u65f6\u53ef\u4ee5\u81ea\u5df1\u53bb\u770b\u3002\u5f53\u7136\u5bf9\u4e8e\u6dd8\u5b9d\uff0c\u66f4\u6709\u53ef\u80fd\u7684\u60c5\u51b5\u662f\u5927\u5bb6\u8bf4\u4e2a\u54c1\u724c\u540d\u5b57\uff0c\u5927\u5bb6\u81ea\u5df1\u53bb\u641c\u7d22\u8d2d\u4e70\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u54c1\u724c\u7684\u6548\u5e94\u7684\u66f4\u5927\u7684\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u7ed3\u8d77\u6765\u53ef\u80fd\u662f\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u5e76\u4e0d\u662f\u4e00\u4e2a\u521b\u4f5c\u5e73\u53f0\uff0c\u6240\u4ee5\u591a\u4e2a\u5546\u5e97\u4e4b\u95f4\u540c\u8d28\u5316\u5f88\u4e25\u91cd\uff0c\u5bfc\u81f4\u51e0\u4e4e\u6ca1\u6709\u54c1\u724c\u7ade\u4e89\u529b\uff1b\u800c\u53cd\u89c2\u6e38\u620f\u5e02\u573a\uff0c\u4e00\u4e2a\u6e38\u620f\u662f\u9760\u521b\u9020\u7684\u72ec\u7279\u6027\u6765\u5efa\u7acb\u54c1\u724c\u58f0\u8a89\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u6ca1\u6709\u793e\u4ea4\uff0c\u56e0\u4e3a\u5355\u7eaf\u56f4\u7ed5\u5546\u54c1\u8d2d\u4e70\u6784\u5efa\u793e\u4ea4\u662f\u6ca1\u6709\u592a\u5927\u5438\u5f15\u529b\u7684\u3002\u793e\u4ea4\u66f4\u591a\u6e90\u4e8e\u751f\u6d3b\uff0c\u5728\u5546\u54c1\u4e4b\u5916\uff0c\u8fd8\u6709\u66f4\u591a\u7684\u6d3b\u52a8\uff0c\u5546\u54c1\u8d2d\u4e70\u6d3b\u52a8\u751a\u81f3\u53ef\u80fd\u53ea\u5360\u4eba\u7c7b\u6d3b\u52a8\u5f88\u5c0f\u7684\u4e00\u90e8\u5206\uff0c\u6bd4\u5982\u5f88\u591a\u5176\u4ed6\u66f4\u5177\u4ef7\u503c\u7684\u670d\u52a1\u662f\u901a\u8fc7\u6dd8\u5b9d\u8d2d\u4e70\u4e0d\u5230\u7684\u3002\u4f55\u51b5\u4e00\u4e2a\u7eaf\u5546\u54c1\u63a8\u8350\u7684\u793e\u4ea4\u4f1a\u5f15\u8d77\u4eba\u4eec\u65b9\u6848\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6dd8\u5b9d\u6784\u5efa\u4e0d\u8d77\u793e\u4ea4\u80fd\u529b\u3002")),(0,n.kt)("p",null,"\u4f46\u662f\u53cd\u89c2\u5fae\u4fe1\uff0c\u5fae\u4fe1\u5b8c\u5168\u662f\u793e\u4ea4\u9a71\u52a8\u3002\u4f60\u7684\u6bcf\u4e00\u4e2a\u4f1a\u8bdd\uff0c\u6bcf\u4e00\u4e2a\u597d\u53cb\uff0c\u6bcf\u4e00\u6b21\u53c2\u52a0\u7fa4\u804a\uff0c\u90fd\u662f\u56e0\u4e3a\u4f60\u7684\u6587\u5b57\u6240\u6d89\u53ca\u7684\u67d0\u4ef6\u4e8b\u662f\u4e0e\u5176\u4ed6\u67d0\u4e2a\u4eba\u76f8\u5173\u7684\u3002\u8fd9\u4e9b\u5927\u91cf\u7684\u6c9f\u901a\u4ea4\u6d41\u76ee\u7684\uff0c\u5176\u5b9e\u80cc\u540e\u7684\u4ef7\u503c\u5f88\u5927\u90e8\u5206\u4e5f\u53ef\u80fd\u5f52\u7c7b\u4e3a\u4ef7\u503c\uff0c\u54ea\u6015\u662f\u4ea4\u5230\u4e00\u4e2a\u5355\u7eaf\u7684\u597d\u670b\u53cb\uff0c\u5176\u5b9e\u65e5\u540e\u4e5f\u4f1a\u4ea7\u751f\u67d0\u4e9b\u4ef7\u503c\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u53ef\u4ee5\u8bf4\u793e\u4ea4\u662f\u6784\u5efa\u4ef7\u503c\u7684\u91cd\u8981\u8fc7\u7a0b\u548c\u624b\u6bb5\uff0c\u800c\u6700\u540e\u7684\u4ea4\u6613\u53cd\u800c\u53ea\u662f\u4e00\u4e2a\u5f88\u7b80\u5355\u7684\u8fc7\u7a0b\u6216\u8005\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5fae\u4fe1\u6ca1\u6709\u4ef7\u503c\u4ea4\u6613\u7684\u65b9\u5f0f\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u6784\u5efa\u4ef7\u503c\u548c\u4ef7\u503c\u4ea4\u6613\u5206\u79bb\u7684\u67b6\u6784\u662f\u4e00\u79cd\u6bd4\u8f83\u597d\u7684\u67b6\u6784\uff0c\u6216\u8005\u8bf4\u6784\u67b6\u4ef7\u503c\u7684\u8fc7\u7a0b\u4e0e\u4ef7\u503c\u4ea4\u6613\u672c\u8eab\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7684\u8026\u5408\u3002"),(0,n.kt)("p",null,"\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4ea4\u6613\u5e73\u53f0\uff0c\u4f46\u662f\u6253\u901a\u6dd8\u5b9d\u7684\u5b9e\u7269\u6216\u8005\u7eaf\u5546\u54c1\u5316\u7684\u5f62\u5f0f\uff0c\u4f7f\u4e4b\u6cdb\u534e\u5230\u6240\u6709\u4ef7\u503c\u670d\u52a1\uff0c\u6bd4\u5982\u6e38\u620f\u4f53\u9a8c\uff0c\u8f6f\u4ef6\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u5e73\u53f0\uff0c\u521b\u4f5c\u4e0d\u5149\u751f\u4ea7\u5546\u54c1\uff0c\u800c\u4e14\u7ed3\u5408\u9500\u552e\u5e73\u53f0\uff0c\u4f7f\u5f97\u9500\u552e\u5546\u54c1\u540c\u8d28\u5316\u8f83\u4f4e\uff0c\u56e0\u4e3a\u5b83\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u9500\u552e\u5e73\u53f0\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u793e\u4ea4\uff0c\u6e38\u620f\u5929\u751f\u5177\u6709\u793e\u4ea4\u6027\uff0c\u4f46\u662f\u73b0\u5728\u7684\u6e38\u620f\u4e3b\u8981\u53ea\u662f\u4e00\u4e2a\u597d\u53cb\u5217\u8868\uff0c\u6392\u540d\u3002\u7f3a\u4e4f\u5fae\u4fe1\u90a3\u79cd\uff0c\u4e3a\u4e86\u67d0\u4e2a\u76ee\u6807\u6216\u5173\u7cfb\uff0c\u4e3b\u52a8\u53d1\u8d77\u793e\u4ea4\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u4f60\u53d1\u73b0\u4e00\u4e2a\u597d\u73a9\u7684\u6e38\u620f\uff0c\u662f\u5426\u53ef\u4ee5\u66f4\u597d\u5730\u9080\u8bf7\u670b\u53cb\u52a0\u5165\u8fdb\u6765\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u8981\u53bb\u5fae\u4fe1\u4e2d\u5206\u4eab\uff0c\u6bcf\u6b21\u8fdb\u5165\u90fd\u9700\u8981\u91cd\u65b0\u5206\u4eab\uff0c\u6709\u4e00\u79cd\u5272\u88c2\u3002\u800c\u6211\u4eec\u4f1a\u4fdd\u5b58\u4e00\u4e2a\u6700\u8fd1\u5217\u8868\uff0c\u5982\u679c\u4f60\u4eec\u7ecf\u5e38\u73a9\u4e00\u4e2a\u6e38\u620f\uff0c\u6253\u4e2a\u62db\u547c\u76f4\u63a5\u5c31\u8fdb\u5165\u4e86\u3002\u5fae\u4fe1\u4e0d\u4f1a\u4e3a\u4e00\u4e9b\u4e13\u7528\u7684\u793e\u4ea4\u76ee\u7684\u8fdb\u884c\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u5173\u4e8e\u793e\u4ea4\u4ea4\u6613\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u66f4\u597d\u7684\u63a8\u8350\uff0c\u5982\u4e0a\u9762\u7b2c\u4e09\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u4ea4\u6613")),(0,n.kt)("h3",{id:"472--\u5173\u6ce8\u73b0\u5b9e"},"4.7.2 \u5173\u6ce8\u73b0\u5b9e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"reality",src:l(8120).Z,width:"1920",height:"1080"})),(0,n.kt)("h2",{id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"},"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"),(0,n.kt)("p",null,"\u5728\u6e38\u620f\u548c\u7535\u5f71\u7b493D\u8f7d\u4f53\u7684\u5a31\u4e50\u4f53\u9a8c\u4e2d\uff0c\u6709\u4e09\u79cd\u4e3b\u8981\u7684\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7279\u7684\u7c7b\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6545\u4e8b\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u6027")),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u6e38\u620f\uff0c\u5b83\u662f\u6e38\u620f\u4e2d\u7684\u7075\u9b42\uff0c\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u6839\u636e\u81ea\u5df1\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\u8bbe\u8ba1\u51fa\u7684\uff0c\u8ba9\u73a9\u5bb6\u4ea7\u751f\u5fc3\u6d41\u7684\u77ac\u95f4\u4f53\u9a8c"),(0,n.kt)("p",null,"\u6545\u4e8b\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u7535\u5f71"),(0,n.kt)("p",null,"\u521b\u4f5c\u6027\u7684\u6700\u5927\u4e0d\u540c\u548c\u9b45\u529b\u5728\u4e8e\uff0c\u521b\u4f5c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u88ab\u52a8\u7684\u4f53\u9a8c\uff0c\u5b83\u662f\u9700\u8981\u601d\u8003\u3001\u6784\u601d\u3001\u81ea\u5df1\u4e2a\u4eba\u5bf9\u751f\u6d3b\u5404\u65b9\u9762\u7684\u7406\u89e3\u3001\u611f\u609f\u548c\u60f3\u8c61\u529b\u7684\uff0c\u56e0\u6b64\u8fd9\u79cd\u8981\u6c42\u66f4\u9ad8\uff0c\u5b83\u7684\u7ed3\u679c\u5bf9\u5e94\u7684\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u6e38\u620f\u6001\u7684\u5fc3\u6d41\uff0c\u5b83\u5bf9\u5e94\u4e8e\u6210\u5c31\u4e86\uff0c\u751a\u81f3\u67d0\u79cd\u7cbe\u795e\u7269\u8d28\uff0c\u521b\u4f5c\u7684\u4e1c\u897f\u624d\u66f4\u5bf9\u5e94\u4e8e\u4ef7\u503c\uff0c\u624d\u66f4\u5bb9\u6613\u4ea7\u751f\u4ea4\u6613"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bfc\u6f14\u6216\u8005\u4e00\u4e2a\u827a\u672f\u5de5\u4f5c\u8005\uff0c\u4ed6\u6301\u7eed\u521b\u4f5c\u4f18\u79c0\u4f5c\u54c1\u7684\u52a8\u529b\u4e3b\u8981\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u4f53\u9a8c\uff0c\u90a3\u4e48\u5c06\u8fd9\u79cd\u80fd\u529b\u91ca\u653e\u5230\u666e\u901a\u5927\u4f17\u5f53\u4e2d\uff0c\u4e5f\u4e00\u5b9a\u4f1a\u662f\u4e0d\u9519\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u8fc7\u53bb\u7684\u79d1\u6280\u6211\u4eec\u805a\u7126\u4e8e\u6539\u5584\u4e00\u4e9b\u5b9e\u7528\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u5b83\u4f53\u73b0\u5728\u53bb\u6d41\u7a0b\u3001\u4fbf\u6377\u6027\u3001\u6548\u7387\u7b49\uff1b\u4e92\u8054\u7f51\u65f6\u4ee3\u9664\u4e86\u63d0\u5347\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u6548\u7387\uff0c\u4ed6\u5f88\u5927\u7684\u4f53\u9a8c\u6539\u5584\u5728\u4e8e\u91ca\u653e\u4e86\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u5c31\u662f\u89c6\u9891\u548c\u7167\u7247\uff0c\u672c\u8d28\u4e0a\u7167\u7247\u548c\u89c6\u9891\u6240\u53cd\u5e94\u7684\u662f\u6bcf\u4e2a\u4eba\u611f\u77e5\u548c\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u4e0d\u540c\u89c6\u89d2\u955c\u5934\u89c2\u5bdf\u540c\u4e00\u4e16\u754c\u4e0d\u540c\u7684\u7f8e\u611f"),(0,n.kt)("li",{parentName:"ul"},"\u6355\u6349\u4e0d\u540c\u611f\u5174\u8da3\u7684\u753b\u9762\u8868\u8fbe\u81ea\u5df1\u7684\u4e2a\u6027\u3001\u7406\u89e3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u62cd\u6444\u611f\u5174\u8da3\u7684\u89c6\u9891\u6545\u4e8b\u53cd\u5e94\u81ea\u5df1\u7684\u5174\u8da3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u8f6c\u8f7d\u4e0d\u540c\u7684\u89c6\u9891\u548c\u56fe\u7247\u4fe1\u606f\u8868\u8fbe\u81ea\u5df1\u7684\u89c2\u70b9\u3001\u4ef7\u503c\u89c2\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5df2\u6709\u5e26\u6709\u5404\u79cd\u5386\u53f2\u3001\u6280\u672f\u3001\u6587\u5316\u7b49\u4fe1\u606f\u7684\u56fe\u7247\u548c\u89c6\u9891\u6dfb\u52a0\u81ea\u5df1\u7684\u7406\u89e3\uff0c\u6292\u53d1\u81ea\u5df1\u7684\u4e3b\u5f20\u3001\u8ba4\u77e5\u3001\u89c2\u70b9\uff1a\u4ef7\u503c\u7b49")),(0,n.kt)("p",null,"\u4f46\u6240\u6709\u8fd9\u4e9b\uff0c\u4ed6\u90fd\u662f\u5728\u89c2\u5bdf\u6216\u8005\u5b66\u4e60\u4e86\u89e3\u8fd9\u4e2a\u4e16\u754c\uff0c\u5b83\u7684\u5de5\u5177\u901a\u5e38\u53ea\u662f\u955c\u5934\uff0c\u9664\u6b64\u4e4b\u5916\u5b83\u51e0\u4e4e\u6ca1\u6709\u5176\u4ed6\u5de5\u5177\uff0c\u4ed6\u7684\u8868\u8fbe\u80fd\u529b\u5f88\u53d7\u9650\u4e8e\u6211\u4eec\u773c\u775b\u6240\u80fd\u770b\u5230\u7684\u4e8b\u7269"),(0,n.kt)("p",null,"\u800c\u53cd\u89c2\u6211\u4eec\u7684\u4e16\u754c\u4e3a\u4ec0\u4e48\u591a\u59ff\u591a\u5f69\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u7528\u5404\u79cd\u5de5\u5177\u5982\u521b\u9020\u4e86\u5efa\u7b51\u3001\u8f66\u5b50\u3001\u8863\u670d\u3001\u8349\u5730\u3001\u516c\u56ed\u3001\u827a\u672f\u4f5c\u54c1\u7b49\u7b49\u6574\u4e2a\u4e16\u754c\uff0c\u8fd9\u4e9b\u521b\u9020\u7684\u4ef7\u503c\u662f\u56e0\u4e3a\u4ed6\u4eec\u878d\u5165\u4e86\u4eba\u4eec\u7684\u7406\u89e3\u3001\u601d\u8003\u3001\u60f3\u8c61\u3001\u751a\u81f3\u68a6\u60f3\u548c\u671f\u671b\u7b49\u7b49"),(0,n.kt)("p",null,"\u521b\u9020\u4f34\u968f\u7740\u6574\u4e2a\u6587\u660e\uff0c\u56e0\u4e3a\u4eba\u4eec\u521b\u9020\u7684\u4e1c\u897f\u6539\u5584\u4e86\u8fd9\u4e2a\u4e16\u754c\uff0c\u63d0\u5347\u4e86\u4eba\u4eec\u7684\u8ba4\u77e5\u3001\u7406\u89e3\u3001\u751f\u6d3b\u6548\u7387\u3001\u751f\u6d3b\u8d28\u91cf\u7b49\u7b49\uff0c\u6240\u4ee5\u5b83\u4fc3\u8fdb\u4e86\u6587\u660e\u8fdb\u7a0b"),(0,n.kt)("p",null,"\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u521b\u9020\u6027\u662f\u5426\u8db3\u591f\u4e86\uff0c\u53d7\u9650\u4e8e\u5f88\u591a\u7269\u7406\u7ea6\u675f\uff0c\u5f88\u591a\u521b\u9020\u80af\u5b9a\u662f\u53d7\u9650\u7684"),(0,n.kt)("p",null,"\u4f46\u662f\u521b\u9020\u865a\u62df\u7684\u5185\u5bb9\u76f8\u8f83\u4e8e\u7269\u8d28\u7269\u54c1\u662f\u5426\u5177\u6709\u4ef7\u503c\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u53ea\u8981\u521b\u9020\u7684\u7ed3\u679c\u63d0\u5347\u4e86\u4eba\u4eec\u5bf9\u4e16\u754c\u7684\u8ba4\u77e5\u548c\u7406\u89e3\u3001\u63d0\u5347\u4e86\u751f\u6d3b\u8d28\u91cf\u3001\u7cbe\u795e\u4e16\u754c\uff0c\u4ece\u800c\u4e5f\u5c31\u4fc3\u8fdb\u4e86\u6587\u660e\u7684\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4ed6\u5c31\u548c\u7269\u7406\u4e16\u754c\u7684\u521b\u9020\u662f\u7b49\u4ef7\u7684"),"\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bf4\uff0c\u5b83\u751a\u81f3\u53ef\u4ee5\u4e0d\u9700\u8981\u8ddf\u7269\u7406\u4e16\u754c\u53d1\u751f\u5173\u8054\uff0c\u5c31\u50cf\u4e00\u4e9b\u79d1\u5e7b\u7535\u5f71\u6216\u8005\u4e00\u4e9b\u7384\u5e7b\u5c0f\u8bf4\u8bb2\u8ff0\u7684\u6545\u4e8b\u90a3\u6837"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u79d1\u6280\u7684\u4e0b\u4e00\u4e2a\u5177\u6709\u793e\u4f1a\u4ef7\u503c\u7684\u4f7f\u547d\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u5f53\u524d\u5728\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u65b9\u9762\u6700\u5bb9\u6613\u5b9e\u65bd\u7684\u662f\u5199\u4f5c\uff1a\u53ef\u4ee5\u57fa\u4e8e\u81ea\u5df1\u7684\u7406\u89e3\u521b\u9020\u65b0\u7684\u7406\u89e3\uff1b\u5176\u6b21\u662f\u7535\u5f71\u548c\u6e38\u620f\uff0c\u4f46\u662f\u4ed6\u4eec\u4ec5\u9762\u5411\u5c11\u6570\u5f00\u53d1\u8005\u6216\u8005\u7535\u5f71\u5de5\u4f5c\u8005"),(0,n.kt)("h3",{id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027"},"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u540c\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u865a\u62df\u7684\u521b\u9020\u4e5f\u5fc5\u7136\u9700\u8981\u5206\u5de5\uff0c\u4e0d\u53ef\u80fd\u6240\u6709\u4e1c\u897f\u90fd\u9700\u8981\u6bcf\u4e2a\u521b\u4f5c\u8005\u4ece\u96f6\u5f00\u59cb\u642d\u5efa"),(0,n.kt)("p",null,"\u5206\u5de5\u610f\u5473\u7740\u52b3\u52a8\u529b\u590d\u7528\uff0c\u8282\u7701\u65f6\u95f4\uff0c\u5206\u5de5\u4e5f\u610f\u5473\u7740\u4ef7\u503c\u7684\u4ea4\u6613"),(0,n.kt)("p",null,"\u5546\u5e97\u6570\u5b57\u8d44\u4ea7\u3001\u7ec4\u4ef6\u7b49\u5176\u5b9e\u5c31\u662f\u5206\u5de5\u7684\u4ea7\u7269"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e16\u754c\u7684\u5206\u5de5\u7531\u4eba\u7c7b\u81ea\u8eab\u9a71\u52a8\uff0c\u4f8b\u5982\u884c\u4e1a\u6807\u51c6\u7531\u884c\u4e1a\u5185\u90e8\u8ba8\u8bba\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5f00\u53d1\u51fa\u80fd\u591f\u6613\u4e8e\u5206\u5de5\u534f\u4f5c\u7684\u67b6\u6784\uff0c\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u7684\u91cd\u8981\u57fa\u7840"),(0,n.kt)("h3",{id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"},"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"),(0,n.kt)("p",null,"\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u4eba\u4eec\u4e4b\u95f4\u7684\u8ddd\u79bb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eb2\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u53cb\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e00\u8d77\u5de5\u4f5c\u6216\u5b66\u4e60")),(0,n.kt)("p",null,"\u56f4\u7ed5\u7740\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u6216\u8005\u8bf4\u4e3a\u4e86\u4e00\u4e9b\u5171\u540c\u7684\u76ee\u6807\u6216\u8005\u5546\u4e1a\u76ee\u7684\uff0c\u5408\u4f5c\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u8fd9\u662f\u751f\u6d3b\u4e2d\u6700\u591a\u7684\u62c9\u8fd1\u4eba\u4eec\u8ddd\u79bb\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e5f\u662f\u6211\u4eec\u65e5\u5e38\u793e\u4ea4\u5708\u5b50\u6269\u5c55\u7684\u4e3b\u8981\u6765\u6e90"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u9020\u6027\u4e0d\u4ec5\u4ec5\u9488\u5bf9\u4e2a\u4eba\uff0c\u8fd8\u9700\u8981\u56f4\u7ed5\u5171\u540c\u76ee\u6807\uff0c\u5171\u540c\u521b\u9020\u548c\u534f\u540c\uff0c\u624d\u80fd\u4fc3\u8fdb\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u548c\u4e86\u89e3"),(0,n.kt)("h3",{id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"},"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u6709\u73a9\u6cd5\uff0c\u76ee\u6807\uff0c\u7b56\u7565\uff0c\u5ef6\u7eed\u6027\u8f83\u5927\u3002"),(0,n.kt)("p",null,"\u4e00\u822c\u521b\u9020\u66f4\u591a\u53ea\u662f\u770b\u4e00\u4e0b\uff0c\u5373\u4f7f\u6709\u4ea4\u4e92\uff0c\u4ea4\u4e92\u7684\u76ee\u7684\u6027\u4e5f\u5f88\u5f31\uff0c\u6240\u4ee5\u9700\u8981\u628a\u5355\u4e2a\u4e00\u822c\u521b\u4f5c\u5185\u5bb9\u7684\u4f53\u9a8c\uff0c\u8f6c\u5316\u4e3a\u6301\u7eed\uff0c\u6709\u76ee\u6807\u548c\u5438\u5f15\u529b\u7684\u4e00\u79cd\u4f53\u9a8c\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d\u5f88\u591a\u65f6\u95f4\u7684\u64cd\u4f5c\u5728\u4e8e\u63a2\u7d22\uff0c\u63a2\u7d22\u4e2d\u4e00\u65b9\u9762\u662f\u4e86\u89e3\u73af\u5883\uff0c\u4e00\u65b9\u9762\u662f\u6536\u96c6\u8d44\u6e90\uff0c\u6240\u4ee5\u8fd9\u4e9b\u4e00\u822c\u76843D\u5185\u5bb9\u4e2d\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\uff0c\u4f8b\u5982\u6bcf\u4e2a\u5185\u5bb9\u90fd\u53ef\u4ee5\u83b7\u5f97\u4e00\u5b9a\u7684\u7ecf\u9a8c\uff0c\u4f46\u662f\u7ecf\u9a8c\u8ddf\u8bbe\u8ba1\u4ea4\u4e92\u6709\u5173\uff0c\u4f46\u7ecf\u9a8c\u662f\u5171\u4eab\u7684"),(0,n.kt)("h3",{id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c"},"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u53ea\u662f\u73a9\u522b\u4eba\u8bbe\u8ba1\u7684\u6e38\u620f\uff0c\u6216\u8005\u770b\u7535\u5f71\uff0c\u8fd9\u901a\u5e38\u53ea\u662f\u4e2a\u4eba\u89c6\u89c9\u4e0a\u7684\u4f53\u9a8c\u3001\u4e2a\u4eba\u7406\u89e3\u7684\u5347\u534e\u3001\u5fc3\u6d41\uff0c\u8fd9\u79cd\u5fc3\u7406\u611f\u89c9\u5f80\u5f80\u5f88\u96be\u4f20\u9012\u7ed9\u5176\u4ed6\u4eba\uff0c\u4f8b\u5982\u5f53\u522b\u4eba\u7ed9\u4f60\u8bb2\u8ff0\u67d0\u4e2a\u6e38\u620f\u4f53\u9a8c\u65f6\uff0c\u5982\u679c\u4f60\u8981\u83b7\u5f97\u7c7b\u4f3c\u7684\u4f53\u9a8c\uff0c\u4f60\u5fc5\u987b\u81ea\u5df1\u4eb2\u81ea\u73a9\u4e00\u4e0b\uff0c\u4ed6\u6ca1\u53d1\u901a\u8fc7\u53e3\u8ff0\u4f20\u9012\u7ed9\u4f60"),(0,n.kt)("p",null,"\u5373\uff0c\u5982\u679c\u8ba4\u4e3a\u8fd9\u79cd\u6e38\u620f\u4f53\u9a8c\u662f\u4e00\u79cd\u4ef7\u503c\uff0c\u90a3\u4e48\u53ea\u6709\u6e38\u620f\u5f00\u53d1\u8005\u521b\u9020\u4e86\u4ef7\u503c\uff0c\u800c\u5927\u90e8\u5206\u73a9\u5bb6\u4e5f\u662f\u83b7\u5f97\u4ef7\u503c\uff0c\u5e76\u4e14\u8fd9\u79cd\u4ef7\u503c\u4e0d\u53ef\u8f6c\u5316"),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e2a\u4e16\u754c\u4f1a\u884d\u751f\u4ef7\u503c\u548c\u521b\u9020\u4ef7\u503c\uff0c\u5219\u6211\u4eec\u5e0c\u671b\u666e\u901a\u7684\u7528\u6237\u80fd\u591f\u521b\u5efa\u53ef\u4ee5\u4ea4\u6613\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u65f6\u95f4\u53ef\u4ee5\u521b\u9020\u8fd9\u79cd\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u6ca1\u6709\u521b\u9020\uff0c\u4ec5\u4ec5\u662f\u4f53\u9a8c\uff0c\u8fd9\u5176\u5b9e\u53c8\u56de\u5230\u4e86\u4f20\u7edf\u6e38\u620f\u884c\u4e1a\uff1a"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u4eba\u53ef\u4ee5\u521b\u9020\u6e38\u620f"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u521b\u9020\u51fa\u597d\u73a9\u7684\u4f53\u9a8c\uff0c\u9700\u8981\u5de8\u5927\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u73a9\u5bb6\u90fd\u5728\u73a9\u540c\u6837\u4e00\u4e9b\u6e38\u620f"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u6e38\u620f\u6b63\u5728\u88ab\u5e7f\u6cdb\u4f53\u9a8c\uff0c\u5c11\u6570\u4eba\u53d7\u76ca"),(0,n.kt)("p",null,"\u4e30\u5bcc\u6027\u4e0d\u591f"),(0,n.kt)("p",null,"\u7f3a\u4e4f\u6e38\u620f\u4e4b\u5916\u7684\u5f88\u591a\u4f53\u9a8c"),(0,n.kt)("p",null,"\u53ea\u6709\u521b\u9020\u548c\u6e38\u620f\u4f53\u9a8c\u7ed3\u5408\uff0c\u624d\u80fd\u5747\u5206\u548c\u6d88\u8017\u66f4\u591a\u7684\u65f6\u95f4\uff0c\u8ba9\u7528\u6237\u80fd\u591f\u6301\u7eed\u6295\u5165\uff0c\u800c\u4f20\u7edf\u6e38\u620f\u7684\u6d3b\u8dc3\u5ea6\u5f80\u5f80\u8ddf\u4e00\u4e9b\u65b0\u6e38\u620f\u6216\u8005\u7ecf\u5178\u6e38\u620f\u76f8\u5173"),(0,n.kt)("h3",{id:"485-\u521b\u9020\u7684\u65b9\u5f0f"},"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec8\u7aef\u7528\u6237\u4e0d\u4f1a\u76f4\u63a5\u5efa\u6a21\uff0c\u9664\u975e\u662f\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e0d\u9700\u8981\u7528\u6237\u96d5\u7422\u7cbe\u7ec6\u7f51\u683c\uff0c\u8fd9\u90e8\u5206\u8fd8\u662f\u8981\u56de\u5f52\u4f20\u7edfDCC\uff0c\u90a3\u91cc\u53ef\u4ee5\u8fdb\u884c\u66f4\u7cbe\u81f4\u5fae\u8c03\uff0c\u57283\u7ef4\u7a7a\u95f4\u505a\u4e0d\u5230\uff08\u8fd9\u6837\u4e5f\u5c31\u907f\u514d\u5c06\u4f20\u7edfDCC\u7684\u5de5\u5177\u5f15\u5165\u8fdb\u6765\uff0c\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u505a\u8ddf\u4f4d\u7f6e\u76f8\u5173\u7684\u4ea4\u4e92\uff0c\u5927\u5927\u7b80\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u4eba\u4eec\u52a0\u5de5\u67d0\u4e2a\u4e1c\u897f\u4e5f\u662f\u57fa\u4e8e\u73b0\u6709\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u4ece\u96f6\u5f00\u59cb\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e00\u4e9b\u4e0d\u9700\u8981\u7cbe\u81f4\u7f51\u683c\uff0c\u5e76\u4e14\u6709\u81ea\u7531\u5ea6\u7684\u7269\u4f53\uff0c\u5982\u5730\u9762\uff0c\u5c71\u8109\u7b49\u7b49\uff0c\u5927\u90e8\u5206\u8ddf\u73af\u5883\u6709\u5173")),(0,n.kt)("p",null,"\u6700\u540e\u7684\u4ea4\u4e92\u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u4fbf\u7b26\u5408\u89c6\u89c9\u76f4\u89c2\u5e38\u8bc6\u7684\u4ea4\u4e92\u96c6\u5408\uff0c\u7528\u6237\u57fa\u672c\u662f\u73af\u5883\u9760\u57fa\u4e8e\u624b\u52bf\u7684\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e2a\u6027\u7269\u4f53\u9760\u6a21\u677f\uff0c\u8c22\u8c22\u6a21\u7248\u901a\u8fc7DCC\u751f\u6210\uff0c\u5927\u90e8\u5206\u811a\u672c\u548c\u903b\u8f91\u4e5f\u662f\u9488\u5bf9\u4e2a\u6027\u7269\u4f53"),(0,n.kt)("p",null,"\u7c98\u6027\uff0c\u7531\u4e8e\u521b\u9020\u82b1\u8d39\u4e86\u5de8\u5927\u7684\u65f6\u95f4\uff0c\u56e0\u6b64\u7c98\u6027\u66f4\u9ad8"),(0,n.kt)("h3",{id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"},"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"),(0,n.kt)("p",null,"\u5355\u6b21\u521b\u9020\u662f\u5c40\u90e8\u7684\uff0c\u5355\u4e2a\u5c40\u90e8\u573a\u666f\u53ef\u4ee5\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u5982\u679c\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\uff0c\u4f8b\u5982\u57fa\u4e8e\u4e00\u5757\u56fa\u5b9a\u7c7b\u578b\u7684\u5730\u6216\u8005\u73af\u5883\uff0c\u7ec4\u6210\u81ea\u5df1\u7684\u5c0f\u4e16\u754c\uff0c\u5c31\u5bb9\u6613\u8ba9\u4e00\u4e9b\u5fd7\u540c\u9053\u5408\u7684\u4eba\u4e00\u8d77\u53bb\u6784\u5efa\u4e00\u4e2a\u4ed6\u4eec\u559c\u6b22\u7684\u4e16\u754c\uff0c\u53ef\u4ee5\u662f\u79d1\u5e7b\uff0c\u6b66\u4fa0\u7b49\u7b49\u98ce\u683c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9f13\u52b1\u5408\u4f5c\u4e0e\u534f\u4f5c\uff0c\u662f\u975e\u5e38\u597d\u7684\u534f\u4f5c\u4f8b\u5b50"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u7ed9\u5176\u4ed6\u4eba\u7684\u6e38\u89c8\u5e26\u6765\u66f4\u5927\u7684\u5438\u5f15\u529b\uff0c\u5b8f\u5927\u7684\uff0c\u5f62\u6210\u4f17\u591a\u5177\u6709\u66f4\u590d\u6742\u8868\u8fbe\u548c\u6587\u5316\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u6587\u5316\u7684\u611f\u89c9\u9700\u8981\u590d\u6742\u6027\u6765\u8868\u73b0\uff0c\u5c40\u90e8\u8f83\u5c0f\u7684\u573a\u666f\u5f80\u5f80\u65e0\u6cd5\u8868\u8fbe\u4e00\u79cd\u6587\u5316\uff0c\u751a\u81f3\u4e00\u4e2a\u6587\u660e"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u660e\u672c\u8eab\u81ea\u5e26\u6545\u4e8b\u4e86")),(0,n.kt)("p",null,"\u5927\u5730\u56fe\u5728PC Create\u4e0a\u521b\u5efa\uff0c\u6216\u8005\u63d0\u4f9b\u4e00\u4e9b\u6a21\u7248\uff0c\u50cfMinecraft Editor \u4e00\u6837"),(0,n.kt)("h3",{id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"},"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"),(0,n.kt)("p",null,"\u867d\u7136\u6c89\u6d78\u5f0f\u3001\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\u5177\u6709\u5f88\u597d\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u76f8\u5bf9\u4e8e\u5f71\u89c6\u6765\u8bf4\uff0c\u5176\u63a2\u7d22\u6210\u672c\u66f4\u9ad8\uff0c\u4f8b\u5982\u770b\u5b8c\u4e00\u90e8\u9b54\u6212\u9700\u8981\u4e09\u4e2a\u5c0f\u65f6\uff0c\u4f46\u662f\u63a2\u7d22\u4e00\u4e2a\u4e2d\u571f\u4e16\u754c\u53ef\u80fd\u603b\u5171\u4f1a\u82b1\u8d39\u5f88\u591a\u5929\u65f6\u95f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u6765\u8bb2\u53ef\u80fd\u662f\u4e0d\u53ef\u884c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u53ef\u80fd\u4ec5\u4ec5\u968f\u4fbf\u770b\u770b\uff0c\u65e0\u6cd5\u6df1\u5165\u4f53\u9a8c\u6545\u4e8b"),(0,n.kt)("li",{parentName:"ul"},"\u73a9\u5bb6\u5bf9\u865a\u62df\u4e16\u754c\u7684\u63a2\u7d22\u672c\u8d28\u4e0a\u6e90\u4e8e\u672a\u77e5\u7684\u4f53\u9a8c\uff0c\u8fd9\u79cd\u672a\u77e5\u5e76\u4e0d\u662f\u5355\u5355\u4e00\u4e2a\u4e00\u4e2a\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u800c\u662f\u6545\u4e8b\u6216\u8005\u73a9\u6cd5\uff0c\u56e0\u6b64\u9700\u8981\u82b1\u5927\u91cf\u7cbe\u529b\u8bbe\u8ba1\uff0c\u800c\u4e00\u65e6\u73a9\u5bb6\u63a2\u7d22\u73a9\u6240\u6709\u672a\u77e5\uff0c\u90a3\u4e48\u8fd9\u4e2a\u4e16\u754c\u4fbf\u4e0d\u518d\u65b0\u5947\uff0c\u9664\u975e\u5b83\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u4e0d\u65ad\u4f1a\u6709\u65b0\u5947\u6545\u4e8b\u53d1\u751f\uff0c\u90a3\u5fc5\u987b\u662f\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u7528\u6237\u80fd\u591f\u9ad8\u5ea6\u81ea\u5b9a\u4e49\u6216\u8005\u751a\u81f3\u81ea\u6211\u6f14\u8fdb")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5f00\u653e\u4e16\u754c\u67b6\u6784\u53ca\u5176\u91cd\u8981"),(0,n.kt)("h2",{id:"49-third-party-apps"},"4.9 Third party apps"),(0,n.kt)("h2",{id:"410--\u793e\u4f1a\u4ef7\u503c"},"4.10 \u793e\u4f1a\u4ef7\u503c"),(0,n.kt)("h3",{id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"},"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"),(0,n.kt)("p",null,"\u6309\u7167\u4fe1\u606f\u7684\u7ec4\u7ec7\u7279\u5f81\uff0c\u5176\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u975e\u5e38\u7b80\u5355\uff0c\u80fd\u591f\u7528\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u7b80\u5355\u63cf\u8ff0\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u4e00\u4e2a\u516c\u5f0f\uff0c\u4e00\u95f4\u4e8b\u60c5\u7684\u65b9\u6cd5\uff0c\u83dc\u8c31\uff0c\u4e00\u6761\u670b\u53cb\u5708\uff0c\u4e00\u6bb5\u89c6\u9891\u7b49\u3002\u8fd9\u79cd\u4fe1\u606f\u6240\u8868\u793a\u7684\u542b\u4e49\u901a\u5e38\u662f\u660e\u786e\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u63cf\u8ff0\u4eba\u4e0e\u4eba\u3001\u6216\u8005\u4eba\u4e0e\u4e8b\u60c5\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u901a\u5e38\u6bd4\u8f83\u62bd\u8c61\uff0c\u5b83\u4e0d\u80fd\u6709\u4e00\u4e2a\u5f88\u786e\u5b9a\u7684\u3001\u7b80\u5355\u7684\u65b9\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff0c\u6bd4\u5982\u4e00\u4e2a\u6545\u4e8b\uff0c\u4e00\u95f4\u827a\u672f\u54c1\uff0c\u5bf9\u4ed6\u7684\u4f20\u64ad\u6d89\u53ca\u4e00\u4e9b\u89e3\u91ca\uff0c\u751a\u81f3\u4e00\u4e9b\u76f8\u5173\u7684\u89c6\u89c9\u7b26\u53f7\uff0c\u6587\u5316\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u79cd\u662f\u673a\u5236\uff0c\u8fd9\u79cd\u673a\u5236\u5f80\u5f80\u662f\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u65e2\u4e0d\u80fd\u50cf\u7b2c\u4e00\u79cd\u4fe1\u606f\u90a3\u6837\u80fd\u591f\u7b80\u5355\u63cf\u8ff0\u548c\u4f20\u64ad\uff0c\u4e5f\u4e0d\u50cf\u7535\u5f71\u7b49\u827a\u672f\u54c1\u90a3\u6837\u53ef\u4ee5\u76f4\u63a5\u89e3\u8bfb\uff0c\u7531\u4e8e\u673a\u5236\u5185\u5b50\u7cfb\u7edf\u6784\u9020\u590d\u6742\u7684\u76f8\u4e92\u5173\u7cfb\uff0c\u56e0\u6b64\u5b83\u9700\u8981\u65b0\u7684\u5a92\u4ecb\u8fdb\u884c\u4f20\u64ad\u3002")),(0,n.kt)("p",null,"\u7535\u5f71\u66f4\u591a\u662f\u5bf9\u4eba\u4e0e\u4eba\u6216\u8005\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7684\u5173\u7cfb\u8fdb\u884c\u63cf\u8ff0\uff0c\u7406\u89e3\u548c\u8868\u8fbe\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u662f\u975e\u7ed3\u6784\u5316\u7684\uff0c\u5b83\u5f88\u96be\u4f7f\u7528\u4e00\u5b9a\u7684\u89c4\u5219\u3001\u6a21\u578b\u3001\u5b9a\u5f8b\u3001\u516c\u5f0f\u7b49\u7b49\u8fdb\u884c\u63cf\u8ff0\uff0c\u6240\u4ee5\u8fd9\u79cd\u975e\u5e38\u9002\u5408\u4e8e\u6587\u5b66\u3001\u7535\u5f71\u3001\u7f8e\u672f\u3001\u620f\u5267\u7b49\u7b49\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u4e0e\u56f4\u7ed5\u4eba\u7684\u5173\u7cfb\u60c5\u611f\u4e0d\u540c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u7406\u89e3\u793e\u4f1a\u8fd0\u4f5c\u7684\u673a\u5236\uff0c\u6bd4\u5982\u4ea4\u901a\uff0c\u65c5\u6e38\u8def\u7ebf\uff0c\u57ce\u5e02\u4e0d\u540c\u7684\u5206\u533a\uff0c\u5de5\u4f5c\u4e0e\u516c\u53f8\u7684\u5206\u7c7b\u7b49\u7b49\uff0c\u8fd9\u4e9b\u53cd\u5e94\u7684\u662f\u793e\u4f1a\u673a\u5236\uff0c\u4ed6\u4eec\u662f\u53ef\u4ee5\u91cf\u5316\u548c\u7ed3\u6784\u5316\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"civilization",src:l(9460).Z,width:"3840",height:"2160"})),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u4e00\u4e2a\u7279\u70b9\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u5f80\u5f80\u662f\u5bb9\u6613\u7528\u6bd4\u8f83\u7b80\u5355\u7684\u4fe1\u606f\u8fdb\u884c\u8868\u8fbe\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u7b80\u77ed\u7684\u4fe1\u606f\u662f\u9700\u8981\u975e\u51e1\u7684\u4eba\u5bf9\u5176\u8fdb\u884c\u9ad8\u5ea6\u7406\u89e3\u548c\u62bd\u8c61\u63d0\u70bc\uff0c\u6bd4\u5982\u4e00\u90e8\u7535\u5f71\u901a\u5e38\u5c31\u8db3\u4ee5\u8bb2\u8ff0\u4e00\u4e2a\u6df1\u523b\u7684\u9053\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u673a\u5236\u5374\u662f\u66f4\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u673a\u5236\u672c\u8eab\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u7531\u8bb8\u591a\u76f8\u4e92\u76f8\u5173\u7684\u5b50\u7cfb\u7edf\u6784\u6210\uff0c\u800c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u4e0d\u662f\u4eba\u6613\u4e8e\u7406\u89e3\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4eba\u5f88\u5bb9\u6613\u7406\u89e3\u4e00\u4e2a\u516c\u5f0f\uff0c\u4f46\u662f\u590d\u6742\u7cfb\u7edf\u65e0\u6cd5\u8868\u8ff0\u6210\u4e00\u4e2a\u5355\u4e00\u7684\u516c\u5f0f\uff0c\u5b83\u662f\u4e00\u4e2a\u591a\u7ef4\u7ebf\u6027\u51fd\u6570\uff0c\u5b83\u7684\u7406\u89e3\u8574\u85cf\u5728\u6240\u6709\u90a3\u4e9b\u5173\u7cfb\u5f53\u4e2d\uff0c\u4e0d\u540c\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u4f1a\u5bfc\u81f4\u5dee\u5f02\u5f88\u5927\u7684\u5173\u7cfb\uff0c\u6709\u591a\u79cd\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6240\u4ee5\u4ed6\u6bd4\u5982\u4e0d\u592a\u80fd\u591f\u7528\u4e00\u90e8\u7535\u5f71\u6765\u8868\u8ff0\uff0c\u6216\u8005\u8bf4\u7535\u5f71\u4e1a\u52a1\u80fd\u591f\u505a\u4e00\u4e9b\u79d1\u666e\uff0c\u4f46\u662f\u771f\u6b63\u7684\u7406\u89e3\u4f60\u5fc5\u987b\u53bb\u4f7f\u7528\u90a3\u4e2a\u7cfb\u7edf\uff0c\u8fd9\u79cd\u201c\u4f7f\u7528\u201d\u4ece\u6570\u5b57\u5316\u7684\u89d2\u5ea6\u6765\u8bb2\u5c31\u662f\u6a21\u62df\uff0c\u800c\u6e38\u620f\u5c31\u662f\u8fd9\u6837\u6a21\u62df\u7684\u6838\u5fc3\u65b9\u5f0f\u4e4b\u4e00")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5927\u90e8\u5206\u8fd9\u6837\u7684\u793e\u4f1a\u673a\u5236\u90fd\u53ef\u4ee5\u501f\u52a93D\u6765\u8fdb\u884c\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u751a\u81f3\u53c2\u4e0e\u5f71\u54cd"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u4eba\u5176\u5b9e\u662f\u6df1\u5ea6\u8ddf\u793e\u4f1a\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5f88\u591a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u4e5f\u6765\u6e90\u4e8e\u793e\u4f1a\u673a\u5236\u7684\u5f71\u54cd\uff0c\u6240\u4ee5\u793e\u4f1a\u673a\u5236\u672c\u8d28\u4e0a\u4e5f\u662f\u53e6\u4e00\u79cd\u5e2e\u52a9\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u79cd\u65b9\u5f0f"),(0,n.kt)("h3",{id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"},"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"),(0,n.kt)("p",null,"\u5982\u4e0a\u4e00\u8282\u7684\u4fe1\u606f\u5206\u7c7b\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u6a21\u578b\u53ea\u9002\u5408\u5904\u7406\u7ed3\u6784\u5316\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u662f\u786e\u5b9a\u7684\uff0c\u5176\u5e94\u7528\u7ed3\u6784\u901a\u5e38\u4e5f\u662f\u4e0d\u4f1a\u7684\uff0c\u4f8b\u5982\u5fae\u4fe1\u3001\u6dd8\u5b9d\u3001\u6296\u97f3\u3001\u652f\u4ed8\u5b9d\u3001\u5927\u4f17\u70b9\u8bc4\u7b49\u7b49\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e9b\u7a0b\u5e8f\u5f53\u4e2d\uff0c\u901a\u5e38\u662f\u7531\u7528\u6237\u53d1\u51fa\u4e00\u4e2a\u64cd\u4f5c\u6307\u793a\uff0c\u7136\u540e\u5e94\u7528\u7a0b\u5e8f\u6309\u7167\u56fa\u5b9a\u7684\u903b\u8f91\u6267\u884c\u67d0\u4e2a\u7ed3\u6784\u57fa\u672c\u4e0a\u4e0d\u53d8\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"complex-system.024",src:l(9792).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u5f53\u4e2d\u8fd8\u6709\u5927\u91cf\u7684\u7c7b\u4f3c\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\uff0c\u8fd9\u7c7b\u4fe1\u606f\u5bf9\u4eba\u4eec\u7406\u89e3\u8fd9\u4e2a\u4e16\u754c\u548c\u793e\u4f1a\u53ef\u80fd\u66f4\u52a0\u81f3\u5173\u91cd\u8981\uff0c\u5e76\u4e14\u8fd9\u7c7b\u4fe1\u606f\u901a\u5e38\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u8fdb\u884c\u8868\u8fbe\u3002\u6e38\u620f\u7a0b\u5e8f\u67b6\u6784\u662f\u975e\u5e38\u9002\u5408\u5904\u7406\u8fd9\u7c7b\u4fe1\u606f\u7684\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u76ee\u524d\u8fd8\u6ca1\u6709\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u4e0d\u7ba1\u662f\u5728\u5f00\u53d1\u5de5\u5177\u3001\u5f00\u53d1\u6d41\u7a0b\u8fd8\u662f\u5f00\u53d1\u6210\u672c\u4e0a\u5b83\u90fd\u5b58\u5728\u7740\u5f88\u591a\u95ee\u9898\uff0c\u8fd8\u4e0d\u5177\u5907\u8fd9\u6837\u7684\u6f5c\u80fd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u6709\u673a\u4f1a\u53bb\u91ca\u653e\u8fd9\u6837\u7684\u6f5c\u80fd\uff0c\u4f7f\u5f97\u6e38\u620f\u7c7b\u5b9e\u65f6\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u4f8b\u5982\u8ddf\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5dee\u4e0d\u591a\u3002\u4e5f\u8bb8\u5728\u8fd9\u6837\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7684\u7a0b\u5e8f\u67b6\u6784\u4e5f\u8bb8\u53ef\u4ee5\u6210\u4e3a\u6574\u4e2a\u6570\u5b57\u5316\u7684\u5e38\u6001\u3002\u8fd9\u6837\u6570\u5b57\u5316\u80fd\u591f\u5728\u4eba\u7c7b\u6587\u660e\u8fdb\u7a0b\u4e2d\u8fdb\u4e00\u6b65\u53d1\u751f\u66f4\u5927\u7684\u63a8\u52a8\u4f5c\u7528\uff0c\u56e0\u4e3a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u6709\u4e00\u79cd\u66f4\u9ad8\u6548\u3001\u66f4\u5177\u8868\u8fbe\u529b\u7684\u4fe1\u606f\u8868\u8fbe\u65b9\u5f0f\u3002"),(0,n.kt)("h3",{id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"},"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7531\u8bb8\u591a\u90e8\u5206\u7ec4\u6210\uff0c\u8fd9\u4e9b\u90e8\u5206\u5355\u4e2a\u770b\u4e00\u822c\u90fd\u5f88\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u628a\u5b83\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\u540e\u5f62\u6210\u7684\u590d\u6742\u7cfb\u7edf\u5927\u90fd\u80fd\u8868\u73b0\u51fa\u65e0\u6cd5\u9884\u6d4b\u7684\u60ca\u4eba\u7279\u6027\uff0c\u5f88\u96be\u901a\u8fc7\u5355\u72ec\u62c6\u5206\u5206\u6790\u6bcf\u4e2a\u7ec4\u6210\u90e8\u5206\u6765\u89e3\u91ca\u8fd9\u79cd\u73b0\u8c61\u3002\u53ef\u4ee5\u901a\u8fc7\u5f15\u5165\u6b63/\u8d1f\u53cd\u9988\u5faa\u73af\u6765\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u5176\u5b9e\u80fd\u591f\u7528\u6765\u8868\u8fbe\u662f\u771f\u5b9e\u751f\u6d3b\u4e2d\u5927\u91cf\u7684\u4fe1\u606f\uff0c\u4ed6\u5bf9\u4e8e\u6211\u4eec\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u3001\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7b49\u7b49\u7684\u5173\u7cfb\u81f3\u5173\u91cd\u8981\u3002\u901a\u5e38\u8fd9\u4e9b\u77e5\u8bc6\u8981\u6bd4\u6211\u4eec\u4e00\u822c\u80fd\u591f\u4ece\u4e66\u4e2d\u770b\u5230\u7684\u4fe1\u606f\u8981\u591a\u5f97\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pasted-image",src:l(2694).Z,width:"642",height:"449"})),(0,n.kt)("p",null,"\u4f8b\u5982\u5173\u4e8e\u7ba1\u7406\uff0c\u5176\u5b9e\u5b83\u4e5f\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u6709\u5f88\u591a\u5f71\u54cd\u56e0\u7d20\uff0c\u5982\u679c\u6211\u4eec\u628a\u8fd9\u4e9b\u56e0\u7d20\u7528\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u6765\u8868\u8fbe\uff0c\u8fd9\u6837\u5b66\u4e60\u8005\u53ef\u4ee5\u901a\u8fc7\u4ea4\u4e92\u7684\u65b9\u5f0f\uff0c\u5bf9\u67d0\u4e9b\u5b50\u7cfb\u7edf\u65bd\u52a0\u5f71\u54cd\uff0c\u6765\u5b9e\u65f6\u770b\u5230\u5b83\u4eec\u5bf9\u6574\u4e2a\u7ba1\u7406\u4f53\u7cfb\u5f71\u54cd\u7684\u6548\u679c\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u6211\u4eec\u4e0d\u4ec5\u53ef\u4ee5\u7528\u6765\u5b66\u4e60\u8fd9\u6837\u7684\u4e00\u4e9b\u7cfb\u7edf\u673a\u5236\uff0c\u4e5f\u53ef\u4ee5\u7528\u6765\u5bf9\u4e00\u4e9b\u673a\u5236\u5176\u8fdb\u884c\u6a21\u62df\u548c\u9884\u6d4b\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u80fd\u529b\u662f\u5f88\u96be\u901a\u8fc7\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u6765\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u8fd9\u6837\u7684\u7cfb\u7edf\u5c06\u7ed9\u4eba\u7c7b\u7684\u6587\u660e\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u63a8\u8fdb\u3002"),(0,n.kt)("h2",{id:"411-\u6807\u51c6"},"4.11 \u6807\u51c6"),(0,n.kt)("p",null,"\u57fa\u4e8e\u5168\u5c40\u548c\u516c\u5171\u7b26\u53f7\u8868\u6784\u5efa\u6c9f\u901a\u65b9\u5f0f\u548c\u6807\u51c6\u3002"),(0,n.kt)("h3",{id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"},"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"Epic CEO\u5728\u5176\u6f14\u8bb2\u300aFundamental Principles and Technologis for the Metaverse\u300b\u4e2d\u6307\u51fa\uff0c\u4e3a\u4e86\u5b9e\u73b0\u4e00\u4e2aOpen Metaverse\uff0c\u50cf\u6211\u4eec\u4eca\u5929\u7684\u5404\u79cd\u4e92\u64cd\u4f5c\u7cfb\u7edf\u5982Web\u7b49\u4e00\u6837\uff0c\u9700\u8981\u5b9a\u4e49\u975e\u5e38\u591a\u7684\u6807\u51c6\u7528\u6765\u5b9e\u73b0Metaverse\u5185\u90e8\u5404\u4e2a\u5b9e\u4f53\u3001\u5bf9\u8c61\u7b49\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4f8b\u5982\u5173\u4e8e\u7528\u6237\u7684\u8eab\u4efd\u3001\u8d44\u4ea7\u6240\u6709\u6743\u3001\u793e\u4ea4\u56fe\u8c31\u7b49\u7b49\u3002\u4ed6\u8fdb\u4e00\u6b65\u6307\u51fa\u53ef\u4ee5\u53c2\u89c1\u73b0\u5728\u7684\u4e00\u4e9b\u6807\u51c6\u5982Html+JavaScript\u7b49\u8fdb\u884c\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u4f46\u6211\u4eec\u518d\u6df1\u5165\u53bb\u601d\u8003\u8fd9\u79cd\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u4f1a\u53d1\u73b0\u4e5f\u8bb8\u6211\u4eec\u5e76\u4e0d\u80fd\u4f7f\u7528\u540c\u6837\u7684\u65b9\u5f0f\u53bb\u8bbe\u8ba1Metaverse\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u5176\u4e2d\u4e24\u4e2a\u6700\u91cd\u8981\u7684\u539f\u56e0\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b9e\u65f6\u6027"),"\uff1a\u73b0\u5728\u7684\u6807\u51c6\u6307\u5b9a\u90fd\u662f\u901a\u8fc7\u6587\u672c\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u5404\u4e2a\u5b50\u7cfb\u7edf\u5bf9\u6587\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u8fd9\u79cd\u5927\u91cf\u5b9e\u65f6\u7684\u6587\u672c\u89e3\u6790\u548c\u5b57\u7b26\u4e32\u5904\u7406\u5728\u6e38\u620f\u7a0b\u5e8f\u4e2d\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e92\u64cd\u4f5c\u6027"),"\uff1a\u5373\u4f7f\u53ef\u4ee5\u89e3\u51b3\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u672c\u8d28\u4e0a\u53ea\u662f\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u6211\u4eec\u5c06\u522b\u4eba\u7684\u4ee3\u7801\u653e\u5728\u6211\u4eec\u7684\u73af\u5883\u4e2d\u521d\u59cb\u5316\u548c\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u6b64\u53ef\u4ee5\u83b7\u5f97\u76f4\u63a5\u7684\u53d8\u91cf\u5730\u5740\uff0c\u4f46\u662f\u62ff\u5230\u5730\u5740\u4e4b\u540e\u8981\u8fdb\u884c\u6b63\u786e\u7684\u901a\u4fe1\u8fd8\u662f\u9700\u8981\u4e86\u89e3\u5173\u4e8e\u51fd\u6570\u7684\u5b9a\u4e49\u7b49\u7b49\uff0c\u5426\u5219\u6211\u4eec\u53ea\u80fd\u7ea6\u5b9a\u4e00\u4e9b\u56fa\u5b9a\u7684\u8c03\u7528\u884c\u4e3a\u3002")),(0,n.kt)("p",null,"\u4ee5\u4e0a\u8fd9\u5957\u673a\u5236\u5047\u8bf4\u80fd\u591f\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u5b83\u4e5f\u53ea\u662f\u9488\u5bf9\u53cc\u65b9\u7ea6\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u5c31\u9650\u5236\u4e86\u81ea\u7531\u5ea6\u3002\u4f20\u7edf\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u5b83\u4eec\u4e4b\u95f4\u7684\u901a\u4fe1\u975e\u5e38\u7b80\u5355\uff0c\u57fa\u672c\u4e0a\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u56fa\u5b9a\u7684\u89c4\u5219\u8fdb\u884c\u63cf\u8ff0\uff0c\u4e14\u6807\u51c6\u4e4b\u95f4\u53d8\u66f4\u7684\u9891\u7387\u975e\u5e38\u4f4e\u3002"),(0,n.kt)("p",null,"\u800cMetaverse\u662f\u4e00\u4e2a\u66f4\u52a0\u6d3b\u8dc3\u7684\u5927\u4e16\u754c\uff0c\u5b83\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u8fd0\u4f5c\uff0c\u56e0\u6b64\u5b83\u672c\u8d28\u4e0a\u4e0d\u80fd\u4f7f\u7528\u8fd9\u79cd\u9650\u5236\u6bd4\u8f83\u5927\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u6211\u4eec\u751f\u6d3b\u4e2d\u8ddf\u5176\u4ed6\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u975e\u5e38\u81ea\u7136\u7684\uff0c\u6211\u4eec\u6709\u5f88\u5927\u7684\u81ea\u7531\u5ea6\uff0c\u6ca1\u6709\u88ab\u4e25\u683c\u9650\u5236\u6bcf\u4ef6\u4e8b\u60c5\u4e00\u5b9a\u8981\u6309\u600e\u6837\u7684\u65b9\u5f0f\u505a\uff0c\u5f53\u7136\u5b83\u4e5f\u5b58\u5728\u4e00\u90e8\u5206\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u4f8b\u5982\u6211\u4eec\u8981\u9075\u5faa\u4ea4\u901a\u89c4\u5219\uff0c\u6cd5\u5f8b\u89c4\u5219\u7b49\u7b49\u3002"),(0,n.kt)("h3",{id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"},"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5982\u679cMetaverse\u662f\u8981\u5c3d\u53ef\u80fd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\uff0c\u6216\u8005\u8bf4\u5b83\u7684\u6574\u4e2a\u7cfb\u7edf\u66f4\u7b26\u5408\u4eba\u7c7b\u7684\u8ba4\u77e5\uff0c\u5b83\u7684\u6807\u51c6\u5fc5\u987b\u652f\u6301\u4e24\u79cd\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u8981\u80fd\u591f\u50cf\u4f20\u7edf\u7684\u6807\u51c6\u90a3\u6837\u5236\u5b9a\u56fa\u5b9a\u3001\u9700\u8981\u516c\u4f17\u5171\u540c\u9075\u5b88\u3001\u4e0d\u592a\u5bb9\u6613\u53d8\u5316\u7684\u6807\u51c6\uff0c\u5982\u4ea4\u901a\u89c4\u5219"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u8981\u80fd\u591f\u652f\u6301\u5c40\u90e8\u7fa4\u4f53\u4e4b\u95f4\u5b9a\u4e49\u81ea\u5df1\u7684\u5c0f\u6807\u51c6\uff0c\u5e76\u4e14\u5bf9\u4e8e\u8fd9\u4e9b\u5c0f\u6807\u51c6\uff0c\u7fa4\u4f53\u4e4b\u5916\u7684\u53c2\u4e0e\u8005\u53ea\u8981\u613f\u610f\u9075\u5faa\u8be5\u5c0f\u6807\u51c6\u5bf9\u5e94\u7684\u534f\u5b9a\uff0cTA\u4eec\u5c31\u53ef\u4ee5\u5f88\u8f7b\u677e\u5730\u53c2\u4e0e\u5230\u8fd9\u4e2a\u5c0f\u7fa4\u4f53\u4e2d\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u673a\u5236\u5f88\u50cf\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u8ba9\u4eba\u4eec\u5373\u6709\u5f88\u5927\u7684\u7075\u6d3b\u5ea6\u548c\u81ea\u7531\uff0c\u540c\u65f6\u4e5f\u53d7\u4e00\u5b9a\u7684\u793e\u4f1a\u7ea6\u675f\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u7b26\u53f7\u8868\u5c31\u63d0\u4f9b\u4e86\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u672c\u8eab\u63d0\u4f9b\u4e86\u4e00\u79cd\u5b9a\u4e49\u6807\u51c6\u7684\u673a\u5236\uff1a\u53ea\u8981\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u5305\u542b\uff08\u7c7b\u6bd4\u4e8e\u9075\u5faa\uff09\u8fd9\u6837\u7684\u7b26\u53f7\u6570\u636e\u5b9a\u4e49\uff0c\u5b83\u4eec\u81ea\u7136\u5c31\u9075\u5faa\u4e86\u76f8\u540c\u7684\u6807\u51c6\u3002\u6240\u4ee5\uff0c\u5bf9\u4e8e\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u5bf9\u5e94\u4e00\u4e9b\u516c\u5171\u6807\u51c6\uff0c\u800c\u5bf9\u4e8e\u4e00\u4e9b\u5c40\u90e8\u7684\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u53ef\u4ee5\u521b\u5efa\u81ea\u5df1\u7684\u5c40\u90e8\u7b26\u53f7\u8868\uff0c\u4ece\u800c\u6784\u5efa\u5c40\u90e8\u5c0f\u6807\u51c6\uff0c\u8fd9\u6837\u7406\u8bba\u4e0a\u6765\u8bf4\u5c31\u662f\u4e00\u79cd\u5b8c\u5168\u7684\u81ea\u7531\u5ea6\uff0c\u6bd4\u5982\u4f60\u751a\u81f3\u53ef\u4ee5\u5b9a\u4e49\u522b\u4eba\u5b8c\u5168\u4e0d\u77e5\u9053\u7684\u6807\u51c6\uff0c\u8fd9\u79cd\u81ea\u7531\u5ea6\u662f\u5b58\u5728\u7684\uff0c\u53ea\u662f\u90a3\u6837\u4f60\u6ca1\u6709\u529e\u6cd5\u8ddf\u522b\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4f60\u9700\u8981\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u8fd9\u79cd\u63a8\u5e7f\u4e5f\u4e0d\u662f\u628a\u4f60\u7684\u4e1c\u897f\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u5e02\u573a\u6216\u8005\u53bb\u505a\u5e7f\u544a\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7528\u6237\u5c42\u9762"),"\uff1a\u4f60\u53ea\u9700\u8981\u5c06\u4f60\u7684\u4f5c\u54c1\u653e\u7f6e\u5230\u8fd9\u4e2a\u4e16\u754c\u4e2d\uff0c\u5f53\u6709\u5176\u4ed6\u4eba\u4f53\u9a8c\u5230\u5b83\u65f6\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c31\u590d\u5236\u4f60\u7684\u7ec4\u4ef6\u3002\u867d\u7136\u8fd9\u79cd\u65b9\u5f0f\u5e76\u6ca1\u6709\u5f15\u5165\u65b0\u7684\u5f00\u53d1\u8005\u6765\u9075\u5faa\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u5b83\u5f15\u5165\u548c\u589e\u52a0\u4e86\u4f7f\u7528\u5b83\u7684\u7528\u6237\u3002\u5b9e\u9645\u4e0a\u6211\u4eec\u5efa\u7acb\u7684\u6807\u51c6\uff0c\u5f53\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u652f\u6301\u4e4b\u540e\uff0c\u6211\u4eec\u6700\u7ec8\u7684\u76ee\u7684\u8fd8\u662f\u5e0c\u671b\u901a\u8fc7\u66f4\u591a\u7684\u652f\u6301\u7a0b\u5e8f\u6765\u83b7\u5f97\u4f7f\u7528\u7684\u7528\u6237\uff0c\u4ece\u8fd9\u4e2a\u5c42\u9762\u6765\u8bb2\uff0c\u5b83\u7684\u7ed3\u679c\u662f\u4e00\u6837\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005\u5c42\u9762"),"\uff1a\u6bcf\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6807\u51c6\u90fd\u53ef\u4ee5\u53d1\u5e03\u5230\u4e00\u4e2a\u5171\u4eab\u6807\u51c6\u5e93\uff0c\u5176\u5b9e\u5c31\u662f\u5171\u4eab\u7b26\u53f7\u8868\u3002\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u641c\u7d22\u5171\u4eab\u5e93\uff0c\u5e76\u901a\u8fc7\u5bf9\u5176\u5f15\u7528\u4ee5\u652f\u6301\u8fd9\u4e2a\u6807\u51c6\u3002\u8fd9\u6837\uff0c\u5b9a\u4e49\u7684\u6bd4\u8f83\u597d\u7684\u6807\u51c6\u5c31\u5bb9\u6613\u88ab\u66f4\u591a\u7684\u5f00\u53d1\u8005\u5f15\u7528\u548c\u652f\u6301\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002")),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f62\u6210\u7684\u6807\u51c6\u7cfb\u7edf\u662f\u4e00\u5957\u81ea\u6211\u81ea\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784\uff0c\u5728\u8fd9\u6837\u7684\u67b6\u6784\u4e0b\uff0c\u4efb\u4f55\u6807\u51c6\u4e0d\u4ec5\u80fd\u591f\u88ab\u5176\u4ed6\u72ec\u7acb\u5f00\u53d1\u8005\u4efb\u610f\u652f\u6301\uff0c\u4ee5\u5f62\u6210\u6807\u51c6\u7684\u63a8\u5e7f\uff1b\u5e76\u4e14\u901a\u8fc7\u53ca\u65f6\u8d2d\u4e70\u7b49\u65b9\u5f0f\uff0c\u6807\u51c6\u80fd\u591f\u88ab\u66f4\u76f4\u63a5\u7684\u901a\u8fc7\u7528\u6237\u8fdb\u884c\u666e\u53ca\uff0c\u4ece\u800c\u80fd\u591f\u63a8\u52a8\u90a3\u4e9b\u66f4\u597d\u7684\u6807\u51c6\u88ab\u66f4\u591a\u7684\u4eba\u7fa4\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u79cd\u673a\u5236\uff0c\u6700\u7ec8\u6574\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u4f7f\u6807\u51c6\u5b9e\u73b0\u81ea\u6211\u8fdb\u5316\uff0c\u5e76\u4e14\u5e26\u52a8\u7740\u6574\u4e2a\u4e16\u754c\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u3002"),(0,n.kt)("h3",{id:"4113-\u6807\u51c6\u7ba1\u7406"},"4.11.3 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u5373\u662f\u6574\u4f53\u7cfb\u7edf\u8fdb\u884c\u81ea\u8fdb\u5316\u7684\u673a\u5236\uff0c\u4e5f\u662f\u5b9e\u73b0\u7528\u6237\u5b9e\u4f53\u529f\u80fd\u7684\u673a\u5236\u3002\u5b83\u7684\u6574\u4e2a\u7ba1\u7406\u548c\u66f4\u65b0\u5fc5\u987b\u975e\u5e38\u9ad8\u6548\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u501f\u9274\u4e86\u73b0\u4ee3\u5e94\u7528\u7a0b\u5e8f\u5e02\u573a\u7684\u63a8\u9001\u3001\u6e90\u4ee3\u7801\u5305\u7ba1\u7406\u3001Github\u591a\u7248\u672c\u7ba1\u7406\u7b49\u601d\u60f3\u3002\u4f46\u5b83\u540c\u65f6\u4e5f\u5305\u542b\u4e00\u4e9bRealityIS\u72ec\u7279\u7684\u673a\u5236\u3002\u5b83\u5b9e\u73b0\u7684\u529f\u80fd\u4e0d\u4ec5\u5305\u62ec\u5f00\u53d1\u8005\u5411\u7528\u6237\u7684\u63a8\u9001\uff0c\u4e5f\u5305\u62ec\u7528\u6237\u5411\u5f00\u53d1\u8005\u751a\u81f3\u6807\u51c6\u4f5c\u8005\u7684\u53cd\u5411\u5efa\u8bae\uff0c\u4ee5\u53ca\u6807\u51c6\u4f5c\u8005\u5efa\u8bae\u5f00\u53d1\u8005\u9488\u5bf9\u65b0\u7684\u7b26\u53f7\u8fdb\u884c\u5f00\u53d1\u7684\u5efa\u8bae\uff0c\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u66f4\u6539\uff1a\u5411\u7ec4\u4ef6\u5f00\u53d1\u8005\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u66f4\u6539\uff1a\u5411\u7528\u6237\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u6807\u51c6\u5efa\u8bae\uff1a\u6807\u51c6\u4f5c\u8005\u589e\u52a0\u65b0\u7684\u529f\u80fd\uff0c\u5efa\u8bae\u7ec4\u4ef6\u5f00\u53d1\u8005\u652f\u6301"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u589e\u5f3a\uff1a\u7528\u6237\u5bf9\u7ec4\u4ef6\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5efa\u8bae\uff1a\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5bf9\u6807\u51c6\u4f5c\u8005\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u7279\u6027\u5efa\u8bae\uff1a\u7528\u6237\u53ef\u4ee5\u9488\u5bf9\u6807\u51c6\u4f5c\u8005\u6216\u8005\u5f00\u53d1\u8005\u63d0\u51fa\u65b0\u7684\u76f8\u53cd\u7684\u7ec4\u4ef6\u5f00\u53d1\u5efa\u8bae")),(0,n.kt)("p",null,"\u6574\u4e2aRealityIS\u7684\u81ea\u6211\u8fdb\u5316\u529f\u80fd\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u7684\u4e00\u4e9b\u5217\u673a\u5236\u6765\u5b9e\u73b0\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u540c\u65f6\u6807\u51c6\u7ba1\u7406\u7684\u53e6\u5916\u4e00\u4e2a\u5927\u7684\u76ee\u6807\u662f\u4f7f\u7528\u6237\u7684\u7ec4\u4ef6\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0"),"\uff0c\u51cf\u5c11\u7ef4\u62a4\u65e7\u7ec4\u4ef6\u5e26\u6765\u7684\u590d\u6742\u517c\u5bb9\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u7ba1\u7406\u6709\u4e24\u6761\u7ebf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0a\u800c\u4e0b\u7684\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0b\u800c\u4e0a\u7684\u53cd\u9988\u5efa\u8bae")),(0,n.kt)("h4",{id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5"},"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u6807\u51c6\u672c\u8eab\u6709\u66f4\u6539\uff0c\u4f1a\u901a\u77e5\u5230\u6240\u6709\u652f\u6301\u8be5\u6807\u51c6\u7684\u5f00\u53d1\u8005\uff0c\u63d0\u9192\u4ed6\u4eec\u5347\u7ea7\u7248\u672c\u3002\u5f00\u53d1\u8005\u5728\u6536\u5230\u901a\u77e5\u4e4b\u540e\uff0c\u53ef\u4ee5\u53d1\u5e03\u652f\u6301\u65b0\u6807\u51c6\u7684\u65b0\u7248\u672c\u7ec4\u4ef6\u3002\u5f53\u7136\u7ec4\u4ef6\u5f00\u53d1\u8005\u9700\u8981\u5b9e\u73b0\u517c\u5bb9\u6027\u3002\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u91cd\u547d\u540d"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7")),(0,n.kt)("p",null,"\u6807\u51c6\u66f4\u65b0\u673a\u5236\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\uff0c\u800c\u4e0d\u4f1a\u7531\u4e8e\u4fe1\u606f\u7684\u6ede\u540e\u751a\u81f3\u4e0d\u77e5\u9053\u6807\u51c6\u7684\u6539\u8fdb\u800c\u5bfc\u81f4\u4e00\u4e2a\u6807\u51c6\u8fdf\u8fdf\u65e0\u6cd5\u5feb\u901f\u8fdb\u5316\u3002\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u65b9\u6cd5\uff0c\u6709\u4e24\u9879\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\uff0c\u6807\u51c6\u7684\u4fee\u6539\u53ef\u4ee5\u76f4\u63a5\u901a\u77e5\u5230\u6240\u6709\u5173\u6ce8\u8005\uff1b\u4e2d\u95f4\u6ca1\u6709\u4efb\u4f55\u65f6\u5ef6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u9700\u8981\u5f00\u53d1\u8005\u4e3b\u52a8\u53bb\u5173\u6ce8\u67d0\u4e2a\u6807\u51c6\uff0c\u4ee5\u5f00\u53d1\u8005\u4e3a\u4e2d\u5fc3\u53bb\u63a8\u52a8\u4e00\u9879\u6807\u51c6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u662f\u4e00\u4e2a\u5927\u5bb6\u5171\u540c\u6765\u5236\u5b9a\u6807\u51c6\u7684\u8fc7\u7a0b\uff0c\u8fd9\u79cd\u6548\u7387\u6781\u4f4e\uff0c\u800cRealityIS\u53cd\u8fc7\u6765\uff0c\u5148\u5b9a\u4e49\u6807\u51c6\u3002\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\u4e00\u4e2a\u539f\u56e0\u662fRealityIS\u7b80\u5316\u4e86\u6807\u51c6\u7684\u5b9a\u4e49\uff1a\u5b83\u4ec5\u5173\u6ce8\u4e00\u4e2a\u903b\u8f91\u7ed3\u6784\u4e2d\u9700\u8981\u76f8\u4e92\u901a\u4fe1\u7684\u53c2\u6570\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u76f4\u63a5\u544a\u77e5\u9700\u8981\u4fee\u6539\u7684\u5730\u65b9\uff0c\u7531\u4e8e\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8ddf\u7ec4\u4ef6\u7684\u53d8\u91cf\u5f15\u7528\u5173\u8054\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8ba1\u7b97\u51fa\u54ea\u4e9b\u7ec4\u4ef6\u9700\u8981\u4fee\u6539\uff0c\u4ec0\u4e48\u53d8\u91cf\u9700\u8981\u4fee\u6539\u3002\u800c\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u662f\u901a\u8fc7\u6587\u672c\u7684\u65b9\u5f0f\uff0c\u5982\u90ae\u4ef6\uff0c\u544a\u77e5\u4fee\u6539\u7684\u5185\u5bb9\uff0c\u7136\u540e\u5f00\u53d1\u8005\u518d\u5bf9\u7167\u4fee\u6539\u3002\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u80fd\u591f\u5feb\u901f\u8fdb\u884c\u4fee\u6539\u3002")),(0,n.kt)("h4",{id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"},"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u66f4\u65b0\u4e86\u7ec4\u4ef6\uff0c\u4e5f\u4f1a\u81ea\u52a8\u901a\u77e5\u5230\u6240\u6709\u4f7f\u7528\u8be5\u7ec4\u4ef6\u7684\u7528\u6237\u3002\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e00\u952e\u5347\u7ea7\uff0c\u6216\u8005\u7528\u6237\u53ef\u4ee5\u5f00\u542f\u81ea\u52a8\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u7531\u4e8e\u7ec4\u4ef6\u90fd\u662f\u7ed3\u6784\u5316\u7684\u3001\u6570\u636e\u9a71\u52a8\u7684\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u5199\u6b7b\u5728\u4ee3\u7801\u4e2d\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8f83\u4e3a\u5bb9\u6613\u5730\u5c06\u6240\u4ee5\u8fd9\u4e9b\u7ec4\u4ef6\u4fe1\u606f\u62bd\u53d6\u51fa\u6765\u5f62\u6210\u5217\u8868\u3002\u7528\u6237\u7684\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u4f4e\u7f57\u5217\u51fa\u6765\uff0c\u6240\u4ee5\u5c31\u66f4\u65b9\u4fbf\u7528\u6237\u5bf9\u8fd9\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u5f88\u65b9\u4fbf\u5730\u5bf9\u5b9e\u4f53\u5bf9\u8c61\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h4",{id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236"},"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236"),(0,n.kt)("p",null,"\u6709\u4ee5\u4e0b\u591a\u79cd\u53cd\u9988\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u5f00\u53d1\u8005\uff09\u53cd\u9988\u7ec4\u4ef6\u529f\u80fd\uff1a\u7528\u6237\u57fa\u4e8e\u7ec4\u4ef6\u7684\u529f\u80fd\u7406\u89e3\u548c\u9700\u6c42\uff0c\u7528\u6237\u53ef\u4ee5\u7ed9\u7ec4\u4ef6\u5f00\u53d1\u8005\u63d0\u4f9b\u53cd\u9988\u610f\u89c1\uff0c\u4ee5\u5b8c\u5584\u6216\u589e\u5f3a\u67d0\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u4f5c\u8005\uff09\u53cd\u9988\u6807\u51c6\u7ed3\u6784\uff1a\u53ef\u4ee5\u5411\u6807\u51c6\u7ec4\u7ec7\u63d0\u51fa\u5efa\u8bae\uff0c\u4f8b\u5982\u4fee\u6539\u3001\u5220\u9664\u6216\u8005\u91cd\u547d\u540d\u7b26\u53f7\u3002\u8fd9\u91cc\u7684\u53cd\u9988\u4e2d\u53ef\u4ee5\u662f\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u793e\u533a\uff09\u5f81\u8be2\u65b0\u529f\u80fd\u5f00\u53d1\uff1a\u53ef\u4ee5\u5728\u6807\u51c6\u793e\u533a\u53d1\u5e03\u65b0\u7684\u529f\u80fd\u9700\u6c42\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u6309\u7167\u76f8\u5173\u9700\u6c42\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1\u3002 ")),(0,n.kt)("h4",{id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236"},"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u5bf9\u65e7\u7ec4\u4ef6\u7684\u517c\u5bb9\u6027\u7ef4\u62a4\u6210\u672c\uff0c\u6240\u6709\u7ec4\u4ef6\u6700\u597d\u90fd\u662f\u4fdd\u6301\u6700\u65b0\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u5176\u4e2d\u4e00\u6761\u53ef\u9009\u7684\u505a\u6cd5\u5c31\u662f\u7528\u4e8e\u53ea\u4fdd\u5b58\u6700\u65b0\u7684\u6807\u51c6\uff0c\u8fd9\u6837\u65e7\u7684\u7ec4\u4ef6\u5c31\u5fc5\u987b\u5347\u7ea7\u3002\u4f46\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6709\u65f6\u5019\u5728\u7ec4\u4ef6\u6ca1\u6709\u66f4\u65b0\u4e4b\u524d\u65e0\u6cd5\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u5c31\u662f\u6807\u51c6\u4f5c\u8005\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e9b\u65e7\u6807\u51c6\u5b58\u7eed\u7684\u65f6\u95f4\uff0c\u7ed9\u5f00\u53d1\u8005\u548c\u7528\u6237\u4e00\u6bb5\u65f6\u95f4\u8fdb\u884c\u66f4\u65b0\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u7cfb\u7edf\u9ed8\u8ba4\u5c31\u662f\u4e24\u4e2a\u7248\u672c\uff0c\u5176\u4e2d\u6bcf\u4e00\u4e2a \u65b0\u7248\u672c\u53d1\u5e03\u4e4b\u540e\uff0c\u65e7\u7248\u672c\u6700\u591a\u5b58\u7eed\u56fa\u5b9a\u7684\u65f6\u95f4\uff0c\u5982\u4e09\u4e2a\u6708\uff0c\u4e09\u4e2a\u6708\u4e4b\u540e\u81ea\u52a8\u5220\u9664\u3002\u8fd9\u79cd\u65b9\u5f0f\u770b\u8d77\u6765\u662f\u4e24\u8005\u7684\u4e00\u4e2a\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"4114-\u8de8\u8d8a\u6807\u51c6"},"4.11.4 \u8de8\u8d8a\u6807\u51c6"),(0,n.kt)("p",null,"\u4ece\u903b\u8f91\u4e0a\u8bb2\uff0c\u7ec4\u4ef6\u5173\u6ce8\u7684\u53ea\u6709\u7b26\u53f7\uff0c\u800c\u4e0d\u662f\u6807\u51c6\uff0c\u6807\u51c6\u53ea\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u5728\u5f00\u53d1\u7ec4\u4ef6\u7684\u601d\u8003\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u53c2\u8003\uff0c\u4ed6\u5bf9\u6807\u51c6\u672c\u8eab\u6ca1\u6709\u76f4\u63a5\u7684\u6240\u5c5e\u6216\u8005\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u53ef\u4ee5\u8de8\u57df\u6807\u51c6\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u6bcf\u4e2a\u6807\u51c6\u7406\u89e3\u4e3a\u4e00\u4e2a\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u8fd9\u79cd\u8de8\u8d8a\u6807\u51c6\u7684\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4ece\u800c\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u8054\u7cfb\u6216\u8005\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u6574\u4e2a\u5929\u6c14\u7cfb\u7edf\u5305\u62ec\u4e91\u5c42\u5b50\u7cfb\u7edf\uff0c\u6d77\u6d0b\u5b50\u7cfb\u7edf\uff0c\u5929\u7a7a\u5b50\u7cfb\u7edf\uff0c\u9646\u5730\u5b50\u7cfb\u7edf\u7b49\u7b49\uff0c\u7136\u540e\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u662f\u5b58\u5728\u4e00\u5b9a\u6bd4\u8f83\u7b80\u5355\u7684\u5173\u7cfb\uff0c\u4ece\u800c\u5f62\u6210\u6574\u4e2a\u5929\u6c14\u590d\u6742\u7cfb\u7edf\u7684\u3002"),(0,n.kt)("h4",{id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"},"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5982\u679c\u628a\u6bcf\u4e2a\u6807\u51c6\u770b\u505a\u4e00\u4e2a\u66f4\u5927\u590d\u6742\u7cfb\u7edf\u7684\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u4e2d\u5fc5\u7136\u6709\u90e8\u5206\u5c5e\u6027\u662f\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u7684\u5c5e\u6027\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u6807\u51c6\u901a\u5e38\u4f1a\u5305\u542b\u5c11\u90e8\u5206\u4e0e\u76f8\u5173\u6807\u51c6\u6709\u5173\u7684\u7b26\u53f7\uff0c\u5bf9\u4e8e\u8fd9\u4e9b\u7b26\u53f7\uff0c\u5b83\u4eec\u7684\u5c5e\u6027\u503c\u901a\u5e38\u7531\u5185\u90e8\u7684\u673a\u5236\u8ba1\u7b97\uff0c\u7136\u540e\u8fd9\u4e9b\u503c\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u76f8\u5173\u6807\u51c6\u4e2d\u4e0e\u4e4b\u76f8\u5173\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u54ea\u4e9b\u662f\u76f8\u5173\u5c5e\u6027\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u53bb\u7ea6\u675f\u5b83\u3002\u8fd9\u53ea\u662f\u5f00\u53d1\u8005\u8111\u4e2d\u77e5\u9053\u7684\u4e00\u4e2a\u6982\u5ff5\u3002\u4ece\u7406\u8bba\u4e0a\u6765\u8bf4\uff0c\u6807\u51c6\u7684\u4efb\u4f55\u5c5e\u6027\u4e5f\u8bb8\u90fd\u53ef\u80fd\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u6709\u67d0\u79cd\u5173\u7cfb\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u9700\u8981\u9650\u5236\u4ed6\uff0c\u8fd9\u53ea\u662f\u5bf9\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u6307\u5bfc\u3002"),(0,n.kt)("h2",{id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse"},"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"4121-\u6807\u51c6\u7684\u4ef7\u503c"},"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u662f\u5b9e\u73b0\u591a\u7a0b\u5e8f/\u591a\u5e94\u7528\u4e4b\u95f4\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6807\u51c6\u5219\u6784\u5efa\u4e8e\u7b26\u53f7\u8868\u4e4b\u4e0a\uff0c\u5b83\u662f\u4e00\u7ec4\u8bed\u4e49\u4e0a\u76f8\u5173\u7684\u7b26\u5408\u96c6\u5408\u7684\u6982\u5ff5\u3002\u7b26\u53f7\u603b\u662f\u5b58\u5728\u4e8e\u4e00\u4e2a\u6807\u51c6\u4e4b\u4e2d\uff0c\u5373\u7b26\u53f7\u6309\u6807\u51c6\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u7ec7\u3002"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u5355\u4e2a\u7b26\u53f7\uff0c\u6807\u51c6\u662f\u5bf9\u73b0\u5b9e\u4e16\u754c\u67d0\u4e9b\u5173\u7cfb\u6216\u903b\u8f91\u7684\u62bd\u8c61\u3002\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u662f\u56f4\u7ed5\u67d0\u4e00\u7c7b\u5173\u7cfb\u6216\u8005\u67d0\u4e00\u7c7b\u4e8b\u7269\u7684\u6838\u5fc3\u7684\u6570\u636e\u5c5e\u6027\uff0c\u5176\u4e2d\u901a\u8fc7\u8fd9\u4e9b\u6570\u636e\u8981\u80fd\u591f\u63cf\u8ff0\u8be5\u7c7b\u5173\u7cfb\u6216\u6570\u636e\u7684\u7279\u5f81\u4ee5\u53ca\u5404\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5c5e\u6027\u5e94\u8be5\u662f\u4fbf\u4e8e\u4eba\u7c7b\u7406\u89e3\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u6807\u51c6\u662fReality World\u7684\u4e00\u4e2a\u6838\u5fc3\u6307\u6807\uff0c\u5b83\u4e5f\u662f\u4ee3\u8868\u7528\u6237\u521b\u4f5c\u7684\u6700\u9ad8\u62bd\u8c61\u80fd\u529b\uff0c\u6211\u4eec\u5bf9\u4e8e\u73b0\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u5173\u7cfb\u7684\u6df1\u523b\u62bd\u8c61\u7406\u89e3\u90fd\u8574\u85cf\u5728\u6807\u51c6\u7684\u5b9a\u4e49\u53ca\u5176\u7ed3\u6784\u4e2d\u3002")),(0,n.kt)("p",null,"Reality World\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u6765\u5f00\u53d1\u7684\uff0c\u8fd9\u4fdd\u8bc1\u7ec4\u4ef6\u4e0d\u4f1a\u592a\u6df7\u4e71\uff0c\u56e0\u4e3a\u5b83\u4eec\u662f\u6309\u7167\u5f88\u4e25\u683c\u7684\u903b\u8f91\u6765\u903b\u8f91\u7684\uff0c\u8fd9\u79cd\u903b\u8f91\u7531\u6807\u51c6\u6765\u5b9a\u4e49\u3002\u540c\u65f6\u4ed6\u4e5f\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u53d8\u5f97\u6709\u610f\u4e49\uff0c\u76f8\u5173\u6027\u6bd4\u8f83\u9ad8\uff0c\u56e0\u4e3a\u76f8\u5bf9\u4e8e\u540c\u4e00\u6807\u51c6\u7684\u4e0d\u540c\u7ec4\u4ef6\uff0c\u5b83\u4eec\u5f7c\u6b64\u77e5\u9053\u5e94\u8be5\u600e\u6837\u534f\u4f5c\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u4e0d\u4ec5\u5305\u542b\u4e00\u4e9b\u7684\u76f8\u5173\u6027\uff0c\u4e5f\u5305\u62ec\u5bf9\u903b\u8f91\u5f00\u53d1\u7684\u6307\u5bfc\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u5b9a\u4e49\u5f62\u5f0f\u4e5f\u4f7f\u5f97\u6807\u51c6",(0,n.kt)("strong",{parentName:"p"},"\u6613\u4e8e\u5b9a\u4e49"),"\uff1a\u6211\u4eec\u53ea\u9700\u8981\u627e\u51fa\u63cf\u8ff0\u67d0\u7c7b\u5173\u7cfb\u7684\u6570\u636e\uff0c\u800c\u4e0d\u662f\u9700\u8981\u53bb\u5b9e\u73b0\u6216\u5b9a\u4e49\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u64cd\u4f5c\u7684\u65b9\u6cd5\uff0c\u8fd9\u6837\u5c31\u662f\u7684\u6807\u51c6\u7684\u5b9a\u4e49\u6839\u672c\u4e0d\u9700\u8981\u5f88\u590d\u6742\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u6bd4\u5982\u7c7b\u4f3cUSD\u7c7b\u591a\u5c42\u7ea7\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u4e5f\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\uff0c\u6807\u51c6\u7684\u4f5c\u8005\u53ef\u4ee5\u5bf9\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8fdb\u884c\u65b0\u589e\u3001\u4fee\u6539\u3001\u91cd\u547d\u540d\u6216\u8005\u5220\u9664\u7b49\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u6765\u5b9e\u73b0\u6807\u51c6\u7684\u8fdb\u5316\uff0c\u5f62\u6210\u66f4\u597d\u7684\u62bd\u8c61\uff0c\u66f4\u597d\u7684\u6807\u51c6\u3002\u800c\u52a8\u6001\u7f16\u8bd1\u7684\u673a\u5236\uff0c\u4ee5\u53ca\u6807\u51c6\u66f4\u65b0\u901a\u77e5\u673a\u5236\uff0c\u4f7f\u5f97\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u6216\u8005\u7ec4\u4ef6\u53ef\u4ee5\u5f97\u5230\u901a\u77e5\uff0c\u4f7f\u5f97\u7ec4\u4ef6\u5728\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\u3002\u6700\u7ec8\u771f\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u662f\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u597d\u7684\u6807\u51c6\u4ee3\u8868\u7740\u4f18\u79c0\u7684\u4e8b\u60c5\uff0c\u4ed6\u4f1a\u88ab\u66f4\u591a\u7684\u4eba\u4f7f\u7528\uff0c\u5b83\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u6307\u6807"),(0,n.kt)("p",null,"\u6807\u51c6\u672c\u8eab\u4e5f\u662f\u4e00\u4e2a\u7c7b\u578b\u67e5\u627e\u7684\u4f9d\u636e\uff0c\u6807\u51c6\u7684\u8bbe\u8ba1\u5e94\u8be5\u56f4\u7ed5\u67d0\u4e00\u7c7b\u4e3b\u9898\uff0c\u800c\u4e0d\u662f\u6cdb\u6cdb\u7684\u6d89\u53ca\u591a\u4e2a\u65e0\u5173\u5185\u5bb9\u7684\u6807\u51c6\u3002\u8fd9\u4e9b\u4e5f\u662f\u666e\u901a\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u65f6\u7684\u7ec4\u4ef6\u7b5b\u9009\u673a\u5236\u4e4b\u4e00\u3002"),(0,n.kt)("h3",{id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"},"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b26\u53f7\u8868\u7684\u7248\u6743\uff0c\u7c7b\u6bd4\u6307\u5b9a\u6807\u51c6\uff0c\u7b26\u53f7\u8868\u6807\u51c6\u672c\u8eab\u6bd4\u5b9e\u73b0\u7684\u7ec4\u4ef6\u662f\u66f4\u9ad8\u4ef7\u503c\u7684\u4e1c\u897f"),(0,n.kt)("h3",{id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"},"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"),(0,n.kt)("h4",{id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"},"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"),(0,n.kt)("h3",{id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"},"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u524d\u8005\u662f\u6307\u4e00\u4e2a\u597d\u7684\u6807\u51c6\uff0c\u6709\u4e00\u5b9a\u7684\u673a\u5236\u88ab\u66f4\u591a\u4eba\u53d1\u73b0\uff0c\u4ece\u800c\u4fc3\u8fdb\u4e86\u6807\u51c6\u7684\u63a8\u5e7f\uff0c\u8fd9\u662f\u4e00\u79cd\u7ef4\u5ea6\u7684\u8fdb\u5316\uff0c\u56e0\u4e3a\u8fd9\u6837\u597d\u7684\u4e1c\u897f\u4f1a\u8d8a\u6765\u8d8a\u88ab\u66f4\u591a\u4f7f\u7528\uff0c\u4ece\u7528\u6237\u6765\u770b\uff0c\u8fd9\u4e2a\u4e16\u754c\u53d8\u5f97\u8d8a\u6765\u8d8a\u7f8e\u597d\u3002"),(0,n.kt)("p",null,"\u540e\u8005\u662f\u6307\uff0c\u4fc3\u8fdb\u6807\u51c6\u672c\u8eab\u7684\u8fdb\u5316\u3002\u5373\u5bf9\u4e8e\u4e00\u4e2a\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684\u6807\u51c6\uff0c\u8fd9\u4e2a\u6807\u51c6\u5e76\u4e0d\u662f100%\u5b8c\u7f8e\u7684\uff0c\u5b83\u672c\u8eab\u8fd8\u6709\u6539\u8fdb\u7a7a\u95f4\uff0c\u5b83\u672c\u8eab\u4e5f\u53ef\u4ee5\u5ef6\u540e"),(0,n.kt)("h4",{id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"},"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"),(0,n.kt)("h4",{id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"},"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"),(0,n.kt)("p",null,"\u8ba2\u9605\u7684\u673a\u5236"),(0,n.kt)("h4",{id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"},"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"),(0,n.kt)("p",null,"\u53c2\u89c14.11.3.4\u8282\uff0c\u6807\u51c6\u7684\u66f4\u65b0\u673a\u5236\uff08\u4fdd\u6301\u6700\u65b0\u4e24\u4e2a\u7248\u672c\uff09\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\u4ee5\u53ca\u7275\u5f15\u7528\u6237\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u7248\u672c\u673a\u5236\u8fd8\u4fc3\u8fdb\u4e86\u7ec4\u4ef6\u66f4\u65b0\uff0c\u5f53\u6807\u51c6\u66f4\u65b0\u4e86\uff0c\u53ef\u80fd\u4e0d\u4e45\u4e4b\u524d\uff0c\u6bd4\u5982\u4e00\u4e2a\u6708\u6216\u8005\u534a\u5e74\u7684\u7ec4\u4ef6\u5c06\u6709\u53ef\u80fd\u8fc7\u65f6\uff0c\u8fd9\u65f6\u5019\u4e3a\u4e86\u6301\u7eed\u88ab\u5176\u4ed6\u65b0\u7528\u6237\u4f7f\u7528\uff0c\u5b83\u5fc5\u987b\u66f4\u7ec6\u7ec4\u4ef6\uff0c\u5426\u5219\u65b0\u7528\u6237\u65e0\u6cd5\u8d2d\u4e70\uff0c\u8fd9\u6837\u5c31\u4fc3\u8fdb\u7ec4\u4ef6\u5f00\u53d1\u8005\u5feb\u901f\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u662f\u5df2\u7ecf\u8d2d\u4e70\u7684\u7528\u6237\uff0c\u5b83\u53ef\u4ee5\u53cd\u9988\u8981\u6c42\u7ec4\u4ef6\u66f4\u65b0\uff0c\u8fd9\u91cc\u9762\u5c31\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u523a\u6fc0\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8d2d\u4e70\u662f\u4e00\u6b21\u6027\u7684\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u4e0d\u7528\u5bf9\u8fc7\u671f\u8d1f\u8d23"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u7528\u6237\u9700\u8981\u5347\u7ea7\u7ec4\u4ef6\u65f6\uff0c\u8fd9\u662f\u4e00\u6b21\u91cd\u65b0\u8d2d\u4e70\u884c\u4e3a\uff0c\u5bf9\u5f00\u53d1\u8005\u6765\u8bb2\u6709 \u4e8c\u6b21\u6536\u5165\uff0c\u5f53\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u8bbe\u7f6e\u8001\u7528\u6237\u4f18\u60e0\uff0c\u751a\u81f3\u8001\u7528\u6237\u514d\u8d39\u5347\u7ea7\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u6709\u8db3\u591f\u5927\u7684\u52a8\u529b\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u4ece\u5b9e\u9645\u6765\u8bb2\uff0c\u771f\u5b9e\u793e\u4f1a\u4e5f\u662f\u8fd9\u4e2a\u6837\u5b50\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f60\u4e70\u7684\u4e1c\u897f\u662f\u5bb9\u6613\u8fc7\u65f6\u7684\uff0c\u4f60\u53ef\u80fd\u4f1a\u91cd\u65b0\u8d2d\u4e70\u76f8\u540c\u4ea7\u54c1\u7684\u65b0\u54c1\uff0c\u6bd4\u5982\u624b\u673a")),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5bf9\u4e8e\u8f6f\u4ef6\u6765\u8bb2\uff0c\u66f4\u65b0\u5f88\u5feb\uff0c\u4f60\u4e0d\u53ef\u80fd\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u5c31\u7528\u51e0\u5e74\uff0c\u8fd9\u79cd\u9648\u5e74\u7684\u8001\u4ee3\u7801\u540e\u9762\u4e00\u5b9a\u6709\u517c\u5bb9\u6027\u95ee\u9898\uff0c\u800c\u4e14\u5b83\u4e0d\u66f4\u65b0\u4e5f\u4ee3\u8868\u7740\u7528\u6237\u4f53\u9a8c\u7684\u8fd8\u662f\u5f88\u4e45\u4e4b\u524d\u7684\u4e1c\u897f\uff0c\u5f53\u7136\u8fd9\u4e9b\u4e1c\u897f\u4e5f\u6709\u53ef\u80fd\u7ecf\u5f97\u8d77\u65f6\u95f4\u8003\u9a8c\u3002\u4f46\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u8fd9\u79cd\u6bd4\u8f83\u7a33\u5b9a\u7684\u4ea7\u54c1\uff0c\u5176\u4ee3\u7801\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u5f00\u53d1\u8005\u6bcf\u6b21\u53ef\u80fd\u5e76\u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u591a\u65f6\u95f4\u5c31\u53ef\u4ee5\u66f4\u65b0\u5347\u7ea7\u4e00\u4e0b\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u6bcf\u4e2a\u6807\u51c6\u90fd\u662f\u4e00\u4e2a\u8fdb\u5316\u7684\u8fc7\u7a0b\uff0c\u5230\u4e00\u5b9a\u7684\u9636\u6bb5\u5b83\u4e5f\u4f1a\u8d8b\u4e8e\u7a33\u5b9a"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u6807\u51c6\u5f00\u53d1\u8005\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u6d41\u5931\uff0cTA\u4e5f\u8981\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u7a33\u5b9a\uff0c\u5426\u5219\u9891\u7e41\u53d8\u5316\u7684\u6807\u51c6\u6709\u53ef\u80fd\u4f1a\u6d41\u5931\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u5bf9\u4e8e\u4f20\u7edf\u7684App\u6765\u8bb2\uff0c\u6bd4\u5982\u6709\u65f6\u5019\u770b\u5230\u5f88\u591a\u975e\u5e38\u4e45\u7684app\u6ca1\u6709\u66f4\u65b0\u5347\u7ea7\u4e5f\u80fd\u8fd0\u884c\uff0c\u4f46\u662f\u56e0\u4e3a\u5b83\u662f\u72ec\u7acb\u7a0b\u5e8f\uff0c\u53ea\u8981OS\u4fdd\u6301\u4e00\u5b9a\u7684\u517c\u5bb9\u65f6\u95f4\u5373\u53ef\uff0c\u4f46\u662f\u5bf9\u4e8e\u5728\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u5f00\u653e\u5927\u4e16\u754c\u6765\u8bb2\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u590d\u6742\u5f97\u591a\uff0c\u6240\u4ee5\u524d\u671f\u4f7f\u7528\u66f4\u7b80\u5355\u7684\u65b9\u5f0f\u5904\u7406\u3002"),(0,n.kt)("h2",{id:"413-\u7528\u6237\u521b\u4f5c"},"4.13 \u7528\u6237\u521b\u4f5c"),(0,n.kt)("h3",{id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"},"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"),(0,n.kt)("h3",{id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"},"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"),(0,n.kt)("h3",{id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7"},"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7"),(0,n.kt)("h3",{id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"},"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("h2",{id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"},"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"),(0,n.kt)("h3",{id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458"},"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458"),(0,n.kt)("p",null,"ChatGPT\u65e9\u671f\u7684\u6d41\u91cf\u5927\u90e8\u5206\u6765\u81ea\u6280\u672f\u4eba\u5458\uff0c\u8ddf\u533a\u5757\u94fe\u4e00\u6837\uff0c\u5148\u7531\u6280\u672f\u4eba\u5458\u5230\u975e\u6280\u672f\u4eba\u5458\uff0c\u501f\u52a9\u73b0\u5728\u7684\u793e\u4ea4\u7f51\u7edc\uff0c\u73b0\u5728\u7684\u4fe1\u606f\u4f20\u64ad\u4f1a\u66f4\u5feb"),(0,n.kt)("h3",{id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai"},"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI"),(0,n.kt)("p",null,"\u4ee5ChatGPT\u4e3a\u4ee3\u8868\u7684\u5927\u6a21\u578b\uff0c\u662f\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u65b9\u5f0f\uff0c\u8fc7\u53bb\u5206\u6563\u5728\u591a\u4e2a\u8f6f\u4ef6\u4e2d\u7684\u4fe1\u606f\u548c\u529f\u80fd\uff0c\u73b0\u5728\u88ab\u96c6\u6210\u5230\u4e00\u4e2a\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u6a21\u578b\u548c\u516c\u53f8\u4e2d\uff0c\u4f7f\u5f97\u5355\u4e00\u516c\u53f8\u5bf9\u66f4\u5e7f\u6cdb\u7684\u80fd\u529b\u62e5\u6709\u66f4\u5f3a\u63a7\u5236\u6743\uff0c \u56e0\u6b64\u4fe1\u606f\u5b89\u5168\u4f1a\u66f4\u52a0\u590d\u6742\u3002\u56e0\u4e3a\u4e0d\u7ba1\u4e00\u4e2a\u6a21\u578b\u662f\u5426\u80fd\u591f\u52a8\u6001\u5b66\u4e60\u65b0\u77e5\u8bc6\u7684\u80fd\u529b\uff0c\u8fd8\u662f\u8bf4\u5b83\u7684\u6570\u636e\u5747\u6765\u81ea\u5206\u6563\u7684\u4e92\u8054\u7f51\uff0c\u4f46\u6700\u7ec8\u9762\u5411\u7528\u6237\u7684\u6574\u4e2a\u6d41\u7a0b\u662f\u901a\u8fc7\u5927\u6a21\u578b\u4e2d\u7684\u7b97\u5b50\u548c\u7a0b\u5e8f\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u4e9b\u8f93\u5165\u4fe1\u606f\u4e0d\u7ba1\u662f\u5426\u771f\u5b9e\u51c6\u786e\uff0c\u5927\u6a21\u578b\u7684\u8ba1\u7b97\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u5b83\u638c\u63e1\u7740\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u63a7\u5236\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u672a\u6765\u7684AI\u5e94\u8be5\u662f\u53bb\u4e2d\u5fc3\u5316\u7684\uff0c\u5e94\u8be5\u4ee5\u67d0\u79cd\u7528\u6237\u53ef\u63a7\u7684\u5f62\u5f0f\uff0c\u66f4\u5206\u6563\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u50cfRealityIS\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u7684\u662f\u57fa\u7840\u6a21\u5757\u800c\u4e0d\u662f\u6a21\u578b\uff0c\u7528\u6237\u53bb\u9009\u62e9\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u672a\u6765\u7684AI\u6216\u8bb8\u5e94\u8be5\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u95ee\u9898\u7684\u7ed3\u679c\u533a\u5206\uff0c\u5f53\u4eca\u7684ChatGPT\u7684\u6210\u529f\u5728\u4e8e\u5b83\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u4fe1\u606f\u7684\u7ed3\u679c\u8fdb\u884c\u5173\u8054\uff0c\u8fd9\u79cd\u5173\u8054\u4e00\u65b9\u9762\u65b9\u4fbf\u4e2d\u5fc3\u5316\u7684\u5927\u6a21\u578b\u8fdb\u884c\u5b66\u4e60\u5904\u7406\uff0c\u4f46\u4e5f\u540c\u65f6\u5e26\u6765\u4e86\u98ce\u9669\u3002\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u5c06\u83b7\u53d6\u7ed3\u679c\u90e8\u5206\u7684\u63a7\u5236\u6743\u4ea4\u7ed9\u7528\u6237\uff0c\u7531\u7528\u6237\u6765\u63a7\u5236\uff0c\u53ef\u4ee5\u6709\u8bb8\u591a\u65b9\u5f0f\uff0c\u4f8b\u5982RealityIS\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"},"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"),(0,n.kt)("p",null,"\u4ece\u53e6\u4e00\u4e2a\u89d2\u5ea6\uff0cchatGPT\u5f71\u54cd\u4e86\u4fe1\u606f\u7684\u4f20\u9012\uff0c\u6743\u5a01\u4fe1\u606f\u6bd4\u5982\u65b0\u95fb\u3001\u6280\u672f\u6587\u7ae0\uff0c\u6700\u6838\u5fc3\u7684\u539f\u5219\u80af\u5b9a\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u6bd4\u5982\u5404\u5927\u7f51\u7ad9\u9700\u8981\u63a8\u51fa\u81ea\u5df1\u7684\u5b98\u65b9\u7f51\u7ad9\u6216\u8005\u4fe1\u606f\u6e90\u4f9b\u7528\u6237\u76f4\u63a5\u6d88\u8d39\u3002\u76f4\u63a5\u4f20\u9012\u662f\u4fdd\u6301\u4fe1\u606f\u771f\u5b9e\u6027\u7684\u552f\u4e00\u9014\u5f84\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e00\u65e6\u4fe1\u606f\u7684\u4f20\u64ad\u65b9\u5f0f\u53d8\u5f97\u4e0d\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u8fd9\u5c06\u4f1a\u5927\u5927\u5f71\u54cd\u4fe1\u606f\u7684\u4f20\u64ad\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6e20\u9053\u53ef\u80fd\u4f1a\u4fee\u6539\u4fe1\u606f\u5185\u5bb9\u3002\u5373\u4f7f\u662f\u8f6c\u6458\uff0c\u4e5f\u5f88\u96be\u8fa8\u522b\u8f6c\u53d1\u8005\u505a\u4e86\u54ea\u4e9b\u4fe1\u606f\u4fee\u6539\uff0c\u9664\u975e\u4f60\u53bb\u770b\u539f\u6587\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u603b\u662f\u529b\u6c42\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012\uff0c\u4f20\u9012\u7684\u5a92\u4ecb\u662f\u62a5\u7eb8\uff0c\u62a5\u7eb8\u6709\u51fa\u7248\u793e\u6743\u5a01\u5370\u5237\u5382\u7ecf\u8fc7\u6743\u5a01\u6e20\u9053\u76f4\u63a5\u5230\u8fbe\u7528\u6237\u624b\u4e2d\uff0c\u4e00\u822c\u5f88\u96be\u7be1\u6539\u3002\u800c\u4e92\u8054\u7f51\u5e95\u5ea7\u7684\u4e92\u8054\u6a21\u578b\uff0c\u4e5f\u662f\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u5e95\u5c42\u673a\u5236\u4e0d\u4f1a\u7be1\u6539\u4f20\u8f93\u4fe1\u606f\uff0c\u5e76\u4ee5\u6807\u51c6\u7684\u5f62\u5f0f\u5f00\u653e\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u663e\u7136\u5927\u516c\u53f8\u7684\u5927\u6a21\u578b\u4f5c\u4e3a\u4e00\u4e2a\u4fe1\u606f\u4f20\u64ad\u6e20\u9053\u548c\u65b9\u5f0f\uff0c\u5b83\u65e0\u6cd5\u6709\u8fd9\u6837\u7684\u4fdd\u8bc1\u3002"),(0,n.kt)("h1",{id:"5-realitycoin"},"5. RealityCoin"),(0,n.kt)("p",null,"\u5c06\u8fc7\u53bb\u4f20\u7edf\u6e38\u620f\u5e02\u573a\u4e2d\uff0c\u53ea\u6709\u5f00\u53d1\u5546\u3001\u53d1\u884c\u5546\u548c\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\uff0c\u6269\u5c55\u4e3a\u5176\u4ed6\u4eba\u53ef\u4ee5\u53c2\u4e0e\u6295\u8d44\uff0c\u901a\u8fc7\u6295\u8d44\u6765\u9a71\u52a8\u6e38\u620f\u4f53\u9a8c\u6216\u5e94\u7528\u7a0b\u5e8f\u529f\u80fd\u83b7\u5f97\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4ee5\u592a\u574a\u7c7b\u4f3c\u7684\u53bb\u4e2d\u5fc3\u5316\u5e73\u53f0\uff0c\u7531\u4e8e\u4ee5\u592a\u574a\u53d1\u884c\u7684\u4ee3\u5e01\u8ddf\u5b9e\u9645\u8fd0\u884c\u7684\u4ea7\u4e1a\u4e4b\u95f4\u7f3a\u4e4f\u5173\u8054\uff0c\u672c\u8d28\u4e0a\u4ee5\u592a\u574a\u53ea\u4fdd\u8bc1\u4ea4\u6613\u7684\u6267\u884c\u548c\u5408\u7ea6\u7684\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ea4\u6613\u548c\u5408\u7ea6\u80cc\u540e\u7684\u5b9e\u4f53\u53ca\u5176\u5b9e\u4f53\u7684\u4fe1\u7528\u4f53\u7cfb\uff0c\u4ecd\u7136\u9700\u8981\u4f9d\u8d56\u4e8e\u7b2c\u4e09\u65b9\u673a\u6784\uff0c\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u673a\u6784\u5927\u90fd\u662f\u4e2d\u5fc3\u5316\u7684\u673a\u6784\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u7269\u4f53\u80fd\u4e0d\u80fd\u6309\u65f6\u9001\u8fbe"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u771f\u5b9e\u4e16\u754c\u7684\u7269\u6743\u662f\u5426\u771f\u5b9e\uff0c\u751a\u81f3\u662f\u5426\u771f\u6709\u5176\u6743"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u80cc\u540e\u7684\u56e2\u961f\u662f\u5426\u6709\u80fd\u529b\u6267\u884c\u4ee3\u5e01\u7684\u627f\u8bfa\uff0c\u751a\u81f3\u8c01\u6765\u9a8c\u8bc1\u8fd9\u4e2a\u56e2\u961f\u53ca\u5176\u6267\u884c")),(0,n.kt)("p",null,"\u7531\u4e8eRealityCoin\u53ea\u670d\u52a1\u4e8eReality World\u5e73\u53f0\u4e0a\u7684\u5e94\u7528\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u4ee3\u5e01\u548c\u5e73\u53f0\u4e4b\u95f4\u52a0\u5165\u4e00\u4e9b\u4fe1\u7528\u7ea6\u5b9a\uff0c\u7528\u4ee5\u4fdd\u8bc1\u4ee3\u5e01\u7684\u98ce\u9669\u53ef\u63a7\u3002\u5e76\u4e14\uff0c\u901a\u8fc7\u4fdd\u8bc1\u4ee3\u5e01\u5bf9\u5e94\u7684\u4ea7\u54c1\u786e\u6709\u5176\u7269\uff0c\u751a\u81f3\u53ef\u4ee5\u907f\u514d\u4e00\u4e9b\u8bc1\u5238\u76d1\u7ba1\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h2",{id:"51-\u4ee3\u5e01\u7ecf\u6d4e"},"5.1 \u4ee3\u5e01\u7ecf\u6d4e"),(0,n.kt)("h3",{id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"},"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"),(0,n.kt)("p",null,"\u9664\u4e86Reality World\u5185\u90e8\u7c7b\u4f3c\u5b9e\u4f53\u6216\u8005\u4e2a\u4f53\u7ecf\u6d4e\uff0c\u8fd9\u5728\u524d\u671f\u6ca1\u6709\u4ea7\u54c1\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u5c31\u662f\u9760\u8fd0\u8425\uff0c\u5176\u5b9e\u5c31\u662f\u6295\u653e\u6d41\u91cf\uff0c\u6216\u8005\u5c31\u5355\u7eaf\u9700\u8981\u9760\u4ea7\u54c1\u7684\u53e3\u7891\u3002\u524d\u8005\u6210\u672c\u8f83\u9ad8\uff0c\u800c\u540e\u8005\u6210\u529f\u7387\u8f83\u4f4e\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u903b\u8f91\uff0c\u5b83\u4e0d\u4ec5\u662f\u4e00\u4e2a\u5b89\u5168\u7684\u4ef7\u503c\u4ea4\u6613\u4e2d\u4ecb\uff0c\u5b83\u7684\u67b6\u6784\u4f53\u7cfb\u4e2d\u5929\u751f\u878d\u5165\u4e86\u6295\u8d44\u7684\u903b\u8f91\uff0c\u6bd4\u5982\u5b83\u9996\u5148\u662f\u53d1\u5e01\uff0c\u6b64\u65f6\u5b9e\u7269\u8fd8\u6ca1\u6709\u751f\u4ea7\u51fa\u6765\u6216\u8005\u4ea7\u54c1\u5904\u4e8e\u524d\u671f\u8fd0\u8425\u671f\uff0c\u4ea7\u54c1\u77e5\u540d\u5ea6\u8fd8\u6ca1\u6709\u90a3\u4e48\u9ad8\u3002\u6b64\u65f6\u5c31\u57fa\u4e8e\u6295\u8d44\u8005\u5bf9\u672a\u6765\u4ea7\u54c1\u7406\u5ff5\u6216\u8005\u6545\u4e8b\u7684\u9884\u671f\uff0c\u8fdb\u884c\u6295\u8d44\uff0c\u4f8b\u5982\u4ee3\u5e01\u5c31\u662f\u8fd9\u6837\uff1b\u5373\u4f7f\u6ca1\u6709\u6295\u8d44\uff0c\u5b9e\u73b0\u5206\u53d1\u7684\u865a\u62df\u8d27\u5e01\uff0c\u4e5f\u4f1a\u8ba9\u6301\u5e01\u8005\u4e3a\u4e86\u4f7f\u5f97\u6240\u6301\u8d27\u5e01\u589e\u503c\uff0c\u800c\u4f1a\u65e0\u5f62\u4e2d\u53c2\u4e0e\u5e2e\u52a9\u5e73\u53f0\u7684\u63a8\u5e7f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u4e00\u5957\u903b\u8f91\u80cc\u540e\uff0c\u80fd\u591f\u8ba9\u65e9\u5165\u5c40\u7684\u4eba\u5728\u4ee5\u540e\u83b7\u5f97\u66f4\u5927\u7684\u56de\u62a5\uff0c\u57fa\u4e8e\u5bf9\u5e73\u53f0\u6216\u8005\u4ea7\u54c1\u672a\u6765\u7684\u9884\u671f\u6216\u60f3\u8c61\u7a7a\u95f4\u3002\u56e0\u4e3a\u5982\u679c\u57fa\u4e8e\u6295\u8d44\u8005\u7684\u9884\u671f\uff0c\u65e5\u540e\u8fd9\u4e9b\u81ea\u5df1\u6240\u6301\u7684\u865a\u62df\u8d27\u5e01\u6216\u8005\u4ee3\u5e01\uff0c\u4f1a\u83b7\u5f97\u8f83\u5927\u7684\u4ef7\u503c\u589e\u503c\u7a7a\u95f4\u3002\u56e0\u6b64\u5e26\u6765\u7684\u7ed3\u679c\u662f\u5728\u4ea7\u54c1\u8fd8\u6ca1\u6709\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u5c31\u53ef\u4ee5\u5438\u5f15\u90a3\u4e9b\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u8fd9\u5e2e\u52a9\u4e86\u524d\u671f\u7684\u4ea7\u54c1\u63a8\u5e7f\u3002\u5e76\u4e14\u8d8a\u65e9\u53c2\u4e0e\u7684\u4eba\u83b7\u5f97\u7684\u589e\u503c\u7a7a\u95f4\u4f1a\u8d8a\u5927\uff0c\u6240\u4ee5\u65e9\u671f\u53ef\u4ee5\u5feb\u901f\u6210\u957f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u7740\u7528\u6237\u91cf\u589e\u591a\uff0c\u6216\u8005\u4ea7\u54c1\u5e02\u573a\u8d8a\u6210\u719f\uff0c\u8fd9\u79cd\u589e\u503c\u7a7a\u95f4\u5c31\u9010\u6e10\u53d8\u5c0f\uff0c\u4f46\u662f\u4ea7\u54c1\u7684\u5e02\u573a\u5374\u5df2\u7ecf\u7a33\u5b9a\u4e86\uff0c\u6b64\u65f6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u6295\u8d44\u8005\u4f1a\u6162\u6162\u9000\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u4ea7\u54c1\u5f00\u53d1\u8005\u8fd8\u662f\u53ef\u4ee5\u6301\u7eed\u83b7\u5f97\u8f83\u5927\u7684\u6536\u5165")),(0,n.kt)("h3",{id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"},"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u73a9\u5bb6\u4e3b\u8981\u662f\u4ed8\u8d39\u83b7\u5f97\u4f53\u9a8c\uff0c\u5c5e\u4e8e\u6d88\u8d39\u8005\u3002\u4ee3\u5e01\u7ecf\u6d4e\u53ca\u7cfb\u7edf\u53ef\u4ee5\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u53c2\u4e0e\u5bf9\u6e38\u620f\u7684\u6295\u8d44\uff0c\u8fd8\u53ef\u4ee5\u4ece\u4e2d\u83b7\u5f97\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u73a9\u5bb6\u5728\u73a9\u4e86\u67d0\u4e2a\u6e38\u620f\u4e4b\u540e\uff0c\u89c9\u5f97\u8bbe\u8ba1\u5f88\u597d\uff0c\u5c31\u53ef\u4ee5\u8d2d\u4e70\u5176\u6210\u957f\u4ee3\u5e01\uff0c\u65e5\u540e\u7b49\u6e38\u620f\u5927\u70ed\u4e4b\u540e\u5c31\u53ef\u4ee5\u56de\u62a5\u589e\u503c\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u73a9\u5bb6\u672c\u8eab\u4e5f\u4ed8\u8d39\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u73a9\u5bb6\u662f\u4e0d\u4f1a\u8d5a\u94b1\u7684\uff0c\u8fd9\u79cd\u6a21\u5f0f\u662f\u65e9\u671f\u7684\u73a9\u5bb6\u8d5a\u53d6\u540e\u6765\u52a0\u5165\u73a9\u5bb6\u7684\u94b1\uff0c\u8fd9\u4e5f\u4f7f\u5f97\u90a3\u4e9b\u613f\u610f\u6295\u8d44\u7684\u73a9\u5bb6\u66f4\u613f\u610f\u53bb\u53d1\u73b0\u4e00\u4e9b\u597d\u7684\u6e38\u620f\uff0c\u5e76\u4e14\u662f\u5904\u4e8e\u65e9\u671f\u7684\u6e38\u620f\uff0c\u8d8a\u662f\u65e9\u671f\u5b83\u4eec\u53ef\u80fd\u8d5a\u53d6\u7684\u589e\u503c\u7a7a\u95f4\u8d8a\u5927\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u5bf9\u6574\u4e2a\u65b0\u6e38\u620f\u7684\u53d1\u5c55\u5f62\u6210\u6b63\u5411\u53cd\u9988\u3002\u8fd9\u4e9b\u672c\u8eab\u4e5f\u662f\u9a71\u52a8\u6574\u4e2a\u7cfb\u7edf\u81ea\u6211\u8fdb\u5316\u7684\u4e00\u4e2a\u903b\u8f91\uff0c\u56e0\u4e3a\u90a3\u4e9b\u4e0d\u597d\u73a9\u7684\u6e38\u620f\uff0c\u80af\u5b9a\u6295\u8d44\u7684\u4eba\u5c31\u4f1a\u66f4\u5c11\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u628a\u4e2a\u4f53\u7ecf\u6d4e\u548c\u4ee3\u5e01\u7ecf\u6d4e\u7ed3\u5408\u8d77\u6765\uff0c\u901a\u8fc7\u5b9e\u9645\u4f53\u9a8c\u6765\u83b7\u5f97\u5bf9\u4ea7\u54c1\u7684\u611f\u53d7\uff0c\u7136\u540e\u57fa\u4e8e\u611f\u53d7\u8fdb\u884c\u6295\u8d44\uff0c\u8fd9\u6709\u70b9\u50cf\u98ce\u9669\u6295\u8d44\u8fc7\u7a0b\u4e2d\u7684\u4ea7\u54c1\u5c3d\u8c03\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("h2",{id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97"},"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u5e73\u53f0\u4e3b\u8981\u63d0\u4f9b\u9a8c\u8bc1\uff0c\u53ef\u4ee5\u5728\u4e2d\u5fc3\u5316\u5e73\u53f0\u63d0\u4f9b\u7ed3\u7b97\uff0c\u6709\u5e73\u53f0\u4fe1\u7528\u4fdd\u8bc1\u5bf9\u4e8e\u7ed3\u7b97\u7269\u6743\u7684\u6620\u5c04\u3002\u5b9e\u9645\u4e0a\u7528\u6237\u5173\u5fc3\u7684\u662f\u6570\u636e\u548c\u81ea\u4e3b\u7684\u6743\u5229\uff0c\u8fd9\u79cd\u6620\u5c04\u672c\u8eab\u4e5f\u65e0\u6cd5\u901a\u8fc7\u533a\u5757\u94fe\u4fdd\u8bc1\uff0c\u56e0\u4e3a\u4e0d\u80fd\u5c06\u6574\u4e2a\u5e94\u7528\u5185\u7f6e\u4e8e\u533a\u5757\u94fe\u5185\u3002"),(0,n.kt)("h3",{id:"521-\u7ed3\u7b97\u6027\u80fd"},"5.2.1 \u7ed3\u7b97\u6027\u80fd"),(0,n.kt)("p",null,"\u600e\u6837\u4fdd\u8bc1\u5b9e\u65f6\u7ed3\u7b97\u7684\u6027\u80fd"),(0,n.kt)("p",null,"IOTA"),(0,n.kt)("h2",{id:"53-\u667a\u80fd\u5408\u7ea6"},"5.3 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("p",null,"\u600e\u6837\u8ba9\u7528\u6237\u5b9a\u4e49\u4ee3\u5e01\uff0c\u4ee5\u53ca\u4ee3\u5e01\u4ea4\u6613\u7684\u89c4\u5219"),(0,n.kt)("h2",{id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"},"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u6240\u6709\u4ee3\u5e01\u4e4b\u95f4\u90fd\u53ef\u4ee5\u8fdb\u884c\u4ea4\u6613"),(0,n.kt)("p",null,"Lykke"),(0,n.kt)("h3",{id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01"},"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01"),(0,n.kt)("h3",{id:"542-\u6d41\u52a8\u6027"},"5.4.2 \u6d41\u52a8\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u770b\u5230\uff0c\u51e0\u4e4e\u6bcf\u4e00\u79cd\u65b0\u51fa\u73b0\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u90fd\u548c\u67d0\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c3d\u7ba1\u5f88\u591a\u9879\u76ee\u7ecf\u4e0d\u8d77\u63a8\u6572\uff0c\u800c\u501f\u6b64\u9879\u76ee\u53d1\u884c\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u88ab\u4eba\u4eec\u6316\u82e6\u4e3a \u201c\u7a7a\u6c14\u5e01\u201d\uff0c\u4e5f\u5c31\u662f\u9a97\u94b1\u7684\u5de5\u5177\uff0c\u4f46\u662f\u8fd9\u4e2a\u7ecf\u6d4e\u6a21\u578b\u7684\u51fa\u53d1\u70b9\u662f\u6b63\u9762\u7684\uff0c\u5373\u6bcf\u4e00\u4e2a\u53d1\u5e01\u7684\u533a\u5757\u94fe\u9879\u76ee\uff0c\u90fd\u5c1d\u8bd5\u4ee5\u5176\u6240\u53d1\u884c\u7684\u901a\u8bc1(tioken\uff09\u4f5c\u4e3a\u6fc0\u52b1\u5de5\u5177\uff0c\u4fc3\u8fdb\u53c2\u4e0e\u5404\u65b9\u79ef\u6781\u534f\u4f5c\u3002\u53c2\u4e0e\u8005\u5bf9\u8fd9\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7684\u8d21\u732e\u8d85\u5927\uff0c\u5f97\u5230\u7684\u5e01\u8d8a\u591a\u3002\u800c\u968f\u7740\u9879\u76ee\u53d1\u5c55\u6210\u719f\uff0c\u5f97\u5230\u5e02\u573a\u8d8a\u6765\u8d8a\u591a\u7684\u8ba4\u53ef\uff0c\u5e01\u7684\u4ef7\u503c\u4e5f\u5c06\u6c34\u6da8\u8239\u9ad8\u3002\n\u8fd9\u5c31\u662f\u4e00\u4e2a\u7406\u60f3\u7684 token\u7ecf\u6d4e\u7cfb\u7d71\u3002\u6362\u6210\u73b0\u5728\u65f6\u9ae6\u7684\u672f\u8bed-\u662f\u4e00\u4e2atoken \u7ecf\u6d4e\u751f\u6001\u5708\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0c\u5982\u679c\u52a0\u5bc6\u6570\u5b9a\u800c\u548c\u88dd\u548c\u8981\u4e3a\u578b\u5730\u6bdb\u9875\u7684\u7ecf\u6ecb\u884c\u4e3a\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5176\u793e\u4f1a\u7ecf\u6d4e\u4ef7\u503c\u4f1a\u66f4\u5927\uff0c\u4e5f\u66f4\u5bb9\u6613\u88ab\u63a5\u53d7\uff0c\u5728\u7ecf\u6d4e\u8131\u865a\u5411\u5b9e\u7684\u5927\u73af\u5883\u4e0b\u3002\u66f4\u6709\u52a9\u76ca\u3002\u8fd9\u7c7b\u7ecf\u6d4e\u6d3b\u52a8\u5e76\u4e0d\u662f\u6ca1\u6709\uff0c\u6b63\u5982\u7b2c3\u7ae0\u8ba8\u8bba\u7684\u77e5\u8bc6\u8d21\u732e\u4e0e\u5206\u4eab\u7684\u4f8b\u5b50\uff0c\u7c7b\u4f3c\u5e94\u7528\u573a\u666f\u8fd8\u6709\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u4e00\u4e2a\u6839\u672c\u80fd\u529b\u662f\u80fd\u591f\u5b9e\u73b0\u5357\u6d41\u5230\u534e\u3001\u5feb\u901f\u4ea4\u6613\u3001\u5feb\u901f\u6d41\u8f6c\u3001\u767b\u5168\u53ef\u7a2e\u7684\u529f\u80fd\u3002\u6211\u4eec\u53ef\u4ee5\u8bbe\u60f3\u4e00\u4e0b\uff0c\u628a\u5404\u79cd\u6743\u76ca\u8bc1\u660e\u6bd4\u5982\u95e8\u7968\u3001\u79ef\u5206\u3001\u5408\u540c\u3001\u8bc1\u4e66\u3001\u70b9\u5361\u3001\u8bc1\u5238\u3001\u6743\u9650\u3001\u8d44\u8d28\u7b49\u5168\u90e8\u8fdb\u4e2a\n\u901a\u8bc1\u5316 \uff08tokenization \uff09\uff0c\u5728\u533a\u5757\u94fe\u4e0a\u6d41\u8f6c\uff0c\u653e\u5230\u5e02\u573a\u4e0a\u4ea4\u6613\uff0c\u8ba9\u5e02\u573a\u81ea\u52a8\u786e\u5b9a\u5176\u4ef7\u683c\uff0c\u540c\u65f6\u5728\u73b0\u5b9e\u7ecf\u6d4e\u751f\u6d3b\u4e2d\u53ef\u4ee5\u6d88\u8d39\u3001\u53ef\u4ee5\u9a8c\u8bc1\uff0c\u8fd9\u4e9b\u90fd\u662f\u7d27\u8d34\u5b9e\u4f53\u7ecf\u6d4e\u7684\u826f\u6027\u5e94\u7528\u3002\ntoken \u7ecf\u6d4e\u5177\u6709\u4e00\u4e2a\u7279\u70b9\uff0c\u5c31\u662f\u5404\u4e2a\u7ecf\u6d4e\u751f\u6001\u5708\u7684 token \u90fd\u5177\u6709\u7279\u5b9a\u7ef4\u5ea6\u4e0a\u7684\u4ef7\u503c\uff0c\u5728\u5404\u81ea\u7684\u5708\u5b50\u5185\u662f\u4e0d\u53ef\u6216\u7f3a\u7684\u3002\u4f5c\u4e3a\u4e00\u4e2a\u5f00\u653e\u7684\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5708\u5185\u6210\u5458\u7684\u8fdb\u51fa\u4f1a\u5e26\u6765 token \u7684\u6d41\u52a8\u548c\u4ea4\u6362\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u51fa\u73b0\u7c7b\u4f3c\u4e0d\u540c\u8d27\u5e01\u4e4b\u95ee\u5151\u6362\u7684\u60c5\u51b5\u3002\u5404\u79cdtoken \u53ef\u4ee5\u7528\u6cd5\u5e01\u6807\u4ef7\uff0c\u4f46\u90fd\u7981\u6b62\u6cd5\u5e01\u76f4\u6309\u66ff\u4ee3\u5404\u79cd\u5e01\u5728\u6240\u5728\u7684 token \u7ecf\u6d4e\u751f\u6001\u5708\u5185\u4f7f\u7528\u3002\n\u8fd9\u79cd\u5207\u65ad\u4e86\u6cd5\u5e01\u8fdb\u5165token \u7ecf\u6d4e\u751f\u6001\u5708\uff0c\u800c\u5c06token \u4f5c\u4e3a\u6240\u5728\u7ecf\u6d4e\u751f\u6001\u5708\u7684\u201c\u56fe\u5e01\u201d\u7684\u7ecf\u6d4e\u73b0\u8c61\u662f\u503c\u5f97\u63a2\u8ba8\u7684\u3002\n\u8bd5\u60f3\u4e00\u4e2a\u8fd9\u6837\u7684\u793e\u4f1a\uff0c\u6cd5\u5e01\u4e0d\u518d\u662f\u6240\u6709\u7ecf\u6d4e\u6d3b\u52a8\u7684\u8d27\u5e01\u5a92\u4ecb\uff0c\u793e\u4f1a\u7ecf\u6d4e\u751f\u6d3b\u88ab\u5206\u6210\u4e86\u591a\u6837\u5316\u7684\u5f88\u540d\u516c\u5f00\u653e\u7684\u5708\u5b50\uff0c\u6bcf\u4e2a\u5708\u5b50\u90fd\u6709\u81ea\u5df1\u7684\u7ecf\u6d4e\u6d3b\u52a8\uff0c\u5728\u7279\u5b9a\u8303\u56f4\u5185\uff0c \u4f7f\u7528\u767d\u5df1\u7684\u201c\u5708\u5e01\u201d\u3002\u4f46\u4e5f\u6709\u4eba\n\u5728\u8fd9\u4e9b\u7ecf\u6d4e\u6d3b\u52a8\u4e4b\u5916\uff0c\u5904\u4e8e\u5e73\u5e38\u751f\n\u6d3b\n\u5b50\uff0c\u4f7f\u7528\u7684\u662f\u6cd5\u5e01\u4f5c\u4e3a\u4ea4"),(0,n.kt)("p",null,"\u6613\u5a92\u4ecb\u3002\u6bcf\u4e2a\u4eba\u6bcf\u65f6\u6bcf\u523b\u90fd\u5728\u4e0d\u540c\u7684\u5708\u5b50\u95f4\u6d41\u52a8\uff0c\u5728\u4e0d\u540c\u7684\u5708\u5b50\u904a\n\u5faa\u900f\u660e\u7684\u89c4\u5219\uff0c\u4f7f\u7528\u4e0d\u540c\u7684 \u201c\u5708\u5e01\u201d\n\uff0c\u76f8\u5e94\u4e5f\u7559\u4e0b\u4e86\u53ef\u8ffd\u6eaf\u548c\u4e0d\u53ef\n\u7be1\u6539\u7684\u6d3b\u52a8\u8bb0\u5f55\uff08\u56fe 4.3\uff09\u3002\n\u6743\u76ca\u8bc1\u660e\n\u5408\u7f51\n\u6cdf\u4e66\n\u56fe 4.3 \u6743\u76ca\u8bc1\u660e\u901a\u8bc1\u5316\n\u8fd9\u6216\u8bb8\u662f\u4e00\u4e2a\u66f4\u52a0\u6709\u5e8f\u7684\u793e\u4f1a\u5f62\u6001\u3002\u6709\u4e86token\uff0c\u53c2\u4e0e\u8005\u3001\u9879\n\u4e14\u5efa\u8bbe\u8005\u3001\u4ea7\u54c1\uff0c\u8fd9\u6b64\u8981\u7d20\u5728\u7279\u5b9a\u7ecf\u6d4e\u751f\u6001\u570b\u5185\u6709\u673a\u5730\u6d4e\u52a8\u8d77\u6765\u3002\u8fdb\u4eba\u5712\u5b50\u7684\u4eba\u8d8a\u591a\uff0c\u751f\u5e7f\u8bdd\u52a8\u8d8a\u660c\u76db\uff0ctoken\u5c31\u8d8a\u6709\u4ef7\u8857\u3002\u5927\u708e\u793e\u4f1a\u751f\u6d3b\u4f1a\u51fa\u73b0\u767d\u7ec4\u7ec7\u7ecf\u6d4e\u751f\u6001\uff0ctoken \u53ef\u4ee5\u65b9\u4fbf\u3001\u4f4e\u6210\u672c\u5730\u5b9e\u73b0\u95dc\n\u5185\u7684\u6295\u7968\u548c\u8868\u6c7a\u3002\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u8fd8\u4ece\u672a\u6709\u4e00\u4e2a\u56fd\u5bb6\u7ecf\u5386\u8fc7\u8fd9\u6837\u4e00\u4e2a\n\u5b58\u5728\u591a\u79cd\u4ef7\u503c\u7b26\u53f7\u548c\u591a\u79cd\u4ef7\u503c\u5c3a\u5ea6\u7684\u793e\u4f1a\uff0c\u5728\u8fd9\u4e2a\u793e\u4f1a\u4e2d\u793e\u4f1a\u6cbb\u7406\u3001\u56fd\u5bb6\u7ba1\u7406\u3001\u5b8f\u89c2\u7ecf\u6d4e\u7b49\u65b9\u9762\uff0c\u90fd\u4f1a\u51fa\u73b0\u524d\u6240\u672a\u6709\u7684\u8003\u9a8c\uff0c\u5f88\u591a\u7ecf\u6d4e\u548c\u793e\u4f1a\u89c4\u5219\u90fd\u4f1a\u9010\u6e10\u53d1\u751f\u6df1\u523b\u7684\u53d8\u5316\u3002"),(0,n.kt)("h2",{id:"55-\u5e73\u53f0\u4fe1\u7528"},"5.5 \u5e73\u53f0\u4fe1\u7528"),(0,n.kt)("p",null,"\u5e73\u53f0\u4fe1\u7528\u4e3b\u8981\u662f\u6307\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u7269\u6743\u5230\u5e73\u53f0\u8d44\u4ea7\u7684\u6620\u5c04\u4fe1\u7528\u4fdd\u8bc1\uff0c\u4f8b\u5982\u7ec4\u4ef6\uff0c\u6807\u51c6\u548c\u4f5c\u54c1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6295\u8d44\u8005\u548c\u521b\u4f5c\u7528\u6237\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u7c7b\u4f3c\u516c\u7ea6\u7684\u534f\u8bae\u673a\u5236\uff0c\u4fdd\u8bc1\u6295\u8d44\u8005\u6743\u76ca\uff0c\u4ee5\u53ca\u5efa\u7acb\u4e00\u4e9b\u8282\u7ea6\u65e0\u63a7\u5236\u4eba\u7ba1\u7406\u548c\u6cd5\u5f8b\u4e4b\u95f4\u7684\uff0c\u7c7b\u4f3c\u6cd5\u5f8b\u7684\u7ea6\u675f")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u672c\u8d28\u4e0a\u53ea\u80fd\u4fdd\u8bc1\u5b58\u5165\u533a\u5757\u94fe\u7684\u6570\u636e\u7684\u4e0d\u53ef\u7be1\u6539\u6027\uff0c\u6240\u4ee5\u8fd9\u91cc\u9762\u5c31\u5b58\u5728\u6f0f\u6d1e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u5728\u533a\u5757\u94fe\u4e2d\u7684\u6570\u636e\u662f\u65e0\u6cd5\u4fdd\u8bc1\u4fe1\u7528\u7684")),(0,n.kt)("p",null,"\u800c\u8fd9\u6837\u7684\u6570\u636e\u662f\u5f88\u591a\u7684\uff0c\u800c\u4e14\u51e0\u4e4e\u4e0d\u53ef\u80fd\u7edd\u5bf9\u4fdd\u8bc1\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u4e0a\uff0c\u56e0\u4e3a\u533a\u5757\u94fe\u7684\u6838\u5fc3\u7684\u5206\u5e03\u5f0f\u5b58\u50a8\u548c\u8ba1\u7b97\uff0c\u5c31\u5bfc\u81f4\u4eba\u7c7b\u4fe1\u606f\u51e0\u4e4e\u4e0d\u53ef\u80fd\u5c06\u6240\u6709\u4fe1\u606f\u8fc1\u79fb\u81f3\u533a\u5757\u94fe\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u4e0a\u4ea4\u6613\u7684\u6570\u503c\u867d\u7136\u662f\u7edd\u5bf9\u4e0d\u53ef\u7be1\u6539\u7684\uff0c\u4f46\u662f\u5176\u6570\u503c\u5bf9\u5e94\u5b9e\u7269\u7684\u6620\u5c04\u5173\u7cfb\u5219\u662f\u9700\u8981\u7b2c\u4e09\u65b9\u4fe1\u7528\u673a\u6784\u62c5\u4fdd\u7684\uff0c\u5426\u5219\u8fd9\u4e9b\u6570\u636e\u4e5f\u662f\u53ef\u80fd\u5b58\u5728\u6b3a\u9a97\u7684\uff0c\u800c\u5b9e\u9645\u4e0a\u4f20\u7edf\u7684\u5546\u4e1a\u6b3a\u8bc8\u4e2d\uff0c\u6570\u636e\u8d26\u672c\u672c\u8eab\u4f5c\u5047\u53ef\u80fd\u53cd\u800c\u662f\u8c28\u614e\u7684\uff0c\u56e0\u4e3a\u8fd9\u90e8\u5206\u6bd4\u8f83\u5bb9\u6613\u88ab\u67e5\u51fa\u6765\uff0c\u5c24\u5176\u73b0\u5728\u672c\u8eab\u6570\u5b57\u5316\u4e5f\u6bd4\u8f83\u591a\u4e86\uff0c\u4f46\u662f\u4f5c\u5047\u7684\u5f80\u5f80\u90fd\u5728\u4e8e\u8fd9\u4e9b\u8d44\u4ea7\u6240\u6807\u6ce8\u7684\u6570\u5b57\u8ddf\u5b9e\u9645\u4ef7\u503c\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u8fd9\u5374\u662f\u6700\u96be\u7ba1\u7406\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4e4e\u5927\u90e8\u5206\u9700\u8981\u5360\u7528\u5927\u91cf\u5b58\u50a8\u7684\u6570\u636e\u5f88\u96be\u5b58\u50a8\u5728\u533a\u5757\u94fe\uff0c\u4f8b\u5982\u628a\u4f60\u7f51\u76d8\u7684\u7167\u7247\u6570\u636e\u653e\u5230\u533a\u5757\u94fe\uff0c\u4f60\u627f\u62c5\u5f97\u8d77\u8fd9\u4e2a\u6210\u672c\u5417"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\uff0c\u8ba1\u7b97\u7a0b\u5e8f\u4e5f\u662f\u4e00\u4e2a\u4fe1\u7528\u95ee\u9898\u7684\u6765\u6e90\uff0c\u5982\u679c\u4f60\u7684\u8ba1\u7b97\u4e0d\u662f\u5728\u533a\u5757\u94fe\u4e0a\u7684\uff0c\u7406\u8bba\u4e0a\u8bf4\u8fd9\u4e5f\u662f\u5bb9\u6613\u51fa\u95ee\u9898\u7684\uff0c\u4f46\u662f\u8ba1\u7b97\u653e\u5728\u533a\u5757\u94fe\u51e0\u4e4e\u4e5f\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u6bd4\u5982\u4f60\u5f97\u628a\u6240\u6709\u4ee3\u7801\u8f6c\u5316\u6587\u533a\u5757\u94fe\u865a\u62df\u673a\u7684\u4ee3\u7801\uff0c\u53e6\u5916\u662f\u9762\u4e34\u6e90\u4ee3\u7801\u5f00\u6e90\u7684\u95ee\u9898\uff0c\u4ee5\u53ca\u540c\u6837\u7684\u5927\u89c4\u6a21\u8ba1\u7b97\u6027\u80fd\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7edd\u5bf9\u4fe1\u7528\u5b89\u5168\u7684\u533a\u5757\u94fe\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u903b\u8f91\u8ba1\u7b97\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u4ea7\u539f\u751f\u5c31\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u6240\u4ee5\u4e0d\u6d89\u53ca\u4efb\u4f55\u94fe\u5916\u7684\u5173\u8054\u548c\u64cd\u4f5c")),(0,n.kt)("p",null,"RealityIS\u5e73\u53f0\u4e2d\u7684\u6240\u6709\u8d44\u6e90\u539f\u751f\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u53ea\u8981\u4fdd\u8bc1\u597d\u533a\u5757\u94fe\u4fe1\u606f\u5230\u6570\u5b57\u8d44\u4ea7\u7684\u6620\u5c04\uff0c\u5c31\u80fd\u66f4\u5b89\u5168\u3002"),(0,n.kt)("h3",{id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae"},"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae"),(0,n.kt)("h3",{id:"552-\u4ee3\u5e01\u534f\u8bae"},"5.5.2 \u4ee3\u5e01\u534f\u8bae"),(0,n.kt)("h2",{id:"56-\u73b0\u5b9e\u5e94\u7528"},"5.6 \u73b0\u5b9e\u5e94\u7528"),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u62df\u548c\u8ddf\u8e2a\u771f\u5b9e\u4e16\u754c\u7684\u67d0\u4e9b\u89c4\u5f8b\uff0c\u6765\u89e3\u51b3\u73b0\u5b9e\u95ee\u9898"),(0,n.kt)("h2",{id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"},"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"),(0,n.kt)("h3",{id:"571-\u73a9\u5bb6\u9053\u5fb7"},"5.7.1 \u73a9\u5bb6\u9053\u5fb7"),(0,n.kt)("p",null,"\u53d1\u884c\u4ee3\u5e01\uff0c\u5982\u679c\u957f\u65f6\u95f4\u6ca1\u6709\u88ab\u4e3e\u62a5\u6709\u4e0d\u826f\u793e\u533a\u884c\u4e3a\u7684\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\uff0c\u901a\u8fc7\u5229\u76ca\u6765\u4fc3\u8fdb\u793e\u4f1a\u7684\u98ce\u6c14\u3002"),(0,n.kt)("h3",{id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1"},"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1"),(0,n.kt)("h2",{id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"},"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"),(0,n.kt)("h3",{id:"581-\u793e\u4ea4\u5206\u4eab"},"5.8.1 \u793e\u4ea4\u5206\u4eab"),(0,n.kt)("p",null,"\u7531\u4e8e\u793e\u4ea4\u5206\u4eab\u662f\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u53ef\u4ee5\u8ba9\u670b\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\u8f6c\u6362\u4e3aRealityCoin\u5956\u52b1"),(0,n.kt)("h3",{id:"582-\u53c2\u4e0e\u5185\u6d4b"},"5.8.2 \u53c2\u4e0e\u5185\u6d4b"),(0,n.kt)("p",null,"\u63d0\u4ea4bug\u6216\u8005\u5efa\u8bae\uff0c\u83b7\u5f97\u5f00\u53d1\u5546\u63a5\u53d7\u7684\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\u5956\u52b1\u3002"),(0,n.kt)("h2",{id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"},"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u4e2d\uff0c\u6e38\u620f\u4ee3\u5e01\u672c\u8eab\u4e0d\u4f1a\u5f71\u54cd\u5230\u6e38\u620f\u672c\u8eab\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u4ee3\u5e01\u5f62\u6210\u4e00\u79cd\u66f4\u5927\u8303\u56f4\u7684\u4e1c\u897f\uff0c\u4ed6\u53ef\u80fd\u5bf9\u6e38\u620f\u672c\u8eab\u9020\u6210\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u4f8b\u5982\u4ee3\u5e01\u53ef\u80fd\u4f1a\u8d2c\u503c\u6216\u8005\u5347\u503c\uff0c\u8fd9\u5728\u4f20\u7edf\u6e38\u620f\u5185\u662f\u4e0d\u4f1a\u53d1\u751f\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u65f6\u5019\u4ee3\u5e01\u7ecf\u6d4e\u7684\u4e00\u4e9b\u6839\u672c\u6027\u7f3a\u9677\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4e0d\u7a33"),(0,n.kt)("li",{parentName:"ul"},"\u516c\u4fe1\u529b\u4e0d\u5f3a"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u63a5\u53d7\u8303\u56f4\u6709\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u4ea7\u751f\u8f83\u5927\u7684\u8d1f\u5916\u90e8\u6027")),(0,n.kt)("p",null,"\u5b83\u5f88\u96be\u901a\u8fc7\u516c\u4f17\u548c\u5e02\u573a\u7684\u68c0\u9a8c\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u4e0d\u7ba1\u91c7\u7528\u7684\u6280\u672f\u6709\u591a\u5148\u8fdb\uff0c\u91c7\u7528\u8fd9\u7c7b\u52a0\u5bc6\u6570\u5b57\u5e01\u4f5c\u4e3a\u201c\u8d27\u5e01\u201d\uff0c\u4ecd\u662f\u8d70\u56de\u5934\u8def\uff0c\u662f\u56de\u5f52\u4e00\u79cd\u843d\u540e\u7684\u8d27\u5e01\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u4e9b\u7f3a\u70b9\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u50cf\u4f20\u7edf\u6e38\u620f\u4e00\u6837\uff0c\u5c06\u8d27\u5e01\u5c5e\u6027\u63a7\u5236\u5728\u6e38\u620f\u6216\u8005\u5e73\u53f0\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u4e25\u683c\u63a7\u5236\u6295\u673a\u884c\u4e3a\u5e26\u6765\u7684\u5f71\u54cd")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7406\u5ff5\u5b9e\u9645\u4e0a\u4f7f\u6211\u4eec\u5728\u4f7f\u7528\u4ee5\u533a\u5757\u94fe\u4e3a\u5f88\u7684\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u5b57\u7ecf\u6d4e\u65b9\u9762\u63d0\u51fa\u4e24\u4e2a\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u4e2d\u5fc3\u5316\uff0c\u662f\u7528\u6765\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\u548c\u4e2a\u4eba\u9690\u5f0f\uff0c\u662f\u7528\u6237\u7684\u5ba2\u89c2\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u8d27\u5e01\u7684\u884c\u4e3a\uff0c\u66f4\u591a\u662f\u5c11\u6570\u6295\u673a\u8005\u7684\u9700\u6c42\uff0c\u800c\u4e0d\u662f\u5e7f\u5927\u7528\u6237\u7684\u9700\u6c42\uff0c\u5f53\u7136\u4ee3\u5e01\u7ecf\u6d4e\u6709\u4e00\u5b9a\u7684\u4f18\u52bf\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u8fd9\u90e8\u5206\u63a7\u5236\u5728RealityIS\u5e73\u53f0\u5185\u90e8\uff0c\u800c\u4e0d\u4f1a\u50cf\u5176\u4ed6\u6570\u5b57\u8d27\u5e01\u4e00\u6837\u76ee\u6807\u4e3a\u901a\u7528\u7684\u4ef7\u503c\u4ea4\u6362\u65b9\u5f0f\u3002")),(0,n.kt)("h2",{id:"510-\u67b6\u6784\u7f3a\u9677"},"5.10 \u67b6\u6784\u7f3a\u9677"),(0,n.kt)("h3",{id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"},"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u516c\u94fe\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u548c\u8ba1\u7b97\u5b89\u5168\uff0c\u5bf9\u8282\u70b9\u7ed9\u4e88\u4e86\u8d85\u989d\u7684\u6fc0\u52b1\uff0c\u8fd9\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6316\u77ff\u4ea7\u751f\u7684\u539f\u59cb\u4ee3\u5e01\uff0c\u5e76\u4e14\u8fd9\u662f\u4ee3\u5e01\u7684\u539f\u751f\u548c\u552f\u4e00\u7684\u53d1\u884c\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u7684\u624b\u7eed\u8d39")),(0,n.kt)("p",null,"\u7531\u4e8e\u8282\u70b9\u6570\u91cf\u5e9e\u5927\uff0c\u4ee5\u53ca\u8282\u70b9\u9700\u8981\u6301\u7eed\u7ef4\u6301\u4e0b\u53bb\uff0c\u56e0\u6b64\u533a\u5757\u94fe\u8282\u70b9\u7684\u6210\u672c\u662f\u6781\u5ea6\u9ad8\u6602\u7684\uff0c\u5b83\u8fdc\u8fdc\u8d85\u51fa\u4e86\u8ba1\u7b97\u8d44\u6e90\u672c\u8eab\u4f5c\u4e3a\u4e91\u8ba1\u7b97\u57fa\u7840\u8bbe\u65bd\u7684\u6210\u672c\uff0c\u5b83\u8fd8\u5728\u53e6\u5916\u4e24\u4e2a\u5c42\u9762\u63a7\u5236\u7740\u8fd9\u79cd\u9ad8\u6602\u7684\u6fc0\u52b1\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u662f\u9700\u8981\u6c38\u4e45\u7ef4\u6301\u4e0b\u53bb\u7684\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u4e2a\u6301\u7eed\u9ad8\u6602\u6210\u672c")),(0,n.kt)("p",null,"\u5e76\u4e14\uff0c\u8282\u70b9\u867d\u7136\u8d5a\u53d6\u4e86\u5927\u91cf\u7684\u6fc0\u52b1\uff0c\u4f46\u662f\u5b83\u4eec\u786e\u5b9e\u6574\u4e2a\u4f53\u7cfb\u91cc\u6700\u6ca1\u6709\u521b\u9020\u6027\u7684\u52b3\u52a8\u4ed8\u51fa\uff0c\u76f8\u5bf9\u4e8e\u90a3\u4e9b\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ef4\u62a4\u5e73\u53f0\u8fed\u4ee3\u5f00\u53d1\u5347\u7ea7\u7684\u5f00\u53d1\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u90a3\u4e9b\u771f\u6b63\u521b\u9020\u52b3\u52a8\u4ef7\u503c\u7684\u751f\u6210\u8005")),(0,n.kt)("p",null,"\u8fd9\u90fd\u662f\u65e2\u4e0d\u79d1\u5b66\u7684\uff0c\u6781\u4e0d\u5408\u7406\u7684\uff0c\u90a3\u4e9b\u4f20\u7edf\u884c\u4e1a\u771f\u6b63\u4ece\u4e8b\u521b\u9020\u52b3\u52a8\u548c\u4ef7\u503c\u751f\u6210\u7684\u4ece\u4e1a\u8005\uff0c\u5b83\u4eec\u672c\u8d28\u4e0a\u6ca1\u6709\u4ece\u533a\u5757\u94fe\u83b7\u5f97\u592a\u591a\u597d\u5904\uff08\u9664\u4e86\u54ea\u4e9b\u81ea\u5e26\u64cd\u4f5c\u5c5e\u6027\u7684NFT\u4e4b\u7c7b\u7684\u521b\u4f5c\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u771f\u6b63\u751f\u6210\u5546\u54c1\u7684\u751f\u6210\u8005\uff0cTA\u7684\u7269\u54c1\u4ea4\u6613\u88ab\u8feb\u4f7f\u7528\u6570\u5b57\u8d27\u5e01\u8fdb\u884c\u7ed3\u7b97\uff0c\u8fd9\u5c31\u8feb\u4f7f\u4ed6\u4eec\u53bb\u8d2d\u4e70\u533a\u5757\u94fe\u539f\u751f\u6570\u5b57\u8d27\u5e01\uff0c\u8fd9\u5728\u5bfc\u81f4\u6570\u5b57\u8d27\u5e01\u6d41\u901a\u7684\u540c\u65f6\uff0c\u8feb\u4f7f\u8fd9\u4e9b\u4eba\u9762\u4e34\u7740\u6570\u5b57\u8d27\u5e01\u7684\u98ce\u9669\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u4ed6\u4eec\u7684\u8d2d\u4e70\u6570\u5b57\u8d27\u5e01\u7684\u672c\u8eab\u5c31\u627f\u62c5\u4e86\u65e9\u671f\u4ee5\u53ca\u6570\u5b57\u8d27\u5e01\u589e\u503c\u9020\u6210\u7684\u6ea2\u4ef7\u6210\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\u662f\uff0c\u7531\u4e8e\u8fd9\u79cd\u6ea2\u4ef7\u7684\u98ce\u9669\uff0c\u4ed6\u4eec\u638c\u63e1\u7684\u6570\u5b57\u8d27\u5e01\u9762\u4e34\u7740\u8d2c\u503c\u7684\u98ce\u9669")),(0,n.kt)("p",null,"\u800c\u8fd9\u79cd\u98ce\u9669\u51e0\u4e4e\u662f\u7edd\u5bf9\u5b58\u5728\u7684\uff0c\u56e0\u4e3a\u6570\u5b57\u8d27\u5e01\u603b\u4f53\u4e0a\u5e76\u4e0d\u662f\u8ddf\u7ecf\u6d4e\u751f\u6210\u6302\u94a9\u7684\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u7684\u989d\u5ea6\u5f88\u4f4e\uff0c\u4f46\u662f\u5b83\u4eec\u51e0\u4e4e\u5360\u636e\u4e00\u6837\u7684\u8ba1\u7b97\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u5b58\u5728\u5927\u91cf\u7684\u6295\u673a\u884c\u4e3a")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u6295\u673a\u884c\u4e3a\u4e0e\u771f\u5b9e\u7ecf\u6d4e\u884c\u4e3a\u6df7\u5728\u4e00\u8d77\uff0c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u751f\u6001\u6781\u4e0d\u5408\u7406\uff0c\u5bfc\u81f4\u6781\u4e0d\u7a33\u5b9a\uff0c\u98ce\u9669\u6781\u5927\u3002"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u5728\u5c06\u533a\u5757\u94fe\u7684\u597d\u5904\uff0c\u5f88\u5c11\u6709\u4eba\u4f1a\u53bb\u63ed\u793a\u8fd9\u4e9b\u98ce\u9669\uff0c\u4e5f\u5f88\u5c11\u6709\u53c2\u4e0e\u8005\u771f\u6b63\u4e86\u89e3\u8fd9\u4e9b\u98ce\u9669\u3002"),(0,n.kt)("h3",{id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"},"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"),(0,n.kt)("p",null,"\u5f53\u7136\u5bf9\u4e8e\u77ff\u5de5\u548cICO\u7684\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u56e0\u4e3a\u4ed6\u4eec\u7684\u6295\u5165\u662f\u53ef\u80fd\u6ca1\u6709\u4efb\u4f55\u56de\u62a5\u7684\uff0c\u56e0\u6b64\u65e9\u671f\u9762\u4e34\u7740\u6781\u5927\u7684\u98ce\u9669\uff0c\u80af\u5b9a\u662f\u9700\u8981\u6bd4\u6b63\u5e38\u66f4\u5927\u4e00\u4e9b\u7684\u7ecf\u6d4e\u56de\u62a5\u4f5c\u4e3a\u4ee3\u4ef7\uff0c\u5426\u5219\u4ed6\u4eec\u5c31\u4e0d\u4f1a\u5192\u8fd9\u4e2a\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u6fc0\u52b1\u7c7b\u4f3c\u521b\u4e1a\u7684\u673a\u5236\u3002\u4ed6\u4eec\u7684\u65e9\u671f\u884c\u4e3a\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u7c7b\u4f3c\u53c2\u4e0e\u521b\u4e1a\u3002"),(0,n.kt)("h1",{id:"6-applications"},"6. Applications"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u4ea7\u54c1\u8981\u601d\u80033D\u5e26\u6765\u7684\u4ef7\u503c\u589e\u76ca\uff0c\u800c\u4e0d\u662f\u7b80\u5355\u628a\u4e1c\u897f\u642c\u52303D\u6216XR"),(0,n.kt)("p",null,"1\u3001\u751f\u65e5\u5899"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env1",src:l(595).Z,width:"1744",height:"1034"})),(0,n.kt)("p",null,"\u597d\u53cbA\u7528AR\u624b\u673a\u6216\u773c\u955c\u627e\u4e00\u5757\u5899\u9762\u8fdb\u884c\u521b\u4f5c\uff0c\u5176\u4e2d\u53ef\u4ee5\u628a\u80cc\u666f\u56fe\u8272\uff0c\u7eaf\u8272\u6216\u67d0\u79cdpattern\uff0c\u7136\u540e\u5728\u5899\u4e0a\u8bbe\u7f6e\u88c5\u9970\u548c\u5b9a\u5236\u795d\u798f\uff0c\u5176\u4e2d\u67d0\u4e9b\u5143\u7d20\u5305\u542b\u4e00\u4e9b\u4ea4\u4e92\uff1b\u6700\u540e\u5c06\u7ed3\u679c\u53d1\u7ed9\u597d\u53cbB\uff0c\u597d\u53cbB\u627e\u4e00\u4e2a\u7acb\u9762\u6216\u8005\u7eaf\u865a\u62df\u7684\u65b9\u5f0f\u5c31\u53ef\u4ee53D\u67e5\u770b\uff0c\u5982\u679c\u662f\u7acb\u9762\uff0c\u4e5f\u6839\u636e\u8bed\u4e49\u8bc6\u522b\uff0c\u5c06\u80cc\u666f\u5899\u6362\u8272"),(0,n.kt)("p",null,"\u53ef\u4ee5\u70b9\u51fb\u4ea4\u4e92\u6709\u751f\u65e5\u76f8\u5173\u7684\u6d41\u7a0b\uff0c\u4f8b\u5982\u70b9\u8721\u70db\uff0c\u51fa\u73b0\u7279\u6548\uff0c\u5531\u751f\u65e5\u6b4c\uff0c\u73b0\u5b9e\u7279\u5b9a\u7684\u4fe1\u606f\uff0c\u597d\u53cb\u4e00\u8d77\u56f4\u89c2\u7b49\u7b49"),(0,n.kt)("p",null,"2\u3001\u4e8c\u7ef4\u5899\u9762\u6d82\u9e26\u7c7b\u521b\u4f5c"),(0,n.kt)("p",null,"\u968f\u4fbf\u627e\u4e00\u5757\u7a7a\u5730\u5730\u9762\uff0c\u4ece\u5730\u9762\u62c9\u4e00\u4e2a\u5782\u76f4\u9762\uff0c\u5c31\u53ef\u4ee5\u8fdb\u884c\u5899\u9762\u827a\u672f\u521b\u4f5c"),(0,n.kt)("p",null,"\u6709\u4ea4\u4e92\u7684\u6d82\u9e26"),(0,n.kt)("p",null,"3\u30013D\u8131\u53e3\u79c0"),(0,n.kt)("p",null,"4\uff0c\u79fb\u52a8\u7684\u7075\u611f\u6c1b\u56f4"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env",src:l(7812).Z,width:"3344",height:"1114"})),(0,n.kt)("p",null),"5, \u505a\u4e00\u4e2a\u89e3\u5bc6\u6e38\u620f",(0,n.kt)("p",null,"![00 0O R]","(resources/00 0O R.gif)"),(0,n.kt)("p",null,"\u53ef\u80fd\u5305\u542b\u79fb\u52a8\u62fc\u56fe\uff0c\u5305\u542b\u62e8\u4e00\u5b9a\u7684\u987a\u5e8f\u70b9\u4eae\u6309\u94ae\uff0c\u6240\u4ee5\u9700\u8981\u5305\u542b\u4e00\u4e9b\u7279\u5b9a\u73a9\u6cd5\u7c7b\u578b\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"6\u3001\u77e5\u8bc6\u8bb2\u89e3\u7c7b\u4f1a\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6a21\u578b\uff0c\u6709\u4e9b\u4ea4\u4e92\u70b9\u51fb\u5c55\u793a\uff0c\u666e\u901a\u4eba\u53ef\u4ee5\u5236\u4f5c\uff0c\u4e0d\u53ea\u662f\u5b98\u65b9\u5236\u4f5c\u5c11\u91cf"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u623f\u95f4"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u7684\u865a\u62df\u804a\u5929\u7c7b\u573a\u666f\uff0c\u4e00\u822c\u90fd\u662f\u5b98\u65b9\u63d0\u4f9b\u7684\u5c11\u6570\u56fa\u5b9a\u573a\u666f\uff0c\u6216\u8005\u5141\u8bb8\u4e00\u5b9a\u7684\u5b9a\u5236\u6027\uff0c\u4f46\u662f\u901a\u5e38\u5b9a\u5236\u80fd\u529b\u6709\u9650\uff0c\u6bd4\u5982\u51e0\u4f55\u662f\u56fa\u5b9a\u7684\uff0c\u53ea\u5141\u8bb8\u6539\u6750\u8d28\uff0c\u6216\u8005\u53ea\u5141\u8bb8\u589e\u51cf\u90e8\u4ef6\uff0c\u6216\u8005\u79fb\u52a8\u4f4d\u7f6e"),(0,n.kt)("p",null,"\u5728RealityWorld \u91cc\u7528\u6237\u4e5f\u53ef\u4ee5\u521b\u5efa\u66f4\u52a0\u4e30\u5bcc\u591a\u6837\u7684\u804a\u5929\u73af\u5883\uff0c\u7136\u540e\u9080\u8bf7\u7528\u6237\u8fdb\u6765\u804a\u5929"),(0,n.kt)("p",null,"8\u3001\u4e2a\u4eba\u6536\u85cf\u9986"),(0,n.kt)("p",null,"\u6709\u4e00\u4e2a\u81ea\u5df1\u7684\u623f\u95f4\u6216\u8005\u7279\u5b9a\u7684\u573a\u666f\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u8bbe\u8ba1\u7684\uff0c\u6709\u81ea\u5df1\u7684\u6536\u85cf\uff0c\u53ef\u4ee5\u52a0\u5165\u4e00\u4e9b\u81ea\u5df1\u7684\u73a9\u6cd5\uff0c\u597d\u53cb\u53c2\u89c2\u53ef\u4ee5\u8d60\u9001Creation, Part"),(0,n.kt)("p",null,"9\u3001\u53bb\u4e00\u4e2a\u6d6a\u6f2b\u7684Creation \u4e2d\u7ea6\u4f1a"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&session=sessionid"},"creation.id/=qwe&session=sessionid")),(0,n.kt)("p",null,"10, \u57fa\u4e8e\u73b0\u5b9e\u7684\u521b\u4f5c"),(0,n.kt)("video",{src:"resources/2022-04-04 08.55.06.mov"}),(0,n.kt)("p",null,"\u73b0\u5b9e\u63d0\u4f9b\u7c97\u7565\u7684\u51e0\u4f55\u4e0e\u53c2\u8003\u6750\u8d28\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("p",null,"11\u3001"),(0,n.kt)("img",{src:"resources/APPLE ARCADE.jpg",alt:"APPLE ARCADE"}),(0,n.kt)("p",null,"12\u3001\u8fde\u7eed\u5267\uff0c\u6574\u4e2a\u5f00\u53d1\u5468\u671f\u5747\u53ef\u53d1\u5e03"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5173\u5361\u6216\u8005\u6545\u4e8b\u4e00\u70b9\u4e00\u70b9\u66f4\u65b0\uff0c\u6bcf\u6b21\u73a9\u5bb6\u73a9\u4e00\u5c0f\u6bb5\uff0c\u50cf\u8fde\u7eed\u5267\u4e00\u6837\uff0c\u751a\u81f3\u4e16\u754c\u90fd\u662f\u4e00\u70b9\u4e00\u70b9\u6784\u5efa\uff1b\u6216\u8005\u6709\u70b9\u89c2\u770b\u521b\u4f5c\u8fc7\u7a0b\uff0c\u8fc7\u53bb\u6574\u4e2a\u6e38\u620f\u9700\u8981\u4e00\u6b21\u6027\u505a\u5b8c\u518d\u8d70\u53d1\u5e03\u6d41\u7a0b\uff0c\u8fd9\u79cd\u53ef\u4ee5\u5b9e\u65f6\u628a\u4e2d\u95f4\u521b\u4f5c\u8fc7\u7a0b\u5171\u4eab\u51fa\u6765\uff0c\u53ef\u4ee5\u53cd\u9988\uff0c\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u4e2d\u95f4\u4efb\u4f55\u72b6\u6001\u90fd\u53ef\u4ee5\u53d1\u5e03\uff0c\u800c\u4e0d\u662f\u8981\u7559\u5230\u6700\u540e\u53ea\u505a\u5b8c\u4e86\u518d\u53bb\u5904\u7406\u53d1\u5e03\u76f8\u5173\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e9b\u4e8b\u60c5\u5bfc\u81f4\u4e0d\u80fd\u63d0\u524d\u53d1\u5e03\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u4e00\u79cd\u6d41\u7a0b\u4e0a\u7684\u521b\u65b0\uff0c\u5e26\u6765\u5168\u65b0\u7684\u6a21\u5f0f"),(0,n.kt)("p",null,"13\u3001story telling"),(0,n.kt)("p",null,"![Pasted Graphic]","(resources/Pasted Graphic.jpg)"),(0,n.kt)("p",null,"*Like a well-executed joke, the pleasure is in the experience more than it is in the retelling. You have to be there."),(0,n.kt)("p",null,"Super Brothers \u5f00\u521b\u4e86\u4e00\u79cd\u53d9\u4e8b+\u4ea4\u4e92\u7684\u975e\u5e38\u4f18\u79c0\u7684\u4f53\u9a8c\uff0c\u76f8\u5bf9\u4e8e\u5355\u7eaf\u6e38\u620f\uff0c\u4ed6\u7684\u6545\u4e8b\u7ebf\u8ba9\u6574\u4e2a\u4e16\u754c\u89c2\u5448\u73b0\u66f4\u5b8c\u6574\uff0c\u76f8\u5bf9\u4e8e\u7535\u5f71\uff0c\u4ed6\u7684\u4ea4\u4e92\u53ef\u4ee5\u8ba9\u6545\u4e8b\u7684\u4f53\u9a8c\u66f4\u771f\u5b9e"),(0,n.kt)("p",null,"\u521b\u4f5c\u90e8\u5206\u6d89\u53ca\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u5747\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("p",null,"\u6545\u4e8b\u7684\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73af\u5883\uff0c\u7269\u7406\u73af\u5883\u901a\u5e38\u662f\u9759\u6001\u7684\uff0c\u4f46\u4e00\u4e9b\u91cd\u8981\u7269\u54c1\u901a\u5e38\u662f\u52a8\u6001\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4fe1\u606f\uff0c\u9700\u8981\u63a2\u7d22\u4e0d\u540c\u7684\u5730\u65b9\u4e86\u89e3\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u4e92\uff0c\u5bf9\u4fe1\u606f\u7684\u63a2\u7d22\u662f\u4e00\u79cd\u4ea4\u4e92\uff0c\u5176\u4ed6\u6bd4\u5982\u89e3\u5bc6\uff0c\u5f00\u52a8\u673a\u5173\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u4e16\u754c\u72b6\u6001")),(0,n.kt)("p",null,"14\u3001\u4e92\u52a8\u5c0f\u8bf4/\u6545\u4e8b"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u5c0f\u8bf4\u7684\u57fa\u7840\u4e0a\uff0c2D+3D\uff0c\u5148\u6587\u5b57\u4ecb\u7ecd\u57fa\u672c\u5267\u60c5\u548c\u80cc\u666f\uff0c\u7136\u540e\u8fdb\u53bb3D\u573a\u666f\uff0c\u5177\u6709\u6c89\u6d78\u611f\uff0c\u800c\u4e14\u56e0\u4e3a\u524d\u9762\u7684\u6587\u5b57\u5267\u60c5\uff0c\u5bf9\u573a\u666f\u7684\u63a2\u7d22\u4f1a\u66f4\u878d\u5165\uff0c\u7136\u540e\u6761\u4ef6\u662f\u9700\u8981\u57283D\u573a\u666f\u4e2d\u5b8c\u6210\u4e00\u5b9a\u7684\u4efb\u52a1\u624d\u80fd\u8fdb\u5165\u4e0b\u4e00\u7ae0\uff0c\u628a\u6e38\u620f\u7684\u673a\u5236\u878d\u5165\u8fdb\u6765\uff0c\u6e38\u620f\u7ed3\u5408\u6587\u5b57\u5267\u60c5\uff0c\u5f25\u8865\u4e86\u7eaf\u6e38\u620f\u63a2\u7d22\u9700\u8981\u8bdd\u8d39\u5927\u91cf\u65f6\u95f4\uff0c\u5e76\u4e14\u5267\u60c5\u6bd4\u8f83\u96f6\u788e\u7684\u611f\u89c9"),(0,n.kt)("h1",{id:"7-\u6838\u5fc3\u53c2\u8003\u67b6\u6784"},"7. \u6838\u5fc3\u53c2\u8003\u67b6\u6784"),(0,n.kt)("p",null,"\u672c\u6587\u4ecb\u7ecd\u5bf9Reality World\u6709\u5f71\u54cd\u6216\u8005\u53ef\u4ee5\u53c2\u8003\u7684\u6280\u672f\u67b6\u6784\uff0c\u901a\u8fc7\u5206\u6790\u4ed6\u4eec\u7684\u6280\u672f\u539f\u7406\uff0c\u8bc6\u522b\u5176\u80cc\u540e\u7684\u6280\u672f\u67b6\u6784\uff0c\u4ee5\u53ca\u5176\u7279\u5b9a\u6280\u672f\u67b6\u6784\u8574\u85cf\u7740\u7684\u5bf9\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u751f\u6001\u7684\u5f71\u54cd\u3002\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u6280\u672f\u65b9\u6848\uff0c\u4e5f\u4f1a\u5206\u6790\u5176\u4f18\u7f3a\u70b9\uff0c\u4ee5\u53caReality World\u5e94\u8be5\u600e\u6837\u5438\u6536\u8fd9\u4e9b\u4f18\u70b9\uff0c\u6700\u91cd\u8981\u7684\uff0c\u6211\u4eec\u5e94\u8be5\u4ece\u8fd9\u4e9b\u67b6\u6784\u4e2d\u5f97\u5230\u4ec0\u4e48\u66f4\u6df1\u5c42\u6b21\u7684\u3001\u6709\u4ef7\u503c\u7684\u4fe1\u606f\u4ee5\u5e2e\u52a9Reality World\u6784\u5efa\u66f4\u597d\u7684\u6280\u672f\u67b6\u6784\u548c\u6280\u672f\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u53c2\u8003\u67b6\u6784\u6309\u5982\u4e0b\u7684\u683c\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u65b0\u601d\u60f3"),"\uff1a\u76f8\u5bf9\u4f20\u7edf\u6280\u672f\u65b9\u6848\uff0c\u8be5\u6280\u672f\u65b9\u6848\u8be5\u6765\u4ec0\u4e48\u65b0\u601d\u60f3\u6216\u65b0\u601d\u8def"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6280\u672f\u65b9\u6848"),"\uff1a\u5bf9\u76f8\u5173\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\u8fdb\u884c\u8868\u8ff0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e0d\u8db3\u53ca\u539f\u56e0"),"\uff1a\u5728Reality World\u7684\u65b9\u5411\u4e0a\uff0c\u8be5\u6280\u672f\u65b9\u6848\u6ca1\u6709\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u6216\u8005\u65e0\u6cd5\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff1b\u5176\u4e2d\u7684\u539f\u56e0\u662f\u56e0\u4e3a\u6280\u672f\u65b9\u6848\u7684\u4e0d\u8db3\uff0c\u8fd8\u662f\u4ea7\u54c1\u5b9a\u4f4d\u548c\u65b9\u5411\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u6bd4"),"\uff1aReality World\u4e0e\u5176\u5bf9\u6bd4\u5b58\u5728\u54ea\u4e9b\u5dee\u5f02\uff0c\u6216\u8005\u8bf4Reality World\u901a\u8fc7\u4ec0\u4e48\u6837\u7684\u6280\u672f\u65b9\u6848\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898")),(0,n.kt)("h2",{id:"71-\u6570\u636e\u683c\u5f0f"},"7.1 \u6570\u636e\u683c\u5f0f"),(0,n.kt)("h3",{id:"711-usd"},"7.1.1 USD"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"piper-banner",src:l(7216).Z,width:"2540",height:"1120"})),(0,n.kt)("p",null,"Universal Scene Description (USD) is the first publicly available software that addresses the need to robustly and scalably interchange and augment arbitrary 3D scenes that may be** ",(0,n.kt)("strong",{parentName:"p"},"composed")," **from many elemental assets."),(0,n.kt)("h4",{id:"7111-\u65b0\u601d\u60f3"},"7.1.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u534f\u4f5c"),"\uff1aUSD\u662f\u4e00\u4e2a\u4e3a\u4e86\u5927\u89c4\u6a21\u534f\u4f5c\u7684\u9ad8\u6027\u80fd\u53ef\u6269\u5c55\u8f6f\u4ef6\u5e73\u53f0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4ea4\u6362"),"\uff1aUSD\u63d0\u4f9b\u4e86\u5728\u591a\u4e2aDCC\u5de5\u5177\u4e4b\u95f4\u8fdb\u884c\u4ea4\u6362\u7684\u683c\u5f0f\uff0c\u8fd9\u901a\u8fc7\u5185\u7f6e\u7684\u4e00\u4e9bschema\u5b9e\u73b0\uff0c\u5305\u62ecgeometry\uff0cshading\uff0clighting\u548cphysics\u7b49"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5408\u6210"),"\uff1aUSD\u72ec\u7279\u7684\u5408\u6210\u7279\u6027\u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u6536\u76ca\uff0c\u6bd4\u5982\u80fd\u591f\u5c06\u4e30\u5bcc\u591a\u6837\u7684individual asset\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u8fd9\u5141\u8bb8\u591a\u4eba\u540c\u6b65\u534f\u4f5c\uff08\u800c\u4e0d\u4f1a\u5bfc\u81f4\u51b2\u7a81\uff09")),(0,n.kt)("p",null,"USD\u7684\u5408\u6210\u5f15\u64ce\u5bf9\u4efb\u4f55\u7279\u5b9a\u7684domain\u662f\u65e0\u611f\u77e5\u7684\uff08agnostic\uff09\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u88ab\u6269\u5c55\u6765\u7f16\u7801\uff08encode\uff09\u4e0e\u5408\u6210\u5176\u4ed6domain\u3002"),(0,n.kt)("h4",{id:"7112-\u6280\u672f\u65b9\u6848"},"7.1.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Schema")),(0,n.kt)("p",null,"Schema\u7528\u4e8e\u4eceUsdObject\u7f16\u8f91\u3001\u67e5\u8be2\u548c\u5b9a\u4e49\u7ed3\u6784\u5316\u7684\u6570\u636e\uff08structured data\uff09\uff0c\u5927\u90e8\u5206\u6838\u5fc3\u5e93\u4e2d\u7684Schema\u662fprim schemas\uff0c\u8fd9\u53c8\u5206\u4e3a\u4e24\u7c7b\uff1a1\uff09IsA Schemas\uff1b2\uff09API Schemas\uff1b3\uff09\u53e6\u5916\u8fd8\u6709\u4e00\u4e9bSchema\u79f0\u4e3aproperty schemas\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2aprim\u53ef\u4ee5\u8ba2\u9605\u591a\u4e2aAPI Schema\uff0c\u4f46\u662f\u53ea\u80fd\u8ba2\u9605\u4e00\u4e2aIsA Schema\uff0cUSD\u63d0\u4f9b\u4e86\u5de5\u5177\u7528\u4e8e\u751f\u6210Schema\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"IsA Schema")),(0,n.kt)("p",null,"IsA Schema\u7528\u4e8e\u5b9a\u4e49\u4e00\u4e2aprim\u5728Stage\u4e2d\u7684\u89d2\u8272\u6216\u8005\u76ee\u7684\uff0c\u5b83\u7ee7\u627f\u81eaUsdTyped\u7c7b\uff0c\u5e76\u53ef\u4ee5\u6307\u5b9atypeName metadata\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"UsdPrim::IsA()\n")),(0,n.kt)("p",null,"IsA Schema\u53ef\u4ee5\u662f\u5b9e\u7684\u6216\u8005\u865a\u7684\uff0c\u4f8b\u5982UsdGeomImageeable\u662f\u865a\u7684IsA Schema\uff0c\u800cUsdGeomMesh\u662f\u5b9e\u7684IsA Schema\uff0c\u56e0\u4e3a\u5b83\u5305\u542b\u4e00\u4e2aDefine()\u65b9\u9762\u53ef\u4ee5\u5b9a\u4e49typeName\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"API Schema")),(0,n.kt)("p",null,"API Schema\u662fprim\u7684Schema\uff0c\u5b83\u4eec\u7528\u4e8e\u63d0\u4f9b\u63a5\u53e3\uff08API\uff09\u5bf9prim\u76f8\u5173\u7684\u6570\u636e\u8fdb\u884c\u5b9a\u4e49\u3001\u7f16\u8f91\u548c\u63d0\u53d6\u3002\u5b83\u7ee7\u627f\u81eaUsdAPISchemaBase\u7c7b\u800c\u4e0d\u662fUsdTyped\uff0c\u56e0\u6b64\u76f8\u5bf9\u4e8e\u201cis a\u201d\u53ef\u4ee5\u79f0\u4e3a\u201chas a\u201d\u3002API Schema\u6709\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Non-applied API Schemas"),(0,n.kt)("li",{parentName:"ul"},"Single and Multiple Apply Schemas"),(0,n.kt)("li",{parentName:"ul"},"Multiple-apply schemas")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Model, component and Assembly")),(0,n.kt)("p",null,"Kind\u662f\u4e00\u4e2aprim-level\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u5b83\u76f8\u5bf9\u4e8eschema type\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\uff0c\u5bf9\u5e94\u4e8eModel Hierarchy\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"model\uff0ckind\u7684\u62bd\u8c61\u57fa\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"group"),(0,n.kt)("li",{parentName:"ul"},"assembly"),(0,n.kt)("li",{parentName:"ul"},"component"),(0,n.kt)("li",{parentName:"ul"},"subcomponenet")),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u66f4\u7ec6\u788e\u7684asset\u6216\u8005prim\uff0cmodel\u63d0\u4f9b\u4e00\u79cd\u5c06\u573a\u666f\u7ed3\u6784\u8fdb\u884c\u7ec6\u5206\u7684\u67b6\u6784\uff1bmodel\u7ed3\u6784\u4e5f\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u65b9\u5f0f\u7ba1\u7406\u548c\u5f15\u7528\u8d44\u6e90\uff0c\u5426\u5219\u5bf9\u66f4\u5bf9referenced assets\u5f15\u7528\u548c\u63a8\u7406\u4f1a\u53d8\u5f97\u590d\u6742\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "TreeSpruce" (\n kind = "component"\n)\n{\n # Geometry and shading prims that define a Spruce tree...\n\n def "Cone_1" (\n kind = "subcomponent"\n references = @Cones/PineConeA.usd@\n )\n {\n }\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Asset AssetInfo and Asset Resolution")),(0,n.kt)("p",null,"Asset\u662f\u80fd\u591f\u4f7f\u7528\u4e00\u4e2a\u5b57\u7b26\u4e32\u6807\u5fd7\u7b26\uff08via asset resolution\uff09\u88ab\u8bc6\u522b\u548c\u5b9a\u4f4d\u7684\u8d44\u6e90\uff0casset\u53ef\u4ee5\u662f\u4e00\u4e2a\u6587\u4ef6\uff0c\u6216\u8005\u591a\u4e2a\u6587\u4ef6\u7ec4\u5408\u5f15\u7528\u5f62\u6210\u7684\u5355\u4e2a\u6587\u4ef6\uff0c\u5b83\u4e00\u822c\u6709\u7248\u672c\u63a7\u5236\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e00\u4e9b\u5982asset dependency analysis\u7b49\u64cd\u4f5c\uff0cUSD\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7279\u6b8a\u7684\u5b57\u7b26\u4e32\u7c7b\u578b\uff0casset\uff08represents a resolvable path to another asset\uff09\uff0c\u8fd9\u6837\u6240\u6709\u7684metadata\u548cattributes\u90fd\u80fd\u88ab\u5f88\u5feb\u5730\u5b9a\u4f4d\u548c\u8bc6\u522b\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1USD\u7684composition arcs\u80fd\u591f\u7528\u6765\u5408\u6210\u573a\u666f\uff0c\u4f46\u662f\u4ed6\u4eec\u5e76\u4e0d\u65b9\u4fbf\u5728\u5185\u5b58\u4e2d\u5bf9\u8d44\u6e90\u8fdb\u884c\u5b9a\u4f4d\u548c\u8bc6\u522b\uff0cAssetInfo\u662fcomposition arcs\u7684\u8865\u5145\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "Forest_set" (\n assetInfo = {\n asset identifier = @Forest_set/usd/Forest_set.usd@\n string name = "Forest_set"\n }\n kind = "assembly"\n)\n{\n # Possibly deep namespace hierarchy of prims, with references to other assets\n}\n')),(0,n.kt)("p",null,"Asset Resolution\u662f\u5c06\u4e00\u4e2aasset path\u8f6c\u6362\u4e3a\u53ef\u4ee5\u5b9a\u4f4d\u4e00\u4e2a\u8d44\u6e90\u7684location\u7684\u8fc7\u7a0b\uff0c\u9ed8\u8ba4\u6309\u7167\u6587\u4ef6\u8def\u5f84\u8fdb\u884c\u641c\u7d22\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5b9a\u4f4d\u903b\u8f91\uff0c\u751a\u81f3\u8d44\u6e90\u4e0d\u4e00\u5b9a\u9700\u8981\u5b58\u50a8\u5728\u78c1\u76d8\u4e2d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Prim, Property and Attribute")),(0,n.kt)("p",null,"USD\u7684\u547d\u540d\u7a7a\u95f4\u4e3b\u8981\u7531\uff1aPrim\u548cProperty\u7ec4\u6210\uff0c\u5176\u4e2dPrim\u63d0\u4f9b\u5bf9\u5408\u6210\u573a\u666f\u7684\u7ec4\u7ec7\u548c\u7d22\u5f15\uff0c\u5b83\u662fUSD\u7684\u4e3b\u8981\u5bb9\u5668\uff0cprim\u53ef\u4ee5\u5305\u542b\u53e6\u4e00\u4e2aprim\uff0c\u5f62\u6210\u4e00\u4e2anamespace hierarchy Stage\uff1b"),(0,n.kt)("p",null,"Prim\uff0c\u8fde\u540c\u5b83\u7684indices\uff0c\u662fStage\u4e2d\u552f\u4e00\u88ab\u6301\u4e45\u5316\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff1b\u5bf9prim\u8fdb\u884c\u64cd\u4f5c\u7684\u63a5\u53e3\u7531UsdPrim\u7c7b\u63d0\u4f9b\uff1bprim\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2aschema typename\uff0c\u4e5f\u53ef\u4ee5\u63d0\u4f9b\u5982scene-level instancing, load/unload behavior, and deactivation\u7b49\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u800cProperty\u63d0\u4f9breal data\u3002\u6709\u4e24\u79cd\u7c7b\u578b\u7684Property\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Attribute"),(0,n.kt)("li",{parentName:"ul"},"Relationship")),(0,n.kt)("p",null,"Property\u53ef\u4ee5\u88ab\u7ec4\u6210\u65b0\u7684\u5c42\u7ea7\u4e14\u4e0d\u9700\u8981\u5f15\u5165\u65b0\u7684Prim\uff0c\u8fd9\u53ef\u4ee5\u63d0\u5347\u5185\u5b58\u7684\u5c40\u90e8\u6027\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#usda 1.0\n\nover MyMesh\n{\n rel material:binding = \n color3f[] primvars:displayColor = [ (.4, .2, .6) ]\n}\n")),(0,n.kt)("p",null,"Attribute\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Sphere "BigBall"\n{\n double radius = 100\n double radius.timeSamples = {\n 1: 100,\n 24: 500,\n }\n}\n')),(0,n.kt)("h4",{id:"7113-usdz"},"7.1.1.3 USDZ"),(0,n.kt)("p",null,"USD\u7684\u6838\u5fc3\u662f\u65b9\u4fbf\u5bf9\u4f17\u591a\u5206\u6563\u7684\u8d44\u6e90\u8fdb\u884c\u5408\u6210\uff0c\u5176\u4e2d\u8d44\u6e90\u5df2\u5206\u6563\u7684\u788e\u7247\u5f62\u5f0f\u5206\u5e03\uff0c\u8fd9\u79cd\u673a\u5236\u662f\u4e3a\u4e86\u7f16\u8f91\u6001\u8bbe\u8ba1\u7684\uff0c\u6b64\u65f6\u6574\u4e2a\u573a\u666f\u8fd8\u6ca1\u6709\u7f16\u8f91\u5b8c\u6210\uff0c\u9700\u8981\u7ee7\u7eed\u7ef4\u6301\u8fd9\u79cd\u5206\u6563\u7684\u72b6\u6001\uff1b\u7136\u800c\u5f53\u6211\u4eec\u7684\u5185\u5bb9\u5168\u90e8\u7f16\u8f91\u5b8c\u6210\u65f6\uff0c\u5206\u6563\u7684\u6587\u4ef6\u5374\u4e0d\u4fbf\u4e8e\u7ba1\u7406\uff0c\u6b64\u65f6\u7684\u6838\u5fc3\u9700\u6c42\u662f\u5206\u53d1\uff0c\u5b83\u8981\u6c42\u4e00\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"A single object, from marshaling and transmission perspectives"),(0,n.kt)("li",{parentName:"ol"},"Potentially streamable"),(0,n.kt)("li",{parentName:"ol"},"Usable without unpacking to a filesystem")),(0,n.kt)("p",null,"USDZ\u901a\u8fc7USD\u63d0\u4f9b\u7684FileFormat plugin\u673a\u5236\u5b9e\u73b0\uff1aUsdUsdzFileFormat"),(0,n.kt)("h4",{id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0"},"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0"),(0,n.kt)("p",null,"USD\u4e3b\u8981\u805a\u7126\u4e8e\u600e\u6837\u5bf9\u5408\u6210\u7684\u573a\u666f\u8fdb\u884c\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u56e0\u6b64\u5b83\u504f\u5411\u4e8e\u201clow-memory footprint, higher-latency data access\u201d \u800c\u4e0d\u662f \u201chigh-memory footprint, low-latency access to data\u201d\uff0c\u56e0\u4e3a\u5728\u5185\u5b58\u4e2d\u7f13\u5b58\u66f4\u591a\u6570\u636e\uff0c\u4f1a\u5f71\u54cd\u5bf9\u57fa\u4e8e\u5408\u6210\u7ed3\u6784\u573a\u666f\u7684\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u5e26\u6765\u590d\u6742\u6027\uff0c\u56e0\u4e3a\u5728\u7f16\u8f91\u9636\u6bb5\u4f1a\u6709\u66f4\u591a\u7684\u6570\u636e\u4fee\u6539\uff0c\u800c\u8fd0\u884c\u65f6\u9636\u6bb5\u5219\u57fa\u672c\u4e0a\u4fdd\u6301\u6570\u636e\u4e0d\u53d8\u3002\u6240\u4ee5USD\u4e0d\u592a\u9002\u5408\u8fd0\u884c\u65f6\u3002\u4f46\u662fUSD\u63d0\u4f9b\u4e86\u4e00\u4e9b\u4fbf\u5229\u548c\u5de5\u5177\uff08facilities\uff09\uff0c\u4f7f\u5f97\u5ba2\u6237\u7aef\u53ef\u4ee5\u5bf9UsdStage\u6784\u5efa\u4e00\u4e9b\u6269\u5c55\u6027\u7684\u7f13\u5b58\uff0c\u4ee5\u63d0\u4f9b\u5bf9USD\u6570\u636e\u7684\u4f4e\u5ef6\u65f6\u8bbf\u95ee\u3002"),(0,n.kt)("p",null,"USDZ\u4ece\u5206\u53d1\u7684\u89d2\u5ea6\u5bf9USD\u8fdb\u884c\u4e86\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0cUSD\u4e3b\u8981\u662f\u4e3a\u4e86\u5728DCC\u4e4b\u95f4\u8fdb\u884c\u6570\u636e\u4ea4\u6362\u548c\u534f\u540c\uff0c\u8fd9\u5168\u662f\u7f16\u8f91\u65f6\u7684\u9700\u6c42\uff0c\u6709\u5f88\u591a\u529f\u80fd\u672c\u8eab\u5bf9\u8fd0\u884c\u65f6\u6ca1\u6709\u4efb\u4f55\u7528\u5904\uff0c\u4f8b\u5982\u7531\u5927\u91cf\u7684\u788e\u7247\u7ec4\u5408\u5f62\u6210\u7684\u5927\u578b\u573a\u666f\u867d\u7136\u9002\u5408\u7f16\u8f91\u65f6\uff0c\u4f46\u662f\u5374\u4e0d\u5229\u4e8e\u8fd0\u884c\u65f6\u52a0\u8f7d\uff0c\u6240\u4ee5\u9700\u8981\u5728\u8fd0\u884c\u65f6\u5bf9USD\u8fdb\u884c\u4e00\u5b9a\u7684\u5b9a\u5236\uff0c\u4f8b\u5982\u662f\u5426\u4eceCore\u4e2d\u5220\u9664\u4e00\u4e9b\u6a21\u5757\uff0c\u6216\u8005\u53bb\u6389\u4e00\u4e9b\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6570\u5b57\u5185\u5bb9\u7684\u751f\u547d\u5468\u671f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\uff08USD"),(0,n.kt)("li",{parentName:"ul"},"\u5206\u53d1\uff08USDZ"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff08USDX\uff09")),(0,n.kt)("p",null,"\u9700\u8981\u5728USDZ\u57fa\u7840\u4e0a\u8fdb\u884c\u8fd0\u884c\u65f6\u6539\u9020\uff0c\u4f7f\u5176\u5206\u53d1\u5f97\u662f\u9002\u5408\u8fd0\u884c\u6001\u5f97\u683c\u5f0f\uff0c\u6240\u4ee5\u53ef\u4ee5\u9690\u85cf\u5206\u53d1\u6001\uff0c\u53ea\u9700\u8981\u7f16\u8f91\u548c\u8fd0\u884c\u65f6\u4e24\u4e2a\u5f62\u6001\uff1b"),(0,n.kt)("p",null,"\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u7ee7\u7eed\u7f16\u8f91\uff0c\u9700\u8981\u5c06\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001\u533a\u5206\uff0c\u4f46\u662f"),(0,n.kt)("h4",{id:"7115-\u5bf9\u6bd4"},"7.1.1.5 \u5bf9\u6bd4"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"USD\u592a\u8fc7\u590d\u6742\uff0c\u6709\u5f88\u591a\u989d\u5916\u7684\u5c5e\u6027\u90fd\u662f\u4e3a\u4e86\u5408\u6210\u573a\u666f\u7684\u76ee\u7684\uff0c\u800c\u5408\u6210\u573a\u666f\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u9700\u8981\u7684\uff0c\u6216\u8005\u8bf4\u4e00\u65e6\u5230\u4e86\u8fd0\u884c\u65f6\uff0c\u6709\u4e9b\u5408\u6210\u5c5e\u6027\u5df2\u7ecf\u56fa\u5b9a\u4e86\uff0c\u6211\u4eec\u4fbf\u4e0d\u518d\u9700\u8981\u90a3\u4e48\u590d\u6742\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u81f3\u5c11\u4e0d\u518d\u9700\u8981\u5355\u4e00\u573a\u666f\uff08\u4e00\u4e2a\u5fae\u578bapp\uff09\u5185\u90e8\u6240\u6709\u5408\u6210\u5c5e\u6027\uff0c\u90a3\u4e48\u8be5\u5fae\u578b\u573a\u666f\u5c31\u5e94\u8be5\u8f6c\u5316\u4e3a\u56fa\u5b9a\u683c\u5f0f\u573a\u666f\uff0c\u800c\u6574\u4e2a\u5408\u6210\u80fd\u529b\u4fdd\u6301\u5728\u5fae\u578b\u573a\u666f\u5c42\u9762\u5c31\u53ef\u4ee5"),(0,n.kt)("li",{parentName:"ul"},"\u4e14\u5bf9\u8fd0\u884c\u65f6\u4e0d\u592a\u53cb\u597d\uff0c\u6709\u5f88\u591a\u5c5e\u6027\uff0c\u8ddf\u4e0a\u9762\u4e00\u6837\uff0c\u6709\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u5408\u6210\u7ec6\u8282\u5728\u8fd0\u884c\u65f6\u6267\u884c\uff0c\u8fd9\u90e8\u5206\u8981\u53bb\u6389")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u7279\u6027\uff0c\u6709\u5fc5\u8981\u5f00\u53d1\u4e00\u4e2a\u4e2d\u95f4\u683c\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5728\u5f00\u53d1\u8005\u4fdd\u5b58\u573a\u666f\u81f3RW\u65f6\u6267\u884c\u9884\u5904\u7406\uff0c\u5176\u8ba1\u7b97\u8fc7\u7a0b\u4e3b\u8981\u662f\u63d0\u524d\u8ba1\u7b97\u4e00\u4e9b\u5408\u6210\u65b9\u9762\u7684\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u7ec8\u8fd0\u884c\u65f6\u76f4\u63a5\u52a0\u8f7d\u8be5\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"DSL\u9488\u5bf9\u8be5\u683c\u5f0f\u5c31\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6bcf\u4e2a\u5fae\u578b\u573a\u666f\uff0c\u5f00\u53d1\u8005\u672c\u5730\u4f1a\u4fdd\u5b58\u539f\u59cbUSD\u6587\u4ef6\uff0c\u4e0b\u6b21\u4ed6\u4ecd\u7136\u5bf9\u539f\u59cb\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91\uff0c\u7136\u540e\u63d0\u4ea4\u65f6\u8fdb\u884c\u9884\u5904\u7406\uff0c\u518d\u4fdd\u5b58\u4e2d\u95f4\u683c\u5f0f\u81f3\u4e91\u7aef\u5185\u5bb9\u670d\u52a1\u5668")),(0,n.kt)("p",null,"\u517c\u5bb9\u7b2c\u4e09\u65b9\uff0c\u5728\u7b2c\u4e09\u65b9\u505a\u63d2\u4ef6\uff0c\u8f6c\u5316\u4e3aRW\u652f\u6301\u7684\u683c\u5f0f\uff0c\u7136\u540e\u5728RW\u505a\u573a\u666f\u548c\u4ea4\u4e92\u7f16\u8f91"),(0,n.kt)("p",null,"\u7136\u800c\u600e\u4e48\u5b9e\u65f6\u591a\u4eba\u534f\u540c\u4fee\u6539\uff0c\u53e6\u5916\u7528\u6237\u5f00\u53d1\u5fae\u578b\u573a\u666f\u5927\u90e8\u5206\u90fd\u662f\u5728\u7aef\u4fa7\u8fd0\u884c\u65f6\u8fdb\u884c"),(0,n.kt)("p",null,"\u5177\u6709\u5bf9\u7528\u6237\u53ef\u8bfb\u7684\u8868\u8ff0\u5f62\u5f0f\uff0c\u548c\u5bf9\u7a0b\u5e8f\u9ad8\u6548\u52a0\u8f7d\u7684\u4e8c\u8fdb\u5236\u5f62\u5f0f"),(0,n.kt)("h3",{id:"712-alembic-formats"},"7.1.2 Alembic formats"),(0,n.kt)("h3",{id:"713-unity-prefabs"},"7.1.3 Unity Prefabs"),(0,n.kt)("h3",{id:"714-\u4ee3\u7801\u751f\u6210"},"7.1.4 \u4ee3\u7801\u751f\u6210"),(0,n.kt)("p",null,"USD\u4e2d\u7684Schema\u548cLLVM\u4e2d\u7684TableGen\uff0c\u90fd\u662f\u6309\u7167\u4e00\u79cd\u6587\u672c\u683c\u5f0f\uff0c\u5b9a\u4e49\u4e00\u79cd\u683c\u5f0f\uff0c\u7136\u540e\u751f\u6210\u5bf9\u5e94\u7684C++\u4ee3\u7801\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("h2",{id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784"},"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784"),(0,n.kt)("h3",{id:"721-unity-dotsecs"},"7.2.1 Unity DOTS/ECS"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DOTS\u6216\u8005ECS\u8fd8\u662f\u4ec5\u5173\u6ce8\u6027\u80fd\u5c42\u9762\uff0c\u4f46\u662f\u6570\u636e\u9a71\u52a8\u7684\u597d\u5904\u662f\u5b83\u8ba9\u5f00\u53d1\u8005\u628a\u903b\u8f91\u533a\u5206\u4e86\u51fa\u6765\uff0c\u6240\u4ee5\u5728\u8fd9\u4e9b\u903b\u8f91\u7684\u7ec4\u7ec7\u5c42\u9762\u518d\u52a0\u4e0a\u4e00\u5c42\u7ba1\u7406\uff0c\u5c31\u53ef\u4ee5\u5411\u4e0a\u5c42\u7528\u6237\u5c42\u8fdb\u4e00\u6b65\u7b80\u5316\u903b\u8f91\u5f00\u53d1"),(0,n.kt)("p",null,"SRP Batcher\u628a\u6750\u8d28\u6570\u636e\u4ece\u539f\u6765\u7684raw data\u91cc\u9762\u62bd\u53d6\u51fa\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9GameObject rendering\u7684\u6027\u80fd\u968f\u7740scriptable pupeline\u5f97\u5230\u63d0\u5347"),(0,n.kt)("li",{parentName:"ul"},"GPU\u4e2d\u53ef\u4ee5\u7f13\u5b58\u6750\u8d28\u6570\u636e\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u6b21\u90fd\u5207\u6362shader\uff0c\u56e0\u4e3adraw call\u63d0\u4ea4\u7684\u9891\u7387\u8fdc\u9ad8\u4e8e\u6750\u8d28\u6570\u636e\u5207\u6362\u548c\u63d0\u4ea4\u7684\u9891\u7387")),(0,n.kt)("p",null,"System \u5bf9component \u7684\u5f15\u7528\u6bd4\u8f83\u590d\u6742\uff0cUnity\u4e3a\u4e86\u7b80\u5316\u4ee5\u53ca\u4e0d\u6539\u53d8\u539f\u6765\u7684\u4ee3\u7801\uff0c\u8ba9\u5f00\u53d1\u8005\u5b9e\u73b0\u4e00\u4e2a\u539f\u6765\u7684Component \u7c7b\uff0c\u7136\u540e\u81ea\u52a8\u62c6\u5206\uff0c\u8fd9\u6837\u4e5f\u8bb8\u4f1a\u4f7f\u5f97\u7528\u6237\u4e0d\u6613\u4e8e\u5f7b\u5e95\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u601d\u60f3\uff0c\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4e00\u4e2a\u7279\u6b8a\u7684\u8bed\u6cd5\u7cd6\u5305\u88c5\u5f15\u7528\uff0c\u7136\u540e\u7f16\u8bd1\u5668\u81ea\u52a8\u5c06\u5f15\u7528\u8f6c\u5316\u4e3a\u901a\u8fc7Component \u590d\u5236\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f15\u7528"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\u8ba1\u7b97\uff1a")),(0,n.kt)("p",null,"Unity\u7684EntityQuery\u4f3c\u4e4e\u53ef\u4ee5\u6309\u4e0a\u8ff0\u7684\u601d\u8def\u53bb\u4f18\u5316\uff0c\u751a\u81f3\u5e76\u884c\u8ba1\u7b97\u7684\u663e\u793a\u8c03\u7528\u90fd\u662f\u9690\u85cf\u7684\uff0c\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\uff0c\u7528\u6237\u5bf9\u5355\u4e2aSystem \u7684\u6267\u884c\u81ea\u52a8\u8f6c\u53d8\u4e3a\u5e76\u884c\uff0c\u5305\u62ec\u5b9e\u9645\u7684\u67e5\u8be2\u548c\u5e76\u884c\u6267\u884c\uff0c\u53ea\u9700\u8981\u6bcf\u4e2asystem\u5fc5\u987b\u5728\u5934\u90e8\u5f15\u7528Components \u5373\u53ef\uff08\u58f0\u660e\u5305\u62ec\u662f\u5426\u53ea\u8bfb\u7684\u4f7f\u7528\u8bf4\u660e\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u5f15\u7528\u58f0\u660e\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u5f15\u7528\u5efa\u7acbarchetype "),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u901a\u8fc7\u8bbe\u5b9a\u903b\u8f91\u7c7b\u578b\u548c\u51e0\u4f55\u6216\u8005\u5916\u89c2\u7c7b\u578b\u4e4b\u95f4\u7684\u7ea6\u675f\u548c\u5bf9\u5e94\u5173\u7cfb\u6765\u63a7\u5236\u65b0\u7c7b\u578b\u7684\u521b\u5efa\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ec5\u53d1\u751f\u5728\u7f16\u8bd1\u671f\u95f4")),(0,n.kt)("p",null,"\u592a\u6781\u7684Megakernel programming \u6709\u8fd9\u6837\u7684\u601d\u60f3\uff0c\u5c06\u4f20\u7edfelement-wise\u7684\u7f16\u7a0b\uff0c\u591a\u4e2a\u8ba1\u7b97\u9636\u6bb5\u5408\u5e76\u4e3a\u4e00\u4e2asingle kernel \uff0c\u7f16\u7a0b\u7406\u89e3\u66f4\u81ea\u7136"),(0,n.kt)("p",null,"\u4e00\u5f00\u59cb\u5c31\u8981\u6559\u4f1a\u7528\u6237\uff0c\u600e\u6837\u57fa\u4e8e\u903b\u8f91\u6216\u8005\u529f\u80fd\u7ec4\u5408\u6765\u521b\u5efa\uff0c\u8fd9\u4e9b\u90fd\u662f\u57fa\u672c\u89c4\u5f8b\u548c\u903b\u8f91\uff0c\u8bbe\u8ba1\u7684\u65f6\u5019\u8981\u8003\u8651\u9ad8\u5ea6\u901a\u7528\u6027\u3001\u62bd\u8c61\u6027\u3001\u903b\u8f91\u6027\uff0c\u8fd9\u6837\u7528\u6237\u7406\u89e3\u6210\u672c\u6700\u4f4e\uff0c\u800c\u5728\u8bbe\u8ba1\u7684\u65f6\u5019\u6784\u601d\u7684\u6210\u672c\u4e5f\u6700\u4f4e\uff0c\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u662f\u672c\u8d28\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u5efa\u5b50\u903b\u8f91\u53ca\u5176\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u4e0e\u5916\u89c2\u7684\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u5916\u89c2\u53ca\u5176\u7c7b\u578b\u4e0e\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u6709\u4e00\u5957\u6846\u67b6\u6765\u652f\u6491\u8fd9\u4e2a\u4f53\u7cfb")),(0,n.kt)("p",null,"Unity\u7684DOTS\u505a\u7684\u8fd8\u4e0d\u591f\u5f7b\u5e95\uff0c\u5b83\u8fd8\u662f\u4e3a\u4e86\u517c\u5bb9\u539f\u6765\u7684Component\uff0c\u4f9d\u8d56\u4e8e\u7f16\u8f91\u5668\u5c5e\u6027\u628aComponent\u548cSystem\u5206\u79bb\u51fa\u6765\uff0c\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u3001\u5173\u7cfb\u548c\u533a\u522b\u90fd\u6ca1\u6709\u90a3\u4e48\u660e\u663e\uff0c\u4e0d\u5229\u4e8e\u6df1\u5165\u8d2f\u5f7b\u6570\u636e\u9a71\u52a8\u8fd9\u4e00\u7406\u5ff5"),(0,n.kt)("p",null,"\u5728RW\u4e2d\uff0c\u6240\u6709\u903b\u8f91\u548c\u6570\u636e\u5fc5\u987b\u5206\u5f00\uff0c\u5b83\u4eec\u6ca1\u6709\u529e\u6cd5\u6df7\u5230\u4e00\u8d77\uff0c\u4f46\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u5c06\u7ec4\u4ef6\u53d1\u5e03\uff0c\u53d8\u6210private\u7684\uff0c\u4f46\u8f6f\u4ef6\u67b6\u6784\u4e00\u6837\uff0c\u5e76\u4e14\u9075\u5faa\u540c\u6837\u7684\u5305\u7ba1\u7406\uff0c\u4e2d\u5fc3\u5316\u7684\u7ec4\u4ef6\u7ba1\u7406\u548c\u52a0\u8f7d\uff0c\u7248\u672c\u7ba1\u7406\uff0c\u53ea\u662f\u7ec4\u4ef6\u4e0d\u5bf9\u5916\u516c\u5f00\u800c\u5df2"),(0,n.kt)("p",null,"\u5176\u4e2d\u4e00\u79cd\u8ba9\u591a\u4e2a\u5f00\u53d1\u8005\u9075\u5faa\u516c\u5171\u534f\u5b9a\u7684\u65b9\u6cd5\uff0c\u662f\u7531\u5e73\u53f0\u6765\u5b9a\u4e49\u6570\u636e\uff0c\u5e73\u53f0\u5b9a\u4e49\u7684\u662f\u4e00\u4e9b\u4e1a\u52a1\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u6210\u4e3a\u516c\u5171\u63a5\u53e3\uff0c\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u5c31\u53ef\u4ee5\u76f8\u4e92\u72ec\u7acb\u5de5\u4f5c\uff1b\u5982\u679c\u5e73\u53f0\u7f3a\u4e4f\u67d0\u4e9b\u7c7b\u578b\u516c\u5171\u63a5\u53e3\uff0c\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u81ea\u884c\u5b9a\u4e49\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u9700\u8981\u9009\u62e9\u54ea\u4e9b\u5c5e\u6027\u662f\u516c\u5171\u63a5\u53e3\uff0c\u7136\u540e\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u4e9b\u516c\u5171\u63a5\u53e3\u5f00\u53d1\uff0c\u8fd9\u4e9b\u516c\u5171\u6570\u636e\u63a5\u53e3\u8ddf\u4e0e\u7279\u5b9a\u65b9\u6cd5\u76f8\u5173\u7684\u6570\u636e\u63a5\u53e3\u5206\u5f00"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u7684\u91cd\u8981\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u53ef\u4ee5\u91cd\u7528\uff0c\u6240\u4ee5\u6709\u673a\u4f1a\u5c06\u4e00\u90e8\u5f00\u53d1\u8005\u5199\u7684\u4ee3\u7801\u5171\u4eab\u7ed9\u5176\u4ed6\u4eba"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4ee3\u7801\u4ece\u6570\u636e\u5265\u79bb\u51fa\u6765\uff0c\u624d\u53ef\u4ee5\u505a\u5230\u666e\u901a\u7528\u6237\u80fd\u591f\u6784\u5efa\u4e30\u5bcc\u7684\u529f\u80fd")),(0,n.kt)("p",null,"\u539f\u5219\uff1a"),(0,n.kt)("p",null,"Composition over inheritance "),(0,n.kt)("p",null,"\u867d\u7136ECS\u76f8\u8f83\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u6982\u5ff5\u6ca1\u90a3\u4e48\u76f4\u89c2\uff0c\u4f46\u662fOOP\u53ca\u5176\u7ee7\u627f\u7684\u65b9\u5f0f\u5e26\u6765\u7684\u903b\u8f91\u4e0a\u7684\u590d\u6742\u6027\u548c\u53ef\u7ef4\u62a4\u6027\uff0cECS\u5176\u5b9e\u66f4\u7b80\u5316\u4e86\uff0c\u5b83\u7b80\u5316\u7684\u539f\u56e0\u662f\u4e24\u4e2a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u95ee\u9898\u5206\u800c\u6cbb\u4e4b"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c42\u6b21\u66f4\u6241\u5e73\uff0c\u7ec4\u7ec7\u590d\u6742\u6027\u964d\u4f4e")),(0,n.kt)("p",null,"\u5f00\u6e90ECS\u5b9e\u73b0\uff1aFlecs"),(0,n.kt)("p",null,"ECS\u662f\u5b9e\u73b0in-game editor\u7684\u6838\u5fc3"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u4e5f\u8981\u652f\u6301\u7f51\u7edc\u670d\u52a1\u76f8\u5173\u7684\u529f\u80fd"),(0,n.kt)("p",null,"\u534f\u8bae\u7531\u5b98\u65b9\u6765\u5b9a\u4e49\uff0c\u5f00\u53d1\u8005\u5b9e\u73b0\u529f\u80fd\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5f00\u653e\u7ed9\u5f00\u53d1\u8005\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5728\u5185\u90e8\u5b9e\u73b0\u534f\u8bae\u5b9a\u4e49\uff0c\u7136\u540e\u901a\u8fc7\u79c1\u4ed3\u6216\u8005\u4ee3\u7801\u6587\u4ef6\u5206\u4eab\u7ed9\u522b\u4eba\uff0c\u524d\u8005\u6700\u597d\uff0c\u7136\u540e\u4f18\u79c0\u7684\u534f\u8bae\u4e13\u4e3a\u516c\u5171\u7684"),(0,n.kt)("h3",{id:"722-ecs"},"7.2.2 ECS"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u7ec4\u4ef6\uff1a\u5305\u542b\u5173\u7cfb\u548c\u5904\u7406\u987a\u5e8f\uff0c\u8fd9\u4e9b\u6982\u5ff5\u4fc3\u8fdb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u8de8\u7cfb\u7edf\u901a\u4fe1\uff1a\u4e24\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u95f4\u9700\u8981\u901a\u4fe1")),(0,n.kt)("p",null,"ECS game engine design "),(0,n.kt)("p",null,"\u7528\u6237\u611f\u77e5\u7684\u5e94\u8be5\u53ea\u6709Component \uff0c\u4ed6\u4e0d\u9700\u8981\u77e5\u9053\u6709\u4e2aSystem\uff0cComponent \u7684\u8bbe\u8ba1\u539f\u5219\u5e94\u8be5\u662f\u4e00\u4e2a\u529f\u80fd\u8282\u70b9\uff0cNode\uff0c\u50cfHoudini \u4e2d\u7684\u8282\u70b9\u4e00\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u8282\u70b9\u544a\u8bc9\u7528\u6237\u8be5\u8282\u70b9\u4e3a\u76ee\u6807\u7269\u4f53\u6dfb\u52a0\u4e86\u4ec0\u4e48\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u529f\u80fd\u5e94\u8be5\u7528\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u540d\u5b57\u63cf\u8ff0\uff0c\u4e00\u5b9a\u8981\u8d77\u4e00\u4e2a\u5f88\u597d\u7684\u540d\u5b57\uff0c\u5b98\u65b9\u8981\u4fdd\u7559\u4e00\u4e9b\u5e38\u89c1\u529f\u80fd\u7684\u540d\u5b57\u5217\u8868\uff0c\u6709\u4e00\u4e2a\u603b\u7684\u540d\u5b57\u5217\u8868\uff0c\u4e0d\u80fd\u5f00\u53d1\u8005\u968f\u610f\u8d77\u540d\u5b57\uff0c\u9664\u975e\u662f\u4ed6\u5185\u90e8\u79c1\u6709\u7684\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u5168\u5c40\u7684\u529f\u80fd\u8282\u70b9\u5217\u8868\u53ef\u4ee5\u5728\u6587\u6863\u4e2d\u7ea2\u7528\u6237\u9009\u62e9\u548c\u67e5\u8be2\uff0c\u666e\u901a\u7528\u6237\u771f\u6b63\u4f7f\u7528\u7684\u662f\u516c\u5171\u5217\u8868\u4e2d\u7684\u529f\u80fd\u8282\u70b9\uff0c\u5b98\u65b9\u7ea6\u5b9a\u548c\u7ef4\u62a4\u5176\u4e2d\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u63d0\u4ea4\u65b0\u7684\u8282\u70b9\u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u63d0\u4ea4\u7ecf\u8fc7\u5b98\u65b9\u5ba1\u6838\uff0c\u5ba1\u6838\u6570\u636e\u89c4\u8303\uff0c\u8ddf\u5176\u4ed6\u8282\u70b9\u4e4b\u95f4\u7684\u517c\u5bb9\u6027\uff0c\u4f8b\u5982\u67d0\u4e9b\u7c7b\u578b\u7684\u8282\u70b9\u4e0d\u9002\u5408\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u4e00\u4e2a\u8282\u70b9\u5b9a\u4e49\u53ea\u80fd\u6709\u4e00\u4e2aSystem \uff0c\u4f46\u662fSystem \u4e4b\u95f4\u7684\u5b9e\u73b0\u5dee\u5f02\u5f88\u5927\uff0c\u5c24\u5176\u6027\u80fd\u5dee\u5f02\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u6027\u80fd\u6d4b\u8bd5\u65b9\u6cd5\u9009\u62e9\u5176\u4e2d\u6700\u4f18\u7684\u7248\u672c\u4e3a\u9ed8\u8ba4\u7248\u672c\uff0c\u6700\u597d\u4e0d\u8981\u8ba9\u7528\u6237\u9009\u62e9\u7248\u672c\uff0c\u54ea\u6015\u662f\u968f\u673a\u9009\u62e9\u4e00\u4e2a\u7248\u672c\u4e5f\u8981\uff0c\u4f8b\u5982\u63d0\u4ea4\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u8981\u6c42\u5f00\u53d1\u8005\u63d0\u4f9b\u6027\u80fd\u6d4b\u8bd5\u7ed3\u679c\uff0c\u6240\u4ee5\u8282\u70b9\u7684\u5b9e\u73b0\u8981\u5b9a\u4e49\u4e00\u5957\u597d\u7684\u4eff\u771f\u6d4b\u8bd5\u5de5\u5177\u548c\u6846\u67b6"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u8981\u901a\u8fc7\u7528\u6237\u53bb\u67e5\u770b\u5176\u4e2d\u7684\u6570\u636e\u624d\u80fd\u7406\u89e3\u8282\u70b9\u7684\u542b\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u9700\u8981\u4fee\u6539\u53c2\u6570\u7684\u65f6\u5019\u624d\u4f1a\u53bb\u6253\u5f00\u8282\u70b9\u7684\u53c2\u6570")),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u548c\u82f9\u679c\u7684USDZ\u7684\u601d\u60f3\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u82f9\u679c\u53ea\u5b9a\u4e49\u4e86\u5c11\u91cf\u8282\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u51e0\u767e\u79cd\u8282\u70b9\u5b9e\u73b0\u5f88\u4e30\u5bcc\u7684\u529f\u80fd"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Houdini \u6709\u51e0\u767e\u79cd"),(0,n.kt)("li",{parentName:"ul"},"Fornite \u4e5f\u6709100\u591a\u79cd")),(0,n.kt)("p",null,"\u901a\u7528\u5f15\u64ce\u4e0d\u4f1a\u8fd9\u4e48\u505a\uff0c\u53ea\u6709in-house\u6216\u8005\u5821\u5792\u4e4b\u591c\u8fd9\u79cd\u6c99\u76d2\u6e38\u620f\u4f1a\u8fd9\u4e48\u505a"),(0,n.kt)("h3",{id:"723-ue5-mass"},"7.2.3 UE5 MASS"),(0,n.kt)("h3",{id:"724-data-oriented-and--driven"},"7.2.4 Data-oriented and -driven"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.dataorienteddesign.com"},"https://www.dataorienteddesign.com")),(0,n.kt)("p",null,"Data Oriented Programming unlearning objects (book)"),(0,n.kt)("h3",{id:"725--rust-ecs"},"7.2.5 Rust ECS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://specs.amethyst.rs/docs/tutorials/"},"https://specs.amethyst.rs/docs/tutorials/")),(0,n.kt)("h2",{id:"73-\u7f16\u8bd1\u5668\u4e0edsl"},"7.3 \u7f16\u8bd1\u5668\u4e0eDSL"),(0,n.kt)("p",null,"RW\u5e95\u5c42\u9700\u8981\u6781\u9ad8\u7684\u6027\u80fd\u6765\u652f\u6491\u4e0a\u5c42\u590d\u6742\u7684\u56fe\u5f62\u548c\u903b\u8f91\u8ba1\u7b97\uff0c\u540c\u65f6\u8fd9\u79cd\u6027\u80fd\u4f18\u5316\u53c8\u8981\u540c\u65f6\u5bf9\u8de8\u5e73\u53f0\u79fb\u690d\u6027\u548c\u5f00\u53d1\u6548\u7387\u5e26\u6765\u597d\u5904\uff0c\u6240\u4ee5\u5b83\u4e0d\u662f\u5355\u7eaf\u7684\u6027\u80fd\u4f18\u5316\uff0c\u662f\u4e00\u5957\u9ad8\u5ea6\u4f18\u826f\u7684\u5e95\u5c42\u6846\u67b6\uff0c\u5177\u4f53\u4e4b\u524d\u4e00\u4e0b\u51e0\u4e2a\u91cd\u8981\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u5f62\u7ba1\u7ebf\u7684\u6df1\u5ea6\u5b9a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u9a71\u52a8\u7684\u4f18\u5316\uff0c\u6570\u636e\u9a71\u52a8\u9664\u4e86\u8ba9\u666e\u901a\u7528\u6237\u80fd\u591f\u4f7f\u7528\u903b\u8f91\uff0c\u8fd8\u8981\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6765\u7b80\u5316\u5f00\u53d1\u8005\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4f8b\u5982\u53ea\u8981\u6309\u7167\u67d0\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u4e0d\u4ec5\u80fd\u4f7f\u6d41\u7a0b\u66f4\u7b80\u5355\uff0c\u8fd8\u4f1a\u662f\u7684\u5e95\u5c42\u7f16\u8bd1\u65f6\u548c\u8fd0\u884c\u65f6\u80fd\u591f\u9488\u5bf9\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u8bed\u8a00\u7684\u6df1\u5165\u5b9a\u5236\uff0c\u8ddf\u4e0a\u9762\u7684\u6570\u636e\u9a71\u52a8\u76f8\u7ed3\u5408\uff0c\u7528\u6237\u8d77\u6765\u6781\u5176\u7b80\u5355")),(0,n.kt)("h3",{id:"731--taichi"},"7.3.1 Taichi"),(0,n.kt)("p",null,"Born from the MIT CSAIL lab, Taichi was designed to facilitate computer graphics researchers' everyday life, by helping them quickly implement visual computing and physics simulation algorithms that are executable on GPU. The path Taichi took was an innovative one: Taichi is embedded in Python and uses modern just-in-time (JIT) frameworks (for example LLVM, SPIR-V) to offload the Python source code to native GPU or CPU instructions, offering the performance at both development time and runtime."),(0,n.kt)("h4",{id:"7311-\u65b0\u601d\u60f3"},"7.3.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"Taichi\u662f\u4e00\u95e8\u9762\u5411\u7269\u7406\u6a21\u62df\u548c\u8ba1\u7b97\u673a\u89c6\u89c9\u8ba1\u7b97\u7684\u9886\u57df\u7279\u5b9a\u8bed\u8a00\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u4f7f\u7528C++\u7b49\u8bed\u8a00\u81ea\u884c\u5b9e\u73b0\u7684\u7b97\u6cd5\uff0ctaichi\u63d0\u4f9b\u4e00\u4e0b\u65b9\u9762\u7684\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u63d0\u4f9b\u4e86\u5e76\u884c\u8ba1\u7b97\u62bd\u8c61"),"\uff0c\u4f7f\u5f97\u5f00\u53d1\u4eba\u5458\u4e0d\u9700\u8981\u7279\u522b\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u7ba1\u7406\uff0c\u5e76\u4e14\u5177\u6709\u8f83\u597d\u7684\u4e00\u81f4\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u4e86\u4ee3\u7801\u590d\u6742\u5ea6\u6027"),"\uff0c\u4e3b\u8981\u662f\u4e24\u4e2a\u65b9\u9762\uff0c\u4e00\u4e2a\u662f\u56e0\u4e3a\u4e0d\u7528\u5173\u5fc3\u5e76\u884c\u8ba1\u7b97\uff0c\u5f00\u53d1\u8005\u4e13\u6ce8\u4e8e\u5355\u4e2aKernel\uff0c\u7701\u6389\u4e86\u4e00\u5b9a\u7684\u590d\u6742\u5ea6\uff0c\u540c\u65f6\u903b\u8f91\u66f4\u6e05\u6670\uff1b\u53e6\u4e00\u4e2a\u662f\u901a\u8fc7\u5c06\u6570\u636e\u548c\u7b97\u6cd5\u5206\u79bb\uff0c\u4f7f\u5f97\u50cf\u7a00\u758f\u7ed3\u6784\u8fd9\u6837\u7684\u7b97\u6cd5\u88ab\u81ea\u52a8\u4f18\u5316\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u4e3a\u4e86\u6027\u80fd\u7f16\u5199\u5f88\u591a\u590d\u6742\u7684\u4ee3\u7801\uff0c\u4f8b\u5982\u5bf9\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u590d\u6742\u7684\u7ba1\u7406\u548c\u6392\u5e03")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9ad8\u6027\u80fd"),"\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u8fdb\u884c\u4e86\u5927\u91cf\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u7684\u4f18\u5316\uff0c\u56e0\u6b64\u6027\u80fd\u63d0\u5347\u6bd4\u8f83\u5927\uff0c\u4f46\u6bd4\u8f83\u5c40\u9650\u4e8e\u4e00\u4e9b\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4f18\u5316\u6b63\u5f0f\u9488\u5bf9\u8fd9\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u7ed3\u6784\u6216\u8005\u5f62\u5f0f\u8fdb\u884c\u4f18\u5316\u7684")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u5373\u65f6\u7f16\u8bd1"),"\uff0cTaichi\u63d0\u4f9b\u5373\u65f6\u7f16\u8bd1\u548c\u9884\u7f16\u8bd1\u4e24\u79cd\u65b9\u6848\uff0c\u5176\u4e2d\u9488\u5bf9\u5373\u65f6\u7f16\u8bd1\uff0c\u7531\u4e8e\u80fd\u591f\u77e5\u9053\u4e00\u4e9b\u8fd0\u884c\u65f6\u7684\u4fe1\u606f\uff0c\u56e0\u6b64Taichi\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u4f18\u5316")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u8de8\u5e73\u53f0\u90e8\u7f72"),"\uff0c\u5c06\u4e0a\u5c42\u7b97\u6cd5\u5168\u90e8\u8f6c\u6362\u4e3a\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u6709\u5229\u4e8e\u8de8\u5e73\u53f0\u90e8\u7f72\uff0c\u8fd9\u4e5f\u51cf\u8f7b\u4e86\u5f00\u53d1\u8005\u9488\u5bf9\u591a\u4e2a\u5e73\u53f0\u8fdb\u884c\u9002\u914d\u7684\u75db\u82e6\u8fc7\u7a0b"))),(0,n.kt)("p",null,"\u5176\u4ed6\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Academia"),"\uff0c\u5b66\u672f\u754c\u7684\u7814\u7a76\u5b9e\u73b0\u4e2d\uff0c\u5f80\u5f80\u56e0\u4e3a\u7f3a\u4e4f\u4f18\u5316\uff0c\u4e34\u65f6\u7684\u5b9e\u73b0\u65b9\u6848\uff0c\u5f80\u5f80\u5bfc\u81f4\u5f88\u96be\u590d\u7528\uff0cTaichi\u5e0c\u671b\u6539\u53d8\u8fd9\u4e2a\u5c40\u9762\uff0c\u4e00\u65b9\u9762\u901a\u8fc7\u4f18\u5316\u7684\u5e95\u5c42\u6280\u672f\u652f\u6301\uff0c\u4e00\u65b9\u9762\u63d0\u4f9b\u7edf\u4e00\u7684\u63a5\u53e3"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Apps & game engine integration"),"\uff0c\u7531\u4e8e\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u4f7f\u5f97Taichi\u5bb9\u6613\u8de8\u5e73\u53f0\uff0cTaichi\u53ef\u4ee5\u7f16\u8bd1\u4e00\u4e9b\u8de8\u5e73\u53f0\u7684\u5e93\u4f9b\u5176\u4ed6\u5e73\u53f0\u8c03\u7528\uff0c\u4f8b\u5982Taichi\u7684AOT\uff08Ahead of time\uff09\u6a21\u5757\u53ef\u4ee5\u6784\u5efa\u5e76\u4fdd\u5b58\u5728computer shaders\uff0c\u8fd9\u6837\u53ef\u4ee5\u88ab\u5176\u4ed6\u8fd0\u884c\u65f6\u8c03\u7528\uff0cAOT\u548cJIT\u662f\u4e24\u79cd\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"General-purpose computing"),"\uff0c\u867d\u7136\u65e9\u671f\u9762\u5411\u7279\u5b9a\u7684\u76ee\u6807\u5982\u7269\u7406\u6a21\u62df\uff0c\u4f46\u662f\u4e5f\u4f1a\u6709\u66f4\u591a\u7684\u901a\u7528\u8ba1\u7b97\u652f\u6301\uff0c\u4f8b\u5982TaichiSLAM"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Maybe a new frontend"),"\uff0c\u53ef\u4ee5\u5c06Python\u6539\u4e3a\u5176\u4ed6\u524d\u7aef")),(0,n.kt)("h4",{id:"7312-\u6280\u672f\u65b9\u6848"},"7.3.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,"\u4ee5\u4e0b\u4e3aTaichi\u8bed\u8a00\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"taichi-kernel",src:l(4081).Z,width:"3110",height:"1586"})),(0,n.kt)("p",null,"Taichi\u7684\u6838\u5fc3\u662f\u4e00\u4e2a\u7f16\u8bd1\u5668\uff08compiler\uff09\uff0c\u5728\u8fd9\u4e2a\u7f16\u8bd1\u5668\u4e2d\uff0c\u5b83\u9488\u5bf9\u7279\u5b9a\u7684\u4e00\u4e9b\u8ba1\u7b97\u4efb\u52a1\uff0c\u5982\u7269\u7406\u6a21\u62df\uff0c\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u7684\u7c7b\u578b\u7b49\u8fdb\u884c\u4f18\u5316\uff0c\u901a\u8fc7\u4fee\u6539\u548c\u8c03\u6574\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u7684\u5185\u5bb9\u5e03\u5c40\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u8ba1\u7b97\u7684\u7f13\u5b58\u5c40\u90e8\u6027\u66f4\u597d\uff0c\u540c\u65f6\u4e5f\u901a\u8fc7\u5411\u91cf\u5316\u7684\u6570\u636e\u7c7b\u578b\u7cfb\u7edf\uff0c\u4f7f\u5f97\u5e94\u7528\u7684\u5185\u5b58\u5360\u7528\u66f4\u5c0f\uff0c\u4ece\u800c\u4e5f\u51cf\u5c11\u5185\u5b58\u5bf9\u5e26\u5bbd\u7684\u5360\u7528\uff0c\u4e0d\u4ec5\u63d0\u9ad8\u4e86\u8ba1\u7b97\u6548\u7387\uff0c\u4e5f\u51cf\u5c11\u4e86\u5185\u5b58\u5360\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u76ee\u7684\uff0cTaichi\u5728\u524d\u7aef\u8bed\u8a00\u4e2d\uff08\u76ee\u524d\u662fPython\uff09\uff0c\u901a\u8fc7\u5143\u7f16\u7a0b\u5b9a\u4e49\u4e86\u7279\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'import taichi as ti\n\nti.init(arch=ti.gpu)\n\nn = 320\npixels = ti.field(dtype=float, shape=(n * 2, n))\n\n@ti.func\ndef complex_sqr(z):\n return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])\n\n@ti.kernel\ndef paint(t: float):\n for i, j in pixels: # Parallelized over all pixels\n c = ti.Vector([-0.8, ti.cos(t) * 0.2])\n z = ti.Vector([i / n - 1, j / n - 0.5]) * 2\n iterations = 0\n while z.norm() < 20 and iterations < 50:\n z = complex_sqr(z) + c\n iterations += 1\n pixels[i, j] = 1 - iterations * 0.02\n\ngui = ti.GUI("Julia Set", res=(n * 2, n))\n\ni = 0\nwhile gui.running:\n paint(i * 0.03)\n gui.set_image(pixels)\n gui.show()\n i = i + 1\n')),(0,n.kt)("p",null,"\u8fd9\u4e9b\u81ea\u5b9a\u4e49\u7c7b\u578b\u6784\u6210Taichi\u8bed\u8a00\uff0c\u5b83\u4eec\u501f\u52a9Python\u7684AST\u63a7\u5236\u80fd\u529b\uff0c\u751f\u6210\u5e26\u6765Taichi\u7c7b\u578b\u4fe1\u606f\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u7136\u540e\u5e95\u5c42\u7684\u7f16\u8bd1\u5668\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u7279\u5b9a\u7684\u4ee3\u7801\u4f18\u5316\u548c\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5176\u4e2d\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f16\u8bd1\u4f18\u5316\u8fc7\u7a0b\uff0cTaichi\u66f4\u662f\u9488\u5bf9\u4f8b\u5982\u7a00\u758f\u7ed3\u6784\u7b49\u7279\u5b9a\u7684\u8ba1\u7b97\u8fdb\u884c\u4e86\u5927\u91cf\u7684\u4ee3\u7801\u8c03\u6574\uff0c\u751f\u6210\u76f8\u5bf9\u4e8e\u524d\u7aef\u6570\u500d\u7684\u4ee3\u7801\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f46\u51cf\u5c11\u4e86\u4e0a\u5c42\u8bed\u8a00\u7684\u4ee3\u7801\u91cf\uff0c\u8fd8\u5bf9\u5176\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u505a\u4e86\u5927\u91cf\u7684\u8c03\u6574\uff0c\u4ee5\u63d0\u5347\u8ba1\u7b97\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u4e0a\u8ff0\u80fd\u529b\u7684\u5176\u4e2d\u6700\u91cd\u8981\u7684\u601d\u8def\u662f\u6570\u636e\u9a71\u52a8\uff0c\u5b83\u5c06\u4e00\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u8868\u8ff0\u4ece\u7b97\u6cd5\u6307\u4ee4\u5f53\u4e2d\u5206\u79bb\u51fa\u6765\uff0c\u4ece\u800c\u4f7f\u5f97\u7f16\u8bd1\u5668\u80fd\u591f\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5df2\u751f\u6210\u66f4\u52a0\u4f18\u5316\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u3002\u5f53\u7136\uff0c\u8fd9\u6837\u7684\u4e0a\u4e0b\u6587\u77e5\u8bc6\u5fc5\u987b\u9488\u5bf9\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u5e76\u4e0d\u662f\u5bf9\u6240\u6709\u7b97\u6cd5\u90fd\u80fd\u5b9e\u73b0\u4f18\u5316\u3002"),(0,n.kt)("h4",{id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0"},"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eReality World\u7684\u4ea7\u54c1\u65b9\u5411\uff0cTaichi\u5b58\u5728\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u7b97\u6cd5\u800c\u4e0d\u662f\u903b\u8f91"),"\uff0c\u5c3d\u7ba1Taichi\u53ef\u4ee5\u51cf\u5c11\u4ee3\u7801\u91cf\uff0c\u4f46\u662f\u5b83\u7684\u6838\u5fc3\u662f\u9762\u5411\u7279\u5b9a\u7b97\u6cd5\u7ed3\u6784\u7684\u4f18\u5316\uff0c\u5b83\u4e0d\u6d89\u53ca\u903b\u8f91\u5c42\u9762\u7684\u8003\u8651\uff0c\u4f8b\u5982\u600e\u4e48\u5e2e\u52a9\u5f00\u53d1\u8005\u5b9e\u73b0\u4ea4\u4e92\u903b\u8f91\uff1b")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u652f\u6301\u52a8\u6001\u521b\u5efa")))),(0,n.kt)("p",null,"Taichi\u6700\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u5e95\u5c42\u4f18\u5316\u7279\u522b\u91cd\uff0c\u8fd9\u4e5f\u662f\u5b9e\u73b0\u6027\u80fd\u63d0\u5347\u7684\u5173\u952e\uff0c\u800c\u8fd9\u4e00\u5c42\u4f18\u5316\u5b9e\u73b0\u4e8eC++\u4e2d\uff0c\u56e0\u6b64Taichi\u7684\u8fd0\u884c\u65f6\u7a0b\u5e8f\u53ea\u80fd\u662f\u4e24\u79cd\u60c5\u51b5\u4e4b\u4e00\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u662f\u8fd0\u884c\u65f6\u5e26\u4e0aTaichi\u7684\u7f16\u8bd1\u5668\uff0c\u8fd9\u79cd\u60c5\u51b5\u53ef\u4ee5\u652f\u6301\u4efb\u610f\u7684\u7b97\u6cd5\u4fee\u6539\uff0c\u8fd9\u4e5f\u662fPC\u4e0a\u7684\u4e00\u822c\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ol"},"\u5982\u679c\u8fd0\u884c\u65f6\u6ca1\u6709Taichi\u7684\u7f16\u8bd1\u73af\u5883\uff0c\u9700\u8981\u63d0\u524d\u5c06Taichi\u7a0b\u5e8f\u7f16\u8bd1\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7a0b\u5e8f\u4e00\u65e6\u90e8\u7f72\u5c31\u4e0d\u80fd\u4fee\u6539")),(0,n.kt)("p",null,"\u7b2c\u4e00\u79cd\u6a21\u5f0f\u662f\u6bd4\u8f83\u6162\u7684\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u9700\u8981\u5373\u65f6\u7f16\u8bd1\uff0c\u5e76\u4e14Taichi\u7684\u7f16\u8bd1\u8fc7\u7a0b\u76f8\u5bf9\u4e8e\u4e00\u822c\u7684\u7a0b\u5e8f\u7f16\u8bd1\u8981\u66f4\u52a0\u590d\u6742\uff0c\u56e0\u6b64\u8fd9\u79cd\u6a21\u5f0f\u4e0d\u9002\u5408\u5b9e\u65f6\u7684\u6e38\u620f\u5f15\u64ce\u7cfb\u7edf\uff1b\u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u6a21\u5f0f\uff0c\u7531\u4e8e\u7b97\u6cd5\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u5e95\u5c42\u673a\u5668\u8bed\u8a00\uff0c\u56e0\u6b64\u7a0b\u5e8f\u4e0d\u80fd\u518d\u88ab\u52a8\u6001\u4fee\u6539\uff0c\u9664\u975eTaichi\u5c06\u6240\u6709\u7684\u89e3\u91ca\u8fc7\u7a0b\u4e0a\u79fb\u81f3\u811a\u672c\u8bed\u8a00\uff08Python\uff09\u8fd9\u4e00\u5c42\uff0c\u4f46\u5c3d\u7ba1\u5982\u6b64\uff0c\u867d\u7136\u80fd\u591f\u652f\u6301\u52a8\u6001\u7a0b\u5e8f\uff0c\u4f46\u662f\u4e0a\u5c42\u7684\u89e3\u91ca\u8fc7\u7a0b\u4ecd\u7136\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"Reality World\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898\u7684\u65b9\u6cd5\u662f\u53ea\u63d0\u4f9b\u811a\u672c\u8bed\u8a00\u5c42\u9762\u7684\u4f18\u5316\u6216\u8005\u89e3\u91ca\uff0c\u800c\u4e3a\u4e86\u4fdd\u6301\u6027\u80fd\uff0cRW\u4e0d\u4f1a\u8fdb\u884c\u4efb\u4f55\u5e95\u5c42\u7684\u7279\u5b9a\u4f18\u5316\uff0c\u540c\u65f6\u56e0\u4e3aRW\u8981\u4fdd\u6301\u8ba1\u7b97\u7684\u901a\u7528\u6027\uff0c\u4ee5\u53ca\u5b83\u7684\u76ee\u6807\u662f\u9762\u5411\u903b\u8f91\u7ed3\u6784\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u53bb\u505a\u8fd9\u4e00\u5c42\uff0c\u53ea\u9700\u8981\u901a\u8fc7\u811a\u672c\u8bed\u8a00\u5c42\u7684DSL\u4f7f\u5f97\u5f00\u53d1\u8fc7\u7a0b\u8db3\u591f\u7b80\u5355\u5c31\u884c\uff0cRW\u7684\u67b6\u6784\u66f4\u50cfUnity DOTS\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e9bReality Create\u7684\u5185\u7f6e\u56fa\u5b9a\u7b97\u6cd5\u9002\u5408\u7528Taichi\u7f16\u8bd1\u5417\uff1f")),(0,n.kt)("p",null,"Taichi\u7684\u53e6\u5916\u4e00\u4e2a\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u7f16\u8bd1\u662f\u8ddf\u7b97\u6cd5\u6570\u636e\u7ed3\u6784\u76f8\u5173\u7684\uff0c\u4f8b\u5982\u5206\u914d\u7684\u5217\u8868\u662f5\u4e2a\u8fd8\u662f10\u4e2a\u5143\u7d20\uff0c\u8fd9\u4e9b\u90fd\u4f1a\u8ddf\u7f16\u8bd1\u5668\u8026\u5408\uff0c\u5b83\u662f\u4e00\u4e2a\u4e0e\u6570\u636e\u6709\u5173\u7684\u4f18\u5316\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e0e\u62bd\u8c61\u7ed3\u6784\u6709\u5173\u7684\u4f18\u5316\uff0c\u6216\u8005\u8fd9\u4e9b\u6570\u503c\u5373\u4f7f\u4e0d\u662f\u6765\u6e90\u4e8e\u8fd0\u884c\u65f6\uff0c\u4e5f\u662f\u4e0e\u7c7b\u578b\u7684\u5b9a\u4e49\u6709\u5173\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u5b83\u53ea\u9002\u5408\u4e0e\u56fa\u5b9a\u7684\u7b97\u6cd5\u5b9e\u73b0\u3002"),(0,n.kt)("h4",{id:"7314-\u5bf9\u6bd4"},"7.3.1.4 \u5bf9\u6bd4"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null}),(0,n.kt)("th",{parentName:"tr",align:null},"Taichi"),(0,n.kt)("th",{parentName:"tr",align:null},"Creation Script"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u76ee\u6807"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u5e95\u5c42\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u4e0a\u5c42\u8bed\u4e49\u3001\u529f\u80fd\u3001\u903b\u8f91")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u7f16\u8bd1\u7c7b\u578b"),(0,n.kt)("td",{parentName:"tr",align:null},"C++\u4fa7"),(0,n.kt)("td",{parentName:"tr",align:null},"\u811a\u672c\u4fa7")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u4f18\u5316\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u6df1\u5ea6\u4f18\u5316\uff0c\u4f8b\u5982\u9488\u5bf9\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u8fdb\u884c\u6df1\u5ea6\u7684\u4f18\u5316"),(0,n.kt)("td",{parentName:"tr",align:null},"\u4ec5\u9488\u5bf9\u5f00\u53d1\u590d\u6742\u7684\u8fdb\u884c\u4e00\u5b9a\u7684\u4f18\u5316\uff0c\u4f8b\u5982\u7b80\u5316\u5e76\u884c\u8ba1\u7b97\uff0c\u5f15\u5165\u4e00\u4e9b\u5feb\u6377\u53d8\u91cf\uff0c\u4e00\u4e9b\u8fb9\u754c\u9650\u5236\u7b49")))),(0,n.kt)("h3",{id:"732-modular-ai"},"7.3.2 Modular AI"),(0,n.kt)("h4",{id:"7321-\u65b0\u601d\u60f3"},"7.3.2.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"\u6211\u4eec\u9700\u8981\u4e0b\u4e00\u4ee3\u7f16\u8bd1\u5668\u548c\u7f16\u7a0b\u8bed\u8a00\u6765\u5e2e\u52a9\u89e3\u51b3\u8fd9\u79cd\u788e\u7247\u5316"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u8ba1\u7b97\u673a\u884c\u4e1a\u9700\u8981\u66f4\u597d\u7684\u786c\u4ef6\u62bd\u8c61\uff0c\u786c\u4ef6\u62bd\u8c61\u662f\u5141\u8bb8\u8f6f\u4ef6\u521b\u65b0\u7684\u65b9\u5f0f\uff0c\u4e0d\u9700\u8981\u8ba9\u6bcf\u79cd\u4e0d\u540c\u8bbe\u5907\u53d8\u5f97\u8fc7\u4e8e\u4e13\u7528\u5316\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u6211\u4eec\u9700\u8981\u652f\u6301\u5f02\u6784\u8ba1\u7b97\uff0c\u56e0\u4e3a\u8981\u5728\u4e00\u4e2a\u6df7\u5408\u8ba1\u7b97\u77e9\u9635\u91cc\u505a\u77e9\u9635\u4e58\u6cd5\u3001\u89e3\u7801JPEG\u3001\u975e\u7ed3\u6784\u5316\u8ba1\u7b97\u7b49\u7b49\u3002\u7136\u540e\uff0c\u8fd8\u9700\u8981\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u8bed\u8a00\uff0c\u4ee5\u53ca\u666e\u901a\u4eba\u4e5f\u53ef\u4ee5\u7528\u7684\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5177\u5907\u9ad8\u8d28\u91cf\u3001\u9ad8\u53ef\u9760\u6027\u548c\u9ad8\u5ef6\u5c55\u6027\u7684\u67b6\u6784\u3002")),(0,n.kt)("p",null,"\u5728GCC\u4e4b\u524d\uff0c\u6bcf\u5bb6\u516c\u53f8\u90fd\u8981\u5f00\u53d1\u81ea\u5df1\u7684\uff1a\u524d\u7aef->\u4f18\u5316\u5668->\u540e\u7aef\uff0c\u6bcf\u5bb6\u516c\u53f8\u901a\u5e38\u53ea\u5f00\u53d1\u4e00\u79cd\u524d\u7aef\u548c\u4e00\u79cd\u540e\u7aef\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff1bGCC\u5c06\u4e09\u8005\u5206\u79bb\uff0c\u51cf\u5c11\u4e86\u788e\u7247\u5316\uff1b"),(0,n.kt)("p",null,"LVVM\u662f\u4e00\u7cfb\u5217\u5e93\u7684\u7ec4\u5408\uff0c\u5b83\u7684\u6a21\u5757\u6027\u51f8\u663e\u4e86\u63a5\u53e3\u548c\u7ec4\u4ef6\u7684\u91cd\u8981\u6027\uff0cKey insight\uff1aCompilers as libraries\uff0cnot an app"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Enable embedding in other applications"),(0,n.kt)("li",{parentName:"ul"},"Mix and match components"),(0,n.kt)("li",{parentName:"ul"},"No hard coded lowering pipeline ")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cLLVM\u8fd8\u8ba9JIT\u7f16\u8bd1\uff08\u5373\u65f6\u7f16\u8bd1\uff09\u80fd\u6709\u66f4\u591a\u4f5c\u4e3a\u3002\u867d\u7136JIT\u7f16\u8bd1\u5668\u5df2\u7ecf\u662f\u4e00\u79cd\u8457\u540d\u7684\u6280\u672f\uff0c\u4f46\u5b83\u4e00\u5f00\u59cb\u662f\u7528\u5728\u5176\u4ed6\u5730\u65b9\u3002\u6709\u4e86LLVM\u4ee5\u540e\uff0c\u82af\u7247\u8bbe\u8ba1\u3001HLS\u5de5\u5177\u3001\u56fe\u5f62\u5904\u7406\u3001\u90fd\u66f4\u52a0\u4fbf\u6377\uff0c\u8fd8\u4fc3\u8fdb\u4e86CUDA\u548cGPGPU\u7684\u8bde\u751f\uff0c\u8fd9\u4e9b\u90fd\u662f\u5f88\u4e86\u4e0d\u8d77\u7684\u6210\u5c31\u3002\u4f46\u66f4\u91cd\u8981\u7684\u7684\u662f\uff0cLLVM\u6574\u5408\u4e86\u7684\u788e\u7247\u5316\u3002LLVM\u51fa\u73b0\u4e4b\u524d\u6709\u5f88\u591a\u79cdJIT\u7f16\u8bd1\u5668\u6846\u67b6\uff0c\u4f46LLVM\u7684\u5b58\u5728\uff0c\u63d0\u5347\u4e86JIT\u7f16\u8bd1\u5668\u7684\u57fa\u7ebf\uff0c\u8ba9\u5b83\u8ff8\u53d1\u51fa\u66f4\u591a\u53ef\u80fd\uff0c\u4e5f\u8ba9\u884c\u4e1a\u53ef\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u5c42\u6b21\u7684\u521b\u65b0\u3002"),(0,n.kt)("p",null,"LLVM\u7684\u4e3b\u8981\u7f3a\u70b9\u662f\u4e0d\u592a\u9002\u5408\u505a\u5e76\u884c\u5904\u7406\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u52a0\u901f\u5668\u662f\u4ec0\u4e48\uff1f\u53ef\u4ee5\u628a\u5b83\u9ad8\u5ea6\u7b80\u5316\u6210\u4e24\u4e2a\u90e8\u5206:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u4e2a\u662f\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u3002\u56e0\u4e3a\u7845\u672c\u8eab\u7684\u7ed3\u6784\u4e5f\u662f\u5e76\u884c\u7684\uff0c\u52a0\u901f\u5668\u8981\u7528\u5230\u8bb8\u591a\u6676\u4f53\u7ba1\uff0c\u4e5f\u5c31\u9700\u8981\u5f88\u591a\u7845\u6765\u8fbe\u6210\u8fd9\u79cd\u5e76\u884c\u5904\u7406\u80fd\u529b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u4e2a\u90e8\u5206\u8d77\u63a7\u5236\u4f5c\u7528\u3002\u5b83\u7684\u540d\u5b57\u4e0d\u592a\u7edf\u4e00\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u63a7\u5236\u5904\u7406\u5668\uff08Control Processor\uff09\u201d\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u5e8f\u5217\u5668\uff08Sequencer\uff09\u201d\u3002\u6709\u4eba\u5e0c\u671b\u5b83\u5c0f\u4e00\u70b9\uff0c\u6240\u4ee5\u4f1a\u505a\u72b6\u6001\u673a\u7136\u540e\u5d4c\u5165\u5bc4\u5b58\u5668\u3002\u8fd9\u4e2a\u90e8\u5206\u57fa\u672c\u4e0a\u8d77\u5230\u7f16\u6392\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u7684\u4f5c\u7528\u3002\u5982\u679c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u662f\u4e00\u4e2a\u5927\u578b\u77e9\u9635\u4e58\u6cd5\u5355\u5143\uff0c\u63a7\u5236\u5904\u7406\u5668\u5c31\u4f1a\u547d\u4ee4\u5b83\u6267\u884c\u4e00\u4e9b\u5b8f\u64cd\u4f5c\uff0c\u4f8b\u5982\u4ece\u8fd9\u4e2a\u5185\u5b58\u533a\u52a0\u8f7d\u3001\u6267\u884c\u67d0\u4e00\u64cd\u4f5c\u3001\u6267\u884c\u53e6\u4e00\u64cd\u4f5c\u3001\u66f4\u65b0SRAM\u7b49\u3002")),(0,n.kt)("p",null,"\u8fd8\u6709\u4e00\u4e9b\u52a0\u901f\u5668\u5f88\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u63a7\u5236\u903b\u8f91\u548c\u8ba1\u7b97\u4e4b\u95f4\u7684\u6bd4\u7387\u4e5f\u5404\u6709\u4e0d\u540c\u3002\u6b63\u5982Patterson\u548cHennessy\u6240\u8bf4\u90a3\u6837\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u70b9\uff0c\u4f46\u6bcf\u4e2a\u70b9\u90fd\u9700\u8981\u4e00\u5b9a\u7a0b\u5ea6\u7684\u7f16\u6392\u3002\u4f46\u4eba\u4eec\u5e38\u5e38\u5fd8\u8bb0\u5176\u4ed6\u4e00\u4e9b\u76f8\u5173\u7684\u5de5\u4f5c\uff0c\u6bd4\u5982\uff0c\u4f60\u4e0d\u6b62\u9700\u8981\u7f16\u6392\uff0c\u8fd8\u8981\u89e3\u51b3\u542f\u52a8\u95ee\u9898\uff0c\u6bd4\u5982\u7535\u6e90\u7ba1\u7406\uff0c\u8fd8\u8981\u4e0d\u65ad\u8c03\u8bd5\u6392\u9519\u3002\u5982\u679c\u4f60\u60f3\u505a\u5f97\u5c3d\u5584\u5c3d\u7f8e\uff0c\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u90e8\u4ef6\u8fdb\u884c\u7f16\u7a0b\uff1b\u5982\u679c\u4f60\u5e0c\u671b\u7b80\u5355\u4e00\u70b9\uff0c\u53ef\u4ee5\u628a\u8fd9\u4e9b\u90e8\u4ef6\u505a\u5f97\u5f88\u5c0f\u3002"),(0,n.kt)("p",null,"\u5f53\u63a7\u5236\u5904\u7406\u5668\u548c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u90fd\u9f50\u5907\u4e4b\u540e\uff0c\u600e\u4e48\u7ed9\u5b83\u4eec\u8f93\u5165\u548c\u8f93\u51fa\u4fe1\u606f\uff1f\u8fd9\u65f6\u5c31\u9700\u8981\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u3002\u6839\u636e\u62bd\u8c61\u7b49\u7ea7\u7684\u4e0d\u540c\uff0c\u8fd9\u4e2a\u5185\u5b58\u63a5\u53e3\u53ef\u4ee5\u662f\u5c0f\u578b\u7684block\uff0c\u4e5f\u53ef\u4ee5\u662f\u652f\u6301\u7269\u8054\u7f51\u7684\u82af\u7247\uff0c\u8fd9\u6837\u52a0\u901f\u5668\u5c31\u53ef\u4ee5\u548c\u8be5\u82af\u7247\u8fde\u63a5\u6574\u4e2a\u7f51\u7edc\u901a\u4fe1\u4e86\u3002\u8fd9\u91cc\u9700\u8981\u7528\u5230\u50cfAMBA\u6216\u7c7b\u4f3c\u7684\u6280\u672f\u3002"),(0,n.kt)("p",null,"\u4f60\u53ef\u4ee5\u5728\u66f4\u5927\u7684\u7c92\u5ea6\uff08granularity\uff09\u4e0a\u6784\u5efa\u6574\u4e2a ASIC\uff0c\u6240\u6709\u7684 ASIC \u90fd\u5728\u52a0\u901f\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4f60\u53ef\u80fd\u6b63\u5728\u4e0e PCI \u901a\u4fe1\uff0c\u5e76\u4e14\u6b63\u5728\u82af\u7247\u5916\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u4f46\u8fd9\u79cd\u201c\u6211\u6709\u4e00\u4e2a\u63a7\u5236\u5904\u7406\u5668\uff0c\u6709\u4e00\u4e2a\u8ba1\u7b97\u5355\u5143\u548c\u6709\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u201d\u7684\u6a21\u578b\uff0c\u662f\u6784\u5efa\u8fd9\u4e9b\u4e1c\u897f\u7684\u4e00\u79cd\u975e\u5e38\u6807\u51c6\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u6211\u7684\u4e3b\u5f20\u662f\u521b\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u53d1\u5c55\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u901a\u8fc7\u4e0d\u65ad\u521b\u65b0\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u6211\u4eec\u5e94\u8be5\u5bf9\u6b64\u8fc7\u7a0b\u6240\u9700\u7684\u4e00\u5207\u5b9e\u884c\u6807\u51c6\u5316\uff0c\u901a\u8fc7\u6807\u51c6\u5316\u80fd\u591f\u5feb\u901f\u5b8c\u6210\u5de5\u4f5c\uff0c\u7136\u540e\u5c31\u53ef\u4ee5\u628a\u65f6\u95f4\u82b1\u5728\u771f\u6b63\u91cd\u8981\u7684\u4e8b\u60c5\u4e0a\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6709\u4e00\u79cd\u76f8\u5bf9\u8f83\u65b0\u7684\u7f16\u8bd1\u5668\u6280\u672fMLIR\u53ef\u4ee5\u5e2e\u4e0a\u5fd9\u3002\u4f60\u53ef\u4ee5\u628aMLIR\u770b\u4f5c\u662f\u4e00\u4e2a\u5143\u7f16\u8bd1\u5668\uff0c\u5b83\u5141\u8bb8\u4f60\u975e\u5e38\u5feb\u901f\u5730\u6784\u5efa\u52a0\u901f\u5668/\u7f16\u8bd1\u5668\u3002MLIR\u7684\u5168\u79f0\u662f\u201c\u591a\u7ea7\u4e2d\u95f4\u8868\u793a\u201d\uff0c\u5b83\u652f\u6301\u6784\u5efa\u5206\u5c42\u7f16\u8bd1\u5668\uff0c\u5e76\u4ee5\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u65b9\u5f0f\u6784\u5efa\uff0c\u540c\u65f6\u4fdd\u7559\u9886\u57df\u7684\u590d\u6742\u6027\u3002\u7136\u540e\uff0c\u4f7f\u7528MLIR\u63d0\u4f9b\u7684\u5927\u91cf\u5e93\u548c\u4f8b\u7a0b\u6765\u505a\u4e00\u4e9b\u4e8b\u60c5\uff0c\u6bd4\u5982\uff0c\u7528\u591a\u9762\u4f53\u7f16\u8bd1\u5668\u6765\u505a\u5faa\u73af\u5c55\u5f00\u548c\u5faa\u73af\u878d\u5408\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\uff0c\u6211\u4eec\u5f00\u59cb\u770b\u5230\u7684\u662f\uff0cMLIR\u5f00\u59cb\u7edf\u4e00\u5f02\u6784\u8ba1\u7b97\u7684\u4e16\u754c\uff0c\u8fd9\u4e5f\u662f\u6211\u5e0c\u671b\u770b\u5230\u7684\u3002\u6240\u6709\u7684\u5927\u516c\u53f8\u73b0\u5728\u90fd\u5728\u4e0d\u540c\u7a0b\u5ea6\u5730\u4f7f\u7528MLIR\uff0c\u6211\u8ba4\u4e3a\uff0c\u5efa\u7acb\u5728RISC-V\u4e4b\u4e0a\u7684MLIR\u5f88\u6709\u5fc5\u8981\uff0c\u56e0\u4e3a\u4e00\u65e6\u5f00\u59cb\u4ece\u4e0b\u5f80\u4e0a\u6574\u5408\u884c\u4e1a\uff0c\u5c31\u53ef\u4ee5\u5f00\u59cb\u628a\u8d8a\u6765\u8d8a\u591a\u7684\u5c42\uff08layer\uff09\u62c9\u5230\u4e00\u8d77\uff0c\u91cd\u590d\u4f7f\u7528\u66f4\u591a\u7684\u6280\u672f\u3002\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4e13\u6ce8\u5728\u5806\u6808\u4e2d\u66f4\u6709\u8da3\u7684\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u4e00\u904d\u53c8\u4e00\u904d\u5730\u91cd\u65b0\u53d1\u660e\u8f6e\u5b50\u3002"),(0,n.kt)("p",null,"\u4e5f\u8bb8\u4f60\u4e0d\u4f1a\u611f\u5230\u60ca\u8bb6\uff0c\u4f46\u6211\u8ba4\u4e3a\u7b54\u6848\u662f\u7f16\u8bd1\u5668\uff0c\u8fd9\u662f\u771f\u6b63\u8981\u8d70\u7684\u4e00\u6761\u8def\u3002"),(0,n.kt)("p",null,"\u4f5c\u4e3a\u7f16\u8bd1\u5668\u7f16\u7a0b\u8bed\u8a00\u4ece\u4e1a\u8005\uff0c\u6211\u8ba4\u4e3a\u786c\u4ef6\u8bbe\u8ba1\u8fd9\u4e2a\u9886\u57df\u5df2\u7ecf\u5230\u4e86\u91cd\u65b0\u8bc4\u4f30\u7684\u5730\u6b65\u3002\u6574\u4e2a\u9886\u57df\u662f\u5efa\u7acb\u5728\u4e24\u79cd\u6280\u672f\u4e4b\u4e0a\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e3b\u8981\u662f\u4e00\u79cd\u53eb\u505aVerilog\u7684\u6280\u672f\uff0c\u4f60\u5927\u6982\u7387\u53ef\u80fd\u4e0d\u559c\u6b22Verilog\u3002\u5b83\u6709\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u6807\u51c6\uff0c\u5f53\u6211\u770b\u5b83\u65f6\uff0c\u4e0d\u77e5\u9053\u5b83\u662f\u88ab\u8bbe\u8ba1\u6210\u4e00\u4e2aIR\uff0c\u4e5f\u5373\u4e00\u4e2a\u4e0d\u540c\u5de5\u5177\u4e4b\u95f4\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u8fd8\u662f\u88ab\u8bbe\u8ba1\u6210\u8ba9\u4eba\u4eec\u76f4\u63a5\u4e66\u5199\u7684\u4e1c\u897f\u3002\u6211\u8ba4\u4e3a\uff0c\u5b83\u5728\u8fd9\u4e24\u65b9\u9762\u90fd\u5f88\u5931\u8d25\uff0c\u5b83\u771f\u7684\u5f88\u96be\u4f7f\u7528\uff0c\u5bf9\u5de5\u5177\u6765\u8bf4\u4e5f\u5f88\u96be\u751f\u6210\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0cEDA\u5de5\u5177\u3001\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u5df2\u7ecf\u975e\u5e38\u6210\u719f\uff0c\u5b83\u4eec\u975e\u5e38\u6807\u51c6\u5316\uff0c\u6709\u5f88\u591a\u5927\u516c\u53f8\u6b63\u5728\u63a8\u52a8\u548c\u5f00\u53d1\u8fd9\u4e9b\u5de5\u5177\u3002\u4f46\u4ed6\u4eec\u7684\u521b\u65b0\u901f\u5ea6\u5e76\u4e0d\u5feb\uff0c\u8bbe\u8ba1\u65f6\u5e76\u4e0d\u6ce8\u91cd\u53ef\u7528\u6027\u3002\u5b83\u4eec\u6bd4\u52a0\u901f\u5668\u7f16\u8bd1\u5668\u8981\u5dee\u5f97\u591a\uff0c\u7edd\u5bf9\u4e0d\u662f\u4ee5\u8f6f\u4ef6\u67b6\u6784\u7684\u6700\u4f73\u5b9e\u8df5\u6765\u6784\u5efa\u7684\uff0c\u800c\u4e14\u6210\u672c\u4e5f\u975e\u5e38\u9ad8\u3002\u56e0\u6b64\uff0c\u8fd9\u4e2a\u9886\u57df\u6709\u5de8\u5927\u7684\u521b\u65b0\u673a\u4f1a\u3002"),(0,n.kt)("p",null,"\u6211\u4e0d\u662f\u7b2c\u4e00\u4e2a\u8ba4\u8bc6\u5230\u8fd9\u4e00\u70b9\u7684\u4eba\u3002\u5728\u5f00\u6e90\u793e\u533a\uff0c\u5df2\u7ecf\u6784\u5efa\u4e86\u4e00\u5806\u5de5\u5177\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u8fd9\u4e9b\u5de5\u5177\u975e\u5e38\u68d2\uff0c\u6bd4\u5982Verilator\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0cYosys\u662f\u53e6\u4e00\u4e2a\u975e\u5e38\u68d2\u7684\u5de5\u5177\uff0c\u5b83\u6709\u5f88\u597d\u7684\u5b9a\u7406\u8bc1\u660e\u5668\uff08Theorem Prover\uff09\u3002"),(0,n.kt)("p",null,"\u6211\u7684\u62c5\u5fe7\u5728\u4e8e\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u7406\u60f3\u76ee\u6807\u662f\u8bd5\u56fe\u50cf\u4e13\u6709\u5de5\u5177\u4e00\u6837\u597d\uff0c\u800c\u6211\u5e76\u4e0d\u771f\u7684\u8ba4\u4e3a\u4e13\u6709\u5de5\u5177\u6709\u90a3\u4e48\u597d\u3002\u53e6\u5916\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u8bbe\u8ba1\u8005\u5e76\u6ca1\u6709\u5408\u4f5c\u3002\u6bcf\u4e2a\u5de5\u5177\u90fd\u5728\u9075\u5faa\u5355\u4e00\u50f5\u5316\u7684\u65b9\u6cd5\uff0c\u6ca1\u6709\u5b9e\u73b0\u5927\u7a0b\u5ea6\u7684\u6a21\u5757\u5316\u6216\u91cd\u590d\u4f7f\u7528\uff0c\u53ef\u4ee5\u4ece\u5176\u4e2d\u4e00\u4e9b\u5de5\u5177\u4e2d\u5f97\u5230\u7f51\u7edc\u5217\u8868\uff0c\u7528\u5b83\u6765\u89e3\u6790\u4e00\u4e9bVerilog\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\u4f46\u662f\uff0c\u5b83\u4e0d\u662f\u7531\u57fa\u4e8e\u5e93\u7684\u8bbe\u8ba1\u6784\u5efa\uff0c\u4e0eLLVM\u4e4b\u7c7b\u7684\u4e1c\u897f\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u8981\u521b\u5efa\u5728\u8bed\u6cd5\u4e0a\u6b63\u786e\uff0c\u5e76\u4e14\u80fd\u8868\u8fbe\u4f60\u60f3\u8981\u7684\u4e1c\u897f\u7684Verilog\u975e\u5e38\u56f0\u96be\u3002\u6b64\u5916\uff0c\u56e0\u4e3a\u8bb8\u591a\u4e0eVerilog\u6709\u5173\u7684\u5de5\u5177\u90fd\u6709\u70b9\u5947\u602a\uff0c\u800c\u4e14\u5f88\u96be\u9ad8\u8d28\u91cf\u5730\u9884\u6d4b\u3002\u751f\u6210\u4e0e\u5de5\u5177\u517c\u5bb9\u7684Verilog\u662f\u6bcf\u4e2a\u524d\u7aef\u5de5\u5177\u90fd\u5fc5\u987b\u91cd\u65b0\u53d1\u660e\u7684\u4e00\u95e8\u9ed1\u79d1\u6280\u3002\u56e0\u6b64\uff0c\u5728\u5806\u6808\u4e2d\u771f\u7684\u7f3a\u5931\u4e86\u4e00\u79cd\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u5141\u8bb8\u4eba\u4eec\u5728\u7f16\u7a0b\u6a21\u578b\u6c34\u5e73\u4e0a\u8fdb\u884c\u521b\u65b0\uff0c\u5e76\u5141\u8bb8\u4eba\u4eec\u627e\u5230\u65b9\u6cd5\u8ba9\u6240\u6709\u5de5\u5177\u90fd\u63a5\u53d7\u5b83\u3002"),(0,n.kt)("p",null,'\u6709\u4e00\u4e2a\u53ebCIRCT\u7684\u65b0\u5f00\u6e90\u9879\u76ee\u6b63\u8bd5\u56fe\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002CIRCT\u7684\u5168\u79f0\u662f"Circuit IR for Compilers and Tools\uff08\u7f16\u8bd1\u5668\u548c\u5de5\u5177\u7684Circuit IR\uff09"\uff0c\u5b83\u6784\u5efa\u5728MLIR\u548cLLVM\u4e4b\u4e0a\u3002CIRCT\u793e\u533a\u7684\u76ee\u7684\u662f\u63d0\u5347\u6574\u4e2a\u786c\u4ef6\u8bbe\u8ba1\u4e16\u754c\uff0c\u4fc3\u8fdb\u7f16\u7a0b\u6a21\u578b\u7684\u521b\u65b0\uff0c\u5e76\u542f\u7528\u4e00\u5957\u65b0\u7684\u6a21\u5757\u5316\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u3002\u5b83\u786e\u5b9e\u8fd0\u7528\u4e86\u5f88\u591a\u6211\u4eec\u5230\u76ee\u524d\u4e3a\u6b62\u4e00\u76f4\u5728\u8ba8\u8bba\u7684\u57fa\u4e8e\u5e93\u7684\u6280\u672f\u3002'),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u7ec4\u5408\u7684\u57fa\u4e8e\u5e93\u7684\u5de5\u5177\u94fe\uff0c\u53ef\u4ee5\u5efa\u7acb\u6709\u8da3\u7684\u65b0\u7684\u5f39\u6027\u63a5\u53e3\u8fde\u63a5\uff0c\u4f60\u53ef\u4ee5\u5efa\u7acbChisel\u793e\u533a\u6b63\u5728\u63a2\u7d22\u7684\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u7528\u5b83\u6765\u52a0\u901fChisel\u6d41\u7a0b\u3002\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\uff0c\u53ef\u4ee5\u8ba9\u5f88\u591a\u4eba\u4e00\u8d77\u5de5\u4f5c\uff0c\u63a8\u52a8\u4e0d\u540c\u65b9\u5f0f\u7684\u521b\u65b0\u3002\u6211\u4eec\u6b63\u5728\u5efa\u7acb\u4e00\u4e2a\u771f\u6b63\u4f1f\u5927\u7684\u5c0f\u4e16\u754c\uff0c\u8ba9\u5173\u5fc3\u786c\u4ef6\u7f16\u8bd1\u5668\u7684\u4eba\u5728\u4e00\u8d77\u5de5\u4f5c\uff0c\u8fd9\u5f88\u6709\u8da3\u3002\u8fd9\u9879\u5de5\u4f5c\u4ecd\u5904\u4e8e\u65e9\u671f\uff0c\u76ee\u6807\u662f\u66f4\u5feb\u5730\u6784\u5efa\u52a0\u901f\u5668\uff0c\u8ba9\u52a0\u901f\u5668\u53d8\u5f97\u66f4\u5feb\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Modular,")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"composable &")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"layered architecture")," is what the world of AI needs, and ",(0,n.kt)("strong",{parentName:"li"},"we are building it for everyone."))),(0,n.kt)("h4",{id:"7322-challenges"},"7.3.2.2 Challenges"),(0,n.kt)("p",null,"Compiling an AI graph is actually quite different from traditional compilation problems. "),(0,n.kt)("p",null,"An AI graph contains two things: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"the graph topology (how the layers are interconnected) and "),(0,n.kt)("li",{parentName:"ul"},"the model weights (parameters associated with specific layers). ")),(0,n.kt)("p",null,"In terms of size, the graph topology is on the order of kilobytes, whereas weights are on the order of megabytes and gigabytes. For example, look at some of the bigger models released by Meta. The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/facebookresearch/metaseq/tree/main/projects/OPT"},"Open Pre-trained Transformers")," have 30B, 66B, or even 175B+ parameters, which equates to 100+ gigabytes of weights. There are even larger models like ",(0,n.kt)("a",{parentName:"p",href:"https://www.deepmind.com/blog/language-modelling-at-scale-gopher-ethical-considerations-and-retrieval"},"Gopher")," or ",(0,n.kt)("a",{parentName:"p",href:"https://www.microsoft.com/en-us/research/blog/using-deepspeed-and-megatron-to-train-megatron-turing-nlg-530b-the-worlds-largest-and-most-powerful-generative-language-model/"},"Megatron")," too."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR in the Modular compilation stack")),(0,n.kt)("p",null,"The Modular stack leverages the ",(0,n.kt)("a",{parentName:"p",href:"http://mlir.llvm.org/"},"MLIR compiler infrastructure")," to represent and transform AI models, including AI operator graphs (for multiple frameworks), mid-level runtime primitives, and low-level machine code generation. Our team has many of the ",(0,n.kt)("a",{parentName:"p",href:"https://arxiv.org/abs/2002.11054"},"foundational architects of MLIR"),", who were deeply involved in ",(0,n.kt)("a",{parentName:"p",href:"https://www.blog.google/technology/ai/mlir-accelerating-ai-open-source-infrastructure/"},"releasing MLIR to the world"),", and we continue to actively maintain large portions of core ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," today."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR is a good thing, but its approach for managing weights was not!")),(0,n.kt)("p",null,"One of the fundamental building blocks of MLIR is an ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"Attribute"),", which you can think of as a form constant data that is \u201cunique\u2019d\u201d (aka, memoized, or ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/String_interning"},"intern\u2019ed"),"). Attributes are user extensible, meaning they may take various forms depending on the use case. Attributes are used for things like constant expression values (e.g. \u201c5\u201d, \u201c10.0\u201d, etc.), string literals, for enumerators (e.g. \u201cless than\u201d, \u201cgreater than\u201d, \u201cequal to\u201d, etc.), for arrays of data \u2026 and far more. Most MLIR-based AI tooling uses attributes to hold weights for AI models."),(0,n.kt)("p",null,"However, this is a problem: model weights can be enormous, and MLIR stores a two-gigabyte weight tensor the same way as a four-byte tensor \u2014 in an attribute containing a unique\u2019d array of elements. This creates an obvious problem given we just used the words ",(0,n.kt)("strong",{parentName:"p"},"unique\u2019d")," and ",(0,n.kt)("strong",{parentName:"p"},"gigabytes")," so close together!"),(0,n.kt)("p",null,'Here is the challenge: when something is unique\u2019d in MLIR, it is allocated, hashed, and stored within an "',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),'". These objects have lifetimes attached to the ',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),", and they are not destroyed until the context is destroyed. This is great for small values because we can pass them around and compare unique'd objects by pointer, share allocations for attributes (very common), and more."),(0,n.kt)("p",null,"These benefits turn into a liability with huge weight tensors: we don\u2019t want to reallocate, copy, or unique them. We also don\u2019t want them to live forever: it is important to deallocate big weights when the computation no longer references them. For example, when we run a tool that quantizes our model, it needs to transform the operator graph and generate new weights \u2014 and can end up with multiple copies of that data which all live for the duration of the compilation process."),(0,n.kt)("p",null,"Another problem for ML tooling is how MLIR was serialized to the file system. When we started, MLIR had no binary serialization format - just a textual format. This is a problem for large weights because each byte of binary data ended up being emitted in a hexadecimal form - taking 2x the space as the data it is encoding. That means that we end up not only taking a long time to create the hex ",(0,n.kt)("em",{parentName:"p"},"(about 20 seconds for a decently sized multi-gigabyte model)"),", but our intermediate files are twice as big as they should be - 2x an already big number!"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A bigger impact than just developer productivity")),(0,n.kt)("p",null,"This well-intended design mechanism can cripple even the best compilers. The most obvious challenge is that it compounds the time necessary to compile, inspect, and transform a model. If you have ever used the excuse, \"My code's compiling,\" you'll be aware of the pain this creates. Here, we are forcing the processor to continuously allocate, copy, and hash multiple gigabytes of data."),(0,n.kt)("p",null,"A bigger problem than compile-time is that memory use impacts larger scale architectural features in the Modular stack. For example, because our compiler and technology stack itself is highly parallel and utilizes advanced features like online search, memory use directly affects the amount of work we can do in parallel. This is important to get the highest quality of results."),(0,n.kt)("p",null,"At Modular, it is core to our ethos that we build tools that users will fall in love with. We realize that advanced features simply won\u2019t get used if they are difficult to use, impact productivity, or have significant caveats (e.g. they don\u2019t work in all cases). We love that fixing ",(0,n.kt)("strong",{parentName:"p"},"these foundational problems with large weights"),", allows us to ",(0,n.kt)("em",{parentName:"p"},"subtract complexity")," from our users lives and workflows."),(0,n.kt)("h4",{id:"7323-core-additions-to-mlir"},"7.3.2.3 Core additions to MLIR"),(0,n.kt)("p",null,"We took a step back to understand what we needed to solve this problem with large model tooling and listed out:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Only allocate memory when necessary"),": We know it is more efficient to memory map large data (like weights) from disk, instead of copying data into malloc\u2019d blocks.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"No hashing or uniquing"),": Let\u2019s not check equality of 2 gigabytes blobs of data; weights should be identified by name instead of being implicitly unique\u2019d by content.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enabling Inline Mutation"),": If there is only one user of the data, we should be able to quantize, transform and manipulate data in place instead of making a copy of it first.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enable deallocation"),": The data we are working with is huge, and we need to deallocate it when the last reference to the data is destroyed.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Fast serialization"),": Whether JITing, searching optimization parameters, or just iterating locally, we cache IR for many reasons, and it should be ",(0,n.kt)("strong",{parentName:"li"},"fast."))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fixing the weight attributes")),(0,n.kt)("p",null,"\u6a21\u578b\u4e2d\u7684weight\u662f\u5e38\u91cf\uff0c\u5728\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u53d8\u3002\u8fd9\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u57fa\u7840\uff0c\u8ddf\u5176\u4ed6\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u60c5\u51b5\u4e0d\u4e00\u6837\uff0c\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u4e0d\u53d8\u91cf\u662f\u5c11\u6570\uff0c\u800c\u5927\u90e8\u5206\u53d8\u91cf\u90fd\u4f1a\u968f\u7740\u8ba1\u7b97\u8fc7\u7a0b\u800c\u53d1\u751f\u53d8\u5316\u3002"),(0,n.kt)("p",null,"The first four requirements address one fundamental problem with how we've been using MLIR: weights are constant data, but shouldn't be managed like other MLIR attributes. Until now, we've been trying to place a square peg into a round hole, creating a lot of wasted space that's costing us development velocity (and, therefore, money for users of the tools)."),(0,n.kt)("p",null,'We decided we needed to manage this weight data differently than other types of attributes. This prompted our first fundamental extension to MLIR, "Resources," a mechanism to separate data from its references within the computation.'),(0,n.kt)("p",null,"\u7b2c\u4e00\u4e2a\u57fa\u672c\u6269\u5c55\uff1aresources\uff0c\u4e00\u79cd\u5c06\u6570\u636e\u53ca\u5176\u5f15\u7528\u8fdb\u884c\u5206\u79bb\u7684\u673a\u5236"),(0,n.kt)("p",null,"Each blob of serialized MLIR may now contain additional sections, known as \u201cresource\u201d sections. These sections either include "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u201cdialect\u201d resources (a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/LangRef/#dialects"},"dialect")," is essentially a namespace-like abstraction used when extending MLIR) or "),(0,n.kt)("li",{parentName:"ul"},"\u201cexternal\u201d resources (for toolchain-specific data). ")),(0,n.kt)("p",null,"The data within these sections is represented using a simple key-value pairing, creating a json-like structure, like so:"),(0,n.kt)("p",null,"Encoding resources this way also brings some secondary benefits:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Printing IR for debugging is less error-prone, leading to a better development experience"),": Resources are specialized sections; we don\u2019t have to worry about accidentally dumping 4 gigabytes to the screen while debugging something.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"We can soundly process the IR without the data present"),": With the IR only holding references to the data and not the data itself, we can omit the underlying resource data if desired. For example, this greatly simplifies reproducers that don\u2019t need the big weight data (consider sending a colleague a 20-megabyte file instead of a 1.2-gigabyte file).")),(0,n.kt)("p",null,"By introducing resources as a new concept, we\u2019ve finally been able to build a clean separation between program and data. Now we never pass our weight data directly to an attribute. Instead, we pass a weak reference to the attribute and pass the data to a specialized manager. With this, we now have much more control over when and how weights are allocated, mutated, and destroyed."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A new binary encoding for MLIR")),(0,n.kt)("p",null,"With a better representation of our weights, the only thing we needed now was a more efficient method of storing these weights when serializing our MLIR representation."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"What is the user impact?")),(0,n.kt)("p",null,"In the end, adding resources and a binary encoding to MLIR has made our toolchain and development workflow significantly faster and reduced our memory usage substantially - making our performance and velocity incredible. It\u2019s also made everything about MLIR better \u2014 more on that later."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},(0,n.kt)("img",{parentName:"a",src:"https://uploads-ssl.webflow.com/62a8b4a3467401a65a14d263/636c536434d44a0efd47c896_mlir-dot-touch.jpg",alt:"img"}))),(0,n.kt)("p",null,"Said by every ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," developer, everywhere"),(0,n.kt)("p",null,"\u200d"),(0,n.kt)("p",null,"To validate this, we tested our changes across models of various sizes, measuring the speed of a real-life lowering and optimization pipeline in our MLIR-based graph compiler (from a TensorFlow serialized model to the input format of our runtime) and the memory used during that process."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Compilation Workflow","*")),(0,n.kt)("p",null,"MLIR is now significantly faster. Going from a serialized TensorFlow model (from a checkout of TensorFlow 2.10) to our runtime input format, a process that involves many transformations of the underlying program representation, was ~1.8-2x faster in terms of wall clock time than before, with speed scaling consistently across the various model sizes."),(0,n.kt)("p",null,"Diving a bit deeper, the TF serialized model processing is now basically instant \u2014 all our time is spent writing the big-weight data to disk when generating the MLIR. In fact, the actual time spent in our code is about 10x faster than before. Most of the time is now bounded by the speed at which the SSD writes >1 gigabyte of data to disk."),(0,n.kt)("p",null,"For ML developers using our tools this means faster model compilation, thereby improving productivity and iteration time. This has benefits for production environments as well when loading (and compiling) models. For example, when dynamically loading and unloading models based on incoming traffic \u2014 e.g., use cases with many of personalized/fine-tuned user models."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Serialization","*")),(0,n.kt)("p",null,"Also faster is serialization due to the introduction of a binary encoding. Interacting with MLIR via external tools depends on the reading and writing of serialized MLIR \u2014 whether for introspection, caching, reproducer generation, etc. Again, we tested serialization performance across various model sizes and saw a significant speed-up, peak performance being SSD bound. More specifically, reading textual data for larger models took ~5 seconds compared to <10ms for reading binary. And writing was > ~5x faster for binary than textual formats."),(0,n.kt)("p",null,"For Modular, this enables us to develop infrastructure and tooling around MLIR that would otherwise be prohibitively slow or expensive. For example, this would allow us to provide an efficient debugger that relies on caching model representations throughout the compilation workflow, improving the underlying compiler performance, and much much more."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Memory Usage","*")),(0,n.kt)("p",null,"Finally, the mmap capabilities of our binary serialization and the separation of IR and data via resources have also significantly reduced memory consumption. Across all model sizes, we are using less memory during the compilation process. Where before we had to allocate the relative size of the weights in a model, we no longer have to allocate at all for the weights, meaning we save significant memory every time we compile."),(0,n.kt)("h4",{id:"7324-\u7b14\u8bb0"},"7.3.2.4 \u7b14\u8bb0"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u5e73\u53f0\uff0c\u6bd4\u5982TensorFlow\u3001PyTorch\u548cCUDA\uff0c\u4ed6\u4eec\u5e76\u4e0d\u662f\u6a21\u5757\u5316\u7684\uff0c\u6240\u4ee5\u5b83\u4eec\u968f\u7740\u6280\u672f\u7684\u4e0d\u65ad\u53d1\u5c55\u79ef\u7d2f\u4e86\u8d8a\u6765\u8d8a\u591a\u7684\u76f8\u4e92\u4f9d\u8d56\u548c\u8026\u5408\uff0c\u7136\u540e\u5728\u4f01\u4e1a\u5b9e\u9645\u90e8\u7f72\u5e94\u7528\u7684\u65f6\u5019\uff0c\u9762\u5bf9\u5f02\u6784\u7684\u786c\u4ef6\u5e73\u53f0\u548c\u52a0\u901f\u5668\uff0c\u6bd4\u5982\u670d\u52a1\u5668\u3001\u79fb\u52a8\u7aef\u3001microcontroller\uff0c\u6216\u8005\u6d4f\u89c8\u5668\u767b\uff0c\u4f01\u4e1a\u5c31\u9700\u8981\u8ddf\u8fd9\u79cd\u8026\u5408\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Modular\u76ee\u6807\u662f\u9762\u5411\u5f02\u6784\u73af\u5883\u7684\u5b9e\u9645\u90e8\u7f72\u95ee\u9898\uff0c\u5728\u8f6f\u4ef6\u7684\u6784\u5efa\u5c42\u9762\uff0c\u901a\u8fc7\u63d0\u4f9b\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\uff0c\u6765\u9002\u5e94\u8fd9\u79cd\u73af\u5883\u53d8\u5316\uff0c\u4f7f\u5f97\u90e8\u7f72\u6210\u672c\u66f4\u4f4e\uff0c\u90e8\u7f72\u5176\u5b9e\u4e5f\u5c31\u662f\u4ea7\u54c1\u5316\u7684\u6838\u5fc3\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5e73\u53f0\u6784\u5efa\u51fa\u7684\u662f\u5355\u4e00\u7684\u5927\u578b\u7cfb\u7edf\uff08monolithic system\uff09\uff0c\u4e00\u65e6\u8131\u79bb\u5b83\u4eec\u521d\u59cb\u7684\u76ee\u6807\uff0c\u5c31\u4e0d\u5bb9\u6613\u6269\u5c55\u548c\u6cdb\u5316\u3002\u8fd9\u79cd\u5c40\u9762\u5bfc\u81f4\u4e86\u786c\u4ef6\u4ea7\u751f\u9488\u5bf9\u8fd9\u4e9b\u5e73\u53f0\u5f00\u53d1\u5404\u79cd\u5de5\u5177\uff0c\u5bfc\u81f4AI\u5de5\u4e1a\u7684\u788e\u7247\u5316\uff0c\u8fd9\u4e9b\u5de5\u5177\u5177\u6709\u5404\u81ea\u7684\u9650\u5236\u548c\u4e00\u4e9b\u6743\u8861\u3002\u8fd9\u6837\u7684\u8bbe\u8ba1\u6a21\u5f0f\u5bfc\u81f4\u8fd9\u4e9b\u521b\u65b0\u5de5\u4f5c\u4e0d\u6613\u4e8e\u4f7f\u7528\uff0c\u4e0d\u6613\u4e8e\u79fb\u690d\uff0c\u4e5f\u4e0d\u6613\u4e8e\u4f38\u7f29\u3002\u8fd9\u6837\u7684\u6280\u672f\u4f7f\u5f97\u53ea\u6709\u5927\u516c\u53f8\u7684\u5168\u6808\u4e13\u5bb6\u624d\u80fd\u591f\u5f88\u597d\u5730\u638c\u63e1\u548c\u4f7f\u7528\u8fd9\u4e9b\u6280\u672f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"AI\u6280\u672f\u5fc5\u987b\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u88ab\u4efb\u4f55\u4eba\u4f7f\u7528\uff0c\u8fd9\u6837\u624d\u80fd\u4f7f\u5f97\u521b\u65b0\u4ea7\u54c1\u53ef\u4ee5\u590d\u6742\u7684\u8f6f\u4ef6\u548c\u786c\u4ef6\u94fe\u4e2d\u89e3\u653e\u51fa\u6765\uff0c\u4ece\u800c\u5de8\u5927\u5730\u63d0\u5347\u6211\u4eec\u7684\u65e5\u5e38\u751f\u6d3b\u3002Imagine a world where ML research ",(0,n.kt)("em",{parentName:"strong"},"truly flows")," rapidly and effectively into production from a large global community. One where these breakthroughs are more accessible to everyone, allowing product innovators to drastically improve our daily lives and be freed from the chains of software and hardware complexity.")),(0,n.kt)("h3",{id:"733-jittor"},"7.3.3 Jittor"),(0,n.kt)("p",null,"The development of deep learning frameworks revolves around improving human productivity and com- putational performance. To achieve good performance from modern processors, developers often need to write assembly language, use special instruction sets, or use specialised languages or libraries, such as shaders for GPU programming, CUDA ","[9]",", and OpenCL ","[10]",". Although these provide excellent perfor- mance, they are difficult to use and debug, and furthermore, programmers need a good understanding of the underlying hardware. Scripting languages such as Python and JavaScript are interpreted, giving immediate feedback, further reducing the difficulty of programming, but this sacrifices performance."),(0,n.kt)("p",null,"To simultaneously improve productivity and performance, various scientific computing libraries and deep learning frameworks have been developed. A widely used optimization method is static compilation with dynamic binding. This optimization method uses C, C ++, CUDA ","[9]",", or other languages to statically compile the operators needed in deep learning, while the user dynamically applies them via scripting languages such as Python and Javascript. Many frameworks adopt this approach, including Numpy ","[11]",", Matlab, Theano ","[2]",", TensorFlow ","[4]",", MXNet ","[12]",", and PyTorch ","[5]","."),(0,n.kt)("p",null,"Dynamic binding allows users to take full advantage of the underlying hardware performance when using a scripting language, but it has a problem: all operations are statically compiled, making optimiza- tions such as operator fusion difficult; this important optimization technique combines multiple operators into one operator, so that intermediate results do not need to be stored. Dynamic binding with a scripting language cannot use this optimization. For example, the user may need to calculate d = ab + c, where a, b, c are tensors. First, the scripting interpreter executes tmp = TensorMul(a,b) and then executes d = TensorAdd(tmp,c). If we could compile the whole expression, rather than applying operators one by one, we could execute d = TensorMulAndAdd(a,b,c) directly without the need for temporary storage. This is significant, as on modern processors, memory access is often much slower than calculation. However, we cannot guess what combinations of operators the user may require, and static compilation of all possible combinations is obviously infeasible. To solve this problem, we may use JIT compilation technology to dynamically compile and optimize the operators that the user needs."),(0,n.kt)("p",null,"Jittor is a completely new design of deep learning framework based on JIT compilation technology. Following the above discussion, Jittor is designed based on the following principles."),(0,n.kt)("p",null,"\u2022 It should be highly customizable yet easy to use. Users should be able to define new operators and models with just a few lines of code."),(0,n.kt)("p",null,"\u2022 It should separate coding from optimization. Users should be able to focus on coding using the front-end interface, while the code is automatically optimized by the back-end. This improves readability of the front-end code, while well-tested, standard optimization code in the back-end ensures robustness."),(0,n.kt)("p",null,"\u2022 Everything should be compiled JIT. This includes the back-end and operations. Users should be able to change the source code at any time."),(0,n.kt)("h4",{id:"7331-the-front-end"},"7.3.3.1 The front-end"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Meta-operators")),(0,n.kt)("p",null,"\u5143\u64cd\u4f5c\u662f\u5728\u4e00\u822c\u7684\u64cd\u4f5c\u4e0a\u6dfb\u52a0\u4e86\u4e00\u4e2a\u7279\u5b9a\u7684\u7c7b\u522b\uff0c\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u63d0\u4f9b\u8bb8\u591a\u5185\u7f6e\u7684\u64cd\u4f5c\u4f7f\u5f00\u53d1\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u901a\u5e38\u505a\u4e00\u4e9b\u76f8\u4f3c\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u64cd\u4f5c\u5efa\u7acb\u66f4\u9ad8\u7684\u62bd\u8c61\u3002\u901a\u5e38\u8fd9\u4e9b\u64cd\u4f5c\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Reindex\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u5efa\u7acbone-to-many\u7684\u6620\u5c04\uff0c\u4f8b\u5982broadcast\u3001pad\u3001slice\uff0cIn short, the reindex operator rearranges the input and stores it in appropriate positions of the output. Index bounds checking is also performed based on the indexing function."),(0,n.kt)("li",{parentName:"ul"},"Reindex-reduce\uff0c\u63d0\u4f9bmany-to-one\u7684\u6620\u5c04\uff0c\u4f8b\u5982sum\u3001product"),(0,n.kt)("li",{parentName:"ul"},"Element-wise\uff0c\u9010\u5143\u7d20\u8ba1\u7b97\uff0c\u4f8b\u5982\u77e9\u9635\u8ba1\u7b97\uff0c\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u5177\u6709\u76f8\u540c\u7684shape")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(397).Z,width:"1498",height:"998"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fusion of operators")),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u7684\u7c7b\u578b\u4fe1\u606f\uff0cJittor\u53ef\u4ee5\u5c06\u591a\u4e2a\u64cd\u4f5c\u8fdb\u884c\u5408\u5e76\uff0c\u8ba1\u7b97\u51fa\u4e00\u4e2a\u65b0\u7684\u8ba1\u7b97\u516c\u5f0f\uff0c\u4f7f\u5f97\u5f88\u591a\u4e2d\u95f4\u53d8\u91cf\u7684\u5b58\u50a8\u88ab\u7701\u6389\u3002"),(0,n.kt)("p",null,"\u4f46\u5176\u6838\u5fc3\u662f\u901a\u8fc7\u5143\u64cd\u4f5c\u7684\u7c7b\u578b\u548c\u5206\u7c7b\uff0c\u77e5\u9053\u548c\u6bcf\u4e2a\u64cd\u4f5c\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u5c3d\u7ba1\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u6211\u4eec\u5728\u8fdb\u884c\u6570\u5b66\u51fd\u6570\u7684\u5408\u5e76\u65f6\uff0c\u6211\u4eec\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u6bcf\u4e2a\u503c\u662f\u591a\u5c11\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u6839\u636e\u51fd\u6570\u7684\u5f62\u5f0f\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u4e4b\u540e\uff0c\u518d\u5c06\u503c\u5e26\u5165\u6700\u540e\u7684\u51fd\u6570\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Variables")),(0,n.kt)("p",null,"Variables are tensors with the following properties:"),(0,n.kt)("p",null,"\u2022 A shape attribute.\n\u2022 A data type attribute, dtype, e.g., float or int.\n\u2022 A stop grad attribute to prevent gradient back propagation for this variable.\n\u2022 A stop fuse attribute to prevent fusion of operators associated with this variable.\nThe stop grad attribute is usually used in testing or inferencing, while the stop fuse attribute provides control over operator fusion: the user may get better performance by careful use of these attributes. For example, operator fusion will consume register resources in a GPU. With sufficient resources, fusion will always improve performance, but fusing hundreds of operators will exhaust resources and cause performance degradation."),(0,n.kt)("h4",{id:"7332-the-back-end"},"7.3.3.2 The back-end"),(0,n.kt)("p",null,"The back-end is responsible for resource management, process scheduling and compilation optimization. It includes the operator fuser, which decides the fusing strategy used for the meta-operators, external operators, which are customized operators provided by users or third-party libraries, the JIT compiler, the integrated compiler used to optimize meta-operators, and the unified graph execution, which unifies static and dynamic graphs execution."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operator fuser")),(0,n.kt)("p",null,"\u5b9e\u9645\u7684\u8ba1\u7b97\u56fe\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4e3a\u4e86\u66f4\u7b80\u5355\u5730\u5904\u7406\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c06\u8ba1\u7b97\u56fe\u770b\u505a\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u64cd\u4f5c\uff0c\u800c\u8fb9\u8868\u793a\u53d8\u91cf\uff0c\u901a\u8fc7\u5c06\u56fe\u5212\u5206\u6210\u591a\u4e2a\u5b50\u56fe\u7684\u65b9\u6cd5\u6765\u8fdb\u884cfuse\u64cd\u4f5c\u3002\u5176\u5224\u65ad\u7684\u4f9d\u636e\u4f7f\u5f97\u603b\u7684\u4ee3\u4ef7\u6700\u5c0f\uff0c\u5176\u4e2d\u4ee3\u4ef7\u51fd\u6570 \u8868\u793a\u4e3a\u6bcf\u4e2a\u5b50\u56fe\u5bf9\u53d8\u91cf\u7684\u8bfb\u548c\u5199\u7684\u6307\u4ee4\u7684\u603b\u6570\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u7684\u6027\u80fd\u74f6\u9888\u4e3b\u8981\u5728\u4e8e\u5185\u5b58\u64cd\u4f5c\u3002fusion\u901a\u8fc7\u51cf\u5c11\u5185\u5b58\u64cd\u4f5c\u6765\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u51e0\u4e2a\u7279\u5b9a\u7684\u89c4\u5219\u9700\u8981\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"JIT compiler")),(0,n.kt)("p",null,"\u5728fuser\u4e4b\u540e\uff0c\u5c06\u4ee3\u7801\u7f16\u8bd1\u4e3a\u9ad8\u6027\u80fdC++\u4ee3\u7801\u3002\u5e76\u4f1a\u8fdb\u4e00\u6b65\u88abLVVM\u4f18\u5316\u81f3\u4e0d\u540c\u7684\u786c\u4ef6\u5e73\u53f0\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unified graph execution")),(0,n.kt)("p",null,"According to the execution method of computational graphs, deep-learning frameworks can be based either on a static graph execution (also called a define-and-run approach) or a dynamic graph execution (define-by-run, eager execution). Static graph based frameworks are efficient and easy to optimize, and dynamic graph based frameworks are easy-to-use and flexible. Most current frameworks, including TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer, support dynamic graphs."),(0,n.kt)("p",null,"As an alternative, we propose our unified graph execution approach. Unified graph execution provides an imperative style interface which has the same flexibility as a dynamic graph. And it is also as efficient as a static graph."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(105).Z,width:"1732",height:"1642"})),(0,n.kt)("p",null,"\u9759\u6001\u56fe\u5728\u8fd0\u884c\u4e4b\u524d\u5b9a\u4e49model\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u5bf9\u6570\u636e\u6267\u884c\u64cd\u4f5c\u3002\u5176\u4e2d\u5728\u7f16\u8bd1\u7684\u65f6\u5019\u4f7f\u7528\u4e00\u4e2aplaceholder\u6765\u8868\u793a\u6570\u636e\uff0c\u7f16\u8bd1\u5668\u5bf9\u8ba1\u7b97\u56fe\u8fdb\u884c\u4f18\u5316\u3002\u7531\u4e8e\u53ea\u6709\u8fd0\u884c\u65f6\u624d\u4f1a\u77e5\u9053\u6570\u636e\uff0c\u6240\u4ee5\u50cfprint\u8fd9\u6837\u7684\u65b9\u6cd5\u65e0\u6cd5\u652f\u6301\uff0c\u4e0d\u5229\u4e8e\u8c03\u8bd5\u7b49\u3002\u7279\u70b9\u662f\u6027\u80fd\u9ad8\u3001\u5b9e\u73b0\u7b80\u5355\u3002TensorFlow\u91c7\u7528\u8fd9\u79cd\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"Eager execution executes each operator immediately when it is added to the graph. Because addition of operators is performed on the CPU while they are executed on the GPU, eager execution will lower the latency between CPU and GPU, thus reducing overheads, allowing this approach to achieve competitive performance with the static graph approach. this furthermore allows the user to manipulate intermediate results during model building. This provides users with a great deal of flexibility: for example data can be printed, and the model can be changed according to the intermediate results obtained, which is hard to do with static graphs, and is essential in applications such as generative adversarial networks (GANs) ","[18]"," and reinforcement learning ","[19]",". For example, when training a GAN, the computation graph keeps changing between the discriminator and generator. This flexibility has made dynamic graphs popular, and most frameworks (such as TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer) currently support them."),(0,n.kt)("p",null,"To obtain the benefits of both approaches, without their drawbacks, we use a unified graph execution approach. It provides the full flexibility of a dynamic graph, and the graph can be rebuilt frequently without performance degradation, yet operator fusion is still possible. This is achieved by lazy execution. See Figure 7(c). Operators interpreted by Python are not executed immediately, but delayed until their results are needed. op1 in line 3 is not executed until x2 is printed: x2 is needed at that point, and it depends on x1 which in turn requires op1 to be executed. During printing in line 5, three things happen. First, unified execution will select all those operators in graph G that are required by printing, and split them off into a new sub-graph G\u2032; in Figure 7 this is op1 and op2. The sub-graph G\u2032 is then optimized using the operator fusion process in Subsection 4.1: the operator fuser takes G\u2032 as input, and partitions G\u2032 into multiple sub-graphs G\u2032\u2032, where each sub-graph represents one fused operator. Finally, sub-graph i G\u2032 is executed. In this very simple example, as op1 and op2 are executed together, there is an opportunity to fuse them before doing so. While addition and execution of operators is coupled in the dynamic graph, it is decoupled in the unified graph."),(0,n.kt)("h3",{id:"734-pytorch"},"7.3.4 PyTorch"),(0,n.kt)("p",null,"\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u662f\u4e00\u4e2alibrary\uff0c\u800c\u4e0d\u662f\u4e00\u95e8\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0clibrary\u610f\u5473\u7740\u5b83\u6709\u81ea\u5df1\u7684\u7279\u5b9a\u903b\u8f91\uff0c\u5b83\u53ea\u80fd\u5904\u7406\u5b83\u7684\u903b\u8f91\u6240\u5b9a\u4e49\u7684\u4e8b\u60c5\uff0c\u5c31\u50cf\u5176\u4ed6\u4efb\u4f55library\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u90fd\u662f\u4f7f\u7528\u9759\u6001\u6570\u636e\u6d41\u56fe\uff0c\u5b83\u4eec\u90fd\u662f\u73b0\u7f16\u8bd1\u597d\u6a21\u578b\uff0c\u7136\u540e\u6279\u91cf\u6267\u884c\u6570\u636e\u5904\u7406\uff0c\u8fd9\u867d\u7136\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\uff0c\u4f46\u662f\u4e27\u5931\u4e86\u6613\u7528\u6027\u3001\u7075\u6d3b\u6027\uff0c\u4e5f\u4e0d\u6613\u4e8e\u8c03\u8bd5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"define-by-run approach")),(0,n.kt)("p",null,"Separately, libraries such as NumPy","[12]",", Torch","[6]",", Eigen","[13]"," and Lush","[14]"," made ",(0,n.kt)("strong",{parentName:"p"},"array-based programming")," productive in general purpose languages such as Python, Lisp, C++ and Lua."),(0,n.kt)("p",null,"Easy and efficient ",(0,n.kt)("strong",{parentName:"p"},"interoperability")," is one of the top priorities for PyTorch because it opens the possibility to leverage the rich ecosystem of Python libraries as part of user programs. Hence, PyTorch allows for bidirectional exchange of data with external libraries. "),(0,n.kt)("p",null,"Moreover, many of the critical systems are designed specifically to be ",(0,n.kt)("strong",{parentName:"p"},"extensible"),". For instance, the automatic differentiation system allows users to add support for custom differentiable functions."),(0,n.kt)("p",null,"Most importantly, users are free to replace any component of PyTorch that does not meet the needs or performance requirements of their project. They are all designed to be completely interchangeable, and PyTorch takes great care not to impose any particular solution."),(0,n.kt)("h4",{id:"7341-perform-focused-implementation"},"7.3.4.1 Perform focused implementation"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python Global Interpreter Lock (GIL)")," is a type of process lock which is used by python whenever it deals with processes. Generally, Python only uses only one thread to execute the set of written statements. This means that in python only one thread will be executed at a time. The performance of the single-threaded process and the multi-threaded process will be the same in python and this is because of GIL in python. We can not achieve multithreading in python because we have global interpreter lock which restricts the threads and works as a single thread."),(0,n.kt)("p",null,"Running deep learning algorithms efficiently from a Python interpreter is notoriously challenging: for instance, the global interpreter lock ","[33]"," effectively ensures that only one of any number of concurrent threads is running at any given time. Deep learning frameworks based on the construction of a static data-flow graph sidestep this problem by deferring the evaluation of the computation to a custom interpreter."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"An efficient C++ core")),(0,n.kt)("p",null,"\u6838\u5fc3\u4ee3\u7801 \u90fd\u7531C++\u7f16\u5199\uff0c\u7136\u540ebinding\u5230Python\uff0c\u5305\u62ec\u6570\u636e\u7ed3\u6784\u3001CPU/GPU\u7b97\u5b50\u3001\u5e76\u884c\u8ba1\u7b97\u7b49\uff0c\u8fd9\u6837\u53ef\u4ee5\u7ed5\u5f00GIL\uff0c\u540c\u65f6\u8fd8\u53ef\u4ee5\u5c06PyTorch\u7684\u4ee3\u7801binding\u5230\u5176\u4ed6\u8bed\u8a00\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Separate control and data flow")),(0,n.kt)("p",null,"PyTorch\u4e25\u683c\u5730\u5c06\u63a7\u5236\u548c\u6570\u636e\u6d41\u5206\u5f00\uff0c\u8fd9\u91cc\u7684\u63a7\u5236\u4e3b\u8981\u662f\u6307CPU\u4e0a\u7684\u7a0b\u5e8f\u5206\u652f\u3001\u5faa\u73af\u7b49\u63a7\u5236\u7b97\u5b50\u7684\u903b\u8f91\uff0c\u8fd9\u90e8\u5206\u5728Python\u548c\u90e8\u5206C++\u4e2d\u6267\u884c\uff1b\u800c\u6570\u636e\u6d41\u6307\u7684\u662f\u7528\u4e8e\u5728GPU\u4e2d\u6267\u884c\u7684\u7b97\u5b50\u8c03\u7528\u53ca\u5176\u76f8\u5173\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u7406\u89e3\u5728\u5728GPU\u4e2d\u6267\u884c\u4e00\u6b21\u8ba1\u7b97\u9700\u8981\u7684\u7b97\u5b50\u5373\u6570\u636e\uff0c\u8fd9\u4e9b\u8ba1\u7b97\u6309\u7167\u7ebf\u6027\u7684\u65b9\u5f0f\u8fdb\u884c\u6392\u5e8f\uff0c\u7136\u540e\u88ab\u8f6c\u6362\u4e3aCUDA kernel\u7684\u961f\u5217\uff0c\u6309\u7167FIFO\u7684\u987a\u5e8f\u88ab\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u662f\u5f02\u6b65\u7684\uff0c\u80fd\u591f\u5145\u5206\u4f7fGPU\u7684\u8ba1\u7b97\u8fbe\u5230\u9971\u548c\uff0c\u5373\u4fbf\u662f\u5728Python\u8fd9\u6837\u7684\u89e3\u91ca\u6027\u8bed\u8a00\u4e2d\u4e5f\u53ef\u4ee5\u5f97\u5230\u975e\u5e38\u9ad8\u7684\u6027\u80fd\uff0c\u56e0\u4e3a\u771f\u6b63\u9700\u8981\u8bdd\u65f6\u95f4\u7684\u8ba1\u7b97\u90fd\u662fCUDA\u7f16\u8bd1\u7684\uff0c\u800cPython\u53ea\u8d1f\u8d23\u63a7\u5236\u903b\u8f91\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Custom caching tensor allocator")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f60\u77e5\u4e0d\u77e5\u9053\u4e3b\u6d41\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6pytorch\u662f\u6309\u7167\u7740Haskell typeclass SML module\u7684\u6a21\u6837\u67b6\u6784\u7684\uff0cPytorch\u4e3bmaintainer\u5c31\u662f\u4e00\u4e2aHaskell\u9ad8\u624b\uff0cPytorch\u8584\u7eb1Tensorflow\u5c31\u662fPL\u8584\u7eb1System\u7684\u4e00\u4e2a\u7edd\u4f73\u4f8b\u5b50\uff1f"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u5706\u89d2\u9a91\u58eb\u9b54\u7406\u6c99\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/21410150/answer/2740843224"},"https://www.zhihu.com/question/21410150/answer/2740843224"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"735-oneflow"},"7.3.5 OneFlow"),(0,n.kt)("p",null,"Deep learning frameworks such as TensorFlow and PyTorch provide a productive interface for expressing and training a deep neural network (DNN) model on a single device or using data parallelism. Still, they may not be flexible or efficient enough in training emerging large models on distributed devices, which require more sophisticated parallelism beyond data parallelism. Plugins or wrappers have been developed to strengthen these frameworks for model or pipeline parallelism, but they complicate the usage and implementation of distributed deep learning. Aiming at a simple, neat redesign of distributed deep learning frameworks for various paral- lelism paradigms, we present ",(0,n.kt)("em",{parentName:"p"},"OneFlow"),", a novel distributed training framework based on an ",(0,n.kt)("em",{parentName:"p"},"SBP")," (",(0,n.kt)("em",{parentName:"p"},"split"),", ",(0,n.kt)("em",{parentName:"p"},"broadcast")," and ",(0,n.kt)("em",{parentName:"p"},"partial-value"),") abstraction and the actor model. ",(0,n.kt)("em",{parentName:"p"},"SBP")," enables much easier programming of data parallelism and model parallelism than existing frameworks, and the actor model provides a succinct runtime mechanism to manage the complex dependencies imposed by resource constraints, data movement and computation in dis- tributed deep learning."),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("h3",{id:"736-preda"},"7.3.6 PREDA"),(0,n.kt)("p",null,"\u53ef\u4ee5\u7f16\u8bd1\u5230Web assembly\uff0c\u8ba4\u4e3a\u592a\u5305\u7f57\u4e07\u8c61\uff0c\u533a\u5757\u94fe\u662f\u975e\u5e38\u7b80\u5355\u7684\uff0c\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7279\u6027\u3001\u8d44\u6e90\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u4e0d\u9700\u8981GC\uff0c\u6267\u884c\u5b8c\u6240\u6709\u4e1c\u897f\u5168\u90e8\u5220\u6389\uff0c\u5e0c\u671b\u6709\u66f4\u8f7b\u91cf\u7ea7\u7684\u4e1c\u897f\u3002"),(0,n.kt)("h3",{id:"737-web-assembly"},"7.3.7 Web Assembly"),(0,n.kt)("p",null,"rust\u5728web assembly\u65b9\u9762\u8d70\u5728\u524d\u9762"),(0,n.kt)("p",null,"\u662f\u4e00\u5957\u65b0\u7684\u6307\u4ee4\u96c6\u3002"),(0,n.kt)("p",null,"Rust\u5f00\u53d1\u8005\u53d7\u5230\u7684\u7ea6\u675f\u6bd4\u8f83\u5927\uff0c\u6bd4\u5982\u7c7b\u578b\u7cfb\u7edf\u3002\u79ef\u6781\u62e5\u62b1\u4e00\u4e9b\u5b66\u672f\u7684\u6210\u679c\uff0cRust\u7684\u6210\u679c\u4ee3\u8868\u7f16\u7a0b\u8bed\u8a00\u7406\u8bba\u7684\u6210\u529f\u3002"),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u52a8\u673a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u7279\u5b9a\u7684\u95ee\u9898\uff0cjava\uff0cerlang\uff0crust"),(0,n.kt)("li",{parentName:"ul"},"\u5e73\u53f0\u578b\uff0cC#\uff0cSwift\uff0cGo\uff0c\u751f\u6001\uff0c\u672a\u6765\u6280\u672f\u6f14\u8fdb"),(0,n.kt)("li",{parentName:"ul"},"\u5174\u8da3\u3001\u5b66\u672f\u7814\u7a76\u578b\uff0cScala\uff0cHaskell\u7b49")),(0,n.kt)("h2",{id:"74-others"},"7.4 Others"),(0,n.kt)("h3",{id:"741-\u795e\u7ecf\u7f51\u7edc"},"7.4.1 \u795e\u7ecf\u7f51\u7edc"),(0,n.kt)("h3",{id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"},"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"),(0,n.kt)("h4",{id:"7421-pip"},"7.4.2.1 pip"),(0,n.kt)("h4",{id:"7422-rust"},"7.4.2.2 Rust"),(0,n.kt)("h3",{id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01"},"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01"),(0,n.kt)("p",null,"NFTCN/Bigverse/Opensea "),(0,n.kt)("p",null,"\u5f53\u524d\u7684NFT\u6570\u5b57\u8d44\u4ea7\u5e02\u573a\u4e3b\u8981\u8fd8\u662f\u504f2D"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"NFT\u8d44\u4ea7\u751f\u6210\u672c\u8eab\u5f88\u7b80\u5355\uff0c\u56e0\u6b64\u4e5f\u5bb9\u6613\u590d\u5236\u3001\u5c71\u5be8"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u65b9\u5f0f\u7b80\u5355\uff0c\u5927\u591a\u6570\u751a\u81f3\u90fd\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u56fe\u50cf\u5904\u7406\u53ca\u98ce\u683c\u5316\u5de5\u5177\u6216\u8005\u7b80\u5355\u7684\u7f16\u8f91\uff0c\u800c\u5f00\u53d13D\u7684\u5185\u5bb9\u751f\u6210\u8981\u96be\u5f97\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5e02\u573a\uff0c\u65e0\u5bf9\u5185\u5bb9\u8fdb\u884c\u4ef7\u503c\u53d1\u73b0\u548c\u4ef7\u503c\u589e\u503c\u7684\u65b9\u5f0f\u548c\u7a7a\u95f4\uff0c\u5f53\u524d\u4e3b\u8981\u7684\u673a\u5236\u662f\u4f4e\u4e70\u9ad8\u4e70\uff0c\u7a7a\u7b49\u7740\u589e\u503c\uff0c\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u6240\u8c13\u7684\u4e00\u4e9b\u4f30\u503c\u7684\u673a\u5236\u548c\u670d\u52a1\u6765\u5224\u5b9a\u4ef7\u503c\uff0c\u4f46\u5b9e\u9645\u4e0a\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e00\u4e2a\u827a\u672f\u54c1\u7684\u4ef7\u503c\u6709\u65f6\u662f\u901a\u8fc7\u4eba\u4eec\u7684\u4e86\u89e3\u3001\u5b66\u4e60\u3001\u7ed3\u6784\u3001\u7814\u7a76\u3001\u80cc\u540e\u7684\u6587\u5316\u4ef7\u503c\u548c\u793e\u4f1a\u4ef7\u503c\u7684\u53d1\u6398\u548c\u6f14\u8fdb\u540e\uff0c\u624d\u4f1a\u6162\u6162\u50ac\u751f\u4e00\u4e2a\u4f5c\u54c1\u7684\u4ef7\u503c\uff0c\u800c\u4e00\u4e2a\u5355\u5355\u7684\u5e02\u573a\u5e76\u4e0d\u8db3\u4ee5\u5f62\u6210\u8fd9\u6837\u7684\u673a\u5236\uff0c\u8fd9\u6837\u4f5c\u54c1\u9700\u8981\u4e00\u79cd\u80fd\u591f\u66f4\u751f\u6d3b\u5316\u7684\u5448\u73b0\u673a\u5236\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5217\u8868\uff0c\u5b83\u5e94\u8be5\u80fd\u591f\u8ba9\u66f4\u591a\u7684\u4eba\u5bf9\u5b83\u6709\u66f4\u591a\u7ef4\u5ea6\u3001\u66f4\u591a\u673a\u4f1a\u7684\u518d\u8ba4\u77e5\uff0c\u7ed3\u6784\u3001\u89e3\u8bfb\u3001\u6b23\u8d4f\u3001\u89c2\u5bdf\u3001\u4f53\u9a8c\uff0c\u8fd9\u6837\u624d\u6709\u673a\u4f1a\u53bb\u6316\u6398\u5b83\u7684\u4ef7\u503c\uff0c\u5b83\u7edd\u4e0d\u662f\u4f60\u4e70\u6765\u653e\u5728\u90a3\u91cc\u4ed6\u5c31\u81ea\u5df1\u4f1a\u589e\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u4e00\u4e2a\u5e02\u573a\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u72ec\u7acb\u76843D\u6216\u80053D\u7684\u5f62\u5f0f\u5c55\u73b0\uff0c\u7f3a\u4e4f\u4e0e\u4e4b\u76f8\u5173\u7684\u73af\u5883\uff0c\u7279\u522b\u662f3D\u4f5c\u54c1\u5f80\u5f80\u4e0d\u662f\u5355\u4e2a\u7269\u4f53\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u7684\u8868\u8fbe\u5f80\u5f80\u548c\u73af\u5883\u7b49\u56e0\u7d20\u6709\u5173\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684\u4f5c\u54c1\uff0c\u65e2\u5bb9\u6613\u88ab\u590d\u5236\u548c\u4e0b\u8f7d\uff0c\u53c8\u7f3a\u4e4f\u8868\u8fbe\u80fd\u529b")),(0,n.kt)("p",null,"\u62df\u5a32\u76843D\u521b\u4f5c\u66f4\u96be\uff0c\u5e76\u4e14\u5b83\u7684\u5185\u5bb9\u4e0d\u662f\u5355\u4e2a\u4e3b\u4f53\uff0c\u800c\u662f\u878d\u5165\u5728\u73af\u5883\u4e2d\uff0c\u751a\u81f3\u548c\u5176\u4ed6\u5185\u5bb9\u4e00\u8d77\u5448\u73b0\uff0c\u73af\u5883\u751a\u81f3\u7a0b\u5e8f\u90fd\u662f\u4e00\u90e8\u5206\uff0c\u5728\u8131\u79bb\u8fd9\u4e2a\u73af\u5883\uff0c\u4ed6\u751a\u81f3\u90fd\u65e0\u6cd5\u8fd0\u884c\uff0c\u88ab\u590d\u5236\u7684\u98ce\u9669\u964d\u4f4e\uff0c\u540c\u65f6\u5b83\u5e76\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u5e02\u573a\uff0c\u5b83\u66f4\u591a\u662f\u5904\u4e8e\u4e00\u79cd\u88ab\u6b23\u8d4f\u7684\u793e\u4f1a\u72b6\u6001\uff0c\u5b83\u7684\u4ef7\u503c\u66f4\u5bb9\u6613\u88ab\u89e3\u8bfb\u548c\u7ed3\u6784\uff0c\u878d\u5165\u771f\u6b63\u7684\u4ef7\u503c\u8bc4\u5224\u4f53\u7cfb\u548c\u65b9\u5f0f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"3D\u5185\u5bb9\u4e0d\u9002\u5408\u4ea4\u6613")),(0,n.kt)("p",null,"\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u50cf\u827a\u672f\uff0c\u66f4\u591a\u88ab\u6536\u85cf\uff0c\u4e92\u52a8\u5185\u5bb9\u662f\u52a8\u6001\u66f4\u65b0\u7684\uff0c\u5b83\u4e5f\u4e0e\u7279\u5b9a\u7684\u8fd0\u884c\u65f6\u73af\u5883\u548c\u64cd\u4f5c\u7cfb\u7edf\u9ad8\u5ea6\u8026\u5408\uff0c\u4ed6\u8fd8\u4f1a\u8fdb\u884c\u4e0d\u65ad\u66f4\u65b0\uff0c\u4fee\u590dbug\uff0c\u56e0\u6b64\u4ed6\u66f4\u9002\u5408\u6309\u73a9\u5bb6\u6536\u8d39\uff0c\u6309\u670d\u52a1\u6536\u8d39\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u4e00\u6b21\u6027\u7684\u4ea7\u54c1\u4e70\u5356\uff0c\u5f53\u7136\u4ec5\u4f5c\u4e3a\u7eaf\u8d44\u4ea7\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u865a\u62df\u5730\u5757\uff1a")),(0,n.kt)("p",null,"\u865a\u62df\u5730\u5757\u4e5f\u662f\u6ca1\u6709\u597d\u7684\u4ef7\u503c\u652f\u6491\uff0c\u5e76\u4e0d\u662f\u4efb\u4f55\u4e00\u4e2a\u865a\u62df\u7a7a\u95f4\u5f04\u4e00\u4e2a\u552f\u4e00\u5730\u5757\u5212\u5206\u7684\u673a\u5236\u5c31\u53ef\u4ee5\uff0c\u90a3\u6837\u7684\u8bdd\u5c31\u592a\u7b80\u5355\u4e86\u592a\u5bb9\u6613\u4e86\uff0c\u73b0\u5b9e\u5f88\u591a\u5143\u5b87\u5b99\u7684\u6982\u5ff5\u548c\u4ea7\u54c1\u7ed9\u4eba\u7684\u611f\u89c9\u5c31\u662f\u592a\u7b80\u5355\u592a\u5bb9\u6613\u4e86\uff0c\u8fd9\u662f\u4e0d\u7b26\u5408\u903b\u8f91\u7684\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u6ca1\u6709\u4ef7\u503c\u652f\u6491\uff0c\u6ca1\u6709\u5171\u540c\u7684\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u6bd4\u5982\u5982\u679c\u5728\u8d5b\u5c14\u8fbe\u91cc\u9762\u5efa\u7acb\u865a\u62df\u5730\u5757\uff0c\u90a3\u80af\u5b9a\u6709\u4ef7\u503c\uff0c\u56e0\u4e3a\u4ed6\u6709\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u4f46\u4f60\u968f\u4fbf\u642d\u5efa\u4e00\u4e2a\u5730\u5757\uff0c\u4ed6\u5e76\u4e0d\u5177\u5907\u5171\u540c\u8ba4\u540c\u4ef7\u503c\uff0c\u4ec5\u4ec5\u662f\u50cf\u8d4c\u535a\u4e00\u6837\u5c11\u90e8\u4efd\u4eba\u7684\u7092\u4f5c\uff0c\u5927\u90e8\u5206\u4eba\u5e76\u4e0d\u8ba4\u53ef\u8fd9\u4e9b\u4ef7\u503c"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u600e\u6837\u521b\u5efa\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\u662f\u6700\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u4ef7\u503c\u521b\u9020\u548c\u8ba4\u540c\u662f\u5f88\u96be\u7684\uff0c\u4e0d\u7136\u5c31\u7f16\u7a0b\u865a\u62df\u8d27\u5e01\u4e00\u6837\u4e00\u79cd\u7eaf\u673a\u5236\uff0c\u6ca1\u6709\u4ef7\u503c\u62c5\u4fdd"),(0,n.kt)("p",null,"\u4ef7\u503c\u8ba4\u540c\u9700\u8981\u6240\u6709\u4eba\u80fd\u591f\u53c2\u4e0e\uff0c\u4ee5\u67d0\u79cd\u65b9\u5f0f\uff0c\u624d\u80fd\u5f62\u6210\u4ef7\u503c\u8ba4\u540c\uff0c\u8fd9\u79cd\u53c2\u4e0e\u6216\u8005\u4ef7\u503c\u8ba4\u540c\u5e94\u8be5\u662f\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u9700\u8981\u4e00\u79cd\u5b9e\u9645\u7684\u53c2\u4e0e\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u50cf\u7092\u623f\u4e00\u6837\uff0c\u5c31\u662f\u8bf4\u5b83\u9700\u8981\u5177\u5907\u771f\u6b63\u7684\u4ef7\u503c\uff0c\u4e0d\u7ba1\u662f\u6e38\u620f\u5e26\u6765\u7cbe\u795e\u4e0a\u7684\uff0c\u6216\u8005\u5b83\u4f20\u8fbe\u4e86\u67d0\u79cd\u77e5\u8bc6\u6216\u8005\u6587\u5316\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u6570\u5b57\u5185\u5bb9\u5f97\u8d27\u5e01\u5316\u8fd8\u5b58\u5728\u4e00\u4e2a\u91cd\u8981\u95ee\u9898\uff0c\u5b83\u9700\u8981\u4e00\u79cd\u62c5\u4fdd\u673a\u5236\uff0c\u4e0d\u50cf\u5b9e\u7269\u4e00\u6837\u7269\u6743\u662f\u552f\u4e00\u7684\u660e\u786e\u7684\uff0c\u5f53\u7136\u8fd9\u4e5f\u662f\u6709\u56fd\u5bb6\u673a\u6784\u62c5\u4fdd\u8d1f\u8d23\u7269\u6743\u7ba1\u7406\uff0c\u865a\u62df\u8d27\u5e01\u6216\u8005\u533a\u5757\u94fe\u867d\u7136\u5728\u673a\u5236\u4e0a\u80fd\u64cd\u4f5c\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u662f\u8fd9\u4e2a\u6570\u5b57\u5185\u5bb9\u672c\u8eab\u662f\u53ef\u4ee5\u590d\u5236\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4f5c\u8005\u53ef\u4ee5\u5728\u4e0d\u540c\u7684\u6570\u5b57\u5e73\u53f0\u53d1\u5e03\uff0c\u7406\u8bba\u4e0a\uff0c\u53ea\u6709\u5e73\u53f0\u81ea\u8eab\u53ef\u4ee5\u4fdd\u8bc1\u7269\u6743\u552f\u4e00\uff0c\u5e73\u53f0\u5fc5\u987b\u4e0e\u4f5c\u8005\u8fbe\u6210\u5b9e\u7269\u6216\u8005\u539f\u59cb\u4f5c\u54c1\u7684\u7269\u6743\u534f\u8bae\uff0c\u6bd4\u5982\u4f5c\u8005\u4e0d\u80fd\u5728\u5176\u4ed6\u5e73\u53f0\u518d\u4f7f\u7528\u6b21\u4f5c\u54c1\uff0c\u6216\u8005\u4f5c\u8005\u9500\u6bc1\u539f\u59cb\u7535\u5b50\u7248\uff0c\u8fd9\u6837\u4fdd\u8bc1\u8be5\u5e73\u53f0\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u8fd9\u4e9b\u673a\u5236\u90fd\u4f9d\u8d56\u4e8e\u771f\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u4fdd\u969c\uff0c\u5b9e\u9645\u4e0a\u865a\u62df\u8d27\u5e01\u53ea\u8981\u662f\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054\u7684\uff0c\u5b83\u7684\u7269\u6743\u90fd\u9700\u8981\u73b0\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u7269\u6743\u4fdd\u969c"),(0,n.kt)("p",null,"\u9664\u975e\u662f\u5b8c\u5168\u865a\u62df\u8d27\u5e01\uff0c\u4ed6\u4e0d\u9700\u8981\u6620\u5c04\u5b9e\u7269\uff0c\u8d27\u5e01\u7684\u53d1\u884c\u672c\u8eab\u5c31\u662f\u57fa\u4e8e\u533a\u5757\u94fe\u5927\u578b\u7684\uff0c\u6240\u4ee5\u5b83\u672c\u8eab\u5c31\u6709\u7269\u6743\u4fdd\u8bc1\u4e86\uff0c\u4f46\u662f\u8fd9\u79cd\u4e5f\u662f\u6ca1\u6709\u6cd5\u5f8b\u4fdd\u969c"),(0,n.kt)("p",null,"\u62df\u5a32\u7684\u6570\u5b57\u5185\u5bb9\u662f\u7531\u7528\u6237\u521b\u5efa\u7684\uff0c\u6216\u8005\u5927\u90e8\u5206\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u5bfc\u5165\u4e00\u90e8\u5206\u5df2\u6709\u8d44\u6e90\uff0c\u8fd9\u90e8\u5206\u65e0\u6cd5\u63a7\u5236\u7269\u6743\u7684\u552f\u4e00\u6027\uff0c\u9700\u8981\u501f\u52a9\u73b0\u5b9e\u4e16\u754c\u7684\u7248\u6743\u673a\u5236\uff0c\u4f46\u662f\u5b83\u7684\u5927\u90e8\u5206\u5185\u5bb9\u662f\u7528\u6237\u57fa\u4e8e\u62df\u5a32\u5e73\u53f0\u521b\u5efa\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u5b83\u7684\u90a3\u4e2a\u5185\u5bb9\u5728\u521b\u5efa\u65f6\u5df2\u7ecf\u57fa\u4e8e\u533a\u5757\u94fe\u6280\u672f\u5f97\u5230\u7269\u6743\u4fdd\u969c"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\uff0c\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u7247\u6216\u8005\u89c6\u9891\uff0c\u5176\u5f88\u5bb9\u6613\u88ab\u590d\u5236\u4fdd\u5b58\uff0c\u4e5f\u4e0d\u50cf\u4f20\u7edf\u76843D\u5185\u5bb9\u4e00\u6837\u5bb9\u6613\u88ab\u4e0b\u8f7d\uff0c\u5b83\u672c\u8eab\u662f\u4e00\u79cd\u79c1\u6709\u683c\u5f0f\uff0c\u4ed6\u5fc5\u987b\u501f\u52a9\u5e73\u53f0\u624d\u80fd\u89e3\u6790\uff0c\u5b83\u7684\u5185\u5bb9\u4e5f\u5168\u90e8\u5b58\u50a8\u5728\u4e91\u7aef\uff0c\u8fd9\u4f7f\u5f97\u5b83\u7684\u7269\u6743\u80fd\u591f\u8fdb\u4e00\u6b65\u88ab\u4fdd\u969c\uff1a\u4f60\u53ea\u80fd\u5728\u8fd9\u4e2a\u5e73\u53f0\u624d\u80fd\u4f53\u9a8c\u8fd9\u4e2a\u4f5c\u54c1\uff0c\u4f46\u5728\u8fd9\u4e2a\u5e73\u53f0\u5b83\u662f\u552f\u4e00\u7684\uff0c\u4f60\u4e0d\u80fd\u5c06\u5b83\u590d\u5236\u5230\u5176\u4ed6\u5730\u65b9"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u62df\u5a32\u672c\u8eab\u8fd8\u6709\u4e00\u5957\u4ef7\u503c\u8ba4\u540c\u7684\u673a\u5236\uff0c\u5c31\u50cf\u6e38\u620f\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u8981\u53d1\u6325\u4f60\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\uff0c\u4ed8\u51fa\u65f6\u95f4\u548c\u601d\u8003\u624d\u80fd\u521b\u4f5c\u51fa\u597d\u7684\u4e1c\u897f\uff0c\u800c\u5176\u4ed6\u7528\u6237\u5728\u4f53\u9a8c\u8fc7\u7a0b\u4e2d\u4f53\u9a8c\u5230\u4e86\u4f60\u7684\u6587\u5316\u827a\u672f\u8868\u8fbe\uff0c\u4f60\u7684\u4ef7\u503c\u5e76\u88ab\u8ba4\u540c\uff0c\u7528\u6237\u6709\u4e00\u4e2a\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5546\u54c1\u4e70\u5356\uff0c\u8fd9\u7c7b\u4f3c\u4e8e\u5546\u54c1\u9700\u8981\u4f7f\u7528\u624d\u6709\u4ef7\u503c\uff0c\u8fd9\u4e2a\u4f7f\u7528\u5c31\u662f\u5bf9\u6570\u5b57\u5185\u5bb9\u6587\u5316\u827a\u672f\u8868\u8fbe\u7684\u4f53\u9a8c\uff0c\u4f7f\u7528+\u4ea4\u6613 \u624d\u80fd\u5f62\u6210\u5faa\u73af\uff1a\u4f7f\u7528\u53d1\u73b0\u4ef7\u503c\uff0c\u4fc3\u8fdb\u4ea4\u6613\uff0c\u8fdb\u800c\u4fc3\u8fdb\u4f7f\u7528\u4ef7\u503c\u7684\u521b\u9020"),(0,n.kt)("li",{parentName:"ul"},"\u9759\u60012D\u827a\u672f\u54c1\u5176\u5b9e\u8fd8\u662f\u7eb8\u8d28\u66f4\u73cd\u8d35\uff0c\u65e0\u8bba\u662f\u521b\u4f5c\u7684\u96be\u5ea6\u3001\u4eea\u5f0f\u611f\uff0c\u8fd8\u662f\u4f53\u9a8c\u6b23\u8d4f\u65f6\u7684\u4e13\u6ce8\u548c\u4eea\u5f0f\u611f\uff0c\u5728\u6570\u5b57\u5c4f\u5e55\u4e0a\u770b2D\u827a\u672f\u53d7\u5f88\u591a\u56e0\u7d20\u5f71\u54cd\uff0c\u6bd4\u5982\u53d7\u5c4f\u5e55\u5206\u8fa8\u7387\u3001\u8272\u5f69\u3001\u5c4f\u5e55\u5c3a\u5bf8\u7b49\u56e0\u7d20\u5f71\u54cd\uff0c\u4f463D\u6570\u5b57\u5185\u5bb9\u5219\u5929\u751f\u662f\u865a\u62df\u7684")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u6280\u672f\u5bfc\u81f4\u7684\u601d\u7ef4\u6709\u65f6\u5019\u5f88\u53d7\u9650\uff0c\u5927\u5bb6\u4f1a\u503e\u5411\u4e8e\u653e\u5927\u8fd9\u9879\u6280\u672f\u7684\u529f\u7528\uff0c\u8ba4\u4e3a\u4e00\u5207\u7686\u53ef\u4ee5\u4f7f\u7528\u533a\u5757\u94fe\uff0c\u56e0\u4e3a\u6240\u6709\u4e8b\u52a1\u672c\u8d28\u4e0a\u90fd\u6d89\u53ca\u7269\u6743\u548c\u4ea4\u6613\uff0c\u4f46\u4ed6\u6709\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6709\u65f6\u5019\u4f1a\u8ba9\u4e00\u4e9b\u4e8b\u60c5\u66f4\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u66f4\u5927\u7684\u95ee\u9898\u4ed6\u53ef\u80fd\u4f1a\u9650\u5236\u6211\u4eec\u7684\u60f3\u8c61\u529b\uff0c\u4f8b\u5982\u6e38\u620f\u7684\u5206\u53d1\u8ddf\u4f20\u7edf\u7684\u4ea4\u6613\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4f20\u7edf\u7684\u4ea4\u6613\u7269\u54c1\u662f\u72ec\u7acb\u7684\uff0c\u6216\u8005\u4e0d\u53ef\u5206\u5272\u7684\uff0c\u4e00\u6b21\u4ea4\u6613\u5bf9\u5e94\u4e00\u4ef6\u5177\u4f53\u7684\u7269\u54c1\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u662f\u6709\u6301\u7eed\u66f4\u65b0\u7684\uff0c\u5f53\u6e38\u620f\u8fd9\u79cd\u6570\u5b57\u8d44\u4ea7\u53d1\u751f\u53d8\u66f4\uff0c\u4ed6\u7684Token\u4f1a\u53d8\u66f4\u5417\uff0c\u53d8\u66f4\u4e86\u539f\u6765\u7684\u8d2d\u4e70\u5c31\u5931\u6548\u4e86\uff0c\u4f46\u4e0d\u4e0d\u53d8\u66f4\u600e\u6837\u8ba9\u8ba2\u9605\u7684\u7528\u6237\u4eab\u53d7\u5230\u65b0\u589e\u670d\u52a1\uff0c\u6240\u4ee5\u5f53\u524d\u7684NFT\u5e02\u573a\u4e3b\u8981\u805a\u7126\u4e8e\u56fe\u7247\u8fd9\u79cd\u901a\u5e38\u4e0d\u4f1a\u4fee\u6539\u7684\u9759\u6001\u5185\u5bb9\uff0c\u5b83\u672c\u8eab\u4e0d\u662f\u7a0b\u5e8f\uff0c\u800c3D\u6570\u5b57\u5185\u5bb9\u4f1a\u9762\u4e34\u66f4\u590d\u6742\u7684\u53d8\u66f4"),(0,n.kt)("li",{parentName:"ul"},"\u518d\u6bd4\u5982\uff0c\u4f20\u7edf\u7684\u4e66\u753b\u662f\u6536\u85cf\u7684\u6982\u5ff5\u4e3a\u4e3b\uff0c\u5b83\u672c\u8eab\u662f\u7531\u5b9e\u4f53\u552f\u4e00\u6027\u6f14\u53d8\u51fa\u6765\u7684\u65b9\u5f0f\uff0c\u901a\u5e38\u4e00\u4e2a\u753b\u5bb6\u4e0d\u4f1a\u6279\u91cf\u753b\u540c\u4e00\u526f\u753b\uff0c\u4f46\u4ea4\u4e92\u7a0b\u5e8f\u5929\u751f\u5c31\u662f\u6570\u5b57\u51fa\u751f\uff0c\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4e3a\u4e3b\uff0c\u4ed6\u8981\u9762\u5bf9\u7684\u662f\u73a9\u5bb6\u6570\u91cf\u7684\u6982\u5ff5\u548c\u6a21\u5f0f\uff0c\u5355\u5e45\u753b\u7684\u6536\u85cf\u4ef7\u683c\u5f88\u9ad8\uff0c\u666e\u901a\u4eba\u6839\u672c\u627f\u53d7\u4e0d\u8d77\uff1b\u800c\u6e38\u620f\u9762\u5411\u7fa4\u4f53\uff0c\u6240\u4ee5\u5355\u4e2a\u590d\u5236\u7684\u6210\u672c\u5f88\u4f4e\uff0c\u8fd9\u624d\u5bfc\u81f4\u666e\u901a\u4eba\u53ef\u4ee5\u53c2\u4e0e\uff0c\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u524d\u8005\u5bb9\u6613\u5bfc\u81f4\u53cd\u590d\u62cd\u5356\uff0c\u591a\u6b21\u4ea4\u6613\uff0c\u800c\u540e\u8005\u51e0\u4e4e\u53ea\u6709\u4e00\u6b21\u6027\u4ea4\u6613\uff0c\u9632\u7be1\u6539\u7684\u9700\u6c42\u5f88\u4f4e\uff0c\u6211\u4eec\u552f\u4e00\u9700\u8981\u4fdd\u8bc1\u7684\u662f\u7248\u6743\u800c\u975e\u7269\u6743\uff0c\u800c\u533a\u5757\u94fe\u6070\u597d\u4e0d\u64c5\u957f\u7248\u6743"),(0,n.kt)("li",{parentName:"ul"},"3D\u9632\u7be1\u6539\u7684\u9700\u6c42\u8fdc\u4f4e\u4e8e\u56fe\u50cf\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u7be1\u6539\u4e0d\u4ec5\u4ec5\u610f\u5473\u7740\u6570\u5b57\u5b58\u50a8\u7684\u5185\u5bb9\u53d8\u66f4\uff0c\u800c\u5f88\u6709\u53ef\u80fd\u7be1\u6539\u7684\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u7684\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u53ca\u5176\u4ed6\u4e00\u4e9b\u4f9d\u8d56\u5982\u8054\u7f51\u7b49\u9ad8\u5ea6\u76f8\u5173\uff0c\u5bf9\u4e8e\u6e38\u620f\u7a0b\u5e8f\u4eba\u4eec\u4e00\u822c\u7be1\u6539\u7684\u662f\u5916\u6302\u800c\u975e\u7a0b\u5e8f\u672c\u8eab\uff0c\u6211\u4eec\u4e3b\u8981\u4fdd\u62a4\u7684\u662f\u539f\u59cb\u7684\u7248\u6743\uff0c\u800c\u975e\u4ea4\u6613\u8fc7\u7a0b\u4e2d\u7684\u7269\u6743")),(0,n.kt)("h3",{id:"744-rust"},"7.4.4 Rust"),(0,n.kt)("p",null,"\u6e38\u620f\u548c\u56fe\u5f62\u7cfb\u7edf\u76f8\u5bf9\u4f20\u7edf\u5e94\u7528\u67b6\u6784\u5e76\u884c\u8ba1\u7b97\u7684\u884c\u4e3a\u66f4\u591a\uff0c\u8981\u91cd\u70b9\u5173\u6ce8\u8bed\u8a00\u5bf9\u5e76\u884c\u8ba1\u7b97\u7684\u652f\u6301"),(0,n.kt)("p",null,"embark.dev"),(0,n.kt)("p",null,"Rust-gpu"),(0,n.kt)("p",null,"Kajiya "),(0,n.kt)("p",null,"rafx "),(0,n.kt)("p",null,"gamedev.rs"),(0,n.kt)("h3",{id:"745-unity-editorxr-and-scenefusion"},"7.4.5 Unity EditorXR and SceneFusion"),(0,n.kt)("h3",{id:"746-bevyengine"},"7.4.6 BEVYengine"),(0,n.kt)("p",null,"\u57fa\u4e8e\u6570\u636e\u9a71\u52a8\u7684rust\u6e38\u620f\u5f15\u64ce"),(0,n.kt)("h3",{id:"748-magicavoxel"},"7.4.8 magicavoxel"),(0,n.kt)("p",null,"\u611f\u89c9\u4ee5Voxel \u4e3a\u57fa\u7840\u7684\u521b\u5efa\uff0c\u4e00\u662f\u6bd4\u7cbe\u7ec6\u7684\u4e09\u89d2\u5f62\u4fbf\u4e8e\u751f\u6210\uff0c\u800c\u4e14\u7b26\u5408\u7269\u7406\u521b\u5efa\u7684\u65b9\u5f0f"),(0,n.kt)("h3",{id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"},"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"),(0,n.kt)("p",null,"Unity unreal engine blender"),(0,n.kt)("h3",{id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b"},"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b"),(0,n.kt)("h3",{id:"7411-meta-builder-bot"},"7.4.11 Meta Builder bot"),(0,n.kt)("p",null,"\u8bed\u8a00\u6216\u6587\u672c\u81f3\u5c11\u751f\u6210\u8981\u7d20\uff0c\u5982\u679c\u6709\u8bef\u5dee\uff0c\u81f3\u5c11\u5927\u90e8\u5206\u8981\u7d20\uff0c\u7136\u540e\u7528\u6237\u4ea4\u4e92\u4e13\u6ce8\u4e8e\u7cbe\u8c03\uff0c\u6216\u8005\u628a\u8981\u7d20\u548c\u4ea4\u4e92\u5206\u5f00\uff0c\u5728\u7528\u6237\u786e\u5b9a\u8981\u7d20\u4e4b\u540e\uff0c\u76f8\u5f53\u4e8e\u6709\u4e86\u7c7b\u578b\u5148\u9a8c\uff0c\u518d\u786e\u5b9a\u4ea4\u4e92\u6709\u66f4\u591a\u80cc\u666f"),(0,n.kt)("p",null,"\u5728C\u7aef\uff0c\u4ece\u6570\u636e\u5e93\u9009\u62e9\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u7c7b\u578b\u5212\u5206\uff0c\u5e76\u5177\u6709\u4e00\u5b9a\u7684\u65e0\u6cd5\u5bf9\u5185\u5bb9\u8fdb\u884c\u7ec4\u7ec7\u53d8\u5f97\u975e\u5e38\u91cd\u8981\uff0c\u5927\u5927\u51cf\u5c11\u4ea4\u4e92\u6210\u672c\uff0c\u800c\u5c06\u4ea4\u4e92\u96c6\u4e2d\u4e8e\u5f53\u524d\u573a\u666f\u53ef\u4ee5\u770b\u5230\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u7684\u6309\u94ae\u90fd\u8f6c\u6210\u8bed\u97f3\u6216\u8005\u4e00\u4e9b\u5feb\u6377\u6587\u5b57\uff0c\u77ed\u8bed\uff0c\u5173\u952e\u5b57"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ"},"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ")),(0,n.kt)("h3",{id:"7412-houdini-node-based-workflow"},"7.4.12 Houdini: Node-based Workflow"),(0,n.kt)("p",null,"3\u3001Houdini "),(0,n.kt)("p",null,"\u8981\u50cfHoudini \u4e00\u6837\u628a\u590d\u6742\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u65b9\u6cd5\u6784\u9020\uff0c\u6d41\u7a0b\u5b9a\u4e49\uff0c\u53c2\u6570\u8d4b\u503c\uff0c\u7b49\u5168\u90e8\u53bb\u6389\uff0c\u7528\u6237\u53ea\u4e13\u5fc3\u5199\u903b\u8f91\uff0c\u6700\u540e\u6574\u4e2a\u7f16\u7a0b\u662f\u50cfHoudini \u90a3\u6837\u5e72\u51c0\u6574\u6d01\u7684\uff0c\u6ca1\u6709\u4ee3\u7801\u75d5\u8ff9\u7684"),(0,n.kt)("p",null,"Houdini\u7684node\u6ca1\u6709\u53c2\u6570\uff0c\u53ea\u6709\u8282\u70b9\uff0c\u4ed6\u628aoperation\u5206\u6210\u4e00\u4e9b\u7c7b\u578b\uff0c\u90a3\u4e2a\u7c7b\u578b\u4e4b\u95f4\u7684\u53c2\u6570\u4f20\u9012\u662f\u56fa\u5b9a\u7684"),(0,n.kt)("p",null,"Houdini\u7684Node network \u662f\u4e00\u79cd\u8fd0\u884c\u8fc7\u7a0b\uff0c\u4ed6\u65e2\u53ef\u4ee5\u5145\u5f53\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u914d\u7f6e\uff0c\u5982\u679c\u6240\u6709\u8282\u70b9\u6ca1\u6709\u5ef6\u8fdf\uff0c\u77ac\u65f6\u6267\u884c\uff0c\u4ed6\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9759\u6001\u8bbe\u7f6e\uff0c\u5982\u679c\u8fd9\u4e9b\u8282\u70b9\u7684\u6307\u4ee4\u80fd\u5728\u4e00\u5e27\u5185\u6267\u884c\u5b8c\uff0c\u8fd9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4e00\u4e2ausd\u6216\u8005\u5176\u4ed6\u5408\u9002\u6587\u4ef6\u7684\u52a0\u8f7d\u8fc7\u7a0b\uff0c\u76f8\u5f53\u4e8e\u5728\u52a0\u8f7d\u8fc7\u7a0b\u7684\u987a\u5e8f\u6267\u884c\u4e2d\uff0c\u540e\u7eed\u7684\u52a0\u8f7d\u53ef\u80fd\u4f1a\u4fee\u6539\u524d\u9762\u7684\u5c5e\u6027\uff0c\u4f46\u4e0d\u8db3\u7684\u65b9\u9762\u662f\u52a0\u8f7d\u7684\u8fc7\u7a0b\u65e0\u6cd5\u5e76\u884c\u5316\uff0c\u56e0\u4e3aNode network \u662f\u4e00\u4e2a\u987a\u5e8f\u6307\u4ee4"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u52a8\u753b\uff0c\u5982\u679c\u67d0\u4e9b\u8282\u70b9\u7684\u6267\u884c\u9700\u8981\u65f6\u95f4\uff0c\u4ed6\u5c31\u5f62\u6210\u52a8\u753b")),(0,n.kt)("p",null,"Houdini\u7684\u6d41\u7a0b\u548c\u6570\u636e\u9a71\u52a8\u7684\u6d41\u7a0b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4e00\u4e2a\u662f\u6267\u884c\u8ba1\u7b97\u7684\u8fc7\u7a0b\uff0c\u4e00\u4e2a\u662f\u5355\u7eaf\u7684\u7ec4\u5408\u914d\u7f6e\uff0c\u8fd9\u662f\u56e0\u4e3aHoudini \u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a\u5185\u5bb9\u751f\u6210\u7684\u8fc7\u7a0b\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u7f16\u8f91\u6001\uff0c\u800cECS\u662f\u8fd0\u884c\u6001"),(0,n.kt)("p",null,"\u5185\u5bb9\u751f\u6210\u8fc7\u7a0b\u4e2d\u600e\u4e48\u5bf9\u4e00\u4e2a\u57fa\u7840\u6a21\u578b\u8fdb\u884c\u53d8\u5f62\uff0c\u5176\u8f93\u5165\u8f93\u51fa\u53c2\u6570\u662f\u786e\u5b9a\u6216\u8005\u53ef\u4ee5\u63a8\u5bfc\u7684\uff0c\u4f46\u662f\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u5219\u6bd4\u8f83\u590d\u6742\uff0c\u6ca1\u6709\u89c4\u5219\uff0c\u9700\u8981\u5b9a\u4e49\u534f\u8bae"),(0,n.kt)("p",null,"Directable results "),(0,n.kt)("p",null,"\u7531\u4e8e\u6240\u6709\u8bbe\u8ba1\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u6700\u540e\u4e00\u523b\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4f20\u7edf\u7684\u786c\u7f16\u7801\uff0c\u5b83\u5177\u6709\u8bb8\u591a\u4e2d\u95f4\u5f62\u6001\uff0c\u6ca1\u6709\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\u6d41\u7a0b\u548c\u7ed3\u6784\uff0c\u6240\u4ee5\u5f88\u5bb9\u6613\u4e2d\u95f4\u67d0\u4e9b\u6d41\u7a0b\u6216\u8005\u903b\u8f91\u53d8\u4e86\uff0c\u5176\u540e\u9762\u7684\u6d41\u7a0b\u90fd\u53d7\u5230\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u751a\u81f3\u9700\u8981\u91cd\u65b0\u4fee\u6539\u540e\u9762\u7684\u4ee3\u7801\u548c\u903b\u8f91\uff0c\u8fed\u4ee3\u6210\u672c\u9ad8"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u6709\u70b9\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u53ef\u4ee5\u5b9e\u73b0\u8fd9\u4e2a\u76ee\u6807"),(0,n.kt)("p",null,"\u5176\u5b9e\u5c31\u6709\u70b9\u50cf\u7f16\u8bd1\u6d41\u7a0b\u6216\u8005\u6e32\u67d3\u7ba1\u7ebf\u4e00\u6837\uff0c\u4ed6\u5b9a\u4e49\u597d\u4e86\u6574\u4e2a\u7ba1\u7ebf\u4e4b\u95f4\u7684\u53c2\u6570\u548c\u63a5\u53e3\uff0c\u90a3\u4e48\u4e2d\u95f4\u7684\u8c03\u6574\u5c31\u4e0d\u4f1a\u5f71\u54cd\u90a3\u4e48\u5927\uff0c\u4f60\u53ea\u9700\u8981\u9075\u5faa\u63a5\u53e3\u89c4\u8303\u5c31\u884c"),(0,n.kt)("p",null,"Tool building "),(0,n.kt)("p",null,"\u57fa\u4e8enode-based\u7684\u5de5\u4f5c\u6d41\u7a0b\u53ef\u4ee5\u4f7f\u5f97\u81ea\u5b9a\u4e49node\u53d8\u5f97\u53ef\u80fd\uff0c\u53ea\u8981\u9075\u7167node\u4e4b\u95f4\u7684\u534f\u8bae\uff0c\u7136\u540enode\u5c31\u53ef\u4ee5\u5171\u4eab\uff0c\u5373\uff1a"),(0,n.kt)("p",null,"Houdini Digital Assets "),(0,n.kt)("p",null,"\u4e0a\u4e0b\u6e38\u7684\u53c2\u6570\u5f62\u5f0f\u57fa\u672c\u662f\u8fd8\u662fHoudini \u672c\u8eab\u7684node\u5b9a\u4e49\u7684\uff0c\u5f00\u53d1\u8005\u53ea\u662f\u628a\u4e2d\u95f4\u67d0\u4e9b\u5904\u7406\u8fc7\u7a0b\u4fdd\u5b58\u4e3a\u4e00\u4e2a.hda \u8d44\u4ea7\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u5b9a\u4e49\u53c2\u6570\uff0c\u521b\u4f5c\u505a\u7684\u53ea\u662f\u628a\u4e00\u4e2a\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u590d\u7528\uff0c\u8fd9\u4e9b\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u8fd8\u662f\u7528Houdini \u57fa\u672c\u7684\u64cd\u4f5c\uff0cHoudini\u6709\u6d77\u91cf\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u521b\u4f5c\u8005\u51e0\u4e4e\u5f88\u5c11\u4f1a\u7f16\u5199\u81ea\u5b9a\u4e49\u51fd\u6570\u4ee3\u7801\uff0c\u6216\u8005\u53ea\u9700\u8981\u7b80\u5355\u5f88\u5c0f\u7247\u6bb5\u7684\u4ee3\u7801"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u8981\u60f3\u505a\u5230\u8fd9\u4e00\u5c42\uff0c\u8981\u5bf9\u6e38\u620f\u903b\u8f91\u811a\u672c\u8fdb\u884c\u6df1\u5165\u5206\u7c7b\uff0c\u5e76\u628a\u8fd9\u4e9b\u6a21\u5f0f\u672f\u8bed\u5316\uff0c\u8fd9\u4e9b\u5206\u7c7b\u8981\u80fd\u591f\u5bf9\u6bd4\uff0c\u6240\u6709\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u5408\uff0c\u4ee5\u53ca\u4fdd\u8bc1\u76f8\u5e94\u7684\u7075\u6d3b\u6027\uff0c\u4f7f\u5f97\u81ea\u5b9a\u4e49\u7684\u6210\u672c\u6700\u4f4e\uff0c\u81ea\u5b9a\u4e49\u7684\u6a21\u5f0f\u66f4\u7b80\u5355"),(0,n.kt)("p",null,"A new way of thinking "),(0,n.kt)("p",null,"\u7531\u4e8e\u5168\u65b0\u7684\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5b9a\u4e49\u7684\u80fd\u529b\u800c\u4e0d\u662f\u9488\u5bf9\u5177\u4f53\u95ee\u9898\u91cd\u590d\u89e3\u51b3\uff0c\u5c31\u4f1a\u4ea7\u751f\u4e00\u79cd\u65b0\u7684\u521b\u5efa\u6570\u5b57\u5185\u5bb9\u7684\u601d\u7ef4"),(0,n.kt)("p",null,"\u7f16\u7a0b\u90fd\u662f\u5728node\u4e4b\u95f4\u7f16\u7a0b\uff0c\u56fa\u5b9a\u7684\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,"\u8ddfHoudini \u7684\u4e3b\u8981\u533a\u522b\u662f\u4ed6\u662f\u79bb\u7ebf\u7684\uff0c\u7f16\u8f91\u6001\u7684\uff0c\u4e0d\u9700\u8981\u5185\u5bb9\u5ba1\u67e5\uff0c\u517c\u5bb9\u6027\u68c0\u67e5\uff0c\u5b89\u5168\u6027\u7b49\uff0c\u800c\u62df\u5a32\u662f\u8fd0\u884c\u65f6\u7684\uff0c\u5305\u62ec\u5305\u7684\u5927\u5c0f\uff0c\u4eff\u771f\u6a21\u62df\uff0c\u5b89\u5168\uff0c\u517c\u5bb9\u6027\u7b49\u95ee\u9898\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\u53ef\u4ee5\u901a\u8fc7\u7f16\u8bd1\u5668\u8981\u505a\u4e00\u4e9b\u5206\u6790\uff0c\u53e6\u4e00\u65b9\u9762\u7528\u6237\u9700\u8981\u5728\u81ea\u5df1\u7684\u73af\u5883\u8dd1\u8d77\u6765"),(0,n.kt)("h3",{id:"7413-realityos"},"7.4.13 realityOS"),(0,n.kt)("h3",{id:"7414-openxr"},"7.4.14 OpenXR"),(0,n.kt)("p",null,"\u82f9\u679c\u9000\u51fa\u4e86OpenXR\u610f\u5473\u7740\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u82f9\u679c\u4f1a\u5bf9XR\u7684\u7406\u89e3\u6709\u8f83\u5927\u7684\u5dee\u5f02\uff0c\u82f9\u679c\u4e5f\u662f\u5e0c\u671b\u52a0\u5f3a\u8fd9\u79cd\u5dee\u5f02\u6765\u589e\u5f3a\u81ea\u5df1\u7684\u7ade\u4e89\u529b\u548c\u5dee\u5f02\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u6807\u51c6\u8fd8\u5b58\u5728\u5f88\u591a\u53d8\u6570\uff0c\u6807\u51c6\u672c\u8eab\u53ef\u80fd\u9762\u4e34\u8f83\u5927\u53d8\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u5f00\u53d1\u63a5\u53e3\u4f1a\u8fdb\u4e00\u6b65\u5206\u5316\uff0c\u5f00\u53d1\u8005\u9762\u5bf9\u66f4\u52a0\u590d\u6742\u7684\u6982\u5ff5\u548c\u5f00\u53d1\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u81ea\u7814\u7684\u63a5\u53e3\u5c01\u88c5\u4f1a\u66f4\u5feb\u901f\u76f8\u5e94\u8fd9\u79cd\u53d8\u5316\uff0c\u5e76\u4e14\u7b80\u5316\u7528\u6237\u5f00\u53d1")),(0,n.kt)("h3",{id:"7415-ecs--ai"},"7.4.15 ECS + AI"),(0,n.kt)("p",null,"EntitiesBT"),(0,n.kt)("p",null,"Behavior Tree "),(0,n.kt)("p",null,"\u5728\u539f\u751f\u7684ECS\u6846\u67b6\u4e0b\u5b9e\u73b0\u5177\u6709\u575a\u5f3a\u4f9d\u8d56\u5173\u7cfb\u7684\u529f\u80fd\u662f\u5426\u5f88\u96be\uff0c\u4f8b\u5982\u884c\u4e3a\u6811\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u662f\u50cf\u884c\u4e3a\u6811\u4e00\u6837\u76f8\u5bf9\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6211\u4eec\u53ef\u4ee5\u50cfUE blueprint \u4e00\u6837\u5b9a\u4e49\u5957\u6846\u67b6\uff0c\u7136\u540e\u5bf9\u4e8e\u8fd9\u4e2a\u6846\u67b6\u6309\u592a\u6781\u4e00\u6837\u7684\u601d\u8def\u5728\u7f16\u8bd1\u5c42\u5bf9\u4ee3\u7801\u505a\u91cd\u65b0\u8c03\u6574\uff0c\u5f53\u7136\u8981\u8003\u8651\u91cd\u65b0\u7f16\u8f91\u7684\u4fbf\u6377\u6027\uff0c\u6240\u4ee5\u53ef\u80fd\u662f\u62df\u5a32\u8fd0\u884c\u65f6\u4e0a\u7684\u4e00\u4e2a\u811a\u672c\u8f7b\u91cf\u7ea7JIT"),(0,n.kt)("h3",{id:"7416-unreal-blueprint"},"7.4.16 Unreal blueprint"),(0,n.kt)("p",null,"\u84dd\u56fe\u4ee5\u53ca\u76f8\u5e94\u7684\u5f88\u591a\u7f16\u8f91\u5668\u53caUI\u754c\u9762\uff0c\u672c\u8d28\u4e0a\u4ed6\u4eec\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4ed6\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fa\u5b9a\u7c7b\u578b\u7684\u5b9a\u4e49\uff1a\u5bf9\u4e8e\u4e00\u4e9b\u7279\u5b9a\u56fa\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982blueprint \u5305\u542b\u7684\u90a3\u4e9b\u7c7b\u578b\uff0c\u4ed6\u4eec\u5f80\u5f80\u5728OOP\u4e2d\u6709\u4e00\u5b9a\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\u4e00\u822c\u9700\u8981\u5b9a\u4e49\u90a3\u51e0\u4e2a\u7c7b\u6216\u8005\u5b9e\u4f8b\uff0c\u90a3\u4e2a\u7c7b\u9700\u8981\u5f15\u7528\u90a3\u4e9b\u7c7b\u7684\u5b9e\u4f8b\uff0c\u4ee5\u53ca\u600e\u6837\u5bf9\u8fd9\u4e9b\u5b9e\u4f8b\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u4e8e\u5b9e\u73b0\u8fd9\u4e9bblueprint\u5bf9\u5e94\u7684\u529f\u80fd\uff0c\u4ed6\u4eec\u7684\u8fd9\u79cd\u901a\u7528\u7ed3\u6784\u88ab\u8bbe\u8ba1\u51fa\u6765\uff0c\u5426\u5219\u90a3\u4e2a\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u5b9a\u4e49\u81ea\u5df1\u7684\u5bf9\u8c61\u6a21\u578b\uff0c\u6bcf\u4e2a\u4eba\u5b9a\u4e49\u7684\u53ef\u80fd\u5f88\u4e0d\u4e00\u6837\uff0c\u76f8\u5e94\u7684\u5185\u5b58\u7ba1\u7406\uff0c\u7b49\u7b49\u90fd\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5e94\u529f\u80fd\u7684\u521d\u59cb\u5316\uff0c\u6210\u5458\u53d8\u91cf\u590d\u5236\u7ba1\u7406\u7b49\u662f\u5f88\u7e41\u7410\u7684\u4e8b\u60c5\uff0c\u6309\u7167\u84dd\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4ed6\u5b9e\u9645\u4e0a\u628a\u6d41\u7a0b\u56fa\u5316\u4e86\uff0c\u56e0\u6b64\u8fd9\u4e9b\u57fa\u672c\u7684\u6d41\u7a0b\u5c31\u7b80\u5316\u4e86"),(0,n.kt)("li",{parentName:"ul"},"\u5269\u4e0b\u7528\u6237\u9700\u8981\u505a\u7684\u5c31\u662f\u9488\u5bf9\u56fa\u5b9a\u7ed3\u6784\u548c\u67b6\u6784\u4e0b\u7684\u5177\u4f53\u67d0\u4e2a\u51fd\u6570\u8fdb\u884c\u4ee3\u7801\u7f16\u5199")),(0,n.kt)("p",null,"\u574f\u5904\u662f\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u57fa\u4e8e\u4ee3\u7801\u7684\uff0c\u5e76\u4e14\u65e0\u6cd5\u81ea\u5b9a\u4e49\uff0c\u5b58\u5728\u4e00\u5b9a\u7684\u5197\u4f59\uff0c\u5982\u679c\u4e0d\u91c7\u7528\u5b83\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u81ea\u5df1\u4ece\u96f6\u5b9e\u73b0\uff0c\u90a3\u5c31\u9700\u8981\u5b9e\u73b0\u6574\u4e2a\u6a21\u5757\u7684\u67b6\u6784\uff0c\u5bf9\u8c61\u4e4b\u95f4\u7684\u7ba1\u7406\u7b49\uff0c\u4ee3\u4ef7\u66f4\u5927\uff0c\u4f46\u81ea\u7531\u5ea6\u66f4\u5927\uff0c\u4f8b\u5982\u53ef\u4ee5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\uff0cUE\u7684\u6d41\u7a0b\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\uff0c\u6216\u8005\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u6216\u8005\u73af\u5883\u4e0b\u4e0d\u4e00\u5b9a\u6700\u4f18"),(0,n.kt)("p",null,"\u84dd\u56fe\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u67b6\u6784\uff0c\u4ed6\u76f8\u5f53\u4e8eUE\u5e2e\u52a9\u6253\u4e86\u4e00\u4e2a\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5bf9\u5176\u4e2d\u7684\u65b9\u6cd5\u8fdb\u884c\u586b\u5145\uff0c\u6574\u4e2a\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7684\u601d\u8def\uff0c\u5bf9\u4e8eEpic \u6765\u8bb2\uff0c\u5b83\u9700\u8981\u53bb\u5b9e\u73b0\u5927\u91cf\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u6240\u4ee5\u5b83\u7684\u529f\u80fd\u6bd4Unity\u8981\u590d\u6742\u5f97\u591a\uff0c\u4f46\u8fd9\u4e9b\u5b9e\u73b0\u5bf9\u4e8e\u7279\u5b9a\u7684\u4e00\u4e2a\u6e38\u620f\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u4f18\u5316\u7684\uff0c\u4ed6\u4f1a\u727a\u7272\u6027\u80fd\u6765\u6362\u53d6\u8fd9\u79cd\u7b80\u5355\uff0c\u56e0\u4e3a\u901a\u7528\u7684\u67b6\u5b50\u5f80\u5f80\u4e0d\u662f\u6700\u4f18\u7684\uff0c\u800c\u5b83\u9762\u5411\u5bf9\u8c61\u7684\u6df1\u5ea6\u5b9e\u73b0\u5bfc\u81f4\u4ee3\u7801\u4e5f\u5f88\u96be\u4f18\u5316\uff0c\u4f8b\u5982\u67b6\u5b50\u91cc\u9762\u5b58\u5728\u5927\u91cf\u4ea4\u53c9\u5f15\u7528"),(0,n.kt)("p",null,"\u50cfUnity\u56e0\u4e3a\u6ca1\u6709\u63d0\u4f9b\u4f17\u591a\u8fd9\u79cd\u6df1\u5ea6\u5b9a\u5236\u7684\u67b6\u5b50\uff0c\u53cd\u800c\u80fd\u591f\u5bb9\u6613\u53bb\u5b9e\u73b0ECS\u8fd9\u79cd\u4f18\u5316"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eUnity\uff0c\u6709\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5\uff0c\u7c7b\u4f3c\u5b9a\u4e49\u4e86\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u8303\u5f0f\uff0c\u4f46\u8fd9\u4e9b\u8303\u5f0f\u672c\u8eab\u662f\u6309\u7167OOP\u7684\u65b9\u5f0f\u5b9a\u4e49\u7684\uff0c\u56e0\u6b64\u4ed6\u7684\u8303\u5f0f\u662f\u5b9e\u73b0\u4e86\u4e00\u4e9b\u7279\u5b9a\u7684\u529f\u80fd\uff0c\u800c\u4e0d\u662f\u5b9a\u4e49\u4e86\u4e00\u4e2a\u6846\u67b6\uff0c\u6240\u4ee5UE\u8981\u5b66\u4e60\u66f4\u591a\u7684\u77e5\u8bc6\uff0c\u5f88\u591a\u77e5\u8bc6\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u7279\u5b9a\u8303\u5f0f\u7684"),(0,n.kt)("p",null,"\u9664\u4e86\u8303\u5f0f\u672c\u8eab\uff0cBlueprint \u7684\u53e6\u4e00\u4e2a\u5f3a\u5927\u7684\u529f\u80fd\u5728\u4e8e\u5b83\u628a\u6574\u4e2a\u4e00\u4e2a\u4ee3\u7801\u5757\u6216\u8005\u4e00\u4e2a\u590d\u6742\u7684\u5b50\u6a21\u5757\u7cfb\u7edf\uff0c\u6253\u6563\u6210\u591a\u4e2a\u4ee5\u65b9\u6cd5\u4e3a\u5355\u4f4d\u7684\u53ef\u89c6\u7f16\u8f91\u6a21\u5757\uff0c\u8fd9\u6837\u662f\u7684\u4fee\u6539\u5355\u72ec\u7684\u6a21\u5757\u66f4\u52a0\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u5173\u6ce8\u51fd\u6570\u7684\u8f93\u5165\u8f93\u51fa\uff0c\u4e0d\u9700\u8981\u5728\u4ee3\u7801\u4e2d\u5bfb\u627e\u4fee\u6539\u51fd\u6570\u7684\u5165\u53e3\uff0c\u4e5f\u4e0d\u9700\u8981\u5f15\u5165\u4e00\u4e9b\u53d8\u91cf\u7684\u4fe1\u7528\u3001\u8bfb\u53d6\u6216\u8005\u4fee\u6539\u7e41\u7410\u7684\u4ee3\u7801"),(0,n.kt)("h3",{id:"7417-pixar"},"7.4.17 Pixar"),(0,n.kt)("p",null,"\u76ae\u514b\u65af\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408"),(0,n.kt)("p",null,"\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408\u7684\u7ed3\u679c\u662f\u4ec0\u4e48"),(0,n.kt)("h3",{id:"7418-gaia-procedural-worldscom"},"7.4.18 Gaia procedural-worlds.com"),(0,n.kt)("p",null,"\u7a0b\u5e8f\u5316\u9759\u6001\u5185\u5bb9\u751f\u6210\u5e94\u8be5\u8fd8\u662f\u6bd4\u8f83\u6210\u719f\u7684\u67b6\u6784\u4e86\uff0c\u540e\u671f\u5e94\u8be5\u80fd\u591f\u5bb9\u6613\u5f00\u53d1\uff0c\u5230\u4ea4\u4e92\u66f4\u96be"),(0,n.kt)("p",null,"\u4ea4\u4e92\u7684\u8bbe\u8ba1\u4e5f\u8981\u662f\u7a0b\u5e8f\u5316\u7684\uff0c\u5f53\u7136\u7531\u4e8eECS\u672c\u8eab\u662f\u7ec4\u4ef6\u5316\u7684\uff0c\u6ca1\u6709\u64cd\u4f5c\u987a\u5e8f\u4f9d\u8d56\uff0c\u6240\u4ee5\u8fd9\u4e2a\u95ee\u9898\u4e0d\u5927\u5b58\u5728\uff0c\u4f46\u662f\u5f53\u9700\u8981\u5bf9\u9759\u6001\u5185\u5bb9\u8bbe\u8ba1\u591a\u4e2a\u4fee\u6539\u65f6\uff0c\u64cd\u4f5c\u6b65\u9aa4\u7684\u5f71\u54cd\u5c31\u51fa\u6765\u4e86\uff0c\u7a0b\u5e8f\u5316\u7684\u597d\u5904\u662fdirectable\uff0c\u5b83\u7b80\u5316\u4e86\u5bf9\u64cd\u4f5c\u7684\u4efb\u610f\u4fee\u6539\uff0c\u4f20\u7edf\u7684\u8f6f\u4ef6\u5c31\u662f\u9075\u5faa\u89c4\u5219\u548c\u6b65\u9aa4\u7684\uff0c\u8fd9\u6837\u5982\u679c\u6709\u4e9b\u5386\u53f2\u64cd\u4f5c\u4fee\u6539\u4e86\u6216\u8005\u9700\u8981\u4fee\u6539\uff0c\u5f80\u5f80\u4f1a\u5f71\u54cd\u5176\u4ed6\u5927\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u4f46\u811a\u672c\u53ea\u662f\u9488\u5bf9\u5355\u4e2a\u7269\u4f53\u7684\u884c\u4e3a\uff0c\u6574\u4e2a\u573a\u666f\u7684\u7ed3\u67b6\u6784\u8bbe\u8ba1\u8fd8\u662f\u5e94\u8be5\u5c3d\u53ef\u80fd\u7684\u7a0b\u5e8f\u5316\uff0c\u800cRoblox \u6ca1\u6709\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7a0b\u5e8f\u5316\u7684\u573a\u666f\u8bbe\u8ba1\u4f7f\u5f97\u901a\u5e38\u53ef\u4ee5\u66f4\u9ad8\u6548\u5730\u8bbe\u8ba1\u5927\u73af\u5883\uff0c\u7136\u540e\u7cbe\u8c03\u5c0f\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u5bf9\u573a\u666f\u6bcf\u4e2a\u7269\u4f53\u90fd\u8981\u72ec\u7acb\u6446\u653e\u548c\u8bbe\u8ba1\uff0c\u56e0\u4e3a\u5927\u73af\u5883\u901a\u5e38\u90fd\u6709\u4e00\u5b9a\u7684\u968f\u673a\u6027"),(0,n.kt)("h3",{id:"7419-google-maps-api"},"7.4.19 Google Maps API"),(0,n.kt)("h3",{id:"7420-procedural-content-generation"},"7.4.20 Procedural content generation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DCC\u4f7f\u7528deforming, cutting, merging \u7b49\u4ee3\u66ff\u5bf9\u4e09\u89d2\u5f62\u7684\u76f4\u63a5\u64cd\u4f5c\uff0c\u4ece\u800c\u7b80\u5316\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"PCG\u4f7f\u7528\u6237\u4e13\u6ce8\u4e8e\u7528\u4e8e\u751f\u6210\u5185\u5bb9\u7684\u7a0b\u5e8f\u5316\u7b97\u6cd5\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7e41\u7410\u7684\u5185\u5bb9\u64cd\u4f5c\uff0c\u8fd9\u79cd\u7b97\u6cd5\u66f4\u7b26\u5408\u4eba\u7684\u903b\u8f91"),(0,n.kt)("p",null,"PCG\u7684\u8ba1\u7b97\u8fc7\u7a0b\u6bd4\u8f83\u590d\u6742\uff0c\u66f4\u9002\u5408PC\u7aef\uff0c\u79fb\u52a8\u7aef\u8981\u4e13\u6ce8\u73a9\u6cd5\u90e8\u4efd"),(0,n.kt)("p",null,"\u7b54\u4e3b\u5bf9\u751f\u6210\u7b97\u6cd5\u7684\u7406\u89e3\u5c31\u597d\u50cf\u67d0\u4e9b\u65f6\u671f\u5bf9\u706b\u836f\u7684\u7406\u89e3\uff1a\u7528\u6765\u653e\u70df\u82b1\u7684\u4e1c\u897f\uff0c\u9700\u8981\u7814\u7a76\u66f4\u597d\u7684\u706b\u836f\u4e48\uff1f\u4e0d\u662f\u7b97\u6cd5\u591f\u4e86\uff0c\u800c\u662f\u8bbe\u8ba1\u8005\u4e0d\u77e5\u9053\u8bbe\u8ba1\u76ee\u7684\u4e3a\u4f55\uff0c\u5bf9\u7b97\u6cd5\u6ca1\u6709\u8981\u6c42\u3002\u6e38\u620f\u6838\u5fc3\u8bbe\u8ba1\u7edd\u4e0d\u662f\u5267\u60c5\u3001\u573a\u666f\uff0c\u800c\u662f\u73a9\u6cd5\u3002\u73a9\u6cd5\u662f\u4ec0\u4e48\uff0c\u5c31\u662f\u7ed9\u73a9\u5bb6\u6709\u610f\u601d\u7684\u95ee\u9898\uff0c\u8ba9\u73a9\u5bb6\u89e3\u51b3\u95ee\u9898\u3002\u7528\u7b97\u6cd5\u63d0\u51fa\u7684\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u548c\u89e3\u51b3\u95ee\u9898\u96be\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u73a9\u5bb6\u5373\u4f7f\u77e5\u9053\u4e86\u4f60\u5982\u4f55\u751f\u6210\u95ee\u9898\uff0c\u4f46\u662f\u4ed6\u73b0\u5728\u4e5f\u4e0d\u77e5\u9053\u5982\u4f55\u6709\u6548\u7684\u89e3\u51b3\u95ee\u9898\u3002\u8fd9\u5c31\u662f\u8457\u540d\u7684NP/P\u95ee\u9898\uff0c\u6211\u5f53\u7136\u77e5\u9053\u4fc4\u7f57\u65af\u65b9\u5757\u968f\u673a\u751f\u6210\u7684\u65b9\u5757\u968f\u673a\u7b97\u6cd5\uff0c\u4f46\u5c31\u6ca1\u6709\u4e00\u4e2a\u9ad8\u6548\u7684\u7b97\u6cd5\u53bb\u89e3\u51b3\u4fc4\u7f57\u65af\u65b9\u5757\u62fc\u63a5\u95ee\u9898\uff0c\u6570\u72ec\u7684\u751f\u6210\u7b97\u6cd5\u5f88\u9ad8\u6548\uff0c\u89e3\u51b3\u6570\u72ec\u7684\u7b97\u6cd5\u5f88\u6162\uff0c\u751f\u6210\u5730\u56fe\u7684\u7b97\u6cd5\u9ad8\u6548\uff0c\u8bbf\u95ee\u5730\u56fe\u4e0a\u7684\u6bcf\u4e00\u4e2a\u70b9\u7684\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u5c31\u96be\u7206\u4e86\u3002\u4e3a\u5565\u89c9\u5f97\u751f\u6210\u7b97\u6cd5\u6ca1\u7528\uff0c\u56e0\u4e3a\u4e0d\u77e5\u9053\u8981\u6784\u9020\u4ec0\u4e48\u95ee\u9898\u7ed9\u73a9\u5bb6\uff0c\u8bbe\u8ba1\u76ee\u7684\u5230\u5e95\u662f\u4ec0\u4e48\uff0c\u800c\u662f\u6f2b\u65e0\u76ee\u7684\u5730\u53bb\u751f\u6210\u90a3\u4e9b\u82b1\u82b1\u8349\u8349\uff0c\u548c\u7528\u706b\u836f\u653e\u70df\u706b\u4e00\u4e2a\u9053\u7406\uff0c\u672c\u6765\u5c31\u4e0d\u662f\u8bbe\u8ba1\u7684\u6838\u5fc3\uff0c\u518d\u600e\u4e48\u63d0\u5347\u6280\u672f\u4e5f\u53ea\u662f\u88c5\u9970\u3002"),(0,n.kt)("p",null,"\u4fc4\u7f57\u65af\u65b9\u5757\u5c31\u662f\u4f8b\u5b50\uff0c\u771f\u6b63\u628a\u7b97\u6cd5\u751f\u6210\u8981\u7528\u4e8e\u73a9\u6cd5\u4e0a\uff0c\u5c31\u9700\u8981\u4e86\u89e3P/NP\u95ee\u9898\uff1a\u7528\u7b80\u5355\u7684\u4fe1\u606f\u662f\u53ef\u4ee5\u6784\u9020\u590d\u6742\u95ee\u9898\u3002\u5176\u5b9eMOBA\u6e38\u620f\u91cc\uff0c\u4e00\u4e2a\u65f6\u95f4\u6bb5\u7684\u8d70\u4f4d\u89c4\u5212\u4e5f\u662fNP\u95ee\u9898\uff1a\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\uff0c\u5982\u679c\u8981\u8bbf\u95ee\u548c\u4fa6\u5bdf\u5730\u56fe\u4e0a\u591a\u4e2a\u6218\u7565\u8981\u70b9\uff0c\u5982\u4f55\u624d\u80fd\u8d70\u6700\u5c11\u7684\u8def\uff0c\u6d88\u8017\u6700\u5c11\u7684\u65f6\u95f4\uff0c\u8fbe\u5230\u6218\u7565\u76ee\u6807\u3002\u6709\u65f6\u5019\u8fd9\u4e9b\u6218\u7565\u8981\u70b9\u8fd8\u662f\u5176\u4ed6\u73a9\u5bb6\u5f71\u54cd\u4e0b\u751f\u6210\u7684\u3002"),(0,n.kt)("h3",{id:"7421-casualcreator"},"7.4.21 casualcreator"),(0,n.kt)("h3",{id:"7422-\u5fae\u670d\u52a1\u5316"},"7.4.22 \u5fae\u670d\u52a1\u5316"),(0,n.kt)("p",null,'When it comes to cloud technology in gaming, most people associate it with game streaming. However, Scalar is based on cloud computing, which Romell as explained, is quite different from the term we\'ve heard about so often. "Cloud streaming is a distribution model; it improves people\u2019s access to games, but it doesn\u2019t change, in essence, what games are, or the quality of them. The game is still being run on a single-processing machine placed remotely and then streamed via the cloud to your screen," he said.'),(0,n.kt)("p",null,'"Cloud computing \u2013 what Ubisoft Scalar enables \u2013 means the processing power for a game isn\u2019t tied to a single machine, but a decentralized computation system. The processing is taking place in the cloud. This eliminates the limits of local hardware for players, improves the quality of games, and opens up new possibilities for game developers."'),(0,n.kt)("p",null,"\u66f4\u65b0\u4e0d\u4f1a\u505c\u670d"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5f15\u64ce\u7684\u591a\u4e2a\u7ec4\u4ef6\uff0c\u5982physics, AI\u7b49\u90fd\u8f6c\u6210\u5fae\u670d\u52a1\uff0c\u7136\u540e\u5355\u72ec\u5728\u4e91\u7aef\u8ba1\u7b97\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u4e0d\u53d7\u9650\u5236\uff0c\u4f20\u7edf\u7684\u5f15\u64ce\u628a\u6574\u4e2a\u5f15\u64ce\u5728\u4e00\u53f0\u673a\u5668\u65e0\u5f62\uff0c\u7531\u4e8e\u5171\u4eab\u6574\u4e2a\u573a\u666f\u5927\u91cf\u6570\u636e\uff0c\u56e0\u6b64\u4e0d\u597d\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"3\u670817\u65e5\u6d88\u606f\uff0c\u636e\u5916\u5a92\u62a5\u9053\uff0c\u5728\u5f53\u5730\u65f6\u95f4\u661f\u671f\u56db\u7684GDC\u6f14\u8bb2\u4e2d\uff0c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u7684\u603b\u7ecf\u7406Patrick Bach\u3001\u6280\u672f\u603b\u76d1Christian Holmqvist\u548c\u9996\u5e2d\u6280\u672f\u5b98/\u6280\u672f\u603b\u76d1Per-Olof Romell\u516c\u5e03\u4e86\u4e00\u9879\u5168\u65b0\u4e91\u8ba1\u7b97\u6280\u672f\uff0c\u8be5\u6280\u672f\u88ab\u79f0\u4e3aUbisoft Scalar\u3002\u4ed6\u4eec\u58f0\u79f0\u8be5\u6280\u672f\u5c06\u521b\u9020\u5168\u65b0\u7684\u6e38\u620f\u7c7b\u578b\u3002\u4ed6\u4eec\u8868\u793a\uff0c\u8fd9\u9879\u6280\u672f\u5c06\u4f7f\u80b2\u78a7\u80fd\u591f\u5236\u4f5c\u6bd4\u4ee5\u5f80\u66f4\u5927\uff0c\u66f4\u590d\u6742\u7684\u6e38\u620f\u4e16\u754c\uff0c\u8fd9\u4e9b\u6e38\u620f\u4e16\u754c\u53ef\u4ee5\u5b9e\u65f6\u66f4\u65b0\uff0c\u5e76\u7531\u5927\u91cf\u73a9\u5bb6\u586b\u5145\uff0c\u4ece\u800c\u521b\u9020\u65b0\u7684\u793e\u4ea4\u4f53\u9a8c\u3002\u5173\u4e8e\u4f7f\u7528\u8be5\u6280\u672f\u5f00\u53d1\u7684\u65b0\u4f5c\u3002Bach\u8868\u793a\uff1a\u201c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u6b63\u5728\u7814\u7a76\u4e0eScalar\u4e00\u8d77\u5f00\u53d1\u7684IP\uff0c\u76ee\u6807\u5f53\u7136\u662f\u5145\u5206\u5229\u7528\u8fd9\u9879\u65b0\u6280\u672f\u7684\u6240\u6709\u53ef\u80fd\u6027\uff0c\u4f46\u73b0\u5728\u8c08\u8bba\u8fd9\u4e2a\u8fd8\u4e3a\u65f6\u8fc7\u65e9\u201d\u3002"),(0,n.kt)("h3",{id:"7423-google-tilt-brush"},"7.4.23 Google Tilt Brush"),(0,n.kt)("p",null,"\u592a\u504f\u5e95\u5c42\uff0c\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u751f\u6210\u6700\u539f\u59cb\u7684Mesh\uff0c\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u63a7\u5236\u7cbe\u7ec6\u5ea6\u4e0d\u591f\uff0c\u6240\u4ee5\u7f51\u683c\u548c\u6750\u8d28\u90fd\u4e0d\u591f\u7cbe\u7ec6"),(0,n.kt)("li",{parentName:"ul"},"\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u90a3\u4e2a\u7269\u4f53\u90fd\u8981\u4ece\u65e0\u5230\u6709\u521b\u4f5c\uff0c\u6216\u8005\u57fa\u4e8e\u4e00\u4e9b\u57fa\u672c\u7684\u51e0\u4f55\u4f53\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u751f\u6210\u590d\u6742\u51e0\u4f55\uff0c\u66f4\u591a\u662f\u6982\u5ff5\u4e0a\u7684\u611f\u89c9"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u8fd9\u4e9b\u4f5c\u54c1\u5b9e\u9645\u4e0a\u5f88\u5c11\u6709\u88ab\u771f\u6b63\u4f7f\u7528\u6216\u8005\u88ab\u5f53\u4f5c\u827a\u672f\uff0c\u56e0\u4e3a\u521b\u4f5c\u5f88\u53d7\u9650")),(0,n.kt)("p",null,"\u5982\u679c\u8981\u63d0\u4f9b\u66f4\u7cbe\u7ec6\u7684\u63a7\u5236\uff0c\u5219\u9762\u4e34\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u592a\u590d\u6742\u4e0d\u597d\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52bf\u63a7\u5236\u7684\u7cbe\u5ea6\u8bef\u5dee\u6bd4\u8f83\u5927")),(0,n.kt)("p",null,"\u8fd9\u7c7b\u521b\u4f5c\u7684\u4f5c\u54c1\u901a\u5e38\u53ea\u662f\u534a\u6210\u54c1\uff0c\u53ef\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u573a\u666f\u548c\u6982\u5ff5\uff0c\u7136\u540e\u5728PC\u4e0a\u5728\u8fdb\u4e00\u6b65\u7cbe\u7ec6\u5fae\u8c03\uff0c\u4f46\u5982\u679c\u662f\u8fd9\u6837\uff0c\u5728PC\u4e0a\u6709\u66f4\u591a\u7684\u65b9\u5f0f\u751f\u6210\u8fd9\u6837\u7684\u6982\u5ff5"),(0,n.kt)("p",null,"\u5982\u679c\u76f4\u63a5\u4f7f\u7528\uff0c\u8fd9\u7c7b\u573a\u666f\u901a\u5e38\u6ca1\u6709\u592a\u5927\u7528\u5904\uff0c\u53ea\u6709\u9759\u6001\u7684\u4e1c\u897f\uff0c\u6ca1\u6cd5\u7f16\u8f91\u52a8\u753b\uff0c\u5f53\u7136\u5982\u679c\u8981\u5728XR\u8bbe\u5907\u52a0\u5165\u52a8\u753b\u7f16\u8f91\uff0c\u90a3\u53c8\u662f\u53e6\u5916\u4e00\u4e2a\u5f88\u590d\u6742\uff0c\u51e0\u4e4e\u4e0d\u592a\u53ef\u80fd\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u80fd\u76f4\u63a5\u521b\u4f5c\u539f\u59cb\u51e0\u4f55\uff0c\u56e0\u4e3a\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u6837\u51e0\u4f55\u662f\u9759\u6001\u7684\uff0c\u6ca1\u6709\u52a8\u753b"),(0,n.kt)("li",{parentName:"ul"},"\u592a\u7b80\u5355")),(0,n.kt)("p",null,"\u5b83\u53ea\u80fd\u662f\u57fa\u4e8e\u67d0\u4e9b\u6807\u51c6\u7ec4\u4ef6\u7684\u521b\u4f5c\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u901a\u5e38\u7531PC\u5236\u4f5c\uff0c\u5e26\u6709\u52a8\u753b\u548c\u4e00\u5b9a\u7684\u903b\u8f91\u5c5e\u6027\uff08\u56e0\u4e3aXR\u4e0a\u4e5f\u65e0\u6cd5\u7f16\u8f91\u903b\u8f91\uff09\uff0c\u5e76\u4e14\u5728XR\u8bbe\u5907\u4e0a\u4ea4\u4e92\u7684\u662fPCG\u7684\u65b9\u5f0f\uff0c\u8fd9\u6837\u4f7f\u5f97\u4ea4\u4e92\u9700\u8981\u7684\u5e76\u4e0d\u662f\u7cbe\u7ec6\u4f4d\u7f6e\uff0c\u800c\u4e14PCG\u7684\u53c2\u6570\uff0c\u8fd9\u6837\u53c2\u6570\u7684\u7a7a\u95f4\u548c\u8303\u56f4\u5c0f\u7684\u591a\uff0c\u540c\u65f6\u80fd\u591f\u751f\u6210\u66f4\u591a\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4e00\u4e2a\u57fa\u7840\u51e0\u4f55"),(0,n.kt)("h3",{id:"7424-github"},"7.4.24 GitHub"),(0,n.kt)("p",null,"\u591a\u4eba\u534f\u4f5c\u7684\u5178\u8303\uff0c\u5728\u534f\u4f5c\u4e2d\u4f53\u73b0\u8d21\u732e\u5ea6",(0,n.kt)("sup",{parentName:"p",id:"fnref-hello"},(0,n.kt)("a",{parentName:"sup",href:"#fn-hello",className:"footnote-ref"},"hello"))),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u53d1\u73b0\u67d0\u4e2aCreation \u5b58\u5728\u4e0d\u5408\u7406\uff0c\u63d0\u51fa\u4fee\u6539"),(0,n.kt)("h3",{id:"7425-stechfab"},"7.4.25 Stechfab"),(0,n.kt)("h3",{id:"7426-game-pigeon-games-for-imessage"},"7.4.26 Game pigeon: games for iMessage"),(0,n.kt)("img",{src:"resources/games-pen.png",alt:"games-pen"}),(0,n.kt)("h2",{id:"75-\u5e94\u7528"},"7.5 \u5e94\u7528"),(0,n.kt)("h3",{id:"751--\u5821\u5792\u4e4b\u591c"},"7.5.1 \u5821\u5792\u4e4b\u591c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite",src:l(6).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"Game theme, starter island "),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4f1a\u968f\u7740theme\u53d8\u5316"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5821\u5792\u4e4b\u591c\u53ea\u4ece\u6a21\u677f\u521b\u5efa\uff0cRW\u5177\u6709\u80fd\u591f\u8ba9\u7528\u6237\u521b\u9020\u6a21\u677f\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u5ea6\u548c\u53ef\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a"),(0,n.kt)("p",null,"Accolade \u81ea\u52a8\u63a7\u5236XP\u7684\u83b7\u53d6\uff0c\u81ea\u52a8\u8ba1\u7b97\u5e73\u8861\uff0c\u6839\u636e\u65f6\u95f4"),(0,n.kt)("p",null,"\u8d44\u6e90\u662f\u5f15\u7528\u5185\u90e8\uff0c\u9700\u8981\u6e38\u620f\u5305\u5185\u767b\u5f55\u65f6\u4e0b\u8f7d\uff0c\u662f\u5426\u65e0\u6cd5\u7528\u6237\u81ea\u5df1\u52a8\u6001\u6dfb\u52a0"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u662f\u5b9e\u73b0\u4e86\u56fa\u5b9a\u4e00\u5957\u8d44\u6e90\u548c\u903b\u8f91\u7684\u6570\u636e\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u6bd4\u6e38\u620f\u89c4\u5219\u66f4\u590d\u6742\uff0c\u4e0d\u7ba1\u662f\u903b\u8f91\u8fd8\u662f\u573a\u666f\uff0c\u4ea4\u4e92\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u652f\u6301\u7f16\u7a0b\u6269\u5c55\u80fd\u529b"),(0,n.kt)("p",null,"\u4f8b\u5982\u5821\u5792\u4e4b\u591c\u91cc\u5927\u90e8\u5206\u8d44\u6e90\u5916\u89c2\u662f\u4e0d\u80fd\u4fee\u6539\u7684\uff0c\u4f46\u662f\u751f\u6d3b\u4e2d\u7684\u8bbe\u8ba1\u5f80\u5f80\u90fd\u8bbe\u7acb\u7167\u7247\u7f16\u8f91\uff0c\u81ea\u5b9a\u4e49\u4e00\u4e9b\u5185\u5bb9\uff0c\u56e0\u4e3a\u4ed6\u662f\u56fa\u5b9a\u7684\u7c7b\uff0c\u65e0\u6cd5\u7ec4\u5408\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u51cf\u5c11\u6216\u589e\u52a0\u529f\u80fd\u6765\u4fee\u6539\u5df2\u6709\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u7ec4\u5408\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u65b0\u7684\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u6ca1\u6709\u529e\u6cd5\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u6240\u6709\u90fd\u4f9d\u8d56\u4e8e\u5b98\u65b9\u6784\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u589e\u52a0\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u90fd\u8981\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u5c3d\u7ba1\u4ed6\u4eec\u6709\u590d\u7528\uff0c\u4ee3\u7801\u4f1a\u91cd\u590d\uff0c\u7528\u6237\u9700\u8981\u7406\u89e3\u548c\u8bb0\u4f4f\u7684\u7c7b\u578b\u975e\u5e38\u591a")),(0,n.kt)("p",null,"\u6240\u6709\u4e1c\u897f\u6216\u8005\u5927\u90e8\u5206\u4e1c\u897f\u90fd\u88ab\u89c6\u89c9\u5316\uff0c\u7136\u540e\u6570\u636e\u9a71\u52a8\uff0c\u4fee\u6539\u8bbe\u5b9a\u597d\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u7b80\u5316\u4e86\u6811\u5f62\u5c42\u7ea7\u7ed3\u6784\uff0c\u6240\u6709\u5185\u5bb9\u90fd\u662f\u6241\u5e73"),(0,n.kt)("h4",{id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"},"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u6709122\u79cddevices"),(0,n.kt)("h4",{id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1"},"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1"),(0,n.kt)("p",null,"\u97f3\u9891\u7684\u91cd\u8981\u6027"),(0,n.kt)("h4",{id:"7513-\u79c1\u5bc6\u793e\u4ea4"},"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"I, I, couldn't be more pleased with the situation in Fortnite. Fortnite is the most positive social experience I've ever interacted with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And, you know, we really are innately trained to, uh, you know, in ordinary circumstances, respect people when we're interacting with them personally far, far more than when we're interacting with them with text. And so I think this is an area where the matter verse will have a major advantage overall. So O other social media, it's that inherently by being focused on small groups and actual friends, engaging in a much larger outside world and in carrying all of the emotional content of voice and perhaps even facial capture in the future, uh, it'll be a much higher empathy platform, only much less subject to abuse where, you know, one nasty action affects millions of people, uh, because of curation.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"So, so I think we have a lot of positive things to be excited about there. Um, but the key point, the key challenge for this new medium is that to succeed anything that causes itself, the metaverse must actually be better than all other experiences competing for people's digital time. And that's a massive challenge. This means the metaverse needs to be better than an hour on the metaverse needs to be better than an hour on Facebook or Instagram or an hour on YouTube, uh, or an hour on Netflix.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, it'll be actual interactive objects, actual experiences, and actual engaging things and not just ads forced upon you. And, you know, I think we can completely escape an advertising based business model if we take this approach that the only way you ever get to see a commercial thing is if you decide to see it yourself, because it's really cool. And I think we'll see a whole new level of competition among brands to surface really awesome 3d content. Um, and you know, I think you can look to Fortnite and some of these other games is pioneering. A lot of these really exciting engaging non-advertising based, uh, mechanisms for exposing stuff.")),(0,n.kt)("h4",{id:"7514-verse-language"},"7.5.1.4 Verse Language"),(0,n.kt)("p",null,"Now, the next question is about programming model, because if we want to have this huge shared experience with many different types of games, other entertainment experiences, or, you know, any sort of experience at all, what you're talking about is a huge amount of user generated content in the form of 3d assets and also a huge amount of user written code, um, uh, per perhaps an unprecedented amount of user written code. And, you know, there's already some evidence of models like this working."),(0,n.kt)("p",null,"Um, I think the web with Java script is sort of a microcosm of this. Now the web is a much simpler programming model than the metaverse will have to be because on a website, all of the code that's running in Java script on that site is nominally under the control of the website operator. You can decide exactly what code runs and you don't ever have to deal with random user code being injected that might interact with you."),(0,n.kt)("p",null,"Um, uh, so the web BES, a closed world programming model, whereas the metaverse will need to be an open world programming model because the goal, it can't just be another app store, right?"),(0,n.kt)("p",null,"You can't have a thousand different experiences and you can be in one at a time. And when you're in that one experience, it dictates everything, right? The, the metaverse has gotta be about interoperability of user creative objects of all different types, right? Because, uh, besides having some core game experiences in the sort of place you're also going to have, you know, the equivalent of Facebook pages, uh, for every object that, that exists in the physical world, you know, uh, like Ford creates a new car, they're going to want to unveil the car, um, as a user drivable object, right?"),(0,n.kt)("p",null,"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"The Facebook page, you can have text and video, but in the virtual world, you can actually get in the car, you can go around it, you can look at it from all different angles. You can open the doors, you can drive it, you can see how it handles. Um, and you know, you can have a, a huge set of interactions that are much more interesting and organic as it's not just a, an advertisement, uh, for a product, but also something that you can experience and have fun with. And I think we need to look at, uh, all of the crossovers that have occurred, um, in recent years between games and, um, and other brands as kind of an indicator of where the metaverse will go.")),(0,n.kt)("h3",{id:"752-roblox"},"7.5.2 ROBLOX"),(0,n.kt)("p",null,"Roblox\u793e\u533a\u592a\u5c01\u95ed\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5177\u5907\u5f00\u653e\u80fd\u529b\uff0c\u6ca1\u6709\u5e73\u53f0\u5f00\u653e\u7684\u6a21\u5f0f\uff0c\u522b\u7684\u5e94\u7528\u65e0\u6cd5\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u4e4b\u95f4\u5f88\u96be\u5171\u4eab\uff0c\u6ca1\u6709\u7ec4\u4ef6\u751f\u6001\uff0c\u6574\u4e2a\u5f00\u53d1\u6a21\u5f0f\u8fd8\u662f\u4f20\u7edf\u5c01\u95ed\u7684app\u6a21\u5f0f\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u5355\u72ec\u9488\u5bf9\u81ea\u5df1\u7684app\u72ec\u7acb\u5f00\u53d1\uff0c\u5171\u4eab\u590d\u7528\u80fd\u529b\u4e0d\u591f\uff0c\u53ea\u662f\u6784\u5efa\u4e86\u4e00\u5957\u81ea\u5206\u53d1\u673a\u5236")),(0,n.kt)("p",null,"\u76f8\u540c\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8d44\u6e90\u90fd\u662f\u4e91\u7aef\u7684\uff0c\u8fd9\u4f7f\u5f97\u591a\u4eba\u534f\u4f5c\u66f4\u7b80\u5355\uff0c\u4e0d\u7ba1\u662f\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u5bf9\u4e8e\u7528\u6237\uff0c\u90fd\u6ca1\u6709\u672c\u5730\u8d44\u6e90\u6570\u636e\uff0c\u5168\u662f\u4e91\u7aef\u7684\uff0c\u8d44\u6e90\u4e0a\u4f20\u540eRoblox \u6709\u4e2a\u5185\u5bb9\u5ba1\u6838\u6d41\u7a0b\uff0c\u5927\u6982\u51e0\u5206\u949f"),(0,n.kt)("li",{parentName:"ul"},"Roblox packages, \u53ef\u590d\u7528\u7684\u6e38\u620f\u8d44\u6e90\uff0c\u6e38\u620f\u53ef\u4ee5\u5b9e\u65f6\u540c\u6b65\u5230\u6700\u65b0\u7248\u672c\uff0cRoblox \u7684\u8d44\u6e90\u5206\u4eab\u53ea\u5728\u6307\u5b9a\u597d\u53cb\u548c\u7ec4\u4e4b\u95f4\uff0c\u5207\u7248\u672c\u53f7\u76f8\u5bf9\u7b80\u5355\uff0c\u6bcf\u6b21\u63d0\u4ea4\u81ea\u52a8\u751f\u6210\u4e00\u4e2aV1, V2, V3\u2026\u4e4b\u7c7b\u7684\u7248\u672c\uff0c\u4ec5\u80fd\u6839\u636e\u65f6\u95f4\u5224\u522b\uff0c\u529f\u80fd\u5f88\u6709\u9650\uff0c\u4e0d\u5177\u5907\u5927\u89c4\u6a21\u534f\u540c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff1a\u7528\u6237\u6709group\u7684\u6982\u5ff5\uff1aMy packages\u548cGroup packages \uff0c\u6709Collaborators\u7684\u6982\u5ff5\uff0c\u4ed6\u4eec\u53ef\u4ee5\u7f16\u8f91\u6e38\u620f\uff0c\u5176\u4ed6\u7528\u6237\u7f16\u8f91\u65f6\uff0c\u9009\u4e2d\u4e00\u4e2a\u7269\u4f53\u4f1a\u5e26\u4e0d\u540c\u7684\u989c\u8272\uff0c\u5bf9\u4e8e\u811a\u672c\uff0c\u5f53\u5176\u4ed6\u4eba\u5728\u7f16\u8f91\u65f6\uff0c\u4f1a\u6709\u989c\u8272\u63d0\u793a\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u4ee5\u7f16\u8f91\uff0c\u7f16\u8f91\u5b8c\u4ee5\u540e\u4f1a\u6709\u8349\u7a3f\u5b58\u50a8\uff0c\u63d0\u4ea4\u4e4b\u540e\u53ef\u4ee5\u8fdb\u884c\u5408\u5e76\uff0c\u53ef\u4ee5\u4e0e\u670d\u52a1\u5668\u7248\u672c\u8fdb\u884c\u6bd4\u8f83\uff0c\u89e3\u51b3\u51b2\u7a81\u4e4b\u540e\u518d\u63d0\u4ea4\uff0c\u4e5f\u53ef\u4ee5\u56de\u6eda\uff0c\u7c7b\u4f3c\u7248\u672c\u7684\u6982\u5ff5\u4e86"),(0,n.kt)("li",{parentName:"ul"},"Data Store\u7528\u4e8e\u5b58\u50a8\u9700\u8981\u6301\u4e45\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u53ea\u80fd\u5728Script\u800c\u975eLocal Script\u4e2d\u8c03\u7528\uff0c\u6309\u5b57\u5178\u7684\u65b9\u5f0f\u5b58\u50a8\uff0c\u6709\u7248\u672c\u53f7\uff0c\u53ef\u4ee5\u7528\u4e8e\u4e00\u4e9b\u95ee\u9898\u5b9a\u4f4d\u548c\u652f\u6301\uff0c\u65e7\u7248\u672c\u7684\u5185\u5bb9\u4f1a\u572830\u5929\u540e\u88ab\u5220\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u5f15\u64ceplug-in\uff0c\u7528\u4e8e\u589e\u5f3a\u5f15\u64ce\uff0cmarketplace \uff0c\u8ddf\u5176\u4ed6\u5f15\u64ce\u5dee\u4e0d\u591a"),(0,n.kt)("li",{parentName:"ul"},"Client-service \u6a21\u5f0f\uff0c\u6240\u6709\u4e4b\u95f4\u4f20\u9012\u7684\u53c2\u6570\u90fd\u662f\u53ef\u4ee5Replicated\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c\u5426\u5219\u4f20\u9012\u7ed3\u679c\u4e3a\u7a7a\uff0c\u4f8b\u5982Part\u5c31\u662f\u4e0d\u53ef\u4ee5\u5728Server\u548cClient \u4e4b\u95f4\u8fdb\u884c\u4f20\u9012\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u975e\u76f4\u63a5\u64cd\u4f5c\u7684\u7269\u4f53\u90fd\u662f\u7269\u7406\u6a21\u62df\u7684\uff0c\u7269\u7406\u6a21\u62df\u53ef\u4ee5\u662fclient\u6216\u8005server \u8ba1\u7b97\uff0c\u4e00\u822c\u9760\u8fd1\u7528\u6237\u7684\u5730\u65b9\u4f1a\u9996\u5148\u5728\u8be5\u7528\u6237\u7684client device\u8ba1\u7b97\uff0c\u5426\u5219\u5728server\u7aef\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u5728\u7b80\u53163D\u5185\u5bb9\u7684\u5c42\u9762\u505a\u7684\u5f88\u597d\uff0c\u8fd9\u6837\u907f\u514d\u7528\u6237\u5411\u7740\u6700\u9ad8\u8d28\u91cf\u7684\u5185\u5bb9\u521b\u4f5c\uff0c\u6bd4\u5982\u7528\u65b9\u5757\u5c31\u80fd\u63cf\u8ff0\u6811\uff0c\u4f7f\u5f97\u6e32\u67d3\u5728\u79fb\u52a8\u7aef\u538b\u529b\u4e5f\u5c11\u4e86\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9690\u79c1\u4fdd\u62a4\uff0c\u5185\u5bb9\u7248\u6743")),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u7f16\u7a0b\u6a21\u5f0f\uff0c\u57fa\u672c\u4e0a\u8fd8\u662fUnity\u4f20\u7edf\u7684\u6a21\u5f0f\uff0c\u4e3b\u8981\u4e0d\u540c\u5728\u4e8e\u5929\u751f\u8054\u7f51"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u811a\u672c\u7684\u6302\u8f7d\u8ddf\u573a\u666f\u5c42\u7ea7\u6216\u8005\u5177\u4f53\u7269\u4f53\u6709\u5173\uff0c\u8fd8\u662f\u50cfUnity\u539f\u6765\u7684\u65b9\u5f0f\u4e00\u6837\u9488\u5bf9game object \u7f16\u5199\u811a\u672c\uff0c\u811a\u672c\u4e2d\u901a\u8fc7script.parent\u5f15\u7528\u6240\u5c5e\u5bf9\u8c61\uff0c\u8fd9\u5929\u751f\u5c31\u4f7f\u5f97\u811a\u672c\u4e0e\u7279\u5b9a\u573a\u666f\u7ed3\u6784\u6216\u7269\u4f53\u8026\u5408\uff0c\u4e0d\u5229\u4e8e\u590d\u7528\uff0c\u53ef\u590d\u7528\u7684\u811a\u672c\u5e94\u8be5\u4ec5\u5173\u6ce8\u6570\u636e\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u76843D\u7269\u4f53\uff0c\u8fd9\u79cd\u6570\u636e\u662f\u903b\u8f91\u6570\u636e\uff0c\u4ed6\u5c31\u4f7f\u5f97\u903b\u8f91\u548c\u8868\u73b0\u5206\u79bb\u51fa\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u6bd4\u5982\u5bf9\u4e8e\u4e00\u4e2aUI\u6309\u94ae\u7684\u70b9\u51fb\u4e8b\u4ef6\uff0c\u8fd8\u9700\u8981\u5199script.Parent.MouseButton1Click:Connect(function() end())"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u5c31\u7b49\u88c5\u7684\u4e3b\u8981\u662f\u7ed3\u6784\uff0c\u6709\u70b9\u7c7b\u4f3cUE blueprint \uff0c\u6216\u8005\u8bf4\u5b9a\u4e49\u4e86\u4e00\u4e9b\u89c4\u8303\uff0c\u4e00\u4e9b\u7ed3\u6784\uff0c\u8fd9\u4e9b\u89c4\u8303\u5927\u591a\u6570\u9488\u5bf9client-server\u67b6\u6784\u7684\u4e00\u4e9b\u8c03\u6574\uff0c\u6ca1\u6709\u50cfHoudini \u4e00\u6837\u6709\u4e9b\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"PNC/Weapons Kit\uff0c\u6709\u4e00\u5957\u56fa\u5b9a\u6a21\u7248\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8eUE\u4e2d\u5185\u7f6e\u7684\u5f88\u591a\u7cfb\u7edf\uff0c\u5e73\u53f0\u63d0\u4f9b\u4e86\u8fd9\u4e9b\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7cfb\u7edf\u7684\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5f80\u5f80\u4fee\u6539\u7684\u662f\uff1a\u589e\u52a0\u6216\u79fb\u9664\u67d0\u4e9b\u7ec4\u4ef6\uff1b\u4fee\u6539\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\uff1b\u6216\u8005\u57fa\u4e8e\u67b6\u5b50\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u4fee\u6539\u3002\u5176\u4e2d\u5982\u679c\u662f\u4fee\u6539\u7684\u662f\u4e00\u90e8\u5206\u51fd\u6570\u529f\u80fd\uff0cUE\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u5b9a\u4f4d\u65b9\u5f0f\uff0cRoblox\u5219\u66f4\u5bb9\u6613\u7834\u574f\u6574\u4e2a\u4f53\u7ed3\u6784\uff0c\u4f46Roblox\u63d0\u4f9b\u4e86\u57fa\u4e8e\u6a21\u7248\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u6027\u66f4\u5927\uff0c\u4f46\u662f\u96be\u5ea6\u4e5f\u66f4\u5927\uff0c\u4f8b\u5982\u9700\u8981\u5f15\u7528\u3001\u8bfb\u53d6\u548c\u7ba1\u7406\u53d8\u91cf\uff0c\u5bfb\u627e\u5165\u53e3\u51fd\u6570\uff0c\u5904\u7406\u8f93\u5165\u8f93\u51fa\u7b49"),(0,n.kt)("li",{parentName:"ul"},"Configuration\uff0c\u5bf9\u4e8eNPC kit\u8fd9\u6837\u6bd4\u8f83\u590d\u6742\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u6709\u8bb8\u591a\u516c\u5171\u5c5e\u6027\u88ab\u5f88\u591a\u811a\u672c\u8bbf\u95ee\uff0cRoblox \u5efa\u8bae\u5c06\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u5b58\u50a8\u5728\u4e00\u4e2avalue object\u4e2d\uff0c\u7528\u4e00\u4e2aConfiguration container\u5c01\u88c5\uff0c\u8fd9\u662f\u5178\u578b\u4f20\u7edf\u7684OOP\u601d\u60f3\uff0c\u5176\u4e2d\u5e26\u6765\u7684\u95ee\u9898\u6709\u5f88\u591a\uff0c\u6bd4\u5982\u591a\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\uff0c\u6bd4\u5982\u5982\u679c\u67d0\u4e9b\u53d8\u91cf\u88ab\u5220\u9664\u5176\u4e2d\u4e00\u4e9b\u811a\u672c\u53ef\u80fd\u4e0d\u5de5\u4f5c\uff0c\u4e5f\u53ef\u80fd\u79fb\u9664\u4e86\u4e00\u4e9b\u811a\u672c\u800c\u67d0\u4e9b\u53d8\u91cf\u538b\u6839\u5c31\u4e0d\u88ab\u4f7f\u7528\uff0c\u6838\u5fc3\u95ee\u9898\u5c31\u662f\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u8131\u79bb\u4e86\u5173\u7cfb\uff0c\u4f7f\u5f97\u9700\u8981\u989d\u5916\u5c0f\u5fc3\u8fd9\u79cd\u5173\u7cfb\u7684\u7ef4\u62a4"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u4e2d\u7684\u590d\u7528\u95ee\u9898\u4e00\u65b9\u9762\u901a\u8fc7ModuleScript\uff0c\u77e5\u8bc6\u4ee3\u7801\u7ea7\u7684\u590d\u7528"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u7684\u591a\u4eba\u5728\u7ebf\u7528\u6237\u6570\u8fd8\u662f\u6709\u9650\u768415\u4e2a\u4eba\uff0c\u6240\u4ee5\u8fd8\u662f\u91c7\u7528\u6bd4\u8f83\u4f20\u7edf\u7684\u591a\u4eba\u540c\u6b65\u67b6\u6784\uff0c\u6ca1\u6709\u5145\u5206\u53d1\u6325\u73b0\u4ee3\u4e91\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5fae\u670d\u52a1\u67b6\u6784\uff0c\u5141\u8bb8\u4e0d\u9650\u5236\u7684\u4eba\u6570")),(0,n.kt)("p",null,"Roblox \u7684\u6838\u5fc3\u4f18\u52bf\u5728\u4e8e\u4e91\u539f\u751f\uff0c\u4ed6\u53ef\u80fd\u4f1a\u81ea\u52a8\u5904\u7406\u5f88\u591a\u540c\u6b65\u95ee\u9898\uff0c\u4f8b\u5982\u5728Script\u4e2d\u8c03\u7528Instance.new\u5c31\u4f1a\u5728workspace\u4e2d\u521b\u5efa\u4e00\u4e2aPart\u5e76\u81ea\u52a8\u540c\u6b65\u5230\u5728\u7ebf\u573a\u666f\uff0c\u5927\u90e8\u5206\u7684\u811a\u672c\u90fd\u662f\u901a\u8fc7Script\u7f16\u5199\u7684\uff0c\u91cc\u9762\u7279\u522b\u662f\u5bf9Workspace\u4e2dpart\u7684\u4fee\u6539\u4f1a\u81ea\u52a8\u540c\u6b65\u5230\u7aef\u4fa7"),(0,n.kt)("p",null,"\u8ddfRoblox\u7684\u6700\u5927\u533a\u522b\u5728\u4e8e\uff0c\u6211\u4eec\u9700\u8981\u9762\u5411C\u7aef\u7684\u7528\u6237\uff0c\u7528\u6237\u53ef\u80fd\u662f\u4e0d\u4f9d\u8d56\u4e8ePC\u7684\uff0c\u800cRoblox\u7684\u6574\u4e2a\u751f\u6001\u8fd8\u662f\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u6a21\u5f0f\uff0c\u5176\u521b\u65b0\u5728\u4e8e\u4e91\u539f\u751f\u548c\u5206\u53d1\u6a21\u5f0f\uff0c\u4e3a\u4e86\u5b9e\u73b0\u5728C\u7aef\u521b\u4f5c\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u5373\u662f\u521b\u4f5c\u6001\uff0c\u5b83\u6bd4\u8f83\u5c11\u6709\u7f16\u8f91\u6001\u7684\u6982\u5ff5\uff0c\u50cfMinecraft \u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5728\u903b\u8f91\u5c42\u9762\u505a\u66f4\u591a\u7684\u67b6\u6784\u6765\u652f\u6491C\u7aef\u521b\u4f5c\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\uff1aRoblox + Houdini \uff0c\u800c\u7531\u6b64\u884d\u751f\u51fa\u6765\u7684\u6280\u672f\u548c\u67b6\u6784\u8981\u6bd4Roblox \u590d\u6742\u5f97\u591a\uff0c\u4f46\u5176\u7ed3\u679c\u662f\u4f1a\u6bd4Roblox \u5728\u521b\u4f5c\u5c42\u9762\u66f4\u5927\u91cf\u7684\u666e\u53ca")),(0,n.kt)("h3",{id:"753-niantic"},"7.5.3 NIANTIC"),(0,n.kt)("h3",{id:"754-snapchat"},"7.5.4 SNAPCHAT"),(0,n.kt)("h3",{id:"755-meta"},"7.5.5 Meta"),(0,n.kt)("h3",{id:"756-omniverse"},"7.5.6 Omniverse"),(0,n.kt)("h3",{id:"757-minecraft"},"7.5.7 Minecraft"),(0,n.kt)("p",null,"\u5f3a\u9879\u5728\u4e8e\u57fa\u4e8e\u50cf\u7d20\u5757\uff0c\u53ef\u4ee5\u81ea\u7531\u7ec4\u5408\uff0c\u81ea\u7531\u5ea6\u5927\uff0c\u53ef\u4ee5\u6784\u5efa\u4efb\u610f\u7ed3\u6784\u7684\u573a\u666f\u6216\u7269\u4f53\uff0c\u4e0d\u4f9d\u8d56\u4e8eDCC\u8f93\u51fa\uff0c\u56e0\u6b64\u771f\u6b63\u7684\u4f4e\u95e8\u69db"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4f7f\u7528\u5f3a\u5927\u7684DCC\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u50cf\u7d20\u5757\u677e\u6563\u7ec4\u5408\uff0c\u901a\u5e38\u65e0\u6cd5\u5bf9\u7269\u4f53\u7ea7\u8bbe\u7f6e\u73a9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e00\u5757\u5355\u72ec\u6784\u5efa\uff0c\u624b\u5de5\u91cf\u6781\u5927\uff0c\u5f53\u7136\u6709\u4e9b\u5c1d\u8bd5\u7528\u4e00\u4e9bDCC\u8f93\u51fa\u7684\u573a\u666f\u4f53\u7d20\u5316\u540e\u4f5c\u4e3a\u8f93\u5165")),(0,n.kt)("p",null,"Minecraft pc \u7f16\u8f91\u5668"),(0,n.kt)("p",null,"Minecraft MOD"),(0,n.kt)("p",null,"Minecraft \u7684\u6240\u6709\u5185\u5bb9\u90fd\u5728\u672c\u5730\uff0c\u8fdb\u5ea6\u9700\u8981\u81ea\u5df1\u5907\u4efd\uff0c\u5206\u4eab\u7684\u5185\u5bb9\u9700\u8981\u81ea\u5df1\u5b89\u88c5\u5728\u672c\u5730\u7279\u5b9a\u7684\u6587\u4ef6\u5939\uff0c\u7f51\u6613\u7684\u7248\u672c\u4f1a\u505a\u4e00\u4e9b\u8054\u7f51\u8d2d\u4e70"),(0,n.kt)("p",null,"\u4f7f\u7528\u56fa\u5b9a\u7684\u6587\u4ef6\u5939\u7ed3\u6784\uff0c\u5f88\u591a\u5185\u5bb9\u6df7\u5230\u4e00\u8d77\uff0c\u7ba1\u7406\u590d\u6742\u5ea6\u9ad8\uff0c\u5bb9\u6613\u9020\u6210\u5197\u4f59\u8d44\u6e90\uff0c\u4e0d\u65b9\u4fbf\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff0c\u4f8b\u5982\u6bcf\u4e2a\u72ec\u7acb\u7684json\u90fd\u5f15\u5165ID\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5220\u9664\u5bf9\u5e94\u7684\u8d44\u6e90\u8fd8\u9700\u8981\u89e3\u6790json\u6587\u4ef6\uff0c\u663e\u7136\u4e0d\u53ef\u80fd\uff0c\u8fd9\u4f7f\u5f97\u5907\u4efd\u4e5f\u4f1a\u62f7\u8d1d\u5197\u4f59\u6587\u4ef6\uff0c\u5982\u679c\u8d2d\u4e70\u4e86\u4e00\u4e2aPack\uff0c\u5219\u5728\u65b0\u7684\u521b\u4f5c\u8005\u5fc5\u987b\u5168\u90e8\u5bfc\u5165\u8be5Pack\uff0c\u8fd9\u662f\u4f20\u7edfUE\u548cUnity\u90a3\u79cd\u4f20\u7edf\u7684\u672c\u5730\u6587\u4ef6\u8d44\u6e90\u7ba1\u7406\u65b9\u5f0f\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u6309\u6587\u4ef6\u5939\u8fdb\u884c\u8d44\u6e90\u7ba1\u7406\uff0c\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u533a\u5206\u6587\u4ef6\u5939\u5185\u8d44\u6e90\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bb9\u6613\u5197\u4f59"),(0,n.kt)("li",{parentName:"ol"},"USD\u662f\u6309\u7167\u8d44\u6e90\u8fdb\u884c\u7ba1\u7406")),(0,n.kt)("p",null,"\u800cRealityWorld\u4f7f\u7528\u66f4\u52a0\u5148\u8fdb\u7684USD\u7ed3\u6784"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Molang: \u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u8ba9\u5f00\u53d1\u8005\u5199\u811a\u672c\uff1f")),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u539f\u56e0\u53ef\u80fd\u662f\u4e0d\u65b9\u4fbf\u7ba1\u7406\uff0c\u56e0\u4e3aMinecraft\u5b8c\u5168\u9650\u5b9a\u4e8e\u6570\u636e\u9a71\u52a8\uff0c\u5f00\u53d1\u8005\u80fd\u4fee\u6539\u7684\u662f\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u7ec4\u5408\u5f62\u6210\u65b0\u7684Entity")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u8005\u901a\u8fc7json\u7684\u5b9a\u4e49\u5b9e\u73b0\uff0c\u800c\u524d\u8005\u662f\u76f4\u63a5\u5728json\u4e2d\u7684\u5bf9\u8c61\u8fdb\u884c\u8d4b\u503c\u64cd\u4f5c\uff0c\u90a3\u4e48\u5982\u679c\u8981\u4f7f\u7528\u5355\u72ec\u7684\u811a\u672c\u6587\u4ef6\uff0c\u5219\u4f1a\u6d89\u53ca\u7684\u6570\u91cf\u975e\u5e38\u5927\uff0c\u8fd9\u4e9b\u811a\u672c\u6587\u4ef6\u600e\u4e48\u5173\u8054\uff0c\u5982\u679c\u9700\u8981\u624b\u52a8\u5173\u8054\u5c31\u5f15\u5165\u4e86\u590d\u6742\u6027\uff0c\u4f8b\u5982\u5728Roblox\u4e2d\u9700\u8981\u5c06\u811a\u672c\u624b\u52a8\u5173\u8054\u5230\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u800c\u5b9e\u4f53\u4e4b\u95f4\u5f80\u5f80\u8fd8\u6d89\u53ca\u5c42\u6b21\u8def\u5f84\u7ed3\u6784\uff0c\u5c31\u4f1a\u8fdb\u4e00\u6b65\u590d\u6742\u5316\uff0cMinecraft\u5219\u76f4\u63a5\u5c06\u811a\u672c\u5199\u5728\u5c5e\u6027\u8d4b\u503c\u7684\u5730\u65b9\uff0c\u7b80\u5316\u4e86\u5f88\u591a\u4e1c\u897f"),(0,n.kt)("p",null,"\u4f46\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u5f00\u53d1\u8005\u65e0\u6cd5\u81ea\u5b9a\u4e49\u884c\u4e3a\u65b9\u6cd5\uff0c\u4ed6\u53ea\u80fd\u662f\u5bf9\u56fa\u5b9a\u7684\u7ed3\u6784\u7684\u503c\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u65e0\u6cd5\u5b9a\u4e49\u65b0\u7684\u903b\u8f91"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8bbf\u95ee\u7cfb\u7edf\u5185\u5b58\u4e2d\u7684\u6e38\u620f\u72b6\u6001\u4e0e\u6570\u503c\uff0cMolang\u63d0\u4f9b\u4e86\u5927\u91cf\u7684Query function\u8fdb\u884c\u67e5\u8be2"),(0,n.kt)("p",null,"\u56e0\u6b64Molang\u662f\u4e00\u79cd\u57fa\u4e8e\u8868\u8fbe\u5f0f\u7684\u8bed\u8a00\uff1aexpression-based language "),(0,n.kt)("h3",{id:"758-wilder-world"},"7.5.8 Wilder World"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Wilder World")),(0,n.kt)("p",null,"Liquidity"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"One of the biggest problems in the NFT space is that the best content is reserved for the uber-wealthy. We are flipping this paradigm on its head by enabling fully fractionalized NFT ownership, which will not only drive more capital into the space but will make it available to a much wider audience.")),(0,n.kt)("p",null,"No Artist Fees"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Other platforms charge artists between 15% and 30%. We consider this is an antiquated way of thinking, older world not Wilder World. Instead, we have designed our native token to create value for all participants while redistributing wealth directly back into our Wilder community. There\u2019s no middleman or platform taking a cut of the artist\u2019s hard earned reward.")),(0,n.kt)("p",null,"\u4f20\u7edf\u6ca1\u6709\u73b0\u5b9e\u4ef7\u503c\u652f\u6491\u7684NFT\uff0c\u5927\u90e8\u5206\u7684\u4ef7\u503c\u6765\u6e90\u4e8e\uff0c\u6709\u70b9\u50cf\u4f20\u9500\u4e00\u6837\uff0c\u8f6c\u5356\uff0c\u65e9\u671f\u7684\u73a9\u5bb6\u8f6c\u5356\u7ed9\u540e\u7eed\u7684\u73a9\u5bb6\uff0c\u8d5a\u53d6\u5dee\u4ef7\uff0c\u800c\u540e\u7eed\u7684\u73a9\u5bb6\u8981\u60f3\u8d5a\u94b1\uff0c\u5fc5\u987b\u4e0d\u65ad\u6709\u4eba\u63a5\u9f99\uff0c\u7136\u540e\u4e00\u65e6\u5230\u4e86\u67d0\u4e9b\u4e0d\u53ef\u601d\u8bae\u7684\u4ef7\u503c\u5c31\u4e0d\u4f1a\u6709\u4eba\u63a5\u9f99"),(0,n.kt)("h2",{id:"76-\u533a\u5757\u94fe"},"7.6 \u533a\u5757\u94fe"),(0,n.kt)("h3",{id:"761-\u95ee\u9898"},"7.6.1 \u95ee\u9898"),(0,n.kt)("h4",{id:"7611-\u6210\u672c\u95ee\u9898"},"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u865a\u62df\u8d27\u5e01\u6709\u4e00\u90e8\u5206\u662f\u7531\u77ff\u673a\u4ea7\u751f\u7684\uff0c\u6536\u76ca\u5f52\u77ff\u4e3b\uff0c\u8fd9\u6837\u4ed6\u4eec\u624d\u6709\u5de8\u5927\u52a8\u529b\u548c\u7ecf\u6d4e\u5229\u76ca\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u4e5f\u624d\u80fd\u4fdd\u8bc1\u6574\u4e2a\u5206\u5e03\u5f0f\u8282\u70b9\u53ef\u4ee5\u5b89\u5168\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5149\u662f\u80fd\u6e90\u6d6a\u8d39"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u6210\u672c\u6d6a\u8d39")),(0,n.kt)("p",null,"\u76f8\u5f53\u5927\u4e00\u90e8\u5206\u865a\u62df\u8d27\u5e01\u90fd\u5206\u914d\u7ed9\u4e86\u77ff\u4e3b\uff0c\u6765\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8282\u70b9\u7684\u8fd0\u884c\uff0c\u5fc5\u987b\u7ed9\u4ed6\u4eec\u8db3\u591f\u7684\u5229\u76ca\u3002\u6240\u4ee5\u8fc7\u53bb\u7531\u4e2d\u4ecb\u6536\u53d6\u7684\u90a3\u4e9b\u8d39\u7528\u5176\u5b9e\u73b0\u5728\u8f6c\u79fb\u5230\u77ff\u4e3b\u624b\u4e0a\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u79cd\u8d39\u7528\u770b\u8d77\u6765\u4e0d\u662f\u7531\u7528\u6237 \u4ed8\u8d39\u7684\uff0c\u800c\u662f\u7ed9\u77ff\u4e3b\u7684\u4e00\u79cd\u201c\u4ee3\u5e01\u201d\uff0c\u4ed6\u53ef\u80fd\u73b0\u9636\u6bb5\u5e76\u4e0d\u503c\u94b1\uff0c\u800c\u662f\u5c06\u6765\u968f\u7740\u5e73\u53f0\u7684\u589e\u52a0\u800c\u5bfc\u81f4\u8fd9\u79cd\u4ee3\u5e01\u4f1a\u5347\u503c\u3002\u8fd9\u662f\u4e00\u79cd\u5bf9\u5c06\u6765\u6295\u673a\u7684\u884c\u4e3a\uff0c\u5982\u679c\u5e73\u53f0\u6ca1\u6709\u5efa\u7acb\u8d77\u6765\uff0c\u77ff\u4e3b\u6ca1\u6709\u4efb\u4f55\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u90a3\u5373\u4f7f\u5c06\u6765\u5e73\u53f0\u8d77\u6765\u4e86\uff0c\u8fd9\u4e9b\u77ff\u4e3b\u624b\u4e0a\u7684\u4ee3\u5e01\u7684\u5b9e\u9645\u5151\u73b0\u4f1a\u6709\u672a\u6765\u53c2\u5165\u8fdb\u6765\u7684\u4eba\u4e70\u5355\uff0c\u4e5f\u5c31\u662f\u672a\u6765\u90a3\u4e9b\u865a\u62df\u8d27\u5e01\u7684\u8d2d\u4e70\u8005\u6240\u652f\u4ed8\u7684\u8d39\u7528\u4e2d\uff0c\u5b9e\u9645\u6709\u90e8\u5206\u662f \u652f\u4ed8\u7ed9\u4e86\u65e9\u671f\u7684\u77ff\u4e3b\u6216\u8005\u65e9\u671f\u6d41\u901a\u7684\u4eba\u3002"),(0,n.kt)("p",null,"\u5982\u6b64\u4e0b\u53bb\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u5c06\u4f1a\u8d8a\u6765\u8d8a\u9ad8\uff0c\u800c\u540e\u52a0\u5165\u7684\u4eba\u9700\u8981\u652f\u4ed8\u66f4\u591a\u7684\u652f\u51fa\u7ed9\u524d\u9762\u7684\u6240\u6709\u4eba\u3002"),(0,n.kt)("p",null,"\u800c\u5982\u679c\u8fd9\u4e2a\u5e73\u53f0\u672c\u8eab\u5e76\u6ca1\u6709\u521b\u9020\u4ef7\u503c\u7684\u8bdd\uff0c\u90a3\u4e48\u8fd9\u4e2a\u6c14\u6ce1\u65e9\u665a\u4f1a\u7834\u706d\u3002\u9664\u975e\u8fd9\u4e2a\u5e73\u53f0\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u521b\u9020\u4e86\u65b0\u7684\u4ef7\u503c\uff0c\u6765\u5339\u914d\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5728\u540e\u7eed\u7684\u5e73\u53f0\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff0c\u6574\u4e2a\u8ba1\u7b97\u6301\u7eed\u5728\u8fd0\u884c\uff0c\u5e73\u53f0\u6301\u7eed\u5728\u7ed9\u8fd9\u4e9b\u77ff\u4e3b\u63d0\u4f9b\u66f4\u9ad8\u7684\u5956\u52b1\uff0c\u8fd9\u79cd\u5956\u52b1\u662f\u6301\u7eed\u4e0d\u65ad\u7684\uff0c\u800c\u4e14\u540e\u7eed\u7684\u5956\u52b1\u4ef7\u503c\u4f1a\u8d8a\u6765\u8d8a\u5927\uff0c\u90a3\u4e48\u600e\u6837\u624d\u80fd\u652f\u6491\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u8fd9\u79cd\u4e3a\u4e86\u7ef4\u6301\uff08\u91cd\u590d\u7684\uff09\u5206\u5e03\u5f0f\u8282\u70b9\u6240\u9700\u8981\u4ed8\u51fa\u7684\u9ad8\u6602\u7ecf\u6d4e\u5229\u76ca\u523a\u6fc0\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u96be\u4ee5\u627f\u53d7\uff0c\u5f53\u7136\u5e73\u53f0\u4e0d\u4f1a\u51fa\u4ec0\u4e48\u94b1\uff0c\u5b83\u4eec\u53ea\u9700\u8981\u53d1\u884c\u4e00\u4e9b\u4ee3\u5e01\uff0c\u7136\u540e\u628a\u751f\u6001\u505a\u5927\uff0c\u5b83\u4eec\u7684\u6536\u5165\u4e5f\u589e\u5927\uff0c\u4e5f\u8bb8\u5b83\u4eec\u4e2d\u9014\u5728\u9ad8\u70b9\u5957\u73b0\uff0c\u4f46\u662f\u5f53\u4ef7\u503c\u5f00\u59cb\u4e0b\u8dcc\u7684\u65f6\u5019\u5b83\u4eec\u4e5f\u6ca1\u6709\u4ec0\u4e48\u635f\u5931\uff0c\u56e0\u4e3a\u6574\u4e2a\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u5b83\u4eec\u5e76\u6ca1\u6709\u4ed8\u51fa\u4ec0\u4e48\u6210\u672c\uff0c\u77ff\u4e3b\u90fd\u662f\u5728\u4e3a\u4e86\u672a\u6765\u8d44\u6e90\u51fa\u94b1\u6765\u652f\u6301\u8fd9\u4e2a\u884c\u4e3a\u548c\u8fd0\u4f5c\u3002"),(0,n.kt)("p",null,"\u6bd4\u7279\u5e01\u7684\u5956\u52b1\u673a\u5236\u7c7b\u4f3c\u4e8e\u5f69\u7968\u7684\u673a\u5236\uff0c\u53ea\u6709\u80dc\u51fa\u7684\u673a\u5668\u624d\u4f1a\u83b7\u5f97\u6bd4\u7279\u5e01\u3002\u5f53\u7136\u8ddf\u5f69\u7968\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u79cd\u5f69\u7968\u8fd8\u4f1a\u5347\u503c\u3002"),(0,n.kt)("h4",{id:"7612-\u793e\u533a\u6cbb\u7406"},"7.6.1.2 \u793e\u533a\u6cbb\u7406"),(0,n.kt)("h4",{id:"7614-\u7cfb\u7edf\u5347\u7ea7"},"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7"),(0,n.kt)("h3",{id:"762-\u6982\u5ff5"},"7.6.2 \u6982\u5ff5"),(0,n.kt)("h4",{id:"7621-\u667a\u80fd\u5408\u7ea6"},"7.6.2.1 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("h4",{id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01"},"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01"),(0,n.kt)("h4",{id:"7623-ico"},"7.6.2.3 ICO"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7"},"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09"),(0,n.kt)("h2",{id:"77-machinations"},"7.7 Machinations"),(0,n.kt)("h2",{id:"78-render-graph"},"7.8 Render Graph"),(0,n.kt)("h3",{id:"781-worldrenderer-challenges"},"7.8.1 WorldRenderer challenges"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"explicit immediate mode\uff0c\u663e\u5f0f\u7684\u7acb\u5373\u6267\u884c\u6a21\u5f0f\u4e0d\u5229\u4e8e\u7edf\u7b79\u534f\u8c03"),(0,n.kt)("li",{parentName:"ul"},"explicit resource management\uff0c\u8d44\u6e90\u7ba1\u7406\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"tight coupling between rendering systems"),(0,n.kt)("li",{parentName:"ul"},"limited extensibility"),(0,n.kt)("li",{parentName:"ul"},"games teams must fork/diverge to customize\uff0c\u53ef\u590d\u7528\u6027\u5dee")),(0,n.kt)("h3",{id:"782-modular-worldrenderer-goals"},"7.8.2 Modular WorldRenderer goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"High-level knowledge of the full frame"),(0,n.kt)("li",{parentName:"ul"},"improved extensibility, 1) Decoupled and composable code modules; 2) automatic resource management"),(0,n.kt)("li",{parentName:"ul"},"Better visualizations and diagnostics")),(0,n.kt)("h2",{id:"79-mlir"},"7.9 MLIR"),(0,n.kt)("p",null,"MLIR\u7684\u76ee\u6807\u662f\u6784\u5efa\u53ef\u590d\u7528\u3001\u53ef\u6269\u5c55\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\uff0c\u4ece\u800c\u89e3\u51b3\u8f6f\u4ef6\u788e\u7247\u5316\u3001\u5f02\u6784\u786c\u4ef6\u7684\u7f16\u8bd1\u3001\u51cf\u5c11DSL\u7f16\u8bd1\u5668\u7684\u6784\u5efa\u65f6\u95f4\uff0c\u5e76\u5c06\u5df2\u6709\u7684\u7f16\u8bd1\u5668\u8fde\u63a5\u5728\u4e00\u8d77\u3002"),(0,n.kt)("p",null,"MLIR\u4f7f\u5404\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e0a\u7684\u4ee3\u7801\u751f\u6210\u3001\u8f6c\u6362\u5668\u3001\u4ee5\u53ca\u4f18\u5316\u5668\u53d8\u5f97\u7b80\u5355\uff0c\u5e76\u4e14\u8d2f\u7a7f\u5e94\u7528\u7a0b\u5e8f\u57df\u3001\u786c\u4ef6\u76ee\u6807\u3001\u4ee5\u53ca\u8fd0\u884c\u65f6\u73af\u5883\u3002"),(0,n.kt)("h3",{id:"791-\u4ecb\u7ecd"},"7.9.1 \u4ecb\u7ecd"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u9886\u57df\u6bd4\u8f83\u6210\u719f\u7684\u5e73\u53f0\u6280\u672f\uff0c\u4e00\u4e2a\u5171\u540c\u7684\u7279\u70b9\u5c31\u662f \uff1a\u201cone size fits all\u201d\uff0ca single abstraction level to interface with the system: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},'LLVM\uff0cis roughly "C with vectors"'),(0,n.kt)("li",{parentName:"ul"},'JVM\uff0cprovides an "object-oriented type system with garbage collector"')),(0,n.kt)("p",null,"\u4e0e\u6b64\u540c\u65f6\uff0c\u8bb8\u591a\u95ee\u9898\u53ef\u80fd\u9700\u8981\u66f4\u9ad8\u6216\u8005\u66f4\u4f4e\u7684\u5c42\u6b21\u62bd\u8c61\uff0c\u6bd4\u5982\u8bf4C++\u6e90\u4ee3\u7801\u7ea7\u522b\u7684\u5206\u6790\u4f7f\u7528LLVM IR\u5c31\u4f1a\u6bd4\u8f83\u56f0\u96be\uff0c\u8bb8\u591a\u8bed\u8a00\u5305\u62ecSwift\u3001Rust\u3001Julia\u3001Fortran\u7b49\u90fd\u5f00\u53d1\u4e86\u81ea\u5df1\u7684IR\u4ee5\u89e3\u51b3\u4e00\u4e9b\u9886\u57df\u7279\u5b9a\u95ee\u9898\uff0c\u6bd4\u5982\u4e00\u4e9b\u8bed\u8a00/\u5e93\u7279\u5b9a\u7684\u4f18\u5316\u3001\u4e00\u4e9b\u57fa\u4e8e\u6d41\u7684\u7c7b\u578b\u68c0\u6d4b\uff0c\u8fd8\u6709\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684ML graphs\u7b49\u3002"),(0,n.kt)("p",null,"\u5f00\u53d1\u8fd9\u79cd\u9886\u57df\u7279\u5b9a\u7684IR\u7f3a\u4e4f\u6bd4\u8f83\u7a0b\u5e8f\u7684\u4e00\u4e9b\u5de5\u5177\uff0c\u81ea\u884c\u5f00\u53d1\u7684\u5de5\u7a0b\u5b9e\u73b0\u5f80\u5f80\u8d28\u91cf\u6bd4\u8f83\u4f4e\u3001\u7f16\u8bd1\u6162\u3001\u7f3a\u4e4f\u597d\u7684\u8c03\u8bd5\u65b9\u6cd5\u3001\u4efb\u610f\u51fabug\u7b49\u4e0d\u7a33\u5b9a\u56e0\u7d20"),(0,n.kt)("p",null,"The MLIR project1 aims to directly tackle these program- ming language design and implementation challenges\u2014by making it cheap to define and introduce new abstraction levels, and provide \u201cin the box\u201d infrastructure to solve common compiler engineering problems. MLIR does this by "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"(1) \u628a\u57fa\u4e8eSSA\u7684IR\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u6807\u51c6\u5316"),(0,n.kt)("li",{parentName:"ul"},"(2) \u63d0\u4f9b\u4e00\u4e2a\u5b9a\u4e49\u7cfb\u7edf\u7528\u4e8e\u5b9a\u4e49IR dialect"),(0,n.kt)("li",{parentName:"ul"},"(3) \u63d0\u4f9b\u4e00\u4e9b\u5e7f\u6cdb\u7684\u57fa\u7840\u8bbe\u65bd\uff0c\u5305\u62ecdocumentation, parsing and printing logic, location tracking, multithreaded compilation support, pass management, etc.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0cMLIR\u5f15\u5165\u7684\u4e00\u4e9b\u7cfb\u7edf\u90fd\u662f\u57fa\u4e8e\u4f20\u7edf\u7684\u4e00\u4e9b\u6982\u5ff5\u548c\u7b97\u6cd5\u4e4b\u5916\u7684\uff0c\u8fd9\u7ed9\u5b66\u672f\u7814\u7a76\u5e26\u6765\u4e86\u5f88\u591a\u673a\u4f1a\uff0c\u4e00\u4e9b \u539f\u5219\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Parsimony:")," Apply Occam\u2019s razor to builtin semantics, concepts, and programming interface. Harness both intrin- sic and incidental complexity by abstracting properties of operations and types. Specify invariants once, but verify correctness throughout. Query properties in the context of a given compilation pass. With very little builtin, this opens the door to extensibility and customization."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Traceability:")," Retain rather than recover information. Declare rules and properties to enable transformation, rather than step wise imperative specification. Extensibility comes with generic means to trace information, enforced by extensive verification. Composable abstractions stem from \u201cglassboxing\u201d their properties and separating their roles\u2014type, control, data flow, etc."),(0,n.kt)("li",{parentName:"ul"},"Progressivity:* Premature lowering is the root of all evil. Beyond representation layers, allow multiple transformation paths that lower individual regions on demand. Together with abstraction-independent principles and interfaces, this enables reuse across multiple domains.")),(0,n.kt)("p",null,"\u8d21\u732e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4e00\u4e9b\u5df2\u7ecf\u88ab\u8bc1\u660e\u7684\u8bbe\u8ba1\u548c\u5de5\u7a0b\u539f\u5219\uff0c\u5b9a\u4f4d\u51fa\u7528\u4e8e\u89e3\u51b3\u53ef\u6269\u5c55\u548c\u6a21\u5757\u5316\u7684\u7f16\u8bd1\u7cfb\u7edf\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6ee1\u8db3\u8fd9\u4e9b\u539f\u5219\u7684\u5168\u65b0\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u63cf\u8ff0"),(0,n.kt)("li",{parentName:"ul"},"\u63a2\u7d22\u5df2\u6709\u7684\u5f15\u7528\uff0c\u5c55\u793a\u8fd9\u79cd\u57fa\u7840\u8bbe\u65bd\u7684\u901a\u7528\u6027")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Where did MLIR come from\uff1f")),(0,n.kt)("p",null,"\u89c2\u5bdf\u5230\u5f53\u4eca\u7684\u5927\u591a\u6570\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u57fa\u672c\u4e0a\u90fd\u7531\u4e00\u4e9b\u4e0d\u540c\u7684\u7f16\u8bd1\u5668\u3001\u56fe\u6280\u672f\u3001\u8fd0\u884c\u65f6 \u7ec4\u6210\uff0c\u5e76\u4e14\u5b83\u4eec\u4e4b\u95f4\u5e76\u6ca1\u6709\u5171\u4eab\u4e00\u4e9b\u901a\u7528\u7684\u57fa\u7840\u8bbe\u65bd\u6216\u8005\u8bbe\u8ba1\u539f\u5219\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u5f00\u53d1\u6210\u672c\uff0c\u53ef\u7ef4\u62a4\u6027\u7b49\u7b49\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5f88\u5feb\u6211\u4eec\u610f\u8bc6\u5230\u7f16\u8bd1\u5668\u5de5\u4e1a\u4e2d\u5b58\u5728\u76f8\u4f3c\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5df2\u6709\u7684\u7cfb\u7edf\u5982LLVM\u5728\u4e0d\u540c\u7684\u8bed\u8a00\u4e4b\u95f4\u8fdb\u884c\u7edf\u4e00\u548c\u96c6\u6210\u65b9\u9762\u975e\u5e38\u6210\u529f\uff0c\u4f46\u662f\u4e00\u4e9b\u9ad8\u5c42\u6b21\u7684\u8bed\u8a00\u901a\u5e38\u4f1a\u6784\u5efa\u81ea\u5df1\u7684\u9ad8\u5c42\u62bdIR\uff0c\u4ee5\u53ca\u4e3a\u8fd9\u4e9b\u9ad8\u5c42\u6b21\u62bd\u8c61\u6784\u5efa\u76f8\u4f3c\u7684\u6280\u672f"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u540c\u65f6\uff0cLLVM\u793e\u533a\u5374\u5728\u6323\u624e\u4e8e\u5e76\u884c\u6784\u9020\u7684\u8868\u8ff0\uff0c\u4ee5\u53ca\u600e\u6837\u5171\u4eab\u524d\u7aef\u7684lowering infrastructure")),(0,n.kt)("h3",{id:"792-\u8bbe\u8ba1\u539f\u5219"},"7.9.2 \u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Little Builtin, Everything Customizable ","[Parsimony]")),(0,n.kt)("p",null,"\u6574\u4e2a\u7cfb\u7edf\u57fa\u4e8e\u51e0\u4e2a\u6700\u5c11\u7684\u57fa\u7840\u6982\u5ff5\uff0c\u8ba9\u5927\u90e8\u5206\u4e2d\u95f4\u8868\u8ff0\u53ef\u4ee5\u5b8c\u5168\u81ea\u5b9a\u4e49\u3002IR\u4e2d\u6700\u5e38\u7528\u7684\u4e00\u4e9b\u62bd\u8c61\uff0c\u5982types\u3001operations\u3001\u4ee5\u53caattributes\u5e94\u8be5\u7528\u6765\u8868\u8ff0\u8fd9\u4e9bIR\uff0c\u8fd9\u6837\u4e00\u81f4\u6027\u5c31\u6bd4\u8f83\u597d\u3002\u53ef\u5b9a\u5236\u6027\u80fd\u591f\u9002\u5e94\u9700\u6c42\u7684\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u5e94\u8be5\u4f7f\u7528\u4e00\u4e9b\u53ef\u590d\u7528\u7684\u7ec4\u4ef6\u6765\u6784\u5efaIR\uff0c\u800c\u8ba9\u8bed\u8a00\u62bd\u8c61\u652f\u6301\u8fd9\u4e9b\u4e2d\u95f4\u8bed\u8a00\u7684\u8bed\u6cd5\u548c\u8bed\u4e49\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6210\u529f\u7684\u53ef\u5b9a\u5236\u6027\u7684\u6807\u51c6\u662f\uff0c\u5b83\u6709\u80fd\u529b\u53bb\u8868\u8fbe\u4e0d\u540c\u7684\u62bd\u8c61\uff0c\u6bd4\u5982\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u56fe\u3001\u5404\u79cdAST\u3001\u6570\u5b66\u62bd\u8c61\u4e2d\u7684\u591a\u6001\u7f16\u8bd1\u3001\u63a7\u5236\u6d41\u56fe\uff08Control Flow Graph\uff09\u3001\u6307\u4ee4\u7ea7\u7684IR\u5982LLVM IR\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7531\u4e8e\u6bd4\u8f83\u7cdf\u7cd5\u7684\u517c\u5bb9\u6027\u62bd\u8c61\uff0c\u53ef\u5b9a\u5236\u80fd\u529b\u5e26\u6765\u5185\u90e8\u788e\u7247\u5316\u7684\u98ce\u9669\uff0c\u8fd9\u770b\u8d77\u6765\u6ca1\u6709\u4ec0\u4e48\u597d\u7684\u6280\u672f\u65b9\u6848\uff0c\u4f46\u662f\u7cfb\u7edf\u5e94\u8be5\u9f13\u52b1\u6211\u4eec\u8bbe\u8ba1\u53ef\u590d\u7528\u7684\u62bd\u8c61\uff0c\u5e76\u4e14\u5047\u8bbe\u6211\u4eec\u8bbe\u8ba1\u7684\u62bd\u8c61\u53ef\u80fd\u4f1a\u88ab\u7528\u4e8e\u8d85\u51fa\u6211\u4eec\u521d\u59cb\u60f3\u6cd5\u7684\u8303\u56f4\uff0c\u4ee5\u4fbf\u4e8e\u66f4\u597d\u5730\u517c\u5bb9\u5916\u90e8\u62bd\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SSA and Regions ","[Parsimony]")),(0,n.kt)("p",null,"\u5c3d\u7ba1SSA\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u5b83\u4eec\u5927\u591a\u662f\u4e00\u4e9b\u6bd4\u8f83\u5e73\u7684\u3001\u7ebf\u6027\u7684CFG\uff0c\u4f46\u662f \u4e00\u4e9b \u9ad8\u5c42\u6b21\u7684\u62bd\u8c61\u5374\u5f15\u5165\u5c06\u5d4c\u5957\u7684\u533a\u5757\uff08nested regions\uff09\u4f5c\u4e3a\u7b2c\u4e00\u7b49\u516c\u6c11\u3002\u4e3a\u4e86\u652f\u6301\u5f02\u6784\u7f16\u8bd1\uff0c\u7cfb\u7edf \u5fc5\u987b\u652f\u6301\u80fd\u591f\u8868\u8fbe\u7ed3\u6784\u5316\u7684\u63a7\u5236\u6d41\u3001\u5e76\u884c\u7ed3\u6784\u3001\u6e90\u8bed\u8a00\u4e2d\u7684 \u95ed\u5305\uff0c\u4ee5\u53ca\u8bb8\u591a\u5176\u4ed6\u76ee\u7684\u3002\u5176\u4e2d\u4e00\u4e2a\u7279\u522b\u7684\u6311\u6218\u662f\u4f7f\u57fa\u4e8eCFG\u7684\u5206\u6790\u548c\u8f6c\u6362\u7ec4\u5408\u80fd\u591f\u57fa\u4e8enested region\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u5fc5\u987b\u8981\u727a\u7272\u4e00\u4e9bLVVM\u7684\u4e00\u822c\u751a\u81f3\u6bd4\u8f83\u6743\u5a01\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Maintain Higher-Level Semantics ","[Progressivity]",":")),(0,n.kt)("p",null,"\u7cfb\u7edf\u5e94\u8be5\u4fdd\u7559\u4e00\u4e9b\u7ed3\u6784\u4fe1\u606f\u5e2e\u52a9\u4e0b\u4e00\u5c42\u6b21\u8fdb\u884c\u5206\u6790\u548c\u4f18\u5316\uff0c\u8fd9\u79cd\u4fe1\u606f\u5e94\u8be5\u6e10\u8fdb\u5f0f\u5730\u5411\u4e0b\u4f20\u9012\uff0c\u7ed3\u6784\u4fe1\u606f\u7684\u4e22\u5f03\u5e94\u8be5\u4f7f\u5f97\u4e0b\u4e00\u5c42\u62bd\u8c61\u521a\u597d\u4e0d\u9700\u8981\u8fd9\u6837\u7684\u7ed3\u6784\u4fe1\u606f\u3002\u4f8b\u5982\u5728transformation\u9636\u6bb5\uff0c\u6240\u6709\u7684\u7ed3\u6784\u5316\u63a7\u5236\u6d41\u4fe1\u606f\uff0c\u4f8b\u5982\u5faa\u73af\u7ed3\u6784\u90fd\u9700\u8981\u4fdd\u7559\uff0c\u79fb\u9664\u8fd9\u6837\u7684\u4fe1\u606f\u5219\u610f\u5473\u7740\u540e\u7eed\u4e0d\u4f1a\u518d\u53d1\u751ftransformation\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ed3\u6784\u662f\uff0c\u4e0d\u540c\u62bd\u8c61\u5c42\u6b21\u7684\u6982\u5ff5\u4f1a\u5904\u4e8e\u540c\u4e00\u4e2aIR\u4e2d\uff0c\u4f7f\u5f97\u4f4e\u5c42\u6b21\u7684\u62bd\u8c61\u53ef\u4ee5\u4f7f\u7528\u9ad8\u5c42\u6b21\u7684\u4e00\u4e9b\u4fe1\u606f\u6765\u8f85\u52a9\u8fdb\u884c\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u7ed3\u6784\u662f\u7cfb\u7edf\u5e94\u8be5\u652f\u6301\u6e10\u8fdb\u5f0f\u5730lowering\uff0c\u5728\u591a\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e4b\u95f4\u4ee5small steps\u8fdb\u884c\u63a8\u8fdb\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u7684\u7f16\u8bd1\u5668\u5176\u5b9e\u4e5f\u5df2\u7ecf\u5305\u542b\u4e86\u5f88\u591a\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Declaration and Validation [Parsimony and Traceability")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Source Location Tracking ","[Traceability]")),(0,n.kt)("h3",{id:"793-mlir-structure"},"7.9.3 MLIR structure"),(0,n.kt)("p",null,"MLIR\u8bed\u8a00\u7528\u4e8e\u63cf\u8ff0high-level structure\uff0c\u8fd9\u4e2a\u7ed3\u6784\u5176\u5b9e\u662f\u4e00\u68f5\u6811\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u5305\u542boperation\u548coperand\u3002\u6240\u6709\u5bf9\u8fd9\u68f5\u6811\u7684\u64cd\u4f5c\uff0c\u6bd4\u5982 \u8f6c\u6362\u3001\u4f18\u5316\u7b49\uff0c\u90fd\u53ef\u4ee5\u8868\u793a\u4e3a\u5bf9\u6574\u4e2a\u6811\u7684\u904d\u5386\uff0cMLIR\u901a\u8fc7Pass\u6765\u5b9e\u73b0\u904d\u5386\uff0c\u6bcf\u4e2apass\u4ece\u67d0\u4e2aoperation\u5f00\u59cb\uff0c\u5927\u591a\u6570\u65f6\u5019\u6700\u9876\u5c42\u7684operation\u662fModuleOp\uff0cPassManager\u5c31\u88ab\u8bbe\u8ba1\u4e3a\u9650\u5236\u5176operation \u4e3aModuleOp\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void runOnOperation() override {\n Operation *op = getOperation();\n resetIndent();\n printOperation(op);\n }\n")),(0,n.kt)("p",null,"\u6574\u4e2a IR\u662f\u5d4c\u5957\u7684\uff0c\u9664\u4e86operation\uff0c\u8fd8\u6709 \u5176\u4ed6\u4e00\u4e9b\u5c42\u6b21\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"operation\uff0c\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u5d4c\u5957\u7684Regions"),(0,n.kt)("li",{parentName:"ul"},"Region\uff0c\u6709\u4e00\u4e2aBlock\u96c6\u5408\u5217\u8868\u7ec4\u6210"),(0,n.kt)("li",{parentName:"ul"},"Block\uff0c\u5305\u542b\u4e00\u7ec4operation\u7684\u96c6\u5408")),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f8b\u6570\u636e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"visiting op: 'builtin.module' with 0 operands and 0 results\n 1 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 3 operations\n visiting op: 'dialect.op1' with 0 operands and 4 results\n 1 attributes:\n - 'attribute name' : '42 : i32'\n 0 nested regions:\n visiting op: 'dialect.op2' with 0 operands and 0 results\n 2 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 1 operations\n visiting op: 'dialect.innerop1' with 2 operands and 0 results\n 0 nested regions:\n Region with 3 blocks:\n Block with 0 arguments, 2 successors, and 2 operations\n visiting op: 'dialect.innerop2' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop3' with 3 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop4' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop5' with 0 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop6' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop7' with 0 operands and 0 results\n 0 nested regions:\n 0 nested regions:\n")),(0,n.kt)("h3",{id:"794-llvm-irspir-vmlir"},"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"},"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"))),(0,n.kt)("h4",{id:"7941-llvm-ir"},"7.9.4.1 LLVM IR"),(0,n.kt)("p",null,"IR\u53ea\u662f\u7a0b\u5e8f\u7684\u4e00\u79cd\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u8bbe\u8ba1\u6ce8\u91cd\u652f\u6301\u53d8\u6362\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"IR\u7684\u4e09\u79cd\u5f62\u6001\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u8868\u793a\uff0c\u7528\u4e8e\u9ad8\u6548\u7684\u5206\u6790\u4e0e\u53d8\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\uff1a\u7528\u4e8e\u5b58\u50a8\u548c\u4ea4\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u672c\u8868\u793a\uff1a\u7528\u4e8e \u9605\u8bfb\u548c\u7ea0\u9519")),(0,n.kt)("p",null,"LLVM\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u5fc3\u5316\u548c\u5404\u79cd\u884d\u751f\uff1aLLVM IR\u662f\u524d\u540e\u7aef\u89e3\u8026\u7684\u57fa\u7840\uff0c\u5904\u4e8e\u6838\u5fc3/\u4e2d\u5fc3\u5730\u4f4d\uff0c\u5b8c\u6574\u7684\u7f16\u8bd1\u8def\u5f84\u5fc5\u987b\u7ecf\u8fc7LLVM IR\uff0c\u5bfc\u81f4\u5176\u8fdb\u5316\u7f13\u6162"),(0,n.kt)("li",{parentName:"ul"},"\u6f14\u8fdb\u4e0e\u517c\u5bb9\u6027\uff1a\u9a71\u52a8\u7684\u5347\u7ea7\u901a\u5e38\u65e0\u6cd5\u5f97\u5230\u4fdd\u8bc1\uff0c\u56e0\u6b64\u9a71\u52a8\u4f9d\u8d56\u7684LLVM IR\u5e93\u4e5f\u53ef\u80fd\u6c38\u8fdc\u5f97\u4e0d\u5230\u5347\u7ea7")),(0,n.kt)("h4",{id:"7942-spir-v"},"7.9.4.2 SPIR-V"),(0,n.kt)("p",null,"SPIR-V\u662fKhronos API\u5171\u7528\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u5305\u62ecVulkan\uff0cOpenGL\uff0cOpenCLass\u7b49\uff0cKhronos group\u7684\u6807\u8bed\u662f\uff1a\u94fe\u63a5\u8f6f\u4ef6\u4e0e\u786c\u4ef6\u3002"),(0,n.kt)("p",null,"LLVM IR\u76f8\u5bf9\u4e8eSPIR-V\u6709\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u540c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u6709\u6bd4\u8f83\u597d\u7684\u7248\u672c\u7ba1\u7406\u548c\u6269\u5c55\u7ba1\u7406\uff0c\u4e5f\u6709\u7a33\u5b9a\u7684\u5b57\u8282\u7801\u8868\u793a"),(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u4e3b\u8981\u7528\u4e8e\u9a71\u52a8\u5185\u90e8\u7684\u4e8c\u6b21\u7f16\u8bd1\uff08\u5728\u7ebf\u7f16\u8bd1\uff09")),(0,n.kt)("p",null,"\u7a33\u5b9a\u7684\u5b57\u8282\u7801\uff0c\u5b8c\u6574\u7684 GPU \u7f16\u8bd1\u5668\u88ab\u5206\u4e3a\u4e24\u90e8\u5206\u2014\u2014\u9996\u5148\u901a\u8fc7\u79bb\u7ebf\u5de5\u5177\u94fe\u4ece\u9ad8\u5c42\u6b21\u6e90\u4ee3\u7801\u751f\u6210 SPIR-V\uff0c\u7136\u540e\u901a\u8fc7\u9a71\u52a8\u5185\u90e8\u7f16\u8bd1\u5668\u5c06 SPIR-V \u5728\u7ebf\u7f16\u8bd1\u6210\u673a\u5668\u7801\u3002\u867d\u7136\u50cf LLVM IR \u4e00\u6837\u5728\u6574\u4e2a\u7f16\u8bd1\u6d41\u7a0b\u4e2d\u5904\u4e8e\u201c\u4e2d\u95f4\u201d\u4f4d\u7f6e\uff0cSPIR-V \u66f4\u4fa7\u91cd\u4e8e\u9a71\u52a8\u5185\u90e8\u4e8c\u6b21\u7f16\u8bd1\u7684\u9ad8\u6548\uff0c\u56e0\u4e3a\u8fd9\u4e00\u6b65\u5728\u8fd0\u884c\u65f6\u8fdb\u884c\u3002\u6240\u4ee5 SPIR-V \u7684\u6838\u5fc3\u662f\u5176\u5b57\u8282\u7801\u3002\u5176\u7f16\u7801\u6709\u5f88\u591a\u7b80\u5316\u9a71\u52a8\u4e8c\u6b21\u7f16\u8bd1\u7684\u8003\u91cf\uff0c\u50cf\u662f\u7528\u5404\u79cd\u63d0\u524d\u7684\u663e\u793a\u58f0\u660e\u6765\u907f\u514d\u8fd0\u884c\u65f6\u590d\u6742\u7684\u5206\u6790\u3002SPIR-V \u5e76\u6ca1\u6709\u5728\u89c4\u8303\u4e2d\u6307\u5b9a\u5185\u5b58\u8868\u793a\u6216\u8005\u6587\u672c\u8868\u793a\uff0c\u8fd9\u4e9b\u90fd\u662f\u5b9e\u73b0 SPIR-V \u6807\u51c6\u89c4\u8303\u7684\u5de5\u5177\u94fe\u81ea\u884c\u5b9a\u4e49\u7684\u3002\u6bd4\u5982 SPIRV-Tools \u6709\u5176\u81ea\u5df1\u7684\u5185\u5b58\u8868\u793a\u548c\u6587\u672c\u8868\u793a\uff0c \u540c\u6837 MLIR \u4e2d\u7684 SPIR-V dialect \u4e5f\u662f\u3002"),(0,n.kt)("p",null,"GPU\u9886\u57df\u4e13\u7528\uff1a\u5176\u5b9e SPIR-V \u7684 IR \u90e8\u5206\u548c LLVM IR \u76f8\u5dee\u5e76\u4e0d\u592a\u5927\u3002SPIR-V \u501f\u9274\u4e86\u5f88\u591a LLVM IR \u7684\u8bbe\u8ba1\u2014\u2014\u5b83\u540c\u6837\u662f\u7531\u63a7\u5236\u6d41\u3001\u57fa\u672c\u5757\u3001\u4ee5\u53ca\u9759\u6001\u5355\u8d4b\u503c\u6765\u8868\u793a\u7a0b\u5e8f\u3002\u6307\u4ee4\u7684\u7c92\u5ea6\u548c LLVM IR \u4e5f\u76f8\u5dee\u4e0d\u5927\u3002SPIR-V \u4e2d\u72ec\u7279\u7684\u90e8\u5206\u5728\u4e8e\u5bf9\u5f88\u591a GPU \u6982\u5ff5\u7684\u539f\u751f\u652f\u6301\u3002\u8fd9\u79cd\u652f\u6301\u901a\u8fc7\u5f88\u591a SPIR-V \u72ec\u6709\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982 decorations, builtins, \u4ee5\u53ca\u7279\u6b8a\u7684\u6307\u4ee4\uff08\u50cf\u662f\u5bfc\u6570\u8ba1\u7b97\u3001\u56fe\u50cf\u53d6\u6837\uff09\u3002\u53e6\u5916\u4e3a\u4e86\u652f\u6301\u56fe\u5f62\u56fe\u50cf\u548c\u9ad8\u6027\u80fd\u8ba1\u7b97\u7684\u4e24\u79cd\u4f7f\u7528\u573a\u666f\uff0c SPIR-V \u4e2d\u6709\u8bb8\u591a\u6267\u884c\u6a21\u578b\u548c\u6a21\u5f0f\u3002\u5f53\u7136\uff0c\u5bf9\u56fe\u5f62\u56fe\u50cf\u4e5f\u6709 structured control flow \u7684\u7279\u6b8a\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"7943-mlir"},"7.9.4.3 MLIR"),(0,n.kt)("p",null,"\u4e00\u4e2a GPU \u4e3a\u4e3b\u7684\u6807\u51c6\u89c4\u8303\u9700\u8981\u539f\u751f\u652f\u6301\u5404\u79cd GPU \u6982\u5ff5\uff0c\u80fd\u591f\u63d0\u4f9b\u4e0d\u540c\u7b49\u7ea7\u7684\u6269\u5c55\u9700\u6c42\uff0c \u4ee5\u53ca\u63d0\u4f9b\u7a33\u5b9a\u548c\u517c\u5bb9\u7684\u5b57\u8282\u7801\u3002\u8fd9\u4e9b\u9700\u6c42\u5e76\u4e0d\u7b26\u5408 LLVM IR \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u6240\u4ee5 Khronos Group \u63a8\u51fa\u4e86 SPIR-V\u3002\u4f46\u662f\u8bbe\u8ba1\u4e00\u5957\u4e2d\u95f4\u8868\u793a\u53ea\u662f\u4e2a\u5f00\u59cb\uff0c\u56f4\u7ed5\u5176\u5f00\u53d1\u548c\u7ef4\u62a4\u6574\u5957\u5de5\u5177\u94fe\u9700\u8981\u6301\u7eed\u4e0d\u65ad\u7684\u5de5\u7a0b\u6295\u5165\u3002SPIR-V \u4e0e LLVM IR \u5b8c\u5168\u65e0\u5173\uff0cSPIR-V \u7684\u7f16\u8bd1\u5668\u6808\u65e0\u6cd5\u5229\u7528\u73b0\u6709\u7684 LLVM \u5e93\u3002\u6240\u4ee5 SPIR-V \u7684\u6574\u4e2a\u6808\u662f\u4ece\u5934\u5f00\u59cb\u72ec\u7acb\u5f00\u53d1\u7684\uff0c\u4ece\u6c47\u7f16\u3001\u53cd\u6c47\u7f16\uff0c\u4e00\u6b65\u6b65\u5230\u5404\u79cd\u8bed\u8a00\u7684\u7f16\u8bd1\u5668\u548c\u4f18\u5316\u3002\u800cMLIR\u6070\u597d\u53ef\u4ee5\u5e2e\u52a9\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316 (infrastructurization)"),"\uff0cMLIR \u662f\u7528\u6765\u5f00\u53d1\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u3002\u5b83\u63d0\u4f9b\u4e00\u7cfb\u5217\u53ef\u590d\u7528\u7684\u6613\u6269\u5c55\u7684\u57fa\u7840\u7ec4\u4ef6\uff0c\u7528\u6765\u642d\u5efa\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u3002\u5728 LLVM IR \u548c SPIR-V \u4e2d\uff0c\u6211\u4eec\u6709\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u4e2d\u542b\u6709\u5b8c\u5907\u7684\u6307\u4ee4\u96c6\u6765\u7f16\u8bd1\u6240\u6709\u7684 CPU \u548c GPU \u7a0b\u5e8f\u3002MLIR \u4e2d\u5219\u6ca1\u6709\u5b8c\u5168\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\u7684\u4e2d\u95f4\u8868\u793a\u3002MLIR \u63d0\u4f9b\u57fa\u7840\u8bbe\u65bd\u6765\u5e2e\u52a9\u5b9a\u4e49 operation \u4ee5\u53ca\u5c06\u903b\u8f91\u76f8\u5173\u7684 operation \u7ec4\u5408\u6210 dialect\u3002\u53e6\u5916\uff0cMLIR \u4e5f\u63d0\u4f9b\u4e00\u4e9b\u666e\u9002\u7684 pattern \u6216\u8005 pass\uff0c\u8fd9\u4e9b pattern \u6216\u8005 pass \u5e76\u4e0d\u4e0e\u5177\u4f53\u7684 operation \u7ed1\u5b9a\uff0c\u80fd\u591f\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"\u65e0\u8bba\u662f\u5bf9 operation \u8fd8\u662f pattern/pass \u7684\u652f\u6301\u90fd\u8981\u6c42 MLIR \u4ee5\u66f4\u52a0\u7ec6\u7684\u7c92\u5ea6\u770b\u5f85\u7f16\u8bd1\u5668\u3002\u5728 MLIR \u4e2d\uff0coperation \u4e0d\u518d\u662f\u6700\u57fa\u7840\u7684\u90e8\u4ef6\uff0c\u7c92\u5ea6\u8fdb\u4e00\u6b65\u7ec6\u5316\u5230\u7c7b\u578b, \u503c, attribute, region, \u4ee5\u53ca interface (\u4f8b\u5982 attribute/type/operation interface).","[8]"),(0,n.kt)("p",null,"Operation \u53ef\u4ee5\u6709\u4efb\u610f\u6570\u91cf\u7684\u8f93\u5165\u3001\u8f93\u51fa\u3001attribute\uff0c\u5e76\u5305\u542b\u4efb\u610f\u6570\u91cf\u7684 region\u3002\u5176\u4e2d region \u80fd\u591f\u8868\u793a operation \u4e4b\u95f4\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u4ece\u800c\u7b80\u5316\u7f16\u8bd1\u5668\u7684\u5206\u6790\u548c\u8f6c\u6362\u3002Operation \u53ef\u4ee5\u5b9e\u73b0 operation interface\uff0cpattern \u548c pass \u7ed1\u5b9a\u7684\u662f operation interface\uff0c\u7531\u6b64\u800c\u5b9e\u73b0\u4e0e\u5177\u4f53 operation \u7684\u89e3\u7ed1\u5e76\u505a\u5230\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"MLIR \u91cc\u9762\u7684\u6982\u5ff5\u90fd\u8bbe\u8ba1\u7684\u6bd4\u8f83\u62bd\u8c61\uff0c\u76ee\u7684\u662f\u80fd\u6bd4\u8f83\u597d\u5730\u6620\u5c04\u5230\u4e0d\u540c\u7684\u9886\u57df\u548c\u573a\u666f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dialects, dialects, dialects"),"\uff0c\u5f53\u7136\uff0c\u8fd9\u5957\u57fa\u7840\u8bbe\u65bd\u5b58\u5728\u7684\u76ee\u7684\u662f\u5e2e\u52a9\u642d\u5efa\u6700\u7ec8\u7f16\u8bd1\u5668\u3002\u6211\u4eec\u5728\u5199 C++ \u7a0b\u5e8f\u7684\u7684\u65f6\u5019\u4f1a\u8c03\u7528 STL \u6216\u8005\u66f4\u52a0\u9ad8\u5c42\u6b21\u7684\u5e93\uff0c\u5f88\u5c11\u4f1a\u4ece\u5934\u5f00\u59cb\u5b9e\u73b0\u6240\u6709\u7684\u7ec6\u8282\u3002\u53e6\u5916\uff0c\u57fa\u7840\u8bbe\u65bd\u4e5f\u9700\u8981\u4e0e\u5176\u652f\u6301\u7684\u9886\u57df\u534f\u540c\u53d1\u5c55\uff0c\u56e0\u4e3a\u4f7f\u7528\u573a\u666f\u4e2d\u4f1a\u63d0\u4f9b\u5f88\u591a\u9700\u6c42\u3002\u56e0\u6b64\uff0cMLIR \u4ee3\u7801\u5e93\u4e2d\u81ea\u5e26\u5f88\u591a\u7528\u6765\u7ed9\u5404\u79cd\u5c42\u7ea7\u6982\u5ff5\u5efa\u6a21\u7684 dialect\u3002","[9]"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684 dialect \u751f\u6001\u76ee\u524d\u8fd8\u5728\u6269\u5f20\u6f14\u8fdb\u9636\u6bb5\uff0c\u4f46 dialect \u4e4b\u95f4\u7684\u7ec4\u7ec7\u7ed3\u6784\u4ee5\u53ca\u6709\u4e9b dialect \u5df2\u7ecf\u76f8\u5bf9\u7a33\u5b9a\u4e86\u3002"),"\u6bd4\u5982\u6211\u4eec\u6709 LLVM \u548c SPIR-V dialect \u4f5c\u4e3a\u4e0e\u5176\u4ed6\u7cfb\u7edf\u8f6c\u6362\u7684\u8fb9\u754c dialect\u3002\uff08\u5176\u5b9e MLIR \u53ef\u4ee5\u540c\u65f6\u8868\u793a LLVM IR \u548c SPIR-V \u8fd9\u4e00\u70b9\u4e5f\u8868\u660e\u4e86 MLIR \u7684\u57fa\u7840\u8bbe\u65bd\u89d2\u8272\u3002\uff09 \u62bd\u8c61\u5c42\u6b21\u5c45\u4e2d\u7684\u6709 Linalg, Tensor, Vector, SCF dialect\uff0c\u5b83\u4eec\u534f\u540c\u5408\u4f5c\u7528\u6765\u751f\u6210\u4ee3\u7801\u3002\u53e6\u5916\uff0cMLIR \u4e2d\u8fd8\u6709 Affine, Math, Arithmetic dialect \u7528\u6765\u63cf\u8ff0\u5e95\u5c42\u8ba1\u7b97\u3002\u5728 AI \u6846\u67b6\u5c42\u9762\uff0c\u6709 TensorFlow, TFLite, MHLO, Torch, TOSA \u8fdb\u884c\u5bf9\u63a5\u548c\u5bfc\u5165\u6a21\u578b\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7528\u9014\u7684 dialect\uff0c\u50cf\u662f PDL \u7528\u6765\u5b9a\u4e49\u7f16\u8bd1\u5668\u8f6c\u6362\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"Alex \u4e4b\u524d\u5728 MLIR \u8bba\u575b\u4e0a\u5206\u4eab\u7684\u5404 dialect \u4e4b\u95f4\u7684\u5173\u7cfb","[10]","\u975e\u5e38\u503c\u5f97\u4e00\u8bfb\uff0c\u4e4b\u540e\u6211\u4e5f\u4f1a\u5199\u4e0b\u6211\u7684\u7406\u89e3\u3002\u8fd9\u4e9b\u5404\u5f0f\u5404\u6837\u7684 dialect \u548c\u4ee5\u540e\u5305\u88c5\u5b83\u4eec\u800c\u4ea7\u751f\u7684\u5c40\u90e8\u6216\u8005\u5b8c\u6574\u7684\u8f6c\u6362\u6d41\u7a0b\u5c06\u6781\u5927\u7b80\u5316\u9886\u57df\u76f8\u5173\u7f16\u8bd1\u5668\u7684\u5f00\u53d1\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fdb\u4e00\u6b65\u89e3\u8026\u7f16\u8bd1\u5668\u548c\u4e2d\u95f4\u8868\u793a"),"\uff1a\u5176\u5b9e",(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316\u4ee5\u53ca\u7531\u6b64\u4ea7\u751f\u7684\u5927\u91cf dialect \u90fd\u662f\u8fdb\u4e00\u6b65\u89e3\u8026\u548c\u6a21\u5757\u5316\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u7684\u4e00\u79cd\u81ea\u7136\u7ed3\u679c"),"\u3002\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\u88ab\u8bb8\u591a\u4ee5 dialect \u5f62\u6001\u5b58\u5728\u7684\u90e8\u5206\u7684\u4e2d\u95f4\u8868\u793a\u53d6\u4ee3\u3002\u6ca1\u6709\u67d0\u4e2a\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u518d\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\uff0c\u90fd\u662f\u6309\u9700\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u8fdb\u4e00\u6b65\u89e3\u8026\u4e2d\u95f4\u8868\u793a\u4e5f\u8ba9\u6211\u4eec\u53ef\u4ee5\u7075\u6d3b\u5730\u6839\u636e\u9886\u57df\u8fdb\u884c\u8bbe\u8ba1\u548c\u6298\u4e2d\u3002\u6211\u4eec\u53ea\u9700\u9009\u53d6\u6240\u9700\u7684\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u6765\u7ec4\u5408\u6210\u5b8c\u6574\u7f16\u8bd1\u5668\uff0c\u4e0d\u518d\u9700\u8981\u5168\u76d8\u63a5\u6536\u50cf LLVM IR \u4e00\u6837\u7684\u4e00\u5957\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u3002\u56e0\u4e3a interface \u7684\u5b58\u5728\uff0c\u6269\u5c55\u6a21\u5757\u7684\u66f4\u80fd\u4e5f\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u2014\u2014\u6211\u4eec\u65e2\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 operation \u6765\u5b9e\u73b0\u5df2\u6709\u7684 interface\uff0c\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 interface \u7136\u540e\u652f\u6301\u73b0\u6709 operation\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0cLLVM IR \u5929\u7136\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u7edf\u4e00\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0cMLIR \u7684\u57fa\u7840\u8bbe\u65bd\u548c dialect \u751f\u6001\u5219\u5929\u7136\u662f\u53bb\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u79bb\u6563\u7684\u7f16\u8bd1\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u7684\u4e00\u822c\u53d1\u5c55\u8d8b\u52bf\u662f\u4ece\u5355\u4e00\u7684\u5f3a\u8026\u5408\u6574\u4f53\u5230\u9002\u7528\u4e0d\u540c\u573a\u666f\u7684\u591a\u79cd\u591a\u6837\u7684\u9009\u62e9\u3002\u5bf9\u4e8e\u6280\u672f\u6808\u7684\u4e0a\u5c42\u800c\u8a00\uff0c\u8fd9\u5c24\u5176\u660e\u663e\uff0c\u56e0\u4e3a\u8d8a\u5f80\u4e0a\u8d8a\u63a5\u8fd1\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\uff0c\u800c\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\u672c\u8eab\u5c31\u5404\u5f0f\u5404\u6837\uff0c\u7531\u5c42\u51fa\u4e0d\u7a77\u7684\u524d\u7aef\u6846\u67b6\u53ef\u89c1\u4e00\u6591\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u6808\u7684\u5e95\u5c42\u4e00\u822c\u76f8\u5bf9\u7a33\u5b9a\u3002\u5c11\u6570\u51e0\u79cd\u786c\u4ef6\u67b6\u6784\u3001\u7f16\u8bd1\u5668\u548c\u64cd\u4f5c\u7cfb\u7edf\u7edf\u6cbb\u5f88\u591a\u5e74\u3002\u4f46\u534a\u5bfc\u4f53\u8fdb\u5c55\u7684\u53d8\u6162\u548c\u8ba1\u7b97\u9700\u6c42\u7684\u7206\u70b8\u5f0f\u589e\u957f\u4e5f\u5728\u9a71\u52a8\u7740\u5e95\u5c42\u6280\u672f\u7684\u53d8\u9769\u3002\u73b0\u5728\u4f9d\u7136\u4f9d\u9760\u901a\u7528\u67b6\u6784\u548c\u666e\u9002\u4f18\u5316\u5f88\u96be\u518d\u6ee1\u8db3\u5404\u79cd\u9700\u6c42\uff0c\u5f00\u53d1\u9886\u57df\u4e13\u7528\u7684\u6574\u4f53\u7684\u89e3\u51b3\u65b9\u6848\u662f\u4e00\u6761\u51fa\u8def\u3002RISC-V \u5728\u82af\u7247\u6307\u4ee4\u96c6\u5c42\u6b21\u63a2\u7d22\u6a21\u5757\u5316\u548c\u5b9a\u5236\u5316\uff0cMLIR \u5219\u662f\u5728\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u5c42\u9762\u505a\u7c7b\u4f3c\u63a2\u7d22\u3002\u4e24\u8005\u8054\u624b\u4f1a\u7ed9\u5e95\u5c42\u6280\u672f\u6808\u5e26\u6765\u4f55\u79cd\u9769\u65b0\u662f\u4e00\u4e2a\u503c\u5f97\u62ed\u76ee\u4ee5\u5f85\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8de8\u7cfb\u7edf\u8fb9\u754c\u7684\u6e10\u8fdb\u5f0f\u4ee3\u7801\u8868\u793a\u9012\u964d")),(0,n.kt)("p",null,"\u5728\u7ed3\u675f\u672c\u7ae0\u4e4b\u524d\uff0c\u518d\u5570\u55e6\u6700\u540e\u4e00\u70b9\u3002\u5176\u5b9e\u6211\u4eec\u53ef\u4ee5\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u770b\u5f85 MLIR \u5e26\u6765\u7684\u89e3\u8026\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6c34\u5e73\u65b9\u5411\u4e0a\uff0cdialect \u628a\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u6253\u6563\u6210\u8bb8\u591a\u5c40\u90e8\u4e2d\u95f4\u8868\u793a\uff1b\u5782\u76f4\u65b9\u5411\u4e0a\uff0cMLIR \u8ba9\u6211\u4eec\u53ef\u4ee5\u5bf9\u5904\u4e8e\u4e0d\u540c\u5c42\u7ea7\u7684\u6982\u5ff5\u8fdb\u884c\u5efa\u6a21"),"\u3002\u8fd9\u5bf9\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u662f\u975e\u5e38\u6709\u7528\u7684\uff0c\u56e0\u4e3a\u9886\u57df\u4e13\u7528\u8bed\u8a00\u4e00\u822c\u662f\u9ad8\u5ea6\u62bd\u8c61\u7684\u58f0\u660e\u5f0f\u8bed\u8a00\uff0c\u53ea\u63cf\u8ff0\u4efb\u52a1\uff0c\u9700\u8981\u7f16\u8bd1\u5668\u5c06\u5176\u8f6c\u6362\u6210\u5177\u4f53\u7684\u547d\u4ee4\u5f0f\u673a\u5668\u6307\u4ee4\u3002\u4e00\u6b65\u8de8\u8d8a\u8fd9\u4e2a\u5de8\u5927\u7684\u62bd\u8c61\u5dee\u8ddd\u662f\u975e\u5e38\u96be\u7684\uff0c\u5229\u7528\u591a\u7ea7\u62bd\u8c61\u548c\u5efa\u6a21\u6765\u8fdb\u884c\u6e10\u8fdb\u5f0f lowering \u662f\u66f4\u52a0\u9002\u5408\u7684\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u5206\u79bb\u5404\u4e2a\u5c42\u6b21\u5173\u6ce8\u7684\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u4e5f\u66f4\u52a0\u7684\u6613\u5f00\u53d1\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u5e76\u4e0d\u662f\u4ec0\u4e48\u5168\u65b0\u7684\u6982\u5ff5\uff0c\u5728\u4e0d\u540c\u7684\u9879\u76ee\u4e2d\u6211\u4eec\u5df2\u7136\u770b\u5230\u5404\u79cd\u7c7b\u4e2d\u95f4\u8868\u793a\u7684\u8bbe\u7f6e\uff0c\u50cf\u662f Clang AST \u6216\u8005\u5404\u79cd\u673a\u5668\u5b66\u4e60\u6846\u67b6\u4e2d\u7684\u8ba1\u7b97\u56fe\u3002",(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684\u4f18\u52bf\u662f\u4f7f\u7528\u540c\u6837\u7684\u57fa\u7840\u8bbe\u65bd\u5c06\u8fd9\u4e9b\u4e0d\u540c\u5c42\u6b21\u7684\u8868\u793a\u8fde\u63a5\u8d77\u6765\uff0c\u8ba9\u5b83\u4eec\u4e4b\u95f4\u7684\u4fe1\u606f\u6d41\u901a\u53d8\u5f97\u66f4\u52a0\u987a\u7545\u3002"),"\u5176\u5b9e\u73b0\u4ee3\u590d\u6742\u7cfb\u7edf\u7684\u5f00\u53d1\u591a\u662f\u9009\u53d6\u5404\u79cd\u5b50\u7cfb\u7edf\u7136\u540e\u5c06\u5176\u7ec4\u5408\u3002\u5c06\u6765\u81ea\u524d\u4e00\u4e2a\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u8fdb\u884c\u9a8c\u8bc1\u3001\u8f6c\u5316\u7136\u540e\u4f20\u9012\u7ed9\u4e0b\u4e00\u4e2a\u5b50\u7cfb\u7edf\u6d88\u8017\u6389\u5f88\u591a\u5de5\u7a0b\u8d44\u6e90\u3002\u5982\u679c\u6240\u6709\u5b50\u7cfb\u7edf\u4f7f\u7528\u76f8\u540c\u7684\u5185\u90e8\u57fa\u7840\u8bbe\u65bd\uff0c\u8fd9\u4e9b\u8d44\u6e90\u6295\u5165\u5c31\u90fd\u53ef\u4ee5\u8282\u7701\u4e0b\u6765\uff0c\u53e6\u5916\uff0c\u4f7f\u7528\u76f8\u540c\u5de5\u5177\u4e5f\u4f1a\u4f7f\u5f97\u8de8\u7ec4\u8de8\u9879\u76ee\u7684\u6c9f\u901a\u534f\u8c03\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u3002"),(0,n.kt)("h3",{id:"795-mlir-dialect"},"7.9.5 MLIR Dialect"),(0,n.kt)("h4",{id:"7951-\u57fa\u7840\u7ec4\u4ef6"},"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u57fa\u672c\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002 \u5728\u8fd9\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4e00\u7cfb\u5217\u4e92\u8865\u534f\u4f5c\u7684\u64cd\u4f5c\uff0c\u548c\u8fd9\u4e9b\u64cd\u4f5c\u6240\u9700\u7684\u7c7b\u578b (type) \u4ee5\u53ca\u5c5e\u6027 (attribute) \u7b49\u7b49\u3002 \u7279\u5b9a\u7684\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u53ea\u9700\u8981\u7ec4\u5408\u73b0\u6709\u7684 dialect\uff0c\u5e76\u52a0\u4ee5\u81ea\u5df1\u7684\u6269\u5c55\u6216\u8005\u5b9a\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5185\u5d4c\u7ed3\u6784\u7684\u64cd\u4f5c\uff08Operations carrying structures\uff09")),(0,n.kt)("p",null,"MLIR \u4e2d\u64cd\u4f5c\u7684\u4e00\u4e2a\u7a81\u51fa\u7279\u6027\u662f\u53ef\u4ee5\u901a\u8fc7",(0,n.kt)("em",{parentName:"p"},"region"),"[2]","\u6765\u5185\u5d4c (nest) \u7ed3\u6784 (structure)\u3002MLIR \u4e2d\u5f88\u591a\u53ef\u4ee5\u6dfb\u52a0\u8d1f\u8f7d\u64cd\u4f5c (payload op) \u7684\u7ed3\u6784\u5316\u64cd\u4f5c (structured op) \u90fd\u4f9d\u8d56\u4e8e\u8fd9\u79cd\u7279\u6027\u3002\u8fd9\u4e9b\u7ed3\u6784\u5316\u64cd\u4f5c\u672c\u8eab\u53ea\u5b9a\u4e49\u67d0\u79cd\u7ed3\u6784\u6027\u8bed\u4e49\uff0c\u6bd4\u5982\u63a7\u5236\u6d41 (control flow)\u3002\u5177\u4f53\u7684\u8ba1\u7b97\u6027\u8bed\u4e49\u5219\u6765\u81ea\u4e8e\u6dfb\u52a0\u7684\u8d1f\u8f7d\u64cd\u4f5c\u3002\u7ed3\u6784\u5316\u64cd\u4f5c\u4e0e\u8d1f\u8f7d\u64cd\u4f5c\u76f8\u4e92\u7ec4\u5408\u3001\u76f8\u4e92\u6269\u5c55\u3002\u4e00\u4e2a\u7a81\u51fa\u7684\u4f8b\u5b50\u662f linalg.generic op\uff1b\u5f53\u7136\u51fd\u6570 (function) \u4ee5\u53ca\u6a21\u5757 (module) \u5176\u5b9e\u90fd\u662f\u8fd9\u79cd\u7ed3\u6784\u5316\u64cd\u4f5c\u3002Region \u7ed9\u8d1f\u8f7d\u64cd\u4f5c\u8bbe\u7f6e\u4e86\u660e\u786e\u7684\u8fb9\u754c\uff0c\u8fd9\u6709\u52a9\u4e8e\u7b80\u5316\u4e2d\u95f4\u8868\u793a\u8f6c\u6362\u65f6\u6240\u9700\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee3\u8868\u62bd\u8c61\u5c42\u6b21\u7684\u7c7b\u578b\uff08Types signaling abstraction levels\uff09")),(0,n.kt)("p",null,"\u64cd\u4f5c\u5f52\u6839\u5230\u5e95\u53ea\u662f\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u503c (value) \u6240\u8fdb\u884c\u7684\u67d0\u79cd\u8ba1\u7b97 (computation)\u3002\u7c7b\u578b\u624d\u662f\u62bd\u8c61\u5c42\u6b21 (abstraction level) \u7684\u4ee3\u8868\u3002\u4e3e\u4e2a\u6817\u5b50\uff0c\u5f20\u91cf (tensor)\u3001buffer\u3001\u4ee5\u53ca\u6807\u91cf (scalar) \u90fd\u53ef\u4ee5\u652f\u6301\u52a0\u51cf\u4e58\u9664\u7b49\u5404\u79cd\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u5728\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u591a\u5c11\u533a\u522b\uff0c\u4f46\u5b83\u4eec\u660e\u663e\u5c5e\u4e8e\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002\u5f20\u91cf\u5b58\u5728\u4e8e\u673a\u5668\u5b66\u4e60\u6846\u67b6\u6216\u8005\u7f16\u7a0b\u6a21\u578b (programming model) \u8fd9\u4e00\u9ad8\u5c42\u62bd\u8c61\u3002Buffer \u5b58\u5728\u4e8e\u6267\u884c\u7cfb\u7edf (system) \u548c\u5185\u5b58\u4f53\u7cfb (memory hierarchy) \u8fd9\u4e00\u4e2d\u5c42\u62bd\u8c61\u3002\u6807\u91cf\u5b58\u5728\u4e8e\u6267\u884c\u82af\u7247 (chip) \u548c\u5bc4\u5b58\u5668 (register) \u8fd9\u4e00\u5e95\u5c42\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u53ef\u4ee5\u81ea\u7531\u5730\u5b9a\u4e49\u5404\u79cd\u7c7b\u578b\u3002 MLIR \u7684\u6838\u5fc3\u57fa\u7840\u8bbe\u65bd\u4f1a\u65e0\u5dee\u522b\u5730\u5bf9\u5f85\u4ee5\u53ca\u7528\u7edf\u4e00\u7684\u673a\u5236\u652f\u6301\u6765\u81ea\u4e0d\u540c dialect \u7684\u7c7b\u578b\u3002 \u6bd4\u5982\uff0c",(0,n.kt)("em",{parentName:"p"},"type conversion")," ","[3]","\u5c31\u662f\u901a\u7528\u7684\u8f6c\u6362\u7c7b\u578b\u7684\u673a\u5236\u3002 Dialect A \u53ef\u4ee5\u91cd\u7528\u6765\u81ea dialect B \u7684\u7c7b\u578b\uff0c\u4e5f\u53ef\u4ee5\u5bf9\u5176\u8fdb\u4e00\u6b65\u6269\u5c55\u548c\u7ec4\u5408\uff0c\u4f8b\u5982\u5c06\u57fa\u7840\u7c7b\u578b (primitive type) \u653e\u5165\u5bb9\u5668\u7c7b\u578b\u4e2d (container type)\u3002 ",(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e2a dialect \u4e5f\u53ef\u4ee5\u5b9a\u4e49\u89c4\u5219\u6765\u5b9e\u73b0\u81ea\u8eab\u7c7b\u578b\u548c\u5176\u4ed6 dialect \u7c7b\u578b\u7684\u76f8\u4e92\u8f6c\u6362\u3002 \u628a\u8fd9\u4e9b\u89c4\u5219\u52a0\u5165\u5230 type converter \u4e2d\u540e\uff0c\u6240\u6709\u7684\u89c4\u5219\u4f1a\u76f8\u4e92\u7ec4\u5408\uff0c\u7531\u6b64 type conversion \u673a\u5236\u4f1a\u81ea\u884c\u627e\u51fa\u8f6c\u6362\u901a\u8def\u6765\u5b9e\u73b0\u8f6c\u6362\u3002")," \u4e0d\u8fc7\u603b\u800c\u8a00\u4e4b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u76f8\u8f83\u4e8e\u64cd\u4f5c\u7684\u7ec4\u5408\u4e0e\u8f6c\u6362\uff0c\u7c7b\u578b\u7684\u7ec4\u5408\u4ee5\u53ca\u8f6c\u6362\u901a\u5e38\u6709\u66f4\u591a\u9650\u5236\u4e5f\u66f4\u52a0\u590d\u6742\uff0c\u6bd5\u7adf\u7c7b\u578b\u7684\u5339\u914d\u5960\u5b9a\u4e86\u64cd\u4f5c\u53ef\u4ee5\u8854\u63a5\u7684\u57fa\u7840\u3002")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u540c\u5efa\u6a21\u7c92\u5ea6\u7684Dialect\uff08Dialects as modeling granularity\uff09")),(0,n.kt)("p",null,"\u901a\u8fc7\u5b9a\u4e49\u548c\u7ec4\u7ec7\u64cd\u4f5c\u548c\u7c7b\u578b\uff0cdialect \u7ed9\u7f16\u8bd1\u5668\u63d0\u4f9b\u4e86\u7c97\u7c92\u5ea6\u9ad8\u5c42\u6b21\u7684\u5efa\u6a21\u65b9\u5f0f\u3002\u5982\u679c\u4e24\u4e2a dialect \u6240\u6d89\u53ca\u7684\u7c7b\u578b\u76f8\u540c\uff0c\u90a3\u4e48\u5b83\u4eec\u57fa\u672c\u5c5e\u4e8e\u7edf\u4e00\u62bd\u8c61\u5c42\u6b21\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u6d89\u53ca\u4e0d\u540c\u7c7b\u578b\u7684 dialect \u8fdb\u884c\u8f6c\u6362\u672c\u8d28\u4e0a\u5219\u662f\u8f6c\u6362\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u4e3a\u7b80\u5316\u5b9e\u73b0\uff0c\u6211\u4eec\u4e00\u822c",(0,n.kt)("strong",{parentName:"p"},"\u5c06\u9ad8\u5c42\u6b21 (high-level) \u62bd\u8c61\u9012\u964d (lower) \u5230\u4f4e\u5c42\u6b21 (low-level) \u62bd\u8c61\u3002\u9012\u964d\u7684\u8fc7\u7a0b\u901a\u5e38\u4f1a\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u7684\u95ee\u9898\u5206\u89e3 (decomposition) \u6216\u8005\u8d44\u6e90\u5206\u914d (resource assignment) \u6765\u9010\u6e10\u8d34\u8fd1\u5e95\u5c42\u786c\u4ef6"),"\u3002\u524d\u8005\u7684\u4f8b\u5b50\u6709 tiling, vectorization \u7b49\u7b49\uff1b\u540e\u8005\u7684\u4f8b\u5b50\u6709 bufferization, \u5bc4\u5b58\u5668\u5206\u914d (register allocation) \u7b49\u7b49\u3002\u5373\u4fbf\u5982\u6b64\uff0c\u9012\u964d\u4f9d\u7136\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u6709\u4e0d\u540c\u7684\u76ee\u7684\u4ee5\u53ca\u5bf9\u6b63\u786e\u6027\u548c\u6027\u80fd\u7684\u7406\u89e3\u3002\u6bd4\u5982\u7f16\u7a0b\u6a21\u578b\u5c42\u8003\u8651\u7684\u662f\u4ee3\u7801\u7684\u8868\u793a\u80fd\u529b\u4ee5\u53ca\u7b80\u6d01\u6027\uff0c\u5f88\u5c11\u6d89\u53ca\u5177\u4f53\u786c\u4ef6\u7279\u6027\uff1b\u800c\u786c\u4ef6\u5c42\u8003\u8651\u7684\u662f\u8d44\u6e90\u7684\u6700\u4f73\u4f7f\u7528\uff0c\u5f88\u5c11\u8003\u8651\u6613\u4e8e\u7f16\u7a0b\u3002\u56e0\u6b64\uff0c\u5728\u8bf8\u591a MLIR \u673a\u5236\u4e2d\uff0c",(0,n.kt)("em",{parentName:"p"},"dialect conversion")," ","[4]","\u53ef\u80fd\u662f\u6700\u590d\u6742\u7684\u5c31\u5e76\u4e0d\u5947\u602a\u4e86\u3002"),(0,n.kt)("h4",{id:"7952-dialect\u4f53\u7cfb"},"7.9.5.2 Dialect\u4f53\u7cfb"),(0,n.kt)("p",null,"\u4ee5\u64cd\u4f5c\u548c\u7c7b\u578b\u7684\u53ef\u7ec4\u5408\u6027\u4ee5\u53ca\u53ef\u6269\u5c55\u6027\u4e3a\u57fa\u7840\uff0cdialect\u53ef\u4ee5\u4f5c\u4e3a\u7ec4\u5408\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u9ad8\u5c42\u6b21\u57fa\u7840\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"7953-operations"},"7.9.5.3 Operations"),(0,n.kt)("p",null,"\u4e00\u4e2aoperation\u7c7b\u7ee7\u627f\u4e8emlir::Op\u7c7b\uff0c\u5176\u4e2dmlir::Op\u7c7b\u643a\u5e26\u4e00\u4e9b\u53ef\u9009\u7684traits\u6765\u81ea\u5b9a\u4e49\u4e00\u4e9b\u884c\u4e3a\uff0cTraits\u63d0\u4f9b\u4e00\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u5bf9\u4e00\u4e2aOperation\u6ce8\u5165\u4e00\u4e9b\u884c\u4e3a\uff0c\u4f8b\u5982\u989d\u5916\u7684accessors\u3001verification\u7b49\u7b49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"class ConstantOp : public mlir::Op<\n /// `mlir::Op` is a CRTP class, meaning that we provide the\n /// derived class as a template parameter.\n ConstantOp,\n /// The ConstantOp takes zero input operands.\n mlir::OpTrait::ZeroOperands,\n /// The ConstantOp returns a single result.\n mlir::OpTrait::OneResult,\n /// We also provide a utility `getType` accessor that\n /// returns the TensorType of the single result.\n mlir::OpTraits::OneTypedResult::Impl> {\n\n public:\n /// Inherit the constructors from the base Op class.\n using Op::Op;\n\n /// Provide the unique name for this operation. MLIR will use this to register\n /// the operation and uniquely identify it throughout the system. The name\n /// provided here must be prefixed by the parent dialect namespace followed\n /// by a `.`.\n static llvm::StringRef getOperationName() { return \"toy.constant\"; }\n\n /// Return the value of the constant by fetching it from the attribute.\n mlir::DenseElementsAttr getValue();\n\n /// Operations may provide additional verification beyond what the attached\n /// traits provide. Here we will ensure that the specific invariants of the\n /// constant operation are upheld, for example the result type must be\n /// of TensorType and matches the type of the constant `value`.\n LogicalResult verifyInvariants();\n\n /// Provide an interface to build this operation from a set of input values.\n /// This interface is used by the `builder` classes to allow for easily\n /// generating instances of this operation:\n /// mlir::OpBuilder::create(...)\n /// This method populates the given `state` that MLIR uses to create\n /// operations. This state is a collection of all of the discrete elements\n /// that an operation may contain.\n /// Build a constant with the given return type and `value` attribute.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::Type result, mlir::DenseElementsAttr value);\n /// Build a constant and reuse the type from the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::DenseElementsAttr value);\n /// Build a constant by broadcasting the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n double value);\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u4e2aoperation\u53ef\u4ee5\u6ce8\u518c\u7ed9ToyDialect\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyDialect::initialize() {\n addOperations();\n}\n")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u5b9a\u4e49\u4e86\u4e00\u4e2aoperation\uff0c\u90a3\u4e48\u600e\u6837\u83b7\u53d6\u5b83\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u8f6c\u6362\u5462\uff1f"),(0,n.kt)("p",null,"\u5728MLIR\u4e2d\u6709\u4e24\u6839\u8ddfoperation\u76f8\u5173\u7684\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Operation"),"\uff1a\u5b83\u7528\u4e8e\u901a\u7528\u5730model all operations\uff0c\u5b83\u662f\u4e0d\u900f\u660e\u7684\uff0c\u610f\u5473\u7740\u5b83\u4e0d\u4f1a\u63cf\u8ff0\u4efb\u4f55operation\u7684\u5c5e\u6027\u6216\u8005\u7c7b\u578b\uff1b\u53cd\u4e4b\uff0c\u5b83\u63d0\u4f9b\u5bf9\u4e00\u4e2aoperation\u5b9e\u4f8b\u7684\u901a\u7528API\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"OP"),"\uff1a\u6bcf\u4e2a\u7279\u5b9a\u7c7b\u578b\u7684operation\u7ee7\u627f\u81eaOp\uff0c\u8fd9\u4e9b\u7ee7\u627f\u81eaOp\u7684\u7c7b\u50cf\u4e00\u4e2a\u6307\u5411\u4e00\u4e2aOperation*\u7684\u667a\u80fd\u6307\u9488\uff0c\u63d0\u4f9b\u4e00\u4e9b\u7279\u5b9a\u4e8e\u67d0\u4e2a\u64cd\u4f5c\u7684accessor\u65b9\u6cd5\u3001\u7c7b\u578b\u68c0\u67e5\u7b49\u7b49\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u6211\u4eec\u7ed9Toy\u5b9a\u4e49\u4e00\u4e2a operation\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5728\u5b9a\u4e49\u4e00\u7ec4\u5e72\u51c0\u3001\u5305\u542b\u4e00\u4e9b\u6709\u7528\u8bed\u4e49\u7684\u63a5\u53e3\uff0c\u901a\u8fc7\u8fd9\u4e9b\u63a5\u53e3\u53ef\u4ee5\u6784\u5efaOperation\u5e76\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\uff08interfaing\uff09\u3002\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u7ee7\u627f\u81eaOp\u7684\u7c7b\u4e0d\u5305\u542b\u4efb\u4f55\u7c7b\u5b57\u6bb5\uff08class field\uff09\uff0c\u6240\u6709\u56f4\u7ed5\u6574\u4e2aoperation\u7684\u6570\u636e\u90fd\u5b58\u50a8\u5728\u5f15\u7528 \u7684Operation\u4e2d\u3002\u8fd9\u5e26\u6765\u7684\u5176\u4e2d\u4e00\u4e2a\u8981\u6c42\u662f\uff0c\u6240\u6709\u7684Op\u7c7b\u7684\u4f20\u503c\u90fd\u5e94\u8be5\u662f\u503c\u7c7b\u578b\uff0c\u800c\u4e0d\u80fd \u662f\u6307\u9488\u6216\u8005\u5f15\u7528\u7c7b\u578b\u3002")),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u901a\u7528\u7684Operation*\u5b9e\u4f8b\uff0c\u6211\u4eec\u603b\u662f\u53ef\u4ee5\u83b7\u53d6\u5230\u4e00\u4e2a\u7279\u5b9a\u7684Op\u5b9e\u4f8b\uff0c\u53ef\u4ee5\u4f7f\u7528LLVM\u63d0\u4f9b\u7684\u8f6c\u6362\u65b9\u6cd5\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'void processConstantOp(mlir::Operation *operation) {\n ConstantOp op = llvm::dyn_cast(operation);\n\n // This operation is not an instance of `ConstantOp`.\n if (!op)\n return;\n\n // Get the internal operation instance wrapped by the smart pointer.\n mlir::Operation *internalOperation = op.getOperation();\n assert(internalOperation == operation &&\n "these operation instances are the same");\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operation Definition Specification\uff08ODS\uff09")),(0,n.kt)("p",null,"\u4f7f\u7528TableGen\u7684\u65b9\u5f0f\u5b9a\u4e49"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Base class for toy dialect operations. This operation inherits from the base\n// `Op` class in OpBase.td, and provides:\n// * The parent dialect of the operation.\n// * The mnemonic for the operation, or the name without the dialect prefix.\n// * A list of traits for the operation.\nclass Toy_Op traits = []> :\n Op;\n")),(0,n.kt)("p",null,"\u7136\u540e\u5b9a\u4e49operation\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def ConstantOp : Toy_Op<"constant"> {\n // Provide a summary and description for this operation. This can be used to\n // auto-generate documentation of the operations within our dialect.\n let summary = "constant operation";\n let description = [{\n Constant operation turns a literal into an SSA value. The data is attached\n to the operation as an attribute. For example:\n\n %0 = "toy.constant"()\n { value = dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]> : tensor<2x3xf64> }\n : () -> tensor<2x3xf64>\n }];\n\n // The constant operation takes an attribute as the only input.\n // `F64ElementsAttr` corresponds to a 64-bit floating-point ElementsAttr.\n let arguments = (ins F64ElementsAttr:$value);\n\n // The generic call operation returns a single value of TensorType.\n // F64Tensor corresponds to a 64-bit floating-point TensorType.\n let results = (outs F64Tensor);\n\n // Add additional verification logic to the constant operation. Setting this bit\n // to `1` will generate a `::mlir::LogicalResult verify()` declaration on the\n // operation class that is called after ODS constructs have been verified, for\n // example the types of arguments and results. We implement additional verification\n // in the definition of this `verify` method in the C++ source file. \n let hasVerifier = 1;\n \n \n // Add custom build methods for the constant operation. These methods populate\n // the `state` that MLIR uses to create operations, i.e. these are used when\n // using `builder.create(...)`.\n let builders = [\n // Build a constant with a given constant tensor value.\n OpBuilder<(ins "DenseElementsAttr":$value), [{\n // Call into an autogenerated `build` method.\n build(builder, result, value.getType(), value);\n }]>,\n\n // Build a constant with a given constant floating-point value. This builder\n // creates a declaration for `ConstantOp::build` with the given parameters.\n OpBuilder<(ins "double":$value)>\n ];\n}\n\n')),(0,n.kt)("h3",{id:"796-analysis-and-transformation"},"7.9.6 Analysis and Transformation"),(0,n.kt)("p",null,"\u672c\u8282\u4ecb\u7ecd\u600e\u6837\u5229\u7528Toy Dialect\u53ca\u5176\u9ad8\u5c42\u6b21\u8bed\u4e49\u6765\u6267\u884clocal pattern-match transformations\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5728LLVM\u4e2d\u4f1a\u5f88\u56f0\u96be\u3002"),(0,n.kt)("p",null,"\u6709\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u7528\u4e8e\u5b9e\u73b0pattern-match transformation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"imperative C++ pattern-match and rewrite"),(0,n.kt)("li",{parentName:"ul"},"declarative\uff0crule-based pattern-match and rewrite using table-driven Declarative Rewrite Rules\uff08DDR\uff09\uff0c\u6b64\u65f6operation\u5fc5\u987b\u662f\u4f7f\u7528ODS\u5b9a\u4e49\u7684")),(0,n.kt)("h4",{id:"7961-c-style--pattern-match-and-rewrite"},"7.9.6.1 C++ style pattern-match and rewrite"),(0,n.kt)("p",null,"\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u4f18\u5316\u8f6c\u7f6e\u7684\u8f6c\u7f6e\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u53ef\u4ee5\u76f4\u63a5\u8fd4\u56dex\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u4efb\u4f55\u8f6c\u7f6e\u64cd\u4f5c\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"def transpose_transpose(x) {\n return transpose(transpose(x));\n}\n")),(0,n.kt)("p",null,"\u6b63\u5e38\u7684IR\u662f\u8fd9\u6837\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n %0 = toy.transpose(%arg0 : tensor<*xf64>) to tensor<*xf64>\n %1 = toy.transpose(%0 : tensor<*xf64>) to tensor<*xf64>\n toy.return %1 : tensor<*xf64>\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u60c5\u51b5\u5bf9\u4e8eLLVM\u6765\u8bf4\u662f\u5f88\u96be\u7684\uff0c\u4f8b\u5982Clang\u4e0d\u80fd\u4f18\u5316\u6389\u4e34\u65f6\u6570\u7ec4\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u8f6c\u7f6e\u8ba1\u7b97\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c++"},"#define N 100\n#define M 100\n\nvoid sink(void *);\nvoid double_transpose(int A[N][M]) {\n int B[M][N];\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n B[j][i] = A[i][j];\n }\n }\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n A[i][j] = B[j][i];\n }\n }\n sink(A);\n}\n")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u5230\u5728IR\u4e2d\u5339\u914d\u4e00\u4e2atree-like\u7684\u6a21\u5f0f\uff0c\u5e76\u4e14\u5c06\u5176\u66ff\u6362\u4e3a\u4e00\u7ec4\u65b0\u7684operation\u3002we can plug into the MLIR ",(0,n.kt)("inlineCode",{parentName:"p"},"Canonicalizer")," pass by implementing a ",(0,n.kt)("inlineCode",{parentName:"p"},"RewritePattern"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'/// Fold transpose(transpose(x)) -> x\nstruct SimplifyRedundantTranspose : public mlir::OpRewritePattern {\n /// We register this pattern to match every toy.transpose in the IR.\n /// The "benefit" is used by the framework to order the patterns and process\n /// them in order of profitability.\n SimplifyRedundantTranspose(mlir::MLIRContext *context)\n : OpRewritePattern(context, /*benefit=*/1) {}\n\n /// This method is attempting to match a pattern and rewrite it. The rewriter\n /// argument is the orchestrator of the sequence of rewrites. It is expected\n /// to interact with it to perform any changes to the IR from here.\n mlir::LogicalResult\n matchAndRewrite(TransposeOp op,\n mlir::PatternRewriter &rewriter) const override {\n // Look through the input of the current transpose.\n mlir::Value transposeInput = op.getOperand();\n TransposeOp transposeInputOp = transposeInput.getDefiningOp();\n\n // Input defined by another transpose? If not, no match.\n if (!transposeInputOp)\n return failure();\n\n // Otherwise, we have a redundant transpose. Use the rewriter.\n rewriter.replaceOp(op, {transposeInputOp.getOperand()});\n return success();\n }\n};\n')),(0,n.kt)("p",null,"transformation\u4e3b\u8981\u5728operation canonicalization pass\u88ab\u6267\u884c\uff0ccanonicalization\u662fMLIR\u7684\u4e00\u4e2a\u91cd\u8981\u9636\u6bb5\uff0c\u80fd\u591f\u5bf9\u4ee3\u7801\u7684\u597d\u574f\u8fdb\u884c\u4e00\u4e9b\u63a8\u7406\uff0c\u6267\u884creliable compiler transformation\u3002\u4e3a\u4e86\u4fdd\u8bc1canonicalization\u80fd\u591f\u5e94\u7528\u6211\u4eec\u7684new transform\uff0c\u9700\u8981\u8bbe\u7f6ehasCanonicalizer=1\uff0c\u5e76\u4e14\u5c06\u6211\u4eec\u7684pattern\u6ce8\u518c\u5230canonicalization\u6846\u67b6\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Register our patterns for rewrite by the Canonicalization framework.\nvoid TransposeOp::getCanonicalizationPatterns(\n RewritePatternSet &results, MLIRContext *context) {\n results.add(context);\n}\n")),(0,n.kt)("p",null,"\u540c\u65f6\u6211\u4eec\u9700\u8981\u7ed9\u7f16\u8bd1\u5668\u589e\u52a0\u4e00\u4e2aoptimization pipeline\uff0cMLIR\u901a\u8fc7 \u4e00\u4e2aPassManager\u7ba1\u7406 \uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"}," mlir::PassManager pm(module.getContext());\n pm.addNestedPass(mlir::createCanonicalizerPass());\n")),(0,n.kt)("p",null,"\u6700\u7ec8\u4f18\u5316\u7684IR\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n toy.return %arg0 : tensor<*xf64>\n}\n")),(0,n.kt)("h4",{id:"7962-\u603b\u7ed3"},"7.9.6.2 \u603b\u7ed3"),(0,n.kt)("p",null,"\u5728\u8fd9\u91cc\uff0c\u6574\u4e2a\u8fc7\u7a0b\u4ee5Operation\u4e3a\u4e2d\u5fc3\uff0cOperation\u662fIR\u7684\u57fa\u672c\u5143\u7d20\uff0c\u5176\u5305\u542b\u7684\u662f\u4ee3\u7801\u7684\u57fa\u672c\u7ec4\u7ec7\u5143\u7d20\uff0c\u8fd9\u91cc\u901a\u8fc7\u5bf9\u4ee3\u7801\u7684\u7ed3\u6784\u8fdb\u884c\u5206\u79bb\u6765\u8fdb\u884c\u4f18\u5316\uff0c\u800c\u4f18\u5316\u6216\u8005transformation\u7684\u903b\u8f91\uff0c\u5176\u5b9e\u4e5f\u5c31\u662f\u5bf9Operation\u8fdb\u884c\u6539\u5199\uff0c\u5b83\u901a\u8fc7\u5bf9Operation\u8fdb\u884c\uff08\u66b4\u529b\uff09\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u8bd1\u5668\u5bf9AST\u7684\u5206\u6790\u8fc7\u7a0b\u662f\u7c7b\u4f3c\u7684\uff0c\u53ea\u4e0d\u8fc7MLIR\u4f7f\u7528\u4e00\u79cd\u7279\u5b9a\u7684\u7ed3\u6784\u6765\u8868\u793a\u4efb\u610f\u7684IR\uff0c\u8fd9\u4e2aIR\u53ef\u6709\u7528\u6237\u81ea\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u56fa\u5b9a\u7684IR\u7ed3\u6784\uff0c\u7136\u540e\u7531\u4e8e\u5404\u4e2aDialect\u4e86\u89e3\u5176\u4e2d\u7684\u6784\u6210\uff0c\u4f8b\u5982Operation\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u7279\u5b9a\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u4fee\u6539\u7684\u5176\u5b9e\u662fMLIR\u7684\u7ed3\u6784\uff0c\u8fd9\u79cd\u4fee\u6539\u662f\u7531\u7279\u5b9a\u7684Dialect\u5b9e\u4f8b\u8fdb\u884c\u6267\u884c\u7684\u3002MLIR\u7cfb\u7edf\u8bbe\u7f6e\u4e00\u4e2a\u6ce8\u518c\u7ba1\u7406\u7684\u673a\u5236\uff0c\u8ba9\u5404\u4e2aDialect\u8fdb\u884c\u81ea\u5b9a\u4e49\u5904\u7406\u3002"),(0,n.kt)("p",null,"MLIR\u4e3a\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\uff0c\u5b83\u7684Operation\u5b9e\u9645\u4e0a\u662f\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u8fd0\u884c\u65f6\u6267\u884c\u7684\u4ee3\u7801\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u6ca1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u7ed3\u6784\uff0c\u8fd9\u4e2a\u7ed3\u6784\u88ab\u8868\u8ff0\u4e3a\u4e00\u79cd\u683c\u5f0f\uff0c\u5b83\u53ef\u4ee5\u662fin memory\u7684\uff0c\u4e5f\u53ef\u4ee5\u662f\u6587\u672c\u7684\uff0c\u6240\u6709\u90a3\u4e9b\u5173\u4e8e\u5206\u6790\u3001\u4f18\u5316\u3001\u53d8\u6362\u7684\u64cd\u4f5c\u5176\u5b9e\u4e5f\u662f\u5728\u4fee\u6539\u8fd9\u4e2aIR\u7ed3\u6784\uff0c\u5f53\u7136 \u4e3b\u8981\u901a\u8fc7Operation\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u662fLLVM IR\u4e2d\u7684\u5355\u6761\u6307\u4ee4\u4e3a\u5355\u4f4d\u3002\u7531\u4e8eDialect\u6216\u8005Operation\u5305\u542b\u66f4\u9ad8\u5c42\u7684\u62bd\u8c61\u4fe1\u606f\uff0c\u56e0\u6b64\u4f18\u5316\u7684\u7a7a\u95f4\u66f4\u5927\u3002"),(0,n.kt)("h3",{id:"797-generic-transformation-with-interfaces"},"7.9.7 Generic Transformation with Interfaces"),(0,n.kt)("h3",{id:"798-lowering"},"7.9.8 Lowering"),(0,n.kt)("p",null,"Tensors represent an abstract value-typed sequence of data, meaning that they don\u2019t live in any memory. MemRefs, on the other hand, represent lower level buffer access, as they are concrete references to a region of memory."),(0,n.kt)("h4",{id:"7981-dialect-conversions"},"7.9.8.1 Dialect Conversions"),(0,n.kt)("p",null,"\u9700\u8981\u81f3\u5c11\u4e24\u4e2a\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#conversion-target"},"Conversion Target"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the formal specification of what operations or dialects are legal for the conversion. Operations that aren\u2019t legal will require rewrite patterns to perform ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/getting_started/Glossary/#legalization"},"legalization"),"."))),(0,n.kt)("li",{parentName:"ul"},"A set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#rewrite-pattern-specification"},"Rewrite Patterns"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/Tutorials/QuickstartRewrites/"},"patterns")," used to convert ",(0,n.kt)("em",{parentName:"li"},"illegal")," operations into a set of zero or more ",(0,n.kt)("em",{parentName:"li"},"legal")," ones."))),(0,n.kt)("li",{parentName:"ul"},"Optionally, a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#type-conversion"},"Type Converter"),".",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"If provided, this is used to convert the types of block arguments. ")))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Target")),(0,n.kt)("p",null,"\u8fd9\u91cc\u6211\u4eec\u5c06\u8ba1\u7b97\u6bd4\u8f83\u91cd\u7684Toy\u64cd\u4f5c\u8f6c\u5316\u4e3a\u6765\u81ea\u591a\u4e2adialect\u4e2d\u64cd\u4f5c\u7684\u96c6\u5408\uff1aAffine\u3001Arith\u3001Func\u4ee5\u53caMemRef\uff0c\u4ee5\u4fbf\u8fdb\u884c\u8fdb\u4e00\u6b65\u4f18\u5316\uff0c\u9996\u5148\u5b9a\u4e49conversion target\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n // The first thing to define is the conversion target. This will define the\n // final target for this lowering.\n mlir::ConversionTarget target(getContext());\n\n // We define the specific operations, or dialects, that are legal targets for\n // this lowering. In our case, we are lowering to a combination of the\n // `Affine`, `Arith`, `Func`, and `MemRef` dialects.\n target.addLegalDialect();\n\n // We also define the Toy dialect as Illegal so that the conversion will fail\n // if any of these operations are *not* converted. Given that we actually want\n // a partial lowering, we explicitly mark the Toy operations that don't want\n // to lower, `toy.print`, as *legal*. `toy.print` will still need its operands\n // to be updated though (as we convert from TensorType to MemRefType), so we\n // only treat it as `legal` if its operands are legal.\n target.addIllegalDialect();\n target.addDynamicallyLegalOp([](toy::PrintOp op) {\n return llvm::none_of(op->getOperandTypes(),\n [](Type type) { return type.isa(); });\n });\n ...\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Patterns")),(0,n.kt)("p",null,"\u8ddfCanonicalization\u6846\u67b6\u6709\u70b9\u7c7b\u4f3c\uff0cDialectConversion\u4e5f\u4f7f\u7528RewritePatterns\u6765\u6267\u884c\u8f6c\u5316\u903b\u8f91\u3002\u53ef\u4ee5\u4f7f\u7528\u4e24\u79cdpattern\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"RewritePattern"),(0,n.kt)("li",{parentName:"ul"},"ConversionPatterns\uff0c\u4e3b\u8981\u7684\u533a\u522b\u662f\u63a5\u53d7\u4e00\u4e2a\u989d\u5916\u7684\u53c2\u6570\uff1aoperands\uff0c\u8fd9\u4e9boperands\u53ef\u80fd\u662f\u4e4b\u524d\u88ab\u79fb\u9664\u6216\u8005\u88ab\u91cd\u65b0\u6620\u5c04\u7684\u64cd\u4f5c\u6570\uff0c\u56e0\u4e3a\u4e00\u4e9b\u64cd\u4f5c\u9700\u8981\u5bf9\u65e7\u7684\u4fe1\u606f\u8fdb\u884c\u5339\u914d")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"/// Lower the `toy.transpose` operation to an affine loop nest.\nstruct TransposeOpLowering : public mlir::ConversionPattern {\n TransposeOpLowering(mlir::MLIRContext *ctx)\n : mlir::ConversionPattern(TransposeOp::getOperationName(), 1, ctx) {}\n\n /// Match and rewrite the given `toy.transpose` operation, with the given\n /// operands that have been remapped from `tensor<...>` to `memref<...>`.\n mlir::LogicalResult\n matchAndRewrite(mlir::Operation *op, ArrayRef operands,\n mlir::ConversionPatternRewriter &rewriter) const final {\n auto loc = op->getLoc();\n\n // Call to a helper function that will lower the current operation to a set\n // of affine loops. We provide a functor that operates on the remapped\n // operands, as well as the loop induction variables for the inner most\n // loop body.\n lowerOpToLoops(\n op, operands, rewriter,\n [loc](mlir::PatternRewriter &rewriter,\n ArrayRef memRefOperands,\n ArrayRef loopIvs) {\n // Generate an adaptor for the remapped operands of the TransposeOp.\n // This allows for using the nice named accessors that are generated\n // by the ODS. This adaptor is automatically provided by the ODS\n // framework.\n TransposeOpAdaptor transposeAdaptor(memRefOperands);\n mlir::Value input = transposeAdaptor.input();\n\n // Transpose the elements by generating a load from the reverse\n // indices.\n SmallVector reverseIvs(llvm::reverse(loopIvs));\n return rewriter.create(loc, input, reverseIvs);\n });\n return success();\n }\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u5c06pattern\u6dfb\u52a0\u5230lowering process\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n ...\n\n // Now that the conversion target has been defined, we just need to provide\n // the set of patterns that will lower the Toy operations.\n mlir::RewritePatternSet patterns(&getContext());\n patterns.add<..., TransposeOpLowering>(&getContext());\n\n // With the target and rewrite patterns defined, we can now attempt the\n // conversion. The conversion will signal failure if any of our *illegal*\n // operations were not converted successfully.\n if (mlir::failed(mlir::applyPartialConversion(getOperation(), target, patterns)))\n signalPassFailure();\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5b9e\u4f8b")),(0,n.kt)("p",null,"\u4ee5\u4e0b\u7684IR\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @main() {\n %0 = toy.constant dense<[[1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]]> : tensor<2x3xf64>\n %2 = toy.transpose(%0 : tensor<2x3xf64>) to tensor<3x2xf64>\n %3 = toy.mul %2, %2 : tensor<3x2xf64>\n toy.print %3 : tensor<3x2xf64>\n toy.return\n}\n")),(0,n.kt)("p",null,"\u88ab\u8f6c\u6362\u4e3a\uff08\u5176\u4e2d\u5305\u542b\u4e00\u4e9bAffine\u4f18\u5316\uff09\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"func.func @main() {\n %cst = arith.constant 1.000000e+00 : f64\n %cst_0 = arith.constant 2.000000e+00 : f64\n %cst_1 = arith.constant 3.000000e+00 : f64\n %cst_2 = arith.constant 4.000000e+00 : f64\n %cst_3 = arith.constant 5.000000e+00 : f64\n %cst_4 = arith.constant 6.000000e+00 : f64\n\n // Allocating buffers for the inputs and outputs.\n %0 = memref.alloc() : memref<3x2xf64>\n %1 = memref.alloc() : memref<2x3xf64>\n\n // Initialize the input buffer with the constant values.\n affine.store %cst, %1[0, 0] : memref<2x3xf64>\n affine.store %cst_0, %1[0, 1] : memref<2x3xf64>\n affine.store %cst_1, %1[0, 2] : memref<2x3xf64>\n affine.store %cst_2, %1[1, 0] : memref<2x3xf64>\n affine.store %cst_3, %1[1, 1] : memref<2x3xf64>\n affine.store %cst_4, %1[1, 2] : memref<2x3xf64>\n\n affine.for %arg0 = 0 to 3 {\n affine.for %arg1 = 0 to 2 {\n // Load the transpose value from the input buffer.\n %2 = affine.load %1[%arg1, %arg0] : memref<2x3xf64>\n\n // Multiply and store into the output buffer.\n %3 = arith.mulf %2, %2 : f64\n affine.store %3, %0[%arg0, %arg1] : memref<3x2xf64>\n }\n }\n\n // Print the value held by the buffer.\n toy.print %0 : memref<3x2xf64>\n memref.dealloc %1 : memref<2x3xf64>\n memref.dealloc %0 : memref<3x2xf64>\n return\n}\n")),(0,n.kt)("h3",{id:"799-lowering-to-llvm"},"7.9.9 Lowering to LLVM"),(0,n.kt)("h3",{id:"7910-mlir-language"},"7.9.10 MLIR Language"),(0,n.kt)("p",null,"MLIR\u662f\u57fa\u4e8egraph-like\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"nodes\uff0c\u79f0\u4e3aOperations"),(0,n.kt)("li",{parentName:"ul"},"edges\uff0c\u79f0\u4e3aValues")),(0,n.kt)("p",null,"\u6bcf\u4e2aValue\u662f\u4e00\u4e2aOperation\u6216\u8005BLock\u7684\u8fd4\u56de\u503c\u53c2\u6570\uff0c\u5176\u4e2dValue Type\u4f7f\u7528\u7c7b\u578b\u7cfb\u7edf\u8fdb\u884c\u5b9a\u4e49\u3002Operation\u5305\u542b Region\uff0cRegion\u5305\u542bBlock\uff0cBlock\u53c8\u5305\u542bOperation\uff0c\u5f62\u6210\u5d4c\u5957\u7ed3\u6784\uff0c\u5176\u4e2d\u7684\u96c6\u5408\u7684\u987a\u5e8f\u7531\u5176\u7ed3\u6784\u51b3\u5b9a\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u987a\u5e8f\u4e0d\u4e00\u5b9a\u6709\u8bed\u4e49\u4e0a\u7684\u610f\u4e49\u3002"),(0,n.kt)("p",null,"Operation\u53ef\u4ee5\u8868\u8ff0\u8bb8\u591a\u4e0d\u540c\u7684\u6982\u5ff5\uff0c\u4ece\u9ad8\u62bd\u8c61\u5c42\u7ea7\u7684\u6982\u5ff5\u5982\u51fd\u6570\u5b9a\u4e49\u3001\u51fd\u6570\u8c03\u7528\u3001buffer\u5206\u914d\u7b49\u7b49\uff0c\u5230\u4f4e\u5c42\u6b21\u7684\u8ddf\u6570\u5b66\u3001\u6307\u4ee4\u3001\u5bc4\u5b58\u5668\u76f8\u5173\u7684\u6982\u5ff5\u7b49\u7b49\u3002\u8fd9\u79cd\u4e0d\u540c\u7684\u6982\u5ff5\u90fd\u53ef\u4ee5\u4f7f\u7528MLIR\u4e2d\u7684operation\u8868\u793a\uff0c\u4f7f\u5f97MLIR\u53ef\u4ee5\u88ab\u4efb\u610f\u6269\u5c55\u3002"),(0,n.kt)("p",null,"MLIR\u540c\u65f6\u8fd8\u63d0\u4f9b\u4e00\u4e2a\u53ef\u6269\u5c55\u7684\u6846\u67b6\u7528\u4e8e\u5b9e\u73b0operation\u7684\u53d8\u6362\uff0c\u8fd9\u4f7f\u7528\u7f16\u8bd1\u5668\u4e2d\u5e38\u7528\u7684Pass\u7684\u6982\u5ff5\u5b9e\u73b0\uff0c\u5728\u4efb\u610f\u7684operation\u96c6\u5408\u4e0a\u5b9e\u73b0\u4efb\u610f\u7684pass\u5bfc\u81f4\u4f38\u7f29\u6027\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u4e2aTransformation\u5fc5\u987b\u8003\u8651\u6bcf\u4e2aoperation\u7684\u8bed\u4e49\u3002MLIR\u901a\u8fc7\u4f7f\u7528Traits\u548cInterfaces\u6765\u62bd\u8c61\u5730\u63cf\u8ff0operation semantics\u6765\u514b\u670d\u8fd9\u4e2a\u95ee\u9898\uff0c\u4f7f\u5f97Transformation\u5728operation\u4e0a\u7684\u64cd\u4f5c\u662f\u66f4\u52a0\u901a\u7528\u7684\u3002\u5176\u5185\u90e8\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u7b5b\u9009\u3002"),(0,n.kt)("h4",{id:"79101-dialects"},"7.9.10.1 Dialects"),(0,n.kt)("p",null,"Dialects are the mechanism by which to engage with and extend the MLIR ecosystem. They allow for defining new ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#operations"},"operations"),", as well as ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"attributes")," and ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#type-system"},"types"),". Each dialect is given a unique ",(0,n.kt)("inlineCode",{parentName:"p"},"namespace")," that is prefixed to each defined attribute/operation/type. For example, the ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/Dialects/Affine/"},"Affine dialect")," defines the namespace: ",(0,n.kt)("inlineCode",{parentName:"p"},"affine"),"."),(0,n.kt)("p",null,"MLIR allows for multiple dialects, even those outside of the main tree, to co-exist together within one module. Dialects are produced and consumed by certain passes. MLIR provides a ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/DialectConversion/"},"framework")," to convert between, and within, different dialects."),(0,n.kt)("h3",{id:"7911-pattern-rewriting"},"7.9.11 Pattern Rewriting"),(0,n.kt)("p",null,"This document details the design and API of the pattern rewriting infrastructure present in MLIR, a general DAG-to-DAG transformation framework. This framework is widely used throughout MLIR for\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"canonicalization, "),(0,n.kt)("li",{parentName:"ul"},"conversion, and "),(0,n.kt)("li",{parentName:"ul"},"general transformation.")),(0,n.kt)("h2",{id:"710-ai"},"7.10 AI"),(0,n.kt)("h3",{id:"7101-apple-shortcuts"},"7.10.1 Apple Shortcuts"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"shortcuts",src:l(7652).Z,width:"2126",height:"982"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u5feb\u6377\u6307\u4ee4\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u5feb\u6377\u6307\u4ee4"),"\u53ef\u8ba9\u4f60\u4f7f\u7528 App \u5feb\u901f\u5b8c\u6210\u4efb\u52a1\uff0c\u53ea\u9700\u8f7b\u70b9\u4e00\u4e0b\u6216\u8be2\u95ee Siri \u5373\u53ef\u3002\u5feb\u6377\u6307\u4ee4\u53ef\u4ee5\u81ea\u52a8\u5316\u5404\u79cd\u4efb\u52a1\uff0c\u4f8b\u5982\uff0c\u83b7\u53d6\u524d\u5f80\u201c\u65e5\u5386\u201d\u4e0a\u4e0b\u4e00\u4e2a\u65e5\u7a0b\u7684\u8def\u7ebf\u3001\u5c06\u6587\u672c\u4ece\u4e00\u4e2a App \u79fb\u5230\u53e6\u4e00\u4e2a App\u3001\u751f\u6210\u652f\u51fa\u62a5\u544a\u7b49\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4f60\u4f7f\u7528 Apple \u8bbe\u5907\u7684\u65b9\u5f0f\uff08App \u4f7f\u7528\u4ee5\u53ca\u6d4f\u89c8\u5668\u3001\u7535\u5b50\u90ae\u4ef6\u548c\u4fe1\u606f\u5386\u53f2\u8bb0\u5f55\uff09\uff0cSiri \u4f1a\u5efa\u8bae\u7b80\u5355\u5b9e\u7528\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u5feb\u901f\u8f7b\u70b9\u5373\u53ef\u8fd0\u884c\u3002\u521b\u5efa\u5feb\u6377\u6307\u4ee4\u540e\uff0c\u4f60\u53ef\u4ee5\u6fc0\u6d3b Siri\uff0c\u7136\u540e\u8bf4\u51fa\u5feb\u6377\u6307\u4ee4\u7684\u540d\u79f0\u4ee5\u8fd0\u884c\u5b83\u3002\u9664\u4e86\u8fd0\u884c Siri \u5efa\u8bae\u7684\u7b80\u5355\u5feb\u6377\u6307\u4ee4\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u5c06\u73b0\u6709\u5feb\u6377\u6307\u4ee4\u6216\u81ea\u5b9a\u5feb\u6377\u6307\u4ee4\u6dfb\u52a0\u5230\u8bbe\u5907\u3002\u8be5 App \u53ef\u8ba9\u4f60\u5408\u5e76\u591a\u4e2a App \u95f4\u7684\u591a\u4e2a\u6b65\u9aa4\uff0c\u4ee5\u521b\u5efa\u529f\u80fd\u5f3a\u5927\u7684\u4efb\u52a1\u81ea\u52a8\u5316\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u64cd\u4f5c\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u64cd\u4f5c"),"\u662f\u5feb\u6377\u6307\u4ee4\u7684\u7ec4\u6210\u90e8\u5206\u3002\u6bcf\u4e00\u4e2a\u5feb\u6377\u6307\u4ee4\u7686\u7531\u4e00\u7cfb\u5217\u64cd\u4f5c\u7ec4\u6210\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u5373\u4e3a\u6267\u884c\u7279\u5b9a\u529f\u80fd\u7684\u4e00\u4e2a\u6b65\u9aa4\u3002\u4f8b\u5982\uff0c\u5171\u4eab\u52a8\u753b GIF \u7684\u5feb\u6377\u6307\u4ee4\u53ef\u80fd\u5305\u542b\u4e09\u4e2a\u8fde\u7eed\u7684\u64cd\u4f5c\uff1a\u201c\u83b7\u53d6\u6700\u65b0\u7684\u7167\u7247\u201d\u4f1a\u6293\u53d6\u4f7f\u7528\u8bbe\u5907\u62cd\u6444\u7684\u6700\u65b0\u7167\u7247\uff0c\u201c\u5236\u4f5c GIF\u201d\u4f7f\u7528\u8fd9\u4e9b\u7167\u7247\u6784\u5efa\u52a8\u753b GIF\uff0c\u201c\u53d1\u9001\u4fe1\u606f\u201d\u4f1a\u81ea\u52a8\u5c06 GIF \u53d1\u9001\u7ed9\u6536\u4ef6\u4eba\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u5206\u89e3\u6210\u8f83\u5c0f\u7684\u90e8\u5206\uff0c\u64cd\u4f5c\u53ef\u5b9e\u73b0 Apple \u8bbe\u5907\u4e0a App \u7684\u6700\u4f73\u529f\u80fd\u3002\u901a\u8fc7\u6570\u767e\u4e2a\u64cd\u4f5c\uff0c\u4f60\u53ef\u4ee5\u5c06\u5404\u79cd\u5355\u72ec\u7684\u6b65\u9aa4\u94fe\u63a5\u5728\u4e00\u8d77\u4ee5\u6784\u5efa\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u81ea\u52a8\u5316\uff1f")),(0,n.kt)("p",null,"\u81ea\u52a8\u5316\u662f\u4e00\u79cd\u7531\u4e8b\u4ef6\u6fc0\u6d3b\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u800c\u975e\u624b\u52a8\u542f\u52a8\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u8bbe\u7f6e\u4e2a\u4eba\u6216\u5bb6\u5ead\u81ea\u52a8\u5316\uff0c\u7136\u540e\u901a\u8fc7\u5230\u8fbe\u3001\u79bb\u5f00\u3001\u66f4\u6539 iPhone \u4e0a\u7684\u8bbe\u7f6e\u548c\u4e00\u5929\u4e2d\u7684\u67d0\u4e2a\u65f6\u95f4\u7b49\u4e8b\u4ef6\u89e6\u53d1\u81ea\u52a8\u5316\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("h2",{id:"711-slack"},"7.11 Slack"),(0,n.kt)("h1",{id:"8-programming-language"},"8. Programming Language"),(0,n.kt)("h2",{id:"81-script-languages"},"8.1 Script languages"),(0,n.kt)("h3",{id:"811-skookumscript"},"8.1.1 SkookumScript"),(0,n.kt)("p",null,"SkookumScript uses a ",(0,n.kt)("a",{parentName:"p",href:"http://en.wikipedia.org/wiki/Multi-pass_compiler"},"multi-pass compiler")," to determine what files and components are needed, and automatically manages them in the memory of the parser and runtime, so aspects such as dependencies are always up-to-date."),(0,n.kt)("h4",{id:"8111-time-flow-logic"},"8.1.1.1 Time-flow logic"),(0,n.kt)("p",null,"Coroutines and methods\nCommands that may take time (multiple frames) to complete are called ",(0,n.kt)("em",{parentName:"p"},"coroutines")," and have identfier names that must start with an underscore ",(0,n.kt)("inlineCode",{parentName:"p"},"_"),". Commands that start without an underscore such as ",(0,n.kt)("inlineCode",{parentName:"p"},"println()")," complete immediately (within the same frame) and are called ",(0,n.kt)("em",{parentName:"p"},"methods"),"."),(0,n.kt)("h4",{id:"7112-conditional-flow-control"},"7.1.1.2 Conditional flow control"),(0,n.kt)("h3",{id:"812-lua"},"8.1.2 Lua"),(0,n.kt)("p",null,'It provides "meta language" features. You can implement object-oriented structures, or pure procedural functions, etc. It has a very simple C interface, and gives the engine developer a lot of flexibility in the language itself.'),(0,n.kt)("p",null,"Artists tend to love Lua too because it's very approachable, with plain and forgiving syntax. If your codebase is C or C++, I would highly recommend it."),(0,n.kt)("p",null,"It has good runtime performance when compared to other scripting languages like Python. (...and it has full support for closures.)"),(0,n.kt)("p",null,"It has a small memory footprint (approx 150k), it has excellent C/C++ bindings making it easy to add new game specific APIs, it is easy to pick up, it is flexible - i.e Has elements of OO, imperative and functional - none of which are mandatory, it has good buy-in from from mod community from games such as WoW etc."),(0,n.kt)("p",null,"\u7b80\u5355\u7684\u8bf4\uff0cregister-based\u7684\u6307\u4ee4\u683c\u5f0f\u8bbe\u8ba1\u628astack-based\u7684\u6307\u4ee4\u4e2d\u5206\u51e0\u6761\u6307\u4ee4\u8981\u5b8c\u6210\u7684\u4e8b\u60c5\u7528\u4e00\u6761\u6307\u4ee4\u641e\u5b9a\u4e86\uff0c\u5feb\u5f53\u7136\u662f\u5feb\u4e86\uff0c\u96be\u5ea6\u4e5f\u52a0\u5927\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u8fd8\u6709\u4e00\u70b9\u4e0a\u9762\u7684\u56de\u7b54\u4e2d\u4f3c\u4e4e\u6ca1\u6709\u63d0\u5230\uff0cLua\u4f7f\u7528\u7684\u662f\u4e00\u904d\u904d\u5386\u5c31\u751f\u4ea7\u6307\u4ee4\u7684\u65b9\u5f0f\uff0c\u5b66\u8fc7\u7f16\u8bd1\u539f\u7406\u7684\uff0c\u5927\u6982\u90fd\u80fd\u77e5\u9053\u4e00\u822c\u5206\u4e24\u904d\u904d\u5386\uff0c\u7b2c\u4e00\u904d\u751f\u6210AST\uff0c\u518d\u4e00\u904d\u904d\u5386AST\u751f\u6210\u6307\u4ee4\uff0c\u800c\u5728Lua\u4e2d\u662f\u76f4\u63a5\u8df3\u8fc7\u4e86AST\u6307\u4ee4\u8fd9\u4e00\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5feb\u662f\u5feb\u4e86\uff0c\u4ee3\u7801\u7684\u5b9e\u73b0\u96be\u5ea6\u4e5f\u5927\u4e86\u4e9b\u3002\u6700\u65e9\u7684Lua\u89e3\u91ca\u5668\uff0c\u4e5f\u662f\u4f7f\u7528lex\u3001yacc\u8fd9\u6837\u7684\u5de5\u5177\u6765\u81ea\u52a8\u751f\u6210\u4ee3\u7801\u7684\uff0c\u540e\u6765\u4e3a\u4e86\u63d0\u5347\u6027\u80fd\uff0c\u4f5c\u8005\u6539\u6210\u4e86\u81ea\u5df1\u624b\u5199\u7684\u9012\u5f52\u4e0b\u964d\u7684\u5206\u6790\u5668\u3002\u8fd9\u90e8\u5206\u4ee3\u7801\u662f\u6211\u8ba4\u4e3aLua\u4ee3\u7801\u4e2d\u6700\u96be\u7406\u89e3\u7684\u4e00\u4e2a\u90e8\u5206\u4e86--\u56e0\u4e3a\u5b83\u8981\u4e00\u904d\u5206\u6790\u5e72\u592a\u591a\u7684\u4e8b\u60c5\u4e86\u3002"),(0,n.kt)("p",null,"\u6211\u5728\u9605\u8bfbLua\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u80fd\u5145\u5206\u611f\u53d7\u5230\u4f5c\u8005\u4e3a\u4e86Lua\u5728\u6027\u80fd\u4e0a\u7684\u63d0\u5347\u82b1\u8d39\u7684\u5fc3\u8840\uff0c\u81f4\u656c\u3002"),(0,n.kt)("p",null,"\u629b\u5f00\u7406\u8bba\u4e0d\u8c08\uff0c\u5982\u679c\u8981\u5728 Lua \u4e2d\u5b9e\u8df5\uff0c\u6211\u4eec\u5230\u5e95\u53ef\u4ee5\u505a\u70b9\u4ec0\u4e48\u5462\uff1f"),(0,n.kt)("p",null,"\u6211\u8ba4\u4e3a\u9700\u8981\u6709\u8fd9\u51e0\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u5e94\u8be5\u5bf9 Lua \u52a0\u5f3a\u7c7b\u578b\u7cfb\u7edf\u3002Lua \u7684\u52a8\u6001\u6027\u5929\u7136\u652f\u6301\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u805a\u5408\u5728\u4e00\u8d77\uff0c\u6211\u4eec\u628a\u4e0d\u540c\u7684 Component \u653e\u5728\u4e00\u5f20\u8868\u91cc\u7ec4\u5408\u6210 Entity \u5c31\u8db3\u591f\u4e86\u3002\u4f46\u5982\u679c Component \u5206\u7684\u5f88\u7ec6\u7684\u8bdd\uff0c\u7528\u5f88\u591a\u7684\u8868\u7ec4\u5408\u6210\u4e00\u4e2a Entity \u5bf9\u8c61\u7684\u989d\u5916\u5f00\u9500\u4e0d\u5c0f\u3002\u4e0d\u50cf C++ \uff0c\u7ed3\u6784\u4f53\u805a\u5408\u7684\u989d\u5916\u5f00\u9500\u51e0\u4e4e\u4e3a\u96f6\u3002\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u4e0d\u540c Component \u7684\u6570\u636e\u76f4\u63a5\u5e73\u5766\u653e\u5728\u4e00\u4e2a table \u4e2d\uff0c\u53ea\u8981\u952e\u503c\u4e0d\u51b2\u7a81\u5373\u53ef\u3002\u4f46\u662f\u6211\u4eec\u9700\u8981\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\u65b9\u4fbf\u8fd0\u884c\u65f6\u4ece Entity \u4e2d\u8403\u53d6\u51fa Component \u6765\u3002\u53e6\u5916\uff0c\u5982\u679c\u662f C / Lua \u6df7\u5408\u8bbe\u8ba1\u7684\u8bdd\uff0c\u67d0\u4e9b Component \u8fd8\u5e94\u8be5\u53ef\u4ee5\u662f userdata \u3002"),(0,n.kt)("p",null,"\u4ece\u8282\u7701\u7a7a\u95f4\u53ca\u65b9\u4fbf\u904d\u5386\u7684\u89d2\u5ea6\u8bb2\uff0c\u6211\u4eec\u751a\u81f3\u53ef\u4ee5\u628a\u540c\u7c7b\u7684 C Component \u805a\u5408\u5728\u4e00\u5927\u5757\u5185\u5b58\u4e2d\uff0c\u7136\u540e\u5728 Entity \u7684 table \u4e2d\u53ea\u4fdd\u7559\u4e00\u4e2a lightuserdata \u5373\u53ef\u3002ECS \u7684 System \u6700\u91cd\u8981\u7684\u64cd\u4f5c\u5c31\u662f\u904d\u5386\u5904\u7406\u540c\u7c7b Component \uff0c\u8fd9\u6837\u5929\u7136\u5c31\u53ef\u4ee5\u5206\u4e3a C System \u548c Lua System \u3002\u6570\u636e\u7684\u5185\u805a\u6027\u5f88\u9ad8\uff0c\u53ef\u4ee5\u76f4\u63a5\u533a\u5206\u5f00 C data \u548c Lua Data \u3002"),(0,n.kt)("p",null,"\u7136\u540e\u3001\u5c31\u662f\u65b9\u4fbf\u7684\u904d\u5386\u3002ECS \u7684 System \u9700\u8981\u505a\u7684\u5c31\u662f\u7b5b\u9009\u51fa\u5b83\u5173\u5fc3\u7684 Entity \uff0c\u9488\u5bf9\u5176\u4e2d\u7684 Component \u505a\u64cd\u4f5c\u3002\u5982\u679c\u9700\u8981\u7b5b\u9009\u7ed3\u679c\u5927\u5927\u5c11\u4e8e\u5168\u4f53 Entity \u6570\u91cf\uff0c\u904d\u5386\u9010\u4e2a\u5224\u65ad\u5c31\u4f1a\u6548\u7387\u5f88\u4f4e\u3002\u597d\u5728\u5728 Lua \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u5bb9\u6613\u5730\u505a\u51fa cache \uff0c\u53ea\u9700\u8981\u904d\u5386\u7b5b\u9009\u4e00\u6b21\uff0c\u5728\u76d1\u63a7\u65b0\u7684 Component \u7684\u8bde\u751f\u5c31\u53ef\u4ee5\u65b9\u4fbf\u7684\u7ef4\u62a4\u904d\u5386\u7528\u7684\u96c6\u5408\u4e86\u3002"),(0,n.kt)("p",null,"Squirrel"),(0,n.kt)("p",null,"\u53d7lua\u5f71\u54cd\u6700\u5927\uff0c\u4f46\u98ce\u683c\u662fC/C++\u98ce\u683c\u7684\uff0c\u5728lua\u57fa\u7840\u4e0a\u6dfb\u52a0\u4e86class\uff0carray\u7b49"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://squirrel-lang.org/#overview"},"http://squirrel-lang.org/#overview")),(0,n.kt)("p",null,"V8 JavaScript from Google"),(0,n.kt)("h3",{id:"813-gamemonkey"},"8.1.3 GameMonkey"),(0,n.kt)("p",null,"This one is used by several teams. It's faster than Lua and better at threading."),(0,n.kt)("p",null,"\u6ca1\u6709\u7ef4\u62a4\u4e86"),(0,n.kt)("h3",{id:"814-python"},"8.1.4 Python"),(0,n.kt)("p",null,"This one has been used in several games (e.g. Civilization IV)."),(0,n.kt)("p",null,"It is very easy to teach to non-programmers/designers. It is even easier to pick up for developers since it essentially reads like pseudocode. Being dynamically typed is just one of the aspects that help to get people with little to no prior coding experience up and running fast with the language."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The C bindings for python are much more geared towards extending python with C, than embedding python in C.")),(0,n.kt)("h3",{id:"815-javascript"},"8.1.5 JavaScript"),(0,n.kt)("h3",{id:"816-typescript"},"8.1.6 TypeScript"),(0,n.kt)("h3",{id:"817-scumm"},"8.1.7 SCUMM"),(0,n.kt)("h3",{id:"818-mono-script"},"8.1.8 Mono-script"),(0,n.kt)("p",null,"The Mono framework is faster than most (perhaps all?) of scripting languages out there because it's not interpreted, and because there's a layer between the compiler and the instruction set, it allows you to program in a variety of languages including C# and dialects of Python, Lua and Javascript."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"If you're doing console development (including iOS), JITing code is apparently out of the question because you can't mark data pages as executable. The IL it has to be pre-compiled to the target platform."),(0,n.kt)("li",{parentName:"ul"},"Mono has license restrictions. You need a commercial license if you want to use it in an environment where the end user is not allowed/able to upgrade the Mono runtime.")),(0,n.kt)("h3",{id:"819-angelscript"},"8.1.9 AngelScript"),(0,n.kt)("h3",{id:"8110-schemeguile"},"8.1.10 Scheme/Guile"),(0,n.kt)("p",null,"With guile you can have your own DSL (Domain Specific Language) just for your game. Once you get used to the parentheses and prefix notation, scheme is heaven to work with."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://www.gnu.org/software/guile/"},"http://www.gnu.org/software/guile/")),(0,n.kt)("p",null,"libguile "),(0,n.kt)("p",null,"Guile also provides an object library, libguile, that allows other applications to easily incorporate a complete Scheme interpreter. "),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u59cb\u7ec8\u5b9a\u4f4d\u4e3a\u4e00\u4e2a\u6269\u5c55\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"Guile\u4f7f\u7528\u4fdd\u5b88\u5783\u573e\u56de\u6536\uff0cconservative garbage collection "),(0,n.kt)("li",{parentName:"ul"},"it implements the Scheme concept of continuations by copying and reinstating the C stack\u2014but whose practical consequence is that most existing C code can be glued into Guile as is, without needing modifications to cope with strange Scheme execution flows. "),(0,n.kt)("li",{parentName:"ul"},"Module system\uff0c\u5b83\u4f7f\u5f97extensions\u53ef\u4ee5\u4e0e\u4e4b\u524d\u7684\u6a21\u5757\u5171\u5b58")),(0,n.kt)("p",null,"\u6700\u5f00\u59cb\u662f\u57fa\u4e8eEmacs Lisp\u4f5c\u4e3aEmacs\u6269\u5c55\u8bed\u8a00\u7684\u5de8\u5927\u6210\u529f\uff0cGNU Project\u63d0\u51fa\u4e00\u79cd\u5e0c\u671b\u53ef\u4ee5\u5bf9\u6240\u6709GNU \u5e94\u7528\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u5b9e\u73b0\u7c7b\u4f3c\u529f\u80fd\u7684\u8bed\u8a00"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"1.5 Supporting Multiple Languages")," "),(0,n.kt)("p",null,"Since the 2.0 release, Guile\u2019s architecture supports compiling any language to its core virtual machine bytecode, and Scheme is just one of the supported languages. Other supported languages are Emacs Lisp, ECMAScript (commonly known as Javascript) and Brainfuck, and work is under discussion for Lua, Ruby and Python. "),(0,n.kt)("p",null,"This means that users can program applications which use Guile in the language of their choice, rather than having the tastes of the application\u2019s author imposed on them. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.4 Writing Guile Extensions")," "),(0,n.kt)("p",null,"You can link Guile into your program and make Scheme available to the users of your program. You can also link your library into Guile and make its functionality available to all users of Guile. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.5 Using the Guile Module System")," "),(0,n.kt)("p",null,"Guile has support for dividing a program into modules. By using modules, you can group related code together and manage the composition of complete programs from largely in- dependent parts. "),(0,n.kt)("p",null,"Module\u4e4b\u95f4\u662f\u600e\u4e48\u901a\u4fe1\u7684\uff1f\u5b8c\u5168\u72ec\u7acb\u5417\uff1f"),(0,n.kt)("p",null,"3.1.1 Latent Typing "),(0,n.kt)("p",null,"\u6ca1\u6709\u529e\u6cd5\u4e3a\u4e00\u4e2a\u53d8\u91cf\u5b9a\u4e49\u7c7b\u578b\uff0c\u4ee5\u53ca\u4e3a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u5b9a\u4e49\u8fd4\u56de\u7c7b\u578b\uff0c\u6240\u6709\u7684\u53d8\u91cf\u548c\u8868\u8fbe\u5f0f\u90fd\u5fc5\u987b\u5728runtime\u7684\u65f6\u5019\u786e\u5b9a\uff0c\u4e00\u4e2a\u53d8\u91cf\u7684\u540d\u5b57x\u53ea\u4e0d\u8fc7\u8868\u793a\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u540c\u65f6\u7531\u4e8e\u53d8\u91cf\u6ca1\u6709\u7c7b\u578b\uff0c\u6240\u4ee5\u53ef\u4ee5\u8d4b\u4e88\u65b0\u7684\u7c7b\u578b\u7684\u503c"),(0,n.kt)("p",null,"3.2.1 Procedures as Values\n\u8ddf\u5176\u4ed6\u53d8\u91cf\u4e00\u6837\u5904\u4e8e\u540c\u4e00\u4e2a\u7a7a\u95f4\uff0c\u6240\u4ee5\u4f60\u751a\u81f3\u53ef\u4ee5\u5bf9\u4e00\u4e2aprocedure\u4f7f\u7528\u4e00\u4e2a\u4e0d\u540c\u7684\u540d\u5b57"),(0,n.kt)("p",null,"5.7 An Overview of Guile Programming "),(0,n.kt)("p",null,"5.7.1.2 Four Steps Required to Add Guile "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"First, \u5728Guile\u4e2drepresent\u5e94\u7528\u7a0b\u5e8f\u5bf9\u8c61\uff0c\u9664\u975e\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u5185\u7f6e\u6570\u636e\u7c7b\u578b\u5982\u6570\u5b57\uff0c\u5426\u5219\u6211\u4eec\u9700\u8981\u4f7f\u7528foreign object interface\u521b\u9020\u5bf9\u5e94\u7684Scheme\u6570\u636e\u7c7b\u578b\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u53d7\u5783\u573e\u56de\u6536\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"Second\u7f16\u5199\u53ef\u4ee5\u88abGuile\u8bbf\u95ee\u7684operations"),(0,n.kt)("li",{parentName:"ul"},"Third,\u5728\u5bbf\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u9700\u8981\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8c03\u7528\u6dfb\u52a0\u8fdb\u6765\u7684Guile\u65b9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"Finally,\u5728\u5e94\u7528\u7a0b\u5e8f\u7684top-level\uff0c\u9700\u8981\u505a\u4e00\u4e9b\u7ed3\u6784\u8c03\u6574\uff0c\u4f7f\u5f97\u53ef\u4ee5\u521d\u59cb\u5316Guile\u7684\u89e3\u91ca\u5668\uff0c\u4ee5\u53ca\u4e3aScheme\u5b9a\u4e49foreign objects\u548cprimitives")),(0,n.kt)("p",null,"5.7.1.3 How to Represent Dia Data in Scheme "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u8868\u8ff0\u5fc5\u987b\u80fd\u591f\u88ab\u539f\u59cb\u8bed\u8a00decodable\uff0c\u56e0\u4e3a\u539f\u751f\u8bed\u8a00\u9700\u8981\u83b7\u53d6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"The representation must also cope with Scheme code holding on to the value for later use. "),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u6570\u636e\u540c\u65f6\u88abC\u548cScheme\u8bbf\u95ee\uff0c\u4e0d\u80fd\u53ea\u662f\u7b80\u5355\u5730\u4f7f\u7528\u5783\u573e\u56de\u6536\u673a\u5236")),(0,n.kt)("p",null,"One resolution of these issues is for the Scheme-level representation of a shape to be a new, Scheme-specific C structure wrapped up as a foreign object. The foreign object is what is passed into and out of Scheme code, and the Scheme-specific C structure inside the foreign object points to Dia\u2019s underlying C structure so that the code for primitives like square? can get at it. "),(0,n.kt)("p",null,"9 Guile Implementation "),(0,n.kt)("h3",{id:"8111-actionscript"},"8.1.11 ActionScript"),(0,n.kt)("p",null,"This is a hybrid dynamic/static typed language used to create Flash games, which can be widely distributed on the web. It is fairly well supported with libraries like Flixel, FlashPunk and Box2d."),(0,n.kt)("h3",{id:"8112-mruby"},"8.1.12 mruby"),(0,n.kt)("h2",{id:"82-erlang"},"8.2 Erlang"),(0,n.kt)("p",null,"Erlang \u7b97\u4e0d\u4e0a\u51b7\u95e8\uff0c\u81f3\u5c11\u4f60\u8fd8\u77e5\u9053\u540d\u5b57\uff0c\u5f88\u591a\u4f60\u8fde\u540d\u5b57\u90fd\u6ca1\u542c\u8fc7\u7684\u624d\u7b97\u51b7\u95e8\u3002\uff08\u4f46\u662f\u5f88\u591a\u51b7\u95e8\u7684\u8bbe\u8ba1\u7406\u5ff5\u5374\u975e\u5e38\u5148\u8fdb\uff09"),(0,n.kt)("p",null,"Erlang \u5728\u9ad8\u5e76\u53d1\u65b9\u9762\u6709\u4f18\u52bf\u8fd9\u4e2a\u8bf4\u6cd5\uff0c\u5176\u5b9e\u975e\u5e38\u7247\u9762\u3002Erlang \u6700\u725b\u903c\u7684\u5730\u65b9\u662f\u5b83\u662f\u76ee\u524d\u552f\u4e00\u4e00\u4e2a\u5177\u5907\u8f6f\u5b9e\u65f6\uff08Software Realtime\uff09\u7ea7\u522b\u7684\u7cfb\u7edf\u3002Java \u6a21\u4eff\u4e0d\u4e86\uff0cGo \u6a21\u4eff\u4e0d\u4e86\u3002\u5f53\u7136\u5982\u679c\u4f60\u8981\u7528 C/Rust \u4e4b\u7c7b\u6765\u505a\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u662f\u5176\u5b9e\u5c31\u662f\u628a Erlang \u518d\u505a\u4e00\u904d\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u8f6f\u5b9e\u65f6\u6307\u7684\u662f\u5783\u573e\u56de\u6536\u6027\u80fd\u5e73\u7a33\u3002\u5982\u679c\u505a\u8bed\u97f3\u7c7b\u5e94\u7528\uff0c\u9700\u8981\u7f51\u7edc\u4f20\u8f93\u8fc7\u7a0b\u4e0d\u4f1a\u56e0\u4e3a GC \u56de\u6536\u5bfc\u81f4\u5ef6\u8fdf\u6296\u52a8\uff0cErlang \u662f\u4f60\u7684\u5f00\u7bb1\u5373\u7528\u7684\u6700\u4f73\u9009\u62e9\uff0c\u6ca1\u6709\u4e4b\u4e00\u3002"),(0,n.kt)("p",null,"\u201c\u542c\u8d77\u6765\u4e5f\u6ca1\u591a\u725b\u903c\u3002\u4e0d\u5c31\u662f GC \u6280\u672f\u7684\u4f18\u5316\u561b\u3002\u6211\u641e\u4e2a\u5e76\u53d1\u5f0f GC \u7b97\u6cd5\u4e0d\u5c31\u884c\u4e86\uff1f\u201c\u2014\u2014\u8bf4\u8fd9\u8bdd\u7684\uff0c\u53ea\u80fd\u8bf4\u7b2c\u4e00\u5e76\u4e0d\u4e86\u89e3 GC\uff0c\u7b2c\u4e8c\u4e5f\u6839\u672c\u4e0d\u77e5\u9053 Erlang \u7684\u6050\u6016\u4e4b\u5904\u3002\u53ea\u80fd\u8bf4\u670b\u53cb\uff0c\u4f60\u5bf9\u529b\u91cf\u4e00\u65e0\u6240\u77e5\u3002\u8fd9\u91cc\u4e0d\u60f3\u5c55\u5f00\u516b\u767e\u5b57\u590d\u8bfb\u673a\u5f0f\u4ecb\u7ecd\u3002\u81ea\u5df1\u53ef\u4ee5\u770b\u770b Erlang VM \u7684\u8bbe\u8ba1\u4ecb\u7ecd\u3002\u4f60\u4f1a\u660e\u767d\u4e3a\u4ec0\u4e48 Erlang \u91cc\u7684 GC \u624d\u662f\u771f\u6b63\u5b8c\u5168\u5e76\u884c\uff0c\u7edd\u65e0 Stop the World \u53ef\u80fd\uff0c\u800c\u4e14\u56de\u6536\u5ef6\u8fdf\u67d4\u6027\u53ef\u9884\u6d4b\u7684\u3002\u8fd9\u4e00\u5207\u4e0d\u662f\u6ca1\u6709\u4ee3\u4ef7\u7684\uff0c\u4ee3\u4ef7\u5c31\u662f\u53d8\u91cf\u5fc5\u987b\u7edd\u4e0d\u80fd\u88ab\u5171\u4eab\uff0c\u800c\u4e14\u4e0d\u80fd\u88ab\u4fee\u6539\u3002\u8fd9\u4e00\u6765 Java \u4e4b\u7c7b\u7684 C \u5bb6\u65cf\u8bed\u8a00\u8fd8\u73a9\u4e2a\u5565\uff0c\u51c9\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u4e00\u4e9b\u56de\u7b54\u91cc\uff0c\u770b\u4e86\u4e00\u5708\uff0c\u5176\u5b9e\u5f88\u591a\u4e5f\u53ea\u662f\u968f\u4fbf\u7528\u4e86\u4e00\u4e0b\u8bd5\u8bd5\u3002\u8bf4\u51e0\u4e2a\u70b9\uff1a"),(0,n.kt)("p",null,"1\u3001Erlang \u662f\u5b98\u65b9\u81ea\u5e26\u4e00\u5957\u9759\u6001\u7c7b\u578b\u5206\u6790\u7cfb\u7edf\u7684\u2014\u2014",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=dialyzer&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"dialyzer"),"\uff0c\u4f60\u4e0d\u9700\u8981\u5b8c\u5168\u6807\u6ce8\u6240\u6709\u7c7b\u578b\uff0c\u672a\u6807\u6ce8\u7684\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\uff1b\u5b98\u65b9\u5efa\u8bae\u4f60\u5728\u6240\u6709\u9879\u76ee\u91cc\u90fd\u9ed8\u8ba4\u4f7f\u7528\u5b83\u6765\u68c0\u67e5\u9879\u76ee\uff0c\u5982\u679c\u4f60\u9075\u5faa\u8fd9\u4e2a\u5efa\u8bae\uff0c\u90a3\u4e48\u4f60\u8fd8\u80fd\u4eab\u53d7\u81ea\u52a8\u751f\u6210\u6587\u6863\u7684\u597d\u5904\uff1b\u800c\u4e14\u5b98\u65b9\u6807\u51c6\u5e93\u91cc\u4e5f\u90fd\u5199\u4e86\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u4ec0\u4e48 Erlang \u6ca1\u6709\u628a\u9759\u6001\u7c7b\u578b\u5206\u6790\u4f5c\u4e3a\u5439\u7684\u70b9\uff1f"),(0,n.kt)("p",null,"\u56e0\u4e3a\u9759\u6001\u7c7b\u578b\u7cfb\u7edf\uff08\u7f16\u8bd1\u671f\u68c0\u67e5\uff09\u5176\u5b9e\u6709\u5176\u5c40\u9650\u6027\uff0c\u7279\u522b\u662f\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e0b\uff0c\u4e24\u4e2a\u7cfb\u7edf A \u548c B\uff0c\u5047\u8bbe\u67d0\u6570\u636e\u7c7b\u578b\u505a\u4e86\u5347\u7ea7\uff0c\u90a3\u4e48\u5b9e\u9645\u7cfb\u7edf\u5347\u7ea7\u91cc\uff0c\u4f1a\u51fa\u73b0 A \u5347\u7ea7\u4e86\uff0cB \u8fd8\u5904\u4e8e\u65e7\u7248\u672c\u7684\u60c5\u51b5\u3002\u8fd9\u4e2a\u65f6\u5019\u8fd8\u6709\u4e2a\u5c41\u7684\u7c7b\u578b\u4e00\u81f4\u3002\u6240\u4ee5\u4f9d\u8d56\u4e8e\u9759\u6001\u7c7b\u578b\u5206\u6790\u4fdd\u91cd\u7cfb\u7edf\u4e00\u81f4\uff0c\u53ea\u80fd\u5bf9\u4e8e\u5355\u4e2a\u975e\u5206\u5e03\u5f0f\u7cfb\u7edf\u6bd4\u8f83\u597d\u3002\u5bf9\u4e8e\u771f\u5b9e\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u8bbe\u8ba1\u51fa\u53d1\u70b9\u6839\u672c\u4e0d\u662f\u7c7b\u578b\u4e00\u81f4\u3002\u800c\u662f\u5373\u4f7f\u4e0d\u4e00\u81f4\uff0c\u4e5f\u8981\u80fd\u5bb9\u5fcd\u3002\u8fd9\u5c31\u662f\u53e6\u5916\u4e00\u4e2a\u8bdd\u9898\u4e86\u3002"),(0,n.kt)("p",null,"\u989d\u5916\u63d0\u4e00\u53e5\uff0cErlang \u7684\u7c7b\u578b\u7cfb\u7edf\u662f\u5728\u4e0d\u5141\u8bb8\u4f60\u81ea\u5df1\u5b9a\u4e49\u65b0\u7c7b\u578b\u7684\u57fa\u7840\u4e0a\uff0c\u5374\u80fd\u591f\u5b8c\u7f8e\u7684\u6ee1\u8db3\u4f60\u7684\u7c7b\u578b\u8981\u6c42\u7684\u8bbe\u8ba1\u3002\u8bf4\u771f\u7684\uff0c\u6ca1\u6709\u4eba\u548c\u6211\u63d0\u8fc7\u8fd9\u4e00\u70b9\uff0c\u4f46\u662f\u5f53\u6709\u4e00\u5929\u6211\u7a81\u7136\u610f\u8bc6\u5230\u7684\u65f6\u5019\uff0c\u90a3\u4e00\u77ac\u95f4\u662f\u6781\u5176\u9707\u60ca\u7684\u2026\u2026\uff08\u60f3\u60f3 Haskell\uff09"),(0,n.kt)("p",null,"2\u3001Erlang \u81ea\u5e26",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%BA%90%E4%BB%A3%E7%A0%81&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6e90\u4ee3\u7801"),"\u53d8\u6362\u7cfb\u7edf\uff0c\u8fd9\u73a9\u610f\u513f\u7528\u4eba\u8bdd\u8bf4\u5c31\u662f\uff0c\u4f60\u53ef\u4ee5\u5bf9\u4f60\u81ea\u5df1\u7684\u6e90\u4ee3\u7801\u8fdb\u884c\u53d8\u6362\u3002\u6bd4\u5982 Erlang \u5b98\u65b9\u81ea\u5df1\u7684 EUnit \u5e93\uff0c\u5b83\u662f\u4e00\u4e2a\u5355\u5143\u6d4b\u8bd5\u5e93\u3002\u5b83\u7684\u539f\u7406\u662f\u4ec0\u4e48\uff1f\u5b9e\u9645\u4e0a\u5c31\u662f\u5f53\u4f60\u5f15\u7528 EUnit \u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u5bfc\u81f4\u4f60\u7684\u5f53\u524d\u6a21\u5757\u589e\u52a0\u4e00\u4e2a parse_transform \u6807\u8bb0\u3002\u7136\u540e\u7f16\u8bd1\u671f\u5c31\u77e5\u9053\u8fd9\u4e2a\u6a21\u5757\u9700\u8981\u88ab\u5916\u90e8\u91cd\u5199\u3002\u6700\u7ec8\u5b9e\u9645\u4e0a\u662f\u4ea4\u7ed9 eunit_autoexport \u6a21\u5757\u6765\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u4e0d\u662f\u7279\u6743\u3002\u4f60\u81ea\u5df1\u4e5f\u53ef\u4ee5\u7528\u3002\u4f46\u662f\u8fd9\u4e2a feature \u786e\u5b9e\u6bd4\u8f83\u9ad8\u7ea7\uff0c\u6bd4\u8f83\u5c11\u6709\u4eba\u8ba8\u8bba\u3002"),(0,n.kt)("p",null,"\u524d\u7aef\u5de5\u7a0b\u5e08\u719f\u6089\u7684 Babel \u5176\u5b9e\u505a\u7684\u5c31\u662f\u8fd9\u4ef6\u4e8b\u3002\u53ea\u4e0d\u8fc7\u5dee\u522b\u5728\u4e8e\uff0cErlang \u76f4\u63a5\u628a\u8fd9\u4e2a\u505a\u5230\u4e86\u5185\u90e8\u800c\u5df2\u3002\u800c\u4e14\u975e\u5e38\u7b80\u6d01\u3002\u5927\u90e8\u5206\u65f6\u5019\u90fd\u7528\u4e0d\u5230\u8fd9\u4e2a\u3002\u5f53\u65f6\u5f53\u4f60\u6709\u90a3\u4e48\u4e00\u4e24\u4e2a feature \u771f\u7684\u9700\u8981\u7528\u725b\u5200\u7684\u65f6\u5019\uff0c\u4f60\u4e00\u5b9a\u4f1a\u53d1\u51fa\u5367\u69fd\u592a\u723d\u4e86\u7684\u8bc4\u4ef7\u3002"),(0,n.kt)("p",null,"3\u3001Erlang \u7684\u6a21\u5757\u7cfb\u7edf\u662f\u6211\u89c1\u8fc7\u6700\u4eba\u6027\u5316\u7684\uff0c\u7b80\u5355\u5230\u5c0f\u5b66\u751f\u90fd\u80fd\u660e\u767d\u3002\u4f60\u4e0d\u9700\u8981 ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=import&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"import")," \u4efb\u4f55\u6a21\u5757\u3002\u4f60\u60f3\u4f7f\u7528\uff0c\u5c31\u76f4\u63a5\u4f7f\u7528\u3002Erlang \u4f1a\u4e3a\u4f60\u81ea\u52a8\u5bfb\u627e\u5e76\u52a0\u8f7d\u3002\u670b\u53cb\u4eec\uff0c\u5176\u4ed6\u8bed\u8a00\u5934\u90e8\u90a3\u4e00\u5806 import \u600e\u4e48\u8bf4\u5462\uff0c\u771f\u7684\u662f\u8131\u88e4\u5b50\u653e\u5c41\u7684\u5b58\u5728\u3002\u56e0\u4e3a Erlang \u7684\u8bed\u6cd5\u4fdd\u8bc1\u4e86\uff0c\u80fd\u591f\u7b80\u5355\u7684\u626b\u63cf\u5f53\u524d\u6587\u4ef6\u5c31\u80fd\u63a8\u5bfc\u51fa\u5230\u5e95\u4f7f\u7528\u4e86\u54ea\u4e9b\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u53ef\u4ee5\u5728\u4e0d\u505c\u6b62\u7cfb\u7edf\u7684\u60c5\u51b5\u4e0b\u5b89\u5168\u7684\u70ed\u5347\u7ea7\u3002\u662f\u7684\uff0c",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%83%AD%E5%8D%87%E7%BA%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u70ed\u5347\u7ea7"),"\u5176\u5b9e Python\u3001JavaScript \u4e4b\u7c7b\u7684\u7528\u70b9 Hack \u5c0f\u6280\u5de7\uff0c\u4e5f\u80fd\u6a21\u4eff\u4e2a\u4e03\u516b\u5206\u3002\u95ee\u9898\u662f\u6ca1\u6709\u4e00\u4e2a\u6562\u8bf4\u201c\u5b89\u5168\u201d\u3002\u56e0\u4e3a Erlang \u7684\u6a21\u5757\u70ed\u5347\u7ea7\u662f\u591a\u7248\u672c\u5e76\u5b58\u7684\u3002\u5047\u8bbe\u4e00\u4e2a\u8fdb\u7a0b\u771f\u6b63\u8dd1\uff0c\u5b83\u4f7f\u7528\u7684\u662f\u8001\u7248\u672c\u6a21\u5757\u3002\u90a3\u4e48\u5347\u7ea7\u7684\u65f6\u5019\uff0c\u65b0\u8fdb\u7a0b\u4f1a\u4f7f\u7528\u65b0\u7248\u672c\u3002\u4e92\u4e0d\u5e72\u6270\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u65b0\u7248\u672c\u5e26\u6765\u4e86\u65b0\u95ee\u9898\uff0c\u4f60\u8fd8\u53ef\u4ee5\u65e0\u7f1d\u7684\u964d\u56de\u53bb\u3002\u5f53\u7136\uff0c\u4f60\u613f\u610f\uff0c\u4e5f\u53ef\u4ee5\u628a\u8001\u7684\u8fdb\u7a0b\u5e72\u6389\u4e00\u4e9b\uff0c\u76f4\u63a5\u5f3a\u5236\u5230\u65b0\u7248\u672c\u3002\u5176\u4ed6\u7cfb\u7edf\u8fd9\u4e48\u505a\u5b9e\u5728\u592a\u53ef\u6015\u3002\u53ef\u662f Erlang \u7684\u8fdb\u7a0b\u662f\u5bb9\u9519\u7684\uff0c\u72b6\u6001\u53ef\u6062\u590d\u800c\u4e14\u53ef\u5347\u7ea7\u7684\uff0c\u6240\u4ee5\u8fd9\u4e48\u505a\u8fd8\u662f\u53ef\u884c\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u70ed\u66f4\uff0c\u53ea\u662f\u5e94\u5bf9\u4e00\u4e9b\u5c40\u90e8\u5c0f\u4fee\u6539\u3002\u5982\u679c\u6a21\u5757\u95f4\u6709\u590d\u6742\u4f9d\u8d56\uff0c\u9700\u8981\u4e00\u6b21\u8fdb\u884c\u591a\u4e2a\u6a21\u5757\u70ed\u66f4\u600e\u4e48\u529e\uff1f\u653e\u5fc3\u5427\u3002Erlang \u6709\u5b8c\u6574\u7684\u65b9\u6848\u3002"),(0,n.kt)("p",null,"4\u3001\u5176\u4ed6\u8bed\u8a00\u91cc\uff0c\u7a0b\u5e8f\u57fa\u672c\u4e0a\u5c31\u662f\uff0c\u4e00\u4e2a\u4e3b\u5165\u53e3\uff0c\u7136\u540e\u8c03\u7528\u5176\u4ed6\u7b2c\u4e09\u65b9\u6a21\u5757\u8fd9\u6837\u7684\u8bbe\u8ba1\u3002\u4f46\u662f\u8fd9\u4e2a\u8bbe\u8ba1\u592a\u7b80\u964b\u3002Erlang \u7684\u8bbe\u8ba1\u662f\uff0c\u6574\u4e2a\u7cfb\u7edf\u662f\u7531\u4e00\u7cfb\u5217\u72ec\u7acb\u8fd0\u884c\u7684 Application \u7ec4\u6210\u7684\u3002\u6ca1\u9519\uff0c\u5176\u5b9e\u4f60\u53ea\u662f\u5728\u4e3a Erlang \u8fd9\u4e2a\u7cfb\u7edf\u91cc\u5f00\u53d1 Application\u3002\u5305\u62ec\u4fd7\u8bdd\u8bf4\u7684\u201c\u7cfb\u7edf",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%A0%87%E5%87%86%E5%BA%93&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6807\u51c6\u5e93"),"\u201d\u8fd9\u79cd\u73a9\u610f\u513f\uff0cErlang \u91cc\u4e5f\u662f\u72ec\u7acb\u7684 Application\u3002"),(0,n.kt)("p",null,"\u6709\u4f55\u533a\u522b\uff1f\u6bcf\u4e2a Application \u90fd\u6709\u81ea\u5df1\u7684\u4e00\u4e2a\u542f\u52a8\u8fc7\u7a0b\uff0c\u81ea\u5df1\u7684\u4e00\u7ec4\u8fdb\u7a0b\uff08\u6784\u6210\u76d1\u7763\u6811\uff0c\u5177\u5907\u72ec\u7acb\u7684\u5bb9\u9519\u6027\uff09\u3002\u76f8\u4e92\u4e4b\u95f4\u8fd0\u884c\u65f6\u8026\u5408\u662f\u677e\u6563\u7684\u3002\u6240\u4ee5\uff0cA \u548c B \u4e24\u4e2a Application \u4f60\u60f3\u8fd0\u884c\u5728\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6216\u8005\u591a\u53f0\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u4e0a\uff0c\u4ee3\u7801\u6709\u5dee\u522b\u5417\uff1f\u6ca1\u6709\u3002"),(0,n.kt)("p",null,"\u4f60\u611f\u89c9\u5230\u4e00\u4e1d\u5947\u602a\u7684\u6c14\u5473\u6ca1\u3002\u662f\u7684\uff0cErlang \u751a\u81f3\u6709\u81ea\u5df1\u7684 Shell \u7528\u6765\u7ba1\u7406\u548c\u63a7\u5236\u8fd9\u6574\u4e2a\u7cfb\u7edf\u3002\u800c\u8fd9\u4e2a Shell \u91cc\u5c31\u662f Erlang \u8bed\u8a00\u672c\u8eab\u3002\u5b8c\u7f8e\u7684\u4e00\u81f4\uff0c\u7b80\u76f4\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u987a\u5e26\u4e00\u63d0\uff0cErlang \u662f\u53ef\u4ee5\u5199\u811a\u672c\u7684\uff0c\u53eb\u505a escript\u3002\u539f\u6c41\u539f\u5473\uff0c\u4fdd\u8bc1\u9c9c\u7f8e\u3002"),(0,n.kt)("p",null,"5\u3001\u4e00\u822c\u8bed\u8a00\u7684\u5b57\u7b26\u4e32\u5904\u7406\uff0c\u611f\u89c9\u5f88\u65b9\u4fbf\u3002\u4f46\u662f\u5f88\u591a\u8bed\u8a00\u5185\u90e8\u662f\u53ea\u80fd\u5904\u7406 Unicode \u7684\u67d0\u4e00\u79cd\u7f16\u7801\u7684\uff08UTF-8\u3001UTF-16BE \u662f\u6d41\u884c\u9009\u62e9\uff09\u3002\u5982\u679c\u60f3\u8981\u968f\u5fc3\u6240\u6b32\u7684\u53bb\u652f\u6301\uff0c\u5c31\u5fc5\u987b\u628a\u5b57\u7b26\u4e32\u5f53\u4f5c\u539f\u59cb\u4e8c\u8fdb\u5236\u6570\u636e\u5904\u7406\u3002\u4f46\u662f Erlang \u91cc\u6839\u672c\u6ca1\u6709\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u5c55\u5f00\u8bf4\u6bd4\u8f83\u590d\u6742\u3002\u5f88\u591a\u4eba\u62b1\u6028 Erlang \u91cc\u5b57\u7b26\u4e32\u5904\u7406\u597d\u50cf\u4e0d\u65b9\u4fbf\u3002\u4e00\u4e2a\u91cd\u8981\u7684\u539f\u56e0\u662f\uff0c\u8fd9\u90e8\u5206\u7684\u7406\u89e3\u9700\u8981\u7a0d\u5fae\u6df1\u4e00\u70b9\u7684\u57fa\u7840\u77e5\u8bc6\uff08\u4e0d\u590d\u6742\uff09\u3002\u4ee5\u540e\u518d\u5c55\u5f00\u8bf4"),(0,n.kt)("p",null,"6\u3001Erlang \u91cc\u9762\u76f4\u63a5\u5305\u542b\u4e86\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u800c\u4e14\u53ea\u9700\u8981\u8fd9\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u662f\u7684\uff0c\u6bd4\u5982 Erlang \u91cc\u662f\u81ea\u5e26\u72b6\u6001\u673a\u6a21\u5f0f\u7684\u3002\u8bf4\u5230\u8fd9\u91cc\u2026\u2026"),(0,n.kt)("h3",{id:"821-beam-vm"},"8.2.1 Beam VM"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u77e5\u9053erlang\u8981\u89e3\u51b3\u7684\u95ee\u9898\u662f\u201c\u9ad8\u5e76\u53d1\u201d\u548c\u201d\u5206\u5e03\u5f0f\u201c\u95ee\u9898\uff0c\u8fd9\u6837\u8bf4\u6709\u70b9\u592a\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u6765\u8bf4\uff0cerlang\u5728\u5e94\u7528\u5c42\u548c\u64cd\u4f5c\u7cfb\u7edf\u5c42\u4e4b\u95f4\u53c8\u52a0\u5165\u4e86\u4e00\u4e2a\u7ec6\u7c92\u5ea6\u7684\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\u5c42\uff08beam vm\uff09\uff0c\u8fd9\u4e2a\u5206\u914d\u5c42\u81ea\u52a8\u628a\u8ba1\u7b97\u4efb\u52a1\u5206\u6d3e\u5230os\uff08thread\uff09\u5c42\u3002\u8fd9\u5176\u5b9e\u662f\u9ad8\u5e76\u53d1\u5904\u7406\u4e2d\u4e00\u4e2a\u5f88\u7406\u60f3\u7684\u73af\u5883\uff0c\u8ba1\u7b97\u8d44\u6e90\u53ef\u4ee5\u66f4\u5408\u7406\u7684\u914d\u7f6e\u3002\u7406\u8bba\u4e0a\u53ef\u4ee5\u505a\u5230\u52a8\u6001\u6269\u5927\u6216\u8005\u7f29\u5c0f\u6240\u9700\u7684\u786c\u4ef6\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u6709\u4e86\u7ec6\u7c92\u5ea6\u7684\u81ea\u52a8\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\uff0c\u5f88\u591a\u65f6\u5019\u5c31\u4e0d\u9700\u8981\u5728\u5e94\u7528\u5c42\u53bb\u8003\u8651\u8fd9\u4e2a\u95ee\u9898\u4e86\uff0c\u51cf\u5c11\u4e86\u5f88\u591a\u65e0\u8c13\u7684\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e0d\u6b63\u662f\u672a\u6765\u6240\u9700\u8981\u7684\u8ba1\u7b97\u6a21\u5f0f\u5417\uff1f"),(0,n.kt)("h3",{id:"842-concurrency-oriented-languages"},"8.4.2 Concurrency Oriented Languages"),(0,n.kt)("h4",{id:"8421-programming-by-observing-the-real-world"},"8.4.2.1 Programming by observing the real world"),(0,n.kt)("p",null,"We oden want to write programs that model the world or interact with the world. Writing such a program in a COPL is easy. Firstly, we perform an analysis which is a three-step process:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"We identify all the truly concurrent activities in our real world activ- ity."),(0,n.kt)("li",{parentName:"ol"},"We identify all message channels between the concurrent activities."),(0,n.kt)("li",{parentName:"ol"},"We write down all the messages which can flow on the dicerent message channels.")),(0,n.kt)("p",null,"Now we write the program. The structure of the program should exactly follow the structure of the problem. Each real world concurrent activity should be mapped onto exactly one concurrent process in our programming language. If there is a 1:1 mapping of the problem onto the program we say that the program is isomorphic to the problem."),(0,n.kt)("p",null,"It is extremely important that the mapping is exactly 1:1. The reason for this is that it minimizes the conceptual gap between the problem and the solution. If this mapping is not 1:1 the program will quickly degenerate, and become diecult to understand. This degeneration is oden observed when non-CO languages are used to solve concurrent problems. Oden the only way to get the program to work is to force several independent activities to be controlled by the same language thread or process. This leads to a inevitable loss of clarity, and makes the programs subject to complex and irreproducible interference errors."),(0,n.kt)("p",null,"In performing our analysis of the problem we must choose an appro- priate granularity for our model. For example, if we were writing an instant messaging system, we might choose to use one process per user and not one process for every atom in the user\u2019s body."),(0,n.kt)("h4",{id:"8422-characteristics-of-a-copl"},"8.4.2.2 Characteristics of a COPL"),(0,n.kt)("p",null,"COPLs are characterised by the following six properties:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"COPLs must support processes. A process can be thought of as a self-contained virtual machine."),(0,n.kt)("li",{parentName:"ol"},"Several processes operating on the same machine must be strongly isolated. A fault in one processe should not adversely ecect another process, unless such interaction is explicitly programmed."),(0,n.kt)("li",{parentName:"ol"},"Each process must be identified by a unique unforgeable identifier. We will call this the Pid of the process."),(0,n.kt)("li",{parentName:"ol"},"There should be no shared state between processes. Processes inter- act by sending messages. If you know the Pid of a process then you can send a message to the process."),(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be unreliable with no guarantee of delivery."),(0,n.kt)("li",{parentName:"ol"},"It should be possible for one process to detect failure in another process. We should also know the reason for failure.")),(0,n.kt)("h4",{id:"8423-process-isolation"},"8.4.2.3 Process isolation*"),(0,n.kt)("p",null,"The notion of ",(0,n.kt)("em",{parentName:"p"},"isolation")," is central to understanding COP, and to the con- struction of fault-tolerant sodware. Two processes operating on the same machine must be as independent as if they ran on physically separated machines."),(0,n.kt)("p",null,"Isolation has several consequences:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Processes have \u201cshare nothing\u201d semantics. This is obvious since they are imagined to run on physically separated machines."),(0,n.kt)("li",{parentName:"ol"},"Message passing is the only way to pass data between processes. Again since nothing is shared this is the only means possible to exchange data."),(0,n.kt)("li",{parentName:"ol"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation."),(0,n.kt)("li",{parentName:"ol"},"Since nothing is shared, everything necessary to perform a dis- tributed computation must be copied. Since nothing is shared, and the only way to communicate between processes is by message pass- ing, then we will never know if our messages arrive (remember we said that message passing is inherently unreliable.) The only way to know if a message has been correctly sent is to send a confirmation message back.")),(0,n.kt)("h4",{id:"8424-names-of-processes"},"8.4.2.4 Names of processes"),(0,n.kt)("p",null,"We require that the names of processes are unforgeable. This means that it should be impossible to guess the name of a process, and thereby interact with that process. We will assume that processes know their own names, and that processes which create other processes know the names of the processes which they have created. In other words, a parent process knows the names of its children."),(0,n.kt)("p",null,"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",null,"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",null,"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.\nIn many primitive religions it was believed that humans had powers over spirits if they could command them by their real names. Knowing the real name of a spirit gave you power over the spirit, and using this name you could command the spirit to do various things for you. COPLs use the same idea."),(0,n.kt)("h4",{id:"8425-message-passing"},"8.4.2.5 Message passing"),(0,n.kt)("p",null,"Message passing obeys the following rules:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be atomic which means that a mes- sage is either delivered in its entirety or not at all."),(0,n.kt)("li",{parentName:"ol"},"Message passing between a pair of processes is assumed to be or- dered meaning that if a sequence of messages is sent and received between any pair of processes then the messages will be received in the same order they were sent."),(0,n.kt)("li",{parentName:"ol"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"8426-protocols"},"8.4.2.6 Protocols*"),(0,n.kt)("p",null,"Isolation of components, and message passing between components, is architecturally suecient for protecting a system from the consequences of a sodware error, but it is not suecient to specify the behaviour of a system, nor, in the event of some kind of failure to determine which component has failed."),(0,n.kt)("p",null,"Up to now we have assumed that failure is a property of a single component, a single component will either do what it is supposed to do or fail as soon as possible. It might happen, however, that no components are observed to fail, and yet the system still does not work as expected."),(0,n.kt)("p",null,"To complete our programming model, we add therefore one more thing. Not only do we need completely isolated components that com- municate only by message passing, but also we need to specify the com- munication protocols that are used between each pair of components that communicate with each other."),(0,n.kt)("p",null,"By specifying the communication protocol that should be obeyed be- tween two components we can easily find out if either of the components involved has violated the protocol. Guaranteeing that the protocol is en- forced should be done by static analysis, if possible, or failing this by compiling run-time checks into the code."),(0,n.kt)("h2",{id:"83-move"},"8.3 Move"),(0,n.kt)("p",null,"Move,asafeandflexibleprogramminglanguagefortheLibraBlockchain","[1][2]",". Move is an executable bytecode language used to implement custom transactions and smart contracts. The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic: a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies. The safety and expressivity of Move have enabled us to implement significant parts of the Libra protocol in Move, including Libra coin, transaction processing, and validator management."),(0,n.kt)("h3",{id:"831-\u95ee\u9898"},"8.3.1 \u95ee\u9898"),(0,n.kt)("p",null,"\u76ee\u524d\u7684\u8bed\u8a00\u5b58\u5728\u51e0\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Indirect representation of assets\uff1a\u8d44\u6e90\u4ec5\u4ec5\u88ab\u7f16\u7801\u4e3a\u4e00\u4e2a\u6574\u6570\uff0c\u4f46\u662f\u4e00\u4e2a\u6574\u6570\u8ddf\u4e00\u4e2a\u8d44\u6e90\u8fd8\u662f \u6709\u5dee\u5f02\u7684\uff0c\u5c06\u8d44\u6e90\u8868\u8ff0\u4e3a\u4e00\u4e2a\u6574\u6570\u4f7f\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u5bb9\u6613\u51fa\u9519\u7684\u7a0b\u5e8f\uff0c\u8d44\u6e90\u9700\u8981\u88ab\u7279\u6b8a\u5bf9\u5f85"),(0,n.kt)("li",{parentName:"ul"},"Scarcity is not extensible: In addition, the scarcity protections are hardcoded directly in the language semantics. A programmer that wishes to create a custom asset must carefully reimplement scarcity with no support from the language."),(0,n.kt)("li",{parentName:"ul"},"Access control is not flexible\uff1a The only access control policy the model enforces is the signature scheme based on the public key. Like the scarcity protections, the access control policy is deeply embedded in the language semantics. It is not obvious how to extend the language to allow programmers to define custom access control policies.")),(0,n.kt)("h3",{id:"832-move-design-goals"},"8.3.2 Move Design Goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"First-Class Resources \uff1aBlockchain systems let users write programs that directly interact with digital assets. As we discussed in Section 2.2, digital assets have special characteristics that distinguish them from the values tradi- tionally used in programming, such as booleans, integers, and strings. A robust and elegant approach to programming with assets requires a representation that preserves these characteristics."),(0,n.kt)("p",{parentName:"li"},"The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic ","[3]",": a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Flexibility\uff1amodules/resources/procedures\uff0c\u6bcf\u4e2a\u4ea4\u6613\u5305\u542b\u4e00\u4e2aScript\uff0c\u8fd9\u4e2ascript\u53ef\u4ee5\u8c03\u7528\u4efb\u610fmodule\u4e2d\u7684procedure\uff0c\u63d0\u4f9b\u5de8\u5927\u7684\u7075\u6d3b\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Safety: resource safety, type safety, memory safety, Move\u5728\u8fd0\u884c\u65f6\uff08on-chain\uff09\u52a8\u6001\u5206\u6790")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Verifiability\uff1a\u5168\u90e8\u5728\u8fd0\u884c\u65f6\u505a\u9a8c\u8bc1\u4f1a\u5e26\u6765\u8ba1\u7b97\u590d\u6742\u5ea6\u548c\u534f\u8bae\u7684\u590d\u6742\u5ea6\uff0c\u6240\u4ee5\u7ed3\u5408off-chain + on-chain\u7684\u9a8c\u8bc1\uff0c\u4f7fon-chain\u5c3d\u53ef\u80fd\u8f7b\u91cf\u5e76\u4e14\u5c3d\u53ef\u80fd\u805a\u7126\u6838\u5fc3\u7684\u5b89\u5168\u5c5e\u6027\u4e0a"))),(0,n.kt)("p",null,"We have made several design decisions that make Move more amenable to static verification than most general-purpose languages:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"No dynamic dispatch. The target of each call site can be statically determined. This makes it easy for verification tools to reason precisely about the effects of a procedure call without performing a complex call graph construction analysis."),(0,n.kt)("li",{parentName:"ol"},"Limited mutability. Every mutation to a Move value occurs through a reference. References are temporary values that must be created and destroyed within the confines of a single transac- tion script. Move\u2019s bytecode verifier uses a \u201cborrow checking\u201d scheme similar to Rust to ensure that at most one mutable reference to a value exists at any point in time. In addition, the language ensures that global storage is always a tree instead of an arbitrary graph. This allows verification tools to modularize reasoning about the effects of a write operation."),(0,n.kt)("li",{parentName:"ol"},"Modularity. Move modules enforce data abstraction and localize critical operations on re- sources. The encapsulation enabled by a module combined with the protections enforced by the Move type system ensures that the properties established for a module\u2019s types cannot be violated by code outside the module. We expect this design to enable exhaustive functional ver- ification of important module invariants by looking at a module in isolation without considering its clients.")),(0,n.kt)("h3",{id:"833-move-overview"},"8.3.3 Move Overview"),(0,n.kt)("h4",{id:"8331-peer-to-peer-payment-transaction-script"},"8.3.3.1 Peer-to-Peer Payment Transaction Script"),(0,n.kt)("p",null,"We use the term resource safety to describe the guarantees that Move resources can never be copied, reused, or lost. These guarantees are quite powerful because Move programmers can implement custom resources that also enjoy these protections."),(0,n.kt)("h4",{id:"8332-module"},"8.3.3.2 Module"),(0,n.kt)("h3",{id:"834-the-move-language"},"8.3.4 The Move Language"),(0,n.kt)("h2",{id:"84-smalltalk"},"8.4 Smalltalk"),(0,n.kt)("h3",{id:"841-object-model"},"8.4.1 Object Model"),(0,n.kt)("h4",{id:"8421-message"},"8.4.2.1 Message"),(0,n.kt)("p",null,"To describe how the objects are represented, the programmer must list all the fields in the object, and give each field a name. To describe how the object will behave, the programmer will give a series of \u201cmethods\u201d."),(0,n.kt)("p",null,"A method is like a function, except that it is applied to a specific object. We also say that the method is \u201cinvoked\u201d on an object or \u201csent to\u201d an object. The object in question is called the \u201creceiver.\u201d Every method is invoked on a receiving object. In C++ and Java, the receiver is called the \u201cthis object\u201d, but Smalltalk does not use this this terminology. The \u201cthis\u201d terminology makes for awkward wordings."),(0,n.kt)("p",null,"Methods in Smalltalk are similar to methods in Java and C++, where they are called \u201cmember functions\u201d. Methods may take arguments and may return a result. The method body is a sequence of executable statements. Methods are invoked from expressions, just as in other languages."),(0,n.kt)("p",null,"There is an important distinction between \u201cmethods\u201d and \u201cmessages\u201d. A method is a body of code, while a message is something that is sent. A method is similar to a function; in this analogy, sending a message is similar to calling a function. An expression which invokes a method is called a \u201cmessage sending expression.\u201d"),(0,n.kt)("p",null,"Smalltalk terminology makes a clear distinction between \u201cmessage\u201d and \u201cmethod\u201d, but Java and C++ terminology sometimes confuses these concepts. A message-sending expression will send a message to the object. How the object responds to the message depends on the class of the object. Objects of different classes will respond to the same message differently, since they will invoke different methods."),(0,n.kt)("p",null,"When a message is sent to an object, a method will be selected and executed. Since we cannot know, in general, the class of the object until run-time, the method cannot be selected until the message is actually sent. This is called \u201cdynamic binding\u201d, and Java, C++, and Smalltalk all have it. With straight functions, the compiler can look at a \u201ccall\u201d statement and figure out at compile-time (i.e., \u201cstatically\u201d) which body of code to branch to. C++ (which always prefers efficiency over clarity) encourages static binding and refers to dynamically bound methods as \u201cvirtual\u201d methods, and refers to the virtual table."),(0,n.kt)("p",null,"In the Smalltalk programming model, all binding is dynamic. However, the compiler and virtual machine will often bind methods statically for greater execution efficiency when it is can be done safely and without changing the program\u2019s behavior."),(0,n.kt)("h4",{id:"8422-message-sending-syntax"},"8.4.2.2 Message Sending Syntax"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x reset "a message-send in Smalltalk"\nx.reset() // a message-send in Java\n\nmyDept manager name last\nmyDept.manager().name().last()\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Binary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x + y "in Smalltalk"\nx + y // in Java\nx.plus(y) //java\n')),(0,n.kt)("p",null,"\u5305\u62ec+ * <= == <===>"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Keyword Messages")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"}," x addKey: a value: b useMap: myMap ifError: errCode")," "),(0,n.kt)("p",null,"The message name is \u201caddKey:value:useMap:ifError:\u201d Four colons mean four arguments."),(0,n.kt)("h4",{id:"8423-discussion-of-smalltalk-syntax"},"8.4.2.3 Discussion of Smalltalk Syntax"),(0,n.kt)("p",null,"These rules are unfamiliar at first, and some readers are probably thinking \u201cthis is very different\u201d. The key is that Smalltalk syntax is very simple. In practice, the syntax is learned quickly and becomes second nature in no time."),(0,n.kt)("p",null,"Compared to Java or C++ syntax, Smalltalk syntax is simpler and cleaner. Technically, Smalltalk is LL(1), which means it can be parsed with the simplest top-down parsing algorithms, while C++ is LR(1) and cannot be parsed with any simple algorithms. What is hard for computers to parse is also hard for programmers to parse."),(0,n.kt)("p",null,"Smalltalk\u7684\u65b9\u5f0f\u66f4\u5229\u4e8e\u52a8\u6001binding\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728x + y \u4e2d\u4e0d\u9700\u8981\u5411\u540e\u770b\u76f4\u63a5\u5c31\u53ef\u4ee5\u63a8\u5bfc\u9700\u8981\u4f7f\u7528\u7684method"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e2d\uff0c\u5982x.processString (y, m, s, d)\uff0c\u6bcf\u4e2a\u53c2\u6570\u90fd\u6709\u540d\u5b57\uff0c\u5f62\u6210\u5305\u542b\u4fe1\u606f\u66f4\u591a\u7684\u51fd\u6570\u540d\u79f0processString:mapping:symbols:defaults:\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u5bf9\u51fd\u6570\u7684\u67e5\u627e")),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5728\u4f20\u7edf\u7684C++/Java\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7f16\u8bd1\u5668\u63a8\u5bfc\u7c7b\u578b\uff0c\u9700\u8981\u6784\u5efa\u8bed\u6cd5\u6811\uff0c\u4ee5\u53ca\u5404\u79cd\u8868\uff0c\u8fd9\u5bfc\u81f4\u52a8\u6001\u7ed1\u5b9a\u6216\u8005\u63a8\u5bfc\u7684\u80fd\u529b\u4e0b\u964d\u3002\u56e0\u4e3aSmalltalk\u662f\u5b8c\u5168\u65e0\u7c7b\u578b\u7684\uff0c\u4e0d\u50cfJava/C++\u6bcf\u4e2a\u53d8\u91cf\u90fd\u5fc5\u987b\u58f0\u660e\u4e00\u4e2a\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"One might reasonably ask, why bother to declare variables at all, if there is no typing information? The primary answer is that every variable must be declared so that the compiler can set aside space for each variable. Every variable will be allocated 32 bits and can hold either a pointer to an object or a SmallInteger."),(0,n.kt)("p",null,"A second reason for declaring variables is so that the compiler can guard against misspellings of variable names by the programmer. Every variable must be declared. If, in the body of executable statements, the programmer misspells a variable name, the compiler will complain that the variable has not been declared."),(0,n.kt)("h4",{id:"8424-the-distinction-between-types-and-classes"},"8.4.2.4 The Distinction Between Types and Classes"),(0,n.kt)("p",null,"Languages like Java and C++ make a distinction between \u201ctypes\u201d and \u201cclasses\u201d. In Java, there are 3 kinds of types: classes, interfaces, and primitive types (like \u201cint\u201d). Each variable is given a type at compile-time; this places restrictions on what values can be assigned to that variable at run-time."),(0,n.kt)("p",null,"In Smalltalk there are no constraints on what can be assigned to a variable. Any variable may point to any class of object. It is the programmer\u2019s responsibility to make sure that a variable\u2019s value is of the correct class at run-time."),(0,n.kt)("p",null,"Which is better: a typed language or an un-typed language? Both approaches have their strengths and weaknesses. In my opinion, neither approach is clearly superior."),(0,n.kt)("p",null,"If a type system is well-designed, then it is often the case that the compiler can catch bugs that would otherwise go unnoticed until run-time. In this way, typed languages make programs more reliable and readable. On the other hand, a strong type system occasionally makes it difficult to do certain things. The programmer ends up writing code to defeat or work around the language\u2019s type system. It sometimes seems that type system is a burden to the programmer, providing only a false sense of protection."),(0,n.kt)("p",null,"With an un-typed language, the program is not cluttered up with type definitions and casting expressions. The algorithm tends to show through more clearly. However, when reading complex code, it can sometimes be virtually impossible to guess what kinds of data a given variable might point to at some point in the code."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dynamic Typing")),(0,n.kt)("p",null,"Sometimes, un-typed languages like Smalltalk are said to be \u201cdynamically type,\u201d since each value has a type, but the compiler does not check the types. Languages like Java and C++ are said to be \u201cstatically typed.\u201d In a statically type language, the compiler checks to make sure every line of the program is type-correct. At runtime, there is no checking and, in theory, the program will run faster. In practice, Smalltalk pays only a very small penalty for dynamic type checking."),(0,n.kt)("p",null,"In a dynamically typed language, each value knows its type and these types are checked at run-time rather than at compile time. By \u201ceach value knows its type\u201d we mean that each object has an implicit pointer to its class. This is part of the object and you can\u2019t have an object without having immediate access to its class. Even with SmallIntegers, there is a tag bit that implicitly gives the class of the object as \u201cSmallInteger\u201d. Contrast this with C++, where you can have a 32-bit quantity without knowing whether it represents an \u201cint\u201d, or a pointer, or a \u201cfloat\u201d."),(0,n.kt)("p",null,"The term \u201cdynamic typing\u201d is somewhat confusing and should be avoided, since it confuses the ideas of \u201cclass\u201d and \u201ctype\u201d. Classes are not types. Sure, Smalltalk keeps class information around at run-time and relies on it, but so do \u201cstatically-typed\u201d languages like Java and C++."),(0,n.kt)("p",null,"Smalltalk is an \u201cuntyped, object-oriented\u201d language while Java is a \u201cstrongly typed, object-oriented language\u201d. C++, as always, defies any simple description."),(0,n.kt)("h3",{id:"842-smalltalk\u9762\u5411\u5bf9\u8c61"},"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u6797\u5efa\u5165\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/20275578/answer/26970925"},"https://www.zhihu.com/question/20275578/answer/26970925"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("p",null,"Smalltalk \u7684\u4eae\u70b9\u5c31\u5728\u4e8e\uff0c\u5b83\u5728\u8bed\u8a00\u5c42\u9762\u5f15\u5165\u4e86\u4e00\u79cd\u79f0\u4e3a\u201c\u5bf9\u8c61\u201d\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u7cfb\u7edf\u3002\u4e00\u4e2a Smalltalk \u7a0b\u5e8f\u7531\u4e00\u7cfb\u5217\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u6784\u6210\uff0c\u6bcf\u4e2a\u6a21\u5757\u4e4b\u95f4\u901a\u8fc7\u901a\u4fe1\u8fdb\u884c\u534f\u540c\u3002"),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u8bf4\uff0c",(0,n.kt)("strong",{parentName:"p"},"Smalltalk \u6240\u79c9\u627f\u7684\u9762\u5411\u5bf9\u8c61\u601d\u60f3\u4f7f\u5f97\u6574\u4e2a\u8f6f\u4ef6\u7cfb\u7edf\u7684\u53ef\u5206\u5272\u6027\u548c",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E5%8F%AF%E7%BB%84%E5%90%88%E6%80%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u53ef\u7ec4\u5408\u6027"),"\u8fc8\u4e0a\u4e86\u4e00\u4e2a\u65b0\u53f0\u9636\u3002\u8fd9\u662f",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E6%80%9D%E6%83%B3&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9762\u5411\u5bf9\u8c61\u601d\u60f3"),"\u7684\u5149\u8f89\u6240\u5728\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u56de\u8fc7\u5934\u6765\u770b\u770b C++ \u548c Java \u4e2d\u7684\u9762\u5411\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\uff0cC++ \u548c Java \u5728\u5b9e\u73b0\u9762\u5411\u5bf9\u8c61\u7684\u8def\u9014\u4e0a\u9047\u5230\u7684\u7b2c\u4e00\u9053\u574e\u662f\u4ed6\u4eec\u672c\u8eab\u90fd\u662f",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E9%9D%99%E6%80%81%E7%B1%BB&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9759\u6001\u7c7b"),"\u578b\u7684\u8bed\u8a00\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u7c7b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4fe1\u6761\u662f\u4e00\u5207\u7ed3\u6784\u7686\u987b\u9884\u5148\u63cf\u8ff0\uff0c\u56e0\u4e3a\u7f16\u8bd1\u5668\u8981\u68c0\u67e5\u3002\u4e8e\u662f\u6ca1\u4ec0\u4e48\u60ac\u5ff5\u7684\u7684\u5c31\u8d70\u4e0a\u4e86 Class-based OOP \u8fd9\u6761\u8def\uff08\u53e6\u4e00\u6761\u8def\u662f Prototype-based OOP\uff09\u3002"),(0,n.kt)("p",null,"Class-based OOP \u7684\u4e00\u4e2a\u7279\u5f81\u662f\u5bf9\u8c61\u7684\u7ed3\u6784\u9700\u8981\u9884\u5148\u58f0\u660e\uff0c\u5e76\u4e14\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u5141\u8bb8\u6539\u53d8\u2014\u2014 C++ \u548c Java \u7684\u4f5c\u8005\u6709\u4e00\u5343\u4e2a\u7406\u7531\u8fd9\u4e48\u5e72\uff0c\u6700\u57fa\u672c\u7684\u539f\u56e0\u5c31\u662f\u6027\u80fd\u8003\u8651\u2014\u2014\u4f46\u8fd9\u6837\u505a\u7684\u4ee3\u4ef7\u9996\u5148\u5c31\u524a\u5f31\u4e86\u7cfb\u7edf\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u66f4\u7cdf\u7cd5\u7684\u662f\uff0cC++ \u548c Java \u4e2d\uff0c\u8fde\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\u3002\u6211\u8fd9\u4e48\u8bf4\u4e00\u90e8\u5206\u670b\u53cb\u53ef\u80fd\u6ca1\u529e\u6cd5\u9a6c\u4e0a\u53cd\u5e94\u8fc7\u6765\u3002\u5176\u5b9e\u5c31\u662f\u8bf4\uff0c\u5728 Smalltalk \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4efb\u4f55\u4e00\u4e2a\u5bf9\u8c61\u968f\u610f\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\uff0c\u53ea\u8981\u4ed6\u4eec\u5bf9\u5916\u754c\u800c\u8a00\u884c\u4e3a\u4e00\u81f4\uff0c\u90a3\u4e48\u7cfb\u7edf\u4f9d\u7136\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\uff0c\u8fd9\u4e00\u70b9\uff0c\u5728\u5927\u5bb6\u66f4\u719f\u6089\u7684 Ruby\u3001Javascript \u7b49\u8bed\u8a00\u4e2d\uff0c\u88ab\u79f0\u4e3a Duck-Type \u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5728 C++ \u548c Java \u4e2d\uff0c\u4f60\u4e0d\u80fd\u968f\u610f\u627e\u4e2a\u5bf9\u8c61 x \u6765\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\u5bf9\u8c61 y\u3002\u5373\u4f7f\u4ed6\u4eec\u62e5\u6709\u5b8c\u5168\u76f8\u540c\u7684\u884c\u4e3a\u4e5f\u4e0d\u884c\u3002\u56e0\u4e3a C++ \u548c Java \u662f Class-based OOP \u6240\u4ee5\u8fde\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\uff01\u8fd9\u79cd\u58f0\u660e\u65b9\u5f0f\u5c31\u662f\u8ba9\u65e0\u6570\u4eba\u6f78\u7136\u6cea\u4e0b\u7684\u2014\u2014\u7ee7\u627f\uff01"),(0,n.kt)("p",null,"\u5373\u4f7f\u4e00\u4e2a\u5bf9\u8c61 x \u548c y \u7684\u884c\u4e3a\u662f\u5b8c\u5168\u4e00\u6837\u7684\uff0c\u4f60\u4e5f\u4e0d\u80fd\u7528 x \u53bb\u66ff\u6362 y\u3002\u5141\u8bb8\u4f60\u66ff\u6362\u7684\u552f\u4e00\u524d\u63d0\u662f\uff0cx \u88ab\u58f0\u660e\u4e3a\u7ee7\u627f\u81ea y \u7684\u3002"),(0,n.kt)("p",null,"\u5728\u6709\u7a7a\u7684\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u518d\u8be6\u7ec6\u8ba8\u8bba\u4e00\u4e0b\u7ee7\u627f\u3002\u4f46\u662f\u5728\u8fd9\u91cc\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5355\u7684\u6765\u8bf4\uff0c\u201c\u7ee7\u627f\u201d\u662f\u4e00\u4eba\u5206\u9970\u4e24\u89d2\u7684\u5178\u578b\u2014\u2014\u5b83\u65e2\u4f5c\u4e3a\u4ee3\u7801\u590d\u7528\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u540c\u65f6\u53c8\u6210\u4e3a\u4e86\u53ef\u66ff\u6362\u6027\u7684\u4e00\u79cd\u58f0\u660e\u3002\u8fd9\u79cd\u8bbe\u8ba1\u975e\u5e38\u5931\u8d25\uff0c\u96be\u4ee5\u4f7f\u7528\u5230\u76f4\u63a5\u5bfc\u81f4\u4e86\u9762\u5411\u5bf9\u8c61\u5728 C++ \u548c Java \u4e2d\u6210\u4e3a\u4e86\u4e00\u4e2a\u9609\u5272\u540e\u7684\u592a\u76d1\u3002")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5f25\u8865\u7ee7\u627f\u7684\u8fd9\u79cd\u7f3a\u9677\uff0c\u4e8e\u662f\u5f15\u5165\u4e86 Interface \uff08\u53ea\u8868\u660e\u53ef\u66ff\u6362\u6027\uff0c\u4e0d\u590d\u7528\u4ee3\u7801\uff09\uff0c\u4f46\u8fd9\u4e5f\u6539\u53d8\u4e0d\u4e86\u4ec0\u4e48\u4e86\u3002\u6bd5\u7adf Interface \u7adf\u7136\u4e5f\u5f00\u59cb\u4e92\u76f8\u73a9\u8d77\u4e86\u7ee7\u627f\u7684\u6e38\u620f\u2026\u2026"),(0,n.kt)("p",null,"\u4e8e\u662f\u6700\u540e\uff0c\u6211\u4eec\u770b\u5230\uff0c\u5c3d\u7ba1 C++ \u548c Java \u4e00\u76f4\u58f0\u79f0\u81ea\u5df1\u662f\u9762\u5411\u5bf9\u8c61\u7684\uff0c\u4f46\u662f\u548c Smalltakl \u4e4b\u7c7b\u7684\u8bed\u8a00\u4e00\u6bd4\uff0c\u8fd9\u79cd\u9762\u5411\u5bf9\u8c61\u7684\u5b9e\u73b0\u51e0\u4e4e\u662f\u4e2a\u53bb\u52bf\u540e\u7684\u592a\u76d1\uff0c\u4ed6\u4eec\u6562\u81ea\u79f0\u4e3a\u7537\u4eba\u771f\u662f\u4e2a\u7b11\u8bdd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5982\u679c\u53ef\u4ee5\u8bf4\u5f97\u76f4\u767d\u4e00\u4e9b\u7684\u8bdd\uff0cC++ \u672c\u8d28\u4e0a\u53ea\u80fd\u7b97\u662f\u4e00\u4e2a\u5e26\u6709\u5c11\u91cf\u9762\u5411\u5bf9\u8c61\u652f\u6301\u7684 C\uff0c\u800c Java \u66f4\u50cf\u662f\u4e00\u4e2a\u53bb\u6389\u4e86\u6307\u9488\uff0c\u5e26\u4e0a\u4e86\u5783\u573e\u56de\u6536\u7684 C++\u3002"),(0,n.kt)("p",null,"\u4f46\u518d\u600e\u4e48\u8bf4\uff0c\u9762\u5411\u5bf9\u8c61\u8fd9\u56de\u4e8b\uff0c\u5728 C++ \u548c Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u91cc\u7b80\u76f4\u90fd\u53ea\u80fd\u7b97\u4e2a\u70b9\u7f00\uff08\u53ef\u6015\u7684\u662f\u8fd9\u4e2a\u70b9\u7f00\u4f1a\u82b1\u6389\u4f60 70% \u7684\u5b66\u4e60\u65f6\u95f4\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u3002\u5728\u7ed3\u6784\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u52a8\u6001\u6027\u3002\u5b83\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u52a8\u6001\u6784\u9020\uff08\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\uff0c\u4e5f\u53ef\u4ee5\u6784\u9020\u4e00\u767e\u4e2a\uff09\uff0c\u52a8\u6001\u9500\u6bc1\u7684\uff1b\u5728\u62bd\u8c61\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u9694\u79bb\u6027\u3002\u5b83\u5e76\u4e0d\u76f4\u63a5\u4f9d\u8d56\u4e8e\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u662f\u901a\u8fc7\u901a\u4fe1\u6765\u4e0e\u4e4b\u534f\u4f5c\u7684\u3002\u53e6\u5916\uff0c\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u662f\u7cfb\u7edf\u5f39\u6027\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6211\u4eec\u90fd\u77e5\u9053\uff0c\u5b9e\u73b0\u4e0a\u8ff0\u7279\u6027\u5728\u76ee\u524d\u7684",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%BC%96%E8%AF%91%E6%8A%80%E6%9C%AF&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u7f16\u8bd1\u6280\u672f"),"\u6761\u4ef6\u4e0b\uff0c\u5f88\u96be\u4fdd\u8bc1\u9ad8\u6027\u80fd\u3002\u6240\u4ee5\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48 C++/Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u8981\u81ea\u6211\u9609\u5272\u7684\u539f\u56e0\u3002\u8fd9\u91cc\u9762\u4e0d\u5f97\u4e0d\u8bf4\u786e\u5b9e\u662f\u900f\u7740\u4e00\u4e1d\u65e0\u5948\u3002"),(0,n.kt)("h2",{id:"85-verse"},"8.5 Verse"),(0,n.kt)("h1",{id:"9-\u62df\u5a32\u54f2\u5b66"},"9. \u62df\u5a32\u54f2\u5b66"),(0,n.kt)("h2",{id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48"},"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u4ef7\u503c\u7531\u4e24\u90e8\u5206\u7ec4\u6210\uff1a"),(0,n.kt)("p",null,"\u4e00\u79cd\u662f\u901a\u8fc7\u89c6\u89c9\u3001\u97f3\u6548\u7b49\u7ed9\u4f60\u5e26\u6765\u5373\u65f6\u7684\u5feb\u4e50\uff1b\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4f5c\u54c1\u627f\u8f7d\u7684\u6545\u4e8b\u3001\u5bf9\u4e16\u754c\u7684\u7406\u89e3\u3001\u4e2a\u4eba\u7684\u751f\u6d3b\u7ecf\u9a8c\u3001\u77e5\u8bc6\u7b49\u4fe1\u606f\u5e26\u7ed9\u4e2a\u4eba\u7684\u7cbe\u795e\u529b\u91cf\uff0c\u8fd9\u79cd\u529b\u91cf\u4e0d\u80fd\u5355\u7eaf\u6bd4\u505a\u77e5\u8bc6\uff0c\u5b83\u66f4\u591a\u662f\u4e30\u5bcc\u6211\u4eec\u7684\u7cbe\u795e\u4e16\u754c\uff0c\u4f46\u662f\u8fd9\u79cd\u4e30\u5bcc\u53ef\u4ee5\u901a\u8fc7\u7ed9\u6211\u67d0\u4e9b\u610f\u8bc6\u4ece\u800c\u4f7f\u6211\u4eec\u5728\u5de5\u4f5c\u4e2d\u521b\u9020\u66f4\u5927\u4ef7\u503c\uff0c\u4f8b\u5982\u5b83\u8ba9\u6211\u4eec\u66f4\u52a0\u79ef\u6781\u3001\u52c7\u6562\u7b49"),(0,n.kt)("p",null,"\u865a\u62df\u4e16\u754c\u4ef7\u503c\u7684\u4ea7\u751f\uff1a"),(0,n.kt)("p",null,"\u521b\u9020\u7684\u8fc7\u7a0b\u548c\u7ed3\u679c\u90fd\u4ea7\u751f\u4ef7\u503c\uff0c\u521b\u9020\u8fc7\u7a0b\u4ea7\u751f\u7684\u4ef7\u503c\u76f8\u5bf9\u4e8e\u521b\u4f5c\u8005\u81ea\u8eab\uff0c\u53c2\u89c1\u5a01\u5ec9\u83ab\u91cc\u65af\u8bba\u8457\uff0c\u5f53\u7136\u9664\u4e86\u521b\u4f5c\u7684\u8fc7\u7a0b\u672c\u8eab\uff0c\u521b\u4f5c\u7684\u4ef7\u503c\u8fd8\u6709\u4e00\u90e8\u4efd\u6765\u6e90\u4e8e\u522b\u4eba\u7684\u8ba4\u53ef\uff0c\u6bd4\u5982\u4f60\u521b\u9020\u7684\u662f\u4e00\u4e2a\u5b8c\u5168\u65e0\u610f\u4e49\u7684\u4eba\uff0c\u9664\u975e\u4f60\u81ea\u5df1\u89c9\u5f97\u5f88\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u80fd\u4f53\u9a8c\u5230\u81ea\u8eab\u5bf9\u8fd9\u4e2a\u521b\u9020\u7684\u4f53\u9a8c\uff0c\u4f46\u5982\u679c\u4f60\u662f\u9884\u671f\u5b83\u53ef\u4ee5\u8ba9\u522b\u4eba\u611f\u5230\u5feb\u4e50\uff0c\u90a3\u4e48\u8fd9\u79cd\u9884\u671f\u4ee5\u53ca\u5b9e\u9645\u7684\u53cd\u9988\u4f1a\u8ba9\u4f60\u611f\u5230\u66f4\u5927\u7684\u5feb\u4e50"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u5feb\u4e50\u5c31\u662f\u4ef7\u503c"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u4f5c\u7684\u5feb\u4e50\uff0c\u4e0d\u4ec5\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u8fc7\u7a0b\uff0c\u66f4\u6765\u6e90\u4e8e\u4f5c\u54c1\u88ab\u5176\u4ed6\u7528\u6237\u6d88\u8d39\u548c\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u5305\u62ec\u53cd\u9988\uff0c\u4ee5\u53ca\u6539\u8fdb\u548c\u518d\u521b\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u521b\u4f5c\u7ed3\u679c\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e0a\u9762\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u901a\u8fc7\u6570\u5b57\u4f5c\u54c1\uff0c\u7279\u522b\u662f\u53d9\u4e8b\u6027\u89c6\u89c9\u827a\u672f\u4f5c\u54c1\u4ea7\u751f\u7684\u4ef7\u503c\uff0c\u4e0d\u5149\u662f\u8fd9\u79cd\u4e0a\u8ff0\u7684\u4ef7\u503c\u672c\u8eab\uff0c\u5979\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u610f\u4e49\u5728\u4e8e\uff1a\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u6211\u4eec\u6240\u6709\u7684\u4e8b\u60c5\u4e00\u822c\u901a\u8fc7\u6587\u5b57\u5f62\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u7406\u8bba\u4e0a\u4efb\u4f55\u6982\u5ff5\u90fd\u53ef\u4ee5\u901a\u8fc7\u7cbe\u51c6\u7684\u6587\u5b57\u8fdb\u884c\u8868\u8ff0\uff0c\u5c31\u50cf\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e00\u6837\uff0c\u4efb\u4f55\u8ba1\u7b97\u673a\u5bf9\u4e00\u6bb5\u7a0b\u5e8f\u7684\u7406\u89e3\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u7136\u800c\u4eba\u7c7b\u8bed\u8a00\u4e0d\u4e00\u6837\uff0c\u4eba\u7c7b\u8bed\u8a00\u7684\u5b57\u9762\u63cf\u8ff0\u901a\u5e38\u90fd\u5e26\u6709\u4e00\u5b9a\u7684\u80cc\u666f\u4fe1\u606f\uff0c\u540c\u6837\u4e00\u6bb5\u8bdd\uff0c\u4e0d\u540c\u80cc\u666f\u4fe1\u606f\u7684\u4eba\u7684\u7406\u89e3\u7a0b\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5e76\u4e14\u8fd9\u79cd\u80cc\u666f\u4fe1\u606f\u6709\u65f6\u5019\u4e0d\u4e00\u5b9a\u662f\u903b\u8f91\u4e0a\u7684\u77e5\u8bc6\uff0c\u8fd8\u6709\u6587\u5316\u3001\u827a\u672f\u3001\u751f\u6d3b\u7ecf\u5386\u7b49\u590d\u6742\u56e0\u7d20\uff0c\u56e0\u6b64\u5bfc\u81f4\u7684\u7ed3\u679c\u5c31\u662f\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("p",null,"\u6211\u544a\u8bc9\u4f60\u8981\u53d8\u5f97\u52c7\u6562\uff0c\u8fd9\u53e5\u8bdd\u5b57\u9762\u610f\u601d\u5f88\u6e05\u6670\uff0c\u4f46\u662f\u5173\u4e8e\u52c7\u6562\u662f\u4ec0\u4e48\uff0c\u4ed6\u53ef\u80fd\u6709\u5f88\u591a\u89e3\u91ca\uff0c\u5230\u5e95\u8981\u505a\u5230\u4ec0\u4e48\u624d\u7b97\u52c7\u6562\uff0c\u6ca1\u6709\u5b9a\u4e49"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u7ed9\u4f60\u770b\u4e86\u4e00\u90e8\u300a\u6307\u73af\u738b\u300b\u6216\u8005\u300a\u970d\u6bd4\u7279\u4eba\u300b\uff0c\u4f60\u9a6c\u4e0a\u5c31\u80fd\u83b7\u5f97\u5f88\u591a\u7cbe\u795e\u4e0a\u7684\u7406\u89e3\uff0c\u8fd9\u91cc\u9762\u4e0d\u5149\u662f\u7535\u5f71\u672c\u8eab\u5305\u542b\u4e86\u66f4\u591a\u4fe1\u606f\uff0c\u4ed6\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u89c6\u89c9\u8bed\u8a00\u3001\u4ee5\u53ca\u878d\u5165\u4f60\u5728\u770b\u8fd9\u4e9b\u8bd7\u53e5\u5185\u5bb9\u548c\u6545\u4e8b\u65f6\u4ea7\u751f\u7684\u81ea\u6211\u60f3\u8c61\u529b\uff0c\u7b49\u7b49\uff0c\u8fd9\u4e9b\u90fd\u662f\u975e\u5b57\u9762\u7684\u4fe1\u606f\u6240\u80fd\u8868\u8fbe\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4f5c\u54c1\u878d\u5165\u7684\u4e0d\u5149\u662f\u521b\u4f5c\u8005\u7684\u7ecf\u9a8c\u77e5\u8bc6\uff0c\u8fd8\u6709\u5f88\u591a\u903b\u8f91\uff0c\u8868\u8fbe\u624b\u6cd5\u7b49\u7b49\u5f88\u590d\u6742\u7684\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u662f\u521b\u4f5c\uff0c\u5b83\u662f\u4e00\u79cd\u8868\u8fbe\u5f62\u5f0f\uff0c\u5b83\u7684\u8868\u8fbe\u80fd\u529b\u8d85\u8d8a\u6587\u5b57\u7684\u5b57\u9762\u610f\u601d\uff0c\u8fd9\u4e5f\u5c31\u662f\u827a\u672f\u521b\u4f5c\u8fd9\u79cd\u4e8b\u7269\u7684\u4ef7\u503c\u6240\u5728"),(0,n.kt)("p",null,"\u4ea4\u6d41\u548c\u793e\u4ea4\u4ea7\u751f\u4ef7\u503c"),(0,n.kt)("h2",{id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48"},"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"RealityIS\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u662f\u4ece\u4e0a\u81f3\u4e0b\u7684\uff0c\u5373\u770b\u5230\u4e0a\u9762\u5e94\u7528\u5c42\u7684\u5f00\u653e\u95ee\u9898\uff0c\u7136\u540e\u627e\u5230\u95ee\u9898\u7684\u6839\u6e90\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u7136\u540e\u518d\u6df1\u5165\u5230\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u8ba1\u7b97\u673a\u4f53\u7cfb\u7ed3\u6784\u7684\u673a\u5236\uff0c\u6700\u540e\u5f97\u51fa\u89e3\u51b3\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddf\u4e00\u822c\u7684\u8f6f\u4ef6\u67b6\u6784\u8fc7\u7a0b\u5f88\u7c7b\u4f3c\uff0c\u7531\u4e1a\u52a1\u5c42\u7684\u9886\u57df\u9700\u6c42\uff0c\u6765\u5f15\u5bfc\u8f6f\u4ef6\u67b6\u6784\u7684\u8bbe\u8ba1\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u6df1\u5165\u5230\u4e86\u7f16\u7a0b\u8bed\u8a00\u8fd9\u4e00\u5c42\u3002\u7136\u800c\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u662f\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\uff0c\u56e0\u6b64\u5fc5\u7136\u5bfc\u81f4\u6cdb\u5316\u6027\u4e0d\u8db3\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u5f53\u6211\u4eec\u5f97\u5230\u8fd9\u5957\u6280\u672f\u67b6\u6784\u4e4b\u540e\uff0c\u518d\u53cd\u5411\u5411\u4e0a\u7406\u89e3\u7684\u65f6\u5019\uff0c\u5374\u53d1\u73b0\u5b83\u5177\u6709\u5f88\u5927\u7684\u901a\u7528\u548c\u6cdb\u534e\u80fd\u529b\uff0c\u8fd9\u4e00\u90e8\u5206\u539f\u56e0\u53ef\u80fd\u662f\u56e0\u4e3a\u6211\u4eec\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u53d1\u751f\u5728\u8bed\u8a00\u8fd9\u4e00\u8f83\u4f4e\u7684\u5c42\u6b21\uff0c\u5e76\u4e14\u6ca1\u6709\u6539\u53d8\u8bed\u8a00\u672c\u8eab\u7684\u673a\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u53e6\u4e00\u65b9\u9762\uff0c\u4e5f\u7531\u4e8e\u6211\u4eec\u5728\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\u6bd4\u8f83\u6ce8\u91cd\u5bf9\u6570\u636e\u7684\u7406\u89e3\uff0c\u5f53\u7136\u8fd9\u91cc\u4e5f\u6709\u5982\u6570\u636e\u9a71\u52a8\u3001\u9ad8\u6027\u80fd\u8ba1\u7b97\u3001\u9ad8\u5ea6\u5e76\u53d1\u7b49\u6280\u672f\u9700\u6c42\u6240\u5f15\u5411\u5bf9\u6570\u636e\u7684\u5173\u6ce8\uff0c\u4e5f\u6709\u523b\u610f\u8fed\u4ee3\u5730\u52a0\u6df1\u5bf9\u6570\u636e\u672c\u8d28\u7684\u601d\u8003\u548c\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5f53\u6211\u4eec\u56de\u8fc7\u5934\u6765\uff0c\u5bf9\u6570\u636e\u6709\u4e86\u66f4\u6df1\u523b\u7684\u7406\u89e3\u548c\u8ba4\u77e5\u4e4b\u540e\uff0c\u4f1a\u53d1\u73b0\uff0c\u4ece\u6839\u6e90\u4e0a\uff0cRealityIS\u7684\u8fd9\u4e9b\u6cdb\u5316\u6027\u80fd\u529b\uff0c\u6765\u6e90\u4e8e\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5f00\u53d1\u548c\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u4f20\u7edf\u4ee5\u786c\u4ef6\u5904\u7406\u5668\u4e3a\u6838\u5fc3\u7684\u7f16\u8bd1\u67b6\u6784\uff0c\u8f6c\u53d8\u4e3a\u4e86\u66f4\u7b26\u5408\u5b9e\u9645\u7269\u7406\u4e16\u754c\u76f4\u89c9\u7684\u673a\u5236\uff0c\u8fd9\u662f\u4e00\u4e2a\u6839\u672c\u6027\u8f6c\u53d8\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u6574\u4e2aRealityIS\u7684\u80fd\u529b\u548c\u601d\u7ef4\uff0c\u90fd\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u57fa\u4e8e\u6570\u636e\u7684\u7f16\u7a0b\u6a21\u578b\u3002\u5305\u62ec\u5982\u89e3\u8026\u3001\u5e76\u53d1\u3001\u6cdb\u578b\u3001\u81ea\u6211\u8fdb\u5316\u5f0f\u7684\u6807\u51c6\u673a\u5236\u7b49\u7b49\uff0c\u8fd9\u4e9b\u672c\u8d28\u4e0a\u90fd\u662f\u4ee5\u6570\u636e\u4e3a\u4e2d\u5fc3\u53bb\u601d\u8003\u624d\u80fd\u5f62\u6210\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5b83\u6709\u4e00\u79cd\u5076\u7136\uff0c\u4e5f\u6709\u5fc5\u7136\uff1b\u5076\u7136\u7684\u662f\u6211\u4eec\u5173\u6ce8\u5230\u6570\u636e\u8fd9\u4e2a\u4e2d\u5fc3\u95ee\u9898\uff0c\u5fc5\u7136\u7684\u662f\u6570\u636e\u4e3a\u4e2d\u5fc3\u7684\u6982\u5ff5\u662f\u4e00\u5957\u80fd\u591f\u4ee5\u771f\u5b9e\u4e16\u754c\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u4f5c\u4e1a\u7684\u89c4\u5219\u3002"),(0,n.kt)("p",null,"\u5c06\u6765\uff0c\u6211\u4eec\u8fd8\u4f1a\u7ee7\u7eed\u5b8c\u5584\u8fd9\u4e00\u6982\u5ff5\uff0c\u6700\u7ec8\uff0cRealityIS\u5c06\u53d8\u4e3a\u4e00\u4e2a\u4ee5\u771f\u5b9e\u4e16\u754c\u7684\u76f4\u89c9\u548c\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u7684\u6784\u5efa\u548c\u8fd0\u884c\uff0c\u8fd9\u5c06\u662f\u4e00\u79cd\u5168\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"mlp",src:l(3405).Z,width:"1400",height:"660"})),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u6df1\u5ea6\u5b66\u4e60\uff0c\u5b83\u7684\u5f88\u591a\u7406\u5ff5\u6765\u81ea\u4e8e\u5bf9\u5927\u8111\u673a\u5236\u7684\u601d\u8003\uff0c\u867d\u7136\u795e\u7ecf\u5143\u7684\u673a\u5236\u5e76\u4e0d\u4e00\u5b9a\u662f\u5927\u8111\u5b9e\u9645\u8fd0\u884c\u7684\u673a\u5236\uff08\u5b9e\u9645\u5f53\u7136\u8981\u590d\u6742\u5f97\u591a\uff09\uff0c\u4f46\u662f\u5b83\u53ef\u80fd\u81f3\u5c11\u662f\u5176\u4e2d\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u601d\u8003\u6293\u4f4f\u4e86\u4e00\u5b9a\u7684\u672c\u8d28\uff0c\u6240\u4ee5\u6700\u7ec8\u57fa\u4e8e\u795e\u7ecf\u5143\u8fd9\u79cd\u7b80\u5355\u7684\u7ed3\u6784\u6784\u5efa\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u80fd\u591f\u5728\u8f83\u5927\u7a0b\u5ea6\u4e0a\u6a21\u62df\u5927\u8111\u7684\u673a\u5236\u3002"),(0,n.kt)("h2",{id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"},"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"BMH-Week-2",src:l(4679).Z,width:"1000",height:"750"})),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236"},"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u662f\u66f4\u6709\u4ef7\u503c\u7684\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"economics",src:l(6463).Z,width:"1920",height:"1280"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h2",{id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf"},"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u5b50\u7cfb\u7edf\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\uff0c\u5b83\u4e5f\u5177\u6709\u9ad8\u5ea6\u7684\u5e76\u53d1\u6027\u3001\u5e76\u884c\u6027\uff0c\u4ee5\u53ca\u9ad8\u5ea6\u7684\u67b6\u6784\u590d\u6742\u5ea6\u7279\u5f81\u3002"),(0,n.kt)("p",null,"\u663e\u7136\u73b0\u6709\u7684\u5e95\u5c42\u8ba1\u7b97\u67b6\u6784\uff0c\u4ee5\u53ca\u4e0a\u5c42\u7684\u8f6f\u4ef6\u5efa\u6784\u90fd\u65e0\u6cd5\u652f\u6491\u8fd9\u6837\u7684\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf\uff0c\u81f3\u5c11\u9700\u8981\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u5e94\u7528\u4e92\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7f16\u8bd1\u548c\u89e3\u91ca"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u7a0b\u5e8f\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u6297\u7834\u574f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5b89\u5168")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\uff0c\u8fd9\u4e0d\u4ec5\u662f\u6280\u672f\u7684\u8981\u6c42\uff0c\u4e5f\u662f\u8fd9\u6837\u7684\u7cfb\u7edf\u7684\u4ef7\u503c\u6240\u5728\u3002\u5fc5\u987b\u5177\u6709\u72ec\u7acb\u5f00\u53d1\u8005\u80fd\u591f\u6269\u5c55\u7cfb\u7edf\u7684\u80fd\u529b\uff0c\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u7a0b\u5e8f\u624d\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u7531\u67d0\u4e2a\u5927\u516c\u53f8\u7ef4\u62a4\u7684\u7a0b\u5e8f\u4e0d\u7ba1\u5728\u89c4\u6a21\u4e0a\u3001\u8fd8\u662f\u529f\u80fd\u4e30\u5bcc\u6027\u4e0a\u90fd\u662f\u4e0d\u8db3\u4ee5\u652f\u6491\u8fd9\u79cd\u9700\u6c42\u3002\u5f53\u7136\u8fd9\u4e48\u591a\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4e5f\u8fd8\u6d89\u53ca\u5230\u66f4\u52a0\u4e25\u683c\u7684\u5b89\u5168\u63a7\u5236\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7a0b\u5e8f\u4f53\u975e\u5e38\u5927\uff0c\u4ee5\u53ca\u6240\u6709\u7a0b\u5e8f\u90fd\u6709\u53ef\u80fd\u4e0d\u65ad\u66f4\u65b0\u548c\u53d8\u5316\uff0c\u56e0\u6b64\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u52a8\u6001\u7f16\u8bd1\u7684\u3002\u7cfb\u7edf\u5fc5\u987b\u80fd\u591f\u968f\u65f6\u7f16\u8bd1\u5355\u4e2a\u7ec4\u4ef6\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5176\u4ed6\u6240\u6709\u7a0b\u5e8f\u3002\u6b64\u5916\uff0c\u6bcf\u4e2a\u6e90\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u4e4b\u95f4\uff0c\u6700\u597d\u8fd8\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5f15\u7528\u6216\u5bfc\u81f4\u975e\u5e38\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b\uff0c\u5373\u4f7f\u7ef4\u62a4\u8fd9\u6837\u7684\u5f15\u7528\u5173\u7cfb\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\u4e8b\u60c5\u3002\u8fd9\u4e5f\u51e0\u4e4e\u5bf9\u7f16\u7a0b\u6a21\u578b\u8fdb\u884c\u4e86\u9650\u5236\uff0c\u4f8b\u5982\u5982\u679c\u8ba9\u7528\u6237\u4f7f\u7528\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u8fdb\u884c\u5f00\u53d1\uff0c\u51e0\u4e4e\u5fc5\u7136\u7684\u7ed3\u679c\u662f\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5f88\u96be\u8fdb\u884c\u7f16\u8bd1\u548c\u89e3\u91ca\u3002\u6211\u4eec\u5fc5\u987b\u4ee5\u67d0\u79cd\u8ba1\u7b97\u67b6\u6784\u7ea7\u522b\u7684\u673a\u5236\uff0c\u4f7f\u53ef\u4ee5\u65e2\u4fdd\u8bc1\u5f00\u53d1\u8005\u5f00\u53d1\u529f\u80fd\u4e0d\u53d7\u9650\u5236\uff0c\u540c\u65f6\u53c8\u80fd\u5c06\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ef4\u6301\u4e00\u5b9a\u7684\u72ec\u7acb\u7ed3\u6784\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u8bed\u8a00\u53ef\u80fd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u8fd8\u5fc5\u987b\u6709\u67d0\u4e9b\u4e2d\u95f4\u62bd\u8c61\u6765\u51cf\u8f7b\u52a8\u6001\u8bed\u8a00\u7684\u6027\u80fd\u5f00\u9500\u3002"),(0,n.kt)("p",null,"\u4ec5\u4ec5\u80fd\u591f\u72ec\u7acb\u7f16\u8bd1\u8fd8\u4e0d\u591f\uff0c\u5b83\u4eec\u8fd8\u9700\u8981\u80fd\u591f\u6309\u9700\u52a0\u8f7d\uff0c\u53ea\u52a0\u8f7d\u5f53\u524d\u4efb\u52a1\u9700\u8981\u7684\u7a0b\u5e8f\u6307\u4ee4\uff0c\u53ea\u521d\u59cb\u5316\u5f53\u524d\u4efb\u52a1\u9700\u8981\u4f7f\u7528\u5230\u7684\u6570\u636e\u3002\u8fd9\u4e5f\u610f\u5473\u7740\u6240\u6709\u7684\u903b\u8f91\u5fc5\u987b\u5c3d\u53ef\u80fd\u4ee5\u6bd4\u8f83\u5c0f\u7c92\u5ea6\u7684\u7ed3\u6784\u7ec4\u7ec7\uff0c\u56e0\u4e3a\u592a\u5927\u7684\u903b\u8f91\u53ef\u80fd\u4f1a\u5b58\u5728\u4e00\u4e9b\u6d6a\u8d39\uff1a\u5185\u5b58\u4e2d\u53ef\u80fd\u4f1a\u5b58\u50a8\u5927\u91cf\u4e0d\u4f1a\u6267\u884c\u5230\u7684\u6307\u4ee4\u548c\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u9700\u8981\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316\u7684\u53e6\u4e00\u4e2a\u539f\u56e0\u662f\u4e3a\u4e86\u5e76\u884c\u5316\uff0c\u5f53\u7a0b\u5e8f\u67b6\u6784\u975e\u5e38\u590d\u6742\u65f6\uff0c\u662f\u5f88\u96be\u8fdb\u884c\u5e76\u884c\u6027\u548c\u5e76\u53d1\u4f18\u5316\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u5c06\u903b\u8f91\u5c3d\u53ef\u80fd\u5355\u5143\u5316\u3001\u72ec\u7acb\u5316\u624d\u6709\u53ef\u80fd\u8fdb\u884c\u7edf\u4e00\u7684\u8c03\u5ea6\u548c\u5206\u53d1\u3002\u5e76\u4e14\u8fd9\u79cd\u5206\u53d1\u4e0d\u5e94\u8be5\u662f\u7531\u5f00\u53d1\u8005\u81ea\u5df1\u6765\u5b9e\u73b0\uff0c\u56e0\u4e3a\u5e73\u53f0\u6ca1\u6709\u529e\u6cd5\u63a7\u5236\u5f00\u53d1\u8005\uff0c\u5982\u679c\u5f00\u53d1\u8005\u6ca1\u6709\u5b8c\u6210\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u90fd\u53d7\u5230\u5f71\u54cd\u3002\u56e0\u6b64\u5fc5\u987b\u662f\u4e00\u79cd\u5e73\u53f0\u7ea7\u7684\u673a\u5236\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5b58\u5728\u7740\u4e0d\u53d7\u63a7\u7684\u4ee3\u7801\uff0c\u56e0\u6b64\u7a33\u5b9a\u6027\u4f1a\u662f\u4e00\u4e2a\u91cd\u5927\u7684\u95ee\u9898\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u8981\u5bf9\u4ee3\u7801\u6709\u4e00\u5b9a\u7684\u5ba1\u6838\u548c\u6d4b\u8bd5\u673a\u5236\uff0c\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u53ef\u80fd\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u5d29\u6e83\u7684\u95ee\u9898\uff0c\u4f8b\u5982\u7531\u4e8e\u7ec4\u4ef6\u8fc7\u671f\u5bfc\u81f4\u7b26\u53f7\u53d8\u5316\u800c\u65e0\u6cd5\u521d\u59cb\u5316\u53d8\u91cf\u65f6\uff0c\u7cfb\u7edf\u8981\u80fd\u591f\u8bc6\u522b\u548c\u820d\u5f03\u8fd9\u6837\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u4fdd\u8bc1\u7cfb\u7edf\u7684\u7a33\u5b9a\u6027\u3002\u7a33\u5b9a\u6027\u7684\u5f88\u5927\u6765\u6e90\u662f\u6570\u636e\u7c7b\u578b\u95ee\u9898\u4ee5\u53ca\u6570\u636e\u6307\u9488\u7684\u6570\u636e\u5408\u6cd5\u6027\u95ee\u9898\uff0cRealityIS\u4fdd\u8bc1\u6240\u6709\u7684\u6570\u636e\u90fd\u662f\u503c\u7c7b\u578b\uff0c\u5e76\u4e14\u80fd\u591f\u68c0\u67e5\u7b26\u53f7\u8868\u7684\u5339\u914d\u5ea6\u4ece\u800c\u675c\u7edd\u7c7b\u578b\u7684\u95ee\u9898\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u7834\u574f\u6027\u4ee3\u7801\u7684\u6267\u884c\u3002"),(0,n.kt)("h2",{id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"},"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h3",{id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h2",{id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c"},"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c"),(0,n.kt)("h2",{id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"},"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h2",{id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(9379).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h2",{id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"},"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"),(0,n.kt)("h3",{id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"},"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"),(0,n.kt)("p",null,"\u8fd9\u662f\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6700\u6838\u5fc3\u7684\u57fa\u7840\u548c\u7406\u5ff5\uff0c\u4e00\u76f4\u4ee5\u6765\uff0c\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\u7684\u7ed3\u6784\u90fd\u662f\u4ee5\u8ba9\u4eba\u4eec\u66f4\u5bb9\u6613\u7406\u89e3\u8f6f\u4ef6\u7684\u6784\u9020\u8fc7\u7a0b\u4e3a\u4e3b\uff0c\u5b83\u7684\u6838\u5fc3\u8fd8\u662f\u56f4\u7ed5\u5e95\u5c42\u7684\u786c\u4ef6\u5bf9\u673a\u5668\u4ee3\u7801\u7684\u6267\u884c\u673a\u5236\uff0c\u6216\u8005\u53ef\u4ee5\u7406\u89e3\u4e3a\u600e\u6837\u8ba9\u4eba\u66f4\u5bb9\u6613\u5730\u7406\u89e3\u673a\u5668\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u903b\u8f91\u3002\u5728\u8fd9\u6837\u7684\u601d\u8def\u80cc\u540e\uff0c\u8bed\u8a00\u5355\u7eaf\u53d8\u6210\u4e3a\u4e00\u4e2a\u673a\u5668\u8bed\u8a00\u7684\u9ad8\u7ea7\u62bd\u8c61\uff0c\u8fd9\u79cd\u62bd\u8c61\u4fdd\u7559\u4e86\u673a\u5668\u6267\u884c\u6307\u4ee4\u7684\u6d41\u7a0b\u548c\u903b\u8f91\uff0c\u800c\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u6309\u7167\u673a\u5668\u7684\u8fd9\u79cd\u903b\u8f91\u53bb\u7f16\u5199\u548c\u7ef4\u62a4\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u673a\u5668\u548c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\uff0c\u5bf9\u4e8e\u4e00\u4ef6\u4e8b\u60c5\uff0c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u4f1a\u628a\u5b83\u4eec\u62c6\u5206\u6210\u5f88\u591a\u6613\u4e8e\u7406\u89e3\u7684\u5b50\u6d41\u7a0b\uff0c\u4f1a\u8fdb\u884c\u4e00\u5b9a\u7684\u89c4\u5212\uff0c\u8bc6\u522b\u5176\u4e2d\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u91cd\u8981\u6027\u7a0b\u5ea6\u7b49\uff0c\u5e76\u53ef\u80fd\u4f1a\u5728\u5b9e\u65bd\u8fc7\u7a0b\u4e2d\u52a8\u6001\u8c03\u6574\uff0c\u6362\u53e5\u8bdd\u8bf4\u4eba\u5904\u7406\u4e8b\u60c5\u65f6\u65f6\u90fd\u8981\u5173\u6ce8\u5168\u5c40\u6027\uff0c\u800c\u964d\u4f4e\u5bf9\u5c40\u90e8\u7ec6\u8282\u7684\u6ce8\u610f\u529b\uff0c\u9664\u975e\u4ed6\u5f00\u59cb\u4e13\u6ce8\u53bb\u5904\u7406\u8fd9\u4e00\u5757\u4e8b\u60c5\uff1b\u673a\u5668\u7684\u903b\u8f91\u5219\u805a\u7126\u4e8e\u4fdd\u8bc1\u628a\u4e8b\u60c5\u505a\u6b63\u786e\uff0c\u5b83\u5fc5\u987b\u8981\u5448\u73b0\u5f88\u6e05\u6670\u7684\u6267\u884c\u6d41\u7a0b\uff0c\u4e3a\u4e86\u66f4\u7cbe\u786e\u5730\u63cf\u8ff0\u6d41\u7a0b\uff0c\u5b83\u4e00\u822c\u4e00\u4ef6\u4e8b\u60c5\u505a\u5b8c\u5c31\u7d27\u63a5\u7740\u5b8c\u6210\u53e6\u4e00\u4ef6\u4e8b\u60c5\uff0c\u539f\u6750\u6599\u4e00\u65e6\u6536\u5230\u5c31\u8981\u7acb\u5373\u8fdb\u884c\u52a0\u5de5\u5904\u7406\uff0c\u5904\u7406\u5b8c\u5c31\u8981\u5f00\u59cb\u8fd0\u8f93\u5165\u5e93\u7b49\u5f85\u3002\u8fd9\u91cc\u9762\u5c31\u4e0d\u7ed9\u7a0b\u5e8f\u5458\u89c4\u5212\u7684\u7a7a\u95f4\uff0c\u5f53\u7136\u7a0b\u5e8f\u5458\u53ef\u4ee5\u53bb\u6784\u5efa\u4e00\u4e9b\u66f4\u6613\u4e8e\u5168\u5c40\u7edf\u7b79\u7ba1\u7406\u3001\u89c4\u5212\u548c\u7406\u89e3\u7684\u67b6\u6784\uff0c\u4f46\u662f\u8fd9\u5f80\u5f80\u9700\u8981\u4ed8\u51fa\u5f88\u5927\u7684\u4ee3\u4ef7\u3002"),(0,n.kt)("p",null,"\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u601d\u60f3\uff0c\u5c31\u662f\u8981\u5728\u4fdd\u8bc1\u4e0e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u6267\u884c\u673a\u5236\u7b49\u4ef7\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u5c31\u662f\u8981\u4fdd\u8bc1\u56fe\u7075\u5b8c\u5907\u6027\uff0c\u8ba9\u7a0b\u5e8f\u7684\u6267\u884c\u6d41\u7a0b\u53ef\u4ee5\u88ab\u66f4\u597d\u5730\u89c4\u5212\u548c\u63a7\u5236\uff0c\u4f7f\u5f97\u4eba\u4eec\u53ef\u4ee5\u4f7f\u7528\u5927\u8111\u7684\u673a\u5236\u6765\u5bf9\u7a0b\u5e8f\u7684\u903b\u8f91\u8fdb\u884c\u7ba1\u7406\u3002\u53ef\u4ee5\u8ba4\u4e3a\u8fd9\u662f\u4e00\u5957\u6784\u5efa\u4e8e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u4e0a\u7684\u8f6f\u4ef6\u67b6\u6784\uff0c\u4f46\u662f\u90a3\u6837\u7684\u5b9e\u73b0\u7ed3\u679c\u53ef\u80fd\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u76f8\u53cd\uff0c\u6211\u4eec\u901a\u8fc7\u6df1\u5165\u5206\u6790\u5e95\u5c42\u51fd\u6570\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u8f6f\u4ef6\u6784\u9020\u7684\u8fc7\u7a0b\u4e2d\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ece\u800c\u66f4\u7b80\u5355\u5730\u5b9e\u73b0\u8f6f\u4ef6\u6784\u9020\u7684\u53ef\u63a7\u5236\u6027\uff0c\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u5c31\u662f\u53ef\u63a7\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u8f6f\u4ef6\u6784\u9020\u601d\u7ef4\u5728\u8fc7\u53bb\u662f\u4ece\u6765\u6ca1\u6709\u7684\uff0c\u4e5f\u662f\u8ddf\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6709\u7740\u672c\u8d28\u533a\u522b\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u8ba4\u4e3a\u5b83\u662f\u7ee7\u51fd\u6570\u5f0f\u7f16\u7a0b\u548c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e4b\u540e\u7684\u7b2c\u4e09\u79cd\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u3002\u8fd9\u6837\u7684\u601d\u7ef4\u8f6c\u53d8\u662f\u975e\u5e38\u57fa\u7840\u3001\u91cd\u8981\u548c\u672c\u8d28\u7684\uff0c\u53ef\u63a7\u6027\u5c06\u7ed9\u8f6f\u4ef6\u5de5\u4e1a\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u5168\u65b0\u7684\u672a\u6765\uff0c\u5c24\u5176\u662f\u4ee5\u4e0b\u4e09\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5f71\u54cd\u4e5f\u53cd\u5e94\u5728\u540e\u7eed\u7684\u53d8\u9769\u56e0\u7d20\u4e4b\u4e2d\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u6709\u5e8f\u548c\u53ef\u63a7\u6027\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u903b\u8f91\u7ec4\u7ec7\u548c\u7ba1\u7406\u53d8\u5f97\u66f4\u7b80\u5355\uff0c\u53ef\u4ee5\u9884\u671f\u4f1a\u6709\u76f8\u8f83\u4e8e\u73b0\u5728\u6307\u6570\u7ea7\u589e\u957f\u7684\u5f00\u53d1\u8005\u4f1a\u53c2\u4e0e\u5230\u8f6f\u4ef6\u5de5\u4e1a\u7684\u751f\u4ea7\u4e2d\uff0c\u751f\u4ea7\u529b\u548c\u521b\u65b0\u90fd\u4f1a\u6709\u5927\u5e45\u63d0\u5347\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u65b0\u7684\u7ec4\u7ec7\u548c\u6267\u884c\u6d41\u7a0b\uff0c\u5c06\u4f1a\u5bf9\u5e95\u5c42\u82af\u7247\u8bbe\u8ba1\u5e26\u6765\u542f\u53d1\uff0c\u8fd9\u53ef\u4ee5\u4fc3\u8fdb\u786c\u4ef6\u7684\u5de8\u5927\u521b\u65b0\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u53ef\u63a7\u6027\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u4e0d\u5149\u662f\u6613\u4e8e\u4eba\u7406\u89e3\u7684\uff0c\u4e5f\u662f\u6613\u4e8e\u673a\u5668\u7406\u89e3\u7684\uff0c\u8fd9\u5c06\u5e26\u6765\u4e24\u4e2a\u65b9\u9762\u7684\u7a81\u7834\uff1a\u4e00\u662f\u7f16\u8bd1\u5668\u672c\u8eab\u80fd\u591f\u66f4\u597d\u5730\u8bc6\u522b\u548c\u7ec4\u7ec7\u7a0b\u5e8f\u7684\u903b\u8f91\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7ba1\u7406\u66f4\u591a\u4e0e\u7a0b\u5e8f\u7ed3\u6784\u76f8\u5173\u7684\u7e41\u7410\u903b\u8f91\uff0c\u4f7f\u7a0b\u5e8f\u5458\u805a\u7126\u4e8e\u4e1a\u52a1\u90e8\u5206\uff1b\u4e8c\u662f\u7ed3\u5408\u6df1\u5ea6\u5b66\u4e60\uff0c\u6211\u4eec\u6709\u673a\u4f1a\u8ba9AI\u751f\u6210\u4e00\u5b9a\u903b\u8f91\u7684\u7a0b\u5e8f\u3002")),(0,n.kt)("h3",{id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"},"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"),(0,n.kt)("p",null,"\u524d\u9762\u7b2c2.1\u8282\u5df2\u7ecf\u8ba8\u8bba\u6700\u7b80\u5355\u7f16\u7a0b\u8bed\u8a00\u7684\u6982\u5ff5\u548c\u7279\u6027\uff0c\u8fd9\u91cc\u8bf4\u660e\u600e\u4e48\u901a\u8fc7\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6765\u5b9e\u73b0\u6700\u7b80\u5355\u7684\u7f16\u7a0b\u8bed\u8a00\uff0cCreationScript\u3002\u5177\u4f53\u6765\u8bb2\uff0c\u8fd9\u662f\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u81ea\u52a8\u7ba1\u7406")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6570\u636e\u8d44\u6e90\u7684\u81ea\u52a8\u7ba1\u7406"))),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u8ba8\u8bba\u53ef\u77e5\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6700\u590d\u6742\u7684\u90e8\u5206\u5728\u4e8e\u628a\u7a0b\u5e8f\u7ed3\u6784\u7684\u6784\u9020\u548c\u63a7\u5236\u5b8c\u5168\u4ea4\u7ed9\u5f00\u53d1\u4eba\u5458\u53bb\u5904\u7406\uff0c\u7f16\u7a0b\u8bed\u8a00\u4e2d\u66f4\u591a\u9700\u8981\u5173\u6ce8\u7684\u6982\u5ff5\u662f\u5173\u4e8e\u8f6f\u4ef6\u7ed3\u6784\u7684\u6784\u9020\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u7b97\u6cd5\u600e\u4e48\u7f16\u5199\u7684\u95ee\u9898\u3002\u5728RealityIS\u4e2d\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u6765\u63a7\u5236\u7a0b\u5e8f\u7684\u7ed3\u6784\uff1a1\uff09\u6211\u4eec\u52a0\u5f3a\u4e86\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u7684\u6784\u5efa\uff0c\u5e76\u628a\u8fd9\u4e9b\u4fe1\u606f\u4fdd\u5b58\u8d77\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\u591f\u6784\u9020\u51fa\u4efb\u4f55\u51fd\u6570\u7ec4\u5408\u7684\u6267\u884c\u987a\u5e8f\uff1b2\uff09\u5bf9\u4e8e\u5177\u4f53\u7684\u7a0b\u5e8f\u903b\u8f91\u7ec4\u5408\uff0c\u901a\u5b9e\u4f53\u5bf9\u8c61\u6765\u8bb0\u5f55\u7a0b\u5e8f\u7684\u529f\u80fd\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u548c\u5b9e\u4f53\u529f\u80fd\u7ed3\u6784\u7684\u4fe1\u606f\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u6784\u9020\u51fa\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u8fd9\u6837\u5c31\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u5fc3\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\uff0c\u4f8b\u5982\u7ee7\u627f\u5173\u7cfb\u3001\u91cd\u8f7d\u5b9e\u73b0\u3001\u591a\u6001\u51fd\u6570\u6d3e\u53d1\uff0c\u751a\u81f3\u624b\u52a8\u7684\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u7b49\u7b49\u7a0b\u5e8f\u7ed3\u6784\u6784\u9020\u6240\u9700\u8981\u505a\u7684\u4e00\u4e9b\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5c06\u5168\u90e8\u7cbe\u529b\u96c6\u4e2d\u4e8e\u4e1a\u52a1\u903b\u8f91\u7684\u5f00\u53d1\u4e0e\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u9700\u8981\u7a0b\u5e8f\u5458\u8fdb\u884c\u7e41\u91cd\u7684\u5904\u7406\uff0c\u5e76\u4e14\u4e0e\u903b\u8f91\u6ca1\u6709\u592a\u5927\u5173\u7cfb\u7684\u662f\u6570\u636e\u7684\u7ba1\u7406\u3002\u4ece\u4e1a\u52a1\u903b\u8f91\u6765\u8bf4\uff0c\u5f00\u53d1\u8005\u672c\u6765\u53ea\u9700\u8981\u5173\u6ce8\u4e1a\u52a1\u6d89\u53ca\u54ea\u4e9b\u6570\u636e\uff0c\u4ee5\u53ca\u4e0d\u540c\u7684\u6570\u636e\u8ddf\u51fd\u6570\u4e4b\u95f4\u662f\u5982\u4f55\u4ea4\u4e92\uff0c\u4f46\u5b9e\u9645\u9664\u4e86\u4e0a\u8ff0\u4efb\u52a1\uff0c\u5f00\u53d1\u8005\u82b1\u8d39\u4e86\u66f4\u591a\u7684\u65f6\u95f4\u53bb\u7ba1\u7406\u6570\u636e\u7684\u521b\u5efa\u3001\u4fee\u6539\u3001\u6301\u4e45\u5316\u3001\u5220\u9664\u7b49\uff0c\u8fd9\u4e9b\u5360\u636e\u7684\u7cbe\u529b\u975e\u5e38\u591a\u3002RealityIS\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5173\u6ce8\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7279\u6027\u4e5f\u662f\u524d\u9762\u6211\u4eec\u8ba8\u8bba\u8fc7\u7684\uff0c\u901a\u8fc7\u5c06\u7a0b\u5e8f\u7ed3\u6784\u7531\u65e0\u5e8f\u8f6c\u5316\u4e3a\u6709\u5e8f\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u53ef\u4ee5\u88ab\u673a\u5668\u7406\u89e3\uff0c\u4ece\u800c\u53ef\u4ee5\u8ba9\u673a\u5668\u5e2e\u6211\u4eec\u5b8c\u6210\u4e00\u4e9b\u7a0b\u5e8f\u6784\u9020\u7684\u4e8b\u60c5\uff0c\u4f7f\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u9762\u5411\u5927\u8111\u7684\u7406\u89e3\uff0c\u800c\u6709\u66f4\u591a\u9762\u5411\u673a\u5668\u7684\u673a\u5236\uff0c\u5b9e\u73b0\u4eba\u548c\u673a\u5668\u7684\u5b8c\u7f8e\u914d\u5408\u548c\u4e92\u8865\u3002"))}k.isMDXComponent=!0},2979:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/20151227220024116-155826feba0f55da04e0ac574f2637b3.jpg"},7903:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/AST-5592d94cf30e7e24589439feeb587560.jpeg"},4679:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/BMH-Week-2-686bbb717fb4b7ddb419ec738f1ec0ba.jpeg"},8369:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Brain-to-Brain-Communication-a56f385e9f7ffc1c0db5114ebff6c151.jpeg"},9456:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-Creative-Mode-85c81437c59bc60970ef01c6bf6e5e01.png"},6:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-bcfc68fd70be596493a83e07ac4978a2.jpeg"},595:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/IMG_2973-05d442834682b06c980380dbfeca49a2.jpg"},4917:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-1-269eb341c1aeb3d47e69340e9f16f58a.png"},8934:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-94b9d092532c47c07b29d9a0a994fc56.png"},5714:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/R-C-1cd6b321f2f0d10c22cb436c82cf89e3.jpeg"},2234:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/RealityIS.005-bbb01a096532b9d457a7cb4fbfb96a40.jpeg"},1377:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/add-c0fef0031b7f32b99f01a937935d1c93.png"},8619:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/blockchain-op-b4a2c1404f3dcf95af920c7cf5ec9147.png"},9300:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/call-stack-d16cc4e022ab0fc0ad74d1f0ecac35d2.jpeg"},3050:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/calling-sequence-6ab7a5989b5667984d84da76e4916b37.jpeg"},326:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/change-5dab6429c98c6c2455ff7bb1f6bc1c61.png"},9460:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/civilization-a7bc89ba9d4cc408d55ea36d809fb337.jpeg"},1077:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc-cannon-af670062d2ec24bad2fb8cd67593bc0c.jpeg"},5813:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc2-a0ba60559161227add4794ba0eddd786.jpeg"},9792:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/complex-system.024-9efc11c76285e095cdd0e1d248089c92.png"},4771:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/composition-e57808b6f16a8b1944f4afd1361a0a01.png"},9306:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/distributed-a89c2bd2fe6959eea73acdaf0dc22f30.png"},7635:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/dynamic-a8dcf87f6abb4a4f87fb2786d9f546c1.png"},6463:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/economics-50ff216d275f497eecf25fa18efefab8.jpeg"},7812:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/env-540070781a6ac0d4b6ca8117f89a14a8.png"},3631:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-a403e17499349f0fd4df5b59f437c43f.jpeg"},9379:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-0e16ea82d71123103fa8a738ce65f4eb.png"},8732:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/is-de628dd839078555017aab17db81094d.png"},397:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-1-c9f4f83a6a4594ce09cdc10038fb2f06.png"},105:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-2-d9c73723eb85ed71a10fae5305f2d51f.png"},6186:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/kokid-fe324d84cfb72dd1040e31aa37ef8aa7.gif"},3405:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/mlp-e52dda254b062984effe40f08310427a.jpeg"},738:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/niantic-opens-lightship-augmented-reality-platform-to-all-developers-fe2e72432380174fb315c4b6f27ea147.webp"},3972:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/obj-com-7f45a33658652fde3b9d4f190300b311.png"},2694:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/pasted-image-21192f0a0fbfabcd68ed3e3b365611e6.jpg"},7216:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/piper-banner-00ac70143f99b2c54633f2a156c5785a.png"},8120:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/reality-7ff4e3bf0a679fda0e1ba07e6c368129.png"},6336:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/realworld-aefc3b13bc81e1f876f6d55fe7fb4087.png"},3896:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/roblox-8225bc76c0c3889f67d33ce4012c6db9.jpg"},7652:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/shortcuts-f64049b04e494cf9bb397dca9f9bee89.png"},4081:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/taichi-kernel-f40d892825bd3ddc34d0a54a5cebca82.png"},2150:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/version-tracking-b45605deef79713e1be373d29c45ad3a.png"},3482:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/virtual-and-reality-881079faa7745b48133693081d1614a6.png"},842:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/vm-il-cd2266988ce34973b9e27af79ae70a1c.png"}}]); \ No newline at end of file diff --git a/assets/js/386fda77.3e5ec425.js b/assets/js/386fda77.3e5ec425.js deleted file mode 100644 index f3d7d84..0000000 --- a/assets/js/386fda77.3e5ec425.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6821],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),s=u(r),d=o,m=s["".concat(l,".").concat(d)]||s[d]||f[d]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[s]="string"==typeof e?e:o,i[1]=c;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(7462),o=(r(7294),r(4137));const a={title:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"},i=void 0,c={unversionedId:"introduction/value",id:"introduction/value",title:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c",description:"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002",source:"@site/docs/introduction/value.md",sourceDirName:"introduction",slug:"/introduction/value",permalink:"/docs/introduction/value",draft:!1,tags:[],version:"current",frontMatter:{title:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"},sidebar:"docsSidebar",previous:{title:"1.5 \u7528\u6237",permalink:"/docs/introduction/user"}},l={},u=[],p={toc:u},s="wrapper";function f(e){let{components:t,...a}=e;return(0,o.kt)(s,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002"),(0,o.kt)("p",null,"\u5f88\u663e\u7136\uff0c\u8fd9\u79cd\u7531\u7528\u6237\u9a71\u52a8\u7684\u5168\u65b0\u4f53\u9a8c\u9700\u6c42\uff0c\u7528\u5f53\u4e0b\u7684\u6280\u672f\u67b6\u6784\u662f\u505a\u4e0d\u5230\u7684\uff0c\u800c\u4e14\u5b83\u7684\u9650\u5236\u7684\u6839\u6e90\u6765\u6e90\u4e8e\u66f4\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u3002\u5728\u8fd1\u51e0\u5341\u5e74\u7684\u8ba1\u7b97\u673a\u65f6\u4ee3\u4e2d\uff0c\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u53d1\u751f\u592a\u6839\u672c\u6027\u53d8\u5316\uff0c\u4f8b\u5982\u6211\u4eec\u80fd\u611f\u77e5\u5230\u7684\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u8bd1\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u4e00\u4e9b10\u5e74\u524d\u7684\u7ecf\u5178\u8457\u540d\u57fa\u672c\u4e0a\u73b0\u5728\u8fd8\u662f\u9002\u7528\u7684"),(0,o.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\u4e5f\u6ca1\u6709\u9769\u547d\u6027\u7684\u53d8\u5316\uff0c\u4e0d\u4ec5\u81f32010\u5e74\u4e4b\u540e\u5f88\u5c11\u63a8\u51fa\u5168\u65b0\u7684\u8bed\u8a00\uff0c\u5927\u90e8\u5206\u8bed\u8a00\u8bbe\u8ba1\u4e5f\u53ea\u662f\u9488\u5bf9\u4e00\u4e9b\u5f00\u53d1\u4f53\u9a8c\u5c42\u9762\u7684\u9009\u62e9\uff0c\u5f88\u591a\u8bed\u8a00\u7684\u6838\u5fc3\u601d\u60f3\u751a\u81f3\u65e9\u57282000\u5e74\u4e4b\u524d\u5c31\u786e\u5b9a")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"add",src:r(910).Z,width:"1920",height:"1080"})),(0,o.kt)("p",null,"\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u662f\u8ba1\u7b97\u67b6\u6784\u6700\u91cd\u8981\u7684\u6307\u5411\uff0c\u56e0\u4e3a\u5b83\u4eec\u8fde\u63a5\u8ba1\u7b97\u673a\u786c\u4ef6\u548c\u5e94\u7528\u8f6f\u4ef6\uff0c\u5b83\u4eec\u7684\u53d8\u9769\u5f80\u5f80\u80fd\u591f\u51b3\u5b9a\u4e0a\u5c42\u8f6f\u4ef6\u5f62\u6001\u7684\u53d8\u9769\uff0c\u4ece\u800c\u51b3\u5b9a\u6280\u672f\u5e26\u7ed9\u6d88\u8d39\u8005\u7684\u53d8\u9769\u3002"),(0,o.kt)("p",null,"\u5f53\u5143\u5b87\u5b99\u5e26\u6765\u771f\u6b63\u5927\u89c4\u6a21\u3001\u4e92\u64cd\u4f5c\u3001\u5927\u5e76\u53d1\u7b49\u7b49\u8fd9\u4e9b\u4f20\u7edf\u8ba1\u7b97\u6a21\u578b\u4e0d\u80fd\u5e94\u4ed8\u7684\u9700\u6c42\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5168\u65b0\u7684\u601d\u8def\uff0c\u5728\u8ba1\u7b97\u67b6\u6784\u5c42\u9762\u521b\u9020\u5168\u65b0\u7684\u589e\u91cf\u4ef7\u503c\uff0c\u624d\u6709\u673a\u4f1a\u9a71\u52a8\u6574\u4e2a\u5143\u5b87\u5b99\u7684\u53d8\u9769\u3002"))}f.isMDXComponent=!0},910:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/add-c0fef0031b7f32b99f01a937935d1c93.png"}}]); \ No newline at end of file diff --git a/assets/js/49b2de74.b79f9acf.js b/assets/js/49b2de74.b79f9acf.js deleted file mode 100644 index 5b7fbfb..0000000 --- a/assets/js/49b2de74.b79f9acf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8712],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/6875c492.baf4982b.js b/assets/js/6875c492.baf4982b.js deleted file mode 100644 index dc68ec0..0000000 --- a/assets/js/6875c492.baf4982b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8610],{2605:(e,t,a)=>{a.r(t),a.d(t,{default:()=>Z});var n=a(7294),l=a(4334),r=a(7325),s=a(3777),o=a(5463),i=a(3702),g=a(3699),c=a(6582),m=a(3672);function u(e){const{metadata:t}=e,{previousPage:a,nextPage:l}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,r.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(m.Z,{permalink:a,title:n.createElement(r.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),l&&n.createElement(m.Z,{permalink:l,title:n.createElement(r.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}var p=a(3647),d=a(9107),h=a(339);function E(e){let{items:t,component:a=h.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(d.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}function b(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function f(e){let{tag:t}=e;const a=b(t);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:a}),n.createElement(p.Z,{tag:"blog_tags_posts"}))}function w(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const o=b(t);return n.createElement(c.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(E,{items:a}),n.createElement(u,{metadata:s}))}function Z(e){return n.createElement(o.FG,{className:(0,l.Z)(i.k.wrapper.blogPages,i.k.page.blogTagPostListPage)},n.createElement(f,e),n.createElement(w,e))}},3132:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(1141),r=a(7410);function s(e){return n.createElement(n.Fragment,null,n.createElement(l.Z,e))}(void 0!==a.g?a.g:window).Prism=r.Z,a(9385)}}]); \ No newline at end of file diff --git a/assets/js/831b5c01.07ee4a6a.js b/assets/js/831b5c01.07ee4a6a.js deleted file mode 100644 index ca5f107..0000000 --- a/assets/js/831b5c01.07ee4a6a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8852],{4469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/8485.28ee2776.js b/assets/js/8485.28ee2776.js deleted file mode 100644 index 7f5a295..0000000 --- a/assets/js/8485.28ee2776.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8485],{4137:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=l(n),p=o,f=d["".concat(c,".").concat(p)]||d[p]||m[p]||a;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=p;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[d]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{"use strict";n.d(t,{Z:()=>q});var r=n(7462),o=n(7294),a=n(1048),i=n(4334),s=n(9200),c=n(107);function l(){const{prism:e}=(0,c.L)(),{colorMode:t}=(0,s.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var u=n(3702),d=n(7594),m=n.n(d);const p=/title=(?["'])(?.*?)\1/,f=/\{(?<range>[\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function h(e,t){const n=e.map((e=>{const{start:n,end:r}=g[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function y(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:a}=t;if(a&&f.test(a)){const e=a.match(f).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=m()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return h(["js","jsBlock"],t);case"jsx":case"tsx":return h(["js","jsBlock","jsx"],t);case"html":return h(["js","jsBlock","html"],t);case"python":case"py":case"bash":return h(["bash"],t);case"markdown":case"md":return h(["html","jsx","bash"],t);default:return h(Object.keys(g),t)}}(r,o),s=n.split("\n"),c=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let m=0;m<s.length;){const e=s[m].match(i);if(!e){m+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?c[l[t]].range+=`${m},`:u[t]?c[u[t]].start=m:d[t]&&(c[d[t]].range+=`${c[d[t]].start}-${m-1},`),s.splice(m,1)}n=s.join("\n");const p={};return Object.entries(c).forEach((e=>{let[t,{range:n}]=e;m()(n).forEach((e=>{p[e]??=[],p[e].push(t)}))})),{lineClassNames:p,code:n}}const b={codeBlockContainer:"codeBlockContainer_Ckt0"};function v(e){let{as:t,...n}=e;const a=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[r,o]=e;const a=t[r];a&&"string"==typeof o&&(n[a]=o)})),n}(l());return o.createElement(t,(0,r.Z)({},n,{style:a,className:(0,i.Z)(n.className,b.codeBlockContainer,u.k.common.codeBlock)}))}const E={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function k(e){let{children:t,className:n}=e;return o.createElement(v,{as:"pre",tabIndex:0,className:(0,i.Z)(E.codeBlockStandalone,"thin-scrollbar",n)},o.createElement("code",{className:E.codeBlockLines},t))}var w=n(3768);const N={attributes:!0,characterData:!0,childList:!0,subtree:!0};function C(e,t){const[n,r]=(0,o.useState)(),a=(0,o.useCallback)((()=>{r(e.current?.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,o.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=N);const r=(0,w.zX)(t),a=(0,w.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,a),()=>t.disconnect()}),[e,r,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const B={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var S={Prism:n(7410).Z,theme:B};function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(){return x=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},x.apply(this,arguments)}var Z=/\r\n|\r|\n/,L=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},j=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)};function O(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}var _=function(e){function t(){for(var t=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];e.apply(this,n),T(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?function(e,t){var n=e.plain,r=Object.create(null),o=e.styles.reduce((function(e,n){var r=n.languages,o=n.style;return r&&!r.includes(t)||n.types.forEach((function(t){var n=x({},e[t],o);e[t]=n})),e}),r);return o.root=n,o.plain=x({},n,{backgroundColor:null}),o}(e.theme,e.language):void 0;return t.themeDict=n})),T(this,"getLineProps",(function(e){var n=e.key,r=e.className,o=e.style,a=x({},O(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),i=t.getThemeDict(t.props);return void 0!==i&&(a.style=i.plain),void 0!==o&&(a.style=void 0!==a.style?x({},a.style,o):o),void 0!==n&&(a.key=n),r&&(a.className+=" "+r),a})),T(this,"getStyleForToken",(function(e){var n=e.types,r=e.empty,o=n.length,a=t.getThemeDict(t.props);if(void 0!==a){if(1===o&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===o&&!r)return a[n[0]];var i=r?{display:"inline-block"}:{},s=n.map((function(e){return a[e]}));return Object.assign.apply(Object,[i].concat(s))}})),T(this,"getTokenProps",(function(e){var n=e.key,r=e.className,o=e.style,a=e.token,i=x({},O(e,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:t.getStyleForToken(a),key:void 0});return void 0!==o&&(i.style=void 0!==i.style?x({},i.style,o):o),void 0!==n&&(i.key=n),r&&(i.className+=" "+r),i})),T(this,"tokenize",(function(e,t,n,r){var o={code:t,grammar:n,language:r,tokens:[]};e.hooks.run("before-tokenize",o);var a=o.tokens=e.tokenize(o.code,o.grammar,o.language);return e.hooks.run("after-tokenize",o),a}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,r=e.code,o=e.children,a=this.getThemeDict(this.props),i=t.languages[n];return o({tokens:function(e){for(var t=[[]],n=[e],r=[0],o=[e.length],a=0,i=0,s=[],c=[s];i>-1;){for(;(a=r[i]++)<o[i];){var l=void 0,u=t[i],d=n[i][a];if("string"==typeof d?(u=i>0?u:["plain"],l=d):(u=j(u,d.type),d.alias&&(u=j(u,d.alias)),l=d.content),"string"==typeof l){var m=l.split(Z),p=m.length;s.push({types:u,content:m[0]});for(var f=1;f<p;f++)L(s),c.push(s=[]),s.push({types:u,content:m[f]})}else i++,t.push(u),n.push(l),r.push(0),o.push(l.length)}i--,t.pop(),n.pop(),r.pop(),o.pop()}return L(s),c}(void 0!==i?this.tokenize(t,r,i,n):[r]),className:"prism-code language-"+n,style:void 0!==a?a.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(o.Component);const z=_,A={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function P(e){let{line:t,classNames:n,showLineNumbers:a,getLineProps:s,getTokenProps:c}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const l=s({line:t,className:(0,i.Z)(n,a&&A.codeLine)}),u=t.map(((e,t)=>o.createElement("span",(0,r.Z)({key:t},c({token:e,key:t})))));return o.createElement("span",l,a?o.createElement(o.Fragment,null,o.createElement("span",{className:A.codeLineNumber}),o.createElement("span",{className:A.codeLineContent},u)):u,o.createElement("br",null))}var I=n(7325);function M(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function $(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const D={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function R(e){let{code:t,className:n}=e;const[r,a]=(0,o.useState)(!1),s=(0,o.useRef)(void 0),c=(0,o.useCallback)((()=>{!function(e,{target:t=document.body}={}){if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const n=document.createElement("textarea"),r=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";const o=document.getSelection(),a=o.rangeCount>0&&o.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}n.remove(),a&&(o.removeAllRanges(),o.addRange(a)),r&&r.focus()}(t),a(!0),s.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,o.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),o.createElement("button",{type:"button","aria-label":r?(0,I.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,I.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,I.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,D.copyButton,r&&D.copyButtonCopied),onClick:c},o.createElement("span",{className:D.copyButtonIcons,"aria-hidden":"true"},o.createElement(M,{className:D.copyButtonIcon}),o.createElement($,{className:D.copyButtonSuccessIcon})))}function H(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const W={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function V(e){let{className:t,onClick:n,isEnabled:r}=e;const a=(0,I.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return o.createElement("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,r&&W.wordWrapButtonEnabled),"aria-label":a,title:a},o.createElement(H,{className:W.wordWrapButtonIcon,"aria-hidden":"true"}))}function F(e){let{children:t,className:n="",metastring:a,title:s,showLineNumbers:u,language:d}=e;const{prism:{defaultLanguage:m,magicComments:f}}=(0,c.L)(),g=d??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??m,h=l(),b=function(){const[e,t]=(0,o.useState)(!1),[n,r]=(0,o.useState)(!1),a=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),s=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");r(n)}),[a]);return C(a,s),(0,o.useEffect)((()=>{s()}),[e,s]),(0,o.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:i}}(),k=function(e){return e?.match(p)?.groups.title??""}(a)||s,{lineClassNames:w,code:N}=y(t,{metastring:a,language:g,magicComments:f}),B=u??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return o.createElement(v,{as:"div",className:(0,i.Z)(n,g&&!n.includes(`language-${g}`)&&`language-${g}`)},k&&o.createElement("div",{className:E.codeBlockTitle},k),o.createElement("div",{className:E.codeBlockContent},o.createElement(z,(0,r.Z)({},S,{theme:h,code:N,language:g??"text"}),(e=>{let{className:t,tokens:n,getLineProps:r,getTokenProps:a}=e;return o.createElement("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(t,E.codeBlock,"thin-scrollbar")},o.createElement("code",{className:(0,i.Z)(E.codeBlockLines,B&&E.codeBlockLinesWithNumbering)},n.map(((e,t)=>o.createElement(P,{key:t,line:e,getLineProps:r,getTokenProps:a,classNames:w[t],showLineNumbers:B})))))})),o.createElement("div",{className:E.buttonGroup},(b.isEnabled||b.isCodeScrollable)&&o.createElement(V,{className:E.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),o.createElement(R,{className:E.codeButton,code:N}))))}function q(e){let{children:t,...n}=e;const i=(0,a.Z)(),s=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),c="string"==typeof s?F:k;return o.createElement(c,(0,r.Z)({key:String(i)},n),s)}},495:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(7325),s=n(107),c=n(3699);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function u(e){let{as:t,id:n,...u}=e;const{navbar:{hideOnScroll:d}}=(0,s.L)();if("h1"===t||!n)return o.createElement(t,(0,r.Z)({},u,{id:void 0}));const m=(0,i.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return o.createElement(t,(0,r.Z)({},u,{className:(0,a.Z)("anchor",d?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n}),u.children,o.createElement(c.Z,{className:"hash-link",to:`#${n}`,"aria-label":m,title:m},"\u200b"))}},6220:(e,t,n)=>{"use strict";n.d(t,{Z:()=>A});var r=n(7294),o=n(4137),a=n(7462),i=n(1514);var s=n(3132);var c=n(3699);var l=n(4334),u=n(7459),d=n(1048),m=n(4639);const p={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function f(e){return!!e&&("SUMMARY"===e.tagName||f(e.parentElement))}function g(e,t){return!!e&&(e===t||g(e.parentElement,t))}function h(e){let{summary:t,children:n,...o}=e;const i=(0,d.Z)(),s=(0,r.useRef)(null),{collapsed:c,setCollapsed:l}=(0,m.u)({initialState:!o.open}),[h,y]=(0,r.useState)(o.open),b=r.isValidElement(t)?t:r.createElement("summary",null,t??"Details");return r.createElement("details",(0,a.Z)({},o,{ref:s,open:h,"data-collapsed":c,className:(0,u.Z)(p.details,i&&p.isBrowser,o.className),onMouseDown:e=>{f(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;f(t)&&g(t,s.current)&&(e.preventDefault(),c?(l(!1),y(!0)):l(!0))}}),b,r.createElement(m.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{l(e),y(!e)}},r.createElement("div",{className:p.collapsibleContent},n)))}const y={details:"details_b_Ee"},b="alert alert--info";function v(e){let{...t}=e;return r.createElement(h,(0,a.Z)({},t,{className:(0,l.Z)(b,y.details,t.className)}))}var E=n(495);function k(e){return r.createElement(E.Z,e)}const w={containsTaskList:"containsTaskList_mC6p"};function N(e){if(void 0!==e)return(0,l.Z)(e,e?.includes("contains-task-list")&&w.containsTaskList)}const C={img:"img_ev3q"};var B=n(3702),S=n(7325);const T="admonition_LlT9",x="admonitionHeading_tbUL",Z="admonitionIcon_kALy",L="admonitionContent_S0QG";const j={note:{infimaClassName:"secondary",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:r.createElement(S.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:r.createElement(S.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:r.createElement(S.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:r.createElement(S.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 16 16"},r.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:r.createElement(S.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},O={secondary:"note",important:"info",success:"tip",warning:"danger"};function _(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=r.Children.toArray(e),n=t.find((e=>r.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),o=r.createElement(r.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:o}}(e.children);return{...e,title:e.title??t,children:n}}const z={head:function(e){const t=r.Children.map(e.children,(e=>r.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...o}=e.props;return r.createElement(e.props.originalType,o)}return e}(e):e));return r.createElement(i.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return r.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,r.isValidElement)(e)&&t.includes(e.props?.mdxType)))?r.createElement("code",e):r.createElement(s.Z,e)},a:function(e){return r.createElement(c.Z,e)},pre:function(e){return r.createElement(s.Z,(0,r.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=r.Children.toArray(e.children),n=t.find((e=>r.isValidElement(e)&&"summary"===e.props?.mdxType)),o=r.createElement(r.Fragment,null,t.filter((e=>e!==n)));return r.createElement(v,(0,a.Z)({},e,{summary:n}),o)},ul:function(e){return r.createElement("ul",(0,a.Z)({},e,{className:N(e.className)}))},img:function(e){return r.createElement("img",(0,a.Z)({loading:"lazy"},e,{className:(t=e.className,(0,l.Z)(t,C.img))}));var t},h1:e=>r.createElement(k,(0,a.Z)({as:"h1"},e)),h2:e=>r.createElement(k,(0,a.Z)({as:"h2"},e)),h3:e=>r.createElement(k,(0,a.Z)({as:"h3"},e)),h4:e=>r.createElement(k,(0,a.Z)({as:"h4"},e)),h5:e=>r.createElement(k,(0,a.Z)({as:"h5"},e)),h6:e=>r.createElement(k,(0,a.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:o,icon:a}=_(e),i=function(e){const t=O[e]??e,n=j[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),j.info)}(n),s=o??i.label,{iconComponent:c}=i,u=a??r.createElement(c,null);return r.createElement("div",{className:(0,l.Z)(B.k.common.admonition,B.k.common.admonitionType(e.type),"alert",`alert--${i.infimaClassName}`,T)},r.createElement("div",{className:x},r.createElement("span",{className:Z},u),s),r.createElement("div",{className:L},t))},mermaid:()=>null};function A(e){let{children:t}=e;return r.createElement(o.Zo,{components:z},t)}},7594:(e,t)=>{function n(e){let t,n=[];for(let r of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,o,a]=t;if(r&&a){r=parseInt(r),a=parseInt(a);const e=r<a?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(a+=e);for(let t=r;t!==a;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},9385:()=>{!function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",r=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+r),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+r+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism)}}]); \ No newline at end of file diff --git a/assets/js/a54713d3.a096338a.js b/assets/js/a54713d3.a096338a.js deleted file mode 100644 index cfd09a3..0000000 --- a/assets/js/a54713d3.a096338a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[9663,6641,9553,2863,7544],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},1005:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},i=void 0,l={type:"mdx",permalink:"/feature/chidori",source:"@site/src/pages/feature/chidori.mdx",frontMatter:{}},s=[],c={toc:s},u="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import aiohttp\nimport asyncio\nfrom typing import List, Optional\nimport json\nfrom chidori import Chidori, GraphBuilder\n\n\nclass Story:\n def __init__(self, title: str, url: Optional[str], score: Optional[float]):\n self.title = title\n self.url = url\n self.score = score\n\n\nHN_URL_TOP_STORIES = "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"\n\n\nasync def fetch_story(session, id):\n async with session.get(f"https://hacker-news.firebaseio.com/v0/item/{id}.json?print=pretty") as response:\n return await response.json()\n\n\nasync def fetch_hn() -> List[Story]:\n async with aiohttp.ClientSession() as session:\n async with session.get(HN_URL_TOP_STORIES) as response:\n story_ids = await response.json()\n\n tasks = []\n for id in story_ids[:30]: # Limit to 30 stories\n tasks.append(fetch_story(session, id))\n\n stories = await asyncio.gather(*tasks)\n\n stories_out = []\n for story in stories:\n story_dict = {k: story.get(k, None) for k in (\'title\', \'url\', \'score\')}\n stories_out.append(Story(**story_dict))\n return stories_out\n\n\n# ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n# Methods for fetching hacker news posts via api\n\nclass ChidoriWorker:\n def __init__(self):\n self.c = Chidori("0", "http://localhost:9800")\n\n async def build_graph(self):\n g = GraphBuilder()\n\n # Create a custom node, we will implement our\n # own handler for this node type\n h = await g.custom_node(\n name="FetchTopHN",\n node_type_name="FetchTopHN",\n output="{ output: String }"\n )\n\n # A prompt node, pulling in the value of the output from FetchTopHN\n # and templating that into the prompt for GPT3.5\n h_interpret = await g.prompt_node(\n name="InterpretTheGroup",\n template="""\n Based on the following list of HackerNews threads, \n filter this list to only launches of new AI projects: {{FetchTopHN.output}}\n """\n )\n await h_interpret.run_when(g, h)\n\n h_format_and_rank = await g.prompt_node(\n name="FormatAndRank",\n template="""\n Format this list of new AI projects in markdown, ranking the most \n interesting projects from most interesting to least. \n \n {{InterpretTheGroup.promptResult}}\n """\n )\n await h_format_and_rank.run_when(g, h_interpret)\n\n # Commit the graph, this pushes the configured graph\n # to our durable execution runtime.\n await g.commit(self.c, 0)\n\n async def run(self):\n # Construct the agent graph\n await self.build_graph()\n\n # Start graph execution from the root\n await self.c.play(0, 0)\n\n # Run the node execution loop\n await self.c.run_custom_node_loop()\n\n\nasync def handle_fetch_hn(node_will_exec):\n stories = await fetch_hn()\n result = {"output": json.dumps([story.__dict__ for story in stories])}\n return result\n\n\nasync def main():\n w = ChidoriWorker()\n await w.c.start_server(":memory:")\n await w.c.register_custom_node_handle("FetchTopHN", handle_fetch_hn)\n await w.run()\n\n\nif __name__ == "__main__":\n asyncio.run(main())\n')))}d.isMDXComponent=!0},9532:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},i=void 0,l={type:"mdx",permalink:"/feature/cogine",source:"@site/src/pages/feature/cogine.mdx",description:"First define a Story struct with editor:",frontMatter:{}},s=[],c={toc:s},u="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"First define a Story struct with editor:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"std",src:n(452).Z,width:"1362",height:"589"})),(0,r.kt)("p",null,"Then define your component's input and output using the above defined struct also with editor:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"std",src:n(5811).Z,width:"1618",height:"504"})),(0,r.kt)("p",null,"Then define your logic flow:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"std",src:n(6453).Z,width:"1614",height:"303"})),(0,r.kt)("p",null,"Finally write your component's code with Lua:"),(0,r.kt)("p",null,"fetch_top_hn.lua:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local story_ids = get_url("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty")\n for i = 1, #story_ids do\n local url = string.format("https://hacker-news.firebaseio.com/v0/item/%s.json?print=pretty", story_ids[i])\n stories[i] = get_url(url)\n end\nend\n')),(0,r.kt)("p",null,"interpret_the_group.lua:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("Based on the following list of HackerNews threads, filter this list to only launches of new AI projects: %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information", prompt)\n if result["ok"] == true then\n for i = 1, #result["content"] do\n local story = {}\n out_stories[i] = result["content"][i]\n end\n end\nend\n')),(0,r.kt)("p",null,"format_and_rank.lua:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("this list of new AI projects in markdown, ranking the most interesting projects from most interesting to least. %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information",prompt)\n\n local msg = "The news with AI topics are:\\n"\n if result["ok"] == true then\n for i = 1, #result["content"] do\n msg = string.format("%s%d. %s\\n",msg,i,result["content"][i]["title"])\n end\n end\n \n message["content"] = msg\n message["receiver"] = "user"\nend\n')))}d.isMDXComponent=!0},6587:(e,t,n)=>{n.r(t),n.d(t,{IconNo:()=>u,IconYes:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},i=void 0,l={type:"mdx",permalink:"/feature/features",source:"@site/src/pages/feature/features.mdx",description:"| Name | Description | LangChain | Chidori | Cogine |",frontMatter:{}},s=[],c=()=>(0,r.kt)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"#25c2a0",width:"24",height:"24"},(0,r.kt)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})),u=()=>(0,r.kt)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"#F87272",width:"24",height:"24"},(0,r.kt)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})),d={toc:s,IconYes:c,IconNo:u},p="wrapper";function m(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"),(0,r.kt)("th",{parentName:"tr",align:"center"},"LangChain"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Chidori"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Cogine"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Decentralized data"),(0,r.kt)("td",{parentName:"tr",align:"left"},"User's data are stored outside of the application and user controls its access permission from the applications"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Interoperability"),(0,r.kt)("td",{parentName:"tr",align:"left"},"One agent can interoperate with any others even it is not developed by a same developer"),(0,r.kt)("td",{parentName:"tr",align:"center"},"limited to agents developed by a same developer and need to call API manually"),(0,r.kt)("td",{parentName:"tr",align:"center"},"limited to agents developed by a same developer and need to call API manually"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Multi-agent collaboration"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Has standard collaborating mechanism between User, System and Agents"),(0,r.kt)("td",{parentName:"tr",align:"center"},"No standard mechanism and need to communicate case by case, also limited to a same developer"),(0,r.kt)("td",{parentName:"tr",align:"center"},"No standard mechanism and need to communicate case by case, also limited to a same developer"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Function/Agent-level sand-boxing"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Every agent and even a function can be isolated so that multi agents come from different can be running in a same memory environment safely"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Conversational computing"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Code can talk to user, system or other agents to ask more information at any function location, the agent will be paused and continue to run when got response."),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Logic-abstraction"),(0,r.kt)("td",{parentName:"tr",align:"left"},"We re-organized the whole program to make developers focused on logic of busniess and forget about the hardware, data and programing language abstraction."),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Visual graph editing"),(0,r.kt)("td",{parentName:"tr",align:"left"},"We build a graph interaction which is as simple as Houdini and as powerful as any turning completed programming language."),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Agent format standard"),(0,r.kt)("td",{parentName:"tr",align:"left"},"We defined a agent format standard to represent a turing completed agent program which can be loaded and runned dynamically so everyone can develop an agent to handle personal needs."),(0,r.kt)("td",{parentName:"tr",align:"center"},"some runtime in-memory agent object"),(0,r.kt)("td",{parentName:"tr",align:"center"},"some runtime in-memory agent object"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Virtual machine & Dynamical loading and running"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Can load and run dynamically"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(u,{mdxType:"IconNo"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"})),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(c,{mdxType:"IconYes"}))))),(0,r.kt)("br",null))}m.isMDXComponent=!0},2667:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},i=void 0,l={type:"mdx",permalink:"/feature/langchain",source:"@site/src/pages/feature/langchain.mdx",frontMatter:{}},s=[],c={toc:s},u="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}))}d.isMDXComponent=!0},7228:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(7294);const r=e=>{let{title:t,description:n,children:r,style:o,titleStyle:i,descriptionStyle:l}=e;return a.createElement("section",{className:"page__section",style:o},a.createElement("div",{className:"container"},a.createElement("h2",{className:"section__header text--center",style:{padding:"10px",...i}},t),n&&a.createElement("p",{className:"text--center",style:{whiteSpace:"pre-wrap",...l}},n),a.createElement("div",{style:{marginTop:"30px"}},r)))}},769:(e,t,n)=>{n.r(t),n.d(t,{default:()=>S});var a=n(7294),r=n(64),o=n(1005),i=n(2667),l=n(9532),s=n(6587),c=n(7228),u=n(7462),d=n(4334),p=n(2957),m=n(6550),f=n(5238),h=n(3609),g=n(2560);function y(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function k(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??y(n);return function(e){const t=(0,h.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function w(e){let{queryString:t=!1,groupId:n}=e;const r=(0,m.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,f._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function N(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=k(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[s,c]=w({queryString:n,groupId:r}),[u,d]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,g.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),p=(()=>{const e=s??u;return b({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{p&&l(p)}),[p]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),c(e),d(e)}),[c,d,o]),tabValues:o}}var v=n(1048);const _={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function x(e){let{className:t,block:n,selectedValue:r,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:s}=(0,p.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=i[n].value;a!==r&&(s(t),o(a))},m=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,d.Z)("tabs",{"tabs--block":n},t)},i.map((e=>{let{value:t,label:n,attributes:o}=e;return a.createElement("li",(0,u.Z)({role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,key:t,ref:e=>l.push(e),onKeyDown:m,onClick:c},o,{className:(0,d.Z)("tabs__item",_.tabItem,o?.className,{"tabs__item--active":r===t})}),n??t)})))}function T(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function E(e){const t=N(e);return a.createElement("div",{className:(0,d.Z)("tabs-container",_.tabList)},a.createElement(x,(0,u.Z)({},e,t)),a.createElement(T,(0,u.Z)({},e,t)))}function I(e){const t=(0,v.Z)();return a.createElement(E,(0,u.Z)({key:String(t)},e))}const C="tabItem_Ymn6";function O(e){let{children:t,hidden:n,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,d.Z)(C,r),hidden:n},t)}var j=n(7325);const S=()=>a.createElement(r.Z,null,a.createElement("div",{className:"container",style:{padding:"50px 20px 50px 20px"},id:"page-pricing"},a.createElement("h1",{className:"text--center"},a.createElement(j.Z,null," Features and benefits")),a.createElement("h2",{className:"text--center",style:{fontWeight:"normal"}},a.createElement(j.Z,null,"The following we list the main features of Cogine, for the details please check the technical documentation.")),a.createElement("br",null),a.createElement(s.default,null),a.createElement(c.Z,{title:a.createElement(j.Z,null,"Development comparison with LangChain and Chidori"),description:a.createElement(j.Z,null,"Basically, in other framework, you have to learn Python language, have to care about the structure of the program and have to learn many architecture design (such as different specific class and its inheritance relationships. In Cogine, the only thing you are care about is your logic, no other programming burden.")},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--8 col--offset-2"},a.createElement("div",{className:"col-demo center"},a.createElement("div",{style:{width:"1020px"}},a.createElement(I,{className:"center"},a.createElement(O,{value:"apple",label:"Cogine",default:!0},a.createElement(l.default,null)),a.createElement(O,{value:"orange",label:"LangChain"},a.createElement(i.default,null)),a.createElement(O,{value:"chidori",label:"Chidori"},a.createElement(o.default,null))))))))))},5811:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/cogine-components-c811dd4b9b3bcee1dcddcd64eeb2e83b.png"},6453:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/cogine-flow-a9536cf3eaca92b6114d933df6f95c55.png"},452:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/cogine-standards-afa43691cf3fe033e9a474df75d9608c.png"}}]); \ No newline at end of file diff --git a/assets/js/a8378f8b.9c5f747b.js b/assets/js/a8378f8b.9c5f747b.js deleted file mode 100644 index 0d08ec2..0000000 --- a/assets/js/a8378f8b.9c5f747b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6330],{2481:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"community"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.86c2df08.js b/assets/js/b2f554cd.86c2df08.js deleted file mode 100644 index 089ddbc..0000000 --- a/assets/js/b2f554cd.86c2df08.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[1477],{10:r=>{r.exports=JSON.parse('{"blogPosts":[{"id":"the-evolution-of-ECS","metadata":{"permalink":"/blog/the-evolution-of-ECS","source":"@site/blog/2023-10-10-the-evolution-of-ECS.md","title":"The Evolution of ECS","description":"","date":"2023-10-10T00:00:00.000Z","formattedDate":"October 10, 2023","tags":[{"label":"Reality World","permalink":"/blog/tags/reality-world"},{"label":"Cogine","permalink":"/blog/tags/cogine"}],"readingTime":0,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"the-evolution-of-ECS","title":"The Evolution of ECS","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World","Cogine"],"hide_table_of_contents":false,"image":"/img/blog/open-source-conference.jpg"},"nextItem":{"title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","permalink":"/blog/reality-world-open-source-conference"}},"content":""},{"id":"reality-world-open-source-conference","metadata":{"permalink":"/blog/reality-world-open-source-conference","source":"@site/blog/2023-10-09-reality-world-open-source-conference.md","title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","description":"\u5443\uff0c\u8fd9\u53c8\u662f\u4e00\u4e2a\u521b\u4e1a\u516c\u53f8\u8425\u9500\u7684\u5671\u5934\u548c\u65b9\u5f0f\u5417\uff1f","date":"2023-10-09T00:00:00.000Z","formattedDate":"October 9, 2023","tags":[{"label":"Reality World","permalink":"/blog/tags/reality-world"},{"label":"Open source","permalink":"/blog/tags/open-source"}],"readingTime":27.215,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"reality-world-open-source-conference","title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World","Open source"],"hide_table_of_contents":false,"image":"/img/blog/open-source-conference.jpg"},"prevItem":{"title":"The Evolution of ECS","permalink":"/blog/the-evolution-of-ECS"},"nextItem":{"title":"Conversational computing: a new programming model empower LLM applications","permalink":"/blog/conversational-computing"}},"content":"**\u5443\uff0c\u8fd9\u53c8\u662f\u4e00\u4e2a\u521b\u4e1a\u516c\u53f8\u8425\u9500\u7684\u5671\u5934\u548c\u65b9\u5f0f\u5417\uff1f**\\r\\n\\r\\n**\u53c8\u53bb\u770b\u4ed6\u4eec\u5ba3\u4f20\u4ea7\u54c1\u4e0d\u8bb2\u6280\u672f\u5417\uff1f**\\r\\n\\r\\n**\u4f60\u76f4\u63a5\u5f00\u6e90\u4e0d\u5c31\u5f97\u4e86\uff0c\u8fd8\u641e\u4ec0\u4e48\u7ebf\u4e0b\u6d3b\u52a8\uff1f**\\r\\n\\r\\n## \u5148\u56de\u7b54\u95ee\u9898\\r\\n\\r\\n\u5173\u4e8e\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c[Reality World](https://realityworld.com/)\u5df2\u7ecf\u614e\u91cd\u51b3\u5b9a\u7531\u521b\u4e1a\u9879\u76ee\u8f6c\u4e3a\u7eaf\u5f00\u6e90\u9879\u76ee\uff0c\u4e5f\u5c31\u662f\u8bf4\u5b83\u540e\u9762\u5c06\u4e0d\u4f1a\u6709\u4e00\u4e2a\u521b\u4e1a\u516c\u53f8\u5b9e\u4f53\u6765\u8fd0\u8425\uff0c\u5b83\u4f1a\u771f\u6b63\u4f9d\u9760\u793e\u533a\u53ca\u5176\u7ec4\u7ec7\u8fdb\u884c\u53d1\u5c55\uff0c\u5c31\u50cfBevy\u7b49\u5f00\u6e90\u9879\u76ee\uff0c\u5f53\u7136\u6211\u80af\u5b9a\u4e5f\u4f1a\u6301\u7eed\u5728\u8fd9\u4e2a\u9879\u76ee\u8fdb\u884c\u8fed\u4ee3\u5f00\u53d1\u3002\u8fd9\u4e5f\u610f\u5473\u7740\u5b83\u4e0d\u518d\u6709\u5546\u4e1a\u5229\u76ca\uff0c\u4efb\u610f\u516c\u53f8\u6216\u4e2a\u4eba\u90fd\u53ef\u4ee5\u4f7f\u7528\u6216\u8005\u57fa\u4e8e\u5b83\u8fdb\u884c\u4fee\u6539\u6216\u6269\u5c55\u3002\\r\\n\\r\\n**\u4e4b\u6240\u4ee5\u8fd9\u6837\u7684\u9009\u62e9\uff0c\u5f88\u5927\u4e00\u4e2a\u539f\u56e0\u662f\uff0c\u6211\u89c9\u5f97\u8fd9\u51e0\u5e74\u6280\u672f\u3001\u73af\u5883\u548c\u4ea7\u54c1\u5f62\u6001\u7684\u53d8\u5316\u548c\u53d1\u5c55\u90fd\u5f88\u5feb\uff0c\u5404\u79cd\u6982\u5ff5\u5f25\u6f2b\u7740\u6574\u4e2a\u4e16\u754c\uff0c\u6211\u8ba4\u8bc6\u548c\u4ea4\u6d41\u8fc7\u5f88\u591a\u6295\u8d44\u4eba\u3001\u521b\u4e1a\u8005\u3001\u5f00\u53d1\u8005\u4ee5\u53ca\u884c\u4e1a\u5f88\u591a\u4e0d\u592a\u61c2\u6280\u672f\u7684\u5404\u79cd\u89d2\u8272\uff0c\u5373\u4f7f\u6700\u806a\u660e\u7684\u4eba\uff0c\u5f80\u5f80\u4e5f\u5f88\u96be\u5728\u4e00\u4e9b\u5173\u4e8e\u6280\u672f\u7684\u7406\u89e3\u4e0a\u8fbe\u6210\u5171\u8bc6\uff0c\u800c\u4e14\u56fd\u5185\u7684\u6574\u4e2a\u73af\u5883\u666e\u904d\u8fd8\u662f\u66f4\u5173\u6ce8\u4e0a\u5c42\u7684\u5e94\u7528\uff0c\u800c\u7845\u8c37\u7684\u5f88\u591a\u4ea7\u54c1\u521b\u65b0\u66f4\u591a\u662f\u6e90\u4e8e\u5bf9\u6280\u672f\u7684\u6df1\u523b\u7406\u89e3\u3002\u6240\u4ee5\u6211\u89c9\u5f97\u7ad9\u5728\u8fd9\u4e2a\u5386\u53f2\u9636\u6bb5\uff0c\u6211\u4eec\u6700\u91cd\u8981\u7684\u662f\u8981\u6709\u4e00\u4e9b\u5173\u4e8e\u6280\u672f\u7684\u57fa\u7840\u8ba8\u8bba\u5f62\u6210\u5171\u8bc6\uff0c\u8981\u6709\u4e00\u4e9b\u5177\u4f53\u800c\u7cfb\u7edf\u7684\u5b9e\u8df5\u800c\u4e0d\u662f\u505c\u7559\u5728\u81c6\u60f3\uff0c\u7136\u540e\u8981\u5c06\u8fd9\u6837\u7684\u57fa\u7840\u5171\u8bc6\u5f00\u653e\u4e3a\u516c\u5171\u8d44\u6e90\uff0c\u5f62\u6210\u4e00\u4e9b\u575a\u5f3a\u7684\u5171\u8bc6\u5e95\u5ea7\uff0c\u7136\u540e\u6709\u4e86\u66f4\u6e05\u6670\u7684\u6280\u672f\u7406\u89e3\uff0c\u4e0a\u5c42\u7684\u521b\u65b0\u624d\u4f1a\u771f\u6b63\u7684\u7e41\u8363\u3002Reality World \u73b0\u5728\u7684\u4f7f\u547d\u5c31\u662f\u5c1d\u8bd5\u53bb\u6210\u4e3a\u5176\u4e2d\u7684\u4e00\u80a1\u5f00\u653e\u529b\u91cf\uff0c\u5b83\u9996\u5148\u63d0\u51fa\u81ea\u5df1\u5bf9\u6280\u672f\u548c\u672a\u6765\u7684\u7cfb\u7edf\u7406\u89e3\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e9b\u7406\u89e3\u6784\u5efa\u4e00\u79cd\u53ef\u4f9b\u5927\u5bb6\u5b66\u4e60\u548c\u8ba8\u8bba\u7684\u5b9e\u8df5\uff0c\u6700\u540e\u5f00\u6e90\u51fa\u6765\u4f9b\u5927\u5bb6\u4f20\u64ad\u3001\u5206\u4eab\u3001\u8ba8\u8bba\u548c\u53d1\u5c55\u3002**\\r\\n\\r\\n\u5173\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5982\u679c\u6709\u670b\u53cb\u53c2\u52a0\u8fc7\u62112018\u5e74\u7684\u5168\u56fd\u56fe\u5f62\u6e32\u67d3\u6280\u672f\u5de1\u8bb2\uff0c\u4e00\u4e2a\u4eba\u56f4\u7ed5\u4e00\u4e2a\u4e3b\u9898\u8bb23\uff5e4\u4e2a\u5c0f\u65f6\uff0c\u5728\u4e2d\u56fd\u8fd9\u79cd\u4f1a\u8bae\u51e0\u4e4e\u662f\u7edd\u65e0\u4ec5\u6709\u7684\uff0c\u90a3\u79cd\u7cfb\u7edf\u548c\u6df1\u5ea6\u8fdc\u4e0d\u662f\u90a3\u79cd15\uff5e45\u5206\u949f\u873b\u8713\u70b9\u6c34\u4e00\u6837\u7684\u611f\u89c9\uff0c\u8fd9\u5c06\u662f\u4e00\u573a\u975e\u5e38\u6df1\u523b\u7684\u6280\u672f\u65c5\u7a0b\uff0c\u6211\u76f8\u4fe1\u6bcf\u4e2a\u4eba\u53ef\u4ee5\u5b66\u5230\u975e\u5e38\u975e\u5e38\u591a\u7684\u77e5\u8bc6\u548c\u7406\u89e3\uff0c\u540e\u9762\u6211\u4f1a\u5927\u6982\u8bf4\u660e\u4f1a\u8bb2\u4ec0\u4e48\u5185\u5bb9\u3002\\r\\n\\r\\n\u5173\u4e8e\u7b2c\u4e09\u4e2a\u95ee\u9898\uff0c\u8fd9\u4e2a\u9879\u76ee\u8ddf\u5176\u5b83\u9879\u76ee\u975e\u5e38\u4e0d\u540c\uff0c\u7b80\u5355\u6765\u8bf4\uff0c\u76f4\u63a5\u5f00\u6e90\u51fa\u6765\u8ba9\u5927\u5bb6\u81ea\u5df1\u7814\u7a76\u4ee3\u7801\u548c\u6587\u6863\u53ef\u80fd\u5e76\u4e0d\u597d\u7406\u89e3\uff0c\u901a\u5e38\u6211\u81ea\u5df1\u6709\u65f6\u5019\u4e5f\u5f88\u96be\u7528\u7b80\u5355\u7684\u51e0\u53e5\u8bdd\u5411\u670b\u53cb\u6216\u6295\u8d44\u4eba\u8bf4\u660eReality World\u662f\u4ec0\u4e48\u3002\u4e00\u65b9\u9762\u662fReality World\u592a\u6280\u672f\uff0c\u6d89\u53ca\u7684\u6bcf\u4e00\u4e2a\u8bbe\u8ba1\u51b3\u7b56\u90fd\u6709\u5f88\u591a\u4e0d\u540c\u5c42\u9762\u7684\u8003\u8651\uff1b\u53e6\u4e00\u65b9\u9762\u5b83\u6d89\u53ca\u7684\u6280\u672f\u9762\u975e\u5e38\u5e7f\uff0c\u4ece\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u3001\u5230\u7f16\u8bd1/\u89e3\u91ca/\u94fe\u63a5\uff0c\u5230\u8fd0\u884c\u65f6\u7684\u865a\u62df\u673a\u3001\u8c03\u5ea6\u548c\u6c99\u76d2\uff0c\u4ee5\u53ca\u8fd8\u6d89\u53ca\u5230\u600e\u6837\u7528\u8fd9\u4e9b\u6280\u672f\u53bb\u89e3\u51b3\u6bd4\u5982\u5143\u5b87\u5b99\u5e94\u7528\u7684\u4e00\u4e9b\u9700\u6c42\u7b49\u7b49\uff1b\u6700\u540e\u5b83\u7684\u76ee\u6807\u4e5f\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u5e94\u7528\u6216\u8005\u4e00\u4e2a\u6846\u67b6\uff0c\u5b83\u662f\u4ecb\u4e8e\u6846\u67b6\u548c\u7f16\u7a0b\u8bed\u8a00\u4e4b\u95f4\u7684\u4e00\u79cd\u7528\u4e8e\u6784\u5efa\u5e94\u7528\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u4f46\u5b83\u672c\u8eab\u4e5f\u4e0d\u662f\u4e00\u79cd\u7f16\u7a0b\u8bed\u8a00\u3002\\r\\n\\r\\n**\u6240\u4ee5\uff0c\u8fd9\u4e48\u591a\u590d\u6742\u7684\u4e8b\u60c5\u8026\u5408\u5728\u4e00\u8d77\uff0c\u6211\u5fc5\u987b\u7528\u8bed\u97f3\u548c\u89c6\u9891\u7684\u65b9\u5f0f\u624d\u80fd\u66f4\u6e05\u6670\u7684\u8868\u8fbe\u5b83\uff0c\u624d\u80fd\u8ba9\u5927\u5bb6\u66f4\u597d\u5730\u7406\u89e3\u8fd9\u4e2a\u9879\u76ee\u7684\u76ee\u7684\uff0c\u4e0d\u7136\u5f00\u6e90\u4e00\u4e2a\u5927\u5bb6\u90fd\u770b\u4e0d\u61c2\u6216\u8005\u8fde\u770b\u61c2\u76ee\u7684\u90fd\u5f88\u590d\u6742\u7684\u9879\u76ee\u6709\u4ec0\u4e48\u610f\u4e49\u5462\uff1f\u4f46\u597d\u6d88\u606f\u662f\uff0c\u5982\u679c\u4f60\u542c\u6211\u4e00\u6b21\u7cfb\u7edf\u7684\u8bb2\u89e3\uff0c\u5b83\u5176\u5b9e\u7406\u89e3\u8d77\u6765\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u8fd9\u79cd\u7b80\u5355\u5b83\u4e0d\u80fd\u7528\u7b80\u5355\u7684\u6587\u5b57\u8868\u8fbe\uff0c\u5426\u5219\u4f60\u53ef\u80fd\u8981\u82b1\u8d39\u8fdc\u8fdc\u5927\u4e8e3\u4e2a\u5c0f\u65f6\u7684\u65f6\u95f4\u624d\u80fd\u66f4\u6e05\u6670\u7684\u7406\u89e3\u8fd9\u4e2a\u9879\u76ee\u7684\u903b\u8f91\u548c\u76ee\u7684\u3002**\\r\\n\\r\\n## Reality World\u662f\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u5c3d\u7ba1\u8fd9\u4e2a\u95ee\u9898\u56de\u7b54\u8d77\u6765\u5f88\u56f0\u96be\uff0c\u4f46\u6211\u8fd8\u662f\u5fc5\u987b\u8981\u5c1d\u8bd5\u7528\u7b80\u5355\u7684\u51e0\u53e5\u8bdd\u89e3\u91ca\u5b83\uff0c\u5426\u5219\u90fd\u4e0d\u77e5\u9053\u5b83\u662f\u4f55\u7269\uff0c\u6211\u4e3a\u4ec0\u4e48\u8981\u53bb\u5173\u6ce8\u8fd9\u4e2a\u9879\u76ee\u548c\u53c2\u52a0\u8fd9\u6b21\u6d3b\u52a8\u5462\uff1f\\r\\n\\r\\n[Reality World](https://realityworld.com/)\u662f\u4e00\u4e2a\u9762\u5411\u5177\u6709**\u201c\u672a\u6765\u7279\u5f81\u201d**\u5e94\u7528\u7684\u5f00\u53d1\u6846\u67b6\u548c\u8fd0\u884c\u65f6\uff0c\u5f00\u53d1\u6846\u67b6\u662f\u6307\u5b83\u662f\u4e00\u4e2a\u7528\u4e8e\u6784\u5efa\u5e94\u7528\u7684\u5de5\u5177\uff0c\u5c31\u50cf\u4f60\u7528\u6e38\u620f\u5f15\u64ce\u53ef\u4ee5\u6784\u5efa\u6e38\u620f\u7a0b\u5e8f\uff0c\u53ea\u4e0d\u8fc7\u73b0\u5728\u5b83\u8fd8\u4e0d\u652f\u6301\u56fe\u5f62\u548cUI\u663e\u793a\uff0c\u4f46\u662f\u5728\u5c06\u6765\u5b83\u5e94\u8be5\u53ef\u4ee5\u6bd4\u8f83\u7b80\u5355\u5730\u96c6\u6210\u4e00\u4e9b\u6e32\u67d3\u5f15\u64ce\u6216\u8005UI\u6846\u67b6\uff0c\u6bd5\u7adf\u8fd9\u90e8\u5206\u7684\u5185\u5bb9\u548c\u5de5\u4f5c\u6d41\u7a0b\u5927\u90e8\u5206\u662f\u6bd4\u8f83\u6210\u719f\u7684\uff0c\u4e5f\u53ef\u4ee5\u5f88\u5bb9\u6613\u5730\u628a\u5b83\u5d4c\u5165\u5230\u5df2\u6709\u7684\u6e38\u620f\u6216\u8005\u5e94\u7528\u4e2d\uff0c\u7528\u4e8e\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u529f\u80fd\u3002\\r\\n\\r\\n\u6240\u8c13**\u672a\u6765\u7279\u5f81**\uff0c\u6211\u4eec\u4e3b\u8981\u6307\u4e09\u4e2a\u5c42\u9762\uff0c\u540e\u9762\u4f1a\u6709\u66f4\u591a\u8ba8\u8bba\uff1a\\r\\n\\r\\n- **\u4e92\u64cd\u4f5c\u6027**\\r\\n- **\u76f8\u4e92\u534f\u4f5c**\\r\\n- **\u53bb\u4e2d\u5fc3\u5316**\\r\\n\\r\\n\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e09\u4e2a\u7279\u6027\u6b63\u5bf9\u5e94\u7740\u5143\u5b87\u5b99\uff08\u4e92\u64cd\u4f5c\u6027\uff09\uff0c\u5927\u6a21\u578b\u5e94\u7528\uff08\u591a\u667a\u80fd\u4f53\u534f\u4f5c\uff09\u4ee5\u53caWeb 3.0\uff08\u53bb\u4e2d\u5fc3\u5316\uff09\u3002\u5c3d\u7ba1\u8fd9\u4e09\u8005\u4e4b\u95f4\u7684\u6982\u5ff5\u4ee5\u53ca\u6280\u672f\u9700\u6c42\u90fd\u662f\u5f88\u6a21\u7cca\u7684\uff0c\u6211\u4eec\u5219\u5c1d\u8bd5\u5728\u8fd9\u4e09\u8005\u4e4b\u95f4\u5bfb\u627e\u4e00\u79cd\u7edf\u4e00\u7684\u8ba1\u7b97\u67b6\u6784\u548c\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u3002\u6240\u4ee5\u8fd9\u5c31\u662fReality World\u6280\u672f\u4e0a\u7684\u590d\u6742\u6027\uff0c\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u601d\u8003\u7684\u662f\u9762\u5411\u672a\u67655~10\u5e74\u7684\u5e94\u7528\u7684\u5f62\u6001\u3002\\r\\n\\r\\nReality World\u6574\u4e2a\u4f53\u7cfb\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a\\r\\n\\r\\n- **Cogine\uff1a**\u662f\u6574\u4e2a\u5e94\u7528\u6784\u5efa\u65b9\u6cd5\u7684\u5e95\u5ea7\u548c\u8fd0\u884c\u65f6\uff0c\u5b83\u5b9a\u4e49\u8fd9\u79cd\u5e94\u7528\u7684\u8868\u8ff0\u683c\u5f0f\uff0c\u4ee5\u53ca\u5bf9\u8fd9\u79cd\u683c\u5f0f\u7684\u52a8\u6001\u89e3\u91ca\u548c\u8fd0\u884c\u65f6\u7684\u5176\u5b83\u529f\u80fd\u3002\u8be5\u8bcd\u7684\u524d\u7f00 *co-* \u53d6\u81ea**Co**mplexity system\uff0c\u6216\u8005**Co**gnitive computing\uff0c\u6216\u8005**Co**nversational computing\uff0c\u8fd9\u4e9b\u672f\u8bed\u90fd\u662fCogine\u80cc\u540e\u7684\u4e00\u4e9b\u6280\u672f\u601d\u60f3\uff1b\u540e\u7f00 *-gine* \u6765\u81ea\u4e8eEn**gine**\u3002\u6240\u4ee5\u53ef\u4ee5\u79f0\u4e4b\u4e3a\u590d\u6742\u5f15\u64ce\uff0c\u8ba4\u77e5\u8ba1\u7b97\u5f15\u64ce\u6216\u8005\u5bf9\u8bdd\u5f0f\u8ba1\u7b97\u5f15\u64ce\uff0c\u5176\u4e2d\u590d\u6742\u7cfb\u7edf\u76f8\u5173\u7684\u4e00\u4e9b\u7406\u8bba\u662f\u5b83\u91cd\u8981\u7684\u4e00\u4e9b\u8bbe\u8ba1\u539f\u5219\u548c\u76ee\u6807\u3002\\r\\n- **Reality Create\uff1a**\u662f\u8fd9\u79cd\u5e94\u7528\u7684\u7f16\u8f91\u5668\u3002\\r\\n- **Reality World\uff1a**\u662f\u8fd9\u79cd\u5e94\u7528\u7684\u4e00\u4e2a\u6a21\u62df\u5668\uff0c\u4efb\u610f\u4e00\u4e2a\u57fa\u4e8eCogine\u5b9a\u4e49\u7684\u683c\u5f0f\u6784\u5efa\u7684\u5e94\u7528\u7a0b\u5e8f\u5305\uff0c\u90fd\u53ef\u4ee5\u88ab\u5b83\u76f4\u63a5\u52a8\u6001\u52a0\u8f7d\u548c\u8fd0\u884c\u3002\u5f53\u7136\u4f5c\u4e3a\u4e00\u4e2a\u9762\u5411\u7528\u6237\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u5b83\u8fd8\u6709\u5176\u5b83\u4e00\u4e9b\u529f\u80fd\uff0c\u6bd4\u5982\u7a0b\u5e8f\u7684\u5b89\u5168\u6388\u6743\u7ba1\u7406\uff0c\u591a\u7a0b\u5e8f\u7684\u5206\u7ec4\u4ee5\u53ca\u7528\u6237\u4e0e\u7a0b\u5e8f\u7684\u4ea4\u4e92\u754c\u9762\u7b49\u7b49\u529f\u80fd\u3002\\r\\n\\r\\n## \u8bb2\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u57fa\u672c\u4e0a\uff0c\u4f1a\u5206\u4eab\u6240\u6709\u5173\u4e8eReality World\u7684\u4e00\u5207\uff0c\u5305\u62ec\u5b83\u7684\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u601d\u8003\uff0c\u5177\u4f53\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u4e00\u4e2a\u5177\u4f53\u7684\u4ee3\u7801\u5b9e\u73b0\u548cDemo\u6f14\u793a\u7b49\u3002\\r\\n\\r\\n\u8ba1\u7b97\u673a\u548c\u6570\u5b57\u5316\u53d1\u5c55\u8fd9\u4e48\u591a\u5e74\uff0c\u6211\u4eec\u5df2\u7ecf\u79ef\u7d2f\u4e86\u975e\u5e38\u591a\u7684\u77e5\u8bc6\u3001\u7406\u8bba\u548c\u65b9\u6cd5\uff0c\u4ece\u7f16\u7a0b\u8bed\u8a00\u3001\u8f6f\u4ef6\u5de5\u7a0b\u5230\u5404\u79cd\u67b6\u6784\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u800c\u4e14\u51e0\u4e4e\u4efb\u4f55\u4e00\u79cd\u65b0\u7684\u7279\u522b\u662f\u504f\u5e95\u5c42\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u5f80\u5f80\u90fd\u9762\u4e34\u7740\u8ddf\u5176\u5b83\u5f88\u591a\u6a21\u5757\u7684\u4ea4\u4e92\u548c\u534f\u4f5c\uff0c\u6240\u4ee5\u4e0e\u5355\u7eaf\u4e86\u89e3\u4e00\u79cd\u65b9\u6cd5\u672c\u8eab\u7684\u77e5\u8bc6\u76f8\u6bd4\uff0c\u5176\u80cc\u540e\u7684\u903b\u8f91\u548c\u8bbe\u8ba1\u601d\u60f3\u6709\u65f6\u5019\u66f4\u4e3a\u91cd\u8981\u3002\\r\\n\\r\\n\u5927\u4f53\u4e0a\uff0c3~4\u4e2a\u5c0f\u65f6\u7684\u6f14\u8bb2\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\\r\\n\\r\\n- \u7ea6\u670940%\u7684\u5185\u5bb9\u8ba8\u8bba\u4e3a\u4ec0\u4e48\u8981\u8fd9\u4e48\u8bbe\u8ba1\\r\\n- \u5176\u5b8360%\u5219\u4ecb\u7ecd\u5177\u6709\u7684\u67b6\u6784\u8bbe\u8ba1\u53ca\u4ee3\u7801\\r\\n\\r\\nReality World\u7684\u76ee\u6807\uff0c\u662f\u8981\u6784\u5efa\u4e00\u79cd\u65b0\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u548c\u6784\u9020\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5\u6700\u57fa\u7840\u7684\u95ee\u9898\u5c31\u662f\u4e3a\u4ec0\u4e48\u8981\u6784\u5efa\u4e00\u79cd\u65b0\u7684\u65b9\u6cd5\uff1f\u6211\u4eec\u5df2\u7ecf\u6709\u975e\u5e38\u6210\u719f\u7684\u5404\u79cd\u4f53\u7cfb\uff0c\u5728\u4f20\u7edf\u7684\u6d41\u7a0b\u4e2d\uff0c\u6bd4\u5982\u8981\u6784\u5efa\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u9996\u5148\u57fa\u672c\u7684\u5404\u79cd\u7f16\u7a0b\u8bed\u8a00\u5982C++\u3001Rust\u3001Python\u3001Javascript\u3001C#\u3001Go\u7b49\u57fa\u672c\u4e0a\u89e3\u51b3\u4e86\u5927\u90e8\u5206\u7684\u903b\u8f91\u7ec4\u7ec7\u548c\u8868\u8fbe\u7684\u95ee\u9898\uff0c\u5269\u4e0b\u7684\u4e3b\u8981\u5c31\u662f\u5728\u663e\u793a\u5c42\u53c8\u4f1a\u6709\u4e0d\u540c\u7684\u9009\u62e9\uff0c\u6bd4\u5982\u8981\u60f3\u5b9e\u73b03D\u7684\u56fe\u5f62\u754c\u9762\uff0c\u81f3\u5c11\u5f97\u9009\u62e9\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u6216\u8005\u5176\u5b83\u5177\u67093D\u6e32\u67d3\u80fd\u529b\u7684\u7ec4\u4ef6\u6216\u8005\u6846\u67b6\uff0c2D\u7684\u754c\u9762\u5219\u6709\u66f4\u591a\u5404\u5f0f\u5404\u6837\u7684\u9009\u62e9\uff0c\u6bd4\u5982iOS\u548cAndroid\u90fd\u6709\u539f\u751f\u7684UI\u4ea4\u4e92\u6846\u67b6\uff0c\u4e5f\u6709\u5176\u5b83\u4e00\u4e9b\u5982React\u3001Flutter\u7b49\u8de8\u5e73\u53f0\u6216\u8005\u57fa\u4e8eWeb\u7684\u5404\u79cd\u6846\u67b6\u3002\\r\\n\\r\\n\u56e0\u6b64\u8fd9\u4e2a\u5176\u5b9e\u662fReality World\u6700\u6838\u5fc3\u8981\u56de\u7b54\u7684\u95ee\u9898\u3002\u4e3a\u4ec0\u4e48\u8981\u8bbe\u8ba1\u4e00\u79cd\u65b0\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u5c06\u4e3b\u8981\u4ece\u4e24\u4e2a\u5c42\u9762\u6765\u56de\u7b54\uff1a\\r\\n\\r\\n- \u5916\u5728\u5c42\u9762\\r\\n- \u5185\u5728\u5c42\u9762\\r\\n\\r\\n**\u5916\u5728\u5c42\u9762** \u662f\u6307\u5728\u7f16\u7a0b\u8bed\u8a00\u548c\u4f20\u7edf\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u4e4b\u5916\u7684\u9700\u6c42\uff0c\u8fd9\u90e8\u5206\u4e5f\u662f\u66f4\u591a\u5bf9\u5e9440%\u7684\u5185\u5bb9\u4e2d\u4e3a\u4ec0\u4e48\u8981\u8fd9\u4e48\u8bbe\u8ba1\u7684\u95ee\u9898\u3002\u8fc7\u53bb\u51e0\u5341\u5e74\u6765\u5e94\u7528\u6784\u9020\u7684\u4f53\u7cfb\u57fa\u672c\u4e0a\u90fd\u662f\u56f4\u7ed5\u6784\u5efa\u4e00\u4e2a\u5355\u4e00\u7684\u7a0b\u5e8f\u4f53\u88ab\u9694\u79bb\u5728\u5355\u4e00\u7684\u5185\u5b58\u4e2d\u8fd0\u884c\u7684\uff0c\u5728\u8fd9\u79cd\u80cc\u666f\u4e0b\uff0c\u8f6f\u4ef6\u4e4b\u95f4\u7684\u529f\u80fd\u901a\u5e38\u90fd\u662f\u76f8\u4e92\u9694\u79bb\u7684\uff0c\u751a\u81f3\u5373\u4f7f\u662f\u5c5e\u4e8e\u540c\u4e00\u4e2a\u7528\u6237\u4e0d\u540c\u5e94\u7528\u4e4b\u95f4\u7684\u6570\u636e\uff0c\u867d\u7136\u770b\u8d77\u6765\u90fd\u662f\u540c\u4e00\u4e2a\u7528\u6237\u7684\u6570\u636e\uff0c\u4f46\u662f\u4e0d\u540c\u7684\u8f6f\u4ef6\u4e4b\u95f4\u5374\u65e0\u6cd5\u8bbf\u95ee\u3002\u8fd9\u79cd\u673a\u5236\u5728\u8fc7\u53bb\u51e0\u5341\u5e74\u90fd\u80fd\u591f\u5f88\u597d\u5730\u89e3\u51b3\u6211\u4eec\u7684\u6570\u5b57\u5316\u7684\u95ee\u9898\uff0c\u76f4\u5230Web 3.0\u548c\u5143\u5b87\u5b99\u7684\u51fa\u73b0\uff0c\u8fd9\u4e24\u79cd\u65b0\u7684\u5e94\u7528\u5f62\u6001\u4f3c\u4e4e\u90fd\u5728\u5c1d\u8bd5\u6784\u5efa\u4e00\u4e2a\u5171\u4eab\u3001\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c\u3002\u8fd9\u8981\u6c42\u5e94\u7528\u4e4b\u95f4\u9700\u8981\u9ad8\u5ea6\u4ea4\u4e92\u80fd\u529b\uff0c\u7136\u800c\u8fd9\u79cd\u9700\u6c42\u548c\u4f20\u7edf\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u662f\u5929\u751f\u76f8\u6096\u7684\uff0c\u4f20\u7edf\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u5efa\u7acb\u5185\u5b58\u9694\u79bb\u7684\u76ee\u7684\u5c31\u662f\u4fdd\u62a4\u6570\u636e\u548c\u5185\u5b58\u4e2d\u6570\u636e\u7684\u5b89\u5168\uff0c\u5b83\u7684\u4e00\u4e2a\u57fa\u672c\u7684\u5b89\u5168\u5e95\u5ea7\u5c31\u662f\u7cfb\u7edf\u7684\u5185\u5b58\u73af\u5883\u4f1a\u4fdd\u62a4\u7a0b\u5e8f\u5185\u6240\u6709\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u5c31\u6ca1\u6709\u592a\u591a\u4e13\u95e8\u9488\u5bf9\u8fd9\u4e9b\u6570\u636e\u7684\u4fdd\u62a4\u63aa\u65bd\uff0c\u4f46\u662f\u5f53\u6211\u4eec\u53bb\u6389\u8fd9\u4e2a\u5185\u5b58\u4fdd\u62a4\uff0c\u8981\u6c42\u5f88\u591a\u533f\u540d\u7684\u8f6f\u4ef6\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u8fdb\u884c\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u8fd9\u79cd\u5b89\u5168\u6027\u600e\u4e48\u4fdd\u8bc1\u3002\u867d\u7136Web Assembly\u548c\u4e00\u4e9b\u5bb9\u5668\u7b49\u6c99\u76d2\u6280\u672f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u89e3\u51b3\u65b9\u6848\uff0c\u4f46\u662f\u6c99\u76d2\u6280\u672f\u672c\u8eab\u66f4\u591a\u662f\u4e3a\u865a\u62df\u5316\u800c\u8bbe\u8ba1\uff0c\u5b83\u7684\u4e3b\u8981\u65b9\u6cd5\u4e5f\u662f\u5efa\u7acb\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u4fdd\u62a4\u673a\u5236\u3002\\r\\n\\r\\n\u56e0\u6b64\uff0c\u672c\u8d28\u4e0a\u9488\u5bf9\u8fd9\u79cd\u65b0\u7684\u9700\u6c42\uff0c\u6211\u4eec\u8981\u91cd\u65b0\u601d\u8003\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u672c\u8eab\u3002\u800c\u8981\u5f00\u53d1\u4e00\u79cd\u65b0\u7684\u601d\u8def\uff0c\u6211\u4eec\u5c31\u5fc5\u987b\u8981\u5f88\u597d\u5730\u7406\u89e3\u73b0\u6709\u5404\u79cd\u6280\u672f\u7684\u539f\u7406\u53ca\u5176\u95ee\u9898\uff0c\u8fd9\u91cc\u6d89\u53ca\u7684\u6280\u672f\u70b9\u6bd4\u5982\u7f16\u8bd1\u5668\u7684\u5bfb\u5740\u8ba1\u7b97\uff0c\u5185\u5b58\u673a\u5236\uff0c\u6c99\u76d2\u6280\u672f\uff0cUSD/LLVM/MLIR\u7b49\u4e00\u4e9b\u5177\u6709\u4e92\u64cd\u4f5c\u548c\u6a21\u5757\u5316\u80fd\u529b\u7684\u6280\u672f\u601d\u60f3\uff0c\u865a\u62df\u673a\u7684\u4f5c\u7528\uff0c\u533a\u5757\u94fe\u4e2d\u4e92\u64cd\u4f5c\u6027\u67b6\u6784\u7684\u4e00\u4e9b\u601d\u60f3\u3002\\r\\n\\r\\n\u9664\u4e86\u5916\u5728\u7684\u9700\u6c42\u548c\u9a71\u52a8\uff0c\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u5728 **\u5185\u5728\u5c42\u9762** \u4e5f\u5b58\u5728\u5f88\u591a\u95ee\u9898\u3002\u4e00\u4e2a\u73b0\u5b9e\u7684\u95ee\u9898\u662f\u7f16\u7a0b\u4ecd\u7136\u662f\u4e00\u4efd\u95e8\u69db\u975e\u5e38\u9ad8\u7684\u5de5\u4f5c\uff0c\u5168\u4e16\u754c\u4f1a\u7f16\u7a0b\u7684\u4eba\u4e0d\u8db30.5%\uff0c\u6240\u4ee5\u8bf4\u6211\u4eec\u4eca\u5929\u7684\u6570\u5b57\u5316\u7684\u7a0b\u5ea6\u662f\u8fdc\u8fdc\u4e0d\u591f\u7684\uff0c\u56e0\u4e3a\u5269\u4e0b\u90a3\u4e48\u591a\u7fa4\u4f53\u80fd\u5e26\u6765\u591a\u5c11\u53ef\u80fd\u6027\u662f\u4e0d\u53ef\u4f30\u91cf\u7684\u3002\u5c3d\u7ba1\u73b0\u5728\u6709\u5927\u6a21\u578b\u8fd9\u79cd\u63d0\u5347\u7f16\u7a0b\u6548\u7387\u7684\u6280\u672f\u548c\u65b9\u6cd5\uff0c\u4f46\u662f\u5728\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u672c\u8eab\u6ca1\u6709\u53d8\u5f97\u66f4\u7b80\u5355\u4e4b\u524d\uff0c\u4e5f\u5f88\u96be\u89e3\u51b3\u5b9e\u8d28\u6027\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u8f6f\u4ef6\u5f00\u53d1\u662f\u7531\u4eba\u53bb\u8868\u8fbe\u4eba\u7c7b\u7406\u89e3\u7684\u903b\u8f91\u6d41\u7a0b\uff0c\u7136\u800c\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u7684\u6838\u5fc3\u62bd\u8c61\u90fd\u8fd8\u662f\u9762\u5411\u786c\u4ef6\u548c\u7f16\u8bd1\u5668\u7684\uff0c\u6211\u4e0d\u662f\u8bf4\u7f16\u7a0b\u8bed\u8a00\u4e00\u5b9a\u8981\u662f\u81ea\u7136\u8bed\u8a00\uff0c\u4f46\u662f\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\u6709\u5f88\u591a\u7684\u6982\u5ff5\u548c\u89c4\u5219\u90fd\u662f\u9762\u5411\u8ba1\u7b97\u673a\u7684\u3002\\r\\n\\r\\n\u9996\u5148\uff0c\u6bd4\u5982\u7a0b\u5e8f\u7684\u6570\u636e\u7ba1\u7406\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4f60\u5fc5\u987b\u8981\u5b9a\u4e49\u6570\u636e\u88ab\u5b58\u653e\u5728\u54ea\u91cc\uff0c\u600e\u4e48\u521d\u59cb\u5316\uff0c\u4ec0\u4e48\u65f6\u5019\u5220\u9664\uff0c\u5f53\u4f60\u9700\u8981\u6267\u884c\u67d0\u4e2a\u5177\u4f53\u903b\u8f91\u7684\u65f6\u5019\uff0c\u5f80\u5f80\u9700\u8981\u641c\u96c6\u5404\u79cd\u4e0a\u4e0b\u6587\u4ee5\u8ba1\u7b97\u6761\u4ef6\uff0c\u8fd9\u4e9b\u6570\u636e\u5145\u65a5\u5728\u5404\u79cd\u7ed3\u6784\u5404\u79cd\u5bf9\u8c61\u4e2d\u4f7f\u7528\u5404\u79cd\u4e0d\u540c\u7684\u65b9\u6cd5\u8fdb\u884c\u5c01\u88c5\u3002\u6211\u4eec\u7f16\u7a0b\u5f88\u591a\u65f6\u95f4\u5c31\u662f\u5728\u7ec4\u7ec7\u8fd9\u79cd\u6570\u636e\uff0c\u51b3\u5b9a\u4ed6\u4eec\u88ab\u600e\u6837\u6784\u9020\u3001\u521d\u59cb\u5316\u548c\u5b58\u653e\u624d\u80fd\u4f7f\u5f97\u83b7\u53d6\u5b83\u4eec\u53d8\u5f97\u66f4\u7b80\u5355\u800c\u7075\u6d3b\uff0c\u800c\u4e14\u8fd9\u79cd\u7ed3\u6784\u4e5f\u590d\u6742\u5f80\u5f80\u8d8a\u6df7\u4e71\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u8fd8\u5bf9\u5e94\u7740\u590d\u6742\u7684\u8fd0\u884c\u65f6\u72b6\u6001\uff0c\u8fd9\u6837\u903b\u8f91\u7684\u6267\u884c\u5c31\u4e0d\u5149\u53d6\u51b3\u4e8e\u6570\u636e\uff0c\u8be5\u53d6\u51b3\u4e8e\u6267\u884c\u65f6\u5b83\u4eec\u7684\u72b6\u6001\uff0c\u8fd9\u6837\u4f60\u5c31\u4e0d\u5f97\u4e0d\u5f88\u597d\u5730\u7ef4\u62a4\u5b83\u4eec\u6b63\u786e\u7684\u72b6\u6001\u3002\\r\\n\\r\\n\u5f53\u4e00\u4e2a\u7a0b\u5e8f\u5458\u5728\u601d\u8defTA\u4ee3\u7801\u4e2d\u7684\u903b\u8f91\u8ddfTA\u601d\u8003\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u67d0\u4e2a\u4e8b\u60c5\u65f6\u601d\u8def\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\uff0c\u5728\u73b0\u5b9e\u4e2d\u6211\u4eec\u5f80\u5f80\u5f88\u5c11\u5173\u6ce8\u4e00\u4e2a\u4e1c\u897f\u7684\u4f4d\u7f6e\u6211\u8981\u628a\u5b83\u653e\u5728\u54ea\u91cc\uff0c\u6211\u53bb\u8bbf\u95ee\u7684\u65f6\u5019\u5b83\u4eec\u7684\u7ec4\u5408\u72b6\u6001\u5bf9\u4e0d\u5bf9\u7b49\uff0c\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u4e00\u5207\u4f3c\u4e4e\u90fd\u662f\u90a3\u4e48\u81ea\u7136\uff0c\u6211\u4eec\u7684\u7cbe\u529b\u90fd\u5728\u5173\u6ce8\u4e8b\u60c5\u7684\u903b\u8f91\u672c\u8eab\u3002\\r\\n\\r\\n\u5176\u6b21\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ec4\u7ec7\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u6211\u4eec\u4eba\u601d\u8def\u73b0\u5b9e\u4e16\u754c\u4e2d\u7684\u95ee\u9898\u901a\u5e38\u662f\u7ebf\u6027\u7684\uff0c\u5148\u505a\u4ec0\u4e48\u518d\u505a\u4ec0\u4e48\uff0c\u6211\u4eec\u5f80\u5f80\u4efb\u610f\u7528\u6d41\u7a0b\u56fe\u628a\u5b83\u753b\u51fa\u6765\uff0c\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4ea4\u6d41\u4e5f\u975e\u5e38\u7b80\u5355\u3002\u7a0b\u5e8f\u7684\u6d41\u7a0b\u5219\u901a\u5e38\u5f88\u96be\u53ef\u89c6\u5316\uff0c\u56e0\u4e3a\u5b83\u7684\u8868\u8fbe\u4e0d\u662f\u7ebf\u6027\u7684\uff0c\u6574\u4e2a\u6d41\u7a0b\u6709\u70b9\u50cf\u4e00\u4e2a\u6df1\u5ea6\u4f18\u5148\u7684\u904d\u5386\u7b97\u6cd5\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u5f00\u59cb\u7684\u8282\u70b9\uff0c\u5b83\u5fc5\u987b\u8fdb\u5165\u6bcf\u4e2a\u51fd\u6570\u7684\u8c03\u7528\u94fe\uff0c\u76f4\u5230\u6240\u6709\u7684\u5b50\u51fd\u6570\u8c03\u7528\u90fd\u7ed3\u675f\u624d\u4f1a\u8fd4\u56de\u6765\u6267\u884c\u4e0b\u4e00\u6b65\u3002\u5c31\u50cf\u6211\u4eec\u4eba\u60f3\u4e8b\u60c5\u662f\u5148\u628a\u603b\u4f53\u6d41\u7a0b\u6b65\u9aa4\u60f3\u597d\uff0c\u518d\u53bb\u89e3\u51b3\u5177\u4f53\u4e00\u4e2a\u4e2a\u7ec6\u8282\u95ee\u9898\uff0c\u8ba1\u7b97\u673a\u7a0b\u5e8f\u662f\u6bcf\u505a\u4e00\u4ef6\u4e8b\u60c5\u90fd\u9700\u8981\u628a\u5b83\u7684\u7ec6\u8282\u5168\u90e8\u505a\u5b8c\uff0c\u7136\u540e\u5f00\u59cb\u4e0b\u4e00\u4ef6\u4e8b\u60c5\u3002\u4f60\u53ef\u4ee5\u8bf4\u6bcf\u4e2a\u51fd\u6570\u5185\u90e8\u5728\u4e0d\u53bb\u770b\u7cfb\u51fd\u6570\u7684\u65f6\u5019\u4e5f\u662f\u7ebf\u6027\u7684\u6d41\u7a0b\uff0c\u4f46\u662f\u4f60\u5f88\u96be\u8fdb\u884c\u53ef\u89c6\u5316\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u51fd\u6570\u5185\u90e8\u7684\u7ec6\u8282\uff0c\u5b83\u4eec\u6ca1\u6709\u4e00\u4e9b\u89c4\u8303\uff0c\u51fd\u6570\u7684\u8f93\u5165\u8f93\u51fa\u53c2\u6570\u5b9a\u4e49\u4e5f\u4e0d\u4e00\u6837\u3002\u66f4\u8981\u547d\u7684\u662f\uff0c\u4f60\u65e0\u6cd5\u5f88\u8f7b\u6613\u5730\u5bf9\u6d41\u7a0b\u8fdb\u884c\u8c03\u8bd5\uff0c\u6bd4\u5982\u60f3\u8df3\u8fc7\u3001\u65b0\u589e\u6216\u8005\u8c03\u6574\u67d0\u4e9b\u6d41\u7a0b\uff0c\u8fd9\u53ef\u80fd\u9700\u8981\u53bb\u4fee\u6539\u6e90\u4ee3\u7801\uff0c\u800c\u6e90\u4ee3\u7801\u901a\u5e38\u4e0d\u662f\u6ce8\u91ca\u90a3\u4e48\u7b80\u5355\uff0c\u56e0\u4e3a\u6709\u4e9b\u6d41\u7a0b\u53ef\u80fd\u4ea7\u751f\u5173\u8054\u6570\u636e\u5bfc\u81f4\u540e\u9762\u7684\u6d41\u7a0b\u6839\u672c\u5c31\u65e0\u6cd5\u6267\u884c\u3002\\r\\n\\r\\n\u6211\u628a\u8fd9\u4e2a\u95ee\u9898\u79f0\u4e3a\u7a0b\u5e8f\u7ed3\u6784\u7684\u95ee\u9898\uff0c\u53ef\u89c1\u6211\u4eec\u4ecd\u7136\u65e0\u6cd5\u7528\u6bd4\u8f83\u7b26\u5408\u76f4\u89c9\u7684\u65b9\u6cd5\u53bb\u6784\u5efa\u903b\u8f91\u6d41\u7a0b\u3002\\r\\n\\r\\n\u6240\u4ee5\u6211\u8ba4\u4e3a\uff0c\u7f16\u7a0b\u8fd9\u4e2a\u4e8b\u60c5\u7684\u95e8\u69db\uff0c\u5176\u5b9e\u5f88\u5927\u7a0b\u5ea6\u4e0a\u5e76\u4e0d\u662f\u6765\u6e90\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u800c\u662f\u5728\u4e0e\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ec4\u7ec7\u548c\u6570\u636e\u7ba1\u7406\u3002\u8fd9\u4e24\u4e2a\u5c42\u9762\u5176\u5b9e\u90fd\u662f\u548c\u7f16\u8bd1\u5668\u548c\u786c\u4ef6\u6709\u5173\uff0c\u6b63\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u9700\u8981\u6309\u7167\u8fd9\u6837\u7684\u65b9\u5f0f\u7f16\u8bd1\u4e3a\u786c\u4ef6\u53ef\u4ee5\u6267\u884c\u7684\u7a0b\u5e8f\uff0c\u6240\u4ee5\u7f16\u7a0b\u8bed\u8a00\u624d\u662f\u8fd9\u4e48\u8bbe\u8ba1\u3002\\r\\n\\r\\n**\u7ed3\u5408\u4e0a\u8ff0\u5916\u5728\u548c\u5185\u5728\u7684\u95ee\u9898\uff0cReality World\u7684\u76ee\u6807\u5c31\u662f\uff0c\u901a\u8fc7\u6df1\u5165\u5206\u6790\u7a0b\u5e8f\u6784\u5efa\u548c\u6267\u884c\u7684\u6574\u4e2a\u8fc7\u7a0b\uff0c\u80fd\u4e0d\u80fd\u8bbe\u8ba1\u51fa\u4e00\u79cd\u65b0\u7684\u65b9\u6cd5\u6d41\u7a0b\u53ef\u4ee5\u540c\u65f6\u89e3\u51b3\u8fd9\u4e24\u4e2a\u95ee\u9898\u3002\u8fd9\u5c31\u662f\u6211\u4eec\u8fd9\u6b21\u6280\u672f\u5206\u4eab\u4f1a\u7684\u91cd\u70b9\u5185\u5bb9**\u3002\\r\\n\\r\\n## \u9762\u5411\u7684\u53d7\u4f17\u7fa4\u4f53\u662f\u8c01\uff1f\\r\\n\\r\\n\u672c\u6b21\u6d3b\u52a8\u4e3b\u8981\u9762\u5411\u4e24\u7c7b\u4eba\u7fa4\uff1a\\r\\n\\r\\n- \u5e0c\u671b\u6df1\u5165\u4e86\u89e3\u76f8\u5173\u6280\u672f\u7684\u5f00\u53d1\u4eba\u5458\\r\\n- \u5e0c\u671b\u901a\u8fc7\u6df1\u5165\u4e86\u89e3\u4e00\u4e9b\u6280\u672f\u7684\u601d\u8def\u6765\u66f4\u597d\u5730\u7406\u89e3\u4e00\u4e9b\u65b0\u7684\u6280\u672f\u6982\u5ff5\u7684\u975e\u6280\u672f\u4eba\u5458\\r\\n\\r\\n\u5bf9\u4e8e\u6280\u672f\u4eba\u5458\uff0c\u5982\u679c\u4f60\u5173\u6ce8\u4ee5\u4e0b\u6280\u672f\uff0c\u4f60\u53ef\u4ee5\u6765\u542c\u542c\u6211\u7684\u7406\u89e3\uff1a\\r\\n\\r\\n- \u6e38\u620f\u5f15\u64ce\u67b6\u6784\\r\\n- ECS/DOTS\\r\\n- USD\\r\\n- LLVM/MLIR\\r\\n- Rust\\r\\n- Web Assembly\\r\\n- \u7f16\u8bd1\u3001\u89e3\u91ca\u3001\u94fe\u63a5\u8fc7\u7a0b\\r\\n- \u9762\u5411\u5bf9\u8c61\\r\\n- \u51fd\u6570\u5f0f\u7f16\u7a0b\\r\\n- LLM\u5e94\u7528\\r\\n- \u5143\u5b87\u5b99\u53ca\u4e92\u64cd\u4f5c\u6027\\r\\n- \u5f00\u653e\u4e16\u754c\u548c\u590d\u6742\u7cfb\u7edf\u67b6\u6784\\r\\n\\r\\n\u5bf9\u4e8e\u975e\u6280\u672f\u4eba\u5458\uff0c\u53ef\u4ee5\u5e2e\u52a9\u4f60\u66f4\u597d\u7684\u7406\u89e3\u4ee5\u4e0b\u6280\u672f\u6982\u5ff5\uff1a\\r\\n\\r\\n- \u5143\u5b87\u5b99\\r\\n- \u5927\u6a21\u578b\u5e94\u7528\u67b6\u6784\\r\\n\\r\\n## \u5f00\u6e90\u7684\u76ee\u7684\u662f\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u6211\u5e0c\u671bReality World\u7684\u5f00\u6e90\u53ef\u4ee5\u5b9e\u73b0\u4ee5\u4e0b\u51e0\u4e2a\u76ee\u7684\uff1a\\r\\n\\r\\n- **\u4e3a\u672a\u67655-10\u5e74\u7684\u6570\u5b57\u4e16\u754c\u57fa\u7840\u67b6\u6784\u7684\u6280\u672f\u53d1\u5c55\u65b9\u5411\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u7684\u89c6\u89d2**\uff0c\u8fd9\u4e2a\u95ee\u9898\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4e0d\u5149\u662f\u6280\u672f\u672c\u8eab\u5c31\u5145\u6ee1\u590d\u6742\u6027\uff0c\u8981\u8003\u8651\u5f88\u591a\u95ee\u9898\uff0c\u540c\u65f6\u5728\u8ba4\u77e5\u4e0a\u53bb\u7406\u89e3\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u6784\u5efa\u4e00\u5957\u6e05\u6670\u7684\u89c6\u89d2\u53bb\u7406\u89e3\u8fd9\u4e9b\u95ee\u9898\uff0c\u4e3a\u540e\u7eed\u7684\u7814\u7a76\u63d0\u4f9b\u4e00\u4e9b\u6709\u4ef7\u503c\u7684\u53c2\u8003\u601d\u8def\u3002\\r\\n- **\u4e3a\u4e0a\u8ff0\u7684\u67b6\u6784\u4f53\u7cfb\u63d0\u4f9b\u4e00\u79cd\u53ef\u884c\u4e14\u7b80\u6613\u7684\u6280\u672f\u5b9e\u73b0\u65b9\u6848**\uff0c\u63d0\u51fa\u4e00\u79cd\u60f3\u6cd5\u6709\u65f6\u5019\u770b\u8d77\u6765\u5f88\u5bb9\u6613\uff0c\u4f8b\u5982\u5f88\u591a\u79d1\u6280\u5a92\u4f53\u4e5f\u63d0\u51fa\u8bb8\u591a\u5bf9\u4e8e\u672a\u6765\u8f6f\u4ef6\u5e94\u7528\u7684\u7545\u60f3\u3002\u4f46\u4e00\u5957\u53ef\u884c\u7684\u6280\u672f\u65b9\u6848\u6d89\u53ca\u5f88\u591a\u7ec6\u8282\uff0c\u4f8b\u5982\u4f60\u5bf9\u73b0\u6709\u6280\u672f\u4f53\u7cfb\u8fdb\u884c\u600e\u6837\u7684\u8c03\u6574\uff0c\u7406\u7531\u548c\u5fc5\u8981\u6027\u662f\u4ec0\u4e48\uff0c\u8c03\u6574\u4e4b\u540e\u5bf9\u5176\u5b83\u6a21\u5757\u7684\u4ea4\u4e92\u65b9\u5f0f\u662f\u600e\u6837\uff0c\u8c03\u6574\u4e4b\u540e\u600e\u6837\u5efa\u7acb\u65b0\u7684\u751f\u6001\uff0c\u7528\u6237\u600e\u6837\u53bb\u5b66\u4e60\u7b49\u7b49\uff0c\u8fd9\u4e00\u5207\u540e\u9762\u6d89\u53ca\u975e\u5e38\u590d\u6742\u7684\u67b6\u6784\u601d\u8003\u3002\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u6709\u4e00\u4e2a\u53ef\u884c\u7684\u6280\u672f\u5b9e\u73b0\u65b9\u6848\uff0c\u624d\u80fd\u8bf4\u660e\u5b83\u7684\u53ef\u884c\u6027\uff0c\u56e0\u6b64\u624d\u5177\u6709\u53c2\u8003\u4ef7\u503c\u3002\\r\\n- **\u4e3a\u7a0b\u5e8f\u5458\u5bf9\u6280\u672f\u7684\u5b66\u4e60\u63d0\u4f9b\u4e00\u4e9b\u4e0d\u540c\u7ef4\u5ea6\u7684\u7406\u89e3**\uff0c\u6211\u4eec\u7a0b\u5e8f\u5458\u7ec8\u6781\u4e00\u751f\u7684\u52aa\u529b\u53ef\u80fd\u90fd\u662f\u5c1d\u8bd5\u53bb\u66f4\u597d\u5730\u7406\u89e3\u8f6f\u4ef6\u6784\u5efa\u7684\u903b\u8f91\u601d\u7ef4\uff0c\u56e0\u4e3a\u8f6f\u4ef6\u7684\u903b\u8f91\u8868\u8fbe\u662f\u6781\u5ea6\u590d\u6742\u7684\uff0c\u8fd9\u79cd\u590d\u6742\u6027\u968f\u7740\u8f6f\u4ef6\u89c4\u6a21\u7684\u589e\u5927\u800c\u6025\u5267\u4e0a\u5347\u3002\u7a0b\u5e8f\u5458\u5e94\u5bf9\u8fd9\u79cd\u6311\u6218\u7684\u6700\u597d\u65b9\u6cd5\uff0c\u5c31\u662f\u5c3d\u53ef\u80fd\u53bb\u66f4\u597d\u5730\u7406\u89e3\u8f6f\u4ef6\u6784\u9020\u7684\u903b\u8f91\u3002\u8fd9\u79cd\u903b\u8f91\u53ef\u80fd\u8d85\u51fa\u5bf9\u4e00\u4e2a\u6280\u672f\u672c\u8eab\u4f5c\u4e3a\u5de5\u5177\u5c5e\u6027\u7684\u638c\u63e1\uff0c\u66f4\u8981\u7406\u89e3\u8fd9\u4e9b\u6280\u672f\u80cc\u540e\u7684\u601d\u60f3\uff0c\u6211\u8ba4\u4e3a\u638c\u63e1\u6280\u672f\u601d\u60f3\u7684\u8861\u91cf\u65b9\u5f0f\u5c31\u662f\u4f60\u6709\u53ef\u80fd\u628a\u5b83\u7528\u4e8e\u8d85\u51fa\u5b83\u672c\u8eab\u88ab\u5b9a\u4e49\u7528\u6765\u89e3\u51b3\u95ee\u9898\u7684\u8303\u56f4\uff0cReality World\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u8fc7\u7a0b\u5145\u6ee1\u7740\u5927\u91cf\u7684\u8fd9\u7c7b\u5bf9\u6280\u672f\u7684\u4e0d\u540c\u89e3\u8bfb\uff0c\u76f8\u4fe1\u80fd\u591f\u63d0\u4f9b\u5f88\u591a\u4e0d\u540c\u7684\u542f\u793a\u4ece\u800c\u52a9\u529b\u6211\u4eec\u638c\u63e1\u6280\u672f\u80cc\u540e\u7684\u601d\u60f3\u3002\\r\\n- **\u501f\u52a9\u793e\u533a\u7684\u529b\u91cf\u53bb\u6316\u6398\u8fd9\u79cd\u65b0\u578b\u6280\u672f\u67b6\u6784\u80fd\u591f\u652f\u6491\u7684\u4ea7\u54c1\u5f62\u6001**\uff0c\u6700\u8fd1\u51e0\u5e74\u5173\u4e8eWeb 3.0\u3001\u5143\u5b87\u5b99\u3001\u4ee5\u53ca\u5927\u6a21\u578bAI\u5e94\u7528\u7684\u6301\u7eed\u4e0d\u65ad\u51fa\u73b0\uff0c\u4eba\u4eec\u5bf9\u672a\u6765\u6570\u5b57\u5316\u7684\u9884\u671f\u4f1a\u8d8a\u6765\u8d8a\u5927\uff0c\u672a\u6765\u7684\u6570\u5b57\u5316\u5f62\u6001\u5fc5\u7136\u4f1a\u53d1\u751f\u4e00\u4e9b\u53d8\u5316\u3002\u4f46\u662f\u76ee\u524d\u5f88\u591a\u56e0\u7d20\u7cc5\u5408\u5728\u4e00\u8d77\u4f7f\u5f97\u6211\u4eec\u5f88\u96be\u53bb\u770b\u5230\u6e05\u695a\u7684\u8def\u5f84\uff0c\u8fd9\u91cc\u9762\u5fc5\u7136\u6d89\u53ca\u5230\u5e95\u5c42\u6280\u672f\u4ee5\u53ca\u4e0a\u5c42\u4ea7\u54c1\u5f62\u6001\u7684\u76f8\u4e92\u9a71\u52a8\u53ca\u8fdb\u5316\uff0c\u4efb\u4f55\u5355\u4e00\u5b9e\u4f53\u53ef\u80fd\u90fd\u5f88\u96be\u4ece\u8fd9\u79cd\u8026\u5408\u4e2d\u770b\u5230\u6e05\u6670\u7684\u903b\u8f91\u3002\u6240\u4ee5Reality World\u805a\u7126\u4e8e\u6280\u672f\u7684\u601d\u8003\uff0c\u5e76\u5c06\u8fd9\u4e9b\u601d\u8003\u5168\u90e8\u5f00\u6e90\uff0c\u7136\u540e\u4e0d\u540c\u7684\u884c\u4e1a\u53ef\u4ee5\u5438\u53d6\u8fd9\u79cd\u601d\u8003\u53bb\u878d\u5165\u81ea\u5df1\u7684\u4ea7\u54c1\u601d\u7ef4\uff0c\u8fd9\u6837\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u5171\u540c\u6765\u7406\u6e05\u672a\u6765\u7684\u601d\u8def\u3002\\r\\n\\r\\n### License\\r\\n\\r\\nReality World\u6240\u6709\u7684\u6e90\u4ee3\u7801\u53ca\u5176\u6280\u672f\u67b6\u6784\u601d\u8def\u5747\u91c7\u7528\u975e\u5e38\u5bbd\u677e\u7684MIT\u5f00\u6e90\u534f\u8bae\uff1a\\r\\n\\r\\n- [MIT license](http://opensource.org/licenses/MIT)\\r\\n\\r\\n## \u5f00\u6e90\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u57fa\u672c\u4e0a\uff0cReality World\u76f8\u5173\u7684\u6240\u6709\u4e00\u5207\u90fd\u4f1a\u5f00\u6e90\uff0c\u5305\u62ec\uff1a\\r\\n\\r\\n- \u6838\u5fc3\u4ee3\u7801\\r\\n- \u6574\u7406\u624b\u7a3f\uff1a\u5927\u698220\u591a\u4e07\u5b57\u6211\u6574\u6574\u4e00\u5e74\u8bb0\u5f55\u7684\u4e00\u4e9b\u601d\u8003\u3001\u53c2\u8003\u4fe1\u606f\u548c\u8d44\u6599\\r\\n- \u67b6\u6784\u6587\u6863\uff1a\u91cd\u65b0\u6574\u7406\u7684\u7cfb\u7edf\u6027\u7684\u6280\u672f\u6587\u6863\uff0c\u5927\u698210\u591a\u4e07\u5b57\\r\\n- \u767d\u76ae\u4e66\\r\\n\\r\\n### \u5f00\u6e90\u4fe1\u606f\\r\\n\\r\\n\u6d3b\u52a8\u7ed3\u675f\u540e\u5c06\u4f1a\u4e0a\u4f20\u4ee3\u7801\uff0c\u4ed3\u5e93\u5730\u5740\uff1a\\r\\n\\r\\nhttps://github.com/Cogine/RealityWorld\\r\\n\\r\\n### \u5f00\u6e90\u793e\u533a\u7fa4\\r\\n\\r\\n\u7531\u4e8e\u4eba\u6570\u95ee\u9898\u4ee5\u53ca\u5e7f\u544a\u592a\u591a\uff0c\u8bf7\u5148\u52a0\u6211\u5fae\u4fe1\u518d\u793e\u533a\u7fa4\uff1aARealityWorld\\r\\n\\r\\n## \u6d3b\u52a8\u4fe1\u606f\\r\\n\\r\\n**\u65f6\u95f4**\uff1a2023.10.22\\r\\n\\r\\n**\u5730\u70b9\uff1a**\u4e0a\u6d77\u5e02\u957f\u5b81\u533a\u957f\u5b81\u8def1189\u53f7 \u957f\u5b81\u6765\u798f\u58eb\u529e\u516c\u697cT2\u5ea726\u697c \u4e9a\u9a6c\u900a\u6f14\u64ad\u5385\\r\\n\\r\\n| \u65f6\u95f4 | \u5185\u5bb9 |\\r\\n| :----- | ---- |\\r\\n| 13: 20 | \u7b7e\u5230 |\\r\\n| 14: 00 | \u6280\u672f\u5206\u4eab |\\r\\n| 17: 00 | \u5f00\u653e\u8ba8\u8bba |\\r\\n| 18: 00 | \u6d3b\u52a8\u7ed3\u675f |\\r\\n\\r\\n## \u8054\u7cfb\u6211\\r\\n\\r\\n\u5206\u4eab\u8005\uff1a\u79e6\u6625\u6797\\r\\n\\r\\nReality World \u521b\u59cb\u4eba\uff0c\u524d\u534e\u4e3a\u6cb3\u56fe\u6838\u5fc3\u6210\u5458\uff0c[\u300a\u5168\u5c40\u5149\u7167\u6280\u672f\u300b](https://github.com/ElvisQin/thegibook)\u300a\u6211\u6240\u7406\u89e3\u7684Cocos2d-x\u300b\u4f5c\u8005\u3002\\r\\n\\r\\n\u81ea\u53bb\u5e74\u4ece\u534e\u4e3a\u79bb\u804c\u72ec\u81ea\u521b\u4e1a\u63a2\u7d22\u4e00\u5e74\u534a\uff0c\u81f4\u529b\u4e8e\u601d\u8003\u548c\u63a2\u7d22\u80fd\u591f\u4e3a\u7528\u6237\u4f53\u9a8c\u548c\u751f\u6d3b\u5e26\u6765\u5168\u65b0\u4ef7\u503c\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u73b0\u5c06\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u6beb\u65e0\u4fdd\u7559\u5f00\u6e90\u7ed9\u793e\u533a\uff0c\u6211\u5c06\u75283\u4e2a\u5c0f\u65f6\u975e\u5e38\u7cfb\u7edf\u3001\u5168\u9762\u5730\u5206\u4eab\u6211\u6240\u6709\u7684\u601d\u8003\u548c\u6280\u672f\u7406\u89e3\u3002\\r\\n\\r\\n\u6b22\u8fce\u5404\u4f4d\u670b\u53cb\u4e0e\u6211\u4ea4\u6d41\u548c\u8ba8\u8bba\uff0c\u6211\u7684\u5fae\u4fe1\uff1aARealityWorld\u3002\\r\\n\\r\\n## \u5b98\u7f51\u5730\u5740\\r\\n\\r\\nhttps://realityworld.com/\\r\\n\\r\\n## \u62a5\u540d\u5730\u5740\\r\\n\\r\\nhttps://9371398676573.huodongxing.com/event/1723877940100"},{"id":"conversational-computing","metadata":{"permalink":"/blog/conversational-computing","source":"@site/blog/2023-10-04-conversational-computing/index.md","title":"Conversational computing: a new programming model empower LLM applications","description":"Citation","date":"2023-10-04T00:00:00.000Z","formattedDate":"October 4, 2023","tags":[{"label":"Reality World","permalink":"/blog/tags/reality-world"},{"label":"Cogine","permalink":"/blog/tags/cogine"}],"readingTime":0.28,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"conversational-computing","title":"Conversational computing: a new programming model empower LLM applications","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World","Cogine"],"hide_table_of_contents":false},"prevItem":{"title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","permalink":"/blog/reality-world-open-source-conference"},"nextItem":{"title":"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003","permalink":"/blog/thinking"}},"content":"## Citation\\r\\n\\r\\nCited as:\\r\\n\\r\\n> Qin, Chunlin. (Oct 2023). Conversational computing: a new programming model empower LLM applications. Reality World. https://realityworld.com/blog/conversational-computing.\\r\\n\\r\\nOr\\r\\n\\r\\n```latex\\r\\n@article{qin2023conversational,\\r\\n title = \\"Conversational computing: a new programming model empower LLM applications\\",\\r\\n author = \\"Qin, Chunlin\\",\\r\\n journal = \\"Reality World\\",\\r\\n year = \\"2023\\",\\r\\n month = \\"Oct\\",\\r\\n url = \\"https://realityworld.com/blog/conversational-computing\\"\\r\\n}\\r\\n```\\r\\n\\r\\n## References"},{"id":"thinking","metadata":{"permalink":"/blog/thinking","source":"@site/blog/2021-08-26-thinking/index.md","title":"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003","description":"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002","date":"2021-08-26T00:00:00.000Z","formattedDate":"August 26, 2021","tags":[{"label":"Reality World","permalink":"/blog/tags/reality-world"}],"readingTime":79.295,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"thinking","title":"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World"],"hide_table_of_contents":false,"image":"/img/blog/2.jpg"},"prevItem":{"title":"Conversational computing: a new programming model empower LLM applications","permalink":"/blog/conversational-computing"}},"content":"![](images\\\\2.jpg)\\r\\n\\r\\n\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002\\r\\n\\r\\n\u53ef\u80fd\u6709\u4e00\u4e9b\u670b\u53cb\u5173\u6ce8\u8fc7\u6211\u8fd9\u4e00\u5e74\u4e00\u76f4\u5728\u6298\u817e\u7684Reality World\u521b\u4e1a\u7684\u4e8b\u60c5\uff0c\u7136\u800c\u5f88\u9057\u61be\u7684\u662f\u4e00\u76f4\u6ca1\u6709\u5206\u4eab\u592a\u591a\u5173\u4e8e\u5b83\u7684\u4fe1\u606f\u3002\u4e00\u6765\u662f\u56e0\u4e3a\u5b83\u6240\u6d89\u53ca\u7684\u6280\u672f\u6709\u6bd4\u8f83\u591a\u7684\u521b\u65b0\u5c1d\u8bd5\uff0c\u5728\u8fd8\u6ca1\u6709\u771f\u6b63\u7684\u6280\u672f\u5f00\u53d1\u5b9e\u8df5\u4e4b\u524d\u5bb9\u6613\u5f15\u8d77\u6bd4\u8f83\u591a\u7684\u4e89\u8bae\uff1b\u4e8c\u6765\u662f\u56e0\u4e3a\u53bb\u5e74\u5f97\u5230\u4e86\u4e00\u4e9b\u5927\u8d44\u672c\u6781\u5927\u7684\u5174\u8da3\uff0c\u56e0\u6b64\u6211\u60f3\u7740\u4e00\u9f13\u4f5c\u6c14\u7b49\u62ff\u5230\u6295\u8d44\u4e4b\u540e\u518d\u516c\u5e03\u4e00\u4e9b\u4fe1\u606f\u3002\u5f53\u7136\u56e0\u4e3a\u5404\u79cd\u539f\u56e0\u5230\u73b0\u5728\u4e5f\u8fd8\u6ca1\u6709\u8c08\u5b9a\u6295\u8d44\uff0c\u6240\u4ee5\u8fd1\u51e0\u4e2a\u6708\u6211\u5c31\u5c06\u5168\u90e8\u7cbe\u529b\u7528\u4e8e\u5f00\u53d1\u4e86\u3002\u7ecf\u8fc7\u51e0\u4e2a\u6708\u7684\u8270\u82e6\u594b\u6218\uff0c\u4eca\u5929\u7ec8\u4e8e\u6709\u673a\u4f1a\u53ef\u4ee5\u7ed9\u5927\u5bb6\u5206\u4eab\u4e00\u4e9b\u6211\u7684\u60f3\u6cd5\uff0c\u4ee5\u53ca\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u8fc7\u7a0b\u3002\u5f53\u7136Reality World\u8fd8\u5904\u4e8e\u975e\u5e38\u65e9\u671f\u548c\u539f\u578b\u7684\u9636\u6bb5\uff0c\u6211\u9884\u8ba1\u8fd8\u4f1a\u518d\u8fed\u4ee3\u51e0\u4e2a\u7248\u672c\u5230v0.5.0\u5de6\u53f3\u624d\u4f1a\u5f00\u59cb\u6b63\u5f0f\u516c\u5e03\u6216\u8005\u5185\u6d4b\uff0c\u6240\u4ee5\u8fd9\u91cc\u6211\u4e5f\u4e0d\u4f1a\u6d89\u53ca\u592a\u591a\u6280\u672f\u7ec6\u8282\uff0c\u4f46\u662f\u6211\u53ef\u4ee5\u5206\u4eab\u6211\u4eec\u60f3\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u4ee5\u53ca\u4e3a\u4ec0\u4e48\u8981\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0c\u5e76\u5927\u6982\u8bf4\u660e\u4e00\u4e9b\u601d\u8def\uff0c\u8fd9\u6837\u5927\u5bb6\u5e94\u8be5\u80fd\u591f\u521d\u6b65\u4e86\u89e3Reality World\u662f\u4ec0\u4e48\uff0c\u540c\u65f6\u6211\u89c9\u5f97\uff0c\u5bf9\u8fd9\u4e9b\u95ee\u9898\u7684\u601d\u8003\u5176\u5b9e\u662f\u975e\u5e38\u6709\u4ef7\u503c\u7684\u90e8\u5206\u3002\\r\\n\\r\\n## Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u7531\u4e8e\u6211\u8fc7\u53bb\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\uff0c\u4ee5\u53caReality Create\u4e5f\u5305\u542b\u76843D\u652f\u6301\uff0c\u5728\u6211\u4e0e\u6295\u8d44\u4eba\u6216\u8005\u5176\u4ed6\u670b\u53cb\u4ea4\u6d41\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5927\u5bb6\u666e\u904d\u7684\u5370\u8c61\u662f\u8fd9\u662f\u4e00\u4e2a\u65b0\u7684\u6e38\u620f\u5f15\u64ce\uff0c\u6240\u4ee5\u5927\u5bb6\u7684\u601d\u8def\u5c31\u662f\u4f60\u8ddfUnity\uff0cUnreal Engine\u4ee5\u53ca\u751a\u81f3\u5305\u62ec\u56fd\u5185\u8fd1\u51e0\u5e74\u4e5f\u6709\u5f88\u591a\u6e38\u620f\u5f15\u64ce\u521b\u4e1a\u7684\u4e00\u4e9b\u533a\u522b\u6216\u8005\u8bf4\u7ade\u4e89\u5173\u7cfb\uff0c\u800c\u4f1a\u5ffd\u89c6\u6211\u4eec\u6280\u672f\u4e0a\u53cd\u800c\u662f\u66f4\u52a0\u6838\u5fc3\u548c\u521b\u65b0\u7684\u90e8\u5206\uff0c\u6240\u4ee5\u8fd9\u4e2a\u8bef\u533a\u7684\u6f84\u6e05\u975e\u5e38\u91cd\u8981\uff1a\\r\\n\\r\\n### Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01\\r\\n\\r\\n\u867d\u7136\u6211\u672c\u4eba\u591a\u5e74\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\u90fd\u662f\u4e0e\u6e38\u620f\u5f15\u64ce\u548c\u6e32\u67d3\u76f8\u5173\uff0c\u540c\u65f6\u73b0\u4ee3\u6e38\u620f\u5f15\u64ce\u5de5\u4e1a\u7684\u6280\u672f\u4e5f\u5728\u4e0d\u65ad\u53d1\u5c55\uff0c\u4f46\u662f\u6211\u4e00\u76f4\u89c9\u5f97\u5236\u7ea6\u7528\u6237\u968f\u5fc3\u6240\u6b32\u8868\u8fbe\u5185\u5bb9\u548c\u903b\u8f91\u7684\u90e8\u5206\u4e3b\u8981\u8fd8\u662f\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7a0b\u5e8f\u8fd0\u884c\u7684\u673a\u5236\uff0c\u800c\u6e38\u620f\u5f15\u64ce\u67b6\u6784\u548c\u6d41\u7a0b\u672c\u8eab\u867d\u7136\u4e5f\u5f88\u590d\u6742\uff0c\u4f46\u8fd9\u90e8\u5206\u90fd\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u7684\uff0c\u4f8b\u5982\u9664\u4e86\u7f16\u7a0b\u90e8\u5206\uff0c\u4e00\u4e9b\u7f8e\u672f\u751a\u81f3\u7b56\u5212\u4e5f\u662f\u80fd\u591f\u6bd4\u8f83\u597d\u7684\u4f7f\u7528\u5f15\u64ce\u7684\u4e00\u4e9b\u76f8\u5173\u529f\u80fd\uff0c\u4f46\u662f\u4e0e\u4e4b\u76f8\u53cd\u7684\u662f\uff0c\u903b\u8f91\u7684\u8868\u8fbe\u548c\u7f16\u7a0b\u901a\u5e38\u8fd8\u662f\u9700\u8981\u4e13\u95e8\u7684\u7a0b\u5e8f\u5458\u3002\u867d\u7136\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u6e38\u620f\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6216\u8005\u914d\u7f6e\u7684\u5f62\u5f0f\u90e8\u5206\u5b9e\u73b0\u975e\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f46\u8fd9\u6837\u7684\u67b6\u6784\u8fd8\u662f\u5f88\u96be\u505a\u5230\u901a\u7528\uff0c\u663e\u7136\u6570\u5b57\u4e16\u754c\u8fd8\u6709\u7740\u975e\u5e38\u591a\u7684\u5404\u5f0f\u5404\u6837\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u9700\u6c42\u9700\u8981\u4e00\u4e9b\u901a\u7528\u7684\u903b\u8f91\u8868\u8fbe\u80fd\u529b\u3002\\r\\n\\r\\n\u6240\u4ee5Reality World\u7684\u6838\u5fc3\u662f\u4e00\u5957\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u90e8\u5206\u7406\u89e3\u4e3a\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u4f46\u662f\u4e0e\u4f20\u7edf\u5355\u7eaf\u89e3\u91ca\u6e90\u4ee3\u7801\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u865a\u62df\u673a\u76f8\u6bd4\uff0c\u5b83\u5305\u542b\u4e00\u4e9b\u6e90\u4ee3\u7801\u89e3\u91ca\u7ffb\u8bd1\u4e4b\u5916\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6743\u9650\u9a8c\u8bc1\u3001\u6c99\u76d2\u5b89\u5168\u4e0e\u4e92\u64cd\u4f5c\u3001\u5206\u5e03\u5f0f\u5185\u5bb9\u5206\u53d1\u4e0e\u540c\u6b65\u3001\u7ec4\u4ef6\u7684\u4f9d\u8d56\u7ba1\u7406\u548c\u52a8\u6001\u52a0\u8f7d\u7b49\u7b49\uff0c\u56e0\u6b64\u53ef\u4ee5\u7406\u89e3\u4e3aReality World\u662f\u4e00\u4e2a\u50cf\u533a\u5757\u94fe\u7c7b\u4f3c\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff1b\u540c\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u6e90\u4ee3\u7801\u7684\u7ffb\u8bd1\u89e3\u91ca\u90e8\u5206\uff0cReality World\u4e5f\u6709\u7740\u5f88\u591a\u533a\u522b\u4e8e\u4f20\u7edf\u52a8\u6001\u8bed\u8a00\u865a\u62df\u673a\u89e3\u91ca\u7684\u6d41\u7a0b\u548c\u67b6\u6784\u3002\\r\\n\\r\\n\u57fa\u4e8e\u8fd9\u5957\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6211\u4eec\u4f1a\u6784\u5efa3D\u5f15\u64ce\u7684\u80fd\u529b\u4ee5\u4f7f\u7528\u6237\u53ef\u4ee5\u5f00\u53d13D\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u8fd9\u90e8\u5206\u6280\u672f\u8ddf\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u4f7f\u7528\u7684\u6280\u672f\u4e0d\u4f1a\u6709\u592a\u5927\u5dee\u5f02\uff0c\u5f53\u7136\u56e0\u4e3a\u8fd0\u884c\u65f6\u73af\u5883\u4e0d\u540c\uff0c\u4e0e\u4e4b\u76f8\u5173\u76843D\u5f15\u64ce\u7684\u67b6\u6784\u548c\u6d41\u7a0b\u80af\u5b9a\u4f1a\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u9884\u671f\u5c06\u6765Reality Create\u7684\u6d41\u7a0b\u5e94\u8be5\u662f\u53ef\u4ee5\u6709\u4e00\u4e9b\u4e0d\u540c\u7684\u521b\u65b0\u4f53\u9a8c\u7684\u3002\\r\\n\\r\\n\u9664\u4e863D\u6e32\u67d3\uff0cReality Create\u7684\u8ba1\u5212\u4e5f\u53ef\u4ee5\u5f00\u53d12D\u5e94\u7528\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528\u4e00\u79cd\u7edf\u4e00\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6765\u7edf\u4e003D\u548c\u4f20\u7edf2D\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u6240\u4ee5\u5b83\u786e\u5207\u7684\u5b9a\u4f4d\u5e94\u8be5\u662f\u4e00\u4e2a\u57fa\u4e8e\u5206\u5e03\u5f0f\u7684\u3001\u901a\u7528\u7684\u5e94\u7528\u6784\u9020\u548c\u5f00\u53d1\u5e73\u53f0\uff0c\u800c\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u3002\\r\\n\\r\\n\u4e0e\u4e4b\u76f8\u5173\u7684\u662f\uff0c\\r\\n\\r\\n### Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee\\r\\n\\r\\n\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\uff0c\u81f3\u5c11\u76ee\u524d\u7684\u5143\u5b87\u5b99\u5927\u90e8\u5206\u90fd\u662f\u504f\u5411\u4e8e3D\uff0c\u7136\u540e\u671f\u671b\u4eba\u4eec\u6709\u4e9b\u66f4\u591a\u6c89\u6d78\u5f0f\u7684\u865a\u62df\u751f\u6d3b\u3002\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u8ddfReality World\u7684\u7406\u5ff5\u751a\u81f3\u662f\u76f8\u53cd\u7684\uff0c\u4ece\u540d\u5b57\u5c31\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u9009\u62e9Reality\u8fd9\u4e2a\u8bcd\uff0c\u662f\u5e0c\u671b\u6211\u4eec\u80fd\u591f\u5f15\u5bfc\u7528\u6237\u66f4\u591a\u5173\u6ce8\u73b0\u5b9e\uff0cReality World\u7684\u76ee\u6807\u662f\u5e0c\u671b\u901a\u8fc7\u63d0\u4f9b\u66f4\u7b80\u5316\u3001\u66f4\u5177\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f7f\u66f4\u591a\u7684\u4eba\u80fd\u591f\u968f\u5fc3\u6240\u6b32\u5730\u8868\u8fbeTA\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\uff0c\u5e76\u5c06\u8fd9\u4e9b\u7406\u89e3\u8f6c\u5316\u4e3a\u53ef\u4ea4\u4e92\u7684\u6570\u5b57\u7684\u5f62\u5f0f\uff0c\u4e0e\u5176\u4ed6\u66f4\u591a\u4eba\u5206\u4eab\uff0c\u6211\u89c9\u5f97\u5e94\u7528\u7684\u5f00\u53d1\u548c\u6784\u9020\u4e0e\u6587\u5b57\u3001\u56fe\u7247\u3001\u89c6\u9891\u4ee5\u53ca\u5176\u4ed6\u4fe1\u606f\u8f7d\u4f53\u4e00\u6837\uff0c\u6700\u5927\u7684\u4ef7\u503c\u4ecd\u7136\u662f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u6700\u6df1\u523b\u7684\u601d\u8003\u3001\u667a\u6167\u548c\u903b\u8f91\u3002\\r\\n\\r\\n\u5b9e\u9645\u4e0a\uff0c\u6211\u5fc3\u91cc\u9762\u5bf9Reality World\u7684\u6700\u7cbe\u51c6\u7684\u63cf\u8ff0\u662f\uff1a\\r\\n\\r\\n**A self-evolving interoperable system.**\\r\\n\\r\\n\u6216\u8005\uff1a\\r\\n\\r\\n**Interoperating with multi-applications in a modular and composable system.**\\r\\n\\r\\n\u4e5f\u8bb8\u770b\u4e86\u540e\u9762\u7684\u4e00\u4e9b\u4ecb\u7ecd\u4f60\u80fd\u591f\u5927\u6982\u7406\u89e3\u4e0a\u9762\u4e24\u53e5\u8bdd\u7684\u542b\u4e49\\r\\n\\r\\n## \u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c\\r\\n\\r\\n![img](images\\\\3.jpg)\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u662fReality World\u6700\u6838\u5fc3\u7684\u673a\u5236\\r\\n\\r\\n\u6211\u5370\u8c61\u4e2d\uff0c\u5de5\u4e1a\u754c\u548c\u5a92\u4f53\u5f00\u59cb\u771f\u6b63\u8ba8\u8bba\u4e92\u64cd\u4f5c\u6027\u53ca\u5176\u76f8\u5173\u7684\u4e00\u4e9b\u8bba\u636e\uff0c\u5927\u90e8\u5206\u90fd\u6765\u6e90\u4e8eTim Sweeney\u7684\u90a3\u7bc7\u6f14\u8bb2\uff1a[https://dl.acm.org/doi/10.1145/3306307.3339844](https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/10.1145/3306307.3339844)\\r\\n\\r\\n\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0cReality World\u7684\u76ee\u6807\u8ddfTim\u7684\u4e00\u4e9b\u63cf\u8ff0\u548c\u613f\u666f\u662f\u76f8\u4f3c\u7684\uff0c\u4f46\u4e5f\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6839\u672c\u4e0d\u540c\uff0c\u6211\u9996\u5148\u63cf\u8ff0\u8ddfTim\u6f14\u8bb2\u7684\u4e00\u4e9b\u5173\u7cfb\u548c\u903b\u8f91\uff0c\u7136\u540e\u518d\u4ecb\u7ecd\u6211\u4eec\u7684\u601d\u8003\uff0c\u901a\u8fc7\u8fd9\u4e9b\u95ee\u9898\u5c31\u53ef\u4ee5\u6bd4\u8f83\u81ea\u7136\u5730\u7406\u89e3Reality World\u7684\u76ee\u6807\u4ee5\u53ca\u60f3\u89e3\u51b3\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u5b9e\u9645\u4e0a\u6211\u7b2c\u4e00\u6b21\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u662f\u5728\u53bb\u5e747\u6708\u5de6\u53f3\uff0c\u90a3\u4e2a\u65f6\u5019\u6211\u7684\u57fa\u672c\u67b6\u6784\u7684\u6784\u601d\u5df2\u7ecf\u521d\u6b65\u5b8c\u6210\uff0c\u5c24\u5176\u662f\u6700\u6838\u5fc3\u4e5f\u662f\u6700\u91cd\u8981\u7684\u4e00\u6b65\u57fa\u7840\u5df2\u7ecf\u8bbe\u8ba1\u597d\uff0c\u5f53\u65f6\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u611f\u5230\u5f88\u591a\u5171\u9e23\uff0c\u4e5f\u662f\u5bf9\u81ea\u5df1\u7684\u4e00\u79cd\u5f88\u5927\u7684\u6fc0\u52b1\uff0c\u6bd5\u7adf\u6709\u5bf9\u6280\u672f\u548c\u884c\u4e1a\u90fd\u6709\u975e\u5e38\u7ecf\u9a8c\u548c\u5f71\u54cd\u529b\u7684\u5927\u4f6c\u4e5f\u6709\u7c7b\u4f3c\u7684\u601d\u8003\u548c\u884c\u52a8\u3002\u4f46\u4ece\u53bb\u5e74\u5230\u73b0\u5728\uff0c\u6211\u4eec\u8fd8\u662f\u6cbf\u7740\u6211\u4eec\u65e9\u5148\u7684\u6280\u672f\u601d\u8def\uff0c\u57fa\u672c\u4e0a\u5e76\u6ca1\u6709\u53bb\u5173\u6ce8\u548c\u53c2\u8003\u592a\u591aEpic\u7684\u4e1c\u897f\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u4ece\u6280\u672f\u65b9\u6848\u5230\u76ee\u6807\u90fd\u662f\u6709\u5f88\u591a\u4e0d\u540c\u3002\\r\\n\\r\\n\u5728\u6280\u672f\u5c42\u9762\uff0cTim\u8ba4\u4e3a\u8fd9\u6837\u7684\u76ee\u6807\u5927\u6982\u53ef\u80fd\u9700\u898110\u5e74\u624d\u80fd\u5b8c\u6210\uff0c\u4f46Epic\u4f1a\u671d\u7740\u8fd9\u4e2a\u76ee\u6807\u9010\u6b65\u903c\u8fd1\u3002Epic\u7684\u8def\u7ebf\u5927\u6982\u662f\u51e0\u6b65\uff1a\u9996\u5148\u5c06\u4e00\u4e9b\u504f\u793e\u4ea4\u6216\u8005\u73a9\u5bb6\u7684\u975e\u4e13\u4e1a\u6e38\u620f\u5f00\u53d1\u8005\u8f6c\u79fb\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\uff0c\u8fd9\u90e8\u5206\u5f00\u53d1\u8005\u90fd\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u6e38\u620f\u5185\u90e8\u800c\u4e0d\u662f\u5355\u72ec\u4f7f\u7528Unreal Engine\u53bb\u521b\u4f5c\uff0c\u8fd9\u4e2a\u6a21\u5f0f\u5176\u5b9e\u7c7b\u4f3cRoblox\u7684\u6a21\u5f0f\uff0c\u5b83\u4e5f\u662f\u4e00\u79cd\u6e38\u620f\u5f15\u64ce\u8fd9\u79cd\u5546\u4e1a\u6a21\u5f0f\u7684\u8f6c\u578b\uff1a\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u53ea\u662f\u4e00\u4e2a\u5355\u673a\u7684\u751f\u6210\u5e94\u7528\u7a0b\u5e8f\u7684\u8f6f\u4ef6\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5185\u5bb9\u7531\u81ea\u5df1\u53bb\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837\u6e38\u620f\u5f15\u64ce\u4ec5\u4f5c\u4e3a\u4e00\u4e2a\u5de5\u5177\uff0c\u5b83\u53ea\u53c2\u4e0e\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u800c\u65e0\u6cd5\u53c2\u4e0e\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u56e0\u6b64\u65e0\u6cd5\u5f62\u6210\u751f\u6001\uff0c\u6240\u4ee5\u5c3d\u7ba1\u4e00\u4e9b\u5f15\u64ce\u6709\u5e9e\u5927\u7684\u5f00\u53d1\u8005\u6570\u91cf\u548c\u7fa4\u4f53\uff0c\u4f46\u662f\u8fd9\u79cd\u6570\u91cf\u5e76\u6ca1\u6709\u5f88\u6709\u6548\u7684\u65b9\u5f0f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u751f\u6001\u3002\u7136\u800cRoblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f60\u7684\u5185\u5bb9\u5fc5\u987b\u5206\u53d1\u5230\u8fd9\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5e76\u7531\u7279\u5b9a\u7684\u5ba2\u6237\u7aef\u8fd0\u884c\u65f6\u73af\u5883\u6765\u8fd0\u884c\uff0c\u800c\u65e0\u6cd5\u50cf\u5355\u72ec\u7684\u6e38\u620f\u5f15\u64ce\u90a3\u6837\u81ea\u884c\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837Roblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5c31\u53ef\u4ee5\u53c2\u4e0e\u6574\u4e2a\u5185\u5bb9\u7684\u5168\u90e8\u751f\u547d\u5468\u671f\uff0c\u8fd9\u6837\u5c31\u5f62\u6210\u751f\u6001\uff0c\u5176\u4ed6\u7684\u670d\u52a1\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u5957\u5206\u5e03\u5f0f\u7cfb\u7edf\u8fdb\u884c\u63d0\u4f9b\uff0c\u800c\u5bf9\u7528\u6237\u7684\u597d\u5904\u4e5f\u662f\u7b80\u5316\u4e86\u5185\u5bb9\u7684\u5206\u53d1\u90e8\u7f72\uff0c\u4ee5\u53ca\u66f4\u591a\u4fbf\u6377\u7684\u96c6\u6210\u670d\u52a1\uff0c\u4f8b\u5982\u4e0e\u5176\u4ed6\u73a9\u5bb6\u7684\u4e92\u52a8\u3002\\r\\n\\r\\n![img](images\\\\island.png)\\r\\n\\r\\n\u300a\u5821\u5792\u4e4b\u591c\u300bCreative\u6a21\u5f0f\\r\\n\\r\\n\u4e3a\u4e86\u8981\u4f7f\u7528\u6237\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fdb\u884c\u5185\u5bb9\u5f00\u53d1\uff0c\u5c31\u5e26\u6765\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a\u4e00\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u95ee\u9898\uff0c\u4e8c\u662f\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\u3002\u8981\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fd0\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u672a\u53d7\u4fe1\u4efb\u7684\u4ee3\u7801\uff0c\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u96be\u7684\u95ee\u9898\uff0c\u8fd9\u4e5f\u6d89\u53ca\u5230Reality World\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u6838\u5fc3\u95ee\u9898\u3002\\r\\n\\r\\n\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002\\r\\n\\r\\n\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002\\r\\n\\r\\n\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002\\r\\n\\r\\n![img](images\\\\luau.png)\\r\\n\\r\\n\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002\\r\\n\\r\\nNaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002\\r\\n\\r\\nWeb Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002\\r\\n\\r\\n![img](images\\\\verse.png)\\r\\n\\r\\nEpic\u63a8\u51faVerse language\\r\\n\\r\\n\u56de\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\uff0cEpic\u663e\u7136\u4e0d\u53ef\u80fd\u8ba9\u73a9\u5bb6\u4f7f\u7528Unreal Engine\u7684C++\u6216\u8005blueprint\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u5185\u5b58\u73af\u5883\u4e2d\u8fd0\u884c\uff0cUnreal Engine\u76ee\u524d\u4e5f\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\u65b9\u6848\uff0c\u56e0\u6b64Epic\u9700\u8981\u5f00\u53d1\u4e00\u5957\u65b0\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u5c31\u662f\u4eca\u5e74\u65e9\u4e9b\u65f6\u5019\u53d1\u5e03\u7684Verse programming language\u3002Epic\u4e3a\u6b64\u6316\u6765\u4e86Haskell\u7684\u4f5c\u8005Simon Peyton Jones\uff0c\u4ee5\u53ca\u4e4b\u524d\u6536\u8d2d\u7684\u4e00\u4e2a\u4e3aUnreal Engine\u5f00\u53d1\u811a\u672c\u8bed\u8a00\u7684\u56e2\u961fSkookumScript\uff0c\u636e\u8bf4\u8fd8\u6709\u5199V8\u5185\u6838\u7684\u4f5c\u8005\u3002\\r\\n\\r\\n\u5173\u4e8eVerse language\u672c\u8eab\uff0c\u76ee\u524d\u8fd8\u6ca1\u6709\u592a\u591a\u4fe1\u606f\uff0c\u4f46\u662f\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u7684\u4f7f\u547d\u4e00\u662f\u4e3a\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u521b\u4f5c\u63d0\u4f9b\u4e00\u79cd\u5b89\u5168\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u800c\u4e14\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u5fc5\u7136\u5305\u542b\u4e00\u5b9a\u7684\u6c99\u76d2\u673a\u5236\uff0c\u6765\u4fdd\u8bc1\u5b89\u5168\u6027\u3002\\r\\n\\r\\n\u534f\u4f5c\u7684\u7b2c\u4e8c\u4e2a\u8981\u6c42\u662f\u4e92\u64cd\u4f5c\uff0c\u4e92\u64cd\u4f5c\u6027\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a\\r\\n\\r\\n> **Interoperability** is a characteristic of a product or system to work with other products or systems\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a\\r\\n\\r\\n> If two or more systems use commondata formatsandcommunication protocolsand are capable of communicating with each other, they exhibit*syntactic interoperability*. XML and SQL are examples of common data formats and protocols.\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u548c\u8f6f\u4ef6\u9694\u79bb\u901a\u5e38\u662f\u76f8\u4e92\u77db\u76fe\u7684\uff0c\u4e92\u64cd\u4f5c\u8868\u73b0\u4e3a\u6211\u5e0c\u671b\u66f4\u7b80\u5355\u66f4\u65b9\u4fbf\u5730\u8bbf\u95ee\u522b\u4eba\u7684\u6570\u636e\u6216\u63a5\u53e3\uff0c\u800c\u9694\u79bb\u5219\u5047\u8bbe\u9664\u6211\u4e4b\u5916\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u53ef\u4fe1\u7684\uff0c\u4e0d\u8981\u8f7b\u6613\u5730\u8bbf\u95ee\uff0c\u6216\u8005\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\u4f7f\u8fd9\u79cd\u8bbf\u95ee\u7684\u4ee3\u4ef7\u548c\u96be\u5ea6\u589e\u52a0\u3002\u5c24\u5176\u5728\u6e38\u620f\u8fd9\u79cd\u5b9e\u65f6\u7684\u8fd0\u884c\u73af\u5883\uff0c\u8fd9\u79cd\u4ee3\u4ef7\u548c\u96be\u5ea6\u5f80\u5f80\u610f\u5473\u7740\u6027\u80fd\u95ee\u9898\u3002\\r\\n\\r\\nTim\u57282019\u5e74\u7684\u6f14\u8bb2\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u540e\u7eed\u57fa\u4e8eVerse\u7684\u4ee3\u7801\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002\\r\\n\\r\\n\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0cReality World\u90fd\u6709\u7740\u4e0d\u540c\u7684\u6280\u672f\u601d\u8003\u548c\u65b9\u6848\u3002\\r\\n\\r\\n### \u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f\\r\\n\\r\\n\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cReality World\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002\\r\\n\\r\\n\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002\\r\\n\\r\\n### \u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u6027\u8fd9\u4e2a\u6982\u5ff5\uff0c\u6211\u8ddf\u5927\u90e8\u5206\u6295\u8d44\u4eba\u89e3\u91ca\u57fa\u672c\u4e0a\u90fd\u662f\u5f88\u96be\u7406\u89e3\u7684\uff0c\u5f53\u7136\u8fd9\u91cc\u53ef\u80fd\u6211\u5bf9\u4e92\u64cd\u4f5c\u6027\u8d4b\u4e88\u4e86\u66f4\u591a\u7684\u610f\u4e49\u3002\u4ece\u7a0b\u5e8f\u673a\u5236\u4e0a\u6765\u8bb2\uff0c\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u6d89\u53ca\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c\u76f8\u4e92\u8c03\u7528\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5927\u90e8\u5206\u8bed\u8a00\u90fd\u53ef\u4ee5\u901a\u8fc7C\u63a5\u53e3\u5b9e\u73b0\u76f8\u4e92\u8c03\u7528\uff0c\u518d\u5f80\u4e0a\u4e00\u70b9\uff0c\u4efb\u4f55\u7a0b\u5e8f\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\u7136\u540e\u5185\u90e8\u8fdb\u884c\u683c\u5f0f\u89e3\u91ca\uff0c\u4e5f\u4ecd\u7136\u662f\u80fd\u591f\u8fdb\u884c\u901a\u4fe1\u7684\u3002\u5b9e\u9645\u4e0a\u4e92\u8054\u7f51\u7684\u673a\u5236\u5c31\u662f\u5982\u6b64\uff0cOSI\uff08Open systems Interconnection\uff09\u7684\u673a\u5236\u5c31\u662f\u5b9e\u73b0\u4e86\u4efb\u4f55\u8ba1\u7b97\u673a\u6216\u8005\u4efb\u610f\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5b57\u7b26\u4e32\u901a\u4fe1\uff0c\u4ece\u800c\u89e3\u51b3\u4e86\u6574\u4e2a\u8ba1\u7b97\u673a\u7f51\u7edc\u4e92\u8054\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002\\r\\n\\r\\n\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002\\r\\n\\r\\n\u56e0\u6b64\uff0cReality World\u7684\u5176\u4e2d\u4e00\u4e2a\u91cd\u8981\u673a\u5236\uff0c\u5c31\u662f\u8981\u8ba9\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\uff0c\u5176\u5b9a\u4e49\u7684\u6570\u636e\u63a5\u53e3\u975e\u5e38\u8f7b\u6613\u5730\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u8bbf\u95ee\uff0c\u540c\u65f6\u7ed3\u5408\u4e0a\u9762\u7684\u6c99\u76d2\u6280\u672f\u4fdd\u8bc1\u8fd9\u79cd\u6570\u636e\u8bbf\u95ee\u7684\u5b89\u5168\uff0c\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u7684\u6c99\u76d2\u6280\u672f\u4e0d\u80fd\u53ea\u662f\u5728\u6700\u5e95\u5c42\u5b9e\u73b0\u3002\\r\\n\\r\\n\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002\\r\\n\\r\\n![img](images\\\\usd.png)\\r\\n\\r\\nPixar USD\\r\\n\\r\\n\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002\\r\\n\\r\\nAPI\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002\\r\\n\\r\\n\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a\\r\\n\\r\\n```text\\r\\ndef Toy_Dialect : Dialect {\\r\\nlet summary = \\"Toy IR Dialect\\"; let description = [{\\r\\n This is a much longer description of the\\r\\n Toy dialect.\\r\\n ...\\r\\n}];\\r\\n // The namespace of our dialect.\\r\\nlet name = \\"toy\\";\\r\\n// The C++ namespace that the dialect class // definition resides in.\\r\\nlet cppNamespace = \\"toy\\";\\r\\n}\\r\\n```\\r\\n\\r\\n\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a\\r\\n\\r\\n```cpp\\r\\nclass ToyDialect : public mlir::Dialect {\\r\\n public:\\r\\nToyDialect(mlir::MLIRContext *context)\\r\\n : mlir::Dialect(\\"toy\\", context,\\r\\n mlir::TypeID::get<ToyDialect>()) {\\r\\n initialize();\\r\\n}\\r\\nstatic llvm::StringRef getDialectNamespace() {\\r\\n return \\"toy\\";\\r\\n}\\r\\nvoid initialize()\\r\\n```\\r\\n\\r\\n\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002\\r\\n\\r\\n![img](images\\\\modular.png)\\r\\n\\r\\nModular\\r\\n\\r\\n\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cReality World\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002\\r\\n\\r\\n\u7ed3\u5408\u524d\u9762\u8ba8\u8bba\u7684\u6c99\u76d2\u6280\u672f\u3001\u4e92\u64cd\u4f5c\u3001\u788e\u7247\u5316\u7b49\u7b49\u673a\u5236\uff0cReality World\u5e0c\u671b\u80fd\u591f\u901a\u8fc7\u4e00\u4e9b\u521b\u65b0\u63a2\u7d22\uff0c\u6784\u5efa\u8d77\u4e00\u4e2a\u66f4\u597d\u7684\u4e92\u64cd\u4f5c\u5e73\u53f0\uff0c\u4f7f\u5f97\u4e0a\u9762\u7684\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u5b83\u770b\u8d77\u6765\u50cf\u662f\u57fa\u4e8eOSI\u4e4b\u4e0a\u6dfb\u52a0\u7684\u4e00\u4e2a\u4e92\u64cd\u4f5c\u5c42\uff0c\u5728\u8fd9\u4e2a\u4e92\u64cd\u4f5c\u5c42\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u64cd\u4f5c\u7684\u662f\u6765\u81ea\u5176\u4ed6\u5e94\u7528\u7684\u5185\u5b58\u6570\u636e\uff0c\u5c31\u50cf\u4f60\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u6570\u636e\u4e00\u6837\u7b80\u5355\uff0c\u5c3d\u7ba1\u8fd9\u4e2a\u6570\u636e\u53ef\u80fd\u6765\u81ea\u4e8e\u5176\u4ed6\u7684\u670d\u52a1\u5668\u3002\\r\\n\\r\\n## \u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5\\r\\n\\r\\n![img](images\\\\pl.jpg)\\r\\n\\r\\nReality World\u5bf9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u5f88\u591a\u8c03\u6574\\r\\n\\r\\n\u6211\u4eec\u7a0b\u5e8f\u5458\uff0c\u7ec8\u5176\u4e00\u751f\u53ef\u80fd\u90fd\u5e0c\u671b\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u7a0b\u5e8f\u5230\u5e95\u662f\u600e\u4e48\u8fd0\u884c\u7684\uff0c\u8fd9\u79cd\u7406\u89e3\u4e0d\u5149\u80fd\u591f\u8ba9\u6211\u4eec\u66f4\u9ad8\u6548\u5730\u7f16\u5199\u66f4\u5065\u58ee\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u521b\u9020\u8f6f\u4ef6\u7684\u4ef7\u503c\uff0c\u540c\u65f6\uff0c\u7f16\u7a0b\u7684\u673a\u5236\u672c\u8eab\u5145\u6ee1\u7740\u65e0\u7a77\u7684\u9b45\u529b\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4eba\u7c7b\u6709\u53f2\u4ee5\u6765\u80fd\u591f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u590d\u6742\u7684\u601d\u7ef4\u548c\u903b\u8f91\u7684\u6700\u597d\u7684\u673a\u5236\u4e4b\u4e00\uff0c\u5b83\u5c06\u4eba\u7c7b\u5bf9\u7269\u7406\u4e16\u754c\u7684\u7406\u89e3\u53ca\u5176\u5f62\u6210\u7684\u667a\u6167\u8f6c\u5316\u4e3a\u4e3a\u4eba\u7c7b\u670d\u52a1\u7684\u5de5\u5177\u548c\u529b\u91cf\uff0c\u8fd9\u662f\u6211\u4eec\u70ed\u7231\u7f16\u7a0b\u7684\u5176\u4e2d\u4e00\u4e9b\u539f\u56e0\u3002\\r\\n\\r\\n\u5341\u591a\u5e74\u6765\uff0c\u5bf9\u4e8e\u7f16\u7a0b\uff0c\u6211\u4e00\u76f4\u6709\u4e24\u79cd\u4e0d\u4e00\u6837\u7684\u60c5\u611f\uff1a\\r\\n\\r\\n- \u6211\u4e00\u76f4\u4e0d\u559c\u6b22\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u65b9\u5f0f\\r\\n- \u6211\u66f4\u559c\u6b22\u5f00\u53d1\u80fd\u591f\u7528\u4e8e\u6784\u9020\u8f6f\u4ef6\u7684\u8f6f\u4ef6\\r\\n\\r\\n\u4eca\u5929\uff0cReality World\u7684\u7b2c\u4e8c\u4e2a\u6838\u5fc3\u5173\u6ce8\u70b9\u548c\u57fa\u7840\u5c31\u662f\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u65b0\u7684\u63a2\u7d22\u3002\u4e16\u754c\u4e0a\u53ea\u6709\u5927\u7ea6\u4e0d\u52300.5%\u7684\u4eba\u662f\u4f1a\u7f16\u5199\u4ee3\u7801\u7684\uff0c\u7ea63000\u4e07\u5de6\u53f3\uff0c\u6240\u4ee5\u6570\u5b57\u5316\u8868\u8fbe\u7684\u6f5c\u529b\u8fd8\u8fdc\u8fdc\u6ca1\u6709\u88ab\u53d1\u6325\u51fa\u6765\u3002\u5982\u679c\u6211\u4eec\u5c06\u8fd9\u4e2a\u6570\u5b57\u63d0\u5347\u52305\u4ebf~10\u4ebf\uff0c\u770b\u770b\u8fd8\u6709\u54ea\u4e9b\u53d8\u9769\u9700\u8981\u53d1\u751f\uff0c\u53ef\u80fd\u4e0e\u4f60\u60f3\u8c61\u4e2d\u4e0d\u592a\u4e00\u6837\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u672c\u8eab\u53ef\u80fd\u5e76\u4e0d\u662f\u5236\u7ea6\u56e0\u7d20\u3002\\r\\n\\r\\n### \u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb\\r\\n\\r\\n\u5341\u591a\u5e74\u5de5\u4f5c\u7ecf\u5386\uff0c\u6211\u5199\u8fc7C#\u3001C\u3001C++\u3001Ruby\u3001Lua\u3001Rust\u7b49\uff0c\u4ee5\u53ca\u6700\u8fd1\u4e00\u5e74\u591a\uff0c\u6211\u51e0\u4e4e\u770b\u4e86\u6240\u6709\u80fd\u4e70\u5230\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u7b49\u76f8\u5173\u7684\u4e66\u7c4d\uff08\u540e\u9762\u4f1a\u4ecb\u7ecd\uff09\u3002\u5728\u6211\u5199\u8fc7\u7684\u4ee3\u7801\u4e2d\uff0c\u603b\u6709\u4e00\u79cd\u611f\u89c9\uff0c\u4e0d\u7ba1\u6211\u770b\u8fc7\u591a\u5c11\u8bbe\u8ba1\u6a21\u5f0f\u6216\u8005\u67b6\u6784\u76f8\u5173\u7684\u8d44\u6599\uff0c\u6211\u603b\u662f\u89c9\u5f97\u5f88\u96be\u5199\u51fa\u90a3\u79cd\u903b\u8f91\u7ed3\u6784\u7279\u522b\u6e05\u6670\u7684\u67b6\u6784\u548c\u4ee3\u7801\uff0c\u56e0\u6b64\u7f16\u7a0b\u4f53\u9a8c\u50cf\u662f\u603b\u6709\u4e00\u4e2a\u4ec0\u4e48\u4e1c\u897f\uff0c\u5835\u5728\u6211\u7684\u5fc3\u91cc\u3002\\r\\n\\r\\n\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002\\r\\n\\r\\n\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002\\r\\n\\r\\n\u77e5\u4e4e \\r\\n\\r\\n[@\u5927\u5bbd\u5bbd](https://www.zhihu.com/people/16d0cb25df98c0c909e60b135a5800c5)\\r\\n\\r\\n \u6709\u4e00\u7bc7\u56de\u7b54\uff1a[\u5982\u4f55\u770b\u5f85Erlang\u4e4b\u7236Joe Armstrong\u89c9\u5f97OO\u7f16\u7a0b\u5f88\u70c2\uff1f](https://www.zhihu.com/question/29888990/answer/703226836)\uff0c\u5176\u4e2d\u5f15\u7528\u5230Erlang\u4e4b\u7236Joe Armstrong\u7684\u4e00\u6bb5\u91c7\u8bbf\uff1a[Ralph Johnson, Joe Armstrong on the State of OOP](https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/)\\r\\n\\r\\n\\r\\n\\r\\n> Alan Kay himself wrote this famous thing and said **\\"The notion of object oriented programming is completely** [misunderstood](https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={\\"sourceType\\"%3A\\"answer\\"%2C\\"sourceId\\"%3A703226836})**. It\'s not about objects and classes, it\'s all about messages**\\". He wrote that and he said that the initial [reaction](https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={\\"sourceType\\"%3A\\"answer\\"%2C\\"sourceId\\"%3A703226836}) to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.\\r\\n\\r\\nAlan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002\\r\\n\\r\\n![img](images\\\\Robert_Virding_and_Joe_Armstrong.jpg)\\r\\n\\r\\nErlang\u4e4b\u7236Joe Armstrong\uff08\u53f3\uff09\\r\\n\\r\\nErlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a\\r\\n\\r\\n> Erlang has got all these things. It\'s got isolation, it\'s got polymorphism and it\'s got pure messaging. From that point of view, we might say it\'s the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about\\r\\n\\r\\n\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002\\r\\n\\r\\n\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002\\r\\n\\r\\n\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002Reality World\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002\\r\\n\\r\\n### \u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027\\r\\n\\r\\n\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u800c\u8a00\uff0c\u5f53\u524d\u6709\u5f88\u591aScratch\u7f16\u7a0b\u5e73\u53f0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7b80\u5355\u7684\u4efb\u52a1\uff1a\u5373\u53ea\u6709\u5c11\u91cf\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u4e14\u901a\u5e38\u53ea\u6709\u4e00\u4e2a\u6216\u5c11\u6570\u51e0\u4e2a\u51fd\u6570\u7684\u4efb\u52a1\uff0c\u5927\u90e8\u5206\u6709\u4e00\u4e9b\u57fa\u672c\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u80fd\u529b\u7684\u4eba\u662f\u53ef\u4ee5\u5728\u5f88\u77ed\u65f6\u95f4\u5185\u5b66\u4f1a\u7684\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u7eaf\u7684\u903b\u8f91\u8ba1\u7b97\u5e76\u4e0d\u590d\u6742\u3002\\r\\n\\r\\n\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002\u5728\u300a\u8ba1\u7b97\u673a\u7a0b\u5e8f\u7684\u6784\u9020\u548c\u89e3\u91ca\u300b\u4e00\u4e66\u4e2d\u6307\u51fa\uff0c\u7f16\u7a0b\u6a21\u578b\u672c\u8d28\u4e0a\u8981\u89e3\u51b3\u7684\u662f\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u4e0d\u7ba1\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u3002\\r\\n\\r\\n\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002\\r\\n\\r\\n\u7136\u800c\u6b63\u662f\u8fd9\u4e9b\u4e3a\u4e86\u5e2e\u52a9\u4eba\u4eec\u7ba1\u7406\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u673a\u5236\uff0c\u63d0\u5347\u4e86\u7f16\u7a0b\u7684\u95e8\u69db\uff0c\u4f8b\u5982\u975e\u7a0b\u5e8f\u5458\u80af\u5b9a\u53ef\u4ee5\u5f88\u5feb\u7406\u89e3\u7c7b\u548c\u5bf9\u8c61\u7684\u6982\u5ff5\uff0c\u4f46\u662f\u7406\u89e3\u865a\u51fd\u6570\u548c\u591a\u6001\u5c31\u662f\u53e6\u5916\u4e00\u56de\u4e8b\u4e86\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u673a\u5236\u7684\u6dfb\u52a0\u770b\u8d77\u6765\u662f\u7406\u6240\u5f53\u7136\u7684\uff0c\u4f46\u662f\u7a0d\u5fae\u6df1\u5165\u7406\u89e3\u4e00\u4e0b\u7f16\u7a0b\u8bed\u8a00\u7684\u7f16\u8bd1\u8fc7\u7a0b\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u662f\u8ddf\u5e95\u5c42\u7684\u7f16\u8bd1\u673a\u5236\u76f8\u5173\u7684\uff0c\u800c\u73b0\u4ee3\u7684\u7f16\u8bd1\u6d41\u7a0b\u53c8\u51e0\u4e4e\u662f\u4e0e\u5e95\u5c42\u7684\u786c\u4ef6\u67b6\u6784\u6709\u5173\u7684\u3002\u4f8b\u5982\u7ee7\u627f\u7684\u673a\u5236\u548c\u9650\u5236\uff0c\u4f7f\u5f97\u7f16\u8bd1\u5668\u53ef\u4ee5\u8ba1\u7b97\u6b63\u786e\u7684\u51fd\u6570\u5730\u5740\uff0c\u4f8b\u5982\u4f60\u5fc5\u987b\u8981\u4ece\u4e00\u5806\u590d\u6742\u7684\u4ee3\u7801\u4e2d\u62ff\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u8fd9\u4f7f\u5f97\u4f60\u4e0d\u5f97\u4e0d\u628a\u591a\u4e2a\u4ee3\u7801\u6587\u4ef6\u4ea4\u7ec7\u5728\u4e00\u8d77\uff09\u624d\u80fd\u6b63\u786e\u5730\u8bbf\u95ee\u76f8\u5e94\u7684\u65b9\u6cd5\uff0c\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u51e0\u4e4e\u603b\u662f\u5145\u6ee1\u590d\u6742\u7684\u5f15\u7528\u5173\u7cfb\uff0c\u5c3d\u7ba1\u8fd9\u770b\u8d77\u6765\u50cf\u662f\u5fc5\u987b\u7684\uff0c\u4f8b\u5982\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u4f46\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u5fc5\u987b\u8981\u8fd9\u6837\u624d\u80fd\u83b7\u5f97\u6b63\u786e\u7684\u5bf9\u8c61\u5730\u5740\uff0c\u4ece\u800c\u8bbf\u95ee\u5176\u4e2d\u7684\u6570\u636e\u548c\u65b9\u6cd5\u3002\u4f46\u662f\u5982\u679c\u4ec5\u4ec5\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u6709\u5f88\u591a\u673a\u5236\uff0c\u4e0d\u662f\u8bf4\u6211\u4e00\u5b9a\u8981\u6bcf\u6b21\u4eb2\u81ea\u5230\u4e00\u4e2a\u5e97\u4e70\u5230\u7684\u4e1c\u897f\u624d\u662f\u7edd\u5bf9\u5b89\u5168\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5feb\u9012\u5458\u672c\u8eab\u662f\u67d0\u79cd\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u6211\u5c31\u53ef\u4ee5\u4e0d\u7528\u4eb2\u81ea\u53bb\u5e97\u91cc\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6211\u60f3\u8981\u7684\u6570\u636e\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u8981\u5173\u6ce8\u7684\u53ea\u662f\u4ec0\u4e48\u4e1c\u897f\uff08\u6570\u636e\u7c7b\u578b\uff09\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7269\u7406\u5730\u5740\uff08\u5bf9\u8c61\u5f15\u7528\uff09\u3002\\r\\n\\r\\n\u4ece\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u7ed3\u6784\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\u5176\u4e00\u662f\u5355\u4e2a\u51fd\u6570\u6216\u8005\u5355\u4e2a\u5bf9\u8c61\u672c\u8eab\u7684\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\u7684\u903b\u8f91\uff0c\u5176\u4e2d\u53ef\u80fd\u4ec5\u4ec5\u6d89\u53ca\u6700\u57fa\u672c\u7684\u7b97\u672f\u548c\u903b\u8f91\u8ba1\u7b97\uff1b\u800c\u53e6\u4e00\u90e8\u5206\u5219\u662f\u4e3a\u4e86\u5e2e\u52a9\u8ba1\u7b97\u673a\u7f16\u8bd1\u7cfb\u7edf\uff08\u53ef\u80fd\u4e5f\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7406\u89e3\uff09\u6784\u9020\u5927\u89c4\u6a21\u8f6f\u4ef6\u63d0\u4f9b\u7684\u4e00\u4e9b\u4fe1\u606f\u3002\\r\\n\\r\\n![img](images\\\\create.png)\\r\\n\\r\\nReality World\u5728\u7a0b\u5e8f\u7ed3\u6784\u65b9\u9762\u7684\u76ee\u6807\uff0c\u5c31\u662f\u8981\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u67b6\u6784\uff0c\u4f7f\u5f97\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u88ab\u9690\u85cf\u5728\u7f16\u8bd1\u7cfb\u7edf\u548c\u8fd0\u884c\u65f6\u5185\u90e8\uff0c\u8fd9\u6837\u5f00\u53d1\u8005\u5c31\u53ea\u9700\u8981\u5173\u6ce8\u6700\u57fa\u672c\u7684\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u3002\u6211\u4eec\u901a\u8fc7\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u6765\u4f7f\u5f97\u8fd0\u884c\u65f6\u7cfb\u7edf\u53ef\u4ee5\u52a8\u6001\u63a8\u5bfc\u51fa\u4e00\u4e9b\u6784\u6210\u5927\u89c4\u6a21\u7a0b\u5e8f\u9700\u8981\u7684\u7ed3\u6784\u3002\\r\\n\\r\\n### \u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406\\r\\n\\r\\n\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u548c\u7a0b\u5e8f\u7ed3\u6784\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u901a\u5e38\u5bb9\u6613\u5ffd\u7565\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u56e0\u4e3a\u76ee\u524d\u7f16\u7a0b\u7684\u5927\u90e8\u5206\u90fd\u662f\u4e13\u4e1a\u7a0b\u5e8f\u5458\uff0c\u8fd9\u4e2a\u95ee\u9898\u770b\u8d77\u6765\u7406\u6240\u5f53\u7136\u3002\u90a3\u5c31\u662f\u5173\u4e8e\u6570\u636e\u7ba1\u7406\u3002\u6570\u636e\u7ba1\u7406\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u5b83\u65e2\u5173\u4e4e\u7a0b\u5e8f\u7684\u590d\u6742\u5ea6\uff0c\u53c8\u5173\u4e4e\u524d\u9762\u63d0\u5230\u7684\u4e92\u64cd\u4f5c\u6027\u3002\\r\\n\\r\\n\u5728\u5e94\u7528\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u65e2\u9700\u8981\u7f16\u5199\u903b\u8f91\u4ee3\u7801\uff0c\u8fd8\u9700\u8981\u5904\u7406\u6570\u636e\u7ba1\u7406\uff1a\u6570\u636e\u5728\u4ec0\u4e48\u65f6\u5019\u521d\u59cb\u5316\uff0c\u5728\u90a3\u4e2a\u4ee3\u7801\u903b\u8f91\u5904\u521d\u59cb\u5316\uff0c\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u8c61\u88ab\u4fee\u6539\u4e86\u600e\u6837\u4fdd\u5b58\u6570\u636e\u7b49\u7b49\uff0c\u751a\u81f3\u5305\u62ec\u4e3a\u4e86\u8003\u8651\u7f13\u5b58\u6027\u80fd\u6240\u505a\u51fa\u7684\u4e00\u4e9b\u5904\u7406\uff0c\u8fd9\u4e9b\u5de5\u4f5c\u662f\u975e\u5e38\u7e41\u7410\u7684\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u5f00\u53d1\u8005\u51e0\u4e4e\u603b\u662f\u8fd8\u8981\u5173\u5fc3\u5b58\u50a8\uff0c\u9664\u975e\u662f\u4ec5\u5b58\u50a8\u5728\u672c\u5730\uff0c\u5426\u5219\u8fd8\u9700\u8981\u8bbe\u7f6e\u670d\u52a1\u5668\u5b58\u50a8\u548c\u83b7\u53d6\u4e00\u4e9b\u6570\u636e\u3002\u8fd9\u4e9b\u5de5\u4f5c\u5bf9\u4e8e\u666e\u901a\u7684\u7528\u6237\u5f00\u53d1\u5e94\u7528\u7a0b\u5e8f\u800c\u8a00\u90fd\u662f\u6bd4\u8f83\u56f0\u96be\u7684\u4e8b\u60c5\u3002\\r\\n\\r\\n![img](images\\\\graphql.png)\\r\\n\\r\\nGrapQL\\r\\n\\r\\n\u6240\u4ee5\u7ed3\u5408\u4e0a\u8ff0\u7684\u7a0b\u5e8f\u7ed3\u6784\u5316\u7684\u81ea\u52a8\u7ba1\u7406\uff0c\u4e00\u79cd\u597d\u7684\u7b56\u7565\u662f\u7a0b\u5e8f\u7684\u6570\u636e\u4e5f\u53ef\u4ee5\u81ea\u52a8\u7ba1\u7406\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f00\u53d1\u8005\u4ec5\u5173\u6ce8\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u57fa\u672c\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6240\u6709\u6d89\u53ca\u5230\u6216\u8005\u8bf4\u53ea\u662f\u7f16\u8bd1\u5668\u6216\u7f16\u8bd1\u7cfb\u7edf\u9700\u8981\u7684\u7ba1\u7406\u90fd\u5e94\u8be5\u5c3d\u53ef\u80fd\u4ea4\u7ed9\u8fd0\u884c\u65f6\u3002GraphQL\u5728\u8fd9\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u6bd4\u8f83\u597d\u7684\u5c1d\u8bd5\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u544a\u77e5\u4e00\u4e2a\u60f3\u8981\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u83b7\u53d6\u5230\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u800c\u5c06\u8fd9\u4e9b\u6570\u636e\u80cc\u540e\u7684\u590d\u6742\u903b\u8f91\u9690\u85cf\u8d77\u6765\u3002\\r\\n\\r\\n\u9664\u4e86\u6570\u636e\u672c\u8eab\u7684\u7ba1\u7406\uff0c\u6570\u636e\u8fd8\u6d89\u53ca\u5230\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\uff0c\u7528\u6237\u5e0c\u671b\u81ea\u5df1\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5176\u4ed6\u5e94\u7528\u65b9\u4fbf\u5730\u8bbf\u95ee\uff0c\u8fd9\u4e9b\u673a\u5236\u90fd\u662f\u548c\u6570\u636e\u7684\u7ba1\u7406\u8fc7\u7a0b\u53ca\u5176\u8bbe\u8ba1\u606f\u606f\u76f8\u5173\u7684\u3002\\r\\n\\r\\n## \u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5\\r\\n\\r\\n![img](images\\\\5.jpg)\\r\\n\\r\\nReality World\u7684\u7a0b\u5e8f\u7ed3\u6784\u4e0e\u6587\u672c\u5408\u6210\u662f\u7c7b\u4f3c\u7684\\r\\n\\r\\nChatGPT\u5e2d\u5377\u4e86\u6574\u4e2a\u4e16\u754c\uff0c\u6216\u8005\u81f3\u5c11\u662f\u79d1\u6280\u5708\uff0c\u4e0d\u7ba1\u662f\u4ece\u8d44\u672c\uff0c\u56fd\u4f01\uff0c\u6c11\u4f01\uff0c\u7a0b\u5e8f\u5458\u4e2a\u4eba\u7b49\u7b49\u90fd\u662f\u53d7\u5230\u5f88\u5927\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u4e5f\u6709\u50cf\u6211\u4eec\u5c0f\u5b69\u7684\u5988\u5988\uff0c\u4ee5\u53ca\u4ed6\u5988\u5988\u7684\u670b\u53cb\uff0c\u76ee\u524d\u8fd8\u4e0d\u592a\u4e86\u89e3ChatGPT\u662f\u5e72\u4ec0\u4e48\u7684\u3002\\r\\n\\r\\n\u6211\u4e8e2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\u5e76\u5f00\u59cb\u7814\u7a76\u548c\u8bbe\u8ba1Reality World\u7684\u67b6\u6784\uff0c\u90a3\u4e2a\u65f6\u5019\u7684\u70ed\u70b9\u8fd8\u662f\u5143\u5b87\u5b99\u3002\u90a3\u4e2a\u65f6\u5019\uff0c\u7531\u4e8e\u6ca1\u6709\u73b0\u5728\u5927\u6a21\u578b\u7684\u8fd9\u79cd\u80fd\u529b\uff0c\u6211\u4eec\u5f53\u7136\u4e5f\u6ca1\u6709\u4e3b\u8981\u53bb\u601d\u8003AI\u65b9\u9762\u7684\uff0c\u4f46\u662f\u4ece\u6211\u4eec\u81ea\u5df1\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\uff0c\u6211\u548c\u6211\u4eec\u516c\u53f8\u76842\u53f7\u5458\u5de5\uff0c\u57282020\u5e74\u7684\u65f6\u5019\u5c31\u601d\u8003\u548c\u8ba8\u8bba\u5c06\u6765\u600e\u6837\u8ba9AI\u5199\u4ee3\u7801\uff0c\u5f53\u7136\u6211\u4eec\u8bf4\u7684\u4e0d\u662f\u73b0\u5728\u8fd9\u79cd\u57fa\u4e8e\u5927\u6a21\u578b\u6765\u751f\u6210\u6587\u672c\u7684\u65b9\u5f0f\u751f\u6210\u4ee3\u7801\u3002\\r\\n\\r\\n\u4f46\u5927\u6a21\u578b\u786e\u5b9e\u52a0\u901f\u4e86\u6211\u4eec\u7684\u4e00\u4e9b\u60f3\u6cd5\u3002\\r\\n\\r\\n### \u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027\\r\\n\\r\\n\u6211\u4eec\u8d77\u521d\u7684\u76ee\u6807\u662f\u8ba9\u666e\u901a\u4eba\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u5e76\u6784\u9020\u4e00\u4e2a\u5b8c\u6574\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u4e5f\u662f\u6211\u4eec\u524d\u9762\u7b2c3\u90e8\u5206\u8ba8\u8bba\u7684\u5185\u5bb9\u3002\u7136\u800c\u6bd4\u8f83\u5de7\u5408\u548c\u60ca\u8bb6\u7684\u662f\uff0c\u81f3\u5c11\u4ece\u6211\u4eec\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\u770b\uff1a**\u8ba9\u666e\u901a\u4eba\u4f1a\u7f16\u5199\u4ee3\u7801\u4e0e\u8ba9AI\u7f16\u5199\u4ee3\u7801\u7684\u903b\u8f91\u662f\u7c7b\u4f3c\u7684\u3002**\\r\\n\\r\\n\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u53ef\u4ee5\u7528\u8bed\u8a00\u8868\u8ff0\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u4eba\u7c7b\u7684\u4efb\u4f55\u4fe1\u606f\u4e0e\u667a\u6167\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528\u81ea\u7136\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u3002\u7136\u800c\u8bed\u8a00\u6587\u5b57\u662f\u4e00\u79cd\u9762\u5411\u4eba\u7c7b\u7684\u4fe1\u606f\u8f7d\u4f53\uff0c\u5b83\u662f\u4e3a\u4e86\u4fbf\u4e8e\u4eba\u7c7b\u4e4b\u95f4\u8fdb\u884c\u4fe1\u606f\u4ea4\u6d41\u800c\u8bbe\u8ba1\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u80fd\u4e0d\u90a3\u4e48\u4e25\u8c28\uff0c\u751a\u81f3\u6ca1\u6709\u592a\u591a\u7ed3\u6784\u6027\uff0c\u4eba\u4eec\u4e4b\u95f4\u9700\u8981\u4fe1\u606f\u7f16\u89e3\u7801\uff0c\u7f16\u89e3\u7801\u7684\u6548\u7387\u548c\u80fd\u529b\u53ef\u80fd\u5dee\u5f02\u90fd\u975e\u5e38\u5de8\u5927\u3002\u800c\u7a0b\u5e8f\uff0c\u5219\u662f\u5728\u81ea\u7136\u8bed\u8a00\u57fa\u7840\u4e4b\u4e0a\u52a0\u5165\u66f4\u591a\u7684\u7ed3\u6784\u6027\uff0c\u5b83\u5728\u8868\u8ff0\u548c\u8bb0\u8f7d\u903b\u8f91\u7684\u540c\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0e\u8ba1\u7b97\u673a\u548c\u5176\u4ed6\u7a0b\u5e8f\u8fdb\u884c\u6c9f\u901a\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u7c7b\u5927\u8111\u4e2d\u7684\u903b\u8f91\u4e0d\u5149\u53ef\u4ee5\u7528\u4e8e\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6d41\uff0c\u8fd8\u53ef\u4ee5\u66f4\u76f4\u63a5\u5730\u8f6c\u5316\u4e3a\u751f\u4ea7\u529b\u3002\\r\\n\\r\\n\u7136\u800c\u8981\u8ba9AI\u80fd\u591f\u751f\u6210\u4ee3\u7801\uff0c\u8fd9\u4ef6\u4e8b\u60c5\u80af\u5b9a\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u5f53\u7136\u7531\u4e8eChatGPT\u7684\u51fa\u73b0\u76f8\u4fe1\u73b0\u5728\u5927\u90e8\u5206\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u611f\u53d7\u5230AI\u7684\u4ee3\u7801\u751f\u6210\u80fd\u529b\uff0c\u6709\u4e9b\u4eba\u6bd4\u8f83\u575a\u4fe1AI\u80fd\u591f\u4ee3\u66ff\u7a0b\u5e8f\u5458\u751f\u6210\u7a0b\u5e8f\uff0c\u6709\u4e9b\u4eba\u5219\u60b2\u89c2\u4e00\u4e9b\uff0c\u81f3\u5c11\u5728\u77ed\u671f\u5185\u3002\\r\\n\\r\\n\u8fd9\u91cc\u6682\u4e14\u4e0d\u4e89\u8bbaAI\u5230\u5e95\u80fd\u4e0d\u80fd\u6216\u8005\u4ec0\u4e48\u65f6\u5019\u66ff\u4ee3\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u56de\u5230\u95ee\u9898\u672c\u8eab\u3002\u4f20\u7edf\u7684\u6587\u672c\u5408\u6210\uff0c\u8ba1\u7b97\u7684\u662f\u6587\u5b57\u4e0e\u6587\u5b57\u4e4b\u95f4\uff0c\u53e5\u5b50\u4e0e\u53e5\u5b50\u4e4b\u95f4\u7684\u7ec4\u5408\u6982\u7387\uff0c\u8fd9\u91cc\u6709\u4e24\u4e2a\u4e8b\u60c5\u503c\u5f97\u6ce8\u610f\uff1a\u7b2c\u4e00\u662f\u4efb\u4f55\u5b57\u4e4b\u95f4\u90fd\u53ef\u4ee5\u7ec4\u5408\uff0c\u6240\u4ee5ChatGPT\u603b\u662f\u53ef\u4ee5\u7ed9\u6211\u4eec\u7b54\u6848\uff0c\u54ea\u6015\u5176\u4e2d\u7684\u53e5\u5b50\u7ec4\u5408\u548c\u903b\u8f91\u662f\u5b8c\u5168\u9519\u8bef\u7684\uff1b\u7b2c\u4e8c\u662f\u4e00\u822c\u5e38\u7528\u4e8e\u8868\u8ff0\u6b63\u786e\u8bed\u6cd5\u548c\u8bed\u4e49\u7684\u54ea\u4e9b\u6587\u5b57\u4fe1\u606f\u662f\u975e\u5e38\u591a\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4ChatGPT\u7406\u89e3\u6211\u4eec\u4e00\u822c\u7684\u6bd4\u8f83\u5927\u4f17\u5316\u7684\u8bed\u4e49\u662f\u5f88\u5bb9\u6613\u505a\u5230\u7684\u3002\\r\\n\\r\\n\u8ba1\u7b97\u673a\u7a0b\u5e8f\u5728\u8fd9\u4e24\u4e2a\u5c42\u9762\u90fd\u4e0e\u4e00\u822c\u7684\u6587\u672c\u77e5\u8bc6\u4fe1\u606f\u4e0d\u540c\uff1a\u9996\u5148\u4e24\u6bb5\u4ee3\u7801\u662f\u4e0d\u80fd\u7b80\u5355\u5408\u6210\u7684\uff0c\u4e24\u4e2a\u4ee3\u7801\u4e4b\u95f4\u5728\u5355\u7eaf\u5730\u50cf\u4e24\u6bb5\u6587\u5b57\u653e\u5728\u4e00\u8d77\u4e4b\u5916\uff0c\u8fd8\u9700\u8981\u5904\u7406\u53c2\u6570\u7684\u6570\u91cf\uff0c\u53c2\u6570\u7684\u540d\u79f0\uff0c\u7c7b\u578b\uff0c\u53d8\u91cf\u4ece\u54ea\u91cc\u83b7\u53d6\uff0cAPI\u4ece\u54ea\u91cc\u83b7\u53d6\u7b49\u7b49\uff0c\u8fd9\u8fdc\u8fdc\u8d85\u51fa\u7b80\u5355\u6587\u5b57\u5408\u6210\u7684\u8303\u56f4\u3002\u4f60\u53ef\u4ee5\u5408\u6210\u4e00\u4e2a\u6587\u672c\u7ec4\u5408\u7684\u6e90\u4ee3\u7801\u7ed3\u679c\uff0c\u4f46\u662f\u5176\u4e2d\u7684\u903b\u8f91\u53ef\u80fd\u5b8c\u5168\u662f\u9519\u8bef\u7684\uff0c\u51fd\u6570\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u53c2\u6570\u662f\u9519\u8bef\u7684\u3002\u56e0\u6b64\u76ee\u524d\u6765\u8bb2\uff0c\u5927\u90e8\u5206AI\u8fd8\u662f\u7528\u4e8e\u8f85\u52a9\u6bd4\u8f83\u5c40\u90e8\u3001\u72ec\u7acb\u7684\u4ee3\u7801\u751f\u6210\uff0c\u68c0\u67e5\uff0c\u63d0\u793a\u7b49\u7b49\uff0c\u8ddd\u79bb\u6784\u9020\u590d\u6742\u4e00\u70b9\u7684\u903b\u8f91\u663e\u7136\u8fd8\u7f3a\u4e4f\u4e00\u4e9b\u57fa\u7840\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u59a8\u788d\u5b83\u73b0\u5728\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u4e0d\u9519\u7684\u52a9\u624b\u3002\\r\\n\\r\\n\u6211\u4eec\u5728Reality World\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\uff0c\u4e3a\u4e86\u8981\u8ba9\u666e\u904d\u7528\u6237\u53ef\u4ee5\u6784\u9020\u7a0b\u5e8f\uff0c\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u591a\u5904\u8c03\u6574\uff0c\u4ece\u7c7b\u578b\u5b9a\u4e49\uff0c\u6570\u636e\u521d\u59cb\u5316\u548c\u7ba1\u7406\uff0c\u4e92\u64cd\u4f5c\u6027\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a8\u6f14\uff0c\u7ebf\u7a0b\u9694\u79bb\u7b49\u7b49\u3002\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u5c31\u662f\u7ec4\u5408\u6027\uff0c\u8fd9\u79cd\u7ec4\u5408\u6027\u4f7f\u5f97\u4e24\u4e2a\u76f8\u5173\u7684\u7ec4\u4ef6\uff0c\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u6dfb\u52a0\u4efb\u4f55\u53c2\u6570\u6216\u8005\u8f93\u5165\u8f93\u51fa\u7684\u8bbe\u7f6e\uff0c\u5c31\u53ef\u4ee5\u6b63\u786e\u5730\u6784\u9020\u7a0b\u5e8f\uff0c\u4f8b\u5982\u5982\u4e0b\u7684\u8fd9\u6bb5\u590d\u6742\u7684\u903b\u8f91\uff0c\u6574\u4e2aGraph\u7684\u8282\u70b9\u662f\u4e0d\u9700\u8981\u7528\u6237\u8fde\u63a5\u7684\uff0c\u5168\u90e8\u662f\u81ea\u52a8\u751f\u6210\u3002\\r\\n\\r\\n![img](images\\\\4.jpg)\\r\\n\\r\\n\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fde\u63a5\u5173\u7cfb\u662f\u81ea\u52a8\u63a8\u5bfc\u7684\\r\\n\\r\\n\u8fd9\u6837\u7684\u7ec4\u5408\u6027\u770b\u8d77\u6765\u662f\u4e0d\u53ef\u601d\u8bae\u7684\uff0c\u8fd9\u91cc\u6211\u4e0d\u4f1a\u8ba8\u8bba\u5177\u4f53\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fd9\u6837\u60f3\u8c61\u4e00\u4e0b\uff1a\u7f16\u8bd1\u5668\u5bf9\u4e8e\u4e00\u4e2a\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\uff0c\u672c\u6765\u5c31\u662f\u9996\u5148\u5f53\u6210\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u6a21\u5757\u8fdb\u884c\u7f16\u8bd1\u7684\uff0c\u53ea\u4e0d\u8fc7\u7f16\u8bd1\u5668\u9664\u4e86\u7f16\u8bd1\u6bcf\u4e2a\u6307\u4ee4\u672c\u8eab\uff0c\u8fd8\u4f7f\u7528\u4e00\u4e9b\u7b26\u53f7\u8868\u8bb0\u8f7d\u4e86\u6240\u6709\u5916\u90e8\u6a21\u5757\u5f15\u7528\u7684\u5173\u7cfb\u548c\u5730\u5740\uff0c\u7136\u540e\u5728\u94fe\u63a5\u9636\u6bb5\u5c06\u8fd9\u4e9b\u5730\u5740\u4fee\u6539\u4e3a\u6700\u7ec8\u7684\u7edd\u5bf9\u5730\u5740\u3002\u4ece\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u662f\u6709\u53ef\u80fd\u4ee5\u66f4\u5e95\u5c42\u7684\u65b9\u5f0f\u53bb\u5b8c\u6210\uff0c\u800c\u4e0d\u662f\u628a\u8fd9\u90e8\u5206\u4ea4\u7ed9\u7a0b\u5e8f\u5458\u3002\\r\\n\\r\\n\u8fd9\u6837\u7684\u7ec4\u5408\u80fd\u529b\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u53d8\u6210\u4e86\u5355\u7eaf\u7684\u5408\u6210\uff0c\u6ca1\u9519\uff0c\u8fd9\u4e2a\u5408\u6210\u7684\u65b9\u5f0f\u8ddf\u6587\u672c\u5408\u6210\u662f\u975e\u5e38\u76f8\u4f3c\u7684\uff1a\u5b83\u4eec\u4ec5\u4ec5\u662f\u653e\u5230\u4e00\u8d77\uff0c\u4e0d\u9700\u8981\u6307\u5b9a\u989d\u5916\u7684\u7a0b\u5e8f\u7ed3\u6784\u4fe1\u606f\uff0c\u4f8b\u5982\u53c2\u6570\uff0c\u53d8\u91cf\uff0c\u51fd\u6570\u5730\u5740\u7b49\u7b49\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u6709\u673a\u4f1a\u8ba9AI\u53bb\u751f\u6210\u7a0b\u5e8f\uff0c\u8fd9\u91ccAI\u53ea\u9700\u8981\u4ece\u4e00\u822c\u7684\u6587\u5b57\u610f\u4e49\u4e0a\u53bb\u7406\u89e3\u7ec4\u4ef6\u7684\u8bed\u4e49\uff0c\u5e76\u7ed9\u51fa\u7ec4\u4ef6\u5408\u6210\u5e8f\u5217\uff0c\u800c\u5e95\u5c42\u7684\u8fd0\u884c\u65f6\u5f15\u64ce\u5c06\u8fd9\u4e9b\u5e8f\u5217\u8f6c\u5316\u4e3a\u771f\u6b63\u7684\u7a0b\u5e8f\u3002\\r\\n\\r\\n\u4e0e\u76f4\u63a5ChatGPT\u6784\u9020\u7a0b\u5e8f\u4ee3\u7801\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u4ee3\u7801\u4e00\u65e6\u88ab\u6784\u9020\uff0c\u5c31\u662f\u6b63\u786e\u7684\uff0c\u53ef\u4ee5\u8fd0\u884c\u7684\uff0c\u800c\u4e0d\u9700\u8981\u4eba\u53bb\u68c0\u67e5\u5176\u4e2d\u53ef\u80fd\u5b58\u5728\u7684\u7a0b\u5e8f\u903b\u8f91\u7684\u9519\u8bef\u3002\\r\\n\\r\\n### \u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\\r\\n\\r\\n\u663e\u7136\uff0c\u4e0e\u76f4\u63a5\u8ba9AI\u6784\u9020\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u76f8\u6bd4\uff0c\u66f4\u597d\u7684\u4f7f\u7528\u65b9\u5f0f\u53ef\u80fd\u662fAutoGPT\u6216\u8005OpenAI\u7684\u63d2\u4ef6\u7cfb\u7edf\uff0c\u5728\u8fd9\u79cd\u67b6\u6784\u4e2d\uff0cAI\u66f4\u591a\u662f\u8d1f\u8d23\u6bd4\u8f83\u901a\u7528\u7684\u4e00\u4e9b\u8bed\u4e49\u7406\u89e3\uff0c\u7136\u540e\u628a\u5177\u4f53\u7684\u4e00\u4e9b\u4e0e\u9886\u57df\u7cfb\u7edf\u7684\u4ea4\u4e92\u4ea4\u7ed9\u4e13\u95e8\u7684\u63d2\u4ef6\u53bb\u89e3\u51b3\u3002\\r\\n\\r\\n\u7136\u800c\u5728OpenAI\u7684Plugin\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2aPlugin\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u5e94\u7528\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u63cf\u8ff0\u597d\u7684\u8c03\u7528\u903b\u8f91\u4f7f\u5f97ChatGPT\u53ef\u4ee5\u6b63\u786e\u5730\u8c03\u7528\u5404\u4e2a\u5e94\u7528\u8f6f\u4ef6\u7684\u63a5\u53e3\uff0c\u4f46\u5982\u679c\u4f60\u7684\u4f7f\u7528\u672c\u8eab\u662f\u8981\u5728\u591a\u4e2aplugin\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u60f3\u6784\u9020\u4efb\u610f\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u628a\u6bcf\u4e2aplugin\u63a5\u53e3\u5f53\u4f5c\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u53c8\u4f1a\u56de\u5230\u8ba9AI\u7f16\u5199\u903b\u8f91\u4ee3\u7801\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u76f8\u5bf9\u4e8e\u8fd9\u79cdPlugin\u7cfb\u7edf\uff0cReality World\u63d0\u4f9b\u7684\u4e0d\u662f\u4e00\u4e2a\u5355\u4e2aplugin\uff0c\u800c\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u80fd\u529b\uff0c\u5b83\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u4e00\u79cd\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\uff0c\u56e0\u4e3aAI\u53d1\u51fa\u7684\u6587\u672c\u5e8f\u5217\uff0c\u4f1a\u88abReality World\u5f53\u4f5c\u8f93\u5165\uff0c\u7136\u540e\u6309\u7167\u7a0b\u5e8f\u6784\u9020\u7684\u903b\u8f91\u53bb\u68c0\u7d22\u76f8\u5e94\u7684\u7ec4\u4ef6\u5e76\u7ec4\u5408\u6784\u9020\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u8981\u4e48\u662f\u6784\u9020\u4e0d\u51fa\u6765\u7684\uff0c\u8981\u4e48\u5c31\u662f\u81f3\u5c11\u80fd\u591f\u6210\u529f\u8fd0\u884c\u7684\uff0c\u800c\u5269\u4e0b\u7684\u6b63\u786e\u6027\u95ee\u9898\u5c31\u53d6\u51b3\u4e8e\u7ec4\u4ef6\u63cf\u8ff0\u7684\u51c6\u786e\u6027\u548cAI\u5bf9\u8bed\u4e49\u7684\u7406\u89e3\u4e86\u3002\\r\\n\\r\\n## \u62e5\u62b1Rust\\r\\n\\r\\n\u6211\u539f\u672c\u4ee5\u4e3a\u7684\u5f00\u53d1\u5468\u671f\u8fd8\u662f\u4f1a\u6bd4\u8f83\u957f\u7684\uff0c\u6bd5\u7adf\u8bbe\u8ba1\u7684\u7cfb\u7edf\u8bbe\u8ba1\u8fd8\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u65e9\u5148\u6211\u4f7f\u7528\u7684\u662fC++/C\u8fdb\u884c\u5f00\u53d1\uff0c\u8fdb\u884c\u4e86\u4e00\u4e9b\u7b80\u5355\u7684\u8bed\u8a00\u5305\u88c5\u548c\u7f16\u8bd1\u6d41\u7a0b\u5b9a\u5236\u3002\u56e0\u4e3a\u6211\u4eec2\u53f7\u5458\u5de5\u4e00\u76f4\u662fRust\u7231\u597d\u8005\uff0c\u4e00\u76f4\u5728\u9f13\u52a8\u6211\u4f7f\u7528Rust\uff0c\u867d\u7136\u4e4b\u524d\u770b\u8fc7Rust\u7684\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u4f46\u662f\u611f\u89c9\u8fd8\u662f\u6ca1\u6709\u7279\u522b\u7684\u52a8\u529b\u53bb\u5b8c\u5168\u5207\u6362\u5230Rust\u3002\\r\\n\\r\\n\u540e\u6765\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4f7f\u7528Rust\u8fdb\u884c\u5f00\u53d1\uff0c\u5f00\u59cb\u4e5f\u662f\u6709\u4e9b\u4e0d\u4e60\u60ef\uff0c\u4f46\u662f\u5728\u9010\u6b65\u5b66\u4e60\u548c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u611f\u53d7\u5230\u4e86Rust\u7684\u597d\u5904\uff0c\u8fd9\u91cc\u7ed9\u5927\u5bb6\u5206\u4eab\u548c\u63a8\u8350\u4e00\u4e0b\u3002\\r\\n\\r\\nRust\u5bf9\u6211\u800c\u8a00\u6700\u5927\u7684\u597d\u5904\u548c\u4f53\u9a8c\u662f\uff0c\u8fed\u4ee3\u901f\u5ea6\u6bd4\u8f83\u5feb\uff0c\u8fd9\u7b26\u5408\u6211\u73b0\u5728\u7684\u9700\u6c42\u3002\u53ea\u8981\u4ee3\u7801\u7f16\u8bd1\u901a\u8fc7\uff0c\u51e0\u4e4e\u4e0d\u4f1a\u82b1\u65f6\u95f4\u53bb\u6392\u67e5\u4e00\u4e9b\u6bd4\u8f83\u8be1\u5f02\uff0c\u751a\u81f3\u9700\u8981\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u65ad\u6b65\u8c03\u8bd5\u624d\u80fd\u53d1\u73b0\u95ee\u9898\u7684bug\uff0c\u4e00\u822c\u6709bug\u5c31\u57fa\u672c\u4e0a\u5927\u90e8\u5206\u8fd8\u662f\u903b\u8f91\u95ee\u9898\uff0c\u800c\u4e14Rust\u7f16\u8bd1\u5668\u53ef\u4ee5\u6bd4\u8f83\u7cbe\u51c6\u5730\u544a\u8bc9\u4f60\u95ee\u9898\u7684\u4f4d\u7f6e\uff0c\u57fa\u672c\u4e0a\u4e00\u770b\u63d0\u793a\u5c31\u77e5\u9053\u8be5\u600e\u4e48\u6539\u4ee3\u7801\u4e86\u3002\\r\\n\\r\\n\u5f53\u7136\u7f3a\u70b9\u4e3b\u8981\u662f\u5927\u5bb6\u8ba8\u8bba\u6bd4\u8f83\u591a\u7684\u9650\u5236\u4e86\uff0c\u4f60\u5f97\u5f88\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u8bbe\u8ba1\u6574\u4e2a\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u5982\u679c\u50cf\u4f20\u7edfC++\u90a3\u6837\u5230\u5904\u662f\u76f8\u4e92\u5f15\u7528\u663e\u7136\u51e0\u4e4e\u80af\u5b9a\u662f\u4f60\u5b8c\u5168\u6ca1\u6cd5\u901a\u8fc7\u7f16\u8bd1\u5668\uff0c\u4f60\u5f97\u8bbe\u8ba1\u597d\u6574\u4e2a\u7a0b\u5e8f\u5bf9\u8c61\u7684\u7ed3\u6784\uff0c\u8fd9\u91cc\u63a8\u8350Bevy\u5f15\u64ce\u5c31\u662f\u975e\u5e38\u597d\u7684\u67b6\u6784\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u51e0\u4e4e\u80fd\u89e3\u51b3\u5927\u90e8\u5206\u76f8\u4e92\u5f15\u7528\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u7b2c\u4e8c\u4e2a\u6bd4\u8f83\u5927\u7684\u95ee\u9898\u662f\u591a\u6b21\u5f15\u7528\u548c\u501f\u7528\u7684\u95ee\u9898\u4e86\uff0c\u8fd9\u4e2a\u95ee\u9898\u76f8\u5bf9\u597d\u89e3\u51b3\u4e00\u70b9\uff0c\u9996\u5148\u67b6\u6784\u597d\u4f1a\u5c11\u6389\u5f88\u591a\u8fd9\u79cd\u95ee\u9898\uff1b\u5176\u6b21\u5bf9\u4e8e\u5c40\u90e8\u7684\u4e00\u4e9b\u65b9\u6cd5\uff0c\u5b9e\u5728\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u4e07\u80fd\u5927\u6cd5\u5c31\u662f\u590d\u5236\u6570\u636e\u5c31\u597d\uff0c\u8fd9\u4e2a\u4e5f\u4e0d\u9700\u8981\u5b8c\u5168\u56de\u907f\uff0c\u6bd5\u7adf\u5728C++\u4e2d\u4e5f\u7ecf\u5e38\u4f1a\u5b58\u5728\u5bf9\u8c61\u590d\u5236\uff1b\u518d\u6709\u7a0d\u5fae\u590d\u6742\u4e00\u70b9\u5c31\u662f\u4f7f\u7528move\uff0c\u5148\u5c06\u6570\u636emove\u51fa\u6765\uff0c\u7136\u540e\u8fdb\u884c\u64cd\u4f5c\u4e4b\u540e\u518d\u586b\u56de\u53bb\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u6ca1\u6709\u5e76\u53d1\u95ee\u9898\uff0c\u8fd9\u79cd\u601d\u8def\u4e5f\u662f\u4e00\u79cd\u65b9\u6cd5\u3002\\r\\n\\r\\n\u6700\u540e\uff0c\u5173\u4e8e\u6709\u4e9b\u4eba\u4f1a\u89c9\u5f97\uff0c\u50cfRust\u8fd9\u6837\u5f3a\u8feb\u5f00\u53d1\u8005\u8fc7\u65e9\u5173\u6ce8\u67b6\u6784\u4f1a\u5f71\u54cd\u5feb\u901f\u8fed\u4ee3\u3002\u8fd9\u4e00\u70b9\u6211\u4e0d\u662f\u5f88\u8d5e\u540c\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u9879\u76ee\uff0c\u5feb\u901f\u8fed\u4ee3\u4e5f\u662f\u8981\u6b63\u786e\u8fd0\u884c\u7684\uff0c\u800c\u4e14\u5982\u679c\u9879\u76ee\u672c\u8eab\u601d\u8003\u7740\u8db3\u591f\u591a\uff0c\u6216\u8005\u9879\u76ee\u6700\u7ec8\u80af\u5b9a\u662f\u8981\u4e0a\u7ebf\u4f7f\u7528\u7684\uff0c\u6211\u89c9\u5f97\u6162\u4e00\u70b9\u4e00\u8fb9\u8fed\u4ee3\u4e00\u8fb9\u5c31\u628a\u4ee3\u7801\u67b6\u6784\u5199\u7684\u66f4\u597d\uff0c\u4e5f\u8bb8\u6700\u7ec8\u662f\u4e00\u4ef6\u66f4\u597d\u7684\u4e8b\u60c5\u3002\\r\\n\\r\\n## \u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b\\r\\n\\r\\n\u6211\u4ece2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\uff0c\u51e0\u4e4e\u6574\u6574\u4e00\u5e74\u65f6\u95f4\u5168\u90e8\u90fd\u5728\u601d\u8003\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u540e\u671f\u7684\u5f00\u53d1\u3002\u521a\u5f00\u59cb2\u4e2a\u6708\uff0c\u601d\u8def\u8fd8\u4e0d\u662f\u7279\u522b\u6e05\u6670\uff0c\u53ea\u662f\u5728\u4e0d\u505c\u3001\u75af\u72c2\u5730\u770b\u4e66\uff0c\u6211\u51e0\u4e4e\u628a\u6240\u6709\u80fd\u4e70\u5230\u7684\u4e2d\u6587\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u76f8\u5173\u7684\u4e66\u90fd\u770b\u4e86\u4e00\u9762\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u9010\u5b57\u9010\u53e5\u6162\u6162\u770b\uff0c\u90fd\u662f\u98de\u5feb\u5730\u6d4f\u89c8\uff0c\u5e76\u4e14\u8111\u888b\u4e2d\u9ad8\u901f\u8fd0\u8f6c\u7740\uff0c\u968f\u65f6\u90fd\u60f3\u7740\u6211\u8111\u888b\u4e2d\u7684\u54ea\u4e9b\u95ee\u9898\u600e\u4e48\u89e3\u51b3\uff0c\u8fd9\u6837\u5e26\u7740\u95ee\u9898\u770b\u4e66\u7684\u597d\u5904\u662f\uff0c\u53ea\u8981\u77e5\u8bc6\u4e4b\u95f4\u6709\u4e00\u70b9\u7684\u76f8\u5173\u6027\uff0c\u5c31\u80fd\u591f\u975e\u5e38\u654f\u9510\u5730\u6355\u6349\u5e76\u5173\u8054\u4e0a\uff0c\u7136\u540e\u518d\u5bf9\u8fd9\u5757\u77e5\u8bc6\u8fdb\u884c\u6df1\u5165\u5b66\u4e60\uff0c\u6700\u7ec8\u53ef\u4ee5\u8df3\u51fa\u5355\u7eaf\u7684\u77e5\u8bc6\u672c\u8eab\u53bb\u5e94\u7528\u8fd9\u4e9b\u77e5\u8bc6\uff0c\u751a\u81f3\u5c06\u4e00\u79cd\u77e5\u8bc6\u7684\u601d\u7ef4\u7528\u6765\u89e3\u51b3\u53e6\u4e00\u4e2a\u95ee\u9898\u3002\\r\\n\\r\\n\u6574\u4e2a\u4e00\u5e74\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8d85\u8fc750\u672c\u76f8\u5173\u7684\u4e66\u7c4d\uff0c\u5e76\u4e14\u5927\u90e8\u5206\u6bd4\u8f83\u76f8\u5173\u7684\u77e5\u8bc6\u90fd\u662f\u53cd\u590d\u9605\u8bfb\u7684\u3002\\r\\n\\r\\n\u65e9\u671f\u6211\u4e60\u60ef\u4f7f\u7528iPhone\u7684\u5907\u5fd8\u5f55app\u8bb0\u5f55\u4e00\u4e9b\u60f3\u6cd5\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u65b9\u4fbf\uff0c\u4efb\u4f55\u65f6\u5019\u60f3\u5230\u4e00\u70b9\u4e1c\u897f\u5c31\u53ef\u4ee5\u8bb0\u4e0b\u6765\uff0c\u5f88\u591a\u65f6\u5019\u665a\u4e0a\u534a\u591c\u90fd\u4f1a\u8d77\u6765\u8bb0\u5f55\uff0c\u786e\u5b9e\u6709\u4e9b\u4e1c\u897f\u5f88\u5feb\u5c31\u662f\u53ef\u4ee5\u5fd8\u8bb0\u7684\u3002\u540e\u6765\u4f53\u7cfb\u6bd4\u8f83\u5b8c\u6574\u7684\u65f6\u5019\u6211\u9010\u6b65\u5c06\u8fd9\u4e9b\u4fe1\u606f\u6574\u7406\u5230Markdown\u4e2d\uff0c\u5e76\u9010\u6b65\u79ef\u7d2f\uff0c\u73b0\u5728\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u5df2\u7ecf\u8d85\u8fc722\u4e07\u5b57\uff0c\u6574\u6574400\u591a\u9875\uff0c\u91cc\u9762\u5305\u542b\u4e86\u975e\u5e38\u591a\u7684\u6280\u672f\u7406\u89e3\u548c\u601d\u8003\u3002\u7b49\u9002\u5f53\u7684\u65f6\u5019\u6211\u4f1a\u5c06\u8fd9\u4e9b\u5185\u5bb9\u6574\u7406\u6210\u56fe\u4e66\u51fa\u7248\u3002\\r\\n\\r\\n\u8c46\u74e3\u4e0a\u6211\u5217\u4e86\u4e2atop 10\u7684\u56fe\u4e66\u699c\u5355\uff0c\u7f16\u7a0b\u76f8\u5173\u7684\u662f\uff1a\u300a\u7f16\u8bd1\u539f\u7406\u300b\u3001\u300aErlang\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\u300b\u3001\u300a\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u6a21\u5f0f\u300b\u3001\u300a\u6e38\u620f\u673a\u5236\u300b\u3001\u300a\u94fe\u63a5\u5668\u4e0e\u52a0\u8f7d\u5668\u300b\u3001\u300aData-oriented design\u300b\u3001\u300a\u51fd\u6570\u5f0f\u7f16\u7a0b\u601d\u7ef4\u300b\u3001\u300a\u51e4\u51f0\u67b6\u6784\u300b\u3002\\r\\n\\r\\n\u9664\u4e86\u56fe\u4e66\uff0c\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u5bf9\u6211\u5f71\u54cd\u6bd4\u8f83\u5927\u7684\u662f\uff1aErlang\u3001USD\u3001LLVM\u3001MLIR\u3001ECS\u3001Web Assembly\u3001Machinations\u3001\u300a\u5821\u5792\u4e4b\u591c\u300b\u3001Snapchat\u3001Bevy\u7b49\u7b49\u3002\\r\\n\\r\\n## \u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f\\r\\n\\r\\n\u53ef\u80fd\u5f88\u591a\u670b\u53cb\u4f1a\u5173\u5fc3\u4f60\u7684\u5546\u4e1a\u6a21\u5f0f\u662f\u4ec0\u4e48\uff0c\u8fd9\u91cc\u6211\u4e0d\u60f3\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u76ee\u524d\u53ea\u8ddf\u6295\u8d44\u4eba\u4e4b\u95f4\u624d\u4f1a\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u5f53\u7136\u6709\u5f88\u591a\u601d\u8003\uff0c\u4f46\u662f\u5728\u7f3a\u4e4f\u5f88\u591a\u80cc\u666f\u4e0b\uff0c\u6211\u89c9\u5f97\u73b0\u5728\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u8fd8\u662f\u592a\u65e9\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u4ecb\u610f\u5927\u5bb6\u8ba8\u8bba\u3002\\r\\n\\r\\n## \u53c2\u4e0eReality World\u5f00\u53d1\\r\\n\\r\\n\u6beb\u65e0\u7591\u95ee\uff0cReality World\u6d89\u53ca\u5230\u5f88\u591a\u6280\u672f\u601d\u7ef4\uff0c\u751a\u81f3\u5305\u542b\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u6211\u76f8\u4fe1\u53c2\u4e0e\u8fd9\u4e2a\u9879\u76ee\u672c\u8eab\u80af\u5b9a\u4f1a\u5b66\u5230\u5f88\u591a\u77e5\u8bc6\u3002\u4f46\u73b0\u9636\u6bb5\u8fd8\u4e0d\u80fd\u6b63\u5f0f\u516c\u5e03\uff0c\u6211\u4eec\u9884\u8ba1\u4f1a\u57286\u4e2a\u6708\u5de6\u53f3\uff0c\u5728\u5185\u90e8\u8fed\u4ee3\u4e00\u4e9b\u7248\u672c\u518d\u6b63\u5f0f\u516c\u5e03\uff0c\u6240\u4ee5\u5728\u8fd9\u4e2a\u9636\u6bb5\u6211\u4e5f\u4e0d\u4f1a\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u592a\u591a\u5177\u4f53\u7684\u6280\u672f\u7ec6\u8282\u3002\u56e0\u4e3a\u5728\u4e2d\u56fd\u505a\u8fd9\u79cd\u4e8b\u60c5\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\uff0c\u7f51\u7edc\u4e0a\u4f1a\u6709\u5404\u79cd\u5404\u6837\u7684\u58f0\u97f3\uff0c\u6211\u4e0d\u5e0c\u671b\u53d7\u8fd9\u79cd\u5e72\u6270\uff0c\u4e3a\u4e86\u628a\u8fd9\u4ef6\u4e8b\u60c5\u505a\u6210\uff0c\u9700\u8981\u4e00\u9897\u5b89\u9759\u7684\u5fc3\u3002\\r\\n\\r\\n\u5982\u679c\u4f60\u5bf9Reality World\u611f\u5174\u8da3\uff0c\u4f60\u53ef\u4ee5\u8054\u7cfb\u6211\uff0c\u79c1\u4eba\u4e4b\u95f4\u6709\u65f6\u5019\u6211\u4f1a\u8ba8\u8bba\u4e00\u4e9b\u6280\u672f\u3002\\r\\n\\r\\n## \u5173\u4e8e\u878d\u8d44\\r\\n\\r\\n\u5766\u767d\u8bf4\uff0c\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u8fd8\u6ca1\u6709\u62ff\u5230\u4efb\u4f55\u6295\u8d44\uff0c\u66fe\u7ecf\u6709\u975e\u5e38\u9876\u7ea7\u7684\u8d44\u672c\u804a\u4e86\u5f88\u4e45\uff0c\u5408\u4f19\u4eba\u4e5f\u975e\u5e38\u8ba4\u53ef\u8fd9\u4e2a\u9879\u76ee\u7684\u4ef7\u503c\uff0c\u4f46\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u8c08\u5b9a\u3002\u5728\u65e9\u671f\uff0c\u6211\u80af\u5b9a\u72af\u4e86\u5f88\u591a\u9519\u8bef\uff0c\u4f8b\u5982\u5bf9\u9879\u76ee\u7684\u89c4\u5212\uff0c\u4f30\u503c\u9884\u671f\uff0c\u751a\u81f3\u8868\u8fbe\u7b49\u7b49\u90fd\u8fd8\u662f\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5f53\u7136\u4e5f\u662f\u4e00\u79cd\u6210\u957f\uff1b\u6b64\u5916\u53bb\u5e74\u53c8\u9047\u5230\u75ab\u60c5\uff0c\u8fd8\u6709\uff0c\u4f60\u61c2\u7684\uff0c\u4eca\u5e74\u7684ChatGPT...\\r\\n\\r\\n\u603b\u4e4b\uff0c\u540e\u7eed\u7684\u5f00\u53d1\u80af\u5b9a\u8fd8\u662f\u9700\u8981\u56e2\u961f\u548c\u8d44\u672c\uff0c\u6211\u4e00\u4e2a\u4eba\u5f88\u96be\u8fd9\u6837\u4e00\u76f4\u6301\u7eed\u4e0b\u5348\uff0c\u6b22\u8fce\u5404\u4f4d\u611f\u5174\u8da3\u7684\u8d44\u672c\u3001\u5f00\u53d1\u8005\u751a\u81f3\u52a0\u6cb9\u52a9\u5a01\u7684\u670b\u53cb\u4e0e\u6211\u8054\u7cfb\u3002\\r\\n\\r\\n\u5fae\u4fe1\uff1aARealityWorld\\r\\n\\r\\n## \u540e\u8bb0\\r\\n\\r\\n\u5728\u8fd9\u4e00\u5e74\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ddf\u5f88\u591a\u4e0d\u540c\u7684\u670b\u53cb\u6709\u8fc7\u5f88\u591a\u4ea4\u6d41\uff0c\u5f88\u591a\u670b\u53cb\u90fd\u5728\u9f13\u52b1\u548c\u652f\u6301\uff0c\u5e0c\u671b\uff0c\u6700\u7ec8\u4e0d\u4f1a\u8f9c\u8d1f\u4f60\u4eec\uff01"}]}')}}]); \ No newline at end of file diff --git a/assets/js/c6a65125.80345f31.js b/assets/js/c6a65125.80345f31.js deleted file mode 100644 index c1526cf..0000000 --- a/assets/js/c6a65125.80345f31.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[9923],{4137:(e,t,l)=>{l.d(t,{Zo:()=>k,kt:()=>c});var n=l(7294);function a(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,n)}return l}function r(e){for(var t=1;t<arguments.length;t++){var l=null!=arguments[t]?arguments[t]:{};t%2?i(Object(l),!0).forEach((function(t){a(e,t,l[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(l)):i(Object(l)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(l,t))}))}return e}function p(e,t){if(null==e)return{};var l,n,a=function(e,t){if(null==e)return{};var l,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)l=i[n],t.indexOf(l)>=0||(a[l]=e[l]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)l=i[n],t.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(a[l]=e[l])}return a}var u=n.createContext({}),o=function(e){var t=n.useContext(u),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},k=function(e){var t=o(e.components);return n.createElement(u.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var l=e.components,a=e.mdxType,i=e.originalType,u=e.parentName,k=p(e,["components","mdxType","originalType","parentName"]),s=o(l),m=a,c=s["".concat(u,".").concat(m)]||s[m]||d[m]||i;return l?n.createElement(c,r(r({ref:t},k),{},{components:l})):n.createElement(c,r({ref:t},k))}));function c(e,t){var l=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=l.length,r=new Array(i);r[0]=m;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[s]="string"==typeof e?e:a,r[1]=p;for(var o=2;o<i;o++)r[o]=l[o];return n.createElement.apply(null,r)}return n.createElement.apply(null,l)}m.displayName="MDXCreateElement"},7894:(e,t,l)=>{l.r(t),l.d(t,{contentTitle:()=>r,default:()=>s,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var n=l(7462),a=(l(7294),l(4137));const i={},r=void 0,p={type:"mdx",permalink:"/whitepaper/",source:"@site/src/pages/whitepaper/index.md",description:"\u4e00\u79cd\u81ea\u6211\u8fdb\u5316\u7684\u3001\u53ef\u4e92\u64cd\u4f5c\u7684\u5206\u5e03\u5f0f\u5e94\u7528\u7cfb\u7edf",frontMatter:{}},u=[{value:"\u6458\u8981",id:"\u6458\u8981",level:2},{value:"\u95ee\u9898",id:"\u95ee\u9898",level:2},{value:"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168",id:"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168",level:3},{value:"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c",id:"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c",level:3},{value:"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236",id:"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236",level:3},{value:"\u76f8\u5173\u77e5\u8bc6",id:"\u76f8\u5173\u77e5\u8bc6",level:2},{value:"\u4e92\u64cd\u4f5c\u6027",id:"\u4e92\u64cd\u4f5c\u6027",level:3},{value:"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",id:"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",level:3},{value:"\u865a\u62df\u673a",id:"\u865a\u62df\u673a",level:3},{value:"\u57fa\u4e8e\u7ec4\u5408\u4e0eECS",id:"\u57fa\u4e8e\u7ec4\u5408\u4e0eecs",level:3},{value:"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f",id:"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f",level:3},{value:"\u590d\u6742\u7cfb\u7edf",id:"\u590d\u6742\u7cfb\u7edf",level:3},{value:"RealityIS\u67b6\u6784\u54f2\u5b66",id:"realityis\u67b6\u6784\u54f2\u5b66",level:2},{value:"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61",id:"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61",level:3},{value:"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2",id:"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2",level:4},{value:"\u7c7b\u578b",id:"\u7c7b\u578b",level:5},{value:"\u6570\u636e",id:"\u6570\u636e",level:5},{value:"\u5b89\u5168",id:"\u5b89\u5168",level:5},{value:"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027",id:"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027",level:4},{value:"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784",id:"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784",level:3},{value:"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2",id:"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2",level:4},{value:"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784",id:"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784",level:5},{value:"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784",id:"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784",level:5},{value:"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236",id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236",level:5},{value:"\u52a8\u6001\u6027",id:"\u52a8\u6001\u6027",level:5},{value:"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784",id:"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784",level:6},{value:"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c",id:"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c",level:6},{value:"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd",id:"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd",level:4},{value:"\u667a\u80fd\u6d8c\u73b0",id:"\u667a\u80fd\u6d8c\u73b0",level:5},{value:"\u8ba1\u7b97\u7684\u672c\u8d28",id:"\u8ba1\u7b97\u7684\u672c\u8d28",level:5},{value:"\u8fdb\u5316\u7684\u7cfb\u7edf",id:"\u8fdb\u5316\u7684\u7cfb\u7edf",level:5},{value:"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784",id:"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784",level:3},{value:"RealityIS\u7cfb\u7edf\u67b6\u6784",id:"realityis\u7cfb\u7edf\u67b6\u6784",level:2},{value:"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf",id:"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf",level:3},{value:"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61",id:"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61",level:3},{value:"\u7b80\u5316\u6570\u636e\u83b7\u53d6",id:"\u7b80\u5316\u6570\u636e\u83b7\u53d6",level:3},{value:"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784",id:"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784",level:3},{value:"\u590d\u6742\u7cfb\u7edf\uff1a\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c",id:"\u590d\u6742\u7cfb\u7edf\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c",level:3},{value:"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92",id:"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92",level:3},{value:"\u865a\u62df\u673a",id:"\u865a\u62df\u673a-1",level:3},{value:"\u5b57\u8282\u7801",id:"\u5b57\u8282\u7801",level:4},{value:"inputs",id:"inputs",level:4},{value:"Standard\u7248\u672c\u517c\u5bb9",id:"standard\u7248\u672c\u517c\u5bb9",level:5},{value:"\u5c0f\u7248\u672c\u517c\u5bb9",id:"\u5c0f\u7248\u672c\u517c\u5bb9",level:6},{value:"\u5927\u7248\u672c\u66f4\u65b0",id:"\u5927\u7248\u672c\u66f4\u65b0",level:6},{value:"Lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92",id:"lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92",level:4},{value:"RealityIS\u6280\u672f\u7279\u5f81",id:"realityis\u6280\u672f\u7279\u5f81",level:2},{value:"\u6267\u884c\u6d41\u7a0b",id:"\u6267\u884c\u6d41\u7a0b",level:3},{value:"\u51fd\u6570\u8c03\u7528\u5173\u7cfb",id:"\u51fd\u6570\u8c03\u7528\u5173\u7cfb",level:4},{value:"\u6d41\u7a0b\u987a\u5e8f",id:"\u6d41\u7a0b\u987a\u5e8f",level:4},{value:"ShadeGraph",id:"shadegraph",level:4},{value:"Cogine",id:"cogine",level:4},{value:"\u4e92\u64cd\u4f5c\u6027",id:"\u4e92\u64cd\u4f5c\u6027-1",level:3},{value:"\u53ef\u7ec4\u5408\u6027",id:"\u53ef\u7ec4\u5408\u6027",level:3},{value:"\u4e2a\u6027\u5316",id:"\u4e2a\u6027\u5316",level:3},{value:"\u52a8\u6001\u6027",id:"\u52a8\u6001\u6027-1",level:3},{value:"\u5206\u5e03\u5f0f",id:"\u5206\u5e03\u5f0f",level:3},{value:"\u8bed\u4e49\u5316",id:"\u8bed\u4e49\u5316",level:3},{value:"\u7ec4\u4ef6\u5316",id:"\u7ec4\u4ef6\u5316",level:3},{value:"\u88ab\u52a8\u5f0f",id:"\u88ab\u52a8\u5f0f",level:3},{value:"\u5e94\u7528",id:"\u5e94\u7528",level:2},{value:"\u6311\u6218",id:"\u6311\u6218",level:2},{value:"\u6280\u672f\u6311\u6218",id:"\u6280\u672f\u6311\u6218",level:3},{value:"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898",id:"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898",level:4},{value:"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f",id:"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f",level:4},{value:"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b",id:"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b",level:4},{value:"\u7528\u6237\u4f53\u9a8c\u6311\u6218",id:"\u7528\u6237\u4f53\u9a8c\u6311\u6218",level:3},{value:"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406",id:"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406",level:4},{value:"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c",id:"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c",level:4},{value:"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c",id:"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c",level:4},{value:"\u5c55\u671b",id:"\u5c55\u671b",level:2},{value:"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0",id:"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0",level:3},{value:"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0",id:"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0",level:3},{value:"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0",id:"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0",level:3},{value:"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0",id:"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0",level:3},{value:"\u603b\u7ed3",id:"\u603b\u7ed3",level:2}],o={toc:u},k="wrapper";function s(e){let{components:t,...i}=e;return(0,a.kt)(k,(0,n.Z)({},o,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{align:"center"},"\u4e00\u79cd\u81ea\u6211\u8fdb\u5316\u7684\u3001\u53ef\u4e92\u64cd\u4f5c\u7684\u5206\u5e03\u5f0f\u5e94\u7528\u7cfb\u7edf"),(0,a.kt)("br",null),(0,a.kt)("p",{align:"center"},"\u79e6\u6625\u6797"),(0,a.kt)("br",null),(0,a.kt)("p",null,"Reality World\u662f\u4e00\u4e2a\u4ee5\u4e92\u64cd\u4f5c\u6027\u4e3a\u6838\u5fc3\u76ee\u6807\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u548c\u67b6\u6784\uff0c\u5b83\u7684\u613f\u666f\u662f\u6784\u9020\u4e00\u4e2a\u65e0\u8fb9\u7684\u6570\u5b57\u4e16\u754c\uff0c\u4f7f\u5f97\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u5411\u8fd9\u4e2a\u7cfb\u7edf\u52a8\u6001\u6dfb\u52a0\u65b0\u7684\u5b50\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u5b50\u7a0b\u5e8f\u53ef\u4ee5\u548c\u5176\u5b83\u5b50\u7a0b\u5e8f\u4efb\u610f\u4ea4\u4e92\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u53ef\u4ee5\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u81ea\u6211\u8fdb\u5316\uff0c\u4ece\u800c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u52a0\u667a\u80fd\u3001\u4e30\u5bcc\u548c\u4e2a\u6027\u5316\u7684\u6570\u5b57\u4e16\u754c\u4f53\u9a8c\u3002",(0,a.kt)("br",null),(0,a.kt)("br",null)),(0,a.kt)("h2",{id:"\u6458\u8981"},"\u6458\u8981"),(0,a.kt)("p",null,"\u8fd1\u5e74\u6765\uff0c\u968f\u7740\u533a\u5757\u94fe\u3001\u5143\u5b87\u5b99\u4ee5\u53ca\u5927\u6a21\u578b\u7684\u53d1\u5c55\uff0c\u6570\u5b57\u4e16\u754c\u7684\u6784\u5efa\u903b\u8f91\u548c\u4f7f\u7528\u5f62\u6001\u90fd\u53d1\u751f\u4e86\u5f88\u5927\u53d8\u5316\u3002\u7136\u800c\u603b\u4f53\u800c\u8a00\uff0c\u76ee\u524d\u5e76\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u4e13\u95e8\u9762\u5411\u8fd9\u4e9b\u65b0\u578b\u7279\u5f81\u5e94\u7528\u7684\u5e95\u5c42\u67b6\u6784\uff0c\u751a\u81f3\u8fd8\u6ca1\u6709\u5f62\u6210\u6bd4\u8f83\u6e05\u6670\u548c\u7edf\u4e00\u7684\u601d\u8def\uff0c\u6bd4\u5982\u8fd9\u79cd\u67b6\u6784\u5e94\u8be5\u6709\u54ea\u4e9b\u65b0\u7684\u7279\u5f81\u3001\u5f62\u6001\u4ee5\u53ca\u8bbe\u8ba1\u76ee\u6807\u3002\u5c1d\u8bd5\u6784\u5efa\u8fd9\u6837\u7684\u4e00\u5957\u65b0\u7684\u65b9\u6cd5\u4f53\u7cfb\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u6211\u8ba4\u4e3a\u6838\u5fc3\u7684\u96be\u70b9\u5728\u4e8e\u5f88\u96be\u5355\u4ece\u8f6f\u4ef6\u67b6\u6784\u7684\u89c6\u89d2\u53bb\u89e3\u51b3\u8fd9\u4e00\u95ee\u9898\u3002\u6bd4\u5982\u5143\u5b87\u5b99\u7c7b\u5e94\u7528\uff0c\u8868\u9762\u4e0a\u770b\u6211\u4eec\u53ef\u4ee5\u5728\u73b0\u6709\u7684\u5f15\u64ce\u67b6\u6784\u4e0a\u53bb\u6784\u5efa\uff0c\u7136\u540e\u5143\u5b87\u5b99\u80cc\u540e\u7684\u6838\u5fc3\u903b\u8f91\u662f\u4e92\u64cd\u4f5c\u6027\uff0c\u5b83\u8981\u6c42\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u521b\u5efa\u7684\u5e94\u7528\u4e4b\u95f4\u80fd\u591f\u8fdb\u884c\u4ea4\u4e92\uff0c\u4ece\u800c\u63d0\u4f9b\u66f4\u52a8\u6001\u3001\u591a\u5143\u548c\u4e2a\u6027\u5316\u7684\u6570\u5b57\u5316\u4f53\u9a8c\uff0c\u7136\u800c\u4e92\u64cd\u4f5c\u6027\u548c\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u903b\u8f91\u662f\u76f8\u6096\u7684\u3002\u518d\u6bd4\u5982\u591a\u667a\u80fd\u4f53\u7c7b\u5e94\u7528\uff0c\u6700\u8fd1\u66f4\u591a\u7684\u5de5\u4f5c\u610f\u8bc6\u5230\u8fd9\u7c7b\u5e94\u7528\u7684\u903b\u8f91\u66f4\u53ef\u80fd\u9700\u8981\u5f88\u591a\u5177\u6709\u72ec\u7acb\u529f\u80fd\u7684\u5c0f\u667a\u80fd\u4f53\u8fdb\u884c\u76f8\u4e92\u534f\u4f5c\u6765\u5b9e\u73b0\uff0c\u8fd9\u79cd\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u7684\u903b\u8f91\u8ddf\u590d\u6742\u7cfb\u7edf\u7684\u884c\u4e3a\u662f\u7c7b\u4f3c\u7684\uff0c\u7136\u800c\u6211\u4eec\u5f53\u524d\u7684\u7f16\u7a0b\u6a21\u5f0f\u5e76\u6ca1\u6709\u9488\u5bf9\u8fd9\u6837\u7684\u601d\u60f3\u8fdb\u884c\u8bbe\u8ba1\u3002\u4ece\u4e0a\u9762\u7684\u8bba\u8ff0\u53ef\u4ee5\u770b\u51fa\uff0c\u672a\u6765\u6570\u5b57\u4e16\u754c\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u9700\u8981\u8003\u8651\u66f4\u591a\u7684\u8de8\u9886\u57df\u77e5\u8bc6\u4f53\u7cfb\u3002\u672c\u6587\u6b63\u662f\u901a\u8fc7\u5bf9\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u65b9\u6cd5\uff08\u5982\u9762\u5411\u5bf9\u8c61\u548c\u51fd\u6570\u5f0f\u7f16\u7a0b\u6a21\u578b\uff09\u3001\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7f16\u8bd1\u8fc7\u7a0b\u548c\u94fe\u63a5\u8fc7\u7a0b\u3001\u533a\u5757\u94fe\u3001\u590d\u6742\u7cfb\u7edf\u3001\u6e38\u620f\u5e94\u7528\u67b6\u6784\u7b49\u8de8\u9886\u57df\u77e5\u8bc6\u8fdb\u884c\u7cfb\u7edf\u5206\u6790\uff0c\u7ed3\u5408\u8fd9\u4e9b\u65b0\u578b\u5e94\u7528\u7684\u7279\u5f81\uff0c\u63d0\u51fa\u4e86\u4e00\u5957\u7cfb\u7edf\u7684\u67b6\u6784\u4f53\u7cfb\uff0c\u5b83\u5305\u62ec\u6e05\u6670\u7684\u8bbe\u8ba1\u539f\u5219\u3001\u76ee\u6807\u3001\u65b9\u6cd5\u54f2\u5b66\uff0c\u4ee5\u53ca\u4e00\u4e2a\u5305\u542b\u6838\u5fc3\u673a\u5236\u7684\u6e90\u4ee3\u7801\u5b9e\u73b0\u3002\u5e0c\u671b\u6b64\u5de5\u4f5c\u53ef\u4ee5\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u57fa\u7840\u67b6\u6784\u7684\u8bbe\u8ba1\u3001\u7814\u7a76\u548c\u5f00\u53d1\u63d0\u4f9b\u6709\u76ca\u7684\u6307\u5f15\u3002"),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"\u95ee\u9898"},"\u95ee\u9898"),(0,a.kt)("p",null,"\u8fd1\u51e0\u5e74\uff0c\u6570\u5b57\u4e16\u754c\u7684\u5f62\u6001\u53d1\u751f\u7740\u5de8\u5927\u7684\u53d8\u5316\uff0c\u4e00\u65b9\u9762\u4f3c\u4e4e\u662f\u9762\u5bf9\u4e92\u8054\u7f51\u7ea2\u5229\u7684\u9010\u6e10\u4e0b\u964d\uff0c\u4eba\u4eec\u9700\u8981\u65b0\u7684\u79d1\u6280\u5f15\u7206\u70b9\uff1b\u4f46\u53e6\u4e00\u65b9\u9762\uff0c\u8fd9\u4e9b\u65b0\u7684\u6982\u5ff5\u4e5f\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u6298\u5c04\u51fa\u4e00\u4e2a\u4fe1\u606f\uff1a\u90a3\u5c31\u662f\u6211\u4eec\u751f\u6d3b\u4e2d\u7684\u6570\u5b57\u5316\u8fd8\u4e0d\u591f\u5f7b\u5e95\uff0c\u8fd8\u4e0d\u591f\u4e30\u5bcc\uff0c\u8fd8\u6ca1\u6709\u5b8c\u5168\u91ca\u653e\u5b83\u5168\u90e8\u7684\u529b\u91cf\u3002"),(0,a.kt)("p",null,"\u4f8b\u5982\u5728Web 3.0\u7684\u6982\u5ff5\u4e2d\uff0c\u6211\u4eec\u5e0c\u671b\u6211\u4eec\u7684\u9690\u79c1\u548c\u8d44\u4ea7\u80fd\u591f\u4e0d\u88ab\u5c11\u6570\u4e2d\u5fc3\u5316\u7684\u5b9e\u4f53\u6240\u63a7\u5236\uff1b\u5728\u5143\u5b87\u5b99\u7684\u6982\u5ff5\u4e2d\uff0c\u6211\u4eec\u5e0c\u671b\u4efb\u4f55\u4eba\u80fd\u591f\u8fdb\u884c\u66f4\u81ea\u7531\u5730\u521b\u9020\u6570\u5b57\u5185\u5bb9\uff0c\u5e76\u4f7f\u6211\u4eec\u7684\u6570\u5b57\u5206\u8eab\u8fde\u540c\u6211\u4eec\u7684\u5f88\u591a\u80fd\u529b\u80fd\u591f\u5728\u8de8\u57df\u591a\u4e2a\u865a\u62df\u4e16\u754c\u4e2d\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u4ece\u800c\u63d0\u4f9b\u63a5\u8fd1\u73b0\u5b9e\u4e16\u754c\u7684\u6570\u5b57\u751f\u6d3b\u4f53\u9a8c\uff1b\u800c\u5728\u5927\u6a21\u578b\u5e94\u7528\u4e2d\uff0c\u968f\u7740\u5927\u6a21\u578b\u5bf9\u4eba\u7c7b\u4efb\u610f\u6307\u4ee4\u7684\u8bed\u4e49\u7406\u89e3\uff0c\u56fa\u5b9a\u7684\u8f6f\u4ef6\u903b\u8f91\u4f3c\u4e4e\u65e0\u6cd5\u5e94\u4ed8\u8fd9\u79cd\u903b\u8f91\u590d\u6742\u5ea6\uff0c\u6211\u4eec\u5e0c\u671b\u5e94\u7528\u5185\u90e8\u80fd\u591f\u66f4\u667a\u80fd\u5730\u534f\u8c03\u548c\u8c03\u5ea6\u6b63\u786e\u7684\u529f\u80fd\u6765\u89e3\u51b3\u4efb\u610f\u7684\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u50cf\u8fc7\u53bb\u90a3\u6837\u63d0\u4f9b\u56fa\u5b9a\u7ed3\u6784\u548c\u529f\u80fd\u7684\u8f6f\u4ef6\u3002"),(0,a.kt)("p",null,"\u6240\u6709\u8fd9\u4e9b\u65b0\u7684\u9700\u6c42\u53ef\u80fd\u90fd\u610f\u5473\u7740\u6211\u4eec\u9700\u8981\u65b0\u7684\u601d\u7ef4\u548c\u65b9\u6cd5\u6765\u6784\u5efa\u5e94\u7528\uff0c\u800c\u4eba\u4eec\u81ea\u7136\u662f\u5e0c\u671b\u57fa\u4e8e\u73b0\u6709\u7684\u8f6f\u4ef6\u5de5\u7a0b\u4f53\u7cfb\uff0c\u80fd\u591f\u8fdb\u884c\u5c11\u91cf\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u6765\u5b9e\u73b0\u4e0a\u8ff0\u8fd9\u4e9b\u5e94\u7528\u7684\u5f00\u53d1\u3002\u672c\u8282\u6211\u4eec\u5c31\u6765\u770b\u51e0\u4e2a\u57fa\u672c\u7684\u95ee\u9898\uff0c\u4ece\u800c\u7406\u89e3\u6211\u4eec\u73b0\u884c\u7684\u4f53\u7cfb\u5728\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u65b9\u9762\u4f1a\u9047\u5230\u54ea\u4e9b\u6311\u6218\uff0c\u8fd9\u4e9b\u95ee\u9898\u7684\u7406\u89e3\u4e5f\u4e3a\u540e\u9762\u7684\u67b6\u6784\u8bbe\u8ba1\u63d0\u4f9b\u91cd\u8981\u7684\u4f9d\u636e\u3002"),(0,a.kt)("p",null,"\u5f53\u7136\uff0c\u8fd9\u53ea\u662f\u51e0\u4e2a\u5178\u578b\u95ee\u9898\uff0c\u672c\u6587\u540e\u9762\u7684\u5185\u5bb9\u8fd8\u4f1a\u8ba8\u8bba\u66f4\u591a\u7684\u76f8\u5173\u95ee\u9898\u3002"),(0,a.kt)("h3",{id:"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168"},"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168"),(0,a.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u6574\u4e2a\u6784\u5efa\u8f6f\u4ef6\u7684\u65b9\u6cd5\u4f53\u7cfb\uff0c\u4e0d\u7ba1\u662f\u5e95\u5c42\u7684\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u63d0\u4f9b\u7684\u4e00\u4e9b\u7f16\u7a0b\u6a21\u5f0f\uff0c\u5982\u9762\u5411\u5bf9\u8c61\u6216\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u8fd8\u662f\u4e2d\u95f4\u4e00\u4e9b\u5e2e\u52a9\u6784\u5efa\u5404\u79cd\u5e94\u7528\u7684\u5de5\u5177\uff0c\u5982\u6e38\u620f\u5f15\u64ce\u548c\u5404\u79cd\u5f00\u53d1\u6846\u67b6\uff0c\u90fd\u662f\u57fa\u4e8e\u8fd9\u6837\u4e00\u4e2a\u524d\u63d0\u6216\u5047\u8bbe\uff1a\u5373\u7a0b\u5e8f\u62e5\u6709\u6240\u6709\u7684\u6743\u529b\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u63a7\u5236\u548c\u8bbf\u95ee\u4e00\u5207\u6570\u636e\uff0c\u4e0d\u7ba1\u662f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u8fd8\u662f\u5e94\u7528\u672c\u5730\u6301\u4e45\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u8fd8\u662f\u5e94\u7528\u5b58\u50a8\u5230\u4e91\u7aef\u7684\u6570\u636e\u3002\u8fd9\u6837\u505a\u7684\u76ee\u7684\u662f\u7b80\u5316\u7f16\u7a0b\u6a21\u578b\uff0c\u8fd9\u79cd\u7b80\u5316\u7684\u601d\u60f3\u4f53\u73b0\u5728\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u6bcf\u4e2a\u5e94\u7528\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u56e0\u6b64\u901a\u8fc7\u8fd9\u79cd\u7b80\u5355\u7684\u5185\u5b58\u9694\u79bb\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u5e94\u7528\u7684\u6570\u636e\u5b89\u5168"),(0,a.kt)("li",{parentName:"ul"},"\u5c06\u5e94\u7528\u5185\u4ea7\u751f\u7684\u7528\u6237\u6570\u636e\u7684\u7ba1\u7406\u4ea4\u7ed9\u5f00\u53d1\u5546\uff0c\u7531\u4ed6\u4eec\u8d1f\u8d23\u4fdd\u8bc1\u6570\u636e\u7684\u5b89\u5168")),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u673a\u5236\u53ef\u4ee5\u770b\u51fa\uff0c\u5c3d\u7ba1\u73b0\u5728\u5404\u56fd\u90fd\u5e94\u76f8\u5e94\u7684\u5408\u89c4\u6cd5\u5f8b\u6765\u4fdd\u62a4\u7528\u6237\u7684\u9690\u79c1\u6570\u636e\u4e0d\u80fd\u88ab\u975e\u6cd5\u4e0a\u4f20\u6216\u4f7f\u7528\uff0c\u4f46\u5b9e\u9645\u5728\u64cd\u4f5c\u5c42\u9762\uff0c\u5f88\u591a\u6570\u636e\u7684\u4ea4\u4e92\u6d89\u53ca\u5230\u529f\u80fd\u5c42\u9762\uff0c\u4f8b\u5982\u9700\u8981\u5728\u4e91\u7aef\u4e0e\u6765\u81ea\u5176\u5b83\u7528\u6237\u7684\u6570\u636e\u8fdb\u884c\u8ba1\u7b97\uff0c\u6240\u4ee5\u5f88\u591a\u6570\u636e\u5176\u5b9e\u5f88\u96be\u754c\u5b9a\uff0c\u56e0\u6b64\u6211\u4eec\u7684\u9690\u79c1\u6570\u636e\u4e00\u822c\u53ea\u5305\u542b\u90e8\u5206\u6570\u636e\uff0c\u800c\u8fd8\u6709\u5f88\u591a\u5e94\u7528\u6267\u884c\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u6570\u636e\u4e5f\u662f\u5bf9\u7528\u6237\u800c\u8a00\u5f88\u91cd\u8981\u7684\u3002"),(0,a.kt)("p",null,"\u7531\u4e8e\u5e94\u7528\u7a0b\u5e8f\u5bf9\u6570\u636e\u7684\u5929\u751f\u7684\u6743\u9650\uff0c\u4f7f\u5f97\u8f6f\u4ef6\u5f00\u53d1\u5546\u5929\u7136\u7684\u6210\u4e3a\u4e00\u4e2a\u4e2d\u5fc3\u5316\u7684\u5b9e\u4f53\uff0c\u638c\u63a7\u7740\u6240\u6709\u7528\u6237\u7684\u6570\u636e\u3002\u5c3d\u7ba1\u5f88\u591a\u65f6\u5019\uff0c\u8fd9\u79cd\u4e2d\u5fc3\u5316\u7684\u7ba1\u7406\u5e26\u6765\u4e86\u5f88\u591a\u4fbf\u5229\u548c\u6548\u7387\uff0c\u4f46\u662f\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\u635f\u5931\u5219\u662f\u5f88\u5927\u7684\uff0c\u9664\u4e86\u6570\u636e\u88ab\u975e\u5e38\u4f7f\u7528\u7684\u98ce\u9669\uff0c\u8fd8\u6709\u5305\u62ec\u5728\u5e73\u53f0\u83b7\u53d6\u5408\u6cd5\u6536\u76ca\u65f6\u4e0d\u900f\u660e\u6027\uff0c\u6ca1\u6709\u8bdd\u8bed\u6743\uff0c\u540c\u65f6\u51fa\u4e8e\u7ade\u4e89\u8003\u8651\uff0c\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u5bf9\u540c\u4e00\u4e2a\u7528\u6237\u7684\u5176\u5b83\u5e94\u7528\u901a\u5e38\u662f\u65e0\u6cd5\u4e92\u64cd\u4f5c\u7684\uff0c\u800c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u5f88\u591a\u65f6\u5019\u5bf9\u7528\u6237\u6765\u8bf4\u662f\u5f88\u6709\u4ef7\u503c\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"programming-model",src:l(8242).Z,width:"686",height:"211"})),(0,a.kt)("p",null,"\u8fd9\u91cc\u9762\u7684\u6839\u672c\u95ee\u9898\uff0c\u6211\u89c9\u5f97\u662f\u8fd9\u4e2a\u7f16\u7a0b\u6a21\u578b\u7684\u95ee\u9898\uff0c\u5b83\u5c06\u7a0b\u5e8f\u7684\u529f\u80fd\u548c\u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u6570\u636e\u5173\u8054\u5728\u4e00\u8d77\uff0c\u5f7c\u6b64\u65e0\u6cd5\u5206\u5f00\uff0c\u5982\u4e0a\u56fe\uff08a\uff09\u6240\u793a\u3002\u60f3\u60f3\u6211\u4eec\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u7ecf\u6d4e\u6a21\u5f0f\uff0c\u4e00\u4e2a\u5382\u5546\u751f\u4ea7\u4e86\u67d0\u4ef6\u5546\u54c1\uff0c\u7528\u6237\u8d2d\u4e70\u5546\u54c1\u4e4b\u540e\uff0c\u9664\u4e86\u7b80\u5355\u7684\u552e\u540e\u670d\u52a1\u5173\u7cfb\uff0c\u7528\u6237\u548c\u5382\u5546\u4e4b\u95f4\u5c31\u6ca1\u6709\u5176\u5b83\u5173\u7cfb\uff0c\u8be5\u5546\u54c1\u540e\u7eed\u751f\u4ea7\u7684\u7269\u54c1\u90fd\u6709\u7528\u6237\u81ea\u5df1\u62e5\u6709\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u7269\u54c1\u7528\u4e8e\u4efb\u610f\u81ea\u5df1\u7684\u610f\u56fe\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u66f4\u597d\u5730\u4fdd\u62a4\u7528\u6237\u7684\u6743\u76ca\uff0c\u6211\u4eec\u9700\u8981\u4e00\u79cd\u5929\u751f\u80fd\u591f\u5c06\u8f6f\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5206\u5f00\u7684\u673a\u5236\uff0c\u672c\u6587\u5c31\u4f1a\u63d0\u51fa\u4e00\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u4f7f\u7528\u7c7b\u4f3c\u73b0\u6709\u7684\u65b9\u6cd5\u8fdb\u884c\u8f6f\u4ef6\u5f00\u53d1\uff0c\u4f46\u662f\u5176\u4ea7\u751f\u7684\u6570\u636e\u786e\u5b9e\u5929\u751f\u7531\u7528\u6237\u63a7\u5236\u7684\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u5373\u4f7f\u662f\u540c\u4e00\u4e2a\u5e94\u7528\u4ea7\u751f\u7684\u6570\u636e\uff0c\u7528\u6237\u90fd\u53ef\u4ee5\u5728\u540e\u7eed\u7684\u64cd\u4f5c\u4e2d\u7981\u6b62\u8be5\u5e94\u7528\u5bf9\u4e4b\u524d\u4ea7\u751f\u6570\u636e\u7684\u8bbf\u95ee\uff0c\u800c\u4e14\u8fd9\u79cd\u63a7\u5236\u65b9\u5f0f\u975e\u5e38\u7b80\u5355\uff0c\u5982\u4e0a\u56fe\uff08b\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u7f16\u7a0b\u6a21\u5f0f\u7684\u6539\u53d8\uff0c\u4f1a\u5bf9\u5e94\u7528\u7684\u5f62\u6001\u9020\u6210\u975e\u5e38\u6df1\u523b\u7684\u5f71\u54cd\uff0c\u5b83\u4e5f\u4f1a\u5e26\u6765\u66f4\u591a\u65b0\u7684\u6280\u672f\u4e0a\u7684\u53ef\u80fd\u6027\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u6784\u5efa\u66f4\u52a0\u590d\u6742\u4e30\u5bcc\u7684\u5e94\u7528\u3002\u8fd9\u4e9b\u7279\u6027\u4e5f\u6b63\u662f\u5143\u5b87\u5b99\u548cWeb 3.0\u6570\u5b57\u7ecf\u6d4e\u7684\u6784\u5efa\u6240\u9700\u8981\u7684\u57fa\u672c\u7279\u6027\uff1a\u5b83\u4f7f\u5f97\u4e92\u64cd\u4f5c\u53d8\u5f97\u7b80\u5355\u548c\u53ef\u80fd\u3002"),(0,a.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c"},"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u5143\u5b87\u5b99\u8fd8\u6ca1\u6709\u660e\u786e\u7684\u5b9a\u4e49\u548c\u5f62\u6001\uff0c\u4f46\u662f\u5b83\u7684\u4e00\u4e9b\u57fa\u672c\u7279\u6027\u4e5f\u6162\u6162\u88ab\u4eba\u4eec\u63a5\u53d7\uff0c\u6bd4\u5982\u865a\u62df\u4e0e\u73b0\u5b9e\u7684\u7ed3\u5408\uff0c\u7528\u6237\u751f\u6210\u5185\u5bb9\uff0c\u53bb\u4e2d\u5fc3\u5316\u548c\u5f00\u653e\u6027\uff0c\u4ee5\u53ca\u6570\u5b57\u8eab\u4efd\uff0c\u793e\u4ea4\u548c\u7ecf\u6d4e\u7cfb\u7edf\u7b49\u7b49\u3002\u5143\u5b87\u5b99\u770b\u8d77\u6765\u5305\u62ec\u4e86Web 3.0\u7684\u601d\u60f3\uff0c\u4f46\u662f\u5b83\u53ef\u80fd\u5e76\u4e0d\u5bfb\u6c42\u6240\u6709\u7684\u6570\u636e\u90fd\u4fdd\u5b58\u5728\u533a\u5757\u94fe\u4e0a\uff0c\u56e0\u4e3a\u90a3\u6837\u5728\u7406\u8bba\u4e0a\u6839\u672c\u65e0\u6cd5\u6ee1\u8db3\u4eba\u4eec\u7684\u4f7f\u7528\u4f53\u9a8c\u9700\u6c42\u3002"),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u8fd9\u4e9b\u7279\u6027\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u51fa\u5b83\u4eec\u5bf9\u73b0\u884c\u7684\u6280\u672f\u4f53\u7cfb\u90fd\u4f1a\u5e26\u6765\u5f88\u5927\u7684\u6311\u6218\u3002\u5176\u4e2d\u5173\u4e8e\u53bb\u4e2d\u5fc3\u5316\u548c\u4ef7\u503c\u4ea4\u6613\u90e8\u5206\u53ef\u4ee5\u7531\u533a\u5757\u94fe\u6280\u672f\u6765\u5b9e\u73b0\uff0c\u4ece\u672c\u6587\u540e\u9762\u4e5f\u53ef\u4ee5\u770b\u51fa\uff0c\u4e92\u64cd\u4f5c\u6027\u548c\u5f00\u653e\u6027\u65b9\u9762\u4e5f\u53ef\u4ee5\u7531\u6211\u4eec\u4e0a\u4e00\u8282\u63d0\u51fa\u7684\u7a0b\u5e8f\u67b6\u6784\u6765\u5b9e\u73b0\uff0c\u7136\u800c\u5bf9\u4e8e\u7528\u6237\u521b\u9020\u7684\u7a0b\u5e8f\u5185\u5bb9\u672c\u8eab\uff0c\u4f9d\u7136\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6311\u6218\u3002"),(0,a.kt)("p",null,"\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6838\u5fc3\uff0c\u662f\u8fd9\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u5927\u90e8\u5206\u53c2\u4e0e\u8005\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u751f\u4ea7\uff0c\u901a\u8fc7\u7ecf\u6d4e\u751f\u4ea7\u521b\u9020\u4ef7\u503c\uff0c\u7136\u540e\u624d\u662f\u4ea4\u6613\u3002\u60f3\u60f3\u6211\u4eec\u6bcf\u4e2a\u4eba\u90fd\u5728\u4e0a\u73ed\uff0c\u521b\u9020\u4e0d\u540c\u7684\u4ea7\u54c1\uff0c\u4ece\u4e8b\u7ecf\u6d4e\u751f\u4ea7\uff0c\u7136\u540e\u4eba\u4eec\u7528\u8d5a\u53d6\u7684\u5de5\u8d44\u901a\u8fc7\u4ea4\u6613\u6765\u6362\u53d6\u5176\u4ed6\u4eba\u751f\u4ea7\u7684\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u4e2d\u7684\u7ecf\u6d4e\u4ef7\u503c\u4e3b\u8981\u662f\u7531\u6240\u6709\u4eba\u4e00\u8d77\u521b\u9020\u51fa\u6765\u7684\u3002"),(0,a.kt)("p",null,"\u4e00\u4e2a\u7e41\u8363\u7684\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u4e5f\u4e0d\u4f8b\u5916\uff0c\u7136\u800c\u6211\u4eec\u770b\u73b0\u5728\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u4ece\u4e8b\u751f\u4ea7\u6d3b\u52a8\u7684\u4eba\u662f\u6781\u5c11\u7684\uff0c\u6839\u636e",(0,a.kt)("a",{parentName:"p",href:"https://www.developernation.net/developer-reports/de20"},"Deverloper Nation"),"\u7f51\u7ad9\u7edf\u8ba1\uff0c2021\u5e74\u4e16\u754c\u4e0a\u53ea\u67092430\u4e07\u5f00\u53d1\u8005\uff0c\u9884\u8ba1\u52302030\u5e74\u4e5f\u53ea\u67094500\u4e07\u5f00\u53d1\u8005\uff0c\u8fd9\u5728\u4eba\u7c7b\u4eba\u53e3\u6570\u91cf\u4e2d\u4e0d\u8db30.5%\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"img",src:l(6943).Z,width:"1484",height:"311"})),(0,a.kt)("p",null,"\u5c3d\u7ba1\u5728\u4eca\u5e74\u5927\u6a21\u578b\u5728\u4ee3\u7801\u751f\u6210\u4e0a\u8868\u73b0\u51fa\u6781\u5927\u7684\u6f5c\u529b\uff0c\u751a\u81f3\u5fae\u8f6fCEO Satya Nadella\u4e5f\u63d0\u51fa\u672a\u6765\u53ef\u80fd\u501f\u52a9\u5927\u6a21\u578b\u7684\u80fd\u529b\uff0c\u4f7f\u5f9710\u4ebf\u4eba\u53ef\u4ee5\u6210\u4e3a\u5f00\u53d1\u4eba\u5458\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u201cI mean, there can be a billion developers. In fact, the world needs a billion developers\u2026 So the idea that this is actually a democratizing tool to make access to new technology and access to new knowledge easier, so that the ramp-up on the learning curve is easier.\u201d")),(0,a.kt)("p",null,"\u7136\u800c\u968f\u7740\u5927\u6a21\u578b\u5728\u8f85\u52a9\u4ee3\u7801\u7f16\u7a0b\u65b9\u9762\u7684\u4f7f\u7528\uff0c\u4f8b\u5982Github Copilot\uff0c\u6211\u4eec\u4e5f\u9010\u6e10\u610f\u8bc6\u5230\u5927\u6a21\u578b\u867d\u7136\u80fd\u591f\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u63d0\u5347\u5f00\u53d1\u6548\u7387\uff0c\u4f46\u662f\u5b83\u5bf9\u4e13\u4e1a\u4eba\u5458\u7684\u8981\u6c42\u4f9d\u7136\u5f88\u9ad8\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u4f9d\u7136\u53ea\u6709\u6bd4\u8f83\u4e13\u4e1a\u7684\u5f00\u53d1\u4eba\u5458\u624d\u53ef\u4ee5\u66f4\u597d\u5730\u4f7f\u7528\u5b83\u3002\u8fd9\u8fd8\u53ea\u662f\u8003\u8651\u5b83\u5728\u5c40\u90e8\u4ee3\u7801\u6a21\u5757\uff0c\u4f8b\u5982\u5355\u4e2a\u51fd\u6570\u7ea7\u7684\u4ee3\u7801\u751f\u6210\uff0c\u8fd8\u4e0d\u5305\u62ec\u66f4\u590d\u6742\u7684\u7a0b\u5e8f\u7ed3\u6784\u548c\u4e0a\u4e0b\u6587\u903b\u8f91\u7ba1\u7406\u3002\u5b9e\u9645\u4e0a\u5982\u4eca\u7684\u5927\u6a21\u578b\u5728\u7406\u8bba\u4e0a\u4e3b\u8981\u4ee5\u9884\u6d4b\u524d\u540e\u76f8\u5173\u7684\u7ebf\u6027\u5e8f\u5217\u6765\u5b9e\u73b0\u5185\u5bb9\u751f\u6210\uff0c\u8fd9\u79cd\u7406\u8bba\u5728\u9488\u5bf9\u7a0b\u5e8f\u7ed3\u6784\u8fd9\u79cd\u975e\u7ebf\u6027\u3001\u7ec4\u5408\u5f0f\u7684\u590d\u6742\u4efb\u52a1\u4e0a\u4f3c\u4e4e\u5b58\u5728\u4e00\u5b9a\u7684\u7406\u8bba\u9650\u5236\uff0c\u5982 ",(0,a.kt)("a",{parentName:"p",href:"https://arxiv.org/abs/2305.18654"},"Faith and Fate:Limits of Transformers on Compositionality")," \u8fd9\u7bc7\u7814\u7a76\u5de5\u4f5c\u6307\u51fa\u3002"),(0,a.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u5143\u5b87\u5b99\u7c7b\u7684\u5e94\u7528\u8fd8\u8981\u6c42\u66f4\u591a\u7684\u52a8\u6001\u6027\uff0c\u4ee5\u53ca\u66f4\u91cd\u8981\u7684\u662f\u5728\u4e00\u4e2a\u5bbf\u4e3b\u7a0b\u5e8f\u4e2d\u5b89\u5168\u8fd0\u884c\u7b2c\u4e09\u65b9\u5b50\u7a0b\u5e8f\u7684\u80fd\u529b\uff0c\u8fd9\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u5b89\u5168\u6027\u6311\u6218\uff0c\u5c3d\u7ba1\u6211\u4eec\u73b0\u5728\u6709\u4e00\u4e9b\u5982Web Assembly\u7b49\u5305\u542b\u7684\u6c99\u76d2\u6280\u672f\u53ef\u4ee5\u5728\u7406\u8bba\u4e0a\u5b9e\u73b0\u8fd9\u4e9b\u673a\u5236\uff0c\u4f46\u662f\u5728\u6839\u636e\u5c42\u9762\u8fd8\u6ca1\u6709\u6bd4\u8f83\u7b80\u6613\u53ef\u9760\u7684\u6846\u67b6\u53ef\u4ee5\u4f7f\u7528\uff0c\u56e0\u4e3a\u8fd9\u79cd\u6846\u67b6\u8fd8\u9700\u8981\u534f\u8c03\u5e94\u7528\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u548c\u8fd0\u884c\u673a\u5236\u3002"),(0,a.kt)("h3",{id:"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236"},"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236"),(0,a.kt)("p",null,"\u591a\u667a\u80fd\u4f53\uff08Multi-Agents\uff09\u662fAI\u9886\u57df\u73b0\u5728\u6bd4\u8f83\u70ed\u95e8\u7684\u4e00\u4e2a\u65b9\u5411\u3002\u5927\u6a21\u578b\u5bf9\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u5bf9\u8bdd\u80fd\u529b\uff0c\u4f7f\u5f97\u4e00\u4e9b\u501f\u52a9\u5927\u6a21\u578b\u5185\u90e8\u7684\u77e5\u8bc6\u6765\u5b8c\u6210\u63a8\u7406\u548c\u89c4\u5212\u7684Agent\u5e94\u7528\u5e7f\u53d7\u5173\u6ce8\uff0c\u4f8b\u5982AutoGPT\u3001Generative Agents\u3001BabyAGI\u7b49\u7b49\u3002\u7136\u800c\u4eba\u4eec\u5b9e\u9645\u5728\u5f00\u53d1\u4e2d\uff0c\u4e5f\u7531\u4e8e\u9010\u6e10\u53d7\u9650\u4e8e\u5927\u6a21\u578b\u7684\u80fd\u529b\uff0c\u4f7f\u5f97\u5355\u7eaf\u7b80\u5355\u4f9d\u9760\u5927\u6a21\u578b\u6765\u63a8\u7406\u7684Agent\u4f1a\u6bd4\u8f83\u96be\u4ee5\u843d\u5730\uff0c\u5b9e\u9645\u7684Agent\u5f00\u53d1\u5f80\u5f80\u8fd8\u662f\u8981\u6d89\u53ca\u5927\u91cf\u7684\u903b\u8f91\u5f00\u53d1\uff0c\u5f53\u7136\u5176\u4e2d\u7684\u903b\u8f91\u4ea4\u4e92\u4e3b\u8981\u6d89\u53ca\u7684\u662f\u81ea\u7136\u8bed\u8a00\uff0c\u4e5f\u6b63\u662f\u53d7\u9650\u4e8e\u5927\u6a21\u578b\u5728\u81ea\u7136\u8bed\u8a00\u7406\u89e3\u65b9\u9762\u7684\u9c81\u68d2\u6027\uff0c\u5b9e\u9645\u7684\u5f00\u53d1\u90fd\u662f\u9700\u8981\u8bbe\u7f6e\u5927\u91cf\u7cbe\u5de7\u7684\u63d0\u793a\u8bcd\u5de5\u7a0b\u624d\u80fd\u8fbe\u5230\u6bd4\u8f83\u597d\u7684\u6027\u80fd\u3002"),(0,a.kt)("p",null,"\u4e0d\u7ba1\u662f\u53d7\u9650\u4e8e\u5355\u4e00Agent\u5728\u8bb0\u5fc6\u7ba1\u7406\u65b9\u9762\u7684\u4e0d\u53ef\u9760\u6027\uff0c\u8fd8\u662f\u7531\u4e8e\u8d8a\u6765\u8d8a\u590d\u6742\u7684\u4ea4\u4e92\u903b\u8f91\u4f7f\u5f97Agent\u5f00\u53d1\u548c\u7ba1\u7406\u7684\u590d\u6742\u5ea6\u9010\u6e10\u589e\u52a0\uff0c\u8d8a\u6765\u8d8a\u591a\u7684\u5de5\u4f5c\u5c06\u7126\u70b9\u8f6c\u79fb\u5230\u4e86\u591a\u667a\u80fd\u4f53\u7cfb\u7edf\u4e0a\uff0c\u5373\u901a\u8fc7\u5728\u4e00\u4e2a\u5171\u4eab\u7684\u73af\u5883\u4e2d\u8ba9\u591a\u4e2a\u5177\u6709\u4e0d\u540c\u51b3\u7b56\u80fd\u529b\u7684Agent\u5171\u540c\u534f\u4f5c\u6765\u5b8c\u6210\u4e00\u4e9b\u6307\u5b9a\u7684\u4e8b\u60c5\u3002\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4f20\u7edf\u7684\u65b9\u6cd5\u6765\u5f00\u53d1\u8fd9\u7c7b\u591a\u667a\u80fd\u4f53\u7cfb\u7edf\uff0c\u4f8b\u5982\u57fa\u4e8eLangChain\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u591a\u667a\u80fd\u4f53\u534f\u4f5c\u673a\u5236\u6709\u4e00\u4e9b\u65b0\u7684\u6280\u672f\u7279\u5f81\u3002"),(0,a.kt)("p",null,"\u591a\u667a\u80fd\u4f53\u4e3b\u8981\u7684\u6280\u672f\u7279\u5f81\u662f\u52a8\u6001\u6027\uff0c\u7531\u4e8eAgent\u7684\u6570\u91cf\u6781\u591a\uff0c\u6210\u767e\u751a\u81f3\u4e0a\u5343\uff0c\u90a3\u4e48\u8fd9\u7c7b\u7cfb\u7edf\u8981\u5177\u5907\u52a8\u6001\u7684\u80fd\u529b\uff0c\u80fd\u591f\u52a8\u6001\u6dfb\u52a0\u6216\u79fb\u9664\u4e00\u4e9bAgent\uff0c\u540c\u65f6\u5177\u6709\u8f83\u597d\u7684\u5bb9\u9519\u6027\uff0c\u5176\u4e2d\u7684\u67d0\u4e9bAgent\u51fa\u73b0\u8fd0\u884c\u9519\u8bef\u65f6\uff0c\u7cfb\u7edf\u53ef\u80fd\u7f3a\u4e4f\u67d0\u4e9b\u65b9\u9762\u7684\u80fd\u529b\uff0c\u4f46\u662f\u4e0d\u5f71\u54cd\u5176\u5b83\u80fd\u529b\u7684\u6b63\u5e38\u8fd0\u884c\uff0c\u5728\u8fd9\u4e9b\u51fa\u73b0\u8fd0\u884c\u9519\u8bef\u7684Agent\u6062\u590d\u8fd0\u884c\u540e\u6574\u4e2a\u7cfb\u7edf\u80fd\u591f\u52a8\u6001\u5bb9\u7eb3\u8be5\u80fd\u529b\u3002"),(0,a.kt)("p",null,"\u8fd9\u770b\u8d77\u6765\u50cf\u662fActor\u6a21\u578b\u5c1d\u8bd5\u89e3\u51b3\u7684\u95ee\u9898\uff0c",(0,a.kt)("a",{parentName:"p",href:"https://www.erlang.org/"},"Erlang")," \u662fActor\u6a21\u578b\u6bd4\u8f83\u6709\u77e5\u540d\u5ea6\u7684\u4ee3\u8868\uff0c\u5982\u679c\u6211\u4eec\u628a\u4e00\u4e2aAgent\u6bd4\u4f5c\u4e00\u4e2a\u7ebf\u7a0b\u6216\u8005Actor\uff0c\u90a3\u4e48Actor\u6a21\u578b\u7684\u5de5\u4f5c\u673a\u5236\u4f3c\u4e4e\u5c31\u53ef\u4ee5\u5b9e\u73b0\u591a\u667a\u80fd\u4f53\u4ea4\u4e92\u7684\u9700\u6c42\u3002\u5f00\u6e90\u9879\u76ee ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/ThousandBirdsInc/chidori"},"Chidori")," \u4e5f\u6b63\u662f\u57fa\u4e8e\u8be5\u7406\u5ff5\u7684\u4e00\u4e2a\u591a\u667a\u80fd\u4f53\u5f00\u6e90\u9879\u76ee\u3002\u5728\u8fd9\u7c7b\u67b6\u6784\u4e2d\uff0c\u5355\u4e2aAgent\u4f1a\u8ba2\u9605\u67d0\u7c7b\u4fe1\u606f\uff0c\u7136\u540e\u7cfb\u7edf\u4f1a\u7ef4\u62a4\u8fd9\u7c7b\u4fe1\u606f\u7684\u5206\u53d1\uff0c\u4f7f\u5f97\u4e00\u65e6\u6709Agent\u53d1\u51fa\u4e86\u67d0\u7c7b\u4fe1\u606f\uff0c\u8ba2\u9605\u8be5\u4fe1\u606f\u7684Agent\u5c31\u4f1a\u5f97\u5230\u54cd\u5e94\uff0c\u4fe1\u606f\u672c\u8eab\u5145\u5f53\u4e86\u4ea4\u4e92\u7684\u63a5\u53e3\u548c\u673a\u5236\u3002"),(0,a.kt)("p",null,"\u76f8\u5bf9\u4e8e\u591a\u667a\u80fd\u4f53\u7684\u9700\u6c42\uff0c\u8fd9\u7c7b\u67b6\u6784\u8fd8\u5b58\u5728\u7740\u4e24\u70b9\u4e0d\u8db3\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7f3a\u4e4f\u6570\u636e\u4e92\u64cd\u4f5c\u7684\u673a\u5236\u6216Agent\u4e4b\u95f4\u901a\u4fe1\u7684\u534f\u8bae"),"\uff0c\u6bcf\u4e2aAgent\u4e4b\u95f4\u4e3b\u8981\u662f\u901a\u8fc7\u5b57\u7b26\u4e32\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u6837\u4fdd\u8bc1Agent\u548cAgent\u4e4b\u95f4\u7684\u529f\u80fd\u89e3\u8026\u3002\u7136\u800c\u8fd9\u6837\u7684\u9690\u5f0f\u534f\u8bae\u901a\u5e38\u4e0d\u4fbf\u4e8eAgent\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u7279\u522b\u662f\u6765\u81ea\u4e0d\u540c\u7684\u5f00\u53d1\u8005\u4e4b\u95f4\u7684Agent\uff0c\u5b83\u4eec\u5728\u901a\u4fe1\u683c\u5f0f\u4e0a\u6ca1\u6709\u663e\u5f0f\u7684\u4fdd\u969c\u673a\u5236\u3002\u6b64\u5916\uff0cAgent\u76f8\u8f83\u4e8e\u4e00\u4e2aActor\u7b97\u662f\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u7ebf\u7a0b\uff0c\u5185\u90e8\u672c\u8eab\u8fd8\u5305\u62ec\u5f88\u590d\u6742\u7684\u903b\u8f91\uff0c\u4e5f\u5c31\u610f\u5473\u7740Agent\u5185\u90e8\u53ef\u80fd\u8fd8\u5305\u62ec\u7740\u5927\u91cf\u9700\u8981\u83b7\u53d6\u7528\u6237\u6570\u636e\u7684\u903b\u8f91\uff0c\u8fd9\u5176\u4e2d\u6709\u4e9b\u6570\u636e\u662f\u6765\u81ea\u5176\u5b83\u7a0b\u5e8f\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e5f\u9700\u8981\u4e92\u64cd\u4f5c\u6027\u7684\u652f\u6301\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7f3a\u4e4f\u5f00\u53d1\u8fd9\u7c7b\u5e94\u7528\u7cfb\u7edf\u7684\u65b9\u6cd5\u8bba"),"\u3002\u591a\u667a\u80fd\u4f53\u534f\u4f5c\u7c7b\u4f3c\u4e8e\u4e00\u79cd\u590d\u6742\u7cfb\u7edf\uff0c\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e2a\u5178\u578b\u7279\u5f81\u662f\u5b83\u7684\u884c\u4e3a\u6216\u529f\u80fd\u662f\u4e0d\u53ef\u9884\u671f\u7684\uff0c\u5b83\u4eec\u662f\u9760\u5f88\u591a\u903b\u8f91\u7b80\u5355\u7684\u5b50\u7cfb\u7edf\u76f8\u4e92\u4f5c\u7528\u6d8c\u73b0\u51fa\u73b0\u7684\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u6211\u4eec\u4e0d\u5149\u662f\u9700\u8981\u5f00\u53d1\u8fd9\u79cd\u7cfb\u7edf\u7684\u5de5\u5177\uff0c\u8fd8\u9700\u8981\u4e00\u5957\u7cfb\u7edf\u7684\u65b9\u6cd5\u8bba\u6765\u5e2e\u52a9\u6211\u4eec\u6d4b\u8bd5\u6216\u9884\u6d4b\u7cfb\u7edf\u7684\u529f\u80fd\u884c\u4e3a\uff0c\u4f7f\u4e4b\u7b26\u5408\u7528\u6237\u7684\u9884\u671f\uff0c\u5426\u5219\u590d\u6742\u7cfb\u7edf\u5728\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u53ef\u80fd\u4f1a\u8868\u73b0\u51fa\u672a\u77e5\u7684\u884c\u4e3a\u3002")),(0,a.kt)("p",null,"\u7b2c\u4e00\u4e2a\u95ee\u9898\u4e5f\u662f\u4f20\u7edf\u7b80\u5355\u7684Actor\u6a21\u578b\u5728\u590d\u6742\u9879\u76ee\u4e2d\u4f1a\u9047\u5230\u7684\u95ee\u9898\uff0c\u4f20\u7edf\u7684Actor\u6a21\u578b\u4e00\u822c\u6709\u4e24\u4e2a\u5047\u8bbe\uff1a\u4e00\u662fActor\u8db3\u591f\u5c0f\uff0c\u751a\u81f3\u51e0\u4e4e\u5c31\u662f\u4e00\u4e2a\u51fd\u6570\uff1b\u4e8c\u662fActor\u51fd\u6570\u529f\u80fd\u672c\u8eab\u7c7b\u4f3c\u7eaf\u51fd\u6570\uff0c\u8fd9\u6837\u5b83\u5185\u90e8\u5c31\u6ca1\u6709\u72b6\u6001\uff0c\u6574\u4e2a\u95ee\u9898\u5c31\u7b80\u5316\u4e86\u5f88\u591a\u3002\u8fd9\u79cd\u6a21\u578b\u9488\u5bf9\u90a3\u79cd\u53ea\u662f\u4e1a\u52a1\u91cf\u591a\u3001\u4f46\u662f\u4e1a\u52a1\u4e4b\u95f4\u76f8\u5bf9\u72ec\u7acb\u7684\u4e1a\u52a1\u573a\u666f\u662f\u6bd4\u8f83\u5408\u9002\u7684\uff0c\u4f8b\u5982Erlang\u672c\u8eab\u9488\u5bf9\u7684\u7535\u4fe1\u4e1a\u52a1\u573a\u666f\uff0c\u4ee5\u53caWeb\u670d\u52a1\u7c7b\u5e94\u7528\u3002\u4f46\u662f\u9488\u5bf9\u66f4\u4e00\u822c\u7684\u4e1a\u52a1\u573a\u666f\uff0c\u4e1a\u52a1\u4e4b\u95f4\u90fd\u7a7f\u63d2\u7740\u5927\u91cf\u7684\u6570\u636e\u4ea4\u4e92\uff0c\u8fd9\u79cd\u4ea4\u4e92\u6ca1\u6709\u6bd4\u8f83\u7b80\u5355\u7684\u89c4\u5219\uff0c\u6240\u4ee5\u6211\u4eec\u4f20\u7edf\u7684\u7a0b\u5e8f\u5f00\u53d1\uff0c\u6700\u590d\u6742\u7684\u90e8\u5206\uff0c\u4e5f\u8bb8\u5c31\u662f\u8fd9\u79cd\u6570\u636e\u7ba1\u7406\u7684\u590d\u6742\u6027\uff1a\u6bcf\u4e2a\u4e1a\u52a1\u51fd\u6570\u672c\u8eab\u7684\u903b\u8f91\u53ef\u80fd\u662f\u6bd4\u8f83\u6e05\u6670\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6267\u884c\u8fd9\u4e2a\u51fd\u6570\u4ee5\u53ca\u4e3a\u4e86\u77e5\u9053\u4ec0\u4e48\u65f6\u5019\u9700\u8981\u6267\u884c\u8fd9\u4e2a\u51fd\u6570\uff0c\u6211\u4eec\u9700\u8981\u4ece\u6574\u4e2a\u7a0b\u5e8f\u5230\u5904\u53bb\u5bfb\u627e\u6761\u4ef6\uff0c\u4f8b\u5982\u6765\u81ea\u5404\u4e2a\u5730\u65b9\u7684\u4e0a\u4e0b\u6587\u6570\u636e\uff0c\u548c\u5404\u4e2a\u903b\u8f91\u7684\u524d\u7f6e\u6761\u4ef6\uff0c\u8fd9\u901a\u5e38\u6ca1\u6709\u4e00\u4e2a\u7b80\u5355\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u8fd9\u53ef\u80fd\u4e5f\u662f\u7f16\u7a0b\u5b66\u4e60\u95e8\u69db\u4e2d\u76f8\u5bf9\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u672c\u8eab\u66f4\u590d\u6742\u7684\u90e8\u5206\u3002"),(0,a.kt)("p",null,"\u5728\u540e\u9762\u7684\u4ecb\u7ecd\u4e2d\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u7c7b\u578b\u7cfb\u7edf\u4ee5\u53ca\u5bf9\u5e94\u7684\u4e92\u64cd\u4f5c\u673a\u5236\uff0c\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u540c\u65f6\u4e5f\u4f1a\u901a\u8fc7\u66f4\u6df1\u523b\u5730\u6d1e\u5bdf\u548c\u501f\u9274\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u601d\u8def\u6765\u89e3\u51b3\u7b2c\u4e8c\u4e2a\u95ee\u9898\u3002"),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"\u76f8\u5173\u77e5\u8bc6"},"\u76f8\u5173\u77e5\u8bc6"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u4f1a\u7b80\u5355\u4ecb\u7ecd\u4e00\u4e9b\u96f6\u788e\u7684\u5df2\u6709\u76f8\u5173\u77e5\u8bc6\uff0c\u5f53\u7136\u8fd9\u91cc\u4ec5\u4ecb\u7ecd\u5b83\u4eec\u7684\u4e00\u4e9b\u57fa\u672c\u6982\u5ff5\u548c\u601d\u8def\uff0c\u5176\u76ee\u7684\u662f\u4e3a\u4e86\u7406\u89e3\u5176\u4e2d\u7684\u601d\u60f3\uff0c\u4ece\u800c\u66f4\u597d\u5730\u7406\u89e3\u6211\u4eec\u7684\u67b6\u6784\u600e\u6837\u53bb\u91c7\u7528\u8fd9\u4e9b\u601d\u60f3\uff0c\u53c8\u505a\u51fa\u4e86\u4ec0\u4e48\u8c03\u6574\uff0c\u4e3a\u4ec0\u4e48\u8981\u505a\u51fa\u8fd9\u6837\u7684\u8c03\u6574\uff0c\u4ee5\u53ca\u505a\u51fa\u4e86\u8fd9\u4e9b\u8c03\u6574\u4e4b\u540e\u5e26\u6765\u4e86\u4ec0\u4e48\u65b0\u7684\u53d8\u5316\u3002"),(0,a.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027"},"\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("p",null,"\u4e92\u64cd\u4f5c\u6027\u7684 ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Interoperability"},"\u5b9a\u4e49")," \u5982\u4e0b\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems.")),(0,a.kt)("p",null,"\u7531\u5b9a\u4e49\u53ef\u4ee5\u770b\u51fa\uff0c\u4e92\u64cd\u4f5c\u7684\u672c\u610f\u5728\u7a0b\u5e8f\u7684\u73af\u5883\u4e0b\u5c31\u662f\u51fd\u6570\u8c03\u7528\u7684\u80fd\u529b\uff0c\u4f46\u4e92\u64cd\u4f5c\u6027\u5927\u591a\u662f\u6307\u4e24\u4e2a\u76f8\u5bf9\u6bd4\u8f83\u9694\u79bb\u6216\u8005\u4e0d\u540c\u8bed\u8a00\u7684\u7cfb\u7edf\u4e4b\u95f4\u7684\u51fd\u6570\u8c03\u7528\uff0c\u5185\u90e8\u7684\u51fd\u6570\u6216\u7f16\u8bd1\u5230\u7a0b\u5e8f\u5185\u90e8\u7684\u7b2c\u4e09\u65b9\u51fd\u6570\u8c03\u7528\u5219\u4e0d\u9700\u8981\u5f3a\u8c03\u5b83\u7684\u4e92\u64cd\u4f5c\u6027\u610f\u4e49\u3002\u4f8b\u5982\u5bbf\u4e3b\u7a0b\u5e8f\u4e0e\u52a8\u6001\u811a\u672c\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4f8b\u5982C++\u4e0eC\u6216\u8005Rust\u4e0eC\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u751a\u81f3\u4e00\u4e2a\u865a\u62df\u673a\u652f\u6301\u7684\u591a\u4e2a\u8bed\u8a00\u7f16\u7a0b\u7684\u7a0b\u5e8f\u4e4b\u95f4\u7684\u8c03\u7528\u6216\u901a\u4fe1\u3002\u5728\u8fd9\u7c7b\u60c5\u51b5\u4e0b\uff0c\u88ab\u8c03\u51fd\u6570\u7684\u7c7b\u578b\u662f\u65e0\u6cd5\u88ab\u7f16\u7801\u5230\u7a0b\u5e8f\u4e2d\u7684\uff0c\u8fd9\u901a\u5e38\u9700\u8981\u7a0b\u5e8f\u5185\u90e8\u5b9e\u73b0\u4e00\u4e2a\u5bf9\u5e94\u7684\u5185\u90e8\u7c7b\u578b\uff0c\u7136\u540e\u76f8\u4e92\u4e4b\u95f4\u901a\u8fc7\u67d0\u79cd\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u6765\u4f20\u9012\u4fe1\u606f\u3002\u6240\u4ee5\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"If two or more systems use common data formats and communication protocolsand are capable of communicating with each other, they exhibit",(0,a.kt)("em",{parentName:"p"},"syntactic interoperability"),". XML and SQL are examples of common data formats and protocols.")),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002"),(0,a.kt)("p",null,"Tim\u57282019\u5e74\u7684\u6f14\u8bb2",(0,a.kt)("a",{parentName:"p",href:"https://dl.acm.org/doi/10.1145/3306307.3339844"},"\u300aFoundational principles & technologies for the metaverse\u300b"),"\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002"),(0,a.kt)("p",null,"\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"img",src:l(9085).Z,width:"1954",height:"864"})),(0,a.kt)("p",null,"\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002"),(0,a.kt)("p",null,"API\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002"),(0,a.kt)("p",null,"\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,a.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get<ToyDialect>()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,a.kt)("p",null,"\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cRealityIS\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002"),(0,a.kt)("h3",{id:"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"},"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"),(0,a.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002"),(0,a.kt)("p",null,"Erlang\u4e4b\u7236Joe Armstrong\u5728\u4e00\u6b21\u91c7\u8bbf\u4e2d\uff08",(0,a.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/"},"Ralph Johnson, Joe Armstrong on the State of OOP")," \uff09\u8bb2\u5230\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Alan Kay himself wrote this famous thing and said ",(0,a.kt)("strong",{parentName:"p"},'"The notion of object oriented programming is completely')," ",(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"misunderstood"),(0,a.kt)("strong",{parentName:"p"},". It's not about objects and classes, it's all about messages"),'". He wrote that and he said that the initial ',(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"reaction")," to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.")),(0,a.kt)("p",null,"Alan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,a.kt)("p",null,"Erlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about")),(0,a.kt)("p",null,"\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002"),(0,a.kt)("p",null,"\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002RealityIS\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002"),(0,a.kt)("h3",{id:"\u865a\u62df\u673a"},"\u865a\u62df\u673a"),(0,a.kt)("h3",{id:"\u57fa\u4e8e\u7ec4\u5408\u4e0eecs"},"\u57fa\u4e8e\u7ec4\u5408\u4e0eECS"),(0,a.kt)("p",null,"\u4f8b\u5982\u6e38\u620f\u5c31\u662f\u4e00\u4e2a\u8fd9\u6837\u7684\u4f8b\u5b50\uff0c\u5c3d\u7ba1\u4ecd\u7136\u6709\u57fa\u4e8e\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u6765\u5f00\u53d1\u7684\u6e38\u620f\u7a0b\u5e8f\uff0c\u4f46\u662f\u5927\u90e8\u5206\u7684\u6e38\u620f\u6846\u67b6\u6216\u67b6\u6784\u6216\u591a\u6216\u5c11\u90fd\u662f\u57fa\u4e8e\u7ec4\u4ef6\u7684\uff0c\u56e0\u4e3a\u6e38\u620f\u7684\u903b\u8f91\u975e\u5e38\u590d\u6742\uff0c\u6ca1\u6709\u6bd4\u8f83\u7ebf\u6027\u7684\u6d41\u7a0b\uff0c\u7c7b\u4f3c\u4e8e\u590d\u6742\u7cfb\u7edf\uff0c\u7cfb\u7edf\u8ddf\u7cfb\u7edf\u4e4b\u95f4\u5b58\u5728\u975e\u5e38\u590d\u6742\u65e0\u5e8f\u7684\u76f8\u5173\u6027\u3002\u6e38\u620f\u4e2d\u7684\u7ec4\u4ef6\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u7c7b\u4f3c\u4e00\u4e2aActor\uff0c\u5b83\u4eec\u90fd\u5c1d\u8bd5\u628a\u5b50\u7cfb\u7edf\u7684\u903b\u8f91\u90fd\u5c3d\u91cf\u5c01\u88c5\u5728\u5185\u90e8\uff0c\u4e0d\u540c\u7684\u662f\uff0c\u7531\u4e8e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u4f8b\u5982\u4e00\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u6d88\u606f\u4f1a\u6765\u81ea\u591a\u4e2a\u5176\u5b83\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u50cf\u7b80\u5355\u7684Actor\u6a21\u578b\u53ea\u662f\u4e00\u5bf9\u4e00\u7684\u901a\u4fe1\uff0c\u56e0\u6b64\u6e38\u620f\u7a0b\u5e8f\u7684\u6267\u884c\u903b\u8f91\u662f\u6309\u7ec4\u4ef6\u8fdb\u884c\u6392\u5e8f\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u6709\u4e2a\u8bed\u4e49\u4e0a\u7684\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4fdd\u8bc1\u53ea\u8981\u987a\u5e8f\u5b89\u6392\u5f97\u5f53\uff0c\u5c31\u4e0d\u7528\u53bb\u5904\u7406\u590d\u6742\u7684\u4f9d\u8d56\u987a\u5e8f\u95ee\u9898\uff0c\u800c\u4e14\u5f53\u6bcf\u4e2a\u7ec4\u4ef6\u88ab\u6267\u884c\u65f6\uff0c\u5b83\u9700\u8981\u7684\u6570\u636e\u603b\u662f\u80fd\u591f\u5f97\u5230\u6ee1\u8db3\u3002"),(0,a.kt)("h3",{id:"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f"},"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f"),(0,a.kt)("p",null,"\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002"),(0,a.kt)("p",null,"\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002"),(0,a.kt)("p",null,"\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002"),(0,a.kt)("p",null,"\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"NaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002"),(0,a.kt)("p",null,"Web Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cRealityIS\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002"),(0,a.kt)("h3",{id:"\u590d\u6742\u7cfb\u7edf"},"\u590d\u6742\u7cfb\u7edf"),(0,a.kt)("p",null,"\u4ece\u4e24\u4e2a\u65b9\u9762\u7406\u89e3\uff0c\u5185\u5728\u7ed3\u6784\u548c\u5916\u5728\u7279\u5f81\uff0c\u5185\u5728\u7ed3\u6784\u901a\u5e38\u5728\u5de5\u4e1a\u8bbe\u8ba1\u65b9\u9762\u6709\u5f88\u591a\u5b9e\u8df5\u3002\u5916\u5728\u7279\u5f81\u5219\u66f4\u504f\u7406\u8bba\u3002"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"A complex system is a system composed of many components which may interact with each other. Examples of complex systems are Earth's global climate, organisms, the human brain, infrastructure such as power grid, transportation or communication systems, complex software and electronic systems, social and economic organizations (like cities), an ecosystem, a living cell, and ultimately the entire universe.")),(0,a.kt)("p",null,"Complex systems are ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/System"},"systems"),' whose behavior is intrinsically difficult to model due to the dependencies, competitions, relationships, or other types of interactions between their parts or between a given system and its environment. Systems that are "',(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Complexity"},"complex"),'" have distinct properties that arise from these relationships, such as ',(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Nonlinear_system"},"nonlinearity"),", ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Emergence"},"emergence"),", ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Spontaneous_order"},"spontaneous order"),", ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Complex_adaptive_system"},"adaptation"),", and ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Feedback"},"feedback loops"),", among others. Because such systems appear in a wide variety of fields, the commonalities among them have become the topic of their independent area of research. In many cases, it is useful to represent such a system as a network where the nodes represent the components and links to their interactions."),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"realityis\u67b6\u6784\u54f2\u5b66"},"RealityIS\u67b6\u6784\u54f2\u5b66"),(0,a.kt)("p",null,"RealityIS\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\u7ecf\u5386\u4e86\u6574\u6574\u4e00\u5e74\u591a\u7684\u65f6\u95f4\uff0c\u53ef\u4ee5\u53c2\u770b\u53e6\u4e00\u7bc7\u6587\u6863\u8bb0\u5f55\u4e86\u6574\u4e2a\u601d\u8003\u8fc7\u7a0b\u3002\u6574\u4e2a\u8fc7\u7a0b\u5176\u5b9e\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u601d\u8003\u8fc7\u7a0b\uff0c\u4e00\u5f00\u59cb\u53ea\u6709\u90e8\u5206\u6b8b\u7f3a\u7684\u601d\u60f3\uff0c\u4e0d\u65ad\u5728\u7ec6\u8282\u548c\u603b\u4f53\u4e4b\u95f4\u4e0d\u65ad\u6765\u56de\u5207\u6362\uff0c\u6162\u6162\u6784\u7b51\u8d77\u66f4\u5b8c\u6574\u7684\u4f53\u7cfb\uff08\u6211\u4f1a\u7528\u4e00\u7bc7\u535a\u6587\u4ecb\u7ecd\u6574\u4e2a\u601d\u8003\u7684\u8fc7\u7a0b\uff09\u3002\u6240\u4ee5\u5f53\u56de\u6765\u518d\u6765\u770b\u6574\u4e2a\u67b6\u6784\u65f6\uff0c\u6211\u4eec\u5fc5\u987b\u8981\u5f62\u6210\u6e05\u6670\u800c\u7b80\u6d01\u7684\u65b9\u6cd5\u8bba\u751a\u81f3\u54f2\u5b66\u601d\u60f3\u3002\u8fd9\u4e0d\u4ec5\u6709\u52a9\u4e8e\u540e\u6765\u8005\u66f4\u597d\u5730\u7406\u89e3\u5b83\uff0c\u800c\u4e0d\u9700\u8981\u9677\u5165\u5f88\u591a\u7ec6\u8282\uff0c\u540c\u65f6\u8fd9\u4e5f\u5c24\u5176\u662f\u8fd9\u6837\u4e00\u4e2a\u9762\u5411\u672a\u6765\u7684\u6280\u672f\u67b6\u6784\u5177\u6709\u5b66\u4e60\u548c\u7814\u7a76\u4ef7\u503c\u7684\u5730\u65b9\u3002"),(0,a.kt)("p",null,"\u5b9a\u4e49\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"RealityIS\u662f\u4e00\u4e2a\u4ee5\u4e92\u64cd\u4f5c\u6027\u4e3a\u6838\u5fc3\u76ee\u6807\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u548c\u67b6\u6784\uff0c\u5b83\u7684\u613f\u666f\u662f\u6784\u9020\u4e00\u4e2a\u65e0\u8fb9\u7684\u6570\u5b57\u4e16\u754c\uff0c\u4f7f\u5f97\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u5411\u8fd9\u4e2a\u7cfb\u7edf\u52a8\u6001\u6dfb\u52a0\u65b0\u7684\u5b50\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u5b50\u7a0b\u5e8f\u53ef\u4ee5\u548c\u5176\u5b83\u5b50\u7a0b\u5e8f\u4efb\u610f\u4ea4\u4e92\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u53ef\u4ee5\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u81ea\u6211\u8fdb\u5316\uff0c\u4ece\u800c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u52a0\u667a\u80fd\u3001\u4e30\u5bcc\u548c\u4e2a\u6027\u5316\u7684\u6570\u5b57\u4e16\u754c\u4f53\u9a8c"),"\u3002"),(0,a.kt)("p",null,"RealityIS\u901a\u8fc7\u4ee5\u4e0b\u4e24\u79cd\u7406\u8bba\u4f9d\u636e\u6765\u6784\u7b51\u4e0a\u8ff0\u7684\u76ee\u6807\uff0c\u4e5f\u5373\u662f\u5b83\u7684\u67b6\u6784\u54f2\u5b66\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5b83\u662f\u533a\u5757\u94fe\u53bb\u4e2d\u5fc3\u5316\u601d\u60f3\u7684\u4e00\u822c\u5316\uff0c\u5b83\u5c06\u533a\u5757\u94fe\u7684\u6570\u5b57\u7c7b\u578b\u5ef6\u5347\u4e3a\u901a\u7528\u6570\u636e\u7c7b\u578b\uff0c\u7136\u540e\u901a\u8fc7\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf\u4f7f\u5f97\u6240\u6709\u865a\u62df\u673a\u548c\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u8bbf\u95ee\u7528\u6237\u4efb\u610f\u6570\u636e\uff0c\u6700\u540e\u901a\u8fc7\u6570\u636e\u4e0e\u529f\u80fd\u5206\u79bb\u4f7f\u5f97\u8fd9\u79cd\u8bbf\u95ee\u80fd\u591f\u88ab\u7528\u6237\u6388\u6743\u7cbe\u786e\u63a7\u5236"),"\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5b83\u4ee5\u590d\u6742\u7cfb\u7edf\u4e3a\u7406\u8bba\u57fa\u7840\u6765\u6784\u7b51\u6574\u4e2a\u8ba1\u7b97\u6846\u67b6\uff0c\u7528\u6237\u5f00\u53d1\u7684\u7a0b\u5e8f\u4ee5\u5c0f\u7c92\u5ea6\u7684\u7ec4\u4ef6\u4e3a\u5355\u4f4d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u4e0d\u9700\u8981\u5168\u5c40\u7684\u4e2d\u592e\u63a7\u5236\uff0c\u800c\u662f\u901a\u8fc7\u7c7b\u578b\u7cfb\u7edf\u5b9e\u73b0\u5c40\u90e8\u7684\u81ea\u52a8\u4ea4\u4e92\uff0c\u7cfb\u7edf\u5185\u7684\u7ec4\u4ef6\u53ef\u4ee5\u4efb\u610f\u52a8\u6001\u7ec4\u5408"),"\u3002")),(0,a.kt)("p",null,"\u5728\u4e0a\u8ff0\u7684\u54f2\u5b66\u601d\u60f3\u4e2d\uff0c\u53bb\u4e2d\u5fc3\u5316\u7684\u601d\u60f3\u5b9a\u4e49\u4e86\u5916\u5728\u7ed3\u6784\uff0c\u800c\u590d\u6742\u7cfb\u7edf\u7684\u7406\u8bba\u5b9a\u4e49\u4e86\u5185\u5728\u7ed3\u6784\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u7684\u5185\u5bb9\u4e2d\u8be6\u7ec6\u5206\u6790\u3002"),(0,a.kt)("p",null,"\u4ece\u524d\u9762\u7684\u5b9a\u4e49\u53ef\u4ee5\u770b\u51faRealityIS\u7684\u4e24\u4e2a\u4e3b\u8981\u76ee\u6807\u662f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("li",{parentName:"ul"},"\u81ea\u6211\u8fdb\u5316")),(0,a.kt)("p",null,"\u8fd9\u4e24\u4e2a\u76ee\u6807\u7684\u76ee\u6807\u5219\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u5b9e\u73b0\u66f4\u5f7b\u5e95\u66f4\u4e30\u5bcc\u7684\u6570\u5b57\u5316\uff0c\u4f7f\u4e4b\u771f\u6b63\u6210\u4e3a\u4e00\u79cd\u4eba\u4eba\u53c2\u4e0e\u7684\u6570\u5b57\u7ecf\u6d4e\u3002\u8fd9\u4e24\u4e2a\u76ee\u6807\u4e5f\u662fRealityIS\u80fd\u591f\u533a\u5206\u8fc7\u53bb\u7684\u5404\u79cd\u8f6f\u4ef6\u6216\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u5b8c\u5168\u7684\u4e92\u64cd\u4f5c\u6027\u662f\u6570\u5b57\u7ecf\u6d4e\u7684\u57fa\u7840\uff0c\u6709\u4e86\u8fd9\u4e2a\u57fa\u7840\uff0c\u66f4\u591a\u7684\u6570\u5b57\u5185\u5bb9\u624d\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u4ece\u800c\u4ea7\u751f\u7ecf\u6d4e\u884c\u4e3a\u3002\u800c\u81ea\u6211\u8fdb\u5316\u5219\u610f\u5473\u7740\uff0c\u5f53\u6211\u4eec\u7531\u73b0\u5728\u8fd9\u79cd\u56fa\u5b9a\u529f\u80fd\u7684\u8f6f\u4ef6\u8d70\u5411\u66f4\u52a0\u52a8\u6001\u3001\u4e30\u5bcc\u7684\u6570\u5b57\u4e16\u754c\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4ea4\u4e92\u5fc5\u987b\u8981\u6d8c\u73b0\u51fa\u65b0\u7684\u66f4\u9ad8\u7684\u6570\u5b57\u667a\u80fd\uff0c\u8fd9\u79cd\u667a\u80fd\u8981\u8d85\u8fc7\u4f20\u7edf\u5355\u4e00\u8f6f\u4ef6\u7684\u529f\u80fd\u3002"),(0,a.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e24\u4e2a\u76ee\u6807\uff0c\u6211\u4eec\u4ee5\u533a\u5757\u94fe\u548c\u590d\u6742\u7cfb\u7edf\u4e24\u4e2a\u6bd4\u8f83\u5b8c\u5584\u7684\u7406\u5ff5\u4f5c\u4e3a\u7406\u8bba\u57fa\u7840\u3002\u5c3d\u7ba1\u533a\u5757\u94fe\u5e76\u4e0d\u662f\u4e13\u4e3a\u4e92\u64cd\u4f5c\u6027\u800c\u8bbe\u8ba1\u7684\uff0c\u4f46\u4ece\u4e0b\u4e00\u8282\u7684\u5206\u6790\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u533a\u5757\u94fe\u7684\u4e00\u4e9b\u601d\u60f3\u4e2d\u5ef6\u5347\u51fa\u4e00\u79cd\u4e00\u822c\u5316\u7684\u4e92\u64cd\u4f5c\u601d\u60f3\uff0c\u540c\u65f6\u53c8\u517c\u5177\u53bb\u4e2d\u5fc3\u7684\u80fd\u529b\u3002\u800c\u590d\u6742\u7cfb\u7edf\u7684\u539f\u7406\u548c\u65b9\u6cd5\u8bba\u5219\u4e3a\u8fd9\u79cd\u52a8\u6001\u7684\u5927\u89c4\u6a21\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u548c\u529f\u80fd\u6d8c\u73b0\u63d0\u4f9b\u4e86\u6bd4\u8f83\u7a33\u56fa\u7684\u7406\u8bba\u6307\u5bfc\u3002"),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5b9a\u4e49\u4e5f\u53ef\u4ee5\u770b\u51fa\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\uff0c\u5373\u5c3d\u7ba1RealityIS\u6d89\u53ca\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u4f46\u6211\u4eec\u5e76\u6ca1\u6709\u6d89\u53ca\u8f83\u4f4e\u5c42\u7684\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u5c42\u9762\u3002\u5f53\u7136\u540e\u9762\u4f1a\u5206\u6790\uff0cReallityIS\u4e5f\u7edd\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u8f6f\u4ef6\u67b6\u6784\uff0c\u5b83\u4e5f\u6d89\u53ca\u5230\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u548c\u7f16\u7a0b\u8bed\u8a00\u4e00\u4e9b\u601d\u60f3\u7684\u91cd\u65b0\u89e3\u8bfb\uff0c\u4ee5\u53ca\u5c06\u6765\u4e5f\u6d89\u53ca\u5bf9\u7f16\u8bd1\u5668\u548c\u7f16\u7a0b\u8bed\u8a00\u7684\u67d0\u4e9b\u6539\u9020\uff0c\u4f46\u662f\u8fd9\u79cd\u6539\u9020\u4e3b\u8981\u662f\u7ed3\u6784\u6027\u7684\uff0c\u6216\u8005\u8bf4\u4e0d\u4f1a\u5bf9\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u5668\u7684\u6838\u5fc3\u90e8\u5206\u8fdb\u884c\u4fee\u6539\u3002"),(0,a.kt)("h3",{id:"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61"},"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61"),(0,a.kt)("p",null,"\u533a\u5757\u94fe\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u7cfb\u7edf\u51fa\u73b0\u7684\u76ee\u6807\u5e76\u4e0d\u662f\u4e3a\u4e86\u89e3\u51b3\u4e00\u822c\u8f6f\u4ef6\u5f00\u53d1\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027\u95ee\u9898\uff0c\u5b83\u4e5f\u4e0d\u662f\u4e3a\u89e3\u51b3\u4f20\u7edf\u5206\u5e03\u5f0f\u8ba1\u7b97\u95ee\u9898\u800c\u8bbe\u8ba1\u7684\u5206\u5e03\u5f0f\u8f6f\u4ef6\u67b6\u6784\u3002\u4f46\u901a\u8fc7\u6d1e\u5bdf\u5b83\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u7ed3\u5408\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u6280\u672f\u9700\u6c42\u548c\u7279\u5f81\uff0c\u6211\u4eec\u5219\u53ef\u4ee5\u5f97\u5230\u4e0d\u540c\u7684\u542f\u793a\u3002\u8fd9\u79cd\u542f\u793a\u53ef\u4ee5\u8bf4\u662fRealityIS\u6700\u6838\u5fc3\u7684\u90e8\u5206\u3002"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u5c06\u4ece\u4e0d\u540c\u7684\u89d2\u5ea6\u6765\u89e3\u8bfb\u533a\u5757\u94fe\u7cfb\u7edf\uff0c\u4ee5\u53ca\u600e\u6837\u4ece\u8fd9\u79cd\u89e3\u8bfb\u4e2d\u53d1\u73b0\u5efa\u7acb\u4e92\u64cd\u4f5c\u7cfb\u7edf\u7684\u65b9\u6848\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u533a\u5757\u94fe\u7cfb\u7edf\u6709\u4e09\u4e2a\u6280\u672f\u7279\u5f81\uff0c\u6216\u8005\u8bf4\u53ef\u4ee5\u4ece\u8fd9\u4e09\u4e2a\u65b9\u9762\u6765\u89e3\u8bfb\u533a\u5757\u94fe\u7cfb\u7edf\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},"\u6570\u636e"),(0,a.kt)("li",{parentName:"ul"},"\u5b89\u5168")),(0,a.kt)("p",null,"\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u4e09\u4e2a\u5c42\u9762\u5173\u6ce8\u7684\u5e76\u4e0d\u662f\u533a\u5757\u94fe\u6838\u5fc3\u7684\u5171\u8bc6\u673a\u5236\u7684\u90e8\u5206\uff0c\u800c\u662f\u5b83\u4f5c\u4e3a\u4e00\u4e2a\u8f6f\u4ef6\u67b6\u6784\u7684\u5c42\u9762\u3002\u540c\u65f6\u8fd9\u91cc\u5c3d\u7ba1\u6211\u4eec\u4e5f\u4f1a\u6d89\u53ca\u53bb\u4e2d\u5fc3\u5316\u7684\u601d\u60f3\uff0c\u4f46\u662f\u8fd9\u4e5f\u5e76\u4e0d\u662f\u6307\u533a\u5757\u94fe\u4e2d\u4f7f\u7528\u5206\u5e03\u5f0f\u8d26\u672c\u5b58\u50a8\u7684\u53bb\u4e2d\u5fc3\u5316\u65b9\u5f0f\uff0c\u6211\u4eec\u8003\u8651\u7684\u53bb\u4e2d\u5fc3\u5316\u662f\u6307\u901a\u8fc7\u4e00\u79cd\u5c06\u8f6f\u4ef6\u529f\u80fd\u548c\u7528\u6237\u6570\u636e\u9694\u79bb\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u5efa\u673a\u5236\uff0c\u4f7f\u5f97\u5e94\u7528\u5f00\u53d1\u5546\u4e0d\u518d\u5177\u6709\u638c\u63a7\u7528\u6237\u6570\u636e\u7684\u80fd\u529b\uff0c\u4ece\u800c\u4e5f\u662f\u4e00\u79cd\u53bb\u4e2d\u5fc3\u5316\u7684\u6982\u5ff5\u3002\u4f46\u662f\u8fd9\u79cd\u53bb\u4e2d\u5fc3\u5316\u4f9d\u7136\u9700\u8981\u501f\u52a9\u67d0\u79cd\u65b9\u5f0f\u7684\u4e2d\u5fc3\u5316\u8ba1\u7b97\uff0c\u4e0d\u8fc7\u5728\u8fd9\u79cd\u67b6\u6784\u4e0b\u7528\u6237\u5bf9\u6570\u636e\u5177\u6709\u66f4\u900f\u660e\u7684\u63a7\u5236\u3002"),(0,a.kt)("h4",{id:"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2"},"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2"),(0,a.kt)("p",null,"\u5982\u679c\u6211\u4eec\u4ece\u533a\u5757\u94fe\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u7684\u4efb\u4e00\u8282\u70b9\u53bb\u770b\uff0c\u8fd9\u4e2a\u8282\u70b9\u53ef\u4ee5\u770b\u4f5c\u4e00\u4e2a\u7b80\u5355\u7684\u865a\u62df\u673a\uff0c\u8fd9\u4e2a\u865a\u62df\u673a\u6bcf\u6b21\u8ba1\u7b97\u6267\u884c\u4e00\u4e2a\u975e\u5e38\u7b80\u5355\u7684\u7a0b\u5e8f\uff0c\u5373\u5bf9\u67d0\u4e24\u4e2a\u8d26\u6237\u6267\u884c\u4ef7\u503c\u4ea4\u6613\u3002\u6211\u4eec\u8fd9\u91cc\u4e0d\u8003\u8651\u8fd9\u4e2a\u4ef7\u503c\u4ea4\u6613\u7684\u7b97\u6cd5\u672c\u8eab\uff0c\u4ec5\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u7136\u540e\u601d\u8003\u4e3a\u4e86\u652f\u6301\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u5f00\u53d1\u548c\u8fd0\u884c\uff0c\u533a\u5757\u94fe\u4e0a\u7684\u865a\u62df\u673a\u5e94\u8be5\u5177\u5907\u4ec0\u4e48\u529f\u80fd\uff1f"),(0,a.kt)("p",null,"\u6211\u4eec\u77e5\u9053\u4f20\u7edf\u7684\u865a\u62df\u673a\u7684\u6838\u5fc3\u673a\u5236\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u5177\u6709\u67d0\u79cd\u8bed\u6cd5\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u89e3\u91ca\u5668\uff0c\u7136\u540e\u4f7f\u7528\u8fd9\u79cd\u8bed\u6cd5\u7f16\u7a0b\u7684\u7a0b\u5e8f\u6e90\u4ee3\u7801\u4f5c\u4e3a\u8f93\u5165\uff0c\u865a\u62df\u673a\u5bf9\u6e90\u4ee3\u7801\u8fdb\u884c\u89e3\u91ca\u5e76\u6267\u884c\uff0c\u8fd9\u79cd\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u901a\u5e38\u652f\u6301\u73b0\u4ee3\u6bd4\u8f83\u9ad8\u7ea7\u7684\u4e00\u4e9b\u8bed\u6cd5\uff0c\u4f8b\u5982Lua\uff0cPython\uff0cJava\u7b49\u7f16\u7a0b\u8bed\u8a00\u90fd\u652f\u6301\u8fd9\u79cd\u865a\u62df\u673a\u7684\u6267\u884c\u65b9\u5f0f\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"img",src:l(1505).Z,width:"626",height:"258"})),(0,a.kt)("p",null,"\u5c3d\u7ba1\u4e0d\u662f\u5f88\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u6211\u4eec\u53ef\u4ee5\u628a\u4e00\u4e2a\u7a0b\u5e8f\u7684\u7ed3\u6784\u770b\u6210\u662f\u8fd9\u6837\u7684\u62bd\u8c61\uff1a\u5373\u7a0b\u5e8f\u7531\u6570\u636e\u3001\u7c7b\u578b\u548c\u4ee3\u7801\u7ec4\u6210\uff0c\u5982\u4e0a\u56fe\uff08a\uff09\u6240\u793a\uff0c\u5f53\u7136\u8fd9\u91cc\u7684\u6570\u636e\u4e3b\u8981\u662f\u4f5c\u4e3a\u7a0b\u5e8f\u8f93\u5165\u7684\u6570\u636e\uff0c\u800c\u4e0d\u662f\u6307\u4ee3\u7801\u5185\u90e8\u4e5f\u53ef\u4ee5\u4ea7\u751f\u7684\u5f88\u591a\u7684\u5185\u90e8\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u5b58\u50a8\uff0c\u90a3\u4e48\u8fd9\u91cc\u7684\u7c7b\u578b\u81ea\u7136\u4e5f\u662f\u6307\u8fd9\u79cd\u5916\u90e8\u8f93\u5165\u7684\u6570\u636e\u7ed3\u6784\u7684\u7c7b\u578b\u3002\u4e00\u822c\u7684\u7a0b\u5e8f\uff0c\u5176\u6570\u636e\u548c\u7c7b\u578b\u90fd\u662f\u5b9a\u4e49\u548c\u5b58\u50a8\u5728\u7a0b\u5e8f\u5185\u90e8\u7684\uff0c\u7528\u6237\u53ea\u662f\u5728\u4f7f\u7528\u5176\u4e2d\u7684\u529f\u80fd\u3002"),(0,a.kt)("p",null,"\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u533a\u5757\u94fe\u7684\u8d26\u672c\u770b\u6210\u6570\u636e\uff0c\u7136\u540e\u8d26\u672c\u5bf9\u5e94\u7684\u7c7b\u578b\u662ffloat\u7c7b\u578b\uff0c\u5bf9\u5e94\u7684\u4ee3\u7801\u5219\u662f\u533a\u5757\u94fe\u865a\u62df\u673a\u6267\u884c\u7684\u5171\u8bc6\u7b97\u6cd5\u3002"),(0,a.kt)("p",null,"\u4f46\u6bd4\u8f83\u9690\u6666\u7684\u5730\u65b9\u5728\u4e8e\uff0cfloat\u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u5355\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u533a\u5757\u94fe\u53ea\u5904\u7406\u8fd9\u79cd\u7b80\u5355\u7684\u5916\u90e8\u8f93\u5165\u6570\u636e\uff0c\u6240\u4ee5\u5b83\u770b\u8d77\u6765\u5e76\u4e0d\u5305\u542b\u4e00\u4e2a\u7c7b\u578b\u5b9a\u4e49\u3002\u5982\u679c\u6211\u4eec\u628a\u8fd9\u4e2a\u590d\u6742\u5ea6\u5ef6\u5347\u4e00\u4e0b\uff0c\u5373\u5982\u679c\u533a\u5757\u94fe\u80fd\u5904\u7406\u4efb\u610f\u7c7b\u578b\u7684\u6570\u636e\uff0c\u90a3\u4e48\u5c31\u5fc5\u987b\u8981\u5b9a\u4e49\u7c7b\u578b\u7ed3\u6784\uff0c\u7136\u540e\u865a\u62df\u673a\u4ee5\u67d0\u79cd\u65b9\u5f0f\u6309\u7167\u7c7b\u578b\u5b9a\u4e49\u8fdb\u884c\u89e3\u6790\u3002\u8fd9\u5176\u5b9e\u5c31\u662f\u4f20\u7edf\u7684\u865a\u62df\u673a\u673a\u5236\uff0c\u5373\u8f93\u5165\u865a\u62df\u673a\u7684\u6e90\u4ee3\u7801\u4e2d\u5305\u542b\u5bf9\u4e8e\u5904\u7406\u7684\u4efb\u4f55\u6570\u636e\u7684\u7c7b\u578b\u5b9a\u4e49\u3002\u6bd4\u5982\u4ee5\u592a\u574a\u7684\u667a\u80fd\u5408\u7ea6\u5c31\u662f\u6bd4\u533a\u5757\u94fe\u66f4\u590d\u6742\u7684\u811a\u672c\u8bed\u8a00\uff0c\u5b83\u5c31\u53ef\u4ee5\u5305\u542b\u66f4\u590d\u6742\u7684\u7c7b\u578b\u5b9a\u4e49\u3002"),(0,a.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u8fd9\u91cc\u5374\u4e0d\u60f3\u8fd9\u4e48\u505a\uff0c\u56e0\u4e3a\u6211\u4eec\u770b\u5230\u4e86\u533a\u5757\u94fe\u7684\u53e6\u4e00\u4e2a\u4e0d\u540c\u5bfb\u5e38\u7684\u7279\u6027\uff0c\u4e5f\u5c31\u662f\u5b83\u7684\u53bb\u4e2d\u5fc3\u5316\u7279\u6027\u7684\u6765\u6e90\uff0c\u5373\u5b83\u7684\u6570\u636e\uff08\u5373\u8d26\u672c\uff09\u5b58\u50a8\u5728\u4e00\u4e2a\u72ec\u7acb\u4e8e\u7a0b\u5e8f\uff08\u865a\u62df\u673a\u4e0a\u7684\u5171\u8bc6\u7b97\u6cd5\u7a0b\u5e8f\uff09\u7684\u5730\u65b9\uff0c\u5373\u6570\u636e\u548c\u7a0b\u5e8f\u662f\u89e3\u8026\u7684\u3002\u6240\u4ee5\u8fd9\u9a71\u4f7f\u6211\u4eec\u60f3\u8981\u8fdb\u4e00\u6b65\u5f04\u6e05\u695a\u5b83\u7684\u72ec\u7279\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u80cc\u540e\u7684\u601d\u60f3\u3002"),(0,a.kt)("p",null,"\u5982\u679c\u53ea\u662f\u60f3\u8981\u5355\u7eaf\u5730\u628a\u6570\u636e\u4e0e\u7a0b\u5e8f\u4ee3\u7801\u5206\u79bb\uff0c\u76f4\u63a5\u628a\u6570\u636e\u5b58\u50a8\u5230\u5916\u90e8\u5e76\u4e0d\u662f\u4e00\u4e2a\u597d\u7684\u65b9\u6cd5\uff0c\u8fd9\u91cc\u9762\u6709\u51e0\u4e2a\u95ee\u9898\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u5185\u90e8\u4ecd\u7136\u4f1a\u5b9a\u4e49\u89e3\u6790\u7684\u6570\u636e\u7c7b\u578b\uff0c\u6240\u4ee5\u4e0d\u5229\u4e8e\u865a\u62df\u673a\u6269\u5c55\u5904\u7406\u4efb\u610f\u52a8\u6001\u7684\u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},"\u5b58\u50a8\u5728\u5916\u90e8\u7684\u6570\u636e\u53ea\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u6570\u636e\uff0c\u5b83\u4eec\u5e76\u6ca1\u6709\u591a\u5c11\u8bed\u4e49\u7684\u4fe1\u606f\uff0c\u6240\u4ee5\u7528\u6237\u65e2\u4e0d\u77e5\u9053\u600e\u4e48\u7ba1\u7406\u5b83\u4eec\uff0c\u4e5f\u65e0\u6cd5\u7406\u89e3\u5b83\u4eec\u3002\u60f3\u60f3\u7406\u8bba\u4e0a\u6211\u4eec\u4efb\u4f55\u5e94\u7528\u7684\u7528\u6237\u90fd\u53ef\u4ee5\u6253\u5f00\u5b58\u50a8\u5728\u5e94\u7528\u5185\u90e8\u6587\u4ef6\u5939\u4e2dSqlite\u7684\u6570\u636e\u5e93\uff0c\u4f46\u662f\u54ea\u4e9b\u6570\u636e\u53ef\u80fd\u5bf9\u7528\u6237\u5e76\u65e0\u592a\u5927\u610f\u4e49\u3002")),(0,a.kt)("p",null,"\u7528\u6237\u5bf9\u6570\u636e\u6700\u901a\u5e38\u7684\u7ba1\u7406\u662f\u6388\u6743\uff0c\u4fdd\u8bc1\u53ea\u6709\u7ecf\u8fc7\u7528\u6237\u8bb8\u53ef\u7684\u8f6f\u4ef6\u624d\u53ef\u4ee5\u8bbf\u95ee\u8fd9\u4e9b\u6570\u636e\u3002\u6240\u4ee5\u4ed4\u7ec6\u601d\u8003\u533a\u5757\u94fe\u7cfb\u7edf\u80cc\u540e\u7684\u601d\u60f3\uff1a",(0,a.kt)("strong",{parentName:"p"},"\u5373\u533a\u5757\u94fe\u53ef\u4ee5\u505a\u5230\u5bf9\u6570\u636e\u7684\u6388\u6743\u7ba1\u7406"),"\uff0c\u5c3d\u7ba1\u533a\u5757\u94fe\u7684\u6570\u636e\u4e5f\u662f\u5b58\u50a8\u5728\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u7684\u5730\u65b9\uff0c\u4f46\u662f\u5b83\u53ef\u4ee5\u505a\u5230\u5bf9\u6570\u636e\u7684\u6743\u9650\u7ba1\u7406\uff0c\u5c3d\u7ba1\u8fd9\u9700\u8981\u5171\u8bc6\u673a\u5236\u534f\u4f5c\u6765\u4fdd\u8bc1\uff0c\u4f46\u4ece\u7a0b\u5e8f\u7684\u673a\u5236\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u79cd\u4f7f\u5bf9\u6570\u636e\u7684\u6743\u9650\u7ba1\u7406\u53d8\u5f97\u53ef\u80fd\u7684\u539f\u56e0\u5728\u4e8e\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u7528\u6237\u4e86\u89e3\u6570\u636e\u7684\u610f\u4e49\uff0c\u7136\u540e\u5728\u4ea4\u6613\u7684\u65f6\u5019\u7528\u6237\u5c06\u8fd9\u4e2a\u8bed\u4e49\u4f20\u8fbe\u7ed9\u865a\u62df\u673a\uff0c\u865a\u62df\u673a\u6309\u7167\u7528\u6237\u6307\u5b9a\u7684\u610f\u4e49\u53ca\u6743\u9650\u673a\u5236\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\u3002"),"\u8fd9\u4e2a\u610f\u4e49\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u5c31\u662f\u7c7b\u578b\uff0c\u7528\u6237\u5bf9\u4e00\u4e2a\u201c\u7c7b\u578b+\u6570\u636e\u201d\u8fdb\u884c\u6388\u6743\uff0c\u7c7b\u578b\u5728\u8fd9\u91cc\u5347\u534e\u4e3a\u67d0\u79cd\u8bed\u4e49\u4fe1\u606f\u6216\u8005\u610f\u4e49\uff0c\u56e0\u4e3a\u6211\u4eec\u5728\u65e5\u5e38\u751f\u6d3b\u4e2d\u6240\u4f5c\u7684\u4e8b\u60c5\uff0c\u5176\u5b9e\u5927\u591a\u6570\u90fd\u662f\u5bf9\u67d0\u7c7b\u4e8b\u60c5\u8fdb\u884c\u5904\u7406\uff0c\u800c\u8fd9\u4e2a\u7c7b\u578b\u5728\u6211\u4eec\u751f\u6d3b\u4e2d\u5c31\u662f\u5305\u542b\u7279\u5b9a\u610f\u4e49\u7684\u4e8b\u7269\uff0c\u8fd9\u4e9b\u4e8b\u7269\u6211\u4eec\u90fd\u53ef\u4ee5\u901a\u8fc7\u540d\u5b57\u6216\u7c7b\u578b\u6765\u533a\u5206\uff0c\u7c7b\u578b\u5145\u5f53\u4e86\u4ee3\u8868\u4e00\u4ef6\u4e8b\u7269\u7684\u8bed\u4e49\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\u5f53\u7528\u6237\u5728\u770b\u5f85\u81ea\u5df1\u94fe\u4e0a\u7684\u4e00\u4e2a\u8d26\u672c\u6570\u636e\u65f6\uff0c\u8fd9\u4e2a\u6570\u636e\u4e0d\u5149\u53ea\u662f\u4e00\u4e2a\u6570\u503c\uff0c\u540c\u65f6\u4e5f\u4ee3\u8868\u4e86\u8d26\u672c\u8fd9\u4e2a\u7c7b\u578b\uff0c\u53ea\u4e0d\u8fc7\u7531\u4e8e\u533a\u5757\u94fe\u7684\u865a\u62df\u673a\u4ec5\u5904\u7406\u8fd9\u4e00\u79cd\u6570\u636e\u7c7b\u578b\uff0c\u6240\u4ee5\u8fd9\u4e2a\u7c7b\u578b\u88ab\u9690\u5f0f\u8868\u8ff0\u4e86\uff0c\u5373\u4f7f\u6ca1\u6709\u4efb\u4f55\u5730\u65b9\u5b9a\u4e49\u8fd9\u4e2a\u7c7b\u578b\uff0c\u533a\u5757\u94fe\u865a\u62df\u673a\u4e5f\u603b\u662f\u80fd\u591f\u6b63\u786e\u89e3\u6790\u8fd9\u4e2a\u6570\u636e\u3002\u5e76\u4e14\u5f53\u7528\u6237\u901a\u8fc7\u7ed9\u51fa\u5bc6\u94a5\u8fdb\u884c\u6388\u6743\u8ba1\u7b97\u7684\u65f6\u5019\uff0cTA\u8868\u8fbe\u7684\u5c31\u662f\u5bf9\u8d26\u672c\u8fd9\u4e2a\u7c7b\u578b\u7684\u6570\u636e\u8fdb\u884c\u6388\u6743\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\u8981\u60f3\u628a\u533a\u5757\u94fe\u4e0a\u8ff0\u8fd9\u79cd\u7a0b\u5e8f\u89c6\u89d2\u7684\u610f\u4e49\u6269\u5c55\u5230\u4e00\u822c\u7a0b\u5e8f\uff0c\u5373\u8ba9\u4efb\u4f55\u7a0b\u5e8f\u7684\u6570\u636e\u90fd\u53ef\u4ee5\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u7684\u4ee3\u7801\u800c\u5b58\u50a8\uff0c\u5e76\u4e14\u7528\u6237\u53ef\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7ba1\u7406\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u4ece\u4e00\u4e0b\u4e09\u4e2a\u65b9\u9762\u5bf9\u533a\u5757\u94fe\u8fdb\u884c\u6269\u5c55\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5c06\u5355\u4e00\u7684float\u7c7b\u578b\u6269\u5c55\u4e3a\u4e00\u5957\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf"),(0,a.kt)("li",{parentName:"ul"},"\u5c06\u6570\u636e\u6309\u7c7b\u578b\u5b58\u50a8\u5728\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u4ee3\u7801\u7684\u5730\u65b9"),(0,a.kt)("li",{parentName:"ul"},"\u865a\u62df\u673a\u5728\u8fd0\u884c\u65f6\u914d\u5408\u7528\u6237\u7684\u6743\u9650\u8bbe\u7f6e\u5bf9\u6570\u636e\u8fdb\u884c\u8bbf\u95ee")),(0,a.kt)("p",null,"\u4e00\u4e0b\u6211\u4eec\u5206\u522b\u6df1\u5165\u5206\u6790\u8fd9\u4e09\u4e2a\u65b9\u9762\u7684\u6269\u5c55\u6d89\u53ca\u5230\u7684\u4e00\u4e9b\u601d\u8003\u548c\u903b\u8f91\u3002"),(0,a.kt)("h5",{id:"\u7c7b\u578b"},"\u7c7b\u578b"),(0,a.kt)("p",null,"\u7a0b\u5e8f\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\uff0c\u5f53\u7136\u5fc5\u987b\u8981\u77e5\u9053\u6b63\u786e\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5373\u77e5\u9053\u6570\u636e\u5185\u90e8\u7684\u6bcf\u4e2a\u5b57\u8282\u8868\u793a\u4ec0\u4e48\u542b\u4e49\u3002\u901a\u5e38\u5916\u90e8\u4f20\u5165\u4e00\u4e2ajson\u5b57\u7b26\u4e32\uff0c\u7136\u540e\u7a0b\u5e8f\u5185\u90e8\u9996\u5148\u4f1a\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u5e94\u7684\u6570\u636e\u7ed3\u6784\u7c7b\u578b\uff0c\u7136\u540e\u6709\u4e00\u4e2a\u89e3\u6790\u51fd\u6570\u5bf9json\u5b57\u7b26\u4e32\u8fdb\u884c\u89e3\u6790\u5e76\u5c06\u4e4b\u8f6c\u5316\u4e3a\u5185\u90e8\u6570\u636e\u7ed3\u6784\u7684\u4e00\u4e2a\u5bf9\u8c61\u3002\u5982\u4e0b\u56fe\uff08a\uff09\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(9802).Z,width:"833",height:"259"})),(0,a.kt)("p",null,"\u4f46\u5982\u524d\u9762\u7684\u5206\u6790\u6240\u77e5\uff0c\u8fd9\u91cc\u4f1a\u5e26\u6765\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7528\u6237\u6570\u636e\u7ba1\u7406\u548c\u6388\u6743\u7684\u95ee\u9898"),(0,a.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u6839\u636e\u7528\u6237\u6388\u6743\u8fdb\u884c\u5b89\u5168\u63a7\u5236")),(0,a.kt)("p",null,"\u7531\u4e8e\u89e3\u6790\u5668\u5728\u7a0b\u5e8f\u5185\u90e8\uff0c\u6240\u4ee5\u6570\u636e\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\u4ec5\u4ec5\u662f\u4e00\u4e9b\u5b57\u8282\uff0c\u5982\u679c\u6709\u975e\u5e38\u591a\u7684\u6570\u636e\uff0c\u7528\u6237\u6839\u672c\u4e0d\u77e5\u9053\u54ea\u4e9b\u6570\u636e\u662f\u5bf9\u5e94\u4ec0\u4e48\u610f\u4e49\uff0c\u5373\u4f7f\u7528\u6237\u53ef\u4ee5\u81ea\u5df1\u53bb\u6839\u636e\u6587\u672c\u5185\u5bb9\u81ea\u884c\u5224\u65ad\uff0c\u751a\u81f3\u7ed9\u8fd9\u4e9b\u6587\u672c\u6570\u636e\u52a0\u4e0a\u4e00\u4e9b\u6807\u7b7e\u6216\u540d\u5b57\uff0c\u4f46\u662f\u8fd9\u4e0d\u4ec5\u4f1a\u589e\u5f3a\u7528\u6237\u5bf9\u6570\u636e\u7684\u7ba1\u7406\u590d\u6742\u5ea6\uff0c\u800c\u4e14\u8fd9\u79cd\u5206\u7c7b\u884c\u4e3a\u6216\u7ed3\u679c\u4e0e\u5b9e\u9645\u7684\u6570\u636e\u610f\u4e49\u53ef\u80fd\u8fd8\u662f\u4e0d\u4e00\u81f4\u7684\u3002",(0,a.kt)("strong",{parentName:"p"},"\u56e0\u6b64\uff0c\u7528\u6237\u65e0\u6cd5\u9488\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7ba1\u7406"),"\u3002"),(0,a.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u89e3\u6790\u5668\u5904\u4e8e\u7a0b\u5e8f\u5185\u90e8\uff0c\u90a3\u4e48\u5c31\u65e0\u6cd5\u4fdd\u8bc1\u7a0b\u5e8f\u4f1a\u9075\u7167\u7528\u6237\u7684\u6388\u6743\u7ed3\u679c\u8fdb\u884c\u5904\u7406\u3002\u9996\u5148\u540c\u6837\u56e0\u4e3a\u4e0a\u9762\u65e0\u6cd5\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7684\u539f\u56e0\uff0c\u4e5f\u4e0d\u5b58\u5728\u4e00\u4e2a\u5916\u90e8\u7a0b\u5e8f\u53ef\u4ee5\u786e\u4fdd\u6570\u636e\u4f1a\u6309\u7167\u7528\u6237\u7684\u65e8\u610f\u88ab\u67d0\u4e2a\u7a0b\u5e8f\u5904\u7406\uff0c\u56e0\u4e3a\u8c01\u90fd\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6570\u636e\u7684\u610f\u4e49\u7684\u4ec0\u4e48\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u53ea\u6709\u5c06\u6570\u636e\u4f20\u9012\u5230\u7a0b\u5e8f\u5185\u90e8\uff0c\u7531\u7a0b\u5e8f\u5185\u90e8\u7684\u89e3\u6790\u5668\u53bb\u505a\u7c7b\u578b\u89e3\u6790\u548c\u5206\u6790\u624d\u77e5\u9053\u6570\u636e\u7684\u610f\u4e49\uff0c\u4e5f\u5c31\u662f\u8bf4\u53ea\u6709\u7a0b\u5e8f\u624d\u77e5\u9053\u6570\u636e\u7684\u610f\u4e49\uff0c\u4f46\u662f\u8fd9\u4e2a\u65f6\u5019\u6570\u636e\u5df2\u7ecf\u88ab\u4f20\u9012\u7ed9\u7a0b\u5e8f\u4e86\u3002",(0,a.kt)("strong",{parentName:"p"},"\u56e0\u6b64\uff0c\u7cfb\u7edf\u4e5f\u65e0\u6cd5\u6839\u636e\u7528\u6237\u7684\u6388\u6743\u65e8\u610f\u5c06\u6570\u636e\u5206\u914d\u7ed9\u5408\u6cd5\u7684\u7a0b\u5e8f"),"\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u7684\u5206\u6790\u8981\u6c42\uff0c\u6570\u636e\u7684\u5f62\u5f0f\u53ca\u5176\u5b9a\u4e49\u5e94\u8be5\u5728\u4e00\u8d77\u88ab\u7ba1\u7406\uff0c\u4e5f\u5c31\u7c7b\u578b\u7684\u5b9a\u4e49\u5e94\u8be5\u5904\u4e8e\u7a0b\u5e8f\u4e4b\u5916\uff0c\u8fd9\u6837\u4e0d\u4ec5\u7528\u6237\u80fd\u591f\u77e5\u9053\u6570\u636e\u7684\u610f\u4e49\uff0c\u4ece\u800c\u80fd\u591f\u6b63\u786e\u5730\u505a\u51fa\u6743\u9650\u63a7\u5236\uff0c\u800c\u4e14\u7cfb\u7edf\u53ef\u4ee5\u501f\u52a9\u7c7b\u578b\u7cfb\u7edf\u4ee5\u53ca\u7528\u6237\u7684\u6388\u6743\u7ec4\u7ec7\u6570\u636e\u88ab\u4f20\u5165\u672a\u7ecf\u6388\u6743\u7684\u7a0b\u5e8f\u3002\u5373\u5982\u4e0a\u56fe\uff08b\uff09\u4e2d\u6240\u793a\u3002\u8fd9\u5c31\u8981\u6c42\u7c7b\u578b\u7cfb\u7edf\u662f\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u7684\u3002"),(0,a.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u975e\u5e38\u6709\u542f\u53d1\u610f\u4e49\u7684\u89c6\u89d2\uff0c\u6211\u4eec\u5355\u7eaf\u53bb\u770b\u533a\u5757\u94fe\u7cfb\u7edf\uff0c\u5f88\u96be\u5f97\u51fa\u8fd9\u6837\u7684\u601d\u7ef4\uff0c\u4f46\u662f\u5176\u5b9e\u4ed4\u7ec6\u5206\u6790\u4e5f\u662f\u5408\u7406\u7684\u3002\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u533a\u5757\u94fe\u5176\u5b9e\u5305\u542b\u4e86\u4e00\u4e2a\u516c\u5171\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e2a\u7c7b\u578b\u7cfb\u7edf\u53ea\u662f\u5305\u542b\u6570\u503c\u7c7b\u578b\uff0c\u4e5f\u81f3\u4e8e\u6211\u4eec\u751a\u81f3\u4e0d\u9700\u8981\u53bb\u5b9a\u4e49\u8fd9\u4e2a\u7c7b\u578b\u7cfb\u7edf\uff0c\u8fd9\u6837\u5bfc\u81f4\u4eba\u4eec\u5bf9\u5b83\u7684\u7c7b\u578b\u7cfb\u7edf\u53ef\u80fd\u6ca1\u6709\u611f\u77e5\uff1b\u7136\u540e\u533a\u5757\u94fe\u7c7b\u578b\u7cfb\u7edf\u7684\u89e3\u6790\u5668\u662f\u4f4d\u4e8e\u865a\u62df\u673a\u4e0a\u7684\uff0c\u5373\u7531\u7cfb\u7edf\u63a7\u5236\uff0c\u7cfb\u7edf\u5728\u5bf9\u6570\u636e\u6309\u7167\u7528\u6237\u7684\u6388\u6743\u6267\u884c\u6743\u9650\u63a7\u5236\uff0c\u6700\u540e\u83b7\u5f97\u6388\u6743\u7684\u8bf7\u6c42\u624d\u4f1a\u6267\u884c\u6700\u7ec8\u7684\u4ea4\u6613\u8ba1\u7b97\uff0c\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u4ea4\u6613\u624d\u662f\u771f\u6b63\u7684\u5ba2\u6237\u7a0b\u5e8f\uff0c\u800c\u4ea4\u6613\u4e4b\u524d\u7684\u7c7b\u578b\u7cfb\u7edf\u548c\u6388\u6743\u8ba1\u7b97\u662f\u5c5e\u4e8e\u5e73\u53f0\u865a\u62df\u673a\u90e8\u5206\uff0c\u8fd9\u90e8\u5206\u5ba2\u6237\u7a0b\u5e8f\u662f\u65e0\u6cd5\u63a7\u5236\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(9780).Z,width:"833",height:"248"})),(0,a.kt)("p",null,"\u6700\u7ec8\u6211\u4eec\u770b\u6574\u4e2a\u7c7b\u578b\u7cfb\u7edf\u7684\u67b6\u6784\uff0c\u5b83\u7c7b\u4f3c\u4e8e\u4e0a\u56fe\u6240\u793a\uff0c\u8fd9\u91cc\u5ba2\u6237\u7a0b\u5e8f\uff08program\uff09\u4ec5\u4ec5\u662f\u5305\u542b\u4ee3\u7801\uff0c\u6570\u636e\u88ab\u5b58\u50a8\u5728\u5176\u5b83\u5730\u65b9\uff0c\u7528\u6237\u53ef\u4ee5\u79bb\u7ebf\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\uff0c\u6307\u5b9a\u54ea\u4e9b\u7a0b\u5e8f\u53ef\u4ee5\u8bbf\u95ee\u54ea\u4e9b\u7c7b\u578b\u7684\u6570\u636e\u3002\u7136\u540e\u8fd0\u884c\u65f6\u8fd9\u4e9b\u6570\u636e\u88ab\u9996\u5148\u52a0\u8f7d\u7684\u865a\u62df\u673aVM\uff0c\u865a\u62df\u673a\u9996\u5148\u6839\u636e\u7c7b\u578b\u4fe1\u606f\u5bf9\u6570\u636e\u7684\u6743\u9650\u8fdb\u884c\u5224\u65ad\uff0c\u5982\u679c\u8fd9\u4e2a\u7a0b\u5e8f\u88ab\u6388\u6743\uff0c\u5219\u8c03\u7528\u89e3\u6790\u5668\u5e2e\u52a9\u7a0b\u5e8f\u89e3\u6790\u683c\u5f0f\uff0c\u5e76\u6700\u7ec8\u5c06\u7a0b\u5e8f\u653e\u5165\u5230\u67d0\u4e2a\u7ea6\u5b9a\u7684\u5185\u5b58\u5730\u5740\uff0c\u6700\u540e\u7a0b\u5e8f\u4ece\u8fd9\u4e2a\u5185\u5b58\u5730\u5740\u53d6\u503c\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u6574\u4e2a\u7c7b\u578b\u7cfb\u7edf\u7684\u5de5\u4f5c\u673a\u5236\u8fd8\u6d89\u53ca\u5f88\u591a\u5185\u5bb9\uff0c\u6211\u4eec\u5728\u540e\u9762\u67b6\u6784\u8bbe\u8ba1\u4e00\u8282\u5c06\u8be6\u7ec6\u4ecb\u7ecd\u3002"),(0,a.kt)("h5",{id:"\u6570\u636e"},"\u6570\u636e"),(0,a.kt)("p",null,"\u533a\u5757\u94fe\u7684\u53e6\u4e00\u4e2a\u7279\u70b9\u662f\u6570\u636e\u7684\u5b58\u50a8\u662f\u672a\u53d7\u4fdd\u62a4\u7684\uff0c\u751a\u81f3\u662f\u660e\u6587\u7684\uff0c\u4efb\u4f55\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u83b7\u53d6\u7528\u6237\u7684\u8d26\u672c\u4fe1\u606f\u3002\u8fd9\u8ddf\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u601d\u60f3\u4e5f\u662f\u622a\u7136\u4e0d\u540c\u7684\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u67b6\u6784\u5c31\u662f\u4e3a\u4e86\u4fdd\u62a4\u7528\u6237\u6570\u636e\u800c\u5c06\u6570\u636e\u5b8c\u5168\u9694\u79bb\uff0c\u751a\u81f3\u52a0\u5bc6\u4ee5\u9632\u6b62\u5176\u5b83\u7a0b\u5e8f\u89e6\u78b0\u5230\u6570\u636e\uff0c\u4f46\u662f\u5b83\u4eec\u901a\u5e38\u5728\u5185\u90e8\u5219\u4e0d\u505a\u592a\u591a\u5b89\u5168\u68c0\u67e5\uff0c\u5047\u8bbe\u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u90fd\u662f\u5408\u6cd5\u7684\uff1b\u800c\u533a\u5757\u94fe\u7684\u54f2\u5b66\u5374\u4e0d\u4e00\u6837\uff0c\u5b83\u8ba4\u4e3a\u6570\u636e\u7684\u5b58\u50a8\u4e0d\u91cd\u8981\uff0c\u91cd\u8981\u7684\u662f\u6570\u636e\u7684\u6240\u6709\u6743\uff0c\u6240\u4ee5\u5b83\u7684\u6838\u5fc3\u662f\u5728\u8fd0\u884c\u65f6\u505a\u6388\u6743\u68c0\u67e5\u3002\u5f53\u7136\u8fd9\u91cc\u53ea\u662f\u4e00\u79cd\u67b6\u6784\u4e0a\u7684\u7c7b\u6bd4\uff0c\u533a\u5757\u94fe\u516c\u5f00\u660e\u6587\u6570\u636e\u7684\u673a\u5236\u4e5f\u662f\u7531\u4e8e\u5176\u6838\u5fc3\u7684\u5171\u8bc6\u673a\u5236\u51b3\u5b9a\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(3459).Z,width:"816",height:"218"})),(0,a.kt)("p",null,"\u5982\u4e0a\u56fe\uff08a\uff09\u6240\u793a\uff0c\u4f20\u7edf\u7684\u7a0b\u5e8f\u5c06\u6570\u636e\u9694\u79bb\u8d77\u6765\uff0c\u4ee5\u9632\u6b62\u5176\u5b83\u7a0b\u5e8f\u8bbf\u95ee\uff0c\u8fd9\u79cd\u9694\u79bb\u673a\u5236\u5f80\u5f80\u662f\u5728\u7f16\u7a0b\u6a21\u578b\u4e4b\u5916\u7684\u673a\u5236\uff0c\u7531\u64cd\u7cfb\u7edf\u6765\u63d0\u4f9b\uff0c\u56e0\u6b64\u7a0b\u5e8f\u4e0d\u9700\u8981\u62c5\u5fc3\u6570\u636e\u7684\u5b89\u5168\u6027\u3002\u4f8b\u5982\u5e38\u89c1\u81f3\u5c11\u6709\u4e09\u79cd\u6570\u636e\u4fdd\u62a4\u673a\u5236\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u6587\u4ef6\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u6c99\u76d2\u73af\u5883"),"\uff0c\u5728\u73b0\u4ee3\u79fb\u52a8\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2a\u5e94\u7528\u5f80\u5f80\u90fd\u5206\u914d\u6709\u72ec\u7acb\u7684\u6570\u636e\u5b58\u50a8\u7a7a\u95f4\uff0c\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u5c06\u5176\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u6570\u636e\u5b58\u653e\u81f3\u8fd9\u91cc\u3002\u50cfiOS\u64cd\u4f5c\u7cfb\u7edf\u5219\u4f1a\u4e3a\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u7a7a\u95f4\u521b\u9020\u4e00\u4e2a\u6c99\u76d2\u73af\u5883\uff0c\u4f7f\u5f97\u53ea\u6709\u6240\u5c5e\u7684\u5e94\u7528\u7a0b\u5e8f\u624d\u80fd\u8bbf\u95ee\u8fd9\u4e2a\u73af\u5883\u4e2d\u7684\u4e00\u5207\u6570\u636e\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u64cd\u4f5c\u7cfb\u7edf\u5185\u5b58\u9694\u79bb"),"\uff0c\u5f53\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u540e\uff0c\u5c3d\u7ba1\u7406\u8bba\u4e0a\u6240\u6709\u7684\u5e94\u7528\u7a0b\u5e8f\u90fd\u662f\u5171\u4eab\u8ba1\u7b97\u673a\u786c\u4ef6\u7684\u5185\u5b58\uff0c\u4f46\u662f\u73b0\u4ee3\u64cd\u4f5c\u7cfb\u7edf\u53ca\u786c\u4ef6\u63d0\u4f9b\u4e86\u5f88\u591a\u9694\u79bb\u673a\u5236\uff0c\u4f7f\u5f97\u6bcf\u4e2a\u7a0b\u5e8f\u88ab\u5206\u914d\u4e00\u5757\u5185\u5b58\u7684\u533a\u57df\uff0c\u5e76\u4e14\u4e0d\u7ba1\u5176\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u8bbf\u95ee\u7684\u5185\u5b58\u5730\u5740\u6307\u5411\u4f55\u5904\uff0c\u90fd\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u7a0b\u5e8f\u4e4b\u5916\u7684\u9694\u79bb\u533a\u57df\u3002\u6211\u4eec\u5c06\u5728\u540e\u9762\u8ba8\u8bba\u8fd9\u4e9b\u673a\u5236\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u865a\u62df\u673a\u6c99\u76d2\u73af\u5883"),"\uff0c\u50cfJava\u3001Web Assembly\u3001.NET CLR\u7b49\u73b0\u4ee3\u865a\u62df\u673a\u73af\u5883\uff0c\u5b83\u4eec\u5f80\u5f80\u63d0\u4f9b\u4e00\u79cd\u591a\u79cd\u7f16\u7a0b\u8bed\u8a00\u7684\u7a0b\u5e8f\u4e92\u64cd\u4f5c\u7684\u80fd\u529b\uff0c\u5c3d\u7ba1\u4fdd\u62a4\u529b\u5ea6\u548c\u6027\u80fd\u4e0d\u4e00\u6837\uff0c\u5b83\u4eec\u8fd8\u6216\u591a\u6216\u5c11\u63d0\u4f9b\u4e86\u4e00\u4e9b\u5728\u540c\u4e00\u4e2a\u5e94\u7528\u5185\u90e8\u9694\u79bb\u4e0d\u540c\u5b50\u7a0b\u5e8f\u7684\u80fd\u529b\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u56e0\u4e3a\u6574\u4e2a\u865a\u62df\u673a\u53ca\u8fd0\u884c\u5728\u5176\u4e0a\u9762\u7684\u6240\u6709\u7684\u7a0b\u5e8f\u90fd\u662f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\uff0c\u6240\u4ee5\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u65e0\u6cd5\u63d0\u4f9b\u4fdd\u62a4\uff0c\u865a\u62df\u673a\u5f80\u5f80\u9700\u8981\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u67d0\u4e9b\u673a\u5236\u6765\u5b9e\u73b0\u5e94\u7528\u5185\u7684\u5185\u5b58\u9694\u79bb\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u865a\u62df\u673a\u4e0a\u7684\u6bcf\u4e2a\u5b50\u7a0b\u5e8f\u6765\u8bb2\uff0c\u865a\u62df\u673a\u73af\u5883\u672c\u8eab\u6709\u70b9\u7c7b\u4f3c\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u6982\u5ff5\u4e86\u3002")),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5206\u6790\u53ef\u4ee5\u770b\u51fa\uff0c\u8fc7\u53bb\u51e0\u5341\u5e74\u8ba1\u7b97\u673a\u8f6f\u4ef6\u6784\u9020\u7684\u53d1\u5c55\u5386\u53f2\uff0c\u9010\u6e10\u5f62\u6210\u8fd9\u79cd\u64cd\u4f5c\u7cfb\u7edf\u4e0e\u7f16\u7a0b\u6a21\u578b\u7684\u5206\u5de5\u534f\u4f5c\uff0c\u4e5f\u662f\u4e00\u79cd\u786c\u4ef6\u4e0a\u7684\u62bd\u8c61\uff0c\u5728\u8fd9\u79cd\u62bd\u8c61\u6a21\u578b\u4e2d\uff0c\u786c\u4ef6\u6216\u64cd\u4f5c\u7cfb\u7edf\u53ea\u9700\u8981\u63d0\u4f9b\u5982\u6587\u4ef6\u6216\u5185\u5b58\u7ea7\u522b\u7684\u5b89\u5168\u8bbf\u95ee\u673a\u5236\uff0c\u800c\u4e0d\u9700\u8981\u5173\u6ce8\u5e94\u7528\u5b9e\u9645\u7684\u6570\u636e\u548c\u6570\u636e\u7ed3\u6784\uff0c\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\uff1b\u800c\u5bf9\u4e8e\u5e94\u7528\u7a0b\u5e8f\uff0c\u7531\u4e8e\u786c\u4ef6\u6216\u64cd\u4f5c\u7cfb\u7edf\u5df2\u7ecf\u4fdd\u8bc1\u4e86\u6570\u636e\u4e0d\u4f1a\u88ab\u5176\u5b83\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u90a3\u4e48\u6574\u4e2a\u7f16\u7a0b\u6a21\u578b\u6d89\u53ca\u7684\u673a\u5236\u53ea\u9700\u8981\u8003\u8651\u5e94\u7528\u4e1a\u52a1\u903b\u8f91\u7684\u6784\u9020\uff0c\u800c\u4e0d\u9700\u8981\u8003\u8651\u6570\u636e\u7684\u8bbf\u95ee\u5b89\u5168\uff0c\u5e76\u4e14\u73b0\u4ee3\u7f16\u7a0b\u6a21\u578b\u57fa\u672c\u4e0a\u90fd\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff1a\u5373\u4ee3\u7801\u53ef\u4ee5\u8bbf\u95ee\u8be5\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u4efb\u4f55\u8d44\u6e90\uff0c\u53ea\u8981\u5b83\u80fd\u83b7\u53d6\u5230\u76f8\u5e94\u7684\u5185\u5b58\u5730\u5740\uff0c\u4f8b\u5982\u5728C++\u4ee3\u7801\u4e2d\uff0c\u4e00\u4e2a\u6307\u9488\u53ef\u4ee5\u6307\u5411\u548c\u8bbf\u95ee\u4efb\u610f\u5e94\u7528\u7a0b\u5e8f\u5185\u90e8\u7684\u5185\u5b58\u5730\u5740\uff0c\u5373\u4f7f\u662f\u90a3\u4e9b\u4e0d\u80fd\u4f7f\u7528\u6307\u9488\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4eec\u7684\u6838\u5fc3\u4e5f\u4e3b\u8981\u662f\u5728\u5e2e\u52a9\u7b80\u5316\u5185\u5b58\u7ba1\u7406\uff0c\u800c\u4e0d\u662f\u963b\u6b62\u5bf9\u5e94\u7528\u7a0b\u5e8f\u5185\u4efb\u610f\u6570\u636e\u7684\u8bbf\u95ee\uff0c\u4f8b\u5982\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\u4f60\u53ef\u4ee5\u4f20\u9012\u7ed9\u4efb\u4f55\u53d8\u91cf\u4ece\u800c\u88ab\u4f7f\u7528\u3002"),(0,a.kt)("p",null,"\u8fc7\u53bb\u51e0\u5341\u5e74\uff0c\u8fd9\u4e00\u5957\u673a\u5236\u8fd0\u8f6c\u826f\u597d\uff0c\u4e5f\u4f53\u73b0\u51fa\u8fd9\u79cd\u62bd\u8c61\u5e26\u6765\u7684\u9ad8\u6548\u7387\u3002\u4f46\u662f\u8fd9\u79cd\u62bd\u8c61\u53ea\u8003\u8651\u4e00\u4e2a\u7a0b\u5e8f\u53ca\u5176\u7a0b\u5e8f\u7684\u6267\u884c\uff0c\u800c\u6ca1\u6709\u8003\u8651\u7a0b\u5e8f\u5185\u90e8\u6570\u636e\u5bf9\u4e8e\u7528\u6237\u7684\u610f\u4e49\u3002\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e2d\uff0c\u8f6f\u4ef6\u4e3b\u8981\u662f\u4f5c\u4e3a\u4e00\u79cd\u5355\u4e00\u7684\u529f\u80fd\u4f7f\u7528\uff0c\u8fd9\u79cd\u529f\u80fd\u5f88\u5c11\u6d89\u53ca\u9700\u8981\u8ddf\u5916\u90e8\u4ea4\u4e92\uff0c\u5b83\u4eec\u6574\u4f53\u5728\u5185\u90e8\u662f\u81ea\u6d3d\u7684\uff0c\u5982\u679c\u7528\u6237\u9700\u8981\u53e6\u4e00\u4e2a\u529f\u80fd\uff0cTA\u5c31\u53bb\u6253\u5f00\u4f7f\u7528\u53e6\u4e00\u4e2a\u8f6f\u4ef6\u5c31\u597d\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u8fd1\u51e0\u5e74\u968f\u7740Web 3.0\u3001\u5143\u5b87\u5b99\u548c\u591a\u667a\u80fd\u4f53\u7c7b\u5e94\u7528\u7684\u51fa\u73b0\uff0c\u8fd9\u4e9b\u5e94\u7528\u8d8a\u6765\u8d8a\u51f8\u663e\u51fa\u76f8\u4e92\u4ea4\u4e92\u548c\u534f\u4f5c\u7684\u7279\u6027\u548c\u9700\u6c42\uff0c\u8fd9\u8ddf\u6211\u4eec\u4f20\u7edf\u7684\u5e94\u7528\u6784\u6210\u6a21\u578b\u662f\u76f8\u6096\u7684\uff0c\u6570\u636e\u9694\u79bb\u5c31\u5931\u53bb\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u673a\u5236\u53bb\u63d0\u4f9b\u4e00\u4e9b\u63a5\u53e3\u8ba9\u5176\u5b83\u5e94\u7528\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u4f46\u662f\u8fd9\u4e9b\u673a\u5236\u67b6\u6784\u901a\u5e38\u90fd\u5f88\u590d\u6742\u3001\u4e0d\u53ef\u6269\u5c55\u3001\u6548\u7387\u4f4e\u4e0b\u3002"),(0,a.kt)("p",null,"\u56e0\u6b64\uff0c\u6216\u8bb8\u6211\u4eec\u5e94\u8be5\u50cf\u533a\u5757\u94fe\u7cfb\u7edf\u4e00\u6837\uff0c\u5efa\u7acb\u4e00\u5c42\u6570\u636e\u62bd\u8c61\u3002\u5b83\u53ef\u4ee5\u5e26\u6765\u5929\u751f\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u540c\u65f6\u540e\u9762\u6211\u4eec\u5c06\u770b\u5230\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u8c03\u6574\u8fd8\u53ef\u4ee5\u5e26\u6765\u5f88\u591a\u65b0\u7684\u8ba1\u7b97\u7279\u6027\u3002\u4f46\u662f\u9996\u5148\u6765\u770b\u5c06\u6570\u636e\u4e0e\u5e94\u7528\u7a0b\u5e8f\u5206\u79bb\u4e4b\u540e\u600e\u6837\u4fdd\u8bc1\u6570\u636e\u7684\u5b89\u5168\u3002"),(0,a.kt)("h5",{id:"\u5b89\u5168"},"\u5b89\u5168"),(0,a.kt)("p",null,"\u5c06\u6570\u636e\u5b58\u50a8\u5728\u5e94\u7528\u7a0b\u5e8f\u4e4b\u5916\u7684\u5730\u65b9\uff0c\u5c31\u5931\u53bb\u4e86\u786c\u4ef6\u548c\u64cd\u4f5c\u7cfb\u7edf\u7684\u4fdd\u62a4\uff0c\u90a3\u4e48\u5e73\u53f0\u6216\u8005\u5e94\u7528\u7a0b\u5e8f\u5c31\u5fc5\u987b\u989d\u5916\u63d0\u4f9b\u4fdd\u62a4\u673a\u5236\u3002\u8fd9\u65b9\u9762\u6211\u4eec\u4e5f\u53ef\u4ee5\u4ece\u533a\u5757\u94fe\u7cfb\u7edf\u5f97\u5230\u4e00\u4e9b\u542f\u793a\uff0c\u518d\u7ed3\u5408\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u6280\u672f\u7684\u4e00\u4e9b\u53d1\u5c55\uff0c\u627e\u5230\u4e00\u4e2a\u5408\u9002\u7684\u6280\u672f\u65b9\u5411\u3002"),(0,a.kt)("p",null,"\u4e0d\u8003\u8651\u5206\u5e03\u5f0f\u73af\u5883\uff0c\u4ec5\u8003\u8651\u5355\u4e2a\u865a\u62df\u673a\uff0c\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u533a\u5757\u94fe\u8ba1\u7b97\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a\u9996\u5148\u865a\u62df\u673a\u4ece\u5916\u90e8\u73af\u5883\u4e2d\u83b7\u53d6\u5230\u7528\u6237\u8d26\u672c\uff0c\u7136\u540e\u57fa\u4e8e\u7528\u6237\u6388\u6743\u6267\u884c\u9a8c\u8bc1\u8ba1\u7b97\uff0c\u9a8c\u8bc1\u901a\u8fc7\u5219\u6267\u884c\u5177\u4f53\u7684\u4ea4\u6613\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e09\u90e8\u5206\u5206\u522b\u770b\u4f5c\u6570\u636e\u3001\u865a\u62df\u673a\u548c\u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u4e0b\u56fe\uff08b\uff09\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(3459).Z,width:"816",height:"218"})),(0,a.kt)("p",null,"\u9996\u5148\u6570\u636e\u5b58\u50a8\u5728\u5e94\u7528\u7a0b\u5e8f\u7684\u5916\u90e8\uff0c\u4ece\u524d\u9762\u6570\u636e\u90e8\u5206\u7684\u5206\u6790\u4e5f\u53ef\u4ee5\u770b\u51fa\uff0c\u6240\u4ee5\u5728\u7a0b\u5e8f\u8fd0\u884c\u7684\u65f6\u5019\u5c31\u6d89\u53ca\u5230\u4e00\u4e2a\u6570\u636e\u7684\u4f20\u8f93\u8fc7\u7a0b\u3002\u5173\u4e8e\u7f51\u7edc\u4f20\u8f93\u7684\u5b89\u5168\u6027\uff0c\u6211\u4eec\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u5e74\u7684\u8f6f\u4ef6\u5de5\u7a0b\u5b9e\u8df5\uff0c\u8fd9\u5757\u5e76\u4e0d\u4f1a\u5e26\u6765\u5f88\u5927\u7684\u95ee\u9898\u3002\u800c\u5b9e\u9645\u4e0a\uff0c\u6bd4\u5982\u5728\u79fb\u52a8\u7aef\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u7684\u6570\u636e\u5927\u90e8\u5206\u662f\u5b58\u50a8\u5728\u672c\u5730\u7684\uff0c\u8fd9\u5e76\u4e0d\u9700\u8981\u7ecf\u8fc7\u7f51\u7edc\u4f20\u8f93\uff0c\u5b9e\u9645\u4e0a\u6574\u4e2a\u7cfb\u7edf\u53ea\u6709\u9700\u8981\u4e0e\u5176\u5b83\u7528\u6237\u8fdb\u884c\u4ea4\u4e92\u7684\u6570\u636e\u624d\u4f1a\u8fdb\u884c\u7f51\u7edc\u4f20\u8f93\u3002"),(0,a.kt)("p",null,"\u5f53\u6570\u636e\u5230\u8fbe\u672c\u5730\u865a\u62df\u673a\u65f6\uff0c\u865a\u62df\u673a\u9996\u5148\u6267\u884c\u6743\u9650\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u51b3\u5b9a\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u662f\u5426\u53ef\u4ee5\u83b7\u53d6\u8fd9\u4e2a\u6570\u636e\u4ee5\u6267\u884c\u67d0\u79cd\u8ba1\u7b97\u3002\u8fd9\u91cc\u7531\u4e8e\u865a\u62df\u673a\u5df2\u77e5\u7528\u6237\u7684\u6570\u636e\u7c7b\u578b\uff0c\u6240\u4ee5\u5b83\u80fd\u591f\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7ba1\u7406\uff0c\u7528\u6237\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u5bf9\u6bcf\u79cd\u8bed\u4e49\u6570\u636e\u5bf9\u6bcf\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u6388\u6743\uff0c\u53ea\u6709\u76f8\u5e94\u7c7b\u578b\u88ab\u6388\u6743\u7684\u5e94\u7528\u624d\u53ef\u4ee5\u8bbf\u95ee\u5230\u5bf9\u5e94\u7c7b\u578b\u7684\u6570\u636e\u3002\u6240\u4ee5\u8fd9\u91cc\u865a\u62df\u673a\u5b8c\u5168\u53ef\u4ee5\u6267\u884c\u6574\u4e2a\u6388\u6743\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u968f\u540e\uff0c\u88ab\u6388\u6743\u7684\u5e94\u7528\u6700\u7ec8\u53ef\u4ee5\u83b7\u53d6\u5230\u6570\u636e\u6267\u884c\u67d0\u4e2a\u903b\u8f91\u8ba1\u7b97\u3002\u5c3d\u7ba1\u6570\u636e\u9700\u8981\u6267\u884c\u6743\u9650\u8ba1\u7b97\uff0c\u4f46\u662f\u5e94\u7528\u7a0b\u5e8f\u5bf9\u8fd9\u79cd\u8ba1\u7b97\u5e76\u65e0\u611f\u77e5\uff0c\u5b83\u8fd8\u662f\u50cf\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u4e00\u6837\u8fdb\u884c\u5f00\u53d1\uff0c\u4f8b\u5982\u5b83\u58f0\u660e\u9700\u8981\u8bbf\u95ee\u67d0\u4e2a\u6570\u636e\uff0c\u5982\u679c\u8fd9\u4e2a\u6570\u636e\u6ca1\u6709\u88ab\u6388\u6743\uff0c\u5b83\u6839\u672c\u5c31\u4e0d\u4f1a\u88ab\u8c03\u7528\u6267\u884c\uff1b\u5982\u679c\u6570\u636e\u88ab\u5408\u6cd5\u6388\u6743\uff0c\u5219\u5b83\u7684\u8ba1\u7b97\u8fc7\u7a0b\u8ddf\u4f20\u7edf\u7684\u8ba1\u7b97\u662f\u4e00\u6837\u7684\u3002\u6574\u4e2a\u6388\u6743\u7684\u884c\u4e3a\u5bf9\u5e94\u7528\u7a0b\u5e8f\u662f\u900f\u660e\u7684\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u6570\u636e\u53ca\u5176\u5b89\u5168\u7684\u62bd\u8c61\uff0c\u4f7f\u5f97\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u8fd8\u662f\u5229\u7528\u5b8c\u6574\u7684\u4f20\u7edf\u5e94\u7528\u5f00\u53d1\u6d41\u7a0b\uff0c\u4fdd\u8bc1\u5bf9\u5f00\u53d1\u8005\u6d41\u7a0b\u548c\u4e60\u60ef\u7684\u5f71\u54cd\u5e26\u6765\u65b0\u7684\u5b66\u4e60\u6210\u672c\u548c\u601d\u7ef4\u6a21\u5f0f\u8f6c\u53d8\u3002\u800c\u8fd9\u91cc\u7684\u865a\u62df\u673a\u5219\u4ec5\u6709\u5e73\u53f0\u8fdb\u884c\u5f00\u53d1\u5373\u53ef\u3002"),(0,a.kt)("p",null,"\u5bf9\u4e8e\u865a\u62df\u673a\u7684\u5b89\u5168\u90e8\u5206\uff0c\u4f20\u7edf\u7684\u4e00\u4e9b\u865a\u62df\u673a\u6280\u672f\u5982Java\u3001Web Assembly\u7b49\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u7684\u5b9e\u8df5\u53ef\u4ee5\u501f\u9274\u3002\u672c\u6587\u540e\u9762\u4e5f\u4f1a\u63d0\u51fa\u4e00\u4e9b\u65b0\u7684\u8c03\u6574\u601d\u8def\uff0c\u4ee5\u89e3\u51b3\u4e00\u4e9b\u65b0\u7684\u95ee\u9898\u548c\u65b0\u7684\u601d\u8003\u3002"),(0,a.kt)("h4",{id:"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027"},"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("p",null,"Reality World\u663e\u7136\u4e0d\u662f\u4e00\u4e2a\u533a\u5757\u94fe\u7684\u67b6\u6784\uff0c\u6bd4\u5982\u6211\u4eec\u6bcf\u4e2a\u5e94\u7528\u7684\u4e3b\u4f53\u903b\u8f91\u8ba1\u7b97\u4e3b\u8981\u8fd8\u662f\u5728\u5355\u673a\u4e0a\u8ba1\u7b97\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e00\u6837\uff0c\u4f46\u662f\u5b83\u4ece\u533a\u5757\u94fe\u80cc\u540e\u7684\u6280\u672f\u4f53\u7cfb\u4e2d\u63d0\u53d6\u4e2d\u4e86\u4e00\u79cd\u5f88\u6709\u4ef7\u503c\u7684\u601d\u60f3\u3002\u8fd9\u79cd\u601d\u60f3\u6765\u6e90\u4e8e\u533a\u5757\u94fe\u6838\u5fc3\u7684\u5171\u8bc6\u673a\u5236\uff0c\u5373\u5b83\u9700\u8981\u5728\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u7684\u6240\u6709\u865a\u62df\u673a\u4e0a\u6267\u884c\u76f8\u540c\u7684\u8ba1\u7b97\u6765\u8fbe\u6210\u5171\u8bc6\uff0c\u8fd9\u5c31\u8981\u6c42\u865a\u62df\u673a\u4e0a\u6bcf\u6b21\u8ba1\u7b97\u7684\u8f93\u5165\u6570\u636e\uff0c\u5373\u6267\u884c\u4ea4\u6613\u7684\u4e24\u4e2a\u7528\u6237\u7684\u8d26\u672c\u6570\u636e\uff0c\u9996\u5148\u5fc5\u987b\u5bf9\u6bcf\u4e2a\u865a\u62df\u673a\u662f\u516c\u5f00\u7684\uff0c\u8fd9\u6837\u5b83\u4eec\u624d\u80fd\u987a\u5229\u5730\u83b7\u53d6\u5230\u6570\u636e\uff0c\u4e5f\u5373\u662f\u53ef\u4ee5\u4e92\u64cd\u4f5c\u3002\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u667a\u6167\u548c\u5de7\u5999\u7684\u601d\u60f3\uff0c\u4efb\u4f55\u5c1d\u8bd5\u50cf\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u90a3\u6837\u628a\u6570\u636e\u653e\u5728\u4e00\u4e2a\u53d7\u4fdd\u62a4\u7684\u5730\u65b9\uff0c\u7136\u540e\u901a\u8fc7\u5b9a\u4e49API\u7b49\u7b49\u65b9\u5f0f\u63d0\u4f9b\u8bbf\u95ee\u90fd\u4f1a\u5e26\u6765\u5de8\u5927\u7684\u8f6f\u4ef6\u67b6\u6784\u4e0a\u7684\u590d\u6742\u6027\uff0c\u6bd4\u5982\u4f60\u7684\u7f16\u89e3\u7801\u65b9\u5f0f\u3001\u4f20\u8f93\u5185\u5bb9\u7684\u683c\u5f0f\u90fd\u9700\u8981\u4e24\u8fb9\u8fdb\u884c\u5f88\u591a\u914d\u5408\uff0c\u5e26\u6765\u5f88\u591a\u7684\u788e\u7247\u5316\u3002\u540c\u65f6\uff0c\u6570\u636e\u7684\u89e3\u7801\u4e00\u5b9a\u4e0d\u80fd\u5728\u5ba2\u6237\u5e94\u7528\u7a0b\u5e8f\u5185\u53d1\u751f\uff0c\u8fd9\u6837\u5ba2\u6237\u7a0b\u5e8f\u5c31\u59cb\u7ec8\u4f1a\u62ff\u5230\u6570\u636e\uff0c\u8fdb\u884c\u4e0d\u53ef\u80fd\u9884\u671f\u7684\u64cd\u4f5c\uff0c\u89e3\u7801\u64cd\u4f5c\u5fc5\u987b\u53d1\u751f\u5728\u5e73\u53f0\u3002\u5982\u679c\u89e3\u7801\u64cd\u4f5c\u53d1\u751f\u5728\u5e73\u53f0\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u8bbe\u7f6e\u590d\u6742\u7684\u6570\u636e\u4fdd\u62a4\u63aa\u65bd\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u7684\u5b58\u50a8\u4ee5\u53ca\u89e3\u7801\u7684\u8fc7\u7a0b\uff0c\u542f\u793a\u5c31\u53d1\u751f\u5728\u5e73\u53f0\u5185\u90e8\uff0c\u5bf9\u5ba2\u6237\u5e94\u7528\u7a0b\u5e8f\u662f\u4e0d\u53ef\u89c1\u7684\u3002"),(0,a.kt)("p",null,"\u6570\u636e\u53ef\u80fd\u4e0d\u91cd\u8981\uff0c\u6240\u6709\u6743\u624d\u662f\u6700\u91cd\u8981\u7684\uff0c\u8fd9\u662f\u533a\u5757\u94fe\u601d\u60f3\u5bf9\u4e8e\u4f20\u7edf\u5e94\u7528\u67b6\u6784\u7684\u4e0d\u540c\u89c6\u89d2\uff0c\u5b83\u5e26\u6765\u4e86\u65b0\u7684\u5e94\u7528\u5f62\u6001\u548c\u4f53\u9a8c\uff0c\u4e0e\u4e4b\u540c\u65f6\u4e5f\u5e26\u6765\u4e86\u65b0\u7684\u8f6f\u4ef6\u67b6\u6784\u601d\u60f3\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u533a\u5757\u94fe\u5e76\u6ca1\u6709\u5f88\u5f3a\u8c03\u4e92\u64cd\u4f5c\u6027\uff0c\u56e0\u4e3a\u5b83\u7684\u683c\u5f0f\u548c\u7cfb\u7edf\u8db3\u591f\u7b80\u5355\uff0c\u4f46\u6211\u4eec\u5c1d\u8bd5\u628a\u8fd9\u79cd\u601d\u60f3\u5f80\u901a\u7528\u8ba1\u7b97\u4e0a\u53bb\u601d\u8003\u7684\u65f6\u5019\uff0c\u5b83\u5c31\u4f1a\u6f14\u53d8\u6210\u4e92\u64cd\u4f5c\u6027\u7684\u6982\u5ff5\uff0c\u60f3\u60f3\u4f60\u5728\u533a\u5757\u94fe\u7684\u865a\u62df\u673a\u4e0a\u600e\u6837\u89e3\u6790\u7528\u6237\u7684\u53e6\u4e00\u4e2a\u975e\u8d26\u672c\u7684\u590d\u6742\u6570\u636e\u7ed3\u6784\uff1f"),(0,a.kt)("p",null,"\u8fd9\u79cd\u4ece\u4e92\u64cd\u4f5c\u6027\u7684\u89d2\u5ea6\u53bb\u601d\u8003\u533a\u5757\u94fe\uff0c\u4ee5\u53ca\u4ece\u4e2d\u5f97\u5230\u5bf9\u8f6f\u4ef6\u67b6\u6784\u7684\u542f\u793a\uff0c\u5b83\u4e3a\u672a\u6765\u7684\u6570\u5b57\u4e16\u754c\u8f6f\u4ef6\u67b6\u6784\u5e26\u6765\u4e86\u5168\u65b0\u7684\u4e16\u754c\u548c\u53ef\u80fd\u6027\u3002\u5b83\u751a\u81f3\u6253\u7834\u4e86\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u51e0\u5341\u5e74\u53d1\u5c55\u7684\u601d\u7ef4\uff0c\u672a\u6765\u7684\u6570\u5b57\u4e16\u754c\u4f1a\u56e0\u4e3a\u4e92\u64cd\u4f5c\u6027\u5448\u73b0\u5b8c\u5168\u4e0d\u80fd\u7684\u80fd\u529b\u548c\u5f62\u6001\u3002\u4ece\u540e\u9762\u7684\u5185\u5bb9\u4f1a\u65e0\u5904\u4e0d\u5728\u5730\u770b\u5230\u8fd9\u79cd\u4e92\u64cd\u4f5c\u6027\u5e26\u6765\u7684\u5404\u79cd\u65b0\u7684\u53ef\u80fd\u6027\u3002"),(0,a.kt)("p",null,"\u66f4\u91cd\u8981\u7684\u662f\uff0c\u6211\u8ba4\u4e3a\u8fd9\u662f\u672a\u6765\u5b9e\u73b0\u66f4\u52a0\u667a\u80fd\u6570\u5b57\u4e16\u754c\u7684\u57fa\u7840\uff0c\u5373\u6570\u5b57\u8fdb\u5316\u3002"),(0,a.kt)("h3",{id:"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784"},"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u8ba8\u8bba\u4e86\u5728\u4e00\u4e2a\u591a\u5e94\u7528\u7a0b\u5e8f\u73af\u5883\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u601d\u60f3\u548c\u673a\u5236\uff0c\u5373\u7cfb\u7edf\u67b6\u6784\u7684\u5916\u5728\u7ed3\u6784\u3002\u672c\u8282\u6211\u4eec\u5173\u6ce8\u7684\u5185\u5bb9\u662f\u7cfb\u7edf\u5185\u90e8\u903b\u8f91\u7684\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u5373\u5185\u5728\u7ed3\u6784\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u89c6\u89d2\uff0c\u8fd9\u4e24\u4e2a\u89c6\u89d2\u90fd\u6765\u6e90\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u5927\u89c4\u6a21\u590d\u6742\u7cfb\u7edf\u5185\u90e8\u7684\u4ea4\u4e92\u548c\u903b\u8f91\u7ec4\u7ec7\u95ee\u9898"),(0,a.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\u600e\u6837\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u6d8c\u73b0\u673a\u5236\u4ea7\u751f\u66f4\u52a0\u667a\u80fd\u7684\u6570\u5b57\u4e16\u754c")),(0,a.kt)("p",null,"\u8fd9\u4e24\u4e2a\u89c6\u89d2\u5c06\u4f1a\u8ba9\u6211\u4eec\u91cd\u65b0\u53bb\u5ba1\u89c6\u8fc7\u53bb\u51e0\u5341\u5e74\u6765\u5f62\u6210\u7684\u8f6f\u4ef6\u67b6\u6784\u53ca\u5176\u7f16\u7a0b\u6a21\u578b\u7684\u601d\u60f3\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u628a\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u7406\u8bba\u548c\u601d\u60f3\u5f15\u5165\u5230\u8f6f\u4ef6\u67b6\u6784\u4e2d\uff0c\u4ece\u800c\u5f62\u6210\u4e00\u5957\u5f00\u53d1\u5177\u6709\u590d\u6742\u4ea4\u4e92\u7684\u8f6f\u4ef6\u67b6\u6784\u65b9\u6cd5\u548c\u903b\u8f91\uff0c\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u79cd\u65b0\u7684\u89c6\u89d2\u53ef\u80fd\u6709\u52a9\u4e8e\u672a\u6765\u6211\u4eec\u5f00\u53d1\u51fa\u66f4\u667a\u80fd\u3001\u66f4\u4e30\u5bcc\u7684\u3001\u66f4\u590d\u6742\u7684\u6570\u5b57\u4e16\u754c\u4f53\u9a8c\u3002"),(0,a.kt)("h4",{id:"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2"},"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2"),(0,a.kt)("p",null,"\u4e0a\u4e00\u8282\u6211\u4eec\u5206\u6790\u4e86\uff0c\u73b0\u4ee3\u8f6f\u4ef6\u5f00\u53d1\u7684\u5176\u4e2d\u4e00\u4e2a\u57fa\u672c\u7684\u5047\u8bbe\u662f\u7a0b\u5e8f\u6240\u6709\u7684\u6570\u636e\u548c\u4ee3\u7801\u90fd\u662f\u53d7\u7a0b\u5e8f\u5f00\u53d1\u8005\u63a7\u5236\u7684\uff0c\u8fd9\u5e26\u6765\u4e86\u4e2d\u5fc3\u5316\u7684\u8f6f\u4ef6\u6cbb\u7406\u6a21\u5f0f\uff0c\u8fdb\u800c\u5f62\u6210\u4e2d\u5fc3\u5316\u7684\u6570\u5b57\u751f\u6001\u3002\u4e2d\u5fc3\u5316\u6709\u6548\u7387\u7684\u4f18\u52bf\uff0c\u53bb\u4e2d\u5fc3\u5316\u6709\u6570\u636e\u5b89\u5168\u7684\u4f18\u52bf\uff0c\u6211\u4eec\u5219\u4ece\u4e24\u8005\u4e2d\u505a\u51fa\u4e00\u4e9b\u67b6\u6784\u8c03\u6574\u5f62\u6210\u4e00\u5957\u96c6\u4e24\u79cd\u4f18\u52bf\u7684\u67b6\u6784\u3002"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u5c06\u5206\u6790\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u7684\u53e6\u4e00\u4e2a\u673a\u5236\u7684\u7f3a\u9677\u53ca\u5176\u5e26\u6765\u7684\u5f71\u54cd\u3002"),(0,a.kt)("p",null,"\u5728\u73b0\u4ee3\u7684\u7f16\u7a0b\u6a21\u578b\u4e2d\uff0c\u4e0d\u7ba1\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u5bf9\u786c\u4ef6\u7684\u62bd\u8c61\u5ea6\u5982\u4f55\uff0c\u6574\u4e2a\u7a0b\u5e8f\u6700\u540e\u8981\u88ab\u786c\u4ef6\u6267\u884c\uff0c\u90fd\u4f1a\u88ab\u7f16\u8bd1\u6216\u89e3\u91ca\u6210\u8fd9\u6837\u4e00\u4e2a\u673a\u5668\u7801\u6216\u5b57\u8282\u7801\u7684\u5b57\u7b26\u6307\u4ee4\u96c6\u5408\uff0c\u8fd9\u4e9b\u6307\u4ee4\u4e00\u822c\u7531\u64cd\u4f5c\u7b26\u548c\u64cd\u4f5c\u6570\u7ec4\u6210\uff0c\u64cd\u4f5c\u7b26\u662f\u5176\u8ba1\u7b97\u5e73\u53f0\u652f\u6301\u7684\u8ba1\u7b97\u7c7b\u578b\uff0c\u800c\u64cd\u4f5c\u6570\u5927\u90e8\u5206\u662f\u6d89\u53ca\u5230\u786c\u4ef6\u7684\u5730\u5740\u7684\uff0c\u4e00\u4e2a\u7a0b\u5e8f\u901a\u5e38\u5305\u542b\u4e09\u7c7b\u5730\u5740\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5bc4\u5b58\u5668"),(0,a.kt)("li",{parentName:"ul"},"\u5185\u5b58\u5730\u5740"),(0,a.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u673a\u5668\u7801\u4e2d\u7684\u4ee3\u7801\u5730\u5740")),(0,a.kt)("p",null,"\u8fd9\u5176\u4e2d\u5bc4\u5b58\u5668\u5730\u5740\u5927\u90e8\u5206\u662f\u7531\u7f16\u8bd1\u5668\u6765\u5206\u914d\u7684\uff0c\u800c\u5185\u5b58\u5730\u5740\u548c\u4ee3\u7801\u5730\u5740\u5219\u662f\u548c\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u4e00\u5b9a\u7684\u5173\u7cfb\u3002\u5176\u4e2d\u5185\u5b58\u5730\u5740\u901a\u5e38\u662f\u6211\u4eec\u7a0b\u5e8f\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u521b\u5efa\u7684\u6570\u636e\u5bf9\u8c61\u5728\u5185\u5b58\u4e2d\u7684\u5730\u5740\uff0c\u7136\u540e\u5176\u5b83\u4e00\u4e9b\u9700\u8981\u8bbf\u95ee\u8fd9\u4e2a\u5bf9\u8c61\u7684\u6307\u4ee4\u901a\u5e38\u5c31\u9700\u8981\u6307\u5411\u8fd9\u4e9b\u5bf9\u8c61\u7684\u5730\u5740\uff1b\u800c\u4ee3\u7801\u5730\u5740\u5219\u901a\u5e38\u8ddf\u65b9\u6cd5\u8c03\u7528\u6709\u5173\uff0c\u6211\u4eec\u7f16\u5199\u7684\u4ee3\u7801\u6700\u540e\u4f1a\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u673a\u5668\u7801\u683c\u5f0f\u7684\u6570\u636e\u8868\u8ff0\uff0c\u7a0b\u5e8f\u8fd0\u884c\u542f\u52a8\u65f6\u5219\u4f1a\u9996\u5148\u5c06\u8fd9\u4e9b\u4ee3\u7801\u6570\u636e\u52a0\u8f7d\u5230\u4e00\u7247\u56fa\u5b9a\u7684\u5185\u5b58\u5730\u5740\uff0c\u540e\u7eed\u6240\u6709\u4ee3\u7801\u7684\u6267\u884c\u5b9e\u9645\u4e0a\u90fd\u662f\u9700\u8981\u9996\u5148\u4ece\u8fd9\u91cc\u83b7\u53d6\u4ee3\u7801\u6307\u4ee4\u7684\u6570\u636e\uff0c\u7136\u540e\u6839\u636e\u6307\u4ee4\u7684\u5b9a\u4e49\u6267\u884c\u8ba1\u7b97\uff0c\u7136\u800c\u5b9e\u9645\u4ee3\u7801\u7684\u6267\u884c\u5e76\u4e0d\u662f\u5b8c\u5168\u6309\u987a\u5e8f\u6267\u884c\u7684\uff0c\u6211\u4eec\u7684\u903b\u8f91\u4e2d\u5145\u6ee1\u5f88\u591a\u63a7\u5236\u6d41\uff0c\u4f8b\u5982\u4e00\u4e2a\u51fd\u6570\u9700\u8981\u8c03\u7528\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u8fd9\u4e2a\u65f6\u5019\u5c31\u9700\u8981\u9996\u5148\u5c06\u6307\u4ee4\u7684\u6307\u9488\u6307\u5411\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u5730\u5740\uff0c\u5e76\u5728\u6307\u5411\u5b8c\u6bd5\u4e4b\u540e\u8df3\u8f6c\u56de\u539f\u6765\u7684\u4f4d\u7f6e\u3002\u6240\u4ee5\u6211\u4eec\u7684\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u8fd8\u9700\u8981\u6839\u636e\u903b\u8f91\u63a7\u5236\u6d41\u5c06\u8fd9\u79cd\u4ee3\u7801\u5730\u5740\u7f16\u7801\u5728\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u4e2d\u3002\u6211\u4eec\u5c06\u5728\u540e\u7eed\u7684\u6280\u672f\u67b6\u6784\u90e8\u5206\u66f4\u8be6\u7ec6\u7684\u8ba8\u8bba\u8fd9\u4e2a\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u4e0a\u8ff0\u7684\u8fc7\u7a0b\u4e00\u822c\u4e3b\u8981\u662f\u7531\u7f16\u8bd1\u5668\u3001\u94fe\u63a5\u5668\u548c\u52a0\u8f7d\u5668\u6765\u534f\u540c\u5b8c\u6210\uff0c\u4f46\u662f\u4ece\u672c\u8d28\u4e0a\u6765\u8bf4\uff0c\u4e00\u53e5\u4ee3\u7801\u8981\u8bbf\u95ee\u90a3\u4e2a\u5bf9\u8c61\u7684\u5185\u5b58\u5730\u5740\uff0c\u4ee5\u53ca\u4e0b\u4e00\u4e2a\u8bed\u53e5\u8981\u8df3\u8f6c\u5230\u54ea\u4e00\u6761\u8bed\u53e5\uff0c\u8fd9\u5176\u5b9e\u662f\u5e94\u7528\u7684\u903b\u8f91\u89c4\u5219\uff0c\u56e0\u6b64\u8fd9\u4e9b\u903b\u8f91\u5b9a\u4e49\u662f\u7531\u7a0b\u5e8f\u5458\u6765\u5b9a\u4e49\u7684\uff0c\u7f16\u8bd1\u5668\u53ea\u4e0d\u8fc7\u662f\u6839\u636e\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u63cf\u8ff0\uff0c\u5c06\u8fd9\u79cd\u7a0b\u5e8f\u5458\u5728\u7f16\u7a0b\u8bed\u8a00\u7ea7\u522b\u7684\u5b9a\u4e49\uff0c\u8f6c\u5316\u4e3a\u673a\u5668\u7ea7\u522b\u7684\u5b9a\u4e49\u3002"),(0,a.kt)("p",null,"\u6309\u7167\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u65b9\u6cd5\u5b9e\u8df5\uff0c\u8fd9\u91cc\u5c31\u4f1a\u51fa\u73b0\u4e24\u79cd\u95ee\u9898\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e00\u65e6\u67d0\u53e5\u4ee3\u7801\u8bbf\u95ee\u6307\u5411\u4e86\u67d0\u4e2a\u5bf9\u8c61\u5730\u5740\uff0c\u8fd9\u4e2a\u884c\u4e3a\u5c31\u4e0d\u5bb9\u6613\u4fee\u6539"),(0,a.kt)("li",{parentName:"ul"},"\u4e00\u65e6\u67d0\u4e2a\u8df3\u8f6c\u8bed\u53e5\u6307\u5411\u4e86\u67d0\u4e2a\u51fd\u6570\u7684\u5730\u5740\uff0c\u8fd9\u4e2a\u903b\u8f91\u6d41\u7a0b\u5c31\u4e0d\u5bb9\u6613\u8c03\u6574")),(0,a.kt)("p",null,"\u5c3d\u7ba1\u6211\u4eec\u6709\u5f88\u591a\u8f6f\u4ef6\u67b6\u6784\u5b9e\u8df5\u6765\u90e8\u5206\u7f13\u89e3\u4e0a\u8ff0\u4e24\u79cd\u60c5\u51b5\u5e26\u6765\u7684\u95ee\u9898\uff0c\u4f46\u901a\u5e38\u90fd\u6ca1\u6709\u7406\u60f3\u7684\u65b9\u6848\u3002\u8fd9\u9020\u6210\u7684\u4e00\u4e2a\u4e3b\u8981\u7ed3\u679c\u5c31\u662f\uff0c\u6211\u4eec\u7684\u7a0b\u5e8f\u4e00\u65e6\u5f00\u53d1\u7f16\u8bd1\u5b8c\u6210\uff0c\u5176\u884c\u4e3a\u5c31\u4e0d\u5bb9\u6613\u52a8\u6001\u8c03\u6574\u6216\u4fee\u6539\uff0c\u4e00\u65e6\u8fdb\u884c\u4fee\u6539\uff0c\u5219\u9700\u8981\u91cd\u65b0\u8fdb\u884c\u7f16\u8bd1\u53d1\u5e03\uff0c\u5e76\u8981\u6c42\u7528\u6237\u91cd\u65b0\u66f4\u65b0\u6574\u4e2a\u7a0b\u5e8f\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u6280\u672f\u5c42\u9762\u7684\u56e0\u7d20\u53cd\u6620\u5230\u7528\u6237\u4f53\u9a8c\u6216\u8005\u8f6f\u4ef6\u5f62\u6001\u5c42\u9762\uff0c\u5c31\u662f\u5f53\u524d\u7684\u8f6f\u4ef6\u5f62\u6001\u5927\u90e8\u5206\u90fd\u662f\u4e00\u79cd\u56fa\u5b9a\u7684\u5f62\u6001\uff0c\u6bcf\u4e2a\u8f6f\u4ef6\u7684\u529f\u80fd\u548c\u7ed3\u6784\u57fa\u672c\u4e0a\u90fd\u662f\u56fa\u5b9a\u7684\u3002\u4e0e\u8f6f\u4ef6\u7684\u6570\u636e\u548c\u4ee3\u7801\u8026\u5408\u5728\u4e00\u8d77\u5bfc\u81f4\u8f6f\u4ef6\u5931\u53bb\u4e92\u64cd\u4f5c\u6027\u7c7b\u4f3c\uff0c\u8f6f\u4ef6\u4e2d\u6570\u636e\u7684\u5730\u5740\u4e0e\u8f6f\u4ef6\u7ed3\u6784\u7684\u8026\u5408\u4f7f\u8f6f\u4ef6\u5931\u53bb\u4e86\u52a8\u6001\u6027\u3002\u5173\u4e8e\u8f6f\u4ef6\u7684\u52a8\u6001\u6027\u6709\u4e24\u4e2a\u65b9\u9762\u7684\u610f\u4e49\uff0c\u4e0b\u4e00\u8282\u6211\u4eec\u56de\u8ba8\u8bba\u52a8\u6001\u6027\u5bf9\u4e8e\u667a\u80fd\u8fdb\u5316\u7684\u610f\u4e49\uff0c\u672c\u8282\u6211\u4eec\u5148\u8ba8\u8bba\u52a8\u6001\u6027\u5bf9\u4e8e\u8f6f\u4ef6\u903b\u8f91\u6784\u9020\u7684\u610f\u4e49\u3002"),(0,a.kt)("h5",{id:"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784"},"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784"),(0,a.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u8f6f\u4ef6\u7684\u4e1a\u52a1\u903b\u8f91\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u4e14\u7b80\u5355\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u6a21\u5f0f\u662f\u53ef\u4ee5\u5f88\u597d\u5730\u5de5\u4f5c\u7684\uff0c\u6bd4\u5982\u770b\u770b\u6211\u4eec\u73b0\u5728\u624b\u673a\u4e0a\u5927\u90e8\u5206\u5e94\u7528\uff0c\u6bcf\u4e2a\u5e94\u7528\u5185\u90e8\u7684\u529f\u80fd\u76f8\u5bf9\u8fd8\u662f\u6bd4\u8f83\u7b80\u5355\u7684\uff0c\u5c3d\u7ba1\u6709\u6bd4\u5982\u9ad8\u5e76\u53d1\u7b49\u7c7b\u7684\u8f6f\u4ef6\u67b6\u6784\u95ee\u9898\uff0c\u4f46\u8fd9\u7c7b\u95ee\u9898\u8ddf\u590d\u6742\u5ea6\u672c\u8eab\u6ca1\u6709\u592a\u5927\u5173\u7cfb\uff0c\u66f4\u591a\u662f\u6280\u672f\u67b6\u6784\u7684\u95ee\u9898\u3002\u8fd9\u7c7b\u5e94\u7528\u7684\u7279\u5f81\u662f\u5176\u4e1a\u52a1\u903b\u8f91\u7684\u590d\u6742\u5ea6\u57fa\u672c\u5728\u4eba\u8111\u80fd\u591f\u7406\u89e3\u7684\u590d\u6742\u5ea6\u8303\u56f4\u4e4b\u7c7b\uff0c\u5185\u90e8\u5f00\u53d1\u4eba\u5458\u901a\u5e38\u4e0d\u9700\u8981\u592a\u590d\u6742\u7684\u63a8\u7406\u548c\u601d\u8003\u5c31\u80fd\u591f\u7406\u89e3\u8f6f\u4ef6\u5185\u90e8\u4e1a\u52a1\u7684\u6d41\u7a0b\u3001\u903b\u8f91\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u770b\u53e6\u4e00\u4e2a\u7c7b\u578b\u7684\u5e94\u7528\uff1a\u5373\u6e38\u620f\uff0c\u5219\u4e0d\u4e00\u6837\u3002\u6211\u4eec\u5728\u540e\u9762\u8fd8\u4f1a\u5206\u6790\u5f88\u591a\u6e38\u620f\u67b6\u6784\u7684\u7279\u5f81\uff0c\u4f46\u662f\u8fd9\u91cc\u5148\u91cd\u70b9\u5173\u6ce8\u5176\u4e2d\u4e00\u4e2a\u7279\u5f81\uff0c\u5373\u5b83\u7684\u4e1a\u52a1\u903b\u8f91\u7684\u590d\u6742\u5ea6\u3002\u603b\u4f53\u4e0a\u5b83\u7684\u590d\u6742\u5ea6\u76f8\u8f83\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u6709\u4e24\u4e2a\u7279\u70b9\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5b83\u7531\u975e\u5e38\u591a\u7684\u903b\u8f91\u5173\u7cfb\u6ca1\u6709\u90a3\u4e48\u6e05\u6670\u7684\u5b50\u7cfb\u7edf\u7ec4\u6210"),(0,a.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u5448\u73b0\u9ad8\u5ea6\u7684\u52a8\u6001\u6027\u548c\u5c40\u90e8\u6027")),(0,a.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u51e0\u4e4e\u5f88\u96be\u50cf\u4f20\u7edf\u7684\u8f6f\u4ef6\u90a3\u6837\u8fdb\u884c\u7f16\u7a0b\uff0c\u5b83\u6ca1\u6709\u6bd4\u8f83\u660e\u786e\u56fa\u5b9a\u7684\u903b\u8f91\u8bf4\u4ec0\u4e48\u6d41\u7a0b\u4e4b\u540e\u5c31\u4f1a\u6267\u884c\u53e6\u5916\u4e00\u4e2a\u6d41\u7a0b\uff0c\u5b83\u66f4\u591a\u662f\u6839\u636e\u5f88\u591a\u6765\u6e90\u4e0d\u540c\u7684\u6761\u4ef6\u6765\u51b3\u5b9a\u6267\u884c\u4ec0\u4e48\u6d41\u7a0b\uff1b\u5b83\u4e5f\u4e0d\u80fd\u5c06\u6307\u9488\u6307\u5411\u67d0\u4e9b\u56fa\u5b9a\u7684\u5185\u5b58\u5730\u5740\uff0c\u5b83\u6709\u5f88\u591a\u4e0d\u540c\u4e0d\u540c\u7684\u5bf9\u8c61\u5b9e\u4f8b\u9700\u8981\u6267\u884c\u76f8\u540c\u7684\u903b\u8f91\u3002\u603b\u4e4b\u8fd9\u79cd\u8f6f\u4ef6\u7684\u590d\u6742\u5ea6\u662f\u975e\u5e38\u9ad8\u7684\uff0c\u6211\u4eec\u901a\u5e38\u65e0\u6cd5\u5f88\u76f4\u89c2\u5730\u7528\u5927\u8111\u53bb\u601d\u8003\u5b83\u5185\u90e8\u7684\u4ea4\u4e92\u903b\u8f91\u3002"),(0,a.kt)("p",null,"\u5177\u6709\u8fd9\u6837\u7279\u5f81\u7684\u7cfb\u7edf\u901a\u5e38\u79f0\u4e3a\u590d\u6742\u7cfb\u7edf\uff0c\u5b9e\u9645\u4e0a\u5173\u4e8e\u6e38\u620f\u8bbe\u8ba1\u7684\u7406\u8bba\uff0c\u5927\u90e8\u5206\u90fd\u662f\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u601d\u7ef4\u6765\u601d\u8003\u7684\u3002\u524d\u9762\u6211\u4eec\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u590d\u6742\u7cfb\u7edf\u76f8\u5173\u7684\u57fa\u672c\u6982\u5ff5\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u53bb\u7406\u89e3\u5b83\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5185\u5728\u7ed3\u6784\uff0c\u5185\u5728\u7ed3\u6784\u901a\u5e38\u4fa7\u91cd\u5728\u63cf\u8ff0\u6784\u5efa\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u7684\u67b6\u6784\u601d\u7ef4\uff0c\u6bd4\u5982\u5b83\u4eec\u7684\u5b50\u7cfb\u7edf\u7684\u4ea4\u4e92\u673a\u5236\u662f\u600e\u6837\uff0c\u6574\u4e2a\u7cfb\u7edf\u662f\u600e\u4e48\u7ec4\u7ec7\u7684\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u5916\u5728\u7279\u5f81\uff0c\u5916\u5728\u7279\u5f81\u66f4\u5173\u6ce8\u7684\u662f\u89c2\u5bdf\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u4f1a\u5448\u73b0\u51fa\u4ec0\u4e48\u7279\u5f81\uff0c\u8fd9\u65b9\u9762\u901a\u5e38\u662f\u8bbe\u8ba1\u590d\u6742\u7cfb\u7edf\u7684\u7406\u8bba\uff0c\u56e0\u4e3a\u4e00\u822c\u7684\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u66f4\u504f\u91cd\u5bfb\u627e\u590d\u6742\u7cfb\u7edf\u7684\u539f\u7406\u800c\u4e0d\u662f\u5173\u6ce8\u5b83\u5185\u90e8\u7684\u7ed3\u6784\u3002")),(0,a.kt)("p",null,"\u6211\u4eec\u4e5f\u4ece\u8fd9\u4e24\u4e2a\u65b9\u9762\u6765\u601d\u8003\u8f6f\u4ef6\u67b6\u6784\uff0c\u9996\u5148\u8ba8\u8bba\u5b83\u7684\u5185\u5728\u7ed3\u6784\uff0c\u540e\u9762\u518d\u8ba8\u8bba\u5b83\u7684\u5916\u5728\u7279\u5f81\u3002"),(0,a.kt)("h5",{id:"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784"},"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784"),(0,a.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u7a0b\u5e8f\u903b\u8f91\u4e2d\u7684\u52a8\u6001\u6027\u7684\u95ee\u9898\uff0c\u4e00\u822c\u7684\u6e38\u620f\u5e94\u7528\u67b6\u6784\u90fd\u9009\u62e9\u4f7f\u7528\u975e\u5e38\u4e0d\u540c\u4e8e\u4f20\u7edf\u8f6f\u4ef6\u5f00\u53d1\u7684\u67b6\u6784\uff0c\u8fd9\u4e9b\u67b6\u6784\u5927\u90e8\u5206\u90fd\u6d89\u53ca\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u7ec4\u5408\u6765\u4ee3\u66ff\u7ee7\u627f\u3002\u8fd9\u5176\u4e2d\u4e0d\u5149\u662f\u7531\u4e8e\u7ee7\u627f\u5e26\u6765\u7684\u903b\u8f91\u8868\u8fbe\u7684\u590d\u6742\u6027\uff0c\u4f7f\u7528\u7ec4\u5408\u8fd8\u53ef\u4ee5\u66f4\u7075\u6d3b\u5730\u8c03\u6574\u7a0b\u5e8f\u7684\u7ed3\u6784\u548c\u529f\u80fd\u3002"),(0,a.kt)("p",null,"\u6700\u7b80\u5355\u7684\u7ec4\u5408\u673a\u5236\u5982\u4e0b\u56fe\uff08a\uff09\u6240\u793a\uff0c\u5bf9\u8c61A\u5e76\u4e0d\u662f\u7531\u67d0\u4e2a\u5177\u4f53\u7684\u7c7b\u901a\u8fc7\u7ee7\u627f\u7b49\u65b9\u5f0f\u6765\u7ee7\u627f\uff0c\u800c\u662f\u901a\u8fc7\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u7ec4\u7ec7\u5728\u4e00\u8d77\u901a\u8fc7\u7ec4\u5408\u7684\u5f62\u5f0f\u6765\u6784\u5efa\u3002\u8fd9\u79cd\u7ec4\u5408\u65b9\u5f0f\u901a\u5e38\u4e0d\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\uff0c\u800c\u662f\u4f7f\u7528\u7c7b\u4f3c\u4e00\u4e2a\u914d\u7f6e\u8868\u683c\u6765\u8bb0\u5f55\u8fd9\u79cd\u7ec4\u5408\u5173\u7cfb\uff0c\u7136\u540e\u7a0b\u5e8f\u8fd0\u884c\u7684\u65f6\u5019\u6839\u636e\u8fd9\u4e2a\u914d\u7f6e\u5206\u914d\u76f8\u5e94\u7684\u7ec4\u4ef6\u5bf9\u8c61\u5730\u5740\uff0c\u5e76\u5728\u7ec4\u5408\u7684\u5bf9\u8c61\u4e2d\u4ee5\u67d0\u79cd\u5f62\u5f0f\u8bb0\u5f55\u8fd9\u4e9b\u5730\u5740\uff0c\u4ee5\u65b9\u4fbf\u53ef\u4ee5\u5feb\u901f\u5730\u8bbf\u95ee\u8fd9\u4e9b\u7ec4\u4ef6\u5bf9\u8c61\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(4187).Z,width:"833",height:"248"})),(0,a.kt)("p",null,"\u7ec4\u4ef6\u5bf9\u8c61\u672c\u8eab\u7684\u5b9a\u4e49\u6ca1\u6709\u592a\u591a\u9650\u5b9a\uff0c\u4e00\u822c\u7b80\u5355\u7684\u65b9\u5f0f\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5305\u62ec\u81ea\u5df1\u7684\u5c5e\u6027\u3001\u72b6\u6001\u548c\u4ee3\u7801\uff0c\u53e6\u5916\u4e00\u4e9b\u66f4\u597d\u7684\u67b6\u6784\u6bd4\u5982ECS\u5219\u662f\u5c06\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5206\u5f00\uff0c\u8fd9\u6837\u65b9\u4fbf\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6570\u636e\u4e92\u64cd\u4f5c\u3002\u4f46\u4e0d\u7ba1\u600e\u6837\uff0c\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u662f\u9700\u8981\u901a\u4fe1\u7684\uff0c\u5bf9\u8c61\u548c\u5bf9\u8c61\u4e4b\u95f4\u7684\u67d0\u4e9b\u7ec4\u4ef6\u6216\u8005\u5c5e\u6027\u4e4b\u95f4\u4e5f\u662f\u9700\u8981\u901a\u4fe1\u7684\u3002\u5982\u4e0a\u56fe\uff08b\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,"\u4e00\u822c\u7b80\u5355\u5e38\u7528\u7684\u65b9\u6cd5\u5c31\u662f\u8bbe\u7f6e\u53ef\u4ee5\u80fd\u591f\u88ab\u5168\u90e8\u5bf9\u8c61\u8bbf\u95ee\u7684Manager\u7c7b\uff0c\u8fd9\u4e2a\u7c7b\u80fd\u591f\u6839\u636e\u7c7b\u578b\u6216\u8005\u540d\u5b57\u67e5\u8be2\u5230\u5176\u5b83\u7ec4\u4ef6\u6216\u8005\u5bf9\u8c61\u7684\u5b9e\u4f8b\u53d8\u91cf\uff0c\u4f8b\u5982\u4f2a\u4ee3\u7801\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c++"},'manager.getChild("A");\nmanager.getComponent<Attack>();\n')),(0,a.kt)("p",null,"\u8fd9\u6837\u7684\u65b9\u5f0f\u5f88\u7075\u6d3b\uff0c\u5b83\u907f\u514d\u5728\u6211\u4eec\u7684\u4ee3\u7801\u4e2d\u5230\u5904\u53bb\u5bfb\u627e\u6bcf\u4e2a\u5bf9\u8c61\u6216\u7ec4\u4ef6\u5b9e\u4f8b\u7684\u4f4d\u7f6e\u548c\u5730\u5740\uff0c\u7b80\u5316\u4e3a\u901a\u8fc7\u5bf9\u8c61\u540d\u79f0\u6216\u8005\u7c7b\u578b\u4fe1\u606f\u6765\u83b7\u53d6\u5bf9\u8c61\u3002\u4f46\u662f\u5b83\u7684\u7f3a\u70b9\u662f\u6211\u4eec\u66b4\u9732\u4e86\u4e00\u4e2a\u6743\u9650\u5f88\u9ad8\u7684\u8bbf\u95ee\u5165\u53e3\u7ed9\u6bcf\u4e2a\u5bf9\u8c61\u6216\u7ec4\u4ef6\uff0c\u5c3d\u7ba1\u5bf9\u4e8e\u6e38\u620f\u5f00\u53d1\u5546\u5185\u90e8\u6765\u8bb2\u8fd9\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u5e0c\u671b\u6e38\u620f\u7a0b\u5e8f\u80fd\u591f\u63d0\u4f9b\u7ed9\u73a9\u5bb6\u4e00\u4e9b\u81ea\u5b9a\u4e49\u7684\u9009\u9879\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u73a9\u5bb6\u53ef\u4ee5\u81ea\u884c\u5411\u7a0b\u5e8f\u6ce8\u5165\u4e00\u4e9b\u52a8\u6001\u7684\u811a\u672c\u7a0b\u5e8f\u6765\u5b9e\u73b0\u4e0d\u540c\u7684\u73a9\u6cd5\u548c\u76ee\u7684\uff0c\u8fd9\u79cd\u67b6\u6784\u5374\u662f\u4e0d\u53ef\u884c\u7684\uff0c\u800c\u8fd9\u4e5f\u662f\u5143\u5b87\u5b99\u6240\u63cf\u8ff0\u7684\u4e16\u754c\u5c1d\u8bd5\u6784\u5efa\u7684\u67b6\u6784\u3002"),(0,a.kt)("h5",{id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236"},"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236"),(0,a.kt)("p",null,"\u6784\u5efa\u5f00\u653e\u7684\u7a0b\u5e8f\u67b6\u6784\u4e0d\u5149\u6d89\u53ca\u5bf9\u5176\u5b83\u8d44\u6e90\u7684\u8bbf\u95ee\u6743\u9650\u63a7\u5236\u95ee\u9898\uff0c\u8fd8\u6d89\u53ca\u5230\u53bb\u4e2d\u5fc3\u5316\u7684\u5b50\u7a0b\u5e8f\u4ea4\u4e92\u63a7\u5236\u95ee\u9898\u3002"),(0,a.kt)("p",null,"\u8fd9\u662f\u4ec0\u4e48\u610f\u601d\uff0c\u7531\u4e8e\u7cfb\u7edf\u7684\u529f\u80fd\u548c\u72b6\u6001\u90fd\u662f\u5b8c\u5168\u52a8\u6001\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u65e0\u6cd5\u9884\u6d4b\u4e00\u4e2a\u7ec4\u4ef6\u6267\u884c\u65f6\u5b83\u9700\u8981\u7684\u6761\u4ef6\u662f\u5426\u5b8c\u5168\u6ee1\u8db3\uff0c\u5728\u4e0a\u8ff0\u4f2a\u4ee3\u7801\u793a\u4f8b\u4e2d\uff0c\u7ec4\u4ef6\u83b7\u53d6\u5230\u7684\u5bf9\u8c61\u53ef\u80fd\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u5f53\u7136\u6211\u4eec\u53ef\u4ee5\u5728\u6bcf\u4e2a\u7ec4\u4ef6\u5185\u90e8\u505a\u662f\u5426\u4e3a\u7a7a\u7684\u5224\u65ad\uff0c\u4f46\u662f\u6211\u4eec\u6709\u6ca1\u6709\u4e00\u4e9b\u66f4\u597d\u7684\u67b6\u6784\u65b9\u6cd5\u5462\uff1f"),(0,a.kt)("p",null,"\u8fd1\u51e0\u5e74\u6539\u8fdb\u51fa\u6765\u7684ECS\u67b6\u6784\u53ef\u4ee5\u627e\u5230\u4e00\u4e9b\u542f\u793a\u3002\u5728\u4f8b\u5982",(0,a.kt)("a",{parentName:"p",href:"https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/index.html"},"Unity DOTS"),"\u6216",(0,a.kt)("a",{parentName:"p",href:"https://bevyengine.org/learn/book/getting-started/ecs/"},"Bevy ECS"),"\u67b6\u6784\u4e2d\uff0c\u5728\u8fd9\u4e9bECS\u67b6\u6784\uff0c\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u88ab\u5206\u79bb\u5f00\u6765\uff0c\u5206\u522b\u5bf9\u5e94Component\u548cSystem\uff0c\u6bcf\u4e2aSystem\u5bf9\u6570\u636e\u7684\u4f7f\u7528\uff0c\u7531\u4e0a\u9762\u90a3\u79cd\u81ea\u5df1\u9700\u8981\u901a\u8fc7\u5168\u5c40\u5171\u4eab\u7684manager\u53d8\u91cf\u53bb\u67e5\u8be2\u83b7\u53d6\uff0c\u6539\u53d8\u4e3a\u901a\u8fc7\u4e00\u4e2aquery\u53c2\u6570\u6765\u58f0\u660e\u5bf9\u6570\u636e\u7684\u9700\u6c42\uff0c\u4f8b\u5982\u5982\u4e0b\u7684System\u58f0\u660e\u5b83\u9700\u8981\u4f7f\u7528Transform\u6570\u636e\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},'fn print_position_system(query: Query<&Transform>) {\n for transform in &query {\n println!("position: {:?}", transform.translation);\n }\n}\n')),(0,a.kt)("p",null,"\u8fd9\u79cdQuery\u5f62\u5f0f\u7684\u58f0\u660e\uff0c\u501f\u52a9Rust\u7f16\u8bd1\u5668\u5bf9\u5b8f\u7684\u4e00\u4e9b\u5f3a\u5927\u652f\u6301\uff0c\u4f7f\u5f97\u6211\u4eec\u4e0d\u9700\u8981\u5199\u4e00\u4e9b\u989d\u5916\u7684\u67e5\u8be2\u8bed\u53e5\uff0c\u57fa\u4e8e\u7c7b\u578b\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6b63\u786e\u7684\u5bf9\u8c61\u53d8\u91cf\uff0c\u8fd9\u79cd\u65b9\u5f0f\u751a\u81f3\u6bd4\u51fd\u6570\u8c03\u7528\u8fd8\u8981\u7b80\u5355\uff1a\u90fd\u4e0d\u9700\u8981\u6211\u4eec\u624b\u52a8\u4f20\u9012\u51fd\u6570\u53c2\u6570\uff0c\u53ea\u9700\u8981\u58f0\u660e\u7c7b\u578b\u5c31\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u88ab\u81ea\u52a8\u8d4b\u4e88\u6b63\u786e\u7684\u51fd\u6570\u53d8\u91cf\u3002\u5f53\u7136Unity\u4f7f\u7528\u7684C#\u8bed\u8a00\u7f16\u8bd1\u5668\u7684\u673a\u5236\u6ca1\u6709\u90a3\u4e48\u5f3a\u5927\uff0c\u4f46\u5bf9\u5e94\u7684\u601d\u8def\u662f\u5dee\u4e0d\u591a\u7684\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u673a\u5236\u5e26\u6765\u7684\u610f\u4e49\u662f\u975e\u5e38\u6df1\u8fdc\u7684\uff0c\u5b83\u4e0d\u5149\u7b80\u5316\u4e86\u4f20\u7edf\u7f16\u7a0b\u5f00\u53d1\u4e2d\uff0c\u4e00\u4e2a\u903b\u8f91\u5728\u6267\u884c\u65f6\u9700\u8981\u6536\u96c6\u5927\u91cf",(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/26387327/answer/3158798538"},"\u590d\u6742\u4e0a\u4e0b\u6587"),"\u6570\u636e\u7684\u6d41\u7a0b\uff0c\u66f4\u6df1\u8fdc\u7684\u610f\u4e49\u5728\u4e8e\uff0c\u901a\u8fc7\u5206\u79bb\u6570\u636e\u7684\u58f0\u660e\u548c\u6570\u636e\u7684\u5b9e\u9645\u83b7\u53d6\u7684\u8fc7\u7a0b\uff0c\u5c06\u6570\u636e\u7684\u83b7\u53d6\u8fc7\u7a0b\u8f6c\u4ea4\u7ed9\u7cfb\u7edf\uff0c\u4f7f\u5f97\u7cfb\u7edf\u6709\u673a\u4f1a\u53bb\u63a7\u5236\u7ec4\u4ef6\u5bf9\u6570\u636e\u83b7\u53d6\u7684\u5b89\u5168\u63a7\u5236\uff0c\u540c\u65f6\u53c8\u4e0d\u4f1a\u7ed9\u5ba2\u6237\u7a0b\u5e8f\u7684\u5f00\u53d1\u5e26\u6765\u590d\u6742\u5ea6\uff0c\u751a\u81f3\u8fd8\u5927\u5927\u7b80\u5316\u4e86\u3002"),(0,a.kt)("p",null,"\u7ed3\u5408\u6211\u4eec\u524d\u9762\u7684\u533a\u5757\u94fe\u7684\u601d\u8def\uff0c\u7531\u4e8e\u6211\u4eec\u7684\u6570\u636e\u7684\u83b7\u53d6\u662f\u6ca1\u6709\u505a\u4fdd\u62a4\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u8fd9\u4e2a\u6570\u636e\u83b7\u53d6\u5230\u7ec4\u4ef6\u7684\u4f7f\u7528\u4e4b\u95f4\uff0c\u865a\u62df\u673a\u4f1a\u6839\u636e\u7ec4\u4ef6\u7684\u7c7b\u578b\u58f0\u660e\u6267\u884c\u5b89\u5168\u68c0\u67e5\uff0c\u6b64\u65f6\u6211\u4eec\u77e5\u9053\u7ec4\u4ef6\u58f0\u660e\u7684\u7c7b\u578b\uff0c\u8fd9\u4e2a\u7c7b\u578b\u662f\u865a\u62df\u673a\u53ef\u4ee5\u89e3\u6790\u7684\uff0c\u6211\u4eec\u4e5f\u5df2\u77e5\u9053\u7528\u6237\u5bf9\u4e8e\u8be5\u7ec4\u4ef6\u5bf9\u4e8e\u8be5\u6570\u636e\u7684\u6388\u6743\u60c5\u51b5\uff0c\u6211\u4eec\u5b8c\u5168\u5c31\u53ef\u4ee5\u5728\u865a\u62df\u673a\u5c42\u9762\u975e\u5e38\u7b80\u5355\u5730\u505a\u51fa\u5b89\u5168\u5224\u5b9a\uff0c\u5982\u679c\u6211\u4eec\u8fd8\u80fd\u591f\u6839\u636e\u5224\u5b9a\u7ed3\u679c\u6765\u6267\u884c\u51fd\u6570\u529f\u80fd\uff0c\u90a3\u4e48\u975e\u6cd5\u7684\u7ec4\u4ef6\u5b8c\u5168\u5c31\u6ca1\u6709\u53ef\u80fd\u88ab\u6267\u884c\uff0c\u5373\u4f7f\u5b83\u770b\u8d77\u6765\u53ef\u4ee5\u58f0\u660e\u83b7\u53d6\u7528\u6237\u7684\u4efb\u610f\u6570\u636e\uff0c\u6240\u6709\u7684\u6570\u636e\u6240\u6709\u6743\u90fd\u5728\u7528\u6237\u7684\u7cbe\u786e\u63a7\u5236\u4e4b\u4e0b\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u673a\u5236\u4e5f\u4e3a\u6211\u4eec\u5e26\u6765\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236\u4fbf\u5229\u3002\u7531\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u5b50\u7cfb\u7edf\u975e\u5e38\u591a\uff0c\u4e14\u6574\u4e2a\u7cfb\u7edf\u662f\u9ad8\u5ea6\u52a8\u6001\u7684\uff1a\u968f\u65f6\u53ef\u4ee5\u6709\u4efb\u610f\u7684\u5b50\u7cfb\u7edf\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u88ab\u505c\u6b62\u6267\u884c\uff0c\u4e5f\u968f\u65f6\u53ef\u80fd\u65b0\u589e\u67d0\u4e9b\u65b0\u529f\u80fd\u7684\u5b50\u7cfb\u7edf\uff0c\u6240\u4ee5\u6211\u4eec\u5f88\u96be\u7528\u5168\u5c40\u7684\u63a7\u5236\u5668\u53bb\u7ba1\u7406\u8fd9\u4e9b\u52a8\u6001\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u5b9e\u9645\u4e0a\u6240\u6709\u590d\u6742\u7cfb\u7edf\u7684\u6838\u5fc3\u5c31\u662f\u6574\u4e2a\u590d\u6742\u7cfb\u7edf\u6ca1\u6709\u4e2d\u592e\u7684\u63a7\u5236\u673a\u5236\uff0c\u6240\u6709\u5b50\u7cfb\u7edf\u4e4b\u95f4\u90fd\u662f\u5c40\u90e8\u7684\u4ea4\u4e92\uff0c\u6574\u4f53\u6d8c\u73b0\u51fa\u667a\u80fd\u884c\u4e3a\u3002"),(0,a.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u53ea\u662f\u58f0\u660e\u4ea4\u4e92\u5173\u7cfb\uff0c\u6ca1\u6709\u4e0e\u67d0\u4e2a\u4e2d\u592e\u63a7\u5236\u5668\u6216\u8005\u5168\u5c40\u7684\u5171\u4eab\u53d8\u91cf\u4ea4\u4e92\u7684\u673a\u4f1a\uff0c\u7cfb\u7edf\u6216\u5e73\u53f0\u5c31\u6709\u673a\u4f1a\u6839\u636e\u7c7b\u578b\u7b49\u4fe1\u606f\u8fdb\u884c\u52a8\u6001\u5224\u65ad\u548c\u89c4\u5212\uff0c\u4f7f\u5f97\u4e0d\u6ee1\u8db3\u6761\u4ef6\u7684\u7ec4\u4ef6\u6839\u672c\u5c31\u4e0d\u4f1a\u88ab\u6267\u884c\u3002\u8fd9\u6837\u5728\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u770b\u8d77\u6765\uff0c\u6574\u4e2a\u7cfb\u7edf\u5e76\u6ca1\u6709\u4e00\u4e2a\u4e2d\u592e\u63a7\u5236\u5668\uff0c\u80fd\u591f\u6700\u5927\u9650\u5ea6\u652f\u6301\u590d\u6742\u7cfb\u7edf\u7684\u52a8\u6001\u6027\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u7b80\u5355\u5bf9\u7c7b\u578b\u7684\u58f0\u660e\uff0c\u7136\u540e\u7531\u7cfb\u7edf\u6765\u5206\u914d\u6570\u636e\u7684\u67b6\u6784\uff0c\u4e5f\u652f\u6491\u4e86\u6211\u4eec\u6700\u6838\u5fc3\u7684\u4e92\u64cd\u4f5c\u6027\u7279\u6027\u3002"),(0,a.kt)("h5",{id:"\u52a8\u6001\u6027"},"\u52a8\u6001\u6027"),(0,a.kt)("p",null,"\u6e38\u620f\u7a0b\u5e8f\u6216\u8005\u8bf4\u4e00\u822c\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u67b6\u6784\u8fd8\u6709\u53e6\u4e00\u4e2a\u7279\u5f81\uff0c\u90a3\u5c31\u662f\u4fe1\u606f\u662f\u5b8c\u5168\u52a8\u6001\u7684\u3002"),(0,a.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u5e94\u7528\u4e2d\uff0c\u8f6f\u4ef6\u4e3b\u8981\u5145\u5f53\u7684\u662f\u4e00\u4e2a\u529f\u80fd\u8ba1\u7b97\u5668\uff0c\u5b83\u7684\u529f\u80fd\u5927\u591a\u6570\u65f6\u5019\u90fd\u662f\u9759\u6b62\u72b6\u6001\u7684\uff0c\u53ea\u6709\u5f53\u7528\u6237\u53d1\u8d77\u67d0\u4e2a\u4e8b\u4ef6\uff0c\u4f8b\u5982\u70b9\u901a\u8fc7\u9f20\u6807\u6216\u89e6\u6478\u5c4f\u70b9\u51fb\u67d0\u4e2aUI\u5143\u7d20\uff0c\u8fd9\u4e2aUI\u5143\u7d20\u88ab\u7a0b\u5e8f\u5b9a\u4e49\u4e3a\u7ed1\u5b9a\u5230\u67d0\u4e2a\u529f\u80fd\uff0c\u4e00\u65e6\u7528\u6237\u53d1\u51fa\u8f93\u5165\u4e8b\u4ef6\uff0c\u5bf9\u5e94\u7684\u529f\u80fd\u8ba1\u7b97\u5c31\u4f1a\u6267\u884c\uff0c\u7136\u540e\u7a0b\u5e8f\u4f1a\u5448\u73b0\u76f8\u5e94\u7684\u8ba1\u7b97\u7ed3\u679c\u7ed9\u7528\u6237\u3002\u6b64\u540e\u7a0b\u5e8f\u53c8\u8fdb\u5165\u9759\u6b62\u72b6\u6001\u76f4\u5230\u7528\u6237\u7684\u4e0b\u6b21\u8f93\u5165\u3002\u8fd9\u79cd\u6a21\u5f0f\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a\u8f93\u5165--\x3e\u8ba1\u7b97--\x3e\u8f93\u51fa\uff0c\u5982\u4e0b\u56fe\uff081\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(9955).Z,width:"765",height:"148"})),(0,a.kt)("p",null,"\u800c\u6e38\u620f\u5e76\u4e0d\u7b80\u5355\u7684\u8fd9\u79cd\u6a21\u5f0f\uff0c\u6e38\u620f\u4e16\u754c\u7684\u4e00\u5207\u90fd\u662f\u52a8\u6001\u7684\uff0c\u5b83\u80cc\u540e\u6709\u4e00\u4e2a\u5faa\u73af\u9a71\u52a8\u7740\u6574\u4e2a\u7cfb\u7edf\u6301\u7eed\u5728\u8fd0\u884c\uff0c\u5373\u4f7f\u7528\u6237\u4e0d\u505a\u4efb\u4f55\u8f93\u5165\uff0c\u5b83\u7684\u72b6\u6001\u4e5f\u5728\u65f6\u65f6\u523b\u523b\u53d1\u751f\u53d8\u5316\uff0c\u4f8b\u5982\u5927\u90e8\u5206\u6e38\u620f\u7684\u5173\u5361\u90fd\u6709\u65f6\u95f4\u9650\u5236\uff0c\u5373\u4f7f\u73a9\u5bb6\u4ec0\u4e48\u4e5f\u4e0d\u505a\uff0c\u6e38\u620f\u4e5f\u4f1a\u4ee5\u5931\u8d25\u7ed3\u675f\uff1b\u4f8b\u5982\u5728\u4e00\u4e2aRPG\u6e38\u620f\u4e2d\uff0c\u5373\u4f7f\u73a9\u5bb6\u7ad9\u7740\u4e0d\u52a8\uff0c\u5468\u56f4\u7684\u602a\u7269\u4e5f\u6709\u53ef\u80fd\u8d70\u8fc7\u6765\u653b\u51fb\u73a9\u5bb6\uff0c\u5bfc\u81f4\u4e00\u8fde\u4e32\u7684\u540e\u679c\u3002"),(0,a.kt)("p",null,"\u6e38\u620f\u7a0b\u5e8f\u5c31\u50cf\u5185\u90e8\u6709\u4e00\u4e2a\u9a71\u52a8\u5668\uff0c\u5b83\u6301\u7eed\u9a71\u52a8\u7740\u6240\u6709\u7cfb\u7edf\u7684\u8fd0\u884c\uff0c\u8fd9\u4e9b\u7cfb\u7edf\u4e0e\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u4f1a\u5bfc\u81f4\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u8fd9\u4e9b\u53d8\u5316\u7684\u72b6\u6001\u4fe1\u606f\u6e90\u6e90\u4e0d\u65ad\u5730\u8f93\u5165\u7ed9\u73a9\u5bb6\uff0c\u5982\u4e0a\u56fe\uff08b\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u884c\u4e3a\u4e5f\u662f\u66f4\u63a5\u8fd1\u771f\u5b9e\u4e16\u754c\u884c\u4e3a\u7684\uff0c\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4e0d\u7ba1\u662f\u751f\u7269\u7cfb\u7edf\u8fd8\u662f\u4eba\u5de5\u5f71\u54cd\u7684\u5982\u7ecf\u6d4e\u7cfb\u7edf\u7b49\uff0c\u73af\u5883\u65f6\u65f6\u523b\u523b\u5728\u53d1\u751f\u53d8\u5316\uff0c\u6574\u4e2a\u4e16\u754c\u7684\u4fe1\u606f\u7edd\u4e0d\u4ec5\u4ec5\u662f\u6211\u4eec\u81ea\u5df1\u53bb\u5f71\u54cd\u7684\uff0c\u4e8b\u5b9e\u4e0a\u66f4\u662f\u53cd\u8fc7\u6765\u6211\u4eec\u7684\u884c\u4e3a\u90fd\u662f\u53d7\u73af\u5883\u7684\u4fe1\u606f\u5f71\u54cd\u7684\uff0c\u6211\u4eec\u6240\u4f5c\u7684\u4efb\u4f55\u51b3\u7b56\u90fd\u8981\u5b9e\u65f6\u53bb\u89c2\u5bdf\u73af\u5883\u7684\u4fe1\u606f\uff0c\u6709\u4e9b\u4e0a\u4e00\u523b\u770b\u8d77\u6765\u8fd8\u7406\u6240\u5f53\u7136\u7684\u51b3\u7b56\uff0c\u5728\u4e0b\u4e00\u523b\u968f\u7740\u67d0\u4e9b\u73af\u5883\u53d1\u751f\u53d8\u5316\u5c31\u53d8\u5f97\u6beb\u65e0\u610f\u4e49\u3002"),(0,a.kt)("p",null,"\u8fd9\u6837\u7684\u4fe1\u606f\u7cfb\u7edf\u7279\u5f81\u4e0e\u6211\u4eec\u7684\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u76f8\u6bd4\uff0c\u8868\u73b0\u51fa\u4e24\u4e2a\u5728\u8ba1\u7b97\u4e0a\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u7279\u5f81\uff0c\u5373\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u5b8c\u5168\u88ab\u52a8\u5f0f\u7684"),(0,a.kt)("li",{parentName:"ul"},"\u8f6f\u4ef6\u7ed9\u7528\u6237\u5448\u73b0\u7684\u662f\u4e00\u4e2a\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c")),(0,a.kt)("h6",{id:"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784"},"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784"),(0,a.kt)("p",null,"\u5f53\u4e00\u4e2a\u4fe1\u606f\u7cfb\u7edf\u7684\u4ea4\u4e92\u63a7\u5236\u662f\u53bb\u4e2d\u5fc3\u5316\u7684\u65f6\u5019\uff0c\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u770b\u8d77\u6765\u90fd\u662f\u201c\u81ea\u53d1\u7684\u201d\uff0c\u6ca1\u6709\u8c01\u6765\u9a71\u52a8\uff0c\u8fd9\u6837\u7684\u673a\u5236\u600e\u4e48\u6267\u884c\u7684\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u8ba8\u8bba\u6574\u4e2a\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\uff0c\u8fd9\u91cc\u6211\u4eec\u5148\u6765\u770b\u770b\u8fd9\u79cd\u884c\u4e3a\u5bf9\u7f16\u7a0b\u6709\u4ec0\u4e48\u5f71\u54cd\u3002"),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\u7f16\u7a0b\u6a21\u5f0f\u90fd\u53ef\u4ee5\u79f0\u4f5c\u4e3a\u4e3b\u52a8\u5f0f\uff0c\u5927\u90e8\u5206\u7684\u4ee3\u7801\u6d41\u7a0b\u53ef\u4ee5\u603b\u7ed3\u4e3a\uff1a\u7528\u6237\u8f93\u5165-\u300b\u51b3\u7b56\u5224\u65ad-\u300b\u6267\u884c\u52a8\u4f5c\uff0c\u8fd9\u91cc\u7684\u51b3\u7b56\u5224\u65ad\u662f\u7a0b\u5e8f\u4e2d\u6700\u590d\u6742\u7684\u90e8\u5206\uff0c\u56e0\u4e3a\u5b83\u6d89\u53ca\u5230\u5f88\u591a\u4e0a\u4e0b\u6587\u4fe1\u606f\u7684\u7ec4\u7ec7\u548c\u67e5\u8be2\uff0c\u5173\u4e8e\u4e0a\u4e0b\u6587\u7684\u7406\u89e3\u77e5\u4e4e",(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/26387327/answer/3158798538"},"\u6709\u4e00\u7bc7"),"\u5f88\u7cbe\u5f69\u7684\u63cf\u8ff0\u3002\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u90fd\u4f1a\u6709\u5f88\u591a\u4e0d\u540c\u7684\u6a21\u5f0f\u548c\u7ecf\u9a8c\u6765\u5b9e\u73b0\u8fd9\u79cd\u4e0a\u4e0b\u6587\u7ba1\u7406\uff0c\u4f46\u662f\u8fd9\u91cc\u6211\u4eec\u5728\u590d\u6742\u7cfb\u7edf\u7684\u89c6\u89d2\u4e0b\uff0c\u5374\u4f1a\u63d0\u51fa\u53e6\u4e00\u79cd\u53ef\u80fd\u662f\u66f4\u597d\u7684\u65b9\u6cd5\u3002"),(0,a.kt)("p",null,"\u4e00\u822c\u7684\u51b3\u7b56\u5224\u65ad\u6d41\u7a0b\u5927\u6982\u662f\u8fd9\u6837\uff0c\u5f53\u5bf9\u5e94\u7684\u4ee3\u7801\u63a5\u6536\u5230\u7528\u6237\u8f93\u5165\u8bf7\u6c42\u7684\u65f6\u5019\uff0c\u51b3\u7b56\u4ee3\u7801\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u53bb\u67e5\u8be2\u548c\u6536\u96c6\u4e0a\u9762\u8bb2\u5230\u7684\u8fd9\u79cd\u4e0a\u4e0b\u6587\u4fe1\u606f\uff0c\u4ee5\u5e2e\u52a9\u505a\u51fa\u51b3\u7b56\u5224\u65ad\uff0c\u4e0d\u8003\u8651\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u5185\u90e8\u662f\u600e\u4e48\u7ec4\u7ec7\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u6574\u4e2a\u6839\u636e\u4e0a\u4e0b\u6587\u8fdb\u884c\u51b3\u7b56\u5224\u65ad\u7684\u8fc7\u7a0b\u770b\u505a\u4e00\u4e2a\u51fd\u6570makingDecision()\uff0cmakingDecision\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u53bb\u8c03\u7528\u5927\u91cf\u9884\u7f6e\u7684\u5224\u65ad\u51fd\u6570\uff0c\u6839\u636e\u5404\u79cd\u903b\u8f91\u6761\u4ef6\uff0c\u52a8\u6001\u5730\u8ba1\u7b97\u51fa\u4e00\u4e2a\u5224\u65ad\u7ed3\u679c\u3002\u8fd9\u79cd\u8ba1\u7b97\u67b6\u6784\u5e26\u6765\u4e86\u4e24\u79cd\u4e0d\u597d\u7684\u7ed3\u679c\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9020\u6210\u4e86\u6a21\u5757\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u5373\u6240\u6709\u5b50\u6a21\u5757\u90fd\u9700\u8981\u5f15\u7528\u6216\u8005\u4e86\u89e3\u54ea\u4e9b\u903b\u8f91\u5224\u65ad\u7684\u4ee3\u7801"),(0,a.kt)("li",{parentName:"ul"},"\u9020\u6210\u903b\u8f91\u5224\u65ad\u8ba1\u7b97\u7684\u91cd\u590d\u6267\u884c\uff0c\u8bbe\u60f3\u6709\u4e24\u4e2a\u72ec\u7acb\u7684\u7528\u6237\u8f93\u5165\uff0c\u5176\u4e2d\u7684\u903b\u8f91\u5224\u65ad\u670980%\u662f\u91cd\u5408\u7684\uff0c\u7a0b\u5e8f\u5fc5\u987b\u9488\u5bf9\u4e24\u4e2a\u72ec\u7acb\u7684\u8f93\u5165\u8fdb\u884c\u8fd9\u90e8\u5206\u91cd\u590d\u8ba1\u7b97\u3002")),(0,a.kt)("p",null,"\u770b\u770b\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u7cfb\u7edf\u5f80\u5f80\u4e0d\u662f\u8fd9\u4e48\u5de5\u4f5c\u7684\uff0c\u5404\u79cd\u7cfb\u7edf\u5f80\u5f80\u5b9a\u4e49\u597d\u81ea\u5df1\u7684\u6d41\u7a0b\uff0c\u6bcf\u4e2a\u6d41\u7a0b\u4f1a\u8f93\u5165\u6570\u636e\uff0c\u540e\u7eed\u6d41\u7a0b\u5f80\u5f80\u4ee5\u8fd9\u79cd\u8f93\u51fa\u7684\u5b9e\u7269\u6570\u636e\u4f5c\u4e3a\u5b83\u53ef\u4ee5\u6267\u884c\u6d41\u7a0b\u7684\u5224\u65ad\u6761\u4ef6\uff0c\u800c\u4e0d\u662f\u5f53\u5b83\u9700\u8981\u6267\u884c\u7684\u65f6\u5019\uff0c\u53d1\u73b0\u524d\u9762\u7684\u6d41\u7a0b\u8fd8\u6ca1\u6709\u6267\u884c\uff0c\u7531\u4e0b\u6e38\u7684\u6d41\u7a0b\u518d\u53bb\u9a71\u52a8\u4e0a\u6e38\u7684\u6d41\u7a0b\u53bb\u6267\u884c\u3002\u5728\u8fd9\u6837\u7684\u6a21\u5f0f\u79cd\uff0c\u4e0a\u6e38\u6d41\u7a0b\u8ba1\u7b97\u7684\u6570\u636e\u7ed3\u679c\u4e0d\u4ec5\u5145\u5f53\u4e86\u4e00\u4e2a\u6761\u4ef6\uff0c\u5b83\u66f4\u5145\u5f53\u4e86\u4e0a\u6e38\u7684\u90a3\u4e2a\u8ba1\u7b97\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u7ed3\u5408\u6211\u4eec\u524d\u9762\u7684\u4e92\u64cd\u4f5c\u80fd\u529b\uff0c\u5373\u5b50\u7cfb\u7edf\u5728\u4e0d\u7ecf\u8fc7\u67d0\u4e2a\u4e2d\u592e\u63a7\u5236\u6a21\u5757\u7684\u60c5\u51b5\u4e0b\uff0c\u80fd\u591f\u975e\u5e38\u7b80\u5355\u5730\u8bbf\u95ee\u6240\u6709\u6570\u636e\u7684\u80fd\u529b\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5404\u79cd\u53ef\u80fd\u7684\u51b3\u7b56\u8ba1\u7b97\u63d0\u524d\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u6570\u636e\uff0c\u8fd9\u6837\u4e0b\u6e38\u7684\u6d41\u7a0b\u7531\u4e8e\u5b9a\u4e49\u548c\u6570\u636e\u4f9d\u8d56\u5173\u7cfb\uff0c\u7cfb\u7edf\u53ef\u4ee5\u5728\u6761\u4ef6\u6ee1\u8db3\u7684\u65f6\u5019\u81ea\u52a8\u8c03\u7528\u5b83\u53bb\u6267\u884c\u81ea\u5df1\u7684\u903b\u8f91\u3002\u6574\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51b3\u7b56\u5224\u65ad\u548c\u5b50\u7cfb\u7edf\u5b8c\u5168\u89e3\u8026\u3002"),(0,a.kt)("p",null,"\u8fd9\u6837\u7684\u67b6\u6784\u8c03\u6574\u5c06\u4f20\u7edf\u8f6f\u4ef6\u79cd\u7684\u6a21\u5f0f\u7531\u4e3b\u52a8\u5f0f\u8f6c\u53d8\u4e3a\u88ab\u52a8\u5f0f\u3002"),(0,a.kt)("h6",{id:"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c"},"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c"),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\uff1a\u8f93\u5165-\u300b\u8ba1\u7b97-\u300b\u53cd\u9988\u7684\u8ba1\u7b97\u6a21\u5f0f\uff0c\u7528\u6237\u80fd\u591f\u5b8c\u5168\u4e86\u89e3\u6216\u8005\u8bf4\u201c\u8bb0\u4f4f\u201d\u4e00\u4e2a\u8f6f\u4ef6\u7684\u72b6\u4f53\uff0c\u7528\u6237\u77e5\u9053\u81ea\u5df1\u505a\u8fc7\u4ec0\u4e48\uff0c\u5f53\u524d\u7684\u8f6f\u4ef6\u72b6\u6001\u662f\u4ec0\u4e48\uff0c\u7528\u6237\u4e5f\u77e5\u9053TA\u53ea\u8981\u6267\u884c\u67d0\u4e2a\u529f\u80fd\uff0c\u5c31\u4f1a\u5e26\u6765\u4ec0\u4e48\u53ef\u9884\u671f\u7684\u7ed3\u679c\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u6837\u7684\u65b9\u5f0f\u6709\u52a9\u4e8e\u4eba\u4eec\u7ba1\u7406\u65e5\u5e38\u7684\u4efb\u52a1\u548c\u5de5\u4f5c\uff0c\u4f46\u662f\u8fd9\u65e2\u4e0d\u662f\u771f\u5b9e\u4e16\u754c\u7684\u5de5\u4f5c\u65b9\u5f0f\uff0c\u540c\u65f6\u6240\u6709\u4e8b\u60c5\u90fd\u9760\u4eba\u53bb\u8f93\u5165\u9a71\u52a8\uff0c\u90a3\u4e48\u4fe1\u606f\u7cfb\u7edf\u6240\u80fd\u5b8c\u6210\u7684\u4e8b\u60c5\u7684\u6570\u91cf\u5c31\u4f1a\u975e\u5e38\u5c11\uff0c\u56e0\u4e3a\u4eba\u7684\u7cbe\u529b\u548c\u6ce8\u610f\u529b\u90fd\u662f\u975e\u5e38\u5b9d\u8d35\u548c\u6709\u9650\u7684\u8d44\u6e90\u3002\u800c\u73b0\u5b9e\u4e16\u754c\u7684\u4fe1\u606f\u7cfb\u7edf\u603b\u662f\u5728\u81ea\u53d1\u3001\u52a8\u6001\u53d1\u5c55\u7684\uff0c\u5373\u4f7f\u6211\u4eec\u67d0\u5929\u4ec0\u4e48\u4e8b\u60c5\u4e5f\u6ca1\u6709\u505a\uff0c\u4f46\u662f\u4e16\u754c\u53d1\u751f\u4e86\u5f88\u591a\u7684\u7ecf\u6d4e\u548c\u751f\u4ea7\u884c\u4e3a\uff0c\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u52a8\u6001\u884c\u4e3a\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u4f7f\u5f97\u6570\u5b57\u4e16\u754c\u7684\u8ba1\u7b97\u4e0d\u4ee5\u4eba\u7684\u6ce8\u610f\u529b\u4e3a\u9a71\u52a8\u57fa\u7840"),"\uff0c\u8fd9\u6837\u5373\u4f7f\u5f53\u6211\u4eec\u7684\u6ce8\u610f\u529b\u4e0d\u5728\u8f6f\u4ef6\u548c\u5e94\u7528\u4e0a\uff0c\u4f46\u662f\u5b83\u4eec\u4f1a\u5728\u540e\u5929\u65f6\u65f6\u523b\u523b\u90fd\u8fdb\u884c\u7740\u4e0e\u7528\u6237\u76f8\u5173\u6216\u8005\u6307\u5b9a\u7684\u8ba1\u7b97\u4efb\u52a1\u3002"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u5df2\u7ecf\u63cf\u8ff0\u4e86\u5b9e\u73b0\u8fd9\u6837\u7684\u8ba1\u7b97\u67b6\u6784\u7684\u673a\u5236\uff0c\u8fd9\u91cc\u8981\u5f3a\u8c03\u7684\u662f\u8fd9\u5bf9\u7528\u6237\u4f53\u9a8c\u5e26\u6765\u7684\u53d8\u5316\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u7684\u4fe1\u606f\u72b6\u6001\u90fd\u662f\u8ddf\u7528\u6237\u7684\u8f93\u5165\u6709\u5173\uff0c\u56e0\u6b64\u5373\u4f7f\u4e0d\u7528\u6253\u5f00\u8f6f\u4ef6\uff0c\u7528\u6237\u5927\u81f4\u662f\u77e5\u9053\u91cc\u9762\u7684\u72b6\u6001\u4fe1\u606f\u7684\u3002\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u4fe1\u606f\u7cfb\u7edf\u5728\u540e\u53f0\u52a8\u6001\u8fd0\u884c\uff0c\u5c31\u4f1a\u5b58\u5728\u5927\u91cf\u7684\u4fe1\u606f\u72b6\u6001\u662f\u7528\u6237\u4e0d\u77e5\u9053\u7684\uff0c\u5b83\u5fc5\u987b\u50cf\u89c2\u5bdf\u8fd9\u4e2a\u52a8\u6001\u7684\u4e16\u754c\u4e00\u6837\u53bb\u89c2\u5bdf\u8f6f\u4ef6\u5185\u90e8\u7684\u4fe1\u606f\u72b6\u6001\uff0c\u5f53\u7136\u8fd9\u91cc\u7684\u4ea4\u4e92\u53ef\u4ee5\u6709\u5f88\u591a\u5f62\u5f0f\u3002"),(0,a.kt)("p",null,"\u6e38\u620f\u5c31\u662f\u8fd9\u6837\u4e00\u4e2a\u4fe1\u606f\u7cfb\u7edf\uff0c\u6e38\u620f\u5185\u90e8\u6709\u8bb8\u591a\u5b50\u7cfb\u7edf\u7684\u8fd0\u884c\u90fd\u4e0d\u662f\u76f4\u63a5\u4e0e\u7528\u6237\u7684\u8f93\u5165\u76f8\u5173\u7684\uff0c\u56e0\u6b64\u6e38\u620f\u7684\u4ea4\u4e92\u5fc5\u987b\u8981\u5f88\u597d\u5730\u5448\u73b0\u6bd4\u8f83\u5b8c\u6574\u7684\u72b6\u6001\u4fe1\u606f\uff0c\u6bd4\u5982\u76f8\u5bf9\u4e8e\u4f20\u7edf\u5e94\u7528\u7b80\u6d01\u7684\u754c\u9762\uff0c\u6e38\u620f\u7684\u754c\u9762\u901a\u5e38\u4f1a\u5305\u542b\u5f88\u591a\u5168\u5c40\u7684\u6570\u636e\u4fe1\u606f\uff0c\u9664\u4e86\u5177\u4f53\u7684\u6570\u636e\u4fe1\u606f\uff0c\u6e38\u620f\u573a\u666f\u7684\u5143\u7d20\u5728\u89c6\u89c9\u4e0a\u901a\u5e38\u4e5f\u88ab\u8bbe\u8ba1\u4e3a\u6613\u4e8e\u5e2e\u52a9\u7528\u6237\u53bb\u533a\u5206\u4e0d\u540c\u7684\u573a\u666f\u72b6\u6001\uff0c\u5982\u4e0b\u56fe\u300a\u6587\u660e\u300b\u8fd9\u6b3e\u6e38\u620f\u4e00\u4e2a\u6e38\u620f\u753b\u9762\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(4413).Z,width:"1366",height:"768"})),(0,a.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u7684\u4e0b\u4e00\u4e2a\u8f93\u5165\u6216\u8005\u51b3\u7b56\uff0c\u5c31\u4e0d\u80fd\u5355\u7eaf\u51ed\u501f\u81ea\u5df1\u5927\u8111\u79cd\u7684\u8bb0\u5fc6\uff0c\u800c\u662f\u9700\u8981\u89c2\u5bdf\u6574\u4e2a\u7cfb\u7edf\u7684\u4fe1\u606f\u72b6\u6001\uff0c\u8fd9\u4e9b\u72b6\u6001\u53ef\u80fd\u4f1a\u5b9e\u65f6\u53d8\u5316\uff0c\u751a\u81f3\u5927\u90e8\u5206\u53d8\u5316\u90fd\u4e0d\u662f\u7528\u6237\u76f4\u63a5\u8f93\u5165\u5bfc\u81f4\u7684\u7ed3\u679c\uff0c\u751a\u81f3\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u7528\u6237\u7684\u64cd\u4f5c\u66f4\u591a\u662f\u5728\u54cd\u5e94\u4fe1\u606f\u4e16\u754c\u7684\u72b6\u6001\u53d8\u5316\u3002"),(0,a.kt)("p",null,"\u8868\u9762\u4e0a\u8fd9\u770b\u8d77\u6765\u662f\u66f4\u590d\u6742\u7684\uff0c\u4f46\u662f\u8fd9\u6837\u7684\u4fe1\u606f\u7cfb\u7edf\u80fd\u591f\u5904\u7406\u7684\u4fe1\u606f\u8ba1\u7b97\u5c06\u4f1a\u8fdc\u8fdc\u8d85\u8fc7\u4f20\u7edf\u7684\u4fe1\u606f\u8ba1\u7b97\uff0c\u56e0\u6b64\u5b83\u80fd\u5b9e\u73b0\u7684\u4fe1\u606f\u8ba1\u7b97\u7684\u590d\u6742\u5ea6\u4e5f\u66f4\u9ad8\uff0c\u60f3\u60f3\u770b\u4e00\u4e2a\u6e38\u620f\u4e2d\u6d89\u53ca\u7684\u90a3\u4e48\u591a\u8ba1\u7b97\u548c\u903b\u8f91\uff0c\u4f7f\u7528\u4f20\u7edf\u7684\u5e94\u7528\u6a21\u5f0f\u51e0\u4e4e\u662f\u65e0\u6cd5\u5b9e\u73b0\u7684\u3002"),(0,a.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u590d\u6742\u5ea6\u5bf9\u4e8e\u4eba\u7c7b\u6765\u8bb2\uff0c\u6216\u8bb8\u5e76\u6ca1\u6709\u90a3\u4e48\u590d\u6742\uff0c\u4eba\u7c7b\u5728\u793e\u4f1a\u4e2d\u5929\u751f\u5c31\u662f\u88ab\u8bad\u7ec3\u4e3a\u9002\u5e94\u53d8\u5316\u7684\u73af\u5883\u7684\uff0c\u6211\u4eec\u4e0d\u65ad\u5728\u89c2\u5bdf\u8857\u4e0a\u7684\u884c\u4eba\u3001\u7ea2\u8def\u706f\u53ca\u8f66\u8f86\u60c5\u51b5\uff0c\u4ee5\u51b3\u5b9a\u4e0b\u4e00\u6b65\u7684\u884c\u52a8\u7b56\u7565\uff1b\u8d5b\u573a\u4e0a\u7403\u5458\u4e4b\u95f4\u4e0d\u65ad\u89c2\u5bdf\u5176\u5b83\u8fd0\u884c\u5458\u52a8\u6001\u7684\u60c5\u51b5\uff0c\u4ee5\u51b3\u5b9a\u4e0b\u4e00\u6b65\u884c\u52a8\uff1b\u751a\u81f3\u5728\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u6211\u4eec\u4e5f\u8981\u6839\u636e\u80a1\u7968\u5e02\u573a\u7684\u53d8\u5316\uff0c\u51b3\u5b9a\u4e0b\u4e00\u90e8\u5206\u7684\u6295\u8d44\u51b3\u7b56\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\u8fd9\u91cc\u66f4\u591a\u7684\u662f\u8bbe\u8ba1\u548c\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u6bd4\u5982\u4eba\u7684\u6709\u4e9b\u54cd\u5e94\u80fd\u529b\u662f\u5929\u751f\u7684\uff0c\u6bd4\u5982\u5bf9\u5371\u9669\u4e8b\u7269\u7684\u5bdf\u89c9\uff0c\u6709\u4e9b\u5219\u662f\u9700\u8981\u5b9a\u4e49\u4e00\u5b9a\u7684\u89c4\u5219\u7136\u540e\u8fdb\u884c\u9002\u5f53\u7684\u8bad\u7ec3\u7684\uff0c\u6bd4\u5982\u5f00\u8f66\u65f6\u5bf9\u73af\u5883\u7684\u53cd\u6620\u7b49\u7b49\u3002\u8fd9\u6bd4\u5982\u5c31\u8981\u6c42\u6211\u4eec\u8981\u7cbe\u5fc3\u9009\u62e9\u5448\u73b0\u4fe1\u606f\u7684\u903b\u8f91\u3001\u6a21\u5f0f\u3001\u89c4\u5219\uff0c\u800c\u4e0d\u662f\u4e00\u80a1\u8111\u751a\u81f3\u968f\u673a\u9009\u62e9\u5927\u91cf\u6742\u4e71\u65e0\u7ae0\u7684\u4fe1\u606f\uff1b\u6bd4\u5982\u4e00\u6bb5\u65f6\u95f4\u5185\u67d0\u4e9b\u76f8\u5173\u4fe1\u606f\u7684\u89c4\u5219\u548c\u903b\u8f91\u53d8\u5316\u4e0d\u80fd\u592a\u5927\uff0c\u56e0\u4e3a\u8fd9\u53ef\u80fd\u9700\u8981\u7528\u6237\u91cd\u65b0\u53bb\u5efa\u7acb\u5bf9\u52a8\u6001\u4fe1\u606f\u7684\u54cd\u5e94\u6a21\u5f0f\u3002"),(0,a.kt)("p",null,"\u5728\u8fd9\u79cd\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u4fe1\u606f\u7684\u5448\u73b0\u3001\u89c4\u5219\u548c\u4ea4\u4e92\u4f1a\u53d8\u5f97\u5f88\u91cd\u8981\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u8fd9\u6837\u7684\u590d\u6742\u4fe1\u606f\u7cfb\u7edf\u5448\u73b0\u7684\u4ef7\u503c\uff1a",(0,a.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u529b\u7684\u91ca\u653e\u4ee5\u53ca\u5b9e\u73b0\u66f4\u590d\u6742\u8ba1\u7b97\u7684\u80fd\u529b"),"\uff0c\u4ee5\u53ca\u4eba\u7c7b\u5bf9\u8fd9\u79cd\u52a8\u6001\u4fe1\u606f\u7cfb\u7edf\u7684\u9002\u5e94\u80fd\u529b\uff0c\u8fd9\u6837\u7684\u8f6c\u53d8\u5b8c\u5168\u662f\u6709\u4ef7\u503c\u7684\u3002"),(0,a.kt)("h4",{id:"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd"},"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u4ece\u673a\u5236\u4e0a\u8ba8\u8bba\u4e86\u5f88\u591a\u601d\u8def\uff0c\u4ee5\u5b9e\u73b0\u4e00\u4e2a\u53ef\u4ee5\u591a\u5b50\u7cfb\u7edf\u4e92\u64cd\u4f5c\u3001\u9760\u5b50\u7cfb\u7edf\u5c40\u90e8\u4ea4\u4e92\u5b9e\u73b0\u66f4\u590d\u6742\u529f\u80fd\u7684\u6570\u5b57\u4e16\u754c\u3002\u4f46\u6211\u4eec\u82b1\u8d39\u4e86\u8fd9\u4e48\u5927\u7684\u7cbe\u529b\u53bb\u91cd\u6784\u8f6f\u4ef6\u5f00\u53d1\u7684\u6d41\u7a0b\uff0c\u4ee5\u53ca\u8ba9\u7528\u6237\u53bb\u5b66\u4e60\u65b0\u7684\u4fe1\u606f\u7cfb\u7edf\u4ea4\u4e92\u65b9\u5f0f\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u8fd9\u6837\u7684\u4ee3\u4ef7\u5230\u5e95\u503c\u4e0d\u503c\u5f97\uff1f\u5b83\u6709\u6ca1\u6709\u66f4\u6df1\u5c42\u6b21\u7684\u4ef7\u503c\u4f53\u7cfb\u6765\u652f\u6491\u8fd9\u79cd\u6280\u672f\u53d8\u9769\uff1f"),"\u8fd9\u4e9b\u662f\u672c\u8282\u8981\u8ba8\u8bba\u7684\u95ee\u9898\u3002"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u8981\u8ba8\u8bba\u4e24\u4e2a\u5f88\u6df1\u523b\u7684\u95ee\u9898\uff0c\u5373\u6570\u5b57\u667a\u80fd\u548c\u8ba1\u7b97\u7684\u672c\u8d28\uff0c\u8fd9\u4e9b\u6982\u5ff5\u53ef\u80fd\u6027\u9a71\u52a8\u672a\u6765\u6570\u5b57\u53d8\u9769\u7684\u6838\u5fc3\u4ef7\u503c\u3002"),(0,a.kt)("h5",{id:"\u667a\u80fd\u6d8c\u73b0"},"\u667a\u80fd\u6d8c\u73b0"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u5df2\u7ecf\u7b80\u5355\u4ecb\u7ecd\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u57fa\u672c\u77e5\u8bc6\uff0c\u6211\u4eec\u518d\u6765\u770b\u4e00\u4e2a\u6bcf\u4e2a\u4eba\u53ef\u80fd\u6df1\u6709\u4f53\u4f1a\u7684\u4f8b\u5b50\u3002"),(0,a.kt)("p",null,"\u8003\u8651\u6211\u4eec\u73b0\u5728\u7684\u6574\u4e2a\u7f51\u4e0a\u6d88\u8d39\u8d2d\u7269\u7684\u7cfb\u7edf\uff0c\u5b83\u662f\u7531\u8fd9\u6837\u51e0\u4e2a\u5b50\u7cfb\u7edf\u6784\u6210\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u5305\u62ec\u751f\u4ea7\u4ea7\u54c1\u7684\u5382\u5546\u3001\u7269\u6d41\u5feb\u9012\u3001\u56fd\u5bb6\u4ea4\u901a\u516c\u5171\u57fa\u7840\u8bbe\u65bd\u3001\u7535\u5546\u7f51\u7ad9\u3001\u9001\u8d27\u7684\u5feb\u9012\u5458\u548c\u7528\u6237\u7b49\u3002\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u6bcf\u4e00\u4e2a\u5355\u72ec\u770b\u90fd\u6bd4\u8f83\u7b80\u5355\uff0c\u5b83\u4eec\u7684\u529f\u80fd\u6709\u81ea\u5df1\u7684\u8fb9\u754c\uff0c\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u4e5f\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\uff0c\u6700\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u4e00\u5207\u6ca1\u6709\u4e00\u4e2a\u516c\u5171\u3001\u7edf\u4e00\u7684\u4e2d\u592e\u63a7\u5236\u5668\uff0c\u6574\u4e2a\u7cfb\u7edf\u90fd\u662f\u7531\u5c40\u90e8\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c\u7b80\u5355\u7684\u76f8\u4e92\u4ea4\u4e92\uff0c\u4ece\u800c\u5448\u73b0\u6574\u4f53\u7cfb\u7edf\u529f\u80fd\u7684\u3002"),(0,a.kt)("p",null,"\u867d\u7136\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u76f8\u5bf9\u90fd\u6bd4\u8f83\u7b80\u5355\u4e14\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u662f\u6574\u4e2a\u7cfb\u7edf\u5b9e\u9645\u8868\u73b0\u51fa\u6765\u7684\u529f\u80fd\u6027\u662f\u8fdc\u8fdc\u5927\u4e8e\u6211\u4eec\u7684\u9884\u671f\u7684\uff0c\u4f8b\u5982\u6700\u5f00\u59cb\u7f51\u4e0a\u8d2d\u7269\u4e3b\u8981\u662f\u4ee5\u6dd8\u5b9d\u7b49\u5c11\u6570\u7535\u5546\u7f51\u7ad9\u4e3a\u4e3b\uff0c\u7136\u540e\u73b0\u5728\u5feb\u9012\u79f0\u4e3a\u4e00\u79cd\u516c\u5171\u5b50\u7cfb\u7edf\uff0c\u4f7f\u5f97\u4efb\u610f\u5176\u5b83\u7684\u7535\u5546\u7f51\u7ad9\u90fd\u53ef\u4ee5\u63a5\u5165\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u4eec\u8d2d\u4e70\u7269\u54c1\u8fd9\u4e2a\u4f53\u9a8c\u5927\u5927\u5347\u7ea7\uff0c\u4f8b\u5982\u5c0f\u5230\u9644\u8fd1\u7684\u9910\u5385\u3001\u6c34\u679c\u5e97\u548c\u836f\u5e97\u7b49\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u8d2d\u4e70\uff0c\u751a\u81f3\u5305\u62ec\u8dd1\u817f\u8fd9\u79cd\u7075\u6d3b\u7684\u5f62\u5f0f\uff0c\u4ece\u6211\u4eec\u7684\u4f53\u9a8c\u4e0a\u8bf4\u8fd9\u5df2\u7ecf\u4e0d\u5355\u5355\u662f\u4e00\u4e2a\u5feb\u9012\u6216\u8005\u8d2d\u7269\u7f51\u7ad9\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u7b80\u76f4\u662f\u4e00\u5957\u975e\u5e38\u667a\u80fd\u7684\u6d88\u8d39\u4f53\u7cfb\uff0c\u56e0\u4e3a\u51e0\u4e4e\u6240\u6709\u7684\u7535\u5b50\u6d88\u8d39\u5f62\u5f0f\u5b83\u90fd\u53ef\u4ee5\u5b9e\u73b0\uff0c\u8fd9\u79cd\u667a\u80fd\u5c31\u662f\u901a\u8fc7\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u6784\u6210\u7684\u590d\u6742\u7cfb\u7edf\u6d8c\u73b0\u51fa\u6765\u7684\u3002"),(0,a.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u5f62\u5f0f\u662f\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u6240\u4ee5\u5b50\u7cfb\u7edf\u90fd\u5728\u8fdb\u884c\u81ea\u6211\u8fed\u4ee3\uff0c\u4f8b\u5982\u8fc7\u53bb\u7684\u7269\u6d41\u4f53\u7cfb\u4e3b\u8981\u662f\u4f9d\u8d56\u706b\u8f66\uff0c\u5176\u8fd0\u8f7d\u7684\u65f6\u6548\u6027\u662f\u975e\u5e38\u4f4e\u7684\uff0c\u968f\u7740\u73b0\u5728\u4ea4\u901a\u5b50\u7cfb\u7edf\u5185\u90e8\u7684\u8fed\u4ee3\uff0c\u4f8b\u5982\u706b\u8f66\u5347\u7ea7\u4e3a\u9ad8\u94c1\u548c\u52a8\u8f66\uff0c\u5927\u89c4\u6a21\u9ad8\u901f\u516c\u8def\u7f51\u7684\u4fee\u5efa\uff0c\u5176\u5b83\u7684\u5b50\u7cfb\u7edf\u751a\u81f3\u5728\u6ca1\u6709\u53d8\u5316\u7684\u60c5\u51b5\u4e0b\u5c31\u80fd\u4eab\u53d7\u5230\u4ea4\u901a\u5b50\u7cfb\u7edf\u7684\u6027\u80fd\u63d0\u5347\uff0c\u6700\u540e\u5bfc\u81f4\u6574\u4e2a\u6d88\u8d39\u7684\u4f53\u9a8c\u5927\u5e45\u63d0\u5347\u3002\u518d\u6bd4\u5982\u8bf4\u5feb\u9012\u8fd9\u4e2a\u5b50\u7cfb\u7edf\uff0c\u8fc7\u53bb\u5feb\u9012\u53ef\u80fd\u5c31\u662f\u9001\u5230\u7ad9\u9700\u8981\u7528\u6237\u81ea\u53d6\uff0c\u4f46\u662f\u968f\u7740\u6d88\u8d39\u91cf\u7684\u589e\u52a0\uff0c\u5feb\u9012\u516c\u53f8\u4e3a\u4e86\u6539\u5584\u4f53\u9a8c\uff0c\u9010\u6b65\u589e\u52a0\u4e86\u914d\u9001\u5230\u5bb6\u91cc\u7684\u6700\u540e\u4e00\u516c\u91cc\uff0c\u751a\u81f3\u5728\u5927\u57ce\u5e02\u901a\u8fc7\u5206\u7247\u533a\u914d\u5907\u66f4\u591a\u7684\u5feb\u9012\u5458\u6765\u7f29\u77ed\u914d\u9001\u65f6\u95f4\u3002\u6240\u6709\u8fd9\u4e00\u5207\uff0c\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u5185\u90e8\u90fd\u5728\u8fed\u4ee3\u548c\u8fdb\u5316\uff0c\u6700\u540e\u6574\u4e2a\u7cfb\u7edf\u7684\u6027\u80fd\u548c\u80fd\u529b\u90fd\u4e0d\u65ad\u7a81\u7834\uff0c\u5b50\u7cfb\u7edf\u5185\u90e8\u9010\u6b65\u7684\u8fed\u4ee3\u6539\u5584\u4e0d\u5355\u5355\u662f\u63d0\u5347\u4e86\u6027\u80fd\uff0c\u5b83\u4f7f\u5f97\u6574\u4e2a\u7cfb\u7edf\u6d8c\u73b0\u51fa\u4e00\u4e9b\u65b0\u7684\u4f53\u9a8c\u548c\u80fd\u529b\u3002\u4f8b\u5982\u5feb\u9012\u5458\u7684\u914d\u9001\u65f6\u95f4\u4e0d\u80fd\u63a7\u5236\u5728\u5f88\u77ed\u7684\u65f6\u95f4\u5185\uff0c\u90a3\u4e48\u8fd9\u79cd\u77ed\u65f6\u7684\u5916\u5356\u6d88\u8d39\u5f62\u5f0f\u5c31\u4e0d\u53ef\u80fd\u5f62\u6210\u3002"),(0,a.kt)("p",null,"\u4ece\u8fd9\u91cc\u6211\u4eec\u5c31\u53ef\u4ee5\u770b\u5230\u590d\u6742\u7cfb\u7edf\u7684\u529b\u91cf\uff0c\u5b83\u901a\u8fc7\u5c06\u6574\u4e2a\u7cfb\u7edf\u5212\u5206\u4e3a\u81ea\u6cbb\u7684\u5b50\u7cfb\u7edf\uff0c\u5e76\u5141\u8bb8\u5b50\u7cfb\u7edf\u5185\u90e8\u8fdb\u884c\u8fdb\u5316\u8fed\u4ee3\uff0c\u4ece\u800c\u6d8c\u73b0\u51fa\u66f4\u667a\u80fd\u7684\u529f\u80fd\u3002\u6211\u4eec\u53ef\u4ee5\u4ece\u4eba\u7c7b\u793e\u4f1a\u7684\u5404\u4e2a\u5c42\u9762\u90fd\u770b\u5230\u8fd9\u79cd\u590d\u6742\u7cfb\u7edf\u673a\u5236\u6d8c\u73b0\u667a\u80fd\u7684\u4f8b\u5b50\uff0c\u4ece\u751f\u7269\u7cfb\u7edf\u3001\u5230\u4eba\u9020\u7684\u5404\u79cd\u7cfb\u7edf\uff0c\u5982\u4e0a\u9762\u63cf\u8ff0\u7684\u8fd9\u79cd\u7535\u5b50\u8d2d\u7269\u7684\u7cfb\u7edf\uff0c\u518d\u5230\u5929\u6c14\u5b87\u5b99\u8fd9\u79cd\u5927\u81ea\u7136\u7684\u590d\u6742\u7cfb\u7edf\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u4fe1\u606f\u5316\u4ee5\u53ca\u8ba1\u7b97\u673a\u7684\u901a\u7528\u8ba1\u7b97\u80fd\u529b\u5177\u5907\u8868\u8fbe\u548c\u6a21\u62df\u4eba\u7c7b\u4e00\u5207\u53ef\u8ba1\u7b97\u7684\u903b\u8f91\u7684\u80fd\u529b\u3002\u7136\u800c\u5728\u6570\u5b57\u4e16\u754c\u6211\u4eec\u4f3c\u4e4e\u8fd8\u6ca1\u6709\u611f\u53d7\u5230\u8fd9\u79cd\u7531\u590d\u6742\u7cfb\u7edf\u673a\u5236\u5bfc\u81f4\u7684\u8ba1\u7b97\u667a\u80fd\u7684\u80fd\u529b\uff0c\u8fd9\u4e3b\u8981\u662f\u56e0\u4e3a\u524d\u9762\u8bba\u8ff0\u7684\u73b0\u4ee3\u8f6f\u4ef6\u6784\u9020\u7684\u57fa\u7840\u67b6\u6784\u4f7f\u5f97\u5e94\u7528\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u6027\u5f88\u4f4e\uff0c\u4ece\u800c\u4e0d\u5229\u4e8e\u5b9e\u73b0\u76f8\u4e92\u4ea4\u4e92\u6765\u5f62\u6210\u590d\u6742\u7cfb\u7edf\u3002\u6bd4\u5982\u770b\u770b\u6211\u4eec\u624b\u673a\u4e0a\u7684\u5e94\u7528\uff0c\u51e0\u4e4e\u6bcf\u4e2a\u5e94\u7528\u4e4b\u95f4\u90fd\u662f\u5b8c\u5168\u9694\u79bb\u7684\uff0c\u5c3d\u7ba1\u7406\u8bba\u4e0a\u7528\u6237\u7684\u6570\u636e\u672c\u8eab\u5e94\u8be5\u5728\u4e0d\u540c\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u5171\u4eab\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u4e00\u4e2a\u5e94\u7528\u5f88\u96be\u4f7f\u7528\u6216\u83b7\u53d6\u53e6\u4e00\u4e2a\u5e94\u7528\u4ea7\u751f\u7684\u6570\u636e\u3002\u8fd9\u9020\u6210\u7684\u7ed3\u679c\u5c31\u662f\uff0c\u867d\u7136\u73b0\u5728\u7684\u5e94\u7528\u5546\u5e97\u6709\u6210\u5343\u4e0a\u4e07\u7684\u5e94\u7528\uff0c\u6bcf\u4e2a\u7528\u6237\u4e5f\u4e0b\u8f7d\u4e86\u975e\u5e38\u591a\u5728\u529f\u80fd\u548c\u610f\u4e49\u4e0a\u5177\u6709\u76f8\u5173\u6027\u7684\u5e94\u7528\uff0c\u4f46\u662f\u8fd9\u4e9b\u5e94\u7528\u4e4b\u95f4\u4ece\u4e0d\u80fd\u771f\u6b63\u8fdb\u884c\u4ea4\u4e92\uff0c\u4f7f\u5f97\u8fd9\u79cd\u201c\u591a\u5e94\u7528\u201d\u7684\u5f62\u6001\u6700\u7ec8\u6ca1\u6709\u6d8c\u73b0\u51fa\u66f4\u590d\u6742\u3001\u66f4\u4e30\u5bcc\u3001\u66f4\u667a\u80fd\u7684\u6570\u5b57\u4f53\u9a8c\u3002\u6bcf\u4e2a\u5e94\u7528\u672c\u8eab\u5c31\u50cf\u4e00\u4e2a\u5b8c\u5168\u72ec\u7acb\u7684\u5c0f\u529f\u80fd\uff0c\u751a\u81f3\u5e94\u7528\u4e4b\u95f4\u7531\u4e8e\u6570\u636e\u683c\u5f0f\u7684\u4e0d\u540c\uff0c\u5373\u4f7f\u662f\u7528\u6237\u60f3\u8981\u624b\u52a8\u5728\u5e94\u7528\u4e4b\u95f4\u5f62\u6210\u8fd9\u79cd\u534f\u4f5c\uff0c\u4e5f\u65e0\u6cd5\u64cd\u4f5c\uff0c\u5f53\u7136\u9664\u4e86\u7b80\u5355\u7684\u56fe\u7247\u3001\u89c6\u9891\u3001\u6587\u5b57\u7b49\u8fd9\u51e0\u79cd\u6807\u51c6\u7684\u683c\u5f0f\u4e4b\u95f4\u53ef\u4ee5\u624b\u52a8\u5b9e\u73b0\u4ea4\u4e92\uff0c\u5176\u5b83\u66f4\u591a\u7684\u6570\u636e\u662f\u6ca1\u6709\u901a\u7528\u683c\u5f0f\u7684\u3002"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u8bf4\u660e\uff1a\u8fd9\u91cc\u5e76\u4e0d\u662f\u8bf4\u6570\u5b57\u4e16\u754c\u5b8c\u5168\u6ca1\u6709\u590d\u6742\u7cfb\u7edf\u4ea7\u751f\uff0c\u4f46\u8fd9\u91cc\u672c\u6587\u8bf4\u7684\u4e3b\u8981\u662f\u9762\u5411C\u7aef\u6d88\u8d39\u8005\u7684\u5e94\u7528\u4e4b\u95f4\u3002\u5176\u5b83\u7684\u4e0d\u540c\u5c42\u5ea6\u7684\u4e92\u64cd\u4f5c\u8fd8\u662f\u6709\u7684\uff0c\u4f46\u662f\u7531\u4e8e\u4f20\u7edf\u8f6f\u4ef6\u6784\u9020\u67b6\u6784\u7684\u4e00\u4e9b\u57fa\u672c\u7684\u80fd\u529b\u9650\u5236\uff0c\u6240\u4ee5\u5927\u90e8\u5206\u8fd9\u79cd\u4e92\u64cd\u4f5c\u6027\u7684\u67b6\u6784\u90fd\u53d1\u751f\u5728web\u4e4b\u95f4\uff0cWeb\u901a\u8fc7HTTP\u7b49\u534f\u8bae\u63d0\u4f9b\u4e86\u4e00\u4e9b\u57fa\u672c\u4f46\u76f8\u5bf9\u6bd4\u8f83\u590d\u6742\u7684\u4e92\u64cd\u4f5c\u673a\u5236\uff0c\u5927\u90e8\u5206\u4f01\u4e1a\u5185\u90e8\u7684\u4e1a\u52a1\u4e4b\u95f4\u90fd\u662f\u57fa\u4e8e\u7f51\u7edc\u4f20\u8f93\u534f\u8bae\u6765\u5b9e\u73b0\u7684\u5fae\u670d\u52a1\u7684\u5f62\u5f0f\u6784\u6210\u7684\uff0c\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u5f62\u6210\u4e86\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u3002\u6b64\u5916\uff0c\u8d85\u94fe\u63a5URL\u4f7f\u5f97\u4e92\u8054\u7f51\u4e0a\u7684\u4fe1\u606f\u4e4b\u95f4\u90fd\u53ef\u4ee5\u8fde\u63a5\u8d77\u6765\uff0c\u5c3d\u7ba1\u5b83\u53ea\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u94fe\u63a5\uff0c\u4f46\u662f\u8fd9\u4e9b\u94fe\u63a5\u6784\u6210\u7684\u4fe1\u606f\u80cc\u540e\u7684\u76f8\u5173\u6027\u6784\u6210\u4e86\u4e00\u4e9b\u903b\u8f91\u5173\u7cfb\uff0c\u4f7f\u5f97\u5b83\u4eec\u4e5f\u6d8c\u73b0\u51fa\u4e86\u667a\u80fd\uff0c\u4f8b\u5982\u6211\u4eec\u6cbf\u7740\u8fd9\u4e9b\u94fe\u63a5\u53ef\u4ee5\u5bfb\u627e\u5230\u5f88\u591a\u5f88\u6df1\u5c42\u6b21\u6709\u4ef7\u503c\u7684\u4fe1\u606f\uff0c\u8fd9\u4e9b\u4fe1\u606f\u4f5c\u4e3a\u77e5\u8bc6\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u89e3\u51b3\u4e00\u4e9b\u751f\u6d3b\u4e2d\u7684\u91cd\u5927\u95ee\u9898\u3002")),(0,a.kt)("p",null,"\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u6784\u5efa\u4e00\u5957\u65b0\u7684\u8f6f\u4ef6\u6784\u9020\u7684\u65b9\u6cd5\uff0c\u4f7f\u5f97\u4eba\u4eec\u53ef\u4ee5\u66f4\u65b9\u4fbf\u5730\u53bb\u6784\u9020\u590d\u6742\u7cfb\u7edf\u5f62\u5f0f\u7684\u4fe1\u606f\u7cfb\u7edf\uff0c\u8fd9\u5c06\u5e26\u6765\u5e27\u6570\u7684\u6570\u5b57\u667a\u80fd\u7684\u53d8\u9769\uff0c\u8fd9\u5c06\u4f7f\u5f97\u8ba1\u7b97\u7684\u80fd\u529b\u8fdc\u8fdc\u8d85\u8d8a\u4e00\u822c\u7684\u903b\u8f91\u8ba1\u7b97\u3002"),(0,a.kt)("h5",{id:"\u8ba1\u7b97\u7684\u672c\u8d28"},"\u8ba1\u7b97\u7684\u672c\u8d28"),(0,a.kt)("p",null,"\u5728\u8ba1\u7b97\u673a\u548c\u4fe1\u606f\u9886\u57df\uff0c\u6211\u4eec\u7406\u89e3\u7684\u8ba1\u7b97\u901a\u5e38\u662f\u6307\u6309\u7167\u4e00\u5b9a\u7684\u903b\u8f91\u548c\u6d41\u7a0b\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u7f16\u7a0b\u8bed\u8a00\u5b9a\u4e49\u4e86\u6211\u4eec\u63cf\u8ff0\u903b\u8f91\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u7684\u903b\u8f91\u7528\u8fd9\u79cd\u7f16\u7a0b\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u5e76\u5f62\u6210\u4ee3\u7801\u7a0b\u5e8f\uff0c\u6700\u540e\u5728\u8ba1\u7b97\u673a\u4e0a\u88ab\u6267\u884c\u4ee5\u5b8c\u6210\u8fd9\u4e2a\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u5f53\u6211\u4eec\u6784\u5efa\u4e86\u4e00\u4e2a\u5177\u6709\u590d\u6742\u7cfb\u7edf\u7279\u6027\u7684\u4fe1\u606f\u7cfb\u7edf\u7684\u65f6\u5019\uff0c\u8fd9\u4e9b\u6d8c\u73b0\u7684\u80fd\u529b\u662f\u6211\u4eec\u201c\u8ba1\u7b97\u201d\u51fa\u6765\u7684\u5417\uff1f\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u53ef\u80fd\u8ba1\u7b97\u7684\u672c\u8d28\u5e76\u6ca1\u6709\u90a3\u4e48\u7b80\u5355\u3002"),(0,a.kt)("p",null,"\u5728\u751f\u7269\u5b66\u3001\u6570\u5b66\u3001\u7edf\u8ba1\u5b66\u3001\u7269\u7406\u5b66\u7b49\u8ddf\u590d\u6742\u7cfb\u7edf\u76f8\u5173\u7684\u79d1\u5b66\u9886\u57df\uff0c\u79d1\u5b66\u5bb6\u4e00\u76f4\u5728\u5c1d\u8bd5\u4e3a\u590d\u6742\u7cfb\u7edf\u5bfb\u627e\u4e00\u4e9b\u6570\u5b66\u4e0a\u7684\u7406\u8bba\uff0c\u590d\u6742\u7cfb\u7edf\u7684\u89c6\u89d2\u81f3\u5c11\u4ece\u4e0a\u4e2a\u4e16\u7eaa50\u5e74\u4ee3\u5c31\u5df2\u7ecf\u5728\u79d1\u5b66\u7814\u7a76\u8005\u4e2d\u95f4\u88ab\u5e7f\u6cdb\u601d\u8003\u548c\u63a5\u53d7\uff0c\u4f8b\u5982\u8457\u540d\u7684\u4eba\u5de5\u667a\u80fd\u5148\u9a71 ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Herbert_A._Simon"},"Herbert A. Simon")," \u5c31\u662f\u6700\u65e9\u5bf9\u590d\u6742\u7cfb\u7edf\u7684\u67b6\u6784\u8fdb\u884c\u5206\u6790\u7684\u79d1\u5b66\u5bb6\uff0c\u5728\u4ed6\u7684\u8457\u4f5c\u300a",(0,a.kt)("em",{parentName:"p"},(0,a.kt)("a",{parentName:"em",href:"https://en.wikipedia.org/wiki/The_Sciences_of_the_Artificial"},"The Sciences of the Artificial")),"\u300b\u5c31\u5927\u91cf\u4f7f\u7528\u590d\u6742\u7cfb\u7edf\u7684\u89c6\u89d2\u6765\u5206\u6790\u6240\u6709\u7531\u4eba\u7c7b\u53c2\u4e0e\u7684\u4eba\u5de5\u7cfb\u7edf\u3002\u4ed6\u63d0\u51fa\u4e86\u4e00\u4e9b\u6784\u5efa\u8fd9\u79cd\u7cfb\u7edf\u7684\u539f\u5219\u3001\u65b9\u6cd5\u548c\u601d\u7ef4\uff0c\u6bd4\u5982\u901a\u8fc7\u76ee\u6807\u3001\u754c\u9762\u548c\u73af\u5883\u7684\u5173\u7cfb\u6765\u63cf\u8ff0\u4eba\u5de5\u7cfb\u7edf\uff0c\u5176\u4e2d\u7684\u754c\u9762\u5176\u5b9e\u5c31\u76f8\u5f53\u4e8e\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u8fb9\u754c\uff0c\u754c\u9762\u5185\u90e8\u7684\u5c31\u662f\u5185\u90e8\u529f\u80fd\uff0c\u7cfb\u7edf\u9762\u5bf9\u7684\u5916\u90e8\u73af\u5883\u5c31\u662f\u5176\u4ea4\u4e92\u90e8\u5206\uff0c\u800c\u76ee\u6807\u6765\u6e90\u4e8e\u8fdb\u5316\u8bba\u91cc\u9762\u7684\u9009\u62e9\u3002\u8fd9\u4e9b\u7814\u7a76\u5de5\u4f5c\u4e5f\u4e3a\u540e\u6765\u7684\u590d\u6742\u7cfb\u7edf\u5728\u5de5\u7a0b\u4e0a\u5b9e\u65bd\u63d0\u4f9b\u4e86\u8bb8\u591a\u5b9d\u8d35\u7684\u4ef7\u503c\u3002"),(0,a.kt)("p",null,"\u7136\u800c\uff0c\u6700\u8fd1\u51e0\u5341\u5e74\u6765\uff0c\u5c3d\u7ba1\u968f\u7740\u751f\u7269\u5b66\u3001\u7269\u7406\u3001\u5316\u5b66\u7b49\u5b66\u79d1\u7684\u98de\u901f\u53d1\u5c55\u7ed9\u590d\u6742\u7cfb\u7edf\u7684\u7814\u7a76\u63d0\u4f9b\u4e86\u5f88\u591a\u4f9d\u636e\uff0c\u4f46\u662f\u4eba\u4eec\u81f3\u4eca\u4f9d\u7136\u6ca1\u6709\u627e\u5230\u5173\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u7edf\u4e00\u7684\u6570\u5b66\u7406\u8bba\u3002\u66f4\u591a\u7684\u7814\u7a76\u8005\u90fd\u504f\u5411\u4e8e\u590d\u6742\u7cfb\u7edf\u53ef\u80fd\u6ca1\u6709\u50cf\u5176\u5b83\u81ea\u7136\u79d1\u5b66\u4e00\u6837\u5177\u6709\u6bd4\u8f83\u660e\u786e\u7684\u7edf\u4e00\u7684\u6570\u5b66\u7406\u8bba\u3002\u66f4\u591a\u662f\u4ece\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u6bd4\u8f83\u5177\u6709\u5171\u6027\u7684\u4e00\u4e9b\u7279\u5f81\u53bb\u7814\u7a76\u548c\u4f7f\u7528\u590d\u6742\u7cfb\u7edf\u3002"),(0,a.kt)("p",null,"\u5206\u5b50\u751f\u7269\u5b66John E Mayfield\u5728\u4ed6\u7684\u8457\u4f5c\u300aThe Engine of Complexity: Evolution as Computation\u300b\u4e2d\u63d0\u51fa\u4e86\u4e00\u79cd\u5173\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u89e3\u91ca\uff0c\u5373\u5c06\u8fdb\u5316\u770b\u4f5c\u4e00\u79cd\u8ba1\u7b97\uff0c\u8fd9\u6837\u8ba1\u7b97\u5c31\u662f\u6240\u6709\u590d\u6742\u7cfb\u7edf\u80cc\u540e\u7684\u5f15\u64ce\u3002\u8fd9\u672c\u4e66\u7684 ",(0,a.kt)("a",{parentName:"p",href:"https://www.amazon.com/stores/author/B00DO8488U/about"},"\u4f5c\u8005\u4ecb\u7ecd")," \u5982\u4e0b\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"From an early age John E Mayfield was fascinated with science of all kinds. This broad interest led to a BA in physics, a PhD in biophysics, and an academic career in the area of molecular biology. In the late 1990s he was introduced to evolutionary computer algorithms and became fascinated by the relationships between biological evolution and computer based evolution and more generally in the linkages between computation and biological process. The Engine of Complexity, Evolution as Computation is based on his consequent studies. The book shows how biological evolution is a special case of a more general computational notion of evolution, and how that general view of evolution explains not only how life is possible but also how human technology and most or all complex outcomes of human society are possible. It is his first book.")),(0,a.kt)("p",null,"John E Mayfield\u7684\u4e3b\u8981\u7814\u7a76\u65b9\u5411\u662f\u5173\u4e8e\u8fdb\u5316\u7684\u4e00\u822c\u6027\u7406\u8bba\uff0c\u4ed6\u6307\u51fa\uff0c\u4f20\u7edf\u7684\u590d\u6742\u7cfb\u7edf\u4e4b\u6240\u4ee5\u5f88\u96be\u5f62\u6210\u7edf\u4e00\u7684\u6570\u5b66\u7406\u8bba\uff0c\u4e3b\u8981\u662f\u56e0\u4e3a\u7cfb\u7edf\u4e4b\u95f4\u4ea4\u4e92\u5173\u7cfb\u662f\u975e\u7ebf\u6027\u7684\uff0c\u800c\u8ba1\u7b97\u673a\u7684\u903b\u8f91\u8ba1\u7b97\u80fd\u529b\u6b63\u662f\u89e3\u51b3\u975e\u7ebf\u6027\u5173\u7cfb\u7684\u65b9\u6cd5\uff0c\u4e14\u5177\u6709\u5f88\u5f3a\u5927\u8868\u8fbe\u80fd\u529b\uff0c\u6240\u4ee5\u4ed6\u53d1\u73b0\u5c06\u8fd9\u4e24\u79cd\u89c6\u89d2\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u7528\u8ba1\u7b97\u7684\u89c2\u70b9\u5c31\u53ef\u4ee5\u89e3\u91ca\u51e0\u4e4e\u6240\u6709\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u3002"),(0,a.kt)("p",null,"\u4f5c\u8005\u6307\u51fa\uff0c\u8ba1\u7b97\u673a\u7a0b\u5e8f\u662f\u7531\u80fd\u591f\u5bfc\u81f4\u8ba1\u7b97\u673a\u5185\u90e8\u53d1\u751f\u7279\u5b9a\u7684\u72b6\u6001\u5e8f\u5217\u5e76\u4ea7\u751f\u8f93\u51fa\u7684\u547d\u4ee4\u7ec4\u6210\u3002\u6570\u636e\u53ef\u4ee5\u89c6\u4e3a\u5bf9\u5916\u90e8\u4e16\u754c\u67d0\u65b9\u9762\u7684\u8868\u793a\uff0c\u8fd9\u6837\u770b\u6765\uff0c\u8ba1\u7b97\u5c31\u662f\u5c06\u65b9\u6cd5\u7684\u8868\u793a\uff08\u7b97\u6cd5\uff09\u4f5c\u7528\u4e8e\u5bf9\u4e16\u754c\u67d0\u65b9\u9762\u7684\u8868\u793a\uff08\u6570\u636e\uff09\u4ea7\u751f\u5185\u90e8\u8868\u793a\uff08\u673a\u5668\u72b6\u6001\uff09\u7684\u5e8f\u5217\uff0c\u5e76\u5f97\u5230\u6700\u7ec8\u7684\u8868\u793a\uff08\u8f93\u51fa\uff09\u3002\u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u5185\u90e8\u72b6\u6001\u4e0e\u8f93\u5165\u72b6\u6001\u4e92\u52a8\u4ea7\u751f\u65b0\u7684\u5185\u90e8\u72b6\u6001\uff0c\u6700\u7ec8\u72b6\u6001\u5c31\u662f\u8f93\u51fa\u3002"),(0,a.kt)("p",null,"\u90a3\u4e48\u5982\u679c\u7269\u7406\u7684\u8fc7\u7a0b\u4e5f\u662f\u8ba1\u7b97\uff0c\u7a0b\u5e8f\u5728\u54ea\uff1f\u4f5c\u8005\u4ee5\u5982\u4f55\u89e3\u91ca\u4e00\u7c92\u76d0\u4e3a\u4f8b\u7528\u8ba1\u7b97\u7684\u89c2\u70b9\u6765\u89e3\u91ca\u5316\u5b66\u53cd\u5e94\uff0c\u98df\u76d0\u662f\u7531\u94a0\u548c\u6c2f\u7ec4\u6210\uff0c\u5f53\u7b49\u91cf\u7684\u94a0\u539f\u5b50\u548c\u6c2f\u539f\u5b50\u6df7\u5408\u5230\u4e00\u8d77\uff0c\u5c31\u4f1a\u53d1\u751f\u81ea\u53d1\u7684\u53cd\u5e94\uff0c\u8fd9\u4e2a\u5316\u5b66\u53cd\u5e94\u4f1a\u91ca\u653e\u70ed\u80fd\u91cf\uff0c\u6bcf\u4e2a\u94a0\u539f\u5b50\u5931\u53bb\u4e00\u4e2a\u7535\u5b50\uff0c\u6bcf\u4e2a\u6c2f\u539f\u5b50\u83b7\u5f97\u4e00\u4e2a\u7535\u5b50\u3002\u6839\u636e\u5e93\u4ed1\u5b9a\u5f8b\uff0c\u5e26\u6b63\u7535\u7684\u94a0\u79bb\u5b50\u548c\u5e26\u8d1f\u7535\u7684\u6c2f\u79bb\u5b50\u76f8\u4e92\u5438\u5f15\uff0c\u4f46\u4e0d\u80fd\u8ddd\u79bb\u592a\u8fd1\uff0c\u56e0\u4e3a\u586b\u5145\u7684\u80fd\u7ea7\uff08\u5316\u5b66\u7684\u8f68\u9053\uff09\u4e0d\u80fd\u76f8\u4e92\u6e17\u900f\u3002\u5f53\u6240\u6709\u94a0\u79bb\u5b50\u90fd\u88ab\u6c2f\u79bb\u5b50\u5305\u56f4\uff0c\u6c2f\u79bb\u5b50\u4e5f\u88ab\u94a0\u79bb\u5b50\u5305\u56f4\uff0c\u5f62\u6210\u975e\u5e38\u89c4\u5219\u76843\u7ef4\u7ed3\u6784\uff0c\u76f8\u62b5\u89e6\u7684\u89c4\u5219\u65f6\u95f4\u5c31\u4f1a\u8fbe\u5230\u6700\u4f18\u5e73\u8861\u3002\u80fd\u7ea7\u7684\u7269\u7406\u7ef4\u5ea6\u51b3\u5b9a\u4e86\u4f8b\u5b50\u4e4b\u95f4\u7684\u6700\u4f18\u8ddd\u79bb\u3002\u94a0\u79bb\u5b50\u548c\u6c2f\u79bb\u5b50\u5177\u6709\u4e0d\u540c\u7684\u5927\u5c0f\uff0c\u80fd\u5e73\u8861\u7269\u7406\u548c\u51e0\u4f55\u4e0d\u540c\u9700\u6c42\u7684\u72b6\u6001\u662f\u4e00\u4e2a\u89c4\u5219\u7684\u7f51\u683c\uff0c\u6bcf\u4e2a\u6c2f\u79bb\u5b50\u5468\u56f4\u67096\u4e2a\u94a0\u79bb\u5b50\uff0c\u6bcf\u4e2a\u94a0\u79bb\u5b50\u5468\u56f4\u4e5f\u67096\u4e2a\u6c2f\u79bb\u5b50\u3002\u8fd9\u4e2a\u89c4\u5219\u7684\u7acb\u65b9\u4f53\u7ed3\u6784\u5411\u5404\u4e2a\u65b9\u5411\u5ef6\u4f38\uff0c\u4ece\u800c\u5f62\u6210\u6211\u4eec\u6240\u719f\u6089\u7684\u76d0\u6676\u3002\u5728\u9002\u5f53\u7684\u6e29\u5ea6\u548c\u6d53\u5ea6\u6761\u4ef6\u4e0b\u94a0\u79bb\u5b50\u548c\u6c2f\u79bb\u5b50\u76f8\u9047\u5c31\u4f1a\u81ea\u53d1\u5f62\u6210\u8fd9\u79cd\u7ed3\u6784\u3002"),(0,a.kt)("p",null,"\u5728\u4e0a\u8ff0\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6d89\u53ca\u4e24\u4e2a\u57fa\u672c\u7269\u7406\u5b9a\u5f8b\uff0c\u4e00\u4e2a\u662f\u5e93\u4ed1\u5b9a\u5f8b\uff0c\u5b83\u8bf4\u660e\u7535\u8377\u8d8a\u63a5\u8fd1\uff0c\u4f5c\u7528\u529b\u5c31\u8d8a\u5927\u3002\u4f46\u5982\u679c\u4ec5\u4ec5\u662f\u8fd9\u6837\uff0c\u94a0\u79bb\u5b50\u548c\u6c2f\u79bb\u5b50\u5c31\u4f1a\u6324\u788e\u5728\u4e00\u8d77\u3002\u800c\u8fd9\u4e00\u5207\u6ca1\u6709\u53d1\u751f\u662f\u56e0\u4e3a\u53e6\u4e00\u4e2a\u91cf\u5b50\u529b\u5b66\u4e2d\u7684\u88ab\u79f0\u4e3a\u6ce1\u5229\u4e0d\u76f8\u5bb9\u539f\u7406\u7684\u89c4\u5219\u3002\u91cf\u5b50\u529b\u5b66\u89c4\u5219\u7684\u4e00\u4e2a\u7279\u70b9\u662f\u7cfb\u7edf\u662f\u6309\u201c\u80fd\u7ea7\u201d\u5212\u5206\u7684\uff0c\u5bf9\u4e8e\u539f\u5b50\u8fd9\u610f\u5473\u7740\u7535\u5b50\u5904\u4e8e\u67d0\u4e2a\u80fd\u7ea7\u5e76\u4e14\u4e0e\u8d28\u5b50\u7684\u8ddd\u79bb\u4e0d\u80fd\u4f4e\u4e8e\u6700\u4f4e\u7684\u80fd\u7ea7\u3002\u8fd9\u79cd\u89c4\u5219\u7684\u7ed3\u679c\u662f\u4f7f\u5f97\u4e0d\u540c\u7684\u80fd\u7ea7\u53ea\u80fd\u5360\u636e\u4e00\u5b9a\u6570\u91cf\u7684\u7535\u5b50\u3002"),(0,a.kt)("p",null,"\u91cf\u5b50\u529b\u5b66\u3001\u5e93\u4ed1\u5b9a\u5f8b\u4ee5\u53ca\u6570\u5b57\u7684\u76f8\u4e92\u4f5c\u7528\u8d4b\u4e88\u4e86\u6bcf\u79cd\u5316\u5b66\u5143\u7d20\u72ec\u6709\u7684\u7279\u5f81\u3002John E Mayfield\u4ece\u8ba1\u7b97\u7684\u89c2\u70b9\u770b\uff0c\u94a0\u548c\u6c2f\u539f\u5b50\u5404\u81ea\u5e26\u6709\u81ea\u8eab\u8868\u793a\u7684\u4fe1\u606f\uff0c\u5f53\u4e00\u5b9a\u7684\u6761\u4ef6\u53d1\u751f\u65f6\uff0c\u5b83\u4eec\u4f1a\u76f8\u4e92\u4f5c\u7528\uff0c\u53d1\u751f\u76f8\u4e92\u4f5c\u7528\u7684\u8ba1\u7b97\u8fc7\u7a0b\u6b63\u662f\u7531\u57fa\u672c\u7684\u7269\u7406\u89c4\u5219\u5f15\u8d77\u7684\uff0c\u4f8b\u5982\u8fd9\u91cc\u7684\u5e93\u4ed1\u5b9a\u5f8b\u548c\u91cf\u5b50\u529b\u5b66\u89c4\u5219\uff0c\u8fd9\u4e9b\u57fa\u7840\u7684\u7269\u7406\u89c4\u5f8b\u7f16\u7801\u4e86\u5176\u4e2d\u7684\u8ba1\u7b97\u7b97\u6cd5\u3002"),(0,a.kt)("p",null,"\u6309\u7167\u8fd9\u79cd\u89c6\u89d2\uff0c\u6240\u6709\u7684\u8fdb\u5316\u7cfb\u7edf\u6216\u8005\u590d\u6742\u7cfb\u7edf\u90fd\u53ef\u4ee5\u7528\u8ba1\u7b97\u7684\u89c2\u70b9\u8fdb\u884c\u89e3\u91ca\u3002\u8fd9\u79cd\u8ba1\u7b97\u7684\u89c6\u89d2\u5bf9\u4e8e\u6211\u4eec\u6784\u5efa\u8f6f\u4ef6\u8ba1\u7b97\u67b6\u6784\u6700\u6838\u5fc3\u7684\u610f\u4e49\u5728\u4e8e\uff0c\u8fd9\u79cd\u7cfb\u7edf\u7684\u8ba1\u7b97\u662f\u81ea\u52a8\u53d1\u751f\u7684\uff0c\u5b83\u6ca1\u6709\u67d0\u4e2a\u4e2d\u592e\u63a7\u5236\u5668\u3002\u5728\u7269\u7406\u8fc7\u7a0b\u79cd\uff0c\u4f5c\u8005\u5c06\u7269\u7406\u89c4\u5f8b\u5728\u6574\u4e2a\u8fdb\u5316\u8ba1\u7b97\u8fc7\u7a0b\u79cd\u5145\u5f53\u7684\u9a71\u52a8\u81ea\u53d1\u8ba1\u7b97\u7684\u65b9\u5f0f\u79f0\u4e3a\u201c\u514d\u8d39\u7684\u7ed3\u6784\u201d\uff0c\u5373\u6211\u4eec\u81ea\u7136\u754c\u7684\u6240\u6709\u57fa\u672c\u7684\u7269\u7406\u89c4\u5219\u9a71\u52a8\u7740\u6574\u4e2a\u5b87\u5b99\u79cd\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u56de\u5230\u6211\u4eec\u7684\u8f6f\u4ef6\u67b6\u6784\uff0c\u6211\u4eec\u5df2\u7ecf\u5177\u5907\u4e86\u5b9a\u4e49\u5b50\u7cfb\u7edf\u4ee5\u53ca\u8ba9\u5b50\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u80fd\u529b\uff0c\u90a3\u4e48\u5728\u6ca1\u6709\u4e2d\u592e\u63a7\u5236\u5668\u7684\u60c5\u51b5\u4e0b\uff0c\u600e\u6837\u5f62\u6210\u8fd9\u79cd\u81ea\u53d1\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u5462\uff1f\u8fd9\u5c31\u6d89\u53ca\u6211\u4eec\u7684\u7ec4\u4ef6\u53c2\u6570\u58f0\u660e\u4e0e\u5168\u5c40\u53d8\u91cf\u4e4b\u95f4\u7684\u89e3\u8026\uff0c\u5f53\u6211\u4eec\u7684\u7ec4\u4ef6\u53ea\u662f\u58f0\u660e\u5bf9\u67d0\u4e9b\u6570\u636e\u611f\u5174\u8da3\uff0c\u800c\u4e0d\u9700\u8981\u81ea\u5df1\u53bb\u83b7\u53d6\u8fd9\u4e9b\u6570\u636e\u7684\u5730\u5740\u7684\u65f6\u5019\uff0c\u501f\u52a9\u6211\u4eec\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u7cfb\u7edf\u5c31\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\u51fa\u5b83\u9700\u8981\u4e0e\u54ea\u4e9b\u5b50\u7cfb\u7edf\u8fdb\u884c\u4ea4\u4e92\uff0c\u6240\u4ee5\u7cfb\u7edf\u80fd\u591f\u52a8\u6001\u6839\u636e\u8fd9\u79cd\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u53d8\u5316\u6765\u51b3\u5b9a\u8fd9\u79cd\u4ea4\u4e92\u4e1c\u897f\uff0c\u5c3d\u7ba1\u7cfb\u7edf\u5728\u4e0d\u8fd8\u662f\u6709\u4e00\u4e2a\u7c7b\u4f3c\u7684\u5206\u914d\u5668\u5728\u5de5\u4f5c\uff0c\u4f46\u662f\u4ece\u7ec4\u4ef6\u6216\u8005\u5b50\u7cfb\u7edf\u770b\u6765\uff0c\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e0e\u5176\u5b83\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f",(0,a.kt)("strong",{parentName:"p"},"\u201c\u81ea\u53d1\u7684\u201d"),"\uff0c\u5373\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u58f0\u660e\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u5c31\u50cf\u539f\u5b50\u58f0\u660e\u4e86\u81ea\u5df1\u7684\u8868\u793a\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u53ea\u8981\u6761\u4ef6\u6ee1\u8db3\uff0c\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5c31\u53ef\u4ee5\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u4e2a\u6761\u4ef6\u5728\u7269\u7406\u8fc7\u7a0b\u4e2d\u662f\u81ea\u53d1\u8fdb\u884c\u7684\uff0c\u5728\u6211\u4eec\u7684\u7cfb\u7edf\u4e2d\u5b83\u4e5f\u662f\u81ea\u53d1\u8fdb\u884c\u7684\uff0c\u56e0\u4e3a\u7cfb\u7edf\u4f1a\u6839\u636e\u591a\u4e2a\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u6761\u4ef6\u8fdb\u884c\u5224\u65ad\uff0c\u6ee1\u8db3\u6761\u4ef6\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5c31\u4f1a\u88ab\u6267\u884c\u8ba1\u7b97\u3002")),(0,a.kt)("p",null,"\u8fd9\u91cc\u7cfb\u7edf\u7684\u8c03\u5ea6\u5145\u5f53\u4e86\u7269\u7406\u8fc7\u7a0b\u4e2d\u90a3\u4e9b\u7269\u7406\u5b9a\u5f8b\u5bf9\u5e94\u7684\u514d\u8d39\u7684\u7ed3\u6784\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u4e0d\u662f\u50cf\u7269\u7406\u8fc7\u7a0b\u90a3\u6837\u5177\u6709\u5404\u5f0f\u5404\u6837\u7684\u7269\u7406\u5b9a\u5f8b\u6765\u5b9a\u4e49\u4e0d\u540c\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5b9a\u4e49\u4e00\u4e2a\u7edf\u4e00\u7684\u89c4\u5219\uff0c\u8fd9\u4e2a\u89c4\u5219\u6839\u636e\u8f93\u5165\u8f93\u51fa\u7c7b\u578b\u6765\u8ba1\u7b97\u4ea4\u4e92\u7684\u6761\u4ef6\uff0c\u800c\u8fd9\u4e9b\u7c7b\u578b\u672c\u8eab\u7f16\u7801\u4e86\u5404\u79cd\u5404\u6837\u7684\u89c4\u5219\u3002"),(0,a.kt)("h5",{id:"\u8fdb\u5316\u7684\u7cfb\u7edf"},"\u8fdb\u5316\u7684\u7cfb\u7edf"),(0,a.kt)("p",null,"\u524d\u9762\u4e24\u8282\u8bba\u8ff0\u4e86\u590d\u6742\u7cfb\u7edf\u600e\u6837\u901a\u8fc7\u591a\u7cfb\u7edf\u975e\u7ebf\u6027\u548c\u81ea\u53d1\u7684\u7684\u4ea4\u4e92\uff0c\u6765\u6d8c\u73b0\u6574\u4e2a\u7cfb\u7edf\u7684\u667a\u80fd\uff0c\u4ee5\u53ca\u6211\u4eec\u7684\u8f6f\u4ef6\u67b6\u6784\u4f7f\u7528\u600e\u6837\u7684\u673a\u5236\u6765\u652f\u6491\u590d\u6742\u7cfb\u7edf\u7684\u8fd9\u79cd\u7ed3\u6784\u7279\u5f81\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u7136\u800c\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u662f\u600e\u4e48\u5f62\u6210\u7684\uff0c\u8fd9\u662f\u53e6\u4e00\u4e2a\u975e\u5e38\u6df1\u523b\u7684\u8bdd\u9898"),"\u3002\u4f20\u7edf\u7684\u4e00\u4e2a\u8f6f\u4ef6\u90fd\u662f\u7531\u67d0\u4e2a\u516c\u53f8\u5185\u90e8\u5927\u91cf\u7684\u7814\u53d1\u56e2\u961f\u901a\u8fc7\u6570\u4e2a\u6708\u4ee5\u53ca\u6570\u4e2a\u4e0d\u540c\u804c\u80fd\u7684\u56e2\u961f\u7684\u534f\u4f5c\u5171\u540c\u5b8c\u6210\u7684\uff0c\u5b83\u4eec\u7684\u4e00\u4e2a\u88ab\u8ba4\u4e3a\u7406\u6240\u5f53\u7136\u4ee5\u81f3\u4e8e\u6211\u4eec\u4e00\u822c\u90fd\u4e0d\u4f1a\u53bb\u601d\u8003\u7684\u7279\u5f81\u662f\uff1a\u4e00\u65e6\u5f00\u53d1\u5546\u53d1\u5e03\u4ea7\u54c1\uff0c\u5219\u610f\u5473\u7740\u6574\u4e2a\u8f6f\u4ef6\u4ea7\u54c1\u7684\u529f\u80fd\u5168\u90e8\u5f00\u653e\u5b8c\u6bd5\uff0c\u4ece\u5916\u754c\u7528\u6237\u611f\u77e5\u6765\u770b\uff0c\u4ed6\u4eec\u4e00\u4e0b\u5b50\u5c31\u5f00\u53d1\u51fa\u4e86\u4e00\u4e2a\u529f\u80fd\u786e\u5b9a\u4e14\u5b8c\u6574\u7684\u4ea7\u54c1\u3002"),(0,a.kt)("p",null,"\u5728\u4e0a\u8ff0\u8fd9\u6837\u4f20\u7edf\u7684\u8f6f\u4ef6\u4ea7\u54c1\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u8ba4\u4e3a\u5b83\u7684\u4e1a\u52a1\u903b\u8f91\u662f\u76f8\u5bf9\u5bb9\u6613\u88ab\u5f00\u53d1\u56e2\u961f\u7406\u89e3\u7684\uff0c\u56e0\u4e3a\u5c3d\u7ba1\u4e1a\u52a1\u7ec6\u8282\u90fd\u5e26\u6709\u5f88\u591a\u590d\u6742\u6027\uff0c\u4f46\u662f\u4e00\u4e2a\u56e2\u961f\u7814\u53d1\u7684\u67d0\u4e2a\u8f6f\u4ef6\u4ea7\u54c1\u5728\u6574\u4f53\u903b\u8f91\u4e0a\u5904\u4e8e\u67d0\u4e2a\u7279\u5b9a\u9886\u57df\uff0c\u6709\u4e00\u4e9b\u7279\u5b9a\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u5176\u590d\u6742\u5ea6\u57fa\u672c\u4e0a\u90fd\u662f\u5728\u53ef\u7ba1\u7406\u7684\u8303\u56f4\u4e4b\u5185\u3002\u4f46\u5982\u524d\u9762\u6240\u8ff0\uff0c\u5982\u679c\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\uff0c\u5b83\u7684\u590d\u6742\u5ea6\u662f\u5f88\u96be\u88ab\u4eba\u7406\u89e3\u548c\u7ba1\u7406\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5e94\u8be5\u600e\u6837\u53bb\u5f00\u53d1\u4e00\u4e2a\u4f60\u751a\u81f3\u90fd\u4e0d\u80fd\u7406\u89e3\u6574\u4f53\u529f\u80fd\u7684\u590d\u6742\u7cfb\u7edf\u4ea7\u54c1\u5462\uff1f"),(0,a.kt)("p",null,"\u56de\u5230\u524d\u9762\u7535\u5b50\u8d2d\u7269\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u5448\u73b0\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u90fd\u662f\u7531\u72ec\u7acb\u7684\u5b9e\u4f53\u5728\u5f00\u53d1\u53ca\u8fd0\u884c\uff0c\u8fd9\u662f\u590d\u6742\u7cfb\u7edf\u7684\u57fa\u672c\u7279\u5f81\uff1b"),(0,a.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u5185\u90e8\u90fd\u5728\u72ec\u7acb\u8fed\u4ee3\uff0c\u4f8b\u5982\u4ea4\u901a\u5b50\u7cfb\u7edf\u7531\u706b\u8f66\u5230\u52a8\u8f66\uff0c\u7531\u666e\u901a\u7684\u516c\u8def\u5230\u5168\u56fd\u9ad8\u901f\u8def\u7f51\uff1b\u7269\u6d41\u516c\u53f8\u7531\u4ee5\u524d\u7684\u957f\u9014\u914d\u9001\uff0c\u5230\u589e\u52a0\u6700\u540e\u4e00\u516c\u91cc\u7684\u9001\u8d27\u4e0a\u95e8\uff0c\u4e0a\u95e8\u53d6\u4ef6\uff1b"),(0,a.kt)("li",{parentName:"ul"},"\u518d\u6b21\uff0c\u6574\u4e2a\u7cfb\u7edf\u4e2d\u4e0d\u65ad\u6709\u65b0\u7684\u5b50\u7cfb\u7edf\u52a0\u5165\uff0c\u8fd9\u4e9b\u53ef\u80fd\u662f\u8ddf\u5176\u5b83\u67d0\u4e9b\u5b50\u7cfb\u7edf\u529f\u80fd\u76f8\u4f3c\u4f46\u662f\u5904\u7406\u4e0d\u540c\u7c7b\u578b\u4efb\u52a1\u7684\u5b50\u7cfb\u7edf\uff0c\u5982\u65b0\u589e\u4e0d\u540c\u7684\u7535\u5546\u5e73\u53f0\uff0c\u4ee5\u53ca\u65b0\u589e\u5feb\u9012\u516c\u53f8\uff1b\u4e5f\u53ef\u80fd\u662f\u57fa\u4e8e\u73b0\u6709\u6574\u4f53\u7cfb\u7edf\u80fd\u529b\u5ef6\u5347\u51fa\u6765\u7684\u5904\u7406\u65b0\u7684\u7c7b\u578b\u4e1a\u52a1\u7684\u5b50\u7cfb\u7edf\uff0c\u6bd4\u5982\u5916\u5356\u5c31\u662f\u4e00\u79cd\u4e0d\u540c\u4e8e\u4f20\u7edf\u7535\u5546\u7684\u670d\u52a1\u7c7b\u578b\uff0c\u4f46\u5b83\u662f\u57fa\u4e8e\u5728\u7ebf\u8d2d\u7269\u548c\u5feb\u9012\u53d1\u5c55\u5230\u4e00\u5b9a\u6210\u90fd\u65f6\u5019\u624d\u4f1a\u4ea7\u751f\u7684\u65b0\u7684\u670d\u52a1\u7c7b\u578b\uff0c\u53ca\u5b83\u7684\u51fa\u73b0\u9700\u8981\u57fa\u4e8e\u5176\u5b83\u7cfb\u7edf\u7684\u6f14\u8fdb\u3002")),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u8fc7\u7a0b\u6211\u4eec\u53ef\u4ee5\u770b\u51fa\uff0c\u6574\u4e2a\u7535\u5b50\u8d2d\u7269\u7684\u590d\u6742\u7cfb\u7edf\u4e0d\u662f\u50cf\u4f20\u7edf\u8f6f\u4ef6\u90a3\u6837\u4e00\u6b21\u6027\u6784\u5efa\u51fa\u6765\u7684\uff0c\u5b83\u4eec\u662f\u8fdb\u5316\u51fa\u6765\u7684\u3002\u6240\u6709\u590d\u6742\u7cfb\u7edf\u7684\u529f\u80fd\u6f14\u8fdb\u90fd\u662f\u4e00\u4e2a\u8fdb\u5316\u7684\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u4e0b\u9762\u6211\u4eec\u6765\u5206\u6790\u6211\u4eec\u7684\u8f6f\u4ef6\u67b6\u6784\u5728\u4e00\u4e2a\u8fdb\u5316\u7cfb\u7edf\u7684\u6846\u67b6\u4e0b\u662f\u600e\u4e48\u5de5\u4f5c\u7684\u3002\u6839\u636e\u300a\u590d\u6742\u7684\u5f15\u64ce\u300b\u4e00\u4e66\uff0c\u6240\u6709\u8fdb\u5316\u8fc7\u7a0b\u7684\u5171\u540c\u7279\u5f81\u5305\u62ec\u4ee5\u4e0b5\u4e2a\u8981\u7d20\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u4e2a\u4f53"),"\uff0c\u5b83\u4eec\u4e00\u822c\u6709\u5404\u79cd\u540d\u5b57\uff0c\u6bd4\u5982\uff1a\u751f\u7269\u3001\u81ea\u4e3b\u4f53\u3001\u57fa\u56e0\u3001\u6982\u5ff5\u548c\u516c\u53f8\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u53ef\u9057\u4f20\u7684\u7279\u5f81"),"\uff0c\u4e2a\u4f53\u7684\u63cf\u8ff0\u4fe1\u606f\u3002\u4ee5\u67d0\u79cd\u5f62\u5f0f\u7f16\u7801\u4e3a\u4e2a\u4f53\u672c\u8eab\u7684\u4e00\u90e8\u5206\uff0c\u751f\u7269\u7684\u8fd9\u79cd\u4fe1\u606f\u7f16\u7801\u4e3aDNA\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u4e2a\u4f53\u53ef\u4ee5\u7e41\u6b96\u6216\u590d\u5236"),"\uff0c\u901a\u8fc7\u8fd9\u4e2a\u673a\u5236\uff0c\u4e2a\u4f53\u4ece\u7236\u8f88\u6216\u4e4b\u524d\u7684\u4e2a\u4f53\u62f7\u8d1d\u7f16\u7801\u4fe1\u606f\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u53d8\u5316\u673a\u5236"),"\uff0c\u4fe1\u606f\u5728\u590d\u5236\u3001\u7e41\u6b96\u6216\u7ef4\u62a4\u8fc7\u7a0b\u4e2d\u5fc5\u987b\u6709\u673a\u4f1a\u4ea7\u751f\u9002\u5e94\u5ea6\u7684\u6539\u53d8\u3002\u5728\u8bb8\u591a\u7cfb\u7edf\u4e2d\u53d8\u5316\u673a\u5236\u5c31\u662f\u590d\u5236\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u9519\u8bef\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u57fa\u4e8e\u7279\u5f81\u7684\u9009\u62e9"),"\uff0c\u7e41\u6b96\uff08\u6216\u590d\u5236\uff09\u7684\u6210\u529f\u5fc5\u987b\u90e8\u5206\u53d6\u51b3\u4e8e\u5404\u4e2a\u4f53\u7f16\u7801\u4fe1\u606f\u6240\u63cf\u8ff0\u7684\u7279\u5f81\u3002")),(0,a.kt)("p",null,"\u53ea\u8981\u7cfb\u7edf\u540c\u65f6\u5177\u5907\u4e86\u8fd95\u4e2a\u8981\u7d20\uff0c\u4e2a\u4f53\u7ec4\u6210\u7684\u7fa4\u4f53\u4e2d\u7684\u7f16\u7801\u4fe1\u606f\u4ee5\u53ca\u76f8\u5e94\u7684\u4e2a\u4f53\u7279\u5f81\u5c31\u4f1a\u968f\u7740\u65f6\u95f4\u6539\u53d8\uff1b\u9057\u4f20\u7684\u4e2a\u4f53\u7279\u6027\u4e5f\u5fc5\u7136\u4f1a\u8d8a\u6765\u8d8a\u9002\u5e94\u51b3\u5b9a\u7e41\u6b96\uff08\u590d\u5236\uff09\u6210\u529f\u7387\u7684\u6807\u51c6\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u662f\u8fdb\u5316\u8bba\u4e2d\u7684\u77e5\u8bc6\uff0c\u6bd4\u5982\u5728\u751f\u7269\u7684\u8fdb\u5316\u8bba\u4e2d\uff0c\u751f\u7269\u4e2a\u4f53\u643a\u5e26DNA\uff0c\u5176\u4e2d\u7f16\u7801\u4e86\u4e2a\u4f53\u672c\u8eab\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u7279\u5f81\u53ef\u4ee5\u901a\u8fc7\u7e41\u6b96\u88ab\u590d\u5236\u5230\u65b0\u7684\u4e2a\u4f53\u4e2d\uff0c\u5e76\u4e14\u8fd9\u4e2a\u590d\u5236\u7684\u8fc7\u7a0b\u4e2d\u53ef\u4ee5\u4ea7\u751f\u4e00\u5b9a\u7684\u53d8\u5f02\uff0c\u8fd9\u79cd\u53d8\u5f02\u901a\u5e38\u662f\u968f\u673a\u7684\uff0c\u8fdb\u800c\u5f62\u6210\u4e00\u4e9b\u65b0\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u65b0\u7684\u7279\u5f81\u80fd\u5426\u88ab\u4fdd\u7559\u4e0b\u6765\uff0c\u53d6\u51b3\u4e8e\u81ea\u7136\u9009\u62e9\uff0c\u5373\u5b83\u80fd\u4e0d\u80fd\u5177\u6709\u66f4\u5927\u7684\u4f18\u52bf\u4fdd\u969c\u4e2a\u4f53\u7684\u751f\u5b58\u3002\u5177\u6709\u8fd9\u79cd\u903b\u8f91\u7ed3\u6784\u7684\u7cfb\u7edf\u4f1a\u7d2f\u79ef\u9002\u5e94\u9009\u62e9\u6807\u51c6\u7684\u7f16\u7801\u4fe1\u606f\u3002\u5728\u81ea\u7136\u548c\u751f\u7269\u7cfb\u7edf\u4e2d\uff0c\u5b83\u4eec\u901a\u5e38\u5229\u7528\u968f\u673a\u53d8\u5316\u505a\u5230\u8fd9\u4e00\u70b9\uff0c\u6709\u65f6\u5019\u4e5f\u4f1a\u5229\u7528\u975e\u968f\u673a\u53d8\u5316\uff0c\u4ee5\u514d\u5076\u7136\u6027\u8fc7\u5927\uff0c\u4e0d\u5229\u4e8e\u4ea7\u751f\u6709\u7528\u6216\u6709\u8da3\u7684\u4e1c\u897f\u3002\u56e0\u6b64\u8fd9\u4e2a\u4fe1\u606f\u7d2f\u79ef\u548c\u6539\u8fdb\u7684\u8fc7\u7a0b\u5c31\u662f\u6982\u7387\u8ba1\u7b97\uff0c\u5b83\u6709\u6548\u7684\u539f\u56e0\u5f88\u7b80\u5355\uff0c\u5f88\u5c0f\u7684\u53d8\u5316\u901a\u5e38\u662f\u6709\u53ef\u80fd\u7684\uff0c\u800c\u65e0\u76ee\u7684\u7684\u5927\u53d8\u5316\u57fa\u672c\u4e0d\u53ef\u80fd\u53d1\u751f\uff0c\u901a\u8fc7\u5c0f\u7684\u5e76\u975e\u5f88\u4e0d\u53ef\u80fd\u7684\u53d8\u5316\uff0c\u5e76\u7d2f\u79ef\u597d\u7684\u53d8\u5316\uff0c\u5c31\u6709\u53ef\u80fd\u8fbe\u5230\u672c\u6765\u5f88\u96be\u8fbe\u5230\u7684\u76ee\u6807\u3002"),(0,a.kt)("p",null,"\u8fdb\u5316\u8bba\u7684\u601d\u60f3\u51e0\u4e4e\u53ef\u4ee5\u89e3\u91ca\u4e00\u5207\u751f\u7269\u548c\u5927\u81ea\u7136\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u4f46\u5982\u679c\u76f4\u63a5\u5c06\u8fd9\u4e00\u5957\u65b9\u5f0f\u4f5c\u7528\u4e8e\u6211\u4eec\u7684\u8f6f\u4ef6\u5f00\u53d1\u5219\u662f\u4e0d\u5408\u9002\u7684\uff0c\u9996\u5148\u5b8c\u5168\u4f9d\u8d56\u4e8e\u968f\u673a\u53d8\u5316\u7684\u6548\u7387\u4f1a\u6bd4\u8f83\u4f4e\uff0c\u5176\u6b21\u901a\u8fc7\u6f2b\u957f\u7684\u81ea\u7136\u9009\u62e9\u5219\u4f1a\u4f7f\u7cfb\u7edf\u7684\u6f14\u8fdb\u5f88\u6162\uff0c\u60f3\u60f3\u6211\u4eec\u4eba\u7c7b\u7684\u667a\u529b\u6f14\u8fdb\u662f\u591a\u4e48\u6f2b\u957f\u7684\u4e00\u4e2a\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u4fdd\u7559\u8fdb\u5316\u8bba\u7684\u7cbe\u9ad3\uff0c\u540c\u65f6\u8981\u5728\u6548\u7387\u90e8\u5206\u505a\u51fa\u4e0d\u540c\u7684\u5904\u7406\u3002\u4e0b\u9762\u5206\u6790\u6211\u4eec\u7684\u67b6\u6784\u5176\u4e2d\u5305\u542b\u7684\u8fdb\u5316\u601d\u60f3\u3002"),(0,a.kt)("p",null,"\u5bf9\u4e8e\u8ba1\u7b97\u673a\uff0c\u8fdb\u5316\u7684\u4fe1\u606f\u662f\u8f6f\u4ef6\u4ee3\u7801\u3002\u6211\u4eec\u6765\u770b\u5728\u6211\u4eec\u7684\u7cfb\u7edf\u4e2d\u600e\u6837\u5bf9\u5e94\u548c\u89e3\u91ca\u8fd95\u4e2a\u8981\u7d20\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4e2a\u4f53"),"\uff1a\u5c31\u662f\u5305\u542b\u4e86\u81ea\u8eab\u529f\u80fd\u4ee3\u7801\u7684\u5404\u4e2a\u5b50\u7cfb\u7edf\uff0c\u4f8b\u5982\u4e00\u4e2a\u667a\u80fd\u4f53\uff08Agent\uff09\u7a0b\u5e8f\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u53ef\u9057\u4f20\u7684\u7279\u5f81"),"\uff1a\u6211\u4eec\u7684\u4ee3\u7801\u663e\u7136\u50cfDNA\u7f16\u7801\u4e86\u751f\u7269\u4e2a\u4f53\u7279\u5f81\u610f\u4e49\uff0c\u5b83\u7f16\u7801\u7684\u6574\u4e2a\u7a0b\u5e8f\u7684\u7279\u5f81\uff08\u529f\u80fd\uff09\uff0c\u5f88\u663e\u7136\uff0c\u4ee3\u7801\u662f\u53ef\u4ee5\u590d\u5236\u548c\u9057\u4f20\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4e2a\u4f53\u53ef\u4ee5\u7e41\u6b96\u6216\u590d\u5236"),"\uff1a\u4f60\u53ea\u8981\u590d\u5236\u4e86\u53e6\u4e00\u4e2a\u667a\u80fd\u4f53\u7684\u4ee3\u7801\u6216\u8005\u8bf4\u4f60\u7684\u7cfb\u7edf\u4ee5\u67d0\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5305\u542b\u6216\u8005\u8c03\u7528\u53e6\u4e00\u4e2a\u5b50\u7cfb\u7edf\u7684\u4ee3\u7801\uff0c\u5176\u5b9e\u8fd9\u5728\u8f6f\u4ef6\u4e2d\u4e5f\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u590d\u5236\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u53d8\u5316\u7684\u673a\u5236"),"\uff1a\u751f\u7269\u6216\u81ea\u7136\u7cfb\u7edf\u7684\u53d8\u5316\u673a\u5236\u4e3b\u8981\u662f\u9760\u968f\u673a\u8fc7\u7a0b\uff0c\u5b83\u4e3b\u8981\u4f53\u73b0\u5728\u5bf9\u7f16\u7801\u4fe1\u606f\u7684\u90e8\u5206\u968f\u673a\u4fee\u6539\u3002\u6211\u4eec\u7684\u8f6f\u4ef6\u7cfb\u7edf\u663e\u7136\u4e0d\u662f\u5bf9\u5df2\u6709\u7684\u7a0b\u5e8f\u53bb\u6dfb\u52a0\u4e00\u4e9b\u968f\u673a\u7684\u4fee\u6539\uff0c\u56e0\u4e3a\u90a3\u6837\u7684\u7a0b\u5e8f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u6839\u672c\u5c31\u65e0\u6cd5\u8fd0\u884c\u3002\u6211\u4eec\u7684\u968f\u673a\u6027\u4e3b\u8981\u6765\u6e90\u4e8e\u4e00\u4e2a\u65b0\u7684\u5f00\u53d1\u8005\u50cf\u4e00\u4e2a\u5df2\u6709\u7684\u7a0b\u5e8f\u4e2d\u6dfb\u52a0\u90e8\u5206\u80fd\u591f\u4fee\u6539\u7a0b\u5e8f\u884c\u4e3a\u7684\u4ee3\u7801\uff0c\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u539f\u6765\u7684\u7a0b\u5e8f\u5305\u542bA\u7ec4\u4ef6\uff0c\u73b0\u5728\u501f\u52a9\u6211\u4eec\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5f88\u65b9\u4fbf\u4e0e\u5176\u5b83\u7a0b\u5e8f\u8fdb\u884c\u4ea4\u4e92\uff0c\u73b0\u5728\u6709\u53e6\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u4e86\u4e00\u4e2a\u80fd\u591f\u4e0eA\u7ec4\u4ef6\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u7a0b\u5e8f\uff0c\u7136\u540e\u67d0\u4e2a\u7528\u6237\u540c\u65f6\u8d2d\u4e70\u4e86A\u548cB\u4e24\u4e2a\u7ec4\u4ef6\uff0c\u90a3\u4e48\u5b83\u4eec\u6574\u4f53\u770b\u5c31\u662f\u4ea7\u751f\u4e86\u53d8\u5316\u3002\u6240\u4ee5\u6211\u4eec\u7684\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u4ee5\u53ca\u51fd\u6570\u7ea7\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u8fd9\u4e9b\u90fd\u662f\u53d8\u5316\u7684\u673a\u5236\uff0c\u6211\u4eec\u540e\u9762\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u5176\u4e2d\u7684\u6280\u672f\u7ec6\u8282\u3002"),(0,a.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e2d\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5bf9\u5df2\u6709\u7684\u8f6f\u4ef6\u8fdb\u884c\u4fee\u6539\uff0c\u4ece\u800c\u5b9e\u73b0\u7c7b\u4f3c\u4e0a\u9762\u8fd9\u79cd\u53d8\u5316\u3002\u4f46\u662f\u56e0\u4e3a\u4f20\u7edf\u7684\u8f6f\u4ef6\u53ea\u662f\u5bf9\u5f00\u53d1\u5546\u5185\u90e8\u662f\u516c\u5f00\u7684\uff0c\u6240\u4ee5\u53ea\u6709\u4e00\u4e2a\u5f88\u5c0f\u7684\u56e2\u4f53\u80fd\u591f\u6539\u8fdb\u8f6f\u4ef6\uff0c\u8fd9\u5c31\u4f1a\u4f7f\u5f97\u8f6f\u4ef6\u7684\u53d8\u5316\u7684\u6982\u7387\u975e\u5e38\u5c0f\uff0c\u751a\u81f3\u5728\u67d0\u4e2a\u7a0b\u5ea6\u4e4b\u540e\u505c\u6b62\u53d8\u5316\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u5f00\u53d1\u5546\u7684\u7814\u53d1\u4eba\u5458\u6570\u91cf\u5728\u6574\u4e2a\u4eba\u7c7b\u5b8c\u5168\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u3002\u800c\u5728\u4e00\u4e2a\u5f00\u653e\u7684\u8f6f\u4ef6\u65f6\u95f4\uff0c\u8fd9\u6837\u7684\u53d8\u5316\u662f\u5b8c\u5168\u4e0d\u53d7\u9650\u5236\u7684\uff0c\u56e0\u6b64\u8fdb\u5316\u7684\u6982\u7387\u66f4\u5927\uff0c\u66f4\u6709\u53ef\u80fd\u8fdb\u5316\u51fa\u5b8c\u5168\u610f\u60f3\u4e0d\u5230\u7684\u7ed3\u679c\uff0c\u56e0\u4e3a\u8fd9\u91cc\u9762\u80fd\u591f\u5bfc\u81f4\u53d8\u5316\u7684\u5f00\u53d1\u8005\u4eba\u5458\u7684\u6570\u91cf\u57fa\u6570\u662f\u975e\u5e38\u5927\u7684\uff0c\u540e\u9762\u6211\u4eec\u4e5f\u5c06\u8be6\u7ec6\u5206\u6790\u6211\u4eec\u600e\u6837\u901a\u8fc7\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784\u6765\u4f7f\u5f97\u66f4\u591a\u7684\u975e\u7a0b\u5e8f\u5458\u53ef\u4ee5\u7f16\u5199\u7a0b\u5e8f\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u57fa\u4e8e\u7279\u5f81\u7684\u9009\u62e9"),"\uff1a\u8fd9\u4e9b\u53d8\u5316\u51fa\u7684\u673a\u5236\u662f\u5426\u6709\u6548\uff0c\u53d6\u51b3\u4e8e\u5b83\u4eec\u662f\u5426\u9002\u5e94\u548c\u6ee1\u8db3\u4eba\u4eec\u7684\u67d0\u4e9b\u76ee\u6807\u3002\u6240\u4ee5\u5f53\u8fd9\u4e9b\u53d8\u5316\u53d1\u751f\u4e4b\u540e\uff0c\u65b0\u7684\u5b50\u7cfb\u7edf\u4f1a\u4ea7\u751f\uff0c\u7136\u540e\u4f1a\u6709\u4e00\u90e8\u5206\u7528\u6237\u6709\u673a\u4f1a\u662f\u4f7f\u7528\u8fd9\u4e9b\u65b0\u7684\u5b50\u7cfb\u7edf\uff0c\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u5f88\u597d\u5730\u89e3\u51b3\u4e86\u4eba\u4eec\u5bf9\u6570\u5b57\u4e16\u754c\u7684\u4e00\u4e9b\u9700\u6c42\uff0c\u90a3\u4e48\u5b83\u4eec\u5c31\u4f1a\u88ab\u9009\u62e9\uff0c\u5373\u5b83\u4eec\u9002\u5e94\u4e86\u9009\u62e9\uff0c\u5426\u5219\u8fd9\u6837\u7684\u65b0\u7684\u5b50\u7cfb\u7edf\u5219\u4f1a\u5f88\u5feb\u88ab\u6dd8\u6c70\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u9009\u62e9\u673a\u5236\u5728\u8f6f\u4ef6\u7684\u6d88\u8d39\u4e2d\u5012\u662f\u975e\u5e38\u6709\u6548\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u663e\u7136\u8fd8\u6ca1\u6709\u771f\u6b63\u4fc3\u8fdb\u8f6f\u4ef6\u5927\u89c4\u6a21\u7684\u8fdb\u5316\uff0c\u4f8b\u5982\u770b\u770b\u6211\u4eec\u624b\u673a\u91cc\u7684\u5e94\u7528\u53ca\u5176\u5f62\u6001\uff0c\u5927\u90e8\u5206\u7684\u5e94\u7528\u5df2\u7ecf\u6709\u5f88\u591a\u5e74\u6ca1\u6709\u592a\u5927\u7684\u8fdb\u5316\u4e86\uff0c\u800c\u76f8\u53cd\uff0c\u6211\u4eec\u7684\u6570\u5b57\u4e16\u754c\u7684\u529f\u80fd\u4e5f\u6ca1\u6709\u53d8\u5f97\u975e\u5e38\u7684\u4e30\u5bcc\u548c\u667a\u80fd\u3002\u8fd9\u79cd\u7f13\u6162\u7684\u8fdb\u5316\u4e0e\u4e24\u4e2a\u8981\u7d20\u6709\u5173\uff0c\u4e00\u662f\u4e0a\u9762\u8bb2\u5230\u7684\u53d8\u5316\u7684\u7f13\u6162\uff0c\u4e8c\u662f\u8ddf\u8fd9\u91cc\u7684\u9009\u62e9\u673a\u5236\u6709\u5173\uff0c\u5373\u4eba\u4eec\u5176\u5b9e\u6ca1\u6709\u592a\u591a\u9009\u62e9\uff0c\u5c31\u5bfc\u81f4\u9009\u62e9\u5e76\u6ca1\u6709\u5728\u6574\u4e2a\u7cfb\u7edf\u4e2d\u8868\u73b0\u51fa\u5f88\u5f3a\u7684\u529b\u91cf\u3002"),(0,a.kt)("p",null,"\u73b0\u4ee3\u7684\u8f6f\u4ef6\u90fd\u7d2f\u79ef\u4e86\u5f88\u591a\u7684\u529f\u80fd\uff0c\u7528\u6237\u8981\u4e48\u8d2d\u4e70\u53ca\u4f7f\u7528\u6574\u4e2a\u8f6f\u4ef6\uff0c\u8981\u4e48\u5c31\u4f7f\u7528\u4e0d\u4e86\u8f6f\u4ef6\uff0c\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u6211\u4eec\u5fc5\u987b\u8981\u4f7f\u7528\u5176\u4e2d\u7684\u6838\u5fc3\u4ea7\u54c1\u529f\u80fd\uff0c\u6240\u4ee5\u4e0d\u5f97\u4e0d\u5b89\u88c5\uff0c\u4f46\u662f\u5176\u4e2d\u5305\u542b\u7684\u5927\u91cf\u529f\u80fd\u6211\u4eec\u5b8c\u5168\u65e0\u6cd5\u9009\u62e9\uff0c\u56e0\u4e3a\u6ca1\u6709\u9009\u62e9\u8fd9\u4e5f\u4f1a\u5bfc\u81f4\u5f00\u53d1\u5546\u5e76\u6ca1\u6709\u90a3\u4e48\u5927\u7684\u9009\u62e9\u538b\u529b\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u7684\u7cfb\u7edf\u662f\u4e00\u4e2a\u5b8c\u5168\u52a8\u6001\u7684\u7cfb\u7edf\uff0c\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u5b8c\u5168\u4e0d\u540c\u7684\u5b50\u7cfb\u7edf\u7ec4\u5408\uff0c\u8fd9\u4e5f\u5c31\u610f\u5473\u7740\u7528\u6237\u5bf9\u6bcf\u4e2a\u5f88\u5c0f\u7684\u5b50\u7cfb\u7edf\u6709\u5f88\u9ad8\u6548\u7684\u9009\u62e9\u673a\u5236\uff0c\u8fd9\u5c31\u4f1a\u50ac\u751f\u4e00\u4e2a\u5b8c\u5168\u4e0d\u540c\u6548\u7387\u7684\u8fdb\u5316\u7cfb\u7edf\u3002\u5728\u6211\u4eec\u7cfb\u7edf\u67b6\u6784\u4e2d\uff0c\u52a8\u6001\u6027\u548c\u4e92\u64cd\u4f5c\u6027\u5728\u9057\u4f20\u3001\u53d8\u5316\u548c\u9009\u62e9\u8fd9\u4e09\u4e2a\u91cd\u8981\u7684\u8fdb\u5316\u8981\u7d20\u4e2d\u90fd\u53d1\u6325\u4e86\u91cd\u8981\u4f5c\u7528\uff0c\u4ece\u800c\u6574\u4f53\u5448\u73b0\u51fa\u66f4\u9ad8\u6548\u7684\u8fdb\u5316\u6548\u7387\u3002\u901a\u8fc7\u8fd9\u79cd\u8fdb\u5316\u7684\u529b\u91cf\uff0c\u6f14\u8fdb\u51fa\u590d\u6742\u7684\u7cfb\u7edf\u529f\u80fd\uff0c\u4ece\u800c\u4f7f\u6570\u5b57\u4e16\u754c\u8868\u73b0\u51fa\u66f4\u52a0\u667a\u80fd\u3001\u590d\u6742\u548c\u4e30\u5bcc\u3002"),(0,a.kt)("h3",{id:"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784"},"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u4ece\u4e92\u64cd\u4f5c\u548c\u590d\u6742\u7cfb\u7edf\u673a\u5236\u7684\u5c42\u9762\u5bf9RealityIS\u7684\u67b6\u6784\u54f2\u5b66\u8fdb\u884c\u4e86\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u5728\u4e86\u89e3\u8fd9\u4e24\u4e2a\u90e8\u5206\u7684\u5185\u5bb9\u4e4b\u540e\uff0c\u6211\u4eec\u518d\u6765\u7cfb\u7edf\u5730\u68b3\u7406\u4e00\u4e0b\u5176\u4e2d\u7684\u903b\u8f91\uff0c\u4f7f\u6211\u4eec\u5bf9\u6574\u4e2a\u7cfb\u7edf\u67b6\u6784\u6709\u66f4\u6e05\u6670\u7684\u8ba4\u8bc6\u3002"),(0,a.kt)("p",null,"\u4ece\u6574\u4f53\u770b\uff0cRealityIS\u7684\u4e24\u4e2a\u8bbe\u8ba1\u76ee\u6807\u6216\u7279\u6027\u662f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u4e92\u64cd\u4f5c\u6027")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u81ea\u6211\u8fdb\u5316"))),(0,a.kt)("p",null,"\u6240\u6709\u7684\u6280\u672f\u601d\u60f3\u548c\u5bf9\u73b0\u6709\u6280\u672f\u7684\u6539\u8fdb\u601d\u8def\u90fd\u662f\u56f4\u7ed5\u4e0a\u8ff0\u4e24\u5927\u76ee\u6807\u7684\uff0c\u5176\u4e2d\u4e92\u64cd\u4f5c\u6027\u89e3\u51b3\u7684\u95ee\u9898\u662f\u8981\u8ba9\u4efb\u4f55\u5b50\u7a0b\u5e8f\u80fd\u591f\u975e\u5e38\u8f7b\u6613\u5730\u8ddf\u5916\u754c\u901a\u4fe1\u548c\u4ea4\u4e92\uff0c\u8fd9\u65e2\u662f\u590d\u6742\u7cfb\u7edf\u7ed3\u6784\u6240\u9700\u8981\u7684\u57fa\u672c\u7279\u6027\uff0c\u4e5f\u662f\u5b9e\u73b0\u4e00\u4e2a\u5e7f\u6cdb\u76f8\u4e92\u534f\u4f5c\u800c\u7e41\u8363\u7684\u6570\u5b57\u7ecf\u6d4e\u7684\u57fa\u7840\uff0c\u60f3\u60f3\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u4eba\u4e0e\u4eba\u3001\u5b9e\u4f53\u4e0e\u5b9e\u4f53\u3001\u4eba\u4e0e\u793e\u4f1a\u7b49\u5404\u79cd\u5173\u7cfb\u90fd\u662f\u6709\u975e\u5e38\u5e7f\u6cdb\u800c\u6df1\u523b\u7684\u4ea4\u4e92\u7684\uff0c\u5728\u8ba1\u7b97\u673a\u7684\u4e16\u754c\uff0c\u4ea4\u4e92\u5c31\u662f\u4e92\u64cd\u4f5c\u3002"),(0,a.kt)("p",null,"\u81ea\u6211\u8fdb\u5316\uff0c\u662f\u590d\u6742\u7cfb\u7edf\u6784\u5efa\u548c\u6f14\u5316\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6211\u4eec\u4e0d\u662f\u4e00\u6b21\u6027\u901a\u8fc7\u67d0\u4e2a\u5b9e\u4f53\u5c31\u5f00\u53d1\u4e86\u6574\u4e2a\u7cfb\u7edf\u7684\u529f\u80fd\uff0c\u800c\u662f\u901a\u8fc7\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u76f8\u4e92\u534f\u4f5c\u6765\u8fdb\u5316\u51fa\u5404\u79cd\u66f4\u590d\u6742\u7684\u529f\u80fd\uff0c\u5bf9\u5e94\u7684\u8f6f\u4ef6\u5f00\u53d1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u8fd9\u8981\u6c42\u7cfb\u7edf\u5177\u6709\u975e\u5e38\u52a8\u6001\u7684\u80fd\u529b\uff0c\u80fd\u591f\u52a8\u6001\u5730\u65b0\u589e\u6216\u8005\u5220\u9664\u5b50\u7cfb\u7edf\uff0c\u540c\u65f6\u4e5f\u8981\u6c42\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5177\u6709\u81ea\u6cbb\u7684\u80fd\u529b\uff0c\u8fd9\u6837\u7cfb\u7edf\u624d\u80fd\u81ea\u53d1\u5730\u8fdb\u884c\u8fdb\u5316\uff0c\u800c\u4e0d\u9700\u8981\u5168\u5c40\u5e72\u9884\u3002"),(0,a.kt)("p",null,"\u56f4\u7ed5\u7740\u4e24\u4e2a\u76ee\u6807\uff0c\u6211\u4eec\u53d1\u73b0\u4f20\u7edf\u7684\u8f6f\u4ef6\u6784\u9020\u4f53\u7cfb\u6839\u672c\u5c31\u662f\u8ddf\u8fd9\u4e24\u4e2a\u76ee\u6807\u76f8\u6096\u7684\uff0c\u8fd9\u4e3b\u8981\u4f53\u73b0\u5728\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u4ee3\u7801\u7684\u8026\u5408\u4f7f\u8f6f\u4ef6\u5931\u53bb\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u540c\u65f6\u4e5f\u9020\u6210\u4e86\u4e2d\u5fc3\u5316\u6cbb\u7406\u7684\u7ed3\u679c"),(0,a.kt)("li",{parentName:"ul"},"\u5c40\u90e8\u4ee3\u7801\u5728\u83b7\u53d6\u51b3\u7b56\u4e0a\u4e0b\u6587\u65f6\u4e0e\u5168\u5c40\u4fe1\u606f\u7684\u8026\u5408\u4f7f\u8f6f\u4ef6\u5931\u53bb\u4e86\u81ea\u6cbb\u7684\u80fd\u529b")),(0,a.kt)("p",null,"\u9488\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u5206\u522b\u4ece\u533a\u5757\u94fe\u548c\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u4e2d\u5bfb\u627e\u5230\u5bf9\u5e94\u7684\u7406\u8bba\u652f\u6301\uff0c\u4f7f\u6211\u4eec\u53ef\u4ee5\u83b7\u5f97\u4e00\u4e2a\u975e\u5e38\u7b80\u6d01\u3001\u5e72\u51c0\u3001\u7a33\u5b9a\u3001\u800c\u53c8\u529f\u80fd\u5f3a\u5927\u7684\u6280\u672f\u67b6\u6784\u3002\u5b83\u4eec\u5f62\u6210\u6574\u4e2a\u6280\u672f\u67b6\u6784\u7684\u4e24\u4e2a\u7ed3\u6784\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u5916\u90e8\u7ed3\u6784\u548c\u5185\u90e8\u7ed3\u6784\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(4563).Z,width:"765",height:"235"})),(0,a.kt)("p",null,"\u9488\u5bf9\u4e92\u64cd\u4f5c\u6027\uff0c\u6211\u4eec\u4ece\u533a\u5757\u94fe\u4e2d\u5f97\u5230\u542f\u793a\uff0c\u5c3d\u7ba1\u4e0d\u662f\u5f88\u76f4\u63a5\uff0c\u4f46\u662f\u5b83\u4e3a\u4e86\u5b9e\u73b0\u53bb\u4e2d\u5fc3\u5316\u91c7\u53d6\u7684\u5c06\u6570\u636e\u4e0e\u8ba1\u7b97\u5206\u79bb\uff0c\u5e76\u5728\u865a\u62df\u673a\u4e2d\u5728\u8fd0\u884c\u65f6\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7684\u6280\u672f\u6d41\u7a0b\uff0c\u88ab\u6211\u4eec\u5f88\u5de7\u5999\u5730\u7528\u4e00\u5957\u52a8\u6001\u7684\u7c7b\u578b\u7cfb\u7edf\u8fdb\u884c\u4e00\u822c\u5316\uff0c\u4f7f\u4e4b\u80fd\u591f\u652f\u6301\u66f4\u5e7f\u6cdb\u7684\u6570\u636e\u7c7b\u578b\uff0c\u540c\u65f6\u53c8\u80fd\u786e\u4fdd\u7528\u6237\u7684\u6570\u636e\u5b89\u5168\u3002\u8fd9\u6837\u7684\u8c03\u6574\u4f7f\u5f97\u6211\u4eec\u5b8c\u5168\u5b9e\u73b0\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u6027\u4e0d\u5149\u4f7f\u5f97\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u5728\u4e00\u4e9b\u534f\u540c\u8ba1\u7b97\uff0c\u76f8\u4e92\u4ea4\u4e92\uff0c\u66f4\u91cd\u8981\u7684\u662f\u4e3a\u590d\u6742\u7cfb\u7edf\u7684\u6784\u5efa\u5960\u5b9a\u4e86\u57fa\u7840\uff1a\u8fd9\u6837\u4e00\u4e2a\u7cfb\u7edf\u7684\u529f\u80fd\u6709\u673a\u4f1a\u88ab\u591a\u4e2a\u81ea\u6cbb\u7684\u5b50\u7cfb\u7edf\u8fdb\u884c\u878d\u5408\u800c\u5f62\u6210\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u53ea\u6709\u4e00\u5bb6\u5f00\u53d1\u5546\u6784\u5efa\uff0c\u90a3\u6837\u5176\u80fd\u63d0\u4f9b\u7684\u529f\u80fd\u7684\u590d\u6742\u5ea6\u5c06\u4f1a\u8fdc\u8fdc\u4f4e\u4e8e\u590d\u6742\u7cfb\u7edf\u3002\u6211\u4eec\u79f0\u8fd9\u4e9b\u7531\u4e92\u64cd\u4f5c\u6027\u5e26\u6765\u7684\u7ed3\u6784\u4e3a\u5916\u90e8\u7ed3\u6784\uff0c\u5b83\u53cd\u5e94\u7684\u662f\u5b50\u7cfb\u7edf\u4e0e\u5916\u754c\u4ea4\u4e92\u7684\u80fd\u529b\u3002"),(0,a.kt)("p",null,"\u9488\u5bf9\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4ece\u590d\u6742\u7cfb\u7edf\u7684\u7406\u8bba\u4e2d\u5f97\u5230\u542f\u793a\uff0c\u5176\u6838\u5fc3\u7684\u601d\u60f3\u662f\u81ea\u6cbb\u80fd\u529b\uff0c\u5373\u5b50\u7cfb\u7edf\u53ef\u4ee5\u5728\u4e0d\u7ecf\u8fc7\u4e2d\u592e\u6216\u8005\u5168\u5c40\u63a7\u5236\u7684\u60c5\u51b5\u4e0b\u5b9e\u73b0\u5c40\u90e8\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u56e0\u4e3a\u8fd9\u79cd\u4ea4\u4e92\u4e0d\u5149\u5e26\u6765\u5b89\u5168\u9690\u60a3\uff0c\u8fd8\u4f7f\u5f97\u5b50\u7cfb\u7edf\u53ef\u80fd\u4f1a\u53d7\u9650\u4e8e\u4e2d\u592e\u63a7\u5236\u5668\u800c\u4e0d\u5bb9\u6613\u53bb\u5355\u72ec\u6269\u5c55\u80fd\u529b\uff0c\u800c\u8fd9\u662f\u8fdb\u5316\u7cfb\u7edf\u7684\u57fa\u7840\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u6211\u4eec\uff0c\u6211\u4eec\u4ece\u6e38\u620f\u5f00\u53d1\u754c\u6700\u65b0\u7684ECS\u67b6\u6784\u5f97\u5230\u542f\u793a\uff0c\u5e76\u7ed3\u5408\u6211\u4eec\u7684\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf\uff0c\u5b9e\u73b0\u4e00\u4e2a\u57fa\u4e8e\u7c7b\u578b\u7684\u5c40\u90e8\u81ea\u6cbb\u67b6\u6784\uff0c\u5728\u8fd9\u6837\u7684\u67b6\u6784\u4e2d\uff0c\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u58f0\u660e\u5173\u6ce8\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5373\u53ef\u4ee5\u5b9a\u4e49\u4e0e\u5176\u5b83\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u5173\u7cfb\u3002\u56f4\u7ed5\u8fd9\u4e9b\u673a\u5236\uff0c\u6211\u4eec\u8fd8\u8fdb\u4e00\u6b65\u5206\u6790\u4e86\u6574\u4e2a\u7cfb\u7edf\u7684\u8fdb\u5316\u8fc7\u7a0b\uff0c\u5b83\u9075\u5faa\u751f\u7269\u6216\u81ea\u7136\u754c\u4e2d\u590d\u6742\u7cfb\u7edf\u8fdb\u5316\u76f8\u4f3c\u7684\u539f\u7406\u6216\u8fc7\u7a0b\u3002\u6211\u4eec\u79f0\u8fd9\u90e8\u5206\u7ed3\u6784\u4e3a\u5185\u5728\u7ed3\u6784\uff0c\u5b83\u51b3\u5b9a\u7740\u4e00\u4e2a\u5b50\u7cfb\u7edf\u5185\u90e8\u600e\u6837\u53bb\u6f14\u8fdb\u548c\u8fdb\u5316\u3002"),(0,a.kt)("p",null,"\u5728\u5185\u90e8\u7ed3\u6784\u548c\u5916\u90e8\u7ed3\u6784\u4e4b\u5916\u7684\u7cfb\u7edf\u4e2d\uff0c\u7528\u6237\u5219\u7262\u7262\u638c\u63e1\u7740\u6240\u6709\u7684\u6570\u636e\u6743\u9650\uff0c\u5e76\u901a\u8fc7\u6570\u636e\u6743\u9650\u63a7\u5236\u7740\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fd0\u884c\uff0c\u5305\u62ec\u4e00\u4e2a\u5b50\u7cfb\u7edf\u662f\u5426\u53ef\u4ee5\u8bbf\u95ee\u7528\u6237\u7684\u67d0\u4e9b\u6570\u636e\uff0c\u4ee5\u53ca\u4e00\u4e2a\u5b50\u7cfb\u7edf\u662f\u5426\u53ef\u4ee5\u4e0e\u5176\u5b83\u5b50\u7cfb\u7edf\u8fdb\u884c\u4ea4\u4e92\uff0c\u751a\u81f3\u4e00\u4e2a\u5b50\u7cfb\u7edf\u5373\u4f7f\u5df2\u7ecf\u88ab\u7528\u6237\u5b89\u88c5\u5230\u7528\u6237\u7684\u5e94\u7528\u73af\u5883\uff0c\u5b83\u4ecd\u7136\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u88ab\u5b8c\u5168\u7981\u6b62\u8fd0\u884c\u3002\u7528\u6237\u5bf9\u6570\u636e\u7684\u6743\u9650\u88ab\u7262\u7262\u5730\u96c6\u6210\u5230\u7cfb\u7edf\u7684\u865a\u62df\u673a\u4e2d\uff0c"),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"realityis\u7cfb\u7edf\u67b6\u6784"},"RealityIS\u7cfb\u7edf\u67b6\u6784"),(0,a.kt)("p",null,"\u5bf9\u4e92\u64cd\u4f5c\u6027\u7684\u6539\u8fdb\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7531\u8c03\u7528\u8fc7\u7a0b\u83b7\u53d6\u7ed3\u679c\uff0c\u53d8\u4e3a\u76f4\u63a5\u83b7\u53d6\u5176\u8fc7\u7a0b\uff0c\u5373\u5c06\u88ab\u8c03\u8fc7\u7a0b\u6267\u884c\u7684\u7ed3\u679c\u5b58\u50a8\u5728\u4e00\u4e2a\u8bed\u4e49\u6570\u636e\uff0c\u8fd9\u6837\u5c31\u662f\u4e00\u4e2a\u7c7b\u578b\u6216\u8005\u6570\u636e\u672c\u8eab\u5305\u542b\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u5c31\u7b80\u5316\u4e3a\u6570\u636e\u7ba1\u7406\u7684\u95ee\u9898\uff08\u6e38\u620f\u4e2d\u7684\u673a\u5236\uff09")),(0,a.kt)("h3",{id:"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf"},"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf"),(0,a.kt)("p",null,"\u4e24\u4e2a\u76ee\u7684\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7c7b\u578b\u89e3\u6790\uff0c\u505a\u4f9d\u8d56\u5206\u79bb"),(0,a.kt)("li",{parentName:"ul"},"\u6570\u636e\u548c\u529f\u80fd\u5206\u79bb\uff0c\u901a\u8fc7\u7c7b\u578b\u7684\u89e3\u6790\u63a7\u5236\uff0c\u6765\u963b\u6b62\u672a\u6388\u6743\u7a0b\u5e8f\u7684\u8bbf\u95ee\uff0c\u5f53\u7136\u5b9e\u9645\u4e0d\u662f\u8fd0\u884c\u5230\u67d0\u4e2a\u51fd\u6570\u65f6\u5728\u68c0\u67e5\uff0c\u800c\u662f\u7ec4\u4ef6\u53ef\u4ee5\u6839\u636e\u7c7b\u578b\u4fe1\u606f\u63d0\u524d\u68c0\u67e5\u51fa\u6765")),(0,a.kt)("p",null,"\u52a8\u6001\u6388\u6743\u5f88\u91cd\u8981\uff0c\u5982\u679c\u6ca1\u6709\u8fd9\u4e2a\u63a7\u5236\uff0c\u53ea\u662f\u5728Actor\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\uff0c\u610f\u5473\u7740\u67d0\u4e2aActor\u88ab\u6267\u884c\uff0c\u5c31\u65e0\u6cd5\u63a7\u5236\u5b83\u8bbf\u95ee\u6570\u636e\u3002"),(0,a.kt)("h3",{id:"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61"},"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61"),(0,a.kt)("p",null,"\u903b\u8f91\u62bd\u8c61\uff0c\u4e0d\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u4e0e\u7f16\u8bd1\u5668\u5f00\u53d1"),(0,a.kt)("h3",{id:"\u7b80\u5316\u6570\u636e\u83b7\u53d6"},"\u7b80\u5316\u6570\u636e\u83b7\u53d6"),(0,a.kt)("h3",{id:"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784"},"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784"),(0,a.kt)("h3",{id:"\u590d\u6742\u7cfb\u7edf\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c"},"\u590d\u6742\u7cfb\u7edf\uff1a\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c"),(0,a.kt)("p",null,"\u5c40\u90e8\u9a71\u52a8"),(0,a.kt)("p",null,"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c\uff0c\u8ddf\u7528\u6237\u7684\u4e3b\u52a8\u8f93\u5165\u4e0d\u662f\u540c\u6b65\u7684\uff0c\u53ef\u80fd\u662f\u81ea\u52a8\u6267\u884c\u7684\uff0c\u7528\u6237\u600e\u4e48\u611f\u77e5\u7cfb\u7edf\u53d8\u5316\u72b6\u6001"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c\uff0c\u8ddf\u7528\u6237\u7684\u4e3b\u52a8\u8f93\u5165\u4e0d\u662f\u540c\u6b65\u7684\uff0c\u53ef\u80fd\u662f\u81ea\u52a8\u6267\u884c\u7684\uff0c\u7528\u6237\u600e\u4e48\u611f\u77e5\u7cfb\u7edf\u53d8\u5316\u72b6\u6001"),(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/26387327/answer/3158798538"},"https://www.zhihu.com/question/26387327/answer/3158798538"))),(0,a.kt)("h3",{id:"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92"},"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92"),(0,a.kt)("h3",{id:"\u865a\u62df\u673a-1"},"\u865a\u62df\u673a"),(0,a.kt)("h4",{id:"\u5b57\u8282\u7801"},"\u5b57\u8282\u7801"),(0,a.kt)("p",null,"\u672c\u8d28\u4e0a\u7ed3\u6784\u8ddfWasm\u76f8\u4f3c\uff0c\u53ef\u4ee5\u505a\u5230\u5f88\u5e95\u5c42\uff0c\u90fd\u662f\u51fd\u6570\u7ea7\u7684\u6570\u636e\uff0c\u53ea\u662f\u51fd\u6570\u8c03\u8f6c\u7684\u673a\u5236\u4e0d\u4e00\u6837\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'{\n "magic": "0",\n "version": "1.0.0", // VM\u7684\u7248\u672c\u53f7\uff0c\u7c7b\u578b\u7684\u89e3\u91ca\u65b9\u6cd5\u4e00\u822c\u4e0d\u53d8\n "inputs": [ // \u5185\u90e8Standard\u683c\u5f0f\u53ef\u80fd\u5b58\u5728\u548c\u7528\u6237\u7248\u672c\u4e0d\u517c\u5bb9\uff0c\u8fd0\u884c\u65f6\u68c0\u67e5\n {\n "User":{\n "version": "1.0.0",\n "name": "String"\uff0c\n "age": "int"\n }\n }\n ],\n "standards":[\n "Car":{\n \n }\n ]\n "components": [\n {\n "name":"add_com",\n "inputs":[\n "User"\n ]\n "output":[]\n }\n ], // \u5185\u90e8\u65b9\u6cd5\n "outputs": [], // \u53ef\u80fd\u5b58\u5728\u7248\u672c\u4e0d\u517c\u5bb9\n "codes"" [] // \u5c06\u6240\u6709\u4ee3\u7801\u653e\u5728\u4e00\u8d77\uff0cComponent\u8fd8\u6709\u5176\u5b83\u53c2\u6570\u4fe1\u606f\u5f71\u54cd\u7f13\u5b58\u8fde\u8d2f\u6027\n}\n')),(0,a.kt)("h4",{id:"inputs"},"inputs"),(0,a.kt)("p",null,"\u5c06\u5c5e\u6027\u5b9a\u4e49\u90fd\u62f7\u8d1d\u8fdbAgent\u5185\u90e8\uff0c\u4e00\u662f\u65b9\u4fbfAgent\u7f16\u8f91\uff0c\u540c\u65f6\u8003\u8651\u5230\u540e\u9762Component\u7684\u53c2\u6570\u7b7e\u540d\u662f\u8ddfStandard\u7684\u5c5e\u6027\u540d\u5b57\u7ed1\u5b9a\u7684\uff0c\u5e76\u6ca1\u6709\u50cf\u4f20\u7edf\u7f16\u8bd1\u5668\u90a3\u6837\u7f16\u8bd1\u4e3a\u5730\u5740\uff0c\u4f8b\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'{\n "inputs":[\n "User":{\n "version": "1.0.0",\n "name": "String"\uff0c\n "age": "int"\n }\n ]\n}\n')),(0,a.kt)("p",null,"\u4f46\u662f\u8fd0\u884c\u65f6\u68c0\u67e5\u5230\u7248\u672c\u4e0d\u4e00\u81f4\u65f6\uff0c\u81ea\u52a8\u505a\u4e00\u4e9b\u8f6c\u5316\u3002"),(0,a.kt)("h5",{id:"standard\u7248\u672c\u517c\u5bb9"},"Standard\u7248\u672c\u517c\u5bb9"),(0,a.kt)("p",null,"\u4e3a\u4e86\u907f\u514d\u4e0d\u65ad\u7684\u66f4\u65b0\uff0c\u5b9e\u884c\u4e24\u4e2a\u7b56\u7565\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5c0f\u7248\u672c\u5fc5\u987b\u517c\u5bb9"),(0,a.kt)("li",{parentName:"ul"},"\u5927\u7248\u672c\u5fc5\u987b\u66f4\u65b0Agent\uff0c\u5426\u5219\u4e0d\u8ba9\u8fd0\u884c")),(0,a.kt)("h6",{id:"\u5c0f\u7248\u672c\u517c\u5bb9"},"\u5c0f\u7248\u672c\u517c\u5bb9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4fee\u6539\u5b57\u6bb5\u540d\u5b57")),(0,a.kt)("h6",{id:"\u5927\u7248\u672c\u66f4\u65b0"},"\u5927\u7248\u672c\u66f4\u65b0"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u589e\u52a0\u5b57\u6bb5"),(0,a.kt)("li",{parentName:"ul"},"\u5220\u9664\u5b57\u6bb5"),(0,a.kt)("li",{parentName:"ul"},"\u4fee\u6539\u5b57\u6bb5\u7c7b\u578b = \u5220\u9664\u5b57\u6bb5 + \u589e\u52a0\u5b57\u6bb5")),(0,a.kt)("h4",{id:"lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92"},"Lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92"),(0,a.kt)("p",null,"\u7c7b\u578b\u89e3\u8026\uff0c"),(0,a.kt)("p",null,"Python\u6ca1\u6709Lua\u90a3\u6837\u7684\u52a8\u6001\u7c7b\u578b\uff0c\u5148\u652f\u6301Lua"),(0,a.kt)("h2",{id:"realityis\u6280\u672f\u7279\u5f81"},"RealityIS\u6280\u672f\u7279\u5f81"),(0,a.kt)("h3",{id:"\u6267\u884c\u6d41\u7a0b"},"\u6267\u884c\u6d41\u7a0b"),(0,a.kt)("p",null,"\u4f20\u7edf\u51e0\u79cd\u6a21\u5f0f\uff1a"),(0,a.kt)("h4",{id:"\u51fd\u6570\u8c03\u7528\u5173\u7cfb"},"\u51fd\u6570\u8c03\u7528\u5173\u7cfb"),(0,a.kt)("p",null,"\u5b9e\u9645\u4e0a\u662f\u8f6c\u5316\u4e3a\u7a0b\u5e8f\u7684\u4f20\u7edf\u7ed3\u6784"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9700\u8981\u7ba1\u7406\u51fd\u6570\u5b9e\u4f8b\u53ca\u5176\u5730\u5740"),(0,a.kt)("li",{parentName:"ul"},"\u9700\u8981\u5173\u7cfb\u53c2\u6570\u7684\u94fe\u63a5")),(0,a.kt)("h4",{id:"\u6d41\u7a0b\u987a\u5e8f"},"\u6d41\u7a0b\u987a\u5e8f"),(0,a.kt)("p",null,"Hodini\u7684\u65b9\u5f0f"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u7528\u7ba1\u7406\u51fd\u6570\u5b9e\u4f8b"),(0,a.kt)("li",{parentName:"ul"},"\u6309\u7c7b\u578b\u540d\u5b57\u8fdb\u884c\u83b7\u53d6\u6570\u636e")),(0,a.kt)("h4",{id:"shadegraph"},"ShadeGraph"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7ba1\u7406\u4f9d\u8d56\u5173\u7cfb"),(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u5173\u7cfb\u7531\u53d8\u91cf\u540d\u79f0\u786e\u5b9a\uff0c\u5373\u662f\u7c7b\u578b\u7684\u5b9e\u4f8b\uff0c\u5373\u662f\u53c2\u6570\u7684\u8fde\u63a5\uff0c\u53ea\u4e0d\u8fc7\u5b9a\u4e49\u4e86\u5168\u5c40\u53c2\u6570\uff0c\u800c\u4e0d\u662f\u4ece\u51fd\u6570\u7684\u8f93\u5165\u8f93\u5165\u53bb\u8fde")),(0,a.kt)("p",null,"\u53d8\u91cf\u540d\u5b57\u4e0d\u6613\u4e8e\u590d\u7528"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c++"},"// Create the graph - it starts out empty\ncudaGraphCreate(&graph, 0);\n\n// For the purpose of this example, we'll create\n// the nodes separately from the dependencies to\n// demonstrate that it can be done in two stages.\n// Note that dependencies can also be specified\n// at node creation.\ncudaGraphAddKernelNode(&a, graph, NULL, 0, &nodeParams);\ncudaGraphAddKernelNode(&b, graph, NULL, 0, &nodeParams);\ncudaGraphAddKernelNode(&c, graph, NULL, 0, &nodeParams);\ncudaGraphAddKernelNode(&d, graph, NULL, 0, &nodeParams);\n\n// Now set up dependencies on each node\ncudaGraphAddDependencies(graph, &a, &b, 1); // A->B\ncudaGraphAddDependencies(graph, &a, &c, 1); // A->C\ncudaGraphAddDependencies(graph, &b, &d, 1); // B->D\ncudaGraphAddDependencies(graph, &c, &d, 1); // C->D\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u5230\u76ee\u524d\u4e3a\u6b62",(0,a.kt)("strong",{parentName:"p"},"cuda graph"),"\u7684\u4f9d\u8d56\u9700\u8981\u7528\u6237\u624b\u52a8\u8bbe\u7f6e\u3002\u5f53kernel\u6216\u5176\u4ed6\u64cd\u4f5c\u8f93\u5165\u53d8\u91cf\u53d8\u5316\u65f6\uff0c",(0,a.kt)("strong",{parentName:"p"},"cuda graph"),"\u9700\u8981\u7528\u6237\u624b\u52a8\u66f4\u65b0\u8282\u70b9\u53c2\u6570\u3002"),(0,a.kt)("p",{parentName:"blockquote"},"\u5f53\u6211\u4eec\u9762\u5bf9\u5927\u91cf\u8282\u70b9\u4e0e\u8f93\u5165\u53c2\u6570\u65f6\uff0c\u624b\u52a8\u6765\u6784\u9020",(0,a.kt)("strong",{parentName:"p"},"cuda graph"),"\u548c\u66f4\u65b0\u8282\u70b9\u5c31\u4e0d\u592a\u73b0\u5b9e\uff0c\u4e8e\u662f",(0,a.kt)("strong",{parentName:"p"},"muda"),"\u81ea\u52a8\u8ba1\u7b97\u56fe\u5c31\u5e94\u8fd0\u800c\u751f\u4e86\u3002")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u57281\uff09\u90e8\u5206\u6211\u4eec\u5b9a\u4e49\u4e86",(0,a.kt)("strong",{parentName:"p"},"graph var"),"\uff0c\u8fd9\u4e9b",(0,a.kt)("strong",{parentName:"p"},"graph var"),"\u5728",(0,a.kt)("strong",{parentName:"p"},"muda")," ",(0,a.kt)("strong",{parentName:"p"},"compute graph"),"\u4e2d\u53ea\u8868\u793a\u4e00\u79cd\u865a\u62df\u8d44\u6e90\uff08",(0,a.kt)("strong",{parentName:"p"},"muda compute graph")," \u9ed8\u8ba4\u6240\u6709\u7684\u865a\u62df\u8d44\u6e90\u76f8\u4e92\u4e4b\u95f4\u4e0d\u4ea7\u751f\u91cd\u53e0\uff0c\u5373\u5185\u5b58\u4e0d\u53d1\u751foverlap\uff09\u3002\u4e00\u822c\u6211\u4eec\u4f1a\u8981\u6c42\u56fe\u7684\u8f93\u5165\u53d8\u91cf\u4e3a\u4e00\u4e2aviewer\uff08\u4ed6\u672c\u8eab\u4e0d\u62e5\u6709\u8d44\u6e90\uff0c\u53ea\u662f\u4e00\u4e2a\u8d44\u6e90\u7684\u8bbf\u95ee\u5668\uff0c\u662ftrivially copyable\u7684\uff09\uff0c\u6216\u662f\u4e00\u4e2a\u503c\u7c7b\u578b\u3002\u5982\u679c\u4f60\u77e5\u9053\u4f60\u5728\u5e72\u4ec0\u4e48\uff0c\u90a3\u4e48\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528\u5947\u6280\u6deb\u5de7\u3002")),(0,a.kt)("p",null,"\u57282\uff09\u90e8\u5206\uff0c\u6211\u4eec\u5b9a\u4e49\u4e86",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u3002\u6ce8\u610f\uff0c",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u7684\u5b9a\u4e49\u987a\u5e8f\u4f1a\u5f71\u54cd",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u7684\u5b9a\u4e49\u987a\u5e8f\u5e94\u8be5\u662f\u6240\u6709\u4efb\u52a1\u7684\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u975e\u5e38\u7684intuitive\uff01\u6211\u4eec\u7684\u6240\u6709\u4e32\u884c\u4ee3\u7801\u90fd\u662f\u8fd9\u4e48\u5199\u7684\u3002"),(0,a.kt)("h4",{id:"cogine"},"Cogine"),(0,a.kt)("p",null,"\u4ece\u4e0a\u8ff0\u7684\u65b9\u6848\u4e2d\u603b\u7ed3\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u8981\u60f3\u7b80\u5316\uff0c\u90fd\u9700\u8981\u5168\u5c40\u6570\u636e\uff0c\u4e0d\u7ba1\u662fHoudini\u4e2d\u7684\u51e0\u4f55\u6570\u636e\uff0c\u8fd8\u662fShaderGraph\u4e2d\u7531\u53d8\u91cf\u540d\u5b57\u786e\u5b9a\u7684\u5168\u5c40\u6570\u636e\uff0c\u8fd9\u6837\u907f\u514d\u7275\u6d89\u5bf9\u51fd\u6570\u7ec6\u8282\u7684\u4e86\u89e3"),(0,a.kt)("li",{parentName:"ul"},"\u6d41\u7a0b\u6bd4\u5b9e\u9645\u7684\u51fd\u6570\u8c03\u7528\u66f4\u7b80\u5355\uff0c\u5982Houdini\u548cShaderGraph"),(0,a.kt)("li",{parentName:"ul"},"\u7528\u6237\u7406\u89e3\u6d41\u7a0b\u5f88\u91cd\u8981\uff0c\u76f8\u6bd4\u7531\u8f93\u5165\u8f93\u51fa\u6765\u786e\u5b9a\u53c2\u6570\u4e0d\u592a\u5229\u4e8e\u7ba1\u7406\u548c\u63a7\u5236\uff0c\u6bd4\u5982\u4f60\u8981\u4fee\u6539\u6d41\u7a0b\u5c31\u5fc5\u987b\u53bb\u4fee\u6539\u53d8\u91cf\u540d\u5b57\uff1b\u76f8\u540c\u7684\u6d41\u7a0b\u5728\u4e00\u4e2a\u7cfb\u7edf\u4e2d\u591a\u6b21\u6267\u884c\u5219\u8981\u5b9a\u4e49\u4e0d\u540c\u8bed\u4e49\u7684\u53d8\u91cf\u540d\u5b57")),(0,a.kt)("p",null,"\u50cfShaderGraph\u901a\u5e38\u662f\u56fa\u5b9a\u7684\u6d41\u7a0b\uff0c\u6ca1\u6709Control FLow\uff0c\u5373\u6bcf\u4e2a\u6d41\u7a0b\u90fd\u4f1a\u88ab\u6267\u884c\uff0c\u5e76\u4e14\u901a\u5e38\u80fd\u88ab\u8ba1\u7b97\u51fa\u4e00\u4e2a\u7ebf\u6027\u7684\u6267\u884c\u987a\u5e8f\u4f7f\u5176\u53ef\u4ee5\u4fdd\u8bc1\u5176\u4e2d\u5b9a\u4e49\u7684\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,a.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027-1"},"\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("h3",{id:"\u53ef\u7ec4\u5408\u6027"},"\u53ef\u7ec4\u5408\u6027"),(0,a.kt)("p",null,"\u4f20\u7edf\u4e24\u79cd\u7ec4\u5408\u65b9\u5f0f\uff0c\u4e00\u79cd\u662f\u5355\u7eaf\u5bf9\u8c61\u7ea7\u522b\u7684\u7ec4\u5408\uff0c\u4f8b\u5982Unity\u7684Component\uff0c\u4e00\u79cd\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684\u7ec4\u5408\uff0c\u901a\u8fc7\u9ad8\u9636\u51fd\u6570"),(0,a.kt)("h3",{id:"\u4e2a\u6027\u5316"},"\u4e2a\u6027\u5316"),(0,a.kt)("h3",{id:"\u52a8\u6001\u6027-1"},"\u52a8\u6001\u6027"),(0,a.kt)("h3",{id:"\u5206\u5e03\u5f0f"},"\u5206\u5e03\u5f0f"),(0,a.kt)("h3",{id:"\u8bed\u4e49\u5316"},"\u8bed\u4e49\u5316"),(0,a.kt)("h3",{id:"\u7ec4\u4ef6\u5316"},"\u7ec4\u4ef6\u5316"),(0,a.kt)("h3",{id:"\u88ab\u52a8\u5f0f"},"\u88ab\u52a8\u5f0f"),(0,a.kt)("p",null,"\u88ab\u901a\u77e5\uff0c\u6301\u7eed\u8fd0\u884c"),(0,a.kt)("h2",{id:"\u5e94\u7528"},"\u5e94\u7528"),(0,a.kt)("h2",{id:"\u6311\u6218"},"\u6311\u6218"),(0,a.kt)("h3",{id:"\u6280\u672f\u6311\u6218"},"\u6280\u672f\u6311\u6218"),(0,a.kt)("h4",{id:"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898"},"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898"),(0,a.kt)("p",null,"\u6539\u8fdb\u8bed\u8a00\u865a\u62df\u673a\uff0c\u53bb\u6389\u51fd\u6570\u6808\u7b49\u63a7\u5236\u7684\u673a\u5236\uff0c\u4ec5\u4fdd\u7559\u4ee3\u7801\u6267\u884c"),(0,a.kt)("p",null,"\u7f16\u8bd1\u4e3a\u50cfWASM\u7684\u5b57\u8282\u7801\uff0cWASM\u672c\u8eab\u5c31\u662f\u6309\u51fd\u6570\u7ea7\u5b9a\u4e49\u7684\uff0c\u5176\u5b9e\u6211\u4eec\u7684\u673a\u5236\u6b63\u662f\u5bf9\u5e94\u8fd9\u79cd\uff0c\u53ea\u4e0d\u8fc7\u51fd\u6570\u6362\u6210\u6211\u4eec\u7684\u7ec4\u4ef6"),(0,a.kt)("h4",{id:"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f"},"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f"),(0,a.kt)("h4",{id:"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b"},"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b"),(0,a.kt)("p",null,"\u7c7b\u4f3c\u4e8e\u6e38\u620f\u6d4b\u8bd5"),(0,a.kt)("p",null,"\u53ef\u80fd\u5f88\u591a\u4eba\u7684\u7ecf\u9a8c\u548c\u77e5\u8bc6\u5728\u4e8e\u53bb\u63a7\u5236\u548c\u53d1\u73b0\u8fd9\u79cd\u7ed3\u6784\uff0c\u7136\u540e\u7b5b\u9009\u51fa\u66f4\u6709\u4ef7\u503c\u7684\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u8fdb\u5316\u8bba\u91cc\u9762\u7684\u9009\u62e9\u3002"),(0,a.kt)("p",null,"\u667a\u80fd\u5fc5\u987b\u4f9d\u8d56\u4e8e\u8f83\u5927\u7684\u7a81\u53d8\u548c\u9009\u62e9\uff0c\u8f83\u5927\u7684\u7a81\u53d8\u5fc5\u987b\u8981\u6709\u6761\u4ef6\u80fd\u591f\u751f\u4ea7\u975e\u5e38\u591a\u9519\u8bef\u7684\u7ed3\u679c\u3002"),(0,a.kt)("h3",{id:"\u7528\u6237\u4f53\u9a8c\u6311\u6218"},"\u7528\u6237\u4f53\u9a8c\u6311\u6218"),(0,a.kt)("h4",{id:"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406"},"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406"),(0,a.kt)("p",null,"\u542f\u793a\u8fd9\u5df2\u7ecf\u6bd4\u8f83\u666e\u904d\uff0c\u53ea\u662f\u7ba1\u63a7\u7684\u662fAPI\uff0c\u4f46\u662fAPI\u4ee3\u8868\u7684\u5c31\u662f\u4e00\u79cd\u6570\u636e\u7684\u83b7\u53d6\uff0c"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"phone-setting",src:l(1683).Z,width:"1170",height:"2532"})),(0,a.kt)("h4",{id:"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c"},"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c"),(0,a.kt)("p",null,"\u8ddf\u7528\u6237\u7684\u4e3b\u52a8\u8f93\u5165\u4e0d\u662f\u540c\u6b65\u7684\uff0c\u53ef\u80fd\u662f\u81ea\u52a8\u6267\u884c\u7684\uff0c\u7528\u6237\u600e\u4e48\u611f\u77e5\u7cfb\u7edf\u53d8\u5316\u72b6\u6001"),(0,a.kt)("p",null,"\u6211\u4eec\u9700\u8981\u88ab\u901a\u77e5\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u6211\u8981\u505a\u4ec0\u4e48\u7684\u6570\u5b57\u4e16\u754c"),(0,a.kt)("h4",{id:"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c"},"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c"),(0,a.kt)("p",null,"\u4eba\u5929\u751f\u5c31\u662f\u4f7f\u7528\u89c2\u5bdf\u52a8\u6001\u4e16\u754c\u7684\uff0c\u53ea\u662f\u4f60\u8981\u7ed9\u51fa\u5408\u9002\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u5c24\u5176\u662f\u8003\u8651\u5230\u5c4f\u5e55\u7684\u4ea4\u4e92\uff0c\u4ee5\u53ca\u6570\u5b57\u4e16\u754c\u7684\u4fe1\u606f\u91cf\u8fdc\u591a\u4e8e\u73b0\u5b9e\u4e16\u754c"),(0,a.kt)("p",null,"\u4f8b\u5982\u80a1\u7968\u5c31\u662f\u8fd9\u6837"),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u4e16\u754c\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u800c\u4e14\u4e8b\u5b9e\u8bc1\u660e\u7528\u6237\u5728\u4f7f\u7528\u4e00\u4e2a\u65b0\u5e94\u7528\u7684\u65f6\u5019\uff0c\u65b0\u5e94\u7528\u5e26\u6765\u7684\u963b\u788d\u90fd\u5f88\u5927\u7684\uff0c\u4e0d\u7ba1\u662f\u8ba4\u77e5\u3001\u4f53\u9a8c\u3001\u4ea4\u4e92\u7b49\u7b49"),(0,a.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u4e00\u81f4\u7684\u4ea4\u4e92\u4f53\u9a8c\uff0c\u5927\u6a21\u578b\u5bf9\u8bdd\u5f0f\u7684\u4ea4\u4e92\u65b9\u5f0f\u53ef\u4ee5\u5927\u5927\u7b80\u5316\u4f20\u7edfGUI\u65b9\u9762\u7684\u590d\u6742\u5ea6\u548c\u4e30\u5bcc\u6027\uff0c\u6bd4\u5982\u5c0f\u7a0b\u5e8f\u5c31\u662f\u4e00\u79cd\u7c7b\u4f3c\u7684\u4f53\u9a8c\uff0c\u867d\u7136\u5e94\u7528\u5185\u5bb9\u4e0d\u4e00\u6837\uff0c\u4f46\u662f\u7528\u6237\u4f7f\u7528\u65b0\u7684\u5e94\u7528\u7684\u6d41\u7a0b\u6bd4\u8f83\u4e00\u81f4\uff0c\u6240\u4ee5\u5e76\u6ca1\u6709\u9020\u6210\u592a\u5927\u7684\u963b\u788d\u3002"),(0,a.kt)("p",null,"\u5f53\u7136\u7528\u6237\u4e5f\u4e0d\u662f\u4e00\u76f4\u5728\u6362\uff0c\u5927\u4f53\u8bf4\u5f88\u957f\u4e00\u6bb5\u65f6\u95f4\u8fd8\u662f\u7a33\u5b9a\u7684\uff0c\u4f46\u662f\u793e\u4f1a\u53d1\u73b0\u6709\u65b0\u7684\u6709\u4ef7\u503c\u7684\u5e94\u7528\u65f6\u4f20\u64ad\u5f97\u4f1a\u66f4\u5feb\u3002"),(0,a.kt)("p",null,"\u5c11\u91cf\u7684\u6bd4\u8f83\u8ffd\u8e2a\u79d1\u6280\u7684\u7528\u6237\u5219\u4f1a\u66f4\u4e60\u60ef\u8fd9\u79cd\u80fd\u591f\u5feb\u901f\u4f53\u9a8c\u5230\u65b0\u4ea7\u54c1\u7684\u8282\u594f\u548c\u611f\u89c9\u3002"),(0,a.kt)("h2",{id:"\u5c55\u671b"},"\u5c55\u671b"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0"},"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0"},"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0"},"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0"},"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0"),(0,a.kt)("h2",{id:"\u603b\u7ed3"},"\u603b\u7ed3"),(0,a.kt)("p",null,"\u672a\u6765\u53ef\u80fd\u7c7b\u578b\u7cfb\u7edf\u548c\u6570\u636e\u96c6\u6210\u5230\u64cd\u4f5c\u7cfb\u7edf\u6216\u624b\u673a\u672c\u5730\u7684\u57fa\u7840\u8bbe\u65bd"),(0,a.kt)("p",null,"\u6216\u8005\u4e00\u4e2a\u6216\u591a\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f46\u603b\u5f52\u5206\u5e03\u5f0f\u7cfb\u7edf\u7684\u80fd\u529b\u662f\u66f4\u5f3a\u5927\u7684\uff0c\u64cd\u4f5c\u7cfb\u7edf\u652f\u6301\u4f1a\u7b80\u5316\u6570\u636e\u7684\u7ba1\u7406"))}s.isMDXComponent=!0},4413:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/Civilization-7255faa2a66f9ab156613b9e0e185032.jpg"},1505:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg"},3459:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg"},9802:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg"},9780:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg"},4187:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg"},9955:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg"},1683:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/phone-setting-7be5932f5b259dc09827086754bdb118.jpg"},8242:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg"},6943:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/programming-number-99509bb159c101481192c8f045ea9d79.jpg"},4563:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg"},9085:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/usd-1109031da5c391a7ac8194a67e234d38.png"}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.80aafd6b.js b/assets/js/ccc49370.80aafd6b.js deleted file mode 100644 index c29d790..0000000 --- a/assets/js/ccc49370.80aafd6b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6103],{324:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),l=n(4334),r=n(5463),o=n(3702),i=n(9107),c=n(6582),s=n(339),m=n(7462),d=n(7325),u=n(3672);function g(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function f(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:o,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(r.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:o}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(3811);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:r}=(0,i.C)(),{nextItem:o,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:f,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&r.length>0?a.createElement(v.Z,{toc:r,minHeadingLevel:f,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(o||m)&&a.createElement(g,{nextItem:o,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage)},a.createElement(f,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},2728:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(7462),l=n(7294),r=n(107);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function s(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(c(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function m(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,r.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,l.useRef)(void 0),n=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=s(i,{anchorTopOffset:n.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const g=l.memo(u);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...f}=e;const v=(0,r.L)(),p=m??v.tableOfContents.minHeadingLevel,h=u??v.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:h});return d((0,l.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:h}}),[c,s,p,h])),l.createElement(g,(0,a.Z)({toc:b,className:n,linkClassName:c},f))}},3811:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),l=n(7294),r=n(4334),o=n(2728);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(i.tableOfContents,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:s})))}},3132:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(7294),l=n(1141),r=n(7410);function o(e){return a.createElement(a.Fragment,null,a.createElement(l.Z,e))}(void 0!==n.g?n.g:window).Prism=r.Z,n(9385)}}]); \ No newline at end of file diff --git a/assets/js/ec0679b0.a7d27dc2.js b/assets/js/ec0679b0.a7d27dc2.js deleted file mode 100644 index f7cfe82..0000000 --- a/assets/js/ec0679b0.a7d27dc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[4572],{2481:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"community"}')}}]); \ No newline at end of file diff --git a/assets/js/edc931f8.d7cf7051.js b/assets/js/edc931f8.d7cf7051.js deleted file mode 100644 index 243db0e..0000000 --- a/assets/js/edc931f8.d7cf7051.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6160],{4137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},f="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},y=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=p(r),y=o,m=f["".concat(l,".").concat(y)]||f[y]||s[y]||a;return r?n.createElement(m,c(c({ref:t},u),{},{components:r})):n.createElement(m,c({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=y;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[f]="string"==typeof e?e:o,c[1]=i;for(var p=2;p<a;p++)c[p]=r[p];return n.createElement.apply(null,c)}return n.createElement.apply(null,r)}y.displayName="MDXCreateElement"},5236:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>s,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(4137));const a={},c=void 0,i={unversionedId:"index",id:"index",title:"index",description:"",source:"@site/community/index.md",sourceDirName:".",slug:"/",permalink:"/community/",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"community"},l={},p=[],u={toc:p},f="wrapper";function s(e){let{components:t,...r}=e;return(0,o.kt)(f,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.28e04bb6.js b/assets/js/main.28e04bb6.js deleted file mode 100644 index 8773706..0000000 --- a/assets/js/main.28e04bb6.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.28e04bb6.js.LICENSE.txt */ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"088d37c1":[()=>n.e(4982).then(n.t.bind(n,4469,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(4474),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1938696b":[()=>n.e(3835).then(n.t.bind(n,1343,19)),"~blog/default/blog-tags-reality-world-74d-list.json",1343],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(4474),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"306a8c6c":[()=>n.e(7616).then(n.t.bind(n,9479,19)),"~docs/community/version-current-metadata-prop-751.json",9479],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"398258ee":[()=>n.e(9553).then(n.bind(n,6587)),"@site/src/pages/feature/features.mdx",6587],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"5062db26":[()=>n.e(990).then(n.t.bind(n,5745,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"51e4ac6f":[()=>n.e(9169).then(n.t.bind(n,7736,19)),"~blog/default/blog-tags-open-source-6de.json",7736],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"856e59d2":[()=>n.e(8477).then(n.t.bind(n,5744,19)),"~blog/default/blog-tags-reality-world-74d.json",5744],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,769)),"@site/src/pages/features.js",769],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a8378f8b:[()=>n.e(6330).then(n.t.bind(n,2481,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-docs/community/plugin-route-context-module-100.json",2481],adf73beb:[()=>n.e(2625).then(n.t.bind(n,6769,19)),"~blog/default/blog-tags-cogine-a11.json",6769],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],bdff1965:[()=>n.e(2307).then(n.t.bind(n,6948,19)),"~blog/default/blog-tags-open-source-6de-list.json",6948],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],edc931f8:[()=>n.e(6160).then(n.bind(n,5236)),"@site/community/index.md",5236],f5134437:[()=>n.e(5505).then(n.t.bind(n,6128,19)),"~blog/default/blog-tags-cogine-a11-list.json",6128],fb33060d:[()=>n.e(8287).then(n.t.bind(n,3769,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/app",component:f("/app","530"),exact:!0},{path:"/blog",component:f("/blog","f7b"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","a84"),exact:!0},{path:"/blog/conversational-computing",component:f("/blog/conversational-computing","da4"),exact:!0},{path:"/blog/reality-world-open-source-conference",component:f("/blog/reality-world-open-source-conference","ad7"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","425"),exact:!0},{path:"/blog/tags/cogine",component:f("/blog/tags/cogine","dd7"),exact:!0},{path:"/blog/tags/open-source",component:f("/blog/tags/open-source","432"),exact:!0},{path:"/blog/tags/reality-world",component:f("/blog/tags/reality-world","bc7"),exact:!0},{path:"/blog/the-evolution-of-ECS",component:f("/blog/the-evolution-of-ECS","2f6"),exact:!0},{path:"/blog/thinking",component:f("/blog/thinking","8dc"),exact:!0},{path:"/cogine",component:f("/cogine","59a"),exact:!0},{path:"/community/about-open-source",component:f("/community/about-open-source","231"),exact:!0},{path:"/community/about-reality-world",component:f("/community/about-reality-world","b1e"),exact:!0},{path:"/community/contact",component:f("/community/contact","b97"),exact:!0},{path:"/community/questions",component:f("/community/questions","42d"),exact:!0},{path:"/community/resources",component:f("/community/resources","841"),exact:!0},{path:"/community/roadmap",component:f("/community/roadmap","ec1"),exact:!0},{path:"/feature/chidori",component:f("/feature/chidori","223"),exact:!0},{path:"/feature/cogine",component:f("/feature/cogine","136"),exact:!0},{path:"/feature/features",component:f("/feature/features","71e"),exact:!0},{path:"/feature/langchain",component:f("/feature/langchain","201"),exact:!0},{path:"/features",component:f("/features","abd"),exact:!0},{path:"/reality-create",component:f("/reality-create","428"),exact:!0},{path:"/reality-world-paper/",component:f("/reality-world-paper/","ea9"),exact:!0},{path:"/self-deploying",component:f("/self-deploying","867"),exact:!0},{path:"/whitepaper/",component:f("/whitepaper/","d0d"),exact:!0},{path:"/community",component:f("/community","bd2"),routes:[{path:"/community/",component:f("/community/","28b"),exact:!0,sidebar:"community"}]},{path:"/docs",component:f("/docs","1f4"),routes:[{path:"/docs/intro",component:f("/docs/intro","f79"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/",component:f("/docs/introduction/","22e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/advantage",component:f("/docs/introduction/advantage","790"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/business-model",component:f("/docs/introduction/business-model","9d0"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/current",component:f("/docs/introduction/current","afd"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/evolution",component:f("/docs/introduction/evolution","adc"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/user",component:f("/docs/introduction/user","5ba"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/value",component:f("/docs/introduction/value","c1a"),exact:!0,sidebar:"docsSidebar"}]},{path:"/",component:f("/","d6c"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,v,b,w,E,S,k,_,x,O,P,C,T,I,A,N,L,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(l>0){var s=R.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new R.Token(n.slice(i,a),s))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),v=/^(.+?)(ss|i)es$/,b=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,N=/ll$/,L=new RegExp("^"+u+s+"[^aeiouwxy]$"),j=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=b,(o=v).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=L,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=N).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(j)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new R.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new R.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new R.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=R.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=R.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===R.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=R.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],v=this.invertedIndex[y],b=v._index;for(h=0;h<s.fields.length;h++){var w=v[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new R.Set(E);if(s.presence==R.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=R.Set.complete)),s.presence!=R.Query.presence.PROHIBITED){if(r[A].upsert(b,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new R.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new R.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=R.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===R.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=R.Set.complete,I=R.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var N=Object.keys(n),L=[],j=Object.create(null);if(t.isNegated()){N=Object.keys(this.fieldVectors);for(l=0;l<N.length;l++){P=N[l];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(l=0;l<N.length;l++){var M=(D=R.FieldRef.fromString(N[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=j[M]))F.score+=z,F.matchData.combine(n[D]);else{var $={ref:M,score:z,matchData:n[D]};j[M]=$,L.push($)}}}return L.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,l=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new R.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new R.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var v=this.metadataWhitelist[y],b=m.metadata[v];null==this.invertedIndex[m][a][n][v]&&(this.invertedIndex[m][a][n][v]=[]),this.invertedIndex[m][a][n][v].push(b)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new R.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,v=c[m],b=u[v],w=this.invertedIndex[v]._index;void 0===r[v]?(h=R.idf(this.invertedIndex[v],this.documentCount),r[v]=h):h=r[v],g=h*((this._k1+1)*b)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+b),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),v=n(5463),b=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,b.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=j,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(3256),Q=n(1048);function V(){const e=(0,Q.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function W(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement(U,null),r.createElement(R,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),L(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;L(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(W,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true},"community":{"path":"/community","versions":[{"name":"current","label":"Next","isLast":true,"path":"/community","mainDocId":"index","docs":[{"id":"index","path":"/community/","sidebar":"community"}],"draftIds":[],"sidebars":{"community":{"link":{"path":"/community/","label":"index"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...v}=e;const{siteConfig:{trailingSlash:b,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:b,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,N=(0,o.useRef)(),L=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&N.current&&N.current.disconnect()})),[N,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||g||S.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(I,(0,r.Z)({},v,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{k.current=e,A&&e&&x&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),N.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const v={skipToContent:"skipToContent_fXgn"};function b(){return r.createElement(h,{className:v.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),N=n(3086);const L=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,N.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(L.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(L);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(U.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const Z=r.memo(H),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(Z,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var W=n(6811);function q(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function ve(e){return{current:e}}function be(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(be(e)||be(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ne(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Le(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Le(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Ne(Ne({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Ne(Ne({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Ne(Ne({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$e(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ze="2.6.0",Qe="https://cdn.jsdelivr.net/npm/search-insights@".concat(Ze,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return Ue({eventName:"Items Viewed"},e)})),state:o})}),400);function We(e){var t=function(e){return Ue({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=Ze,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Qe,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=Re(i),s=ve([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:Ue({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function vt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(jt(t,n,e),jt(r,n,e)),n)},catch:function(t){return At(e.catch(jt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(jt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Nt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Lt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function jt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Rt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Nt.resolve=function(e){return Lt(Promise.resolve(e))},Nt.reject=function(e){return Lt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $t(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ut,Ht,Zt,Qt=null,Vt=(Ut=-1,Ht=-1,Zt=void 0,function(e){var t=++Ut;return Promise.resolve(e).then((function(e){return Zt&&t<Ht?Zt:(Ht=t,Zt=e,e)}))});function Wt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=$t(e,Mt);Qt&&o.environment.clearTimeout(Qt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Lt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Qt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Lt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return bt(bt({},e),{},wt({},t.source.sourceId,bt(bt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=Rt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Qt&&o.environment.clearTimeout(Qt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Wt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=Rt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Wt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=Rt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Wt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=Rt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Wt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Rt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Wt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:bn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Rt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Nn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ln(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Wt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(We(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var jn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,jn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},Rn=new Map;function Dn(e){var t=Rn.get(this);return t||(t=new Map,Rn.set(this,t)),(t=jn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function $n(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function Un(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||$n(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,Un,r):e.removeEventListener(t,Un,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Zn(e){return"onChange"===e?"onInput":e}function Qn(e,t){for(var n in t)Hn(e,Zn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Zn(n),t[n])}var Wn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Wn),i=e.document.createElement(t);return Qn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Qn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],vr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,br=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,v,b,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):br(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(v=Lr(m,E,y=d+w,k))?p=gr:(p=E[v]||gr,E[v]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&$r(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(b=p===gr||null===p.__v)?-1==v&&w--:v!==y&&(v===y+1?w++:v>y?k>_-y?w+=v-y:w--:w=v<y&&v==y-1?v-y:0),y=d+w,"function"!=typeof m.type||v===y&&p.__k!==m.__k?"function"==typeof m.type||v===y&&!b?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Nr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),Ur(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),Ur(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Nr(n,r.__e,t));return t}function Nr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Lr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function jr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||vr.test(t)?n:n+"px"}function Rr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||jr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||jr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,v,b,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,v=(c=x.contextType)&&r[c.__c],b=c?v?v.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,b):(t.__c=d=new xr(y,b),d.constructor=x,d.render=Hr),v&&v.sub(d),d.props=y,d.state||(d.state={}),d.context=b,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,b),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,b)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,b),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=b,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,br(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)$r(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Rr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Rr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,br(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&Rr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&Rr(e,"checked",h,f.checked,!1))}return e}function $r(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function Ur(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||$r(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&Ur(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Zr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Qr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Wr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Wr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function vo(e){return vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vo(e)}var bo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Zr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){No(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function No(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Lo=[{segment:"autocomplete-js",version:hn}];function jo(e){return function(e){if(Array.isArray(e))return Ro(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ro(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ro(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ro(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,jo(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){Uo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Uo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Zo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Qo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Wo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=ve(!1),c=ve(e),d=ve(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,v=e.components,b=e.translations,w=ko(e,bo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),v),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),b)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Ln(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Lo,options:e}}))})),h=ve(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},v=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),b=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),v=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),b=f("label",lr({class:r.label,children:[v]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[b,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var N=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),L=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[N,A,I]}),j=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=f("div",{class:r.detachedFormContainer,children:[P,j]});h.appendChild(R),m.appendChild(L)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:b,submitButton:v,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Qn(b.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:b.value.root,form:b.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:v.value,dom:b.value,panelContainer:p.value?b.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Qn(r.label,{hidden:"stalled"===a.status}),Qn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Qn(r.clearButton,{hidden:!a.query}),Qn(r.detachedSearchButtonQuery,{textContent:a.query}),Qn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Wo(r,Qo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?$o($o({},e),{},Uo({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(b.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(b.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),b.value.input.focus()):(f.value.core.environment.document.body.removeChild(b.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:b.value.form,panelElement:b.value.panel,inputElement:b.value.input});return Qn(f.value.core.environment,e),function(){Qn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?b.value.detachedOverlay:b.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(b.value.root),function(){e.removeChild(b.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){b.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},v=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),b=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(b.current)return w.current=Ko({container:b.current,placeholder:v,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:b,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],v=(0,fa.lO)(n)[0],b=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):v.label,w=t&&y.length>1?void 0:ma(v).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:b,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:b,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function va(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function ba(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(ba,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(va,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Na(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const La={colorModeToggle:"colorModeToggle_DEke"};function ja(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function Ra(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ra,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Na,null),r.createElement(q,null),r.createElement(ja,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ja,{items:o}),r.createElement(V,{className:La.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function $a(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function Ua(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Za(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement(Ua,null))))))}function Qa(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement($a,{columns:t}):r.createElement(Za,{links:t})}var Va=n(6753);const Wa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Wa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Qa,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(b,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g,Oh:()=>b});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function b(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>v,oz:()=>b,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function b(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",v="hashchange";function b(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)($,e),$.length=n.length,C.notifyListeners($.location,$.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(O(e.state))}function A(){L(O(b()))}var N=!1;function L(e){if(N)N=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(N=!0,M(o))}(e)}))}}var j=O(b()),R=[j.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(v,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(v,A))}var z=!1;var $={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=R.indexOf($.location.key),u=R.slice(0,s+1);u.push(a.key),R=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=R.indexOf($.location.key);-1!==s&&(R[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",v=S[u],b=v.encodePath,w=v.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=b(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(f(t));-1===n&&(n=0);var r=R.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var N=_(),L=b(N);N!==L&&x(L);var j=O(),R=[f(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+b(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=b(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(f(z.location)),i=R.slice(0,a+1);i.push(t),R=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=b(y+t);_()!==o&&(I=t,x(o));var a=R.indexOf(f(z.location));-1!==a&&(R[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),v=f;function b(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:v,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var v=f(n,y);try{u(t,y,v)}catch(b){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,v=!!h.greedy,b=h.alias;if(v&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(v){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],N=_.slice(0,P),L=_.slice(P+A.length),j=k+_.length;d&&j>d.reach&&(d.reach=j);var R=S.prev;if(N&&(R=s(t,R,N),k+=N.length),u(t,R,O),S=s(t,R,new o(f,g?r.tokenize(A,g):A,b,A)),L&&s(t,S,L),O>1){var D={cause:f+","+m,reach:j};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),y&&v.push.apply(v,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,N=60115,L=60116,j=60121,R=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),N=B("react.memo"),L=B("react.lazy"),j=B("react.block"),B("react.scope"),R=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var Z=!1;function Q(e,t){if(!e||Z)return"";Z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{Z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Q(e.type,!1);case 11:return e=Q(e.type.render,!1);case 22:return e=Q(e.type._render,!1);case 1:return e=Q(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return W(e.type);case j:return W(e._render);case L:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},be=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ve).forEach((function(e){be.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Ne(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function je(){}var Re=Ne,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(je(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var $e={};Object.defineProperty($e,"passive",{get:function(){ze=!0}}),window.addEventListener("test",$e,$e),window.removeEventListener("test",$e,$e)}catch(he){ze=!1}function Ue(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,Ze=null,Qe=!1,Ve=null,We={onError:function(e){He=!0,Ze=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,Ze=null,Ue.apply(We,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){yt(e)&&n.delete(t)}function bt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(vt),ct.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,bt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Nt=new Map,Lt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function jt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Nt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var Rt=8;function Dt(e){if(0!=(1&e))return Rt=15,1;if(0!=(2&e))return Rt=14,2;if(0!=(4&e))return Rt=13,4;var t=24&e;return 0!==t?(Rt=12,t):0!=(32&e)?(Rt=11,32):0!==(t=192&e)?(Rt=10,t):0!=(256&e)?(Rt=9,256):0!==(t=3584&e)?(Rt=8,t):0!=(4096&e)?(Rt=7,4096):0!==(t=4186112&e)?(Rt=6,t):0!==(t=62914560&e)?(Rt=5,t):67108864&e?(Rt=4,67108864):0!=(134217728&e)?(Rt=3,134217728):0!==(t=805306368&e)?(Rt=2,t):0!=(1073741824&e)?(Rt=1,1073741824):(Rt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return Rt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=Rt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=Rt):0!==(l&=a)&&(r=Dt(l),o=Rt)}else 0!==(a=n&~i)?(r=Dt(a),o=Rt):0!==l&&(r=Dt(l),o=Rt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Rt)return t;Rt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function $t(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Zt(e)/Qt|0)|0},Zt=Math.log,Qt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Wt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||je();var o=Kt,a=De;De=!0;try{Le(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Wt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}jr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return jr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),vn=ln(o({},pn,{relatedTarget:0})),bn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Nn=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=ln(Ln),Rn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),$n=!1;function Un(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Zn=!1;var Qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Qn[e.type]:"textarea"===t}function Wn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Wn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Ne(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,vr=null,br=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==X(r)||("selectionStart"in(r=vr)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(br,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}jt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),jt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),jt(Lt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Nt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=Ze;He=!1,Ze=null,Qe||(Qe=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Qe)throw e=Ve,Qe=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Nr(t,!1,e,null),Nr(t,!0,e,null)})))}function Nr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Lr(a,e,o,t),i.add(l))}function Lr(e,t,n,r){var o=Nt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function jr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Re(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=vn;break;case"focusout":u="blur",s=vn;break;case"beforeblur":case"afterblur":s=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=bn;break;case It:s=Nn;break;case"scroll":s=mn;break;case"wheel":s=jn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(Rr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Wn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(vr=y,br=r,wr=null);break;case"focusout":wr=br=vr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var v;if(Dn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else Zn?Un(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(Bn&&"ko"!==n.locale&&(Zn||"onCompositionStart"!==b?"onCompositionEnd"===b&&Zn&&(v=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Zn=!0)),0<(y=Dr(r,b)).length&&(b=new Sn(b,e,null,n,o),i.push({event:b,listeners:y}),v?b.data=v:null!==(v=Hn(n))&&(b.data=v))),(v=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:($n=!0,zn);case"textInput":return(e=t.data)===zn&&$n?null:e;default:return null}}(e,n):function(e,t){if(Zn)return"compositionend"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Jt=null,Zn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=v))}Cr(i,t)}))}function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Rr(e,a,o)),null!=(a=Be(e,t))&&r.push(Rr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(Rr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(Rr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,$r=null;function Ur(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Zr="function"==typeof setTimeout?setTimeout:void 0,Qr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function vo(){uo(mo),uo(po)}function bo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,W(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,No=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,jo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,$o=!1,Uo=Io(),Ho=1e4>Uo?Io:function(){return Io()-Uo};function Zo(){switch(Ao()){case No:return 99;case Lo:return 98;case jo:return 97;case Ro:return 96;case Do:return 95;default:throw Error(i(332))}}function Qo(e){switch(e){case 99:return No;case 98:return Lo;case 97:return jo;case 96:return Ro;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Qo(e),xo(e,t)}function Wo(e,t,n){return e=Qo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!$o&&null!==Bo){$o=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(No,qo),n}finally{$o=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,$l|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function va(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function ba(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||U(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||U(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||U(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=U(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,v=s.next();null!==h&&!v.done;g++,v=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var b=p(o,h,v.value,u);if(null===b){null===h&&(h=y);break}e&&h&&null===b.alternate&&t(o,h),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b,h=y}if(v.done)return n(o,h),c;if(null===h){for(;!v.done;g++,v=s.next())null!==(v=f(o,v.value,u))&&(l=a(v,l,g),null===d?c=v:d.sibling=v,d=v);return c}for(h=r(o,h);!v.done;g++,v=s.next())null!==(v=m(h,o,g,v.value,u))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Ws(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if(U(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function Na(e){if(e===Ca)throw Error(i(174));return e}function La(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function ja(){uo(Ta),uo(Ia),uo(Aa)}function Ra(e){Na(Aa.current);var t=Na(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,$a=!1;function Ua(e,t){var n=Zs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Za(e){if($a){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Wr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,$a=!1,void(Ba=e);Ua(Ba,n)}Ba=e,za=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,$a=!1,Ba=e}}function Qa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!$a)return Qa(e),$a=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)Ua(e,t),t=Wr(t.nextSibling);if(Qa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Wr(e.stateNode.nextSibling):null;return!0}function Wa(){za=Ba=null,$a=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Ni:Li,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=ji,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,$l|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Ll;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function vi(){return si().memoizedState}function bi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return bi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Zo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,bi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return bi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if($a){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:vi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},ji={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:vi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Ri=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Qs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function $i(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Zi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),ba(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||va(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||va(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Qi(e,t,n,r,a,o)}function Qi(e,t,n,r,o,a){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,Ri.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?bo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&bo(0,t.context,!1),La(e,t.containerInfo)}var Wi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Za(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$l|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!$a)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&vo(),null;case 3:return ja(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=Na(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Na(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Wi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Na(Aa.current),Na(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Ll||0==(134217727&$l)&&0==(134217727&Ul)||vs(Ll,Rl))),(r||n)&&(t.flags|=4),null);case 4:return ja(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!$a)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&vo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(ja(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return ja(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Na(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function bl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(bl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(bl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Ql=Ho(),vl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=Us.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Nl=0,Ll=null,jl=null,Rl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,$l=0,Ul=0,Hl=0,Zl=null,Ql=0,Vl=1/0;function Wl(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Nl)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Zo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Zl?Zl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Zo(),0!=(4&Nl)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;Ut(e,t,n),e===Ll&&(Ul|=t,4===Fl&&vs(e,Rl));var r=Zo();1===t?0!=(8&Nl)&&0==(48&Nl)?bs(e):(gs(e,n),0===Nl&&(Wl(),qo())):(0==(4&Nl)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Zl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=Rt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Ll?Rl:0),t=Rt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=bs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(No,Go)):Bo.push(n),n=Mo):14===t?n=Wo(99,bs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Wo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Nl))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Mt(e,e===Ll?Rl:0);if(0===n)return null;var r=n,o=Nl;Nl|=16;var a=Os();for(Ll===e&&Rl===r||(Wl(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Nl=o,null!==jl?r=0:(Ll=null,Rl=0,r=Fl),0!=(zl&Ul))_s(e,0);else if(0!==r){if(2===r&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),vs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ns(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Ql+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Zr(Ns.bind(null,e),r);break}Ns(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Zr(Ns.bind(null,e),n);break}Ns(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function vs(e,t){for(t&=~Hl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function bs(e){if(0!=(48&Nl))throw Error(i(327));if(Rs(),e===Ll&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ps(e,t);0!=(zl&Ul)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),vs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ns(e),gs(e,Ho()),null}function ws(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Es(e,t){var n=Nl;Nl&=-2,Nl|=8;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Qr(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&vo();break;case 3:ja(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:ja();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Ll=e,jl=Vs(e.current,null),Rl=Dl=zl=t,Fl=0,Bl=null,Hl=Ul=$l=0}function xs(e,t){for(;;){var n=jl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,jl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=ca(-1,1);v.tag=2,da(l,v)}l.lanes|=1;break e}s=void 0,l=t;var b=a.pingCache;if(null===b?(b=a.pingCache=new dl,s=new Set,b.set(u,s)):void 0===(s=b.get(u))&&(s=new Set,b.set(u,s)),!s.has(l)){s.add(l);var w=$s.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Nl;Nl|=16;var r=Os();for(Ll===e&&Rl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Nl=n,Il.current=r,null!==jl)throw Error(i(261));return Ll=null,Rl=0,Fl}function Cs(){for(;null!==jl;)Is(jl)}function Ts(){for(;null!==jl&&!Co();)Is(jl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):jl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(jl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(jl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ns(e){var t=Zo();return Vo(99,Ls.bind(null,e,t)),null}function Ls(e,t){do{Rs()}while(null!==es);if(0!=(48&Nl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Ll&&(jl=Ll=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Nl,Nl|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var v;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(v=g.firstChild);)y=g,g=v;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(v=g.nextSibling))break;y=(g=y).parentNode}g=v}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;$r={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{js()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var b=Gl.flags;if(16&b&&ye(Gl.stateNode,""),128&b){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&b){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=$r,w=hr(),b=E.focusedElem,l=E.selectionRange,w!==b&&b&&b.ownerDocument&&mr(b.ownerDocument.documentElement,b)){null!==l&&gr(b)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in b?(b.selectionStart=w,b.selectionEnd=Math.min(E,b.value.length)):(E=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=b.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(b,S),a=pr(b,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=b;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(E=w[b]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,$r=zr=null,e.current=n,Gl=r;do{try{for(b=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(b,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Nl=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Nl)||qo(),null}function js(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Wo(97,(function(){return Rs(),null}))),Gl=Gl.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Nl))throw Error(i(331));var t=Nl;Nl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Nl=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&(Ut(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))Ut(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function $s(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Ll===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Ho()-Ql?_s(e,0):Hl|=n),gs(e,t)}function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Zo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&(Ut(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Zs(e,t,n,r){return new Hs(e,t,n,r)}function Qs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Zs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Qs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Zs(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Zs(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Zs(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Zs(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case N:l=14;break e;case L:l=16,r=null;break e;case j:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Zs(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Zs(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Zs(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Zs(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Zs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=$t(0),this.expirationTimes=$t(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$t(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Zs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Wa();break;case 5:Ra(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,$i(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Qi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Qs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===N)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Zi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Zi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Wa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Wr(t.stateNode.containerInfo.firstChild),Ba=t,a=$a=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Wa();t=t.child}return t;case 5:return Ra(t),null===e&&Za(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),Ui(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Za(t),null;case 13:return Xi(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),ba(t,r,o),Ea(t,r,o,n),Qi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return $i(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ne=ws,Le=function(e,t,n,r,o){var a=Nl;Nl|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Nl=a)&&(Wl(),qo())}},je=function(){0==(49&Nl)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),Rs())},Re=function(e,t){var n=Nl;Nl|=2;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,Rs,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Q,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},b={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},L=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+j(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+j(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,b),a=A(t,y),i=A(n,v);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),Z="undefined"!=typeof document,Q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Q.canUseDOM=Z,Q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Q.defaultProps={context:{}},Q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),W(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Q.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===b||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>b,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},v=a.forwardRef;void 0===v&&(v=y);var b=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,b=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(b?b(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var N=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==v?N.ref=t||x:N.innerRef=x,a.createElement(g,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>b,LX:()=>k,TH:()=>L,k6:()=>N,rs:()=>I,s6:()=>v});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),v=g("Router"),b=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(v.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function N(){return A(y)}function L(){return A(v).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],v=n[5],b=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===b||"*"===b,k="?"===b||"*"===b,_=n[2]||c,x=y||v;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var b=v.prototype=new y;b.constructor=v,r(b,g.prototype),b.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var N={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,v=5,b=0;t.unstable_shouldYield=function(){return t.unstable_now()>=b},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();b=e+v;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,N=!1,L=!1;function j(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function R(e){if(L=!1,j(e),!N)if(null!==k(O))N=!0,n(D);else{var t=k(P);null!==t&&r(R,t.startTime-e)}}function D(e,n){N=!1,L&&(L=!1,o()),A=!0;var a=I;try{for(j(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),j(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||A||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(L?o():L=!0,r(R,i-l))):(e.sortIndex=s,S(O,e),N||A||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"Products",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"Self-deploying"}],position:"left"},{label:"Developers",type:"dropdown",items:[{to:"/whitepaper",label:"Whitepaper"},{to:"/docs/intro",label:"Documentation"},{to:"/thinking",label:"Thinking"}],position:"left"},{to:"/blog",label:"Blog",position:"left"},{to:"/features",label:"Features & Comparison",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"Community",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"About open source"},{to:"/community/about-reality-world",label:"About Reality World"},{to:"/community/roadmap",label:"Roadmap"},{to:"/community/contact",label:"Contact"},{to:"/community/questions",label:"Questions"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/home/runner/work/cogine.github.io/cogine.github.io/sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"/home/runner/work/cogine.github.io/cogine.github.io/src/css/custom.css"}}]],plugins:[["content-docs",{id:"community",path:"community",routeBasePath:"community",sidebarPath:"/home/runner/work/cogine.github.io/cogine.github.io/sidebarsCommunity.js"}],["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/app-530":{"__comp":"7fa55123","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/blog-f7b":{"__comp":"a6aa9e1f","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"b2b675dd"},"/blog/archive-a84":{"__comp":"9e4087bc","__context":{"plugin":"088d37c1"},"archive":"b2f554cd"},"/blog/conversational-computing-da4":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"ec9b07e8"},"/blog/reality-world-open-source-conference-ad7":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"92f86187"},"/blog/tags-425":{"__comp":"01a85c17","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/cogine-dd7":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"adf73beb","listMetadata":"f5134437"},"/blog/tags/open-source-432":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"51e4ac6f","listMetadata":"bdff1965"},"/blog/tags/reality-world-bc7":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"856e59d2","listMetadata":"1938696b"},"/blog/the-evolution-of-ECS-2f6":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"cede0149"},"/blog/thinking-8dc":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"0c125c2b"},"/cogine-59a":{"__comp":"28207210","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/community/about-open-source-231":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"14fa4984"},"/community/about-reality-world-b1e":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"a394719f"},"/community/contact-b97":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2c22cdfb"},"/community/questions-42d":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"df434585"},"/community/resources-841":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6ba9ce7"},"/community/roadmap-ec1":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"68bfee64"},"/feature/chidori-223":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"5503d724"},"/feature/cogine-136":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2ae76f65"},"/feature/features-71e":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"398258ee"},"/feature/langchain-201":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6e914c2"},"/features-abd":{"__comp":"a54713d3","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/reality-create-428":{"__comp":"a6d44343","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/reality-world-paper/-ea9":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"be3188a8"},"/self-deploying-867":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"0b68990b"},"/whitepaper/-d0d":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"c6a65125"},"/community-bd2":{"__comp":"1be78505","__context":{"plugin":"a8378f8b"},"versionMetadata":"306a8c6c"},"/community/-28b":{"__comp":"17896441","content":"edc931f8"},"/docs-1f4":{"__comp":"1be78505","__context":{"plugin":"fb33060d"},"versionMetadata":"935f2afb"},"/docs/intro-f79":{"__comp":"17896441","content":"0e384e19"},"/docs/introduction/-22e":{"__comp":"17896441","content":"c62485b9"},"/docs/introduction/advantage-790":{"__comp":"17896441","content":"16c820cc"},"/docs/introduction/business-model-9d0":{"__comp":"17896441","content":"eb4e993a"},"/docs/introduction/current-afd":{"__comp":"17896441","content":"1e248c61"},"/docs/introduction/evolution-adc":{"__comp":"17896441","content":"c84e1d07"},"/docs/introduction/user-5ba":{"__comp":"17896441","content":"1e8a94b6"},"/docs/introduction/value-c1a":{"__comp":"17896441","content":"386fda77"},"/-d6c":{"__comp":"c4f5d8e4","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.592074ea.js b/assets/js/main.592074ea.js new file mode 100644 index 0000000..48e9f33 --- /dev/null +++ b/assets/js/main.592074ea.js @@ -0,0 +1,2 @@ +/*! For license information please see main.592074ea.js.LICENSE.txt */ +(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"088d37c1":[()=>n.e(4982).then(n.t.bind(n,4469,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(4474),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1938696b":[()=>n.e(3835).then(n.t.bind(n,1343,19)),"~blog/default/blog-tags-reality-world-74d-list.json",1343],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(4474),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"308394e9":[()=>n.e(3650).then(n.bind(n,4317)),"@site/src/pages/learning/Reality-World.md",4317],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"398258ee":[()=>n.e(9553).then(n.bind(n,6587)),"@site/src/pages/feature/features.mdx",6587],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"5062db26":[()=>n.e(990).then(n.t.bind(n,5745,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"51e4ac6f":[()=>n.e(9169).then(n.t.bind(n,7736,19)),"~blog/default/blog-tags-open-source-6de.json",7736],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"856e59d2":[()=>n.e(8477).then(n.t.bind(n,5744,19)),"~blog/default/blog-tags-reality-world-74d.json",5744],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,769)),"@site/src/pages/features.js",769],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],adf73beb:[()=>n.e(2625).then(n.t.bind(n,6769,19)),"~blog/default/blog-tags-cogine-a11.json",6769],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],bdff1965:[()=>n.e(2307).then(n.t.bind(n,6948,19)),"~blog/default/blog-tags-open-source-6de-list.json",6948],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],f5134437:[()=>n.e(5505).then(n.t.bind(n,6128,19)),"~blog/default/blog-tags-cogine-a11-list.json",6128],fb33060d:[()=>n.e(8287).then(n.t.bind(n,3769,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/app",component:f("/app","530"),exact:!0},{path:"/blog",component:f("/blog","f7b"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","a84"),exact:!0},{path:"/blog/conversational-computing",component:f("/blog/conversational-computing","da4"),exact:!0},{path:"/blog/reality-world-open-source-conference",component:f("/blog/reality-world-open-source-conference","ad7"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","425"),exact:!0},{path:"/blog/tags/cogine",component:f("/blog/tags/cogine","dd7"),exact:!0},{path:"/blog/tags/open-source",component:f("/blog/tags/open-source","432"),exact:!0},{path:"/blog/tags/reality-world",component:f("/blog/tags/reality-world","bc7"),exact:!0},{path:"/blog/the-evolution-of-ECS",component:f("/blog/the-evolution-of-ECS","2f6"),exact:!0},{path:"/blog/thinking",component:f("/blog/thinking","8dc"),exact:!0},{path:"/cogine",component:f("/cogine","59a"),exact:!0},{path:"/community/about-open-source",component:f("/community/about-open-source","231"),exact:!0},{path:"/community/about-reality-world",component:f("/community/about-reality-world","b1e"),exact:!0},{path:"/community/contact",component:f("/community/contact","b97"),exact:!0},{path:"/community/questions",component:f("/community/questions","42d"),exact:!0},{path:"/community/resources",component:f("/community/resources","841"),exact:!0},{path:"/community/roadmap",component:f("/community/roadmap","ec1"),exact:!0},{path:"/feature/chidori",component:f("/feature/chidori","223"),exact:!0},{path:"/feature/cogine",component:f("/feature/cogine","136"),exact:!0},{path:"/feature/features",component:f("/feature/features","71e"),exact:!0},{path:"/feature/langchain",component:f("/feature/langchain","201"),exact:!0},{path:"/features",component:f("/features","abd"),exact:!0},{path:"/learning/Reality-World",component:f("/learning/Reality-World","669"),exact:!0},{path:"/reality-create",component:f("/reality-create","428"),exact:!0},{path:"/reality-world-paper/",component:f("/reality-world-paper/","ea9"),exact:!0},{path:"/self-deploying",component:f("/self-deploying","867"),exact:!0},{path:"/whitepaper/",component:f("/whitepaper/","d0d"),exact:!0},{path:"/docs",component:f("/docs","1f4"),routes:[{path:"/docs/intro",component:f("/docs/intro","f79"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/",component:f("/docs/introduction/","22e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/advantage",component:f("/docs/introduction/advantage","790"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/business-model",component:f("/docs/introduction/business-model","9d0"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/current",component:f("/docs/introduction/current","afd"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/evolution",component:f("/docs/introduction/evolution","adc"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/user",component:f("/docs/introduction/user","5ba"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/value",component:f("/docs/introduction/value","c1a"),exact:!0,sidebar:"docsSidebar"}]},{path:"/",component:f("/","d6c"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,v,b,w,E,S,k,_,x,O,P,C,T,I,A,N,L,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(l>0){var s=R.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new R.Token(n.slice(i,a),s))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),v=/^(.+?)(ss|i)es$/,b=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,N=/ll$/,L=new RegExp("^"+u+s+"[^aeiouwxy]$"),j=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=b,(o=v).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=L,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=N).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(j)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new R.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new R.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new R.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=R.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=R.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===R.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=R.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],v=this.invertedIndex[y],b=v._index;for(h=0;h<s.fields.length;h++){var w=v[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new R.Set(E);if(s.presence==R.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=R.Set.complete)),s.presence!=R.Query.presence.PROHIBITED){if(r[A].upsert(b,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new R.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new R.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=R.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===R.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=R.Set.complete,I=R.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var N=Object.keys(n),L=[],j=Object.create(null);if(t.isNegated()){N=Object.keys(this.fieldVectors);for(l=0;l<N.length;l++){P=N[l];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(l=0;l<N.length;l++){var M=(D=R.FieldRef.fromString(N[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=j[M]))F.score+=z,F.matchData.combine(n[D]);else{var $={ref:M,score:z,matchData:n[D]};j[M]=$,L.push($)}}}return L.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,l=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new R.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new R.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var v=this.metadataWhitelist[y],b=m.metadata[v];null==this.invertedIndex[m][a][n][v]&&(this.invertedIndex[m][a][n][v]=[]),this.invertedIndex[m][a][n][v].push(b)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new R.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,v=c[m],b=u[v],w=this.invertedIndex[v]._index;void 0===r[v]?(h=R.idf(this.invertedIndex[v],this.documentCount),r[v]=h):h=r[v],g=h*((this._k1+1)*b)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+b),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),v=n(5463),b=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,b.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=j,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(3256),Q=n(1048);function V(){const e=(0,Q.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function W(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement(U,null),r.createElement(R,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),L(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;L(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(W,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...v}=e;const{siteConfig:{trailingSlash:b,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:b,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,N=(0,o.useRef)(),L=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&N.current&&N.current.disconnect()})),[N,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||g||S.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(I,(0,r.Z)({},v,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{k.current=e,A&&e&&x&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),N.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const v={skipToContent:"skipToContent_fXgn"};function b(){return r.createElement(h,{className:v.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),N=n(3086);const L=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,N.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(L.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(L);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(U.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const Z=r.memo(H),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(Z,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var W=n(6811);function q(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function ve(e){return{current:e}}function be(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(be(e)||be(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ne(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Le(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Le(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Ne(Ne({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Ne(Ne({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Ne(Ne({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$e(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ze="2.6.0",Qe="https://cdn.jsdelivr.net/npm/search-insights@".concat(Ze,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return Ue({eventName:"Items Viewed"},e)})),state:o})}),400);function We(e){var t=function(e){return Ue({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=Ze,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Qe,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=Re(i),s=ve([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:Ue({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function vt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(jt(t,n,e),jt(r,n,e)),n)},catch:function(t){return At(e.catch(jt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(jt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Nt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Lt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function jt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Rt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Nt.resolve=function(e){return Lt(Promise.resolve(e))},Nt.reject=function(e){return Lt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $t(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ut,Ht,Zt,Qt=null,Vt=(Ut=-1,Ht=-1,Zt=void 0,function(e){var t=++Ut;return Promise.resolve(e).then((function(e){return Zt&&t<Ht?Zt:(Ht=t,Zt=e,e)}))});function Wt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=$t(e,Mt);Qt&&o.environment.clearTimeout(Qt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Lt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Qt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Lt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return bt(bt({},e),{},wt({},t.source.sourceId,bt(bt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=Rt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Qt&&o.environment.clearTimeout(Qt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Wt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=Rt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Wt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=Rt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Wt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=Rt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Wt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Rt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Wt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:bn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Rt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Nn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ln(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Wt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(We(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var jn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,jn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},Rn=new Map;function Dn(e){var t=Rn.get(this);return t||(t=new Map,Rn.set(this,t)),(t=jn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function $n(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function Un(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||$n(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,Un,r):e.removeEventListener(t,Un,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Zn(e){return"onChange"===e?"onInput":e}function Qn(e,t){for(var n in t)Hn(e,Zn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Zn(n),t[n])}var Wn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Wn),i=e.document.createElement(t);return Qn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Qn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],vr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,br=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,v,b,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):br(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(v=Lr(m,E,y=d+w,k))?p=gr:(p=E[v]||gr,E[v]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&$r(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(b=p===gr||null===p.__v)?-1==v&&w--:v!==y&&(v===y+1?w++:v>y?k>_-y?w+=v-y:w--:w=v<y&&v==y-1?v-y:0),y=d+w,"function"!=typeof m.type||v===y&&p.__k!==m.__k?"function"==typeof m.type||v===y&&!b?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Nr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),Ur(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),Ur(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Nr(n,r.__e,t));return t}function Nr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Lr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function jr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||vr.test(t)?n:n+"px"}function Rr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||jr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||jr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,v,b,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,v=(c=x.contextType)&&r[c.__c],b=c?v?v.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,b):(t.__c=d=new xr(y,b),d.constructor=x,d.render=Hr),v&&v.sub(d),d.props=y,d.state||(d.state={}),d.context=b,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,b),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,b)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,b),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=b,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,br(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)$r(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Rr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Rr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,br(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&Rr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&Rr(e,"checked",h,f.checked,!1))}return e}function $r(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function Ur(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||$r(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&Ur(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Zr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Qr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Wr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Wr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function vo(e){return vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vo(e)}var bo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Zr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){No(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function No(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Lo=[{segment:"autocomplete-js",version:hn}];function jo(e){return function(e){if(Array.isArray(e))return Ro(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ro(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ro(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ro(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,jo(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){Uo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Uo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Zo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Qo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Wo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=ve(!1),c=ve(e),d=ve(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,v=e.components,b=e.translations,w=ko(e,bo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),v),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),b)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Ln(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Lo,options:e}}))})),h=ve(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},v=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),b=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),v=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),b=f("label",lr({class:r.label,children:[v]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[b,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var N=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),L=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[N,A,I]}),j=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=f("div",{class:r.detachedFormContainer,children:[P,j]});h.appendChild(R),m.appendChild(L)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:b,submitButton:v,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Qn(b.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:b.value.root,form:b.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:v.value,dom:b.value,panelContainer:p.value?b.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Qn(r.label,{hidden:"stalled"===a.status}),Qn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Qn(r.clearButton,{hidden:!a.query}),Qn(r.detachedSearchButtonQuery,{textContent:a.query}),Qn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Wo(r,Qo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?$o($o({},e),{},Uo({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(b.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(b.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),b.value.input.focus()):(f.value.core.environment.document.body.removeChild(b.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:b.value.form,panelElement:b.value.panel,inputElement:b.value.input});return Qn(f.value.core.environment,e),function(){Qn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?b.value.detachedOverlay:b.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(b.value.root),function(){e.removeChild(b.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){b.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},v=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),b=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(b.current)return w.current=Ko({container:b.current,placeholder:v,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:b,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],v=(0,fa.lO)(n)[0],b=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):v.label,w=t&&y.length>1?void 0:ma(v).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:b,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:b,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function va(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function ba(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(ba,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(va,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Na(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const La={colorModeToggle:"colorModeToggle_DEke"};function ja(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function Ra(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ra,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Na,null),r.createElement(q,null),r.createElement(ja,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ja,{items:o}),r.createElement(V,{className:La.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function $a(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function Ua(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Za(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement(Ua,null))))))}function Qa(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement($a,{columns:t}):r.createElement(Za,{links:t})}var Va=n(6753);const Wa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Wa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Qa,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(b,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g,Oh:()=>b});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function b(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>v,oz:()=>b,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function b(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",v="hashchange";function b(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)($,e),$.length=n.length,C.notifyListeners($.location,$.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(O(e.state))}function A(){L(O(b()))}var N=!1;function L(e){if(N)N=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(N=!0,M(o))}(e)}))}}var j=O(b()),R=[j.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(v,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(v,A))}var z=!1;var $={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=R.indexOf($.location.key),u=R.slice(0,s+1);u.push(a.key),R=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=R.indexOf($.location.key);-1!==s&&(R[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",v=S[u],b=v.encodePath,w=v.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=b(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(f(t));-1===n&&(n=0);var r=R.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var N=_(),L=b(N);N!==L&&x(L);var j=O(),R=[f(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+b(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=b(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(f(z.location)),i=R.slice(0,a+1);i.push(t),R=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=b(y+t);_()!==o&&(I=t,x(o));var a=R.indexOf(f(z.location));-1!==a&&(R[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),v=f;function b(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:v,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var v=f(n,y);try{u(t,y,v)}catch(b){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,v=!!h.greedy,b=h.alias;if(v&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(v){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],N=_.slice(0,P),L=_.slice(P+A.length),j=k+_.length;d&&j>d.reach&&(d.reach=j);var R=S.prev;if(N&&(R=s(t,R,N),k+=N.length),u(t,R,O),S=s(t,R,new o(f,g?r.tokenize(A,g):A,b,A)),L&&s(t,S,L),O>1){var D={cause:f+","+m,reach:j};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),y&&v.push.apply(v,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,N=60115,L=60116,j=60121,R=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),N=B("react.memo"),L=B("react.lazy"),j=B("react.block"),B("react.scope"),R=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var Z=!1;function Q(e,t){if(!e||Z)return"";Z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{Z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Q(e.type,!1);case 11:return e=Q(e.type.render,!1);case 22:return e=Q(e.type._render,!1);case 1:return e=Q(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return W(e.type);case j:return W(e._render);case L:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},be=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ve).forEach((function(e){be.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Ne(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function je(){}var Re=Ne,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(je(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var $e={};Object.defineProperty($e,"passive",{get:function(){ze=!0}}),window.addEventListener("test",$e,$e),window.removeEventListener("test",$e,$e)}catch(he){ze=!1}function Ue(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,Ze=null,Qe=!1,Ve=null,We={onError:function(e){He=!0,Ze=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,Ze=null,Ue.apply(We,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){yt(e)&&n.delete(t)}function bt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(vt),ct.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,bt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Nt=new Map,Lt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function jt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Nt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var Rt=8;function Dt(e){if(0!=(1&e))return Rt=15,1;if(0!=(2&e))return Rt=14,2;if(0!=(4&e))return Rt=13,4;var t=24&e;return 0!==t?(Rt=12,t):0!=(32&e)?(Rt=11,32):0!==(t=192&e)?(Rt=10,t):0!=(256&e)?(Rt=9,256):0!==(t=3584&e)?(Rt=8,t):0!=(4096&e)?(Rt=7,4096):0!==(t=4186112&e)?(Rt=6,t):0!==(t=62914560&e)?(Rt=5,t):67108864&e?(Rt=4,67108864):0!=(134217728&e)?(Rt=3,134217728):0!==(t=805306368&e)?(Rt=2,t):0!=(1073741824&e)?(Rt=1,1073741824):(Rt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return Rt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=Rt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=Rt):0!==(l&=a)&&(r=Dt(l),o=Rt)}else 0!==(a=n&~i)?(r=Dt(a),o=Rt):0!==l&&(r=Dt(l),o=Rt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Rt)return t;Rt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function $t(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Zt(e)/Qt|0)|0},Zt=Math.log,Qt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Wt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||je();var o=Kt,a=De;De=!0;try{Le(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Wt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}jr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return jr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),vn=ln(o({},pn,{relatedTarget:0})),bn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Nn=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=ln(Ln),Rn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),$n=!1;function Un(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Zn=!1;var Qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Qn[e.type]:"textarea"===t}function Wn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Wn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Ne(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,vr=null,br=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==X(r)||("selectionStart"in(r=vr)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(br,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}jt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),jt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),jt(Lt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Nt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=Ze;He=!1,Ze=null,Qe||(Qe=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Qe)throw e=Ve,Qe=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Nr(t,!1,e,null),Nr(t,!0,e,null)})))}function Nr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Lr(a,e,o,t),i.add(l))}function Lr(e,t,n,r){var o=Nt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function jr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Re(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=vn;break;case"focusout":u="blur",s=vn;break;case"beforeblur":case"afterblur":s=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=bn;break;case It:s=Nn;break;case"scroll":s=mn;break;case"wheel":s=jn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(Rr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Wn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(vr=y,br=r,wr=null);break;case"focusout":wr=br=vr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var v;if(Dn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else Zn?Un(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(Bn&&"ko"!==n.locale&&(Zn||"onCompositionStart"!==b?"onCompositionEnd"===b&&Zn&&(v=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Zn=!0)),0<(y=Dr(r,b)).length&&(b=new Sn(b,e,null,n,o),i.push({event:b,listeners:y}),v?b.data=v:null!==(v=Hn(n))&&(b.data=v))),(v=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:($n=!0,zn);case"textInput":return(e=t.data)===zn&&$n?null:e;default:return null}}(e,n):function(e,t){if(Zn)return"compositionend"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Jt=null,Zn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=v))}Cr(i,t)}))}function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Rr(e,a,o)),null!=(a=Be(e,t))&&r.push(Rr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(Rr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(Rr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,$r=null;function Ur(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Zr="function"==typeof setTimeout?setTimeout:void 0,Qr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function vo(){uo(mo),uo(po)}function bo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,W(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,No=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,jo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,$o=!1,Uo=Io(),Ho=1e4>Uo?Io:function(){return Io()-Uo};function Zo(){switch(Ao()){case No:return 99;case Lo:return 98;case jo:return 97;case Ro:return 96;case Do:return 95;default:throw Error(i(332))}}function Qo(e){switch(e){case 99:return No;case 98:return Lo;case 97:return jo;case 96:return Ro;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Qo(e),xo(e,t)}function Wo(e,t,n){return e=Qo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!$o&&null!==Bo){$o=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(No,qo),n}finally{$o=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,$l|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function va(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function ba(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||U(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||U(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||U(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=U(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,v=s.next();null!==h&&!v.done;g++,v=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var b=p(o,h,v.value,u);if(null===b){null===h&&(h=y);break}e&&h&&null===b.alternate&&t(o,h),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b,h=y}if(v.done)return n(o,h),c;if(null===h){for(;!v.done;g++,v=s.next())null!==(v=f(o,v.value,u))&&(l=a(v,l,g),null===d?c=v:d.sibling=v,d=v);return c}for(h=r(o,h);!v.done;g++,v=s.next())null!==(v=m(h,o,g,v.value,u))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Ws(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if(U(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function Na(e){if(e===Ca)throw Error(i(174));return e}function La(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function ja(){uo(Ta),uo(Ia),uo(Aa)}function Ra(e){Na(Aa.current);var t=Na(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,$a=!1;function Ua(e,t){var n=Zs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Za(e){if($a){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Wr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,$a=!1,void(Ba=e);Ua(Ba,n)}Ba=e,za=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,$a=!1,Ba=e}}function Qa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!$a)return Qa(e),$a=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)Ua(e,t),t=Wr(t.nextSibling);if(Qa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Wr(e.stateNode.nextSibling):null;return!0}function Wa(){za=Ba=null,$a=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Ni:Li,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=ji,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,$l|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Ll;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function vi(){return si().memoizedState}function bi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return bi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Zo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,bi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return bi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if($a){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:vi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},ji={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:vi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Ri=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Qs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function $i(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Zi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),ba(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||va(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||va(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Qi(e,t,n,r,a,o)}function Qi(e,t,n,r,o,a){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,Ri.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?bo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&bo(0,t.context,!1),La(e,t.containerInfo)}var Wi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Za(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$l|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!$a)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&vo(),null;case 3:return ja(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=Na(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Na(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Wi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Na(Aa.current),Na(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Ll||0==(134217727&$l)&&0==(134217727&Ul)||vs(Ll,Rl))),(r||n)&&(t.flags|=4),null);case 4:return ja(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!$a)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&vo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(ja(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return ja(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Na(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function bl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(bl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(bl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Ql=Ho(),vl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=Us.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Nl=0,Ll=null,jl=null,Rl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,$l=0,Ul=0,Hl=0,Zl=null,Ql=0,Vl=1/0;function Wl(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Nl)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Zo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Zl?Zl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Zo(),0!=(4&Nl)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;Ut(e,t,n),e===Ll&&(Ul|=t,4===Fl&&vs(e,Rl));var r=Zo();1===t?0!=(8&Nl)&&0==(48&Nl)?bs(e):(gs(e,n),0===Nl&&(Wl(),qo())):(0==(4&Nl)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Zl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=Rt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Ll?Rl:0),t=Rt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=bs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(No,Go)):Bo.push(n),n=Mo):14===t?n=Wo(99,bs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Wo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Nl))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Mt(e,e===Ll?Rl:0);if(0===n)return null;var r=n,o=Nl;Nl|=16;var a=Os();for(Ll===e&&Rl===r||(Wl(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Nl=o,null!==jl?r=0:(Ll=null,Rl=0,r=Fl),0!=(zl&Ul))_s(e,0);else if(0!==r){if(2===r&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),vs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ns(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Ql+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Zr(Ns.bind(null,e),r);break}Ns(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Zr(Ns.bind(null,e),n);break}Ns(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function vs(e,t){for(t&=~Hl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function bs(e){if(0!=(48&Nl))throw Error(i(327));if(Rs(),e===Ll&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ps(e,t);0!=(zl&Ul)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),vs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ns(e),gs(e,Ho()),null}function ws(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Es(e,t){var n=Nl;Nl&=-2,Nl|=8;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Qr(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&vo();break;case 3:ja(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:ja();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Ll=e,jl=Vs(e.current,null),Rl=Dl=zl=t,Fl=0,Bl=null,Hl=Ul=$l=0}function xs(e,t){for(;;){var n=jl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,jl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=ca(-1,1);v.tag=2,da(l,v)}l.lanes|=1;break e}s=void 0,l=t;var b=a.pingCache;if(null===b?(b=a.pingCache=new dl,s=new Set,b.set(u,s)):void 0===(s=b.get(u))&&(s=new Set,b.set(u,s)),!s.has(l)){s.add(l);var w=$s.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Nl;Nl|=16;var r=Os();for(Ll===e&&Rl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Nl=n,Il.current=r,null!==jl)throw Error(i(261));return Ll=null,Rl=0,Fl}function Cs(){for(;null!==jl;)Is(jl)}function Ts(){for(;null!==jl&&!Co();)Is(jl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):jl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(jl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(jl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ns(e){var t=Zo();return Vo(99,Ls.bind(null,e,t)),null}function Ls(e,t){do{Rs()}while(null!==es);if(0!=(48&Nl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Ll&&(jl=Ll=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Nl,Nl|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var v;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(v=g.firstChild);)y=g,g=v;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(v=g.nextSibling))break;y=(g=y).parentNode}g=v}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;$r={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{js()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var b=Gl.flags;if(16&b&&ye(Gl.stateNode,""),128&b){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&b){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=$r,w=hr(),b=E.focusedElem,l=E.selectionRange,w!==b&&b&&b.ownerDocument&&mr(b.ownerDocument.documentElement,b)){null!==l&&gr(b)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in b?(b.selectionStart=w,b.selectionEnd=Math.min(E,b.value.length)):(E=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=b.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(b,S),a=pr(b,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=b;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(E=w[b]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,$r=zr=null,e.current=n,Gl=r;do{try{for(b=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(b,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Nl=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Nl)||qo(),null}function js(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Wo(97,(function(){return Rs(),null}))),Gl=Gl.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Nl))throw Error(i(331));var t=Nl;Nl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Nl=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&(Ut(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))Ut(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function $s(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Ll===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Ho()-Ql?_s(e,0):Hl|=n),gs(e,t)}function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Zo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&(Ut(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Zs(e,t,n,r){return new Hs(e,t,n,r)}function Qs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Zs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Qs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Zs(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Zs(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Zs(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Zs(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case N:l=14;break e;case L:l=16,r=null;break e;case j:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Zs(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Zs(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Zs(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Zs(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Zs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=$t(0),this.expirationTimes=$t(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$t(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Zs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Wa();break;case 5:Ra(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,$i(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Qi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Qs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===N)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Zi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Zi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Wa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Wr(t.stateNode.containerInfo.firstChild),Ba=t,a=$a=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Wa();t=t.child}return t;case 5:return Ra(t),null===e&&Za(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),Ui(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Za(t),null;case 13:return Xi(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),ba(t,r,o),Ea(t,r,o,n),Qi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return $i(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ne=ws,Le=function(e,t,n,r,o){var a=Nl;Nl|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Nl=a)&&(Wl(),qo())}},je=function(){0==(49&Nl)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),Rs())},Re=function(e,t){var n=Nl;Nl|=2;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,Rs,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Q,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},b={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},L=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+j(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+j(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,b),a=A(t,y),i=A(n,v);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),Z="undefined"!=typeof document,Q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Q.canUseDOM=Z,Q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Q.defaultProps={context:{}},Q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),W(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Q.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===b||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>b,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},v=a.forwardRef;void 0===v&&(v=y);var b=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,b=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(b?b(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var N=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==v?N.ref=t||x:N.innerRef=x,a.createElement(g,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>b,LX:()=>k,TH:()=>L,k6:()=>N,rs:()=>I,s6:()=>v});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),v=g("Router"),b=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(v.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function N(){return A(y)}function L(){return A(v).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],v=n[5],b=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===b||"*"===b,k="?"===b||"*"===b,_=n[2]||c,x=y||v;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var b=v.prototype=new y;b.constructor=v,r(b,g.prototype),b.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var N={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,v=5,b=0;t.unstable_shouldYield=function(){return t.unstable_now()>=b},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();b=e+v;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,N=!1,L=!1;function j(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function R(e){if(L=!1,j(e),!N)if(null!==k(O))N=!0,n(D);else{var t=k(P);null!==t&&r(R,t.startTime-e)}}function D(e,n){N=!1,L&&(L=!1,o()),A=!0;var a=I;try{for(j(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),j(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||A||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(L?o():L=!0,r(R,i-l))):(e.sortIndex=s,S(O,e),N||A||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"Products",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"Self-deploying"}],position:"left"},{label:"Developers",type:"dropdown",items:[{to:"/whitepaper",label:"Whitepaper"},{to:"/docs/intro",label:"Documentation"},{to:"/learning/Reality-World",label:"Learning"}],position:"left"},{to:"/blog",label:"Blog",position:"left"},{to:"/features",label:"Features & Comparison",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"Community",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"About open source"},{to:"/community/about-reality-world",label:"About Reality World"},{to:"/community/roadmap",label:"Roadmap"},{to:"/community/contact",label:"Contact"},{to:"/community/questions",label:"Questions"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/home/runner/work/cogine.github.io/cogine.github.io/sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"/home/runner/work/cogine.github.io/cogine.github.io/src/css/custom.css"}}]],plugins:[["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/app-530":{"__comp":"7fa55123","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/blog-f7b":{"__comp":"a6aa9e1f","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"b2b675dd"},"/blog/archive-a84":{"__comp":"9e4087bc","__context":{"plugin":"088d37c1"},"archive":"b2f554cd"},"/blog/conversational-computing-da4":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"ec9b07e8"},"/blog/reality-world-open-source-conference-ad7":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"92f86187"},"/blog/tags-425":{"__comp":"01a85c17","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/cogine-dd7":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"adf73beb","listMetadata":"f5134437"},"/blog/tags/open-source-432":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"51e4ac6f","listMetadata":"bdff1965"},"/blog/tags/reality-world-bc7":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"856e59d2","listMetadata":"1938696b"},"/blog/the-evolution-of-ECS-2f6":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"cede0149"},"/blog/thinking-8dc":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"0c125c2b"},"/cogine-59a":{"__comp":"28207210","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/community/about-open-source-231":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"14fa4984"},"/community/about-reality-world-b1e":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"a394719f"},"/community/contact-b97":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2c22cdfb"},"/community/questions-42d":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"df434585"},"/community/resources-841":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6ba9ce7"},"/community/roadmap-ec1":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"68bfee64"},"/feature/chidori-223":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"5503d724"},"/feature/cogine-136":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2ae76f65"},"/feature/features-71e":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"398258ee"},"/feature/langchain-201":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6e914c2"},"/features-abd":{"__comp":"a54713d3","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/learning/Reality-World-669":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"308394e9"},"/reality-create-428":{"__comp":"a6d44343","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/reality-world-paper/-ea9":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"be3188a8"},"/self-deploying-867":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"0b68990b"},"/whitepaper/-d0d":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"c6a65125"},"/docs-1f4":{"__comp":"1be78505","__context":{"plugin":"fb33060d"},"versionMetadata":"935f2afb"},"/docs/intro-f79":{"__comp":"17896441","content":"0e384e19"},"/docs/introduction/-22e":{"__comp":"17896441","content":"c62485b9"},"/docs/introduction/advantage-790":{"__comp":"17896441","content":"16c820cc"},"/docs/introduction/business-model-9d0":{"__comp":"17896441","content":"eb4e993a"},"/docs/introduction/current-afd":{"__comp":"17896441","content":"1e248c61"},"/docs/introduction/evolution-adc":{"__comp":"17896441","content":"c84e1d07"},"/docs/introduction/user-5ba":{"__comp":"17896441","content":"1e8a94b6"},"/docs/introduction/value-c1a":{"__comp":"17896441","content":"386fda77"},"/-d6c":{"__comp":"c4f5d8e4","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.28e04bb6.js.LICENSE.txt b/assets/js/main.592074ea.js.LICENSE.txt similarity index 100% rename from assets/js/main.28e04bb6.js.LICENSE.txt rename to assets/js/main.592074ea.js.LICENSE.txt diff --git a/assets/js/main.6cbf0c8c.js b/assets/js/main.6cbf0c8c.js deleted file mode 100644 index d4b982b..0000000 --- a/assets/js/main.6cbf0c8c.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.6cbf0c8c.js.LICENSE.txt */ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"087bcfde":[()=>n.e(3111).then(n.t.bind(n,3769,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-docs\\default\\plugin-route-context-module-100.json",3769],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(8485),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1938696b":[()=>n.e(3835).then(n.t.bind(n,1343,19)),"~blog/default/blog-tags-reality-world-74d-list.json",1343],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(8485),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"308394e9":[()=>n.e(3650).then(n.bind(n,4317)),"@site/src/pages/learning/Reality-World.md",4317],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"398258ee":[()=>n.e(9553).then(n.bind(n,6587)),"@site/src/pages/feature/features.mdx",6587],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"49b2de74":[()=>n.e(8712).then(n.t.bind(n,5745,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-pages\\default\\plugin-route-context-module-100.json",5745],"51e4ac6f":[()=>n.e(9169).then(n.t.bind(n,7736,19)),"~blog/default/blog-tags-open-source-6de.json",7736],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"831b5c01":[()=>n.e(8852).then(n.t.bind(n,4469,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-blog\\default\\plugin-route-context-module-100.json",4469],"856e59d2":[()=>n.e(8477).then(n.t.bind(n,5744,19)),"~blog/default/blog-tags-reality-world-74d.json",5744],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,769)),"@site/src/pages/features.js",769],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],adf73beb:[()=>n.e(2625).then(n.t.bind(n,6769,19)),"~blog/default/blog-tags-cogine-a11.json",6769],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],bdff1965:[()=>n.e(2307).then(n.t.bind(n,6948,19)),"~blog/default/blog-tags-open-source-6de-list.json",6948],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],f5134437:[()=>n.e(5505).then(n.t.bind(n,6128,19)),"~blog/default/blog-tags-cogine-a11-list.json",6128],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/app",component:f("/app","177"),exact:!0},{path:"/blog",component:f("/blog","27c"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","d84"),exact:!0},{path:"/blog/conversational-computing",component:f("/blog/conversational-computing","8e1"),exact:!0},{path:"/blog/reality-world-open-source-conference",component:f("/blog/reality-world-open-source-conference","e18"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","2d3"),exact:!0},{path:"/blog/tags/cogine",component:f("/blog/tags/cogine","ec5"),exact:!0},{path:"/blog/tags/open-source",component:f("/blog/tags/open-source","afb"),exact:!0},{path:"/blog/tags/reality-world",component:f("/blog/tags/reality-world","792"),exact:!0},{path:"/blog/the-evolution-of-ECS",component:f("/blog/the-evolution-of-ECS","ed4"),exact:!0},{path:"/blog/thinking",component:f("/blog/thinking","680"),exact:!0},{path:"/cogine",component:f("/cogine","adf"),exact:!0},{path:"/community/about-open-source",component:f("/community/about-open-source","c95"),exact:!0},{path:"/community/about-reality-world",component:f("/community/about-reality-world","ccc"),exact:!0},{path:"/community/contact",component:f("/community/contact","e6a"),exact:!0},{path:"/community/questions",component:f("/community/questions","ea5"),exact:!0},{path:"/community/resources",component:f("/community/resources","584"),exact:!0},{path:"/community/roadmap",component:f("/community/roadmap","141"),exact:!0},{path:"/feature/chidori",component:f("/feature/chidori","07e"),exact:!0},{path:"/feature/cogine",component:f("/feature/cogine","d09"),exact:!0},{path:"/feature/features",component:f("/feature/features","bc5"),exact:!0},{path:"/feature/langchain",component:f("/feature/langchain","a51"),exact:!0},{path:"/features",component:f("/features","c1c"),exact:!0},{path:"/learning/Reality-World",component:f("/learning/Reality-World","d09"),exact:!0},{path:"/reality-create",component:f("/reality-create","7c9"),exact:!0},{path:"/reality-world-paper/",component:f("/reality-world-paper/","3cb"),exact:!0},{path:"/self-deploying",component:f("/self-deploying","36b"),exact:!0},{path:"/whitepaper/",component:f("/whitepaper/","518"),exact:!0},{path:"/docs",component:f("/docs","ee2"),routes:[{path:"/docs/intro",component:f("/docs/intro","f79"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/",component:f("/docs/introduction/","22e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/advantage",component:f("/docs/introduction/advantage","790"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/business-model",component:f("/docs/introduction/business-model","9d0"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/current",component:f("/docs/introduction/current","afd"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/evolution",component:f("/docs/introduction/evolution","adc"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/user",component:f("/docs/introduction/user","5ba"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/value",component:f("/docs/introduction/value","c1a"),exact:!0,sidebar:"docsSidebar"}]},{path:"/",component:f("/","d16"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,v,b,w,E,S,k,_,x,O,P,C,T,I,A,N,L,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(l>0){var s=R.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new R.Token(n.slice(i,a),s))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),v=/^(.+?)(ss|i)es$/,b=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,N=/ll$/,L=new RegExp("^"+u+s+"[^aeiouwxy]$"),j=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=b,(o=v).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=L,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=N).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(j)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new R.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new R.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new R.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=R.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=R.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===R.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=R.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],v=this.invertedIndex[y],b=v._index;for(h=0;h<s.fields.length;h++){var w=v[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new R.Set(E);if(s.presence==R.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=R.Set.complete)),s.presence!=R.Query.presence.PROHIBITED){if(r[A].upsert(b,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new R.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new R.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=R.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===R.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=R.Set.complete,I=R.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var N=Object.keys(n),L=[],j=Object.create(null);if(t.isNegated()){N=Object.keys(this.fieldVectors);for(l=0;l<N.length;l++){P=N[l];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(l=0;l<N.length;l++){var M=(D=R.FieldRef.fromString(N[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=j[M]))F.score+=z,F.matchData.combine(n[D]);else{var $={ref:M,score:z,matchData:n[D]};j[M]=$,L.push($)}}}return L.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,l=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new R.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new R.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var v=this.metadataWhitelist[y],b=m.metadata[v];null==this.invertedIndex[m][a][n][v]&&(this.invertedIndex[m][a][n][v]=[]),this.invertedIndex[m][a][n][v].push(b)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new R.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,v=c[m],b=u[v],w=this.invertedIndex[v]._index;void 0===r[v]?(h=R.idf(this.invertedIndex[v],this.documentCount),r[v]=h):h=r[v],g=h*((this._k1+1)*b)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+b),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),v=n(5463),b=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,b.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=j,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(3256),Q=n(1048);function V(){const e=(0,Q.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function W(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement(U,null),r.createElement(R,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),L(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;L(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(W,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...v}=e;const{siteConfig:{trailingSlash:b,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:b,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,N=(0,o.useRef)(),L=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&N.current&&N.current.disconnect()})),[N,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||g||S.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(I,(0,r.Z)({},v,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{k.current=e,A&&e&&x&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),N.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const v={skipToContent:"skipToContent_fXgn"};function b(){return r.createElement(h,{className:v.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),N=n(3086);const L=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,N.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(L.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(L);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(U.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const Z=r.memo(H),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(Z,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var W=n(6811);function q(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function ve(e){return{current:e}}function be(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(be(e)||be(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ne(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Le(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Le(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Ne(Ne({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Ne(Ne({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Ne(Ne({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$e(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ze="2.6.0",Qe="https://cdn.jsdelivr.net/npm/search-insights@".concat(Ze,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return Ue({eventName:"Items Viewed"},e)})),state:o})}),400);function We(e){var t=function(e){return Ue({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=Ze,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Qe,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=Re(i),s=ve([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:Ue({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function vt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(jt(t,n,e),jt(r,n,e)),n)},catch:function(t){return At(e.catch(jt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(jt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Nt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Lt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function jt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Rt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Nt.resolve=function(e){return Lt(Promise.resolve(e))},Nt.reject=function(e){return Lt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $t(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ut,Ht,Zt,Qt=null,Vt=(Ut=-1,Ht=-1,Zt=void 0,function(e){var t=++Ut;return Promise.resolve(e).then((function(e){return Zt&&t<Ht?Zt:(Ht=t,Zt=e,e)}))});function Wt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=$t(e,Mt);Qt&&o.environment.clearTimeout(Qt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Lt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Qt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Lt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return bt(bt({},e),{},wt({},t.source.sourceId,bt(bt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=Rt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Qt&&o.environment.clearTimeout(Qt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Wt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=Rt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Wt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=Rt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Wt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=Rt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Wt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Rt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Wt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:bn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Rt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Nn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ln(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Wt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(We(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var jn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,jn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},Rn=new Map;function Dn(e){var t=Rn.get(this);return t||(t=new Map,Rn.set(this,t)),(t=jn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function $n(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function Un(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||$n(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,Un,r):e.removeEventListener(t,Un,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Zn(e){return"onChange"===e?"onInput":e}function Qn(e,t){for(var n in t)Hn(e,Zn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Zn(n),t[n])}var Wn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Wn),i=e.document.createElement(t);return Qn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Qn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],vr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,br=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,v,b,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):br(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(v=Lr(m,E,y=d+w,k))?p=gr:(p=E[v]||gr,E[v]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&$r(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(b=p===gr||null===p.__v)?-1==v&&w--:v!==y&&(v===y+1?w++:v>y?k>_-y?w+=v-y:w--:w=v<y&&v==y-1?v-y:0),y=d+w,"function"!=typeof m.type||v===y&&p.__k!==m.__k?"function"==typeof m.type||v===y&&!b?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Nr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),Ur(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),Ur(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Nr(n,r.__e,t));return t}function Nr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Lr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function jr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||vr.test(t)?n:n+"px"}function Rr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||jr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||jr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,v,b,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,v=(c=x.contextType)&&r[c.__c],b=c?v?v.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,b):(t.__c=d=new xr(y,b),d.constructor=x,d.render=Hr),v&&v.sub(d),d.props=y,d.state||(d.state={}),d.context=b,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,b),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,b)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,b),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=b,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,br(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)$r(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Rr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Rr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,br(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&Rr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&Rr(e,"checked",h,f.checked,!1))}return e}function $r(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function Ur(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||$r(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&Ur(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Zr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Qr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Wr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Wr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function vo(e){return vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vo(e)}var bo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Zr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){No(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function No(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Lo=[{segment:"autocomplete-js",version:hn}];function jo(e){return function(e){if(Array.isArray(e))return Ro(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ro(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ro(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ro(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,jo(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){Uo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Uo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Zo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Qo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Wo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=ve(!1),c=ve(e),d=ve(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,v=e.components,b=e.translations,w=ko(e,bo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),v),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),b)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Ln(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Lo,options:e}}))})),h=ve(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},v=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),b=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),v=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),b=f("label",lr({class:r.label,children:[v]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[b,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var N=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),L=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[N,A,I]}),j=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=f("div",{class:r.detachedFormContainer,children:[P,j]});h.appendChild(R),m.appendChild(L)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:b,submitButton:v,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Qn(b.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:b.value.root,form:b.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:v.value,dom:b.value,panelContainer:p.value?b.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Qn(r.label,{hidden:"stalled"===a.status}),Qn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Qn(r.clearButton,{hidden:!a.query}),Qn(r.detachedSearchButtonQuery,{textContent:a.query}),Qn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Wo(r,Qo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?$o($o({},e),{},Uo({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(b.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(b.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),b.value.input.focus()):(f.value.core.environment.document.body.removeChild(b.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:b.value.form,panelElement:b.value.panel,inputElement:b.value.input});return Qn(f.value.core.environment,e),function(){Qn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?b.value.detachedOverlay:b.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(b.value.root),function(){e.removeChild(b.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){b.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},v=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),b=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(b.current)return w.current=Ko({container:b.current,placeholder:v,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:b,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],v=(0,fa.lO)(n)[0],b=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):v.label,w=t&&y.length>1?void 0:ma(v).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:b,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:b,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function va(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function ba(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(ba,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(va,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Na(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const La={colorModeToggle:"colorModeToggle_DEke"};function ja(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function Ra(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ra,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Na,null),r.createElement(q,null),r.createElement(ja,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ja,{items:o}),r.createElement(V,{className:La.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function $a(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function Ua(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Za(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement(Ua,null))))))}function Qa(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement($a,{columns:t}):r.createElement(Za,{links:t})}var Va=n(6753);const Wa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Wa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Qa,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(b,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g,Oh:()=>b});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function b(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>v,oz:()=>b,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function b(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",v="hashchange";function b(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)($,e),$.length=n.length,C.notifyListeners($.location,$.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(O(e.state))}function A(){L(O(b()))}var N=!1;function L(e){if(N)N=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(N=!0,M(o))}(e)}))}}var j=O(b()),R=[j.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(v,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(v,A))}var z=!1;var $={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=R.indexOf($.location.key),u=R.slice(0,s+1);u.push(a.key),R=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=R.indexOf($.location.key);-1!==s&&(R[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",v=S[u],b=v.encodePath,w=v.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=b(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(f(t));-1===n&&(n=0);var r=R.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var N=_(),L=b(N);N!==L&&x(L);var j=O(),R=[f(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+b(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=b(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(f(z.location)),i=R.slice(0,a+1);i.push(t),R=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=b(y+t);_()!==o&&(I=t,x(o));var a=R.indexOf(f(z.location));-1!==a&&(R[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),v=f;function b(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:v,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var v=f(n,y);try{u(t,y,v)}catch(b){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,v=!!h.greedy,b=h.alias;if(v&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(v){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],N=_.slice(0,P),L=_.slice(P+A.length),j=k+_.length;d&&j>d.reach&&(d.reach=j);var R=S.prev;if(N&&(R=s(t,R,N),k+=N.length),u(t,R,O),S=s(t,R,new o(f,g?r.tokenize(A,g):A,b,A)),L&&s(t,S,L),O>1){var D={cause:f+","+m,reach:j};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),y&&v.push.apply(v,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,N=60115,L=60116,j=60121,R=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),N=B("react.memo"),L=B("react.lazy"),j=B("react.block"),B("react.scope"),R=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var Z=!1;function Q(e,t){if(!e||Z)return"";Z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{Z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Q(e.type,!1);case 11:return e=Q(e.type.render,!1);case 22:return e=Q(e.type._render,!1);case 1:return e=Q(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return W(e.type);case j:return W(e._render);case L:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},be=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ve).forEach((function(e){be.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Ne(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function je(){}var Re=Ne,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(je(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var $e={};Object.defineProperty($e,"passive",{get:function(){ze=!0}}),window.addEventListener("test",$e,$e),window.removeEventListener("test",$e,$e)}catch(he){ze=!1}function Ue(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,Ze=null,Qe=!1,Ve=null,We={onError:function(e){He=!0,Ze=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,Ze=null,Ue.apply(We,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){yt(e)&&n.delete(t)}function bt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(vt),ct.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,bt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Nt=new Map,Lt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function jt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Nt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var Rt=8;function Dt(e){if(0!=(1&e))return Rt=15,1;if(0!=(2&e))return Rt=14,2;if(0!=(4&e))return Rt=13,4;var t=24&e;return 0!==t?(Rt=12,t):0!=(32&e)?(Rt=11,32):0!==(t=192&e)?(Rt=10,t):0!=(256&e)?(Rt=9,256):0!==(t=3584&e)?(Rt=8,t):0!=(4096&e)?(Rt=7,4096):0!==(t=4186112&e)?(Rt=6,t):0!==(t=62914560&e)?(Rt=5,t):67108864&e?(Rt=4,67108864):0!=(134217728&e)?(Rt=3,134217728):0!==(t=805306368&e)?(Rt=2,t):0!=(1073741824&e)?(Rt=1,1073741824):(Rt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return Rt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=Rt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=Rt):0!==(l&=a)&&(r=Dt(l),o=Rt)}else 0!==(a=n&~i)?(r=Dt(a),o=Rt):0!==l&&(r=Dt(l),o=Rt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Rt)return t;Rt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function $t(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Zt(e)/Qt|0)|0},Zt=Math.log,Qt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Wt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||je();var o=Kt,a=De;De=!0;try{Le(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Wt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}jr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return jr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),vn=ln(o({},pn,{relatedTarget:0})),bn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Nn=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=ln(Ln),Rn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),$n=!1;function Un(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Zn=!1;var Qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Qn[e.type]:"textarea"===t}function Wn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Wn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Ne(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,vr=null,br=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==X(r)||("selectionStart"in(r=vr)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(br,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}jt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),jt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),jt(Lt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Nt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=Ze;He=!1,Ze=null,Qe||(Qe=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Qe)throw e=Ve,Qe=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Nr(t,!1,e,null),Nr(t,!0,e,null)})))}function Nr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Lr(a,e,o,t),i.add(l))}function Lr(e,t,n,r){var o=Nt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function jr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Re(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=vn;break;case"focusout":u="blur",s=vn;break;case"beforeblur":case"afterblur":s=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=bn;break;case It:s=Nn;break;case"scroll":s=mn;break;case"wheel":s=jn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(Rr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Wn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(vr=y,br=r,wr=null);break;case"focusout":wr=br=vr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var v;if(Dn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else Zn?Un(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(Bn&&"ko"!==n.locale&&(Zn||"onCompositionStart"!==b?"onCompositionEnd"===b&&Zn&&(v=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Zn=!0)),0<(y=Dr(r,b)).length&&(b=new Sn(b,e,null,n,o),i.push({event:b,listeners:y}),v?b.data=v:null!==(v=Hn(n))&&(b.data=v))),(v=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:($n=!0,zn);case"textInput":return(e=t.data)===zn&&$n?null:e;default:return null}}(e,n):function(e,t){if(Zn)return"compositionend"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Jt=null,Zn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=v))}Cr(i,t)}))}function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Rr(e,a,o)),null!=(a=Be(e,t))&&r.push(Rr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(Rr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(Rr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,$r=null;function Ur(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Zr="function"==typeof setTimeout?setTimeout:void 0,Qr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function vo(){uo(mo),uo(po)}function bo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,W(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,No=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,jo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,$o=!1,Uo=Io(),Ho=1e4>Uo?Io:function(){return Io()-Uo};function Zo(){switch(Ao()){case No:return 99;case Lo:return 98;case jo:return 97;case Ro:return 96;case Do:return 95;default:throw Error(i(332))}}function Qo(e){switch(e){case 99:return No;case 98:return Lo;case 97:return jo;case 96:return Ro;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Qo(e),xo(e,t)}function Wo(e,t,n){return e=Qo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!$o&&null!==Bo){$o=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(No,qo),n}finally{$o=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,$l|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function va(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function ba(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||U(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||U(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||U(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=U(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,v=s.next();null!==h&&!v.done;g++,v=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var b=p(o,h,v.value,u);if(null===b){null===h&&(h=y);break}e&&h&&null===b.alternate&&t(o,h),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b,h=y}if(v.done)return n(o,h),c;if(null===h){for(;!v.done;g++,v=s.next())null!==(v=f(o,v.value,u))&&(l=a(v,l,g),null===d?c=v:d.sibling=v,d=v);return c}for(h=r(o,h);!v.done;g++,v=s.next())null!==(v=m(h,o,g,v.value,u))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Ws(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if(U(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function Na(e){if(e===Ca)throw Error(i(174));return e}function La(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function ja(){uo(Ta),uo(Ia),uo(Aa)}function Ra(e){Na(Aa.current);var t=Na(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,$a=!1;function Ua(e,t){var n=Zs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Za(e){if($a){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Wr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,$a=!1,void(Ba=e);Ua(Ba,n)}Ba=e,za=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,$a=!1,Ba=e}}function Qa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!$a)return Qa(e),$a=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)Ua(e,t),t=Wr(t.nextSibling);if(Qa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Wr(e.stateNode.nextSibling):null;return!0}function Wa(){za=Ba=null,$a=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Ni:Li,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=ji,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,$l|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Ll;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function vi(){return si().memoizedState}function bi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return bi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Zo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,bi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return bi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if($a){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:vi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},ji={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:vi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Ri=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Qs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function $i(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Zi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),ba(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||va(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||va(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Qi(e,t,n,r,a,o)}function Qi(e,t,n,r,o,a){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,Ri.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?bo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&bo(0,t.context,!1),La(e,t.containerInfo)}var Wi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Za(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$l|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!$a)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&vo(),null;case 3:return ja(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=Na(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Na(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Wi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Na(Aa.current),Na(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Ll||0==(134217727&$l)&&0==(134217727&Ul)||vs(Ll,Rl))),(r||n)&&(t.flags|=4),null);case 4:return ja(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!$a)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&vo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(ja(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return ja(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Na(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function bl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(bl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(bl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Ql=Ho(),vl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=Us.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Nl=0,Ll=null,jl=null,Rl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,$l=0,Ul=0,Hl=0,Zl=null,Ql=0,Vl=1/0;function Wl(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Nl)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Zo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Zl?Zl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Zo(),0!=(4&Nl)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;Ut(e,t,n),e===Ll&&(Ul|=t,4===Fl&&vs(e,Rl));var r=Zo();1===t?0!=(8&Nl)&&0==(48&Nl)?bs(e):(gs(e,n),0===Nl&&(Wl(),qo())):(0==(4&Nl)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Zl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=Rt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Ll?Rl:0),t=Rt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=bs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(No,Go)):Bo.push(n),n=Mo):14===t?n=Wo(99,bs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Wo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Nl))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Mt(e,e===Ll?Rl:0);if(0===n)return null;var r=n,o=Nl;Nl|=16;var a=Os();for(Ll===e&&Rl===r||(Wl(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Nl=o,null!==jl?r=0:(Ll=null,Rl=0,r=Fl),0!=(zl&Ul))_s(e,0);else if(0!==r){if(2===r&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),vs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ns(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Ql+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Zr(Ns.bind(null,e),r);break}Ns(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Zr(Ns.bind(null,e),n);break}Ns(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function vs(e,t){for(t&=~Hl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function bs(e){if(0!=(48&Nl))throw Error(i(327));if(Rs(),e===Ll&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ps(e,t);0!=(zl&Ul)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),vs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ns(e),gs(e,Ho()),null}function ws(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Es(e,t){var n=Nl;Nl&=-2,Nl|=8;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Qr(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&vo();break;case 3:ja(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:ja();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Ll=e,jl=Vs(e.current,null),Rl=Dl=zl=t,Fl=0,Bl=null,Hl=Ul=$l=0}function xs(e,t){for(;;){var n=jl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,jl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=ca(-1,1);v.tag=2,da(l,v)}l.lanes|=1;break e}s=void 0,l=t;var b=a.pingCache;if(null===b?(b=a.pingCache=new dl,s=new Set,b.set(u,s)):void 0===(s=b.get(u))&&(s=new Set,b.set(u,s)),!s.has(l)){s.add(l);var w=$s.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Nl;Nl|=16;var r=Os();for(Ll===e&&Rl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Nl=n,Il.current=r,null!==jl)throw Error(i(261));return Ll=null,Rl=0,Fl}function Cs(){for(;null!==jl;)Is(jl)}function Ts(){for(;null!==jl&&!Co();)Is(jl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):jl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(jl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(jl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ns(e){var t=Zo();return Vo(99,Ls.bind(null,e,t)),null}function Ls(e,t){do{Rs()}while(null!==es);if(0!=(48&Nl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Ll&&(jl=Ll=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Nl,Nl|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var v;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(v=g.firstChild);)y=g,g=v;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(v=g.nextSibling))break;y=(g=y).parentNode}g=v}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;$r={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{js()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var b=Gl.flags;if(16&b&&ye(Gl.stateNode,""),128&b){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&b){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=$r,w=hr(),b=E.focusedElem,l=E.selectionRange,w!==b&&b&&b.ownerDocument&&mr(b.ownerDocument.documentElement,b)){null!==l&&gr(b)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in b?(b.selectionStart=w,b.selectionEnd=Math.min(E,b.value.length)):(E=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=b.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(b,S),a=pr(b,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=b;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(E=w[b]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,$r=zr=null,e.current=n,Gl=r;do{try{for(b=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(b,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Nl=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Nl)||qo(),null}function js(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Wo(97,(function(){return Rs(),null}))),Gl=Gl.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Nl))throw Error(i(331));var t=Nl;Nl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Nl=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&(Ut(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))Ut(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function $s(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Ll===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Ho()-Ql?_s(e,0):Hl|=n),gs(e,t)}function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Zo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&(Ut(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Zs(e,t,n,r){return new Hs(e,t,n,r)}function Qs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Zs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Qs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Zs(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Zs(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Zs(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Zs(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case N:l=14;break e;case L:l=16,r=null;break e;case j:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Zs(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Zs(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Zs(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Zs(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Zs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=$t(0),this.expirationTimes=$t(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$t(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Zs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Wa();break;case 5:Ra(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,$i(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Qi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Qs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===N)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Zi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Zi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Wa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Wr(t.stateNode.containerInfo.firstChild),Ba=t,a=$a=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Wa();t=t.child}return t;case 5:return Ra(t),null===e&&Za(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),Ui(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Za(t),null;case 13:return Xi(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),ba(t,r,o),Ea(t,r,o,n),Qi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return $i(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ne=ws,Le=function(e,t,n,r,o){var a=Nl;Nl|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Nl=a)&&(Wl(),qo())}},je=function(){0==(49&Nl)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),Rs())},Re=function(e,t){var n=Nl;Nl|=2;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,Rs,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Q,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},b={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},L=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+j(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+j(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,b),a=A(t,y),i=A(n,v);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),Z="undefined"!=typeof document,Q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Q.canUseDOM=Z,Q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Q.defaultProps={context:{}},Q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),W(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Q.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===b||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>b,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},v=a.forwardRef;void 0===v&&(v=y);var b=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,b=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(b?b(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var N=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==v?N.ref=t||x:N.innerRef=x,a.createElement(g,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>b,LX:()=>k,TH:()=>L,k6:()=>N,rs:()=>I,s6:()=>v});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),v=g("Router"),b=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(v.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function N(){return A(y)}function L(){return A(v).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],v=n[5],b=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===b||"*"===b,k="?"===b||"*"===b,_=n[2]||c,x=y||v;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var b=v.prototype=new y;b.constructor=v,r(b,g.prototype),b.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var N={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,v=5,b=0;t.unstable_shouldYield=function(){return t.unstable_now()>=b},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();b=e+v;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,N=!1,L=!1;function j(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function R(e){if(L=!1,j(e),!N)if(null!==k(O))N=!0,n(D);else{var t=k(P);null!==t&&r(R,t.startTime-e)}}function D(e,n){N=!1,L&&(L=!1,o()),A=!0;var a=I;try{for(j(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),j(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||A||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(L?o():L=!0,r(R,i-l))):(e.sortIndex=s,S(O,e),N||A||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"Products",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"Self-deploying"}],position:"left"},{label:"Developers",type:"dropdown",items:[{to:"/whitepaper",label:"Whitepaper"},{to:"/docs/intro",label:"Documentation"},{to:"/learning/Reality-World",label:"Learning"}],position:"left"},{to:"/blog",label:"Blog",position:"left"},{to:"/features",label:"Features & Comparison",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"Community",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"About open source"},{to:"/community/about-reality-world",label:"About Reality World"},{to:"/community/roadmap",label:"Roadmap"},{to:"/community/contact",label:"Contact"},{to:"/community/questions",label:"Questions"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"D:\\Github\\cogine.github.io\\sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"D:\\Github\\cogine.github.io\\src\\css\\custom.css"}}]],plugins:[["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/app-177":{"__comp":"7fa55123","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/blog-27c":{"__comp":"a6aa9e1f","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"b2b675dd"},"/blog/archive-d84":{"__comp":"9e4087bc","__context":{"plugin":"831b5c01"},"archive":"b2f554cd"},"/blog/conversational-computing-8e1":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"ec9b07e8"},"/blog/reality-world-open-source-conference-e18":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"92f86187"},"/blog/tags-2d3":{"__comp":"01a85c17","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/cogine-ec5":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"adf73beb","listMetadata":"f5134437"},"/blog/tags/open-source-afb":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"51e4ac6f","listMetadata":"bdff1965"},"/blog/tags/reality-world-792":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"856e59d2","listMetadata":"1938696b"},"/blog/the-evolution-of-ECS-ed4":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"cede0149"},"/blog/thinking-680":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"0c125c2b"},"/cogine-adf":{"__comp":"28207210","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/community/about-open-source-c95":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"14fa4984"},"/community/about-reality-world-ccc":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"a394719f"},"/community/contact-e6a":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2c22cdfb"},"/community/questions-ea5":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"df434585"},"/community/resources-584":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6ba9ce7"},"/community/roadmap-141":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"68bfee64"},"/feature/chidori-07e":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"5503d724"},"/feature/cogine-d09":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2ae76f65"},"/feature/features-bc5":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"398258ee"},"/feature/langchain-a51":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6e914c2"},"/features-c1c":{"__comp":"a54713d3","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/learning/Reality-World-d09":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"308394e9"},"/reality-create-7c9":{"__comp":"a6d44343","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/reality-world-paper/-3cb":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"be3188a8"},"/self-deploying-36b":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"0b68990b"},"/whitepaper/-518":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"c6a65125"},"/docs-ee2":{"__comp":"1be78505","__context":{"plugin":"087bcfde"},"versionMetadata":"935f2afb"},"/docs/intro-f79":{"__comp":"17896441","content":"0e384e19"},"/docs/introduction/-22e":{"__comp":"17896441","content":"c62485b9"},"/docs/introduction/advantage-790":{"__comp":"17896441","content":"16c820cc"},"/docs/introduction/business-model-9d0":{"__comp":"17896441","content":"eb4e993a"},"/docs/introduction/current-afd":{"__comp":"17896441","content":"1e248c61"},"/docs/introduction/evolution-adc":{"__comp":"17896441","content":"c84e1d07"},"/docs/introduction/user-5ba":{"__comp":"17896441","content":"1e8a94b6"},"/docs/introduction/value-c1a":{"__comp":"17896441","content":"386fda77"},"/-d16":{"__comp":"c4f5d8e4","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.9a68e9ac.js b/assets/js/main.9a68e9ac.js deleted file mode 100644 index dcd7b35..0000000 --- a/assets/js/main.9a68e9ac.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.9a68e9ac.js.LICENSE.txt */ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"087bcfde":[()=>n.e(3111).then(n.t.bind(n,3769,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-docs\\default\\plugin-route-context-module-100.json",3769],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(8485),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1938696b":[()=>n.e(3835).then(n.t.bind(n,1343,19)),"~blog/default/blog-tags-reality-world-74d-list.json",1343],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(8485),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"306a8c6c":[()=>n.e(7616).then(n.t.bind(n,9479,19)),"~docs/community/version-current-metadata-prop-751.json",9479],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"398258ee":[()=>n.e(9553).then(n.bind(n,6587)),"@site/src/pages/feature/features.mdx",6587],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"49b2de74":[()=>n.e(8712).then(n.t.bind(n,5745,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-pages\\default\\plugin-route-context-module-100.json",5745],"51e4ac6f":[()=>n.e(9169).then(n.t.bind(n,7736,19)),"~blog/default/blog-tags-open-source-6de.json",7736],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"831b5c01":[()=>n.e(8852).then(n.t.bind(n,4469,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-blog\\default\\plugin-route-context-module-100.json",4469],"856e59d2":[()=>n.e(8477).then(n.t.bind(n,5744,19)),"~blog/default/blog-tags-reality-world-74d.json",5744],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,769)),"@site/src/pages/features.js",769],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],adf73beb:[()=>n.e(2625).then(n.t.bind(n,6769,19)),"~blog/default/blog-tags-cogine-a11.json",6769],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],bdff1965:[()=>n.e(2307).then(n.t.bind(n,6948,19)),"~blog/default/blog-tags-open-source-6de-list.json",6948],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec0679b0:[()=>n.e(4572).then(n.t.bind(n,2481,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-docs\\community\\plugin-route-context-module-100.json",2481],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],edc931f8:[()=>n.e(6160).then(n.bind(n,5236)),"@site/community/index.md",5236],f5134437:[()=>n.e(5505).then(n.t.bind(n,6128,19)),"~blog/default/blog-tags-cogine-a11-list.json",6128],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/app",component:f("/app","177"),exact:!0},{path:"/blog",component:f("/blog","27c"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","d84"),exact:!0},{path:"/blog/conversational-computing",component:f("/blog/conversational-computing","8e1"),exact:!0},{path:"/blog/reality-world-open-source-conference",component:f("/blog/reality-world-open-source-conference","e18"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","2d3"),exact:!0},{path:"/blog/tags/cogine",component:f("/blog/tags/cogine","ec5"),exact:!0},{path:"/blog/tags/open-source",component:f("/blog/tags/open-source","afb"),exact:!0},{path:"/blog/tags/reality-world",component:f("/blog/tags/reality-world","792"),exact:!0},{path:"/blog/the-evolution-of-ECS",component:f("/blog/the-evolution-of-ECS","ed4"),exact:!0},{path:"/blog/thinking",component:f("/blog/thinking","680"),exact:!0},{path:"/cogine",component:f("/cogine","adf"),exact:!0},{path:"/community/about-open-source",component:f("/community/about-open-source","c95"),exact:!0},{path:"/community/about-reality-world",component:f("/community/about-reality-world","ccc"),exact:!0},{path:"/community/contact",component:f("/community/contact","e6a"),exact:!0},{path:"/community/questions",component:f("/community/questions","ea5"),exact:!0},{path:"/community/resources",component:f("/community/resources","584"),exact:!0},{path:"/community/roadmap",component:f("/community/roadmap","141"),exact:!0},{path:"/feature/chidori",component:f("/feature/chidori","07e"),exact:!0},{path:"/feature/cogine",component:f("/feature/cogine","d09"),exact:!0},{path:"/feature/features",component:f("/feature/features","bc5"),exact:!0},{path:"/feature/langchain",component:f("/feature/langchain","a51"),exact:!0},{path:"/features",component:f("/features","c1c"),exact:!0},{path:"/reality-create",component:f("/reality-create","7c9"),exact:!0},{path:"/reality-world-paper/",component:f("/reality-world-paper/","3cb"),exact:!0},{path:"/self-deploying",component:f("/self-deploying","36b"),exact:!0},{path:"/whitepaper/",component:f("/whitepaper/","518"),exact:!0},{path:"/community",component:f("/community","67a"),routes:[{path:"/community/",component:f("/community/","28b"),exact:!0,sidebar:"community"}]},{path:"/docs",component:f("/docs","ee2"),routes:[{path:"/docs/intro",component:f("/docs/intro","f79"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/",component:f("/docs/introduction/","22e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/advantage",component:f("/docs/introduction/advantage","790"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/business-model",component:f("/docs/introduction/business-model","9d0"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/current",component:f("/docs/introduction/current","afd"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/evolution",component:f("/docs/introduction/evolution","adc"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/user",component:f("/docs/introduction/user","5ba"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction/value",component:f("/docs/introduction/value","c1a"),exact:!0,sidebar:"docsSidebar"}]},{path:"/",component:f("/","d16"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x,O,P,C,T,I,A,N,L,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(l>0){var s=R.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new R.Token(n.slice(i,a),s))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),b=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,N=/ll$/,L=new RegExp("^"+u+s+"[^aeiouwxy]$"),j=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=b).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=L,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=N).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(j)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new R.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new R.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new R.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=R.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=R.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===R.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=R.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],b=this.invertedIndex[y],v=b._index;for(h=0;h<s.fields.length;h++){var w=b[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new R.Set(E);if(s.presence==R.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=R.Set.complete)),s.presence!=R.Query.presence.PROHIBITED){if(r[A].upsert(v,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new R.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new R.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=R.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===R.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=R.Set.complete,I=R.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var N=Object.keys(n),L=[],j=Object.create(null);if(t.isNegated()){N=Object.keys(this.fieldVectors);for(l=0;l<N.length;l++){P=N[l];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(l=0;l<N.length;l++){var M=(D=R.FieldRef.fromString(N[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=j[M]))F.score+=z,F.matchData.combine(n[D]);else{var $={ref:M,score:z,matchData:n[D]};j[M]=$,L.push($)}}}return L.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,l=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new R.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new R.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var b=this.metadataWhitelist[y],v=m.metadata[b];null==this.invertedIndex[m][a][n][b]&&(this.invertedIndex[m][a][n][b]=[]),this.invertedIndex[m][a][n][b].push(v)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new R.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,b=c[m],v=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(h=R.idf(this.invertedIndex[b],this.documentCount),r[b]=h):h=r[b],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+v),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),b=n(5463),v=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=j,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(3256),Q=n(1048);function V(){const e=(0,Q.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function W(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement(U,null),r.createElement(R,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),L(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;L(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(W,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"community":{"path":"/community","versions":[{"name":"current","label":"Next","isLast":true,"path":"/community","mainDocId":"index","docs":[{"id":"index","path":"/community/","sidebar":"community"}],"draftIds":[],"sidebars":{"community":{"link":{"path":"/community/","label":"index"}}}}],"breadcrumbs":true},"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:v,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,N=(0,o.useRef)(),L=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&N.current&&N.current.disconnect()})),[N,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||g||S.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},b)):o.createElement(I,(0,r.Z)({},b,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{k.current=e,A&&e&&x&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),N.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const b={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:b.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),N=n(3086);const L=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,N.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(L.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(L);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(U.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const Z=r.memo(H),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(Z,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var W=n(6811);function q(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function be(e){return{current:e}}function ve(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(ve(e)||ve(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ne(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Le(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Le(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Ne(Ne({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Ne(Ne({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Ne(Ne({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$e(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ze="2.6.0",Qe="https://cdn.jsdelivr.net/npm/search-insights@".concat(Ze,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return Ue({eventName:"Items Viewed"},e)})),state:o})}),400);function We(e){var t=function(e){return Ue({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return Ue(Ue({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=Ze,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Qe,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=Re(i),s=be([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:Ue({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[Ue({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function bt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(jt(t,n,e),jt(r,n,e)),n)},catch:function(t){return At(e.catch(jt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(jt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Nt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Lt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function jt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Rt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Nt.resolve=function(e){return Lt(Promise.resolve(e))},Nt.reject=function(e){return Lt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $t(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ut,Ht,Zt,Qt=null,Vt=(Ut=-1,Ht=-1,Zt=void 0,function(e){var t=++Ut;return Promise.resolve(e).then((function(e){return Zt&&t<Ht?Zt:(Ht=t,Zt=e,e)}))});function Wt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=$t(e,Mt);Qt&&o.environment.clearTimeout(Qt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Lt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Qt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Lt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return vt(vt({},e),{},wt({},t.source.sourceId,vt(vt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=Rt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Qt&&o.environment.clearTimeout(Qt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Wt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=Rt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Wt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=Rt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Wt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=Rt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Wt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Rt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Wt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:vn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Rt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Nn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ln(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Wt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(We(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var jn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,jn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},Rn=new Map;function Dn(e){var t=Rn.get(this);return t||(t=new Map,Rn.set(this,t)),(t=jn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function $n(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function Un(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||$n(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,Un,r):e.removeEventListener(t,Un,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Zn(e){return"onChange"===e?"onInput":e}function Qn(e,t){for(var n in t)Hn(e,Zn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Zn(n),t[n])}var Wn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Wn),i=e.document.createElement(t);return Qn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Qn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],br=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,vr=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,b,v,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):vr(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(b=Lr(m,E,y=d+w,k))?p=gr:(p=E[b]||gr,E[b]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&$r(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(v=p===gr||null===p.__v)?-1==b&&w--:b!==y&&(b===y+1?w++:b>y?k>_-y?w+=b-y:w--:w=b<y&&b==y-1?b-y:0),y=d+w,"function"!=typeof m.type||b===y&&p.__k!==m.__k?"function"==typeof m.type||b===y&&!v?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Nr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),Ur(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),Ur(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Nr(n,r.__e,t));return t}function Nr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Lr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function jr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||br.test(t)?n:n+"px"}function Rr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||jr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||jr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,b=(c=x.contextType)&&r[c.__c],v=c?b?b.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,v):(t.__c=d=new xr(y,v),d.constructor=x,d.render=Hr),b&&b.sub(d),d.props=y,d.state||(d.state={}),d.context=v,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,v),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,v)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,v),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=v,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,vr(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)$r(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Rr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Rr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,vr(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&Rr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&Rr(e,"checked",h,f.checked,!1))}return e}function $r(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function Ur(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||$r(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&Ur(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Zr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Qr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Wr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Wr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Qr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Qr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function bo(e){return bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bo(e)}var vo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Zr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){No(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function No(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Lo=[{segment:"autocomplete-js",version:hn}];function jo(e){return function(e){if(Array.isArray(e))return Ro(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ro(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ro(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ro(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,jo(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){Uo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Uo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Zo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Qo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Wo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=be(!1),c=be(e),d=be(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,b=e.components,v=e.translations,w=ko(e,vo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),b),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),v)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Ln(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Lo,options:e}}))})),h=be(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},b=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),v=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),b=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),v=f("label",lr({class:r.label,children:[b]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[v,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var N=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),L=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[N,A,I]}),j=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=f("div",{class:r.detachedFormContainer,children:[P,j]});h.appendChild(R),m.appendChild(L)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:v,submitButton:b,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Qn(v.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:b.value,dom:v.value,panelContainer:p.value?v.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Qn(r.label,{hidden:"stalled"===a.status}),Qn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Qn(r.clearButton,{hidden:!a.query}),Qn(r.detachedSearchButtonQuery,{textContent:a.query}),Qn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Wo(r,Qo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?$o($o({},e),{},Uo({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(v.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(f.value.core.environment.document.body.removeChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return Qn(f.value.core.environment,e),function(){Qn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?v.value.detachedOverlay:v.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},b=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),v=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(v.current)return w.current=Ko({container:v.current,placeholder:b,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:v,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],b=(0,fa.lO)(n)[0],v=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,w=t&&y.length>1?void 0:ma(b).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:v,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function ba(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function va(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(va,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(ba,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Na(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const La={colorModeToggle:"colorModeToggle_DEke"};function ja(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function Ra(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ra,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Na,null),r.createElement(q,null),r.createElement(ja,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ja,{items:o}),r.createElement(V,{className:La.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function $a(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function Ua(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Za(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement(Ua,null))))))}function Qa(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement($a,{columns:t}):r.createElement(Za,{links:t})}var Va=n(6753);const Wa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Wa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Qa,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(v,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g,Oh:()=>v});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>b,oz:()=>v,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function v(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",b="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)($,e),$.length=n.length,C.notifyListeners($.location,$.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(O(e.state))}function A(){L(O(v()))}var N=!1;function L(e){if(N)N=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(N=!0,M(o))}(e)}))}}var j=O(v()),R=[j.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(b,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(b,A))}var z=!1;var $={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=R.indexOf($.location.key),u=R.slice(0,s+1);u.push(a.key),R=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),$.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=R.indexOf($.location.key);-1!==s&&(R[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",b=S[u],v=b.encodePath,w=b.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=v(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(f(t));-1===n&&(n=0);var r=R.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var N=_(),L=v(N);N!==L&&x(L);var j=O(),R=[f(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+v(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(f(z.location)),i=R.slice(0,a+1);i.push(t),R=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);_()!==o&&(I=t,x(o));var a=R.indexOf(f(z.location));-1!==a&&(R[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),b=f;function v(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:b,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var b=f(n,y);try{u(t,y,b)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,b=!!h.greedy,v=h.alias;if(b&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(b){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],N=_.slice(0,P),L=_.slice(P+A.length),j=k+_.length;d&&j>d.reach&&(d.reach=j);var R=S.prev;if(N&&(R=s(t,R,N),k+=N.length),u(t,R,O),S=s(t,R,new o(f,g?r.tokenize(A,g):A,v,A)),L&&s(t,S,L),O>1){var D={cause:f+","+m,reach:j};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,N=60115,L=60116,j=60121,R=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),N=B("react.memo"),L=B("react.lazy"),j=B("react.block"),B("react.scope"),R=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var Z=!1;function Q(e,t){if(!e||Z)return"";Z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{Z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Q(e.type,!1);case 11:return e=Q(e.type.render,!1);case 22:return e=Q(e.type._render,!1);case 1:return e=Q(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return W(e.type);case j:return W(e._render);case L:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ve=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){ve.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Ne(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function je(){}var Re=Ne,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(je(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var $e={};Object.defineProperty($e,"passive",{get:function(){ze=!0}}),window.addEventListener("test",$e,$e),window.removeEventListener("test",$e,$e)}catch(he){ze=!1}function Ue(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,Ze=null,Qe=!1,Ve=null,We={onError:function(e){He=!0,Ze=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,Ze=null,Ue.apply(We,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){yt(e)&&n.delete(t)}function vt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(bt),ct.forEach(bt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,vt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Nt=new Map,Lt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function jt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Nt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var Rt=8;function Dt(e){if(0!=(1&e))return Rt=15,1;if(0!=(2&e))return Rt=14,2;if(0!=(4&e))return Rt=13,4;var t=24&e;return 0!==t?(Rt=12,t):0!=(32&e)?(Rt=11,32):0!==(t=192&e)?(Rt=10,t):0!=(256&e)?(Rt=9,256):0!==(t=3584&e)?(Rt=8,t):0!=(4096&e)?(Rt=7,4096):0!==(t=4186112&e)?(Rt=6,t):0!==(t=62914560&e)?(Rt=5,t):67108864&e?(Rt=4,67108864):0!=(134217728&e)?(Rt=3,134217728):0!==(t=805306368&e)?(Rt=2,t):0!=(1073741824&e)?(Rt=1,1073741824):(Rt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return Rt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=Rt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=Rt):0!==(l&=a)&&(r=Dt(l),o=Rt)}else 0!==(a=n&~i)?(r=Dt(a),o=Rt):0!==l&&(r=Dt(l),o=Rt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Rt)return t;Rt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function $t(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Zt(e)/Qt|0)|0},Zt=Math.log,Qt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Wt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||je();var o=Kt,a=De;De=!0;try{Le(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Wt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}jr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return jr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),bn=ln(o({},pn,{relatedTarget:0})),vn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Nn=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=ln(Ln),Rn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),$n=!1;function Un(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Zn=!1;var Qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Qn[e.type]:"textarea"===t}function Wn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Wn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Ne(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,br=null,vr=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==br||br!==X(r)||("selectionStart"in(r=br)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(vr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=br)))}jt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),jt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),jt(Lt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Nt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=Ze;He=!1,Ze=null,Qe||(Qe=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Qe)throw e=Ve,Qe=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Nr(t,!1,e,null),Nr(t,!0,e,null)})))}function Nr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Lr(a,e,o,t),i.add(l))}function Lr(e,t,n,r){var o=Nt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function jr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Re(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=bn;break;case"focusout":u="blur",s=bn;break;case"beforeblur":case"afterblur":s=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=vn;break;case It:s=Nn;break;case"scroll":s=mn;break;case"wheel":s=jn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(Rr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Wn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(br=y,vr=r,wr=null);break;case"focusout":wr=vr=br=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var b;if(Dn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Zn?Un(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Bn&&"ko"!==n.locale&&(Zn||"onCompositionStart"!==v?"onCompositionEnd"===v&&Zn&&(b=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Zn=!0)),0<(y=Dr(r,v)).length&&(v=new Sn(v,e,null,n,o),i.push({event:v,listeners:y}),b?v.data=b:null!==(b=Hn(n))&&(v.data=b))),(b=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:($n=!0,zn);case"textInput":return(e=t.data)===zn&&$n?null:e;default:return null}}(e,n):function(e,t){if(Zn)return"compositionend"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Jt=null,Zn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Cr(i,t)}))}function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Rr(e,a,o)),null!=(a=Be(e,t))&&r.push(Rr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(Rr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(Rr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,$r=null;function Ur(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Zr="function"==typeof setTimeout?setTimeout:void 0,Qr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function bo(){uo(mo),uo(po)}function vo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,W(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,No=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,jo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,$o=!1,Uo=Io(),Ho=1e4>Uo?Io:function(){return Io()-Uo};function Zo(){switch(Ao()){case No:return 99;case Lo:return 98;case jo:return 97;case Ro:return 96;case Do:return 95;default:throw Error(i(332))}}function Qo(e){switch(e){case 99:return No;case 98:return Lo;case 97:return jo;case 96:return Ro;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Qo(e),xo(e,t)}function Wo(e,t,n){return e=Qo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!$o&&null!==Bo){$o=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(No,qo),n}finally{$o=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,$l|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function ba(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function va(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||U(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||U(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||U(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=U(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var v=p(o,h,b.value,u);if(null===v){null===h&&(h=y);break}e&&h&&null===v.alternate&&t(o,h),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v,h=y}if(b.done)return n(o,h),c;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,u))&&(l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(h=r(o,h);!b.done;g++,b=s.next())null!==(b=m(h,o,g,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Ws(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if(U(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function Na(e){if(e===Ca)throw Error(i(174));return e}function La(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function ja(){uo(Ta),uo(Ia),uo(Aa)}function Ra(e){Na(Aa.current);var t=Na(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,$a=!1;function Ua(e,t){var n=Zs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Za(e){if($a){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Wr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,$a=!1,void(Ba=e);Ua(Ba,n)}Ba=e,za=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,$a=!1,Ba=e}}function Qa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!$a)return Qa(e),$a=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)Ua(e,t),t=Wr(t.nextSibling);if(Qa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Wr(e.stateNode.nextSibling):null;return!0}function Wa(){za=Ba=null,$a=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Ni:Li,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=ji,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,$l|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Ll;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function bi(){return si().memoizedState}function vi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return vi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Zo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,vi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if($a){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:bi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},ji={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:bi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Ri=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Qs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function $i(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Zi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),va(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||ba(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||ba(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Qi(e,t,n,r,a,o)}function Qi(e,t,n,r,o,a){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,Ri.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),La(e,t.containerInfo)}var Wi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Za(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$l|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!$a)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&bo(),null;case 3:return ja(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=Na(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Na(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Wi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Na(Aa.current),Na(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Ll||0==(134217727&$l)&&0==(134217727&Ul)||bs(Ll,Rl))),(r||n)&&(t.flags|=4),null);case 4:return ja(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!$a)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&bo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(ja(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return ja(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Na(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function bl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function vl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(vl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(vl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Ql=Ho(),bl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=Us.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Nl=0,Ll=null,jl=null,Rl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,$l=0,Ul=0,Hl=0,Zl=null,Ql=0,Vl=1/0;function Wl(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Nl)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Zo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Zl?Zl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Zo(),0!=(4&Nl)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;Ut(e,t,n),e===Ll&&(Ul|=t,4===Fl&&bs(e,Rl));var r=Zo();1===t?0!=(8&Nl)&&0==(48&Nl)?vs(e):(gs(e,n),0===Nl&&(Wl(),qo())):(0==(4&Nl)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Zl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=Rt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Ll?Rl:0),t=Rt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=vs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(No,Go)):Bo.push(n),n=Mo):14===t?n=Wo(99,vs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Wo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Nl))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Mt(e,e===Ll?Rl:0);if(0===n)return null;var r=n,o=Nl;Nl|=16;var a=Os();for(Ll===e&&Rl===r||(Wl(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Nl=o,null!==jl?r=0:(Ll=null,Rl=0,r=Fl),0!=(zl&Ul))_s(e,0);else if(0!==r){if(2===r&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),bs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ns(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=Ql+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Zr(Ns.bind(null,e),r);break}Ns(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Zr(Ns.bind(null,e),n);break}Ns(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function bs(e,t){for(t&=~Hl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function vs(e){if(0!=(48&Nl))throw Error(i(327));if(Rs(),e===Ll&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ps(e,t);0!=(zl&Ul)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),bs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ns(e),gs(e,Ho()),null}function ws(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Es(e,t){var n=Nl;Nl&=-2,Nl|=8;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Qr(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&bo();break;case 3:ja(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:ja();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Ll=e,jl=Vs(e.current,null),Rl=Dl=zl=t,Fl=0,Bl=null,Hl=Ul=$l=0}function xs(e,t){for(;;){var n=jl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,jl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=ca(-1,1);b.tag=2,da(l,b)}l.lanes|=1;break e}s=void 0,l=t;var v=a.pingCache;if(null===v?(v=a.pingCache=new dl,s=new Set,v.set(u,s)):void 0===(s=v.get(u))&&(s=new Set,v.set(u,s)),!s.has(l)){s.add(l);var w=$s.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Nl;Nl|=16;var r=Os();for(Ll===e&&Rl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Nl=n,Il.current=r,null!==jl)throw Error(i(261));return Ll=null,Rl=0,Fl}function Cs(){for(;null!==jl;)Is(jl)}function Ts(){for(;null!==jl&&!Co();)Is(jl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):jl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(jl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(jl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ns(e){var t=Zo();return Vo(99,Ls.bind(null,e,t)),null}function Ls(e,t){do{Rs()}while(null!==es);if(0!=(48&Nl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Ll&&(jl=Ll=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Nl,Nl|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var b;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)y=g,g=b;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(b=g.nextSibling))break;y=(g=y).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;$r={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{js()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var v=Gl.flags;if(16&v&&ye(Gl.stateNode,""),128&v){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&v){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=$r,w=hr(),v=E.focusedElem,l=E.selectionRange,w!==v&&v&&v.ownerDocument&&mr(v.ownerDocument.documentElement,v)){null!==l&&gr(v)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in v?(v.selectionStart=w,v.selectionEnd=Math.min(E,v.value.length)):(E=(w=v.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=v.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(v,S),a=pr(v,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=v;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof v.focus&&v.focus(),v=0;v<w.length;v++)(E=w[v]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,$r=zr=null,e.current=n,Gl=r;do{try{for(v=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(v,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Nl=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Nl)||qo(),null}function js(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Wo(97,(function(){return Rs(),null}))),Gl=Gl.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Wo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Nl))throw Error(i(331));var t=Nl;Nl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Nl=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&(Ut(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))Ut(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function $s(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Ll===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Ho()-Ql?_s(e,0):Hl|=n),gs(e,t)}function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Zo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&(Ut(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Zs(e,t,n,r){return new Hs(e,t,n,r)}function Qs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Zs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Qs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Zs(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Zs(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Zs(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Zs(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case N:l=14;break e;case L:l=16,r=null;break e;case j:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Zs(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Zs(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Zs(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Zs(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Zs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=$t(0),this.expirationTimes=$t(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$t(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Zs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Wa();break;case 5:Ra(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,$i(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Qi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Qs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===N)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Zi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Zi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Wa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Wr(t.stateNode.containerInfo.firstChild),Ba=t,a=$a=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Wa();t=t.child}return t;case 5:return Ra(t),null===e&&Za(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),Ui(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Za(t),null;case 13:return Xi(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),va(t,r,o),Ea(t,r,o,n),Qi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return $i(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ne=ws,Le=function(e,t,n,r,o){var a=Nl;Nl|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Nl=a)&&(Wl(),qo())}},je=function(){0==(49&Nl)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),Rs())},Re=function(e,t){var n=Nl;Nl|=2;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,Rs,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Q,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},L=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+j(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+j(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,y),i=A(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),Z="undefined"!=typeof document,Q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Q.canUseDOM=Z,Q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Q.defaultProps={context:{}},Q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),W(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Q.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===v||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},b=a.forwardRef;void 0===b&&(b=y);var v=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(v?v(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var N=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==b?N.ref=t||x:N.innerRef=x,a.createElement(g,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>v,LX:()=>k,TH:()=>L,k6:()=>N,rs:()=>I,s6:()=>b});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),b=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(b.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(b.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function N(){return A(y)}function L(){return A(b).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===v||"*"===v,k="?"===v||"*"===v,_=n[2]||c,x=y||b;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var v=b.prototype=new y;v.constructor=b,r(v,g.prototype),v.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var N={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,b=5,v=0;t.unstable_shouldYield=function(){return t.unstable_now()>=v},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();v=e+b;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,N=!1,L=!1;function j(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function R(e){if(L=!1,j(e),!N)if(null!==k(O))N=!0,n(D);else{var t=k(P);null!==t&&r(R,t.startTime-e)}}function D(e,n){N=!1,L&&(L=!1,o()),A=!0;var a=I;try{for(j(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),j(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||A||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(L?o():L=!0,r(R,i-l))):(e.sortIndex=s,S(O,e),N||A||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"Products",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"Self-deploying"}],position:"left"},{label:"Developers",type:"dropdown",items:[{to:"/whitepaper",label:"Whitepaper"},{to:"/docs/intro",label:"Documentation"},{to:"/thinking",label:"Thinking"}],position:"left"},{to:"/blog",label:"Blog",position:"left"},{to:"/features",label:"Features & Comparison",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"Community",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"About open source"},{to:"/community/about-reality-world",label:"About Reality World"},{to:"/community/roadmap",label:"Roadmap"},{to:"/community/contact",label:"Contact"},{to:"/community/questions",label:"Questions"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"D:\\Github\\cogine.github.io\\sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"D:\\Github\\cogine.github.io\\src\\css\\custom.css"}}]],plugins:[["content-docs",{id:"community",path:"community",routeBasePath:"community",sidebarPath:"D:\\Github\\cogine.github.io\\sidebarsCommunity.js"}],["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/app-177":{"__comp":"7fa55123","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/blog-27c":{"__comp":"a6aa9e1f","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"b2b675dd"},"/blog/archive-d84":{"__comp":"9e4087bc","__context":{"plugin":"831b5c01"},"archive":"b2f554cd"},"/blog/conversational-computing-8e1":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"ec9b07e8"},"/blog/reality-world-open-source-conference-e18":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"92f86187"},"/blog/tags-2d3":{"__comp":"01a85c17","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/cogine-ec5":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"adf73beb","listMetadata":"f5134437"},"/blog/tags/open-source-afb":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"51e4ac6f","listMetadata":"bdff1965"},"/blog/tags/reality-world-792":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"856e59d2","listMetadata":"1938696b"},"/blog/the-evolution-of-ECS-ed4":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"cede0149"},"/blog/thinking-680":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"0c125c2b"},"/cogine-adf":{"__comp":"28207210","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/community/about-open-source-c95":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"14fa4984"},"/community/about-reality-world-ccc":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"a394719f"},"/community/contact-e6a":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2c22cdfb"},"/community/questions-ea5":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"df434585"},"/community/resources-584":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6ba9ce7"},"/community/roadmap-141":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"68bfee64"},"/feature/chidori-07e":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"5503d724"},"/feature/cogine-d09":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2ae76f65"},"/feature/features-bc5":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"398258ee"},"/feature/langchain-a51":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6e914c2"},"/features-c1c":{"__comp":"a54713d3","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/reality-create-7c9":{"__comp":"a6d44343","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/reality-world-paper/-3cb":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"be3188a8"},"/self-deploying-36b":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"0b68990b"},"/whitepaper/-518":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"c6a65125"},"/community-67a":{"__comp":"1be78505","__context":{"plugin":"ec0679b0"},"versionMetadata":"306a8c6c"},"/community/-28b":{"__comp":"17896441","content":"edc931f8"},"/docs-ee2":{"__comp":"1be78505","__context":{"plugin":"087bcfde"},"versionMetadata":"935f2afb"},"/docs/intro-f79":{"__comp":"17896441","content":"0e384e19"},"/docs/introduction/-22e":{"__comp":"17896441","content":"c62485b9"},"/docs/introduction/advantage-790":{"__comp":"17896441","content":"16c820cc"},"/docs/introduction/business-model-9d0":{"__comp":"17896441","content":"eb4e993a"},"/docs/introduction/current-afd":{"__comp":"17896441","content":"1e248c61"},"/docs/introduction/evolution-adc":{"__comp":"17896441","content":"c84e1d07"},"/docs/introduction/user-5ba":{"__comp":"17896441","content":"1e8a94b6"},"/docs/introduction/value-c1a":{"__comp":"17896441","content":"386fda77"},"/-d16":{"__comp":"c4f5d8e4","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.9a68e9ac.js.LICENSE.txt b/assets/js/main.9a68e9ac.js.LICENSE.txt deleted file mode 100644 index fbc0635..0000000 --- a/assets/js/main.9a68e9ac.js.LICENSE.txt +++ /dev/null @@ -1,132 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ - -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ - -/** - * @license React - * use-sync-external-store-shim.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ - -/** @license React v0.20.2 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/assets/js/runtime~main.b9e13249.js b/assets/js/runtime~main.300f48b2.js similarity index 52% rename from assets/js/runtime~main.b9e13249.js rename to assets/js/runtime~main.300f48b2.js index 159b592..a9a3355 100644 --- a/assets/js/runtime~main.b9e13249.js +++ b/assets/js/runtime~main.300f48b2.js @@ -1 +1 @@ -(()=>{"use strict";var e,c,a,f,t,r={},d={};function b(e){var c=d[e];if(void 0!==c)return c.exports;var a=d[e]={exports:{}};return r[e].call(a.exports,a,a.exports,b),a.exports}b.m=r,e=[],b.O=(c,a,f,t)=>{if(!a){var r=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],t=e[i][2];for(var d=!0,o=0;o<a.length;o++)(!1&t||r>=t)&&Object.keys(b.O).every((e=>b.O[e](a[o])))?a.splice(o--,1):(d=!1,t<r&&(r=t));if(d){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}t=t||0;for(var i=e.length;i>0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[a,f,t]},b.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return b.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var r={};c=c||[null,a({}),a([]),a(a)];for(var d=2&f&&e;"object"==typeof d&&!~c.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach((c=>r[c]=()=>e[c]));return r.default=()=>e,b.d(t,r),t},b.d=(e,c)=>{for(var a in c)b.o(c,a)&&!b.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((c,a)=>(b.f[a](e,c),c)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",533:"b2b675dd",990:"5062db26",1218:"b6ba9ce7",1477:"b2f554cd",1713:"a7023ddc",2116:"14fa4984",2307:"bdff1965",2535:"814f3328",2625:"adf73beb",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3819:"2c22cdfb",3835:"1938696b",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",4982:"088d37c1",5119:"92f86187",5202:"a394719f",5505:"f5134437",5647:"1e8a94b6",5885:"1e248c61",6103:"ccc49370",6160:"edc931f8",6259:"0c125c2b",6330:"a8378f8b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7616:"306a8c6c",7918:"17896441",8287:"fb33060d",8341:"16c820cc",8477:"856e59d2",8610:"6875c492",8857:"ec9b07e8",9008:"0b68990b",9169:"51e4ac6f",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9553:"398258ee",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"a123a235",533:"52341e09",990:"67e98b2f",1218:"63beaa81",1477:"adac0093",1713:"4ec2efae",2116:"8dc578c0",2307:"a50c7d83",2535:"ce51600a",2625:"5a71b4bc",2863:"97f6a704",2966:"85ec8343",3028:"425b9c5d",3075:"728b966d",3085:"0e5f3c11",3089:"79326d13",3493:"824379db",3529:"ae109d0f",3608:"14550a7b",3819:"69913b95",3826:"92d6b3b9",3835:"5af0567e",3915:"8b424c4a",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",4474:"cf4b5b39",4982:"f190df57",5119:"17f39b33",5202:"1684b1e8",5505:"876d2b4e",5647:"42a891fc",5885:"2d7392a2",6103:"c8bcaa36",6160:"d7cf7051",6259:"23af1f9d",6330:"9c5f747b",6525:"be52a978",6641:"3323e0df",6821:"39a50923",7424:"690f8c02",7450:"b26a76bf",7541:"38f6529b",7544:"9df861ff",7616:"2163c7e8",7918:"912fe004",8287:"64b27540",8341:"945158b5",8477:"321ef7ad",8610:"6bc59e7c",8857:"3697d795",9008:"3863916d",9169:"e4ea30ef",9348:"129b2157",9500:"ed67a2d6",9505:"2c867369",9514:"3958b6d2",9553:"e39bc3ef",9659:"19c46c59",9663:"d0a4b3bc",9671:"a5cd8191",9923:"66e1bee0"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},t="realityworld:",b.l=(e,c,a,r)=>{if(f[e])f[e].push(c);else{var d,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==t+a){d=l;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",t+a),d.src=e),f[e]=[c];var u=(c,a)=>{d.onerror=d.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],d.parentNode&&d.parentNode.removeChild(d),t&&t.forEach((e=>e(a))),c)return c(a)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53",b2b675dd:"533","5062db26":"990",b6ba9ce7:"1218",b2f554cd:"1477",a7023ddc:"1713","14fa4984":"2116",bdff1965:"2307","814f3328":"2535",adf73beb:"2625","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","2c22cdfb":"3819","1938696b":"3835","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195","088d37c1":"4982","92f86187":"5119",a394719f:"5202",f5134437:"5505","1e8a94b6":"5647","1e248c61":"5885",ccc49370:"6103",edc931f8:"6160","0c125c2b":"6259",a8378f8b:"6330","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544","306a8c6c":"7616",fb33060d:"8287","16c820cc":"8341","856e59d2":"8477","6875c492":"8610",ec9b07e8:"8857","0b68990b":"9008","51e4ac6f":"9169",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514","398258ee":"9553",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(c,a)=>{var f=b.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var t=new Promise(((a,t)=>f=e[c]=[a,t]));a.push(f[2]=t);var r=b.p+b.u(c),d=new Error;b.l(r,(a=>{if(b.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var t=a&&("load"===a.type?"missing":a.type),r=a&&a.target&&a.target.src;d.message="Loading chunk "+c+" failed.\n("+t+": "+r+")",d.name="ChunkLoadError",d.type=t,d.request=r,f[1](d)}}),"chunk-"+c,c)}},b.O.j=c=>0===e[c];var c=(c,a)=>{var f,t,r=a[0],d=a[1],o=a[2],n=0;if(r.some((c=>0!==e[c]))){for(f in d)b.o(d,f)&&(b.m[f]=d[f]);if(o)var i=o(b)}for(c&&c(a);n<r.length;n++)t=r[n],b.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return b.O(i)},a=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];a.forEach(c.bind(null,0)),a.push=c.bind(null,a.push.bind(a))})()})(); \ No newline at end of file +(()=>{"use strict";var e,c,a,f,t,r={},d={};function b(e){var c=d[e];if(void 0!==c)return c.exports;var a=d[e]={exports:{}};return r[e].call(a.exports,a,a.exports,b),a.exports}b.m=r,e=[],b.O=(c,a,f,t)=>{if(!a){var r=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],t=e[i][2];for(var d=!0,o=0;o<a.length;o++)(!1&t||r>=t)&&Object.keys(b.O).every((e=>b.O[e](a[o])))?a.splice(o--,1):(d=!1,t<r&&(r=t));if(d){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}t=t||0;for(var i=e.length;i>0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[a,f,t]},b.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return b.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var r={};c=c||[null,a({}),a([]),a(a)];for(var d=2&f&&e;"object"==typeof d&&!~c.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach((c=>r[c]=()=>e[c]));return r.default=()=>e,b.d(t,r),t},b.d=(e,c)=>{for(var a in c)b.o(c,a)&&!b.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((c,a)=>(b.f[a](e,c),c)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",533:"b2b675dd",990:"5062db26",1218:"b6ba9ce7",1477:"b2f554cd",1713:"a7023ddc",2116:"14fa4984",2307:"bdff1965",2535:"814f3328",2625:"adf73beb",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3650:"308394e9",3819:"2c22cdfb",3835:"1938696b",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",4982:"088d37c1",5119:"92f86187",5202:"a394719f",5505:"f5134437",5647:"1e8a94b6",5885:"1e248c61",6103:"ccc49370",6259:"0c125c2b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7918:"17896441",8287:"fb33060d",8341:"16c820cc",8477:"856e59d2",8610:"6875c492",8857:"ec9b07e8",9008:"0b68990b",9169:"51e4ac6f",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9553:"398258ee",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"a123a235",533:"52341e09",990:"67e98b2f",1218:"63beaa81",1477:"adac0093",1713:"4ec2efae",2116:"8dc578c0",2307:"a50c7d83",2535:"ce51600a",2625:"5a71b4bc",2863:"97f6a704",2966:"85ec8343",3028:"425b9c5d",3075:"728b966d",3085:"0e5f3c11",3089:"79326d13",3493:"824379db",3529:"ae109d0f",3608:"14550a7b",3650:"efbc629e",3819:"69913b95",3826:"92d6b3b9",3835:"5af0567e",3915:"8b424c4a",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",4474:"cf4b5b39",4982:"f190df57",5119:"17f39b33",5202:"1684b1e8",5505:"876d2b4e",5647:"42a891fc",5885:"2d7392a2",6103:"c8bcaa36",6259:"23af1f9d",6525:"be52a978",6641:"3323e0df",6821:"39a50923",7424:"690f8c02",7450:"b26a76bf",7541:"38f6529b",7544:"9df861ff",7918:"912fe004",8287:"64b27540",8341:"945158b5",8477:"321ef7ad",8610:"6bc59e7c",8857:"3697d795",9008:"3863916d",9169:"e4ea30ef",9348:"129b2157",9500:"ed67a2d6",9505:"2c867369",9514:"3958b6d2",9553:"e39bc3ef",9659:"19c46c59",9663:"d0a4b3bc",9671:"a5cd8191",9923:"66e1bee0"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},t="realityworld:",b.l=(e,c,a,r)=>{if(f[e])f[e].push(c);else{var d,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==t+a){d=l;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",t+a),d.src=e),f[e]=[c];var u=(c,a)=>{d.onerror=d.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],d.parentNode&&d.parentNode.removeChild(d),t&&t.forEach((e=>e(a))),c)return c(a)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53",b2b675dd:"533","5062db26":"990",b6ba9ce7:"1218",b2f554cd:"1477",a7023ddc:"1713","14fa4984":"2116",bdff1965:"2307","814f3328":"2535",adf73beb:"2625","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","308394e9":"3650","2c22cdfb":"3819","1938696b":"3835","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195","088d37c1":"4982","92f86187":"5119",a394719f:"5202",f5134437:"5505","1e8a94b6":"5647","1e248c61":"5885",ccc49370:"6103","0c125c2b":"6259","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544",fb33060d:"8287","16c820cc":"8341","856e59d2":"8477","6875c492":"8610",ec9b07e8:"8857","0b68990b":"9008","51e4ac6f":"9169",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514","398258ee":"9553",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(c,a)=>{var f=b.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var t=new Promise(((a,t)=>f=e[c]=[a,t]));a.push(f[2]=t);var r=b.p+b.u(c),d=new Error;b.l(r,(a=>{if(b.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var t=a&&("load"===a.type?"missing":a.type),r=a&&a.target&&a.target.src;d.message="Loading chunk "+c+" failed.\n("+t+": "+r+")",d.name="ChunkLoadError",d.type=t,d.request=r,f[1](d)}}),"chunk-"+c,c)}},b.O.j=c=>0===e[c];var c=(c,a)=>{var f,t,r=a[0],d=a[1],o=a[2],n=0;if(r.some((c=>0!==e[c]))){for(f in d)b.o(d,f)&&(b.m[f]=d[f]);if(o)var i=o(b)}for(c&&c(a);n<r.length;n++)t=r[n],b.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return b.O(i)},a=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];a.forEach(c.bind(null,0)),a.push=c.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.5dab4f82.js b/assets/js/runtime~main.5dab4f82.js deleted file mode 100644 index 9fdd1ee..0000000 --- a/assets/js/runtime~main.5dab4f82.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,c,a,f,t,r={},d={};function b(e){var c=d[e];if(void 0!==c)return c.exports;var a=d[e]={exports:{}};return r[e].call(a.exports,a,a.exports,b),a.exports}b.m=r,e=[],b.O=(c,a,f,t)=>{if(!a){var r=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],t=e[i][2];for(var d=!0,o=0;o<a.length;o++)(!1&t||r>=t)&&Object.keys(b.O).every((e=>b.O[e](a[o])))?a.splice(o--,1):(d=!1,t<r&&(r=t));if(d){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}t=t||0;for(var i=e.length;i>0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[a,f,t]},b.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return b.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var r={};c=c||[null,a({}),a([]),a(a)];for(var d=2&f&&e;"object"==typeof d&&!~c.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach((c=>r[c]=()=>e[c]));return r.default=()=>e,b.d(t,r),t},b.d=(e,c)=>{for(var a in c)b.o(c,a)&&!b.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((c,a)=>(b.f[a](e,c),c)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",533:"b2b675dd",1218:"b6ba9ce7",1477:"b2f554cd",1713:"a7023ddc",2116:"14fa4984",2307:"bdff1965",2535:"814f3328",2625:"adf73beb",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3111:"087bcfde",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3650:"308394e9",3819:"2c22cdfb",3835:"1938696b",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",5119:"92f86187",5202:"a394719f",5505:"f5134437",5647:"1e8a94b6",5885:"1e248c61",6103:"ccc49370",6259:"0c125c2b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7918:"17896441",8341:"16c820cc",8477:"856e59d2",8610:"6875c492",8712:"49b2de74",8852:"831b5c01",8857:"ec9b07e8",9008:"0b68990b",9169:"51e4ac6f",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9553:"398258ee",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"a123a235",533:"52341e09",1218:"63beaa81",1477:"86c2df08",1713:"4ec2efae",2116:"8dc578c0",2307:"a50c7d83",2535:"ce51600a",2625:"5a71b4bc",2863:"97f6a704",2966:"85ec8343",3028:"425b9c5d",3075:"728b966d",3085:"28f273ba",3089:"79326d13",3111:"00fb6169",3493:"824379db",3529:"ae109d0f",3608:"14550a7b",3650:"26532507",3819:"69913b95",3826:"92d6b3b9",3835:"5af0567e",3915:"46adacda",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",5119:"17f39b33",5202:"1684b1e8",5505:"876d2b4e",5647:"42a891fc",5885:"2d7392a2",6103:"80aafd6b",6259:"bbc3f0bb",6525:"be52a978",6641:"d6bcf79e",6821:"3e5ec425",7424:"690f8c02",7450:"b26a76bf",7541:"38f6529b",7544:"9df861ff",7918:"2d94139d",8341:"945158b5",8477:"321ef7ad",8485:"28ee2776",8610:"baf4982b",8712:"b79f9acf",8852:"07ee4a6a",8857:"3697d795",9008:"3863916d",9169:"e4ea30ef",9348:"129b2157",9500:"ed67a2d6",9505:"2c867369",9514:"3958b6d2",9553:"e39bc3ef",9659:"19c46c59",9663:"a096338a",9671:"a5cd8191",9923:"80345f31"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},t="realityworld:",b.l=(e,c,a,r)=>{if(f[e])f[e].push(c);else{var d,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==t+a){d=l;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",t+a),d.src=e),f[e]=[c];var u=(c,a)=>{d.onerror=d.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],d.parentNode&&d.parentNode.removeChild(d),t&&t.forEach((e=>e(a))),c)return c(a)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53",b2b675dd:"533",b6ba9ce7:"1218",b2f554cd:"1477",a7023ddc:"1713","14fa4984":"2116",bdff1965:"2307","814f3328":"2535",adf73beb:"2625","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089","087bcfde":"3111",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","308394e9":"3650","2c22cdfb":"3819","1938696b":"3835","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195","92f86187":"5119",a394719f:"5202",f5134437:"5505","1e8a94b6":"5647","1e248c61":"5885",ccc49370:"6103","0c125c2b":"6259","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544","16c820cc":"8341","856e59d2":"8477","6875c492":"8610","49b2de74":"8712","831b5c01":"8852",ec9b07e8:"8857","0b68990b":"9008","51e4ac6f":"9169",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514","398258ee":"9553",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(c,a)=>{var f=b.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var t=new Promise(((a,t)=>f=e[c]=[a,t]));a.push(f[2]=t);var r=b.p+b.u(c),d=new Error;b.l(r,(a=>{if(b.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var t=a&&("load"===a.type?"missing":a.type),r=a&&a.target&&a.target.src;d.message="Loading chunk "+c+" failed.\n("+t+": "+r+")",d.name="ChunkLoadError",d.type=t,d.request=r,f[1](d)}}),"chunk-"+c,c)}},b.O.j=c=>0===e[c];var c=(c,a)=>{var f,t,r=a[0],d=a[1],o=a[2],n=0;if(r.some((c=>0!==e[c]))){for(f in d)b.o(d,f)&&(b.m[f]=d[f]);if(o)var i=o(b)}for(c&&c(a);n<r.length;n++)t=r[n],b.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return b.O(i)},a=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];a.forEach(c.bind(null,0)),a.push=c.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.f45653f9.js b/assets/js/runtime~main.f45653f9.js deleted file mode 100644 index ec84a6a..0000000 --- a/assets/js/runtime~main.f45653f9.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,c,a,f,t,r={},d={};function b(e){var c=d[e];if(void 0!==c)return c.exports;var a=d[e]={exports:{}};return r[e].call(a.exports,a,a.exports,b),a.exports}b.m=r,e=[],b.O=(c,a,f,t)=>{if(!a){var r=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],t=e[i][2];for(var d=!0,o=0;o<a.length;o++)(!1&t||r>=t)&&Object.keys(b.O).every((e=>b.O[e](a[o])))?a.splice(o--,1):(d=!1,t<r&&(r=t));if(d){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}t=t||0;for(var i=e.length;i>0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[a,f,t]},b.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return b.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var r={};c=c||[null,a({}),a([]),a(a)];for(var d=2&f&&e;"object"==typeof d&&!~c.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach((c=>r[c]=()=>e[c]));return r.default=()=>e,b.d(t,r),t},b.d=(e,c)=>{for(var a in c)b.o(c,a)&&!b.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((c,a)=>(b.f[a](e,c),c)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",533:"b2b675dd",1218:"b6ba9ce7",1477:"b2f554cd",1713:"a7023ddc",2116:"14fa4984",2307:"bdff1965",2535:"814f3328",2625:"adf73beb",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3111:"087bcfde",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3819:"2c22cdfb",3835:"1938696b",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",4572:"ec0679b0",5119:"92f86187",5202:"a394719f",5505:"f5134437",5647:"1e8a94b6",5885:"1e248c61",6103:"ccc49370",6160:"edc931f8",6259:"0c125c2b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7616:"306a8c6c",7918:"17896441",8341:"16c820cc",8477:"856e59d2",8610:"6875c492",8712:"49b2de74",8852:"831b5c01",8857:"ec9b07e8",9008:"0b68990b",9169:"51e4ac6f",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9553:"398258ee",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"a123a235",533:"52341e09",1218:"63beaa81",1477:"86c2df08",1713:"4ec2efae",2116:"8dc578c0",2307:"a50c7d83",2535:"ce51600a",2625:"5a71b4bc",2863:"97f6a704",2966:"85ec8343",3028:"425b9c5d",3075:"728b966d",3085:"28f273ba",3089:"79326d13",3111:"00fb6169",3493:"824379db",3529:"ae109d0f",3608:"14550a7b",3819:"69913b95",3826:"92d6b3b9",3835:"5af0567e",3915:"46adacda",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",4572:"a7d27dc2",5119:"17f39b33",5202:"1684b1e8",5505:"876d2b4e",5647:"42a891fc",5885:"2d7392a2",6103:"80aafd6b",6160:"d7cf7051",6259:"bbc3f0bb",6525:"be52a978",6641:"d6bcf79e",6821:"3e5ec425",7424:"690f8c02",7450:"b26a76bf",7541:"38f6529b",7544:"9df861ff",7616:"2163c7e8",7918:"2d94139d",8341:"945158b5",8477:"321ef7ad",8485:"28ee2776",8610:"baf4982b",8712:"b79f9acf",8852:"07ee4a6a",8857:"3697d795",9008:"3863916d",9169:"e4ea30ef",9348:"129b2157",9500:"ed67a2d6",9505:"2c867369",9514:"3958b6d2",9553:"e39bc3ef",9659:"19c46c59",9663:"a096338a",9671:"a5cd8191",9923:"80345f31"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},t="realityworld:",b.l=(e,c,a,r)=>{if(f[e])f[e].push(c);else{var d,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==t+a){d=l;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",t+a),d.src=e),f[e]=[c];var u=(c,a)=>{d.onerror=d.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],d.parentNode&&d.parentNode.removeChild(d),t&&t.forEach((e=>e(a))),c)return c(a)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53",b2b675dd:"533",b6ba9ce7:"1218",b2f554cd:"1477",a7023ddc:"1713","14fa4984":"2116",bdff1965:"2307","814f3328":"2535",adf73beb:"2625","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089","087bcfde":"3111",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","2c22cdfb":"3819","1938696b":"3835","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195",ec0679b0:"4572","92f86187":"5119",a394719f:"5202",f5134437:"5505","1e8a94b6":"5647","1e248c61":"5885",ccc49370:"6103",edc931f8:"6160","0c125c2b":"6259","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544","306a8c6c":"7616","16c820cc":"8341","856e59d2":"8477","6875c492":"8610","49b2de74":"8712","831b5c01":"8852",ec9b07e8:"8857","0b68990b":"9008","51e4ac6f":"9169",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514","398258ee":"9553",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(c,a)=>{var f=b.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var t=new Promise(((a,t)=>f=e[c]=[a,t]));a.push(f[2]=t);var r=b.p+b.u(c),d=new Error;b.l(r,(a=>{if(b.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var t=a&&("load"===a.type?"missing":a.type),r=a&&a.target&&a.target.src;d.message="Loading chunk "+c+" failed.\n("+t+": "+r+")",d.name="ChunkLoadError",d.type=t,d.request=r,f[1](d)}}),"chunk-"+c,c)}},b.O.j=c=>0===e[c];var c=(c,a)=>{var f,t,r=a[0],d=a[1],o=a[2],n=0;if(r.some((c=>0!==e[c]))){for(f in d)b.o(d,f)&&(b.m[f]=d[f]);if(o)var i=o(b)}for(c&&c(a);n<r.length;n++)t=r[n],b.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return b.O(i)},a=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];a.forEach(c.bind(null,0)),a.push=c.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/blog/archive/index.html b/blog/archive/index.html index 5e363d0..6f0a0a6 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -6,8 +6,8 @@ <title data-rh="true">Archive | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/conversational-computing/index.html b/blog/conversational-computing/index.html index 2a4681c..85d2908 100644 --- a/blog/conversational-computing/index.html +++ b/blog/conversational-computing/index.html @@ -6,8 +6,8 @@ Conversational computing: a new programming model empower LLM applications | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 6a85bc3..6fdb1e3 100644 --- a/blog/index.html +++ b/blog/index.html @@ -6,8 +6,8 @@ Blog | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/reality-world-open-source-conference/index.html b/blog/reality-world-open-source-conference/index.html index 888e1f0..df533e8 100644 --- a/blog/reality-world-open-source-conference/index.html +++ b/blog/reality-world-open-source-conference/index.html @@ -6,8 +6,8 @@ Reality World 开源技术分享会 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/tags/cogine/index.html b/blog/tags/cogine/index.html index 38e81fb..3025f2b 100644 --- a/blog/tags/cogine/index.html +++ b/blog/tags/cogine/index.html @@ -6,8 +6,8 @@ 2 posts tagged with "Cogine" | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index c67b9a3..a96f00f 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -6,8 +6,8 @@ Tags | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/tags/open-source/index.html b/blog/tags/open-source/index.html index dbb84cf..199f157 100644 --- a/blog/tags/open-source/index.html +++ b/blog/tags/open-source/index.html @@ -6,8 +6,8 @@ One post tagged with "Open source" | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/tags/reality-world/index.html b/blog/tags/reality-world/index.html index aec2da8..cd7dcf2 100644 --- a/blog/tags/reality-world/index.html +++ b/blog/tags/reality-world/index.html @@ -6,8 +6,8 @@ 4 posts tagged with "Reality World" | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/the-evolution-of-ECS/index.html b/blog/the-evolution-of-ECS/index.html index c8b547c..66fcb54 100644 --- a/blog/the-evolution-of-ECS/index.html +++ b/blog/the-evolution-of-ECS/index.html @@ -6,8 +6,8 @@ The Evolution of ECS | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/blog/thinking/index.html b/blog/thinking/index.html index e5eea5f..7acc1e4 100644 --- a/blog/thinking/index.html +++ b/blog/thinking/index.html @@ -6,8 +6,8 @@ 对未来数字世界和软件构造的思考 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/cogine/index.html b/cogine/index.html index d914111..1c37991 100644 --- a/cogine/index.html +++ b/cogine/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -17,7 +17,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/community/about-open-source/index.html b/community/about-open-source/index.html index 7995fc8..f2d3348 100644 --- a/community/about-open-source/index.html +++ b/community/about-open-source/index.html @@ -6,8 +6,8 @@ 关于开源 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/community/about-reality-world/index.html b/community/about-reality-world/index.html index 4a82a83..c8eb811 100644 --- a/community/about-reality-world/index.html +++ b/community/about-reality-world/index.html @@ -6,8 +6,8 @@ 关于 Reality World | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/community/contact/index.html b/community/contact/index.html index 0a1d763..557682d 100644 --- a/community/contact/index.html +++ b/community/contact/index.html @@ -6,8 +6,8 @@ 联系我们 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/community/index.html b/community/index.html deleted file mode 100644 index 6eb6fa3..0000000 --- a/community/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -index | Creating an intelligent reality with AI - - - - - - - - - - - \ No newline at end of file diff --git a/community/questions/index.html b/community/questions/index.html index cd87900..a415b04 100644 --- a/community/questions/index.html +++ b/community/questions/index.html @@ -6,8 +6,8 @@ 常见问题 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/community/resources/index.html b/community/resources/index.html index 077bf5c..bdb1980 100644 --- a/community/resources/index.html +++ b/community/resources/index.html @@ -6,8 +6,8 @@ 推荐资源 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/community/roadmap/index.html b/community/roadmap/index.html index db4d38b..407e332 100644 --- a/community/roadmap/index.html +++ b/community/roadmap/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index 183546f..ded6c2f 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -6,8 +6,8 @@ 文档说明 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/introduction/advantage/index.html b/docs/introduction/advantage/index.html index d389ef7..97d47f9 100644 --- a/docs/introduction/advantage/index.html +++ b/docs/introduction/advantage/index.html @@ -6,8 +6,8 @@ 1.3 技术优势 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/introduction/business-model/index.html b/docs/introduction/business-model/index.html index 20dc4fb..736d079 100644 --- a/docs/introduction/business-model/index.html +++ b/docs/introduction/business-model/index.html @@ -6,8 +6,8 @@ 1.4 商业模式 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/introduction/current/index.html b/docs/introduction/current/index.html index 2f49f20..6e970d0 100644 --- a/docs/introduction/current/index.html +++ b/docs/introduction/current/index.html @@ -6,8 +6,8 @@ 1.2 现状 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/introduction/evolution/index.html b/docs/introduction/evolution/index.html index 2c7c1cb..42b60b9 100644 --- a/docs/introduction/evolution/index.html +++ b/docs/introduction/evolution/index.html @@ -6,8 +6,8 @@ 1.1 变革 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/introduction/index.html b/docs/introduction/index.html index f91c780..dfd51d2 100644 --- a/docs/introduction/index.html +++ b/docs/introduction/index.html @@ -6,8 +6,8 @@ 1. Introduction | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/introduction/user/index.html b/docs/introduction/user/index.html index 49b6e53..e2aa550 100644 --- a/docs/introduction/user/index.html +++ b/docs/introduction/user/index.html @@ -6,8 +6,8 @@ 1.5 用户 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/docs/introduction/value/index.html b/docs/introduction/value/index.html index 3fd9704..50d2a20 100644 --- a/docs/introduction/value/index.html +++ b/docs/introduction/value/index.html @@ -6,8 +6,8 @@ 1.6 创造增量价值 | Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/feature/chidori/index.html b/feature/chidori/index.html index 59bb71b..b8c95ac 100644 --- a/feature/chidori/index.html +++ b/feature/chidori/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/feature/cogine/index.html b/feature/cogine/index.html index 12a62b5..ff8c093 100644 --- a/feature/cogine/index.html +++ b/feature/cogine/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/feature/features/index.html b/feature/features/index.html index a5954fa..47c496a 100644 --- a/feature/features/index.html +++ b/feature/features/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/feature/langchain/index.html b/feature/langchain/index.html index e5cb41f..20b14f6 100644 --- a/feature/langchain/index.html +++ b/feature/langchain/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -16,7 +16,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/features/index.html b/features/index.html index fae7f9d..e14aa9a 100644 --- a/features/index.html +++ b/features/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
@@ -157,7 +157,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/index.html b/index.html index b8e5dc1..2913631 100644 --- a/index.html +++ b/index.html @@ -6,8 +6,8 @@ Reality World | Creating an intelligent reality with AI - - + +
@@ -17,7 +17,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/learning/Reality-World/index.html b/learning/Reality-World/index.html index 6a6f4bb..66581bc 100644 --- a/learning/Reality-World/index.html +++ b/learning/Reality-World/index.html @@ -6,8 +6,8 @@ 文档说明 | Creating an intelligent reality with AI - - + +
@@ -57,7 +57,7 @@ Reality World开源社区群
过期请加:ARealityWorld
- - + + \ No newline at end of file diff --git a/pdf/Reality-World.pdf b/pdf/Reality-World.pdf deleted file mode 100644 index f865f29d15e807734bc227dd677c565d449d197c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2157123 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%0A}VkJi)}S4)1~haol1TXxbDLtFbQr}4 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%0AWZ*^W6qv@8goKnYK%pK8zqJ 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

o~T|BI{3m%lhXvpzjUncnm&wjP_vZ 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 z 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%0D;luM>=qoHF$Sm752n(t6EC?tms-V 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 z%0A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%0D3Qe8l|hJGTC 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�$>$51mLoI>BDL39hq-VbQD7Det}y=k7Z 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
k7T1H!XA>BZN+d9|+6~53 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

7?A=zA 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 =Wgn>j) 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


NAHl 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

W$;HvW@xt?*-d>H_EB!rY;h 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�m>R6&v>EOOt}b`AoCbFSx>ybTXM9{Q7y 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

M%ak%cV*t?W;kMoNE`B~b{>E2g3L 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
    7cL35x6vm7|xYYkyR%|Rzydo9TN`4K)i$+| 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 an intelligent reality with AI - - + +
    @@ -17,7 +17,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/reality-world-paper/index.html b/reality-world-paper/index.html index d406440..9f19a27 100644 --- a/reality-world-paper/index.html +++ b/reality-world-paper/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -21,7 +21,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/search-index-default.json b/search-index-default.json index c4cea2b..df7c1ab 100644 --- a/search-index-default.json +++ b/search-index-default.json @@ -1 +1 @@ -{"documents":[{"id":1,"pageTitle":"Conversational computing: a new programming model empower LLM applications","sectionTitle":"Conversational computing: a new programming model empower LLM applications","sectionRoute":"/blog/conversational-computing","type":"blog"},{"id":2,"pageTitle":"Conversational computing: a new programming model empower LLM applications","sectionTitle":"Citation","sectionRoute":"/blog/conversational-computing#citation","type":"blog"},{"id":3,"pageTitle":"Conversational computing: a new programming model empower LLM applications","sectionTitle":"References","sectionRoute":"/blog/conversational-computing#references","type":"blog"},{"id":13,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"Reality World 开源技术分享会","sectionRoute":"/blog/reality-world-open-source-conference","type":"blog"},{"id":14,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"先回答问题","sectionRoute":"/blog/reality-world-open-source-conference#先回答问题","type":"blog"},{"id":15,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"Reality World是什么?","sectionRoute":"/blog/reality-world-open-source-conference#reality-world是什么","type":"blog"},{"id":16,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"讲什么?","sectionRoute":"/blog/reality-world-open-source-conference#讲什么","type":"blog"},{"id":17,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"面向的受众群体是谁?","sectionRoute":"/blog/reality-world-open-source-conference#面向的受众群体是谁","type":"blog"},{"id":18,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源的目的是什么?","sectionRoute":"/blog/reality-world-open-source-conference#开源的目的是什么","type":"blog"},{"id":19,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"License","sectionRoute":"/blog/reality-world-open-source-conference#license","type":"blog"},{"id":20,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源什么?","sectionRoute":"/blog/reality-world-open-source-conference#开源什么","type":"blog"},{"id":21,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源信息","sectionRoute":"/blog/reality-world-open-source-conference#开源信息","type":"blog"},{"id":22,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源社区群","sectionRoute":"/blog/reality-world-open-source-conference#开源社区群","type":"blog"},{"id":23,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"活动信息","sectionRoute":"/blog/reality-world-open-source-conference#活动信息","type":"blog"},{"id":24,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"联系我","sectionRoute":"/blog/reality-world-open-source-conference#联系我","type":"blog"},{"id":25,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"官网地址","sectionRoute":"/blog/reality-world-open-source-conference#官网地址","type":"blog"},{"id":26,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"报名地址","sectionRoute":"/blog/reality-world-open-source-conference#报名地址","type":"blog"},{"id":6,"pageTitle":"The Evolution of ECS","sectionTitle":"The Evolution of ECS","sectionRoute":"/blog/the-evolution-of-ECS","type":"blog"},{"id":39,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"对未来数字世界和软件构造的思考","sectionRoute":"/blog/thinking","type":"blog"},{"id":40,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"Reality World不是什么?","sectionRoute":"/blog/thinking#reality-world不是什么","type":"blog"},{"id":41,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"Reality Create的核心不是一个游戏引擎!","sectionRoute":"/blog/thinking#reality-create的核心不是一个游戏引擎","type":"blog"},{"id":42,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"Reality World当然也不是元宇宙项目","sectionRoute":"/blog/thinking#reality-world当然也不是元宇宙项目","type":"blog"},{"id":43,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"构建一个互操作的数字世界","sectionRoute":"/blog/thinking#构建一个互操作的数字世界","type":"blog"},{"id":44,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"更轻量级的隔离技术","sectionRoute":"/blog/thinking#更轻量级的隔离技术","type":"blog"},{"id":45,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"互操作性的本质是应用碎片化的问题","sectionRoute":"/blog/thinking#互操作性的本质是应用碎片化的问题","type":"blog"},{"id":46,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"新的应用程序构造方法","sectionRoute":"/blog/thinking#新的应用程序构造方法","type":"blog"},{"id":47,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"面向对象的本质是隔离","sectionRoute":"/blog/thinking#面向对象的本质是隔离","type":"blog"},{"id":48,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"程序结构的复杂性","sectionRoute":"/blog/thinking#程序结构的复杂性","type":"blog"},{"id":49,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"去中心化的数据管理","sectionRoute":"/blog/thinking#去中心化的数据管理","type":"blog"},{"id":50,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"为AI而生的应用程序构造方法","sectionRoute":"/blog/thinking#为ai而生的应用程序构造方法","type":"blog"},{"id":51,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"软件复用与可组合性","sectionRoute":"/blog/thinking#软件复用与可组合性","type":"blog"},{"id":52,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"面向AI的编程系统","sectionRoute":"/blog/thinking#面向ai的编程系统","type":"blog"},{"id":53,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"拥抱Rust","sectionRoute":"/blog/thinking#拥抱rust","type":"blog"},{"id":54,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"我这一年的创作过程","sectionRoute":"/blog/thinking#我这一年的创作过程","type":"blog"},{"id":55,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"关于商业模式","sectionRoute":"/blog/thinking#关于商业模式","type":"blog"},{"id":56,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"参与Reality World开发","sectionRoute":"/blog/thinking#参与reality-world开发","type":"blog"},{"id":57,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"关于融资","sectionRoute":"/blog/thinking#关于融资","type":"blog"},{"id":58,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"后记","sectionRoute":"/blog/thinking#后记","type":"blog"}],"index":{"version":"2.3.9","fields":["title","content","tags"],"fieldVectors":[["title/1",[0,0.935,1,0.935,2,0.935,3,0.735,4,0.935,5,0.935,6,0.821,7,0.821]],["content/1",[]],["tags/1",[8,0.429,9,0.429]],["title/2",[10,3.685]],["content/2",[0,2.329,1,3.362,2,2.329,3,1.83,4,2.329,5,2.329,6,2.043,7,2.043,11,1.71,12,2.762,13,2.762,14,2.762,15,2.762,16,0.36,17,0.429,18,2.762,19,1.71,20,1.71,21,0.291,22,1.71,23,1.71,24,1.71,25,1.71,26,1.71]],["tags/2",[]],["title/3",[27,3.685]],["content/3",[]],["tags/3",[]],["title/13",[16,0.289,17,0.344,21,0.131]],["content/13",[21,0.364]],["tags/13",[8,0.429,28,0.647]],["title/14",[21,0.218]],["content/14",[16,0.716,17,0.765,21,0.221,29,3.743,30,3.743,31,3.743,32,3.156]],["tags/14",[]],["title/15",[16,0.361,17,0.43]],["content/15",[9,1.711,16,0.647,17,0.401,21,0.312,33,2.582,34,1.552,35,2.582,36,2.582,37,2.582,38,2.582,39,2.582,40,2.582,41,2.582,42,2.582,43,2.177,44,1.552,45,2.582]],["tags/15",[]],["title/16",[21,0.218]],["content/16",[16,0.621,17,0.554,21,0.357,46,2.372,47,2.372,48,2.372,49,2.372,50,2.372,51,2.372,52,2.372,53,1.755,54,2.372,55,2.372,56,2.372]],["tags/16",[]],["title/17",[21,0.218]],["content/17",[6,2.096,21,0.379,34,1.703,53,2.096,57,2.833,58,2.389,59,2.833,60,2.096]],["tags/17",[]],["title/18",[21,0.218]],["content/18",[16,0.641,17,0.854,21,0.221,34,2.25,61,3.743,62,3.156,63,3.743]],["tags/18",[]],["title/19",[64,3.107]],["content/19",[16,0.605,64,3.909,65,4.636,66,4.636]],["tags/19",[]],["title/20",[21,0.218]],["content/20",[16,0.56,17,0.668,21,0.317,62,3.621,67,3.621]],["tags/20",[]],["title/21",[21,0.218]],["content/21",[21,0.297,68,5.037]],["tags/21",[]],["title/22",[21,0.218]],["content/22",[69,3.895]],["tags/22",[]],["title/23",[21,0.218]],["content/23",[21,0.352,67,2.511,70,2.978,71,2.978,72,2.978,73,2.978,74,2.978,75,4.879,76,2.978,77,2.978]],["tags/23",[]],["title/24",[21,0.218]],["content/24",[16,0.54,17,0.644,21,0.245,32,3.492,69,3.065,78,4.142,79,4.142]],["tags/24",[]],["title/25",[21,0.218]],["content/25",[80,5.265]],["tags/25",[]],["title/26",[21,0.218]],["content/26",[81,5.265]],["tags/26",[]],["title/6",[82,2.767,83,2.767]],["content/6",[9,3.2,17,0.751,84,4.828]],["tags/6",[8,0.429,9,0.429]],["title/39",[21,0.218]],["content/39",[16,0.67,17,0.798,44,2.405,85,4,86,4,87,4]],["tags/39",[8,0.768]],["title/40",[16,0.361,17,0.43]],["content/40",[16,0.63,43,4.071,88,4.828]],["tags/40",[]],["title/41",[16,0.361,44,1.663]],["content/41",[16,0.488,17,0.582,21,0.29,44,2.25,89,3.743,90,3.743,91,3.743,92,3.743,93,3.743]],["tags/41",[]],["title/42",[16,0.361,17,0.43]],["content/42",[7,2.261,16,0.398,17,0.475,21,0.253,94,3.056,95,3.056,96,3.056,97,3.056,98,3.056,99,3.613,100,3.171,101,3.056,102,2.577,103,3.056]],["tags/42",[]],["title/43",[21,0.218]],["content/43",[3,0.749,16,0.4,17,0.477,21,0.181,34,0.679,53,0.836,99,1.646,100,1.907,104,1.13,105,1.13,106,1.13,107,1.13,108,1.13,109,1.13,110,1.13,111,1.13,112,1.13,113,1.13,114,1.13,115,1.13,116,1.13,117,1.13,118,1.13,119,1.13,120,1.13,121,1.13,122,1.13,123,1.13,124,1.13,125,1.13,126,1.13,127,1.13,128,1.13,129,1.13,130,1.13,131,1.13,132,1.13,133,1.13,134,1.646,135,1.13,136,1.13,137,1.13,138,1.13,139,1.13,140,1.13,141,1.13,142,1.13,143,1.13,144,1.952,145,1.13,146,1.13,147,0.953,148,1.13,149,1.13,150,1.13,151,1.13,152,1.13,153,1.13,154,1.13,155,1.13,156,1.13,157,1.13,158,1.13,159,1.13,160,1.13,161,1.13,162,1.13,163,1.13]],["tags/43",[]],["title/44",[21,0.218]],["content/44",[17,0.668,34,2.582,44,2.582,164,4.295,165,4.295,166,4.295]],["tags/44",[]],["title/45",[21,0.218]],["content/45",[16,0.324,17,0.291,21,0.33,58,0.909,100,0.797,102,0.909,167,1.078,168,1.078,169,1.078,170,1.078,171,1.078,172,1.078,173,1.078,174,1.078,175,1.874,176,1.078,177,1.078,178,3.691,179,1.078,180,1.078,181,1.078,182,3.365,183,1.874,184,0.909,185,1.078,186,1.874,187,1.078,188,1.874,189,1.58,190,1.078,191,1.078,192,1.078,193,1.078,194,1.874,195,1.078,196,1.078,197,1.874,198,1.078,199,1.078,200,1.58,201,1.078,202,1.078,203,1.078,204,1.078,205,1.078,206,1.078,207,1.078,208,1.078]],["tags/45",[]],["title/46",[21,0.218]],["content/46",[16,0.67,17,0.622,21,0.353,209,4]],["tags/46",[]],["title/47",[21,0.218]],["content/47",[3,1.194,21,0.17,134,1.519,147,0.869,184,0.869,189,1.519,200,0.869,210,1.03,211,1.801,212,1.801,213,1.03,214,1.03,215,1.03,216,1.03,217,1.801,218,1.03,219,1.03,220,1.801,221,1.03,222,1.03,223,1.801,224,1.03,225,1.801,226,1.03,227,3.596,228,2.428,229,1.03,230,1.03,231,3.596,232,3.596,233,1.03,234,1.03,235,1.03,236,1.03,237,1.03,238,1.801,239,1.03,240,1.03,241,1.03,242,1.03,243,1.03,244,1.03,245,1.03,246,1.03,247,1.03,248,1.03,249,1.03,250,1.03,251,1.03,252,1.03,253,1.03,254,1.03,255,1.03,256,1.03,257,1.03,258,1.03,259,1.03,260,1.03,261,1.03,262,1.03,263,1.03]],["tags/47",[]],["title/48",[21,0.218]],["content/48",[16,0.54,17,0.644,21,0.358,264,4.142]],["tags/48",[]],["title/49",[21,0.218]],["content/49",[21,0.352,265,4.459,266,4.459]],["tags/49",[]],["title/50",[267,3.107]],["content/50",[16,0.56,17,0.668,21,0.254,268,4.295,269,4.295,270,4.295]],["tags/50",[]],["title/51",[21,0.218]],["content/51",[16,0.473,21,0.319,271,3.626,272,3.626,273,3.626,274,3.626,275,3.626,276,3.626,277,3.058]],["tags/51",[]],["title/52",[267,3.107]],["content/52",[278,4.459,279,4.459,280,4.459,281,4.459,282,4.459]],["tags/52",[]],["title/53",[60,2.726]],["content/53",[60,3.178,283,4.295,284,4.295,285,4.295,286,4.295,287,4.295]],["tags/53",[]],["title/54",[21,0.218]],["content/54",[228,3.261,288,3.867,289,3.867,290,3.867,291,3.867,292,3.867,293,3.867,294,3.867,295,3.867]],["tags/54",[]],["title/55",[21,0.218]],["content/55",[21,0.311]],["tags/55",[]],["title/56",[16,0.361,17,0.43]],["content/56",[16,0.734,17,0.721,296,4.636]],["tags/56",[]],["title/57",[21,0.218]],["content/57",[21,0.285,69,3.573,277,4.071]],["tags/57",[]],["title/58",[21,0.218]],["content/58",[21,0.311]],["tags/58",[]]],"invertedIndex":[["",{"_index":21,"title":{"13":{},"14":{},"16":{},"17":{},"18":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"39":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"51":{},"54":{},"55":{},"57":{},"58":{}},"content":{"2":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"20":{},"21":{},"23":{},"24":{},"41":{},"42":{},"43":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"55":{},"57":{},"58":{}},"tags":{}}],["0.5",{"_index":55,"title":{},"content":{"16":{}},"tags":{}}],["00",{"_index":75,"title":{},"content":{"23":{}},"tags":{}}],["10",{"_index":62,"title":{},"content":{"18":{},"20":{}},"tags":{}}],["10的图书榜单,编程相关的是:《编译原理》、《erlang程序设计(第2版)》、《编程语言实现模式》、《游戏机制》、《链接器与加载器》、《data",{"_index":292,"title":{},"content":{"54":{}},"tags":{}}],["1189",{"_index":71,"title":{},"content":{"23":{}},"tags":{}}],["13",{"_index":73,"title":{},"content":{"23":{}},"tags":{}}],["14",{"_index":74,"title":{},"content":{"23":{}},"tags":{}}],["17",{"_index":76,"title":{},"content":{"23":{}},"tags":{}}],["18",{"_index":77,"title":{},"content":{"23":{}},"tags":{}}],["20",{"_index":67,"title":{},"content":{"20":{},"23":{}},"tags":{}}],["2018年的全国图形渲染技术巡讲,一个人围绕一个主题讲3~4个小时,在中国这种会议几乎是绝无仅有的,那种系统和深度远不是那种15~45",{"_index":30,"title":{},"content":{"14":{}},"tags":{}}],["2022年4.30日从华为离职并开始研究和设计realiti",{"_index":269,"title":{},"content":{"50":{}},"tags":{}}],["2022年4.30日从华为离职,几乎整整一年时间全部都在思考整个系统的设计,以及后期的开发。刚开始2",{"_index":288,"title":{},"content":{"54":{}},"tags":{}}],["2023",{"_index":15,"title":{},"content":{"2":{}},"tags":{}}],["2023.10.22",{"_index":70,"title":{},"content":{"23":{}},"tags":{}}],["3",{"_index":32,"title":{},"content":{"14":{},"24":{}},"tags":{}}],["3.0、元宇宙、以及大模型ai应用的持续不断出现,人们对未来数字化的预期会越来越大,未来的数字化形态必然会发生一些变化。但是目前很多因素糅合在一起使得我们很难去看到清楚的路径,这里面必然涉及到底层技术以及上层产品形态的相互驱动及进化,任何单一实体可能都很难从这种耦合中看到清晰的逻辑。所以real",{"_index":63,"title":{},"content":{"18":{}},"tags":{}}],["3.0和元宇宙的出现,这两种新的应用形态似乎都在尝试构建一个共享、互操作的数字世界。这要求应用之间需要高度交互能力,然而这种需求和传统的软件构造方法是天生相悖的,传统软件构造方法建立内存隔离的目的就是保护数据和内存中数据的安全,它的一个基本的安全底座就是系统的内存环境会保护程序内所有的数据,因此传统的编程语言和软件构造方法就没有太多专门针对这些数据的保护措施,但是当我们去掉这个内存保护,要求很多匿名的软件在一个内存环境中进行运行的时候,这种安全性怎么保证。虽然web",{"_index":52,"title":{},"content":{"16":{}},"tags":{}}],["3.0(去中心化)。尽管这三者之间的概念以及技术需求都是很模糊的,我们则尝试在这三者之间寻找一种统一的计算架构和软件构造方法。所以这就是realiti",{"_index":35,"title":{},"content":{"15":{}},"tags":{}}],["3d引擎的能力以使用户可以开发3d应用程序,但这部分技术跟传统的游戏引擎使用的技术不会有太大差异,当然因为运行时环境不同,与之相关的3d引擎的架构和流程肯定会有一些变化,所以我预期将来realiti",{"_index":91,"title":{},"content":{"41":{}},"tags":{}}],["3d渲染,realiti",{"_index":92,"title":{},"content":{"41":{}},"tags":{}}],["3d,然后期望人们有些更多沉浸式的虚拟生活。这在某种程度上说跟realiti",{"_index":94,"title":{},"content":{"42":{}},"tags":{}}],["3~4",{"_index":47,"title":{},"content":{"16":{}},"tags":{}}],["3部分讨论的内容。然而比较巧合和惊讶的是,至少从我们的设计思路上看:让普通人会编写代码与让ai",{"_index":271,"title":{},"content":{"51":{}},"tags":{}}],["40",{"_index":48,"title":{},"content":{"16":{}},"tags":{}}],["40%的内容中为什么要这么设计的问题。过去几十年来应用构造的体系基本上都是围绕构建一个单一的程序体被隔离在单一的内存中运行的,在这种背景下,软件之间的功能通常都是相互隔离的,甚至即使是属于同一个用户不同应用之间的数据,虽然看起来都是同一个用户的数据,但是不同的软件之间却无法访问。这种机制在过去几十年都能够很好地解决我们的数字化的问题,直到web",{"_index":51,"title":{},"content":{"16":{}},"tags":{}}],["5",{"_index":61,"title":{},"content":{"18":{}},"tags":{}}],["50",{"_index":289,"title":{},"content":{"54":{}},"tags":{}}],["60",{"_index":49,"title":{},"content":{"16":{}},"tags":{}}],["7月左右,那个时候我的基本架构的构思已经初步完成,尤其是最核心也是最重要的一步基础已经设计好,当时看到这篇演讲感到很多共鸣,也是对自己的一种很大的激励,毕竟有对技术和行业都有非常经验和影响力的大佬也有类似的思考和行动。但从去年到现在,我们还是沿着我们早先的技术思路,基本上并没有去关注和参考太多epic",{"_index":107,"title":{},"content":{"43":{}},"tags":{}}],["ai",{"_index":267,"title":{"50":{},"52":{}},"content":{},"tags":{}}],["ai到底能不能或者什么时候替代程序员,我们回到问题本身。传统的文本合成,计算的是文字与文字之间,句子与句子之间的组合概率,这里有两个事情值得注意:第一是任何字之间都可以组合,所以chatgpt总是可以给我们答案,哪怕其中的句子组合和逻辑是完全错误的;第二是一般常用于表述正确语法和语义的哪些文字信息是非常多的,也就是说chatgpt",{"_index":273,"title":{},"content":{"51":{}},"tags":{}}],["ai去生成程序,这里ai",{"_index":276,"title":{},"content":{"51":{}},"tags":{}}],["ai构造复杂的程序逻辑相比,更好的使用方式可能是autogpt或者openai的插件系统,在这种架构中,ai",{"_index":278,"title":{},"content":{"52":{}},"tags":{}}],["ai能够生成代码,这件事情肯定是非常复杂的,当然由于chatgpt的出现相信现在大部分程序员都能够感受到ai的代码生成能力,有些人比较坚信ai",{"_index":272,"title":{},"content":{"51":{}},"tags":{}}],["alan",{"_index":220,"title":{},"content":{"47":{}},"tags":{}}],["alway",{"_index":243,"title":{},"content":{"47":{}},"tags":{}}],["api从哪里获取等等,这远远超出简单文字合成的范围。你可以合成一个文本组合的源代码结果,但是其中的逻辑可能完全是错误的,函数是不存在的,参数是错误的。因此目前来讲,大部分ai",{"_index":274,"title":{},"content":{"51":{}},"tags":{}}],["api包装使用某种形式的标准包装成外部接口,这样就造成碎片化,因为即使是针对同样的一类逻辑和数据,不同的应用程序或服务往往会定义不同的数据结构或处理逻辑,这就形成api的碎片化,使得相互之间非常难以协作。试想你可以在两个应用之间协商修改各自的api",{"_index":171,"title":{},"content":{"45":{}},"tags":{}}],["api碎片化的第二个例子是llvm,本质上llvm在编译器领域的创新主要做的是模块化,早期的编译器开发,各个前端都要分别集成各个后端,编译器开发的复杂度非常高,这里面其实就是多对多的问题,看似很简单,每个前端与每个后端分别调一调,但随之代码的管理和维护成本是很高的,有时候某些内部设计不一致就会导致大量的重复,这就是碎片化问题。由内而外的设计总是不可避免会导致碎片化,碎片化带来软件复杂度,管理和研发成本。当llvm提供了一个统一的低层ir表述之后,编译器的复杂度大大降低,比如现在能够很轻易地开发一些dsl语言,因为你完全不需要操心后端,只需要把你的代码生成llvm",{"_index":174,"title":{},"content":{"45":{}},"tags":{}}],["app",{"_index":113,"title":{},"content":{"43":{}},"tags":{}}],["applic",{"_index":7,"title":{"1":{}},"content":{"2":{},"42":{}},"tags":{}}],["arealityworld",{"_index":69,"title":{},"content":{"22":{},"24":{},"57":{}},"tags":{}}],["armstrong",{"_index":217,"title":{},"content":{"47":{}},"tags":{}}],["armstrong的一段采访:ralph",{"_index":214,"title":{},"content":{"47":{}},"tags":{}}],["armstrong觉得oo编程很烂?,其中引用到erlang之父jo",{"_index":213,"title":{},"content":{"47":{}},"tags":{}}],["armstrong说,根据alan",{"_index":250,"title":{},"content":{"47":{}},"tags":{}}],["article{qin2023convers",{"_index":19,"title":{},"content":{"2":{}},"tags":{}}],["assembl",{"_index":53,"title":{},"content":{"16":{},"17":{},"43":{}},"tags":{}}],["assembly、machinations、《堡垒之夜》、snapchat、bevi",{"_index":295,"title":{},"content":{"54":{}},"tags":{}}],["assembly之前还没有一种技术可以很好地普及和运用沙盒技术,例如jvm上有一些方案,但大多有些性能问题,或者不能完全保证安全,或者方案比较重。web",{"_index":130,"title":{},"content":{"43":{}},"tags":{}}],["assembly之所以是一种未来非常有潜力的技术,不仅仅得益于对web的友好,接近机器码的字节码,多语言支持等等,这种沙盒技术也是很大的一个技术点。在web",{"_index":129,"title":{},"content":{"43":{}},"tags":{}}],["assembly就使用另一个思路,由于web",{"_index":122,"title":{},"content":{"43":{}},"tags":{}}],["assembly有机会对程序进行一定的分析,通过基于control",{"_index":124,"title":{},"content":{"43":{}},"tags":{}}],["assembly的编译器可以检查出程序中哪些代码可能会对这种沙盒环境造成破坏,从而禁止这样的代码生成合法的wasm",{"_index":128,"title":{},"content":{"43":{}},"tags":{}}],["assembly的隔离技术非常优异,但是它并没有改变程序本身的构造方式,即如果你的代码本身就不含破坏别人的恶意代码,那么其实你的开发过程与过去的方式并没有什么区别。而r",{"_index":164,"title":{},"content":{"44":{}},"tags":{}}],["assembly程序都会编译为wasm文件,由wasm虚拟机解释执行,而不是底层的二进制代码,所以web",{"_index":123,"title":{},"content":{"43":{}},"tags":{}}],["assembly这种优秀的沙盒技术使得沙盒模式在以后的软件构造中可能被大规模使用,也就会实现更多的软件协作与分工,事实上比如现在对未受信任多应用环境要求比较高的环境如区块链就大多转型web",{"_index":131,"title":{},"content":{"43":{}},"tags":{}}],["assembly,而如docker和severless这种对虚拟环境要求比较高的环境也在逐步转向web",{"_index":132,"title":{},"content":{"43":{}},"tags":{}}],["author",{"_index":22,"title":{},"content":{"2":{}},"tags":{}}],["a开发了某个应用给用户新增了一种新的健康类的数据信息,这个数据本来是属于用户的,这个时候用户想要用这个数据来实现另一个事情,ta想自己或者说让其他开发者b帮助开发一个应用来使用这些数据,这种情况下通常是做不到的,因为开发者a可能并没有太多动力去提供这个接口,因为ta可能要耗费很大的精力,除非平台提供一些这种非常便利的机制使得ta",{"_index":170,"title":{},"content":{"45":{}},"tags":{}}],["back",{"_index":247,"title":{},"content":{"47":{}},"tags":{}}],["base",{"_index":115,"title":{},"content":{"43":{}},"tags":{}}],["bit",{"_index":258,"title":{},"content":{"47":{}},"tags":{}}],["bug",{"_index":111,"title":{},"content":{"43":{}},"tags":{}}],["c",{"_index":188,"title":{},"content":{"45":{}},"tags":{}}],["c#、c、c++、ruby、lua、rust",{"_index":210,"title":{},"content":{"47":{}},"tags":{}}],["c++/c进行开发,进行了一些简单的语言包装和编译流程定制。因为我们2号员工一直是rust爱好者,一直在鼓动我使用rust,虽然之前看过rust的一些介绍,但是感觉还是没有特别的动力去完全切换到rust",{"_index":283,"title":{},"content":{"53":{}},"tags":{}}],["c++中也经常会存在对象复制;再有稍微复杂一点就是使用move,先将数据mov",{"_index":287,"title":{},"content":{"53":{}},"tags":{}}],["c++那样到处是相互引用显然几乎肯定是你完全没法通过编译器,你得设计好整个程序对象的结构,这里推荐bevi",{"_index":286,"title":{},"content":{"53":{}},"tags":{}}],["call",{"_index":165,"title":{},"content":{"44":{}},"tags":{}}],["capabl",{"_index":152,"title":{},"content":{"43":{}},"tags":{}}],["cfi)技术,web",{"_index":127,"title":{},"content":{"43":{}},"tags":{}}],["characterist",{"_index":143,"title":{},"content":{"43":{}},"tags":{}}],["chatgpt",{"_index":277,"title":{},"content":{"51":{},"57":{}},"tags":{}}],["chatgpt席卷了整个世界,或者至少是科技圈,不管是从资本,国企,民企,程序员个人等等都是受到很大的影响,当然也有像我们小孩的妈妈,以及他妈妈的朋友,目前还不太了解chatgpt",{"_index":268,"title":{},"content":{"50":{}},"tags":{}}],["chunlin",{"_index":13,"title":{},"content":{"2":{}},"tags":{}}],["citat",{"_index":10,"title":{"2":{}},"content":{},"tags":{}}],["cite",{"_index":11,"title":{},"content":{"2":{}},"tags":{}}],["class",{"_index":189,"title":{},"content":{"45":{},"47":{}},"tags":{}}],["client",{"_index":118,"title":{},"content":{"43":{}},"tags":{}}],["co",{"_index":37,"title":{},"content":{"15":{}},"tags":{}}],["cocos2d",{"_index":78,"title":{},"content":{"24":{}},"tags":{}}],["cogin",{"_index":9,"title":{},"content":{"6":{},"15":{}},"tags":{"1":{},"6":{}}}],["common",{"_index":159,"title":{},"content":{"43":{}},"tags":{}}],["commondata",{"_index":149,"title":{},"content":{"43":{}},"tags":{}}],["commun",{"_index":153,"title":{},"content":{"43":{}},"tags":{}}],["complet",{"_index":229,"title":{},"content":{"47":{}},"tags":{}}],["complex",{"_index":38,"title":{},"content":{"15":{}},"tags":{}}],["compos",{"_index":103,"title":{},"content":{"42":{}},"tags":{}}],["comput",{"_index":1,"title":{"1":{}},"content":{"2":{}},"tags":{}}],["computing,或者convers",{"_index":40,"title":{},"content":{"15":{}},"tags":{}}],["computing,这些术语都是cogin",{"_index":41,"title":{},"content":{"15":{}},"tags":{}}],["context",{"_index":197,"title":{},"content":{"45":{}},"tags":{}}],["convention)来设计隔离机制,这样使得不需要对用户的开发过程造成太大的影响。在r",{"_index":166,"title":{},"content":{"44":{}},"tags":{}}],["convers",{"_index":0,"title":{"1":{}},"content":{"2":{}},"tags":{}}],["cppnamespac",{"_index":192,"title":{},"content":{"45":{}},"tags":{}}],["creat",{"_index":44,"title":{"41":{}},"content":{"15":{},"39":{},"41":{},"44":{}},"tags":{}}],["create也包含的3d支持,在我与投资人或者其他朋友交流的过程中,大家普遍的印象是这是一个新的游戏引擎,所以大家的思路就是你跟unity,unr",{"_index":88,"title":{},"content":{"40":{}},"tags":{}}],["create的计划也可以开发2d应用程序,所以我们是用一种统一的编程语言和运行时环境,来统一3d和传统2d",{"_index":93,"title":{},"content":{"41":{}},"tags":{}}],["creativ",{"_index":110,"title":{},"content":{"43":{}},"tags":{}}],["c接口实现相互调用,再往上一点,任何程序之间传递字符串然后内部进行格式解释,也仍然是能够进行通信的。实际上互联网的机制就是如此,osi(open",{"_index":167,"title":{},"content":{"45":{}},"tags":{}}],["data",{"_index":160,"title":{},"content":{"43":{}},"tags":{}}],["def",{"_index":179,"title":{},"content":{"45":{}},"tags":{}}],["definit",{"_index":190,"title":{},"content":{"45":{}},"tags":{}}],["descript",{"_index":183,"title":{},"content":{"45":{}},"tags":{}}],["design",{"_index":293,"title":{},"content":{"54":{}},"tags":{}}],["dialect",{"_index":178,"title":{},"content":{"45":{}},"tags":{}}],["each",{"_index":154,"title":{},"content":{"43":{}},"tags":{}}],["ec",{"_index":83,"title":{"6":{}},"content":{},"tags":{}}],["ecs/dot",{"_index":57,"title":{},"content":{"17":{}},"tags":{}}],["emphas",{"_index":237,"title":{},"content":{"47":{}},"tags":{}}],["empow",{"_index":5,"title":{"1":{}},"content":{"2":{}},"tags":{}}],["engin",{"_index":43,"title":{},"content":{"15":{},"40":{}},"tags":{}}],["engine去创作,这个模式其实类似roblox的模式,它也是一种游戏引擎这种商业模式的转型:传统的游戏引擎只是一个单机的生成应用程序的软件,开发者开发的内容由自己去分发和运营,这样游戏引擎仅作为一个工具,它只参与程序的开发,而无法参与分发和运营,因此无法形成生态,所以尽管一些引擎有庞大的开发者数量和群体,但是这种数量并没有很有效的方式可以转化为生态。然而roblox和《堡垒之夜》是一个分布式系统,你的内容必须分发到这个分布式系统中并由特定的客户端运行时环境来运行,而无法像单独的游戏引擎那样自行分发和运营,这样roblox",{"_index":109,"title":{},"content":{"43":{}},"tags":{}}],["engine开发脚本语言的团队skookumscript,据说还有写v8",{"_index":141,"title":{},"content":{"43":{}},"tags":{}}],["engine的c++或者blueprint开发的应用程序在《堡垒之夜》内存环境中运行,unr",{"_index":136,"title":{},"content":{"43":{}},"tags":{}}],["engine目前也没有比较成熟的脚本编程语言方案,因此epic需要开发一套新的脚本语言,这就是今年早些时候发布的vers",{"_index":137,"title":{},"content":{"43":{}},"tags":{}}],["epic推出vers",{"_index":133,"title":{},"content":{"43":{}},"tags":{}}],["epic显然不可能让玩家使用unr",{"_index":135,"title":{},"content":{"43":{}},"tags":{}}],["erlang",{"_index":211,"title":{},"content":{"47":{}},"tags":{}}],["erlang、usd、llvm、mlir、ecs、web",{"_index":294,"title":{},"content":{"54":{}},"tags":{}}],["erlang之父jo",{"_index":212,"title":{},"content":{"47":{}},"tags":{}}],["erlang就采用了一种不同的机制,它从语言体系上就不允许对象之间能够直接访问内部数据或方法,每个函数都分配为独立的线程,线程之间只能通过消息进行传递和联系,这样程序员就很难写出耦合比较深的代码,同时这种隔离对并行计算和分布式也带来了好处。所以jo",{"_index":249,"title":{},"content":{"47":{}},"tags":{}}],["erlang的整个架构设计,这也是为什么erlang",{"_index":261,"title":{},"content":{"47":{}},"tags":{}}],["erlang看起来是一种完美的架构,然而消息通信是一种操作起来不太便利的方式,比如为了进一步解耦它通常是传递字符串消息,字符串需要编解码,带来了性能问题;而另一方面消息编程模型通常是异步的,使得对逻辑的流程管理失去了控制力。r",{"_index":262,"title":{},"content":{"47":{}},"tags":{}}],["evolut",{"_index":82,"title":{"6":{}},"content":{},"tags":{}}],["evolv",{"_index":98,"title":{},"content":{"42":{}},"tags":{}}],["exampl",{"_index":158,"title":{},"content":{"43":{}},"tags":{}}],["exhibitsyntact",{"_index":155,"title":{},"content":{"43":{}},"tags":{}}],["famou",{"_index":224,"title":{},"content":{"47":{}},"tags":{}}],["fault",{"_index":116,"title":{},"content":{"43":{}},"tags":{}}],["flow",{"_index":125,"title":{},"content":{"43":{}},"tags":{}}],["format",{"_index":161,"title":{},"content":{"43":{}},"tags":{}}],["formatsandcommun",{"_index":150,"title":{},"content":{"43":{}},"tags":{}}],["getdialectnamespac",{"_index":203,"title":{},"content":{"45":{}},"tags":{}}],["gine",{"_index":42,"title":{},"content":{"15":{}},"tags":{}}],["graphql",{"_index":266,"title":{},"content":{"49":{}},"tags":{}}],["grapql",{"_index":265,"title":{},"content":{"49":{}},"tags":{}}],["himself",{"_index":222,"title":{},"content":{"47":{}},"tags":{}}],["html、xml、sql、usd等等,比如nvidia就基于usd构建了omniverse,由于其对usd格式的良好支持,使得其可以兼容大部分的内容制作工具,就构建起一个以omnivers",{"_index":169,"title":{},"content":{"45":{}},"tags":{}}],["https://9371398676573.huodongxing.com/event/1723877940100",{"_index":81,"title":{},"content":{"26":{}},"tags":{}}],["https://github.com/cogine/realityworld",{"_index":68,"title":{},"content":{"21":{}},"tags":{}}],["https://realityworld.com",{"_index":80,"title":{},"content":{"25":{}},"tags":{}}],["https://realityworld.com/blog/convers",{"_index":18,"title":{},"content":{"2":{}},"tags":{}}],["initi",{"_index":200,"title":{},"content":{"45":{},"47":{}},"tags":{}}],["integr",{"_index":126,"title":{},"content":{"43":{}},"tags":{}}],["interconnect",{"_index":168,"title":{},"content":{"45":{}},"tags":{}}],["interoper",{"_index":99,"title":{},"content":{"42":{},"43":{}},"tags":{}}],["iphone的备忘录app记录一些想法,这种方式比较方便,任何时候想到一点东西就可以记下来,很多时候晚上半夜都会起来记录,确实有些东西很快就是可以忘记的。后来体系比较完整的时候我逐步将这些信息整理到markdown中,并逐步积累,现在整个系统的设计和思考已经超过22万字,整整400",{"_index":290,"title":{},"content":{"54":{}},"tags":{}}],["ir",{"_index":175,"title":{},"content":{"45":{}},"tags":{}}],["ir就可以能够被轻易组合使用,你可以选择社区各种丰富的模块进行组合,来生成特定的编译流程,所以mlir又称作“生成编译器的编译器”。实际上,碎片化在工业界是一个很大的问题,每家公司在开发自己的软件的时候不会考虑那么多,觉得我只要投入研发资源把自己软件做好就行,但是真正在用户侧使用的时候,ta可能需要多个软件是可以相互协作的,甚至你的用户可能就是开发者,这个开发者可能希望不同的软件可以被更高效的集成和管理。llvm的作者chri",{"_index":206,"title":{},"content":{"45":{}},"tags":{}}],["ir更上层的抽象,所以我们对多层级ir表述又有了需求,于是在llvm的基础上又发展出mlir,它允许开发者社区能够自定义ir。然而与usd的schema非常相似的地方是,mlir为了避免碎片化,使不同开发者自定义的ir之间能够更轻易的协作,它也提供了一种类似的代码生成机制,在mlir中称为dialect",{"_index":177,"title":{},"content":{"45":{}},"tags":{}}],["isol",{"_index":252,"title":{},"content":{"47":{}},"tags":{}}],["isolation,sfi)技术,相对应操作系统或硬件的内存隔离,sfi是用于构建包含未信任组件的安全系统的一种轻量级方法,能够用于减少由于内存安全bug导致的攻击,sfi通过严格将第三方未信任软件限制在自己的沙盒内存区域,来隔离这种内存安全导致的破坏。用例包括浏览器使用sfi来扩展第三方组件,例如经典的n",{"_index":117,"title":{},"content":{"43":{}},"tags":{}}],["it'",{"_index":231,"title":{},"content":{"47":{}},"tags":{}}],["joe",{"_index":216,"title":{},"content":{"47":{}},"tags":{}}],["johnson",{"_index":215,"title":{},"content":{"47":{}},"tags":{}}],["jones,以及之前收购的一个为unr",{"_index":140,"title":{},"content":{"43":{}},"tags":{}}],["journal",{"_index":23,"title":{},"content":{"2":{}},"tags":{}}],["kay",{"_index":221,"title":{},"content":{"47":{}},"tags":{}}],["kay的描述,erlang",{"_index":251,"title":{},"content":{"47":{}},"tags":{}}],["kay认为oop的核心是关于消息,但是这样说其实我个人觉得并不太好理解到本质,因为消息更像是oop这种设计下的一种机制或结果,而不是oop本身的定义。我觉得oop的本质应该是隔离,只有做到真正的隔离,才能真正降低系统的复杂度,因为绝对的隔离使得你完全不需要也不能了解另一个物体内部的运作,你们只需要通过一些外在的属性进行交互,我们的开发也仅需要了解这些简单的外在属性。现代大部分编程语言更强调的是object和class",{"_index":248,"title":{},"content":{"47":{}},"tags":{}}],["languag",{"_index":134,"title":{},"content":{"43":{},"47":{}},"tags":{}}],["language。epic为此挖来了haskell的作者simon",{"_index":138,"title":{},"content":{"43":{}},"tags":{}}],["lattner最新的创业公司modular实际上核心就是解决这个问题,他的新编程语言mojo,除了一些语法层面的传统一点的东西,很多核心能力都是来源于底层的mlir,其中mlir跟mojo有更深度的整合,使得mojo具有很强的元编程能力。modular的最核心的逻辑其实跟当年的llvm类似,解决碎片化问题,当然modular",{"_index":207,"title":{},"content":{"45":{}},"tags":{}}],["licens",{"_index":64,"title":{"19":{}},"content":{"19":{}},"tags":{}}],["llm",{"_index":6,"title":{"1":{}},"content":{"2":{},"17":{}},"tags":{}}],["llvm/mlir",{"_index":59,"title":{},"content":{"17":{}},"tags":{}}],["llvm::stringref",{"_index":202,"title":{},"content":{"45":{}},"tags":{}}],["llvm并没有提供类似usd那种生成格式的机制,那是因为llvm只有一种ir,所以写成一种固定的格式即可,过去的编译流程基本上都比较简单、固定。但是随着现代深度学习编译器的进展,由于深度学习有着相对比较特定的数据表述,各个公司内部都有开发一些特定的编译流程,它是比一般的llvm",{"_index":176,"title":{},"content":{"45":{}},"tags":{}}],["longer",{"_index":185,"title":{},"content":{"45":{}},"tags":{}}],["lot",{"_index":239,"title":{},"content":{"47":{}},"tags":{}}],["lua,它们通常不能直接访问内存,开发者所能操作的都是封装在一定类型和对象中,现代大多数编程语言都按照类型进行寻址,也即是类型系统本身基本上可以保证程序的安全,如果你的源代码不知道一个对象的地址,你就不可能访问到它。然而实际现在大多数编程语言都提供静态变量或者全局常量之类的方式,这种方式使得内存环境中的其他代码可以获取到这些共享信息,从而对软件进行破坏。为了避免这种问题,roblox就对lua进行了改造,叫做luau,比如通过禁止全局变量,以及禁止一些能够访问全局变量的库函数等等机制来实现一种沙盒安全,这样第三方开发者开发的代码就可以放心地在roblox",{"_index":112,"title":{},"content":{"43":{}},"tags":{}}],["messag",{"_index":232,"title":{},"content":{"47":{}},"tags":{}}],["method",{"_index":235,"title":{},"content":{"47":{}},"tags":{}}],["misunderstood",{"_index":230,"title":{},"content":{"47":{}},"tags":{}}],["mit",{"_index":66,"title":{},"content":{"19":{}},"tags":{}}],["mlir::dialect",{"_index":195,"title":{},"content":{"45":{}},"tags":{}}],["mlir::dialect(\"toy",{"_index":198,"title":{},"content":{"45":{}},"tags":{}}],["mlir::typeid::getSelf-deploying | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/whitepaper/index.html b/whitepaper/index.html index f8d6320..f8b44b5 100644 --- a/whitepaper/index.html +++ b/whitepaper/index.html @@ -6,17 +6,17 @@ Creating an intelligent reality with AI - - + +
    -

    一种自我进化的、可互操作的分布式应用系统


    秦春林


    Reality World是一个以互操作性为核心目标的分布式系统和架构,它的愿景是构造一个无边的数字世界,使得任何人都可以向这个系统动态添加新的子程序,这些子程序可以和其它子程序任意交互,这个系统可以像生物系统一样自我进化,从而通过复杂系统的机制涌现出更加智能、丰富和个性化的数字世界体验。

    摘要

    近年来,随着区块链、元宇宙以及大模型的发展,数字世界的构建逻辑和使用形态都发生了很大变化。然而总体而言,目前并没有比较成熟的专门面向这些新型特征应用的底层架构,甚至还没有形成比较清晰和统一的思路,比如这种架构应该有哪些新的特征、形态以及设计目标。尝试构建这样的一套新的方法体系是非常复杂的,我认为核心的难点在于很难单从软件架构的视角去解决这一问题。比如元宇宙类应用,表面上看我们可以在现有的引擎架构上去构建,然后元宇宙背后的核心逻辑是互操作性,它要求来自不同开发者创建的应用之间能够进行交互,从而提供更动态、多元和个性化的数字化体验,然而互操作性和传统的软件开发逻辑是相悖的。再比如多智能体类应用,最近更多的工作意识到这类应用的逻辑更可能需要很多具有独立功能的小智能体进行相互协作来实现,这种多智能体相互协作的逻辑跟复杂系统的行为是类似的,然而我们当前的编程模式并没有针对这样的思想进行设计。从上面的论述可以看出,未来数字世界的软件构造方法,需要考虑更多的跨领域知识体系。本文正是通过对传统的软件架构方法(如面向对象和函数式编程模型)、编程语言及其编译过程和链接过程、区块链、复杂系统、游戏应用架构等跨领域知识进行系统分析,结合这些新型应用的特征,提出了一套系统的架构体系,它包括清晰的设计原则、目标、方法哲学,以及一个包含核心机制的源代码实现。希望此工作可以对未来数字世界基础架构的设计、研究和开发提供有益的指引。


    问题

    近几年,数字世界的形态发生着巨大的变化,一方面似乎是面对互联网红利的逐渐下降,人们需要新的科技引爆点;但另一方面,这些新的概念也在某种程度上折射出一个信息:那就是我们生活中的数字化还不够彻底,还不够丰富,还没有完全释放它全部的力量。

    例如在Web 3.0的概念中,我们希望我们的隐私和资产能够不被少数中心化的实体所控制;在元宇宙的概念中,我们希望任何人能够进行更自由地创造数字内容,并使我们的数字分身连同我们的很多能力能够在跨域多个虚拟世界中进行互操作,从而提供接近现实世界的数字生活体验;而在大模型应用中,随着大模型对人类任意指令的语义理解,固定的软件逻辑似乎无法应付这种逻辑复杂度,我们希望应用内部能够更智能地协调和调度正确的功能来解决任意的问题,而不是像过去那样提供固定结构和功能的软件。

    所有这些新的需求可能都意味着我们需要新的思维和方法来构建应用,而人们自然是希望基于现有的软件工程体系,能够进行少量的架构设计,来实现上述这些应用的开发。本节我们就来看几个基本的问题,从而理解我们现行的体系在解决这些问题方面会遇到哪些挑战,这些问题的理解也为后面的架构设计提供重要的依据。

    当然,这只是几个典型问题,本文后面的内容还会讨论更多的相关问题。

    去中心化和数据安全

    我们现代整个构建软件的方法体系,不管是底层的编程语言及其提供的一些编程模式,如面向对象或函数式编程,还是中间一些帮助构建各种应用的工具,如游戏引擎和各种开发框架,都是基于这样一个前提或假设:即程序拥有所有的权力,程序可以控制和访问一切数据,不管是内存中的数据,还是应用本地持久化存储的数据,还是应用存储到云端的数据。这样做的目的是简化编程模型,这种简化的思想体现在两个层面:

    • 操作系统为每个应用分配独立的内存空间,因此通过这种简单的内存隔离就可以保证应用的数据安全
    • 将应用内产生的用户数据的管理交给开发商,由他们负责保证数据的安全

    从上面的机制可以看出,尽管现在各国都应相应的合规法律来保护用户的隐私数据不能被非法上传或使用,但实际在操作层面,很多数据的交互涉及到功能层面,例如需要在云端与来自其它用户的数据进行计算,所以很多数据其实很难界定,因此我们的隐私数据一般只包含部分数据,而还有很多应用执行过程中产生的数据也是对用户而言很重要的。

    由于应用程序对数据的天生的权限,使得软件开发商天然的成为一个中心化的实体,掌控着所有用户的数据。尽管很多时候,这种中心化的管理带来了很多便利和效率,但是对于用户而言损失则是很大的,除了数据被非常使用的风险,还有包括在平台获取合法收益时不透明性,没有话语权,同时出于竞争考虑,一个应用的数据对同一个用户的其它应用通常是无法互操作的,而这种互操作很多时候对用户来说是很有价值的。

    programming-model

    这里面的根本问题,我觉得是这个编程模型的问题,它将程序的功能和程序执行过程中产生的数据关联在一起,彼此无法分开,如上图(a)所示。想想我们现实生活中的经济模式,一个厂商生产了某件商品,用户购买商品之后,除了简单的售后服务关系,用户和厂商之间就没有其它关系,该商品后续生产的物品都有用户自己拥有,用户可以将这些物品用于任意自己的意图。

    所以,为了更好地保护用户的权益,我们需要一种天生能够将软件的数据和功能分开的机制,本文就会提出一种机制,使得开发者使用类似现有的方法进行软件开发,但是其产生的数据确实天生由用户控制的,换句话说,即使是同一个应用产生的数据,用户都可以在后续的操作中禁止该应用对之前产生数据的访问,而且这种控制方式非常简单,如上图(b)所示。

    这种编程模式的改变,会对应用的形态造成非常深刻的影响,它也会带来更多新的技术上的可能性,使得我们可以构建更加复杂丰富的应用。这些特性也正是元宇宙和Web 3.0数字经济的构建所需要的基本特性:它使得互操作变得简单和可能。

    互操作和用户内容创作

    尽管元宇宙还没有明确的定义和形态,但是它的一些基本特性也慢慢被人们接受,比如虚拟与现实的结合,用户生成内容,去中心化和开放性,以及数字身份,社交和经济系统等等。元宇宙看起来包括了Web 3.0的思想,但是它可能并不寻求所有的数据都保存在区块链上,因为那样在理论上根本无法满足人们的使用体验需求。

    从上面这些特性中,我们可以看出它们对现行的技术体系都会带来很大的挑战。其中关于去中心化和价值交易部分可以由区块链技术来实现,从本文后面也可以看出,互操作性和开放性方面也可以由我们上一节提出的程序架构来实现,然而对于用户创造的程序内容本身,依然存在比较大的挑战。

    真实世界的经济系统的核心,是这个经济系统的大部分参与者都在参与经济生产,通过经济生产创造价值,然后才是交易。想想我们每个人都在上班,创造不同的产品,从事经济生产,然后人们用赚取的工资通过交易来换取其他人生产的有价值的东西,这个系统中的经济价值主要是由所有人一起创造出来的。

    一个繁荣的数字经济系统也不例外,然而我们看现在的数字经济,从事生产活动的人是极少的,根据Deverloper Nation网站统计,2021年世界上只有2430万开发者,预计到2030年也只有4500万开发者,这在人类人口数量中不足0.5%,如下图所示:

    img

    尽管在今年大模型在代码生成上表现出极大的潜力,甚至微软CEO Satya Nadella也提出未来可能借助大模型的能力,使得10亿人可以成为开发人员:

    “I mean, there can be a billion developers. In fact, the world needs a billion developers… So the idea that this is actually a democratizing tool to make access to new technology and access to new knowledge easier, so that the ramp-up on the learning curve is easier.”

    然而随着大模型在辅助代码编程方面的使用,例如Github Copilot,我们也逐渐意识到大模型虽然能够在一定程度上提升开发效率,但是它对专业人员的要求依然很高,换句话说,依然只有比较专业的开发人员才可以更好地使用它。这还只是考虑它在局部代码模块,例如单个函数级的代码生成,还不包括更复杂的程序结构和上下文逻辑管理。实际上如今的大模型在理论上主要以预测前后相关的线性序列来实现内容生成,这种理论在针对程序结构这种非线性、组合式的复杂任务上似乎存在一定的理论限制,如 Faith and Fate:Limits of Transformers on Compositionality 这篇研究工作指出。

    除了编程语言本身,元宇宙类的应用还要求更多的动态性,以及更重要的是在一个宿主程序中安全运行第三方子程序的能力,这会带来非常大的安全性挑战,尽管我们现在有一些如Web Assembly等包含的沙盒技术可以在理论上实现这些机制,但是在根据层面还没有比较简易可靠的框架可以使用,因为这种框架还需要协调应用程序本身的构造和运行机制。

    多智能体相互协作机制

    多智能体(Multi-Agents)是AI领域现在比较热门的一个方向。大模型对于自然语言的理解和对话能力,使得一些借助大模型内部的知识来完成推理和规划的Agent应用广受关注,例如AutoGPT、Generative Agents、BabyAGI等等。然而人们实际在开发中,也由于逐渐受限于大模型的能力,使得单纯简单依靠大模型来推理的Agent会比较难以落地,实际的Agent开发往往还是要涉及大量的逻辑开发,当然其中的逻辑交互主要涉及的是自然语言,也正是受限于大模型在自然语言理解方面的鲁棒性,实际的开发都是需要设置大量精巧的提示词工程才能达到比较好的性能。

    不管是受限于单一Agent在记忆管理方面的不可靠性,还是由于越来越复杂的交互逻辑使得Agent开发和管理的复杂度逐渐增加,越来越多的工作将焦点转移到了多智能体系统上,即通过在一个共享的环境中让多个具有不同决策能力的Agent共同协作来完成一些指定的事情。尽管我们可以使用传统的方法来开发这类多智能体系统,例如基于LangChain,然而实际上多智能体协作机制有一些新的技术特征。

    多智能体主要的技术特征是动态性,由于Agent的数量极多,成百甚至上千,那么这类系统要具备动态的能力,能够动态添加或移除一些Agent,同时具有较好的容错性,其中的某些Agent出现运行错误时,系统可能缺乏某些方面的能力,但是不影响其它能力的正常运行,在这些出现运行错误的Agent恢复运行后整个系统能够动态容纳该能力。

    这看起来像是Actor模型尝试解决的问题,Erlang 是Actor模型比较有知名度的代表,如果我们把一个Agent比作一个线程或者Actor,那么Actor模型的工作机制似乎就可以实现多智能体交互的需求。开源项目 Chidori 也正是基于该理念的一个多智能体开源项目。在这类架构中,单个Agent会订阅某类信息,然后系统会维护这类信息的分发,使得一旦有Agent发出了某类信息,订阅该信息的Agent就会得到响应,信息本身充当了交互的接口和机制。

    相对于多智能体的需求,这类架构还存在着两点不足:

    • 缺乏数据互操作的机制或Agent之间通信的协议,每个Agent之间主要是通过字符串进行通信,这样保证Agent和Agent之间的功能解耦。然而这样的隐式协议通常不便于Agent之间的协作,特别是来自不同的开发者之间的Agent,它们在通信格式上没有显式的保障机制。此外,Agent相较于一个Actor算是一个比较大的线程,内部本身还包括很复杂的逻辑,也就意味着Agent内部可能还包括着大量需要获取用户数据的逻辑,这其中有些数据是来自其它程序的定义,这也需要互操作性的支持。
    • 缺乏开发这类应用系统的方法论。多智能体协作类似于一种复杂系统,复杂系统的一个典型特征是它的行为或功能是不可预期的,它们是靠很多逻辑简单的子系统相互作用涌现出现的,这就意味着我们不光是需要开发这种系统的工具,还需要一套系统的方法论来帮助我们测试或预测系统的功能行为,使之符合用户的预期,否则复杂系统在大部分情况下可能会表现出未知的行为。

    第一个问题也是传统简单的Actor模型在复杂项目中会遇到的问题,传统的Actor模型一般有两个假设:一是Actor足够小,甚至几乎就是一个函数;二是Actor函数功能本身类似纯函数,这样它内部就没有状态,整个问题就简化了很多。这种模型针对那种只是业务量多、但是业务之间相对独立的业务场景是比较合适的,例如Erlang本身针对的电信业务场景,以及Web服务类应用。但是针对更一般的业务场景,业务之间都穿插着大量的数据交互,这种交互没有比较简单的规则,所以我们传统的程序开发,最复杂的部分,也许就是这种数据管理的复杂性:每个业务函数本身的逻辑可能是比较清晰的,但是为了执行这个函数以及为了知道什么时候需要执行这个函数,我们需要从整个程序到处去寻找条件,例如来自各个地方的上下文数据,和各个逻辑的前置条件,这通常没有一个简单的解决方案,这可能也是编程学习门槛中相对编程语言语法本身更复杂的部分。

    在后面的介绍中,我们将通过类型系统以及对应的互操作机制,来解决这个问题。同时也会通过更深刻地洞察和借鉴复杂系统的一些思路来解决第二个问题。


    相关知识

    本节我们会简单介绍一些零碎的已有相关知识,当然这里仅介绍它们的一些基本概念和思路,其目的是为了理解其中的思想,从而更好地理解我们的架构怎样去采用这些思想,又做出了什么调整,为什么要做出这样的调整,以及做出了这些调整之后带来了什么新的变化。

    互操作性

    互操作性的 定义 如下:

    Interoperability is a characteristic of a product or system to work with other products or systems.

    由定义可以看出,互操作的本意在程序的环境下就是函数调用的能力,但互操作性大多是指两个相对比较隔离或者不同语言的系统之间的函数调用,内部的函数或编译到程序内部的第三方函数调用则不需要强调它的互操作性意义。例如宿主程序与动态脚本程序之间的互操作,例如C++与C或者Rust与C之间的互操作,甚至一个虚拟机支持的多个语言编程的程序之间的调用或通信。在这类情况下,被调函数的类型是无法被编码到程序中的,这通常需要程序内部实现一个对应的内部类型,然后相互之间通过某种格式的字符串来传递信息。所以互操作通常是和标准相关的:

    If two or more systems use common data formats and communication protocolsand are capable of communicating with each other, they exhibitsyntactic interoperability. XML and SQL are examples of common data formats and protocols.

    传统的软件世界通过一些标准来建立互操作的基础,例如HTML、XML、SQL、USD等等,比如Nvidia就基于USD构建了Omniverse,由于其对USD格式的良好支持,使得其可以兼容大部分的内容制作工具,就构建起一个以Omniverse为中心的内容和应用生态。

    Tim在2019年的演讲《Foundational principles & technologies for the metaverse》中大量提到了标准,为了实现多个独立应用程序之间的协作,那么必然要建立大量的标准,有了这些标准,互操作就变得简单,例如《堡垒之夜》现在的Creative模式实际上已经有了很多标准,比如一个物体怎么摆放在环境中,并可以被其他玩家交互,这都是可以由Device来定义的,这实际上就是一种形式的标准或者接口,只要遵循这些标准,则可以很轻易的与其他的环境进行交互。

    然而这种基于文本标准的方式仍然有一些缺陷,例如其数量是非常少的,通常必须等一个组织对一个标准有一定影响力之后才能形成实时上的标准,被更多的三方兼容和支持。想想现实世界,各个实体之间的交互和联系几乎是无所不在的,例如一个人在路边新开了一家饭店,路过的人随时可以进去吃饭,不会说还要先接一下饭店定义的一个接口。而程序是必须有严格的逻辑的,比如保证地址、参数和接口的一致性才能进行互操作,这给软件世界的互操作带来了一定的困难。我们应用程序开发的流程通常都是先定义内部数据结构,实现软件功能之后,再以一定的形式封装一些接口,并以某种方式公布出来,由感兴趣的三方去集成。然而实际上有大量的软件开发者是没有精力或者能力去提供这些接口的。想象一个场景:开发者A开发了某个应用给用户新增了一种新的健康类的数据信息,这个数据本来是属于用户的,这个时候用户想要用这个数据来实现另一个事情,TA想自己或者说让其他开发者B帮助开发一个应用来使用这些数据,这种情况下通常是做不到的,因为开发者A可能并没有太多动力去提供这个接口,因为TA可能要耗费很大的精力,除非平台提供一些这种非常便利的机制使得TA可以很轻易地暴露出来。

    其实更深刻一点理解,互操作问题其实是一个软件碎片化的问题。传统的软件开发都是先开发内部数据结构和数据存储,然后在必要的时候再把API包装使用某种形式的标准包装成外部接口,这样就造成碎片化,因为即使是针对同样的一类逻辑和数据,不同的应用程序或服务往往会定义不同的数据结构或处理逻辑,这就形成API的碎片化,使得相互之间非常难以协作。试想你可以在两个应用之间协商修改各自的API接口及定义,这是一对一的关系,或者说像支付宝这种平台性质的接口也是容易定义,这是一对多的关系,一对多的关系发展显然是缓慢的,必须让这个“一”有机会且需要时间发展壮大。如果我们希望一种更加高效,更加丰富的协作机制,那么显然我们需要多对多机制,这里面就要求我们对软件开发流程做一些调整。

    img

    要想实现这种机制,其实现有的很多技术可以给予很多启示。我们先看USD格式,尽管从表面看USD跟其他的标准类似只是一种数据格式或协议,但实际上它远远不止如此,它还是一种非常易于扩展的格式,它提供了一种plugin的机制使得开发者可以对格式做很多定制和增强功能,并且可以通过一个Schema定义来生成自己定义格式的解析代码,然后通过Plugin来调用自定义的格式解析和代码。这就好比它帮助你编写了文本格式的编解码,尽管看起来不过如此,看起来只是一种模板化的代码生成机制,但是当这种解析代码能够与逻辑高度融为一体的时候,事情的本质发生了一些变化,试想使用USD你的流程是这样:首先针对一种特定数据自定义一个Schema,然后调用USD的API帮助我们生成相关的解析代码,如果这段解析代码能够以某种机制被其他开发者拿到,那么TA的程序就能够轻松解析我们的API。当然如果你修改了Schema,仍然需要对方进行同步,但是这种流程本质上改变了我们的思路:过去我们是先定义内部做法,再与外界沟通,这就容易带来一些复杂度和碎片化;现在是我们先想着自己就是基于一种标准在开发,然后需要的时候就能够很方便地暴露出去,这里USD充当了一种协调的机制并为这种协调的机制提供了一些辅助功能。苹果的usdz格式以及英伟达的MDL都是基于USD的这种扩展能力来实现自定义的资源格式。

    API碎片化的第二个例子是LLVM,本质上LLVM在编译器领域的创新主要做的是模块化,早期的编译器开发,各个前端都要分别集成各个后端,编译器开发的复杂度非常高,这里面其实就是多对多的问题,看似很简单,每个前端与每个后端分别调一调,但随之代码的管理和维护成本是很高的,有时候某些内部设计不一致就会导致大量的重复,这就是碎片化问题。由内而外的设计总是不可避免会导致碎片化,碎片化带来软件复杂度,管理和研发成本。当LLVM提供了一个统一的低层IR表述之后,编译器的复杂度大大降低,比如现在能够很轻易地开发一些DSL语言,因为你完全不需要操心后端,只需要把你的代码生成LLVM IR即可。

    当然LLVM并没有提供类似USD那种生成格式的机制,那是因为LLVM只有一种IR,所以写成一种固定的格式即可,过去的编译流程基本上都比较简单、固定。但是随着现代深度学习编译器的进展,由于深度学习有着相对比较特定的数据表述,各个公司内部都有开发一些特定的编译流程,它是比一般的LLVM IR更上层的抽象,所以我们对多层级IR表述又有了需求,于是在LLVM的基础上又发展出MLIR,它允许开发者社区能够自定义IR。然而与USD的Schema非常相似的地方是,MLIR为了避免碎片化,使不同开发者自定义的IR之间能够更轻易的协作,它也提供了一种类似的代码生成机制,在MLIR中称为Dialect ,例如如下的Dialect定义:

    def Toy_Dialect : Dialect {
    let summary = "Toy IR Dialect"; let description = [{
    This is a much longer description of the
    Toy dialect.
    ...
    }];
    // The namespace of our dialect.
    let name = "toy";
    // The C++ namespace that the dialect class // definition resides in.
    let cppNamespace = "toy";
    }

    生成的C++代码如下:

    class ToyDialect : public mlir::Dialect {
    public:
    ToyDialect(mlir::MLIRContext *context)
    : mlir::Dialect("toy", context,
    mlir::TypeID::get<ToyDialect>()) {
    initialize();
    }
    static llvm::StringRef getDialectNamespace() {
    return "toy";
    }
    void initialize()

    这样多种IR就可以能够被轻易组合使用,你可以选择社区各种丰富的模块进行组合,来生成特定的编译流程,所以MLIR又称作“生成编译器的编译器”。实际上,碎片化在工业界是一个很大的问题,每家公司在开发自己的软件的时候不会考虑那么多,觉得我只要投入研发资源把自己软件做好就行,但是真正在用户侧使用的时候,TA可能需要多个软件是可以相互协作的,甚至你的用户可能就是开发者,这个开发者可能希望不同的软件可以被更高效的集成和管理。LLVM的作者Chris Lattner最新的创业公司Modular实际上核心就是解决这个问题,他的新编程语言Mojo,除了一些语法层面的传统一点的东西,很多核心能力都是来源于底层的MLIR,其中MLIR跟Mojo有更深度的整合,使得Mojo具有很强的元编程能力。Modular的最核心的逻辑其实跟当年的LLVM类似,解决碎片化问题,当然Modular有很多现在软件的运营思路可能会形成更好的平台和生态,因此它是一家商业公司,不仅仅是一个开源项目。

    上述的软件架构都为解决应用之间互操作及其碎片化提供了很好的思想,然而为了更好的软件协作,这些机制还不够。上述的软件都是比较偏底层的基础软件,而不是面向上层用户侧的,因此不需要考虑很多其他问题,比如性能和格式的进化。当进入到一个更上层的消费端应用,首先上述的方式在不同的模块之间交换的都是文本数据,如果你让一个实时的游戏内部的每一次互操作都需要编解码文本,这显然是会影响性能的;此外,应用层的需求更容易变化,即使平台提供了一种生成统一格式解析的代码及其发现的机制,但是怎么应对这些格式的更频繁地变化呢?为此,RealityIS在这些方面做出了一些创新尝试。

    面向对象编程模型

    我们现代的项目开发使用的编程语言,或多或少大部分是和面向对象相关的,尽管看起来面向对象的本质是让我们更好地封装各自比较独立的逻辑,使大规模软件组织起来更加轻松:你不需要关心其他对象的内部逻辑就可以轻易地和它们一起组合起来协作。

    然而实际上并不是这样,大部分面向对象编程语言会让人(特别是初学者)误以为编程就应该这样,它是在模拟真实世界的运行机制。那为什么这么完美的模型却没有产生这么完美的体验呢?直到最近一年多对面向对象的更多理解(特别是Erlang)才体会到其中一些问题。

    Erlang之父Joe Armstrong在一次采访中(Ralph Johnson, Joe Armstrong on the State of OOP )讲到:

    Alan Kay himself wrote this famous thing and said "The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.

    Alan Kay认为OOP的核心是关于消息,但是这样说其实我个人觉得并不太好理解到本质,因为消息更像是OOP这种设计下的一种机制或结果,而不是OOP本身的定义。我觉得OOP的本质应该是隔离,只有做到真正的隔离,才能真正降低系统的复杂度,因为绝对的隔离使得你完全不需要也不能了解另一个物体内部的运作,你们只需要通过一些外在的属性进行交互,我们的开发也仅需要了解这些简单的外在属性。现代大部分编程语言更强调的是object和class,认为对象的核心是关于封装,这本身也没有错,封装的目的也一定是为了让别人不需要关注你的内部细节,但问题在于,很多面向对象编程语言忽略了隔离的意义,为了方便程序员更灵活直接地获取数据和方法,提供一些机制,使得一个对象可以很轻易地访问到另一个对象内部的、跟其内部运作相关的数据或方法,这些原本是需要绝对隔离的。这种设计就使得隔离失去了意义,尽管我们可以指定规范要求自己以对象为单位进行绝对隔离,但是大部分情况下,我们很难做到一个很好的设计,最后的结果是程序内部对象之间相互耦合太多,不管是管理、维护、理解起来都是花费很大的精力。

    Erlang就采用了一种不同的机制,它从语言体系上就不允许对象之间能够直接访问内部数据或方法,每个函数都分配为独立的线程,线程之间只能通过消息进行传递和联系,这样程序员就很难写出耦合比较深的代码,同时这种隔离对并行计算和分布式也带来了好处。所以Joe Armstrong说,根据Alan Kay的描述,Erlang可能是唯一真正面向对象的编程语言:

    Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about

    再回过来看面向对象的核心为什么是隔离,是因为真正的隔离机制才能保证避免耦合,才能降低软件复杂度,因为一个大型的软件系统有无数的对象,如果对象之间存在耦合的可能,那维护起来将是非常不容易的。而当你只提供了强隔离的机制,不让程序员能够很方便地获取另一个对象的引用,剩下的结果就是对象之间只能通过消息通信了,这就是Erlang的整个架构设计,这也是为什么Erlang是真正的面向对象编程语言。也因此,消息更像是隔离机制带来的结果。

    就像现实世界一样,微观的每个原子内部都有自己特定的结构,原子之间相互作用形成分子,进一步形成宏观物体,宏观物体通过内部分子结构形成特定的外在属性,但是其他物体与之交互从来不需要了解其中的内部结构,这就是面向对象的美好世界,然而传统的面向对象编程模式则为了便利为一个对象访问另一个对象的内部结构开了一个口子,这个口子不仅破坏了面向对象的编程思想和精髓,也失去了其带来的好处。

    尽管Erlang看起来是一种完美的架构,然而消息通信是一种操作起来不太便利的方式,比如为了进一步解耦它通常是传递字符串消息,字符串需要编解码,带来了性能问题;而另一方面消息编程模型通常是异步的,使得对逻辑的流程管理失去了控制力。RealityIS在这两个方面都做了一些创新尝试,使得开发者既可以像传统的局部变量一样去方面其它对象的数据,又可以像Erlang一样拥有绝对的隔离,这种隔离带来编程复杂度上的减少,降低编程门槛。

    虚拟机

    基于组合与ECS

    例如游戏就是一个这样的例子,尽管仍然有基于传统的面向对象编程模型来开发的游戏程序,但是大部分的游戏框架或架构或多或少都是基于组件的,因为游戏的逻辑非常复杂,没有比较线性的流程,类似于复杂系统,系统跟系统之间存在非常复杂无序的相关性。游戏中的组件某种程度上类似一个Actor,它们都尝试把子系统的逻辑都尽量封装在内部,不同的是,由于组件之间的交互复杂度非常高,例如一个组件的输入消息会来自多个其它组件,而不是像简单的Actor模型只是一对一的通信,因此游戏程序的执行逻辑是按组件进行排序,每个组件有个语义上的顺序,这样的机制保证只要顺序安排得当,就不用去处理复杂的依赖顺序问题,而且当每个组件被执行时,它需要的数据总是能够得到满足。

    隔离与沙盒技术

    现在整个编程语言以及编译的体系架构,都是基于一个假设,即整个应用程序的所有源代码都被编译为一个单一的应用程序,这也即是编译和构造一个应用程序的主体可以认为是只有一个主体,即开发者,不管你背后是一个大团队或者大公司,最终编译发布应用程序的是一个特定的个人、部门或者组织。这样说有什么意思,这就意味着,整个应用程序的安全性由这个单独的主体负责,你需要解决软件的bug,检查所有可能的安全漏洞等等,保证软件最终运行是可靠的。而对于编程语言来讲,它不对软件的安全做任何假设:理论上,只要你拥有源代码,你就可以几乎访问整个应用程序内存中的数据,所以你必须确保你程序中的所有逻辑行为是正常的。如果所有代码都是由你自己公司的程序员编写的,这当然是天经地义的事情,如果你使用了第三方的开源代码或者闭源的二进制库,你必须由你自己去确保这些第三方的代码不会破坏你的软件运行。

    这样天生就将每一个软件当作一个封闭、独立的环境,操作系统的内存分配和管理系统保证你的内存不会被其他进程的程序非法访问,这样软件就可以安全地运行,当然即使如此,你的程序当中涉及对外部数据读取的部分仍然可能导致内存安全问题。然而这种隔离是与我们现实世界的运行方式完全相反的,现实世界整个体系是基于协作和分工来实现文明发展的,计算机本来具有更强大的逻辑体系,然而实际上我们并没有在软件世界建立起比较简单地分工与协作机制。

    现代软件变得越来越复杂,这种复杂的体系结构本来就希望能够借助更多的协作与分工的精神和思想来实现更大的复杂度和功能,这种协作的第一个要求是让未受信任的第三方代码可以在你的内存环境中执行代码。这也是《堡垒之夜》面临的第一个问题。按照现代编程语言的一些思路,一个源代码能够在一个内存环境中被执行,那表示其对应的主体知道和负责其中的安全问题,编程语言本身没有太多机制来解决这个问题。这又分为两种情况:静态语言和动态解释性脚本语言。对于动态而言而言,如lua,它们通常不能直接访问内存,开发者所能操作的都是封装在一定类型和对象中,现代大多数编程语言都按照类型进行寻址,也即是类型系统本身基本上可以保证程序的安全,如果你的源代码不知道一个对象的地址,你就不可能访问到它。然而实际现在大多数编程语言都提供静态变量或者全局常量之类的方式,这种方式使得内存环境中的其他代码可以获取到这些共享信息,从而对软件进行破坏。为了避免这种问题,Roblox就对Lua进行了改造,叫做Luau,比如通过禁止全局变量,以及禁止一些能够访问全局变量的库函数等等机制来实现一种沙盒安全,这样第三方开发者开发的代码就可以放心地在Roblox app中运行。

    如果第三方未受信任代码是二进制的机器码,这个问题就更严重了,因为机器码是可以访问内存地址和寄存器的,那可以造成的破坏是无法想象的。然而人们仍然希望能够实现类似分工协作的方式,这方面最具有代表性的例子就是浏览器,浏览器是一个非常复杂的软件,现代浏览器往往都可以支持第三方二进制的插件,来提供一些更高性能的增强功能,例如浏览器的字体渲染往往都是使用第三方字体渲染库。为了解决这种由于未受信任二进制代码导致的安全问题,人们提出一些软件隔离(software-based fault isolation,SFI)技术,相对应操作系统或硬件的内存隔离,SFI是用于构建包含未信任组件的安全系统的一种轻量级方法,能够用于减少由于内存安全bug导致的攻击,SFI通过严格将第三方未信任软件限制在自己的沙盒内存区域,来隔离这种内存安全导致的破坏。用例包括浏览器使用SFI来扩展第三方组件,例如经典的Native Client SFI syetem(NaCI)使用SFI来扩展第三方c库,使得浏览器可以使用如第三方的字体,音频,XML解析等库;在边缘计算节点与第三方未信任客户环境进行联合计算等等。

    NaCI存在较大的运行时性能,因为它的机制一般对第三方代码不做太多要求,假设其按照一般的方法进行开发,然后仅仅在调用这些方法的时候为其分配独立的内存区域进行隔离,它基本上是用软件模拟操作系统的内存隔离机制,比如每次切换都需要保存大量的状态和寄存器地址等等。为了减少这种隔离导致的代价,Web Assembly就使用另一个思路,由于Web Assembly程序都会编译为Wasm文件,由Wasm虚拟机解释执行,而不是底层的二进制代码,所以Web Assembly有机会对程序进行一定的分析,通过基于Control-Flow Integrity (CFI)技术,Web Assembly的编译器可以检查出程序中哪些代码可能会对这种沙盒环境造成破坏,从而禁止这样的代码生成合法的Wasm程序,因此也就实现了沙盒安全。但是由于这种检查是在编译期,并对第三方程序的构造过程有一定的要求,因此在实际执行的时候就可以避免在这种隔离安全的保护机制上花费过多的开销。

    Web Assembly之所以是一种未来非常有潜力的技术,不仅仅得益于对Web的友好,接近机器码的字节码,多语言支持等等,这种沙盒技术也是很大的一个技术点。在Web Assembly之前还没有一种技术可以很好地普及和运用沙盒技术,例如JVM上有一些方案,但大多有些性能问题,或者不能完全保证安全,或者方案比较重。Web Assembly这种优秀的沙盒技术使得沙盒模式在以后的软件构造中可能被大规模使用,也就会实现更多的软件协作与分工,事实上比如现在对未受信任多应用环境要求比较高的环境如区块链就大多转型Web Assembly,而如Docker和Severless这种对虚拟环境要求比较高的环境也在逐步转向Web Assembly。

    尽管Web Assembly的隔离技术非常优异,但是它并没有改变程序本身的构造方式,即如果你的代码本身就不含破坏别人的恶意代码,那么其实你的开发过程与过去的方式并没有什么区别。而RealityIS希望简化编程的开发,如本文后面编程方面的内容,我们还希望对编程的体系做出一些调整。因此我们会把各种问题放到一起考虑,而不是单纯一个一个地解决问题。例如软件的可组合性、模块化、编程复杂度的降低、互操作等等。

    如后面的内容所知,我们还对应用程序的构造方法进行了调整,而不是仅仅把程序当作一个黑盒子来进行统一的隔离,例如传统的隔离技术大都是基于比较底层的编译惯例,如方法调用(Calling Convention)来设计隔离机制,这样使得不需要对用户的开发过程造成太大的影响。在Reality Create中,我们的每个组件的很多行为和构造过程是由运行时自动推导进行的,因此我们本身已经对用户的开发过程有一定的影响,这同时也意味着我们对程序的结构有着更多信息,因此我们可以在更上层的地方实现一些隔离机制,同时由于上层的机构包含对程序的更多的信息,因此会带来一些新的灵活性和能力。

    复杂系统

    从两个方面理解,内在结构和外在特征,内在结构通常在工业设计方面有很多实践。外在特征则更偏理论。

    A complex system is a system composed of many components which may interact with each other. Examples of complex systems are Earth's global climate, organisms, the human brain, infrastructure such as power grid, transportation or communication systems, complex software and electronic systems, social and economic organizations (like cities), an ecosystem, a living cell, and ultimately the entire universe.

    Complex systems are systems whose behavior is intrinsically difficult to model due to the dependencies, competitions, relationships, or other types of interactions between their parts or between a given system and its environment. Systems that are "complex" have distinct properties that arise from these relationships, such as nonlinearity, emergence, spontaneous order, adaptation, and feedback loops, among others. Because such systems appear in a wide variety of fields, the commonalities among them have become the topic of their independent area of research. In many cases, it is useful to represent such a system as a network where the nodes represent the components and links to their interactions.


    RealityIS架构哲学

    RealityIS的整个架构设计经历了整整一年多的时间,可以参看另一篇文档记录了整个思考过程。整个过程其实是一个非常复杂的思考过程,一开始只有部分残缺的思想,不断在细节和总体之间不断来回切换,慢慢构筑起更完整的体系(我会用一篇博文介绍整个思考的过程)。所以当回来再来看整个架构时,我们必须要形成清晰而简洁的方法论甚至哲学思想。这不仅有助于后来者更好地理解它,而不需要陷入很多细节,同时这也尤其是这样一个面向未来的技术架构具有学习和研究价值的地方。

    定义:

    RealityIS是一个以互操作性为核心目标的分布式系统和架构,它的愿景是构造一个无边的数字世界,使得任何人都可以向这个系统动态添加新的子程序,这些子程序可以和其它子程序任意交互,这个系统可以像生物系统一样自我进化,从而通过复杂系统的机制涌现出更加智能、丰富和个性化的数字世界体验

    RealityIS通过以下两种理论依据来构筑上述的目标,也即是它的架构哲学:

    • 它是区块链去中心化思想的一般化,它将区块链的数字类型延升为通用数据类型,然后通过动态类型系统使得所有虚拟机和程序都可以访问用户任意数据,最后通过数据与功能分离使得这种访问能够被用户授权精确控制
    • 它以复杂系统为理论基础来构筑整个计算框架,用户开发的程序以小粒度的组件为单位,组件之间的交互不需要全局的中央控制,而是通过类型系统实现局部的自动交互,系统内的组件可以任意动态组合

    在上述的哲学思想中,去中心化的思想定义了外在结构,而复杂系统的理论定义了内在结构,我们将在后面的内容中详细分析。

    从前面的定义可以看出RealityIS的两个主要目标是:

    • 互操作性
    • 自我进化

    这两个目标的目标则是为了进一步实现更彻底更丰富的数字化,使之真正成为一种人人参与的数字经济。这两个目标也是RealityIS能够区分过去的各种软件或分布式系统,完全的互操作性是数字经济的基础,有了这个基础,更多的数字内容才可以更好地协作,从而产生经济行为。而自我进化则意味着,当我们由现在这种固定功能的软件走向更加动态、丰富的数字世界,这种复杂的交互必须要涌现出新的更高的数字智能,这种智能要超过传统单一软件的功能。

    为了实现这两个目标,我们以区块链和复杂系统两个比较完善的理念作为理论基础。尽管区块链并不是专为互操作性而设计的,但从下一节的分析可以看出,我们可以从区块链的一些思想中延升出一种一般化的互操作思想,同时又兼具去中心的能力。而复杂系统的原理和方法论则为这种动态的大规模程序的组织和功能涌现提供了比较稳固的理论指导。

    从上面的定义也可以看出另一个重要的方面,即尽管RealityIS涉及软件构造方法,但我们并没有涉及较低层的编译和编程语言层面。当然后面会分析,ReallityIS也绝不单纯是一个软件架构,它也涉及到对编译过程和编程语言一些思想的重新解读,以及将来也涉及对编译器和编程语言的某些改造,但是这种改造主要是结构性的,或者说不会对传统编程语言和编译器的核心部分进行修改。

    建立互操作数据抽象

    区块链是一个分布式系统,尽管这种系统出现的目标并不是为了解决一般软件开发中的互操作性问题,它也不是为解决传统分布式计算问题而设计的分布式软件架构。但通过洞察它的一些特性,结合互操作性的一些技术需求和特征,我们则可以得到不同的启示。这种启示可以说是RealityIS最核心的部分。

    本节我们将从不同的角度来解读区块链系统,以及怎样从这种解读中发现建立互操作系统的方案。

    我们可以认为区块链系统有三个技术特征,或者说可以从这三个方面来解读区块链系统:

    • 类型
    • 数据
    • 安全

    需要注意的是,这三个层面关注的并不是区块链核心的共识机制的部分,而是它作为一个软件架构的层面。同时这里尽管我们也会涉及去中心化的思想,但是这也并不是指区块链中使用分布式账本存储的去中心化方式,我们考虑的去中心化是指通过一种将软件功能和用户数据隔离的应用程序构建机制,使得应用开发商不再具有掌控用户数据的能力,从而也是一种去中心化的概念。但是这种去中心化依然需要借助某种方式的中心化计算,不过在这种架构下用户对数据具有更透明的控制。

    区块链的软件构造视角

    如果我们从区块链分布式系统中的任一节点去看,这个节点可以看作一个简单的虚拟机,这个虚拟机每次计算执行一个非常简单的程序,即对某两个账户执行价值交易。我们这里不考虑这个价值交易的算法本身,仅把它当作一个程序,然后思考为了支持这个程序的开发和运行,区块链上的虚拟机应该具备什么功能?

    我们知道传统的虚拟机的核心机制实际上就是一个具有某种语法的编程语言的解释器,然后使用这种语法编程的程序源代码作为输入,虚拟机对源代码进行解释并执行,这种编程语言的语法通常支持现代比较高级的一些语法,例如Lua,Python,Java等编程语言都支持这种虚拟机的执行方式。

    img

    尽管不是很容易理解,但我们可以把一个程序的结构看成是这样的抽象:即程序由数据、类型和代码组成,如上图(a)所示,当然这里的数据主要是作为程序输入的数据,而不是指代码内部也可以产生的很多的内部数据结构及内存存储,那么这里的类型自然也是指这种外部输入的数据结构的类型。一般的程序,其数据和类型都是定义和存储在程序内部的,用户只是在使用其中的功能。

    从这个角度看,我们可以把区块链的账本看成数据,然后账本对应的类型是float类型,对应的代码则是区块链虚拟机执行的共识算法。

    但比较隐晦的地方在于,float是一个非常简单的数据类型,并且区块链只处理这种简单的外部输入数据,所以它看起来并不包含一个类型定义。如果我们把这个复杂度延升一下,即如果区块链能处理任意类型的数据,那么就必须要定义类型结构,然后虚拟机以某种方式按照类型定义进行解析。这其实就是传统的虚拟机机制,即输入虚拟机的源代码中包含对于处理的任何数据的类型定义。比如以太坊的智能合约就是比区块链更复杂的脚本语言,它就可以包含更复杂的类型定义。

    但是我们这里却不想这么做,因为我们看到了区块链的另一个不同寻常的特性,也就是它的去中心化特性的来源,即它的数据(即账本)存储在一个独立于程序(虚拟机上的共识算法程序)的地方,即数据和程序是解耦的。所以这驱使我们想要进一步弄清楚它的独特的程序组织背后的思想。

    如果只是想要单纯地把数据与程序代码分离,直接把数据存储到外部并不是一个好的方法,这里面有几个问题:

    • 程序内部仍然会定义解析的数据类型,所以不利于虚拟机扩展处理任意动态的类型
    • 存储在外部的数据只是一个单纯的数据,它们并没有多少语义的信息,所以用户既不知道怎么管理它们,也无法理解它们。想想理论上我们任何应用的用户都可以打开存储在应用内部文件夹中Sqlite的数据库,但是哪些数据可能对用户并无太大意义。

    用户对数据最通常的管理是授权,保证只有经过用户许可的软件才可以访问这些数据。所以仔细思考区块链系统背后的思想:即区块链可以做到对数据的授权管理,尽管区块链的数据也是存储在独立于程序的地方,但是它可以做到对数据的权限管理,尽管这需要共识机制协作来保证,但从程序的机制来看,我们可以理解为这种使对数据的权限管理变得可能的原因在于:

    用户了解数据的意义,然后在交易的时候用户将这个语义传达给虚拟机,虚拟机按照用户指定的意义及权限机制对数据进行处理。这个意义某种程度上就是类型,用户对一个“类型+数据”进行授权,类型在这里升华为某种语义信息或者意义,因为我们在日常生活中所作的事情,其实大多数都是对某类事情进行处理,而这个类型在我们生活中就是包含特定意义的事物,这些事物我们都可以通过名字或类型来区分,类型充当了代表一件事物的语义。

    所以当用户在看待自己链上的一个账本数据时,这个数据不光只是一个数值,同时也代表了账本这个类型,只不过由于区块链的虚拟机仅处理这一种数据类型,所以这个类型被隐式表述了,即使没有任何地方定义这个类型,区块链虚拟机也总是能够正确解析这个数据。并且当用户通过给出密钥进行授权计算的时候,TA表达的就是对账本这个类型的数据进行授权。

    所以要想把区块链上述这种程序视角的意义扩展到一般程序,即让任何程序的数据都可以独立于程序的代码而存储,并且用户可以对数据进行授权管理,那么我们可以从一下三个方面对区块链进行扩展:

    • 将单一的float类型扩展为一套动态类型系统
    • 将数据按类型存储在独立于程序代码的地方
    • 虚拟机在运行时配合用户的权限设置对数据进行访问

    一下我们分别深入分析这三个方面的扩展涉及到的一些思考和逻辑。

    类型

    程序要对数据进行处理,当然必须要知道正确的数据类型,即知道数据内部的每个字节表示什么含义。通常外部传入一个json字符串,然后程序内部首先会定义一个对应的数据结构类型,然后有一个解析函数对json字符串进行解析并将之转化为内部数据结构的一个对象。如下图(a)所示:

    image-20230901145523283

    但如前面的分析所知,这里会带来两个问题:

    • 用户数据管理和授权的问题
    • 程序根据用户授权进行安全控制

    由于解析器在程序内部,所以数据对于用户而言仅仅是一些字节,如果有非常多的数据,用户根本不知道哪些数据是对应什么意义,即使用户可以自己去根据文本内容自行判断,甚至给这些文本数据加上一些标签或名字,但是这不仅会增强用户对数据的管理复杂度,而且这种分类行为或结果与实际的数据意义可能还是不一致的。因此,用户无法针对数据进行授权管理

    对于第二个问题,由于解析器处于程序内部,那么就无法保证程序会遵照用户的授权结果进行处理。首先同样因为上面无法对数据进行授权的原因,也不存在一个外部程序可以确保数据会按照用户的旨意被某个程序处理,因为谁都不知道这个数据的意义的什么,这种情况下只有将数据传递到程序内部,由程序内部的解析器去做类型解析和分析才知道数据的意义,也就是说只有程序才知道数据的意义,但是这个时候数据已经被传递给程序了。因此,系统也无法根据用户的授权旨意将数据分配给合法的程序

    上述的分析要求,数据的形式及其定义应该在一起被管理,也就类型的定义应该处于程序之外,这样不仅用户能够知道数据的意义,从而能够正确地做出权限控制,而且系统可以借助类型系统以及用户的授权组织数据被传入未经授权的程序。即如上图(b)中所示。这就要求类型系统是独立于程序的。

    这是一种非常有启发意义的视角,我们单纯去看区块链系统,很难得出这样的思维,但是其实仔细分析也是合理的。我们可以认为区块链其实包含了一个公共的类型系统,只不过这个类型系统只是包含数值类型,也至于我们甚至不需要去定义这个类型系统,这样导致人们对它的类型系统可能没有感知;然后区块链类型系统的解析器是位于虚拟机上的,即由系统控制,系统在对数据按照用户的授权执行权限控制,最后获得授权的请求才会执行最终的交易计算,我们可以认为交易才是真正的客户程序,而交易之前的类型系统和授权计算是属于平台虚拟机部分,这部分客户程序是无法控制的。

    image-20230901145523283

    最终我们看整个类型系统的架构,它类似于上图所示,这里客户程序(program)仅仅是包含代码,数据被存储在其它地方,用户可以离线对数据进行授权,指定哪些程序可以访问哪些类型的数据。然后运行时这些数据被首先加载的虚拟机VM,虚拟机首先根据类型信息对数据的权限进行判断,如果这个程序被授权,则调用解析器帮助程序解析格式,并最终将程序放入到某个约定的内存地址,最后程序从这个内存地址取值进行计算。

    当然实际整个类型系统的工作机制还涉及很多内容,我们在后面架构设计一节将详细介绍。

    数据

    区块链的另一个特点是数据的存储是未受保护的,甚至是明文的,任何程序都可以获取用户的账本信息。这跟传统的应用程序架构思想也是截然不同的,传统的应用架构就是为了保护用户数据而将数据完全隔离,甚至加密以防止其它程序触碰到数据,但是它们通常在内部则不做太多安全检查,假设对数据的访问都是合法的;而区块链的哲学却不一样,它认为数据的存储不重要,重要的是数据的所有权,所以它的核心是在运行时做授权检查。当然这里只是一种架构上的类比,区块链公开明文数据的机制也是由于其核心的共识机制决定的。

    image-20230901145523283

    如上图(a)所示,传统的程序将数据隔离起来,以防止其它程序访问,这种隔离机制往往是在编程模型之外的机制,由操系统来提供,因此程序不需要担心数据的安全性。例如常见至少有三种数据保护机制:

    • 文件系统和应用程序沙盒环境,在现代移动操作系统中,每个应用往往都分配有独立的数据存储空间,应用程序可以将其运行过程中产生的数据存放至这里。像iOS操作系统则会为这个程序的空间创造一个沙盒环境,使得只有所属的应用程序才能访问这个环境中的一切数据。
    • 操作系统内存隔离,当一个应用程序启动后,尽管理论上所有的应用程序都是共享计算机硬件的内存,但是现代操作系统及硬件提供了很多隔离机制,使得每个程序被分配一块内存的区域,并且不管其程序代码中访问的内存地址指向何处,都不可能访问到程序之外的隔离区域。我们将在后面讨论这些机制。
    • 虚拟机沙盒环境,像Java、Web Assembly、.NET CLR等现代虚拟机环境,它们往往提供一种多种编程语言的程序互操作的能力,尽管保护力度和性能不一样,它们还或多或少提供了一些在同一个应用内部隔离不同子程序的能力。这种情况下,因为整个虚拟机及运行在其上面的所有的程序都是在一个内存环境中,所以操作系统的内存隔离无法提供保护,虚拟机往往需要模拟操作系统的某些机制来实现应用内的内存隔离。这种情况下,对于虚拟机上的每个子程序来讲,虚拟机环境本身有点类似于操作系统的概念了。

    从上面的分析可以看出,过去几十年计算机软件构造的发展历史,逐渐形成这种操作系统与编程模型的分工协作,也是一种硬件上的抽象,在这种抽象模型中,硬件或操作系统只需要提供如文件或内存级别的安全访问机制,而不需要关注应用实际的数据和数据结构,就可以保证数据安全;而对于应用程序,由于硬件或操作系统已经保证了数据不会被其它程序非法访问,那么整个编程模型涉及的机制只需要考虑应用业务逻辑的构造,而不需要考虑数据的访问安全,并且现代编程模型基本上都基于一个假设:即代码可以访问该应用程序内的任何资源,只要它能获取到相应的内存地址,例如在C++代码中,一个指针可以指向和访问任意应用程序内部的内存地址,即使是那些不能使用指针的脚本编程语言,它们的核心也主要是在帮助简化内存管理,而不是阻止对应用程序内任意数据的访问,例如一个对象的引用你可以传递给任何变量从而被使用。

    过去几十年,这一套机制运转良好,也体现出这种抽象带来的高效率。但是这种抽象只考虑一个程序及其程序的执行,而没有考虑程序内部数据对于用户的意义。在传统的软件中,软件主要是作为一种单一的功能使用,这种功能很少涉及需要跟外部交互,它们整体在内部是自洽的,如果用户需要另一个功能,TA就去打开使用另一个软件就好。

    然而近几年随着Web 3.0、元宇宙和多智能体类应用的出现,这些应用越来越凸显出相互交互和协作的特性和需求,这跟我们传统的应用构成模型是相悖的,数据隔离就失去了互操作性,尽管我们可以通过一些机制去提供一些接口让其它应用进行互操作,但是这些机制架构通常都很复杂、不可扩展、效率低下。

    因此,或许我们应该像区块链系统一样,建立一层数据抽象。它可以带来天生的互操作性,同时后面我们将看到,这样的架构调整还可以带来很多新的计算特性。但是首先来看将数据与应用程序分离之后怎样保证数据的安全。

    安全

    将数据存储在应用程序之外的地方,就失去了硬件和操作系统的保护,那么平台或者应用程序就必须额外提供保护机制。这方面我们也可以从区块链系统得到一些启示,再结合传统软件架构技术的一些发展,找到一个合适的技术方向。

    不考虑分布式环境,仅考虑单个虚拟机,我们可以认为区块链计算的过程如下:首先虚拟机从外部环境中获取到用户账本,然后基于用户授权执行验证计算,验证通过则执行具体的交易,我们可以把这三部分分别看作数据、虚拟机和应用程序,如下图(b)所示:

    image-20230901145523283

    首先数据存储在应用程序的外部,从前面数据部分的分析也可以看出,所以在程序运行的时候就涉及到一个数据的传输过程。关于网络传输的安全性,我们已经有了很多年的软件工程实践,这块并不会带来很大的问题。而实际上,比如在移动端这种情况下,用户的数据大部分是存储在本地的,这并不需要经过网络传输,实际上整个系统只有需要与其它用户进行交互的数据才会进行网络传输。

    当数据到达本地虚拟机时,虚拟机首先执行权限计算,然后再决定一个应用程序是否可以获取这个数据以执行某种计算。这里由于虚拟机已知用户的数据类型,所以它能够对数据进行授权管理,用户可以很简单地对每种语义数据对每个应用程序进行授权,只有相应类型被授权的应用才可以访问到对应类型的数据。所以这里虚拟机完全可以执行整个授权计算。

    随后,被授权的应用最终可以获取到数据执行某个逻辑计算。尽管数据需要执行权限计算,但是应用程序对这种计算并无感知,它还是像传统应用程序一样进行开发,例如它声明需要访问某个数据,如果这个数据没有被授权,它根本就不会被调用执行;如果数据被合法授权,则它的计算过程跟传统的计算是一样的。整个授权的行为对应用程序是透明的。

    这种数据及其安全的抽象,使得应用程序的开发还是利用完整的传统应用开发流程,保证对开发者流程和习惯的影响带来新的学习成本和思维模式转变。而这里的虚拟机则仅有平台进行开发即可。

    对于虚拟机的安全部分,传统的一些虚拟机技术如Java、Web Assembly等已经有了很多的实践可以借鉴。本文后面也会提出一些新的调整思路,以解决一些新的问题和新的思考。

    数据抽象带来互操作性

    Reality World显然不是一个区块链的架构,比如我们每个应用的主体逻辑计算主要还是在单机上计算,就像传统的应用程序一样,但是它从区块链背后的技术体系中提取中了一种很有价值的思想。这种思想来源于区块链核心的共识机制,即它需要在一个分布式系统中的所有虚拟机上执行相同的计算来达成共识,这就要求虚拟机上每次计算的输入数据,即执行交易的两个用户的账本数据,首先必须对每个虚拟机是公开的,这样它们才能顺利地获取到数据,也即是可以互操作。这是一个非常智慧和巧妙的思想,任何尝试像传统软件架构那样把数据放在一个受保护的地方,然后通过定义API等等方式提供访问都会带来巨大的软件架构上的复杂性,比如你的编解码方式、传输内容的格式都需要两边进行很多配合,带来很多的碎片化。同时,数据的解码一定不能在客户应用程序内发生,这样客户程序就始终会拿到数据,进行不可能预期的操作,解码操作必须发生在平台。如果解码操作发生在平台,我们就不需要设置复杂的数据保护措施,因为这些数据的存储以及解码的过程,启示就发生在平台内部,对客户应用程序是不可见的。

    数据可能不重要,所有权才是最重要的,这是区块链思想对于传统应用架构的不同视角,它带来了新的应用形态和体验,与之同时也带来了新的软件架构思想。

    尽管区块链并没有很强调互操作性,因为它的格式和系统足够简单,但我们尝试把这种思想往通用计算上去思考的时候,它就会演变成互操作性的概念,想想你在区块链的虚拟机上怎样解析用户的另一个非账本的复杂数据结构?

    这种从互操作性的角度去思考区块链,以及从中得到对软件架构的启示,它为未来的数字世界软件架构带来了全新的世界和可能性。它甚至打破了传统软件架构几十年发展的思维,未来的数字世界会因为互操作性呈现完全不能的能力和形态。从后面的内容会无处不在地看到这种互操作性带来的各种新的可能性。

    更重要的是,我认为这是未来实现更加智能数字世界的基础,即数字进化。

    基于复杂系统的计算架构

    前面我们讨论了在一个多应用程序环境中,应用程序之间的互操作思想和机制,即系统架构的外在结构。本节我们关注的内容是系统内部逻辑的组织方式,即内在结构。

    我们关注两个视角,这两个视角都来源于复杂系统理论:

    • 首先是大规模复杂系统内部的交互和逻辑组织问题
    • 其次是怎样通过复杂系统的涌现机制产生更加智能的数字世界

    这两个视角将会让我们重新去审视过去几十年来形成的软件架构及其编程模型的思想,我们将通过把复杂系统的一些理论和思想引入到软件架构中,从而形成一套开发具有复杂交互的软件架构方法和逻辑,更重要的是,这种新的视角可能有助于未来我们开发出更智能、更丰富的、更复杂的数字世界体验。

    游戏的复杂系统视角

    上一节我们分析了,现代软件开发的其中一个基本的假设是程序所有的数据和代码都是受程序开发者控制的,这带来了中心化的软件治理模式,进而形成中心化的数字生态。中心化有效率的优势,去中心化有数据安全的优势,我们则从两者中做出一些架构调整形成一套集两种优势的架构。

    本节我们将分析传统软件架构的另一个机制的缺陷及其带来的影响。

    在现代的编程模型中,不管编程语言本身对硬件的抽象度如何,整个程序最后要被硬件执行,都会被编译或解释成这样一个机器码或字节码的字符指令集合,这些指令一般由操作符和操作数组成,操作符是其计算平台支持的计算类型,而操作数大部分是涉及到硬件的地址的,一个程序通常包含三类地址:

    • 寄存器
    • 内存地址
    • 程序机器码中的代码地址

    这其中寄存器地址大部分是由编译器来分配的,而内存地址和代码地址则是和程序的结构有一定的关系。其中内存地址通常是我们程序在运行过程中创建的数据对象在内存中的地址,然后其它一些需要访问这个对象的指令通常就需要指向这些对象的地址;而代码地址则通常跟方法调用有关,我们编写的代码最后会被编译为一个机器码格式的数据表述,程序运行启动时则会首先将这些代码数据加载到一片固定的内存地址,后续所有代码的执行实际上都是需要首先从这里获取代码指令的数据,然后根据指令的定义执行计算,然而实际代码的执行并不是完全按顺序执行的,我们的逻辑中充满很多控制流,例如一个函数需要调用另一个函数,这个时候就需要首先将指令的指针指向另一个函数的地址,并在指向完毕之后跳转回原来的位置。所以我们的程序代码中还需要根据逻辑控制流将这种代码地址编码在指令的操作数中。我们将在后续的技术架构部分更详细的讨论这个过程。

    尽管上述的过程一般主要是由编译器、链接器和加载器来协同完成,但是从本质上来说,一句代码要访问那个对象的内存地址,以及下一个语句要跳转到哪一条语句,这其实是应用的逻辑规则,因此这些逻辑定义是由程序员来定义的,编译器只不过是根据编程语言的语法描述,将这种程序员在编程语言级别的定义,转化为机器级别的定义。

    按照传统的软件架构方法实践,这里就会出现两种问题:

    • 一旦某句代码访问指向了某个对象地址,这个行为就不容易修改
    • 一旦某个跳转语句指向了某个函数的地址,这个逻辑流程就不容易调整

    尽管我们有很多软件架构实践来部分缓解上述两种情况带来的问题,但通常都没有理想的方案。这造成的一个主要结果就是,我们的程序一旦开发编译完成,其行为就不容易动态调整或修改,一旦进行修改,则需要重新进行编译发布,并要求用户重新更新整个程序。

    上述技术层面的因素反映到用户体验或者软件形态层面,就是当前的软件形态大部分都是一种固定的形态,每个软件的功能和结构基本上都是固定的。与软件的数据和代码耦合在一起导致软件失去互操作性类似,软件中数据的地址与软件结构的耦合使软件失去了动态性。关于软件的动态性有两个方面的意义,下一节我们回讨论动态性对于智能进化的意义,本节我们先讨论动态性对于软件逻辑构造的意义。

    复杂系统结构

    如果一个软件的业务逻辑是相对比较确定且简单的,那么我们传统的软件开发模式是可以很好地工作的,比如看看我们现在手机上大部分应用,每个应用内部的功能相对还是比较简单的,尽管有比如高并发等类的软件架构问题,但这类问题跟复杂度本身没有太大关系,更多是技术架构的问题。这类应用的特征是其业务逻辑的复杂度基本在人脑能够理解的复杂度范围之类,内部开发人员通常不需要太复杂的推理和思考就能够理解软件内部业务的流程、逻辑等等。

    我们看另一个类型的应用:即游戏,则不一样。我们在后面还会分析很多游戏架构的特征,但是这里先重点关注其中一个特征,即它的业务逻辑的复杂度。总体上它的复杂度相较于传统的应用有两个特点:

    • 它由非常多的逻辑关系没有那么清晰的子系统组成
    • 这些子系统之间的交互呈现高度的动态性和局部性

    在这种情况下,我们几乎很难像传统的软件那样进行编程,它没有比较明确固定的逻辑说什么流程之后就会执行另外一个流程,它更多是根据很多来源不同的条件来决定执行什么流程;它也不能将指针指向某些固定的内存地址,它有很多不同不同的对象实例需要执行相同的逻辑。总之这种软件的复杂度是非常高的,我们通常无法很直观地用大脑去思考它内部的交互逻辑。

    具有这样特征的系统通常称为复杂系统,实际上关于游戏设计的理论,大部分都是基于复杂系统的思维来思考的。前面我们已经介绍过复杂系统相关的基本概念,我们可以从两个维度去理解它:

    • 内在结构,内在结构通常侧重在描述构建一个复杂系统的架构思维,比如它们的子系统的交互机制是怎样,整个系统是怎么组织的。
    • 外在特征,外在特征更关注的是观察一个复杂系统,它会呈现出什么特征,这方面通常是设计复杂系统的理论,因为一般的复杂系统理论更偏重寻找复杂系统的原理而不是关注它内部的结构。

    我们也从这两个方面来思考软件架构,首先讨论它的内在结构,后面再讨论它的外在特征。

    游戏中的组合架构

    为了解决程序逻辑中的动态性的问题,一般的游戏应用架构都选择使用非常不同于传统软件开发的架构,这些架构大部分都涉及用某种形式的组合来代替继承。这其中不光是由于继承带来的逻辑表达的复杂性,使用组合还可以更灵活地调整程序的结构和功能。

    最简单的组合机制如下图(a)所示,对象A并不是由某个具体的类通过继承等方式来继承,而是通过把不同的组件组织在一起通过组合的形式来构建。这种组合方式通常不是编程语言的机制,而是使用类似一个配置表格来记录这种组合关系,然后程序运行的时候根据这个配置分配相应的组件对象地址,并在组合的对象中以某种形式记录这些地址,以方便可以快速地访问这些组件对象。

    组件对象本身的定义没有太多限定,一般简单的方式是每个组件包括自己的属性、状态和代码,另外一些更好的架构比如ECS则是将组件的数据和功能分开,这样方便组件之间的数据互操作。但不管怎样,对象内部的组件之间是需要通信的,对象和对象之间的某些组件或者属性之间也是需要通信的。如上图(b)所示。

    一般简单常用的方法就是设置可以能够被全部对象访问的Manager类,这个类能够根据类型或者名字查询到其它组件或者对象的实例变量,例如伪代码:

    manager.getChild("A");
    manager.getComponent<Attack>();

    这样的方式很灵活,它避免在我们的代码中到处去寻找每个对象或组件实例的位置和地址,简化为通过对象名称或者类型信息来获取对象。但是它的缺点是我们暴露了一个权限很高的访问入口给每个对象或组件,尽管对于游戏开发商内部来讲这没有问题,但是如果我们希望游戏程序能够提供给玩家一些自定义的选项,在这种情况下,玩家可以自行向程序注入一些动态的脚本程序来实现不同的玩法和目的,这种架构却是不可行的,而这也是元宇宙所描述的世界尝试构建的架构。

    去中心化的交互控制

    构建开放的程序架构不光涉及对其它资源的访问权限控制问题,还涉及到去中心化的子程序交互控制问题。

    这是什么意思,由于系统的功能和状态都是完全动态的,因此我们无法预测一个组件执行时它需要的条件是否完全满足,在上述伪代码示例中,组件获取到的对象可能是不存在的,当然我们可以在每个组件内部做是否为空的判断,但是我们有没有一些更好的架构方法呢?

    近几年改进出来的ECS架构可以找到一些启示。在例如Unity DOTSBevy ECS架构中,在这些ECS架构,组件的数据和功能被分离开来,分别对应Component和System,每个System对数据的使用,由上面那种自己需要通过全局共享的manager变量去查询获取,改变为通过一个query参数来声明对数据的需求,例如如下的System声明它需要使用Transform数据:

    fn print_position_system(query: Query<&Transform>) {
    for transform in &query {
    println!("position: {:?}", transform.translation);
    }
    }

    这种Query形式的声明,借助Rust编译器对宏的一些强大支持,使得我们不需要写一些额外的查询语句,基于类型就可以获取到正确的对象变量,这种方式甚至比函数调用还要简单:都不需要我们手动传递函数参数,只需要声明类型就可以在运行时被自动赋予正确的函数变量。当然Unity使用的C#语言编译器的机制没有那么强大,但对应的思路是差不多的。

    这种机制带来的意义是非常深远的,它不光简化了传统编程开发中,一个逻辑在执行时需要收集大量复杂上下文数据的流程,更深远的意义在于,通过分离数据的声明和数据的实际获取的过程,将数据的获取过程转交给系统,使得系统有机会去控制组件对数据获取的安全控制,同时又不会给客户程序的开发带来复杂度,甚至还大大简化了。

    结合我们前面的区块链的思路,由于我们的数据的获取是没有做保护的,但是我们在这个数据获取到组件的使用之间,虚拟机会根据组件的类型声明执行安全检查,此时我们知道组件声明的类型,这个类型是虚拟机可以解析的,我们也已知道用户对于该组件对于该数据的授权情况,我们完全就可以在虚拟机层面非常简单地做出安全判定,如果我们还能够根据判定结果来执行函数功能,那么非法的组件完全就没有可能被执行,即使它看起来可以声明获取用户的任意数据,所有的数据所有权都在用户的精确控制之下。

    这种机制也为我们带来去中心化的交互控制便利。由于复杂系统的子系统非常多,且整个系统是高度动态的:随时可以有任意的子系统因为某些原因被停止执行,也随时可能新增某些新功能的子系统,所以我们很难用全局的控制器去管理这些动态的组件之间的交互,实际上所有复杂系统的核心就是整个复杂系统没有中央的控制机制,所有子系统之间都是局部的交互,整体涌现出智能行为。

    如果组件只是声明交互关系,没有与某个中央控制器或者全局的共享变量交互的机会,系统或平台就有机会根据类型等信息进行动态判断和规划,使得不满足条件的组件根本就不会被执行。这样在每个子系统看起来,整个系统并没有一个中央控制器,能够最大限度支持复杂系统的动态性。

    这种简单对类型的声明,然后由系统来分配数据的架构,也支撑了我们最核心的互操作性特性。

    动态性

    游戏程序或者说一般的复杂系统,相对于传统的应用架构还有另一个特征,那就是信息是完全动态的。

    在传统的应用中,软件主要充当的是一个功能计算器,它的功能大多数时候都是静止状态的,只有当用户发起某个事件,例如点通过鼠标或触摸屏点击某个UI元素,这个UI元素被程序定义为绑定到某个功能,一旦用户发出输入事件,对应的功能计算就会执行,然后程序会呈现相应的计算结果给用户。此后程序又进入静止状态直到用户的下次输入。这种模式可以描述为:输入-->计算-->输出,如下图(1)所示。

    而游戏并不简单的这种模式,游戏世界的一切都是动态的,它背后有一个循环驱动着整个系统持续在运行,即使用户不做任何输入,它的状态也在时时刻刻发生变化,例如大部分游戏的关卡都有时间限制,即使玩家什么也不做,游戏也会以失败结束;例如在一个RPG游戏中,即使玩家站着不动,周围的怪物也有可能走过来攻击玩家,导致一连串的后果。

    游戏程序就像内部有一个驱动器,它持续驱动着所有系统的运行,这些系统与系统之间的交互会导致很多状态变化,这些变化的状态信息源源不断地输入给玩家,如上图(b)所示。

    这种行为也是更接近真实世界行为的,在真实世界中,不管是生物系统还是人工影响的如经济系统等,环境时时刻刻在发生变化,整个世界的信息绝不仅仅是我们自己去影响的,事实上更是反过来我们的行为都是受环境的信息影响的,我们所作的任何决策都要实时去观察环境的信息,有些上一刻看起来还理所当然的决策,在下一刻随着某些环境发生变化就变得毫无意义。

    这样的信息系统特征与我们的传统应用程序相比,表现出两个在计算上完全不一样的特征,即:

    • 系统之间的交互是完全被动式的
    • 软件给用户呈现的是一个动态的信息世界
    被动式计算架构

    当一个信息系统的交互控制是去中心化的时候,子系统之间的交互看起来都是“自发的”,没有谁来驱动,这样的机制怎么执行的,我们将在后面讨论整个复杂系统的机制,这里我们先来看看这种行为对编程有什么影响。

    传统的编程模式都可以称作为主动式,大部分的代码流程可以总结为:用户输入-》决策判断-》执行动作,这里的决策判断是程序中最复杂的部分,因为它涉及到很多上下文信息的组织和查询,关于上下文的理解知乎有一篇很精彩的描述。在传统的软件架构中,我们一般都会有很多不同的模式和经验来实现这种上下文管理,但是这里我们在复杂系统的视角下,却会提出另一种可能是更好的方法。

    一般的决策判断流程大概是这样,当对应的代码接收到用户输入请求的时候,决策代码要做的事情就是去查询和收集上面讲到的这种上下文信息,以帮助做出决策判断,不考虑这些上下文内部是怎么组织的,我们可以把整个根据上下文进行决策判断的过程看做一个函数makingDecision(),makingDecision要做的事情就是去调用大量预置的判断函数,根据各种逻辑条件,动态地计算出一个判断结果。这种计算架构带来了两种不好的结果:

    • 造成了模块之间的耦合,即所有子模块都需要引用或者了解哪些逻辑判断的代码
    • 造成逻辑判断计算的重复执行,设想有两个独立的用户输入,其中的逻辑判断有80%是重合的,程序必须针对两个独立的输入进行这部分重复计算。

    看看我们现实世界的系统往往不是这么工作的,各种系统往往定义好自己的流程,每个流程会输入数据,后续流程往往以这种输出的实物数据作为它可以执行流程的判断条件,而不是当它需要执行的时候,发现前面的流程还没有执行,由下游的流程再去驱动上游的流程去执行。在这样的模式种,上游流程计算的数据结果不仅充当了一个条件,它更充当了上游的那个计算过程。

    结合我们前面的互操作能力,即子系统在不经过某个中央控制模块的情况下,能够非常简单地访问所有数据的能力,我们可以把各种可能的决策计算提前计算为一个数据,这样下游的流程由于定义和数据依赖关系,系统可以在条件满足的时候自动调用它去执行自己的逻辑。整个过程中,决策判断和子系统完全解耦。

    这样的架构调整将传统软件种的模式由主动式转变为被动式。

    动态的信息世界

    传统的:输入-》计算-》反馈的计算模式,用户能够完全了解或者说“记住”一个软件的状体,用户知道自己做过什么,当前的软件状态是什么,用户也知道TA只要执行某个功能,就会带来什么可预期的结果。

    尽管这样的方式有助于人们管理日常的任务和工作,但是这既不是真实世界的工作方式,同时所有事情都靠人去输入驱动,那么信息系统所能完成的事情的数量就会非常少,因为人的精力和注意力都是非常宝贵和有限的资源。而现实世界的信息系统总是在自发、动态发展的,即使我们某天什么事情也没有做,但是世界发生了很多的经济和生产行为,所以我们应该模拟真实世界的动态行为,使得数字世界的计算不以人的注意力为驱动基础,这样即使当我们的注意力不在软件和应用上,但是它们会在后天时时刻刻都进行着与用户相关或者指定的计算任务。

    前面我们已经描述了实现这样的计算架构的机制,这里要强调的是这对用户体验带来的变化。传统的软件的信息状态都是跟用户的输入有关,因此即使不用打开软件,用户大致是知道里面的状态信息的。但是如果一个信息系统在后台动态运行,就会存在大量的信息状态是用户不知道的,它必须像观察这个动态的世界一样去观察软件内部的信息状态,当然这里的交互可以有很多形式。

    游戏就是这样一个信息系统,游戏内部有许多子系统的运行都不是直接与用户的输入相关的,因此游戏的交互必须要很好地呈现比较完整的状态信息,比如相对于传统应用简洁的界面,游戏的界面通常会包含很多全局的数据信息,除了具体的数据信息,游戏场景的元素在视觉上通常也被设计为易于帮助用户去区分不同的场景状态,如下图《文明》这款游戏一个游戏画面。

    在这种情况下,用户的下一个输入或者决策,就不能单纯凭借自己大脑种的记忆,而是需要观察整个系统的信息状态,这些状态可能会实时变化,甚至大部分变化都不是用户直接输入导致的结果,甚至某种程度上用户的操作更多是在响应信息世界的状态变化。

    表面上这看起来是更复杂的,但是这样的信息系统能够处理的信息计算将会远远超过传统的信息计算,因此它能实现的信息计算的复杂度也更高,想想看一个游戏中涉及的那么多计算和逻辑,使用传统的应用模式几乎是无法实现的。

    而且这种复杂度对于人类来讲,或许并没有那么复杂,人类在社会中天生就是被训练为适应变化的环境的,我们不断在观察街上的行人、红路灯及车辆情况,以决定下一步的行动策略;赛场上球员之间不断观察其它运行员动态的情况,以决定下一步行动;甚至在信息系统中,我们也要根据股票市场的变化,决定下一部分的投资决策等等。

    所以这里更多的是设计和交互的问题,比如人的有些响应能力是天生的,比如对危险事物的察觉,有些则是需要定义一定的规则然后进行适当的训练的,比如开车时对环境的反映等等。这比如就要求我们要精心选择呈现信息的逻辑、模式、规则,而不是一股脑甚至随机选择大量杂乱无章的信息;比如一段时间内某些相关信息的规则和逻辑变化不能太大,因为这可能需要用户重新去建立对动态信息的响应模式。

    在这种信息系统中,信息的呈现、规则和交互会变得很重要,但是相比于这样的复杂信息系统呈现的价值:注意力的释放以及实现更复杂计算的能力,以及人类对这种动态信息系统的适应能力,这样的转变完全是有价值的。

    进化产生数字智能

    前面我们从机制上讨论了很多思路,以实现一个可以多子系统互操作、靠子系统局部交互实现更复杂功能的数字世界。但我们花费了这么大的精力去重构软件开发的流程,以及让用户去学习新的信息系统交互方式,这样的代价到底值不值得?它有没有更深层次的价值体系来支撑这种技术变革?这些是本节要讨论的问题。

    本节我们要讨论两个很深刻的问题,即数字智能和计算的本质,这些概念可能性驱动未来数字变革的核心价值。

    智能涌现

    前面我们已经简单介绍过复杂系统的一些基本知识,我们再来看一个每个人可能深有体会的例子。

    考虑我们现在的整个网上消费购物的系统,它是由这样几个子系统构成的复杂系统,包括生产产品的厂商、物流快递、国家交通公共基础设施、电商网站、送货的快递员和用户等。这些子系统每一个单独看都比较简单,它们的功能有自己的边界,这些子系统之间的交互也相对比较简单,最重要的是,这一切没有一个公共、统一的中央控制器,整个系统都是由局部的子系统之间进行简单的相互交互,从而呈现整体系统功能的。

    虽然每个子系统相对都比较简单且容易理解,但是整个系统实际表现出来的功能性是远远大于我们的预期的,例如最开始网上购物主要是以淘宝等少数电商网站为主,然后现在快递称为一种公共子系统,使得任意其它的电商网站都可以接入,这就使得人们购买物品这个体验大大升级,例如小到附近的餐厅、水果店和药店等都可以很方便的购买,甚至包括跑腿这种灵活的形式,从我们的体验上说这已经不单单是一个快递或者购物网站那么简单,它简直是一套非常智能的消费体系,因为几乎所有的电子消费形式它都可以实现,这种智能就是通过这些子系统构成的复杂系统涌现出来的。

    除此之外,由于这些子系统之间的形式是相对比较独立的,所以子系统都在进行自我迭代,例如过去的物流体系主要是依赖火车,其运载的时效性是非常低的,随着现在交通子系统内部的迭代,例如火车升级为高铁和动车,大规模高速公路网的修建,其它的子系统甚至在没有变化的情况下就能享受到交通子系统的性能提升,最后导致整个消费的体验大幅提升。再比如说快递这个子系统,过去快递可能就是送到站需要用户自取,但是随着消费量的增加,快递公司为了改善体验,逐步增加了配送到家里的最后一公里,甚至在大城市通过分片区配备更多的快递员来缩短配送时间。所有这一切,每个子系统内部都在迭代和进化,最后整个系统的性能和能力都不断突破,子系统内部逐步的迭代改善不单单是提升了性能,它使得整个系统涌现出一些新的体验和能力。例如快递员的配送时间不能控制在很短的时间内,那么这种短时的外卖消费形式就不可能形成。

    从这里我们就可以看到复杂系统的力量,它通过将整个系统划分为自治的子系统,并允许子系统内部进行进化迭代,从而涌现出更智能的功能。我们可以从人类社会的各个层面都看到这种复杂系统机制涌现智能的例子,从生物系统、到人造的各种系统,如上面描述的这种电子购物的系统,再到天气宇宙这种大自然的复杂系统。

    尽管信息化以及计算机的通用计算能力具备表达和模拟人类一切可计算的逻辑的能力。然而在数字世界我们似乎还没有感受到这种由复杂系统机制导致的计算智能的能力,这主要是因为前面论述的现代软件构造的基础架构使得应用之间的互操作性很低,从而不利于实现相互交互来形成复杂系统。比如看看我们手机上的应用,几乎每个应用之间都是完全隔离的,尽管理论上用户的数据本身应该在不同应用之间可以共享,但是实际上一个应用很难使用或获取另一个应用产生的数据。这造成的结果就是,虽然现在的应用商店有成千上万的应用,每个用户也下载了非常多在功能和意义上具有相关性的应用,但是这些应用之间从不能真正进行交互,使得这种“多应用”的形态最终没有涌现出更复杂、更丰富、更智能的数字体验。每个应用本身就像一个完全独立的小功能,甚至应用之间由于数据格式的不同,即使是用户想要手动在应用之间形成这种协作,也无法操作,当然除了简单的图片、视频、文字等这几种标准的格式之间可以手动实现交互,其它更多的数据是没有通用格式的。

    说明:这里并不是说数字世界完全没有复杂系统产生,但这里本文说的主要是面向C端消费者的应用之间。其它的不同层度的互操作还是有的,但是由于传统软件构造架构的一些基本的能力限制,所以大部分这种互操作性的架构都发生在web之间,Web通过HTTP等协议提供了一些基本但相对比较复杂的互操作机制,大部分企业内部的业务之间都是基于网络传输协议来实现的微服务的形式构成的,这在某种程度上形成了一个复杂系统。此外,超链接URL使得互联网上的信息之间都可以连接起来,尽管它只是一个简单的链接,但是这些链接构成的信息背后的相关性构成了一些逻辑关系,使得它们也涌现出了智能,例如我们沿着这些链接可以寻找到很多很深层次有价值的信息,这些信息作为知识使得我们可以解决一些生活中的重大问题。

    所以从这个角度看,构建一套新的软件构造的方法,使得人们可以更方便地去构造复杂系统形式的信息系统,这将带来帧数的数字智能的变革,这将使得计算的能力远远超越一般的逻辑计算。

    计算的本质

    在计算机和信息领域,我们理解的计算通常是指按照一定的逻辑和流程执行一些操作,编程语言定义了我们描述逻辑的方式,我们的逻辑用这种编程语言进行描述并形成代码程序,最后在计算机上被执行以完成这个计算。

    然而当我们构建了一个具有复杂系统特性的信息系统的时候,这些涌现的能力是我们“计算”出来的吗?从这个角度看,可能计算的本质并没有那么简单。

    在生物学、数学、统计学、物理学等跟复杂系统相关的科学领域,科学家一直在尝试为复杂系统寻找一些数学上的理论,复杂系统的视角至少从上个世纪50年代就已经在科学研究者中间被广泛思考和接受,例如著名的人工智能先驱 Herbert A. Simon 就是最早对复杂系统的架构进行分析的科学家,在他的著作《The Sciences of the Artificial》就大量使用复杂系统的视角来分析所有由人类参与的人工系统。他提出了一些构建这种系统的原则、方法和思维,比如通过目标、界面和环境的关系来描述人工系统,其中的界面其实就相当于子系统之间的边界,界面内部的就是内部功能,系统面对的外部环境就是其交互部分,而目标来源于进化论里面的选择。这些研究工作也为后来的复杂系统在工程上实施提供了许多宝贵的价值。

    然而,最近几十年来,尽管随着生物学、物理、化学等学科的飞速发展给复杂系统的研究提供了很多依据,但是人们至今依然没有找到关于复杂系统的统一的数学理论。更多的研究者都偏向于复杂系统可能没有像其它自然科学一样具有比较明确的统一的数学理论。更多是从复杂系统的一些比较具有共性的一些特征去研究和使用复杂系统。

    分子生物学John E Mayfield在他的著作《The Engine of Complexity: Evolution as Computation》中提出了一种关于复杂系统的解释,即将进化看作一种计算,这样计算就是所有复杂系统背后的引擎。这本书的 作者介绍 如下:

    From an early age John E Mayfield was fascinated with science of all kinds. This broad interest led to a BA in physics, a PhD in biophysics, and an academic career in the area of molecular biology. In the late 1990s he was introduced to evolutionary computer algorithms and became fascinated by the relationships between biological evolution and computer based evolution and more generally in the linkages between computation and biological process. The Engine of Complexity, Evolution as Computation is based on his consequent studies. The book shows how biological evolution is a special case of a more general computational notion of evolution, and how that general view of evolution explains not only how life is possible but also how human technology and most or all complex outcomes of human society are possible. It is his first book.

    John E Mayfield的主要研究方向是关于进化的一般性理论,他指出,传统的复杂系统之所以很难形成统一的数学理论,主要是因为系统之间交互关系是非线性的,而计算机的逻辑计算能力正是解决非线性关系的方法,且具有很强大表达能力,所以他发现将这两种视角结合在一起,用计算的观点就可以解释几乎所有复杂系统的机制。

    作者指出,计算机程序是由能够导致计算机内部发生特定的状态序列并产生输出的命令组成。数据可以视为对外部世界某方面的表示,这样看来,计算就是将方法的表示(算法)作用于对世界某方面的表示(数据)产生内部表示(机器状态)的序列,并得到最终的表示(输出)。在计算机中,内部状态与输入状态互动产生新的内部状态,最终状态就是输出。

    那么如果物理的过程也是计算,程序在哪?作者以如何解释一粒盐为例用计算的观点来解释化学反应,食盐是由钠和氯组成,当等量的钠原子和氯原子混合到一起,就会发生自发的反应,这个化学反应会释放热能量,每个钠原子失去一个电子,每个氯原子获得一个电子。根据库仑定律,带正电的钠离子和带负电的氯离子相互吸引,但不能距离太近,因为填充的能级(化学的轨道)不能相互渗透。当所有钠离子都被氯离子包围,氯离子也被钠离子包围,形成非常规则的3维结构,相抵触的规则时间就会达到最优平衡。能级的物理维度决定了例子之间的最优距离。钠离子和氯离子具有不同的大小,能平衡物理和几何不同需求的状态是一个规则的网格,每个氯离子周围有6个钠离子,每个钠离子周围也有6个氯离子。这个规则的立方体结构向各个方向延伸,从而形成我们所熟悉的盐晶。在适当的温度和浓度条件下钠离子和氯离子相遇就会自发形成这种结构。

    在上述的过程中,涉及两个基本物理定律,一个是库仑定律,它说明电荷越接近,作用力就越大。但如果仅仅是这样,钠离子和氯离子就会挤碎在一起。而这一切没有发生是因为另一个量子力学中的被称为泡利不相容原理的规则。量子力学规则的一个特点是系统是按“能级”划分的,对于原子这意味着电子处于某个能级并且与质子的距离不能低于最低的能级。这种规则的结果是使得不同的能级只能占据一定数量的电子。

    量子力学、库仑定律以及数字的相互作用赋予了每种化学元素独有的特征。John E Mayfield从计算的观点看,钠和氯原子各自带有自身表示的信息,当一定的条件发生时,它们会相互作用,发生相互作用的计算过程正是由基本的物理规则引起的,例如这里的库仑定律和量子力学规则,这些基础的物理规律编码了其中的计算算法。

    按照这种视角,所有的进化系统或者复杂系统都可以用计算的观点进行解释。这种计算的视角对于我们构建软件计算架构最核心的意义在于,这种系统的计算是自动发生的,它没有某个中央控制器。在物理过程种,作者将物理规律在整个进化计算过程种充当的驱动自发计算的方式称为“免费的结构”,即我们自然界的所有基本的物理规则驱动着整个宇宙种复杂系统的计算。

    回到我们的软件架构,我们已经具备了定义子系统以及让子系统之间进行互操作的能力,那么在没有中央控制器的情况下,怎样形成这种自发的子系统之间的交互呢?这就涉及我们的组件参数声明与全局变量之间的解耦,当我们的组件只是声明对某些数据感兴趣,而不需要自己去获取这些数据的地址的时候,借助我们的类型系统,系统就可以自动推导出它需要与哪些子系统进行交互,所以系统能够动态根据这种子系统之间的变化来决定这种交互东西,尽管系统在不还是有一个类似的分配器在工作,但是从组件或者子系统看来,这些子系统与其它子系统之间的交互是“自发的”,即:

    • 子系统只需要声明自己感兴趣的数据,就像原子声明了自己的表示。
    • 只要条件满足,子系统之间就可以进行交互,这个条件在物理过程中是自发进行的,在我们的系统中它也是自发进行的,因为系统会根据多个子系统之间的条件进行判断,满足条件的子系统之间就会被执行计算。

    这里系统的调度充当了物理过程中那些物理定律对应的免费的结构,只不过我们不是像物理过程那样具有各式各样的物理定律来定义不同的结构,而是定义一个统一的规则,这个规则根据输入输出类型来计算交互的条件,而这些类型本身编码了各种各样的规则。

    进化的系统

    前面两节论述了复杂系统怎样通过多系统非线性和自发的的交互,来涌现整个系统的智能,以及我们的软件架构使用怎样的机制来支撑复杂系统的这种结构特征。

    然而一个复杂系统是怎么形成的,这是另一个非常深刻的话题。传统的一个软件都是由某个公司内部大量的研发团队通过数个月以及数个不同职能的团队的协作共同完成的,它们的一个被认为理所当然以至于我们一般都不会去思考的特征是:一旦开发商发布产品,则意味着整个软件产品的功能全部开放完毕,从外界用户感知来看,他们一下子就开发出了一个功能确定且完整的产品。

    在上述这样传统的软件产品中,我们一般认为它的业务逻辑是相对容易被开发团队理解的,因为尽管业务细节都带有很多复杂性,但是一个团队研发的某个软件产品在整体逻辑上处于某个特定领域,有一些特定的逻辑,因此其复杂度基本上都是在可管理的范围之内。但如前面所述,如果一个复杂系统作为一个整体,它的复杂度是很难被人理解和管理的,那么我们应该怎样去开发一个你甚至都不能理解整体功能的复杂系统产品呢?

    回到前面电子购物的复杂系统,它呈现三个特征:

    • 首先是每个子系统都是由独立的实体在开发及运行,这是复杂系统的基本特征;
    • 其次是每个子系统内部都在独立迭代,例如交通子系统由火车到动车,由普通的公路到全国高速路网;物流公司由以前的长途配送,到增加最后一公里的送货上门,上门取件;
    • 再次,整个系统中不断有新的子系统加入,这些可能是跟其它某些子系统功能相似但是处理不同类型任务的子系统,如新增不同的电商平台,以及新增快递公司;也可能是基于现有整体系统能力延升出来的处理新的类型业务的子系统,比如外卖就是一种不同于传统电商的服务类型,但它是基于在线购物和快递发展到一定成都时候才会产生的新的服务类型,及它的出现需要基于其它系统的演进。

    从上面的过程我们可以看出,整个电子购物的复杂系统不是像传统软件那样一次性构建出来的,它们是进化出来的。所有复杂系统的功能演进都是一个进化的过程。

    下面我们来分析我们的软件架构在一个进化系统的框架下是怎么工作的。根据《复杂的引擎》一书,所有进化过程的共同特征包括以下5个要素:

    • 个体,它们一般有各种名字,比如:生物、自主体、基因、概念和公司。
    • 可遗传的特征,个体的描述信息。以某种形式编码为个体本身的一部分,生物的这种信息编码为DNA。
    • 个体可以繁殖或复制,通过这个机制,个体从父辈或之前的个体拷贝编码信息。
    • 变化机制,信息在复制、繁殖或维护过程中必须有机会产生适应度的改变。在许多系统中变化机制就是复制过程中产生的错误。
    • 基于特征的选择,繁殖(或复制)的成功必须部分取决于各个体编码信息所描述的特征。

    只要系统同时具备了这5个要素,个体组成的群体中的编码信息以及相应的个体特征就会随着时间改变;遗传的个体特性也必然会越来越适应决定繁殖(复制)成功率的标准。

    上述这是进化论中的知识,比如在生物的进化论中,生物个体携带DNA,其中编码了个体本身的特征,这些特征可以通过繁殖被复制到新的个体中,并且这个复制的过程中可以产生一定的变异,这种变异通常是随机的,进而形成一些新的特征,这些新的特征能否被保留下来,取决于自然选择,即它能不能具有更大的优势保障个体的生存。具有这种逻辑结构的系统会累积适应选择标准的编码信息。在自然和生物系统中,它们通常利用随机变化做到这一点,有时候也会利用非随机变化,以免偶然性过大,不利于产生有用或有趣的东西。因此这个信息累积和改进的过程就是概率计算,它有效的原因很简单,很小的变化通常是有可能的,而无目的的大变化基本不可能发生,通过小的并非很不可能的变化,并累积好的变化,就有可能达到本来很难达到的目标。

    进化论的思想几乎可以解释一切生物和大自然的复杂系统,但如果直接将这一套方式作用于我们的软件开发则是不合适的,首先完全依赖于随机变化的效率会比较低,其次通过漫长的自然选择则会使系统的演进很慢,想想我们人类的智力演进是多么漫长的一个过程。

    因此我们必须保留进化论的精髓,同时要在效率部分做出不同的处理。下面分析我们的架构其中包含的进化思想。

    对于计算机,进化的信息是软件代码。我们来看在我们的系统中怎样对应和解释这5个要素:

    个体:就是包含了自身功能代码的各个子系统,例如一个智能体(Agent)程序。

    可遗传的特征:我们的代码显然像DNA编码了生物个体特征意义,它编码的整个程序的特征(功能),很显然,代码是可以复制和遗传的。

    个体可以繁殖或复制:你只要复制了另一个智能体的代码或者说你的系统以某种方式可以包含或者调用另一个子系统的代码,其实这在软件中也是一种形式的复制。

    变化的机制:生物或自然系统的变化机制主要是靠随机过程,它主要体现在对编码信息的部分随机修改。我们的软件系统显然不是对已有的程序去添加一些随机的修改,因为那样的程序大部分情况下根本就无法运行。我们的随机性主要来源于一个新的开发者像一个已有的程序中添加部分能够修改程序行为的代码,举个例子,原来的程序包含A组件,现在借助我们的互操作性,这样的程序可以很方便与其它程序进行交互,现在有另一个开发者开发了一个能够与A组件进行互操作的程序,然后某个用户同时购买了A和B两个组件,那么它们整体看就是产生了变化。所以我们的子程序之间的互操作性,以及函数级的可组合性,这些都是变化的机制,我们后面会详细介绍其中的技术细节。

    在传统的软件中,我们也可以对已有的软件进行修改,从而实现类似上面这种变化。但是因为传统的软件只是对开发商内部是公开的,所以只有一个很小的团体能够改进软件,这就会使得软件的变化的概率非常小,甚至在某个程度之后停止变化,因为这个开发商的研发人员数量在整个人类完全是可以忽略的。而在一个开放的软件时间,这样的变化是完全不受限制的,因此进化的概率更大,更有可能进化出完全意想不到的结果,因为这里面能够导致变化的开发者人员的数量基数是非常大的,后面我们也将详细分析我们怎样通过简化程序结构来使得更多的非程序员可以编写程序。

    基于特征的选择:这些变化出的机制是否有效,取决于它们是否适应和满足人们的某些目标。所以当这些变化发生之后,新的子系统会产生,然后会有一部分用户有机会是使用这些新的子系统,在使用过程中,如果这些子系统很好地解决了人们对数字世界的一些需求,那么它们就会被选择,即它们适应了选择,否则这样的新的子系统则会很快被淘汰。

    这种选择机制在软件的消费中倒是非常有效,但是这种方式显然还没有真正促进软件大规模的进化,例如看看我们手机里的应用及其形态,大部分的应用已经有很多年没有太大的进化了,而相反,我们的数字世界的功能也没有变得非常的丰富和智能。这种缓慢的进化与两个要素有关,一是上面讲到的变化的缓慢,二是跟这里的选择机制有关,即人们其实没有太多选择,就导致选择并没有在整个系统中表现出很强的力量。

    现代的软件都累积了很多的功能,用户要么购买及使用整个软件,要么就使用不了软件,大部分情况下我们必须要使用其中的核心产品功能,所以不得不安装,但是其中包含的大量功能我们完全无法选择,因为没有选择这也会导致开发商并没有那么大的选择压力。

    我们的系统是一个完全动态的系统,用户可以选择完全不同的子系统组合,这也就意味着用户对每个很小的子系统有很高效的选择机制,这就会催生一个完全不同效率的进化系统。在我们系统架构中,动态性和互操作性在遗传、变化和选择这三个重要的进化要素中都发挥了重要作用,从而整体呈现出更高效的进化效率。通过这种进化的力量,演进出复杂的系统功能,从而使数字世界表现出更加智能、复杂和丰富。

    外在结构和内在结构

    前面我们从互操作和复杂系统机制的层面对RealityIS的架构哲学进行了一些介绍,在了解这两个部分的内容之后,我们再来系统地梳理一下其中的逻辑,使我们对整个系统架构有更清晰的认识。

    从整体看,RealityIS的两个设计目标或特性是:

    • 互操作性
    • 自我进化

    所有的技术思想和对现有技术的改进思路都是围绕上述两大目标的,其中互操作性解决的问题是要让任何子程序能够非常轻易地跟外界通信和交互,这既是复杂系统结构所需要的基本特性,也是实现一个广泛相互协作而繁荣的数字经济的基础,想想我们现实世界人与人、实体与实体、人与社会等各种关系都是有非常广泛而深刻的交互的,在计算机的世界,交互就是互操作。

    自我进化,是复杂系统构建和演化的核心机制,我们不是一次性通过某个实体就开发了整个系统的功能,而是通过子系统之间的相互协作来进化出各种更复杂的功能,对应的软件开发的过程中,这要求系统具有非常动态的能力,能够动态地新增或者删除子系统,同时也要求这些子系统之间具有自治的能力,这样系统才能自发地进行进化,而不需要全局干预。

    围绕着两个目标,我们发现传统的软件构造体系根本就是跟这两个目标相悖的,这主要体现在:

    • 数据与代码的耦合使软件失去了互操作性,同时也造成了中心化治理的结果
    • 局部代码在获取决策上下文时与全局信息的耦合使软件失去了自治的能力

    针对这两个问题,我们分别从区块链和复杂系统理论中寻找到对应的理论支持,使我们可以获得一个非常简洁、干净、稳定、而又功能强大的技术架构。它们形成整个技术架构的两个结构,我们称之为外部结构和内部结构,如下图所示:

    针对互操作性,我们从区块链中得到启示,尽管不是很直接,但是它为了实现去中心化采取的将数据与计算分离,并在虚拟机中在运行时对数据进行授权的技术流程,被我们很巧妙地用一套动态的类型系统进行一般化,使之能够支持更广泛的数据类型,同时又能确保用户的数据安全。这样的调整使得我们完全实现了互操作性,这种互操作性不光使得不同开发者开发的应用程序可以在一些协同计算,相互交互,更重要的是为复杂系统的构建奠定了基础:这样一个系统的功能有机会被多个自治的子系统进行融合而形成,而不是仅仅只有一家开发商构建,那样其能提供的功能的复杂度将会远远低于复杂系统。我们称这些由互操作性带来的结构为外部结构,它反应的是子系统与外界交互的能力。

    针对自我进化,我们从复杂系统的理论中得到启示,其核心的思想是自治能力,即子系统可以在不经过中央或者全局控制的情况下实现局部子系统之间的交互,因为这种交互不光带来安全隐患,还使得子系统可能会受限于中央控制器而不容易去单独扩展能力,而这是进化系统的基础。为了解决这个我们,我们从游戏开发界最新的ECS架构得到启示,并结合我们的动态类型系统,实现一个基于类型的局部自治架构,在这样的架构中,子系统只需要声明关注的数据类型,即可以定义与其它子系统之间的交互关系。围绕这些机制,我们还进一步分析了整个系统的进化过程,它遵循生物或自然界中复杂系统进化相似的原理或过程。我们称这部分结构为内在结构,它决定着一个子系统内部怎样去演进和进化。

    在内部结构和外部结构之外的系统中,用户则牢牢掌握着所有的数据权限,并通过数据权限控制着整个程序的运行,包括一个子系统是否可以访问用户的某些数据,以及一个子系统是否可以与其它子系统进行交互,甚至一个子系统即使已经被用户安装到用户的应用环境,它仍然可以通过数据被完全禁止运行。用户对数据的权限被牢牢地集成到系统的虚拟机中,


    RealityIS系统架构

    对互操作性的改进:

    • 由调用过程获取结果,变为直接获取其过程,即将被调过程执行的结果存储在一个语义数据,这样就是一个类型或者数据本身包含了互操作性,就简化为数据管理的问题(游戏中的机制)

    构建一个动态类型系统

    两个目的:

    • 类型解析,做依赖分离
    • 数据和功能分离,通过类型的解析控制,来阻止未授权程序的访问,当然实际不是运行到某个函数时在检查,而是组件可以根据类型信息提前检查出来

    动态授权很重要,如果没有这个控制,只是在Actor之间传递字符串,意味着某个Actor被执行,就无法控制它访问数据。

    建立一个互操作抽象

    逻辑抽象,不涉及编程语言与编译器开发

    简化数据获取

    简化程序结构

    复杂系统:由主动到被动自动运行

    局部驱动

    应用由主动执行到被动持续执行,跟用户的主动输入不是同步的,可能是自动执行的,用户怎么感知系统变化状态

    应用由主动执行到被动持续执行,跟用户的主动输入不是同步的,可能是自动执行的,用户怎么感知系统变化状态

    https://www.zhihu.com/question/26387327/answer/3158798538

    非中心化的系统交互

    虚拟机

    字节码

    本质上结构跟Wasm相似,可以做到很底层,都是函数级的数据,只是函数调转的机制不一样。

    {
    "magic": "0",
    "version": "1.0.0", // VM的版本号,类型的解释方法一般不变
    "inputs": [ // 内部Standard格式可能存在和用户版本不兼容,运行时检查
    {
    "User":{
    "version": "1.0.0",
    "name": "String"
    "age": "int"
    }
    }
    ],
    "standards":[
    "Car":{

    }
    ]
    "components": [
    {
    "name":"add_com",
    "inputs":[
    "User"
    ]
    "output":[]
    }
    ], // 内部方法
    "outputs": [], // 可能存在版本不兼容
    "codes"" [] // 将所有代码放在一起,Component还有其它参数信息影响缓存连贯性
    }

    inputs

    将属性定义都拷贝进Agent内部,一是方便Agent编辑,同时考虑到后面Component的参数签名是跟Standard的属性名字绑定的,并没有像传统编译器那样编译为地址,例如:

    {
    "inputs":[
    "User":{
    "version": "1.0.0",
    "name": "String"
    "age": "int"
    }
    ]
    }

    但是运行时检查到版本不一致时,自动做一些转化。

    Standard版本兼容

    为了避免不断的更新,实行两个策略:

    • 小版本必须兼容
    • 大版本必须更新Agent,否则不让运行
    小版本兼容
    • 修改字段名字
    大版本更新
    • 增加字段
    • 删除字段
    • 修改字段类型 = 删除字段 + 增加字段

    Lua与宿主交互

    类型解耦,

    Python没有Lua那样的动态类型,先支持Lua

    RealityIS技术特征

    执行流程

    传统几种模式:

    函数调用关系

    实际上是转化为程序的传统结构

    • 需要管理函数实例及其地址
    • 需要关系参数的链接

    流程顺序

    Hodini的方式

    • 不用管理函数实例
    • 按类型名字进行获取数据

    ShadeGraph

    • 管理依赖关系
    • 依赖关系由变量名称确定,即是类型的实例,即是参数的连接,只不过定义了全局参数,而不是从函数的输入输入去连

    变量名字不易于复用

    // Create the graph - it starts out empty
    cudaGraphCreate(&graph, 0);

    // For the purpose of this example, we'll create
    // the nodes separately from the dependencies to
    // demonstrate that it can be done in two stages.
    // Note that dependencies can also be specified
    // at node creation.
    cudaGraphAddKernelNode(&a, graph, NULL, 0, &nodeParams);
    cudaGraphAddKernelNode(&b, graph, NULL, 0, &nodeParams);
    cudaGraphAddKernelNode(&c, graph, NULL, 0, &nodeParams);
    cudaGraphAddKernelNode(&d, graph, NULL, 0, &nodeParams);

    // Now set up dependencies on each node
    cudaGraphAddDependencies(graph, &a, &b, 1); // A->B
    cudaGraphAddDependencies(graph, &a, &c, 1); // A->C
    cudaGraphAddDependencies(graph, &b, &d, 1); // B->D
    cudaGraphAddDependencies(graph, &c, &d, 1); // C->D

    到目前为止cuda graph的依赖需要用户手动设置。当kernel或其他操作输入变量变化时,cuda graph需要用户手动更新节点参数。

    当我们面对大量节点与输入参数时,手动来构造cuda graph和更新节点就不太现实,于是muda自动计算图就应运而生了。

    在1)部分我们定义了graph var,这些graph varmuda compute graph中只表示一种虚拟资源(muda compute graph 默认所有的虚拟资源相互之间不产生重叠,即内存不发生overlap)。一般我们会要求图的输入变量为一个viewer(他本身不拥有资源,只是一个资源的访问器,是trivially copyable的),或是一个值类型。如果你知道你在干什么,那么你也可以使用奇技淫巧。

    在2)部分,我们定义了graph nodes。注意,graph nodes的定义顺序会影响graph nodes的依赖关系,graph nodes的定义顺序应该是所有任务的逻辑顺序,这非常的intuitive!我们的所有串行代码都是这么写的。

    Cogine

    从上述的方案中总结:

    • 要想简化,都需要全局数据,不管是Houdini中的几何数据,还是ShaderGraph中由变量名字确定的全局数据,这样避免牵涉对函数细节的了解
    • 流程比实际的函数调用更简单,如Houdini和ShaderGraph
    • 用户理解流程很重要,相比由输入输出来确定参数不太利于管理和控制,比如你要修改流程就必须去修改变量名字;相同的流程在一个系统中多次执行则要定义不同语义的变量名字

    像ShaderGraph通常是固定的流程,没有Control FLow,即每个流程都会被执行,并且通常能被计算出一个线性的执行顺序使其可以保证其中定义的依赖关系。

    互操作性

    可组合性

    传统两种组合方式,一种是单纯对象级别的组合,例如Unity的Component,一种是函数式编程中的组合,通过高阶函数

    个性化

    动态性

    分布式

    语义化

    组件化

    被动式

    被通知,持续运行

    应用

    挑战

    技术挑战

    动态类型带来的性能问题

    改进语言虚拟机,去掉函数栈等控制的机制,仅保留代码执行

    编译为像WASM的字节码,WASM本身就是按函数级定义的,其实我们的机制正是对应这种,只不过函数换成我们的组件

    程序的持续运行模式

    对涌现能力的预测

    类似于游戏测试

    可能很多人的经验和知识在于去控制和发现这种结构,然后筛选出更有价值的结构,这就是进化论里面的选择。

    智能必须依赖于较大的突变和选择,较大的突变必须要有条件能够生产非常多错误的结果。

    用户体验挑战

    用户从功能管理到数据管理

    启示这已经比较普遍,只是管控的是API,但是API代表的就是一种数据的获取,

    phone-setting

    应用由主动执行到被动持续执行

    跟用户的主动输入不是同步的,可能是自动执行的,用户怎么感知系统变化状态

    我们需要被通知,而不是一个我要做什么的数字世界

    动态的数字世界

    人天生就是使用观察动态世界的,只是你要给出合适的方式,比如尤其是考虑到屏幕的交互,以及数字世界的信息量远多于现实世界

    例如股票就是这样

    传统的数字世界都是一致的,而且事实证明用户在使用一个新应用的时候,新应用带来的阻碍都很大的,不管是认知、体验、交互等等

    所以需要一致的交互体验,大模型对话式的交互方式可以大大简化传统GUI方面的复杂度和丰富性,比如小程序就是一种类似的体验,虽然应用内容不一样,但是用户使用新的应用的流程比较一致,所以并没有造成太大的阻碍。

    当然用户也不是一直在换,大体说很长一段时间还是稳定的,但是社会发现有新的有价值的应用时传播得会更快。

    少量的比较追踪科技的用户则会更习惯这种能够快速体验到新产品的节奏和感觉。

    展望

    驱动硬件创新

    驱动软件架构创新

    驱动数字形态创新

    驱动操作系统创新

    总结

    未来可能类型系统和数据集成到操作系统或手机本地的基础设施

    或者一个或多个分布式系统,但总归分布式系统的能力是更强大的,操作系统支持会简化数据的管理

    - - + + \ No newline at end of file diff --git a/zh/app/index.html b/zh/app/index.html index 407413d..d401387 100644 --- a/zh/app/index.html +++ b/zh/app/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -17,7 +17,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg b/zh/assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg deleted file mode 100644 index 0f92281..0000000 --- a/zh/assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg +++ /dev/null @@ -1,623 +0,0 @@ - - - -(a)(b) diff --git a/zh/assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg b/zh/assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg deleted file mode 100644 index 2958491..0000000 --- a/zh/assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg +++ /dev/null @@ -1,728 +0,0 @@ - - - -(a)(b)no protectiontransportprotectionmemoryapplication sandboxapplicationapplicationVMmemory sandbox diff --git a/zh/assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg b/zh/assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg deleted file mode 100644 index 9b36392..0000000 --- a/zh/assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg +++ /dev/null @@ -1,654 +0,0 @@ - - - -(b)(a)parserparser diff --git a/zh/assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg b/zh/assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg deleted file mode 100644 index e804172..0000000 --- a/zh/assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg +++ /dev/null @@ -1,506 +0,0 @@ - - - -security & parsertype systemVMprogram diff --git a/zh/assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg b/zh/assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg deleted file mode 100644 index 21d5880..0000000 --- a/zh/assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg +++ /dev/null @@ -1,511 +0,0 @@ - - - -ACB(a)(b) diff --git a/zh/assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg b/zh/assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg deleted file mode 100644 index 4d0321f..0000000 --- a/zh/assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg +++ /dev/null @@ -1,454 +0,0 @@ - - - -(a)(b) diff --git a/zh/assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg b/zh/assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg deleted file mode 100644 index 6f30776..0000000 --- a/zh/assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg +++ /dev/null @@ -1,560 +0,0 @@ - - - -(a)(b) diff --git a/zh/assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg b/zh/assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg deleted file mode 100644 index 3312b95..0000000 --- a/zh/assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg +++ /dev/null @@ -1,566 +0,0 @@ - - - -interoperabilityVM数据与功能耦合失去互操作性self-evolving局部与整体耦合失去自治能力 diff --git a/zh/assets/js/087bcfde.00fb6169.js b/zh/assets/js/087bcfde.00fb6169.js deleted file mode 100644 index 133952d..0000000 --- a/zh/assets/js/087bcfde.00fb6169.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3111],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/zh/assets/js/0c125c2b.b8426788.js b/zh/assets/js/0c125c2b.b8426788.js deleted file mode 100644 index c32c678..0000000 --- a/zh/assets/js/0c125c2b.b8426788.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6259],{4137:(t,e,l)=>{l.d(e,{Zo:()=>u,kt:()=>k});var a=l(7294);function n(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function i(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,a)}return l}function r(t){for(var e=1;e=0||(n[l]=t[l]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,l)&&(n[l]=t[l])}return n}var s=a.createContext({}),p=function(t){var e=a.useContext(s),l=e;return t&&(l="function"==typeof t?t(e):r(r({},e),t)),l},u=function(t){var e=p(t.components);return a.createElement(s.Provider,{value:e},t.children)},c="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var l=t.components,n=t.mdxType,i=t.originalType,s=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),c=p(l),m=n,k=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return l?a.createElement(k,r(r({ref:e},u),{},{components:l})):a.createElement(k,r({ref:e},u))}));function k(t,e){var l=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=l.length,r=new Array(i);r[0]=m;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=t,o[c]="string"==typeof t?t:n,r[1]=o;for(var p=2;p{l.r(e),l.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=l(7462),n=(l(7294),l(4137));const i={slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},r=void 0,o={permalink:"/zh/blog/thinking",source:"@site/blog/2021-08-26-thinking/index.md",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",description:"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002",date:"2021-08-26T00:00:00.000Z",formattedDate:"2021\u5e748\u670826\u65e5",tags:[{label:"Reality World",permalink:"/zh/blog/tags/reality-world"}],readingTime:79.295,hasTruncateMarker:!1,authors:[{name:"Chunlin Qin",title:"Creator of Reality World",url:"https://github.com/ElvisQin",imageURL:"https://github.com/ElvisQin.png"}],frontMatter:{slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},prevItem:{title:"Conversational computing: a new programming model empower LLM applications",permalink:"/zh/blog/conversational-computing"}},s={authorsImageUrls:[void 0]},p=[{value:"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f",id:"reality-world\u4e0d\u662f\u4ec0\u4e48",level:2},{value:"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01",id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce",level:3},{value:"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",level:3},{value:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",level:2},{value:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",level:3},{value:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",level:3},{value:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",level:3},{value:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",level:3},{value:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",level:3},{value:"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",level:3},{value:"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf",id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf",level:3},{value:"\u62e5\u62b1Rust",id:"\u62e5\u62b1rust",level:2},{value:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",level:2},{value:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"\u53c2\u4e0eReality World\u5f00\u53d1",id:"\u53c2\u4e0ereality-world\u5f00\u53d1",level:2},{value:"\u5173\u4e8e\u878d\u8d44",id:"\u5173\u4e8e\u878d\u8d44",level:2},{value:"\u540e\u8bb0",id:"\u540e\u8bb0",level:2}],u={toc:p},c="wrapper";function d(t){let{components:e,...i}=t;return(0,n.kt)(c,(0,a.Z)({},u,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,(0,n.kt)("img",{src:l(1694).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u53ef\u80fd\u6709\u4e00\u4e9b\u670b\u53cb\u5173\u6ce8\u8fc7\u6211\u8fd9\u4e00\u5e74\u4e00\u76f4\u5728\u6298\u817e\u7684Reality World\u521b\u4e1a\u7684\u4e8b\u60c5\uff0c\u7136\u800c\u5f88\u9057\u61be\u7684\u662f\u4e00\u76f4\u6ca1\u6709\u5206\u4eab\u592a\u591a\u5173\u4e8e\u5b83\u7684\u4fe1\u606f\u3002\u4e00\u6765\u662f\u56e0\u4e3a\u5b83\u6240\u6d89\u53ca\u7684\u6280\u672f\u6709\u6bd4\u8f83\u591a\u7684\u521b\u65b0\u5c1d\u8bd5\uff0c\u5728\u8fd8\u6ca1\u6709\u771f\u6b63\u7684\u6280\u672f\u5f00\u53d1\u5b9e\u8df5\u4e4b\u524d\u5bb9\u6613\u5f15\u8d77\u6bd4\u8f83\u591a\u7684\u4e89\u8bae\uff1b\u4e8c\u6765\u662f\u56e0\u4e3a\u53bb\u5e74\u5f97\u5230\u4e86\u4e00\u4e9b\u5927\u8d44\u672c\u6781\u5927\u7684\u5174\u8da3\uff0c\u56e0\u6b64\u6211\u60f3\u7740\u4e00\u9f13\u4f5c\u6c14\u7b49\u62ff\u5230\u6295\u8d44\u4e4b\u540e\u518d\u516c\u5e03\u4e00\u4e9b\u4fe1\u606f\u3002\u5f53\u7136\u56e0\u4e3a\u5404\u79cd\u539f\u56e0\u5230\u73b0\u5728\u4e5f\u8fd8\u6ca1\u6709\u8c08\u5b9a\u6295\u8d44\uff0c\u6240\u4ee5\u8fd1\u51e0\u4e2a\u6708\u6211\u5c31\u5c06\u5168\u90e8\u7cbe\u529b\u7528\u4e8e\u5f00\u53d1\u4e86\u3002\u7ecf\u8fc7\u51e0\u4e2a\u6708\u7684\u8270\u82e6\u594b\u6218\uff0c\u4eca\u5929\u7ec8\u4e8e\u6709\u673a\u4f1a\u53ef\u4ee5\u7ed9\u5927\u5bb6\u5206\u4eab\u4e00\u4e9b\u6211\u7684\u60f3\u6cd5\uff0c\u4ee5\u53ca\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u8fc7\u7a0b\u3002\u5f53\u7136Reality World\u8fd8\u5904\u4e8e\u975e\u5e38\u65e9\u671f\u548c\u539f\u578b\u7684\u9636\u6bb5\uff0c\u6211\u9884\u8ba1\u8fd8\u4f1a\u518d\u8fed\u4ee3\u51e0\u4e2a\u7248\u672c\u5230v0.5.0\u5de6\u53f3\u624d\u4f1a\u5f00\u59cb\u6b63\u5f0f\u516c\u5e03\u6216\u8005\u5185\u6d4b\uff0c\u6240\u4ee5\u8fd9\u91cc\u6211\u4e5f\u4e0d\u4f1a\u6d89\u53ca\u592a\u591a\u6280\u672f\u7ec6\u8282\uff0c\u4f46\u662f\u6211\u53ef\u4ee5\u5206\u4eab\u6211\u4eec\u60f3\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u4ee5\u53ca\u4e3a\u4ec0\u4e48\u8981\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0c\u5e76\u5927\u6982\u8bf4\u660e\u4e00\u4e9b\u601d\u8def\uff0c\u8fd9\u6837\u5927\u5bb6\u5e94\u8be5\u80fd\u591f\u521d\u6b65\u4e86\u89e3Reality World\u662f\u4ec0\u4e48\uff0c\u540c\u65f6\u6211\u89c9\u5f97\uff0c\u5bf9\u8fd9\u4e9b\u95ee\u9898\u7684\u601d\u8003\u5176\u5b9e\u662f\u975e\u5e38\u6709\u4ef7\u503c\u7684\u90e8\u5206\u3002"),(0,n.kt)("h2",{id:"reality-world\u4e0d\u662f\u4ec0\u4e48"},"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6211\u8fc7\u53bb\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\uff0c\u4ee5\u53caReality Create\u4e5f\u5305\u542b\u76843D\u652f\u6301\uff0c\u5728\u6211\u4e0e\u6295\u8d44\u4eba\u6216\u8005\u5176\u4ed6\u670b\u53cb\u4ea4\u6d41\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5927\u5bb6\u666e\u904d\u7684\u5370\u8c61\u662f\u8fd9\u662f\u4e00\u4e2a\u65b0\u7684\u6e38\u620f\u5f15\u64ce\uff0c\u6240\u4ee5\u5927\u5bb6\u7684\u601d\u8def\u5c31\u662f\u4f60\u8ddfUnity\uff0cUnreal Engine\u4ee5\u53ca\u751a\u81f3\u5305\u62ec\u56fd\u5185\u8fd1\u51e0\u5e74\u4e5f\u6709\u5f88\u591a\u6e38\u620f\u5f15\u64ce\u521b\u4e1a\u7684\u4e00\u4e9b\u533a\u522b\u6216\u8005\u8bf4\u7ade\u4e89\u5173\u7cfb\uff0c\u800c\u4f1a\u5ffd\u89c6\u6211\u4eec\u6280\u672f\u4e0a\u53cd\u800c\u662f\u66f4\u52a0\u6838\u5fc3\u548c\u521b\u65b0\u7684\u90e8\u5206\uff0c\u6240\u4ee5\u8fd9\u4e2a\u8bef\u533a\u7684\u6f84\u6e05\u975e\u5e38\u91cd\u8981\uff1a"),(0,n.kt)("h3",{id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce"},"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01"),(0,n.kt)("p",null,"\u867d\u7136\u6211\u672c\u4eba\u591a\u5e74\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\u90fd\u662f\u4e0e\u6e38\u620f\u5f15\u64ce\u548c\u6e32\u67d3\u76f8\u5173\uff0c\u540c\u65f6\u73b0\u4ee3\u6e38\u620f\u5f15\u64ce\u5de5\u4e1a\u7684\u6280\u672f\u4e5f\u5728\u4e0d\u65ad\u53d1\u5c55\uff0c\u4f46\u662f\u6211\u4e00\u76f4\u89c9\u5f97\u5236\u7ea6\u7528\u6237\u968f\u5fc3\u6240\u6b32\u8868\u8fbe\u5185\u5bb9\u548c\u903b\u8f91\u7684\u90e8\u5206\u4e3b\u8981\u8fd8\u662f\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7a0b\u5e8f\u8fd0\u884c\u7684\u673a\u5236\uff0c\u800c\u6e38\u620f\u5f15\u64ce\u67b6\u6784\u548c\u6d41\u7a0b\u672c\u8eab\u867d\u7136\u4e5f\u5f88\u590d\u6742\uff0c\u4f46\u8fd9\u90e8\u5206\u90fd\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u7684\uff0c\u4f8b\u5982\u9664\u4e86\u7f16\u7a0b\u90e8\u5206\uff0c\u4e00\u4e9b\u7f8e\u672f\u751a\u81f3\u7b56\u5212\u4e5f\u662f\u80fd\u591f\u6bd4\u8f83\u597d\u7684\u4f7f\u7528\u5f15\u64ce\u7684\u4e00\u4e9b\u76f8\u5173\u529f\u80fd\uff0c\u4f46\u662f\u4e0e\u4e4b\u76f8\u53cd\u7684\u662f\uff0c\u903b\u8f91\u7684\u8868\u8fbe\u548c\u7f16\u7a0b\u901a\u5e38\u8fd8\u662f\u9700\u8981\u4e13\u95e8\u7684\u7a0b\u5e8f\u5458\u3002\u867d\u7136\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u6e38\u620f\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6216\u8005\u914d\u7f6e\u7684\u5f62\u5f0f\u90e8\u5206\u5b9e\u73b0\u975e\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f46\u8fd9\u6837\u7684\u67b6\u6784\u8fd8\u662f\u5f88\u96be\u505a\u5230\u901a\u7528\uff0c\u663e\u7136\u6570\u5b57\u4e16\u754c\u8fd8\u6709\u7740\u975e\u5e38\u591a\u7684\u5404\u5f0f\u5404\u6837\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u9700\u6c42\u9700\u8981\u4e00\u4e9b\u901a\u7528\u7684\u903b\u8f91\u8868\u8fbe\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u7684\u6838\u5fc3\u662f\u4e00\u5957\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u90e8\u5206\u7406\u89e3\u4e3a\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u4f46\u662f\u4e0e\u4f20\u7edf\u5355\u7eaf\u89e3\u91ca\u6e90\u4ee3\u7801\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u865a\u62df\u673a\u76f8\u6bd4\uff0c\u5b83\u5305\u542b\u4e00\u4e9b\u6e90\u4ee3\u7801\u89e3\u91ca\u7ffb\u8bd1\u4e4b\u5916\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6743\u9650\u9a8c\u8bc1\u3001\u6c99\u76d2\u5b89\u5168\u4e0e\u4e92\u64cd\u4f5c\u3001\u5206\u5e03\u5f0f\u5185\u5bb9\u5206\u53d1\u4e0e\u540c\u6b65\u3001\u7ec4\u4ef6\u7684\u4f9d\u8d56\u7ba1\u7406\u548c\u52a8\u6001\u52a0\u8f7d\u7b49\u7b49\uff0c\u56e0\u6b64\u53ef\u4ee5\u7406\u89e3\u4e3aReality World\u662f\u4e00\u4e2a\u50cf\u533a\u5757\u94fe\u7c7b\u4f3c\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff1b\u540c\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u6e90\u4ee3\u7801\u7684\u7ffb\u8bd1\u89e3\u91ca\u90e8\u5206\uff0cReality World\u4e5f\u6709\u7740\u5f88\u591a\u533a\u522b\u4e8e\u4f20\u7edf\u52a8\u6001\u8bed\u8a00\u865a\u62df\u673a\u89e3\u91ca\u7684\u6d41\u7a0b\u548c\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u8fd9\u5957\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6211\u4eec\u4f1a\u6784\u5efa3D\u5f15\u64ce\u7684\u80fd\u529b\u4ee5\u4f7f\u7528\u6237\u53ef\u4ee5\u5f00\u53d13D\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u8fd9\u90e8\u5206\u6280\u672f\u8ddf\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u4f7f\u7528\u7684\u6280\u672f\u4e0d\u4f1a\u6709\u592a\u5927\u5dee\u5f02\uff0c\u5f53\u7136\u56e0\u4e3a\u8fd0\u884c\u65f6\u73af\u5883\u4e0d\u540c\uff0c\u4e0e\u4e4b\u76f8\u5173\u76843D\u5f15\u64ce\u7684\u67b6\u6784\u548c\u6d41\u7a0b\u80af\u5b9a\u4f1a\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u9884\u671f\u5c06\u6765Reality Create\u7684\u6d41\u7a0b\u5e94\u8be5\u662f\u53ef\u4ee5\u6709\u4e00\u4e9b\u4e0d\u540c\u7684\u521b\u65b0\u4f53\u9a8c\u7684\u3002"),(0,n.kt)("p",null,"\u9664\u4e863D\u6e32\u67d3\uff0cReality Create\u7684\u8ba1\u5212\u4e5f\u53ef\u4ee5\u5f00\u53d12D\u5e94\u7528\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528\u4e00\u79cd\u7edf\u4e00\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6765\u7edf\u4e003D\u548c\u4f20\u7edf2D\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u6240\u4ee5\u5b83\u786e\u5207\u7684\u5b9a\u4f4d\u5e94\u8be5\u662f\u4e00\u4e2a\u57fa\u4e8e\u5206\u5e03\u5f0f\u7684\u3001\u901a\u7528\u7684\u5e94\u7528\u6784\u9020\u548c\u5f00\u53d1\u5e73\u53f0\uff0c\u800c\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u3002"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5173\u7684\u662f\uff0c"),(0,n.kt)("h3",{id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"},"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\uff0c\u81f3\u5c11\u76ee\u524d\u7684\u5143\u5b87\u5b99\u5927\u90e8\u5206\u90fd\u662f\u504f\u5411\u4e8e3D\uff0c\u7136\u540e\u671f\u671b\u4eba\u4eec\u6709\u4e9b\u66f4\u591a\u6c89\u6d78\u5f0f\u7684\u865a\u62df\u751f\u6d3b\u3002\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u8ddfReality World\u7684\u7406\u5ff5\u751a\u81f3\u662f\u76f8\u53cd\u7684\uff0c\u4ece\u540d\u5b57\u5c31\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u9009\u62e9Reality\u8fd9\u4e2a\u8bcd\uff0c\u662f\u5e0c\u671b\u6211\u4eec\u80fd\u591f\u5f15\u5bfc\u7528\u6237\u66f4\u591a\u5173\u6ce8\u73b0\u5b9e\uff0cReality World\u7684\u76ee\u6807\u662f\u5e0c\u671b\u901a\u8fc7\u63d0\u4f9b\u66f4\u7b80\u5316\u3001\u66f4\u5177\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f7f\u66f4\u591a\u7684\u4eba\u80fd\u591f\u968f\u5fc3\u6240\u6b32\u5730\u8868\u8fbeTA\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\uff0c\u5e76\u5c06\u8fd9\u4e9b\u7406\u89e3\u8f6c\u5316\u4e3a\u53ef\u4ea4\u4e92\u7684\u6570\u5b57\u7684\u5f62\u5f0f\uff0c\u4e0e\u5176\u4ed6\u66f4\u591a\u4eba\u5206\u4eab\uff0c\u6211\u89c9\u5f97\u5e94\u7528\u7684\u5f00\u53d1\u548c\u6784\u9020\u4e0e\u6587\u5b57\u3001\u56fe\u7247\u3001\u89c6\u9891\u4ee5\u53ca\u5176\u4ed6\u4fe1\u606f\u8f7d\u4f53\u4e00\u6837\uff0c\u6700\u5927\u7684\u4ef7\u503c\u4ecd\u7136\u662f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u6700\u6df1\u523b\u7684\u601d\u8003\u3001\u667a\u6167\u548c\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u6211\u5fc3\u91cc\u9762\u5bf9Reality World\u7684\u6700\u7cbe\u51c6\u7684\u63cf\u8ff0\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A self-evolving interoperable system.")),(0,n.kt)("p",null,"\u6216\u8005\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperating with multi-applications in a modular and composable system.")),(0,n.kt)("p",null,"\u4e5f\u8bb8\u770b\u4e86\u540e\u9762\u7684\u4e00\u4e9b\u4ecb\u7ecd\u4f60\u80fd\u591f\u5927\u6982\u7406\u89e3\u4e0a\u9762\u4e24\u53e5\u8bdd\u7684\u542b\u4e49"),(0,n.kt)("h2",{id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"},"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(1072).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u662fReality World\u6700\u6838\u5fc3\u7684\u673a\u5236"),(0,n.kt)("p",null,"\u6211\u5370\u8c61\u4e2d\uff0c\u5de5\u4e1a\u754c\u548c\u5a92\u4f53\u5f00\u59cb\u771f\u6b63\u8ba8\u8bba\u4e92\u64cd\u4f5c\u6027\u53ca\u5176\u76f8\u5173\u7684\u4e00\u4e9b\u8bba\u636e\uff0c\u5927\u90e8\u5206\u90fd\u6765\u6e90\u4e8eTim Sweeney\u7684\u90a3\u7bc7\u6f14\u8bb2\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/10.1145/3306307.3339844"},"https://dl.acm.org/doi/10.1145/3306307.3339844")),(0,n.kt)("p",null,"\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0cReality World\u7684\u76ee\u6807\u8ddfTim\u7684\u4e00\u4e9b\u63cf\u8ff0\u548c\u613f\u666f\u662f\u76f8\u4f3c\u7684\uff0c\u4f46\u4e5f\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6839\u672c\u4e0d\u540c\uff0c\u6211\u9996\u5148\u63cf\u8ff0\u8ddfTim\u6f14\u8bb2\u7684\u4e00\u4e9b\u5173\u7cfb\u548c\u903b\u8f91\uff0c\u7136\u540e\u518d\u4ecb\u7ecd\u6211\u4eec\u7684\u601d\u8003\uff0c\u901a\u8fc7\u8fd9\u4e9b\u95ee\u9898\u5c31\u53ef\u4ee5\u6bd4\u8f83\u81ea\u7136\u5730\u7406\u89e3Reality World\u7684\u76ee\u6807\u4ee5\u53ca\u60f3\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\u6211\u7b2c\u4e00\u6b21\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u662f\u5728\u53bb\u5e747\u6708\u5de6\u53f3\uff0c\u90a3\u4e2a\u65f6\u5019\u6211\u7684\u57fa\u672c\u67b6\u6784\u7684\u6784\u601d\u5df2\u7ecf\u521d\u6b65\u5b8c\u6210\uff0c\u5c24\u5176\u662f\u6700\u6838\u5fc3\u4e5f\u662f\u6700\u91cd\u8981\u7684\u4e00\u6b65\u57fa\u7840\u5df2\u7ecf\u8bbe\u8ba1\u597d\uff0c\u5f53\u65f6\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u611f\u5230\u5f88\u591a\u5171\u9e23\uff0c\u4e5f\u662f\u5bf9\u81ea\u5df1\u7684\u4e00\u79cd\u5f88\u5927\u7684\u6fc0\u52b1\uff0c\u6bd5\u7adf\u6709\u5bf9\u6280\u672f\u548c\u884c\u4e1a\u90fd\u6709\u975e\u5e38\u7ecf\u9a8c\u548c\u5f71\u54cd\u529b\u7684\u5927\u4f6c\u4e5f\u6709\u7c7b\u4f3c\u7684\u601d\u8003\u548c\u884c\u52a8\u3002\u4f46\u4ece\u53bb\u5e74\u5230\u73b0\u5728\uff0c\u6211\u4eec\u8fd8\u662f\u6cbf\u7740\u6211\u4eec\u65e9\u5148\u7684\u6280\u672f\u601d\u8def\uff0c\u57fa\u672c\u4e0a\u5e76\u6ca1\u6709\u53bb\u5173\u6ce8\u548c\u53c2\u8003\u592a\u591aEpic\u7684\u4e1c\u897f\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u4ece\u6280\u672f\u65b9\u6848\u5230\u76ee\u6807\u90fd\u662f\u6709\u5f88\u591a\u4e0d\u540c\u3002"),(0,n.kt)("p",null,"\u5728\u6280\u672f\u5c42\u9762\uff0cTim\u8ba4\u4e3a\u8fd9\u6837\u7684\u76ee\u6807\u5927\u6982\u53ef\u80fd\u9700\u898110\u5e74\u624d\u80fd\u5b8c\u6210\uff0c\u4f46Epic\u4f1a\u671d\u7740\u8fd9\u4e2a\u76ee\u6807\u9010\u6b65\u903c\u8fd1\u3002Epic\u7684\u8def\u7ebf\u5927\u6982\u662f\u51e0\u6b65\uff1a\u9996\u5148\u5c06\u4e00\u4e9b\u504f\u793e\u4ea4\u6216\u8005\u73a9\u5bb6\u7684\u975e\u4e13\u4e1a\u6e38\u620f\u5f00\u53d1\u8005\u8f6c\u79fb\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\uff0c\u8fd9\u90e8\u5206\u5f00\u53d1\u8005\u90fd\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u6e38\u620f\u5185\u90e8\u800c\u4e0d\u662f\u5355\u72ec\u4f7f\u7528Unreal Engine\u53bb\u521b\u4f5c\uff0c\u8fd9\u4e2a\u6a21\u5f0f\u5176\u5b9e\u7c7b\u4f3cRoblox\u7684\u6a21\u5f0f\uff0c\u5b83\u4e5f\u662f\u4e00\u79cd\u6e38\u620f\u5f15\u64ce\u8fd9\u79cd\u5546\u4e1a\u6a21\u5f0f\u7684\u8f6c\u578b\uff1a\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u53ea\u662f\u4e00\u4e2a\u5355\u673a\u7684\u751f\u6210\u5e94\u7528\u7a0b\u5e8f\u7684\u8f6f\u4ef6\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5185\u5bb9\u7531\u81ea\u5df1\u53bb\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837\u6e38\u620f\u5f15\u64ce\u4ec5\u4f5c\u4e3a\u4e00\u4e2a\u5de5\u5177\uff0c\u5b83\u53ea\u53c2\u4e0e\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u800c\u65e0\u6cd5\u53c2\u4e0e\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u56e0\u6b64\u65e0\u6cd5\u5f62\u6210\u751f\u6001\uff0c\u6240\u4ee5\u5c3d\u7ba1\u4e00\u4e9b\u5f15\u64ce\u6709\u5e9e\u5927\u7684\u5f00\u53d1\u8005\u6570\u91cf\u548c\u7fa4\u4f53\uff0c\u4f46\u662f\u8fd9\u79cd\u6570\u91cf\u5e76\u6ca1\u6709\u5f88\u6709\u6548\u7684\u65b9\u5f0f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u751f\u6001\u3002\u7136\u800cRoblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f60\u7684\u5185\u5bb9\u5fc5\u987b\u5206\u53d1\u5230\u8fd9\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5e76\u7531\u7279\u5b9a\u7684\u5ba2\u6237\u7aef\u8fd0\u884c\u65f6\u73af\u5883\u6765\u8fd0\u884c\uff0c\u800c\u65e0\u6cd5\u50cf\u5355\u72ec\u7684\u6e38\u620f\u5f15\u64ce\u90a3\u6837\u81ea\u884c\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837Roblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5c31\u53ef\u4ee5\u53c2\u4e0e\u6574\u4e2a\u5185\u5bb9\u7684\u5168\u90e8\u751f\u547d\u5468\u671f\uff0c\u8fd9\u6837\u5c31\u5f62\u6210\u751f\u6001\uff0c\u5176\u4ed6\u7684\u670d\u52a1\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u5957\u5206\u5e03\u5f0f\u7cfb\u7edf\u8fdb\u884c\u63d0\u4f9b\uff0c\u800c\u5bf9\u7528\u6237\u7684\u597d\u5904\u4e5f\u662f\u7b80\u5316\u4e86\u5185\u5bb9\u7684\u5206\u53d1\u90e8\u7f72\uff0c\u4ee5\u53ca\u66f4\u591a\u4fbf\u6377\u7684\u96c6\u6210\u670d\u52a1\uff0c\u4f8b\u5982\u4e0e\u5176\u4ed6\u73a9\u5bb6\u7684\u4e92\u52a8\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9606).Z,width:"1932",height:"1162"})),(0,n.kt)("p",null,"\u300a\u5821\u5792\u4e4b\u591c\u300bCreative\u6a21\u5f0f"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8981\u4f7f\u7528\u6237\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fdb\u884c\u5185\u5bb9\u5f00\u53d1\uff0c\u5c31\u5e26\u6765\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a\u4e00\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u95ee\u9898\uff0c\u4e8c\u662f\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\u3002\u8981\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fd0\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u672a\u53d7\u4fe1\u4efb\u7684\u4ee3\u7801\uff0c\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u96be\u7684\u95ee\u9898\uff0c\u8fd9\u4e5f\u6d89\u53ca\u5230Reality World\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u6838\u5fc3\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9467).Z,width:"1446",height:"486"})),(0,n.kt)("p",null,"\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"NaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002"),(0,n.kt)("p",null,"Web Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9875).Z,width:"1920",height:"1079"})),(0,n.kt)("p",null,"Epic\u63a8\u51faVerse language"),(0,n.kt)("p",null,"\u56de\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\uff0cEpic\u663e\u7136\u4e0d\u53ef\u80fd\u8ba9\u73a9\u5bb6\u4f7f\u7528Unreal Engine\u7684C++\u6216\u8005blueprint\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u5185\u5b58\u73af\u5883\u4e2d\u8fd0\u884c\uff0cUnreal Engine\u76ee\u524d\u4e5f\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\u65b9\u6848\uff0c\u56e0\u6b64Epic\u9700\u8981\u5f00\u53d1\u4e00\u5957\u65b0\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u5c31\u662f\u4eca\u5e74\u65e9\u4e9b\u65f6\u5019\u53d1\u5e03\u7684Verse programming language\u3002Epic\u4e3a\u6b64\u6316\u6765\u4e86Haskell\u7684\u4f5c\u8005Simon Peyton Jones\uff0c\u4ee5\u53ca\u4e4b\u524d\u6536\u8d2d\u7684\u4e00\u4e2a\u4e3aUnreal Engine\u5f00\u53d1\u811a\u672c\u8bed\u8a00\u7684\u56e2\u961fSkookumScript\uff0c\u636e\u8bf4\u8fd8\u6709\u5199V8\u5185\u6838\u7684\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u5173\u4e8eVerse language\u672c\u8eab\uff0c\u76ee\u524d\u8fd8\u6ca1\u6709\u592a\u591a\u4fe1\u606f\uff0c\u4f46\u662f\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u7684\u4f7f\u547d\u4e00\u662f\u4e3a\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u521b\u4f5c\u63d0\u4f9b\u4e00\u79cd\u5b89\u5168\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u800c\u4e14\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u5fc5\u7136\u5305\u542b\u4e00\u5b9a\u7684\u6c99\u76d2\u673a\u5236\uff0c\u6765\u4fdd\u8bc1\u5b89\u5168\u6027\u3002"),(0,n.kt)("p",null,"\u534f\u4f5c\u7684\u7b2c\u4e8c\u4e2a\u8981\u6c42\u662f\u4e92\u64cd\u4f5c\uff0c\u4e92\u64cd\u4f5c\u6027\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"If two or more systems use commondata formatsandcommunication protocolsand are capable of communicating with each other, they exhibit",(0,n.kt)("em",{parentName:"p"},"syntactic interoperability"),". XML and SQL are examples of common data formats and protocols.")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u548c\u8f6f\u4ef6\u9694\u79bb\u901a\u5e38\u662f\u76f8\u4e92\u77db\u76fe\u7684\uff0c\u4e92\u64cd\u4f5c\u8868\u73b0\u4e3a\u6211\u5e0c\u671b\u66f4\u7b80\u5355\u66f4\u65b9\u4fbf\u5730\u8bbf\u95ee\u522b\u4eba\u7684\u6570\u636e\u6216\u63a5\u53e3\uff0c\u800c\u9694\u79bb\u5219\u5047\u8bbe\u9664\u6211\u4e4b\u5916\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u53ef\u4fe1\u7684\uff0c\u4e0d\u8981\u8f7b\u6613\u5730\u8bbf\u95ee\uff0c\u6216\u8005\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\u4f7f\u8fd9\u79cd\u8bbf\u95ee\u7684\u4ee3\u4ef7\u548c\u96be\u5ea6\u589e\u52a0\u3002\u5c24\u5176\u5728\u6e38\u620f\u8fd9\u79cd\u5b9e\u65f6\u7684\u8fd0\u884c\u73af\u5883\uff0c\u8fd9\u79cd\u4ee3\u4ef7\u548c\u96be\u5ea6\u5f80\u5f80\u610f\u5473\u7740\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"Tim\u57282019\u5e74\u7684\u6f14\u8bb2\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u540e\u7eed\u57fa\u4e8eVerse\u7684\u4ee3\u7801\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0cReality World\u90fd\u6709\u7740\u4e0d\u540c\u7684\u6280\u672f\u601d\u8003\u548c\u65b9\u6848\u3002"),(0,n.kt)("h3",{id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"},"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"),(0,n.kt)("p",null,"\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cReality World\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"},"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u6027\u8fd9\u4e2a\u6982\u5ff5\uff0c\u6211\u8ddf\u5927\u90e8\u5206\u6295\u8d44\u4eba\u89e3\u91ca\u57fa\u672c\u4e0a\u90fd\u662f\u5f88\u96be\u7406\u89e3\u7684\uff0c\u5f53\u7136\u8fd9\u91cc\u53ef\u80fd\u6211\u5bf9\u4e92\u64cd\u4f5c\u6027\u8d4b\u4e88\u4e86\u66f4\u591a\u7684\u610f\u4e49\u3002\u4ece\u7a0b\u5e8f\u673a\u5236\u4e0a\u6765\u8bb2\uff0c\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u6d89\u53ca\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c\u76f8\u4e92\u8c03\u7528\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5927\u90e8\u5206\u8bed\u8a00\u90fd\u53ef\u4ee5\u901a\u8fc7C\u63a5\u53e3\u5b9e\u73b0\u76f8\u4e92\u8c03\u7528\uff0c\u518d\u5f80\u4e0a\u4e00\u70b9\uff0c\u4efb\u4f55\u7a0b\u5e8f\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\u7136\u540e\u5185\u90e8\u8fdb\u884c\u683c\u5f0f\u89e3\u91ca\uff0c\u4e5f\u4ecd\u7136\u662f\u80fd\u591f\u8fdb\u884c\u901a\u4fe1\u7684\u3002\u5b9e\u9645\u4e0a\u4e92\u8054\u7f51\u7684\u673a\u5236\u5c31\u662f\u5982\u6b64\uff0cOSI\uff08Open systems Interconnection\uff09\u7684\u673a\u5236\u5c31\u662f\u5b9e\u73b0\u4e86\u4efb\u4f55\u8ba1\u7b97\u673a\u6216\u8005\u4efb\u610f\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5b57\u7b26\u4e32\u901a\u4fe1\uff0c\u4ece\u800c\u89e3\u51b3\u4e86\u6574\u4e2a\u8ba1\u7b97\u673a\u7f51\u7edc\u4e92\u8054\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u7684\u5176\u4e2d\u4e00\u4e2a\u91cd\u8981\u673a\u5236\uff0c\u5c31\u662f\u8981\u8ba9\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\uff0c\u5176\u5b9a\u4e49\u7684\u6570\u636e\u63a5\u53e3\u975e\u5e38\u8f7b\u6613\u5730\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u8bbf\u95ee\uff0c\u540c\u65f6\u7ed3\u5408\u4e0a\u9762\u7684\u6c99\u76d2\u6280\u672f\u4fdd\u8bc1\u8fd9\u79cd\u6570\u636e\u8bbf\u95ee\u7684\u5b89\u5168\uff0c\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u7684\u6c99\u76d2\u6280\u672f\u4e0d\u80fd\u53ea\u662f\u5728\u6700\u5e95\u5c42\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9984).Z,width:"1954",height:"864"})),(0,n.kt)("p",null,"Pixar USD"),(0,n.kt)("p",null,"\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"API\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-text"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("p",null,"\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3819).Z,width:"2157",height:"1113"})),(0,n.kt)("p",null,"Modular"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cReality World\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002"),(0,n.kt)("p",null,"\u7ed3\u5408\u524d\u9762\u8ba8\u8bba\u7684\u6c99\u76d2\u6280\u672f\u3001\u4e92\u64cd\u4f5c\u3001\u788e\u7247\u5316\u7b49\u7b49\u673a\u5236\uff0cReality World\u5e0c\u671b\u80fd\u591f\u901a\u8fc7\u4e00\u4e9b\u521b\u65b0\u63a2\u7d22\uff0c\u6784\u5efa\u8d77\u4e00\u4e2a\u66f4\u597d\u7684\u4e92\u64cd\u4f5c\u5e73\u53f0\uff0c\u4f7f\u5f97\u4e0a\u9762\u7684\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u5b83\u770b\u8d77\u6765\u50cf\u662f\u57fa\u4e8eOSI\u4e4b\u4e0a\u6dfb\u52a0\u7684\u4e00\u4e2a\u4e92\u64cd\u4f5c\u5c42\uff0c\u5728\u8fd9\u4e2a\u4e92\u64cd\u4f5c\u5c42\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u64cd\u4f5c\u7684\u662f\u6765\u81ea\u5176\u4ed6\u5e94\u7528\u7684\u5185\u5b58\u6570\u636e\uff0c\u5c31\u50cf\u4f60\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u6570\u636e\u4e00\u6837\u7b80\u5355\uff0c\u5c3d\u7ba1\u8fd9\u4e2a\u6570\u636e\u53ef\u80fd\u6765\u81ea\u4e8e\u5176\u4ed6\u7684\u670d\u52a1\u5668\u3002"),(0,n.kt)("h2",{id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(2382).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u5bf9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u5f88\u591a\u8c03\u6574"),(0,n.kt)("p",null,"\u6211\u4eec\u7a0b\u5e8f\u5458\uff0c\u7ec8\u5176\u4e00\u751f\u53ef\u80fd\u90fd\u5e0c\u671b\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u7a0b\u5e8f\u5230\u5e95\u662f\u600e\u4e48\u8fd0\u884c\u7684\uff0c\u8fd9\u79cd\u7406\u89e3\u4e0d\u5149\u80fd\u591f\u8ba9\u6211\u4eec\u66f4\u9ad8\u6548\u5730\u7f16\u5199\u66f4\u5065\u58ee\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u521b\u9020\u8f6f\u4ef6\u7684\u4ef7\u503c\uff0c\u540c\u65f6\uff0c\u7f16\u7a0b\u7684\u673a\u5236\u672c\u8eab\u5145\u6ee1\u7740\u65e0\u7a77\u7684\u9b45\u529b\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4eba\u7c7b\u6709\u53f2\u4ee5\u6765\u80fd\u591f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u590d\u6742\u7684\u601d\u7ef4\u548c\u903b\u8f91\u7684\u6700\u597d\u7684\u673a\u5236\u4e4b\u4e00\uff0c\u5b83\u5c06\u4eba\u7c7b\u5bf9\u7269\u7406\u4e16\u754c\u7684\u7406\u89e3\u53ca\u5176\u5f62\u6210\u7684\u667a\u6167\u8f6c\u5316\u4e3a\u4e3a\u4eba\u7c7b\u670d\u52a1\u7684\u5de5\u5177\u548c\u529b\u91cf\uff0c\u8fd9\u662f\u6211\u4eec\u70ed\u7231\u7f16\u7a0b\u7684\u5176\u4e2d\u4e00\u4e9b\u539f\u56e0\u3002"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u6765\uff0c\u5bf9\u4e8e\u7f16\u7a0b\uff0c\u6211\u4e00\u76f4\u6709\u4e24\u79cd\u4e0d\u4e00\u6837\u7684\u60c5\u611f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6211\u4e00\u76f4\u4e0d\u559c\u6b22\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u6211\u66f4\u559c\u6b22\u5f00\u53d1\u80fd\u591f\u7528\u4e8e\u6784\u9020\u8f6f\u4ef6\u7684\u8f6f\u4ef6")),(0,n.kt)("p",null,"\u4eca\u5929\uff0cReality World\u7684\u7b2c\u4e8c\u4e2a\u6838\u5fc3\u5173\u6ce8\u70b9\u548c\u57fa\u7840\u5c31\u662f\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u65b0\u7684\u63a2\u7d22\u3002\u4e16\u754c\u4e0a\u53ea\u6709\u5927\u7ea6\u4e0d\u52300.5%\u7684\u4eba\u662f\u4f1a\u7f16\u5199\u4ee3\u7801\u7684\uff0c\u7ea63000\u4e07\u5de6\u53f3\uff0c\u6240\u4ee5\u6570\u5b57\u5316\u8868\u8fbe\u7684\u6f5c\u529b\u8fd8\u8fdc\u8fdc\u6ca1\u6709\u88ab\u53d1\u6325\u51fa\u6765\u3002\u5982\u679c\u6211\u4eec\u5c06\u8fd9\u4e2a\u6570\u5b57\u63d0\u5347\u52305\u4ebf~10\u4ebf\uff0c\u770b\u770b\u8fd8\u6709\u54ea\u4e9b\u53d8\u9769\u9700\u8981\u53d1\u751f\uff0c\u53ef\u80fd\u4e0e\u4f60\u60f3\u8c61\u4e2d\u4e0d\u592a\u4e00\u6837\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u672c\u8eab\u53ef\u80fd\u5e76\u4e0d\u662f\u5236\u7ea6\u56e0\u7d20\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"},"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u5de5\u4f5c\u7ecf\u5386\uff0c\u6211\u5199\u8fc7C#\u3001C\u3001C++\u3001Ruby\u3001Lua\u3001Rust\u7b49\uff0c\u4ee5\u53ca\u6700\u8fd1\u4e00\u5e74\u591a\uff0c\u6211\u51e0\u4e4e\u770b\u4e86\u6240\u6709\u80fd\u4e70\u5230\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u7b49\u76f8\u5173\u7684\u4e66\u7c4d\uff08\u540e\u9762\u4f1a\u4ecb\u7ecd\uff09\u3002\u5728\u6211\u5199\u8fc7\u7684\u4ee3\u7801\u4e2d\uff0c\u603b\u6709\u4e00\u79cd\u611f\u89c9\uff0c\u4e0d\u7ba1\u6211\u770b\u8fc7\u591a\u5c11\u8bbe\u8ba1\u6a21\u5f0f\u6216\u8005\u67b6\u6784\u76f8\u5173\u7684\u8d44\u6599\uff0c\u6211\u603b\u662f\u89c9\u5f97\u5f88\u96be\u5199\u51fa\u90a3\u79cd\u903b\u8f91\u7ed3\u6784\u7279\u522b\u6e05\u6670\u7684\u67b6\u6784\u548c\u4ee3\u7801\uff0c\u56e0\u6b64\u7f16\u7a0b\u4f53\u9a8c\u50cf\u662f\u603b\u6709\u4e00\u4e2a\u4ec0\u4e48\u4e1c\u897f\uff0c\u5835\u5728\u6211\u7684\u5fc3\u91cc\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u77e5\u4e4e "),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/people/16d0cb25df98c0c909e60b135a5800c5"},"@\u5927\u5bbd\u5bbd")),(0,n.kt)("p",null," \u6709\u4e00\u7bc7\u56de\u7b54\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/29888990/answer/703226836"},"\u5982\u4f55\u770b\u5f85Erlang\u4e4b\u7236Joe Armstrong\u89c9\u5f97OO\u7f16\u7a0b\u5f88\u70c2\uff1f"),"\uff0c\u5176\u4e2d\u5f15\u7528\u5230Erlang\u4e4b\u7236Joe Armstrong\u7684\u4e00\u6bb5\u91c7\u8bbf\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/"},"Ralph Johnson, Joe Armstrong on the State of OOP")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Alan Kay himself wrote this famous thing and said ",(0,n.kt)("strong",{parentName:"p"},'"The notion of object oriented programming is completely')," ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"misunderstood"),(0,n.kt)("strong",{parentName:"p"},". It's not about objects and classes, it's all about messages"),'". He wrote that and he said that the initial ',(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"reaction")," to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.")),(0,n.kt)("p",null,"Alan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(6081).Z,width:"1155",height:"697"})),(0,n.kt)("p",null,"Erlang\u4e4b\u7236Joe Armstrong\uff08\u53f3\uff09"),(0,n.kt)("p",null,"Erlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about")),(0,n.kt)("p",null,"\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002Reality World\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002"),(0,n.kt)("h3",{id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u800c\u8a00\uff0c\u5f53\u524d\u6709\u5f88\u591aScratch\u7f16\u7a0b\u5e73\u53f0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7b80\u5355\u7684\u4efb\u52a1\uff1a\u5373\u53ea\u6709\u5c11\u91cf\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u4e14\u901a\u5e38\u53ea\u6709\u4e00\u4e2a\u6216\u5c11\u6570\u51e0\u4e2a\u51fd\u6570\u7684\u4efb\u52a1\uff0c\u5927\u90e8\u5206\u6709\u4e00\u4e9b\u57fa\u672c\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u80fd\u529b\u7684\u4eba\u662f\u53ef\u4ee5\u5728\u5f88\u77ed\u65f6\u95f4\u5185\u5b66\u4f1a\u7684\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u7eaf\u7684\u903b\u8f91\u8ba1\u7b97\u5e76\u4e0d\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002\u5728\u300a\u8ba1\u7b97\u673a\u7a0b\u5e8f\u7684\u6784\u9020\u548c\u89e3\u91ca\u300b\u4e00\u4e66\u4e2d\u6307\u51fa\uff0c\u7f16\u7a0b\u6a21\u578b\u672c\u8d28\u4e0a\u8981\u89e3\u51b3\u7684\u662f\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u4e0d\u7ba1\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u6b63\u662f\u8fd9\u4e9b\u4e3a\u4e86\u5e2e\u52a9\u4eba\u4eec\u7ba1\u7406\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u673a\u5236\uff0c\u63d0\u5347\u4e86\u7f16\u7a0b\u7684\u95e8\u69db\uff0c\u4f8b\u5982\u975e\u7a0b\u5e8f\u5458\u80af\u5b9a\u53ef\u4ee5\u5f88\u5feb\u7406\u89e3\u7c7b\u548c\u5bf9\u8c61\u7684\u6982\u5ff5\uff0c\u4f46\u662f\u7406\u89e3\u865a\u51fd\u6570\u548c\u591a\u6001\u5c31\u662f\u53e6\u5916\u4e00\u56de\u4e8b\u4e86\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u673a\u5236\u7684\u6dfb\u52a0\u770b\u8d77\u6765\u662f\u7406\u6240\u5f53\u7136\u7684\uff0c\u4f46\u662f\u7a0d\u5fae\u6df1\u5165\u7406\u89e3\u4e00\u4e0b\u7f16\u7a0b\u8bed\u8a00\u7684\u7f16\u8bd1\u8fc7\u7a0b\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u662f\u8ddf\u5e95\u5c42\u7684\u7f16\u8bd1\u673a\u5236\u76f8\u5173\u7684\uff0c\u800c\u73b0\u4ee3\u7684\u7f16\u8bd1\u6d41\u7a0b\u53c8\u51e0\u4e4e\u662f\u4e0e\u5e95\u5c42\u7684\u786c\u4ef6\u67b6\u6784\u6709\u5173\u7684\u3002\u4f8b\u5982\u7ee7\u627f\u7684\u673a\u5236\u548c\u9650\u5236\uff0c\u4f7f\u5f97\u7f16\u8bd1\u5668\u53ef\u4ee5\u8ba1\u7b97\u6b63\u786e\u7684\u51fd\u6570\u5730\u5740\uff0c\u4f8b\u5982\u4f60\u5fc5\u987b\u8981\u4ece\u4e00\u5806\u590d\u6742\u7684\u4ee3\u7801\u4e2d\u62ff\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u8fd9\u4f7f\u5f97\u4f60\u4e0d\u5f97\u4e0d\u628a\u591a\u4e2a\u4ee3\u7801\u6587\u4ef6\u4ea4\u7ec7\u5728\u4e00\u8d77\uff09\u624d\u80fd\u6b63\u786e\u5730\u8bbf\u95ee\u76f8\u5e94\u7684\u65b9\u6cd5\uff0c\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u51e0\u4e4e\u603b\u662f\u5145\u6ee1\u590d\u6742\u7684\u5f15\u7528\u5173\u7cfb\uff0c\u5c3d\u7ba1\u8fd9\u770b\u8d77\u6765\u50cf\u662f\u5fc5\u987b\u7684\uff0c\u4f8b\u5982\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u4f46\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u5fc5\u987b\u8981\u8fd9\u6837\u624d\u80fd\u83b7\u5f97\u6b63\u786e\u7684\u5bf9\u8c61\u5730\u5740\uff0c\u4ece\u800c\u8bbf\u95ee\u5176\u4e2d\u7684\u6570\u636e\u548c\u65b9\u6cd5\u3002\u4f46\u662f\u5982\u679c\u4ec5\u4ec5\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u6709\u5f88\u591a\u673a\u5236\uff0c\u4e0d\u662f\u8bf4\u6211\u4e00\u5b9a\u8981\u6bcf\u6b21\u4eb2\u81ea\u5230\u4e00\u4e2a\u5e97\u4e70\u5230\u7684\u4e1c\u897f\u624d\u662f\u7edd\u5bf9\u5b89\u5168\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5feb\u9012\u5458\u672c\u8eab\u662f\u67d0\u79cd\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u6211\u5c31\u53ef\u4ee5\u4e0d\u7528\u4eb2\u81ea\u53bb\u5e97\u91cc\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6211\u60f3\u8981\u7684\u6570\u636e\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u8981\u5173\u6ce8\u7684\u53ea\u662f\u4ec0\u4e48\u4e1c\u897f\uff08\u6570\u636e\u7c7b\u578b\uff09\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7269\u7406\u5730\u5740\uff08\u5bf9\u8c61\u5f15\u7528\uff09\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u7ed3\u6784\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\u5176\u4e00\u662f\u5355\u4e2a\u51fd\u6570\u6216\u8005\u5355\u4e2a\u5bf9\u8c61\u672c\u8eab\u7684\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\u7684\u903b\u8f91\uff0c\u5176\u4e2d\u53ef\u80fd\u4ec5\u4ec5\u6d89\u53ca\u6700\u57fa\u672c\u7684\u7b97\u672f\u548c\u903b\u8f91\u8ba1\u7b97\uff1b\u800c\u53e6\u4e00\u90e8\u5206\u5219\u662f\u4e3a\u4e86\u5e2e\u52a9\u8ba1\u7b97\u673a\u7f16\u8bd1\u7cfb\u7edf\uff08\u53ef\u80fd\u4e5f\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7406\u89e3\uff09\u6784\u9020\u5927\u89c4\u6a21\u8f6f\u4ef6\u63d0\u4f9b\u7684\u4e00\u4e9b\u4fe1\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3090).Z,width:"2546",height:"1427"})),(0,n.kt)("p",null,"Reality World\u5728\u7a0b\u5e8f\u7ed3\u6784\u65b9\u9762\u7684\u76ee\u6807\uff0c\u5c31\u662f\u8981\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u67b6\u6784\uff0c\u4f7f\u5f97\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u88ab\u9690\u85cf\u5728\u7f16\u8bd1\u7cfb\u7edf\u548c\u8fd0\u884c\u65f6\u5185\u90e8\uff0c\u8fd9\u6837\u5f00\u53d1\u8005\u5c31\u53ea\u9700\u8981\u5173\u6ce8\u6700\u57fa\u672c\u7684\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u3002\u6211\u4eec\u901a\u8fc7\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u6765\u4f7f\u5f97\u8fd0\u884c\u65f6\u7cfb\u7edf\u53ef\u4ee5\u52a8\u6001\u63a8\u5bfc\u51fa\u4e00\u4e9b\u6784\u6210\u5927\u89c4\u6a21\u7a0b\u5e8f\u9700\u8981\u7684\u7ed3\u6784\u3002"),(0,n.kt)("h3",{id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"},"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u548c\u7a0b\u5e8f\u7ed3\u6784\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u901a\u5e38\u5bb9\u6613\u5ffd\u7565\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u56e0\u4e3a\u76ee\u524d\u7f16\u7a0b\u7684\u5927\u90e8\u5206\u90fd\u662f\u4e13\u4e1a\u7a0b\u5e8f\u5458\uff0c\u8fd9\u4e2a\u95ee\u9898\u770b\u8d77\u6765\u7406\u6240\u5f53\u7136\u3002\u90a3\u5c31\u662f\u5173\u4e8e\u6570\u636e\u7ba1\u7406\u3002\u6570\u636e\u7ba1\u7406\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u5b83\u65e2\u5173\u4e4e\u7a0b\u5e8f\u7684\u590d\u6742\u5ea6\uff0c\u53c8\u5173\u4e4e\u524d\u9762\u63d0\u5230\u7684\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,"\u5728\u5e94\u7528\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u65e2\u9700\u8981\u7f16\u5199\u903b\u8f91\u4ee3\u7801\uff0c\u8fd8\u9700\u8981\u5904\u7406\u6570\u636e\u7ba1\u7406\uff1a\u6570\u636e\u5728\u4ec0\u4e48\u65f6\u5019\u521d\u59cb\u5316\uff0c\u5728\u90a3\u4e2a\u4ee3\u7801\u903b\u8f91\u5904\u521d\u59cb\u5316\uff0c\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u8c61\u88ab\u4fee\u6539\u4e86\u600e\u6837\u4fdd\u5b58\u6570\u636e\u7b49\u7b49\uff0c\u751a\u81f3\u5305\u62ec\u4e3a\u4e86\u8003\u8651\u7f13\u5b58\u6027\u80fd\u6240\u505a\u51fa\u7684\u4e00\u4e9b\u5904\u7406\uff0c\u8fd9\u4e9b\u5de5\u4f5c\u662f\u975e\u5e38\u7e41\u7410\u7684\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u5f00\u53d1\u8005\u51e0\u4e4e\u603b\u662f\u8fd8\u8981\u5173\u5fc3\u5b58\u50a8\uff0c\u9664\u975e\u662f\u4ec5\u5b58\u50a8\u5728\u672c\u5730\uff0c\u5426\u5219\u8fd8\u9700\u8981\u8bbe\u7f6e\u670d\u52a1\u5668\u5b58\u50a8\u548c\u83b7\u53d6\u4e00\u4e9b\u6570\u636e\u3002\u8fd9\u4e9b\u5de5\u4f5c\u5bf9\u4e8e\u666e\u901a\u7684\u7528\u6237\u5f00\u53d1\u5e94\u7528\u7a0b\u5e8f\u800c\u8a00\u90fd\u662f\u6bd4\u8f83\u56f0\u96be\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9800).Z,width:"1610",height:"399"})),(0,n.kt)("p",null,"GrapQL"),(0,n.kt)("p",null,"\u6240\u4ee5\u7ed3\u5408\u4e0a\u8ff0\u7684\u7a0b\u5e8f\u7ed3\u6784\u5316\u7684\u81ea\u52a8\u7ba1\u7406\uff0c\u4e00\u79cd\u597d\u7684\u7b56\u7565\u662f\u7a0b\u5e8f\u7684\u6570\u636e\u4e5f\u53ef\u4ee5\u81ea\u52a8\u7ba1\u7406\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f00\u53d1\u8005\u4ec5\u5173\u6ce8\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u57fa\u672c\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6240\u6709\u6d89\u53ca\u5230\u6216\u8005\u8bf4\u53ea\u662f\u7f16\u8bd1\u5668\u6216\u7f16\u8bd1\u7cfb\u7edf\u9700\u8981\u7684\u7ba1\u7406\u90fd\u5e94\u8be5\u5c3d\u53ef\u80fd\u4ea4\u7ed9\u8fd0\u884c\u65f6\u3002GraphQL\u5728\u8fd9\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u6bd4\u8f83\u597d\u7684\u5c1d\u8bd5\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u544a\u77e5\u4e00\u4e2a\u60f3\u8981\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u83b7\u53d6\u5230\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u800c\u5c06\u8fd9\u4e9b\u6570\u636e\u80cc\u540e\u7684\u590d\u6742\u903b\u8f91\u9690\u85cf\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u6570\u636e\u672c\u8eab\u7684\u7ba1\u7406\uff0c\u6570\u636e\u8fd8\u6d89\u53ca\u5230\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\uff0c\u7528\u6237\u5e0c\u671b\u81ea\u5df1\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5176\u4ed6\u5e94\u7528\u65b9\u4fbf\u5730\u8bbf\u95ee\uff0c\u8fd9\u4e9b\u673a\u5236\u90fd\u662f\u548c\u6570\u636e\u7684\u7ba1\u7406\u8fc7\u7a0b\u53ca\u5176\u8bbe\u8ba1\u606f\u606f\u76f8\u5173\u7684\u3002"),(0,n.kt)("h2",{id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3206).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u7684\u7a0b\u5e8f\u7ed3\u6784\u4e0e\u6587\u672c\u5408\u6210\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("p",null,"ChatGPT\u5e2d\u5377\u4e86\u6574\u4e2a\u4e16\u754c\uff0c\u6216\u8005\u81f3\u5c11\u662f\u79d1\u6280\u5708\uff0c\u4e0d\u7ba1\u662f\u4ece\u8d44\u672c\uff0c\u56fd\u4f01\uff0c\u6c11\u4f01\uff0c\u7a0b\u5e8f\u5458\u4e2a\u4eba\u7b49\u7b49\u90fd\u662f\u53d7\u5230\u5f88\u5927\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u4e5f\u6709\u50cf\u6211\u4eec\u5c0f\u5b69\u7684\u5988\u5988\uff0c\u4ee5\u53ca\u4ed6\u5988\u5988\u7684\u670b\u53cb\uff0c\u76ee\u524d\u8fd8\u4e0d\u592a\u4e86\u89e3ChatGPT\u662f\u5e72\u4ec0\u4e48\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4e8e2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\u5e76\u5f00\u59cb\u7814\u7a76\u548c\u8bbe\u8ba1Reality World\u7684\u67b6\u6784\uff0c\u90a3\u4e2a\u65f6\u5019\u7684\u70ed\u70b9\u8fd8\u662f\u5143\u5b87\u5b99\u3002\u90a3\u4e2a\u65f6\u5019\uff0c\u7531\u4e8e\u6ca1\u6709\u73b0\u5728\u5927\u6a21\u578b\u7684\u8fd9\u79cd\u80fd\u529b\uff0c\u6211\u4eec\u5f53\u7136\u4e5f\u6ca1\u6709\u4e3b\u8981\u53bb\u601d\u8003AI\u65b9\u9762\u7684\uff0c\u4f46\u662f\u4ece\u6211\u4eec\u81ea\u5df1\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\uff0c\u6211\u548c\u6211\u4eec\u516c\u53f8\u76842\u53f7\u5458\u5de5\uff0c\u57282020\u5e74\u7684\u65f6\u5019\u5c31\u601d\u8003\u548c\u8ba8\u8bba\u5c06\u6765\u600e\u6837\u8ba9AI\u5199\u4ee3\u7801\uff0c\u5f53\u7136\u6211\u4eec\u8bf4\u7684\u4e0d\u662f\u73b0\u5728\u8fd9\u79cd\u57fa\u4e8e\u5927\u6a21\u578b\u6765\u751f\u6210\u6587\u672c\u7684\u65b9\u5f0f\u751f\u6210\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u5927\u6a21\u578b\u786e\u5b9e\u52a0\u901f\u4e86\u6211\u4eec\u7684\u4e00\u4e9b\u60f3\u6cd5\u3002"),(0,n.kt)("h3",{id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"},"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u8d77\u521d\u7684\u76ee\u6807\u662f\u8ba9\u666e\u901a\u4eba\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u5e76\u6784\u9020\u4e00\u4e2a\u5b8c\u6574\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u4e5f\u662f\u6211\u4eec\u524d\u9762\u7b2c3\u90e8\u5206\u8ba8\u8bba\u7684\u5185\u5bb9\u3002\u7136\u800c\u6bd4\u8f83\u5de7\u5408\u548c\u60ca\u8bb6\u7684\u662f\uff0c\u81f3\u5c11\u4ece\u6211\u4eec\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\u770b\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u8ba9\u666e\u901a\u4eba\u4f1a\u7f16\u5199\u4ee3\u7801\u4e0e\u8ba9AI\u7f16\u5199\u4ee3\u7801\u7684\u903b\u8f91\u662f\u7c7b\u4f3c\u7684\u3002")),(0,n.kt)("p",null,"\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u53ef\u4ee5\u7528\u8bed\u8a00\u8868\u8ff0\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u4eba\u7c7b\u7684\u4efb\u4f55\u4fe1\u606f\u4e0e\u667a\u6167\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528\u81ea\u7136\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u3002\u7136\u800c\u8bed\u8a00\u6587\u5b57\u662f\u4e00\u79cd\u9762\u5411\u4eba\u7c7b\u7684\u4fe1\u606f\u8f7d\u4f53\uff0c\u5b83\u662f\u4e3a\u4e86\u4fbf\u4e8e\u4eba\u7c7b\u4e4b\u95f4\u8fdb\u884c\u4fe1\u606f\u4ea4\u6d41\u800c\u8bbe\u8ba1\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u80fd\u4e0d\u90a3\u4e48\u4e25\u8c28\uff0c\u751a\u81f3\u6ca1\u6709\u592a\u591a\u7ed3\u6784\u6027\uff0c\u4eba\u4eec\u4e4b\u95f4\u9700\u8981\u4fe1\u606f\u7f16\u89e3\u7801\uff0c\u7f16\u89e3\u7801\u7684\u6548\u7387\u548c\u80fd\u529b\u53ef\u80fd\u5dee\u5f02\u90fd\u975e\u5e38\u5de8\u5927\u3002\u800c\u7a0b\u5e8f\uff0c\u5219\u662f\u5728\u81ea\u7136\u8bed\u8a00\u57fa\u7840\u4e4b\u4e0a\u52a0\u5165\u66f4\u591a\u7684\u7ed3\u6784\u6027\uff0c\u5b83\u5728\u8868\u8ff0\u548c\u8bb0\u8f7d\u903b\u8f91\u7684\u540c\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0e\u8ba1\u7b97\u673a\u548c\u5176\u4ed6\u7a0b\u5e8f\u8fdb\u884c\u6c9f\u901a\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u7c7b\u5927\u8111\u4e2d\u7684\u903b\u8f91\u4e0d\u5149\u53ef\u4ee5\u7528\u4e8e\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6d41\uff0c\u8fd8\u53ef\u4ee5\u66f4\u76f4\u63a5\u5730\u8f6c\u5316\u4e3a\u751f\u4ea7\u529b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8981\u8ba9AI\u80fd\u591f\u751f\u6210\u4ee3\u7801\uff0c\u8fd9\u4ef6\u4e8b\u60c5\u80af\u5b9a\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u5f53\u7136\u7531\u4e8eChatGPT\u7684\u51fa\u73b0\u76f8\u4fe1\u73b0\u5728\u5927\u90e8\u5206\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u611f\u53d7\u5230AI\u7684\u4ee3\u7801\u751f\u6210\u80fd\u529b\uff0c\u6709\u4e9b\u4eba\u6bd4\u8f83\u575a\u4fe1AI\u80fd\u591f\u4ee3\u66ff\u7a0b\u5e8f\u5458\u751f\u6210\u7a0b\u5e8f\uff0c\u6709\u4e9b\u4eba\u5219\u60b2\u89c2\u4e00\u4e9b\uff0c\u81f3\u5c11\u5728\u77ed\u671f\u5185\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u6682\u4e14\u4e0d\u4e89\u8bbaAI\u5230\u5e95\u80fd\u4e0d\u80fd\u6216\u8005\u4ec0\u4e48\u65f6\u5019\u66ff\u4ee3\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u56de\u5230\u95ee\u9898\u672c\u8eab\u3002\u4f20\u7edf\u7684\u6587\u672c\u5408\u6210\uff0c\u8ba1\u7b97\u7684\u662f\u6587\u5b57\u4e0e\u6587\u5b57\u4e4b\u95f4\uff0c\u53e5\u5b50\u4e0e\u53e5\u5b50\u4e4b\u95f4\u7684\u7ec4\u5408\u6982\u7387\uff0c\u8fd9\u91cc\u6709\u4e24\u4e2a\u4e8b\u60c5\u503c\u5f97\u6ce8\u610f\uff1a\u7b2c\u4e00\u662f\u4efb\u4f55\u5b57\u4e4b\u95f4\u90fd\u53ef\u4ee5\u7ec4\u5408\uff0c\u6240\u4ee5ChatGPT\u603b\u662f\u53ef\u4ee5\u7ed9\u6211\u4eec\u7b54\u6848\uff0c\u54ea\u6015\u5176\u4e2d\u7684\u53e5\u5b50\u7ec4\u5408\u548c\u903b\u8f91\u662f\u5b8c\u5168\u9519\u8bef\u7684\uff1b\u7b2c\u4e8c\u662f\u4e00\u822c\u5e38\u7528\u4e8e\u8868\u8ff0\u6b63\u786e\u8bed\u6cd5\u548c\u8bed\u4e49\u7684\u54ea\u4e9b\u6587\u5b57\u4fe1\u606f\u662f\u975e\u5e38\u591a\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4ChatGPT\u7406\u89e3\u6211\u4eec\u4e00\u822c\u7684\u6bd4\u8f83\u5927\u4f17\u5316\u7684\u8bed\u4e49\u662f\u5f88\u5bb9\u6613\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u673a\u7a0b\u5e8f\u5728\u8fd9\u4e24\u4e2a\u5c42\u9762\u90fd\u4e0e\u4e00\u822c\u7684\u6587\u672c\u77e5\u8bc6\u4fe1\u606f\u4e0d\u540c\uff1a\u9996\u5148\u4e24\u6bb5\u4ee3\u7801\u662f\u4e0d\u80fd\u7b80\u5355\u5408\u6210\u7684\uff0c\u4e24\u4e2a\u4ee3\u7801\u4e4b\u95f4\u5728\u5355\u7eaf\u5730\u50cf\u4e24\u6bb5\u6587\u5b57\u653e\u5728\u4e00\u8d77\u4e4b\u5916\uff0c\u8fd8\u9700\u8981\u5904\u7406\u53c2\u6570\u7684\u6570\u91cf\uff0c\u53c2\u6570\u7684\u540d\u79f0\uff0c\u7c7b\u578b\uff0c\u53d8\u91cf\u4ece\u54ea\u91cc\u83b7\u53d6\uff0cAPI\u4ece\u54ea\u91cc\u83b7\u53d6\u7b49\u7b49\uff0c\u8fd9\u8fdc\u8fdc\u8d85\u51fa\u7b80\u5355\u6587\u5b57\u5408\u6210\u7684\u8303\u56f4\u3002\u4f60\u53ef\u4ee5\u5408\u6210\u4e00\u4e2a\u6587\u672c\u7ec4\u5408\u7684\u6e90\u4ee3\u7801\u7ed3\u679c\uff0c\u4f46\u662f\u5176\u4e2d\u7684\u903b\u8f91\u53ef\u80fd\u5b8c\u5168\u662f\u9519\u8bef\u7684\uff0c\u51fd\u6570\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u53c2\u6570\u662f\u9519\u8bef\u7684\u3002\u56e0\u6b64\u76ee\u524d\u6765\u8bb2\uff0c\u5927\u90e8\u5206AI\u8fd8\u662f\u7528\u4e8e\u8f85\u52a9\u6bd4\u8f83\u5c40\u90e8\u3001\u72ec\u7acb\u7684\u4ee3\u7801\u751f\u6210\uff0c\u68c0\u67e5\uff0c\u63d0\u793a\u7b49\u7b49\uff0c\u8ddd\u79bb\u6784\u9020\u590d\u6742\u4e00\u70b9\u7684\u903b\u8f91\u663e\u7136\u8fd8\u7f3a\u4e4f\u4e00\u4e9b\u57fa\u7840\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u59a8\u788d\u5b83\u73b0\u5728\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u4e0d\u9519\u7684\u52a9\u624b\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5728Reality World\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\uff0c\u4e3a\u4e86\u8981\u8ba9\u666e\u904d\u7528\u6237\u53ef\u4ee5\u6784\u9020\u7a0b\u5e8f\uff0c\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u591a\u5904\u8c03\u6574\uff0c\u4ece\u7c7b\u578b\u5b9a\u4e49\uff0c\u6570\u636e\u521d\u59cb\u5316\u548c\u7ba1\u7406\uff0c\u4e92\u64cd\u4f5c\u6027\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a8\u6f14\uff0c\u7ebf\u7a0b\u9694\u79bb\u7b49\u7b49\u3002\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u5c31\u662f\u7ec4\u5408\u6027\uff0c\u8fd9\u79cd\u7ec4\u5408\u6027\u4f7f\u5f97\u4e24\u4e2a\u76f8\u5173\u7684\u7ec4\u4ef6\uff0c\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u6dfb\u52a0\u4efb\u4f55\u53c2\u6570\u6216\u8005\u8f93\u5165\u8f93\u51fa\u7684\u8bbe\u7f6e\uff0c\u5c31\u53ef\u4ee5\u6b63\u786e\u5730\u6784\u9020\u7a0b\u5e8f\uff0c\u4f8b\u5982\u5982\u4e0b\u7684\u8fd9\u6bb5\u590d\u6742\u7684\u903b\u8f91\uff0c\u6574\u4e2aGraph\u7684\u8282\u70b9\u662f\u4e0d\u9700\u8981\u7528\u6237\u8fde\u63a5\u7684\uff0c\u5168\u90e8\u662f\u81ea\u52a8\u751f\u6210\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(373).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fde\u63a5\u5173\u7cfb\u662f\u81ea\u52a8\u63a8\u5bfc\u7684"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u6027\u770b\u8d77\u6765\u662f\u4e0d\u53ef\u601d\u8bae\u7684\uff0c\u8fd9\u91cc\u6211\u4e0d\u4f1a\u8ba8\u8bba\u5177\u4f53\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fd9\u6837\u60f3\u8c61\u4e00\u4e0b\uff1a\u7f16\u8bd1\u5668\u5bf9\u4e8e\u4e00\u4e2a\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\uff0c\u672c\u6765\u5c31\u662f\u9996\u5148\u5f53\u6210\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u6a21\u5757\u8fdb\u884c\u7f16\u8bd1\u7684\uff0c\u53ea\u4e0d\u8fc7\u7f16\u8bd1\u5668\u9664\u4e86\u7f16\u8bd1\u6bcf\u4e2a\u6307\u4ee4\u672c\u8eab\uff0c\u8fd8\u4f7f\u7528\u4e00\u4e9b\u7b26\u53f7\u8868\u8bb0\u8f7d\u4e86\u6240\u6709\u5916\u90e8\u6a21\u5757\u5f15\u7528\u7684\u5173\u7cfb\u548c\u5730\u5740\uff0c\u7136\u540e\u5728\u94fe\u63a5\u9636\u6bb5\u5c06\u8fd9\u4e9b\u5730\u5740\u4fee\u6539\u4e3a\u6700\u7ec8\u7684\u7edd\u5bf9\u5730\u5740\u3002\u4ece\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u662f\u6709\u53ef\u80fd\u4ee5\u66f4\u5e95\u5c42\u7684\u65b9\u5f0f\u53bb\u5b8c\u6210\uff0c\u800c\u4e0d\u662f\u628a\u8fd9\u90e8\u5206\u4ea4\u7ed9\u7a0b\u5e8f\u5458\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u80fd\u529b\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u53d8\u6210\u4e86\u5355\u7eaf\u7684\u5408\u6210\uff0c\u6ca1\u9519\uff0c\u8fd9\u4e2a\u5408\u6210\u7684\u65b9\u5f0f\u8ddf\u6587\u672c\u5408\u6210\u662f\u975e\u5e38\u76f8\u4f3c\u7684\uff1a\u5b83\u4eec\u4ec5\u4ec5\u662f\u653e\u5230\u4e00\u8d77\uff0c\u4e0d\u9700\u8981\u6307\u5b9a\u989d\u5916\u7684\u7a0b\u5e8f\u7ed3\u6784\u4fe1\u606f\uff0c\u4f8b\u5982\u53c2\u6570\uff0c\u53d8\u91cf\uff0c\u51fd\u6570\u5730\u5740\u7b49\u7b49\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u6709\u673a\u4f1a\u8ba9AI\u53bb\u751f\u6210\u7a0b\u5e8f\uff0c\u8fd9\u91ccAI\u53ea\u9700\u8981\u4ece\u4e00\u822c\u7684\u6587\u5b57\u610f\u4e49\u4e0a\u53bb\u7406\u89e3\u7ec4\u4ef6\u7684\u8bed\u4e49\uff0c\u5e76\u7ed9\u51fa\u7ec4\u4ef6\u5408\u6210\u5e8f\u5217\uff0c\u800c\u5e95\u5c42\u7684\u8fd0\u884c\u65f6\u5f15\u64ce\u5c06\u8fd9\u4e9b\u5e8f\u5217\u8f6c\u5316\u4e3a\u771f\u6b63\u7684\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0e\u76f4\u63a5ChatGPT\u6784\u9020\u7a0b\u5e8f\u4ee3\u7801\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u4ee3\u7801\u4e00\u65e6\u88ab\u6784\u9020\uff0c\u5c31\u662f\u6b63\u786e\u7684\uff0c\u53ef\u4ee5\u8fd0\u884c\u7684\uff0c\u800c\u4e0d\u9700\u8981\u4eba\u53bb\u68c0\u67e5\u5176\u4e2d\u53ef\u80fd\u5b58\u5728\u7684\u7a0b\u5e8f\u903b\u8f91\u7684\u9519\u8bef\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf"},"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u4e0e\u76f4\u63a5\u8ba9AI\u6784\u9020\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u76f8\u6bd4\uff0c\u66f4\u597d\u7684\u4f7f\u7528\u65b9\u5f0f\u53ef\u80fd\u662fAutoGPT\u6216\u8005OpenAI\u7684\u63d2\u4ef6\u7cfb\u7edf\uff0c\u5728\u8fd9\u79cd\u67b6\u6784\u4e2d\uff0cAI\u66f4\u591a\u662f\u8d1f\u8d23\u6bd4\u8f83\u901a\u7528\u7684\u4e00\u4e9b\u8bed\u4e49\u7406\u89e3\uff0c\u7136\u540e\u628a\u5177\u4f53\u7684\u4e00\u4e9b\u4e0e\u9886\u57df\u7cfb\u7edf\u7684\u4ea4\u4e92\u4ea4\u7ed9\u4e13\u95e8\u7684\u63d2\u4ef6\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5728OpenAI\u7684Plugin\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2aPlugin\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u5e94\u7528\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u63cf\u8ff0\u597d\u7684\u8c03\u7528\u903b\u8f91\u4f7f\u5f97ChatGPT\u53ef\u4ee5\u6b63\u786e\u5730\u8c03\u7528\u5404\u4e2a\u5e94\u7528\u8f6f\u4ef6\u7684\u63a5\u53e3\uff0c\u4f46\u5982\u679c\u4f60\u7684\u4f7f\u7528\u672c\u8eab\u662f\u8981\u5728\u591a\u4e2aplugin\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u60f3\u6784\u9020\u4efb\u610f\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u628a\u6bcf\u4e2aplugin\u63a5\u53e3\u5f53\u4f5c\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u53c8\u4f1a\u56de\u5230\u8ba9AI\u7f16\u5199\u903b\u8f91\u4ee3\u7801\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u8fd9\u79cdPlugin\u7cfb\u7edf\uff0cReality World\u63d0\u4f9b\u7684\u4e0d\u662f\u4e00\u4e2a\u5355\u4e2aplugin\uff0c\u800c\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u80fd\u529b\uff0c\u5b83\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u4e00\u79cd\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\uff0c\u56e0\u4e3aAI\u53d1\u51fa\u7684\u6587\u672c\u5e8f\u5217\uff0c\u4f1a\u88abReality World\u5f53\u4f5c\u8f93\u5165\uff0c\u7136\u540e\u6309\u7167\u7a0b\u5e8f\u6784\u9020\u7684\u903b\u8f91\u53bb\u68c0\u7d22\u76f8\u5e94\u7684\u7ec4\u4ef6\u5e76\u7ec4\u5408\u6784\u9020\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u8981\u4e48\u662f\u6784\u9020\u4e0d\u51fa\u6765\u7684\uff0c\u8981\u4e48\u5c31\u662f\u81f3\u5c11\u80fd\u591f\u6210\u529f\u8fd0\u884c\u7684\uff0c\u800c\u5269\u4e0b\u7684\u6b63\u786e\u6027\u95ee\u9898\u5c31\u53d6\u51b3\u4e8e\u7ec4\u4ef6\u63cf\u8ff0\u7684\u51c6\u786e\u6027\u548cAI\u5bf9\u8bed\u4e49\u7684\u7406\u89e3\u4e86\u3002"),(0,n.kt)("h2",{id:"\u62e5\u62b1rust"},"\u62e5\u62b1Rust"),(0,n.kt)("p",null,"\u6211\u539f\u672c\u4ee5\u4e3a\u7684\u5f00\u53d1\u5468\u671f\u8fd8\u662f\u4f1a\u6bd4\u8f83\u957f\u7684\uff0c\u6bd5\u7adf\u8bbe\u8ba1\u7684\u7cfb\u7edf\u8bbe\u8ba1\u8fd8\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u65e9\u5148\u6211\u4f7f\u7528\u7684\u662fC++/C\u8fdb\u884c\u5f00\u53d1\uff0c\u8fdb\u884c\u4e86\u4e00\u4e9b\u7b80\u5355\u7684\u8bed\u8a00\u5305\u88c5\u548c\u7f16\u8bd1\u6d41\u7a0b\u5b9a\u5236\u3002\u56e0\u4e3a\u6211\u4eec2\u53f7\u5458\u5de5\u4e00\u76f4\u662fRust\u7231\u597d\u8005\uff0c\u4e00\u76f4\u5728\u9f13\u52a8\u6211\u4f7f\u7528Rust\uff0c\u867d\u7136\u4e4b\u524d\u770b\u8fc7Rust\u7684\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u4f46\u662f\u611f\u89c9\u8fd8\u662f\u6ca1\u6709\u7279\u522b\u7684\u52a8\u529b\u53bb\u5b8c\u5168\u5207\u6362\u5230Rust\u3002"),(0,n.kt)("p",null,"\u540e\u6765\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4f7f\u7528Rust\u8fdb\u884c\u5f00\u53d1\uff0c\u5f00\u59cb\u4e5f\u662f\u6709\u4e9b\u4e0d\u4e60\u60ef\uff0c\u4f46\u662f\u5728\u9010\u6b65\u5b66\u4e60\u548c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u611f\u53d7\u5230\u4e86Rust\u7684\u597d\u5904\uff0c\u8fd9\u91cc\u7ed9\u5927\u5bb6\u5206\u4eab\u548c\u63a8\u8350\u4e00\u4e0b\u3002"),(0,n.kt)("p",null,"Rust\u5bf9\u6211\u800c\u8a00\u6700\u5927\u7684\u597d\u5904\u548c\u4f53\u9a8c\u662f\uff0c\u8fed\u4ee3\u901f\u5ea6\u6bd4\u8f83\u5feb\uff0c\u8fd9\u7b26\u5408\u6211\u73b0\u5728\u7684\u9700\u6c42\u3002\u53ea\u8981\u4ee3\u7801\u7f16\u8bd1\u901a\u8fc7\uff0c\u51e0\u4e4e\u4e0d\u4f1a\u82b1\u65f6\u95f4\u53bb\u6392\u67e5\u4e00\u4e9b\u6bd4\u8f83\u8be1\u5f02\uff0c\u751a\u81f3\u9700\u8981\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u65ad\u6b65\u8c03\u8bd5\u624d\u80fd\u53d1\u73b0\u95ee\u9898\u7684bug\uff0c\u4e00\u822c\u6709bug\u5c31\u57fa\u672c\u4e0a\u5927\u90e8\u5206\u8fd8\u662f\u903b\u8f91\u95ee\u9898\uff0c\u800c\u4e14Rust\u7f16\u8bd1\u5668\u53ef\u4ee5\u6bd4\u8f83\u7cbe\u51c6\u5730\u544a\u8bc9\u4f60\u95ee\u9898\u7684\u4f4d\u7f6e\uff0c\u57fa\u672c\u4e0a\u4e00\u770b\u63d0\u793a\u5c31\u77e5\u9053\u8be5\u600e\u4e48\u6539\u4ee3\u7801\u4e86\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u4e3b\u8981\u662f\u5927\u5bb6\u8ba8\u8bba\u6bd4\u8f83\u591a\u7684\u9650\u5236\u4e86\uff0c\u4f60\u5f97\u5f88\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u8bbe\u8ba1\u6574\u4e2a\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u5982\u679c\u50cf\u4f20\u7edfC++\u90a3\u6837\u5230\u5904\u662f\u76f8\u4e92\u5f15\u7528\u663e\u7136\u51e0\u4e4e\u80af\u5b9a\u662f\u4f60\u5b8c\u5168\u6ca1\u6cd5\u901a\u8fc7\u7f16\u8bd1\u5668\uff0c\u4f60\u5f97\u8bbe\u8ba1\u597d\u6574\u4e2a\u7a0b\u5e8f\u5bf9\u8c61\u7684\u7ed3\u6784\uff0c\u8fd9\u91cc\u63a8\u8350Bevy\u5f15\u64ce\u5c31\u662f\u975e\u5e38\u597d\u7684\u67b6\u6784\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u51e0\u4e4e\u80fd\u89e3\u51b3\u5927\u90e8\u5206\u76f8\u4e92\u5f15\u7528\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u6bd4\u8f83\u5927\u7684\u95ee\u9898\u662f\u591a\u6b21\u5f15\u7528\u548c\u501f\u7528\u7684\u95ee\u9898\u4e86\uff0c\u8fd9\u4e2a\u95ee\u9898\u76f8\u5bf9\u597d\u89e3\u51b3\u4e00\u70b9\uff0c\u9996\u5148\u67b6\u6784\u597d\u4f1a\u5c11\u6389\u5f88\u591a\u8fd9\u79cd\u95ee\u9898\uff1b\u5176\u6b21\u5bf9\u4e8e\u5c40\u90e8\u7684\u4e00\u4e9b\u65b9\u6cd5\uff0c\u5b9e\u5728\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u4e07\u80fd\u5927\u6cd5\u5c31\u662f\u590d\u5236\u6570\u636e\u5c31\u597d\uff0c\u8fd9\u4e2a\u4e5f\u4e0d\u9700\u8981\u5b8c\u5168\u56de\u907f\uff0c\u6bd5\u7adf\u5728C++\u4e2d\u4e5f\u7ecf\u5e38\u4f1a\u5b58\u5728\u5bf9\u8c61\u590d\u5236\uff1b\u518d\u6709\u7a0d\u5fae\u590d\u6742\u4e00\u70b9\u5c31\u662f\u4f7f\u7528move\uff0c\u5148\u5c06\u6570\u636emove\u51fa\u6765\uff0c\u7136\u540e\u8fdb\u884c\u64cd\u4f5c\u4e4b\u540e\u518d\u586b\u56de\u53bb\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u6ca1\u6709\u5e76\u53d1\u95ee\u9898\uff0c\u8fd9\u79cd\u601d\u8def\u4e5f\u662f\u4e00\u79cd\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u5173\u4e8e\u6709\u4e9b\u4eba\u4f1a\u89c9\u5f97\uff0c\u50cfRust\u8fd9\u6837\u5f3a\u8feb\u5f00\u53d1\u8005\u8fc7\u65e9\u5173\u6ce8\u67b6\u6784\u4f1a\u5f71\u54cd\u5feb\u901f\u8fed\u4ee3\u3002\u8fd9\u4e00\u70b9\u6211\u4e0d\u662f\u5f88\u8d5e\u540c\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u9879\u76ee\uff0c\u5feb\u901f\u8fed\u4ee3\u4e5f\u662f\u8981\u6b63\u786e\u8fd0\u884c\u7684\uff0c\u800c\u4e14\u5982\u679c\u9879\u76ee\u672c\u8eab\u601d\u8003\u7740\u8db3\u591f\u591a\uff0c\u6216\u8005\u9879\u76ee\u6700\u7ec8\u80af\u5b9a\u662f\u8981\u4e0a\u7ebf\u4f7f\u7528\u7684\uff0c\u6211\u89c9\u5f97\u6162\u4e00\u70b9\u4e00\u8fb9\u8fed\u4ee3\u4e00\u8fb9\u5c31\u628a\u4ee3\u7801\u67b6\u6784\u5199\u7684\u66f4\u597d\uff0c\u4e5f\u8bb8\u6700\u7ec8\u662f\u4e00\u4ef6\u66f4\u597d\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"},"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u6211\u4ece2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\uff0c\u51e0\u4e4e\u6574\u6574\u4e00\u5e74\u65f6\u95f4\u5168\u90e8\u90fd\u5728\u601d\u8003\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u540e\u671f\u7684\u5f00\u53d1\u3002\u521a\u5f00\u59cb2\u4e2a\u6708\uff0c\u601d\u8def\u8fd8\u4e0d\u662f\u7279\u522b\u6e05\u6670\uff0c\u53ea\u662f\u5728\u4e0d\u505c\u3001\u75af\u72c2\u5730\u770b\u4e66\uff0c\u6211\u51e0\u4e4e\u628a\u6240\u6709\u80fd\u4e70\u5230\u7684\u4e2d\u6587\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u76f8\u5173\u7684\u4e66\u90fd\u770b\u4e86\u4e00\u9762\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u9010\u5b57\u9010\u53e5\u6162\u6162\u770b\uff0c\u90fd\u662f\u98de\u5feb\u5730\u6d4f\u89c8\uff0c\u5e76\u4e14\u8111\u888b\u4e2d\u9ad8\u901f\u8fd0\u8f6c\u7740\uff0c\u968f\u65f6\u90fd\u60f3\u7740\u6211\u8111\u888b\u4e2d\u7684\u54ea\u4e9b\u95ee\u9898\u600e\u4e48\u89e3\u51b3\uff0c\u8fd9\u6837\u5e26\u7740\u95ee\u9898\u770b\u4e66\u7684\u597d\u5904\u662f\uff0c\u53ea\u8981\u77e5\u8bc6\u4e4b\u95f4\u6709\u4e00\u70b9\u7684\u76f8\u5173\u6027\uff0c\u5c31\u80fd\u591f\u975e\u5e38\u654f\u9510\u5730\u6355\u6349\u5e76\u5173\u8054\u4e0a\uff0c\u7136\u540e\u518d\u5bf9\u8fd9\u5757\u77e5\u8bc6\u8fdb\u884c\u6df1\u5165\u5b66\u4e60\uff0c\u6700\u7ec8\u53ef\u4ee5\u8df3\u51fa\u5355\u7eaf\u7684\u77e5\u8bc6\u672c\u8eab\u53bb\u5e94\u7528\u8fd9\u4e9b\u77e5\u8bc6\uff0c\u751a\u81f3\u5c06\u4e00\u79cd\u77e5\u8bc6\u7684\u601d\u7ef4\u7528\u6765\u89e3\u51b3\u53e6\u4e00\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u4e00\u5e74\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8d85\u8fc750\u672c\u76f8\u5173\u7684\u4e66\u7c4d\uff0c\u5e76\u4e14\u5927\u90e8\u5206\u6bd4\u8f83\u76f8\u5173\u7684\u77e5\u8bc6\u90fd\u662f\u53cd\u590d\u9605\u8bfb\u7684\u3002"),(0,n.kt)("p",null,"\u65e9\u671f\u6211\u4e60\u60ef\u4f7f\u7528iPhone\u7684\u5907\u5fd8\u5f55app\u8bb0\u5f55\u4e00\u4e9b\u60f3\u6cd5\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u65b9\u4fbf\uff0c\u4efb\u4f55\u65f6\u5019\u60f3\u5230\u4e00\u70b9\u4e1c\u897f\u5c31\u53ef\u4ee5\u8bb0\u4e0b\u6765\uff0c\u5f88\u591a\u65f6\u5019\u665a\u4e0a\u534a\u591c\u90fd\u4f1a\u8d77\u6765\u8bb0\u5f55\uff0c\u786e\u5b9e\u6709\u4e9b\u4e1c\u897f\u5f88\u5feb\u5c31\u662f\u53ef\u4ee5\u5fd8\u8bb0\u7684\u3002\u540e\u6765\u4f53\u7cfb\u6bd4\u8f83\u5b8c\u6574\u7684\u65f6\u5019\u6211\u9010\u6b65\u5c06\u8fd9\u4e9b\u4fe1\u606f\u6574\u7406\u5230Markdown\u4e2d\uff0c\u5e76\u9010\u6b65\u79ef\u7d2f\uff0c\u73b0\u5728\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u5df2\u7ecf\u8d85\u8fc722\u4e07\u5b57\uff0c\u6574\u6574400\u591a\u9875\uff0c\u91cc\u9762\u5305\u542b\u4e86\u975e\u5e38\u591a\u7684\u6280\u672f\u7406\u89e3\u548c\u601d\u8003\u3002\u7b49\u9002\u5f53\u7684\u65f6\u5019\u6211\u4f1a\u5c06\u8fd9\u4e9b\u5185\u5bb9\u6574\u7406\u6210\u56fe\u4e66\u51fa\u7248\u3002"),(0,n.kt)("p",null,"\u8c46\u74e3\u4e0a\u6211\u5217\u4e86\u4e2atop 10\u7684\u56fe\u4e66\u699c\u5355\uff0c\u7f16\u7a0b\u76f8\u5173\u7684\u662f\uff1a\u300a\u7f16\u8bd1\u539f\u7406\u300b\u3001\u300aErlang\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\u300b\u3001\u300a\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u6a21\u5f0f\u300b\u3001\u300a\u6e38\u620f\u673a\u5236\u300b\u3001\u300a\u94fe\u63a5\u5668\u4e0e\u52a0\u8f7d\u5668\u300b\u3001\u300aData-oriented design\u300b\u3001\u300a\u51fd\u6570\u5f0f\u7f16\u7a0b\u601d\u7ef4\u300b\u3001\u300a\u51e4\u51f0\u67b6\u6784\u300b\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u56fe\u4e66\uff0c\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u5bf9\u6211\u5f71\u54cd\u6bd4\u8f83\u5927\u7684\u662f\uff1aErlang\u3001USD\u3001LLVM\u3001MLIR\u3001ECS\u3001Web Assembly\u3001Machinations\u3001\u300a\u5821\u5792\u4e4b\u591c\u300b\u3001Snapchat\u3001Bevy\u7b49\u7b49\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"},"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u53ef\u80fd\u5f88\u591a\u670b\u53cb\u4f1a\u5173\u5fc3\u4f60\u7684\u5546\u4e1a\u6a21\u5f0f\u662f\u4ec0\u4e48\uff0c\u8fd9\u91cc\u6211\u4e0d\u60f3\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u76ee\u524d\u53ea\u8ddf\u6295\u8d44\u4eba\u4e4b\u95f4\u624d\u4f1a\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u5f53\u7136\u6709\u5f88\u591a\u601d\u8003\uff0c\u4f46\u662f\u5728\u7f3a\u4e4f\u5f88\u591a\u80cc\u666f\u4e0b\uff0c\u6211\u89c9\u5f97\u73b0\u5728\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u8fd8\u662f\u592a\u65e9\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u4ecb\u610f\u5927\u5bb6\u8ba8\u8bba\u3002"),(0,n.kt)("h2",{id:"\u53c2\u4e0ereality-world\u5f00\u53d1"},"\u53c2\u4e0eReality World\u5f00\u53d1"),(0,n.kt)("p",null,"\u6beb\u65e0\u7591\u95ee\uff0cReality World\u6d89\u53ca\u5230\u5f88\u591a\u6280\u672f\u601d\u7ef4\uff0c\u751a\u81f3\u5305\u542b\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u6211\u76f8\u4fe1\u53c2\u4e0e\u8fd9\u4e2a\u9879\u76ee\u672c\u8eab\u80af\u5b9a\u4f1a\u5b66\u5230\u5f88\u591a\u77e5\u8bc6\u3002\u4f46\u73b0\u9636\u6bb5\u8fd8\u4e0d\u80fd\u6b63\u5f0f\u516c\u5e03\uff0c\u6211\u4eec\u9884\u8ba1\u4f1a\u57286\u4e2a\u6708\u5de6\u53f3\uff0c\u5728\u5185\u90e8\u8fed\u4ee3\u4e00\u4e9b\u7248\u672c\u518d\u6b63\u5f0f\u516c\u5e03\uff0c\u6240\u4ee5\u5728\u8fd9\u4e2a\u9636\u6bb5\u6211\u4e5f\u4e0d\u4f1a\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u592a\u591a\u5177\u4f53\u7684\u6280\u672f\u7ec6\u8282\u3002\u56e0\u4e3a\u5728\u4e2d\u56fd\u505a\u8fd9\u79cd\u4e8b\u60c5\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\uff0c\u7f51\u7edc\u4e0a\u4f1a\u6709\u5404\u79cd\u5404\u6837\u7684\u58f0\u97f3\uff0c\u6211\u4e0d\u5e0c\u671b\u53d7\u8fd9\u79cd\u5e72\u6270\uff0c\u4e3a\u4e86\u628a\u8fd9\u4ef6\u4e8b\u60c5\u505a\u6210\uff0c\u9700\u8981\u4e00\u9897\u5b89\u9759\u7684\u5fc3\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4f60\u5bf9Reality World\u611f\u5174\u8da3\uff0c\u4f60\u53ef\u4ee5\u8054\u7cfb\u6211\uff0c\u79c1\u4eba\u4e4b\u95f4\u6709\u65f6\u5019\u6211\u4f1a\u8ba8\u8bba\u4e00\u4e9b\u6280\u672f\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u878d\u8d44"},"\u5173\u4e8e\u878d\u8d44"),(0,n.kt)("p",null,"\u5766\u767d\u8bf4\uff0c\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u8fd8\u6ca1\u6709\u62ff\u5230\u4efb\u4f55\u6295\u8d44\uff0c\u66fe\u7ecf\u6709\u975e\u5e38\u9876\u7ea7\u7684\u8d44\u672c\u804a\u4e86\u5f88\u4e45\uff0c\u5408\u4f19\u4eba\u4e5f\u975e\u5e38\u8ba4\u53ef\u8fd9\u4e2a\u9879\u76ee\u7684\u4ef7\u503c\uff0c\u4f46\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u8c08\u5b9a\u3002\u5728\u65e9\u671f\uff0c\u6211\u80af\u5b9a\u72af\u4e86\u5f88\u591a\u9519\u8bef\uff0c\u4f8b\u5982\u5bf9\u9879\u76ee\u7684\u89c4\u5212\uff0c\u4f30\u503c\u9884\u671f\uff0c\u751a\u81f3\u8868\u8fbe\u7b49\u7b49\u90fd\u8fd8\u662f\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5f53\u7136\u4e5f\u662f\u4e00\u79cd\u6210\u957f\uff1b\u6b64\u5916\u53bb\u5e74\u53c8\u9047\u5230\u75ab\u60c5\uff0c\u8fd8\u6709\uff0c\u4f60\u61c2\u7684\uff0c\u4eca\u5e74\u7684ChatGPT..."),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u540e\u7eed\u7684\u5f00\u53d1\u80af\u5b9a\u8fd8\u662f\u9700\u8981\u56e2\u961f\u548c\u8d44\u672c\uff0c\u6211\u4e00\u4e2a\u4eba\u5f88\u96be\u8fd9\u6837\u4e00\u76f4\u6301\u7eed\u4e0b\u5348\uff0c\u6b22\u8fce\u5404\u4f4d\u611f\u5174\u8da3\u7684\u8d44\u672c\u3001\u5f00\u53d1\u8005\u751a\u81f3\u52a0\u6cb9\u52a9\u5a01\u7684\u670b\u53cb\u4e0e\u6211\u8054\u7cfb\u3002"),(0,n.kt)("p",null,"\u5fae\u4fe1\uff1aARealityWorld"),(0,n.kt)("h2",{id:"\u540e\u8bb0"},"\u540e\u8bb0"),(0,n.kt)("p",null,"\u5728\u8fd9\u4e00\u5e74\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ddf\u5f88\u591a\u4e0d\u540c\u7684\u670b\u53cb\u6709\u8fc7\u5f88\u591a\u4ea4\u6d41\uff0c\u5f88\u591a\u670b\u53cb\u90fd\u5728\u9f13\u52b1\u548c\u652f\u6301\uff0c\u5e0c\u671b\uff0c\u6700\u7ec8\u4e0d\u4f1a\u8f9c\u8d1f\u4f60\u4eec\uff01"))}d.isMDXComponent=!0},1694:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/2-ea7a0b77be7f3ea877430d34be6a9c33.jpg"},1072:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/3-2935ce82c46c3780bb9a6be5605f32ff.jpg"},373:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/4-c18cbdad8df763f282adf9e615337ed8.jpg"},3206:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/5-25bf33bec4ab499cbb1f75fe4af6dc4e.jpg"},6081:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/Robert_Virding_and_Joe_Armstrong-82ddcf57cc160dd3b30ce80b0351bb6b.jpg"},3090:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/create-83a4808a18d663f143cd67c47dccbd84.png"},9800:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/graphql-b82a89e1f03ad72a5c43b193911c69a7.png"},9606:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/island-ed77d6189ea90804947341de732b2a5f.png"},9467:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/luau-8dcd3e07aca728930025b827afc3d0d9.png"},3819:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/modular-ec183275c9c4d2f77583a82e8119e52f.png"},2382:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/pl-01db64776749f259941139b1e0b0fd19.jpg"},9984:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/usd-1109031da5c391a7ac8194a67e234d38.png"},9875:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/verse-3604fc0feca3a40971cf71a64a6a61b6.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/13c002e8.5db7e18c.js b/zh/assets/js/13c002e8.5db7e18c.js deleted file mode 100644 index 39b5119..0000000 --- a/zh/assets/js/13c002e8.5db7e18c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3915],{4137:(t,e,l)=>{l.d(e,{Zo:()=>u,kt:()=>k});var a=l(7294);function n(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function i(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,a)}return l}function r(t){for(var e=1;e=0||(n[l]=t[l]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,l)&&(n[l]=t[l])}return n}var s=a.createContext({}),p=function(t){var e=a.useContext(s),l=e;return t&&(l="function"==typeof t?t(e):r(r({},e),t)),l},u=function(t){var e=p(t.components);return a.createElement(s.Provider,{value:e},t.children)},c="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var l=t.components,n=t.mdxType,i=t.originalType,s=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),c=p(l),m=n,k=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return l?a.createElement(k,r(r({ref:e},u),{},{components:l})):a.createElement(k,r({ref:e},u))}));function k(t,e){var l=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=l.length,r=new Array(i);r[0]=m;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=t,o[c]="string"==typeof t?t:n,r[1]=o;for(var p=2;p{l.r(e),l.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=l(7462),n=(l(7294),l(4137));const i={slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},r=void 0,o={permalink:"/zh/blog/thinking",source:"@site/blog/2021-08-26-thinking/index.md",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",description:"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002",date:"2021-08-26T00:00:00.000Z",formattedDate:"2021\u5e748\u670826\u65e5",tags:[{label:"Reality World",permalink:"/zh/blog/tags/reality-world"}],readingTime:79.295,hasTruncateMarker:!1,authors:[{name:"Chunlin Qin",title:"Creator of Reality World",url:"https://github.com/ElvisQin",imageURL:"https://github.com/ElvisQin.png"}],frontMatter:{slug:"thinking",title:"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003",author:"Chunlin Qin",author_title:"Creator of Reality World",author_url:"https://github.com/ElvisQin",author_image_url:"https://github.com/ElvisQin.png",tags:["Reality World"],hide_table_of_contents:!1,image:"/img/blog/2.jpg"},prevItem:{title:"Conversational computing: a new programming model empower LLM applications",permalink:"/zh/blog/conversational-computing"}},s={authorsImageUrls:[void 0]},p=[{value:"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f",id:"reality-world\u4e0d\u662f\u4ec0\u4e48",level:2},{value:"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01",id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce",level:3},{value:"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee",level:3},{value:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c",level:2},{value:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f",level:3},{value:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898",level:3},{value:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb",level:3},{value:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027",level:3},{value:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406",level:3},{value:"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:2},{value:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027",level:3},{value:"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf",id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf",level:3},{value:"\u62e5\u62b1Rust",id:"\u62e5\u62b1rust",level:2},{value:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b",level:2},{value:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"\u53c2\u4e0eReality World\u5f00\u53d1",id:"\u53c2\u4e0ereality-world\u5f00\u53d1",level:2},{value:"\u5173\u4e8e\u878d\u8d44",id:"\u5173\u4e8e\u878d\u8d44",level:2},{value:"\u540e\u8bb0",id:"\u540e\u8bb0",level:2}],u={toc:p},c="wrapper";function d(t){let{components:e,...i}=t;return(0,n.kt)(c,(0,a.Z)({},u,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,(0,n.kt)("img",{src:l(1694).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u53ef\u80fd\u6709\u4e00\u4e9b\u670b\u53cb\u5173\u6ce8\u8fc7\u6211\u8fd9\u4e00\u5e74\u4e00\u76f4\u5728\u6298\u817e\u7684Reality World\u521b\u4e1a\u7684\u4e8b\u60c5\uff0c\u7136\u800c\u5f88\u9057\u61be\u7684\u662f\u4e00\u76f4\u6ca1\u6709\u5206\u4eab\u592a\u591a\u5173\u4e8e\u5b83\u7684\u4fe1\u606f\u3002\u4e00\u6765\u662f\u56e0\u4e3a\u5b83\u6240\u6d89\u53ca\u7684\u6280\u672f\u6709\u6bd4\u8f83\u591a\u7684\u521b\u65b0\u5c1d\u8bd5\uff0c\u5728\u8fd8\u6ca1\u6709\u771f\u6b63\u7684\u6280\u672f\u5f00\u53d1\u5b9e\u8df5\u4e4b\u524d\u5bb9\u6613\u5f15\u8d77\u6bd4\u8f83\u591a\u7684\u4e89\u8bae\uff1b\u4e8c\u6765\u662f\u56e0\u4e3a\u53bb\u5e74\u5f97\u5230\u4e86\u4e00\u4e9b\u5927\u8d44\u672c\u6781\u5927\u7684\u5174\u8da3\uff0c\u56e0\u6b64\u6211\u60f3\u7740\u4e00\u9f13\u4f5c\u6c14\u7b49\u62ff\u5230\u6295\u8d44\u4e4b\u540e\u518d\u516c\u5e03\u4e00\u4e9b\u4fe1\u606f\u3002\u5f53\u7136\u56e0\u4e3a\u5404\u79cd\u539f\u56e0\u5230\u73b0\u5728\u4e5f\u8fd8\u6ca1\u6709\u8c08\u5b9a\u6295\u8d44\uff0c\u6240\u4ee5\u8fd1\u51e0\u4e2a\u6708\u6211\u5c31\u5c06\u5168\u90e8\u7cbe\u529b\u7528\u4e8e\u5f00\u53d1\u4e86\u3002\u7ecf\u8fc7\u51e0\u4e2a\u6708\u7684\u8270\u82e6\u594b\u6218\uff0c\u4eca\u5929\u7ec8\u4e8e\u6709\u673a\u4f1a\u53ef\u4ee5\u7ed9\u5927\u5bb6\u5206\u4eab\u4e00\u4e9b\u6211\u7684\u60f3\u6cd5\uff0c\u4ee5\u53ca\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u8fc7\u7a0b\u3002\u5f53\u7136Reality World\u8fd8\u5904\u4e8e\u975e\u5e38\u65e9\u671f\u548c\u539f\u578b\u7684\u9636\u6bb5\uff0c\u6211\u9884\u8ba1\u8fd8\u4f1a\u518d\u8fed\u4ee3\u51e0\u4e2a\u7248\u672c\u5230v0.5.0\u5de6\u53f3\u624d\u4f1a\u5f00\u59cb\u6b63\u5f0f\u516c\u5e03\u6216\u8005\u5185\u6d4b\uff0c\u6240\u4ee5\u8fd9\u91cc\u6211\u4e5f\u4e0d\u4f1a\u6d89\u53ca\u592a\u591a\u6280\u672f\u7ec6\u8282\uff0c\u4f46\u662f\u6211\u53ef\u4ee5\u5206\u4eab\u6211\u4eec\u60f3\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u4ee5\u53ca\u4e3a\u4ec0\u4e48\u8981\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0c\u5e76\u5927\u6982\u8bf4\u660e\u4e00\u4e9b\u601d\u8def\uff0c\u8fd9\u6837\u5927\u5bb6\u5e94\u8be5\u80fd\u591f\u521d\u6b65\u4e86\u89e3Reality World\u662f\u4ec0\u4e48\uff0c\u540c\u65f6\u6211\u89c9\u5f97\uff0c\u5bf9\u8fd9\u4e9b\u95ee\u9898\u7684\u601d\u8003\u5176\u5b9e\u662f\u975e\u5e38\u6709\u4ef7\u503c\u7684\u90e8\u5206\u3002"),(0,n.kt)("h2",{id:"reality-world\u4e0d\u662f\u4ec0\u4e48"},"Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6211\u8fc7\u53bb\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\uff0c\u4ee5\u53caReality Create\u4e5f\u5305\u542b\u76843D\u652f\u6301\uff0c\u5728\u6211\u4e0e\u6295\u8d44\u4eba\u6216\u8005\u5176\u4ed6\u670b\u53cb\u4ea4\u6d41\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5927\u5bb6\u666e\u904d\u7684\u5370\u8c61\u662f\u8fd9\u662f\u4e00\u4e2a\u65b0\u7684\u6e38\u620f\u5f15\u64ce\uff0c\u6240\u4ee5\u5927\u5bb6\u7684\u601d\u8def\u5c31\u662f\u4f60\u8ddfUnity\uff0cUnreal Engine\u4ee5\u53ca\u751a\u81f3\u5305\u62ec\u56fd\u5185\u8fd1\u51e0\u5e74\u4e5f\u6709\u5f88\u591a\u6e38\u620f\u5f15\u64ce\u521b\u4e1a\u7684\u4e00\u4e9b\u533a\u522b\u6216\u8005\u8bf4\u7ade\u4e89\u5173\u7cfb\uff0c\u800c\u4f1a\u5ffd\u89c6\u6211\u4eec\u6280\u672f\u4e0a\u53cd\u800c\u662f\u66f4\u52a0\u6838\u5fc3\u548c\u521b\u65b0\u7684\u90e8\u5206\uff0c\u6240\u4ee5\u8fd9\u4e2a\u8bef\u533a\u7684\u6f84\u6e05\u975e\u5e38\u91cd\u8981\uff1a"),(0,n.kt)("h3",{id:"reality-create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce"},"Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01"),(0,n.kt)("p",null,"\u867d\u7136\u6211\u672c\u4eba\u591a\u5e74\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\u90fd\u662f\u4e0e\u6e38\u620f\u5f15\u64ce\u548c\u6e32\u67d3\u76f8\u5173\uff0c\u540c\u65f6\u73b0\u4ee3\u6e38\u620f\u5f15\u64ce\u5de5\u4e1a\u7684\u6280\u672f\u4e5f\u5728\u4e0d\u65ad\u53d1\u5c55\uff0c\u4f46\u662f\u6211\u4e00\u76f4\u89c9\u5f97\u5236\u7ea6\u7528\u6237\u968f\u5fc3\u6240\u6b32\u8868\u8fbe\u5185\u5bb9\u548c\u903b\u8f91\u7684\u90e8\u5206\u4e3b\u8981\u8fd8\u662f\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7a0b\u5e8f\u8fd0\u884c\u7684\u673a\u5236\uff0c\u800c\u6e38\u620f\u5f15\u64ce\u67b6\u6784\u548c\u6d41\u7a0b\u672c\u8eab\u867d\u7136\u4e5f\u5f88\u590d\u6742\uff0c\u4f46\u8fd9\u90e8\u5206\u90fd\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u7684\uff0c\u4f8b\u5982\u9664\u4e86\u7f16\u7a0b\u90e8\u5206\uff0c\u4e00\u4e9b\u7f8e\u672f\u751a\u81f3\u7b56\u5212\u4e5f\u662f\u80fd\u591f\u6bd4\u8f83\u597d\u7684\u4f7f\u7528\u5f15\u64ce\u7684\u4e00\u4e9b\u76f8\u5173\u529f\u80fd\uff0c\u4f46\u662f\u4e0e\u4e4b\u76f8\u53cd\u7684\u662f\uff0c\u903b\u8f91\u7684\u8868\u8fbe\u548c\u7f16\u7a0b\u901a\u5e38\u8fd8\u662f\u9700\u8981\u4e13\u95e8\u7684\u7a0b\u5e8f\u5458\u3002\u867d\u7136\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u6e38\u620f\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6216\u8005\u914d\u7f6e\u7684\u5f62\u5f0f\u90e8\u5206\u5b9e\u73b0\u975e\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f46\u8fd9\u6837\u7684\u67b6\u6784\u8fd8\u662f\u5f88\u96be\u505a\u5230\u901a\u7528\uff0c\u663e\u7136\u6570\u5b57\u4e16\u754c\u8fd8\u6709\u7740\u975e\u5e38\u591a\u7684\u5404\u5f0f\u5404\u6837\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u9700\u6c42\u9700\u8981\u4e00\u4e9b\u901a\u7528\u7684\u903b\u8f91\u8868\u8fbe\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u7684\u6838\u5fc3\u662f\u4e00\u5957\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u90e8\u5206\u7406\u89e3\u4e3a\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u4f46\u662f\u4e0e\u4f20\u7edf\u5355\u7eaf\u89e3\u91ca\u6e90\u4ee3\u7801\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u865a\u62df\u673a\u76f8\u6bd4\uff0c\u5b83\u5305\u542b\u4e00\u4e9b\u6e90\u4ee3\u7801\u89e3\u91ca\u7ffb\u8bd1\u4e4b\u5916\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6743\u9650\u9a8c\u8bc1\u3001\u6c99\u76d2\u5b89\u5168\u4e0e\u4e92\u64cd\u4f5c\u3001\u5206\u5e03\u5f0f\u5185\u5bb9\u5206\u53d1\u4e0e\u540c\u6b65\u3001\u7ec4\u4ef6\u7684\u4f9d\u8d56\u7ba1\u7406\u548c\u52a8\u6001\u52a0\u8f7d\u7b49\u7b49\uff0c\u56e0\u6b64\u53ef\u4ee5\u7406\u89e3\u4e3aReality World\u662f\u4e00\u4e2a\u50cf\u533a\u5757\u94fe\u7c7b\u4f3c\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff1b\u540c\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u6e90\u4ee3\u7801\u7684\u7ffb\u8bd1\u89e3\u91ca\u90e8\u5206\uff0cReality World\u4e5f\u6709\u7740\u5f88\u591a\u533a\u522b\u4e8e\u4f20\u7edf\u52a8\u6001\u8bed\u8a00\u865a\u62df\u673a\u89e3\u91ca\u7684\u6d41\u7a0b\u548c\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u8fd9\u5957\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6211\u4eec\u4f1a\u6784\u5efa3D\u5f15\u64ce\u7684\u80fd\u529b\u4ee5\u4f7f\u7528\u6237\u53ef\u4ee5\u5f00\u53d13D\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u8fd9\u90e8\u5206\u6280\u672f\u8ddf\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u4f7f\u7528\u7684\u6280\u672f\u4e0d\u4f1a\u6709\u592a\u5927\u5dee\u5f02\uff0c\u5f53\u7136\u56e0\u4e3a\u8fd0\u884c\u65f6\u73af\u5883\u4e0d\u540c\uff0c\u4e0e\u4e4b\u76f8\u5173\u76843D\u5f15\u64ce\u7684\u67b6\u6784\u548c\u6d41\u7a0b\u80af\u5b9a\u4f1a\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u9884\u671f\u5c06\u6765Reality Create\u7684\u6d41\u7a0b\u5e94\u8be5\u662f\u53ef\u4ee5\u6709\u4e00\u4e9b\u4e0d\u540c\u7684\u521b\u65b0\u4f53\u9a8c\u7684\u3002"),(0,n.kt)("p",null,"\u9664\u4e863D\u6e32\u67d3\uff0cReality Create\u7684\u8ba1\u5212\u4e5f\u53ef\u4ee5\u5f00\u53d12D\u5e94\u7528\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528\u4e00\u79cd\u7edf\u4e00\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6765\u7edf\u4e003D\u548c\u4f20\u7edf2D\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u6240\u4ee5\u5b83\u786e\u5207\u7684\u5b9a\u4f4d\u5e94\u8be5\u662f\u4e00\u4e2a\u57fa\u4e8e\u5206\u5e03\u5f0f\u7684\u3001\u901a\u7528\u7684\u5e94\u7528\u6784\u9020\u548c\u5f00\u53d1\u5e73\u53f0\uff0c\u800c\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u3002"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5173\u7684\u662f\uff0c"),(0,n.kt)("h3",{id:"reality-world\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"},"Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\uff0c\u81f3\u5c11\u76ee\u524d\u7684\u5143\u5b87\u5b99\u5927\u90e8\u5206\u90fd\u662f\u504f\u5411\u4e8e3D\uff0c\u7136\u540e\u671f\u671b\u4eba\u4eec\u6709\u4e9b\u66f4\u591a\u6c89\u6d78\u5f0f\u7684\u865a\u62df\u751f\u6d3b\u3002\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u8ddfReality World\u7684\u7406\u5ff5\u751a\u81f3\u662f\u76f8\u53cd\u7684\uff0c\u4ece\u540d\u5b57\u5c31\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u9009\u62e9Reality\u8fd9\u4e2a\u8bcd\uff0c\u662f\u5e0c\u671b\u6211\u4eec\u80fd\u591f\u5f15\u5bfc\u7528\u6237\u66f4\u591a\u5173\u6ce8\u73b0\u5b9e\uff0cReality World\u7684\u76ee\u6807\u662f\u5e0c\u671b\u901a\u8fc7\u63d0\u4f9b\u66f4\u7b80\u5316\u3001\u66f4\u5177\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f7f\u66f4\u591a\u7684\u4eba\u80fd\u591f\u968f\u5fc3\u6240\u6b32\u5730\u8868\u8fbeTA\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\uff0c\u5e76\u5c06\u8fd9\u4e9b\u7406\u89e3\u8f6c\u5316\u4e3a\u53ef\u4ea4\u4e92\u7684\u6570\u5b57\u7684\u5f62\u5f0f\uff0c\u4e0e\u5176\u4ed6\u66f4\u591a\u4eba\u5206\u4eab\uff0c\u6211\u89c9\u5f97\u5e94\u7528\u7684\u5f00\u53d1\u548c\u6784\u9020\u4e0e\u6587\u5b57\u3001\u56fe\u7247\u3001\u89c6\u9891\u4ee5\u53ca\u5176\u4ed6\u4fe1\u606f\u8f7d\u4f53\u4e00\u6837\uff0c\u6700\u5927\u7684\u4ef7\u503c\u4ecd\u7136\u662f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u6700\u6df1\u523b\u7684\u601d\u8003\u3001\u667a\u6167\u548c\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u6211\u5fc3\u91cc\u9762\u5bf9Reality World\u7684\u6700\u7cbe\u51c6\u7684\u63cf\u8ff0\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A self-evolving interoperable system.")),(0,n.kt)("p",null,"\u6216\u8005\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperating with multi-applications in a modular and composable system.")),(0,n.kt)("p",null,"\u4e5f\u8bb8\u770b\u4e86\u540e\u9762\u7684\u4e00\u4e9b\u4ecb\u7ecd\u4f60\u80fd\u591f\u5927\u6982\u7406\u89e3\u4e0a\u9762\u4e24\u53e5\u8bdd\u7684\u542b\u4e49"),(0,n.kt)("h2",{id:"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"},"\u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(1072).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u662fReality World\u6700\u6838\u5fc3\u7684\u673a\u5236"),(0,n.kt)("p",null,"\u6211\u5370\u8c61\u4e2d\uff0c\u5de5\u4e1a\u754c\u548c\u5a92\u4f53\u5f00\u59cb\u771f\u6b63\u8ba8\u8bba\u4e92\u64cd\u4f5c\u6027\u53ca\u5176\u76f8\u5173\u7684\u4e00\u4e9b\u8bba\u636e\uff0c\u5927\u90e8\u5206\u90fd\u6765\u6e90\u4e8eTim Sweeney\u7684\u90a3\u7bc7\u6f14\u8bb2\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/10.1145/3306307.3339844"},"https://dl.acm.org/doi/10.1145/3306307.3339844")),(0,n.kt)("p",null,"\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0cReality World\u7684\u76ee\u6807\u8ddfTim\u7684\u4e00\u4e9b\u63cf\u8ff0\u548c\u613f\u666f\u662f\u76f8\u4f3c\u7684\uff0c\u4f46\u4e5f\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6839\u672c\u4e0d\u540c\uff0c\u6211\u9996\u5148\u63cf\u8ff0\u8ddfTim\u6f14\u8bb2\u7684\u4e00\u4e9b\u5173\u7cfb\u548c\u903b\u8f91\uff0c\u7136\u540e\u518d\u4ecb\u7ecd\u6211\u4eec\u7684\u601d\u8003\uff0c\u901a\u8fc7\u8fd9\u4e9b\u95ee\u9898\u5c31\u53ef\u4ee5\u6bd4\u8f83\u81ea\u7136\u5730\u7406\u89e3Reality World\u7684\u76ee\u6807\u4ee5\u53ca\u60f3\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\u6211\u7b2c\u4e00\u6b21\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u662f\u5728\u53bb\u5e747\u6708\u5de6\u53f3\uff0c\u90a3\u4e2a\u65f6\u5019\u6211\u7684\u57fa\u672c\u67b6\u6784\u7684\u6784\u601d\u5df2\u7ecf\u521d\u6b65\u5b8c\u6210\uff0c\u5c24\u5176\u662f\u6700\u6838\u5fc3\u4e5f\u662f\u6700\u91cd\u8981\u7684\u4e00\u6b65\u57fa\u7840\u5df2\u7ecf\u8bbe\u8ba1\u597d\uff0c\u5f53\u65f6\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u611f\u5230\u5f88\u591a\u5171\u9e23\uff0c\u4e5f\u662f\u5bf9\u81ea\u5df1\u7684\u4e00\u79cd\u5f88\u5927\u7684\u6fc0\u52b1\uff0c\u6bd5\u7adf\u6709\u5bf9\u6280\u672f\u548c\u884c\u4e1a\u90fd\u6709\u975e\u5e38\u7ecf\u9a8c\u548c\u5f71\u54cd\u529b\u7684\u5927\u4f6c\u4e5f\u6709\u7c7b\u4f3c\u7684\u601d\u8003\u548c\u884c\u52a8\u3002\u4f46\u4ece\u53bb\u5e74\u5230\u73b0\u5728\uff0c\u6211\u4eec\u8fd8\u662f\u6cbf\u7740\u6211\u4eec\u65e9\u5148\u7684\u6280\u672f\u601d\u8def\uff0c\u57fa\u672c\u4e0a\u5e76\u6ca1\u6709\u53bb\u5173\u6ce8\u548c\u53c2\u8003\u592a\u591aEpic\u7684\u4e1c\u897f\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u4ece\u6280\u672f\u65b9\u6848\u5230\u76ee\u6807\u90fd\u662f\u6709\u5f88\u591a\u4e0d\u540c\u3002"),(0,n.kt)("p",null,"\u5728\u6280\u672f\u5c42\u9762\uff0cTim\u8ba4\u4e3a\u8fd9\u6837\u7684\u76ee\u6807\u5927\u6982\u53ef\u80fd\u9700\u898110\u5e74\u624d\u80fd\u5b8c\u6210\uff0c\u4f46Epic\u4f1a\u671d\u7740\u8fd9\u4e2a\u76ee\u6807\u9010\u6b65\u903c\u8fd1\u3002Epic\u7684\u8def\u7ebf\u5927\u6982\u662f\u51e0\u6b65\uff1a\u9996\u5148\u5c06\u4e00\u4e9b\u504f\u793e\u4ea4\u6216\u8005\u73a9\u5bb6\u7684\u975e\u4e13\u4e1a\u6e38\u620f\u5f00\u53d1\u8005\u8f6c\u79fb\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\uff0c\u8fd9\u90e8\u5206\u5f00\u53d1\u8005\u90fd\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u6e38\u620f\u5185\u90e8\u800c\u4e0d\u662f\u5355\u72ec\u4f7f\u7528Unreal Engine\u53bb\u521b\u4f5c\uff0c\u8fd9\u4e2a\u6a21\u5f0f\u5176\u5b9e\u7c7b\u4f3cRoblox\u7684\u6a21\u5f0f\uff0c\u5b83\u4e5f\u662f\u4e00\u79cd\u6e38\u620f\u5f15\u64ce\u8fd9\u79cd\u5546\u4e1a\u6a21\u5f0f\u7684\u8f6c\u578b\uff1a\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u53ea\u662f\u4e00\u4e2a\u5355\u673a\u7684\u751f\u6210\u5e94\u7528\u7a0b\u5e8f\u7684\u8f6f\u4ef6\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5185\u5bb9\u7531\u81ea\u5df1\u53bb\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837\u6e38\u620f\u5f15\u64ce\u4ec5\u4f5c\u4e3a\u4e00\u4e2a\u5de5\u5177\uff0c\u5b83\u53ea\u53c2\u4e0e\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u800c\u65e0\u6cd5\u53c2\u4e0e\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u56e0\u6b64\u65e0\u6cd5\u5f62\u6210\u751f\u6001\uff0c\u6240\u4ee5\u5c3d\u7ba1\u4e00\u4e9b\u5f15\u64ce\u6709\u5e9e\u5927\u7684\u5f00\u53d1\u8005\u6570\u91cf\u548c\u7fa4\u4f53\uff0c\u4f46\u662f\u8fd9\u79cd\u6570\u91cf\u5e76\u6ca1\u6709\u5f88\u6709\u6548\u7684\u65b9\u5f0f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u751f\u6001\u3002\u7136\u800cRoblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f60\u7684\u5185\u5bb9\u5fc5\u987b\u5206\u53d1\u5230\u8fd9\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5e76\u7531\u7279\u5b9a\u7684\u5ba2\u6237\u7aef\u8fd0\u884c\u65f6\u73af\u5883\u6765\u8fd0\u884c\uff0c\u800c\u65e0\u6cd5\u50cf\u5355\u72ec\u7684\u6e38\u620f\u5f15\u64ce\u90a3\u6837\u81ea\u884c\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837Roblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5c31\u53ef\u4ee5\u53c2\u4e0e\u6574\u4e2a\u5185\u5bb9\u7684\u5168\u90e8\u751f\u547d\u5468\u671f\uff0c\u8fd9\u6837\u5c31\u5f62\u6210\u751f\u6001\uff0c\u5176\u4ed6\u7684\u670d\u52a1\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u5957\u5206\u5e03\u5f0f\u7cfb\u7edf\u8fdb\u884c\u63d0\u4f9b\uff0c\u800c\u5bf9\u7528\u6237\u7684\u597d\u5904\u4e5f\u662f\u7b80\u5316\u4e86\u5185\u5bb9\u7684\u5206\u53d1\u90e8\u7f72\uff0c\u4ee5\u53ca\u66f4\u591a\u4fbf\u6377\u7684\u96c6\u6210\u670d\u52a1\uff0c\u4f8b\u5982\u4e0e\u5176\u4ed6\u73a9\u5bb6\u7684\u4e92\u52a8\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9606).Z,width:"1932",height:"1162"})),(0,n.kt)("p",null,"\u300a\u5821\u5792\u4e4b\u591c\u300bCreative\u6a21\u5f0f"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8981\u4f7f\u7528\u6237\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fdb\u884c\u5185\u5bb9\u5f00\u53d1\uff0c\u5c31\u5e26\u6765\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a\u4e00\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u95ee\u9898\uff0c\u4e8c\u662f\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\u3002\u8981\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fd0\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u672a\u53d7\u4fe1\u4efb\u7684\u4ee3\u7801\uff0c\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u96be\u7684\u95ee\u9898\uff0c\u8fd9\u4e5f\u6d89\u53ca\u5230Reality World\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u6838\u5fc3\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9467).Z,width:"1446",height:"486"})),(0,n.kt)("p",null,"\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"NaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002"),(0,n.kt)("p",null,"Web Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9875).Z,width:"1920",height:"1079"})),(0,n.kt)("p",null,"Epic\u63a8\u51faVerse language"),(0,n.kt)("p",null,"\u56de\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\uff0cEpic\u663e\u7136\u4e0d\u53ef\u80fd\u8ba9\u73a9\u5bb6\u4f7f\u7528Unreal Engine\u7684C++\u6216\u8005blueprint\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u5185\u5b58\u73af\u5883\u4e2d\u8fd0\u884c\uff0cUnreal Engine\u76ee\u524d\u4e5f\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\u65b9\u6848\uff0c\u56e0\u6b64Epic\u9700\u8981\u5f00\u53d1\u4e00\u5957\u65b0\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u5c31\u662f\u4eca\u5e74\u65e9\u4e9b\u65f6\u5019\u53d1\u5e03\u7684Verse programming language\u3002Epic\u4e3a\u6b64\u6316\u6765\u4e86Haskell\u7684\u4f5c\u8005Simon Peyton Jones\uff0c\u4ee5\u53ca\u4e4b\u524d\u6536\u8d2d\u7684\u4e00\u4e2a\u4e3aUnreal Engine\u5f00\u53d1\u811a\u672c\u8bed\u8a00\u7684\u56e2\u961fSkookumScript\uff0c\u636e\u8bf4\u8fd8\u6709\u5199V8\u5185\u6838\u7684\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u5173\u4e8eVerse language\u672c\u8eab\uff0c\u76ee\u524d\u8fd8\u6ca1\u6709\u592a\u591a\u4fe1\u606f\uff0c\u4f46\u662f\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u7684\u4f7f\u547d\u4e00\u662f\u4e3a\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u521b\u4f5c\u63d0\u4f9b\u4e00\u79cd\u5b89\u5168\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u800c\u4e14\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u5fc5\u7136\u5305\u542b\u4e00\u5b9a\u7684\u6c99\u76d2\u673a\u5236\uff0c\u6765\u4fdd\u8bc1\u5b89\u5168\u6027\u3002"),(0,n.kt)("p",null,"\u534f\u4f5c\u7684\u7b2c\u4e8c\u4e2a\u8981\u6c42\u662f\u4e92\u64cd\u4f5c\uff0c\u4e92\u64cd\u4f5c\u6027\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"If two or more systems use commondata formatsandcommunication protocolsand are capable of communicating with each other, they exhibit",(0,n.kt)("em",{parentName:"p"},"syntactic interoperability"),". XML and SQL are examples of common data formats and protocols.")),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u548c\u8f6f\u4ef6\u9694\u79bb\u901a\u5e38\u662f\u76f8\u4e92\u77db\u76fe\u7684\uff0c\u4e92\u64cd\u4f5c\u8868\u73b0\u4e3a\u6211\u5e0c\u671b\u66f4\u7b80\u5355\u66f4\u65b9\u4fbf\u5730\u8bbf\u95ee\u522b\u4eba\u7684\u6570\u636e\u6216\u63a5\u53e3\uff0c\u800c\u9694\u79bb\u5219\u5047\u8bbe\u9664\u6211\u4e4b\u5916\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u53ef\u4fe1\u7684\uff0c\u4e0d\u8981\u8f7b\u6613\u5730\u8bbf\u95ee\uff0c\u6216\u8005\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\u4f7f\u8fd9\u79cd\u8bbf\u95ee\u7684\u4ee3\u4ef7\u548c\u96be\u5ea6\u589e\u52a0\u3002\u5c24\u5176\u5728\u6e38\u620f\u8fd9\u79cd\u5b9e\u65f6\u7684\u8fd0\u884c\u73af\u5883\uff0c\u8fd9\u79cd\u4ee3\u4ef7\u548c\u96be\u5ea6\u5f80\u5f80\u610f\u5473\u7740\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"Tim\u57282019\u5e74\u7684\u6f14\u8bb2\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u540e\u7eed\u57fa\u4e8eVerse\u7684\u4ee3\u7801\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0cReality World\u90fd\u6709\u7740\u4e0d\u540c\u7684\u6280\u672f\u601d\u8003\u548c\u65b9\u6848\u3002"),(0,n.kt)("h3",{id:"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"},"\u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f"),(0,n.kt)("p",null,"\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cReality World\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"},"\u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u6027\u8fd9\u4e2a\u6982\u5ff5\uff0c\u6211\u8ddf\u5927\u90e8\u5206\u6295\u8d44\u4eba\u89e3\u91ca\u57fa\u672c\u4e0a\u90fd\u662f\u5f88\u96be\u7406\u89e3\u7684\uff0c\u5f53\u7136\u8fd9\u91cc\u53ef\u80fd\u6211\u5bf9\u4e92\u64cd\u4f5c\u6027\u8d4b\u4e88\u4e86\u66f4\u591a\u7684\u610f\u4e49\u3002\u4ece\u7a0b\u5e8f\u673a\u5236\u4e0a\u6765\u8bb2\uff0c\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u6d89\u53ca\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c\u76f8\u4e92\u8c03\u7528\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5927\u90e8\u5206\u8bed\u8a00\u90fd\u53ef\u4ee5\u901a\u8fc7C\u63a5\u53e3\u5b9e\u73b0\u76f8\u4e92\u8c03\u7528\uff0c\u518d\u5f80\u4e0a\u4e00\u70b9\uff0c\u4efb\u4f55\u7a0b\u5e8f\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\u7136\u540e\u5185\u90e8\u8fdb\u884c\u683c\u5f0f\u89e3\u91ca\uff0c\u4e5f\u4ecd\u7136\u662f\u80fd\u591f\u8fdb\u884c\u901a\u4fe1\u7684\u3002\u5b9e\u9645\u4e0a\u4e92\u8054\u7f51\u7684\u673a\u5236\u5c31\u662f\u5982\u6b64\uff0cOSI\uff08Open systems Interconnection\uff09\u7684\u673a\u5236\u5c31\u662f\u5b9e\u73b0\u4e86\u4efb\u4f55\u8ba1\u7b97\u673a\u6216\u8005\u4efb\u610f\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5b57\u7b26\u4e32\u901a\u4fe1\uff0c\u4ece\u800c\u89e3\u51b3\u4e86\u6574\u4e2a\u8ba1\u7b97\u673a\u7f51\u7edc\u4e92\u8054\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u7684\u5176\u4e2d\u4e00\u4e2a\u91cd\u8981\u673a\u5236\uff0c\u5c31\u662f\u8981\u8ba9\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\uff0c\u5176\u5b9a\u4e49\u7684\u6570\u636e\u63a5\u53e3\u975e\u5e38\u8f7b\u6613\u5730\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u8bbf\u95ee\uff0c\u540c\u65f6\u7ed3\u5408\u4e0a\u9762\u7684\u6c99\u76d2\u6280\u672f\u4fdd\u8bc1\u8fd9\u79cd\u6570\u636e\u8bbf\u95ee\u7684\u5b89\u5168\uff0c\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u7684\u6c99\u76d2\u6280\u672f\u4e0d\u80fd\u53ea\u662f\u5728\u6700\u5e95\u5c42\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9984).Z,width:"1954",height:"864"})),(0,n.kt)("p",null,"Pixar USD"),(0,n.kt)("p",null,"\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"API\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-text"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("p",null,"\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3819).Z,width:"2157",height:"1113"})),(0,n.kt)("p",null,"Modular"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cReality World\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002"),(0,n.kt)("p",null,"\u7ed3\u5408\u524d\u9762\u8ba8\u8bba\u7684\u6c99\u76d2\u6280\u672f\u3001\u4e92\u64cd\u4f5c\u3001\u788e\u7247\u5316\u7b49\u7b49\u673a\u5236\uff0cReality World\u5e0c\u671b\u80fd\u591f\u901a\u8fc7\u4e00\u4e9b\u521b\u65b0\u63a2\u7d22\uff0c\u6784\u5efa\u8d77\u4e00\u4e2a\u66f4\u597d\u7684\u4e92\u64cd\u4f5c\u5e73\u53f0\uff0c\u4f7f\u5f97\u4e0a\u9762\u7684\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u5b83\u770b\u8d77\u6765\u50cf\u662f\u57fa\u4e8eOSI\u4e4b\u4e0a\u6dfb\u52a0\u7684\u4e00\u4e2a\u4e92\u64cd\u4f5c\u5c42\uff0c\u5728\u8fd9\u4e2a\u4e92\u64cd\u4f5c\u5c42\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u64cd\u4f5c\u7684\u662f\u6765\u81ea\u5176\u4ed6\u5e94\u7528\u7684\u5185\u5b58\u6570\u636e\uff0c\u5c31\u50cf\u4f60\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u6570\u636e\u4e00\u6837\u7b80\u5355\uff0c\u5c3d\u7ba1\u8fd9\u4e2a\u6570\u636e\u53ef\u80fd\u6765\u81ea\u4e8e\u5176\u4ed6\u7684\u670d\u52a1\u5668\u3002"),(0,n.kt)("h2",{id:"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(2382).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u5bf9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u5f88\u591a\u8c03\u6574"),(0,n.kt)("p",null,"\u6211\u4eec\u7a0b\u5e8f\u5458\uff0c\u7ec8\u5176\u4e00\u751f\u53ef\u80fd\u90fd\u5e0c\u671b\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u7a0b\u5e8f\u5230\u5e95\u662f\u600e\u4e48\u8fd0\u884c\u7684\uff0c\u8fd9\u79cd\u7406\u89e3\u4e0d\u5149\u80fd\u591f\u8ba9\u6211\u4eec\u66f4\u9ad8\u6548\u5730\u7f16\u5199\u66f4\u5065\u58ee\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u521b\u9020\u8f6f\u4ef6\u7684\u4ef7\u503c\uff0c\u540c\u65f6\uff0c\u7f16\u7a0b\u7684\u673a\u5236\u672c\u8eab\u5145\u6ee1\u7740\u65e0\u7a77\u7684\u9b45\u529b\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4eba\u7c7b\u6709\u53f2\u4ee5\u6765\u80fd\u591f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u590d\u6742\u7684\u601d\u7ef4\u548c\u903b\u8f91\u7684\u6700\u597d\u7684\u673a\u5236\u4e4b\u4e00\uff0c\u5b83\u5c06\u4eba\u7c7b\u5bf9\u7269\u7406\u4e16\u754c\u7684\u7406\u89e3\u53ca\u5176\u5f62\u6210\u7684\u667a\u6167\u8f6c\u5316\u4e3a\u4e3a\u4eba\u7c7b\u670d\u52a1\u7684\u5de5\u5177\u548c\u529b\u91cf\uff0c\u8fd9\u662f\u6211\u4eec\u70ed\u7231\u7f16\u7a0b\u7684\u5176\u4e2d\u4e00\u4e9b\u539f\u56e0\u3002"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u6765\uff0c\u5bf9\u4e8e\u7f16\u7a0b\uff0c\u6211\u4e00\u76f4\u6709\u4e24\u79cd\u4e0d\u4e00\u6837\u7684\u60c5\u611f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6211\u4e00\u76f4\u4e0d\u559c\u6b22\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u6211\u66f4\u559c\u6b22\u5f00\u53d1\u80fd\u591f\u7528\u4e8e\u6784\u9020\u8f6f\u4ef6\u7684\u8f6f\u4ef6")),(0,n.kt)("p",null,"\u4eca\u5929\uff0cReality World\u7684\u7b2c\u4e8c\u4e2a\u6838\u5fc3\u5173\u6ce8\u70b9\u548c\u57fa\u7840\u5c31\u662f\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u65b0\u7684\u63a2\u7d22\u3002\u4e16\u754c\u4e0a\u53ea\u6709\u5927\u7ea6\u4e0d\u52300.5%\u7684\u4eba\u662f\u4f1a\u7f16\u5199\u4ee3\u7801\u7684\uff0c\u7ea63000\u4e07\u5de6\u53f3\uff0c\u6240\u4ee5\u6570\u5b57\u5316\u8868\u8fbe\u7684\u6f5c\u529b\u8fd8\u8fdc\u8fdc\u6ca1\u6709\u88ab\u53d1\u6325\u51fa\u6765\u3002\u5982\u679c\u6211\u4eec\u5c06\u8fd9\u4e2a\u6570\u5b57\u63d0\u5347\u52305\u4ebf~10\u4ebf\uff0c\u770b\u770b\u8fd8\u6709\u54ea\u4e9b\u53d8\u9769\u9700\u8981\u53d1\u751f\uff0c\u53ef\u80fd\u4e0e\u4f60\u60f3\u8c61\u4e2d\u4e0d\u592a\u4e00\u6837\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u672c\u8eab\u53ef\u80fd\u5e76\u4e0d\u662f\u5236\u7ea6\u56e0\u7d20\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"},"\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb"),(0,n.kt)("p",null,"\u5341\u591a\u5e74\u5de5\u4f5c\u7ecf\u5386\uff0c\u6211\u5199\u8fc7C#\u3001C\u3001C++\u3001Ruby\u3001Lua\u3001Rust\u7b49\uff0c\u4ee5\u53ca\u6700\u8fd1\u4e00\u5e74\u591a\uff0c\u6211\u51e0\u4e4e\u770b\u4e86\u6240\u6709\u80fd\u4e70\u5230\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u7b49\u76f8\u5173\u7684\u4e66\u7c4d\uff08\u540e\u9762\u4f1a\u4ecb\u7ecd\uff09\u3002\u5728\u6211\u5199\u8fc7\u7684\u4ee3\u7801\u4e2d\uff0c\u603b\u6709\u4e00\u79cd\u611f\u89c9\uff0c\u4e0d\u7ba1\u6211\u770b\u8fc7\u591a\u5c11\u8bbe\u8ba1\u6a21\u5f0f\u6216\u8005\u67b6\u6784\u76f8\u5173\u7684\u8d44\u6599\uff0c\u6211\u603b\u662f\u89c9\u5f97\u5f88\u96be\u5199\u51fa\u90a3\u79cd\u903b\u8f91\u7ed3\u6784\u7279\u522b\u6e05\u6670\u7684\u67b6\u6784\u548c\u4ee3\u7801\uff0c\u56e0\u6b64\u7f16\u7a0b\u4f53\u9a8c\u50cf\u662f\u603b\u6709\u4e00\u4e2a\u4ec0\u4e48\u4e1c\u897f\uff0c\u5835\u5728\u6211\u7684\u5fc3\u91cc\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u77e5\u4e4e "),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/people/16d0cb25df98c0c909e60b135a5800c5"},"@\u5927\u5bbd\u5bbd")),(0,n.kt)("p",null," \u6709\u4e00\u7bc7\u56de\u7b54\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/29888990/answer/703226836"},"\u5982\u4f55\u770b\u5f85Erlang\u4e4b\u7236Joe Armstrong\u89c9\u5f97OO\u7f16\u7a0b\u5f88\u70c2\uff1f"),"\uff0c\u5176\u4e2d\u5f15\u7528\u5230Erlang\u4e4b\u7236Joe Armstrong\u7684\u4e00\u6bb5\u91c7\u8bbf\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/"},"Ralph Johnson, Joe Armstrong on the State of OOP")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Alan Kay himself wrote this famous thing and said ",(0,n.kt)("strong",{parentName:"p"},'"The notion of object oriented programming is completely')," ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"misunderstood"),(0,n.kt)("strong",{parentName:"p"},". It's not about objects and classes, it's all about messages"),'". He wrote that and he said that the initial ',(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"reaction")," to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.")),(0,n.kt)("p",null,"Alan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(6081).Z,width:"1155",height:"697"})),(0,n.kt)("p",null,"Erlang\u4e4b\u7236Joe Armstrong\uff08\u53f3\uff09"),(0,n.kt)("p",null,"Erlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about")),(0,n.kt)("p",null,"\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002Reality World\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002"),(0,n.kt)("h3",{id:"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u800c\u8a00\uff0c\u5f53\u524d\u6709\u5f88\u591aScratch\u7f16\u7a0b\u5e73\u53f0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7b80\u5355\u7684\u4efb\u52a1\uff1a\u5373\u53ea\u6709\u5c11\u91cf\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u4e14\u901a\u5e38\u53ea\u6709\u4e00\u4e2a\u6216\u5c11\u6570\u51e0\u4e2a\u51fd\u6570\u7684\u4efb\u52a1\uff0c\u5927\u90e8\u5206\u6709\u4e00\u4e9b\u57fa\u672c\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u80fd\u529b\u7684\u4eba\u662f\u53ef\u4ee5\u5728\u5f88\u77ed\u65f6\u95f4\u5185\u5b66\u4f1a\u7684\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u7eaf\u7684\u903b\u8f91\u8ba1\u7b97\u5e76\u4e0d\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002\u5728\u300a\u8ba1\u7b97\u673a\u7a0b\u5e8f\u7684\u6784\u9020\u548c\u89e3\u91ca\u300b\u4e00\u4e66\u4e2d\u6307\u51fa\uff0c\u7f16\u7a0b\u6a21\u578b\u672c\u8d28\u4e0a\u8981\u89e3\u51b3\u7684\u662f\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u4e0d\u7ba1\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u6b63\u662f\u8fd9\u4e9b\u4e3a\u4e86\u5e2e\u52a9\u4eba\u4eec\u7ba1\u7406\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u673a\u5236\uff0c\u63d0\u5347\u4e86\u7f16\u7a0b\u7684\u95e8\u69db\uff0c\u4f8b\u5982\u975e\u7a0b\u5e8f\u5458\u80af\u5b9a\u53ef\u4ee5\u5f88\u5feb\u7406\u89e3\u7c7b\u548c\u5bf9\u8c61\u7684\u6982\u5ff5\uff0c\u4f46\u662f\u7406\u89e3\u865a\u51fd\u6570\u548c\u591a\u6001\u5c31\u662f\u53e6\u5916\u4e00\u56de\u4e8b\u4e86\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u673a\u5236\u7684\u6dfb\u52a0\u770b\u8d77\u6765\u662f\u7406\u6240\u5f53\u7136\u7684\uff0c\u4f46\u662f\u7a0d\u5fae\u6df1\u5165\u7406\u89e3\u4e00\u4e0b\u7f16\u7a0b\u8bed\u8a00\u7684\u7f16\u8bd1\u8fc7\u7a0b\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u662f\u8ddf\u5e95\u5c42\u7684\u7f16\u8bd1\u673a\u5236\u76f8\u5173\u7684\uff0c\u800c\u73b0\u4ee3\u7684\u7f16\u8bd1\u6d41\u7a0b\u53c8\u51e0\u4e4e\u662f\u4e0e\u5e95\u5c42\u7684\u786c\u4ef6\u67b6\u6784\u6709\u5173\u7684\u3002\u4f8b\u5982\u7ee7\u627f\u7684\u673a\u5236\u548c\u9650\u5236\uff0c\u4f7f\u5f97\u7f16\u8bd1\u5668\u53ef\u4ee5\u8ba1\u7b97\u6b63\u786e\u7684\u51fd\u6570\u5730\u5740\uff0c\u4f8b\u5982\u4f60\u5fc5\u987b\u8981\u4ece\u4e00\u5806\u590d\u6742\u7684\u4ee3\u7801\u4e2d\u62ff\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u8fd9\u4f7f\u5f97\u4f60\u4e0d\u5f97\u4e0d\u628a\u591a\u4e2a\u4ee3\u7801\u6587\u4ef6\u4ea4\u7ec7\u5728\u4e00\u8d77\uff09\u624d\u80fd\u6b63\u786e\u5730\u8bbf\u95ee\u76f8\u5e94\u7684\u65b9\u6cd5\uff0c\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u51e0\u4e4e\u603b\u662f\u5145\u6ee1\u590d\u6742\u7684\u5f15\u7528\u5173\u7cfb\uff0c\u5c3d\u7ba1\u8fd9\u770b\u8d77\u6765\u50cf\u662f\u5fc5\u987b\u7684\uff0c\u4f8b\u5982\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u4f46\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u5fc5\u987b\u8981\u8fd9\u6837\u624d\u80fd\u83b7\u5f97\u6b63\u786e\u7684\u5bf9\u8c61\u5730\u5740\uff0c\u4ece\u800c\u8bbf\u95ee\u5176\u4e2d\u7684\u6570\u636e\u548c\u65b9\u6cd5\u3002\u4f46\u662f\u5982\u679c\u4ec5\u4ec5\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u6709\u5f88\u591a\u673a\u5236\uff0c\u4e0d\u662f\u8bf4\u6211\u4e00\u5b9a\u8981\u6bcf\u6b21\u4eb2\u81ea\u5230\u4e00\u4e2a\u5e97\u4e70\u5230\u7684\u4e1c\u897f\u624d\u662f\u7edd\u5bf9\u5b89\u5168\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5feb\u9012\u5458\u672c\u8eab\u662f\u67d0\u79cd\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u6211\u5c31\u53ef\u4ee5\u4e0d\u7528\u4eb2\u81ea\u53bb\u5e97\u91cc\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6211\u60f3\u8981\u7684\u6570\u636e\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u8981\u5173\u6ce8\u7684\u53ea\u662f\u4ec0\u4e48\u4e1c\u897f\uff08\u6570\u636e\u7c7b\u578b\uff09\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7269\u7406\u5730\u5740\uff08\u5bf9\u8c61\u5f15\u7528\uff09\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u7ed3\u6784\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\u5176\u4e00\u662f\u5355\u4e2a\u51fd\u6570\u6216\u8005\u5355\u4e2a\u5bf9\u8c61\u672c\u8eab\u7684\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\u7684\u903b\u8f91\uff0c\u5176\u4e2d\u53ef\u80fd\u4ec5\u4ec5\u6d89\u53ca\u6700\u57fa\u672c\u7684\u7b97\u672f\u548c\u903b\u8f91\u8ba1\u7b97\uff1b\u800c\u53e6\u4e00\u90e8\u5206\u5219\u662f\u4e3a\u4e86\u5e2e\u52a9\u8ba1\u7b97\u673a\u7f16\u8bd1\u7cfb\u7edf\uff08\u53ef\u80fd\u4e5f\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7406\u89e3\uff09\u6784\u9020\u5927\u89c4\u6a21\u8f6f\u4ef6\u63d0\u4f9b\u7684\u4e00\u4e9b\u4fe1\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3090).Z,width:"2546",height:"1427"})),(0,n.kt)("p",null,"Reality World\u5728\u7a0b\u5e8f\u7ed3\u6784\u65b9\u9762\u7684\u76ee\u6807\uff0c\u5c31\u662f\u8981\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u67b6\u6784\uff0c\u4f7f\u5f97\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u88ab\u9690\u85cf\u5728\u7f16\u8bd1\u7cfb\u7edf\u548c\u8fd0\u884c\u65f6\u5185\u90e8\uff0c\u8fd9\u6837\u5f00\u53d1\u8005\u5c31\u53ea\u9700\u8981\u5173\u6ce8\u6700\u57fa\u672c\u7684\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u3002\u6211\u4eec\u901a\u8fc7\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u6765\u4f7f\u5f97\u8fd0\u884c\u65f6\u7cfb\u7edf\u53ef\u4ee5\u52a8\u6001\u63a8\u5bfc\u51fa\u4e00\u4e9b\u6784\u6210\u5927\u89c4\u6a21\u7a0b\u5e8f\u9700\u8981\u7684\u7ed3\u6784\u3002"),(0,n.kt)("h3",{id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"},"\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u548c\u7a0b\u5e8f\u7ed3\u6784\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u901a\u5e38\u5bb9\u6613\u5ffd\u7565\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u56e0\u4e3a\u76ee\u524d\u7f16\u7a0b\u7684\u5927\u90e8\u5206\u90fd\u662f\u4e13\u4e1a\u7a0b\u5e8f\u5458\uff0c\u8fd9\u4e2a\u95ee\u9898\u770b\u8d77\u6765\u7406\u6240\u5f53\u7136\u3002\u90a3\u5c31\u662f\u5173\u4e8e\u6570\u636e\u7ba1\u7406\u3002\u6570\u636e\u7ba1\u7406\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u5b83\u65e2\u5173\u4e4e\u7a0b\u5e8f\u7684\u590d\u6742\u5ea6\uff0c\u53c8\u5173\u4e4e\u524d\u9762\u63d0\u5230\u7684\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,"\u5728\u5e94\u7528\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u65e2\u9700\u8981\u7f16\u5199\u903b\u8f91\u4ee3\u7801\uff0c\u8fd8\u9700\u8981\u5904\u7406\u6570\u636e\u7ba1\u7406\uff1a\u6570\u636e\u5728\u4ec0\u4e48\u65f6\u5019\u521d\u59cb\u5316\uff0c\u5728\u90a3\u4e2a\u4ee3\u7801\u903b\u8f91\u5904\u521d\u59cb\u5316\uff0c\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u8c61\u88ab\u4fee\u6539\u4e86\u600e\u6837\u4fdd\u5b58\u6570\u636e\u7b49\u7b49\uff0c\u751a\u81f3\u5305\u62ec\u4e3a\u4e86\u8003\u8651\u7f13\u5b58\u6027\u80fd\u6240\u505a\u51fa\u7684\u4e00\u4e9b\u5904\u7406\uff0c\u8fd9\u4e9b\u5de5\u4f5c\u662f\u975e\u5e38\u7e41\u7410\u7684\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u5f00\u53d1\u8005\u51e0\u4e4e\u603b\u662f\u8fd8\u8981\u5173\u5fc3\u5b58\u50a8\uff0c\u9664\u975e\u662f\u4ec5\u5b58\u50a8\u5728\u672c\u5730\uff0c\u5426\u5219\u8fd8\u9700\u8981\u8bbe\u7f6e\u670d\u52a1\u5668\u5b58\u50a8\u548c\u83b7\u53d6\u4e00\u4e9b\u6570\u636e\u3002\u8fd9\u4e9b\u5de5\u4f5c\u5bf9\u4e8e\u666e\u901a\u7684\u7528\u6237\u5f00\u53d1\u5e94\u7528\u7a0b\u5e8f\u800c\u8a00\u90fd\u662f\u6bd4\u8f83\u56f0\u96be\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(9800).Z,width:"1610",height:"399"})),(0,n.kt)("p",null,"GrapQL"),(0,n.kt)("p",null,"\u6240\u4ee5\u7ed3\u5408\u4e0a\u8ff0\u7684\u7a0b\u5e8f\u7ed3\u6784\u5316\u7684\u81ea\u52a8\u7ba1\u7406\uff0c\u4e00\u79cd\u597d\u7684\u7b56\u7565\u662f\u7a0b\u5e8f\u7684\u6570\u636e\u4e5f\u53ef\u4ee5\u81ea\u52a8\u7ba1\u7406\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f00\u53d1\u8005\u4ec5\u5173\u6ce8\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u57fa\u672c\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6240\u6709\u6d89\u53ca\u5230\u6216\u8005\u8bf4\u53ea\u662f\u7f16\u8bd1\u5668\u6216\u7f16\u8bd1\u7cfb\u7edf\u9700\u8981\u7684\u7ba1\u7406\u90fd\u5e94\u8be5\u5c3d\u53ef\u80fd\u4ea4\u7ed9\u8fd0\u884c\u65f6\u3002GraphQL\u5728\u8fd9\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u6bd4\u8f83\u597d\u7684\u5c1d\u8bd5\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u544a\u77e5\u4e00\u4e2a\u60f3\u8981\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u83b7\u53d6\u5230\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u800c\u5c06\u8fd9\u4e9b\u6570\u636e\u80cc\u540e\u7684\u590d\u6742\u903b\u8f91\u9690\u85cf\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u6570\u636e\u672c\u8eab\u7684\u7ba1\u7406\uff0c\u6570\u636e\u8fd8\u6d89\u53ca\u5230\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\uff0c\u7528\u6237\u5e0c\u671b\u81ea\u5df1\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5176\u4ed6\u5e94\u7528\u65b9\u4fbf\u5730\u8bbf\u95ee\uff0c\u8fd9\u4e9b\u673a\u5236\u90fd\u662f\u548c\u6570\u636e\u7684\u7ba1\u7406\u8fc7\u7a0b\u53ca\u5176\u8bbe\u8ba1\u606f\u606f\u76f8\u5173\u7684\u3002"),(0,n.kt)("h2",{id:"\u4e3aai\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"\u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(3206).Z,width:"3360",height:"2100"})),(0,n.kt)("p",null,"Reality World\u7684\u7a0b\u5e8f\u7ed3\u6784\u4e0e\u6587\u672c\u5408\u6210\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("p",null,"ChatGPT\u5e2d\u5377\u4e86\u6574\u4e2a\u4e16\u754c\uff0c\u6216\u8005\u81f3\u5c11\u662f\u79d1\u6280\u5708\uff0c\u4e0d\u7ba1\u662f\u4ece\u8d44\u672c\uff0c\u56fd\u4f01\uff0c\u6c11\u4f01\uff0c\u7a0b\u5e8f\u5458\u4e2a\u4eba\u7b49\u7b49\u90fd\u662f\u53d7\u5230\u5f88\u5927\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u4e5f\u6709\u50cf\u6211\u4eec\u5c0f\u5b69\u7684\u5988\u5988\uff0c\u4ee5\u53ca\u4ed6\u5988\u5988\u7684\u670b\u53cb\uff0c\u76ee\u524d\u8fd8\u4e0d\u592a\u4e86\u89e3ChatGPT\u662f\u5e72\u4ec0\u4e48\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4e8e2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\u5e76\u5f00\u59cb\u7814\u7a76\u548c\u8bbe\u8ba1Reality World\u7684\u67b6\u6784\uff0c\u90a3\u4e2a\u65f6\u5019\u7684\u70ed\u70b9\u8fd8\u662f\u5143\u5b87\u5b99\u3002\u90a3\u4e2a\u65f6\u5019\uff0c\u7531\u4e8e\u6ca1\u6709\u73b0\u5728\u5927\u6a21\u578b\u7684\u8fd9\u79cd\u80fd\u529b\uff0c\u6211\u4eec\u5f53\u7136\u4e5f\u6ca1\u6709\u4e3b\u8981\u53bb\u601d\u8003AI\u65b9\u9762\u7684\uff0c\u4f46\u662f\u4ece\u6211\u4eec\u81ea\u5df1\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\uff0c\u6211\u548c\u6211\u4eec\u516c\u53f8\u76842\u53f7\u5458\u5de5\uff0c\u57282020\u5e74\u7684\u65f6\u5019\u5c31\u601d\u8003\u548c\u8ba8\u8bba\u5c06\u6765\u600e\u6837\u8ba9AI\u5199\u4ee3\u7801\uff0c\u5f53\u7136\u6211\u4eec\u8bf4\u7684\u4e0d\u662f\u73b0\u5728\u8fd9\u79cd\u57fa\u4e8e\u5927\u6a21\u578b\u6765\u751f\u6210\u6587\u672c\u7684\u65b9\u5f0f\u751f\u6210\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u5927\u6a21\u578b\u786e\u5b9e\u52a0\u901f\u4e86\u6211\u4eec\u7684\u4e00\u4e9b\u60f3\u6cd5\u3002"),(0,n.kt)("h3",{id:"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"},"\u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u8d77\u521d\u7684\u76ee\u6807\u662f\u8ba9\u666e\u901a\u4eba\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u5e76\u6784\u9020\u4e00\u4e2a\u5b8c\u6574\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u4e5f\u662f\u6211\u4eec\u524d\u9762\u7b2c3\u90e8\u5206\u8ba8\u8bba\u7684\u5185\u5bb9\u3002\u7136\u800c\u6bd4\u8f83\u5de7\u5408\u548c\u60ca\u8bb6\u7684\u662f\uff0c\u81f3\u5c11\u4ece\u6211\u4eec\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\u770b\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u8ba9\u666e\u901a\u4eba\u4f1a\u7f16\u5199\u4ee3\u7801\u4e0e\u8ba9AI\u7f16\u5199\u4ee3\u7801\u7684\u903b\u8f91\u662f\u7c7b\u4f3c\u7684\u3002")),(0,n.kt)("p",null,"\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u53ef\u4ee5\u7528\u8bed\u8a00\u8868\u8ff0\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u4eba\u7c7b\u7684\u4efb\u4f55\u4fe1\u606f\u4e0e\u667a\u6167\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528\u81ea\u7136\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u3002\u7136\u800c\u8bed\u8a00\u6587\u5b57\u662f\u4e00\u79cd\u9762\u5411\u4eba\u7c7b\u7684\u4fe1\u606f\u8f7d\u4f53\uff0c\u5b83\u662f\u4e3a\u4e86\u4fbf\u4e8e\u4eba\u7c7b\u4e4b\u95f4\u8fdb\u884c\u4fe1\u606f\u4ea4\u6d41\u800c\u8bbe\u8ba1\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u80fd\u4e0d\u90a3\u4e48\u4e25\u8c28\uff0c\u751a\u81f3\u6ca1\u6709\u592a\u591a\u7ed3\u6784\u6027\uff0c\u4eba\u4eec\u4e4b\u95f4\u9700\u8981\u4fe1\u606f\u7f16\u89e3\u7801\uff0c\u7f16\u89e3\u7801\u7684\u6548\u7387\u548c\u80fd\u529b\u53ef\u80fd\u5dee\u5f02\u90fd\u975e\u5e38\u5de8\u5927\u3002\u800c\u7a0b\u5e8f\uff0c\u5219\u662f\u5728\u81ea\u7136\u8bed\u8a00\u57fa\u7840\u4e4b\u4e0a\u52a0\u5165\u66f4\u591a\u7684\u7ed3\u6784\u6027\uff0c\u5b83\u5728\u8868\u8ff0\u548c\u8bb0\u8f7d\u903b\u8f91\u7684\u540c\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0e\u8ba1\u7b97\u673a\u548c\u5176\u4ed6\u7a0b\u5e8f\u8fdb\u884c\u6c9f\u901a\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u7c7b\u5927\u8111\u4e2d\u7684\u903b\u8f91\u4e0d\u5149\u53ef\u4ee5\u7528\u4e8e\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6d41\uff0c\u8fd8\u53ef\u4ee5\u66f4\u76f4\u63a5\u5730\u8f6c\u5316\u4e3a\u751f\u4ea7\u529b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u8981\u8ba9AI\u80fd\u591f\u751f\u6210\u4ee3\u7801\uff0c\u8fd9\u4ef6\u4e8b\u60c5\u80af\u5b9a\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u5f53\u7136\u7531\u4e8eChatGPT\u7684\u51fa\u73b0\u76f8\u4fe1\u73b0\u5728\u5927\u90e8\u5206\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u611f\u53d7\u5230AI\u7684\u4ee3\u7801\u751f\u6210\u80fd\u529b\uff0c\u6709\u4e9b\u4eba\u6bd4\u8f83\u575a\u4fe1AI\u80fd\u591f\u4ee3\u66ff\u7a0b\u5e8f\u5458\u751f\u6210\u7a0b\u5e8f\uff0c\u6709\u4e9b\u4eba\u5219\u60b2\u89c2\u4e00\u4e9b\uff0c\u81f3\u5c11\u5728\u77ed\u671f\u5185\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u6682\u4e14\u4e0d\u4e89\u8bbaAI\u5230\u5e95\u80fd\u4e0d\u80fd\u6216\u8005\u4ec0\u4e48\u65f6\u5019\u66ff\u4ee3\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u56de\u5230\u95ee\u9898\u672c\u8eab\u3002\u4f20\u7edf\u7684\u6587\u672c\u5408\u6210\uff0c\u8ba1\u7b97\u7684\u662f\u6587\u5b57\u4e0e\u6587\u5b57\u4e4b\u95f4\uff0c\u53e5\u5b50\u4e0e\u53e5\u5b50\u4e4b\u95f4\u7684\u7ec4\u5408\u6982\u7387\uff0c\u8fd9\u91cc\u6709\u4e24\u4e2a\u4e8b\u60c5\u503c\u5f97\u6ce8\u610f\uff1a\u7b2c\u4e00\u662f\u4efb\u4f55\u5b57\u4e4b\u95f4\u90fd\u53ef\u4ee5\u7ec4\u5408\uff0c\u6240\u4ee5ChatGPT\u603b\u662f\u53ef\u4ee5\u7ed9\u6211\u4eec\u7b54\u6848\uff0c\u54ea\u6015\u5176\u4e2d\u7684\u53e5\u5b50\u7ec4\u5408\u548c\u903b\u8f91\u662f\u5b8c\u5168\u9519\u8bef\u7684\uff1b\u7b2c\u4e8c\u662f\u4e00\u822c\u5e38\u7528\u4e8e\u8868\u8ff0\u6b63\u786e\u8bed\u6cd5\u548c\u8bed\u4e49\u7684\u54ea\u4e9b\u6587\u5b57\u4fe1\u606f\u662f\u975e\u5e38\u591a\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4ChatGPT\u7406\u89e3\u6211\u4eec\u4e00\u822c\u7684\u6bd4\u8f83\u5927\u4f17\u5316\u7684\u8bed\u4e49\u662f\u5f88\u5bb9\u6613\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u673a\u7a0b\u5e8f\u5728\u8fd9\u4e24\u4e2a\u5c42\u9762\u90fd\u4e0e\u4e00\u822c\u7684\u6587\u672c\u77e5\u8bc6\u4fe1\u606f\u4e0d\u540c\uff1a\u9996\u5148\u4e24\u6bb5\u4ee3\u7801\u662f\u4e0d\u80fd\u7b80\u5355\u5408\u6210\u7684\uff0c\u4e24\u4e2a\u4ee3\u7801\u4e4b\u95f4\u5728\u5355\u7eaf\u5730\u50cf\u4e24\u6bb5\u6587\u5b57\u653e\u5728\u4e00\u8d77\u4e4b\u5916\uff0c\u8fd8\u9700\u8981\u5904\u7406\u53c2\u6570\u7684\u6570\u91cf\uff0c\u53c2\u6570\u7684\u540d\u79f0\uff0c\u7c7b\u578b\uff0c\u53d8\u91cf\u4ece\u54ea\u91cc\u83b7\u53d6\uff0cAPI\u4ece\u54ea\u91cc\u83b7\u53d6\u7b49\u7b49\uff0c\u8fd9\u8fdc\u8fdc\u8d85\u51fa\u7b80\u5355\u6587\u5b57\u5408\u6210\u7684\u8303\u56f4\u3002\u4f60\u53ef\u4ee5\u5408\u6210\u4e00\u4e2a\u6587\u672c\u7ec4\u5408\u7684\u6e90\u4ee3\u7801\u7ed3\u679c\uff0c\u4f46\u662f\u5176\u4e2d\u7684\u903b\u8f91\u53ef\u80fd\u5b8c\u5168\u662f\u9519\u8bef\u7684\uff0c\u51fd\u6570\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u53c2\u6570\u662f\u9519\u8bef\u7684\u3002\u56e0\u6b64\u76ee\u524d\u6765\u8bb2\uff0c\u5927\u90e8\u5206AI\u8fd8\u662f\u7528\u4e8e\u8f85\u52a9\u6bd4\u8f83\u5c40\u90e8\u3001\u72ec\u7acb\u7684\u4ee3\u7801\u751f\u6210\uff0c\u68c0\u67e5\uff0c\u63d0\u793a\u7b49\u7b49\uff0c\u8ddd\u79bb\u6784\u9020\u590d\u6742\u4e00\u70b9\u7684\u903b\u8f91\u663e\u7136\u8fd8\u7f3a\u4e4f\u4e00\u4e9b\u57fa\u7840\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u59a8\u788d\u5b83\u73b0\u5728\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u4e0d\u9519\u7684\u52a9\u624b\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5728Reality World\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\uff0c\u4e3a\u4e86\u8981\u8ba9\u666e\u904d\u7528\u6237\u53ef\u4ee5\u6784\u9020\u7a0b\u5e8f\uff0c\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u591a\u5904\u8c03\u6574\uff0c\u4ece\u7c7b\u578b\u5b9a\u4e49\uff0c\u6570\u636e\u521d\u59cb\u5316\u548c\u7ba1\u7406\uff0c\u4e92\u64cd\u4f5c\u6027\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a8\u6f14\uff0c\u7ebf\u7a0b\u9694\u79bb\u7b49\u7b49\u3002\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u5c31\u662f\u7ec4\u5408\u6027\uff0c\u8fd9\u79cd\u7ec4\u5408\u6027\u4f7f\u5f97\u4e24\u4e2a\u76f8\u5173\u7684\u7ec4\u4ef6\uff0c\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u6dfb\u52a0\u4efb\u4f55\u53c2\u6570\u6216\u8005\u8f93\u5165\u8f93\u51fa\u7684\u8bbe\u7f6e\uff0c\u5c31\u53ef\u4ee5\u6b63\u786e\u5730\u6784\u9020\u7a0b\u5e8f\uff0c\u4f8b\u5982\u5982\u4e0b\u7684\u8fd9\u6bb5\u590d\u6742\u7684\u903b\u8f91\uff0c\u6574\u4e2aGraph\u7684\u8282\u70b9\u662f\u4e0d\u9700\u8981\u7528\u6237\u8fde\u63a5\u7684\uff0c\u5168\u90e8\u662f\u81ea\u52a8\u751f\u6210\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"img",src:l(373).Z,width:"3356",height:"2096"})),(0,n.kt)("p",null,"\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fde\u63a5\u5173\u7cfb\u662f\u81ea\u52a8\u63a8\u5bfc\u7684"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u6027\u770b\u8d77\u6765\u662f\u4e0d\u53ef\u601d\u8bae\u7684\uff0c\u8fd9\u91cc\u6211\u4e0d\u4f1a\u8ba8\u8bba\u5177\u4f53\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fd9\u6837\u60f3\u8c61\u4e00\u4e0b\uff1a\u7f16\u8bd1\u5668\u5bf9\u4e8e\u4e00\u4e2a\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\uff0c\u672c\u6765\u5c31\u662f\u9996\u5148\u5f53\u6210\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u6a21\u5757\u8fdb\u884c\u7f16\u8bd1\u7684\uff0c\u53ea\u4e0d\u8fc7\u7f16\u8bd1\u5668\u9664\u4e86\u7f16\u8bd1\u6bcf\u4e2a\u6307\u4ee4\u672c\u8eab\uff0c\u8fd8\u4f7f\u7528\u4e00\u4e9b\u7b26\u53f7\u8868\u8bb0\u8f7d\u4e86\u6240\u6709\u5916\u90e8\u6a21\u5757\u5f15\u7528\u7684\u5173\u7cfb\u548c\u5730\u5740\uff0c\u7136\u540e\u5728\u94fe\u63a5\u9636\u6bb5\u5c06\u8fd9\u4e9b\u5730\u5740\u4fee\u6539\u4e3a\u6700\u7ec8\u7684\u7edd\u5bf9\u5730\u5740\u3002\u4ece\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u662f\u6709\u53ef\u80fd\u4ee5\u66f4\u5e95\u5c42\u7684\u65b9\u5f0f\u53bb\u5b8c\u6210\uff0c\u800c\u4e0d\u662f\u628a\u8fd9\u90e8\u5206\u4ea4\u7ed9\u7a0b\u5e8f\u5458\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ec4\u5408\u80fd\u529b\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u53d8\u6210\u4e86\u5355\u7eaf\u7684\u5408\u6210\uff0c\u6ca1\u9519\uff0c\u8fd9\u4e2a\u5408\u6210\u7684\u65b9\u5f0f\u8ddf\u6587\u672c\u5408\u6210\u662f\u975e\u5e38\u76f8\u4f3c\u7684\uff1a\u5b83\u4eec\u4ec5\u4ec5\u662f\u653e\u5230\u4e00\u8d77\uff0c\u4e0d\u9700\u8981\u6307\u5b9a\u989d\u5916\u7684\u7a0b\u5e8f\u7ed3\u6784\u4fe1\u606f\uff0c\u4f8b\u5982\u53c2\u6570\uff0c\u53d8\u91cf\uff0c\u51fd\u6570\u5730\u5740\u7b49\u7b49\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u6709\u673a\u4f1a\u8ba9AI\u53bb\u751f\u6210\u7a0b\u5e8f\uff0c\u8fd9\u91ccAI\u53ea\u9700\u8981\u4ece\u4e00\u822c\u7684\u6587\u5b57\u610f\u4e49\u4e0a\u53bb\u7406\u89e3\u7ec4\u4ef6\u7684\u8bed\u4e49\uff0c\u5e76\u7ed9\u51fa\u7ec4\u4ef6\u5408\u6210\u5e8f\u5217\uff0c\u800c\u5e95\u5c42\u7684\u8fd0\u884c\u65f6\u5f15\u64ce\u5c06\u8fd9\u4e9b\u5e8f\u5217\u8f6c\u5316\u4e3a\u771f\u6b63\u7684\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0e\u76f4\u63a5ChatGPT\u6784\u9020\u7a0b\u5e8f\u4ee3\u7801\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u4ee3\u7801\u4e00\u65e6\u88ab\u6784\u9020\uff0c\u5c31\u662f\u6b63\u786e\u7684\uff0c\u53ef\u4ee5\u8fd0\u884c\u7684\uff0c\u800c\u4e0d\u9700\u8981\u4eba\u53bb\u68c0\u67e5\u5176\u4e2d\u53ef\u80fd\u5b58\u5728\u7684\u7a0b\u5e8f\u903b\u8f91\u7684\u9519\u8bef\u3002"),(0,n.kt)("h3",{id:"\u9762\u5411ai\u7684\u7f16\u7a0b\u7cfb\u7edf"},"\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u4e0e\u76f4\u63a5\u8ba9AI\u6784\u9020\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u76f8\u6bd4\uff0c\u66f4\u597d\u7684\u4f7f\u7528\u65b9\u5f0f\u53ef\u80fd\u662fAutoGPT\u6216\u8005OpenAI\u7684\u63d2\u4ef6\u7cfb\u7edf\uff0c\u5728\u8fd9\u79cd\u67b6\u6784\u4e2d\uff0cAI\u66f4\u591a\u662f\u8d1f\u8d23\u6bd4\u8f83\u901a\u7528\u7684\u4e00\u4e9b\u8bed\u4e49\u7406\u89e3\uff0c\u7136\u540e\u628a\u5177\u4f53\u7684\u4e00\u4e9b\u4e0e\u9886\u57df\u7cfb\u7edf\u7684\u4ea4\u4e92\u4ea4\u7ed9\u4e13\u95e8\u7684\u63d2\u4ef6\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5728OpenAI\u7684Plugin\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2aPlugin\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u5e94\u7528\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u63cf\u8ff0\u597d\u7684\u8c03\u7528\u903b\u8f91\u4f7f\u5f97ChatGPT\u53ef\u4ee5\u6b63\u786e\u5730\u8c03\u7528\u5404\u4e2a\u5e94\u7528\u8f6f\u4ef6\u7684\u63a5\u53e3\uff0c\u4f46\u5982\u679c\u4f60\u7684\u4f7f\u7528\u672c\u8eab\u662f\u8981\u5728\u591a\u4e2aplugin\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u60f3\u6784\u9020\u4efb\u610f\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u628a\u6bcf\u4e2aplugin\u63a5\u53e3\u5f53\u4f5c\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u53c8\u4f1a\u56de\u5230\u8ba9AI\u7f16\u5199\u903b\u8f91\u4ee3\u7801\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u8fd9\u79cdPlugin\u7cfb\u7edf\uff0cReality World\u63d0\u4f9b\u7684\u4e0d\u662f\u4e00\u4e2a\u5355\u4e2aplugin\uff0c\u800c\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u80fd\u529b\uff0c\u5b83\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u4e00\u79cd\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\uff0c\u56e0\u4e3aAI\u53d1\u51fa\u7684\u6587\u672c\u5e8f\u5217\uff0c\u4f1a\u88abReality World\u5f53\u4f5c\u8f93\u5165\uff0c\u7136\u540e\u6309\u7167\u7a0b\u5e8f\u6784\u9020\u7684\u903b\u8f91\u53bb\u68c0\u7d22\u76f8\u5e94\u7684\u7ec4\u4ef6\u5e76\u7ec4\u5408\u6784\u9020\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u8981\u4e48\u662f\u6784\u9020\u4e0d\u51fa\u6765\u7684\uff0c\u8981\u4e48\u5c31\u662f\u81f3\u5c11\u80fd\u591f\u6210\u529f\u8fd0\u884c\u7684\uff0c\u800c\u5269\u4e0b\u7684\u6b63\u786e\u6027\u95ee\u9898\u5c31\u53d6\u51b3\u4e8e\u7ec4\u4ef6\u63cf\u8ff0\u7684\u51c6\u786e\u6027\u548cAI\u5bf9\u8bed\u4e49\u7684\u7406\u89e3\u4e86\u3002"),(0,n.kt)("h2",{id:"\u62e5\u62b1rust"},"\u62e5\u62b1Rust"),(0,n.kt)("p",null,"\u6211\u539f\u672c\u4ee5\u4e3a\u7684\u5f00\u53d1\u5468\u671f\u8fd8\u662f\u4f1a\u6bd4\u8f83\u957f\u7684\uff0c\u6bd5\u7adf\u8bbe\u8ba1\u7684\u7cfb\u7edf\u8bbe\u8ba1\u8fd8\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u65e9\u5148\u6211\u4f7f\u7528\u7684\u662fC++/C\u8fdb\u884c\u5f00\u53d1\uff0c\u8fdb\u884c\u4e86\u4e00\u4e9b\u7b80\u5355\u7684\u8bed\u8a00\u5305\u88c5\u548c\u7f16\u8bd1\u6d41\u7a0b\u5b9a\u5236\u3002\u56e0\u4e3a\u6211\u4eec2\u53f7\u5458\u5de5\u4e00\u76f4\u662fRust\u7231\u597d\u8005\uff0c\u4e00\u76f4\u5728\u9f13\u52a8\u6211\u4f7f\u7528Rust\uff0c\u867d\u7136\u4e4b\u524d\u770b\u8fc7Rust\u7684\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u4f46\u662f\u611f\u89c9\u8fd8\u662f\u6ca1\u6709\u7279\u522b\u7684\u52a8\u529b\u53bb\u5b8c\u5168\u5207\u6362\u5230Rust\u3002"),(0,n.kt)("p",null,"\u540e\u6765\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4f7f\u7528Rust\u8fdb\u884c\u5f00\u53d1\uff0c\u5f00\u59cb\u4e5f\u662f\u6709\u4e9b\u4e0d\u4e60\u60ef\uff0c\u4f46\u662f\u5728\u9010\u6b65\u5b66\u4e60\u548c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u611f\u53d7\u5230\u4e86Rust\u7684\u597d\u5904\uff0c\u8fd9\u91cc\u7ed9\u5927\u5bb6\u5206\u4eab\u548c\u63a8\u8350\u4e00\u4e0b\u3002"),(0,n.kt)("p",null,"Rust\u5bf9\u6211\u800c\u8a00\u6700\u5927\u7684\u597d\u5904\u548c\u4f53\u9a8c\u662f\uff0c\u8fed\u4ee3\u901f\u5ea6\u6bd4\u8f83\u5feb\uff0c\u8fd9\u7b26\u5408\u6211\u73b0\u5728\u7684\u9700\u6c42\u3002\u53ea\u8981\u4ee3\u7801\u7f16\u8bd1\u901a\u8fc7\uff0c\u51e0\u4e4e\u4e0d\u4f1a\u82b1\u65f6\u95f4\u53bb\u6392\u67e5\u4e00\u4e9b\u6bd4\u8f83\u8be1\u5f02\uff0c\u751a\u81f3\u9700\u8981\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u65ad\u6b65\u8c03\u8bd5\u624d\u80fd\u53d1\u73b0\u95ee\u9898\u7684bug\uff0c\u4e00\u822c\u6709bug\u5c31\u57fa\u672c\u4e0a\u5927\u90e8\u5206\u8fd8\u662f\u903b\u8f91\u95ee\u9898\uff0c\u800c\u4e14Rust\u7f16\u8bd1\u5668\u53ef\u4ee5\u6bd4\u8f83\u7cbe\u51c6\u5730\u544a\u8bc9\u4f60\u95ee\u9898\u7684\u4f4d\u7f6e\uff0c\u57fa\u672c\u4e0a\u4e00\u770b\u63d0\u793a\u5c31\u77e5\u9053\u8be5\u600e\u4e48\u6539\u4ee3\u7801\u4e86\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u4e3b\u8981\u662f\u5927\u5bb6\u8ba8\u8bba\u6bd4\u8f83\u591a\u7684\u9650\u5236\u4e86\uff0c\u4f60\u5f97\u5f88\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u8bbe\u8ba1\u6574\u4e2a\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u5982\u679c\u50cf\u4f20\u7edfC++\u90a3\u6837\u5230\u5904\u662f\u76f8\u4e92\u5f15\u7528\u663e\u7136\u51e0\u4e4e\u80af\u5b9a\u662f\u4f60\u5b8c\u5168\u6ca1\u6cd5\u901a\u8fc7\u7f16\u8bd1\u5668\uff0c\u4f60\u5f97\u8bbe\u8ba1\u597d\u6574\u4e2a\u7a0b\u5e8f\u5bf9\u8c61\u7684\u7ed3\u6784\uff0c\u8fd9\u91cc\u63a8\u8350Bevy\u5f15\u64ce\u5c31\u662f\u975e\u5e38\u597d\u7684\u67b6\u6784\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u51e0\u4e4e\u80fd\u89e3\u51b3\u5927\u90e8\u5206\u76f8\u4e92\u5f15\u7528\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u6bd4\u8f83\u5927\u7684\u95ee\u9898\u662f\u591a\u6b21\u5f15\u7528\u548c\u501f\u7528\u7684\u95ee\u9898\u4e86\uff0c\u8fd9\u4e2a\u95ee\u9898\u76f8\u5bf9\u597d\u89e3\u51b3\u4e00\u70b9\uff0c\u9996\u5148\u67b6\u6784\u597d\u4f1a\u5c11\u6389\u5f88\u591a\u8fd9\u79cd\u95ee\u9898\uff1b\u5176\u6b21\u5bf9\u4e8e\u5c40\u90e8\u7684\u4e00\u4e9b\u65b9\u6cd5\uff0c\u5b9e\u5728\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u4e07\u80fd\u5927\u6cd5\u5c31\u662f\u590d\u5236\u6570\u636e\u5c31\u597d\uff0c\u8fd9\u4e2a\u4e5f\u4e0d\u9700\u8981\u5b8c\u5168\u56de\u907f\uff0c\u6bd5\u7adf\u5728C++\u4e2d\u4e5f\u7ecf\u5e38\u4f1a\u5b58\u5728\u5bf9\u8c61\u590d\u5236\uff1b\u518d\u6709\u7a0d\u5fae\u590d\u6742\u4e00\u70b9\u5c31\u662f\u4f7f\u7528move\uff0c\u5148\u5c06\u6570\u636emove\u51fa\u6765\uff0c\u7136\u540e\u8fdb\u884c\u64cd\u4f5c\u4e4b\u540e\u518d\u586b\u56de\u53bb\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u6ca1\u6709\u5e76\u53d1\u95ee\u9898\uff0c\u8fd9\u79cd\u601d\u8def\u4e5f\u662f\u4e00\u79cd\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u5173\u4e8e\u6709\u4e9b\u4eba\u4f1a\u89c9\u5f97\uff0c\u50cfRust\u8fd9\u6837\u5f3a\u8feb\u5f00\u53d1\u8005\u8fc7\u65e9\u5173\u6ce8\u67b6\u6784\u4f1a\u5f71\u54cd\u5feb\u901f\u8fed\u4ee3\u3002\u8fd9\u4e00\u70b9\u6211\u4e0d\u662f\u5f88\u8d5e\u540c\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u9879\u76ee\uff0c\u5feb\u901f\u8fed\u4ee3\u4e5f\u662f\u8981\u6b63\u786e\u8fd0\u884c\u7684\uff0c\u800c\u4e14\u5982\u679c\u9879\u76ee\u672c\u8eab\u601d\u8003\u7740\u8db3\u591f\u591a\uff0c\u6216\u8005\u9879\u76ee\u6700\u7ec8\u80af\u5b9a\u662f\u8981\u4e0a\u7ebf\u4f7f\u7528\u7684\uff0c\u6211\u89c9\u5f97\u6162\u4e00\u70b9\u4e00\u8fb9\u8fed\u4ee3\u4e00\u8fb9\u5c31\u628a\u4ee3\u7801\u67b6\u6784\u5199\u7684\u66f4\u597d\uff0c\u4e5f\u8bb8\u6700\u7ec8\u662f\u4e00\u4ef6\u66f4\u597d\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"},"\u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u6211\u4ece2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\uff0c\u51e0\u4e4e\u6574\u6574\u4e00\u5e74\u65f6\u95f4\u5168\u90e8\u90fd\u5728\u601d\u8003\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u540e\u671f\u7684\u5f00\u53d1\u3002\u521a\u5f00\u59cb2\u4e2a\u6708\uff0c\u601d\u8def\u8fd8\u4e0d\u662f\u7279\u522b\u6e05\u6670\uff0c\u53ea\u662f\u5728\u4e0d\u505c\u3001\u75af\u72c2\u5730\u770b\u4e66\uff0c\u6211\u51e0\u4e4e\u628a\u6240\u6709\u80fd\u4e70\u5230\u7684\u4e2d\u6587\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u76f8\u5173\u7684\u4e66\u90fd\u770b\u4e86\u4e00\u9762\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u9010\u5b57\u9010\u53e5\u6162\u6162\u770b\uff0c\u90fd\u662f\u98de\u5feb\u5730\u6d4f\u89c8\uff0c\u5e76\u4e14\u8111\u888b\u4e2d\u9ad8\u901f\u8fd0\u8f6c\u7740\uff0c\u968f\u65f6\u90fd\u60f3\u7740\u6211\u8111\u888b\u4e2d\u7684\u54ea\u4e9b\u95ee\u9898\u600e\u4e48\u89e3\u51b3\uff0c\u8fd9\u6837\u5e26\u7740\u95ee\u9898\u770b\u4e66\u7684\u597d\u5904\u662f\uff0c\u53ea\u8981\u77e5\u8bc6\u4e4b\u95f4\u6709\u4e00\u70b9\u7684\u76f8\u5173\u6027\uff0c\u5c31\u80fd\u591f\u975e\u5e38\u654f\u9510\u5730\u6355\u6349\u5e76\u5173\u8054\u4e0a\uff0c\u7136\u540e\u518d\u5bf9\u8fd9\u5757\u77e5\u8bc6\u8fdb\u884c\u6df1\u5165\u5b66\u4e60\uff0c\u6700\u7ec8\u53ef\u4ee5\u8df3\u51fa\u5355\u7eaf\u7684\u77e5\u8bc6\u672c\u8eab\u53bb\u5e94\u7528\u8fd9\u4e9b\u77e5\u8bc6\uff0c\u751a\u81f3\u5c06\u4e00\u79cd\u77e5\u8bc6\u7684\u601d\u7ef4\u7528\u6765\u89e3\u51b3\u53e6\u4e00\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u4e00\u5e74\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8d85\u8fc750\u672c\u76f8\u5173\u7684\u4e66\u7c4d\uff0c\u5e76\u4e14\u5927\u90e8\u5206\u6bd4\u8f83\u76f8\u5173\u7684\u77e5\u8bc6\u90fd\u662f\u53cd\u590d\u9605\u8bfb\u7684\u3002"),(0,n.kt)("p",null,"\u65e9\u671f\u6211\u4e60\u60ef\u4f7f\u7528iPhone\u7684\u5907\u5fd8\u5f55app\u8bb0\u5f55\u4e00\u4e9b\u60f3\u6cd5\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u65b9\u4fbf\uff0c\u4efb\u4f55\u65f6\u5019\u60f3\u5230\u4e00\u70b9\u4e1c\u897f\u5c31\u53ef\u4ee5\u8bb0\u4e0b\u6765\uff0c\u5f88\u591a\u65f6\u5019\u665a\u4e0a\u534a\u591c\u90fd\u4f1a\u8d77\u6765\u8bb0\u5f55\uff0c\u786e\u5b9e\u6709\u4e9b\u4e1c\u897f\u5f88\u5feb\u5c31\u662f\u53ef\u4ee5\u5fd8\u8bb0\u7684\u3002\u540e\u6765\u4f53\u7cfb\u6bd4\u8f83\u5b8c\u6574\u7684\u65f6\u5019\u6211\u9010\u6b65\u5c06\u8fd9\u4e9b\u4fe1\u606f\u6574\u7406\u5230Markdown\u4e2d\uff0c\u5e76\u9010\u6b65\u79ef\u7d2f\uff0c\u73b0\u5728\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u5df2\u7ecf\u8d85\u8fc722\u4e07\u5b57\uff0c\u6574\u6574400\u591a\u9875\uff0c\u91cc\u9762\u5305\u542b\u4e86\u975e\u5e38\u591a\u7684\u6280\u672f\u7406\u89e3\u548c\u601d\u8003\u3002\u7b49\u9002\u5f53\u7684\u65f6\u5019\u6211\u4f1a\u5c06\u8fd9\u4e9b\u5185\u5bb9\u6574\u7406\u6210\u56fe\u4e66\u51fa\u7248\u3002"),(0,n.kt)("p",null,"\u8c46\u74e3\u4e0a\u6211\u5217\u4e86\u4e2atop 10\u7684\u56fe\u4e66\u699c\u5355\uff0c\u7f16\u7a0b\u76f8\u5173\u7684\u662f\uff1a\u300a\u7f16\u8bd1\u539f\u7406\u300b\u3001\u300aErlang\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\u300b\u3001\u300a\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u6a21\u5f0f\u300b\u3001\u300a\u6e38\u620f\u673a\u5236\u300b\u3001\u300a\u94fe\u63a5\u5668\u4e0e\u52a0\u8f7d\u5668\u300b\u3001\u300aData-oriented design\u300b\u3001\u300a\u51fd\u6570\u5f0f\u7f16\u7a0b\u601d\u7ef4\u300b\u3001\u300a\u51e4\u51f0\u67b6\u6784\u300b\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u56fe\u4e66\uff0c\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u5bf9\u6211\u5f71\u54cd\u6bd4\u8f83\u5927\u7684\u662f\uff1aErlang\u3001USD\u3001LLVM\u3001MLIR\u3001ECS\u3001Web Assembly\u3001Machinations\u3001\u300a\u5821\u5792\u4e4b\u591c\u300b\u3001Snapchat\u3001Bevy\u7b49\u7b49\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"},"\u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u53ef\u80fd\u5f88\u591a\u670b\u53cb\u4f1a\u5173\u5fc3\u4f60\u7684\u5546\u4e1a\u6a21\u5f0f\u662f\u4ec0\u4e48\uff0c\u8fd9\u91cc\u6211\u4e0d\u60f3\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u76ee\u524d\u53ea\u8ddf\u6295\u8d44\u4eba\u4e4b\u95f4\u624d\u4f1a\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u5f53\u7136\u6709\u5f88\u591a\u601d\u8003\uff0c\u4f46\u662f\u5728\u7f3a\u4e4f\u5f88\u591a\u80cc\u666f\u4e0b\uff0c\u6211\u89c9\u5f97\u73b0\u5728\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u8fd8\u662f\u592a\u65e9\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u4ecb\u610f\u5927\u5bb6\u8ba8\u8bba\u3002"),(0,n.kt)("h2",{id:"\u53c2\u4e0ereality-world\u5f00\u53d1"},"\u53c2\u4e0eReality World\u5f00\u53d1"),(0,n.kt)("p",null,"\u6beb\u65e0\u7591\u95ee\uff0cReality World\u6d89\u53ca\u5230\u5f88\u591a\u6280\u672f\u601d\u7ef4\uff0c\u751a\u81f3\u5305\u542b\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u6211\u76f8\u4fe1\u53c2\u4e0e\u8fd9\u4e2a\u9879\u76ee\u672c\u8eab\u80af\u5b9a\u4f1a\u5b66\u5230\u5f88\u591a\u77e5\u8bc6\u3002\u4f46\u73b0\u9636\u6bb5\u8fd8\u4e0d\u80fd\u6b63\u5f0f\u516c\u5e03\uff0c\u6211\u4eec\u9884\u8ba1\u4f1a\u57286\u4e2a\u6708\u5de6\u53f3\uff0c\u5728\u5185\u90e8\u8fed\u4ee3\u4e00\u4e9b\u7248\u672c\u518d\u6b63\u5f0f\u516c\u5e03\uff0c\u6240\u4ee5\u5728\u8fd9\u4e2a\u9636\u6bb5\u6211\u4e5f\u4e0d\u4f1a\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u592a\u591a\u5177\u4f53\u7684\u6280\u672f\u7ec6\u8282\u3002\u56e0\u4e3a\u5728\u4e2d\u56fd\u505a\u8fd9\u79cd\u4e8b\u60c5\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\uff0c\u7f51\u7edc\u4e0a\u4f1a\u6709\u5404\u79cd\u5404\u6837\u7684\u58f0\u97f3\uff0c\u6211\u4e0d\u5e0c\u671b\u53d7\u8fd9\u79cd\u5e72\u6270\uff0c\u4e3a\u4e86\u628a\u8fd9\u4ef6\u4e8b\u60c5\u505a\u6210\uff0c\u9700\u8981\u4e00\u9897\u5b89\u9759\u7684\u5fc3\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4f60\u5bf9Reality World\u611f\u5174\u8da3\uff0c\u4f60\u53ef\u4ee5\u8054\u7cfb\u6211\uff0c\u79c1\u4eba\u4e4b\u95f4\u6709\u65f6\u5019\u6211\u4f1a\u8ba8\u8bba\u4e00\u4e9b\u6280\u672f\u3002"),(0,n.kt)("h2",{id:"\u5173\u4e8e\u878d\u8d44"},"\u5173\u4e8e\u878d\u8d44"),(0,n.kt)("p",null,"\u5766\u767d\u8bf4\uff0c\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u8fd8\u6ca1\u6709\u62ff\u5230\u4efb\u4f55\u6295\u8d44\uff0c\u66fe\u7ecf\u6709\u975e\u5e38\u9876\u7ea7\u7684\u8d44\u672c\u804a\u4e86\u5f88\u4e45\uff0c\u5408\u4f19\u4eba\u4e5f\u975e\u5e38\u8ba4\u53ef\u8fd9\u4e2a\u9879\u76ee\u7684\u4ef7\u503c\uff0c\u4f46\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u8c08\u5b9a\u3002\u5728\u65e9\u671f\uff0c\u6211\u80af\u5b9a\u72af\u4e86\u5f88\u591a\u9519\u8bef\uff0c\u4f8b\u5982\u5bf9\u9879\u76ee\u7684\u89c4\u5212\uff0c\u4f30\u503c\u9884\u671f\uff0c\u751a\u81f3\u8868\u8fbe\u7b49\u7b49\u90fd\u8fd8\u662f\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5f53\u7136\u4e5f\u662f\u4e00\u79cd\u6210\u957f\uff1b\u6b64\u5916\u53bb\u5e74\u53c8\u9047\u5230\u75ab\u60c5\uff0c\u8fd8\u6709\uff0c\u4f60\u61c2\u7684\uff0c\u4eca\u5e74\u7684ChatGPT..."),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u540e\u7eed\u7684\u5f00\u53d1\u80af\u5b9a\u8fd8\u662f\u9700\u8981\u56e2\u961f\u548c\u8d44\u672c\uff0c\u6211\u4e00\u4e2a\u4eba\u5f88\u96be\u8fd9\u6837\u4e00\u76f4\u6301\u7eed\u4e0b\u5348\uff0c\u6b22\u8fce\u5404\u4f4d\u611f\u5174\u8da3\u7684\u8d44\u672c\u3001\u5f00\u53d1\u8005\u751a\u81f3\u52a0\u6cb9\u52a9\u5a01\u7684\u670b\u53cb\u4e0e\u6211\u8054\u7cfb\u3002"),(0,n.kt)("p",null,"\u5fae\u4fe1\uff1aARealityWorld"),(0,n.kt)("h2",{id:"\u540e\u8bb0"},"\u540e\u8bb0"),(0,n.kt)("p",null,"\u5728\u8fd9\u4e00\u5e74\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ddf\u5f88\u591a\u4e0d\u540c\u7684\u670b\u53cb\u6709\u8fc7\u5f88\u591a\u4ea4\u6d41\uff0c\u5f88\u591a\u670b\u53cb\u90fd\u5728\u9f13\u52b1\u548c\u652f\u6301\uff0c\u5e0c\u671b\uff0c\u6700\u7ec8\u4e0d\u4f1a\u8f9c\u8d1f\u4f60\u4eec\uff01"))}d.isMDXComponent=!0},1694:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/2-ea7a0b77be7f3ea877430d34be6a9c33.jpg"},1072:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/3-2935ce82c46c3780bb9a6be5605f32ff.jpg"},373:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/4-c18cbdad8df763f282adf9e615337ed8.jpg"},3206:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/5-25bf33bec4ab499cbb1f75fe4af6dc4e.jpg"},6081:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/Robert_Virding_and_Joe_Armstrong-82ddcf57cc160dd3b30ce80b0351bb6b.jpg"},3090:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/create-83a4808a18d663f143cd67c47dccbd84.png"},9800:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/graphql-b82a89e1f03ad72a5c43b193911c69a7.png"},9606:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/island-ed77d6189ea90804947341de732b2a5f.png"},9467:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/luau-8dcd3e07aca728930025b827afc3d0d9.png"},3819:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/modular-ec183275c9c4d2f77583a82e8119e52f.png"},2382:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/pl-01db64776749f259941139b1e0b0fd19.jpg"},9984:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/usd-1109031da5c391a7ac8194a67e234d38.png"},9875:(t,e,l)=>{l.d(e,{Z:()=>a});const a=l.p+"assets/images/verse-3604fc0feca3a40971cf71a64a6a61b6.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/17896441.2d94139d.js b/zh/assets/js/17896441.2d94139d.js deleted file mode 100644 index e188649..0000000 --- a/zh/assets/js/17896441.2d94139d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[7918],{7562:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ie});var a=n(7294),l=n(5463),r=n(3768);const o=a.createContext(null);function s(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(o.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(o);if(null===e)throw new r.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(4334),m=n(3488),u=n(7462),v=n(7325),b=n(3672);function p(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,v.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&a.createElement(b.Z,(0,u.Z)({},t,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(b.Z,(0,u.Z)({},n,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function h(){const{metadata:e}=c();return a.createElement(p,{previous:e.previous,next:e.next})}var g=n(9962),E=n(3699),f=n(868),L=n(3702),N=n(6409),C=n(8801);const Z={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function _(e){const t=Z[e.versionMetadata.banner];return a.createElement(t,e)}function k(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(v.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(E.Z,{to:n,onClick:l},a.createElement(v.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,g.Z)(),{pluginId:r}=(0,f.gA)({failfast:!0}),{savePreferredVersionName:o}=(0,N.J)(r),{latestDocSuggestion:s,latestVersionSuggestion:c}=(0,f.Jo)(r),i=s??(m=c).docs.find((e=>e.id===m.mainDocId));var m;return a.createElement("div",{className:(0,d.Z)(t,L.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(_,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(k,{versionLabel:c.label,to:i.path,onClick:()=>o(c.name)})))}function T(e){let{className:t}=e;const n=(0,C.E)();return n.banner?a.createElement(x,{className:t,versionMetadata:n}):null}function H(e){let{className:t}=e;const n=(0,C.E)();return n.badge?a.createElement("span",{className:(0,d.Z)(t,L.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(v.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function w(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function U(e){let{lastUpdatedBy:t}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function y(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:L.k.common.lastUpdated},a.createElement(v.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(w,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(U,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var A=n(1882),M=n(1540);const I={lastUpdated:"lastUpdated_vwxv"};function B(e){return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(M.Z,e)))}function O(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(A.Z,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",I.lastUpdated)},(n||l)&&a.createElement(y,{lastUpdatedAt:n,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function P(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:r,tags:o}=e,s=o.length>0,i=!!(t||n||r);return s||i?a.createElement("footer",{className:(0,d.Z)(L.k.docs.docFooter,"docusaurus-mt-lg")},s&&a.createElement(B,{tags:o}),i&&a.createElement(O,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:r,formattedLastUpdatedAt:l})):null}var V=n(4639),S=n(2728);const R={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function D(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",R.tocCollapsibleButton,!t&&R.tocCollapsibleButtonExpanded,n.className)}),a.createElement(v.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const F={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function z(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:r}=e;const{collapsed:o,toggleCollapsed:s}=(0,V.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(F.tocCollapsible,!o&&F.tocCollapsibleExpanded,n)},a.createElement(D,{collapsed:o,onClick:s}),a.createElement(V.z,{lazy:!0,className:F.tocCollapsibleContent,collapsed:o},a.createElement(S.Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:r})))}const q={tocMobile:"tocMobile_ITEo"};function j(){const{toc:e,frontMatter:t}=c();return a.createElement(z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(L.k.docs.docTocMobile,q.tocMobile)})}var G=n(3811);function W(){const{toc:e,frontMatter:t}=c();return a.createElement(G.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:L.k.docs.docTocDesktop})}var $=n(495),J=n(6220);function Q(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(L.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement($.Z,{as:"h1"},n)),a.createElement(J.Z,null,t))}var X=n(8259),Y=n(9003),K=n(9524);function ee(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const te={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function ne(){const e=(0,K.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(E.Z,{"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},a.createElement(ee,{className:te.breadcrumbHomeIcon})))}const ae={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function le(e){let{children:t,href:n,isLast:l}=e;const r="breadcrumbs__link";return l?a.createElement("span",{className:r,itemProp:"name"},t):n?a.createElement(E.Z,{className:r,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:r},t)}function re(e){let{children:t,active:n,index:l,addMicrodata:r}=e;return a.createElement("li",(0,u.Z)({},r&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(l+1)}))}function oe(){const e=(0,X.s1)(),t=(0,Y.Ns)();return e?a.createElement("nav",{className:(0,d.Z)(L.k.docs.docBreadcrumbs,ae.breadcrumbsContainer),"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(ne,null),e.map(((t,n)=>{const l=n===e.length-1;return a.createElement(re,{key:n,active:l,index:n,addMicrodata:!!t.href},a.createElement(le,{href:t.href,isLast:l},t.label))})))):null}const se={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function ce(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),l=e.hide_table_of_contents,r=!l&&t.length>0;return{hidden:l,mobile:r?a.createElement(j,null):void 0,desktop:!r||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(W,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&se.docItemCol)},a.createElement(T,null),a.createElement("div",{className:se.docItemContainer},a.createElement("article",null,a.createElement(oe,null),a.createElement(H,null),n.mobile,a.createElement(Q,null,t),a.createElement(P,null)),a.createElement(h,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function ie(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(s,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(i,null),a.createElement(ce,null,a.createElement(n,null))))}},1882:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(7294),l=n(7325),r=n(3702),o=n(7462),s=n(4334);const c={iconEdit:"iconEdit_Z9Sw"};function i(e){let{className:t,...n}=e;return a.createElement("svg",(0,o.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(c.iconEdit,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function d(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},a.createElement(i,null),a.createElement(l.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},3672:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(7294),l=n(4334),r=n(3699);function o(e){const{permalink:t,title:n,subLabel:o,isNext:s}=e;return a.createElement(r.Z,{className:(0,l.Z)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},o&&a.createElement("div",{className:"pagination-nav__sublabel"},o),a.createElement("div",{className:"pagination-nav__label"},n))}},2728:(e,t,n)=>{n.d(t,{Z:()=>b});var a=n(7462),l=n(7294),r=n(107);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function m(e){const t=(0,l.useRef)(void 0),n=d();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=i(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const v=l.memo(u);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:d,maxHeadingLevel:u,...b}=e;const p=(0,r.L)(),h=d??p.tableOfContents.minHeadingLevel,g=u??p.tableOfContents.maxHeadingLevel,E=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>s({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:h,maxHeadingLevel:g});return m((0,l.useMemo)((()=>{if(c&&i)return{linkClassName:c,linkActiveClassName:i,minHeadingLevel:h,maxHeadingLevel:g}}),[c,i,h,g])),l.createElement(v,(0,a.Z)({toc:E,className:n,linkClassName:c},b))}},3811:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(7462),l=n(7294),r=n(4334),o=n(2728);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",i="table-of-contents__link--active";function d(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(s.tableOfContents,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:i})))}},1693:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(7294),l=n(4334),r=n(3699);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function s(e){let{permalink:t,label:n,count:s}=e;return a.createElement(r.Z,{href:t,className:(0,l.Z)(o.tag,s?o.tagWithCount:o.tagRegular)},n,s&&a.createElement("span",null,s))}},1540:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(7294),l=n(4334),r=n(7325),o=n(1693);const s={tags:"tags_jXut",tag:"tag_QGVx"};function c(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,l.Z)(s.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:s.tag},a.createElement(o.Z,{label:t,permalink:n}))}))))}},8801:(e,t,n)=>{n.d(t,{E:()=>s,q:()=>o});var a=n(7294),l=n(3768);const r=a.createContext(null);function o(e){let{children:t,version:n}=e;return a.createElement(r.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocsVersionProvider");return e}},3132:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(7294),l=n(1141),r=n(7410);function o(e){return a.createElement(a.Fragment,null,a.createElement(l.Z,e))}(void 0!==n.g?n.g:window).Prism=r.Z,n(9385)}}]); \ No newline at end of file diff --git a/zh/assets/js/1f391b9e.28f273ba.js b/zh/assets/js/1f391b9e.28f273ba.js deleted file mode 100644 index 4c4457e..0000000 --- a/zh/assets/js/1f391b9e.28f273ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3085],{2865:(e,n,t)=>{t.r(n),t.d(n,{default:()=>d});var a=t(7294),l=t(4334),r=t(5463),c=t(3702),i=t(64),o=t(6220),s=t(3811);const m={mdxPageWrapper:"mdxPageWrapper_j9I6"};function d(e){const{content:n}=e,{metadata:{title:t,description:d,frontMatter:u}}=n,{wrapperClassName:f,hide_table_of_contents:v}=u;return a.createElement(r.FG,{className:(0,l.Z)(f??c.k.wrapper.mdxPages,c.k.page.mdxPage)},a.createElement(r.d,{title:t,description:d}),a.createElement(i.Z,null,a.createElement("main",{className:"container container--fluid margin-vert--lg"},a.createElement("div",{className:(0,l.Z)("row",m.mdxPageWrapper)},a.createElement("div",{className:(0,l.Z)("col",!v&&"col--8")},a.createElement("article",null,a.createElement(o.Z,null,a.createElement(n,null)))),!v&&n.toc.length>0&&a.createElement("div",{className:"col col--2"},a.createElement(s.Z,{toc:n.toc,minHeadingLevel:u.toc_min_heading_level,maxHeadingLevel:u.toc_max_heading_level}))))))}},2728:(e,n,t)=>{t.d(n,{Z:()=>v});var a=t(7462),l=t(7294),r=t(107);function c(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const a=t.slice(2,e.level);e.parentIndex=Math.max(...a),t[e.level]=n}));const a=[];return n.forEach((e=>{const{parentIndex:t,...l}=e;t>=0?n[t].children.push(l):a.push(l)})),a}function i(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return n.flatMap((e=>{const n=i({toc:e.children,minHeadingLevel:t,maxHeadingLevel:a});return function(e){return e.level>=t&&e.level<=a}(e)?[{...e,children:n}]:n}))}function o(e){const n=e.getBoundingClientRect();return n.top===n.bottom?o(e.parentNode):n}function s(e,n){let{anchorTopOffset:t}=n;const a=e.find((e=>o(e).top>=t));if(a){return function(e){return e.top>0&&e.bottom{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,l.useRef)(void 0),t=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:c}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const a=[];for(let l=n;l<=t;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:c}),o=s(i,{anchorTopOffset:t.current}),m=e.find((e=>o&&o.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(l),e.classList.add(l),n.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,t])}function u(e){let{toc:n,className:t,linkClassName:a,isChild:r}=e;return n.length?l.createElement("ul",{className:r?void 0:t},n.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:t,linkClassName:a}))))):null}const f=l.memo(u);function v(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...v}=e;const g=(0,r.L)(),h=m??g.tableOfContents.minHeadingLevel,L=u??g.tableOfContents.maxHeadingLevel,p=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:c(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:h,maxHeadingLevel:L});return d((0,l.useMemo)((()=>{if(o&&s)return{linkClassName:o,linkActiveClassName:s,minHeadingLevel:h,maxHeadingLevel:L}}),[o,s,h,L])),l.createElement(f,(0,a.Z)({toc:p,className:t,linkClassName:o},v))}},3811:(e,n,t)=>{t.d(n,{Z:()=>m});var a=t(7462),l=t(7294),r=t(4334),c=t(2728);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},o="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:n,...t}=e;return l.createElement("div",{className:(0,r.Z)(i.tableOfContents,"thin-scrollbar",n)},l.createElement(c.Z,(0,a.Z)({},t,{linkClassName:o,linkActiveClassName:s})))}},3132:(e,n,t)=>{t.d(n,{Z:()=>c});var a=t(7294),l=t(1141),r=t(7410);function c(e){return a.createElement(a.Fragment,null,a.createElement(l.Z,e))}(void 0!==t.g?t.g:window).Prism=r.Z,t(9385)}}]); \ No newline at end of file diff --git a/zh/assets/js/2ae76f65.e0ceff67.js b/zh/assets/js/2ae76f65.e0ceff67.js deleted file mode 100644 index fe03392..0000000 --- a/zh/assets/js/2ae76f65.e0ceff67.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6641],{4137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),d=o,m=u["".concat(l,".").concat(d)]||u[d]||f[d]||a;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(7462),o=(n(7294),n(4137));const a={},i=void 0,s={type:"mdx",permalink:"/zh/feature/cogine",source:"@site/src/pages/feature/cogine.mdx",description:"First define a Story struct with editor:",frontMatter:{}},l=[],c={toc:l},p="wrapper";function u(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"First define a Story struct with editor:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"std",src:n(452).Z,width:"1362",height:"589"})),(0,o.kt)("p",null,"Then define your component's input and output using the above defined struct also with editor:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"std",src:n(5811).Z,width:"1618",height:"504"})),(0,o.kt)("p",null,"Then define your logic flow:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"std",src:n(6453).Z,width:"1614",height:"303"})),(0,o.kt)("p",null,"Finally write your component's code with Lua:"),(0,o.kt)("p",null,"fetch_top_hn.lua:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local story_ids = get_url("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty")\n for i = 1, #story_ids do\n local url = string.format("https://hacker-news.firebaseio.com/v0/item/%s.json?print=pretty", story_ids[i])\n stories[i] = get_url(url)\n end\nend\n')),(0,o.kt)("p",null,"interpret_the_group.lua:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("Based on the following list of HackerNews threads, filter this list to only launches of new AI projects: %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information", prompt)\n if result["ok"] == true then\n for i = 1, #result["content"] do\n local story = {}\n out_stories[i] = result["content"][i]\n end\n end\nend\n')),(0,o.kt)("p",null,"format_and_rank.lua:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("this list of new AI projects in markdown, ranking the most interesting projects from most interesting to least. %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information",prompt)\n\n local msg = "The news with AI topics are:\\n"\n if result["ok"] == true then\n for i = 1, #result["content"] do\n msg = string.format("%s%d. %s\\n",msg,i,result["content"][i]["title"])\n end\n end\n \n message["content"] = msg\n message["receiver"] = "user"\nend\n')))}u.isMDXComponent=!0},5811:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cogine-components-c811dd4b9b3bcee1dcddcd64eeb2e83b.png"},6453:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cogine-flow-a9536cf3eaca92b6114d933df6f95c55.png"},452:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cogine-standards-afa43691cf3fe033e9a474df75d9608c.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/306a8c6c.6f9f76f5.js b/zh/assets/js/306a8c6c.6f9f76f5.js deleted file mode 100644 index 0fc2b70..0000000 --- a/zh/assets/js/306a8c6c.6f9f76f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[7616],{9479:e=>{e.exports=JSON.parse('{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"community":[{"type":"link","label":"index","href":"/zh/community/","docId":"index"}]},"docs":{"index":{"id":"index","title":"index","description":"","sidebar":"community"}}}')}}]); \ No newline at end of file diff --git a/zh/assets/js/308394e9.5d6b53fc.js b/zh/assets/js/308394e9.e298d7e2.js similarity index 57% rename from zh/assets/js/308394e9.5d6b53fc.js rename to zh/assets/js/308394e9.e298d7e2.js index 085c6af..48486db 100644 --- a/zh/assets/js/308394e9.5d6b53fc.js +++ b/zh/assets/js/308394e9.e298d7e2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3650],{4137:(e,t,l)=>{l.d(t,{Zo:()=>u,kt:()=>c});var a=l(7294);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,a)}return l}function r(e){for(var t=1;t=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}var s=a.createContext({}),p=function(e){var t=a.useContext(s),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var l=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),k=p(l),d=n,c=k["".concat(s,".").concat(d)]||k[d]||m[d]||i;return l?a.createElement(c,r(r({ref:t},u),{},{components:l})):a.createElement(c,r({ref:t},u))}));function c(e,t){var l=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=l.length,r=new Array(i);r[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[k]="string"==typeof e?e:n,r[1]=o;for(var p=2;p{l.r(t),l.d(t,{contentTitle:()=>r,default:()=>k,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var a=l(7462),n=(l(7294),l(4137));const i={},r="\u6587\u6863\u8bf4\u660e",o={type:"mdx",permalink:"/zh/learning/Reality-World",source:"@site/src/pages/learning/Reality-World.md",title:"\u6587\u6863\u8bf4\u660e",description:"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002",frontMatter:{}},s=[{value:"1.1 \u53d8\u9769",id:"11-\u53d8\u9769",level:2},{value:"1.1.1 \u5f62\u6001\u53d8\u5316",id:"111-\u5f62\u6001\u53d8\u5316",level:3},{value:"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",level:3},{value:"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb",id:"1121-\u4e1a\u52a1\u6bd4\u55bb",level:4},{value:"1.1.3 \u6280\u672f\u6311\u6218",id:"113-\u6280\u672f\u6311\u6218",level:3},{value:"1.2 \u73b0\u72b6",id:"12-\u73b0\u72b6",level:2},{value:"1.3 \u6280\u672f\u4f18\u52bf",id:"13-\u6280\u672f\u4f18\u52bf",level:2},{value:"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",level:3},{value:"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236",id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236",level:3},{value:"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017",id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017",level:3},{value:"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f",id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f",level:3},{value:"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"1.4 \u5546\u4e1a\u6a21\u5f0f",id:"14-\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",level:3},{value:"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",level:3},{value:"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",level:4},{value:"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d",id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",level:3},{value:"1.4.5 \u6301\u7eed\u6d88\u8d39",id:"145-\u6301\u7eed\u6d88\u8d39",level:3},{value:"1.5 \u7528\u6237",id:"15-\u7528\u6237",level:2},{value:"1.5.1 \u666e\u901a\u7528\u6237",id:"151-\u666e\u901a\u7528\u6237",level:3},{value:"1.5.2 \u521b\u4f5c\u7528\u6237",id:"152-\u521b\u4f5c\u7528\u6237",level:3},{value:"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b",id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b",level:4},{value:"1.5.3 \u5f00\u53d1\u8005",id:"153-\u5f00\u53d1\u8005",level:3},{value:"1.5.4 \u6807\u51c6\u4f5c\u8005",id:"154-\u6807\u51c6\u4f5c\u8005",level:3},{value:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c",id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c",level:2},{value:"2.1 Creation Scene Description",id:"21-creation-scene-description",level:2},{value:"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8",id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8",level:3},{value:"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f",id:"212-\u5185\u5b58\u5206\u5e03\u5f0f",level:3},{value:"2.2 Creation Script",id:"22-creation-script",level:2},{value:"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09",id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868",level:3},{value:"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868",id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868",level:4},{value:"2.2.1.2 \u7b26\u53f7\u8868",id:"2212-\u7b26\u53f7\u8868",level:4},{value:"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",level:4},{value:"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027",id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027",level:4},{value:"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf",id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf",level:4},{value:"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",level:4},{value:"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",level:4},{value:"2.2.1.8 \u5b58\u6863\u5c5e\u6027",id:"2218-\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.2 Entity",id:"222-entity",level:3},{value:"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",level:3},{value:"2.2.3.1 \u79c1\u6709\u53d8\u91cf",id:"2231-\u79c1\u6709\u53d8\u91cf",level:4},{value:"2.2.3.2 \u5199\u5165\u6743\u9650",id:"2232-\u5199\u5165\u6743\u9650",level:4},{value:"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",level:4},{value:"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",level:3},{value:"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",level:4},{value:"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",level:4},{value:"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026",id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026",level:4},{value:"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026",level:4},{value:"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316",id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316",level:3},{value:"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",level:4},{value:"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations",id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations",level:4},{value:"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",level:4},{value:"2.2.6 \u7ec4\u4ef6\u67e5\u8be2",id:"226-\u7ec4\u4ef6\u67e5\u8be2",level:3},{value:"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",level:4},{value:"2.2.6.2 \u663e\u5f0f\u58f0\u660e",id:"2262-\u663e\u5f0f\u58f0\u660e",level:4},{value:"2.2.6.3 RUST ECS",id:"2263-rust-ecs",level:4},{value:"2.2.6.4 Labels/Layers",id:"2264-labelslayers",level:4},{value:"2.2.7 Component + System",id:"227-component--system",level:3},{value:"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",level:4},{value:"2.2.7.2 Change-driven update",id:"2272-change-driven-update",level:4},{value:"2.2.7.3 ECS",id:"2273-ecs",level:4},{value:"2.2.7.4 ECS\u53c2\u6570",id:"2274-ecs\u53c2\u6570",level:4},{value:"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",level:4},{value:"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6",id:"2276-\u5355\u4f8b\u7ec4\u4ef6",level:4},{value:"2.2.8 \u6d88\u606f\u901a\u4fe1",id:"228-\u6d88\u606f\u901a\u4fe1",level:3},{value:"2.2.8.1 \u7cfb\u7edf\u673a\u5236",id:"2281-\u7cfb\u7edf\u673a\u5236",level:4},{value:"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168",id:"2282-\u7ec4\u4ef6\u5b89\u5168",level:4},{value:"2.2.8.3 \u6743\u9650\u63a7\u5236",id:"2283-\u6743\u9650\u63a7\u5236",level:4},{value:"2.2.8.4 \u65f6\u5e8f\u6027",id:"2284-\u65f6\u5e8f\u6027",level:4},{value:"2.2.8.5 \u6027\u80fd\u95ee\u9898",id:"2285-\u6027\u80fd\u95ee\u9898",level:4},{value:"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f",id:"2286-\u4e09\u79cd\u6a21\u5f0f",level:4},{value:"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863",id:"229-\u6570\u636e\u4e0e\u5b58\u6863",level:3},{value:"2.2.9.1 \u6570\u636e\u914d\u7f6e",id:"2291-\u6570\u636e\u914d\u7f6e",level:4},{value:"2.2.9.2 \u5b58\u6863",id:"2292-\u5b58\u6863",level:4},{value:"2.2.9.3 \u4e0d\u8db3",id:"2293-\u4e0d\u8db3",level:4},{value:"2.2.10 \u901a\u7528\u6027",id:"2210-\u901a\u7528\u6027",level:3},{value:"2.2.10.1 \u72ec\u7acb\u7c7b",id:"22101-\u72ec\u7acb\u7c7b",level:4},{value:"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",level:4},{value:"2.2.10.3 \u6709\u8fd4\u56de\u503c",id:"22103-\u6709\u8fd4\u56de\u503c",level:4},{value:"2.2.10.4 \u7ee7\u627f",id:"22104-\u7ee7\u627f",level:4},{value:"2.2.10.5 \u7ed3\u6784\u4f53",id:"22105-\u7ed3\u6784\u4f53",level:4},{value:"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387",id:"22106-\u63a7\u5236tick\u7684\u9891\u7387",level:4},{value:"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026",level:3},{value:"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c",id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c",level:4},{value:"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165",id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165",level:4},{value:"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",level:4},{value:"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",level:4},{value:"2.2.12 \u7b26\u53f7\u6cdb\u578b",id:"2212-\u7b26\u53f7\u6cdb\u578b",level:3},{value:"2.2.12.1 \u53d8\u91cf\u540d\u79f0",id:"22121-\u53d8\u91cf\u540d\u79f0",level:4},{value:"2.2.12.2 \u6a21\u5f0f\u5339\u914d",id:"22122-\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",level:4},{value:"2.2.13 \u5e76\u53d1",id:"2213-\u5e76\u53d1",level:3},{value:"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b",id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b",level:4},{value:"2.2.13.2 Erlang\u53caOOP",id:"22132-erlang\u53caoop",level:4},{value:"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",level:4},{value:"2.2.14 \u667a\u80fd\u611f\u77e5",id:"2214-\u667a\u80fd\u611f\u77e5",level:3},{value:"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92",id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92",level:3},{value:"2.2.14.1 HelpComponent",id:"22141-helpcomponent",level:4},{value:"2.2.15 Components",id:"2215-components",level:3},{value:"2.2.15.1 NeuralComponent",id:"22151-neuralcomponent",level:4},{value:"2.2.15.2 TagComponent",id:"22152-tagcomponent",level:4},{value:"2.2.15.3 RealityIDComponent",id:"22153-realityidcomponent",level:4},{value:"2.2.15.4 HelpComponent",id:"22154-helpcomponent",level:4},{value:"2.2.15.5 DeltaComponent",id:"22155-deltacomponent",level:4},{value:"2.2.16 \u6700\u4f73\u5b9e\u8df5",id:"2216-\u6700\u4f73\u5b9e\u8df5",level:3},{value:"2.2.16.1 more granular is better",id:"22161-more-granular-is-better",level:4},{value:"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f",id:"22162-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",level:3},{value:"2.2.17.1 \u6570\u636e\u6cdb\u578b",id:"22171-\u6570\u636e\u6cdb\u578b",level:4},{value:"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e",id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e",level:4},{value:"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",level:3},{value:"2.2.18.1 Update\u673a\u5236",id:"22181-update\u673a\u5236",level:4},{value:"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",level:4},{value:"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6",id:"22183-\u67b6\u6784\u590d\u6742\u5ea6",level:4},{value:"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI",id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai",level:3},{value:"2.2.20 \u5b89\u5168",id:"2220-\u5b89\u5168",level:3},{value:"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56",id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56",level:3},{value:"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",level:4},{value:"2.2.21.2 \u5173\u8054\u7ec4\u4ef6",id:"22212-\u5173\u8054\u7ec4\u4ef6",level:4},{value:"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f",id:"22213-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.22 \u5206\u5e03\u5f0f",id:"2222-\u5206\u5e03\u5f0f",level:3},{value:"2.2.23 \u5f02\u5e38",id:"2223-\u5f02\u5e38",level:3},{value:"2.2.23.1 \u81ea\u52a8\u5b58\u6863",id:"22231-\u81ea\u52a8\u5b58\u6863",level:4},{value:"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863",id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863",level:4},{value:"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9",id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9",level:4},{value:"2.2.24 \u7ec4\u4ef6\u5c5e\u6027",id:"2224-\u7ec4\u4ef6\u5c5e\u6027",level:3},{value:"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",level:3},{value:"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",level:4},{value:"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",level:4},{value:"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",level:4},{value:"2.3 Creation VM",id:"23-creation-vm",level:2},{value:"2.3.1 Creation Table Engine",id:"231-creation-table-engine",level:3},{value:"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4",id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4",level:4},{value:"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",level:4},{value:"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*",id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406",level:4},{value:"2.3.2 Add\u3001Remove",id:"232-addremove",level:3},{value:"2.3.3 Change-driven Update",id:"233-change-driven-update",level:3},{value:"2.3.3.1 \u7406\u8bba\u57fa\u7840",id:"2331-\u7406\u8bba\u57fa\u7840",level:4},{value:"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6",id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6",level:4},{value:"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a",id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a",level:4},{value:"2.3.3.4 Version Tracking",id:"2334-version--tracking",level:4},{value:"2.3.3.5 Bevy's Change Detection",id:"2335-bevys-change-detection",level:4},{value:"2.3.4 \u7f16\u8bd1",id:"234-\u7f16\u8bd1",level:3},{value:"2.3.4.1 AOT",id:"2341-aot",level:4},{value:"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",level:4},{value:"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",level:4},{value:"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d",id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d",level:3},{value:"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",level:3},{value:"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",level:4},{value:"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",level:4},{value:"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:4},{value:"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",level:4},{value:"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*",id:"237-\u9690\u5f0f\u865a\u62df\u673a",level:3},{value:"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",level:4},{value:"2.3.8 \u8c03\u5ea6\u5668",id:"238-\u8c03\u5ea6\u5668",level:3},{value:"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868",id:"239-\u52a8\u6001\u7b26\u53f7\u8868",level:3},{value:"2.3.10 \u865a\u62df\u673a\u67b6\u6784",id:"2310-\u865a\u62df\u673a\u67b6\u6784",level:3},{value:"2.3.10.1 \u670d\u52a1\u7aef",id:"23101-\u670d\u52a1\u7aef",level:4},{value:"2.3.10.2 \u5ba2\u6237\u7aef",id:"23102-\u5ba2\u6237\u7aef",level:4},{value:"2.4. CreationXR",id:"24-creationxr",level:2},{value:"2.4.1 Unified XR Input",id:"241-unified-xr-input",level:3},{value:"2.4.2 XR Scene Understanding",id:"242-xr-scene-understanding",level:3},{value:"2.4.3 Data-driven Architecture",id:"243-data-driven-architecture",level:3},{value:"2.4.4 \u4ea4\u4e92",id:"244-\u4ea4\u4e92",level:3},{value:"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",level:4},{value:"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92",id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92",level:4},{value:"2.5 Creation AI",id:"25-creation-ai",level:2},{value:"2.5.1 Semantics-based Creating",id:"251-semantics-based-creating",level:3},{value:"2.5.2 Procedural Content Generation",id:"252-procedural-content-generation",level:3},{value:"2.5.3 Intelligent Simulation",id:"253-intelligent-simulation",level:3},{value:"2.5.4 Research",id:"254-research",level:3},{value:"2.6 Creation Cloud",id:"26-creation-cloud",level:2},{value:"2.6.1 Creation Management",id:"261-creation-management",level:3},{value:"2.6.1.1 CreationID",id:"2611-creationid",level:4},{value:"2.6.2 Creation Code Library",id:"262--creation-code-library",level:3},{value:"2.6.2.1 \u6807\u51c6\u7ba1\u7406",id:"2621-\u6807\u51c6\u7ba1\u7406",level:4},{value:"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",level:4},{value:"2.6.3 Multi-player Services",id:"263-multi-player--services",level:3},{value:"2.6.3.1 Voice Service",id:"2631-voice-service",level:4},{value:"2.6.4 \u7aef\u4e91\u534f\u540c",id:"264-\u7aef\u4e91\u534f\u540c",level:3},{value:"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",level:4},{value:"2.6.4.2 Client as a Display",id:"2642-client-as-a-display",level:4},{value:"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",level:4},{value:"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",level:4},{value:"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f",id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f",level:4},{value:"2.6.5 \u5e76\u884c\u8ba1\u7b97",id:"265-\u5e76\u884c\u8ba1\u7b97",level:3},{value:"2.6.5.1 \u5206\u5e03\u5f0fCreation Table",id:"2651-\u5206\u5e03\u5f0fcreation-table",level:4},{value:"2.6.6 RPC",id:"266-rpc",level:3},{value:"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",level:2},{value:"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf",id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf",level:3},{value:"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b",id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143",id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143",level:4},{value:"2.7.2.2 \u5217\u8868\u64cd\u4f5c",id:"2722-\u5217\u8868\u64cd\u4f5c",level:4},{value:"2.7.3 \u6570\u636e\u9a71\u52a8",id:"273-\u6570\u636e\u9a71\u52a8",level:3},{value:"2.7.4 ECS",id:"274-ecs",level:3},{value:"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",level:3},{value:"2.7.6 \u52a8\u6001\u89e3\u91ca",id:"276-\u52a8\u6001\u89e3\u91ca",level:3},{value:"2.7.7 \u8d23\u6743\u8ba9\u6e21",id:"277-\u8d23\u6743\u8ba9\u6e21",level:3},{value:"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217",id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217",level:3},{value:"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",level:4},{value:"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027",id:"2782-\u5e76\u884c\u4f38\u7f29\u6027",level:4},{value:"2.7.9 Let is crash",id:"279-let-is-crash",level:3},{value:"2.7.9.1 \u5bb9\u9519\u673a\u5236",id:"2791-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6",id:"2792-\u5e76\u53d1\u8c03\u5ea6",level:4},{value:"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",level:3},{value:"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",level:4},{value:"2.7.10.2 Machinations",id:"27102-machinations",level:4},{value:"2.7.11 \u6a21\u5f0f\u5339\u914d",id:"2711-\u6a21\u5f0f\u5339\u914d",level:3},{value:"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.12.2 \u540d\u5b57\u5339\u914d",id:"27122-\u540d\u5b57\u5339\u914d",level:4},{value:"2.7.12 \u5206\u5e03\u5f0f",id:"2712-\u5206\u5e03\u5f0f",level:3},{value:"2.7.12.1 Actor\u6a21\u578b",id:"27121-actor\u6a21\u578b",level:4},{value:"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",level:3},{value:"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6",id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6",level:4},{value:"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",level:4},{value:"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",level:4},{value:"2.7.14 Serverless",id:"2714-serverless",level:3},{value:"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5",id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5",level:3},{value:"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:3},{value:"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",level:4},{value:"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",level:4},{value:"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:4},{value:"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",level:4},{value:"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",level:4},{value:"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf",id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf",level:3},{value:"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570",id:"27171-\u5355\u53c2\u6570\u51fd\u6570",level:4},{value:"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b",id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",level:3},{value:"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027",id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027",level:4},{value:"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",level:4},{value:"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",level:4},{value:"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",level:4},{value:"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5",id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5",level:4},{value:"2.7.20 \u8ba1\u7b97\u56fe",id:"2720-\u8ba1\u7b97\u56fe",level:3},{value:"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf",id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf",level:2},{value:"2.8.1 \u52a8\u6001\u7f16\u8bd1",id:"281-\u52a8\u6001\u7f16\u8bd1",level:3},{value:"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",level:3},{value:"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f",id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f",level:3},{value:"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0",id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0",level:3},{value:"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",level:3},{value:"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",level:3},{value:"2.8.7 \u52a8\u6001\u5524\u9192",id:"287-\u52a8\u6001\u5524\u9192",level:3},{value:"2.9 \u4e92\u64cd\u4f5c\u6027",id:"29-\u4e92\u64cd\u4f5c\u6027",level:2},{value:"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",level:3},{value:"2.9.1.1 Object models",id:"2911-object-models",level:4},{value:"2.9.1.2 Virtual machines",id:"2912-virtual-machines",level:4},{value:"2.9.1.3 Foreign function interfaces",id:"2913-foreign-function-interfaces",level:4},{value:"2.9.1.4 Challenges",id:"2914-challenges",level:4},{value:"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",level:4},{value:"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",level:4},{value:"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",level:4},{value:"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",level:4},{value:"2.9.5 \u4ea4\u4e92\u6a21\u5f0f",id:"295-\u4ea4\u4e92\u6a21\u5f0f",level:3},{value:"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94",id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94",level:4},{value:"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027",id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027",level:4},{value:"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",level:4},{value:"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",level:3},{value:"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528",id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528",level:4},{value:"2.10 GPU VM",id:"210-gpu-vm",level:2},{value:"2.11 Render VM",id:"211-render-vm",level:2},{value:"2.12 RealityIS Runtime",id:"212-realityis-runtime",level:2},{value:"2.13 \u6027\u80fd\u56e0\u7d20",id:"213-\u6027\u80fd\u56e0\u7d20",level:2},{value:"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931",id:"2131-\u5c40\u90e8\u6027\u4e27\u5931",level:3},{value:"2.13.2 \u65e0\u6548\u8ba1\u7b97",id:"2132-\u65e0\u6548\u8ba1\u7b97",level:3},{value:"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*",id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d",level:2},{value:"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840",id:"2141-realityis\u6838\u5fc3\u57fa\u7840",level:3},{value:"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027",id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027",level:3},{value:"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5",id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5",level:3},{value:"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",level:4},{value:"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027",id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027",level:4},{value:"2.14.3.3 \u7248\u672c\u7ba1\u7406",id:"21433-\u7248\u672c\u7ba1\u7406",level:4},{value:"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",level:4},{value:"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",level:3},{value:"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",level:2},{value:"2.15.1 \u590d\u6742\u7cfb\u7edf",id:"2151-\u590d\u6742\u7cfb\u7edf",level:3},{value:"2.15.2 \u7ec6\u80de\u6a21\u578b",id:"2152-\u7ec6\u80de\u6a21\u578b",level:3},{value:"2.15.2.1 Isolation",id:"21521-isolation",level:4},{value:"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",level:3},{value:"2.15.3.1 Is Erlang object oriented?",id:"21531-is-erlang-object-oriented",level:4},{value:"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb",id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb",level:4},{value:"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236",id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236",level:4},{value:"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",level:3},{value:"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",level:4},{value:"2.15.4.2 \u6d88\u606f\u4f20\u9012",id:"21542-\u6d88\u606f\u4f20\u9012",level:4},{value:"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",level:4},{value:"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5",id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5",level:4},{value:"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7",id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7",level:4},{value:"2.15.4.6 \u591a\u6001",id:"21546-\u591a\u6001",level:4},{value:"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb",id:"21547-\u5bf9\u8c61\u5173\u7cfb",level:4},{value:"2.15.4.8 \u5bb9\u9519\u673a\u5236",id:"21548-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",level:2},{value:"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027",id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027",level:3},{value:"2.16.1.1 java class loader & security",id:"21611-java-class-loader--security",level:4},{value:"2.16.1.2 Java applets",id:"21612-java-applets",level:4},{value:"2.16.1.3 MVM",id:"21613-mvm",level:4},{value:"2.16.2 Program Security Mechanisms",id:"2162-program-security-mechanisms",level:3},{value:"2.16.2.1 CFI",id:"21621-cfi",level:4},{value:"2.16.2.2 SFI",id:"21622-sfi",level:4},{value:"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",level:5},{value:"2.16.2.2.2 Heavyweight Transitions",id:"216222-heavyweight-transitions",level:5},{value:"2.16.2.3 object space model",id:"21623-object--space-model",level:4},{value:"2.16.2.4 lua Environment",id:"21624-lua-environment",level:4},{value:"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236",id:"21625-erlang-\u9694\u79bb\u673a\u5236",level:4},{value:"2.16.3 Webassembly Security",id:"2163-webassembly-security",level:3},{value:"2.16.3.1 Module & CFI",id:"21631-module--cfi",level:4},{value:"2.16.3.2 Memory safety",id:"21632-memory-safety",level:4},{value:"2.16.3.3 Isolation without Taxation",id:"21633-isolation-without-taxation",level:4},{value:"2.16.3.3.1 Zero-cost conditions",id:"216331-zero-cost-conditions",level:5},{value:"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",level:3},{value:"2.16.4.1 \u5bf9\u8c61\u9694\u79bb",id:"21641-\u5bf9\u8c61\u9694\u79bb",level:4},{value:"2.16.4.2 app spaces",id:"21642-app-spaces",level:4},{value:"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1",id:"21643-\u5bf9\u8c61\u901a\u4fe1",level:4},{value:"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",level:4},{value:"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784",id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784",level:2},{value:"2.17.1 LLVM",id:"2171-llvm",level:3},{value:"2.17.2 USD",id:"2172-usd",level:3},{value:"2.17.3 MLIR",id:"2173-mlir",level:3},{value:"2.17.4 Lua C API",id:"2174-lua-c-api",level:3},{value:"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",level:3},{value:"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",level:2},{value:"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236",id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236",level:3},{value:"2.18.2 \u94fe\u63a5\u673a\u5236",id:"2182-\u94fe\u63a5\u673a\u5236",level:3},{value:"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236",id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236",level:3},{value:"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",level:2},{value:"3.1 Creation ID",id:"31-creation-id",level:2},{value:"3.2 Creation Simulation",id:"32-creation-simulation",level:2},{value:"3.3 UI\u7ec4\u4ef6",id:"33-ui\u7ec4\u4ef6",level:2},{value:"3.3.1 Bevy UI",id:"331-bevy-ui",level:3},{value:"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",level:3},{value:"4.1 Reality ID",id:"41-reality-id",level:2},{value:"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406",id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406",id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406",level:3},{value:"4.2 The Reality World app",id:"42-the-reality-world-app",level:2},{value:"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",level:3},{value:"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",level:4},{value:"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",level:4},{value:"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",level:4},{value:"4.2.2 \u4f20\u9001\u95e8",id:"422-\u4f20\u9001\u95e8",level:3},{value:"4.2.3 Point and Click",id:"423-point-and-click",level:3},{value:"4.3 \u6e90\u52a8\u529b",id:"43-\u6e90\u52a8\u529b",level:2},{value:"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",level:3},{value:"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",level:3},{value:"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e",id:"4321-\u6301\u7eed\u7ecf\u6d4e",level:4},{value:"4.3.2.2 \u5e7f\u544a\u5185\u5bb9",id:"4322-\u5e7f\u544a\u5185\u5bb9",level:4},{value:"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",level:3},{value:"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743",id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743",level:2},{value:"4.4.1 RealityIDComponent",id:"441-realityidcomponent",level:3},{value:"4.4.2 readonly",id:"442-readonly",level:3},{value:"4.4.3 \u91cd\u65b0\u52a0\u8f7d",id:"443-\u91cd\u65b0\u52a0\u8f7d",level:3},{value:"4.5 \u7a33\u5b9a\u6027",id:"45-\u7a33\u5b9a\u6027",level:2},{value:"4.5.1 Reality Verified Components",id:"451-reality-verified-components",level:3},{value:"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",level:3},{value:"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613",id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613",level:2},{value:"4.6.1 \u53ca\u65f6\u8d2d\u4e70",id:"461-\u53ca\u65f6\u8d2d\u4e70",level:3},{value:"4.6.2 \u667a\u80fd\u8d2d\u4e70",id:"462-\u667a\u80fd\u8d2d\u4e70",level:3},{value:"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",level:3},{value:"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",level:4},{value:"4.6.4 \u5e02\u573a\u7ecf\u6d4e",id:"464-\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",level:4},{value:"4.6.5 \u533a\u5757\u94fe",id:"465-\u533a\u5757\u94fe",level:3},{value:"4.6.5.1 \u4ef7\u503c\u5173\u8054",id:"4651-\u4ef7\u503c\u5173\u8054",level:4},{value:"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a",id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a",level:4},{value:"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",level:4},{value:"4.6.6 Royalty",id:"466-royalty",level:3},{value:"4.6.6.1 \u6807\u51c6\u7a0e",id:"4661-\u6807\u51c6\u7a0e",level:4},{value:"4.6.6.2 \u7ec4\u4ef6\u7a0e",id:"4662-\u7ec4\u4ef6\u7a0e",level:4},{value:"4.6.9 \u5b8c\u6574\u7684\u751f\u6001",id:"469-\u5b8c\u6574\u7684\u751f\u6001",level:3},{value:"4.7 Social",id:"47-social",level:2},{value:"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4",id:"471-\u79c1\u4eba\u5316\u793e\u4ea4",level:3},{value:"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1",id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1",level:4},{value:"4.7.2 \u5173\u6ce8\u73b0\u5b9e",id:"472--\u5173\u6ce8\u73b0\u5b9e",level:3},{value:"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",level:2},{value:"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027",id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027",level:3},{value:"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",level:3},{value:"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",level:3},{value:"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c",id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c",level:3},{value:"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f",id:"485-\u521b\u9020\u7684\u65b9\u5f0f",level:3},{value:"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",level:3},{value:"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",level:3},{value:"4.9 Third party apps",id:"49-third-party-apps",level:2},{value:"4.10 \u793e\u4f1a\u4ef7\u503c",id:"410--\u793e\u4f1a\u4ef7\u503c",level:2},{value:"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",level:3},{value:"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",level:3},{value:"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",level:3},{value:"4.11 \u6807\u51c6",id:"411-\u6807\u51c6",level:2},{value:"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",level:3},{value:"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"4.11.3 \u6807\u51c6\u7ba1\u7406",id:"4113-\u6807\u51c6\u7ba1\u7406",level:3},{value:"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5",id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236",id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236",level:4},{value:"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09",id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236",level:4},{value:"4.11.4 \u8de8\u8d8a\u6807\u51c6",id:"4114-\u8de8\u8d8a\u6807\u51c6",level:3},{value:"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",level:4},{value:"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse",id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse",level:2},{value:"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c",id:"4121-\u6807\u51c6\u7684\u4ef7\u503c",level:3},{value:"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",level:3},{value:"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",level:3},{value:"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",level:4},{value:"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",level:3},{value:"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",level:4},{value:"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",level:4},{value:"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",level:4},{value:"4.13 \u7528\u6237\u521b\u4f5c",id:"413-\u7528\u6237\u521b\u4f5c",level:2},{value:"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",level:3},{value:"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",level:3},{value:"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7",id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7",level:3},{value:"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",level:2},{value:"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458",id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458",level:3},{value:"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI",id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai",level:3},{value:"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",level:4},{value:"5.1 \u4ee3\u5e01\u7ecf\u6d4e",id:"51-\u4ee3\u5e01\u7ecf\u6d4e",level:2},{value:"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",level:3},{value:"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",level:3},{value:"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97",id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97",level:2},{value:"5.2.1 \u7ed3\u7b97\u6027\u80fd",id:"521-\u7ed3\u7b97\u6027\u80fd",level:3},{value:"5.3 \u667a\u80fd\u5408\u7ea6",id:"53-\u667a\u80fd\u5408\u7ea6",level:2},{value:"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",level:2},{value:"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01",id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01",level:3},{value:"5.4.2 \u6d41\u52a8\u6027",id:"542-\u6d41\u52a8\u6027",level:3},{value:"5.5 \u5e73\u53f0\u4fe1\u7528",id:"55-\u5e73\u53f0\u4fe1\u7528",level:2},{value:"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae",id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae",level:3},{value:"5.5.2 \u4ee3\u5e01\u534f\u8bae",id:"552-\u4ee3\u5e01\u534f\u8bae",level:3},{value:"5.6 \u73b0\u5b9e\u5e94\u7528",id:"56-\u73b0\u5b9e\u5e94\u7528",level:2},{value:"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",level:2},{value:"5.7.1 \u73a9\u5bb6\u9053\u5fb7",id:"571-\u73a9\u5bb6\u9053\u5fb7",level:3},{value:"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1",id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1",level:3},{value:"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",level:2},{value:"5.8.1 \u793e\u4ea4\u5206\u4eab",id:"581-\u793e\u4ea4\u5206\u4eab",level:3},{value:"5.8.2 \u53c2\u4e0e\u5185\u6d4b",id:"582-\u53c2\u4e0e\u5185\u6d4b",level:3},{value:"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",level:2},{value:"5.10 \u67b6\u6784\u7f3a\u9677",id:"510-\u67b6\u6784\u7f3a\u9677",level:2},{value:"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",level:3},{value:"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",level:3},{value:"7.1 \u6570\u636e\u683c\u5f0f",id:"71-\u6570\u636e\u683c\u5f0f",level:2},{value:"7.1.1 USD",id:"711-usd",level:3},{value:"7.1.1.1 \u65b0\u601d\u60f3",id:"7111-\u65b0\u601d\u60f3",level:4},{value:"7.1.1.2 \u6280\u672f\u65b9\u6848",id:"7112-\u6280\u672f\u65b9\u6848",level:4},{value:"7.1.1.3 USDZ",id:"7113-usdz",level:4},{value:"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0",id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0",level:4},{value:"7.1.1.5 \u5bf9\u6bd4",id:"7115-\u5bf9\u6bd4",level:4},{value:"7.1.2 Alembic formats",id:"712-alembic-formats",level:3},{value:"7.1.3 Unity Prefabs",id:"713-unity-prefabs",level:3},{value:"7.1.4 \u4ee3\u7801\u751f\u6210",id:"714-\u4ee3\u7801\u751f\u6210",level:3},{value:"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784",id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784",level:2},{value:"7.2.1 Unity DOTS/ECS",id:"721-unity-dotsecs",level:3},{value:"7.2.2 ECS",id:"722-ecs",level:3},{value:"7.2.3 UE5 MASS",id:"723-ue5-mass",level:3},{value:"7.2.4 Data-oriented and -driven",id:"724-data-oriented-and--driven",level:3},{value:"7.2.5 Rust ECS",id:"725--rust-ecs",level:3},{value:"7.3 \u7f16\u8bd1\u5668\u4e0eDSL",id:"73-\u7f16\u8bd1\u5668\u4e0edsl",level:2},{value:"7.3.1 Taichi",id:"731--taichi",level:3},{value:"7.3.1.1 \u65b0\u601d\u60f3",id:"7311-\u65b0\u601d\u60f3",level:4},{value:"7.3.1.2 \u6280\u672f\u65b9\u6848",id:"7312-\u6280\u672f\u65b9\u6848",level:4},{value:"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0",id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0",level:4},{value:"7.3.1.4 \u5bf9\u6bd4",id:"7314-\u5bf9\u6bd4",level:4},{value:"7.3.2 Modular AI",id:"732-modular-ai",level:3},{value:"7.3.2.1 \u65b0\u601d\u60f3",id:"7321-\u65b0\u601d\u60f3",level:4},{value:"7.3.2.2 Challenges",id:"7322-challenges",level:4},{value:"7.3.2.3 Core additions to MLIR",id:"7323-core-additions-to-mlir",level:4},{value:"7.3.2.4 \u7b14\u8bb0",id:"7324-\u7b14\u8bb0",level:4},{value:"7.3.3 Jittor",id:"733-jittor",level:3},{value:"7.3.3.1 The front-end",id:"7331-the-front-end",level:4},{value:"7.3.3.2 The back-end",id:"7332-the-back-end",level:4},{value:"7.3.4 PyTorch",id:"734-pytorch",level:3},{value:"7.3.4.1 Perform focused implementation",id:"7341-perform-focused-implementation",level:4},{value:"7.3.5 OneFlow",id:"735-oneflow",level:3},{value:"7.3.6 PREDA",id:"736-preda",level:3},{value:"7.3.7 Web Assembly",id:"737-web-assembly",level:3},{value:"7.4 Others",id:"74-others",level:2},{value:"7.4.1 \u795e\u7ecf\u7f51\u7edc",id:"741-\u795e\u7ecf\u7f51\u7edc",level:3},{value:"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",level:3},{value:"7.4.2.1 pip",id:"7421-pip",level:4},{value:"7.4.2.2 Rust",id:"7422-rust",level:4},{value:"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01",id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01",level:3},{value:"7.4.4 Rust",id:"744-rust",level:3},{value:"7.4.5 Unity EditorXR and SceneFusion",id:"745-unity-editorxr-and-scenefusion",level:3},{value:"7.4.6 BEVYengine",id:"746-bevyengine",level:3},{value:"7.4.8 magicavoxel",id:"748-magicavoxel",level:3},{value:"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",level:3},{value:"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b",id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b",level:3},{value:"7.4.11 Meta Builder bot",id:"7411-meta-builder-bot",level:3},{value:"7.4.12 Houdini: Node-based Workflow",id:"7412-houdini-node-based-workflow",level:3},{value:"7.4.13 realityOS",id:"7413-realityos",level:3},{value:"7.4.14 OpenXR",id:"7414-openxr",level:3},{value:"7.4.15 ECS + AI",id:"7415-ecs--ai",level:3},{value:"7.4.16 Unreal blueprint",id:"7416-unreal-blueprint",level:3},{value:"7.4.17 Pixar",id:"7417-pixar",level:3},{value:"7.4.18 Gaia procedural-worlds.com",id:"7418-gaia-procedural-worldscom",level:3},{value:"7.4.19 Google Maps API",id:"7419-google-maps-api",level:3},{value:"7.4.20 Procedural content generation",id:"7420-procedural-content-generation",level:3},{value:"7.4.21 casualcreator",id:"7421-casualcreator",level:3},{value:"7.4.22 \u5fae\u670d\u52a1\u5316",id:"7422-\u5fae\u670d\u52a1\u5316",level:3},{value:"7.4.23 Google Tilt Brush",id:"7423-google-tilt-brush",level:3},{value:"7.4.24 GitHub",id:"7424-github",level:3},{value:"7.4.25 Stechfab",id:"7425-stechfab",level:3},{value:"7.4.26 Game pigeon: games for iMessage",id:"7426-game-pigeon-games-for-imessage",level:3},{value:"7.5 \u5e94\u7528",id:"75-\u5e94\u7528",level:2},{value:"7.5.1 \u5821\u5792\u4e4b\u591c",id:"751--\u5821\u5792\u4e4b\u591c",level:3},{value:"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",level:4},{value:"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1",id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1",level:4},{value:"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4",id:"7513-\u79c1\u5bc6\u793e\u4ea4",level:4},{value:"7.5.1.4 Verse Language",id:"7514-verse-language",level:4},{value:"7.5.2 ROBLOX",id:"752-roblox",level:3},{value:"7.5.3 NIANTIC",id:"753-niantic",level:3},{value:"7.5.4 SNAPCHAT",id:"754-snapchat",level:3},{value:"7.5.5 Meta",id:"755-meta",level:3},{value:"7.5.6 Omniverse",id:"756-omniverse",level:3},{value:"7.5.7 Minecraft",id:"757-minecraft",level:3},{value:"7.5.8 Wilder World",id:"758-wilder-world",level:3},{value:"7.6 \u533a\u5757\u94fe",id:"76-\u533a\u5757\u94fe",level:2},{value:"7.6.1 \u95ee\u9898",id:"761-\u95ee\u9898",level:3},{value:"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f",id:"7611-\u6210\u672c\u95ee\u9898",level:4},{value:"7.6.1.2 \u793e\u533a\u6cbb\u7406",id:"7612-\u793e\u533a\u6cbb\u7406",level:4},{value:"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7",id:"7614-\u7cfb\u7edf\u5347\u7ea7",level:4},{value:"7.6.2 \u6982\u5ff5",id:"762-\u6982\u5ff5",level:3},{value:"7.6.2.1 \u667a\u80fd\u5408\u7ea6",id:"7621-\u667a\u80fd\u5408\u7ea6",level:4},{value:"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01",id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01",level:4},{value:"7.6.2.3 ICO",id:"7623-ico",level:4},{value:"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09",id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7",level:4},{value:"7.7 Machinations",id:"77-machinations",level:2},{value:"7.8 Render Graph",id:"78-render-graph",level:2},{value:"7.8.1 WorldRenderer challenges",id:"781-worldrenderer-challenges",level:3},{value:"7.8.2 Modular WorldRenderer goals",id:"782-modular-worldrenderer-goals",level:3},{value:"7.9 MLIR",id:"79-mlir",level:2},{value:"7.9.1 \u4ecb\u7ecd",id:"791-\u4ecb\u7ecd",level:3},{value:"7.9.2 \u8bbe\u8ba1\u539f\u5219",id:"792-\u8bbe\u8ba1\u539f\u5219",level:3},{value:"7.9.3 MLIR structure",id:"793-mlir-structure",level:3},{value:"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR",id:"794-llvm-irspir-vmlir",level:3},{value:"7.9.4.1 LLVM IR",id:"7941-llvm-ir",level:4},{value:"7.9.4.2 SPIR-V",id:"7942-spir-v",level:4},{value:"7.9.4.3 MLIR",id:"7943-mlir",level:4},{value:"7.9.5 MLIR Dialect",id:"795-mlir-dialect",level:3},{value:"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6",id:"7951-\u57fa\u7840\u7ec4\u4ef6",level:4},{value:"7.9.5.2 Dialect\u4f53\u7cfb",id:"7952-dialect\u4f53\u7cfb",level:4},{value:"7.9.5.3 Operations",id:"7953-operations",level:4},{value:"7.9.6 Analysis and Transformation",id:"796-analysis-and-transformation",level:3},{value:"7.9.6.1 C++ style pattern-match and rewrite",id:"7961-c-style--pattern-match-and-rewrite",level:4},{value:"7.9.6.2 \u603b\u7ed3",id:"7962-\u603b\u7ed3",level:4},{value:"7.9.7 Generic Transformation with Interfaces",id:"797-generic-transformation-with-interfaces",level:3},{value:"7.9.8 Lowering",id:"798-lowering",level:3},{value:"7.9.8.1 Dialect Conversions",id:"7981-dialect-conversions",level:4},{value:"7.9.9 Lowering to LLVM",id:"799-lowering-to-llvm",level:3},{value:"7.9.10 MLIR Language",id:"7910-mlir-language",level:3},{value:"7.9.10.1 Dialects",id:"79101-dialects",level:4},{value:"7.9.11 Pattern Rewriting",id:"7911-pattern-rewriting",level:3},{value:"7.10 AI",id:"710-ai",level:2},{value:"7.10.1 Apple Shortcuts",id:"7101-apple-shortcuts",level:3},{value:"7.11 Slack",id:"711-slack",level:2},{value:"8.1 Script languages",id:"81-script-languages",level:2},{value:"8.1.1 SkookumScript",id:"811-skookumscript",level:3},{value:"8.1.1.1 Time-flow logic",id:"8111-time-flow-logic",level:4},{value:"7.1.1.2 Conditional flow control",id:"7112-conditional-flow-control",level:4},{value:"8.1.2 Lua",id:"812-lua",level:3},{value:"8.1.3 GameMonkey",id:"813-gamemonkey",level:3},{value:"8.1.4 Python",id:"814-python",level:3},{value:"8.1.5 JavaScript",id:"815-javascript",level:3},{value:"8.1.6 TypeScript",id:"816-typescript",level:3},{value:"8.1.7 SCUMM",id:"817-scumm",level:3},{value:"8.1.8 Mono-script",id:"818-mono-script",level:3},{value:"8.1.9 AngelScript",id:"819-angelscript",level:3},{value:"8.1.10 Scheme/Guile",id:"8110-schemeguile",level:3},{value:"8.1.11 ActionScript",id:"8111-actionscript",level:3},{value:"8.1.12 mruby",id:"8112-mruby",level:3},{value:"8.2 Erlang",id:"82-erlang",level:2},{value:"8.2.1 Beam VM",id:"821-beam-vm",level:3},{value:"8.4.2 Concurrency Oriented Languages",id:"842-concurrency-oriented-languages",level:3},{value:"8.4.2.1 Programming by observing the real world",id:"8421-programming-by-observing-the-real-world",level:4},{value:"8.4.2.2 Characteristics of a COPL",id:"8422-characteristics-of-a-copl",level:4},{value:"8.4.2.3 Process isolation*",id:"8423-process-isolation",level:4},{value:"8.4.2.4 Names of processes",id:"8424-names-of-processes",level:4},{value:"8.4.2.5 Message passing",id:"8425-message-passing",level:4},{value:"8.4.2.6 Protocols*",id:"8426-protocols",level:4},{value:"8.3 Move",id:"83-move",level:2},{value:"8.3.1 \u95ee\u9898",id:"831-\u95ee\u9898",level:3},{value:"8.3.2 Move Design Goals",id:"832-move-design-goals",level:3},{value:"8.3.3 Move Overview",id:"833-move-overview",level:3},{value:"8.3.3.1 Peer-to-Peer Payment Transaction Script",id:"8331-peer-to-peer-payment-transaction-script",level:4},{value:"8.3.3.2 Module",id:"8332-module",level:4},{value:"8.3.4 The Move Language",id:"834-the-move-language",level:3},{value:"8.4 Smalltalk",id:"84-smalltalk",level:2},{value:"8.4.1 Object Model",id:"841-object-model",level:3},{value:"8.4.2.1 Message",id:"8421-message",level:4},{value:"8.4.2.2 Message Sending Syntax",id:"8422-message-sending-syntax",level:4},{value:"8.4.2.3 Discussion of Smalltalk Syntax",id:"8423-discussion-of-smalltalk-syntax",level:4},{value:"8.4.2.4 The Distinction Between Types and Classes",id:"8424-the-distinction-between-types-and-classes",level:4},{value:"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61",id:"842-smalltalk\u9762\u5411\u5bf9\u8c61",level:3},{value:"8.5 Verse",id:"85-verse",level:2},{value:"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f",id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48",level:2},{value:"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f",id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48",level:2},{value:"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",level:2},{value:"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236",id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236",level:2},{value:"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf",id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf",level:2},{value:"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",level:2},{value:"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:3},{value:"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c",id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c",level:2},{value:"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",level:2},{value:"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:2},{value:"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",level:2},{value:"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",level:3},{value:"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",level:3}],p={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,n.kt)(u,(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\u6587\u6863\u8bf4\u660e"},"\u6587\u6863\u8bf4\u660e"),(0,n.kt)("p",null,"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u4f46\u6211\u4ecd\u7136\u628a\u8fd9\u4e9b\u5185\u5bb9\u653e\u5728\u8fd9\u91cc\uff0c\u662f\u56e0\u4e3a\u6211\u89c9\u5f97\u5b83\u5bf9\u4e8e\u60f3\u6df1\u5165\u5b66\u4e60Reality World\u80cc\u540e\u601d\u60f3\u7684\u670b\u53cb\u6709\u5b66\u4e60\u4ef7\u503c"),(0,n.kt)("p",null,"\u672c\u6587\u7684Markdown\u7edf\u8ba1\u5927\u6982\u670920\u4e07\u5b57\u3002"),(0,n.kt)("h1",{id:"1--introduction"},"1. Introduction"),(0,n.kt)("p",null,"\u6e38\u620f\uff0c\u4f5c\u4e3a\u4e00\u79cd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u5b9e\u65f6\u8fd0\u884c\u7684\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u5b83\u4e0d\u5149\u5728\u4ea7\u54c1\u5f62\u6001\u4e0a\u8ddf\u4e00\u822c\u7684\u5e94\u7528\u7a0b\u5e8f\u4f53\u9a8c\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4e00\u822c\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u662f\u529f\u80fd\u578b\u7684\uff0c\u5176\u529f\u80fd\u662f\u660e\u786e\u800c\u5177\u4f53\u7684\uff0c\u800c\u6e38\u620f\u5f80\u5f80\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u6ca1\u6709\u76f4\u89c2\u786e\u5b9a\u6027\u7684\u529f\u80fd\uff0c\u6bcf\u4e2a\u4eba\u83b7\u5f97\u7684\u4f53\u9a8c\u53ef\u80fd\u90fd\u4e0d\u4e00\u6837\uff0c\u5b83\u7684\u6574\u4e2a\u7a0b\u5e8f\u7ec4\u7ec7\u53ca\u5176\u5f00\u53d1\u5de5\u5177\u66f4\u662f\u4e0e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u662f\u6309\u987a\u5e8f\u6267\u884c\uff0c\u800c\u6e38\u620f\u4e3a\u4e86\u5b9e\u73b0\u5bf9\u771f\u5b9e\u5b9e\u65f6\u4e16\u754c\u7684\u6a21\u62df\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u4e0d\u95f4\u65ad\u7684\u5b9e\u65f6\u8f6e\u8be2\u7684\u673a\u5236\u3002\u8fd9\u79cd\u8f6e\u8be2\u4e0d\u5149\u9020\u5c31\u4e86\u6e38\u620f\u4e2d\u5404\u4e2a\u52a8\u6001\u7cfb\u7edf\u7684\u5b9e\u65f6\u6027\uff0c\u5b83\u5bf9\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u4ee5\u53ca\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\uff0c\u90fd\u63d0\u4f9b\u4e86\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u53ef\u80fd\u6027\u548c\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u673a\u5236\u4e3b\u8981\u88ab\u7528\u6765\u5236\u4f5c\u6e38\u620f\uff0c\u800c\u6e38\u620f\u8fd9\u79cd\u7a0b\u5e8f\u673a\u5236\u7684\u4e00\u4e9b\u96be\u70b9\uff0c\u901a\u5e38\u9700\u8981\u975e\u5e38\u4e13\u4e1a\u7684\u6e38\u620f\u516c\u53f8\u624d\u80fd\u505a\u51fa\u4e0d\u9519\u7684\u6e38\u620f\u4ea7\u54c1\u3002\u800c\u53cd\u89c2\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u7531\u4e8e\u5b83\u4eec\u7684\u673a\u5236\u66f4\u7b80\u5355\uff0c\u6613\u4e8e\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\uff0c\u4e0d\u4ec5\u5bf9\u4eba\u4eec\u7684\u751f\u6d3b\u5e26\u6765\u66f4\u5927\u7684\u5f71\u54cd\uff0c\u4e5f\u5927\u5927\u5730\u4fc3\u8fdb\u4e86\u793e\u4f1a\u8fdb\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd1\u5e74\u6765\uff0c\u968f\u7740\u865a\u62df\u73b0\u5b9e\u548c\u5143\u5b87\u5b99\u6982\u5ff5\u548c\u8d8b\u52bf\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7cfb\u7edf\u8d8a\u6765\u8d8a\u9891\u7e41\u88ab\u7528\u4e8e\u5230\u6e38\u620f\u4e4b\u5916\u66f4\u6cdb\u5316\u7684\u9886\u57df\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u624b\u673a\u7684AR\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Snapchat"),"\u7ed9\u7528\u6237\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u6ee4\u955c\u4f53\u9a8c\uff0c\u4e0d\u540c\u4e8e\u4f20\u7edf\u89c6\u9891\u548c\u56fe\u7247\uff0c\u8fd9\u4e9b\u6ee4\u955c\u662f\u4ea4\u4e92\u5f0f\u7684\uff0c\u7528\u6237\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u79cd\u4ea4\u4e92\u80fd\u529b\u751f\u6210\u8fd8\u5bcc\u6709\u8868\u8fbe\u80fd\u529b\u7684\u89c6\u9891\uff0c\u501f\u52a9\u8fd9\u79cd\u80fd\u529b\uff0cSnapchat\u8fc5\u901f\u79f0\u4e3a\u4e00\u6b3e\u6d41\u884c\u7684\u793e\u4ea4\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u6837\u662f\u57fa\u4e8e\u624b\u673aAR\u7684\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Niantic"),"\u501f\u52a9\u624b\u673a\u540e\u7f6e\u6444\u50cf\u5934\u7684\u89c6\u89c9\u5b9a\u4f4d\u80fd\u529b\uff08VPS\uff09\uff0c\u5f00\u53d1\u4e86\u8bf8\u5982Pokemon Go\u7b49\u5e94\u7528\uff0c\u8fd9\u79cd\u65b0\u7684\u57fa\u4e8e\u771f\u5b9e\u5730\u7406\u4f4d\u7f6e\u7684\u5e94\u7528\u8ddf\u4eba\u4eec\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\u7684\u6d3b\u52a8\u8054\u7cfb\u8d77\u6765\uff0c\u5e76\u501f\u52a93D\u4e92\u52a8\u7684\u80fd\u529b\uff0c\u628a\u4eba\u4eec\u7684\u751f\u6d3b\u8054\u7cfb\u5f97\u66f4\u7d27\u5bc6\uff0c\u662f\u4e00\u6b3e\u5178\u578b\u7528\u4e8e\u589e\u5f3a\u793e\u4ea4\u5173\u7cfb\u7684\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5",(0,n.kt)("strong",{parentName:"li"},"Roblox"),"\u4e3a\u9996\u7684\u521b\u4f5c\u7c7b\u5de5\u5177\uff0c\u901a\u8fc7\u7b80\u5316\u7a0b\u5e8f\u5206\u53d1\u548c\u90e8\u7f72\u3001\u63d0\u4f9b\u7edf\u4e00\u7684\u591a\u4eba\u5728\u7ebf\u7b49\u670d\u52a1\uff0c\u964d\u4f4e\u4e86\u6e38\u620f\u5f00\u53d1\u7684\u95e8\u69db\uff0c\u4f7f\u5f97\u66f4\u591a\u7684\u4e2d\u5c0f\u4e2a\u4eba\u521b\u4f5c\u4e92\u52a8\u5185\u5bb9\u66f4\u52a0\u7b80\u5355\u3002\u5e76\u901a\u8fc7\u4e91\u539f\u751f\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u4f7f\u793e\u4ea4\u6e38\u620f\u7684\u6548\u679c\u88ab\u653e\u5927\uff0c\u6210\u4e3a\u672a\u6765\u7684\u91cd\u8981\u8d8b\u52bf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u7c7bMinecraft\u6c99\u76d2\u673a\u5236\u5ef6\u4f38\u7684\u5927\u9003\u6740\u6c99\u76d2\u6e38\u620f",(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b"),"\uff0c\u501f\u52a9\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\uff0c\u4f8b\u5982\u5305\u62ec\u5bf9\u591a\u4eba\u5b9e\u65f6\u6e38\u620f\u66f4\u53cb\u597d\u7684\u5728\u7ebf\u8bed\u97f3\u670d\u52a1\u7b49\uff0c\u4f7f\u5f97\u793e\u4ea4\u5c5e\u6027\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u88ab\u8fdb\u4e00\u6b65\u52a0\u5f3a\u3002\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u4ee5\u53ca\u5821\u5792\u4e4b\u591c\u672c\u8eab\u9003\u751f\u7c7b\u6e38\u620f\u66f4\u597d\u5730\u534f\u540c\u673a\u5236\uff0c\u4f7f\u5f97\u5821\u5792\u4e4b\u591c\u7684\u793e\u4ea4\u5c5e\u6027\u79f0\u4e3a\u4f53\u9a8c\u6700\u597d\u7684\u793e\u4ea4\u5c5e\u6027\uff0c\u5176\u5f00\u521b\u548c\u4e3e\u529e\u7684\u865a\u62df\u6d3e\u5bf9Marshmello\u66f4\u662f\u6380\u8d77\u4e86\u865a\u62df\u6f14\u5531\u4f1a\u7684\u70ed\u6f6e\u3002")),(0,n.kt)("p",null,"\u6240\u6709\u8fd9\u4e9b\u53d8\u5316\u548c\u53d1\u5c55\uff0c\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53ca\u751f\u6001\u90fd\u5e26\u6765\u4e86\u5de8\u5927\u7684\u5f71\u54cd\u548c\u53d8\u5316\uff0c\u8fd9\u4e9b\u5f71\u54cd\u548c\u53d8\u5316\u540e\u9762\uff0c\u9700\u8981\u5168\u65b0\u7684\u6280\u672f\u8303\u5f0f\uff0c\u800c\u8fd9\u4e9b\u65b0\u7684\u6280\u672f\u8303\u5f0f\u53c8\u5c06\u521b\u9020\u589e\u91cf\u7684\u4ef7\u503c\u548c\u4f53\u9a8c\u3002"),(0,n.kt)("h2",{id:"11-\u53d8\u9769"},"1.1 \u53d8\u9769"),(0,n.kt)("h3",{id:"111-\u5f62\u6001\u53d8\u5316"},"1.1.1 \u5f62\u6001\u53d8\u5316"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e9b\u53d8\u5316\uff0c\u4ece\u4e0a\u5f80\u4e0b\u770b\uff0c\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e09\u4e2a\u7ef4\u5ea6\u7684\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005"),"\uff1a\u7531\u4e13\u4e1a\u5f00\u53d1\u8005\u5411\u666e\u901a\u7528\u6237\u8f6c\u79fb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u65b9\u5f0f"),"\uff1a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u65b9\u5f0f\u7531\u5b8c\u5168\u5f00\u53d1\u5230\u57fa\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u73a9\u5bb6\u4f53\u9a8c"),"\uff0c\u7531\u5b8c\u5168\u64cd\u63a7\u5230XR\u8f85\u52a9")),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u5de5\u5177\u65b9\u9762\uff0cRoblox\u548cSnapchat\u7684Lens Studio\u90fd\u9762\u5411\u666e\u901a\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u5171\u540c\u7684\u7279\u70b9\u5305\u62ec\u7b80\u5316\u7684\u811a\u672c\uff0c\u4ee5\u53ca\u4e00\u952e\u53d1\u5e03\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005 \u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u53bb\u5904\u7406\u5e73\u53f0\u76f8\u5173\u95ee\u9898\u3002\u53e6\u4e00\u65b9\u9762\u662f\u8fd9\u7c7b\u5de5\u5177\u90fd\u662f\u6df1\u5165\u96c6\u6210\u5e73\u53f0\u7684\u7279\u5b9a\u529f\u80fd\uff0c\u4f8b\u5982Lens Studio\u5e95\u5c42\u7684AR\u573a\u666f\u7406\u89e3\u7b97\u6cd5\uff0c\u4ee5\u53caRoblox\u5185\u7f6e\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u3002",(0,n.kt)("strong",{parentName:"p"},"\u6df1\u5ea6\u96c6\u6210\u5e73\u53f0\u4e0e\u7b97\u6cd5\uff0c\u76f8\u6bd4\u4e8e\u4f20\u7edf\u901a\u7528\u6e38\u620f\u5f15\u64ce\uff0c\u5c06\u6210\u4e3a\u672a\u6765\u7684\u4e00\u4e2a\u65b9\u5411\u548c\u4f18\u52bf"),"\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"roblox",src:l(3616).Z,width:"1002",height:"288"})),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u65b9\u5f0f\u65b9\u9762\uff0c\u4f20\u7edf\u7684\u6d41\u7a0b\u9700\u8981\u5f00\u53d1\u8005\u5b9a\u4e49\u6240\u6709\u7684\u903b\u8f91\uff0c\u5305\u62ec\u89e6\u53d1\u903b\u8f91\u7684\u673a\u5236\uff0c\u8fd9\u90e8\u5206\u5c24\u5176\u590d\u6742\u3002\u5728Snapchat\u57fa\u4e8eAR\u7684\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u4e2d\uff0c\u8fd9\u7c7b\u4e92\u52a8\u5185\u5bb9\u7684\u9a71\u52a8\u5b8c\u5168\u6765\u6e90\u4e8e\u624b\u673a\u5bf9\u573a\u666f\u7406\u89e3\uff0c\u8fd9\u4e9b\u90fd\u7531AR\u7b97\u6cd5\u6765\u63d0\u4f9b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5904\u7406\u4efb\u4f55\u4ea4\u4e92\u9a71\u52a8\u65b9\u9762\u7684\u903b\u8f91\uff0c\u800c\u53ea\u9700\u8981\u5173\u7cfb\u5bf9\u4ea4\u4e92\u7684\u54cd\u5e94\u903b\u8f91\u3002\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u4ec5\u5927\u5927\u7b80\u5316\u4e86\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\uff0c\u4e5f\u4ece\u6839\u672c\u4e0a\u5bf9\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u7684\u6d41\u7a0b\u5e26\u6765\u4e86\u5f88\u5927\u7684\u53d8\u9769\u3002",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u903b\u8f91\u5f00\u53d1\u7684\u89e6\u53d1\u673a\u5236\uff0c\u89e6\u53d1\u673a\u5236\u6570\u636e\u5316\uff0c\u6df1\u5ea6\u4e0e\u5e73\u53f0\u96c6\u6210\uff0c\u662f\u672a\u6765\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u8d70\u5411\u5e73\u6c11\u5316\u7684\u91cd\u8981\u65b9\u5f0f \u4e4b\u4e00"),"\u3002\u5f53\u7136\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u57fa\u4e8e\u4ee3\u7406\u7684\u7269\u4f53\u4f4d\u7f6e\u6446\u653e\u673a\u5236\u4e5f\u8d77\u5230\u4e86\u5f88\u5927\u7684\u8f85\u52a9\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u540c\u6837\u501f\u52a9\u4e0e\u4e8b\u4ef6\u89e6\u53d1\u673a\u5236\u7684\u6570\u636e\u5316\uff0c\u4ee5\u53ca\u57fa\u4e8eXR\u8bbe\u5907\u5bf9\u573a\u666f\u7684\u7406\u89e3\uff0c\u7528\u6237\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u90e8\u5206\u64cd\u4f5c\uff0c\u7531\u539f\u6765\u4e3b\u52a8\u3001\u7cbe\u7ec6\u5730\u63a7\u5236\u865a\u62df\u6444\u50cf\u673a\u548c\u7269\u4f53\uff0c\u53d8\u4e3a\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7b97\u6cd5\u7684\u81ea\u52a8\u9a71\u52a8\uff0c\u8fd9\u5927\u5927\u7b80\u5316\u4e86\u4ea4\u4e92\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5404\u4e2a\u5c42\u9762\u7684\u53d8\u5316\uff0c\u6700\u7ec8\u90fd\u4f1a\u5bfc\u81f4\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5236\u4f5c\u6d41\u7a0b\u4f1a\u53d1\u751f\u8f83\u5927\u7684\u53d8\u5316\u3002"),(0,n.kt)("h3",{id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"},"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"),(0,n.kt)("p",null,"\u4ece\u5f00\u53d1\u7684\u89d2\u5ea6\uff0c\u4ece\u4e0b\u5f80\u4e0a\u770b\uff0c\u8fd9\u5e26\u6765\u7684\u662f\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"change",src:l(3822).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\u7684\uff0c\u4ece\u786c\u4ef6\u5230\u8f6f\u4ef6\uff0c\u6240\u6709\u4e00\u5207\u6d41\u7a0b\u548c\u529f\u80fd\u90fd\u662f\u9488\u5bf9\u8fd9\u4e2a\u6a21\u578b\u8bbe\u8ba1\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u7801\u90fd\u4f1a\u88ab\u7f16\u8bd1\u548c\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u53ef\u80fd\u76f8\u4e92\u5f15\u7528\uff0c\u6240\u6709\u9700\u8981\u94fe\u63a5\u5668\u6765\u91cd\u65b0\u5b9a\u4f4d\u6bcf\u4e2a\u5f15\u7528\u53d8\u91cf\u7684\u5730\u5740\u3002\u8fd9\u6837\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u975e\u5e38\u9002\u5408\u4e8e\u5904\u7406\u5177\u6709\u72ec\u7acb\u529f\u80fd\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u4f46\u5b83\u6709\u6bd4\u8f83\u81f4\u547d\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u56e0\u4e3a\u6240\u6709\u6e90\u4ee3\u7801\u7f16\u8bd1\u7684\u76ee\u6807\u4ee3\u7801\u90fd\u4f1a\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u6240\u4ee5\u5b83\u4eec\u4ece\u6839\u672c\u4e0a\u5c31\u4e0d\u652f\u6301\u5927\u89c4\u6a21\u5e94\u7528\u7a0b\u5e8f\uff0c\u56e0\u4e3a\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u53ef\u80fd\u7531\u6d77\u91cf\u7684\u6e90\u4ee3\u7801\u7ec4\u6210\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\uff0c\u56e0\u6b64\u5b83\u4eec\u5f88\u96be\u652f\u6301\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u72ec\u7acb\u5b50\u7a0b\u5e8f\u901a\u4fe1\uff0c\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u603b\u662f\u9700\u8981\u5f15\u7528\u6e90\u4ee3\u7801\u624d\u53ef\u4ee5\u901a\u4fe1\uff0c\u8fd9\u4f7f\u5f97\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u65e0\u6cd5\u6210\u4e3a\u4e00\u4e2a\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\u5f00\u653e\u7cfb\u7edf\uff0c\u800c\u603b\u662f\u9700\u8981\u4e00\u4e2a\u5f00\u53d1\u5546\u6765\u8fdb\u884c\u7ef4\u62a4")),(0,n.kt)("p",null,"\u968f\u7740UGC\u548c\u5143\u5b87\u5b99\u65f6\u4ee3\u7684\u5230\u6765\uff0c\u8fd9\u79cd\u5927\u89c4\u6a21\u7684\u3001\u5177\u6709\u5185\u751f\u5f00\u653e\u5b50\u7cfb\u7edf\u7684\u591a\u5e94\u7528\u4ea4\u4e92\u67b6\u6784\u8d8a\u6765\u8d8a\u6210\u4e3a\u6700\u6838\u5fc3\u7684\u9700\u6c42\uff0c\u8fd9\u9700\u8981\u6211\u4eec\u5728\u8ba1\u7b97\u67b6\u6784\u4e0a\u505a\u51fa\u8f83\u5927\u7684\u53d8\u9769\u3002"),(0,n.kt)("h4",{id:"1121-\u4e1a\u52a1\u6bd4\u55bb"},"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u817e\u8baf\u6709\u975e\u5e38\u6d77\u91cf\u7684\u4e1a\u52a1\uff0c\u6bd4\u5982\u5fae\u4fe1\uff0c\u97f3\u4e50\uff0c\u89c6\u9891\u7b49\uff0c\u76ee\u524d\u8fd9\u4e9b\u4e1a\u52a1\u4e4b\u95f4\u76f8\u4e92\u662f\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u4ed6\u4eec\u7ec4\u7ec7\u4e3a\u76f8\u4e92\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u76f8\u4e92\u6bd4\u8f83\u72ec\u7acb\u7684\u6570\u636e\u7ba1\u7406\uff0c\u670d\u52a1\u5668\u67b6\u6784\u548c\u7ec4\u7ec7\uff0c\u867d\u7136\u5f7c\u6b64\u4e4b\u95f4\u5b58\u5728\u4e00\u5b9a\u5173\u8054\uff0c\u4f46\u662f\u8fd9\u79cd\u5173\u8054\u662f\u9ad8\u5ea6\u7ed3\u6784\u5316\u548c\u89c4\u5219\u5316\u7684\uff0c\u4e14\u5173\u8054\u5f88\u5c11\u3002"),(0,n.kt)("p",null,"\u5f00\u653e\u4e16\u754c\u5219\u610f\u5473\u7740\uff0c\u73b0\u5728\u6240\u6709\u8fd9\u4e9b\u4e1a\u52a1\u9700\u8981\u5728\u4e00\u4e2a\u5e94\u7528\u5185\u7ec4\u7ec7\uff0c\u5b83\u7684\u590d\u6742\u5ea6\u662f\u975e\u5e38\u9ad8\u7684\uff0c\u67b6\u6784\u4e5f\u975e\u5e38\u590d\u6742\uff0c\u6570\u636e\u7ba1\u7406\u548c\u5206\u5e03\u5f0f\u8ba1\u7b97\u90fd\u975e\u5e38\u590d\u6742\uff0c\u5e76\u4e14\u7531\u4e8e\u4f20\u7edf\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u5728\u8fd9\u79cd\u4f53\u91cf\u4e0b\u6839\u672c\u65e0\u6cd5\u6709\u6548\u7ba1\u7406\u7ec4\u7ec7\u548c\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97"),(0,n.kt)("p",null,"\u53ef\u884c\u7684\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5fae\u670d\u52a1\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u5f0f\u7f16\u7a0b")),(0,n.kt)("p",null,"\u5fae\u670d\u52a1\u5316\u662f\u4e00\u79cd\u8f6f\u4ef6\u67b6\u6784\uff0c\u9700\u8981\u9ad8\u5ea6\u4f9d\u8d56\u4e8e\u5bf9\u903b\u8f91\u7684\u8bbe\u8ba1\u548c\u5212\u5206\uff0c\u4ed6\u4e0d\u662f\u4e00\u79cd\u57fa\u7840\u7f16\u7a0b\u6a21\u578b\uff0c\u56e0\u6b64\u65e0\u6cd5\u652f\u6491\u5f00\u653e\u5f0f\u7684\u8bbe\u8ba1\uff0c\u8fd9\u4e9b\u5fae\u670d\u52a1\u901a\u5e38\u90fd\u53ea\u80fd\u662f\u5f00\u53d1\u5546\u8bbe\u8ba1\u597d\u7684\uff0c\u666e\u901a\u7528\u6237\u6ca1\u6cd5\u4fee\u6539\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\u4e0d\u652f\u6301\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("h3",{id:"113-\u6280\u672f\u6311\u6218"},"1.1.3 \u6280\u672f\u6311\u6218"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\uff0c\u4e0a\u8ff0\u7684\u4e00\u4e9b\u53d8\u9769\u5e26\u6765\u7684\u6280\u672f\u6311\u6218\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5168\u65b0\u652f\u6301\u591a\u5e94\u7528\u76f8\u4e92\u901a\u4fe1\u7684\u8ba1\u7b97\u67b6\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u80fd\u591f\u5728\u6240\u6709\u8ba1\u7b97\u8f7b\u677e\u5728\u591a\u4e2a\u670d\u52a1\u5668\u4e4b\u95f4\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97\u7684\u6570\u636e\u548c\u8ba1\u7b97\u67b6\u6784")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u8fd9\u4e24\u4e2a\u5e95\u5c42\u6839\u672c\u6027\u7684\u6311\u6218\uff0c\u4e0a\u5c42\u8fd8\u5305\u62ec\u4e00\u4e9b\u5176\u4ed6\u6311\u6218\uff0c\u6bd4\u5982\u72ec\u7acb\u7a0b\u5e8f\u4e4b\u95f4\u9ad8\u6548\u7684\u901a\u4fe1\u6807\u51c6\u6216\u8005\u673a\u5236\uff0c\u7528\u6237\u5bf9\u6743\u9650\u63a7\u5236\u4e0e\u4ee3\u7801\u7684\u5206\u79bb\uff0c\u666e\u901a\u7528\u6237\u600e\u6837\u65e0\u4ee3\u7801\u7f16\u7a0b\u7b49\u7b49\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u8fdb\u4e00\u6b65\u5206\u6790\u3002"),(0,n.kt)("h2",{id:"12-\u73b0\u72b6"},"1.2 \u73b0\u72b6"),(0,n.kt)("p",null,"\u4e0d\u80fd\u968f\u65f6\u968f\u5730\u9ad8\u6548\u7684\u5185\u5bb9\u521b\u5efa\uff0c\u4e0e\u968f\u65f6\u968f\u5730\u65b9\u4fbf\u7684\u5c06\u521b\u5efa\u7684\u5185\u5bb9\u8fdb\u884c\u793e\u4ea4\u5206\u4eab\uff0c\u662f\u5f53\u524d\u6700\u5927\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u662f3D\u6570\u5b57\u4e16\u754c\u53d1\u5c55\u7684\u4e00\u4e9b\u91cd\u8981\u57fa\u7840\uff1b\u524d\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u7f16\u7a0b\uff08\u901a\u5e38\u9700\u8981\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u80fd\u529b\uff09\uff0c\u6240\u6709\u903b\u8f91\u90fd\u662f\u901a\u8fc7\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u5f0f\u521b\u5efa\u51fa\u6765\u7684\uff08\u5927\u90e8\u5206\u4eba\u90fd\u4e0d\u5177\u5907\uff09\uff1b\u800c\u540e\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u4e00\u5957\u65b0\u7684\u652f\u6301\u5206\u5e03\u5f0f\u534f\u540c\u7f16\u8f91\u548c\u5206\u53d1\u7684\u5e95\u5c42\u6570\u636e\u683c\u5f0f\u8868\u8ff0\uff0c\u8fd9\u4e0e\u5f53\u524d\u5927\u90e8\u5206\u5f15\u64ce\u79c1\u6709\u683c\u5f0f\u90fd\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,"1\u3001\u4e3b\u8981\u57fa\u4e8e\u573a\u666f\u7406\u89e3"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206AR\u5e94\u7528\u90fd\u662f\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7684\u7b80\u5355\u7279\u6548/\u6ee4\u955c\u5448\u73b0\uff0c\u4ee5\u53ca\u56f4\u7ed5\u8fd9\u4e9b\u6ee4\u955c\u975e\u5e38\u7b80\u5355\u7684\u4ea4\u4e92\uff0c\u6ca1\u6709\u56f4\u7ed5\u573a\u666f\u6784\u5efa\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u5373\u5821\u5792\u4e4b\u591c\u7684\u65b9\u5f0f\uff0c\u5305\u62ec\u66f4\u590d\u6742\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"2\u30013D\u5185\u5bb9\u5206\u53d1"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206\u4e0d\u80fd\u5206\u53d13D\u5185\u5bb9\u672c\u8eab\uff0c\u800c\u662f\u5206\u4eab\u5f55\u5236\u7684\u89c6\u9891\uff1b\u6216\u8005\u53ea\u662f\u5206\u4eab\u76f8\u540c\u7684\u6ee4\u955c\u7ed9\u670b\u53cb\uff0c\u4f7f\u7528\u4f53\u9a8c\u6ca1\u6709\u5dee\u5f02\u6027"),(0,n.kt)("p",null,"3\u3001\u7528\u6237\u521b\u5efa\u53c2\u4e0e\u611f\u5f88\u5f31"),(0,n.kt)("p",null,"\u7edd\u5927\u90e8\u5206\u90fd\u662f\u573a\u666f\u7406\u89e3\u9a71\u52a8\uff0c\u4ec5\u6709\u7eaf\u89c6\u89c9\u7684\u4f53\u9a8c\uff0c\u6ca1\u67093D\u771f\u6b63\u590d\u6742\u7684\u4ea4\u4e92\u548c\u521b\u5efa\u4f53\u9a8c"),(0,n.kt)("p",null,"4\u3001\u5927\u90e8\u5206\u805a\u7126\u865a\u62df\u7a7a\u95f4"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u5373\u793e\u4ea4\u65b9\u5411\u884c\u4e1a\u5927\u90e8\u5206\u5728\u505a\u865a\u62df\u7a7a\u95f4\uff1a\u5143\u8c61\u3001RecRoom\u3001monoAI\u7b49"),(0,n.kt)("p",null,"5\u30013D\u521b\u5efa\u7684\u4ef7\u503c/Minecraft "),(0,n.kt)("p",null,"\u9664\u4e86\u7cbe\u5fc3\u7684\u6e38\u620f\u89c4\u5219\u8bbe\u8ba1\uff08\u8fd9\u9700\u8981\u5f88\u9ad8\u7684\u5f00\u53d1\u6280\u5de7\u548c\u80fd\u529b\uff09\uff0c3D\u5185\u5bb9\u7684\u521b\u5efa\u672c\u8eab\u4e5f\u662f\u5f88\u6709\u4e50\u8da3\u7684\uff0c\u800c\u80fd\u591f\u521b\u5efa\u81ea\u5df1\u8bbe\u8ba1\u7684\u4e00\u5b9a\u89c4\u5219\u7684\u5185\u5bb9\u5c31\u66f4\u6709\u8da3"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u6ca1\u6709\u96c6\u4e2d\u4e8e\u9762\u5411\u666e\u901a\u7528\u6237\u521b\u5efa3D\u5185\u5bb9\u7684\u80fd\u529b\u6216\u4f53\u9a8c\uff0cRoblox \u9762\u5411\u6709\u4e00\u5b9a\u7ecf\u9a8c\u7684\u5f00\u53d1\u8005\uff0c\u5e76\u4e14\u5f00\u53d1\u6a21\u5f0f\u672c\u8d28\u4e0a\u4e0e\u4f20\u7edf\u6e38\u620f\u5f00\u53d1\u7c7b\u4f3c\uff0c\u53ea\u662f\u5206\u53d1\u673a\u5236\u4e0d\u4e00\u6837\uff0cNV\u548c\u592a\u6781\u9762\u5411\u7528\u6237\u521b\u4f5c\uff0c\u4f46\u662f\u6ca1\u6709\u9762\u5411\u79fb\u52a8\u7aef\uff0c\u800c\u4e14\u662f\u7eaf\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"6\u3001\u5e95\u5c42\u521b\u65b0"),(0,n.kt)("p",null,"\u5f53\u524d\u666e\u904d\u805a\u7126\u4e0a\u5c42\u67b6\u6784\uff0c\u56f4\u7ed5\u600e\u6837\u5c06\u4f20\u7edf\u6e38\u620f\u7684\u6d41\u7a0b\u548c\u4f53\u9a8c\u5f80\u5143\u5b87\u5b99\u4e0a\u9760\uff0c\u5176\u7ed3\u679c\u5927\u591a\u6570\u865a\u62df\u7a7a\u95f4\u7c7b\u4ea7\u54c1\uff0c\u805a\u7126\u5e95\u5c42\u534f\u4f5c\u7684\u4e3b\u8981\u662fOmniverse\u548c\u592a\u6781\uff0c\u5176\u4e2d\u6df1\u5165\u5e95\u5c42\u6027\u80fd\u7684\u53ea\u6709\u592a\u6781\uff0c\u4f46\u5728\u4e2d\u95f4\u5c42\u4e0a\u4e0b\u534f\u540c\u65b9\u9762\u7f3a\u4e4f\u91cd\u70b9\u521b\u65b0\uff0c\u5176\u4e2d\u592a\u6781\u548c\u5143\u8c61\u90fd\u5728\u4e3b\u6253\u4e91\u6e32\u67d3\uff0c\u592a\u6781\u8fd8\u5f3a\u8c03\u5728\u7ebf\u534f\u540c\u7f16\u8f91\uff0cOmniverse\u5219\u652f\u6301\u4e00\u822c\u7684\u534f\u540c\u7f16\u8f91"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u7a7a\u95f4\u4e5f\u4e3b\u8981\u662f\u7eaf\u89c6\u89c9\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u53ea\u662f\u5728\u91cc\u9762\u884c\u8d70\uff0c\u4e0d\u80fd\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u66f4\u4e0d\u80fd\u521b\u4f5c\uff0c\u6216\u8005\u6709\u7684\u4e5f\u662f\u56fa\u5b9a\u89c4\u5219\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982Roblox \u91cc\u9762\u7684\u4e00\u4e9b\u6a21\u62df\u7ecf\u9a8c\u7684\u6e38\u620f"),(0,n.kt)("p",null,"8\u3001\u6e38\u620f\u66f4\u65b0\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u4e00\u822c\u9700\u8981\u91cd\u65b0\u53d1\u5e03\u7684\u6d41\u7a0b\uff0cUbisoft Scalar\u8bd5\u56fe\u901a\u8fc7\u4e91\u7aef\u5fae\u670d\u52a1\u67b6\u6784\u5b9e\u73b0\u53ca\u65f6\u66f4\u65b0\uff0c\u53e6\u5916\u4e91\u539f\u751f\u57fa\u672c\u4e0a\u5929\u751f\u5c31\u662f\u53ca\u65f6\u66f4\u65b0\u7684\uff0c\u56e0\u4e3a\u5b83\u7684\u8d44\u6e90\u90fd\u5728\u4e91\u7aef"),(0,n.kt)("h2",{id:"13-\u6280\u672f\u4f18\u52bf"},"1.3 \u6280\u672f\u4f18\u52bf"),(0,n.kt)("h3",{id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"},"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"\u73b0\u5728\u5927\u90e8\u5206\u5e94\u7528\u90fd\u662f\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7279\u5b9a\u573a\u666f\uff0c\u63d0\u4f9b\u5b98\u65b9\u7279\u5b9a\u7684\u5e94\u7528\u3001\u89c4\u5219\u6216\u73a9\u6cd5\uff0c\u8ddf\u6e38\u620f\u7684\u601d\u8def\u7c7b\u4f3c\uff0c\u66f4\u5f3a\u8c03\u7528\u6237\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u9664\u4e86\u6e38\u620f\u5f15\u64ce\uff0c\u80fd\u8ba9\u7528\u6237\u521b\u4f5c\u7684\u53ea\u6709Roblox \u53ea\u7c7b\u578b\u7684"),(0,n.kt)("p",null,"\u80fd\u591f\u9762\u5411\u666e\u901a\u7528\u6237\uff0c\u4e14\u9488\u5bf9\u4ea4\u4e92\u5185\u5bb9\u8fdb\u884c\u521b\u4f5c\u7684\uff0c\u53ea\u6709\u4e00\u5bb6\uff0c\u5b83\u662f\u672a\u6765\u6700\u57fa\u7840\u7684\u6a21\u5f0f\u548c\u80fd\u529b\uff0c\u5f53\u524d\u6ca1\u6709\u4e00\u5bb6\u5728\u8fd9\u4e2a\u5c42\u9762\uff0c\u72ec\u6b64\u4e00\u5bb6"),(0,n.kt)("p",null,"\u7528\u6237\u53ef\u4ee5\u57fa\u4e8eRealityWorld \u521b\u4f5c\u6e38\u620f\uff0c\u6216\u8005\u7b80\u5355\u7684\u4f5c\u54c1\uff0c\u8ddfRoblox \u4e00\u6837\uff0c\u4f46\u662f\u5b83\u901a\u8fc7\u4e24\u4e2a\u95e8\u69db\u4ee5\u53ca\u4e30\u5bcc\u521b\u4f5c\u7684\u7c7b\u522b\uff0c\u8ba9\u66f4\u591a\u666e\u901a\u7528\u6237\u53ef\u4ee5\u53c2\u4e0e\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u7528\u6237\u7fa4\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u5728\u8fd9\u4e2a\u5e73\u53f0\u4e0a\u5f00\u53d1\u6e38\u620f\u6709\u53ef\u80fd\u5177\u6709\u66f4\u5927\u7684\u7528\u6237\u7fa4"),(0,n.kt)("h3",{id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236"},"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"CreationXR runtime\uff0c"),"\u53ef\u4ee5\u88ab\u4efb\u610f\u7b2c\u4e09\u65b9app\u96c6\u6210"),(0,n.kt)("p",null,"\u4ed6\u98a0\u8986\u4e86\u4f20\u7edf\u5f00\u53d1\u8005\u751f\u6001\u7684\u65b9\u5f0f\uff0c\u4f20\u7edf\u7684\u5c0f\u7a0b\u5e8f\u6216\u8005Roblox \u6216\u8005Snapchat \u53ea\u80fd\u96c6\u4e2d\u5f0f\uff0c\u53ea\u6709\u5e73\u53f0\u4e00\u4e2a\u5165\u53e3\uff0c\u800c\u50cfNiantic \u8fd9\u79cd\u4ec5\u5f00\u653e\u5e95\u5c42\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u63a5\u5165\u5b9e\u9645\u5f88\u56f0\u96be\uff0c\u56e0\u4e3a\u8981\u8c03\u7528\u4f17\u591a\u7684API"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u5b58\u5728\u5197\u4f59\uff0c\u91cd\u590d\uff0c\u8fd9\u90e8\u5206\u53ef\u4ee5\u5171\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64\u6bcf\u4e2aapp\u5f00\u53d1\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u7c7b\u4f3c\uff0c\u4f46\u662f3D\u90e8\u4efd\u5374\u8981\u91cd\u590d\u5f00\u53d1\uff0c\u4f8b\u5982\u8981\u63a5\u5165\u9884\u89c8\u6d41\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5728\u81ea\u5df1\u7684app\u91cc\u9762\u5171\u4eab\u4e00\u5957\u5f00\u53d1\u6807\u51c6\uff0cUnity\u4e0d\u7b97\u6807\u51c6\uff0c\u56e0\u4e3a\u4ed6\u66f4\u504f\u4f4e\u5c42\uff0c\u6ca1\u6709\u5b9a\u4e49\u592a\u591a\u89c4\u8303\uff0c\u5bfc\u81f4\u6bcf\u4e2a\u4eba\u5f00\u53d1\u4e0d\u4e00\u6837\uff0c\u800cRealityCreate \u662f\u9ad8\u5ea6\u89c4\u8303\u5316\u7684")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u53ef\u4ee5\u5171\u4eabRealityCreate \u9ad8\u5ea6\u89c4\u8303\u5316\u7684\u6d41\u7a0b\uff0c\u53c8\u53ef\u4ee5\u6700\u7b80\u5355\u7684\u6210\u672c\u548c\u65b9\u5f0f\u63a5\u5165\u81ea\u5df1app\uff0c\u4ece\u800c\u662f\u5f00\u53d1\u8005\u805a\u7126\u521b\u4f5c\u672c\u8eab\uff0c\u540c\u65f6\u80fd\u4eab\u53d7\u4e91\u539f\u751f\uff0c\u7528\u6237\u534f\u4f5c\u7b49\u7b49\u6240\u6709Creation XR\u5f97\u597d\u5904"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e5f\u53ef\u4ee5\u907f\u514din-house \u5f15\u64ce\u7684\u95ee\u9898\uff0cin-house \u5f15\u64ce\u4e3b\u8981\u7684\u95ee\u9898\u662f\u4e0d\u80fd\u88ab\u5176\u4ed6app\u7b80\u5355\u4f7f\u7528\uff0c\u6709\u56fa\u5b9a\u7684\u6d41\u7a0b\uff0c\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u6309\u7167in-house \u7684\u505a\u6cd5\u5feb\u901f\u63d0\u5347\u81ea\u5df1\u7684\u5dee\u5f02\u6027\uff0c\u800c\u907f\u514d\u9677\u5165Unreal\u548cUnity \u90a3\u6837\u7684\u901a\u7528\u5f15\u64ce"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u80fd\u50cfUnity\u4e00\u6837\u88ab\u7528\u4e8e\u5f00\u53d1\u72ec\u7acb\u5e94\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u6293\u4f4f\u4e86\u751f\u6001")),(0,n.kt)("p",null,"\u8fd9\u79cd\u6a21\u5f0f\u8fd8\u6709\u4e00\u4e2a\u597d\u5904\uff0c\u9664\u4e86\u5e94\u7528\u90e8\u7f72\u672c\u8eab\uff0c\u4ed6\u8fd8\u63d0\u4f9b\u5982\u5e94\u7528\u7684\u7edf\u8ba1\u5206\u6790\u7b49\u529f\u80fd\uff0c\u5e94\u7528\u7684\u5b58\u50a8\uff0c\u8fd9\u4e9b\u539f\u672c\u90fd\u662f\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u5bf9\u63a5\u7684\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u770b\u6709\u591a\u4e48\u590d\u6742\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u81ea\u5df1\u81ea\u5df1Unity\u5f00\u53d1app\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u62ec\u5927\u91cf\u7684\u7f8e\u672f\u8d44\u6e90\u548c\u903b\u8f91\u5f00\u53d1\u662f\u6bcf\u4e2a\u6e38\u620f\u5f00\u53d1\u8005\u6bd4\u8f83\u91cd\u590d\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u6253\u5305\u90e8\u7f72\uff0c\u8fd9\u8981\u6c42\u4e00\u4e9b\u5e73\u53f0\u5c42\u7684\u6280\u5de7\u548c\u7ecf\u9a8c\uff0c\u8fd9\u4e9b\u5176\u5b9e\u8d85\u51fa\u4e86\u5f00\u53d1\u8005\u5bf9\u5185\u5bb9\u7684\u805a\u7126\uff0c\u9664\u4e86\u5185\u5bb9\u548c\u73a9\u6cd5\uff0c\u4e00\u4e2a\u6e38\u620f\u521b\u4e1a\u516c\u53f8\u8fd8\u9700\u8981\u82b1\u5f88\u591a\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd8\u9700\u8981\u5bf9\u63a5\u5404\u79cdSDK\uff0c\u5305\u62ec\u7aef\u4fa7\u7684\u548c\u4e91\u4fa7\u7684\uff0c\u800c\u5404\u79cdSDK\u90fd\u8981\u516c\u53f8\u81ea\u5df1\u5b66\u4e60\uff0c\u5e76\u4e14\u4e0d\u540c\u516c\u53f8\u4e4b\u95f4\u8fd9\u4e9b\u5de5\u4f5c\u4e5f\u662f\u91cd\u590d\u7684\uff0c\u4f46\u662f\u6bcf\u4e2a\u516c\u53f8\u90fd\u7684\u62db\u4eba\u53bb\u6316\u5751\uff0c\u6709\u65f6\u5019\u8fd9\u4e9b\u53cd\u800c\u6210\u4e3a\u4e00\u4e9b\u5c0f\u56e2\u961f\u6bd4\u8f83\u963b\u788d\u53d1\u5e03\u7684\u4e00\u4e9b\u969c\u788d"),(0,n.kt)("li",{parentName:"ul"},"\u540e\u671f\u7684\u8fd0\u7ef4\u4e5f\u9700\u8981\u4e00\u4e9b\u7cbe\u529b\u548c\u4eba\u529b\u4e5f\u81ea\u5df1\u5f00\u53d1\u7ecf\u9a8c\u7684\u6295\u5165")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u6e38\u620f\u5f00\u53d1\u56e2\u961f\u82b1\u4e86\u8f83\u591a\u7684\u7cbe\u529b\u5728\u4e00\u4e9b\u7e41\u7410\u7684\u4e8b\u60c5\u4e0a\uff0c\u800c\u4e14\u516c\u53f8\u4e4b\u95f4\u7684\u8fd9\u4e9b\u80fd\u529b\u672c\u53ef\u4ee5\u5171\u4eab\u7684\uff0c\u5f00\u53d1\u8005\u672c\u5e94\u8be5\u805a\u7126\u5185\u5bb9\u5f00\u53d1"),(0,n.kt)("p",null,"\u539f\u56e0\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u8981\u81ea\u5df1\u53d1\u5e03app\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u53bb\u7edf\u4e00\u96c6\u6210\u4e00\u4e9b\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u672c\u8eab\u6ca1\u6709\u6807\u51c6\uff0c\u5f88\u96be\u7edf\u4e00"),(0,n.kt)("p",null,"\u5f53\u7136\u5927\u7684\u5e94\u7528\u672c\u8eab\u9700\u8981\u66f4\u7075\u6d3b\u7684\u80fd\u529b\uff0c\u6709\u592a\u591a\u9650\u5236\u53cd\u800c\u4e0d\u5229\u4e8e\u5f00\u53d1\uff0c\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u5c0f\u5185\u5bb9\uff0c\u5c24\u5176\u662f\u4e2a\u4eba\u5185\u5bb9\uff0c\u8fd9\u662f\u53ef\u884c\u7684\uff0c\u800c\u4e14\u4e2a\u4eba\u5f00\u53d1\u8005\u9700\u8981\u8fd9\u6837\u7684\u751f\u6001"),(0,n.kt)("p",null,"Roblox \u5c31\u662f\u505a\u4e86\u8fd9\u4e9b\u4e8b\u60c5\uff0c\u5e94\u7528\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u62c5\u5fc3\u5176\u4ed6\u4e8b\u60c5\uff0c\u4f46\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301Roblox\u4e4b\u5916\u7684\u5206\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301\u94fe\u63a5\u7684\u65b9\u5f0f\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u8981\u9762\u5411PC\u548c\u624b\u673a\uff0c\u6ca1\u6709\u9488\u5bf9XR\u7684\u7b97\u6cd5\u5c42\u63a5\u53e3\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837\u6240\u4ee5\u4e0d\u53ef\u80fd\u652f\u6301XR\u8bbe\u5907\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u5178\u578b\u7684\u4e13\u4e1a\u5f00\u53d1+\u666e\u901a\u7528\u6237\u73a9\u7684\u6a21\u5f0f\uff0c\u6ca1\u6709\u666e\u901a\u7528\u6237\u7684\u521b\u5efa\u6a21\u5f0f\u548c\u521b\u9020\u4f53\u9a8c")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee5\u6b64\u4e3a\u57fa\u7840\uff0c\u6784\u5efa\u5fae\u670d\u52a1\u67b6\u6784")),(0,n.kt)("p",null,"\u7f8e\u672f\u8d44\u6e90\u7684\u91cd\u590d\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f20\u7edf\u4e92\u52a8\u5185\u5bb9\u6700\u91cd\u8981\u7684\u662f\u73a9\u6cd5\u3001\u6545\u4e8b\uff0c\u7f8e\u672f\u76f8\u5bf9\u4e0d\u662f\u6700\u6838\u5fc3\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u8d44\u6e90\u80fd\u591f\u63d0\u4f9b\u72ec\u7279\u7684\u89c6\u89c9\u8bed\u8a00\uff0c\u4f46\u662f\u8fd9\u4e9b\u89c6\u89c9\u8bed\u8a00\u66f4\u591a\u662f\u98ce\u683c\u5316\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\u5728\u540c\u4e00\u79cd\u5199\u5b9e\u98ce\u683c\u7c7b\u578b\u4e0b\uff0c\u73a9\u5bb6\u5bf9\u4e0d\u540c\u7684\u573a\u666f\u611f\u77e5\u7684\u5dee\u5f02\u5c31\u4f1a\u5c0f\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u573a\u666f\u901a\u8fc7\u7a0b\u5e8f\u5316\u751f\u6210\u65b9\u6cd5\u662f\u80fd\u63d0\u4f9b\u8f83\u597d\u7684\u5dee\u5f02\u6027\u548c\u72ec\u7279\u6027\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u79cd\u7a0b\u5e8f\u5316\u65b9\u6cd5\u66f4\u52a0\u652f\u6301\u98ce\u683c\u5316\uff0c\u90a3\u4e48\u5c31\u80fd\u6ee1\u8db3\u4e0a\u8ff0\u7684\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u98ce\u683c\u5316\u4e3b\u8981\u8868\u73b0\u4e3a\u7eb9\u7406\u6216\u8005\u57fa\u7840\u6750\u8d28\uff0c\u6709\u65f6\u7f51\u683c\u4e5f\u6709\u4e00\u5b9a\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u90fd\u53ef\u4ee5\u8fdb\u884c\u7814\u7a76")),(0,n.kt)("h3",{id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017"},"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017"),(0,n.kt)("p",null,"\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u57fa\u4e8eOOP\u8fdb\u884c\u5f00\u53d1\uff0c\u5176\u4e2d\u7684\u5f15\u7528\u5173\u7cfb\u9519\u7efc\u590d\u6742\uff0c\u5bf9\u73b0\u4ee3\u5185\u5b58\u786c\u4ef6\u67b6\u6784\u6781\u5ea6\u4e0d\u53cb\u597d\uff0c\u9700\u8981\u91cd\u65b0\u5bf9\u6e38\u620f\u7684\u8fd0\u884c\u65f6\u5185\u5b58\u6570\u636e\u8fdb\u884c\u66f4\u597d\u7684\u7ba1\u7406\uff0c\u5e76\u4e14\u8fd9\u4e9b\u7ba1\u7406\u53c8\u4e0d\u80fd\u7ed9\u5f00\u53d1\u8005\u5e26\u6765\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.1\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f"},"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u76f8\u4f3c\u7684\u539f\u56e0\uff0c\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u65e0\u6cd5\u4f7f\u7528\u5927\u89c4\u6a21\u5e76\u53d1\u7684\u9700\u6c42\uff0c\u4f8b\u5982\u5355\u53f0\u670d\u52a1\u5668\u6700\u591a\u53ea\u80fd\u652f\u6301\u4e0a\u767e\u4eba\u540c\u65f6\u5728\u7ebf\u3002\u8fd9\u4e3b\u8981\u662f\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u7a0b\u5e8f\u548c\u6570\u636e\u8026\u5408\u5ea6\u975e\u5e38\u9ad8\uff0c\u5bfc\u81f4\u5355\u53f0\u670d\u52a1\u5668\u5fc5\u987b\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u7ba1\u5355\u53f0\u670d\u52a1\u5668\u7684\u5185\u5b58\u4e0d\u591f\uff0c\u4e5f\u4f1a\u5e26\u6765\u591a\u53f0\u670d\u52a1\u5668\u91cd\u590d\u52a0\u8f7d\uff0c\u4ee5\u53ca\u91cd\u590d\u52a0\u8f7d\u5bfc\u81f4\u7684\u6570\u636e\u540c\u6b65\u5bfc\u81f4\u7684\u590d\u6742\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.2.13\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"},"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u4f20\u7edf\u7684\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u6240\u6709\u7684\u903b\u8f91\u90fd\u662f\u5305\u542b\u5728\u7a0b\u5e8f\u4e2d\u4e0d\u53ef\u4fee\u6539\uff0c\u6240\u6709\u7684\u5173\u5361\u3001\u5267\u60c5\u7b49\u7b49\u90fd\u662f\u56fa\u5b9a\u7684\uff0c\u8ddf\u7535\u5f71\u6bd4\u8f83\u7c7b\u4f3c\uff0c\u552f\u4e00\u4e0d\u540c\u7684\u53ef\u80fd\u662f\u6e38\u620f\u5177\u6709\u4ea4\u4e92\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u66f4\u65b0\u7a0b\u5e8f\u65f6\uff0c\u901a\u5e38\u901a\u8fc7DLC\u6216Mod\u7b49\u673a\u5236\u5bf9\u6e38\u620f\u8fdb\u884c\u6269\u5c55\u6216\u589e\u5f3a\uff0c\u4f46\u662f\u8fd9\u4e24\u79cd\u673a\u5236\u901a\u5e38\u90fd\u6bd4\u8f83\u53d7\u9650\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\uff0c\u81f3\u5c11\u4e00\u4e2a\u5df2\u7ecf\u53d1\u5e03\u7684\u6e38\u620f\u5176\u6838\u5fc3\u4f53\u9a8c\u662f\u5f88\u96be\u6539\u53d8\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u5f00\u653e\u7684Metaverse\u4e0d\u4ec5\u9700\u8981\u53ef\u4ee5\u4efb\u610f\u6dfb\u52a0\u72ec\u7acb\u7a0b\u5e8f\u7684\u80fd\u529b\uff0c\u8fd8\u9700\u8981\u80fd\u591f\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u81ea\u52a8\u7b5b\u9009\u4f18\u79c0\u5185\u5bb9\u7684\u80fd\u529b\uff0c\u5426\u5219\u7528\u6237\u53ef\u80fd\u5f88\u5feb\u5c31\u6c89\u5165\u5f88\u591a\u5783\u573e\u6216\u8005\u8d28\u91cf\u8f83\u4f4e\u7684\u4fe1\u606f\u5f53\u4e2d\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u8fd9\u79cd\u5185\u5bb9\u90fd\u662f\u9700\u8981\u5e73\u53f0\u4f7f\u7528\u4e00\u5b9a\u7684\u7b97\u6cd5\u8fdb\u884c\u63a8\u8350\uff0c\u8fd9\u79cd\u63a8\u8350\u7b97\u6cd5\u4e00\u822c\u7531\u7528\u6237\u5bf9\u81ea\u5df1\u7684\u5185\u5bb9\u8bbe\u7f6e\u4e00\u4e9b\u6807\u7b7e\uff0c\u7136\u540e\u5e73\u53f0\u5efa\u7acb\u4e00\u4e9b\u76f8\u5173\u5ea6\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u771f\u5b9e\u4e16\u754c\u5374\u662f\u76f8\u53cd\u7684\uff0c\u5b83\u4eec\u7531\u6bcf\u4e2a\u6839\u636e\u81ea\u5df1\u7684\u5224\u65ad\u548c\u9009\u62e9\uff0c\u6765\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fdb\u5316\u3002\u53c2\u89c14.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"14-\u5546\u4e1a\u6a21\u5f0f"},"1.4 \u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("h3",{id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"},"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5728\u7ebf\u4e92\u52a8\u6709\u4e09\u79cd\u5f62\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89c6\u9891\u7535\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u5728\u7ebf\u6e38\u620f\uff0c\u5982\u300a\u523a\u6fc0\u6218\u573a\u300b"),(0,n.kt)("li",{parentName:"ul"},"\u300aRoblox\u300b\u7c7b\u7684\u865a\u62df\u623f\u95f4")),(0,n.kt)("p",null,"\u5176\u4e2d\u6e38\u620f\u7c7b\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u8fd8\u662f\u4ee5\u6e38\u620f\u4e3a\u4e3b\uff0c\u8fd9\u4e9b\u4ea4\u4e92\u901a\u5e38\u53ea\u662f\u804a\u5929\u6216\u8005\u8bed\u97f3\uff0c\u6709\u70b9\u50cf\u5728\u73b0\u573a\u4e00\u8d77\u73a9\u6e38\u620f\u5927\u5bb6\u53ef\u4ee5\u76f8\u4e92\u8ba8\u8bba\uff1b\u6574\u4f53\u7684\u6d3b\u52a8\u8fd8\u662f\u4ee5\u73a9\u6e38\u620f\u4e3a\u4e3b\uff0c\u4e92\u52a8\u662f\u8f85\u52a9\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u623f\u95f4\u7c7b\u7684\u4ea4\u4e92\uff0c\u76f8\u5bf9\u79c1\u5bc6\u4e00\u70b9\uff0c\u4f46\u662f\u8fd9\u4e9b\u5e94\u7528\u7684\u6e38\u620f\u6027\u5f80\u5f80\u5f88\u5f31\uff0c\u6bd4\u8f83\u5c40\u9650\u4e8e\u5f62\u5f0f\u4e0a\u7684\u5728\u7ebf\u4e92\u52a8\uff0c\u76ee\u7684\u6027\u548c\u5a31\u4e50\u6027\u90fd\u4e0d\u591f\u5f3a\u3002"),(0,n.kt)("p",null,"Reality World\u76f8\u5bf9\u4e0a\u8ff0\u7684\u6a21\u5f0f\uff0c\u5b58\u5728\u4e00\u4e0b\u7684\u4e00\u4e9b\u72ec\u7279\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e92\u52a8\u7684\u89c4\u5219\u548c\u5185\u5bb9\u5f80\u5f80\u662f\u53ef\u4ee5\u7531\u5176\u4e2d\u4e00\u4e2a\u7528\u6237\u521b\u4f5c\u7684\uff0c\u5177\u6709",(0,n.kt)("strong",{parentName:"li"},"\u72ec\u7279\u6027"),"\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u9488\u5bf9\u6027"),"\uff0c\u6bd4\u5982\u9488\u5bf9\u4e00\u4e2a\u751f\u65e5\u4e13\u95e8\u8bbe\u7f6e\u7684\u4e0e\u670b\u53cb\u76f8\u5173\u7684\u573a\u666f\u548c\u4e92\u52a8\u5185\u5bb9\uff1b",(0,n.kt)("strong",{parentName:"li"},"\u8fd9\u79cd\u72ec\u7279\u6027\u4f7f\u5f97Reality World\u7684\u5185\u5bb9\u66f4\u5bb9\u6613\u5728\u597d\u53cb\u4e4b\u95f4\u53d1\u8d77\u4e92\u52a8")),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u5728\u4e92\u52a8\u7684\u8fc7\u7a0b\u4e2d\u8fdb\u884c\u5171\u540c\u521b\u4f5c\uff0c\u6bd4\u5982\u4f60\u5411\u86cb\u7cd5\u4e0a\u5207\u4e00\u5200\u4e0b\u53bb\uff0c\u6240\u6709\u4eba\u90fd\u53ef\u4ee5\u770b\u5230\u86cb\u7cd5\u88ab\u5207\u6210\u4e24\u4efd\uff0c\u8fd9\u662f\u56e0\u4e3aReality World\u7684\u573a\u666f\u591a\u4eba\u534f\u4f5c\u7279\u6027\uff0c\u800c\u5176\u4ed6\u4e92\u52a8\u7684\u5185\u5bb9\u662f\u56fa\u5b9a\u7684\uff0c\u6bcf\u4e2a\u73a9\u5bb6\u53ea\u80fd\u4f53\u9a8c\u8fd9\u4e9b\u8bbe\u8ba1\u597d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"Reality World\u7684\u5185\u5bb9\u53ef\u4ee5\u5373\u4f7f\u521b\u4f5c\u548c\u5206\u4eab\uff0c\u4e0d\u9700\u8981\u63d0\u4ea4\u5230\u5546\u5e97\uff0c\u7136\u540e\u7528\u6237\u4e0b\u8f7d\uff0c\u53ea\u9700\u8981\u9a6c\u4e0a\u521b\u4f5c\u4e4b\u540e\u53d1\u9001\u7ed9\u597d\u53cb\u4e00\u4e2a\u94fe\u63a5\u5c31\u53ef\u4ee5\u53ca\u65f6\u6253\u5f00")),(0,n.kt)("h3",{id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"},"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5728\u73b0\u4ee3\u6570\u5b57\u7ecf\u6d4e\u4e2d\uff0c\u9664\u4e86\u89c6\u9891\u3001\u56fe\u7247\u548c\u97f3\u4e50\u8fd9\u79cd\u80fd\u76f4\u63a5\u4f53\u9a8c\u7684\u6570\u5b57\u5185\u5bb9\uff0c\u5176\u4ed6\u7684\u5927\u90e8\u5206\u5185\u5bb9\uff0c\u5176\u5b9e\u4f53\u548c\u5bf9\u5e94\u7684\u6570\u5b57\u8868\u8ff0\u90fd\u662f\u5206\u5272\u7684\uff0c\u4f8b\u5982\u6dd8\u5b9d\u90fd\u4e70\u7684\u5546\u54c1\u53ea\u662f\u6570\u5b57\u5316\u540e\u7684\u4e00\u4e2a\u8bb0\u5f55\uff0c\u4f60\u5fc5\u987b\u6536\u5230\u4e1c\u897f\u4e4b\u540e\u624d\u80fd\u4f53\u9a8c\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u4e0e\u4e4b\u76f8\u5173\u7684\u6570\u5b57\u7ecf\u6d4e\u662f\u5e7f\u544a\uff0c\u5e7f\u544a\u4f5c\u4e3a\u4e00\u4e2a\u5c55\u793a\u4ea7\u54c1\u7684\u65b9\u5f0f\uff0c\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u5b83\u4eec\u5f80\u5f80\u4ee5\u89c6\u9891\u6216\u8005\u56fe\u7247\u7684\u5f62\u5f0f\u5448\u73b0\u3002\u7136\u800c\u5728\u8fd9\u79cd\u65b9\u5f0f\u4e2d\uff0c\u5e7f\u544a\u8bed\u4ea7\u54c1\u901a\u5e38\u662f\u5272\u88c2\u7684\uff0c\u53d7\u9650\u4e8e\u5b9e\u7269\u9700\u8981\u573a\u5730\u53ca\u8fd0\u8f93\u7b49\u95ee\u9898\uff0c\u6211\u4eec\u5e76\u4e0d\u80fd\u603b\u662f\u5728\u4efb\u610f\u4e00\u4e2a\u5e7f\u544a\u65c1\u8fb9\u653e\u4e0a\u5b9e\u7269\uff0c\u4f7f\u5f97\u4efb\u4f55\u770b\u5230\u5e7f\u544a\u7684\u4eba\u5c31\u53ef\u4ee5\u8d2d\u4e70\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u5bf9\u4e8e\u540e\u8005\u624d\u662f\u7406\u60f3\u7684\u5e7f\u544a\u5f62\u6001\uff1a\u5c31\u662f\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1\uff0c\u6216\u8005\u8bf4\u5e7f\u544a\u53ef\u4ee5\u4e00\u952e\u76f4\u8fbe\u4ea7\u54c1\u4f53\u9a8c\u548c\u8d2d\u4e70\u3002"),(0,n.kt)("h4",{id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"},"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u4ea7\u54c1\u5c31\u662f\u6570\u5b57\u5185\u5bb9\uff0c\u800c\u975e\u5b9e\u4f53\u5185\u5bb9\uff0c\u7406\u8bba\u4e0a\u662f\u53ef\u4ee5\u505a\u5230\u8fd9\u79cd\u4e00\u952e\u4f53\u9a8c\u7684\u6548\u679c\u7684\u3002\u6bd4\u5982\u5982\u679c\u4ea7\u54c1\u662f\u4e00\u4e2a\u6e38\u620f\u6216\u8005\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u70b9\u51fb\u4e0b\u8f7d\uff0c\u8fd9\u79cd\u5f62\u5f0f\u73b0\u5728\u5f88\u666e\u904d\u3002\u7136\u800c\u8fd9\u79cd\u65b9\u5f0f\u5e76\u4e0d\u662f\u6700\u597d\u7684\u6a21\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7684\u4ea7\u54c1\u90fd\u5f97\u5f00\u53d1\u4e00\u4e2aapp"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u53ef\u80fd\u5e76\u4e0d\u60f3\u8981\u5b89\u88c5\u90a3\u4e48\u591aapp"),(0,n.kt)("li",{parentName:"ul"},"\u56e0\u4e3a\u6bcf\u4e2aapp\u5b89\u88c5\u9664\u4e86\u4f53\u9a8c\u4ea7\u54c1\u8fd8\u6709\u5f88\u591a\u989d\u5916\u7684\u8d1f\u62c5\uff1a\u6ce8\u518c\uff0c\u767b\u5f55\uff0c\u8fdb\u53bb\u4e86\u89e3\u8f6f\u4ef6\u7684\u5bfc\u822a\u529f\u80fd\u7b49\u7b49")),(0,n.kt)("p",null,"\u6240\u4ee5\u5143\u5b87\u5b99\u662f\u4e00\u4e2a\u66f4\u597d\u7684\u5e7f\u544a\u5e73\u53f0\uff0c\u6bcf\u4e2a\u4ea7\u54c1\u53ea\u9700\u8981\u8bbe\u8ba1\u4e00\u4e2a\u4ea4\u4e92\uff0c\u73a9\u5bb6\u76f4\u63a5\u4f53\u9a8c\u4e00\u4e0b\u5c31\u662f\u3002\u4f46\u662f\u73b0\u5728\u7684\u6280\u672f\u5e76\u4e0d\u80fd\u505a\u5230\u8fd9\u79cd\u4f53\u9a8c\uff0c\u8fd9\u91cc\u9762\u7684\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u5e73\u53f0\u65e0\u6cd5\u652f\u6491\u4efb\u4f55\u5f00\u53d1\u8005\u81ea\u7531\u5f00\u53d1\u4ea4\u4e92\u5185\u5bb9\uff0c\u5f80\u5f80\u53ea\u80fd\u901a\u8fc7\u5e73\u53f0\u53d1\u5e03\uff0c\u8fd9\u6837\u5e7f\u544a\u80fd\u529b\u5f88\u53d7\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u589e\u52a0\u4e86\u65b0\u529f\u80fd\uff0c\u4e5f\u9700\u8981\u6240\u6709\u73a9\u5bb6\u90fd\u66f4\u65b0\uff0c\u6709\u65f6\u5019\u4e00\u4e2a\u5e7f\u544a\u53ea\u6709\u5c11\u6570\u4eba\u6709\u4f53\u9a8c\u9700\u6c42")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0cReality World\u53ef\u4ee5\u505a\u5230\u5382\u5546\u53ef\u4ee5\u4efb\u610f\u53d1\u5e03\u5e26\u6709\u4ea4\u4e92\u7684\u5e7f\u544a\uff0c\u7136\u540e\u4efb\u4f55\u73a9\u5bb6\u53ea\u8981\u770b\u5230\u5b83\uff0c\u5c31\u53ef\u4ee5\u53ca\u65f6\u4f53\u9a8c\u548c\u8d2d\u4e70\uff0c\u771f\u6b63\u505a\u5230\uff1a\u4ea7\u54c1\u53ca\u5e7f\u544a\uff0c\u5e7f\u544a\u53ca\u4ea7\u54c1\uff0c\u8fd9\u79cd\u6a21\u5f0f\u6709\u671b\u91cd\u5851\u4e00\u4e2a\u5168\u65b0\u7684\u865a\u62df\u7ecf\u6d4e\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u5185\u5bb9\u662f\u5b9e\u4f53\u5185\u5bb9\uff0c\u4ecd\u7136\u53ef\u4ee5\u865a\u62df\u5316\u4f53\u9a8c\uff0c\u6216\u8005\u901a\u8fc7\u4ea4\u4e92\uff0c\u76f8\u6bd4\u89c6\u9891\u548c\u56fe\u7247\u66f4\u597d\u7684\u4e86\u89e3\u4ea7\u54c1\u3002"),(0,n.kt)("p",null,"\u89c14.6.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e"},"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u66f4\u6709\u4ef7\u503c\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"},"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684NFT\u7c7b\u7684\u6570\u5b57\u4ea4\u6613\u5e02\u573a\uff0c\u4ea4\u6613\u7684\u662f\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\uff0c\u662f\u4e00\u4e2a\u62f7\u8d1d\uff0c\u8fd9\u4e2a\u62f7\u8d1d\u9664\u975e\u901a\u8fc7\u4e00\u5b9a\u7684\u624b\u6bb5\u8ddf\u8e2a\u8f6c\u552e\u8bb0\u5f55\uff0c\u6216\u8005\u751a\u81f3\u9650\u5236\u8f6c\u552e\uff0c\u5f88\u96be\u4fdd\u8bc1\u521b\u4f5c\u8005\u7684\u6743\u76ca\u3002"),(0,n.kt)("p",null,"\u800cReality World\u4ea4\u6613\u7684\u4e3b\u8981\u662f\u7ec4\u4ef6\u548c\u6807\u51c6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u548c\u6807\u51c6\u5e76\u4e0d\u4f1a\u62f7\u8d1d\u4e00\u4efd\uff0c\u800c\u53ea\u662f\u4e00\u4e2a\u5f15\u7528\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6e90\u5934\u62c9\u53d6\u6700\u65b0\u4ee3\u7801\u3002\u6240\u4ee5\u4ed6\u5929\u751f\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u4e86\u89e3\u4f7f\u7528\u8005\u7684\u60c5\u51b5\uff0c\u6bd4\u5982\u4e00\u4e2a\u6807\u51c6\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u5176\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4e5f\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6807\u51c6\u5f00\u53d1\u8005\u4e0d\u80fd\u80fd\u591f\u6536\u53d6\u6240\u6709\u4f7f\u7528\u8005\u7684\u8d39\u7528\uff0c\u5e76\u4e14\u8fd8\u6709\u5f88\u597d\u7684\u66f4\u65b0\u673a\u5236\uff0c\u901a\u77e5\u7528\u6237\u8d2d\u4e70\u76f8\u5173\u548c\u6700\u65b0\u4ea7\u54c1\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002"),(0,n.kt)("h3",{id:"145-\u6301\u7eed\u6d88\u8d39"},"1.4.5 \u6301\u7eed\u6d88\u8d39"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u5316\u8fdb\u7a0b\u4e2d\uff0c\u6570\u5b57\u5316\u4ea7\u54c1\u5f80\u5f80\u662f\u4e00\u6b21\u6027\u6d88\u8d39\uff0c\u8fd9\u5bfc\u81f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f6f\u4ef6\u5f00\u53d1\u8005\u5347\u7ea7\u52a8\u529b\u4e0d\u5927\uff0c\u5bf9\u521b\u65b0\u53ca\u521b\u65b0\u7684\u901f\u5ea6\u662f\u6781\u4e3a\u4e0d\u5229\u7684\uff0c\u56e0\u4e3a\u65b0\u7528\u6237\u4f1a\u8d8a\u6765\u8d8a\u5c11"),(0,n.kt)("li",{parentName:"ul"},"\u5927\u91cf\u9648\u65e7\u4ee3\u7801\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u517c\u5bb9\u6210\u672c\u9ad8\uff0c\u4e00\u65b9\u9762\u662f\u7528\u6237\u4f7f\u7528\u6bd4\u8f83\u9648\u65e7\u7684\u6280\u672f\u6216\u4f53\u9a8c")),(0,n.kt)("p",null,"\u9700\u8981\u6539\u53d8\u8fd9\u79cd\u5c40\u9762\uff0c\u624d\u80fd\u66f4\u5927\u5730\u6fc0\u6d3b\u6570\u5b57\u6d88\u8d39\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.12.4.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"15-\u7528\u6237"},"1.5 \u7528\u6237"),(0,n.kt)("p",null,"Reality World\u5e73\u53f0\u6709\u56db\u79cd\u7c7b\u578b\u7684\u7528\u6237\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u4ece\u521b\u4f5c\u5c42\u9762\u533a\u5206\uff0c\u4e0d\u6d89\u53ca\u5546\u4e1a\u65b9\u9762\u7684\u5206\u7c7b\u6216\u8005\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\uff1a\u7c7b\u4f3c\u4e8e\u6296\u97f3\u5e73\u53f0\u53ea\u89c2\u770b\u89c6\u9891\uff0c\u4ece\u6765\u6ca1\u6709\u6216\u8005\u5f88\u5c11\u53d1\u5e03\u5185\u5bb9\u7684\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7528\u6237\uff1a\u6307\u53ea\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u501f\u52a9PC\u7f16\u8f91\u5668\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\uff1a\u4f7f\u7528PC\u7f16\u8f91\u5668Reality Create\u57fa\u4e8e\u6807\u51c6\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4f5c\u8005\uff1a\u57fa\u4e8e\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\u63d0\u51fa\u67d0\u79cd\u62bd\u8c61\uff0c\u5e76\u5c06\u5176\u8f6c\u6362\u4e3a\u6807\u51c6\uff0c\u4ee5\u53ca\u6301\u7eed\u7ef4\u62a4\u6807\u51c6\u7684\u66f4\u65b0")),(0,n.kt)("h3",{id:"151-\u666e\u901a\u7528\u6237"},"1.5.1 \u666e\u901a\u7528\u6237"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u666e\u901a\u7528\u6237\u4e0d\u8fdb\u884c\u4efb\u4f55\u5f62\u5f0f\u7684\u521b\u4f5c\uff0c\u4f46TA\u4ecd\u7136\u662f\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\u5f88\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u90fd\u5176\u4ed6\u521b\u4f5c\u5185\u5bb9\u7684\u4f7f\u7528\u548c\u4f53\u9a8c\u4ea7\u751f\u6d88\u8d39"),(0,n.kt)("li",{parentName:"ul"},"TA\u901a\u8fc7\u79c1\u4eba\u793e\u4ea4\u7f51\u7edc\uff0c\u4ea7\u751f\u7684\u5bf9\u597d\u7684\u5185\u5bb9\u7684\u4e3b\u52a8\u63a8\u8350\u884c\u4e3a\uff0c\u4fc3\u8fdb\u4e86\u6574\u4e2a\u5e02\u573a\u7ecf\u6d4e")),(0,n.kt)("p",null,"\u5f53\u7136\u6240\u6709\u4eba\u90fd\u662f\u666e\u901a\u7528\u6237\uff0c\u5e76\u4e14\u666e\u901a\u7528\u6237\u4e5f\u6709\u53ef\u80fd\u8f6c\u6362\u4e3a\u5176\u4ed6\u521b\u4f5c\u7528\u6237\u3002"),(0,n.kt)("h3",{id:"152-\u521b\u4f5c\u7528\u6237"},"1.5.2 \u521b\u4f5c\u7528\u6237"),(0,n.kt)("p",null,"\u5e73\u53f0\u5f88\u5927\u4e00\u90e8\u5206\u6280\u672f\u7684\u67b6\u6784\u90fd\u662f\u4e3a\u4e86\u521b\u4f5c\u7528\u6237\uff0c\u8fd9\u662f\u533a\u522b\u5176\u4ed6\u7c7b\u4f3c\u5e73\u53f0\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u521b\u4f5c\u6709\u4e24\u7c7b\u4e3b\u6d41\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e4b\u7c7b\u7684\u6c99\u76d2\u6e38\u620f"),"\uff0c\u5728\u8fd9\u7c7b\u6e38\u620f\u4e2d\uff0c\u6574\u4e2a\u4e16\u754c\u7684\u89c4\u5219\u7c7b\u578b\u6bd4\u8f83\u4e00\u81f4\uff0c\u6bd4\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u5821\u5792\u5efa\u9020\u4e0e\u9003\u751f\uff0c\u300a\u6211\u7684\u4e16\u754c\u300b\u4e2d\u7684\u602a\u7269\u673a\u5236\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5185\u7f6e\u4e8e\u7cfb\u7edf\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u5927\u91cf\u5177\u6709\u56fa\u5b9a\u884c\u4e3a\u7684\u7269\u4ef6\uff0c\u73a9\u5bb6\u521b\u4f5c\u7684\u81ea\u7531\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff1a\u57fa\u672c\u4e0a\u4e0d\u6d89\u53ca\u903b\u8f91\u672c\u8eab\u7684\u6784\u9020\uff0c\u53ea\u6709\u8ddf\u7269\u7406\u4f4d\u7f6e\uff0c\u7269\u4f53\u7ec4\u5408\u7b49\u76f8\u5173\u4e0e\u6e38\u620f\u884c\u4e3a\u65e0\u5173\u7684\u7b56\u7565"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"AR\u4e8b\u4ef6\u9a71\u52a8\u7684\u589e\u5f3a\u73b0\u5b9e\u4f53\u9a8c"),"\uff0c\u8fd9\u4e9b\u5e94\u7528\u4ee5\u300aSnapchat\u300b\u4e3a\u4ee3\u8868\uff0c\u5b83\u63d0\u4f9b\u4e00\u4e9b\u56fa\u5b9a\u7684\u5177\u6709\u4e92\u52a8\u4f53\u9a8c\u7684\u9053\u5177\u6216\u8005\u6ee4\u955c\uff0c\u7528\u6237\u501f\u52a9\u6444\u50cf\u673a\u8fdb\u884c\u4f53\u9a8c\uff1b\u8fd9\u79cd\u4f53\u9a8c\u672c\u8eab\u4e0d\u6d89\u53ca3D\u7684\u521b\u4f5c\uff0c\u4f8b\u5982\u5236\u4f5c\u4e00\u4e2a\u65b0\u7684\u6ee4\u955c\u6216\u8005\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u5b83\u4eec\u4ea7\u751f\u4e86\u4e00\u4e2a\u72ec\u4e00\u65e0\u4e8c\u7684\u89c6\u9891\u5185\u5bb9\uff0c\u5e76\u4e14\u8fd9\u4e2a\u5185\u5bb9\u662f\u8ddf\u81ea\u5df1\u9ad8\u5ea6\u76f8\u5173\u7684\u3002")),(0,n.kt)("p",null,"\u300aSnapchat\u300b\u7684\u6a21\u677f\u53ea\u80fd\u5728PC\u7aef\u5236\u4f5c\uff0c\u300aReality World\u300b\u5219\u53ef\u4ee5\u53ca\u65f6\u521b\u4f5c\u300aSnapchat\u300b\u7c7b\u4f3c\u7684\u6a21\u677f\uff0c\u5e76\u4e14\u53ef\u4ee5\u9009\u62e9\u66f4\u4e30\u5bcc\u7684\u529f\u80fd\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u300aReality World\u300b\u9700\u8981\u652f\u6301\u4efb\u610f\u7684\u7ec4\u4ef6\u4f7f\u7528\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u4efb\u610f\u534f\u4f5c\uff0c\u8fd9\u6837\u624d\u80fd\u4e0d\u9650\u5236\u521b\u4f5c\uff0c\u4e0d\u7136\u5c31\u4f1a\u5f88\u5bb9\u6613\u5c40\u9650\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u7ec4\u4ef6\u5305\uff0c\u6216\u8005\u4e00\u4e9b\u7279\u5b9a\u7684\u4e92\u52a8\u7c7b\u578b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4efb\u610f\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u901a\u4fe1\u548c\u7ec4\u5408\u662fReality World\u72ec\u7279\u7684\u529f\u80fd\uff0c\u5b83\u80fd\u591f\u91ca\u653e\u521b\u4f5c\u8005\u65e0\u9650\u7684\u521b\u610f"),"\u3002"),(0,n.kt)("p",null,"XR\u8bbe\u5907\u4e0a\u7684\u521b\u4f5c\u7528\u6237\u5fc5\u987b\u8d2d\u4e70\u8d44\u6e90\uff0c\u56e0\u4e3a\u4ed6\u4eec\u53ea\u80fd\u57fa\u4e8e\u5df2\u6709\u7684\u8d44\u6e90\u8fdb\u884c\u521b\u4f5c\uff0c\u5f53\u7136\u6709\u4e00\u4e9b\u8d44\u6e90\u5305\u6216\u8005\u7ec4\u4ef6\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5316\u751f\u6210\u5185\u5bb9\u7684\uff0c\u8fd9\u7c7b\u7ec4\u4ef6\u53ef\u4ee5\u751f\u6210\u4e00\u4e9b\u968f\u673a\u4e0d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u8d44\u6e90\u7684\u7c7b\u578b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u8d44\u6e90\uff1a\u6a21\u578b\uff08\u5982\u6811\u6728\u3001\u6c7d\u8f66\u3001\u5f13\u7bad\u7b49\uff09\u3001\u7eb9\u7406\u3001\u7c92\u5b50\u7279\u6548\u3001\u52a8\u753b\u7b49\uff0cReality World\u5b98\u65b9\u5e94\u8be5\u63d0\u4f9b\u8f83\u591a\u7684\u57fa\u7840\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u529f\u80fd\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u662f\u6700\u57fa\u672c\u7684\u884c\u4e3a\uff0c\u5b83\u4eec\u662f\u7528\u6237\u770b\u4e0d\u89c1\u7684\u903b\u8f91\u4ee3\u7801\uff0c\u5b83\u4eec\u7528\u6765\u63a7\u5236\u7269\u4f53\u5728\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u884c\u4e3a\uff1b\u4e0d\u540c\u7ec4\u4ef6\u5305\u4e4b\u95f4\u7684\u7ec4\u4ef6\u53ef\u4ee5\u4efb\u4f55\u7ec4\u5408\uff0c\u521b\u4f5c\u8005\u9700\u8981\u533a\u5206\u5b83\u4eec\u7684\u529f\u80fd\uff0c\u624d\u80fd\u751f\u6210\u66f4\u597d\u7684\u5408\u7406\u7684\u4ea4\u4e92\u903b\u8f91\u3002\u8fd9\u662f\u521b\u4f5c\u4f53\u9a8c\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u90e8\u4ef6\u6216\u8005\u7269\u4f53\uff0c\u7531\u4e00\u5b9a\u7684\u7ec4\u4ef6\u7ec4\u5408\u5f62\u6210\uff0c\u5177\u6709\u67d0\u4e9b\u7279\u5b9a\u903b\u8f91\u529f\u80fd\u7684\u6e38\u620f\u5bf9\u8c61\u6216\u8005\u5b9e\u4f53\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u662f\u76f4\u63a5\u5b58\u5728\u4e8e\u6e38\u620f\u573a\u666f\u7ed3\u6784\u4e2d\u7684\u5143\u7d20\uff0c\u8fd9\u4e9b\u7269\u4f53\u53ef\u80fd\u5305\u542b\u6a21\u578b\u3001\u52a8\u753b\u3001\u4ee5\u53ca\u80fd\u591f\u826f\u597d\u63a7\u5236\u8fd9\u4e9b\u6a21\u578b\u53ca\u5176\u884c\u4e3a\u7684\u7ec4\u4ef6\u7ec4\u5408\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u7528\u6237\u76f4\u63a5\u653e\u7f6e\u5728\u573a\u666f\u4e2d\u5c31\u53ef\u4ee5\u4f7f\u7528\u7684\uff0c\u7c7b\u4f3c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5f53\u4e2d\u7684\u7269\u4f53\uff1b\u5b83\u4eec\u6709\u4e9b\u4e5f\u662f\u7528\u4e8e\u5e2e\u52a9\u521b\u4f5c\u4e00\u4e2a\u573a\u666f\u7684\u7ed3\u6784\u6027\u7684\u7ec4\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u5305\u542bTAG\u7684Entity\uff0c\u4e00\u4e2aNPC\u602a\u7269\u7b49\uff1b\u4e5f\u5305\u542b\u4e00\u4e9b\u7279\u6b8a\u5185\u7f6e\u529f\u80fd\u7684\u90e8\u4ef6\uff0c\u4f8b\u5982Layer\u8868\u7b49\u3002")),(0,n.kt)("h4",{id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b"},"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u8005\u9996\u5148\u6d4f\u89c8Creation\u5546\u5e97\uff0c\u4e0b\u8f7d\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u57fa\u672c\u7684\u8d44\u6e90\uff0c\u5982\u4e0a\u9762\u4ecb\u7ecd\u7684\u9759\u6001\u8d44\u6e90\u3001\u529f\u80fd\u7ec4\u4ef6\u548c\u7269\u4f53\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5c06\u5176\u62d6\u5165\u521d\u59cb\u7684\u7a7a\u573a\u666f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u9009\u62e9\u7269\u4f53\u5bf9\u5176\u5c5e\u6027\u8fdb\u884c\u7f16\u8f91\uff0c\u5176\u4e2d\u53ef\u4ee5\u5bf9\u5176\u6dfb\u52a0\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u6309\u7c7b\u578b\u8fdb\u884c\u7ec4\u7ec7\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u6709\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\u53ca\u8bf4\u660e\uff0c\u8bf4\u660e\u5e94\u8be5\u600e\u6837\u4f7f\u7528\u8be5\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u7ec4\u4ef6\u7684\u5c5e\u6027\u53c2\u6570\u7b49\uff0c\u7ec4\u4ef6\u901a\u8fc7\u53c2\u6570\u6765\u6539\u53d8\u7269\u4f53\u7684\u884c\u4e3a\u6216\u8005\u89c6\u89c9\uff0c\u4f8b\u5982\u5982\u679c\u662f\u7a0b\u5e8f\u5316\u751f\u6210\u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u751f\u6210\u4e0d\u540c\u7684\u573a\u666f\uff0c\u5982\u679c\u662f\u7c92\u5b50\u7279\u6548\u7ec4\u4ef6\uff0c\u5219\u5f62\u6210\u4e0d\u540c\u7684\u89c6\u89c9\u6548\u679c"),(0,n.kt)("li",{parentName:"ul"},"\u64ad\u653e\u9884\u89c8"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u94fe\u63a5\u53d1\u9001\u7ed9\u597d\u53cb"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u70b9\u51fb\u94fe\u63a5\u52a0\u5165\u4e00\u8d77\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u597d\u53cb\u5177\u6709\u6743\u9650\uff0c\u53ef\u4ee5\u8fdb\u884c\u5171\u540c\u7f16\u8f91\uff0c\u8fd9\u4e9b\u7f16\u8f91\u4e5f\u53ef\u4ee5\u662f\u540c\u65f6\u5728\u7ebf\u534f\u540c\u7684")),(0,n.kt)("h3",{id:"153-\u5f00\u53d1\u8005"},"1.5.3 \u5f00\u53d1\u8005"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u53ea\u80fd\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5fc5\u987b\u652f\u6301\u67d0\u4e2a\u6807\u51c6\uff0c\u5f53\u7136\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u652f\u6301\u591a\u4e2a\u6807\u51c6\uff0c\u6765\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u548c\u7ec4\u4ef6\u662f\u9694\u79bb\u7684\u3002\u9664\u6765\u81ea\u6807\u51c6\u4e4b\u5916\u7684\u7b26\u53f7\uff0c\u5176\u4ed6\u7b26\u53f7\u90fd\u662f\u79c1\u6709\u53d8\u91cf\u3002"),(0,n.kt)("h3",{id:"154-\u6807\u51c6\u4f5c\u8005"},"1.5.4 \u6807\u51c6\u4f5c\u8005"),(0,n.kt)("p",null,"\u67d0\u4e2a\u6807\u51c6\u7684\u8d1f\u8d23\u4eba\uff0c\u5f53\u7136\u6807\u51c6\u53ef\u4ee5\u8f6c\u5356\uff0c\u5f53\u524d\u8d1f\u8d23\u4eba\u4e0d\u4e00\u5b9a\u662f\u521b\u59cb\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u6807\u51c6\u4e0d\u4e00\u5b9a\u9700\u8981\u7f16\u7a0b\uff0c\u5b83\u4ec5\u4ec5\u6d89\u53ca\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u62bd\u8c61\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u3002\u56e0\u6b64\uff0c\u4e0d\u5177\u5907\u7f16\u7a0b\u80fd\u529b\uff0c\u4f46\u662f\u5177\u6709\u8f83\u5f3a\u62bd\u8c61\u80fd\u529b\u7684\u4eba\u4e5f\u53ef\u4ee5\u521b\u5efa\u548c\u7ef4\u62a4\u6807\u51c6\u3002\u4f46\u662f\u4ece\u66f4\u597d\u7684\u6570\u636e\u7ed3\u6784\u5b9a\u4e49\u89d2\u5ea6\uff0c\u7531\u7f16\u7a0b\u4eba\u5458\u7ef4\u62a4\u6807\u51c6\u662f\u6700\u5408\u9002\u7684\uff0c\u4f46\u662f\u7f16\u7a0b\u4eba\u5458\u7684\u62bd\u8c61\u80fd\u529b\u5f80\u5f80\u4e0d\u591f\u3002\u6240\u4ee5\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u662f\u67d0\u4e2a\u6807\u51c6\u540e\u9762\u6709\u62bd\u8c61\u80fd\u529b\u8f83\u5f3a\u548c\u7f16\u7a0b\u80fd\u529b\u8f83\u5f3a\u4e24\u8005\u7684\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.11\u548c4.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c"},"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f88\u663e\u7136\uff0c\u8fd9\u79cd\u7531\u7528\u6237\u9a71\u52a8\u7684\u5168\u65b0\u4f53\u9a8c\u9700\u6c42\uff0c\u7528\u5f53\u4e0b\u7684\u6280\u672f\u67b6\u6784\u662f\u505a\u4e0d\u5230\u7684\uff0c\u800c\u4e14\u5b83\u7684\u9650\u5236\u7684\u6839\u6e90\u6765\u6e90\u4e8e\u66f4\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u3002\u5728\u8fd1\u51e0\u5341\u5e74\u7684\u8ba1\u7b97\u673a\u65f6\u4ee3\u4e2d\uff0c\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u53d1\u751f\u592a\u6839\u672c\u6027\u53d8\u5316\uff0c\u4f8b\u5982\u6211\u4eec\u80fd\u611f\u77e5\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u8bd1\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u4e00\u4e9b10\u5e74\u524d\u7684\u7ecf\u5178\u8457\u540d\u57fa\u672c\u4e0a\u73b0\u5728\u8fd8\u662f\u9002\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\u4e5f\u6ca1\u6709\u9769\u547d\u6027\u7684\u53d8\u5316\uff0c\u4e0d\u4ec5\u81f32010\u5e74\u4e4b\u540e\u5f88\u5c11\u63a8\u51fa\u5168\u65b0\u7684\u8bed\u8a00\uff0c\u5927\u90e8\u5206\u8bed\u8a00\u8bbe\u8ba1\u4e5f\u53ea\u662f\u9488\u5bf9\u4e00\u4e9b\u5f00\u53d1\u4f53\u9a8c\u5c42\u9762\u7684\u9009\u62e9\uff0c\u5f88\u591a\u8bed\u8a00\u7684\u6838\u5fc3\u601d\u60f3\u751a\u81f3\u65e9\u57282000\u5e74\u4e4b\u524d\u5c31\u786e\u5b9a")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"add",src:l(958).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u662f\u8ba1\u7b97\u67b6\u6784\u6700\u91cd\u8981\u7684\u6307\u5411\uff0c\u56e0\u4e3a\u5b83\u4eec\u8fde\u63a5\u8ba1\u7b97\u673a\u786c\u4ef6\u548c\u5e94\u7528\u8f6f\u4ef6\uff0c\u5b83\u4eec\u7684\u53d8\u9769\u5f80\u5f80\u80fd\u591f\u51b3\u5b9a\u4e0a\u5c42\u8f6f\u4ef6\u5f62\u6001\u7684\u53d8\u9769\uff0c\u4ece\u800c\u51b3\u5b9a\u6280\u672f\u5e26\u7ed9\u6d88\u8d39\u8005\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f53\u5143\u5b87\u5b99\u5e26\u6765\u771f\u6b63\u5927\u89c4\u6a21\u3001\u4e92\u64cd\u4f5c\u3001\u5927\u5e76\u53d1\u7b49\u7b49\u8fd9\u4e9b\u4f20\u7edf\u8ba1\u7b97\u6a21\u578b\u4e0d\u80fd\u5e94\u4ed8\u7684\u9700\u6c42\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5168\u65b0\u7684\u601d\u8def\uff0c\u5728\u8ba1\u7b97\u67b6\u6784\u5c42\u9762\u521b\u9020\u5168\u65b0\u7684\u589e\u91cf\u4ef7\u503c\uff0c\u624d\u6709\u673a\u4f1a\u9a71\u52a8\u6574\u4e2a\u5143\u5b87\u5b99\u7684\u53d8\u9769\u3002"),(0,n.kt)("h1",{id:"2-reality-interoperable-system"},"2. Reality Interoperable System"),(0,n.kt)("p",null,"\u7ed3\u6784\u62bd\u8c61\uff0c\u5bf9\u4e8eXR\u7aef\u7684\u9009\u62e9\uff0c\u5982\u679c\u5361\u5305\u592a\u591a\uff0c\u4f1a\u5bfc\u81f4\u9009\u62e9\u64cd\u4f5c\u5f88\u590d\u6742\uff0c\u53c2\u8003\u6dd8\u5b9d\u8d2d\u7269\uff0c\u5927\u5bb6\u4f1a\u628a\u60f3\u4e70\u7684\u5546\u54c1\u653e\u8fdb\u8d2d\u7269\u8f66\uff0c\u6700\u540e\u4e00\u6b21\u6027\u4ed8\u6b3e"),(0,n.kt)("p",null,"\u8ba9\u7528\u6237\u5728\u624b\u673a\u7aef\u5750\u597d\u5f52\u7c7b\uff0c\u7cbe\u9009\u51fa\u786e\u5b9a\u6216\u8005\u5927\u6982\u7387\u4f1a\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7136\u540e\u7b80\u5316\u5b9e\u9645\u7684\u9009\u62e9\uff0c\u751a\u81f3\u901a\u8fc7\u66f4\u52a0\u53cb\u597d\u7684\u547d\u540d\u89c4\u8303\u6765\u4f7f\u7528\u8bed\u8a00\u9009\u62e9"),(0,n.kt)("p",null,"\u603b\u4e4b\u5c31\u662f\u9700\u8981\u66f4\u597d\u7684\u7c7b\u578b\u5316\uff0c\u5e76\u4e14\u5c06\u7528\u6237\u5bf9\u8d44\u6e90\u7684\u9009\u62e9\u8fc7\u7a0b\u4e2d\uff0c\u878d\u5165\u5206\u7c7b\uff0c\u5f62\u6210\u4e00\u4e2a\u5929\u7136\u7684\u7b5b\u9009\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u5b9a\u4e49\u521b\u4f5c\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u4ec5\u4ec5\u662fCreate\u4e2d\u7684\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u50cf\u5907\u5fd8\u5f55\u7b14\u8bb0\u4e00\u6837\u968f\u65f6\u8bb0\u5f55"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u6e90\u7684\u9009\u62e9\u51c6\u5907\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u770b\u522b\u4eba\u7684\u521b\u4f5c\u4e5f\u662f\u521b\u4f5c\u601d\u8003\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u903b\u8f91\u4e0a\u7684\u7ec4\u7ec7\u53ef\u80fd\u6709\u4e00\u90e8\u4efd\u662f\u975e\u89c6\u89c9\u76f8\u5173\u7684\uff0c\u6240\u4ee5\u8d44\u6e90\u7ba1\u7406\u672c\u8eab\u8981\u878d\u5165\u521b\u4f5c\u8fc7\u7a0b\uff0c\u5373\u5b83\u4e0d\u5149\u662f\u8d44\u6e90\u7ba1\u7406\uff0c\u4e5f\u5305\u542b\u4e00\u5b9a\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f8b\u5982\u6545\u4e8b\u5927\u7eb2\u7ed3\u6784\u7b49\u7b49\uff0c\u5c31\u50cf\u7b56\u5212\u5728\u7ec4\u7ec7\u8868\u683c\u7684\u65f6\u5019\uff0c\u6bd4\u5982\u7f16\u5199\u4eba\u7269\u6545\u4e8b\u5bf9\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u80fd\u4ec5\u4f9d\u8d56\u4e8e\u8d44\u6e90\u8d2d\u4e70+XR\u7aef\u9009\u62e9\u8fd9\u6837\u7684\u4f20\u7edf\u6a21\u5f0f\uff0c\u5373\u4ea4\u4e92\u590d\u6742\uff0c\u4e5f\u4e0d\u7b26\u5408\u5b9e\u9645\u7684\u521b\u4f5c\u6d41\u7a0b")),(0,n.kt)("h2",{id:"21-creation-scene-description"},"2.1 Creation Scene Description"),(0,n.kt)("p",null,"\u9700\u8981\u52a0\u5165\u7528\u6237\u7248\u6743\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"USD\u7684asset resolution\u673a\u5236\uff0c\u4f7f\u5f97\u53ef\u4ee5\u76f4\u63a5\u52a0\u8f7dcreation.id\u7684\u5185\u5b58\uff0c\u800c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u52a0\u8f7d\u6a21\u5757\uff0c\u4f46\u662f\u9700\u8981\u5728\u81ea\u5b9a\u4e49resolution\u4e2d\u52a0\u5165\u6743\u9650\u9a8c\u8bc1\uff0c\u4f8b\u5982\u4f20\u5165\u6d88\u8d39\u7684app\u4ee5\u53ca\u7528\u6237\u4fe1\u606f\uff08Reality ID\uff09\u3002"),(0,n.kt)("p",null,"USDZ\u53ef\u80fd\u662f\u5c06\u4e00\u4e9bBehavior\u8f6c\u6362\u4e3aSchema\uff0c\u56e0\u4e3a\u8fd9\u4e9bSchema\u662fC++\u5e93\uff0c\u6240\u4ee5\u9700\u8981\u5c06USD\u7684C++\u5e93\u653e\u8fdbiOS\u7cfb\u7edf\u4e2d\uff1b\u867d\u7136USD\u63d0\u4f9b\u6709Python binding\uff0c\u4f46\u662f\u5b83\u53ea\u662f\u63a5\u53e3\u7684\u5c01\u88c5\uff0c\u56e0\u4e3aUSD\u672c\u8eab\u4e5f\u662f\u4e00\u95e8\u8bed\u8a00\uff0c\u8bed\u8a00\u672c\u8eab\u9700\u8981\u89e3\u91ca\u6216\u8005\u7f16\u8bd1\uff0cUSD\u662f\u5c06\u65b0\u7684Schema\u751f\u6210\u89e3\u6790\u7684C++\u6587\u4ef6\uff0c\u6240\u4ee5\u9700\u8981\u653e\u7f6e\u5728\u8fd0\u884c\u65f6\uff0c\u6240\u4ee5\u5c31\u4e0d\u80fd\u52a8\u6001\u5b9a\u4e49\uff0c\u53ea\u80fd\u662f\u7cfb\u7edf\u7ea7\u522b\u7684Schema\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u811a\u672c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u8fd8\u662f\u9700\u8981\u589e\u52a0\u4e00\u5c42\u89e3\u6790\uff1b"),(0,n.kt)("p",null,"\u4e3a\u6b64USD\u6587\u4ef6\u4e2d\u9700\u8981\u5305\u542b\u4e00\u4e9b\u975eUSD\u7684\u7247\u6bb5\uff0c\u4f8b\u5982\u5b9a\u4e49\u4e00\u4e2a\u7279\u6b8a\u7684Component\u6216\u8005Model\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7asset resolution\u6765\u4e0eUSD\u4e00\u8d77\u9002\u914d\u5de5\u4f5c\u3002\u8fd9\u4e00\u90e8\u5206\u53ef\u4ee5\u4e0d\u662fUSD\u8bed\u8a00\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u5b9a\u4e49\u7684\u8bed\u6cd5\uff1b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aUSD\u6587\u4ef6\u4e0d\u5e94\u8be5\u8ba9\u7528\u6237\u770b\u5230\u548c\u7f16\u8f91\uff0c\u7528\u6237\u770b\u5230\u7684\u662f\u5de5\u7a0b\u6216\u8005\u53ef\u89c6\u5316\u7684\u63cf\u8ff0\uff0c\u6216\u8005\u5c5e\u6027\u8868\u8ff0\u3002\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u4e5f\u4e0d\u9700\u8981\u7f16\u8f91\u8fd9\u4e48\u590d\u6742\u7684\u7ed3\u6784\uff0cUSD\u672c\u8d28\u4e0a\u8fd8\u662f\u9762\u5411\u6570\u636e\u7ed3\u6784\u6216\u8005\u7a0b\u5e8f\u5458\u7684\uff0cRW\u7684\u7ed3\u6784\u5e94\u8be5\u66f4\u7b80\u5355\u3001\u6241\u5e73\u3002"),(0,n.kt)("h3",{id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8"},"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h3",{id:"212-\u5185\u5b58\u5206\u5e03\u5f0f"},"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5c3d\u91cf\u907f\u514d\u5185\u5b58\u4e2d\u8f83\u5927\u7684\u5c42\u6b21\u6027\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e94\u8be5\u90fd\u662f\u6241\u5e73\u7684\uff0c\u76f8\u5173\u6027\u901a\u8fc7\u7ec4\u4ef6\u901a\u4fe1\u6765\u5b9e\u73b0\u3002\u6240\u6709\u6570\u636e\u90fd\u662f\u6241\u5e73\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f51\u683c\u3001\u6750\u8d28\u3001\u52a8\u753b\u7b49\u6570\u636e\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u5185\u90e8\u5b58\u5230\u5927\u91cf\u76f8\u5173\u6027\u3001\u5f15\u7528\u7b49\uff0c\u5982\u679c\u5c06\u5b83\u4eec\u5b58\u50a8\u4e3a\u6241\u5e73\u7684\uff0c\u5219\u89e3\u6790\u4ee3\u7801\u7684\u6548\u7387\u4f1a\u6bd4\u8f83\u4f4e\uff0c\u901a\u5e38\u8fd9\u79cd\u7d27\u8026\u5408\u7684\u6570\u636e\u90fd\u662f\u4f7f\u7528OOP\u7684\u65b9\u5f0f\u6765\u89e3\u6790\u548c\u6267\u884c\u8ba1\u7b97\u3002\u8fd9\u79cd\u6570\u636e\u6211\u4eec\u5c31\u4fdd\u7559\u4f20\u7edf\u7684\u65b9\u5f0f\uff0c\u4f7f\u7528USD\u6765\u4fdd\u5b58\u8fd9\u4e9b\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6211\u4eec\u5b58\u50a8\u7cfb\u7edf\u91cc\u9762\u4f1a\u6709\u4e24\u7c7b\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662fUSD\uff0c\u7528\u6765\u89e3\u6790\u4f20\u7edf\u7684\u6a21\u578b\u3001\u52a8\u753b\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5355\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662f\u903b\u8f91\u90e8\u5206")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5176\u4ed6\u4e00\u4e9b\u590d\u6742\u7ed3\u6784\uff0c\u4f8b\u5982\u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u3001AI\u7b49\uff0c\u5982\u679c\u8fd9\u4e9b\u89c4\u5219\u662f\u76f8\u5bf9\u56fa\u5b9a\u7684\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u5355\u72ec\u7684\u683c\u5f0f\u5b58\u50a8\uff0c\u5b83\u4eec\u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u50cf\u7c7b\u4f3cUSD\u90a3\u6837\u7684\u6587\u4ef6\u5f62\u5f0f\u5b58\u50a8\uff0c\u7136\u540e\u5b9e\u4f53\u5bf9\u8c61\u6309\u5355\u72ec\u7684\u673a\u5236\u52a0\u8f7d\u5b83\u4eec\u5e76\u8fdb\u884c\u89e3\u6790\u3002\u4f1a\u5b9a\u4e49\u4e00\u4e9b\u4e13\u95e8\u7684\u52a0\u8f7d\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u64cd\u4f5c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5185\u5b58\u4e2d\u8981\u5c3d\u91cf\u907f\u514d\u4f7f\u7528\u5c42\u6b21\u7ed3\u6784\u53bb\u805a\u5408\u591a\u4e2a\u6570\u636e\uff0c\u9664\u4e86\u50cfUSD\u8fd9\u79cd\u4f20\u7edf\u7684\u6570\u636e\u9664\u5916\uff0c\u5f53\u7136\u5bf9\u4e8eUSD\uff0c\u6211\u4eec\u4e5f\u8981\u5c3d\u91cf\u5229\u7528\u6570\u636e\u9a71\u52a8\u7684\u7279\u6027\u5c3d\u91cf\u628a\u4e0d\u76f8\u5173\u72ec\u7acb\u7684\u6570\u636e\u62c6\u5f00\u3002\u5c3d\u91cf\u907f\u514d\u8f83\u5927\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("h2",{id:"22-creation-script"},"2.2 Creation Script"),(0,n.kt)("p",null,"Creation\u6709\u4e00\u4e2a\u6838\u5fc3\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5e94\u8be5\u50cfLua\u4e00\u6837\u7b80\u5355\uff0c\u8f7b\u91cf\u7684\u8fd0\u884c\u65f6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8bf4\u660e\u6587\u6863\u53ea\u670950\u9875pdf\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u53ea\u9700\u8981\u4e86\u89e3\u8fd920\u9875\u6587\u6863\uff0c\u4e0d\u518d\u9700\u8981\u9605\u8bfb\u5176\u4ed6\u8d44\u6599\u5df2\u5b66\u4e60\u66f4\u9ad8\u7ea7\u7684\u6280\u5de7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u540c\u65f6\u9762\u5411\u4e13\u4e1a\u5f00\u53d1\u8005\u548c\u666e\u901a\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u5c3d\u53ef\u80fd\u5c11\u7684\u7cfb\u7edf\u5c42API\uff0c\u4e0d\u8981\u5168\u90e8\u66b4\u9732\u5f15\u64ce\u5c42\u7684API\uff0c\u751a\u81f3\u53ef\u4ee5\u5c06\u5f15\u64ce\u5c42\u7684API\u4fee\u6539\u4e0d\u540c\u7684\u6613\u4e8e\u4e1a\u52a1\u4fa7\u7406\u89e3\u7684API\u540d\u5b57\uff0c\u5b83\u7684\u6240\u6709API\u5e94\u8be5\u50cfHoudini\u4e00\u6837\uff0c\u5168\u90e8\u4e13\u6ce8\u4e8e\u4e1a\u52a1\uff0c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u4e86\u89e3\u7684\u5c31\u4e0d\u66b4\u9732\u7ed9\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"Creation Script\u7684\u6838\u5fc3\u76ee\u6807\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u8981\u6784\u5efa\u4e00\u5957\u80fd\u591f\u4fbf\u4e8e\u666e\u901a\u7528\u6237\u7f16\u8f91\u3001\u548c\u5171\u4eab\u903b\u8f91\u7684\u67b6\u6784\uff1b\u6240\u4ee5\u4ed6\u5fc5\u987b\u80fd\u591f\u52a8\u6001\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u6b21\u8981\u76ee\u6807\u662f\u7b80\u5316\u5f00\u53d1\u8005\u7684\u5f00\u53d1\u4f53\u9a8c\uff0c\u4f8b\u5982\u53ea\u4e13\u6ce8\u4e8e\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u7ec4\u7ec7\u8bbe\u8ba1\uff0c\u518d\u6bd4\u5982\u7b80\u5316\u591a\u7ebf\u7a0b\u7684\u5f00\u53d1\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u611f\u77e5\u4e0d\u5230\u5e76\u53d1\u7f16\u7a0b\uff1b\u4f8b\u5982\u4e0d\u80fd\u4e3a\u4e86\u65b9\u4fbf\u5bf9Component \u8fdb\u884c\u7ba1\u7406\uff0c\u5c31\u8981\u6c42\u7528\u6237\u53bb\u914d\u7f6e\u4e00\u4e2a\u5305\u5f15\u7528\u6587\u4ef6\uff0c\u800c\u5e94\u8be5\u81ea\u52a8\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u8be5\u662f\u56fe\u7075\u5b8c\u5907\u7684\uff0c\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u4ed6\u5e94\u8be5\u57fa\u4e8e\u4e00\u4e2a\u5df2\u6709\u7684\u811a\u672c\u8bed\u8a00\uff0c\u4f7f\u4ed6\u4e13\u6ce8\u4e8e\u4e0a\u5c42\u67b6\u6784\uff0c\u800c\u4e0d\u662f\u53bb\u6784\u5efa\u4e00\u5957\u5e95\u5c42\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5bf9\u8c61\u7684\u6784\u5efa\u5728\u5bbf\u4e3b\uff0c\u811a\u672c\u4e3b\u8981\u505a\u8f7b\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5783\u573e\u56de\u6536\uff0c\u6240\u6709\u5806\u4e0a\u7684\u5bf9\u8c61\u5747\u6709\u5bbf\u4e3b\u5206\u914d\u548c\u7ba1\u7406")),(0,n.kt)("p",null,"\u4f20\u7edf\u8bed\u8a00\u51e0\u4e4e\u90fd\u662f\u4e3a\u4e86\u9762\u5411\u5bf9\u8c61\u800c\u751f\u7684\uff0c\u6240\u4ee5\u5305\u542b\u5f88\u591a\u4e3a\u652f\u6301\u9762\u5411\u5bf9\u8c61\u7684\u529f\u80fd\uff0c\u5982\u679c\u6570\u636e\u9a71\u52a8\u662f\u9700\u8981\u7684\u6838\u5fc3\uff0c\u662f\u4e0d\u662f\u5e94\u8be5\u6709\u4e00\u79cd\u65b0\u7684\u8bed\u8a00\uff0c\u76ee\u524d\u770b\u6765Lua\u66f4\u63a5\u8fd1\u8fd9\u79cd\u8bed\u8a00"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u7528\u9014\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u7528\u4e8e\u68c0\u67e5ECS\u7684\u7ed3\u6784\uff0c\u4e0d\u5408\u6cd5\u7684\u7c7b\u7ed3\u6784\u4e0d\u80fd\u88ab\u52a0\u5165\u5230\u6700\u7ec8\u7a0b\u5e8f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u68c0\u67e5Component \u6570\u636e\u5185\u5b58\u5206\u914d\u5927\u5c0f\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u4e8e\u5c06\u5e95\u5c42\u9762\u5411\u5bf9\u8c61\u7684\u80fd\u529b\u7981\u6b62\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u4fdd\u6301\u5e95\u5c42\u80fd\u529b\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u4f7f\u7528")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7c7b\u578b\u68c0\u67e5")),(0,n.kt)("p",null,"TypeScript\u6709\u5f88\u597d\u7684\u7684\u7c7b\u578b\u68c0\u67e5\uff0c\u4f46\u662f\u5f80\u5f80\u5f3a\u7c7b\u578b\u7684\u8bed\u8a00\u4e5f\u6709\u4e00\u5b9a\u7684\u9650\u5236\uff0c\u4f8b\u5982\u4e0d\u5141\u8bb8\u50cflua\u4e00\u6837\uff0c\u5728\u540c\u4e00\u4f5c\u7528\u57df\u5185\u76f8\u540c\u7684\u53d8\u91cf\u540d\u79f0\u6539\u53d8\u7c7b\u578b\uff0c\u53e6\u5916\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u4e00\u822c\u7c7b\u578b\u68c0\u67e5\u8fd9\u79cd\u529f\u80fd\u5728\u8fd0\u884c\u65f6\u4e5f\u662f\u5b58\u5728\u7684\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5bf9\u4e8e\u8fd0\u884c\u65f6\u4e0d\u518d\u5fc5\u987b\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u88ab\u68c0\u67e5\u8fc7\u7684\u6e90\u7801\u6ca1\u6709\u88ab\u4fee\u6539\uff0c\u4e00\u822c\u8bed\u8a00\u4e0d\u4f1a\u628a\u8fd9\u4e2a\u529f\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u53ef\u9009\u9879"),(0,n.kt)("p",null,"\u56e0\u6b64\u6709\u5fc5\u8981\u8bbe\u8ba1\u4e00\u79cd\u7c7b\u578b\u68c0\u67e5\uff0c\u5b83\u53ef\u4ee5\u88ab\u79fb\u9664\uff0c\u4f7f\u5f97\u4ec5\u5728\u7f16\u8f91\u65f6\u53d1\u751f\u4f5c\u7528\uff0c\u800c\u4e00\u65e6\u53d1\u5e03\u4e4b\u540e\uff0c\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u4e0d\u9700\u8981\u8fd9\u4e2a\u7c7b\u578b\u68c0\u67e5\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd8\u662f\u4f1a\u4fdd\u7559\u5168\u90e8\u7684\u6e90\u4ee3\u7801\u4fe1\u606f\u3002\u5e76\u4e14\u81ea\u5b9a\u4e49\u7684\u7c7b\u578b\u68c0\u67e5\u53ef\u4ee5\u5bb9\u8bb8\u66f4\u5c11\u7684\u9650\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u600e\u6837\u4e3aLua\u6dfb\u52a0\u65b0\u7684\u8bed\u6cd5")),(0,n.kt)("p",null,"\u53c2\u8003TypeScript\u76f8\u5bf9\u4e8eJavaScript \u6dfb\u52a0\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"Unity DOTS\u4e3a\u4ec0\u4e48\u6ca1\u6709\u9ed8\u8ba4\u628aSystem\u4e2d\u7684\u5e76\u884c\u6027\u6307\u5b9a\u53bb\u6389\uff0c\u662f\u56e0\u4e3a\u4ed6\u5e0c\u671b\u517c\u5bb9\u4f20\u7edf\u7684Component\u811a\u672c\uff0c\u800c\u6309\u7167\u4f20\u7edf\u7684\u5199\u6cd5\uff0c\u6ca1\u6cd5\u53bb\u63a7\u5236\u884c\u4e3a\uff0c\u6240\u4ee5\u53ea\u80fd\u5f00\u53d1\u8005\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5426\u5219\u5c31\u9700\u8981\u50cfRoblox\u4e00\u6837\uff0c\u9700\u8981\u7528\u6237\u81ea\u5df1\u5c06\u811a\u672c\u6302\u5728entity\u4e0a\uff0c\u8fd9\u5c31\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u907f\u514d\u8ba9\u5f00\u53d1\u8005\u624b\u52a8\u5c06Component\u4e0eSystem\u4e4b\u95f4\u8fdb\u884c\u5173\u8054"),(0,n.kt)("p",null,"Minecraft\u901a\u8fc7\u76f4\u63a5\u5728\u5c5e\u6027\u4e2d\u8fdb\u884c\u7f16\u5199MOLANG\u4ee3\u7801\u6765\u907f\u514d\u8be5\u95ee\u9898"),(0,n.kt)("p",null,"\u4f8b\u5982\u5f00\u53d1\u8005\u770b\u5230\u7684\u6587\u4ef6\u6216\u8005\u5bf9\u8c61\u53ea\u6709Component\uff0c\u8fd9\u6837\u8feb\u4f7f\u5f00\u53d1\u8005\u5bf9\u6570\u636e\u8fdb\u884c\u62bd\u8c61\uff1b"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\uff0c\u6211\u4eec\u9996\u5148\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u8054\u4e00\u4e2aComponent\u548c\u4e00\u4e2aSystem\uff0c\u4ed6\u4eec\u5e94\u8be5\u81ea\u52a8\u5173\u8054\uff0c\u4f8b\u5982\u901a\u8fc7Component\u6765\u6253\u5f00\u5bf9\u5e94\u7684System\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91"),(0,n.kt)("p",null,"Component\u9664\u4e86\u81ea\u8eab\u7684\u903b\u8f91\u5c5e\u6027\uff0c\u53e6\u5916\u4e00\u4e9b\u5c5e\u6027\u7528\u6765\u63a7\u5236\u7cfb\u7edf\u7ed3\u6784\uff0c\u4f8b\u5982System\u6267\u884c\u7684\u987a\u5e8f\u7b49\uff0c\u53ef\u4ee5\u5728Component\u4e2d\u660e\u786e\u533a\u5206\u4e24\u79cd\u6570\u636e\uff0c\u6216\u8005\u8fd9\u4e9b\u56fa\u5b9a\u7ed3\u6784\u7684\u6570\u636e\u5c31\u4ee5\u4e00\u4e2aComponent\u672c\u8eab\u7684Property\u5f62\u5f0f\u663e\u793a\uff0c\u907f\u514d\u5f00\u53d1\u8005\u5199\u9519"),(0,n.kt)("p",null,"\u4f46System\u53ef\u80fd\u9700\u8981\u591a\u4e2aComponent\u7684\u6570\u636e\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u4e00\u4e2aSystem\u5fc5\u987b\u5bf9\u5e94\u4e00\u4e2a\u4e3bComponent\uff08\u5373\u4f7f\u8fd9\u4e2aComponent\u53ef\u80fd\u53ea\u662f\u4e00\u4e2a\u540d\u5b57\uff0c\u800c\u5e76\u6ca1\u6709\u4efb\u4f55\u6570\u636e\uff0c\u662f\u6709\u8fd9\u79cd\u60c5\u51b5\u7684\uff0c\u5c31\u662f\u67d0\u4e9b\u903b\u8f91\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff0c\u4ed6\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5bf9\u591a\u79cd\u903b\u8f91\u8fdb\u884c\u8ba1\u7b97\u7684\u4e00\u4e2a\u7ec4\u5408\u903b\u8f91\uff0c\u4f46\u662f\u8fd9\u79cd\u5e94\u8be5\u5f88\u5c11\u624d\u5bf9\uff0c\u6bd5\u7adf\u5927\u90e8\u5206System\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u81ea\u5df1\uff0c\u5176\u4ed6\u7684\u662f\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff09\uff0c\u8fd9\u6837\u4ecd\u7136\u53ef\u4ee5\u5c06System\u9690\u85cf\u5728Component\u4e2d\uff0c\u4f46\u662fSystem\u81ea\u8eab\u80fd\u591f\u6307\u5b9a\u5f15\u7528\u7684\u5176\u4ed6Component\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff0c\u4e5f\u5373\u662f\u5728\u5b9a\u4e49ArchType\uff0c\u53ef\u4ee5\u5728System\u7684\u9876\u90e8\u4f7f\u7528\u7c7b\u4f3c\u3002"),(0,n.kt)("p",null,"XXXComponent a;"),(0,n.kt)("p",null,"BBBComponent b; "),(0,n.kt)("p",null,"\u7136\u540e\u5728\u6b63\u6587\u4e2d\u5c31\u53ef\u4ee5\u5f15\u7528\u8fd9\u4e9b\u5bf9\u8c61\uff0c\u89e3\u91ca\u5668\u4f1a\u81ea\u52a8\u5c06\u8be5\u53d8\u91cf\u4eceEntity\u4e2d\u8fdb\u884c\u67e5\u8be2\uff0c\u5e76\u4e14\u68c0\u67e5\u5982\u679cEntity\u4e0d\u5305\u542b\u8be5Component\u7684\u65f6\u5019\u8fdb\u884c\u81ea\u52a8\u6dfb\u52a0\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u68c0\u67e5\u5197\u4f59\uff0c\u5373\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u4f7f\u7528\u5219\u4e0d\u9700\u8981\u6dfb\u52a0"),(0,n.kt)("p",null,"\u4f46\u662fComponent\u7684\u7248\u672c\u53f7\u5728\u54ea\u91cc\u8bbe\u7f6e\uff0c\u4f7f\u7528\u660e\u660e\u7a7a\u95f4\u52a0\u7248\u672c\u53f7\uff1f"),(0,n.kt)("p",null,"BBBBComponent(reality:name,1.2.3)"),(0,n.kt)("p",null,"\u600e\u4e48\u9ed8\u8ba4\u6307\u5b9a\uff1f"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u80af\u5b9a\u662f\u5148\u4e0b\u8f7d\u4e86\u4e00\u4e2a\u5305\u542bComponent\u7684\u5305\u518d\u8fdb\u884c\u7f16\u7a0b\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u80fd\u6709\u51b2\u7a81\uff0c\u6240\u4ee5\u6700\u597d\u662f\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u800c\u4e0d\u662f\u81ea\u52a8\u5206\u914d\uff0c\u56e0\u4e3a\u603b\u6709\u4e00\u4e2a\u5730\u65b9\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u4f7f\u7528\u5355\u72ec\u7684\u914d\u7f6e\u6587\u4ef6\u770b\u8d77\u6765\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python\u5d4c\u5165 (Embed in Python)"),"\u3002Python\u6781\u5176\u6613\u4e8e\u5b66\u4e60\u5e76\u4e14\u88ab\u5e7f\u6cdb\u91c7\u7528\u3002Taichi\u7684\u524d\u7aef\u8bed\u6cd5\u662fPython\u7684\u5b50\u96c6\uff0c\u8fd9\u4f7f\u5f97\u4efb\u4f55\u4e00\u4e2aPython\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u8f7b\u6613\u5730\u5b66\u4e60\u3001\u4f7f\u7528Taichi\u3002\u6211\u4eec\u4f7f\u7528Python AST\u7075\u6d3b\u7684\u81ea\u7701 (inspection) \u673a\u5236\u6765\u628aPython\u7684AST\u8f6c\u5316\u4e3aTaichi\u7684AST\uff0c\u968f\u540e\u8fdb\u5165\u6211\u4eec\u81ea\u5df1\u7684\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7cfb\u7edf\u3002\u5c06Taichi\u7684\u524d\u7aef\u5d4c\u5165\u8fdbPython\u6709\u5982\u4e0b\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u8fd0\u884c\u3002\u5d4c\u5165\u5728\u89e3\u91ca\u6027\u7684Python\u8bed\u8a00\u800c\u4e0d\u662f\u7f16\u8bd1\u6027\u7684\u8bed\u8a00\u4e2d\uff0c\u5927\u5927\u65b9\u4fbf\u4e86Taichi\u7a0b\u5e8f\u7684\u8fd0\u884c\uff0c\u56e0\u4e3a\u6bcd\u4f53\u8bed\u8a00\u7684\u9884\u5148\u7f16\u8bd1 (ahead-of-time compilation) \u4e0d\u518d\u9700\u8981\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u91cd\u7528\u5df2\u6709\u7684Python\u57fa\u7840\u8bbe\u65bd\u5e76\u4e0e\u5176\u4ea4\u4e92\uff0c\u5305\u62ecIDE (PyCharm\u7b49)\u3001\u5305\u7ba1\u7406\u5668 (pip)\u3001\u5df2\u6709\u7684Python\u5305\uff08\u5982matplotlib\u3001numpy\u3001torch\u7b49\uff09\u3002")),(0,n.kt)("p",null,"\u5373\u65f6 (Just-in-time, JIT) \u7f16\u8bd1\u3002JIT\u4e0d\u4f46\u63d0\u4f9b\u4e86\u6781\u5f3a\u7684\u7f16\u7a0b\u7075\u6d3b\u6027\uff0c\u8fd8\u5ef6\u8fdf\u4e86\u201d\u7f16\u8bd1\u671f\u5e38\u91cf\u201c\u7684\u9700\u6c42\u3002\u6bd4\u5982\uff0c\u5728\u7269\u7406\u6a21\u62df\u5668\u4e2d\uff0c\u65f6\u95f4\u6b65\u957f \u2206t \u901a\u5e38\u88ab\u5b9e\u73b0\u6210\u8fd0\u884c\u65f6\u53d8\u91cf\uff0c\u800c\u4f7f\u7528JIT\u7684\u65f6\u5019\u5219\u53ef\u4ee5\u88ab\u5904\u7406\u6210\u7f16\u8bd1\u671f\u5e38\u91cf\u3002\u8fd9\u5141\u8bb8\u7f16\u8bd1\u5668\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\uff0c\u5982\u5e38\u91cf\u6298\u53e0 (constant folding)\u3002\u540c\u65f6\uff0cTaichi\u652f\u6301\u6a21\u677f\u5143\u7f16\u7a0b\uff0c\u4f34\u968f\u7740JIT\u7684\u61d2\u60f0\u7f16\u8bd1\u6280\u672f\u5927\u91cf\u8282\u7701\u4e86\u4e0d\u5fc5\u8981\u7684\u7f16\u8bd1\u65f6\u95f4\u3002\u53e6\u5916\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u8fd0\u884cPython\u7684\u73af\u5883\uff0c\u5982\u79fb\u52a8\u7aef\u8bbe\u5907\uff0c\u6211\u4eec\u4e5f\u63d0\u4f9b\u63d0\u524d\u7f16\u8bd1 (Ahead of time, AOT) \u76f8\u5173\u8bbe\u65bd"),(0,n.kt)("p",null,"\u5bf9\u5927\u4f17\u7528\u6237\u3001\u6216\u8005\u504f\u7f8e\u672f\u3001\u827a\u672f\u7c7b\u7528\u6237\uff0c\u6700\u597d\u7684\u811a\u672c\u8bed\u8a00\u662f\u4ec0\u4e48\uff1f\u56fe\u5f62\u5316\u7684\u5417\uff1f\u4ed6\u5e94\u8be5\u5177\u6709\u4e24\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e00\u822c\u7528\u6237\u53cb\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408\u6570\u636e\u9a71\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408DSL\u7f16\u8bd1\u5904\u7406")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff1a")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u662f\u9762\u5411\u4e8b\u4ef6\u7f16\u7a0b\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u5199\u7684\u6240\u6709\u903b\u8f91\u51e0\u4e4e\u90fd\u662f\u5728\u6bcf\u4e00\u4e2aframe\u7684\u67d0\u4e2a\u4e8b\u4ef6\u4e2d\u53d1\u751f\u7684\u4e8b\u60c5\uff0c\u4f8b\u5982\u5728Unreal\u7684\u84dd\u56fe\u4e2d\uff0c\u5b83\u7684\u8d77\u70b9\u4e5f\u662f\u9488\u5bf9\u67d0\u4e2a\u4e8b\u4ef6\uff0c\u8fd9\u6709\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u7684\u7c92\u5ea6\uff0c\u6e38\u620f\u903b\u8f91\u4e2d\uff0c\u51e0\u4e4e\u4e3b\u8981\u903b\u8f91\u90fd\u662f\u4e8b\u4ef6\u9a71\u52a8\uff0c\u56e0\u6b64\u8be6\u7ec6\u7684\u4e8b\u4ef6\u975e\u5e38\u591a\uff0c\u6240\u4ee5\u5927\u90e8\u5206\u90fd\u662f\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u7531\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u72b6\u6001\u673a\u6765\u8fdb\u884c\u7ba1\u7406\uff0cFramework\u5c42\u53ea\u6709\u51e0\u4e2a\u57fa\u672c\u7684\u6e38\u620f\u751f\u547d\u5468\u671f\u4e8b\u4ef6\uff0c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4e4b\u95f4\u6ca1\u6709\u6807\u51c6\uff0c\u6216\u8005\u975e\u5e38\u590d\u6742\uff0c\u4e0d\u65b9\u4fbf\u7ef4\u62a4")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u4e0e\u903b\u8f91\u4e0d\u4e00\u81f4\uff0c\u50cfUE\u7684\u84dd\u56fe\u662f\u57fa\u4e8e\u4e8b\u4ef6\u7f16\u7a0b\uff0c\u5982\u679c\u6211\u4eec\u8981\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\u7ed9\u666e\u901a\u7528\u6237\uff0c\u8fd9\u79cd\u6ca1\u6709\u6807\u51c6\u7684\u4e8b\u4ef6\u5b9a\u4e49\u5e76\u4e0d\u9002\u5408\u8ba9\u7528\u53bb\u53bb\u5b66\u4e60\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u901a\u5e38\u4e5f\u6ca1\u6709\u5fc5\u7136\u7684\u903b\u8f91\u8054\u7cfb\uff0c\u4e0d\u5bb9\u6613\u7406\u89e3\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u53ef\u80fd\u5bf9\u5e94\u591a\u4e2a\u4e8b\u4ef6\uff0c\u663e\u7136\u7528\u6237\u9700\u8981\u4e86\u89e3\u7684\u662f\u903b\u8f91\uff0c\u800c\u975e\u4e8b\u4ef6")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u6240\u4ee5\u5e73\u53f0\u5927\u90e8\u5206\u90fd\u5728\u8bbe\u8ba1\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u4e5f\u4fbf\u4e8e\u7406\u89e3\uff0c\u540c\u65f6\u5b83\u4ee3\u8868\u7684\u4e0d\u662f\u6700\u5c0f\u903b\u8f91\uff0c\u800c\u662f\u903b\u8f91\u6a21\u5757\uff0c\u6240\u4ee5\u4ed6\u5c06\u903b\u8f91\u5185\u90e8\u7684\u5b9e\u73b0\u7ec6\u8282\uff08\u4f17\u591a\u7684\u788e\u7247\u4e8b\u4ef6\uff09\u8fdb\u884c\u9690\u85cf")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4e5f\u4ee3\u8868\u63a5\u53e3\uff0c\u6570\u636e\u7684\u6807\u51c6\u6709\u52a9\u4e8e\u6784\u5efa\u7ed3\u6784\u5316\u8868\u8fbe\uff0c\u662f\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ee5\u4e00\u79cd\u66f4\u6e05\u6670\u7684\u65b9\u5f0f\u7ec4\u7ec7"))),(0,n.kt)("p",null,"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5c31\u50cfHoudini \u4e2d\u9762\u5411Node\u7f16\u7a0b\u4e00\u6837\uff0c\u4e00\u6bb5Python \u4ee3\u7801\u662f\u53d7\u9650\u7684\uff0c\u5b83\u7684\u8f93\u5165\u8f93\u51fa\u662fnode \uff0c\u540c\u65f6\u53c8\u53ef\u4ee5\u4f7f\u7528\u5230python \u672c\u8eab\u7684\u4efb\u610f\u8bed\u8a00\u7279\u6027\u548c\u80fd\u529b\uff1b\u4e0e\u6b64\u7c7b\u4f3c\uff0c\u9762\u5411\u6570\u636e\u7f16\u7a0b\u4e5f\u662f\u9488\u5bf9\u4e00\u4e2a\u7279\u5b9a\u7684\u201c\u6570\u636e\u201d\u7f16\u5199\u811a\u672c\uff0c\u7528\u6237\u7f16\u5199\u7684\u662fSystem\uff0c\u4ed6\u7684\u8f93\u5165\u8f93\u51fa\u662f\u6570\u636eComponent "),(0,n.kt)("p",null,"\u4f46\u8ddf\u4f20\u7edf\u7684ECS\u67b6\u6784\u4e0d\u4e00\u6837\u7684\u662f\uff0c\u5b83\u7684Component \u548cSystem\u4e4b\u95f4\u4e0d\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c\u751a\u81f3\u4e0d\u662f\u81ea\u52a8\u6302\u8f7d\u7684\uff0c\u8fd9\u4e2a\u673a\u5236\u975e\u5e38\u91cd\u8981\uff0c\u4e00\u4e2aComponent \u7406\u8bba\u4e0a\u53ef\u4ee5\u88ab\u591a\u4e2aSystem\u6d88\u8d39\uff0c\u5f53\u7136\u901a\u5e38\u4e00\u4e2a\u7279\u5b9a\u7684Entity\u5b9e\u4f8b\u53ea\u6709\u4e00\u5bf9Component \u4e0eSystem\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u7406\u8bba\u4e0a\u5bf9\u4e00\u4e2a\u5b9e\u4f8b\u7684\u4e00\u4e2a\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u64cd\u4f5c\u903b\u8f91\uff0c\u9664\u975e\u591a\u4e2aSystem\u4e4b\u95f4\u903b\u8f91\u4e0d\u4e00\u6837\uff0c\u4ed6\u4eec\u53ef\u80fd\u504f\u91cd\u6570\u636e\u7684\u67d0\u4e00\u90e8\u4efd\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u6570\u636e\u7684\u7c92\u5ea6\u592a\u5927\u4e86\uff0c\u53ef\u4ee5\u518d\u8fdb\u4e00\u6b65\u7ec6\u5206\uff0c\u5f53\u7136\u53ef\u80fd\u6709\u4e00\u4e9b\u7279\u4f8b\u9700\u8981\u7ef4\u6301\u8f83\u5927\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u4f7f\u5f97app\u5305\u91cc\u53ef\u80fd\u5305\u542b\u4e00\u4e2a\u6570\u636e\u5b9a\u4e49\u7684\u591a\u79cd\u903b\u8f91\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u4f7f\u7528\u81ea\u52a8\u6302\u8f7d\uff0c\u800c\u9700\u8981\u4f9d\u8d56\u4e8e\u7248\u672c\u5236\u5b9a\uff0c\u5728\u5f00\u53d1\u6216\u751f\u6210\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5c06\u4e00\u4e2aSystem\u6dfb\u52a0\u81f3\u4e00\u4e2aEntity\uff0c\u4ed6\u5c31\u751f\u6210\u5bf9\u5e94\u7684System\u5f15\u7528\u548c\u7248\u672c\u53f7\uff0c\u52a0\u8f7d\u7684\u65f6\u5019\u662f\u6839\u636e\u8fd9\u4e2a\u8fdb\u884c\u903b\u8f91\u6302\u8f7d\uff0c\u5f53\u7136\u4e00\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u672c\u8eab\u5728\u9876\u5c42\u4e5f\u4f1a\u8bb0\u5f55\u6240\u6709\u5f15\u7528\u7684Component\u548cSystem\uff0c\u8fd9\u6837\u4fbf\u4e8e\u9884\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6bd4\u5982\u5982\u679c\u6570\u636e\u662f\u6d89\u53ca\u52a8\u753b\uff0c\u5219\u6570\u636e\u5305\u542b\u52a8\u753b\u65f6\u95f4\u548c\u5f53\u524dframe number \u7b49\u52a8\u753b\u4fe1\u606f"),(0,n.kt)("p",null,"\u628a\u6570\u636e\u5f53\u4f5c\u4e00\u4e2a\u7c7b\u4f3cHoudini \u91cc\u9762\u7684\u53ef\u89c6\u8282\u70b9\uff0cSystem\u662f\u53e6\u4e00\u79cd\u7c7b\u578b\u7684\u8282\u70b9\uff0c\u62d6\u52a8\u4efb\u610f\u4e00\u4e2a\u8282\u70b9\u5230\u4e00\u4e2aEntity\u4f1a\u81ea\u52a8\u52a0\u8f7d\u53d8\u91cf\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u7ec4\u4ef6\u7248\u672c\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Creation Script")," "),(0,n.kt)("p",null,"\u5b83\u7684\u8bed\u6cd5\u90e8\u5206\u63a5\u8fd1Lua\uff0c\u4f46\u662f\u56e0\u4e3a\u6240\u6709Table\u5168\u90e8\u7531Table Engine\u63a5\u7ba1\uff0c\u811a\u672c\u4e2d\u53ea\u6709\u7d22\u5f15\u548c\u57fa\u672c\u7c7b\u578b\uff0c\u4e0d\u5b58\u5728\u5806\u4e2d\u5206\u914d\u7684\u5bf9\u8c61\uff0c\u6240\u4ee5\u4e0d\u9700\u8981GC"),(0,n.kt)("p",null,"\u811a\u672c\u53ea\u6709\u7b80\u5355\u7684\u8ba1\u7b97\u548c\u51fd\u6570\u5f62\u5f0f\uff0c\u6240\u6709\u64cd\u4f5c\u5bf9\u8c61\u7edf\u4e00\uff0c\u51fd\u6570\u53ea\u6709\u7b80\u5355\u7684\u6570\u503c\u64cd\u4f5c\uff0c\u5bf9\u8c61\u90fd\u7531\u5e95\u5c42\u5206\u914d"),(0,n.kt)("p",null,"\u811a\u672c\u8d1f\u8d23\u51fd\u6570\u5185\u7684\u6808\u4e0a\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5e95\u5c42\u8d1f\u8d23\u5806\u4e0a\u5185\u5b58\u5206\u914d"),(0,n.kt)("p",null,"\u8fd9\u5f97\u76ca\u4e8e\u7edf\u4e00\u7684\u6570\u636e\u7ed3\u6784\u548c\u5185\u5b58\u7ba1\u7406"),(0,n.kt)("h3",{id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868"},"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u7684\u6838\u5fc3\u610f\u4e49\u5728\u4e8e\uff0c\u8ba9\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u4ea4\u4e92\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u662f\u8fd9\u6837\uff0c\u90a3\u4e48\u6211\u4eec\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5c31\u53ea\u80fd\u4f9d\u8d56\u4e8e\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u6bcf\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u53ea\u80fd\u72ec\u7acb\u5de5\u4f5c\u800c\u4e0d\u80fd\u76f8\u4e92\u4ea4\u4e92\uff08\u5728\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u6d41\u7a0b\u4e2d\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u53d8\u91cf\u8d4b\u503c\u548c\u5f15\u7528\u624b\u52a8\u5efa\u7acb\u8d77\u4e86\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff09")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u9690\u542b\u7684\u903b\u8f91\u662f\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u6d89\u53ca\u7684\u53d8\u91cf\u5e94\u8be5\u8db3\u591f\u5c11\uff0c\u5927\u90e8\u5206\u5e94\u8be5\u662f\u5185\u90e8\u72b6\u6001"),"\uff0c\u4f8b\u5982COC\u4e2d\u7684Cannon\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Damage per second: 11\nHitpoints : 650/650\n\nRange : 4-11tiles\nDamage type : Area Splash\nTargets : Ground\nFavorite target : Any\n")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc-cannon",src:l(7865).Z,width:"2532",height:"1170"}),"\u7b26\u53f7\u8868\u4f7f\u6211\u4eec\u66f4\u52a0\u5c0f\u5fc3\u5730\u5b9a\u4e49\u6211\u4eec\u7684\u53d8\u91cf\uff0c\u4f7f\u5f97\u4e0d\u90a3\u4e48\u968f\u610f\uff0c\u7b26\u53f7\u8868\u7684\u5168\u5c40\u901a\u7528\u6027\u5730\u4f4d\u4f7f\u6211\u4eec\u66f4\u597d\u5730\u5730\u62bd\u8c61\u903b\u8f91\uff0c\u786e\u4fdd\u8bbe\u7f6e\u786e\u5b9e\u7684\u53cd\u5e94\u903b\u8f91\u72b6\u6001\u7684\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7b26\u53f7\u8868\u662f\u4e00\u79cd\u5f88\u597d\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u5f88\u5bb9\u6613\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u7684\u5185\u90e8\u4e34\u65f6\u53d8\u91cf\u548c\u5bf9\u5916\u8868\u73b0\u7279\u5f81\u7684\u91cd\u8981\u72b6\u6001\u53d8\u91cf\u533a\u5206\u51fa\u6765\uff0c\u903b\u8f91\u66f4\u597d\u6e05\u6670\u3002\u4f7f\u5f97\u4ee3\u7801\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ed6\u4eba\u9605\u8bfb\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\nnamespace Global{\n iHP //\u8868\u793a\u8840\u91cf\n iHelath //\n iCoin //\n vfPosition\n sLabelName //\u7528\u4e8eUI\u663e\u793a\u540d\u79f0\n}\n")),(0,n.kt)("p",null,"\u5f53\u7136\u7b26\u53f7\u8868\u66f4\u91cd\u8981\u7684\u4ef7\u503c\u662f\uff0c\u5b9e\u73b0\u7ec4\u4ef6\u4e4b\u95f4\u76f8\u4e92\u8c03\u7528\u7684\u9690\u5f0f\u53c2\u6570\u4f20\u9012\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u901a\u5e38\u662f\u6bd4\u8f83\u5c11\u7684\u53d8\u91cf\uff0c\u5728OOP\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u5373\u662f\u4e24\u4e2a\u7c7b\u4e4b\u95f4\u65b9\u6cd5\u8c03\u7528\u7684\u53c2\u6570\uff0c\u5982\u679c\u6211\u4eec\u4e0d\u533a\u5206\u516c\u5171\u548c\u79c1\u6709\u53d8\u91cf\uff0c\u5219\u53ea\u8981\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u6709\u4f9d\u8d56\uff0c\u5c31\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e0a\u6709\u4e9b\u6570\u636e\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u56e0\u6b64\u5b83\u6709\u5229\u4e8e\u63d0\u5347\u6027\u80fd\uff0c\u53ea\u52a0\u8f7d\u6bcf\u4e2a\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8bbe\u7f6eout\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u5bf9\u5e94\u7684\u5c5e\u6027\u6570\u636e\u4f1a\u88ab\u81ea\u52a8\u586b\u5145\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u624b\u52a8\u7684\u53d8\u91cf\u5b9a\u4e49\u3001\u521d\u59cb\u5316\u548c\u53c2\u6570\u7684\u4f20\u9012\uff0c\u8fd9\u662f\u9690\u5f0f\u51fd\u6570\u8c03\u7528\u7684\u6838\u5fc3\u673a\u5236\u3002\u5f53\u7136\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u4fdd\u8bc1\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\u5e94\u8be5\u540c\u65f6\u5177\u6709\u6d88\u8d39\u8005\u548c\u903b\u8f91\u5904\u7406\uff0c\u5426\u5219\u8fd9\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e2a\u901a\u8fc7\u8bbe\u8ba1\u6765\u89c4\u907f\uff0c\u7f16\u8bd1\u5668\u53ef\u4ee5\u534f\u52a9\u63d0\u793a\uff0c\u56e0\u4e3a\u4e00\u4e2a\u6b63\u5e38\u7684\u8bbe\u8ba1\u80af\u5b9a\u662f\u4e24\u8005\u90fd\u6709\u7684\uff1b\u5f53\u7136\u4e5f\u6709\u53ef\u80fd\u4e00\u4e2a\u7ec4\u4ef6\u65e2\u5145\u5f53\u751f\u4ea7\u8005\u4e5f\u5145\u5f53\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u6700\u6838\u5fc3\u7684\u673a\u5236\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u8fd9\u6837\uff0c\u8981\u60f3\u5728\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u5fc5\u987b\u5b9a\u4e49\u4e00\u79cd\u534f\u8bae\uff0c\u8fd9\u79cd\u534f\u8bae\u901a\u5e38\u5c31\u662f\u4f20\u7edf\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u7684\u5f15\u7528\u673a\u5236\uff0c\u56e0\u4e3a\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u8fd0\u884c\u65f6\u53d8\u91cf\u53ef\u4ee5\u8bc6\u522b\uff0c\u8fd9\u5c31\u9700\u8981\u5728B\u4e2d\u5b9a\u4e49\u516c\u5171\u53d8\u91cf\uff0c\u7136\u540eA\u7ec4\u4ef6\u9700\u8981\u5f15\u7528B\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u5f62\u6210\u8026\u5408\uff0c\u4f46\u662f\u4e0d\u5f15\u7528\uff0c\u8bed\u8a00\u672c\u8eab\u7684\u673a\u5236\u6ca1\u6cd5\u4fdd\u8bc1\u54ea\u6015\u662f\u540c\u4e00\u4e2a\u540d\u5b57\u7684\u53d8\u91cf\u6267\u884c\u540c\u4e00\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u901a\u8fc7\u7b26\u53f7\u8868\uff0c\u6574\u4e2a\u4e8b\u60c5\u53d8\u5f97\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u53d8\u91cf\u53ea\u9700\u8981\u5b9a\u4e49\u76f8\u540c\u7684\u540d\u5b57\uff0c\u800c\u4e0d\u9700\u8981\u5f15\u7528\uff0c\u8fd9\u4e2a\u76f8\u540c\u7684\u540d\u5b57\u7531\u7b26\u53f7\u8868\u4fdd\u8bc1\uff0c\u800c\u4e0d\u662f\u5b57\u7b26\u4e32\uff0c\u56e0\u4e3a\u5b57\u7b26\u4e32\u53c8\u8bbe\u8ba1\u5bf9\u5e94\u7684\u89e3\u6790\uff0c\u5e26\u6765\u89e3\u91ca\u8d1f\u62c5\u3002\u800c\u4f20\u7edf\u7f16\u8bd1\u5668\u4e2d\u7684\u7b26\u53f7\u8868\u5929\u751f\u5c31\u662f\u7528\u6765\u5c06\u591a\u4e2a\u540d\u5b57\u76f8\u540c\u7684\u7b26\u53f7\u6307\u5411\u540c\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4e86\u901a\u7528\u8bed\u8a00\u4e2d\u53ea\u80fd\u901a\u8fc7\u5f15\u7528\u6765\u5b9e\u73b0\u53c2\u6570\u4f9d\u8d56\u548c\u4f20\u9012\uff0c\u800c\u8fd9\u79cd\u4f9d\u8d56\u662f\u5bfc\u81f4\u6ca1\u6cd5\u7b80\u5316\u7f16\u7a0b\u751a\u81f3\u65e0\u4ee3\u7801\u7f16\u7a0b\u7684\u6839\u672c\u539f\u56e0\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7b26\u53f7\u8868\u673a\u5236\u4e0d\u9002\u5408\u901a\u7528\u8bed\u8a00\uff0c\u5b83\u662f\u6e38\u620f\u8fd9\u79cdUpdate\u673a\u5236\u76f8\u7ed3\u5408\u624d\u80fd\u53d1\u6325\u4f5c\u7528\uff0c\u56e0\u4e3a\u4e24\u4e2aUpdate\u4e4b\u95f4\u7684\u65f6\u95f4\u5f88\u5c0f\uff0c\u6709\u53ef\u80fd\u901a\u8fc7\u5e27\u4e4b\u95f4\u7684\u53d8\u91cf\u5171\u4eab\u6765\u5b9e\u73b0\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u3002\u5426\u5219\u8fd9\u79cd\u673a\u5236\u5c31\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cd\u673a\u5236\u5fc5\u987b\u914d\u5408\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u5de5\u4f5c\uff0c\u6bd4\u5982\u5355\u7eaf\u96c6\u6210Lua\u6216\u8005C#\u662f\u4e0d\u591f\u7684\u3002"),(0,n.kt)("h4",{id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868"},"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u4e2d\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u52a8\u6001\u7684\uff0c\u4ee5\u63d0\u5347\u89e3\u91ca\u7684\u6027\u80fd\u3002\u56e0\u4e3a\u7b26\u53f7\u53ef\u80fd\u4f1a\u975e\u5e38\u591a\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u5728\u521b\u5efa\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6839\u636e\u9009\u62e9\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6240\u6709\u7528\u5230\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u52a8\u6001\u751f\u6210\u4e00\u4e2a\u7b26\u53f7\u8868\uff0c\u8fd9\u53ef\u4ee5\u662f\u4e91\u7aef\u7684\u4e00\u4e2a\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u4fee\u6539\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u91cd\u65b0\u751f\u6210\u65b0\u7684\u7b26\u53f7\u8868\u3002"),(0,n.kt)("h4",{id:"2212-\u7b26\u53f7\u8868"},"2.2.1.2 \u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u6240\u6709\u4ea4\u4e92\u90fd\u6765\u6e90\u4e8e\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u57fa\u672c\u4e0a\u5c31\u662f\u4e3a\u4e86\u4ea4\u4e92\u800c\u751f"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f15\u7528\u5c31\u662f\u4e3a\u4e86\u907f\u514d\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u76f4\u63a5\u5f15\u7528\u5f15\u5165\u4e86\u4ee3\u7801\u7f16\u7a0b\u601d\u60f3\uff0c\u9650\u5236\u4e86\u7ec4\u5408\u7684\u80fd\u529b\uff0c\u9664\u975e\u7ec4\u4ef6\u4e4b\u95f4\u5b8c\u5168\u72ec\u7acb\u65e0\u4ea4\u4e92\uff0c\u53ea\u8981\u4ea4\u4e92\u901a\u8fc7\u76f4\u63a5\u5f15\u7528\u5c31\u8026\u5408\u4e86\u7c7b\u578b\uff0c\u7b26\u53f7\u8868\u8fd9\u662f\u5b9e\u73b0\u7c7b\u578b\u89e3\u8026\u7684\u5173\u952e"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u9700\u8981\u662f\u516c\u5171\u8d44\u6e90\u7684\u5f62\u5f0f\u7ba1\u7406\uff0c\u7528\u6237\u53ef\u4ee5\u4e0b\u8f7d\u5f88\u591a\u5f00\u53d1\u8005\u5b9a\u4e49\u548c\u4e0a\u4f20\u7684\u7b26\u53f7\u8868\uff0c\u8fd9\u4e9b\u7b26\u53f7\u8868\u7531\u5f00\u53d1\u8005\u4e0a\u4f20\uff0c\u6bd4\u8f83\u6709\u540d\u7684\u7b26\u53f7\u8868\u53ef\u80fd\u4f1a\u5f97\u5230\u5f88\u591a\u5176\u4ed6\u5f00\u53d1\u8005\u7684\u652f\u6301\u548c\u517c\u5bb9\uff0c\u4ece\u800c\u5b9e\u73b0\u8de8\u5f00\u53d1\u8005\u4e4b\u95f4\u7684\u534f\u4f5c"),(0,n.kt)("p",null,"\u591a\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u4e5f\u53ef\u80fd\u6709\u91cd\u590d\uff0c\u9700\u8981\u7edf\u4e00\u7684\u673a\u5236\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f3a\u5316\u5168\u5c40\u8868\uff0c\u628a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u53d1\u5c55\u4e3a\u5168\u5c40\u8868"),(0,n.kt)("li",{parentName:"ul"},"\u5168\u5c40\u8868\u5206\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u5efa\u7acb\u8868\u4e4b\u95f4\u7684\u6620\u5c04\u548c\u5173\u8054\uff0c\u8fd9\u6bd4\u8f83\u590d\u6742")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u7c7b\u578b\u5f15\u7528\u90fd\u901a\u8fc7\u6570\u636e\u67e5\u627e"),(0,n.kt)("p",null,"\u4f46\u662f\u6570\u636e\u4e0d\u80fd\u5b8c\u5168\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"\u67d0\u79cd\u7a0b\u5ea6\u4e0a\uff0c\u6570\u636e\u7684\u7ec4\u5408\u624d\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"ECS\u7684\u6700\u5927\u95ee\u9898\u53ef\u80fd\u662f\u65e0\u6cd5\u533a\u5206\u7c7b\u578b\uff0c\u53ea\u6709\u5b9a\u4e49\u5b57\u7b26\u4e32\u6216\u8005\u679a\u4e3e\u6570\u503c\uff0ctag\u4e4b\u7c7b\u7684\uff1f\u8fd9\u4e9b\u7c7b\u578b\u7531\u53d8\u91cf\u7684\u503c\u800c\u4e0d\u662f\u7b26\u53f7\u672c\u8eab\u51b3\u5b9a\uff0c\u8fd9\u4e9b\u503c\u53ef\u4ee5\u6709\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u63a7\u5236"),(0,n.kt)("p",null,"\u4f46\u662ftag\u9700\u8981\u662f\u9488\u5bf9\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5b9e\u4f53"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f53\u53ef\u4ee5\u4efb\u610f\u590d\u6742\uff0c\u4ed6\u4e0d\u53ef\u80fd\u5177\u6709\u5355\u4e00\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u7c7b\u578b\u53ef\u80fd\u88ab\u591a\u79cd\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u5185\u5b58\u65e0\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5b9a\u4e49\u591a\u4e2a\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u5305\u542b\u81ea\u5df1\u7684\u6807\u7b7e\uff0c\u6216\u8005\u8de8\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6570\u636e\u5fc5\u987b\u662f\u7ed3\u6784\u4f53\u7b26\u53f7\uff0c\u8fd9\u6837\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u5305\u542b\u4e86\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u5c5e\u6027\u91cd\u590d\u7684\u7ed3\u6784\u4f53\uff0c\u4f46\u8fd9\u6ca1\u5173\u7cfb\uff0c\u672c\u8eab\u6570\u636e\u5c31\u662f\u6709\u4e0d\u540c\u610f\u4e49\u7684\uff0c\u5373\u4f7f\u6570\u636e\u7ed3\u6784\u5dee\u4e0d\u591a"),(0,n.kt)("p",null,"\u8003\u8651\u53ea\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u602a\u7269\u7684\u8840\u91cf\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u7c7b\u578b\u6807\u5fd7\u5e94\u8be5\u662f\u8ddfHP\u5173\u8054\u5728\u4e00\u8d77\uff0c\u8fd8\u662f\u8ddf\u602a\u7269\u5b9e\u4f53\u5462\uff1f"),(0,n.kt)("p",null,"\u9700\u8981\u4e00\u4e2a\u4e07\u80fd\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u4e00\u4e2a\uff0c\u4f46\u662f\u540d\u5b57\u76f8\u540c\uff0c\u7f16\u8bd1\u5668\u4fdd\u8bc1\u91cd\u590d\u95ee\u9898"),(0,n.kt)("p",null,"\u539f\u5b50\u201c\u6570\u636e\u201d"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u6216\u8005\u6570\u636e\u5217\u8868\u5e94\u8be5\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u4e2a\u6570\u636e\u7684\u7ec4\u5408\u5e94\u8be5\u5145\u5f53\u7c7b\u578b\uff0c\u8868\u793a\u4e00\u7c7b\u529f\u80fd\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u6bd4\u5982HP\u548cHealth \u901a\u5e38\u662f\u7ec4\u5408\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u5355\u72ec\u4f7f\u7528HP\uff0c\u5982\u679c\u6709\u591a\u79cd\u7c7b\u578b\u90fd\u9700\u8981\u4f7f\u7528HP\uff0c\u8fd9\u5c31\u9700\u8981\u5b9a\u4e49\u4e00\u4e2a\u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6ca1\u95ee\u9898\uff0c\u7b26\u53f7\u8868\u7684\u610f\u4e49\u5e76\u4e0d\u662f\u5168\u90e8\u6253\u6563\u6210\u72ec\u7acb\u7684\u7b26\u53f7\uff0c\u800c\u662f\u4e3a\u4e86\u907f\u514d\u7c7b\u578b\u5f15\u7528\uff0c\u4f46\u6709\u4e00\u4e0b\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u53ef\u4ee5\u4e3a\u540c\u4e00\u5b9e\u4f53\u6dfb\u52a0\u591a\u4e2aHP\uff0c\u8fd9\u9700\u8981\u5f00\u53d1\u8005\u7528\u6237\u6765\u907f\u514d")),(0,n.kt)("p",null,"\u6240\u4ee5\u7c7b\u578b\u770b\u8d77\u6765\u66f4\u591a\u5e94\u8be5\u662f\u7531\u7ec4\u4ef6\u7684\u6570\u636e\u5408\u4f5c\u9690\u5f0f\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u8db3\u591f\u677e\u6563\uff0c\u8fd9\u6837\u6765\u4fdd\u8bc1\u6700\u5927\u7684\u7075\u6d3b\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5b9a\u4e49\u7684TAG\u53d8\u91cf\u4e0d\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u4f46\u662f\u548c\u7b26\u53f7\u8868\u7c7b\u4f3c\u7684\u5b9a\u4e49\uff0c\u7f16\u8bd1\u5668\u7279\u6b8a\u5904\u7406"),(0,n.kt)("p",null,"\u6216\u8005TAG\u6570\u7ec4\u7ec4\u4ef6\u672c\u8eab\uff0c\u662f\u4e00\u4e2a\u7528\u6765\u53d6\u4ee3\u5f15\u7528\u7ec4\u4ef6\u7c7b\u578b\u540d\u79f0\u672c\u8eab\u7684\u4e00\u4e2a\u6807\u5fd7"),(0,n.kt)("h4",{id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"},"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u6982\u5ff5\u4e0a\uff0c\u7b26\u53f7\u8868\u8868\u793a\u7684\u662f\u4e00\u4e2a\u53d8\u91cf\u5c5e\u6027\uff0c\u6216\u8005\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u5b83\u7684\u76ee\u7684\u770b\u8d77\u6765\u5c31\u662f\u4e3a\u89e3\u8026\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u5f15\u7528\u670d\u52a1\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4ece\u7cfb\u7edf\u7684\u9700\u6c42\u4e0a\u770b\uff0c\u4e00\u4e2a\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u5305\u542b\u4e00\u4e2a\u5b8c\u6574\u7684\u5bf9\u67d0\u4e00\u4e9b\u4e8b\u60c5\u6216\u67d0\u4e00\u7c7b\u903b\u8f91\u7684\u4e00\u4e2a\u5b8c\u6574\u6570\u636e\u7ed3\u6784\uff0c\u56e0\u6b64\u5b83\u5b9a\u4e49\u7684\u662f\u4e00\u4e2a\u6807\u51c6\u3002\u53c2\u89c12.7\u8282\u3002"),(0,n.kt)("h4",{id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027"},"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u540d\u79f0\uff1a\u53ef\u4ee5\u505a\u4e00\u4e2a\u6620\u5c04\uff0c\u7f16\u8bd1\u5668\u76f4\u63a5\u5904\u7406\uff0c\u751a\u81f3\u7ec4\u4ef6\u53ef\u4ee5\u4e00\u952e\u5347\u7ea7\uff0c\u4ee3\u7801\u66ff\u6362\u6700\u65b0\u540d\u5b57"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7\uff1a\u5982\u679c\u53d1\u73b0\u7f3a\u5931\u76f8\u5173\u7b26\u53f7\uff0c\u76f8\u5173\u7684\u7ec4\u4ef6\u4e0d\u518d\u88ab\u89e3\u91ca/\u7f16\u8bd1\u4ec5\u7a0b\u5e8f\uff0c\u5e76\u63d0\u793a\u7528\u6237\u7ec4\u4ef6\u8fc7\u671f\uff0c\u9700\u8981\u66f4\u65b0\uff1b\u8fd9\u90e8\u5206\u901a\u77e5\u901a\u8fc7Reality World\u8fdb\u884c\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7\uff1a\u4f1a\u901a\u77e5\u5f00\u53d1\u8005\uff0c\u5efa\u8bae\u5f00\u53d1\u8005\u652f\u6301")),(0,n.kt)("h4",{id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf"},"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7ec4\u4ef6\u5e76\u4e0d\u771f\u6b63\u7684\u5b9a\u4e49\u53d8\u91cf\uff0c\u4f8b\u5982\u5b83\u53ea\u80fd\u9009\u62e9\u53d8\u91cf\uff0c\u4f46\u662f\u4e0d\u80fd\u51b3\u5b9a\u53d8\u91cf\u7684\u7c7b\u578b\uff1b\u6b64\u5916\uff0c\u5b83\u5b58\u5728\u7740\u91cd\u590d\u5b9a\u4e49\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u59822.7.16.5\u8282\u63cf\u8ff0\u7684\u91cd\u590d\u5b9a\u4e49\u53d8\u91cf\u7684\u95ee\u9898\uff0c\u7ec4\u4ef6\u4e2d\u7684\u53d8\u91cf\u5b9a\u4e49\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u3002\u6574\u4e2a\u53d8\u91cf\u5b9a\u4e49\u548c\u4f7f\u7528\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u552f\u4e00\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf\uff0c\u4f46\u5176\u5b9e\u5b83\u5e76\u6ca1\u6709\u5206\u914d\u5185\u5b58\uff0c\u4f46\u5b83\u51b3\u5b9a\u4e86\u53d8\u91cf\u7684\u7c7b\u578b\u548c\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u4e2d\u5f15\u7528\u7b26\u53f7\u8868\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u4f46\u4e5f\u4e0d\u662f\u7b80\u5355\u7684\u5f15\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u4e00\u4e2a\u5bf9\u8c61\u7b2c\u4e00\u6b21\u9047\u5230\u67d0\u4e2a\u7b26\u53f7\u65f6\uff0c\u5b83\u5728\u8be5\u5bf9\u8c61\u4e0a\u6dfb\u52a0\u8be5\u53d8\u91cf\uff0c\u5e76\u5206\u914d\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u540e\u7eed\u7684\u7ec4\u4ef6\u5f15\u7528\u76f8\u540c\u7684\u53d8\u91cf\u65f6\uff0c\u5b83\u59cb\u7ec8\u5c06\u5730\u5740\u6307\u5411\u524d\u9762\u5206\u914d\u597d\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u89c12.7.16.5\u8282\u7684\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h4",{id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"},"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b26\u53f7\u5e94\u8be5\u5b9a\u4e49\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u6570\u636e\u96c6\u5408\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Position {\n float x;\n float y;\n float z;\n}\n")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u4ee5\u4e0a\u7684\u5c5e\u6027\u603b\u662f\u540c\u65f6\u51fa\u73b0\uff0c\u90a3\u4e48\u5c06\u5b83\u4eec\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\u3002"),(0,n.kt)("p",null,"\u5c06\u591a\u4e2a\u76f8\u5173\u7684\u7b26\u53f7\u5b9a\u4e49\u5728\u4e00\u8d77\uff0c\u4f1a\u8feb\u4f7f\u8fd9\u4e9b\u53d8\u91cf\u603b\u662f\u5b58\u50a8\u5728\u540c\u4e00\u4e2a\u5bf9\u8c61\u4e0a\uff0c\u907f\u514d\u4e86\u51fd\u6570\u56e0\u4e3a\u591a\u4e2a\u53c2\u6570\u5206\u5e03\u5728\u591a\u4e2a\u5bf9\u8c61\u4e0a\u5bfc\u81f4\u7684\u591a\u5c42\u5d4c\u5957\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"},"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"),(0,n.kt)("p",null,"\u9664\u4e86\u90a3\u4e9b\u5904\u4e8e\u5d4c\u5957\u51fd\u6570\u6700\u5e95\u5c42\u7684\u51fd\u6570\u6240\u6d88\u8d39\u7684\u5c5e\u6027\uff0c\u8fd9\u7c7b\u5c5e\u6027\u901a\u5e38\u4e0d\u4f1a\u89e6\u53d1\u5176\u4ed6\u7684\u51fd\u6570\u6267\u884c\u8ba1\u7b97\uff08\u663e\u793a\u3001\u5b58\u50a8\u4e4b\u7c7b\u7684\u51fd\u6570\u9664\u5916\uff09\uff0c\u5927\u90e8\u5206\u5c5e\u6027\u9664\u4e86\u6570\u503c\u672c\u8eab\uff0c\u8fd8\u5177\u6709\u901a\u77e5\u5c5e\u6027\uff1a\u5373\u544a\u77e5\u5176\u4ed6\u76f8\u5173\u7ec4\u4ef6\uff0c\u6211\u7684\u6570\u503c\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u76f8\u5173\u7ec4\u4ef6\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u503c\u6ca1\u6709\u53d1\u751f\u4efb\u4f55\u53d8\u5316\uff0c\u6839\u636e\u7ec4\u4ef6\u4f5c\u4e3a\u7eaf\u51fd\u6570\u7684\u673a\u5236\uff0c\u540e\u7eed\u76f8\u5173\u7ec4\u4ef6\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\uff0c\u9664\u4e86\u58f0\u660e.UseDt\u7684\u52a8\u753b\u7c7b\u7ec4\u4ef6\u9664\u5916\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u5982\u679c\u52a8\u753b\u7c7b\u7ec4\u4ef6\u4e0d\u53d7\u901a\u77e5\u673a\u5236\u7684\u5f71\u54cd\uff0c\u90a3\u4e48\u5b83\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u5916\u5916\u90e8\u5bf9\u8c61\u6765\u6267\u884c\u4e00\u4e2a\u7c7b\u4f3cEnable/Begin\u548cDisable/End\u4e4b\u7c7b\u7684\u64cd\u4f5c\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7Spawn\u6765\u5b9e\u73b0\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7c7b\u4f3c\u83b7\u53d6\u5f15\u7528\u6765\u5b9e\u73b0\u63a7\u5236\uff0c\u540e\u7eed\u9700\u8981\u76f8\u5173\u5206\u6790\u4e00\u4e0b\u3002")),(0,n.kt)("p",null,"\u5982\u679c\u9700\u8981\u901a\u8fc7\u503c\u7684\u662f\u5426\u53d8\u5316\u4f5c\u4e3a\u540e\u7eed\u7ec4\u4ef6\u8ba1\u7b97\u7684\u4f9d\u636e\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5c5e\u6027\u503c\u5b9e\u9645\u4e0a\u627f\u62c5\u4e86\u4e24\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u540e\u7eed\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u7684\u8f93\u5165\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u77e5\u529f\u80fd")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e24\u4e2a\u529f\u80fd\u662f\u6709\u6b67\u4e49\u7684\uff0c\u4f8b\u5982\u5982\u679c\u4e00\u4e2a\u6280\u80fd\u8981\u6c42\u6263\u9664\u7684HP\u662f3\uff0c\u6240\u4ee5\u6574\u4e2a\u503c3\u540c\u65f6\u627f\u62c5\u4e86\u901a\u77e5\u529f\u80fd\u548c\u6263\u9664\u7684\u5177\u4f53\u6570\u503c\u7684\u529f\u80fd\uff0c\u4f46\u662f\u5982\u679c\u4e0b\u4e00\u5e27\u8be5\u6280\u80fd\u7ee7\u7eed\u91ca\u653e\uff0c\u90a3\u4e48\u5c5e\u6027\u503c\u4f9d\u65e7\u4e3a3\uff0c\u4f46\u662f\u6b64\u65f6\u7cfb\u7edf\u4f1a\u8ba4\u4e3a\u8be5\u503c\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u56e0\u6b64\u901a\u77e5\u529f\u80fd\u5931\u6548\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u4e00\u7684\u503c\u4e0d\u80fd\u540c\u65f6\u627f\u8f7d\u4e24\u4e2a\u529f\u80fd\uff0c\u5b83\u4eec\u5206\u522b\u9700\u8981\u81ea\u5df1\u7684\u6570\u503c\u6216\u8005\u6807\u8bb0\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u89e3\u51b3\u601d\u8def\u662f\u5728\u6bcf\u4e00\u5e27\u7684\u672b\u5c3e\uff0c\u628a\u8fd9\u4e9b\u6570\u503c\u6e05\u96f6\u3002\u4f46\u662f\u8fd9\u6837\u505a\uff0c\u5176\u4ed6\u6709\u4e9b\u5c5e\u6027\u4f1a\u53d7\u5f71\u54cd\uff0c\u5c31\u662f\u90a3\u4e9b\u4e0d\u662f\u589e\u91cf\u503c\u7684\u53d8\u91cf\uff0c\u5b83\u4eec\u9700\u8981\u59cb\u7ec8\u5b58\u50a8\u81ea\u5df1\u7684\u503c\uff0c\u5b9e\u9645\u4e0a\u53ea\u6709\u50cf\u6280\u80fd\u8fd9\u79cd\u6263\u9664\u6027\u7684\u589e\u5f3a\u5c5e\u6027\u624d\u53ef\u4ee5\u8fd9\u6837\u505a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u8981\u6c42\u6240\u6709\u589e\u91cf\u578b\u7684\u53d8\u91cf\u59cb\u7ec8\u6267\u884c\uff0c\u8ba9\u5f00\u53d1\u8005\u4fdd\u8bc1\u7ed3\u679c\u662f\u6b63\u786e\u7684\uff0c\u4f8b\u5982\u4e0b\u4e00\u5e27\u5982\u679c\u8be5\u6280\u80fd\u6ca1\u6709\u91ca\u653e\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u628a\u503c\u7f6e\u96f6\u3002\u4f46\u5176\u5b9e\u8fd9\u79cd\u7f6e\u96f6\u7684\u8fc7\u7a0b\u4f1a\u662f\u540e\u7eed\u7684\u7ec4\u4ef6\u8bef\u4ee5\u4e3a\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u6839\u636e\u9ed8\u8ba4\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u95ee\u9898\u5728\u4f20\u7edf\u7684\u5f00\u53d1\u4e2d\u4e0d\u4f1a\u5b58\u5728\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u5927\u591a\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7684\u8c03\u7528\u903b\u8f91\uff0c\u5373\u53d1\u8d77\u6280\u80fd\u7684\u51fd\u6570\u4f1a\u901a\u8fc7\u67d0\u79cd\u5f62\u5f0f\u76f4\u63a5\u80fd\u591f\u89e6\u53d1\u5bf9\u6263\u8840\u51fd\u6570\u7684\u8c03\u7528\uff08\u4f8b\u5982\u901a\u8fc7\u4e00\u4e9bManager\u4e4b\u7c7b\u7684\u51fd\u6570\uff09\uff0c\u56e0\u6b64\u5176\u5b9e\u5b83\u4eec\u4e0d\u4f1a\u5b58\u5728\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\u7684\u589e\u91cf\u503c\uff0c\u56e0\u4e3a\u4e0b\u4e00\u6b21\u6ca1\u6709\u6280\u80fd\u91ca\u653e\u5219\u538b\u6839\u5c31\u4e0d\u4f1a\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u901a\u8fc7\u6d88\u606f\u7684\u673a\u5236\uff0c\u4f20\u7edf\u7684\u6d88\u606f\u673a\u5236\u662f\u5c06\u6d88\u606f\u5b58\u653e\u5230\u4e00\u4e2a\u961f\u5217\u4e2d\uff0c\u7136\u540e\u54cd\u5e94\u8005\u4ece\u6d88\u606f\u5217\u8868\u83b7\u53d6\u6d88\u606f\u5e76\u8fdb\u884c\u5904\u7406\uff0c\u5f53\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u8fd9\u6761\u6d88\u606f\u5c31\u4f1a\u88ab\u5220\u9664\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u5c5e\u6027\u901a\u8fc7\u6309\u4f9d\u8d56\u987a\u5e8f\u6267\u884c\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5c5e\u6027\u5145\u5f53\u4e86\u6d88\u606f\u7684\u529f\u80fd\u3002\u4f46\u662f\u8fd9\u4e2a\u6d88\u606f\u5728\u4e00\u5e27\u7ed3\u675f\u540e\u5e76\u6ca1\u6709\u6e05\u9664\uff0c\u800c\u662f\u8fd9\u4e2a\u503c\u4f1a\u6c38\u4e45\u5b58\u5728\uff0c\u56e0\u6b64\u5e26\u6765\u4e86\u4e0a\u8ff0\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u50cf\u786c\u4ef6\u7684\u8f93\u5165\u4e8b\u4ef6\uff0c\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\u95ee\u9898\uff0c\u4f46\u662f\u901a\u5e38\u7cfb\u7edf\u8f93\u5165\u5e76\u6ca1\u6709\u4f7f\u7528\u6d88\u606f\u7684\u673a\u5236\u4f20\u9012\uff0c\u800c\u662f\u76f4\u63a5\u7f16\u5199update\u51fd\u6570\uff0c\u8fd9\u6837\u76d1\u542c\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e00\u5e27\u7684\u8ba1\u7b97\u7ed3\u679c\u90fd\u4e0d\u4f1a\u8fdb\u5165\u4e0d\u53ef\u9884\u671f\u7684\u5206\u652f\u3002\u4f46\u662f\u56e0\u4e3a\u5904\u7406\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4e0d\u4f1a\u5f88\u591a\uff0c\u6240\u4ee5\u4e0d\u4f1a\u5bfc\u81f4\u592a\u5927\u7684\u95ee\u9898\u3002\u4f46\u662f\u5982\u679c\u7cfb\u7edf\u5927\u91cf\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u903b\u8f91\u4e5f\u5df2\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u5219\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u65b9\u6cd5\u662f\u4f7f\u7528.UseDt(true)\u4f7f\u5176\u50cf\u8f93\u5165\u7ec4\u4ef6\u4e00\u6837\u5e94\u7528\u6267\u884c\u3002\u540e\u7eed\u518d\u8003\u8651\u4f18\u5316\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"2218-\u5b58\u6863\u5c5e\u6027"},"2.2.1.8 \u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1\u4f1a\u6709\u5927\u91cf\u7684\u5c5e\u6027\uff0c\u663e\u7136\u6709\u5f88\u591a\u5c5e\u6027\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u800c\u5e73\u53f0\u4e5f\u65e0\u6cd5\u5224\u65ad\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u4e5f\u65e0\u6cd5\u8ba9\u521b\u4f5c\u7528\u6237\u5728\u521b\u4f5c\u7684\u65f6\u5019\u53bb\u6307\u5b9a\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u5b58\u6863\u7684\u529f\u80fd\u5c5e\u6027\u672c\u8eab\u662f\u5f00\u53d1\u8005\u548c\u6807\u51c6\u5236\u5b9a\u8005\u53ef\u4ee5\u51b3\u5b9a\u7684\u3002\u6240\u4ee5\uff0c\u5b58\u6863\u5c5e\u6027\u5e94\u8be5\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u662f\u5171\u4eab\u7b26\u53f7\u8868\u6216\u79c1\u6709\u7b26\u53f7\u8868\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7b26\u53f7\u662f\u5426\u9700\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u5168\u5c40\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u6709\u4e9b\u4ec5\u662f\u7528\u6765\u5b9e\u73b0\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u4ea4\u6362\u7684\u7b26\u53f7\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u4f8b\u5982\u90a3\u4e9b\u4ec5\u4ec5\u662f\u65e0\u5173\u7d27\u8981\u7684\u901a\u77e5\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b58\u6863\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4f1a\u4fdd\u8bc1\u5f53\u7ec4\u4ef6\u6b63\u5e38\u6267\u884c\u540e\uff0c\u5176\u4fee\u6539\u7684\u7ed3\u679c\u4f1a\u88ab\u5b58\u6863\u3002"),(0,n.kt)("h3",{id:"222-entity"},"2.2.2 Entity"),(0,n.kt)("p",null,"ID + TAG"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5b9e\u4f53\u6709\u4e2a\u9690\u85cfprivate\u53d8\u91cf\uff1aTAG\u548cTARGET\u7528\u6765\u5b9a\u4e49\u7ec4\u4ef6\u672c\u8eab\u7684\u6807\u8bc6\u7b26\uff0c\u4ee5\u53ca\u7528\u4f5c\u67e5\u8be2\u6761\u4ef6\u7684\u6807\u5fd7\u7b26"),(0,n.kt)("p",null,"\u5728Entity\u4e0a\u589e\u52a0TAG\uff0c\u56e0\u6b64\u5145\u5f53\u4e00\u4e2aEntity\u7684\u7c7b\u578b\u533a\u5206\uff0c\u521b\u4f5c\u8005\u53ef\u4ee5\u5728Creation\u4e2d\u521b\u5efa\u4e00\u4e2aLayer\u8868\u5bf9\u5176\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u4ee5\u7edf\u4e00\u547d\u540d\u7b49\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\u7684TARGET\uff0c\u5b83\u6307\u5411Entity\u7684TAG\u5c5e\u6027\uff0c\u867d\u7136System\u5bf9\u4e8e\u4e00\u4e2aCreation\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662fSystem\u672c\u8eab\u53ea\u5305\u542b\u65b9\u6cd5\uff0cSystem\u7684\u72b6\u6001\u6570\u636e\uff08private\u79c1\u6709\u53d8\u91cf\uff09\u662f\u5b58\u50a8\u5728\u6bcf\u4e2aEntity\u5185\u90e8\u7684\uff0c\u5b83\u5177\u6709\u591a\u4e2a\u5b9e\u4f8b\u3002\u56e0\u6b64\u5bf9\u4e8eTARGET\u6765\u8bf4\uff0c\u6bcf\u4e2aEntity\u7684\u503c\u90fd\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64Entity\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u7c7b\u578b\u76ee\u6807Entity\u3002"),(0,n.kt)("h3",{id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"},"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 5\n\nnamespace SomeComponent{\n query Global.HP as hp\n query Global.HP[] as hps\n\n public Global.HP as hp\n \n private fTemp = 100.\n private TARGET = 20\n}\n")),(0,n.kt)("p",null,"\u4e09\u79cd\u7c7b\u578b\u53d8\u91cf\u8bf4\u660e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"private \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u79c1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u8be5\u7ec4\u4ef6\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\u76f4\u63a5\u58f0\u660e\u5b9e\u73b0\uff0c\u56e0\u4e3a\u6ca1\u6709\u4ece\u5168\u5c40\u7b26\u53f7\u8868\u5f15\u7528\u58f0\u660e\uff0c\u6240\u4ee5\u5176\u4ed6\u7ec4\u4ef6\u6ca1\u6709\u53ef\u80fd\u5bf9\u5176\u8fdb\u884c\u8bbf\u95ee\uff1bprivate\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"public \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u516c\u5171\u53d8\u91cf\uff0c\u53ef\u4ee5\u88ab\u5b9e\u4f53\u5185\u8de8\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u4e5f\u53ef\u4ee5\u88ab\u5176\u4ed6\u5b9e\u4f53\u8bbf\u95ee\uff1bpublic\u4e5f\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf\uff1b\u901a\u5e38public\u53d8\u91cf\u7531\u4f7f\u7528\u8be5\u53d8\u91cf\u7684\u7ec4\u4ef6\u5b9a\u4e49\uff0c\u53ef\u4ee5\u591a\u4e2a\u7ec4\u4ef6\u4e2d\u90fd\u91cd\u590d\u5b9a\u4e49\uff0c\u4f1a\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"query\u4e0d\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u53d8\u91cf\uff0c\u5b83\u662f\u6307\u5411\u5916\u90e8\u53d8\u91cf\u7684\u5f15\u7528\uff0c\u5b83\u53ea\u80fd\u8bbf\u95ee\u90a3\u4e9b\u5b9a\u4e49\u4e3apublic\u7684\u5b9e\u4f53")),(0,n.kt)("h4",{id:"2231-\u79c1\u6709\u53d8\u91cf"},"2.2.3.1 \u79c1\u6709\u53d8\u91cf"),(0,n.kt)("p",null,"\u79c1\u6709\u53d8\u91cf\u53ea\u662f\u5b9e\u4f53\u5185\u7ec4\u4ef6\u624d\u53ef\u4ee5\u8bbf\u95ee\u7684\u5c5e\u6027\uff0c\u5b9e\u4f53\u662f\u7528\u6237\u521b\u5efa\u7684\uff0c\u5176\u6240\u6709\u6743\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u540c\u6837\uff0c\u8be5\u5b9e\u4f53\u6240\u6709\u7684\u7ec4\u4ef6\u662f\u7531\u7528\u6237\u9009\u62e9\u7684\uff0c\u6240\u4ee5\u8fd9\u4e2a\u9009\u62e9\u95f4\u63a5\u5305\u542b\u7528\u6237\u5bf9\u8be5\u7ec4\u4ef6\u8bbf\u95ee\u8be5\u5b9e\u4f53\u6570\u636e\u7684\u6743\u9650\u3002"),(0,n.kt)("p",null,"\u9009\u62e9\u7ec4\u4ef6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u662f\u4e00\u79cd\u529f\u80fd\u6784\u5efa\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u4e00\u79cd\u6388\u6743\u884c\u4e3a")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u80fd\u591f\u8bbf\u95ee\u81ea\u5df1\u6240\u5728\u5b9e\u4f53\u7684\u4efb\u4f55\u5c5e\u6027\uff0c\u4e0d\u652f\u6301\u5728\u5b9e\u4f53\u5185\u518d\u5212\u5206\u6743\u9650\uff0c\u90a3\u4e48\u5c06\u4f1a\u589e\u52a0\u590d\u6742\u5ea6\uff0c\u800c\u4e14\u770b\u8d77\u6765\u6ca1\u6709\u90a3\u79cd\u5fc5\u8981\uff0c\u5b9e\u4f53\u8fd9\u4e2a\u7c92\u5ea6\u4f5c\u4e3a\u6743\u9650\u5355\u4f4d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u662f\u8db3\u591f\u7684\uff0c\u5408\u7406\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u7528\u6237\u8bbe\u7f6e\u548c\u7ba1\u7406\u8d77\u6765\u76f8\u5bf9\u6bd4\u8f83\u5bb9\u6613\u7684")),(0,n.kt)("h4",{id:"2232-\u5199\u5165\u6743\u9650"},"2.2.3.2 \u5199\u5165\u6743\u9650"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u6709\u5bf9\u81ea\u8eab\u5b9e\u4f53\u6240\u5728\u7684\u5c5e\u6027\u624d\u5177\u6709\u5199\u7684\u6743\u9650\uff0c\u4e0d\u80fd\u5bf9\u5176\u4ed6\u5b9e\u4f53\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5426\u5219\u6743\u9650\u4e0d\u53ef\u63a7\u5236\uff0c\u56e0\u4e3a\u6743\u9650\u662f\u6309\u7167\u5b9e\u4f53\u4e3a\u5355\u4f4d\u8fdb\u884c\u6784\u9020\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u62c9\u53d6\u6a21\u5f0f\uff0c\u53c2\u89c12.2.11.2\u8282\u3002"),(0,n.kt)("h4",{id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"},"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f53\u7684\u5c5e\u6027\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u51fa\uff0c\u5b83\u603b\u662f\u5bf9\u4e00\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u50cf\u7c7b\u4f3c\u52a8\u753b\u6216\u8005\u4e00\u4e9b\u81ea\u5b9a\u4e49\u8de8\u5e27\u903b\u8f91\u7684\u8fd9\u79cd\u7ec4\u4ef6\uff0c\u4ed6\u53ef\u80fd\u9700\u8981\u5b58\u50a8\u4e00\u4e9b\u8de8\u5e27\u7684\u72b6\u6001\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u901a\u8fc7\u79c1\u6709\u7684\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u4f46\u5b83\u4eec\u8ddf\u5176\u4ed6\u5c5e\u6027\u4e4b\u95f4\u5b58\u5728\u4e00\u4e2a\u4e3b\u8981\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u53d8\u91cf\u4e00\u822c\u53ea\u80fd\u88ab\u4e00\u4e2a\u552f\u4e00\u7684\u7ec4\u4ef6\u611f\u77e5\uff0c\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u4e5f\u4e0d\u9700\u8981\u77e5\u9053\u5b83\u7684\u5b58\u5728")),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u53ea\u8fd9\u6837\uff0c\u5c31\u9020\u6210\u4e00\u79cd\u6f5c\u5728\u7684\u95ee\u9898\uff0c\u8fd9\u4e9b\u53d8\u91cf\u770b\u8d77\u6765\u5145\u5f53\u4e86\u8fd9\u4e9b\u7ec4\u4ef6\u7684\u72b6\u6001\uff1a\u56e0\u4e3a\u8f93\u5165\u6761\u4ef6\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u7834\u574f\u4e86\u7ec4\u4ef6\u5145\u5f53\u7eaf\u51fd\u6570\u7684\u76ee\u6807\uff0c\u4e5f\u4f7f\u5f97\u901a\u8fc7\u8f93\u5165\u662f\u5426\u53d8\u66f4\u6765\u51b3\u5b9a\u662f\u5426\u9700\u8981\u6267\u884c\u7ec4\u4ef6\u8ba1\u7b97\u53d8\u5f97\u56f0\u96be\uff0c\u53c2\u89c12.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u4e00\u79cd\u89e3\u51b3\u65b9\u6848\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u8fd9\u4e9b\u4e2d\u95f4\u53d8\u91cf\u6210\u4e3a\u65f6\u95f4\u7684\u51fd\u6570\uff0c\u5728\u6bcf\u4e00\u6b21\u51fd\u6570\u8ba1\u7b97\u4e2d\uff0c\u7531\u7ec4\u4ef6\u51fd\u6570\u6839\u636edt\u53c2\u6570\u8ba1\u7b97\u800c\u5f97")),(0,n.kt)("p",null,"\u8fd9\u79cd\u53ef\u80fd\u4f1a\u6bcf\u5e27\u91cd\u590d\u8ba1\u7b97\u4e00\u4e9b\u5185\u5bb9\uff0c\u4f46\u662f\u5176\u5b9e\u53ef\u80fd\u95ee\u9898\u4e0d\u5927\uff0c\u56e0\u4e3a\u90a3\u4e9b\u5b58\u50a8\u7684\u4e2d\u95f4\u72b6\u6001\uff0c\u5176\u5b9e\u5927\u90e8\u5206\u662f\u6bcf\u5e27\u90fd\u8981\u4ee3\u5165dt\u8fdb\u884c\u91cd\u65b0\u8ba1\u7b97\u7684\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u53ef\u80fd\u5e26\u6765\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u76f8\u5bf9\u5e26\u6765\u67b6\u6784\u7684\u7b80\u6d01\u6027\uff0c\u662f\u53ef\u53d6\u7684\u3002\u4f8b\u5982\u5728\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u5f53\u4e2d\uff0c\u4e3a\u4e86\u7ef4\u6301\u51fd\u6570\u7684\u7eaf\u51fd\u6570\u7279\u6027\uff0c\u4ee5\u53ca\u53d8\u91cf\u7684\u4e0d\u53ef\u4fee\u6539\u7279\u6027\uff0c\u5176\u5b9e\u4e5f\u505a\u4e86\u5927\u91cf\u590d\u5236\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u76f8\u5bf9\u6027\u80fd\uff0c\u5b83\u4eec\u5e26\u6765\u7684\u67b6\u6784\u4ef7\u503c\u66f4\u5927\u3002\u4f55\u51b5RealityIS\u53ef\u4ee5\u901a\u8fc7\u5206\u5e03\u5f0f\u53ca\u5176\u4ed6\u7279\u6027\u6765\u5f25\u8865\u8fd9\u4e9b\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("h3",{id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"},"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u7a0b\u5e8f\u6267\u884c\u6307\u4ee4\u7684\u8026\u5408\uff0c\u662f\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u6700\u5927\u7684\u9650\u5236\uff0c\u8fd9\u53ef\u80fd\u67092\u79cd\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u8981\u662f\u8fd8\u662f\u57fa\u4e8e\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\uff0c\u5b83\u4e0a\u9762\u6240\u505a\u7684\u62bd\u8c61\uff0c\u66f4\u591a\u662f\u56f4\u7ed5\u7528\u5f00\u53d1\u8005\uff08\u4eba\u7684\uff09\u7684\u89d2\u5ea6\u600e\u4e48\u53bb\u7406\u89e3\u548c\u7ec4\u7ec7\u673a\u5668\u4ee3\u7801\u7684\u7ed3\u6784\uff0c\u800c\u6ca1\u6709\u56f4\u7ed5\u4eba\u7c7b\u7406\u89e3\u4e8b\u7269\u771f\u6b63\u7684\u903b\u8f91\u53bb\u8fdb\u884c\u8c03\u6574\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u90fd\u662f\u56f4\u7ed5\u5355\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\uff0c\u5373\u4f7f\u6709\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u9700\u8981\u4ea4\u4e92\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u5c11\u91cf\u4e14\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\u9700\u6c42\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u6807\u51c6\u7684\u5f62\u5f0f\u89e3\u51b3\uff0c\u4f8b\u5982HTTP\u534f\u8bae\u3002")),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5143\u5b87\u5b99\u65f6\u4ee3\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e9b\u5168\u65b0\u7684\u7f16\u7a0b\u67b6\u6784\uff0c\u6240\u4ee5\u6700\u91cd\u8981\u7684\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6211\u4eec\u9700\u8981\u5728\u786c\u4ef6\u67b6\u6784\u548c\u5e94\u7528\u67b6\u6784\u4e4b\u95f4\uff0c\u5efa\u7acb\u8d77\u4e00\u4e2a\u6570\u636e\u62bd\u8c61\u67b6\u6784\uff0c\u5c06\u4f20\u7edf\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\u9650\u5236\u9690\u85cf\u8d77\u6765\uff0c\u5e76\u4e14\u4e0a\u5c42\u5e94\u7528\u67b6\u6784\u7684\u80fd\u529b\u53ef\u4ee5\u66f4\u5927\u7684\u91ca\u653e"),"\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u7684\u6838\u5fc3\u903b\u8f91\uff0c\u662f\u901a\u8fc7\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u7684\u6539\u9020\uff0c\u5728\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e2a\u65b0\u7684\u8f6c\u6362\u5c42\uff0c\u662f\u80fd\u591f\u5c06\u57fa\u4e8e\u6570\u636e\u62bd\u8c61\u7684\u7a0b\u5e8f\u67b6\u6784\uff0c\u8f6c\u6362\u4e3a\u4f20\u7edf\u57fa\u4e8e\u786c\u4ef6\u67b6\u6784\u7684\u7a0b\u5e8f\u7ed3\u6784\u3002"),(0,n.kt)("h4",{id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"},"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'#version 1.0.0\n#order 1000\n\nnamespace SomeComponent{\n public Global.iHP as iHP = 5\n public Global.vfPosition = (1000.0, 234.5, 400.8)\n public Global.sLabelName = "Super Man"\n \n private fTemp = 500.6 \n \n fn Update(fTime){\n fTemp = fTemp * fTime\n iHP = fTemp\n }\n}\n')),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u53d8\u91cf\u7684\u987a\u5e8f\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u8981\u8fdb\u884c\u6392\u5e8f\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u8fd9\u91cc\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u540d\u4e0e\u5c40\u90e8\u7b80\u5199\u540d\u5b57\u7684\u533a\u522b\uff0c\u5728\u89e3\u91ca\u5668\u4e2d\uff0c\u9700\u8981\u53bb\u9664\u672c\u5730\u53d8\u91cf\u540d\u79f0\uff0c\u4f7f\u7528\u7edf\u4e00\u7684\u5168\u5c40\u540d\u79f0\uff0c\u56e0\u4e3a\u4e0d\u540c\u7ec4\u4ef6\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\uff0c\u53ef\u80fd\u4f7f\u7528\u4e0d\u540c\u7684\u5c40\u90e8\u53d8\u91cf\u7b80\u5199\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9700\u8981\u5904\u7406\u5176\u4ed6\u7269\u4f53\u7684\u7ec4\u4ef6\uff0c\u5b9a\u4e49\u4e00\u4e2a\u6570\u7ec4\u7684\u5f62\u5f0f\uff0c\u89e3\u91ca\u5668\u81ea\u52a8\u67e5\u627e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 1000\n\nnamespace HandleOtherComponent{\n outer Global.iHP[]\n outer Global.vPosition[]\n \n out vPosition as position\n \n fn Upadte{\n for i in iHP{\n if(distance(vPosition[i]-position)<10){\n iHP[i]-=1\n vPosition[i]=(10,10,10)\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7c7b\u578b\u7528\u4e8e\u7531\u4e00\u4e9b\u7279\u5b9a\u5bf9\u8c61\u53d1\u8d77\u7684\u884c\u4e3a\uff0c\u5982\u679c\u662f\u5168\u5c40\u7ec4\u4ef6\uff0c\u5168\u5c40\u7ec4\u4ef6\u6bcf\u4e2a\u573a\u666f\u53ea\u6709\u4e00\u4e2aEntity\u53ef\u4ee5\u62e5\u6709"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 10\n\nnamespace PhysicalComponent{\n unique Global.Collider[] clliders\n}\n")),(0,n.kt)("p",null,"\u5b9a\u4e49\u4e86global\u7684\u5c5e\u6027\u89e3\u91ca\u5668\u4f1a\u89e3\u91ca\u552f\u4e00\u6027\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6709\u4e9b\u7ec4\u4ef6\u662f\u6ca1\u6709\u65b9\u6cd5\u7684\uff0c\u4f46\u6ca1\u5173\u7cfb\uff0c\u4ece\u7528\u6237\u89d2\u5ea6\u6765\u8bf4\u5b83\u4ecd\u7136\u662f\u4e00\u4e2a\u529f\u80fd\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 100\n\nnamespace ClidderComponent{\n public Global.Cllider\n public TAG = 100\n}\n")),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u7ec4\u4ef6\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u81ea\u8eab\u8fdb\u884c\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u5176\u4ed6\u5bf9\u8c61\u8fdb\u884c\u4fee\u6539\uff0c\u8fd9\u79cd\u60c5\u51b5\u6709\u4e00\u4e2a\u53d1\u8d77\u7684\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u662f\u6ca1\u6709\u7279\u5b9a\u53d1\u8d77\u7684\u5bf9\u8c61\uff0c\u5b83\u662f\u5bf9\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u901a\u7528\u884c\u4e3a\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce")),(0,n.kt)("h4",{id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"},"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"),(0,n.kt)("p",null,"\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u90fd\u53ef\u4ee5\u8bbe\u7f6e\u521d\u59cb\u503c\uff0c\u5176\u4e2d\u4e00\u4e2a\u4fee\u6539\u4f1a\u590d\u5199\u53e6\u4e00\u4e2a\uff0c\u56e0\u4e3a\u5bf9\u4e8e\u5171\u4eab\u53d8\u91cf\uff0c\u4e00\u4e2a\u5b9e\u4f53\u53ea\u6709\u4e00\u4efd\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u521d\u59cb\u5316\u7684\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\u5668\u4e2d\u4fee\u6539\uff0c\u6bcf\u6b21\u9009\u62e9\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u8bbe\u7f6e\u540e\uff0c\u4e0b\u6b21\u5176\u4ed6\u7ec4\u4ef6\u52a0\u8f7d\u7684\u4e5f\u662f\u4fee\u6539\u540e\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fd0\u884c\u65f6\uff0c\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u8fd0\u884c\u6001\u7528\u6237\u53ea\u770b\u5f97\u89c1\u4e00\u4efd\u5171\u4eab\u53d8\u91cf\uff0c\u7ec4\u4ef6\u53ea\u6709\u79c1\u6709\u53d8\u91cf\u53ef\u4ee5\u5355\u72ec\u8bbe\u7f6e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4ee3\u7801\u7684\u5f62\u5f0f\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u6309\u65f6\u95f4\u8986\u5199\u6570\u503c\u3002\u4f46\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u7ec4\u4ef6\u7684\u521d\u59cb\u503c\u5e94\u8be5\u7531\u5176\u5b9a\u4e49\u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u5426\u5219\u5bb9\u6613\u9020\u6210\u8ff7\u60d1\u3002\u4e00\u65e6\u5b9e\u4f8b\u8fd0\u884c\u4e00\u6bb5\u65f6\u95f4\u4e4b\u540e\uff0c\u503c\u5e94\u8be5\u7531\u6301\u4e45\u5316\u7684\u6570\u636e\u8fdb\u884c\u52a0\u8f7d\u521d\u59cb\u5316\u3002")),(0,n.kt)("h4",{id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026"},"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5bf9\u611f\u5174\u8da3\u7684\u6570\u636e\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4fdd\u8bc1\u4e24\u4e2a\u5bf9\u540c\u6837\u6570\u636e\u611f\u5174\u8da3\u7684\u6570\u636e\u90fd\u80fd\u591f\u6309\u987a\u5e8f\u88ab\u6267\u884c")),(0,n.kt)("p",null,"\u5269\u4e0b\u53ea\u8981\u6211\u4eec\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u987a\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u5c31\u53ef\u4ee5\u4ee5\u95f4\u63a5\u7684\u65b9\u5f0f\u5b9e\u73b0\u4ea4\u4e92\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u5171\u540c\u611f\u5174\u8da3\u7684\u53c2\u6570\u5145\u5f53\u4e86\u51fd\u6570\u53c2\u6570\uff0c\u540c\u65f6\u4e0d\u9700\u8981\u5f15\u7528\u5176\u4ed6\u7ec4\u4ef6\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u5168\u65b0\u7684\u673a\u5236\uff0c\u53ea\u6709\u8fd9\u6837\uff0c\u624d\u80fd\u5b9e\u73b0\u4e24\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u800c\u4e14\uff0c\u9664\u4e86\u5bf9\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u89e3\u8026\uff0c\u5b83\u8fd8\u6709\u4e00\u4e0b\u4e09\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u4e0d\u9700\u8981\u53bb\u5173\u5fc3\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982\u5c31\u4e0d\u4f1a\u51fa\u73b0\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u5e38\u89c1\u7684\u4f60\u8c03\u6211\u8fd8\u662f\u6211\u8c03\u7528\u4f60\u7684\u95ee\u9898\uff0c\u8fd9\u8ba9\u6211\u4eec\u5c06\u7f16\u7a0b\u601d\u60f3\u56de\u5f52\u5230\u672c\u8d28\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u53ea\u662f\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u5e76\u8f93\u51fa\u76f8\u5173\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u4e2a\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u4e0d\u592a\u4e00\u6837\u3002\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u5927\u90e8\u5206\u529f\u80fd\u90fd\u662f\u5728\u5904\u7406\u6570\u636e\uff0c\u8fd9\u79cd\u601d\u7ef4\u7406\u89e3\u8d77\u6765\u66f4\u7b80\u6d01\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\uff0c\u5927\u90e8\u5206\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\u90fd\u662f\u7531\u4e8e\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u5bf9\u8c61\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u3002\u4e0d\u4ec5\u4e0d\u5229\u4e8e\u5e76\u884c\u8ba1\u7b97\uff0c\u800c\u4e14\u5bb9\u6613\u5bfc\u81f4\u5404\u79cd\u5e76\u53d1\u95ee\u9898\uff0c\u4f8b\u5982\u6b7b\u9501\uff0c\u8d44\u6e90\u62a2\u5360\u7b49\u7b49\uff0c\u56e0\u4e3a\u4e0d\u53ef\u9884\u671f\u7684\u591a\u4e2a\u5bf9\u8c61\u4f1a\u8bbf\u95ee\u540c\u4e00\u4e2a\u5bf9\u8c61\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u80fd\u51cf\u5c11\u56e0\u4e3a\u53d8\u5316\u5bfc\u81f4\u7684\u91cd\u6784\u3001\u91cd\u65b0\u53d1\u5e03\u7a0b\u5e8f\u7b49\u95ee\u9898\u3002\u5f53\u4e00\u4e2a\u51fd\u6570\u53c2\u6570\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u5fc5\u987b\u8981\u4fee\u6539\u8c03\u7528\u8005\u7684\u4ee3\u7801\uff0c\u5b83\u53ef\u80fd\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u518d\u53ef\u7528\u6216\u8005\u5d29\u6e83\uff0c\u56e0\u800c\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u592a\u613f\u610f\u66f4\u65b0\u5230\u6700\u65b0\u5f15\u7528\uff0c\u4ece\u800c\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5316\u5f88\u6162\u3002\u51fd\u6570\u89e3\u8026\u53ef\u4ee5\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u7684\u4fee\u6539\u81f3\u5c11\u5e76\u4e0d\u4f1a\u5f71\u54cd\u7a0b\u5e8f\u7684\u8fd0\u884c\u3002\u5f53\u7136\u5982\u679c\u903b\u8f91\u53d1\u751f\u4e86\u8f83\u5927\u7684\u53d8\u5316\uff0c\u7a0b\u5e8f\u7684\u8ba1\u7b97\u7ed3\u679c\u53ef\u80fd\u903b\u8f91\u4e0a\u662f\u4e0d\u53ca\u9884\u671f\u7684\u3002\u8fd9\u79cd\u8981\u6709\u597d\u7684\u673a\u5236\u4fdd\u8bc1\u53ca\u65f6\u66f4\u65b0\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u662f\u7cfb\u7edf\u66f4\u4e0a\u4e00\u5c42\u7684\u673a\u5236\uff0c\u5728\u7cfb\u7edf\u5c42\uff0c\u6211\u4eec\u9996\u5148\u5e94\u8be5\u4fdd\u8bc1\u5e73\u53f0\u8fd0\u884c\u7684\u7a33\u5b9a\u6027\u3002")),(0,n.kt)("h4",{id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("h3",{id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316"},"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u673a\u5236\u5e26\u6765\u7684\u6700\u5927\u4ef7\u503c\uff0c\u662f\u5b83\u6d88\u9664\u4e86\u6a21\u5757\u4e4b\u95f4\u7684\u663e\u793a\u8c03\u7528\u53c2\u6570\u4f20\u9012\uff0c\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u9000\u5316\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u800c\u9690\u85cf\u4e86\u4f20\u7edf\u7f16\u7a0b\u4e2d\u8981\u4f7f\u529f\u80fd\u8fd0\u884c\u8d77\u6765\u7684\u53c2\u6570\u4f20\u9012\uff0c\u56e0\u4e3a\u8fd9\u5c31\u9700\u8981\u53d8\u91cf\u7684\u58f0\u660e\u548c\u521d\u59cb\u5316\uff0c\u800c\u53d8\u91cf\u7684\u5b9a\u4e49\u6709\u6d89\u53ca\u7c7b\u578b\u7cfb\u7edf\u3002\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u5bfc\u81f4\u5bf9\u7f16\u7a0b\u7684\u5b66\u4e60\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u62bd\u8c61\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u5b83\u5c31\u53ef\u4ee5\u8bed\u4e49\u5316\uff0c\u4e00\u4e2a\u529f\u80fd\u7528\u4e00\u4e2a\u8bed\u4e49\u8868\u793a\uff0c\u800c\u8bed\u4e49\u662f\u6240\u6709\u4eba\u53ef\u4ee5\u7406\u89e3\u7684\u3002\u4e00\u65e6\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u8bed\u4e49\uff0c\u5bf9\u5e94\u7684\u529f\u80fd\u53ca\u5176\u8ddf\u5176\u4ed6\u529f\u80fd\u4e4b\u95f4\u7684\u4ea4\u4e92\u5c31\u4f1a\u81ea\u52a8\u9002\u914d\u548c\u5de5\u4f5c\uff0c\u7528\u6237\u6700\u591a\u9700\u8981\u8bbe\u7f6e\u4e00\u4e9b\u7279\u5b9a\u7684\u5c5e\u6027\u503c\u3002"),(0,n.kt)("h4",{id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"},"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u53ca\u5176\u6e38\u620fUpdate\u673a\u5236\uff0c\u8054\u5408\u8d77\u6765\u89e3\u51b3\u4e86\u4e24\u4e2a\u51fd\u6570\u4e4b\u95f4\u53c2\u6570\u9690\u5f0f\u4f20\u9012\u7684\u95ee\u9898\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u663e\u5f0f\u6307\u5b9a\u4e24\u4e2a\u6a21\u5757\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u65e2\u7b80\u5316\u4e86\u903b\u8f91\u5f00\u53d1\uff0c\u53c8\u4f7f\u5f97\u51fd\u6570\u6216\u8005\u4ee3\u7801\u529f\u80fd\u7684\u8bed\u4e49\u5316\u6210\u4e3a\u53ef\u80fd"),(0,n.kt)("p",null,"\u8bed\u4e49\u5316\u4ee5\u540e\u7684\u7a0b\u5e8f\uff0c\u5f62\u6210\u53ef\u4ee5\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u7684\u7ed3\u6784\uff0c\u6709\u4e86\u8fd9\u4e2a\u57fa\u7840\uff0c\u518d\u7ed3\u5408\u81ea\u7136\u8bed\u8a00\u4eba\u5de5\u667a\u80fd\u548c\u8bed\u97f3\u65b9\u9762\u7684\u8fdb\u5c55\uff0c\u53ef\u4ee5\u505a\u5230\u6700\u7b80\u5316\u7684\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u7136\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u5316\u8bed\u8a00")),(0,n.kt)("p",null,"\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u673a\u5236\uff0c\u867d\u7136\u81ea\u7136\u8bed\u8a00\u4e2d\u672c\u8eab\u4e5f\u662f\u6709\u53e5\u5b50\u8bed\u6cd5\u7ed3\u6784\u7684\uff0c\u4f46\u662f\u81ea\u7136\u8bed\u8a00\u672c\u8eab\u5e76\u6ca1\u6709\u7f16\u7a0b\u8bed\u8a00\u90a3\u4e48\u9ad8\u5ea6\u7ed3\u6784\u5316\uff0c\u4f8b\u5982\u5373\u4f7f\u5305\u542b\u8bed\u6cd5\u9519\u8bef\uff0c\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4ea4\u6d41\u4e5f\u53ef\u80fd\u56e0\u4e3a\u76f8\u540c\u7684\u7ecf\u5386\u3001\u77e5\u8bc6\u7b49\u539f\u56e0\u5bf9\u5176\u8fdb\u884c\u7ea0\u9519\uff0c\u4ece\u800c\u5ffd\u7565\u9519\u8bef\u7684\u8bed\u6cd5\uff0c\u7136\u800c\u673a\u5668\u6267\u884c\u7684\u7ed3\u6784\u5316\u8bed\u8a00\u4e5f\u4e0d\u540c\uff0c\u9664\u975e\u662f\u57fa\u4e8eAI\u8fdb\u884c\u5b66\u4e60\uff0c\u4f46\u662f\u90a3\u6837\u53c8\u9700\u8981\u5927\u91cf\u7684\u6570\u636e\u5b66\u4e60"),(0,n.kt)("p",null,"\u53ef\u89c6\u5316\u56fe\u901a\u5e38\u7531\u4e00\u4e9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u548c"),(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u4e4b\u95f4\u7684\u8fde\u63a5\u5173\u7cfb")),(0,n.kt)("p",null,"\u6765\u8868\u793a\uff0c\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u6d41\u7a0b\u7684\u529f\u80fd\uff0c\u800c\u8fde\u63a5\u5173\u7cfb\u4e0d\u4ec5\u8868\u793a\u4e86\u67d0\u79cd\u6d41\u7a0b\u987a\u5e8f\uff0c\u4ed6\u8fd8\u8868\u793a\u4e86\u6d41\u7a0b\u4e4b\u95f4\u9700\u8981\u9075\u5faa\u7684\u53c2\u6570\u7ea6\u5b9a"),(0,n.kt)("p",null,"\u65e2\u7136\u7b26\u53f7\u8868\u89e3\u51b3\u4e86\u53c2\u6570\u4f20\u9012\uff0c\u90a3\u4e48\u5269\u4e0b\u53ea\u9700\u8981\u663e\u5f0f\u58f0\u660e\u8282\u70b9\u7684\u529f\u80fd\u5b9a\u4e49\uff0c\u5219\u6574\u4e2a\u56fe\u53ef\u4ee5\u6784\u6210\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\uff0c\u540c\u65f6\u4e5f\u662f\u53ef\u89c6\u5316\u7684"),(0,n.kt)("p",null,"\u7531\u4e8e\u81ea\u7136\u8bed\u8a00\u4e0d\u5177\u5907\u7cbe\u786e\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5b9a\u4e49\u660e\u786e\u7684\u8282\u70b9\u7ed3\u6784"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ed3\u6784\u6700\u597d\u662f\u4e00\u79cd\u63cf\u8ff0\u8bed\u8a00\uff0c\u4ed6\u5177\u6709\u57fa\u7840\u7684\u8bed\u6cd5\u7ed3\u6784\uff0c\u800c\u57fa\u4e8e\u8fd9\u4e9b\u7ed3\u6784\u8fdb\u884c\u6269\u5c55\u53ef\u4ee5\u6784\u5efa\u5177\u4f53\u3001\u590d\u6742\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u6240\u8c13\u8bed\u8a00\u7ed3\u6784\uff0c\u5373\u5305\u62ec\u5b83\u7684\u53c2\u6570\uff08\u8fde\u63a5\u5c5e\u6027\uff09\uff0c\u5b83\u7684\u529f\u80fd\u5c5e\u6027\u90fd\u662f\u660e\u786e\u7684"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u53ea\u662f\u4efb\u610f\u5b9a\u4e49\u4e00\u4e9b\u6ca1\u6709\u8054\u7cfb\u7684\u57fa\u7c7b\uff0c\u5219\u65e0\u52a9\u4e8e\u6784\u5efa\u6709\u4ef7\u503c\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u56e0\u4e3a\u5c3d\u7ba1\u4ed6\u53ef\u4ee5\u8fde\u63a5\u4e00\u4e9b\u8282\u70b9\u6784\u6210\u56fe\uff0c\u4f46\u662f\u8fd9\u4e2a\u56fe\u7684\u6d41\u7a0b\u548c\u610f\u4e49\u662f\u5b8c\u5168\u6ca1\u6709\u610f\u4e49\u7684\uff0c\u6ca1\u6709\u4ef7\u503c\u7684"),(0,n.kt)("h4",{id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations"},"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations"),(0,n.kt)("p",null,"Machinations \u63d0\u4f9b\u4e86\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\uff0c\u4ed6\u80fd\u6784\u5efa\u8d77\u6613\u4e8e\u7406\u89e3\u5177\u6709\u4e00\u5b9a\u903b\u8f91\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u4f46\u662f\u5b83\u7684\u7ed3\u6784\u662f\u4ee5\u7ecf\u6d4e\u6d41\u52a8\u4e3a\u57fa\u7840\u7684\uff0c\u6709\u4e9b\u903b\u8f91\u4e0d\u4e00\u5b9a\u6709\u660e\u663e\u7684\u7ecf\u6d4e\u56e0\u7d20\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u6269\u5c55\uff0c\u6709\u4e86\u8fd9\u6837\u4e25\u8c28\u7684\u8bed\u8a00\u7ed3\u6784\uff0c\u518d\u628a\u7ec4\u4ef6\u5b9a\u4e49\u4e3a\u8fd9\u6837\u7684\u903b\u8f91\u5355\u5143\u8282\u70b9\uff0c\u5219\u8282\u70b9\u7684\u8bed\u4e49\u5c31\u660e\u786e\u800c\u4e14\u53c8\u610f\u4e49\u4e86\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u53ef\u4ee5\u65b9\u4fbf\u7528\u6237\u6d89\u53caGameplay\u7684\u73a9\u6cd5"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e2aMachinations\u4e2d\u7684\u5143\u7d20\uff0c\u8bbe\u8ba1\u5bf9\u5e94\u7684Component\uff0c\u53ea\u8981\u4ece\u8fd9\u4e9bComponent\u96c6\u6210\u7684\u7ec4\u4ef6\uff0c\u5c31\u81ea\u52a8\u9075\u5faa\u76f8\u5e94\u7684\u529f\u80fd\u6216\u8005\u63a5\u53e3\u9700\u6c42\uff0c\u5c31\u53ef\u4ee5\u81ea\u52a8\u751f\u6210\u8bbe\u8ba1\u7684\u53ef\u89c6\u5316\u56fe\u3002"),(0,n.kt)("video",{src:"resources/New-Intro-Video-Averages-comp.mp4"}),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u53ef\u4ee5\u6839\u636eMachinations\u53cd\u5411\u751f\u6210\u521d\u59cb\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u5982\u679cMachinations\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u6709\u7684\u7ec4\u4ef6\u5c31\u8981\u6c42\u5f00\u53d1\u8005\u8fd9\u6837\u53bb\u505a\uff0c\u8fd9\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u5c31\u66f4\u597d\u63a7\u5236\u903b\u8f91\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u5bf9Machinations\u8fdb\u884c\u6df1\u5165\u5206\u6790\uff0c\u52a0\u4e00\u5b9a\u7684\u6539\u9020\u3002"),(0,n.kt)("h4",{id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"},"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\uff0c\u5bf9\u73b0\u4ee3\u5de5\u4e1a\u5f88\u591a\u7814\u7a76\u76f4\u89c2\u91cd\u8981\uff0c\u5e76\u4e14\u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6df1\u523b\u90fd\u673a\u5236\u90fd\u6df1\u85cf\u4e8e\u590d\u6742\u7cfb\u7edf\u4e2d\uff0c\u5f80\u5f80\u90a3\u4e9b\u76f4\u89c2\u7b80\u5355\u7684\u7ed3\u6784\u5316\u673a\u5236\u5e76\u4e0d\u8db3\u4ee5\u6d1e\u6089\u8fd9\u4e9b\u7cfb\u7edf\u7684\u539f\u7406\u548c\u5f71\u54cd\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u66f4\u597d\u7684\u7a0b\u5e8f\u673a\u5236\u6765\u652f\u6301\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u7531\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u7279\u5f81\uff0c\u73b0\u5728\u8ba1\u7b97\u67b6\u6784\u5e76\u4e0d\u80fd\u5f88\u597d\u7684\u5904\u7406\u8fd9\u7c7b\u4efb\u52a1\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u7528\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u901a\u5e38\u65e0\u6cd5\u7ef4\u62a4\u8fd9\u4e48\u5e9e\u5927\u7684\u7cfb\u7edf\u4ea4\u4e92\u5173\u7cfb\uff0c\u5f88\u96be\u5efa\u6a21"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u4e00\u822c\u90fd\u662f\u5b9e\u65f6\u7cfb\u7edf\uff0c\u5b83\u5e76\u4e0d\u592a\u9002\u7528\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\uff0c\u6240\u4ee5\u73b0\u5728\u5927\u90e8\u5206\u4eff\u771f\u4efb\u52a1\u90fd\u662f\u4f7f\u7528\u6e38\u620f\u5f15\u64ce\u6765\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u8fd8\u5305\u542b\u4eba\u7684\u4ea4\u4e92\u5f71\u54cd\uff0c\u662f\u4e00\u4e2a\u4ea4\u4e92\u5f0f\u7cfb\u7edf")),(0,n.kt)("p",null,"\u6240\u4ee5\u76ee\u524d\u5e76\u6ca1\u6709\u5f88\u597d\u7684\u89e3\u51b3\u590d\u6742\u95ee\u9898\u4eff\u771f\u7684\u7a0b\u5e8f\u673a\u5236\u6216\u8005\u7cfb\u7edf\u8f6f\u4ef6\uff0cRealityIS\u6709\u673a\u4f1a\u5728\u8fd9\u65b9\u9762\u63d0\u4f9b\u66f4\u597d\u7684\u57fa\u7840\u67b6\u6784\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"226-\u7ec4\u4ef6\u67e5\u8be2"},"2.2.6 \u7ec4\u4ef6\u67e5\u8be2"),(0,n.kt)("p",null,"To read or write data, you must first find the data you want to change. "),(0,n.kt)("p",null,"The main way of processing DOTS data is ECS queries. Iterating over all entities that have a matching set of components, is at the center of the ECS architecture. "),(0,n.kt)("p",null,"To identify which entities a system should process, use an ",(0,n.kt)("a",{parentName:"p",href:"https://docs.unity3d.com/Packages/com.unity.entities@0.14/api/Unity.Entities.EntityQuery.html"},"EntityQuery"),". An entity query searches the existing archetypes for those that have the components that match your requirements. You can specify the following component requirements with a query:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c#"},"var queryDescription = new EntityQueryDesc\n{\n None = new ComponentType[] { typeof(Frozen) },\n All = new ComponentType[]{ typeof(RotationQuaternion),\n ComponentType.ReadOnly() }\n};\nEntityQuery query = GetEntityQuery(queryDescription);\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6309\u7c7b\u578b\u67e5\u8be2\u7ec4\u4ef6\u5bf9\u7528\u6237\u6765\u8bb2\u4e0d\u592a\u597d\u7406\u89e3\uff0c\u5b83\u8ba9\u4f60\u5fc5\u987b\u5f88\u6e05\u695a\u6240\u6709\u5b9e\u4f53\u4e2d\u54ea\u4e9b\u5b9e\u4f53\u5177\u6709\u54ea\u4e9b\u7ec4\u4ef6\u7684\u7ec4\u5408")),(0,n.kt)("p",null,"\u6309\u7c7b\u578b\u67e5\u627e\u4e5f\u9650\u5236\u4e86\u7ec4\u4ef6\u7684\u884c\u4e3a\uff0c\u5b83\u53ea\u8ddf\u7c7b\u578b\u4e00\u81f4\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u4e00\u4e2a\u653b\u51fb\u53ef\u80fd\u53ea\u9488\u5bf9\u67d0\u4e9b\u7c7b\u578b\u7684\u602a\u7269\uff0c\u8fd9\u4e9b\u602a\u7269\u7684\u6570\u636e\u5c5e\u6027\u662f\u76f8\u540c\u7684\uff0c\u5373\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u503c\u7684\u533a\u95f4\u4e0d\u540c\uff0c\u5b83\u4eec\u88ab\u5206\u4e3a\u4e0d\u540c\u7684\u7c7b\u522b\uff0c\u9664\u975e\u4f60\u91cd\u590d\u5b9a\u4e49Component\uff0c\u8fd9\u4e9bComponent\u6709\u76f8\u540c\u7684\u5c5e\u6027\uff0c\u5426\u5219\u4f60\u65e0\u6cd5\u533a\u5206\u5b83\u4eec\uff0c\u5373Component\u5145\u5f53\u4e86\u7c7b\u578b\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5b83\u53ea\u662f\u6570\u636e\uff0c\u4e0d\u80fd\u5b8c\u5168\u5145\u5f53\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u5bf9\u4e8eDOTS\u4e2d\u7684\u67e5\u8be2\uff0c\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u610f\u4e49\u662f\u53d6\u4ee3\u7c7b\u578b\u5f15\u7528\u7684\uff0c\u6240\u4ee5ECS\u4e2dComponent\u7684\u7c7b\u578b\u9700\u8981\u653e\u5230\u7b26\u53f7\u8868\u4e2d\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u7b26\u53f7\u8868\u4e2d\u7684\u540d\u79f0\u540c\u65f6\u4e5f\u8868\u793a\u4e86\u7b26\u53f7\uff0c\u56e0\u6b64\u7b26\u53f7\u8868\u9700\u8981\u662f\u7ed3\u6784\u4f53\uff0c\u50cfshader\u4e2d\u7684\u53d8\u91cf\u4e00\u6837\uff0c\u8fd9\u4e2a\u7ed3\u6784\u4f53\u7684\u540d\u79f0\u6216\u8005\u8fd9\u4e2a\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u4ee3\u8868\u4e86\u7ec4\u4ef6\u7c7b\u578b\uff1a"),(0,n.kt)("p",null,"\u4f8b\u5982\u7b26\u53f7\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"struct Position{\n float x\n float y\n float z\n}\n")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e2d\u7684\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 1\n\nnamespace SomeComponent : Component{\n public Global.Position as position\n \n fn update(float dt){\n \n }\n} \n")),(0,n.kt)("p",null,"\u5916\u90e8\u5f15\u7528\u7684\u7ec4\u4ef6\uff0c\u4f7f\u7528query\u4fee\u9970\u7b26\uff0c\u8868\u793a\u8fd9\u4e2a\u53d8\u91cf\u4e0d\u662f\u8be5\u5bf9\u8c61\u81ea\u8eab\u7684\u53d8\u91cf\uff0c\u800c\u662f\u67e5\u8be2\u7ed3\u679c\uff0c\u5982\u679c\u6709\u591a\u91cd\u67e5\u8be2\uff0c\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u8054\u5408\u67e5\u8be2\u7684\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u5148\u4ec5\u8003\u8651\u4f46\u7ec4\u4ef6\u67e5\u8be2\uff0cUnity\u95f4\u63a5\u4f7f\u7528\u4e86\u591a\u79cd\u7ec4\u4ef6\u7684\u67d0\u4e9b\u7279\u5b9a\u7ec4\u5408\u6570\u636e\u6765\u5b9a\u4e49\u4e00\u4e2aSystem\uff0c\u56e0\u4e3a\u5355\u4e2a\u7ec4\u4ef6\u65e0\u6cd5\u786e\u5b9a\u6570\u636e\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 2\n\nnamespace AttackComponent:Component{\n query Global.Position[] as positions\n query Global.HP[] as hps\n \n public Global.HP as hp\n public Global.Position position\n \n fn update(float dt){\n if input == 'B' {\n for i in positions{\n if(distance(position-positions)<10){\n positions[i].x -= hp\n }\n }\n }\n }\n}\n")),(0,n.kt)("h4",{id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"},"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"),(0,n.kt)("p",null,"\u5728Unity DOTS\u4e2d\uff0c\u6309\u7ec4\u4ef6\u7ec4\u5408\u67e5\u8be2\u6709\u4e24\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5927\u7684\u597d\u5904\u662f\u76f4\u63a5\u83b7\u53d6\u6570\u636e\uff0c\u56e0\u4e3aSystem\u9700\u8981\u64cd\u4f5c\u8fd9\u4e9b\u6570\u636e\uff0c\u6240\u4ee5\u76f4\u63a5\u58f0\u660e\u8fd9\u4e9b\u7c7b\u578b\u5c31\u4e0d\u4f1a\u51fa\u9519"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u624d\u662f\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\uff0c\u5c06\u7ec4\u5408\u5b9a\u4e49\u4e3a\u4e00\u79cd\u7279\u5b9a\u7684\u903b\u8f91\u7c7b\u578b")),(0,n.kt)("p",null,"\u76ee\u524d\u770b\u8d77\u6765\u5f62\u6210\u8fd9\u5957\u673a\u5236\u7684\u6838\u5fc3\u539f\u56e0\u662f\u56e0\u4e3a\u524d\u8005\uff1b\u4f46\u662f\u8fd9\u79cd\u7ec4\u5408\u672c\u8d28\u4e0a\u4e0d\u662f\u771f\u6b63\u7684\u67e5\u8be2\u6761\u4ef6\uff0c\u4ed6\u53ef\u80fd\u5bfc\u81f4\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4e00\u4e2aComponent\u80fd\u88ab\u591a\u4e2aSystem\u4f7f\u7528\uff0c\u5c31\u8bf4\u660eComponent\u672c\u8eab\u53ef\u4ee5\u5177\u5907\u591a\u4e2a\u610f\u4e49\uff0c\u4f8b\u5982\u4e24\u4e2a\u4e0d\u540c\u7684System\u6709\u53ef\u80fd\u5b8c\u5168\u6309\u7167\u76f8\u53cd\u7684\u903b\u8f91\u53bb\u5904\u7406\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u5b9a\u4e49\u4e00\u4e2aComponent\u6709\u53ef\u80fd\u521a\u597d\u4e0d\u662f\u67d0\u4e2aSystem\u671f\u671b\u7684\u65b9\u5f0f\uff0c\u7136\u800c\u6700\u7ec8\u5b83\u8fd8\u662f\u88ab\u5f53\u4f5c\u4e86\u67e5\u8be2\u6761\u4ef6\u3002w"),(0,n.kt)("h4",{id:"2262-\u663e\u5f0f\u58f0\u660e"},"2.2.6.2 \u663e\u5f0f\u58f0\u660e"),(0,n.kt)("p",null,"\u8fd8\u662f\u9700\u8981\u67d0\u79cd\u663e\u5f0f\u58f0\u660e\u7684\u7c7b\u578b\uff0c\u54ea\u6015\u662fLayer\u8fd9\u6837"),(0,n.kt)("p",null,"\u611f\u5174\u8da3\u7684\u6570\u636e+TAG\u6570\u7ec4\uff08\u591a\u4e2aTAG\u611f\u5174\u8da3\uff09"),(0,n.kt)("p",null,"\u53ea\u9700\u8981\u58f0\u660e\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\u5c31\u884c"),(0,n.kt)("p",null,"\u7531\u4e8e\u6570\u636e\u65e0\u6cd5\u8868\u8fbe\u7c7b\u578b\uff0c\u6709\u7528\u6237\u624b\u52a8\u8bbe\u5b9a"),(0,n.kt)("p",null,"\u53ef\u4ee5\u50cfUnity\u4e00\u6837\u5b9a\u4e49\u4e00\u4e2aLayer\u5217\u8868\uff0c\u65b9\u4fbf\u7528\u6237\u5bf9\u5bf9\u8c61\u8fdb\u884c\u5f52\u7c7b"),(0,n.kt)("p",null,"Unity\u7684Component \u7ec4\u5408\u67e5\u8be2\u53cd\u800c\u4e0d\u597d\u7406\u89e3\uff0c\u592a\u590d\u6742\uff0c\u9700\u8981\u8bb0\u5fc6\u66f4\u590d\u6742\u7684\u4e1c\u897f\uff0c\u76f8\u6bd4Tag\uff0ctag\u6982\u5ff5\u8db3\u591f\u7b80\u5355"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8981\u80fd\u4efb\u610f\u67e5\u8be2\uff0c\u5c31\u53ef\u4ee5\u6ee1\u8db3\u901a\u7528\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u6ee1\u8db3\u4efb\u610f\u7ec4\u4ef6\u95f4\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8bed\u4e49\u5316")),(0,n.kt)("h4",{id:"2263-rust-ecs"},"2.2.6.3 RUST ECS"),(0,n.kt)("p",null,'You can use empty structs to help you identify specific entities. These are known as "marker components". Useful with ',(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),"."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Add this to all menu ui entities to help identify them\n#[derive(Component)]\nstruct MainMenuUI;\n\n/// Marker for hostile game units\n#[derive(Component)]\nstruct Enemy;\n\n/// This will be used to identify the main player entity\n#[derive(Component)]\nstruct Player;\n")),(0,n.kt)("h4",{id:"2264-labelslayers"},"2.2.6.4 Labels/Layers"),(0,n.kt)("h3",{id:"227-component--system"},"2.2.7 Component + System"),(0,n.kt)("p",null,"Unity\u5c06Component\u548cSystem\u533a\u5206\u5f00\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\u5c06\u4ee3\u7801\u548c\u6570\u636e\u5206\u5f00\uff0c\u4f7f\u5f97System\u4e2d\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff1b\u5373System\u672c\u8eab\u4e5f\u4e0d\u80fd\u6709\u4efb\u4f55\u5b9e\u4f8b\u6570\u636e\uff0c\u56e0\u4e3a\u90a3\u6837\u76f8\u5bf9\u4e8e\u5b83\u9700\u8981\u5904\u7406\u7684Component\u800c\u8a00\uff0c\u5176\u4e2d\u5b58\u5728\u4e86\u201c\u5168\u5c40\u53d8\u91cf\u201d\uff0c\u8fd9\u5f15\u5165\u4e86\u5b9e\u4f53\u95f4\u7684\u76f8\u5173\u6027\uff0c\u8026\u5408\uff0c\u5e76\u4f7f\u5f97\u5f88\u96be\u5b9a\u4e49\u6bcf\u4e2aComponent\u4e4b\u95f4\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e5f\u5e26\u6765\u4e86\u4e0d\u597d\u7684\u540e\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u8005\u9700\u8981\u5206\u522b\u5355\u72ec\u6dfb\u52a0Component\u548cSystem"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4f7f\u7528\u8005\u5fc5\u987b\u5f88\u5c0f\u5fc3\u5904\u7406\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6bd4\u5982\u4f60\u5b9a\u4e49\u4e86Component\uff0c\u4f46\u662f\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u6ca1\u6709\u6dfb\u52a0\u76f8\u5e94\u7684System\uff0c\u5219\u6570\u636e\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u884c\u4e3a\u5b9a\u4e49\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5f15\u5165\u4e86System\uff0c\u4f46\u662f\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u5bf9\u5e94Component\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u5219\u8fd9\u4e9bSystem\u4e5f\u65e0\u6cd5\u53d1\u6325\u4f5c\u7528\u3002")),(0,n.kt)("p",null,"Creation\u540c\u65f6\u89e3\u51b3\u4e86\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0c\u65b9\u6cd5\u662f\u5c06\u4e24\u8005\u878d\u4e3a\u4e00\u4f53\uff0c\u4f46\u662f\u901a\u8fc7\u7f16\u8bd1\u5668\u5c06\u5c5e\u6027\u62bd\u53d6\u4e3aComponent\uff08\u5f53\u7136Unity\u4e5f\u5b58\u5728\u7c7b\u4f3c\u7684\u8f6c\u6362\u673a\u5236\uff09\uff1b\u66f4\u8fdb\u4e00\u6b65\uff0cCreation\u901a\u8fc7public\u3001private\u548cquery\u6807\u5fd7\u7b26\u533a\u5206\u4e86\u516c\u5171\u53d8\u91cf\u3001\u79c1\u6709\u53d8\u91cf\u548c\u5f15\u7528\u53d8\u91cf\uff0c\u4f7f\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cCreation\u548cUnity\u5728\u529f\u80fd\u5c42\u9762\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("h4",{id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"},"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u672a\u77e5\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5bf9\u5b9e\u4f53\u6267\u884c\u64cd\u4f5c\uff0c\u6240\u6709\u5f88\u96be\u4fdd\u8bc1\u987a\u5e8f\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u6bd4Unity DOTS\u8981\u590d\u6742\uff0c\u540e\u8005\u7531\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u6240\u6709\u7ec4\u4ef6\uff0c\u80fd\u591f\u4e25\u683c\u4fdd\u8bc1\u903b\u8f91\u987a\u5e8f\u3002\u4f46\u662fRealityIS\u4e2d\uff0c\u540c\u4e00\u4e2a\u5b9e\u4f53\u53ef\u80fd\u5305\u542b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u987a\u5e8f\uff0c\u53ef\u80fd\u4f1a\u5b8c\u5168\u51b2\u7a81\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5141\u8bb8\u7528\u6237\u81ea\u884c\u53bb\u8c03\u6574\u6267\u884c\u987a\u5e8f\uff0c\u4f1a\u4e00\u4e0b\u5b50\u5bf9\u7528\u6237\u63d0\u9ad8\u4e86\u5f88\u591a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u4ed4\u7ec6\u53bb\u5206\u6790\u4e00\u4e0b\u4e00\u822c\u7684\u60c5\u51b5\uff0c\u5982\u679c\u80fd\u591f\u5728\u505a\u4e00\u4e0b\u5047\u8bbe\u6216\u8005\u7ea6\u675f\uff0c\u90a3\u4e48\u95ee\u9898\u5c31\u4f1a\u7b80\u5316\u5f88\u591a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ea\u8bfb\u7684\u7ec4\u4ef6\u90fd\u653e\u5728\u6700\u540e\u6267\u884c\uff0c\u6240\u6709\u5bf9\u53d8\u91cf\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u4e0d\u7528\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"2\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ef\u5199\u5165\u6216\u8005\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u90fd\u987a\u5e8f\u65e0\u5173")),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u8fdb\u4e00\u6b65\uff0c\u6211\u4eec\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"3\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u5c5e\u6027")),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2a\u95ee\u9898\u5c31\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u88ab\u5904\u7406\uff0c\u865a\u62df\u673a\u52a8\u6001\u8c03\u6574\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5728\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e2d\uff0c\u8fd9\u4e09\u4e2a\u6761\u4ef6\u8fd8\u662f\u6bd4\u8f83\u5bb9\u6613\u6ee1\u8db3\u3002\u5176\u4e2d\u5bf9\u4e8e\u7b2c3\u6761\uff0c\u8fd9\u5c31\u6709\u70b9\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u662f\u4e00\u4e2a \u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ea\u6709\u4e00\u4e2a\u8f93\u51fa\u503c\uff0c\u5e76\u4e14\u6240\u6709\u8f93\u5165\u53c2\u6570\u90fd\u662f\u53ea\u8bfb\u7684\u3002\u5982\u679c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u7684\u5c5e\u6027\uff0c\u90a3\u4e48\u5c31\u5f88\u5bb9\u6613\u533a\u5206\u51fa\u6240\u6709\u53ea\u8bfb\u548c\u53ef\u5199\u5165\u4e24\u5927\u7c7b\u7ec4\u4ef6\u3002\u5373\u662f\u8bf4\uff0c\u7b2c\u4e09\u4e2a\u5047\u8bbe\u53ef\u4ee5\u628a\u6240\u6709\u7ec4\u4ef6\u5206\u4e3a\u4e24\u7c7b\uff1a\u53ea\u8bfb\u7684\u7ec4\u4ef6\u548c\u53ea\u5199\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5373\u4fbf\u5982\u6b64\uff0c\u8fd8\u662f\u5269\u4e0b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u7ec4\u4ef6\u5bf9\u4e24\u4e2a\u5c5e\u6027\u4ea4\u53c9\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8bfb\u6216\u8005\u53ea\u5199\u5c5e\u6027\u4e4b\u95f4\u7531\u4f9d\u8d56\u5173\u7cfb")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u5728\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u81ea\u52a8\u6392\u5e8f\u65f6\uff0c\u5c06\u65e0\u6cd5\u63a8\u7b97\u5b9e\u9645\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6709\u4e24\u79cd\u5904\u7406\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u9047\u5230\u51b2\u7a81\u65f6\u4ea4\u7531\u7528\u6237\u6765\u6307\u5b9a\uff0c\u4f46\u662f\u7531\u4e8e\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u5168\u5c40\u7684\uff0c\u800c\u4e0d\u662f\u6839\u636e\u7528\u6237\u8bbe\u7f6e\u6765\u7684\uff0c\u4f8b\u5982\u4e24\u4e2a\u7528\u6237\u53ef\u80fd\u8bbe\u7f6e\u4e86\u76f8\u53cd\u7684\u987a\u5e8f\uff0c\u6240\u4ee5\u8fd9\u79cd\u65b9\u6cd5\u4e0d\u53ef\u53d6\uff0c\u5e76\u4e14\u5b83\u9700\u8981\u7528\u6237\u4ecb\u5165\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u662f\u7531\u5f00\u53d1\u8005\u6765\u89e3\u51b3\u51b2\u7a81")),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u5f00\u53d1\u8005\u662f\u6700\u4e86\u89e3\u903b\u8f91\u7684\uff0c\u800c\u4e14\u5f00\u53d1\u8005\u4e00\u65e6\u89e3\u51b3\u597d\u51b2\u7a81\u5c31\u4e0d\u9700\u8981\u7528\u6237\u5728\u505a\u4e0d\u5fc5\u8981\u5e76\u4e14\u589e\u52a0\u590d\u6742\u5ea6\u7684\u8bbe\u7f6e\u3002\u53ef\u4ee5\u628a\u6240\u6709\u4ee3\u7801\u770b\u6210\u4e00\u4e2a\u6574\u4e2a\uff0c\u5f53\u5f00\u53d1\u8005\u5728\u63d0\u4ea4\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u5e76\u4e0d\u53ea\u662f\u8981\u8003\u8651\u81ea\u5df1\u7684\u4ee3\u7801\u51b2\u7a81\uff0c\u8fd8\u8981\u8003\u8651\u5168\u5c40\u4ee3\u7801\u51b2\u7a81\u3002\u4e24\u4e2a\u5f00\u53d1\u8005\u63d0\u4ea4\u4ee3\u7801\u603b\u662f\u6709\u65f6\u95f4\u5148\u540e\u987a\u5e8f\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u4e8e\u540e\u63d0\u4ea4\u4ee3\u7801\u7684\u4eba\uff0c\u7cfb\u7edf\u629b\u51fa\u6240\u6709\u53ef\u80fd\u4e0e\u4e4b\u51b2\u7a81\u7684\u7ec4\u4ef6\u3002\u6709\u5f00\u53d1\u8005\u901a\u8fc7\u4e86\u89e3\u51b2\u7a81\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u5e76\u6bd4\u8f83\u81ea\u5df1\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u6765\u8bbe\u7f6e\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u4e5f\u4e0d\u662f\u5b8c\u5168\u53ef\u9760\uff0c\u4f8b\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u6839\u672c\u6ca1\u6709\u770b\u5bf9\u65b9\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u968f\u4fbf\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u987a\u5e8f\uff0c\u8fd9\u65f6\u5019\u53ef\u80fd\u5bfc\u81f4\u9519\u8bef\u903b\u8f91\u3002\u4e00\u79cd\u53ef\u80fd\u7684\u65b9\u6cd5\u662f\uff0c\u5bf9\u8fd9\u4e9b\u6709\u51b2\u7a81\u7684\u7ec4\u4ef6\uff0c\u540e\u9762\u5f00\u53d1\u8005\u7684\u8bbe\u7f6e \u7ed3\u679c\u4f1a\u53d1\u9001\u7ed9\u524d\u9762\u5f00\u53d1\u8005\uff0c\u524d\u9762\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u6267\u884c\u987a\u5e8f\u63d0\u51fa\u5f02\u8bae\u6216\u8005\u540c\u610f\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5206\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5c3d\u91cf\u907f\u514d\u7f16\u5199\u8fd9\u79cd\u5728\u4e00\u5e27\u4e4b\u5185\u6709\u590d\u6742\u4f9d\u8d56\u7684\u7ec4\u4ef6\uff0c\u6bd4\u5982\u5982\u679c\u7ec4\u4ef6\u4e4b\u524d\u90fd\u5b8c\u5168\u6ca1\u6709\u4f9d\u8d56\uff0c\u90a3\u5c31\u4e0d\u4f1a\u5b58\u5728\u8fd9\u4e2a\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\uff0c\u5177\u6709\u8fd9\u79cd\u590d\u6742\u987a\u5e8f\u7684\u7ec4\u4ef6\uff0c\u901a\u5e38\u5bf9\u5e94\u7684\u662f\u4e00\u4e2a\u5f00\u53d1\u8005\u5185\u90e8\u7684\u903b\u8f91\uff0c\u8fd9\u65f6\u5019\u5b83\u81ea\u5df1\u8bbe\u7f6e\u6b63\u786e\u7684\u987a\u5e8f\u5c31\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8fd9\u79cd\u53ef\u80fd\u6027\uff0c\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u6ca1\u6709\u610f\u4e49\uff0c\u53ef\u4ee5\u4e0d\u7528\u7406\u4f1a\uff0c\u7531\u7528\u6237\u81ea\u884c\u53d1\u73b0\u95ee\u9898\u540e\u53cd\u9988\u7ed9\u5f00\u53d1\u8005\u534f\u5546\u5904\u7406")),(0,n.kt)("h4",{id:"2272-change-driven-update"},"2.2.7.2 Change-driven update"),(0,n.kt)("p",null,"\u4e8b\u4ef6\u8868\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u5efa\u7acb\u4e8b\u4ef6\u961f\u5217\uff0c\u5ef6\u8fdf\u5230\u4e00\u8d77\u6267\u884c\uff0c\u6d88\u9664\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5e76\u53d1\uff0c\u540c\u65f6\u80fd\u591f\u505a\u5230\u5e76\u884c\u8ba1\u7b97\uff0c\u56e0\u4e3a\u4e00\u4e9b\u76f8\u540c\u7c7b\u578b\u7684\u4e8b\u4ef6\u53ef\u80fd\u5bf9\u5e94\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5373\u4f7f\u540c\u4e00\u4e2a\u4e8b\u4ef6\u5bf9\u5e94\u4e0d\u540c\u7684\u7ec4\u4ef6\uff0c\u901a\u8fc7\u6309\u7ec4\u4ef6\u7c7b\u578b\u6392\u5e8f\u548c\u7ec4\u7ec7\uff0c\u4e5f\u80fd\u5b66\u5230\u6309\u987a\u5e8f\u5e76\u884c\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4e00\u90e8\u5206\u7531\u72b6\u6001\u53d8\u5316\u5bfc\u81f4\u7684\u5206\u652f\u8f6c\u5316\u4e3a\u4e8b\u4ef6\u5e8f\u5217\uff0c\u5f53\u7136\u5b9e\u9645\u5904\u7406\u673a\u5236\u53ef\u80fd\u4e0d\u4e00\u6837")),(0,n.kt)("p",null,"\u6570\u636e\u5e93\u91cd\u7ec4\u6d89\u53ca\u66f4\u65b0\u7b26\u53f7\u8868\u3001\u4ee5\u53caTable\u7684\u6570\u636e\u91cd\u65b0\u8c03\u6574\uff0c\u7b26\u53f7\u8868\u548cTable API\u4e00\u6837\uff0c\u9700\u8981\u7b26\u53f7\u8868API"),(0,n.kt)("h4",{id:"2273-ecs"},"2.2.7.3 ECS"),(0,n.kt)("p",null,"Unity\u4e2dECS\u7684system \u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u8ddfComponent \u4e4b\u95f4\u7684\u8054\u7cfb\u7531System \u5bf9Entity\u7684Query\u5b9a\u4e49\uff0c\u4f46\u662f\u5e26\u6765\u7684\u7ed3\u679c\u662f\u7cfb\u7edf\u521d\u59cb\u5316\u7684\u65f6\u5019\u9700\u8981\u72ec\u7acb\u5b8c\u6210\u4e24\u4e2a\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bbe\u7f6e\u6bcf\u4e2aEntity\u7684Component "),(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f8b\u5316\u6240\u6709\u7cfb\u7edf\u4f1a\u4f7f\u7528\u7684System ")),(0,n.kt)("p",null,"\u8fd9\u79cd\u5f31\u5173\u7cfb\u7684\u4e00\u4e2a\u53ef\u80fd\u7684\u7ed3\u679c\u662f\u6709\u4e9bSystem \u53ef\u80fd\u67e5\u8be2\u4e0d\u5230\u4efb\u4f55\u5177\u6709\u611f\u5174\u8da3\u7684Component \uff0c\u800c\u4e14\u7cfb\u7edf\u6ca1\u6cd5\u81ea\u52a8\u8ba1\u7b97\uff0c\u53ea\u80fd\u7531\u5f00\u53d1\u8005\u624b\u52a8\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cdSystem \u5bf9Component \u7c7b\u578b\u7684\u786e\u5b9a\u6027\u5f15\u7528\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u5f88\u96be\u52a8\u6001\u6784\u5efa\u65b0\u7684\u573a\u666f"),(0,n.kt)("p",null,"\u800c\u4e14\u5173\u952e\u662f\u666e\u901a\u7528\u6237\u5f88\u96be\u53bb\u7406\u89e3\u4e0a\u8ff0\u4e24\u4e2a\u64cd\u4f5c\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u7ed9\u4e00\u4e2aEntity \u6dfb\u52a0\u4e86\u67d0\u4e2aComponent \uff0c\u4f46\u662f\u4ed6\u5f88\u96be\u6bd4\u8f83\u660e\u786e\u5730\u8981\u53bb\u518d\u6dfb\u52a0\u54ea\u4e9bSystem \uff0c\u8fd9\u53ef\u80fd\u9700\u8981\u7c7b\u4f3c\u4e8e\u7ed9\u4e00\u4e2a\u5bf9\u5e94\u8868\uff0c\u800c\u8fd9\u79cd\u5bf9\u5e94\u5173\u7cfb\u53ef\u80fd\u6709\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u6309\u7167System \u7684\u529f\u80fd\u63cf\u8ff0\u6dfb\u52a0\u4e86\u67d0\u4e2aSystem \uff0c\u4ed6\u53c8\u53ef\u80fd\u5fd8\u4e86\u8981\u7ed9\u4e00\u4e9bEntity \u6dfb\u52a0\u5bf9\u5e94\u7684Component \uff0c\u7a0b\u5e8f\u6ca1\u529e\u6cd5\u68c0\u67e5\u8fd9\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u66f4\u4e25\u91cd\u7684\uff0cSystem \u7684\u5b9a\u4e49\u548c\u5f00\u53d1\u5fc5\u987b\u4e86\u89e3Component \u7684\u5b9a\u4e49\uff0c\u8fd9\u5c31\u56de\u5230\u4ee5\u524d\u7684\u95ee\u9898\uff1aComponent \u9700\u8981\u534f\u8bae\uff0c\u8fd9\u5f88\u590d\u6742")),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aSystem \u548cComponent \u662f\u4e25\u683c\u76f8\u5173\u7684\uff0c\u4ed6\u4eec\u5206\u5f00\u6ca1\u6709\u610f\u4e49\uff0c\u5728OOP\u4e2d\u5b83\u4eec\u5c31\u662f\u5b9a\u4e49\u5728\u4e00\u8d77\u7684\uff0c\u5728\u4e00\u8d77\u53ef\u4ee5\u907f\u514d\u9700\u8981\u505a\u4e24\u4e2a\u72ec\u7acb\u770b\u8d77\u6765\u4e0d\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u5b9e\u9645\u4e0a\u662f\u76f8\u5173\u7684"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u548c\u5728\u4e00\u8d77\uff0c\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u4e2a\u65b0\u7684\u7406\u89e3\u4e0a\u7684\u95ee\u9898\uff1a"),(0,n.kt)("p",null,"System \u5168\u5c40\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662f\u968f\u7740Component \u4e00\u8d77\u52a0\u5230\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f7f\u5f97\u770b\u8d77\u6765\u6bcf\u4e2aEntity \u5bf9\u4f1a\u6267\u884c\u8fd9\u4e2a\u65b9\u6cd5"),(0,n.kt)("p",null,"\u4f46\u8fd9\u95ee\u9898\u662f\u5426\u4e5f\u4e0d\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5185\u90e8\u7ec4\u4ef6\uff0c\u4ed6\u672c\u6765\u4e5f\u662f\u9700\u8981\u6bcf\u4e2a\u5bf9\u8c61\u6267\u884c\u4e00\u6b21\uff0c\u5728ECS\u4e2d\u53ea\u662f\u6211\u4eec\u5f3a\u8c03\u5e76\u884c\uff0c\u5176\u4e2d\u4e00\u4efd\u4ee3\u7801\u5bf9\u591a\u4e2a\u6570\u636e\u6267\u884c\uff0c\u800c\u9690\u85cf\u4e86System \u5176\u5b9e\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u6267\u884c\u7684\u611f\u89c9\uff0c\u4f46\u662f\u5728\u5185\u90e8\u5176\u5b9e\u662f\u5faa\u73af\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u8981\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7279\u5b9a\u5b9e\u4f53\u904d\u5386\u5176\u4ed6\u5b9e\u4f53\uff0c\u4ed6\u5176\u5b9e\u4e5f\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u4f1a\u6267\u884c\uff0c\u6bd4\u5982\u4e00\u4e2a\u5854\u9632\u6e38\u620f\uff0c\u90a3\u4e2a\u70ae\u5854\u90fd\u8981\u904d\u5386\u884c\u8d70\u7684\u602a\u7269\uff0c\u770b\u770b\u662f\u5426\u5728\u8303\u56f4\u5185\uff0c\u5982\u679c\u5728\u8303\u56f4\u5185\u5c31\u5bf9\u5176\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5168\u5c40\u7684\uff0c\u90a3\u5c31\u66f4\u597d\u7406\u89e3\uff0c\u89e3\u91ca\u5668\u4fdd\u8bc1\u5168\u5c40\u53ea\u6709\u4e00\u4e2a\uff0c\u90a3\u4e48\u5c31\u662f\u8be5\u5b9e\u4f53\u6267\u884c\u4e86\u4e00\u6b21")),(0,n.kt)("p",null,"\u5230\u8fd9\u91cc\u4e3b\u8981\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5bf9\u591a\u4e2a\u5b9e\u4f53\u7684\u904d\u5386\u5f80\u5f80\u5e26\u6709\u4e00\u4e2a\u6761\u4ef6\u5f62\u6210\u5206\u652f\uff0c\u5e76\u4e14\u90a3\u4e2a\u5e76\u884c\u7684\u7ec4\u4ef6A\u5185\u90e8\u90fd\u5728\u5355\u72ec\u8bbf\u95ee\u6240\u6709\u5b9e\u4f53\uff0c\u53c8\u53ef\u80fd\u9020\u6210\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1\u51b2\u7a81\uff0c\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u8bbf\u95ee\u540c\u4e00\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u5c40\u90e8\u6027\u7834\u574f\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5206\u522b\u8bbf\u95ee\u4e0d\u540c\u7684\u6570\u636e")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u95ee\u9898\uff0c\u89e3\u91ca\u5668\u8981\u628a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u7684\u6267\u884c\u8f6c\u6362\u4e3a\u4e00\u4e2a\u4e00\u4e2a\u7ec4\u4ef6A\u987a\u5e8f\u6267\u884c\uff0c\u5728\u6bcf\u4e2a\u987a\u5e8f\u6267\u884c\u7684\u7ec4\u4ef6\u5185\u5bf9\u611f\u5174\u8da3\u7684\u6570\u7ec4\u8fdb\u884c\u5e76\u53d1\u8ba1\u7b97"),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u597d\u7684\u65b9\u6848\uff0c\u5bf9\u6240\u6709\u611f\u5174\u8da3\u7684\u5b9e\u4f53\u6570\u7ec4\uff0c\u5e76\u53d1\u5730\u5b89\u987a\u6267\u884c\u7ec4\u4ef6A\u5bf9\u5e94\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u89e3\u91ca\u5668\u7684\u597d\u5904"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u7531\u4e8eSystem \u770b\u8d77\u6765\u53ef\u80fd\u88ab\u6784\u9020\u591a\u4e2a\u5b9e\u4f8b\uff0c\u6240\u4ee5\u9700\u8981\u89e3\u91ca\u5668\u53ea\u6784\u9020\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u8bb0\u4f4f\u54ea\u4e9b\u7ec4\u4ef6\u5f15\u7528\u4e86\u8fd9\u4e2a\u5b9e\u4f8b\uff0c\u4e5f\u5c31\u662f\u5728Unity\u4e2d\u4e3a\u4e86\u652f\u6301Entity\u7684Query\uff0c\u4ed6\u4e5f\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u6570\u636e\u5e93\u6765\u8bb0\u5f55\u8fd9\u4e9b\u5f15\u7528\u5173\u7cfb\uff0c\u5373\u4f7f\u9488\u5bf9\u7b2c\u4e00\u79cd\u548c\u7b2c\u4e09\u79cd\u7ec4\u4ef6\u4e5f\u662f\u4e00\u6837\u7684"),(0,n.kt)("h4",{id:"2274-ecs\u53c2\u6570"},"2.2.7.4 ECS\u53c2\u6570"),(0,n.kt)("p",null,"\u57fa\u4e8eComponent \u7ec4\u5408\u7684\u65b9\u5f0f\u6539\u53d8\u4e86\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u6a21\u578b\u90fd\u9700\u8981\u53c2\u6570\u4f20\u9012\uff0c\u4e0d\u7ba1\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u7528\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u89c6\u5316\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u58f0\u660e\u5f0f\u7f16\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"HOUDINI \u7a0b\u5e8f\u5316\u7f16\u7a0b")),(0,n.kt)("p",null,"\u4e00\u4e2aSystem \u5904\u7406\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u5206\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u90e8\u5b9a\u4e49\u6570\u636e\uff0c\u5728\u5bf9\u5e94\u7684Component \u4e2d\uff0c\u5185\u90e8\u5b9a\u4e49\u901a\u5e38\u7528\u6765\u4fdd\u5b58\u5e27\u4e0e\u5e27\u4e4b\u95f4\u7684\u5185\u90e8\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5916\u90e8\u5f15\u7528\u6570\u636e\uff0c\u5b9a\u4e49\u4e00\u4e2a\u5168\u5c40\u8f83\u5927\u7684\u516c\u5171\u5c5e\u6027\u540d\u79f0\uff0c\u6bcf\u4e2a\u540d\u79f0\u6709\u7279\u5b9a\u542b\u4e49\uff0c\u4ec5\u6709\u5f15\u7528\u7684\u540d\u79f0\u624d\u4f1a\u52a8\u6001\u7ec4\u5408\u6210\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u673a\u5236\u9760\u7f16\u8bd1\u5668\u6765\u5904\u7406\uff0c\u5168\u5c40\u5c5e\u6027\u8868\u4e4b\u95f4\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u7f16\u8bd1\u5668\u81ea\u52a8\u5f15\u5165\uff1b\u5982\u679c\u4e00\u4e2a\u63d2\u4ef6\u5f00\u53d1\u8005\u6216\u8005Creation\u5f00\u53d1\u8005\u7f16\u5199\u7684\u7ec4\u4ef6\u9700\u8981\u8de8\u7cfb\u7edf\u5f15\u7528\uff0c\u9700\u8981\u5b9a\u4e49\u79c1\u6709\u540d\u79f0\u5217\u8868")),(0,n.kt)("p",null,"Global Name "),(0,n.kt)("p",null,"Private Name"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e00\u6765\uff0cTable Engine \u6240\u505a\u7684\u5927\u90e8\u5206\u64cd\u4f5c\u5c31\u662f\u8fdb\u884c\u6570\u7ec4\u7684\u751f\u6210\u3001\u521d\u59cb\u5316\u3001\u590d\u5236\u3001\u6392\u5e8f\u3001\u4fee\u6539\u3001SOA\u7b49\uff0c\u8fd9\u90e8\u5206\u901a\u8fc7\u539f\u751f\u7684\u9ad8\u6548\u5b9e\u73b0\uff0c\u901a\u5e38Table\u662f\u52a8\u6001\u751f\u6210\u7684\uff0c\u4e0d\u77e5\u9053\u7ef4\u5ea6\u548c\u957f\u5ea6\u7b49\u4fe1\u606f\uff0c\u8fd9\u5c31\u662fTable\u8981\u505a\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"Global Name\u4e2d\u7684\u6bcf\u4e2a\u5c5e\u6027\u540d\u79f0\u90fd\u662f\u5177\u6709\u8bed\u4e49\u7684\uff0c\u76f8\u5f53\u4e8e\u5bbe\u8bed\uff0c\u800c\u6bcf\u4e2aSystem\u5f15\u7528\u7684Name\u90fd\u53ef\u4ee5\u8ffd\u8e2a\uff0c\u56e0\u6b64\u53ef\u4ee5\u5f52\u7eb3\u51faSystem\u5927\u81f4\u7684\u8bed\u4e49\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,"\u5728\u4ec0\u4e48\u6761\u4ef6\u4e0b\u505a\u4ec0\u4e48\u4e8b\u60c5\uff0c\u6761\u4ef6\u901a\u5e38\u662fGlobal Name\u4e2d\u67d0\u4e2a\u5c5e\u6027\u7684\u503c"),(0,n.kt)("p",null,"\u6761\u4ef6 \u4e3b\u8bed \u8c13\u8bed\u52a8\u8bcd \u5bbe\u8bed "),(0,n.kt)("p",null,"\u5982\u679c$NAME<5 System \u7531System\u5f00\u53d1\u8005\u586b\u5199\uff0c\u53ef\u4ee5\u591a\u4e2a Global Name"),(0,n.kt)("p",null,"\u6570\u636e\u5f88\u5c11\u662f\u53ea\u6709\u4e00\u4e2aSystem \u5355\u72ec\u6d88\u8d39\uff0c\u901a\u5e38\u662f\u591a\u4e2aSystem \u4f1a\u5171\u4eab\u4e00\u4e9bcomponent \u6570\u636e\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce\u7ec4\u4ef6\u3001\u52a8\u753b\u7cfb\u7edf\u6216\u5176\u4ed6\u7ec4\u4ef6\u4f1a\u4fee\u6539\u4f4d\u7f6e\uff0c\u800c\u6e32\u67d3\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u8fd9\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u6e32\u67d3"),(0,n.kt)("p",null,"\u4e00\u79cd\u5e38\u7528\u7684\u6a21\u5f0f\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6216\u591a\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u8fdb\u884c\u6d88\u8d39\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u53ea\u8bfb\uff0c\u5e76\u4e14\u4f7f\u7528\u76ee\u7684\u901a\u5e38\u662f\u4e3a\u4e86\u7ed9\u7528\u6237\u53cd\u9988\uff0c\u6216\u8005\u5199\u5165\u5230\u7cfb\u7edf\u6216\u8005\u8fdb\u884c\u6570\u636e\u5b58\u6863")),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u7ec4\u4ef6\u4f1a\u8bbf\u95ee\u6570\u636e\uff0c\u56e0\u6b64\u4e3a\u4e86\u907f\u514d\u6570\u636e\u91cd\u590d\u5b9a\u4e49\uff0c\u6709\u5fc5\u8981\u5b9a\u4e49\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u6807\u51c6\u6570\u636e\u548c\u5bf9\u5e94\u5c5e\u6027\u540d\u79f0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7cfb\u7edf\u901a\u8fc7\u5f15\u7528\u4f7f\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7cfb\u7edf\u4ec5\u4f7f\u7528\u90e8\u5206\u6570\u636e\u5c5e\u6027\uff0c\u901a\u8fc7\u663e\u793a\u58f0\u660e\u5f15\u7528")),(0,n.kt)("h4",{id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"},"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"),(0,n.kt)("p",null,"\u4e24\u79cd\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e8b\u4ef6\uff0c\u53c2\u89c12.2.7.2\u8282\uff0c\u672c\u8d28\u4e0a\u662f\u72b6\u6001\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u8c03\u7528\uff0c\u5c31\u662f\u6b63\u5e38\u65b9\u6cd5")),(0,n.kt)("h4",{id:"2276-\u5355\u4f8b\u7ec4\u4ef6"},"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u6709\u4e00\u7c7b\u7ec4\u4ef6\uff0c\u53ea\u53ef\u4ee5\u6dfb\u52a0\u5230Root\u5bf9\u8c61\u4e0a\uff0c\u5b83\u4e0d\u53ef\u4ee5\u88ab\u6dfb\u52a0\u5230\u4efb\u4f55\u81ea\u5b9a\u4e49\u5b9e\u4f53\u5bf9\u8c61\u4e0a\u3002\u8fd9\u53ef\u4ee5\u7528\u6765\u5904\u7406\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\u3002"),(0,n.kt)("h3",{id:"228-\u6d88\u606f\u901a\u4fe1"},"2.2.8 \u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,"\u7528\u6237\u95f4\u901a\u4fe1\u7684\u60c5\u51b5\u6216\u7c7b\u578b\u6709\u51e0\u4e0b\u51e0\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u548c\u611f\u77e5\uff0c\u8fd9\u662f\u6700\u57fa\u672c\u6743\u9650\uff0c\u8ba9\u522b\u4eba\u53ef\u4ee5\u4e86\u89e3\u4e00\u4e9b\u4f60\u7684\u5c5e\u6027\uff0c\u72b6\u6001 \uff0c\u751a\u81f3\u6027\u683c\uff0c\u4ee5\u53ca\u53ef\u4ee5\u600e\u6837\u4e0e\u4f60\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\uff0c\u6240\u6709\u7528\u6237\u4e4b\u95f4\u7684\u6d89\u53ca\u4fee\u6539\u7684\u64cd\u4f5c\u90fd\u662f\u4e00\u79cd\u4ea4\u6613\uff0c\u4f60\u5fc5\u987b\u6d88\u8017\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90\uff0c\u53e6\u4e00\u65b9\u83b7\u5f97\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90")),(0,n.kt)("p",null,"\u6682\u65f6\u4e0d\u5f00\u653e\u90a3\u79cd\u4f1a\u5bf9\u5176\u4ed6\u4eba\u9020\u6210\u7834\u574f\u6027\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u653b\u51fb\u522b\u4eba\uff0c\u4e5f\u5c31\u662fReality World\u6ca1\u6709\u66b4\u529b\uff0c\u6ca1\u6709\u574f\u4eba\uff0c\u6ca1\u6709\u7834\u574f\u3002"),(0,n.kt)("p",null,"\u4f46\u4f60\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7ecf\u9a8c\u4e0d\u5584\u800c\u7834\u4ea7\uff0c\u4f8b\u5982\u5730\u76ae\u662f\u9700\u8981\u79df\u91d1\u7684\uff0c\u56e0\u6b64\u4f60\u5fc5\u987b\u8d5a\u94b1\uff0c\u5426\u5219\u4f60\u5c31\u6ca1\u6709\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6700\u597d\u7684\u673a\u5236\u662f\u4f60\u7684\u521b\u9020\u529b\u8d8a\u5f3a\uff0c\u4ed8\u51fa\u7684\u65f6\u95f4\u8d8a\u591a\uff0c\u6536\u5165\u8d8a\u9ad8\uff0c\u76f8\u6bd4\u4f20\u7edf\u7684\u6a21\u62df\u7ecf\u8425\u6e38\u620f\u4e3b\u8981 \u4f9d\u8d56\u4e8e\u65f6\u95f4\uff0c\u8fd9\u91cc\u6211\u4eec\u66f4\u5f3a\u8c03\u521b\u9020\u529b\uff0c\u5176\u5b9e\u4e5f\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u80fd\u529b\u3002"),(0,n.kt)("h4",{id:"2281-\u7cfb\u7edf\u673a\u5236"},"2.2.8.1 \u7cfb\u7edf\u673a\u5236"),(0,n.kt)("p",null,"\u4f46\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e9b\u5168\u5c40\u884c\u4e3a\uff0c\u4f8b\u5982\u5929\u6c14\u5bf9\u5168\u4f53\u57ce\u5e02\u4eba\u5458\u7684 \u5f71\u54cd \uff0c\u4f8b\u5982\u653f\u5e9c\u7684\u653f\u7b56\u7b49\uff0c\u8fd9\u4e9b\u540e\u7eed\u518d\u8003\u8651\u3002\u65e9\u671f\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u4ea4\u6613\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6d88\u606f\u901a\u4fe1\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8eID"),"\uff1a\u5728\u7ec4\u4ef6\u5185\u4fdd\u5b58\u7ec4\u4ef6ID\uff0c\u7136\u540e\u76f4\u63a5\u53d1\u9001\u53ea\u7279\u5b9a\u7684\u4e00\u4e2a\u6216\u591a\u4e2aID\uff0c\u5c31\u50cfErlang\u4e2d\u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8e\u7c7b\u578b"),"\uff1a\u4f7f\u7528\u7c7b\u578b+UserID\u8fdb\u884c\u5224\u65ad")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u673a\u5236\u5176\u5b9e\u7c7b\u4f3c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u673a\u5236\uff1a\u9996\u5148\u4f60\u9700\u8981\u53d6\u5f97\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u7136\u540e\u4f60\u5c31\u53ef\u4ee5\u5411\u5176\u53d1\u9001\u6d88\u606f\uff08\u8c03\u7528\u51fd\u6570\uff09\uff0c\u5f53\u7136Erlang\u4f7f\u7528Pid\u8026\u5408\u5ea6\u66f4\u4f4e \u4e00\u4e9b\u3002\u4f46\u8026\u5408\u4ecd\u7136\u662f\u5b58\u5728\u7684\uff0c\u4f8b\u5982\u5bf9\u65b9\u51fd\u6570\u7b7e\u540d\u4fee\u6539\u4e86\uff0c\u6216\u8005\u751a\u81f3\u5220\u9664\u4e0d\u5b58\u5728\u4e86\uff0c\u6216\u8005PID\u88ab\u4fee\u6539\u4e86\uff0c\u90fd\u662f\u53ef\u80fd\u5f15\u8d77\u95ee\u9898\u7684\uff0c\u7a0b\u5e8f\u5f00\u53d1\u8005\u9700\u8981\u53bb\u5c0f\u5fc3\u5730\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\u548c\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"RealityIS\u91c7\u7528\u7684\u662f\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u76f8\u5bf9\u4e8e\u57fa\u4e8eID\u7684\u673a\u5236\u4f1a\u5f15\u5165\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff0c\u5373 N:N\u7684\u5173\u7cfb\uff0c\u57fa\u4e8eID\u7684\u673a\u5236\u672c\u8d28\u4e0a\u662f1:1\u7684\u5173\u7cfb\uff0c\u51761:N\u7684\u5173\u7cfb\u4e5f\u662f\u6309\u987a\u5e8f\u4e00\u4e2a\u4e00\u4e2a\u53d1\u9001\u7684\uff0c\u8fd9\u4e9b\u53d1\u9001\u6d88\u606f\u672c\u8eab\u4e5f\u662f\u6309\u987a\u5e8f\u4e32\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4ecb\u7ecd\u4e24\u79cd\u5e38\u89c1\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Unity\u673a\u5236"),"\uff1aUnity\u7684System\u5e76\u4e0d\u662f\u5355\u4e2a\u7ec4\u4ef6\u7684\u8ba1\u7b97\uff0c\u5b83\u672c\u8d28\u4e0a\u8981\u6c42\u5f00\u53d1\u8005\u7ef4\u62a4\u96c6\u5408\u64cd\u4f5c\u7ed3\u6784\uff0c\u90a3\u4e48\u5bf9\u4e8eN:N\u7684\u95ee\u9898\uff0c\u5f00\u53d1\u8005\u81ea\u5df1\u7f16\u5199\u4e24\u4e2a\u5d4c\u5957\u7684\u5faa\u73af\u7ed3\u6784\u5c31\u53ef\u4ee5\u4e86\uff0c\u4f46\u95ee\u9898\u662f\u6bcf\u4e00\u4e2aSystem\u90fd\u9700\u8981\u7f16\u5199\u8fd9\u79cd\u5faa\u73af\u63a7\u5236\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Erlang\u673a\u5236"),"\uff1a\u5c3d\u7ba1Erlang\u7684\u53d1\u9001\u6d88\u606f\u662f1:1\u7684\uff0c\u4f46\u662f\u63a5\u53d7\u6d88\u606f\u786e\u662fN:1\u7684\uff0cErlang\u7684\u673a\u5236\u662f\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e00\u4e2a\u90ae\u7bb1\u5b58\u50a8\u4e00\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u5e76\u4e0d\u9700\u8981\u611f\u77e5\u5230\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u8fd8\u662f\u5bf9\u5355\u4e2a\u6d88\u606f\u7684\u5904\u7406\uff0c\u4f46\u8981\u6c42\u5f00\u53d1\u8005\u4e3b\u52a8\u7f16\u5199\u4e00\u4e2a\u83b7\u53d6\u6d88\u606f\u7684\u64cd\u4f5c\uff0c\u7136\u540e\u6bcf\u4e2areceive\u7684\u64cd\u4f5c\u5c31\u4f1a\u88ab\u5206\u914d\u4e00\u4e2a\u6d88\u606f\uff0c\u76f4\u81f3\u90ae\u7bb1\u4e2d\u7684\u6240\u6709\u6d88\u606f\u88ab\u5904\u7406\u5b8c\u6bd5")),(0,n.kt)("p",null,"\u663e\u7136Erlang\u7684\u673a\u5236\u5bf9\u5f00\u53d1\u8005\u66f4\u53cb\u597d\u4e00\u4e9b\uff0c\u4f46\u5bf9\u4e8e\u6d88\u606f\u7684\u53d1\u9001\u65b9\u9762\uff0c\u7531\u4e8e\u57fa\u4e8e\u7c7b\u578b\u7684\u8fc7\u6ee4\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u95f4\u63a5\u591a\u540c\u65f6\u5411\u591a\u4e2a\u7ec4\u4ef6\u53d1\u9001\u6d88\u606f\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u8ba9\u5f00\u53d1\u8005\u7ef4\u62a4\u4e00\u4e2aPID\u5217\u8868\u9010\u4e2a\u9010\u4e2a\u53d1\u9001\uff0c\u56e0\u6b64\u9700\u8981\u8fd0\u884c\u65f6\u5c06\u8fd9\u4e2a\u53d1\u9001\u7684\u8fc7\u7a0b\u5f62\u6210\u4e00\u6b21\u5217\u8868\u64cd\u4f5c\uff0c\u6765\u5b9e\u73b0Unity\u673a\u5236\u4e2d\u7684\u5916\u90e8\u5faa\u73af\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u907f\u514d\u5f15\u5165\u5217\u8868\u64cd\u4f5c\u7684\u6982\u5ff5\uff0c\u800c\u4e13\u6ce8\u4e8e\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d1\u9001\u6d88\u606f\u7684\u903b\u8f91\u662f\u901a\u8fc7\u8bfb\u53d6\u7ec4\u4ef6\u5c5e\u6027\u6765\u5b9e\u73b0\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6d88\u606f\u7684\u903b\u8f91\u5219\u662f\u901a\u8fc7\u5199\u5165\u5c5e\u6027\u6765\u5b9e\u73b0\u7684")),(0,n.kt)("p",null,"\u8fd9\u6837\u5c31\u8981\u6c42\u8bfb\u53d6\u7684\u7ec4\u4ef6\u5c5e\u6027\u4e0d\u80fd\u8d85\u8fc71\u4e2a\uff0c\u5426\u5219\u540c\u65f6\u5904\u7406\u591a\u4e2a\u7ec4\u4ef6\u7684\u6d88\u606f\u5c31\u53d8\u5f97\u4e0d\u53ef\u80fd\uff0c\u9664\u975e\u8fd9\u591a\u4e2a\u5c5e\u6027\u540c\u65f6\u6765\u81ea\u4e8e\u540c\u4e00\u4e2a\u5b9e\u4f53\u3002\u8fd9\u4e5f\u662f\u4e00\u79cd\u8fc7\u6ee4\u7684\u6761\u4ef6\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u80fd\u4e0d\u4e00\u5b9a\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8de8\u5b9e\u4f53\u8981\u6c42\u53ea\u8bfb\u53d6\u4e00\u4e2a\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u4e00\u5b9e\u4f53\u53ef\u4ee5\u8bfb\u53d6\u591a\u4e2a\u5c5e\u6027")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u6837\uff0c\u53d1\u9001\u8005\u548c\u63a5\u53d7\u8005\u53ea\u80fd\u662f\u4e00\u4e2a\u5b9e\u4f53\u3002\u8bfb\u53d6\u7684\u6240\u6709\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u53d1\u9001\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u800c\u5199\u5165\u7684\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u63a5\u53d7\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\u3002\u5269\u4e0b\u7684\u95ee\u9898\u5c31\u662fUnity \u4e5f\u9762\u4e34\u7684\u95ee\u9898\uff0c\u5373\u5355\u7eaf\u4f9d\u9760\u7c7b\u578b\u8fc7\u6ee4\u662f\u4e0d\u591f\u7684\uff0c\u9700\u8981\u53e6\u4e00\u4e2a\u5c42\u6b21\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u5c31\u662f\u7528\u6237\u6dfb\u52a0\u7684Type\uff0c\u4f46\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u8003\u8651\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u56e0\u4e3a\u8fd9\u79cd\u7279\u5b9a\u7684\u4e8b\u60c5\u662f\u7531\u4e1a\u52a1\u903b\u8f91\u51b3\u5b9a\u7684\u3002\u5982\u679c\u6709\u5b9a\u4e49\uff0c\u63a5\u53d7\u8005\u548c\u53d1\u9001\u8005\u5fc5\u987b\u624b\u6301\u76f8\u540c\u7684CID\uff0c\u5e76\u4e14\u53ea\u8981\u5176\u4e2d\u4e00\u4e2a\u62e5\u6709CID\uff0c\u5b83\u4eec\u5c31\u4e0d\u80fd\u4e0e\u6240\u6709\u4e0d\u5177\u5907\u76f8\u540cCID\u7684\u7ec4\u4ef6\u8fdb\u884c\u901a\u4fe1\uff0c\u8fdb\u4e00\u6b65\uff0c\u8fd9\u79cdCID\u53ef\u4ee5\u8f6c\u5316\u4e3a\u516c\u94a5\u548c\u79c1\u94a5\uff0c\u907f\u514d\u88ab\u76f8\u540c\u7684CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4f8b\u5982\u653b\u51fb\u8005\u4f1a\u5c1d\u8bd5\u4e0e\u6240\u6709CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4e8b\u5b9e\u4e0a\u4ed6\u5e94\u8be5\u662f\u9ed8\u8ba4\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"2282-\u7ec4\u4ef6\u5b89\u5168"},"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168"),(0,n.kt)("p",null,"\u4e0d\u80fd\u5bf9\u5176\u4ed6\u4eba\u7684Creation\u6216\u8005\u5b9e\u4f53\u8fdb\u884c\u5220\u9664\u6216\u8005\u4fee\u6539\uff0c\u7406\u8bba\u4e0a\uff0c\u5bf9\u5176\u4ed6\u4eba\u7684\u6570\u636e\u53ea\u80fd\u8bfb\u53d6\uff0c\u6240\u6709\u7684\u4fee\u6539\u64cd\u4f5c\u5747\u662f\u4ea4\u6613"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u6709"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u4e4b\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7528\u6237\uff08\u5305\u62ec\u964c\u751f\u4eba\uff09")),(0,n.kt)("h4",{id:"2283-\u6743\u9650\u63a7\u5236"},"2.2.8.3 \u6743\u9650\u63a7\u5236"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u516c\u5171\u5c5e\u6027\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u6838\u5fc3\u5b9a\u4e49\uff0c\u5176\u4ed6\u7684\u5747\u662f\u5bf9\u5b83\u7684\u5f15\u7528\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u5bf9\u8c61\u53ea\u58f0\u660e\u4e00\u6b21\uff0c\u56e0\u6b64\u5b83\u7684\u6743\u9650\u4e5f\u5728\u8fd9\u91cc\u88ab\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5728Creation Script\u4e2d\uff0c\u7531\u4e8e\u53d8\u91cf\u76f4\u63a5\u53d8\u6210\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5b9a\u4e49\u7684\u6982\u5ff5\u88ab\u6a21\u7cca\uff0c\u7b26\u53f7\u8868\u4e4b\u540e\u7684\u5f15\u7528\u6b63\u786e\u88ab\u4fdd\u8bc1\uff0c\u4f46\u662f\u7b26\u53f7\u8868\u7684\u6765\u6e90\u786e\u5b9e\u4e0d\u6e05\u6670\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u63a7\u5236\u53d8\u91cf\u53ea\u80fd\u5728\u4e00\u4e2a\u5730\u65b9\u88ab\u5b9a\u4e49\u3002\u751a\u81f3\u6ca1\u6cd5\u533a\u5206\u662f\u8c01\u201c\u5b9a\u4e49\u4e86\u201d\u53d8\u91cf\u3002\u6bd4\u5982\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u540c\u65f6\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5c5e\u6027\uff0c\u4f46\u5206\u522b\u4f7f\u7528\u4e86\u4e0d\u540c\u7684\u6743\u9650\u63a7\u5236\uff0c\u5219\u53ef\u80fd\u4ea7\u751f\u6b67\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"namespace ComponentA {\n public readonly Global.HP as hp\n}\n\nnamespace ComponentB { \n public readwrite Global.HP as hp\n}\n")),(0,n.kt)("p",null,"\u5f53\u4e0a\u8ff0\u4e24\u4e2a\u7ec4\u4ef6\u88ab\u6dfb\u52a0\u5230\u540c\u4e00\u4e2a\u5b9e\u4f53\u4e86\uff0c\u6743\u9650\u5c06\u53d1\u751f\u6b67\u4e49\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u91cc\u7531\u4ee3\u7801\u5f00\u53d1\u8005\u6765\u5b9a\u4e49\u6743\u9650\u662f\u4e0d\u5408\u9002\u7684\uff0c\u5728\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u4e3a\u4ec0\u4e48\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49\u6743\u9650\uff0c\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u5373\u662f\u5e94\u7528\u7684\u62e5\u6709\u8005\uff0c\u6216\u8005\u8bf4\u5f00\u53d1\u8005\u662f\u6309\u7167\u62e5\u6709\u6240\u5c5e\u8005\u7684\u65e8\u610f\u6216\u610f\u613f\u8fdb\u884c\u8bbe\u7f6e\u7684\uff0c\u6240\u4ee5\u4e0d\u7ba1\u600e\u6837\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u662f\u540c\u4e00\u4eba"),"\u3002"),(0,n.kt)("p",null,"\u968f\u7740UGC\u6216\u7528\u6237\u521b\u4f5c\u5e73\u53f0\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u8eab\u4efd\u7684\u7edf\u4e00\u6027\u53d1\u751f\u4e86\u53d8\u5316\uff1a\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u53ef\u80fd\u662f\u72ec\u7acb\u4e0d\u540c\u7684\u4eba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6743\u9650\u5b8c\u5168\u7531\u5f00\u53d1\u8005\u6307\u5b9a\u662f\u4e0d\u5408\u9002\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u53e6\u5916\u4e00\u4e9b\u7eaf\u8ba1\u7b97\u7684\u6570\u636e\u5c5e\u6027\uff0c\u53ea\u6709\u4ee3\u7801\u5185\u90e8\u624d\u4f1a\u7528\u5230\uff0c\u5e76\u4e14\u7528\u6237\u4e0d\u4f1a\u5173\u5fc3\uff0c\u8fd9\u4e9b\u6570\u636e\u663e\u7136\u662f\u5e94\u8be5\u7531\u5f00\u53d1\u8005\u63a7\u5236\u7684\uff0c\u800c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u533a\u5206\u8fd9\u4e24\u79cd\u53d8\u91cf\u7684\u6743\u9650\uff1a\u903b\u8f91\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u6216\u8005\u7528\u6237\u53d8\u91cf\u3002\u5c3d\u7ba1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49public\u548cprivate\u6743\u9650\uff0c\u4f46\u662f\u8fd9\u79cd\u5b9a\u4e49\u4ecd\u7136\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u7684\u804c\u8d23\u5c31\u4e0d\u662f\u4e3a\u4e86\u533a\u5206\u7528\u6237\u63a7\u5236\u4e0e\u5f00\u53d1\u4e2d\u95f4\u7684\u533a\u522b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u5f80\u5f80\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u610f\u8bc6"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6743\u9650\u548c\u7528\u6237Owner\u9700\u6c42\u4e4b\u95f4\u53ef\u80fd\u662f\u6709\u51b2\u7a81\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u628a\u6743\u9650\u8bbe\u5b9a\u4e4b\u540e\u5c31\u4e0d\u80fd\u66f4\u6539\u4e86\uff0c\u800c\u5b9e\u9645\u4e0a\u7528\u6237\u6743\u9650\u662f\u53ef\u4ee5\u53d1\u751f\u4fee\u6539\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e24\u8005\u4e4b\u95f4\u7684\u5b9a\u4e49\u6ca1\u6709\u5f88\u5f3a\u7684\u7ea6\u675f\u6027\uff0c\u4f8b\u5982\u7406\u8bba\u4e0a\u5f00\u53d1\u8005\u5c06\u6240\u6709\u5c5e\u6027\u90fd\u5b9a\u4e49\u4e3apublic\u90fd\u662f\u53ef\u4ee5\u7684\uff0c\u800cCreation Script\u4fdd\u8bc1public\u5c5e\u6027\u5fc5\u987b\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u4f7f\u5f97\u5f00\u53d1\u8005\u4f1a\u5c0f\u5fc3\u5730\u533a\u5206\u3002")),(0,n.kt)("p",null,"Creation Script\u5b8c\u7f8e\u7684\u533a\u5206\u4e86\u8fd9\u4e24\u8005\u7684\u5b9a\u4e49\uff0c\u5e76\u4e14\u53ef\u4ee5\u5b9e\u73b0\u7528\u6237\u7684\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u6240\u5c5e\u7684\u4e1c\u897f\u662f\u8d44\u4ea7\u62e5\u6709\u8005\u53ef\u4ee5\u968f\u4fbf\u4fee\u6539\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u56fe\u4e66\u9986\uff0c\u7528\u6237\u53ef\u4ee5\u8bbe\u7f6e\u5b83\u662f\u5426\u53ef\u4ee5\u88ab\u8bbf\u95ee\uff0c\u53ef\u4ee5\u5f00\u542f\u548c\u5173\u95ed\u3002\u4f20\u7edf\u7684\u505a\u6cd5\u662f\u628a\u8fd9\u4e9b\u5c5e\u6027\u6620\u5c04\u5230\u4e00\u4e2a\u6570\u636e\u8868\uff0c\u7136\u540e\u7531\u53e6\u4e00\u4e2a\u7a0b\u5e8f\u53bb\u8bfb\u53d6\u5e76\u4fee\u6539\u8fd9\u4e2a\u6570\u636e\u8868\u3002\u8fd9\u4e2a\u6d41\u7a0b\u975e\u5e38\u590d\u6742\uff0c\u589e\u52a0\u4e86\u7a0b\u5e8f\u7684\u590d\u6742\u6027\uff0c\u800cCreation Script\u76f8\u5f53\u4e8e\u662f\u76f4\u63a5\u201c\u4fee\u6539\u7a0b\u5e8f\u201d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u76f4\u63a5\u63a7\u5236\u6570\u636e\uff0c\u751a\u81f3\u76f4\u63a5\u63a7\u5236\u4ee3\u7801\uff0c\u662f\u6211\u4eec\u8fd9\u4e2a\u4e16\u754c\u672c\u6765\u7684\u5f62\u5f0f\u3002")),(0,n.kt)("h4",{id:"2284-\u65f6\u5e8f\u6027"},"2.2.8.4 \u65f6\u5e8f\u6027"),(0,n.kt)("p",null,"\u89c12.3.6.1\u8282\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2285-\u6027\u80fd\u95ee\u9898"},"2.2.8.5 \u6027\u80fd\u95ee\u9898"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h4",{id:"2286-\u4e09\u79cd\u6a21\u5f0f"},"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u51fd\u6570\u7684\u8f93\u51fa\u9650\u5236\u53ea\u6709\u4e00\u4e2a\u53d8\u91cf\uff0c\u8fd9\u4e5f\u662f\u5927\u591a\u6570\u7a0b\u5e8f\u8bed\u8a00\u7684\u89c4\u8303\uff0c\u90a3\u4e48\u51fd\u6570\u4e4b\u95f4\u7684\u8c03\u7528\u6709\u4e09\u79cd\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u81ea\u5df1\u7684\u5176\u4ed6\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u5212\u5206\u4e5f\u9690\u542b\u5730\u610f\u5473\u7740\u53c2\u4e0e\u51fd\u6570\u4ea4\u4e92\u7684\u5bf9\u8c61\u4e0d\u8d85\u8fc72\u4e2a\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u6837\u7684\u5212\u5206\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u7684\u7a0b\u5e8f\u8c03\u7528\uff1a\u53ef\u4ee5\u662f\u4e3b\u52a8\u4fee\u6539\u522b\u4eba\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u662f\u88ab\u52a8\u6d88\u606f\u901a\u77e5\u7684\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u6837\u7684\u5212\u5206\u5bf9\u4e8e\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u6765\u8bb2\uff0c\u4f1a\u5b58\u5728\u4e00\u4e9b\u5e72\u6270\uff0c\u4f7f\u5f97\u53ef\u80fd\u6ca1\u6cd5\u8ba1\u7b97\u51fa\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u4e3a\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u53ef\u80fd\u5b58\u5728\u5faa\u73af\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u8003\u8651\u5230\u4e3b\u52a8\u5f0f\u4fee\u6539\u7684\u5e94\u8be5\u662f\u5c11\u6570\uff0c\u800c\u4e14\u5177\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u9650\u5b9a\u4e3b\u52a8\u5f0f\uff08\u5373\u4e0a\u8ff0\u7b2c\u4e00\u79cd\u60c5\u51b5\uff09\u7684\u7ec4\u4ef6\u603b\u662f\u6700\u4f18\u5148\u6267\u884c\uff0c\u53ea\u6709\u6240\u6709\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u6267\u884c\u5b8c\u4e86\u624d\u4f1a\u6267\u884c\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u65f6\u5019\u7ec4\u4ef6\u7684\u987a\u5e8f\u9700\u8981\u91cd\u65b0\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u66ff\u4ee3\u4e86\u4f20\u7edf\u7684\u6d88\u606f\u5217\u8868\u673a\u5236\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u603b\u662f\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u53ea\u4e0e\u5f53\u524d\u5e27\u6709\u5173\uff0c\u4e0d\u4f1a\u7f13\u5b58\u6d88\u606f\uff0c\u5b9e\u9645\u4e0a\u5b83\u90fd\u4e0d\u9700\u8981\u6d88\u606f\u5217\u8868\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7f16\u7a0b\u4e2d\u7684\u7acb\u5373\u8c03\u7528\uff0c\u4f46\u662f\u6240\u6709\u7684\u7406\u89e3\u8c03\u7528\u662f\u5e76\u884c\u6267\u884c\u7684\u3002")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u662f\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5185\u4fee\u6539\u5176\u4ed6\u7ec4\u4ef6\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u7f13\u5b58\u8fd9\u79cd\u4e00\u6b21\u6027\u7684\u6d88\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u662f\u8fd9\u79cd\u5bf9\u5916\u4e3b\u52a8\u5f0f\u5199\u5165\u7684\u64cd\u4f5c\u4f1a\u5bfc\u81f4\u5e76\u53d1\u51b2\u7a81\u3002"),"Erlang\u4e3a\u4ec0\u4e48\u6ca1\u6709\u5e76\u53d1\u51b2\u7a81\u5c31\u662f\u5b83\u6ca1\u6709\u4e3b\u52a8\u5f0f\u8c03\u7528\uff0c\u90fd\u662f\u54cd\u5e94\u5f0f\u7684\uff0c\u4efb\u4f55\u5bf9\u51fd\u6570\u7684\u8c03\u7528\u90fd\u662f\u8f6c\u6362\u4e3a\u5176\u4ed6\u51fd\u6570\u7684\u6d88\u606f\u5217\u8868\uff0c\u7136\u540e\u518d\u5176\u4ed6\u51fd\u6570\u5185\u90e8\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"229-\u6570\u636e\u4e0e\u5b58\u6863"},"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863"),(0,n.kt)("p",null,"\u63d0\u4f9b\u6570\u636e\u914d\u7f6e\u8868\uff0c\u4ee5\u53ca\u5728\u811a\u672c\u4e2d\u8bbf\u95ee\u6570\u636e\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6570\u636e\u5b58\u50a8\u90fd\u81ea\u52a8\u53d1\u751f\uff0c\u6240\u4ee5\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u7684\u6570\u636e\u90fd\u9700\u8981\u5b58\u6863\uff0c\u4f46\u4e0d\u9700\u8981\u7528\u6237\u6307\u5b9a\u3002"),(0,n.kt)("h4",{id:"2291-\u6570\u636e\u914d\u7f6e"},"2.2.9.1 \u6570\u636e\u914d\u7f6e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc2",src:l(9674).Z,width:"2532",height:"1170"})),(0,n.kt)("h4",{id:"2292-\u5b58\u6863"},"2.2.9.2 \u5b58\u6863"),(0,n.kt)("p",null,"\u5c06\u73a9\u5bb6\u7684\u8fdb\u5ea6\u6570\u636e\u5b58\u6863\uff0c\u9700\u8981\u5b58\u50a8\u81f3\u4e91\u7aef"),(0,n.kt)("h4",{id:"2293-\u4e0d\u8db3"},"2.2.9.3 \u4e0d\u8db3"),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u8ddf\u5bf9\u8c61\u7ba1\u7406\u8d77\u6765\uff0c\u4e0d\u8db3\u7684\u5730\u65b9\u662f\u6570\u636e\u4f1a\u968f\u7740\u5bf9\u8c61\u7684\u5220\u9664\u800c\u5220\u9664\uff0c\u4e0d\u50cf\u4f20\u7edf\u7684\u6570\u636e\u662f\u72ec\u7acb\u5b58\u50a8 \u5728\u6570\u636e\u5e93\u4e2d\uff0c\u5220\u9664\u5bf9\u8c61\u5e76\u4e0d\u4f1a\u5f71\u54cd\u6570\u636e\uff0c\u7136\u540e\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u903b\u8f91\u628a\u6570\u636e\u52a0\u8f7d\u4e0d\u540c\u7684\u5bf9\u8c61\u4e0a\u3002\u8fd9\u5757\u9700\u8981\u6709\u9002\u5f53\u7684\u673a\u5236\u3002"),(0,n.kt)("h3",{id:"2210-\u901a\u7528\u6027"},"2.2.10 \u901a\u7528\u6027"),(0,n.kt)("h4",{id:"22101-\u72ec\u7acb\u7c7b"},"2.2.10.1 \u72ec\u7acb\u7c7b"),(0,n.kt)("p",null,"\u72ec\u7acb\u7684\u7c7b\u5b9a\u4e49\u548cECS\u662f\u7b49\u4ef7\u7684\uff0c\u76f8\u5f53\u4e8e\u628a\u7c7b\u7684\u6bcf\u4e2a\u65b9\u6cd5\u62c6\u4e3a\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u7c7b\u7684\u5b9e\u4f8b\u53d8\u91cf\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\u5171\u4eab\uff0c\u8fd9\u6837\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u53ef\u4ee5\u8bfb\u5199\uff1b\u800cCreation Script\u4f1a\u533a\u5206\u7ec4\u4ef6\u5185\u90e8\u548c\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u6b64\u628a\u4e00\u4e9b\u53ea\u6709\u65b9\u6cd5\u5185\u90e8\u4f1a\u4f7f\u7528\u7684\u53d8\u91cf\u8bbe\u7f6e\u4e3a\u79c1\u6709\u53d8\u91cf\uff0c\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff1b\u800c\u4f20\u7edfOOP\u4e2d\uff0c\u6bcf\u4e2a\u7c7b\u62e5\u6709\u590d\u6742\u7684\u53d8\u91cf--\u56e0\u6b64\u590d\u6742\u7684\u72b6\u6001\uff0c\u8fd9\u4e9b\u72b6\u6001\u6709\u4e9b\u662f\u8868\u5f81\u5b9e\u4f8b\u7ea7\u522b\u72b6\u6001\u7684\uff0c\u800c\u6709\u4e9b\u5219\u53ea\u662f\u5185\u90e8\u4e24\u6b21Update\u4e4b\u95f4\u7684\u4e00\u4e9b\u4e34\u65f6\u72b6\u6001\u3002\u56e0\u6b64\u8fd9\u79cd\u5212\u5206\u4f7f\u7c7b\u7ed3\u6784\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff0c\u6211\u4eec\u80fd\u591f\u533a\u5206\u548c\u5173\u6ce8\u90a3\u4e9b\u771f\u6b63\u5bf9\u5916\u8868\u73b0\u81ea\u8eab\u5c5e\u6027\u7684\u72b6\u6001\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u7406\u8bba\u4e0aA\u548cB\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u4e0d\u9700\u8981\u77e5\u9053\u5bf9\u65b9\u7684\u5b58\u5728\uff0c\u4f46\u8fd9\u79cd\u5b8c\u5168\u65e0\u5173\u7684\u4ea4\u4e92\u5e26\u6765\u7684\u4e00\u4e2a\u540e\u679c\u662f\u7ec4\u4ef6\u6267\u884c\u7684\u987a\u5e8f\u975e\u5e38\u91cd\u8981"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u81ea\u52a8\u8bc6\u522b\u8bfb\u5199\u987a\u5e8f\uff0c\u4f46\u8fd9\u901a\u5e38\u6700\u591a\u4fdd\u8bc1\u8bfb\u548c\u5199\u4e4b\u95f4\uff0c\u4f46\u662f\u591a\u4e2a\u5199\u4e4b\u95f4\u4e5f\u6709\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u5904\u7406\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u540e\u4e00\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52a8\u6807\u8bb0\u6267\u884c\u987a\u5e8f")),(0,n.kt)("h4",{id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"},"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5728A\u548cB\u7ec4\u4ef6\u4e4b\u95f4\u8bbe\u7f6e\u516c\u5171\u53d8\u91cf\uff0c\u5982\uff1a"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"out Global.iHP as iHP\n"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u662fA\u8c03\u7528B\uff0c\u5373A\u9700\u8981\u5411B\u4f20\u9012\u53c2\u6570\uff0c\u5219A\u7684order\u8bbe\u7f6e\u5c0f\u4e8eB\uff0c\u8ba9A\u5148\u4e8eB\u6267\u884c\u5373\u53ef\uff0c\u8fd9\u6837B\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u5f97\u5230A\u8ba1\u7b97\u751f\u6210\u7684\u53c2\u6570")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u90e8\u6709\u591a\u4e2a\u5176\u4ed6\u7c7b\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u6309\u987a\u5e8f\u8bbe\u7f6e\u591a\u4e2a\u7ec4\u4ef6\u7684order"))),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u5c06OOP\u4e2d\u7684\u65b9\u6cd5\u8c03\u7528\u987a\u5e8f\u8f6c\u6362\u4e3a\u7ec4\u4ef6order\u7684\u987a\u5e8f"),(0,n.kt)("h4",{id:"22103-\u6709\u8fd4\u56de\u503c"},"2.2.10.3 \u6709\u8fd4\u56de\u503c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u8f85\u52a9\u65b9\u6cd5\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aLibrary\u800c\u4e0d\u662f\u7ec4\u4ef6\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u5b9e\u4f8b\uff0c\u5177\u6709\u81ea\u5df1\u7684\u5b9e\u4f8b\u53d8\u91cf\uff0c\u8fd9\u4e2a\u65f6\u5019\u9700\u8981\u5c0f\u5fc3\u5730\u5c06\u4e24\u8005\u7684\u65b9\u6cd5\u8c03\u7528\u5173\u7cfb\u62c6\u5206\u5230\u4e24\u5e27\u4e4b\u95f4\uff1aA\u9996\u5148\u6216\u8005B\u4e0a\u4e00\u5e27\u8f93\u51fa\u7684\u7ed3\u679c\uff0c\u8fdb\u884c\u8ba1\u7b97\uff0c\u76f8\u5f53\u4e8eB\u7684\u8fd4\u56de\u503c\uff1b\u7136\u540eA\u5c06\u53c2\u6570\u8f93\u51fa\uff0cB\u6267\u884c\u7684\u65f6\u5019\u6216\u8005A\u7684\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5165\u5230\u5bf9\u7528\u7684\u8f93\u51fa\u53c2\u6570\uff1b\u7136\u540eA\u5728\u4e0b\u4e00\u5e27\u6216\u8005B\u8f93\u51fa\u7684\u53c2\u6570\u8fdb\u884c\u8ba1\u7b97")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5982\u679c\u539f\u6765\u7684OOP\u7c7b\u7279\u522b\u590d\u6742\uff0c\u5c31\u9700\u8981\u5c0f\u5fc3\u5730\u8fdb\u884c\u91cd\u6784\uff0c\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u6709\u4e24\u4e2a\u5373\u4ee5\u4e0a\u7684\u5b9e\u4f8b\u95f4\u51fd\u6570\u8fd4\u56de\u503c\u8c03\u7528\uff0c\u4e0a\u8ff0\u7684\u65b9\u6cd5\u5c31\u4e0d\u884c\uff0c\u9700\u8981\u5bf9\u903b\u8f91\u8fdb\u884c\u8fdb\u4e00\u6b65\u68b3\u7406\uff0c\u6bd4\u5982\u5982\u679c\u662f\u524d\u540e\u6ca1\u6709\u4f9d\u8d56\u72ec\u7acb\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u53ef\u4ee5\u5f88\u597d\u6ef4\u62c6\u5206"),(0,n.kt)("h4",{id:"22104-\u7ee7\u627f"},"2.2.10.4 \u7ee7\u627f"),(0,n.kt)("p",null,"\u7ee7\u627f\u901a\u8fc7\u7ec4\u5408\u5b9e\u73b0"),(0,n.kt)("h4",{id:"22105-\u7ed3\u6784\u4f53"},"2.2.10.5 \u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u7531\u4e8e\u5e95\u5c42\u7684Creation Table Engine\u9700\u8981\u4fdd\u8bc1\u6570\u636e\u662f\u7b80\u5355\u7684\u6570\u7ec4\u7ed3\u6784\uff0c\u56e0\u4e3a\u4e0d\u80fd\u8bbe\u7f6e\u592a\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u4e0d\u652f\u6301\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u53ea\u652f\u6301\u57fa\u672c\u7c7b\u578b\u548c\u77e2\u91cf\u7b49\u57fa\u672c\u7c7b\u578b\uff0c\u5176\u4e2dVector\u901a\u8fc7\u5185\u90e8\u7ed3\u6784\u8fdb\u884c\u5904\u7406"),(0,n.kt)("p",null,"\u5f53\u7136\u5176\u5b9e\u7ec4\u4ef6\u7684\u6570\u636e\u672c\u8eab\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7ed3\u6784\u4f53\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u9700\u8981\u5171\u4eab\u591a\u4e2a\u53d8\u91cf\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u591a\u4e2aout\u53c2\u6570\u5b9e\u73b0\uff0c\u8fd9\u5c31\u76f8\u5f53\u4e8e\u4f20\u9012\u4e00\u4e2a\u9690\u5f0f\u7684\u7ed3\u6784\u4f53\u3002"),(0,n.kt)("h4",{id:"22106-\u63a7\u5236tick\u7684\u9891\u7387"},"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387"),(0,n.kt)("h3",{id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670"),(0,n.kt)("h4",{id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c"},"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c"),(0,n.kt)("p",null,"\u5269\u4e0b\u64cd\u4f5c\u53ea\u6709\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6 ."),(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u8fd0\u7b97\uff0c+=")),(0,n.kt)("p",null,"\u5176\u4e2d\u8bfb\u53d6\u64cd\u4f5c\u4e3b\u8981\u7528\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5224\u65ad\u8d44\u6e90\u662f\u5426\u591f\u7528\uff0c\u5982\u679c\u4e0d\u591f\u7528\u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u4f7f\u7528\u65b9\u53ef\u4ee5\u65b9\u4fbf\u663e\u793a\u4e00\u4e9b\u63d0\u793a\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e9b\u4f9d\u8d56\u4e8e\u603b\u91cf\u7684\u589e\u91cf\u8fd0\u7b97\uff0c\u4f8b\u5982\u589e\u52a0\u603b\u91cf\u768410%")),(0,n.kt)("h4",{id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165"},"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165"),(0,n.kt)("p",null,"\u8d44\u6e90\u7684\u4e24\u79cd\u6d41\u52a8\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d41\u5165\u6a21\u5f0f\uff0c\u4e00\u822c\u5bf9\u5e94\u4e8e\u6536\u96c6\u8d44\u6e90\uff0c\u6b64\u65f6\u9700\u8981\u628a\u4e00\u5b9a\u6570\u91cf\u7684\u8d44\u6e90\u4f20\u5165\u4e00\u4e2a\u5bb9\u5668\uff0c\u800c\u4e0d\u662f\u7531\u8be5\u5bb9\u5668\u53bb\u62c9\u53d6\uff0c\u56e0\u4e3a\u5b83\u5e76\u6ca1\u6709\u4e00\u4e2a\u62c9\u53d6\u6e90\uff0c\u800c\u662f\u76f4\u63a5\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u589e\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u62c9\u53d6\u6a21\u5f0f\uff0c\u5f53\u6211\u4eec\u9700\u8981\u6d88\u8017\u8d44\u6e90\u5df2\u5b8c\u6210\u67d0\u4ef6\u4e8b\u60c5\u65f6\uff0c\u901a\u5e38\u7531\u5b8c\u6210\u8be5\u4e8b\u60c5\u7684\u5b9e\u4f53\u4ece\u8d44\u6e90\u5bb9\u5668\u8fdb\u884c\u62c9\u53d6\uff0c\u8be5\u5b9e\u4f53\u9996\u5148\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u51cf\u91cf\u8ba1\u7b97\uff08\u5f53\u7136\u9700\u8981\u5224\u65ad\u5bb9\u91cf\u662f\u5426\u8db3\u591f\uff09\uff0c\u7136\u540e\u6267\u884c\u81ea\u5df1\u7684\u5904\u7406\u903b\u8f91\uff1b")),(0,n.kt)("p",null,"\u9664\u4e86\u751f\u4ea7\u8d44\u6e90\u7684\u6e90\u5934\uff0c\u5927\u90e8\u5206\u903b\u8f91\u90fd\u5e94\u8be5\u662f\u62c9\u53d6\u6a21\u5f0f\u3002\u8fd9\u91cc\u4e3b\u8981\u7684\u539f\u56e0\u662f\u8026\u5408\uff1a\u5982\u679c\u9700\u8981\u8d44\u6e90\u53d8\u5316\u7684\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u5176\u4ed6\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u662f\u4e0d\u5408\u7406\u7684\uff0c\u8d44\u6e90\u7684\u53d8\u5316\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u77e5\u9053\u8fd9\u4e9b\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u903b\u8f91\u662f\u53d8\u5316\u7684\uff0c\u53ef\u80fd\u589e\u52a0\u65b0\u7684\u903b\u8f91\uff0c\u90a3\u4e48\u8fd9\u6839\u672c\u65e0\u6cd5\u5b9e\u73b0")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e94\u8be5\u662f\u7531\u54cd\u5e94\u7ec4\u4ef6\u6765\u62c9\u53d6\uff0c\u5982\u679c\u67d0\u4e2a\u503c\u53d8\u5316\u4e86\uff0c\u611f\u5174\u8da3\u7684\u7ec4\u4ef6\u81ea\u884c\u6765\u8bfb\u53d6\u503c\u8fdb\u884c\u903b\u8f91\u5904\u7406\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ef\u80fd\u968f\u65f6\u589e\u52a0\u5bf9\u8fd9\u4e9b\u53d8\u5316\u611f\u5174\u8da3\u7684\u65b0\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"},"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u4e2d\uff0c\u8c03\u7528\u67d0\u4e2a\u51fd\u6570\u4f20\u9012\u7684\u53c2\u6570\u901a\u5e38\u662f\u589e\u91cf\u503c\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u6263\u9664\u591a\u5c11\u8840\u91cf\u3002\u8fd9\u4e2a\u51fd\u6570\u4e00\u65e6\u8c03\u7528\u5b8c\u6bd5\uff0c\u5219\u9700\u8981\u4e0b\u4e00\u6b21\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u624d\u4f1a\u518d\u6b21\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728OOP\u7684\u505a\u6cd5\u662f\uff0c\u4e00\u4e2a\u5927\u7684\u51fd\u6570\u4f53\uff0c\u6709\u5f88\u591a\u5206\u652f\uff0c\u51fd\u6570\u9996\u5148\u5224\u65ad\u8f93\u5165\uff0c\u5982\u679c\u9002\u914d\u6280\u80fd\u7684\u4f7f\u7528\uff0c\u5c31\u8fdb\u884c\u6280\u80fd\u91ca\u653e\u5206\u652f\uff0c\u7136\u540e\u8fdb\u800c\u5bf9\u5b9e\u9645\u7684\u6263\u8840\u7684\u51fd\u6570\u8fdb\u884c\u8c03\u7528\uff1b\u5982\u679c\u6ca1\u6709\u8f93\u5165\u53d1\u751f\u6216\u8005\u6ca1\u6709\u8fdb\u5165\u6280\u80fd\u6267\u884c\u5206\u652f\uff0c\u5219\u540e\u7eed\u7684\u51fd\u6570\u5c31\u4e0d\u4f1a\u88ab\u8c03\u7528\u3002\u5c3d\u7ba1\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u6280\u80fd\u7684\u6263\u8840\u589e\u91cf\u503c\u8fd8\u662f\u88ab\u5b58\u653e\u5728\u6280\u80fd\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u5207\u7ec4\u4ef6\u90fd\u662f\u6241\u5e73\u7684\uff0c\u610f\u5473\u7740\u524d\u9762\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u5206\u652f\u6765\u963b\u6321\u524d\u9762\u7684\u6d41\u7a0b\uff0c\u6240\u6709\u7ec4\u4ef6\u9ed8\u8ba4\u90fd\u4f1a\u88ab\u6267\u884c\u3002\u4e3a\u4e86\u5b9e\u73b0\u529f\u80fd\uff0c\u6709\u4e24\u79cd\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u589e\u91cf\u5c5e\u6027\u90fd\u5bf9\u5e94\u4e00\u4e2a\u72b6\u6001\u91cf\uff0c\u4ee5\u8bf4\u660e\u662f\u5426\u9700\u8981\u6267\u884c\u540e\u7eed\u7684\u64cd\u4f5c\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u628aOOP\u65b9\u6cd5\u4e2d\u90a3\u4e9b\u5206\u652f\u8f6c\u6362\u4e3a\u72b6\u6001\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u589e\u51cf\u7ec4\u4ef6\uff0c\u4f8b\u5982\u6ca1\u6709\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u5c31\u5220\u9664\u6280\u80fd\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u5728\u5b9e\u8df5\u4e0a\u5f88\u96be\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6c38\u8fdc\u4f20\u9012\u589e\u91cf\uff0c\u4f8b\u5982\u6280\u80fd\u7ec4\u4ef6\uff0c\u5982\u679c\u91ca\u653e\u5f53\u505a\u6267\u884c\uff0c\u4fee\u6539\u503c\u5c31\u8bbe\u7f6e\u4e3a\u67d0\u4e2a\u5177\u4f53\u7684\u6570\u503c\uff0c\u5426\u5219\u5c31\u8bbe\u7f6e\u4e3a0\uff0c\u8fd9\u6837\u5bf9\u540e\u7eed\u7ec4\u4ef6\u6ca1\u6709\u5b9e\u8d28\u6027\u7684\u5f71\u54cd\uff0c\u8fd9\u91cc\u6570\u503c0\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u72b6\u6001\u503c\uff0c\u4ed6\u544a\u8bc9\u540e\u7eed\u7ec4\u4ef6\u8be5\u4e8b\u4ef6\u6ca1\u6709\u53d1\u751f\uff0c\u4f46\u53c8\u53ef\u4ee5\u8ba9\u540e\u7eed\u7ec4\u4ef6\u4e0d\u9700\u8981\u5904\u7406\u72b6\u6001\uff0c\u8ba4\u4e3a\u4e00\u76f4\u5728\u53d1\u751f\u3002")),(0,n.kt)("p",null,"\u7b2c\u4e09\u79cd\u60c5\u51b5\u662f\u6700\u7b80\u5355\u7684\u67b6\u6784\uff0c\u4f46\u662f\u5b58\u5728\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u76f8\u5f53\u4e8e\u4f20\u7edfOOP\u4e2d\u90a3\u4e9b\u6240\u6709\u7684\u5206\u652f\u90fd\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u6216\u8005\u6bcf\u5e27\u5f00\u59cb\u4e4b\u524d\uff0c\u9700\u8981\u5bf9\u589e\u91cf\u503c\u8fdb\u884c\u6e05\u96f6\u64cd\u4f5c")),(0,n.kt)("p",null,"\u524d\u8005\u53ef\u4ee5\u901a\u8fc7\u914d\u5408change-driven\u7684\u67b6\u6784\u6765\u5b9e\u73b0\uff0c\u800c\u5bf9\u4e8e\u540e\u8005\uff0c\u4f8b\u5982\u5bf9\u4e8e\u589e\u91cf\u7ec4\u4ef6\u6765\u8bb2\uff0c\u5b83\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u5f71\u54cd\u662f\u5904\u4e8e\u5916\u5faa\u73af\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u5728\u6267\u884c\u5b8c\u6240\u6709\u88ab\u901a\u77e5\u7ec4\u4ef6\u4e4b\u540e\u81ea\u52a8\u6e05\u96f6\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u8981\u533a\u5206\u54ea\u4e9b\u662f\u589e\u91cf\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u505a\u6cd5\u662f\uff0c\u8ba9\u4e3b\u52a8\u53d1\u751f\u6d88\u606f\u7684\u7ec4\u4ef6\u81ea\u5df1\u7ef4\u62a4\u589e\u91cf\u503c\uff0c\u8fd9\u6837\u5c31\u9700\u8981\u4fdd\u8bc1\u8fd9\u7c7b\u7ec4\u4ef6\u7528\u4e8e\u90fd\u9700\u8981\u6267\u884c\uff0c\u4e0d\u53d7change-driven\u673a\u5236\u7684\u5f71\u54cd\u3002\u4f8b\u5982\u5bf9\u4e8e\u91ca\u653e\u6280\u80fd\u7684\u7ec4\u4ef6\uff0c\u5b83\u6bcf\u5e27\u7684\u76d1\u542c\u8f93\u5165\uff0c\u5982\u679c\u8f93\u5165\u9002\u914d\uff0c\u5c31\u5c06\u589e\u91cf\u8bbe\u7f6e\u4e3a\u9884\u8bbe\u503c\uff0c\u5426\u5219\u8bbe\u7f6e\u4e3a0\u3002\u8fd9\u79cd\u65b9\u6cd5\u5e94\u8be5\u662f\u6700\u7b80\u5355\u7684\uff0c\u4e0d\u80fd\u7ed9\u8fd0\u884c\u65f6\u52a0\u5165\u592a\u591a\u903b\u8f91\u7684\u4e1c\u897f\uff0c\u800c\u4e14\u901a\u5e38\u53d1\u51fa\u4e8b\u4ef6\u7684\u7ec4\u4ef6\u6570\u91cf\u662f\u5c11\u6570\u7684\uff0c\u4f8b\u5982\u5927\u90e8\u5206\u65f6\u95f4\u65f6\u95f4\u90fd\u662f\u968f\u65f6\u8f93\u5165\u6216\u8005\u67d0\u4e9b\u7528\u6237\u4ea4\u4e92\u89e6\u53d1\u7684\uff0c\u8fdb\u800c\u89e6\u53d1\u4e00\u8fde\u4e32\u7684\u8ba1\u7b97\uff0c\u5982\u679c\u6e90\u5934\u4e0d\u4f1a\u4f20\u9012\uff0c\u540e\u7eed\u7684\u5f88\u591a\u8ba1\u7b97\u4e5f\u95f4\u63a5\u7701\u6389\u4e86\uff0c\u5c31\u50cfOOP\u4e2d\u7684\u5206\u652f\u90a3\u6837\u3002\u4f46\u662f\u76f8\u5bf9\u4e8eOOP\uff0c\u81f3\u5c11\u53ef\u4ee5\u8282\u7701\u8ba1\u7b97\uff0c\u4f46\u7701\u4e0d\u4e86\u5185\u5b58\u3002"),(0,n.kt)("h4",{id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"},"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"),(0,n.kt)("p",null,"\u5982\u679c\u5168\u90e8\u4f7f\u7528\u62c9\u53d6\uff0c\u4f1a\u5b58\u5728\u6548\u7387\u7684\u95ee\u9898\uff0c\u5e76\u4e14\u62c9\u53d6\u8981\u6c42\u88ab\u5f71\u54cd\u7740\u81ea\u884c\u652f\u6301\u76f8\u5173\u903b\u8f91\uff0c\u8fd9\u6709\u65f6\u5019\u4e0d\u591f\u7075\u6d3b\uff0c\u4f8b\u5982\u5df2\u6709\u7684\u7ec4\u4ef6\u6ca1\u6709\u8fd9\u4e2a\u903b\u8f91\uff0c\u5982\u679c\u65b0\u52a0\u4e00\u4e2a\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u8fd9\u4e9b\u903b\u8f91\uff0c\u90a3\u4e48\u4fee\u6539\u4f1a\u53d8\u5f97\u7b80\u5355\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5f00\u653e\u578b\u53ef\u4e92\u64cd\u4f5c\u7684\u7a0b\u5e8f\uff0c\u4e5f\u8bb8\u8fd9\u6837\u7684\u903b\u8f91\u662f\u5408\u7406\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u6743\u9650\u5185\u7684\u7ec4\u4ef6\u4f7f\u7528\u4e3b\u52a8\u5199\u5165\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f7f\u7528\u62c9\u53d6\u7684\u65b9\u5f0f")),(0,n.kt)("p",null,"\u5199\u5165\u7684\u65b9\u5f0f\u5012\u662f\u5f88\u597d\u5b9e\u73b0\uff0c\u6bd4\u5982\u901a\u8fc7writein\u6216\u8005writeout\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u63a8\u5bfc\u51fa\u5e94\u8be5\u600e\u6837\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u540c\u65f6\u652f\u6301\u53cc\u5411\u7684\u64cd\u4f5c\uff0c\u6709\u53ef\u80fd\u5c06\u4f7f\u5f97\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\u4e0d\u53ef\u63a8\u5bfc\u3002\u8fd9\u65b9\u9762\u540e\u7eed\u9700\u8981\u597d\u597d\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"2212-\u7b26\u53f7\u6cdb\u578b"},"2.2.12 \u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22121-\u53d8\u91cf\u540d\u79f0"},"2.2.12.1 \u53d8\u91cf\u540d\u79f0"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5305\u542b\u6570\u636e\u7ed3\u6784\uff0c\u53ea\u80fd\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u7ed3\u6784\u4f53\u6709\u540d\u79f0\uff0c\u7ed3\u6784\u4f53\u4e2d\u7684\u53d8\u91cf\u4e5f\u5305\u542b\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u5b9a\u4e49\u65b0\u7684\u7ed3\u6784\uff0c\u800c\u53ea\u80fd\u4f7f\u7528\u5143\u7ec4\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7b26\u53f7\u5b9a\u4e49\u5230\u7ec4\u4ef6\u53d8\u91cf\u4e4b\u95f4\u7684\u6620\u5c04\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Point \n{\n X = 10,\n Y = 20.0\n Z = 30.0\n}\n")),(0,n.kt)("h4",{id:"22122-\u6a21\u5f0f\u5339\u914d"},"2.2.12.2 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4f7f\u7b26\u53f7\u5b9a\u4e49\u4e0e\u7ec4\u4ef6\u53d8\u91cf\u540d\u79f0\u4e4b\u95f4\u8fdb\u884c\u89e3\u8026\uff0c\u53ef\u4ee5\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002\u4f46\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684=\u7b26\u53f7\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd8\u662f\u9700\u8981\u8d4b\u503c\u7b26\u53f7\uff0c\u8fd9\u91cc\u4f7f\u7528\u64cd\u4f5c\u7b26as\uff0c\u4f46\u5b83\u7684\u610f\u4e49\u5c31\u76f8\u5f53\u4e8eFP\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,"\u6ce8\u610f\uff0c\u5728Lua\u4e2d\u4f7f\u7528\u7d22\u5f15\u503c\u6765\u907f\u514d\u8c03\u7528\u8005\u8ddf\u88ab\u8c03\u7528\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u81ea\u7136\uff0c\u8fd8\u662f\u9700\u8981\u5f15\u5165\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u5c06\u503c\uff08\u5185\u5b58\u5730\u5740\uff09\u7ed1\u5b9a\u5230\u771f\u6b63\u81ea\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u79f0\u4e0a\u3002"),(0,n.kt)("p",null,"CS\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u53ea\u5728\u7ec4\u4ef6\u53d8\u91cf\u7ed1\u5b9a\u65f6\u4f7f\u7528\uff0c\u5176\u4ed6\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u79f0\u4e3a\u7b26\u53f7\u7ed1\u5b9a\u66f4\u6709\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u53d8\u91cf\u7ed1\u5b9a\u5fc5\u987b\u6765\u81ea\u4e8e\u7b26\u53f7\u8868\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u66ff\u6362\uff0c\u4f46\u4e5f\u662f\u66ff\u6362\u53e6\u4e00\u4e2a\u7b26\u53f7\u8868\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(X, Y, Z) <- Point //read from\nH -> HP //write to\n")),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u5b9e\u73b0\u4e86\u56db\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\uff1a\u5373\u4f7f\u7ed3\u6784\u540d\u5b57\u6216\u8005\u5185\u90e8\u53d8\u91cf\u7684\u540d\u5b57\u4e0d\u540c\uff0c\u53ea\u8981\u7c7b\u578b\u5339\u914d\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u53c2\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u6cdb\uff1a\u53ef\u4ee5\u5c06\u9ed8\u8ba4\u7684Point\u7b26\u53f7\u66ff\u6362\u4e3a\u5176\u4ed6\u7ed3\u6784\u76f8\u540c\u7684\u7b26\u53f7\uff0c\u4ece\u800c\u5b9e\u73b0\u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u5199\uff1a\u5199\u5165\u6570\u636e\uff0c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u5165\u5230\u53d8\u91cf\uff0c\u6216\u8005\u8bf4\u9700\u8981\u6784\u9020\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u5efa\uff1a\u9664\u4e86\u83b7\u53d6\u53d8\u91cf\u53ca\u7ed1\u5b9a\u4e4b\u5916\uff0c\u6784\u9020\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u53caSpaw\u51fd\u6570\u53ef\u80fd\u4e5f\u9700\u8981\u6a21\u5f0f\u5339\u914d\u3002")),(0,n.kt)("h4",{id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"},"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u7c7b\u578b\u4e3b\u8981\u7528\u4e8e\u4e0d\u540c\u7c7b\u6216\u8005\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u591a\u53d8\u91cf\u7684\u805a\u5408\u65b9\u5f0f\uff0c\u53ea\u9700\u8981\u4f20\u64ad\u5355\u4e2a\u7c7b\u578b\u53d8\u91cf\u540d\u79f0\u65e2\u53ef\u4ee5\u4f20\u9012\u591a\u4e2a\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u4e00\u4e2a\u65b9\u6cd5\u5185\u90e8\u6765\u8bb2\uff0c\u4ed6\u8981\u5904\u7406\u7684\u5168\u90e8\u662f\u5355\u4e2a\u53d8\u91cf\uff0c\u591a\u53d8\u91cf\u805a\u5408\u7684\u540d\u79f0\u5bf9\u4e8e\u51fd\u6570\u6765\u8bb2\u6ca1\u6709\u610f\u4e49\uff0c\u53cd\u800c\u9700\u8981\u66f4\u590d\u6742\u7684\u673a\u5236\u53bb\u65b9\u6cd5\u805a\u5408\u4f53\u5185\u90e8\u7684\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bb2\uff0c\u6a21\u5f0f\u5339\u914d\u7b80\u5316\u4e86\u8fd9\u79cd\u5bf9\u5b9e\u9645\u5185\u90e8\u53d8\u91cf\u7684\u8bbf\u95ee\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u5b83\u5e26\u6765\u7684\u4e0d\u597d\u4e00\u9762\uff0c\u53ef\u80fd\u662f\u6784\u9020\u5b9e\u4f8b\u7684\u65f6\u5019\u4e0d\u80fd\u4ee5\u4e00\u4e2a\u805a\u5408\u7c7b\u578b\u7684\u6574\u4f53\u8fdb\u884c\u8d4b\u503c\uff0c\u800c\u662f\u9700\u8981\u5bf9\u5176\u4e2d\u7684\u6bcf\u4e2a\u53d8\u91cf\u90fd\u8d4b\u503c\uff0c\u4f46\u662f\u5176\u5b9e\u672c\u6765\u4e5f\u662f\u9700\u8981\u5bf9\u6bcf\u4e2a\u53d8\u91cf\u8d4b\u503c\u7684\u3002"),(0,n.kt)("h3",{id:"2213-\u5e76\u53d1"},"2.2.13 \u5e76\u53d1"),(0,n.kt)("p",null,"\u9762\u5411\u5bf9\u8c61\u7684\u65e0\u5e8f\u76f8\u4e92\u5f15\u7528\uff0c\u901a\u5e38\u5bfc\u81f4\u5e76\u53d1\uff0c\u800c\u903b\u8f91\u4e0a\u4ed6\u4eec\u4e0d\u4e00\u5b9a\u6709\u5e76\u53d1\uff0c\u800c\u4e14\u6211\u4eec\u6ca1\u6709\u529e\u6cd5\u4ece\u903b\u8f91\u4e0a\u53bb\u63a7\u5236\u8fd9\u79cd\u5e76\u53d1\u7684\u987a\u5e8f\uff0c\u592a\u590d\u6742\uff0c\u5b8c\u5168\u65e0\u6cd5\u9884\u6599\u5bf9\u8c61\u4e4b\u95f4\u4ee5\u4ec0\u4e48\u6837\u7684\u987a\u5e8f\u548c\u65f6\u673a\u89e6\u53d1\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u4ee5\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\u7ec4\u7ec7\uff0c\u80fd\u591f\u66f4\u597d\u5730\u63a7\u5236\u903b\u8f91\u7684\u987a\u5e8f\uff0c\u4ece\u800c\u80fd\u8ddf\u5728\u903b\u8f91\u4e0a\u6bd4\u8f83\u7b80\u5355\u5730\u907f\u514d\u6389\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u5e76\u53d1"),(0,n.kt)("p",null,"\u5c06\u5171\u4eab\u53d8\u91cf\u548c\u79c1\u6709\u53d8\u91cf\u533a\u5206\uff0c\u79c1\u6709\u53d8\u91cf\u4e0d\u4f1a\u89e6\u53d1\u5e76\u53d1\uff0c\u800c\u5171\u4eab\u53d8\u91cf\u56e0\u4e3a\u4ece\u7b26\u53f7\u8868\u5f15\u7528\uff0c\u4ece\u800c\u7f16\u8bd1\u5668\u80fd\u591f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u7ec4\u4ef6\u5bf9\u5171\u4eab\u53d8\u91cf\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u6bd4\u5982\u80fd\u591f\u628a\u4e00\u4e9b\u76f8\u4e92\u72ec\u7acb\u7684\u7ec4\u4ef6\u5e76\u884c\u6267\u884c"),(0,n.kt)("p",null,"\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\uff0c\u90a3\u4e2a\u5bf9\u8c61\u6267\u884c\u7684\u903b\u8f91\u592a\u590d\u6742\uff0c\u5b58\u5728\u4e0d\u53ef\u9884\u6d4b\u7684\u5206\u652f\u3001\u8df3\u8f6c\u7b49\u903b\u8f91\uff0c\u90a3\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\u53ef\u80fd\u5bfc\u81f4\u4e0d\u53ef\u9884\u6d4b\u7684\u6307\u4ee4\u6267\u884c\u987a\u5e8f\u548c\u5e8f\u5217\uff0c\u56e0\u800c\u65e0\u6cd5\u5f88\u597d\u5730\u4f7f\u7528\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u56e0\u6b64\u901a\u5e38\u53ea\u80fd\u4f9d\u8d56\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u4f46\u4e0d\u53ef\u9884\u6d4b\u7684\u6df7\u4e71\u7684\u5bf9\u8c61\u5f15\u7528\u5173\u7cfb\u5c06\u5927\u5927\u5730\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898"),(0,n.kt)("p",null,"\u901a\u8fc7\u7cbe\u5fc3\u5c06\u540c\u4e00\u7ec4\u4ef6\u7684\u6570\u636e\u7ec4\u7ec7\u6210\u6570\u7ec4\uff0c\u4e0d\u5149\u662f\u80fd\u591f\u63a7\u5236\u903b\u8f91\u987a\u5e8f\uff0c\u4ece\u800c\u907f\u514d\u4e00\u90e8\u5206\u5e76\u53d1\uff0c\u540c\u65f6\u5c06\u5bf9\u8c61\u7ea7\u522b\u7684\u7ebf\u7a0b\u5e76\u884c\u8f6c\u5316\u4e3a\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u8fdb\u4e00\u6b65\uff0c\u901a\u8fc7\u5bf9\u4f9d\u8d56\u5173\u7cfb\u7684\u8bc6\u522b\u80fd\u591f\u66f4\u597d\u5730\u5c06\u591a\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u6267\u884c\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u8fd9\u91cc\u7684\u6838\u5fc3\u662f\u80fd\u591f\u901a\u8fc7\u5168\u5c40\u7b26\u53f7\u8868\u548c\u663e\u5f0f\u5171\u4eab\u5173\u7cfb\u8bc6\u522b\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("h4",{id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b"},"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"22132-erlang\u53caoop"},"2.2.13.2 Erlang\u53caOOP"),(0,n.kt)("h4",{id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"},"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"),(0,n.kt)("h3",{id:"2214-\u667a\u80fd\u611f\u77e5"},"2.2.14 \u667a\u80fd\u611f\u77e5"),(0,n.kt)("p",null,"\u5f53\u9760\u8fd1\u4e00\u4e2a\u7269\u4f53\uff0c\u6216\u8005\u4f7f\u7528\u4e00\u4e2a\u7279\u5b9a\u7684\u63a2\u7d22\u547d\u4ee4\u7684\u65f6\u5019\uff0c\u5982\u679c\u5176\u672c\u8eab\u4e0d\u5177\u5907\u8bc6\u522b\u5bf9\u65b9\u7684\u64cd\u4f5c\uff0c\u53ef\u4ee5\u52a8\u6001\u67e5\u8be2\u5bf9\u65b9\u7684\u5c5e\u6027\uff0c\u7136\u540e\u52a8\u6001\u63d0\u793a\u662f\u5426\u9700\u8981\u5b89\u88c5\u65b0\u7684\u64cd\u4f5c\u811a\u672c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6bcf\u4e2a\u811a\u672c\u9700\u8981\u7528\u6237\u624b\u52a8\u9009\u62e9\uff0c\u4e0d\u53ef\u80fd\u81ea\u52a8\u5b89\u88c5\u6240\u6709\u811a\u672c\uff0c\u4f46\u662f\u7cfb\u7edf\u672c\u8eab\u662f\u53ef\u4ee5\u611f\u77e5\u7684\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u8d2d\u4e70\u4e00\u8f86\u8f66\uff0c\u9700\u8981\u4f7f\u7528\u7279\u5b9a\u7684\u8d2d\u4e70\u65b9\u5f0f\u7b49\u3002"),(0,n.kt)("p",null,"\u4e24\u4e2a\u76ee\u6807\u6216\u4ef7\u503c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u79fb\u9664"),"\uff1a\u5f53\u4e00\u4e2a\u573a\u666f\u4e2d\u5e76\u4e0d\u5305\u542b\u67d0\u4e2a\u811a\u672c\u53ef\u64cd\u4f5c\u7684\u5b9e\u4f53\u65f6\uff0c\u53ef\u4ee5\u79fb\u9664\u4e00\u4e9b\u7ec4\u4ef6\uff0c\u6216\u8005\u5355\u7eaf\u7565\u8fc7\u8fd9\u4e9b\u7ec4\u4ef6\uff08\u51fa\u4e8e\u52a8\u6001\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff09\uff0c\u6bd4\u5982\u7528\u6237\u89d2\u8272\u53ef\u80fd\u5b89\u88c5\u975e\u5e38\u591a\u7684\u611f\u77e5\u548c\u4ea4\u4e92\u7ec4\u4ef6\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u53ef\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u6dfb\u52a0"),"\uff1a\u6709\u4e9b\u7c7b\u578b\u7684\u5b9e\u4f53\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u544a\u7269\u4f53\uff0c\u901a\u5e38\u5176\u672c\u8eab\u5e76\u4e0d\u5305\u542b\u5168\u573a\u666f\u7684\u673a\u5236\uff0c\u4ed6\u4eec\u53ea\u662f \u4e34\u65f6\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u667a\u80fd\u8d2d\u4e70"),"\uff1a\u8ba9\u7528\u6237\u5728\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70")),(0,n.kt)("h3",{id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92"},"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92"),(0,n.kt)("p",null,"\u6240\u6709\u7528\u6237\u4e4b\u95f4\u6d89\u53ca\u4fee\u6539\u6570\u636e\u7684\u7684\u4ea4\u4e92\u90fd\u662f\u4ea4\u6613\uff0c\u5f53\u7136\u5176\u4ed6\u7684\u4e00\u822c\u4e0d\u5177\u5907\u7834\u574f\u6027\u7684\u4ea4\u4e92\u4e5f\u53ef\u4ee5\uff0c\u4f8b\u5982 \u8bfb\u53d6 \u6570\u636e \u3002"),(0,n.kt)("h4",{id:"22141-helpcomponent"},"2.2.14.1 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h3",{id:"2215-components"},"2.2.15 Components"),(0,n.kt)("h4",{id:"22151-neuralcomponent"},"2.2.15.1 NeuralComponent"),(0,n.kt)("h4",{id:"22152-tagcomponent"},"2.2.15.2 TagComponent"),(0,n.kt)("h4",{id:"22153-realityidcomponent"},"2.2.15.3 RealityIDComponent"),(0,n.kt)("h4",{id:"22154-helpcomponent"},"2.2.15.4 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h4",{id:"22155-deltacomponent"},"2.2.15.5 DeltaComponent"),(0,n.kt)("p",null,"\u53c2\u89c12.2.11.3\u8282\u3002"),(0,n.kt)("h3",{id:"2216-\u6700\u4f73\u5b9e\u8df5"},"2.2.16 \u6700\u4f73\u5b9e\u8df5"),(0,n.kt)("h4",{id:"22161-more-granular-is-better"},"2.2.16.1 more granular is better"),(0,n.kt)("p",null,'Bevy has a smart scheduling algorithm that runs your systems in parallel as much as possible. It does that automatically, when your functions don\'t require conflicting access to the same data. Your game will scale to run on multiple CPU cores "for free"; that is, without requiring extra development effort from you.'),(0,n.kt)("p",null,"To improve the chances for parallelism, you can make your data and code more granular. Split your data into smaller types / ",(0,n.kt)("inlineCode",{parentName:"p"},"struct"),"s. Split your logic into multiple smaller systems / functions. Have each system access only the data that is relevant to it. The fewer access conflicts, the faster your game will run."),(0,n.kt)("p",null,"The general rule of thumb for Bevy performance is: more granular is better."),(0,n.kt)("h4",{id:"22162-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("p",null,"\u53c2\u89c12.2.7.1\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"},"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u662f\u4e0d\u53d8\u7684\uff0c\u4f46\u662f\u6570\u636e\u7ed3\u6784\u662f\u53d8\u5f97\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u6570\u636e\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u8fd9\u5c31\u5bfc\u81f4\u597d\u50cf\u4e00\u4e2a\u6e38\u620f\u7684\u6570\u636e\u662f\u4e0d\u53ef\u7a7a\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u4e0e\u6570\u636e\u6216\u8005\u6570\u636e\u7c7b\u578b\u5e94\u8be5\u662f\u89e3\u8026\u7684\uff0c\u6682\u4e14\u79f0\u4e4b\u4e3a\u6570\u636e\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"AI\u7f16\u8bd1\u5668\u6216\u8005AI\u8ba1\u7b97\u5e73\u53f0\u80fd\u591f\u5927\u529b\u53d1\u5c55\uff0c\u6a21\u5757\u5316\uff0c\u5f88\u597d\u7684\u4f18\u5316\uff0c\u662f\u56e0\u4e3aAI\u7684\u6570\u636e\u7ed3\u6784\u7279\u5f81\u5f88\u660e\u663e\uff0c\u6216\u8005\u62bd\u8c61\u5f97\u5f88\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u628a\u6570\u636e\u62bd\u8c61\u51fa\u6765\uff0c\u624d\u66f4\u5bb9\u6613\u770b\u6e05\u903b\u8f91\u7684\u672c\u8d28\uff0c\u6bd4\u5982\u6613\u4e8e\u7ba1\u7406\uff0c\u4f8b\u5982\u80fd\u591f\u5224\u65ad\u54ea\u4e9b\u903b\u8f91\u53ef\u4ee5\u5e76\u884c\uff0c\u4e0d\u7136\u903b\u8f91\u9690\u85cf\u4e8e\u4e00\u56e2\u4e71\u9ebb\u4e4b\u4e2d\uff0c\u4eba\u548c\u8ba1\u7b97\u673a\u90fd\u4e0d\u5bb9\u6613\u8bc6\u522b\u5176\u4e2d\u7684\u79e9\u5e8f")),(0,n.kt)("h4",{id:"22171-\u6570\u636e\u6cdb\u578b"},"2.2.17.1 \u6570\u636e\u6cdb\u578b"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u6709\u4e9b\u65b9\u6cd5\uff0c\u9053\u7406\u6216\u8005\u903b\u8f91\uff0c\u4ed6\u4eec\u5bf9\u8bb8\u591a\u4e0d\u540c\u7684\u6570\u636e\u6216\u4e8b\u7269\u90fd\u662f\u76f8\u901a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u65b9\u6cd5\u5e94\u7528\u5728\u4e0d\u540c\u7684\u9886\u57df\uff0c\u6bd4\u5982\u4e00\u8f86\u8f66\u5b50\uff0c\u4ed6\u5176\u5b9e\u53ef\u4ee5\u88c5\u4efb\u4f55\u4e1c\u897f\uff0c\u4f46\u662f\u5728\u7a0b\u5e8f\u5458\uff0c\u4e00\u4e2a\u5bf9\u8c61\u6240\u80fd\u5904\u7406\u6570\u636e\u5374\u5f80\u5f80\u5305\u542b\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f7f\u5f97\u65b9\u6cd5\u7684\u5904\u7406\u4e0d\u591f\u901a\u7528"),(0,n.kt)("p",null,"\u53ea\u8981\u903b\u8f91\u4e0a\u80fd\u591f\u4fdd\u8bc1\u5408\u7406\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u7531\u7528\u6237\u786e\u5b9a\uff0c\u90a3\u4e48\u4e00\u4e2a\u903b\u8f91\u5e94\u8be5\u53ef\u4ee5\u4f5c\u7528\u5728\u5177\u6709\u4e0d\u540c\u610f\u4e49\u7684\u76f8\u540c\u6570\u636e\u7c7b\u578b\u4e0a\uff0c\u53ea\u8981\u7528\u6237\u6307\u5b9a\u597d\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u79cd\u65b0\u578b\u6cdb\u578b")),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e"},"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e"),(0,n.kt)("p",null,"\u63a5\u53e3\u662f\u7528\u6765\u4fdd\u8bc1\u7c7b\u4e4b\u95f4\u534f\u4f5c\u7684\u534f\u8bae\uff0c\u8fd9\u4e2a\u534f\u8bae\u6ca1\u95ee\u9898\uff0c\u5b83\u4fdd\u8bc1\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("p",null,"\u4f46\u662f\u5728\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u9664\u4e86\u534f\u8bae\uff0c\u5b83\u8fd8\u591a\u4e86\u4e00\u79cd\u8eab\u4efd\uff0c\u5145\u5f53\u7c7b\u578b\uff0c\u7c7b\u578b\u88ab\u7528\u4e8e\u5e2e\u52a9\u8bed\u8a00\u8fdb\u884c\u68c0\u67e5\uff0c\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5408\u6cd5\u6027"),(0,n.kt)("p",null,"\u4f46\u8fd9\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9700\u6c42\uff0c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u534f\u8bae\u7684\u9700\u6c42\uff0c\u6bd4\u5982\uff0c\u5728\u73b0\u5b9e\u4e2d\uff0cA\u548cB\u534f\u4f5c\uff0c\u5b83\u4eec\u90fd\u4f1a\u81ea\u5df1\u9075\u5faa\u4e00\u79cd\u7b2c\u4e09\u65b9\u6807\u51c6\uff0cA\u548cB\u4e4b\u95f4\u4e8b\u524d\u4e0d\u9700\u8981\u76f8\u4e92\u534f\u5546\uff0c\u5b83\u4eec\u53ef\u4ee5\u4e0e\u4efb\u610f\u9075\u5faa\u6807\u51c6\u7684\u5b9e\u4f53\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u7b97A\u548cB\u6700\u7ec8\u53d1\u73b0\u5b83\u4eec\u9075\u5faa\u7684\u6807\u51c6\u7248\u672c\u4e0d\u4e00\u6837\uff0c\u4f46\u662f\u5927\u591a\u6570\u60c5\u51b5\u662f\u4e00\u6837\u7684"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u7279\u70b9\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u540c\u5728\u4e8eA\u548cB\u4e8b\u524d\u5b8c\u5168\u4e92\u4e0d\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u90fd\u80fd\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5f80\u5f80\u662f\u6765\u81ea\u72ec\u7acb\u7684\u7b2c\u4e09\u65b9")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u5f80\u5f80\u9700\u8981\u5f15\u5165\u63a5\u53e3\u58f0\u660e\uff0c\u8fd9\u79cd\u8026\u5408\u4e0d\u5149\u662f\u534f\u8bae\u672c\u8eab\uff0c\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u534f\u8bae\u5916\u7684\u8ddf\u7a0b\u5e8f\u76f8\u5173\u7684\u4e1c\u897f\uff0c\u4f8b\u5982\u7279\u5b9a\u7684\u7a0b\u5e8f\u5305\u3001\u7b7e\u540d\u7684\u987a\u5e8f\uff0c\u751a\u81f3\u6709\u65f6\u5019\u4f9d\u8d56\u7684\u987a\u5e8f\uff0c\u66f4\u7cdf\u7cd5\u7684\u662f\uff0c\u8fd8\u5fc5\u987b\u628a\u8fd9\u4e9b\u5185\u5bb9\u63d2\u5165\u5230\u4ee3\u7801\u4e2d"),(0,n.kt)("p",null,"\u4f60\u5fc5\u987b\u4ece\u90a3\u4e2a\u63a5\u53e3\u7ee7\u627f\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u9075\u5faa\u4e00\u4e2a\u63a5\u53e3\u534f\u8bae"),(0,n.kt)("p",null,"\u5373\u4f7f\u4f60\u6709\u81ea\u5df1\u7684\u65b9\u6cd5\u505a\u4e86\u534f\u8bae\u4e00\u6837\u7684\u4e8b\u60c5\uff0c\u8fd9\u8fd8\u4e0d\u591f\uff0c\u4f60\u5fc5\u987b\u628a\u4ee3\u7801\u79fb\u5230\u63a5\u53e3\u65b9\u6cd5\u3001\u5305\u88c5\u4e00\u4e0b\u7b49\u7b49\uff0c\u4f60\u7684\u4fee\u6539\u4ee3\u7801"),(0,n.kt)("p",null,"\u5728\u9075\u5faa\u534f\u8bae\u4e4b\u5916\uff0c\u5f15\u5165\u4e86\u4e00\u4e9b\u989d\u5916\u7684\u8d1f\u62c5"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff1a\u534f\u8bae\u901a\u5e38\u5173\u6ce8\u6570\u636e\uff0c\u4f60\u80fd\u628a\u8fd9\u4e2a\u6570\u636e\u8fdb\u884c\u5904\u7406\uff0c\u6bd4\u5982\u6211\u4e70\u4e86\u4e00\u79cd\u7279\u5b9a\u7684\u539f\u6750\u6599\uff0c\u6211\u62ff\u8fc7\u6765\u8fdb\u884c\u52a0\u5de5\uff0c\u7136\u540e\u751f\u4ea7\u53e6\u4e00\u79cd\u6750\u6599\uff0c\u5356\u7ed9\u5176\u4ed6\u5382\u5bb6\uff0c\u6211\u4eec\u7ea6\u5b9a\u7684\u534f\u8bae\u662f\u539f\u6750\u6599\u7684\u89c4\u683c\u548c\u54c1\u7c7b\uff0c\u4f46\u4e0d\u662f\u6211\u4eec\u52a0\u5de5\u7684\u65b9\u6cd5\u6216\u8005\u6b65\u9aa4\uff0c\u6211\u7684\u65b9\u6cd5\u548c\u6d41\u7a0b\u968f\u65f6\u53ef\u4ee5\u53d8\u52a8\uff0c\u53ea\u8981\u6211\u8f93\u5165\u548c\u8f93\u51fa\u7684\u89c4\u683c\u4e0d\u53d8"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u63a5\u53e3\u4e2d\uff0c\u672c\u610f\u4e5f\u662f\u5173\u6ce8\u8f93\u5165\u8f93\u51fa\u7684\u6570\u636e\u89c4\u683c\uff0c\u8fd9\u672c\u53ef\u4ee5\u4ec5\u901a\u8fc7\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u5373\u53ef\uff0c\u4f46\u662f\u7a0b\u5e8f\u9700\u8981\u4fdd\u8bc1\u8fd0\u884c\u65f6\u5bf9\u8c61\u521d\u59cb\u5316\u3001\u53d8\u91cf\u8d4b\u503c\u3001\u53d8\u91cf\u7684\u5408\u6cd5\u6027\u7b49\u7b49\u5404\u79cd\u539f\u56e0\uff0c\u4ed6\u628a\u8f93\u5165\u8f93\u51fa\u6570\u636e\u548c\u65b9\u6cd5\u653e\u5230\u4e86\u4e00\u8d77\uff0c\u8fd9\u91cc\u9762\u4e5f\u6709\u66f4\u91cd\u8981\u7684\u539f\u56e0\u662f\u5b9e\u65f6\u6027\u548c\u987a\u5e8f\uff1a\u8c03\u7528\u65b9\u9700\u8981\u7acb\u5373\u83b7\u53d6\u8fd4\u56de\u7ed3\u679c"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u7684\u534f\u8bae\u7ea6\u5b9a\u7684\u66f4\u50cf\u662f\u65b9\u6cd5\u800c\u4e0d\u662f\u6570\u636e\uff0c\u53c8\u52a0\u4e0a\u7f16\u8bd1\u5668\u7684\u7c7b\u578b\u7cfb\u7edf\u7b49\u539f\u56e0\uff0c\u534f\u8bae\u88ab\u6df1\u5ea6\u8026\u5408\u5728\u7cfb\u7edf\u4e2d\uff0c\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"CreationXR\u4ec5\u5173\u6ce8\u6570\u636e\u53ca\u5176\u7ed3\u6784\uff0c\u5e76\u4e14\u901a\u8fc7\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4e5f\u80fd\u4fdd\u8bc1\u8fd4\u56de\u503c\u88ab\u7acb\u5373\u53d6\u5f97\uff0c\u4f46\u662f\u5b83\u5f31\u5316\u4e86\u5bf9\u65b9\u6cd5\u76f8\u5173\u7684\u4f9d\u8d56\uff0c\u800c\u6570\u636e\u53ef\u4ee5\u901a\u8fc7\u516c\u5171\u7b26\u53f7\u8868\u5b9a\u4e49\uff0c\u4e0d\u7ba1\u662f\u57fa\u672c\u7c7b\u578b\u8fd8\u662f\u805a\u5408\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u79cd\u89e3\u8026\u5927\u5927\u7684\u7b80\u5316\u4e86\u7a0b\u5e8f\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u3001\u4e5f\u589e\u52a0\u4e86\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u53ef\u4ee5\u968f\u65f6\u589e\u52a0\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u6216\u8005\u6267\u884c\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u4f46\u5176\u4ed6\u90e8\u5206\u5b8c\u5168\u4e0d\u53d7\u5f71\u54cd"),(0,n.kt)("p",null,"\u5f53\u7136\u5e26\u6765\u7684\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\u662f\uff1a\u8fd9\u79cd\u9690\u5f0f\u7684\u53c2\u6570\u4f20\u9012\u5bfc\u81f4\u7ec4\u4ef6\u7684\u5b9e\u9645\u76ee\u6807\u5e76\u4e0d\u662f\u5f88\u660e\u786e\uff0c\u56e0\u4e3a\u5b83\u5f88\u6709\u53ef\u80fd\u505a\u4e86\u4e00\u4e9b\u4e0d\u53ef\u63a7\u7684\u4e8b\u60c5\uff0c\u8fd9\u79cd\u9700\u8981\u5bf9\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u63cf\u8ff0\uff0c\u5c31\u50cf\u4e00\u4e2a\u4ea7\u54c1\u8bf4\u660e\u4e66\uff0c\u4ed6\u5230\u5e95\u505a\u4e86\u4ec0\u4e48\uff0c\u8fd9\u6837\u7684\u8bf4\u660e\u4e66\u662f\u666e\u901a\u7528\u6237\u53ef\u4ee5\u7406\u89e3\u7684\uff0c\u8bed\u4e49\u5316\u7684"),(0,n.kt)("h3",{id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"},"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"),(0,n.kt)("h4",{id:"22181-update\u673a\u5236"},"2.2.18.1 Update\u673a\u5236"),(0,n.kt)("p",null,"Update\u662f\u6e38\u620f\u7684\u6838\u5fc3\u9a71\u52a8\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u65e2\u662f\u5f62\u6210\u52a8\u6001\u4e16\u754c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\u53c8\u7531\u4e8e\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5728\u5b9e\u65f6\u66f4\u65b0\u81ea\u5df1\u7684\u72b6\u6001\uff0c\u56e0\u6b64\u4f7f\u5f97\u7cfb\u7edf\u4e4b\u95f4\u7684\u89e3\u8026\u53d8\u5f97\u53ef\u80fd\uff0c\u5373\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u7684\u72b6\u6001")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u53ea\u64cd\u4f5c\u4e1a\u52a1\u89c4\u5219\uff0c\u6ca1\u6709\u5b9e\u4f53\u5316\uff0c\u4ed6\u4eec\u901a\u5e38\u9762\u5bf9\u7684\u662f\u6570\u636e\uff0c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u79cd\u6570\u636e\u901a\u5e38\u53cd\u5e94\u7684\u662f\u89c4\u5219\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f97\u6982\u5ff5"),(0,n.kt)("h4",{id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"},"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u7a0b\u5e8f\u5305\u5927\u5c0f\u90fd\u6bd4\u8f83\u5c0f\uff0c\u4f8b\u5982\u4e00\u4e2a\u624b\u673aapp\u53ea\u6709\u51e0\u5341\u6700\u591a\u4e0a\u767eM\uff0c\u4f46\u662f\u4e00\u4e2a\u6e38\u620f\u5f80\u5f80\u90fd\u591a\u5927\u51e0\u4e2aG\uff0c\u4e3b\u673a\u6e38\u620f\u751a\u81f3\u51e0\u5341\u5230\u4e0a\u767eG\u3002"),(0,n.kt)("p",null,"\u4e0d\u5149\u7a0b\u5e8f\u5305\u7684\u5927\u5c0f\uff0c\u8ba1\u7b97\u65f6\u52a0\u8f7d\u5230\u663e\u5b58\u7684\u6570\u636e\u91cf\u66f4\u662f\u5dee\u5f02\u5de8\u5927 \uff0c\u4f8b\u5982\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u53ea\u9700\u8981\u52a0\u8f7d\u5c11\u91cf\u6709\u5173\u7684\u6570\u636e\uff0c\u5e38\u9a7b\u5185\u5b58\u4e2d\u7684\u6570\u636e\u901a\u5e38\u4e0d\u591a\uff0c\u6bcf\u4e2a\u4e1a\u52a1\u903b\u8f91\u76f8\u5173\u7684\u6570\u636e\u901a\u5e38\u90fd\u6bd4\u8f83\u72ec\u7acb\uff0c\u5373\u4f7f\u5c11\u91cf\u5355\u4e2a\u903b\u8f91\u9700\u8981\u7684\u6570\u636e\u91cf\u6bd4\u8f83\u5927\uff0c\u4e5f\u4ec5\u9700\u5728\u8ba1\u7b97\u7684\u65f6\u5019\u5373\u4f7f\u52a0\u8f7d\u5c31\u50cf\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u5bf9\u5b9e\u65f6\u6027\u8981\u6c42\u6ca1\u90a3\u4e48\u9ad8\u3002"),(0,n.kt)("p",null,"\u800c\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u901a\u5e38\u9ad8\u5ea6\u5173\u8054\uff0c\u4e14\u5305\u542b\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u5f80\u5f80\u6570\u636e\u4f1a\u975e\u5e38\u5927\uff0c\u4e14\u5927\u591a\u9700\u8981\u5e38\u9a7b\u5185\u5b58\uff0c\u4f7f\u5f97\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u7684\u663e\u5b58\u5f80\u5f80\u662f\u4e0d\u591f\u7684\u3002\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\u4e0d\u4ec5\u610f\u5473\u7740\u6bd4\u4e00\u822c\u7684\u6570\u636e\u91cf\u8981\u5927\uff0c\u800c\u4e14\u4e3a\u4e86\u52a0\u901f\u8ba1\u7b97\uff0c\u901a\u5e38\u8fd8\u9700\u8981\u5305\u542b\u5f88\u591a\u5197\u4f59\u7684\u6570\u636e\u548c\u6570\u636e\u7ed3\u6784\u6765\u8fbe\u5230\u5b9e\u65f6\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u672a\u6765\u7684\u865a\u62df\u5f00\u653e\u5927\u4e16\u754c\u9700\u8981\u66f4\u5927\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u80fd\u8fdc\u8fdc\u8d85\u51fa\u5355\u53f0\u8ba1\u7b97\u673a\u80fd\u591f\u627f\u8f7d\u7684\u663e\u5b58\u5927\u5c0f\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8fd9\u6837\u7684\u5927\u4e16\u754c\u5c06\u5f88\u96be\u6709\u6548\u5730\u8fd0\u884c\uff0c\u9700\u8981\u65b0\u7684\u6280\u672f\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u6269\u5c55\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"22183-\u67b6\u6784\u590d\u6742\u5ea6"},"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6"),(0,n.kt)("h3",{id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai"},"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI"),(0,n.kt)("h3",{id:"2220-\u5b89\u5168"},"2.2.20 \u5b89\u5168"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8ba9\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u8fd0\u884c\uff0c\u4ee5\u53ca\u6765\u81ea\u4e0d\u540c\u7528\u6237\u7684\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u8fdb\u884c\u4ea4\u4e92\uff0c\u5b89\u5168\u6027\u662f\u4e00\u4e2a\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002\u8fd9\u91cc\u7684\u5b89\u5168\u6027\u6d89\u53ca\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801bug\u5f15\u8d77\u7684\u7a0b\u5e8f\u5d29\u6e83"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u84c4\u610f\u7834\u574f\u7cfb\u7edf\u548c\u4ed6\u4eba\u6570\u636e")),(0,n.kt)("p",null,"\u540e\u9762\u901a\u8fc7\u4e25\u683c\u63a7\u5236\u7a0b\u5e8f\u5b9e\u4f8b\u5316\u5bf9\u8c61\u6765\u5b9e\u73b0\uff0c\u901a\u8fc7Creation Script\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5206\u914d\u81ea\u5df1\u7684\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u65e0\u6cd5\u6784\u9020\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u7cfb\u7edf\u5e26\u6709\u4f17\u591a\u6570\u636e\u7684\u7ed3\u6784\uff0c\u4f8b\u5982\u573a\u666f\u6811")),(0,n.kt)("p",null,"\u6240\u6709\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u63a5\u53e3\u90fd\u8981\u4fdd\u8bc1\u7528\u6237\u548c\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("h3",{id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56"},"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56"),(0,n.kt)("h4",{id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"},"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"),(0,n.kt)("p",null,"\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\uff1a\u5c06\u5d4c\u5957\u7684\u51fd\u6570\u7ed3\u6784\u8f6c\u5316\u4e3a\u6241\u5e73\u7ed3\u6784\uff0c\u5176\u4ee3\u4ef7\u662f\u5b58\u5728\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\u5c5e\u6027\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u53d8\u91cf\u4e0d\u80fd\u7b97\u662f\u7834\u574f\u4e86\u7eaf\u51fd\u6570\u7684\u7ed3\u6784\uff0c\u4f46\u662f\u4ed6\u4eec\u5e26\u6765\u4e00\u5b9a\u7684\u5e72\u6270\uff0c\u5e76\u4e14\u5927\u91cf\u7684\u4e2d\u95f4\u53d8\u91cf\u5982\u679c\u90fd\u5b58\u50a8\u8d77\u6765\uff0c\u65e2\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u4e5f\u6d6a\u8d39\u5185\u5b58\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u5728RealityIS\u4e2d\u7ec4\u4ef6\u5c5e\u6027\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u6240\u5c5e\u5173\u7cfb\uff0c\u5b83\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u62e5\u6709\u7684\uff0c\u4e5f\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u7684\uff0c\u8fd9\u4e5f\u662fRealityIS\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u4e0d\u53ef\u80fd\u7b80\u5355\u5730\u901a\u8fc7\u5728\u5c5e\u6027\u4e0a\u52a0\u5165\u4e00\u4e9b\u53d8\u91cfattribute \u6765\u58f0\u660e\u5c5e\u6027\u662f\u5426\u5e94\u8be5\u88ab\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u5c5e\u6027\u5e76\u4e0d\u662f\u5728\u4f7f\u7528\u7684\u5730\u65b9\u5b9a\u4e49\u7684\uff0c\u5373\u4e0d\u662f\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u7684\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u7a0b\u4e5f\u662f\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\uff0cRealityIS\u5c5e\u6027\u5b9a\u4e49\u7684\u5730\u65b9\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u8fd9\u662f\u552f\u4e00\u5b9a\u4e49\u7684\u5730\u65b9\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9battribute \u5b9a\u4e49\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u5373\u53ea\u6709\u7b26\u53f7\u8868\u8981\u6c42\u5b58\u50a8\u7684\u53d8\u91cf\u624d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u5176\u4ed6\u6570\u636e\u90fd\u8ba4\u4e3a\u662f\u4e2d\u95f4\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e5f\u4e0d\u80fd\u4e3a\u4e86\u6301\u4e45\u5316\u628a\u4e2d\u95f4\u53d8\u91cf\u90fd\u653e\u5230\u79c1\u6709\u8868\u4e2d\uff0c\u90a3\u6837\u5c31\u4e0d\u5177\u5907\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u901a\u4fe1\u7684\u80fd\u529b\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u7684\u4e3b\u8981\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u4e3a\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u6240\u6709\u9700\u8981\u4e92\u64cd\u4f5c\u7684\u90fd\u9700\u8981\u5b9a\u4e49\u5728\u5168\u5c40\u8868\u4e2d\uff0c\u5230\u5168\u5c40\u8868\u4e5f\u6709\u4e0d\u9700\u8981\u6301\u4e45\u5316\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4e2d\u95f4\u53d8\u91cf\u5b58\u5728\u4e8e\u79c1\u6709\u8868\u4e5f\u53ef\u4ee5\uff0c\u4f46\u662f\u4ed6\u53ef\u80fd\u9700\u8981\u5173\u8054\u7ec4\u4ef6\uff0c\u4f7f\u5f97\u8ba1\u7b97\u7684\u6700\u7ec8\u7ed3\u679c\u662f\u4e00\u4e2a\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u7684\u5c5e\u6027\u3002"),(0,n.kt)("h4",{id:"22212-\u5173\u8054\u7ec4\u4ef6"},"2.2.21.2 \u5173\u8054\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\u6211\u4eec\u662f\u5426\u5e94\u8be5\u8981\u6c42\u79c1\u6709\u8868\u4e2d\u7684\u7b26\u53f7\u603b\u662f\u4e0d\u5e94\u8be5\u6301\u4e45\u5316\uff0c\u8fd9\u6837\u5c31\u4f1a\u66f4\u52a0\u8feb\u4f7f\u5f00\u53d1\u8005\u9488\u5bf9\u516c\u5171\u53ef\u4ea4\u4e92\u5c5e\u6027\u8fdb\u884c\u5f00\u53d1\uff0c\u5426\u5219\u5f00\u53d1\u7684\u7ec4\u4ef6\u5c06\u6ca1\u6709\u4efb\u4f55\u7528\u5904\u3002"),(0,n.kt)("p",null,"\u8fd9\u5e26\u6765\u4e24\u4e2a\u597d\u5904\uff1a1\u662f\u7ec4\u4ef6\u4e0d\u518d\u4e8e\u5355\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u800c\u4e14\u4e00\u4e2a\u76f8\u5173\u8054\u7684\u7ec4\uff0c\u8fd9\u6837\u7684\u7ec4\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u7c92\u5ea6\u66f4\u5927\u4e00\u70b9\uff0c2\u662f\u6807\u51c6\u7684\u5730\u4f4d\u66f4\u9ad8\uff0c\u6240\u4ee5\u7ec4\u4ef6\u771f\u6b63\u662f\u5fc5\u987b\u4f9d\u8d56\u4e8e\u6807\u51c6\uff0c\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u6574\u4e2a\u7a0b\u5e8f\u673a\u5236\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u7ba1\u4e2d\u95f4\u72b6\u6001\u5982\u4f55\uff0c\u4ed6\u7684\u7b2c\u4e00\u4e2a\u8f93\u5165\uff08\u6216\u8005\u591a\u4e2a\u53c2\u6570\u7684\u5176\u4e2d\u4e4b\u4e00\uff09\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u7136\u540e\u6700\u540e\u4e00\u4e2a\u5199\u5165\u7684\u5c5e\u6027\u4e5f\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4e2d\u95f4\u7684\u5927\u91cf\u5c5e\u6027\u5c5e\u4e8e\u4e2d\u95f4\u5c5e\u6027\uff0c\u6765\u81ea\u79c1\u6709\u8868\uff0c\u4e0d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u6240\u6709\u8fd9\u4e00\u8fde\u4e32\u7684\u7ec4\u4ef6\u6210\u4e3a\u5173\u8054\u7ec4\u4ef6\uff0c\u4ed6\u4eec\u5f62\u6210\u4f9d\u8d56\u5173\u7cfb\uff0c\u800c\u6240\u6709\u76f8\u4e92\u4f9d\u8d56\u7684\u7ec4\u5f62\u6210\u4e00\u4e2a\u7eaf\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u7ec4\u4ef6\u7ec4\u4e2d\u7684\u6240\u6709\u51fd\u6570\u5982\u679c\u5747\u662f\u4f5c\u7528\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5219\u4ed6\u4eec\u53ef\u4ee5\u5408\u5e76\u4e3a\u4e00\u4e2a\u5927\u51fd\u6570\uff0c\u56e0\u4e3a\u53cd\u6b63\u4e2d\u95f4\u8fc7\u7a0b\u522b\u4eba\u65e0\u6cd5\u4ea4\u4e92\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u62c6\u5206\u3002"),(0,n.kt)("p",null,"\u62c6\u5206\u6210\u591a\u4e2a\u4e2d\u95f4\u53d8\u91cf\u9002\u5408\u4e8e\uff1a\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u5206\u5e03\u4e8e\u591a\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u6216\u8005\u8bf4\u7684\u8f93\u5165\u6765\u81ea\u4e8e\u591a\u4e2a\u5b9e\u4f53\uff0c\u8fd9\u79cd\u60c5\u51b5\u5fc5\u987b\u8981\u501f\u7528\u4e2d\u95f4\u53d8\u91cf\u624d\u80fd\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7406\u8bba\u4e0a\u8bf4\uff0c\u53ea\u8981\u8f93\u5165\u5168\u5c40\u7b26\u53f7\u53c2\u6570\u5927\u4e8e\u7b49\u4e8e2\uff0c\u5c31\u9700\u8981\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u4e2d\u95f4\u53d8\u91cf\uff0c\u6765\u8fdb\u884c\u5f52\u5e76\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u4e00\u79cd\u91cd\u8f7d\u7684\u673a\u5236\uff0c\u5982\u679c\u67d0\u4e2a\u5bf9\u8c61\u540c\u65f6\u5305\u542b\u4e86\u591a\u4e2a\u53c2\u6570\uff0c\u53ef\u4ee5\u51cf\u5c11\u4e2d\u95f4\u53d8\u91cf\u7684\u5f52\u5e76\u8fc7\u7a0b\uff0c\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7a0b\u5ea6\u7684\u6027\u80fd\u63d0\u5347\uff0c\u4f46\u662f\u5bf9\u67b6\u6784\u7b80\u6d01\u6027\u9020\u6210\u7684\u4ee3\u4ef7\u53ef\u80fd\u6709\u70b9\u5927\uff0c\u5e26\u6765\u7f16\u7801\u548c\u8fd0\u884c\u65f6\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5927\u7684\u7ec4\u4ef6\u7ec4\u7531\u591a\u4e2a\u5c0f\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u8fd9\u4e9b\u5c0f\u7ec4\u4ef6\u6784\u6210\u4e00\u4e2a\u8f83\u5927\u903b\u8f91\u7684\u590d\u6742\u7ec6\u8282\uff0c\u800c\u7ec4\u4ef6\u7ec4\u5219\u662f\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u7684\u5355\u4f4d\uff0c\u7ec4\u4ef6\u7ec4\u5185\u5c5e\u4e8e\u5f00\u53d1\u8005\u8fdb\u884c\u7ef4\u62a4\u7684\u5355\u4f4d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5f00\u53d1\u8005\u7684\u7ec4\u4ef6\u662f\u591a\u4e2a\u8f93\u5165\u53c2\u6570\uff0c\u6765\u81ea\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u5219\u4ed6\u5e94\u8be5\u77e5\u9053\u53ea\u6709\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\u7684\u5355\u4e2a\u5bf9\u8c61\u624d\u80fd\u6267\u884c\u8ba1\u7b97\uff0c\u5426\u5219\u4ed6\u5e94\u8be5\u59cb\u7ec8\u5047\u8bbe\u5355\u53d8\u91cf\u8f93\u5165\u7684\u5f62\u6210\uff0c\u901a\u8fc7\u4e2d\u95f4\u53d8\u91cf\u7ec4\u5408\u3002"),(0,n.kt)("h4",{id:"22213-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("h3",{id:"2222-\u5206\u5e03\u5f0f"},"2.2.22 \u5206\u5e03\u5f0f"),(0,n.kt)("h3",{id:"2223-\u5f02\u5e38"},"2.2.23 \u5f02\u5e38"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u5c06\u4e00\u4e9b\u5b8c\u6574\u7684\u64cd\u4f5c\u5206\u6563\u5230\u591a\u4e2a\u7ec4\u4ef6\u5f53\u4e2d\uff0c\u5355\u4e2a\u7f3a\u4e4f\u539f\u5b50\u6027\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4e0e\u5176\u4ed6\u7ec4\u4ef6\u4e00\u8d77\u6784\u6210\u4e86\u6574\u4e2a\u5b8c\u6574\u8ba1\u7b97\u3002\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u50cfErlang\u90a3\u6837\u91c7\u53d6\u4e22\u5f03\u5355\u4e2a\u8fdb\u7a0b\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\u5728Erlang\u4e2d\u4e00\u4e2a\u8fdb\u7a0b\u5d29\u6e83\u4e86\u5e76\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u8fdb\u7a0b\uff0c\u800c\u4e14Erlang\u5355\u4e2a\u8fdb\u7a0b\u7684\u4efb\u52a1\u6bd4\u8f83\u72ec\u7acb\u3002\u800cRealityIS\u4e2d\u67d0\u4e9b\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u610f\u5473\u7740\u524d\u9762\u67d0\u4e9b\u8ba1\u7b97\u4e5f\u9700\u8981\u53d6\u6d88\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3aRealityIS\u5c06\u91c7\u53d6\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u5f02\u5e38\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u6574\u4e2a\u8be5\u5e27\u7684\u6240\u6709\u8ba1\u7b97\u90fd\u9700\u8981\u4e22\u5f03")),(0,n.kt)("p",null,"\u6bd4\u5982\u91c7\u53d6\u54cd\u5e94\u5f0f\uff0c\u5982\u679c\u4e00\u4e2a\u70b8\u5f39\u7206\u70b8\u4e86\uff0c\u4f46\u662f\u540e\u7eed\u5bf9\u70b8\u5f39\u8fdb\u884c\u76f8\u5e94\u7684\u7ec4\u4ef6\u5374\u5d29\u6e83\u4e86\uff0c\u8fd9\u4e2a\u65f6\u5019\u524d\u9762\u7684\u70b8\u5f39\u5c31\u65e0\u6548\u4e86\u3002\u5982\u679c\u662f\u4e00\u4e9b\u5176\u4ed6\u66f4\u91cd\u8981\u7684\u903b\u8f91\u53d1\u751f\uff0c\u8fd9\u6837\u7684\u5f71\u54cd\u5c31\u4f1a\u975e\u5e38\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u6e38\u620f\u7684\u505a\u6cd5\u662f\uff0c\u5f53\u4e00\u4e2a\u5730\u65b9\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u4e86\uff0c\u6e38\u620f\u4f1a\u4ece\u4e00\u4e9b\u56fa\u5b9a\u7684\u5b58\u6863\u8282\u70b9\u6062\u590d\uff0c\u73a9\u5bb6\u9700\u8981\u4ece\u90a3\u4e9b\u56fa\u5b9a\u5b58\u6863\u91cd\u65b0\u5f00\u59cb\u73a9\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u91cd\u590d\u3002"),(0,n.kt)("p",null,"\u91cd\u590d\u80af\u5b9a\u662f\u5fc5\u987b\u7684\uff0c\u95ee\u9898\u662f\u5bf9\u4e8e\u4e00\u4e2a\u6ca1\u6709\u5173\u5361\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5b83\u7684\u5b58\u6863\u8282\u70b9\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u7cfb\u7edf\u9700\u8981\u4e00\u5957\u81ea\u52a8\u5316\u7684\u5b58\u6863\u673a\u5236\u3002"),(0,n.kt)("h4",{id:"22231-\u81ea\u52a8\u5b58\u6863"},"2.2.23.1 \u81ea\u52a8\u5b58\u6863"),(0,n.kt)("p",null,"\u6784\u5efa\u4e00\u4e2a\u5b58\u6863\u673a\u5236\uff0c\u7136\u540e\u5d29\u6e83\u4e4b\u540e\u63d0\u793a\u7528\u6237\u9000\u51fa\uff0c\u5e76\u81ea\u52a8\u56de\u9000\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u5feb\u7167\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff0c\u5c3d\u7ba1\u5f88\u591a\u7528\u6237\u5171\u540c\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\u8fd0\u884c\u7ec4\u4ef6\uff0c\u4f46\u662f\u5927\u90e8\u5206\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1\u8fd8\u90fd\u662f\u5728RealityID\u4e4b\u5185\u7684\uff0c\u6240\u4ee5\u4e00\u822c\u60c5\u51b5\u53ea\u9700\u8981\u9000\u51fa\u5355\u4e2a\u7528\u6237\u5373\u53ef\u3002\u4f46\u4e5f\u6709\u53ef\u80fd\u67d0\u4e2a\u8de8\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f1a\u5f71\u54cd\u5230\u591a\u4e2a\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5185\u5bb9\u662f\u7531\u666e\u901a\u7528\u6237\u521b\u5efa\u7684\uff0c\u6240\u4ee5\u9700\u8981\u907f\u514d\u4f20\u7edf\u6e38\u620f\u8bbe\u7f6e\u7684\u4e13\u95e8\u7684\u5b58\u6863\u8282\u70b9\u7684\u673a\u5236\uff0c\u539f\u56e0\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u5f88\u96be\u6709\u8fd9\u6837\u7684\u80fd\u529b\uff0c\u5b58\u6863\u5f80\u5f80\u662f\u8981\u6253\u5f00\u7a0b\u5e8f\u7684\u7ed3\u6784\u7684\uff0c\u589e\u52a0\u590d\u6742\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u653e\u5f0f\u7684\u4e16\u754c\u5176\u5b9e\u5f88\u96be\u8bbe\u7f6e\u5b58\u6863\u8282\u70b9")),(0,n.kt)("p",null,"\u4f46\u6bcf\u5e27\u5b58\u50a8\u80af\u5b9a\u4ee3\u4ef7\u503c\u5f88\u5927\u7684\uff0c\u6240\u4ee5\u4e5f\u8981\u907f\u514d\u6bcf\u5e27\u5b58\u50a8\u3002"),(0,n.kt)("h4",{id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"},"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u5f53\u5c5e\u6027\u5b9a\u4e49\u4e3a\u5b58\u6863\u5c5e\u6027\u65f6\uff0c\u5982\u679c\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u7406\u8bba\u4e0a\u8fd9\u4e9b\u4fee\u6539\u90fd\u8981\u5b58\u50a8\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("h4",{id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863"},"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h4",{id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9"},"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9"),(0,n.kt)("p",null,"\u603b\u7684\u6765\u8bf4\uff0c\u6709\u4e24\u4e2a\u5b58\u50a8\u65f6\u95f4\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u7684\u67d0\u4e2a\u7ec4\u4ef6\u8fdb\u7a0b\u5bfc\u81f4\u5d29\u6e83\u65f6")),(0,n.kt)("p",null,"CreationVM\u4f1a\u5305\u542b\u4e24\u4efd\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u5b58\u6863\u6570\u636e")),(0,n.kt)("p",null,"\u5f53\u8fd0\u884c\u65f6\u7ec4\u4ef6\u4fee\u6539\u4e86\u67d0\u4e2a\u5b58\u6863\u5c5e\u6027\uff0c\u8fd9\u4e9b\u503c\u4f1a\u88ab\u8bb0\u5f55\u5728\u5185\u5b58\u4e2d\u3002\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u5e94\u8be5\u4fdd\u8bc1\u4e00\u65e6\u8fd9\u4e9b\u503c\u88ab\u4fee\u6539\uff0c\u5176\u4e4b\u524d\u7684\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\u3001\u539f\u5b50\u6027\u7684\u3001\u4e0d\u53ef\u4fee\u6539\u7684\u3002\u6240\u4ee5\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u88ab\u968f\u65f6\u5199\u5165\u5230\u7528\u6237\u771f\u6b63\u7684\u6570\u636e\u5e93\u6587\u4ef6\u4e2d\u3002"),(0,n.kt)("p",null,"\u53ea\u662f\u56e0\u4e3a\u9891\u7e41\u5199\u5165\u6570\u636e\u5e93\u7684IO\u64cd\u4f5c\uff0c\u6211\u4eec\u9009\u62e9\u5728\u4e00\u4e9b\u5173\u952e\u4e8b\u4ef6\u53d1\u751f\u65f6\u5728\u5199\u5165\u6570\u636e\u5e93\u3002\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\uff0c\u5982\u679cCreationVM\u673a\u5668\u672c\u8eab\u5d29\u6e83\uff0c\u6709\u5bfc\u81f4\u6709\u4e9b\u5c5e\u6027\u6ca1\u6709\u88ab\u5b58\u6863\uff0c\u56e0\u6b64\u4e0b\u6b21\u7528\u6237\u9700\u8981\u91cd\u590d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002\u4f46\u662f\u8fd9\u5e76\u6ca1\u6709\u592a\u5927\u95ee\u9898\uff0c\u6e38\u620f\u73a9\u5bb6\u5df2\u7ecf\u4e60\u60ef\u8fd9\u79cd\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u7684\u673a\u5236\uff0c\u5f53\u7528\u6237\u7ec4\u4ef6\u8fdb\u7a0b\u53d1\u751f\u5d29\u6e83\u65f6\uff0c\u7531\u4e8eCreationVM\u7684\u5b58\u6863\u5c5e\u6027\u5e76\u4e0d\u5305\u542b\u4e00\u4e9b\u4e2d\u95f4\u503c\uff0c\u6240\u4ee5\u6240\u6709\u8fd9\u4e9b\u90fd\u4e0d\u4f1a\u88ab\u5199\u5165\u5230\u6570\u636e\u5e93\u3002\u53cd\u4e4b\uff0cCreationVM\u63a5\u6536\u5230\u5d29\u6e83\u901a\u77e5\u4e4b\u540e\uff0c\u4f1a\u7acb\u5373\u5c06\u4e4b\u524d\u7684\u5b58\u6863\u5c5e\u6027\u5199\u5165\u7684\u6570\u636e\u5e93\uff0c\u5e76\u5199\u5165\u5d29\u6e83\u65e5\u5fd7\u3002\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6\u4e5f\u662f\u540c\u6837\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u8be5\u673a\u5236\u7684\u6210\u529f\u8fd0\u4f5c\u9700\u8981\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u534f\u540c\u5de5\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8981\u4fdd\u8bc1\u5f53\u5bf9\u4e00\u4e2a\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u65f6\uff0c\u4e4b\u524d\u7684\u6240\u6709\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u653e\u5fc3\u5b58\u50a8\u8fd9\u4e9b\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\uff0c\u5982\u679c\u7ec4\u4ef6\u5728\u5b58\u6863\u5c5e\u6027\u7684\u4fee\u6539\u4e4b\u524d\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u90a3\u4e48\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\u5bf9\u5b58\u6863\u5c5e\u6027\u7684\u5199\u5165\u5e94\u8be5\u4e5f\u4e0d\u4f1a\u51fa\u73b0\u95ee\u9898")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u8fd4\u56de\u503c\u5e94\u8be5\u59cb\u7ec8\u4f4d\u4e8e\u51fd\u6570\u7684\u6700\u540e\uff0c\u4e0d\u80fd\u518d\u4e2d\u95f4\u8fd4\u56de\uff0c\u6216\u8005\u5bf9\u8fd4\u56de\u503c\u5bf9\u8c61\u8d4b\u503c\uff0c\u6216\u8005\u5199\u6210\u4ee5\u4e0b\u65b9\u5f0f\u66f4\u597d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\nGlobal.HP = map() {\n ...\n x + y + z\n}\n")),(0,n.kt)("p",null,"\u6700\u540e\u4e00\u4e2a\u5b57\u53e5\u9ed8\u8ba4\u662f\u8fd4\u56de\u503c\uff0c\u4e0d\u9700\u8981return\u5173\u952e\u5b57\uff0c\u5b83\u8fd4\u56de\u7684\u503c\u4f1a\u8d4b\u503c\u7ed9Global.HP\uff0c\u8fd9\u91cc\u4ecd\u7136\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u4f7f\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u53bb\u5173\u5fc3Global.HP\u7684\u5185\u90e8\u7ed3\u6784\u3002\u540c\u65f6\u7701\u6389\u4e86\u4e00\u4e9b\u58f0\u660e\uff0c\u5982\u679c\u8ddf\u8f93\u5165\u53d8\u91cf\u4e00\u6837\u7684\u58f0\u660e\u5f62\u5f0f\u4f1a\u591a\u5199\u4e00\u4e9b\u65e0\u7528\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2224-\u7ec4\u4ef6\u5c5e\u6027"},"2.2.24 \u7ec4\u4ef6\u5c5e\u6027"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".Component(name) //\u7ec4\u4ef6\u6587\u4ef6\u540d\u548c\u540d\u79f0\n.UseDt(true) //\u662f\u5426\u4f7f\u7528dt\u53c2\u6570\uff0c\u4e00\u822c\u7528\u4e8e\u52a8\u753b\u6216\u8005\u8de8\u5e27\u884c\u4e3a\n")),(0,n.kt)("h3",{id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"},"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("p",null,"\u6570\u636e\u548c\u903b\u8f91\u662f\u7a0b\u5e8f\u7684\u4e24\u4e2a\u6700\u57fa\u672c\u5143\u7d20\u548c\u6982\u5ff5\uff0c\u6709\u4e86\u8fd9\u4e24\u4e2a\u57fa\u672c\u5143\u7d20\uff0c\u6211\u4eec\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u7f16\u5199\u4efb\u4f55\u7a0b\u5e8f\u3002"),(0,n.kt)("h4",{id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u65e0\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u5728\u89e3\u51b3\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u6d41\u7684\u4e24\u79cd\u8f6f\u4ef6\u6784\u9020\u601d\u8def\u662f\u9762\u5411\u5bf9\u8c61\u548c\u51fd\u6570\u5f0f\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"},"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"),(0,n.kt)("p",null,"\u53c2\u89c12.7.13.3\u8282\uff0cRealityIS\u4e2d\u7684\u5b9e\u4f53\u5bf9\u8c61\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u5373\u590d\u5408\u51fd\u6570\uff0c\u56e0\u6b64\u5b9e\u4f53\u5bf9\u8c61\u4ece\u6982\u5ff5\u4e0a\u4ec5\u5305\u542b\u903b\u8f91\uff0c\u4e0d\u5305\u542b\u6570\u636e\uff0c\u8fd9\u4e5f\u662f\u7b80\u5316\u7528\u6237\u7ec4\u7ec7\u903b\u8f91\u7684\u5173\u952e\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5373\u7528\u6237\u4e0d\u9700\u8981\u5173\u5fc3\u6570\u636e\uff0c\u5173\u5fc3\u7684\u4ec5\u4ec5\u662f\u529f\u80fd"),"\u3002"),(0,n.kt)("p",null,"\u90a3\u4e48\u6570\u636e\u5728\u54ea\u91cc\uff1f\u4ee5\u53ca\u6570\u636e\u662f\u4ec0\u4e48\u6837\u7684\u6982\u5ff5\uff1f"),(0,n.kt)("p",null,"\u5982\u679c\u8bf4\u6570\u636e\u88ab\u9690\u85cf\u8d77\u6765\uff0c\u5b83\u5728\u54ea\u91cc\u4ee5\u4ec0\u4e48\u5f62\u5f0f\u5b58\u5728\u5462\uff1f\u4ece\u7528\u6237\u5c42\u9762\u6765\u8bb2\uff0c\u8868\u9762\u4e0a\u770b\u6570\u636e\u4ecd\u7136\u662f\u9644\u7740\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u6dfb\u52a0\u4e86\u67d0\u4e2a\u51fd\u6570\u6216\u8005\u590d\u5408\u51fd\u6570\u4e4b\u540e\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c06\u4f1a\u663e\u793a\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7528\u6237\u9700\u8981\u77e5\u6653\u8fd9\u4e9b\u53c2\u6570\u6765\u4e86\u89e3\u51fd\u6570\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u6570\u636e\u672c\u8d28\u4e0a\u662f\u4e0d\u9700\u8981\u7528\u6237\u7ba1\u7406\u7684\uff0cRealityIS\u8ba4\u4e3a\uff0c\u6240\u6709\u6570\u636e\u90fd\u662f\u7528\u6237\u6570\u636e\uff0c\u5373\u6240\u6709\u6570\u636e\u662f\u4e00\u4e2a\u7528\u6237\u7684\u5de8\u5927\u6570\u636e\u8868\uff0c\u5f53\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4ee5\u5b9e\u73b0\u67d0\u4e2a\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5bf9\u8fd9\u4e2a\u5927\u7684\u7528\u6237\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u7684\u67d0\u4e9b\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u548c\u5199\u5165\u6570\u636e\u7684\u64cd\u4f5c\u5219\u7531\u7cfb\u7edf\u5b8c\u6210\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u6570\u636e\uff0c\u90a3\u6837\u5c31\u53d8\u6210\u4f20\u7edf\u7684\u9762\u5411\u6570\u636e\u5e93\u7f16\u7a0b\u7684\u6a21\u5f0f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u6839\u636e\u5bf9\u8c61\u7ec4\u4ef6\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u4ece\u6570\u636e\u5e93\u4e2d\u627e\u51fa\u8fd9\u4e9b\u6570\u636e\uff0c\u5e76\u6309\u7167\u5bf9\u8c61\u7684\u5f62\u5f0f\u5206\u6563\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u5404\u4e2a\u4f4d\u7f6e\uff0c\u6574\u4e2a\u8fd0\u884c\u65f6\u7684\u884c\u4e3a\u5b9e\u9645\u4e0a\u8ddf\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff0c\u66f4\u786e\u5207\u5730\u8bf4ECS\u7684\u5185\u5b58\u5e03\u5c40\u662f\u7c7b\u4f3c\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u770b\u5f85\u548c\u5904\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u662fRealityIS\u4e0e\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u7684\u5de8\u5927\u5dee\u5f02\u3002"),(0,n.kt)("h4",{id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"},"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\\2. \u201c\u6709\u201d\u548c\u201d\u80fd\u201d\u548c\u5b9e\u73b0"),(0,n.kt)("p",{parentName:"blockquote"},"\u5728\u7ec4\u4ef6\u6a21\u578b\u4e2d\uff0c\u5bf9\u8c61\u7531\u7ec4\u4ef6\u7ec4\u6210\uff0c\u6240\u4ee5\u5176\u884c\u4e3a\u4e5f\u7531\u7ec4\u4ef6\u4e3b\u5bfc\uff0c\u4f8b\u5982\u4e00\u4e2a\u5bf9\u8c61\u62e5\u6709","[Movement]"," \u548c ","[Location]","\uff0c\u5219\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u80fd\u591f\u79fb\u52a8\uff0c\u8fd9\u5728\u6574\u4f53\u4e0a\u662f\u5341\u5206\u548c\u8c10\u81ea\u7136\u7684\uff0c\u4f46\u5f53\u6211\u4eec\u4ed4\u7ec6\u8003\u91cf\uff0c\u8fd9\u4e2a",(0,n.kt)("strong",{parentName:"p"},'"\u80fd"'),"\u662f\u7531\u4e8e\u4ec0\u4e48\u5462\uff0c\u662f\u56e0\u4e3a ","[Movement]","\u5417\uff0c\u662f\u56e0\u4e3a","[Location]","\u5417\uff0c\u8fd8\u662f\u540c\u65f6\u56e0\u4e3a ","[Movement]"," \u548c ","[Location]","\uff1f\u5f53\u7136\u662f\u540c\u65f6\uff08\u8fd9\u91cc\u4fbf\u63ed\u793a\u51fa\u4e86\u7ec4\u4ef6\u548c\u63a5\u53e3\u7684\u5c55\u5e73\u5bf9\u8c61\u65b9\u5f0f\u662f\u6b63\u4ea4\u7684\uff09\uff0c\u90a3\u79fb\u52a8\u7684\u903b\u8f91\u653e\u5230\u54ea\u5462\uff1f\u7b54\u6848\u662f\u653e\u5728\u8fd9\u4e2a\u201c\u5207\u7247\u201c\u4e0a\u3002\u4f46\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u4f1a\u770b\u5230\u628a\u903b\u8f91\u653e\u5728 ","[Movement]"," \u4e0a\u7684\u505a\u6cd5\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u90fd\u662f\u53ef\u53d6\u7684\uff0c\u540e\u4e00\u79cd\u62e5\u6709\u8f83\u4e3a\u7b80\u5355\u7684\u5b9e\u73b0\u5e76\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u800c",(0,n.kt)("strong",{parentName:"p"},"\u524d\u4e00\u79cd\u62e5\u6709\u66f4\u7cbe\u51c6\u7684\u8bed\u4e49\uff0c\u66f4\u597d\u7684\u62bd\u8c61"),"\uff08\u540e\u4e00\u79cd\u79cd\u65b9\u5f0f\u4e2d ","[Movement]"," \u53bb\u8bbf\u95ee\u5e76\u4fee\u6539\u4e86 ","[Location]"," \u7684\u6570\u636e\uff0c\u8fd9\u7834\u574f\u4e86\u4e00\u5b9a\u7684\u5c01\u95ed\u6027\uff0c\u4e14\u5f62\u6210\u4e86\u8026\u5408\uff0c\u5f53\u7136\u8fd9\u79cd\u8026\u5408\u4e5f\u6709\u4e00\u5b9a\u7684\u597d\u5904\uff0c\u5982\u907f\u514d\u53ea\u6dfb\u52a0\u4e86 ","[Movement]"," \u8fd9\u79cd\u65e0\u610f\u4e49\u7684\u60c5\u51b5\u53d1\u751f\uff09\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aBenzzZX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://zhuanlan.zhihu.com/p/41652478"},"https://zhuanlan.zhihu.com/p/41652478"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h4",{id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"},"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"),(0,n.kt)("h4",{id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"},"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"),(0,n.kt)("h2",{id:"23-creation-vm"},"2.3 Creation VM"),(0,n.kt)("p",null,"\u8ddf\u5f15\u64ce\u9ad8\u5ea6\u4e00\u4f53\u5316\uff0c\u4e0d\u662f\u72ec\u7acb\u7684\u865a\u62df\u673a"),(0,n.kt)("h3",{id:"231-creation-table-engine"},"2.3.1 Creation Table Engine"),(0,n.kt)("p",null,"Table Engine\u7ef4\u62a4\u4e00\u4e2aDatabase\uff0c\u4e3b\u8981\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u9020\u548c\u5b58\u50a8\u6240\u6709\u57fa\u4e8eData-driven\u7684\u6570\u636e\uff0c\u5305\u62ecComponent\u7684\u6570\u636e\u3001\u4e8b\u4ef6\u5217\u8868\u3001Hierarchical Level\u6570\u636e\u3001\u884c\u4e3a\u6811/\u72b6\u6001\u673a\u7b49\u7ed3\u6784\uff0c\u6240\u6709\u6570\u636e\u90fd\u5df2\u6570\u7ec4\u7684\u5f62\u5f0f\u7ec4\u7ec7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9Table\u6570\u636e\u8fdb\u884c\u65b0\u589e\u3001\u5220\u9664\u3001\u4fee\u6539\u3001\u6392\u5e8f\u7b49\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u9700\u8981\u5ef6\u8fdf\u5230Component\u8fdb\u884c\u540e\u7edf\u4e00\u8fdb\u884c\u5904\u7406\uff0c\u800c\u4e0d\u662f\u7acb\u5373\u5904\u7406\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8eComponent\u7684\u6570\u636e\uff0c\u7531\u4e8e\u6240\u6709\u6570\u636e\u6df7\u5728\u4e00\u8d77\uff0c\u9700\u8981\u6309\u7167ArchType\u8fdb\u884c\u7ec4\u7ec7\u3002\u5e76\u4e14\u5757\u5143\u7d20\u7684\u5927\u5c0f\u8fdb\u884c\u81ea\u52a8\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u63d0\u4f9b\u4e00\u4e9b\u6807\u51c6\u7f16\u7a0b\u6848\u4f8b"),(0,n.kt)("p",null,"\u865a\u62df\u673a\u7684\u8bbe\u8ba1\uff1a"),(0,n.kt)("p",null,"\u5982\u679c\u6570\u636e\u90fd\u662fTable\u7c7b\u578b\u7684\u683c\u5f0f\uff0c\u90a3\u4e48\u52a8\u6001\u9700\u8981\u7684\u865a\u62df\u673a\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u5904\u7406\u539f\u751f\u7c7b\u578b\uff0c\u6240\u6709Table\u6570\u636e\u7684\u5206\u914d\u548c\u7ba1\u7406\u90fd\u4ea4\u7ed9\u7cfb\u7edf\u5c42\uff0c\u8fd9\u6837\u811a\u672c\u9700\u8981\u751f\u6210\u7684\u4ee3\u7801\u4e5f\u4e3a\u201c\u7eaf\u4ee3\u7801\u201d\uff0c\u8fd9\u4e9b\u5b57\u8282\u7801\u5bf9\u5e94\u7684\u64cd\u4f5c\u6570\u5730\u5740\u7684\u5206\u914d\u5219\u4e3aC++\u5c42\u7684\u7f16\u8bd1\u578b\u4ee3\u7801\uff0c\u800c\u4e0d\u662f\u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u907f\u514d\u4e86\u811a\u672c\u8bed\u8a00\u590d\u6742\u7684\u6570\u636e\u5730\u5740\u5206\u914d\uff1a\u4f8b\u5982\u6784\u9020\u865a\u62df\u5bc4\u5b58\u5668\u6216\u8005\u865a\u62df\u6808\uff0c\u4ee5\u53ca\u5bf9\u5e94\u4e3a\u4e86\u6784\u5efa\u865a\u62df\u5bc4\u5b58\u5668\u800c\u6784\u9020\u7684\u7b26\u53f7\u8868\u4ee5\u53ca\u7b26\u53f7\u8868\u7684\u89e3\u91ca\u6620\u5c04\u7b49"),(0,n.kt)("p",null,"\u6240\u6709\u7684\u4ee3\u7801\uff0c\u5728\u865a\u62df\u673a\u8fd9\u4e00\u5c42\u90fd\u662f\u8f6c\u5316\u4e3a\u5bf9table\u7684\u67d0\u79cd\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u5c01\u88c5\u4e3a\u57fa\u7840\u7684C++\u5c42\u7684\u4ee3\u7801\uff0c\u81ea\u52a8\u5c31\u5904\u7406\u4e86\u5185\u5b58\u5730\u5740\u7684\u5206\u914d"),(0,n.kt)("p",null,"\u8981\u62c6\u89e3Table\u7684\u57fa\u672c\u64cd\u4f5c\uff0c\u4e5f\u5c31\u662fSTL\u4e2d\u57fa\u7840Vector\u7684\u57fa\u7840\u6570\u636e\u64cd\u4f5c\uff0c\u5e94\u8be5\u80fd\u591f\u63d0\u70bc\u51fa\u6240\u6709\u53ef\u80fd\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u7136\u540e\u5c01\u88c5\u4e3a\u865a\u62df\u673a\u5c42\u7684\u9ad8\u7ea7\u57fa\u7840\u6307\u4ee4"),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2aTable Library \u5c31\u662f\u4e00\u4e2a\u7c7b\u4f3cSTL\u7684\u5e93\uff0c\u5b83\u5c01\u88c5\u4e00\u4e9b\u7279\u5b9a\u7684Table\u7684\u64cd\u4f5c\u7c7b\u578b\u548c\u64cd\u4f5c\u65b9\u6cd5\uff0c\u9762\u5411\u6570\u636e\u9a71\u52a8\u7684\u6574\u4e2a\u67b6\u6784\uff0c\u65e2\u652f\u6301\u539f\u751fC++\u8c03\u7528\uff0c\u4e5f\u652f\u6301\u865a\u62df\u673a\u57fa\u7840\u6307\u4ee4\u5c01\u88c5\uff0c\u8fd9\u5c31\u597d\u6bd4Lua\u7684\u67d0\u4e9b\u65b9\u6cd5\u7531C\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684C\u64cd\u4f5c\u662f\u66f4\u4f4e\u5c42\u7684\u64cd\u4f5c\uff0c\u5e76\u4e14\u8fd9\u91cc\u7684\u6570\u636e\u7531C\u5b9a\u4e49\u548c\u5206\u914d\uff0c\u800c\u4e0d\u662f\u50cfLua\u4e00\u6837\u7531Lua\u5206\u914d\u518d\u4f20\u7ed9C\uff0c\u6240\u4ee5\u8fd9\u91cc\u811a\u672c\u8bed\u8a00\u7684\u5b9a\u4e49\u8bed\u8a00\u5904\u7406\u7279\u6b8a\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u4f8b\u5982\u811a\u672c\u8bed\u8a00\u4e2d\u5bf9\u53d8\u91cf\u7684\u4f7f\u7528\u90fd\u7ffb\u8bd1\u4e3a\u5bf9C\u5bf9\u8c61\u7684\u4f7f\u7528\uff0c\u6ca1\u6709\u53d8\u91cf\u590d\u5236\uff0c\u6ca1\u6709\u6570\u636e\u53ea\u6709\u6307\u4ee4"),(0,n.kt)("p",null,"\u5982\u679c\u811a\u672c\u8bed\u8a00\u4e2d\u4e0d\u542b\u7ed3\u6784\u58f0\u660e\uff0c\u6216\u8005\u6ca1\u6709\u81ea\u5df1\u7684\u7ed3\u6784\u4f53\uff0c\u53ea\u6709\u7b80\u5355\u53d8\u91cf\uff0c\u90a3\u4e48\u6574\u4e2a\u89e3\u91ca\u8fc7\u7a0b\u662f\u4e0d\u662f\u4f1a\u5feb\u5f88\u591a"),(0,n.kt)("h4",{id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4"},"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5355\u72ec\u7f16\u8bd1\uff0c\u9996\u5148\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u5f97\u662f\u72ec\u7acb\u7684\uff0c\u53e6\u5916\u8fd9\u4e9b\u6570\u636e\u7684\u5e03\u5c40\u5f97\u662f\u56fa\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ec4\u4ef6\u9700\u8981\u8bbf\u95ee\u7684\u6bcf\u4e2a\u53d8\u91cf\uff0c\u4f7f\u7528\u6307\u9488\u7684\u65b9\u5f0f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u8fd9\u610f\u5473\u7740\u865a\u62df\u673a\u9700\u8981\u52a8\u6001\u7ed9\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u6bcf\u4e2a\u5730\u5740\u8d4b\u503c\uff0c\u8fd9\u51e0\u4e4e\u662f\u4e0d\u65e0\u505a\u5230\u7684\uff0c\u56e0\u4e3a\u865a\u62df\u673a\u53ea\u5904\u7406\u89c4\u5219\u7684\u5185\u5bb9\uff0c\u901a\u7528\u6027\u7684\u89c4\u5219\uff0c\u4f46\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u786e\u5b9e\u4e0d\u4e00\u6837\u7684\uff0c\u9664\u975e\u662f\u89e3\u91ca\u5668\u6216\u8005\u865a\u62df\u673a\u81ea\u5df1\u5206\u914d\u7684\u5185\u5b58\uff0c\u4f46\u662f\u8fd9\u91cc\u4e00\u4e2a\u5b9e\u4f53\u7684\u7ec4\u4ef6\u7684\u6570\u636e\u4e0d\u662f\u7531\u7ec4\u4ef6\u4ee3\u7801\u81ea\u5df1\u5206\u914d\u7684\uff08\u4f60\u5982\u4f20\u7edf\u7684\u5bc4\u5b58\u5668\u5bfb\u5740\uff0c\u5c31\u662f\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u76f4\u63a5\u9488\u5bf9\u4ee3\u7801\u8bbe\u7f6e\u597d\u5bc4\u5b58\u5668\u5730\u5740\uff09\uff0c\u800c\u662f\u7531Creation Table\u81ea\u5df1\u5206\u914d\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u79cd\u5206\u79bb\uff0c\u7ec4\u597d\u7684\u65b9\u5f0f\u5c31\u662f\u5c06\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u653e\u5728\u4e00\u4e2a\u8fde\u7eed\u7684\u5185\u5b58\u5730\u5740\u4e2d\uff0c\u7136\u540e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u673a\u53ea\u8981\u52a8\u6001\u5c06\u8d77\u59cb\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u89c4\u5219\u662f\u901a\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u5668\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u5bfb\u5740\u8f6c\u6362\u4e3a\u57fa\u4e8e\u76f8\u5bf9\u4f4d\u7f6e\u7684\u5bfb\u5740")),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u865a\u62df\u673a\u4e2d\u6267\u884c\u51fd\u6570\u8c03\u7528\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u91c7\u7528\u6808\u5f0f\u65b9\u6cd5\uff0c\u6240\u6709\u51fd\u6570\u9700\u8981\u8bbf\u95ee\u7684\u53d8\u91cf\u5b58\u50a8\u5728\u4e00\u4e2a\u6808\u4e2d\uff0c\u51fd\u6570\u6309\u7d22\u5f15\u5bf9\u6808\u4e2d\u7684\u5185\u5b58\u8fdb\u884c\u8bbf\u95ee\u3002"),(0,n.kt)("h4",{id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"},"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u53ea\u6709\u7ec4\u4ef6\u7c7b\u578b\uff0c\u7ec4\u4ef6\u53ea\u6709\u6570\u636e\uff0c\u6ca1\u6709\u65b0\u7684\u7ed3\u6784\u4f53\u5b9a\u4e49"),"\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u6709\u4e00\u5b9a\u7684\u57fa\u7840\u6570\u636e\u7ed3\u6784\uff0c\u4f46\u662f\u5176\u4ed6\u7684\u6570\u636e\u7ed3\u6784\u5747\u6709\u7ec4\u4ef6\u7684\u6570\u636e\u5b9a\u4e49\u9690\u5f0f\u51b3\u5b9a\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7c7b\u578b\u5b9a\u4e49\u5728\u811a\u672c\u8bed\u8a00\u4e2d\uff0c\u5e76\u4e14\u662f\u6309\u7167\u5355\u4e2a\u7ec4\u4ef6\u7684\u7c7b\u578b\u8fdb\u884c\u5b9a\u4e49\u7684\uff0c\u5373AOS\uff08array of struct\uff09\uff0c\u4e24\u4e2a\u539f\u56e0 \uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u5e76\u4e0d\u5229\u4e8e\u9ad8\u6027\u80fd \u8ba1\u7b97\uff0c\u9ad8\u6027\u80fd\u8ba1\u7b97\u9700\u8981\u662fSOA\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u5e95\u5c42\u865a\u62df\u673a\u5e76\u4e0d\u4e86\u89e3\u7ec4\u4ef6\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5bfc\u81f4\u4e0d\u80fd\u52a8\u6001\u6784\u9020\u5bf9\u8c61\uff1b\u56e0\u6b64\u9700\u8981\u5728\u811a\u672c\u8bed\u8a00\u5c42\u9762\u76f4\u63a5\u6784\u9020\u5bf9\u8c61\uff0c\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u5c31\u9700\u8981\u5b9e\u73b0\u590d\u6742\u5bf9\u8c61\uff0c\u53ca\u5176\u76f8\u5e94\u7684\u5783\u573e\u56de\u6536\u673a\u5236\uff1b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0cUnity\u4f7f\u7528\u4e86\u79bb\u7ebf\u7f16\u8bd1\u7684\u65b9\u5f0f\uff0c\u5c06\u7ec4\u4ef6\u6570\u636e\u7684\u6784\u9020\u8f6c\u6362\u6210\u4e86\u53e6\u5916\u67d0\u79cd\u5f62\u5f0f\u7684\u4e2d\u95f4\u4ee3\u7801\uff1b\u8fd9\u6837\u4f7f\u5f97\u53ef\u4ee5SOA\u7684\u5f62\u5f0f\u8fdb\u884c \u6570\u636e\u7ba1\u7406\uff0c\u4f46\u662f\u5b83 \u53ef\u80fd\u4e0d\u652f\u6301\u52a8\u6001\u66f4\u65b0\uff0c\u6216\u8005\u81f3\u5c11\u9700\u8981\u52a8\u6001\u66f4\u65b0\u6574\u4e2a\u7f16\u8bd1\u540e\u7684\u4e2d\u95f4\u4ee3\u7801\uff1f"),(0,n.kt)("p",null,"\u5f53CTE\u8bd5\u56fe\u5c06 \u4e0a\u8ff0\u8fc7\u7a0b\u653e\u5230\u8fd0\u884c\u65f6\u52a8\u6001\u89e3\u6790\u65f6\uff0c\u6027\u80fd\u662f\u9700\u8981\u91cd\u70b9\u8003\u8651 \u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u7eafA OS->SOA\u7684\u5f00\u9500"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5f53\u573a\u666f\u4e2d\u6709 \u5927\u91cf\u5bf9\u8c61\u65f6 \uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u7684\u6570\u636e\u5173\u7cfb\u7b49\u7b49\u7684\u5224\u65ad\u53ef\u80fd\u4f1a\u975e\u5e38 \u6d88\u8017\u65f6\u95f4")),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u597d\u597d\u5212\u5206\u9636\u6bb5\uff0c\u5e76\u628a\u90e8\u5206\u6570\u636e\u662f\u5426\u53ef\u4ee5\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2aCreation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u786e\u5b9a\u5b83\u5f15\u7528\u7684\u6240\u6709\u53d8\u91cf\u53ca\u5176\u7ec4\u5408\u5173\u7cfb\uff0c\u8fd9\u90e8\u5206\u662f\u5426\u53ef\u4ee5\u9884\u8ba1\u7b97\u6210 \u67d0\u79cd\u683c\u5f0f\uff0c\u5373\u662f\u8ba1\u7b97ArchType\u7684\u65f6\u95f4\uff0c\u8fd9\u4e9b\u53ef\u4ee5 \u5728\u4e91\u7aef\u4e0b\u8f7d \u8d44\u6e90 \u7684 \u65f6\u5019\u8ba1\u7b97 \u597d\uff0c\u4e0b\u8f7d\u65f6\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd0\u884c\u65f6\u9996\u5148\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u5173\u7cfb\u521d\u59cb\u5316\u6570\u7ec4"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6d89\u53ca\u7528\u6237\u5728\u7aef\u4fa7\u7f16\u8f91\u6570\u636e\uff0c\u5219\u9488\u5bf9\u6bcf\u4e2a\u5bf9\u8c61\u52a8\u6001\u4fee\u6539 \uff0c\u4f46\u6b64\u65f6\u5e94\u8be5\u4e0d\u4f1a\u592a\u5f71\u54cd\u6027\u80fd\u3002")),(0,n.kt)("p",null,"\u56e0\u4e3a\u8fd9\u79cdAOS->SOA\u7684\u8f6c\u6362\uff0c\u4f7f\u5f97\u4e0a\u5c42\u811a\u672c\u8bed\u8a00\u5b9a\u4e49\u7684\u5bf9\u8c61\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e0a\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u4ece\u800c\u51cf\u5c11\u811a\u672c\u5c42\u9762\u7684\u590d\u6742\u5ea6\uff0c\u5e76\u4f7f\u5f97\u539f\u751f\u8bed\u8a00 \u7ba1\u7406\u5bf9\u8c61\u6027\u80fd\u66f4\u9ad8\u6548\u3002\u800c\u8fd9\u79cd\u8f6c\u6362\u673a\u5236\u80cc\u540e\u7684\u6838\u5fc3\u56e0\u7d20\u662f\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u89e3\u91ca\u5668\u52a8\u6001\u8bc6\u522b\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e76\u4ece\u4e2d\u63d0\u53d6\u5c5e\u6027\u53ca\u5176\u7b26\u53f7")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4ee5\u53ca\u5e95\u5c42ECS\u7684\u673a\u5236\u5c06\u8fd9\u4e9b\u5c5e\u6027\u8f6c\u6362\u4e3aSOA\u6570\u7ec4\uff0c\u7531\u4e8e\u6574\u4e2aCTE\u90fd\u662f\u5df2\u77e5\u57fa\u7840\u6570\u636e\u7c7b\u578b\u7684\u6570\u7ec4\uff0c\u6240\u4ee5\u95f4\u63a5\u5730\u4e0d\u9700\u8981\u5173\u6ce8\u4e0a\u5c42 \u811a\u672c\u5b9e\u9645\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6bcf\u4e2a\u5143\u7d20\u6309\u7167\u7d22\u5f15\u8fdb\u884c\u5bfb\u5740\u5373\u53ef\u3002"))),(0,n.kt)("p",null,"\u6574\u4e2aTable\u4e2d\u6ca1\u6709\u4efb\u4f55\u672a\u77e5Struct\u5bf9\u8c61\uff0c\u6240\u8c13\u672a\u77e5\u5373\u662f\u7528\u6237\u5b9a\u4e49\u7684struct\u3002\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u5c31\u662f\u89e3\u91ca\u5668\u52a8\u6001\u5bf9\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\u8fdb\u884c\u91cd\u65b0\u6620\u5c04\uff0c\u901a\u8fc7\u6570\u7ec4\u7d22\u5f15+\u57fa\u7840\u53d8\u91cf\u7c7b\u578b\uff0c\u5c31\u80fd\u8ba1\u7b97\u51fa\u6b63\u786e\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002\u56e0\u4e3a\u6570\u636e\u5728\u5185\u5b58\u4e2d\u662f\u6ca1\u6709struct\u7684\u6982\u5ff5\u7684\uff0cstruct\u7684\u4f5c\u7528\u5728\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u6216\u8005\u89e3\u91ca\u5668\u8ba1\u7b97\u5185\u5b58\u4e2d\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u6211\u4eec\u4e0d\u80fd\u652f\u6301\u7528\u6237\u7aef\u81ea\u5b9a\u4e49struct\uff0c\u5426\u5219\u865a\u62df\u673a\u65e0\u6cd5\u8bc6\u522b\uff0c\u5c31\u9700\u8981\u590d\u6742\u7684\u673a\u5236\u6765\u8bc6\u522b\u7ed3\u6784\u4f53\u3002\u7531\u4e8e\u6e38\u620f\u7684\u7279\u6b8a\u6027\uff1a\u5b83\u80fd\u591f\u5c06\u6240\u6709\u6570\u636e\u901a\u8fc7ECS\u7684\u673a\u5236\u8f6c\u5316\u4e3aTable\uff0c\u6240\u4ee5\u6211\u4eec\u6709\u5c31\u4f1a\u53bb\u9664\u6389\u7ed3\u6784\u4f53\u6216\u8005\u76f8\u5173\u7684\u7c7b\u578b\u89e3\u6790\uff0c\u53d8\u6210\u66f4\u7b80\u5355\u7684\u7d22\u5f15\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u8003\u8651\u6027\u80fd\uff0c\u8fd9\u91cc\u53ef\u80fd\u9700\u8981\u8003\u8651AOT\u7684\u673a\u5236\uff0c\u5373\u63d0\u524d\u5c06\u7d22\u5f15\u7684\u8ba1\u7b97\u8f6c\u5316\u4e3a\u4e2d\u95f4\u5f62\u5f0f\uff0c\u4e0d\u7136\u6bcf\u6b21\u8981\u901a\u8fc7\u865a\u62df\u673a\u4e2d\u7684\u7d22\u5f15\u6620\u5c04\u65b9\u6cd5\u6765\u52a8\u6001\u8ba1\u7b97\u7d22\u5f15\uff0c\u6027\u80fd\u5f00\u652f\u5c31\u4f1a\u6bd4\u8f83\u5927\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u4e2a\u7d22\u5f15\u662f\u8ddf\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u76f8\u5173\u8054\u7684\uff0c\u6240\u4ee5\u9700\u8981\u5728\u5bf9\u8c61\u7684\u521b\u5efa/\u4fee\u6539/\u5220\u9664\u7b49\u73af\u8282\u8fdb\u884c\u91cd\u65b0\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406"},"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*"),(0,n.kt)("p",null,"\u5c3d\u7ba1Table\u4e2d\u7684\u6570\u636e\u5728\u4e0d\u65ad\u53d8\u5316\uff0c\u4f46\u662f\u8fd9\u90e8\u5206\u7684\u53d8\u5316\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8ddf\u5783\u573e\u56de\u6536\u7684\u601d\u8def\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u6bb5\u8fde\u7eed\u7684\u5185\u5b58\u4e0d\u591f\u65f6\uff0c\u9700\u8981\u91cd\u65b0\u5ea6\u6570\u636e\u7684\u5e03\u5c40\u8fdb\u884c\u8c03\u6574"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u5199\u5bf9\u8c61\u4e0d\u518d\u4f7f\u7528\u65f6\uff0c\u5783\u573e\u56de\u6536\u5668\u53ef\u80fd\u9700\u8981\u5bf9\u67d0\u6bb5\u5185\u5b58\u6570\u636e\u8fdb\u884c\u64e6\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u8bb0\u5f55\u5bf9\u8c61\u4e4b\u95f4\u7684\u7d22\u5f15\uff0c\u5173\u7cfb\u7b49\u7b49")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u90e8\u5206\u601d\u60f3\u53ef\u4ee5\u53c2\u8003\u5783\u573e\u56de\u6536\u7684\u4e00\u4e9b\u601d\u60f3\u548c\u7b97\u6cd5\u3002"),(0,n.kt)("h3",{id:"232-addremove"},"2.3.2 Add\u3001Remove"),(0,n.kt)("p",null,"\u5bf9\u6570\u7ec4\u7684\u64cd\u4f5c\u4e00\u822c\u7531Component\u53d1\u8d77\uff0c\u4f46\u662f\u4e0d\u80fd\u7acb\u5373\u5bf9Table\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u4e3a\u5176\u4ed6Component\u6b63\u5728\u8bbf\u95ee\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u4e9b\u4fee\u6539\u9700\u8981\u5ef6\u8fdf\u5230Component\u548c\u5176\u4ed6\u64cd\u4f5c\u6267\u884c\u5b8c\u6bd5\uff0c\u9700\u8981\u4f7f\u7528\u8bf8\u5982\u7f13\u5b58\u961f\u5217\u4e4b\u7c7b\u7684\u67b6\u6784\u3002\u539f\u5219\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u7ec4\u7ed3\u6784\u7684\u4fee\u6539\u9700\u8981\u5355\u72ec\u4e0d\u7406\uff0c\u4e0d\u80fd\u5f71\u54cd\u5f53\u524d\u64cd\u4f5c")),(0,n.kt)("h3",{id:"233-change-driven-update"},"2.3.3 Change-driven Update"),(0,n.kt)("p",null,"\u5728\u6bcf\u4e00\u5e27\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u901a\u5e38\u505a\u4e09\u79cd\u7c7b\u578b\u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u505a\u4efb\u4f55\u5224\u65ad\uff0c\u628a\u6574\u4e2a\u903b\u8f91\u5b8c\u6574\u6267\u884c\u4e00\u904d\uff0c\u54ea\u6015\u5176\u4e2d\u6d89\u53ca\u7684\u6570\u636e\u6ca1\u6709\u4efb\u4f55\u53d8\u5316\uff08\u56e0\u6b64\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u4efb\u4f55\u53d8\u5316\uff09\uff0c\u8fd9\u79cd\u8ba1\u7b97\u7b56\u7565\u662f\u975e\u5e38\u6d6a\u8d39\u7684\uff0c\u4f46\u662f\u5b83\u786e\u662f\u7ba1\u7406\u6210\u672c\u6700\u4f4e\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u7c7b\u578b\u5305\u542b\u903b\u8f91\u5224\u65ad\uff0c\u56e0\u6b64\u4e00\u90e8\u5206\u8ba1\u7b97\u6307\u4ee4\u96c6\u4e8e\u67d0\u4e9b\u5c5e\u6027\u503c\u7684\u4e0d\u540c\u53ef\u80fd\u4e0d\u4f1a\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u7c7b\u662f\u5305\u542b\u4e00\u4e9b\u9700\u8981\u8de8\u8d8a\u591a\u5e27\u6267\u884c\u7684\u903b\u8f91\uff0c\u4f8b\u5982\u52a8\u753b\uff0c\u5b83\u4eec\u901a\u5e38\u53ea\u6267\u884c\u4e00\u6bb5\u8fde\u7eed\u7684\u65f6\u95f4\uff0c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7531\u4e8e\u5c5e\u6027\u6570\u636e\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u5b83\u9700\u8981\u50cf\u7b2c\u4e00\u79cd\u65b9\u5f0f\u4e00\u6837\u5b8c\u6574\u6267\u884c\uff1b\u4f46\u662f\u4e00\u65e6\u8fd9\u6bb5\u65f6\u95f4\u7ed3\u675f\uff0c\u5b83\u53ef\u80fd\u5c31\u4e0d\u518d\u9700\u8981\u88ab\u6267\u884c\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u548c\u7b2c\u4e8c\u79cd\u7c7b\u578b\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e00\u79cd\uff0c\u56e0\u4e3a\u5982\u679c\u6240\u6709\u8f93\u5165\u6570\u636e\u90fd\u4e0d\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u7406\u8bba\u4e0a\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u53d8\u5316\uff0c\u56e0\u6b64\u53ef\u4ee5\u4e0d\u7528\u6267\u884c\u3002\u7406\u8bba\u4e0a\u7b2c\u4e00\u79cd\u60c5\u51b5\u53ef\u4ee5\u628a\u67d0\u4e9b\u5c5e\u6027\u6570\u636e\u4f5c\u4e3a\u5224\u65ad\u6761\u4ef6\uff0c\u7136\u540e\u7b2c\u4e00\u79cd\u60c5\u51b5\u5c31\u53d8\u4e3a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u3002\u5bf9\u4e8e\u8fd9\u4e24\u79cd\u60c5\u51b5\uff0c\u4e5f\u6709\u53ef\u80fd\u5224\u65ad\u6761\u4ef6\u4f1a\u5305\u542b\u591a\u4e2a\uff0c\u56e0\u6b64\u6839\u636eECS\u7684\u601d\u8def\u53ef\u4ee5\u62c6\u5206\uff0c\u81f3\u5c11\u62c6\u5206\u6210\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u4e2a\u5224\u65ad\u6761\u4ef6\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u79cd\u5224\u65ad\u6761\u4ef6\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u628a\u8fd9\u4e2a\u5224\u65ad\u6761\u4ef6\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u89c2\u5bdf\u503c\uff0c\u53ea\u6709\u8fd9\u4e2a\u503c\u53d1\u751f\u53d8\u5316\u65f6\u624d\u9700\u8981\u5b8c\u6574\u6267\u884c\u6574\u4e2a\u7ec4\u4ef6\u7684\u903b\u8f91\u3002\u8fd9\u5c31\u662fChange-driven update\u7684\u6838\u5fc3\u601d\u8def\u3002\u5f53\u7136\u5904\u4e8e\u7b80\u5355\uff0c\u6211\u4eec\u53ea\u5224\u65ad\u503c\u662f\u5426\u53d1\u751f\u53d8\u5316\uff0c\u800c\u4e0d\u662f\u68c0\u6d4b\u66f4\u5177\u4f53\u7684\u6761\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u6761\u4ef6\u662f\u53d8\u91cfa\u5927\u4e8e10\uff0c\u90a3\u4e48a\u75313\u53d8\u62104\u4e5f\u662f\u89e6\u53d1\u903b\u8f91\u66f4\u65b0\u3002\u4f46\u662f\u5c06\u903b\u8f91\u5224\u65ad\u9644\u52a0\u5230\u5c5e\u6027\u503c\u4e0a\u5219\u4f1a\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u8fd9\u5bf9\u4e8e\u4e00\u4e9b\u5305\u542b\u590d\u6742\u8ba1\u7b97\u6216\u8005\u6d89\u53ca\u8f83\u5927\u6570\u636e\u52a0\u8f7d\u7684\u7ec4\u4ef6\u90fd\u662f\u975e\u5e38\u6709\u76ca\u7684\u3002\u800c\u4e14\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bb2\u4e5f\u4e0d\u7b97\u590d\u6742\uff0c\u53ef\u80fd\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u72b6\u6001\u53d8\u91cf\uff0c\u5e76\u77e5\u9053\u8fd9\u51e0\u4e2a\u53d8\u91cf\u9700\u8981\u68c0\u6d4b\u5373\u53ef\u3002\u5f53\u7136\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5224\u65ad\u662f\u5426\u8fd9\u4e9b\u503c\u7684\u53d8\u5316\u80fd\u5b8c\u5168\u51b3\u5b9a\u6216\u8986\u76d6\u6574\u4e2a\u903b\u8f91\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u53ea\u6709\u4fee\u6539\u8fc7\u7684\u6570\u636e\u624d\u4f1aUpdate"),(0,n.kt)("h4",{id:"2331-\u7406\u8bba\u57fa\u7840"},"2.3.3.1 \u7406\u8bba\u57fa\u7840"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7406\u8bba\u4e0a\u662f\u4e00\u4e2a\u7eaf\u51fd\u6570\uff0c\u5373\u5982\u679c\u8f93\u5165\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8f93\u51fa\u4e5f\u4e0d\u4f1a\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76d1\u6d4b\u8f93\u5165\uff0c\u53ea\u8981\u8f93\u5165\u7684\u503c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5bf9\u5176\u76f8\u5173\u7684\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5f53\u7136\u8fd9\u91cc\u52a8\u753b\u662f\u4e2a\u4f8b\u5916\uff0c\u4ee5\u53ca\u4e00\u4e9b\u81ea\u884c\u5b9a\u4e49\u8de8\u5e27\u8ba1\u7b97\u903b\u8f91\u7684\u7ec4\u4ef6"),"\uff0c\u6240\u4ee5\u8fd9\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u7684\u5c5e\u6027\u8fdb\u884c\u8bbe\u7f6e\uff0c\u8981\u6c42\u662f\u5426\u5bf9\u8f93\u5165\u8fdb\u884c\u76d1\u6d4b\uff0c\u4ee5\u9a71\u52a8\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".ChangedDriven(True)\n")),(0,n.kt)("p",null,"\u5f53\u7136\u53c2\u89c12.2.3.3\u8282\u53ef\u89c1\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u6240\u6709\u8de8\u5e27\u72b6\u6001\u770b\u505a\u662fdt\u7684\u51fd\u6570\uff0c\u9700\u8981\u5728\u6bcf\u5e27\u8fdb\u884c\u91cd\u590d\u8ba1\u7b97\uff0c\u6240\u4ee5\u7ec4\u4ef6\u51fd\u6570\u672c\u8eab\u4ecd\u7136\u662f\u7eaf\u51fd\u6570\uff0c\u8fd9\u91cc\u5b9e\u8d28\u4e0a\u662f\u5c06dt\u4e5f\u770b\u505a\u4e86\u4e00\u4e2a \u8f93\u5165\u53c2\u6570\uff0c\u800c\u5176\u4ed6\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u4e0d\u4f1a\u4f7f\u7528\u7ec4\u4ef6\u53c2\u6570\u7684\u3002\u6240\u4ee5\u8fd9\u91cc\u5c06\u7ec4\u4ef6\u5c5e\u6027\u540d\u6539\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".UseDt(True)\n")),(0,n.kt)("p",null,"\u53ef\u80fd\u66f4\u5408\u9002\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u8fd9\u91cc\u8868\u9762\u4e0a\u770b\uff0c\u597d\u50cf\u53ef\u4ee5\u901a\u8fc7\u51fd\u6570\u662f\u5426\u5f15\u7528dt\u8fdb\u884c\u81ea\u52a8\u63a8\u5bfc\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u4f8b\u5982\u51fd\u6570\u53ea\u662f\u4f7f\u7528dt\u6765\u751f\u6210\u968f\u673a\u6570\uff0c\u5e76\u4e0d\u662f\u8ba1\u7b97\u8de8\u5e27\u72b6\u6001\u3002\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4e0d\u80fd\u5bf9dt\u7684\u4f7f\u7528\u6709\u4efb\u4f55\u5047\u8bbe\u3002")),(0,n.kt)("h4",{id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6"},"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6"),(0,n.kt)("p",null,"\u603b\u7684\u539f\u5219\uff0c\u8f93\u5165\u53d8\u5316\u4e86\u624d\u4f1a\u5bfc\u81f4\u7ec4\u4ef6\u6267\u884c\u8fd9\u4ef6\u4e8b\u60c5\u662f\u4e0d\u9700\u8981\u8ba9\u5f00\u53d1\u8005\u611f\u77e5\u7684\uff0c\u66f4\u4e0d\u5e94\u8be5\u9700\u8981\u5b83\u6765\u63a7\u5236\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u662f\u5b8c\u5168\u80fd\u591f\u8ba1\u7b97/\u63a8\u5bfc\u51fa\u8fd9\u4e00\u5207\u7684\u3002\u5f53\u7136\uff0c\u52a8\u753b\u9664\u5916\uff0c\u6216\u8005\u66f4\u786e\u5207\u5730\u8bf4\uff0c\u662f\u90a3\u4e9b\u4e0d\u4f9d\u8d56\u4e8e\u8f93\u5165\uff0c\u800c\u81ea\u884c\u5b9a\u4e49\u4e86\u79c1\u6709\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u6240\u4ee5\u5b9a\u4e49\u79c1\u6709\u53d8\u91cf\uff0c\u5176\u76ee\u7684\u5c31\u662f\u5728\u76f8\u540c\u7684\u8f93\u5165\u4e0b\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u5c31\u662f\u4f20\u7edfOOP\u4e2d\u72b6\u6001\u7684\u5f71\u54cd\u3002\u53c2\u89c12.2.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u5728Bevy\u4e2d\uff0c\u5b83\u4f9d\u8d56\u4e8e\u7531\u7a0b\u5e8f\u5458\u51b3\u5b9a\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5426\u5bf9\u67d0\u4e2aComponent\u9020\u6210\u4e86\u4fee\u6539\uff0c\u4ed6\u9700\u8981\u6bcf\u4e2a\u7ec4\u4ef6\u4f7f\u7528mut\u5173\u952e\u5b57\u7684\u67e5\u8be2\uff0c\u8fd9\u6837\u7cfb\u7edf\u5c31\u53ef\u4ee5\u5224\u65ad\u5176\u503c\u662f\u5426\u53ef\u80fd\u88ab\u4fee\u6539\uff0c\u4f46\u662f\u4e0d\u53ef\u4fee\u6539\u7684\u901a\u5e38\u662f\u5c11\u6570\u3002"),(0,n.kt)("p",null,"\u8ddfUnity\u4e0d\u4e00\u6837\uff0c\u6211\u4eec\u4e0d\u80fd\u628aVersion Number\u66b4\u9732\u5728Query\u4e2d\u8ba9\u5f00\u53d1\u8005\u53bb\u6bd4\u8f83\uff0c\u56e0\u4e3a\u8fd9\u672c\u53ef\u4ee5\u81ea\u52a8\u8fdb\u884c\u7684\u3002\u4f55\u51b5\u5728Query\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u4ecd\u7136\u8fdb\u53bb\u4e86\uff0c\u53ea\u662f\u8fdb\u53bb\u4e4b\u540e\u624d\u53d1\u73b0\u4e0d\u9700\u8981\u8ba1\u7b97\u3002\u8fd9\u4e2a\u5224\u65ad\u7684\u56fa\u5b9a\u7ed3\u6784\u5b8c\u5168\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u53bb\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,"CreationVM\u8fd0\u884c\u65f6\u9700\u8981\u5bf9\u6bcf\u4e2a\u5757\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5982\u679c\u53d1\u73b0\u6ca1\u6709\u4fee\u6539\u5e76\u4e14\u4e0d\u662f\u52a8\u753b\u7c7b\u578b\u7684\uff0c\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a"},"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a"),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u5197\u4f59\u7684\u5b58\u5728\uff0c\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u5f53\u8f93\u5165\u53d1\u751f\u6539\u53d8\u7684\u65f6\u5019\u624d\u8fdb\u884c\u8ba1\u7b97\uff0c\u53ef\u80fd\u4f1a\u5b58\u5728\u5927\u91cf\u91cd\u590d\u8ba1\u7b97\u3002\u6b64\u5916\uff0c\u5373\u4f7f\u662f\u4e0d\u540c\u7684\u8f93\u5165\uff0c\u4e5f\u53ef\u80fd\u5b58\u5728\u76f8\u540c\u7684\u8f93\u51fa\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u4e0d\u80fd\u50cfUnity/Bevy\u90a3\u6837\u4ec5\u51ed\u7ec4\u4ef6\u662f\u5426\u5bf9\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u6765\u8fdb\u884c\u5224\u65ad\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5199\u64cd\u4f5c\u8fd9\u79cd\u903b\u8f91\u662f\u4e0d\u53d8\u7684\uff0c\u610f\u5473\u7740\u5982\u679c\u5b58\u5728\u5927\u91cf\u7684\u6d6a\u8d39\uff0c\u90a3\u4e48\u8fd9\u79cd\u6d6a\u8d39\u4f1a\u4e00\u76f4\u6301\u7eed\uff0c\u8fd9\u672c\u8eab\u662f\u4e00\u79cd\u7ed3\u6784\u6027\u7279\u5f81\uff0c\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u62c9\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bcf\u4e2a\u503c\u8fdb\u884c\u5224\u522b\u6765\u51b3\u5b9a\u5176\u5c5e\u6027\u662f\u5426\u53d1\u751f\u53d8\u66f4\uff0c\u4f46\u7531\u4e8e\u7ec4\u4ef6\u5904\u5728\u5e76\u884c\u8ba1\u7b97\u4e2d\uff0c\u4e0d\u80fd\u7edf\u4e00\u5bf9\u4e00\u4e2a\u5757\u8bbe\u7f6e\u4e00\u4e2aisChanged\u53d8\u91cf\uff0c\u4e3a\u4e86\u907f\u514d\u5bf9\u5171\u4eab\u53d8\u91cf\u7684\u5199\u64cd\u4f5c\uff0c\u9700\u8981\u4f7f\u7528\u548c\u7ec4\u4ef6\u6570\u636e\u4e00\u6837\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u53ef\u4ee5\u9488\u5bf9\u6bcf\u4e2a\u5757\u4e2d\u7684\u6bcf\u4e2a\u53ef\u5199\u5c5e\u6027\u8bbe\u7f6e\u4e00\u4e2a\u901a\u7528\u7684\u6574\u6570\u6570\u7ec4\uff0c\u5f53\u7136\u8fd8\u662fSOA\u7684\u5f62\u5f0f\uff0c\u4f7f\u5f97\u5b83\u4eec\u597d\u50cf\u7ec4\u4ef6\u7684\u53e6\u5916\u4e00\u4e2a\u5c5e\u6027\uff0c\u53ea\u662f\u8fd9\u4e2a\u5c5e\u6027\u662f\u7531\u5757\u8fdb\u884c\u7ba1\u7406\u7684\uff0c\u800c\u5b9e\u4f53\u6216\u8005\u7ec4\u4ef6\u662f\u611f\u77e5\u4e0d\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u51fd\u6570\u5bf9\u8f93\u5165\u503c\u8fdb\u884c\u5199\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u7f16\u8bd1\u5668\u4f1a\u81ea\u52a8\u4e3a\u673a\u5668\u7801\u52a0\u5165\u4e00\u6bb5\u51fd\u6570\uff0c\u8fd9\u7aef\u51fd\u6570\u5176\u5b9e\u505a\u4e86\u4e00\u4e2a\u5224\u65ad\uff1a\u5982\u679c\u8d4b\u503c\u7684\u503c\u4e0e\u539f\u6765\u7684\u503c\u4e0d\u4e00\u6837\uff0c\u5219\u5bf9\u5e94\u5b9e\u4f53\u5bf9\u8c61\u5bf9\u5e94\u7684\u503c\u4e3a1\uff0c\u5426\u5219\u4e3a 0\u3002\u6240\u4ee5\u6bd4\u5982\u4e00\u4e2a\u5305\u542b8\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u7684\u5757\uff0c\u5176\u8ba1\u7b97\u5b8c\u4e4b\u540e\u7684\u503c\u5982\u679c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u5219\u503c\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"00000000\n")),(0,n.kt)("p",null,"\u5982\u679c\u5176\u4e2d\u7684\u4efb\u4f55\u503c\u4e3a1\uff0c\u5219\u610f\u5473\u7740\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u6240\u6709\u540e\u7eed\u4f9d\u8d56\u4e8e\u8be5\u5c5e\u6027\u7684\u7ec4\u4ef6\u90fd\u5e94\u8be5\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5bf9\u5e94\u7684\u8c03\u5ea6\u5668\u5e94\u8be5\u628a\u8fd9\u4e2a\u6539\u53d8\u7684\u72b6\u6001\u4f20\u9012\u7ed9\u6240\u6709\u5f15\u7528\u8be5\u5c5e\u6027\u7684\u5757\u3002\u7136\u540e\u5728\u8fd9\u4e9b\u5757\u8ba1\u7b97\u7684\u65f6\u5019\uff0c\u9996\u5148\u8fdb\u884c\u5224\u65ad\uff0c\u9664\u975e\u6240\u6709\u503c\u90fd\u4e3a0\uff0c\u5426\u5219\u6574\u4e2a\u5757\u90fd\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u5757\u53ea\u9700\u8981\u4fdd\u5b58\u4e00\u4e2a\u6570\u5b57\uff0c\u901a\u8fc7\u4f7f\u7528\u7279\u6b8a\u7684\u5bf9\u4f4d\u8fdb\u884c\u64cd\u4f5c\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u6211\u4eec\u751a\u81f3\u6bcf\u4e2a\u5bf9\u8c61\u53ea\u9700\u8981\u5360\u7528\u4e00\u4e2abit\u7684\u5b58\u50a8\uff0c\u8fd9\u4e2a\u5927\u5c0f\u8ddfUnity DOTS\u7684Version Number\u5360\u7528\u7684\u5b58\u50a8\u5dee\u4e0d\u591a\uff0c\u4f46\u662f\u5176\u539f\u7406\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u5e76\u4e14\u57fa\u4e8e\u503c\uff08\u800c\u4e0d\u662f\u903b\u8f91\uff09\u7684\u6bd4\u8f83\u66f4\u53ef\u9760\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u7684\u9002\u914d\uff0c\u6027\u80fd\u5f00\u9500\u4e5f\u51e0\u4e4e\u53ef\u4ee5\u7701\u7565\u3002"),(0,n.kt)("h4",{id:"2334-version--tracking"},"2.3.3.4 Version Tracking"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"version-tracking",src:l(4305).Z,width:"2360",height:"1318"})),(0,n.kt)("p",null,"Change tracking is a hard problem to solve efficiently and robustly. It\u2019s easier to make it a responsibility of the content creators. They define what is static and what is dynamic. Unity doesn\u2019t want to add complexity to content creators."),(0,n.kt)("p",null,"Fortunately the DOTS architecture has a nice solution for this problem. DOTS queries define read and write access properties to each component included in the query. This helps with scheduling, as multiple reads of the same data are race free and can be executed concurrently."),(0,n.kt)("p",null,"Since the write access is tracked explicitly and misuse is guarded by the compiler, we know which component arrays in each chunk were potentially modified."),(0,n.kt)("p",null,"To implement a \u201cfree\u201d data version tracking system, we add a version number to each component array in each chunk. When write access is requested, the array version number is bumped to the global version counter, which is monotonically increasing. Systems store previously seen global version counter value. This value can be used as version change filter in future queries, to limit the query over chunks that have changed since the system saw them previously. This change tracking system is more robust than dirty flags and doesn\u2019t require any additional bookkeeping."),(0,n.kt)("p",null,"We rely heavily on DOTS change tracking in the hybrid renderer."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Version numbers")),(0,n.kt)("p",null,"Version numbers (also known as generations) detect potential changes. You can use them to implement efficient optimization strategies, such as to skip processing when data hasn't changed since the last frame of the application. It's useful to perform quick version checks on entities to improve the performance of your application."),(0,n.kt)("p",null,"This page outlines all of the different version numbers ECS uses, and the conditions that causes them to change."),(0,n.kt)("p",null,"All version numbers are 32-bit signed integers. They always increase unless they wrap around: signed integer overflow is defined behavior in C#. This means that to compare version numbers, you should use the (in)equality operator, not relational operators."),(0,n.kt)("p",null,"For example, the correct way to check if VersionB is more recent than VersionA is to use the following:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"bool VersionBIsMoreRecent = (VersionB - VersionA) > 0;\n")),(0,n.kt)("p",null,"There is usually no guarantee how much a version number increases by."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityId.Version")),(0,n.kt)("p",null,"An ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is made of an index and a version number. Because ECS recycles indices, the version number is increased in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager")," every time the entity is destroyed. If there is a mismatch in the version numbers when an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is looked up in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager"),", it means that the entity referred to doesn\u2019t exist anymore."),(0,n.kt)("p",null,"For example, before you fetch the position of the enemy that a unit is tracking via an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId"),", you can call ",(0,n.kt)("inlineCode",{parentName:"p"},"ComponentDataFromEntity.Exists"),". This uses the version number to check if the entity still exists."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"World.Version")),(0,n.kt)("p",null,"ECS increases the version number of a World every time it creates or destroys a manager (i.e. system)."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityDataManager.GlobalVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," is increased before every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"System.LastSystemVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion")," takes the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," after every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion[]"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Chunk.ChangeVersion")),(0,n.kt)("p",null,"For each component type in the archetype, this array contains the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," at the time the component array was last accessed as writeable within this chunk. This does not guarantee that anything has changed, only that it might have changed."),(0,n.kt)("p",null,"You can never access shared components as writeable, even if there is a version number stored for those too: it serves no purpose."),(0,n.kt)("p",null,"When you use the ",(0,n.kt)("inlineCode",{parentName:"p"},"WithChangeFilter()")," function in an ",(0,n.kt)("inlineCode",{parentName:"p"},"Entities.ForEach")," construction, ECS compares the ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion")," for that specific component to ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),", and it only processes chunks whose component arrays have been accessed as writeable after the system last started running."),(0,n.kt)("p",null,"For example, if the amount of health points of a group of units is guaranteed not to have changed since the previous frame, you can skip checking if those units should update their damage model."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityManager.m_ComponentTypeOrderVersion[]")),(0,n.kt)("p",null,"For each non-shared component type, ECS increases the version number every time an iterator involving that type becomes invalid. In other words, anything that might modify arrays of that type (not instances)."),(0,n.kt)("p",null,"For example, if you have static objects that a particular component identifies, and a per-chunk bounding box, you only need to update those bounding boxes if the type order version changes for that component."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SharedComponentDataManager.m_SharedComponentVersion[]")),(0,n.kt)("p",null,"These version numbers increase when any structural change happens to the entities stored in a chunk that reference the shared component."),(0,n.kt)("p",null,"For example, if you keep a count of entities per shared component, you can rely on that version number to only redo each count if the corresponding version number changes."),(0,n.kt)("h4",{id:"2335-bevys-change-detection"},"2.3.3.5 Bevy's Change Detection"),(0,n.kt)("p",null,"Bevy allows you to easily detect when data is changed. You can use this to perform actions in response to changes."),(0,n.kt)("p",null,"One of the main use cases is optimization \u2013 avoiding unnecessary work by only doing it if the relevant data has changed. Another use case is triggering special actions to occur on changes, like configuring something or sending the data somewhere."),(0,n.kt)("p",null,"Filtering"),(0,n.kt)("p",null,"You can make a ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html"},"query")," that only yields entities if specific ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/ec.html#components"},"components")," on them have been modified."),(0,n.kt)("p",null,"Use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Added")),(0,n.kt)("p",{parentName:"li"},": detect new component instances"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"if the component was added to an existing entity"),(0,n.kt)("li",{parentName:"ul"},"if a new entity with the component was spawned"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Changed")),(0,n.kt)("p",{parentName:"li"},": detect component instances that have been changed"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"triggers when the component is accessed mutably"),(0,n.kt)("li",{parentName:"ul"},"also triggers if the component is newly-added (as per ",(0,n.kt)("a",{parentName:"li",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added")),")")))),(0,n.kt)("p",null,"(If you want to react to removals, see the page on ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/removal-detection.html"},"removal detection"),". It works differently and is much trickier to use.)"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},'/// Print the stats of friendly players when they change\nfn debug_stats_change(\n query: Query<\n // components\n (&Health, &PlayerXp),\n // filters\n (Without, Or<(Changed, Changed)>), \n >,\n) {\n for (health, xp) in query.iter() {\n eprintln!(\n "hp: {}+{}, xp: {}",\n health.hp, health.extra, xp.0\n );\n }\n}\n\n/// detect new enemies and print their health\nfn debug_new_hostiles(\n query: Query<(Entity, &Health), Added>,\n) {\n for (entity, health) in query.iter() {\n eprintln!("Entity {:?} is now an enemy! HP: {}", entity, health.hp);\n }\n}\n')),(0,n.kt)("p",null,"Checking"),(0,n.kt)("p",null,"If you want to access all the entities, as normal, regardless of if they have been modified, but you just want to check the status, you can use the special ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.ChangeTrackers.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ChangeTrackers"))," query parameter."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Make sprites flash red on frames when the Health changes\nfn debug_damage(\n mut query: Query<(&mut Sprite, ChangeTrackers)>,\n) {\n for (mut sprite, tracker) in query.iter_mut() {\n // detect if the Health changed this frame\n if tracker.is_changed() {\n sprite.color = Color::RED;\n } else {\n // extra check so we don't mutate on every frame without changes\n if sprite.color != Color::WHITE {\n sprite.color = Color::WHITE;\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"This is useful for processing all entities, but doing different things depending on if they have been modified."),(0,n.kt)("p",null,"For ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resources"),", change detection is provided via methods on the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.Res.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Res")),"/",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.ResMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ResMut"))," system parameters."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn check_res_changed(\n my_res: Res,\n) {\n if my_res.is_changed() {\n // do something\n }\n}\n\nfn check_res_added(\n // use Option, not to panic if the resource doesn't exist yet\n my_res: Option>,\n) {\n if let Some(my_res) = my_res {\n // the resource exists\n\n if my_res.is_added() {\n // it was just added\n // do something\n }\n }\n}\n")),(0,n.kt)("p",null,"Note that change detection cannot currently be used to detect ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," changes (via the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/schedule/struct.State.html"},(0,n.kt)("inlineCode",{parentName:"a"},"State"))," ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resource"),") (",(0,n.kt)("a",{parentName:"p",href:"https://github.com/bevyengine/bevy/issues/2343"},"bug"),")."),(0,n.kt)("p",null,"What gets detected"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Changed.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Changed"))," detection is triggered by ",(0,n.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/stable/std/ops/trait.DerefMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"DerefMut")),". Simply accessing components via a mutable query, without actually performing a ",(0,n.kt)("inlineCode",{parentName:"p"},"&mut")," access, will ",(0,n.kt)("em",{parentName:"p"},"not")," trigger it."),(0,n.kt)("p",null,"This makes change detection quite accurate. You can rely on it to optimize your game's performance, or to otherwise trigger things to happen."),(0,n.kt)("p",null,"Also note that when you mutate a component, Bevy does not track if the new value is actually different from the old value. It will always trigger the change detection. If you want to avoid that, simply check it yourself:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn update_player_xp(\n mut query: Query<&mut PlayerXp>,\n) {\n for mut xp in query.iter_mut() {\n let new_xp = maybe_lvl_up(&xp);\n\n // avoid triggering change detection if the value is the same\n if new_xp != *xp {\n *xp = new_xp;\n }\n }\n}\n")),(0,n.kt)("p",null,"Change detection works on a per-",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/systems.html"},"system")," granularity, and is reliable. A system will not detect changes that it made itself, only those done by other systems, and only if it has not seen them before (the changes happened since the last time it ran). If your system only runs sometimes (such as with ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," or ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/run-criteria.html"},"run criteria"),"), you do ",(0,n.kt)("em",{parentName:"p"},"not")," have to worry about missing changes."),(0,n.kt)("p",null,"Beware of frame delay / 1-frame-lag. This can occur if Bevy runs the detecting system before the changing system. The detecting system will see the change the next time it runs, typically on the next frame update."),(0,n.kt)("p",null,"If you need to ensure that changes are handled immediately / during the same frame, you can use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/system-order.html"},"explicit system ordering"),"."),(0,n.kt)("p",null,"However, when detecting component additions with ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added"))," (which are typically done using ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/commands.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Commands")),"), this is not enough; you need ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/stages.html"},"stages"),"."),(0,n.kt)("h3",{id:"234-\u7f16\u8bd1"},"2.3.4 \u7f16\u8bd1"),(0,n.kt)("p",null,"\u7531\u4e8eSystem\u662f\u4e0d\u4f9d\u8d56\u4e8e\u6570\u636e\u53ca\u6570\u636e\u7ed3\u6784\u7684\uff0c\u5b83\u53ea\u5305\u542b\u4e00\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\uff0c\u6bcf\u4e2aSystem\u4f7f\u7528\u7684\u6240\u6709\u6570\u636e\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\u8fdb\u884c\u67e5\u627e\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u53ea\u662f\u8ba1\u7b97\u4e86\u6bcf\u4e2a\u53d8\u91cf\u7684\u4e00\u4e2a\u7d22\u5f15\u5730\u5740\uff0c\u901a\u8fc7\u5806\u800c\u4e0d\u662f\u5806\u6808\u6307\u9488\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u5f00\u53d1\u5b8c\u6210\u4e4b\u540e\u5b83\u7684\u7f16\u8bd1\u5de5\u4f5c\u5c31\u7ed3\u675f\u4e86\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5b9e\u9645\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5b9e\u4f53\uff0c\u4e91\u7aef\u4f1a\u6839\u636e\u8fd9\u4e2a\u5b9e\u4f53\u914d\u7f6e\uff08\u5bf9\u7ec4\u4ef6\u7684\u5f15\u7528\uff09\uff0c\u5bf9\u5b9e\u4f53\u7684\u6570\u636e\u8fdb\u884c\u7ec4\u7ec7\uff0c\u5b83\u4f1a\u6839\u636eSystem\u5bf9\u6570\u636e\u7684\u4f7f\u7528\u5b9a\u4e49\uff0c\u5c06\u8fd9\u4e9b\u6570\u636e\u7cbe\u5fc3\u7ec4\u7ec7\u5728Creation Table\u4e2d\uff0c\u7136\u540e\u518d\u5c06\u9002\u5f53\u7684\u6570\u7ec4\u53ca\u5176\u7d22\u5f15\u53d1\u9001\u7ed9System\u7684\u4ee3\u7801\u8fdb\u884c\u6267\u884c\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7f16\u8f91\u5668Reality Create\u4e2d\uff0c\u5f00\u53d1\u8005\u6bcf\u5199\u5b8c\u4e00\u4e2a\u7ec4\u4ef6\uff08\u4f8b\u5982\u4e00\u4e2aSystem\uff09\u90fd\u4f1a\u8fdb\u884c\u7f16\u8bd1\uff0c\u9664\u975e\u4ed6\u518d\u6b21\u4fee\u6539\u7ec4\u4ef6\u6e90\u4ee3\u7801\uff0c\u5426\u5219\u4e0d\u9700\u8981\u518d\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c5e\u4e8e\u4e00\u79cdAOT\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7528\u6237\uff0c\u5b83\u901a\u5e38\u76f4\u63a5\u5728Reality World app\u4e2d\u8fdb\u884c\u64cd\u4f5c\uff0cTA\u505a\u7684\u4e8b\u60c5\u4e3b\u8981\u662f\u4fee\u6539\u5b9e\u4f53\u7684\u914d\u7f6e\u6570\u636e\uff0c\u5f53\u8fd9\u4e9b\u6570\u636e\u53d1\u751f\u4fee\u6539\u4e4b\u540e\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f1a\u6d89\u53ca\u4ee3\u7801\u91cd\u65b0\u7f16\u8bd1\uff0c\u53ea\u6709Creation Table\u5bf9\u6570\u636e\u7684\u5185\u5b58\u5e03\u5c40\u8fdb\u884c\u91cd\u65b0\u8c03\u6574\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5c3d\u7ba1\u6574\u4e2a\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u770b\u8d77\u6765\u5f88\u590d\u6742\uff0c\u5f97\u76ca\u4e8e\u8fd9\u79cd\u6570\u636e\u5206\u79bb\u7684\u673a\u5236\uff0c\u7f16\u8bd1\u903b\u8f91\u76f8\u5bf9\u8fd8\u662f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("h4",{id:"2341-aot"},"2.3.4.1 AOT"),(0,n.kt)("h4",{id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"},"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u865a\u62df\u673a\u5185\u90e8\u7684\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f\u662f\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4fee\u6539\u7ec4\u4ef6\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u4f4d\u7f6e\uff0c\u6309\u7167\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u8fdb\u884c\u5b58\u50a8\uff0c\u8fd9\u6837\u7ec4\u4ef6\u6307\u4ee4\u7684\u52a0\u8f7d\u5c06\u80fd\u591f\u5145\u5206\u5229\u7528\u7f13\u5b58\u7279\u6027\uff0c\u8fdb\u4e00\u6b65\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"},"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"),(0,n.kt)("p",null,"\u6709\u4e9b\u5ba2\u6237\u7aef\uff0c\u5982iOS\u5e76\u4e0d\u6c38\u7eed\u76f4\u63a5\u52a0\u8f7d\u673a\u5668\u7801\uff0c\u8fd9\u65f6\u5019\u4f1a\u9000\u5316\u4e3a\u6267\u884c\u5b57\u8282\u7801\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u5df2\u7ecf\u5173\u4e8e\u7ec4\u4ef6\u548c\u6570\u636e\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u5bf9\u7aef\u4fa7\u7684\u5b57\u8282\u7801\u865a\u62df\u673a\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u7aef\u4fa7\u53ea\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u903b\u8f91\uff0c\u6838\u5fc3\u3001\u590d\u6742\u7684\u8ba1\u7b97\u903b\u8f91\u8fd8\u662f\u5728\u540e\u7aef\u8fdb\u884c\u8ba1\u7b97\uff0c\u6240\u4ee5\u6027\u80fd\u5f71\u54cd\u5e76\u4e0d\u5927\u3002\u56e0\u4e3a\u7aef\u4fa7\u5176\u4ed6\u903b\u8f91\u5982\u6e32\u67d3\u548c\u7269\u7406\u6a21\u62df\uff0c\u4ecd\u7136\u662fC++\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\uff0c\u56e0\u4e3a\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\u4e86\u7c7b\u578b\u53ca\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u5b83\u4eec\u9700\u8981\u94fe\u63a5\u5728\u4e00\u8d77\u3002\u867d\u7136\u4e3a\u4e86\u5b9e\u73b0\u5982\u589e\u91cf\u66f4\u65b0\u7b49\uff0c\u80fd\u591f\u907f\u514d\u6539\u52a8\u4e00\u4e2a\u95ee\u9898\u5c31\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u7cfb\u7edf\uff0c\u4f46\u662f\u94fe\u63a5\u8fc7\u7a0b\u662f\u7701\u4e0d\u4e86\u7684\uff0c\u94fe\u63a5\u7684\u8fc7\u7a0b\u5373\u662f\u628a\u5404\u4e2a\u6e90\u4ee3\u7801\u4e2d\u76f8\u4e92\u5f15\u7528\u7684\u90e8\u5206\u94fe\u63a5\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u7684\u673a\u5236\u5bf9\u4e8e\u5927\u578b\u5b9e\u65f6\u7cfb\u7edf\u7684\u9650\u5236\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u52a0\u4e86\u542f\u52a8\u65f6\u7684\u52a0\u8f7d\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u5f97\u7a0b\u5e8f\u89c4\u6a21\u5f88\u96be\u4f38\u7f29\uff0c\u56e0\u4e3a\u66f4\u5927\u89c4\u6a21\u7684\u7a0b\u5e8f\u610f\u5473\u7740\u66f4\u5927\u89c4\u6a21\u7684\u94fe\u63a5\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\uff0c\u5982\u679c\u94fe\u63a5\u6587\u4ef6\u589e\u591a\uff0c\u5f88\u96be\u7ba1\u7406\u5230\u5e95\u8981\u52a0\u8f7d\u90a3\u4e9b\u52a8\u6001\u5e93\uff0c\u5982\u679c\u6bcf\u4e2a\u52a8\u6001\u5e93\u53ea\u4f7f\u7528\u4e00\u70b9\u4fe1\u606f\uff0c\u90a3\u7cfb\u7edf\u5185\u5b58\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u6d6a\u8d39\u3002")),(0,n.kt)("p",null,"\u867d\u7136\u9759\u6001\u7c7b\u578b\u7684\u8bed\u8a00\u5176\u94fe\u63a5\u8fc7\u7a0b\u53ea\u9700\u8981\u53d1\u751f\u4e00\u6b21\uff0c\u4f46\u662f\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u8fd9\u6837\u7684\u94fe\u63a5\u8fc7\u7a0b\u9700\u8981\u5728\u52a0\u8f7d\u7684\u65f6\u5019\u6267\u884c\uff0c\u8fd9\u589e\u52a0\u4e86\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u52a0\u8f7d\u65f6\u7684\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u89e3\u51b3\u5927\u578b\u7cfb\u7edf\u7684\u52a8\u6001\u89e3\u91ca\u95ee\u9898\uff0c\u6211\u4eec\u5fc5\u987b\u8981\u8981\u80fd\u591f\u5c06\u7a0b\u5e8f\u5206\u6210\u5f88\u5c0f\u7684\u788e\u7247\uff0c\u5e76\u4e14\u53bb\u9664\u76f8\u4e92\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4ece\u800c\u5f7b\u5e95\u53bb\u9664\u6389\u94fe\u63a5\u8fd9\u4e2a\u73af\u5883"),"\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u9700\u8981\u505a\u5230\u51e0\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u4e4b\u95f4\u6ca1\u6709\u76f8\u4e92\u7c7b\u578b\u5f15\u7528\uff0c\u6216\u8005\u8bf4\u6e90\u4ee3\u7801\u6ca1\u6709\u590d\u6742\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u53ea\u6709\u57fa\u672c\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8bbf\u95ee\u7684\u6570\u636e\u5730\u5740\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u5206\u914d\uff0c\u5373\u4e0d\u9700\u8981\u901a\u8fc7\u7f16\u8bd1\u5668\u5b9e\u73b0\u6307\u5b9a\u548c\u8ba1\u7b97\u6570\u636e\u5730\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u6570\u636e\u7684\u52a8\u6001\u5206\u914d\u8981\u8db3\u591f\u7b80\u5355\uff0c\u5426\u5219\u4e5f\u4f1a\u589e\u52a0\u6027\u80fd\u5f00\u652f\uff0c\u53c2\u89c1Creation Table\u76f8\u5173\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8981\u8db3\u591f\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u5c3d\u53ef\u80fd\u52a0\u8f7d\u66f4\u5c11\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u6700\u7ec8\uff0cRealityIS\u51e0\u4e4e\u53ef\u4ee5\u5b8c\u5168\u629b\u5f03\u52a8\u6001\u94fe\u63a5\u8fd9\u4e00\u90e8\u5206\u7684\u8ba1\u7b97\u8fc7\u7a0b\u3002"),(0,n.kt)("h3",{id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"},"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u7ef4\u62a4\u4e00\u4e2a\u8868\uff0c\u8bb0\u5f55\u6240\u6709\u5f53\u524d\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u5e76\u6839\u636e\u7ec4\u4ef6\u4e2d\u7684\u6570\u636e\u5b9a\u4e49\uff0c\u7ba1\u7406\u5b9e\u4f53\u5bf9\u8c61\u5185\u5b58\u6570\u636e\u7684\u5e03\u5c40\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u7b49\u4e8b\u60c5\u3002"),(0,n.kt)("h4",{id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"},"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6216\u8005Creation\uff0c\u9996\u5148\u9700\u8981\u6839\u636e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u8ba1\u7b97\u5b83\u4eec\u7684\u6267\u884c\u987a\u5e8f\u3002\u57fa\u4e8e\u4e00\u4e0b\u7684\u539f\u7406\u53ef\u4ee5\u8ba1\u7b97\u51fa\u8fd9\u4e2a\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u8f93\u5165\u548c\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u90fd\u6765\u81ea\u7b26\u53f7\u8868")),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u5173\u7cfb\uff0c\u53ef\u4ee5\u8ba1\u7b97\u51fa\u6240\u6709\u7ec4\u4ef6\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6309\u7167\u8fd9\u6837\u7684\u987a\u5e8f\u6267\u884c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u4fdd\u8bc1\u65f6\u5e8f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6709\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u5904\u7406\u590d\u6742\u7684\u987a\u5e8f\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u590d\u6742\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u987a\u5e8f\u51e0\u4e4e\u662f\u4e0d\u53ef\u7ef4\u62a4\u7684")),(0,n.kt)("p",null,"\u5f88\u591a\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u91c7\u7528\u6d88\u606f\u673a\u5236\u6216\u8005\u54cd\u5e94\u5f0f\u7684\u65b9\u5f0f\uff0c\u5f88\u96be\u4fdd\u8bc1\u65f6\u5e8f\u7684\u95ee\u9898\uff0c\u800c\u65f6\u5e8f\u7684\u95ee\u9898\u53ef\u80fd\u4f1a\u5e26\u6765\u5f88\u591abug\u4ee5\u53ca\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u672c\u8d28\u4e0a\u662f\u5c06\u6d88\u606f\u5217\u8868\u8fdb\u884c\u7cbe\u5fc3\u7684\u7ec4\u7ec7\uff0c\u4f7f\u5f97\u4e8b\u4ef6\u7684\u5206\u53d1\u4e0d\u518d\u662f\u5f02\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"},"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"Actor\u6a21\u5f0f\u672c\u8eab\u662f\u4e0d\u9700\u8981\u4fdd\u5b58\u72b6\u6001\u7684\uff0c\u800c\u6e38\u620f\u4e2d\u7684\u6570\u636e\u9700\u8981\u6301\u4e45\u4fdd\u5b58\uff0c\u9664\u975e\u5bf9\u8c61\u88ab\u9500\u6bc1")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u521b\u5efa\u5bf9\u8c61\u5b9e\u9645\u4e0a\u662f\u521b\u5efa\u4e86\u4e00\u4e2a\u8ba1\u7b97\u56fe\uff0c\u53ea\u4e0d\u8fc7\u4e0e\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u8ba1\u7b97\u56fe\u76f8\u6bd4\uff0c\u5b83\u4eec\u7684\u8282\u70b9\u90fd\u5177\u6709\u5168\u5c40\u5c5e\u6027\uff0c\u4ece\u800c\u6839\u636e\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u8fdb\u884c\u63a8\u65ad\uff0c\u800cRealityIS\u9700\u8981\u6839\u636e\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u63a8\u65ad\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff0c\u6240\u6709Creation\u5185\u90e8\u7684\u6bcf\u4e2a\u5bf9\u8c61\u7684\u7ec4\u4ef6\u5f62\u6210\u4e00\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\uff0c\u591a\u4e2a\u5bf9\u8c61\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u5728\u5408\u5e76\u5728\u4e00\u4e2a\u7edf\u4e00\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u3002\u6700\u7ec8\u8fd0\u884c\u65f6\u6309\u7167\u8fd9\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\u7684\u987a\u5e8f\u8fdb\u884c\u8ba1\u7b97\u3002\u7531\u4e8e\u8981\u8003\u8651\u5e76\u884c\u6027\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5e94\u7684\u591a\u4e2a\u5bf9\u8c61\u65f6\u5e76\u884c\u8ba1\u7b97\u7684\uff0c\u56e0\u6b64\u6570\u636e\u7684\u7ec4\u7ec7\u4e5f\u662f\u4e0d\u4e00\u6837\u7684\u3002")),(0,n.kt)("p",null,"\u5728\u5224\u65ad\u591a\u4e2a\u5bf9\u8c61\u7684\u5e76\u884c\u6027\u65f6\u9700\u8981\u6ce8\u610f\uff0c\u53ea\u6709\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u4e8e\u76f8\u540c\u7684\u7b26\u53f7\u65f6\uff0c\u6211\u4eec\u624d\u8ba4\u4e3a\u5b83\u662f\u903b\u8f91\u4e0a\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\u7684\u3002\u5982\u679c\u4e00\u4e2a\u76f8\u540c\u7684\u7ec4\u4ef6\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u4f5c\u7528\u57df\u4e0d\u540c\u7684\u7b26\u53f7\uff0c\u5219\u5b83\u5e94\u8be5\u72ec\u7acb\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h4",{id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"},"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"),(0,n.kt)("p",null,"\u7531\u4e8e\u9700\u8981\u52a8\u6001\u8c03\u7528\u7ec4\u4ef6\u673a\u5668\u7801\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u8c03\u7528\u7684\u4ee3\u7801\u5e8f\u5217\u4e0d\u80fd\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u56e0\u6b64\u52a8\u6001\u7684\u811a\u672c\u4ee3\u7801\u662f\u65e0\u6cd5\u77e5\u9053\u7ec4\u4ef6\u51fd\u6570\u4fe1\u606f\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u77e5\u9053\u8be5\u600e\u4e48\u5c06\u5b9e\u4f53\u7684\u7ec4\u4ef6\u6570\u636e\u4f20\u9012\u5230\u7ec4\u4ef6\u51fd\u6570\u8c03\u7528\u6808\u4e0a\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u9700\u8981\u5b58\u50a8\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u7b7e\u540d\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ef\u4ee5\u76f4\u63a5\u636e\u6b64\u6784\u9020\u51fd\u6570\u8c03\u7528\u6808\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6574\u4e2a\u53c2\u6570\u4f20\u9012\u7684\u8fc7\u7a0b\u662f\u52a8\u6001\u7684\uff0c\u4f46\u662f\u5b83\u53ea\u6d89\u53ca\u5c0f\u6bb5\u6570\u636e\u7684\u590d\u5236\uff0c\u5927\u90e8\u5206\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u8ba1\u7b97\u5c31\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\uff0c\u5e76\u4e14\u662f\u6309\u7167\u673a\u5668\u7801\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u5176\u4e2d\u52a8\u6001\u7684\u4e00\u90e8\u5206\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u53ef\u80fd\u4f7f\u7528AOT\u5c06\u6240\u6709\u903b\u8f91\u4e8b\u5148\u7f16\u8bd1\uff0c\u53ea\u6709\u7ec4\u4ef6\u662f\u53ef\u4ee5\u7f16\u8bd1\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u4fdd\u8bc1\u4efb\u610f\u7684\u5e76\u53d1\u5206\u914d\uff0c\u5e76\u53d1\u7684\u7ba1\u7406\u90e8\u5206\u90fd\u662f\u5fc5\u987b\u52a8\u6001\u7684\uff0c\u8fd9\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002"),(0,n.kt)("h3",{id:"237-\u9690\u5f0f\u865a\u62df\u673a"},"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*"),(0,n.kt)("p",null,"\u53ea\u8981\u6709\u865a\u62df\u673a\u7684\u5b58\u5728\uff0c\u6e90\u4ee3\u7801\u90fd\u662f\u7f16\u8bd1\u4e3a\u67d0\u79cd\u5f62\u5f0f\u7684\u5b57\u8282\u7801\uff0c\u7136\u540e\u8fd9\u4e9b\u5b57\u8282\u7801\u5728\u865a\u62df\u673a\u4e0a\u6267\u884c\u3002\u7531\u4e8e\u5b57\u8282\u7801\u4e0d\u662f\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u8bfb\u53d6\u4e00\u6761\u4e00\u6761\u7684\u5b57\u8282\u7801\u8fdb\u884c\u89e3\u91ca\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u76f4\u63a5\u5bfc\u81f4\u4e00\u4e2a\u7ed3\u679c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u5e8f\u5217\u5b8c\u5168\u65e0\u6cd5\u88ab\u786c\u4ef6\u4f18\u5316\uff0c\u4f8b\u5982\u6307\u4ee4\u9884\u53d6\u7b49"))),(0,n.kt)("p",null,"\u786c\u4ef6\u53ea\u80fd\u8bc6\u522b\u865a\u62df\u673a\u4e2d\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u6307\u4ee4\uff0c\u800c\u865a\u62df\u673a\u901a\u5e38\u4e0d\u5305\u542b\u903b\u8f91\uff0c\u53ea\u6709\u4e00\u4e9b\u901a\u7528\u51fd\u6570\uff0c\u6240\u4ee5\u6574\u4e2a\u8ba1\u7b97\u4e2d\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\u6307\u4ee4\u4f1a\u5b58\u5728\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u6700\u6781\u7aef\u7684\u60c5\u51b5\u4e0b\uff0c\u6574\u4e2a\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u65e0\u6cd5\u7f13\u5b58\uff0c\u800c\u6bcf\u4e00\u4e2a\u6307\u4ee4\u7684\u6267\u884c\u90fd\u9700\u8981\u72ec\u7acb\u4ece\u5185\u5b58\u4e2d\u52a0\u8f7d\u6307\u4ee4\u5230\u5bc4\u5b58\u5668\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u811a\u672c\u903b\u8f91\u6e90\u4ee3\u7801\u4e2d\u5305\u542b\u5f88\u591a\u987a\u5e8f\u6307\u4ee4\uff0c\u786c\u4ef6\u4e5f\u65e0\u6cd5\u5f88\u597d\u7684\u9884\u53d6\uff0c\u56e0\u4e3a\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u865a\u62df\u673a\u4ee3\u7801\u5e76\u4e0d\u5305\u542b\u8fd9\u4e9b\u903b\u8f91\u6307\u4ee4\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u679c\u662f\u9759\u6001\u8bed\u8a00\uff0c\u5728\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\u5c06IR\u8f6c\u6362\u4e3a\u673a\u5668\u7801\u7684\u65f6\u5019\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u5176\u4e2d\u7684\u6bcf\u4e2a\u7b26\u53f7\u7684\u5730\u5740\u90fd\u8f6c\u6362\u4e3a\u6808\u4e2d\u7684\u4e00\u4e2a\u5730\u5740\uff0c\u800c\u6808\u9876\u6307\u9488\u7531\u7ef4\u6301\u7740\u4e00\u4e2a\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u4e2a\u4f4d\u7f6e\u7531\u8fd0\u884c\u65f6\u5b9e\u65f6\u5206\u914d\uff0c\u6808\u9876\u6307\u9488\u901a\u5e38\u4f1a\u88ab\u4fdd\u6301\u5728\u5bc4\u5b58\u5668\u4e2d\uff0c\u6240\u4ee5\u8bbf\u95ee\u901f\u5ea6\u5f88\u5feb\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4f7fCreation Script\u5b9e\u73b0\u7c7b\u578b\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"AOT\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u88ab\u5f53\u505a\u4e00\u4e2a\u51fd\u6570\uff0c\u7ec4\u4ef6\u4e2d\u8bbf\u95ee\u7684\u7b26\u53f7\u5168\u90e8\u88ab\u8f6c\u6362\u4e3a\u76f8\u5bf9\u4f4d\u7f6e\uff1b\u5176\u5b9e\u6bcf\u4e2a\u7ec4\u4ef6\u5b8c\u5168\u6309\u7167\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u9759\u6001\u7f16\u7a0b\u8bed\u8a00\u4e2d\u51fd\u6570\u7684\u65b9\u5f0f\u8fdb\u884c\u7f16\u8bd1\uff0c\u6bd4\u5982\u5206\u914d\u51fd\u6570\u8c03\u7528\u4e4b\u524d\u7684\u6808\u521d\u59cb\u5316\uff0c\u4ee5\u53ca\u7ed3\u675f\u540e\u6e05\u695a\u6808\u4e2d\u7684\u6570\u636e\u3002\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u6808\u4e2d\u7684\u6570\u636e\u7531\u865a\u62df\u673a\u5b9e\u65f6\u7684\u653e\u8fdb\u53bb\uff0c\u800c\u4e0d\u662f\u673a\u5668\u7801\u4e2d\u63d2\u5165\u7684\u4ee3\u7801\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u4f46\u662f\u4fdd\u6301\u540e\u9762\u51fd\u6570\u5bf9\u6808\u4e2d\u6570\u636e\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f\u4e00\u6837\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u865a\u62df\u673a\u9996\u5148\u5206\u914d\u6808\u4e2d\u7684\u6570\u636e\uff0c\u53ef\u80fd\u6d89\u53ca\u5c06Creation Table\u4e2d\u7684\u6570\u636e\u590d\u5236\u5230\u65b9\u6cd5\u6808\u4e2d\uff0c\u7136\u540e\u7ec4\u4ef6\u65b9\u6cd5\u4e2d\u7684\u673a\u5668\u7801\u5c31\u53ef\u4ee5\u6b63\u5e38\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u6267\u884c\u7ed3\u675f\u4e4b\u540e\uff0c\u865a\u62df\u673a\u9700\u8981\u5c06\u5176\u4e2d\u7684\u7ed3\u679c\u8bfb\u56de\u5230Creation Table\u4e2d\u5bf9\u5e94\u7684\u6570\u636e\u4e2d")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u9762\u4e24\u4e2a\u8fc7\u7a0b\uff0c\u53ef\u80fd\u65e0\u6cd5\u5728\u865a\u62df\u673a\u4e2d\u52a8\u6001\u51b3\u5b9a\uff0c\u56e0\u4e3a\u5176\u4e2d\u5305\u542b\u4e0d\u540c\u7684\u7d22\u5f15\uff0c\u540d\u79f0\u7b49\u7b49\uff0c\u53ef\u80fd\u8fd8\u9700\u8981\u9700\u8981\u8bb2\u76f8\u5e94\u7684\u4ee3\u7801\u7f16\u8bd1\u5230\u7ec4\u4ef6\u51fd\u6570\u7684\u9996\u90e8\u548c\u5c3e\u90e8\uff0c\u8ba9 \u5b83\u4eec\u81ea\u5df1\u6765\u51b3\u5b9a\u6267\u884c\u6808\u4e2d\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u8fd9\u91cc\u662f\u5426\u53ef\u4ee5\u8003\u8651\u80fd\u591f\u7701\u6389\u5411\u6808\u4e2d\u590d\u5236\u6570\u636e\u7684\u95ee\u9898\uff0c\u6539\u4e3a\u76f4\u63a5\u8bfb\u53d6Table\u4e2d\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u8fde\u7eed\uff0c\u4f46\u662f\u7531\u4e8e\u4e0d\u540c\u7ec4\u4ef6\u4f7f\u7528\u7684\u6807\u51c6\u7b26\u53f7\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u53d8\u91cf\u90fd\u8fde\u7eed\uff08\u50cf\u4e00\u4e2a\u65b9\u6cd5\u6808\u4e00\u6837\uff09\uff0c\u6240\u4ee5\u53ef\u80fd\u590d\u5236\u8fd8\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002"),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u901a\u8fc7\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"},"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u65b9\u6cd5\u7684\u673a\u5668\u7801\uff0c\u5e76\u4e14\u65b9\u6cd5\u6536\u5c3e\u5305\u542b\u5bf9\u65b9\u6cd5\u6808\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u90a3\u4e48\u7531\u4e8e\u8fd9\u4e9b\u64cd\u4f5c\u7684\u673a\u5668\u7801\u662f\u56fa\u5b9a\u7684\uff0c\u5206\u914d\u7684\u5185\u5b58\u5730\u5740\u53ca\u5bc4\u5b58\u5668\u7b49\u4e5f\u662f\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u8981\u4fdd\u8bc1\u8ddf\u8fd0\u884c\u65f6\u7684Table VM\u6709\u6548\u914d\u5408\uff0cTable VM\u4f20\u7ed9\u65b9\u6cd5\u7ec4\u4ef6\u7684\u6570\u636e\u7684\u987a\u5e8f\u5fc5\u987b\u662f\u56fa\u5b9a\u7684\uff0c\u8fd9\u90e8\u5206\u8981\u901a\u8fc7\u4e0a\u4e00\u8282\u7684\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6765\u5904\u7406\u3002\u8fd9\u6837\u7ec4\u4ef6\u673a\u5668\u7801\u624d\u80fd\u53d6\u5230\u6b63\u786e\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"call-stack",src:l(4015).Z,width:"1239",height:"578"})),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u6700\u5927\u7684\u95ee\u9898\u662f\u673a\u5668\u7801\u4e2d\u7f16\u7801\u4e86\u5bf9\u5185\u5b58\u7684\u8c03\u7528\uff0c\u5373\u5bc4\u5b58\u5668\u5206\u914d\u90e8\u5206\uff0c\u8fd9\u90e8\u5206\u4e5f\u662f\u7f16\u8bd1\u8ddf\u89e3\u91ca\u6700\u5927\u7684\u4e0d\u540c\u3002\u901a\u8fc7\u56fa\u5b9a\u5206\u914d\u597d\u7684\u5bc4\u5b58\u5668\uff0cCPU\u80fd\u591f\u4f7f\u7528\u5bc4\u5b58\u5668\u6765\u7f13\u5b58\u53d8\u91cf\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u4e2a\u53d8\u91cf\u90fd\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\uff0c\u90a3\u6837\u5c31\u591a\u4e86\u5f88\u591a\u5bc4\u5b58\u5668\u53d8\u91cf\u8bfb\u53d6\u5199\u5165\u7684\u6307\u4ee4\uff0c\u5e76\u4e14\u65e0\u6cd5\u5229\u7528\u4f20\u7edfCPU\u7684\u4e00\u4e9b\u786c\u4ef6\u4f18\u5316\u624b\u6bb5\uff0c\u5982\u6307\u4ee4\u9884\u53d6\u7b49\u3002"),(0,n.kt)("p",null,"\u7f16\u8bd1\u7684\u673a\u5668\u7801\u5305\u542b\u4e86\u53d8\u91cf\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u8fd9\u4e9b\u5bc4\u5b58\u5668\u5730\u5740\u901a\u5e38\u662f\u57fa\u4e8e\u4e00\u4e2a\u8c03\u7528\u6808\u6765\u5b9e\u73b0\u7684\uff0c\u901a\u8fc7\u8c03\u7528\u6808\uff0c\u6bcf\u4e2a\u51fd\u6570\u6267\u884c\u7684\u6240\u6709\u6307\u4ee4\u90fd\u662f\u56fa\u5b9a\u4e0d\u53d8\u7684\u3002\u800c\u4fdd\u8bc1\u4efb\u610f\u51fd\u6570\u8c03\u7528\u90fd\u53ef\u4ee5\u6709\u5e8f\u8fdb\u884c\u7684\u534f\u4f5c\u673a\u5236\u4e3b\u8981\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6808\u9876\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u4e24\u4e2a\u6570\u503c\u9700\u8981\u8fd0\u884c\u65f6\u52a8\u6001\u4f20\u7ed9\u7ec4\u4ef6\u7684\u51fd\u6570\u673a\u5668\u7801\u3002\u5728\u4f20\u7edf\u7684\u9759\u6001\u7f16\u8bd1\u578b\u8bed\u8a00\u4e2d\uff0c\u8c03\u7528\u51fd\u6570\u7684\u90e8\u5206\u4e5f\u662f\u673a\u5668\u7801\uff0c\u56e0\u6b64\u4ece\u54ea\u91cc\u83b7\u53d6\u51fd\u6570\u53c2\u6570\u7684\u503c\u90fd\u53ef\u4ee5\u7f16\u7801\u4e3a\u56fa\u5b9a\u7684\u6307\u4ee4\uff0c\u4f46\u662f\u5728\u52a8\u6001\u6027\u8bed\u8a00\u4e2d\uff0c\u8fd9\u90e8\u5206\u662f\u53ef\u53d8\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3451).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u53c2\u7167\u52a8\u6001\u6027\u8bed\u8a00\u865a\u62df\u673a\u7684\u505a\u6cd5\uff0c\u5728\u4e00\u4e2a\u865a\u62df\u673a\u7684\u5faa\u73af\u4e2d\u8bfb\u53d6\u53d8\u91cf\u5e76\u83b7\u53d6\u5730\u5740\uff0c\u7136\u540e\u4f20\u9012\u7ed9\u88ab\u8c03\u51fd\u6570\u7684\u51fd\u6570\u8c03\u7528\u6808\uff0c\u5305\u62ec\u6808\u9876\u6307\u9488\u548c\u51fd\u6570\u8fd4\u56de\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u91cc\u7684\u95ee\u9898\u53ef\u80fd\u662f\uff0c\u865a\u62df\u673a\u5e76\u4e0d\u77e5\u9053\u7ec4\u4ef6\u7684\u51fd\u6570\u8c03\u7528\u6808\u7684\u5e03\u5c40\uff0c\u5373\u662f\u51fd\u6570\u7684\u7b7e\u540d\u6216\u8005\u7c7b\u578b\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u7b7e\u540d\u4fe1\u606f\u5b58\u653e\u5728\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6570\u636e\u4e2d\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u53e6\u5916\u4e00\u4e2a\u7cbe\u5de7\u7684\u70b9\u662f\uff0cHotSpot VM\u4f7f\u7528OS\u7ebf\u7a0b\u6765\u5b9e\u73b0Java\u7ebf\u7a0b\uff0c\u5e76\u4e14\u4e00\u4e2aJava\u7ebf\u7a0b\u4e0a\u8fd0\u884c\u7684\u6240\u6709native\u51fd\u6570\u548cJava\u65b9\u6cd5\u90fd\u5171\u7528\u4e00\u4e2a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E8%B0%83%E7%94%A8%E6%A0%88&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A143053269%7D"},"\u8c03\u7528\u6808"),"\u3002\u6240\u4ee5HotSpot VM\u4e5f\u628a\u8fd9\u79cd\u505a\u6cd5\u53eb\u505a\u201c\u6df7\u5408\u6a21\u5f0f\u6808\u201d\uff08mixed-mode stack\u6216\u8005\u7b80\u79f0mixed stack\uff09\u3002\u89e3\u91ca\u5668\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528CPU\u7684\u6808\u6307\u9488\u5bc4\u5b58\u5668\u6765\u8868\u793a\u81ea\u5df1\u7684\u6808\u9876\u6307\u9488\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aRednaxelaFX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/55141871/answer/143053269"},"https://www.zhihu.com/question/55141871/answer/143053269"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"238-\u8c03\u5ea6\u5668"},"2.3.8 \u8c03\u5ea6\u5668"),(0,n.kt)("p",null,"\u5982\u679c\u5b8c\u5168\u6309\u7167\u7ec4\u4ef6\u4e3a\u7c92\u5ea6\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u80fd\u5bfc\u81f4\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u4f17\u591a\u7ec4\u4ef6\u88ab\u5206\u914d\u5230\u8f83\u591a\u7684\u670d\u52a1\u5668\uff0c\u6240\u4ee5\u5355\u4e2a\u5ba2\u6237\u7aef\u9700\u8981\u548c\u5f88\u591a\u670d\u52a1\u5668\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u5176\u5b9e\u662f\u4e24\u4e2a\u76f8\u4e92\u51b2\u7a81\u7684\u76ee\u6807\u7684\u6743\u8861\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c06\u5c3d\u53ef\u80fd\u591a\u7684\u6765\u81ea\u4e0d\u540c\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u653e\u5728\u4e00\u4e2a\u670d\u52a1\u5668\u6267\u884c\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u6027\uff0c\u751a\u81f3\u53ef\u4ee5\u653e\u5230GPU\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u540c\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u5c3d\u53ef\u80fd\u653e\u5728\u540c\u4e00\u4e2a\u670d\u52a1\u5668\uff0c\u53ef\u4ee5\u8f83\u5c11\u5ba2\u6237\u7aef\u7684\u94fe\u63a5\u6570\u91cf")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5c3d\u53ef\u80fd\u5c06\u5355\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u81f3\u5c11\u653e\u5230\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\u8fdb\u884c\u8ba1\u7b97\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u662f\u53ef\u884c\u7684\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u4e3b\u8981\u8fd8\u662f\u4f9d\u8d56\u4e8eCPU\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u5f88\u5927\u7684\u5e76\u884c\u5ea6\uff0c\u4f8b\u59828\u4e2a\u300116\u4e2a\u6216\u8005\u6700\u591a32\u4e2a\u7ec4\u4ef6\u4e00\u8d77\u6267\u884c\u5c31\u5dee\u4e0d\u591a\uff0c\u800c\u8fd9\u6837\u7684\u8981\u6c42\u5f88\u5bb9\u6613\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,"\u5355\u4e2a\u7ec4\u4ef6\u5355\u6b21\u8ba1\u7b97\u7684\u6570\u91cf\u4e0d\u8981\u592a\u591a\uff0c\u8fd9\u6837\u5bf9\u8fd0\u884c\u65f6\u7ec4\u7ec7\u7ba1\u7406\u6570\u636e\u7684\u8981\u6c42\u4f1a\u964d\u4f4e\uff0c\u4f8b\u59828/16/32\u4e2a\u3002\u8fd9\u6837\u5c11\u91cf\u7684\u7ec4\u4ef6\u5e76\u884c\u8ba1\u7b97\u9700\u6c42\u4e5f\u66f4\u5bb9\u6613\u5bf9\u5ba2\u6237\u7aef\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u80fd\u4e00\u4e24\u4e2a\u5ba2\u6237\u7aef\u751a\u81f3\u5355\u4e2a\u5ba2\u6237\u7aef\u90fd\u53ef\u4ee5\u8fbe\u5230\u8fd9\u4e2a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u8bbe\u7f6e\u5ba2\u6237\u7aef\u7ba1\u7406\u8c03\u5ea6\uff0c\u6bcf\u4e2a\u5ba2\u6237\u7aef\u5c3d\u53ef\u80fd\u8ddf\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u670d\u52a1\u5668\u8c03\u5ea6\u7ba1\u7406\u5668\u76f8\u8fde\u63a5\uff0c\u800c\u8fd9\u4e9b\u8c03\u5ea6\u5668\u8d1f\u8d23\u5bf9\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u670d\u52a1\u5668\u8fdb\u884c\u7ba1\u7406\uff0c\u4e3b\u8981\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6536\u96c6\u6765\u81ea\u540c\u4e00\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u4e0d\u540c\u670d\u52a1\u5668\u7684\u7ec4\u4ef6\u8ba1\u7b97\u7ed3\u679c\uff0c\u7136\u540e\u901a\u8fc7\u5355\u6b21\u94fe\u63a5\u4e0e\u5355\u4e2a\u5ba2\u6237\u7aef\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("h3",{id:"239-\u52a8\u6001\u7b26\u53f7\u8868"},"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u7f16\u8bd1\u67b6\u6784\u4e2d\uff0c\u7b26\u53f7\u8868\u4e3b\u8981\u7528\u4e8e\u8bb0\u5f55\u7528\u6237\u81ea\u5b9a\u4e49\u7c7b\u578b\u7684\u7ed3\u6784\uff0c\u4ee5\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\u3002\u5f53\u7136\u73b0\u4ee3\u9762\u5411\u5bf9\u8c61\u5bf9\u8c61\u4e2d\uff0c\u81ea\u5b9a\u4e49\u7ed3\u6784\u672c\u8eab\u662f\u53ef\u4ee5\u5d4c\u5957\u7684\uff0c\u5e76\u4e14\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\u53ef\u80fd\u4f1a\u5305\u542b\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u4e5f\u7528\u6765\u8f85\u52a9\u4f5c\u7528\u57df\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("img",{src:"resources/symbol-table.jpeg",alt:"symbol-table"}),(0,n.kt)("p",null,"\u672c\u8d28\u4e0a\uff0c\u7b26\u53f7\u8868\u7531\u6e90\u4ee3\u7801\u4e2d\u751f\u6210\uff0c\u7136\u540e\u7528\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\uff0c\u7136\u540e\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u5c31\u4e0d\u518d\u9700\u8981\u7b26\u53f7\u8868\uff0c\u7b26\u53f7\u8868\u53ea\u662f\u4f5c\u4e3a\u7f16\u8bd1\u9636\u6bb5\u7684\u4e00\u79cd\u4e2d\u95f4\u6570\u636e\u3002\u4f46\u8fd9\u4e5f\u8bf4\u660e\uff0c\u4ece\u6e90\u4ee3\u7801\u672c\u8eab\u5c31\u53ef\u4ee5\u63a8\u5bfc\u5b9e\u9645\u8fd0\u884c\u65f6\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u52a8\u6001\u8bed\u8a00\u7684\u539f\u7406\u5373\u4f7f\u5982\u679c\uff0c\u5b83\u4eec\u52a8\u6001\u5730\u4ece\u7b26\u53f7\u8868\u8ba1\u7b97\u4e00\u4e2a\u53d8\u91cf\u7684\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4f9d\u8d56\u7f16\u8bd1\u5206\u914d\u597d\u7684\u56fa\u5b9a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u57fa\u672c\u4e0a\uff0c\u5982\u679c\u8bed\u8a00\u9700\u8981\u5177\u6709\u67d0\u79cd\u52a8\u6001\u6027\uff0c\u8fd0\u884c\u65f6\u5185\u5b58\u4e2d\u5b9e\u65f6\u8ba1\u7b97\u548c\u5b58\u50a8\u7b26\u53f7\u8868\u5c31\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002\u8fd9\u91cc\u7684\u52a8\u6001\u6027\u4e3b\u8981\u662f\u6307\u90a3\u4e9b\u5fc5\u987b\u4ece\u7b26\u53f7\u8868\u7c7b\u578b\u7cfb\u7edf\u63a8\u5bfc\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u5bf9\u8c61\u67d0\u4e2a\u5c5e\u6027\u7684\u5730\u5740\uff0c\u51fd\u6570\u7684\u53c2\u6570\u5217\u8868\u4ee5\u53ca\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u7531\u6b64\u770b\uff0c\u52a8\u6001\u8bed\u8a00\u81f3\u5c11\u6709\u4ee5\u4e0b\u4e24\u79cd\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7b26\u53f7\u67e5\u8be2\uff0c\u7b26\u53f7\u8868\u5f80\u5f80\u662f\u6bd4\u8f83\u590d\u6742\u7684\u6811\u5f62\u7ed3\u6784\uff0c\u67e5\u8be2\u6548\u7387\u8f83\u4f4e"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\u4e2d\u7684\u5bc4\u5b58\u5668\u6ca1\u6709\u5206\u914d\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u9700\u8981\u4ece\u5185\u5b58\u800c\u4e0d\u662f\u5bc4\u5b58\u5668\u8bfb\u53d6")),(0,n.kt)("p",null,"RealityIS\u9488\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0c\u5bf9\u4e8e\u524d\u8005\uff0c\u5b83\u91c7\u7528\u5982\u4e0b\u7684\u4f18\u5316\u624b\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u7c7b\u578b\u7ed3\u6784\uff0c\u66f4\u5c11\u7684\u5c42\u6b21\uff0c\u57fa\u672c\u4e0a\u6ca1\u6709\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784\uff0c\u66f4\u7b80\u5355\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u65e0\u6cd5\u5b9a\u4e49\u590d\u6742\u7684\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u5355\u53f0VM\u5177\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u7531\u4e8e\u6bcf\u4e2aVM\u503e\u5411\u4e8e\u5c06\u5927\u91cf\u76f8\u4f3c\u7684\u903b\u8f91\u653e\u5230\u540c\u4e00\u53f0\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u56e0\u6b64\u540c\u4e00\u53f0\u670d\u52a1\u5668\u62e5\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u4fe1\u606f\u53ca\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u4e2a\u4f18\u5316\uff0cRealityIS\u5bf9\u4e8e\u7c7b\u578b\u7684\u52a8\u6001\u6027\u65b9\u9762\u7684\u6027\u80fd\u635f\u5931\u5c31\u964d\u5230\u4e86\u6bd4\u8f83\u4f4e\u7684\u6c34\u5e73\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u7ec4\u4ef6\u7684\u903b\u8f91\u662f\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u5c3d\u7ba1\u7ec4\u4ef6\u5b9a\u4e49\u7684\u65f6\u5019\u5173\u8054\u4e86\u4e00\u5b9a\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f46\u662f\u6211\u4eec\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u7ed1\u5b9a\u51fd\u6570\u8c03\u7528\u6808\u6765\u4f7f\u51fd\u6570\u7684\u673a\u5668\u7801\u53ef\u4ee5\u72ec\u7acb\u7f16\u8bd1\u3002\u56e0\u6b64\u7406\u8bba\u4e0a\u7ec4\u4ef6\u7684\u8ba1\u7b97\u6548\u7387\u53ef\u4ee5\u63a5\u8fd1\u9759\u6001\u578b\u8bed\u8a00\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.7.1\u8282\u3002"),(0,n.kt)("h3",{id:"2310-\u865a\u62df\u673a\u67b6\u6784"},"2.3.10 \u865a\u62df\u673a\u67b6\u6784"),(0,n.kt)("h4",{id:"23101-\u670d\u52a1\u7aef"},"2.3.10.1 \u670d\u52a1\u7aef"),(0,n.kt)("p",null,"\u540e\u7aef\u7531\u4e8e\u53ef\u4ee5\u52a8\u6001\u52a0\u8f7d\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u6240\u4ee5\u76f4\u63a5\u4f7f\u7528JIT"),(0,n.kt)("h4",{id:"23102-\u5ba2\u6237\u7aef"},"2.3.10.2 \u5ba2\u6237\u7aef"),(0,n.kt)("p",null,"\u5ba2\u6237\u7aef\u7531\u4e8eiOS\u4e0d\u5141\u8bb8\u4f7f\u7528JIT\uff0c\u6240\u4ee5\u53ea\u80fd\u4f7f\u7528\u89e3\u91ca\u5668\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Wasm3\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u7528\u4e8e\u5c06Wasm\u5b57\u8282\u7801\u52a8\u6001\u89e3\u91ca\u6267\u884c\uff0c\u53d1\u751f\u5728\u8fd0\u884c\u65f6"),(0,n.kt)("li",{parentName:"ul"},"Wasm interpreter\uff0c\u8be5\u89e3\u91ca\u5668\u7528\u4e8e\u5c06CreationScript\u89e3\u91ca\u4e3aWasm\u5b57\u8282\u7801\uff0c\u4e3b\u8981\u53d1\u751f\u5728\u7f16\u8f91\u65f6")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3451).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u56e0\u4e3a\u51fd\u6570\u8c03\u7528\u6808\u53ca\u5176\u76f8\u5173\u7684\u673a\u5236\uff0c\u662f\u88ab\u7f16\u8bd1\u5668\u7f16\u8bd1\u5230\u6700\u7ec8\u7684\u4ee3\u7801\u4e2d\u53bb\u7684\uff0c\u662f\u5728\u4ee3\u7801\u7684\u6bcf\u4e2a\u51fd\u6570\u9996\u4f4d\u63d2\u5165\u4e86\u4e00\u6bb5\u63a7\u5236\u4ee3\u7801\uff0c\u7136\u540e\u7a0b\u5e8f\u5c31\u80fd\u591f\u6309\u7167\u8fd9\u79cd\u673a\u5236\u6267\u884c\uff0c\u800c\u4e0d\u662f\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u4e86\u8be5\u673a\u5236\uff0c\u8fd9\u91cc\u64cd\u4f5c\u7cfb\u7edf\u5176\u5b9e\u53ea\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6808\u9876\u6307\u9488\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u8fd9\u79cd\u673a\u5236\u4e5f\u90e8\u5206\u5b9e\u73b0\u5728\u865a\u62df\u673a\u4e2d\uff0c\u9996\u5148\u865a\u62df\u673a\u6dfb\u52a0\u4e24\u4e2a\u65b9\u6cd5\u5757\uff0c\u7c7b\u4f3c\u4e8e\u539f\u6765\u9759\u6001\u8bed\u8a00\u4ee3\u7801\u4e2d\u51fd\u6570\u9996\u5c3e\u6dfb\u52a0\u7684\u90e8\u5206\uff0c\u7531\u4e8e\u8fd9\u90e8\u5206\u7684\u4ee3\u7801\u7ed3\u6784\u90fd\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e2d\u6dfb\u52a0\u4e24\u4e2a\u4ee3\u7801\u5757\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e24\u90e8\u5206\u7684\u53c2\u6570\u90e8\u5206\u4ece\u89e3\u91ca\u5668\u52a8\u6001\u5f97\u6765\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u5f53\u4e00\u4e2a\u51fd\u6570\u7ec4\u4ef6\u5f00\u59cb\u8c03\u7528\u7684\u4e4b\u524d\uff0c\u9996\u5148\u8fd0\u884c\u65f6\u6784\u9020\u597d\u8c03\u7528\u6808\u7684\u53c2\u6570\u4fe1\u606f\uff0c\u5e76\u8c03\u7528\u865a\u62df\u673a\u9996\u5148\u6267\u884c\u51fd\u6570\u5f00\u59cb\u5757\uff0c\u4f20\u5165\u8c03\u7528\u6808\u7684\u6808\u9876\u6307\u9488\u4ee5\u53ca\u8fd4\u56de/\u56de\u8c03\u5730\u5740\uff0c\u8fd9\u6837\u865a\u62df\u673a\u540e\u9762\u7684\u4ee3\u7801\u4e2d\u7684\u53c2\u6570\u5c31\u53ea\u9700\u8981\u6307\u5b9a\u76f8\u5bf9\u5730\u5740\uff0c\u53ef\u4ee5\u6bd4\u8f83\u4f5c\u4e3a\u5e38\u6570\u5199\u5165\u5230Wasm\u6307\u4ee4\u4e2d\uff0c\u8fd9\u6837Wasm\u89e3\u91ca\u5668\u6267\u884c\u6307\u4ee4\u5c31\u4e0d\u9700\u8981\u518d\u67e5\u627e\u5185\u5b58\u5730\u5740\uff0cCPU\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u5199\u56de\u5230\u5bc4\u5b58\u5668\u800c\u4e0d\u662f\u5185\u5b58\uff0c\u56e0\u4e3a\u6211\u4eec\u5047\u8bbe\u5730\u5740\u90fd\u662f\u76f8\u5bf9\u7684\uff0c\u90a3\u4e48\u5728\u89e3\u91ca\u4e3aWasm\u6307\u4ee4\u7684\u89e3\u91ca\u5668\u4e2d\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u628a\u4ee3\u7801\u8f6c\u5316\u4e3a\u5bf9\u5bc4\u5b58\u5668\u7684\u610f\u4e49\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7ed9\u4ed6\u503c\uff0c\u5047\u8bbeCPU\u5565\u4e5f\u4e0d\u77e5\u9053\uff0c\u5b8c\u5168\u9700\u8981\u89e3\u91ca\u5668\u6839\u636e\u6bcf\u4e2a\u6307\u4ee4\u7684\u610f\u4e49\u52a8\u6001\u5224\u65ad\u3002\u6700\u540e\u51fd\u6570\u6267\u884c\u5b8c\u4e86\uff0c\u518d\u56de\u8c03\u89e3\u91ca\u5668\u5f00\u59cb\u4e0b\u4e00\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u8282\u7701\u6bcf\u4e2a\u6307\u4ee4\u90fd\u9700\u8981\u5199\u5165\u5199\u51fa\u5185\u5b58\u7684\u64cd\u4f5c\uff0c\u56e0\u4e3a\u5185\u5b58\u5730\u5740\u5df2\u77e5\u4e86\uff0c\u6240\u4ee5\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u662f\u5e38\u6570\uff0c\u5c31\u4e0d\u9700\u8981\u518d\u5185\u5b58\u4e2d\u67e5\u627e\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u5269\u4e0b\u4e3b\u8981\u7684\u6027\u80fd\u635f\u5931\uff0c\u5c31\u662f\u6307\u4ee4\u7684\u7f13\u5b58\u3001\u9884\u53d6\u8fd9\u4e9b\u64cd\u4f5c\u4e86\uff0c\u56e0\u4e3a\u786c\u4ef6\u7ea7\u7684\u6307\u4ee4\u9884\u53d6\u80af\u5b9a\u662f\u53ea\u80fd\u6765\u81ea\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u8ddfOS\u6709\u5173\uff0c\u65e0\u6cd5\u907f\u514d\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6307\u4ee4\u4e0d\u662f\u673a\u5668\u7801\uff0c\u865a\u62df\u673a\u65e0\u6cd5\u5e94\u7528\u8fd9\u4e9b\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u5185\u5b58\u7684\u6d41\u8fdb\u6d41\u51fa\uff0c\u5176\u5e26\u6765\u7684\u6027\u80fd\u635f\u5931\u5e94\u8be5\u53ef\u4ee5\u5b8c\u5168\u62b5\u6d88\u6389\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u6838\u5fc3\u5728\u5916\u90e8\u52a8\u6001\u6784\u9020\u65b9\u6cd5\u8c03\u7528\u6808\u3002\u8fd9\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f20\u7edf\u7684OOP\u7b49\u6784\u9020\u65b9\u6cd5\uff0c\u56e0\u4e3a\u4e0d\u80fd\u7ba1\u7406\u6570\u636e\uff0c\u6240\u4ee5\u5f88\u96be\u52a8\u6001\u6784\u9020\uff0c\u56e0\u4e3a\u4f60\u65e0\u6cd5\u77e5\u9053\u65b9\u6cd5\u7b7e\u540d\uff0c\u9700\u8981\u53cd\u5c04\u7b49\u5f88\u590d\u6742\u7684\u673a\u5236\u3002\u8fd9\u5176\u5b9e\u76f8\u5f53\u4e8e\u628a \u7f16\u8bd1\u5668\u9759\u6001\u7f16\u8bd1\u65f6\u5bf9\u65b9\u6cd5\u53c2\u6570\u7684\u4fe1\u606f\u62ff\u90fd\u8fd0\u884c\u65f6\uff0c\u52a8\u6001\u8ba1\u7b97\u5f88\u8d39\u6027\u80fd\uff0c\u8fd9\u4e9b\u4fe1\u606f\u4e00\u822c\u5728\u8fd0\u884c\u65f6\u90fd\u6ca1\u6709\u4e86\u3002"),(0,n.kt)("p",null,"\u8bb0\u5f97\u597d\u50cf\u300a\u7f16\u8bd1\u539f\u7406\u300b\u4e2d\u8bf4\u539f\u672c\u51fd\u6570\u6dfb\u52a0\u7684\u9996\u5c3e\u4e24\u5757\u63a7\u5236\u7a0b\u5e8f\u662f\u53ef\u4ee5\u653e\u5230\u51fd\u6570\u5916\u7801\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u8c03\u7528\u7b80\u5355\u5168\u90e8\u590d\u5236\u5230\u6bcf\u4e2a\u51fd\u5185\u90e8\u3002\u6211\u4eec\u7684\u65b9\u6cd5\u76f8\u5f53\u4e8e\u662f\u628a\u8fd9\u4e2a\u8fd8\u539f\u56de\u6765\uff0c\u628a\u5b83\u5206\u6765\u3002\u56e0\u4e3a\u6211\u4eec\u73b0\u5728\u51fd\u6570\u662f\u52a8\u6001\u7684\uff0c\u6240\u4ee5\u4e0d\u80fd\u90a3\u6837\u53bb\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u6211\u4eec\u89e3\u91ca\u5668\u751f\u6210\u7684\u6307\u4ee4\u4e2d\uff0c\u5927\u90e8\u5206\u64cd\u4f5c\u6570\u90fd\u662f\u5e38\u91cf\u800c\u4e0d\u662f\u53d8\u91cf\uff0c\u53d8\u91cf\u610f\u5473\u7740Wasm\u5b57\u8282\u7801\u5728\u89e3\u91ca\u6267\u884c\u7684\u65f6\u5019\u6709\u9700\u8981\u591a\u51e0\u6761\u8bfb\u53d6\u5185\u5b58\u5730\u5740\u7684\u6307\u4ee4\uff0c\u8fd9\u5e26\u6765\u4e24\u4e2a\u7ed3\u679c\uff1a1\uff09\u6307\u4ee4\u6570\u51cf\u5c11\uff0c\u8fd9\u4e5f\u51cf\u5c11\u4e86Wasm\u865a\u62df\u673a\u4e2d\u67e5\u627e\u673a\u5668\u7801\u6307\u4ee4\u8df3\u6765\u8df3\u53bb\u7684\u9891\u7387\uff0c\u4f20\u7edf\u7684\u865a\u62df\u673a\u76f8\u5bf9\u4e0e\u9759\u6001\u8bed\u8a00\u7684\u4ee3\u7801\u4e0a\u7684\u5dee\u522b\u5c31\u662f\uff0c\u9759\u6001\u4ee3\u7801\u662f\u8fde\u7eed\u7684\uff0c\u4f46\u662f\u4f1a\u5b58\u5728\u4ee3\u7801\u91cd\u590d\uff0c\u865a\u62df\u673a\u7684\u673a\u5668\u7801\u662f\u5f88\u5c11\u7684\uff0c\u53ea\u6709\u6807\u51c6\u6307\u4ee4\uff0c\u4f46\u662f\u5c31\u4f1a\u8df3\u8f6c\u6bd4\u8f83\u9891\u7e41\u4ee5\u514b\u670d\u6ca1\u6709\u91cd\u590d\u7684\u95ee\u9898\uff0c\u4e0d\u8fc7\u53d6\u6307\u4ee4\u76f8\u5bf9\u4e8e\u8ba1\u7b97\u90fd\u662f\u72ec\u7acb\u7684\u6307\u4ee4\uff0c\u5e94\u8be5\u5f88\u5feb\u7684\uff1b2\uff09\u56e0\u4e3a\u4e2d\u95f4\u8ba1\u7b97\u7ed3\u679c\u76f4\u63a5\u653e\u5bc4\u5b58\u5668\uff0c\u51cf\u5c11\u5185\u5b58\u6d41\u8fdb\u6d41\u51fa\u3002")),(0,n.kt)("p",null,"\u8fd9\u6837\u51fd\u6570\u4f5c\u4e3a\u7c7b\u578b\u5c31\u662f\u6709\u975e\u5e38\u5927\u4ef7\u503c\u7684\uff0c\u5b83\u5e2e\u52a9CreationScript\u89e3\u91ca\u5668\u600e\u6837\u751f\u6210Wasm\u5b57\u8282\u7801\uff0c\u4ee5\u7ba1\u7406\u4e0a\u8ff0\u884c\u4e3a\u7684\u6267\u884c\u3002\u800c\u4e14\u5b83\u53ea\u9700\u8981\u51fd\u6570\u7c7b\u578b\u6216\u8005\u5b9a\u4e49\u5c31\u884c\uff0c\u4e0d\u9700\u8981\u77e5\u9053\u5177\u4f53\u8c03\u7528\u4ec0\u4e48\u51fd\u6570\uff0c\u53ef\u4ee5\u5355\u72ec\u7f16\u8bd1/\u89e3\u91ca\u6bcf\u4e2a\u7ec4\u4ef6\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u5c31\u662flua\u7684\u673a\u5236\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0")),(0,n.kt)("p",null,"\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\uff0c\u64cd\u4f5c\u6570\u7684\u6570\u636e\u7ed3\u6784\u662f\u5b58\u653e\u5728CPU\u7684\u5bc4\u5b58\u5668\u4e2d\u7684\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u6a21\u578b\u6765\u8bf4\u6ca1\u6709PUSH\u548cPOP\u64cd\u4f5c\uff0c\u4f46\u662f\u6307\u4ee4\u4e2d\u9700\u8981\u5305\u542b\u64cd\u4f5c\u6570\u7684\u5730\u5740(\u6216\u8005\u662f\u5bc4\u5b58\u5668)\uff0c\u5e76\u4e14\u6307\u4ee4\u9700\u8981\u663e\u5f0f\u7684\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u5730\u5740\uff0c\u800c\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u6307\u4ee4\u4e0d\u5305\u542b\u64cd\u4f5c\u6570\u7684\u4fe1\u606f\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u5f97\u5230\uff0c\u4f8b\u5982\uff0c\u5728\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u4e0b\uff0c\u4e00\u4e2a\u52a0\u6cd5\u64cd\u4f5c\u5176\u6307\u4ee4\u5c06\u4f1a\u662f\u4e0b\u9762\u8fd9\u5e45\u56fe\u6240\u793a\uff0e\n",(0,n.kt)("img",{alt:"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0",src:l(3172).Z,width:"667",height:"326"})),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"ADD R1, R2, R3 ;# Add contents of R1 and R2, store result in R3\n")),(0,n.kt)("p",null,"\u5c31\u50cf\u4e0a\u9762\u63d0\u5230\u7684\u4e00\u6837\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u662f\u6ca1\u6709PUSH\u548cPOP\u8fd9\u7c7b\u64cd\u4f5c\u7684\uff0c\u56e0\u6b64\u52a0\u6cd5\u6307\u4ee4\u53ea\u6709\u4e00\u884c\uff0c\u4e0d\u50cf\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u90a3\u6837\uff0c\u8fd9\u91cc\u9700\u8981\u663e\u5f0f\u8bf4\u660e\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e(\u8fd9\u91cc\u662f\u653e\u5728R1\uff0cR2\u5bc4\u5b58\u5668\u4e2d)\uff0c\u4f18\u70b9\u5c31\u662f\u907f\u514d\u4e86\u5927\u91cfPUSH\u548cPOP\u7684\u5f00\u9500\uff0c\u56e0\u6b64\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u5728\u6307\u4ee4\u5206\u53d1\u5faa\u73af\u8981\u6bd4\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u8981\u5feb\uff0e\n\u9664\u4e86\u4e0a\u9762\u7684\u63d0\u5230\u7684\u53ef\u4ee5\u907f\u514dPOP\u548cPUSH\u8fd9\u7c7b\u64cd\u4f5c\u5e26\u6765\u7684\u5f00\u9500\u5916\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7684\u4f18\u70b9\uff0c \u4f8b\u5982\u53ef\u4ee5\u5b9e\u73b0\u67d0\u4e9b\u65e0\u6cd5\u5728\u57fa\u4e8e\u5806\u6808\u5b9e\u73b0\u7684\u865a\u62df\u673a\u4e2d\u5b8c\u6210\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u5047\u8bbe\u73b0\u5728\u8981\u6267\u884c\u4e00\u6761\u51cf\u6cd5\u64cd\u4f5c\uff0c\u5bf9\u4e8e\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u6765\u8bf4\u4f1a\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u4fdd\u5b58\u5728\u4e00\u4e2a\u5bc4\u5b58\u5668\u4e2d\uff0c\u5f53\u8fd9\u6761\u51cf\u6cd5\u6307\u4ee4\u518d\u6b21\u6267\u884c\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u5f97\u5230\u8ba1\u7b97\u7ed3\u679c\uff0c\u4e0d\u9700\u8981\u518d\u6b21\u6267\u884c\uff0e\n\u5c3d\u7ba1\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u53c8\u5982\u4e0a\u8bf8\u591a\u7684\u4f18\u70b9\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u6765\u8bf4\uff0c\u4e5f\u5b58\u5728\u7740\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u7684\u6307\u4ee4\u5e73\u5747\u957f\u5ea6\u90fd\u8981\u5927\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\uff0c\u56e0\u4e3a\u524d\u8005\u9700\u8981\u5c06\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u653e\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u540e\u8005\u6307\u4ee4\u662f\u4e0d\u9700\u8981\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u7684\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u83b7\u5f97\uff0c\u56e0\u4e3a\u540e\u8005\u7684\u6307\u4ee4\u957f\u5ea6\u8981\u5c0f\u4e8e\u524d\u8005\uff0e"),(0,n.kt)("p",null,"\u5bc4\u5b58\u5668\u6570\u91cf\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u4e5f\u6709\u4e0d\u540c\uff1a")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u6307\u4ee4\u957f\u5ea6\u7684\u95ee\u9898\u3002\u5bc4\u5b58\u5668\u865a\u62df\u673a\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u76f4\u63a5\u6267\u884c\u5185\u5b58\u5730\u5740\uff0c\u5730\u5740\u6bd4\u8f83\u957f\uff0c\u5b83\u6ca1\u6709\u8c03\u7528\u6808\uff0c\u6570\u636e\u5728\u5185\u5b58\u4e2d\u6ca1\u6709\u987a\u5e8f\u3002\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u6784\u9020\u8c03\u7528\u6808\u6765\u662f\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u53d8\u6210\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u6837\u6307\u4ee4\u5c31\u6bd4\u8f83\u5c0f\u3002"),(0,n.kt)("p",null,"Lua\u53ea\u662f\u4e3a\u4e86\u6267\u884c\u6027\u80fd\uff0c\u53ef\u4ee5\u4e0d\u8003\u8651\u8c03\u7528\u6808\uff0c\u4f46\u662f\u6211\u4eec\u8981\u8003\u8651\u5b89\u5168\u6027\uff0c\u8c03\u7528\u6808\u662f\u5fc5\u987b\u5f97\uff0c\u56e0\u6b64\u53ef\u4ee5\u7ed3\u5408\u4e24\u8005\u4f18\u52bf\u3002"),(0,n.kt)("p",null,"\u6307\u4ee4\u957f\u5ea6\u7684\u51cf\u5c11\u53ef\u4ee5\u5927\u5927\u51cf\u5c11Wasm\u5b57\u8282\u7801\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u5927\u5c0f\u3002"),(0,n.kt)("h2",{id:"24-creationxr"},"2.4. CreationXR"),(0,n.kt)("p",null,"\u8ddf\u624b\u673a\u6700\u5927\u4e0d\u540c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u624b\u5177\u6709\u5728\u4e09\u7ef4\u4e16\u754c\u4e2d\u7684\u4f4d\u7f6e\uff0c\u5177\u5907\u521b\u5efa\u7acb\u4f53\u89c6\u89c9\u7269\u4f53\u7684\u57fa\u7840\uff0c\u4e0d\u518d\u4ec5\u9650\u4e8e\u5e73\u9762"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8eSLAM\uff0c\u4eba\u5728\u4e09\u7ef4\u4e16\u754c\u7684\u79fb\u52a8\u4e5f\u5177\u67093D\u4f4d\u7f6e\uff0c\u6240\u4ee5\u4eba\u8eab\u7684\u79fb\u52a8\u4e5f\u662f\u4ea4\u4e92\u7684\u4e00\u79cd\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"XR\u773c\u955c\u7684\u5c4f\u5e55\u66f4\u5927\uff0c\u4e16\u754c\u4e0d\u518d\u4ec5\u9650\u4e8e\u624b\u673a\u5927\u5c0f\u7684\u5c4f\u5e55\u5c3a\u5bf8")),(0,n.kt)("p",null,"\u5f53\u7136\u524d\u4e24\u8005\u5728\u624b\u673a\u4e5f\u662f\u53ef\u4ee5\u505a\u5230\uff0c\u53ea\u662f\u4f53\u9a8c\u6ca1\u90a3\u4e48\u597d"),(0,n.kt)("p",null,"\u786c\u4ef6\u8bbe\u5907\u7684\u4ea4\u4e92\u53ea\u9650\u4e8e\u624b\u52bf\u8bc6\u522b\u3001\u5b9a\u4f4d\u7b49\u57fa\u7840\u63a5\u53e3\uff0c\u5e94\u7528\u5c42\u8981\u5b9a\u4e49\u771f\u6b63\u7684\u4ea4\u4e92\u63a5\u53e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u968f\u7740\u624b\u6307\u7684\u79fb\u52a8\uff0c\u751f\u6210\u4e0d\u540c\u98ce\u683c\u7684\u7b14\u5237"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u52fe\u52d2\u4e00\u4e2a\u591a\u8fb9\u5f62\u4e4b\u540e\uff0c\u751f\u6210\u5c01\u95ed\u7684\u51e0\u4f55\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u5c06\u4e24\u4e2a\u591a\u8fb9\u5f62\u62fc\u5728\u4e00\u8d77\uff0c\u81ea\u52a8\u5408\u5e76\u6210\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u51e0\u4f55\u8868\u9762\u7684\u7eb9\u7406\u6d82\u9e26\u3001\u6750\u8d28\u7f16\u8f91\uff0c\u55b7\u7ed8"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u80fd\u6d89\u53ca\u5f88\u591a\u7269\u7406\u6a21\u62df\uff0c\u8fd9\u6837\u66f4\u52a0\u771f\u5b9e")),(0,n.kt)("p",null,"\u7531\u4e8e\u624b\u52bf\u4f4d\u7f6e\u4e0d\u662f\u7edd\u5bf9\u7cbe\u51c6\u7684\uff0c\u6240\u4ee5snapping \u7b97\u6cd5\u5f88\u5173\u952e\u2026\u2026"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u624b\u52bf\u8bc6\u522b\u5f88\u5173\u952e")),(0,n.kt)("p",null,"\u4f20\u7edfPC\u6216\u8005\u624b\u673a\u4e8c\u7ef4\u7a7a\u95f4\u521b\u5efa3D\u5f88\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u90fd\u9700\u8981\u4e00\u4e2a\u83dc\u5355\uff0c\u6216\u8005\u8bf4\u6bcf\u4e00\u4e2a\u529f\u80fd\u90fd\u662f\u4e00\u4e2a\u83dc\u5355\uff0c\u4e00\u4e2a3D\u8f6f\u4ef6\u57fa\u672c\u662f\u5c31\u662f\u4e00\u4e2a\u83dc\u5355\u7684\u51e0\u4f55\uff0c\u7528\u6237\u9700\u8981\u9996\u5148\u539f\u5219\u4e00\u79cd\u6a21\u5f0f\uff0c\u7136\u540e\u5728\u8be5\u6a21\u5f0f\u4e0b\u539f\u5219\u5177\u4f53\u7684\u529f\u80fd\u8fdb\u884c\u64cd\u4f5c\uff0c\u83dc\u5355\u53ef\u80fd\u4e0a\u767e\uff0c\u60f3\u8c61\u5c31\u662f\u5821\u5792\u4e4b\u591c\u90fd\u597d\u591a\u83dc\u5355"),(0,n.kt)("p",null,"\u4f46\u5f53\u9009\u62e9\u83dc\u5355\u4ee5\u540e\uff0c\u5b9e\u9645\u7684\u539f\u5b503D\u64cd\u4f5c\u5e76\u4e0d\u591a\uff0c\u5728XR\u4e2d\uff0c\u8fd9\u4e00\u5207\u90fd\u53ef\u4ee5\u901a\u8fc7\u624b\u52bf\u6765\u5927\u5927\u7b80\u5316\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u624b\u4e94\u6307\u6536\u62e2\u5c31\u662f\u7f29\u5c0f\uff0c\u5f20\u5f00\u5c31\u662f\u653e\u5927"),(0,n.kt)("li",{parentName:"ul"},"\u98df\u6307\u79fb\u52a8\u5c31\u662f\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u5de6\u624b\u638c\ud83d\udd90\ufe0f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e2a\u7269\u4f53\uff0c\u5de6\u624b\u624b\u52bf\u5145\u5f53\u4e00\u4e9b\u63a7\u5236\u6a21\u5f0f")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2D vs. 3D")),(0,n.kt)("p",null,"\u4f20\u7edf2D\u9f20\u6807\u6ca1\u6709\u524d\u540e\u6df1\u5ea6\u4e0a\u7684\u6982\u5ff5\uff0c\u7136\u800c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u573a\u666f\u662f3D\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u524d\u7684\u6444\u50cf\u673a\u4e3b\u8981\u662f\u7279\u5b9a\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u8fd1\u7684\u7269\u4f53")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u4f60\u9700\u8981\u5bf9\u67d0\u4e9b\u8ddd\u79bb\u6bd4\u8f83\u8fdc\u7684\u7269\u4f53\u8fdb\u884c\u7f16\u8f91\u65f6\uff0c\u5fc5\u987b\u8981\u5c06\u6444\u50cf\u673a\u79fb\u52a8\u5230\u8fd9\u4e9b\u5730\u65b9\u9644\u8fd1\uff0c\u7136\u800cPC\u4e0a\u79fb\u52a8\u6444\u50cf\u673a\u975e\u5e38\u9ebb\u70e6\uff0c\u56e0\u4e3a\u6ca1\u67093D\u8ddd\u79bb\uff0c\u6211\u4eec\u53ea\u80fd\u501f\u52a9\u9f20\u6807\u6216\u8005\u5c4f\u5e55\u4e0a\u5de6\u53f3\u4e0a\u4e0b\u7684\u6982\u5ff5\uff0c\u8fd9\u79cd\u5e73\u9762\u54113D\u7684\u6620\u5c04\u4f7f\u5f97\u53ea\u80fd\u5b9e\u73b0\u76f8\u5bf9\u4e8e\u5f53\u524d\u4f4d\u7f6e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5de6\u53f3\u4e0a\u4e0b\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5de6\u53f3\u4e0a\u4e0b\u65cb\u8f6c")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\u79fb\u52a8\u5230\u4e00\u4e2a\u8f83\u8fdc\u7684\u5730\u65b9\u4f1a\u975e\u5e38\u9ebb\u70e6\uff0c\u800c3D\u7684\u4ea4\u4e92\u5219\u4e0d\u4e00\u6837\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c06\u624b\u6307\u89e6\u53ca\u5230\u7684\u4e00\u4e2a\u70b9\u62c9\u5230\u773c\u524d"),(0,n.kt)("h3",{id:"241-unified-xr-input"},"2.4.1 Unified XR Input"),(0,n.kt)("h3",{id:"242-xr-scene-understanding"},"2.4.2 XR Scene Understanding"),(0,n.kt)("h3",{id:"243-data-driven-architecture"},"2.4.3 Data-driven Architecture"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u5e94\u8be5\u4ec5\u5173\u6ce8\u7528\u6237\u903b\u8f91\u5c42\uff0c\u5f15\u64ce\u5c42\u9762\u7684\u5f00\u53d1\u8fd8\u662f\u4f7f\u7528\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\uff0c\u6216\u8005\u6709\u4e00\u4e9b\u6570\u636e\u9a71\u52a8\uff0c\u4f46\u5b83\u4e0d\u662fECS\u67b6\u6784\uff0c\u800c\u662f\u4e3a\u4e86\u4fbf\u4e8e\u5982\u8de8\u5e73\u53f0\u6027\u3001\u6e32\u67d3\u7ba1\u7ebf\u914d\u7f6e\u7b49\u8fd9\u6837\u7684\u76ee\u7684\uff0c\u9664\u6b64\u4e4b\u5916\uff0c\u9762\u5411\u5bf9\u8c61\u5177\u6709\u66f4\u597d\u7684\u80fd\u529b\xb7"),(0,n.kt)("h3",{id:"244-\u4ea4\u4e92"},"2.4.4 \u4ea4\u4e92"),(0,n.kt)("p",null,"\u8981\u60f3\u5728XR\u8bbe\u5907\u4e0a\u8fdb\u884c\u4ea4\u4e92\uff08\u5305\u62ec\u5185\u5bb9\u521b\u4f5c\uff09\uff0c\u5e76\u4e14\u9762\u5411\u66f4\u5927\u4f17\u7684\u7528\u6237\uff0c\u5fc5\u987b\u5177\u6709\u66f4\u4f4e\u4ea4\u4e92\u95e8\u69db\uff0c\u4f20\u7edf\u7684\u4e92\u52a8\u7a0b\u5e8f\u5982\u6e38\u620f\u7684\u64cd\u4f5c\u95e8\u69db\u8fd8\u662f\u6bd4\u8f83\u9ad8\u3002\u4f8b\u5982\uff0c\u4f7f\u7528\u624b\u52bf\u89e6\u6478\u7b49\u6309\u952e\u63a7\u5236\u4eba\u7269\u57283D\u7a7a\u95f4\u4e2d\u8fdb\u884c\u884c\u8d70\uff0c\u4f7f\u7528\u590d\u6742\u7684\u6309\u952e\u7ec4\u5408\u63a7\u5236\u89d2\u8272\u5b8c\u6210\u4e00\u4e9b\u590d\u6742\u7684\u4e1c\u897f\uff0c\u4ecd\u7136\u662f\u6e38\u620f\u95e8\u69db\u6bd4\u8f83\u9ad8\u7684\u5176\u4e2d\u4e00\u4e2a\u90e8\u95e8\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u64cd\u63a7\u6280\u5de7\u672c\u8eab\u88ab\u5f53\u505a\u6e38\u620f\u673a\u5236\u5f88\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u5b83\u80fd\u5e26\u6765\u73a9\u6cd5\u7684\u4e50\u8da3\uff0c\u8fd9\u65e0\u53ef\u539a\u975e\uff0c\u4f46\u662f\u4e92\u52a8\u5185\u5bb9\u80cc\u540e\u672c\u8eab\u6240\u8868\u8fbe\u7684\u6545\u4e8b\u3001\u7cfb\u7edf\u4e4b\u95f4\u4ea4\u4e92\u7684\u673a\u5236\u7b49\u4ecd\u7136\u624d\u662f\u4e92\u52a8\u5185\u5bb9\u7684\u6838\u5fc3\uff0c\u5b83\u8868\u8fbe\u7684\u4e1c\u897f\u4f1a\u66f4\u591a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u548c\u8ba1\u7b97\u67b6\u6784\u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5728\u4ea4\u4e92\u9886\u57df\u505a\u4e00\u4e9b\u57fa\u7840\u521b\u65b0\u3002"),(0,n.kt)("h4",{id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"},"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u7a7a\u95f4\u4ea4\u4e92\u5f0f\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u7684\u4e3b\u8981\u5f62\u5f0f\uff0c\u5305\u62ec\u79fb\u52a8\u6444\u50cf\u5934\u3001\u79fb\u52a8\u573a\u666f\u3001\u9009\u62e9\u7269\u4f53\u3001\u79fb\u52a8\u7269\u4f53\u7b49\u7b49\uff0c\u5e38\u7528\u7684\u4e00\u4e9b\u64cd\u4f5c\u65b9\u5f0f\uff0c\u5982\u624b\u673a\u4e0a\u7684\u6ed1\u52a8\u3001\u70b9\u51fb\u3001\u53cc\u51fb\u7b49\u624b\u52bf\uff0c\u4ee5\u53caPC\u4e0a\u7684\u952e\u76d8\u548c\u9f20\u6807\uff0c\u6216\u8005\u4e3b\u673a\u6e38\u620f\u673a\u4e0a\u7684\u9065\u611f\u548c\u63a7\u5236\u624b\u67c4\u3002"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4e92\u52a8\u5185\u5bb9\u6700\u9891\u7e41\u548c\u6700\u6838\u5fc3\u7684\u64cd\u4f5c\u662f\u5173\u4e8eCamera\u7684\u79fb\u52a8\uff0c\u8fd9\u65e2\u53ef\u4ee5\u662f\u79fb\u52a8\u89d2\u8272\uff0c\u4e5f\u53ef\u4ee5\u662f\u79fb\u52a8\u573a\u666f\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\uff0c\u51e0\u4e4e\u90fd\u9700\u8981\u4e00\u79cd\u673a\u5236\u80fd\u591f\u63a7\u5236\u5728\u6574\u4e2a\u7a7a\u95f4\u8fdb\u884c\u64cd\u4f5c\u3002\u8fd9\u6837\u7684\u624b\u52bf\u64cd\u4f5c\u901a\u5e38\u6bd4\u8f83\u590d\u6742\uff0c\u5c24\u5176\u5bf9\u4e8e\u8f83\u8fdc\u5904\u7269\u4f53\u7684\u64cd\u4f5c\uff0c\u4f1a\u968f\u7740\u8ddd\u79bb\u548c\u906e\u6321\u7b49\u95ee\u9898\u53d8\u5f97\u66f4\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u4ee5\u89d2\u8272\u5bf9\u53c2\u8003\u7cfb\u79fb\u52a8\u4e16\u754c\uff0c\u548c\u4ee5\u4e16\u754c\u4e3a\u53c2\u8003\u7cfb\u79fb\u52a8\u89d2\u8272\uff0c\u8fd9\u4e24\u79cd\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u4f46\u662f\u5f53\u4f60\u9700\u8981\u540c\u65f6\u652f\u6301\u8fd9\u4e24\u8005\u662f\uff0c\u4e8b\u60c5\u4f1a\u53d8\u5f97\u590d\u6742\uff0c\u5c24\u5176\u79fb\u52a8\u7269\u4f53\u4f1a\u9762\u4e34\u66f4\u591a\u7a7a\u95f4\u6761\u4ef6\u3002\u300a\u5821\u5792\u4e4b\u591c\u300b\u9488\u5bf9\u6b64\u8bbe\u8ba1\u4e86\u4e00\u79cd\u7edf\u4e00\u7684\u67b6\u6784\uff0c\u5728\u624b\u673a\u6a21\u5f0f\u4e2d\uff0c\u5b83\u5c06\u7269\u4f53\u4e0e\u89d2\u8272\u4e4b\u95f4\uff0c\u501f\u52a9\u56fa\u5b9a\u7684\u5c4f\u5e55\u4e2d\u592e\u4f4d\u7f6e\u4fdd\u6301\u4e00\u79cd\u76f8\u5bf9\u5173\u7cfb\uff0c\u56e0\u6b64\u53ef\u4ee5\u628a\u7269\u4f53\u7684\u79fb\u52a8\u64cd\u4f5c\u4e0e\u73a9\u5bb6\u7684Camera\u7ed3\u5408\u8d77\u6765\u3002\u5927\u5927\u7b80\u5316\u4e86\u8fd9\u79cd\u4ea4\u4e92\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite-Creative-Mode",src:l(4892).Z,width:"3342",height:"1668"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u79cd\u65b9\u5f0f\u7b80\u5316\u4e86\u64cd\u4f5c\uff0c\u4f46\u662f\u5982\u679c\u5728XR\u7684\u73af\u5883\uff08\u5305\u62ec\u624b\u673a\u3001AR\u548cVR\u773c\u955c\uff09\uff0c\u7531\u4e8e\u8bbe\u5907\u672c\u8eab\u5177\u5907\u5b9a\u4f4d\u529f\u80fd\uff0c\u56e0\u6b64\u5b83\u8ddf\u771f\u5b9e\u4e16\u754c\u76843\u7ef4\u7a7a\u95f4\u5173\u8054\u8d77\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4eba\u5728\u771f\u5b9e3\u7ef4\u7a7a\u95f4\u7684\u79fb\u52a8\u4e0e\u865a\u62dfCamera\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u7a7a\u95f4\u662f\u53ef\u4ee5\u76f8\u5bf9\u9759\u6b62\u4e0d\u52a8\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u771f\u5b9e\u7a7a\u95f4\u4eba\u7684\u79fb\u52a8\u5145\u5f53\u4e86\u865a\u62dfCamera\u7684\u79fb\u52a8")),(0,n.kt)("p",null,"\u501f\u52a9\u4e0a\u8ff0\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u6709\u671b\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7b80\u5316XR\u7684\u7a7a\u95f4\u4ea4\u4e92\u95e8\u69db\u3002"),(0,n.kt)("h4",{id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92"},"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4f20\u7edf\u7684\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u90fd\u662f\u53ea\u6d89\u53ca\u52303D\u7684\u7a7a\u95f4\u4ea4\u4e92\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u4ea4\u4e92\u8f6c\u6362\u5230XR\u8bbe\u5907\u65f6\uff0c\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u539f\u672c\u5728\u624b\u673a\u4e0a\u53ea\u9700\u8981\u70b9\u51fb\u5c4f\u5e55\u9009\u62e9\u7684\u65b9\u5f0f\uff0c\u4e5f\u9700\u8981\u53d8\u6210\u4e00\u79cd\u7a7a\u95f4\u4ea4\u4e92")),(0,n.kt)("p",null,"\u8fd9\u5927\u5927\u589e\u52a0\u4e86\u95e8\u69db\uff0c\u4f8b\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6bcf\u4e00\u4e2a\u7269\u54c1\u7684\u9009\u62e9\u90fd\u9700\u8981\u79fb\u52a8\u865a\u62df\u9065\u611f\u6765\u786e\u5b9a\u8981\u64cd\u4f5c\u7684\u5185\u5bb9\u3002\u8fd9\u5728\u4f20\u7edf\u7684\u624b\u673a\u6216\u8005PC\u4e0a\u539f\u672c\u662f\u5f88\u7b80\u5355\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"kokid",src:l(5979).Z,width:"640",height:"360"})),(0,n.kt)("p",null,"\u9488\u5bf9\u6b64\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684\u7a7a\u95f4\u53d8\u6362\u65b9\u6cd5\uff0c\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u662f\u8ba9\u6240\u64cd\u4f5c\u7684\u5185\u5bb9\u5c3d\u53ef\u80fd\u8bed\u4e49\u5316\uff0c\u7136\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u501f\u52a9\u8bed\u97f3\u6765\u8f85\u52a9\u64cd\u4f5c\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u5f88\u96be\u4f7f\u7528\u8bed\u97f3\u8f85\u52a9\uff0c\u56e0\u4e3a\u4fe1\u606f\u90fd\u662f\u6309\u7ed3\u6784\u63cf\u8ff0\u7684\uff0c\u4fe1\u606f\u901a\u8fc7\u6ca1\u6709\u8bed\u4e49\u3002\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5bf9\u6bcf\u4e2a\u5143\u7d20\u52a0\u4e2a\u6807\u7b7e\u4e4b\u7c7b\u7684\u6765\u8f85\u52a9\u8bed\u97f3\u3002"),(0,n.kt)("p",null,"RealityIS\u7ec4\u4ef6\u7684\u8bed\u4e49\u7279\u6027\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u80fd\u5728\u521b\u4f5c\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u5c3d\u53ef\u80fd\u8f83\u5c11\u5bf9\u7a7a\u95f4\u4ea4\u4e92\u7684\u4f9d\u8d56\uff0c\u4ece\u800c\u4f7f\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u66f4\u7b80\u5355\u3002"),(0,n.kt)("h2",{id:"25-creation-ai"},"2.5 Creation AI"),(0,n.kt)("h3",{id:"251-semantics-based-creating"},"2.5.1 Semantics-based Creating"),(0,n.kt)("p",null,"\u57fa\u4e8e \u8bed\u4e49 \u7684 \u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("h3",{id:"252-procedural-content-generation"},"2.5.2 Procedural Content Generation"),(0,n.kt)("h3",{id:"253-intelligent-simulation"},"2.5.3 Intelligent Simulation"),(0,n.kt)("h3",{id:"254-research"},"2.5.4 Research"),(0,n.kt)("p",null,"\u884c\u4e3a\u5206\u6790\u4e0e\u7814\u7a76"),(0,n.kt)("h2",{id:"26-creation-cloud"},"2.6 Creation Cloud"),(0,n.kt)("h3",{id:"261-creation-management"},"2.6.1 Creation Management"),(0,n.kt)("h4",{id:"2611-creationid"},"2.6.1.1 CreationID"),(0,n.kt)("p",null,"2\u3001\u573a\u666f\u5230\u8fbe\u53ca\u65f6\u6027"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u7684\u573a\u666f\u90fd\u5f88\u5927\uff0c\u800c\u4e14\u90fd\u9884\u8bbe\u4e00\u5b9a\u7684\u6d41\u7a0b\u548c\u8def\u7ebf\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u73a9\u5bb6\u90fd\u5fc5\u987b\u4ece\u8d77\u70b9\uff0c\u901a\u8fc7\u524d\u9762\u6240\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u8bbe\u8ba1\u7684\u5173\u5361\uff0c\u624d\u80fd\u5230\u8fbe\u67d0\u4e2a\u573a\u666f\u70b9\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u662f\u9759\u6001\u573a\u666f\u5982\u5854\u9632\uff0c\u4e09\u6d88\u6e38\u620f\uff0c\u6a21\u62df\u7ecf\u8425\u6e38\u620f\uff0c\u5b83\u7684\u72b6\u6001\u4e5f\u4e0d\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u4ece\u96f6\u5f00\u59cb\u628a\u524d\u9762\u7684\u7b49\u7ea7\u90fd\u5b8c\u6210\u4e86\uff0c\u624d\u80fd\u770b\u5230\u8be5\u573a\u666f\u7684\u67d0\u4e2a\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5982\u4e16\u754c\u76f8\u5bf9\u6bd4\u8f83\u9759\u6001\u7684\u5f00\u653e\u573a\u666f\uff0c\u5b83\u7684\u6574\u4e2a\u4e16\u754c\u90fd\u5f88\u5927\uff0c\u4f60\u5f88\u96be\u8ba9\u53e6\u4e00\u4e2a\u73a9\u5bb6\u76f4\u63a5\u5b9a\u4f4d\u5230\u67d0\u4e2a\u4f60\u6307\u5b9a\u7684\u5730\u65b9\uff0c\u4ed6\u4eec\u53ef\u80fd\u8981\u6709\u4e00\u4f1a\u624d\u80fd\u5230\u8fbe\uff0c\u4f8b\u5982\u4e00\u822c\u4f1a\u5206\u4e3a\u4e00\u4e9b\u533a\uff0c\u73a9\u5bb6\u53ef\u80fd\u80fd\u8fdb\u53bb\u4e00\u4e2a\u5927\u533a\u4e00\u4e2a\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u4f46\u662f\u5269\u4e0b\u7684\u8981\u72ec\u7acb\u884c\u8d70\u4e00\u6bb5\u65f6\u95f4\uff0c\u5e76\u4e14\u8981\u77e5\u9053\u65b9\u5411")),(0,n.kt)("p",null,"\u7136\u800c\u6211\u4eec\u9700\u8981\u7684\u662f\u8ba9\u88ab\u5206\u4eab\u7684\u73a9\u5bb6\u80fd\u591f\u6700\u53ca\u65f6\u7684\u3001\u7acb\u523b\u5448\u73b0\u67d0\u4e2a\u5174\u8da3\u70b9\uff0c\u5e76\u4e14\u670b\u53cb\u770b\u5230\u7684\u662f\u540c\u4e00\u72b6\u6001\uff0c\u751a\u81f3\u540c\u4e00\u4e2aCamera\u7684\u4f4d\u7f6e\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u901a\u5e38\u662f\u5c0f\u573a\u666f\u7684\uff0c\u72ec\u7acb\u7684\uff0c\u65e0\u6bd4\u8f83\u590d\u6742\u72b6\u6001\u7684\u64cd\u4f5c"),(0,n.kt)("h3",{id:"262--creation-code-library"},"2.6.2 Creation Code Library"),(0,n.kt)("p",null,"\u4ee3\u7801\u5e93\u662f\u4ee5\u6807\u51c6\u4e3a\u5355\u4f4d\u5bf9\u5176\u8fdb\u884c\u5206\u7c7b\uff0c\u6bcf\u4e2a\u6807\u51c6\u4f1a\u5bf9\u5e94\u65e0\u6570\u4e2a\u5b9e\u73b0\u8be5\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u6807\u51c6\u5e76\u4e0d\u5305\u542b\u7ec4\u4ef6\uff0c\u5b83\u53ea\u4f5c\u4e3a\u7528\u6237\u9009\u62e9\u7ec4\u4ef6\u6216\u8005\u5f00\u53d1\u8005\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u5206\u7c7b\uff0c\u4f8b\u5982\u4e3a\u4e86\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u67d0\u4e2a\u7ec4\u4ef6\u53ef\u80fd\u4f7f\u7528\u6765\u81ea\u4e24\u4e2a\u6807\u51c6\u7684\u7b26\u53f7\u3002"),(0,n.kt)("h4",{id:"2621-\u6807\u51c6\u7ba1\u7406"},"2.6.2.1 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u5b83\u5c31\u662f\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u56f4\u7ed5\u6807\u51c6\u4f1a\u6709\u793e\u533a\u548c\u8ba8\u8bba\uff0c\u6807\u51c6\u4f5c\u4e3a\u4e00\u79cd\u7ec4\u4ef6\u5206\u7c7b\u548c\u68c0\u7d22\u4f9d\u636e\uff0c\u53ef\u4ee5\u67e5\u8be2\u6240\u6709\u4e0e\u8be5\u6807\u51c6\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u540d\u79f0\u662f\u552f\u4e00\u7684\u3002"),(0,n.kt)("p",null,"\u4e0d\u540c\u7684\u5f00\u53d1\u8005\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7c7b\u4f3c\u7684\u6807\u51c6\uff0c\u53ea\u662f\u4f60\u9700\u8981\u53bb\u53d1\u5c55\u81ea\u5df1\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u901a\u8fc7\u81ea\u5df1\u5f00\u53d1\u66f4\u4e30\u5bcc\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u9080\u8bf7\u522b\u7684\u5f00\u53d1\u8005\u9488\u5bf9\u4f60\u7684\u6807\u51c6\u5f00\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u6807\u51c6\u53ea\u5305\u542b\u4e24\u4e2a\u7248\u672c\uff0c\u4ee5\u51cf\u5c11\u7248\u672c\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff0c\u4ee5\u53ca\u59cb\u7ec8\u4fdd\u6301\u7528\u6237\u7ec4\u4ef6\u66f4\u65b0\uff0c\u53c2\u89c14.11.3.4\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"},"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5305\u7684\u7ba1\u7406\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8868\u5199\u7ec4\u4ef6\u65f6\uff0c\u5bf9\u5f15\u7528\u7684\u6807\u51c6\u7b26\u53f7\u8fdb\u884c\u89e3\u91ca\u548c\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u5bf9\u5b9e\u4f53\u6dfb\u52a0\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u65f6\uff0c\u81ea\u52a8\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u4ee5\u53ca\u52a8\u6001\u4fee\u6539Creation Table\u7684\u5e03\u5c40")),(0,n.kt)("p",null,"\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u8fd9\u91cc\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u624b\u52a8\u7ef4\u62a4\u7248\u672c\u53f7\uff0c\u53c2\u89c12.7.5\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"263-multi-player--services"},"2.6.3 Multi-player Services"),(0,n.kt)("h4",{id:"2631-voice-service"},"2.6.3.1 Voice Service"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And epic is con conscientiously making an effort to do this in everything we do. Uh, for example, we're moving to a web RTC based, uh, voice coms framework, um, in Fortnite for voice and text and video chat, so that we can start integrating with other services, you know, other platforms, other stores, other echo systems, other chat clients, um, and have shared social experiences across different game clients. You know, we already have some standards for identity and authentication. We can expand them from there with new standards, for friends and connectivity.")),(0,n.kt)("h3",{id:"264-\u7aef\u4e91\u534f\u540c"},"2.6.4 \u7aef\u4e91\u534f\u540c"),(0,n.kt)("p",null,"\u73b0\u6709\u5f15\u64ce\u67b6\u6784\u5f88\u96be\u505a\u5230\u7aef\u4e91\u534f\u540c\uff0c\u4f8b\u5982\u5927\u5bb6\u60f3\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u548c\u4ea4\u4e92\u653e\u7aef\u4fa7"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u7aef\u53ef\u4ee5\u5171\u4eab\u7684\u5728\u591a\u4e2a\u7528\u6237\u4e4b\u95f4\u5171\u4eab")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u90fd\u5f88\u96be\uff0c\u6216\u8005\u5728\u539f\u6709\u5f15\u64ce\u67b6\u6784\u4e0b\u62c6\u5206\u5f88\u96be\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5176\u5b9e\u8fd8\u6709\u53e6\u5916\u4e00\u4e9b\u534f\u540c\uff0c\u4f8b\u5982AOT\u7684\u9884\u7f16\u8bd1\u7b49\uff0c\u8fd9\u79cd\u9700\u8981\u8f6f\u4ef6\u67b6\u6784\u8ddf\u81ea\u5df1\u6d41\u7a0b\u7684\u8054\u5408\u8bbe\u8ba1\u3002"),(0,n.kt)("h4",{id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"},"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7ec4\u4ef6\u90fd\u5e94\u8be5\u5728\u4e91\u7aef\u6267\u884c\uff0c\u5c24\u5176\u8003\u8651\u5230\u5f88\u591a\u903b\u8f91\u5b9e\u9645\u4e0a\u8ddf\u7528\u6237\u663e\u793a\u662f\u65e0\u5173\u7684\u3002"),(0,n.kt)("h4",{id:"2642-client-as-a-display"},"2.6.4.2 Client as a Display"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6838\u5fc3\u601d\u8def\uff1a\u7aef\u4fa7\u53ea\u9700\u8981\u5b58\u50a8\u548c\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u5185\u5bb9\uff0c\u6bd4\u5982\u5927\u90e8\u5206UI\u548c\u89c6\u89c9\u6548\u679c\u76f8\u5173\u7684\u5185\u5bb9\u3002\u5176\u4ed6\u7684\u903b\u8f91\u548c\u6570\u636e\uff0c\u5982\u679c\u5b83\u4eec\u867d\u7136\u662f\u6838\u5fc3\u6570\u636e\uff0c\u4f46\u662f\u4e0d\u4f1a\u76f4\u63a5\u663e\u793a\uff0c\u4e5f\u4e0d\u5e94\u8be5\u5b58\u5728\u4e8e\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u811a\u672c\u4e2d\u8981\u533a\u5206\u54ea\u4e9b\u662f\u663e\u793a\u7ec4\u4ef6\uff0c\u54ea\u4e9b\u6570\u636e\u662f\u8ddf\u663e\u793a\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u4e0e\u663e\u793a\u76f8\u5173\u7684\u6570\u636e\uff0c\u5b83\u4eec\u5728\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u90fd\u4f1a\u6709\u5b58\u50a8\u7684\u503c\uff0c\u4f46\u662f\u8fd9\u4e9b\u503c\u6709\u53ef\u80fd\u662f\u670d\u52a1\u5668\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u5982\u679c\u662f\u670d\u52a1\u5668\u5199\u5165\u7684\u503c\uff0c\u670d\u52a1\u5668\u4f1a\u81ea\u52a8\u5904\u7406\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u8fd9\u4e2a\u503c\u597d\u50cf\u5c31\u662f\u7aef\u4fa7\u81ea\u5df1\u67d0\u4e2a\u903b\u8f91\u8ba1\u7b97\u7684\uff0c\u5b83\u968f\u65f6\u53ef\u4ee5\u4ece\u5185\u5b58\u4e2d\u83b7\u53d6\u5230\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u8981\u5c06\u8fd9\u4e00\u5207\u9690\u85cf\u8d77\u6765\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u4ed6\u50cf\u4e00\u4e2a\u865a\u62df\u5185\u5b58\uff0c\u7aef\u4fa7\u968f\u65f6\u90fd\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("h4",{id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"},"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"),(0,n.kt)("h4",{id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"},"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"),(0,n.kt)("h4",{id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f"},"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f"),(0,n.kt)("h3",{id:"265-\u5e76\u884c\u8ba1\u7b97"},"2.6.5 \u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u5f88\u96be\u62bd\u53d6\u51fa\u5c0f\u9897\u7c92\u7684\u8ba1\u7b97\uff0c\u6240\u4ee5\u51e0\u4e4e\u65e0\u6cd5\u505a\u5e76\u884c\u8ba1\u7b97\uff0c\u4e00\u4e2a\u6e38\u620f\u5fc5\u987b\u5728\u4e00\u4e2a\u673a\u5668\u4e0a\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\u548c\u4ee3\u7801\u3002\u800c\u5f53\u8fd9\u4e2a\u201c\u6e38\u620f\u201d\u662f\u4e00\u4e2a\u65e0\u7a77\u7684\u5143\u5b87\u5b99\u4e16\u754c\u65f6\uff0c\u8fd9\u79cd\u8ba1\u7b97\u4f1a\u53d8\u5f97\u8d8a\u6765\u8d8a\u4f4e\u6548\u548c\u6602\u8d35\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u505a\u6cd5\uff0c\u5982\u679c\u4e0d\u5bf9\u6570\u636e\u505a\u7cbe\u5fc3\u7684\u7ba1\u7406\uff0c\u6700\u591a\u53ea\u80fd\u505a\u5230\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5757\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u5316\u6d41\u6c34\u7ebf")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u4e3b\u8981\u95ee\u9898\u662f\uff0c\u5b83\u7684\u6570\u636e\u4ecd\u7136\u6ca1\u6709\u62c6\u5206\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u5b83\u53ef\u4ee5\u5728\u4e00\u4e2a\u673a\u5668\u5185\u5f88\u597d\u5730\u505a\u591a\u7ebf\u7a0b\uff0c\u4f46\u662f\u5f53\u5206\u914d\u5230\u591a\u53f0\u673a\u5668\u65f6\uff0c\u6bcf\u53f0\u673a\u5668\u90fd\u8981\u62f7\u8d1d\u51e0\u4e4e\u6240\u6709\u7684\u3001\u76f8\u540c\u7684\u6570\u636e\uff0c\u4f7f\u5f97\u5e76\u884c\u8ba1\u7b97\u7684\u7ba1\u7406\u96be\u5ea6\u5927\u5927\u589e\u52a0\u3002"),(0,n.kt)("p",null,"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b\uff0c\u56e0\u4e3a\u6d41\u6c34\u7ebf\u4e4b\u95f4\u7684\u987a\u5e8f\uff0c\u4e5f\u4f1a\u589e\u52a0\u7ba1\u7406\u548c\u8c03\u5ea6\u7684\u96be\u5ea6\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u4e3b\u8981\u9488\u5bf9 GPU\uff0c\u7531\u4e8eGPU\u8ba1\u7b97\u662f\u9ad8\u5ea6\u5e76\u884c\u7684\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u4f9d\u8d56\u6bd4\u8f83\u5c0f \uff0c\u6240\u6709\u7406\u8bba\u4e0a\u53ef\u4ee5\u5206\u533a\u57df\u6216\u8005\u5206\u5757\u8fdb\u884c\u8ba1\u7b97\u3002\u4f46\u8fd9\u4e0d\u662f\u7edd\u5bf9\u7684\uff0c\u4f8b\u5982\u7eb9\u7406\u91c7\u6837\uff0c\u9634\u5f71\uff0c\u540e\u5904\u7406\u7b49\u6280\u672f\uff0c\u901a\u8fc7\u662f\u9700\u8981\u5bf9\u7eb9\u7406\u8fdb\u884c\u4efb\u610f\u91c7\u6837\u7684\uff0c\u91c7\u7528\u865a\u62df\u5316\u6d41\u6c34\u7ebf\u8fd9\u4e00\u5757\u6709\u5f88\u591a\u95ee\u9898\u9700\u8981\u5904\u7406\u3002\u76ee\u524d\u770b\u8d77\u6765\u4ec5\u6709\u7c7b\u4f3cEpic Games\u7684\u51e0\u4f55\u88c1\u526a\u662f\u5408\u7406\u7684\uff0c\u4fdd\u8bc1\u8ba1\u7b97\u662f\u7ef4\u6301\u5728\u4e00\u4e2a\u4e0a\u9650\uff0c\u800c\u73b0\u4ee3GPU\u8ba1\u7b97\u8fd9\u6837\u7684\u4e0a\u9650\u901a\u5e38\u95ee\u9898\u4e0d\u5927\u3002\u4f46\u7f3a\u70b9\u662f\u8fd9\u90e8\u5206\u6570\u636e\u7ba1\u7406\u7684\u5f00\u9500\u4e5f\u4e0d\u5c0f\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0d\u7ba1\u600e\u6837\uff0cGPU\u7684\u6e32\u67d3\u90e8\u5206\u901a\u8fc7\u88c1\u526a\uff0c\u76ee\u524d\u770b\u8d77\u6765\u662f\u5b58\u5728\u6bd4\u8f83\u5b8c\u5584\u7684\u7406\u8bba\u548c\u5de5\u7a0b\u5b9e\u8df5\u4e86\uff0c\u6240\u4ee5\u6700\u5927\u7684\u95ee\u9898\u662fCPU\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5f53\u6240\u6709\u8ba1\u7b97\u5904\u4e8e\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\uff0c\u903b\u8f91\u8ba1\u7b97\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u770b\uff0cOOP\u5fc5\u7136\u4e0d\u5408\u9002\uff0cUnreal Engine\u7684\u65b9\u5f0f\u8fd8\u6ca1\u6709\u5b58\u5728\u8f83\u5927\u7684\u95ee\u9898\uff0c\u662f\u56e0\u4e3a\u5b83\u7684\u6e38\u620f\u903b\u8f91\u90e8\u5206\u7684\u89c4\u6a21\u8fd8\u4e0d\u591f\u5927\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5fc5\u7136\u8981\u5c06\u6570\u636e\u548c\u903b\u8f91\u62c6\u5206\u6210\u4e00\u6bb5\u4e00\u6bb5\u5c0f\u7684\u8ba1\u7b97\u5355\u5143\uff0c\u4e0d\u7ba1\u5bf9\u4e8e\u6570\u636e\u8fd8\u662f\u8ba1\u7b97\u6307\u4ee4\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f97\u53ef\u4ee5\u65e0\u9650\u5e76\u884c\u5316\uff0c\u56e0\u6b64ECS\u7c7b\u4f3c\u7684\u6570\u636e\u9a71\u52a8\u51e0\u4e4e\u662f\u672a\u6765\u552f\u4e00\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5b83\u5728\u4e00\u4e2a\u7a0b\u5e8f\u5185\u90e8\u5929\u751f\u5730\u5c06\u6570\u636e\u548c\u903b\u8f91\u533a\u5206\u51fa\u6765\u3002"),(0,n.kt)("h4",{id:"2651-\u5206\u5e03\u5f0fcreation-table"},"2.6.5.1 \u5206\u5e03\u5f0fCreation Table"),(0,n.kt)("p",null,"\u5f53\u8ba1\u7b97\u548c\u6570\u636e\u80fd\u591f\u88ab\u5212\u5206\u4e3a\u5c0f\u5757\u6570\u636e\u65f6\uff0c\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u4e0d\u518d\u88ab\u770b\u505a\u662f\u4e00\u4e2a\u4e0d\u53ef \u5206\u5272\u7684\u6574\u4f53\uff0c\u5b83\u7684\u6570\u636e\u548c\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u88ab\u7b80\u5355\u5730\u5212\u5206\u4e3a\u591a\u4e2a\u72ec\u7acb\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u5f88\u5bb9\u6613\u88ab\u5206\u914d\u5230\u591a\u53f0\u670d\u52a1\u5668\u4e0a\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u4fdd\u8bc1\u77e5\u9053\u4e0d\u540c\u7684\u6e38\u620f\u5bf9\u8c61\u5bf9\u5e94\u7684\u670d\u52a1\u5668\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u5e76\u884c\u8ba1\u7b97\u67b6\u6784\u53d8\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e32\u67d3\u5728\u5ba2\u6237\u7aef\u6267\u884c\uff0c\u901a\u8fc7\u5f88\u597d\u7684\u51e0\u4f55\u88c1\u526a\u4fdd\u8bc1\u6027\u80fd\u7684\u4e0a\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5728\u4e91\u7aef\u88ab\u5f88\u597d\u5730\u5206\u5e03\u8ba1\u7b97")),(0,n.kt)("h3",{id:"266-rpc"},"2.6.6 RPC"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d"),(0,n.kt)("h2",{id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"},"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"),(0,n.kt)("h3",{id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf"},"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf"),(0,n.kt)("h3",{id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b"},"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143"},"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143"),(0,n.kt)("p",null,"\u4ee5\u5217\u8868\u4e3a\u6838\u5fc3\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u5c06\u4ee3\u7801\u5206\u4e3a\u4e24\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u64cd\u4f5c\u5217\u8868\u7684\u6838\u5fc3\u529f\u80fd\uff0c\u5982filter\uff0cmap\u548creduce"),(0,n.kt)("li",{parentName:"ul"},"\u9ad8\u9636\u51fd\u6570")),(0,n.kt)("p",null,"\u524d\u8005\u5728\u51fd\u6570\u5f0f\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u901a\u5e38\u901a\u8fc7\u5e93\u7684\u5f62\u5f0f\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u66f4\u591a\u4f7f\u7528\u8fd9\u4e9b\u5e93\u5e76\u63d0\u4f9b\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\u6709\u7c7b\u4f3c\u7684\u601d\u60f3\uff0c\u6211\u4eec\u5c06\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u770b\u505a\u5217\u8868\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u90fd\u662f\u5e76\u884c\u8ba1\u7b97\uff0c\u90fd\u662f\u9488\u5bf9\u5217\u8868\u7684\u8ba1\u7b97\uff0c\u54ea\u6015\u6574\u4e2a\u5217\u8868\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\uff08\u8fd0\u884c\u65f6\u4f1a\u6839\u636e\u5143\u7d20\u4e2a\u6570\u4ee5\u51b3\u5b9a\u662f\u5426\u9700\u8981\u4f7f\u7528\u5e76\u884c\u5316\u6307\u4ee4\uff09\u3002\u5728RealityIS\u4e2d\uff0cfilter\uff0cmap\u548creduce\u8fd9\u4e9b\u5e95\u5c42\u51fd\u6570\u7531\u5e73\u53f0\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u7c7b\u4f3c\u4e8e\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u7ec4\u4ef6\u5305\u542b\u4e09\u4e2a\u51fd\u6570\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"filter\uff1a\u63d0\u4f9b\u7b5b\u9009\u6761\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"map\uff1a\u4e00\u822c\u7684\u903b\u8f91\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"reduce\uff1a\u5408\u5e76\u7edf\u8ba1\u4e4b\u7c7b\u7684\u529f\u80fd\uff0c\u9700\u8981\u6dfb\u52a0\u4e00\u4e9b\u7d2f\u52a0\u503c\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd0\u884c\u65f6\u4f1a\u9996\u5148\u6267\u884cfilter\u51fd\u6570\uff0c\u4ee5\u786e\u4fddmap\u548creduce\u6267\u884c\u7684\u51fd\u6570\u53c2\u6570\u5bf9\u8c61\u4e0d\u80fd\u4e3a\u7a7a\uff0c\u4e8b\u5b9e\u4e0a\u8fd0\u884c\u65f6\u4e5f\u4fdd\u8bc1filter\u6267\u884c\u7684\u96c6\u5408\u5217\u8868\u4e5f\u4e0d\u4f1a\u4e3a\u7a7a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5CreationSctipt\u6ca1\u6709\u7a7a\u503c\u7684\u6982\u5ff5\u3002\u6bcf\u4e2a\u7ec4\u4ef6\u5904\u7406\u7684\u4e5f\u90fd\u662f\u5355\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5b83\u4eec\u4e00\u822c\u4e0d\u5904\u7406\u96c6\u5408\u3002"),(0,n.kt)("h4",{id:"2722-\u5217\u8868\u64cd\u4f5c"},"2.7.2.2 \u5217\u8868\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u5b83\u4e0d\u5149\u662f\u5904\u7406\u8be5\u7ec4\u4ef6\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4ed6\u5176\u5b9e\u4e5f\u5305\u542b\u5904\u7406\u96c6\u5408\u7684\u529f\u80fd\uff0c\u5373\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4f8b\u5982map"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u6240\u5728\u96c6\u5408\u7684\u903b\u8f91\uff0c\u4f8b\u5982filter\u6216\u8005reduce\uff0corder\u7b49")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u540e\u8005\u6765\u8bf4\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u901a\u5e38\u6d89\u53cafor\uff0cwhile\u5faa\u73af\u7b49\uff0c\u5728\u4e00\u4e2a\u96c6\u5408\u7684\u5c42\u9762\u53bb\u64cd\u4f5c\uff0c\u4f8b\u5982Unity ECS\u4e2d\u5f00\u53d1\u8005\u662f\u83b7\u53d6\u4e00\u4e2a\u7c7b\u578b\u7684\u5217\u8868\uff0c\u7136\u540e\u5f00\u53d1\u8005\u81ea\u5b9a\u51b3\u5b9a\u5bf9\u5217\u8868\u7684\u904d\u5386\u3002"),(0,n.kt)("p",null,"\u501f\u52a9\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u4e00\u5217\u7406\u5ff5\uff0c\u4f8b\u5982Erlang\uff0c\u5b83\u4eec\u628afor\u6216\u8005while\u4e4b\u7c7b\u7684\u5faa\u73af\u8f6c\u6362\u4e3a\u9012\u5f52\uff0c\u7136\u540e\u5f00\u53d1\u8005\u5c31\u53ef\u4ee5\u805a\u7126\u4e8e\u5904\u7406\u5bf9\u5355\u4e2a\u5143\u7d20\u7684\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5c06\u5bf9\u5217\u8868\u7684\u64cd\u4f5c\u548c\u5bf9\u5143\u7d20\u7684\u64cd\u4f5c\u7edf\u4e00\u5230\u5355\u4e2a\u64cd\u4f5c\u4e2d\u3002\u5f53\u7136\u5bf9\u4e8e\u96c6\u5408\u64cd\u4f5c\u6765\u8bb2\uff0c\u5176\u4e2d\u7684\u5355\u4e2a\u64cd\u4f5c\u53ef\u80fd\u6d89\u53ca\u5230\u5bf9\u591a\u79cd\u60c5\u51b5\u7684\u5904\u7406\uff0c\u8fd9\u79cd\u60c5\u51b5\u5012\u662f\u5f88\u597d\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u53c2\u89c1Erlang\u7684lists\u6a21\u5757\u3002"),(0,n.kt)("h3",{id:"273-\u6570\u636e\u9a71\u52a8"},"2.7.3 \u6570\u636e\u9a71\u52a8"),(0,n.kt)("h3",{id:"274-ecs"},"2.7.4 ECS"),(0,n.kt)("h3",{id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"},"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"),(0,n.kt)("p",null,"\u5305\u7ba1\u7406\u7684\u673a\u5236\u4e3b\u8981\u662f\u907f\u514d\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u89e6\u78b0\u548c\u914d\u7f6e\u522b\u4eba\u7684\u6e90\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u601d\u60f3\u4e0d\u540c\uff0cReality World\u7684\u4e3b\u8981\u521b\u65b0\u5728\u4e8e\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u914d\u7f6e\u7248\u672c\u53f7\u4e4b\u7c7b\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e0d\u7ba1\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u7528\u6237\u6765\u8bb2\uff0c\u6574\u4e2a\u6d41\u7a0b\u548c\u601d\u8def\u90fd\u7b80\u5316\u4e86\u5f88\u591a\u3002"),(0,n.kt)("h3",{id:"276-\u52a8\u6001\u89e3\u91ca"},"2.7.6 \u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e8b\u60c5\u90fd\u5728\u5b9e\u65f6\u53d8\u5316\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u7f16\u8bd1\u578b\u5e73\u53f0\u80af\u5b9a\u4e0d\u518d\u5408\u9002\u3002\u52a8\u6001\u89e3\u6790\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\uff0c\u53ea\u662f\u8981\u505a\u5230\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c40\u90e8\u89e3\u6790\uff0c\u6bcf\u4e2a\u5c40\u90e8\u7ec4\u4ef6\u53ef\u4ee5\u5355\u72ec\u89e3\u91ca\uff0c\u800c\u4e0d\u9700\u8981\u6539\u4e86\u4e00\u4e2a\u811a\u672c\u9700\u8981\u5176\u4ed6\u4eba\u90fd\u91cd\u65b0\u89e3\u91ca\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u6548\u7387\u8981\u8db3\u591f\u9ad8")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u53d1\u5e03\u7684\u65f6\u5019\u5c31\u7f16\u8bd1\u597d\u4e86\uff0c\u540e\u7eed\u5bf9\u7ec4\u4ef6\u7684\u4f7f\u7528\u90fd\u4e0d\u4f1a\u91cd\u65b0\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u7f16\u8bd1\u3002\u5f53\u7136\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5e95\u5c42\u7684\u865a\u62df\u673a\u9700\u8981\u5c06\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u5730\u5740\u8ba1\u7b97\u6b63\u786e\u5e76\u7ed9\u5230\u7ec4\u4ef6\u6e90\u4ee3\u7801\u3002\u8fd9\u79cd\u9700\u6c42\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\u662f\u4e0d\u592a\u53ef\u884c\u7684\uff0c\u4f46\u662f\u6709\u4e86Creation Table\u5c06\u6240\u6709\u6570\u636e\u8f6c\u6362\u4e3a\u6570\u7ec4\u7684\u5f62\u5f0f\u540e\uff0c\u7ec4\u4ef6\u4e2d\u7684\u6240\u6709\u5730\u5740\u90fd\u662f\u4e00\u4e2a\u76f8\u5bf9\u5730\u5740\u7684\u504f\u79fb\uff0c\u6240\u4ee5\u80fd\u591f\u7b80\u5316\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7684\u52a8\u6001\u4ee3\u7801\u6267\u884c\uff0c\u6574\u4e2a\u7f16\u8bd1\u7cfb\u7edf\u5fc5\u987b\u4ee5\u4e00\u4e2a\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u80fd\u8ddf\u5176\u4ed6\u7684\u4ee3\u7801\u6709\u4efb\u4f55\u5f62\u5f0f\u7684\u5173\u8054\u6216\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136\uff0c\u4f20\u7edf\u7684\u591a\u4e2a\u4ee3\u7801\u94fe\u63a5\u5728\u4e00\u8d77\u7684\u8fc7\u7a0b\u5f0f\u56e0\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u4f8b\u5982\u7f16\u8bd1\u5668\u4e3a\u4e86\u89e3\u91ca\u67d0\u4e2a\u7c7b\u578b\uff0c\u6216\u8005\u5c06\u53d8\u91cf\u6267\u884c\u67d0\u4e2a\u5185\u5b58\u5730\u5740\uff0c\u6216\u8005\u4e3a\u67d0\u4e2a\u5bf9\u8c61\u5206\u914d\u591a\u5927\u7684\u5185\u5b58\u6570\u636e\uff0c\u8fd9\u4e9b\u5bfc\u81f4\u9700\u8981\u4ea4\u53c9\u5173\u8054\u3002\u800c\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u662f\u65e0\u5173\u8054\u7684\uff0c\u81f3\u5c11\u7ec4\u4ef6\u4e0d\u9700\u8981\u77e5\u9053\u5176\u4ed6\u7ec4\u4ef6\u7684\u4efb\u4f55\u4fe1\u606f\uff0c\u800c\u5373\u4f7f\u7b80\u6d01\u7684\u5173\u7cfb\u4e5f\u662f\u7531\u865a\u62df\u673a\u6765\u51b3\u5b9a\u7684\uff0c\u6240\u4ee5\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u5bf9\u6bcf\u4e2a\u7ec4\u4ef6\u6267\u884c\u72ec\u7acb\u7684\u7f16\u8bd1\u5c31\u8db3\u591f\u4e86\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u662f\u5728Runtime\u7684\u65f6\u5019\uff0c\u6839\u636e\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u5b9e\u65f6\u52a0\u8f7d\u7f16\u8bd1\u597d\u7684\u7ec4\u4ef6\u673a\u5668\u7801\u6216\u8005\u5b57\u8282\u7801\uff0c\u7136\u540e\u6839\u636e\u914d\u7f6e\u8fdb\u884c\u5b9e\u65f6\u6570\u636e\u5206\u914d\uff0c\u5e76\u5c06\u5b9e\u65f6\u7684\u6570\u636e\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\u6307\u4ee4\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u52a8\u6001\u5206\u914d\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u5e03\u4f1a\u5f71\u54cd\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u4f46\u8fd9\u6837\u7684\u65f6\u673a\u53ea\u53d1\u751f\u5728\u7b2c\u4e00\u6b21\u52a0\u8f7d\u7a0b\u5e8f\uff0c\u4ee5\u53ca\u7528\u6237\u5bf9\u5b9e\u4f53\u7684\u7ec4\u4ef6\u8fdb\u884c\u4fee\u6539\u7684\u65f6\u5019\uff0c\u56e0\u6b64\u603b\u4f53\u4e0a\u4e0d\u4f1a\u5bf9\u8fd0\u884c\u65f6\u6027\u80fd\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6548\u7387\u6bd4\u8f83\u4f4e\uff0c\u56e0\u6b64\u53c8\u4e0d\u80fd\u5c06\u6240\u6709\u7684\u903b\u8f91\u548c\u6570\u636e\u90fd\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u90a3\u6837\u6574\u4e2a\u7cfb\u7edf\u7684\u6548\u7387\u5c06\u4f1a\u975e\u5e38\u4f4e\u3002\u7406\u60f3\u7684\u72b6\u6001\u662f\u80fd\u591f\u7ed3\u5408\u811a\u672c\u8bed\u8a00\u7684\u7075\u6d3b\u6027\u4e0e\u539f\u751f\u7cfb\u7edf\u8bed\u8a00\u7684\u9ad8\u6027\u80fd\uff0c\u7136\u540e\u4e00\u822c\u7684\u8bed\u8a00\u673a\u5236\u5374\u5f88\u96be\u505a\u5230\u8fd9\u6837\uff0c\u56e0\u4e3a\u6570\u636e\u8ddf\u7a0b\u5e8f\u903b\u8f91\u901a\u5e38\u662f\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5b83\u901a\u5e38\u90fd\u662f\u6709\u4e00\u53f0\u673a\u5668\u540c\u65f6\u6267\u884c\u6570\u636e\u7684\u5206\u914d\u548c\u903b\u8f91\u7684\u89e3\u91ca\u3002\u6bd4\u5982\u73b0\u5728\u7684\u811a\u672c\u8bed\u8a00\uff0c\u5b83\u90fd\u5305\u542b\u81ea\u5df1\u72ec\u7acb\u7684\u865a\u62df\u673a\uff0c\u4f7f\u5f97\u811a\u672c\u4e2d\u7684\u4e00\u4e9b\u90fd\u662f\u7531\u8be5\u865a\u62df\u673a\u7ba1\u7406\u7684\u3002\u865a\u62df\u673a\u672c\u8eab\u5c31\u662f\u4e00\u53f0\u80fd\u591f\u6267\u884c\u901a\u7528\u8ba1\u7b97\u7684\u673a\u5668\u3002\u5373\u4f7f\u811a\u672c\u8bed\u8a00\u4e5f\u80fd\u591f\u8ddf\u81ea\u5b9a\u4e49\u7684\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u4ea4\u4e92\uff0c\u6574\u4e2a\u4ea4\u4e92\u7684\u8fc7\u7a0b\u5374\u662f\u975e\u5e38\u590d\u6742\uff0c\u6bd4\u5982\u8fd9\u79cd\u590d\u6742\u7684\u8fc7\u7a0b\u80af\u5b9a\u4e0d\u9002\u5408\u666e\u901a\u7684\u7528\u6237\u53bb\u914d\u7f6e\uff0c\u800c\u4e14\u4ed6\u4e5f\u8981\u6c42\u66b4\u9732\u4e00\u4e9b\u5e95\u5c42\u7684\u63a5\u53e3\u7ed9\u5e73\u53f0\uff0c\u8fd9\u6837\u5c06\u4f1a\u5e26\u6765\u5b89\u5168\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u914d\u4ea4\u7ed9\u865a\u62df\u673a\u6765\u505a\uff0c\u80fd\u591f\u7b80\u5316\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u8ba9\u5bbf\u4e3b\u5c42\u6765\u7ba1\u7406\u548c\u52a0\u8f7d\u6570\u636e\uff0c\u5c06\u5927\u5927\u63d0\u5347\u7cfb\u7edf\u7684\u6027\u80fd\u3002\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u7701\u6389\u5f88\u591a\u4e8b\u60c5\uff0c\u53ea\u4e13\u6ce8\u4e8e\u552f\u4e00\u9700\u8981\u4e13\u6ce8\u7684\u903b\u8f91\u8ba1\u7b97\u6307\u4ee4\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7528\u62c5\u5fc3\u590d\u6742\u6570\u636e\u7684\u5206\u914d\u548c\u5bfb\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u5783\u573e\u56de\u6536\u7ba1\u7406\u590d\u6742\u7684\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u7701\u6389\u6570\u636e\u5206\u914d\uff0c\u4ee5\u53ca\u66f4\u7b80\u5355\u7684\u7ec4\u4ef6\u5f00\u53d1\u89c4\u5219\uff08\u4f8b\u5982\u4e0d\u9700\u8981\u5b9a\u4e49\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u673a\u5236\uff09\uff0c\u6574\u4e2a\u89e3\u91ca\u5668\u4e5f\u4f1a\u53d8\u5f97\u975e\u5e38\u7b80\u5355")),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6574\u4f53\u4e0a\u7c7b\u4f3cAOT\uff0c\u4f46\u662f\u5b83\u4e5f\u4e0d\u662f\u5168\u90e8AOT\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u636e\u7ec4\u7ec7\u90e8\u5206\u9700\u8981\u5728Runtime\u6267\u884c\uff0c\u8fd9\u6837\u4fdd\u8bc1\u65e2\u6709\u6bd4\u8f83\u597d\u7684\u52a8\u6001\u6027\uff0c\u53c8\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\u4fdd\u8bc1\u3002"),(0,n.kt)("h3",{id:"277-\u8d23\u6743\u8ba9\u6e21"},"2.7.7 \u8d23\u6743\u8ba9\u6e21"),(0,n.kt)("p",null,"\u5c06\u5f88\u591a\u539f\u672c\u9700\u8981\u7a0b\u5e8f\u5458\u7ba1\u7406\u7684\u4e8b\u60c5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u7ba1\u7406\uff0c\u4f8b\u5982\u5bf9\u8c61\u7684\u67e5\u627e\u7b5b\u9009\uff0c\u8d4b\u503c\uff0c\u8fd0\u7528\uff0c\u5bf9\u8c61\u72b6\u6001\u7ba1\u7406\u7b49"),(0,n.kt)("h3",{id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217"},"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6700\u597d\u7684\u5e76\u53d1\u6a21\u578b\u5c31\u662fErlang\u7684\u72ec\u7acb\u8fdb\u7a0b\u5e76\u53d1\u65b9\u5f0f\uff0c\u4f46\u662f\u57fa\u4e8eECS\u7684\u6570\u636e\u7ba1\u7406\u4f1a\u8ba9\u8fd9\u4e2a\u4e8b\u60c5\u53ef\u4ee5\u505a\u7684\u66f4\u597d\u3002"),(0,n.kt)("h4",{id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"},"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6309\u7167\u4f20\u7edf\u7684\u505a\u6cd5\u53ef\u80fd\u5c31\u662f\u9700\u8981\u5355\u72ec\u6784\u5efa\u4e00\u4e9b\u6d88\u606f\u961f\u5217\uff0c\u8ba9\u540e\u901a\u8fc7\u6d88\u606f\u961f\u5217\u9a71\u52a8\u66f4\u65b0\uff0c\u6216\u8005\u8bf4\u5c31\u662f\u5355\u7eaf\u7684\u4f46\u6d88\u606f\u76f4\u63a5\u901a\u77e5\u3002"),(0,n.kt)("p",null,"\u5728ECS\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5b9e\u4f53\u5bf9\u8c61\u7684\u6570\u636e\u5217\u8868\u672c\u8eab\u5c31\u5f53\u505a\u4e00\u4e2a\u6d88\u606f\u961f\u5217\uff0c\u5b83\u6ee1\u8db3\u6d88\u606f\u961f\u5217\u7684\u57fa\u672c\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5217\u8868\u90fd\u5904\u7406\u540c\u7c7b\u578b\u7684\u6d88\u606f\uff0c\u56e0\u6b64\u80fd\u591f\u5b9a\u4f4d\u63a5\u53d7\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u672c\u8eab\u5c31\u643a\u5e26\u4e86\u901a\u4fe1\u7684\u6d88\u606f\u6570\u636e")),(0,n.kt)("p",null,"\u518d\u52a0\u4e0a\u4e00\u4e9b\u5bf9\u5217\u8868\u7684filter\u7b49\u64cd\u4f5c\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e00\u4e9b\u5197\u4f59\u7684\u6570\u636e\uff0c\u6bd4\u5982\u90a3\u4e9b\u6ca1\u6709\u4efb\u4f55\u53d8\u66f4\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3afilter\u672c\u8eab\u7684\u4e00\u4e2a\u9009\u9879\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6f5c\u5728\u7684\u95ee\u9898\u662f\u6027\u80fd\u95ee\u9898\uff0c\u5373\u5217\u8868\u6570\u636e\u4e0d\u53ef\u4ee5\u4fee\u6539\uff0c\u6216\u8005\u91cd\u65b0\u7ec4\u7ec7\u7684\u4ee3\u4ef7\u5f88\u9ad8\u3002\u4f46\u662f\u4e5f\u6709\u4e24\u79cd\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8003\u8651\u5230\u6570\u636e\u662f\u53ea\u8bfb\u7684\uff0c\u5176\u5b9e\u4e5f\u53ef\u4ee5\u628a\u8fd9\u90e8\u5206\u91cd\u65b0\u590d\u5236\u4e00\u4efd\u91cd\u65b0\u7ec4\u7ec7\uff0c\u4f20\u9012\u7ed9\u4f7f\u7528\u8005\uff0c\u8fd9\u6837\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u8ba1\u7b97\u6027\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5e72\u8106\u4e0d\u7ba1\u7406\u95ee\u9898\u4e5f\u4e0d\u5927")),(0,n.kt)("h4",{id:"2782-\u5e76\u884c\u4f38\u7f29\u6027"},"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027"),(0,n.kt)("p",null,"Erlang\u5e76\u4e0d\u64c5\u957f\u505aGPU\u7f16\u7a0b\uff0c\u56e0\u4e3a\u8fd9\u7c7b\u95ee\u9898\u901a\u5e38\u90fd\u9700\u8981\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u6570\u503c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"Erlang\u4e2d\u7684\u6613\u5e76\u884c\u95ee\u9898\u6240\u5904\u7684\u5c42\u7ea7\u8981\u66f4\u9ad8\u4e00\u4e9b\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5b83\u4eec\u90fd\u662f\u50cf\u804a\u5929\u670d\u52a1\u5668\uff0c\u7535\u8bdd\u4ea4\u6362\u673a\uff0cweb\u670d\u52a1\u5668\uff0c\u6d88\u606f\u961f\u5217\uff0cweb\u722c\u866b\u4e4b\u7c7b\u7684\u5e94\u7528\uff0c\u53ef\u4ee5 \u628a\u8fd9\u7c7b\u5e94\u7528\u4e2d\u5de5\u4f5c\u7684\u6267\u884c\u4f53\u8868\u793a\u6210\u4e00\u7ec4\u76f8\u4e92\u72ec\u7acb\u7684\u903b\u8f91\u5b9e\u4f53\u3002"),(0,n.kt)("p",null,"Erlang\u4ec5\u5173\u6ce8\u51fd\u6570\u534a\u8eab\uff0c\u4e0d\u5173\u6ce8\u6570\u636e\u7ba1\u7406\uff0c\u56e0\u6b64\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u50cfOOP\u4e00\u6837\uff0c\u5206\u5e03\u5728\u5206\u6563\u7684\u533a\u57df\uff0c\u4e0d\u5177\u5907\u6570\u636e\u5c40\u90e8\u6027\u3002"),(0,n.kt)("p",null,"RealityIS\u80fd\u591f\u7cbe\u5fc3\u5730\u5bf9\u540c\u7c7b\u578b\u6570\u636e\u8fdb\u884c\u66f4\u597d\u5730\u7ba1\u7406\uff0c\u4ee5\u5b9e\u73b0\u66f4\u597d\u7684\u5e76\u884c\u8ba1\u7b97\u3002\u4ece\u8fd9\u4e2a\u5c42\u9762\u770b\uff0c\u4ed6\u6709\u70b9\u7c7b\u4f3c\u4e8e\u628aErlang\u4e2d\u90a3\u4e9b\u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u90fd\u4e32\u8054\u8d77\u6765\uff0c\u653e\u5728\u5176\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u7531\u4e8eErlang\u5e76\u6ca1\u6709\u7ba1\u7406\u6570\u636e\uff0c\u6240\u6709\u8981\u60f3\u5728Erlang\u4e2d\u7ba1\u7406\u5e76\u884c\u5176\u5b9e\u5f88\u96be\uff0c\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u8fd9\u4e00\u5c42\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cErlang\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0e\u4e4b\u76f8\u5173\u7684\u7f3a\u70b9\u662f\uff0c\u4e0d\u80fd\u4fdd\u8bc1\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u987a\u5e8f\u3002\u4f60\u53ea\u80fd\u53d1\u8d77\u8fdb\u7a0b\uff0c\u751a\u81f3\u4e0d\u80fd\u53d6\u56de\u8fd4\u56de\u503c\uff0c\u4e5f\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u6216\u8005\u6709\u6ca1\u6709\u6267\u884c\u5b8c\u6bd5\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u4e0a\u8ff0\u7684\u56e0\u7d20\uff0c\u5728RealityIS\u4e2d\uff0c\u8fd8\u53ef\u4ee5\u5b9e\u73b0\u5927\u89c4\u6a21\u5e76\u884c\u8ba1\u7b97\u3002\u5728\u4f20\u7edf\u7684\u7aef\u4fa7\u6216\u8005\u5355\u673a\u7684\u6e38\u620f\u8fd0\u884c\u65f6\uff0c\u540c\u4e00\u7c7b\u578b\u7684\u5b9e\u4f53\u5bf9\u8c61\u901a\u5e38\u662f\u5c11\u6570\uff0c\u6bd4\u5982\u53ef\u80fd\u5c31\u662f\u51e0\u4e2a\uff0c\u751a\u81f3\u5f88\u5c11\u8d85\u8fc7\u51e0\u5341\u4e2a\uff0c\u9664\u975e\u8ddf\u56fe\u5f62\u6e32\u67d3\u76f8\u5173\u7684\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u6211\u4eec\u628a\u8fd9\u4e9b\u8ba1\u7b97\u653e\u5230\u4e91\u7aef\uff0c\u591a\u4e2a\u7528\u6237\u5c31\u53ef\u80fd\u6c47\u96c6\u66f4\u5927\u7684\u540c\u7c7b\u5bf9\u8c61\uff0c\u8fd9\u79cd\u6570\u91cf\u4e5f\u8bb8\u5927\u5230\u51e0\u5343\u4e0a\u4e07\u800c\u53ef\u4ee5 \u5b8c\u5168\u8f6c\u79fb\u5230GPU\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u3002\u8fd9\u80fd\u591f\u66f4\u5145\u5206\u7684\u5229\u7528\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u95ee\u9898\u662f\uff0c\u6bcf\u4e2a \u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u7ed3\u679c\u6216\u6d88\u606f\u53ef\u80fd\u8981\u5206\u53d1\u5230\u6570\u5343\u4e2a\u5ba2\u6237\u7aef\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4e5f\u8bb8\u53ef\u4ee5\u901a\u8fc7\u4f20\u7edf\u7684\u4e00\u4e9b\u670d\u52a1\u5668\u76f8\u5173\u6280\u672f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"279-let-is-crash"},"2.7.9 Let is crash"),(0,n.kt)("p",null,"\u9519\u8bef\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u56e0\u6b64\u627e\u51fa\u597d\u7684\u5904\u7406\u9519\u8bef\u548c\u95ee\u9898\u7684\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u4f01\u56fe\u9632\u6b62\u9519\u8bef\u7684\u51fa\u73b0\uff0c\u8fd9\u662fErlang\u7684\u54f2\u5b66\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u65b9\u5f0f\u6216\u8005\u539f\u5219\uff1a\u5982\u679c\u7cfb\u7edf\u4e2d\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u9519\u8bef\uff0c\u9020\u6210\u4e86\u6570\u636e\u7834\u574f\uff0c\u90a3\u4e48\u8fd9\u4e2a\u90e8\u5206\u5e94\u8be5\u5c3d\u5feb\u6b7b\u5fd9\u4ee5\u9632\u6b62\u9519\u8bef\u548c\u574f\u6570\u636e\u4f20\u64ad\u5230\u7cfb\u7edf\u7684\u5269\u4f59\u90e8\u5206\u3002"),(0,n.kt)("h4",{id:"2791-\u5bb9\u9519\u673a\u5236"},"2.7.9.1 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("p",null,"\u4e00\u79cd\u66f4\u5b89\u5168\u7684\u89e3\u51b3\u65b9\u6cd5\u662f\uff0c\u786e\u4fdd\u8ba9\u5d29\u6e83\u548c\u6b63\u5e38\u5173\u95ed\u5177\u6709\u540c\u6837\u7684\u6548\u679c\u3002\u8fd9\u79cd\u6548\u679c\u53ef\u4ee5\u901a\u8fc7\u50cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5171\u4eab\uff0c\u7cfb\u7edf\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u5b8c\u5168\u9694\u79bb"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u8d4b\u503c\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u9694\u79bb\u5355\u4e00\u8fdb\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4f7f\u7528\u9501\uff0c\u5982\u679c\u53d1\u751f\u5d29\u6e83\u65f6\u6709\u90e8\u5206\u6570\u636e\u662f\u88ab\u52a0\u9501\u7684\uff0c\u90a3\u4e48\u4f1a\u5bfc\u81f4\u5176\u4ed6\u8fdb\u7a0b\u65e0\u6cd5\u8bbf\u95ee\u8fd9\u90e8\u5206\u6570\u636e\uff0c\u5bfc\u81f4\u8fd9\u90e8\u5206\u6570\u636e\u72b6\u6001\u4e0d\u4e00\u81f4")),(0,n.kt)("p",null,"\u5728Erlang\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u574f\u4e86\uff0c\u4f1a\u53d1\u9001\u6700\u540e\u4e00\u6761\u6d88\u606f\u51fa\u53bb\uff0c\u5e76\u4e14\u7cfb\u7edf\u4f1a\u4fdd\u8bc1\u8fd9\u6761\u6d88\u606f\u88ab\u53d1\u51fa\u53bb\uff0c\u53ca\u8fd9\u4e2a\u90e8\u5206\u9ed8\u8ba4\u8ba4\u4e3a\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5185\u90e8\u7684\u4e0d\u540c\u5730\u65b9\u53ef\u80fd\u5bfc\u81f4\u51fa\u9519\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u4e0d\u662f\u50cfErlang\u4e00\u6837\u72ec\u7acb\u8fdb\u7a0b\u6267\u884c\uff0c\u800c\u662f\u4f1a\u53bb\u4fee\u6539\u4e00\u4e9b\u5171\u4eab\u6570\u636e\uff0c\u56e0\u6b64\u5982\u679c\u8fd9\u79cd\u4fee\u6539\u4e4b\u540e\u518d\u53d1\u751f\u5d29\u6e83\uff0c\u5c31\u4f1a\u5bfc\u81f4\u5176\u4ed6\u6a21\u5757\u7684\u72b6\u6001\u53ef\u80fd\u4e0d\u662f\u9884\u671f\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u9632\u6b62\u76f8\u5173\u7684\u4e0d\u4e00\u81f4\u95ee\u9898\uff0c\u53ef\u4ee5\u4ece\u4e00\u4e0b\u65b9\u9762\u8fbe\u5230\u7c7b\u4f3cErlang\u7684\u6548\u679c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u5141\u8bb8\u4fee\u6539\u4e00\u4e2a\u5171\u4eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u540c\u65f6\u5bf9\u591a\u4e2a\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u3002\u56e0\u4e3a\u672c\u8eab\u6211\u4eec\u7684\u5c5e\u6027\u7ecf\u8fc7\u4e86\u6807\u51c6\u7684\u7cbe\u5fc3\u8bbe\u8ba1\uff0c\u6bcf\u4e2a\u5c5e\u6027\u90fd\u662f\u4ee3\u8868\u5177\u6709\u6bd4\u8f83\u72ec\u7acb\u7684\u610f\u4e49\uff0c\u56e0\u6b64\u4e0d\u540c\u5c5e\u6027\u7684\u4fee\u6539\u5e94\u8be5\u4f7f\u7528\u4e0d\u540c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5fc5\u987b\u786e\u4fdd\u5728\u6574\u4e2a\u7ec4\u4ef6\u6ca1\u6709\u9519\u8bef\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u540e\u624d\u4f1a\u5b89\u5168\u5730\u4fee\u6539\u5c5e\u6027\uff0c\u8fd9\u4e2a\u5c5e\u6027\u4fee\u6539\u5c31\u50cfErlang\u628a\u6d88\u606f\u53d1\u51fa\u53bb\u4e00\u6837\uff0c\u672c\u8eab\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u4e0a\u8ff0\u7684\u5c5e\u6027\uff0cRealityIS\u4e2d\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u5c31\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e00\u6837\uff0c\u5bf9\u5176\u4ed6\u72b6\u6001\u6570\u636e\u4e0d\u4f1a\u9020\u6210\u4efb\u4f55\u7834\u574f\uff0c\u56e0\u6b64\u53ef\u4ee5\u968f\u610f\u4e22\u5f03\u6389\u8be5\u7ec4\u4ef6\u6267\u884c\u7684\u90e8\u5206\u800c\u4e0d\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u50cfReduce\u7d2f\u52a0\u6570\u7684\u6982\u5ff5\u4e5f\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5904\u7406Reduce\uff0c\u5219\u5b83\u4e0d\u80fd\u5904\u7406Map\uff0c\u56e0\u4e3a\u4e24\u4e2a\u903b\u8f91\u53ef\u4ee5\u8fdb\u4e00\u6b65\u62c6\u5206\uff0c\u5426\u5219\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4e0d\u597d\u7ba1\u7406\u3002")),(0,n.kt)("h4",{id:"2792-\u5e76\u53d1\u8c03\u5ea6"},"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u4e86\u57fa\u4e8e\u5f02\u6b65\u6d88\u606f\u4f20\u9012\u7684\u8f7b\u91cf\u8fdb\u7a0b\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4e0d\u80fd\u4f9d\u9760\u64cd\u4f5c\u7cfb\u7edf\u6765\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u800c\u662f\u901a\u8fc7\u5728VM\u4e2d\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u4f7f\u53ef\u4ee5\u5bf9\u4f18\u5316\u548c\u53ef\u9760\u6027\u8fdb\u884c\u5b8c\u5168\u638c\u63a7\u3002\u6bd4\u5982\uff0c\u5728Erlang\u4e2d\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5927\u6982\u5360\u7528300\u4e2a\u5b57\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u521b\u5efa\u65f6\u95f4\u53ea\u6709\u51e0\u5fae\u79d2\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7ba1\u7406\u7a0b\u5e8f\u6240\u521b\u5efa\u7684\u6240\u6709\u8fdb\u7a0b\uff0cVM\u4f1a\u4e3a\u6bcf\u4e2a\u6838\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\u6765\u5145\u5f53\u4e00\u4e2a\u8c03\u5ea6\u5668\uff08scheduler\uff09\u3002\u6bcf\u4e2a\u8c03\u5ea6\u5668\u6709\u4e00\u4e2a\u8fd0\u884c\u961f\u5217\uff08run queue\uff09\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2aErlang\u8fdb\u7a0b\u5217\u8868\uff0c\u4f1a\u7ed9\u5176\u4e2d\u7684\u6bcf\u4e2a\u8fdb\u7a0b\u5206\u914d\u4e00\u5c0f\u6bb5\u8fd0\u884c\u65f6\u95f4\u7247\u3002\u5f53\u67d0\u4e2a\u8c03\u5ea6\u5668\u7684\u8fd0\u884c\u961f\u5217\u4e2d\u4efb\u52a1\u8fc7\u591a\u65f6\uff0c\u4f1a\u628a\u4e00\u90e8\u5206\u4efb\u52a1\u8fc1\u79fb\u5230\u5176\u4ed6\u961f\u5217\u4e2d\u3002\u8fd9\u610f\u5473\u7740\uff0c\u6bcf\u4e2aErlangVM\u90fd\u4f1a\u8fdb\u884c\u8d1f\u8f7d\u64cd\u4f5c\uff0c\u7a0b\u5e8f\u5458\u65e0\u9700\u5173\u5fc3\u3002VM\u8fd8\u4f1a\u8fdb\u884c\u5176\u4ed6\u4f18\u5316\u5de5\u4f5c\uff0c\u4f8b\u5982\uff0c\u5bf9\u53d1\u5411\u8fc7\u8f7d\u8fdb\u7a0b\u7684\u6d88\u606f\u8fdb\u884c\u9650\u901f\uff0c\u4ee5\u8c03\u8282\u548c\u5747\u8861\u8d1f\u8f7d\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddfRealityIS\u7684\u8bbe\u8ba1\u7406\u5ff5\u4e00\u6837\uff0c\u8c03\u5ea6\u5668\u662f\u6bcf\u4e2a\u6838\u7684\u65f6\u949f\u63a7\u5236\uff0c\u5c31\u662f\u6e38\u620f\u4e2d\u7684update\u5faa\u73af\uff0c\u5f53\u7136\u8fd9\u91cc\u5904\u7406\u65f6\u95f4\u5206\u914d\u672c\u8eab\uff0c\u8fd8\u9700\u8981\u505a\u4e00\u4e9b\u5728\u6838\u5185\u8fdb\u884c\u8c03\u5ea6\u548c\u6838\u4e4b\u95f4\u901a\u4fe1\u7684\u4e8b\u60c5\u3002\u800c\u6d88\u606f\u5217\u8868\u5b9e\u9645\u4e0a\u662f\u643a\u5e26\u8005\u51fd\u6570\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u800c\u5728RealityIS\u4e2d\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5217\u8868\u7684\u6570\u636e\uff0c\u5b9e\u9645\u4e0a\u4e5f\u5c31\u662f\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u5230\u7684\u51fd\u6570\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u53ea\u4e0d\u8fc7\u76f8\u5bf9\u4e8eErlang\u7684\u5e76\u53d1\u6027\uff0cRealityIS\u8fd8\u540c\u65f6\u5b9e\u73b0\u4e86\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"},"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"),(0,n.kt)("p",null,"OOP\u901a\u5e38\u901a\u8fc7\u590d\u6742\u7684\u7ee7\u627f\u673a\u5236\u6765\u5b9a\u4e49\u4e00\u4e2a\u5305\u542b\u7279\u5b9a\u529f\u80fd\u96c6\u5408\u7684\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u529f\u80fd\u90fd\u5df2\u51fd\u6570\u7684\u5f62\u5f0f\u88ab\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u4e2d\u3002"),(0,n.kt)("p",null,"FP\u5219\u5f3a\u8c03\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f\uff0c\u5176\u4e2d\u7684\u903b\u8f91\u4e3b\u8981\u662f\u56e0\u4e3aFP\u4e2d\u7684\u51fd\u6570\u901a\u5e38\u662f\u201c\u65e0\u72b6\u6001\u7684\u201d\uff0c\u72ec\u7acb\u7684\uff0c\u5bf9\u5e94\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u8f93\u5165\uff0c\u5b83\u7684\u8f93\u51fa\u603b\u662f\u4fdd\u6301\u4e0d\u53d8\uff0c\u56e0\u4e3a\u4e0d\u6d89\u53ca\u5230\u4efb\u4f55\u5185\u90e8\u72b6\u6001\u7684\u4fee\u6539\uff0c\u6240\u4ee5\u540c\u6837\u7684\u8f93\u5165\u4e0d\u4f1a\u53d7\u5230\u4efb\u4f55\u5f71\u54cd\u3002\u56e0\u6b64\uff0c\u8fd9\u6837\u7684\u76f8\u4e92\u72ec\u7acb\u7684\u7eaf\u51fd\u6570\u662f\u53ef\u4ee5\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4e0d\u540c\u51fd\u6570\u7ec4\u5408\u7684\u4e00\u4e2a\u66f4\u590d\u6742\u7684\u51fd\u6570\u5c31\u6784\u6210\u4e00\u4e2a\u7279\u5b9a\u529f\u80fd\u7684\u590d\u6742\u51fd\u6570\u6216\u8005\u590d\u6742\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u63cf\u8ff0\u53ef\u4ee5\u770b\u51fa\uff0c\u6240\u8c13\u7684\u7ec4\u5408\u5176\u5b9e\u5e76\u6ca1\u6709\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5e76\u4e0d\u50cfECS\u4e2d\u90a3\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e00\u6837\uff0c\u4ed6\u5176\u5b9e\u9690\u542b\u7740\u4e00\u5b9a\u7684\u7f16\u7a0b\u903b\u8f91\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u51fd\u6570\u7684\u7ec4\u5408\u662f\u901a\u8fc7\u5c06\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u5408\uff0c\u5b83\u66f4\u50cf\u662f\u4e00\u4e9b\u51fd\u6570\u8fde\u8f7d\u4e00\u8d77\uff0c\u800c\u6bcf\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\uff0c\u50cf\u63d2\u69fd\u4e00\u6837\u6263\u5728\u4e00\u8d77\uff0c\u4f46\u662f\u8fd9\u4e9b\u5361\u6263\u672c\u8eab\u662f\u6709\u4e00\u5b9a\u903b\u8f91\u7684\uff0c\u4f60\u9700\u8981\u77e5\u9053\u5c06\u54ea\u4e2a\u51fd\u6570\u8fde\u5728\u53e6\u5916\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u4e0a\uff0c\u4e5f\u5373\u662f\u610f\u5473\u7740\u4f60\u5176\u5b9e\u8981\u660e\u767d\u6240\u6709\u8fd9\u4e9b\u51fd\u6570\u8fde\u5728\u4e00\u8d77\u7684\u6267\u884c\u903b\u8f91\u548c\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e00\u822c\u8fd9\u79cd\u7ec4\u5408\u7684\u5c42\u6b21\u4e0d\u4f1a\u5f88\u6df1\uff0c\u4f8b\u5982\u901a\u5e38\u90fd\u662f\u4e00\u4e2a\u201c\u4e1a\u52a1\u51fd\u6570\u201d+\u4e00\u4e2a\u9ad8\u9636\u51fd\u6570\u5373\u53ef\uff0c\u4f46\u7406\u8bba\u4e0a\u53ef\u4ee5\u6839\u636e\u62bd\u8c61\u5c42\u7ea7\u4ea7\u751f\u90a3\u79cd\u591a\u5c42\u7684\u590d\u6742\u51fd\u6570\u5d4c\u5957\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5982\u679c\u67d0\u4e2a\u51fd\u6570\u7684\u4fee\u6539\u6d89\u53ca\u5230\u53c2\u6570\u53ca\u8fd4\u56de\u503c\u7c7b\u578b\u8fd9\u79cd\u7ed3\u6784\u6027\u7684\u4fee\u6539\uff0c\u5176\u5b9e\u201c\u7ec4\u5408\u201d\u672c\u8eab\u8fd8\u662f\u9700\u8981\u4fee\u6539\u7684\uff0c\u53ea\u662f\u76f8\u5bf9\u4e8eOOP\u800c\u8a00\uff0c\u5b83\u53ef\u80fd\u53ea\u4fee\u6539\u76f8\u5173\u7684\u51fd\u6570\u8c03\u7528\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u91cd\u65b0\u53bb\u4fee\u6539\u7ee7\u627f\u7ed3\u6784\u6216\u8005\u4fee\u6539\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u800c\u8a00\uff0c\u7ec4\u4ef6\u672c\u8eab\u5145\u5f53\u4e86\u4e1a\u52a1\u51fd\u6570\uff0c\u9ad8\u9636\u51fd\u6570\u88ab\u9690\u85cf\u5728\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u8c03\u5ea6\u4e2d\uff0c\u56e0\u6b64\u8fd9\u91cc\u4e0d\u5b58\u5728\u90a3\u79cd\u51fd\u6570\u8c03\u7528\u51fd\u6570\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u56e0\u6b64\u4e5f\u5373\u610f\u5473\u7740\u6211\u4eec\u65e0\u6cd5\u5b9e\u73b0\u591a\u5c42\u51fd\u6570\u5d4c\u5957\uff0c\u56e0\u4e3a\u603b\u5171\u5c31\u53ea\u6709\u4e24\u5c42\uff1a\u5e73\u53f0\u4e00\u5c42\uff08\u9ad8\u9636\u51fd\u6570\uff09\uff0c\u7ec4\u4ef6\u4e00\u5c42\u3002"),(0,n.kt)("h4",{id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"},"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("p",null,"\u5f53\u7136\u7ec4\u4ef6\u4e4b\u95f4\u662f\u5b58\u5728\u5173\u7cfb\u7684\uff0c\u8fd9\u79cd\u5173\u7cfb\u4f53\u73b0\u5728\u524d\u540e\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4e32\u8054\uff1a\u524d\u8005\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5728\u5728\u4e00\u4e2a\u53d8\u91cf\u4e2d\u4f5c\u4e3a\u540e\u4e00\u4e2a\u7ec4\u4ef6\u7684\u53c2\u6570\uff0c\u8fd9\u79cd\u5173\u7cfb\u8ddf\u591a\u4e2a\u51fd\u6570\u5d4c\u5957\u662f\u7c7b\u4f3c\u7684\uff1a\u4e00\u4e2a\u51fd\u6570\u88ab\u4f5c\u4e3a\u51fd\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u4e5f\u53ea\u662f\u5728\u90a3\u4e2a\u51fd\u6570\u4e2d\u53bb\u8ba1\u7b97\u4e00\u4e2a\u7279\u5b9a\u7684\u503c\uff0c\u8fd9\u4e2a\u51fd\u6570\u6700\u7ec8\u5b9e\u9645\u4f7f\u7528\u7684\u4e5f\u662f\u5b83\u8ba1\u7b97\u7684\u7ed3\u679c\uff0c\u81f3\u4e8e\u5b83\u52a8\u6001\u4f20\u7ed9\u5b83\u7684\u53c2\u6570\uff0c\u672c\u8eab\u5b58\u5728\u4e8eRealityIS\u7684\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u4e0a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\uff0c\u8ddfFP\u4e2d\u57fa\u4e8e\u51fd\u6570\u7684\u7ec4\u5408\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u867d\u7136\u7ec4\u4ef6\u4e4b\u4e2d\u770b\u8d77\u6765\u6709\u72b6\u6001\u53c2\u6570\uff0c\u4f46\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u5b9e\u73b0\u8ddfFP\u4e2d\u7684\u51fd\u6570\u662f\u4e00\u6837\u72ec\u7acb\u7684\uff0c\u8fd9\u4e9b\u53c2\u6570\u53ea\u662f\u7531\u4e1a\u52a1\u5c42\u4f20\u6765\u7684\u5b9e\u9645\u5904\u7406\u7684\u4e00\u4e2a\u6570\u636e\u800c\u5df2"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u5bf9\u4e8eFP\u800c\u8a00\uff0c\u4ed6\u5f88\u591a\u65f6\u5019\u4e5f\u9700\u8981\u53bb\u8bb0\u4f4f\u4e00\u4e9b\u72b6\u6001\uff0c\u7ec4\u4ef6\u7b80\u5316\u4e86\u8fd9\u79cd\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u7279\u522b\u7684\uff0c\u8fd9\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u8981\u6c42\u7528\u6237\u7406\u89e3\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u8fd9\u79cd\u903b\u8f91\u5173\u7cfb\u8fd8\u5305\u62ec\u51fd\u6570\u7684\u7b7e\u540d\u53ca\u51fd\u6570\u7b49\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u6d41\u7a0b")),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u662f\uff0c\u8fd9\u6837\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u592a\u5bb9\u6613\u4ece\u5168\u5c40\u628a\u63e1\u6e05\u695a\uff0c\u800c\u4e14\u6709\u53ef\u80fd\u6f0f\u6389\u4e00\u4e9b\u4e1c\u897f\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u597d\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fdb\u884c\u81ea\u52a8\u8f7d\u5165\u3002"),(0,n.kt)("h4",{id:"27102-machinations"},"2.7.10.2 Machinations"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u7531Machinations\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"2711-\u6a21\u5f0f\u5339\u914d"},"2.7.11 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u7684\u51e0\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u7ed1\u5b9a\uff0c\u7701\u7565\u53c2\u6570\u4f20\u9012\u7684\u8d4b\u503c\uff0c\u7ed1\u5b9a\u7b49\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u89e3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u6761\u4ef6\u8bed\u53e5"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8c03\u7528\u89e3\u8026")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u56e0\u7d20\u5728CreationScript\u4e2d\u672c\u8eab\u5c31\u4e0d\u662f\u95ee\u9898\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\uff0c\u56e0\u4e3a\u5728\u7ec4\u4ef6\u4e2d\u5f00\u53d1\u8005\u90fd\u6ca1\u6709\u673a\u4f1a\u53bb\u6784\u5efa\u7ed3\u6784\u548c\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u8fd8\u662f\u9700\u8981\u63d0\u4f9b\u3002\u4f46\u4e0d\u7528\u50cfFP\u90a3\u6837\u6210\u4e3a\u8bed\u8a00\u7684\u6838\u5fc3\u529f\u80fd\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c"},"enum ShapeType {Retangle, Circle, Square};\nstruct Shape {\n enum ShapeType kind;\n union {\n struct {int width, height; } retangleData;\n struct {int radius; } circleData;\n struct {int side; } squareData;\n } shapeData;\n};\n\ndouble area(struct Shape* s){\n if(s->kind == Rectangle) {\n int width, ht;\n width = s->ShapeData.rectangleData.width;\n ht = s->ShapeData.rectangleData.height;\n return width * ht;\n }\n else if(s->kind == Circle){\n ...\n }\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5C\u4ee3\u7801\u57fa\u672c\u4e0a\u5c31\u662f\u5bf9\u51fd\u6570\u7684\u53c2\u6570\u6267\u884c\u6a21\u5f0f\u5339\u914d\u64cd\u4f5c\uff0c\u4f46\u7a0b\u5e8f\u5458\u5fc5\u987b\u7f16\u5199\u6a21\u5f0f\u5339\u914d\u7684\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u5b83\u662f\u6b63\u786e\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5bf9\u5e94\u7684Erlang\u4ee3\u7801\u91cc\uff0c\u6211\u4eec\u53ea\u9700\u8981\u7f16\u5199\u6a21\u5f0f\uff0cErlang\u7f16\u8bd1\u5668\u5c31\u4f1a\u751f\u6210\u6700\u4f73\u7684\u6a21\u5f0f\u5339\u914d\u4ee3\u7801\uff0c\u7528\u5b83\u6765\u9009\u62e9\u6b63\u786e\u7684\u7a0b\u5e8f\u5165\u53e3\u70b9\u3002"),(0,n.kt)("h4",{id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"},"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u867d\u7136CreationScript\u5e76\u4e0d\u9700\u8981\u5411\u5f00\u53d1\u8005\u63d0\u4f9b\u6a21\u5f0f\u5339\u914d\u7684\u8bed\u6cd5\u548c\u80fd\u529b\uff0c\u4f46\u662fCreationScript\u672c\u8eab\u5219\u4f1a\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5b9a\u4e49\u7ec4\u4ef6\u53c2\u6570\u7684\u65f6\u5019\uff0c\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u89e3\u6784\u7279\u5b9a\u89e3\u6784\u7684\u5c5e\u6027\u5e26\u6765\u7684\u8026\u5408\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\n")),(0,n.kt)("p",null,"\u8fd9\u91ccPosition\u53ef\u80fd\u5bf9\u5185\u90e8\u7684\u5143\u7ec4\u4f7f\u7528\u4e0d\u540c\u7684\u5c5e\u6027\u540d\u5b57\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5f00\u53d1\u8005\u9700\u8981\u53bb\u4e86\u89e3\u8fd9\u4e2a\u540d\u5b57\uff0c\u8fdb\u800c\u7f16\u5199\u7684\u7ec4\u4ef6\u4ee3\u7801\u4e0e\u6574\u4e2a\u540d\u5b57\u8026\u5408\uff0c\u6240\u4ee5\u4e0d\u5229\u7528\u51fd\u6570\u91cd\u7528\uff0c\u4f8b\u5982\u5177\u6709\u76f8\u540c\u6570\u636e\u7c7b\u578b\u7ec4\u5408\u7684\u5143\u7ec4\u5c31\u4e0d\u80fd\u518d\u4f7f\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7ec4\u4ef6\u7684\u53c2\u6570\u5fc5\u987b\u4f7f\u7528\u5143\u7ec4\u7684\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u8ba9\u7ec4\u4ef6\u53ef\u4ee5\u7f16\u5199\u4e0e\u5177\u4f53\u7ed3\u6784\u65e0\u5173\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h4",{id:"27122-\u540d\u5b57\u5339\u914d"},"2.7.12.2 \u540d\u5b57\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u662f\u5339\u914d\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6982\u5ff5\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\uff0c\u5373\u7f16\u8bd1\u5668\u53ea\u662f\u5e2e\u52a9\u4f60\u505a\u4e00\u4e2a\u7c7b\u578b\u68c0\u67e5\uff0c\u53ef\u4ee5\u8fbe\u5230\u4e24\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u5b9a\u51fd\u6570\u8c03\u7528\u7684\u5408\u6cd5\u6027\uff0c\u4fdd\u8bc1\u6b63\u786e\u7684\u53c2\u6570\u53ca\u5176\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5e2e\u52a9\u8282\u7701\u4e00\u4e9b\u5197\u4f59\u4ee3\u7801\uff0c\u6bd4\u5982\u5982\u679c\u4e24\u4e2a\u6570\u636e\u7684\u6570\u636e\u7c7b\u578b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5219\u9700\u8981\u62c6\u5f00\u4e3a\u57fa\u672c\u7c7b\u578b\u518d\u8fdb\u884c\u9010\u4e2a\u6bd4\u8f83\uff0c\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801\u4e0d\u5149\u5305\u542b\u4ece\u6570\u636e\u7ed3\u6784\u4e2d\u8bfb\u53d6\u7279\u5b9a\u7684\u6570\u636e\u5b57\u6bb5\uff0c\u8fd8\u5305\u62ec\u5bf9\u63a5\u53d7\u51fd\u6570\u53c2\u6570\u53d8\u91cf\u7684\u8d4b\u503c\uff0c\u6a21\u5f0f\u5339\u914d\u907f\u514d\u4e86\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801")),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e2a\u5b8c\u6574\u7684\u51fd\u6570\u7684\u8c03\u7528\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6307\u5b9a\u51fd\u6570\u53c2\u6570\uff0c\u5bf9\u4e8e\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u8fd8\u9700\u8981\u4e86\u89e3\u7ed3\u6784\u540e\u9762\u7684\u6570\u636e\u5e03\u5c40\uff0c\u8fd9\u4e9b\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u90fd\u662f\u5f88\u7e41\u7410\u7684\u3002"),(0,n.kt)("p",null,"\u540d\u5b57\u5339\u914d\u662f\u6a21\u5f0f\u5339\u914d\u7684\u5347\u7ea7\u7248\u672c\uff0c\u5b83\u6709\u4e24\u70b9\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7b80\u5316\u4e86\u6570\u636e\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u5b83\u9f13\u52b1\u66f4\u6241\u5e73\u7684\u6570\u636e\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u9664\u4e86\u4fdd\u8bc1\u7ed3\u6784\u5339\u914d\uff0c\u8fd8\u9700\u8981\u4fdd\u8bc1\u540d\u5b57\u5339\u914d\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u907f\u514d\u7528\u6237\u8f93\u5165\u53c2\u6570\uff0c\u51fd\u6570\u8c03\u7528\u9000\u5316\u4e3a\u8bed\u4e49\u7ec4\u5408")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u8fd9\u6837\u505a\u9700\u8981\u7ed3\u5408\u6570\u636e\u5b9a\u4e49\u7684\u5171\u8bc6\uff0c\u5373\u6240\u6709\u7a0b\u5e8f\u9762\u5411\u516c\u5171\u6570\u636e\u7f16\u7a0b\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7528\u6237\u53ef\u4ee5\u624b\u5de5\u6307\u5b9a\u53c2\u6570\uff0c\u6b64\u65f6\u540d\u5b57\u5339\u914d\u9000\u5316\u4e3a\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("h3",{id:"2712-\u5206\u5e03\u5f0f"},"2.7.12 \u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5206\u5e03\u5f0f\u5185\u7f6e\u4e8e\u8bed\u8a00\u5185\uff0c\u5728CreationVM\u4e0a\u5b9e\u73b0\u5206\u5e03\u5f0f\u8c03\u5ea6\uff0c\u4ee5\u53caUDP\u8fdc\u7a0b\u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"distributed",src:l(3973).Z,width:"2544",height:"1384"})),(0,n.kt)("h4",{id:"27121-actor\u6a21\u578b"},"2.7.12.1 Actor\u6a21\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Actor\u6a21\u578b\u4e2d\uff0cActor\u4e4b\u95f4\u662f\u9ad8\u5ea6\u72ec\u7acb\u7684\uff0c\u5e76\u4e14\u8ba1\u7b97\u5b8c\u8fd4\u56de\u7ed3\u679c\u5c31\u53ef\u4ee5\uff0c\u7136\u800c\u6e38\u620f\u4e2d\u7684\u72b6\u6001\u662f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u7684\uff0c\u6240\u4ee5\u8fd9\u5bfc\u81f4\u5b83\u5e76\u4e0d\u80fd\u5355\u7eaf\u5730\u628aActor\u5f53\u6210\u4e00\u4e2a\u72ec\u7acb\u5bf9\u8c61\uff0c\u4ec5\u4ec5\u4f7f\u7528\u6d88\u606f\u901a\u4fe1\u662f\u4e0d\u591f\u7684\uff0c\u4e5f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u5728\u7ba1\u7406\u4e0a\uff0c\u4ed6\u9700\u8981\u7ef4\u62a4\u4e00\u4e2aActor\u5217\u8868\uff0c\u5e76\u4fdd\u8bc1\u5b83\u4eec\u6bcf\u4e00\u5e27\u90fd\u4f1a\u6309\u7167\u67d0\u79cd\u987a\u5e8f\u6267\u884c\uff0cActor\u4e4b\u95f4\u5305\u542b\u4f9d\u8d56\u5173\u7cfb\uff1b\u800c\u4e0d\u4ec5\u4ec5\u662f\u72ec\u7acb\u7ba1\u7406\u6bcf\u4e2aActor\u81ea\u8eab\u7684\u72b6\u6001\u3002"),(0,n.kt)("h3",{id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"},"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u6709\u591a\u4e2a\u53c2\u6570\uff0c\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\u7684\u503c\u53ef\u4ee5\u5e26\u5165\u51fd\u6570\uff0c\u4f46\u662f\u6b64\u65f6\u4e0d\u8ba1\u7b97\uff0c\u800c\u662f\u5f62\u6210\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u5305\u542b\u4e00\u90e8\u5206\u4e0a\u4e0b\u6587\uff0c\u4f46\u662f\u8fd9\u4e2a\u4e0a\u4e0b\u6587\u662f\u4e0d\u53d8\u7684\u3002\u7136\u540e\u5f53\u6211\u4eec\u628a\u5269\u4e0b\u7684\u53c2\u6570\u5e26\u5165\u51fd\u6570\uff0c\u8fdb\u884c\u6574\u4e2a\u51fd\u6570\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u6548\u679c\u5c31\u662f\u67ef\u91cc\u5316\u6216\u8005\u79f0\u4e3a\u90e8\u5206\u65bd\u7528\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\uff0cRealityIS\u7684\u6574\u4e2a\u7ec4\u4ef6\u8ba1\u7b97\u65b9\u5f0f\uff0c\u8ddf\u67ef\u91cc\u5316\u7684\u601d\u8def\u662f\u7c7b\u4f3c\u7684\u3002\u4e00\u90e8\u5206\u5c5e\u6027\u5148\u5e26\u5165\u65e9\u671f\u7684\u4e00\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\uff0c\u662f\u5728\u4e3a\u540e\u7eed\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6784\u9020\u4e0a\u4e0b\u6587\u3002\u53ea\u4e0d\u8fc7\u6574\u4e2a\u4e0a\u4e0b\u6587\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u7ba1\u7406\uff0c\u800c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u624b\u52a8\u7ba1\u7406\uff0c\u5e76\u8bb0\u4f4f\u90a3\u4e9b\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(5335).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u8fd9\u4e2a\u601d\u8def\u662fRealityIS\u53ef\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u7684\u7406\u8bba\u57fa\u7840\uff0c\u6b63\u662f\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u90a3\u79cd\u5d4c\u5957\u7684\u67ef\u91cc\u5316\u673a\u5236\u53ef\u4ee5\u8f6c\u53d8\u4e3a\u6241\u5e73\u7684\u7ec4\u5408\u7ed3\u6784\u3002\u4f46\u662f\u5176\u540e\u9762\u7684\u6838\u5fc3\u7406\u8bba\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5982\u679c\u53ef\u89c6\u5316\u5c55\u5f00\uff0cRealityIS\u7684\u7ec4\u5408\u4e5f\u5e94\u8be5\u662f\u5d4c\u5957\u7684\uff0c\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u7ed3\u679c\u662f\u4e00\u81f4\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd0\u884c\u65f6\u4ee5\u4e0d\u540c\u7684\u65b9\u5f0f\u53bb\u7ef4\u6301\u95ed\u5305\u91cc\u9762\u7684\u90a3\u4e9b\u53d8\u91cf\u3002"),(0,n.kt)("h4",{id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6"},"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8bc1\u660e\uff0c\u7406\u8bba\u4e0aRealityIS\u7684\u7ec4\u4ef6\u7ec4\u5408\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u662f\u7b49\u6548\u7684\uff0c\u90a3\u4e48\u4e3a\u4ec0\u4e48\u80fd\u5b9e\u73b0\u6241\u5e73\u7ec4\u5408\u5462\uff1f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fd9\u91cc\u7684\u6838\u5fc3\u79d8\u5bc6\u5728\u4e8e\uff0c\u6e38\u620f\u673a\u5236\u4e2d\u7ec4\u4ef6\u7684\u8de8\u5e27\u901a\u4fe1\u5c06\u8d4b\u503c\u8bed\u53e5\u89e3\u8026\u4e86\uff01")),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u6216\u8005\u51fd\u6570\u7f16\u7a0b\u4e2d\uff0c\u4e00\u4e2a\u51fd\u6570\u63a5\u53d7\u53e6\u4e00\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u8d4b\u503c\u7ed9\u4e00\u4e2a\u53d8\u91cf\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u5b58\u50a8\u8d77\u6765\uff0c\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u901a\u5e38\u6839\u636e\u51fd\u6570\u7684\u4f5c\u7528\u57df\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u6b63\u662f\u56e0\u4e3a\u8d4b\u503c\u8bed\u53e5\uff0c\u6240\u4ee5\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u53ea\u80fd\u5d4c\u5957\u8fdb\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u968f\u610f\u7ec4\u5408\u5230\u4e00\u8d77\u7531\u5b83\u4eec\u81ea\u7531\u53d1\u6325\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u610f\u7ec4\u5408\u8981\u60f3\u81ea\u52a8\u53d1\u6325\u4f5c\u4e3a\uff0c\u8fd8\u9700\u8981\u53c2\u6570\u4e0e\u51fd\u6570\u4e4b\u95f4\u81ea\u52a8\u5173\u8054\u548c\u5173\u7cfb\uff0c\u8fd9\u5c31\u662fRealityIS\u5728\u5b9a\u4e49\u53d8\u91cf\u7684\u65f6\u5019\u5c31\u7ea6\u675f\u597d\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u901a\u8fc7\u8de8\u5e27\u7684\u8d4b\u503c\uff0c\u51fd\u6570\u53c2\u6570\u5c31\u4e00\u4e0d\u7528\u8ddf\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u662f\u8026\u5408\u5728\u4e00\u8d77\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u72ec\u7acb\u5b58\u5728\u548c\u7ec4\u5408\uff0c\u518d\u52a0\u4e0a\u4e0a\u8ff0\u63cf\u8ff0\u7684\u51fd\u6570\u4e0e\u53d8\u91cf\u4e4b\u95f4\u7684\u81ea\u52a8\u5173\u7cfb\uff0c\u6240\u4ee5\u5c31\u80fd\u591f\u5b9e\u73b0\u5d4c\u5957\u51fd\u6570\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1RealityIS\u4e0d\u652f\u6301\u53d6\u81ea\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5b9e\u4f53\u5bf9\u8c61\u7684\u53c2\u6570\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u628a\u6765\u81eaA\u7684\u5f71\u54cd\u8ba1\u7b97\u7684\u51fd\u6570\u7ed3\u679c\u5b58\u50a8\u5728B\u4e2d\uff0c\u7136\u540e\u518d\u53d6B\u7684\u503c\u5728C\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u5176\u5b9e\u95f4\u63a5\u5c31\u662f\u4e00\u4e2a\u591a\u4e2a\u6df1\u5c42\u51fd\u6570\u5d4c\u5957\u7684\u7ed3\u679c\u3002\u66f4\u6df1\u5c42\u6b21\u7684\u5d4c\u5957\u53ef\u4ee5\u4e00\u6b21\u6765\u63a8\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u662f\u5b8c\u5168\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u53ea\u662f\u4e0a\u4e0b\u6587\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u8ba1\u7b97\u7ed3\u679c\u88ab\u8de8\u5e27\u7684\u5b9e\u4f53\u53d8\u91cf\u8fdb\u884c\u4fdd\u5b58\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u7b80\u5316\u4e86\u6574\u4e2a\u8ba1\u7b97\u67b6\u6784\uff0c\u540c\u65f6\u7b80\u5316\u4e86\u7528\u6237\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"},"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u901a\u8fc7\u5d4c\u5957\u6765\u5b9e\u73b0\u7ec4\u5408\u3002\u5c3d\u7ba1\u5355\u4e2a\u51fd\u6570\u7684\u529f\u80fd\u662f\u5c0f\u7c92\u5ea6\u7684\uff0c\u4f46\u662f\u5d4c\u5957\u7684\u51fd\u6570\u5219\u5f62\u6210\u4e86\u7279\u5316\uff0c\u5d4c\u5957\u7ec4\u5408\u540e\u7684\u51fd\u6570\u51e0\u4e4e\u90fd\u662f\u5177\u6709\u4e0d\u540c\u903b\u8f91\u7684\u51fd\u6570\uff0c\u56e0\u6b64\u51e0\u4e4e\u65e0\u6cd5\u8fdb\u884c\u5e76\u884c\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u56e0\u4e3a\u51fd\u6570\u7684\u53c2\u6570\u672c\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u4e00\u822c\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u51fd\u6570\u53ef\u80fd\u5177\u6709\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u5373\u4f7f\u6211\u4eec\u80fd\u591f\u628a\u6240\u6709\u5bf9\u8fd9\u4e9b\u51fd\u6570\u7684\u8c03\u7528\u6c47\u96c6\u8d77\u6765\uff0c\u4ecd\u7136\u4e0d\u80fd\u591f\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u63d0\u5347\u5e76\u884c\u6027\uff0c\u6211\u4eec\u9700\u8981\u628a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u7684\u673a\u5236\u8f6c\u6362\u4e3a\u4f20\u9012\u503c\u7684\u673a\u5236\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4f20\u9012\u7684\u53c2\u6570\u662f\u4e00\u4e2a\u503c\uff0c\u4f46\u662f\u56e0\u4e3a\u6bcf\u4e00\u4e2a\u5b9e\u9645\u8ba1\u7b97\u7684\u503c\u90fd\u7ecf\u8fc7\u4e86\u524d\u9762\u4e00\u8fde\u4e32\u7684\u51fd\u6570\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7ec4\u5408\u4ecd\u7136\u6ee1\u8db3\u4e00\u4e2a\u5d4c\u5957\u7684\u590d\u5408\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u800cRealityIS\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\uff0c\u901a\u8fc7\u6241\u5e73\u5316\uff0c\u4e0d\u4ec5\u4fdd\u7559\u4e86\u51fd\u6570\u5f0f\u7f16\u7a0b\u672c\u8eab\u7684\u7279\u8d28\uff0c\u800c\u4e14\u901a\u8fc7\u5c06\u6bcf\u4e2a\u51fd\u6570\u8c03\u7528\u90fd\u72ec\u7acb\u51fa\u6765\uff0c\u4f7f\u5f97\u76f8\u540c\u7684\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"},"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"),(0,n.kt)("p",null,"\u51fd\u6570\u5f0f\u7f16\u7a0b\uff08FP\uff09\u672c\u8eab\u7684\u6982\u5ff5\u6bd4\u8f83\u7b80\u5355\u4e86\uff0c\u5c31\u662f\u76f8\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\uff08OOP\uff09\uff0cFP\u7684\u51fd\u6570\u5185\u90e8\u6ca1\u6709\u72b6\u6001\uff0c\u5b8c\u5168\u4f9d\u8d56\u4e8e\u5916\u90e8\u8f93\u5165\uff0c\u6240\u4ee5\u4efb\u4f55\u8f93\u5165\u90fd\u6709\u552f\u4e00\u7684\u8f93\u51fa\uff0c\u8fd9\u79cd\u79f0\u4e3a\u6ca1\u6709\u526f\u4f5c\u7528\u7684\u65b9\u5f0f\uff0c\u5c31\u5f88\u5bb9\u6613\u5b9e\u73b0\u5e76\u53d1\uff0c\u4e5f\u5f88\u5bb9\u6613\u7ba1\u7406\u4ee3\u7801\u590d\u7528\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u539f\u7406")),(0,n.kt)("p",null,"\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u628a\u591a\u4e2a\u7ec4\u4ef6\u4ee5\u67d0\u79cd\u65b9\u5f0f\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u4e00\u822c\u6765\u8bf4\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5176\u5f62\u6210\u7684\u6574\u4f53\u4e5f\u662f\u4e00\u4e2a\u590d\u5408\u4f53\u3002\u5bf9\u4e8e\u590d\u5408\u64cd\u4f5c\u672c\u8eab\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u4e0d\u9700\u8981\u5904\u7406\u5404\u79cd\u590d\u6742\u7684\u53c2\u6570\uff0c\u56e0\u4e3a\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u7b80\u5355\u7684\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u51fd\u6570\u672c\u8eab\u5305\u542b\u6709\u6620\u5c04\u5173\u7cfb")),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u5e0c\u671b\u540e\u8005\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u5c01\u88c5\u673a\u5236\u4e0d\u592a\u5229\u4e8e\u7528\u6765\u4f5c\u4e3a\u4e00\u79cd\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u590d\u7528\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u590d\u5408\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u590d\u5408\u4f53\u662f\u5426\u5305\u542b\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u8be5\u590d\u5408\u4f53\u4ec5\u4ec5\u662f\u4e00\u4e2a\u529f\u80fd\u7ec4\u5408\u4f53")),(0,n.kt)("p",null,"\u5176\u4e2d\u524d\u8005\u5c31\u662f\u4f20\u7edf\u7684\u547d\u4ee4\u5f0f\u7f16\u7a0b\u6240\u4ee3\u8868\u7684\u65b9\u6cd5\uff0c\u5728OOP\u4e2d\uff0c\u65b9\u6cd5\u4e00\u822c\u662f\u9644\u7740\u4e8e\u67d0\u4e2a\u5bf9\u8c61\u7684\uff0c\u800c\u5bf9\u8c61\u4e00\u822c\u62e5\u6709\u79c1\u6709\u72b6\u6001\uff0c\u56e0\u6b64\u5373\u4f7f\u591a\u4e2a\u5bf9\u8c61\u4ee5\u67d0\u79cd\u65b9\u5f0f\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\uff0c\u5f53\u5728\u4f7f\u7528\u67d0\u4e2a\u8fd9\u6837\u7684\u590d\u5408\u4f53\u65f6\uff0c\u8c03\u7528\u8005\u5c31\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u4e0d\u540c\u7684\u53c2\u6570\u4e0b\u590d\u5408\u4f53\u4f1a\u8868\u73b0\u51fa\u4e0d\u540c\u7684\u529f\u80fd\u7ed3\u679c\u3002\u8fd9\u6837\u5c31\u4f7f\u5f97\u590d\u5408\u4f53\u4e0d\u5229\u4e8e\u4f7f\u7528\uff0c\u5c3d\u7ba1\u590d\u5408\u4f53\u672c\u8eab\u53ef\u4ee5\u5305\u542b\u4e00\u4e9b\u9ed8\u8ba4\u53c2\u6570\uff0c\u4f46\u662f\u8fd8\u662f\u9700\u8981\u5c0f\u5fc3\u7ef4\u62a4\u8fd9\u4e9b\u53c2\u6570\u624d\u80fd\u4fdd\u8bc1\u7ed3\u6784\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u5f88\u591a\u8f6f\u4ef6\u6216\u8005\u5e93\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u6709\u65f6\u5019\u54ea\u4e9b\u53c2\u6570\u5fd8\u6389\u4e86\u6216\u8005\u8bbe\u7f6e\u9519\u4e86\uff0c\u6574\u4e2a\u8f6f\u4ef6\u5c31\u53ef\u80fd\u51fa\u73b0\u4e0d\u53ef\u9884\u671f\u7684\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4f20\u7edf\u7684\u5b9e\u4f53\u7ecf\u6d4e\u4e2d\u7684\u5927\u90e8\u5206\u90e8\u4ef6\u662f\u4ee5\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4f8b\u5982\u6bcf\u4e2a\u673a\u5668\u90fd\u5e26\u6709\u5404\u79cd\u53c2\u6570\uff0c\u4f7f\u7528\u8005\u9700\u8981\u9996\u5148\u8bbe\u7f6e\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7136\u540e\u518d\u4e0b\u8fbe\u8fd0\u4f5c\u547d\u4ee4\u3002\u4f8b\u5982\u6d17\u8863\u673a\u7684\u547d\u4ee4\u53ef\u80fd\u5f88\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4ed6\u4e00\u4e9b\u5de5\u4e1a\u673a\u5668\u53ef\u80fd\u5219\u6bd4\u8f83\u590d\u6742\u3002\u8fd9\u662f\u56e0\u4e3a\u4e00\u53f0\u5b9e\u4f53\u7684\u673a\u5668\uff0c\u5b83\u6ca1\u6709\u529e\u6cd5\u63a5\u53d7\u4e00\u4e2a\u5916\u5728\u7684\u8f93\u5165\u8bbe\u7f6e\uff0c\u4e3b\u8981\u7684\u8f93\u5165\u65b9\u6cd5\u662f\u624b\u5de5\u64cd\u4f5c\uff0c\u5927\u90e8\u5206\u673a\u5668\u5e76\u4e0d\u5141\u8bb8\u63d2\u5165\u4e00\u4e2a\u5916\u63a5\u4fe1\u53f7\u6e90\u4ee5\u53ef\u7f16\u7a0b\u7684\u65b9\u5f0f\u8bbe\u7f6e\u53c2\u6570\u3002\u7136\u800c\u5728\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e2d\u6211\u4eec\u4f7f\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u72b6\u6001\u5168\u90e8\u8c03\u6574\u4e3a\u590d\u5408\u4f53\u7684\u53c2\u6570\uff0c\u8ba9\u590d\u5408\u4f53\u672c\u8eab\u4e0d\u5e26\u4efb\u4f55\u72b6\u6001\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u56e0\u4e3a\u4e00\u65e6\u590d\u5408\u4f53\u7684\u4f7f\u7528\u5305\u542b\u624b\u5de5\u8bbe\u7f6e\u53c2\u6570\u7684\u6d41\u7a0b\uff0c\u5e76\u4e14\u8fd9\u4e9b\u8bbe\u7f6e\u7684\u4f4d\u7f6e\u548c\u683c\u5f0f\u8fd8\u591a\u79cd\u591a\u6837\uff0c\u4f7f\u7528\u8005\u5c31\u65e0\u6cd5\u505a\u5230\u81ea\u52a8\u5316\uff0c\u5e76\u4e14\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u5229\u4e8e\u666e\u901a\u7528\u6237\u4f7f\u7528"),"\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u6700\u6838\u5fc3\u7684\u90e8\u5206\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u4e0d\u80fd\u4ee5\u5e26\u6709\u72b6\u6001\u7684\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u590d\u5408"),"\uff0c\u8fd9\u4e5f\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u6a21\u5f0f\u4e2d\u590d\u5408\u673a\u5236\u7684\u7279\u5f81\uff0c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e2d\u4ee5\u5bf9\u8c61\u5bf9\u5355\u4f4d\uff0c\u5bf9\u8c61\u662f\u7b2c\u4e00\u7b49\u516c\u6c11\uff0c\u51fd\u6570\u662f\u5bf9\u8c61\u7684\u7ec4\u6210\u90e8\u5206\uff0c\u6240\u4ee5\u5bf9\u8c61\u672c\u8eab\u5c31\u5f88\u5bb9\u6613\u5305\u542b\u72b6\u6001\uff0c\u4ee5\u81f3\u4e8e\u5f88\u96be\u5f62\u6210\u4e00\u79cd\u5f88\u597d\u7684\u590d\u5408\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u6bd4\u4ee5\u51fd\u6570\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\u8981\u7b80\u5355\u7684\u591a\uff0c\u51fd\u6570\u7684\u7c92\u5ea6\u8fd8\u662f\u6bd4\u8f83\u7ec6\u3002\u6240\u4ee5\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u4e00\u4e2a\u5bf9\u8c61\u5373\u662f\u4e00\u4e2a\u590d\u5408\u4f53\uff0c\u5bf9\u8c61\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u72b6\u6001\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u5176\u5b9e\u5c31\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684\u4e00\u4e2a\u590d\u5408\u51fd\u6570\u7684\u6241\u5e73\u5f62\u5f0f\u3002\u6b64\u5916\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5e76\u4e0d\u662f\u5355\u7eaf\u4e00\u5806\u51fd\u6570\u7684\u7ec4\u5408\uff0c\u8fd9\u4e9b\u51fd\u6570\u4e4b\u95f4\u5fc5\u987b\u662f\u6709\u76f8\u4e92\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bf9\u8c61\u539f\u5219\u4e0a\u53ea\u4ee3\u8868\u4e00\u4e2a\u590d\u5408\u51fd\u6570\uff0c\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u5185\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u590d\u5408\u51fd\u6570\u662f\u5b64\u7acb\u7684\uff0c\u5219\u4ed6\u4eec\u5e94\u8be5\u8868\u793a\u4e3a\u4e0d\u540c\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u673a\u5236")),(0,n.kt)("p",null,"\u5173\u4e8eFP\u7684\u590d\u5408\uff0c\u4ed6\u5176\u5b9e\u548c\u6570\u5b66\u4e2d\u7684\u590d\u5408\u51fd\u6570\u6982\u5ff5\u662f\u7c7b\u4f3c\u7684\uff0c\u5c31\u662f\u4e00\u4e2a\u5d4c\u5957\u7684\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4106).Z,width:"538",height:"36"})),(0,n.kt)("p",null,"FP\u5b9e\u73b0\u590d\u5408\u7684\u673a\u5236\u5c31\u662f\u5c06\u51fd\u6570\u672c\u8eab\u770b\u4f5c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u53c2\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u76f8\u5f53\u4e8e\u53e6\u4e00\u4e2a\u51fd\u6570\u4e2d\u67d0\u4e2a\u672a\u77e5\u53d8\u91cf\u662f\u7531\u8fd9\u4e2a\u4f5c\u4e3a\u53c2\u6570\u7684\u51fd\u6570\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u8fd9\u6837\u5f62\u6210\u7684\u7ed3\u679c\u51e0\u4e4e\u5c31\u8ddf\u590d\u5408\u51fd\u6570\u662f\u4e00\u6837\u7684\u6548\u679c\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u770b\u590d\u5408\u51fd\u6570\uff0c\u5b83\u662f\u6709\u7ed3\u6784\u7684\uff0c\u4e0d\u662f\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4f60\u9700\u8981\u7406\u89e3\u51e0\u4e2a\u51fd\u6570\u590d\u5408\u4e4b\u540e\u7684\u90a3\u4e2a\u7ed3\u679c\u7684\u7ed3\u6784\u624d\u80fd\u5f88\u597d\u5730\u590d\u5408\uff0c\u4f8b\u5982\u4f60\u6362\u4e00\u4e2a\u51fd\u6570\u590d\u5408\u4ee5\u540e\u8868\u73b0\u51fa\u7684\u7279\u5f81\u53ef\u80fd\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u3002\u56e0\u6b64\u8fd9\u79cd\u590d\u5408\u65b9\u5f0f\u53ea\u9002\u5408\u7a0b\u5e8f\u5458\uff0c\u4e0d\u80fd\u628a\u8fd9\u79cd\u65b9\u5f0f\u4e22\u7ed9\u666e\u901a\u7528\u6237\uff0c\u666e\u901a\u7528\u6237\u9700\u8981\u4e00\u79cd\u66f4\u6241\u5e73\u7684\uff0c\u4e0d\u9700\u8981\u4e86\u89e3\u90a3\u4e48\u591a\u7ed3\u6784\u7684\u7ec4\u5408\u65b9\u5f0f\uff1a\u591a\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u662f\u591a\u4e00\u4e2a\u529f\u80fd\uff0c\u4f46\u4ed6\u4e0d\u4f1a\u8bf4\u8ba9\u884c\u4e3a\u7ed3\u679c\u5b8c\u5168\u53d8\u4e86\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2714-serverless"},"2.7.14 Serverless"),(0,n.kt)("p",null,"\u4ece\u6982\u5ff5\u4e0a\u8bb2\uff0cCreationScript\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u5c31\u662f\u4e00\u79cd\u771f\u6b63\u7684Serverless\u670d\u52a1\uff1a\u5373\u5f00\u53d1\u8005\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u51fd\u6570\uff0c\u5e73\u53f0\u81ea\u52a8\u5b9e\u73b0\u4f38\u7f29\u548c\u5e76\u53d1\uff0c\u5f00\u53d1\u8005\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u670d\u52a1\u5668\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"Serverless\u662f\u4e00\u79cd\u7406\u5ff5\uff0c\u73b0\u6709\u4e91\u5382\u5546\u6709\u4e00\u79cd\u5b9e\u73b0\uff0c\u4f46\u8fd9\u79cd\u5b9e\u73b0\u5e76\u4e0d\u662fSeverless\u7684\u7ec8\u6781\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u4e91\u5382\u5546\u63d0\u4f9b\u7684Serverless\uff0c\u4ed6\u4eec\u5176\u5b9e\u8fd8\u53ea\u662f\u5c06\u8ba1\u7b97\u6258\u7ba1\u7b80\u5316\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u6574\u4e2a\u7a0b\u5e8f\uff0c\u8fd9\u6837\u4fbf\u4e8e\u4f38\u7f29\uff0c\u800c\u4e91\u5382\u5546\u5b9e\u73b0\u7684\u4f38\u7f29\u4e5f\u6bd4\u8f83\u7b80\u5355\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u51fd\u6570\u672c\u8eab\u662f\u4e0e\u5176\u4ed6\u4e1a\u52a1\u6ca1\u6709\u8026\u5408\u7684\uff0c\u6240\u4ee5\u4ed6\u4eec\u628a\u51fd\u6570\u548c\u6570\u636e\u590d\u5236\u5230\u5176\u4ed6\u670d\u52a1\u5668\u6267\u884c\u5c31\u597d\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u8fd9\u91cc\u9762\u6709\u5f88\u5927\u7684\u9650\u5236\uff0c\u4ed6\u53ea\u9650\u4e8e\u51e0\u4e4e\u5b8c\u5168\u72ec\u7acb\u7684\u51fd\u6570\uff0c\u65e0\u6cd5\u590d\u7528\u72b6\u6001\uff08\u6e38\u620f\u6bcf\u4e00\u5e27\u90fd\u8981\u8ba1\u7b97\uff0c\u9700\u8981\u7ef4\u6301\u4e00\u4e9b\u72b6\u6001\uff09\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0Streaming\u7b49\u7b49\u4e00\u4e9b\u7279\u6027\uff0c\u5bf9\u5b9e\u65f6\u6027\u652f\u6301\u4e5f\u6bd4\u8f83\u5dee\uff0c\u51fd\u6570\u5b58\u6d3b\u7684\u65f6\u95f4\u4e5f\u4e0d\u597d\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4ed6\u4eec\u53ea\u662f\u5355\u7eaf\u6267\u884c\u4e00\u4e2a\u51fd\u6570\uff0c\u5e76\u6ca1\u6709\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u800c\u5b8c\u5168\u8981\u4f9d\u8d56\u4e8e\u5f00\u53d1\u8005\u81ea\u8eab\u53bb\u8003\u8651\u600e\u6837\u62c6\u5206\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u7684CreationScript\uff0c\u4ed6\u662f\u7ed3\u5408\u81ea\u5df1\u7684\u6570\u636e\u7279\u5f81\u548c\u6e38\u620f\u8fd0\u884c\u673a\u5236\uff0c\u5b9e\u73b0\u7684\u4e00\u5957\u5e76\u53d1\u63a7\u5236\u8bed\u8a00\uff0c\u5b83\u901a\u8fc7\u865a\u62df\u673a\u4e0e\u7ec4\u4ef6\uff08\u4e00\u4e2a\u51fd\u6570\uff09\u7684\u914d\u5408\u6765\u5b9e\u73b0\u4e00\u4e9b\u5982\u72b6\u6001\u6301\u4e45\u5171\u4eab\uff0cStreaming\uff0c\u5e76\u53d1\u5206\u53d1\uff0c\u51fd\u6570\u4e4b\u95f4\u7684\u901a\u4fe1\u7b49\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5982\u679c\u6ca1\u6709\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u5b9a\u5236\u662f\u5f88\u96be\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u51fd\u6570/\u7ec4\u4ef6\u8ddf\u8bed\u8a00\u3001\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u7ed3\u5408\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u7ec4\u4ef6\u4e4b\u95f4\u600e\u4e48\u53bb\u7ec4\u7ec7\u903b\u8f91\u7684\u4e8b\u60c5\uff0c\u5e73\u53f0\u4f1a\u81ea\u52a8\u628a\u8fd9\u4e9b\u7ec4\u4ef6\u51fd\u6570\u5206\u914d\u5230Serverless\u7684\u67b6\u6784\u4e2d\u53bb\uff0c\u8fd9\u5c31\u662f\u6211\u4eec\u5b9a\u4e49\u7684\u4e0d\u540c\u7684\u66f4\u597d\u7684Serverless\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u5f3a\u8c03RealityIS\u662f\u4e00\u4e2a\u5927\u578b\u7684\u52a8\u6001\u7a0b\u5e8f\u7684\u539f\u56e0\uff0c\u91cc\u9762\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u90fd\u662f\u4e00\u4e2a\u5f88\u5c0f\u7684\u903b\u8f91\uff0c\u90fd\u53ef\u4ee5\u88ab\u72ec\u7acb\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u4e5f\u662f\u4f4e\u8026\u5408\u7684\uff0c\u6240\u4ee5\u6211\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u5730\u63a7\u5236\u4ed6\u4eec\uff0c\u6839\u636e\u9700\u8981\u53ea\u52a0\u8f7d\u4f1a\u7528\u5230\u7684\u90a3\u4e00\u90e8\u5206\u7a0b\u5e8f\uff0c\u4e5f\u53ef\u4ee5\u6839\u636e\u670d\u52a1\u5668\u8d1f\u8f7d\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u5e76\u4e0d\u4ec5\u4ec5\u662f\u6309\u51fd\u6570\u628a\u4ed6\u4eec\u62c6\u51fa\u6765\u800c\u5df2\uff0c\u51fd\u6570\u4e4b\u95f4\u8fd8\u662f\u6709\u5173\u7cfb\u7684\uff0c\u5e76\u4e0d\u662f\u5b8c\u5168\u72ec\u7acb\u7684\uff0c\u8fd9\u79cd\u8c03\u7528\u5173\u7cfb\u8981\u9760RealityIS\u8fd0\u884c\u65f6\u865a\u62df\u673a\u6765\u652f\u6301\uff0c\u8fd9\u662f\u6700\u5173\u952e\u7684\u90e8\u5206\uff0c\u5426\u5219\u4ed6\u5c31\u53ea\u662f\u4e00\u4e2a\u73b0\u5728\u7684\u4e91\u5382\u5546\u7c7b\u4f3c\u7684Serverless\u670d\u52a1\u800c\u5df2\u3002"),(0,n.kt)("h3",{id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5"},"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u90a3\u4e9b\u52a8\u753b\u3001\u6e32\u67d3\u3001\u7269\u7406\u6a21\u62df\u7b49\u89c6\u89c9\u56e0\u7d20\u4e4b\u540e\uff0c\u6e38\u620f\u80cc\u540e\u7684\u673a\u5236\u53ef\u4ee5\u62bd\u8c61\u4e3a\u4e00\u5957\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5176\u4e2d\u6240\u6709\u7684\u884c\u4e3a\u90fd\u62bd\u8c61\u4e3a\u8d44\u6e90\uff0c\u8fd9\u5957\u673a\u5236\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u5404\u79cd\u5404\u6837\u7684\u8d44\u6e90\u968f\u7740\u73a9\u5bb6\u7684\u4ecb\u5165\u8fdb\u884c\u600e\u6837\u7684\u6d41\u52a8\uff0c\u4f8b\u5982\u73a9\u5bb6\u7528\u91d1\u5e01\u8d2d\u4e70\u9053\u5177\uff0c\u7528\u4e0d\u540c\u7684\u9053\u5177\u7ec4\u5408\u5f62\u6210\u65b0\u7684\u9053\u5177\uff0c\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u8bf4\u662f\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u800cMachinations \u53ef\u4ee5\u6a21\u62df\u8fd9\u5957\u6d41\u52a8\u7684\u673a\u5236\uff0c\u5b83\u662f\u4e00\u5957\u8bed\u8a00\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u6a21\u62df\u6240\u6709\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d41\u52a8\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u7684\u4ef7\u503c\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e38\u620f\u673a\u5236\u7684\u6570\u503c\u5e73\u8861\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u5feb\u901f\u6d4b\u8bd5\u8fd9\u5957\u673a\u5236\u7684\u5408\u7406\u6027\uff0c\u8fdb\u800c\u8c03\u6574\u6570\u503c\uff0c\u5426\u5219\u4e0d\u5408\u7406\u7684\u673a\u5236\u76f4\u63a5\u5c31\u5bfc\u81f4\u73a9\u5bb6\u6d41\u5931\uff0c\u8fd9\u8ddf\u5e94\u7528\u7a0b\u5e8f\u4e0d\u592a\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6211\u4eec\u7684\u53ef\u7ec4\u5408\u6027\u8db3\u591f\u597d\uff0c\u6211\u4eec\u662f\u53ef\u4ee5\u5728\u8fd9\u5957\u7cfb\u7edf\u548c\u7a0b\u5e8f\u4e4b\u95f4\u81ea\u52a8\u8f6c\u6362\u7684\uff0c\u8fd9\u6837\u5c31\u8fdb\u4e00\u6b65\u964d\u4f4e\u95e8\u69db\uff0c\u8bbe\u8ba1\u5e08\u662f\u7528\u66f4\u7b26\u5408\u903b\u8f91\u7684\u89c6\u89c9\u65b9\u5f0f\u53bb\u8bbe\u8ba1\u6e38\u620f\uff0c\u800c\u4e0d\u662f\u53bb\u601d\u8003\u4ee3\u7801\u7ed3\u6784\uff0c\u8fd9\u4e2a\u5176\u5b9e\u662f\u6211\u4eec\u7ec4\u5408\u7ec4\u4ef6\u8fdb\u884c\u521b\u4f5c\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u5b83\u4f1a\u6210\u4e3a\u6211\u4eec\u9762\u5411\u7ec4\u5408\u7684\u201c\u5f00\u53d1\u6216\u8005\u8bbe\u8ba1\u8bed\u8a00\u201d")),(0,n.kt)("p",null,"\u5c06\u6765\u6211\u4eec\u7b2c\u4e00\u5bb6\u8981\u6536\u8d2d\u7684\u516c\u53f8\u5c31\u662fMachinations \uff0c\u5f53\u7136\u5982\u679c\u4e0d\u80fd\u6536\u8d2d\uff0c\u6211\u4eec\u81ea\u5df1\u4e5f\u4f1a\u505a\u4e00\u5957\u7c7b\u4f3c\u601d\u8def\u7684\u5de5\u5177\u3002"),(0,n.kt)("h3",{id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6570\u636e\u901a\u5e38\u5b58\u5728\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u6570\u636e\u6700\u7ec8\u662f\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u901a\u4fe1\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u77e5\u9053\u6570\u636e\u4ece\u54ea\u91cc\u6765\uff0c\u600e\u6837\u88ab\u5b9a\u4e49\uff0c\u600e\u6837\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9\u51fd\u6570\uff0c\u56e0\u6b64\uff0c\u6574\u4e2a\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u51e0\u4e4e\u603b\u5728\u5173\u6ce8\u5bf9\u8c61\uff0c\u56e0\u4e3a\u5bf9\u8c61\u662f\u6570\u636e\u7684\u5c01\u88c5\u5b9e\u4f53\u3002\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5f62\u6210\u6570\u636e\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5305\u542b\u4e86\u592a\u591a\u989d\u5916\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u901a\u5e38\u662f\u8ddf\u5177\u4f53\u95ee\u9898\u8026\u5408\u7684\uff0c\u56e0\u4e3a\u5bf9\u8c61\u7684\u7ed3\u6784\u901a\u5e38\u5c31\u662f\u8fd9\u4e9b\u95ee\u9898\u7684\u6620\u5c04"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u7684\u5b9e\u73b0\u672c\u8eab\u6ca1\u6709\u7edf\u4e00\u6807\u51c6")),(0,n.kt)("p",null,"\u56e0\u6b64\u4e0d\u4ec5\u4f7f\u7528\u7684\u4eba\u9700\u8981\u53bb\u7406\u89e3\u548c\u5173\u6ce8\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\uff0c\u5f00\u53d1\u7684\u4eba\u4e5f\u5bb9\u6613\u5c06\u4e00\u4e9b\u7c7b\u578b\u4fe1\u606f\u8026\u5408\u5230\u51fd\u6570\u65b9\u6cd5\u4e2d\u3002\u8fd9\u4e9b\u90fd\u662f\u989d\u5916\u7684\u8d1f\u62c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u6765\u5206\u6790\u4e00\u4e9b\u4e0d\u540c\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"},"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u65b9\u6cd5\u7684\u8bbe\u8ba1\u4e0d\u7528\u5e26\u5e26\u5165\u592a\u591a\u81ea\u5b9a\u4e49\u7c7b\u578b\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u5f53\u6211\u4eec\u5728\u8bbe\u8ba1\u4e00\u4e2a\u65b9\u6cd5\u7684\u65f6\u5019\uff0c\u8111\u888b\u4e2d\u5e94\u8be5\u60f3\u5230\u7684\u662f\u5b83\u5e94\u8be5\u662f\u4e00\u4e2a\u901a\u7528\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u9488\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u5bf9\u8c61\u8bbe\u8ba1\u7684\u65b9\u6cd5\u3002\u6240\u4ee5\u6211\u4eec\u7b2c\u4e00\u4ef6\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u786e\u4fdd\u65b9\u6cd5\u7684\u53c2\u6570\u4e2d\u6ca1\u6709\u4efb\u4f55\u7279\u5b9a\u7684\u81ea\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u9664\u975e\u8fd9\u79cd\u7ed3\u6784\u662f\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3001\u7406\u89e3\u548c\u8ba4\u53ef\u3001\u5e76\u4e14\u4e0d\u4f1a\u9891\u7e41\u6539\u52a8\u7684\u5171\u8bc6\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u60c5\u51b5\u8fd9\u4e9b\u7279\u6b8a\u7684\u6570\u636e\u7c7b\u578b\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u7c7b\u4f3c\u57fa\u672c\u7c7b\u578b\u7684\u5730\u4f4d\u3002\u4ed6\u53ef\u80fd\u5e94\u7528\u4e8e\u67d0\u4e2a\u9886\u57df\u6216\u8005\u4e00\u4e2a\u884c\u4e1a\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e3a\u4e86\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u800c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7c7b\u578b\u90fd\u662f\u5927\u5bb6\u5df2\u77e5\u7684\u201c\u57fa\u672c\u7c7b\u578b\u201d\uff0c\u6211\u4eec\u5728\u4f20\u9012\u53c2\u6570\u7684\u65f6\u5019\u5c31\u4e0d\u518d\u9700\u8981\u5b9a\u4e49\u56fa\u5b9a\u7684\u8c03\u7528\u8005\u53ca\u5904\u7406\u8c03\u7528\u5173\u7cfb\uff0c\u4efb\u4f55\u53ea\u8981\u5177\u6709\u8fd9\u4e9b\u53c2\u6570\u7684\u4e0a\u4e0b\u6587\u5747\u53ef\u4ee5\u968f\u610f\u53d1\u8d77\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"},"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u65b9\u6cd5\u7684\u53c2\u6570\u7c7b\u578b\u5b8c\u5168\u4e0d\u7528\u81ea\u5b9a\u4e49\u7c7b\u578b\uff0c\u6bd4\u5982\u59822.7.17\u8282\u7684\u63cf\u8ff0\u6240\u793a\uff0c\u62e5\u6709\u591a\u4e2a\u51fd\u6570\u53c2\u6570\u5728RealityIS\u4e2d\u662f\u4e0d\u53ef\u63a7\u7684\uff0c\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5c06\u4e00\u4e9b\u6570\u636e\u8fdb\u884c\u805a\u5408\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u53c2\u6570\u53ea\u80fd\u88ab\u5b58\u653e\u5728\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u51fd\u6570\u7684\u53c2\u6570\u4f7f\u7528\u4e86\u7ed3\u6784\u4f53\uff0c\u5e76\u4e14\u8fd9\u79cd\u7ed3\u6784\u4f53\u5185\u7684\u53d8\u91cf\u5141\u8bb8\u4f7f\u7528\u4e0d\u540c\u7684\u540d\u5b57\uff0c\u90a3\u4e48\u8fd9\u6837\u5c31\u4f1a\u662f\u51fd\u6570\u7684\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u7279\u5b9a\u89e3\u6784\u53d1\u751f\u8026\u5408\uff0c\u4e3a\u6b64\uff0cRealityIS\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u53c2\u89c12.7.12.1\u8282\u3002"),(0,n.kt)("h4",{id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"},"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e9b\u65b9\u6cd5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u67b6\u6784\u6765\u907f\u514d\u4e00\u4e9b\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u7684\u95ee\u9898\uff0c\u6e38\u620f\u4e2d\u8457\u540d\u7684\u6570\u636e\u9a71\u52a8\u67b6\u6784\u662fECS\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7c7b\u65b9\u6cd5\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u8f83\u5f31\uff0c\u5f88\u96be\u6bd4\u8f83\u76f4\u89c2\u5730\u770b\u51fa\u6570\u636e\u4e0e\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u800c\u5bf9\u4e8eRealityIS\u6765\u5c06\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u6570\u636e\u4e0e\u51fd\u6570\u7684\u5173\u7cfb\u6765\u63a8\u5bfc\u5f88\u591a\u4e8b\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u9700\u8981\u5f00\u53d1\u8005\u5c0f\u5fc3\u5730\u7ef4\u62a4\uff0c\u4f8b\u5982\u4f60\u53ef\u80fd\u7ed9\u5b9e\u4f53\u5bf9\u8c61\u6dfb\u52a0\u4e86Component\uff0c\u4f46\u662f\u4f60\u53ef\u80fd\u5fd8\u4e86\u5728System\u6dfb\u52a0\u76f8\u5e94\u7684filter\uff1b\u4f60\u53ef\u80fd\u6b63\u786e\u5730\u5904\u7406\u597d\u4e86System\uff0c\u4f46\u662f\u53ef\u80fd\u5fd8\u4e86\u7ed9\u6b63\u786e\u7684Entity\u6dfb\u52a0\u5bf9\u5e94\u7684Component\u3002\u56e0\u4e3a\u8fd9\u4e24\u8005\u662f\u5206\u79bb\u7684\uff0c\u5f88\u96be\u7ef4\u62a4\u3002")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cECS\u4e2dSystem\u5b9e\u9645\u4e0a\u8026\u5408\u4e86Component\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u6240\u4ee5Component\u7684\u4fee\u6539\u5fc5\u7136\u6d89\u53ca\u5230System\u7684\u4fee\u6539\u3002"),(0,n.kt)("h4",{id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4691).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("h4",{id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"},"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h4",{id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"},"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u5e26\u6765\u7684\u53e6\u4e00\u4e2a\u53d8\u5316\u662f\uff0cRealityIS\u7684\u5bf9\u8c61\u662f\u7531\u7528\u6237\u5b9a\u4e49\u7684\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u3002\u7528\u6237\u5b9a\u4e49\u7684\u6570\u636e\u53ef\u4ee5\u5f62\u6210\u4efb\u610f\u7684\u5206\u5e03\uff0c\u8fd9\u4e5f\u4e3a\u7a0b\u5e8f\u8fdb\u4e00\u6b65\u5e26\u6765\u4e86\u590d\u6742\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf"},"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf"),(0,n.kt)("p",null,"\u4e0a\u4e00\u8282\u7684\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5b83\u5b9e\u9645\u4e0a\u5047\u8bbe\uff0c\u51fd\u6570\u7684\u53c2\u6570\u53ef\u80fd\u4f1a\u6765\u81ea\u4efb\u610f\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u8fd9\u4ece\u7f16\u7a0b\u672c\u8eab\u7684\u6982\u5ff5\u770b\u662f\u6ca1\u95ee\u9898\u7684\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u5f15\u5165\u7531\u8fd0\u884c\u65f6\u7ba1\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u66f4\u591a\u662f\u901a\u8fc7\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u7ec4\u5408\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7684\u5bf9\u8c61\u8fdb\u884c\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6307\u5b9a\u5bf9\u8c61\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u7a0b\u5e8f\u5199\u6b7b\uff0c\u8fd9\u6837\u5c31\u65e0\u6cd5\u52a8\u6001\u9002\u5e94\u53d8\u5316\u7684\u573a\u666f"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u5fc5\u987b\u901a\u8fc7\u7528\u6237\u624b\u52a8\u6307\u5b9a\u51fd\u6570\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,"\u8fd9\u4e24\u8005\u90fd\u4f1a\u5bfc\u81f4\u53ef\u4f38\u7f29\u6027\u548c\u6613\u7528\u6027\u95ee\u9898\u3002\u56e0\u6b64RealityIS\u9009\u62e9\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u81ea\u52a8\u5339\u914d\uff0c\u4f46\u8fd9\u5e26\u6765\u591a\u5c42\u5faa\u73af\u7684\u95ee\u9898\u3002\u4f8b\u5982\u5982\u4e0b\u7684\u573a\u666f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6240\u6709\u53d8\u91cf\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6574\u4e2a\u7ec4\u4ef6\u5c31\u662f\u6267\u884c\u4e00\u6b21\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6709\u4e00\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5219\u9700\u8981\u589e\u52a0\u4e00\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u53e6\u59162\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u5916\u4e24\u4e2a\u5bf9\u8c61\uff0c\u5c31\u9700\u89812\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u7c7b\u63a8\u3002\u3002\u3002")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4691).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\u5e26\u6765\u4e86\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u65e0\u6cd5\u9884\u77e5\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u60c5\u51b5\u4f1a\u662f\u600e\u6837\uff0c\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u6765\u81ea\u4efb\u610f\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u5bf9\u8c61\u5b8c\u5168\u662f\u7531\u7528\u6237\u6765\u7ec4\u7ec7\u7684\u3002\u4e3a\u4e86\u5e94\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u4f5c\u4e3a\u4e24\u4e2a\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u4f7f\u7528\u4e862\u4e2a\u4ee5\u4e0a\u7684\u53c2\u6570\uff0c\u6211\u4eec\u9ed8\u8ba4\u8ba4\u4e3a\u5f00\u53d1\u8005\u662f\u5e0c\u671b\u6240\u6709\u8fd9\u4e9b\u53c2\u6570\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ea\u8981\u7b5b\u9009\u51fa\u540c\u65f6\u5177\u6709\u6240\u6709\u5c5e\u6027\u7684\u5bf9\u8c61\u5373\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u5982\u679c\u7528\u6237\u6307\u5b9a\u4e86\u5916\u90e8\u53d8\u91cf\uff0c\u90a3\u4e48\u4e00\u4e2a\u51fd\u6570\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2a\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u4e3a\u591a\u91cd\u5d4c\u5957\u7684\u5faa\u73af\u4f1a\u5e26\u6765\u590d\u6742\u6027")),(0,n.kt)("h4",{id:"27171-\u5355\u53c2\u6570\u51fd\u6570"},"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570"),(0,n.kt)("p",null,"\u9650\u5236\u5355\u53c2\u6570\u51fd\u6570\uff0c\u7406\u8bba\u4e0a\u4e0d\u4f1a\u5bf9\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\u5e26\u6765\u9650\u5236\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u57fa\u7840\u7684\u64cd\u4f5c\u7b26\u90fd\u662f\u4e8c\u5143\u751a\u81f3\u4e00\u5143\u64cd\u4f5c\u7b26\uff0c\u5176\u4ed6\u7684\u64cd\u4f5c\u7b26\u90fd\u53ef\u4ee5\u8f6c\u6362\u4e3a\u4e8c\u5143\u64cd\u4f5c\u7b26\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"AST",src:l(4542).Z,width:"960",height:"514"})),(0,n.kt)("p",null,"\u4f46\u662f\u62c6\u6563\u6210\u4e8c\u5143\u64cd\u4f5c\u786e\u5b9e\u4f1a\u5e26\u6765\u4e00\u5b9a\u590d\u6742\u6027\uff0c\u8fd9\u4e9b\u590d\u6742\u6027\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e0b\u51e0\u4e2a\u65b9\u9762\u8fdb\u884c\u7f13\u89e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f8\u5173\u5c5e\u6027\u5c3d\u91cf\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\uff0c\u8fd9\u6837\u5c31\u4fdd\u8bc1\u5b83\u4eec\u59cb\u7ec8\u5b58\u5728\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u6240\u4ee5\u5176\u5b9e\u5c3d\u7ba1\u6700\u7ec8\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u662f\u4e8c\u5143\u7684\uff0c\u4f46\u662f\u5185\u90e8\u7684\u5f88\u591a\u903b\u8f91\u8fd8\u662f\u4e0d\u53d7\u9650\u5236\u7684\uff0c\u8fd9\u6837\u7684\u5173\u7cfb\u5b9e\u9645\u4e0a\u7c7b\u4f3c\u4e8e\u4ea4\u4e92\u7684\u5bf9\u8c61\u662f\u4e24\u4e2a\uff0c\u8fd9\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e5f\u662f\u6bd4\u8f83\u5ba2\u89c2\u7684\uff0c\u4ea4\u6613\u7684\u5bf9\u8c61\u4e4b\u95f4\u901a\u5e38\u90fd\u662f\u4e24\u4e2a\u4eba\uff0c\u591a\u8fb9\u534f\u8bae\u7684\u673a\u5236\u662f\u6bd4\u8f83\u5c11\u7684\uff0c\u591a\u8fb9\u7684\u673a\u5236\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5404\u79cd\u5bfb\u627e\u4e00\u4e2a\u4ee3\u7406\u51fa\u6765\u4ea4\u6613\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u5185\u90e8\u53d8\u91cf\u8fdb\u884c\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f52\u5e76\u7684\u4e8b\u60c5\u7531\u7ec4\u4ef6\u5f00\u53d1\u8005\u6765\u9690\u85cf\u3002\u7ec4\u4ef6\u5f00\u53d1\u8005\u901a\u8fc7\u4e00\u4e9b\u5185\u90e8\u79c1\u6709\u53d8\u91cf\u6765\u9690\u85cf\u5927\u91cf\u5f52\u5e76\u7684\u7ec6\u8282\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u770b\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u6574\u4f53\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("h3",{id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b"},"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bb9\u6613\u5bfc\u81f4\u5e76\u53d1\uff0c\u56e0\u6b64RealityIS\u4e3b\u8981\u662f\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u4f46\u662f\u4e0e\u5176\u4ed6\u5b8c\u5168\u901a\u8fc7\u6d88\u606f\u901a\u8fc7\u7684\u673a\u5236\u4e0d\u540c\uff0cRealityIS\u80fd\u591f\u5b9e\u73b0\u539f\u751f\u7684\u53c2\u6570\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4e4b\u5e26\u6765\u7684\u95ee\u9898\u662f\u539f\u5b50\u6027\uff0c\u6bd4\u5982\u5728Erlang\u5355\u4e2a\u8fdb\u7a0b\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\uff0c\u4f46\u662fRealityIS\u7684\u5355\u4e2a\u8fdb\u7a0b\u53ea\u662f\u6267\u884c\u4e0a\u72ec\u7acb\uff0c\u4f46\u662f\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u5b58\u5728\u8f83\u5f3a\u7684\u5173\u8054\u3002\u8fd9\u65b9\u9762\u4e3b\u8981\u901a\u8fc7\u5b58\u6863\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"},"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"),(0,n.kt)("p",null,"\u786c\u4ef6\u67b6\u6784\u672c\u8eab\u5e76\u6ca1\u6709\u9650\u5236\u548c\u5b9a\u4e49\u4e00\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u600e\u6837\u7ec4\u7ec7\uff0c\u5b83\u8ddf\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u662f\u5206\u79bb\u7684\uff0c\u786c\u4ef6\u53ea\u9700\u8981\u77e5\u9053\u6211\u81ea\u6267\u884c\u67d0\u4e2a\u6307\u4ee4\u7684\u65f6\u5019\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u4ee5\u53ca\u5c06\u6570\u636e\uff08\u8ba1\u7b97\u7ed3\u679c\u6216\u4e2d\u95f4\u53d8\u91cf\uff09\u5199\u56de\u5230\u54ea\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u7a0b\u5e8f\u4ee3\u7801\u6587\u4ef6\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e86\u4e00\u5b9a\u7684\u5b9a\u4e49\uff0c\u6bd4\u5982\u52a0\u8f7d\u5e76\u6267\u884c\u5305\u542b\u673a\u5668\u7801\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002\u7f16\u8bd1\u5668\u5e94\u8be5\u5c06\u7a0b\u5e8f\u4ee3\u7801\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6216\u591a\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5728\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e2d\uff0c\u7a0b\u5e8f\u88ab\u7ec4\u7ec7\u4e3a\u4e00\u4e9b\u65b9\u6cd5\u6784\u6210\u7684\u4ee3\u7801\u5757\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u5757\u751f\u6210\u5730\u5740\uff0c\u5e76\u5c06\u5730\u5740\u6620\u5c04\u5230\u7a0b\u5e8f\u4e2d\u7684\u7b26\u53f7\u5bf9\u5e94\u7684\u5730\u5740\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u4e5f\u6ca1\u6709\u5bf9\u7a0b\u5e8f\u6e90\u4ee3\u7801\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e00\u5b9a\u7684\u7ea6\u675f\uff0c\u4f8b\u5982\u7a0b\u5e8f\u4e2d\u5bf9\u4efb\u4f55\u4ee3\u7801\u5757\u6216\u8005\u53d8\u91cf\u7684\u5730\u5740\u6620\u5c04\u8fd8\u662f\u7531\u7f16\u8bd1\u5668\u51b3\u5b9a\u7684\u3002\u800c\u8fd9\u4e9b\u4ee3\u7801\u5757\u672c\u8eab\u662f\u600e\u4e48\u751f\u6210\u7684\uff0c\u4f8b\u5982\u662f\u7531OOP\u4e2d\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u8fd8\u662f\u7531\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u6241\u5e73\u4e0e\u6570\u636e\u72b6\u6001\u72ec\u7acb\u7684\u7ec4\u7ec7\u5173\u7cfb\uff0c\u8fd9\u4e9b\u90fd\u6ca1\u6709\u4efb\u4f55\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u548c\u7f16\u8bd1\u7406\u8bba\u4e0a\u53ef\u4ee5\u662f\u4efb\u610f\u7684\uff0c\u9762\u5411\u5bf9\u8c61\u6216\u8005\u51fd\u6570\u5f0f\u7f16\u7a0b\u90fd\u53ea\u662f\u5176\u4e2d\u4e00\u79cd\u7279\u6b8a\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7406\u8bba\u4e0a\uff0c\u6784\u5efa\u4e00\u79cd\u6781\u5ea6\u52a8\u6001\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u662f\u53ef\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u7a0b\u5e8f\u7684\u7f16\u8bd1\u8fc7\u7a0b\uff0c\u65e9\u671f\u7684\u7f16\u7a0b\u8bed\u8a00\u5927\u591a\u662f\u9759\u6001\u7684\uff0c\u5373\u4e00\u65e6\u7f16\u8bd1\u5b8c\u6210\u4e4b\u540e\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u90fd\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u4e8c\u8fdb\u5236\u673a\u5668\u7801\u3002\u5982\u679c\u9700\u8981\u5bf9\u4ee3\u7801\u8fdb\u884c\u4fee\u6539\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u8fdb\u884c\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7a0b\u5e8f\u4ecd\u7136\u5177\u6709\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f8b\u5982\u4f60\u53ef\u4ee5\u58f0\u660e\u4e00\u4e2a\u6267\u884c\u67d0\u4e2a\u65b9\u6cd5\u7684\u5730\u5740\u6307\u9488\uff0c\u5982\u679c\u4f60\u77e5\u9053\u81ea\u5df1\u7a0b\u5e8f\u4e2d\u6709\u591a\u4e2a\u65b9\u6cd5\u5305\u542b\u76f8\u540c\u7684\u7b7e\u540d\uff0c\u90a3\u4e48\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u65b9\u6cd5\u7684\u5185\u5b58\u5730\u5740\u8d4b\u503c\u7ed9\u4e00\u4e2a\u76f8\u540c\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u7a0b\u5e8f\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u5730\u5bf9\u4e0d\u540c\u7684\u65b9\u6cd5\u8fdb\u884c\u8c03\u7528\u3002\u4e0e\u4e4b\u7c7b\u4f3c\uff0c\u4e00\u4e2a\u6307\u9488\u4e5f\u53ef\u4ee5\u6267\u884c\u591a\u4e2a\u5177\u6709\u76f8\u540c\u7c7b\u578b\u5b9a\u4e49\u7684\u5bf9\u8c61\uff0c\u8fd0\u884c\u65f6\u5bf9\u8fd9\u4e9b\u51fd\u6570\u5bf9\u8c61\u7684\u52a8\u6001\u65b9\u6cd5\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u8fd9\u6837\u7684\u52a8\u6001\u80fd\u529b\u662f\u975e\u5e38\u6709\u9650\u7684\uff0c\u672c\u8d28\u4e0a\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u5b9a\u4e49\u662f\u56fa\u5b9a\u7684\uff0c\u7a0b\u5e8f\u53ea\u662f\u5728\u67d0\u4e9b\u4ee3\u7801\u5757\u6267\u884c\u7684\u5148\u540e\u987a\u5e8f\u4e0a\u80fd\u591f\u8fdb\u884c\u4e00\u5b9a\u7684\u81ea\u7531\u7ec4\u5408\u800c\u5df2\u3002"),(0,n.kt)("h4",{id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027"},"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u968f\u7740\u4e92\u64cd\u4f5c\u3001\u53ef\u6269\u5c55\u6027\u7b49\u9700\u6c42\u8d8a\u6765\u8d8a\u5927\uff0c\u4ee5\u53ca\u90e8\u7f72\u5230\u7528\u6237\u73af\u5883\u7684\u6210\u672c\u3002\u6211\u4eec\u8d8a\u6765\u8d8a\u9700\u8981\u7a0b\u5e8f\u5177\u6709\u66f4\u5f3a\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u5df2\u6709\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u7528\u4e8e\u5b9e\u73b0\u4e00\u4e9b\u52a8\u6001\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5bf9\u4e8e\u672a\u6765\u800c\u8a00\uff0c\u6700\u91cd\u8981\u7684\u52a8\u6001\u6027\u5728\u4e8e\uff0c\u7531\u4e8e\u6240\u6709\u5b50\u7a0b\u5e8f\u672c\u8d28\u4e0a\u5904\u4e8e\u4e00\u4e2a\u5171\u540c\u7684\u5185\u5b58\u73af\u5883\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u65b9\u5f0f\u4f1a\u53d1\u751f\u6839\u672c\u6027\u7684\u53d8\u5316\uff0c\u8fd9\u4e9b\u53d8\u5316\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4ee3\u7801\u672c\u8eab\u975e\u5e38\u5de8\u5927\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u7f16\u8bd1\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u603b\u7684\u7a0b\u5e8f\u6570\u91cf\u5de8\u5927\uff0c\u56e0\u6b64\u5b83\u4e0d\u53ef\u80fd\u5168\u90e8\u52a0\u8f7d\u5230\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5fc5\u987b\u8981\u8fdb\u884c\u6309\u9700\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u610f\u5473\u7740\u9700\u8981\u5206\u6790\u7528\u6237\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u52a8\u6001\u5730\u51b3\u5b9a\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u4ee3\u7801\u7ec4\u7ec7\u610f\u5473\u7740\uff0c\u4f20\u7edf\u7a0b\u5e8f\u4e2d\u90a3\u4e9b\u7c7b\u578b\u67e5\u8be2\u3001\u5185\u5b58\u5730\u5740\u8ba1\u7b97\u90fd\u8981\u52a8\u6001\u8ba1\u7b97")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u9700\u6c42\u4e0e\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u662f\u5929\u751f\u4e0d\u517c\u5bb9\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u8981\u5f00\u53d1\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"RealityIS.005",src:l(4986).Z,width:"1920",height:"1080"})),(0,n.kt)("h4",{id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"},"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"),(0,n.kt)("p",null,"\u52a8\u6001\u6027\u662f\u6307\u4e00\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u4e0d\u5fc5\u6309\u7167\u5b8c\u5168\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u6267\u884c\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u52a8\u6001\u6027\u5f80\u5f80\u610f\u5473\u7740\u80fd\u591f\u5bf9\u5df2\u7ecf\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u6269\u5c55\u6216\u8005\u66f4\u65b0\u3002\u524d\u9762\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5bf9\u4e8e\u9759\u6001\u8bed\u8a00\u800c\u8a00\uff0c\u5b83\u4e5f\u5b58\u5728\u7740\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u8fd9\u53ef\u4ee5\u79f0\u4e3a\u903b\u8f91\u4e0a\u7684\u52a8\u6001\u6027\uff0c\u5373\u6240\u6709\u903b\u8f91\u662f\u56fa\u5b9a\u7f16\u8bd1\u597d\u7684\uff0c\u53ea\u662f\u7a0b\u5e8f\u6839\u636e\u8fd0\u884c\u65f6\u73af\u5883\u52a8\u6001\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e00\u822c\u90fd\u662f\u57fa\u4e8e\u6307\u9488\u6765\u5b9e\u73b0\u7684\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u7c7b\u578b")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u52a8\u6001\u6027\u4e25\u683c\u6765\u8bf4\u5bf9\u7a0b\u5e8f\u7684\u53ef\u6269\u5c55\u80fd\u529b\u5e76\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u9664\u975e\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5df2\u7ecf\u5305\u542b\u6240\u6709\u53ef\u80fd\u7684\u529f\u80fd\uff0c\u4f46\u663e\u7136\u90a3\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u56e0\u6b64\u6211\u4eec\u66f4\u5e38\u671f\u5f85\u7684\u52a8\u6001\u6027\uff0c\u66f4\u591a\u662f\u6307\u6269\u5c55\u52a8\u6001\u6027\uff0c\u5373\u80fd\u591f\u52a8\u6001\u52a0\u5165\u4e00\u4e9b\u4e4b\u524d\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4e0d\u5177\u5907\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6269\u5c55\u52a8\u6001\u6027\u5305\u62ec\u53ef\u4ee5\u901a\u8fc7\u5f88\u591a\u65b9\u5f0f\u8fdb\u884c\u5b9e\u73b0\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u7684\u7a0b\u5e8f\u5e93\uff0c\u53ef\u4ee5\u901a\u8fc7\u94fe\u63a5\u8fc7\u7a0b\u52a8\u6001\u52a0\u8f7d\u7b2c\u4e09\u65b9\u9759\u6001\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u79cd\u4e00\u822c\u901a\u8fc7\u865a\u62df\u673a\u5bf9\u52a8\u6001\u7684\u51fd\u6570\u548c\u7c7b\u578b\u8fdb\u884c\u89e3\u91ca")),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u9759\u6001\u7a0b\u5e8f\u5e93\uff0c\u5b83\u672c\u8d28\u4e0a\u662f\u5229\u7528\u524d\u9762\u7684\u903b\u8f91\u52a8\u6001\u6027\u80fd\u529b\u6765\u5b9e\u73b0\u7684\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u5e93\u4e2d\u53ef\u80fd\u5305\u62ec\u65b0\u7684\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\uff0c\u4f46\u662f\u5b83\u4eec\u5747\u5df2\u7ecf\u7f16\u8bd1\u4e3a\u9759\u6001\u7684\u673a\u5668\u7801\uff0c\u5373\u81ea\u8eab\u5df2\u7ecf\u5305\u542b\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u673a\u5236\uff0c\u4f8b\u5982\u5bf9\u8fd9\u4e9b\u7c7b\u578b\u8fdb\u884c\u89e3\u6790\u4ee5\u8ba1\u7b97\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u800c\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5219\u4e0d\u540c\uff0c\u7531\u4e8e\u5176\u4e2d\u6d89\u53ca\u7684\u65b0\u7684\u6570\u636e\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\u6ca1\u6709\u8fb9\u7f16\u8bd1\u4e3a\u9759\u6001\u673a\u5668\u7801\uff0c\u6240\u4ee5\u8fd9\u4e9b\u811a\u672c\u8bed\u8a00\u9700\u8981\u88ab\u4e00\u79cd\u79f0\u4e3a\u865a\u62df\u673a\u7684\u7a0b\u5e8f\u8fdb\u884c\u52a8\u6001\u7684\u89e3\u91ca\uff0c\u8fd9\u4e2a\u89e3\u91ca\u7684\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u52a8\u6001\u5730\u6a21\u62df\u7f16\u8bd1\u7684\u8fc7\u7a0b\uff0c\u5bf9\u7c7b\u578b\u7684\u7ed3\u6784\u8fdb\u884c\u67e5\u8be2\u4ee5\u8ba1\u7b97\u5730\u5740\u3002\u4f46\u7531\u4e8e\u8fd9\u4e9b\u5b9a\u4e49\u7684\u51fd\u6570\u5e76\u6ca1\u6709\u88ab\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u52a8\u6001\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6267\u884c\u8fc7\u7a0b\u5e76\u4e0d\u80fd\u591f\u5f88\u597d\u7684\u5229\u7528\u5230\u786c\u4ef6\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u4f8b\u5982\u6307\u4ee4\u7684\u9884\u53d6\uff0c\u5206\u652f\u9884\u6d4b\u7b49\u7b49\u3002\u56e0\u6b64\u52a8\u6001\u811a\u672c\u8bed\u8a00\u7684\u6027\u80fd\u901a\u5e38\u6bd4\u673a\u5668\u7801\u8981\u4f4e\u5f97\u591a\u3002"),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u8fd9\u4e9b\u52a8\u6001\u7684\u80fd\u529b\uff0c\u52a0\u4e0a\u5408\u9002\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u53ef\u4ee5\u8bbe\u8ba1\u51fa\u5177\u6709\u6bd4\u8f83\u597d\u6269\u5c55\u6027\u7684\u7a0b\u5e8f\u3002\u51e0\u4e2a\u4f8b\u5b50\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f20\u7edf\u6e38\u620f\u5f15\u64ce\u4e2d\u7684\u63d2\u4ef6\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982Lua\u811a\u672c\u8bed\u8a00\u53ef\u4ee5\u589e\u52a0\u65b0\u7684\u903b\u8f91\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u5728Erlang\u4e2d\uff0c\u7531\u4e8e\u6bcf\u4e2a\u8fdb\u7a0b\u542f\u52a8\u65f6\u59cb\u7ec8\u52a0\u8f7d\u6700\u65b0\u7684\u811a\u672c\u4ee3\u7801\uff0c\u56e0\u6b64\u53ef\u4ee5\u5b9e\u73b0\u52a8\u6001\u66f4\u65b0\u3002\u6ce8\u610f\u8fd9\u79cd\u673a\u5236\u4e0eLua\u76f8\u6bd4\u5b58\u5728\u672c\u8d28\u67b6\u6784\u4e0a\u7684\u533a\u522b\uff0cLua\u7684\u70ed\u52a0\u8f7d\u53ea\u662f\u4e00\u79cd\u8bed\u8a00\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd9\u4e2a\u52a0\u8f7d\u7684\u8fc7\u7a0b\u6216\u8005\u8bf4\u67b6\u6784\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u6784\u5efa\u3002\u4e0d\u540c\u7684\u5e94\u7528\u5f80\u5f80\u4f1a\u8bbe\u8ba1\u51fa\u4e0d\u540c\u7684\u70ed\u66f4\u65b0\u673a\u5236\u3002\u800cErlang\u662f\u4e00\u79cd\u5185\u5efa\u4e8e\u8bed\u8a00\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u5c06\u5bf9\u5e94\u76ee\u5f55\u4e0b\u7684\u4ee3\u7801\u66f4\u65b0\uff0cErlang\u4f1a\u81ea\u884c\u52a0\u8f7d\uff0c\u66f4\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u505a\u989d\u5916\u7684\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u6df1\u5165\u601d\u8003\u52a8\u6001\u6027\u7684\u672c\u8d28\uff0c\u6216\u8005\u8bf4\u7406\u89e3\u5b83\u8981\u89e3\u51b3\u7684\u6838\u5fc3\u95ee\u9898\uff0c\u5927\u6982\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u52a8\u66f4\u65b0")),(0,n.kt)("p",null,"\u53bb\u8026\u5408\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u673a\u5236\u672c\u8eab\u770b\u5f85\u52a8\u6001\u6027\uff0c\u8bed\u8a00\u5c42\u9762\u7684\u52a8\u6001\u6027\u5927\u591a\u6d89\u53ca\u67d0\u79cd\u89e3\u8026\u7684\u64cd\u4f5c\uff0c\u4f7f\u8fd0\u884c\u65f6\u53ef\u4ee5\u52a8\u6001\u66ff\u6362\u4e00\u4e9b\u65b9\u6cd5\u6216\u8005\u8bf4\u89e3\u6790\u67d0\u4e9b\u65b0\u7684\u7c7b\u578b\u3002\u53ef\u6269\u5c55\u6027\u662f\u4ece\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u8005\u7684\u89d2\u5ea6\u770b\u5f85\u52a8\u6001\u6027\uff0c\u5b83\u5f80\u5f80\u662f\u8fd0\u7528\u524d\u9762\u8bed\u8a00\u63d0\u4f9b\u7684\u89e3\u8026\u673a\u5236\u6765\u5b9e\u73b0\u7684\u67d0\u79cd\u67b6\u6784\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"dynamic",src:l(216).Z,width:"2022",height:"400"})),(0,n.kt)("p",null,"\u800c\u81ea\u52a8\u66f4\u65b0\u662f\u9488\u5bf9\u7528\u6237\u800c\u8a00\u7684\uff0c\u5b83\u5177\u6709\u6700\u9ad8\u7684\u8981\u6c42\u3002\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u53d7\u9650\u4e8e\u7f16\u7a0b\u8bed\u8a00\u7684\u67b6\u6784\uff0c\u5f53\u7a0b\u5e8f\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u7528\u6237\u4e0d\u5f97\u4e0d\u91cd\u65b0\u5b89\u88c5\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\u867d\u7136\u50cf\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u4f1a\u4f7f\u7528\u5982Lua\u8fd9\u6837\u7684\u52a8\u6001\u811a\u672c\u8bed\u8a00\u6765\u5b9e\u73b0\u67d0\u4e9b\u7a0b\u5ea6\u7684\u70ed\u66f4\u65b0\uff0c\u4f46\u662f\u5927\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u8fd8\u662f\u9700\u8981\u91cd\u65b0\u4e0b\u8f7d\u548c\u5b89\u88c5\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u73b0\u5728\u5982App Store\u7b49\u4f7f\u7528\u4e00\u79cd\u81ea\u52a8\u66f4\u65b0\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u8fdb\u884c\u5e94\u7528\u66f4\u65b0\uff0c\u770b\u8d77\u6765\u5b9e\u73b0\u4e86\u5e94\u7528\u7684\u81ea\u52a8\u66f4\u65b0\uff0c\u56e0\u4e3a\u5bf9\u7528\u6237\u57fa\u672c\u4e0a\u6ca1\u6709\u9020\u6210\u4ec0\u4e48\u56f0\u6270\u3002\u4f46\u662f\u8fd9\u4e2a\u95ee\u9898\u5176\u5b9e\u672c\u8d28\u4e0a\u8fd8\u4e0d\u662f\u7528\u6237\u5c42\u9762\u7684\u95ee\u9898\uff0c\u5b83\u662f\u7531\u7528\u6237\u9700\u6c42\u63a8\u751f\u51fa\u7684\u5f00\u53d1\u8005\u7684\u95ee\u9898\u3002\u5c3d\u7ba1\u5bf9\u6574\u4e2a\u6b63\u5e38\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u91cd\u65b0\u53d1\u5e03\u6574\u4e2a\u7a0b\u5e8f\u4e0d\u4f1a\u5bf9\u7528\u6237\u9020\u6210\u56f0\u6270\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u5728\u4e24\u4e2a\u65b9\u9762\u505a\u7684\u66f4\u597d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u80fd\u5426\u503c\u4fee\u6539\u90e8\u5206\u4ee3\u7801\uff0c\u7136\u540e\u4e0d\u9700\u8981\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c31\u53ef\u4ee5\u6700\u7b80\u5355\u5730\u53d1\u5e03\u66f4\u65b0\u3002\u5f53\u7136\u8fd9\u91cc\u8bf4\u7684\u662f\u5b8c\u6574\u529f\u80fd\u7684\u4fee\u6539\uff0c\u800c\u4e0d\u662f\u5982Lua\u90a3\u6837\u7684\u6269\u5c55\u4fee\u6539\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u7684\u73af\u5883\uff0c\u600e\u6837\u8ba9\u76f8\u4e92\u5f15\u7528\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u6267\u884c\u66f4\u597d\u5730\u534f\u4f5c\u66f4\u65b0")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\uff0c\u5f53\u524d\u7684\u8bed\u8a00\u673a\u5236\u51e0\u4e4e\u662f\u505a\u4e0d\u5230\u7684\uff0c\u8fd9\u9700\u8981\u5bf9\u8bed\u8a00\u548c\u7f16\u8bd1\u8fc7\u7a0b\u8fdb\u884c\u91cd\u6784\u3002"),(0,n.kt)("h4",{id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"},"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u901a\u8fc7\u4e0a\u8ff0\u7684\u4e00\u4e9b\u673a\u5236\uff0c\u73b0\u4ee3\u7684\u8ba1\u7b97\u67b6\u6784\u4e5f\u80fd\u591f\u5b9e\u73b0\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f46\u57fa\u672c\u4e0a\u73b0\u5728\u7684\u52a8\u6001\u6027\u67b6\u6784\u672c\u8d28\u4e0a\u4e0d\u662f\u4e3a\u4e86\u771f\u6b63\u7684\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u800c\u8bbe\u8ba1\u7684\uff0c\u5b83\u4eec\u66f4\u591a\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u7684\u89d2\u5ea6\u53bb\u8bbe\u8ba1\uff0c\u53ea\u662f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b9\u4fbf\u5f00\u53d1\u8005\u8fdb\u884c\u4e00\u5b9a\u9650\u5ea6\u6269\u5c55\u7684\u673a\u5236\u3002\u4f8b\u5982\u65b0\u7684\u811a\u672c\u4e0d\u80fd\u4efb\u610f\u8bbf\u95ee\u4e4b\u524d\u5185\u5b58\u6570\u636e\uff0c\u5f80\u5f80\u90fd\u662f\u9884\u7559\u56fa\u5b9a\u7684\u63a5\u53e3\u3002\u8fd9\u4f7f\u5f97\u65b0\u7684\u811a\u672c\u57fa\u672c\u4e0a\u53ea\u80fd\u7528\u6765\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u6269\u5c55\u65b0\u529f\u80fd\uff0c\u5e76\u4e14\u8fd9\u4e9b\u65b0\u529f\u80fd\u5bf9\u4e4b\u524d\u7684\u4ee3\u7801\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u3002"),(0,n.kt)("h4",{id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"},"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"),(0,n.kt)("p",null,"\u5982\u679c\u6240\u6709\u7684\u5b50\u7a0b\u5e8f\u5728\u540c\u4e00\u4e2a\u201c\u5185\u5b58\u201d\u6216\u8005\u6267\u884c\u73af\u5883\u8fd0\u884c\uff0c\u4f7f\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u8d85\u7ea7\u5de8\u5927\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u542b\u5343\u5343\u4e07\u4e07\u751a\u81f3\u4e0a\u4ebf\u7ea7\u7684\u4ee3\u7801\u6587\u4ef6\u3002\u90a3\u4e48\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7528\u6237\u800c\u8a00\uff0cTA\u6240\u9700\u8981\u8fd0\u884c\u5b9e\u9645\u8ba1\u7b97\u7684\u201c\u7a0b\u5e8f\u201d\u53ea\u80fd\u662f\u8fd9\u4e9b\u6240\u6709\u7a0b\u5e8f\u4e2d\u7684\u5f88\u5c0f\u4e00\u90e8\u5206\u3002\u540c\u6837\u5f88\u663e\u7136\u7684\u662f\uff0c\u8fd9\u4e2a\u7528\u6237\u201c\u7a0b\u5e8f\u201d\u5fc5\u7136\u662f\u52a8\u6001\u751f\u6210\u7684\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u52a8\u6001\u7ec4\u5408\u67d0\u4e2a\u7528\u6237\u5b9a\u4e49\u7684\u201c\u7a0b\u5e8f\u201d\uff0c\u5c31\u6210\u4e3a\u52a8\u6001\u6027\u7684\u6700\u5927\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u52a8\u6001\u7ec4\u5408\u7a0b\u5e8f\uff0c\u4e0d\u50cf\u60f3\u8c61\u4e2d\u90a3\u4e48\u7b80\u5355\uff0c\u6bd4\u5982\u8bf4\u6bcf\u4e2a\u4ee3\u7801\u6587\u4ef6\u8bbe\u7f6e\u4e00\u4e2aID\uff0c\u7136\u540e\u5efa\u7acb\u4e00\u4e2a\u7528\u6237\u7a0b\u5e8f\u6570\u636e\u5e93\u3002\u56e0\u4e3a\u7a0b\u5e8f\u4ee3\u7801\u603b\u662f\u5173\u8054\u7740\u7c7b\u578b\uff0c\u7c7b\u578b\u548c\u65b9\u6cd5\u5f15\u7528\u5f80\u5f80\u6765\u81ea\u5176\u4ed6\u6587\u4ef6\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7ed3\u6784\u672c\u8eab\u662f\u4e00\u4e2a\u53ca\u5176\u9519\u7efc\u590d\u6742\u7684\u7cfb\u7edf\uff0c\u6839\u672c\u4e0d\u53ef\u80fd\u901a\u8fc7\u6587\u4ef6\u7ea7\u522b\u8fdb\u884c\u5212\u5206\u548c\u7ec4\u5408\u3002\u800c\u5982\u679c\u8981\u901a\u8fc7\u4f20\u7edf\u7684\u7f16\u8bd1\u89e3\u91ca\u673a\u5236\uff1a\u5373\u901a\u8fc7\u9996\u5148\u6784\u5efa\u6240\u6709\u7c7b\u578b\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u901a\u8fc7\u7b26\u53f7\u8868\u67e5\u8be2\u548c\u8ba1\u7b97\u5730\u5740\u7a7a\u95f4\uff0c\u8fd9\u5c31\u51e0\u4e4e\u7b49\u4e8e\u6bcf\u4e00\u6b21\u8fd0\u884c\u7528\u6237\u7a0b\u5e8f\u5c31\u9700\u8981\u52a0\u8f7d\u89e3\u6790\u51e0\u4e4e\u6240\u6709\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5e94\u5bf9\u548c\u7ba1\u7406\u8fd9\u79cd\u65b0\u7684\u9700\u6c42\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\u65b9\u5f0f\u9700\u8981\u53d1\u751f\u5f88\u5927\u7684\u53d8\u5316\u3002\u8fc7\u53bb\u7684\u601d\u7ef4\u662f\u6211\u4eec\u4e0d\u8003\u8651\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u53ea\u9700\u8981\u8003\u8651\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u7c7b\u578b\u5f15\u7528\u5b89\u5168\uff0c\u7136\u540e\u4f9d\u9760\u7f16\u8bd1\u5668\u6765\u5bf9\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u4ee3\u7801\u8c03\u7528\u987a\u5e8f\u8fdb\u884c\u7ba1\u7406\u548c\u7ec4\u7ec7\u3002\u800c\u73b0\u5728\u6211\u4eec\u9700\u8981\u5728\u4e0d\u5f15\u5165\u6240\u6709\u4ee3\u7801\u7684\u60c5\u51b5\u4e0b\u63d0\u524d\u8ba1\u7b97\u6309\u9700\u52a0\u8f7d\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u8fd9\u5c31\u9700\u8981\u5728\u4ee3\u7801\u7ec4\u7ec7\u4e0a\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4f7f\u5f97\u52a0\u8f7d\u5668\u53ef\u4ee5\u76f4\u63a5\u77e5\u9053\u4ec5\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\uff0c\u4ece\u8bed\u8a00\u673a\u5236\u4e2d\u62bd\u53d6\u51fa\u6765\uff0c\u7136\u540e\u5b58\u81f3\u6570\u636e\u5e93\u4e2d\u3002\u4f46\u662f\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u4e0d\u662f\u90a3\u4e48\u597d\u8bc6\u522b\u7684\uff0c\u5e76\u4e14\u6211\u4eec\u4e0d\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u8c03\u6574\u6216\u91cd\u7ec4\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u53ef\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u66f4\u65b0\u3002\u6240\u4ee5\u597d\u7684\u601d\u8def\u662f\u6211\u4eec\u9700\u8981\u5bf9\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ee5\u4fbf\u4e8e\u80fd\u591f\u8fd9\u79cd\u7ec4\u7ec7\u672c\u8eab\u80fd\u591f\u5e2e\u52a9\u6784\u5efa\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8868\u73b0\u4e3a\u5b83\u4f7f\u7528\u7684\u53c2\u6570\uff0c\u800c\u8fd9\u4e2a\u53c2\u6570\u5e76\u4e0d\u662f\u7531\u5f00\u53d1\u8005\u968f\u4fbf\u5b9a\u4e49\u7684\uff08\u5426\u5219\u5b83\u53ef\u4ee5\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u7cfb\u7edf\u6839\u672c\u65e0\u6cd5\u5bf9\u5176\u8fdb\u884c\u63d0\u53d6\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u90a3\u6837\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4eec\u6765\u81ea\u4e8e\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u5171\u4eab\u7b26\u53f7\u8868\u5bf9\u5e94\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5b83\u4e0e\u5176\u4ed6\u7a0b\u5e8f\u4e4b\u95f4\u90fd\u9075\u5faa\u76f8\u540c\u7684\u7b26\u53f7\u5b9a\u4e49")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\u5c31\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u62bd\u53d6\u51fa\u4efb\u4f55\u7528\u6237\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fd9\u662fRealityIS\u5b9e\u73b0\u52a8\u6001\u6027\u7684\u6838\u5fc3\u56e0\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u5c06\u7ec4\u4ef6\u7684\u65b9\u6cd5\u4e0e\u6570\u636e\u4e00\u4e00\u5173\u8054\u8d77\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u5efa\u7acb\u5171\u540c\u9075\u5faa\u7684\u7b26\u53f7\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u4efb\u4f55\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5c31\u4f7f\u5f97\u5bf9\u8c61\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u53ef\u4ee5\u63a8\u7b97\u51fa\u6765\u7684")),(0,n.kt)("p",null,"\u5c06\u7a0b\u5e8f\u8bed\u8a00\u7684\u4f9d\u8d56\u5173\u7cfb\u62bd\u53d6\u51fa\u6765\u4e4b\u540e\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u53d1\u751f\u4e86\u975e\u5e38\u5927\u7684\u53d8\u5316\uff0c\u4ece\u603b\u4f53\u4e0a\u770b\uff0c\u5b83\u53d8\u6210\u4e86\u4e00\u79cd\u590d\u6742\u7684\u5173\u7cfb\u8868\uff0c\u5176\u4e2d\u7684\u4efb\u610f\u7ec4\u5408\u90fd\u53ef\u4ee5\u63a8\u7b97\u51fa\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u662f\u5b9e\u73b0\u5927\u578b\u52a8\u6001\u7cfb\u7edf\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"obj-com",src:l(2717).Z,width:"2666",height:"898"})),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u548c\u7ec4\u4ef6\u878d\u5408\u4e3a\u4e00\u4f53\u662f\u5173\u952e\u601d\u60f3\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u662f\u6ca1\u6709\u8fd9\u79cd\u673a\u5236\u7684\uff0c\u751a\u81f3\u662f\u4e0d\u53ef\u7406\u89e3\u7684\uff0c\u4f46\u662f\u4e0d\u7a81\u7834\u8fd9\u4e00\u70b9\u5c31\u65e0\u6cd5\u5b9e\u73b0\u4e0a\u8ff0\u7684\u529f\u80fd\uff0c\u8fd9\u79cd\u601d\u8def\u89e3\u51b3\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u4e86\u5f00\u53d1\u8005\u6216\u8005\u5bf9\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u5173\u7cfb\u7684\u624b\u52a8\u4e14\u5bb9\u6613\u51fa\u9519\u6216\u9020\u6210\u5197\u4f59\u7684\u7ef4\u62a4")),(0,n.kt)("p",null,"\u8fd9\u65b9\u9762\u7684\u5185\u5bb9\u53c2\u89c1\u9762\u5411\u6570\u636e\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5"},"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5"),(0,n.kt)("p",null,"\u8981\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b8c\u5168\u6309\u8fd9\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\uff0c\u5fc5\u7136\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u4e9b\u95ee\u9898\u81f3\u5c11\u6765\u81ea\u4e24\u4e2a\u65b9\u9762\uff1a1\uff09\u52a8\u6001\u67e5\u8be2\u6570\u636e\u5e93\uff1b2\uff09\u52a8\u6001\u7f16\u8bd1\u3001\u89e3\u91ca\u3001\u94fe\u63a5\u7b49\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u4e0a\u8ff0\u7684\u95ee\u9898\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6211\u4eec\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u64cd\u4f5c\u8fc7\u7a0b\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\u3002\u6839\u636e\u6574\u4e2a\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u8fc7\u7a0b\uff0c\u5927\u6982\u53ef\u4ee5\u5212\u5206\u4e3a\u4e09\u4e2a\u9636\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7f16\u8bd1\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5f00\u53d1\u7ec4\u4ef6\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7f16\u8f91\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u4f7f\u7528\u7ec4\u4ef6\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u52a0\u8f7d\u65f6\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u6267\u884c\u4e4b\u524d")),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u7f16\u8f91\u597d\u5bf9\u8c61\u4e4b\u540e\uff0c\u5176\u76f8\u5e94\u4f7f\u7528\u7684\u7ec4\u4ef6\u53ca\u5176\u6570\u636e\u7ed3\u6784\u5c31\u56fa\u5b9a\u4e0b\u6765\u4e86\uff0c\u800c\u7ec4\u4ef6\u7684\u4ee3\u7801\u5b9e\u9645\u4e0a\u5728\u5f00\u53d1\u8005\u63d0\u4ea4\u5230\u4ee3\u7801\u5e93\u4e4b\u524d\u5c31\u5df2\u7ecf\u7f16\u8bd1\u597d\u4e86\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\u52a8\u6001\u8ba1\u7b97\u7684\u5185\u5bb9\u5c31\u6bd4\u8f83\u7b80\u5355\u3002\u4ec5\u6d89\u53ca\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u987a\u5e8f\u7b49\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2720-\u8ba1\u7b97\u56fe"},"2.7.20 \u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c12.3.6\u8282"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7531\u8f93\u5165\u8f93\u51fa\u7684\u5173\u7cfb\u51b3\u5b9a\u6267\u884c\u987a\u5e8f\uff0c\u8fd9\u6784\u6210\u4e86\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\u3002"),(0,n.kt)("h2",{id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf"},"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64RealityIS\u5e94\u8be5\u662f\u4e00\u4e2a\u5b8c\u5168\u52a8\u6001\u7684\u7cfb\u7edf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u4f53\u73b0\u5728\u591a\u4e2a\u5c42\u9762\u3002"),(0,n.kt)("h3",{id:"281-\u52a8\u6001\u7f16\u8bd1"},"2.8.1 \u52a8\u6001\u7f16\u8bd1"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u7a0b\u5e8f\u662f\u6700\u6838\u5fc3\u7684\u52a8\u6001\u5185\u5bb9\uff0c\u800c\u4e14\u7531\u4e8e\u6574\u4e2a\u4e16\u754c\u4ee3\u7801\u91cf\u5f88\u5927\uff0c\u56e0\u6b64\u5fc5\u987b\u5b8c\u5168\u52a8\u6001\u89e3\u91ca\u3002"),(0,n.kt)("p",null,"\u8d77\u7801\u8981\u6ee1\u8db3\u4e24\u4e2a\u65b9\u9762\u7684\u9700\u6c42\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u6587\u4ef6\u72ec\u7acb\u7f16\u8bd1\uff0c\u4e0d\u80fd\u653e\u5230\u4e00\u6b21\u6027\u7f16\u8bd1"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u94fe\u63a5\u8fc7\u7a0b\uff0c\u53c8\u5fc5\u987b\u505a\u5230\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4e4b\u95f4\u4e0d\u80fd\u6709\u5f15\u7528\uff0c\u56e0\u4e3a\u5f15\u7528\u5c31\u610f\u5473\u7740\u8981\u52a0\u8f7d\u5de8\u5927\u7684\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u52a0\u8f7d\u9700\u8981\u7684\u7ec4\u4ef6\u53ca\u6e90\u4ee3\u7801\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5927\u91cf\u7684\u4e0d\u4f1a\u88ab\u6267\u884c\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u53c2\u89c12.7.6\u8282\u7684\u5185\u5bb9\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u5927\u89c4\u6a21\u7a0b\u5e8f\u5b9e\u65f6\u89e3\u91ca\u7684\uff0cRealityIS\u4f7f\u7528\u4e86\u7279\u6b8a\u7684\u67b6\u6784\u6765\u4fdd\u8bc1\u6574\u4e2a\u7a0b\u5e8f\u5728\u89e3\u91ca\u65f6\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6e90\u4ee3\u7801\u7684\u52a8\u6001\u89e3\u91ca\uff0c\u5b83\u53ea\u53d1\u751f\u5728\u4ee3\u7801\u5f00\u53d1\u7684\u65f6\u5019\uff0c\u4e5f\u5c31\u662f\u5f00\u53d1\u8005\u5728Reality Create\u4e2d\u7f16\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4ee5\u53ca\u53d1\u5e03\u7ec4\u4ef6\u7684\u65f6\u5019\u3002\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u652f\u6301\u5927\u89c4\u6a21\u7684\u4ee3\u7801\u6267\u884c\uff0c\u8fd9\u79cd\u7f16\u8bd1\u53ea\u9488\u5bf9\u5355\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u80fd\u5bf9\u591a\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136RealityIS\u4e5f\u53ef\u4ee5\u907f\u514d\u8fd9\u6837\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cRealityIS\u5728\u5176\u4ed6\u5730\u65b9\uff0c\u5e76\u4e0d\u9700\u8981\u7f16\u8bd1\u3002\u6574\u4e2a\u8fc7\u7a0b\u76f8\u5bf9\u6bd4\u8f83\u8f7b\u91cf\uff0c\u66f4\u591a\u7684\u662f\u52a8\u6001\u4e00\u4e9b\u5b9e\u4f53\u4e0e\u7ec4\u4ef6\u5173\u7cfb\u7684\u7ba1\u7406\u7b49\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u6839\u636e2.3.1.3\u8282\u7684\u5185\u5bb9\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u8ba9\u52a8\u6001\u7684Creation Script\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"},"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"),(0,n.kt)("p",null,"\u5728Reality World\u8fd9\u6837\u5b8c\u5168\u5f00\u653e\u7684\u4e16\u754c\u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u53ea\u80fd\u4e8b\u5148\u8bbe\u7f6e\u597d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u4f8b\u5982\u7528\u6237\u53ef\u4ee5\u4e00\u8fb9\u73a9\u4e00\u8fb9\u4fee\u6539\u573a\u666f\uff0c\u8fd9\u79cd\u521b\u5efa\u7684\u8fc7\u7a0b\u672c\u8eab\u4e5f\u662f\u4e00\u79cd\u73a9\u6cd5\u3002"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u7f16\u8bd1\u597d\u7684\uff0c\u6240\u4ee5\u8fd9\u79cd\u4fee\u6539\u4e0d\u6d89\u53ca\u5230\u4ee3\u7801\u7684\u4fee\u6539\uff0c\u56e0\u6b64\u52a8\u6001\u64cd\u4f5c\u662f\u975e\u5e38\u5bb9\u6613\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7528\u6237\u4fee\u6539\u4e00\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u56e0\u4e3a\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u6570\u636e\u9a71\u52a8\u7684\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u53ea\u6d89\u53ca\u5230\u6570\u636e\u7684\u8c03\u6574\u3002\u7136\u800c\uff0c\u56e0\u4e3aRealityIS\u7684Runtime\u4f1a\u627f\u62c5\u4e00\u90e8\u5206\u89e3\u91ca\u4ee5\u53ca\u7ed9\u6307\u4ee4\u5206\u914d\u6b63\u786e\u5185\u5b58\u5730\u5740\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u7528\u6237\u7684\u6570\u636e\u8c03\u6574\u4f1a\u5bfc\u81f4Creation Table Engine\u5bf9\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e03\u5c40\u8fdb\u884c\u8c03\u6574\u3002\u5f53\u7136\u8fd9\u79cd\u8c03\u6574\u76f4\u53d1\u751f\u5728\u4fee\u6539\u7684\u65f6\u5019\uff0c\u6240\u4ee5\u603b\u4f53\u5e94\u8be5\u4e0d\u4f1a\u5f71\u54cd\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f"},"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f"),(0,n.kt)("p",null,"Reality World\u662f\u4e00\u4e2a\u975e\u5e38\u5de8\u5927\u7684\u4e16\u754c\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u80fd\u6309\u7167\u4f20\u7edf\u7684\u65b9\u5f0f\u4e00\u4e0b\u5b50\u52a0\u8f7d\u6574\u4e2a\u7a0b\u5e8f\uff0c\u800c\u662f\u53ea\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u7528\u6237\u9700\u8981\u7684\u6570\u636e\u3002\u8fd9\u91cc\u9762\u53ef\u80fd\u8981\u6d89\u53ca\u5f88\u591a\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u6570\u636e\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0"},"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0"),(0,n.kt)("p",null,"\u5f53\u7528\u6237A\u4fee\u6539\u4e86\u5185\u5bb9\uff0c\u5176\u4ed6\u4e0e\u8fd9\u4e2a\u5185\u5bb9\u76f8\u5173\u7684\u7528\u6237\u5f53\u524d\u7684\u573a\u666f\u5fc5\u987b\u52a8\u6001\u66f4\u65b0\u3002"),(0,n.kt)("h3",{id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"},"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u7531\u4e8e\u6574\u4e2a\u5185\u5bb9\u7684\u521b\u5efa\u3001\u52a0\u8f7d\u3001\u66f4\u65b0\u548c\u63a8\u9001\u7b49\u7b49\uff0c\u90fd\u662f\u52a8\u6001\u53d1\u751f\u7684\uff0c\u4efb\u52a1\u590d\u6742\u800c\u4e14\u8ba1\u7b97\u91cf\u8f83\u5927\uff0c\u6240\u4ee5\u9700\u8981\u52a8\u6001\u7684\u5206\u914d\u670d\u52a1\u5668\uff0c\u4e0d\u80fd\u6709\u4e00\u4e9b\u592a\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6216\u8005\u9700\u8981\u4eba\u5de5\u8fdb\u884c\u67d0\u4e9b\u914d\u7f6e\u7684\u5de5\u4f5c\uff0c\u800c\u4e14\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u884c\u4f38\u7f29\u7684\u3002"),(0,n.kt)("h3",{id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"},"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u673a\u5236\u4e2d\uff0c\u89d2\u8272Avator\u662f\u4e00\u4e2a\u6bd4\u8f83\u590d\u6742\u7684\u7c7b\uff0c\u4ed6\u9700\u8981\u627f\u8f7d\u6240\u6709Avator\u6240\u80fd\u64cd\u4f5c\u7684\u529f\u80fd\uff0c\u5176\u4ed6\u7269\u4f53\u5bf9\u8c61\u7684\u811a\u672c\u901a\u5e38\u5219\u6bd4\u8f83\u7b80\u5355\u56fa\u5b9a\u3002avator\u51e0\u4e4e\u53ef\u4ee5\u8ddf\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u4e00\u5207\u7269\u4f53\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u5c31\u5bfc\u81f4\u4e00\u4e2a\u95ee\u9898\uff0c\u5373avator\u6240\u643a\u5e26\u7684\u5927\u90e8\u5206\u7ec4\u4ef6\u529f\u80fd\uff0c\u5728\u67d0\u4e2a\u65f6\u523b\u53ef\u80fd\u90fd\u4e0d\u9700\u8981\uff0c\u56e0\u4e3a\u5b83\u4e00\u6b21\u53ef\u80fd\u53ea\u8ddf\u5c11\u6570\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u4e92\uff0c\u4f7f\u7528\u5c11\u6570\u6280\u80fd\u3002"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u53d1\u7684\u5927\u4e16\u754c\uff0c\u8fd9\u6837\u7684\u95ee\u9898\u5c31\u66f4\u52a0\u4e25\u91cd\uff0c\u56e0\u4e3a\u6240\u6709avator\u80fd\u591f\u6267\u884c\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u65e0\u7a77\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u52a0\u8f7d\u5728avator\u8eab\u4e0a\uff0c\u800c\u5fc5\u987b\u5b9e\u73b0\u6839\u636e\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u3002\u4f8b\u5982\uff0c\u73a9\u5bb6\u8981\u8fdb\u5165\u4e00\u5757\u51b0\u96ea\u4e4b\u5730\uff0c\u5468\u56f4\u7684\u73af\u5883\u4f1a\u5bf9\u5b83\u7684\u4f53\u80fd\u6d88\u8017\u9020\u6210\u5f71\u54cd\uff0c\u8fd9\u79cd\u53ea\u6709\u5728\u8fd9\u4e2a\u73af\u5883\u624d\u80fd\u53d1\u6325\u4f5c\u7528\u7684\u7ec4\u4ef6\uff0c\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e2a\u533a\u57df\uff0c\u73a9\u5bb6\u8fdb\u5165\u8fd9\u4e2a\u533a\u57df\u7684\u65f6\u5019\u52a8\u6001\u52a0\u8f7d\u8fd9\u4e2a\u7ec4\u4ef6\uff0c\u7136\u540e\u79bb\u5f00\u7684\u65f6\u5019\u5378\u8f7d\u8be5\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u8fd9\u79cd\u52a8\u6001\u52a0\u8f7d\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd8\u662f\u6709\u4e00\u4e9b\u60c5\u51b5\u53ef\u4ee5\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u8fd9\u79cd\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2aBounding box"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u73a9\u5bb6\u4e3b\u52a8\u9009\u62e9\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u8d5b\u8f66\u5e7f\u544a\uff0c\u73a9\u5bb6\u9ed8\u8ba4\u80af\u5b9a\u662f\u4e0d\u5e26\u8fd9\u4e9b\u7ec4\u4ef6\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u7ec4\u4ef6\uff0c\u8ba9\u73a9\u5bb6\u9009\u62e9\u9700\u8981\u52a0\u8f7d\u8d5b\u8f66\u7ec4\u4ef6\uff1b\u4e8b\u5b9e\u4e0a\u8fd9\u5e94\u8be5\u6210\u4e3a\u9ed8\u8ba4\u673a\u5236\uff0c\u5373\u73a9\u5bb6\u770b\u5230\u67d0\u4e2a\u7269\u4f53\uff0c\u4f46\u662f\u5374\u4e0d\u80fd\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\u7684\u65f6\u5019\uff0c\u73a9\u5bb6\u5c31\u53ef\u4ee5\u9009\u62e9\u8fd9\u4e2a\u7269\u4f53\uff0c\u6309\u4e00\u4e2a\u7279\u6b8a\u7684\u952e\uff0c\u5c31\u81ea\u52a8\u88c5\u4e0a\u5bf9\u5e94\u7684\u7ec4\u4ef6\uff0c\u540c\u6837\u73a9\u5bb6\u53ef\u4ee5\u5378\u8f7d\uff0c\u73a9\u5bb6\u53ef\u4ee5\u67e5\u770b\u8eab\u4e0a\u88c5\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u957f\u65f6\u95f4\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7cfb\u7edf\u53ef\u4ee5\u81ea\u884c\u5378\u8f7d\u6389\uff0c\u751a\u81f3\u8bbe\u7f6e\u4e00\u4e2a\u6700\u5927\u7ec4\u4ef6\u6570\u91cf\u3002\u4f8b\u5982\u73a9\u5bb6\u81ea\u5df1\u5f88\u6e05\u695a\u9700\u8981\u73a9\u54ea\u4e00\u4e2a\u6e38\u620f\uff0c\u5b83\u53ef\u80fd\u4e3b\u52a8\u88c5\u8f7d\u4e0a\u4e0e\u4e4b\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u53d8\u5316\u7f16\u7a0b\uff0c\u5373\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\u4e0d\u4f1a\u53d1\u751f\u8ba1\u7b97\u548c\u7f51\u7edc\u4f20\u8f93\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u4ecd\u7136\u5360\u636e\u5185\u5b58\uff0c\u5e76\u4e0d\u662f\u5f88\u53ef\u53d6\u7684\u65b9\u6848\u3002")),(0,n.kt)("h3",{id:"287-\u52a8\u6001\u5524\u9192"},"2.8.7 \u52a8\u6001\u5524\u9192"),(0,n.kt)("p",null,"\u5373\u65f6\u5524\u9192\uff1a\u5982\u679c\u77e5\u9053\u54ea\u4e9b\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u53d8\u91cf\u611f\u5174\u8da3\uff0c\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u8ba9\u8fd9\u4e9b\u6570\u636e\u5b9e\u65f6\u5904\u4e8e\u5185\u5b58\uff0c\u800c\u53ef\u4ee5\u4e3b\u52a8\u5373\u65f6\u52a0\u8f7d\u4ee3\u7801\u5e76\u6267\u884c\uff0c\u76f8\u5f53\u4e8e\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u6570\u636e\u5b58\u50a8\u5230\u4e86\u786c\u76d8\uff0c\u7136\u540e\u901a\u8fc7\u7f13\u5b58\u673a\u5236\u52a8\u6001\u52a0\u8f7d\uff0c\u5b9e\u9645\u4e0a\u7f13\u5b58\u7cfb\u7edf\u672c\u6765\u4e5f\u662f\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u5f53\u5185\u5b58\u6570\u636e\u8fc7\u591a\u65f6\uff0c\u90a3\u4e9b\u4e0d\u5e38\u7528\u7684\u6570\u636e\u5c31\u4f1a\u88ab\u7f13\u5b58\u5230\u786c\u76d8\uff0c\u4f46\u53c8\u53ef\u4ee5\u5373\u65f6\u88ab\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"29-\u4e92\u64cd\u4f5c\u6027"},"2.9 \u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems."),(0,n.kt)("p",null,"\u5e7f\u4e49\u4e0a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u6307\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u4e2d\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u8ddf\u4e24\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u534f\u8c03\u5de5\u4f5c\u3002\u8fd9\u4e9b\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u53ef\u4ee5\u662f\u4efb\u4f55\u9886\u57df\uff0c\u6bd4\u5982\u91d1\u878d\u3001\u533b\u7597\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"With respect to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Software"},"software"),", the term ",(0,n.kt)("em",{parentName:"p"},"interoperability")," is used to describe the capability of different programs to exchange data via a common set of exchange formats, to read and write the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/File_format"},"file formats"),", and to use the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Protocol_(computing)"},"protocols"),". The lack of interoperability can be a consequence of a lack of attention to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Standardization"},"standardization")," during the design of a program."),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e8e\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u7528\u4e8e\u63cf\u8ff0\u4e24\u4e2a\u4e0d\u540c\u7684\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u4e00\u5b9a\u7684\u4ea4\u6362\u683c\u5f0f\u4ea4\u6362\u6570\u636e\u7684\u80fd\u529b\uff0c\u8be5\u4e24\u4e2a\u7a0b\u5e8f\u80fd\u591f\u901a\u8fc7\u76f8\u540c\u7684\u534f\u8bae\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u6027\u6ce8\u91cd\u7684\u662f\u7cfb\u7edf\u4e4b\u95f4\u7684\u6807\u51c6\uff0c\u5982\u679c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u9700\u8981\u5f88\u597d\u5730\u534f\u4f5c\uff0c\u9700\u8981\u4e8b\u5148\u5f88\u597d\u5730\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\uff0c\u5426\u5219\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u6839\u672c\u65e0\u6cd5\u534f\u540c\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u968f\u7740\u5f00\u653e\u5143\u5b87\u5b99\u548c\u53bb\u4e2d\u5fc3\u5316\u7684\u9700\u6c42\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\uff0cRealityIS\u6709\u4e00\u4e9b\u4e0d\u4e00\u6837\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u8981\u6c42\u4f7f\u5f97\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u5f88\u96be\u53bb\u6784\u5efa\u8fd9\u6837\u7684\u80fd\u529b\u3002\u672c\u8282\u901a\u8fc7\u7cfb\u7edf\u68b3\u7406\u4e92\u64cd\u4f5c\u6027\u7684\u6982\u5ff5\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u89e3\u91caRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u601d\u8def\u548c\u65b9\u6cd5\uff0c\u4ee5\u53ca\u5b83\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"},"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7684\u4e92\u64cd\u4f5c\u6027\u90fd\u9700\u8981\u4e00\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u673a\u5236\u6765\u652f\u6301\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u662f\u6307\u8bed\u8a00\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Language interoperability")," is the capability of two different ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Programming_languages"},"programming languages")," to natively interact as part of the same system and operate on the same kind of data structures."),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\u6027\u662f\u6307\u4e24\u4e2a\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u4e4b\u95f4\uff0c\u80fd\u591f\u539f\u751f\u5730\u8fdb\u884c\u4ea4\u4e92\uff0c\u4ee5\u53ca\u5bf9\u76f8\u540c\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u64cd\u4f5c\u7684\u80fd\u529b\u3002\u5176\u4e2d\u4e24\u79cd\u6bd4\u8f83\u91cd\u8981\u7684\u673a\u5236\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u6807\u8bb0\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u901a\u8fc7\u865a\u62df\u673a")),(0,n.kt)("p",null,"\u8fdb\u884c\u4e92\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"There are many ways programming languages are interoperable with one another. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/HTML"},"HTML"),", ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Cascading_Style_Sheets"},"CSS"),", and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/JavaScript"},"JavaScript")," are interoperable as they are used in tandem in webpages. Some ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Object_oriented"},"object oriented")," languages are interoperable thanks to their shared hosting ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (e.g. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_CLI_languages"},".NET CLI compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Common_Language_Runtime"},"Common Language Runtime")," and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_JVM_languages"},"JVM compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Java_virtual_machine"},"Java Virtual Machine"),")."),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u6807\u8bb0\u8bed\u8a00\uff0c\u5f53HTML+CSS\u6807\u8bb0\u8bed\u8a00\u5728\u6d4f\u89c8\u5668\u4e2d\u8fdb\u884c\u89e3\u91ca\u6267\u884c\u6027\uff0c\u5176\u4e2d\u5b9a\u4e49\u7684\u5143\u7d20\u80fd\u591f\u88abJavaScript\u8bed\u8a00\u8fdb\u884c\u89e3\u91ca\uff1b\u800c\u5bf9\u4e8e\u57fa\u4e8e\u865a\u62df\u673a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5b83\u4eec\u4e3b\u8981\u662f\u501f\u52a9\u865a\u62df\u673a\u7684\u76f8\u540c\u4e2d\u95f4\u8bed\u8a00\u53ca\u5185\u5b58\u7ed3\u6784\uff0c\u4e0d\u540c\u8bed\u8a00\u7f16\u5199\u7684\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"2911-object-models"},"2.9.1.1 Object models"),(0,n.kt)("p",null,"Object models are standardised models which allow objects to be represented in a language-agnostic way, such that the same objects may be used across programs and across languages. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/CORBA"},"CORBA")," and the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Component_Object_Model"},"COM")," are the most popular object models."),(0,n.kt)("h4",{id:"2912-virtual-machines"},"2.9.1.2 Virtual machines"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"vm-il",src:l(9080).Z,width:"2210",height:"1052"})),(0,n.kt)("p",null,"Different Languages compile into a shared runtime"),(0,n.kt)("p",null,"A ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (VM) is a specialised intermediate language that several different languages compile down to. Languages that use the same virtual machine can interoperate, as they will share a memory model and compiler and thus libraries from one language can be re-used for others on the same VM. VMs can incorporate type systems to ensure the correctness of participating languages and give languages a common ground for their type information. The use of an intermediate language during compilation or interpretation can provide more opportunities for optimisation."),(0,n.kt)("h4",{id:"2913-foreign-function-interfaces"},"2.9.1.3 Foreign function interfaces"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Foreign_function_interface"},"Foreign function interfaces")," (FFI) allow programs written in one language to call functions written in another language. There are often considerations that preclude simply treating foreign functions as functions written in the host language, such as differences in types and execution model. Foreign function interfaces enable building ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Wrapper_library"},"wrapper libraries")," that provide functionality from a library from another language in the host language, often in a style that is more idiomatic for the language. Most languages have FFIs to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/C_(programming_language)"},"C"),', which is the "lingua franca" of programming today.'),(0,n.kt)("h4",{id:"2914-challenges"},"2.9.1.4 Challenges"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Object model differences")),(0,n.kt)("p",null,"Object oriented languages attempt to pair containers of data with code, but how each language chooses how to do that may be slightly different. Those design decisions do not always map to other languages easily. For instance, classes using multiple inheritance from a language that permits it will not translate well to a language that does not permit multiple inheritance. A common approach to this issue is defining a subset of a language that is compatible with another language's features.[",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Language_interoperability#cite_note-3"},"3","]")," This approach does mean in order for the code using features outside the subset to interoperate it will need to wrap some of its interfaces into classes that can be understood by the subset."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Memory models")),(0,n.kt)("p",null,"Differences in how programming languages handle de-allocation of memory is another issue when trying create interoperability. Languages with automatic de-allocation will not interoperate well with those with manual de-allocation, and those with deterministic destruction will be incompatible with those with nondeterministic destruction. Based on the constraints of the language there are many different strategies for bridging the different behaviors. For example: C++ programs, which normally use manual de-allocation, could interoperate with a Java style garbage collector by changing de-allocation behavior to delete the object, but not reclaim the memory. This requires that each object will have to manually be de-allocated, in order for the garbage collector to release the memory safely."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Mutability")),(0,n.kt)("p",null,"Mutability becomes an issue when trying to create interoperability between pure functional and procedural languages. Languages like ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Haskell_(programming_language)"},"Haskell")," have no mutable types, whereas C++ does not provide such rigorous guarantees. Many functional types when bridged to object oriented languages can not guarantee that the underlying objects won't be modified."),(0,n.kt)("h3",{id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"In addition to the perspective of scalability, we also need to think from a practical perspective, why we need interoperability, or why we need cross-chain. Traditionally, blockchain can solve the problem of trust. If scalability can be solved, then the problem of performance will also be solved. Interoperability can actually solve the broader problem of trust when the above two issues are resolved."),(0,n.kt)("p",null,"At present, different application scenarios have different alliance chains and public chains. With these chains in place, we need to use interoperability to communicate useful data. This will involve different approaches to cross-chain or interoperability. In the future, we will see a blockchain system with extremely blurred boundaries, that is, private chains, alliance chains, and public chains are interconnected in some way."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"blockchain-op",src:l(7681).Z,width:"2360",height:"982"})),(0,n.kt)("p",null,"The interoperability in the blockchain field, why is it not explicitly mentioned in traditional Internet applications? Because the Internet infrastructure now provides these functions, such as various SDKs and APIs. If you make an application and want to call the data on WeChat, then you can get the data down through the SDK and interface on WeChat. If you want to make a payment, Alipay also has a corresponding payment channel. When you write the code, you can call the API to make the payment. At present, the reason why it cannot be done on the blockchain is that our data is still in an isolated state due to the different consensus and block structures of various blockchains. In order for the data on different islands to communicate, we must connect different blockchains through interoperability and cross-chain systems."),(0,n.kt)("p",null,"What are the specific ways of interoperability and cross-chain protocols? The first way is the notary model. There is a notary between different chains. The second way to relatively decentralize is the side chain pattern. Through the side chain method, on the chain B, it can be verified which transactions on the chain A are written into the block, then the chain B can verify the operations on A and perform corresponding operations on B such as transfer. The third method is hash time lock. This is a relatively complex protocol. It is a cross-chain operation that integrates decentralized and transparent transaction assets conversion. To put it simply, if I trade bitcoin for Ethereum, I put a lock on Bitcoin, and at the same time, the other party also puts a lock on Ethereum. I give him the key, and I can get the corresponding Ethereum with the same key, and at the same time he can get the corresponding Bitcoin based on the key. There is also a time lock, which guarantees that both parties can only unlock Ethereum and Bitcoin within a limited time, otherwise the agreement will automatically terminate and neither party will obtain the assets of the other."),(0,n.kt)("h3",{id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Understanding Metaverse Interoperability")),(0,n.kt)("p",null,"Interoperability is the preeminent driving force behind the development of the metaverse. Let\u2019s take a look at ",(0,n.kt)("a",{parentName:"p",href:"https://www.oodlestechnologies.com/blockchain-applications-development/"},"blockchain technology")," to decode how interoperability works in the metaverse. "),(0,n.kt)("p",null,"In blockchain environments, we have both non-interoperable as well as interoperable platforms. However, interoperability is imperative if we are seeking to devise blockchain-powered high-utility services in the metaverse."),(0,n.kt)("p",null,"Interoperability equips the blockchain ecosystem to communicate, use one another\u2019s features and services, share arbitrary data, and more. Similarly, interoperability enables a myriad of metaverse projects to function in a unified manner through sharing of services, data, features, and experiences. It also allows cross-platform trading as well as other activities that are nearly impossible to function in siloed spaces."),(0,n.kt)("p",null,"To understand the concept of metaverse interoperability in a different way, let us take a look at the internet. It is equipped with layered standards that enable diverse networks as well as subnetworks to seamlessly interact with each other. "),(0,n.kt)("p",null,"In the real world, when we move between different locations, our identities also travel from one place to another without any trouble. Even our assets and possessions can be effectively transferred to different locations without undergoing any major changes. It signifies that there is a continuity in the real world that altogether keeps us as well as our assets intact during any transit. "),(0,n.kt)("p",null,"This is the reason why metaverse \u2013 the integration of borderless virtual worlds \u2013 aims at furnishing a transparent platform for socio-cultural interaction, similar to the physical world. Such amalgamation would make all digital realms, irrespective of their canvas and size, an integral part of a larger existence or entity."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Domains of Interoperability")),(0,n.kt)("p",null,"To illustrate various domains of interoperability in the metaverse, here is a representation for a quick reference:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Connectivity: Networking, communications"),(0,n.kt)("li",{parentName:"ul"},"Persistence: Ownership, Identity, History, Accounting"),(0,n.kt)("li",{parentName:"ul"},"Presentation: Physical properties, graphic models"),(0,n.kt)("li",{parentName:"ul"},"Meaning: Semantics, metadata, ontologies"),(0,n.kt)("li",{parentName:"ul"},"Behavior: Economies, rules, consequence, power")),(0,n.kt)("h3",{id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u5185\u5bb9\u53ef\u4ee5\u770b\u51fa\uff0c\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u805a\u7126\u5728\u4e24\u4e2a\u4e0d\u540c\u7684\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c",(0,n.kt)("strong",{parentName:"p"},"\u4fe1\u606f\u4ea4\u6362"),"\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728HTML\u4e2d\u6267\u884cJavaScript\u811a\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u5728JVM\u4e4b\u95f4\u5b9e\u73b0\u4e0d\u540c\u8bed\u8a00\u7684\u76f8\u4e92\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"C\u548cLua\u4e4b\u95f4\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e24\u4e2a\u72ec\u7acb\u7684\u533a\u5757\u94fe\u4e2d\u8054\u901a\uff0c\u5df2\u5b9e\u73b0\u8de8\u94fe\u7684\u4ea4\u6613\uff0c\u5e76\u786e\u4fdd\u94fe\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6362\u662f\u53ef\u4fe1\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u80fd\u591f\u6b63\u786e\u8bc6\u522b\u4e0d\u540c\u7528\u6237\u7684\u8eab\u4efd\u3001\u7ecf\u6d4e\u3001\u7269\u7406\u5916\u89c2\u7b49\u4e00\u4e9b\u57fa\u672c\u5c5e\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u5f88\u597d\u7684\u6982\u5ff5\uff0c\u4f46\u5b9e\u9645\u5b83\u4eec\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u5f62\u6210\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u9769\u65b0\u3002\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u4f20\u7edf\u8bed\u8a00\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u6027\u7279\u6027\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u662f\u4f20\u7edf\u7684\u4e92\u8054\u7f51\u5e94\u7528\u4e4b\u95f4\u901a\u8fc7\u5404\u81ea\u7684API\u6216\u8005SDK\u65e9\u5c31\u5df2\u7ecf\u5b9e\u73b0")),(0,n.kt)("p",null,"RealityIS\u5bf9\u4e92\u64cd\u4f5c\u6027\u6709\u5168\u65b0\u7684\u7406\u89e3\u548c\u76ee\u6807\uff0c\u8fd9\u4e9b\u9700\u6c42\u662f\u672a\u6765\u8ba1\u7b97\u67b6\u6784\u548c\u6d88\u8d39\u8005\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u5ba2\u89c2\u9700\u6c42\u3002\u4e3a\u4e86\u66f4\u597d\u5730\u7406\u89e3\u8fd9\u4e9b\u9700\u6c42\uff0c\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027 \u6709\u54ea\u4e9b\u4e0d\u8db3\u3002"),(0,n.kt)("h4",{id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"},"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8bed\u8a00\u4e92\u64cd\u4f5c\u4e3b\u8981\u5f3a\u8c03\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5171\u4eab\uff1a\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u53ef\u4ee5\u4f20\u9012\u6d88\u606f\uff0c\u5f53\u7136\u8fd9\u4e2a\u6d88\u606f\u901a\u5e38\u4e0d\u4ec5\u4ec5\u662f\u5355\u7eaf\u7684\u5b57\u7b26\u4e32\uff0c\u800c\u662f\u5305\u542b\u4e24\u8005\u90fd\u80fd\u591f\u7406\u89e3\u548c\u89e3\u91ca\u7684\u683c\u5f0f\u534f\u8bae\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u5305\u542b\u4e00\u5b9a\u7684\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6570\u636e\u7ed3\u6784\u5f80\u5f80\u662f\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u5f62\u6210\u7684\u901a\u4fe1\u6807\u51c6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u5171\u4eab\uff1a\u5176\u4e2d\u4e00\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u7f16\u5199\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u53ef\u4ee5\u5728\u53e6\u4e00\u4e2a\u7cfb\u7edf\u4e2d\u6267\u884c\uff0c\u4f8b\u5982JavaScript\u4ee3\u7801\uff0c\u6216\u8005\u5728JVM\u4e0a\u4f7f\u7528\u4e0d\u540c\u8bed\u8a00\u5f00\u53d1\u7684\u5e93\uff0c\u4f8b\u5982Scala\u8bed\u8a00\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u4f20\u7edfJava\u8bed\u8a00\u7f16\u5199\u7684\u4ee3\u7801\u5e93\u3002")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u662f\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4f46\u662f\u603b\u7684\u6765\u8bb2\uff0c\u5728\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u4e2d\u4e24\u4e2a\u8bed\u8a00\u901a\u5e38\u5e76\u4e0d\u5bf9\u7b49\uff0c\u5176\u4e2d\u4e00\u4e2a\u5f80\u5f80\u662f\u53e6\u4e00\u4e2a\u8bed\u8a00\u7684\u8f85\u52a9\u7cfb\u7edf\u3002\u5176\u4e3b\u8981\u7684\u53cd\u6620\u51fa\u6765\u7684\u7279\u5f81\u662f\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u5728\u5176\u4e2d\u4e00\u4e2a\u7cfb\u7edf\u6216\u8bed\u8a00\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u6682\u4e14\u79f0\u4e3a\u5bbf\u4e3b\u8bed\u8a00\uff0c\u53e6\u4e00\u4e2a\u8bed\u8a00\u6ca1\u6709\u81ea\u5df1\u7684\u8fd0\u884c\u65f6\uff0c\u5b83\u7684\u4ee3\u7801\u9700\u8981\u4f9d\u9644\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u8fd0\u884c\u65f6\u4e2d\u8fd0\u884c\uff0c\u800c\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\u4e4b\u6240\u4ee5\u80fd\u591f\u8fd0\u884c\u5916\u6765\u8bed\u8a00\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u80fd\u591f\u6267\u884c\u8fd9\u90e8\u5206\u5e26\u6765\u8bed\u8a00\u7684\u4ee3\u7801\uff0c\u5e76\u53ef\u4ee5\u501f\u52a9\u865a\u62df\u673a\u4e0e\u5bbf\u4e3b\u5171\u4eab\u5185\u5b58\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u53ef\u4ee5\u5171\u4eab\u5185\u5b58\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u4e9b\u5185\u5b58\u4e2d\u6570\u636e\u7684\u6240\u6709\u8005\u901a\u5e38\u662f\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5185\u5b58\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u5bf9\u8c61\u57fa\u672c\u4e0a\u90fd\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u5206\u914d\u548c\u7ba1\u7406\u3002\u5916\u6765\u8bed\u8a00\u5c3d\u7ba1\u53ef\u4ee5\u7528\u4e8e\u58f0\u660e\u6216\u6784\u9020\u81ea\u5df1\u7684\u53d8\u91cf\uff0c\u4f46\u8fd9\u4e9b\u53d8\u91cf\u901a\u5e38\u662f\u5c40\u90e8\u53d8\u91cf\uff0c\u5916\u6765\u8bed\u8a00\u7684\u4ee3\u7801\u603b\u7684\u6765\u8bf4\u66f4\u50cf\u662f\u4e00\u4e2a\u51fd\u6570\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u4e2d\u6267\u884c\uff0c\u5e76\u4e14\u901a\u5e38\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u5f62\u6210\u8fd9\u79cd\u4e0d\u5bf9\u7b49\uff0c\u662f\u56e0\u4e3a\u4e00\u4e2a\u8bed\u8a00\u5bf9\u5e94\u7684\u7a0b\u5e8f\u5728\u8fd0\u884c\u65f6\u662f\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u4ee3\u7801\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u4e0a\u4e0b\u6587\u7684\u6570\u636e\u6784\u9020\u7684\uff0c\u800c\u4f5c\u4e3a\u4e00\u4e2a\u7b80\u5355\u6d88\u606f\u4f20\u9012\u8fc7\u6765\u7684\u4ee3\u7801\uff0c\u6839\u672c\u4e0d\u8db3\u4e8e\u6784\u9020\u5927\u91cf\u5c5e\u4e8e\u5b83\u81ea\u5df1\u7684\u4e0a\u4e0b\u6587\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7406\u8bba\u4e0a\u53ef\u4ee5\u7f16\u5199\u590d\u6742\u7684\u4ee3\u7801\u4f20\u7ed9\u5bbf\u4e3b\u8bed\u8a00\uff0c\u6216\u8005\u5728\u5bbf\u4e3b\u8bed\u8a00\u4e2d\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e48\u591a\u7684\u4ee3\u7801\u4e0e\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u4ea4\u4e92\u5c06\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u6240\u4ee5\u5927\u90e8\u5206\u4e92\u64cd\u4f5c\u4e3b\u8981\u662f\u7528\u6765\u5b9e\u73b0\u4e00\u4e9b\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u7684\u5c11\u90e8\u5206\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ea7\u522b\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u8db3\u4e8e\u771f\u6b63\u6253\u7834\u4e24\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5272\u88c2\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u771f\u6b63\u9700\u6c42\u7684\uff0c\u4e5f\u662fRealityIS\u5b9a\u4e49\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u5c06\u4e24\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u770b\u505a\u5bf9\u7b49\u7684\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e0d\u5b58\u5728\u5bbf\u4e3b\u548c\u5916\u6765\u8bed\u8a00\u7684\u6982\u5ff5\uff0c\u5b83\u4eec\u540c\u65f6\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5168\u90e8\u6570\u636e\uff0c\u5b83\u4eec\u540c\u65f6\u62e5\u6709\u5404\u81ea\u5b8c\u6574\u7684\u5168\u90e8\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u53ef\u4ee5\u8fdb\u884c\u4efb\u4f55\u4ee3\u7801\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u76f8\u4e92\u8c03\u7528\u548c\u5171\u4eab\uff0c\u53ea\u8981\u7528\u6237\u7528\u6237\u5b83\u4eec\u6709\u8fd9\u6837\u7684\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"},"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"is",src:l(7939).Z,width:"2720",height:"1406"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5176\u6839\u57fa\u8fd8\u662f\u9762\u5411\u5355\u5e94\u7528\uff0c\u5b83\u89e3\u51b3\u7684\u662f\u5355\u5e94\u7528\u6216\u8005\u5355\u4e2a\u7cfb\u7edf\u8ddf\u5916\u754c\u4e4b\u95f4\u600e\u6837\u901a\u4fe1\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u901a\u4fe1\u901a\u5e38\u5f88\u7b80\u5355\uff0c\u6bd4\u5982\u5bf9\u4e8e\u5fae\u4fe1\u3001\u652f\u4ed8\u5b9d\u6765\u8bf4\uff0c\u8c03\u7528\u5b83\u4eec\u63d0\u4f9b\u7684API\u5176\u5b9e\u5c31\u662f\u4e00\u79cd\u548c\u8fd9\u4e9b\u7cfb\u7edf\u7684\u4e92\u64cd\u4f5c\u3002\u8fd9\u79cd\u4e92\u64cd\u4f5c\u4e4b\u95f4\u4f20\u9012\u7684\u4fe1\u606f\u7528\u4e00\u4e9b\u7b80\u5355\u7ed3\u6784\u7684\u5b57\u7b26\u4e32\u90fd\u53ef\u4ee5\u3002\u8fd9\u4e9b\u7cfb\u7edf\u4e4b\u95f4\u7684\u534f\u8bae\u6216\u8005\u6807\u51c6\u901a\u5e38\u4e5f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u901a\u5e38\u8868\u73b0\u51fa\u4e00\u4e0b\u51e0\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u662f\u5355\u5411\u7684\uff0c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u901a\u5e38\u4e0d\u5bf9\u7b49\uff0c\u8868\u73b0\u4e3a\u4f17\u591a\u5c0f\u5e94\u7528\u4f9d\u9644\u4e8e\u4e00\u4e9b\u5927\u7684\u5e73\u53f0\uff0c\u4f8b\u5982\u73b0\u5728\u7684\u5c0f\u7a0b\u5e8f\u3001\u5fae\u4fe1\u5e73\u53f0\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u901a\u4fe1\u7684\u5185\u5bb9\u6bd4\u8f83\u7b80\u5355\uff0c\u6269\u5c55\u80fd\u529b\u8f83\u5dee\uff0c\u4f8b\u5982\u5982\u679c\u9700\u8981\u6269\u5c55\u4e00\u4e9b\u6d88\u606f\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u5b9a\u4e49\u53cc\u65b9\u7684\u89e3\u6790\u683c\u5f0f\uff0c\u66f4\u4e0d\u7528\u8bf4\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u6d88\u606f\u901a\u4fe1\u4e86")),(0,n.kt)("p",null,"RealityIS\u8ddf\u8fd9\u4e9b\u673a\u5236\u7684\u6700\u5927\u4e0d\u540c\uff0c\u5728\u4e8e\u5b83\u5c1d\u8bd5\u89e3\u51b3\u4e24\u4e2a\u66f4\u590d\u6742\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u7b49\u6027"),"\uff0c\u5373\u4e92\u64cd\u4f5c\u7684\u4e24\u4e2a\u7a0b\u5e8f\u6216\u7cfb\u7edf\u4e4b\u95f4\u662f\u5bf9\u7b49\u7684\uff0c\u4e0d\u662f\u4f9d\u9644\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6269\u5c55\u6027"),"\uff0c\u53ef\u4ee5\u6bd4\u8f83\u5bb9\u6613\u5730\u5b9e\u73b0\u4efb\u610f\u901a\u4fe1\uff0c\u800c\u4e0d\u662f\u5c40\u9650\u4e8e\u5c11\u6570\uff08\u4e5f\u6bd4\u8f83\u5bb9\u6613\u5b9e\u73b0\u7684\uff09\u534f\u5b9a\u7684\u683c\u5f0f")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8981\u6c42\u5bf9\u4e92\u64cd\u4f5c\u6027\u7684\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u4e86\u5168\u65b0\u7684\u6311\u6218\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u57fa\u672c\u4e0a\u5f88\u96be\u652f\u6301\u8fd9\u6837\u7684\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u5bf9\u7b49\u6027\u5bf9\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u7684\u4e3b\u8981\u6311\u6218\u662f\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u5171\u4eab\uff0c\u5373\u6240\u6709\u5b50\u7a0b\u5e8f\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u5747\u6709\u5404\u81ea\u7684\u5b8c\u6574\u7684\u5185\u5b58\u4e0a\u4e0b\u6587\uff1a\u5373\u6240\u6709\u6570\u636e\u548c\u4ee3\u7801\uff0c\u629b\u5f00\u6389\u4e92\u64cd\u4f5c\u6027\u7684\u9700\u8981\uff0c\u6bcf\u4e2a\u5b50\u7a0b\u5e8f\u90fd\u662f\u4e00\u4e2a\u72ec\u7acb\u771f\u6b63\u7684\u7a0b\u5e8f\u3002\u56e0\u4e3a\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u90fd\u53ef\u4ee5\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u4e2a\u8ba1\u7b97\u67b6\u6784\u7684\u6839\u672c\u53d8\u9769\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u9488\u5bf9\u5355\u5e94\u7528\u7684\uff0c\u56e0\u6b64\u6574\u4e2a\u5185\u5b58\u7684\u6570\u636e\u90fd\u53ef\u4ee5\u7531\u8be5\u7a0b\u5e8f\u81ea\u7531\u63a7\u5236\u548c\u5904\u7406\uff0c\u73b0\u5728\u7f16\u7a0b\u8bed\u8a00\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u6574\u4e2a\u7f16\u8bd1\u8fc7\u7a0b\u90fd\u662f\u56f4\u7ed5\u6574\u4e2a\u76ee\u6807\u8bbe\u8ba1\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u8ba9\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5171\u5904\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u8fd9\u4e2a\u9996\u5148\u5e26\u6765\u7684\u6311\u6218\u5c31\u662f\u6570\u636e\u5b89\u5168\uff1a\u5982\u679c\u6309\u7167\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\uff0c\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u6307\u9488\u4f7f\u53ef\u4ee5\u8bbf\u95ee\u4efb\u610f\u5730\u5740\u7684\uff0c\u8fd9\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u4e0d\u518d\u662f\u5b89\u5168\u7684\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6ca1\u6709\u4efb\u4f55\u673a\u5236\u53ef\u4ee5\u4fdd\u62a4\u8fd9\u4e2a\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u662f\u7b80\u5355\u5730\u5047\u8bbe\uff0c\u53ea\u8981\u4f60\u7684\u4ee3\u7801\u5728\u4e00\u4e2a\u8fd0\u884c\u65f6\u73af\u5883\u4e2d\u8fd0\u884c\uff0c\u90a3\u4e48\u6574\u4e2a\u5185\u5b58\u73af\u5883\u90fd\u662f\u4f60\u7684\uff0c\u4f60\u53ef\u4ee5\u4efb\u610f\u7834\u574f\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u56e0\u4e3a\u4ee3\u7801\u6709\u4efb\u610f\u7834\u574f\u7684\u80fd\u529b\uff0c\u624d\u9700\u8981\u5404\u79cd\u8bed\u8a00\u673a\u5236\uff08\u5982\u7c7b\u578b\u68c0\u67e5\uff09\u6765\u7ea6\u675f\u5f00\u53d1\u8005\u8fdb\u884c\u5b89\u5168\u7f16\u7a0b\uff0c\u800c\u50cfC\u8fd9\u6837\u7684\u8bed\u8a00\u5c31\u901a\u5e38\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u4e0d\u5b89\u5168\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u76ee\u524d\u6211\u4eec\u65e0\u6cd5\u4ece\u6839\u672c\u4e0a\u7a81\u7834\u8fd9\u4e00\u7f3a\u9677\uff0c\u53ef\u9884\u89c1\u7684\u77ed\u671f\u5c06\u6765\u4e5f\u4e0d\u4f1a\u6709\u7c7b\u4f3c\u7684\u8ba1\u7b97\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u9700\u6c42\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u57fa\u4e8e\u5f53\u524d\u7684\u7f16\u8bd1\u67b6\u6784\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u529f\u80fd\u3002\u800c\u5f53\u524d\u7f16\u8bd1\u4f53\u7cfb\u4e0b\u552f\u4e00\u80fd\u591f\u5b9e\u73b0\u8fd9\u6837\u529f\u80fd\u7684\u65b9\u5f0f\uff0c\u53ef\u80fd\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u8ba9\u5b50\u7a0b\u5e8f\u5728\u5806\u4e0a\u5206\u914d\u4efb\u4f55\u5185\u5b58\uff0c\u5b83\u4eec\u53ea\u80fd\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5806\u6808\u4e0a\u5b9e\u73b0\u53d8\u91cf\u7684\u5206\u914d\u548c\u4f7f\u7528"),"\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u5b50\u7a0b\u5e8f\u4e0d\u80fd\u4f7f\u7528\u6307\u9488\uff0c\u4e0d\u80fd\u6784\u9020\u5bf9\u8c61\uff0c\u65e0\u6cd5\u5f15\u7528\u5bf9\u8c61\uff0c\u5b83\u4eec\u80fd\u591f\u4f7f\u7528\u7684\u90fd\u662f\u5728\u6808\u4e0a\u5206\u914d\u7684\u503c\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u73b0\u4ee3\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u4e0a\u8ff0\u8fd9\u4e9b\u7ea6\u675f\u90fd\u662f\u6781\u5927\u7684\u9650\u5236\uff0c\u8fd9\u4e5f\u5fc5\u5c06\u5927\u5927\u9650\u5236\u7a0b\u5e8f\u7684\u80fd\u529b\u3002\u7136\u800cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u5373\u4f7f\u5728\u8fd9\u6837\u7684\u9650\u5236\u4e0b\uff0c\u8bed\u8a00\u80cc\u540e\u7684\u8fd0\u884c\u65f6\u548c\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9e\u73b0\u4efb\u4f55\u5176\u4ed6\u8bed\u8a00\u53ef\u4ee5\u5177\u5907\u7684\u80fd\u529b\u3002\u8fd9\u4e9b\u673a\u5236\u53c2\u89c1\u524d\u9762\u7ae0\u8282\u7684\u5185\u5bb9\uff0c\u4f46\u8fd9\u91cc\u603b\u7ed3\u5b83\u7684\u6838\u5fc3\u7406\u5ff5\u548c\u673a\u5236\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u601d\u7ef4\u8bc1\u660e\u591a\u4e2a\u72ec\u7acb\u7eaf\u51fd\u6570\u53ef\u4ee5\u590d\u5408\u6784\u6210\u6210\u590d\u6742\u51fd\u6570\uff0c\u8fdb\u800c\u89e3\u51b3\u4efb\u4f55\u903b\u8f91\u95ee\u9898\uff0c\u800c\u7eaf\u51fd\u6570\u672c\u8eab\uff0c\u9664\u4e86\u5b83\u6ca1\u6709\u5185\u90e8\u72b6\u6001\u8fd9\u4e00\u5916\u5728\u6982\u5ff5\u4e4b\u5916\uff0c\u4ece\u7f16\u8bd1\u673a\u5236\u6765\u8bb2\uff0c\u5b83\u7684\u4e00\u4e2a\u6838\u5fc3\u7684\u7ea6\u675f\u662f\u6bcf\u4e2a\u7eaf\u51fd\u6570\u53ea\u80fd\u5728\u6808\u4e0a\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u53d8\u91cf\u4f1a\u968f\u7740\u51fd\u6570\u7684\u8c03\u7528\u7ed3\u675f\u800c\u4e22\u5f03\uff0c\u6240\u4ee5\u5b83\u4eec\u4e0d\u80fd\u5b58\u50a8\u72b6\u6001\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5141\u8bb8\u4e00\u4e2a\u51fd\u6570\u80fd\u591f\u6784\u9020\u6216\u8005\u8bbf\u95ee\u4e00\u4e2a\u5bf9\u8c61\u6216\u8005\u5f15\u7528\u7c7b\u4f3c\uff0c\u90a3\u4e48\u8fd9\u4e2a\u51fd\u6570\u53ef\u80fd\u5c31\u4f1a\u8bb0\u4f4f\u67d0\u4e9b\u72b6\u6001"),"\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u7684\u673a\u5236\u5206\u6790\uff0c\u6211\u4eec\u5b8c\u5168\u6709\u53ef\u80fd\u6784\u9020\u4e00\u79cd\u591a\u5e94\u7528\u5bf9\u7b49\u5171\u4eab\u540c\u4e00\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u7684\u673a\u5236\uff0c\u5728\u6b64\u57fa\u7840\u4e4b\u4e0a\uff0c\u53ea\u9700\u8981\u505a\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u4e2a\u5b50\u51fd\u6570\u7ec4\u4ef6\u53ef\u4ee5\u7531\u8fd0\u884c\u65f6\u6765\u7ec4\u5408\u4e3a\u590d\u5408\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u6765\u7ba1\u7406\u5b50\u7a0b\u5e8f\u81ea\u8eab\u6240\u5c5e\u6570\u636e\uff08\u4e0d\u662f\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u6570\u636e\uff0c\u800c\u662f\u5b50\u7a0b\u5e8f\u7684\u6570\u636e\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u63d0\u4f9b\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u51fd\u6570\u76f8\u4e92\u8c03\u7528\u7684\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5728\u8fd9\u4e2a\u8c03\u7528\u7684\u8fc7\u7a0b\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u6743\u9650\u63a7\u5236")),(0,n.kt)("p",null,"RealityIS\u5b9e\u73b0\u4e86\u4e0a\u8ff0\u6240\u6709\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\u4e0d\u592a\u4e00\u6837\u7684\u662f\uff0c\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u66f4\u5f3a\u8c03\u4e24\u79cd\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3002\u800cRealityIS\u76ee\u524d\u53ea\u80fd\u652f\u6301\u5355\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\uff0c\u5c3d\u7ba1\u4eceJVM\u7684\u89d2\u5ea6\u770b\uff0c\u652f\u6301\u591a\u8bed\u8a00\u4e5f\u4e0d\u662f\u4e0d\u53ef\u80fd\uff0c\u4f46\u662f\u7531\u4e8eCreationScript\u672c\u8eab\u5df2\u7ecf\u662f\u4e00\u79cd\u6781\u5ea6\u7b80\u5316\u7684\u8bed\u8a00\uff0c\u8fd9\u6837\u7684\u591a\u8bed\u8a00\u652f\u6301\u6ca1\u6709\u592a\u5927\u7684\u610f\u4e49\u3002\u4f20\u7edf\u7684\u591a\u8bed\u8a00\u4e92\u64cd\u4f5c\u662f\u56e0\u4e3a\u4e0d\u540c\u8bed\u8a00\u4e4b\u95f4\u5f80\u5f80\u5b58\u5728\u7740\u8f83\u5927\u7684\u7279\u6027\u5dee\u5f02\uff0c\u6216\u8005\u64c5\u957f\u5904\u7406\u7684\u5b50\u7cfb\u7edf\u5177\u6709\u4e0d\u540c\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u95ee\u9898\u5728RealityIS\u4e2d\u662f\u4e0d\u5b58\u5728\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5982\u679c\uff0cRealityIS\u672c\u8eab\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u67b6\u6784\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u903b\u8f91\uff0c\u5e76\u4e14RealityIS\u5185\u90e8\u4e5f\u662f\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5bf9\u7b49\u7684\u5b50\u7a0b\u5e8f\u3002\u8fd9\u6837\u7684\u4e92\u64cd\u4f5c\u80fd\u529b\uff0c\u8981\u5927\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5173\u4e8e\u6269\u5c55\u6027\uff0c\u8fd9\u6d89\u53ca\u53e6\u4e00\u4e2a\u6982\u5ff5\uff0c\u5373\u6807\u51c6\u76f8\u5173\u7684\u95ee\u9898\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"},"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"),(0,n.kt)("p",null,"\u53ef\u6269\u5c55\u6027\u5b9e\u8d28\u662f\u6d89\u53ca\u6807\u51c6\u7684\u95ee\u9898\uff0c\u5e94\u7528\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u5fc5\u7136\u901a\u8fc7\u6807\u51c6\u6765\u5b9e\u73b0\uff0c\u56e0\u6b64\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\u662f\u5173\u4e8e\u80fd\u591f\u600e\u6837\u7b80\u5355\u9ad8\u6548\u5730\u6d89\u53ca\u4e00\u4e2a\u6807\u51c6\uff0c\u80fd\u591f\u8ba9\u5e0c\u671b\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5feb\u901f\u96c6\u6210\u652f\u6301\u8fd9\u6837\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u4e4b\u95f4\u6807\u51c6\u7684\u673a\u5236\u662f\u600e\u6837\u8fd0\u4f5c\u7684\u3002\u4f20\u7edf\u7684\u5927\u5e73\u53f0\u5982\u5fae\u4fe1\u548c\u652f\u4ed8\u5b9d\uff0c\u5b83\u4eec\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u5b83\u4eec\u63d0\u4f9b\u7684\u6807\u51c6\u5927\u5bb6\u90fd\u4f1a\u53bb\u9075\u5b88\uff0c\u5373\u4fbf\u8fd9\u79cd\u6807\u51c6\u7684\u89c4\u8303\u7279\u522b\u5dee\uff0c\u5f00\u53d1\u8005\u4e5f\u53ea\u80fd\u53bb\u517c\u5bb9\u548c\u652f\u6301\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\u5e73\u53f0\u4e4b\u95f4\u5b9a\u4e49\u6807\u51c6\u7684\u65b9\u5f0f\u5dee\u522b\u5f88\u5927\uff0c\u9020\u6210\u5206\u5316\uff0c\u5c0f\u5f00\u53d1\u8005\u9700\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u5927\u5e73\u53f0\u9002\u914d\u4e0d\u540c\u7684\u6807\u51c6\u5f62\u5f0f\u3002\u6bd4\u5982\u4e00\u4e2a\u6e38\u620f\u901a\u5e38\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u53d1\u884c\u5e73\u53f0\u4ecb\u5165\u5f88\u591a\u5bb6SDK\uff0c\u4f46\u672c\u8d28\u4e0a\u5b83\u4eec\u7684\u529f\u80fd\u90fd\u5dee\u4e0d\u591a\uff0c\u8fd9\u4e5f\u5bfc\u81f4\u4e00\u4e9b\u63d0\u4f9b\u7edf\u4e00\u670d\u52a1\u63a5\u53e3\u7684\u670d\u52a1\uff0c\u4f8b\u5982AnySDK\uff0c\u4f8b\u5982Unity\u63d0\u4f9b\u7684ARFundation\u5f88\u5927\u7a0b\u5ea6\u4e0a\u90fd\u662f\u5728\u7edf\u4e00ARCore\u548cARKit\u7684\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e09\u4e2a\u95ee\u9898\u662f\uff0c\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\u901a\u5e38\u53ea\u6709\u5c0f\u5e94\u7528\u53bb\u96c6\u6210\u5927\u5e73\u53f0\u6216\u8005\u5927\u5e94\u7528\uff0c\u800c\u5927\u5e94\u7528\u4e0d\u4f1a\u53bb\u517c\u987e\u5c0f\u5e94\u7528\u7684\u4e92\u64cd\u4f5c\u6027\u3002\u6240\u4ee5\u8fd9\u662f\u4e00\u79cd\u9644\u5c5e\u5e94\u7528\uff0c\u9644\u5c5e\u5f62\u6001\uff0c\u800c\u4e0d\u662f\u4e00\u79cd\u5171\u751f\u5e73\u7b49\u5f62\u6001\u3002\u4f46\u8fd9\u79cd\u5f62\u6001\u5176\u663e\u7136\u7684\u7f3a\u70b9\u662f\uff0c\u8fd9\u79cd\u751f\u6001\u5b83\u7684\u603b\u4f53\u529f\u80fd\u5c31\u662f\u56f4\u7ed5\u5927\u5e94\u7528\u6216\u8005\u5927\u5e73\u53f0\u7684\u8303\u56f4\u53bb\u6269\u5c55\u7684\u8303\u56f4\uff0c\u8fd9\u4e2a\u8303\u56f4\u7684\u5927\u5c0f\u57fa\u672c\u4e0a\u662f\u53d7\u5927\u5e73\u53f0\u672c\u8eab\u7684\u6027\u8d28\u6240\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u56f4\u7ed5YouTube\u7684\u5c31\u662f\u89c6\u9891\u751f\u6001\uff0c\u56f4\u7ed5\u5fae\u4fe1\u7684\u793e\u4ea4\u751f\u6001\uff0c\u4ee5\u53ca\u56f4\u7ed5\u652f\u4ed8\u5b9d\u7684\u7535\u5546\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u8981\u60f3\u5f00\u53d1\u4e00\u4e2a\u5171\u751f\u5171\u4eab\u7684\u5f00\u653e\u5e73\u53f0\uff0c\u663e\u7136\u6807\u51c6\u7684\u5f62\u6001\u9700\u8981\u53d8\u9769\u3002\u8fd9\u81f3\u5c11\u9700\u8981\u601d\u8003\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u7edf\u4e00\u6807\u51c6\u5236\u5b9a\u5f62\u5f0f\uff0c\u600e\u6837\u8ba9\u5927\u5bb6\u5236\u5b9a\u66f4\u5bb9\u6613\u96c6\u6210\u3001\u66f4\u7edf\u4e00\u3001\u66f4\u7b80\u5355\u5730\u89c4\u8303\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u662f\u8ba9\u5f71\u54cd\u529b\u6ca1\u90a3\u4e48\u5927\u7684\u7ec4\u7ec7\u6216\u8005\u7cfb\u7edf\u5236\u5b9a\u7684\u6807\u51c6\uff0c\u80fd\u591f\u6709\u673a\u4f1a\u6162\u6162\u8fdb\u5316\uff0c\u8fdb\u800c\u6709\u53ef\u80fd\u8ba9\u5f71\u54cd\u529b\u66f4\u5927\u7684\u7cfb\u7edf\u6765\u53cd\u5411\u652f\u6301\uff0c\u5b9e\u73b0\u7cfb\u7edf\u4e4b\u95f4\u7684\u5bf9\u7b49")),(0,n.kt)("p",null,"\u4ee5\u524d\u662f\u901a\u8fc7\u5f71\u54cd\u529b\u5e26\u52a8\u6807\u51c6\uff0c\u7531\u5b83\u4eec\u6765\u5236\u5b9a\u6807\u51c6\uff0c\u6240\u4ee5\u6574\u4e2a\u4e92\u64cd\u4f5c\u7684\u751f\u6001\u6838\u5fc3\u8fd8\u662f\u5927\u5e73\u53f0\u7684\u5730\u4f4d\u3002\u5c0f\u5e94\u7528\u6ca1\u6709\u673a\u4f1a\u53bb\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u66f4\u5e0c\u671b\u5b83\u50cf\u771f\u5b9e\u793e\u4f1a\uff0c\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u90fd\u53ef\u4ee5\u53bb\u53d1\u8d77\u81ea\u5df1\u7684\u751f\u610f\uff0c\u53ea\u8981\u5b83\u4eec\u7684\u751f\u610f\u505a\u5f97\u8db3\u591f\u597d\uff0c\u6162\u6162\u5c31\u4f1a\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002\u800c\u4e14\uff0c\u5f53\u5176\u4ed6\u7684\u7ec4\u7ec7\u6216\u8005\u4e2a\u4eba\u53d1\u73b0\u8fd9\u4e2a\u4ea7\u54c1\u7684\u65f6\u5019\uff0c\u4ed6\u4eec\u4e5f\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u4e0e\u4e4b\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f9b\u5e94\u5173\u7cfb\uff0c\u800c\u975e\u5e73\u53f0\u5f71\u54cd\u529b\u7684\u5ef6\u4f38\uff0c\u624d\u80fd\u771f\u6b63\u4fc3\u8fdb\u521b\u65b0\u3002\u800c\u5927\u5e73\u53f0\u4f1a\u627c\u6740\u5f88\u591a\u521b\u65b0\uff0c\u5e76\u4e14\u4f1a\u62a2\u593a\u5f88\u591a\u5177\u6709\u521b\u9020\u80fd\u529b\u7684\u4e2a\u4eba\u6216\u8005\u7ec4\u7ec7\u7684\u8d44\u6e90\uff0c\u800c\u8fd9\u9760\u7684\u4e0d\u662f\u5b9e\u529b\u548c\u4ea7\u54c1\uff0c\u800c\u5355\u7eaf\u5c31\u662f\u5e73\u53f0\u7684\u5784\u65ad\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e73\u53f0\u7684\u5f71\u54cd\u529b\u4e0d\u518d\u662f\u4e3b\u5bfc\u7684\uff0c\u90a3\u4e48\u6807\u51c6\u672c\u8eab\u5c31\u5e94\u8be5\u662f\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u56e0\u7d20\uff0c\u5728\u5e73\u53f0\u7ed9\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u63d0\u4f9b\u516c\u5e73\u673a\u4f1a\u4f7f\u5927\u5bb6\u90fd\u6709\u673a\u4f1a\u6210\u957f\u7684\u65f6\u5019\uff0c\u8fd8\u9700\u8981\u4e00\u4e2a\u80fd\u591f\u4f7f\u4e4b\u4e0e\u5176\u4ed6\u7ec4\u7ec7\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u7684\u7b80\u5355\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5c06\u6807\u51c6\u5355\u72ec\u5206\u79bb\u5904\u7406\uff0c\u5206\u79bb\u4e4b\u540e\uff0c\u6807\u51c6\u7684\u5730\u4f4d\u63d0\u5347\uff0c\u6807\u51c6\u662f\u516c\u7acb\u7ec4\u7ec7\uff0c\u5b83\u4e0d\u53d7\u5176\u4ed6\u5b9e\u9645\u5f00\u53d1\u4ea7\u54c1\u7684\u7ec4\u7ec7\u6216\u4e2a\u4eba\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u5b83\u4eec\u53ef\u4ee5\u5f62\u6210\u5efa\u8bae\uff0c\u4f46\u603b\u7684\u6765\u8bf4\uff0c\u90a3\u4e9b\u6709\u5f71\u54cd\u529b\u7684\u5927\u5e94\u7528\u6ca1\u6709\u529e\u6cd5\u901a\u8fc7\u6807\u51c6\u53bb\u627c\u6740\u5c0f\u5e94\u7528\uff0c\u56e0\u4e3a\u6807\u51c6\u672c\u8eab\u5177\u6709\u4e00\u4e2a\u5de8\u5927\u7684\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6807\u51c6\u662f\u5f00\u653e\u7684")),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u53ea\u662f\u901a\u4fe1\u63a5\u53e3\uff0c\u5b83\u4e0d\u662f\u7ba1\u9053\u6216\u5176\u4ed6\u4e1c\u897f\uff0c\u4f60\u6ca1\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5173\u4e8e\u6807\u51c6\u76f8\u5173\u7684\u5185\u5bb9\u53c2\u89c14.11\u8282\uff0cRealityIS\u7684\u6807\u51c6\u673a\u5236\u4f7f\u5f97\u4efb\u4f55\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u5c31\u4efb\u4f55\u611f\u5174\u8da3\u90e8\u5206\u8fdb\u884c\u901a\u4fe1\u3002"),(0,n.kt)("h4",{id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"},"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u7406\u89e3RealityIS\u7684\u4e92\u64cd\u4f5c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u4e92\u64cd\u4f5c\u6027\u4e0e\u53ef\u7ec4\u5408\u6027\u7684\u5173\u7cfb\uff0cRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u4ec5\u4ec5\u662f\u4e3a\u4e86\u5e94\u7528\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u8fd9\u79cd\u901a\u4fe1\u7684\u76ee\u7684\u4e3b\u8981\u662f\u4e3a\u4e86\u5b9e\u73b0\u81ea\u52a8\u7ec4\u5408\uff0c\u4ece\u800c\u5927\u5927\u7b80\u5316\u5e94\u7528\u5f00\u53d1\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(5335).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u5982\u4eca\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u867d\u7136\u901a\u8fc7\u8f6f\u4ef6\u67b6\u6784\u8bbe\u8ba1\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u505a\u5230\u4e00\u5b9a\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u5408\u6027\u51e0\u4e4e\u90fd\u5e02\u9488\u5bf9\u5f00\u53d1\u8005\u7684\uff0c\u666e\u901a\u7528\u6237\u5f88\u96be\u5229\u7528\u5230\u8fd9\u79cd\u80fd\u529b\uff0c\u8fd9\u662f\u56e0\u4e3a\u8fd9\u4e9b\u903b\u8f91\u4e0a\u7684\u7ec4\u5408\uff0c\u672c\u8d28\u4e0a\u5c31\u662f\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u51fd\u6570\u8c03\u7528\uff0c\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u7684\u4f1a\u6d89\u53ca\u5230\u51fd\u6570\u7684\u5b9a\u4e49\u3001\u5730\u5740\u3001\u53c2\u6570\u5217\u8868\u3001\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u8fd9\u4e9b\u7a0b\u5e8f\u7684\u673a\u5236\uff0c\u800c\u666e\u901a\u7528\u6237\u65e2\u65e0\u6cd5\u5b66\u4e60\u548c\u7406\u89e3\u8fd9\u4e9b\u6982\u5ff5\uff0c\u4e5f\u5f88\u96be\u5728\u8fd0\u884c\u65f6\u4e0d\u901a\u8fc7\u4ee3\u7801\u7684\u65b9\u5f0f\u53bb\u62ff\u5230\u8fd9\u4e00\u5207\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7RealityIS\u9488\u5bf9\u4e92\u64cd\u4f5c\u6027\u8bbe\u8ba1\u7684\u4e00\u5957\u6807\u51c6\u8fd0\u4f5c\u673a\u5236\uff0cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u9690\u5f0f\u5730\u8fdb\u884c\u51fd\u6570\u8c03\u7528\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u4e4b\u95f4\u4e0d\u518d\u9700\u8981\u663e\u5f0f\u6307\u5b9a\u8c03\u7528\u51fd\u6570\u7684\u65b9\u6cd5\u540d\u79f0\u3001\u51fd\u6570\u5730\u5740\u3001\u53c2\u6570\u6570\u91cf\u3001\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u4fe1\u606f\uff0c\u800c\u662f\u5b83\u4eec\u4ec5\u4ec5\u9700\u8981\u9488\u5bf9\u4e00\u5b9a\u7684\u6807\u51c6\u63a5\u53e3\u5b9e\u73b0\u81ea\u5df1\u611f\u5174\u8da3\u7684\u529f\u80fd\u5373\u53ef"),"\u3002\u6b63\u662f\u8fd9\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u7528\u6237\u4e0d\u9700\u8981\u53bb\u4e86\u89e3\u4e00\u4e9b\u7a0b\u5e8f\u672f\u8bed\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u88ab\u5f53\u505a\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u529f\u80fd\u770b\u5f85\uff0c\u56e0\u6b64\u4f7f\u5f97\u666e\u901a\u7528\u6237\u80fd\u591f\u6bd4\u8f83\u7b80\u5355\u5730\u53bb\u5b9a\u4e49\u81ea\u5df1\u7684\u7a0b\u5e8f\u6216\u8005\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cRealityIS\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u5176\u5b9e\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u5b83\u7684\u4e92\u64cd\u4f5c\u6027\u673a\u5236\u6765\u5b9e\u73b0\u7684\uff0c\u5426\u5219\u6211\u4eec\u7528\u4e8e\u65e0\u6cd5\u7834\u9664\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u8fd9\u6837\u5373\u4f7f\u6709\u8f83\u597d\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u4e5f\u53ea\u80fd\u4e3b\u8981\u9488\u5bf9\u4e13\u4e1a\u5f00\u53d1\u8005\u3002RealityIS\u901a\u8fc7\u4e92\u64cd\u4f5c\u6027\u5b9e\u73b0\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f7f\u5f97RealityIS\u5e73\u53f0\u7684\u4ef7\u503c\u6709\u4e86\u66f4\u5927\u7684\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u76f8\u5173\u5185\u5bb9\u53c2\u89c12.7.10\u8282\u3002"),(0,n.kt)("h3",{id:"295-\u4ea4\u4e92\u6a21\u5f0f"},"2.9.5 \u4ea4\u4e92\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u673a\u5236\u672c\u8eab\uff0c\u7a0b\u5e8f\u4e4b\u95f4\u7684\u901a\u4fe1\u6216\u8005\u4e92\u64cd\u4f5c\u5f80\u5f80\u8fd8\u6d89\u53ca\u4e00\u4e2a\u8c03\u7528\u65b9\u5411\u7684\u95ee\u9898\uff0c\u8fd9\u4e2a\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\u5c24\u5176\u660e\u663e\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u7279\u522b\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\uff0c\u65b9\u6cd5\u548c\u6570\u636e\u5f80\u5f80\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u6216\u8005\u4e00\u4e2a\u76f8\u5bf9\u76f8\u5173\u7684\u6a21\u5757\u5f53\u524d\uff0c\u8fd9\u5c31\u5bfc\u81f4\u51fd\u6570\u7684\u4ea4\u4e92\u5177\u6709\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u8fd9\u4e9b\u6a21\u5f0f\u5bf9\u6574\u4f53\u67b6\u6784\u548c\u590d\u6742\u5ea6\u90fd\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u4ee5\u9762\u5411\u5bf9\u8c61\u4e3a\u4f8b\uff0c\u8bbe\u60f3\u6709\u4e00\u4e2a\u89d2\u8272\u5bf9\u8c61A\uff0c\u4f7f\u7528\u4e86\u4e00\u4e2a\u9053\u5177\u780d\u4f24\u4e86\u4e00\u4e2a\u602a\u7269\u5bf9\u8c61B\uff0c\u5bf9\u5176\u9020\u62105\u70b9\u4f24\u5bb3\uff0c\u6839\u636e\u5176\u4ea4\u4e92\u6a21\u5f0f\u7684\u4e0d\u540c\uff0c\u8fd9\u91cc\u53ef\u80fd\u6709\u4e00\u4e0b\u4e09\u4e2d\u903b\u8f91\u7ec4\u7ec7\u65b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9020\u6210\u4f24\u5bb3\u7684\u4ee3\u7801\u5c01\u88c5\u5728A\u7c7b\u4e2d\uff0c\u56e0\u4e3a\u6211\u4eec\u8ba4\u4e3a\u662f\u89d2\u8272\u7684\u52a8\u4f5c\u5bfc\u81f4\u7684\u7ed3\u679c\uff0c\u6240\u4ee5A\u7c7b\u4e2d\u7684\u67d0\u4e2a\u65b9\u6cd5\u9700\u8981\u53d6\u5f97\u5bf9\u8c61B\u7684\u5f15\u7528\uff0c\u7136\u540e\u5bf9\u5bf9\u8c61B\u4e2d\u7684HP\u53d8\u91cf\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u6b64\u8fd9\u4e5f\u8981\u6c42B\u66b4\u9732\u8be5\u5c5e\u6027\u7684\u8bbf\u95ee\u6743\u9650\u3002\u5f53\u7136\u6211\u4eec\u53ef\u4ee5\u5c06\u5bf9\u8fd9\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u6539\u4e3a\u65b9\u6cd5\u7684\u5f62\u5f0f\uff0c\u8ba9A\u5bf9\u8c03\u7528\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u4f46\u4e24\u8005\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u95ee\u9898\u662fA\u9700\u8981\u8c03\u7528B\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u89e3\u9664\u4e24\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u53e6\u4e00\u4e2a\u65b9\u6cd5\u662f\u91c7\u7528\u54cd\u5e94\u7684\u6a21\u5f0f\uff0cA\u4e0d\u4f1a\u76f4\u63a5\u4fee\u6539B\uff0c\u800c\u662f\u53d1\u51fa\u4e00\u4e2a\u6d88\u606f\u5230\u4e00\u4e2a\u5730\u65b9\uff0c\u7136\u540eB\u4f1a\u53bb\u8fd9\u4e2a\u5730\u65b9\u68c0\u6d4b\u8fd9\u4e2a\u6d88\u606f\uff0c\u5982\u679c\u53d1\u73b0\u5177\u6709\u67d0\u6761\u6d88\u606f\uff0c\u5219\u6267\u884c\u4e00\u4e2a\u6389\u8840\u7684\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u8fc7\u7a0bA\u548cB\u4e0d\u4f1a\u8026\u5408\uff0c\u8fd9\u4e2a\u5177\u4f53\u7684\u6263\u8840\u64cd\u4f5c\u4e3b\u8981\u662f\u7531B\u53d1\u8d77\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u8fd8\u6709\u4e00\u79cd\u975e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\uff0c\u8fd9\u79cd\u65b9\u6cd5\u4ee5\u65b9\u6cd5\u4e3a\u6838\u5fc3\uff0c\u5b83\u540c\u65f6\u4f20\u5165A\u548cB\u4e24\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c3d\u7ba1A\u548cB\u4e4b\u95f4\u4e0d\u4f1a\u76f4\u63a5\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u7684\u610f\u4e49\u4e0d\u5927\uff0c\u9664\u4e86\u8981\u5728\u989d\u5916\u4e0d\u76f8\u5173\u7684\u5730\u65b9\u53bb\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\uff0c\u800c\u4e14\u4e00\u65e6\u7531\u4efb\u4f55\u7ed3\u6784\u7684\u4fee\u6539\uff0c\u51e0\u4e2a\u5730\u65b9\u4e5f\u4f1a\u53d7\u5230\u5f71\u54cd\u3002")),(0,n.kt)("p",null,"\u9009\u62e9\u7b2c\u4e00\u8fd8\u662f\u7b2c\u4e8c\u79cd\uff0c\u4e00\u822c\u7684\u7f16\u7a0b\u8bed\u8a00\u5e76\u6ca1\u6709\u9650\u5236\uff0c\u4f46\u662f\u5728\u5927\u90e8\u5206\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u9009\u62e9\u4e00\u7684\u53ef\u80fd\u4f1a\u66f4\u591a\uff0c\u8fd9\u79cd\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e8c\u4f1a\u5e26\u6765\u4e00\u4e9b\u989d\u5916\u7684\u7ed3\u6784\u4ee5\u53ca\u7ef4\u62a4\uff0c\u5e76\u4e14\u6ca1\u6709\u4e00\u90a3\u4e48\u5bb9\u6613\u8c03\u5f0f\u3002\u4f46\u662f\u4e00\u5b9e\u9645\u4e0a\u4f1a\u5e26\u6765\u5f88\u591a\u95ee\u9898\uff0c\u6211\u4eec\u628a\u4e00\u79f0\u4e3a\u4e3b\u52a8\u5f0f\uff0c\u76f8\u5e94\u7684\u628a\u4e8c\u79f0\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u76f4\u63a5\u5f15\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c \u5e76\u901a\u8fc7\u8c03\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u65b9\u6cd5\u6216\u8005\u5c5e\u6027\u8bbf\u95ee\u6765\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u79cd\u65b9\u5f0f\u51e0\u4e4e\u662f\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u652f\u6301\u7684\u673a\u5236\uff0c\u5b83\u4e5f\u662f\u7f16\u5199\u8d77\u6765\u6700\u76f4\u63a5\u548c\u7b80\u5355\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u7531\u5f88\u591a\u7f3a\u70b9\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u7684\u95ee\u9898\u5927\u6982\u53ef\u4ee5\u5f52\u4e3a\u4ee5\u4e0b\u51e0\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u6269\u5c55\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u8026\u5408\uff0c\u5f88\u660e\u663eA\u76f4\u63a5\u8c03\u7528\u4e86B\uff0cA\u548cB\u4e4b\u95f4\u5b58\u5728\u76f4\u63a5\u8026\u5408\uff0c\u5982\u679cA\u548cB\u4e4b\u95f4\u76f8\u5173\u8c03\u7528\u90e8\u5206\u7684\u7ed3\u6784\u53d1\u751f\u53d8\u5316\uff0c\u4e24\u8005\u90fd\u5fc5\u987b\u54cd\u5e94\u8c03\u6574\u3002\u6b64\u5916\uff0c\u8026\u5408\u5e26\u6765\u7684\u66f4\u5927\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u4e3a\u4e86\u8bbf\u95eeB\u7684\u6210\u5458\uff0c\u7c7bB\u4e0d\u5f97\u4e0d\u5c06\u8fd9\u4e9b\u53d8\u91cf\u6216\u65b9\u6cd5\u7684\u8bbf\u95ee\u6743\u9650\u516c\u5f00\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4efb\u4f55\u4ee3\u7801\u7406\u8bba\u4e0a\u90fd\u53ef\u4ee5\u8bbf\u95ee\uff0c\u9020\u6210\u8f83\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002\u5c3d\u7ba1\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u6210\u5458\u7684\u6743\u9650\u8303\u56f4\uff0c\u4f8b\u5982\u7a0b\u5e8f\u96c6\u5185\u90e8\uff0c\u53cb\u5143\u7b49\u673a\u5236\uff0c\u4f46\u8fd9\u4e9b\u6743\u9650\u63a7\u5236\u7684\u7075\u6d3b\u6027\u8fdc\u8fdc\u4e0d\u591f\u3002"),(0,n.kt)("p",null,"\u5176\u6b21\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5e26\u6765\u903b\u8f91\u4e0a\u7684\u4e00\u4e9b\u5173\u7cfb\u6df7\u4e71\uff0c\u6709\u65f6\u5019A\u548cB\u76f4\u63a5\u5e76\u6ca1\u6709\u5fc5\u8981\u7684\u56e0\u679c\u5173\u7cfb\uff0c\u4f46\u662f\u5176\u6d41\u7a0b\u4e0a\u4e5f\u53ef\u4ee5\u8fd9\u6837\u53bb\u6267\u884c\u3002\u518d\u6bd4\u5982\u6709\u65f6\u5019\u6211\u4eec\u5355\u7eaf\u4ece\u7c7bB\u53bb\u8003\u5bdf\u5b83\u7684\u529f\u80fd\uff0c\u6211\u4eec\u53ef\u80fd\u6839\u672c\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u4f1a\u88ab\u8c03\u7528\uff0c\u88ab\u8c01\u8c03\u7528\uff0c\u6211\u4eec\u65e0\u6cd5\u9884\u6d4b\u7a0b\u5e8f\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5c24\u5176\u662f\u5728\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\u4e2d\u518d\u5939\u6742\u7740\u72b6\u6001\u7684\u60c5\u51b5\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u7c7bB\u7684\u4e00\u4e9b\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u6709\u65f6\u5019\u53ef\u80fd\u5e76\u4e0d\u4ec5\u4ec5\u6765\u81eaA\uff0c\u8fd8\u8981\u8003\u8651\u5176\u4ed6\u5bf9\u8c61\u7684\u5f71\u54cd\uff0c\u4f46\u662fA\u4f5c\u4e3a\u8c03\u7528\u65b9\u53ef\u80fd\u6839\u672c\u65e0\u6cd5\u53bb\u611f\u77e5\u8fd9\u6837\u7684\u4e8b\u60c5\u3002\u5b9e\u9645\u4e0a\u901a\u8fc7\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u53ef\u77e5\uff0c\u54cd\u5e94\u5f0f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\u624d\u662f\u5927\u90e8\u5206\u6d3b\u52a8\u8fdb\u884c\u4ea4\u4e92\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53ef\u6269\u5c55\u6027\uff0c\u8fd9\u8ddf\u8026\u5408\u5b9e\u9645\u4e0a\u4e5f\u662f\u76f8\u5173\u7684\uff0c\u7531\u4e8eB\u6267\u884c\u4ec0\u4e48\u6837\u7684\u903b\u8f91\u4ee5\u53ca\u4ec0\u4e48\u65f6\u5019\u6267\u884c\u7531A\u6765\u63a7\u5236\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u5982\u679cB\u5bf9\u4e8e\u67d0\u4e00\u7c7b\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c\u6709\u5176\u4ed6\u7684\u4e00\u4e9b\u903b\u8f91\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u53d7\u5176\u4ed6\u4e00\u4e9b\u65b0\u52a0\u5165\u7684\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u5b83\u5f88\u96be\u901a\u8fc7\u5728\u4e0d\u5f71\u54cdA\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u6216\u6269\u5c55\u3002\u8fd9\u79cd\u6269\u5c55\u4e0d\u4ec5\u4ec5\u662f\u8981\u6c42A\u4fee\u6539\u63a5\u53e3\u90a3\u4e48\u7b80\u5355\uff0c\u6709\u65f6\u5019\u6d89\u53ca\u4f1a\u878d\u5408\u66f4\u591a\u7684\u903b\u8f91\uff0c\u8fd9\u6837\u8c03\u6574\u8d77\u6765\u7684\u4ee3\u4ef7\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u6211\u4eec\u540e\u9762\u4f1a\u770b\u5230\uff0c\u5982\u679c\u91c7\u7528\u54cd\u5e94\u5f0f\uff0cA\u7684\u5f71\u54cd\u5c31\u53ea\u662f\u4f1a\u62bd\u8c61\u4e3a\u4e00\u4e2a\u56e0\u7d20\uff0c\u800cB\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u5404\u79cd\u56e0\u7d20\u4e4b\u540e\u505a\u51fa\u771f\u6b63\u7684\u54cd\u5e94\u3002\u5373\u4f7f\u54cd\u5e94\u7684\u903b\u8f91\u6216\u8005\u89c4\u5219\u53d8\u4e86\uff0c\u4f46\u662f\u53ea\u8981A\u8fd9\u4e2a\u56e0\u7d20\u672c\u8eab\u7684\u903b\u8f91\u6ca1\u53d8\uff0cA\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u4efb\u4f55\u4fee\u6539\u3002\u8fd9\u6837\u7684\u65b9\u5f0f\u5c31\u4f7f\u5f97B\u5f88\u5bb9\u6613\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u4e0e\u6269\u5c55\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898\uff0c\u5bf9\u4e2a\u5bf9\u8c61\u5bf9B\u7684\u8c03\u7528\u5b8c\u5168\u4e0d\u4f1a\u4e5f\u4e0d\u53ef\u80fd\u8003\u8651\u5230B\u7684\u72b6\u6001\uff0c\u4f8b\u5982\u662f\u5426\u6b63\u5728\u88ab\u5176\u4ed6\u7684\u8fdb\u7a0b\u8bbf\u95ee\u3002\u8fd9\u4e2d\u60c5\u51b5\u5c31\u5f88\u5bb9\u6613\u5bfc\u81f4\u5171\u4eab\u7ade\u4e89\uff0c\u800c\u4e14\u9664\u4e86\u52a0\u9501\u51e0\u4e4e\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002\u800c\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u5b83\u4eec\u901a\u5e38\u53ef\u4ee5\u901a\u8fc7\u5148\u6536\u96c6\u5404\u79cd\u5f71\u54cd\u56e0\u7d20\uff0c\u7136\u540e\u8fdb\u884c\u7edf\u4e00\u7684\u6d88\u606f\u5904\u7406\uff0c\u800c\u907f\u514d\u4efb\u4f55\u5e76\u53d1\u7684\u95ee\u9898\u3002\u56e0\u4e3a\u5185\u90e8\u7684\u6d88\u606f\u59cb\u7ec8\u662f\u4e32\u884c\u7684\u65b9\u5f0f\u6267\u884c\u3002"),(0,n.kt)("h4",{id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94"},"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94"),(0,n.kt)("p",null,"\u73b0\u4ee3\u7f16\u7a0b\u7684\u4e00\u4e9b\u673a\u5236\u5f80\u5f80\u662f\u53d7\u786c\u4ef6\u67b6\u6784\uff0c\u4ee5\u53ca\u7f16\u7a0b\u8bed\u8a00\u7f16\u8bd1\u8fc7\u7a0b\u7684\u4e00\u4e9b\u9650\u5236\u6216\u5f71\u54cd\uff0c\u5b83\u4eec\u539f\u751f\u5e76\u4e0d\u662f\u4e3a\u4e86\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u4ea4\u4e92\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u9996\u5148\u6765\u89c2\u5bdf\u4e00\u4e0b\u771f\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u6d3b\u52a8\u4ea4\u4e92\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u8003\u8651\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4eba\u7c7b\u6d3b\u52a8\uff0c\u6bd4\u5982\u6cd5\u5f8b\uff0c\u56fd\u5bb6\u4f1a\u6307\u5b9a\u4e00\u4e9b\u6cd5\u5f8b\u4ee5\u7ea6\u675f\u4eba\u4eec\u7684\u4e00\u4e9b\u884c\u4e3a\uff0c\u4ece\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u89d2\u5ea6\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u7f16\u5199\u4e00\u4e2a\u6cd5\u5f8b\u673a\u6784\u7684\u5bf9\u8c61A\uff0c\u7136\u540e\u7528B\u6765\u8868\u793a\u4eba\u7c7b\uff0cA\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528B\u7684\u5c5e\u6027\u6216\u8005\u65b9\u6cd5\u8981\u6c42B\u4e0d\u80fd\u8fdd\u53cd\u67d0\u4e2a\u6cd5\u5f8b\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5728\u4eba\u7c7b\u6d3b\u52a8\u4e2d\uff0c\u4eba\u662f\u601d\u7ef4\u7684\u4e3b\u4f53\uff0c\u4eba\u7c7b\u7684\u6574\u4e2a\u6d3b\u52a8\u51e0\u4e4e\u90fd\u662f\u7531\u4f17\u591a\u4e2a\u4eba\u610f\u5fd7\u51b3\u5b9a\u7684\u7ed3\u679c\u3002\u867d\u7136\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5728\u5b8f\u89c2\u7684\u89d2\u5ea6\u770b\uff0c\u4e2a\u4eba\u7684\u610f\u5fd7\u662f\u53d7\u4e00\u5b9a\u7684\u7ea6\u675f\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5e76\u4e0d\u80fd\u7531\u6b64\u5c31\u6309\u7167\u4e3b\u52a8\u5f0f\u7684\u65b9\u5f0f\u5bf9\u6574\u4e2a\u4eba\u7c7b\u6d3b\u52a8\u8fdb\u884c\u7f16\u7a0b\u3002\u9664\u4e86\u8fd9\u79cd\u8d1f\u9762\u7684\u4e8b\u5b9c\uff0c\u5373\u4f7f\u662f\u6b63\u9762\u7684\u6d3b\u52a8\u4e5f\u662f\u5982\u6b64\uff0c\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u7ed9\u522b\u4eba\u5f88\u591a\u5fe0\u544a\u6216\u8005\u5efa\u8bae\uff0c\u4f46\u5373\u4f7f\u8fd9\u4e9b\u5fe0\u544a\u6216\u8005\u5efa\u8bae\u771f\u6b63\u662f\u88ab\u8bc1\u660e\u6709\u4ef7\u503c\u7684\uff0c\u5176\u4ed6\u4eba\u4ecd\u7136\u6709\u53ef\u80fd\u56e0\u4e3a\u67d0\u4e9b\u56e0\u7d20\u800c\u9009\u62e9\u4e0d\u53bb\u91c7\u7eb3\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Brain-to-Brain-Communication",src:l(3136).Z,width:"850",height:"450"})),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u6b63\u662f\u4e00\u79cd\u54cd\u5e94\u5f0f\u7684\u4f53\u73b0\u3002\u54cd\u5e94\u5f0f\u7f16\u7a0b\u662f\u4ee5\u63a5\u53d7\u4fe1\u606f\u8005\u4e3a\u4e2d\u5fc3\uff0c\u5b83\u5047\u8bbe\u63a5\u53d7\u4fe1\u606f\u7684\u5bf9\u8c61\u62e5\u6709\u81ea\u6211\u610f\u5fd7\uff0c\u5b83\u5e94\u8be5\u7531\u81ea\u5df1\u6765\u51b3\u5b9a\u5e94\u8be5\u600e\u6837\u57fa\u4e8e\u5916\u90e8\u7684\u4fe1\u606f\u8fdb\u884c\u51b3\u7b56\u548c\u54cd\u5e94\u3002\u6b63\u662f\u8fd9\u79cd\u81ea\u6211\u610f\u5fd7\uff0c\u4ece\u7a0b\u5e8f\u7684\u89d2\u5ea6\u4e0d\u5149\u4f7f\u5176\u66f4\u5177\u6709\u6269\u5c55\u6027\uff0c\u4ece\u8fdb\u5316\u7684\u89d2\u5ea6\uff0c\u8fd9\u6837\u7684\u7cfb\u7edf\u80fd\u591f\u4ea7\u751f\u51fa\u66f4\u52a0\u4e30\u5bcc\u800c\u521b\u65b0\u7684\u6210\u679c\u3002\u800c\u5982\u679c\u662f\u4e3b\u52a8\u5f0f\u7f16\u7a0b\uff0c\u5728\u5f88\u591a\u89c4\u5219\u51e0\u4e4e\u5c31\u662f\u4e00\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u4e2a\u7cfb\u7edf\u5f88\u96be\u5177\u5907\u6709\u8fdb\u5316\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u518d\u6765\u5206\u6790\u4e00\u4e9b\u5927\u81ea\u7136\u6d3b\u52a8\uff0c\u5c3d\u7ba1\u5b83\u4eec\u770b\u8d77\u6765\u7269\u7406\u5ba2\u89c2\u89c4\u5f8b\u662f\u56fa\u5b9a\u7684\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u6765\u5904\u7406\u6240\u6709\u4e8b\u60c5\u3002\u4f46\u5b9e\u9645\u4e0a\u4efb\u4f55\u4e8b\u60c5\u90fd\u662f\u53d7\u5230\u5404\u79cd\u590d\u6742\u73af\u5883\u56e0\u7d20\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u7269\u4f53\u4ece\u7a7a\u4e2d\u6389\u4e0b\u6765\uff0c\u53d6\u51b3\u4e8e\u5730\u9762\u662f\u6c34\u3001\u6ce5\u571f\u3001\u6df7\u6ce5\u571f\u3001\u706b\u7b49\u5404\u79cd\u60c5\u51b5\uff0c\u5176\u7ed3\u679c\u4f1a\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\uff0c\u4efb\u4f55\u4e8b\u60c5\u7684\u5f71\u54cd\uff0c\u90fd\u65e0\u6cd5\u6709\u786e\u5b9a\u6027\u7684\u56e0\u7d20\uff0c\u5982\u679c\u4e00\u4e2a\u7269\u4f53\u7684\u67d0\u4e2a\u7ed3\u679c\u9700\u8981\u6709\u5916\u90e8\u67d0\u4e2a\u5bf9\u8c61\u6765\u51b3\u5b9a\uff0c\u8fd9\u901a\u5e38\u662f\u4e0d\u5408\u9002\u7684\u3002\u65e2\u4e0d\u5177\u5907\u6269\u5c55\u6027\uff0c\u540c\u65f6\u4e5f\u4e0d\u80fd\u4fdd\u8bc1\u6b63\u786e\u6027\u3002\u53ea\u6709\u7269\u4f53\u81ea\u8eab\uff0c\u5b83\u4efb\u4f55\u65f6\u523b\u90fd\u80fd\u591f\u611f\u77e5\u81ea\u5df1\u7684\u73af\u5883\uff0c\u53ea\u6709\u57fa\u4e8e\u6240\u6709\u73af\u5883\u56e0\u7d20\u7684\u7efc\u5408\u6027\u5224\u65ad\uff0c\u624d\u80fd\u66f4\u597d\u5730\u51b3\u5b9a\u5176\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\u4efb\u4f55\u4e8b\u7269\u65f6\u95f4\u7684\u4ea4\u4e92\uff0c\u51e0\u4e4e\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5f53\u7136\u4ece\u7f16\u7a0b\u7684\u89d2\u5ea6\uff0c\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e5f\u5b58\u5728\u4e00\u5b9a\u7684\u95ee\u9898\uff0c\u4e3b\u8981\u662f\u4ee5\u4e0b\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53cd\u9988\u673a\u5236 ")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6027\u80fd\u95ee\u9898\uff0c\u4f8b\u5982\u6709\u591a\u4e2a\u7c7b\u578bB\u7684\u5bf9\u8c61\u5217\u8868\uff0c\u539f\u672cA\u53ea\u9700\u8981\u904d\u5386\u4ee5\u4e0b\u961f\u5217B\uff0c\u4fee\u6539\u4ee5\u4e0b\u5c5e\u6027\u5373\u53ef\uff0c\u4f46\u662f\u73b0\u5728\u53ef\u80fd\u9700\u8981\u7ed9\u6bcf\u4e2a\u5bf9\u8c61B\u6dfb\u52a0\u4e00\u4e2a\u65b9\u6cd5\uff0c\u7136\u540e\u7531B\u5206\u522b\u6267\u884c\u4e00\u4e0b\u65b9\u6cd5\u3002\u5c3d\u7ba1\u770b\u8d77\u6765\u4f1a\u5b58\u5728\u6027\u80fd\u95ee\u9898\uff0c\u4f46\u662f\u5bf9\u4e8e\u76f8\u540c\u7684\u903b\u8f91\uff0c\u4e24\u79cd\u65b9\u5f0f\u8c03\u7528\u7684\u6838\u5fc3\u4ee3\u7801\u51e0\u4e4e\u662f\u4e00\u6837\u7684\uff0c\u5269\u4e0b\u5c31\u662f\u4e0d\u540c\u673a\u5236\u5728\u7ec4\u7ec7\u6570\u636e\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u79cd\u673a\u5236\u4e0a\u7684\u5dee\u5f02\u76f8\u5bf9\u4e8e\u6838\u5fc3\u4ee3\u7801\u6765\u8bb2\uff0c\u51e0\u4e4e\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u3002\u672c\u8d28\u4e0a\u4e24\u79cd\u65b9\u6cd5\u7684\u6027\u80fd\u5dee\u5f02\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u95ee\u9898\u5c5e\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7279\u6709\u7684\u4e00\u4e2a\u95ee\u9898\uff0c\u6bd4\u5982\u5982\u679cA\u9700\u8981\u6263\u6389B\u7684\u67d0\u4e2a\u6570\u503c\u53d8\u91cf\uff0c\u5982\u679c\u6574\u4e2a\u903b\u8f91\u6b63\u5e38\u6267\u884c\u5f53\u7136\u6ca1\u95ee\u9898\u3002\u4f46\u662f\u8bbe\u60f3\u5982\u679cB\u7684\u8fd9\u4e2a\u8d44\u6e90\u4e0d\u591f\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u8fd9\u4e2a\u64cd\u4f5c\u4e0d\u5e94\u8be5\u6267\u884c\u3002\u5982\u679c\u662f\u91c7\u7528\u4e3b\u52a8\u5f0f\uff0c\u7531\u4e8eA\u662f\u53ef\u4ee5\u8bbf\u95eeB\u7684\u6210\u5458\u7684\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5224\u65ad\u662f\u5426\u53ef\u4ee5\u6267\u884c\u8ba1\u7b97\uff0c\u8fd9\u5c31\u7b80\u5316\u4e86\u6574\u4e2a\u95ee\u9898\u3002\u5f53\u7136\u5176\u4ee3\u4ef7\u662fB\u4e0d\u5f97\u4e0d\u66b4\u9732\u6570\u636e\u8bbf\u95ee\u6743\u9650\u7ed9\u5916\u90e8\uff0c\u9020\u6210\u5de8\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u5e0c\u671b\u6240\u6709\u6d89\u53ca\u53cc\u65b9\u8d44\u6e90\u53d8\u5316\u7684\u8ba1\u7b97\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u4e2d\u6267\u884c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u6d89\u53ca\u4e24\u4e2a\u5bf9\u8c61\uff0c\u4e24\u4e2a\u5bf9\u8c61\u90fd\u643a\u5e26\u5404\u81ea\u76f8\u5173\u7684\u5c5e\u6027\u6570\u636e\uff0c\u7136\u540e\u901a\u8fc7\u4e00\u4e9b\u7279\u6b8a\u7684\u4ea4\u6613\u51fd\u6570\u6765\u83b7\u5f97\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027"},"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027"),(0,n.kt)("p",null,"\u5728\u4e86\u89e3\u54cd\u5e94\u673a\u5236\u7684\u65b9\u5f0f\u4e4b\u524d\uff0c\u6211\u4eec\u8981\u5148\u4e86\u89e3\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u7279\u6027\uff0c\u5373\u4e8b\u4ef6\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e3b\u8981\u901a\u8fc7\u4e8b\u4ef6\u6d88\u606f\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u8fd9\u901a\u5e38\u7531\u4e24\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u6309\u7c7b\u578b\u5efa\u7acb\u5168\u5c40\u7684\u4e8b\u4ef6\u5217\u8868\uff0c\u7136\u540e\u54cd\u5e94\u4e8b\u4ef6\u7684\u5bf9\u8c61\u5206\u522b\u4ece\u8fd9\u4e2a\u5217\u8868\u53bb\u83b7\u53d6\u4e8b\u4ef6\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u79cd\u662f\u7c7b\u4f3cErlang\u7684\u673a\u5236\uff0c\u7cfb\u7edf\u4f1a\u5c06\u8fd9\u4e9b\u4e8b\u4ef6\u6d88\u606f\u5206\u53d1\u5230\u5177\u4f53\u6bcf\u4e2a\u8fdb\u7a0b\u5185\u90e8\uff0c\u5f62\u6210\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5c40\u90e8\u6d88\u606f\u5217\u8868")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u4e0a\u8ff0\u54ea\u79cd\u5f62\u5f0f\uff0c\u5b83\u4eec\u7684\u4e00\u4e2a\u76f8\u540c\u70b9\u90fd\u662f\uff0c\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\u53ea\u662f\u4e34\u65f6\u5b58\u5728\uff0c\u4e00\u65e6\u7cfb\u7edf\u6ce8\u518c\u7684\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\uff0c\u6d88\u606f\u5c31\u4f1a\u88ab\u4e22\u5f03\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u7684\u6d88\u606f\u901a\u77e5\u673a\u5236\u4e0d\u662f\u6309\u7167\u4e0a\u8ff0\u4e24\u79cd\u4e2d\u7684\u4efb\u610f\u4e00\u79cd\u7ec4\u7ec7\u7684\uff0c\u800c\u662f\u6309\u7167\u666e\u901a\u7684\u51fd\u6570\u4f20\u9012\u673a\u5236\uff0c\u5e76\u4e14\u8fd9\u4e2a\u51fd\u6570\u4f20\u9012\u662f\u6bcf\u5e27\u90fd\u6267\u884c\u7684\uff0c\u6240\u4ee5\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u4e4b\u540e\uff0c\u53d1\u9001\u4e00\u6761\u6263\u9664HP\u6570\u91cf\u4e3a3\u7684\u6d88\u606f\uff0c\u54cd\u5e94\u8005\u5728\u6263\u96643\u4e2aHP\u4e4b\u540e\uff0c\u8fd9\u4e2a\u503c\u53ef\u80fd\u4f1a\u5728\u4e0b\u4e00\u5e27\u88ab\u4fdd\u5b58\uff0c\u9664\u975e\u5f00\u53d1\u8005\u4fdd\u8bc1\u53d1\u51fa\u6d88\u606f\u7684\u7ec4\u4ef6\u6bcf\u5e27\u603b\u662f\u6267\u884c\u3002\u4f46\u662fRealityIS\u7684Change-Driven\u673a\u5236\u4f7f\u5f97\u6709\u53ef\u80fd\u7ed5\u8fc7\u8fd9\u4e2a\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u901a\u8fc7\u5bf9\u5c5e\u6027\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u6027\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Message]\nfloat HP\n")),(0,n.kt)("p",null,"\u5982\u679c\u662fMessage\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4fdd\u8bc1\u5728\u6bcf\u5e27\u7684\u6240\u6709\u7ec4\u4ef6\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\uff0c\u5c06\u5176\u6e05\u96f6\u3002",(0,n.kt)("strong",{parentName:"p"},"\u4f46\u8fd9\u53ef\u80fd\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\u5f62\u5f0f\uff0c\u8fd9\u4e00\u5757\u8fd8\u8981\u8fdb\u4e00\u6b65\u601d\u8003"),"\u3002"),(0,n.kt)("h4",{id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"},"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53cd\u9988\u7684\u95ee\u9898\uff0c\u4f20\u7edf\u7684\u89e3\u51b3\u65b9\u6848\u662f\u5f80\u56de\u53d1\u9001\u786e\u8ba4\u6d88\u606f\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u5b9a\u7684\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5206\u6790\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u5728\u5927\u591a\u6570\u8bf7\u4e0b\u5b83\u4eec\u662f\u53ef\u4ee5\u6b63\u786e\u6267\u884c\u7684\uff0c\u53ea\u6709\u5728\u5c11\u6570\u6781\u7aef\u60c5\u51b5\u4e0b\u7a0b\u5e8f\u4f1a\u51fa\u73b0\u5f02\u5e38\uff0c\u4f8b\u5982\u786c\u4ef6\u95ee\u9898\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6211\u4eec\u5374\u8981\u4e3a\u4e86\u9632\u6b62\u8fd9\u79cd\u95ee\u9898\uff0c\u800c\u5bf9\u6240\u6709\u6d88\u606f\u5904\u7406\u4f7f\u7528\u4e00\u79cd\u53cd\u9988\u7684\u673a\u5236\u3002\u53cd\u9988\u6d89\u53ca\u5230\u5f02\u6b65\uff0c\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u901a\u4fe1\u90fd\u8981\u7ef4\u62a4\u8fd9\u79cd\u5f02\u6b65\u7684\u786e\u8ba4\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5230\u6e38\u620f\u7684\u4e00\u4e9b\u7279\u5f81\uff0c\u6e38\u620f\u4e2d\u5927\u91cf\u5185\u5b58\u5f53\u4e2d\u9700\u8981\u8bb0\u5f55\u548c\u8ba1\u7b97\u7684\u4e00\u4e9b\u5bf9\u8c61\u4e0d\u4e00\u5b9a\u90fd\u9700\u8981\u9700\u8981\u5b58\u6863\u7684\uff0c\u5982\u679c\u628a\u6240\u6709\u8fd9\u4e9b\u6570\u636e\u5b58\u6863\uff0c\u4f1a\u5bfc\u81f4\u5f88\u5927\u7684\u95ee\u9898\uff0c\u5373\u7a0b\u5e8f\u5728\u6062\u590d\u7684\u65f6\u5019\u6839\u672c\u65e0\u6cd5\u7cbe\u786e\u6062\u590d\u5230\u67d0\u4e9b\u4e2d\u95f4\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6539\u53d8\u4e86\u4e00\u79cd\u7b56\u7565\uff0c\u5b83\u53ea\u5bf9\u67d0\u4e9b\u5173\u952e\u65f6\u95f4\u70b9\u8fdb\u884c\u5b58\u6863\uff0c\u800c\u5728\u8fd9\u4e9b\u5b58\u6863\u8282\u70b9\u4e4b\u95f4\uff0c\u4e00\u5207\u6570\u636e\u90fd\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\u3002\u6240\u4ee5\u5f53\u6709\u5f02\u5e38\u53d1\u751f\u65f6\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6062\u590d\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u8282\u70b9\u5373\u53ef\u3002"),(0,n.kt)("h3",{id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"},"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability",src:l(1594).Z,width:"2556",height:"1406"})),(0,n.kt)("h4",{id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528"},"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability-1",src:l(3402).Z,width:"2530",height:"1372"})),(0,n.kt)("h2",{id:"210-gpu-vm"},"2.10 GPU VM"),(0,n.kt)("h2",{id:"211-render-vm"},"2.11 Render VM"),(0,n.kt)("h2",{id:"212-realityis-runtime"},"2.12 RealityIS Runtime"),(0,n.kt)("p",null,"RealityIS Runtime\u53ef\u4ee5\u7ed9\u7b2c\u4e09\u65b9\u4f7f\u7528\uff0c\u901a\u8fc7\u96c6\u6210\u5230\u7b2c\u4e09\u65b9App\u5f62\u6210\u72ec\u7acb\u5206\u53d1\u7684App\u5f62\u6001\u3002RealityIS Runtime\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7aef\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u6e32\u67d3\u4ee5\u53ca\u8d44\u6e90\u52a0\u8f7d\u76f8\u5173\u7684\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u4e91\u7aef\u7684\u5206\u5e03\u5f0f\u80fd\u529b")),(0,n.kt)("p",null,"\u57fa\u4e8e\u6b64\uff0c\u5176\u4e2d\u7684\u4e00\u4e9b\u53d8\u5316\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7aef\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u96c6\u6210\u81ea\u5df1\u7684C++\u5e93\uff0c\u53ef\u4ee5\u6269\u5c55\u5e94\u7528\u7684\u80fd\u529b\uff0c\u5e76\u4e0e\u672c\u5730App\u5176\u4ed6\u6a21\u5757\u8fdb\u884c\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e91\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u81ea\u5df1\u7684\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7C++\u6269\u5c55\u80fd\u529b")),(0,n.kt)("p",null,"\u4e0d\u53d8\u7684\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Creation\u7684\u6258\u7ba1\u5b58\u50a8\u662f\u4e0d\u53d8\u7684\uff0c\u8fd9\u4e2a\u53ea\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u8fd0\u884c\u65f6\u7684\u5b9e\u9645\u6570\u636e\u90fd\u662f\u5b58\u50a8\u5728\u81ea\u5b9a\u4e49\u670d\u52a1\u5668\u4e2d\u7684"),(0,n.kt)("li",{parentName:"ul"},"RealityID\u662f\u4e0d\u53d8\u7684\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6ce8\u518cRealityID\uff0c\u8fdb\u884c\u7edf\u4e00\u5b89\u5168\u9a8c\u8bc1\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u8ddf\u81ea\u5df1\u6570\u636e\u5e93\u7684\u8bb0\u5f55\u8fdb\u884c\u6620\u5c04")),(0,n.kt)("p",null,"\u4ece\u4ef7\u503c\u4e0a\u770b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7edf\u4e00\u4e86\u5e94\u7528\u5f00\u53d1\u7684\u65b9\u5f0f\uff0c\u7b80\u5316\u4e86\u90e8\u7f72"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528C++\u5bf9\u7cfb\u7edf\u8fdb\u884c\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u628aRealityIS\u5f53\u505a\u4e00\u79cd\u9762\u5411\u9886\u57df\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u3001\u7edf\u4e00\u3001\u7b80\u5355\u7f16\u7a0b\u6216\u8005\u81ea\u5b9a\u4e49\u7684\u673a\u5236")),(0,n.kt)("h2",{id:"213-\u6027\u80fd\u56e0\u7d20"},"2.13 \u6027\u80fd\u56e0\u7d20"),(0,n.kt)("h3",{id:"2131-\u5c40\u90e8\u6027\u4e27\u5931"},"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931"),(0,n.kt)("p",null,"\u8fc7\u53bb\u5f88\u591a\u51fd\u6570\u5185\u90e8\u7684\u4e34\u65f6\u53d8\u91cf\uff0c\u5176\u751f\u547d\u5468\u671f\u672c\u6765\u53ea\u5305\u542b\u51fd\u6570\u5185\uff0c\u7b49\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u4e4b\u540e\u5c31\u4f1a\u91ca\u653e\uff0c\u4f46\u662f\u7531\u4e8e\u9700\u8981\u5728\u4e0a\u4e0b\u6e38\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u53c2\u6570\uff0c\u5b83\u6709\u53ef\u80fd\u4f1a\u5347\u7ea7\u4e3a\u5b9e\u4f53\u53d8\u91cf\uff0c\u8fd9\u5c31\u5bfc\u81f4\u5176\u5b58\u50a8\u65f6\u95f4\u6bd4\u8f83\u957f\uff0c\u5185\u5b58\u5360\u7528\u66f4\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u5c40\u90e8\u6027\u4e27\u5931")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u4f20\u7edfOOP\u4e2d\u7684\u79c1\u6709\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u800c\u8a00\uff0c\u8fd9\u4e9b\u53d8\u91cf\u672c\u8eab\u5c31\u662f\u6301\u4e45\u5b58\u50a8\u7684\uff0c\u6240\u4ee5\u8fd9\u90e8\u5206\u5f71\u54cd\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u4e3b\u8981\u662f\u5927\u90e8\u5206\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u4f7f\u7528\uff0c\u8fd9\u91cc\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5728\u4f20\u7edf\u4e2d\u5355\u4e2a\u51fd\u6570\u53ef\u4ee5\u72ec\u7acb\u5b8c\u6210\u7684\u4e8b\u60c5\uff0c\u5728RealityIS\u4e2d\u4e5f\u662f\u72ec\u7acb\u5b8c\u6210\uff0c\u90a3\u4e48\u4e24\u8005\u662f\u7b49\u6548\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f20\u7edfOOP\u4e2d\u7684\u4e00\u4e2a\u590d\u6742\u51fd\u6570\u9700\u8981\u62c6\u6210\u591a\u4e2a\u51fd\u6570\uff0c\u8fd9\u79cd\u60c5\u51b5\u5728\u4f20\u7edfOOP\u4e2d\u5c3d\u7ba1\u51fd\u6570\u7684\u6267\u884c\u65f6\u95f4\u8fb9\u957f\uff0c\u4f46\u662f\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u5176\u5b58\u50a8\u65f6\u95f4\u6700\u591a\u4e5f\u53ea\u5728\u51fd\u6570\u6267\u884c\u671f\u95f4\uff1b\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u4e0d\u7ba1\u5d4c\u5957\u7ed3\u6784\u5982\u4f55\uff0c\u4e5f\u80fd\u4fdd\u8bc1\u53ea\u5b58\u50a8\u4e8e\u9700\u8981\u7684\u5d4c\u5957\u671f\u95f4\uff0c\u8ddfOOP\u57fa\u672c\u4e0a\u7b49\u4ef7\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u88ab\u6253\u4e71\u7684\uff0c\u65e0\u6cd5\u4fdd\u8bc1\u76f8\u5173\u7684\u4e24\u4e2a\u903b\u8f91\u4e00\u5b9a\u662f\u6309\u7d27\u90bb\u6267\u884c\u7684\uff0c\u6781\u7aef\u60c5\u51b5\u4e0b\u53ef\u80fd\u4e2d\u95f4\u9694\u4e86\u5f88\u591a\u65e0\u5173\u7684\u7ec4\u4ef6\uff0c\u751a\u81f3\u53ef\u80fd\u540e\u7eed\u90fd\u4e0d\u4f1a\u518d\u88ab\u4f7f\u7528\uff0c\u4f8b\u5982\u540e\u7eed\u7684\u6761\u4ef6\u5224\u65ad\u5bfc\u81f4\u65e0\u6cd5\u8fdb\u884c\u76f8\u5e94\u7ec4\u4ef6\u5206\u652f\uff0c\u56e0\u6b64\u5f88\u96be\u9884\u6d4b\u5176\u53d8\u91cf\u7684\u5b58\u7eed\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u4f46\u597d\u5904\u662f\u5b83\u53ea\u5206\u914d\u4e00\u6b21\uff0c\u907f\u514d\u4e0b\u6b21\u5bf9\u8be5\u53d8\u91cf\u7684\u91cd\u590d\u6784\u9020\u3002\u4ee5\u5b58\u50a8\u6362\u53d6\u8ba1\u7b97\uff08\u8fd9\u91cc\u4e3b\u8981\u6307\u5bf9\u8c61\u7684\u5206\u914d\u548c\u521d\u59cb\u5316\uff0c\u9500\u6bc1\u7b49\u64cd\u4f5c\uff09\u7684\u4e00\u79cd\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u4e9b\u53d8\u91cf\u8ddf\u5783\u573e\u56de\u6536\u4e2d\u7684\u53d8\u91cf\u8fd8\u662f\u4e0d\u4e00\u6837\uff0c\u81f3\u5c11\u8fd9\u4e9b\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u662f\u8ddf\u5b9e\u4f53\u5bf9\u8c61\u4e00\u81f4\u7684\uff0c\u5b83\u4eec\u4f1a\u968f\u7740\u5b9e\u4f53\u5bf9\u8c61\u7684\u9500\u6bc1\u800c\u81ea\u52a8\u56de\u6536\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u4f18\u5316\u65b9\u6cd5\u662f\uff0c\u8fd9\u4e9b\u6ca1\u6709\u6807\u8bb0\u6c38\u4e45\u5b58\u50a8\u7684\u3001\u4e34\u65f6\u7684\u53d8\u91cf\uff0c\u5728\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u5168\u90e8\u9500\u6bc1\uff0c\u8fd9\u6837\u81f3\u5c11\u4e0b\u4e00\u5e27\u8fd8\u6ca1\u6709\u521d\u59cb\u5316 \u8fd9\u4e2a\u53d8\u91cf\u7684\u65f6\u5019\u5185\u5b58\u5360\u7528\u662f\u4e0d\u9700\u8981\u7684\uff0c\u4f46\u662f\u8fd9\u6837\u89e3\u51b3\u4e0d\u4e86\u6839\u672c\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u5e27\u7ed3\u675f\u7684\u65f6\u5019\u5185\u5b58\u8fd8\u662f\u4f1a\u5f88\u9ad8\uff0c\u800c\u8fd9\u4e9b\u5f62\u6210\u4e00\u4e2a\u9608\u503c\u8fd8\u662f\u4f1a\u9650\u5236\u5355\u53f0\u670d\u52a1\u5668\u7684\u80fd\u529b\uff0c\u800c\u4e14\u8fd9\u79cd\u4f18\u5316\u5e26\u6765\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6700\u597d\u7684\u6307\u5bfc\u662f")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u7684\u53d8\u91cf\u4e0d\u6d89\u53ca\u8ddf\u5176\u4ed6\u5bf9\u8c61\u901a\u4fe1\uff0c\u5219\u6700\u597d\u6240\u6709\u6d89\u53ca\u7684\u79c1\u6709\u64cd\u4f5c\u90fd\u96c6\u4e2d\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u76f4\u5230\u8f93\u51fa\u5168\u5c40\u5c5e\u6027\u672a\u77e5\uff0c\u8fd9\u6837\u5185\u90e8\u7684\u53d8\u91cf\u90fd\u662f\u4e34\u65f6\u53d8\u91cf\uff0c\u8ddfOOP\u4e00\u6837\u7684\u6548\u679c\u3002\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u9700\u8981\u901a\u4fe1\uff0c\u90a3\u4e48\u8fd9\u76f8\u5f53\u4e8eOOP\u4e2d\u7684\u5bf9\u8c61\u79c1\u6709\u53d8\u91cf\uff0c\u672c\u8eab\u4e5f\u662f\u4e00\u76f4\u5b58\u50a8\u7684\uff0c\u8fd9\u4e5f\u662f\u7b49\u6548\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6709\u70b9\u8fdd\u80cc\u7ec4\u5408\u7684\u601d\u8def\uff0c\u4f46\u662f\u6211\u4eec\u6240\u63d0\u5021\u7684\u7ec4\u5408\u601d\u60f3\uff0c\u4e5f\u5e76\u4e0d\u662f\u8bf4\u628a\u6240\u6709\u51fd\u6570\u62c6\u6210\u5c0f\u51fd\u6570\uff0c\u7ec4\u5408\u7684\u662f\u7ed3\u6784\u6027\u7684\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u662f\u5bf9\u4e8e\u5df2\u7ecf\u7f16\u8f91\u597d\u7684\u5bf9\u8c61\uff0c\u53ef\u4ee5\u5bf9\u7ec4\u5408\u8fdb\u884c\u5408\u6279\u64cd\u4f5c\uff0c\u5373\u5c06\u90a3\u4e9b\u7ecf\u8fc7\u7ec4\u5408\u5f62\u6210\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5982\u679c\u4ed6\u4eec\u4e2d\u95f4\u5904\u7406\u7684\u90fd\u662f\u79c1\u6709\u53d8\u91cf\uff0c\u5e76\u4e14\u6ca1\u6709\u5916\u90e8\u4ea4\u4e92\uff0c\u53ef\u4ee5\u5408\u6279\u6210\u4e00\u4e2a\u51fd\u6570\u7684\u6548\u679c\uff0c\u5f53\u7136\u8fd9\u53ef\u80fd\u9700\u8981\u5728\u51fd\u6570\u6d3e\u53d1\u5c42\u505a\u4e00\u70b9\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5e26\u6765\u8fd0\u884c\u65f6\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u4f46\u8003\u8651\u5230\u5206\u5e03\u5f0f\u7684\u7ed3\u679c\uff0c\u5355\u53f0\u673a\u5668\u4e0d\u4f1a\u6210\u4e3a\u6027\u80fd\u74f6\u9888\uff0c\u800c\u4e14\u73b0\u4ee3\u8ba1\u7b97\u673a\u8ba1\u7b97\u662f\u74f6\u9888\uff0c\u800c\u5185\u5b58\u5e76\u4e0d\u662f\u5927\u7684\u74f6\u9888\uff0c\u9664\u975e\u90a3\u79cd\u6570\u636e\u7ed3\u6784\u7279\u522b\u5927\u4e14\u4e0d\u6613\u4e8e\u62c6\u5206\u7684\u573a\u666f\uff0c\u603b\u4f53\u6765\u8bb2\u95ee\u9898\u4e0d\u5927\u3002"),(0,n.kt)("h3",{id:"2132-\u65e0\u6548\u8ba1\u7b97"},"2.13.2 \u65e0\u6548\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u6bd4\u6e38\u620f\u7a0b\u5e8f\u7684\u6027\u80fd\u9ad8\uff0c\u662f\u56e0\u4e3a\u5e94\u7528\u7a0b\u5e8f\u5927\u591a\u91c7\u7528\u4e8b\u4ef6\u9a71\u52a8\u7684\u673a\u5236\uff0c\u4e3b\u5faa\u73af\u53ea\u6709\u4e00\u4e2a\uff0c\u5f53\u5f53\u524d\u4efb\u52a1\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u5b83\u4f1a\u5728\u67d0\u4e2a\u5730\u65b9\u5904\u4e8e\u7b49\u5f85\u72b6\u6001\uff0c\u6216\u8005\u5c31\u662f\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u6ca1\u6709\u518d\u9700\u8981\u6267\u884c\u7684\u4efb\u52a1\u4e86\u3002\u5f53\u7cfb\u7edf\u68c0\u6d4b\u5230\u67d0\u4e2a\u4e8b\u4ef6\u65f6\uff0c\u4e00\u822c\u662f\u7528\u6237\u8f93\u5165\u4e8b\u4ef6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u89e6\u53d1\u4ee3\u7801\u7684\u6267\u884c\uff0c\u4e3a\u6b64\uff0c\u4e00\u822c\u7684\u65b9\u5f0f\u662f\u5728main\u4e2d\u7ef4\u6301\u4e00\u4e2a\u5c0f\u5faa\u73af\u6765\u4e13\u95e8\u68c0\u6d4b\u7cfb\u7edf\u4e8b\u4ef6\uff0c\u4ee5\u4fbf\u4e8e\u63a5\u6536\u5230\u7cfb\u7edf\u4e8b\u4ef6\u7684\u65f6\u5019\u53ef\u4ee5\u6b63\u786e\u89e6\u53d1\u6267\u884c\u903b\u8f91\u7684\u4ee3\u7801\uff0c\u56e0\u4e3a\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u6307\u4ee4\u5df2\u7ecf\u505c\u6b62\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u7ed3\u6784\u662f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\u7684\uff0c\u6240\u4ee5\u8fd9\u5f88\u5bb9\u6613\u901a\u8fc7\u4ee3\u7801\u6765\u63a7\u5236\u6574\u4e2a\u6d41\u7a0b\uff0c\u4f8b\u5982\u5982\u679c\u7528\u6237\u8f93\u5165\u6ca1\u6709\u53d1\u751f\uff0c\u90a3\u4e48\u6761\u4ef6\u5224\u65ad\u903b\u8f91\u4f1a\u4fdd\u8bc1\u540e\u7eed\u7684\u903b\u8f91\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u65e0\u5e8f\u7684\u8ba1\u7b97\u6307\u4ee4\u88ab\u8f6c\u6362\u4e3a\u6709\u5e8f\u5217\u8868\u4e4b\u540e\uff0c\u5e26\u6765\u7684\u4e00\u4e2a\u4ee3\u4ef7\u662f\u8fd9\u79cd\u524d\u540e\u903b\u8f91\u5206\u652f\u63a7\u5236\u80fd\u529b\u7684\u4e27\u5931\uff1a\u540e\u7eed\u7684\u51fd\u6570\u552f\u4e00\u7684\u5f71\u54cd\u56e0\u7d20\u662f\u8f93\u5165\u53c2\u6570\uff0c\u53ea\u80fd\u6839\u636e\u53c2\u6570\u8fdb\u884c\u5224\u65ad\u662f\u5426\u8981\u8fdb\u884c\u8ba1\u7b97\uff0c\u4f46\u56e0\u4e3a\u6570\u636e\u5168\u90e8\u662f\u88ab\u653e\u5230block\u91cc\u9762\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u68c0\u6d4bblock\u4e2d\u5c5e\u6027\u72b6\u6001\u7684\u6539\u53d8\uff0c\u4e3b\u8981\u6709\u4e00\u4e2a\u53d1\u751f\u53d8\u5316\u5c31\u9700\u8981\u6267\u884c\u51fd\u6570\u8ba1\u7b97\u3002"),(0,n.kt)("h2",{id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*"),(0,n.kt)("h3",{id:"2141-realityis\u6838\u5fc3\u57fa\u7840"},"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0a\u5c42\u7cfb\u7edf\u6709\u5f88\u591a\u4e0d\u540c\u7684\u673a\u5236\u3001\u4e0d\u540c\u7684\u8f6f\u4ef6\u67b6\u6784\u601d\u8def\uff0c\u4f46RealityIS\u7684\u6838\u5fc3\u57fa\u7840\u5176\u5b9e\u662f\u8ba1\u7b97\u673a\u7a0b\u5e8f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u673a\u5236\u548c\u539f\u7406\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u539f\u7406\u57fa\u672c\u4e0a\u90fd\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u800c\u4e0a\u5c42\u7684\u7f16\u8bd1\u539f\u7406\u548c\u66f4\u4e0b\u5c42\u7684\u786c\u4ef6\u6307\u4ee4\u548c\u6c47\u7f16\u90fd\u662f\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u8fd9\u4f7f\u5f97\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u91cd\u8981\u6027\u6ca1\u6709\u88ab\u7ed9\u4e88\u8db3\u591f\u7684\u91cd\u89c6\u3002\u5c3d\u7ba1\u5b83\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u662f\u5b83\u5374\u5bf9\u4e0a\u5c42\u7684\u7f16\u8bd1\u8fc7\u7a0b\u751a\u81f3\u7f16\u7a0b\u8bed\u8a00\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u662f\u4f53\u73b0\u5728\u5b83\u4fc3\u8fdb\u4e86\u4e0a\u5c42\u7684\u53d1\u5c55\u548c\u8fdb\u5316\uff0c\u76f8\u53cd\uff0c\u5b83\u675f\u7f1a\u4e86\u4e0a\u9762\u7684\u8fdb\u5316\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u548c\u52a0\u8f7d\u6709\u5f88\u591a\u91cd\u8981\u7684\u7279\u70b9\uff0c\u4f7f\u5f97\u5b83\u65e2\u91cd\u8981\u53c8\u8db3\u591f\u7b80\u5355\uff0c\u540c\u65f6\u5bf9\u4e0a\u4e0b\u6e38\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u66f4\u786e\u5207\u8bf4\u8f83\u5927\u7684\u7ea6\u675f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u975e\u5e38\u7b80\u5355"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f\u4e00\u79cd\u975e\u5e38\u4f18\u96c5\u7684\u7ed3\u6784\u6027\u62bd\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u548c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4ea7\u751f\u4e86\u5de8\u5927\u7684\u675f\u7f1a"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f")),(0,n.kt)("p",null,"\u6b63\u56e0\u4e3a\u5982\u6b64\uff0cRealityIS\u8bde\u751f\u6700\u5173\u952e\u7684\u8fdb\u7a0b\u662f\u9996\u5148\u4ece\u7b26\u53f7\u8868\u5f97\u5230\u542f\u793a\uff0c\u800c\u4e0d\u662f\u76f8\u53cd\u4ece\u6e38\u620f\u7a0b\u5e8f\u7684\u7ed3\u6784\u7740\u624b\u3002\u524d\u8005\u53ef\u4ee5\u8ba4\u4e3a\u662f\u81ea\u4e0b\u5411\u4e0a\u7684\uff0c\u800c\u540e\u8005\u662f\u81ea\u4e0a\u5411\u4e0b\u7684\u3002\u6ca1\u6709\u5bf9\u7b26\u53f7\u8868\u7684\u5173\u952e\u7406\u89e3\uff0c\u6e38\u620f\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ba1\u7406\u53ea\u80fd\u7528\u4f5c\u5f00\u53d1\u5546\u5185\u90e8\u66f4\u597d\u7684\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\uff0c\u5c3d\u7ba1\u4e5f\u53ef\u4ee5\u7b80\u5316\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u4f7f\u7528\u590d\u7528\u6765\u63d0\u9ad8\u5de5\u4e1a\u5316\u751f\u4ea7\uff0c\u4f46\u662f\u5b83\u65e0\u6cd5\u76f4\u63a5\u5230\u8fbe\u4e92\u64cd\u4f5c\u6027\u3002\u5bf9\u7b26\u53f7\u8868\u7684\u542f\u793a\u624d\u5bfc\u81f4\u4e86\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u5207\u673a\u5236\u3002\u800c\u7b26\u53f7\u8868\u6b63\u662f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u6838\u5fc3\u3002"),(0,n.kt)("h3",{id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027"},"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027"),(0,n.kt)("h3",{id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5"},"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5"),(0,n.kt)("h4",{id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"},"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"),(0,n.kt)("p",null,"\u8fd9\u79cd\u67b6\u6784\u4ea7\u751f\u4e86\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u5176\u4e2d\u6700\u6838\u5fc3\u7684\u662f\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u4e00\u4e2a\u6574\u4f53\uff0c\u800c\u8fd9\u662f\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\uff0c\u5c06\u6bcf\u4e2a\u51fd\u6570\u90fd\u72ec\u7acb\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\uff0c\u4f1a\u5bfc\u81f4\u52a8\u6001\u67e5\u8be2\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u8fd9\u662f\u7531\u4e8e\u5185\u5b58\u7684\u5bfb\u5740\u67b6\u6784\u51b3\u5b9a\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u9488\u5bf9\u6bcf\u6570\u636e\u6bb5\u548c\u7a0b\u5e8f\u6bb5\u90fd\u5206\u914d\u7edd\u5bf9\u5730\u5740\uff0c\u90a3\u6837\u4e0d\u7ba1\u662f\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7684\u8fc7\u7a0b\u90fd\u6709\u5de8\u5927\u5f71\u54cd\uff0c\u800c\u76f8\u5bf9\u5bfb\u5740\u4f7f\u5f97\u7a0b\u5e8f\u66f4\u5bb9\u6613\u5408\u5e76\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5c06\u7a0b\u5e8f\u7ed3\u6784\u8fdb\u884c\u4e86\u7b80\u5316\u5904\u7406\uff0c\u4f7f\u5f97\u8fd9\u4e2a\u52a8\u6001\u67e5\u8be2\u7684\u5f00\u9500\u53d8\u5f97\u5f88\u4f4e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u8fdb\u5236\u7684\u5b89\u5168\u6027\uff0c\u52a8\u6001\u7ec4\u7ec7\u5b58\u5728\u8f83\u5927\u7684\u4e8c\u8fdb\u5236\u7248\u672c\u95ee\u9898\uff0c\u8fdb\u800c\u4ea7\u751f\u5b89\u5168\u6027\u95ee\u9898\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5728\u66f4\u4e0a\u5c42\u7684\u811a\u6b65\u8bed\u8a00\u5c42\u9762\u8fdb\u884c\u52a8\u6001\u7ec4\u7ec7\uff0c\u51cf\u5c11\u5bf9\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("h4",{id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027"},"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21433-\u7248\u672c\u7ba1\u7406"},"2.14.3.3 \u7248\u672c\u7ba1\u7406"),(0,n.kt)("h4",{id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"},"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u52a8\u6001\u94fe\u63a5\u6280\u672f\u4e2d\u5305\u542b\u8f83\u5927\u7684\u5171\u4eab\u5e93\u7b26\u53f7\u8868\u3001\u7a0b\u5e8f\u5bf9\u5171\u4eab\u5e93\u7b26\u53f7\u7684\u5f15\u7528\u90fd\u9700\u8981\u52a8\u6001\u67e5\u627e\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5f15\u8d77\u8f83\u5927\u7684\u6027\u80fd\u5f00\u652f\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u51cf\u5c11\u6027\u80fd\u5f00\u652f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u5168\u5c40\u7b26\u53f7\u67e5\u627e\uff0c\u51fd\u6570\u90fd\u662f\u9759\u6001\u6307\u9488\uff0c\u8fd9\u5f97\u76ca\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u98ce\u683c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u662f\u7eaf\u51fd\u6570\uff0c\u5373\u4f7f\u5bf9\u4e8eiOS\u7cfb\u7edf\uff0c\u53ea\u80fd\u91c7\u53d6\u89e3\u91ca\u6027\u7684\u6267\u884c\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u51fd\u6570\u4f7f\u7528\u7684\u5730\u5740\u4e5f\u662f\u5728\u4e00\u4e2a\u5f88\u5c0f\u7684\u5185\u5b58\u5730\u5740\u7a7a\u95f4\uff0c\u6b64\u65f6\u7684\u4ee3\u7801\u5f62\u6210\u4e00\u79cd\u201c\u9690\u5f0f\u7684\u7b26\u53f7\u8868\u201d\uff0c\u56e0\u4e3a\u6211\u4eec\u901a\u4ee3\u7801\u83b7\u53d6\u7b26\u53f7\u5728\u6808\u4e2d\u7684\u5730\u5740\uff0c\u8fd9\u907f\u514d\u4e86\u5927\u91cf\u7684\u5168\u5c40\u67e5\u627e"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5bf9\u4e8eRealityIS\u8fd0\u884c\u65f6\uff0c\u4ed6\u9700\u8981\u67e5\u627e\u5168\u5c40\u7b26\u53f7\u8868\u6765\u83b7\u53d6\u5730\u5740\uff0c\u6211\u4eec\u7684\u7b26\u53f7\u8868\u7ed3\u6784\u4e5f\u66f4\u52a0\u5de7\u5999\u3002\u8fd9\u79cd\u67e5\u627e\u88ab\u8f6c\u5316\u4e3a\u53e6\u4e00\u79cd\u5f62\u5f0f\uff1a\u5373\u5728\u7f16\u8bd1\u65f6\u5efa\u7acb\u4e86\u51fd\u6570\u7ec4\u4ef6\u548c\u7b26\u53f7\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u7136\u540e\u8fd9\u79cd\u5173\u7cfb\u5728\u52a0\u8f7d\u65f6\u88ab\u4fdd\u5b58\u4e3a\u5185\u5b58\u4e2d\u6570\u636e\u548c\u4ee3\u7801\u7684\u4e00\u4e2a\u5f71\u89c6\uff0c\u8fd9\u5c31\u662f\u4e00\u4e2aC++\u7684\u6307\u9488\u5c31\u627e\u5230\u4e86\u5bf9\u5e94\u7684\u5730\u5740\uff0c\u6240\u4ee5\u8fd9\u95f4\u63a5\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u6bcf\u6b21\u7b26\u53f7\u8868\u5168\u5c40\u67e5\u627e\uff0c\u56e0\u4e3a\u5b83\u53ea\u5728\u52a0\u8f7d\u65f6\u8ba1\u7b97\u4e00\u6b21\uff0c\u800c\u4e0d\u662f\u9700\u8981\u6bcf\u6b21\u9047\u5230\u7b26\u53f7\u52a8\u6001\u4e14\u91cd\u590d\u67e5\u627e\u3002\u7ec4\u4ef6\u548c\u51fd\u6570\u4e4b\u95f4\u7684\u786e\u5b9a\u5173\u7cfb\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\u3002")),(0,n.kt)("h3",{id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"},"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("p",null,"\u5c06\u57282.16\u8282\u4e13\u95e8\u8ba8\u8bba"),(0,n.kt)("h2",{id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"},"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"),(0,n.kt)("h3",{id:"2151-\u590d\u6742\u7cfb\u7edf"},"2.15.1 \u590d\u6742\u7cfb\u7edf"),(0,n.kt)("h3",{id:"2152-\u7ec6\u80de\u6a21\u578b"},"2.15.2 \u7ec6\u80de\u6a21\u578b"),(0,n.kt)("p",null,"But for Dr. Kay, he states that ",(0,n.kt)("a",{parentName:"p",href:"http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en"},"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.")," Why? Well, part of his background was cell biology and when he did the math on their computational power, he realized that while software routinely has trouble scaling, cells can easily coordinate and scale by a factor of over a trillion, creating some of the most fantastically complex things in existence, capable of correcting their own errors. By comparison, the most sophisticated computer software programs are slow, tiny, bugfests. ",(0,n.kt)("em",{parentName:"p"},"Kay's")," conception of OOP starts with a single question: how can we get our software to match this scalability?"),(0,n.kt)("h4",{id:"21521-isolation"},"2.15.2.1 Isolation"),(0,n.kt)("p",null,'First, let\'s discuss isolation. This is a shorter term than "local retention and protection and hiding of state-process".'),(0,n.kt)("p",null,"The interior of a cell is messy and confusing, but the cell membrance wraps this up in a tidy package, hiding the internal details. It's estimated that around 50 to 70 ",(0,n.kt)("em",{parentName:"p"},"billion")," cells die in your body every day. But you don't. Could your software keep running if you had millions of exceptions being thrown every minute? I doubt it."),(0,n.kt)("p",null,"You not dying when your cells die isn't encapsulation; it's isolation. Consider the following (awful) example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"class MyExample:\n def reciprocal(self, num):\n return 1.0/num\n\nexample = MyExample()\nprint example.reciprocal(4);\nprint example.reciprocal(0);\n")),(0,n.kt)("p",null,"In the above code, we've encapsulated the reciprocal equation in the class, but then ..."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'0.25\nTraceback (most recent call last):\n File "class.py", line 7, in \n print example.reciprocal(0);\n File "class.py", line 3, in reciprocal\n return 1.0/num\nZeroDivisionError: float division by zero\n')),(0,n.kt)("p",null,"The object dies, as does the code which contained it. This is the antithesis of what Dr. Kay is trying to get us to understand."),(0,n.kt)("p",null,"If you think of Web browsers and servers as objects, however, we see something closer to his vision. If your browser crashed every time a web server crashed or was otherwise unavailable, Microsoft IIS would never have reached 2.0."),(0,n.kt)("p",null,"Now that we sort of understand a core idea of Kay's, Lets take it further. Kay points out that from the early days of Arpanet in the 60s, to the time of his OOPSLA keynote in 1997, Arpanet had grown roughly 100 million times the size of what it was. And it didn't have to be repeatedly taken down for maintenance every time we wanted to extend it. The internet, today, is sometimes cited by Kay as the only working example of his OO model."),(0,n.kt)("h3",{id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"},"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"),(0,n.kt)("h4",{id:"21531-is-erlang-object-oriented"},"2.15.3.1 Is Erlang object oriented?"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Joe Armstrong:")," Smalltalk got a lot of the things right. So if your question is about what I think about object oriented programming, I sort of changed my mind over that. I wrote a an article, a blog thing, years ago - Why object oriented programming is silly. I mainly wanted to provoke people with it. They had a quite interesting response to that and I managed to annoy a lot of people, which was part of the intention actually. I started wondering about what object oriented programming was and I thought Erlang wasn't object oriented, it was a functional programming language."),(0,n.kt)("p",null,"Then, my thesis supervisor said \"But you're wrong, Erlang is extremely object oriented\". He said object oriented languages aren't object oriented. I might think, though I'm not quite sure if I believe this or not, but Erlang might be the only object oriented language because the 3 tenets of object oriented programming are that it's based on message passing, that you have isolation between objects and have polymorphism."),(0,n.kt)("p",null,"Alan Kay himself wrote this famous thing and said \"The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages\". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back."),(0,n.kt)("p",null,"But you don't really do that and you don't really have isolation which is one of the problems. Dan Ingalls said yesterday (I thought it was very nice) about messaging that once you got messaging, you don't have to care where the message came from. You don't really have to care, the runtime system has to organize the delivery of the message, we don't have to care about how it's processed. It sort of decouples the sender and the receiver in this kind of mutual way. That's why I love messaging."),(0,n.kt)("p",null,"The 3 things that object oriented programming has it's messaging, which is possibly the most important thing. The next thing is isolation and that's what I talked about earlier, that my program shouldn't crash your program, if the 2 things are isolated, then any mistakes I make in my program will not crash your program. This is certainly not true with Java. You cannot take 2 Java applications, bung them in the JVM and one of them still halts the machine and the other one will halt as well. You can crash somebody else's application, so they are not isolated."),(0,n.kt)("p",null,"The third thing you want is polymorphism. Polymorphism is especially regarding messaging, that's just there for the programmer's convenience. It's very nice to have for all objects or all processes or whatever you call them, to have a printMe method - \"Go print yourself\" and then they print themselves. That's because the programmers, if they all got different names, the programmer is never going to remember this, so it's a polymorphism. It just means \"OK, all objects have a printMe method. All objects have a what's your size method or introspection method.\""),(0,n.kt)("p",null,"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about. You can try it and see it for yourself."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://www.infoq.com/interviews/johnson-armstrong-oop/"},"https://www.infoq.com/interviews/johnson-armstrong-oop/"))),(0,n.kt)("h4",{id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb"},"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb"),(0,n.kt)("p",null,"\u6309\u7167Alan Kay\u7684\u5b9a\u4e49\uff0cOOP\u7684\u6838\u5fc3\u4e09\u8981\u7d20\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"message passing, "),(0,n.kt)("li",{parentName:"ul"},"that you have isolation between objects "),(0,n.kt)("li",{parentName:"ul"},"and have polymorphism.")),(0,n.kt)("p",null,"\u5927\u591a\u6570\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u90fd\u652f\u6301\u591a\u6001\uff0c\u4f46\u662f\u5173\u4e8e\u9694\u79bb\u7684\u610f\u4e49\uff0c\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u7684\u7406\u89e3\u662f\u4e0d\u592a\u5b8c\u6574\u7684\u3002\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u4eba\u4eec\u8bf4\u7684\u66f4\u591a\u7684\u662f\u5c01\u88c5\u800c\u4e0d\u662f\u9694\u79bb\uff0c\u8868\u9762\u4e0a\u770b\u5c01\u88c5\u5176\u5b9e\u5c31\u662f\u628a\u5404\u79cd\u7ec6\u8282\u9690\u85cf\u5728\u5bf9\u8c61\u5185\u90e8\uff0c\u4ece\u800c\u5b9e\u73b0\u4e86\u9694\u79bb\u3002\u4f46\u8fd9\u53ea\u662f\u6982\u5ff5\u4e0a\u7684\u9694\u79bb\uff0c\u800c\u4e0d\u662f\u771f\u6b63\u8fd0\u884c\u65f6\u7684\u5bf9\u8c61\u9694\u79bb\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u63d0\u51faisolation\u7684\u6982\u5ff5\uff0c\u5b83\u7684\u610f\u4e49\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7a0b\u5e8f\u7684\u5065\u58ee\u6027\uff0c\u6bd4\u5982\u57281000\u4e2a\u5bf9\u8c61\u8fd0\u884c\u7684\u7a0b\u5e8f\u4e2d\uff0c\u5982\u679c\u6709\u5176\u4e2d\u51e0\u4e2a\u5bf9\u8c61\u53d1\u751f\u4e86\u9519\u8bef\uff0c\u5982\u679c\u5b83\u7684\u903b\u8f91\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u5bf9\u8c61\uff0c\u5219\u6574\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u4e0d\u53d7\u5230\u5f71\u54cd\u3002\u6240\u4ee5\u5b83\u662f\u4ece\u7a0b\u5e8f\u6784\u9020\u65b9\u9762\u7684\u610f\u4e49\uff0c\u800c\u5c01\u88c5\u5e76\u4e0d\u80fd\u89e3\u51b3\u4e0a\u8ff0\u7684\u5065\u58ee\u6027\u95ee\u9898\uff0c\u5c01\u88c5\u7684\u6982\u5ff5\u66f4\u591a\u7684\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u800c\u8a00\u7684\uff0c\u8ba9\u7a0b\u5e8f\u5458\u628a\u4e00\u7ec4\u76f8\u5173\u7684\u65b9\u6cd5\u548c\u5c5e\u6027\u5c01\u88c5\u5728\u4e00\u4e2a\u5bf9\u8c61\u4e0a\u662f\u6613\u4e8e\u7406\u89e3\u548c\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u662f\u9762\u5411\u8f6f\u4ef6\u6784\u9020\u7684\u610f\u4e49\uff0c\u5373\u9762\u5411\u673a\u5668\uff0c\u800c\u4e0d\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7406\u89e3\u7684\u610f\u4e49\uff0c\u800c\u5f53\u4eca\u5927\u591a\u6570\u5173\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u6982\u5ff5\u66f4\u591a\u662f\u56f4\u7ed5\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u7684\u89d2\u5ea6\u3002")),(0,n.kt)("p",null,"\u90a3\u4e3a\u4ec0\u4e48\u5bf9\u8c61\u5c01\u88c5\u89e3\u51b3\u4e0d\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u800cErlang\u89e3\u51b3\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u6838\u5fc3\u539f\u56e0\u5728\u4e8eErlang\u4e3a\u4e86\u4fdd\u8bc1\u5065\u58ee\u6027\uff0c\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u72ec\u7acb\u8fd0\u884c\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9694\u79bb\uff0c\u4e00\u4e2a\u5bf9\u8c61\u7684Crash\u4e0d\u80fd\u5f71\u54cd\u5176\u4ed6\u5bf9\u8c61\uff0c\u6240\u4ee5Erlang\u628a\u65b9\u6cd5\u8c03\u7528\u8fdb\u884c\u4e86\u5207\u9664\u3002\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u51e0\u4e4e\u9664Erlang\u4e4b\u5916\u7684\u6240\u6709\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4eec\u4e3a\u4e86\u4fdd\u8bc1\u7a0b\u5e8f\u6267\u884c\u7684\u5e8f\u5217\uff0c\u90fd\u662f\u91c7\u7528\u76f4\u63a5\u8c03\u7528\u7684\u65b9\u6cd5\uff0c\u5373\u5f53A\u5bf9\u8c61\u8c03\u7528B\u5bf9\u8c61\u7684\u65b9\u6cd5\u65f6\uff0cA\u5bf9\u8c61\u7684\u6307\u4ee4\u4f1a\u88ab\u6302\u8d77\uff0c\u7a0b\u5e8f\u4f1a\u8fdb\u5165\u5230B\u5bf9\u8c61\u5185\u90e8\u76f8\u5e94\u7684\u65b9\u6cd5\u8fdb\u884c\u6267\u884c\uff0c\u5e76\u4e14\u7b49\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u8fd4\u56de\u503c\u7ed9A\u5bf9\u8c61\uff0c\u5e76\u5c06\u6267\u884c\u6307\u4ee4\u7684\u6307\u9488\u8fd4\u56de\u5230\u5bf9\u8c61A\u8c03\u7528\u65b9\u6cd5\u540e\u9762\u7684\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u73b0\u4ee3\u7f16\u8bd1\u67b6\u6784\u90fd\u662f\u6309\u7167\u4e0a\u8ff0\u7684\u6d41\u7a0b\u6784\u5efa\u7684\uff0c\u6bd4\u5982\u5728\u65b9\u6cd5\u8c03\u7528\u7684\u65f6\u5019\uff0c\u7a0b\u5e8f\u8df3\u8f6c\u5230B\u5bf9\u8c61\u76f8\u5e94\u7684\u4ee3\u7801\u533a\u57df\uff0c\u5e76\u4f7f\u7528\u5bc4\u5b58\u5668\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u7136\u540e\u65b9\u6cd5\u6267\u884c\u5b8c\u6bd5\u540e\u8df3\u8f6c\u56de\u5230\u539f\u6765\u7684\u8fd4\u56de\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u6837\u7684\u6d41\u7a0b\u5bf9\u4e8e\u7f16\u8bd1\u5668\u67b6\u6784\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u7a0b\u5e8f\u5458\u90fd\u662f\u76f8\u5bf9\u5bb9\u6613\u7406\u89e3\u7684\uff1a\u5f97\u5230\u8fd4\u56de\u503c\u540e\u63a5\u7740\u6267\u884c\u540e\u9762\u7684\u8bed\u53e5\uff0c\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u601d\u8def\u662f\u8fde\u8d2f\u7684\u3002\u5e76\u4e14\u5982\u524d\u9762\u5173\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u6216\u8005\u7edf\u7b79\u7f16\u7a0b\u76f8\u5173\u7684\u63cf\u8ff0\uff0c\u7a0b\u5e8f\u5458\u4e0d\u9700\u8981\u989d\u5916\u4fdd\u5b58\u8ba1\u7b97\u7ed3\u679c\uff0c\u76f4\u63a5\u4f7f\u7528\u5f53\u524d\u7684\u503c\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u7ba1\u7406\u662f\u6700\u7b80\u5355\u7684\u3002\u5426\u5219\u6211\u4eec\u9700\u8981\u4e00\u5957\u590d\u6742\u7684\u673a\u5236\u6765\u7ba1\u7406\u903b\u8f91\uff0c\u6bd4\u5982\u9700\u8981\u4fdd\u5b58\u4e00\u4e9b\u503c\u5728\u540e\u9762\u67d0\u4e2a\u65f6\u5019\u4f7f\u7528\uff0c\u800c\u5982\u679c\u4f7f\u7528\u7684\u65f6\u5019\u4ee3\u7801\u5728\u5176\u4ed6\u4f4d\u7f6e\uff0c\u8fd8\u6d89\u53ca\u600e\u4e48\u53d6\u5f97\u8fd9\u4e9b\u5b58\u50a8\u7684\u8ba1\u7b97\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u79cd\u8026\u5408\u7684\u903b\u8f91\u7834\u574f\u4e86\u9694\u79bb\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u88ab\u8c03\u7528\u65b9\u6cd5Crash\uff0c\u6bd4\u5982\u4f1a\u5f71\u54cd\u540e\u9762\u6574\u4e2a\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u8ba9\u6574\u4e2a\u7a0b\u5e8f\u5d29\u6e83\u3002\u8fd8\u4e0d\u8bf4\u8fd9\u79cd\u8026\u5408\u5bfc\u81f4\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u5355\u4e00\u6027\u95ee\u9898\uff0c\u5373\u6574\u4e2a\u7a0b\u5e8f\u9700\u8981\u88ab\u4e00\u6b21\u6027\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cA\u5bf9B\u7684\u5f15\u7528\uff0c\u5f62\u6210\u4e86\u8026\u5408\uff0cB\u4e0d\u80fd\u52a8\u6001\u66f4\u65b0\uff0c\u5982\u679cB\u6709\u4fee\u6539\uff0c\u4e5f\u9700\u8981\u6574\u4e2a\u7a0b\u5e8f\u91cd\u65b0\u7f16\u8bd1\uff0c\u5373\u4f7f\u52a8\u6001\u8bed\u8a00\uff0c\u4e5f\u4f1a\u5f62\u6210\u5f88\u6df1\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u8981\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u6211\u4eec\u5fc5\u987b\u5c06\u65b9\u6cd5\u8c03\u7528\u5207\u5f00\uff0c\u5373A\u65b9\u6cd5\u4e0d\u9700\u8981\u7b49\u5f85B\u65b9\u6cd5\u7684\u8fd4\u56de\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u53ef\u4ee5\u6709\u5f88\u591a\u4e0d\u540c\u7684\u5b9e\u73b0\u673a\u5236\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\u90fd\u4f1a\u7ed9\u7cfb\u7edf\u67b6\u6784\u548c\u5f00\u53d1\u8005\u5e26\u6765\u4e00\u4e9b\u4e0d\u4fbf\uff0c\u6216\u8005\u8bf4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"We need to isolate all the code that runs in order to achieve a goal in such a way that we can detect if any errors occurred when trying to achieve a goal. Also, when we are trying to simultaneously achieve multiple goals we do not want a sodware error occurring in one part of the system to propagate to another part of the system."),(0,n.kt)("p",{parentName:"blockquote"},"The essential problem that must be solved in making a fault-tolerant sodware system is therefore that of fault-isolation. Dicerent programmers will write dicerent modules, some modules will be correct, others will have errors. We do not want the errors in one module to adversely acect the behaviour of a module which does not have any errors."),(0,n.kt)("p",{parentName:"blockquote"},"To provide fault-isolation we use the traditional operating system no- tion of a process. Processes provide protection domains, so that an error in one process cannot acect the operation of other processes. Dicerent pro- grammers write dicerent applications which are run in dicerent processes; errors in one application should not have a negative influence on the other applications running in the system."),(0,n.kt)("p",{parentName:"blockquote"},"-- from Joe Armstrong\u2018s Phd thesis")),(0,n.kt)("p",null,"Erlang\u9009\u62e9\u4e86\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u4e4b\u95f4\u5b8c\u5168\u9694\u79bb\uff0c\u6240\u4ee5\u5929\u751f\u5c31\u89e3\u51b3\u4e86\u9694\u79bb\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e14\u8fd9\u79cd\u9694\u79bb\u6027\u662f\u975e\u5e38\u5f7b\u5e95\u7684\u3002\u5c3d\u7ba1\u5728\u4e00\u4e2a\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u521b\u5efa\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f46\u662f\u5b83\u5374\u4e0d\u80fd\u76f4\u63a5\u8c03\u7528\uff0c\u6240\u6709\u7684\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u5c31\u81ea\u7136\u53d8\u6210\u4e86\u6d88\u606f\u3002\u8fd9\u53c8\u5929\u751f\u7b26\u5408\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u6838\u5fc3\uff0c\u5373\u6d88\u606f\u4f20\u9012\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5982\u679c\u6ca1\u6709\u5b9e\u73b0\u65b9\u6cd5\u8c03\u7528\u7684\u5207\u5272\uff0c\u4ece\u7406\u8bba\u4e0a\u8bf4\u5c31\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u6d88\u606f\u4f20\u9012\u3002")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation.")),(0,n.kt)("p",null,"\u5728Smalltalk\u4e2d\uff0c\u5c3d\u7ba1\u8bed\u8a00\u5f00\u53d1\u8005\u8ba4\u4e3a\u65b9\u6cd5\u8c03\u7528\u662f\u6d88\u606f\u4f20\u9012\uff0c\u800c\u4e0d\u662f\u4f20\u7edf\u7f16\u7a0b\u610f\u4e49\u4e0a\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u79cd\u6d88\u606f\u4f20\u9012\u6ca1\u80fd\u591f\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0cSmalltalk\u7684\u6d88\u606f\u4f20\u9012\u66f4\u591a\u662f\u7ed3\u5408\u5ef6\u8fdf\u7ed1\u5b9a\u7684\u52a8\u6001\u7279\u6027\u4f7f\u5f97\u54cd\u5e94\u8005\u6709\u4e00\u5b9a\u7684\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u5bf9\u4e00\u4e2a\u201c\u65b9\u6cd5\u8c03\u7528\u201d\u7684\u6d88\u606f\u4ea7\u751f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u54cd\u5e94\uff0c\u8fd9\u5f97\u76ca\u4e8e\u5ef6\u8fdf\u7ed1\u5b9a\uff0c\u4f8b\u5982\u53ef\u4ee5\u901a\u8fc7\u8fd0\u884c\u65f6\u7684\u4e00\u6761\u60c5\u51b5\u6267\u884c\u4e0d\u540c\u7684\u54cd\u5e94\u3002\u4f46\u8fd9\u79cd\u7279\u6027\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u8f6f\u4ef6\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u6700\u91cd\u8981\u7684\u9694\u79bb\u95ee\u9898\u3002\u800c\u53ef\u6269\u5c55\u6027\u5e76\u4e0d\u662fSmalltalk\u552f\u4e00 \u7684\u4f18\u52bf\uff0c\u5f88\u591a\u52a8\u6001\u8bed\u8a00\u90fd\u80fd\u591f\u505a\u5230\u8fd9\u6837\u7684\u3002"),(0,n.kt)("p",null," \u5f53\u7136\u5bf9\u4e8e\u5065\u58ee\u6027\uff0cSmalltalk\u7684\u601d\u8def\u662f\uff1a1\uff09\u9996\u5148\u4fdd\u5b58\u5feb\u7167\uff1b2\uff09\u7136\u540e\u53ef\u4ee5\u52a8\u6001\u4fee\u6539\u4ee3\u7801\u8fdb\u884c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"Erlang\u7684\u6d88\u606f\u4f20\u9012\u6a21\u578b\u5e26\u6765\u4e86\u5bf9\u8c61\u4e4b\u95f4\u5173\u7cfb\u7684\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f46\u5b83\u4fdd\u8bc1\u4e86\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u7684\u771f\u6b63\u6838\u5fc3\u7279\u6027\u3002\u8fd9\u79cd\u4e0d\u4e00\u6837\u7684\u7279\u6027\u662f\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u90fd\u4e0d\u5177\u5907\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u8bf4\u662f\u552f\u4e00 \u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002"),(0,n.kt)("h4",{id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236"},"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Each independent activity should be performed in a completely isolated process. Such processes should share no data, and only commu- nicate by message passing. This is to limit the consequences of a sodware error."),(0,n.kt)("p",{parentName:"blockquote"},"As soon as two processes share any common resource, for example, memory or a pointer to memory, or a mutex etc the possibility exists that a sodware error in one of the processes will corrupt the shared resource. Since eliminating all such sodware errors for large sodware systems is an unsolved problem I think that the only realistic way to build large reliable systems is by partitioning the system into independent parallel processes, and by providing mechanisms for monitoring and restarting these pro- cesses.")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u4e2d\u7684\u5bf9\u8c61\u4e4b\u95f4\u5f80\u5f80\u90fd\u5305\u542b\u7740\u590d\u6742\u7684\u5173\u7cfb\uff0c\u5bf9\u8c61\u6570\u636e\u7684\u5f15\u7528\uff0c\u65b9\u6cd5\u8c03\u7528\uff0c\u6216\u8005\u7b2c\u4e09\u65b9\u5171\u4eab\u6570\u636e\uff0c\u8fd9\u4e9b\u90fd\u662f\u5e76\u53d1\u548c\u9694\u79bb\u9762\u5bf9\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u65b9\u9762Erlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u66f4\u597d\u7684\u65b9\u6cd5\uff0c\u53ea\u662f\u5f3a\u884c\u5c06\u5bf9\u8c61\u5b8c\u5168\u9694\u79bb\u5f00\uff0c\u6240\u4ee5\u5bf9\u8c61\u4e4b\u95f4\u7684\u6240\u6709\u901a\u4fe1\u5c31\u53d8\u6210\u6d88\u606f\uff0c\u8fd9\u4e9b\u6d88\u606f\u53ef\u80fd\u662f\u5bf9\u53e6\u4e00\u4e2a\u5bf9\u8c61\u67d0\u4e2a\u6570\u636e\u7684\u8bfb\u53d6\uff0c\u67d0\u4e2a\u65b9\u6cd5\u7684\u8c03\u7528\u7b49\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u5168\u90e8\u8f6c\u5316\u4e3a\u6d88\u606f\uff1b\u5e76\u4e14\u7531\u4e8e\u6d88\u606f\u7684\u5f02\u6b65\u6027\uff0c\u7a0b\u5e8f\u7684\u987a\u5e8f\u88ab\u6253\u4e71\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u975e\u76f4\u63a5\u7684\u65b9\u5f0f\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u867d\u7136\u672c\u8d28\u4e0a\u6240\u6709\u7684\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u8fd9\u4e48\u53bb\u8f6c\u5316\uff0c\u4f46\u662f\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u590d\u6742\u6027\uff0c\u800cErlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u5f88\u597d\u7684\u673a\u5236\u53bb\u89e3\u51b3\u8fd9\u79cd\u590d\u6742\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u8fd9\u5c31\u4f7f\u5f97Erlang\u57fa\u672c\u4e0a\u53ea\u9002\u5408\u4e8e\u90a3\u79cd\u9ad8\u5e76\u53d1\u4f46\u662f\u7ebf\u7a0b\u76f8\u5bf9\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0b\u4e00\u8282\u5c06\u770b\u5230\uff0cRealityIS\u901a\u8fc7\u5f15\u5165\u4e00\u79cd\u65b0\u7684\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"},"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u80fd\u4fee\u6539\u81ea\u8eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u4fee\u6539\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\uff0c\u53ea\u80fd\u7ed9\u5176\u4ed6\u5bf9\u8c61\u8f93\u5165\u53c2\u6570\uff0c\u7531\u5176\u4ed6\u5bf9\u8c61\u81ea\u884c\u5904\u7406\uff0c\u8fd9\u6837\u7684\u53c2\u6570\u8f93\u5165\u5b9e\u9645\u4e0a\u5c31\u662f\u6d88\u606f"),(0,n.kt)("h4",{id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"},"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"),(0,n.kt)("p",null,"\u5e76\u4e0d\u9700\u8981\u6240\u6709\u7ebf\u7a0b\u771f\u6b63\u9694\u79bb\uff0c\u771f\u6b63\u9694\u79bb\u5e26\u6765\u5f88\u591a\u7f16\u7a0b\u4e0a\u7684\u4e0d\u4fbf\u3002"),(0,n.kt)("p",null,"\u539f\u59cb\u9694\u79bb\u7684\u5b9a\u4e49\u662f\u5e0c\u671b\u6bcf\u4e2a\u4ee3\u7801\u90fd\u4e0d\u5f71\u54cd\u5176\u4ed6\u4ee3\u7801\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u53ea\u662f\u4e00\u4e2a\u7c92\u5ea6\u7684\u95ee\u9898\uff0c\u6bd4\u5982\u4e25\u683c\u7684\u4e00\u70b9\u7684\u662f\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u90fd\u9694\u79bb\uff0c\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u5f7c\u6b64\u90fd\u4e0d\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u7a0d\u5fae\u653e\u677e\u4e00\u4e0b\u8fd9\u79cd\u9694\u79bb\uff0c\u4f60\u5f71\u54cd\u53ef\u4ee5\u5f71\u54cd\u4e00\u5b9a\u7684\u8303\u56f4\uff0c\u5355\u53ea\u53ea\u8981\u6700\u7ec8\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8bc6\u522b\u8fd9\u79cd\u5f71\u54cd\uff0c\u5e76\u5c06\u6240\u6709\u53d7\u5f71\u54cd\u7684\u90e8\u5206\u5168\u90e8\u53bb\u9664\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662fRealityIS\u4e2d\u7684\u673a\u5236\uff0c\u5b83\u901a\u8fc7\u5b9a\u4e49\u5173\u952e\u5b58\u6863\u5c5e\u6027\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u5411Smalltalk\u90a3\u6837\u5c1d\u8bd5\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b58\u6863\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u53ef\u4ee5\u4ece\u4efb\u610f\u4f4d\u7f6e\u6062\u590d\u3002\u76f8\u53cd\uff0cRealityIS\u53ea\u80fd\u4ece\u4e00\u4e9b\u5173\u952e\u8282\u70b9\u8fdb\u884c\u6062\u590d\uff0c\u5e94\u7528\u7a0b\u5e8f\u6216\u8005\u7ec4\u4ef6\u9700\u8981\u5bf9\u5bf9\u8c61\u7684\u6570\u636e\u5b57\u6bb5\u8fdb\u884c\u6062\u590d\uff0c\u8fd9\u4e9b\u5b57\u6bb5\u6839\u636e\u4e0a\u4e00\u4e2a\u672a\u53d7\u5f71\u54cd\u7684\u5173\u952e\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u63a8\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4\u7684\u9694\u79bb\u6027\u6982\u5ff5\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4fdd\u6301\u7a0b\u5e8f\u7684\u63a7\u5236\u80fd\u529b\uff0c\u4f7f\u7a0b\u5e8f\u5458\u53ef\u4ee5\u50cf\u4f20\u7edf\u7a0b\u5e8f\u90a3\u6837\u8fdb\u884c\u64cd\u4f5c\uff0c\u540c\u65f6\u53c8\u80fd\u4fdd\u8bc1\u9694\u79bb\u6027\u3002\u5bf9\u8c61\u4e4b\u95f4\u4ecd\u7136\u4ee5\u6d88\u606f\u8fdb\u884c\u4f20\u9012\uff0c\u4f46\u662f\u8fd9\u79cd\u6d88\u606f\u66f4\u7c7b\u4f3c\u4e8e\u65b9\u6cd5\u8c03\u7528\uff0c\u8c03\u7528\u7684\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u6bcf\u4e2a\u8c03\u7528\u90fd\u9700\u8981\u5c01\u88c5\u4e3a\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u9694\u79bb\u5e26\u6765\u5f88\u591a\u597d\u5904\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u5730\u5e76\u53d1\u5904\u7406\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u4e00\u4e2a\u4e3b\u8981\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5065\u58ee\u6027\uff0c\u66f4\u597d\u5bb9\u9519\uff0c\u4e00\u90e8\u5206\u7684error\u4e0d\u4f1a\u5f71\u54cd\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u9996\u8981\u548c\u6838\u5fc3\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u7684\u903b\u8f91\u7ba1\u7406\u548c\u7ec4\u7ec7"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5b89\u5168\u6027\uff0c\u5c24\u5176\u5728\u591a\u5e94\u7528\u73af\u5883\uff0c\u8fd9\u5bf9RealityIS\u66f4\u91cd\u8981\uff0c\u8fd9\u90e8\u5206\u5728\u7b2c2.16\u8282\u4e13\u95e8\u8ba8\u8bba\u3002")),(0,n.kt)("h4",{id:"21542-\u6d88\u606f\u4f20\u9012"},"2.15.4.2 \u6d88\u606f\u4f20\u9012"),(0,n.kt)("p",null,"\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"},"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In our system concurrency plays a central role, so much so that I have coined the term ",(0,n.kt)("em",{parentName:"p"},"Concurrency Oriented Programming")," to distinguish this style of programming from other programming styles."),(0,n.kt)("p",{parentName:"blockquote"},"In Concurrency Oriented Programming the concurrent structure of the program should follow the concurrent structure of the application. It is particularly suited to programming applications which model or interact with the real world."),(0,n.kt)("p",{parentName:"blockquote"},"The word concurrency refers to sets of events which happen simulta- neously. The real world is concurrent, and consists of a large number of events many of which happen simultaneously. At an atomic level our bodies are made up of atoms, and molecules, in simultaneous motion. At a macroscopic level the universe is populated with galaxies of stars in simultaneous motion."),(0,n.kt)("p",{parentName:"blockquote"},"When we perform a simple action, like driving a car along a freeway, we are aware of the fact that there may be several hundreds of cars within our immediate environment, yet we are able to perform the complex task of driving a car, and avoiding all these potential hazards without even thinking about it."),(0,n.kt)("p",{parentName:"blockquote"},"In the real world sequential activities are a rarity. As we walk down the street we would be very surprised to find only one thing happening, we expect to encounter many simultaneous events."),(0,n.kt)("p",{parentName:"blockquote"},"If we did not have the ability to analyze and predict the outcome of many simultaneous events we would live in great danger, and tasks like driving a car would be impossible. The fact that we can do things which require processing massive amounts of parallel information suggests that we are equipped with perceptual mechanisms which allow us to intuitively understand concurrency without consciously thinking about it.")),(0,n.kt)("p",null,"\u4e16\u754c\u5929\u7136\u662f\u5e76\u53d1\u7684\uff0c\u6211\u4eec\u7684\u5927\u8111\u7684\u601d\u8003\u65b9\u5f0f\u4e5f\u5929\u751f\u9002\u914d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5e76\u53d1\u6a21\u578b\uff0c\u7528\u8fd9\u79cd\u5bf9\u771f\u5b9e\u4e16\u754c\u7684\u903b\u8f91\u6d41\u7a0b\u6765\u5f00\u53d1\u7a0b\u5e8f\u662f\u6700\u597d\u7684\uff0c\u7136\u800c\u6211\u4eec\u51e0\u4e4e\u4ece\u6765\u6ca1\u6709\u8fd9\u79cd\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u6216\u8005\u7f16\u7a0b\u6a21\u578b\u90fd\u662f\u987a\u5e8f\u7f16\u7a0b\u6a21\u578b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"When it comes to computer programming things suddenly become inverted. Programming a sequential chain of activities is viewed the norm , and in some sense is thought of as being easy, whereas programming collections of concurrent activities is avoided as much as possible, and is generally perceived as being diecult."),(0,n.kt)("p",{parentName:"blockquote"},"I believe that this is due to the poor support which is provided for con- currency in virtually all conventional programming languages. The vast majority of programming languages are essentially sequential; any concur- rency in the language is provided by the underlying operating system, and not by the programming language."),(0,n.kt)("p",{parentName:"blockquote"},"In this thesis I present a view of the world where concurrency is pro- vided by the programming language, and not by the underlying operating system. Languages which have good support for concurrency I call Concur ",(0,n.kt)("em",{parentName:"p"},"rency Oriented Languages,")," or COPLs for short.")),(0,n.kt)("p",null,"\u54cd\u5e94\u5f0f"),(0,n.kt)("h4",{id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5"},"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5"),(0,n.kt)("h4",{id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7"},"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7"),(0,n.kt)("h4",{id:"21546-\u591a\u6001"},"2.15.4.6 \u591a\u6001"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Concurrency Oriented Programming also provides the two major ad- vantages commonly associated with object-oriented programming. These are polymorphism and the use of defined protocols having the same mes- sage passing interface between instances of dicerent process types."),(0,n.kt)("p",{parentName:"blockquote"},"When we partition a problem into a number of concurrent processes we can arrange that all the processes respond to the same messages (ie they are polymorphic,) and that they all follow the same message passing interface.")),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4ea4\u4e92\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u53ef\u4ee5\u54cd\u5e94\u4e0d\u540c\u7684\u6d88\u606f\uff0c\u771f\u5b9e\u4e16\u754c\u5929\u751f\u662f\u591a\u6001\u7684\uff0c\u7136\u800c\u8fd9\u4f1a\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a7\u5236\u53d8\u5f97\u56f0\u96be\uff0c\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u7684\u591a\u6001\u6027\u5219\u76f8\u53cd\uff0c\u5b83\u5e0c\u671b\u5c3d\u53ef\u80fd\u5c11\u7684\u591a\u6001\u6027\uff0c\u56e0\u4e3a\u66f4\u5e7f\u6cdb\u7684\u591a\u6001\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u53d8\u5f97\u590d\u6742\u96be\u4ee5\u7406\u89e3\uff0c\u5e76\u4e14\u52a8\u6001\u7684\u8ba1\u7b97\u5730\u5740\u5c06\u4f1a\u5bfc\u81f4\u66f4\u5927\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"21547-\u5bf9\u8c61\u5173\u7cfb"},"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",{parentName:"blockquote"},"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",{parentName:"blockquote"},"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u7ebf\u7a0b\u4e4b\u95f4\u7684\u5b89\u5168\uff0cErlang\u4f7f\u7528Name\u6765\u8868\u5f81\u6743\u9650\uff0c\u4f60\u62e5\u6709\u67d0\u4e2a\u7ebf\u7a0b\u7684name\uff0c\u4f60\u5c31\u6709\u6743\u9650\u4e0e\u4e4b\u8fdb\u884c\u6d88\u606f\u901a\u4fe1\u3002\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\uff0c\u4f60\u51e0\u4e4e\u603b\u662f\u4e0e\u4f60\u8ba4\u8bc6\u7684\u4eba\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u51e0\u4e4e\u4e0d\u4f1a\u8ddf\u964c\u751f\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\uff0c\u6216\u8005\u4e00\u4e2a\u66f4\u5f00\u653e\u7684\u7a0b\u5e8f\u4e16\u754c\uff0c\u9664\u4e86\u8fd9\u79cd\u57fa\u4e8ename\u7684\u4ea4\u4e92\u5173\u7cfb\uff0c\u8fd8\u6709\u5927\u91cf\u7684\u903b\u4e0d\u662f\u57fa\u4e8ename\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u64ad\u7684\u6d88\u606f\u80af\u5b9a\u4e0d\u4f1a\u53bb\u6309\u4e00\u4e2a\u4e00\u4e2a\u7684name\u8fdb\u884c\u4f20\u9012\uff0c\u800c\u4e14\u6309\u7167name\u7684\u8bbe\u8ba1\u521d\u8877\uff0c\u5b83\u4e5f\u4e0d\u4f1a\u8f7b\u6613\u8ba9\u4e00\u4e2a\u8fdb\u7a0b\u638c\u63e1\u6240\u8fdb\u7a0b\u7684name\uff0c\u5426\u5219name\u7684\u8bbe\u8ba1\u5c31\u4f1a\u5931\u53bb\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u6743\u9650\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e09\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7cfb\u7edf\u6743\u9650\uff0c\u53ef\u4ee5\u5411\u6240\u6709\u4eba\u53d1\u9001\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u6743\u9650\uff0c\u57fa\u4e8e\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u68c0\u7d22\uff0c\u4f46\u662f\u9644\u5e26\u597d\u53cb\u6743\u9650\u7b5b\u9009"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u7528\u5185\u6743\u9650\uff0c\u7406\u8bba\u4e0a\u4e00\u4e2a\u5e94\u7528\u5185\u90e8\u7684\u7ec4\u4ef6\u5728\u5e94\u7528\u5185\u90e8\u62e5\u6709\u6240\u6709\u6743\u9650\uff0c\u5c31\u50cf\u4e00\u4e2a\u5e94\u7528\u5e94\u7528\uff0c\u9664\u975e\u7528\u6237\u7981\u6b62\u67d0\u4e2a\u6570\u636e\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u6bcf\u4e2aobject\u9700\u8981\u643a\u5e26\u5f88\u591a\u4fe1\u606f\uff0c\u4f8b\u5982appid\uff0cusderid\u7b49\u5f85\u3002"),(0,n.kt)("h4",{id:"21548-\u5bb9\u9519\u673a\u5236"},"2.15.4.8 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("h2",{id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"},"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The inability to isolate sodware components from each other is the main reason why many popular programming languages cannot be used for making robust system sodware."),(0,n.kt)("p",{parentName:"blockquote"},"It is essential for security to be able to isolate mistrusting pro- grams from one another, and to protect the host platform from such programs. Isolation is diecult in object-oriented systems because objects can easily become aliased.4\u2014Bryce ","[21]"),(0,n.kt)("p",{parentName:"blockquote"},"Bryce goes on to say that object aliasing is diecult if not impossible to detect in practice, and recommends the use of protection domains (akin to OS processes) to solve this problem."),(0,n.kt)("p",{parentName:"blockquote"},"In a paper on Java Czajkowski, and Dayn`es, from Sun Microsystems, write:"),(0,n.kt)("p",{parentName:"blockquote"},"The only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and to execute each JVM in a separate OS process. This introduces various ineeciencies in resource utilization, which downgrades perfor- mance, scalability, and application startup time. The benefits the language can ocer are thus reduced mainly to portability and improved programmer productivity. Granted these are important, but the full potential of language-provided safety is not realized. Instead there exists a curious distinction between \u201clanguage safety,\u201d and \u201creal safety\u201d. \u2014 ","[28]"),(0,n.kt)("p",{parentName:"blockquote"},"In this paper they introduce the MVM (an extension to the JVM) where their goal is:"),(0,n.kt)("p",{parentName:"blockquote"},"... to turn the JVM into an execution environment akin to an OS. In particular, the abstraction of a process, ocered by modern OSes, is the role model in terms of features; isolation from other computations, resources accountability and control, and ease of termination and resource reclamation."),(0,n.kt)("p",{parentName:"blockquote"},"To achieve this they conclude that:"),(0,n.kt)("p",{parentName:"blockquote"},"... tasks cannot directly share objects, and that the only way for tasks to communicate is to use standard, copying commu- nication mechanisms, ..."),(0,n.kt)("p",{parentName:"blockquote"},"These conclusions are not new. Very similar conclusions were arrived at some two decades earlier by Jim Gray who described the architecture of the Tandem Computer in his highly readable paper Why do computers stop and what can be done about it. He says:"),(0,n.kt)("p",{parentName:"blockquote"},"As with hardware, the key to sodware fault-tolerance is to hier- archically decompose large systems into modules, each mod- ule being a unit of service and a unit of failure. A failure of a module does not propagate beyond the module."),(0,n.kt)("p",{parentName:"blockquote"},"..."),(0,n.kt)("p",{parentName:"blockquote"},"The process achieves fault containment by sharing no state with other processes; its only contact with other processes is via messages carried by a kernel message system. \u2014 ","[38]"),(0,n.kt)("p",{parentName:"blockquote"},"Language which support this style of programming (parallel processes, no shared data, pure message passing) are what Andrews and Schneider ","[4]"," refer to as a \u201cMessage oriented languages.\u201d The language with the delightful name PLITS5 (1978) ","[35]"," is probably the first example of such a programming language:"),(0,n.kt)("p",{parentName:"blockquote"},"The fundamental design decision in the implementation of RIG6 was to allow a strict message discipline with no shared data structures. All communication between user and server messages is through messages which are routed by the Aleph kernel. This message discipline has proved to be very flexible and reliable. \u2014 ","[35]")),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5728\u7ec4\u4ef6\u4e4b\u95f4\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4f20\u9012\u57fa\u672c\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e76\u4e14\u4e0d\u5305\u542b\u4efb\u4f55\u6307\u9488\u548c\u5f15\u7528\u6765\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5b89\u5168\u6027\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h3",{id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027"},"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21611-java-class-loader--security"},"2.16.1.1 java class loader & security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Today's computer users cannot realistically trust that the programs they run are bug or virus free. It is cruicial then that the host be able to run a non-trusted program in isolation from its services. This means that client programs not be able to communicate with services, or that they can only do so under the control of a security policy that decides whether each method call from a program to the servers is permitted."),(0,n.kt)("p",{parentName:"blockquote"},"In comparison, the ability to isolate programs in this fashion is awkward in Java using loader spaces. In Java, each program is allocated its own class loader, which is responsible for loading versions of the classes for the program. An object instantiated from a class loaded by one loader is considered as possesing a distinct type to objects of the same class loaded by another loader. This means that the assignment of an object reference in one domain to a variable in another domain consititues a type error. This model is inconvenient for client-sever comunication, since parameter objects must be serialized (transferred by value).")),(0,n.kt)("p",null,"Java\u7684class loader\u4e0d\u5b89\u5168\uff0c\u6240\u6709\u5177\u6709\u5916\u90e8\u7b26\u53f7\u7684\u865a\u62df\u673a\u52a0\u8f7d\u65b9\u5f0f\uff0c\u5728multitasking \u60c5\u51b5\u4e0b\u90fd\u662f\u8fd9\u6837\uff1f"),(0,n.kt)("p",null,"\u5728OOP\u4e2d\uff0c\u7c7b\u4f3c\u4e4b\u95f4\u5305\u542b\u7ee7\u627f\u5173\u7cfb\uff0c\u4e0d\u540c\u7684\u7c7b\u578b\u4e4b\u95f4\u4e5f\u53ef\u80fd\u5305\u542b\u5f15\u7528\u5173\u7cfb\uff0c\u8fd9\u4f7f\u5f97object\u5f80\u5f80\u4e0d\u662f\u72ec\u7acb\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u5bf9\u8c61\u7684\u7c7b\u578b\u4fe1\u606f\u5305\u542b\u5728\u7c7b\u4f3cClass\u8fd9\u6837\u7684\u5bf9\u8c61\u4e2d\uff0c\u800c\u8fd9\u6837\u7684\u5bf9\u8c61\u88ab\u6240\u6709\u8be5\u7c7b\u578b\u7684\u5bf9\u8c61\u5f15\u7528\uff0c\u6240\u4ee5\u5c31\u5bfc\u81f4\u5bf9\u8c61\u4e0d\u80fd\u5177\u6709\u72ec\u7acb\u3001\u5b8c\u5168\u9694\u79bb\u7684domain space\uff0c\u56e0\u4e3a\u90a3\u6837\u5c06\u5931\u53bb\u7c7b\u578b\u4fe1\u606f\uff0c\u9664\u975e\u5bf9\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u590d\u5236\uff0c\u4f46\u8fd9\u4f1a\u5360\u636e\u5927\u91cf\u7684\u5b58\u50a8\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u540c\u4e00\u4e2adomain space\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b8c\u5168\u4e0d\u5b58\u5728\u76f8\u4e92\u5f15\u7528\uff0c\u90a3\u6837\u8bed\u8a00\u662f\u53ef\u4ee5\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u4f46\u662f\u4e00\u65e6\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u83b7\u5f97\u5f15\u7528\u7684\u5bf9\u8c61\u5c31\u53ef\u4ee5\u8c03\u7528\u6240\u6709\u8be5\u5bf9\u8c61\u7684\u516c\u5171\u65b9\u6cd5\u3002\u867d\u7136\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u516c\u5171\u5c5e\u6027\u6765\u63a7\u5236\u8bbf\u95ee\u6743\u9650\uff0c\u4f46\u8fd9\u5f80\u5f80\u53ea\u662f\u9488\u5bf9\u7c7b\u578b\u672c\u8eab\u7684\u7279\u6027\uff0c\u800c\u4e0d\u80fd\u63a7\u5236\u5e94\u7528\u7a0b\u5e8f\u903b\u8f91\u4e0d\u5c0f\u5fc3\u5c06\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u7ed9\u975e\u6cd5\u7684\u5bf9\u8c61\u3002\u4f8b\u5982\u5728\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\uff0c\u6709\u65f6\u5019\u53ea\u662f\u4e3a\u4e86\u83b7\u53d6\u6570\u636e\uff0c\u800c\u7b80\u4fbf\u5730\u628a\u4e00\u4e2a\u6574\u4e2a\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u8fc7\u53bb\uff0c\u8fd9\u5c31\u5e26\u6765\u4e86\u98ce\u9669\uff0c\u56e0\u4e3a\u83b7\u5f97\u8fd9\u4e2a\u5f15\u7528\u7684\u7a0b\u5e8f\u4e0d\u4f46\u53ef\u4ee5\u83b7\u53d6\u53d8\u91cf\u7684\u503c\uff0c\u5b83\u8fd8\u53ef\u4ee5\u975e\u6cd5\u65b9\u6cd5\u6240\u6709\u7684\u516c\u5171\u65b9\u6cd5\u3002\u5f53\u6574\u4e2a\u7a0b\u5e8f\u90fd\u5c5e\u4e8e\u4e00\u4e2a\u5f00\u53d1\u5546\u65f6\uff0c\u8fd9\u6ca1\u95ee\u9898\uff0c\u4f46\u662f\u5728multitasking\u7684\u73af\u5883\u4e0b\uff0c\u5c31\u5b58\u5728\u5b89\u5168\u95ee\u9898\u3002\u4e0d\u540cDomain\u7684object\u53ef\u4ee5\u901a\u8fc7\u5168\u5c40\u53d8\u91cf\u7b49\u65b9\u5f0f\u83b7\u53d6\u5230\u4e00\u4e9b\u4e0d\u5c5e\u4e8e \u81ea\u5df1Domain\u7684\u5bf9\u8c61\uff0c\u4f8b\u5982\u901a\u8fc7\u4e00\u4e2a\u516c\u5171\u7684\u4e8b\u4ef6\u7ba1\u7406\u5668\uff0c\u4efb\u4f55task\u53ef\u80fd\u90fd\u53ef\u4ee5\u83b7\u5f97\u6574\u4e2a\u4e8b\u4ef6\u961f\u5217\u3002"),(0,n.kt)("p",null,"\u4fdd\u8bc1\u6240\u6709\u7684object\u4e4b\u95f4\u7684\u901a\u8fc7\u90fd\u901a\u8fc7\u4f20\u9012\u503c\uff0c\u6216\u8005\u590d\u5236\u5bf9\u8c61\u7684\u65b9\u5f0f\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\uff0c\u4f46\u662f\u8fd9\u6837\u53c8\u4f1a\u7ed9\u7f16\u7a0b\u5e26\u6765\u4e0d\u4fbf\u3002"),(0,n.kt)("h4",{id:"21612-java-applets"},"2.16.1.2 Java applets"),(0,n.kt)("p",null,"Java\u6709\u4e00\u4e9b\u9ad8\u7ea7\u7684security model\uff0c\u5176\u4e2d\u5305\u62ecprotection domian\uff0c\u5176\u8bbe\u8ba1\u76ee\u6807\u662f\u5bf9applets\u8fdb\u884c\u9694\u79bb\u3002class loader\u53ea\u662fjava\u7684\u57fa\u672c\u9694\u79bb\u673a\u5236\u3002Java\u4e2d\u7684\u6bcf\u4e2aapplet\u62e5\u6709\u81ea\u5df1\u72ec\u7acb\u7684class loader\uff0c\u6bcf\u4e2a\u72ec\u7acb\u7684class loader\u4f1a\u5728\u81ea\u5df1\u7684protection domain\u52a0\u8f7d\u72ec\u7acb\u548c\u79c1\u6709\u7248\u672c\u7684class\u3002Java\u4f1a\u4fdd\u8bc1\u540c\u4e00\u4e2aclass\u5728\u4e0d\u540c\u7684protection domain\u4e2d\u6709\u4e0d\u540c\u7684\u7684\u7c7b\u578b\uff08distinct type\uff09\uff0c\u56e0\u6b64\u7c7b\u578b\u662f\u9694\u79bb\u673a\u5236\u7684\u57fa\u7840\uff0c\u56e0\u4e3a\u5c06\u4e00\u4e2aloader space\u7684\u5bf9\u8c61\u5f15\u7528\u8d4b\u503c\u7ed9\u53e6\u4e00\u4e2aloader space\u4e2d\u76f8\u540c\u540d\u79f0\u7684class\u4f1a\u5bfc\u81f4\u7c7b\u578b\u9519\u8bef\u3002\u8fd9\u662f\u4e00\u79cd\u52a8\u6001\u7c7b\u578b\uff08dynamic typing\uff09\u68c0\u67e5\u7cfb\u7edf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u65b0\u7684\u7c7b\u578b\u673a\u5236\u7531\u8fd0\u884c\u65f6\u63d0\u4f9b\u800c\u4e0d\u662f\u7f16\u8bd1\u65f6\u53ef\u4ee5\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u7684\u95ee\u9898\u662f\uff0c\u6240\u6709\u7cfb\u7edf\u7ea7\u522b\u7684\u7c7b\u578b\uff08\u4f8b\u5982java.lang\u7b49\u7b49\uff09\u662f\u5171\u4eab\u7684\uff0c\u56e0\u6b64\u8fd8\u662f\u4f1a\u5bfc\u81f4aliasing\u3002\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u7ee7\u627f\u81eaPasswordID\u7684Password\u7c7b\uff0c\u4e24\u4e2aclass loader\u5206\u522b\u521b\u5efa\u81ea\u5df1space\u52a0\u8f7dPassword\u7c7b\uff0c\u4f46\u662f\u6ca1\u6709\u52a0\u8f7dPasswordID\u7c7b\uff0c\u8fd9\u4e2a\u65f6\u5019\u4f7f\u7528\u5230\u7684PasswordID\u7c7b\u4f1a\u7531system loader\u8fdb\u884c\u52a0\u8f7d\uff0c\u6b64\u65f6\u5982\u679c\u4e24\u4e2aspace\u7684\u5f15\u7528\u901a\u8fc7PasswordID\u7c7b\u578b\u8fdb\u884c\u8d4b\u503c\u4f20\u9012\uff0c\u5219\u5c31\u4f1a\u9020\u6210aliasing\u3002"),(0,n.kt)("h4",{id:"21613-mvm"},"2.16.1.3 MVM"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Improved scalability results from an aggressive application of the main design principle of MVM: share as much of the runtime as possible among applications and replicate everything else.")),(0,n.kt)("p",null,"Java class loader\u53ea\u80fd\u505a\u5230\u7c7b\u578b\u5b89\u5168\uff0c\u6240\u4ee5\u5e94\u7528\u9700\u8981\u4fdd\u8bc1Java\u6587\u4ef6\u7684\u6765\u6e90\u662f\u53ef\u9760\u7684\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The existing application isolation mechanisms, such as class loaders ","[16]",", do not guarantee that two arbitrary applications executing in the same instance of the JVM will not interfere with one another. Such interference can occur in many places. For instance, mutable parts of classes can leak object references and can allow one application to prevent the others from invoking certain methods. The internalized strings introduce shared, easy to capture monitors. Sharing event and finalization queues and their associated handling threads can block or hinder the execution of some application. Monopolizing of computational resources, such as heap memory, by one application can starve the others.")),(0,n.kt)("p",null,"\u56e0\u6b64\u552f\u4e00\u7684\u5b89\u5168\u65b9\u5f0f\u662f\u4fdd\u8bc1\u6bcf\u4e2aapp\u53ea\u8fd0\u884c\u4e8e\u4e00\u4e2a\u72ec\u7acb\u7684JVM\u73af\u5883\uff0c\u4f46\u8fd9\u4f1a\u5bfc\u81f4\u8d44\u6e90\u7684\u5229\u7528\u7387\u4f4e\uff0c\u6027\u80fd\u3001\u53ef\u4f38\u7f29\u6027\u548c\u542f\u52a8\u65f6\u95f4\u7684\u95ee\u9898\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Their existence perpetuates the current situation, where the only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and execute each JVM in a separate OS process.")),(0,n.kt)("p",null,"\u9488\u5bf9\u591a\u5e94\u7528\u7684\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u7ea7\u522b\u7684\u5b89\u5168\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"language safety"),(0,n.kt)("li",{parentName:"ul"},"real safety")),(0,n.kt)("p",null,"\u524d\u8005\u666e\u904d\u7f3a\u4e4f\uff0c\u5df2\u6709\u7684\u65b9\u6848\u90fd\u6216\u591a\u6216\u5c11\u9650\u5236\u8bed\u8a00\u6216\u8005\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u540e\u8005\u5219\u5927\u591a\u6570\u4f9d\u8d56\u4e8ehardware-assisted\uff0c OS-style\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Three goals dictate our design choices: (i) no form of interference among executing applications should be allowed, (ii) an illusion of having the JVM (with all core APIs and standard mechanisms) to itself should be provided for each task, and (iii) MVM should perform and scale well. The motivation is to make the system attractive from the practical point of view."),(0,n.kt)("p",{parentName:"blockquote"},"The key design principle of MVM is: examine each component of the JVM and determine whether sharing it among tasks can lead to any interference among them. In some cases this approach yields a clear verdict that the given component can be shared without jeopardizing the safety of the tasks. Other components are either replicated on a per-task basis or made ",(0,n.kt)("em",{parentName:"p"},"task re-entrant"),", that is, usable by many tasks without causing any inter-task interference. This builds on the ideas described in ","[6]",". The technique presented in that work \u2013 replicating static fields and class monitors \u2013 has been generalized in MVM to classify all components of the JVM as \u2018shareable\u2019 or \u2018non-shareable\u2019.")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"A simple way of explaining the model is to first think of a straightforward approach to multitasking in the JavaTM application environment: all applications share all classes. The essential observation at this point is that a safe language already has some built-in support for isolating applications: data references cannot be forged, unsafe casting is not allowed, and jumping to an arbitrary code location is impossible. Consequently, the only data exchange mechanism (barring explicit inter-application communication) is through static fields. This can only occur either by explicit manipulation of static fields or by invoking methods which access these fields. It can lead to unexpected and incorrect behavior depending on how applications use the same class with static fields."),(0,n.kt)("p",{parentName:"blockquote"},"The above observation suggests an approach for achieving isolation among applications: to maintain a separate copy of the static fields for each class, one copy per application that uses the given class. However, only one copy of the ",(0,n.kt)("em",{parentName:"p"},"code")," of any class should exist in the system, regardless of how many applications use it, since methods cannot transfer data from one application to another once the static fields communication channel is removed. (Dealing with covert communication channels is beyond the scope of this paper). Our proposal effectively gives each application the illusion that it has exclusive access to static fields while in reality each application has a separate copy of these fields.")),(0,n.kt)("h3",{id:"2162-program-security-mechanisms"},"2.16.2 Program Security Mechanisms"),(0,n.kt)("p",null,"\u6709\u8bb8\u591a\u5de5\u4f5c\u7528\u4e8e\u5bf9\u7a0b\u5e8f\u96c6\u6210access control\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e4b\u95f4\u6dfb\u52a0\u4e00\u4e2asecurity policy checker\uff0c\u4f8b\u5982Java\u7684\u7cfb\u7edf\u7c7b\u5305\u542b\u4e00\u4e2a\u5bf9SecurityManager\u5bf9\u8c61\u7684\u8c03\u7528\u7528\u4e8e\u68c0\u67e5\u7ebf\u7a0b\u4e4b\u95f4\u7684\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u4e9b\u5b89\u5168\u7b56\u7565\u5219\u7531\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u652f\u6301\uff0c\u7f16\u7a0b\u8bed\u8a00\u5e26\u6709 \u4e00\u5b9a\u7684\u8bbf\u95ee\u6743\u9650\u7684notion\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e9b\u5bf9\u8c61\u5bf9\u53e6\u4e00\u4e9b\u5bf9\u8c61\u7684\u8bbf\u95ee\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u4eca\u66f4\u591a\u7684\u8bed\u8a00\u8bbe\u8ba1\u8005\u5219\u66f4\u591a\u503e\u5411\u4e8e\u5c06\u5b89\u5168\u4e0e\u7c7b\u578b\u7b49\u4ef7\uff0c\u8fd9\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u9759\u6001\u6216\u8005\u52a8\u6001\u68c0\u67e5\u6280\u672f")),(0,n.kt)("h4",{id:"21621-cfi"},"2.16.2.1 CFI"),(0,n.kt)("p",null,"Current software attacks often build on exploits that subvert ma- chine-code execution. The enforcement of a basic safety property, Control-Flow Integrity (CFI), can prevent such attacks from arbi- trarily controlling program behavior. CFI enforcement is simple, and its guarantees can be established formally, even with respect to powerful adversaries. Moreover, CFI enforcement is practical: it is compatible with existing software and can be done efficiently using software rewriting in commodity systems. Finally, CFI pro- vides a useful foundation for enforcing further security policies, as we demonstrate with efficient software implementations of a pro- tected shadow call stack and of access control for memory regions."),(0,n.kt)("h4",{id:"21622-sfi"},"2.16.2.2 SFI"),(0,n.kt)("p",null,"\u5185\u5b58\u5b89\u5168\u662f\u6700\u5927\u6613\u53d7\u4e25\u91cd\u653b\u51fb\u7684\u6765\u6e90\uff0c\u5927\u7ea670%\uff0c\u4e00\u4e9b\u6000\u6709\u6076\u610f\u7684\u653b\u51fb\u8005\u4f8b\u5982\u4e00\u4e9b\u5185\u5b58\u5b89\u5168\u7684bug\u6765\u653b\u51fb\u8f6f\u4ef6\uff0cSoftware sandboxing\u6216\u8005software-based fault isolation (SFI) \u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u8fd9\u4e9b\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cdbug\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7684\u4e00\u4e9b\u4f8b\u5b50\uff0c\u5982OS kernels\uff0cdatabases, browsers , language runtime, and serverless clouds.")),(0,n.kt)("p",null,"SFI\u5f3a\u5236\u5c06\u672a\u4fe1\u4efb\u7684\u4ee3\u7801\u9694\u79bb\u5230\u81ea\u5df1\u7684\u6c99\u76d2\u73af\u5883\uff0c\u5e76\u4fdd\u8bc1\u6bcf\u6b21\u5185\u5b58\u8bbf\u95ee\u90fd\u88ab\u52a8\u6001\u68c0\u67e5\u3002\u4f8b\u5982NaCI\u548cWasm\u90fd\u6709\u63aa\u65bd\u4fdd\u8bc1\u672a\u4fe1\u4efb\u7684\u7ec4\u4ef6\u7684\u5185\u5b58 \u8bbf\u95ee\u90fd\u5904\u4e8e\u81ea\u5df1\u7684\u6c99\u76d2\u533a\u57df\uff0c\u5e76\u4e14\u6dfb\u52a0\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u68c0\u67e5\u4ee5\u4fdd\u8bc1\u6240\u6709\u7684control flow\u90fd\u88ab\u9650\u5b9a\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u8def\u57fa\u5185\u90e8\u3002"),(0,n.kt)("p",null,"\u5b89\u5168\u548c\u6027\u80fd\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u8fd0\u884c\u65f6\u4ee3\u7801\u8fd8\u5f97\u4fdd\u8bc1\u8fd9\u79cd\u68c0\u67e5\u672c\u8eab\u662f\u5b89\u5168\u548c\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u901a\u5e38\u673a\u5236\u5c31\u6bd4\u8f83\u590d\u6742\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u6f0f\u6389\u7684\u68c0\u67e5\u90fd\u53ef\u80fd\u5bfc\u81f4\u653b\u51fb\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u5b89\u5168\u6027\u548c\u6b63\u786e\u6027\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u6b63\u786e\u6027\u548c\u8ba1\u7b97\u91cf\u4e5f\u662f\u5f71\u54cd\u5b89\u5168\u548c\u6027\u80fd\u7684\u91cd\u8981\u6765\u6e90")),(0,n.kt)("p",null,"\u5728\u4e00\u4e9b\u6c99\u76d2\u5e94\u7528\u67b6\u6784\u6bd4\u8f83\u91cd\u7684\u5e94\u7528\u4e2d\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u53ef\u80fd\u5360\u636e\u4e86\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u4f8b\u5982Firefox\u53ef\u80fd\u56e0\u4e3a\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u5f71\u54cd\u4e86\u8f83\u5927\u7684\u6027\u80fd\u800c\u4e0d\u5f97\u4e0d\u5f03\u6389\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u3002"),(0,n.kt)("h5",{id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"},"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u4e0b\u4ee3\u7801\uff0c\u5728\u6d4f\u89c8\u5668\u4e2d\u6267\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u7684\u5b57\u4f53\u6e32\u67d3\u5e93\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"void onPageLoad(int* text) {\n ...\n int* screen = ...; // stored in r12 \n int* temp_buf = ...; \n gr_get_pixel_buffer(text, temp_buf); \n memcpy(screen, temp_buf, 100);\n ...\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5\u4ee3\u7801\u8c03\u7528libgraphite\u5e93\u7684gr_get_pixel_buffer\u65b9\u6cd5\u5c06\u6587\u672c\u6e32\u67d3\u5230\u4e00\u4e2a\u4e34\u65f6\u7684buffer\u4e2d\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u4e34\u65f6buffer\u7684\u5185\u5bb9\u62f7\u8d1d\u5230\u5c4f\u5e55\u53d8\u91cf\u4e2d\u7528\u4e8e\u6e32\u67d3\u3002\u4f7f\u7528SFI\u5c06\u5e93\u7684\u5185\u5b58\u9694\u79bb\u8d77\u6765\uff0c\u5373\u5185\u5b58\u9694\u79bb\u673a\u5236\u4f7f\u5f97gr_get_pixel_buffer\u4e0d\u80fd\u591f\u83b7\u53d6\u4efb\u4f55onPageLoad\u6216\u5176\u4ed6\u90e8\u5206\u7684\u6d4f\u89c8\u5668\u5806\u548c\u6808\u5185\u5b58\u3002\u7136\u800c\u4e0d\u4fe1\u7684\u4e8b\uff0c\u5355\u7eaf\u7684\u5185\u5b58\u9694\u79bb\u662f\u4e0d\u591f\u7684\uff0c\u5982\u679c\u6574\u4e2a\u5207\u6362\u4ec5\u4ec5\u662f\u4e00\u4e2a\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u653b\u51fb\u8005\u53ef\u80fd\u8fdd\u80cc\u65b9\u6cd5\u8c03\u7528\u7684\u7ea6\u5b9a\u4ee5\u6253\u7834\u9694\u79bb\uff0c\u51e0\u79cdlibgraphite\u53ef\u4ee5\u4f7f\u7528\u7684\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Clobbering Callee-Save Registers"),"\uff1a\u5047\u8bbe\u4e0a\u8ff0\u7684screen\u53d8\u91cf\u7f16\u8bd1\u5230\u5bc4\u5b58\u5668r12\u4e2d\uff0c\u5728System V\u8c03\u7528\u7ea6\u5b9a\uff08calling convention\uff09\u4e2d\uff0cr12\u662f\u4e00\u4e2acallee-saved register\uff0c\u6240\u4ee5\u5982\u679cgr_get_pixel_buffer\u52ab\u6301r12\uff0c\u5b83\u53ef\u4ee5\u5728\u8c03\u7528\u8fd4\u56de\u4e4b\u524d\u83b7\u53d6\u8be5\u5bc4\u5b58\u5668\u6307\u5411\u7684\u5b9e\u9645\u5185\u5b58\u7684\u503c\uff0c\u8fd8\u53ef\u4ee5\u5c06\u8be5\u5bc4\u5b58\u5668\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u8be5\u6c99\u76d2\u4e2d\u7684\u5185\u5b58\u5730\u5740\uff0c\u8fd9\u6837\u5728\u540e\u9762\u7684memcpy\u6307\u4ee4\u4e2d\u8fdb\u884c\u590d\u5236\uff0c\u8fd9\u5c31\u53ef\u4ee5\u7ed9\u653b\u51fb\u8005\u4e00\u79cd\u65b9\u6cd5\u4f7f\u5b83\u53ef\u4ee5\u52ab\u6301\u6d4f\u89c8\u5668\u7684control flow\u3002\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u5f62\u5f0f\u7684\u653b\u51fb\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1callee-save register integrity\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u5728\u8fd4\u56de\u4e4b\u524d\u5c06 callee-save register\u91cd\u7f6e\u4e3a\u539f\u6765\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Leaking Scratch Registers"),"\uff1a\u540c\u6837\u7684\uff0c\u5176\u4ed6scratch registers\u4e5f\u53ef\u80fd\u4f1a\u6cc4\u9732\u654f\u611f\u4fe1\u606f\u7ed9\u6c99\u76d2\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u4fdd\u5b58\u4e86\u4e00\u4e2a\u5bc6\u94a5\u5728scratch register\u4e2d\uff0c\u4ec5\u4ec5\u662f\u5185\u5b58\u9694\u79bb\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u53d7\u653b\u51fb\u8005\u63a7\u5236\u7684libgraphite\u4e0d\u4f1a\u8bfb\u53d6\u548c\u4f7f\u7528\u8fd9\u4e9b\u5bc4\u5b58\u5668\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u6cc4\u9732\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1scratch register confidentiality"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Reading and corrupting stack frames"),"\uff1a\u6700\u540e\uff0c\u5982\u679c\u5bbf\u4e3b\u548c\u6c99\u76d2\u5e94\u7528\u7a0b\u5e8f\u5171\u4eab\u4e00\u4e2a\u6808\uff0c\u653b\u51fb\u8005\u5c31\u53ef\u80fd\u8bfb\u53d6\u6216\u8005 \u7834\u574f\u6808\u4e2d\u7684\u6570\u636e\u6216\u8005\u6307\u9488\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u653b\u51fb\uff0c\u9700\u8981stack frame encapsulation\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u4e0d\u80fd\u8bbf\u95ee\u8c03\u7528\u6808\u3002")),(0,n.kt)("h5",{id:"216222-heavyweight-transitions"},"2.16.2.2.2 Heavyweight Transitions"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684SFI\u90fd\u4f7f\u7528\u6bd4\u8f83\u91cd\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u6280\u672f\uff0c\u4f8b\u5982NaCI\u4ee5\u53caWasm\u7f16\u8bd1\u5668Lucet\uff0c\u8fd9\u79cd\u6280\u672f\u5c06\u6240\u6709\u7684\u8c03\u7528\u548c\u8fd4\u56de\u503c\u90fd\u5c01\u88c5\u8d77\u6765\u4ee5\u5e94\u5bf9\u524d\u9762\u63d0\u5230\u7684\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u6837\u7684\u5207\u6362\u90fd\u662f\u5b89\u5168\u7684\uff0c\u4ed6\u4eec\u63d0\u4f9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Callee-save register integrity"),"\uff1a\u5728\u8c03\u7528\u7684\u65f6\u5019\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3aSpringboard\u7684\u4ee3\u7801\u6765\u5305\u88c5calls\uff0c\u5373\u5c06\u5bc4\u5b58\u5668\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5e94\u7528\u5185\u5b58\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u72ec\u7acb\u7684\u6808\u4e2d\uff1b\u5f53\u7531\u5e93\u8fd4\u56de\u5230\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3atrampoline\u7684\u4ee3\u7801\u5305\u88c5returns\uff0c\u5e76\u91cd\u7f6e\u5bc4\u5b58\u5668\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Scratch register confidentiality"),"\uff1a\u7531\u4e8e\u4efb\u4f55Scratch register \u90fd\u53ef\u80fd\u5305\u542b\u654f\u611f\u4fe1\u606f\uff0c\u6240\u4ee5Springboard\u5728\u5207\u6362\u5230\u6c99\u76d2\u4e4b\u524d\u4f1a\u6e05\u9664\u6240\u6709\u7684Scratch register\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Stack frame encapsulaton"),"\uff1a\u5927\u90e8\u5206\u7684SFI\u4f1a\u5bf9\u5bbf\u4e3b\u7a0b\u5e8f\u548c\u6c99\u76d2\u4ee3\u7801\u8bbe\u7f6e\u72ec\u7acb\u7684\u8c03\u7528\u6808\uff0c\u4ee5\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u65e0\u6cd5\u8bbf\u95ee\u53d7\u4fe1\u4efb\u7684\u8c03\u7528\u6808\u3002\u8be5\u673a\u5236\u540c\u6837\u7531Springboard\u548ctrampoline\u6765\u5b9e\u73b0\uff1a\u9996\u5148\uff0c\u8ffd\u8e2a\u6240\u6709\u6808\u6307\u9488\uff0c\u7136\u540eSpringboard\u4f1a\u5c06\u8fd9\u4e9b\u6808\u4e0a\u7684\u53c2\u6570\u5168\u90e8\u590d\u5236\u5230\u6c99\u76d2\u4ee3\u7801\u7684\u8c03\u7528\u6808\u4e2d\uff0c\u6700\u540etrampoline\u4f1a\u8ffd\u8e2a\u5b9e\u9645\u7684\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5185\u5b58\u4e2d\uff0c\u8fd9\u6837\u6c99\u76d2\u4ee3\u7801\u5e93\u5c06\u65e0\u6cd5\u7834\u574f\u5b83\u3002")),(0,n.kt)("p",null,"\u7531\u4e0a\u9762\u7684\u8fc7\u7a0b\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u673a\u5236\u53ef\u4ee5\u4fdd\u5b58\u5207\u6362\u7684\u5b89\u5168\uff0c\u4f46\u662f\u5177\u6709\u4e24\u4e2a\u6bd4\u8f83\u4e25\u91cd\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u5b83\u4eec\u7ed9SFI\u5e26\u6765\u8f83\u5927\u7684\u8d1f\u62c5\uff0c\u76f8\u6bd4\u4e8e\u5355\u7eaf\u7684\u65b9\u6cd5\u8c03\u7528\u8ba1\u7b97\u91cf\u8981\u5927\u5f97\u591a\uff0c\u8fd9\u79cd\u4fdd\u5b88\u5730\u5207\u6362\u4f1a\u5e26\u6765\u5927\u91cf\u7684\u4e0d\u5fc5\u8981\u7684\u72b6\u6001\u4fdd\u5b58\u548c\u6e05\u9664\uff0c\u51e0\u4e4e\u76f8\u5f53\u4e8e\u91cd\u65b0\u5b9e\u73b0OS\u8fdb\u7a0b\u7684\u5f88\u591a\u57fa\u7840\u529f\u80fd\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cSpringboard\u548ctrampoline\u5fc5\u987b\u9488\u5bf9\u4e0d\u540c\u7684\u5e73\u53f0\u5b9a\u5236\uff0c\u56e0\u4e3a\u6bcf\u4e2a\u5e73\u53f0\u6709\u4e0d\u540c\u7684calling convention\uff0c\u4efb\u4f55\u5b9e\u73b0\u9519\u8bef\u5c31\u53ef\u80fd\u5bfc\u81f4\u6c99\u76d2\u80fd\u591f\u9003\u79bb\u8fd9\u79cd\u653b\u51fb\u3002")),(0,n.kt)("h4",{id:"21623-object--space-model"},"2.16.2.3 object space model"),(0,n.kt)("h4",{id:"21624-lua-environment"},"2.16.2.4 lua Environment"),(0,n.kt)("h4",{id:"21625-erlang-\u9694\u79bb\u673a\u5236"},"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236"),(0,n.kt)("h3",{id:"2163-webassembly-security"},"2.16.3 Webassembly Security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://webassembly.org/docs/security/"},"https://webassembly.org/docs/security/"))),(0,n.kt)("h4",{id:"21631-module--cfi"},"2.16.3.1 Module & CFI"),(0,n.kt)("h4",{id:"21632-memory-safety"},"2.16.3.2 Memory safety"),(0,n.kt)("h4",{id:"21633-isolation-without-taxation"},"2.16.3.3 Isolation without Taxation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Heavyweight Transitions\u662f\u4fdd\u5b88\u7684\uff0c\u56e0\u4e3a\u5b83\u4eec\u5bf9\u6c99\u76d2\u4ee3\u7801\u7684\u8fd0\u884c\u7684\u7ed3\u6784\u505a\u4e86\u6bd4\u8f83\u5c11\u7684\u5047\u8bbe\u3002\u4f46NaCI\u548cWasm\u901a\u8fc7Springboard\u548ctrampoline\u7684\u673a\u5236\u786e\u5b9e\u4e5f\u7ed9\u6c99\u76d2\u4ee3\u7801\u5e93\u5f3a\u5236\u589e\u52a0\u4e86\u4e00\u5b9a\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7bc7\u8bba\u6587\u6307\u51fa\u901a\u8fc7\u8fdb\u4e00\u6b65\u5bf9\u6c99\u76d2\u4ee3\u7801\u589e\u52a0\u9002\u5f53\u7684\u7ed3\u6784\uff0c\u53ef\u4ee5\u907f\u514d\u6389\u51e0\u4e4e\u6240\u6709\u524d\u9762\u63d0\u5230\u7684\u7531Heavyweight Transitions\u5e26\u6765\u7684\u989d\u5916\u5de5\u4f5c\uff0c\u4f7f\u5f97\u6574\u4e2a\u4e0a\u4e0b\u6587\u5207\u6362\u66f4\u7b80\u5355\u3001\u8ba1\u7b97\u66f4\u5feb\uff0c\u540c\u65f6\u6613\u4e8e\u79fb\u690d\u3002\u5b83\u66f4\u50cf\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u62bd\u8c61\u3001\u53ef\u7ec4\u5408\u7684\u7f16\u7a0b\u8bed\u8a00\u3002\u9996\u5148\u63d0\u51fa\u80fd\u591f \u5b9e\u73b0zero-cost\u5207\u6362\u7684\u6761\u4ef6\u3002"),(0,n.kt)("h5",{id:"216331-zero-cost-conditions"},"2.16.3.3.1 Zero-cost conditions"),(0,n.kt)("p",null,"\u5047\u8bbe\u6c99\u76d2\u5e93\u4ee3\u7801\u662f\u6709\u4e00\u4e9b\u51fd\u6570\u53ca\u5176\u671f\u671b\u7684\u53c2\u6570\u7ec4\u6210\uff0c\u8fd9\u7bc7\u8bba\u6587\u63d0\u51fa\u4e86\u4e00\u4e9b\u6761\u4ef6\uff0c\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\uff08\u5373\u5305\u542b\u8fd9\u79cd\u7ed3\u6784\uff09\u7684\u7b2c\u4e09\u65b9Wasm\u4ee3\u7801\u53ef\u4ee5\u88ab\u5f62\u5f0f\u5316\u7684\u9a8c\u8bc1\uff0c\u4ece\u800c\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u7684\u5b89\u5168\u3002\u8fd9\u4e9b\u6761\u4ef6\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Calee-save register restoration"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Well-bracketed control-flow"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Type-directed forward-edge CFI"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Local state encapsulation"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Confidentiality"),"\uff1a")),(0,n.kt)("p",null,"\u8fd9\u79cd\u65b9\u6cd5\u7684\u4ef7\u503c\u5728\u4e8e\u5b83\u80fd\u591f\u4ee5\u4e00\u79cd\u5f62\u5f0f\u5316\u7684\u7ed3\u6784\u6765\u63cf\u8ff0\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u4ee3\u7801\uff0c\u4f7f\u5f97\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u8fd9\u6837\u7684\u7ed3\u6784\u53bb\u6784\u9020\u7ec4\u4ef6\uff0c\u5219\u5176\u751f\u6210\u7684Wasm\u4ee3\u7801\u53ef\u4ee5\u662f\u88ab\u5f62\u5f0f\u5316\u9a8c\u8bc1\u7684\u3002\u8fd9\u4e9b\u6dfb\u52a0\u7684\u989d\u5916\u7ed3\u6784\u4e0d\u4ec5\u80fd\u591f\u7528\u4e8e\u5f62\u5f0f\u5316\u9a8c\u8bc1\uff0c\u8fd8\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u907f\u514d\u989d\u5916\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u8ba1\u7b97\u91cf\uff0c\u8fd9\u4e9b\u6761\u4ef6\u6240\u7ea6\u675f\u7684\u5b9e\u9645\u4e0a\u662f\u5e0c\u671b\u80fd\u591f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u6b63\u5e38\u7684\u9694\u79bb\u539f\u5219\uff0c\u5373\u4e0d\u8981\u53bb\u8bbf\u95ee\u8d85\u51fa\u81ea\u5df1\u8303\u56f4\u7684\u5185\u5b58\u548c\u4ee3\u7801\uff0c\u4e0d\u8981\u53bb\u901a\u8fc7\u5bc4\u5b58\u5668\u548c\u8fd4\u56de\u5730\u5740\u7b49\u53bb\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u7684control flow\u3002"),(0,n.kt)("p",null,"\u5373\u5982\u679c\u6211\u4eec\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u662f\u5b89\u5168\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u4e3a\u4e86\u9694\u79bb\u53bb\u505a\u4e00\u4e9b\u989d\u5916\u7684\u4fdd\u5b58\u6216\u8005\u6e05\u9664\u5de5\u4f5c\u3002\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u9700\u8981\u7ba1\u7406\u5458\u4fdd\u8bc1\u4e0d\u5f15\u5165\u6ca1\u6709\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u3002"),(0,n.kt)("h3",{id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"},"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"),(0,n.kt)("p",null,"\u591a\u5e94\u7528\u73af\u5883\u4e0b\u5e94\u7528\u7a0b\u5e8f\u7684\u9694\u79bb\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7eaf\u811a\u672c\u8bed\u8a00"),"\uff0c\u8fd9\u79cd\u8bed\u8a00\u4e0d\u5141\u8bb8\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4efb\u4f55\u5f62\u5f0f\u7684\u80fd\u591f\u5305\u542b\u4e8c\u8fdb\u5236\u5f62\u5f0f\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u7ec4\u4ef6\u80fd\u591f\u8c03\u7528\u7684\u5168\u90e8\u4e8c\u8fdb\u5236\u4ee3\u7801\u5747\u6765\u81ea\u4e8e\u5bbf\u4e3b\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ea\u9700\u8981\u7b80\u5355\u7684\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff1a1\uff09\u4e0d\u80fd\u8bbf\u95ee\u5168\u5c40\u5171\u4eab\u53d8\u91cf\uff0c2\uff09\u4e0d\u80fd\u5171\u4eab\u8c03\u7528\u6808\uff0c\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u89e3\u51b3\u591a\u5e94\u7528\u5b89\u5168\u6027\u95ee\u9898\u3002\u8fd9\u79cd\u8bed\u8a00\u7684\u4ee3\u8868\u662fErlang\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u6240\u6709\u4ee3\u7801\u90fd\u662fErlang\u811a\u672c\uff0c\u88abErlang\u89e3\u91ca\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u975e\u811a\u672c\u8bed\u8a00"),"\uff0c\u975e\u811a\u672c\u8bed\u8a00\u5373\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4e8c\u8fdb\u5236\u4ee3\u7801\u7684\u8bed\u8a00\uff0c\u5305\u62ec\u6d4f\u89c8\u5668\u4e2d\u7684NaCI\u8fd9\u79cd\u76f4\u63a5\u8c03\u7528\u4e8c\u8fdb\u5236\u4ee3\u7801\u5e93\u7684\u7cfb\u7edf\uff0c\u4e5f\u5305\u62ec\u50cfWasm\u8fd9\u79cd\u867d\u7136\u4ee5\u4e2d\u95f4IR\u5f62\u5f0f\u5b58\u50a8\uff0c\u4f46\u662f\u8fd9\u4e9b\u4e2d\u95f4IR\u662f\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u6307\u4ee4\u7684\uff0c\u6240\u4ee5\u5728\u88ab\u52a8\u6001\u7f16\u8bd1\u4e4b\u540e\u662f\u53ef\u4ee5\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u5185\u5b58\u7684\uff0c\u7b2c\u4e09\u79cd\u662f\u50cfPython\u8fd9\u79cd\uff0c\u7b2c\u4e09\u65b9Python\u5e93\u672c\u8eab\u662f\u53ef\u4ee5\u8c03\u7528C\u5e93\u4ee3\u7801\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("p",null,"\u603b\u800c\u8a00\u4e4b\uff0c\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u8fd8\u8981\u907f\u514d\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u8bbf\u95ee\u5bc4\u5b58\u5668\uff0c\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u80fd\u591f\u4ee5\u67d0\u79cd\u5f62\u5f0f\u5305\u542b\u5bc4\u5b58\u5668\uff0c\u5219\u53ef\u4ee5\u7ed5\u5f00\u5185\u5b58\u9694\u79bb\u3002CreateScript\u672c\u8eab\u5c5e\u4e8e\u7eaf\u811a\u672c\u578b\u8bed\u8a00\uff0c\u4f46\u662f\u96c6\u6210\u5230\u7b2c\u4e09\u65b9app\u4e2d\u5219\u4f1a\u5f15\u5165\u7b2c\u4e09\u65b9\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u4ee3\u7801\u3002\u6240\u4ee5\u540e\u671f\u5728\u5904\u7406\u8fd9\u90e8\u5206\u7684\u65f6\u5019\u8fd8\u662f\u9700\u8981\u8003\u8651\u4f20\u7edf\u7684SFI\u6280\u672f\u3002"),(0,n.kt)("h4",{id:"21641-\u5bf9\u8c61\u9694\u79bb"},"2.16.4.1 \u5bf9\u8c61\u9694\u79bb"),(0,n.kt)("p",null,"\u6ca1\u6709\u5168\u5c40\u53d8\u91cf\uff0c\u5168\u90e8\u90fd\u662f\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u73af\u5883\u53d8\u91cf\u90fd\u662f\u53ea\u8bfb\u7684\uff0c\u5982\u679c\u6709app\u76f8\u5173\u7684\uff0c\u521b\u5efa\u7279\u5b9aapp\u7684\u73af\u5883object"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u7531\u591a\u4e2a\u7ec4\u4ef6\u7ec4\u6210\uff0c\u5bf9\u8c61\u7531\u7528\u6237\u521b\u5efa\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u5185\u90e8\u7684\u901a\u4fe1\uff0c\u5728\u9694\u79bb\u8303\u56f4\u4e4b\u5185\uff0c\u6240\u4ee5\u91c7\u7528\u57fa\u672c\u7684\u7c7b\u578b\u5b89\u5168\u5c31\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u52a0\u5b89\u5168\u7b56\u7565\uff0c\u56e0\u4e3a\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u53ef\u80fd\u662f\u8de8\u5e94\u7528\u7684\uff08\u5c3d\u7ba1\u5927\u90e8\u5206\u53ef\u80fd\u662fapp\u5185\u90e8\u7684\uff09\uff0c\u8fd9\u662f\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027\u7684\u57fa\u7840")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u4f53\u662f\u57fa\u4e8e\u5bf9\u8c61\u7684\u5b89\u5168\u63a7\u5236\uff0c\u80cc\u540e\u7684\u63a7\u5236\u7b56\u7565\u662f\u5bf9\u8c61\u6240\u5c5e\u7684appId\u548cuserId\u4e4b\u95f4\u7684\u6743\u9650\u5173\u7cfb\uff0c\u5f53\u7136\u8fd9\u4e2a\u5173\u7cfb\u53ea\u9700\u8981\u9a8c\u8bc1\u4e00\u6b21\uff0c\u8fd9\u4e9b\u5173\u7cfb\u53ef\u4ee5\u4ee5\u52a0\u5bc6\u7684\u65b9\u5f0f\u9884\u5b58\u50a8\uff0c\u5728\u670d\u52a1\u7aef\u7edf\u4e00\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u8ba1\u7b97\u5bf9\u8c61\u7684\u5185\u90e8\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\u8ba1\u7b97\u9700\u8981\u8de8\u5bf9\u8c61\u901a\u4fe1\u7684\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u5176\u80cc\u540e\u7684\u903b\u8f91\u662f\uff0c\u5bf9\u8c61\u5185\u90e8\u9996\u5148\u53d1\u751f\u5185\u90e8\u53d8\u5316\uff0c\u7136\u540e\u8fd9\u79cd\u53d8\u5316\u5f71\u54cd\u5230\u5916\u90e8\u3002\u8fd9\u6837\u80fd\u907f\u514d\u4e00\u4e9b\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u4e2d\u4efb\u610f\u987a\u5e8f\u7684\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u6df7\u4e71\u7ec4\u7ec7\u7ed3\u6784\u548c\u903b\u8f91"),(0,n.kt)("h4",{id:"21642-app-spaces"},"2.16.4.2 app spaces"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"an approach to safe object sharing"),(0,n.kt)("p",{parentName:"blockquote"},"The crux of the problem is that once a reference is obtained, it can be used to name an object and to invoke methods of that object. We believe that naming and invocation must be sepatated, thus introducing access control into the language.")),(0,n.kt)("p",null,"access control"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5c5e\u4e8e\u4e00\u4e2aapp space\uff0c\u8fd9\u4e2aapp space\u7528\u4e8e\u63a7\u5236\u6743\u9650\uff0capp space\u4ee5\u7528\u6237\u4e3a\u57fa\u7840\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u7528\u6237\u62e5\u6709\u72ec\u7acb\u7684app space"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"app space\u5f71\u54cd\u5e76\u884c\u6027")),(0,n.kt)("p",null,"\u653e\u5230\u4e00\u8d77\u5e76\u884c\u8ba1\u7b97\u7684\u5bf9\u8c61\u5fc5\u987b\u662f\u540c\u4e00\u4e2aapp space\uff0c\u5c3d\u7ba1\u591a\u4e2a\u4e0d\u540cspace\u7684\u5bf9\u8c61\u53ef\u80fd\u62e5\u6709\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5b83\u4eec\u4f1a\u88ab\u72ec\u7acb\u8ba1\u7b97\uff0c\u4ee5\u53ca\u72ec\u7acb\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u65b9\u4fbf\u5e76\u884c\u8ba1\u7b97\uff0c\u4e0d\u662f\u5c06\u4e00\u4e2a\u5bf9\u8c61\u7684\u6240\u6709\u5c5e\u6027\u5b58\u50a8\u5230\u4e00\u8d77\uff0c\u800c\u662f\u4f1a\u6309\u7167\u7ec4\u4ef6\u7c7b\u578b\u5206\u5f00\u5b58\u50a8\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bcf\u4e2a\u76f8\u540c\u7c7b\u578b\u5bf9\u5e94\u7684\u5c5e\u6027 \uff0c\u5b83\u4eec\u5e94\u8be5\u770b\u8d77\u6765\u5c31\u50cf\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5b83\u4eec\u5f62\u6210\u4e00\u4e2agroup\uff0c\u6bcf\u4e2agroup\u65e2\u5c5e\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4e5f\u5c5e\u4e8e\u4e00\u4e2aspace\u3002\u5c31\u50cf \u628a\u4e00\u4e2a\u5bf9\u8c61\u5206\u6210\u591a\u6bb5\uff0c\u6bcf\u4e2a\u6bb5\u8ddf\u4f5c\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u6574\u4f53\u62e5\u6709\u76f8\u540c\u7684\u884c\u4e3a"),(0,n.kt)("h4",{id:"21643-\u5bf9\u8c61\u901a\u4fe1"},"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1"),(0,n.kt)("p",null,"\u5bf9\u8c61\u901a\u4fe1\u53ea\u80fd\u53d1\u751f\u57282\u4e2a\u5bf9\u8c61\u4e4b\u95f4\uff0c\u5373\uff0c\u5982\u679c\u5916\u90e8\u53c2\u6570\u5305\u542b\u591a\u4e2a\u53c2\u6570\uff0c\u5fc5\u987b\u662f\u6765\u81ea\u4e00\u4e2a\u5305\u542b\u6240\u6709\u8fd9\u4e9b\u5c5e\u6027\u7684\u5bf9\u8c61\uff0c\u4e0d\u80fd\u662f\u6765\u81ea\u591a\u4e2a\u5bf9\u8c61\u7684\u7ec4\u5408\u6240\u4ee5\u5f00\u53d1\u8005\u5e94\u8be5\u907f\u514d\u4f7f\u7528\u65e0\u5173\u7684\u591a\u4e2a\u53c2\u6570\u8f93\u5165\uff0c\u6700\u4f73\u65b9\u6cd5\u662f\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\uff0c\u56e0\u4e3a\u90a3\u662f\u4ee3\u8868\u7740\u4ea4\u4e92\u7684\u903b\u8f91\u53d8\u91cf\u3002\u5982\u679c\u4f7f\u75282\u4e2a\u4ee5\u4e0a\u7b26\u53f7\uff0c\u8fd9\u4e9b\u7b26\u53f7\u5e94\u8be5\u4ece\u903b\u8f91\u4e0a\u5e94\u8be5\u5728\u4e00\u8d77\uff0c\u6216\u8005\u5f00\u53d1\u8005\u4fdd\u8bc1\u4ed6\u4eec\u5e94\u8be5\u5728\u4e00\u8d77"),(0,n.kt)("h4",{id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"},"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6c99\u76d2\u673a\u5236\u90fd\u662f\u91c7\u7528\u7c7b\u4f3cCPU\u65f6\u95f4\u7247\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6574\u4e2a\u6267\u884c\u662f\u65e0\u5e8f\u7684\uff0c\u6240\u4ee5\u4f60\u65e0\u6cd5\u6309\u67d0\u79cd\u987a\u5e8f\u6267\u884c\u6574\u4e2a\u8f6f\u4ef6\uff0c\u53ea\u80fd\u5728\u4e0d\u540c\u7684\u7ebf\u7a0b\u4e4b\u95f4\u8fdb\u884c\u5207\u6362\uff1b\u867d\u7136Erlang\u5728\u7ebf\u7a0b\u4e4b\u95f4\u5206\u914d\u4f18\u5148\u7ea7\uff0c\u4f46\u662f\u4ecd\u7136\u662f\u9700\u8981\u5207\u6362\uff0c\u56e0\u4e3a\u7ebf\u7a0b\u6570\u91cf\u53ef\u80fd\u5f88\u591a\uff0c\u5e76\u4e14\u7cfb\u7edf\u4e0d\u77e5\u9053\u6bcf\u4e2a\u7ebf\u7a0b\u9700\u8981\u591a\u957f\u65f6\u95f4\u624d\u80fd\u6267\u884c\u5b8c\u5168\u90e8\u8ba1\u7b97\uff0c\u5373\u4f7f\u5b83\u53ef\u80fd\u8fd8\u5dee\u51e0\u4e2a\u6307\u4ee4\u5c31\u6267\u884c\u5b8c\u4e86\uff0c\u4e5f\u53ef\u80fd\u4f1a\u53d1\u751f\u5207\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u4e00\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6bd4\u8f83\u5927\uff0c\u6240\u4ee5\u65e0\u6cd5\u76f4\u63a5\u5c06\u4e00\u4e2a\u65b9\u6cd5\u8ba1\u7b97\u5b8c\u518d\u8fdb\u884c\u4e0b\u4e00\u4e2a\u8ba1\u7b97\uff0c\u4f60\u5fc5\u987b\u8981\u4fdd\u5b58\u72b6\u6001")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u7684\u539f\u56e0\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u5728\u7ebf\u7a0b\u4e4b\u95f4\u4e0d\u505c\u5730\u5207\u6362\u4e0a\u4e0b\u6587\uff0c\u8fd9\u5c31\u5bfc\u81f4\u8f83\u5927\u7684\u5f00\u9500\uff0c\u9700\u8981\u82b1\u5f88\u591a\u65f6\u95f4\u5904\u7406\u5185\u5b58\u6570\u636e\u7684\u6362\u8fdb\u6362\u51fa\u3002\u56e0\u4e3a\u7ebf\u7a0b\u5185\u90e8\u53ef\u80fd\u4fdd\u5b58\u7740\u590d\u6742\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7531\u4e8e\u6574\u4e2a\u6267\u884c\u7684\u6709\u5e8f\u7684\uff0c\u5373\u6240\u6709\u7ec4\u4ef6\u90fd\u9700\u8981\u5728\u4e00\u5e27\u4e4b\u5185\u88ab\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u56e0\u4e3a\u4e0d\u5fc5\u4e3a\u4e86\u8003\u8651\u4e24\u4e00\u4e2a \u7ebf\u7a0b\u88ab\u62d6\u5ef6\u65f6\u95f4\u800c\u6682\u65f6\u505c\u6b62\u5f53\u524d\u7ebf\u7a0b\u7684\u8ba1\u7b97\u5e76\u5207\u6362\u5230\u5176\u4ed6\u7ebf\u7a0b\u3002\u8fd9\u907f\u514d\u989d\u5927\u91cf\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u5bfc\u81f4\u7684\u5185\u5b58\u6362\u8fdb\u6362\u51fa\u7b49\u989d\u5916\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4ee3\u4ef7\u662f\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6240\u6709\u8ba1\u7b97\u5728\u6bcf\u4e00\u5e27\u90fd\u53ef\u4ee5\u88ab\u8ba1\u7b97\u5b8c\uff0c\u6bd4\u5982\u5c31\u4e0d\u80fd\u51fa\u73b0\u90a3\u79cd\u5355\u4e00\u7ec4\u4ef6\u9700\u8981\u6570\u5e27\u624d\u80fd\u8ba1\u7b97\u5b8c\u6bd5\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u9700\u8981\u5f02\u6b65\u5904\u7406\uff0c\u4e0d\u5f71\u54cd\u5f53\u524d\u5faa\u73af\u3002\u4f46\u6e38\u620f\u672c\u8eab\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\u7684\u3002"),(0,n.kt)("h2",{id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("h3",{id:"2171-llvm"},"2.17.1 LLVM"),(0,n.kt)("h3",{id:"2172-usd"},"2.17.2 USD"),(0,n.kt)("h3",{id:"2173-mlir"},"2.17.3 MLIR"),(0,n.kt)("h3",{id:"2174-lua-c-api"},"2.17.4 Lua C API"),(0,n.kt)("p",null,"\u76f4\u63a5\u83b7\u53d6\u5185\u5b58\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4ece\u5b57\u7b26\u4e32\u89e3\u6790\u3002"),(0,n.kt)("h3",{id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u5fc5\u7136\u57fa\u4e8e\u67d0\u79cd\u6807\u51c6\uff0c\u67d0\u79cd\u9884\u5b9a\u7684\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u67b6\u6784\u57fa\u672c\u4e0a\u662f\uff1a1\uff09\u9996\u5148\u8bbe\u8ba1\u597d\u67d0\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u5176\u4e2d\u7684\u683c\u5f0f\u51e0\u5305\u62ec\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\u3001\u5c5e\u6027\u7ec4\u7ec7\u7684\u6570\u636e\u7ed3\u6784\u3001\u4e5f\u53ef\u80fd\u5305\u542b\u5904\u7406\u8fd9\u4e9b\u6570\u636e\u7684\u7ea6\u5b9a\u63a5\u53e3\uff0c\u5f53\u7136\u63a5\u53e3\u7ea6\u5b9a\u5e76\u6ca1\u6709\u90a3\u4e48\u5927\u7684\u610f\u4e49\uff0c\u5904\u7406\u6570\u636e\u7684\u7a0b\u5e8f\u7406\u8bba\u4e0a\u53ef\u4ee5\u6309\u7167\u4efb\u4f55\u65b9\u5f0f\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\uff1b2\uff09\u53d1\u751f\u6570\u636e\u4e00\u65b9\u6309\u7167\u6570\u636e\u683c\u5f0f\u751f\u6210\u6570\u636e\uff1b3\uff09\u501f\u52a9\u5e73\u53f0\u63d0\u4f9b\u7684\u67d0\u79cd\u673a\u5236\u53d1\u751f\u6570\u636e\u7ed9\u63a5\u6536\u65b9\uff0c\u5176\u4e2d\u4f20\u8f93\u7684\u901a\u5e38\u662f\u5e8f\u5217\u5316\u4e4b\u540e\u7684\u5b57\u7b26\u4e32\u6216\u8005\u5bf9\u5e94\u7684\u4e8c\u8fdb\u5236\u6570\u636e\uff1b4\uff09\u63a5\u6536\u65b9\u63a5\u53d7\u5230\u6570\u636e\u9996\u5148\u8fdb\u884c\u53cd\u5e8f\u5217\u5316\uff0c\u7136\u540e\u6309\u7167\u683c\u5f0f\u6807\u51c6\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u6d41\u7a0b\u5b58\u5728\u4e09\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u5b58\u5728\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u95ee\u9898\uff0c\u53cc\u65b9\u53ea\u9700\u8981\u9075\u5faa\u683c\u5f0f\u6807\u51c6\uff0c\u4f46\u662f\u53d1\u9001\u548c\u89e3\u6790\u7684\u7a0b\u5e8f\u53ca\u5176\u63a5\u53e3\u90fd\u662f\u5b8c\u5168\u7531\u53cc\u65b9\u81ea\u5df1\u51b3\u5b9a\u7684\uff0c\u5f53\u6709\u5927\u91cf\u7684\u6570\u636e\u9700\u8981\u8fdb\u884c\u4e92\u64cd\u4f5c\u65f6\uff0c\u8fd9\u79cd\u5927\u91cf\u7684\u534f\u4f5c\u5c31\u4f1a\u5e26\u6765\u5de8\u5927\u7684\u6210\u672c\u3002\u7531\u4e8e\u53cc\u65b9\u7406\u8bba\u4e0a\u8bf4\u751a\u81f3\u53ef\u80fd\u91c7\u7528\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u4ee5\u5728\u5173\u4e8e\u600e\u4e48\u5904\u7406\u6570\u636e\uff08\u5305\u62ec\u53d1\u9001\u548c\u63a5\u6536\uff09\u4e0a\u6ca1\u6709\u673a\u5236\u80fd\u591f\u8fbe\u6210\u5171\u8bc6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u65b0\u95ee\u9898\uff0c\u5f53\u6807\u51c6\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u5b8c\u5168\u6ca1\u6709\u6709\u6548\u7684\u673a\u5236\u53ef\u4ee5\u4fdd\u8bc1\u53cc\u65b9\u53ef\u4ee5\u53ca\u65f6\u66f4\u65b0\uff0c\u5bfc\u81f4\u7a0b\u5e8f\u4e0d\u53ef\u7528\u6216\u8005\u5f88\u96be\u66f4\u65b0\u5230\u6700\u65b0\u529f\u80fd\u3002\u5c3d\u7ba1\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u8fd9\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u5728\u6570\u5b57\u4e16\u754c\uff0c\u6211\u4eec\u7406\u5e94\u6709\u65b9\u6cd5\u53ef\u80fd\u66f4\u597d\u5730\u7ba1\u7406\u8fd9\u79cd\u66f4\u65b0\u3002")),(0,n.kt)("p",null,"\u6309\u6743\u91cd\u770b\uff0c\u63a5\u53e3\u7684\u95ee\u9898\u662f\u6700\u5927\u7684\uff0c\u5176\u672c\u8d28\u7684\u95ee\u9898\u5728\u4e8e\u4ec5\u4ec5\u6709\u6570\u636e\u683c\u5f0f\uff0c\u6ca1\u6709\u5efa\u7acb\u8d77\u66f4\u4e0a\u4e00\u5c42\u5173\u4e8e\u6570\u636e\u683c\u5f0f\u7684\u5904\u7406\u6807\u51c6\u3002\u8fd9\u91cc\u9762\u5305\u542b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6570\u636e\u7684\u5c5e\u6027\u540d\u79f0\u7684\u95ee\u9898\uff0c\u8fd9\u8868\u73b0\u5728\uff0c\u5c3d\u7ba1\u53cc\u65b9\u90fd\u77e5\u9053\u683c\u5f0f\u4e2d\u5173\u4e8e\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6bcf\u4e2a\u7a0b\u5e8f\u5728\u5185\u90e8\u771f\u6b63\u5904\u7406\u7684\u7b97\u6cd5\u4e2d\uff0c\u5b83\u4f7f\u7528\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5e76\u4e0d\u4e00\u5b9a\u662f\u6807\u51c6\u683c\u5f0f\u4e2d\u5b9a\u4e49\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u5c31\u5bfc\u81f4\u53cc\u65b9\u5fc5\u7136\u8981\u505a\u4e00\u4e9b\u540d\u79f0\u548c\u6570\u636e\u7ed3\u6784\u8f6c\u5316\u4e4b\u7c7b\u7684\u5de5\u4f5c\u3002\u8fd9\u4e9b\u5de5\u4f5c\u4e0d\u5149\u662f\u7e41\u7410\u7684\uff0c\u800c\u4e14\u56e0\u4e3a\u6bcf\u4e2a\u7a0b\u5e8f\u5b9a\u4e49\u4e0d\u4e00\u6837 \uff0c\u8fd9\u79cd\u4eba\u5de5\u7684\u4e00\u4e9b\u5de5\u4f5c\u5bfc\u81f4\u5f88\u96be\u8fdb\u884c\u81ea\u52a8\u5316\uff0c\u6bd4\u5982\u6d89\u53ca\u7b2c\u4e09\u4e2a\u6807\u51c6\u66f4\u65b0\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u8ddf\u4e0a\u9762\u7684\u95ee\u9898\u6709\u5173\uff0c\u6ca1\u6709\u6bd4\u8f83\u6807\u51c6\u7684\u5bf9\u6570\u636e\u8fdb\u884c\u76f4\u63a5\u8bfb\u5199\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u4e0a\u9762\u7b2c\u4e00\u4e2a\u95ee\u9898\u53ef\u4ee5\u4f7f\u7528\u7b26\u53f7\u8868\u8fdb\u884c\u89e3\u51b3\uff0c\u7b26\u53f7\u8868\u56e0\u4e3a\u5b9a\u4e49\u7684\u5c31\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u6240\u4ee5\u5982\u679c\u6807\u51c6\u5b9a\u4e49\u7684\u4e0d\u4ec5\u4ec5\u662f\u683c\u5f0f\u672c\u8eab\uff0c\u800c\u662f\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u8fd0\u884c\u65f6\u7b26\u53f7\u7684\u89e3\u6790\uff0c\u8fd9\u5929\u751f\u5c31\u5c06\u5904\u7406\u53cc\u65b9\u7684\u6570\u636e\u540d\u79f0\u548c\u683c\u5f0f\u8fdb\u884c\u7edf\u4e00\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5b83\u7684\u601d\u60f3\u6765\u6e90\u4e8eUSD\u548cMLIR\uff0c\u5373\u6807\u51c6\u7cfb\u7edf\u4e0d\u4ec5\u8981\u89e3\u51b3\u4e2d\u95f4\u4ea4\u6362\u683c\u5f0f\u7684\u95ee\u9898\uff0c\u8fd8\u9700\u8981\u63d0\u4f9b\u5173\u4e8e\u5bf9\u4ea4\u6362\u6570\u636e\u8fdb\u884c\u89e3\u6790\u7684\u529f\u80fd\uff0c\u8fd9\u907f\u514d\u4e86\u53cc\u65b9\u5404\u81ea\u5199\u4e00\u4e9b\u72ec\u7acb\u7684\u91cd\u590d\u4ee3\u7801\uff0c\u53c8\u4f7f\u5f97\u5bf9\u6570\u636e\u7684\u8bfb\u5199\u4fee\u6539\u53d8\u5f97\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u4ece\u8fd9\u4e2a\u610f\u4e49\u4e0a\u8bf4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"CreateScript\u4e2d\u5b9a\u4e49\u7684\u7b26\u53f7\uff08\u53ca\u5c5e\u6027\u53ca\u5176\u6570\u636e\u7ed3\u6784\uff09\u5c31\u76f8\u5f53\u4e8eUSD\u6216\u8005MLIR\u4e2d\u5b9a\u4e49\u7684\u683c\u5f0f\u6807\u51c6"),(0,n.kt)("li",{parentName:"ul"},"\u800cCreate\u7684\u6574\u4e2a\u8fd0\u884c\u65f6\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u80fd\u591f\u83b7\u53d6\u5230\u6570\u636e\u8fdb\u884c\u5904\u7406\u7684\u673a\u5236\uff0c\u5c31\u50cfUSD/MLIR\u4e2d\u63d0\u4f9b\u7684\u5bf9\u81ea\u5b9a\u4e49\u6570\u636e\u683c\u5f0f\u7684\u89e3\u6790\uff0c\u53ea\u4e0d\u8fc7USD\u6216\u8005MLIR\u4e2d\u662f\u6309\u6a21\u677f\u751f\u6210\u7684\u5bf9\u5e94\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u800cCreateScript\u662f\u4e00\u79cd\u8fd0\u884c\u65f6\u7684\u8bed\u8a00\u673a\u5236\uff0c\u8fd9\u79cd\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u53ef\u4ee5\u76f4\u63a5\u4ece\u5185\u5b58\u4e2d\u8fdb\u884c\u6570\u636e\u8bfb\u53d6\uff0c\u800c\u4e0d\u662f\u4ece\u4e00\u4e2a\u6570\u636e\u6587\u4ef6\u4e2d\u8fdb\u884c\u89e3\u6790")),(0,n.kt)("h2",{id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"},"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u8bed\u8a00\u673a\u5236\u6216\u8005\u8bed\u6cd5\u7279\u6027\u4e0a\u770b\uff0cCreateScript\u8bbe\u8ba1\u4e86\u5f88\u591a\u4e0d\u4e00\u6837\u7684\u601d\u8def\uff0c\u4f46\u5bf9\u4e8e\u5b83\u4eec\u4e2d\u7684\u5927\u591a\u6570\uff0c\u90fd\u4e0d\u5355\u7eaf\u53ea\u662f\u4e00\u79cd\u4e0d\u4e00\u6837\u7684\u8bed\u6cd5\u5f62\u5f0f\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u7531\u5e95\u5c42\u6574\u4e2a\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u7cfb\u7edf\u53d1\u751f\u4e86\u5f88\u5927\u7684\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u8ddf\u8fd9\u4e9b\u53d8\u5316\u7684\u5e95\u5c42\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u5c06\u6240\u6709\u7684\u539f\u56e0\u548c\u56e0\u7d20\u5206\u4e3a\u4e09\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5e95\u5c42\u7684\u56e0\u7d20\uff0c\u8fd9\u6d89\u53ca\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u95f4\u5c42\u7684\u56e0\u7d20\uff0c\u6bd4\u5982\u4e92\u64cd\u4f5c\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e0a\u5c42\u66f4\u504f\u5411\u4e8e\u8bed\u8a00\u7684\u8bed\u6cd5\u5f62\u5f0f")),(0,n.kt)("p",null,"\u672c\u8282\u6211\u4eec\u8ba8\u8bba\u4e00\u4e9b\u6700\u5e95\u5c42\u7684\u673a\u5236\u548c\u95ee\u9898\uff0c\u7136\u540e\u53ef\u4ee5\u4ece\u4e2d\u63a8\u5bfc\u51fa\u6211\u4eec\u4e3a\u4ec0\u4e48\u5fc5\u987b\u8981\u8fd9\u4e48\u8bbe\u8ba1\uff0c\u4e5f\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u6574\u4e2aCreateScript\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\u8bf4\uff0cRealityIS\u4e3a\u4ec0\u4e48\u5fc5\u987b\u91cd\u65b0\u5f00\u53d1\u4e00\u6574\u5957\u5e95\u5c42\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u662f\u56e0\u4e3a\u5f53\u4eca\u6240\u6709\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u6bcf\u4e00\u4e2a\u90e8\u5206\uff0c\u90fd\u662f\u5728\u56f4\u7ed5\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\u800c\u8bbe\u8ba1\u7684\uff0c\u8fd9\u4ece\u6839\u672c\u4e0a\u5c31\u4f7f\u5f97\u591a\u5e94\u7528\u7684\u5efa\u6784\u5f88\u96be\u88ab\u6784\u5efa\uff0c\u8fd9\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u57fa\u4e8e\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6784\u5efa\u591a\u5e94\u7528\u73af\u5883\u5f88\u96be\u4fdd\u8bc1\u5b89\u5168\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u96be\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5e94\u7528\u7684\u8fd0\u884c\u65f6\u5f88\u96be\u88ab\u5916\u90e8\u5f00\u53d1\u8005\u8fdb\u884c\u6269\u5c55\uff0c\u5f53\u7136\u8fd9\u91cc\u6307\u7684\u662f\u6269\u5c55\u4e00\u4e2a\u5e94\u7528\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u8f6f\u4ef6\u3002\u6240\u8c13\u5e94\u7528\u662f\u6307\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\uff0c\u6240\u6709\u7684\u7528\u6237\u90fd\u53ef\u4ee5\u5373\u4f7f\u83b7\u5f97\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u7248\u672c\uff0c\u800c\u8f6f\u4ef6\u662f\u6307\u53ea\u80fd\u88ab\u67d0\u4e2a\u7528\u6237\u81ea\u5df1\u4f7f\u7528\u7684\u8f6f\u4ef6\u62f7\u8d1d\uff0c\u4f8b\u5982\u67d0\u4e2a\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8eUnreal Engine\u5f00\u53d1\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u6269\u5c55\u63d2\u4ef6\uff0c\u6765\u5f62\u6210\u4e00\u4e2a\u81ea\u5df1\u72ec\u7279\u7684\u7248\u672c\uff0c\u8fd9\u4e2a\u7248\u672c\u7684\u8f6f\u4ef6\u867d\u7136\u662f\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u7684\uff0c\u4f46\u662f\u8fd9\u4e2a\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u8f6f\u4ef6\u53ea\u80fd\u88ab\u8be5\u5f00\u53d1\u8005\u4e00\u4e2a\u4eba\u4f7f\u7528")),(0,n.kt)("p",null,"\u4e00\u4e0b\u6211\u4eec\u8be6\u7ec6\u63cf\u8ff0\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u90fd\u662f\u4e0e\u5177\u4f53\u7f16\u7a0b\u8bed\u8a00\u65e0\u5173\u7684\uff0c\u800c\u662f\u8bbe\u8ba1\u66f4\u5e95\u5c42\u7684\u4e00\u4e9b\u673a\u5236\u6216\u8005\u7ea6\u5b9a\uff0c\u4f8b\u5982\u65b9\u6cd5\u8c03\u7528\u7ea6\u5b9a\uff08Calling convention\uff09\u3002"),(0,n.kt)("h3",{id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236"},"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236"),(0,n.kt)("p",null,"\u65b9\u6cd5\u8c03\u7528\u662f\u7f16\u8bd1\u8fc7\u7a0b\u8981\u5904\u7406\u7684\u4e00\u4e2a\u91cd\u8981\u7684\u90e8\u5206\uff0c\u540c\u4e00\u4e2a\u65b9\u6cd5\u7684\u4ee3\u7801\u901a\u5e38\u7f16\u8bd1\u5230\u76f8\u90bb\u7684\u6307\u4ee4\u5e8f\u5217\u4e2d\uff0c\u5728\u5185\u5b58\u4e2d\u5904\u4e8e\u8fde\u7eed\u7684\u4f4d\u7f6e\uff0c\u56e0\u6b64CPU\u603b\u662f\u80fd\u591f\u6309\u987a\u5e8f\u6b63\u786e\u6267\u884c\u4e00\u4e2a\u65b9\u6cd5\u3002\u5373\u4f7f\u5bf9\u4e8e\u8df3\u8f6c\u8bed\u53e5\uff0c\u8df3\u8f6c\u5230\u4efb\u610f\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u5219\u610f\u5473\u7740\u540e\u7eed\u7684\u6267\u884c\u90fd\u5c06\u4ece\u65b0\u7684\u4f4d\u7f6e\u91cd\u65b0\u6309\u987a\u5e8f\u6267\u884c\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u8df3\u8f6c\u6307\u4ee4\u7528\u4e8e\u5c06\u5f53\u524d\u6307\u4ee4\u7684\u4f4d\u7f6e\u6539\u4e3a\u6307\u5411\u65b0\u7684\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u65b9\u6cd5\u8c03\u7528\u7684\u6d41\u7a0b\u5219\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u8df3\u8f6c\u6d41\u7a0b\uff0c\u5f53\u4e00\u4e2a\u51fd\u6570A\u4e2d\u7684\u67d0\u4e2a\u8bed\u53e5\u8c03\u7528\u51fd\u6570B\u65f6\uff0c\u7cfb\u7edf\u9700\u8981\u5c06\u6307\u4ee4\u6267\u884c\u8df3\u8f6c\u5230\u51fd\u6570B\u7684\u5f00\u59cb\u4f4d\u7f6e\uff0c\u540c\u65f6\u7b49\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u65f6\uff0c\u7cfb\u7edf\u8fd8\u9700\u8981\u80fd\u591f\u6b63\u786e\u8fd4\u56de\u5230\u51fd\u6570A\u4e2d\u540e\u7eed\u7684\u6307\u4ee4\u4f4d\u7f6e\u3002\u4e3a\u4e86\u80fd\u591f\u6b63\u786e\u5904\u7406\u4e0a\u8ff0\u7684\u6d41\u7a0b\uff0c\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u6d41\u7a0b\u4e2d\uff0c\u5bf9\u4e8e\u65b9\u6cd5\u7684\u8c03\u7528\uff0c\u5927\u591a\u6570\u662f\u4f7f\u7528\u4e00\u79cd\u76f8\u4e92\u534f\u4f5c\u7684\u673a\u5236\uff0c\u5373\u4f1a\u5728\u51fd\u6570A\u548c\u51fd\u6570B\u4e2d\u5206\u522b\u65b0\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u51fd\u6570A\u4e2d\u7684\u8c03\u7528\u4ee3\u7801\u5904\u8bbe\u7f6e\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\uff0c\u4f7f\u4e4b\u53ef\u4ee5\u8df3\u8f6c\u81f3\u51fd\u6570B\u7684\u4f4d\u7f6e\uff0c\u540c\u65f6\u5c06\u4e0b\u4e00\u6761\u8bed\u53e5\u7684\u5730\u5740\u4f20\u9012\u7ed9\u51fd\u6570B\uff0c\u4f7f\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u7cfb\u7edf\u53ef\u4ee5\u8fd4\u56de\u5230\u6b63\u786e\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570B\u4e2d\u5219\u4f1a\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff0c\u8be5\u4ee3\u7801\u9996\u5148\u4f1a\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5728\u51fd\u6570\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u6267\u884c\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\u4f7f\u4e4b\u8df3\u8f6c\u56de\u51fd\u6570A\u4e2d\u7684\u4e0b\u4e00\u6761\u8bed\u53e5")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u8fd4\u56de\u5730\u5740\u662f\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u51fd\u6570B\u5e76\u4e0d\u4f1a\u4fdd\u5b58\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u662f\u5c06\u8fd4\u56de\u5730\u5740\u5b58\u50a8\u5728\u6808\u4e2d\uff0c\u8fd9\u4e2a\u6808\u7684\u5730\u5740\u53ef\u4ee5\u540c\u65f6\u88abA\u548cB\u8bbf\u95ee\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51fd\u6570B\u53ef\u80fd\u4e0d\u9075\u5faa\u76f8\u5173\u7684\u7ea6\u5b9a\uff0c\u4f8b\u5982\u5b83\u53ef\u4ee5\u4fee\u6539\u8fd9\u4e2a\u8fd4\u56de\u51fd\u6570\u5730\u5740\uff0c\u4f7f\u4e4b\u6307\u5411\u4e0d\u5408\u6cd5\u7684\u4f4d\u7f6e\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u7684\u63a7\u5236\u6d41\u88ab\u7834\u574f\uff0c\u53ef\u80fd\u5f15\u8d77\u7a0b\u5e8f\u5d29\u6e83\u3002\u5728\u4e00\u4e9b\u7f13\u5b58\u6ea2\u51fa\u7684\u653b\u51fb\u4e2d\uff0c\u7834\u574f\u8005\u8fd8\u5229\u7528\u7f13\u5b58\u6ea2\u51fa\u6ce8\u5165\u7684\u51fd\u6570\u4ee3\u7801\uff0c\u4f7f\u7a0b\u5e8f\u6d41\u6307\u5411\u8fd9\u4e9b\u4ee3\u7801\u4ece\u800c\u53ef\u4ee5\u6267\u884c\u4e00\u4e9b\u975e\u6cd5\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2182-\u94fe\u63a5\u673a\u5236"},"2.18.2 \u94fe\u63a5\u673a\u5236"),(0,n.kt)("h3",{id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236"},"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236"),(0,n.kt)("h2",{id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"},"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("h1",{id:"3-reality-create"},"3. Reality Create"),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,"\u7b2c\u4e00\u76ee\u6807\u662f\u5168\u90e8\u7a0b\u5e8f\u52a8\u6001\u5316\uff0c\u4efb\u4f55\u6574\u4e2aCreation \u90fd\u53ef\u4ee5\u52a8\u6001\u4e0b\u8f7d\uff0c\u6240\u4ee5\u4e0d\u7528\u7f16\u5199C++\u4ee3\u7801\uff0c\u4e5f\u5c31\u610f\u5473\u7740\u5e95\u5c42\u5fc5\u987b\u9ad8\u5ea6\u4f18\u5316\uff0c\u811a\u672c\u7684\u8f6c\u6362\u90e8\u4efd\u4e5f\u8981\u9ad8\u5ea6\u4f18\u5316\uff0c\u53ef\u4ee5\u53bb\u9664\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u9762\u5411\u5bf9\u8c61\u5c5e\u6027"),(0,n.kt)("h2",{id:"31-creation-id"},"3.1 Creation ID"),(0,n.kt)("h2",{id:"32-creation-simulation"},"3.2 Creation Simulation"),(0,n.kt)("h2",{id:"33-ui\u7ec4\u4ef6"},"3.3 UI\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5c06UI\u5143\u7d20\u96c6\u4e8eCreation Script\u6784\u5efa\u6210\u7ec4\u4ef6\uff0c\u7136\u540e\u6574\u4e2a\u7f16\u8f91\u5668\u53ef\u4ee5\u96c6\u4e8eCreation Script\u6765\u521b\u5efa\uff0c\u5373\u6574\u4e2a\u7f16\u8f91\u5668\u5f53\u4f5c\u4e00\u4e2aCreation\u3002"),(0,n.kt)("p",null,"UI\u7ec4\u4ef6\u7684\u505a\u6cd5\u5176\u5b9e\u53ef\u4ee5\u6309\u71673D Renerer\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u552f\u4e00\u7684\u533a\u522b\u5c31\u662fCamera\u4e0d\u4e00\u81f4\uff0c3D\u7684\u6e32\u67d3\u90e8\u5206\u80af\u5b9a\u4e5f\u662f\u9700\u8981\u7ee7\u627f\u5230\u539f\u751fC++\u4ee3\u7801\u4e2d\uff0cUI\u6e32\u67d3\u5b8c\u5168\u4e5f\u662f\u7c7b\u4f3c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8f91\u5668\u4e2d\uff0c\u7f16\u8f91\u76f8\u5173\u7684\u529f\u80fd\u53ea\u662f\u5b58\u5728\u4e8e\u7f16\u8f91\u5668\u4e2d\uff0c\u4e0d\u4f1a\u5305\u542b\u5728\u8fd0\u884c\u65f6\uff0c\u8fd9\u5757\u4ecd\u7136\u9700\u8981\u5904\u7406\uff0c\u4f46\u662f\u81f3\u5c11\u6574\u4e2a\u7f16\u8f91\u5668\u7684\u6784\u5efa\u53ef\u4ee5\u4f7f\u7528\u7edf\u4e00\u7684\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u6709\u4e00\u90e8\u5206\u529f\u80fd\u662f\u7f16\u8f91\u5668\u7279\u6709\u7684\uff0c\u5305\u62ec\u4ee3\u7801\u7684\u63d0\u793a\uff0c\u8c03\u8bd5\u7b49\u7b49\u529f\u80fd\uff0c\u8fd9\u90e8\u5206\u5728Runtime\u90e8\u5206\u8fd8\u662f\u9700\u8981\u4ece\u865a\u62df\u673a\u4e2d\u62ff\u6389\u3002"),(0,n.kt)("h3",{id:"331-bevy-ui"},"3.3.1 Bevy UI"),(0,n.kt)("p",null,"A custom ECS-driven UI framework built specifically for Bevy"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Built directly on top of Bevy's ECS, Renderer, and Scene plugins"),(0,n.kt)("li",{parentName:"ul"},"Compose UIs dynamically in code or declaratively using the Bevy Scene format"),(0,n.kt)("li",{parentName:"ul"},'Use a familiar "flex box" model to layout your UIs')),(0,n.kt)("h3",{id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"},"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"),(0,n.kt)("h1",{id:"4-reality-world-niantic-opens-lightship-augmented-reality-platform-to-all-developers"},"4. Reality World ",(0,n.kt)("img",{alt:"niantic-opens-lightship-augmented-reality-platform-to-all-developers",src:l(7240).Z,width:"1200",height:"579"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6838\u5fc3\u4ea7\u54c1"),"\uff0c\u5c31\u662f\u4ee5\u73b0\u5b9e\u4e16\u754c\u7684\u5730\u9762\u5e73\u9762\u7279\u5f81\u4e3a\u5e95\u677f"),(0,n.kt)("p",null,"\u521b\u4f5c\u5143\u7d20\u3001\u6a21\u677f\u3001\u884c\u4e3a\u7ec4\u4ef6\u5206\u7c7b\u4e2d\u4ee5\u5efa\u7b51\u7c7b\u3001\u57ce\u5e02\u88c5\u626e\u7c7b\u4e3a\u6838\u5fc3\u6216\u8005\u4f18\u5148\uff0c\u4ee5\u5c0f\u4e16\u754c\u5408\u6210\u5927\u57ce\u5e02\u7684\u65b9\u5f0f\uff0c\u91cd\u65b0\u5b9a\u4e49\u6211\u4eec\u7684\u4e16\u754c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u5efa\u7b51\u4e4b\u5916\uff0c\u8fd8\u6709\u8bb8\u591a\u57ce\u5e02\u5143\u7d20\uff0c\u4f8b\u5982\u5e7f\u544a\uff0c\u4ea4\u901a"),(0,n.kt)("li",{parentName:"ul"},"\u57ce\u5e02\u4e3b\u9898\u7ed3\u6784\u5c06\u4e0d\u4ec5\u4ec5\u662f\u5efa\u7b51\uff0c\u53ef\u80fd\u975e\u5e38\u591a\u5947\u89c2\u521b\u9020\uff0c\u975e\u5e38\u591a\u5143"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u89c8\u57ce\u5e02\u5c06\u662f\u4e00\u79cd\u5f88\u72ec\u7279\u7684\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u6709\u673a\u5236\u5728\u57ce\u5e02\u4e2d\u6784\u9020\u6587\u5316")),(0,n.kt)("p",null,"\u540c\u65f6\u6574\u4e2a\u57fa\u7840\u4ecd\u7136\u662f\u53ef\u4ee5\u5c40\u90e8\u72ec\u7acb\u7269\u4f53\u53ef\u5206\u4eab\u7684\u65b9\u5f0f"),(0,n.kt)("p",null,"\u7b2c\u4e00\u671f\u4ea7\u54c1\u6574\u4f53\u4f1a\u6709\u4e09\u79cd\u4f53\u9a8c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5927\u7684\u73b0\u5b9e\u4e16\u754c"),(0,n.kt)("li",{parentName:"ul"},"\u72ec\u7acb\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5Code\u7684\u5f62\u5f0f\u521b\u9020\u5e73\u884c\u4e16\u754c")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u5efa\u7b51\u5185\u5bb9\u4e0d\u4f1a\u662f\u9759\u6001\u7684\uff0c\u5b83\u4f1a\u4e3a\u521b\u4f5c\u8005\u5e26\u6765\u6536\u76ca\uff0c\u6210\u957f\u6216\u8005\u5347\u7ea7\uff0c\u7c7b\u4f3c\u6a21\u62df\u7ecf\u8425\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u8fd9\u91cc\u4e3b\u8981\u662f\u9760\u521b\u9020\u7684\u827a\u672f\u6027\u3001\u6587\u5316\u6027\u7b49\uff0c\u901a\u8fc7\u521b\u9020\u7684\u72ec\u7acb\u6027\u5438\u5f15\u6d41\u91cf\uff0c\u4ece\u800c\u5f62\u6210\u533a\u57df\u7b49\u7ea7\u4e2d\u5fc3\u533a\u7b49\u7b49\uff0c\u8f83\u70ed\u95e8\u7684\u533a\u57df\u4f1a\u5e26\u6765\u66f4\u9ad8\u7684\u6536\u76ca\uff0c\u5f62\u6210\u57ce\u5e02\u6587\u5316\uff08\u521b\u4f5c\u672c\u8eab\u8574\u542b\u7740\u6587\u5316\uff09\uff0c\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5f62\u6210\u533a\u57df\u534f\u4f5c\uff0c\u5171\u540c\u5b9a\u4e49\u4e00\u4e9b\u6587\u5316\uff0c\u53ef\u4ee5\u7c7b\u4f3cEverdale\u673a\u5236\u534f\u4f5c\u5171\u5efa"),(0,n.kt)("p",null,"\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u505a\u6cd5\uff0c\u878d\u5165\u5efa\u9020\u548c\u6a21\u62df\u7ecf\u8425\uff0c\u5168\u9762\u5efa\u8bbe\u57ce\u5e02\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u9650\u5236\u8d44\u6e90\u7c7b\u578b\uff0c\u9f13\u52b1\u4ea4\u6613\uff0c\u9f13\u52b1\u5408\u4f5c\uff0c\u4fbf\u6e38\u620f\u4e00\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ea\u878d\u5165\u5c11\u91cf\u6e38\u620f\u5143\u7d20\uff0c\u4ee5\u521b\u9020\u4e3a\u6781\u9650\uff0c\u4e0d\u9650\u5236\u8d44\u6e90")),(0,n.kt)("p",null,"\u524d\u8005\u65e9\u671f\u53d1\u5c55\u66f4\u5feb\uff0c\u540e\u8005\u65e9\u671f\u53c2\u4e0e\u8f83\u5f31\uff0c\u53ef\u4ee5\u4e24\u8005\u7ed3\u5408"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&app=appid&cam=6dof"},"http://creation.id/=qwe&app=appid&cam=6dof")),(0,n.kt)("p",null,"\u5750\u6807\u7684\u6982\u5ff5\u4f7f\u5f97\u5927\u5bb6\u53ef\u4ee5\u5728RealityWorld \u4e4b\u5916\u5927\u91cf\u5ba3\u4f20\u4e00\u4e2a\u5730\u70b9\uff0c\u5c31\u5728\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u751a\u81f3\u5927\u5bb6\u56de\u53bb\u627e\u8fd9\u6837\u7684\u653b\u7565\u548c\u5217\u8868\uff0c\u800c\u4e0d\u662f\u901a\u8fc7\u91cc\u9762\u7684\u6e38\u89c8"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u6253\u5f00\u5f53\u524d\u4f4d\u7f6e\uff0c\u6240\u4ee5\u53bb\u54ea\u91cc\u90fd\u53ef\u4ee5\u770b\u770b"),(0,n.kt)("h2",{id:"41-reality-id"},"4.1 Reality ID"),(0,n.kt)("p",null,"\u7528\u6237\u4e2d\u5fc3"),(0,n.kt)("h3",{id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406"},"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u7248\u672c\u5347\u7ea7\uff0c\u7b49\u7b49\uff0c\u4fdd\u8bc1\u7ec4\u4ef6\u662f\u6700\u65b0\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7f16\u8bd1\u4e4b\u540e\u5217\u51fa\u6240\u6709\u95ee\u9898\uff0c\u7528\u6237\u4e5f\u53ef\u4ee5\u76f4\u63a5\u53d1\u9001\u4fe1\u606f\u7ed9\u5f00\u53d1\u8005\uff0c\u8981\u6c42\u66f4\u65b0\u7ec4\u4ef6\u4ee5\u652f\u6301\u67d0\u4e9b\u65b0\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u662f\u7528\u6237\u5bf9\u8c61\u7f16\u8bd1\u53d1\u751f\u7684\u5730\u65b9\uff0c\u56e0\u4e3a\u8fd9\u91cc\u8bbe\u7f6e\u7684\u4e1c\u897f\u57fa\u672c\u4e0a\u4e0d\u4f1a\u518d\u4fee\u6539\uff0c\u5f53\u7136\u4e5f\u5e94\u8be5\u652f\u6301\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u7f16\u8bd1\uff0c\u8fd9\u79cd\u662f\u5c11\u6570\u60c5\u51b5"),(0,n.kt)("h3",{id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406"},"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406"),(0,n.kt)("h2",{id:"42-the-reality-world-app"},"4.2 The Reality World app"),(0,n.kt)("h3",{id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"},"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"realworld",src:l(2853).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5bf9\u4e8e\u5143\u5b87\u5b99\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u4efb\u610f\u7684\u865a\u62df\u4e16\u754c\uff0c\u4f46\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u81f3\u5c11\u6709\u4ee5\u4e0b\u7f3a\u9677\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5c06\u6839\u73b0\u5b9e\u4e16\u754c\u5b8c\u5168\u8131\u8282\uff0c\u8fd9\u79cd\u5272\u88c2\u611f\u4f1a\u975e\u5e38\u5927\uff0c\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u91cc\u9762\u7684\u5185\u5bb9\u5f88\u96be\u8ddf\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e2a\u8054\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u8981\u60f3\u8ba9\u672a\u6765\u76843D\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u8fd9\u4e2a\u865a\u62df\u4e16\u754c\u4e00\u5b9a\u662f\u548c\u73b0\u5b9e\u4e16\u754c\u6709\u5173\u8054\u7684\uff0c\u5426\u5219\u5b83\u5c31\u6446\u8131\u4e0d\u4e86\u7c7b\u4f3c\u6e38\u620f\u7684\u6982\u5ff5\uff0c\u4eba\u4eec\u628a\u5b83\u5f53\u505a\u4e00\u4e2a\u4e13\u95e8\u7684\u5a31\u4e50\u65b9\u5f0f\uff0c\u5076\u5c14\u8fdb\u53bb\u4f53\u9a8c\u4e00\u4e0b\uff0c\u800c\u4e0d\u662f\u65f6\u65f6\u8ddf\u5b83\u4fdd\u6301\u8054\u7cfb\u548c\u8fde\u63a5"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4fc3\u8fdb\u5730\u7406\u4e0a\u9760\u8fd1\u7684\u4eba\u4e4b\u95f4\u8fdb\u884c\u4e92\u52a8\uff0c\u5728\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u4e2d\uff0c\u771f\u5b9e\u7684\u5730\u7406\u4f4d\u7f6e\u5728\u5176\u4e2d\u65e0\u6cd5\u4ea7\u751f\u8f83\u597d\u7684\u5173\u8054\uff0c\u56e0\u6b64\u5b83\u4eec\u7684\u4e92\u52a8\u901a\u5e38\u53ea\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u597d\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\uff0c\u6216\u8005\u8bf4\u901a\u8fc7\u67d0\u4e9b\u6e38\u620f\u5185\u5bb9\u7684\u673a\u5236\u4fc3\u8fdb\u7684\u5177\u6709\u7c7b\u4f3c\u7231\u597d\u548c\u5174\u8da3\u7684\u964c\u751f\u4eba\u4e4b\u95f4\u7684\u4e92\u52a8\u3002\u4f46\u662f\u57ce\u5e02\u4f5c\u4e3a\u4e00\u4e2a\u91cd\u8981\u7684\u6587\u5316\u8f7d\u4f53\u548c\u7b26\u53f7\uff0c\u5b83\u672c\u8eab\u4e5f\u662f\u5177\u6709\u4e30\u5bcc\u7684\u4fe1\u606f\u5728\u91cc\u9762\u7684\uff0c\u800c\u4e14\u4eba\u4e0e\u57ce\u5e02\u4e4b\u95f4\u7684\u5173\u7cfb\u662f\u73b0\u4ee3\u6587\u660e\u4e2d\u4eba\u7c7b\u4e0d\u53ef\u5ffd\u89c6\u7684\u91cd\u8981\u4f53\u9a8c\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u6240\u4ee5\u600e\u6837\u5229\u7528\u597d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5730\u7406\u5173\u7cfb\uff0c\u4e5f\u662f\u672a\u6765\u5143\u5b87\u5b99\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6210\u4e00\u90e8\u5206\u7684\u91cd\u8981\u90e8\u5206\u4e4b\u4e00"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5143\u5b87\u5b99\u4f5c\u4e3a\u73b0\u5b9e\u4e16\u754c\u7684\u5ef6\u5c55\uff0c\u5176\u5b9e\u524d\u9762\u4e24\u90e8\u5206\u90fd\u8bf4\u660e\u4e86\uff0c\u771f\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u5173\u8054\u548c\u5173\u7cfb\uff0c\u4f1a\u6210\u4e3a\u672a\u6765\u5143\u5b87\u5b99\u91cd\u8981\u7684\u6838\u5fc3\u673a\u5236\uff0c\u5426\u5219\u5b83\u4e0d\u4ec5\u4f1a\u5bf9\u6211\u4eec\u7684\u751f\u6d3b\u9020\u6210\u5272\u88c2\uff0c\u5e76\u4e14\u5b83\u65e0\u6cd5\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u5c31\u50cf\u4eca\u5929\u7684\u6cdb\u5a31\u4e50\u7c7b\u5e94\u7528\u5982\u6296\u97f3\u3001\u5fae\u4fe1\u7b49\u3002\u5e76\u4e14\u4f5c\u4e3a\u672a\u6765\u79d1\u6280\u751f\u6d3b\u91cd\u8981\u7684\u4e00\u9762\uff0c\u6211\u4eec\u5e0c\u671b\u5b83\u8981\u80fd\u591f\u7528\u6765\u63d0\u5347\u4eba\u4eec\u7684\u751f\u6d3b\u54c1\u8d28\uff0c\u8fd9\u5305\u62ec\u4e24\u4e2a\u5c42\u9762\uff1a\u4f7f\u4eba\u4eec\u611f\u5230\u66f4\u52a0\u5feb\u4e50\uff0c\u4ee5\u53ca\u5e2e\u52a9\u4eba\u4eec\u63d0\u4f9b\u66f4\u52a0\u4e30\u5bcc\u7684\u6570\u5b57\u5316\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u5c06\u4ee5\u73b0\u5b9e\u4e16\u754c\u771f\u5b9e\u5730\u56fe\u4e3a\u5e95\u677f\u8fdb\u884c\u6253\u9020\uff0c\u4ee5\u56f4\u7ed5\u73b0\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u7d27\u5bc6\u8054\u7cfb\u4e3a\u6838\u5fc3\u8bbe\u8ba1\u539f\u5219\uff0c\u5f00\u53d1\u80fd\u591f\u901a\u8fc7\u5143\u5b87\u5b99\u7684\u4e30\u5bcc\u6570\u5b57\u5316\u673a\u5236\u6765\u63d0\u5347\u4eba\u4eec\u751f\u6d3b\u54c1\u8d28\u7684\u5f00\u653e\u865a\u62df\u4e16\u754c\u3002"),(0,n.kt)("h4",{id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"},"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"),(0,n.kt)("p",null,"Reality World\u4e16\u754c\u7684\u5e95\u5ea7\u662f\u771f\u5b9e\u4e16\u754c\u7684\u5e73\u9762\u5730\u56fe\uff0c\u5e76\u4e14\u4fdd\u7559\u57ce\u5e02\u4e3b\u8981\u7684\u9053\u8def\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u505a\u6709\u51e0\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u865a\u62df\u4e16\u754c\u8ddf\u771f\u5b9e\u4e16\u754c\u662f\u6709\u5173\u8054\u7684\uff0c\u8fd9\u79cd\u5173\u8054\u4e0d\u4ec5\u662f\u6307\u5730\u7406\u4e0a\u7684\u4f4d\u7f6e\u5173\u8054\uff0c\u800c\u662f\u6211\u4eec\u6709\u673a\u4f1a\u53bb\u8868\u8fbe\u8ddf\u4e00\u4e2a\u57ce\u5e02\u76f8\u5173\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u5f53\u524d\u57ce\u5e02\u7684\u67d0\u4e9b\u6307\u6570\uff0c\u57ce\u5e02\u7684\u4e00\u4e9b\u6587\u5316\u98ce\u8c8c\uff0c\u53ef\u4ee5\u62bd\u8c61\u6210\u67d0\u79cd\u6e38\u620f\u673a\u5236\uff0c\u8fd9\u6837\u540c\u4e00\u4e2a\u57ce\u5e02\u4e2d\u7684\u5e02\u6c11\u90fd\u53ef\u4ee5\u611f\u53d7\u5230\u7c7b\u4f3c\u7684\u4e0e\u8be5\u5ea7\u57ce\u5e02\u72ec\u6709\u7684\u4f53\u9a8c\u3002\u8fd9\u4e9b\u4f53\u9a8c\u5f80\u5f80\u90fd\u662f\u5173\u4e8e\u73b0\u5b9e\u7684\u4fe1\u606f\uff0c\u5b83\u5305\u542b\u4eba\u4e0e\u57ce\u5e02\u548c\u5468\u56f4\u73af\u5883\u548c\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6240\u4ee5\u8fd9\u79cd\u673a\u5236\u5f62\u6210\u4e86\u5bf9\u73b0\u5b9e\u7684\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u6700\u91cd\u8981\u7684\u662f\u5173\u7cfb\uff0c\u5730\u7406\u4f4d\u7f6e\u662f\u4e00\u79cd\u91cd\u8981\u7684\u5173\u7cfb\uff0c\u5b83\u4e0d\u4ec5\u4ec5\u662f\u4f4d\u7f6e\u7684\u5173\u7cfb\uff0c\u5b83\u662f\u4e00\u79cd\u628a\u5927\u5bb6\u62c9\u5728\u4e00\u8d77\uff0c\u8fd9\u91cc\u7684\u4eba\u90fd\u6709\u5171\u540c\u7684\u4e00\u4e9b\u8ba4\u77e5\u7684\u5173\u7cfb\u3002\u6240\u4ee5\u5730\u7406\u4f4d\u7f6e\u5b9e\u9645\u4e0a\u9690\u85cf\u7740\u5f88\u591a\u4fe1\u606f\uff0c\u662f\u975e\u5e38\u91cd\u8981\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u771f\u5b9e\u4e16\u754c\u4e0d\u4e00\u6837\uff0c\u771f\u5b9e\u4e16\u754c\u7684\u5916\u89c2\u548c\u7ec6\u8282\u5728\u865a\u62df\u4e16\u754c\u4e2d\u4e0d\u662f\u6700\u91cd\u8981\u7684\uff0c\u4eba\u4eec\u5e0c\u671b\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u4e16\u754c\uff0c\u4eba\u4eec\u5e0c\u671b\u80fd\u591f\u6539\u53d8\u73b0\u5b9e\u4e16\u754c\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\uff0c\u4eba\u4eec\u6709\u53ef\u80fd\u521b\u9020\u51fa\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u865a\u62df\u4e16\u754c\uff0c\u8fd9\u4e2a\u4e16\u754c\u4ee3\u8868\u7740\u4eba\u4eec\u671f\u671b\u3001\u5411\u5f80\u548c\u60f3\u8c61\u4e2d\u7684\u4e00\u4e2a\u4e16\u754c\u3002\u4e5f\u4ee3\u8868\u7740\u4eba\u4eec\u5bf9\u73b0\u5b9e\u4e16\u754c\u4ee5\u53ca\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u601d\u8003\u3002"),(0,n.kt)("p",null,"\u4e0d\u8fc7\uff0c\u4e0e\u865a\u62df\u4e16\u754c\u4e2d\u7684\u5efa\u7b51\u7269\u7b49\u5916\u89c2\u4e0d\u4e00\u6837\u7c7b\u4f3c\uff0c\u5c3d\u7ba1\u5730\u9762\u7684\u9053\u8def\u4f4d\u7f6e\u662f\u4fdd\u7559\u7684\uff0c\u4f46\u662f\u9053\u8def\u7684\u540d\u79f0\u662f\u53ef\u4ee5\u66f4\u6539\u7684\u3002\u8fd9\u662f\u4e16\u754c\u7684\u9053\u8def\u7ed3\u6784\u53ca\u5176\u89c6\u89c9\u4f4d\u7f6e\u80fd\u591f\u5e2e\u52a9\u4eba\u4eec\u5728\u865a\u62df\u4e16\u754c\u66f4\u597d\u5730\u5bfc\u822a\uff0c\u6240\u4ee5\u5373\u4fbf\u8fd9\u4e9b\u9053\u8def\u7684\u540d\u5b57\u88ab\u4fee\u6539\u4e86\uff0c\u4eba\u4eec\u4ecd\u7136\u80fd\u591f\u5f88\u597d\u5730\u5173\u8054\u5b83\u4eec\u3002\u4f46\u662f\u5982\u679c\u8fd9\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u800c\u5de8\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u4eba\u4eec\u5219\u5f88\u96be\u8bb0\u4f4f\u90a3\u4e48\u591a\u7684\u5730\u5740\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u5143\u5b87\u5b99\u4e16\u754c\u5c06\u80fd\u591f\u63d0\u5347\u4eba\u4eec\u73b0\u5b9e\u751f\u6d3b\u7684\u751f\u6d3b\u54c1\u8d28\u3002"),(0,n.kt)("h4",{id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"},"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"),(0,n.kt)("p",null,"\u5730\u7406\u4e0d\u4ec5\u4ec5\u662f\u5730\u56fe\u4e0a\u7684\u4f4d\u7f6e\uff0c\u5b83\u8574\u85cf\u7740\u5f88\u591a\u610f\u4e49\uff0c\u51e0\u4e4e\u53ef\u4ee5\u8bf4\u8ddf\u6211\u4eec\u5927\u90e8\u5206\u7684\u65e5\u5e38\u751f\u6d3b\uff0c\u4ee5\u53ca\u65e5\u5e38\u751f\u6d3b\u4e4b\u5916\u66f4\u91cd\u8981\u7684\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\u5c42\u9762\uff0c\u8fd9\u4e9b\u4fe1\u606f\u66f4\u52a0\u91cd\u8981\uff0c\u5b83\u5173\u4e4e\u4eba\u7684\u60c5\u611f\u3001\u60c5\u7eea\u3001\u5bf9\u751f\u6d3b\u7684\u4f53\u9a8c\u548c\u54c1\u8d28\u7b49\u3002"),(0,n.kt)("p",null,"\u771f\u5b9e\u4e16\u754c\u662f\u5173\u4e8e\u5927\u5bb6\u901a\u8fc7\u4e00\u5b9a\u76f8\u90bb\u7684\u5730\u7406\u4f4d\u7f6e\u5f7c\u6b64\u805a\u5728\u4e00\u8d77\uff0c\u7136\u540e\u56e0\u6b64\u800c\u5171\u540c\u5173\u5fc3\u548c\u5173\u6ce8\u67d0\u4e9b\u76f8\u540c\u7684\u4e8b\u60c5\uff0c\u8fdb\u800c\u5f62\u6210\u67d0\u4e9b\u76f8\u5173\u8054\u7684\u5173\u7cfb\u3001\u4fe1\u7528\u3001\u4e16\u754c\u89c2\u3001\u6587\u5316\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6709\u65f6\u5019\u6211\u4eec\u8ddf\u5468\u56f4\u7684\u4eba\u5e76\u4e0d\u76f4\u63a5\u8ba4\u8bc6\uff0c\u4f46\u662f\u6211\u4eec\u8ddf\u4ed6\u4eec\u4e4b\u95f4\u4ecd\u7136\u6f5c\u85cf\u8fd9\u67d0\u4e9b\u8054\u7cfb\uff0c\u8fd9\u4e9b\u8054\u7cfb\u5e76\u4e0d\u4e00\u5b9a\u662f\u663e\u5f0f\u53ef\u89c1\u7684\uff0c\u4f46\u662f\u5b83\u4eec\u5374\u662f\u5ba2\u89c2\u5b58\u5728\u7684\u3002\u7136\u800c\u5bf9\u4e8e\u8fdc\u5728\u4e00\u4e2a\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u7684\u5730\u65b9\uff0c\u6240\u6709\u8fd9\u4e9b\u8054\u7cfb\u90fd\u4e0d\u5b58\u5728\uff0c\u6216\u8005\u8bf4\u5f88\u5f31\u3002\u6bd4\u5982\u8bf4\u5bf9\u4e8e\u6240\u6709\u4e2d\u56fd\u4eba\uff0c\u6211\u4eec\u4e4b\u95f4\u4ecd\u7136\u5b58\u5728\u4e00\u4e9b\u8054\u7cfb\u548c\u5173\u7cfb\uff0c\u4f46\u662f\u5bf9\u4e8e\u5927\u90e8\u5206\u4eba\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f88\u5f31\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5730\u7406\u4fe1\u606f\u751a\u81f3\u662f\u6bd4\u4eb2\u60c5\u66f4\u91cd\u8981\u7684\u610f\u4e49\uff0c\u4eb2\u60c5\u4e4b\u95f4\u7684\u8054\u7cfb\u53cd\u800c\u662f\u6bd4\u8f83\u7b80\u5355\u7684\uff0c\u6211\u4eec\u5927\u90e8\u5206\u7684\u60c5\u611f\u548c\u7cbe\u529b\u4e5f\u8bb8\u4f1a\u66f4\u591a\u82b1\u5728\u8fd9\u79cd\u57fa\u4e8e\u5730\u7406\u4f4d\u7f6e\u4fe1\u606f\u4e0a\u3002\u5f53\u7136\u6211\u4eec\u628a\u540c\u4e8b\u7b49\u5173\u7cfb\u4e5f\u5f52\u7ed3\u5230\u5730\u7406\u4fe1\u606f\u76f8\u5173\uff0c\u4f8b\u5982\u6211\u4eec\u8ddf\u53e6\u4e00\u4e2a\u57ce\u5e02\u7684\u540c\u4e8b\u5f80\u5f80\u6ca1\u6709\u672c\u5730\u540c\u4e8b\u4e4b\u95f4\u5173\u7cfb\u90a3\u4e48\u7d27\u5bc6\u3002\u540c\u6837\u7684\uff0c\u672c\u5730\u540c\u5b66\u4e4b\u95f4\u901a\u5e38\u4e5f\u8981\u6bd4\u5176\u4ed6\u57ce\u5e02\u7684\u540c\u5b66\u4e4b\u95f4\u5173\u7cfb\u7d27\u5bc6\uff0c\u56e0\u4e3a\u4ed6\u4eec\u4e4b\u95f4\u66f4\u6709\u53ef\u80fd\u4f1a\u6709\u66f4\u591a\u7684\u8054\u7cfb\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5143\u5b87\u5b99\u600e\u6837\u8868\u8fbe\u8fd9\u4e9b\u610f\u4e49\u5462"),"\uff1f"),(0,n.kt)("p",null,"\u5730\u7406\u4fe1\u606f\uff0c\u6216\u8005\u8bf4\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\uff0c\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u4fe1\u606f\uff0c\u53c2\u89c1\u7b2c4.10.1\u8282\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5f88\u96be\u7528\u4f20\u7edf\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u6709\u65f6\u5019\u751a\u81f3\u4e5f\u5f88\u96be\u4f7f\u7528\u7535\u5f71\u6216\u8005\u5c0f\u8bf4\u8fd9\u79cd\u53d9\u4e8b\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\u3002\u7531\u7b2c4.10.3\u8282\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u4fe1\u606f\u7c7b\u578b\u6700\u597d\u7684\u8868\u8fbe\u7684\u65b9\u5f0f\u662f\u80fd\u591f\u6a21\u62df\u590d\u6742\u7cfb\u7edf\u673a\u5236\u7684\u6e38\u620f\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5728Reality World\u4e2d\uff0c\u53ea\u8981\u6211\u4eec\u63d0\u4f9b\u8db3\u591f\u597d\u7684\u5e73\u53f0\u6280\u672f\uff0c\u8ba9\u666e\u901a\u5927\u4f17\u80fd\u591f\u8868\u8fbe\u81ea\u5df1\u7684\u673a\u5236\uff0c\u5c31\u80fd\u591f\u91ca\u653e\u8fd9\u79cd\u80fd\u529b\uff0c\u56e0\u4e3a\u5927\u4f17\u4e0d\u540c\u7684\u4eba\u80fd\u591f\u62bd\u8c61\u63d0\u70bc\u51fa\u8fd9\u79cd\u5173\u7cfb\u3002\u4ece\u800c\u5f62\u6210\u5173\u4e8e\u8fd9\u4e9b\u5173\u7cfb\u7684\u8868\u8fbe\u3002"),(0,n.kt)("h4",{id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"},"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c14.2.3\u8282\u4f20\u9001\u95e8"),(0,n.kt)("h3",{id:"422-\u4f20\u9001\u95e8"},"4.2.2 \u4f20\u9001\u95e8"),(0,n.kt)("p",null,"\u7531\u4e8e\u5730\u56fe\u7684\u9650\u5236\uff0c\u4ee5\u53ca\u590d\u6742\u5ea6\u7684\u63a7\u5236\uff0c\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\u7684\u4f20\u9001\u95e8\u673a\u5236\uff0c\u70b9\u51fb\u53ef\u4ee5\u8fdb\u5165\u79c1\u6709\u7684Creation"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7ba1\u662fReality World\u4e2d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u4e2a\u4eba\u72ec\u7acb\u7684Creation")),(0,n.kt)("p",null,"\u8fd9\u6837Reality World\u66f4\u50cf\u662f\u4e00\u4e2a\u591a\u91cd\u865a\u62df\u4e16\u754c\u7684\u5165\u53e3\uff0c\u4ed6\u53ef\u4ee5\u53bb\u5230\u5f88\u591a\u4e0d\u540c\u7684\u865a\u62df\u4e16\u754c\uff0c\u6bcf\u4e2a\u72ec\u7acb\u865a\u62df\u4e16\u754c\u5177\u6709\u66f4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\uff0c\u6bd4\u5982\u5728\u5b89\u5168\u65b9\u9762\u6ca1\u6709\u66f4\u591a\u7684\u9650\u5236\uff0c\u6bd4\u5982\u53ef\u4ee5\u4f7f\u7528\u66b4\u529b\uff0c\u6709\u574f\u4eba\uff0c\u5bb9\u6613\u906d\u5230\u653b\u51fb\u7b49\u7b49\u3002\u8fd9\u4e9b\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u662f\u4e00\u4e2a\u5e7f\u544a\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u4e00\u4e2a\u72ec\u7acb\u7684\u6e38\u620f\uff0c\u4e00\u4e2a\u5176\u4ed6\u4e92\u52a8\u5185\u5bb9\u7b49\u7b49\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"virtual-and-reality",src:l(2729).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7531\u4e8eReality World\u4e3b\u8981\u662f\u57fa\u4e8e\u73b0\u5b9e\u5730\u677f\uff0c\u56e0\u6b64\u5f62\u6210\u4e00\u79cd\u865a\u62df\u4e0e\u73b0\u5b9e\u7ed3\u5408\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"423-point-and-click"},"4.2.3 Point and Click"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u64cd\u63a7\uff0c\u53ef\u4ee5\u4f7f\u7528Point and Click\u6a21\u5f0f\u4e3a\u9ed8\u8ba4\u4e3b\u6a21\u5f0f\u3002"),(0,n.kt)("h2",{id:"43-\u6e90\u52a8\u529b"},"4.3 \u6e90\u52a8\u529b"),(0,n.kt)("h3",{id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"},"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5176\u4ed6\u5927\u4e16\u754c\uff0c\u56fa\u5b9a\u7684\u6a21\u5f0f\uff0c\u6a21\u677f\uff0c\u7528\u6237\u5b8c\u5168\u53ef\u4ee5\u81ea\u5b9a\u4e49\u81ea\u5df1\u6240\u5c5e\u7684\u4efb\u4f55\u4e1c\u897f\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u521b\u4f5c\u7684\u5efa\u7b51\u53ef\u4ee5\u6709\u5b8c\u5168\u4e0d\u540c\u7684\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u7684Avatar\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e0d\u540c\u7684\u884c\u4e3a")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u79cd\u81ea\u7531\u6027\u4ea7\u751f\u4e86\u4e24\u4e2a\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63a7\u5236\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4f53\u9a8c\uff0c\u81ea\u5df1\u8bbe\u8ba1\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u4e16\u754c\u7684\u4f53\u9a8c\u4f1a\u66f4\u52a0\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u53ef\u9884\u671f\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7528\u6237\u5c55\u793a\u7ed9\u5176\u4ed6\u73a9\u5bb6\u7684\u5185\u5bb9\u4e5f\u662f\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u56fa\u5b9a\u7684\u6a21\u677f")),(0,n.kt)("h3",{id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"},"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"),(0,n.kt)("p",null,"\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e2a\u66f4\u63a5\u8fd1\u771f\u5b9e\u793e\u4f1a\u7684\u7ecf\u6d4e\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u4f7f\u5f97Reality World\u91cc\u9762\u7684\u7ecf\u6d4e\u751f\u4ea7\u80fd\u591f\u6839\u636e\u5e02\u573a\u884c\u4e3a\uff0c\u4f7f\u4f18\u79c0\u7684\u5185\u5bb9\u66f4\u52a0\u83b7\u76ca\uff0c\u4ece\u800c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u66f4\u52a0\u6d3b\u8dc3\u548c\u7e41\u8363\uff0c\u6765\u4e3a\u4e0d\u540c\u7684\u7528\u6237\u521b\u9020\u4ef7\u503c\u3002"),(0,n.kt)("h4",{id:"4321-\u6301\u7eed\u7ecf\u6d4e"},"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u5e02\u573a\uff0c\u6784\u5efa\u6301\u7eed\u6d88\u8d39\u7684\u7ecf\u6d4e\u4f53\u5236\u6765\u662f\u5f00\u53d1\u8005\u83b7\u76ca\u66f4\u591a\uff0c\u5e76\u4e14\u53ef\u4ee5\u6301\u7eed\u83b7\u76ca\u3002\u53c2\u89c11.4.5\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"4322-\u5e7f\u544a\u5185\u5bb9"},"4.3.2.2 \u5e7f\u544a\u5185\u5bb9"),(0,n.kt)("p",null,"\u901a\u8fc7\u63d0\u4f9b\u72ec\u7279\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5e7f\u544a\u8bed\u4ea7\u54c1\u878d\u4e3a\u4e00\u4f53\uff0c\u63d0\u5347\u5e7f\u544a\u7684\u6548\u679c\uff0c\u4ece\u800c\u63d0\u9ad8\u9500\u552e\u6570\u91cf\u3002\u89c11.4.2\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"},"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"),(0,n.kt)("p",null,"\u6807\u51c6\u4f5c\u8005\u662fReality World\u91cc\u9762\u6700\u5177\u4ef7\u503c\u7684\u7528\u6237\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u5177\u6709\u5bf9\u73b0\u5b9e\u4e16\u754c\u6700\u9ad8\u7684\u62bd\u8c61\u548c\u8bbe\u8ba1\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u62bd\u8c61\u80fd\u529b\u4f7f\u5f97Reality World\u7684\u4f53\u9a8c\u80fd\u591f\u8fdb\u5316\u5f97\u8d8a\u6765\u8d8a\u597d\uff0c\u5e76\u4e14\u8986\u76d6\u7684\u8303\u56f4\u4f1a\u8d8a\u6765\u8d8a\u4e30\u5bcc"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u7ef4\u6301\u8fd9\u79cd\u5229\u76ca\uff0c\u6807\u51c6\u4f5c\u8005\u8fd8\u4f1a\u5f88\u597d\u5730\u7ef4\u62a4\u6807\u51c6\u793e\u533a\u7ec4\u4ef6\u7684\u5f00\u53d1")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e73\u53f0\u9700\u8981\u7ed9\u6807\u51c6\u4f5c\u8005\u6700\u9ad8\u7684\u7ecf\u6d4e\u5229\u76ca\uff0c\u53ea\u6709TA\u4eec\u624d\u4f1a\u4f7f\u6574\u4e2a\u5e73\u53f0\u8d8a\u6765\u8d8a\u5065\u5eb7\u3002"),(0,n.kt)("h2",{id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743"},"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743"),(0,n.kt)("p",null,"USD\u7684\u597d\u5904\u5728\u4e8e\uff0c\u53ef\u4ee5\u628a\u6bcf\u4e2a\u7528\u6237\u81ea\u5df1\u521b\u4f5c\u7684Creation\u4fdd\u5b58\u4e3a\u72ec\u7acb\u7684\u6587\u4ef6\uff0c\u8fd9\u6837\u65b9\u4fbf\u72ec\u7acb\u7684\u7f16\u8f91\u3001\u66f4\u65b0\u751a\u81f3\u5220\u9664\uff1b\u7136\u540e\u53c8\u53ef\u4ee5\u628a\u6240\u6709\u7528\u6237\u7684\u5185\u5bb9\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u5b83\u4eec\u7684\u76f8\u5bf9\u5750\u6807\u4f4d\u7f6e\u7b49\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u6837\u4e00\u4e2a\u5927\u4e16\u754c\u4e2d\uff0c\u6743\u9650\u6709\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u662f\u5bf9\u4e8e\u5355\u4e2a\u7528\u6237\u81ea\u5df1\u7684Creation\uff0c\u5176\u4e2d\u7684\u7ec4\u4ef6\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u5f00\u53d1\u8005\uff0c\u8fd9\u4e9b\u4e0d\u540c\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u80fd\u9700\u8981\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u662f\u5f53\u5c06\u6240\u6709\u7528\u6237\u7684Creation\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\u4e2d\uff0c\u5b83\u4eec\u53ef\u80fd\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u8fd9\u65f6\u5019\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u975e\u6cd5\u7684\u8bbf\u95ee")),(0,n.kt)("p",null,"\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u6765\u8bf4\uff0c\u6211\u4eec\u771f\u6b63\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u540e\u8005\u3002\u5373\u662f\u8bf4\uff0c\u5bf9\u4e8e\u524d\u8005\u6765\u8bb2\uff0c\u5c3d\u7ba1\u7528\u6237\u4f7f\u7528\u4e86\u591a\u4e2a\u5f00\u53d1\u8005\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u4f46\u662f\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u6700\u7ec8\u7684Creation\u90fd\u662f\u4ed6\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u4fdd\u8bc1\u7684\u662f\u6240\u6709\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\u662f\u5426\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\uff0c\u800c\u4e0d\u662f\u53bb\u5206\u914d\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8bbf\u95ee\u6743\u9650\uff1a\u4e00\u662f\u672c\u8d28\u4e0a\u7ec4\u4ef6\u8bbf\u95ee\u7684\u90fd\u662f\u4ed6\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e8c\u662f\u8fd9\u6837\u7684\u5173\u5fc3\u6d89\u53ca\u5230\u4e86\u4ee3\u7801\u7684\u7ec4\u7ec7\u548c\u5f00\u53d1\u903b\u8f91\uff0c\u8fd9\u4e0d\u662f\u7528\u6237\u5e94\u8be5\u5173\u5fc3\u7684\u3002\u4f46\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u786e\u5b9e\u4f1a\u5b58\u5728\u6709\u4e9b\u6076\u610f\u7ec4\u4ef6\u7834\u8bdd\u6570\u636e\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u5e94\u8be5\u5c0f\u5fc3\u5ba1\u6838\u7ec4\u4ef6\uff0c\u5e76\u4e14\u4f9d\u9760\u4e3e\u62a5\u7b49\u65b9\u5f0f\u76d1\u7ba1\u3002\u8fd9\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u76d1\u7ba1\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u8ba4\u4e3a\u4ed6\u4f7f\u7528\u7684\u7ec4\u4ef6\u5e94\u8be5\u90fd\u662f\u5b89\u5168\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u8d85\u51fa\u4e86\u7528\u6237\u7684\u9884\u671f\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u5e0c\u671b\u53ea\u8bfb\uff0c\u4f46\u662f\u8be5\u7ec4\u4ef6\u786e\u5b9e\u8bfb\u548c\u5199\u3002\u8fd9\u6837\u7684\u60c5\u51b5\u4e5f\u5e94\u8be5\u662f\u6b63\u5e38\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u5bf9\u53d8\u91cf\u7684\u8bbf\u95ee\u6743\u9650\u672c\u8eab\u662f\u5305\u542b\u5728\u7ec4\u4ef6\u7684\u903b\u8f91\u4e4b\u4e2d\u7684\u3002\u5982\u679c\u7528\u6237\u8ba4\u4e3a\u8fd9\u79cd\u6743\u9650\u8d8a\u754c\u4e86\uff0c\u7528\u6237\u5e94\u8be5\u9009\u62e9\u4f7f\u7528\u5176\u4ed6\u7ec4\u4ef6\uff0c\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u3002\u56e0\u4e3a\u76f4\u63a5\u4fee\u6539\u5c5e\u6027\u4e0d\u8ba9\u5176\u8bbf\u95ee\uff0c\u8fd9\u53ef\u80fd\u7834\u574f\u4e86\u7ec4\u4ef6\u672c\u8eab\u7684\u610f\u56fe\uff0c\u4f7f\u5f97\u5176\u7ec4\u4ef6\u7684\u529f\u80fd\u5b8c\u5168\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5readonly\u6216readwrite\u6743\u9650\u6807\u5fd7\u5e94\u8be5\u662f\u7528\u6765\u5904\u7406Reality World\u8fd9\u79cd\u591aCreation\u5171\u4eab\u7684\u573a\u666f\uff0c\u5373\u6211\u4eec\u7684\u6570\u636e\u80fd\u591f\u88ab\u4e0d\u8ba4\u8bc6\u7684\u4eba\u600e\u4e48\u8bbf\u95ee\u3002\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5b58\u5728\u4e00\u4e0b\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9\u5355\u4e2a\u53d8\u91cf\u8fdb\u884c\u58f0\u660e\u4f1a\u663e\u5f97\u975e\u5e38\u590d\u6742\uff0c\u6240\u6709\u5b9e\u4f53\u7684\u6240\u6709\u53d8\u91cf\u53ef\u80fd\u4f1a\u591a\u8fbe\u51e0\u767e\u4e2a"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9Creation\u65e2\u8fdb\u884c\u8bbe\u7f6e\u53c8\u4f1a\u5bfc\u81f4\u5927\u90e8\u5206\u5171\u4eab\u4ea4\u4e92\u7684\u673a\u5236\u5efa\u7acb\u4e0d\u8d77\u6765\uff0c\u56e0\u4e3a\u7528\u6237\u503e\u5411\u4e8e\u628a\u6240\u6709\u6570\u636e\u8bbe\u4e3a\u79c1\u6709\uff0c\u8fd9\u4f7f\u5f97\u57fa\u672c\u4e0a\u65e0\u6cd5\u4e0e\u5916\u754c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u8bf8\u5982RenderComponent\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u662f\u4e0d\u53ef\u4ee5\u8bbe\u7f6e\u6743\u9650\u7684\uff0c\u4e0d\u8fc7\u8fd9\u79cd\u60c5\u51b5\u7531\u7cfb\u7edf\u51b3\u5b9a\u5c31\u597d\u4e86\uff0c\u4f8b\u5982\u7cfb\u7edf\u4e0d\u8ba9\u7f16\u8f91\u8fd9\u90e8\u5206\u5c5e\u6027\uff0c\u4f8b\u5982\u7269\u7406\u548c\u53ef\u89c6\u76f8\u5173\u7684\u5c5e\u6027\u57fa\u672c\u4e0a\u90fd\u5c5e\u4e8e\u8fd9\u79cd\u5c5e\u6027")),(0,n.kt)("p",null,"\u7528\u6237\u8fd8\u662f\u5e94\u8be5\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u53d8\u91cf\u7ba1\u7406\u8fd9\u79cd\u6743\u9650\uff0c\u7531\u7f16\u8f91\u5668\u6216\u8005\u7cfb\u7edf\u52a8\u6001\u5c06\u6240\u6709\u516c\u5171\u7684\u7b26\u53f7\u53d8\u91cf\u603b\u7ed3\u5230\u4e00\u8d77\uff0c\u5e76\u6309\u7c7b\u522b\u5f62\u6210\u4e00\u4e2a\u5982iOS\u7cfb\u7edf\u4e2dSetting\u7684\u5217\u8868\uff0c\u7531\u7528\u6237\u7edf\u4e00\u8bbe\u7f6e\uff0c\u8fd9\u6837\u5728\u6253\u5305\u7684\u65f6\u5019\u76f4\u63a5\u4fee\u6539\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\uff0c\u8fd9\u6837\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\u5230\u5b9e\u4f53\u7ea7\u522b\u662f\u4e0d\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u79cdSetting\u8868\u53ea\u5bf9Reality World\u6709\u6548\uff0c\u5982\u679c\u4e0d\u53d1\u5e03\u81f3Reality World\uff0c\u5219\u8fd9\u4e2a\u529f\u80fd\u6839\u672c\u4e0d\u53ef\u89c1\u3002\u4e5f\u5373\u4e0d\u4f1a\u5141\u8bb8\u7b2c\u4e09\u65b9\u5f00\u53d1\u7c7b\u4f3cReality World\u7684\u5e94\u7528--\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u6982\u5ff5\uff0c\u4e5f\u7b80\u5316\u4e86\u6574\u4e2a\u6743\u9650\u8bbe\u7f6e\u7684\u590d\u6742\u5ea6\uff0c\u5373\u540c\u4e00\u4e2a\u7b26\u53f7\u5373\u4f7f\u6709\u591a\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u7684\u5168\u7cfb\u5747\u8bbe\u7f6e\u4e00\u6b21\uff0c\u907f\u514d\u4e86\u5bf9\u6240\u6709\u5c5e\u6027\u5b9e\u4f8b\u5206\u522b\u8bbe\u7f6e\uff0c\u56e0\u4e3a\u7b26\u53f7\u672c\u8eab\u4e5f\u662f\u5305\u542b\u4e86\u610f\u4e49\u5728\u91cc\u9762\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u968f\u4fbf\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u5b57\u3002"),(0,n.kt)("h3",{id:"441-realityidcomponent"},"4.4.1 RealityIDComponent"),(0,n.kt)("p",null,"\u6bcf\u4e2aEntity\u90fd\u5e94\u8be5\u5177\u6709RealityID\u8fd9\u4e2a\u5b57\u6bb5\uff0c\u7528\u4e8e\u533a\u5206System\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u77e5\u9053\u6240\u5c5e\u5173\u7cfb"),(0,n.kt)("h3",{id:"442-readonly"},"4.4.2 readonly"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u7684\u6743\u9650\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u80fd\u662freadonly\uff0c\u5373\u7528\u6237\u4e4b\u95f4\u53ea\u80fd\u8bfb\u53d6\u6570\u636e\uff0c\u4e0d\u540c\u5199\u6216\u8005\u4fee\u6539\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5c06System\u5f3a\u5236\u4e0e\u4e00\u4e2aComponent\u5173\u8054\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u6837System\u662f\u6709\u6240\u6709\u6743\u7684\uff0c\u5b83\u5c5e\u4e8e\u67d0\u4e00\u4e2a\u7279\u5b9a\u7684Entity\uff0c\u800c\u6bcf\u4e2aEntity\u62e5\u6709\u7279\u5b9a\u7684RealityID\uff0c\u56e0\u6b64\u53ef\u4ee5\u4fbf\u4e8e\u63a7\u5236\u3002\u5982\u679cSystem\u662f\u7cfb\u7edf\u72ec\u7acb\u65b9\u6cd5\uff0c\u5c31\u53ea\u80fd\u62ff\u5230Entity\u4e4b\u540e\u624d\u80fd\u51b3\u5b9a\u5176\u6570\u636e\u662f\u5426\u53ef\u7528\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5982\u679c\u6743\u9650\u4e0d\u591f\uff0c\u5219\u4f1a\u9020\u6210\u6d6a\u8d39\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7cfb\u7edf\u5e94\u8be5\u907f\u514d\u8bfb\u53d6\u6ca1\u6709\u6743\u9650\u7684\u6570\u636e\uff0c\u7531\u4e8eSystem\u4e0e\u5b9e\u4f53\u5173\u8054\uff0c\u5c31\u53ef\u4ee5\u6bd4\u8f83\u6743\u9650\uff0c\u5373\u5bf9\u4e8eRealityID\u4e0d\u7b49\u4e8e\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e0d\u80fd\u8fdb\u884c\u4fee\u6539\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5426\u53ef\u8bfb\u4e5f\u53d6\u51b3\u4e8e\u7528\u6237\u7684\u8bbe\u7f6e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5bf9\u4e8e\u7a0b\u5e8f\u800c\u8a00\uff0c\u6709\u4e09\u79cd\u6743\u9650\uff1a\u5176\u4e2dreadonly\u548creadwrite\u5e94\u8be5\u662fCreation\u5185\u90e8\u7684\u4e8b\u60c5\uff1b\u8fd9\u91cc\u7684readonly\u8fd8\u6709\u5e94\u8be5\u62c6\u5206\u6210RealityID\u5185\u90e8\u548cRealityID\u4e4b\u95f4\uff0c\u6bd4\u5982\u4f7f\u7528share"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"readonly"),(0,n.kt)("li",{parentName:"ul"},"readwrite"),(0,n.kt)("li",{parentName:"ul"},"share")),(0,n.kt)("h3",{id:"443-\u91cd\u65b0\u52a0\u8f7d"},"4.4.3 \u91cd\u65b0\u52a0\u8f7d"),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u6743\u9650\uff0c\u56e0\u6b64\u5f53\u67d0\u4e2a\u7528\u6237\u4fee\u6539\u4e4b\u540e\uff0c\u5176\u4ed6\u6b63\u5728Reality World\u7684\u5728\u7ebf\u7528\u6237\u5e94\u8be5\u5bf9\u5176\u8fdb\u884c\u91cd\u65b0\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"45-\u7a33\u5b9a\u6027"},"4.5 \u7a33\u5b9a\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u786e\u4fdd\u6bcf\u4e2aCreation\u5728\u63d0\u4ea4\u4e4b\u524d\uff0c\u8fd0\u884c\u65f6\u662f\u7a33\u5b9a\u7684\uff0c\u5426\u5219\u7a0b\u5e8f\u4e2d\u53ea\u8981\u5305\u542b\u8fd9\u4e2aCreation\u5c31\u53ef\u80fd\u5bfc\u81f4\u5d29\u6e83\u3002\u5728Reality World\u8fd9\u79cd\u5b8c\u5168\u5f00\u53d1\u7684\u4e16\u754c\u4e2d\uff0c\u8fd9\u4e2a\u95ee\u9898\u66f4\u662f\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\uff0c\u6838\u5fc3\u95ee\u9898\u5176\u5b9e\u5f52\u7ed3\u4e3a\u4e00\u4e2a\uff0c\u5373\u7a0b\u5e8f\u7684\u7a33\u5b9a\u6027\uff0c\u6240\u4ee5\u5bf9\u6240\u6709\u7684\u7ec4\u4ef6\u8981\u8fdb\u884c\u5ba1\u6838\uff0c\u4ee5\u51cf\u8f7b\u5bf9\u540e\u9762\u7528\u6237Creation\u7a33\u5b9a\u6027\u7684\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u6240\u6709\u9700\u8981\u63d0\u4ea4\u5230Reality World\u7684\u5fc5\u987b\u662f\u7ecf\u8fc7Reality World\u9a8c\u8bc1\u8fc7\u7684\u7ec4\u4ef6\uff0c\u5426\u5219\u65e0\u6cd5\u53d1\u5e03\u81f3Reality World\uff0c\u4f46\u662f\u7528\u6237\u81ea\u5df1\u7684Creation\u5219\u53ef\u4ee5\u4f7f\u7528\u672a\u7ecf\u9a8c\u8bc1\u7684\u7ec4\u4ef6\uff0c\u56e0\u4e3a\u8fd9\u5f71\u54cd\u7684\u7528\u6237\u8303\u56f4\u5f88\u5c0f\uff0c\u7528\u6237\u4e00\u65e6\u53d1\u73b0\u95ee\u9898\u81ea\u5df1\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"451-reality-verified-components"},"4.5.1 Reality Verified Components"),(0,n.kt)("p",null,"\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u5ba1\u6838\u4e0e\u6d4b\u8bd5\uff0c\u5408\u6cd5\u7684\u7ec4\u4ef6\u624d\u80fd\u88ab\u7528\u6237\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u672a\u7ecf\u5ba1\u6838\u7684\u7ec4\u4ef6\u81ea\u80fd\u7528\u4e8e\u5c0f\u8303\u56f4\u6d4b\u8bd5\u3002"),(0,n.kt)("h3",{id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"},"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u5408\u6cd5\u4f46\u662f\u6bd4\u8f83\u65e7\u7684\u7ec4\u4ef6\uff0c\u53ef\u80fd\u5bfc\u81f4\u8ddf\u6807\u51c6\u4e0d\u518d\u517c\u5bb9\u7b49\u5bfc\u81f4\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u8fc7\u671f\u884c\u4e3a\u8981\u8fdb\u884c\u5224\u65ad\u3002\u4ece\u4e24\u4e2a\u5c42\u9762\u6765\u4fdd\u8bc1\u7a33\u5b9a\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63d0\u9192\u7528\u6237\u53ca\u65f6\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u672a\u7ecf\u66f4\u65b0\u7684\u4ee3\u7801\uff0c\u7cfb\u7edf\u80fd\u591f\u5728\u52a0\u8f7d\u65f6\u52a8\u6001\u5224\u65ad\uff0c\u7136\u540e\u4e22\u5f03\u4e0e\u6807\u51c6\u4e0d\u517c\u5bb9\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u901a\u8fc7\u4ee5\u4e0a\u7684\u673a\u5236\uff0c\u80fd\u591f\u4fdd\u8bc1\u6574\u4e2aReality World\u7684\u7a33\u5b9a\u6027\u3002\u8fd9\u5bf9\u4e8e\u4e00\u4e2a\u5927\u7684\u52a8\u6001\u66f4\u65b0\u7684\u4e16\u754c\u81f3\u5173\u91cd\u8981\u3002\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u53c8\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u81ea\u7531\u63d0\u4ea4\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u4e0d\u5177\u5907\u5f00\u653e\u6027\uff0c\u4f46\u662f\u8fd9\u5c31\u5bb9\u6613\u5bfc\u81f4\u4e0d\u7a33\u5b9a\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\u5fc5\u987b\u4fdd\u8bc1\u6574\u4e2a\u7cfb\u7edf\u7684\u66f4\u65b0\u673a\u5236\uff0c\u56e0\u4e3a\u7ef4\u62a4\u592a\u591a\u8fc7\u671f\u7684\u7ec4\u4ef6\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7cfb\u7edf\u6765\u8bf4\u6210\u672c\u975e\u5e38\u9ad8\uff0c\u5fc5\u987b\u4fc3\u8fdb\u7cfb\u7edf\u5feb\u901f\u66f4\u65b0")),(0,n.kt)("h2",{id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613"},"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613"),(0,n.kt)("p",null,"\u7531\u4e8e\u5b89\u5168\u6027\u7684\u539f\u56e0\uff0c\u6240\u6709\u4e24\u4e2a\u7528\u6237\u4e4b\u95f4\u7684\u4ea4\u6613\uff0c\u90fd\u9700\u8981\u8c03\u7528\u4e00\u4e9b\u7279\u6b8a\u7684\u7cfb\u7edfAPI\uff0c\u8fd9\u4e9bAPI\u4e0d\u5e94\u8be5\u7279\u5b9a\u4e8eReality World\uff0c\u800c\u662f\u6240\u6709Creation\u4e2d\u6d89\u53ca\u6d88\u8d39\u7684\u90fd\u53ef\u4ee5\uff0c\u56e0\u4e3a\u672c\u8d28\u4e0a\u4ea4\u6613\u5c31\u662f\u4e24\u4e2aReality ID\u4e4b\u95f4\u53d1\u751f\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"461-\u53ca\u65f6\u8d2d\u4e70"},"4.6.1 \u53ca\u65f6\u8d2d\u4e70"),(0,n.kt)("p",null,"3D\u7684\u4e1c\u897f\u6ca1\u6cd5\u50cf\u4f20\u7edf\u5546\u54c1\u4e00\u6837\u901a\u8fc7\u56fe\u7247\u7684\u65b9\u5f0f\u6d4f\u89c8\u5c31\u53ef\u4ee5\u83b7\u5f97\u5f88\u597d\u7684\u4e86\u89e3\uff0c\u56e0\u4e3a\u5b83\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u89c6\u89c9\u53ea\u662f\u5176\u4e2d\u5f88\u5c0f\u7684\u5143\u7d20\uff0c\u751a\u81f3\u89c6\u9891\u4e5f\u4e0d\u662f\u6700\u597d\u7684\u4e86\u89e3\u65b9\u5f0f"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f20\u7edf\u7684\u5e7f\u544a\uff0c\u6211\u4eec\u901a\u5e38\u4e0d\u80fd\u83b7\u5f97\u592a\u591a\u4f53\u9a8c\u4e0a\u7684\u4fe1\u606f\uff0c\u66f4\u591a\u662f\u5176\u4ed6\u4e00\u4e9b\u975e\u4ea7\u54c1\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u4e00\u79cd\u65b0\u7684\u8d2d\u4e70\u6a21\u5f0f\uff1a\u5f53\u4f60\u5728\u4f53\u9a8c\u4e00\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u65f6\u5019\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u5728\u8bd5\u9a7e\u4e00\u8f86\u8f66\uff0c\u83b7\u5f97\u4e0d\u9519\u7684\u4f53\u9a8c\u4e4b\u540e\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u8ddf\u597d\u53cb\u4e00\u8d77\u73a9\u6e38\u620f\uff0c\u770b\u5230\u597d\u53cb\u4f7f\u7528\u7684\u67d0\u4e2a\u4ea4\u4e92\u5185\u5bb9"),(0,n.kt)("h3",{id:"462-\u667a\u80fd\u8d2d\u4e70"},"4.6.2 \u667a\u80fd\u8d2d\u4e70"),(0,n.kt)("p",null,"\u5728\u7528\u6237\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u6216\u8005\u770b\u5230\u67d0\u4e2a\u5185\u5bb9\u65f6\u53ef\u4ee5\u7406\u89e3\u8d2d\u4e70\uff0c\u5c31\u50cf\u5728\u5546\u573a\u7684\u8d2d\u4e70\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"},"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"You can play the game with. And that was incredibly interesting to see. Um, I think this is going to be the future of this shared 3d entertainment, medium. Um, it's not about Facebook pages, it's not about advertising. It's about actually delivering meaningful experiences that people can interact with. And that become part of this much larger world, right?")," So the programming model for the metaverse must incorporate, uh, the assumption that everybody's on objects, they build should be able to interact sensibly and fit and safely with everybody else's objects, your car, you know, built by Ford should be able to interact with your motorcycle built by Dati."),(0,n.kt)("p",null,"If an architect to be is a major work of architecture in the metaverse, you know, that should work with all the different player models have been introduced into the game and everything should work together. So I think the center, the focus of any programming model, uh, for the metaverse needs to be open world compatibility over time, open interfaces, um, which can evolve and be extended over time."),(0,n.kt)("h4",{id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"},"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"R-C",src:l(63).Z,width:"1170",height:"780"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u6837\u7684\u9700\u6c42\uff0c\u73b0\u6709\u53ef\u80fd\u7684\u505a\u6cd5\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u6bcf\u4e2a\u5e7f\u544a\u4ea7\u54c1\uff0c\u5e7f\u544a\u5546\u81ea\u5df1\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5e76\u53d1\u5e03\uff0c\u7531\u4e8e\u5f00\u53d1\u8005\u5177\u6709\u6240\u6709\u7684\u6e90\u4ee3\u7801\uff0c\u6240\u4ee5\u53ef\u4ee5\u4efb\u610f\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8981\u5b9e\u73b0\u81ea\u5b9a\u4e49\u590d\u6742\u4ea4\u4e92\uff0c\u6bcf\u4e2a\u5e7f\u544a\u5546\u9700\u8981\u628a\u6e90\u4ee3\u7801\u4ea4\u7ed9\u5e73\u53f0\uff0c\u7531\u5e73\u53f0\u7edf\u4e00\u90e8\u7f72\u53d1\u5e03\uff0c\u5e76\u8981\u6c42\u7528\u6237\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5e7f\u544a\u53ef\u4ee5\u4f7f\u7528\u6709\u9650\u7684\u4ea4\u4e92\uff0c\u6309\u7167\u4e00\u5b9a\u7684\u6807\u51c6\u5f00\u53d1\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4e0d\u7ecf\u8fc7\u5f00\u53d1\u5546\u81ea\u5b9a\u53d1\u5e03")),(0,n.kt)("p",null,"\u663e\u7136\u8fd9\u4e9b\u90fd\u4e0d\u662f\u6700\u597d\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5RealityIS\u53ef\u4ee5\u521b\u4f5c\u5168\u65b0\u7684\u5546\u4e1a\u6a21\u5f0f\uff0c\u8fd9\u91cc\u4efb\u610f\u5e7f\u544a\u5546\u53ef\u4ee5\u5b8c\u5168\u6309\u7167\u81ea\u5df1\u7684\u8bbe\u8ba1\u5b9a\u4e49\u529f\u80fd\u4e30\u5bcc\u7684\u4ea7\u54c1\uff0c\u7136\u540e\u5728Reality World\u4e2d\u81ea\u7531\u53d1\u5e03\u3002"),(0,n.kt)("h3",{id:"464-\u5e02\u573a\u7ecf\u6d4e"},"4.6.4 \u5e02\u573a\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u5b9e\u9645\u4ef7\u503c\u7531\u4eba\u4eec\u4e3b\u52a8\u53c2\u4e0e\u7ecf\u6d4e\u7684\u884c\u4e3a\u51b3\u5b9a\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7684\u6295\u7968\u6216\u8005\u5176\u4ed6\u673a\u5236\u51b3\u5b9a\uff0c\u786e\u4fdd\u865a\u62df\u8d27\u5e01\u7684\u6570\u91cf\u662f\u7531\u7ecf\u6d4e\u884c\u4e3a\u51b3\u5b9a\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u9700\u8981\u4e0e\u8fd9\u79cd\u884c\u4e3a\u4ea7\u751f\u76f4\u63a5\u5173\u8054\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5bf9\u4e8eReality World\u7684\u7ecf\u6d4e\u6765\u8bf4\uff0c\u6709\u4e24\u70b9\u662f\u81f3\u5173\u91cd\u8981\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u7ecf\u6d4e\u7684\u4e3b\u8981\u63a8\u52a8\u8005\u662f\u4eba\u4eec\u7684\u4e3b\u52a8\u7ecf\u6d4e\u53c2\u4e0e\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u865a\u62df\u7ecf\u6d4e\u7684\u8d27\u5e01\u4e0e\u4eba\u4eec\u5b9e\u9645\u611f\u53d7\u5230\u7684\u4ef7\u503c\u76f8\u5173\u8054")),(0,n.kt)("p",null,"Reality World\u901a\u8fc7\u6784\u5efa\u9ad8\u5ea6\u5f00\u653e\u7684\u4e16\u754c\uff0c\u907f\u514d\u4e2d\u592e\u5f0f\u7684\u5e72\u9884\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u7ecf\u6d4e\u8fd0\u4f5c\u3002\u540c\u65f6\u6807\u51c6\u7684\u53d1\u5e03\u3001\u53cd\u9988\u4ee5\u53ca\u4eba\u4eec\u5b9e\u9645\u4f7f\u7528\u76f8\u5173\u8054\uff0c\u901a\u8fc7\u4eba\u4eec\u7684\u4e3b\u52a8\u9009\u62e9\u6765\u5b9e\u73b0\u4ef7\u503c\u7684\u7b5b\u9009\u4e0e\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5f8b\u662f\u76f8\u5bf9\u786e\u5b9a\u4eba\uff0c\u4eba\u4eec\u4e0d\u7ba1\u662f\u5728\u771f\u5b9e\u4e16\u754c\u8fd8\u662f\u865a\u62df\u4e16\u754c\u4e2d\u90fd\u9700\u8981\u6709\u7c7b\u4f3c\u516c\u5e73\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u4eba\u4eec\u7684\u7ecf\u6d4e\u6d3b\u52a8\u53c2\u4e0e\u662f\u6709\u610f\u4e49\u7684\uff0c\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5219\u662f\u4eba\u7c7b\u6570\u5e74\u6765\u79ef\u7d2f\u7684\u6210\u679c\uff0c\u5b83\u4e5f\u662f\u4eba\u4eec\u719f\u6089\u7684\u601d\u7ef4\uff0c\u53ea\u4e0d\u8fc7\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u901a\u8fc7\u6570\u5b57\u6280\u672f\u66f4\u5c11\u4e2d\u592e\u96c6\u6743\u5f0f\u7684\u5e72\u9884\u3002"),(0,n.kt)("p",null,"\u90a3\u65e2\u7136\u662f\u8ddf\u771f\u5b9e\u793e\u4f1a\u4e00\u6837\u7684\u7ecf\u6d4e\u4f53\u9a8c\uff0c\u8fd8\u6709\u4ec0\u4e48\u610f\u4e49\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u865a\u62df\u4e16\u754c\u5462\uff1f\u5c3d\u7ba1\u4e24\u8005\u7684\u7ecf\u6d4e\u4f53\u5236\u76f8\u4f3c\uff0c\u4f46\u662f\u5728\u865a\u62df\u4e16\u754c\u4e2d\u53ef\u4ee5\u521b\u4f5c\u548c\u4f53\u9a8c\u5728\u771f\u5b9e\u4e16\u754c\u65e0\u6cd5\u5b9e\u73b0\u7684\u4e8b\u60c5\u548c\u4f53\u9a8c\uff0c\u8fd9\u5c31\u662f\u865a\u62df\u4e16\u754c\u7684\u4ef7\u503c\uff0c\u800c\u4e14\u8fd9\u79cd\u4ef7\u503c\u901a\u8fc7\u7ecf\u6d4e\u7684\u673a\u5236\u800c\u5f97\u4eba\u4eec\u89c9\u5f97\u4e5f\u662f\u6709\u610f\u4e49\u7684\u3002\u53cd\u4e4b\uff0c\u6ca1\u6709\u4efb\u4f55\u7ecf\u6d4e\u610f\u4e49\u7684\u4e8b\u60c5\u53ef\u80fd\u5c31\u662f\u65e0\u610f\u4e49\u7684\uff0c\u4eba\u4eec\u4f1a\u628a\u5f88\u591a\u4e8b\u60c5\u5f53\u6210\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\uff0c\u5373\u4f7f\u662f\u7cbe\u795e\u4e0a\u7684\u4f53\u9a8c\u4e5f\u53ef\u4ee5\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u7ecf\u6d4e\u601d\u7ef4\u662f\u4eba\u4eec\u89c9\u5f97\u6240\u6709\u53c2\u4e0e\u4e0e\u4ed8\u51fa\u4f1a\u6709\u610f\u4e49\u7684\u4e00\u79cd\u5fc3\u7406\u57fa\u7840\u3002"),(0,n.kt)("h4",{id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"},"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5c3d\u7ba1\u7528\u6237\u7684\u7ecf\u6d4e\u8d2d\u4e70\u884c\u4e3a\u4e3a\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4ea7\u751f\u4ef7\u503c\uff0c\u4f46\u662f\u8fd9\u79cd\u4ef7\u503c\u662f\u4e00\u79cd\u603b\u4f53\u884c\u4e3a\uff0c\u800c\u4e0d\u662f\u7531\u5355\u8bcd\u8d2d\u4e70\u51b3\u5b9a\u7684\u3002"),(0,n.kt)("h3",{id:"465-\u533a\u5757\u94fe"},"4.6.5 \u533a\u5757\u94fe"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u89e3\u51b3\u4e86\u4e24\u4ef6\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u901a\u8fc7\u6280\u672f\u624b\u6bb5\u5b9a\u4e49\u4e86\u7269\u6743\uff0c\u5e76\u4e14\u4e00\u65e6\u4f60\u62e5\u6709\u7269\u6743\uff0c\u522b\u4eba\u6ca1\u6cd5\u7be1\u6539\uff0c\u56e0\u4e3a\u6574\u4e2a\u4efb\u4f55\u5bf9\u8be5\u7269\u6743\u7684\u8f6c\u6362\u90fd\u4f1a\u88ab\u8bb0\u5f55\uff0c\u800c\u8fd9\u79cd\u8f6c\u6362\u53ea\u6709\u5728\u6240\u6709\u8005\u540c\u610f\u4e4b\u540e\u624d\u80fd\u88ab\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8d26\u672c\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u610f\u5473\u7740\u7269\u54c1\u53ef\u4ee5\u88ab\u4efb\u610f\u8f6c\u6362\u6216\u8005\u8bf4\u4ea4\u6613\uff0c\u8fd9\u5c31\u4e3a\u5546\u54c1\u7684\u81ea\u7531\u4ea4\u6613\u521b\u9020\u4e86\u53ef\u80fd\u3002\u53cd\u89c2\u4f20\u7edf\u7684\u4e2d\u592e\u5f0f\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u4e00\u4ef6\u7269\u54c1\u7684\u4ea4\u6613\u901a\u5e38\u53ea\u53d1\u751f\u4e00\u6b21\uff0c\u4e00\u822c\u5e73\u53f0\u4e0d\u4f1a\u63d0\u4f9b\u8fd9\u79cd\u65e0\u9650\u8f6c\u5356\u7684\u673a\u5236\uff0c\u5373\u4f7f\u63d0\u4f9b\u8fd9\u79cd\u673a\u5236\uff0c\u901a\u5e38\u4e5f\u662f\u8ba4\u4e3a\u4e0d\u53ef\u9760\u7684\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4ea4\u6613\u8d26\u672c\u53ef\u80fd\u88ab\u7be1\u6539\u3002")),(0,n.kt)("p",null,"\u4f46\u672c\u8d28\u4e0a\uff0c\u533a\u5757\u94fe\u53ea\u89e3\u51b3\u5173\u4e8e\u7269\u54c1\u4ea4\u6613\u7684\u8fc7\u7a0b\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u53ea\u662f\u8f85\u52a9\u6027\u7684\uff0c\u4f46\u662f\u5b83\u5e76\u4e0d\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u5168\u90e8\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u80fd\u5426\u4fdd\u8bc1\u865a\u62df\u8d27\u5e01\u4e0e\u771f\u5b9e\u4ef7\u503c\u7684\u6620\u5c04\u662f\u5426\u5b89\u5168\u53ef\u9760\u7684\u95ee\u9898\uff0c\u8fd9\u53ef\u80fd\u5bfc\u81f4\u4e0a\u5f53\u53d7\u9a97\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u7269\u54c1\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u600e\u6837\u66f4\u516c\u5e73\u5730\u51b3\u5b9a\u7269\u54c1\u4ef7\u503c\u7684\u673a\u5236\uff1b\u4f8b\u5982\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4eba\u4eec\u7684\u7ecf\u6d4e\u4ea4\u6613\u9664\u4e86\u4ea7\u751f\u7269\u54c1\u4ea4\u6362\uff0c\u8fd9\u79cd\u884c\u4e3a\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7ecf\u6d4e\u4ef7\u503c\uff0c\u6bd4\u5982\u6700\u6838\u5fc3\u7684\u662f\u51b3\u5b9a\u7269\u54c1\u7684\u4ef7\u503c\u3002\u8fd9\u4e9b\u673a\u5236\u8ddf\u533a\u5757\u94fe\u7684\u7406\u5ff5\u90fd\u5dee\u5f88\u8fdc\u3002")),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5b83\u7ea6\u6e38\u620f\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u5927\u5bb6\u5206\u4eab\u548c\u5171\u540c\u73a9\u6e38\u620f\u624d\u80fd\u4ea7\u751f\u4ef7\u503c\u7684\u7406\u5ff5\u662f\u76f8\u8fdd\u80cc\u7684\uff0c\u533a\u5757\u94fe\u66f4\u9f13\u52b1\u5c01\u95ed\u548c\u79d8\u5bc6\u7684\u884c\u4e3a\u3002"),(0,n.kt)("h4",{id:"4651-\u4ef7\u503c\u5173\u8054"},"4.6.5.1 \u4ef7\u503c\u5173\u8054"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u4e0d\u89e3\u51b3\u4ef7\u503c\u5173\u8054\u7684\u95ee\u9898\uff0c\u4e00\u5b9a\u6570\u91cf\u7684\u865a\u62df\u8d27\u5e01\u5230\u5e95\u5173\u8054\u591a\u5c11\u5b9e\u9645\u7269\u54c1\u7684\u4ef7\u503c\uff0c\u4ee5\u53ca\u600e\u6837\u5173\u8054\uff0c\u8fd9\u4e0d\u662f\u533a\u5757\u94fe\u4f1a\u8003\u8651\u7684\u3002\u5982\u679c\u8fd9\u4e2a\u95ee\u9898\u4e0d\u89e3\u51b3\uff0c\u4e5f\u8bb8\u4ece\u6e90\u5934\u4e0a\u5c31\u4e0d\u53ef\u63a7\u4e86\uff0c\u540e\u9762\u7684\u7269\u6743\u4fdd\u969c\u4e5f\u5c31\u6ca1\u6709\u610f\u4e49\u3002"),(0,n.kt)("h4",{id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a"},"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u7269\u54c1\u7684\u4ef7\u503c\u5230\u5e95\u600e\u6837\u53d8\u52a8\uff0c\u6ca1\u6709\u66f4\u597d\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4e00\u4e2a\u7269\u54c1\u7684\u4ef7\u503c\u80af\u5b9a\u4e0d\u662f\u7531\u6295\u7968\u6765\u51b3\u5b9a\u7684\uff0c\u5b83\u662f\u7531\u4eba\u4eec\u7684\u7ecf\u6d4e\u884c\u4e3a\u6765\u51b3\u5b9a\u7684\u3002\u6295\u7968\u662f\u53ef\u4ee5\u88ab\u64cd\u4f5c\u7684\uff0c\u6216\u8005\u4e5f\u53ef\u80fd\u662f\u865a\u5047\u7684\u3002\u4f46\u662f\u771f\u5b9e\u7684\u7ecf\u6d4e\u884c\u4e3a\u662f\u4e0d\u4f1a\u8bf4\u8c0e\u7684\uff0c\u5373\u4f7f\u67d0\u4e9b\u4e2a\u4f53\u5b58\u5728\u504f\u5dee\uff0c\u4f46\u603b\u4f53\u800c\u8a00\u662f\u5ba2\u89c2\u7684\uff0c\u8fd9\u5c31\u662f\u771f\u5b9e\u4e16\u754c\u7269\u54c1\u4ef7\u503c\u51b3\u5b9a\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728Reality World\uff0c\u6211\u4eec\u4ece\u6280\u672f\u4e0a\u628a\u4eba\u4eec\u8fd9\u79cd\u7ecf\u6d4e\u884c\u4e3a\u878d\u5165\u5230\u5546\u54c1\u4ef7\u503c\u4f53\u7cfb\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u4eba\u7f51\u7edc\u4e4b\u95f4\u7684\u53e3\u7891\uff0c\u4f8b\u5982\u5982\u679c\u4f60\u51b3\u5b9a\u67d0\u4e2a\u4e1c\u897f\u597d\uff0c\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u8fd9\u6837\u7684\u63a8\u8350\u66f4\u9760\u8c31\uff0c\u4f60\u7528\u670b\u53cb\u4e4b\u95f4\u7684\u5173\u7cfb\u6765\u4fdd\u969c\u4f60\u7684\u53e3\u7891\uff0c\u800c\u4e0d\u662f\u968f\u4fbf\u4e00\u53e5\u4e0d\u8d1f\u8d23\u4efb\u7684\u8bdd\u3002\u800c\u4e3a\u4ec0\u4e48\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u662f\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u7684\u4e92\u52a8\u5927\u90fd\u591a\u662f\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u8fdb\u884c\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7ade\u4e89\uff0c\u5bf9\u4e8e\u76f8\u4f3c\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5b9e\u73b0\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u4f1a\u76f8\u4e92\u7ade\u4e89\uff0c\u56e0\u6b64\u7ade\u4e89\u4e5f\u4f1a\u6307\u5bfc\u5b9a\u4ef7\uff0c\u5bf9\u6807\u51c6\u4e5f\u662f\u4e00\u6837\u3002")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u662f\u66f4\u63a5\u8fd1\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u4fdd\u8bc1\u7269\u54c1\u7684\u4ef7\u503c\u662f\u4e0e\u4f60\u9700\u8981\u4ed8\u51fa\u7684\u4ee3\u7801\u5339\u914d\u7684\u3002"),(0,n.kt)("h4",{id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"},"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684NFT\u7cfb\u7edf\u4e2d\uff0c\u7269\u54c1\u88ab\u53cd\u590d\u548c\u5927\u91cf\u8f6c\u5356\uff0c\u800c\u4e0d\u662f\u50cf\u6e38\u620f\u4e00\u6837\u88ab\u5927\u91cf\u73a9\u5bb6\u771f\u6b63\u7684\u4f53\u9a8c\u3002\u5728\u8fd9\u4e9b\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u751a\u81f3\u5927\u90e8\u5206\u4e70\u5bb6\u548c\u5356\u5bb6\u6839\u672c\u5c31\u6ca1\u6709\u53bb\u4f53\u9a8c\u5b83\u771f\u6b63\u7684\u5185\u5bb9\uff0c\u5f53\u7136\u4e5f\u4e0d\u53ef\u80fd\u6709\u673a\u4f1a\u53bb\u6539\u8fdb\u5b83\uff0c\u6216\u8005\u53bb\u589e\u52a0\u5b83\u7684\u4ef7\u503c\u3002\u8fd9\u6837\u7684\u7ecf\u6d4e\u6d3b\u52a8\u6beb\u65e0\u610f\u4e49\uff0c\u5b83\u5bf9\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u90fd\u6beb\u65e0\u8d21\u732e\u3002"),(0,n.kt)("h3",{id:"466-royalty"},"4.6.6 Royalty"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u4e2d\u7684\u751f\u4ea7\u8005\uff0c\u6709\u4e24\u79cd\u6fc0\u52b1\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u6b21\u6027\u8d39\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e")),(0,n.kt)("p",null,"\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u4e00\u6b21\u6027\u8d39\u7528\u901a\u5e38\u53d1\u751f\u5728\u5546\u54c1\u4ea4\u6613\u7684\u7ec8\u7aef\uff0c\u5373\u5546\u54c1\u8f6c\u79fb\u5230\u6700\u7ec8\u6d88\u8d39\u8005\u7684\u8fc7\u7a0b\u4e2d\u3002\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u5f3a\u52bf\u548c\u6280\u672f\u7ade\u4e89\u529b\u5f3a\u7684\u751f\u4ea7\u8005\uff0c\u4ed6\u4eec\u4e5f\u4f1a\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u5f95\u5361\u8ddf\u534e\u4e3a\u7684\u5408\u4f5c\uff0c\u662f\u6309\u7167\u624b\u673a\u9500\u91cf\u8fdb\u884c\u5206\u6210\u3002\u5f53\u7136\u8fd9\u4e9b\u90fd\u4f1a\u968f\u7740\u4e00\u4e9b\u8bdd\u8bed\u6743\u7b49\u56e0\u7d20\u53ef\u4ee5\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eReality World\u4e2d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5f71\u54cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e\u53ef\u80fd\u66f4\u52a0\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e00\u6b21\u6027\u8d39\u7528\u53ef\u80fd\u66f4\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u5f00\u53d1\u66f4\u591a\u7684\u5185\u5bb9\uff0c\u4f46\u4e5f\u8bb8\u5b83\u6ca1\u6709\u7cbe\u529b\u53bb\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u7ade\u4e89\u529b\uff0c\u56e0\u4e3a\u65e0\u6cd5\u8f6c\u5316\u5b58\u91cf\u7528\u6237\u7684\u4ef7\u503c\uff0c\u6c38\u8fdc\u53ea\u6709\u65b0\u7528\u6237\u624d\u80fd\u4ea7\u751f\u6536\u5165\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u5f00\u53d1\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u7248\u7a0e\u7684\u6536\u76ca\u4e3b\u8981\u662f\u53d6\u51b3\u4e8e\u5f71\u54cd\u529b\u548c\u77e5\u540d\u5ea6\uff0c\u4e0d\u540c\u7684\u5f71\u54cd\u529b\u548c\u540d\u6c14\u5176\u7248\u7a0e\u6536\u5165\u7684\u5dee\u8ddd\u975e\u5e38\u5927\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u66f4\u613f\u610f\u82b1\u5fc3\u601d\u63d0\u5347\u5355\u4e2a\u6807\u51c6\u6216\u7ec4\u4ef6\u7684\u54c1\u8d28\uff0c\u56e0\u4e3a\u53ea\u8981\u6709\u597d\u7684\u5f71\u54cd\u529b\uff0c\u8fd9\u5957\u673a\u5236\u4ee5\u4fdd\u8bc1ta\u8d5a\u53d6\u8db3\u591f\u7684\u6536\u5165\u3002\u5c31\u597d\u6bd4\u82f9\u679c\u624b\u673a\uff0cTA\u9700\u8981\u7ef4\u6301\u81ea\u5df1\u7684\u54c1\u724c\uff0c\u7136\u540e\u9500\u552e\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u5176\u4ed6\u4e00\u4e9b\u624b\u673a\u5382\u5546\u5219\u4f1a\u5c1d\u8bd5\u5f00\u53d1\u591a\u79cd\u4e0d\u540c\u5b9a\u4f4d\u7684\u4ea7\u54c1\u548c\u5f00\u53d1\u7ec6\u5206\u5e02\u573a\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u9700\u8981\u9f13\u52b1\u5f00\u53d1\u8005\u5236\u4f5c\u66f4\u597d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u6570\u91cf\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u3002\u6240\u6709\u5bf9\u8fd9\u4e24\u7c7b\u5f00\u53d1\u8005\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("h4",{id:"4661-\u6807\u51c6\u7a0e"},"4.6.6.1 \u6807\u51c6\u7a0e"),(0,n.kt)("p",null,"\u5373\u7ec4\u4ef6\u5f00\u53d1\u8005\uff0c\u5728\u6bcf\u9500\u552e\u4e00\u4ef6\u7ec4\u4ef6\u65f6\uff0c\u6807\u51c6\u7684\u5236\u5b9a\u8005\u53ef\u4ee5\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u53ea\u662f\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u800c\u6ca1\u6709\u5f62\u6210\u4efb\u4f55\u9500\u552e\u6536\u5165\uff0c\u662f\u4e0d\u9700\u8981\u5411\u6807\u51c6\u4f5c\u8005\u652f\u4ed8\u8d39\u7528\u7684\u3002\u8fd9\u6837\u964d\u4f4e\u7ec4\u4ef6\u5f00\u53d1\u8005\u7684\u95e8\u69db\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u6807\u51c6\u4f5c\u8005\u5728\u6ca1\u6709\u4efb\u4f55\u6807\u51c6\u7a0e\u6536\u5165\u4e4b\u524d\uff0c\u4e5f\u4e0d\u9700\u8981\u5411\u5e73\u53f0\u652f\u4ed8\u8d39\u7528\u3002"),(0,n.kt)("h4",{id:"4662-\u7ec4\u4ef6\u7a0e"},"4.6.6.2 \u7ec4\u4ef6\u7a0e"),(0,n.kt)("p",null,"\u5373\u666e\u901a\u7528\u6237\u4f7f\u7528\u67d0\u4e2a\u7ec4\u4ef6\u5f00\u53d1\u7684\u5185\u5bb9\uff0c\u5728\u4ea7\u751f\u6536\u5165\u7684\u65f6\u5019\u4f1a\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7ec4\u4ef6\u7a0e\u6765\u8bf4\u8981\u66f4\u590d\u6742\u4e00\u4e9b\uff0c\u56e0\u4e3a\u7528\u6237\u7684\u6536\u5165\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u7ec4\u4ef6\u7684\u7ed3\u679c\uff0c\u5f88\u96be\u6e05\u6670\u5224\u5b9a\u67d0\u5355\u4e2a\u7ec4\u4ef6\u7684\u8d21\u732e\u3002\u8fd9\u5757\u540e\u7eed\u5728\u68b3\u7406\u4e00\u4e0b\u601d\u8def\u3002"),(0,n.kt)("h3",{id:"469-\u5b8c\u6574\u7684\u751f\u6001"},"4.6.9 \u5b8c\u6574\u7684\u751f\u6001"),(0,n.kt)("p",null,"\u65e2\u8981\u6709\u6d88\u8d39\u8005\uff0c\u751f\u6210\u8005\uff0c\u5de5\u5177\u5236\u4f5c\uff0c\u4f9b\u5e94\u94fe\uff0c\u624d\u80fd\u5168\u57df\u6fc0\u6d3b"),(0,n.kt)("h2",{id:"47-social"},"4.7 Social"),(0,n.kt)("h3",{id:"471-\u79c1\u4eba\u5316\u793e\u4ea4"},"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4"),(0,n.kt)("img",{src:"resources/reworld.png"}),(0,n.kt)("p",null,"\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u73a9\uff0c\u4f1a\u7ed9\u670b\u53cb\u63a8\u8350\u81ea\u5df1\u89c9\u5f97\u8fd8\u73a9\u7684\u4e1c\u897f\uff0c\u5f62\u6210\u826f\u6027\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u95f4\u63a5\u4e5f\u4f1a\u5bfc\u81f4\u793e\u533a\u66f4\u6587\u660e"),(0,n.kt)("p",null,"\u5927\u591a\u6570\u7c7bRoblox \u5e73\u53f0\u90fd\u662f\u7c7b\u4f3c\u7684\u6a21\u5f0f\uff0c\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u5e94\u7528\u5e02\u573a"),(0,n.kt)("p",null,"\u53ea\u6709\u79c1\u4eba\u5316\u624d\u80fd\u4fc3\u8fdb\u5927\u4f17\u521b\u4f5c\uff0c\u5c31\u50cfSnapchat"),(0,n.kt)("p",null,"\u751a\u81f3\u6296\u97f3\u89c6\u9891\u5927\u90e8\u5206\u90fd\u662f\u56f4\u7ed5\u81ea\u5df1\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5e94\u7528\u5e02\u573a\u578b\u7684\u5e94\u7528\uff0c\u662f\u4e0d\u4f1a\u6fc0\u53d1\u666e\u901a\u7528\u6237\u7684\uff0c\u5c31\u50cf\u4f60\u8981\u6c42\u666e\u901a\u7528\u6237\u521b\u4f5c\u4e25\u8083\u7684\u5927\u7247\uff0c\u4ed6\u4eec\u505a\u4e0d\u5230\uff0c\u6240\u4ee5\u5fc5\u987b\u79c1\u4eba\u5316"),(0,n.kt)("p",null,"\u8ddf\u5fae\u4fe1\u7684\u6a21\u5f0f\uff0c\u501f\u52a9\u79c1\u4eba\u5c0f\u5708\u5b50\u7684\u5f3a\u70c8\u5206\u4eab\u548c\u521b\u4f5c\u9700\u6c42"),(0,n.kt)("h4",{id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1"},"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1"),(0,n.kt)("p",null,"\u6dd8\u5b9d\u7684\u6a21\u5f0f\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7ecf\u6d4e\u7684\u6570\u5b57\u5316\uff0c\u53ea\u662f\u4e00\u4e2a\u9500\u552e\u5e73\u53f0\uff0c\u793e\u4ea4\u6027\u51e0\u4e4e\u4e0d\u5b58\u5728\u3002\u8868\u73b0\u5728\u4e00\u4e9b\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f60\u4e70\u4e86\u4e00\u4e2a\u4e1c\u897f\uff0c\u51e0\u4e4e\u6ca1\u6709\u4ec0\u4e48\u6e20\u9053\u628a\u8fd9\u5bb6\u5e97\u6216\u8005\u8fd9\u4ef6\u5546\u54c1\u5206\u4eab\u7ed9\u597d\u53cb\uff0c\u751a\u81f3\u6709\u65f6\u5019\u8fd8\u9700\u8981\u901a\u8fc7\u5fae\u4fe1\u53bb\u5206\u4eab\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5bb6\u6dd8\u5b9d\u5e97\u7684\u54c1\u724c\u6548\u5e94\u76f8\u5bf9\u6bd4\u8f83\u5f31\uff0c\u4e00\u65b9\u9762\u662f\u591a\u5bb6\u5e97\u53ef\u80fd\u9500\u552e\u540c\u4e00\u79cd\u5546\u54c1\uff0c\u4e00\u65b9\u9762\u662f\u6ca1\u6709\u7ef4\u7cfb\u5e97\u5bb6\u548c\u6d88\u8d39\u8005\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u4e9b\u65b9\u5f0f\u6216\u5de5\u5177\u3002\u6240\u4ee5\u6dd8\u5b9d\u5546\u5e97\u7684\u58f0\u8a89\u6216\u540d\u58f0\u4e3b\u8981\u9760\u6d41\u91cf\uff0c\u6216\u8005\u9500\u91cf\u8fd9\u4e00\u5355\u4e00\u5c5e\u6027\uff0c\u4f46\u662f\u56e0\u4e3a\u53d7\u6d41\u91cf\u8fd9\u79cd\u5e73\u53f0\u63a7\u5236\u529b\u91cf\u7684\u5f71\u54cd\uff0c\u9500\u91cf\u672c\u8eab\u53c8\u662f\u53d7\u6d41\u91cf\u5f71\u54cd\u7684\uff0c\u5bfc\u81f4\u5c0f\u54c1\u724c\u4e0d\u6613\u4e8e\u6210\u957f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u4f60\u770b\u5230\u670b\u53cb\u7684\u67d0\u4e2a\u4e1c\u897f\u8f83\u597d\uff0c\u8fd9\u79cd\u793e\u4ea4\u5bfc\u81f4\u7684\u63a8\u8350\u6709\u65f6\u5019\u5e76\u4e0d\u80fd\u76f4\u63a5\u8f6c\u5316\u5230\u8fd9\u5bb6\u5e97\uff0c\u4e00\u662f\u5206\u4eab\u4e0d\u65b9\u4fbf\uff0c\u6211\u8fd8\u8981\u53bb\u8ba2\u5355\u91cc\u641c\u7d22\u7136\u540e\u8f6c\u53d1\uff0c\u8fd9\u662f\u4e00\u4e2a\u9ebb\u70e6\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u5bf9\u6bd4\u5fae\u4fe1 \uff0c\u6211\u60f3\u5206\u4eab\u7684\u4e1c\u897f\u90fd\u5728\u670b\u53cb\u5708\uff0c\u5927\u5bb6\u968f\u65f6\u53ef\u4ee5\u81ea\u5df1\u53bb\u770b\u3002\u5f53\u7136\u5bf9\u4e8e\u6dd8\u5b9d\uff0c\u66f4\u6709\u53ef\u80fd\u7684\u60c5\u51b5\u662f\u5927\u5bb6\u8bf4\u4e2a\u54c1\u724c\u540d\u5b57\uff0c\u5927\u5bb6\u81ea\u5df1\u53bb\u641c\u7d22\u8d2d\u4e70\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u54c1\u724c\u7684\u6548\u5e94\u7684\u66f4\u5927\u7684\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u7ed3\u8d77\u6765\u53ef\u80fd\u662f\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u5e76\u4e0d\u662f\u4e00\u4e2a\u521b\u4f5c\u5e73\u53f0\uff0c\u6240\u4ee5\u591a\u4e2a\u5546\u5e97\u4e4b\u95f4\u540c\u8d28\u5316\u5f88\u4e25\u91cd\uff0c\u5bfc\u81f4\u51e0\u4e4e\u6ca1\u6709\u54c1\u724c\u7ade\u4e89\u529b\uff1b\u800c\u53cd\u89c2\u6e38\u620f\u5e02\u573a\uff0c\u4e00\u4e2a\u6e38\u620f\u662f\u9760\u521b\u9020\u7684\u72ec\u7279\u6027\u6765\u5efa\u7acb\u54c1\u724c\u58f0\u8a89\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u6ca1\u6709\u793e\u4ea4\uff0c\u56e0\u4e3a\u5355\u7eaf\u56f4\u7ed5\u5546\u54c1\u8d2d\u4e70\u6784\u5efa\u793e\u4ea4\u662f\u6ca1\u6709\u592a\u5927\u5438\u5f15\u529b\u7684\u3002\u793e\u4ea4\u66f4\u591a\u6e90\u4e8e\u751f\u6d3b\uff0c\u5728\u5546\u54c1\u4e4b\u5916\uff0c\u8fd8\u6709\u66f4\u591a\u7684\u6d3b\u52a8\uff0c\u5546\u54c1\u8d2d\u4e70\u6d3b\u52a8\u751a\u81f3\u53ef\u80fd\u53ea\u5360\u4eba\u7c7b\u6d3b\u52a8\u5f88\u5c0f\u7684\u4e00\u90e8\u5206\uff0c\u6bd4\u5982\u5f88\u591a\u5176\u4ed6\u66f4\u5177\u4ef7\u503c\u7684\u670d\u52a1\u662f\u901a\u8fc7\u6dd8\u5b9d\u8d2d\u4e70\u4e0d\u5230\u7684\u3002\u4f55\u51b5\u4e00\u4e2a\u7eaf\u5546\u54c1\u63a8\u8350\u7684\u793e\u4ea4\u4f1a\u5f15\u8d77\u4eba\u4eec\u65b9\u6848\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6dd8\u5b9d\u6784\u5efa\u4e0d\u8d77\u793e\u4ea4\u80fd\u529b\u3002")),(0,n.kt)("p",null,"\u4f46\u662f\u53cd\u89c2\u5fae\u4fe1\uff0c\u5fae\u4fe1\u5b8c\u5168\u662f\u793e\u4ea4\u9a71\u52a8\u3002\u4f60\u7684\u6bcf\u4e00\u4e2a\u4f1a\u8bdd\uff0c\u6bcf\u4e00\u4e2a\u597d\u53cb\uff0c\u6bcf\u4e00\u6b21\u53c2\u52a0\u7fa4\u804a\uff0c\u90fd\u662f\u56e0\u4e3a\u4f60\u7684\u6587\u5b57\u6240\u6d89\u53ca\u7684\u67d0\u4ef6\u4e8b\u662f\u4e0e\u5176\u4ed6\u67d0\u4e2a\u4eba\u76f8\u5173\u7684\u3002\u8fd9\u4e9b\u5927\u91cf\u7684\u6c9f\u901a\u4ea4\u6d41\u76ee\u7684\uff0c\u5176\u5b9e\u80cc\u540e\u7684\u4ef7\u503c\u5f88\u5927\u90e8\u5206\u4e5f\u53ef\u80fd\u5f52\u7c7b\u4e3a\u4ef7\u503c\uff0c\u54ea\u6015\u662f\u4ea4\u5230\u4e00\u4e2a\u5355\u7eaf\u7684\u597d\u670b\u53cb\uff0c\u5176\u5b9e\u65e5\u540e\u4e5f\u4f1a\u4ea7\u751f\u67d0\u4e9b\u4ef7\u503c\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u53ef\u4ee5\u8bf4\u793e\u4ea4\u662f\u6784\u5efa\u4ef7\u503c\u7684\u91cd\u8981\u8fc7\u7a0b\u548c\u624b\u6bb5\uff0c\u800c\u6700\u540e\u7684\u4ea4\u6613\u53cd\u800c\u53ea\u662f\u4e00\u4e2a\u5f88\u7b80\u5355\u7684\u8fc7\u7a0b\u6216\u8005\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5fae\u4fe1\u6ca1\u6709\u4ef7\u503c\u4ea4\u6613\u7684\u65b9\u5f0f\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u6784\u5efa\u4ef7\u503c\u548c\u4ef7\u503c\u4ea4\u6613\u5206\u79bb\u7684\u67b6\u6784\u662f\u4e00\u79cd\u6bd4\u8f83\u597d\u7684\u67b6\u6784\uff0c\u6216\u8005\u8bf4\u6784\u67b6\u4ef7\u503c\u7684\u8fc7\u7a0b\u4e0e\u4ef7\u503c\u4ea4\u6613\u672c\u8eab\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7684\u8026\u5408\u3002"),(0,n.kt)("p",null,"\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4ea4\u6613\u5e73\u53f0\uff0c\u4f46\u662f\u6253\u901a\u6dd8\u5b9d\u7684\u5b9e\u7269\u6216\u8005\u7eaf\u5546\u54c1\u5316\u7684\u5f62\u5f0f\uff0c\u4f7f\u4e4b\u6cdb\u534e\u5230\u6240\u6709\u4ef7\u503c\u670d\u52a1\uff0c\u6bd4\u5982\u6e38\u620f\u4f53\u9a8c\uff0c\u8f6f\u4ef6\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u5e73\u53f0\uff0c\u521b\u4f5c\u4e0d\u5149\u751f\u4ea7\u5546\u54c1\uff0c\u800c\u4e14\u7ed3\u5408\u9500\u552e\u5e73\u53f0\uff0c\u4f7f\u5f97\u9500\u552e\u5546\u54c1\u540c\u8d28\u5316\u8f83\u4f4e\uff0c\u56e0\u4e3a\u5b83\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u9500\u552e\u5e73\u53f0\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u793e\u4ea4\uff0c\u6e38\u620f\u5929\u751f\u5177\u6709\u793e\u4ea4\u6027\uff0c\u4f46\u662f\u73b0\u5728\u7684\u6e38\u620f\u4e3b\u8981\u53ea\u662f\u4e00\u4e2a\u597d\u53cb\u5217\u8868\uff0c\u6392\u540d\u3002\u7f3a\u4e4f\u5fae\u4fe1\u90a3\u79cd\uff0c\u4e3a\u4e86\u67d0\u4e2a\u76ee\u6807\u6216\u5173\u7cfb\uff0c\u4e3b\u52a8\u53d1\u8d77\u793e\u4ea4\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u4f60\u53d1\u73b0\u4e00\u4e2a\u597d\u73a9\u7684\u6e38\u620f\uff0c\u662f\u5426\u53ef\u4ee5\u66f4\u597d\u5730\u9080\u8bf7\u670b\u53cb\u52a0\u5165\u8fdb\u6765\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u8981\u53bb\u5fae\u4fe1\u4e2d\u5206\u4eab\uff0c\u6bcf\u6b21\u8fdb\u5165\u90fd\u9700\u8981\u91cd\u65b0\u5206\u4eab\uff0c\u6709\u4e00\u79cd\u5272\u88c2\u3002\u800c\u6211\u4eec\u4f1a\u4fdd\u5b58\u4e00\u4e2a\u6700\u8fd1\u5217\u8868\uff0c\u5982\u679c\u4f60\u4eec\u7ecf\u5e38\u73a9\u4e00\u4e2a\u6e38\u620f\uff0c\u6253\u4e2a\u62db\u547c\u76f4\u63a5\u5c31\u8fdb\u5165\u4e86\u3002\u5fae\u4fe1\u4e0d\u4f1a\u4e3a\u4e00\u4e9b\u4e13\u7528\u7684\u793e\u4ea4\u76ee\u7684\u8fdb\u884c\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u5173\u4e8e\u793e\u4ea4\u4ea4\u6613\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u66f4\u597d\u7684\u63a8\u8350\uff0c\u5982\u4e0a\u9762\u7b2c\u4e09\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u4ea4\u6613")),(0,n.kt)("h3",{id:"472--\u5173\u6ce8\u73b0\u5b9e"},"4.7.2 \u5173\u6ce8\u73b0\u5b9e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"reality",src:l(4522).Z,width:"1920",height:"1080"})),(0,n.kt)("h2",{id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"},"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"),(0,n.kt)("p",null,"\u5728\u6e38\u620f\u548c\u7535\u5f71\u7b493D\u8f7d\u4f53\u7684\u5a31\u4e50\u4f53\u9a8c\u4e2d\uff0c\u6709\u4e09\u79cd\u4e3b\u8981\u7684\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7279\u7684\u7c7b\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6545\u4e8b\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u6027")),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u6e38\u620f\uff0c\u5b83\u662f\u6e38\u620f\u4e2d\u7684\u7075\u9b42\uff0c\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u6839\u636e\u81ea\u5df1\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\u8bbe\u8ba1\u51fa\u7684\uff0c\u8ba9\u73a9\u5bb6\u4ea7\u751f\u5fc3\u6d41\u7684\u77ac\u95f4\u4f53\u9a8c"),(0,n.kt)("p",null,"\u6545\u4e8b\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u7535\u5f71"),(0,n.kt)("p",null,"\u521b\u4f5c\u6027\u7684\u6700\u5927\u4e0d\u540c\u548c\u9b45\u529b\u5728\u4e8e\uff0c\u521b\u4f5c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u88ab\u52a8\u7684\u4f53\u9a8c\uff0c\u5b83\u662f\u9700\u8981\u601d\u8003\u3001\u6784\u601d\u3001\u81ea\u5df1\u4e2a\u4eba\u5bf9\u751f\u6d3b\u5404\u65b9\u9762\u7684\u7406\u89e3\u3001\u611f\u609f\u548c\u60f3\u8c61\u529b\u7684\uff0c\u56e0\u6b64\u8fd9\u79cd\u8981\u6c42\u66f4\u9ad8\uff0c\u5b83\u7684\u7ed3\u679c\u5bf9\u5e94\u7684\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u6e38\u620f\u6001\u7684\u5fc3\u6d41\uff0c\u5b83\u5bf9\u5e94\u4e8e\u6210\u5c31\u4e86\uff0c\u751a\u81f3\u67d0\u79cd\u7cbe\u795e\u7269\u8d28\uff0c\u521b\u4f5c\u7684\u4e1c\u897f\u624d\u66f4\u5bf9\u5e94\u4e8e\u4ef7\u503c\uff0c\u624d\u66f4\u5bb9\u6613\u4ea7\u751f\u4ea4\u6613"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bfc\u6f14\u6216\u8005\u4e00\u4e2a\u827a\u672f\u5de5\u4f5c\u8005\uff0c\u4ed6\u6301\u7eed\u521b\u4f5c\u4f18\u79c0\u4f5c\u54c1\u7684\u52a8\u529b\u4e3b\u8981\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u4f53\u9a8c\uff0c\u90a3\u4e48\u5c06\u8fd9\u79cd\u80fd\u529b\u91ca\u653e\u5230\u666e\u901a\u5927\u4f17\u5f53\u4e2d\uff0c\u4e5f\u4e00\u5b9a\u4f1a\u662f\u4e0d\u9519\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u8fc7\u53bb\u7684\u79d1\u6280\u6211\u4eec\u805a\u7126\u4e8e\u6539\u5584\u4e00\u4e9b\u5b9e\u7528\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u5b83\u4f53\u73b0\u5728\u53bb\u6d41\u7a0b\u3001\u4fbf\u6377\u6027\u3001\u6548\u7387\u7b49\uff1b\u4e92\u8054\u7f51\u65f6\u4ee3\u9664\u4e86\u63d0\u5347\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u6548\u7387\uff0c\u4ed6\u5f88\u5927\u7684\u4f53\u9a8c\u6539\u5584\u5728\u4e8e\u91ca\u653e\u4e86\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u5c31\u662f\u89c6\u9891\u548c\u7167\u7247\uff0c\u672c\u8d28\u4e0a\u7167\u7247\u548c\u89c6\u9891\u6240\u53cd\u5e94\u7684\u662f\u6bcf\u4e2a\u4eba\u611f\u77e5\u548c\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u4e0d\u540c\u89c6\u89d2\u955c\u5934\u89c2\u5bdf\u540c\u4e00\u4e16\u754c\u4e0d\u540c\u7684\u7f8e\u611f"),(0,n.kt)("li",{parentName:"ul"},"\u6355\u6349\u4e0d\u540c\u611f\u5174\u8da3\u7684\u753b\u9762\u8868\u8fbe\u81ea\u5df1\u7684\u4e2a\u6027\u3001\u7406\u89e3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u62cd\u6444\u611f\u5174\u8da3\u7684\u89c6\u9891\u6545\u4e8b\u53cd\u5e94\u81ea\u5df1\u7684\u5174\u8da3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u8f6c\u8f7d\u4e0d\u540c\u7684\u89c6\u9891\u548c\u56fe\u7247\u4fe1\u606f\u8868\u8fbe\u81ea\u5df1\u7684\u89c2\u70b9\u3001\u4ef7\u503c\u89c2\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5df2\u6709\u5e26\u6709\u5404\u79cd\u5386\u53f2\u3001\u6280\u672f\u3001\u6587\u5316\u7b49\u4fe1\u606f\u7684\u56fe\u7247\u548c\u89c6\u9891\u6dfb\u52a0\u81ea\u5df1\u7684\u7406\u89e3\uff0c\u6292\u53d1\u81ea\u5df1\u7684\u4e3b\u5f20\u3001\u8ba4\u77e5\u3001\u89c2\u70b9\uff1a\u4ef7\u503c\u7b49")),(0,n.kt)("p",null,"\u4f46\u6240\u6709\u8fd9\u4e9b\uff0c\u4ed6\u90fd\u662f\u5728\u89c2\u5bdf\u6216\u8005\u5b66\u4e60\u4e86\u89e3\u8fd9\u4e2a\u4e16\u754c\uff0c\u5b83\u7684\u5de5\u5177\u901a\u5e38\u53ea\u662f\u955c\u5934\uff0c\u9664\u6b64\u4e4b\u5916\u5b83\u51e0\u4e4e\u6ca1\u6709\u5176\u4ed6\u5de5\u5177\uff0c\u4ed6\u7684\u8868\u8fbe\u80fd\u529b\u5f88\u53d7\u9650\u4e8e\u6211\u4eec\u773c\u775b\u6240\u80fd\u770b\u5230\u7684\u4e8b\u7269"),(0,n.kt)("p",null,"\u800c\u53cd\u89c2\u6211\u4eec\u7684\u4e16\u754c\u4e3a\u4ec0\u4e48\u591a\u59ff\u591a\u5f69\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u7528\u5404\u79cd\u5de5\u5177\u5982\u521b\u9020\u4e86\u5efa\u7b51\u3001\u8f66\u5b50\u3001\u8863\u670d\u3001\u8349\u5730\u3001\u516c\u56ed\u3001\u827a\u672f\u4f5c\u54c1\u7b49\u7b49\u6574\u4e2a\u4e16\u754c\uff0c\u8fd9\u4e9b\u521b\u9020\u7684\u4ef7\u503c\u662f\u56e0\u4e3a\u4ed6\u4eec\u878d\u5165\u4e86\u4eba\u4eec\u7684\u7406\u89e3\u3001\u601d\u8003\u3001\u60f3\u8c61\u3001\u751a\u81f3\u68a6\u60f3\u548c\u671f\u671b\u7b49\u7b49"),(0,n.kt)("p",null,"\u521b\u9020\u4f34\u968f\u7740\u6574\u4e2a\u6587\u660e\uff0c\u56e0\u4e3a\u4eba\u4eec\u521b\u9020\u7684\u4e1c\u897f\u6539\u5584\u4e86\u8fd9\u4e2a\u4e16\u754c\uff0c\u63d0\u5347\u4e86\u4eba\u4eec\u7684\u8ba4\u77e5\u3001\u7406\u89e3\u3001\u751f\u6d3b\u6548\u7387\u3001\u751f\u6d3b\u8d28\u91cf\u7b49\u7b49\uff0c\u6240\u4ee5\u5b83\u4fc3\u8fdb\u4e86\u6587\u660e\u8fdb\u7a0b"),(0,n.kt)("p",null,"\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u521b\u9020\u6027\u662f\u5426\u8db3\u591f\u4e86\uff0c\u53d7\u9650\u4e8e\u5f88\u591a\u7269\u7406\u7ea6\u675f\uff0c\u5f88\u591a\u521b\u9020\u80af\u5b9a\u662f\u53d7\u9650\u7684"),(0,n.kt)("p",null,"\u4f46\u662f\u521b\u9020\u865a\u62df\u7684\u5185\u5bb9\u76f8\u8f83\u4e8e\u7269\u8d28\u7269\u54c1\u662f\u5426\u5177\u6709\u4ef7\u503c\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u53ea\u8981\u521b\u9020\u7684\u7ed3\u679c\u63d0\u5347\u4e86\u4eba\u4eec\u5bf9\u4e16\u754c\u7684\u8ba4\u77e5\u548c\u7406\u89e3\u3001\u63d0\u5347\u4e86\u751f\u6d3b\u8d28\u91cf\u3001\u7cbe\u795e\u4e16\u754c\uff0c\u4ece\u800c\u4e5f\u5c31\u4fc3\u8fdb\u4e86\u6587\u660e\u7684\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4ed6\u5c31\u548c\u7269\u7406\u4e16\u754c\u7684\u521b\u9020\u662f\u7b49\u4ef7\u7684"),"\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bf4\uff0c\u5b83\u751a\u81f3\u53ef\u4ee5\u4e0d\u9700\u8981\u8ddf\u7269\u7406\u4e16\u754c\u53d1\u751f\u5173\u8054\uff0c\u5c31\u50cf\u4e00\u4e9b\u79d1\u5e7b\u7535\u5f71\u6216\u8005\u4e00\u4e9b\u7384\u5e7b\u5c0f\u8bf4\u8bb2\u8ff0\u7684\u6545\u4e8b\u90a3\u6837"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u79d1\u6280\u7684\u4e0b\u4e00\u4e2a\u5177\u6709\u793e\u4f1a\u4ef7\u503c\u7684\u4f7f\u547d\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u5f53\u524d\u5728\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u65b9\u9762\u6700\u5bb9\u6613\u5b9e\u65bd\u7684\u662f\u5199\u4f5c\uff1a\u53ef\u4ee5\u57fa\u4e8e\u81ea\u5df1\u7684\u7406\u89e3\u521b\u9020\u65b0\u7684\u7406\u89e3\uff1b\u5176\u6b21\u662f\u7535\u5f71\u548c\u6e38\u620f\uff0c\u4f46\u662f\u4ed6\u4eec\u4ec5\u9762\u5411\u5c11\u6570\u5f00\u53d1\u8005\u6216\u8005\u7535\u5f71\u5de5\u4f5c\u8005"),(0,n.kt)("h3",{id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027"},"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u540c\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u865a\u62df\u7684\u521b\u9020\u4e5f\u5fc5\u7136\u9700\u8981\u5206\u5de5\uff0c\u4e0d\u53ef\u80fd\u6240\u6709\u4e1c\u897f\u90fd\u9700\u8981\u6bcf\u4e2a\u521b\u4f5c\u8005\u4ece\u96f6\u5f00\u59cb\u642d\u5efa"),(0,n.kt)("p",null,"\u5206\u5de5\u610f\u5473\u7740\u52b3\u52a8\u529b\u590d\u7528\uff0c\u8282\u7701\u65f6\u95f4\uff0c\u5206\u5de5\u4e5f\u610f\u5473\u7740\u4ef7\u503c\u7684\u4ea4\u6613"),(0,n.kt)("p",null,"\u5546\u5e97\u6570\u5b57\u8d44\u4ea7\u3001\u7ec4\u4ef6\u7b49\u5176\u5b9e\u5c31\u662f\u5206\u5de5\u7684\u4ea7\u7269"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e16\u754c\u7684\u5206\u5de5\u7531\u4eba\u7c7b\u81ea\u8eab\u9a71\u52a8\uff0c\u4f8b\u5982\u884c\u4e1a\u6807\u51c6\u7531\u884c\u4e1a\u5185\u90e8\u8ba8\u8bba\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5f00\u53d1\u51fa\u80fd\u591f\u6613\u4e8e\u5206\u5de5\u534f\u4f5c\u7684\u67b6\u6784\uff0c\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u7684\u91cd\u8981\u57fa\u7840"),(0,n.kt)("h3",{id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"},"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"),(0,n.kt)("p",null,"\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u4eba\u4eec\u4e4b\u95f4\u7684\u8ddd\u79bb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eb2\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u53cb\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e00\u8d77\u5de5\u4f5c\u6216\u5b66\u4e60")),(0,n.kt)("p",null,"\u56f4\u7ed5\u7740\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u6216\u8005\u8bf4\u4e3a\u4e86\u4e00\u4e9b\u5171\u540c\u7684\u76ee\u6807\u6216\u8005\u5546\u4e1a\u76ee\u7684\uff0c\u5408\u4f5c\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u8fd9\u662f\u751f\u6d3b\u4e2d\u6700\u591a\u7684\u62c9\u8fd1\u4eba\u4eec\u8ddd\u79bb\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e5f\u662f\u6211\u4eec\u65e5\u5e38\u793e\u4ea4\u5708\u5b50\u6269\u5c55\u7684\u4e3b\u8981\u6765\u6e90"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u9020\u6027\u4e0d\u4ec5\u4ec5\u9488\u5bf9\u4e2a\u4eba\uff0c\u8fd8\u9700\u8981\u56f4\u7ed5\u5171\u540c\u76ee\u6807\uff0c\u5171\u540c\u521b\u9020\u548c\u534f\u540c\uff0c\u624d\u80fd\u4fc3\u8fdb\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u548c\u4e86\u89e3"),(0,n.kt)("h3",{id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"},"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u6709\u73a9\u6cd5\uff0c\u76ee\u6807\uff0c\u7b56\u7565\uff0c\u5ef6\u7eed\u6027\u8f83\u5927\u3002"),(0,n.kt)("p",null,"\u4e00\u822c\u521b\u9020\u66f4\u591a\u53ea\u662f\u770b\u4e00\u4e0b\uff0c\u5373\u4f7f\u6709\u4ea4\u4e92\uff0c\u4ea4\u4e92\u7684\u76ee\u7684\u6027\u4e5f\u5f88\u5f31\uff0c\u6240\u4ee5\u9700\u8981\u628a\u5355\u4e2a\u4e00\u822c\u521b\u4f5c\u5185\u5bb9\u7684\u4f53\u9a8c\uff0c\u8f6c\u5316\u4e3a\u6301\u7eed\uff0c\u6709\u76ee\u6807\u548c\u5438\u5f15\u529b\u7684\u4e00\u79cd\u4f53\u9a8c\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d\u5f88\u591a\u65f6\u95f4\u7684\u64cd\u4f5c\u5728\u4e8e\u63a2\u7d22\uff0c\u63a2\u7d22\u4e2d\u4e00\u65b9\u9762\u662f\u4e86\u89e3\u73af\u5883\uff0c\u4e00\u65b9\u9762\u662f\u6536\u96c6\u8d44\u6e90\uff0c\u6240\u4ee5\u8fd9\u4e9b\u4e00\u822c\u76843D\u5185\u5bb9\u4e2d\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\uff0c\u4f8b\u5982\u6bcf\u4e2a\u5185\u5bb9\u90fd\u53ef\u4ee5\u83b7\u5f97\u4e00\u5b9a\u7684\u7ecf\u9a8c\uff0c\u4f46\u662f\u7ecf\u9a8c\u8ddf\u8bbe\u8ba1\u4ea4\u4e92\u6709\u5173\uff0c\u4f46\u7ecf\u9a8c\u662f\u5171\u4eab\u7684"),(0,n.kt)("h3",{id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c"},"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u53ea\u662f\u73a9\u522b\u4eba\u8bbe\u8ba1\u7684\u6e38\u620f\uff0c\u6216\u8005\u770b\u7535\u5f71\uff0c\u8fd9\u901a\u5e38\u53ea\u662f\u4e2a\u4eba\u89c6\u89c9\u4e0a\u7684\u4f53\u9a8c\u3001\u4e2a\u4eba\u7406\u89e3\u7684\u5347\u534e\u3001\u5fc3\u6d41\uff0c\u8fd9\u79cd\u5fc3\u7406\u611f\u89c9\u5f80\u5f80\u5f88\u96be\u4f20\u9012\u7ed9\u5176\u4ed6\u4eba\uff0c\u4f8b\u5982\u5f53\u522b\u4eba\u7ed9\u4f60\u8bb2\u8ff0\u67d0\u4e2a\u6e38\u620f\u4f53\u9a8c\u65f6\uff0c\u5982\u679c\u4f60\u8981\u83b7\u5f97\u7c7b\u4f3c\u7684\u4f53\u9a8c\uff0c\u4f60\u5fc5\u987b\u81ea\u5df1\u4eb2\u81ea\u73a9\u4e00\u4e0b\uff0c\u4ed6\u6ca1\u53d1\u901a\u8fc7\u53e3\u8ff0\u4f20\u9012\u7ed9\u4f60"),(0,n.kt)("p",null,"\u5373\uff0c\u5982\u679c\u8ba4\u4e3a\u8fd9\u79cd\u6e38\u620f\u4f53\u9a8c\u662f\u4e00\u79cd\u4ef7\u503c\uff0c\u90a3\u4e48\u53ea\u6709\u6e38\u620f\u5f00\u53d1\u8005\u521b\u9020\u4e86\u4ef7\u503c\uff0c\u800c\u5927\u90e8\u5206\u73a9\u5bb6\u4e5f\u662f\u83b7\u5f97\u4ef7\u503c\uff0c\u5e76\u4e14\u8fd9\u79cd\u4ef7\u503c\u4e0d\u53ef\u8f6c\u5316"),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e2a\u4e16\u754c\u4f1a\u884d\u751f\u4ef7\u503c\u548c\u521b\u9020\u4ef7\u503c\uff0c\u5219\u6211\u4eec\u5e0c\u671b\u666e\u901a\u7684\u7528\u6237\u80fd\u591f\u521b\u5efa\u53ef\u4ee5\u4ea4\u6613\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u65f6\u95f4\u53ef\u4ee5\u521b\u9020\u8fd9\u79cd\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u6ca1\u6709\u521b\u9020\uff0c\u4ec5\u4ec5\u662f\u4f53\u9a8c\uff0c\u8fd9\u5176\u5b9e\u53c8\u56de\u5230\u4e86\u4f20\u7edf\u6e38\u620f\u884c\u4e1a\uff1a"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u4eba\u53ef\u4ee5\u521b\u9020\u6e38\u620f"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u521b\u9020\u51fa\u597d\u73a9\u7684\u4f53\u9a8c\uff0c\u9700\u8981\u5de8\u5927\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u73a9\u5bb6\u90fd\u5728\u73a9\u540c\u6837\u4e00\u4e9b\u6e38\u620f"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u6e38\u620f\u6b63\u5728\u88ab\u5e7f\u6cdb\u4f53\u9a8c\uff0c\u5c11\u6570\u4eba\u53d7\u76ca"),(0,n.kt)("p",null,"\u4e30\u5bcc\u6027\u4e0d\u591f"),(0,n.kt)("p",null,"\u7f3a\u4e4f\u6e38\u620f\u4e4b\u5916\u7684\u5f88\u591a\u4f53\u9a8c"),(0,n.kt)("p",null,"\u53ea\u6709\u521b\u9020\u548c\u6e38\u620f\u4f53\u9a8c\u7ed3\u5408\uff0c\u624d\u80fd\u5747\u5206\u548c\u6d88\u8017\u66f4\u591a\u7684\u65f6\u95f4\uff0c\u8ba9\u7528\u6237\u80fd\u591f\u6301\u7eed\u6295\u5165\uff0c\u800c\u4f20\u7edf\u6e38\u620f\u7684\u6d3b\u8dc3\u5ea6\u5f80\u5f80\u8ddf\u4e00\u4e9b\u65b0\u6e38\u620f\u6216\u8005\u7ecf\u5178\u6e38\u620f\u76f8\u5173"),(0,n.kt)("h3",{id:"485-\u521b\u9020\u7684\u65b9\u5f0f"},"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec8\u7aef\u7528\u6237\u4e0d\u4f1a\u76f4\u63a5\u5efa\u6a21\uff0c\u9664\u975e\u662f\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e0d\u9700\u8981\u7528\u6237\u96d5\u7422\u7cbe\u7ec6\u7f51\u683c\uff0c\u8fd9\u90e8\u5206\u8fd8\u662f\u8981\u56de\u5f52\u4f20\u7edfDCC\uff0c\u90a3\u91cc\u53ef\u4ee5\u8fdb\u884c\u66f4\u7cbe\u81f4\u5fae\u8c03\uff0c\u57283\u7ef4\u7a7a\u95f4\u505a\u4e0d\u5230\uff08\u8fd9\u6837\u4e5f\u5c31\u907f\u514d\u5c06\u4f20\u7edfDCC\u7684\u5de5\u5177\u5f15\u5165\u8fdb\u6765\uff0c\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u505a\u8ddf\u4f4d\u7f6e\u76f8\u5173\u7684\u4ea4\u4e92\uff0c\u5927\u5927\u7b80\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u4eba\u4eec\u52a0\u5de5\u67d0\u4e2a\u4e1c\u897f\u4e5f\u662f\u57fa\u4e8e\u73b0\u6709\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u4ece\u96f6\u5f00\u59cb\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e00\u4e9b\u4e0d\u9700\u8981\u7cbe\u81f4\u7f51\u683c\uff0c\u5e76\u4e14\u6709\u81ea\u7531\u5ea6\u7684\u7269\u4f53\uff0c\u5982\u5730\u9762\uff0c\u5c71\u8109\u7b49\u7b49\uff0c\u5927\u90e8\u5206\u8ddf\u73af\u5883\u6709\u5173")),(0,n.kt)("p",null,"\u6700\u540e\u7684\u4ea4\u4e92\u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u4fbf\u7b26\u5408\u89c6\u89c9\u76f4\u89c2\u5e38\u8bc6\u7684\u4ea4\u4e92\u96c6\u5408\uff0c\u7528\u6237\u57fa\u672c\u662f\u73af\u5883\u9760\u57fa\u4e8e\u624b\u52bf\u7684\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e2a\u6027\u7269\u4f53\u9760\u6a21\u677f\uff0c\u8c22\u8c22\u6a21\u7248\u901a\u8fc7DCC\u751f\u6210\uff0c\u5927\u90e8\u5206\u811a\u672c\u548c\u903b\u8f91\u4e5f\u662f\u9488\u5bf9\u4e2a\u6027\u7269\u4f53"),(0,n.kt)("p",null,"\u7c98\u6027\uff0c\u7531\u4e8e\u521b\u9020\u82b1\u8d39\u4e86\u5de8\u5927\u7684\u65f6\u95f4\uff0c\u56e0\u6b64\u7c98\u6027\u66f4\u9ad8"),(0,n.kt)("h3",{id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"},"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"),(0,n.kt)("p",null,"\u5355\u6b21\u521b\u9020\u662f\u5c40\u90e8\u7684\uff0c\u5355\u4e2a\u5c40\u90e8\u573a\u666f\u53ef\u4ee5\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u5982\u679c\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\uff0c\u4f8b\u5982\u57fa\u4e8e\u4e00\u5757\u56fa\u5b9a\u7c7b\u578b\u7684\u5730\u6216\u8005\u73af\u5883\uff0c\u7ec4\u6210\u81ea\u5df1\u7684\u5c0f\u4e16\u754c\uff0c\u5c31\u5bb9\u6613\u8ba9\u4e00\u4e9b\u5fd7\u540c\u9053\u5408\u7684\u4eba\u4e00\u8d77\u53bb\u6784\u5efa\u4e00\u4e2a\u4ed6\u4eec\u559c\u6b22\u7684\u4e16\u754c\uff0c\u53ef\u4ee5\u662f\u79d1\u5e7b\uff0c\u6b66\u4fa0\u7b49\u7b49\u98ce\u683c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9f13\u52b1\u5408\u4f5c\u4e0e\u534f\u4f5c\uff0c\u662f\u975e\u5e38\u597d\u7684\u534f\u4f5c\u4f8b\u5b50"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u7ed9\u5176\u4ed6\u4eba\u7684\u6e38\u89c8\u5e26\u6765\u66f4\u5927\u7684\u5438\u5f15\u529b\uff0c\u5b8f\u5927\u7684\uff0c\u5f62\u6210\u4f17\u591a\u5177\u6709\u66f4\u590d\u6742\u8868\u8fbe\u548c\u6587\u5316\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u6587\u5316\u7684\u611f\u89c9\u9700\u8981\u590d\u6742\u6027\u6765\u8868\u73b0\uff0c\u5c40\u90e8\u8f83\u5c0f\u7684\u573a\u666f\u5f80\u5f80\u65e0\u6cd5\u8868\u8fbe\u4e00\u79cd\u6587\u5316\uff0c\u751a\u81f3\u4e00\u4e2a\u6587\u660e"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u660e\u672c\u8eab\u81ea\u5e26\u6545\u4e8b\u4e86")),(0,n.kt)("p",null,"\u5927\u5730\u56fe\u5728PC Create\u4e0a\u521b\u5efa\uff0c\u6216\u8005\u63d0\u4f9b\u4e00\u4e9b\u6a21\u7248\uff0c\u50cfMinecraft Editor \u4e00\u6837"),(0,n.kt)("h3",{id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"},"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"),(0,n.kt)("p",null,"\u867d\u7136\u6c89\u6d78\u5f0f\u3001\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\u5177\u6709\u5f88\u597d\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u76f8\u5bf9\u4e8e\u5f71\u89c6\u6765\u8bf4\uff0c\u5176\u63a2\u7d22\u6210\u672c\u66f4\u9ad8\uff0c\u4f8b\u5982\u770b\u5b8c\u4e00\u90e8\u9b54\u6212\u9700\u8981\u4e09\u4e2a\u5c0f\u65f6\uff0c\u4f46\u662f\u63a2\u7d22\u4e00\u4e2a\u4e2d\u571f\u4e16\u754c\u53ef\u80fd\u603b\u5171\u4f1a\u82b1\u8d39\u5f88\u591a\u5929\u65f6\u95f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u6765\u8bb2\u53ef\u80fd\u662f\u4e0d\u53ef\u884c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u53ef\u80fd\u4ec5\u4ec5\u968f\u4fbf\u770b\u770b\uff0c\u65e0\u6cd5\u6df1\u5165\u4f53\u9a8c\u6545\u4e8b"),(0,n.kt)("li",{parentName:"ul"},"\u73a9\u5bb6\u5bf9\u865a\u62df\u4e16\u754c\u7684\u63a2\u7d22\u672c\u8d28\u4e0a\u6e90\u4e8e\u672a\u77e5\u7684\u4f53\u9a8c\uff0c\u8fd9\u79cd\u672a\u77e5\u5e76\u4e0d\u662f\u5355\u5355\u4e00\u4e2a\u4e00\u4e2a\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u800c\u662f\u6545\u4e8b\u6216\u8005\u73a9\u6cd5\uff0c\u56e0\u6b64\u9700\u8981\u82b1\u5927\u91cf\u7cbe\u529b\u8bbe\u8ba1\uff0c\u800c\u4e00\u65e6\u73a9\u5bb6\u63a2\u7d22\u73a9\u6240\u6709\u672a\u77e5\uff0c\u90a3\u4e48\u8fd9\u4e2a\u4e16\u754c\u4fbf\u4e0d\u518d\u65b0\u5947\uff0c\u9664\u975e\u5b83\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u4e0d\u65ad\u4f1a\u6709\u65b0\u5947\u6545\u4e8b\u53d1\u751f\uff0c\u90a3\u5fc5\u987b\u662f\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u7528\u6237\u80fd\u591f\u9ad8\u5ea6\u81ea\u5b9a\u4e49\u6216\u8005\u751a\u81f3\u81ea\u6211\u6f14\u8fdb")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5f00\u653e\u4e16\u754c\u67b6\u6784\u53ca\u5176\u91cd\u8981"),(0,n.kt)("h2",{id:"49-third-party-apps"},"4.9 Third party apps"),(0,n.kt)("h2",{id:"410--\u793e\u4f1a\u4ef7\u503c"},"4.10 \u793e\u4f1a\u4ef7\u503c"),(0,n.kt)("h3",{id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"},"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"),(0,n.kt)("p",null,"\u6309\u7167\u4fe1\u606f\u7684\u7ec4\u7ec7\u7279\u5f81\uff0c\u5176\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u975e\u5e38\u7b80\u5355\uff0c\u80fd\u591f\u7528\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u7b80\u5355\u63cf\u8ff0\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u4e00\u4e2a\u516c\u5f0f\uff0c\u4e00\u95f4\u4e8b\u60c5\u7684\u65b9\u6cd5\uff0c\u83dc\u8c31\uff0c\u4e00\u6761\u670b\u53cb\u5708\uff0c\u4e00\u6bb5\u89c6\u9891\u7b49\u3002\u8fd9\u79cd\u4fe1\u606f\u6240\u8868\u793a\u7684\u542b\u4e49\u901a\u5e38\u662f\u660e\u786e\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u63cf\u8ff0\u4eba\u4e0e\u4eba\u3001\u6216\u8005\u4eba\u4e0e\u4e8b\u60c5\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u901a\u5e38\u6bd4\u8f83\u62bd\u8c61\uff0c\u5b83\u4e0d\u80fd\u6709\u4e00\u4e2a\u5f88\u786e\u5b9a\u7684\u3001\u7b80\u5355\u7684\u65b9\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff0c\u6bd4\u5982\u4e00\u4e2a\u6545\u4e8b\uff0c\u4e00\u95f4\u827a\u672f\u54c1\uff0c\u5bf9\u4ed6\u7684\u4f20\u64ad\u6d89\u53ca\u4e00\u4e9b\u89e3\u91ca\uff0c\u751a\u81f3\u4e00\u4e9b\u76f8\u5173\u7684\u89c6\u89c9\u7b26\u53f7\uff0c\u6587\u5316\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u79cd\u662f\u673a\u5236\uff0c\u8fd9\u79cd\u673a\u5236\u5f80\u5f80\u662f\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u65e2\u4e0d\u80fd\u50cf\u7b2c\u4e00\u79cd\u4fe1\u606f\u90a3\u6837\u80fd\u591f\u7b80\u5355\u63cf\u8ff0\u548c\u4f20\u64ad\uff0c\u4e5f\u4e0d\u50cf\u7535\u5f71\u7b49\u827a\u672f\u54c1\u90a3\u6837\u53ef\u4ee5\u76f4\u63a5\u89e3\u8bfb\uff0c\u7531\u4e8e\u673a\u5236\u5185\u5b50\u7cfb\u7edf\u6784\u9020\u590d\u6742\u7684\u76f8\u4e92\u5173\u7cfb\uff0c\u56e0\u6b64\u5b83\u9700\u8981\u65b0\u7684\u5a92\u4ecb\u8fdb\u884c\u4f20\u64ad\u3002")),(0,n.kt)("p",null,"\u7535\u5f71\u66f4\u591a\u662f\u5bf9\u4eba\u4e0e\u4eba\u6216\u8005\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7684\u5173\u7cfb\u8fdb\u884c\u63cf\u8ff0\uff0c\u7406\u89e3\u548c\u8868\u8fbe\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u662f\u975e\u7ed3\u6784\u5316\u7684\uff0c\u5b83\u5f88\u96be\u4f7f\u7528\u4e00\u5b9a\u7684\u89c4\u5219\u3001\u6a21\u578b\u3001\u5b9a\u5f8b\u3001\u516c\u5f0f\u7b49\u7b49\u8fdb\u884c\u63cf\u8ff0\uff0c\u6240\u4ee5\u8fd9\u79cd\u975e\u5e38\u9002\u5408\u4e8e\u6587\u5b66\u3001\u7535\u5f71\u3001\u7f8e\u672f\u3001\u620f\u5267\u7b49\u7b49\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u4e0e\u56f4\u7ed5\u4eba\u7684\u5173\u7cfb\u60c5\u611f\u4e0d\u540c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u7406\u89e3\u793e\u4f1a\u8fd0\u4f5c\u7684\u673a\u5236\uff0c\u6bd4\u5982\u4ea4\u901a\uff0c\u65c5\u6e38\u8def\u7ebf\uff0c\u57ce\u5e02\u4e0d\u540c\u7684\u5206\u533a\uff0c\u5de5\u4f5c\u4e0e\u516c\u53f8\u7684\u5206\u7c7b\u7b49\u7b49\uff0c\u8fd9\u4e9b\u53cd\u5e94\u7684\u662f\u793e\u4f1a\u673a\u5236\uff0c\u4ed6\u4eec\u662f\u53ef\u4ee5\u91cf\u5316\u548c\u7ed3\u6784\u5316\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"civilization",src:l(4858).Z,width:"3840",height:"2160"})),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u4e00\u4e2a\u7279\u70b9\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u5f80\u5f80\u662f\u5bb9\u6613\u7528\u6bd4\u8f83\u7b80\u5355\u7684\u4fe1\u606f\u8fdb\u884c\u8868\u8fbe\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u7b80\u77ed\u7684\u4fe1\u606f\u662f\u9700\u8981\u975e\u51e1\u7684\u4eba\u5bf9\u5176\u8fdb\u884c\u9ad8\u5ea6\u7406\u89e3\u548c\u62bd\u8c61\u63d0\u70bc\uff0c\u6bd4\u5982\u4e00\u90e8\u7535\u5f71\u901a\u5e38\u5c31\u8db3\u4ee5\u8bb2\u8ff0\u4e00\u4e2a\u6df1\u523b\u7684\u9053\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u673a\u5236\u5374\u662f\u66f4\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u673a\u5236\u672c\u8eab\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u7531\u8bb8\u591a\u76f8\u4e92\u76f8\u5173\u7684\u5b50\u7cfb\u7edf\u6784\u6210\uff0c\u800c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u4e0d\u662f\u4eba\u6613\u4e8e\u7406\u89e3\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4eba\u5f88\u5bb9\u6613\u7406\u89e3\u4e00\u4e2a\u516c\u5f0f\uff0c\u4f46\u662f\u590d\u6742\u7cfb\u7edf\u65e0\u6cd5\u8868\u8ff0\u6210\u4e00\u4e2a\u5355\u4e00\u7684\u516c\u5f0f\uff0c\u5b83\u662f\u4e00\u4e2a\u591a\u7ef4\u7ebf\u6027\u51fd\u6570\uff0c\u5b83\u7684\u7406\u89e3\u8574\u85cf\u5728\u6240\u6709\u90a3\u4e9b\u5173\u7cfb\u5f53\u4e2d\uff0c\u4e0d\u540c\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u4f1a\u5bfc\u81f4\u5dee\u5f02\u5f88\u5927\u7684\u5173\u7cfb\uff0c\u6709\u591a\u79cd\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6240\u4ee5\u4ed6\u6bd4\u5982\u4e0d\u592a\u80fd\u591f\u7528\u4e00\u90e8\u7535\u5f71\u6765\u8868\u8ff0\uff0c\u6216\u8005\u8bf4\u7535\u5f71\u4e1a\u52a1\u80fd\u591f\u505a\u4e00\u4e9b\u79d1\u666e\uff0c\u4f46\u662f\u771f\u6b63\u7684\u7406\u89e3\u4f60\u5fc5\u987b\u53bb\u4f7f\u7528\u90a3\u4e2a\u7cfb\u7edf\uff0c\u8fd9\u79cd\u201c\u4f7f\u7528\u201d\u4ece\u6570\u5b57\u5316\u7684\u89d2\u5ea6\u6765\u8bb2\u5c31\u662f\u6a21\u62df\uff0c\u800c\u6e38\u620f\u5c31\u662f\u8fd9\u6837\u6a21\u62df\u7684\u6838\u5fc3\u65b9\u5f0f\u4e4b\u4e00")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5927\u90e8\u5206\u8fd9\u6837\u7684\u793e\u4f1a\u673a\u5236\u90fd\u53ef\u4ee5\u501f\u52a93D\u6765\u8fdb\u884c\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u751a\u81f3\u53c2\u4e0e\u5f71\u54cd"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u4eba\u5176\u5b9e\u662f\u6df1\u5ea6\u8ddf\u793e\u4f1a\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5f88\u591a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u4e5f\u6765\u6e90\u4e8e\u793e\u4f1a\u673a\u5236\u7684\u5f71\u54cd\uff0c\u6240\u4ee5\u793e\u4f1a\u673a\u5236\u672c\u8d28\u4e0a\u4e5f\u662f\u53e6\u4e00\u79cd\u5e2e\u52a9\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u79cd\u65b9\u5f0f"),(0,n.kt)("h3",{id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"},"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"),(0,n.kt)("p",null,"\u5982\u4e0a\u4e00\u8282\u7684\u4fe1\u606f\u5206\u7c7b\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u6a21\u578b\u53ea\u9002\u5408\u5904\u7406\u7ed3\u6784\u5316\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u662f\u786e\u5b9a\u7684\uff0c\u5176\u5e94\u7528\u7ed3\u6784\u901a\u5e38\u4e5f\u662f\u4e0d\u4f1a\u7684\uff0c\u4f8b\u5982\u5fae\u4fe1\u3001\u6dd8\u5b9d\u3001\u6296\u97f3\u3001\u652f\u4ed8\u5b9d\u3001\u5927\u4f17\u70b9\u8bc4\u7b49\u7b49\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e9b\u7a0b\u5e8f\u5f53\u4e2d\uff0c\u901a\u5e38\u662f\u7531\u7528\u6237\u53d1\u51fa\u4e00\u4e2a\u64cd\u4f5c\u6307\u793a\uff0c\u7136\u540e\u5e94\u7528\u7a0b\u5e8f\u6309\u7167\u56fa\u5b9a\u7684\u903b\u8f91\u6267\u884c\u67d0\u4e2a\u7ed3\u6784\u57fa\u672c\u4e0a\u4e0d\u53d8\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"complex-system.024",src:l(5130).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u5f53\u4e2d\u8fd8\u6709\u5927\u91cf\u7684\u7c7b\u4f3c\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\uff0c\u8fd9\u7c7b\u4fe1\u606f\u5bf9\u4eba\u4eec\u7406\u89e3\u8fd9\u4e2a\u4e16\u754c\u548c\u793e\u4f1a\u53ef\u80fd\u66f4\u52a0\u81f3\u5173\u91cd\u8981\uff0c\u5e76\u4e14\u8fd9\u7c7b\u4fe1\u606f\u901a\u5e38\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u8fdb\u884c\u8868\u8fbe\u3002\u6e38\u620f\u7a0b\u5e8f\u67b6\u6784\u662f\u975e\u5e38\u9002\u5408\u5904\u7406\u8fd9\u7c7b\u4fe1\u606f\u7684\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u76ee\u524d\u8fd8\u6ca1\u6709\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u4e0d\u7ba1\u662f\u5728\u5f00\u53d1\u5de5\u5177\u3001\u5f00\u53d1\u6d41\u7a0b\u8fd8\u662f\u5f00\u53d1\u6210\u672c\u4e0a\u5b83\u90fd\u5b58\u5728\u7740\u5f88\u591a\u95ee\u9898\uff0c\u8fd8\u4e0d\u5177\u5907\u8fd9\u6837\u7684\u6f5c\u80fd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u6709\u673a\u4f1a\u53bb\u91ca\u653e\u8fd9\u6837\u7684\u6f5c\u80fd\uff0c\u4f7f\u5f97\u6e38\u620f\u7c7b\u5b9e\u65f6\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u4f8b\u5982\u8ddf\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5dee\u4e0d\u591a\u3002\u4e5f\u8bb8\u5728\u8fd9\u6837\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7684\u7a0b\u5e8f\u67b6\u6784\u4e5f\u8bb8\u53ef\u4ee5\u6210\u4e3a\u6574\u4e2a\u6570\u5b57\u5316\u7684\u5e38\u6001\u3002\u8fd9\u6837\u6570\u5b57\u5316\u80fd\u591f\u5728\u4eba\u7c7b\u6587\u660e\u8fdb\u7a0b\u4e2d\u8fdb\u4e00\u6b65\u53d1\u751f\u66f4\u5927\u7684\u63a8\u52a8\u4f5c\u7528\uff0c\u56e0\u4e3a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u6709\u4e00\u79cd\u66f4\u9ad8\u6548\u3001\u66f4\u5177\u8868\u8fbe\u529b\u7684\u4fe1\u606f\u8868\u8fbe\u65b9\u5f0f\u3002"),(0,n.kt)("h3",{id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"},"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7531\u8bb8\u591a\u90e8\u5206\u7ec4\u6210\uff0c\u8fd9\u4e9b\u90e8\u5206\u5355\u4e2a\u770b\u4e00\u822c\u90fd\u5f88\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u628a\u5b83\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\u540e\u5f62\u6210\u7684\u590d\u6742\u7cfb\u7edf\u5927\u90fd\u80fd\u8868\u73b0\u51fa\u65e0\u6cd5\u9884\u6d4b\u7684\u60ca\u4eba\u7279\u6027\uff0c\u5f88\u96be\u901a\u8fc7\u5355\u72ec\u62c6\u5206\u5206\u6790\u6bcf\u4e2a\u7ec4\u6210\u90e8\u5206\u6765\u89e3\u91ca\u8fd9\u79cd\u73b0\u8c61\u3002\u53ef\u4ee5\u901a\u8fc7\u5f15\u5165\u6b63/\u8d1f\u53cd\u9988\u5faa\u73af\u6765\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u5176\u5b9e\u80fd\u591f\u7528\u6765\u8868\u8fbe\u662f\u771f\u5b9e\u751f\u6d3b\u4e2d\u5927\u91cf\u7684\u4fe1\u606f\uff0c\u4ed6\u5bf9\u4e8e\u6211\u4eec\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u3001\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7b49\u7b49\u7684\u5173\u7cfb\u81f3\u5173\u91cd\u8981\u3002\u901a\u5e38\u8fd9\u4e9b\u77e5\u8bc6\u8981\u6bd4\u6211\u4eec\u4e00\u822c\u80fd\u591f\u4ece\u4e66\u4e2d\u770b\u5230\u7684\u4fe1\u606f\u8981\u591a\u5f97\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pasted-image",src:l(533).Z,width:"642",height:"449"})),(0,n.kt)("p",null,"\u4f8b\u5982\u5173\u4e8e\u7ba1\u7406\uff0c\u5176\u5b9e\u5b83\u4e5f\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u6709\u5f88\u591a\u5f71\u54cd\u56e0\u7d20\uff0c\u5982\u679c\u6211\u4eec\u628a\u8fd9\u4e9b\u56e0\u7d20\u7528\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u6765\u8868\u8fbe\uff0c\u8fd9\u6837\u5b66\u4e60\u8005\u53ef\u4ee5\u901a\u8fc7\u4ea4\u4e92\u7684\u65b9\u5f0f\uff0c\u5bf9\u67d0\u4e9b\u5b50\u7cfb\u7edf\u65bd\u52a0\u5f71\u54cd\uff0c\u6765\u5b9e\u65f6\u770b\u5230\u5b83\u4eec\u5bf9\u6574\u4e2a\u7ba1\u7406\u4f53\u7cfb\u5f71\u54cd\u7684\u6548\u679c\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u6211\u4eec\u4e0d\u4ec5\u53ef\u4ee5\u7528\u6765\u5b66\u4e60\u8fd9\u6837\u7684\u4e00\u4e9b\u7cfb\u7edf\u673a\u5236\uff0c\u4e5f\u53ef\u4ee5\u7528\u6765\u5bf9\u4e00\u4e9b\u673a\u5236\u5176\u8fdb\u884c\u6a21\u62df\u548c\u9884\u6d4b\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u80fd\u529b\u662f\u5f88\u96be\u901a\u8fc7\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u6765\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u8fd9\u6837\u7684\u7cfb\u7edf\u5c06\u7ed9\u4eba\u7c7b\u7684\u6587\u660e\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u63a8\u8fdb\u3002"),(0,n.kt)("h2",{id:"411-\u6807\u51c6"},"4.11 \u6807\u51c6"),(0,n.kt)("p",null,"\u57fa\u4e8e\u5168\u5c40\u548c\u516c\u5171\u7b26\u53f7\u8868\u6784\u5efa\u6c9f\u901a\u65b9\u5f0f\u548c\u6807\u51c6\u3002"),(0,n.kt)("h3",{id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"},"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"Epic CEO\u5728\u5176\u6f14\u8bb2\u300aFundamental Principles and Technologis for the Metaverse\u300b\u4e2d\u6307\u51fa\uff0c\u4e3a\u4e86\u5b9e\u73b0\u4e00\u4e2aOpen Metaverse\uff0c\u50cf\u6211\u4eec\u4eca\u5929\u7684\u5404\u79cd\u4e92\u64cd\u4f5c\u7cfb\u7edf\u5982Web\u7b49\u4e00\u6837\uff0c\u9700\u8981\u5b9a\u4e49\u975e\u5e38\u591a\u7684\u6807\u51c6\u7528\u6765\u5b9e\u73b0Metaverse\u5185\u90e8\u5404\u4e2a\u5b9e\u4f53\u3001\u5bf9\u8c61\u7b49\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4f8b\u5982\u5173\u4e8e\u7528\u6237\u7684\u8eab\u4efd\u3001\u8d44\u4ea7\u6240\u6709\u6743\u3001\u793e\u4ea4\u56fe\u8c31\u7b49\u7b49\u3002\u4ed6\u8fdb\u4e00\u6b65\u6307\u51fa\u53ef\u4ee5\u53c2\u89c1\u73b0\u5728\u7684\u4e00\u4e9b\u6807\u51c6\u5982Html+JavaScript\u7b49\u8fdb\u884c\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u4f46\u6211\u4eec\u518d\u6df1\u5165\u53bb\u601d\u8003\u8fd9\u79cd\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u4f1a\u53d1\u73b0\u4e5f\u8bb8\u6211\u4eec\u5e76\u4e0d\u80fd\u4f7f\u7528\u540c\u6837\u7684\u65b9\u5f0f\u53bb\u8bbe\u8ba1Metaverse\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u5176\u4e2d\u4e24\u4e2a\u6700\u91cd\u8981\u7684\u539f\u56e0\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b9e\u65f6\u6027"),"\uff1a\u73b0\u5728\u7684\u6807\u51c6\u6307\u5b9a\u90fd\u662f\u901a\u8fc7\u6587\u672c\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u5404\u4e2a\u5b50\u7cfb\u7edf\u5bf9\u6587\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u8fd9\u79cd\u5927\u91cf\u5b9e\u65f6\u7684\u6587\u672c\u89e3\u6790\u548c\u5b57\u7b26\u4e32\u5904\u7406\u5728\u6e38\u620f\u7a0b\u5e8f\u4e2d\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e92\u64cd\u4f5c\u6027"),"\uff1a\u5373\u4f7f\u53ef\u4ee5\u89e3\u51b3\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u672c\u8d28\u4e0a\u53ea\u662f\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u6211\u4eec\u5c06\u522b\u4eba\u7684\u4ee3\u7801\u653e\u5728\u6211\u4eec\u7684\u73af\u5883\u4e2d\u521d\u59cb\u5316\u548c\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u6b64\u53ef\u4ee5\u83b7\u5f97\u76f4\u63a5\u7684\u53d8\u91cf\u5730\u5740\uff0c\u4f46\u662f\u62ff\u5230\u5730\u5740\u4e4b\u540e\u8981\u8fdb\u884c\u6b63\u786e\u7684\u901a\u4fe1\u8fd8\u662f\u9700\u8981\u4e86\u89e3\u5173\u4e8e\u51fd\u6570\u7684\u5b9a\u4e49\u7b49\u7b49\uff0c\u5426\u5219\u6211\u4eec\u53ea\u80fd\u7ea6\u5b9a\u4e00\u4e9b\u56fa\u5b9a\u7684\u8c03\u7528\u884c\u4e3a\u3002")),(0,n.kt)("p",null,"\u4ee5\u4e0a\u8fd9\u5957\u673a\u5236\u5047\u8bf4\u80fd\u591f\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u5b83\u4e5f\u53ea\u662f\u9488\u5bf9\u53cc\u65b9\u7ea6\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u5c31\u9650\u5236\u4e86\u81ea\u7531\u5ea6\u3002\u4f20\u7edf\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u5b83\u4eec\u4e4b\u95f4\u7684\u901a\u4fe1\u975e\u5e38\u7b80\u5355\uff0c\u57fa\u672c\u4e0a\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u56fa\u5b9a\u7684\u89c4\u5219\u8fdb\u884c\u63cf\u8ff0\uff0c\u4e14\u6807\u51c6\u4e4b\u95f4\u53d8\u66f4\u7684\u9891\u7387\u975e\u5e38\u4f4e\u3002"),(0,n.kt)("p",null,"\u800cMetaverse\u662f\u4e00\u4e2a\u66f4\u52a0\u6d3b\u8dc3\u7684\u5927\u4e16\u754c\uff0c\u5b83\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u8fd0\u4f5c\uff0c\u56e0\u6b64\u5b83\u672c\u8d28\u4e0a\u4e0d\u80fd\u4f7f\u7528\u8fd9\u79cd\u9650\u5236\u6bd4\u8f83\u5927\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u6211\u4eec\u751f\u6d3b\u4e2d\u8ddf\u5176\u4ed6\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u975e\u5e38\u81ea\u7136\u7684\uff0c\u6211\u4eec\u6709\u5f88\u5927\u7684\u81ea\u7531\u5ea6\uff0c\u6ca1\u6709\u88ab\u4e25\u683c\u9650\u5236\u6bcf\u4ef6\u4e8b\u60c5\u4e00\u5b9a\u8981\u6309\u600e\u6837\u7684\u65b9\u5f0f\u505a\uff0c\u5f53\u7136\u5b83\u4e5f\u5b58\u5728\u4e00\u90e8\u5206\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u4f8b\u5982\u6211\u4eec\u8981\u9075\u5faa\u4ea4\u901a\u89c4\u5219\uff0c\u6cd5\u5f8b\u89c4\u5219\u7b49\u7b49\u3002"),(0,n.kt)("h3",{id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"},"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5982\u679cMetaverse\u662f\u8981\u5c3d\u53ef\u80fd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\uff0c\u6216\u8005\u8bf4\u5b83\u7684\u6574\u4e2a\u7cfb\u7edf\u66f4\u7b26\u5408\u4eba\u7c7b\u7684\u8ba4\u77e5\uff0c\u5b83\u7684\u6807\u51c6\u5fc5\u987b\u652f\u6301\u4e24\u79cd\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u8981\u80fd\u591f\u50cf\u4f20\u7edf\u7684\u6807\u51c6\u90a3\u6837\u5236\u5b9a\u56fa\u5b9a\u3001\u9700\u8981\u516c\u4f17\u5171\u540c\u9075\u5b88\u3001\u4e0d\u592a\u5bb9\u6613\u53d8\u5316\u7684\u6807\u51c6\uff0c\u5982\u4ea4\u901a\u89c4\u5219"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u8981\u80fd\u591f\u652f\u6301\u5c40\u90e8\u7fa4\u4f53\u4e4b\u95f4\u5b9a\u4e49\u81ea\u5df1\u7684\u5c0f\u6807\u51c6\uff0c\u5e76\u4e14\u5bf9\u4e8e\u8fd9\u4e9b\u5c0f\u6807\u51c6\uff0c\u7fa4\u4f53\u4e4b\u5916\u7684\u53c2\u4e0e\u8005\u53ea\u8981\u613f\u610f\u9075\u5faa\u8be5\u5c0f\u6807\u51c6\u5bf9\u5e94\u7684\u534f\u5b9a\uff0cTA\u4eec\u5c31\u53ef\u4ee5\u5f88\u8f7b\u677e\u5730\u53c2\u4e0e\u5230\u8fd9\u4e2a\u5c0f\u7fa4\u4f53\u4e2d\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u673a\u5236\u5f88\u50cf\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u8ba9\u4eba\u4eec\u5373\u6709\u5f88\u5927\u7684\u7075\u6d3b\u5ea6\u548c\u81ea\u7531\uff0c\u540c\u65f6\u4e5f\u53d7\u4e00\u5b9a\u7684\u793e\u4f1a\u7ea6\u675f\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u7b26\u53f7\u8868\u5c31\u63d0\u4f9b\u4e86\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u672c\u8eab\u63d0\u4f9b\u4e86\u4e00\u79cd\u5b9a\u4e49\u6807\u51c6\u7684\u673a\u5236\uff1a\u53ea\u8981\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u5305\u542b\uff08\u7c7b\u6bd4\u4e8e\u9075\u5faa\uff09\u8fd9\u6837\u7684\u7b26\u53f7\u6570\u636e\u5b9a\u4e49\uff0c\u5b83\u4eec\u81ea\u7136\u5c31\u9075\u5faa\u4e86\u76f8\u540c\u7684\u6807\u51c6\u3002\u6240\u4ee5\uff0c\u5bf9\u4e8e\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u5bf9\u5e94\u4e00\u4e9b\u516c\u5171\u6807\u51c6\uff0c\u800c\u5bf9\u4e8e\u4e00\u4e9b\u5c40\u90e8\u7684\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u53ef\u4ee5\u521b\u5efa\u81ea\u5df1\u7684\u5c40\u90e8\u7b26\u53f7\u8868\uff0c\u4ece\u800c\u6784\u5efa\u5c40\u90e8\u5c0f\u6807\u51c6\uff0c\u8fd9\u6837\u7406\u8bba\u4e0a\u6765\u8bf4\u5c31\u662f\u4e00\u79cd\u5b8c\u5168\u7684\u81ea\u7531\u5ea6\uff0c\u6bd4\u5982\u4f60\u751a\u81f3\u53ef\u4ee5\u5b9a\u4e49\u522b\u4eba\u5b8c\u5168\u4e0d\u77e5\u9053\u7684\u6807\u51c6\uff0c\u8fd9\u79cd\u81ea\u7531\u5ea6\u662f\u5b58\u5728\u7684\uff0c\u53ea\u662f\u90a3\u6837\u4f60\u6ca1\u6709\u529e\u6cd5\u8ddf\u522b\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4f60\u9700\u8981\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u8fd9\u79cd\u63a8\u5e7f\u4e5f\u4e0d\u662f\u628a\u4f60\u7684\u4e1c\u897f\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u5e02\u573a\u6216\u8005\u53bb\u505a\u5e7f\u544a\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7528\u6237\u5c42\u9762"),"\uff1a\u4f60\u53ea\u9700\u8981\u5c06\u4f60\u7684\u4f5c\u54c1\u653e\u7f6e\u5230\u8fd9\u4e2a\u4e16\u754c\u4e2d\uff0c\u5f53\u6709\u5176\u4ed6\u4eba\u4f53\u9a8c\u5230\u5b83\u65f6\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c31\u590d\u5236\u4f60\u7684\u7ec4\u4ef6\u3002\u867d\u7136\u8fd9\u79cd\u65b9\u5f0f\u5e76\u6ca1\u6709\u5f15\u5165\u65b0\u7684\u5f00\u53d1\u8005\u6765\u9075\u5faa\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u5b83\u5f15\u5165\u548c\u589e\u52a0\u4e86\u4f7f\u7528\u5b83\u7684\u7528\u6237\u3002\u5b9e\u9645\u4e0a\u6211\u4eec\u5efa\u7acb\u7684\u6807\u51c6\uff0c\u5f53\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u652f\u6301\u4e4b\u540e\uff0c\u6211\u4eec\u6700\u7ec8\u7684\u76ee\u7684\u8fd8\u662f\u5e0c\u671b\u901a\u8fc7\u66f4\u591a\u7684\u652f\u6301\u7a0b\u5e8f\u6765\u83b7\u5f97\u4f7f\u7528\u7684\u7528\u6237\uff0c\u4ece\u8fd9\u4e2a\u5c42\u9762\u6765\u8bb2\uff0c\u5b83\u7684\u7ed3\u679c\u662f\u4e00\u6837\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005\u5c42\u9762"),"\uff1a\u6bcf\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6807\u51c6\u90fd\u53ef\u4ee5\u53d1\u5e03\u5230\u4e00\u4e2a\u5171\u4eab\u6807\u51c6\u5e93\uff0c\u5176\u5b9e\u5c31\u662f\u5171\u4eab\u7b26\u53f7\u8868\u3002\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u641c\u7d22\u5171\u4eab\u5e93\uff0c\u5e76\u901a\u8fc7\u5bf9\u5176\u5f15\u7528\u4ee5\u652f\u6301\u8fd9\u4e2a\u6807\u51c6\u3002\u8fd9\u6837\uff0c\u5b9a\u4e49\u7684\u6bd4\u8f83\u597d\u7684\u6807\u51c6\u5c31\u5bb9\u6613\u88ab\u66f4\u591a\u7684\u5f00\u53d1\u8005\u5f15\u7528\u548c\u652f\u6301\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002")),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f62\u6210\u7684\u6807\u51c6\u7cfb\u7edf\u662f\u4e00\u5957\u81ea\u6211\u81ea\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784\uff0c\u5728\u8fd9\u6837\u7684\u67b6\u6784\u4e0b\uff0c\u4efb\u4f55\u6807\u51c6\u4e0d\u4ec5\u80fd\u591f\u88ab\u5176\u4ed6\u72ec\u7acb\u5f00\u53d1\u8005\u4efb\u610f\u652f\u6301\uff0c\u4ee5\u5f62\u6210\u6807\u51c6\u7684\u63a8\u5e7f\uff1b\u5e76\u4e14\u901a\u8fc7\u53ca\u65f6\u8d2d\u4e70\u7b49\u65b9\u5f0f\uff0c\u6807\u51c6\u80fd\u591f\u88ab\u66f4\u76f4\u63a5\u7684\u901a\u8fc7\u7528\u6237\u8fdb\u884c\u666e\u53ca\uff0c\u4ece\u800c\u80fd\u591f\u63a8\u52a8\u90a3\u4e9b\u66f4\u597d\u7684\u6807\u51c6\u88ab\u66f4\u591a\u7684\u4eba\u7fa4\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u79cd\u673a\u5236\uff0c\u6700\u7ec8\u6574\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u4f7f\u6807\u51c6\u5b9e\u73b0\u81ea\u6211\u8fdb\u5316\uff0c\u5e76\u4e14\u5e26\u52a8\u7740\u6574\u4e2a\u4e16\u754c\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u3002"),(0,n.kt)("h3",{id:"4113-\u6807\u51c6\u7ba1\u7406"},"4.11.3 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u5373\u662f\u6574\u4f53\u7cfb\u7edf\u8fdb\u884c\u81ea\u8fdb\u5316\u7684\u673a\u5236\uff0c\u4e5f\u662f\u5b9e\u73b0\u7528\u6237\u5b9e\u4f53\u529f\u80fd\u7684\u673a\u5236\u3002\u5b83\u7684\u6574\u4e2a\u7ba1\u7406\u548c\u66f4\u65b0\u5fc5\u987b\u975e\u5e38\u9ad8\u6548\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u501f\u9274\u4e86\u73b0\u4ee3\u5e94\u7528\u7a0b\u5e8f\u5e02\u573a\u7684\u63a8\u9001\u3001\u6e90\u4ee3\u7801\u5305\u7ba1\u7406\u3001Github\u591a\u7248\u672c\u7ba1\u7406\u7b49\u601d\u60f3\u3002\u4f46\u5b83\u540c\u65f6\u4e5f\u5305\u542b\u4e00\u4e9bRealityIS\u72ec\u7279\u7684\u673a\u5236\u3002\u5b83\u5b9e\u73b0\u7684\u529f\u80fd\u4e0d\u4ec5\u5305\u62ec\u5f00\u53d1\u8005\u5411\u7528\u6237\u7684\u63a8\u9001\uff0c\u4e5f\u5305\u62ec\u7528\u6237\u5411\u5f00\u53d1\u8005\u751a\u81f3\u6807\u51c6\u4f5c\u8005\u7684\u53cd\u5411\u5efa\u8bae\uff0c\u4ee5\u53ca\u6807\u51c6\u4f5c\u8005\u5efa\u8bae\u5f00\u53d1\u8005\u9488\u5bf9\u65b0\u7684\u7b26\u53f7\u8fdb\u884c\u5f00\u53d1\u7684\u5efa\u8bae\uff0c\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u66f4\u6539\uff1a\u5411\u7ec4\u4ef6\u5f00\u53d1\u8005\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u66f4\u6539\uff1a\u5411\u7528\u6237\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u6807\u51c6\u5efa\u8bae\uff1a\u6807\u51c6\u4f5c\u8005\u589e\u52a0\u65b0\u7684\u529f\u80fd\uff0c\u5efa\u8bae\u7ec4\u4ef6\u5f00\u53d1\u8005\u652f\u6301"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u589e\u5f3a\uff1a\u7528\u6237\u5bf9\u7ec4\u4ef6\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5efa\u8bae\uff1a\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5bf9\u6807\u51c6\u4f5c\u8005\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u7279\u6027\u5efa\u8bae\uff1a\u7528\u6237\u53ef\u4ee5\u9488\u5bf9\u6807\u51c6\u4f5c\u8005\u6216\u8005\u5f00\u53d1\u8005\u63d0\u51fa\u65b0\u7684\u76f8\u53cd\u7684\u7ec4\u4ef6\u5f00\u53d1\u5efa\u8bae")),(0,n.kt)("p",null,"\u6574\u4e2aRealityIS\u7684\u81ea\u6211\u8fdb\u5316\u529f\u80fd\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u7684\u4e00\u4e9b\u5217\u673a\u5236\u6765\u5b9e\u73b0\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u540c\u65f6\u6807\u51c6\u7ba1\u7406\u7684\u53e6\u5916\u4e00\u4e2a\u5927\u7684\u76ee\u6807\u662f\u4f7f\u7528\u6237\u7684\u7ec4\u4ef6\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0"),"\uff0c\u51cf\u5c11\u7ef4\u62a4\u65e7\u7ec4\u4ef6\u5e26\u6765\u7684\u590d\u6742\u517c\u5bb9\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u7ba1\u7406\u6709\u4e24\u6761\u7ebf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0a\u800c\u4e0b\u7684\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0b\u800c\u4e0a\u7684\u53cd\u9988\u5efa\u8bae")),(0,n.kt)("h4",{id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5"},"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u6807\u51c6\u672c\u8eab\u6709\u66f4\u6539\uff0c\u4f1a\u901a\u77e5\u5230\u6240\u6709\u652f\u6301\u8be5\u6807\u51c6\u7684\u5f00\u53d1\u8005\uff0c\u63d0\u9192\u4ed6\u4eec\u5347\u7ea7\u7248\u672c\u3002\u5f00\u53d1\u8005\u5728\u6536\u5230\u901a\u77e5\u4e4b\u540e\uff0c\u53ef\u4ee5\u53d1\u5e03\u652f\u6301\u65b0\u6807\u51c6\u7684\u65b0\u7248\u672c\u7ec4\u4ef6\u3002\u5f53\u7136\u7ec4\u4ef6\u5f00\u53d1\u8005\u9700\u8981\u5b9e\u73b0\u517c\u5bb9\u6027\u3002\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u91cd\u547d\u540d"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7")),(0,n.kt)("p",null,"\u6807\u51c6\u66f4\u65b0\u673a\u5236\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\uff0c\u800c\u4e0d\u4f1a\u7531\u4e8e\u4fe1\u606f\u7684\u6ede\u540e\u751a\u81f3\u4e0d\u77e5\u9053\u6807\u51c6\u7684\u6539\u8fdb\u800c\u5bfc\u81f4\u4e00\u4e2a\u6807\u51c6\u8fdf\u8fdf\u65e0\u6cd5\u5feb\u901f\u8fdb\u5316\u3002\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u65b9\u6cd5\uff0c\u6709\u4e24\u9879\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\uff0c\u6807\u51c6\u7684\u4fee\u6539\u53ef\u4ee5\u76f4\u63a5\u901a\u77e5\u5230\u6240\u6709\u5173\u6ce8\u8005\uff1b\u4e2d\u95f4\u6ca1\u6709\u4efb\u4f55\u65f6\u5ef6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u9700\u8981\u5f00\u53d1\u8005\u4e3b\u52a8\u53bb\u5173\u6ce8\u67d0\u4e2a\u6807\u51c6\uff0c\u4ee5\u5f00\u53d1\u8005\u4e3a\u4e2d\u5fc3\u53bb\u63a8\u52a8\u4e00\u9879\u6807\u51c6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u662f\u4e00\u4e2a\u5927\u5bb6\u5171\u540c\u6765\u5236\u5b9a\u6807\u51c6\u7684\u8fc7\u7a0b\uff0c\u8fd9\u79cd\u6548\u7387\u6781\u4f4e\uff0c\u800cRealityIS\u53cd\u8fc7\u6765\uff0c\u5148\u5b9a\u4e49\u6807\u51c6\u3002\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\u4e00\u4e2a\u539f\u56e0\u662fRealityIS\u7b80\u5316\u4e86\u6807\u51c6\u7684\u5b9a\u4e49\uff1a\u5b83\u4ec5\u5173\u6ce8\u4e00\u4e2a\u903b\u8f91\u7ed3\u6784\u4e2d\u9700\u8981\u76f8\u4e92\u901a\u4fe1\u7684\u53c2\u6570\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u76f4\u63a5\u544a\u77e5\u9700\u8981\u4fee\u6539\u7684\u5730\u65b9\uff0c\u7531\u4e8e\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8ddf\u7ec4\u4ef6\u7684\u53d8\u91cf\u5f15\u7528\u5173\u8054\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8ba1\u7b97\u51fa\u54ea\u4e9b\u7ec4\u4ef6\u9700\u8981\u4fee\u6539\uff0c\u4ec0\u4e48\u53d8\u91cf\u9700\u8981\u4fee\u6539\u3002\u800c\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u662f\u901a\u8fc7\u6587\u672c\u7684\u65b9\u5f0f\uff0c\u5982\u90ae\u4ef6\uff0c\u544a\u77e5\u4fee\u6539\u7684\u5185\u5bb9\uff0c\u7136\u540e\u5f00\u53d1\u8005\u518d\u5bf9\u7167\u4fee\u6539\u3002\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u80fd\u591f\u5feb\u901f\u8fdb\u884c\u4fee\u6539\u3002")),(0,n.kt)("h4",{id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"},"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u66f4\u65b0\u4e86\u7ec4\u4ef6\uff0c\u4e5f\u4f1a\u81ea\u52a8\u901a\u77e5\u5230\u6240\u6709\u4f7f\u7528\u8be5\u7ec4\u4ef6\u7684\u7528\u6237\u3002\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e00\u952e\u5347\u7ea7\uff0c\u6216\u8005\u7528\u6237\u53ef\u4ee5\u5f00\u542f\u81ea\u52a8\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u7531\u4e8e\u7ec4\u4ef6\u90fd\u662f\u7ed3\u6784\u5316\u7684\u3001\u6570\u636e\u9a71\u52a8\u7684\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u5199\u6b7b\u5728\u4ee3\u7801\u4e2d\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8f83\u4e3a\u5bb9\u6613\u5730\u5c06\u6240\u4ee5\u8fd9\u4e9b\u7ec4\u4ef6\u4fe1\u606f\u62bd\u53d6\u51fa\u6765\u5f62\u6210\u5217\u8868\u3002\u7528\u6237\u7684\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u4f4e\u7f57\u5217\u51fa\u6765\uff0c\u6240\u4ee5\u5c31\u66f4\u65b9\u4fbf\u7528\u6237\u5bf9\u8fd9\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u5f88\u65b9\u4fbf\u5730\u5bf9\u5b9e\u4f53\u5bf9\u8c61\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h4",{id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236"},"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236"),(0,n.kt)("p",null,"\u6709\u4ee5\u4e0b\u591a\u79cd\u53cd\u9988\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u5f00\u53d1\u8005\uff09\u53cd\u9988\u7ec4\u4ef6\u529f\u80fd\uff1a\u7528\u6237\u57fa\u4e8e\u7ec4\u4ef6\u7684\u529f\u80fd\u7406\u89e3\u548c\u9700\u6c42\uff0c\u7528\u6237\u53ef\u4ee5\u7ed9\u7ec4\u4ef6\u5f00\u53d1\u8005\u63d0\u4f9b\u53cd\u9988\u610f\u89c1\uff0c\u4ee5\u5b8c\u5584\u6216\u589e\u5f3a\u67d0\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u4f5c\u8005\uff09\u53cd\u9988\u6807\u51c6\u7ed3\u6784\uff1a\u53ef\u4ee5\u5411\u6807\u51c6\u7ec4\u7ec7\u63d0\u51fa\u5efa\u8bae\uff0c\u4f8b\u5982\u4fee\u6539\u3001\u5220\u9664\u6216\u8005\u91cd\u547d\u540d\u7b26\u53f7\u3002\u8fd9\u91cc\u7684\u53cd\u9988\u4e2d\u53ef\u4ee5\u662f\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u793e\u533a\uff09\u5f81\u8be2\u65b0\u529f\u80fd\u5f00\u53d1\uff1a\u53ef\u4ee5\u5728\u6807\u51c6\u793e\u533a\u53d1\u5e03\u65b0\u7684\u529f\u80fd\u9700\u6c42\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u6309\u7167\u76f8\u5173\u9700\u6c42\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1\u3002 ")),(0,n.kt)("h4",{id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236"},"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u5bf9\u65e7\u7ec4\u4ef6\u7684\u517c\u5bb9\u6027\u7ef4\u62a4\u6210\u672c\uff0c\u6240\u6709\u7ec4\u4ef6\u6700\u597d\u90fd\u662f\u4fdd\u6301\u6700\u65b0\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u5176\u4e2d\u4e00\u6761\u53ef\u9009\u7684\u505a\u6cd5\u5c31\u662f\u7528\u4e8e\u53ea\u4fdd\u5b58\u6700\u65b0\u7684\u6807\u51c6\uff0c\u8fd9\u6837\u65e7\u7684\u7ec4\u4ef6\u5c31\u5fc5\u987b\u5347\u7ea7\u3002\u4f46\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6709\u65f6\u5019\u5728\u7ec4\u4ef6\u6ca1\u6709\u66f4\u65b0\u4e4b\u524d\u65e0\u6cd5\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u5c31\u662f\u6807\u51c6\u4f5c\u8005\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e9b\u65e7\u6807\u51c6\u5b58\u7eed\u7684\u65f6\u95f4\uff0c\u7ed9\u5f00\u53d1\u8005\u548c\u7528\u6237\u4e00\u6bb5\u65f6\u95f4\u8fdb\u884c\u66f4\u65b0\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u7cfb\u7edf\u9ed8\u8ba4\u5c31\u662f\u4e24\u4e2a\u7248\u672c\uff0c\u5176\u4e2d\u6bcf\u4e00\u4e2a \u65b0\u7248\u672c\u53d1\u5e03\u4e4b\u540e\uff0c\u65e7\u7248\u672c\u6700\u591a\u5b58\u7eed\u56fa\u5b9a\u7684\u65f6\u95f4\uff0c\u5982\u4e09\u4e2a\u6708\uff0c\u4e09\u4e2a\u6708\u4e4b\u540e\u81ea\u52a8\u5220\u9664\u3002\u8fd9\u79cd\u65b9\u5f0f\u770b\u8d77\u6765\u662f\u4e24\u8005\u7684\u4e00\u4e2a\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"4114-\u8de8\u8d8a\u6807\u51c6"},"4.11.4 \u8de8\u8d8a\u6807\u51c6"),(0,n.kt)("p",null,"\u4ece\u903b\u8f91\u4e0a\u8bb2\uff0c\u7ec4\u4ef6\u5173\u6ce8\u7684\u53ea\u6709\u7b26\u53f7\uff0c\u800c\u4e0d\u662f\u6807\u51c6\uff0c\u6807\u51c6\u53ea\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u5728\u5f00\u53d1\u7ec4\u4ef6\u7684\u601d\u8003\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u53c2\u8003\uff0c\u4ed6\u5bf9\u6807\u51c6\u672c\u8eab\u6ca1\u6709\u76f4\u63a5\u7684\u6240\u5c5e\u6216\u8005\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u53ef\u4ee5\u8de8\u57df\u6807\u51c6\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u6bcf\u4e2a\u6807\u51c6\u7406\u89e3\u4e3a\u4e00\u4e2a\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u8fd9\u79cd\u8de8\u8d8a\u6807\u51c6\u7684\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4ece\u800c\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u8054\u7cfb\u6216\u8005\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u6574\u4e2a\u5929\u6c14\u7cfb\u7edf\u5305\u62ec\u4e91\u5c42\u5b50\u7cfb\u7edf\uff0c\u6d77\u6d0b\u5b50\u7cfb\u7edf\uff0c\u5929\u7a7a\u5b50\u7cfb\u7edf\uff0c\u9646\u5730\u5b50\u7cfb\u7edf\u7b49\u7b49\uff0c\u7136\u540e\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u662f\u5b58\u5728\u4e00\u5b9a\u6bd4\u8f83\u7b80\u5355\u7684\u5173\u7cfb\uff0c\u4ece\u800c\u5f62\u6210\u6574\u4e2a\u5929\u6c14\u590d\u6742\u7cfb\u7edf\u7684\u3002"),(0,n.kt)("h4",{id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"},"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5982\u679c\u628a\u6bcf\u4e2a\u6807\u51c6\u770b\u505a\u4e00\u4e2a\u66f4\u5927\u590d\u6742\u7cfb\u7edf\u7684\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u4e2d\u5fc5\u7136\u6709\u90e8\u5206\u5c5e\u6027\u662f\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u7684\u5c5e\u6027\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u6807\u51c6\u901a\u5e38\u4f1a\u5305\u542b\u5c11\u90e8\u5206\u4e0e\u76f8\u5173\u6807\u51c6\u6709\u5173\u7684\u7b26\u53f7\uff0c\u5bf9\u4e8e\u8fd9\u4e9b\u7b26\u53f7\uff0c\u5b83\u4eec\u7684\u5c5e\u6027\u503c\u901a\u5e38\u7531\u5185\u90e8\u7684\u673a\u5236\u8ba1\u7b97\uff0c\u7136\u540e\u8fd9\u4e9b\u503c\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u76f8\u5173\u6807\u51c6\u4e2d\u4e0e\u4e4b\u76f8\u5173\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u54ea\u4e9b\u662f\u76f8\u5173\u5c5e\u6027\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u53bb\u7ea6\u675f\u5b83\u3002\u8fd9\u53ea\u662f\u5f00\u53d1\u8005\u8111\u4e2d\u77e5\u9053\u7684\u4e00\u4e2a\u6982\u5ff5\u3002\u4ece\u7406\u8bba\u4e0a\u6765\u8bf4\uff0c\u6807\u51c6\u7684\u4efb\u4f55\u5c5e\u6027\u4e5f\u8bb8\u90fd\u53ef\u80fd\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u6709\u67d0\u79cd\u5173\u7cfb\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u9700\u8981\u9650\u5236\u4ed6\uff0c\u8fd9\u53ea\u662f\u5bf9\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u6307\u5bfc\u3002"),(0,n.kt)("h2",{id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse"},"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"4121-\u6807\u51c6\u7684\u4ef7\u503c"},"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u662f\u5b9e\u73b0\u591a\u7a0b\u5e8f/\u591a\u5e94\u7528\u4e4b\u95f4\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6807\u51c6\u5219\u6784\u5efa\u4e8e\u7b26\u53f7\u8868\u4e4b\u4e0a\uff0c\u5b83\u662f\u4e00\u7ec4\u8bed\u4e49\u4e0a\u76f8\u5173\u7684\u7b26\u5408\u96c6\u5408\u7684\u6982\u5ff5\u3002\u7b26\u53f7\u603b\u662f\u5b58\u5728\u4e8e\u4e00\u4e2a\u6807\u51c6\u4e4b\u4e2d\uff0c\u5373\u7b26\u53f7\u6309\u6807\u51c6\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u7ec7\u3002"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u5355\u4e2a\u7b26\u53f7\uff0c\u6807\u51c6\u662f\u5bf9\u73b0\u5b9e\u4e16\u754c\u67d0\u4e9b\u5173\u7cfb\u6216\u903b\u8f91\u7684\u62bd\u8c61\u3002\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u662f\u56f4\u7ed5\u67d0\u4e00\u7c7b\u5173\u7cfb\u6216\u8005\u67d0\u4e00\u7c7b\u4e8b\u7269\u7684\u6838\u5fc3\u7684\u6570\u636e\u5c5e\u6027\uff0c\u5176\u4e2d\u901a\u8fc7\u8fd9\u4e9b\u6570\u636e\u8981\u80fd\u591f\u63cf\u8ff0\u8be5\u7c7b\u5173\u7cfb\u6216\u6570\u636e\u7684\u7279\u5f81\u4ee5\u53ca\u5404\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5c5e\u6027\u5e94\u8be5\u662f\u4fbf\u4e8e\u4eba\u7c7b\u7406\u89e3\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u6807\u51c6\u662fReality World\u7684\u4e00\u4e2a\u6838\u5fc3\u6307\u6807\uff0c\u5b83\u4e5f\u662f\u4ee3\u8868\u7528\u6237\u521b\u4f5c\u7684\u6700\u9ad8\u62bd\u8c61\u80fd\u529b\uff0c\u6211\u4eec\u5bf9\u4e8e\u73b0\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u5173\u7cfb\u7684\u6df1\u523b\u62bd\u8c61\u7406\u89e3\u90fd\u8574\u85cf\u5728\u6807\u51c6\u7684\u5b9a\u4e49\u53ca\u5176\u7ed3\u6784\u4e2d\u3002")),(0,n.kt)("p",null,"Reality World\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u6765\u5f00\u53d1\u7684\uff0c\u8fd9\u4fdd\u8bc1\u7ec4\u4ef6\u4e0d\u4f1a\u592a\u6df7\u4e71\uff0c\u56e0\u4e3a\u5b83\u4eec\u662f\u6309\u7167\u5f88\u4e25\u683c\u7684\u903b\u8f91\u6765\u903b\u8f91\u7684\uff0c\u8fd9\u79cd\u903b\u8f91\u7531\u6807\u51c6\u6765\u5b9a\u4e49\u3002\u540c\u65f6\u4ed6\u4e5f\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u53d8\u5f97\u6709\u610f\u4e49\uff0c\u76f8\u5173\u6027\u6bd4\u8f83\u9ad8\uff0c\u56e0\u4e3a\u76f8\u5bf9\u4e8e\u540c\u4e00\u6807\u51c6\u7684\u4e0d\u540c\u7ec4\u4ef6\uff0c\u5b83\u4eec\u5f7c\u6b64\u77e5\u9053\u5e94\u8be5\u600e\u6837\u534f\u4f5c\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u4e0d\u4ec5\u5305\u542b\u4e00\u4e9b\u7684\u76f8\u5173\u6027\uff0c\u4e5f\u5305\u62ec\u5bf9\u903b\u8f91\u5f00\u53d1\u7684\u6307\u5bfc\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u5b9a\u4e49\u5f62\u5f0f\u4e5f\u4f7f\u5f97\u6807\u51c6",(0,n.kt)("strong",{parentName:"p"},"\u6613\u4e8e\u5b9a\u4e49"),"\uff1a\u6211\u4eec\u53ea\u9700\u8981\u627e\u51fa\u63cf\u8ff0\u67d0\u7c7b\u5173\u7cfb\u7684\u6570\u636e\uff0c\u800c\u4e0d\u662f\u9700\u8981\u53bb\u5b9e\u73b0\u6216\u5b9a\u4e49\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u64cd\u4f5c\u7684\u65b9\u6cd5\uff0c\u8fd9\u6837\u5c31\u662f\u7684\u6807\u51c6\u7684\u5b9a\u4e49\u6839\u672c\u4e0d\u9700\u8981\u5f88\u590d\u6742\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u6bd4\u5982\u7c7b\u4f3cUSD\u7c7b\u591a\u5c42\u7ea7\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u4e5f\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\uff0c\u6807\u51c6\u7684\u4f5c\u8005\u53ef\u4ee5\u5bf9\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8fdb\u884c\u65b0\u589e\u3001\u4fee\u6539\u3001\u91cd\u547d\u540d\u6216\u8005\u5220\u9664\u7b49\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u6765\u5b9e\u73b0\u6807\u51c6\u7684\u8fdb\u5316\uff0c\u5f62\u6210\u66f4\u597d\u7684\u62bd\u8c61\uff0c\u66f4\u597d\u7684\u6807\u51c6\u3002\u800c\u52a8\u6001\u7f16\u8bd1\u7684\u673a\u5236\uff0c\u4ee5\u53ca\u6807\u51c6\u66f4\u65b0\u901a\u77e5\u673a\u5236\uff0c\u4f7f\u5f97\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u6216\u8005\u7ec4\u4ef6\u53ef\u4ee5\u5f97\u5230\u901a\u77e5\uff0c\u4f7f\u5f97\u7ec4\u4ef6\u5728\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\u3002\u6700\u7ec8\u771f\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u662f\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u597d\u7684\u6807\u51c6\u4ee3\u8868\u7740\u4f18\u79c0\u7684\u4e8b\u60c5\uff0c\u4ed6\u4f1a\u88ab\u66f4\u591a\u7684\u4eba\u4f7f\u7528\uff0c\u5b83\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u6307\u6807"),(0,n.kt)("p",null,"\u6807\u51c6\u672c\u8eab\u4e5f\u662f\u4e00\u4e2a\u7c7b\u578b\u67e5\u627e\u7684\u4f9d\u636e\uff0c\u6807\u51c6\u7684\u8bbe\u8ba1\u5e94\u8be5\u56f4\u7ed5\u67d0\u4e00\u7c7b\u4e3b\u9898\uff0c\u800c\u4e0d\u662f\u6cdb\u6cdb\u7684\u6d89\u53ca\u591a\u4e2a\u65e0\u5173\u5185\u5bb9\u7684\u6807\u51c6\u3002\u8fd9\u4e9b\u4e5f\u662f\u666e\u901a\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u65f6\u7684\u7ec4\u4ef6\u7b5b\u9009\u673a\u5236\u4e4b\u4e00\u3002"),(0,n.kt)("h3",{id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"},"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b26\u53f7\u8868\u7684\u7248\u6743\uff0c\u7c7b\u6bd4\u6307\u5b9a\u6807\u51c6\uff0c\u7b26\u53f7\u8868\u6807\u51c6\u672c\u8eab\u6bd4\u5b9e\u73b0\u7684\u7ec4\u4ef6\u662f\u66f4\u9ad8\u4ef7\u503c\u7684\u4e1c\u897f"),(0,n.kt)("h3",{id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"},"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"),(0,n.kt)("h4",{id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"},"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"),(0,n.kt)("h3",{id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"},"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u524d\u8005\u662f\u6307\u4e00\u4e2a\u597d\u7684\u6807\u51c6\uff0c\u6709\u4e00\u5b9a\u7684\u673a\u5236\u88ab\u66f4\u591a\u4eba\u53d1\u73b0\uff0c\u4ece\u800c\u4fc3\u8fdb\u4e86\u6807\u51c6\u7684\u63a8\u5e7f\uff0c\u8fd9\u662f\u4e00\u79cd\u7ef4\u5ea6\u7684\u8fdb\u5316\uff0c\u56e0\u4e3a\u8fd9\u6837\u597d\u7684\u4e1c\u897f\u4f1a\u8d8a\u6765\u8d8a\u88ab\u66f4\u591a\u4f7f\u7528\uff0c\u4ece\u7528\u6237\u6765\u770b\uff0c\u8fd9\u4e2a\u4e16\u754c\u53d8\u5f97\u8d8a\u6765\u8d8a\u7f8e\u597d\u3002"),(0,n.kt)("p",null,"\u540e\u8005\u662f\u6307\uff0c\u4fc3\u8fdb\u6807\u51c6\u672c\u8eab\u7684\u8fdb\u5316\u3002\u5373\u5bf9\u4e8e\u4e00\u4e2a\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684\u6807\u51c6\uff0c\u8fd9\u4e2a\u6807\u51c6\u5e76\u4e0d\u662f100%\u5b8c\u7f8e\u7684\uff0c\u5b83\u672c\u8eab\u8fd8\u6709\u6539\u8fdb\u7a7a\u95f4\uff0c\u5b83\u672c\u8eab\u4e5f\u53ef\u4ee5\u5ef6\u540e"),(0,n.kt)("h4",{id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"},"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"),(0,n.kt)("h4",{id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"},"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"),(0,n.kt)("p",null,"\u8ba2\u9605\u7684\u673a\u5236"),(0,n.kt)("h4",{id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"},"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"),(0,n.kt)("p",null,"\u53c2\u89c14.11.3.4\u8282\uff0c\u6807\u51c6\u7684\u66f4\u65b0\u673a\u5236\uff08\u4fdd\u6301\u6700\u65b0\u4e24\u4e2a\u7248\u672c\uff09\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\u4ee5\u53ca\u7275\u5f15\u7528\u6237\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u7248\u672c\u673a\u5236\u8fd8\u4fc3\u8fdb\u4e86\u7ec4\u4ef6\u66f4\u65b0\uff0c\u5f53\u6807\u51c6\u66f4\u65b0\u4e86\uff0c\u53ef\u80fd\u4e0d\u4e45\u4e4b\u524d\uff0c\u6bd4\u5982\u4e00\u4e2a\u6708\u6216\u8005\u534a\u5e74\u7684\u7ec4\u4ef6\u5c06\u6709\u53ef\u80fd\u8fc7\u65f6\uff0c\u8fd9\u65f6\u5019\u4e3a\u4e86\u6301\u7eed\u88ab\u5176\u4ed6\u65b0\u7528\u6237\u4f7f\u7528\uff0c\u5b83\u5fc5\u987b\u66f4\u7ec6\u7ec4\u4ef6\uff0c\u5426\u5219\u65b0\u7528\u6237\u65e0\u6cd5\u8d2d\u4e70\uff0c\u8fd9\u6837\u5c31\u4fc3\u8fdb\u7ec4\u4ef6\u5f00\u53d1\u8005\u5feb\u901f\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u662f\u5df2\u7ecf\u8d2d\u4e70\u7684\u7528\u6237\uff0c\u5b83\u53ef\u4ee5\u53cd\u9988\u8981\u6c42\u7ec4\u4ef6\u66f4\u65b0\uff0c\u8fd9\u91cc\u9762\u5c31\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u523a\u6fc0\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8d2d\u4e70\u662f\u4e00\u6b21\u6027\u7684\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u4e0d\u7528\u5bf9\u8fc7\u671f\u8d1f\u8d23"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u7528\u6237\u9700\u8981\u5347\u7ea7\u7ec4\u4ef6\u65f6\uff0c\u8fd9\u662f\u4e00\u6b21\u91cd\u65b0\u8d2d\u4e70\u884c\u4e3a\uff0c\u5bf9\u5f00\u53d1\u8005\u6765\u8bb2\u6709 \u4e8c\u6b21\u6536\u5165\uff0c\u5f53\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u8bbe\u7f6e\u8001\u7528\u6237\u4f18\u60e0\uff0c\u751a\u81f3\u8001\u7528\u6237\u514d\u8d39\u5347\u7ea7\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u6709\u8db3\u591f\u5927\u7684\u52a8\u529b\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u4ece\u5b9e\u9645\u6765\u8bb2\uff0c\u771f\u5b9e\u793e\u4f1a\u4e5f\u662f\u8fd9\u4e2a\u6837\u5b50\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f60\u4e70\u7684\u4e1c\u897f\u662f\u5bb9\u6613\u8fc7\u65f6\u7684\uff0c\u4f60\u53ef\u80fd\u4f1a\u91cd\u65b0\u8d2d\u4e70\u76f8\u540c\u4ea7\u54c1\u7684\u65b0\u54c1\uff0c\u6bd4\u5982\u624b\u673a")),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5bf9\u4e8e\u8f6f\u4ef6\u6765\u8bb2\uff0c\u66f4\u65b0\u5f88\u5feb\uff0c\u4f60\u4e0d\u53ef\u80fd\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u5c31\u7528\u51e0\u5e74\uff0c\u8fd9\u79cd\u9648\u5e74\u7684\u8001\u4ee3\u7801\u540e\u9762\u4e00\u5b9a\u6709\u517c\u5bb9\u6027\u95ee\u9898\uff0c\u800c\u4e14\u5b83\u4e0d\u66f4\u65b0\u4e5f\u4ee3\u8868\u7740\u7528\u6237\u4f53\u9a8c\u7684\u8fd8\u662f\u5f88\u4e45\u4e4b\u524d\u7684\u4e1c\u897f\uff0c\u5f53\u7136\u8fd9\u4e9b\u4e1c\u897f\u4e5f\u6709\u53ef\u80fd\u7ecf\u5f97\u8d77\u65f6\u95f4\u8003\u9a8c\u3002\u4f46\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u8fd9\u79cd\u6bd4\u8f83\u7a33\u5b9a\u7684\u4ea7\u54c1\uff0c\u5176\u4ee3\u7801\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u5f00\u53d1\u8005\u6bcf\u6b21\u53ef\u80fd\u5e76\u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u591a\u65f6\u95f4\u5c31\u53ef\u4ee5\u66f4\u65b0\u5347\u7ea7\u4e00\u4e0b\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u6bcf\u4e2a\u6807\u51c6\u90fd\u662f\u4e00\u4e2a\u8fdb\u5316\u7684\u8fc7\u7a0b\uff0c\u5230\u4e00\u5b9a\u7684\u9636\u6bb5\u5b83\u4e5f\u4f1a\u8d8b\u4e8e\u7a33\u5b9a"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u6807\u51c6\u5f00\u53d1\u8005\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u6d41\u5931\uff0cTA\u4e5f\u8981\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u7a33\u5b9a\uff0c\u5426\u5219\u9891\u7e41\u53d8\u5316\u7684\u6807\u51c6\u6709\u53ef\u80fd\u4f1a\u6d41\u5931\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u5bf9\u4e8e\u4f20\u7edf\u7684App\u6765\u8bb2\uff0c\u6bd4\u5982\u6709\u65f6\u5019\u770b\u5230\u5f88\u591a\u975e\u5e38\u4e45\u7684app\u6ca1\u6709\u66f4\u65b0\u5347\u7ea7\u4e5f\u80fd\u8fd0\u884c\uff0c\u4f46\u662f\u56e0\u4e3a\u5b83\u662f\u72ec\u7acb\u7a0b\u5e8f\uff0c\u53ea\u8981OS\u4fdd\u6301\u4e00\u5b9a\u7684\u517c\u5bb9\u65f6\u95f4\u5373\u53ef\uff0c\u4f46\u662f\u5bf9\u4e8e\u5728\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u5f00\u653e\u5927\u4e16\u754c\u6765\u8bb2\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u590d\u6742\u5f97\u591a\uff0c\u6240\u4ee5\u524d\u671f\u4f7f\u7528\u66f4\u7b80\u5355\u7684\u65b9\u5f0f\u5904\u7406\u3002"),(0,n.kt)("h2",{id:"413-\u7528\u6237\u521b\u4f5c"},"4.13 \u7528\u6237\u521b\u4f5c"),(0,n.kt)("h3",{id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"},"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"),(0,n.kt)("h3",{id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"},"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"),(0,n.kt)("h3",{id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7"},"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7"),(0,n.kt)("h3",{id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"},"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("h2",{id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"},"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"),(0,n.kt)("h3",{id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458"},"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458"),(0,n.kt)("p",null,"ChatGPT\u65e9\u671f\u7684\u6d41\u91cf\u5927\u90e8\u5206\u6765\u81ea\u6280\u672f\u4eba\u5458\uff0c\u8ddf\u533a\u5757\u94fe\u4e00\u6837\uff0c\u5148\u7531\u6280\u672f\u4eba\u5458\u5230\u975e\u6280\u672f\u4eba\u5458\uff0c\u501f\u52a9\u73b0\u5728\u7684\u793e\u4ea4\u7f51\u7edc\uff0c\u73b0\u5728\u7684\u4fe1\u606f\u4f20\u64ad\u4f1a\u66f4\u5feb"),(0,n.kt)("h3",{id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai"},"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI"),(0,n.kt)("p",null,"\u4ee5ChatGPT\u4e3a\u4ee3\u8868\u7684\u5927\u6a21\u578b\uff0c\u662f\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u65b9\u5f0f\uff0c\u8fc7\u53bb\u5206\u6563\u5728\u591a\u4e2a\u8f6f\u4ef6\u4e2d\u7684\u4fe1\u606f\u548c\u529f\u80fd\uff0c\u73b0\u5728\u88ab\u96c6\u6210\u5230\u4e00\u4e2a\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u6a21\u578b\u548c\u516c\u53f8\u4e2d\uff0c\u4f7f\u5f97\u5355\u4e00\u516c\u53f8\u5bf9\u66f4\u5e7f\u6cdb\u7684\u80fd\u529b\u62e5\u6709\u66f4\u5f3a\u63a7\u5236\u6743\uff0c \u56e0\u6b64\u4fe1\u606f\u5b89\u5168\u4f1a\u66f4\u52a0\u590d\u6742\u3002\u56e0\u4e3a\u4e0d\u7ba1\u4e00\u4e2a\u6a21\u578b\u662f\u5426\u80fd\u591f\u52a8\u6001\u5b66\u4e60\u65b0\u77e5\u8bc6\u7684\u80fd\u529b\uff0c\u8fd8\u662f\u8bf4\u5b83\u7684\u6570\u636e\u5747\u6765\u81ea\u5206\u6563\u7684\u4e92\u8054\u7f51\uff0c\u4f46\u6700\u7ec8\u9762\u5411\u7528\u6237\u7684\u6574\u4e2a\u6d41\u7a0b\u662f\u901a\u8fc7\u5927\u6a21\u578b\u4e2d\u7684\u7b97\u5b50\u548c\u7a0b\u5e8f\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u4e9b\u8f93\u5165\u4fe1\u606f\u4e0d\u7ba1\u662f\u5426\u771f\u5b9e\u51c6\u786e\uff0c\u5927\u6a21\u578b\u7684\u8ba1\u7b97\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u5b83\u638c\u63e1\u7740\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u63a7\u5236\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u672a\u6765\u7684AI\u5e94\u8be5\u662f\u53bb\u4e2d\u5fc3\u5316\u7684\uff0c\u5e94\u8be5\u4ee5\u67d0\u79cd\u7528\u6237\u53ef\u63a7\u7684\u5f62\u5f0f\uff0c\u66f4\u5206\u6563\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u50cfRealityIS\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u7684\u662f\u57fa\u7840\u6a21\u5757\u800c\u4e0d\u662f\u6a21\u578b\uff0c\u7528\u6237\u53bb\u9009\u62e9\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u672a\u6765\u7684AI\u6216\u8bb8\u5e94\u8be5\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u95ee\u9898\u7684\u7ed3\u679c\u533a\u5206\uff0c\u5f53\u4eca\u7684ChatGPT\u7684\u6210\u529f\u5728\u4e8e\u5b83\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u4fe1\u606f\u7684\u7ed3\u679c\u8fdb\u884c\u5173\u8054\uff0c\u8fd9\u79cd\u5173\u8054\u4e00\u65b9\u9762\u65b9\u4fbf\u4e2d\u5fc3\u5316\u7684\u5927\u6a21\u578b\u8fdb\u884c\u5b66\u4e60\u5904\u7406\uff0c\u4f46\u4e5f\u540c\u65f6\u5e26\u6765\u4e86\u98ce\u9669\u3002\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u5c06\u83b7\u53d6\u7ed3\u679c\u90e8\u5206\u7684\u63a7\u5236\u6743\u4ea4\u7ed9\u7528\u6237\uff0c\u7531\u7528\u6237\u6765\u63a7\u5236\uff0c\u53ef\u4ee5\u6709\u8bb8\u591a\u65b9\u5f0f\uff0c\u4f8b\u5982RealityIS\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"},"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"),(0,n.kt)("p",null,"\u4ece\u53e6\u4e00\u4e2a\u89d2\u5ea6\uff0cchatGPT\u5f71\u54cd\u4e86\u4fe1\u606f\u7684\u4f20\u9012\uff0c\u6743\u5a01\u4fe1\u606f\u6bd4\u5982\u65b0\u95fb\u3001\u6280\u672f\u6587\u7ae0\uff0c\u6700\u6838\u5fc3\u7684\u539f\u5219\u80af\u5b9a\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u6bd4\u5982\u5404\u5927\u7f51\u7ad9\u9700\u8981\u63a8\u51fa\u81ea\u5df1\u7684\u5b98\u65b9\u7f51\u7ad9\u6216\u8005\u4fe1\u606f\u6e90\u4f9b\u7528\u6237\u76f4\u63a5\u6d88\u8d39\u3002\u76f4\u63a5\u4f20\u9012\u662f\u4fdd\u6301\u4fe1\u606f\u771f\u5b9e\u6027\u7684\u552f\u4e00\u9014\u5f84\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e00\u65e6\u4fe1\u606f\u7684\u4f20\u64ad\u65b9\u5f0f\u53d8\u5f97\u4e0d\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u8fd9\u5c06\u4f1a\u5927\u5927\u5f71\u54cd\u4fe1\u606f\u7684\u4f20\u64ad\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6e20\u9053\u53ef\u80fd\u4f1a\u4fee\u6539\u4fe1\u606f\u5185\u5bb9\u3002\u5373\u4f7f\u662f\u8f6c\u6458\uff0c\u4e5f\u5f88\u96be\u8fa8\u522b\u8f6c\u53d1\u8005\u505a\u4e86\u54ea\u4e9b\u4fe1\u606f\u4fee\u6539\uff0c\u9664\u975e\u4f60\u53bb\u770b\u539f\u6587\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u603b\u662f\u529b\u6c42\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012\uff0c\u4f20\u9012\u7684\u5a92\u4ecb\u662f\u62a5\u7eb8\uff0c\u62a5\u7eb8\u6709\u51fa\u7248\u793e\u6743\u5a01\u5370\u5237\u5382\u7ecf\u8fc7\u6743\u5a01\u6e20\u9053\u76f4\u63a5\u5230\u8fbe\u7528\u6237\u624b\u4e2d\uff0c\u4e00\u822c\u5f88\u96be\u7be1\u6539\u3002\u800c\u4e92\u8054\u7f51\u5e95\u5ea7\u7684\u4e92\u8054\u6a21\u578b\uff0c\u4e5f\u662f\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u5e95\u5c42\u673a\u5236\u4e0d\u4f1a\u7be1\u6539\u4f20\u8f93\u4fe1\u606f\uff0c\u5e76\u4ee5\u6807\u51c6\u7684\u5f62\u5f0f\u5f00\u653e\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u663e\u7136\u5927\u516c\u53f8\u7684\u5927\u6a21\u578b\u4f5c\u4e3a\u4e00\u4e2a\u4fe1\u606f\u4f20\u64ad\u6e20\u9053\u548c\u65b9\u5f0f\uff0c\u5b83\u65e0\u6cd5\u6709\u8fd9\u6837\u7684\u4fdd\u8bc1\u3002"),(0,n.kt)("h1",{id:"5-realitycoin"},"5. RealityCoin"),(0,n.kt)("p",null,"\u5c06\u8fc7\u53bb\u4f20\u7edf\u6e38\u620f\u5e02\u573a\u4e2d\uff0c\u53ea\u6709\u5f00\u53d1\u5546\u3001\u53d1\u884c\u5546\u548c\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\uff0c\u6269\u5c55\u4e3a\u5176\u4ed6\u4eba\u53ef\u4ee5\u53c2\u4e0e\u6295\u8d44\uff0c\u901a\u8fc7\u6295\u8d44\u6765\u9a71\u52a8\u6e38\u620f\u4f53\u9a8c\u6216\u5e94\u7528\u7a0b\u5e8f\u529f\u80fd\u83b7\u5f97\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4ee5\u592a\u574a\u7c7b\u4f3c\u7684\u53bb\u4e2d\u5fc3\u5316\u5e73\u53f0\uff0c\u7531\u4e8e\u4ee5\u592a\u574a\u53d1\u884c\u7684\u4ee3\u5e01\u8ddf\u5b9e\u9645\u8fd0\u884c\u7684\u4ea7\u4e1a\u4e4b\u95f4\u7f3a\u4e4f\u5173\u8054\uff0c\u672c\u8d28\u4e0a\u4ee5\u592a\u574a\u53ea\u4fdd\u8bc1\u4ea4\u6613\u7684\u6267\u884c\u548c\u5408\u7ea6\u7684\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ea4\u6613\u548c\u5408\u7ea6\u80cc\u540e\u7684\u5b9e\u4f53\u53ca\u5176\u5b9e\u4f53\u7684\u4fe1\u7528\u4f53\u7cfb\uff0c\u4ecd\u7136\u9700\u8981\u4f9d\u8d56\u4e8e\u7b2c\u4e09\u65b9\u673a\u6784\uff0c\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u673a\u6784\u5927\u90fd\u662f\u4e2d\u5fc3\u5316\u7684\u673a\u6784\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u7269\u4f53\u80fd\u4e0d\u80fd\u6309\u65f6\u9001\u8fbe"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u771f\u5b9e\u4e16\u754c\u7684\u7269\u6743\u662f\u5426\u771f\u5b9e\uff0c\u751a\u81f3\u662f\u5426\u771f\u6709\u5176\u6743"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u80cc\u540e\u7684\u56e2\u961f\u662f\u5426\u6709\u80fd\u529b\u6267\u884c\u4ee3\u5e01\u7684\u627f\u8bfa\uff0c\u751a\u81f3\u8c01\u6765\u9a8c\u8bc1\u8fd9\u4e2a\u56e2\u961f\u53ca\u5176\u6267\u884c")),(0,n.kt)("p",null,"\u7531\u4e8eRealityCoin\u53ea\u670d\u52a1\u4e8eReality World\u5e73\u53f0\u4e0a\u7684\u5e94\u7528\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u4ee3\u5e01\u548c\u5e73\u53f0\u4e4b\u95f4\u52a0\u5165\u4e00\u4e9b\u4fe1\u7528\u7ea6\u5b9a\uff0c\u7528\u4ee5\u4fdd\u8bc1\u4ee3\u5e01\u7684\u98ce\u9669\u53ef\u63a7\u3002\u5e76\u4e14\uff0c\u901a\u8fc7\u4fdd\u8bc1\u4ee3\u5e01\u5bf9\u5e94\u7684\u4ea7\u54c1\u786e\u6709\u5176\u7269\uff0c\u751a\u81f3\u53ef\u4ee5\u907f\u514d\u4e00\u4e9b\u8bc1\u5238\u76d1\u7ba1\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h2",{id:"51-\u4ee3\u5e01\u7ecf\u6d4e"},"5.1 \u4ee3\u5e01\u7ecf\u6d4e"),(0,n.kt)("h3",{id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"},"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"),(0,n.kt)("p",null,"\u9664\u4e86Reality World\u5185\u90e8\u7c7b\u4f3c\u5b9e\u4f53\u6216\u8005\u4e2a\u4f53\u7ecf\u6d4e\uff0c\u8fd9\u5728\u524d\u671f\u6ca1\u6709\u4ea7\u54c1\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u5c31\u662f\u9760\u8fd0\u8425\uff0c\u5176\u5b9e\u5c31\u662f\u6295\u653e\u6d41\u91cf\uff0c\u6216\u8005\u5c31\u5355\u7eaf\u9700\u8981\u9760\u4ea7\u54c1\u7684\u53e3\u7891\u3002\u524d\u8005\u6210\u672c\u8f83\u9ad8\uff0c\u800c\u540e\u8005\u6210\u529f\u7387\u8f83\u4f4e\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u903b\u8f91\uff0c\u5b83\u4e0d\u4ec5\u662f\u4e00\u4e2a\u5b89\u5168\u7684\u4ef7\u503c\u4ea4\u6613\u4e2d\u4ecb\uff0c\u5b83\u7684\u67b6\u6784\u4f53\u7cfb\u4e2d\u5929\u751f\u878d\u5165\u4e86\u6295\u8d44\u7684\u903b\u8f91\uff0c\u6bd4\u5982\u5b83\u9996\u5148\u662f\u53d1\u5e01\uff0c\u6b64\u65f6\u5b9e\u7269\u8fd8\u6ca1\u6709\u751f\u4ea7\u51fa\u6765\u6216\u8005\u4ea7\u54c1\u5904\u4e8e\u524d\u671f\u8fd0\u8425\u671f\uff0c\u4ea7\u54c1\u77e5\u540d\u5ea6\u8fd8\u6ca1\u6709\u90a3\u4e48\u9ad8\u3002\u6b64\u65f6\u5c31\u57fa\u4e8e\u6295\u8d44\u8005\u5bf9\u672a\u6765\u4ea7\u54c1\u7406\u5ff5\u6216\u8005\u6545\u4e8b\u7684\u9884\u671f\uff0c\u8fdb\u884c\u6295\u8d44\uff0c\u4f8b\u5982\u4ee3\u5e01\u5c31\u662f\u8fd9\u6837\uff1b\u5373\u4f7f\u6ca1\u6709\u6295\u8d44\uff0c\u5b9e\u73b0\u5206\u53d1\u7684\u865a\u62df\u8d27\u5e01\uff0c\u4e5f\u4f1a\u8ba9\u6301\u5e01\u8005\u4e3a\u4e86\u4f7f\u5f97\u6240\u6301\u8d27\u5e01\u589e\u503c\uff0c\u800c\u4f1a\u65e0\u5f62\u4e2d\u53c2\u4e0e\u5e2e\u52a9\u5e73\u53f0\u7684\u63a8\u5e7f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u4e00\u5957\u903b\u8f91\u80cc\u540e\uff0c\u80fd\u591f\u8ba9\u65e9\u5165\u5c40\u7684\u4eba\u5728\u4ee5\u540e\u83b7\u5f97\u66f4\u5927\u7684\u56de\u62a5\uff0c\u57fa\u4e8e\u5bf9\u5e73\u53f0\u6216\u8005\u4ea7\u54c1\u672a\u6765\u7684\u9884\u671f\u6216\u60f3\u8c61\u7a7a\u95f4\u3002\u56e0\u4e3a\u5982\u679c\u57fa\u4e8e\u6295\u8d44\u8005\u7684\u9884\u671f\uff0c\u65e5\u540e\u8fd9\u4e9b\u81ea\u5df1\u6240\u6301\u7684\u865a\u62df\u8d27\u5e01\u6216\u8005\u4ee3\u5e01\uff0c\u4f1a\u83b7\u5f97\u8f83\u5927\u7684\u4ef7\u503c\u589e\u503c\u7a7a\u95f4\u3002\u56e0\u6b64\u5e26\u6765\u7684\u7ed3\u679c\u662f\u5728\u4ea7\u54c1\u8fd8\u6ca1\u6709\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u5c31\u53ef\u4ee5\u5438\u5f15\u90a3\u4e9b\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u8fd9\u5e2e\u52a9\u4e86\u524d\u671f\u7684\u4ea7\u54c1\u63a8\u5e7f\u3002\u5e76\u4e14\u8d8a\u65e9\u53c2\u4e0e\u7684\u4eba\u83b7\u5f97\u7684\u589e\u503c\u7a7a\u95f4\u4f1a\u8d8a\u5927\uff0c\u6240\u4ee5\u65e9\u671f\u53ef\u4ee5\u5feb\u901f\u6210\u957f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u7740\u7528\u6237\u91cf\u589e\u591a\uff0c\u6216\u8005\u4ea7\u54c1\u5e02\u573a\u8d8a\u6210\u719f\uff0c\u8fd9\u79cd\u589e\u503c\u7a7a\u95f4\u5c31\u9010\u6e10\u53d8\u5c0f\uff0c\u4f46\u662f\u4ea7\u54c1\u7684\u5e02\u573a\u5374\u5df2\u7ecf\u7a33\u5b9a\u4e86\uff0c\u6b64\u65f6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u6295\u8d44\u8005\u4f1a\u6162\u6162\u9000\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u4ea7\u54c1\u5f00\u53d1\u8005\u8fd8\u662f\u53ef\u4ee5\u6301\u7eed\u83b7\u5f97\u8f83\u5927\u7684\u6536\u5165")),(0,n.kt)("h3",{id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"},"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u73a9\u5bb6\u4e3b\u8981\u662f\u4ed8\u8d39\u83b7\u5f97\u4f53\u9a8c\uff0c\u5c5e\u4e8e\u6d88\u8d39\u8005\u3002\u4ee3\u5e01\u7ecf\u6d4e\u53ca\u7cfb\u7edf\u53ef\u4ee5\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u53c2\u4e0e\u5bf9\u6e38\u620f\u7684\u6295\u8d44\uff0c\u8fd8\u53ef\u4ee5\u4ece\u4e2d\u83b7\u5f97\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u73a9\u5bb6\u5728\u73a9\u4e86\u67d0\u4e2a\u6e38\u620f\u4e4b\u540e\uff0c\u89c9\u5f97\u8bbe\u8ba1\u5f88\u597d\uff0c\u5c31\u53ef\u4ee5\u8d2d\u4e70\u5176\u6210\u957f\u4ee3\u5e01\uff0c\u65e5\u540e\u7b49\u6e38\u620f\u5927\u70ed\u4e4b\u540e\u5c31\u53ef\u4ee5\u56de\u62a5\u589e\u503c\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u73a9\u5bb6\u672c\u8eab\u4e5f\u4ed8\u8d39\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u73a9\u5bb6\u662f\u4e0d\u4f1a\u8d5a\u94b1\u7684\uff0c\u8fd9\u79cd\u6a21\u5f0f\u662f\u65e9\u671f\u7684\u73a9\u5bb6\u8d5a\u53d6\u540e\u6765\u52a0\u5165\u73a9\u5bb6\u7684\u94b1\uff0c\u8fd9\u4e5f\u4f7f\u5f97\u90a3\u4e9b\u613f\u610f\u6295\u8d44\u7684\u73a9\u5bb6\u66f4\u613f\u610f\u53bb\u53d1\u73b0\u4e00\u4e9b\u597d\u7684\u6e38\u620f\uff0c\u5e76\u4e14\u662f\u5904\u4e8e\u65e9\u671f\u7684\u6e38\u620f\uff0c\u8d8a\u662f\u65e9\u671f\u5b83\u4eec\u53ef\u80fd\u8d5a\u53d6\u7684\u589e\u503c\u7a7a\u95f4\u8d8a\u5927\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u5bf9\u6574\u4e2a\u65b0\u6e38\u620f\u7684\u53d1\u5c55\u5f62\u6210\u6b63\u5411\u53cd\u9988\u3002\u8fd9\u4e9b\u672c\u8eab\u4e5f\u662f\u9a71\u52a8\u6574\u4e2a\u7cfb\u7edf\u81ea\u6211\u8fdb\u5316\u7684\u4e00\u4e2a\u903b\u8f91\uff0c\u56e0\u4e3a\u90a3\u4e9b\u4e0d\u597d\u73a9\u7684\u6e38\u620f\uff0c\u80af\u5b9a\u6295\u8d44\u7684\u4eba\u5c31\u4f1a\u66f4\u5c11\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u628a\u4e2a\u4f53\u7ecf\u6d4e\u548c\u4ee3\u5e01\u7ecf\u6d4e\u7ed3\u5408\u8d77\u6765\uff0c\u901a\u8fc7\u5b9e\u9645\u4f53\u9a8c\u6765\u83b7\u5f97\u5bf9\u4ea7\u54c1\u7684\u611f\u53d7\uff0c\u7136\u540e\u57fa\u4e8e\u611f\u53d7\u8fdb\u884c\u6295\u8d44\uff0c\u8fd9\u6709\u70b9\u50cf\u98ce\u9669\u6295\u8d44\u8fc7\u7a0b\u4e2d\u7684\u4ea7\u54c1\u5c3d\u8c03\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("h2",{id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97"},"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u5e73\u53f0\u4e3b\u8981\u63d0\u4f9b\u9a8c\u8bc1\uff0c\u53ef\u4ee5\u5728\u4e2d\u5fc3\u5316\u5e73\u53f0\u63d0\u4f9b\u7ed3\u7b97\uff0c\u6709\u5e73\u53f0\u4fe1\u7528\u4fdd\u8bc1\u5bf9\u4e8e\u7ed3\u7b97\u7269\u6743\u7684\u6620\u5c04\u3002\u5b9e\u9645\u4e0a\u7528\u6237\u5173\u5fc3\u7684\u662f\u6570\u636e\u548c\u81ea\u4e3b\u7684\u6743\u5229\uff0c\u8fd9\u79cd\u6620\u5c04\u672c\u8eab\u4e5f\u65e0\u6cd5\u901a\u8fc7\u533a\u5757\u94fe\u4fdd\u8bc1\uff0c\u56e0\u4e3a\u4e0d\u80fd\u5c06\u6574\u4e2a\u5e94\u7528\u5185\u7f6e\u4e8e\u533a\u5757\u94fe\u5185\u3002"),(0,n.kt)("h3",{id:"521-\u7ed3\u7b97\u6027\u80fd"},"5.2.1 \u7ed3\u7b97\u6027\u80fd"),(0,n.kt)("p",null,"\u600e\u6837\u4fdd\u8bc1\u5b9e\u65f6\u7ed3\u7b97\u7684\u6027\u80fd"),(0,n.kt)("p",null,"IOTA"),(0,n.kt)("h2",{id:"53-\u667a\u80fd\u5408\u7ea6"},"5.3 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("p",null,"\u600e\u6837\u8ba9\u7528\u6237\u5b9a\u4e49\u4ee3\u5e01\uff0c\u4ee5\u53ca\u4ee3\u5e01\u4ea4\u6613\u7684\u89c4\u5219"),(0,n.kt)("h2",{id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"},"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u6240\u6709\u4ee3\u5e01\u4e4b\u95f4\u90fd\u53ef\u4ee5\u8fdb\u884c\u4ea4\u6613"),(0,n.kt)("p",null,"Lykke"),(0,n.kt)("h3",{id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01"},"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01"),(0,n.kt)("h3",{id:"542-\u6d41\u52a8\u6027"},"5.4.2 \u6d41\u52a8\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u770b\u5230\uff0c\u51e0\u4e4e\u6bcf\u4e00\u79cd\u65b0\u51fa\u73b0\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u90fd\u548c\u67d0\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c3d\u7ba1\u5f88\u591a\u9879\u76ee\u7ecf\u4e0d\u8d77\u63a8\u6572\uff0c\u800c\u501f\u6b64\u9879\u76ee\u53d1\u884c\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u88ab\u4eba\u4eec\u6316\u82e6\u4e3a \u201c\u7a7a\u6c14\u5e01\u201d\uff0c\u4e5f\u5c31\u662f\u9a97\u94b1\u7684\u5de5\u5177\uff0c\u4f46\u662f\u8fd9\u4e2a\u7ecf\u6d4e\u6a21\u578b\u7684\u51fa\u53d1\u70b9\u662f\u6b63\u9762\u7684\uff0c\u5373\u6bcf\u4e00\u4e2a\u53d1\u5e01\u7684\u533a\u5757\u94fe\u9879\u76ee\uff0c\u90fd\u5c1d\u8bd5\u4ee5\u5176\u6240\u53d1\u884c\u7684\u901a\u8bc1(tioken\uff09\u4f5c\u4e3a\u6fc0\u52b1\u5de5\u5177\uff0c\u4fc3\u8fdb\u53c2\u4e0e\u5404\u65b9\u79ef\u6781\u534f\u4f5c\u3002\u53c2\u4e0e\u8005\u5bf9\u8fd9\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7684\u8d21\u732e\u8d85\u5927\uff0c\u5f97\u5230\u7684\u5e01\u8d8a\u591a\u3002\u800c\u968f\u7740\u9879\u76ee\u53d1\u5c55\u6210\u719f\uff0c\u5f97\u5230\u5e02\u573a\u8d8a\u6765\u8d8a\u591a\u7684\u8ba4\u53ef\uff0c\u5e01\u7684\u4ef7\u503c\u4e5f\u5c06\u6c34\u6da8\u8239\u9ad8\u3002\n\u8fd9\u5c31\u662f\u4e00\u4e2a\u7406\u60f3\u7684 token\u7ecf\u6d4e\u7cfb\u7d71\u3002\u6362\u6210\u73b0\u5728\u65f6\u9ae6\u7684\u672f\u8bed-\u662f\u4e00\u4e2atoken \u7ecf\u6d4e\u751f\u6001\u5708\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0c\u5982\u679c\u52a0\u5bc6\u6570\u5b9a\u800c\u548c\u88dd\u548c\u8981\u4e3a\u578b\u5730\u6bdb\u9875\u7684\u7ecf\u6ecb\u884c\u4e3a\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5176\u793e\u4f1a\u7ecf\u6d4e\u4ef7\u503c\u4f1a\u66f4\u5927\uff0c\u4e5f\u66f4\u5bb9\u6613\u88ab\u63a5\u53d7\uff0c\u5728\u7ecf\u6d4e\u8131\u865a\u5411\u5b9e\u7684\u5927\u73af\u5883\u4e0b\u3002\u66f4\u6709\u52a9\u76ca\u3002\u8fd9\u7c7b\u7ecf\u6d4e\u6d3b\u52a8\u5e76\u4e0d\u662f\u6ca1\u6709\uff0c\u6b63\u5982\u7b2c3\u7ae0\u8ba8\u8bba\u7684\u77e5\u8bc6\u8d21\u732e\u4e0e\u5206\u4eab\u7684\u4f8b\u5b50\uff0c\u7c7b\u4f3c\u5e94\u7528\u573a\u666f\u8fd8\u6709\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u4e00\u4e2a\u6839\u672c\u80fd\u529b\u662f\u80fd\u591f\u5b9e\u73b0\u5357\u6d41\u5230\u534e\u3001\u5feb\u901f\u4ea4\u6613\u3001\u5feb\u901f\u6d41\u8f6c\u3001\u767b\u5168\u53ef\u7a2e\u7684\u529f\u80fd\u3002\u6211\u4eec\u53ef\u4ee5\u8bbe\u60f3\u4e00\u4e0b\uff0c\u628a\u5404\u79cd\u6743\u76ca\u8bc1\u660e\u6bd4\u5982\u95e8\u7968\u3001\u79ef\u5206\u3001\u5408\u540c\u3001\u8bc1\u4e66\u3001\u70b9\u5361\u3001\u8bc1\u5238\u3001\u6743\u9650\u3001\u8d44\u8d28\u7b49\u5168\u90e8\u8fdb\u4e2a\n\u901a\u8bc1\u5316 \uff08tokenization \uff09\uff0c\u5728\u533a\u5757\u94fe\u4e0a\u6d41\u8f6c\uff0c\u653e\u5230\u5e02\u573a\u4e0a\u4ea4\u6613\uff0c\u8ba9\u5e02\u573a\u81ea\u52a8\u786e\u5b9a\u5176\u4ef7\u683c\uff0c\u540c\u65f6\u5728\u73b0\u5b9e\u7ecf\u6d4e\u751f\u6d3b\u4e2d\u53ef\u4ee5\u6d88\u8d39\u3001\u53ef\u4ee5\u9a8c\u8bc1\uff0c\u8fd9\u4e9b\u90fd\u662f\u7d27\u8d34\u5b9e\u4f53\u7ecf\u6d4e\u7684\u826f\u6027\u5e94\u7528\u3002\ntoken \u7ecf\u6d4e\u5177\u6709\u4e00\u4e2a\u7279\u70b9\uff0c\u5c31\u662f\u5404\u4e2a\u7ecf\u6d4e\u751f\u6001\u5708\u7684 token \u90fd\u5177\u6709\u7279\u5b9a\u7ef4\u5ea6\u4e0a\u7684\u4ef7\u503c\uff0c\u5728\u5404\u81ea\u7684\u5708\u5b50\u5185\u662f\u4e0d\u53ef\u6216\u7f3a\u7684\u3002\u4f5c\u4e3a\u4e00\u4e2a\u5f00\u653e\u7684\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5708\u5185\u6210\u5458\u7684\u8fdb\u51fa\u4f1a\u5e26\u6765 token \u7684\u6d41\u52a8\u548c\u4ea4\u6362\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u51fa\u73b0\u7c7b\u4f3c\u4e0d\u540c\u8d27\u5e01\u4e4b\u95ee\u5151\u6362\u7684\u60c5\u51b5\u3002\u5404\u79cdtoken \u53ef\u4ee5\u7528\u6cd5\u5e01\u6807\u4ef7\uff0c\u4f46\u90fd\u7981\u6b62\u6cd5\u5e01\u76f4\u6309\u66ff\u4ee3\u5404\u79cd\u5e01\u5728\u6240\u5728\u7684 token \u7ecf\u6d4e\u751f\u6001\u5708\u5185\u4f7f\u7528\u3002\n\u8fd9\u79cd\u5207\u65ad\u4e86\u6cd5\u5e01\u8fdb\u5165token \u7ecf\u6d4e\u751f\u6001\u5708\uff0c\u800c\u5c06token \u4f5c\u4e3a\u6240\u5728\u7ecf\u6d4e\u751f\u6001\u5708\u7684\u201c\u56fe\u5e01\u201d\u7684\u7ecf\u6d4e\u73b0\u8c61\u662f\u503c\u5f97\u63a2\u8ba8\u7684\u3002\n\u8bd5\u60f3\u4e00\u4e2a\u8fd9\u6837\u7684\u793e\u4f1a\uff0c\u6cd5\u5e01\u4e0d\u518d\u662f\u6240\u6709\u7ecf\u6d4e\u6d3b\u52a8\u7684\u8d27\u5e01\u5a92\u4ecb\uff0c\u793e\u4f1a\u7ecf\u6d4e\u751f\u6d3b\u88ab\u5206\u6210\u4e86\u591a\u6837\u5316\u7684\u5f88\u540d\u516c\u5f00\u653e\u7684\u5708\u5b50\uff0c\u6bcf\u4e2a\u5708\u5b50\u90fd\u6709\u81ea\u5df1\u7684\u7ecf\u6d4e\u6d3b\u52a8\uff0c\u5728\u7279\u5b9a\u8303\u56f4\u5185\uff0c \u4f7f\u7528\u767d\u5df1\u7684\u201c\u5708\u5e01\u201d\u3002\u4f46\u4e5f\u6709\u4eba\n\u5728\u8fd9\u4e9b\u7ecf\u6d4e\u6d3b\u52a8\u4e4b\u5916\uff0c\u5904\u4e8e\u5e73\u5e38\u751f\n\u6d3b\n\u5b50\uff0c\u4f7f\u7528\u7684\u662f\u6cd5\u5e01\u4f5c\u4e3a\u4ea4"),(0,n.kt)("p",null,"\u6613\u5a92\u4ecb\u3002\u6bcf\u4e2a\u4eba\u6bcf\u65f6\u6bcf\u523b\u90fd\u5728\u4e0d\u540c\u7684\u5708\u5b50\u95f4\u6d41\u52a8\uff0c\u5728\u4e0d\u540c\u7684\u5708\u5b50\u904a\n\u5faa\u900f\u660e\u7684\u89c4\u5219\uff0c\u4f7f\u7528\u4e0d\u540c\u7684 \u201c\u5708\u5e01\u201d\n\uff0c\u76f8\u5e94\u4e5f\u7559\u4e0b\u4e86\u53ef\u8ffd\u6eaf\u548c\u4e0d\u53ef\n\u7be1\u6539\u7684\u6d3b\u52a8\u8bb0\u5f55\uff08\u56fe 4.3\uff09\u3002\n\u6743\u76ca\u8bc1\u660e\n\u5408\u7f51\n\u6cdf\u4e66\n\u56fe 4.3 \u6743\u76ca\u8bc1\u660e\u901a\u8bc1\u5316\n\u8fd9\u6216\u8bb8\u662f\u4e00\u4e2a\u66f4\u52a0\u6709\u5e8f\u7684\u793e\u4f1a\u5f62\u6001\u3002\u6709\u4e86token\uff0c\u53c2\u4e0e\u8005\u3001\u9879\n\u4e14\u5efa\u8bbe\u8005\u3001\u4ea7\u54c1\uff0c\u8fd9\u6b64\u8981\u7d20\u5728\u7279\u5b9a\u7ecf\u6d4e\u751f\u6001\u570b\u5185\u6709\u673a\u5730\u6d4e\u52a8\u8d77\u6765\u3002\u8fdb\u4eba\u5712\u5b50\u7684\u4eba\u8d8a\u591a\uff0c\u751f\u5e7f\u8bdd\u52a8\u8d8a\u660c\u76db\uff0ctoken\u5c31\u8d8a\u6709\u4ef7\u8857\u3002\u5927\u708e\u793e\u4f1a\u751f\u6d3b\u4f1a\u51fa\u73b0\u767d\u7ec4\u7ec7\u7ecf\u6d4e\u751f\u6001\uff0ctoken \u53ef\u4ee5\u65b9\u4fbf\u3001\u4f4e\u6210\u672c\u5730\u5b9e\u73b0\u95dc\n\u5185\u7684\u6295\u7968\u548c\u8868\u6c7a\u3002\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u8fd8\u4ece\u672a\u6709\u4e00\u4e2a\u56fd\u5bb6\u7ecf\u5386\u8fc7\u8fd9\u6837\u4e00\u4e2a\n\u5b58\u5728\u591a\u79cd\u4ef7\u503c\u7b26\u53f7\u548c\u591a\u79cd\u4ef7\u503c\u5c3a\u5ea6\u7684\u793e\u4f1a\uff0c\u5728\u8fd9\u4e2a\u793e\u4f1a\u4e2d\u793e\u4f1a\u6cbb\u7406\u3001\u56fd\u5bb6\u7ba1\u7406\u3001\u5b8f\u89c2\u7ecf\u6d4e\u7b49\u65b9\u9762\uff0c\u90fd\u4f1a\u51fa\u73b0\u524d\u6240\u672a\u6709\u7684\u8003\u9a8c\uff0c\u5f88\u591a\u7ecf\u6d4e\u548c\u793e\u4f1a\u89c4\u5219\u90fd\u4f1a\u9010\u6e10\u53d1\u751f\u6df1\u523b\u7684\u53d8\u5316\u3002"),(0,n.kt)("h2",{id:"55-\u5e73\u53f0\u4fe1\u7528"},"5.5 \u5e73\u53f0\u4fe1\u7528"),(0,n.kt)("p",null,"\u5e73\u53f0\u4fe1\u7528\u4e3b\u8981\u662f\u6307\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u7269\u6743\u5230\u5e73\u53f0\u8d44\u4ea7\u7684\u6620\u5c04\u4fe1\u7528\u4fdd\u8bc1\uff0c\u4f8b\u5982\u7ec4\u4ef6\uff0c\u6807\u51c6\u548c\u4f5c\u54c1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6295\u8d44\u8005\u548c\u521b\u4f5c\u7528\u6237\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u7c7b\u4f3c\u516c\u7ea6\u7684\u534f\u8bae\u673a\u5236\uff0c\u4fdd\u8bc1\u6295\u8d44\u8005\u6743\u76ca\uff0c\u4ee5\u53ca\u5efa\u7acb\u4e00\u4e9b\u8282\u7ea6\u65e0\u63a7\u5236\u4eba\u7ba1\u7406\u548c\u6cd5\u5f8b\u4e4b\u95f4\u7684\uff0c\u7c7b\u4f3c\u6cd5\u5f8b\u7684\u7ea6\u675f")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u672c\u8d28\u4e0a\u53ea\u80fd\u4fdd\u8bc1\u5b58\u5165\u533a\u5757\u94fe\u7684\u6570\u636e\u7684\u4e0d\u53ef\u7be1\u6539\u6027\uff0c\u6240\u4ee5\u8fd9\u91cc\u9762\u5c31\u5b58\u5728\u6f0f\u6d1e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u5728\u533a\u5757\u94fe\u4e2d\u7684\u6570\u636e\u662f\u65e0\u6cd5\u4fdd\u8bc1\u4fe1\u7528\u7684")),(0,n.kt)("p",null,"\u800c\u8fd9\u6837\u7684\u6570\u636e\u662f\u5f88\u591a\u7684\uff0c\u800c\u4e14\u51e0\u4e4e\u4e0d\u53ef\u80fd\u7edd\u5bf9\u4fdd\u8bc1\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u4e0a\uff0c\u56e0\u4e3a\u533a\u5757\u94fe\u7684\u6838\u5fc3\u7684\u5206\u5e03\u5f0f\u5b58\u50a8\u548c\u8ba1\u7b97\uff0c\u5c31\u5bfc\u81f4\u4eba\u7c7b\u4fe1\u606f\u51e0\u4e4e\u4e0d\u53ef\u80fd\u5c06\u6240\u6709\u4fe1\u606f\u8fc1\u79fb\u81f3\u533a\u5757\u94fe\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u4e0a\u4ea4\u6613\u7684\u6570\u503c\u867d\u7136\u662f\u7edd\u5bf9\u4e0d\u53ef\u7be1\u6539\u7684\uff0c\u4f46\u662f\u5176\u6570\u503c\u5bf9\u5e94\u5b9e\u7269\u7684\u6620\u5c04\u5173\u7cfb\u5219\u662f\u9700\u8981\u7b2c\u4e09\u65b9\u4fe1\u7528\u673a\u6784\u62c5\u4fdd\u7684\uff0c\u5426\u5219\u8fd9\u4e9b\u6570\u636e\u4e5f\u662f\u53ef\u80fd\u5b58\u5728\u6b3a\u9a97\u7684\uff0c\u800c\u5b9e\u9645\u4e0a\u4f20\u7edf\u7684\u5546\u4e1a\u6b3a\u8bc8\u4e2d\uff0c\u6570\u636e\u8d26\u672c\u672c\u8eab\u4f5c\u5047\u53ef\u80fd\u53cd\u800c\u662f\u8c28\u614e\u7684\uff0c\u56e0\u4e3a\u8fd9\u90e8\u5206\u6bd4\u8f83\u5bb9\u6613\u88ab\u67e5\u51fa\u6765\uff0c\u5c24\u5176\u73b0\u5728\u672c\u8eab\u6570\u5b57\u5316\u4e5f\u6bd4\u8f83\u591a\u4e86\uff0c\u4f46\u662f\u4f5c\u5047\u7684\u5f80\u5f80\u90fd\u5728\u4e8e\u8fd9\u4e9b\u8d44\u4ea7\u6240\u6807\u6ce8\u7684\u6570\u5b57\u8ddf\u5b9e\u9645\u4ef7\u503c\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u8fd9\u5374\u662f\u6700\u96be\u7ba1\u7406\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4e4e\u5927\u90e8\u5206\u9700\u8981\u5360\u7528\u5927\u91cf\u5b58\u50a8\u7684\u6570\u636e\u5f88\u96be\u5b58\u50a8\u5728\u533a\u5757\u94fe\uff0c\u4f8b\u5982\u628a\u4f60\u7f51\u76d8\u7684\u7167\u7247\u6570\u636e\u653e\u5230\u533a\u5757\u94fe\uff0c\u4f60\u627f\u62c5\u5f97\u8d77\u8fd9\u4e2a\u6210\u672c\u5417"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\uff0c\u8ba1\u7b97\u7a0b\u5e8f\u4e5f\u662f\u4e00\u4e2a\u4fe1\u7528\u95ee\u9898\u7684\u6765\u6e90\uff0c\u5982\u679c\u4f60\u7684\u8ba1\u7b97\u4e0d\u662f\u5728\u533a\u5757\u94fe\u4e0a\u7684\uff0c\u7406\u8bba\u4e0a\u8bf4\u8fd9\u4e5f\u662f\u5bb9\u6613\u51fa\u95ee\u9898\u7684\uff0c\u4f46\u662f\u8ba1\u7b97\u653e\u5728\u533a\u5757\u94fe\u51e0\u4e4e\u4e5f\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u6bd4\u5982\u4f60\u5f97\u628a\u6240\u6709\u4ee3\u7801\u8f6c\u5316\u6587\u533a\u5757\u94fe\u865a\u62df\u673a\u7684\u4ee3\u7801\uff0c\u53e6\u5916\u662f\u9762\u4e34\u6e90\u4ee3\u7801\u5f00\u6e90\u7684\u95ee\u9898\uff0c\u4ee5\u53ca\u540c\u6837\u7684\u5927\u89c4\u6a21\u8ba1\u7b97\u6027\u80fd\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7edd\u5bf9\u4fe1\u7528\u5b89\u5168\u7684\u533a\u5757\u94fe\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u903b\u8f91\u8ba1\u7b97\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u4ea7\u539f\u751f\u5c31\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u6240\u4ee5\u4e0d\u6d89\u53ca\u4efb\u4f55\u94fe\u5916\u7684\u5173\u8054\u548c\u64cd\u4f5c")),(0,n.kt)("p",null,"RealityIS\u5e73\u53f0\u4e2d\u7684\u6240\u6709\u8d44\u6e90\u539f\u751f\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u53ea\u8981\u4fdd\u8bc1\u597d\u533a\u5757\u94fe\u4fe1\u606f\u5230\u6570\u5b57\u8d44\u4ea7\u7684\u6620\u5c04\uff0c\u5c31\u80fd\u66f4\u5b89\u5168\u3002"),(0,n.kt)("h3",{id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae"},"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae"),(0,n.kt)("h3",{id:"552-\u4ee3\u5e01\u534f\u8bae"},"5.5.2 \u4ee3\u5e01\u534f\u8bae"),(0,n.kt)("h2",{id:"56-\u73b0\u5b9e\u5e94\u7528"},"5.6 \u73b0\u5b9e\u5e94\u7528"),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u62df\u548c\u8ddf\u8e2a\u771f\u5b9e\u4e16\u754c\u7684\u67d0\u4e9b\u89c4\u5f8b\uff0c\u6765\u89e3\u51b3\u73b0\u5b9e\u95ee\u9898"),(0,n.kt)("h2",{id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"},"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"),(0,n.kt)("h3",{id:"571-\u73a9\u5bb6\u9053\u5fb7"},"5.7.1 \u73a9\u5bb6\u9053\u5fb7"),(0,n.kt)("p",null,"\u53d1\u884c\u4ee3\u5e01\uff0c\u5982\u679c\u957f\u65f6\u95f4\u6ca1\u6709\u88ab\u4e3e\u62a5\u6709\u4e0d\u826f\u793e\u533a\u884c\u4e3a\u7684\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\uff0c\u901a\u8fc7\u5229\u76ca\u6765\u4fc3\u8fdb\u793e\u4f1a\u7684\u98ce\u6c14\u3002"),(0,n.kt)("h3",{id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1"},"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1"),(0,n.kt)("h2",{id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"},"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"),(0,n.kt)("h3",{id:"581-\u793e\u4ea4\u5206\u4eab"},"5.8.1 \u793e\u4ea4\u5206\u4eab"),(0,n.kt)("p",null,"\u7531\u4e8e\u793e\u4ea4\u5206\u4eab\u662f\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u53ef\u4ee5\u8ba9\u670b\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\u8f6c\u6362\u4e3aRealityCoin\u5956\u52b1"),(0,n.kt)("h3",{id:"582-\u53c2\u4e0e\u5185\u6d4b"},"5.8.2 \u53c2\u4e0e\u5185\u6d4b"),(0,n.kt)("p",null,"\u63d0\u4ea4bug\u6216\u8005\u5efa\u8bae\uff0c\u83b7\u5f97\u5f00\u53d1\u5546\u63a5\u53d7\u7684\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\u5956\u52b1\u3002"),(0,n.kt)("h2",{id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"},"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u4e2d\uff0c\u6e38\u620f\u4ee3\u5e01\u672c\u8eab\u4e0d\u4f1a\u5f71\u54cd\u5230\u6e38\u620f\u672c\u8eab\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u4ee3\u5e01\u5f62\u6210\u4e00\u79cd\u66f4\u5927\u8303\u56f4\u7684\u4e1c\u897f\uff0c\u4ed6\u53ef\u80fd\u5bf9\u6e38\u620f\u672c\u8eab\u9020\u6210\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u4f8b\u5982\u4ee3\u5e01\u53ef\u80fd\u4f1a\u8d2c\u503c\u6216\u8005\u5347\u503c\uff0c\u8fd9\u5728\u4f20\u7edf\u6e38\u620f\u5185\u662f\u4e0d\u4f1a\u53d1\u751f\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u65f6\u5019\u4ee3\u5e01\u7ecf\u6d4e\u7684\u4e00\u4e9b\u6839\u672c\u6027\u7f3a\u9677\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4e0d\u7a33"),(0,n.kt)("li",{parentName:"ul"},"\u516c\u4fe1\u529b\u4e0d\u5f3a"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u63a5\u53d7\u8303\u56f4\u6709\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u4ea7\u751f\u8f83\u5927\u7684\u8d1f\u5916\u90e8\u6027")),(0,n.kt)("p",null,"\u5b83\u5f88\u96be\u901a\u8fc7\u516c\u4f17\u548c\u5e02\u573a\u7684\u68c0\u9a8c\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u4e0d\u7ba1\u91c7\u7528\u7684\u6280\u672f\u6709\u591a\u5148\u8fdb\uff0c\u91c7\u7528\u8fd9\u7c7b\u52a0\u5bc6\u6570\u5b57\u5e01\u4f5c\u4e3a\u201c\u8d27\u5e01\u201d\uff0c\u4ecd\u662f\u8d70\u56de\u5934\u8def\uff0c\u662f\u56de\u5f52\u4e00\u79cd\u843d\u540e\u7684\u8d27\u5e01\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u4e9b\u7f3a\u70b9\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u50cf\u4f20\u7edf\u6e38\u620f\u4e00\u6837\uff0c\u5c06\u8d27\u5e01\u5c5e\u6027\u63a7\u5236\u5728\u6e38\u620f\u6216\u8005\u5e73\u53f0\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u4e25\u683c\u63a7\u5236\u6295\u673a\u884c\u4e3a\u5e26\u6765\u7684\u5f71\u54cd")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7406\u5ff5\u5b9e\u9645\u4e0a\u4f7f\u6211\u4eec\u5728\u4f7f\u7528\u4ee5\u533a\u5757\u94fe\u4e3a\u5f88\u7684\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u5b57\u7ecf\u6d4e\u65b9\u9762\u63d0\u51fa\u4e24\u4e2a\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u4e2d\u5fc3\u5316\uff0c\u662f\u7528\u6765\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\u548c\u4e2a\u4eba\u9690\u5f0f\uff0c\u662f\u7528\u6237\u7684\u5ba2\u89c2\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u8d27\u5e01\u7684\u884c\u4e3a\uff0c\u66f4\u591a\u662f\u5c11\u6570\u6295\u673a\u8005\u7684\u9700\u6c42\uff0c\u800c\u4e0d\u662f\u5e7f\u5927\u7528\u6237\u7684\u9700\u6c42\uff0c\u5f53\u7136\u4ee3\u5e01\u7ecf\u6d4e\u6709\u4e00\u5b9a\u7684\u4f18\u52bf\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u8fd9\u90e8\u5206\u63a7\u5236\u5728RealityIS\u5e73\u53f0\u5185\u90e8\uff0c\u800c\u4e0d\u4f1a\u50cf\u5176\u4ed6\u6570\u5b57\u8d27\u5e01\u4e00\u6837\u76ee\u6807\u4e3a\u901a\u7528\u7684\u4ef7\u503c\u4ea4\u6362\u65b9\u5f0f\u3002")),(0,n.kt)("h2",{id:"510-\u67b6\u6784\u7f3a\u9677"},"5.10 \u67b6\u6784\u7f3a\u9677"),(0,n.kt)("h3",{id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"},"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u516c\u94fe\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u548c\u8ba1\u7b97\u5b89\u5168\uff0c\u5bf9\u8282\u70b9\u7ed9\u4e88\u4e86\u8d85\u989d\u7684\u6fc0\u52b1\uff0c\u8fd9\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6316\u77ff\u4ea7\u751f\u7684\u539f\u59cb\u4ee3\u5e01\uff0c\u5e76\u4e14\u8fd9\u662f\u4ee3\u5e01\u7684\u539f\u751f\u548c\u552f\u4e00\u7684\u53d1\u884c\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u7684\u624b\u7eed\u8d39")),(0,n.kt)("p",null,"\u7531\u4e8e\u8282\u70b9\u6570\u91cf\u5e9e\u5927\uff0c\u4ee5\u53ca\u8282\u70b9\u9700\u8981\u6301\u7eed\u7ef4\u6301\u4e0b\u53bb\uff0c\u56e0\u6b64\u533a\u5757\u94fe\u8282\u70b9\u7684\u6210\u672c\u662f\u6781\u5ea6\u9ad8\u6602\u7684\uff0c\u5b83\u8fdc\u8fdc\u8d85\u51fa\u4e86\u8ba1\u7b97\u8d44\u6e90\u672c\u8eab\u4f5c\u4e3a\u4e91\u8ba1\u7b97\u57fa\u7840\u8bbe\u65bd\u7684\u6210\u672c\uff0c\u5b83\u8fd8\u5728\u53e6\u5916\u4e24\u4e2a\u5c42\u9762\u63a7\u5236\u7740\u8fd9\u79cd\u9ad8\u6602\u7684\u6fc0\u52b1\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u662f\u9700\u8981\u6c38\u4e45\u7ef4\u6301\u4e0b\u53bb\u7684\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u4e2a\u6301\u7eed\u9ad8\u6602\u6210\u672c")),(0,n.kt)("p",null,"\u5e76\u4e14\uff0c\u8282\u70b9\u867d\u7136\u8d5a\u53d6\u4e86\u5927\u91cf\u7684\u6fc0\u52b1\uff0c\u4f46\u662f\u5b83\u4eec\u786e\u5b9e\u6574\u4e2a\u4f53\u7cfb\u91cc\u6700\u6ca1\u6709\u521b\u9020\u6027\u7684\u52b3\u52a8\u4ed8\u51fa\uff0c\u76f8\u5bf9\u4e8e\u90a3\u4e9b\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ef4\u62a4\u5e73\u53f0\u8fed\u4ee3\u5f00\u53d1\u5347\u7ea7\u7684\u5f00\u53d1\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u90a3\u4e9b\u771f\u6b63\u521b\u9020\u52b3\u52a8\u4ef7\u503c\u7684\u751f\u6210\u8005")),(0,n.kt)("p",null,"\u8fd9\u90fd\u662f\u65e2\u4e0d\u79d1\u5b66\u7684\uff0c\u6781\u4e0d\u5408\u7406\u7684\uff0c\u90a3\u4e9b\u4f20\u7edf\u884c\u4e1a\u771f\u6b63\u4ece\u4e8b\u521b\u9020\u52b3\u52a8\u548c\u4ef7\u503c\u751f\u6210\u7684\u4ece\u4e1a\u8005\uff0c\u5b83\u4eec\u672c\u8d28\u4e0a\u6ca1\u6709\u4ece\u533a\u5757\u94fe\u83b7\u5f97\u592a\u591a\u597d\u5904\uff08\u9664\u4e86\u54ea\u4e9b\u81ea\u5e26\u64cd\u4f5c\u5c5e\u6027\u7684NFT\u4e4b\u7c7b\u7684\u521b\u4f5c\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u771f\u6b63\u751f\u6210\u5546\u54c1\u7684\u751f\u6210\u8005\uff0cTA\u7684\u7269\u54c1\u4ea4\u6613\u88ab\u8feb\u4f7f\u7528\u6570\u5b57\u8d27\u5e01\u8fdb\u884c\u7ed3\u7b97\uff0c\u8fd9\u5c31\u8feb\u4f7f\u4ed6\u4eec\u53bb\u8d2d\u4e70\u533a\u5757\u94fe\u539f\u751f\u6570\u5b57\u8d27\u5e01\uff0c\u8fd9\u5728\u5bfc\u81f4\u6570\u5b57\u8d27\u5e01\u6d41\u901a\u7684\u540c\u65f6\uff0c\u8feb\u4f7f\u8fd9\u4e9b\u4eba\u9762\u4e34\u7740\u6570\u5b57\u8d27\u5e01\u7684\u98ce\u9669\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u4ed6\u4eec\u7684\u8d2d\u4e70\u6570\u5b57\u8d27\u5e01\u7684\u672c\u8eab\u5c31\u627f\u62c5\u4e86\u65e9\u671f\u4ee5\u53ca\u6570\u5b57\u8d27\u5e01\u589e\u503c\u9020\u6210\u7684\u6ea2\u4ef7\u6210\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\u662f\uff0c\u7531\u4e8e\u8fd9\u79cd\u6ea2\u4ef7\u7684\u98ce\u9669\uff0c\u4ed6\u4eec\u638c\u63e1\u7684\u6570\u5b57\u8d27\u5e01\u9762\u4e34\u7740\u8d2c\u503c\u7684\u98ce\u9669")),(0,n.kt)("p",null,"\u800c\u8fd9\u79cd\u98ce\u9669\u51e0\u4e4e\u662f\u7edd\u5bf9\u5b58\u5728\u7684\uff0c\u56e0\u4e3a\u6570\u5b57\u8d27\u5e01\u603b\u4f53\u4e0a\u5e76\u4e0d\u662f\u8ddf\u7ecf\u6d4e\u751f\u6210\u6302\u94a9\u7684\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u7684\u989d\u5ea6\u5f88\u4f4e\uff0c\u4f46\u662f\u5b83\u4eec\u51e0\u4e4e\u5360\u636e\u4e00\u6837\u7684\u8ba1\u7b97\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u5b58\u5728\u5927\u91cf\u7684\u6295\u673a\u884c\u4e3a")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u6295\u673a\u884c\u4e3a\u4e0e\u771f\u5b9e\u7ecf\u6d4e\u884c\u4e3a\u6df7\u5728\u4e00\u8d77\uff0c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u751f\u6001\u6781\u4e0d\u5408\u7406\uff0c\u5bfc\u81f4\u6781\u4e0d\u7a33\u5b9a\uff0c\u98ce\u9669\u6781\u5927\u3002"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u5728\u5c06\u533a\u5757\u94fe\u7684\u597d\u5904\uff0c\u5f88\u5c11\u6709\u4eba\u4f1a\u53bb\u63ed\u793a\u8fd9\u4e9b\u98ce\u9669\uff0c\u4e5f\u5f88\u5c11\u6709\u53c2\u4e0e\u8005\u771f\u6b63\u4e86\u89e3\u8fd9\u4e9b\u98ce\u9669\u3002"),(0,n.kt)("h3",{id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"},"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"),(0,n.kt)("p",null,"\u5f53\u7136\u5bf9\u4e8e\u77ff\u5de5\u548cICO\u7684\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u56e0\u4e3a\u4ed6\u4eec\u7684\u6295\u5165\u662f\u53ef\u80fd\u6ca1\u6709\u4efb\u4f55\u56de\u62a5\u7684\uff0c\u56e0\u6b64\u65e9\u671f\u9762\u4e34\u7740\u6781\u5927\u7684\u98ce\u9669\uff0c\u80af\u5b9a\u662f\u9700\u8981\u6bd4\u6b63\u5e38\u66f4\u5927\u4e00\u4e9b\u7684\u7ecf\u6d4e\u56de\u62a5\u4f5c\u4e3a\u4ee3\u4ef7\uff0c\u5426\u5219\u4ed6\u4eec\u5c31\u4e0d\u4f1a\u5192\u8fd9\u4e2a\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u6fc0\u52b1\u7c7b\u4f3c\u521b\u4e1a\u7684\u673a\u5236\u3002\u4ed6\u4eec\u7684\u65e9\u671f\u884c\u4e3a\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u7c7b\u4f3c\u53c2\u4e0e\u521b\u4e1a\u3002"),(0,n.kt)("h1",{id:"6-applications"},"6. Applications"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u4ea7\u54c1\u8981\u601d\u80033D\u5e26\u6765\u7684\u4ef7\u503c\u589e\u76ca\uff0c\u800c\u4e0d\u662f\u7b80\u5355\u628a\u4e1c\u897f\u642c\u52303D\u6216XR"),(0,n.kt)("p",null,"1\u3001\u751f\u65e5\u5899"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env1",src:l(8250).Z,width:"1744",height:"1034"})),(0,n.kt)("p",null,"\u597d\u53cbA\u7528AR\u624b\u673a\u6216\u773c\u955c\u627e\u4e00\u5757\u5899\u9762\u8fdb\u884c\u521b\u4f5c\uff0c\u5176\u4e2d\u53ef\u4ee5\u628a\u80cc\u666f\u56fe\u8272\uff0c\u7eaf\u8272\u6216\u67d0\u79cdpattern\uff0c\u7136\u540e\u5728\u5899\u4e0a\u8bbe\u7f6e\u88c5\u9970\u548c\u5b9a\u5236\u795d\u798f\uff0c\u5176\u4e2d\u67d0\u4e9b\u5143\u7d20\u5305\u542b\u4e00\u4e9b\u4ea4\u4e92\uff1b\u6700\u540e\u5c06\u7ed3\u679c\u53d1\u7ed9\u597d\u53cbB\uff0c\u597d\u53cbB\u627e\u4e00\u4e2a\u7acb\u9762\u6216\u8005\u7eaf\u865a\u62df\u7684\u65b9\u5f0f\u5c31\u53ef\u4ee53D\u67e5\u770b\uff0c\u5982\u679c\u662f\u7acb\u9762\uff0c\u4e5f\u6839\u636e\u8bed\u4e49\u8bc6\u522b\uff0c\u5c06\u80cc\u666f\u5899\u6362\u8272"),(0,n.kt)("p",null,"\u53ef\u4ee5\u70b9\u51fb\u4ea4\u4e92\u6709\u751f\u65e5\u76f8\u5173\u7684\u6d41\u7a0b\uff0c\u4f8b\u5982\u70b9\u8721\u70db\uff0c\u51fa\u73b0\u7279\u6548\uff0c\u5531\u751f\u65e5\u6b4c\uff0c\u73b0\u5b9e\u7279\u5b9a\u7684\u4fe1\u606f\uff0c\u597d\u53cb\u4e00\u8d77\u56f4\u89c2\u7b49\u7b49"),(0,n.kt)("p",null,"2\u3001\u4e8c\u7ef4\u5899\u9762\u6d82\u9e26\u7c7b\u521b\u4f5c"),(0,n.kt)("p",null,"\u968f\u4fbf\u627e\u4e00\u5757\u7a7a\u5730\u5730\u9762\uff0c\u4ece\u5730\u9762\u62c9\u4e00\u4e2a\u5782\u76f4\u9762\uff0c\u5c31\u53ef\u4ee5\u8fdb\u884c\u5899\u9762\u827a\u672f\u521b\u4f5c"),(0,n.kt)("p",null,"\u6709\u4ea4\u4e92\u7684\u6d82\u9e26"),(0,n.kt)("p",null,"3\u30013D\u8131\u53e3\u79c0"),(0,n.kt)("p",null,"4\uff0c\u79fb\u52a8\u7684\u7075\u611f\u6c1b\u56f4"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env",src:l(5543).Z,width:"3344",height:"1114"})),(0,n.kt)("p",null),"5, \u505a\u4e00\u4e2a\u89e3\u5bc6\u6e38\u620f",(0,n.kt)("p",null,"![00 0O R]","(resources/00 0O R.gif)"),(0,n.kt)("p",null,"\u53ef\u80fd\u5305\u542b\u79fb\u52a8\u62fc\u56fe\uff0c\u5305\u542b\u62e8\u4e00\u5b9a\u7684\u987a\u5e8f\u70b9\u4eae\u6309\u94ae\uff0c\u6240\u4ee5\u9700\u8981\u5305\u542b\u4e00\u4e9b\u7279\u5b9a\u73a9\u6cd5\u7c7b\u578b\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"6\u3001\u77e5\u8bc6\u8bb2\u89e3\u7c7b\u4f1a\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6a21\u578b\uff0c\u6709\u4e9b\u4ea4\u4e92\u70b9\u51fb\u5c55\u793a\uff0c\u666e\u901a\u4eba\u53ef\u4ee5\u5236\u4f5c\uff0c\u4e0d\u53ea\u662f\u5b98\u65b9\u5236\u4f5c\u5c11\u91cf"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u623f\u95f4"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u7684\u865a\u62df\u804a\u5929\u7c7b\u573a\u666f\uff0c\u4e00\u822c\u90fd\u662f\u5b98\u65b9\u63d0\u4f9b\u7684\u5c11\u6570\u56fa\u5b9a\u573a\u666f\uff0c\u6216\u8005\u5141\u8bb8\u4e00\u5b9a\u7684\u5b9a\u5236\u6027\uff0c\u4f46\u662f\u901a\u5e38\u5b9a\u5236\u80fd\u529b\u6709\u9650\uff0c\u6bd4\u5982\u51e0\u4f55\u662f\u56fa\u5b9a\u7684\uff0c\u53ea\u5141\u8bb8\u6539\u6750\u8d28\uff0c\u6216\u8005\u53ea\u5141\u8bb8\u589e\u51cf\u90e8\u4ef6\uff0c\u6216\u8005\u79fb\u52a8\u4f4d\u7f6e"),(0,n.kt)("p",null,"\u5728RealityWorld \u91cc\u7528\u6237\u4e5f\u53ef\u4ee5\u521b\u5efa\u66f4\u52a0\u4e30\u5bcc\u591a\u6837\u7684\u804a\u5929\u73af\u5883\uff0c\u7136\u540e\u9080\u8bf7\u7528\u6237\u8fdb\u6765\u804a\u5929"),(0,n.kt)("p",null,"8\u3001\u4e2a\u4eba\u6536\u85cf\u9986"),(0,n.kt)("p",null,"\u6709\u4e00\u4e2a\u81ea\u5df1\u7684\u623f\u95f4\u6216\u8005\u7279\u5b9a\u7684\u573a\u666f\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u8bbe\u8ba1\u7684\uff0c\u6709\u81ea\u5df1\u7684\u6536\u85cf\uff0c\u53ef\u4ee5\u52a0\u5165\u4e00\u4e9b\u81ea\u5df1\u7684\u73a9\u6cd5\uff0c\u597d\u53cb\u53c2\u89c2\u53ef\u4ee5\u8d60\u9001Creation, Part"),(0,n.kt)("p",null,"9\u3001\u53bb\u4e00\u4e2a\u6d6a\u6f2b\u7684Creation \u4e2d\u7ea6\u4f1a"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&session=sessionid"},"creation.id/=qwe&session=sessionid")),(0,n.kt)("p",null,"10, \u57fa\u4e8e\u73b0\u5b9e\u7684\u521b\u4f5c"),(0,n.kt)("video",{src:"resources/2022-04-04 08.55.06.mov"}),(0,n.kt)("p",null,"\u73b0\u5b9e\u63d0\u4f9b\u7c97\u7565\u7684\u51e0\u4f55\u4e0e\u53c2\u8003\u6750\u8d28\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("p",null,"11\u3001"),(0,n.kt)("img",{src:"resources/APPLE ARCADE.jpg",alt:"APPLE ARCADE"}),(0,n.kt)("p",null,"12\u3001\u8fde\u7eed\u5267\uff0c\u6574\u4e2a\u5f00\u53d1\u5468\u671f\u5747\u53ef\u53d1\u5e03"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5173\u5361\u6216\u8005\u6545\u4e8b\u4e00\u70b9\u4e00\u70b9\u66f4\u65b0\uff0c\u6bcf\u6b21\u73a9\u5bb6\u73a9\u4e00\u5c0f\u6bb5\uff0c\u50cf\u8fde\u7eed\u5267\u4e00\u6837\uff0c\u751a\u81f3\u4e16\u754c\u90fd\u662f\u4e00\u70b9\u4e00\u70b9\u6784\u5efa\uff1b\u6216\u8005\u6709\u70b9\u89c2\u770b\u521b\u4f5c\u8fc7\u7a0b\uff0c\u8fc7\u53bb\u6574\u4e2a\u6e38\u620f\u9700\u8981\u4e00\u6b21\u6027\u505a\u5b8c\u518d\u8d70\u53d1\u5e03\u6d41\u7a0b\uff0c\u8fd9\u79cd\u53ef\u4ee5\u5b9e\u65f6\u628a\u4e2d\u95f4\u521b\u4f5c\u8fc7\u7a0b\u5171\u4eab\u51fa\u6765\uff0c\u53ef\u4ee5\u53cd\u9988\uff0c\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u4e2d\u95f4\u4efb\u4f55\u72b6\u6001\u90fd\u53ef\u4ee5\u53d1\u5e03\uff0c\u800c\u4e0d\u662f\u8981\u7559\u5230\u6700\u540e\u53ea\u505a\u5b8c\u4e86\u518d\u53bb\u5904\u7406\u53d1\u5e03\u76f8\u5173\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e9b\u4e8b\u60c5\u5bfc\u81f4\u4e0d\u80fd\u63d0\u524d\u53d1\u5e03\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u4e00\u79cd\u6d41\u7a0b\u4e0a\u7684\u521b\u65b0\uff0c\u5e26\u6765\u5168\u65b0\u7684\u6a21\u5f0f"),(0,n.kt)("p",null,"13\u3001story telling"),(0,n.kt)("p",null,"![Pasted Graphic]","(resources/Pasted Graphic.jpg)"),(0,n.kt)("p",null,"*Like a well-executed joke, the pleasure is in the experience more than it is in the retelling. You have to be there."),(0,n.kt)("p",null,"Super Brothers \u5f00\u521b\u4e86\u4e00\u79cd\u53d9\u4e8b+\u4ea4\u4e92\u7684\u975e\u5e38\u4f18\u79c0\u7684\u4f53\u9a8c\uff0c\u76f8\u5bf9\u4e8e\u5355\u7eaf\u6e38\u620f\uff0c\u4ed6\u7684\u6545\u4e8b\u7ebf\u8ba9\u6574\u4e2a\u4e16\u754c\u89c2\u5448\u73b0\u66f4\u5b8c\u6574\uff0c\u76f8\u5bf9\u4e8e\u7535\u5f71\uff0c\u4ed6\u7684\u4ea4\u4e92\u53ef\u4ee5\u8ba9\u6545\u4e8b\u7684\u4f53\u9a8c\u66f4\u771f\u5b9e"),(0,n.kt)("p",null,"\u521b\u4f5c\u90e8\u5206\u6d89\u53ca\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u5747\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("p",null,"\u6545\u4e8b\u7684\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73af\u5883\uff0c\u7269\u7406\u73af\u5883\u901a\u5e38\u662f\u9759\u6001\u7684\uff0c\u4f46\u4e00\u4e9b\u91cd\u8981\u7269\u54c1\u901a\u5e38\u662f\u52a8\u6001\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4fe1\u606f\uff0c\u9700\u8981\u63a2\u7d22\u4e0d\u540c\u7684\u5730\u65b9\u4e86\u89e3\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u4e92\uff0c\u5bf9\u4fe1\u606f\u7684\u63a2\u7d22\u662f\u4e00\u79cd\u4ea4\u4e92\uff0c\u5176\u4ed6\u6bd4\u5982\u89e3\u5bc6\uff0c\u5f00\u52a8\u673a\u5173\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u4e16\u754c\u72b6\u6001")),(0,n.kt)("p",null,"14\u3001\u4e92\u52a8\u5c0f\u8bf4/\u6545\u4e8b"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u5c0f\u8bf4\u7684\u57fa\u7840\u4e0a\uff0c2D+3D\uff0c\u5148\u6587\u5b57\u4ecb\u7ecd\u57fa\u672c\u5267\u60c5\u548c\u80cc\u666f\uff0c\u7136\u540e\u8fdb\u53bb3D\u573a\u666f\uff0c\u5177\u6709\u6c89\u6d78\u611f\uff0c\u800c\u4e14\u56e0\u4e3a\u524d\u9762\u7684\u6587\u5b57\u5267\u60c5\uff0c\u5bf9\u573a\u666f\u7684\u63a2\u7d22\u4f1a\u66f4\u878d\u5165\uff0c\u7136\u540e\u6761\u4ef6\u662f\u9700\u8981\u57283D\u573a\u666f\u4e2d\u5b8c\u6210\u4e00\u5b9a\u7684\u4efb\u52a1\u624d\u80fd\u8fdb\u5165\u4e0b\u4e00\u7ae0\uff0c\u628a\u6e38\u620f\u7684\u673a\u5236\u878d\u5165\u8fdb\u6765\uff0c\u6e38\u620f\u7ed3\u5408\u6587\u5b57\u5267\u60c5\uff0c\u5f25\u8865\u4e86\u7eaf\u6e38\u620f\u63a2\u7d22\u9700\u8981\u8bdd\u8d39\u5927\u91cf\u65f6\u95f4\uff0c\u5e76\u4e14\u5267\u60c5\u6bd4\u8f83\u96f6\u788e\u7684\u611f\u89c9"),(0,n.kt)("h1",{id:"7-\u6838\u5fc3\u53c2\u8003\u67b6\u6784"},"7. \u6838\u5fc3\u53c2\u8003\u67b6\u6784"),(0,n.kt)("p",null,"\u672c\u6587\u4ecb\u7ecd\u5bf9Reality World\u6709\u5f71\u54cd\u6216\u8005\u53ef\u4ee5\u53c2\u8003\u7684\u6280\u672f\u67b6\u6784\uff0c\u901a\u8fc7\u5206\u6790\u4ed6\u4eec\u7684\u6280\u672f\u539f\u7406\uff0c\u8bc6\u522b\u5176\u80cc\u540e\u7684\u6280\u672f\u67b6\u6784\uff0c\u4ee5\u53ca\u5176\u7279\u5b9a\u6280\u672f\u67b6\u6784\u8574\u85cf\u7740\u7684\u5bf9\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u751f\u6001\u7684\u5f71\u54cd\u3002\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u6280\u672f\u65b9\u6848\uff0c\u4e5f\u4f1a\u5206\u6790\u5176\u4f18\u7f3a\u70b9\uff0c\u4ee5\u53caReality World\u5e94\u8be5\u600e\u6837\u5438\u6536\u8fd9\u4e9b\u4f18\u70b9\uff0c\u6700\u91cd\u8981\u7684\uff0c\u6211\u4eec\u5e94\u8be5\u4ece\u8fd9\u4e9b\u67b6\u6784\u4e2d\u5f97\u5230\u4ec0\u4e48\u66f4\u6df1\u5c42\u6b21\u7684\u3001\u6709\u4ef7\u503c\u7684\u4fe1\u606f\u4ee5\u5e2e\u52a9Reality World\u6784\u5efa\u66f4\u597d\u7684\u6280\u672f\u67b6\u6784\u548c\u6280\u672f\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u53c2\u8003\u67b6\u6784\u6309\u5982\u4e0b\u7684\u683c\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u65b0\u601d\u60f3"),"\uff1a\u76f8\u5bf9\u4f20\u7edf\u6280\u672f\u65b9\u6848\uff0c\u8be5\u6280\u672f\u65b9\u6848\u8be5\u6765\u4ec0\u4e48\u65b0\u601d\u60f3\u6216\u65b0\u601d\u8def"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6280\u672f\u65b9\u6848"),"\uff1a\u5bf9\u76f8\u5173\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\u8fdb\u884c\u8868\u8ff0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e0d\u8db3\u53ca\u539f\u56e0"),"\uff1a\u5728Reality World\u7684\u65b9\u5411\u4e0a\uff0c\u8be5\u6280\u672f\u65b9\u6848\u6ca1\u6709\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u6216\u8005\u65e0\u6cd5\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff1b\u5176\u4e2d\u7684\u539f\u56e0\u662f\u56e0\u4e3a\u6280\u672f\u65b9\u6848\u7684\u4e0d\u8db3\uff0c\u8fd8\u662f\u4ea7\u54c1\u5b9a\u4f4d\u548c\u65b9\u5411\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u6bd4"),"\uff1aReality World\u4e0e\u5176\u5bf9\u6bd4\u5b58\u5728\u54ea\u4e9b\u5dee\u5f02\uff0c\u6216\u8005\u8bf4Reality World\u901a\u8fc7\u4ec0\u4e48\u6837\u7684\u6280\u672f\u65b9\u6848\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898")),(0,n.kt)("h2",{id:"71-\u6570\u636e\u683c\u5f0f"},"7.1 \u6570\u636e\u683c\u5f0f"),(0,n.kt)("h3",{id:"711-usd"},"7.1.1 USD"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"piper-banner",src:l(9641).Z,width:"2540",height:"1120"})),(0,n.kt)("p",null,"Universal Scene Description (USD) is the first publicly available software that addresses the need to robustly and scalably interchange and augment arbitrary 3D scenes that may be** ",(0,n.kt)("strong",{parentName:"p"},"composed")," **from many elemental assets."),(0,n.kt)("h4",{id:"7111-\u65b0\u601d\u60f3"},"7.1.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u534f\u4f5c"),"\uff1aUSD\u662f\u4e00\u4e2a\u4e3a\u4e86\u5927\u89c4\u6a21\u534f\u4f5c\u7684\u9ad8\u6027\u80fd\u53ef\u6269\u5c55\u8f6f\u4ef6\u5e73\u53f0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4ea4\u6362"),"\uff1aUSD\u63d0\u4f9b\u4e86\u5728\u591a\u4e2aDCC\u5de5\u5177\u4e4b\u95f4\u8fdb\u884c\u4ea4\u6362\u7684\u683c\u5f0f\uff0c\u8fd9\u901a\u8fc7\u5185\u7f6e\u7684\u4e00\u4e9bschema\u5b9e\u73b0\uff0c\u5305\u62ecgeometry\uff0cshading\uff0clighting\u548cphysics\u7b49"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5408\u6210"),"\uff1aUSD\u72ec\u7279\u7684\u5408\u6210\u7279\u6027\u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u6536\u76ca\uff0c\u6bd4\u5982\u80fd\u591f\u5c06\u4e30\u5bcc\u591a\u6837\u7684individual asset\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u8fd9\u5141\u8bb8\u591a\u4eba\u540c\u6b65\u534f\u4f5c\uff08\u800c\u4e0d\u4f1a\u5bfc\u81f4\u51b2\u7a81\uff09")),(0,n.kt)("p",null,"USD\u7684\u5408\u6210\u5f15\u64ce\u5bf9\u4efb\u4f55\u7279\u5b9a\u7684domain\u662f\u65e0\u611f\u77e5\u7684\uff08agnostic\uff09\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u88ab\u6269\u5c55\u6765\u7f16\u7801\uff08encode\uff09\u4e0e\u5408\u6210\u5176\u4ed6domain\u3002"),(0,n.kt)("h4",{id:"7112-\u6280\u672f\u65b9\u6848"},"7.1.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Schema")),(0,n.kt)("p",null,"Schema\u7528\u4e8e\u4eceUsdObject\u7f16\u8f91\u3001\u67e5\u8be2\u548c\u5b9a\u4e49\u7ed3\u6784\u5316\u7684\u6570\u636e\uff08structured data\uff09\uff0c\u5927\u90e8\u5206\u6838\u5fc3\u5e93\u4e2d\u7684Schema\u662fprim schemas\uff0c\u8fd9\u53c8\u5206\u4e3a\u4e24\u7c7b\uff1a1\uff09IsA Schemas\uff1b2\uff09API Schemas\uff1b3\uff09\u53e6\u5916\u8fd8\u6709\u4e00\u4e9bSchema\u79f0\u4e3aproperty schemas\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2aprim\u53ef\u4ee5\u8ba2\u9605\u591a\u4e2aAPI Schema\uff0c\u4f46\u662f\u53ea\u80fd\u8ba2\u9605\u4e00\u4e2aIsA Schema\uff0cUSD\u63d0\u4f9b\u4e86\u5de5\u5177\u7528\u4e8e\u751f\u6210Schema\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"IsA Schema")),(0,n.kt)("p",null,"IsA Schema\u7528\u4e8e\u5b9a\u4e49\u4e00\u4e2aprim\u5728Stage\u4e2d\u7684\u89d2\u8272\u6216\u8005\u76ee\u7684\uff0c\u5b83\u7ee7\u627f\u81eaUsdTyped\u7c7b\uff0c\u5e76\u53ef\u4ee5\u6307\u5b9atypeName metadata\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"UsdPrim::IsA()\n")),(0,n.kt)("p",null,"IsA Schema\u53ef\u4ee5\u662f\u5b9e\u7684\u6216\u8005\u865a\u7684\uff0c\u4f8b\u5982UsdGeomImageeable\u662f\u865a\u7684IsA Schema\uff0c\u800cUsdGeomMesh\u662f\u5b9e\u7684IsA Schema\uff0c\u56e0\u4e3a\u5b83\u5305\u542b\u4e00\u4e2aDefine()\u65b9\u9762\u53ef\u4ee5\u5b9a\u4e49typeName\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"API Schema")),(0,n.kt)("p",null,"API Schema\u662fprim\u7684Schema\uff0c\u5b83\u4eec\u7528\u4e8e\u63d0\u4f9b\u63a5\u53e3\uff08API\uff09\u5bf9prim\u76f8\u5173\u7684\u6570\u636e\u8fdb\u884c\u5b9a\u4e49\u3001\u7f16\u8f91\u548c\u63d0\u53d6\u3002\u5b83\u7ee7\u627f\u81eaUsdAPISchemaBase\u7c7b\u800c\u4e0d\u662fUsdTyped\uff0c\u56e0\u6b64\u76f8\u5bf9\u4e8e\u201cis a\u201d\u53ef\u4ee5\u79f0\u4e3a\u201chas a\u201d\u3002API Schema\u6709\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Non-applied API Schemas"),(0,n.kt)("li",{parentName:"ul"},"Single and Multiple Apply Schemas"),(0,n.kt)("li",{parentName:"ul"},"Multiple-apply schemas")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Model, component and Assembly")),(0,n.kt)("p",null,"Kind\u662f\u4e00\u4e2aprim-level\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u5b83\u76f8\u5bf9\u4e8eschema type\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\uff0c\u5bf9\u5e94\u4e8eModel Hierarchy\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"model\uff0ckind\u7684\u62bd\u8c61\u57fa\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"group"),(0,n.kt)("li",{parentName:"ul"},"assembly"),(0,n.kt)("li",{parentName:"ul"},"component"),(0,n.kt)("li",{parentName:"ul"},"subcomponenet")),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u66f4\u7ec6\u788e\u7684asset\u6216\u8005prim\uff0cmodel\u63d0\u4f9b\u4e00\u79cd\u5c06\u573a\u666f\u7ed3\u6784\u8fdb\u884c\u7ec6\u5206\u7684\u67b6\u6784\uff1bmodel\u7ed3\u6784\u4e5f\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u65b9\u5f0f\u7ba1\u7406\u548c\u5f15\u7528\u8d44\u6e90\uff0c\u5426\u5219\u5bf9\u66f4\u5bf9referenced assets\u5f15\u7528\u548c\u63a8\u7406\u4f1a\u53d8\u5f97\u590d\u6742\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "TreeSpruce" (\n kind = "component"\n)\n{\n # Geometry and shading prims that define a Spruce tree...\n\n def "Cone_1" (\n kind = "subcomponent"\n references = @Cones/PineConeA.usd@\n )\n {\n }\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Asset AssetInfo and Asset Resolution")),(0,n.kt)("p",null,"Asset\u662f\u80fd\u591f\u4f7f\u7528\u4e00\u4e2a\u5b57\u7b26\u4e32\u6807\u5fd7\u7b26\uff08via asset resolution\uff09\u88ab\u8bc6\u522b\u548c\u5b9a\u4f4d\u7684\u8d44\u6e90\uff0casset\u53ef\u4ee5\u662f\u4e00\u4e2a\u6587\u4ef6\uff0c\u6216\u8005\u591a\u4e2a\u6587\u4ef6\u7ec4\u5408\u5f15\u7528\u5f62\u6210\u7684\u5355\u4e2a\u6587\u4ef6\uff0c\u5b83\u4e00\u822c\u6709\u7248\u672c\u63a7\u5236\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e00\u4e9b\u5982asset dependency analysis\u7b49\u64cd\u4f5c\uff0cUSD\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7279\u6b8a\u7684\u5b57\u7b26\u4e32\u7c7b\u578b\uff0casset\uff08represents a resolvable path to another asset\uff09\uff0c\u8fd9\u6837\u6240\u6709\u7684metadata\u548cattributes\u90fd\u80fd\u88ab\u5f88\u5feb\u5730\u5b9a\u4f4d\u548c\u8bc6\u522b\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1USD\u7684composition arcs\u80fd\u591f\u7528\u6765\u5408\u6210\u573a\u666f\uff0c\u4f46\u662f\u4ed6\u4eec\u5e76\u4e0d\u65b9\u4fbf\u5728\u5185\u5b58\u4e2d\u5bf9\u8d44\u6e90\u8fdb\u884c\u5b9a\u4f4d\u548c\u8bc6\u522b\uff0cAssetInfo\u662fcomposition arcs\u7684\u8865\u5145\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "Forest_set" (\n assetInfo = {\n asset identifier = @Forest_set/usd/Forest_set.usd@\n string name = "Forest_set"\n }\n kind = "assembly"\n)\n{\n # Possibly deep namespace hierarchy of prims, with references to other assets\n}\n')),(0,n.kt)("p",null,"Asset Resolution\u662f\u5c06\u4e00\u4e2aasset path\u8f6c\u6362\u4e3a\u53ef\u4ee5\u5b9a\u4f4d\u4e00\u4e2a\u8d44\u6e90\u7684location\u7684\u8fc7\u7a0b\uff0c\u9ed8\u8ba4\u6309\u7167\u6587\u4ef6\u8def\u5f84\u8fdb\u884c\u641c\u7d22\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5b9a\u4f4d\u903b\u8f91\uff0c\u751a\u81f3\u8d44\u6e90\u4e0d\u4e00\u5b9a\u9700\u8981\u5b58\u50a8\u5728\u78c1\u76d8\u4e2d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Prim, Property and Attribute")),(0,n.kt)("p",null,"USD\u7684\u547d\u540d\u7a7a\u95f4\u4e3b\u8981\u7531\uff1aPrim\u548cProperty\u7ec4\u6210\uff0c\u5176\u4e2dPrim\u63d0\u4f9b\u5bf9\u5408\u6210\u573a\u666f\u7684\u7ec4\u7ec7\u548c\u7d22\u5f15\uff0c\u5b83\u662fUSD\u7684\u4e3b\u8981\u5bb9\u5668\uff0cprim\u53ef\u4ee5\u5305\u542b\u53e6\u4e00\u4e2aprim\uff0c\u5f62\u6210\u4e00\u4e2anamespace hierarchy Stage\uff1b"),(0,n.kt)("p",null,"Prim\uff0c\u8fde\u540c\u5b83\u7684indices\uff0c\u662fStage\u4e2d\u552f\u4e00\u88ab\u6301\u4e45\u5316\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff1b\u5bf9prim\u8fdb\u884c\u64cd\u4f5c\u7684\u63a5\u53e3\u7531UsdPrim\u7c7b\u63d0\u4f9b\uff1bprim\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2aschema typename\uff0c\u4e5f\u53ef\u4ee5\u63d0\u4f9b\u5982scene-level instancing, load/unload behavior, and deactivation\u7b49\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u800cProperty\u63d0\u4f9breal data\u3002\u6709\u4e24\u79cd\u7c7b\u578b\u7684Property\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Attribute"),(0,n.kt)("li",{parentName:"ul"},"Relationship")),(0,n.kt)("p",null,"Property\u53ef\u4ee5\u88ab\u7ec4\u6210\u65b0\u7684\u5c42\u7ea7\u4e14\u4e0d\u9700\u8981\u5f15\u5165\u65b0\u7684Prim\uff0c\u8fd9\u53ef\u4ee5\u63d0\u5347\u5185\u5b58\u7684\u5c40\u90e8\u6027\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#usda 1.0\n\nover MyMesh\n{\n rel material:binding = \n color3f[] primvars:displayColor = [ (.4, .2, .6) ]\n}\n")),(0,n.kt)("p",null,"Attribute\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Sphere "BigBall"\n{\n double radius = 100\n double radius.timeSamples = {\n 1: 100,\n 24: 500,\n }\n}\n')),(0,n.kt)("h4",{id:"7113-usdz"},"7.1.1.3 USDZ"),(0,n.kt)("p",null,"USD\u7684\u6838\u5fc3\u662f\u65b9\u4fbf\u5bf9\u4f17\u591a\u5206\u6563\u7684\u8d44\u6e90\u8fdb\u884c\u5408\u6210\uff0c\u5176\u4e2d\u8d44\u6e90\u5df2\u5206\u6563\u7684\u788e\u7247\u5f62\u5f0f\u5206\u5e03\uff0c\u8fd9\u79cd\u673a\u5236\u662f\u4e3a\u4e86\u7f16\u8f91\u6001\u8bbe\u8ba1\u7684\uff0c\u6b64\u65f6\u6574\u4e2a\u573a\u666f\u8fd8\u6ca1\u6709\u7f16\u8f91\u5b8c\u6210\uff0c\u9700\u8981\u7ee7\u7eed\u7ef4\u6301\u8fd9\u79cd\u5206\u6563\u7684\u72b6\u6001\uff1b\u7136\u800c\u5f53\u6211\u4eec\u7684\u5185\u5bb9\u5168\u90e8\u7f16\u8f91\u5b8c\u6210\u65f6\uff0c\u5206\u6563\u7684\u6587\u4ef6\u5374\u4e0d\u4fbf\u4e8e\u7ba1\u7406\uff0c\u6b64\u65f6\u7684\u6838\u5fc3\u9700\u6c42\u662f\u5206\u53d1\uff0c\u5b83\u8981\u6c42\u4e00\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"A single object, from marshaling and transmission perspectives"),(0,n.kt)("li",{parentName:"ol"},"Potentially streamable"),(0,n.kt)("li",{parentName:"ol"},"Usable without unpacking to a filesystem")),(0,n.kt)("p",null,"USDZ\u901a\u8fc7USD\u63d0\u4f9b\u7684FileFormat plugin\u673a\u5236\u5b9e\u73b0\uff1aUsdUsdzFileFormat"),(0,n.kt)("h4",{id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0"},"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0"),(0,n.kt)("p",null,"USD\u4e3b\u8981\u805a\u7126\u4e8e\u600e\u6837\u5bf9\u5408\u6210\u7684\u573a\u666f\u8fdb\u884c\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u56e0\u6b64\u5b83\u504f\u5411\u4e8e\u201clow-memory footprint, higher-latency data access\u201d \u800c\u4e0d\u662f \u201chigh-memory footprint, low-latency access to data\u201d\uff0c\u56e0\u4e3a\u5728\u5185\u5b58\u4e2d\u7f13\u5b58\u66f4\u591a\u6570\u636e\uff0c\u4f1a\u5f71\u54cd\u5bf9\u57fa\u4e8e\u5408\u6210\u7ed3\u6784\u573a\u666f\u7684\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u5e26\u6765\u590d\u6742\u6027\uff0c\u56e0\u4e3a\u5728\u7f16\u8f91\u9636\u6bb5\u4f1a\u6709\u66f4\u591a\u7684\u6570\u636e\u4fee\u6539\uff0c\u800c\u8fd0\u884c\u65f6\u9636\u6bb5\u5219\u57fa\u672c\u4e0a\u4fdd\u6301\u6570\u636e\u4e0d\u53d8\u3002\u6240\u4ee5USD\u4e0d\u592a\u9002\u5408\u8fd0\u884c\u65f6\u3002\u4f46\u662fUSD\u63d0\u4f9b\u4e86\u4e00\u4e9b\u4fbf\u5229\u548c\u5de5\u5177\uff08facilities\uff09\uff0c\u4f7f\u5f97\u5ba2\u6237\u7aef\u53ef\u4ee5\u5bf9UsdStage\u6784\u5efa\u4e00\u4e9b\u6269\u5c55\u6027\u7684\u7f13\u5b58\uff0c\u4ee5\u63d0\u4f9b\u5bf9USD\u6570\u636e\u7684\u4f4e\u5ef6\u65f6\u8bbf\u95ee\u3002"),(0,n.kt)("p",null,"USDZ\u4ece\u5206\u53d1\u7684\u89d2\u5ea6\u5bf9USD\u8fdb\u884c\u4e86\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0cUSD\u4e3b\u8981\u662f\u4e3a\u4e86\u5728DCC\u4e4b\u95f4\u8fdb\u884c\u6570\u636e\u4ea4\u6362\u548c\u534f\u540c\uff0c\u8fd9\u5168\u662f\u7f16\u8f91\u65f6\u7684\u9700\u6c42\uff0c\u6709\u5f88\u591a\u529f\u80fd\u672c\u8eab\u5bf9\u8fd0\u884c\u65f6\u6ca1\u6709\u4efb\u4f55\u7528\u5904\uff0c\u4f8b\u5982\u7531\u5927\u91cf\u7684\u788e\u7247\u7ec4\u5408\u5f62\u6210\u7684\u5927\u578b\u573a\u666f\u867d\u7136\u9002\u5408\u7f16\u8f91\u65f6\uff0c\u4f46\u662f\u5374\u4e0d\u5229\u4e8e\u8fd0\u884c\u65f6\u52a0\u8f7d\uff0c\u6240\u4ee5\u9700\u8981\u5728\u8fd0\u884c\u65f6\u5bf9USD\u8fdb\u884c\u4e00\u5b9a\u7684\u5b9a\u5236\uff0c\u4f8b\u5982\u662f\u5426\u4eceCore\u4e2d\u5220\u9664\u4e00\u4e9b\u6a21\u5757\uff0c\u6216\u8005\u53bb\u6389\u4e00\u4e9b\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6570\u5b57\u5185\u5bb9\u7684\u751f\u547d\u5468\u671f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\uff08USD"),(0,n.kt)("li",{parentName:"ul"},"\u5206\u53d1\uff08USDZ"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff08USDX\uff09")),(0,n.kt)("p",null,"\u9700\u8981\u5728USDZ\u57fa\u7840\u4e0a\u8fdb\u884c\u8fd0\u884c\u65f6\u6539\u9020\uff0c\u4f7f\u5176\u5206\u53d1\u5f97\u662f\u9002\u5408\u8fd0\u884c\u6001\u5f97\u683c\u5f0f\uff0c\u6240\u4ee5\u53ef\u4ee5\u9690\u85cf\u5206\u53d1\u6001\uff0c\u53ea\u9700\u8981\u7f16\u8f91\u548c\u8fd0\u884c\u65f6\u4e24\u4e2a\u5f62\u6001\uff1b"),(0,n.kt)("p",null,"\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u7ee7\u7eed\u7f16\u8f91\uff0c\u9700\u8981\u5c06\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001\u533a\u5206\uff0c\u4f46\u662f"),(0,n.kt)("h4",{id:"7115-\u5bf9\u6bd4"},"7.1.1.5 \u5bf9\u6bd4"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"USD\u592a\u8fc7\u590d\u6742\uff0c\u6709\u5f88\u591a\u989d\u5916\u7684\u5c5e\u6027\u90fd\u662f\u4e3a\u4e86\u5408\u6210\u573a\u666f\u7684\u76ee\u7684\uff0c\u800c\u5408\u6210\u573a\u666f\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u9700\u8981\u7684\uff0c\u6216\u8005\u8bf4\u4e00\u65e6\u5230\u4e86\u8fd0\u884c\u65f6\uff0c\u6709\u4e9b\u5408\u6210\u5c5e\u6027\u5df2\u7ecf\u56fa\u5b9a\u4e86\uff0c\u6211\u4eec\u4fbf\u4e0d\u518d\u9700\u8981\u90a3\u4e48\u590d\u6742\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u81f3\u5c11\u4e0d\u518d\u9700\u8981\u5355\u4e00\u573a\u666f\uff08\u4e00\u4e2a\u5fae\u578bapp\uff09\u5185\u90e8\u6240\u6709\u5408\u6210\u5c5e\u6027\uff0c\u90a3\u4e48\u8be5\u5fae\u578b\u573a\u666f\u5c31\u5e94\u8be5\u8f6c\u5316\u4e3a\u56fa\u5b9a\u683c\u5f0f\u573a\u666f\uff0c\u800c\u6574\u4e2a\u5408\u6210\u80fd\u529b\u4fdd\u6301\u5728\u5fae\u578b\u573a\u666f\u5c42\u9762\u5c31\u53ef\u4ee5"),(0,n.kt)("li",{parentName:"ul"},"\u4e14\u5bf9\u8fd0\u884c\u65f6\u4e0d\u592a\u53cb\u597d\uff0c\u6709\u5f88\u591a\u5c5e\u6027\uff0c\u8ddf\u4e0a\u9762\u4e00\u6837\uff0c\u6709\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u5408\u6210\u7ec6\u8282\u5728\u8fd0\u884c\u65f6\u6267\u884c\uff0c\u8fd9\u90e8\u5206\u8981\u53bb\u6389")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u7279\u6027\uff0c\u6709\u5fc5\u8981\u5f00\u53d1\u4e00\u4e2a\u4e2d\u95f4\u683c\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5728\u5f00\u53d1\u8005\u4fdd\u5b58\u573a\u666f\u81f3RW\u65f6\u6267\u884c\u9884\u5904\u7406\uff0c\u5176\u8ba1\u7b97\u8fc7\u7a0b\u4e3b\u8981\u662f\u63d0\u524d\u8ba1\u7b97\u4e00\u4e9b\u5408\u6210\u65b9\u9762\u7684\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u7ec8\u8fd0\u884c\u65f6\u76f4\u63a5\u52a0\u8f7d\u8be5\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"DSL\u9488\u5bf9\u8be5\u683c\u5f0f\u5c31\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6bcf\u4e2a\u5fae\u578b\u573a\u666f\uff0c\u5f00\u53d1\u8005\u672c\u5730\u4f1a\u4fdd\u5b58\u539f\u59cbUSD\u6587\u4ef6\uff0c\u4e0b\u6b21\u4ed6\u4ecd\u7136\u5bf9\u539f\u59cb\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91\uff0c\u7136\u540e\u63d0\u4ea4\u65f6\u8fdb\u884c\u9884\u5904\u7406\uff0c\u518d\u4fdd\u5b58\u4e2d\u95f4\u683c\u5f0f\u81f3\u4e91\u7aef\u5185\u5bb9\u670d\u52a1\u5668")),(0,n.kt)("p",null,"\u517c\u5bb9\u7b2c\u4e09\u65b9\uff0c\u5728\u7b2c\u4e09\u65b9\u505a\u63d2\u4ef6\uff0c\u8f6c\u5316\u4e3aRW\u652f\u6301\u7684\u683c\u5f0f\uff0c\u7136\u540e\u5728RW\u505a\u573a\u666f\u548c\u4ea4\u4e92\u7f16\u8f91"),(0,n.kt)("p",null,"\u7136\u800c\u600e\u4e48\u5b9e\u65f6\u591a\u4eba\u534f\u540c\u4fee\u6539\uff0c\u53e6\u5916\u7528\u6237\u5f00\u53d1\u5fae\u578b\u573a\u666f\u5927\u90e8\u5206\u90fd\u662f\u5728\u7aef\u4fa7\u8fd0\u884c\u65f6\u8fdb\u884c"),(0,n.kt)("p",null,"\u5177\u6709\u5bf9\u7528\u6237\u53ef\u8bfb\u7684\u8868\u8ff0\u5f62\u5f0f\uff0c\u548c\u5bf9\u7a0b\u5e8f\u9ad8\u6548\u52a0\u8f7d\u7684\u4e8c\u8fdb\u5236\u5f62\u5f0f"),(0,n.kt)("h3",{id:"712-alembic-formats"},"7.1.2 Alembic formats"),(0,n.kt)("h3",{id:"713-unity-prefabs"},"7.1.3 Unity Prefabs"),(0,n.kt)("h3",{id:"714-\u4ee3\u7801\u751f\u6210"},"7.1.4 \u4ee3\u7801\u751f\u6210"),(0,n.kt)("p",null,"USD\u4e2d\u7684Schema\u548cLLVM\u4e2d\u7684TableGen\uff0c\u90fd\u662f\u6309\u7167\u4e00\u79cd\u6587\u672c\u683c\u5f0f\uff0c\u5b9a\u4e49\u4e00\u79cd\u683c\u5f0f\uff0c\u7136\u540e\u751f\u6210\u5bf9\u5e94\u7684C++\u4ee3\u7801\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("h2",{id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784"},"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784"),(0,n.kt)("h3",{id:"721-unity-dotsecs"},"7.2.1 Unity DOTS/ECS"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DOTS\u6216\u8005ECS\u8fd8\u662f\u4ec5\u5173\u6ce8\u6027\u80fd\u5c42\u9762\uff0c\u4f46\u662f\u6570\u636e\u9a71\u52a8\u7684\u597d\u5904\u662f\u5b83\u8ba9\u5f00\u53d1\u8005\u628a\u903b\u8f91\u533a\u5206\u4e86\u51fa\u6765\uff0c\u6240\u4ee5\u5728\u8fd9\u4e9b\u903b\u8f91\u7684\u7ec4\u7ec7\u5c42\u9762\u518d\u52a0\u4e0a\u4e00\u5c42\u7ba1\u7406\uff0c\u5c31\u53ef\u4ee5\u5411\u4e0a\u5c42\u7528\u6237\u5c42\u8fdb\u4e00\u6b65\u7b80\u5316\u903b\u8f91\u5f00\u53d1"),(0,n.kt)("p",null,"SRP Batcher\u628a\u6750\u8d28\u6570\u636e\u4ece\u539f\u6765\u7684raw data\u91cc\u9762\u62bd\u53d6\u51fa\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9GameObject rendering\u7684\u6027\u80fd\u968f\u7740scriptable pupeline\u5f97\u5230\u63d0\u5347"),(0,n.kt)("li",{parentName:"ul"},"GPU\u4e2d\u53ef\u4ee5\u7f13\u5b58\u6750\u8d28\u6570\u636e\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u6b21\u90fd\u5207\u6362shader\uff0c\u56e0\u4e3adraw call\u63d0\u4ea4\u7684\u9891\u7387\u8fdc\u9ad8\u4e8e\u6750\u8d28\u6570\u636e\u5207\u6362\u548c\u63d0\u4ea4\u7684\u9891\u7387")),(0,n.kt)("p",null,"System \u5bf9component \u7684\u5f15\u7528\u6bd4\u8f83\u590d\u6742\uff0cUnity\u4e3a\u4e86\u7b80\u5316\u4ee5\u53ca\u4e0d\u6539\u53d8\u539f\u6765\u7684\u4ee3\u7801\uff0c\u8ba9\u5f00\u53d1\u8005\u5b9e\u73b0\u4e00\u4e2a\u539f\u6765\u7684Component \u7c7b\uff0c\u7136\u540e\u81ea\u52a8\u62c6\u5206\uff0c\u8fd9\u6837\u4e5f\u8bb8\u4f1a\u4f7f\u5f97\u7528\u6237\u4e0d\u6613\u4e8e\u5f7b\u5e95\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u601d\u60f3\uff0c\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4e00\u4e2a\u7279\u6b8a\u7684\u8bed\u6cd5\u7cd6\u5305\u88c5\u5f15\u7528\uff0c\u7136\u540e\u7f16\u8bd1\u5668\u81ea\u52a8\u5c06\u5f15\u7528\u8f6c\u5316\u4e3a\u901a\u8fc7Component \u590d\u5236\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f15\u7528"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\u8ba1\u7b97\uff1a")),(0,n.kt)("p",null,"Unity\u7684EntityQuery\u4f3c\u4e4e\u53ef\u4ee5\u6309\u4e0a\u8ff0\u7684\u601d\u8def\u53bb\u4f18\u5316\uff0c\u751a\u81f3\u5e76\u884c\u8ba1\u7b97\u7684\u663e\u793a\u8c03\u7528\u90fd\u662f\u9690\u85cf\u7684\uff0c\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\uff0c\u7528\u6237\u5bf9\u5355\u4e2aSystem \u7684\u6267\u884c\u81ea\u52a8\u8f6c\u53d8\u4e3a\u5e76\u884c\uff0c\u5305\u62ec\u5b9e\u9645\u7684\u67e5\u8be2\u548c\u5e76\u884c\u6267\u884c\uff0c\u53ea\u9700\u8981\u6bcf\u4e2asystem\u5fc5\u987b\u5728\u5934\u90e8\u5f15\u7528Components \u5373\u53ef\uff08\u58f0\u660e\u5305\u62ec\u662f\u5426\u53ea\u8bfb\u7684\u4f7f\u7528\u8bf4\u660e\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u5f15\u7528\u58f0\u660e\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u5f15\u7528\u5efa\u7acbarchetype "),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u901a\u8fc7\u8bbe\u5b9a\u903b\u8f91\u7c7b\u578b\u548c\u51e0\u4f55\u6216\u8005\u5916\u89c2\u7c7b\u578b\u4e4b\u95f4\u7684\u7ea6\u675f\u548c\u5bf9\u5e94\u5173\u7cfb\u6765\u63a7\u5236\u65b0\u7c7b\u578b\u7684\u521b\u5efa\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ec5\u53d1\u751f\u5728\u7f16\u8bd1\u671f\u95f4")),(0,n.kt)("p",null,"\u592a\u6781\u7684Megakernel programming \u6709\u8fd9\u6837\u7684\u601d\u60f3\uff0c\u5c06\u4f20\u7edfelement-wise\u7684\u7f16\u7a0b\uff0c\u591a\u4e2a\u8ba1\u7b97\u9636\u6bb5\u5408\u5e76\u4e3a\u4e00\u4e2asingle kernel \uff0c\u7f16\u7a0b\u7406\u89e3\u66f4\u81ea\u7136"),(0,n.kt)("p",null,"\u4e00\u5f00\u59cb\u5c31\u8981\u6559\u4f1a\u7528\u6237\uff0c\u600e\u6837\u57fa\u4e8e\u903b\u8f91\u6216\u8005\u529f\u80fd\u7ec4\u5408\u6765\u521b\u5efa\uff0c\u8fd9\u4e9b\u90fd\u662f\u57fa\u672c\u89c4\u5f8b\u548c\u903b\u8f91\uff0c\u8bbe\u8ba1\u7684\u65f6\u5019\u8981\u8003\u8651\u9ad8\u5ea6\u901a\u7528\u6027\u3001\u62bd\u8c61\u6027\u3001\u903b\u8f91\u6027\uff0c\u8fd9\u6837\u7528\u6237\u7406\u89e3\u6210\u672c\u6700\u4f4e\uff0c\u800c\u5728\u8bbe\u8ba1\u7684\u65f6\u5019\u6784\u601d\u7684\u6210\u672c\u4e5f\u6700\u4f4e\uff0c\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u662f\u672c\u8d28\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u5efa\u5b50\u903b\u8f91\u53ca\u5176\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u4e0e\u5916\u89c2\u7684\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u5916\u89c2\u53ca\u5176\u7c7b\u578b\u4e0e\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u6709\u4e00\u5957\u6846\u67b6\u6765\u652f\u6491\u8fd9\u4e2a\u4f53\u7cfb")),(0,n.kt)("p",null,"Unity\u7684DOTS\u505a\u7684\u8fd8\u4e0d\u591f\u5f7b\u5e95\uff0c\u5b83\u8fd8\u662f\u4e3a\u4e86\u517c\u5bb9\u539f\u6765\u7684Component\uff0c\u4f9d\u8d56\u4e8e\u7f16\u8f91\u5668\u5c5e\u6027\u628aComponent\u548cSystem\u5206\u79bb\u51fa\u6765\uff0c\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u3001\u5173\u7cfb\u548c\u533a\u522b\u90fd\u6ca1\u6709\u90a3\u4e48\u660e\u663e\uff0c\u4e0d\u5229\u4e8e\u6df1\u5165\u8d2f\u5f7b\u6570\u636e\u9a71\u52a8\u8fd9\u4e00\u7406\u5ff5"),(0,n.kt)("p",null,"\u5728RW\u4e2d\uff0c\u6240\u6709\u903b\u8f91\u548c\u6570\u636e\u5fc5\u987b\u5206\u5f00\uff0c\u5b83\u4eec\u6ca1\u6709\u529e\u6cd5\u6df7\u5230\u4e00\u8d77\uff0c\u4f46\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u5c06\u7ec4\u4ef6\u53d1\u5e03\uff0c\u53d8\u6210private\u7684\uff0c\u4f46\u8f6f\u4ef6\u67b6\u6784\u4e00\u6837\uff0c\u5e76\u4e14\u9075\u5faa\u540c\u6837\u7684\u5305\u7ba1\u7406\uff0c\u4e2d\u5fc3\u5316\u7684\u7ec4\u4ef6\u7ba1\u7406\u548c\u52a0\u8f7d\uff0c\u7248\u672c\u7ba1\u7406\uff0c\u53ea\u662f\u7ec4\u4ef6\u4e0d\u5bf9\u5916\u516c\u5f00\u800c\u5df2"),(0,n.kt)("p",null,"\u5176\u4e2d\u4e00\u79cd\u8ba9\u591a\u4e2a\u5f00\u53d1\u8005\u9075\u5faa\u516c\u5171\u534f\u5b9a\u7684\u65b9\u6cd5\uff0c\u662f\u7531\u5e73\u53f0\u6765\u5b9a\u4e49\u6570\u636e\uff0c\u5e73\u53f0\u5b9a\u4e49\u7684\u662f\u4e00\u4e9b\u4e1a\u52a1\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u6210\u4e3a\u516c\u5171\u63a5\u53e3\uff0c\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u5c31\u53ef\u4ee5\u76f8\u4e92\u72ec\u7acb\u5de5\u4f5c\uff1b\u5982\u679c\u5e73\u53f0\u7f3a\u4e4f\u67d0\u4e9b\u7c7b\u578b\u516c\u5171\u63a5\u53e3\uff0c\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u81ea\u884c\u5b9a\u4e49\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u9700\u8981\u9009\u62e9\u54ea\u4e9b\u5c5e\u6027\u662f\u516c\u5171\u63a5\u53e3\uff0c\u7136\u540e\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u4e9b\u516c\u5171\u63a5\u53e3\u5f00\u53d1\uff0c\u8fd9\u4e9b\u516c\u5171\u6570\u636e\u63a5\u53e3\u8ddf\u4e0e\u7279\u5b9a\u65b9\u6cd5\u76f8\u5173\u7684\u6570\u636e\u63a5\u53e3\u5206\u5f00"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u7684\u91cd\u8981\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u53ef\u4ee5\u91cd\u7528\uff0c\u6240\u4ee5\u6709\u673a\u4f1a\u5c06\u4e00\u90e8\u5f00\u53d1\u8005\u5199\u7684\u4ee3\u7801\u5171\u4eab\u7ed9\u5176\u4ed6\u4eba"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4ee3\u7801\u4ece\u6570\u636e\u5265\u79bb\u51fa\u6765\uff0c\u624d\u53ef\u4ee5\u505a\u5230\u666e\u901a\u7528\u6237\u80fd\u591f\u6784\u5efa\u4e30\u5bcc\u7684\u529f\u80fd")),(0,n.kt)("p",null,"\u539f\u5219\uff1a"),(0,n.kt)("p",null,"Composition over inheritance "),(0,n.kt)("p",null,"\u867d\u7136ECS\u76f8\u8f83\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u6982\u5ff5\u6ca1\u90a3\u4e48\u76f4\u89c2\uff0c\u4f46\u662fOOP\u53ca\u5176\u7ee7\u627f\u7684\u65b9\u5f0f\u5e26\u6765\u7684\u903b\u8f91\u4e0a\u7684\u590d\u6742\u6027\u548c\u53ef\u7ef4\u62a4\u6027\uff0cECS\u5176\u5b9e\u66f4\u7b80\u5316\u4e86\uff0c\u5b83\u7b80\u5316\u7684\u539f\u56e0\u662f\u4e24\u4e2a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u95ee\u9898\u5206\u800c\u6cbb\u4e4b"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c42\u6b21\u66f4\u6241\u5e73\uff0c\u7ec4\u7ec7\u590d\u6742\u6027\u964d\u4f4e")),(0,n.kt)("p",null,"\u5f00\u6e90ECS\u5b9e\u73b0\uff1aFlecs"),(0,n.kt)("p",null,"ECS\u662f\u5b9e\u73b0in-game editor\u7684\u6838\u5fc3"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u4e5f\u8981\u652f\u6301\u7f51\u7edc\u670d\u52a1\u76f8\u5173\u7684\u529f\u80fd"),(0,n.kt)("p",null,"\u534f\u8bae\u7531\u5b98\u65b9\u6765\u5b9a\u4e49\uff0c\u5f00\u53d1\u8005\u5b9e\u73b0\u529f\u80fd\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5f00\u653e\u7ed9\u5f00\u53d1\u8005\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5728\u5185\u90e8\u5b9e\u73b0\u534f\u8bae\u5b9a\u4e49\uff0c\u7136\u540e\u901a\u8fc7\u79c1\u4ed3\u6216\u8005\u4ee3\u7801\u6587\u4ef6\u5206\u4eab\u7ed9\u522b\u4eba\uff0c\u524d\u8005\u6700\u597d\uff0c\u7136\u540e\u4f18\u79c0\u7684\u534f\u8bae\u4e13\u4e3a\u516c\u5171\u7684"),(0,n.kt)("h3",{id:"722-ecs"},"7.2.2 ECS"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u7ec4\u4ef6\uff1a\u5305\u542b\u5173\u7cfb\u548c\u5904\u7406\u987a\u5e8f\uff0c\u8fd9\u4e9b\u6982\u5ff5\u4fc3\u8fdb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u8de8\u7cfb\u7edf\u901a\u4fe1\uff1a\u4e24\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u95f4\u9700\u8981\u901a\u4fe1")),(0,n.kt)("p",null,"ECS game engine design "),(0,n.kt)("p",null,"\u7528\u6237\u611f\u77e5\u7684\u5e94\u8be5\u53ea\u6709Component \uff0c\u4ed6\u4e0d\u9700\u8981\u77e5\u9053\u6709\u4e2aSystem\uff0cComponent \u7684\u8bbe\u8ba1\u539f\u5219\u5e94\u8be5\u662f\u4e00\u4e2a\u529f\u80fd\u8282\u70b9\uff0cNode\uff0c\u50cfHoudini \u4e2d\u7684\u8282\u70b9\u4e00\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u8282\u70b9\u544a\u8bc9\u7528\u6237\u8be5\u8282\u70b9\u4e3a\u76ee\u6807\u7269\u4f53\u6dfb\u52a0\u4e86\u4ec0\u4e48\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u529f\u80fd\u5e94\u8be5\u7528\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u540d\u5b57\u63cf\u8ff0\uff0c\u4e00\u5b9a\u8981\u8d77\u4e00\u4e2a\u5f88\u597d\u7684\u540d\u5b57\uff0c\u5b98\u65b9\u8981\u4fdd\u7559\u4e00\u4e9b\u5e38\u89c1\u529f\u80fd\u7684\u540d\u5b57\u5217\u8868\uff0c\u6709\u4e00\u4e2a\u603b\u7684\u540d\u5b57\u5217\u8868\uff0c\u4e0d\u80fd\u5f00\u53d1\u8005\u968f\u610f\u8d77\u540d\u5b57\uff0c\u9664\u975e\u662f\u4ed6\u5185\u90e8\u79c1\u6709\u7684\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u5168\u5c40\u7684\u529f\u80fd\u8282\u70b9\u5217\u8868\u53ef\u4ee5\u5728\u6587\u6863\u4e2d\u7ea2\u7528\u6237\u9009\u62e9\u548c\u67e5\u8be2\uff0c\u666e\u901a\u7528\u6237\u771f\u6b63\u4f7f\u7528\u7684\u662f\u516c\u5171\u5217\u8868\u4e2d\u7684\u529f\u80fd\u8282\u70b9\uff0c\u5b98\u65b9\u7ea6\u5b9a\u548c\u7ef4\u62a4\u5176\u4e2d\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u63d0\u4ea4\u65b0\u7684\u8282\u70b9\u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u63d0\u4ea4\u7ecf\u8fc7\u5b98\u65b9\u5ba1\u6838\uff0c\u5ba1\u6838\u6570\u636e\u89c4\u8303\uff0c\u8ddf\u5176\u4ed6\u8282\u70b9\u4e4b\u95f4\u7684\u517c\u5bb9\u6027\uff0c\u4f8b\u5982\u67d0\u4e9b\u7c7b\u578b\u7684\u8282\u70b9\u4e0d\u9002\u5408\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u4e00\u4e2a\u8282\u70b9\u5b9a\u4e49\u53ea\u80fd\u6709\u4e00\u4e2aSystem \uff0c\u4f46\u662fSystem \u4e4b\u95f4\u7684\u5b9e\u73b0\u5dee\u5f02\u5f88\u5927\uff0c\u5c24\u5176\u6027\u80fd\u5dee\u5f02\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u6027\u80fd\u6d4b\u8bd5\u65b9\u6cd5\u9009\u62e9\u5176\u4e2d\u6700\u4f18\u7684\u7248\u672c\u4e3a\u9ed8\u8ba4\u7248\u672c\uff0c\u6700\u597d\u4e0d\u8981\u8ba9\u7528\u6237\u9009\u62e9\u7248\u672c\uff0c\u54ea\u6015\u662f\u968f\u673a\u9009\u62e9\u4e00\u4e2a\u7248\u672c\u4e5f\u8981\uff0c\u4f8b\u5982\u63d0\u4ea4\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u8981\u6c42\u5f00\u53d1\u8005\u63d0\u4f9b\u6027\u80fd\u6d4b\u8bd5\u7ed3\u679c\uff0c\u6240\u4ee5\u8282\u70b9\u7684\u5b9e\u73b0\u8981\u5b9a\u4e49\u4e00\u5957\u597d\u7684\u4eff\u771f\u6d4b\u8bd5\u5de5\u5177\u548c\u6846\u67b6"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u8981\u901a\u8fc7\u7528\u6237\u53bb\u67e5\u770b\u5176\u4e2d\u7684\u6570\u636e\u624d\u80fd\u7406\u89e3\u8282\u70b9\u7684\u542b\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u9700\u8981\u4fee\u6539\u53c2\u6570\u7684\u65f6\u5019\u624d\u4f1a\u53bb\u6253\u5f00\u8282\u70b9\u7684\u53c2\u6570")),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u548c\u82f9\u679c\u7684USDZ\u7684\u601d\u60f3\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u82f9\u679c\u53ea\u5b9a\u4e49\u4e86\u5c11\u91cf\u8282\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u51e0\u767e\u79cd\u8282\u70b9\u5b9e\u73b0\u5f88\u4e30\u5bcc\u7684\u529f\u80fd"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Houdini \u6709\u51e0\u767e\u79cd"),(0,n.kt)("li",{parentName:"ul"},"Fornite \u4e5f\u6709100\u591a\u79cd")),(0,n.kt)("p",null,"\u901a\u7528\u5f15\u64ce\u4e0d\u4f1a\u8fd9\u4e48\u505a\uff0c\u53ea\u6709in-house\u6216\u8005\u5821\u5792\u4e4b\u591c\u8fd9\u79cd\u6c99\u76d2\u6e38\u620f\u4f1a\u8fd9\u4e48\u505a"),(0,n.kt)("h3",{id:"723-ue5-mass"},"7.2.3 UE5 MASS"),(0,n.kt)("h3",{id:"724-data-oriented-and--driven"},"7.2.4 Data-oriented and -driven"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.dataorienteddesign.com"},"https://www.dataorienteddesign.com")),(0,n.kt)("p",null,"Data Oriented Programming unlearning objects (book)"),(0,n.kt)("h3",{id:"725--rust-ecs"},"7.2.5 Rust ECS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://specs.amethyst.rs/docs/tutorials/"},"https://specs.amethyst.rs/docs/tutorials/")),(0,n.kt)("h2",{id:"73-\u7f16\u8bd1\u5668\u4e0edsl"},"7.3 \u7f16\u8bd1\u5668\u4e0eDSL"),(0,n.kt)("p",null,"RW\u5e95\u5c42\u9700\u8981\u6781\u9ad8\u7684\u6027\u80fd\u6765\u652f\u6491\u4e0a\u5c42\u590d\u6742\u7684\u56fe\u5f62\u548c\u903b\u8f91\u8ba1\u7b97\uff0c\u540c\u65f6\u8fd9\u79cd\u6027\u80fd\u4f18\u5316\u53c8\u8981\u540c\u65f6\u5bf9\u8de8\u5e73\u53f0\u79fb\u690d\u6027\u548c\u5f00\u53d1\u6548\u7387\u5e26\u6765\u597d\u5904\uff0c\u6240\u4ee5\u5b83\u4e0d\u662f\u5355\u7eaf\u7684\u6027\u80fd\u4f18\u5316\uff0c\u662f\u4e00\u5957\u9ad8\u5ea6\u4f18\u826f\u7684\u5e95\u5c42\u6846\u67b6\uff0c\u5177\u4f53\u4e4b\u524d\u4e00\u4e0b\u51e0\u4e2a\u91cd\u8981\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u5f62\u7ba1\u7ebf\u7684\u6df1\u5ea6\u5b9a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u9a71\u52a8\u7684\u4f18\u5316\uff0c\u6570\u636e\u9a71\u52a8\u9664\u4e86\u8ba9\u666e\u901a\u7528\u6237\u80fd\u591f\u4f7f\u7528\u903b\u8f91\uff0c\u8fd8\u8981\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6765\u7b80\u5316\u5f00\u53d1\u8005\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4f8b\u5982\u53ea\u8981\u6309\u7167\u67d0\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u4e0d\u4ec5\u80fd\u4f7f\u6d41\u7a0b\u66f4\u7b80\u5355\uff0c\u8fd8\u4f1a\u662f\u7684\u5e95\u5c42\u7f16\u8bd1\u65f6\u548c\u8fd0\u884c\u65f6\u80fd\u591f\u9488\u5bf9\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u8bed\u8a00\u7684\u6df1\u5165\u5b9a\u5236\uff0c\u8ddf\u4e0a\u9762\u7684\u6570\u636e\u9a71\u52a8\u76f8\u7ed3\u5408\uff0c\u7528\u6237\u8d77\u6765\u6781\u5176\u7b80\u5355")),(0,n.kt)("h3",{id:"731--taichi"},"7.3.1 Taichi"),(0,n.kt)("p",null,"Born from the MIT CSAIL lab, Taichi was designed to facilitate computer graphics researchers' everyday life, by helping them quickly implement visual computing and physics simulation algorithms that are executable on GPU. The path Taichi took was an innovative one: Taichi is embedded in Python and uses modern just-in-time (JIT) frameworks (for example LLVM, SPIR-V) to offload the Python source code to native GPU or CPU instructions, offering the performance at both development time and runtime."),(0,n.kt)("h4",{id:"7311-\u65b0\u601d\u60f3"},"7.3.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"Taichi\u662f\u4e00\u95e8\u9762\u5411\u7269\u7406\u6a21\u62df\u548c\u8ba1\u7b97\u673a\u89c6\u89c9\u8ba1\u7b97\u7684\u9886\u57df\u7279\u5b9a\u8bed\u8a00\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u4f7f\u7528C++\u7b49\u8bed\u8a00\u81ea\u884c\u5b9e\u73b0\u7684\u7b97\u6cd5\uff0ctaichi\u63d0\u4f9b\u4e00\u4e0b\u65b9\u9762\u7684\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u63d0\u4f9b\u4e86\u5e76\u884c\u8ba1\u7b97\u62bd\u8c61"),"\uff0c\u4f7f\u5f97\u5f00\u53d1\u4eba\u5458\u4e0d\u9700\u8981\u7279\u522b\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u7ba1\u7406\uff0c\u5e76\u4e14\u5177\u6709\u8f83\u597d\u7684\u4e00\u81f4\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u4e86\u4ee3\u7801\u590d\u6742\u5ea6\u6027"),"\uff0c\u4e3b\u8981\u662f\u4e24\u4e2a\u65b9\u9762\uff0c\u4e00\u4e2a\u662f\u56e0\u4e3a\u4e0d\u7528\u5173\u5fc3\u5e76\u884c\u8ba1\u7b97\uff0c\u5f00\u53d1\u8005\u4e13\u6ce8\u4e8e\u5355\u4e2aKernel\uff0c\u7701\u6389\u4e86\u4e00\u5b9a\u7684\u590d\u6742\u5ea6\uff0c\u540c\u65f6\u903b\u8f91\u66f4\u6e05\u6670\uff1b\u53e6\u4e00\u4e2a\u662f\u901a\u8fc7\u5c06\u6570\u636e\u548c\u7b97\u6cd5\u5206\u79bb\uff0c\u4f7f\u5f97\u50cf\u7a00\u758f\u7ed3\u6784\u8fd9\u6837\u7684\u7b97\u6cd5\u88ab\u81ea\u52a8\u4f18\u5316\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u4e3a\u4e86\u6027\u80fd\u7f16\u5199\u5f88\u591a\u590d\u6742\u7684\u4ee3\u7801\uff0c\u4f8b\u5982\u5bf9\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u590d\u6742\u7684\u7ba1\u7406\u548c\u6392\u5e03")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9ad8\u6027\u80fd"),"\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u8fdb\u884c\u4e86\u5927\u91cf\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u7684\u4f18\u5316\uff0c\u56e0\u6b64\u6027\u80fd\u63d0\u5347\u6bd4\u8f83\u5927\uff0c\u4f46\u6bd4\u8f83\u5c40\u9650\u4e8e\u4e00\u4e9b\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4f18\u5316\u6b63\u5f0f\u9488\u5bf9\u8fd9\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u7ed3\u6784\u6216\u8005\u5f62\u5f0f\u8fdb\u884c\u4f18\u5316\u7684")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u5373\u65f6\u7f16\u8bd1"),"\uff0cTaichi\u63d0\u4f9b\u5373\u65f6\u7f16\u8bd1\u548c\u9884\u7f16\u8bd1\u4e24\u79cd\u65b9\u6848\uff0c\u5176\u4e2d\u9488\u5bf9\u5373\u65f6\u7f16\u8bd1\uff0c\u7531\u4e8e\u80fd\u591f\u77e5\u9053\u4e00\u4e9b\u8fd0\u884c\u65f6\u7684\u4fe1\u606f\uff0c\u56e0\u6b64Taichi\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u4f18\u5316")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u8de8\u5e73\u53f0\u90e8\u7f72"),"\uff0c\u5c06\u4e0a\u5c42\u7b97\u6cd5\u5168\u90e8\u8f6c\u6362\u4e3a\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u6709\u5229\u4e8e\u8de8\u5e73\u53f0\u90e8\u7f72\uff0c\u8fd9\u4e5f\u51cf\u8f7b\u4e86\u5f00\u53d1\u8005\u9488\u5bf9\u591a\u4e2a\u5e73\u53f0\u8fdb\u884c\u9002\u914d\u7684\u75db\u82e6\u8fc7\u7a0b"))),(0,n.kt)("p",null,"\u5176\u4ed6\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Academia"),"\uff0c\u5b66\u672f\u754c\u7684\u7814\u7a76\u5b9e\u73b0\u4e2d\uff0c\u5f80\u5f80\u56e0\u4e3a\u7f3a\u4e4f\u4f18\u5316\uff0c\u4e34\u65f6\u7684\u5b9e\u73b0\u65b9\u6848\uff0c\u5f80\u5f80\u5bfc\u81f4\u5f88\u96be\u590d\u7528\uff0cTaichi\u5e0c\u671b\u6539\u53d8\u8fd9\u4e2a\u5c40\u9762\uff0c\u4e00\u65b9\u9762\u901a\u8fc7\u4f18\u5316\u7684\u5e95\u5c42\u6280\u672f\u652f\u6301\uff0c\u4e00\u65b9\u9762\u63d0\u4f9b\u7edf\u4e00\u7684\u63a5\u53e3"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Apps & game engine integration"),"\uff0c\u7531\u4e8e\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u4f7f\u5f97Taichi\u5bb9\u6613\u8de8\u5e73\u53f0\uff0cTaichi\u53ef\u4ee5\u7f16\u8bd1\u4e00\u4e9b\u8de8\u5e73\u53f0\u7684\u5e93\u4f9b\u5176\u4ed6\u5e73\u53f0\u8c03\u7528\uff0c\u4f8b\u5982Taichi\u7684AOT\uff08Ahead of time\uff09\u6a21\u5757\u53ef\u4ee5\u6784\u5efa\u5e76\u4fdd\u5b58\u5728computer shaders\uff0c\u8fd9\u6837\u53ef\u4ee5\u88ab\u5176\u4ed6\u8fd0\u884c\u65f6\u8c03\u7528\uff0cAOT\u548cJIT\u662f\u4e24\u79cd\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"General-purpose computing"),"\uff0c\u867d\u7136\u65e9\u671f\u9762\u5411\u7279\u5b9a\u7684\u76ee\u6807\u5982\u7269\u7406\u6a21\u62df\uff0c\u4f46\u662f\u4e5f\u4f1a\u6709\u66f4\u591a\u7684\u901a\u7528\u8ba1\u7b97\u652f\u6301\uff0c\u4f8b\u5982TaichiSLAM"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Maybe a new frontend"),"\uff0c\u53ef\u4ee5\u5c06Python\u6539\u4e3a\u5176\u4ed6\u524d\u7aef")),(0,n.kt)("h4",{id:"7312-\u6280\u672f\u65b9\u6848"},"7.3.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,"\u4ee5\u4e0b\u4e3aTaichi\u8bed\u8a00\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"taichi-kernel",src:l(6383).Z,width:"3110",height:"1586"})),(0,n.kt)("p",null,"Taichi\u7684\u6838\u5fc3\u662f\u4e00\u4e2a\u7f16\u8bd1\u5668\uff08compiler\uff09\uff0c\u5728\u8fd9\u4e2a\u7f16\u8bd1\u5668\u4e2d\uff0c\u5b83\u9488\u5bf9\u7279\u5b9a\u7684\u4e00\u4e9b\u8ba1\u7b97\u4efb\u52a1\uff0c\u5982\u7269\u7406\u6a21\u62df\uff0c\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u7684\u7c7b\u578b\u7b49\u8fdb\u884c\u4f18\u5316\uff0c\u901a\u8fc7\u4fee\u6539\u548c\u8c03\u6574\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u7684\u5185\u5bb9\u5e03\u5c40\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u8ba1\u7b97\u7684\u7f13\u5b58\u5c40\u90e8\u6027\u66f4\u597d\uff0c\u540c\u65f6\u4e5f\u901a\u8fc7\u5411\u91cf\u5316\u7684\u6570\u636e\u7c7b\u578b\u7cfb\u7edf\uff0c\u4f7f\u5f97\u5e94\u7528\u7684\u5185\u5b58\u5360\u7528\u66f4\u5c0f\uff0c\u4ece\u800c\u4e5f\u51cf\u5c11\u5185\u5b58\u5bf9\u5e26\u5bbd\u7684\u5360\u7528\uff0c\u4e0d\u4ec5\u63d0\u9ad8\u4e86\u8ba1\u7b97\u6548\u7387\uff0c\u4e5f\u51cf\u5c11\u4e86\u5185\u5b58\u5360\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u76ee\u7684\uff0cTaichi\u5728\u524d\u7aef\u8bed\u8a00\u4e2d\uff08\u76ee\u524d\u662fPython\uff09\uff0c\u901a\u8fc7\u5143\u7f16\u7a0b\u5b9a\u4e49\u4e86\u7279\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'import taichi as ti\n\nti.init(arch=ti.gpu)\n\nn = 320\npixels = ti.field(dtype=float, shape=(n * 2, n))\n\n@ti.func\ndef complex_sqr(z):\n return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])\n\n@ti.kernel\ndef paint(t: float):\n for i, j in pixels: # Parallelized over all pixels\n c = ti.Vector([-0.8, ti.cos(t) * 0.2])\n z = ti.Vector([i / n - 1, j / n - 0.5]) * 2\n iterations = 0\n while z.norm() < 20 and iterations < 50:\n z = complex_sqr(z) + c\n iterations += 1\n pixels[i, j] = 1 - iterations * 0.02\n\ngui = ti.GUI("Julia Set", res=(n * 2, n))\n\ni = 0\nwhile gui.running:\n paint(i * 0.03)\n gui.set_image(pixels)\n gui.show()\n i = i + 1\n')),(0,n.kt)("p",null,"\u8fd9\u4e9b\u81ea\u5b9a\u4e49\u7c7b\u578b\u6784\u6210Taichi\u8bed\u8a00\uff0c\u5b83\u4eec\u501f\u52a9Python\u7684AST\u63a7\u5236\u80fd\u529b\uff0c\u751f\u6210\u5e26\u6765Taichi\u7c7b\u578b\u4fe1\u606f\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u7136\u540e\u5e95\u5c42\u7684\u7f16\u8bd1\u5668\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u7279\u5b9a\u7684\u4ee3\u7801\u4f18\u5316\u548c\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5176\u4e2d\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f16\u8bd1\u4f18\u5316\u8fc7\u7a0b\uff0cTaichi\u66f4\u662f\u9488\u5bf9\u4f8b\u5982\u7a00\u758f\u7ed3\u6784\u7b49\u7279\u5b9a\u7684\u8ba1\u7b97\u8fdb\u884c\u4e86\u5927\u91cf\u7684\u4ee3\u7801\u8c03\u6574\uff0c\u751f\u6210\u76f8\u5bf9\u4e8e\u524d\u7aef\u6570\u500d\u7684\u4ee3\u7801\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f46\u51cf\u5c11\u4e86\u4e0a\u5c42\u8bed\u8a00\u7684\u4ee3\u7801\u91cf\uff0c\u8fd8\u5bf9\u5176\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u505a\u4e86\u5927\u91cf\u7684\u8c03\u6574\uff0c\u4ee5\u63d0\u5347\u8ba1\u7b97\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u4e0a\u8ff0\u80fd\u529b\u7684\u5176\u4e2d\u6700\u91cd\u8981\u7684\u601d\u8def\u662f\u6570\u636e\u9a71\u52a8\uff0c\u5b83\u5c06\u4e00\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u8868\u8ff0\u4ece\u7b97\u6cd5\u6307\u4ee4\u5f53\u4e2d\u5206\u79bb\u51fa\u6765\uff0c\u4ece\u800c\u4f7f\u5f97\u7f16\u8bd1\u5668\u80fd\u591f\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5df2\u751f\u6210\u66f4\u52a0\u4f18\u5316\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u3002\u5f53\u7136\uff0c\u8fd9\u6837\u7684\u4e0a\u4e0b\u6587\u77e5\u8bc6\u5fc5\u987b\u9488\u5bf9\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u5e76\u4e0d\u662f\u5bf9\u6240\u6709\u7b97\u6cd5\u90fd\u80fd\u5b9e\u73b0\u4f18\u5316\u3002"),(0,n.kt)("h4",{id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0"},"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eReality World\u7684\u4ea7\u54c1\u65b9\u5411\uff0cTaichi\u5b58\u5728\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u7b97\u6cd5\u800c\u4e0d\u662f\u903b\u8f91"),"\uff0c\u5c3d\u7ba1Taichi\u53ef\u4ee5\u51cf\u5c11\u4ee3\u7801\u91cf\uff0c\u4f46\u662f\u5b83\u7684\u6838\u5fc3\u662f\u9762\u5411\u7279\u5b9a\u7b97\u6cd5\u7ed3\u6784\u7684\u4f18\u5316\uff0c\u5b83\u4e0d\u6d89\u53ca\u903b\u8f91\u5c42\u9762\u7684\u8003\u8651\uff0c\u4f8b\u5982\u600e\u4e48\u5e2e\u52a9\u5f00\u53d1\u8005\u5b9e\u73b0\u4ea4\u4e92\u903b\u8f91\uff1b")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u652f\u6301\u52a8\u6001\u521b\u5efa")))),(0,n.kt)("p",null,"Taichi\u6700\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u5e95\u5c42\u4f18\u5316\u7279\u522b\u91cd\uff0c\u8fd9\u4e5f\u662f\u5b9e\u73b0\u6027\u80fd\u63d0\u5347\u7684\u5173\u952e\uff0c\u800c\u8fd9\u4e00\u5c42\u4f18\u5316\u5b9e\u73b0\u4e8eC++\u4e2d\uff0c\u56e0\u6b64Taichi\u7684\u8fd0\u884c\u65f6\u7a0b\u5e8f\u53ea\u80fd\u662f\u4e24\u79cd\u60c5\u51b5\u4e4b\u4e00\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u662f\u8fd0\u884c\u65f6\u5e26\u4e0aTaichi\u7684\u7f16\u8bd1\u5668\uff0c\u8fd9\u79cd\u60c5\u51b5\u53ef\u4ee5\u652f\u6301\u4efb\u610f\u7684\u7b97\u6cd5\u4fee\u6539\uff0c\u8fd9\u4e5f\u662fPC\u4e0a\u7684\u4e00\u822c\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ol"},"\u5982\u679c\u8fd0\u884c\u65f6\u6ca1\u6709Taichi\u7684\u7f16\u8bd1\u73af\u5883\uff0c\u9700\u8981\u63d0\u524d\u5c06Taichi\u7a0b\u5e8f\u7f16\u8bd1\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7a0b\u5e8f\u4e00\u65e6\u90e8\u7f72\u5c31\u4e0d\u80fd\u4fee\u6539")),(0,n.kt)("p",null,"\u7b2c\u4e00\u79cd\u6a21\u5f0f\u662f\u6bd4\u8f83\u6162\u7684\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u9700\u8981\u5373\u65f6\u7f16\u8bd1\uff0c\u5e76\u4e14Taichi\u7684\u7f16\u8bd1\u8fc7\u7a0b\u76f8\u5bf9\u4e8e\u4e00\u822c\u7684\u7a0b\u5e8f\u7f16\u8bd1\u8981\u66f4\u52a0\u590d\u6742\uff0c\u56e0\u6b64\u8fd9\u79cd\u6a21\u5f0f\u4e0d\u9002\u5408\u5b9e\u65f6\u7684\u6e38\u620f\u5f15\u64ce\u7cfb\u7edf\uff1b\u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u6a21\u5f0f\uff0c\u7531\u4e8e\u7b97\u6cd5\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u5e95\u5c42\u673a\u5668\u8bed\u8a00\uff0c\u56e0\u6b64\u7a0b\u5e8f\u4e0d\u80fd\u518d\u88ab\u52a8\u6001\u4fee\u6539\uff0c\u9664\u975eTaichi\u5c06\u6240\u6709\u7684\u89e3\u91ca\u8fc7\u7a0b\u4e0a\u79fb\u81f3\u811a\u672c\u8bed\u8a00\uff08Python\uff09\u8fd9\u4e00\u5c42\uff0c\u4f46\u5c3d\u7ba1\u5982\u6b64\uff0c\u867d\u7136\u80fd\u591f\u652f\u6301\u52a8\u6001\u7a0b\u5e8f\uff0c\u4f46\u662f\u4e0a\u5c42\u7684\u89e3\u91ca\u8fc7\u7a0b\u4ecd\u7136\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"Reality World\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898\u7684\u65b9\u6cd5\u662f\u53ea\u63d0\u4f9b\u811a\u672c\u8bed\u8a00\u5c42\u9762\u7684\u4f18\u5316\u6216\u8005\u89e3\u91ca\uff0c\u800c\u4e3a\u4e86\u4fdd\u6301\u6027\u80fd\uff0cRW\u4e0d\u4f1a\u8fdb\u884c\u4efb\u4f55\u5e95\u5c42\u7684\u7279\u5b9a\u4f18\u5316\uff0c\u540c\u65f6\u56e0\u4e3aRW\u8981\u4fdd\u6301\u8ba1\u7b97\u7684\u901a\u7528\u6027\uff0c\u4ee5\u53ca\u5b83\u7684\u76ee\u6807\u662f\u9762\u5411\u903b\u8f91\u7ed3\u6784\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u53bb\u505a\u8fd9\u4e00\u5c42\uff0c\u53ea\u9700\u8981\u901a\u8fc7\u811a\u672c\u8bed\u8a00\u5c42\u7684DSL\u4f7f\u5f97\u5f00\u53d1\u8fc7\u7a0b\u8db3\u591f\u7b80\u5355\u5c31\u884c\uff0cRW\u7684\u67b6\u6784\u66f4\u50cfUnity DOTS\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e9bReality Create\u7684\u5185\u7f6e\u56fa\u5b9a\u7b97\u6cd5\u9002\u5408\u7528Taichi\u7f16\u8bd1\u5417\uff1f")),(0,n.kt)("p",null,"Taichi\u7684\u53e6\u5916\u4e00\u4e2a\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u7f16\u8bd1\u662f\u8ddf\u7b97\u6cd5\u6570\u636e\u7ed3\u6784\u76f8\u5173\u7684\uff0c\u4f8b\u5982\u5206\u914d\u7684\u5217\u8868\u662f5\u4e2a\u8fd8\u662f10\u4e2a\u5143\u7d20\uff0c\u8fd9\u4e9b\u90fd\u4f1a\u8ddf\u7f16\u8bd1\u5668\u8026\u5408\uff0c\u5b83\u662f\u4e00\u4e2a\u4e0e\u6570\u636e\u6709\u5173\u7684\u4f18\u5316\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e0e\u62bd\u8c61\u7ed3\u6784\u6709\u5173\u7684\u4f18\u5316\uff0c\u6216\u8005\u8fd9\u4e9b\u6570\u503c\u5373\u4f7f\u4e0d\u662f\u6765\u6e90\u4e8e\u8fd0\u884c\u65f6\uff0c\u4e5f\u662f\u4e0e\u7c7b\u578b\u7684\u5b9a\u4e49\u6709\u5173\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u5b83\u53ea\u9002\u5408\u4e0e\u56fa\u5b9a\u7684\u7b97\u6cd5\u5b9e\u73b0\u3002"),(0,n.kt)("h4",{id:"7314-\u5bf9\u6bd4"},"7.3.1.4 \u5bf9\u6bd4"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null}),(0,n.kt)("th",{parentName:"tr",align:null},"Taichi"),(0,n.kt)("th",{parentName:"tr",align:null},"Creation Script"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u76ee\u6807"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u5e95\u5c42\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u4e0a\u5c42\u8bed\u4e49\u3001\u529f\u80fd\u3001\u903b\u8f91")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u7f16\u8bd1\u7c7b\u578b"),(0,n.kt)("td",{parentName:"tr",align:null},"C++\u4fa7"),(0,n.kt)("td",{parentName:"tr",align:null},"\u811a\u672c\u4fa7")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u4f18\u5316\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u6df1\u5ea6\u4f18\u5316\uff0c\u4f8b\u5982\u9488\u5bf9\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u8fdb\u884c\u6df1\u5ea6\u7684\u4f18\u5316"),(0,n.kt)("td",{parentName:"tr",align:null},"\u4ec5\u9488\u5bf9\u5f00\u53d1\u590d\u6742\u7684\u8fdb\u884c\u4e00\u5b9a\u7684\u4f18\u5316\uff0c\u4f8b\u5982\u7b80\u5316\u5e76\u884c\u8ba1\u7b97\uff0c\u5f15\u5165\u4e00\u4e9b\u5feb\u6377\u53d8\u91cf\uff0c\u4e00\u4e9b\u8fb9\u754c\u9650\u5236\u7b49")))),(0,n.kt)("h3",{id:"732-modular-ai"},"7.3.2 Modular AI"),(0,n.kt)("h4",{id:"7321-\u65b0\u601d\u60f3"},"7.3.2.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"\u6211\u4eec\u9700\u8981\u4e0b\u4e00\u4ee3\u7f16\u8bd1\u5668\u548c\u7f16\u7a0b\u8bed\u8a00\u6765\u5e2e\u52a9\u89e3\u51b3\u8fd9\u79cd\u788e\u7247\u5316"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u8ba1\u7b97\u673a\u884c\u4e1a\u9700\u8981\u66f4\u597d\u7684\u786c\u4ef6\u62bd\u8c61\uff0c\u786c\u4ef6\u62bd\u8c61\u662f\u5141\u8bb8\u8f6f\u4ef6\u521b\u65b0\u7684\u65b9\u5f0f\uff0c\u4e0d\u9700\u8981\u8ba9\u6bcf\u79cd\u4e0d\u540c\u8bbe\u5907\u53d8\u5f97\u8fc7\u4e8e\u4e13\u7528\u5316\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u6211\u4eec\u9700\u8981\u652f\u6301\u5f02\u6784\u8ba1\u7b97\uff0c\u56e0\u4e3a\u8981\u5728\u4e00\u4e2a\u6df7\u5408\u8ba1\u7b97\u77e9\u9635\u91cc\u505a\u77e9\u9635\u4e58\u6cd5\u3001\u89e3\u7801JPEG\u3001\u975e\u7ed3\u6784\u5316\u8ba1\u7b97\u7b49\u7b49\u3002\u7136\u540e\uff0c\u8fd8\u9700\u8981\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u8bed\u8a00\uff0c\u4ee5\u53ca\u666e\u901a\u4eba\u4e5f\u53ef\u4ee5\u7528\u7684\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5177\u5907\u9ad8\u8d28\u91cf\u3001\u9ad8\u53ef\u9760\u6027\u548c\u9ad8\u5ef6\u5c55\u6027\u7684\u67b6\u6784\u3002")),(0,n.kt)("p",null,"\u5728GCC\u4e4b\u524d\uff0c\u6bcf\u5bb6\u516c\u53f8\u90fd\u8981\u5f00\u53d1\u81ea\u5df1\u7684\uff1a\u524d\u7aef->\u4f18\u5316\u5668->\u540e\u7aef\uff0c\u6bcf\u5bb6\u516c\u53f8\u901a\u5e38\u53ea\u5f00\u53d1\u4e00\u79cd\u524d\u7aef\u548c\u4e00\u79cd\u540e\u7aef\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff1bGCC\u5c06\u4e09\u8005\u5206\u79bb\uff0c\u51cf\u5c11\u4e86\u788e\u7247\u5316\uff1b"),(0,n.kt)("p",null,"LVVM\u662f\u4e00\u7cfb\u5217\u5e93\u7684\u7ec4\u5408\uff0c\u5b83\u7684\u6a21\u5757\u6027\u51f8\u663e\u4e86\u63a5\u53e3\u548c\u7ec4\u4ef6\u7684\u91cd\u8981\u6027\uff0cKey insight\uff1aCompilers as libraries\uff0cnot an app"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Enable embedding in other applications"),(0,n.kt)("li",{parentName:"ul"},"Mix and match components"),(0,n.kt)("li",{parentName:"ul"},"No hard coded lowering pipeline ")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cLLVM\u8fd8\u8ba9JIT\u7f16\u8bd1\uff08\u5373\u65f6\u7f16\u8bd1\uff09\u80fd\u6709\u66f4\u591a\u4f5c\u4e3a\u3002\u867d\u7136JIT\u7f16\u8bd1\u5668\u5df2\u7ecf\u662f\u4e00\u79cd\u8457\u540d\u7684\u6280\u672f\uff0c\u4f46\u5b83\u4e00\u5f00\u59cb\u662f\u7528\u5728\u5176\u4ed6\u5730\u65b9\u3002\u6709\u4e86LLVM\u4ee5\u540e\uff0c\u82af\u7247\u8bbe\u8ba1\u3001HLS\u5de5\u5177\u3001\u56fe\u5f62\u5904\u7406\u3001\u90fd\u66f4\u52a0\u4fbf\u6377\uff0c\u8fd8\u4fc3\u8fdb\u4e86CUDA\u548cGPGPU\u7684\u8bde\u751f\uff0c\u8fd9\u4e9b\u90fd\u662f\u5f88\u4e86\u4e0d\u8d77\u7684\u6210\u5c31\u3002\u4f46\u66f4\u91cd\u8981\u7684\u7684\u662f\uff0cLLVM\u6574\u5408\u4e86\u7684\u788e\u7247\u5316\u3002LLVM\u51fa\u73b0\u4e4b\u524d\u6709\u5f88\u591a\u79cdJIT\u7f16\u8bd1\u5668\u6846\u67b6\uff0c\u4f46LLVM\u7684\u5b58\u5728\uff0c\u63d0\u5347\u4e86JIT\u7f16\u8bd1\u5668\u7684\u57fa\u7ebf\uff0c\u8ba9\u5b83\u8ff8\u53d1\u51fa\u66f4\u591a\u53ef\u80fd\uff0c\u4e5f\u8ba9\u884c\u4e1a\u53ef\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u5c42\u6b21\u7684\u521b\u65b0\u3002"),(0,n.kt)("p",null,"LLVM\u7684\u4e3b\u8981\u7f3a\u70b9\u662f\u4e0d\u592a\u9002\u5408\u505a\u5e76\u884c\u5904\u7406\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u52a0\u901f\u5668\u662f\u4ec0\u4e48\uff1f\u53ef\u4ee5\u628a\u5b83\u9ad8\u5ea6\u7b80\u5316\u6210\u4e24\u4e2a\u90e8\u5206:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u4e2a\u662f\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u3002\u56e0\u4e3a\u7845\u672c\u8eab\u7684\u7ed3\u6784\u4e5f\u662f\u5e76\u884c\u7684\uff0c\u52a0\u901f\u5668\u8981\u7528\u5230\u8bb8\u591a\u6676\u4f53\u7ba1\uff0c\u4e5f\u5c31\u9700\u8981\u5f88\u591a\u7845\u6765\u8fbe\u6210\u8fd9\u79cd\u5e76\u884c\u5904\u7406\u80fd\u529b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u4e2a\u90e8\u5206\u8d77\u63a7\u5236\u4f5c\u7528\u3002\u5b83\u7684\u540d\u5b57\u4e0d\u592a\u7edf\u4e00\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u63a7\u5236\u5904\u7406\u5668\uff08Control Processor\uff09\u201d\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u5e8f\u5217\u5668\uff08Sequencer\uff09\u201d\u3002\u6709\u4eba\u5e0c\u671b\u5b83\u5c0f\u4e00\u70b9\uff0c\u6240\u4ee5\u4f1a\u505a\u72b6\u6001\u673a\u7136\u540e\u5d4c\u5165\u5bc4\u5b58\u5668\u3002\u8fd9\u4e2a\u90e8\u5206\u57fa\u672c\u4e0a\u8d77\u5230\u7f16\u6392\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u7684\u4f5c\u7528\u3002\u5982\u679c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u662f\u4e00\u4e2a\u5927\u578b\u77e9\u9635\u4e58\u6cd5\u5355\u5143\uff0c\u63a7\u5236\u5904\u7406\u5668\u5c31\u4f1a\u547d\u4ee4\u5b83\u6267\u884c\u4e00\u4e9b\u5b8f\u64cd\u4f5c\uff0c\u4f8b\u5982\u4ece\u8fd9\u4e2a\u5185\u5b58\u533a\u52a0\u8f7d\u3001\u6267\u884c\u67d0\u4e00\u64cd\u4f5c\u3001\u6267\u884c\u53e6\u4e00\u64cd\u4f5c\u3001\u66f4\u65b0SRAM\u7b49\u3002")),(0,n.kt)("p",null,"\u8fd8\u6709\u4e00\u4e9b\u52a0\u901f\u5668\u5f88\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u63a7\u5236\u903b\u8f91\u548c\u8ba1\u7b97\u4e4b\u95f4\u7684\u6bd4\u7387\u4e5f\u5404\u6709\u4e0d\u540c\u3002\u6b63\u5982Patterson\u548cHennessy\u6240\u8bf4\u90a3\u6837\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u70b9\uff0c\u4f46\u6bcf\u4e2a\u70b9\u90fd\u9700\u8981\u4e00\u5b9a\u7a0b\u5ea6\u7684\u7f16\u6392\u3002\u4f46\u4eba\u4eec\u5e38\u5e38\u5fd8\u8bb0\u5176\u4ed6\u4e00\u4e9b\u76f8\u5173\u7684\u5de5\u4f5c\uff0c\u6bd4\u5982\uff0c\u4f60\u4e0d\u6b62\u9700\u8981\u7f16\u6392\uff0c\u8fd8\u8981\u89e3\u51b3\u542f\u52a8\u95ee\u9898\uff0c\u6bd4\u5982\u7535\u6e90\u7ba1\u7406\uff0c\u8fd8\u8981\u4e0d\u65ad\u8c03\u8bd5\u6392\u9519\u3002\u5982\u679c\u4f60\u60f3\u505a\u5f97\u5c3d\u5584\u5c3d\u7f8e\uff0c\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u90e8\u4ef6\u8fdb\u884c\u7f16\u7a0b\uff1b\u5982\u679c\u4f60\u5e0c\u671b\u7b80\u5355\u4e00\u70b9\uff0c\u53ef\u4ee5\u628a\u8fd9\u4e9b\u90e8\u4ef6\u505a\u5f97\u5f88\u5c0f\u3002"),(0,n.kt)("p",null,"\u5f53\u63a7\u5236\u5904\u7406\u5668\u548c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u90fd\u9f50\u5907\u4e4b\u540e\uff0c\u600e\u4e48\u7ed9\u5b83\u4eec\u8f93\u5165\u548c\u8f93\u51fa\u4fe1\u606f\uff1f\u8fd9\u65f6\u5c31\u9700\u8981\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u3002\u6839\u636e\u62bd\u8c61\u7b49\u7ea7\u7684\u4e0d\u540c\uff0c\u8fd9\u4e2a\u5185\u5b58\u63a5\u53e3\u53ef\u4ee5\u662f\u5c0f\u578b\u7684block\uff0c\u4e5f\u53ef\u4ee5\u662f\u652f\u6301\u7269\u8054\u7f51\u7684\u82af\u7247\uff0c\u8fd9\u6837\u52a0\u901f\u5668\u5c31\u53ef\u4ee5\u548c\u8be5\u82af\u7247\u8fde\u63a5\u6574\u4e2a\u7f51\u7edc\u901a\u4fe1\u4e86\u3002\u8fd9\u91cc\u9700\u8981\u7528\u5230\u50cfAMBA\u6216\u7c7b\u4f3c\u7684\u6280\u672f\u3002"),(0,n.kt)("p",null,"\u4f60\u53ef\u4ee5\u5728\u66f4\u5927\u7684\u7c92\u5ea6\uff08granularity\uff09\u4e0a\u6784\u5efa\u6574\u4e2a ASIC\uff0c\u6240\u6709\u7684 ASIC \u90fd\u5728\u52a0\u901f\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4f60\u53ef\u80fd\u6b63\u5728\u4e0e PCI \u901a\u4fe1\uff0c\u5e76\u4e14\u6b63\u5728\u82af\u7247\u5916\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u4f46\u8fd9\u79cd\u201c\u6211\u6709\u4e00\u4e2a\u63a7\u5236\u5904\u7406\u5668\uff0c\u6709\u4e00\u4e2a\u8ba1\u7b97\u5355\u5143\u548c\u6709\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u201d\u7684\u6a21\u578b\uff0c\u662f\u6784\u5efa\u8fd9\u4e9b\u4e1c\u897f\u7684\u4e00\u79cd\u975e\u5e38\u6807\u51c6\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u6211\u7684\u4e3b\u5f20\u662f\u521b\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u53d1\u5c55\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u901a\u8fc7\u4e0d\u65ad\u521b\u65b0\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u6211\u4eec\u5e94\u8be5\u5bf9\u6b64\u8fc7\u7a0b\u6240\u9700\u7684\u4e00\u5207\u5b9e\u884c\u6807\u51c6\u5316\uff0c\u901a\u8fc7\u6807\u51c6\u5316\u80fd\u591f\u5feb\u901f\u5b8c\u6210\u5de5\u4f5c\uff0c\u7136\u540e\u5c31\u53ef\u4ee5\u628a\u65f6\u95f4\u82b1\u5728\u771f\u6b63\u91cd\u8981\u7684\u4e8b\u60c5\u4e0a\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6709\u4e00\u79cd\u76f8\u5bf9\u8f83\u65b0\u7684\u7f16\u8bd1\u5668\u6280\u672fMLIR\u53ef\u4ee5\u5e2e\u4e0a\u5fd9\u3002\u4f60\u53ef\u4ee5\u628aMLIR\u770b\u4f5c\u662f\u4e00\u4e2a\u5143\u7f16\u8bd1\u5668\uff0c\u5b83\u5141\u8bb8\u4f60\u975e\u5e38\u5feb\u901f\u5730\u6784\u5efa\u52a0\u901f\u5668/\u7f16\u8bd1\u5668\u3002MLIR\u7684\u5168\u79f0\u662f\u201c\u591a\u7ea7\u4e2d\u95f4\u8868\u793a\u201d\uff0c\u5b83\u652f\u6301\u6784\u5efa\u5206\u5c42\u7f16\u8bd1\u5668\uff0c\u5e76\u4ee5\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u65b9\u5f0f\u6784\u5efa\uff0c\u540c\u65f6\u4fdd\u7559\u9886\u57df\u7684\u590d\u6742\u6027\u3002\u7136\u540e\uff0c\u4f7f\u7528MLIR\u63d0\u4f9b\u7684\u5927\u91cf\u5e93\u548c\u4f8b\u7a0b\u6765\u505a\u4e00\u4e9b\u4e8b\u60c5\uff0c\u6bd4\u5982\uff0c\u7528\u591a\u9762\u4f53\u7f16\u8bd1\u5668\u6765\u505a\u5faa\u73af\u5c55\u5f00\u548c\u5faa\u73af\u878d\u5408\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\uff0c\u6211\u4eec\u5f00\u59cb\u770b\u5230\u7684\u662f\uff0cMLIR\u5f00\u59cb\u7edf\u4e00\u5f02\u6784\u8ba1\u7b97\u7684\u4e16\u754c\uff0c\u8fd9\u4e5f\u662f\u6211\u5e0c\u671b\u770b\u5230\u7684\u3002\u6240\u6709\u7684\u5927\u516c\u53f8\u73b0\u5728\u90fd\u5728\u4e0d\u540c\u7a0b\u5ea6\u5730\u4f7f\u7528MLIR\uff0c\u6211\u8ba4\u4e3a\uff0c\u5efa\u7acb\u5728RISC-V\u4e4b\u4e0a\u7684MLIR\u5f88\u6709\u5fc5\u8981\uff0c\u56e0\u4e3a\u4e00\u65e6\u5f00\u59cb\u4ece\u4e0b\u5f80\u4e0a\u6574\u5408\u884c\u4e1a\uff0c\u5c31\u53ef\u4ee5\u5f00\u59cb\u628a\u8d8a\u6765\u8d8a\u591a\u7684\u5c42\uff08layer\uff09\u62c9\u5230\u4e00\u8d77\uff0c\u91cd\u590d\u4f7f\u7528\u66f4\u591a\u7684\u6280\u672f\u3002\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4e13\u6ce8\u5728\u5806\u6808\u4e2d\u66f4\u6709\u8da3\u7684\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u4e00\u904d\u53c8\u4e00\u904d\u5730\u91cd\u65b0\u53d1\u660e\u8f6e\u5b50\u3002"),(0,n.kt)("p",null,"\u4e5f\u8bb8\u4f60\u4e0d\u4f1a\u611f\u5230\u60ca\u8bb6\uff0c\u4f46\u6211\u8ba4\u4e3a\u7b54\u6848\u662f\u7f16\u8bd1\u5668\uff0c\u8fd9\u662f\u771f\u6b63\u8981\u8d70\u7684\u4e00\u6761\u8def\u3002"),(0,n.kt)("p",null,"\u4f5c\u4e3a\u7f16\u8bd1\u5668\u7f16\u7a0b\u8bed\u8a00\u4ece\u4e1a\u8005\uff0c\u6211\u8ba4\u4e3a\u786c\u4ef6\u8bbe\u8ba1\u8fd9\u4e2a\u9886\u57df\u5df2\u7ecf\u5230\u4e86\u91cd\u65b0\u8bc4\u4f30\u7684\u5730\u6b65\u3002\u6574\u4e2a\u9886\u57df\u662f\u5efa\u7acb\u5728\u4e24\u79cd\u6280\u672f\u4e4b\u4e0a\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e3b\u8981\u662f\u4e00\u79cd\u53eb\u505aVerilog\u7684\u6280\u672f\uff0c\u4f60\u5927\u6982\u7387\u53ef\u80fd\u4e0d\u559c\u6b22Verilog\u3002\u5b83\u6709\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u6807\u51c6\uff0c\u5f53\u6211\u770b\u5b83\u65f6\uff0c\u4e0d\u77e5\u9053\u5b83\u662f\u88ab\u8bbe\u8ba1\u6210\u4e00\u4e2aIR\uff0c\u4e5f\u5373\u4e00\u4e2a\u4e0d\u540c\u5de5\u5177\u4e4b\u95f4\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u8fd8\u662f\u88ab\u8bbe\u8ba1\u6210\u8ba9\u4eba\u4eec\u76f4\u63a5\u4e66\u5199\u7684\u4e1c\u897f\u3002\u6211\u8ba4\u4e3a\uff0c\u5b83\u5728\u8fd9\u4e24\u65b9\u9762\u90fd\u5f88\u5931\u8d25\uff0c\u5b83\u771f\u7684\u5f88\u96be\u4f7f\u7528\uff0c\u5bf9\u5de5\u5177\u6765\u8bf4\u4e5f\u5f88\u96be\u751f\u6210\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0cEDA\u5de5\u5177\u3001\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u5df2\u7ecf\u975e\u5e38\u6210\u719f\uff0c\u5b83\u4eec\u975e\u5e38\u6807\u51c6\u5316\uff0c\u6709\u5f88\u591a\u5927\u516c\u53f8\u6b63\u5728\u63a8\u52a8\u548c\u5f00\u53d1\u8fd9\u4e9b\u5de5\u5177\u3002\u4f46\u4ed6\u4eec\u7684\u521b\u65b0\u901f\u5ea6\u5e76\u4e0d\u5feb\uff0c\u8bbe\u8ba1\u65f6\u5e76\u4e0d\u6ce8\u91cd\u53ef\u7528\u6027\u3002\u5b83\u4eec\u6bd4\u52a0\u901f\u5668\u7f16\u8bd1\u5668\u8981\u5dee\u5f97\u591a\uff0c\u7edd\u5bf9\u4e0d\u662f\u4ee5\u8f6f\u4ef6\u67b6\u6784\u7684\u6700\u4f73\u5b9e\u8df5\u6765\u6784\u5efa\u7684\uff0c\u800c\u4e14\u6210\u672c\u4e5f\u975e\u5e38\u9ad8\u3002\u56e0\u6b64\uff0c\u8fd9\u4e2a\u9886\u57df\u6709\u5de8\u5927\u7684\u521b\u65b0\u673a\u4f1a\u3002"),(0,n.kt)("p",null,"\u6211\u4e0d\u662f\u7b2c\u4e00\u4e2a\u8ba4\u8bc6\u5230\u8fd9\u4e00\u70b9\u7684\u4eba\u3002\u5728\u5f00\u6e90\u793e\u533a\uff0c\u5df2\u7ecf\u6784\u5efa\u4e86\u4e00\u5806\u5de5\u5177\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u8fd9\u4e9b\u5de5\u5177\u975e\u5e38\u68d2\uff0c\u6bd4\u5982Verilator\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0cYosys\u662f\u53e6\u4e00\u4e2a\u975e\u5e38\u68d2\u7684\u5de5\u5177\uff0c\u5b83\u6709\u5f88\u597d\u7684\u5b9a\u7406\u8bc1\u660e\u5668\uff08Theorem Prover\uff09\u3002"),(0,n.kt)("p",null,"\u6211\u7684\u62c5\u5fe7\u5728\u4e8e\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u7406\u60f3\u76ee\u6807\u662f\u8bd5\u56fe\u50cf\u4e13\u6709\u5de5\u5177\u4e00\u6837\u597d\uff0c\u800c\u6211\u5e76\u4e0d\u771f\u7684\u8ba4\u4e3a\u4e13\u6709\u5de5\u5177\u6709\u90a3\u4e48\u597d\u3002\u53e6\u5916\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u8bbe\u8ba1\u8005\u5e76\u6ca1\u6709\u5408\u4f5c\u3002\u6bcf\u4e2a\u5de5\u5177\u90fd\u5728\u9075\u5faa\u5355\u4e00\u50f5\u5316\u7684\u65b9\u6cd5\uff0c\u6ca1\u6709\u5b9e\u73b0\u5927\u7a0b\u5ea6\u7684\u6a21\u5757\u5316\u6216\u91cd\u590d\u4f7f\u7528\uff0c\u53ef\u4ee5\u4ece\u5176\u4e2d\u4e00\u4e9b\u5de5\u5177\u4e2d\u5f97\u5230\u7f51\u7edc\u5217\u8868\uff0c\u7528\u5b83\u6765\u89e3\u6790\u4e00\u4e9bVerilog\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\u4f46\u662f\uff0c\u5b83\u4e0d\u662f\u7531\u57fa\u4e8e\u5e93\u7684\u8bbe\u8ba1\u6784\u5efa\uff0c\u4e0eLLVM\u4e4b\u7c7b\u7684\u4e1c\u897f\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u8981\u521b\u5efa\u5728\u8bed\u6cd5\u4e0a\u6b63\u786e\uff0c\u5e76\u4e14\u80fd\u8868\u8fbe\u4f60\u60f3\u8981\u7684\u4e1c\u897f\u7684Verilog\u975e\u5e38\u56f0\u96be\u3002\u6b64\u5916\uff0c\u56e0\u4e3a\u8bb8\u591a\u4e0eVerilog\u6709\u5173\u7684\u5de5\u5177\u90fd\u6709\u70b9\u5947\u602a\uff0c\u800c\u4e14\u5f88\u96be\u9ad8\u8d28\u91cf\u5730\u9884\u6d4b\u3002\u751f\u6210\u4e0e\u5de5\u5177\u517c\u5bb9\u7684Verilog\u662f\u6bcf\u4e2a\u524d\u7aef\u5de5\u5177\u90fd\u5fc5\u987b\u91cd\u65b0\u53d1\u660e\u7684\u4e00\u95e8\u9ed1\u79d1\u6280\u3002\u56e0\u6b64\uff0c\u5728\u5806\u6808\u4e2d\u771f\u7684\u7f3a\u5931\u4e86\u4e00\u79cd\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u5141\u8bb8\u4eba\u4eec\u5728\u7f16\u7a0b\u6a21\u578b\u6c34\u5e73\u4e0a\u8fdb\u884c\u521b\u65b0\uff0c\u5e76\u5141\u8bb8\u4eba\u4eec\u627e\u5230\u65b9\u6cd5\u8ba9\u6240\u6709\u5de5\u5177\u90fd\u63a5\u53d7\u5b83\u3002"),(0,n.kt)("p",null,'\u6709\u4e00\u4e2a\u53ebCIRCT\u7684\u65b0\u5f00\u6e90\u9879\u76ee\u6b63\u8bd5\u56fe\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002CIRCT\u7684\u5168\u79f0\u662f"Circuit IR for Compilers and Tools\uff08\u7f16\u8bd1\u5668\u548c\u5de5\u5177\u7684Circuit IR\uff09"\uff0c\u5b83\u6784\u5efa\u5728MLIR\u548cLLVM\u4e4b\u4e0a\u3002CIRCT\u793e\u533a\u7684\u76ee\u7684\u662f\u63d0\u5347\u6574\u4e2a\u786c\u4ef6\u8bbe\u8ba1\u4e16\u754c\uff0c\u4fc3\u8fdb\u7f16\u7a0b\u6a21\u578b\u7684\u521b\u65b0\uff0c\u5e76\u542f\u7528\u4e00\u5957\u65b0\u7684\u6a21\u5757\u5316\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u3002\u5b83\u786e\u5b9e\u8fd0\u7528\u4e86\u5f88\u591a\u6211\u4eec\u5230\u76ee\u524d\u4e3a\u6b62\u4e00\u76f4\u5728\u8ba8\u8bba\u7684\u57fa\u4e8e\u5e93\u7684\u6280\u672f\u3002'),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u7ec4\u5408\u7684\u57fa\u4e8e\u5e93\u7684\u5de5\u5177\u94fe\uff0c\u53ef\u4ee5\u5efa\u7acb\u6709\u8da3\u7684\u65b0\u7684\u5f39\u6027\u63a5\u53e3\u8fde\u63a5\uff0c\u4f60\u53ef\u4ee5\u5efa\u7acbChisel\u793e\u533a\u6b63\u5728\u63a2\u7d22\u7684\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u7528\u5b83\u6765\u52a0\u901fChisel\u6d41\u7a0b\u3002\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\uff0c\u53ef\u4ee5\u8ba9\u5f88\u591a\u4eba\u4e00\u8d77\u5de5\u4f5c\uff0c\u63a8\u52a8\u4e0d\u540c\u65b9\u5f0f\u7684\u521b\u65b0\u3002\u6211\u4eec\u6b63\u5728\u5efa\u7acb\u4e00\u4e2a\u771f\u6b63\u4f1f\u5927\u7684\u5c0f\u4e16\u754c\uff0c\u8ba9\u5173\u5fc3\u786c\u4ef6\u7f16\u8bd1\u5668\u7684\u4eba\u5728\u4e00\u8d77\u5de5\u4f5c\uff0c\u8fd9\u5f88\u6709\u8da3\u3002\u8fd9\u9879\u5de5\u4f5c\u4ecd\u5904\u4e8e\u65e9\u671f\uff0c\u76ee\u6807\u662f\u66f4\u5feb\u5730\u6784\u5efa\u52a0\u901f\u5668\uff0c\u8ba9\u52a0\u901f\u5668\u53d8\u5f97\u66f4\u5feb\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Modular,")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"composable &")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"layered architecture")," is what the world of AI needs, and ",(0,n.kt)("strong",{parentName:"li"},"we are building it for everyone."))),(0,n.kt)("h4",{id:"7322-challenges"},"7.3.2.2 Challenges"),(0,n.kt)("p",null,"Compiling an AI graph is actually quite different from traditional compilation problems. "),(0,n.kt)("p",null,"An AI graph contains two things: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"the graph topology (how the layers are interconnected) and "),(0,n.kt)("li",{parentName:"ul"},"the model weights (parameters associated with specific layers). ")),(0,n.kt)("p",null,"In terms of size, the graph topology is on the order of kilobytes, whereas weights are on the order of megabytes and gigabytes. For example, look at some of the bigger models released by Meta. The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/facebookresearch/metaseq/tree/main/projects/OPT"},"Open Pre-trained Transformers")," have 30B, 66B, or even 175B+ parameters, which equates to 100+ gigabytes of weights. There are even larger models like ",(0,n.kt)("a",{parentName:"p",href:"https://www.deepmind.com/blog/language-modelling-at-scale-gopher-ethical-considerations-and-retrieval"},"Gopher")," or ",(0,n.kt)("a",{parentName:"p",href:"https://www.microsoft.com/en-us/research/blog/using-deepspeed-and-megatron-to-train-megatron-turing-nlg-530b-the-worlds-largest-and-most-powerful-generative-language-model/"},"Megatron")," too."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR in the Modular compilation stack")),(0,n.kt)("p",null,"The Modular stack leverages the ",(0,n.kt)("a",{parentName:"p",href:"http://mlir.llvm.org/"},"MLIR compiler infrastructure")," to represent and transform AI models, including AI operator graphs (for multiple frameworks), mid-level runtime primitives, and low-level machine code generation. Our team has many of the ",(0,n.kt)("a",{parentName:"p",href:"https://arxiv.org/abs/2002.11054"},"foundational architects of MLIR"),", who were deeply involved in ",(0,n.kt)("a",{parentName:"p",href:"https://www.blog.google/technology/ai/mlir-accelerating-ai-open-source-infrastructure/"},"releasing MLIR to the world"),", and we continue to actively maintain large portions of core ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," today."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR is a good thing, but its approach for managing weights was not!")),(0,n.kt)("p",null,"One of the fundamental building blocks of MLIR is an ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"Attribute"),", which you can think of as a form constant data that is \u201cunique\u2019d\u201d (aka, memoized, or ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/String_interning"},"intern\u2019ed"),"). Attributes are user extensible, meaning they may take various forms depending on the use case. Attributes are used for things like constant expression values (e.g. \u201c5\u201d, \u201c10.0\u201d, etc.), string literals, for enumerators (e.g. \u201cless than\u201d, \u201cgreater than\u201d, \u201cequal to\u201d, etc.), for arrays of data \u2026 and far more. Most MLIR-based AI tooling uses attributes to hold weights for AI models."),(0,n.kt)("p",null,"However, this is a problem: model weights can be enormous, and MLIR stores a two-gigabyte weight tensor the same way as a four-byte tensor \u2014 in an attribute containing a unique\u2019d array of elements. This creates an obvious problem given we just used the words ",(0,n.kt)("strong",{parentName:"p"},"unique\u2019d")," and ",(0,n.kt)("strong",{parentName:"p"},"gigabytes")," so close together!"),(0,n.kt)("p",null,'Here is the challenge: when something is unique\u2019d in MLIR, it is allocated, hashed, and stored within an "',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),'". These objects have lifetimes attached to the ',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),", and they are not destroyed until the context is destroyed. This is great for small values because we can pass them around and compare unique'd objects by pointer, share allocations for attributes (very common), and more."),(0,n.kt)("p",null,"These benefits turn into a liability with huge weight tensors: we don\u2019t want to reallocate, copy, or unique them. We also don\u2019t want them to live forever: it is important to deallocate big weights when the computation no longer references them. For example, when we run a tool that quantizes our model, it needs to transform the operator graph and generate new weights \u2014 and can end up with multiple copies of that data which all live for the duration of the compilation process."),(0,n.kt)("p",null,"Another problem for ML tooling is how MLIR was serialized to the file system. When we started, MLIR had no binary serialization format - just a textual format. This is a problem for large weights because each byte of binary data ended up being emitted in a hexadecimal form - taking 2x the space as the data it is encoding. That means that we end up not only taking a long time to create the hex ",(0,n.kt)("em",{parentName:"p"},"(about 20 seconds for a decently sized multi-gigabyte model)"),", but our intermediate files are twice as big as they should be - 2x an already big number!"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A bigger impact than just developer productivity")),(0,n.kt)("p",null,"This well-intended design mechanism can cripple even the best compilers. The most obvious challenge is that it compounds the time necessary to compile, inspect, and transform a model. If you have ever used the excuse, \"My code's compiling,\" you'll be aware of the pain this creates. Here, we are forcing the processor to continuously allocate, copy, and hash multiple gigabytes of data."),(0,n.kt)("p",null,"A bigger problem than compile-time is that memory use impacts larger scale architectural features in the Modular stack. For example, because our compiler and technology stack itself is highly parallel and utilizes advanced features like online search, memory use directly affects the amount of work we can do in parallel. This is important to get the highest quality of results."),(0,n.kt)("p",null,"At Modular, it is core to our ethos that we build tools that users will fall in love with. We realize that advanced features simply won\u2019t get used if they are difficult to use, impact productivity, or have significant caveats (e.g. they don\u2019t work in all cases). We love that fixing ",(0,n.kt)("strong",{parentName:"p"},"these foundational problems with large weights"),", allows us to ",(0,n.kt)("em",{parentName:"p"},"subtract complexity")," from our users lives and workflows."),(0,n.kt)("h4",{id:"7323-core-additions-to-mlir"},"7.3.2.3 Core additions to MLIR"),(0,n.kt)("p",null,"We took a step back to understand what we needed to solve this problem with large model tooling and listed out:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Only allocate memory when necessary"),": We know it is more efficient to memory map large data (like weights) from disk, instead of copying data into malloc\u2019d blocks.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"No hashing or uniquing"),": Let\u2019s not check equality of 2 gigabytes blobs of data; weights should be identified by name instead of being implicitly unique\u2019d by content.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enabling Inline Mutation"),": If there is only one user of the data, we should be able to quantize, transform and manipulate data in place instead of making a copy of it first.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enable deallocation"),": The data we are working with is huge, and we need to deallocate it when the last reference to the data is destroyed.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Fast serialization"),": Whether JITing, searching optimization parameters, or just iterating locally, we cache IR for many reasons, and it should be ",(0,n.kt)("strong",{parentName:"li"},"fast."))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fixing the weight attributes")),(0,n.kt)("p",null,"\u6a21\u578b\u4e2d\u7684weight\u662f\u5e38\u91cf\uff0c\u5728\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u53d8\u3002\u8fd9\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u57fa\u7840\uff0c\u8ddf\u5176\u4ed6\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u60c5\u51b5\u4e0d\u4e00\u6837\uff0c\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u4e0d\u53d8\u91cf\u662f\u5c11\u6570\uff0c\u800c\u5927\u90e8\u5206\u53d8\u91cf\u90fd\u4f1a\u968f\u7740\u8ba1\u7b97\u8fc7\u7a0b\u800c\u53d1\u751f\u53d8\u5316\u3002"),(0,n.kt)("p",null,"The first four requirements address one fundamental problem with how we've been using MLIR: weights are constant data, but shouldn't be managed like other MLIR attributes. Until now, we've been trying to place a square peg into a round hole, creating a lot of wasted space that's costing us development velocity (and, therefore, money for users of the tools)."),(0,n.kt)("p",null,'We decided we needed to manage this weight data differently than other types of attributes. This prompted our first fundamental extension to MLIR, "Resources," a mechanism to separate data from its references within the computation.'),(0,n.kt)("p",null,"\u7b2c\u4e00\u4e2a\u57fa\u672c\u6269\u5c55\uff1aresources\uff0c\u4e00\u79cd\u5c06\u6570\u636e\u53ca\u5176\u5f15\u7528\u8fdb\u884c\u5206\u79bb\u7684\u673a\u5236"),(0,n.kt)("p",null,"Each blob of serialized MLIR may now contain additional sections, known as \u201cresource\u201d sections. These sections either include "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u201cdialect\u201d resources (a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/LangRef/#dialects"},"dialect")," is essentially a namespace-like abstraction used when extending MLIR) or "),(0,n.kt)("li",{parentName:"ul"},"\u201cexternal\u201d resources (for toolchain-specific data). ")),(0,n.kt)("p",null,"The data within these sections is represented using a simple key-value pairing, creating a json-like structure, like so:"),(0,n.kt)("p",null,"Encoding resources this way also brings some secondary benefits:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Printing IR for debugging is less error-prone, leading to a better development experience"),": Resources are specialized sections; we don\u2019t have to worry about accidentally dumping 4 gigabytes to the screen while debugging something.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"We can soundly process the IR without the data present"),": With the IR only holding references to the data and not the data itself, we can omit the underlying resource data if desired. For example, this greatly simplifies reproducers that don\u2019t need the big weight data (consider sending a colleague a 20-megabyte file instead of a 1.2-gigabyte file).")),(0,n.kt)("p",null,"By introducing resources as a new concept, we\u2019ve finally been able to build a clean separation between program and data. Now we never pass our weight data directly to an attribute. Instead, we pass a weak reference to the attribute and pass the data to a specialized manager. With this, we now have much more control over when and how weights are allocated, mutated, and destroyed."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A new binary encoding for MLIR")),(0,n.kt)("p",null,"With a better representation of our weights, the only thing we needed now was a more efficient method of storing these weights when serializing our MLIR representation."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"What is the user impact?")),(0,n.kt)("p",null,"In the end, adding resources and a binary encoding to MLIR has made our toolchain and development workflow significantly faster and reduced our memory usage substantially - making our performance and velocity incredible. It\u2019s also made everything about MLIR better \u2014 more on that later."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},(0,n.kt)("img",{parentName:"a",src:"https://uploads-ssl.webflow.com/62a8b4a3467401a65a14d263/636c536434d44a0efd47c896_mlir-dot-touch.jpg",alt:"img"}))),(0,n.kt)("p",null,"Said by every ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," developer, everywhere"),(0,n.kt)("p",null,"\u200d"),(0,n.kt)("p",null,"To validate this, we tested our changes across models of various sizes, measuring the speed of a real-life lowering and optimization pipeline in our MLIR-based graph compiler (from a TensorFlow serialized model to the input format of our runtime) and the memory used during that process."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Compilation Workflow","*")),(0,n.kt)("p",null,"MLIR is now significantly faster. Going from a serialized TensorFlow model (from a checkout of TensorFlow 2.10) to our runtime input format, a process that involves many transformations of the underlying program representation, was ~1.8-2x faster in terms of wall clock time than before, with speed scaling consistently across the various model sizes."),(0,n.kt)("p",null,"Diving a bit deeper, the TF serialized model processing is now basically instant \u2014 all our time is spent writing the big-weight data to disk when generating the MLIR. In fact, the actual time spent in our code is about 10x faster than before. Most of the time is now bounded by the speed at which the SSD writes >1 gigabyte of data to disk."),(0,n.kt)("p",null,"For ML developers using our tools this means faster model compilation, thereby improving productivity and iteration time. This has benefits for production environments as well when loading (and compiling) models. For example, when dynamically loading and unloading models based on incoming traffic \u2014 e.g., use cases with many of personalized/fine-tuned user models."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Serialization","*")),(0,n.kt)("p",null,"Also faster is serialization due to the introduction of a binary encoding. Interacting with MLIR via external tools depends on the reading and writing of serialized MLIR \u2014 whether for introspection, caching, reproducer generation, etc. Again, we tested serialization performance across various model sizes and saw a significant speed-up, peak performance being SSD bound. More specifically, reading textual data for larger models took ~5 seconds compared to <10ms for reading binary. And writing was > ~5x faster for binary than textual formats."),(0,n.kt)("p",null,"For Modular, this enables us to develop infrastructure and tooling around MLIR that would otherwise be prohibitively slow or expensive. For example, this would allow us to provide an efficient debugger that relies on caching model representations throughout the compilation workflow, improving the underlying compiler performance, and much much more."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Memory Usage","*")),(0,n.kt)("p",null,"Finally, the mmap capabilities of our binary serialization and the separation of IR and data via resources have also significantly reduced memory consumption. Across all model sizes, we are using less memory during the compilation process. Where before we had to allocate the relative size of the weights in a model, we no longer have to allocate at all for the weights, meaning we save significant memory every time we compile."),(0,n.kt)("h4",{id:"7324-\u7b14\u8bb0"},"7.3.2.4 \u7b14\u8bb0"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u5e73\u53f0\uff0c\u6bd4\u5982TensorFlow\u3001PyTorch\u548cCUDA\uff0c\u4ed6\u4eec\u5e76\u4e0d\u662f\u6a21\u5757\u5316\u7684\uff0c\u6240\u4ee5\u5b83\u4eec\u968f\u7740\u6280\u672f\u7684\u4e0d\u65ad\u53d1\u5c55\u79ef\u7d2f\u4e86\u8d8a\u6765\u8d8a\u591a\u7684\u76f8\u4e92\u4f9d\u8d56\u548c\u8026\u5408\uff0c\u7136\u540e\u5728\u4f01\u4e1a\u5b9e\u9645\u90e8\u7f72\u5e94\u7528\u7684\u65f6\u5019\uff0c\u9762\u5bf9\u5f02\u6784\u7684\u786c\u4ef6\u5e73\u53f0\u548c\u52a0\u901f\u5668\uff0c\u6bd4\u5982\u670d\u52a1\u5668\u3001\u79fb\u52a8\u7aef\u3001microcontroller\uff0c\u6216\u8005\u6d4f\u89c8\u5668\u767b\uff0c\u4f01\u4e1a\u5c31\u9700\u8981\u8ddf\u8fd9\u79cd\u8026\u5408\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Modular\u76ee\u6807\u662f\u9762\u5411\u5f02\u6784\u73af\u5883\u7684\u5b9e\u9645\u90e8\u7f72\u95ee\u9898\uff0c\u5728\u8f6f\u4ef6\u7684\u6784\u5efa\u5c42\u9762\uff0c\u901a\u8fc7\u63d0\u4f9b\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\uff0c\u6765\u9002\u5e94\u8fd9\u79cd\u73af\u5883\u53d8\u5316\uff0c\u4f7f\u5f97\u90e8\u7f72\u6210\u672c\u66f4\u4f4e\uff0c\u90e8\u7f72\u5176\u5b9e\u4e5f\u5c31\u662f\u4ea7\u54c1\u5316\u7684\u6838\u5fc3\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5e73\u53f0\u6784\u5efa\u51fa\u7684\u662f\u5355\u4e00\u7684\u5927\u578b\u7cfb\u7edf\uff08monolithic system\uff09\uff0c\u4e00\u65e6\u8131\u79bb\u5b83\u4eec\u521d\u59cb\u7684\u76ee\u6807\uff0c\u5c31\u4e0d\u5bb9\u6613\u6269\u5c55\u548c\u6cdb\u5316\u3002\u8fd9\u79cd\u5c40\u9762\u5bfc\u81f4\u4e86\u786c\u4ef6\u4ea7\u751f\u9488\u5bf9\u8fd9\u4e9b\u5e73\u53f0\u5f00\u53d1\u5404\u79cd\u5de5\u5177\uff0c\u5bfc\u81f4AI\u5de5\u4e1a\u7684\u788e\u7247\u5316\uff0c\u8fd9\u4e9b\u5de5\u5177\u5177\u6709\u5404\u81ea\u7684\u9650\u5236\u548c\u4e00\u4e9b\u6743\u8861\u3002\u8fd9\u6837\u7684\u8bbe\u8ba1\u6a21\u5f0f\u5bfc\u81f4\u8fd9\u4e9b\u521b\u65b0\u5de5\u4f5c\u4e0d\u6613\u4e8e\u4f7f\u7528\uff0c\u4e0d\u6613\u4e8e\u79fb\u690d\uff0c\u4e5f\u4e0d\u6613\u4e8e\u4f38\u7f29\u3002\u8fd9\u6837\u7684\u6280\u672f\u4f7f\u5f97\u53ea\u6709\u5927\u516c\u53f8\u7684\u5168\u6808\u4e13\u5bb6\u624d\u80fd\u591f\u5f88\u597d\u5730\u638c\u63e1\u548c\u4f7f\u7528\u8fd9\u4e9b\u6280\u672f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"AI\u6280\u672f\u5fc5\u987b\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u88ab\u4efb\u4f55\u4eba\u4f7f\u7528\uff0c\u8fd9\u6837\u624d\u80fd\u4f7f\u5f97\u521b\u65b0\u4ea7\u54c1\u53ef\u4ee5\u590d\u6742\u7684\u8f6f\u4ef6\u548c\u786c\u4ef6\u94fe\u4e2d\u89e3\u653e\u51fa\u6765\uff0c\u4ece\u800c\u5de8\u5927\u5730\u63d0\u5347\u6211\u4eec\u7684\u65e5\u5e38\u751f\u6d3b\u3002Imagine a world where ML research ",(0,n.kt)("em",{parentName:"strong"},"truly flows")," rapidly and effectively into production from a large global community. One where these breakthroughs are more accessible to everyone, allowing product innovators to drastically improve our daily lives and be freed from the chains of software and hardware complexity.")),(0,n.kt)("h3",{id:"733-jittor"},"7.3.3 Jittor"),(0,n.kt)("p",null,"The development of deep learning frameworks revolves around improving human productivity and com- putational performance. To achieve good performance from modern processors, developers often need to write assembly language, use special instruction sets, or use specialised languages or libraries, such as shaders for GPU programming, CUDA ","[9]",", and OpenCL ","[10]",". Although these provide excellent perfor- mance, they are difficult to use and debug, and furthermore, programmers need a good understanding of the underlying hardware. Scripting languages such as Python and JavaScript are interpreted, giving immediate feedback, further reducing the difficulty of programming, but this sacrifices performance."),(0,n.kt)("p",null,"To simultaneously improve productivity and performance, various scientific computing libraries and deep learning frameworks have been developed. A widely used optimization method is static compilation with dynamic binding. This optimization method uses C, C ++, CUDA ","[9]",", or other languages to statically compile the operators needed in deep learning, while the user dynamically applies them via scripting languages such as Python and Javascript. Many frameworks adopt this approach, including Numpy ","[11]",", Matlab, Theano ","[2]",", TensorFlow ","[4]",", MXNet ","[12]",", and PyTorch ","[5]","."),(0,n.kt)("p",null,"Dynamic binding allows users to take full advantage of the underlying hardware performance when using a scripting language, but it has a problem: all operations are statically compiled, making optimiza- tions such as operator fusion difficult; this important optimization technique combines multiple operators into one operator, so that intermediate results do not need to be stored. Dynamic binding with a scripting language cannot use this optimization. For example, the user may need to calculate d = ab + c, where a, b, c are tensors. First, the scripting interpreter executes tmp = TensorMul(a,b) and then executes d = TensorAdd(tmp,c). If we could compile the whole expression, rather than applying operators one by one, we could execute d = TensorMulAndAdd(a,b,c) directly without the need for temporary storage. This is significant, as on modern processors, memory access is often much slower than calculation. However, we cannot guess what combinations of operators the user may require, and static compilation of all possible combinations is obviously infeasible. To solve this problem, we may use JIT compilation technology to dynamically compile and optimize the operators that the user needs."),(0,n.kt)("p",null,"Jittor is a completely new design of deep learning framework based on JIT compilation technology. Following the above discussion, Jittor is designed based on the following principles."),(0,n.kt)("p",null,"\u2022 It should be highly customizable yet easy to use. Users should be able to define new operators and models with just a few lines of code."),(0,n.kt)("p",null,"\u2022 It should separate coding from optimization. Users should be able to focus on coding using the front-end interface, while the code is automatically optimized by the back-end. This improves readability of the front-end code, while well-tested, standard optimization code in the back-end ensures robustness."),(0,n.kt)("p",null,"\u2022 Everything should be compiled JIT. This includes the back-end and operations. Users should be able to change the source code at any time."),(0,n.kt)("h4",{id:"7331-the-front-end"},"7.3.3.1 The front-end"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Meta-operators")),(0,n.kt)("p",null,"\u5143\u64cd\u4f5c\u662f\u5728\u4e00\u822c\u7684\u64cd\u4f5c\u4e0a\u6dfb\u52a0\u4e86\u4e00\u4e2a\u7279\u5b9a\u7684\u7c7b\u522b\uff0c\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u63d0\u4f9b\u8bb8\u591a\u5185\u7f6e\u7684\u64cd\u4f5c\u4f7f\u5f00\u53d1\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u901a\u5e38\u505a\u4e00\u4e9b\u76f8\u4f3c\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u64cd\u4f5c\u5efa\u7acb\u66f4\u9ad8\u7684\u62bd\u8c61\u3002\u901a\u5e38\u8fd9\u4e9b\u64cd\u4f5c\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Reindex\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u5efa\u7acbone-to-many\u7684\u6620\u5c04\uff0c\u4f8b\u5982broadcast\u3001pad\u3001slice\uff0cIn short, the reindex operator rearranges the input and stores it in appropriate positions of the output. Index bounds checking is also performed based on the indexing function."),(0,n.kt)("li",{parentName:"ul"},"Reindex-reduce\uff0c\u63d0\u4f9bmany-to-one\u7684\u6620\u5c04\uff0c\u4f8b\u5982sum\u3001product"),(0,n.kt)("li",{parentName:"ul"},"Element-wise\uff0c\u9010\u5143\u7d20\u8ba1\u7b97\uff0c\u4f8b\u5982\u77e9\u9635\u8ba1\u7b97\uff0c\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u5177\u6709\u76f8\u540c\u7684shape")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(2248).Z,width:"1498",height:"998"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fusion of operators")),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u7684\u7c7b\u578b\u4fe1\u606f\uff0cJittor\u53ef\u4ee5\u5c06\u591a\u4e2a\u64cd\u4f5c\u8fdb\u884c\u5408\u5e76\uff0c\u8ba1\u7b97\u51fa\u4e00\u4e2a\u65b0\u7684\u8ba1\u7b97\u516c\u5f0f\uff0c\u4f7f\u5f97\u5f88\u591a\u4e2d\u95f4\u53d8\u91cf\u7684\u5b58\u50a8\u88ab\u7701\u6389\u3002"),(0,n.kt)("p",null,"\u4f46\u5176\u6838\u5fc3\u662f\u901a\u8fc7\u5143\u64cd\u4f5c\u7684\u7c7b\u578b\u548c\u5206\u7c7b\uff0c\u77e5\u9053\u548c\u6bcf\u4e2a\u64cd\u4f5c\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u5c3d\u7ba1\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u6211\u4eec\u5728\u8fdb\u884c\u6570\u5b66\u51fd\u6570\u7684\u5408\u5e76\u65f6\uff0c\u6211\u4eec\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u6bcf\u4e2a\u503c\u662f\u591a\u5c11\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u6839\u636e\u51fd\u6570\u7684\u5f62\u5f0f\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u4e4b\u540e\uff0c\u518d\u5c06\u503c\u5e26\u5165\u6700\u540e\u7684\u51fd\u6570\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Variables")),(0,n.kt)("p",null,"Variables are tensors with the following properties:"),(0,n.kt)("p",null,"\u2022 A shape attribute.\n\u2022 A data type attribute, dtype, e.g., float or int.\n\u2022 A stop grad attribute to prevent gradient back propagation for this variable.\n\u2022 A stop fuse attribute to prevent fusion of operators associated with this variable.\nThe stop grad attribute is usually used in testing or inferencing, while the stop fuse attribute provides control over operator fusion: the user may get better performance by careful use of these attributes. For example, operator fusion will consume register resources in a GPU. With sufficient resources, fusion will always improve performance, but fusing hundreds of operators will exhaust resources and cause performance degradation."),(0,n.kt)("h4",{id:"7332-the-back-end"},"7.3.3.2 The back-end"),(0,n.kt)("p",null,"The back-end is responsible for resource management, process scheduling and compilation optimization. It includes the operator fuser, which decides the fusing strategy used for the meta-operators, external operators, which are customized operators provided by users or third-party libraries, the JIT compiler, the integrated compiler used to optimize meta-operators, and the unified graph execution, which unifies static and dynamic graphs execution."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operator fuser")),(0,n.kt)("p",null,"\u5b9e\u9645\u7684\u8ba1\u7b97\u56fe\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4e3a\u4e86\u66f4\u7b80\u5355\u5730\u5904\u7406\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c06\u8ba1\u7b97\u56fe\u770b\u505a\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u64cd\u4f5c\uff0c\u800c\u8fb9\u8868\u793a\u53d8\u91cf\uff0c\u901a\u8fc7\u5c06\u56fe\u5212\u5206\u6210\u591a\u4e2a\u5b50\u56fe\u7684\u65b9\u6cd5\u6765\u8fdb\u884cfuse\u64cd\u4f5c\u3002\u5176\u5224\u65ad\u7684\u4f9d\u636e\u4f7f\u5f97\u603b\u7684\u4ee3\u4ef7\u6700\u5c0f\uff0c\u5176\u4e2d\u4ee3\u4ef7\u51fd\u6570 \u8868\u793a\u4e3a\u6bcf\u4e2a\u5b50\u56fe\u5bf9\u53d8\u91cf\u7684\u8bfb\u548c\u5199\u7684\u6307\u4ee4\u7684\u603b\u6570\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u7684\u6027\u80fd\u74f6\u9888\u4e3b\u8981\u5728\u4e8e\u5185\u5b58\u64cd\u4f5c\u3002fusion\u901a\u8fc7\u51cf\u5c11\u5185\u5b58\u64cd\u4f5c\u6765\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u51e0\u4e2a\u7279\u5b9a\u7684\u89c4\u5219\u9700\u8981\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"JIT compiler")),(0,n.kt)("p",null,"\u5728fuser\u4e4b\u540e\uff0c\u5c06\u4ee3\u7801\u7f16\u8bd1\u4e3a\u9ad8\u6027\u80fdC++\u4ee3\u7801\u3002\u5e76\u4f1a\u8fdb\u4e00\u6b65\u88abLVVM\u4f18\u5316\u81f3\u4e0d\u540c\u7684\u786c\u4ef6\u5e73\u53f0\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unified graph execution")),(0,n.kt)("p",null,"According to the execution method of computational graphs, deep-learning frameworks can be based either on a static graph execution (also called a define-and-run approach) or a dynamic graph execution (define-by-run, eager execution). Static graph based frameworks are efficient and easy to optimize, and dynamic graph based frameworks are easy-to-use and flexible. Most current frameworks, including TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer, support dynamic graphs."),(0,n.kt)("p",null,"As an alternative, we propose our unified graph execution approach. Unified graph execution provides an imperative style interface which has the same flexibility as a dynamic graph. And it is also as efficient as a static graph."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(6203).Z,width:"1732",height:"1642"})),(0,n.kt)("p",null,"\u9759\u6001\u56fe\u5728\u8fd0\u884c\u4e4b\u524d\u5b9a\u4e49model\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u5bf9\u6570\u636e\u6267\u884c\u64cd\u4f5c\u3002\u5176\u4e2d\u5728\u7f16\u8bd1\u7684\u65f6\u5019\u4f7f\u7528\u4e00\u4e2aplaceholder\u6765\u8868\u793a\u6570\u636e\uff0c\u7f16\u8bd1\u5668\u5bf9\u8ba1\u7b97\u56fe\u8fdb\u884c\u4f18\u5316\u3002\u7531\u4e8e\u53ea\u6709\u8fd0\u884c\u65f6\u624d\u4f1a\u77e5\u9053\u6570\u636e\uff0c\u6240\u4ee5\u50cfprint\u8fd9\u6837\u7684\u65b9\u6cd5\u65e0\u6cd5\u652f\u6301\uff0c\u4e0d\u5229\u4e8e\u8c03\u8bd5\u7b49\u3002\u7279\u70b9\u662f\u6027\u80fd\u9ad8\u3001\u5b9e\u73b0\u7b80\u5355\u3002TensorFlow\u91c7\u7528\u8fd9\u79cd\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"Eager execution executes each operator immediately when it is added to the graph. Because addition of operators is performed on the CPU while they are executed on the GPU, eager execution will lower the latency between CPU and GPU, thus reducing overheads, allowing this approach to achieve competitive performance with the static graph approach. this furthermore allows the user to manipulate intermediate results during model building. This provides users with a great deal of flexibility: for example data can be printed, and the model can be changed according to the intermediate results obtained, which is hard to do with static graphs, and is essential in applications such as generative adversarial networks (GANs) ","[18]"," and reinforcement learning ","[19]",". For example, when training a GAN, the computation graph keeps changing between the discriminator and generator. This flexibility has made dynamic graphs popular, and most frameworks (such as TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer) currently support them."),(0,n.kt)("p",null,"To obtain the benefits of both approaches, without their drawbacks, we use a unified graph execution approach. It provides the full flexibility of a dynamic graph, and the graph can be rebuilt frequently without performance degradation, yet operator fusion is still possible. This is achieved by lazy execution. See Figure 7(c). Operators interpreted by Python are not executed immediately, but delayed until their results are needed. op1 in line 3 is not executed until x2 is printed: x2 is needed at that point, and it depends on x1 which in turn requires op1 to be executed. During printing in line 5, three things happen. First, unified execution will select all those operators in graph G that are required by printing, and split them off into a new sub-graph G\u2032; in Figure 7 this is op1 and op2. The sub-graph G\u2032 is then optimized using the operator fusion process in Subsection 4.1: the operator fuser takes G\u2032 as input, and partitions G\u2032 into multiple sub-graphs G\u2032\u2032, where each sub-graph represents one fused operator. Finally, sub-graph i G\u2032 is executed. In this very simple example, as op1 and op2 are executed together, there is an opportunity to fuse them before doing so. While addition and execution of operators is coupled in the dynamic graph, it is decoupled in the unified graph."),(0,n.kt)("h3",{id:"734-pytorch"},"7.3.4 PyTorch"),(0,n.kt)("p",null,"\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u662f\u4e00\u4e2alibrary\uff0c\u800c\u4e0d\u662f\u4e00\u95e8\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0clibrary\u610f\u5473\u7740\u5b83\u6709\u81ea\u5df1\u7684\u7279\u5b9a\u903b\u8f91\uff0c\u5b83\u53ea\u80fd\u5904\u7406\u5b83\u7684\u903b\u8f91\u6240\u5b9a\u4e49\u7684\u4e8b\u60c5\uff0c\u5c31\u50cf\u5176\u4ed6\u4efb\u4f55library\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u90fd\u662f\u4f7f\u7528\u9759\u6001\u6570\u636e\u6d41\u56fe\uff0c\u5b83\u4eec\u90fd\u662f\u73b0\u7f16\u8bd1\u597d\u6a21\u578b\uff0c\u7136\u540e\u6279\u91cf\u6267\u884c\u6570\u636e\u5904\u7406\uff0c\u8fd9\u867d\u7136\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\uff0c\u4f46\u662f\u4e27\u5931\u4e86\u6613\u7528\u6027\u3001\u7075\u6d3b\u6027\uff0c\u4e5f\u4e0d\u6613\u4e8e\u8c03\u8bd5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"define-by-run approach")),(0,n.kt)("p",null,"Separately, libraries such as NumPy","[12]",", Torch","[6]",", Eigen","[13]"," and Lush","[14]"," made ",(0,n.kt)("strong",{parentName:"p"},"array-based programming")," productive in general purpose languages such as Python, Lisp, C++ and Lua."),(0,n.kt)("p",null,"Easy and efficient ",(0,n.kt)("strong",{parentName:"p"},"interoperability")," is one of the top priorities for PyTorch because it opens the possibility to leverage the rich ecosystem of Python libraries as part of user programs. Hence, PyTorch allows for bidirectional exchange of data with external libraries. "),(0,n.kt)("p",null,"Moreover, many of the critical systems are designed specifically to be ",(0,n.kt)("strong",{parentName:"p"},"extensible"),". For instance, the automatic differentiation system allows users to add support for custom differentiable functions."),(0,n.kt)("p",null,"Most importantly, users are free to replace any component of PyTorch that does not meet the needs or performance requirements of their project. They are all designed to be completely interchangeable, and PyTorch takes great care not to impose any particular solution."),(0,n.kt)("h4",{id:"7341-perform-focused-implementation"},"7.3.4.1 Perform focused implementation"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python Global Interpreter Lock (GIL)")," is a type of process lock which is used by python whenever it deals with processes. Generally, Python only uses only one thread to execute the set of written statements. This means that in python only one thread will be executed at a time. The performance of the single-threaded process and the multi-threaded process will be the same in python and this is because of GIL in python. We can not achieve multithreading in python because we have global interpreter lock which restricts the threads and works as a single thread."),(0,n.kt)("p",null,"Running deep learning algorithms efficiently from a Python interpreter is notoriously challenging: for instance, the global interpreter lock ","[33]"," effectively ensures that only one of any number of concurrent threads is running at any given time. Deep learning frameworks based on the construction of a static data-flow graph sidestep this problem by deferring the evaluation of the computation to a custom interpreter."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"An efficient C++ core")),(0,n.kt)("p",null,"\u6838\u5fc3\u4ee3\u7801 \u90fd\u7531C++\u7f16\u5199\uff0c\u7136\u540ebinding\u5230Python\uff0c\u5305\u62ec\u6570\u636e\u7ed3\u6784\u3001CPU/GPU\u7b97\u5b50\u3001\u5e76\u884c\u8ba1\u7b97\u7b49\uff0c\u8fd9\u6837\u53ef\u4ee5\u7ed5\u5f00GIL\uff0c\u540c\u65f6\u8fd8\u53ef\u4ee5\u5c06PyTorch\u7684\u4ee3\u7801binding\u5230\u5176\u4ed6\u8bed\u8a00\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Separate control and data flow")),(0,n.kt)("p",null,"PyTorch\u4e25\u683c\u5730\u5c06\u63a7\u5236\u548c\u6570\u636e\u6d41\u5206\u5f00\uff0c\u8fd9\u91cc\u7684\u63a7\u5236\u4e3b\u8981\u662f\u6307CPU\u4e0a\u7684\u7a0b\u5e8f\u5206\u652f\u3001\u5faa\u73af\u7b49\u63a7\u5236\u7b97\u5b50\u7684\u903b\u8f91\uff0c\u8fd9\u90e8\u5206\u5728Python\u548c\u90e8\u5206C++\u4e2d\u6267\u884c\uff1b\u800c\u6570\u636e\u6d41\u6307\u7684\u662f\u7528\u4e8e\u5728GPU\u4e2d\u6267\u884c\u7684\u7b97\u5b50\u8c03\u7528\u53ca\u5176\u76f8\u5173\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u7406\u89e3\u5728\u5728GPU\u4e2d\u6267\u884c\u4e00\u6b21\u8ba1\u7b97\u9700\u8981\u7684\u7b97\u5b50\u5373\u6570\u636e\uff0c\u8fd9\u4e9b\u8ba1\u7b97\u6309\u7167\u7ebf\u6027\u7684\u65b9\u5f0f\u8fdb\u884c\u6392\u5e8f\uff0c\u7136\u540e\u88ab\u8f6c\u6362\u4e3aCUDA kernel\u7684\u961f\u5217\uff0c\u6309\u7167FIFO\u7684\u987a\u5e8f\u88ab\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u662f\u5f02\u6b65\u7684\uff0c\u80fd\u591f\u5145\u5206\u4f7fGPU\u7684\u8ba1\u7b97\u8fbe\u5230\u9971\u548c\uff0c\u5373\u4fbf\u662f\u5728Python\u8fd9\u6837\u7684\u89e3\u91ca\u6027\u8bed\u8a00\u4e2d\u4e5f\u53ef\u4ee5\u5f97\u5230\u975e\u5e38\u9ad8\u7684\u6027\u80fd\uff0c\u56e0\u4e3a\u771f\u6b63\u9700\u8981\u8bdd\u65f6\u95f4\u7684\u8ba1\u7b97\u90fd\u662fCUDA\u7f16\u8bd1\u7684\uff0c\u800cPython\u53ea\u8d1f\u8d23\u63a7\u5236\u903b\u8f91\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Custom caching tensor allocator")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f60\u77e5\u4e0d\u77e5\u9053\u4e3b\u6d41\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6pytorch\u662f\u6309\u7167\u7740Haskell typeclass SML module\u7684\u6a21\u6837\u67b6\u6784\u7684\uff0cPytorch\u4e3bmaintainer\u5c31\u662f\u4e00\u4e2aHaskell\u9ad8\u624b\uff0cPytorch\u8584\u7eb1Tensorflow\u5c31\u662fPL\u8584\u7eb1System\u7684\u4e00\u4e2a\u7edd\u4f73\u4f8b\u5b50\uff1f"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u5706\u89d2\u9a91\u58eb\u9b54\u7406\u6c99\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/21410150/answer/2740843224"},"https://www.zhihu.com/question/21410150/answer/2740843224"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"735-oneflow"},"7.3.5 OneFlow"),(0,n.kt)("p",null,"Deep learning frameworks such as TensorFlow and PyTorch provide a productive interface for expressing and training a deep neural network (DNN) model on a single device or using data parallelism. Still, they may not be flexible or efficient enough in training emerging large models on distributed devices, which require more sophisticated parallelism beyond data parallelism. Plugins or wrappers have been developed to strengthen these frameworks for model or pipeline parallelism, but they complicate the usage and implementation of distributed deep learning. Aiming at a simple, neat redesign of distributed deep learning frameworks for various paral- lelism paradigms, we present ",(0,n.kt)("em",{parentName:"p"},"OneFlow"),", a novel distributed training framework based on an ",(0,n.kt)("em",{parentName:"p"},"SBP")," (",(0,n.kt)("em",{parentName:"p"},"split"),", ",(0,n.kt)("em",{parentName:"p"},"broadcast")," and ",(0,n.kt)("em",{parentName:"p"},"partial-value"),") abstraction and the actor model. ",(0,n.kt)("em",{parentName:"p"},"SBP")," enables much easier programming of data parallelism and model parallelism than existing frameworks, and the actor model provides a succinct runtime mechanism to manage the complex dependencies imposed by resource constraints, data movement and computation in dis- tributed deep learning."),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("h3",{id:"736-preda"},"7.3.6 PREDA"),(0,n.kt)("p",null,"\u53ef\u4ee5\u7f16\u8bd1\u5230Web assembly\uff0c\u8ba4\u4e3a\u592a\u5305\u7f57\u4e07\u8c61\uff0c\u533a\u5757\u94fe\u662f\u975e\u5e38\u7b80\u5355\u7684\uff0c\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7279\u6027\u3001\u8d44\u6e90\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u4e0d\u9700\u8981GC\uff0c\u6267\u884c\u5b8c\u6240\u6709\u4e1c\u897f\u5168\u90e8\u5220\u6389\uff0c\u5e0c\u671b\u6709\u66f4\u8f7b\u91cf\u7ea7\u7684\u4e1c\u897f\u3002"),(0,n.kt)("h3",{id:"737-web-assembly"},"7.3.7 Web Assembly"),(0,n.kt)("p",null,"rust\u5728web assembly\u65b9\u9762\u8d70\u5728\u524d\u9762"),(0,n.kt)("p",null,"\u662f\u4e00\u5957\u65b0\u7684\u6307\u4ee4\u96c6\u3002"),(0,n.kt)("p",null,"Rust\u5f00\u53d1\u8005\u53d7\u5230\u7684\u7ea6\u675f\u6bd4\u8f83\u5927\uff0c\u6bd4\u5982\u7c7b\u578b\u7cfb\u7edf\u3002\u79ef\u6781\u62e5\u62b1\u4e00\u4e9b\u5b66\u672f\u7684\u6210\u679c\uff0cRust\u7684\u6210\u679c\u4ee3\u8868\u7f16\u7a0b\u8bed\u8a00\u7406\u8bba\u7684\u6210\u529f\u3002"),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u52a8\u673a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u7279\u5b9a\u7684\u95ee\u9898\uff0cjava\uff0cerlang\uff0crust"),(0,n.kt)("li",{parentName:"ul"},"\u5e73\u53f0\u578b\uff0cC#\uff0cSwift\uff0cGo\uff0c\u751f\u6001\uff0c\u672a\u6765\u6280\u672f\u6f14\u8fdb"),(0,n.kt)("li",{parentName:"ul"},"\u5174\u8da3\u3001\u5b66\u672f\u7814\u7a76\u578b\uff0cScala\uff0cHaskell\u7b49")),(0,n.kt)("h2",{id:"74-others"},"7.4 Others"),(0,n.kt)("h3",{id:"741-\u795e\u7ecf\u7f51\u7edc"},"7.4.1 \u795e\u7ecf\u7f51\u7edc"),(0,n.kt)("h3",{id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"},"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"),(0,n.kt)("h4",{id:"7421-pip"},"7.4.2.1 pip"),(0,n.kt)("h4",{id:"7422-rust"},"7.4.2.2 Rust"),(0,n.kt)("h3",{id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01"},"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01"),(0,n.kt)("p",null,"NFTCN/Bigverse/Opensea "),(0,n.kt)("p",null,"\u5f53\u524d\u7684NFT\u6570\u5b57\u8d44\u4ea7\u5e02\u573a\u4e3b\u8981\u8fd8\u662f\u504f2D"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"NFT\u8d44\u4ea7\u751f\u6210\u672c\u8eab\u5f88\u7b80\u5355\uff0c\u56e0\u6b64\u4e5f\u5bb9\u6613\u590d\u5236\u3001\u5c71\u5be8"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u65b9\u5f0f\u7b80\u5355\uff0c\u5927\u591a\u6570\u751a\u81f3\u90fd\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u56fe\u50cf\u5904\u7406\u53ca\u98ce\u683c\u5316\u5de5\u5177\u6216\u8005\u7b80\u5355\u7684\u7f16\u8f91\uff0c\u800c\u5f00\u53d13D\u7684\u5185\u5bb9\u751f\u6210\u8981\u96be\u5f97\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5e02\u573a\uff0c\u65e0\u5bf9\u5185\u5bb9\u8fdb\u884c\u4ef7\u503c\u53d1\u73b0\u548c\u4ef7\u503c\u589e\u503c\u7684\u65b9\u5f0f\u548c\u7a7a\u95f4\uff0c\u5f53\u524d\u4e3b\u8981\u7684\u673a\u5236\u662f\u4f4e\u4e70\u9ad8\u4e70\uff0c\u7a7a\u7b49\u7740\u589e\u503c\uff0c\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u6240\u8c13\u7684\u4e00\u4e9b\u4f30\u503c\u7684\u673a\u5236\u548c\u670d\u52a1\u6765\u5224\u5b9a\u4ef7\u503c\uff0c\u4f46\u5b9e\u9645\u4e0a\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e00\u4e2a\u827a\u672f\u54c1\u7684\u4ef7\u503c\u6709\u65f6\u662f\u901a\u8fc7\u4eba\u4eec\u7684\u4e86\u89e3\u3001\u5b66\u4e60\u3001\u7ed3\u6784\u3001\u7814\u7a76\u3001\u80cc\u540e\u7684\u6587\u5316\u4ef7\u503c\u548c\u793e\u4f1a\u4ef7\u503c\u7684\u53d1\u6398\u548c\u6f14\u8fdb\u540e\uff0c\u624d\u4f1a\u6162\u6162\u50ac\u751f\u4e00\u4e2a\u4f5c\u54c1\u7684\u4ef7\u503c\uff0c\u800c\u4e00\u4e2a\u5355\u5355\u7684\u5e02\u573a\u5e76\u4e0d\u8db3\u4ee5\u5f62\u6210\u8fd9\u6837\u7684\u673a\u5236\uff0c\u8fd9\u6837\u4f5c\u54c1\u9700\u8981\u4e00\u79cd\u80fd\u591f\u66f4\u751f\u6d3b\u5316\u7684\u5448\u73b0\u673a\u5236\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5217\u8868\uff0c\u5b83\u5e94\u8be5\u80fd\u591f\u8ba9\u66f4\u591a\u7684\u4eba\u5bf9\u5b83\u6709\u66f4\u591a\u7ef4\u5ea6\u3001\u66f4\u591a\u673a\u4f1a\u7684\u518d\u8ba4\u77e5\uff0c\u7ed3\u6784\u3001\u89e3\u8bfb\u3001\u6b23\u8d4f\u3001\u89c2\u5bdf\u3001\u4f53\u9a8c\uff0c\u8fd9\u6837\u624d\u6709\u673a\u4f1a\u53bb\u6316\u6398\u5b83\u7684\u4ef7\u503c\uff0c\u5b83\u7edd\u4e0d\u662f\u4f60\u4e70\u6765\u653e\u5728\u90a3\u91cc\u4ed6\u5c31\u81ea\u5df1\u4f1a\u589e\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u4e00\u4e2a\u5e02\u573a\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u72ec\u7acb\u76843D\u6216\u80053D\u7684\u5f62\u5f0f\u5c55\u73b0\uff0c\u7f3a\u4e4f\u4e0e\u4e4b\u76f8\u5173\u7684\u73af\u5883\uff0c\u7279\u522b\u662f3D\u4f5c\u54c1\u5f80\u5f80\u4e0d\u662f\u5355\u4e2a\u7269\u4f53\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u7684\u8868\u8fbe\u5f80\u5f80\u548c\u73af\u5883\u7b49\u56e0\u7d20\u6709\u5173\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684\u4f5c\u54c1\uff0c\u65e2\u5bb9\u6613\u88ab\u590d\u5236\u548c\u4e0b\u8f7d\uff0c\u53c8\u7f3a\u4e4f\u8868\u8fbe\u80fd\u529b")),(0,n.kt)("p",null,"\u62df\u5a32\u76843D\u521b\u4f5c\u66f4\u96be\uff0c\u5e76\u4e14\u5b83\u7684\u5185\u5bb9\u4e0d\u662f\u5355\u4e2a\u4e3b\u4f53\uff0c\u800c\u662f\u878d\u5165\u5728\u73af\u5883\u4e2d\uff0c\u751a\u81f3\u548c\u5176\u4ed6\u5185\u5bb9\u4e00\u8d77\u5448\u73b0\uff0c\u73af\u5883\u751a\u81f3\u7a0b\u5e8f\u90fd\u662f\u4e00\u90e8\u5206\uff0c\u5728\u8131\u79bb\u8fd9\u4e2a\u73af\u5883\uff0c\u4ed6\u751a\u81f3\u90fd\u65e0\u6cd5\u8fd0\u884c\uff0c\u88ab\u590d\u5236\u7684\u98ce\u9669\u964d\u4f4e\uff0c\u540c\u65f6\u5b83\u5e76\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u5e02\u573a\uff0c\u5b83\u66f4\u591a\u662f\u5904\u4e8e\u4e00\u79cd\u88ab\u6b23\u8d4f\u7684\u793e\u4f1a\u72b6\u6001\uff0c\u5b83\u7684\u4ef7\u503c\u66f4\u5bb9\u6613\u88ab\u89e3\u8bfb\u548c\u7ed3\u6784\uff0c\u878d\u5165\u771f\u6b63\u7684\u4ef7\u503c\u8bc4\u5224\u4f53\u7cfb\u548c\u65b9\u5f0f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"3D\u5185\u5bb9\u4e0d\u9002\u5408\u4ea4\u6613")),(0,n.kt)("p",null,"\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u50cf\u827a\u672f\uff0c\u66f4\u591a\u88ab\u6536\u85cf\uff0c\u4e92\u52a8\u5185\u5bb9\u662f\u52a8\u6001\u66f4\u65b0\u7684\uff0c\u5b83\u4e5f\u4e0e\u7279\u5b9a\u7684\u8fd0\u884c\u65f6\u73af\u5883\u548c\u64cd\u4f5c\u7cfb\u7edf\u9ad8\u5ea6\u8026\u5408\uff0c\u4ed6\u8fd8\u4f1a\u8fdb\u884c\u4e0d\u65ad\u66f4\u65b0\uff0c\u4fee\u590dbug\uff0c\u56e0\u6b64\u4ed6\u66f4\u9002\u5408\u6309\u73a9\u5bb6\u6536\u8d39\uff0c\u6309\u670d\u52a1\u6536\u8d39\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u4e00\u6b21\u6027\u7684\u4ea7\u54c1\u4e70\u5356\uff0c\u5f53\u7136\u4ec5\u4f5c\u4e3a\u7eaf\u8d44\u4ea7\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u865a\u62df\u5730\u5757\uff1a")),(0,n.kt)("p",null,"\u865a\u62df\u5730\u5757\u4e5f\u662f\u6ca1\u6709\u597d\u7684\u4ef7\u503c\u652f\u6491\uff0c\u5e76\u4e0d\u662f\u4efb\u4f55\u4e00\u4e2a\u865a\u62df\u7a7a\u95f4\u5f04\u4e00\u4e2a\u552f\u4e00\u5730\u5757\u5212\u5206\u7684\u673a\u5236\u5c31\u53ef\u4ee5\uff0c\u90a3\u6837\u7684\u8bdd\u5c31\u592a\u7b80\u5355\u4e86\u592a\u5bb9\u6613\u4e86\uff0c\u73b0\u5b9e\u5f88\u591a\u5143\u5b87\u5b99\u7684\u6982\u5ff5\u548c\u4ea7\u54c1\u7ed9\u4eba\u7684\u611f\u89c9\u5c31\u662f\u592a\u7b80\u5355\u592a\u5bb9\u6613\u4e86\uff0c\u8fd9\u662f\u4e0d\u7b26\u5408\u903b\u8f91\u7684\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u6ca1\u6709\u4ef7\u503c\u652f\u6491\uff0c\u6ca1\u6709\u5171\u540c\u7684\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u6bd4\u5982\u5982\u679c\u5728\u8d5b\u5c14\u8fbe\u91cc\u9762\u5efa\u7acb\u865a\u62df\u5730\u5757\uff0c\u90a3\u80af\u5b9a\u6709\u4ef7\u503c\uff0c\u56e0\u4e3a\u4ed6\u6709\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u4f46\u4f60\u968f\u4fbf\u642d\u5efa\u4e00\u4e2a\u5730\u5757\uff0c\u4ed6\u5e76\u4e0d\u5177\u5907\u5171\u540c\u8ba4\u540c\u4ef7\u503c\uff0c\u4ec5\u4ec5\u662f\u50cf\u8d4c\u535a\u4e00\u6837\u5c11\u90e8\u4efd\u4eba\u7684\u7092\u4f5c\uff0c\u5927\u90e8\u5206\u4eba\u5e76\u4e0d\u8ba4\u53ef\u8fd9\u4e9b\u4ef7\u503c"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u600e\u6837\u521b\u5efa\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\u662f\u6700\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u4ef7\u503c\u521b\u9020\u548c\u8ba4\u540c\u662f\u5f88\u96be\u7684\uff0c\u4e0d\u7136\u5c31\u7f16\u7a0b\u865a\u62df\u8d27\u5e01\u4e00\u6837\u4e00\u79cd\u7eaf\u673a\u5236\uff0c\u6ca1\u6709\u4ef7\u503c\u62c5\u4fdd"),(0,n.kt)("p",null,"\u4ef7\u503c\u8ba4\u540c\u9700\u8981\u6240\u6709\u4eba\u80fd\u591f\u53c2\u4e0e\uff0c\u4ee5\u67d0\u79cd\u65b9\u5f0f\uff0c\u624d\u80fd\u5f62\u6210\u4ef7\u503c\u8ba4\u540c\uff0c\u8fd9\u79cd\u53c2\u4e0e\u6216\u8005\u4ef7\u503c\u8ba4\u540c\u5e94\u8be5\u662f\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u9700\u8981\u4e00\u79cd\u5b9e\u9645\u7684\u53c2\u4e0e\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u50cf\u7092\u623f\u4e00\u6837\uff0c\u5c31\u662f\u8bf4\u5b83\u9700\u8981\u5177\u5907\u771f\u6b63\u7684\u4ef7\u503c\uff0c\u4e0d\u7ba1\u662f\u6e38\u620f\u5e26\u6765\u7cbe\u795e\u4e0a\u7684\uff0c\u6216\u8005\u5b83\u4f20\u8fbe\u4e86\u67d0\u79cd\u77e5\u8bc6\u6216\u8005\u6587\u5316\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u6570\u5b57\u5185\u5bb9\u5f97\u8d27\u5e01\u5316\u8fd8\u5b58\u5728\u4e00\u4e2a\u91cd\u8981\u95ee\u9898\uff0c\u5b83\u9700\u8981\u4e00\u79cd\u62c5\u4fdd\u673a\u5236\uff0c\u4e0d\u50cf\u5b9e\u7269\u4e00\u6837\u7269\u6743\u662f\u552f\u4e00\u7684\u660e\u786e\u7684\uff0c\u5f53\u7136\u8fd9\u4e5f\u662f\u6709\u56fd\u5bb6\u673a\u6784\u62c5\u4fdd\u8d1f\u8d23\u7269\u6743\u7ba1\u7406\uff0c\u865a\u62df\u8d27\u5e01\u6216\u8005\u533a\u5757\u94fe\u867d\u7136\u5728\u673a\u5236\u4e0a\u80fd\u64cd\u4f5c\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u662f\u8fd9\u4e2a\u6570\u5b57\u5185\u5bb9\u672c\u8eab\u662f\u53ef\u4ee5\u590d\u5236\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4f5c\u8005\u53ef\u4ee5\u5728\u4e0d\u540c\u7684\u6570\u5b57\u5e73\u53f0\u53d1\u5e03\uff0c\u7406\u8bba\u4e0a\uff0c\u53ea\u6709\u5e73\u53f0\u81ea\u8eab\u53ef\u4ee5\u4fdd\u8bc1\u7269\u6743\u552f\u4e00\uff0c\u5e73\u53f0\u5fc5\u987b\u4e0e\u4f5c\u8005\u8fbe\u6210\u5b9e\u7269\u6216\u8005\u539f\u59cb\u4f5c\u54c1\u7684\u7269\u6743\u534f\u8bae\uff0c\u6bd4\u5982\u4f5c\u8005\u4e0d\u80fd\u5728\u5176\u4ed6\u5e73\u53f0\u518d\u4f7f\u7528\u6b21\u4f5c\u54c1\uff0c\u6216\u8005\u4f5c\u8005\u9500\u6bc1\u539f\u59cb\u7535\u5b50\u7248\uff0c\u8fd9\u6837\u4fdd\u8bc1\u8be5\u5e73\u53f0\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u8fd9\u4e9b\u673a\u5236\u90fd\u4f9d\u8d56\u4e8e\u771f\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u4fdd\u969c\uff0c\u5b9e\u9645\u4e0a\u865a\u62df\u8d27\u5e01\u53ea\u8981\u662f\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054\u7684\uff0c\u5b83\u7684\u7269\u6743\u90fd\u9700\u8981\u73b0\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u7269\u6743\u4fdd\u969c"),(0,n.kt)("p",null,"\u9664\u975e\u662f\u5b8c\u5168\u865a\u62df\u8d27\u5e01\uff0c\u4ed6\u4e0d\u9700\u8981\u6620\u5c04\u5b9e\u7269\uff0c\u8d27\u5e01\u7684\u53d1\u884c\u672c\u8eab\u5c31\u662f\u57fa\u4e8e\u533a\u5757\u94fe\u5927\u578b\u7684\uff0c\u6240\u4ee5\u5b83\u672c\u8eab\u5c31\u6709\u7269\u6743\u4fdd\u8bc1\u4e86\uff0c\u4f46\u662f\u8fd9\u79cd\u4e5f\u662f\u6ca1\u6709\u6cd5\u5f8b\u4fdd\u969c"),(0,n.kt)("p",null,"\u62df\u5a32\u7684\u6570\u5b57\u5185\u5bb9\u662f\u7531\u7528\u6237\u521b\u5efa\u7684\uff0c\u6216\u8005\u5927\u90e8\u5206\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u5bfc\u5165\u4e00\u90e8\u5206\u5df2\u6709\u8d44\u6e90\uff0c\u8fd9\u90e8\u5206\u65e0\u6cd5\u63a7\u5236\u7269\u6743\u7684\u552f\u4e00\u6027\uff0c\u9700\u8981\u501f\u52a9\u73b0\u5b9e\u4e16\u754c\u7684\u7248\u6743\u673a\u5236\uff0c\u4f46\u662f\u5b83\u7684\u5927\u90e8\u5206\u5185\u5bb9\u662f\u7528\u6237\u57fa\u4e8e\u62df\u5a32\u5e73\u53f0\u521b\u5efa\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u5b83\u7684\u90a3\u4e2a\u5185\u5bb9\u5728\u521b\u5efa\u65f6\u5df2\u7ecf\u57fa\u4e8e\u533a\u5757\u94fe\u6280\u672f\u5f97\u5230\u7269\u6743\u4fdd\u969c"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\uff0c\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u7247\u6216\u8005\u89c6\u9891\uff0c\u5176\u5f88\u5bb9\u6613\u88ab\u590d\u5236\u4fdd\u5b58\uff0c\u4e5f\u4e0d\u50cf\u4f20\u7edf\u76843D\u5185\u5bb9\u4e00\u6837\u5bb9\u6613\u88ab\u4e0b\u8f7d\uff0c\u5b83\u672c\u8eab\u662f\u4e00\u79cd\u79c1\u6709\u683c\u5f0f\uff0c\u4ed6\u5fc5\u987b\u501f\u52a9\u5e73\u53f0\u624d\u80fd\u89e3\u6790\uff0c\u5b83\u7684\u5185\u5bb9\u4e5f\u5168\u90e8\u5b58\u50a8\u5728\u4e91\u7aef\uff0c\u8fd9\u4f7f\u5f97\u5b83\u7684\u7269\u6743\u80fd\u591f\u8fdb\u4e00\u6b65\u88ab\u4fdd\u969c\uff1a\u4f60\u53ea\u80fd\u5728\u8fd9\u4e2a\u5e73\u53f0\u624d\u80fd\u4f53\u9a8c\u8fd9\u4e2a\u4f5c\u54c1\uff0c\u4f46\u5728\u8fd9\u4e2a\u5e73\u53f0\u5b83\u662f\u552f\u4e00\u7684\uff0c\u4f60\u4e0d\u80fd\u5c06\u5b83\u590d\u5236\u5230\u5176\u4ed6\u5730\u65b9"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u62df\u5a32\u672c\u8eab\u8fd8\u6709\u4e00\u5957\u4ef7\u503c\u8ba4\u540c\u7684\u673a\u5236\uff0c\u5c31\u50cf\u6e38\u620f\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u8981\u53d1\u6325\u4f60\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\uff0c\u4ed8\u51fa\u65f6\u95f4\u548c\u601d\u8003\u624d\u80fd\u521b\u4f5c\u51fa\u597d\u7684\u4e1c\u897f\uff0c\u800c\u5176\u4ed6\u7528\u6237\u5728\u4f53\u9a8c\u8fc7\u7a0b\u4e2d\u4f53\u9a8c\u5230\u4e86\u4f60\u7684\u6587\u5316\u827a\u672f\u8868\u8fbe\uff0c\u4f60\u7684\u4ef7\u503c\u5e76\u88ab\u8ba4\u540c\uff0c\u7528\u6237\u6709\u4e00\u4e2a\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5546\u54c1\u4e70\u5356\uff0c\u8fd9\u7c7b\u4f3c\u4e8e\u5546\u54c1\u9700\u8981\u4f7f\u7528\u624d\u6709\u4ef7\u503c\uff0c\u8fd9\u4e2a\u4f7f\u7528\u5c31\u662f\u5bf9\u6570\u5b57\u5185\u5bb9\u6587\u5316\u827a\u672f\u8868\u8fbe\u7684\u4f53\u9a8c\uff0c\u4f7f\u7528+\u4ea4\u6613 \u624d\u80fd\u5f62\u6210\u5faa\u73af\uff1a\u4f7f\u7528\u53d1\u73b0\u4ef7\u503c\uff0c\u4fc3\u8fdb\u4ea4\u6613\uff0c\u8fdb\u800c\u4fc3\u8fdb\u4f7f\u7528\u4ef7\u503c\u7684\u521b\u9020"),(0,n.kt)("li",{parentName:"ul"},"\u9759\u60012D\u827a\u672f\u54c1\u5176\u5b9e\u8fd8\u662f\u7eb8\u8d28\u66f4\u73cd\u8d35\uff0c\u65e0\u8bba\u662f\u521b\u4f5c\u7684\u96be\u5ea6\u3001\u4eea\u5f0f\u611f\uff0c\u8fd8\u662f\u4f53\u9a8c\u6b23\u8d4f\u65f6\u7684\u4e13\u6ce8\u548c\u4eea\u5f0f\u611f\uff0c\u5728\u6570\u5b57\u5c4f\u5e55\u4e0a\u770b2D\u827a\u672f\u53d7\u5f88\u591a\u56e0\u7d20\u5f71\u54cd\uff0c\u6bd4\u5982\u53d7\u5c4f\u5e55\u5206\u8fa8\u7387\u3001\u8272\u5f69\u3001\u5c4f\u5e55\u5c3a\u5bf8\u7b49\u56e0\u7d20\u5f71\u54cd\uff0c\u4f463D\u6570\u5b57\u5185\u5bb9\u5219\u5929\u751f\u662f\u865a\u62df\u7684")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u6280\u672f\u5bfc\u81f4\u7684\u601d\u7ef4\u6709\u65f6\u5019\u5f88\u53d7\u9650\uff0c\u5927\u5bb6\u4f1a\u503e\u5411\u4e8e\u653e\u5927\u8fd9\u9879\u6280\u672f\u7684\u529f\u7528\uff0c\u8ba4\u4e3a\u4e00\u5207\u7686\u53ef\u4ee5\u4f7f\u7528\u533a\u5757\u94fe\uff0c\u56e0\u4e3a\u6240\u6709\u4e8b\u52a1\u672c\u8d28\u4e0a\u90fd\u6d89\u53ca\u7269\u6743\u548c\u4ea4\u6613\uff0c\u4f46\u4ed6\u6709\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6709\u65f6\u5019\u4f1a\u8ba9\u4e00\u4e9b\u4e8b\u60c5\u66f4\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u66f4\u5927\u7684\u95ee\u9898\u4ed6\u53ef\u80fd\u4f1a\u9650\u5236\u6211\u4eec\u7684\u60f3\u8c61\u529b\uff0c\u4f8b\u5982\u6e38\u620f\u7684\u5206\u53d1\u8ddf\u4f20\u7edf\u7684\u4ea4\u6613\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4f20\u7edf\u7684\u4ea4\u6613\u7269\u54c1\u662f\u72ec\u7acb\u7684\uff0c\u6216\u8005\u4e0d\u53ef\u5206\u5272\u7684\uff0c\u4e00\u6b21\u4ea4\u6613\u5bf9\u5e94\u4e00\u4ef6\u5177\u4f53\u7684\u7269\u54c1\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u662f\u6709\u6301\u7eed\u66f4\u65b0\u7684\uff0c\u5f53\u6e38\u620f\u8fd9\u79cd\u6570\u5b57\u8d44\u4ea7\u53d1\u751f\u53d8\u66f4\uff0c\u4ed6\u7684Token\u4f1a\u53d8\u66f4\u5417\uff0c\u53d8\u66f4\u4e86\u539f\u6765\u7684\u8d2d\u4e70\u5c31\u5931\u6548\u4e86\uff0c\u4f46\u4e0d\u4e0d\u53d8\u66f4\u600e\u6837\u8ba9\u8ba2\u9605\u7684\u7528\u6237\u4eab\u53d7\u5230\u65b0\u589e\u670d\u52a1\uff0c\u6240\u4ee5\u5f53\u524d\u7684NFT\u5e02\u573a\u4e3b\u8981\u805a\u7126\u4e8e\u56fe\u7247\u8fd9\u79cd\u901a\u5e38\u4e0d\u4f1a\u4fee\u6539\u7684\u9759\u6001\u5185\u5bb9\uff0c\u5b83\u672c\u8eab\u4e0d\u662f\u7a0b\u5e8f\uff0c\u800c3D\u6570\u5b57\u5185\u5bb9\u4f1a\u9762\u4e34\u66f4\u590d\u6742\u7684\u53d8\u66f4"),(0,n.kt)("li",{parentName:"ul"},"\u518d\u6bd4\u5982\uff0c\u4f20\u7edf\u7684\u4e66\u753b\u662f\u6536\u85cf\u7684\u6982\u5ff5\u4e3a\u4e3b\uff0c\u5b83\u672c\u8eab\u662f\u7531\u5b9e\u4f53\u552f\u4e00\u6027\u6f14\u53d8\u51fa\u6765\u7684\u65b9\u5f0f\uff0c\u901a\u5e38\u4e00\u4e2a\u753b\u5bb6\u4e0d\u4f1a\u6279\u91cf\u753b\u540c\u4e00\u526f\u753b\uff0c\u4f46\u4ea4\u4e92\u7a0b\u5e8f\u5929\u751f\u5c31\u662f\u6570\u5b57\u51fa\u751f\uff0c\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4e3a\u4e3b\uff0c\u4ed6\u8981\u9762\u5bf9\u7684\u662f\u73a9\u5bb6\u6570\u91cf\u7684\u6982\u5ff5\u548c\u6a21\u5f0f\uff0c\u5355\u5e45\u753b\u7684\u6536\u85cf\u4ef7\u683c\u5f88\u9ad8\uff0c\u666e\u901a\u4eba\u6839\u672c\u627f\u53d7\u4e0d\u8d77\uff1b\u800c\u6e38\u620f\u9762\u5411\u7fa4\u4f53\uff0c\u6240\u4ee5\u5355\u4e2a\u590d\u5236\u7684\u6210\u672c\u5f88\u4f4e\uff0c\u8fd9\u624d\u5bfc\u81f4\u666e\u901a\u4eba\u53ef\u4ee5\u53c2\u4e0e\uff0c\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u524d\u8005\u5bb9\u6613\u5bfc\u81f4\u53cd\u590d\u62cd\u5356\uff0c\u591a\u6b21\u4ea4\u6613\uff0c\u800c\u540e\u8005\u51e0\u4e4e\u53ea\u6709\u4e00\u6b21\u6027\u4ea4\u6613\uff0c\u9632\u7be1\u6539\u7684\u9700\u6c42\u5f88\u4f4e\uff0c\u6211\u4eec\u552f\u4e00\u9700\u8981\u4fdd\u8bc1\u7684\u662f\u7248\u6743\u800c\u975e\u7269\u6743\uff0c\u800c\u533a\u5757\u94fe\u6070\u597d\u4e0d\u64c5\u957f\u7248\u6743"),(0,n.kt)("li",{parentName:"ul"},"3D\u9632\u7be1\u6539\u7684\u9700\u6c42\u8fdc\u4f4e\u4e8e\u56fe\u50cf\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u7be1\u6539\u4e0d\u4ec5\u4ec5\u610f\u5473\u7740\u6570\u5b57\u5b58\u50a8\u7684\u5185\u5bb9\u53d8\u66f4\uff0c\u800c\u5f88\u6709\u53ef\u80fd\u7be1\u6539\u7684\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u7684\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u53ca\u5176\u4ed6\u4e00\u4e9b\u4f9d\u8d56\u5982\u8054\u7f51\u7b49\u9ad8\u5ea6\u76f8\u5173\uff0c\u5bf9\u4e8e\u6e38\u620f\u7a0b\u5e8f\u4eba\u4eec\u4e00\u822c\u7be1\u6539\u7684\u662f\u5916\u6302\u800c\u975e\u7a0b\u5e8f\u672c\u8eab\uff0c\u6211\u4eec\u4e3b\u8981\u4fdd\u62a4\u7684\u662f\u539f\u59cb\u7684\u7248\u6743\uff0c\u800c\u975e\u4ea4\u6613\u8fc7\u7a0b\u4e2d\u7684\u7269\u6743")),(0,n.kt)("h3",{id:"744-rust"},"7.4.4 Rust"),(0,n.kt)("p",null,"\u6e38\u620f\u548c\u56fe\u5f62\u7cfb\u7edf\u76f8\u5bf9\u4f20\u7edf\u5e94\u7528\u67b6\u6784\u5e76\u884c\u8ba1\u7b97\u7684\u884c\u4e3a\u66f4\u591a\uff0c\u8981\u91cd\u70b9\u5173\u6ce8\u8bed\u8a00\u5bf9\u5e76\u884c\u8ba1\u7b97\u7684\u652f\u6301"),(0,n.kt)("p",null,"embark.dev"),(0,n.kt)("p",null,"Rust-gpu"),(0,n.kt)("p",null,"Kajiya "),(0,n.kt)("p",null,"rafx "),(0,n.kt)("p",null,"gamedev.rs"),(0,n.kt)("h3",{id:"745-unity-editorxr-and-scenefusion"},"7.4.5 Unity EditorXR and SceneFusion"),(0,n.kt)("h3",{id:"746-bevyengine"},"7.4.6 BEVYengine"),(0,n.kt)("p",null,"\u57fa\u4e8e\u6570\u636e\u9a71\u52a8\u7684rust\u6e38\u620f\u5f15\u64ce"),(0,n.kt)("h3",{id:"748-magicavoxel"},"7.4.8 magicavoxel"),(0,n.kt)("p",null,"\u611f\u89c9\u4ee5Voxel \u4e3a\u57fa\u7840\u7684\u521b\u5efa\uff0c\u4e00\u662f\u6bd4\u7cbe\u7ec6\u7684\u4e09\u89d2\u5f62\u4fbf\u4e8e\u751f\u6210\uff0c\u800c\u4e14\u7b26\u5408\u7269\u7406\u521b\u5efa\u7684\u65b9\u5f0f"),(0,n.kt)("h3",{id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"},"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"),(0,n.kt)("p",null,"Unity unreal engine blender"),(0,n.kt)("h3",{id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b"},"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b"),(0,n.kt)("h3",{id:"7411-meta-builder-bot"},"7.4.11 Meta Builder bot"),(0,n.kt)("p",null,"\u8bed\u8a00\u6216\u6587\u672c\u81f3\u5c11\u751f\u6210\u8981\u7d20\uff0c\u5982\u679c\u6709\u8bef\u5dee\uff0c\u81f3\u5c11\u5927\u90e8\u5206\u8981\u7d20\uff0c\u7136\u540e\u7528\u6237\u4ea4\u4e92\u4e13\u6ce8\u4e8e\u7cbe\u8c03\uff0c\u6216\u8005\u628a\u8981\u7d20\u548c\u4ea4\u4e92\u5206\u5f00\uff0c\u5728\u7528\u6237\u786e\u5b9a\u8981\u7d20\u4e4b\u540e\uff0c\u76f8\u5f53\u4e8e\u6709\u4e86\u7c7b\u578b\u5148\u9a8c\uff0c\u518d\u786e\u5b9a\u4ea4\u4e92\u6709\u66f4\u591a\u80cc\u666f"),(0,n.kt)("p",null,"\u5728C\u7aef\uff0c\u4ece\u6570\u636e\u5e93\u9009\u62e9\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u7c7b\u578b\u5212\u5206\uff0c\u5e76\u5177\u6709\u4e00\u5b9a\u7684\u65e0\u6cd5\u5bf9\u5185\u5bb9\u8fdb\u884c\u7ec4\u7ec7\u53d8\u5f97\u975e\u5e38\u91cd\u8981\uff0c\u5927\u5927\u51cf\u5c11\u4ea4\u4e92\u6210\u672c\uff0c\u800c\u5c06\u4ea4\u4e92\u96c6\u4e2d\u4e8e\u5f53\u524d\u573a\u666f\u53ef\u4ee5\u770b\u5230\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u7684\u6309\u94ae\u90fd\u8f6c\u6210\u8bed\u97f3\u6216\u8005\u4e00\u4e9b\u5feb\u6377\u6587\u5b57\uff0c\u77ed\u8bed\uff0c\u5173\u952e\u5b57"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ"},"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ")),(0,n.kt)("h3",{id:"7412-houdini-node-based-workflow"},"7.4.12 Houdini: Node-based Workflow"),(0,n.kt)("p",null,"3\u3001Houdini "),(0,n.kt)("p",null,"\u8981\u50cfHoudini \u4e00\u6837\u628a\u590d\u6742\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u65b9\u6cd5\u6784\u9020\uff0c\u6d41\u7a0b\u5b9a\u4e49\uff0c\u53c2\u6570\u8d4b\u503c\uff0c\u7b49\u5168\u90e8\u53bb\u6389\uff0c\u7528\u6237\u53ea\u4e13\u5fc3\u5199\u903b\u8f91\uff0c\u6700\u540e\u6574\u4e2a\u7f16\u7a0b\u662f\u50cfHoudini \u90a3\u6837\u5e72\u51c0\u6574\u6d01\u7684\uff0c\u6ca1\u6709\u4ee3\u7801\u75d5\u8ff9\u7684"),(0,n.kt)("p",null,"Houdini\u7684node\u6ca1\u6709\u53c2\u6570\uff0c\u53ea\u6709\u8282\u70b9\uff0c\u4ed6\u628aoperation\u5206\u6210\u4e00\u4e9b\u7c7b\u578b\uff0c\u90a3\u4e2a\u7c7b\u578b\u4e4b\u95f4\u7684\u53c2\u6570\u4f20\u9012\u662f\u56fa\u5b9a\u7684"),(0,n.kt)("p",null,"Houdini\u7684Node network \u662f\u4e00\u79cd\u8fd0\u884c\u8fc7\u7a0b\uff0c\u4ed6\u65e2\u53ef\u4ee5\u5145\u5f53\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u914d\u7f6e\uff0c\u5982\u679c\u6240\u6709\u8282\u70b9\u6ca1\u6709\u5ef6\u8fdf\uff0c\u77ac\u65f6\u6267\u884c\uff0c\u4ed6\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9759\u6001\u8bbe\u7f6e\uff0c\u5982\u679c\u8fd9\u4e9b\u8282\u70b9\u7684\u6307\u4ee4\u80fd\u5728\u4e00\u5e27\u5185\u6267\u884c\u5b8c\uff0c\u8fd9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4e00\u4e2ausd\u6216\u8005\u5176\u4ed6\u5408\u9002\u6587\u4ef6\u7684\u52a0\u8f7d\u8fc7\u7a0b\uff0c\u76f8\u5f53\u4e8e\u5728\u52a0\u8f7d\u8fc7\u7a0b\u7684\u987a\u5e8f\u6267\u884c\u4e2d\uff0c\u540e\u7eed\u7684\u52a0\u8f7d\u53ef\u80fd\u4f1a\u4fee\u6539\u524d\u9762\u7684\u5c5e\u6027\uff0c\u4f46\u4e0d\u8db3\u7684\u65b9\u9762\u662f\u52a0\u8f7d\u7684\u8fc7\u7a0b\u65e0\u6cd5\u5e76\u884c\u5316\uff0c\u56e0\u4e3aNode network \u662f\u4e00\u4e2a\u987a\u5e8f\u6307\u4ee4"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u52a8\u753b\uff0c\u5982\u679c\u67d0\u4e9b\u8282\u70b9\u7684\u6267\u884c\u9700\u8981\u65f6\u95f4\uff0c\u4ed6\u5c31\u5f62\u6210\u52a8\u753b")),(0,n.kt)("p",null,"Houdini\u7684\u6d41\u7a0b\u548c\u6570\u636e\u9a71\u52a8\u7684\u6d41\u7a0b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4e00\u4e2a\u662f\u6267\u884c\u8ba1\u7b97\u7684\u8fc7\u7a0b\uff0c\u4e00\u4e2a\u662f\u5355\u7eaf\u7684\u7ec4\u5408\u914d\u7f6e\uff0c\u8fd9\u662f\u56e0\u4e3aHoudini \u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a\u5185\u5bb9\u751f\u6210\u7684\u8fc7\u7a0b\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u7f16\u8f91\u6001\uff0c\u800cECS\u662f\u8fd0\u884c\u6001"),(0,n.kt)("p",null,"\u5185\u5bb9\u751f\u6210\u8fc7\u7a0b\u4e2d\u600e\u4e48\u5bf9\u4e00\u4e2a\u57fa\u7840\u6a21\u578b\u8fdb\u884c\u53d8\u5f62\uff0c\u5176\u8f93\u5165\u8f93\u51fa\u53c2\u6570\u662f\u786e\u5b9a\u6216\u8005\u53ef\u4ee5\u63a8\u5bfc\u7684\uff0c\u4f46\u662f\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u5219\u6bd4\u8f83\u590d\u6742\uff0c\u6ca1\u6709\u89c4\u5219\uff0c\u9700\u8981\u5b9a\u4e49\u534f\u8bae"),(0,n.kt)("p",null,"Directable results "),(0,n.kt)("p",null,"\u7531\u4e8e\u6240\u6709\u8bbe\u8ba1\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u6700\u540e\u4e00\u523b\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4f20\u7edf\u7684\u786c\u7f16\u7801\uff0c\u5b83\u5177\u6709\u8bb8\u591a\u4e2d\u95f4\u5f62\u6001\uff0c\u6ca1\u6709\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\u6d41\u7a0b\u548c\u7ed3\u6784\uff0c\u6240\u4ee5\u5f88\u5bb9\u6613\u4e2d\u95f4\u67d0\u4e9b\u6d41\u7a0b\u6216\u8005\u903b\u8f91\u53d8\u4e86\uff0c\u5176\u540e\u9762\u7684\u6d41\u7a0b\u90fd\u53d7\u5230\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u751a\u81f3\u9700\u8981\u91cd\u65b0\u4fee\u6539\u540e\u9762\u7684\u4ee3\u7801\u548c\u903b\u8f91\uff0c\u8fed\u4ee3\u6210\u672c\u9ad8"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u6709\u70b9\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u53ef\u4ee5\u5b9e\u73b0\u8fd9\u4e2a\u76ee\u6807"),(0,n.kt)("p",null,"\u5176\u5b9e\u5c31\u6709\u70b9\u50cf\u7f16\u8bd1\u6d41\u7a0b\u6216\u8005\u6e32\u67d3\u7ba1\u7ebf\u4e00\u6837\uff0c\u4ed6\u5b9a\u4e49\u597d\u4e86\u6574\u4e2a\u7ba1\u7ebf\u4e4b\u95f4\u7684\u53c2\u6570\u548c\u63a5\u53e3\uff0c\u90a3\u4e48\u4e2d\u95f4\u7684\u8c03\u6574\u5c31\u4e0d\u4f1a\u5f71\u54cd\u90a3\u4e48\u5927\uff0c\u4f60\u53ea\u9700\u8981\u9075\u5faa\u63a5\u53e3\u89c4\u8303\u5c31\u884c"),(0,n.kt)("p",null,"Tool building "),(0,n.kt)("p",null,"\u57fa\u4e8enode-based\u7684\u5de5\u4f5c\u6d41\u7a0b\u53ef\u4ee5\u4f7f\u5f97\u81ea\u5b9a\u4e49node\u53d8\u5f97\u53ef\u80fd\uff0c\u53ea\u8981\u9075\u7167node\u4e4b\u95f4\u7684\u534f\u8bae\uff0c\u7136\u540enode\u5c31\u53ef\u4ee5\u5171\u4eab\uff0c\u5373\uff1a"),(0,n.kt)("p",null,"Houdini Digital Assets "),(0,n.kt)("p",null,"\u4e0a\u4e0b\u6e38\u7684\u53c2\u6570\u5f62\u5f0f\u57fa\u672c\u662f\u8fd8\u662fHoudini \u672c\u8eab\u7684node\u5b9a\u4e49\u7684\uff0c\u5f00\u53d1\u8005\u53ea\u662f\u628a\u4e2d\u95f4\u67d0\u4e9b\u5904\u7406\u8fc7\u7a0b\u4fdd\u5b58\u4e3a\u4e00\u4e2a.hda \u8d44\u4ea7\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u5b9a\u4e49\u53c2\u6570\uff0c\u521b\u4f5c\u505a\u7684\u53ea\u662f\u628a\u4e00\u4e2a\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u590d\u7528\uff0c\u8fd9\u4e9b\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u8fd8\u662f\u7528Houdini \u57fa\u672c\u7684\u64cd\u4f5c\uff0cHoudini\u6709\u6d77\u91cf\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u521b\u4f5c\u8005\u51e0\u4e4e\u5f88\u5c11\u4f1a\u7f16\u5199\u81ea\u5b9a\u4e49\u51fd\u6570\u4ee3\u7801\uff0c\u6216\u8005\u53ea\u9700\u8981\u7b80\u5355\u5f88\u5c0f\u7247\u6bb5\u7684\u4ee3\u7801"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u8981\u60f3\u505a\u5230\u8fd9\u4e00\u5c42\uff0c\u8981\u5bf9\u6e38\u620f\u903b\u8f91\u811a\u672c\u8fdb\u884c\u6df1\u5165\u5206\u7c7b\uff0c\u5e76\u628a\u8fd9\u4e9b\u6a21\u5f0f\u672f\u8bed\u5316\uff0c\u8fd9\u4e9b\u5206\u7c7b\u8981\u80fd\u591f\u5bf9\u6bd4\uff0c\u6240\u6709\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u5408\uff0c\u4ee5\u53ca\u4fdd\u8bc1\u76f8\u5e94\u7684\u7075\u6d3b\u6027\uff0c\u4f7f\u5f97\u81ea\u5b9a\u4e49\u7684\u6210\u672c\u6700\u4f4e\uff0c\u81ea\u5b9a\u4e49\u7684\u6a21\u5f0f\u66f4\u7b80\u5355"),(0,n.kt)("p",null,"A new way of thinking "),(0,n.kt)("p",null,"\u7531\u4e8e\u5168\u65b0\u7684\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5b9a\u4e49\u7684\u80fd\u529b\u800c\u4e0d\u662f\u9488\u5bf9\u5177\u4f53\u95ee\u9898\u91cd\u590d\u89e3\u51b3\uff0c\u5c31\u4f1a\u4ea7\u751f\u4e00\u79cd\u65b0\u7684\u521b\u5efa\u6570\u5b57\u5185\u5bb9\u7684\u601d\u7ef4"),(0,n.kt)("p",null,"\u7f16\u7a0b\u90fd\u662f\u5728node\u4e4b\u95f4\u7f16\u7a0b\uff0c\u56fa\u5b9a\u7684\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,"\u8ddfHoudini \u7684\u4e3b\u8981\u533a\u522b\u662f\u4ed6\u662f\u79bb\u7ebf\u7684\uff0c\u7f16\u8f91\u6001\u7684\uff0c\u4e0d\u9700\u8981\u5185\u5bb9\u5ba1\u67e5\uff0c\u517c\u5bb9\u6027\u68c0\u67e5\uff0c\u5b89\u5168\u6027\u7b49\uff0c\u800c\u62df\u5a32\u662f\u8fd0\u884c\u65f6\u7684\uff0c\u5305\u62ec\u5305\u7684\u5927\u5c0f\uff0c\u4eff\u771f\u6a21\u62df\uff0c\u5b89\u5168\uff0c\u517c\u5bb9\u6027\u7b49\u95ee\u9898\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\u53ef\u4ee5\u901a\u8fc7\u7f16\u8bd1\u5668\u8981\u505a\u4e00\u4e9b\u5206\u6790\uff0c\u53e6\u4e00\u65b9\u9762\u7528\u6237\u9700\u8981\u5728\u81ea\u5df1\u7684\u73af\u5883\u8dd1\u8d77\u6765"),(0,n.kt)("h3",{id:"7413-realityos"},"7.4.13 realityOS"),(0,n.kt)("h3",{id:"7414-openxr"},"7.4.14 OpenXR"),(0,n.kt)("p",null,"\u82f9\u679c\u9000\u51fa\u4e86OpenXR\u610f\u5473\u7740\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u82f9\u679c\u4f1a\u5bf9XR\u7684\u7406\u89e3\u6709\u8f83\u5927\u7684\u5dee\u5f02\uff0c\u82f9\u679c\u4e5f\u662f\u5e0c\u671b\u52a0\u5f3a\u8fd9\u79cd\u5dee\u5f02\u6765\u589e\u5f3a\u81ea\u5df1\u7684\u7ade\u4e89\u529b\u548c\u5dee\u5f02\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u6807\u51c6\u8fd8\u5b58\u5728\u5f88\u591a\u53d8\u6570\uff0c\u6807\u51c6\u672c\u8eab\u53ef\u80fd\u9762\u4e34\u8f83\u5927\u53d8\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u5f00\u53d1\u63a5\u53e3\u4f1a\u8fdb\u4e00\u6b65\u5206\u5316\uff0c\u5f00\u53d1\u8005\u9762\u5bf9\u66f4\u52a0\u590d\u6742\u7684\u6982\u5ff5\u548c\u5f00\u53d1\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u81ea\u7814\u7684\u63a5\u53e3\u5c01\u88c5\u4f1a\u66f4\u5feb\u901f\u76f8\u5e94\u8fd9\u79cd\u53d8\u5316\uff0c\u5e76\u4e14\u7b80\u5316\u7528\u6237\u5f00\u53d1")),(0,n.kt)("h3",{id:"7415-ecs--ai"},"7.4.15 ECS + AI"),(0,n.kt)("p",null,"EntitiesBT"),(0,n.kt)("p",null,"Behavior Tree "),(0,n.kt)("p",null,"\u5728\u539f\u751f\u7684ECS\u6846\u67b6\u4e0b\u5b9e\u73b0\u5177\u6709\u575a\u5f3a\u4f9d\u8d56\u5173\u7cfb\u7684\u529f\u80fd\u662f\u5426\u5f88\u96be\uff0c\u4f8b\u5982\u884c\u4e3a\u6811\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u662f\u50cf\u884c\u4e3a\u6811\u4e00\u6837\u76f8\u5bf9\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6211\u4eec\u53ef\u4ee5\u50cfUE blueprint \u4e00\u6837\u5b9a\u4e49\u5957\u6846\u67b6\uff0c\u7136\u540e\u5bf9\u4e8e\u8fd9\u4e2a\u6846\u67b6\u6309\u592a\u6781\u4e00\u6837\u7684\u601d\u8def\u5728\u7f16\u8bd1\u5c42\u5bf9\u4ee3\u7801\u505a\u91cd\u65b0\u8c03\u6574\uff0c\u5f53\u7136\u8981\u8003\u8651\u91cd\u65b0\u7f16\u8f91\u7684\u4fbf\u6377\u6027\uff0c\u6240\u4ee5\u53ef\u80fd\u662f\u62df\u5a32\u8fd0\u884c\u65f6\u4e0a\u7684\u4e00\u4e2a\u811a\u672c\u8f7b\u91cf\u7ea7JIT"),(0,n.kt)("h3",{id:"7416-unreal-blueprint"},"7.4.16 Unreal blueprint"),(0,n.kt)("p",null,"\u84dd\u56fe\u4ee5\u53ca\u76f8\u5e94\u7684\u5f88\u591a\u7f16\u8f91\u5668\u53caUI\u754c\u9762\uff0c\u672c\u8d28\u4e0a\u4ed6\u4eec\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4ed6\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fa\u5b9a\u7c7b\u578b\u7684\u5b9a\u4e49\uff1a\u5bf9\u4e8e\u4e00\u4e9b\u7279\u5b9a\u56fa\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982blueprint \u5305\u542b\u7684\u90a3\u4e9b\u7c7b\u578b\uff0c\u4ed6\u4eec\u5f80\u5f80\u5728OOP\u4e2d\u6709\u4e00\u5b9a\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\u4e00\u822c\u9700\u8981\u5b9a\u4e49\u90a3\u51e0\u4e2a\u7c7b\u6216\u8005\u5b9e\u4f8b\uff0c\u90a3\u4e2a\u7c7b\u9700\u8981\u5f15\u7528\u90a3\u4e9b\u7c7b\u7684\u5b9e\u4f8b\uff0c\u4ee5\u53ca\u600e\u6837\u5bf9\u8fd9\u4e9b\u5b9e\u4f8b\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u4e8e\u5b9e\u73b0\u8fd9\u4e9bblueprint\u5bf9\u5e94\u7684\u529f\u80fd\uff0c\u4ed6\u4eec\u7684\u8fd9\u79cd\u901a\u7528\u7ed3\u6784\u88ab\u8bbe\u8ba1\u51fa\u6765\uff0c\u5426\u5219\u90a3\u4e2a\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u5b9a\u4e49\u81ea\u5df1\u7684\u5bf9\u8c61\u6a21\u578b\uff0c\u6bcf\u4e2a\u4eba\u5b9a\u4e49\u7684\u53ef\u80fd\u5f88\u4e0d\u4e00\u6837\uff0c\u76f8\u5e94\u7684\u5185\u5b58\u7ba1\u7406\uff0c\u7b49\u7b49\u90fd\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5e94\u529f\u80fd\u7684\u521d\u59cb\u5316\uff0c\u6210\u5458\u53d8\u91cf\u590d\u5236\u7ba1\u7406\u7b49\u662f\u5f88\u7e41\u7410\u7684\u4e8b\u60c5\uff0c\u6309\u7167\u84dd\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4ed6\u5b9e\u9645\u4e0a\u628a\u6d41\u7a0b\u56fa\u5316\u4e86\uff0c\u56e0\u6b64\u8fd9\u4e9b\u57fa\u672c\u7684\u6d41\u7a0b\u5c31\u7b80\u5316\u4e86"),(0,n.kt)("li",{parentName:"ul"},"\u5269\u4e0b\u7528\u6237\u9700\u8981\u505a\u7684\u5c31\u662f\u9488\u5bf9\u56fa\u5b9a\u7ed3\u6784\u548c\u67b6\u6784\u4e0b\u7684\u5177\u4f53\u67d0\u4e2a\u51fd\u6570\u8fdb\u884c\u4ee3\u7801\u7f16\u5199")),(0,n.kt)("p",null,"\u574f\u5904\u662f\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u57fa\u4e8e\u4ee3\u7801\u7684\uff0c\u5e76\u4e14\u65e0\u6cd5\u81ea\u5b9a\u4e49\uff0c\u5b58\u5728\u4e00\u5b9a\u7684\u5197\u4f59\uff0c\u5982\u679c\u4e0d\u91c7\u7528\u5b83\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u81ea\u5df1\u4ece\u96f6\u5b9e\u73b0\uff0c\u90a3\u5c31\u9700\u8981\u5b9e\u73b0\u6574\u4e2a\u6a21\u5757\u7684\u67b6\u6784\uff0c\u5bf9\u8c61\u4e4b\u95f4\u7684\u7ba1\u7406\u7b49\uff0c\u4ee3\u4ef7\u66f4\u5927\uff0c\u4f46\u81ea\u7531\u5ea6\u66f4\u5927\uff0c\u4f8b\u5982\u53ef\u4ee5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\uff0cUE\u7684\u6d41\u7a0b\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\uff0c\u6216\u8005\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u6216\u8005\u73af\u5883\u4e0b\u4e0d\u4e00\u5b9a\u6700\u4f18"),(0,n.kt)("p",null,"\u84dd\u56fe\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u67b6\u6784\uff0c\u4ed6\u76f8\u5f53\u4e8eUE\u5e2e\u52a9\u6253\u4e86\u4e00\u4e2a\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5bf9\u5176\u4e2d\u7684\u65b9\u6cd5\u8fdb\u884c\u586b\u5145\uff0c\u6574\u4e2a\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7684\u601d\u8def\uff0c\u5bf9\u4e8eEpic \u6765\u8bb2\uff0c\u5b83\u9700\u8981\u53bb\u5b9e\u73b0\u5927\u91cf\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u6240\u4ee5\u5b83\u7684\u529f\u80fd\u6bd4Unity\u8981\u590d\u6742\u5f97\u591a\uff0c\u4f46\u8fd9\u4e9b\u5b9e\u73b0\u5bf9\u4e8e\u7279\u5b9a\u7684\u4e00\u4e2a\u6e38\u620f\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u4f18\u5316\u7684\uff0c\u4ed6\u4f1a\u727a\u7272\u6027\u80fd\u6765\u6362\u53d6\u8fd9\u79cd\u7b80\u5355\uff0c\u56e0\u4e3a\u901a\u7528\u7684\u67b6\u5b50\u5f80\u5f80\u4e0d\u662f\u6700\u4f18\u7684\uff0c\u800c\u5b83\u9762\u5411\u5bf9\u8c61\u7684\u6df1\u5ea6\u5b9e\u73b0\u5bfc\u81f4\u4ee3\u7801\u4e5f\u5f88\u96be\u4f18\u5316\uff0c\u4f8b\u5982\u67b6\u5b50\u91cc\u9762\u5b58\u5728\u5927\u91cf\u4ea4\u53c9\u5f15\u7528"),(0,n.kt)("p",null,"\u50cfUnity\u56e0\u4e3a\u6ca1\u6709\u63d0\u4f9b\u4f17\u591a\u8fd9\u79cd\u6df1\u5ea6\u5b9a\u5236\u7684\u67b6\u5b50\uff0c\u53cd\u800c\u80fd\u591f\u5bb9\u6613\u53bb\u5b9e\u73b0ECS\u8fd9\u79cd\u4f18\u5316"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eUnity\uff0c\u6709\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5\uff0c\u7c7b\u4f3c\u5b9a\u4e49\u4e86\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u8303\u5f0f\uff0c\u4f46\u8fd9\u4e9b\u8303\u5f0f\u672c\u8eab\u662f\u6309\u7167OOP\u7684\u65b9\u5f0f\u5b9a\u4e49\u7684\uff0c\u56e0\u6b64\u4ed6\u7684\u8303\u5f0f\u662f\u5b9e\u73b0\u4e86\u4e00\u4e9b\u7279\u5b9a\u7684\u529f\u80fd\uff0c\u800c\u4e0d\u662f\u5b9a\u4e49\u4e86\u4e00\u4e2a\u6846\u67b6\uff0c\u6240\u4ee5UE\u8981\u5b66\u4e60\u66f4\u591a\u7684\u77e5\u8bc6\uff0c\u5f88\u591a\u77e5\u8bc6\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u7279\u5b9a\u8303\u5f0f\u7684"),(0,n.kt)("p",null,"\u9664\u4e86\u8303\u5f0f\u672c\u8eab\uff0cBlueprint \u7684\u53e6\u4e00\u4e2a\u5f3a\u5927\u7684\u529f\u80fd\u5728\u4e8e\u5b83\u628a\u6574\u4e2a\u4e00\u4e2a\u4ee3\u7801\u5757\u6216\u8005\u4e00\u4e2a\u590d\u6742\u7684\u5b50\u6a21\u5757\u7cfb\u7edf\uff0c\u6253\u6563\u6210\u591a\u4e2a\u4ee5\u65b9\u6cd5\u4e3a\u5355\u4f4d\u7684\u53ef\u89c6\u7f16\u8f91\u6a21\u5757\uff0c\u8fd9\u6837\u662f\u7684\u4fee\u6539\u5355\u72ec\u7684\u6a21\u5757\u66f4\u52a0\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u5173\u6ce8\u51fd\u6570\u7684\u8f93\u5165\u8f93\u51fa\uff0c\u4e0d\u9700\u8981\u5728\u4ee3\u7801\u4e2d\u5bfb\u627e\u4fee\u6539\u51fd\u6570\u7684\u5165\u53e3\uff0c\u4e5f\u4e0d\u9700\u8981\u5f15\u5165\u4e00\u4e9b\u53d8\u91cf\u7684\u4fe1\u7528\u3001\u8bfb\u53d6\u6216\u8005\u4fee\u6539\u7e41\u7410\u7684\u4ee3\u7801"),(0,n.kt)("h3",{id:"7417-pixar"},"7.4.17 Pixar"),(0,n.kt)("p",null,"\u76ae\u514b\u65af\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408"),(0,n.kt)("p",null,"\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408\u7684\u7ed3\u679c\u662f\u4ec0\u4e48"),(0,n.kt)("h3",{id:"7418-gaia-procedural-worldscom"},"7.4.18 Gaia procedural-worlds.com"),(0,n.kt)("p",null,"\u7a0b\u5e8f\u5316\u9759\u6001\u5185\u5bb9\u751f\u6210\u5e94\u8be5\u8fd8\u662f\u6bd4\u8f83\u6210\u719f\u7684\u67b6\u6784\u4e86\uff0c\u540e\u671f\u5e94\u8be5\u80fd\u591f\u5bb9\u6613\u5f00\u53d1\uff0c\u5230\u4ea4\u4e92\u66f4\u96be"),(0,n.kt)("p",null,"\u4ea4\u4e92\u7684\u8bbe\u8ba1\u4e5f\u8981\u662f\u7a0b\u5e8f\u5316\u7684\uff0c\u5f53\u7136\u7531\u4e8eECS\u672c\u8eab\u662f\u7ec4\u4ef6\u5316\u7684\uff0c\u6ca1\u6709\u64cd\u4f5c\u987a\u5e8f\u4f9d\u8d56\uff0c\u6240\u4ee5\u8fd9\u4e2a\u95ee\u9898\u4e0d\u5927\u5b58\u5728\uff0c\u4f46\u662f\u5f53\u9700\u8981\u5bf9\u9759\u6001\u5185\u5bb9\u8bbe\u8ba1\u591a\u4e2a\u4fee\u6539\u65f6\uff0c\u64cd\u4f5c\u6b65\u9aa4\u7684\u5f71\u54cd\u5c31\u51fa\u6765\u4e86\uff0c\u7a0b\u5e8f\u5316\u7684\u597d\u5904\u662fdirectable\uff0c\u5b83\u7b80\u5316\u4e86\u5bf9\u64cd\u4f5c\u7684\u4efb\u610f\u4fee\u6539\uff0c\u4f20\u7edf\u7684\u8f6f\u4ef6\u5c31\u662f\u9075\u5faa\u89c4\u5219\u548c\u6b65\u9aa4\u7684\uff0c\u8fd9\u6837\u5982\u679c\u6709\u4e9b\u5386\u53f2\u64cd\u4f5c\u4fee\u6539\u4e86\u6216\u8005\u9700\u8981\u4fee\u6539\uff0c\u5f80\u5f80\u4f1a\u5f71\u54cd\u5176\u4ed6\u5927\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u4f46\u811a\u672c\u53ea\u662f\u9488\u5bf9\u5355\u4e2a\u7269\u4f53\u7684\u884c\u4e3a\uff0c\u6574\u4e2a\u573a\u666f\u7684\u7ed3\u67b6\u6784\u8bbe\u8ba1\u8fd8\u662f\u5e94\u8be5\u5c3d\u53ef\u80fd\u7684\u7a0b\u5e8f\u5316\uff0c\u800cRoblox \u6ca1\u6709\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7a0b\u5e8f\u5316\u7684\u573a\u666f\u8bbe\u8ba1\u4f7f\u5f97\u901a\u5e38\u53ef\u4ee5\u66f4\u9ad8\u6548\u5730\u8bbe\u8ba1\u5927\u73af\u5883\uff0c\u7136\u540e\u7cbe\u8c03\u5c0f\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u5bf9\u573a\u666f\u6bcf\u4e2a\u7269\u4f53\u90fd\u8981\u72ec\u7acb\u6446\u653e\u548c\u8bbe\u8ba1\uff0c\u56e0\u4e3a\u5927\u73af\u5883\u901a\u5e38\u90fd\u6709\u4e00\u5b9a\u7684\u968f\u673a\u6027"),(0,n.kt)("h3",{id:"7419-google-maps-api"},"7.4.19 Google Maps API"),(0,n.kt)("h3",{id:"7420-procedural-content-generation"},"7.4.20 Procedural content generation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DCC\u4f7f\u7528deforming, cutting, merging \u7b49\u4ee3\u66ff\u5bf9\u4e09\u89d2\u5f62\u7684\u76f4\u63a5\u64cd\u4f5c\uff0c\u4ece\u800c\u7b80\u5316\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"PCG\u4f7f\u7528\u6237\u4e13\u6ce8\u4e8e\u7528\u4e8e\u751f\u6210\u5185\u5bb9\u7684\u7a0b\u5e8f\u5316\u7b97\u6cd5\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7e41\u7410\u7684\u5185\u5bb9\u64cd\u4f5c\uff0c\u8fd9\u79cd\u7b97\u6cd5\u66f4\u7b26\u5408\u4eba\u7684\u903b\u8f91"),(0,n.kt)("p",null,"PCG\u7684\u8ba1\u7b97\u8fc7\u7a0b\u6bd4\u8f83\u590d\u6742\uff0c\u66f4\u9002\u5408PC\u7aef\uff0c\u79fb\u52a8\u7aef\u8981\u4e13\u6ce8\u73a9\u6cd5\u90e8\u4efd"),(0,n.kt)("p",null,"\u7b54\u4e3b\u5bf9\u751f\u6210\u7b97\u6cd5\u7684\u7406\u89e3\u5c31\u597d\u50cf\u67d0\u4e9b\u65f6\u671f\u5bf9\u706b\u836f\u7684\u7406\u89e3\uff1a\u7528\u6765\u653e\u70df\u82b1\u7684\u4e1c\u897f\uff0c\u9700\u8981\u7814\u7a76\u66f4\u597d\u7684\u706b\u836f\u4e48\uff1f\u4e0d\u662f\u7b97\u6cd5\u591f\u4e86\uff0c\u800c\u662f\u8bbe\u8ba1\u8005\u4e0d\u77e5\u9053\u8bbe\u8ba1\u76ee\u7684\u4e3a\u4f55\uff0c\u5bf9\u7b97\u6cd5\u6ca1\u6709\u8981\u6c42\u3002\u6e38\u620f\u6838\u5fc3\u8bbe\u8ba1\u7edd\u4e0d\u662f\u5267\u60c5\u3001\u573a\u666f\uff0c\u800c\u662f\u73a9\u6cd5\u3002\u73a9\u6cd5\u662f\u4ec0\u4e48\uff0c\u5c31\u662f\u7ed9\u73a9\u5bb6\u6709\u610f\u601d\u7684\u95ee\u9898\uff0c\u8ba9\u73a9\u5bb6\u89e3\u51b3\u95ee\u9898\u3002\u7528\u7b97\u6cd5\u63d0\u51fa\u7684\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u548c\u89e3\u51b3\u95ee\u9898\u96be\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u73a9\u5bb6\u5373\u4f7f\u77e5\u9053\u4e86\u4f60\u5982\u4f55\u751f\u6210\u95ee\u9898\uff0c\u4f46\u662f\u4ed6\u73b0\u5728\u4e5f\u4e0d\u77e5\u9053\u5982\u4f55\u6709\u6548\u7684\u89e3\u51b3\u95ee\u9898\u3002\u8fd9\u5c31\u662f\u8457\u540d\u7684NP/P\u95ee\u9898\uff0c\u6211\u5f53\u7136\u77e5\u9053\u4fc4\u7f57\u65af\u65b9\u5757\u968f\u673a\u751f\u6210\u7684\u65b9\u5757\u968f\u673a\u7b97\u6cd5\uff0c\u4f46\u5c31\u6ca1\u6709\u4e00\u4e2a\u9ad8\u6548\u7684\u7b97\u6cd5\u53bb\u89e3\u51b3\u4fc4\u7f57\u65af\u65b9\u5757\u62fc\u63a5\u95ee\u9898\uff0c\u6570\u72ec\u7684\u751f\u6210\u7b97\u6cd5\u5f88\u9ad8\u6548\uff0c\u89e3\u51b3\u6570\u72ec\u7684\u7b97\u6cd5\u5f88\u6162\uff0c\u751f\u6210\u5730\u56fe\u7684\u7b97\u6cd5\u9ad8\u6548\uff0c\u8bbf\u95ee\u5730\u56fe\u4e0a\u7684\u6bcf\u4e00\u4e2a\u70b9\u7684\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u5c31\u96be\u7206\u4e86\u3002\u4e3a\u5565\u89c9\u5f97\u751f\u6210\u7b97\u6cd5\u6ca1\u7528\uff0c\u56e0\u4e3a\u4e0d\u77e5\u9053\u8981\u6784\u9020\u4ec0\u4e48\u95ee\u9898\u7ed9\u73a9\u5bb6\uff0c\u8bbe\u8ba1\u76ee\u7684\u5230\u5e95\u662f\u4ec0\u4e48\uff0c\u800c\u662f\u6f2b\u65e0\u76ee\u7684\u5730\u53bb\u751f\u6210\u90a3\u4e9b\u82b1\u82b1\u8349\u8349\uff0c\u548c\u7528\u706b\u836f\u653e\u70df\u706b\u4e00\u4e2a\u9053\u7406\uff0c\u672c\u6765\u5c31\u4e0d\u662f\u8bbe\u8ba1\u7684\u6838\u5fc3\uff0c\u518d\u600e\u4e48\u63d0\u5347\u6280\u672f\u4e5f\u53ea\u662f\u88c5\u9970\u3002"),(0,n.kt)("p",null,"\u4fc4\u7f57\u65af\u65b9\u5757\u5c31\u662f\u4f8b\u5b50\uff0c\u771f\u6b63\u628a\u7b97\u6cd5\u751f\u6210\u8981\u7528\u4e8e\u73a9\u6cd5\u4e0a\uff0c\u5c31\u9700\u8981\u4e86\u89e3P/NP\u95ee\u9898\uff1a\u7528\u7b80\u5355\u7684\u4fe1\u606f\u662f\u53ef\u4ee5\u6784\u9020\u590d\u6742\u95ee\u9898\u3002\u5176\u5b9eMOBA\u6e38\u620f\u91cc\uff0c\u4e00\u4e2a\u65f6\u95f4\u6bb5\u7684\u8d70\u4f4d\u89c4\u5212\u4e5f\u662fNP\u95ee\u9898\uff1a\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\uff0c\u5982\u679c\u8981\u8bbf\u95ee\u548c\u4fa6\u5bdf\u5730\u56fe\u4e0a\u591a\u4e2a\u6218\u7565\u8981\u70b9\uff0c\u5982\u4f55\u624d\u80fd\u8d70\u6700\u5c11\u7684\u8def\uff0c\u6d88\u8017\u6700\u5c11\u7684\u65f6\u95f4\uff0c\u8fbe\u5230\u6218\u7565\u76ee\u6807\u3002\u6709\u65f6\u5019\u8fd9\u4e9b\u6218\u7565\u8981\u70b9\u8fd8\u662f\u5176\u4ed6\u73a9\u5bb6\u5f71\u54cd\u4e0b\u751f\u6210\u7684\u3002"),(0,n.kt)("h3",{id:"7421-casualcreator"},"7.4.21 casualcreator"),(0,n.kt)("h3",{id:"7422-\u5fae\u670d\u52a1\u5316"},"7.4.22 \u5fae\u670d\u52a1\u5316"),(0,n.kt)("p",null,'When it comes to cloud technology in gaming, most people associate it with game streaming. However, Scalar is based on cloud computing, which Romell as explained, is quite different from the term we\'ve heard about so often. "Cloud streaming is a distribution model; it improves people\u2019s access to games, but it doesn\u2019t change, in essence, what games are, or the quality of them. The game is still being run on a single-processing machine placed remotely and then streamed via the cloud to your screen," he said.'),(0,n.kt)("p",null,'"Cloud computing \u2013 what Ubisoft Scalar enables \u2013 means the processing power for a game isn\u2019t tied to a single machine, but a decentralized computation system. The processing is taking place in the cloud. This eliminates the limits of local hardware for players, improves the quality of games, and opens up new possibilities for game developers."'),(0,n.kt)("p",null,"\u66f4\u65b0\u4e0d\u4f1a\u505c\u670d"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5f15\u64ce\u7684\u591a\u4e2a\u7ec4\u4ef6\uff0c\u5982physics, AI\u7b49\u90fd\u8f6c\u6210\u5fae\u670d\u52a1\uff0c\u7136\u540e\u5355\u72ec\u5728\u4e91\u7aef\u8ba1\u7b97\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u4e0d\u53d7\u9650\u5236\uff0c\u4f20\u7edf\u7684\u5f15\u64ce\u628a\u6574\u4e2a\u5f15\u64ce\u5728\u4e00\u53f0\u673a\u5668\u65e0\u5f62\uff0c\u7531\u4e8e\u5171\u4eab\u6574\u4e2a\u573a\u666f\u5927\u91cf\u6570\u636e\uff0c\u56e0\u6b64\u4e0d\u597d\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"3\u670817\u65e5\u6d88\u606f\uff0c\u636e\u5916\u5a92\u62a5\u9053\uff0c\u5728\u5f53\u5730\u65f6\u95f4\u661f\u671f\u56db\u7684GDC\u6f14\u8bb2\u4e2d\uff0c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u7684\u603b\u7ecf\u7406Patrick Bach\u3001\u6280\u672f\u603b\u76d1Christian Holmqvist\u548c\u9996\u5e2d\u6280\u672f\u5b98/\u6280\u672f\u603b\u76d1Per-Olof Romell\u516c\u5e03\u4e86\u4e00\u9879\u5168\u65b0\u4e91\u8ba1\u7b97\u6280\u672f\uff0c\u8be5\u6280\u672f\u88ab\u79f0\u4e3aUbisoft Scalar\u3002\u4ed6\u4eec\u58f0\u79f0\u8be5\u6280\u672f\u5c06\u521b\u9020\u5168\u65b0\u7684\u6e38\u620f\u7c7b\u578b\u3002\u4ed6\u4eec\u8868\u793a\uff0c\u8fd9\u9879\u6280\u672f\u5c06\u4f7f\u80b2\u78a7\u80fd\u591f\u5236\u4f5c\u6bd4\u4ee5\u5f80\u66f4\u5927\uff0c\u66f4\u590d\u6742\u7684\u6e38\u620f\u4e16\u754c\uff0c\u8fd9\u4e9b\u6e38\u620f\u4e16\u754c\u53ef\u4ee5\u5b9e\u65f6\u66f4\u65b0\uff0c\u5e76\u7531\u5927\u91cf\u73a9\u5bb6\u586b\u5145\uff0c\u4ece\u800c\u521b\u9020\u65b0\u7684\u793e\u4ea4\u4f53\u9a8c\u3002\u5173\u4e8e\u4f7f\u7528\u8be5\u6280\u672f\u5f00\u53d1\u7684\u65b0\u4f5c\u3002Bach\u8868\u793a\uff1a\u201c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u6b63\u5728\u7814\u7a76\u4e0eScalar\u4e00\u8d77\u5f00\u53d1\u7684IP\uff0c\u76ee\u6807\u5f53\u7136\u662f\u5145\u5206\u5229\u7528\u8fd9\u9879\u65b0\u6280\u672f\u7684\u6240\u6709\u53ef\u80fd\u6027\uff0c\u4f46\u73b0\u5728\u8c08\u8bba\u8fd9\u4e2a\u8fd8\u4e3a\u65f6\u8fc7\u65e9\u201d\u3002"),(0,n.kt)("h3",{id:"7423-google-tilt-brush"},"7.4.23 Google Tilt Brush"),(0,n.kt)("p",null,"\u592a\u504f\u5e95\u5c42\uff0c\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u751f\u6210\u6700\u539f\u59cb\u7684Mesh\uff0c\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u63a7\u5236\u7cbe\u7ec6\u5ea6\u4e0d\u591f\uff0c\u6240\u4ee5\u7f51\u683c\u548c\u6750\u8d28\u90fd\u4e0d\u591f\u7cbe\u7ec6"),(0,n.kt)("li",{parentName:"ul"},"\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u90a3\u4e2a\u7269\u4f53\u90fd\u8981\u4ece\u65e0\u5230\u6709\u521b\u4f5c\uff0c\u6216\u8005\u57fa\u4e8e\u4e00\u4e9b\u57fa\u672c\u7684\u51e0\u4f55\u4f53\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u751f\u6210\u590d\u6742\u51e0\u4f55\uff0c\u66f4\u591a\u662f\u6982\u5ff5\u4e0a\u7684\u611f\u89c9"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u8fd9\u4e9b\u4f5c\u54c1\u5b9e\u9645\u4e0a\u5f88\u5c11\u6709\u88ab\u771f\u6b63\u4f7f\u7528\u6216\u8005\u88ab\u5f53\u4f5c\u827a\u672f\uff0c\u56e0\u4e3a\u521b\u4f5c\u5f88\u53d7\u9650")),(0,n.kt)("p",null,"\u5982\u679c\u8981\u63d0\u4f9b\u66f4\u7cbe\u7ec6\u7684\u63a7\u5236\uff0c\u5219\u9762\u4e34\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u592a\u590d\u6742\u4e0d\u597d\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52bf\u63a7\u5236\u7684\u7cbe\u5ea6\u8bef\u5dee\u6bd4\u8f83\u5927")),(0,n.kt)("p",null,"\u8fd9\u7c7b\u521b\u4f5c\u7684\u4f5c\u54c1\u901a\u5e38\u53ea\u662f\u534a\u6210\u54c1\uff0c\u53ef\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u573a\u666f\u548c\u6982\u5ff5\uff0c\u7136\u540e\u5728PC\u4e0a\u5728\u8fdb\u4e00\u6b65\u7cbe\u7ec6\u5fae\u8c03\uff0c\u4f46\u5982\u679c\u662f\u8fd9\u6837\uff0c\u5728PC\u4e0a\u6709\u66f4\u591a\u7684\u65b9\u5f0f\u751f\u6210\u8fd9\u6837\u7684\u6982\u5ff5"),(0,n.kt)("p",null,"\u5982\u679c\u76f4\u63a5\u4f7f\u7528\uff0c\u8fd9\u7c7b\u573a\u666f\u901a\u5e38\u6ca1\u6709\u592a\u5927\u7528\u5904\uff0c\u53ea\u6709\u9759\u6001\u7684\u4e1c\u897f\uff0c\u6ca1\u6cd5\u7f16\u8f91\u52a8\u753b\uff0c\u5f53\u7136\u5982\u679c\u8981\u5728XR\u8bbe\u5907\u52a0\u5165\u52a8\u753b\u7f16\u8f91\uff0c\u90a3\u53c8\u662f\u53e6\u5916\u4e00\u4e2a\u5f88\u590d\u6742\uff0c\u51e0\u4e4e\u4e0d\u592a\u53ef\u80fd\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u80fd\u76f4\u63a5\u521b\u4f5c\u539f\u59cb\u51e0\u4f55\uff0c\u56e0\u4e3a\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u6837\u51e0\u4f55\u662f\u9759\u6001\u7684\uff0c\u6ca1\u6709\u52a8\u753b"),(0,n.kt)("li",{parentName:"ul"},"\u592a\u7b80\u5355")),(0,n.kt)("p",null,"\u5b83\u53ea\u80fd\u662f\u57fa\u4e8e\u67d0\u4e9b\u6807\u51c6\u7ec4\u4ef6\u7684\u521b\u4f5c\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u901a\u5e38\u7531PC\u5236\u4f5c\uff0c\u5e26\u6709\u52a8\u753b\u548c\u4e00\u5b9a\u7684\u903b\u8f91\u5c5e\u6027\uff08\u56e0\u4e3aXR\u4e0a\u4e5f\u65e0\u6cd5\u7f16\u8f91\u903b\u8f91\uff09\uff0c\u5e76\u4e14\u5728XR\u8bbe\u5907\u4e0a\u4ea4\u4e92\u7684\u662fPCG\u7684\u65b9\u5f0f\uff0c\u8fd9\u6837\u4f7f\u5f97\u4ea4\u4e92\u9700\u8981\u7684\u5e76\u4e0d\u662f\u7cbe\u7ec6\u4f4d\u7f6e\uff0c\u800c\u4e14PCG\u7684\u53c2\u6570\uff0c\u8fd9\u6837\u53c2\u6570\u7684\u7a7a\u95f4\u548c\u8303\u56f4\u5c0f\u7684\u591a\uff0c\u540c\u65f6\u80fd\u591f\u751f\u6210\u66f4\u591a\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4e00\u4e2a\u57fa\u7840\u51e0\u4f55"),(0,n.kt)("h3",{id:"7424-github"},"7.4.24 GitHub"),(0,n.kt)("p",null,"\u591a\u4eba\u534f\u4f5c\u7684\u5178\u8303\uff0c\u5728\u534f\u4f5c\u4e2d\u4f53\u73b0\u8d21\u732e\u5ea6",(0,n.kt)("sup",{parentName:"p",id:"fnref-hello"},(0,n.kt)("a",{parentName:"sup",href:"#fn-hello",className:"footnote-ref"},"hello"))),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u53d1\u73b0\u67d0\u4e2aCreation \u5b58\u5728\u4e0d\u5408\u7406\uff0c\u63d0\u51fa\u4fee\u6539"),(0,n.kt)("h3",{id:"7425-stechfab"},"7.4.25 Stechfab"),(0,n.kt)("h3",{id:"7426-game-pigeon-games-for-imessage"},"7.4.26 Game pigeon: games for iMessage"),(0,n.kt)("img",{src:"resources/games-pen.png",alt:"games-pen"}),(0,n.kt)("h2",{id:"75-\u5e94\u7528"},"7.5 \u5e94\u7528"),(0,n.kt)("h3",{id:"751--\u5821\u5792\u4e4b\u591c"},"7.5.1 \u5821\u5792\u4e4b\u591c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite",src:l(8128).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"Game theme, starter island "),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4f1a\u968f\u7740theme\u53d8\u5316"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5821\u5792\u4e4b\u591c\u53ea\u4ece\u6a21\u677f\u521b\u5efa\uff0cRW\u5177\u6709\u80fd\u591f\u8ba9\u7528\u6237\u521b\u9020\u6a21\u677f\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u5ea6\u548c\u53ef\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a"),(0,n.kt)("p",null,"Accolade \u81ea\u52a8\u63a7\u5236XP\u7684\u83b7\u53d6\uff0c\u81ea\u52a8\u8ba1\u7b97\u5e73\u8861\uff0c\u6839\u636e\u65f6\u95f4"),(0,n.kt)("p",null,"\u8d44\u6e90\u662f\u5f15\u7528\u5185\u90e8\uff0c\u9700\u8981\u6e38\u620f\u5305\u5185\u767b\u5f55\u65f6\u4e0b\u8f7d\uff0c\u662f\u5426\u65e0\u6cd5\u7528\u6237\u81ea\u5df1\u52a8\u6001\u6dfb\u52a0"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u662f\u5b9e\u73b0\u4e86\u56fa\u5b9a\u4e00\u5957\u8d44\u6e90\u548c\u903b\u8f91\u7684\u6570\u636e\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u6bd4\u6e38\u620f\u89c4\u5219\u66f4\u590d\u6742\uff0c\u4e0d\u7ba1\u662f\u903b\u8f91\u8fd8\u662f\u573a\u666f\uff0c\u4ea4\u4e92\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u652f\u6301\u7f16\u7a0b\u6269\u5c55\u80fd\u529b"),(0,n.kt)("p",null,"\u4f8b\u5982\u5821\u5792\u4e4b\u591c\u91cc\u5927\u90e8\u5206\u8d44\u6e90\u5916\u89c2\u662f\u4e0d\u80fd\u4fee\u6539\u7684\uff0c\u4f46\u662f\u751f\u6d3b\u4e2d\u7684\u8bbe\u8ba1\u5f80\u5f80\u90fd\u8bbe\u7acb\u7167\u7247\u7f16\u8f91\uff0c\u81ea\u5b9a\u4e49\u4e00\u4e9b\u5185\u5bb9\uff0c\u56e0\u4e3a\u4ed6\u662f\u56fa\u5b9a\u7684\u7c7b\uff0c\u65e0\u6cd5\u7ec4\u5408\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u51cf\u5c11\u6216\u589e\u52a0\u529f\u80fd\u6765\u4fee\u6539\u5df2\u6709\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u7ec4\u5408\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u65b0\u7684\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u6ca1\u6709\u529e\u6cd5\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u6240\u6709\u90fd\u4f9d\u8d56\u4e8e\u5b98\u65b9\u6784\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u589e\u52a0\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u90fd\u8981\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u5c3d\u7ba1\u4ed6\u4eec\u6709\u590d\u7528\uff0c\u4ee3\u7801\u4f1a\u91cd\u590d\uff0c\u7528\u6237\u9700\u8981\u7406\u89e3\u548c\u8bb0\u4f4f\u7684\u7c7b\u578b\u975e\u5e38\u591a")),(0,n.kt)("p",null,"\u6240\u6709\u4e1c\u897f\u6216\u8005\u5927\u90e8\u5206\u4e1c\u897f\u90fd\u88ab\u89c6\u89c9\u5316\uff0c\u7136\u540e\u6570\u636e\u9a71\u52a8\uff0c\u4fee\u6539\u8bbe\u5b9a\u597d\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u7b80\u5316\u4e86\u6811\u5f62\u5c42\u7ea7\u7ed3\u6784\uff0c\u6240\u6709\u5185\u5bb9\u90fd\u662f\u6241\u5e73"),(0,n.kt)("h4",{id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"},"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u6709122\u79cddevices"),(0,n.kt)("h4",{id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1"},"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1"),(0,n.kt)("p",null,"\u97f3\u9891\u7684\u91cd\u8981\u6027"),(0,n.kt)("h4",{id:"7513-\u79c1\u5bc6\u793e\u4ea4"},"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"I, I, couldn't be more pleased with the situation in Fortnite. Fortnite is the most positive social experience I've ever interacted with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And, you know, we really are innately trained to, uh, you know, in ordinary circumstances, respect people when we're interacting with them personally far, far more than when we're interacting with them with text. And so I think this is an area where the matter verse will have a major advantage overall. So O other social media, it's that inherently by being focused on small groups and actual friends, engaging in a much larger outside world and in carrying all of the emotional content of voice and perhaps even facial capture in the future, uh, it'll be a much higher empathy platform, only much less subject to abuse where, you know, one nasty action affects millions of people, uh, because of curation.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"So, so I think we have a lot of positive things to be excited about there. Um, but the key point, the key challenge for this new medium is that to succeed anything that causes itself, the metaverse must actually be better than all other experiences competing for people's digital time. And that's a massive challenge. This means the metaverse needs to be better than an hour on the metaverse needs to be better than an hour on Facebook or Instagram or an hour on YouTube, uh, or an hour on Netflix.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, it'll be actual interactive objects, actual experiences, and actual engaging things and not just ads forced upon you. And, you know, I think we can completely escape an advertising based business model if we take this approach that the only way you ever get to see a commercial thing is if you decide to see it yourself, because it's really cool. And I think we'll see a whole new level of competition among brands to surface really awesome 3d content. Um, and you know, I think you can look to Fortnite and some of these other games is pioneering. A lot of these really exciting engaging non-advertising based, uh, mechanisms for exposing stuff.")),(0,n.kt)("h4",{id:"7514-verse-language"},"7.5.1.4 Verse Language"),(0,n.kt)("p",null,"Now, the next question is about programming model, because if we want to have this huge shared experience with many different types of games, other entertainment experiences, or, you know, any sort of experience at all, what you're talking about is a huge amount of user generated content in the form of 3d assets and also a huge amount of user written code, um, uh, per perhaps an unprecedented amount of user written code. And, you know, there's already some evidence of models like this working."),(0,n.kt)("p",null,"Um, I think the web with Java script is sort of a microcosm of this. Now the web is a much simpler programming model than the metaverse will have to be because on a website, all of the code that's running in Java script on that site is nominally under the control of the website operator. You can decide exactly what code runs and you don't ever have to deal with random user code being injected that might interact with you."),(0,n.kt)("p",null,"Um, uh, so the web BES, a closed world programming model, whereas the metaverse will need to be an open world programming model because the goal, it can't just be another app store, right?"),(0,n.kt)("p",null,"You can't have a thousand different experiences and you can be in one at a time. And when you're in that one experience, it dictates everything, right? The, the metaverse has gotta be about interoperability of user creative objects of all different types, right? Because, uh, besides having some core game experiences in the sort of place you're also going to have, you know, the equivalent of Facebook pages, uh, for every object that, that exists in the physical world, you know, uh, like Ford creates a new car, they're going to want to unveil the car, um, as a user drivable object, right?"),(0,n.kt)("p",null,"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"The Facebook page, you can have text and video, but in the virtual world, you can actually get in the car, you can go around it, you can look at it from all different angles. You can open the doors, you can drive it, you can see how it handles. Um, and you know, you can have a, a huge set of interactions that are much more interesting and organic as it's not just a, an advertisement, uh, for a product, but also something that you can experience and have fun with. And I think we need to look at, uh, all of the crossovers that have occurred, um, in recent years between games and, um, and other brands as kind of an indicator of where the metaverse will go.")),(0,n.kt)("h3",{id:"752-roblox"},"7.5.2 ROBLOX"),(0,n.kt)("p",null,"Roblox\u793e\u533a\u592a\u5c01\u95ed\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5177\u5907\u5f00\u653e\u80fd\u529b\uff0c\u6ca1\u6709\u5e73\u53f0\u5f00\u653e\u7684\u6a21\u5f0f\uff0c\u522b\u7684\u5e94\u7528\u65e0\u6cd5\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u4e4b\u95f4\u5f88\u96be\u5171\u4eab\uff0c\u6ca1\u6709\u7ec4\u4ef6\u751f\u6001\uff0c\u6574\u4e2a\u5f00\u53d1\u6a21\u5f0f\u8fd8\u662f\u4f20\u7edf\u5c01\u95ed\u7684app\u6a21\u5f0f\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u5355\u72ec\u9488\u5bf9\u81ea\u5df1\u7684app\u72ec\u7acb\u5f00\u53d1\uff0c\u5171\u4eab\u590d\u7528\u80fd\u529b\u4e0d\u591f\uff0c\u53ea\u662f\u6784\u5efa\u4e86\u4e00\u5957\u81ea\u5206\u53d1\u673a\u5236")),(0,n.kt)("p",null,"\u76f8\u540c\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8d44\u6e90\u90fd\u662f\u4e91\u7aef\u7684\uff0c\u8fd9\u4f7f\u5f97\u591a\u4eba\u534f\u4f5c\u66f4\u7b80\u5355\uff0c\u4e0d\u7ba1\u662f\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u5bf9\u4e8e\u7528\u6237\uff0c\u90fd\u6ca1\u6709\u672c\u5730\u8d44\u6e90\u6570\u636e\uff0c\u5168\u662f\u4e91\u7aef\u7684\uff0c\u8d44\u6e90\u4e0a\u4f20\u540eRoblox \u6709\u4e2a\u5185\u5bb9\u5ba1\u6838\u6d41\u7a0b\uff0c\u5927\u6982\u51e0\u5206\u949f"),(0,n.kt)("li",{parentName:"ul"},"Roblox packages, \u53ef\u590d\u7528\u7684\u6e38\u620f\u8d44\u6e90\uff0c\u6e38\u620f\u53ef\u4ee5\u5b9e\u65f6\u540c\u6b65\u5230\u6700\u65b0\u7248\u672c\uff0cRoblox \u7684\u8d44\u6e90\u5206\u4eab\u53ea\u5728\u6307\u5b9a\u597d\u53cb\u548c\u7ec4\u4e4b\u95f4\uff0c\u5207\u7248\u672c\u53f7\u76f8\u5bf9\u7b80\u5355\uff0c\u6bcf\u6b21\u63d0\u4ea4\u81ea\u52a8\u751f\u6210\u4e00\u4e2aV1, V2, V3\u2026\u4e4b\u7c7b\u7684\u7248\u672c\uff0c\u4ec5\u80fd\u6839\u636e\u65f6\u95f4\u5224\u522b\uff0c\u529f\u80fd\u5f88\u6709\u9650\uff0c\u4e0d\u5177\u5907\u5927\u89c4\u6a21\u534f\u540c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff1a\u7528\u6237\u6709group\u7684\u6982\u5ff5\uff1aMy packages\u548cGroup packages \uff0c\u6709Collaborators\u7684\u6982\u5ff5\uff0c\u4ed6\u4eec\u53ef\u4ee5\u7f16\u8f91\u6e38\u620f\uff0c\u5176\u4ed6\u7528\u6237\u7f16\u8f91\u65f6\uff0c\u9009\u4e2d\u4e00\u4e2a\u7269\u4f53\u4f1a\u5e26\u4e0d\u540c\u7684\u989c\u8272\uff0c\u5bf9\u4e8e\u811a\u672c\uff0c\u5f53\u5176\u4ed6\u4eba\u5728\u7f16\u8f91\u65f6\uff0c\u4f1a\u6709\u989c\u8272\u63d0\u793a\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u4ee5\u7f16\u8f91\uff0c\u7f16\u8f91\u5b8c\u4ee5\u540e\u4f1a\u6709\u8349\u7a3f\u5b58\u50a8\uff0c\u63d0\u4ea4\u4e4b\u540e\u53ef\u4ee5\u8fdb\u884c\u5408\u5e76\uff0c\u53ef\u4ee5\u4e0e\u670d\u52a1\u5668\u7248\u672c\u8fdb\u884c\u6bd4\u8f83\uff0c\u89e3\u51b3\u51b2\u7a81\u4e4b\u540e\u518d\u63d0\u4ea4\uff0c\u4e5f\u53ef\u4ee5\u56de\u6eda\uff0c\u7c7b\u4f3c\u7248\u672c\u7684\u6982\u5ff5\u4e86"),(0,n.kt)("li",{parentName:"ul"},"Data Store\u7528\u4e8e\u5b58\u50a8\u9700\u8981\u6301\u4e45\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u53ea\u80fd\u5728Script\u800c\u975eLocal Script\u4e2d\u8c03\u7528\uff0c\u6309\u5b57\u5178\u7684\u65b9\u5f0f\u5b58\u50a8\uff0c\u6709\u7248\u672c\u53f7\uff0c\u53ef\u4ee5\u7528\u4e8e\u4e00\u4e9b\u95ee\u9898\u5b9a\u4f4d\u548c\u652f\u6301\uff0c\u65e7\u7248\u672c\u7684\u5185\u5bb9\u4f1a\u572830\u5929\u540e\u88ab\u5220\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u5f15\u64ceplug-in\uff0c\u7528\u4e8e\u589e\u5f3a\u5f15\u64ce\uff0cmarketplace \uff0c\u8ddf\u5176\u4ed6\u5f15\u64ce\u5dee\u4e0d\u591a"),(0,n.kt)("li",{parentName:"ul"},"Client-service \u6a21\u5f0f\uff0c\u6240\u6709\u4e4b\u95f4\u4f20\u9012\u7684\u53c2\u6570\u90fd\u662f\u53ef\u4ee5Replicated\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c\u5426\u5219\u4f20\u9012\u7ed3\u679c\u4e3a\u7a7a\uff0c\u4f8b\u5982Part\u5c31\u662f\u4e0d\u53ef\u4ee5\u5728Server\u548cClient \u4e4b\u95f4\u8fdb\u884c\u4f20\u9012\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u975e\u76f4\u63a5\u64cd\u4f5c\u7684\u7269\u4f53\u90fd\u662f\u7269\u7406\u6a21\u62df\u7684\uff0c\u7269\u7406\u6a21\u62df\u53ef\u4ee5\u662fclient\u6216\u8005server \u8ba1\u7b97\uff0c\u4e00\u822c\u9760\u8fd1\u7528\u6237\u7684\u5730\u65b9\u4f1a\u9996\u5148\u5728\u8be5\u7528\u6237\u7684client device\u8ba1\u7b97\uff0c\u5426\u5219\u5728server\u7aef\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u5728\u7b80\u53163D\u5185\u5bb9\u7684\u5c42\u9762\u505a\u7684\u5f88\u597d\uff0c\u8fd9\u6837\u907f\u514d\u7528\u6237\u5411\u7740\u6700\u9ad8\u8d28\u91cf\u7684\u5185\u5bb9\u521b\u4f5c\uff0c\u6bd4\u5982\u7528\u65b9\u5757\u5c31\u80fd\u63cf\u8ff0\u6811\uff0c\u4f7f\u5f97\u6e32\u67d3\u5728\u79fb\u52a8\u7aef\u538b\u529b\u4e5f\u5c11\u4e86\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9690\u79c1\u4fdd\u62a4\uff0c\u5185\u5bb9\u7248\u6743")),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u7f16\u7a0b\u6a21\u5f0f\uff0c\u57fa\u672c\u4e0a\u8fd8\u662fUnity\u4f20\u7edf\u7684\u6a21\u5f0f\uff0c\u4e3b\u8981\u4e0d\u540c\u5728\u4e8e\u5929\u751f\u8054\u7f51"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u811a\u672c\u7684\u6302\u8f7d\u8ddf\u573a\u666f\u5c42\u7ea7\u6216\u8005\u5177\u4f53\u7269\u4f53\u6709\u5173\uff0c\u8fd8\u662f\u50cfUnity\u539f\u6765\u7684\u65b9\u5f0f\u4e00\u6837\u9488\u5bf9game object \u7f16\u5199\u811a\u672c\uff0c\u811a\u672c\u4e2d\u901a\u8fc7script.parent\u5f15\u7528\u6240\u5c5e\u5bf9\u8c61\uff0c\u8fd9\u5929\u751f\u5c31\u4f7f\u5f97\u811a\u672c\u4e0e\u7279\u5b9a\u573a\u666f\u7ed3\u6784\u6216\u7269\u4f53\u8026\u5408\uff0c\u4e0d\u5229\u4e8e\u590d\u7528\uff0c\u53ef\u590d\u7528\u7684\u811a\u672c\u5e94\u8be5\u4ec5\u5173\u6ce8\u6570\u636e\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u76843D\u7269\u4f53\uff0c\u8fd9\u79cd\u6570\u636e\u662f\u903b\u8f91\u6570\u636e\uff0c\u4ed6\u5c31\u4f7f\u5f97\u903b\u8f91\u548c\u8868\u73b0\u5206\u79bb\u51fa\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u6bd4\u5982\u5bf9\u4e8e\u4e00\u4e2aUI\u6309\u94ae\u7684\u70b9\u51fb\u4e8b\u4ef6\uff0c\u8fd8\u9700\u8981\u5199script.Parent.MouseButton1Click:Connect(function() end())"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u5c31\u7b49\u88c5\u7684\u4e3b\u8981\u662f\u7ed3\u6784\uff0c\u6709\u70b9\u7c7b\u4f3cUE blueprint \uff0c\u6216\u8005\u8bf4\u5b9a\u4e49\u4e86\u4e00\u4e9b\u89c4\u8303\uff0c\u4e00\u4e9b\u7ed3\u6784\uff0c\u8fd9\u4e9b\u89c4\u8303\u5927\u591a\u6570\u9488\u5bf9client-server\u67b6\u6784\u7684\u4e00\u4e9b\u8c03\u6574\uff0c\u6ca1\u6709\u50cfHoudini \u4e00\u6837\u6709\u4e9b\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"PNC/Weapons Kit\uff0c\u6709\u4e00\u5957\u56fa\u5b9a\u6a21\u7248\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8eUE\u4e2d\u5185\u7f6e\u7684\u5f88\u591a\u7cfb\u7edf\uff0c\u5e73\u53f0\u63d0\u4f9b\u4e86\u8fd9\u4e9b\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7cfb\u7edf\u7684\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5f80\u5f80\u4fee\u6539\u7684\u662f\uff1a\u589e\u52a0\u6216\u79fb\u9664\u67d0\u4e9b\u7ec4\u4ef6\uff1b\u4fee\u6539\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\uff1b\u6216\u8005\u57fa\u4e8e\u67b6\u5b50\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u4fee\u6539\u3002\u5176\u4e2d\u5982\u679c\u662f\u4fee\u6539\u7684\u662f\u4e00\u90e8\u5206\u51fd\u6570\u529f\u80fd\uff0cUE\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u5b9a\u4f4d\u65b9\u5f0f\uff0cRoblox\u5219\u66f4\u5bb9\u6613\u7834\u574f\u6574\u4e2a\u4f53\u7ed3\u6784\uff0c\u4f46Roblox\u63d0\u4f9b\u4e86\u57fa\u4e8e\u6a21\u7248\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u6027\u66f4\u5927\uff0c\u4f46\u662f\u96be\u5ea6\u4e5f\u66f4\u5927\uff0c\u4f8b\u5982\u9700\u8981\u5f15\u7528\u3001\u8bfb\u53d6\u548c\u7ba1\u7406\u53d8\u91cf\uff0c\u5bfb\u627e\u5165\u53e3\u51fd\u6570\uff0c\u5904\u7406\u8f93\u5165\u8f93\u51fa\u7b49"),(0,n.kt)("li",{parentName:"ul"},"Configuration\uff0c\u5bf9\u4e8eNPC kit\u8fd9\u6837\u6bd4\u8f83\u590d\u6742\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u6709\u8bb8\u591a\u516c\u5171\u5c5e\u6027\u88ab\u5f88\u591a\u811a\u672c\u8bbf\u95ee\uff0cRoblox \u5efa\u8bae\u5c06\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u5b58\u50a8\u5728\u4e00\u4e2avalue object\u4e2d\uff0c\u7528\u4e00\u4e2aConfiguration container\u5c01\u88c5\uff0c\u8fd9\u662f\u5178\u578b\u4f20\u7edf\u7684OOP\u601d\u60f3\uff0c\u5176\u4e2d\u5e26\u6765\u7684\u95ee\u9898\u6709\u5f88\u591a\uff0c\u6bd4\u5982\u591a\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\uff0c\u6bd4\u5982\u5982\u679c\u67d0\u4e9b\u53d8\u91cf\u88ab\u5220\u9664\u5176\u4e2d\u4e00\u4e9b\u811a\u672c\u53ef\u80fd\u4e0d\u5de5\u4f5c\uff0c\u4e5f\u53ef\u80fd\u79fb\u9664\u4e86\u4e00\u4e9b\u811a\u672c\u800c\u67d0\u4e9b\u53d8\u91cf\u538b\u6839\u5c31\u4e0d\u88ab\u4f7f\u7528\uff0c\u6838\u5fc3\u95ee\u9898\u5c31\u662f\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u8131\u79bb\u4e86\u5173\u7cfb\uff0c\u4f7f\u5f97\u9700\u8981\u989d\u5916\u5c0f\u5fc3\u8fd9\u79cd\u5173\u7cfb\u7684\u7ef4\u62a4"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u4e2d\u7684\u590d\u7528\u95ee\u9898\u4e00\u65b9\u9762\u901a\u8fc7ModuleScript\uff0c\u77e5\u8bc6\u4ee3\u7801\u7ea7\u7684\u590d\u7528"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u7684\u591a\u4eba\u5728\u7ebf\u7528\u6237\u6570\u8fd8\u662f\u6709\u9650\u768415\u4e2a\u4eba\uff0c\u6240\u4ee5\u8fd8\u662f\u91c7\u7528\u6bd4\u8f83\u4f20\u7edf\u7684\u591a\u4eba\u540c\u6b65\u67b6\u6784\uff0c\u6ca1\u6709\u5145\u5206\u53d1\u6325\u73b0\u4ee3\u4e91\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5fae\u670d\u52a1\u67b6\u6784\uff0c\u5141\u8bb8\u4e0d\u9650\u5236\u7684\u4eba\u6570")),(0,n.kt)("p",null,"Roblox \u7684\u6838\u5fc3\u4f18\u52bf\u5728\u4e8e\u4e91\u539f\u751f\uff0c\u4ed6\u53ef\u80fd\u4f1a\u81ea\u52a8\u5904\u7406\u5f88\u591a\u540c\u6b65\u95ee\u9898\uff0c\u4f8b\u5982\u5728Script\u4e2d\u8c03\u7528Instance.new\u5c31\u4f1a\u5728workspace\u4e2d\u521b\u5efa\u4e00\u4e2aPart\u5e76\u81ea\u52a8\u540c\u6b65\u5230\u5728\u7ebf\u573a\u666f\uff0c\u5927\u90e8\u5206\u7684\u811a\u672c\u90fd\u662f\u901a\u8fc7Script\u7f16\u5199\u7684\uff0c\u91cc\u9762\u7279\u522b\u662f\u5bf9Workspace\u4e2dpart\u7684\u4fee\u6539\u4f1a\u81ea\u52a8\u540c\u6b65\u5230\u7aef\u4fa7"),(0,n.kt)("p",null,"\u8ddfRoblox\u7684\u6700\u5927\u533a\u522b\u5728\u4e8e\uff0c\u6211\u4eec\u9700\u8981\u9762\u5411C\u7aef\u7684\u7528\u6237\uff0c\u7528\u6237\u53ef\u80fd\u662f\u4e0d\u4f9d\u8d56\u4e8ePC\u7684\uff0c\u800cRoblox\u7684\u6574\u4e2a\u751f\u6001\u8fd8\u662f\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u6a21\u5f0f\uff0c\u5176\u521b\u65b0\u5728\u4e8e\u4e91\u539f\u751f\u548c\u5206\u53d1\u6a21\u5f0f\uff0c\u4e3a\u4e86\u5b9e\u73b0\u5728C\u7aef\u521b\u4f5c\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u5373\u662f\u521b\u4f5c\u6001\uff0c\u5b83\u6bd4\u8f83\u5c11\u6709\u7f16\u8f91\u6001\u7684\u6982\u5ff5\uff0c\u50cfMinecraft \u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5728\u903b\u8f91\u5c42\u9762\u505a\u66f4\u591a\u7684\u67b6\u6784\u6765\u652f\u6491C\u7aef\u521b\u4f5c\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\uff1aRoblox + Houdini \uff0c\u800c\u7531\u6b64\u884d\u751f\u51fa\u6765\u7684\u6280\u672f\u548c\u67b6\u6784\u8981\u6bd4Roblox \u590d\u6742\u5f97\u591a\uff0c\u4f46\u5176\u7ed3\u679c\u662f\u4f1a\u6bd4Roblox \u5728\u521b\u4f5c\u5c42\u9762\u66f4\u5927\u91cf\u7684\u666e\u53ca")),(0,n.kt)("h3",{id:"753-niantic"},"7.5.3 NIANTIC"),(0,n.kt)("h3",{id:"754-snapchat"},"7.5.4 SNAPCHAT"),(0,n.kt)("h3",{id:"755-meta"},"7.5.5 Meta"),(0,n.kt)("h3",{id:"756-omniverse"},"7.5.6 Omniverse"),(0,n.kt)("h3",{id:"757-minecraft"},"7.5.7 Minecraft"),(0,n.kt)("p",null,"\u5f3a\u9879\u5728\u4e8e\u57fa\u4e8e\u50cf\u7d20\u5757\uff0c\u53ef\u4ee5\u81ea\u7531\u7ec4\u5408\uff0c\u81ea\u7531\u5ea6\u5927\uff0c\u53ef\u4ee5\u6784\u5efa\u4efb\u610f\u7ed3\u6784\u7684\u573a\u666f\u6216\u7269\u4f53\uff0c\u4e0d\u4f9d\u8d56\u4e8eDCC\u8f93\u51fa\uff0c\u56e0\u6b64\u771f\u6b63\u7684\u4f4e\u95e8\u69db"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4f7f\u7528\u5f3a\u5927\u7684DCC\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u50cf\u7d20\u5757\u677e\u6563\u7ec4\u5408\uff0c\u901a\u5e38\u65e0\u6cd5\u5bf9\u7269\u4f53\u7ea7\u8bbe\u7f6e\u73a9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e00\u5757\u5355\u72ec\u6784\u5efa\uff0c\u624b\u5de5\u91cf\u6781\u5927\uff0c\u5f53\u7136\u6709\u4e9b\u5c1d\u8bd5\u7528\u4e00\u4e9bDCC\u8f93\u51fa\u7684\u573a\u666f\u4f53\u7d20\u5316\u540e\u4f5c\u4e3a\u8f93\u5165")),(0,n.kt)("p",null,"Minecraft pc \u7f16\u8f91\u5668"),(0,n.kt)("p",null,"Minecraft MOD"),(0,n.kt)("p",null,"Minecraft \u7684\u6240\u6709\u5185\u5bb9\u90fd\u5728\u672c\u5730\uff0c\u8fdb\u5ea6\u9700\u8981\u81ea\u5df1\u5907\u4efd\uff0c\u5206\u4eab\u7684\u5185\u5bb9\u9700\u8981\u81ea\u5df1\u5b89\u88c5\u5728\u672c\u5730\u7279\u5b9a\u7684\u6587\u4ef6\u5939\uff0c\u7f51\u6613\u7684\u7248\u672c\u4f1a\u505a\u4e00\u4e9b\u8054\u7f51\u8d2d\u4e70"),(0,n.kt)("p",null,"\u4f7f\u7528\u56fa\u5b9a\u7684\u6587\u4ef6\u5939\u7ed3\u6784\uff0c\u5f88\u591a\u5185\u5bb9\u6df7\u5230\u4e00\u8d77\uff0c\u7ba1\u7406\u590d\u6742\u5ea6\u9ad8\uff0c\u5bb9\u6613\u9020\u6210\u5197\u4f59\u8d44\u6e90\uff0c\u4e0d\u65b9\u4fbf\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff0c\u4f8b\u5982\u6bcf\u4e2a\u72ec\u7acb\u7684json\u90fd\u5f15\u5165ID\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5220\u9664\u5bf9\u5e94\u7684\u8d44\u6e90\u8fd8\u9700\u8981\u89e3\u6790json\u6587\u4ef6\uff0c\u663e\u7136\u4e0d\u53ef\u80fd\uff0c\u8fd9\u4f7f\u5f97\u5907\u4efd\u4e5f\u4f1a\u62f7\u8d1d\u5197\u4f59\u6587\u4ef6\uff0c\u5982\u679c\u8d2d\u4e70\u4e86\u4e00\u4e2aPack\uff0c\u5219\u5728\u65b0\u7684\u521b\u4f5c\u8005\u5fc5\u987b\u5168\u90e8\u5bfc\u5165\u8be5Pack\uff0c\u8fd9\u662f\u4f20\u7edfUE\u548cUnity\u90a3\u79cd\u4f20\u7edf\u7684\u672c\u5730\u6587\u4ef6\u8d44\u6e90\u7ba1\u7406\u65b9\u5f0f\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u6309\u6587\u4ef6\u5939\u8fdb\u884c\u8d44\u6e90\u7ba1\u7406\uff0c\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u533a\u5206\u6587\u4ef6\u5939\u5185\u8d44\u6e90\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bb9\u6613\u5197\u4f59"),(0,n.kt)("li",{parentName:"ol"},"USD\u662f\u6309\u7167\u8d44\u6e90\u8fdb\u884c\u7ba1\u7406")),(0,n.kt)("p",null,"\u800cRealityWorld\u4f7f\u7528\u66f4\u52a0\u5148\u8fdb\u7684USD\u7ed3\u6784"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Molang: \u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u8ba9\u5f00\u53d1\u8005\u5199\u811a\u672c\uff1f")),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u539f\u56e0\u53ef\u80fd\u662f\u4e0d\u65b9\u4fbf\u7ba1\u7406\uff0c\u56e0\u4e3aMinecraft\u5b8c\u5168\u9650\u5b9a\u4e8e\u6570\u636e\u9a71\u52a8\uff0c\u5f00\u53d1\u8005\u80fd\u4fee\u6539\u7684\u662f\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u7ec4\u5408\u5f62\u6210\u65b0\u7684Entity")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u8005\u901a\u8fc7json\u7684\u5b9a\u4e49\u5b9e\u73b0\uff0c\u800c\u524d\u8005\u662f\u76f4\u63a5\u5728json\u4e2d\u7684\u5bf9\u8c61\u8fdb\u884c\u8d4b\u503c\u64cd\u4f5c\uff0c\u90a3\u4e48\u5982\u679c\u8981\u4f7f\u7528\u5355\u72ec\u7684\u811a\u672c\u6587\u4ef6\uff0c\u5219\u4f1a\u6d89\u53ca\u7684\u6570\u91cf\u975e\u5e38\u5927\uff0c\u8fd9\u4e9b\u811a\u672c\u6587\u4ef6\u600e\u4e48\u5173\u8054\uff0c\u5982\u679c\u9700\u8981\u624b\u52a8\u5173\u8054\u5c31\u5f15\u5165\u4e86\u590d\u6742\u6027\uff0c\u4f8b\u5982\u5728Roblox\u4e2d\u9700\u8981\u5c06\u811a\u672c\u624b\u52a8\u5173\u8054\u5230\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u800c\u5b9e\u4f53\u4e4b\u95f4\u5f80\u5f80\u8fd8\u6d89\u53ca\u5c42\u6b21\u8def\u5f84\u7ed3\u6784\uff0c\u5c31\u4f1a\u8fdb\u4e00\u6b65\u590d\u6742\u5316\uff0cMinecraft\u5219\u76f4\u63a5\u5c06\u811a\u672c\u5199\u5728\u5c5e\u6027\u8d4b\u503c\u7684\u5730\u65b9\uff0c\u7b80\u5316\u4e86\u5f88\u591a\u4e1c\u897f"),(0,n.kt)("p",null,"\u4f46\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u5f00\u53d1\u8005\u65e0\u6cd5\u81ea\u5b9a\u4e49\u884c\u4e3a\u65b9\u6cd5\uff0c\u4ed6\u53ea\u80fd\u662f\u5bf9\u56fa\u5b9a\u7684\u7ed3\u6784\u7684\u503c\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u65e0\u6cd5\u5b9a\u4e49\u65b0\u7684\u903b\u8f91"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8bbf\u95ee\u7cfb\u7edf\u5185\u5b58\u4e2d\u7684\u6e38\u620f\u72b6\u6001\u4e0e\u6570\u503c\uff0cMolang\u63d0\u4f9b\u4e86\u5927\u91cf\u7684Query function\u8fdb\u884c\u67e5\u8be2"),(0,n.kt)("p",null,"\u56e0\u6b64Molang\u662f\u4e00\u79cd\u57fa\u4e8e\u8868\u8fbe\u5f0f\u7684\u8bed\u8a00\uff1aexpression-based language "),(0,n.kt)("h3",{id:"758-wilder-world"},"7.5.8 Wilder World"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Wilder World")),(0,n.kt)("p",null,"Liquidity"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"One of the biggest problems in the NFT space is that the best content is reserved for the uber-wealthy. We are flipping this paradigm on its head by enabling fully fractionalized NFT ownership, which will not only drive more capital into the space but will make it available to a much wider audience.")),(0,n.kt)("p",null,"No Artist Fees"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Other platforms charge artists between 15% and 30%. We consider this is an antiquated way of thinking, older world not Wilder World. Instead, we have designed our native token to create value for all participants while redistributing wealth directly back into our Wilder community. There\u2019s no middleman or platform taking a cut of the artist\u2019s hard earned reward.")),(0,n.kt)("p",null,"\u4f20\u7edf\u6ca1\u6709\u73b0\u5b9e\u4ef7\u503c\u652f\u6491\u7684NFT\uff0c\u5927\u90e8\u5206\u7684\u4ef7\u503c\u6765\u6e90\u4e8e\uff0c\u6709\u70b9\u50cf\u4f20\u9500\u4e00\u6837\uff0c\u8f6c\u5356\uff0c\u65e9\u671f\u7684\u73a9\u5bb6\u8f6c\u5356\u7ed9\u540e\u7eed\u7684\u73a9\u5bb6\uff0c\u8d5a\u53d6\u5dee\u4ef7\uff0c\u800c\u540e\u7eed\u7684\u73a9\u5bb6\u8981\u60f3\u8d5a\u94b1\uff0c\u5fc5\u987b\u4e0d\u65ad\u6709\u4eba\u63a5\u9f99\uff0c\u7136\u540e\u4e00\u65e6\u5230\u4e86\u67d0\u4e9b\u4e0d\u53ef\u601d\u8bae\u7684\u4ef7\u503c\u5c31\u4e0d\u4f1a\u6709\u4eba\u63a5\u9f99"),(0,n.kt)("h2",{id:"76-\u533a\u5757\u94fe"},"7.6 \u533a\u5757\u94fe"),(0,n.kt)("h3",{id:"761-\u95ee\u9898"},"7.6.1 \u95ee\u9898"),(0,n.kt)("h4",{id:"7611-\u6210\u672c\u95ee\u9898"},"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u865a\u62df\u8d27\u5e01\u6709\u4e00\u90e8\u5206\u662f\u7531\u77ff\u673a\u4ea7\u751f\u7684\uff0c\u6536\u76ca\u5f52\u77ff\u4e3b\uff0c\u8fd9\u6837\u4ed6\u4eec\u624d\u6709\u5de8\u5927\u52a8\u529b\u548c\u7ecf\u6d4e\u5229\u76ca\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u4e5f\u624d\u80fd\u4fdd\u8bc1\u6574\u4e2a\u5206\u5e03\u5f0f\u8282\u70b9\u53ef\u4ee5\u5b89\u5168\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5149\u662f\u80fd\u6e90\u6d6a\u8d39"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u6210\u672c\u6d6a\u8d39")),(0,n.kt)("p",null,"\u76f8\u5f53\u5927\u4e00\u90e8\u5206\u865a\u62df\u8d27\u5e01\u90fd\u5206\u914d\u7ed9\u4e86\u77ff\u4e3b\uff0c\u6765\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8282\u70b9\u7684\u8fd0\u884c\uff0c\u5fc5\u987b\u7ed9\u4ed6\u4eec\u8db3\u591f\u7684\u5229\u76ca\u3002\u6240\u4ee5\u8fc7\u53bb\u7531\u4e2d\u4ecb\u6536\u53d6\u7684\u90a3\u4e9b\u8d39\u7528\u5176\u5b9e\u73b0\u5728\u8f6c\u79fb\u5230\u77ff\u4e3b\u624b\u4e0a\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u79cd\u8d39\u7528\u770b\u8d77\u6765\u4e0d\u662f\u7531\u7528\u6237 \u4ed8\u8d39\u7684\uff0c\u800c\u662f\u7ed9\u77ff\u4e3b\u7684\u4e00\u79cd\u201c\u4ee3\u5e01\u201d\uff0c\u4ed6\u53ef\u80fd\u73b0\u9636\u6bb5\u5e76\u4e0d\u503c\u94b1\uff0c\u800c\u662f\u5c06\u6765\u968f\u7740\u5e73\u53f0\u7684\u589e\u52a0\u800c\u5bfc\u81f4\u8fd9\u79cd\u4ee3\u5e01\u4f1a\u5347\u503c\u3002\u8fd9\u662f\u4e00\u79cd\u5bf9\u5c06\u6765\u6295\u673a\u7684\u884c\u4e3a\uff0c\u5982\u679c\u5e73\u53f0\u6ca1\u6709\u5efa\u7acb\u8d77\u6765\uff0c\u77ff\u4e3b\u6ca1\u6709\u4efb\u4f55\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u90a3\u5373\u4f7f\u5c06\u6765\u5e73\u53f0\u8d77\u6765\u4e86\uff0c\u8fd9\u4e9b\u77ff\u4e3b\u624b\u4e0a\u7684\u4ee3\u5e01\u7684\u5b9e\u9645\u5151\u73b0\u4f1a\u6709\u672a\u6765\u53c2\u5165\u8fdb\u6765\u7684\u4eba\u4e70\u5355\uff0c\u4e5f\u5c31\u662f\u672a\u6765\u90a3\u4e9b\u865a\u62df\u8d27\u5e01\u7684\u8d2d\u4e70\u8005\u6240\u652f\u4ed8\u7684\u8d39\u7528\u4e2d\uff0c\u5b9e\u9645\u6709\u90e8\u5206\u662f \u652f\u4ed8\u7ed9\u4e86\u65e9\u671f\u7684\u77ff\u4e3b\u6216\u8005\u65e9\u671f\u6d41\u901a\u7684\u4eba\u3002"),(0,n.kt)("p",null,"\u5982\u6b64\u4e0b\u53bb\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u5c06\u4f1a\u8d8a\u6765\u8d8a\u9ad8\uff0c\u800c\u540e\u52a0\u5165\u7684\u4eba\u9700\u8981\u652f\u4ed8\u66f4\u591a\u7684\u652f\u51fa\u7ed9\u524d\u9762\u7684\u6240\u6709\u4eba\u3002"),(0,n.kt)("p",null,"\u800c\u5982\u679c\u8fd9\u4e2a\u5e73\u53f0\u672c\u8eab\u5e76\u6ca1\u6709\u521b\u9020\u4ef7\u503c\u7684\u8bdd\uff0c\u90a3\u4e48\u8fd9\u4e2a\u6c14\u6ce1\u65e9\u665a\u4f1a\u7834\u706d\u3002\u9664\u975e\u8fd9\u4e2a\u5e73\u53f0\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u521b\u9020\u4e86\u65b0\u7684\u4ef7\u503c\uff0c\u6765\u5339\u914d\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5728\u540e\u7eed\u7684\u5e73\u53f0\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff0c\u6574\u4e2a\u8ba1\u7b97\u6301\u7eed\u5728\u8fd0\u884c\uff0c\u5e73\u53f0\u6301\u7eed\u5728\u7ed9\u8fd9\u4e9b\u77ff\u4e3b\u63d0\u4f9b\u66f4\u9ad8\u7684\u5956\u52b1\uff0c\u8fd9\u79cd\u5956\u52b1\u662f\u6301\u7eed\u4e0d\u65ad\u7684\uff0c\u800c\u4e14\u540e\u7eed\u7684\u5956\u52b1\u4ef7\u503c\u4f1a\u8d8a\u6765\u8d8a\u5927\uff0c\u90a3\u4e48\u600e\u6837\u624d\u80fd\u652f\u6491\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u8fd9\u79cd\u4e3a\u4e86\u7ef4\u6301\uff08\u91cd\u590d\u7684\uff09\u5206\u5e03\u5f0f\u8282\u70b9\u6240\u9700\u8981\u4ed8\u51fa\u7684\u9ad8\u6602\u7ecf\u6d4e\u5229\u76ca\u523a\u6fc0\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u96be\u4ee5\u627f\u53d7\uff0c\u5f53\u7136\u5e73\u53f0\u4e0d\u4f1a\u51fa\u4ec0\u4e48\u94b1\uff0c\u5b83\u4eec\u53ea\u9700\u8981\u53d1\u884c\u4e00\u4e9b\u4ee3\u5e01\uff0c\u7136\u540e\u628a\u751f\u6001\u505a\u5927\uff0c\u5b83\u4eec\u7684\u6536\u5165\u4e5f\u589e\u5927\uff0c\u4e5f\u8bb8\u5b83\u4eec\u4e2d\u9014\u5728\u9ad8\u70b9\u5957\u73b0\uff0c\u4f46\u662f\u5f53\u4ef7\u503c\u5f00\u59cb\u4e0b\u8dcc\u7684\u65f6\u5019\u5b83\u4eec\u4e5f\u6ca1\u6709\u4ec0\u4e48\u635f\u5931\uff0c\u56e0\u4e3a\u6574\u4e2a\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u5b83\u4eec\u5e76\u6ca1\u6709\u4ed8\u51fa\u4ec0\u4e48\u6210\u672c\uff0c\u77ff\u4e3b\u90fd\u662f\u5728\u4e3a\u4e86\u672a\u6765\u8d44\u6e90\u51fa\u94b1\u6765\u652f\u6301\u8fd9\u4e2a\u884c\u4e3a\u548c\u8fd0\u4f5c\u3002"),(0,n.kt)("p",null,"\u6bd4\u7279\u5e01\u7684\u5956\u52b1\u673a\u5236\u7c7b\u4f3c\u4e8e\u5f69\u7968\u7684\u673a\u5236\uff0c\u53ea\u6709\u80dc\u51fa\u7684\u673a\u5668\u624d\u4f1a\u83b7\u5f97\u6bd4\u7279\u5e01\u3002\u5f53\u7136\u8ddf\u5f69\u7968\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u79cd\u5f69\u7968\u8fd8\u4f1a\u5347\u503c\u3002"),(0,n.kt)("h4",{id:"7612-\u793e\u533a\u6cbb\u7406"},"7.6.1.2 \u793e\u533a\u6cbb\u7406"),(0,n.kt)("h4",{id:"7614-\u7cfb\u7edf\u5347\u7ea7"},"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7"),(0,n.kt)("h3",{id:"762-\u6982\u5ff5"},"7.6.2 \u6982\u5ff5"),(0,n.kt)("h4",{id:"7621-\u667a\u80fd\u5408\u7ea6"},"7.6.2.1 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("h4",{id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01"},"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01"),(0,n.kt)("h4",{id:"7623-ico"},"7.6.2.3 ICO"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7"},"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09"),(0,n.kt)("h2",{id:"77-machinations"},"7.7 Machinations"),(0,n.kt)("h2",{id:"78-render-graph"},"7.8 Render Graph"),(0,n.kt)("h3",{id:"781-worldrenderer-challenges"},"7.8.1 WorldRenderer challenges"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"explicit immediate mode\uff0c\u663e\u5f0f\u7684\u7acb\u5373\u6267\u884c\u6a21\u5f0f\u4e0d\u5229\u4e8e\u7edf\u7b79\u534f\u8c03"),(0,n.kt)("li",{parentName:"ul"},"explicit resource management\uff0c\u8d44\u6e90\u7ba1\u7406\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"tight coupling between rendering systems"),(0,n.kt)("li",{parentName:"ul"},"limited extensibility"),(0,n.kt)("li",{parentName:"ul"},"games teams must fork/diverge to customize\uff0c\u53ef\u590d\u7528\u6027\u5dee")),(0,n.kt)("h3",{id:"782-modular-worldrenderer-goals"},"7.8.2 Modular WorldRenderer goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"High-level knowledge of the full frame"),(0,n.kt)("li",{parentName:"ul"},"improved extensibility, 1) Decoupled and composable code modules; 2) automatic resource management"),(0,n.kt)("li",{parentName:"ul"},"Better visualizations and diagnostics")),(0,n.kt)("h2",{id:"79-mlir"},"7.9 MLIR"),(0,n.kt)("p",null,"MLIR\u7684\u76ee\u6807\u662f\u6784\u5efa\u53ef\u590d\u7528\u3001\u53ef\u6269\u5c55\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\uff0c\u4ece\u800c\u89e3\u51b3\u8f6f\u4ef6\u788e\u7247\u5316\u3001\u5f02\u6784\u786c\u4ef6\u7684\u7f16\u8bd1\u3001\u51cf\u5c11DSL\u7f16\u8bd1\u5668\u7684\u6784\u5efa\u65f6\u95f4\uff0c\u5e76\u5c06\u5df2\u6709\u7684\u7f16\u8bd1\u5668\u8fde\u63a5\u5728\u4e00\u8d77\u3002"),(0,n.kt)("p",null,"MLIR\u4f7f\u5404\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e0a\u7684\u4ee3\u7801\u751f\u6210\u3001\u8f6c\u6362\u5668\u3001\u4ee5\u53ca\u4f18\u5316\u5668\u53d8\u5f97\u7b80\u5355\uff0c\u5e76\u4e14\u8d2f\u7a7f\u5e94\u7528\u7a0b\u5e8f\u57df\u3001\u786c\u4ef6\u76ee\u6807\u3001\u4ee5\u53ca\u8fd0\u884c\u65f6\u73af\u5883\u3002"),(0,n.kt)("h3",{id:"791-\u4ecb\u7ecd"},"7.9.1 \u4ecb\u7ecd"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u9886\u57df\u6bd4\u8f83\u6210\u719f\u7684\u5e73\u53f0\u6280\u672f\uff0c\u4e00\u4e2a\u5171\u540c\u7684\u7279\u70b9\u5c31\u662f \uff1a\u201cone size fits all\u201d\uff0ca single abstraction level to interface with the system: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},'LLVM\uff0cis roughly "C with vectors"'),(0,n.kt)("li",{parentName:"ul"},'JVM\uff0cprovides an "object-oriented type system with garbage collector"')),(0,n.kt)("p",null,"\u4e0e\u6b64\u540c\u65f6\uff0c\u8bb8\u591a\u95ee\u9898\u53ef\u80fd\u9700\u8981\u66f4\u9ad8\u6216\u8005\u66f4\u4f4e\u7684\u5c42\u6b21\u62bd\u8c61\uff0c\u6bd4\u5982\u8bf4C++\u6e90\u4ee3\u7801\u7ea7\u522b\u7684\u5206\u6790\u4f7f\u7528LLVM IR\u5c31\u4f1a\u6bd4\u8f83\u56f0\u96be\uff0c\u8bb8\u591a\u8bed\u8a00\u5305\u62ecSwift\u3001Rust\u3001Julia\u3001Fortran\u7b49\u90fd\u5f00\u53d1\u4e86\u81ea\u5df1\u7684IR\u4ee5\u89e3\u51b3\u4e00\u4e9b\u9886\u57df\u7279\u5b9a\u95ee\u9898\uff0c\u6bd4\u5982\u4e00\u4e9b\u8bed\u8a00/\u5e93\u7279\u5b9a\u7684\u4f18\u5316\u3001\u4e00\u4e9b\u57fa\u4e8e\u6d41\u7684\u7c7b\u578b\u68c0\u6d4b\uff0c\u8fd8\u6709\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684ML graphs\u7b49\u3002"),(0,n.kt)("p",null,"\u5f00\u53d1\u8fd9\u79cd\u9886\u57df\u7279\u5b9a\u7684IR\u7f3a\u4e4f\u6bd4\u8f83\u7a0b\u5e8f\u7684\u4e00\u4e9b\u5de5\u5177\uff0c\u81ea\u884c\u5f00\u53d1\u7684\u5de5\u7a0b\u5b9e\u73b0\u5f80\u5f80\u8d28\u91cf\u6bd4\u8f83\u4f4e\u3001\u7f16\u8bd1\u6162\u3001\u7f3a\u4e4f\u597d\u7684\u8c03\u8bd5\u65b9\u6cd5\u3001\u4efb\u610f\u51fabug\u7b49\u4e0d\u7a33\u5b9a\u56e0\u7d20"),(0,n.kt)("p",null,"The MLIR project1 aims to directly tackle these program- ming language design and implementation challenges\u2014by making it cheap to define and introduce new abstraction levels, and provide \u201cin the box\u201d infrastructure to solve common compiler engineering problems. MLIR does this by "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"(1) \u628a\u57fa\u4e8eSSA\u7684IR\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u6807\u51c6\u5316"),(0,n.kt)("li",{parentName:"ul"},"(2) \u63d0\u4f9b\u4e00\u4e2a\u5b9a\u4e49\u7cfb\u7edf\u7528\u4e8e\u5b9a\u4e49IR dialect"),(0,n.kt)("li",{parentName:"ul"},"(3) \u63d0\u4f9b\u4e00\u4e9b\u5e7f\u6cdb\u7684\u57fa\u7840\u8bbe\u65bd\uff0c\u5305\u62ecdocumentation, parsing and printing logic, location tracking, multithreaded compilation support, pass management, etc.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0cMLIR\u5f15\u5165\u7684\u4e00\u4e9b\u7cfb\u7edf\u90fd\u662f\u57fa\u4e8e\u4f20\u7edf\u7684\u4e00\u4e9b\u6982\u5ff5\u548c\u7b97\u6cd5\u4e4b\u5916\u7684\uff0c\u8fd9\u7ed9\u5b66\u672f\u7814\u7a76\u5e26\u6765\u4e86\u5f88\u591a\u673a\u4f1a\uff0c\u4e00\u4e9b \u539f\u5219\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Parsimony:")," Apply Occam\u2019s razor to builtin semantics, concepts, and programming interface. Harness both intrin- sic and incidental complexity by abstracting properties of operations and types. Specify invariants once, but verify correctness throughout. Query properties in the context of a given compilation pass. With very little builtin, this opens the door to extensibility and customization."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Traceability:")," Retain rather than recover information. Declare rules and properties to enable transformation, rather than step wise imperative specification. Extensibility comes with generic means to trace information, enforced by extensive verification. Composable abstractions stem from \u201cglassboxing\u201d their properties and separating their roles\u2014type, control, data flow, etc."),(0,n.kt)("li",{parentName:"ul"},"Progressivity:* Premature lowering is the root of all evil. Beyond representation layers, allow multiple transformation paths that lower individual regions on demand. Together with abstraction-independent principles and interfaces, this enables reuse across multiple domains.")),(0,n.kt)("p",null,"\u8d21\u732e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4e00\u4e9b\u5df2\u7ecf\u88ab\u8bc1\u660e\u7684\u8bbe\u8ba1\u548c\u5de5\u7a0b\u539f\u5219\uff0c\u5b9a\u4f4d\u51fa\u7528\u4e8e\u89e3\u51b3\u53ef\u6269\u5c55\u548c\u6a21\u5757\u5316\u7684\u7f16\u8bd1\u7cfb\u7edf\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6ee1\u8db3\u8fd9\u4e9b\u539f\u5219\u7684\u5168\u65b0\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u63cf\u8ff0"),(0,n.kt)("li",{parentName:"ul"},"\u63a2\u7d22\u5df2\u6709\u7684\u5f15\u7528\uff0c\u5c55\u793a\u8fd9\u79cd\u57fa\u7840\u8bbe\u65bd\u7684\u901a\u7528\u6027")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Where did MLIR come from\uff1f")),(0,n.kt)("p",null,"\u89c2\u5bdf\u5230\u5f53\u4eca\u7684\u5927\u591a\u6570\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u57fa\u672c\u4e0a\u90fd\u7531\u4e00\u4e9b\u4e0d\u540c\u7684\u7f16\u8bd1\u5668\u3001\u56fe\u6280\u672f\u3001\u8fd0\u884c\u65f6 \u7ec4\u6210\uff0c\u5e76\u4e14\u5b83\u4eec\u4e4b\u95f4\u5e76\u6ca1\u6709\u5171\u4eab\u4e00\u4e9b\u901a\u7528\u7684\u57fa\u7840\u8bbe\u65bd\u6216\u8005\u8bbe\u8ba1\u539f\u5219\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u5f00\u53d1\u6210\u672c\uff0c\u53ef\u7ef4\u62a4\u6027\u7b49\u7b49\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5f88\u5feb\u6211\u4eec\u610f\u8bc6\u5230\u7f16\u8bd1\u5668\u5de5\u4e1a\u4e2d\u5b58\u5728\u76f8\u4f3c\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5df2\u6709\u7684\u7cfb\u7edf\u5982LLVM\u5728\u4e0d\u540c\u7684\u8bed\u8a00\u4e4b\u95f4\u8fdb\u884c\u7edf\u4e00\u548c\u96c6\u6210\u65b9\u9762\u975e\u5e38\u6210\u529f\uff0c\u4f46\u662f\u4e00\u4e9b\u9ad8\u5c42\u6b21\u7684\u8bed\u8a00\u901a\u5e38\u4f1a\u6784\u5efa\u81ea\u5df1\u7684\u9ad8\u5c42\u62bdIR\uff0c\u4ee5\u53ca\u4e3a\u8fd9\u4e9b\u9ad8\u5c42\u6b21\u62bd\u8c61\u6784\u5efa\u76f8\u4f3c\u7684\u6280\u672f"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u540c\u65f6\uff0cLLVM\u793e\u533a\u5374\u5728\u6323\u624e\u4e8e\u5e76\u884c\u6784\u9020\u7684\u8868\u8ff0\uff0c\u4ee5\u53ca\u600e\u6837\u5171\u4eab\u524d\u7aef\u7684lowering infrastructure")),(0,n.kt)("h3",{id:"792-\u8bbe\u8ba1\u539f\u5219"},"7.9.2 \u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Little Builtin, Everything Customizable ","[Parsimony]")),(0,n.kt)("p",null,"\u6574\u4e2a\u7cfb\u7edf\u57fa\u4e8e\u51e0\u4e2a\u6700\u5c11\u7684\u57fa\u7840\u6982\u5ff5\uff0c\u8ba9\u5927\u90e8\u5206\u4e2d\u95f4\u8868\u8ff0\u53ef\u4ee5\u5b8c\u5168\u81ea\u5b9a\u4e49\u3002IR\u4e2d\u6700\u5e38\u7528\u7684\u4e00\u4e9b\u62bd\u8c61\uff0c\u5982types\u3001operations\u3001\u4ee5\u53caattributes\u5e94\u8be5\u7528\u6765\u8868\u8ff0\u8fd9\u4e9bIR\uff0c\u8fd9\u6837\u4e00\u81f4\u6027\u5c31\u6bd4\u8f83\u597d\u3002\u53ef\u5b9a\u5236\u6027\u80fd\u591f\u9002\u5e94\u9700\u6c42\u7684\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u5e94\u8be5\u4f7f\u7528\u4e00\u4e9b\u53ef\u590d\u7528\u7684\u7ec4\u4ef6\u6765\u6784\u5efaIR\uff0c\u800c\u8ba9\u8bed\u8a00\u62bd\u8c61\u652f\u6301\u8fd9\u4e9b\u4e2d\u95f4\u8bed\u8a00\u7684\u8bed\u6cd5\u548c\u8bed\u4e49\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6210\u529f\u7684\u53ef\u5b9a\u5236\u6027\u7684\u6807\u51c6\u662f\uff0c\u5b83\u6709\u80fd\u529b\u53bb\u8868\u8fbe\u4e0d\u540c\u7684\u62bd\u8c61\uff0c\u6bd4\u5982\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u56fe\u3001\u5404\u79cdAST\u3001\u6570\u5b66\u62bd\u8c61\u4e2d\u7684\u591a\u6001\u7f16\u8bd1\u3001\u63a7\u5236\u6d41\u56fe\uff08Control Flow Graph\uff09\u3001\u6307\u4ee4\u7ea7\u7684IR\u5982LLVM IR\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7531\u4e8e\u6bd4\u8f83\u7cdf\u7cd5\u7684\u517c\u5bb9\u6027\u62bd\u8c61\uff0c\u53ef\u5b9a\u5236\u80fd\u529b\u5e26\u6765\u5185\u90e8\u788e\u7247\u5316\u7684\u98ce\u9669\uff0c\u8fd9\u770b\u8d77\u6765\u6ca1\u6709\u4ec0\u4e48\u597d\u7684\u6280\u672f\u65b9\u6848\uff0c\u4f46\u662f\u7cfb\u7edf\u5e94\u8be5\u9f13\u52b1\u6211\u4eec\u8bbe\u8ba1\u53ef\u590d\u7528\u7684\u62bd\u8c61\uff0c\u5e76\u4e14\u5047\u8bbe\u6211\u4eec\u8bbe\u8ba1\u7684\u62bd\u8c61\u53ef\u80fd\u4f1a\u88ab\u7528\u4e8e\u8d85\u51fa\u6211\u4eec\u521d\u59cb\u60f3\u6cd5\u7684\u8303\u56f4\uff0c\u4ee5\u4fbf\u4e8e\u66f4\u597d\u5730\u517c\u5bb9\u5916\u90e8\u62bd\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SSA and Regions ","[Parsimony]")),(0,n.kt)("p",null,"\u5c3d\u7ba1SSA\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u5b83\u4eec\u5927\u591a\u662f\u4e00\u4e9b\u6bd4\u8f83\u5e73\u7684\u3001\u7ebf\u6027\u7684CFG\uff0c\u4f46\u662f \u4e00\u4e9b \u9ad8\u5c42\u6b21\u7684\u62bd\u8c61\u5374\u5f15\u5165\u5c06\u5d4c\u5957\u7684\u533a\u5757\uff08nested regions\uff09\u4f5c\u4e3a\u7b2c\u4e00\u7b49\u516c\u6c11\u3002\u4e3a\u4e86\u652f\u6301\u5f02\u6784\u7f16\u8bd1\uff0c\u7cfb\u7edf \u5fc5\u987b\u652f\u6301\u80fd\u591f\u8868\u8fbe\u7ed3\u6784\u5316\u7684\u63a7\u5236\u6d41\u3001\u5e76\u884c\u7ed3\u6784\u3001\u6e90\u8bed\u8a00\u4e2d\u7684 \u95ed\u5305\uff0c\u4ee5\u53ca\u8bb8\u591a\u5176\u4ed6\u76ee\u7684\u3002\u5176\u4e2d\u4e00\u4e2a\u7279\u522b\u7684\u6311\u6218\u662f\u4f7f\u57fa\u4e8eCFG\u7684\u5206\u6790\u548c\u8f6c\u6362\u7ec4\u5408\u80fd\u591f\u57fa\u4e8enested region\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u5fc5\u987b\u8981\u727a\u7272\u4e00\u4e9bLVVM\u7684\u4e00\u822c\u751a\u81f3\u6bd4\u8f83\u6743\u5a01\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Maintain Higher-Level Semantics ","[Progressivity]",":")),(0,n.kt)("p",null,"\u7cfb\u7edf\u5e94\u8be5\u4fdd\u7559\u4e00\u4e9b\u7ed3\u6784\u4fe1\u606f\u5e2e\u52a9\u4e0b\u4e00\u5c42\u6b21\u8fdb\u884c\u5206\u6790\u548c\u4f18\u5316\uff0c\u8fd9\u79cd\u4fe1\u606f\u5e94\u8be5\u6e10\u8fdb\u5f0f\u5730\u5411\u4e0b\u4f20\u9012\uff0c\u7ed3\u6784\u4fe1\u606f\u7684\u4e22\u5f03\u5e94\u8be5\u4f7f\u5f97\u4e0b\u4e00\u5c42\u62bd\u8c61\u521a\u597d\u4e0d\u9700\u8981\u8fd9\u6837\u7684\u7ed3\u6784\u4fe1\u606f\u3002\u4f8b\u5982\u5728transformation\u9636\u6bb5\uff0c\u6240\u6709\u7684\u7ed3\u6784\u5316\u63a7\u5236\u6d41\u4fe1\u606f\uff0c\u4f8b\u5982\u5faa\u73af\u7ed3\u6784\u90fd\u9700\u8981\u4fdd\u7559\uff0c\u79fb\u9664\u8fd9\u6837\u7684\u4fe1\u606f\u5219\u610f\u5473\u7740\u540e\u7eed\u4e0d\u4f1a\u518d\u53d1\u751ftransformation\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ed3\u6784\u662f\uff0c\u4e0d\u540c\u62bd\u8c61\u5c42\u6b21\u7684\u6982\u5ff5\u4f1a\u5904\u4e8e\u540c\u4e00\u4e2aIR\u4e2d\uff0c\u4f7f\u5f97\u4f4e\u5c42\u6b21\u7684\u62bd\u8c61\u53ef\u4ee5\u4f7f\u7528\u9ad8\u5c42\u6b21\u7684\u4e00\u4e9b\u4fe1\u606f\u6765\u8f85\u52a9\u8fdb\u884c\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u7ed3\u6784\u662f\u7cfb\u7edf\u5e94\u8be5\u652f\u6301\u6e10\u8fdb\u5f0f\u5730lowering\uff0c\u5728\u591a\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e4b\u95f4\u4ee5small steps\u8fdb\u884c\u63a8\u8fdb\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u7684\u7f16\u8bd1\u5668\u5176\u5b9e\u4e5f\u5df2\u7ecf\u5305\u542b\u4e86\u5f88\u591a\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Declaration and Validation [Parsimony and Traceability")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Source Location Tracking ","[Traceability]")),(0,n.kt)("h3",{id:"793-mlir-structure"},"7.9.3 MLIR structure"),(0,n.kt)("p",null,"MLIR\u8bed\u8a00\u7528\u4e8e\u63cf\u8ff0high-level structure\uff0c\u8fd9\u4e2a\u7ed3\u6784\u5176\u5b9e\u662f\u4e00\u68f5\u6811\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u5305\u542boperation\u548coperand\u3002\u6240\u6709\u5bf9\u8fd9\u68f5\u6811\u7684\u64cd\u4f5c\uff0c\u6bd4\u5982 \u8f6c\u6362\u3001\u4f18\u5316\u7b49\uff0c\u90fd\u53ef\u4ee5\u8868\u793a\u4e3a\u5bf9\u6574\u4e2a\u6811\u7684\u904d\u5386\uff0cMLIR\u901a\u8fc7Pass\u6765\u5b9e\u73b0\u904d\u5386\uff0c\u6bcf\u4e2apass\u4ece\u67d0\u4e2aoperation\u5f00\u59cb\uff0c\u5927\u591a\u6570\u65f6\u5019\u6700\u9876\u5c42\u7684operation\u662fModuleOp\uff0cPassManager\u5c31\u88ab\u8bbe\u8ba1\u4e3a\u9650\u5236\u5176operation \u4e3aModuleOp\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void runOnOperation() override {\n Operation *op = getOperation();\n resetIndent();\n printOperation(op);\n }\n")),(0,n.kt)("p",null,"\u6574\u4e2a IR\u662f\u5d4c\u5957\u7684\uff0c\u9664\u4e86operation\uff0c\u8fd8\u6709 \u5176\u4ed6\u4e00\u4e9b\u5c42\u6b21\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"operation\uff0c\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u5d4c\u5957\u7684Regions"),(0,n.kt)("li",{parentName:"ul"},"Region\uff0c\u6709\u4e00\u4e2aBlock\u96c6\u5408\u5217\u8868\u7ec4\u6210"),(0,n.kt)("li",{parentName:"ul"},"Block\uff0c\u5305\u542b\u4e00\u7ec4operation\u7684\u96c6\u5408")),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f8b\u6570\u636e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"visiting op: 'builtin.module' with 0 operands and 0 results\n 1 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 3 operations\n visiting op: 'dialect.op1' with 0 operands and 4 results\n 1 attributes:\n - 'attribute name' : '42 : i32'\n 0 nested regions:\n visiting op: 'dialect.op2' with 0 operands and 0 results\n 2 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 1 operations\n visiting op: 'dialect.innerop1' with 2 operands and 0 results\n 0 nested regions:\n Region with 3 blocks:\n Block with 0 arguments, 2 successors, and 2 operations\n visiting op: 'dialect.innerop2' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop3' with 3 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop4' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop5' with 0 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop6' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop7' with 0 operands and 0 results\n 0 nested regions:\n 0 nested regions:\n")),(0,n.kt)("h3",{id:"794-llvm-irspir-vmlir"},"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"},"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"))),(0,n.kt)("h4",{id:"7941-llvm-ir"},"7.9.4.1 LLVM IR"),(0,n.kt)("p",null,"IR\u53ea\u662f\u7a0b\u5e8f\u7684\u4e00\u79cd\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u8bbe\u8ba1\u6ce8\u91cd\u652f\u6301\u53d8\u6362\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"IR\u7684\u4e09\u79cd\u5f62\u6001\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u8868\u793a\uff0c\u7528\u4e8e\u9ad8\u6548\u7684\u5206\u6790\u4e0e\u53d8\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\uff1a\u7528\u4e8e\u5b58\u50a8\u548c\u4ea4\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u672c\u8868\u793a\uff1a\u7528\u4e8e \u9605\u8bfb\u548c\u7ea0\u9519")),(0,n.kt)("p",null,"LLVM\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u5fc3\u5316\u548c\u5404\u79cd\u884d\u751f\uff1aLLVM IR\u662f\u524d\u540e\u7aef\u89e3\u8026\u7684\u57fa\u7840\uff0c\u5904\u4e8e\u6838\u5fc3/\u4e2d\u5fc3\u5730\u4f4d\uff0c\u5b8c\u6574\u7684\u7f16\u8bd1\u8def\u5f84\u5fc5\u987b\u7ecf\u8fc7LLVM IR\uff0c\u5bfc\u81f4\u5176\u8fdb\u5316\u7f13\u6162"),(0,n.kt)("li",{parentName:"ul"},"\u6f14\u8fdb\u4e0e\u517c\u5bb9\u6027\uff1a\u9a71\u52a8\u7684\u5347\u7ea7\u901a\u5e38\u65e0\u6cd5\u5f97\u5230\u4fdd\u8bc1\uff0c\u56e0\u6b64\u9a71\u52a8\u4f9d\u8d56\u7684LLVM IR\u5e93\u4e5f\u53ef\u80fd\u6c38\u8fdc\u5f97\u4e0d\u5230\u5347\u7ea7")),(0,n.kt)("h4",{id:"7942-spir-v"},"7.9.4.2 SPIR-V"),(0,n.kt)("p",null,"SPIR-V\u662fKhronos API\u5171\u7528\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u5305\u62ecVulkan\uff0cOpenGL\uff0cOpenCLass\u7b49\uff0cKhronos group\u7684\u6807\u8bed\u662f\uff1a\u94fe\u63a5\u8f6f\u4ef6\u4e0e\u786c\u4ef6\u3002"),(0,n.kt)("p",null,"LLVM IR\u76f8\u5bf9\u4e8eSPIR-V\u6709\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u540c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u6709\u6bd4\u8f83\u597d\u7684\u7248\u672c\u7ba1\u7406\u548c\u6269\u5c55\u7ba1\u7406\uff0c\u4e5f\u6709\u7a33\u5b9a\u7684\u5b57\u8282\u7801\u8868\u793a"),(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u4e3b\u8981\u7528\u4e8e\u9a71\u52a8\u5185\u90e8\u7684\u4e8c\u6b21\u7f16\u8bd1\uff08\u5728\u7ebf\u7f16\u8bd1\uff09")),(0,n.kt)("p",null,"\u7a33\u5b9a\u7684\u5b57\u8282\u7801\uff0c\u5b8c\u6574\u7684 GPU \u7f16\u8bd1\u5668\u88ab\u5206\u4e3a\u4e24\u90e8\u5206\u2014\u2014\u9996\u5148\u901a\u8fc7\u79bb\u7ebf\u5de5\u5177\u94fe\u4ece\u9ad8\u5c42\u6b21\u6e90\u4ee3\u7801\u751f\u6210 SPIR-V\uff0c\u7136\u540e\u901a\u8fc7\u9a71\u52a8\u5185\u90e8\u7f16\u8bd1\u5668\u5c06 SPIR-V \u5728\u7ebf\u7f16\u8bd1\u6210\u673a\u5668\u7801\u3002\u867d\u7136\u50cf LLVM IR \u4e00\u6837\u5728\u6574\u4e2a\u7f16\u8bd1\u6d41\u7a0b\u4e2d\u5904\u4e8e\u201c\u4e2d\u95f4\u201d\u4f4d\u7f6e\uff0cSPIR-V \u66f4\u4fa7\u91cd\u4e8e\u9a71\u52a8\u5185\u90e8\u4e8c\u6b21\u7f16\u8bd1\u7684\u9ad8\u6548\uff0c\u56e0\u4e3a\u8fd9\u4e00\u6b65\u5728\u8fd0\u884c\u65f6\u8fdb\u884c\u3002\u6240\u4ee5 SPIR-V \u7684\u6838\u5fc3\u662f\u5176\u5b57\u8282\u7801\u3002\u5176\u7f16\u7801\u6709\u5f88\u591a\u7b80\u5316\u9a71\u52a8\u4e8c\u6b21\u7f16\u8bd1\u7684\u8003\u91cf\uff0c\u50cf\u662f\u7528\u5404\u79cd\u63d0\u524d\u7684\u663e\u793a\u58f0\u660e\u6765\u907f\u514d\u8fd0\u884c\u65f6\u590d\u6742\u7684\u5206\u6790\u3002SPIR-V \u5e76\u6ca1\u6709\u5728\u89c4\u8303\u4e2d\u6307\u5b9a\u5185\u5b58\u8868\u793a\u6216\u8005\u6587\u672c\u8868\u793a\uff0c\u8fd9\u4e9b\u90fd\u662f\u5b9e\u73b0 SPIR-V \u6807\u51c6\u89c4\u8303\u7684\u5de5\u5177\u94fe\u81ea\u884c\u5b9a\u4e49\u7684\u3002\u6bd4\u5982 SPIRV-Tools \u6709\u5176\u81ea\u5df1\u7684\u5185\u5b58\u8868\u793a\u548c\u6587\u672c\u8868\u793a\uff0c \u540c\u6837 MLIR \u4e2d\u7684 SPIR-V dialect \u4e5f\u662f\u3002"),(0,n.kt)("p",null,"GPU\u9886\u57df\u4e13\u7528\uff1a\u5176\u5b9e SPIR-V \u7684 IR \u90e8\u5206\u548c LLVM IR \u76f8\u5dee\u5e76\u4e0d\u592a\u5927\u3002SPIR-V \u501f\u9274\u4e86\u5f88\u591a LLVM IR \u7684\u8bbe\u8ba1\u2014\u2014\u5b83\u540c\u6837\u662f\u7531\u63a7\u5236\u6d41\u3001\u57fa\u672c\u5757\u3001\u4ee5\u53ca\u9759\u6001\u5355\u8d4b\u503c\u6765\u8868\u793a\u7a0b\u5e8f\u3002\u6307\u4ee4\u7684\u7c92\u5ea6\u548c LLVM IR \u4e5f\u76f8\u5dee\u4e0d\u5927\u3002SPIR-V \u4e2d\u72ec\u7279\u7684\u90e8\u5206\u5728\u4e8e\u5bf9\u5f88\u591a GPU \u6982\u5ff5\u7684\u539f\u751f\u652f\u6301\u3002\u8fd9\u79cd\u652f\u6301\u901a\u8fc7\u5f88\u591a SPIR-V \u72ec\u6709\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982 decorations, builtins, \u4ee5\u53ca\u7279\u6b8a\u7684\u6307\u4ee4\uff08\u50cf\u662f\u5bfc\u6570\u8ba1\u7b97\u3001\u56fe\u50cf\u53d6\u6837\uff09\u3002\u53e6\u5916\u4e3a\u4e86\u652f\u6301\u56fe\u5f62\u56fe\u50cf\u548c\u9ad8\u6027\u80fd\u8ba1\u7b97\u7684\u4e24\u79cd\u4f7f\u7528\u573a\u666f\uff0c SPIR-V \u4e2d\u6709\u8bb8\u591a\u6267\u884c\u6a21\u578b\u548c\u6a21\u5f0f\u3002\u5f53\u7136\uff0c\u5bf9\u56fe\u5f62\u56fe\u50cf\u4e5f\u6709 structured control flow \u7684\u7279\u6b8a\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"7943-mlir"},"7.9.4.3 MLIR"),(0,n.kt)("p",null,"\u4e00\u4e2a GPU \u4e3a\u4e3b\u7684\u6807\u51c6\u89c4\u8303\u9700\u8981\u539f\u751f\u652f\u6301\u5404\u79cd GPU \u6982\u5ff5\uff0c\u80fd\u591f\u63d0\u4f9b\u4e0d\u540c\u7b49\u7ea7\u7684\u6269\u5c55\u9700\u6c42\uff0c \u4ee5\u53ca\u63d0\u4f9b\u7a33\u5b9a\u548c\u517c\u5bb9\u7684\u5b57\u8282\u7801\u3002\u8fd9\u4e9b\u9700\u6c42\u5e76\u4e0d\u7b26\u5408 LLVM IR \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u6240\u4ee5 Khronos Group \u63a8\u51fa\u4e86 SPIR-V\u3002\u4f46\u662f\u8bbe\u8ba1\u4e00\u5957\u4e2d\u95f4\u8868\u793a\u53ea\u662f\u4e2a\u5f00\u59cb\uff0c\u56f4\u7ed5\u5176\u5f00\u53d1\u548c\u7ef4\u62a4\u6574\u5957\u5de5\u5177\u94fe\u9700\u8981\u6301\u7eed\u4e0d\u65ad\u7684\u5de5\u7a0b\u6295\u5165\u3002SPIR-V \u4e0e LLVM IR \u5b8c\u5168\u65e0\u5173\uff0cSPIR-V \u7684\u7f16\u8bd1\u5668\u6808\u65e0\u6cd5\u5229\u7528\u73b0\u6709\u7684 LLVM \u5e93\u3002\u6240\u4ee5 SPIR-V \u7684\u6574\u4e2a\u6808\u662f\u4ece\u5934\u5f00\u59cb\u72ec\u7acb\u5f00\u53d1\u7684\uff0c\u4ece\u6c47\u7f16\u3001\u53cd\u6c47\u7f16\uff0c\u4e00\u6b65\u6b65\u5230\u5404\u79cd\u8bed\u8a00\u7684\u7f16\u8bd1\u5668\u548c\u4f18\u5316\u3002\u800cMLIR\u6070\u597d\u53ef\u4ee5\u5e2e\u52a9\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316 (infrastructurization)"),"\uff0cMLIR \u662f\u7528\u6765\u5f00\u53d1\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u3002\u5b83\u63d0\u4f9b\u4e00\u7cfb\u5217\u53ef\u590d\u7528\u7684\u6613\u6269\u5c55\u7684\u57fa\u7840\u7ec4\u4ef6\uff0c\u7528\u6765\u642d\u5efa\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u3002\u5728 LLVM IR \u548c SPIR-V \u4e2d\uff0c\u6211\u4eec\u6709\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u4e2d\u542b\u6709\u5b8c\u5907\u7684\u6307\u4ee4\u96c6\u6765\u7f16\u8bd1\u6240\u6709\u7684 CPU \u548c GPU \u7a0b\u5e8f\u3002MLIR \u4e2d\u5219\u6ca1\u6709\u5b8c\u5168\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\u7684\u4e2d\u95f4\u8868\u793a\u3002MLIR \u63d0\u4f9b\u57fa\u7840\u8bbe\u65bd\u6765\u5e2e\u52a9\u5b9a\u4e49 operation \u4ee5\u53ca\u5c06\u903b\u8f91\u76f8\u5173\u7684 operation \u7ec4\u5408\u6210 dialect\u3002\u53e6\u5916\uff0cMLIR \u4e5f\u63d0\u4f9b\u4e00\u4e9b\u666e\u9002\u7684 pattern \u6216\u8005 pass\uff0c\u8fd9\u4e9b pattern \u6216\u8005 pass \u5e76\u4e0d\u4e0e\u5177\u4f53\u7684 operation \u7ed1\u5b9a\uff0c\u80fd\u591f\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"\u65e0\u8bba\u662f\u5bf9 operation \u8fd8\u662f pattern/pass \u7684\u652f\u6301\u90fd\u8981\u6c42 MLIR \u4ee5\u66f4\u52a0\u7ec6\u7684\u7c92\u5ea6\u770b\u5f85\u7f16\u8bd1\u5668\u3002\u5728 MLIR \u4e2d\uff0coperation \u4e0d\u518d\u662f\u6700\u57fa\u7840\u7684\u90e8\u4ef6\uff0c\u7c92\u5ea6\u8fdb\u4e00\u6b65\u7ec6\u5316\u5230\u7c7b\u578b, \u503c, attribute, region, \u4ee5\u53ca interface (\u4f8b\u5982 attribute/type/operation interface).","[8]"),(0,n.kt)("p",null,"Operation \u53ef\u4ee5\u6709\u4efb\u610f\u6570\u91cf\u7684\u8f93\u5165\u3001\u8f93\u51fa\u3001attribute\uff0c\u5e76\u5305\u542b\u4efb\u610f\u6570\u91cf\u7684 region\u3002\u5176\u4e2d region \u80fd\u591f\u8868\u793a operation \u4e4b\u95f4\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u4ece\u800c\u7b80\u5316\u7f16\u8bd1\u5668\u7684\u5206\u6790\u548c\u8f6c\u6362\u3002Operation \u53ef\u4ee5\u5b9e\u73b0 operation interface\uff0cpattern \u548c pass \u7ed1\u5b9a\u7684\u662f operation interface\uff0c\u7531\u6b64\u800c\u5b9e\u73b0\u4e0e\u5177\u4f53 operation \u7684\u89e3\u7ed1\u5e76\u505a\u5230\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"MLIR \u91cc\u9762\u7684\u6982\u5ff5\u90fd\u8bbe\u8ba1\u7684\u6bd4\u8f83\u62bd\u8c61\uff0c\u76ee\u7684\u662f\u80fd\u6bd4\u8f83\u597d\u5730\u6620\u5c04\u5230\u4e0d\u540c\u7684\u9886\u57df\u548c\u573a\u666f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dialects, dialects, dialects"),"\uff0c\u5f53\u7136\uff0c\u8fd9\u5957\u57fa\u7840\u8bbe\u65bd\u5b58\u5728\u7684\u76ee\u7684\u662f\u5e2e\u52a9\u642d\u5efa\u6700\u7ec8\u7f16\u8bd1\u5668\u3002\u6211\u4eec\u5728\u5199 C++ \u7a0b\u5e8f\u7684\u7684\u65f6\u5019\u4f1a\u8c03\u7528 STL \u6216\u8005\u66f4\u52a0\u9ad8\u5c42\u6b21\u7684\u5e93\uff0c\u5f88\u5c11\u4f1a\u4ece\u5934\u5f00\u59cb\u5b9e\u73b0\u6240\u6709\u7684\u7ec6\u8282\u3002\u53e6\u5916\uff0c\u57fa\u7840\u8bbe\u65bd\u4e5f\u9700\u8981\u4e0e\u5176\u652f\u6301\u7684\u9886\u57df\u534f\u540c\u53d1\u5c55\uff0c\u56e0\u4e3a\u4f7f\u7528\u573a\u666f\u4e2d\u4f1a\u63d0\u4f9b\u5f88\u591a\u9700\u6c42\u3002\u56e0\u6b64\uff0cMLIR \u4ee3\u7801\u5e93\u4e2d\u81ea\u5e26\u5f88\u591a\u7528\u6765\u7ed9\u5404\u79cd\u5c42\u7ea7\u6982\u5ff5\u5efa\u6a21\u7684 dialect\u3002","[9]"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684 dialect \u751f\u6001\u76ee\u524d\u8fd8\u5728\u6269\u5f20\u6f14\u8fdb\u9636\u6bb5\uff0c\u4f46 dialect \u4e4b\u95f4\u7684\u7ec4\u7ec7\u7ed3\u6784\u4ee5\u53ca\u6709\u4e9b dialect \u5df2\u7ecf\u76f8\u5bf9\u7a33\u5b9a\u4e86\u3002"),"\u6bd4\u5982\u6211\u4eec\u6709 LLVM \u548c SPIR-V dialect \u4f5c\u4e3a\u4e0e\u5176\u4ed6\u7cfb\u7edf\u8f6c\u6362\u7684\u8fb9\u754c dialect\u3002\uff08\u5176\u5b9e MLIR \u53ef\u4ee5\u540c\u65f6\u8868\u793a LLVM IR \u548c SPIR-V \u8fd9\u4e00\u70b9\u4e5f\u8868\u660e\u4e86 MLIR \u7684\u57fa\u7840\u8bbe\u65bd\u89d2\u8272\u3002\uff09 \u62bd\u8c61\u5c42\u6b21\u5c45\u4e2d\u7684\u6709 Linalg, Tensor, Vector, SCF dialect\uff0c\u5b83\u4eec\u534f\u540c\u5408\u4f5c\u7528\u6765\u751f\u6210\u4ee3\u7801\u3002\u53e6\u5916\uff0cMLIR \u4e2d\u8fd8\u6709 Affine, Math, Arithmetic dialect \u7528\u6765\u63cf\u8ff0\u5e95\u5c42\u8ba1\u7b97\u3002\u5728 AI \u6846\u67b6\u5c42\u9762\uff0c\u6709 TensorFlow, TFLite, MHLO, Torch, TOSA \u8fdb\u884c\u5bf9\u63a5\u548c\u5bfc\u5165\u6a21\u578b\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7528\u9014\u7684 dialect\uff0c\u50cf\u662f PDL \u7528\u6765\u5b9a\u4e49\u7f16\u8bd1\u5668\u8f6c\u6362\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"Alex \u4e4b\u524d\u5728 MLIR \u8bba\u575b\u4e0a\u5206\u4eab\u7684\u5404 dialect \u4e4b\u95f4\u7684\u5173\u7cfb","[10]","\u975e\u5e38\u503c\u5f97\u4e00\u8bfb\uff0c\u4e4b\u540e\u6211\u4e5f\u4f1a\u5199\u4e0b\u6211\u7684\u7406\u89e3\u3002\u8fd9\u4e9b\u5404\u5f0f\u5404\u6837\u7684 dialect \u548c\u4ee5\u540e\u5305\u88c5\u5b83\u4eec\u800c\u4ea7\u751f\u7684\u5c40\u90e8\u6216\u8005\u5b8c\u6574\u7684\u8f6c\u6362\u6d41\u7a0b\u5c06\u6781\u5927\u7b80\u5316\u9886\u57df\u76f8\u5173\u7f16\u8bd1\u5668\u7684\u5f00\u53d1\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fdb\u4e00\u6b65\u89e3\u8026\u7f16\u8bd1\u5668\u548c\u4e2d\u95f4\u8868\u793a"),"\uff1a\u5176\u5b9e",(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316\u4ee5\u53ca\u7531\u6b64\u4ea7\u751f\u7684\u5927\u91cf dialect \u90fd\u662f\u8fdb\u4e00\u6b65\u89e3\u8026\u548c\u6a21\u5757\u5316\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u7684\u4e00\u79cd\u81ea\u7136\u7ed3\u679c"),"\u3002\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\u88ab\u8bb8\u591a\u4ee5 dialect \u5f62\u6001\u5b58\u5728\u7684\u90e8\u5206\u7684\u4e2d\u95f4\u8868\u793a\u53d6\u4ee3\u3002\u6ca1\u6709\u67d0\u4e2a\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u518d\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\uff0c\u90fd\u662f\u6309\u9700\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u8fdb\u4e00\u6b65\u89e3\u8026\u4e2d\u95f4\u8868\u793a\u4e5f\u8ba9\u6211\u4eec\u53ef\u4ee5\u7075\u6d3b\u5730\u6839\u636e\u9886\u57df\u8fdb\u884c\u8bbe\u8ba1\u548c\u6298\u4e2d\u3002\u6211\u4eec\u53ea\u9700\u9009\u53d6\u6240\u9700\u7684\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u6765\u7ec4\u5408\u6210\u5b8c\u6574\u7f16\u8bd1\u5668\uff0c\u4e0d\u518d\u9700\u8981\u5168\u76d8\u63a5\u6536\u50cf LLVM IR \u4e00\u6837\u7684\u4e00\u5957\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u3002\u56e0\u4e3a interface \u7684\u5b58\u5728\uff0c\u6269\u5c55\u6a21\u5757\u7684\u66f4\u80fd\u4e5f\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u2014\u2014\u6211\u4eec\u65e2\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 operation \u6765\u5b9e\u73b0\u5df2\u6709\u7684 interface\uff0c\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 interface \u7136\u540e\u652f\u6301\u73b0\u6709 operation\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0cLLVM IR \u5929\u7136\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u7edf\u4e00\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0cMLIR \u7684\u57fa\u7840\u8bbe\u65bd\u548c dialect \u751f\u6001\u5219\u5929\u7136\u662f\u53bb\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u79bb\u6563\u7684\u7f16\u8bd1\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u7684\u4e00\u822c\u53d1\u5c55\u8d8b\u52bf\u662f\u4ece\u5355\u4e00\u7684\u5f3a\u8026\u5408\u6574\u4f53\u5230\u9002\u7528\u4e0d\u540c\u573a\u666f\u7684\u591a\u79cd\u591a\u6837\u7684\u9009\u62e9\u3002\u5bf9\u4e8e\u6280\u672f\u6808\u7684\u4e0a\u5c42\u800c\u8a00\uff0c\u8fd9\u5c24\u5176\u660e\u663e\uff0c\u56e0\u4e3a\u8d8a\u5f80\u4e0a\u8d8a\u63a5\u8fd1\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\uff0c\u800c\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\u672c\u8eab\u5c31\u5404\u5f0f\u5404\u6837\uff0c\u7531\u5c42\u51fa\u4e0d\u7a77\u7684\u524d\u7aef\u6846\u67b6\u53ef\u89c1\u4e00\u6591\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u6808\u7684\u5e95\u5c42\u4e00\u822c\u76f8\u5bf9\u7a33\u5b9a\u3002\u5c11\u6570\u51e0\u79cd\u786c\u4ef6\u67b6\u6784\u3001\u7f16\u8bd1\u5668\u548c\u64cd\u4f5c\u7cfb\u7edf\u7edf\u6cbb\u5f88\u591a\u5e74\u3002\u4f46\u534a\u5bfc\u4f53\u8fdb\u5c55\u7684\u53d8\u6162\u548c\u8ba1\u7b97\u9700\u6c42\u7684\u7206\u70b8\u5f0f\u589e\u957f\u4e5f\u5728\u9a71\u52a8\u7740\u5e95\u5c42\u6280\u672f\u7684\u53d8\u9769\u3002\u73b0\u5728\u4f9d\u7136\u4f9d\u9760\u901a\u7528\u67b6\u6784\u548c\u666e\u9002\u4f18\u5316\u5f88\u96be\u518d\u6ee1\u8db3\u5404\u79cd\u9700\u6c42\uff0c\u5f00\u53d1\u9886\u57df\u4e13\u7528\u7684\u6574\u4f53\u7684\u89e3\u51b3\u65b9\u6848\u662f\u4e00\u6761\u51fa\u8def\u3002RISC-V \u5728\u82af\u7247\u6307\u4ee4\u96c6\u5c42\u6b21\u63a2\u7d22\u6a21\u5757\u5316\u548c\u5b9a\u5236\u5316\uff0cMLIR \u5219\u662f\u5728\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u5c42\u9762\u505a\u7c7b\u4f3c\u63a2\u7d22\u3002\u4e24\u8005\u8054\u624b\u4f1a\u7ed9\u5e95\u5c42\u6280\u672f\u6808\u5e26\u6765\u4f55\u79cd\u9769\u65b0\u662f\u4e00\u4e2a\u503c\u5f97\u62ed\u76ee\u4ee5\u5f85\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8de8\u7cfb\u7edf\u8fb9\u754c\u7684\u6e10\u8fdb\u5f0f\u4ee3\u7801\u8868\u793a\u9012\u964d")),(0,n.kt)("p",null,"\u5728\u7ed3\u675f\u672c\u7ae0\u4e4b\u524d\uff0c\u518d\u5570\u55e6\u6700\u540e\u4e00\u70b9\u3002\u5176\u5b9e\u6211\u4eec\u53ef\u4ee5\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u770b\u5f85 MLIR \u5e26\u6765\u7684\u89e3\u8026\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6c34\u5e73\u65b9\u5411\u4e0a\uff0cdialect \u628a\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u6253\u6563\u6210\u8bb8\u591a\u5c40\u90e8\u4e2d\u95f4\u8868\u793a\uff1b\u5782\u76f4\u65b9\u5411\u4e0a\uff0cMLIR \u8ba9\u6211\u4eec\u53ef\u4ee5\u5bf9\u5904\u4e8e\u4e0d\u540c\u5c42\u7ea7\u7684\u6982\u5ff5\u8fdb\u884c\u5efa\u6a21"),"\u3002\u8fd9\u5bf9\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u662f\u975e\u5e38\u6709\u7528\u7684\uff0c\u56e0\u4e3a\u9886\u57df\u4e13\u7528\u8bed\u8a00\u4e00\u822c\u662f\u9ad8\u5ea6\u62bd\u8c61\u7684\u58f0\u660e\u5f0f\u8bed\u8a00\uff0c\u53ea\u63cf\u8ff0\u4efb\u52a1\uff0c\u9700\u8981\u7f16\u8bd1\u5668\u5c06\u5176\u8f6c\u6362\u6210\u5177\u4f53\u7684\u547d\u4ee4\u5f0f\u673a\u5668\u6307\u4ee4\u3002\u4e00\u6b65\u8de8\u8d8a\u8fd9\u4e2a\u5de8\u5927\u7684\u62bd\u8c61\u5dee\u8ddd\u662f\u975e\u5e38\u96be\u7684\uff0c\u5229\u7528\u591a\u7ea7\u62bd\u8c61\u548c\u5efa\u6a21\u6765\u8fdb\u884c\u6e10\u8fdb\u5f0f lowering \u662f\u66f4\u52a0\u9002\u5408\u7684\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u5206\u79bb\u5404\u4e2a\u5c42\u6b21\u5173\u6ce8\u7684\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u4e5f\u66f4\u52a0\u7684\u6613\u5f00\u53d1\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u5e76\u4e0d\u662f\u4ec0\u4e48\u5168\u65b0\u7684\u6982\u5ff5\uff0c\u5728\u4e0d\u540c\u7684\u9879\u76ee\u4e2d\u6211\u4eec\u5df2\u7136\u770b\u5230\u5404\u79cd\u7c7b\u4e2d\u95f4\u8868\u793a\u7684\u8bbe\u7f6e\uff0c\u50cf\u662f Clang AST \u6216\u8005\u5404\u79cd\u673a\u5668\u5b66\u4e60\u6846\u67b6\u4e2d\u7684\u8ba1\u7b97\u56fe\u3002",(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684\u4f18\u52bf\u662f\u4f7f\u7528\u540c\u6837\u7684\u57fa\u7840\u8bbe\u65bd\u5c06\u8fd9\u4e9b\u4e0d\u540c\u5c42\u6b21\u7684\u8868\u793a\u8fde\u63a5\u8d77\u6765\uff0c\u8ba9\u5b83\u4eec\u4e4b\u95f4\u7684\u4fe1\u606f\u6d41\u901a\u53d8\u5f97\u66f4\u52a0\u987a\u7545\u3002"),"\u5176\u5b9e\u73b0\u4ee3\u590d\u6742\u7cfb\u7edf\u7684\u5f00\u53d1\u591a\u662f\u9009\u53d6\u5404\u79cd\u5b50\u7cfb\u7edf\u7136\u540e\u5c06\u5176\u7ec4\u5408\u3002\u5c06\u6765\u81ea\u524d\u4e00\u4e2a\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u8fdb\u884c\u9a8c\u8bc1\u3001\u8f6c\u5316\u7136\u540e\u4f20\u9012\u7ed9\u4e0b\u4e00\u4e2a\u5b50\u7cfb\u7edf\u6d88\u8017\u6389\u5f88\u591a\u5de5\u7a0b\u8d44\u6e90\u3002\u5982\u679c\u6240\u6709\u5b50\u7cfb\u7edf\u4f7f\u7528\u76f8\u540c\u7684\u5185\u90e8\u57fa\u7840\u8bbe\u65bd\uff0c\u8fd9\u4e9b\u8d44\u6e90\u6295\u5165\u5c31\u90fd\u53ef\u4ee5\u8282\u7701\u4e0b\u6765\uff0c\u53e6\u5916\uff0c\u4f7f\u7528\u76f8\u540c\u5de5\u5177\u4e5f\u4f1a\u4f7f\u5f97\u8de8\u7ec4\u8de8\u9879\u76ee\u7684\u6c9f\u901a\u534f\u8c03\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u3002"),(0,n.kt)("h3",{id:"795-mlir-dialect"},"7.9.5 MLIR Dialect"),(0,n.kt)("h4",{id:"7951-\u57fa\u7840\u7ec4\u4ef6"},"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u57fa\u672c\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002 \u5728\u8fd9\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4e00\u7cfb\u5217\u4e92\u8865\u534f\u4f5c\u7684\u64cd\u4f5c\uff0c\u548c\u8fd9\u4e9b\u64cd\u4f5c\u6240\u9700\u7684\u7c7b\u578b (type) \u4ee5\u53ca\u5c5e\u6027 (attribute) \u7b49\u7b49\u3002 \u7279\u5b9a\u7684\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u53ea\u9700\u8981\u7ec4\u5408\u73b0\u6709\u7684 dialect\uff0c\u5e76\u52a0\u4ee5\u81ea\u5df1\u7684\u6269\u5c55\u6216\u8005\u5b9a\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5185\u5d4c\u7ed3\u6784\u7684\u64cd\u4f5c\uff08Operations carrying structures\uff09")),(0,n.kt)("p",null,"MLIR \u4e2d\u64cd\u4f5c\u7684\u4e00\u4e2a\u7a81\u51fa\u7279\u6027\u662f\u53ef\u4ee5\u901a\u8fc7",(0,n.kt)("em",{parentName:"p"},"region"),"[2]","\u6765\u5185\u5d4c (nest) \u7ed3\u6784 (structure)\u3002MLIR \u4e2d\u5f88\u591a\u53ef\u4ee5\u6dfb\u52a0\u8d1f\u8f7d\u64cd\u4f5c (payload op) \u7684\u7ed3\u6784\u5316\u64cd\u4f5c (structured op) \u90fd\u4f9d\u8d56\u4e8e\u8fd9\u79cd\u7279\u6027\u3002\u8fd9\u4e9b\u7ed3\u6784\u5316\u64cd\u4f5c\u672c\u8eab\u53ea\u5b9a\u4e49\u67d0\u79cd\u7ed3\u6784\u6027\u8bed\u4e49\uff0c\u6bd4\u5982\u63a7\u5236\u6d41 (control flow)\u3002\u5177\u4f53\u7684\u8ba1\u7b97\u6027\u8bed\u4e49\u5219\u6765\u81ea\u4e8e\u6dfb\u52a0\u7684\u8d1f\u8f7d\u64cd\u4f5c\u3002\u7ed3\u6784\u5316\u64cd\u4f5c\u4e0e\u8d1f\u8f7d\u64cd\u4f5c\u76f8\u4e92\u7ec4\u5408\u3001\u76f8\u4e92\u6269\u5c55\u3002\u4e00\u4e2a\u7a81\u51fa\u7684\u4f8b\u5b50\u662f linalg.generic op\uff1b\u5f53\u7136\u51fd\u6570 (function) \u4ee5\u53ca\u6a21\u5757 (module) \u5176\u5b9e\u90fd\u662f\u8fd9\u79cd\u7ed3\u6784\u5316\u64cd\u4f5c\u3002Region \u7ed9\u8d1f\u8f7d\u64cd\u4f5c\u8bbe\u7f6e\u4e86\u660e\u786e\u7684\u8fb9\u754c\uff0c\u8fd9\u6709\u52a9\u4e8e\u7b80\u5316\u4e2d\u95f4\u8868\u793a\u8f6c\u6362\u65f6\u6240\u9700\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee3\u8868\u62bd\u8c61\u5c42\u6b21\u7684\u7c7b\u578b\uff08Types signaling abstraction levels\uff09")),(0,n.kt)("p",null,"\u64cd\u4f5c\u5f52\u6839\u5230\u5e95\u53ea\u662f\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u503c (value) \u6240\u8fdb\u884c\u7684\u67d0\u79cd\u8ba1\u7b97 (computation)\u3002\u7c7b\u578b\u624d\u662f\u62bd\u8c61\u5c42\u6b21 (abstraction level) \u7684\u4ee3\u8868\u3002\u4e3e\u4e2a\u6817\u5b50\uff0c\u5f20\u91cf (tensor)\u3001buffer\u3001\u4ee5\u53ca\u6807\u91cf (scalar) \u90fd\u53ef\u4ee5\u652f\u6301\u52a0\u51cf\u4e58\u9664\u7b49\u5404\u79cd\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u5728\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u591a\u5c11\u533a\u522b\uff0c\u4f46\u5b83\u4eec\u660e\u663e\u5c5e\u4e8e\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002\u5f20\u91cf\u5b58\u5728\u4e8e\u673a\u5668\u5b66\u4e60\u6846\u67b6\u6216\u8005\u7f16\u7a0b\u6a21\u578b (programming model) \u8fd9\u4e00\u9ad8\u5c42\u62bd\u8c61\u3002Buffer \u5b58\u5728\u4e8e\u6267\u884c\u7cfb\u7edf (system) \u548c\u5185\u5b58\u4f53\u7cfb (memory hierarchy) \u8fd9\u4e00\u4e2d\u5c42\u62bd\u8c61\u3002\u6807\u91cf\u5b58\u5728\u4e8e\u6267\u884c\u82af\u7247 (chip) \u548c\u5bc4\u5b58\u5668 (register) \u8fd9\u4e00\u5e95\u5c42\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u53ef\u4ee5\u81ea\u7531\u5730\u5b9a\u4e49\u5404\u79cd\u7c7b\u578b\u3002 MLIR \u7684\u6838\u5fc3\u57fa\u7840\u8bbe\u65bd\u4f1a\u65e0\u5dee\u522b\u5730\u5bf9\u5f85\u4ee5\u53ca\u7528\u7edf\u4e00\u7684\u673a\u5236\u652f\u6301\u6765\u81ea\u4e0d\u540c dialect \u7684\u7c7b\u578b\u3002 \u6bd4\u5982\uff0c",(0,n.kt)("em",{parentName:"p"},"type conversion")," ","[3]","\u5c31\u662f\u901a\u7528\u7684\u8f6c\u6362\u7c7b\u578b\u7684\u673a\u5236\u3002 Dialect A \u53ef\u4ee5\u91cd\u7528\u6765\u81ea dialect B \u7684\u7c7b\u578b\uff0c\u4e5f\u53ef\u4ee5\u5bf9\u5176\u8fdb\u4e00\u6b65\u6269\u5c55\u548c\u7ec4\u5408\uff0c\u4f8b\u5982\u5c06\u57fa\u7840\u7c7b\u578b (primitive type) \u653e\u5165\u5bb9\u5668\u7c7b\u578b\u4e2d (container type)\u3002 ",(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e2a dialect \u4e5f\u53ef\u4ee5\u5b9a\u4e49\u89c4\u5219\u6765\u5b9e\u73b0\u81ea\u8eab\u7c7b\u578b\u548c\u5176\u4ed6 dialect \u7c7b\u578b\u7684\u76f8\u4e92\u8f6c\u6362\u3002 \u628a\u8fd9\u4e9b\u89c4\u5219\u52a0\u5165\u5230 type converter \u4e2d\u540e\uff0c\u6240\u6709\u7684\u89c4\u5219\u4f1a\u76f8\u4e92\u7ec4\u5408\uff0c\u7531\u6b64 type conversion \u673a\u5236\u4f1a\u81ea\u884c\u627e\u51fa\u8f6c\u6362\u901a\u8def\u6765\u5b9e\u73b0\u8f6c\u6362\u3002")," \u4e0d\u8fc7\u603b\u800c\u8a00\u4e4b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u76f8\u8f83\u4e8e\u64cd\u4f5c\u7684\u7ec4\u5408\u4e0e\u8f6c\u6362\uff0c\u7c7b\u578b\u7684\u7ec4\u5408\u4ee5\u53ca\u8f6c\u6362\u901a\u5e38\u6709\u66f4\u591a\u9650\u5236\u4e5f\u66f4\u52a0\u590d\u6742\uff0c\u6bd5\u7adf\u7c7b\u578b\u7684\u5339\u914d\u5960\u5b9a\u4e86\u64cd\u4f5c\u53ef\u4ee5\u8854\u63a5\u7684\u57fa\u7840\u3002")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u540c\u5efa\u6a21\u7c92\u5ea6\u7684Dialect\uff08Dialects as modeling granularity\uff09")),(0,n.kt)("p",null,"\u901a\u8fc7\u5b9a\u4e49\u548c\u7ec4\u7ec7\u64cd\u4f5c\u548c\u7c7b\u578b\uff0cdialect \u7ed9\u7f16\u8bd1\u5668\u63d0\u4f9b\u4e86\u7c97\u7c92\u5ea6\u9ad8\u5c42\u6b21\u7684\u5efa\u6a21\u65b9\u5f0f\u3002\u5982\u679c\u4e24\u4e2a dialect \u6240\u6d89\u53ca\u7684\u7c7b\u578b\u76f8\u540c\uff0c\u90a3\u4e48\u5b83\u4eec\u57fa\u672c\u5c5e\u4e8e\u7edf\u4e00\u62bd\u8c61\u5c42\u6b21\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u6d89\u53ca\u4e0d\u540c\u7c7b\u578b\u7684 dialect \u8fdb\u884c\u8f6c\u6362\u672c\u8d28\u4e0a\u5219\u662f\u8f6c\u6362\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u4e3a\u7b80\u5316\u5b9e\u73b0\uff0c\u6211\u4eec\u4e00\u822c",(0,n.kt)("strong",{parentName:"p"},"\u5c06\u9ad8\u5c42\u6b21 (high-level) \u62bd\u8c61\u9012\u964d (lower) \u5230\u4f4e\u5c42\u6b21 (low-level) \u62bd\u8c61\u3002\u9012\u964d\u7684\u8fc7\u7a0b\u901a\u5e38\u4f1a\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u7684\u95ee\u9898\u5206\u89e3 (decomposition) \u6216\u8005\u8d44\u6e90\u5206\u914d (resource assignment) \u6765\u9010\u6e10\u8d34\u8fd1\u5e95\u5c42\u786c\u4ef6"),"\u3002\u524d\u8005\u7684\u4f8b\u5b50\u6709 tiling, vectorization \u7b49\u7b49\uff1b\u540e\u8005\u7684\u4f8b\u5b50\u6709 bufferization, \u5bc4\u5b58\u5668\u5206\u914d (register allocation) \u7b49\u7b49\u3002\u5373\u4fbf\u5982\u6b64\uff0c\u9012\u964d\u4f9d\u7136\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u6709\u4e0d\u540c\u7684\u76ee\u7684\u4ee5\u53ca\u5bf9\u6b63\u786e\u6027\u548c\u6027\u80fd\u7684\u7406\u89e3\u3002\u6bd4\u5982\u7f16\u7a0b\u6a21\u578b\u5c42\u8003\u8651\u7684\u662f\u4ee3\u7801\u7684\u8868\u793a\u80fd\u529b\u4ee5\u53ca\u7b80\u6d01\u6027\uff0c\u5f88\u5c11\u6d89\u53ca\u5177\u4f53\u786c\u4ef6\u7279\u6027\uff1b\u800c\u786c\u4ef6\u5c42\u8003\u8651\u7684\u662f\u8d44\u6e90\u7684\u6700\u4f73\u4f7f\u7528\uff0c\u5f88\u5c11\u8003\u8651\u6613\u4e8e\u7f16\u7a0b\u3002\u56e0\u6b64\uff0c\u5728\u8bf8\u591a MLIR \u673a\u5236\u4e2d\uff0c",(0,n.kt)("em",{parentName:"p"},"dialect conversion")," ","[4]","\u53ef\u80fd\u662f\u6700\u590d\u6742\u7684\u5c31\u5e76\u4e0d\u5947\u602a\u4e86\u3002"),(0,n.kt)("h4",{id:"7952-dialect\u4f53\u7cfb"},"7.9.5.2 Dialect\u4f53\u7cfb"),(0,n.kt)("p",null,"\u4ee5\u64cd\u4f5c\u548c\u7c7b\u578b\u7684\u53ef\u7ec4\u5408\u6027\u4ee5\u53ca\u53ef\u6269\u5c55\u6027\u4e3a\u57fa\u7840\uff0cdialect\u53ef\u4ee5\u4f5c\u4e3a\u7ec4\u5408\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u9ad8\u5c42\u6b21\u57fa\u7840\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"7953-operations"},"7.9.5.3 Operations"),(0,n.kt)("p",null,"\u4e00\u4e2aoperation\u7c7b\u7ee7\u627f\u4e8emlir::Op\u7c7b\uff0c\u5176\u4e2dmlir::Op\u7c7b\u643a\u5e26\u4e00\u4e9b\u53ef\u9009\u7684traits\u6765\u81ea\u5b9a\u4e49\u4e00\u4e9b\u884c\u4e3a\uff0cTraits\u63d0\u4f9b\u4e00\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u5bf9\u4e00\u4e2aOperation\u6ce8\u5165\u4e00\u4e9b\u884c\u4e3a\uff0c\u4f8b\u5982\u989d\u5916\u7684accessors\u3001verification\u7b49\u7b49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"class ConstantOp : public mlir::Op<\n /// `mlir::Op` is a CRTP class, meaning that we provide the\n /// derived class as a template parameter.\n ConstantOp,\n /// The ConstantOp takes zero input operands.\n mlir::OpTrait::ZeroOperands,\n /// The ConstantOp returns a single result.\n mlir::OpTrait::OneResult,\n /// We also provide a utility `getType` accessor that\n /// returns the TensorType of the single result.\n mlir::OpTraits::OneTypedResult::Impl> {\n\n public:\n /// Inherit the constructors from the base Op class.\n using Op::Op;\n\n /// Provide the unique name for this operation. MLIR will use this to register\n /// the operation and uniquely identify it throughout the system. The name\n /// provided here must be prefixed by the parent dialect namespace followed\n /// by a `.`.\n static llvm::StringRef getOperationName() { return \"toy.constant\"; }\n\n /// Return the value of the constant by fetching it from the attribute.\n mlir::DenseElementsAttr getValue();\n\n /// Operations may provide additional verification beyond what the attached\n /// traits provide. Here we will ensure that the specific invariants of the\n /// constant operation are upheld, for example the result type must be\n /// of TensorType and matches the type of the constant `value`.\n LogicalResult verifyInvariants();\n\n /// Provide an interface to build this operation from a set of input values.\n /// This interface is used by the `builder` classes to allow for easily\n /// generating instances of this operation:\n /// mlir::OpBuilder::create(...)\n /// This method populates the given `state` that MLIR uses to create\n /// operations. This state is a collection of all of the discrete elements\n /// that an operation may contain.\n /// Build a constant with the given return type and `value` attribute.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::Type result, mlir::DenseElementsAttr value);\n /// Build a constant and reuse the type from the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::DenseElementsAttr value);\n /// Build a constant by broadcasting the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n double value);\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u4e2aoperation\u53ef\u4ee5\u6ce8\u518c\u7ed9ToyDialect\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyDialect::initialize() {\n addOperations();\n}\n")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u5b9a\u4e49\u4e86\u4e00\u4e2aoperation\uff0c\u90a3\u4e48\u600e\u6837\u83b7\u53d6\u5b83\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u8f6c\u6362\u5462\uff1f"),(0,n.kt)("p",null,"\u5728MLIR\u4e2d\u6709\u4e24\u6839\u8ddfoperation\u76f8\u5173\u7684\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Operation"),"\uff1a\u5b83\u7528\u4e8e\u901a\u7528\u5730model all operations\uff0c\u5b83\u662f\u4e0d\u900f\u660e\u7684\uff0c\u610f\u5473\u7740\u5b83\u4e0d\u4f1a\u63cf\u8ff0\u4efb\u4f55operation\u7684\u5c5e\u6027\u6216\u8005\u7c7b\u578b\uff1b\u53cd\u4e4b\uff0c\u5b83\u63d0\u4f9b\u5bf9\u4e00\u4e2aoperation\u5b9e\u4f8b\u7684\u901a\u7528API\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"OP"),"\uff1a\u6bcf\u4e2a\u7279\u5b9a\u7c7b\u578b\u7684operation\u7ee7\u627f\u81eaOp\uff0c\u8fd9\u4e9b\u7ee7\u627f\u81eaOp\u7684\u7c7b\u50cf\u4e00\u4e2a\u6307\u5411\u4e00\u4e2aOperation*\u7684\u667a\u80fd\u6307\u9488\uff0c\u63d0\u4f9b\u4e00\u4e9b\u7279\u5b9a\u4e8e\u67d0\u4e2a\u64cd\u4f5c\u7684accessor\u65b9\u6cd5\u3001\u7c7b\u578b\u68c0\u67e5\u7b49\u7b49\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u6211\u4eec\u7ed9Toy\u5b9a\u4e49\u4e00\u4e2a operation\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5728\u5b9a\u4e49\u4e00\u7ec4\u5e72\u51c0\u3001\u5305\u542b\u4e00\u4e9b\u6709\u7528\u8bed\u4e49\u7684\u63a5\u53e3\uff0c\u901a\u8fc7\u8fd9\u4e9b\u63a5\u53e3\u53ef\u4ee5\u6784\u5efaOperation\u5e76\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\uff08interfaing\uff09\u3002\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u7ee7\u627f\u81eaOp\u7684\u7c7b\u4e0d\u5305\u542b\u4efb\u4f55\u7c7b\u5b57\u6bb5\uff08class field\uff09\uff0c\u6240\u6709\u56f4\u7ed5\u6574\u4e2aoperation\u7684\u6570\u636e\u90fd\u5b58\u50a8\u5728\u5f15\u7528 \u7684Operation\u4e2d\u3002\u8fd9\u5e26\u6765\u7684\u5176\u4e2d\u4e00\u4e2a\u8981\u6c42\u662f\uff0c\u6240\u6709\u7684Op\u7c7b\u7684\u4f20\u503c\u90fd\u5e94\u8be5\u662f\u503c\u7c7b\u578b\uff0c\u800c\u4e0d\u80fd \u662f\u6307\u9488\u6216\u8005\u5f15\u7528\u7c7b\u578b\u3002")),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u901a\u7528\u7684Operation*\u5b9e\u4f8b\uff0c\u6211\u4eec\u603b\u662f\u53ef\u4ee5\u83b7\u53d6\u5230\u4e00\u4e2a\u7279\u5b9a\u7684Op\u5b9e\u4f8b\uff0c\u53ef\u4ee5\u4f7f\u7528LLVM\u63d0\u4f9b\u7684\u8f6c\u6362\u65b9\u6cd5\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'void processConstantOp(mlir::Operation *operation) {\n ConstantOp op = llvm::dyn_cast(operation);\n\n // This operation is not an instance of `ConstantOp`.\n if (!op)\n return;\n\n // Get the internal operation instance wrapped by the smart pointer.\n mlir::Operation *internalOperation = op.getOperation();\n assert(internalOperation == operation &&\n "these operation instances are the same");\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operation Definition Specification\uff08ODS\uff09")),(0,n.kt)("p",null,"\u4f7f\u7528TableGen\u7684\u65b9\u5f0f\u5b9a\u4e49"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Base class for toy dialect operations. This operation inherits from the base\n// `Op` class in OpBase.td, and provides:\n// * The parent dialect of the operation.\n// * The mnemonic for the operation, or the name without the dialect prefix.\n// * A list of traits for the operation.\nclass Toy_Op traits = []> :\n Op;\n")),(0,n.kt)("p",null,"\u7136\u540e\u5b9a\u4e49operation\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def ConstantOp : Toy_Op<"constant"> {\n // Provide a summary and description for this operation. This can be used to\n // auto-generate documentation of the operations within our dialect.\n let summary = "constant operation";\n let description = [{\n Constant operation turns a literal into an SSA value. The data is attached\n to the operation as an attribute. For example:\n\n %0 = "toy.constant"()\n { value = dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]> : tensor<2x3xf64> }\n : () -> tensor<2x3xf64>\n }];\n\n // The constant operation takes an attribute as the only input.\n // `F64ElementsAttr` corresponds to a 64-bit floating-point ElementsAttr.\n let arguments = (ins F64ElementsAttr:$value);\n\n // The generic call operation returns a single value of TensorType.\n // F64Tensor corresponds to a 64-bit floating-point TensorType.\n let results = (outs F64Tensor);\n\n // Add additional verification logic to the constant operation. Setting this bit\n // to `1` will generate a `::mlir::LogicalResult verify()` declaration on the\n // operation class that is called after ODS constructs have been verified, for\n // example the types of arguments and results. We implement additional verification\n // in the definition of this `verify` method in the C++ source file. \n let hasVerifier = 1;\n \n \n // Add custom build methods for the constant operation. These methods populate\n // the `state` that MLIR uses to create operations, i.e. these are used when\n // using `builder.create(...)`.\n let builders = [\n // Build a constant with a given constant tensor value.\n OpBuilder<(ins "DenseElementsAttr":$value), [{\n // Call into an autogenerated `build` method.\n build(builder, result, value.getType(), value);\n }]>,\n\n // Build a constant with a given constant floating-point value. This builder\n // creates a declaration for `ConstantOp::build` with the given parameters.\n OpBuilder<(ins "double":$value)>\n ];\n}\n\n')),(0,n.kt)("h3",{id:"796-analysis-and-transformation"},"7.9.6 Analysis and Transformation"),(0,n.kt)("p",null,"\u672c\u8282\u4ecb\u7ecd\u600e\u6837\u5229\u7528Toy Dialect\u53ca\u5176\u9ad8\u5c42\u6b21\u8bed\u4e49\u6765\u6267\u884clocal pattern-match transformations\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5728LLVM\u4e2d\u4f1a\u5f88\u56f0\u96be\u3002"),(0,n.kt)("p",null,"\u6709\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u7528\u4e8e\u5b9e\u73b0pattern-match transformation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"imperative C++ pattern-match and rewrite"),(0,n.kt)("li",{parentName:"ul"},"declarative\uff0crule-based pattern-match and rewrite using table-driven Declarative Rewrite Rules\uff08DDR\uff09\uff0c\u6b64\u65f6operation\u5fc5\u987b\u662f\u4f7f\u7528ODS\u5b9a\u4e49\u7684")),(0,n.kt)("h4",{id:"7961-c-style--pattern-match-and-rewrite"},"7.9.6.1 C++ style pattern-match and rewrite"),(0,n.kt)("p",null,"\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u4f18\u5316\u8f6c\u7f6e\u7684\u8f6c\u7f6e\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u53ef\u4ee5\u76f4\u63a5\u8fd4\u56dex\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u4efb\u4f55\u8f6c\u7f6e\u64cd\u4f5c\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"def transpose_transpose(x) {\n return transpose(transpose(x));\n}\n")),(0,n.kt)("p",null,"\u6b63\u5e38\u7684IR\u662f\u8fd9\u6837\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n %0 = toy.transpose(%arg0 : tensor<*xf64>) to tensor<*xf64>\n %1 = toy.transpose(%0 : tensor<*xf64>) to tensor<*xf64>\n toy.return %1 : tensor<*xf64>\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u60c5\u51b5\u5bf9\u4e8eLLVM\u6765\u8bf4\u662f\u5f88\u96be\u7684\uff0c\u4f8b\u5982Clang\u4e0d\u80fd\u4f18\u5316\u6389\u4e34\u65f6\u6570\u7ec4\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u8f6c\u7f6e\u8ba1\u7b97\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c++"},"#define N 100\n#define M 100\n\nvoid sink(void *);\nvoid double_transpose(int A[N][M]) {\n int B[M][N];\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n B[j][i] = A[i][j];\n }\n }\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n A[i][j] = B[j][i];\n }\n }\n sink(A);\n}\n")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u5230\u5728IR\u4e2d\u5339\u914d\u4e00\u4e2atree-like\u7684\u6a21\u5f0f\uff0c\u5e76\u4e14\u5c06\u5176\u66ff\u6362\u4e3a\u4e00\u7ec4\u65b0\u7684operation\u3002we can plug into the MLIR ",(0,n.kt)("inlineCode",{parentName:"p"},"Canonicalizer")," pass by implementing a ",(0,n.kt)("inlineCode",{parentName:"p"},"RewritePattern"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'/// Fold transpose(transpose(x)) -> x\nstruct SimplifyRedundantTranspose : public mlir::OpRewritePattern {\n /// We register this pattern to match every toy.transpose in the IR.\n /// The "benefit" is used by the framework to order the patterns and process\n /// them in order of profitability.\n SimplifyRedundantTranspose(mlir::MLIRContext *context)\n : OpRewritePattern(context, /*benefit=*/1) {}\n\n /// This method is attempting to match a pattern and rewrite it. The rewriter\n /// argument is the orchestrator of the sequence of rewrites. It is expected\n /// to interact with it to perform any changes to the IR from here.\n mlir::LogicalResult\n matchAndRewrite(TransposeOp op,\n mlir::PatternRewriter &rewriter) const override {\n // Look through the input of the current transpose.\n mlir::Value transposeInput = op.getOperand();\n TransposeOp transposeInputOp = transposeInput.getDefiningOp();\n\n // Input defined by another transpose? If not, no match.\n if (!transposeInputOp)\n return failure();\n\n // Otherwise, we have a redundant transpose. Use the rewriter.\n rewriter.replaceOp(op, {transposeInputOp.getOperand()});\n return success();\n }\n};\n')),(0,n.kt)("p",null,"transformation\u4e3b\u8981\u5728operation canonicalization pass\u88ab\u6267\u884c\uff0ccanonicalization\u662fMLIR\u7684\u4e00\u4e2a\u91cd\u8981\u9636\u6bb5\uff0c\u80fd\u591f\u5bf9\u4ee3\u7801\u7684\u597d\u574f\u8fdb\u884c\u4e00\u4e9b\u63a8\u7406\uff0c\u6267\u884creliable compiler transformation\u3002\u4e3a\u4e86\u4fdd\u8bc1canonicalization\u80fd\u591f\u5e94\u7528\u6211\u4eec\u7684new transform\uff0c\u9700\u8981\u8bbe\u7f6ehasCanonicalizer=1\uff0c\u5e76\u4e14\u5c06\u6211\u4eec\u7684pattern\u6ce8\u518c\u5230canonicalization\u6846\u67b6\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Register our patterns for rewrite by the Canonicalization framework.\nvoid TransposeOp::getCanonicalizationPatterns(\n RewritePatternSet &results, MLIRContext *context) {\n results.add(context);\n}\n")),(0,n.kt)("p",null,"\u540c\u65f6\u6211\u4eec\u9700\u8981\u7ed9\u7f16\u8bd1\u5668\u589e\u52a0\u4e00\u4e2aoptimization pipeline\uff0cMLIR\u901a\u8fc7 \u4e00\u4e2aPassManager\u7ba1\u7406 \uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"}," mlir::PassManager pm(module.getContext());\n pm.addNestedPass(mlir::createCanonicalizerPass());\n")),(0,n.kt)("p",null,"\u6700\u7ec8\u4f18\u5316\u7684IR\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n toy.return %arg0 : tensor<*xf64>\n}\n")),(0,n.kt)("h4",{id:"7962-\u603b\u7ed3"},"7.9.6.2 \u603b\u7ed3"),(0,n.kt)("p",null,"\u5728\u8fd9\u91cc\uff0c\u6574\u4e2a\u8fc7\u7a0b\u4ee5Operation\u4e3a\u4e2d\u5fc3\uff0cOperation\u662fIR\u7684\u57fa\u672c\u5143\u7d20\uff0c\u5176\u5305\u542b\u7684\u662f\u4ee3\u7801\u7684\u57fa\u672c\u7ec4\u7ec7\u5143\u7d20\uff0c\u8fd9\u91cc\u901a\u8fc7\u5bf9\u4ee3\u7801\u7684\u7ed3\u6784\u8fdb\u884c\u5206\u79bb\u6765\u8fdb\u884c\u4f18\u5316\uff0c\u800c\u4f18\u5316\u6216\u8005transformation\u7684\u903b\u8f91\uff0c\u5176\u5b9e\u4e5f\u5c31\u662f\u5bf9Operation\u8fdb\u884c\u6539\u5199\uff0c\u5b83\u901a\u8fc7\u5bf9Operation\u8fdb\u884c\uff08\u66b4\u529b\uff09\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u8bd1\u5668\u5bf9AST\u7684\u5206\u6790\u8fc7\u7a0b\u662f\u7c7b\u4f3c\u7684\uff0c\u53ea\u4e0d\u8fc7MLIR\u4f7f\u7528\u4e00\u79cd\u7279\u5b9a\u7684\u7ed3\u6784\u6765\u8868\u793a\u4efb\u610f\u7684IR\uff0c\u8fd9\u4e2aIR\u53ef\u6709\u7528\u6237\u81ea\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u56fa\u5b9a\u7684IR\u7ed3\u6784\uff0c\u7136\u540e\u7531\u4e8e\u5404\u4e2aDialect\u4e86\u89e3\u5176\u4e2d\u7684\u6784\u6210\uff0c\u4f8b\u5982Operation\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u7279\u5b9a\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u4fee\u6539\u7684\u5176\u5b9e\u662fMLIR\u7684\u7ed3\u6784\uff0c\u8fd9\u79cd\u4fee\u6539\u662f\u7531\u7279\u5b9a\u7684Dialect\u5b9e\u4f8b\u8fdb\u884c\u6267\u884c\u7684\u3002MLIR\u7cfb\u7edf\u8bbe\u7f6e\u4e00\u4e2a\u6ce8\u518c\u7ba1\u7406\u7684\u673a\u5236\uff0c\u8ba9\u5404\u4e2aDialect\u8fdb\u884c\u81ea\u5b9a\u4e49\u5904\u7406\u3002"),(0,n.kt)("p",null,"MLIR\u4e3a\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\uff0c\u5b83\u7684Operation\u5b9e\u9645\u4e0a\u662f\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u8fd0\u884c\u65f6\u6267\u884c\u7684\u4ee3\u7801\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u6ca1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u7ed3\u6784\uff0c\u8fd9\u4e2a\u7ed3\u6784\u88ab\u8868\u8ff0\u4e3a\u4e00\u79cd\u683c\u5f0f\uff0c\u5b83\u53ef\u4ee5\u662fin memory\u7684\uff0c\u4e5f\u53ef\u4ee5\u662f\u6587\u672c\u7684\uff0c\u6240\u6709\u90a3\u4e9b\u5173\u4e8e\u5206\u6790\u3001\u4f18\u5316\u3001\u53d8\u6362\u7684\u64cd\u4f5c\u5176\u5b9e\u4e5f\u662f\u5728\u4fee\u6539\u8fd9\u4e2aIR\u7ed3\u6784\uff0c\u5f53\u7136 \u4e3b\u8981\u901a\u8fc7Operation\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u662fLLVM IR\u4e2d\u7684\u5355\u6761\u6307\u4ee4\u4e3a\u5355\u4f4d\u3002\u7531\u4e8eDialect\u6216\u8005Operation\u5305\u542b\u66f4\u9ad8\u5c42\u7684\u62bd\u8c61\u4fe1\u606f\uff0c\u56e0\u6b64\u4f18\u5316\u7684\u7a7a\u95f4\u66f4\u5927\u3002"),(0,n.kt)("h3",{id:"797-generic-transformation-with-interfaces"},"7.9.7 Generic Transformation with Interfaces"),(0,n.kt)("h3",{id:"798-lowering"},"7.9.8 Lowering"),(0,n.kt)("p",null,"Tensors represent an abstract value-typed sequence of data, meaning that they don\u2019t live in any memory. MemRefs, on the other hand, represent lower level buffer access, as they are concrete references to a region of memory."),(0,n.kt)("h4",{id:"7981-dialect-conversions"},"7.9.8.1 Dialect Conversions"),(0,n.kt)("p",null,"\u9700\u8981\u81f3\u5c11\u4e24\u4e2a\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#conversion-target"},"Conversion Target"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the formal specification of what operations or dialects are legal for the conversion. Operations that aren\u2019t legal will require rewrite patterns to perform ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/getting_started/Glossary/#legalization"},"legalization"),"."))),(0,n.kt)("li",{parentName:"ul"},"A set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#rewrite-pattern-specification"},"Rewrite Patterns"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/Tutorials/QuickstartRewrites/"},"patterns")," used to convert ",(0,n.kt)("em",{parentName:"li"},"illegal")," operations into a set of zero or more ",(0,n.kt)("em",{parentName:"li"},"legal")," ones."))),(0,n.kt)("li",{parentName:"ul"},"Optionally, a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#type-conversion"},"Type Converter"),".",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"If provided, this is used to convert the types of block arguments. ")))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Target")),(0,n.kt)("p",null,"\u8fd9\u91cc\u6211\u4eec\u5c06\u8ba1\u7b97\u6bd4\u8f83\u91cd\u7684Toy\u64cd\u4f5c\u8f6c\u5316\u4e3a\u6765\u81ea\u591a\u4e2adialect\u4e2d\u64cd\u4f5c\u7684\u96c6\u5408\uff1aAffine\u3001Arith\u3001Func\u4ee5\u53caMemRef\uff0c\u4ee5\u4fbf\u8fdb\u884c\u8fdb\u4e00\u6b65\u4f18\u5316\uff0c\u9996\u5148\u5b9a\u4e49conversion target\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n // The first thing to define is the conversion target. This will define the\n // final target for this lowering.\n mlir::ConversionTarget target(getContext());\n\n // We define the specific operations, or dialects, that are legal targets for\n // this lowering. In our case, we are lowering to a combination of the\n // `Affine`, `Arith`, `Func`, and `MemRef` dialects.\n target.addLegalDialect();\n\n // We also define the Toy dialect as Illegal so that the conversion will fail\n // if any of these operations are *not* converted. Given that we actually want\n // a partial lowering, we explicitly mark the Toy operations that don't want\n // to lower, `toy.print`, as *legal*. `toy.print` will still need its operands\n // to be updated though (as we convert from TensorType to MemRefType), so we\n // only treat it as `legal` if its operands are legal.\n target.addIllegalDialect();\n target.addDynamicallyLegalOp([](toy::PrintOp op) {\n return llvm::none_of(op->getOperandTypes(),\n [](Type type) { return type.isa(); });\n });\n ...\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Patterns")),(0,n.kt)("p",null,"\u8ddfCanonicalization\u6846\u67b6\u6709\u70b9\u7c7b\u4f3c\uff0cDialectConversion\u4e5f\u4f7f\u7528RewritePatterns\u6765\u6267\u884c\u8f6c\u5316\u903b\u8f91\u3002\u53ef\u4ee5\u4f7f\u7528\u4e24\u79cdpattern\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"RewritePattern"),(0,n.kt)("li",{parentName:"ul"},"ConversionPatterns\uff0c\u4e3b\u8981\u7684\u533a\u522b\u662f\u63a5\u53d7\u4e00\u4e2a\u989d\u5916\u7684\u53c2\u6570\uff1aoperands\uff0c\u8fd9\u4e9boperands\u53ef\u80fd\u662f\u4e4b\u524d\u88ab\u79fb\u9664\u6216\u8005\u88ab\u91cd\u65b0\u6620\u5c04\u7684\u64cd\u4f5c\u6570\uff0c\u56e0\u4e3a\u4e00\u4e9b\u64cd\u4f5c\u9700\u8981\u5bf9\u65e7\u7684\u4fe1\u606f\u8fdb\u884c\u5339\u914d")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"/// Lower the `toy.transpose` operation to an affine loop nest.\nstruct TransposeOpLowering : public mlir::ConversionPattern {\n TransposeOpLowering(mlir::MLIRContext *ctx)\n : mlir::ConversionPattern(TransposeOp::getOperationName(), 1, ctx) {}\n\n /// Match and rewrite the given `toy.transpose` operation, with the given\n /// operands that have been remapped from `tensor<...>` to `memref<...>`.\n mlir::LogicalResult\n matchAndRewrite(mlir::Operation *op, ArrayRef operands,\n mlir::ConversionPatternRewriter &rewriter) const final {\n auto loc = op->getLoc();\n\n // Call to a helper function that will lower the current operation to a set\n // of affine loops. We provide a functor that operates on the remapped\n // operands, as well as the loop induction variables for the inner most\n // loop body.\n lowerOpToLoops(\n op, operands, rewriter,\n [loc](mlir::PatternRewriter &rewriter,\n ArrayRef memRefOperands,\n ArrayRef loopIvs) {\n // Generate an adaptor for the remapped operands of the TransposeOp.\n // This allows for using the nice named accessors that are generated\n // by the ODS. This adaptor is automatically provided by the ODS\n // framework.\n TransposeOpAdaptor transposeAdaptor(memRefOperands);\n mlir::Value input = transposeAdaptor.input();\n\n // Transpose the elements by generating a load from the reverse\n // indices.\n SmallVector reverseIvs(llvm::reverse(loopIvs));\n return rewriter.create(loc, input, reverseIvs);\n });\n return success();\n }\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u5c06pattern\u6dfb\u52a0\u5230lowering process\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n ...\n\n // Now that the conversion target has been defined, we just need to provide\n // the set of patterns that will lower the Toy operations.\n mlir::RewritePatternSet patterns(&getContext());\n patterns.add<..., TransposeOpLowering>(&getContext());\n\n // With the target and rewrite patterns defined, we can now attempt the\n // conversion. The conversion will signal failure if any of our *illegal*\n // operations were not converted successfully.\n if (mlir::failed(mlir::applyPartialConversion(getOperation(), target, patterns)))\n signalPassFailure();\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5b9e\u4f8b")),(0,n.kt)("p",null,"\u4ee5\u4e0b\u7684IR\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @main() {\n %0 = toy.constant dense<[[1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]]> : tensor<2x3xf64>\n %2 = toy.transpose(%0 : tensor<2x3xf64>) to tensor<3x2xf64>\n %3 = toy.mul %2, %2 : tensor<3x2xf64>\n toy.print %3 : tensor<3x2xf64>\n toy.return\n}\n")),(0,n.kt)("p",null,"\u88ab\u8f6c\u6362\u4e3a\uff08\u5176\u4e2d\u5305\u542b\u4e00\u4e9bAffine\u4f18\u5316\uff09\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"func.func @main() {\n %cst = arith.constant 1.000000e+00 : f64\n %cst_0 = arith.constant 2.000000e+00 : f64\n %cst_1 = arith.constant 3.000000e+00 : f64\n %cst_2 = arith.constant 4.000000e+00 : f64\n %cst_3 = arith.constant 5.000000e+00 : f64\n %cst_4 = arith.constant 6.000000e+00 : f64\n\n // Allocating buffers for the inputs and outputs.\n %0 = memref.alloc() : memref<3x2xf64>\n %1 = memref.alloc() : memref<2x3xf64>\n\n // Initialize the input buffer with the constant values.\n affine.store %cst, %1[0, 0] : memref<2x3xf64>\n affine.store %cst_0, %1[0, 1] : memref<2x3xf64>\n affine.store %cst_1, %1[0, 2] : memref<2x3xf64>\n affine.store %cst_2, %1[1, 0] : memref<2x3xf64>\n affine.store %cst_3, %1[1, 1] : memref<2x3xf64>\n affine.store %cst_4, %1[1, 2] : memref<2x3xf64>\n\n affine.for %arg0 = 0 to 3 {\n affine.for %arg1 = 0 to 2 {\n // Load the transpose value from the input buffer.\n %2 = affine.load %1[%arg1, %arg0] : memref<2x3xf64>\n\n // Multiply and store into the output buffer.\n %3 = arith.mulf %2, %2 : f64\n affine.store %3, %0[%arg0, %arg1] : memref<3x2xf64>\n }\n }\n\n // Print the value held by the buffer.\n toy.print %0 : memref<3x2xf64>\n memref.dealloc %1 : memref<2x3xf64>\n memref.dealloc %0 : memref<3x2xf64>\n return\n}\n")),(0,n.kt)("h3",{id:"799-lowering-to-llvm"},"7.9.9 Lowering to LLVM"),(0,n.kt)("h3",{id:"7910-mlir-language"},"7.9.10 MLIR Language"),(0,n.kt)("p",null,"MLIR\u662f\u57fa\u4e8egraph-like\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"nodes\uff0c\u79f0\u4e3aOperations"),(0,n.kt)("li",{parentName:"ul"},"edges\uff0c\u79f0\u4e3aValues")),(0,n.kt)("p",null,"\u6bcf\u4e2aValue\u662f\u4e00\u4e2aOperation\u6216\u8005BLock\u7684\u8fd4\u56de\u503c\u53c2\u6570\uff0c\u5176\u4e2dValue Type\u4f7f\u7528\u7c7b\u578b\u7cfb\u7edf\u8fdb\u884c\u5b9a\u4e49\u3002Operation\u5305\u542b Region\uff0cRegion\u5305\u542bBlock\uff0cBlock\u53c8\u5305\u542bOperation\uff0c\u5f62\u6210\u5d4c\u5957\u7ed3\u6784\uff0c\u5176\u4e2d\u7684\u96c6\u5408\u7684\u987a\u5e8f\u7531\u5176\u7ed3\u6784\u51b3\u5b9a\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u987a\u5e8f\u4e0d\u4e00\u5b9a\u6709\u8bed\u4e49\u4e0a\u7684\u610f\u4e49\u3002"),(0,n.kt)("p",null,"Operation\u53ef\u4ee5\u8868\u8ff0\u8bb8\u591a\u4e0d\u540c\u7684\u6982\u5ff5\uff0c\u4ece\u9ad8\u62bd\u8c61\u5c42\u7ea7\u7684\u6982\u5ff5\u5982\u51fd\u6570\u5b9a\u4e49\u3001\u51fd\u6570\u8c03\u7528\u3001buffer\u5206\u914d\u7b49\u7b49\uff0c\u5230\u4f4e\u5c42\u6b21\u7684\u8ddf\u6570\u5b66\u3001\u6307\u4ee4\u3001\u5bc4\u5b58\u5668\u76f8\u5173\u7684\u6982\u5ff5\u7b49\u7b49\u3002\u8fd9\u79cd\u4e0d\u540c\u7684\u6982\u5ff5\u90fd\u53ef\u4ee5\u4f7f\u7528MLIR\u4e2d\u7684operation\u8868\u793a\uff0c\u4f7f\u5f97MLIR\u53ef\u4ee5\u88ab\u4efb\u610f\u6269\u5c55\u3002"),(0,n.kt)("p",null,"MLIR\u540c\u65f6\u8fd8\u63d0\u4f9b\u4e00\u4e2a\u53ef\u6269\u5c55\u7684\u6846\u67b6\u7528\u4e8e\u5b9e\u73b0operation\u7684\u53d8\u6362\uff0c\u8fd9\u4f7f\u7528\u7f16\u8bd1\u5668\u4e2d\u5e38\u7528\u7684Pass\u7684\u6982\u5ff5\u5b9e\u73b0\uff0c\u5728\u4efb\u610f\u7684operation\u96c6\u5408\u4e0a\u5b9e\u73b0\u4efb\u610f\u7684pass\u5bfc\u81f4\u4f38\u7f29\u6027\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u4e2aTransformation\u5fc5\u987b\u8003\u8651\u6bcf\u4e2aoperation\u7684\u8bed\u4e49\u3002MLIR\u901a\u8fc7\u4f7f\u7528Traits\u548cInterfaces\u6765\u62bd\u8c61\u5730\u63cf\u8ff0operation semantics\u6765\u514b\u670d\u8fd9\u4e2a\u95ee\u9898\uff0c\u4f7f\u5f97Transformation\u5728operation\u4e0a\u7684\u64cd\u4f5c\u662f\u66f4\u52a0\u901a\u7528\u7684\u3002\u5176\u5185\u90e8\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u7b5b\u9009\u3002"),(0,n.kt)("h4",{id:"79101-dialects"},"7.9.10.1 Dialects"),(0,n.kt)("p",null,"Dialects are the mechanism by which to engage with and extend the MLIR ecosystem. They allow for defining new ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#operations"},"operations"),", as well as ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"attributes")," and ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#type-system"},"types"),". Each dialect is given a unique ",(0,n.kt)("inlineCode",{parentName:"p"},"namespace")," that is prefixed to each defined attribute/operation/type. For example, the ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/Dialects/Affine/"},"Affine dialect")," defines the namespace: ",(0,n.kt)("inlineCode",{parentName:"p"},"affine"),"."),(0,n.kt)("p",null,"MLIR allows for multiple dialects, even those outside of the main tree, to co-exist together within one module. Dialects are produced and consumed by certain passes. MLIR provides a ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/DialectConversion/"},"framework")," to convert between, and within, different dialects."),(0,n.kt)("h3",{id:"7911-pattern-rewriting"},"7.9.11 Pattern Rewriting"),(0,n.kt)("p",null,"This document details the design and API of the pattern rewriting infrastructure present in MLIR, a general DAG-to-DAG transformation framework. This framework is widely used throughout MLIR for\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"canonicalization, "),(0,n.kt)("li",{parentName:"ul"},"conversion, and "),(0,n.kt)("li",{parentName:"ul"},"general transformation.")),(0,n.kt)("h2",{id:"710-ai"},"7.10 AI"),(0,n.kt)("h3",{id:"7101-apple-shortcuts"},"7.10.1 Apple Shortcuts"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"shortcuts",src:l(1310).Z,width:"2126",height:"982"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u5feb\u6377\u6307\u4ee4\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u5feb\u6377\u6307\u4ee4"),"\u53ef\u8ba9\u4f60\u4f7f\u7528 App \u5feb\u901f\u5b8c\u6210\u4efb\u52a1\uff0c\u53ea\u9700\u8f7b\u70b9\u4e00\u4e0b\u6216\u8be2\u95ee Siri \u5373\u53ef\u3002\u5feb\u6377\u6307\u4ee4\u53ef\u4ee5\u81ea\u52a8\u5316\u5404\u79cd\u4efb\u52a1\uff0c\u4f8b\u5982\uff0c\u83b7\u53d6\u524d\u5f80\u201c\u65e5\u5386\u201d\u4e0a\u4e0b\u4e00\u4e2a\u65e5\u7a0b\u7684\u8def\u7ebf\u3001\u5c06\u6587\u672c\u4ece\u4e00\u4e2a App \u79fb\u5230\u53e6\u4e00\u4e2a App\u3001\u751f\u6210\u652f\u51fa\u62a5\u544a\u7b49\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4f60\u4f7f\u7528 Apple \u8bbe\u5907\u7684\u65b9\u5f0f\uff08App \u4f7f\u7528\u4ee5\u53ca\u6d4f\u89c8\u5668\u3001\u7535\u5b50\u90ae\u4ef6\u548c\u4fe1\u606f\u5386\u53f2\u8bb0\u5f55\uff09\uff0cSiri \u4f1a\u5efa\u8bae\u7b80\u5355\u5b9e\u7528\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u5feb\u901f\u8f7b\u70b9\u5373\u53ef\u8fd0\u884c\u3002\u521b\u5efa\u5feb\u6377\u6307\u4ee4\u540e\uff0c\u4f60\u53ef\u4ee5\u6fc0\u6d3b Siri\uff0c\u7136\u540e\u8bf4\u51fa\u5feb\u6377\u6307\u4ee4\u7684\u540d\u79f0\u4ee5\u8fd0\u884c\u5b83\u3002\u9664\u4e86\u8fd0\u884c Siri \u5efa\u8bae\u7684\u7b80\u5355\u5feb\u6377\u6307\u4ee4\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u5c06\u73b0\u6709\u5feb\u6377\u6307\u4ee4\u6216\u81ea\u5b9a\u5feb\u6377\u6307\u4ee4\u6dfb\u52a0\u5230\u8bbe\u5907\u3002\u8be5 App \u53ef\u8ba9\u4f60\u5408\u5e76\u591a\u4e2a App \u95f4\u7684\u591a\u4e2a\u6b65\u9aa4\uff0c\u4ee5\u521b\u5efa\u529f\u80fd\u5f3a\u5927\u7684\u4efb\u52a1\u81ea\u52a8\u5316\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u64cd\u4f5c\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u64cd\u4f5c"),"\u662f\u5feb\u6377\u6307\u4ee4\u7684\u7ec4\u6210\u90e8\u5206\u3002\u6bcf\u4e00\u4e2a\u5feb\u6377\u6307\u4ee4\u7686\u7531\u4e00\u7cfb\u5217\u64cd\u4f5c\u7ec4\u6210\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u5373\u4e3a\u6267\u884c\u7279\u5b9a\u529f\u80fd\u7684\u4e00\u4e2a\u6b65\u9aa4\u3002\u4f8b\u5982\uff0c\u5171\u4eab\u52a8\u753b GIF \u7684\u5feb\u6377\u6307\u4ee4\u53ef\u80fd\u5305\u542b\u4e09\u4e2a\u8fde\u7eed\u7684\u64cd\u4f5c\uff1a\u201c\u83b7\u53d6\u6700\u65b0\u7684\u7167\u7247\u201d\u4f1a\u6293\u53d6\u4f7f\u7528\u8bbe\u5907\u62cd\u6444\u7684\u6700\u65b0\u7167\u7247\uff0c\u201c\u5236\u4f5c GIF\u201d\u4f7f\u7528\u8fd9\u4e9b\u7167\u7247\u6784\u5efa\u52a8\u753b GIF\uff0c\u201c\u53d1\u9001\u4fe1\u606f\u201d\u4f1a\u81ea\u52a8\u5c06 GIF \u53d1\u9001\u7ed9\u6536\u4ef6\u4eba\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u5206\u89e3\u6210\u8f83\u5c0f\u7684\u90e8\u5206\uff0c\u64cd\u4f5c\u53ef\u5b9e\u73b0 Apple \u8bbe\u5907\u4e0a App \u7684\u6700\u4f73\u529f\u80fd\u3002\u901a\u8fc7\u6570\u767e\u4e2a\u64cd\u4f5c\uff0c\u4f60\u53ef\u4ee5\u5c06\u5404\u79cd\u5355\u72ec\u7684\u6b65\u9aa4\u94fe\u63a5\u5728\u4e00\u8d77\u4ee5\u6784\u5efa\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u81ea\u52a8\u5316\uff1f")),(0,n.kt)("p",null,"\u81ea\u52a8\u5316\u662f\u4e00\u79cd\u7531\u4e8b\u4ef6\u6fc0\u6d3b\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u800c\u975e\u624b\u52a8\u542f\u52a8\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u8bbe\u7f6e\u4e2a\u4eba\u6216\u5bb6\u5ead\u81ea\u52a8\u5316\uff0c\u7136\u540e\u901a\u8fc7\u5230\u8fbe\u3001\u79bb\u5f00\u3001\u66f4\u6539 iPhone \u4e0a\u7684\u8bbe\u7f6e\u548c\u4e00\u5929\u4e2d\u7684\u67d0\u4e2a\u65f6\u95f4\u7b49\u4e8b\u4ef6\u89e6\u53d1\u81ea\u52a8\u5316\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("h2",{id:"711-slack"},"7.11 Slack"),(0,n.kt)("h1",{id:"8-programming-language"},"8. Programming Language"),(0,n.kt)("h2",{id:"81-script-languages"},"8.1 Script languages"),(0,n.kt)("h3",{id:"811-skookumscript"},"8.1.1 SkookumScript"),(0,n.kt)("p",null,"SkookumScript uses a ",(0,n.kt)("a",{parentName:"p",href:"http://en.wikipedia.org/wiki/Multi-pass_compiler"},"multi-pass compiler")," to determine what files and components are needed, and automatically manages them in the memory of the parser and runtime, so aspects such as dependencies are always up-to-date."),(0,n.kt)("h4",{id:"8111-time-flow-logic"},"8.1.1.1 Time-flow logic"),(0,n.kt)("p",null,"Coroutines and methods\nCommands that may take time (multiple frames) to complete are called ",(0,n.kt)("em",{parentName:"p"},"coroutines")," and have identfier names that must start with an underscore ",(0,n.kt)("inlineCode",{parentName:"p"},"_"),". Commands that start without an underscore such as ",(0,n.kt)("inlineCode",{parentName:"p"},"println()")," complete immediately (within the same frame) and are called ",(0,n.kt)("em",{parentName:"p"},"methods"),"."),(0,n.kt)("h4",{id:"7112-conditional-flow-control"},"7.1.1.2 Conditional flow control"),(0,n.kt)("h3",{id:"812-lua"},"8.1.2 Lua"),(0,n.kt)("p",null,'It provides "meta language" features. You can implement object-oriented structures, or pure procedural functions, etc. It has a very simple C interface, and gives the engine developer a lot of flexibility in the language itself.'),(0,n.kt)("p",null,"Artists tend to love Lua too because it's very approachable, with plain and forgiving syntax. If your codebase is C or C++, I would highly recommend it."),(0,n.kt)("p",null,"It has good runtime performance when compared to other scripting languages like Python. (...and it has full support for closures.)"),(0,n.kt)("p",null,"It has a small memory footprint (approx 150k), it has excellent C/C++ bindings making it easy to add new game specific APIs, it is easy to pick up, it is flexible - i.e Has elements of OO, imperative and functional - none of which are mandatory, it has good buy-in from from mod community from games such as WoW etc."),(0,n.kt)("p",null,"\u7b80\u5355\u7684\u8bf4\uff0cregister-based\u7684\u6307\u4ee4\u683c\u5f0f\u8bbe\u8ba1\u628astack-based\u7684\u6307\u4ee4\u4e2d\u5206\u51e0\u6761\u6307\u4ee4\u8981\u5b8c\u6210\u7684\u4e8b\u60c5\u7528\u4e00\u6761\u6307\u4ee4\u641e\u5b9a\u4e86\uff0c\u5feb\u5f53\u7136\u662f\u5feb\u4e86\uff0c\u96be\u5ea6\u4e5f\u52a0\u5927\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u8fd8\u6709\u4e00\u70b9\u4e0a\u9762\u7684\u56de\u7b54\u4e2d\u4f3c\u4e4e\u6ca1\u6709\u63d0\u5230\uff0cLua\u4f7f\u7528\u7684\u662f\u4e00\u904d\u904d\u5386\u5c31\u751f\u4ea7\u6307\u4ee4\u7684\u65b9\u5f0f\uff0c\u5b66\u8fc7\u7f16\u8bd1\u539f\u7406\u7684\uff0c\u5927\u6982\u90fd\u80fd\u77e5\u9053\u4e00\u822c\u5206\u4e24\u904d\u904d\u5386\uff0c\u7b2c\u4e00\u904d\u751f\u6210AST\uff0c\u518d\u4e00\u904d\u904d\u5386AST\u751f\u6210\u6307\u4ee4\uff0c\u800c\u5728Lua\u4e2d\u662f\u76f4\u63a5\u8df3\u8fc7\u4e86AST\u6307\u4ee4\u8fd9\u4e00\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5feb\u662f\u5feb\u4e86\uff0c\u4ee3\u7801\u7684\u5b9e\u73b0\u96be\u5ea6\u4e5f\u5927\u4e86\u4e9b\u3002\u6700\u65e9\u7684Lua\u89e3\u91ca\u5668\uff0c\u4e5f\u662f\u4f7f\u7528lex\u3001yacc\u8fd9\u6837\u7684\u5de5\u5177\u6765\u81ea\u52a8\u751f\u6210\u4ee3\u7801\u7684\uff0c\u540e\u6765\u4e3a\u4e86\u63d0\u5347\u6027\u80fd\uff0c\u4f5c\u8005\u6539\u6210\u4e86\u81ea\u5df1\u624b\u5199\u7684\u9012\u5f52\u4e0b\u964d\u7684\u5206\u6790\u5668\u3002\u8fd9\u90e8\u5206\u4ee3\u7801\u662f\u6211\u8ba4\u4e3aLua\u4ee3\u7801\u4e2d\u6700\u96be\u7406\u89e3\u7684\u4e00\u4e2a\u90e8\u5206\u4e86--\u56e0\u4e3a\u5b83\u8981\u4e00\u904d\u5206\u6790\u5e72\u592a\u591a\u7684\u4e8b\u60c5\u4e86\u3002"),(0,n.kt)("p",null,"\u6211\u5728\u9605\u8bfbLua\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u80fd\u5145\u5206\u611f\u53d7\u5230\u4f5c\u8005\u4e3a\u4e86Lua\u5728\u6027\u80fd\u4e0a\u7684\u63d0\u5347\u82b1\u8d39\u7684\u5fc3\u8840\uff0c\u81f4\u656c\u3002"),(0,n.kt)("p",null,"\u629b\u5f00\u7406\u8bba\u4e0d\u8c08\uff0c\u5982\u679c\u8981\u5728 Lua \u4e2d\u5b9e\u8df5\uff0c\u6211\u4eec\u5230\u5e95\u53ef\u4ee5\u505a\u70b9\u4ec0\u4e48\u5462\uff1f"),(0,n.kt)("p",null,"\u6211\u8ba4\u4e3a\u9700\u8981\u6709\u8fd9\u51e0\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u5e94\u8be5\u5bf9 Lua \u52a0\u5f3a\u7c7b\u578b\u7cfb\u7edf\u3002Lua \u7684\u52a8\u6001\u6027\u5929\u7136\u652f\u6301\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u805a\u5408\u5728\u4e00\u8d77\uff0c\u6211\u4eec\u628a\u4e0d\u540c\u7684 Component \u653e\u5728\u4e00\u5f20\u8868\u91cc\u7ec4\u5408\u6210 Entity \u5c31\u8db3\u591f\u4e86\u3002\u4f46\u5982\u679c Component \u5206\u7684\u5f88\u7ec6\u7684\u8bdd\uff0c\u7528\u5f88\u591a\u7684\u8868\u7ec4\u5408\u6210\u4e00\u4e2a Entity \u5bf9\u8c61\u7684\u989d\u5916\u5f00\u9500\u4e0d\u5c0f\u3002\u4e0d\u50cf C++ \uff0c\u7ed3\u6784\u4f53\u805a\u5408\u7684\u989d\u5916\u5f00\u9500\u51e0\u4e4e\u4e3a\u96f6\u3002\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u4e0d\u540c Component \u7684\u6570\u636e\u76f4\u63a5\u5e73\u5766\u653e\u5728\u4e00\u4e2a table \u4e2d\uff0c\u53ea\u8981\u952e\u503c\u4e0d\u51b2\u7a81\u5373\u53ef\u3002\u4f46\u662f\u6211\u4eec\u9700\u8981\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\u65b9\u4fbf\u8fd0\u884c\u65f6\u4ece Entity \u4e2d\u8403\u53d6\u51fa Component \u6765\u3002\u53e6\u5916\uff0c\u5982\u679c\u662f C / Lua \u6df7\u5408\u8bbe\u8ba1\u7684\u8bdd\uff0c\u67d0\u4e9b Component \u8fd8\u5e94\u8be5\u53ef\u4ee5\u662f userdata \u3002"),(0,n.kt)("p",null,"\u4ece\u8282\u7701\u7a7a\u95f4\u53ca\u65b9\u4fbf\u904d\u5386\u7684\u89d2\u5ea6\u8bb2\uff0c\u6211\u4eec\u751a\u81f3\u53ef\u4ee5\u628a\u540c\u7c7b\u7684 C Component \u805a\u5408\u5728\u4e00\u5927\u5757\u5185\u5b58\u4e2d\uff0c\u7136\u540e\u5728 Entity \u7684 table \u4e2d\u53ea\u4fdd\u7559\u4e00\u4e2a lightuserdata \u5373\u53ef\u3002ECS \u7684 System \u6700\u91cd\u8981\u7684\u64cd\u4f5c\u5c31\u662f\u904d\u5386\u5904\u7406\u540c\u7c7b Component \uff0c\u8fd9\u6837\u5929\u7136\u5c31\u53ef\u4ee5\u5206\u4e3a C System \u548c Lua System \u3002\u6570\u636e\u7684\u5185\u805a\u6027\u5f88\u9ad8\uff0c\u53ef\u4ee5\u76f4\u63a5\u533a\u5206\u5f00 C data \u548c Lua Data \u3002"),(0,n.kt)("p",null,"\u7136\u540e\u3001\u5c31\u662f\u65b9\u4fbf\u7684\u904d\u5386\u3002ECS \u7684 System \u9700\u8981\u505a\u7684\u5c31\u662f\u7b5b\u9009\u51fa\u5b83\u5173\u5fc3\u7684 Entity \uff0c\u9488\u5bf9\u5176\u4e2d\u7684 Component \u505a\u64cd\u4f5c\u3002\u5982\u679c\u9700\u8981\u7b5b\u9009\u7ed3\u679c\u5927\u5927\u5c11\u4e8e\u5168\u4f53 Entity \u6570\u91cf\uff0c\u904d\u5386\u9010\u4e2a\u5224\u65ad\u5c31\u4f1a\u6548\u7387\u5f88\u4f4e\u3002\u597d\u5728\u5728 Lua \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u5bb9\u6613\u5730\u505a\u51fa cache \uff0c\u53ea\u9700\u8981\u904d\u5386\u7b5b\u9009\u4e00\u6b21\uff0c\u5728\u76d1\u63a7\u65b0\u7684 Component \u7684\u8bde\u751f\u5c31\u53ef\u4ee5\u65b9\u4fbf\u7684\u7ef4\u62a4\u904d\u5386\u7528\u7684\u96c6\u5408\u4e86\u3002"),(0,n.kt)("p",null,"Squirrel"),(0,n.kt)("p",null,"\u53d7lua\u5f71\u54cd\u6700\u5927\uff0c\u4f46\u98ce\u683c\u662fC/C++\u98ce\u683c\u7684\uff0c\u5728lua\u57fa\u7840\u4e0a\u6dfb\u52a0\u4e86class\uff0carray\u7b49"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://squirrel-lang.org/#overview"},"http://squirrel-lang.org/#overview")),(0,n.kt)("p",null,"V8 JavaScript from Google"),(0,n.kt)("h3",{id:"813-gamemonkey"},"8.1.3 GameMonkey"),(0,n.kt)("p",null,"This one is used by several teams. It's faster than Lua and better at threading."),(0,n.kt)("p",null,"\u6ca1\u6709\u7ef4\u62a4\u4e86"),(0,n.kt)("h3",{id:"814-python"},"8.1.4 Python"),(0,n.kt)("p",null,"This one has been used in several games (e.g. Civilization IV)."),(0,n.kt)("p",null,"It is very easy to teach to non-programmers/designers. It is even easier to pick up for developers since it essentially reads like pseudocode. Being dynamically typed is just one of the aspects that help to get people with little to no prior coding experience up and running fast with the language."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The C bindings for python are much more geared towards extending python with C, than embedding python in C.")),(0,n.kt)("h3",{id:"815-javascript"},"8.1.5 JavaScript"),(0,n.kt)("h3",{id:"816-typescript"},"8.1.6 TypeScript"),(0,n.kt)("h3",{id:"817-scumm"},"8.1.7 SCUMM"),(0,n.kt)("h3",{id:"818-mono-script"},"8.1.8 Mono-script"),(0,n.kt)("p",null,"The Mono framework is faster than most (perhaps all?) of scripting languages out there because it's not interpreted, and because there's a layer between the compiler and the instruction set, it allows you to program in a variety of languages including C# and dialects of Python, Lua and Javascript."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"If you're doing console development (including iOS), JITing code is apparently out of the question because you can't mark data pages as executable. The IL it has to be pre-compiled to the target platform."),(0,n.kt)("li",{parentName:"ul"},"Mono has license restrictions. You need a commercial license if you want to use it in an environment where the end user is not allowed/able to upgrade the Mono runtime.")),(0,n.kt)("h3",{id:"819-angelscript"},"8.1.9 AngelScript"),(0,n.kt)("h3",{id:"8110-schemeguile"},"8.1.10 Scheme/Guile"),(0,n.kt)("p",null,"With guile you can have your own DSL (Domain Specific Language) just for your game. Once you get used to the parentheses and prefix notation, scheme is heaven to work with."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://www.gnu.org/software/guile/"},"http://www.gnu.org/software/guile/")),(0,n.kt)("p",null,"libguile "),(0,n.kt)("p",null,"Guile also provides an object library, libguile, that allows other applications to easily incorporate a complete Scheme interpreter. "),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u59cb\u7ec8\u5b9a\u4f4d\u4e3a\u4e00\u4e2a\u6269\u5c55\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"Guile\u4f7f\u7528\u4fdd\u5b88\u5783\u573e\u56de\u6536\uff0cconservative garbage collection "),(0,n.kt)("li",{parentName:"ul"},"it implements the Scheme concept of continuations by copying and reinstating the C stack\u2014but whose practical consequence is that most existing C code can be glued into Guile as is, without needing modifications to cope with strange Scheme execution flows. "),(0,n.kt)("li",{parentName:"ul"},"Module system\uff0c\u5b83\u4f7f\u5f97extensions\u53ef\u4ee5\u4e0e\u4e4b\u524d\u7684\u6a21\u5757\u5171\u5b58")),(0,n.kt)("p",null,"\u6700\u5f00\u59cb\u662f\u57fa\u4e8eEmacs Lisp\u4f5c\u4e3aEmacs\u6269\u5c55\u8bed\u8a00\u7684\u5de8\u5927\u6210\u529f\uff0cGNU Project\u63d0\u51fa\u4e00\u79cd\u5e0c\u671b\u53ef\u4ee5\u5bf9\u6240\u6709GNU \u5e94\u7528\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u5b9e\u73b0\u7c7b\u4f3c\u529f\u80fd\u7684\u8bed\u8a00"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"1.5 Supporting Multiple Languages")," "),(0,n.kt)("p",null,"Since the 2.0 release, Guile\u2019s architecture supports compiling any language to its core virtual machine bytecode, and Scheme is just one of the supported languages. Other supported languages are Emacs Lisp, ECMAScript (commonly known as Javascript) and Brainfuck, and work is under discussion for Lua, Ruby and Python. "),(0,n.kt)("p",null,"This means that users can program applications which use Guile in the language of their choice, rather than having the tastes of the application\u2019s author imposed on them. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.4 Writing Guile Extensions")," "),(0,n.kt)("p",null,"You can link Guile into your program and make Scheme available to the users of your program. You can also link your library into Guile and make its functionality available to all users of Guile. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.5 Using the Guile Module System")," "),(0,n.kt)("p",null,"Guile has support for dividing a program into modules. By using modules, you can group related code together and manage the composition of complete programs from largely in- dependent parts. "),(0,n.kt)("p",null,"Module\u4e4b\u95f4\u662f\u600e\u4e48\u901a\u4fe1\u7684\uff1f\u5b8c\u5168\u72ec\u7acb\u5417\uff1f"),(0,n.kt)("p",null,"3.1.1 Latent Typing "),(0,n.kt)("p",null,"\u6ca1\u6709\u529e\u6cd5\u4e3a\u4e00\u4e2a\u53d8\u91cf\u5b9a\u4e49\u7c7b\u578b\uff0c\u4ee5\u53ca\u4e3a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u5b9a\u4e49\u8fd4\u56de\u7c7b\u578b\uff0c\u6240\u6709\u7684\u53d8\u91cf\u548c\u8868\u8fbe\u5f0f\u90fd\u5fc5\u987b\u5728runtime\u7684\u65f6\u5019\u786e\u5b9a\uff0c\u4e00\u4e2a\u53d8\u91cf\u7684\u540d\u5b57x\u53ea\u4e0d\u8fc7\u8868\u793a\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u540c\u65f6\u7531\u4e8e\u53d8\u91cf\u6ca1\u6709\u7c7b\u578b\uff0c\u6240\u4ee5\u53ef\u4ee5\u8d4b\u4e88\u65b0\u7684\u7c7b\u578b\u7684\u503c"),(0,n.kt)("p",null,"3.2.1 Procedures as Values\n\u8ddf\u5176\u4ed6\u53d8\u91cf\u4e00\u6837\u5904\u4e8e\u540c\u4e00\u4e2a\u7a7a\u95f4\uff0c\u6240\u4ee5\u4f60\u751a\u81f3\u53ef\u4ee5\u5bf9\u4e00\u4e2aprocedure\u4f7f\u7528\u4e00\u4e2a\u4e0d\u540c\u7684\u540d\u5b57"),(0,n.kt)("p",null,"5.7 An Overview of Guile Programming "),(0,n.kt)("p",null,"5.7.1.2 Four Steps Required to Add Guile "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"First, \u5728Guile\u4e2drepresent\u5e94\u7528\u7a0b\u5e8f\u5bf9\u8c61\uff0c\u9664\u975e\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u5185\u7f6e\u6570\u636e\u7c7b\u578b\u5982\u6570\u5b57\uff0c\u5426\u5219\u6211\u4eec\u9700\u8981\u4f7f\u7528foreign object interface\u521b\u9020\u5bf9\u5e94\u7684Scheme\u6570\u636e\u7c7b\u578b\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u53d7\u5783\u573e\u56de\u6536\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"Second\u7f16\u5199\u53ef\u4ee5\u88abGuile\u8bbf\u95ee\u7684operations"),(0,n.kt)("li",{parentName:"ul"},"Third,\u5728\u5bbf\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u9700\u8981\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8c03\u7528\u6dfb\u52a0\u8fdb\u6765\u7684Guile\u65b9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"Finally,\u5728\u5e94\u7528\u7a0b\u5e8f\u7684top-level\uff0c\u9700\u8981\u505a\u4e00\u4e9b\u7ed3\u6784\u8c03\u6574\uff0c\u4f7f\u5f97\u53ef\u4ee5\u521d\u59cb\u5316Guile\u7684\u89e3\u91ca\u5668\uff0c\u4ee5\u53ca\u4e3aScheme\u5b9a\u4e49foreign objects\u548cprimitives")),(0,n.kt)("p",null,"5.7.1.3 How to Represent Dia Data in Scheme "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u8868\u8ff0\u5fc5\u987b\u80fd\u591f\u88ab\u539f\u59cb\u8bed\u8a00decodable\uff0c\u56e0\u4e3a\u539f\u751f\u8bed\u8a00\u9700\u8981\u83b7\u53d6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"The representation must also cope with Scheme code holding on to the value for later use. "),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u6570\u636e\u540c\u65f6\u88abC\u548cScheme\u8bbf\u95ee\uff0c\u4e0d\u80fd\u53ea\u662f\u7b80\u5355\u5730\u4f7f\u7528\u5783\u573e\u56de\u6536\u673a\u5236")),(0,n.kt)("p",null,"One resolution of these issues is for the Scheme-level representation of a shape to be a new, Scheme-specific C structure wrapped up as a foreign object. The foreign object is what is passed into and out of Scheme code, and the Scheme-specific C structure inside the foreign object points to Dia\u2019s underlying C structure so that the code for primitives like square? can get at it. "),(0,n.kt)("p",null,"9 Guile Implementation "),(0,n.kt)("h3",{id:"8111-actionscript"},"8.1.11 ActionScript"),(0,n.kt)("p",null,"This is a hybrid dynamic/static typed language used to create Flash games, which can be widely distributed on the web. It is fairly well supported with libraries like Flixel, FlashPunk and Box2d."),(0,n.kt)("h3",{id:"8112-mruby"},"8.1.12 mruby"),(0,n.kt)("h2",{id:"82-erlang"},"8.2 Erlang"),(0,n.kt)("p",null,"Erlang \u7b97\u4e0d\u4e0a\u51b7\u95e8\uff0c\u81f3\u5c11\u4f60\u8fd8\u77e5\u9053\u540d\u5b57\uff0c\u5f88\u591a\u4f60\u8fde\u540d\u5b57\u90fd\u6ca1\u542c\u8fc7\u7684\u624d\u7b97\u51b7\u95e8\u3002\uff08\u4f46\u662f\u5f88\u591a\u51b7\u95e8\u7684\u8bbe\u8ba1\u7406\u5ff5\u5374\u975e\u5e38\u5148\u8fdb\uff09"),(0,n.kt)("p",null,"Erlang \u5728\u9ad8\u5e76\u53d1\u65b9\u9762\u6709\u4f18\u52bf\u8fd9\u4e2a\u8bf4\u6cd5\uff0c\u5176\u5b9e\u975e\u5e38\u7247\u9762\u3002Erlang \u6700\u725b\u903c\u7684\u5730\u65b9\u662f\u5b83\u662f\u76ee\u524d\u552f\u4e00\u4e00\u4e2a\u5177\u5907\u8f6f\u5b9e\u65f6\uff08Software Realtime\uff09\u7ea7\u522b\u7684\u7cfb\u7edf\u3002Java \u6a21\u4eff\u4e0d\u4e86\uff0cGo \u6a21\u4eff\u4e0d\u4e86\u3002\u5f53\u7136\u5982\u679c\u4f60\u8981\u7528 C/Rust \u4e4b\u7c7b\u6765\u505a\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u662f\u5176\u5b9e\u5c31\u662f\u628a Erlang \u518d\u505a\u4e00\u904d\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u8f6f\u5b9e\u65f6\u6307\u7684\u662f\u5783\u573e\u56de\u6536\u6027\u80fd\u5e73\u7a33\u3002\u5982\u679c\u505a\u8bed\u97f3\u7c7b\u5e94\u7528\uff0c\u9700\u8981\u7f51\u7edc\u4f20\u8f93\u8fc7\u7a0b\u4e0d\u4f1a\u56e0\u4e3a GC \u56de\u6536\u5bfc\u81f4\u5ef6\u8fdf\u6296\u52a8\uff0cErlang \u662f\u4f60\u7684\u5f00\u7bb1\u5373\u7528\u7684\u6700\u4f73\u9009\u62e9\uff0c\u6ca1\u6709\u4e4b\u4e00\u3002"),(0,n.kt)("p",null,"\u201c\u542c\u8d77\u6765\u4e5f\u6ca1\u591a\u725b\u903c\u3002\u4e0d\u5c31\u662f GC \u6280\u672f\u7684\u4f18\u5316\u561b\u3002\u6211\u641e\u4e2a\u5e76\u53d1\u5f0f GC \u7b97\u6cd5\u4e0d\u5c31\u884c\u4e86\uff1f\u201c\u2014\u2014\u8bf4\u8fd9\u8bdd\u7684\uff0c\u53ea\u80fd\u8bf4\u7b2c\u4e00\u5e76\u4e0d\u4e86\u89e3 GC\uff0c\u7b2c\u4e8c\u4e5f\u6839\u672c\u4e0d\u77e5\u9053 Erlang \u7684\u6050\u6016\u4e4b\u5904\u3002\u53ea\u80fd\u8bf4\u670b\u53cb\uff0c\u4f60\u5bf9\u529b\u91cf\u4e00\u65e0\u6240\u77e5\u3002\u8fd9\u91cc\u4e0d\u60f3\u5c55\u5f00\u516b\u767e\u5b57\u590d\u8bfb\u673a\u5f0f\u4ecb\u7ecd\u3002\u81ea\u5df1\u53ef\u4ee5\u770b\u770b Erlang VM \u7684\u8bbe\u8ba1\u4ecb\u7ecd\u3002\u4f60\u4f1a\u660e\u767d\u4e3a\u4ec0\u4e48 Erlang \u91cc\u7684 GC \u624d\u662f\u771f\u6b63\u5b8c\u5168\u5e76\u884c\uff0c\u7edd\u65e0 Stop the World \u53ef\u80fd\uff0c\u800c\u4e14\u56de\u6536\u5ef6\u8fdf\u67d4\u6027\u53ef\u9884\u6d4b\u7684\u3002\u8fd9\u4e00\u5207\u4e0d\u662f\u6ca1\u6709\u4ee3\u4ef7\u7684\uff0c\u4ee3\u4ef7\u5c31\u662f\u53d8\u91cf\u5fc5\u987b\u7edd\u4e0d\u80fd\u88ab\u5171\u4eab\uff0c\u800c\u4e14\u4e0d\u80fd\u88ab\u4fee\u6539\u3002\u8fd9\u4e00\u6765 Java \u4e4b\u7c7b\u7684 C \u5bb6\u65cf\u8bed\u8a00\u8fd8\u73a9\u4e2a\u5565\uff0c\u51c9\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u4e00\u4e9b\u56de\u7b54\u91cc\uff0c\u770b\u4e86\u4e00\u5708\uff0c\u5176\u5b9e\u5f88\u591a\u4e5f\u53ea\u662f\u968f\u4fbf\u7528\u4e86\u4e00\u4e0b\u8bd5\u8bd5\u3002\u8bf4\u51e0\u4e2a\u70b9\uff1a"),(0,n.kt)("p",null,"1\u3001Erlang \u662f\u5b98\u65b9\u81ea\u5e26\u4e00\u5957\u9759\u6001\u7c7b\u578b\u5206\u6790\u7cfb\u7edf\u7684\u2014\u2014",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=dialyzer&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"dialyzer"),"\uff0c\u4f60\u4e0d\u9700\u8981\u5b8c\u5168\u6807\u6ce8\u6240\u6709\u7c7b\u578b\uff0c\u672a\u6807\u6ce8\u7684\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\uff1b\u5b98\u65b9\u5efa\u8bae\u4f60\u5728\u6240\u6709\u9879\u76ee\u91cc\u90fd\u9ed8\u8ba4\u4f7f\u7528\u5b83\u6765\u68c0\u67e5\u9879\u76ee\uff0c\u5982\u679c\u4f60\u9075\u5faa\u8fd9\u4e2a\u5efa\u8bae\uff0c\u90a3\u4e48\u4f60\u8fd8\u80fd\u4eab\u53d7\u81ea\u52a8\u751f\u6210\u6587\u6863\u7684\u597d\u5904\uff1b\u800c\u4e14\u5b98\u65b9\u6807\u51c6\u5e93\u91cc\u4e5f\u90fd\u5199\u4e86\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u4ec0\u4e48 Erlang \u6ca1\u6709\u628a\u9759\u6001\u7c7b\u578b\u5206\u6790\u4f5c\u4e3a\u5439\u7684\u70b9\uff1f"),(0,n.kt)("p",null,"\u56e0\u4e3a\u9759\u6001\u7c7b\u578b\u7cfb\u7edf\uff08\u7f16\u8bd1\u671f\u68c0\u67e5\uff09\u5176\u5b9e\u6709\u5176\u5c40\u9650\u6027\uff0c\u7279\u522b\u662f\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e0b\uff0c\u4e24\u4e2a\u7cfb\u7edf A \u548c B\uff0c\u5047\u8bbe\u67d0\u6570\u636e\u7c7b\u578b\u505a\u4e86\u5347\u7ea7\uff0c\u90a3\u4e48\u5b9e\u9645\u7cfb\u7edf\u5347\u7ea7\u91cc\uff0c\u4f1a\u51fa\u73b0 A \u5347\u7ea7\u4e86\uff0cB \u8fd8\u5904\u4e8e\u65e7\u7248\u672c\u7684\u60c5\u51b5\u3002\u8fd9\u4e2a\u65f6\u5019\u8fd8\u6709\u4e2a\u5c41\u7684\u7c7b\u578b\u4e00\u81f4\u3002\u6240\u4ee5\u4f9d\u8d56\u4e8e\u9759\u6001\u7c7b\u578b\u5206\u6790\u4fdd\u91cd\u7cfb\u7edf\u4e00\u81f4\uff0c\u53ea\u80fd\u5bf9\u4e8e\u5355\u4e2a\u975e\u5206\u5e03\u5f0f\u7cfb\u7edf\u6bd4\u8f83\u597d\u3002\u5bf9\u4e8e\u771f\u5b9e\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u8bbe\u8ba1\u51fa\u53d1\u70b9\u6839\u672c\u4e0d\u662f\u7c7b\u578b\u4e00\u81f4\u3002\u800c\u662f\u5373\u4f7f\u4e0d\u4e00\u81f4\uff0c\u4e5f\u8981\u80fd\u5bb9\u5fcd\u3002\u8fd9\u5c31\u662f\u53e6\u5916\u4e00\u4e2a\u8bdd\u9898\u4e86\u3002"),(0,n.kt)("p",null,"\u989d\u5916\u63d0\u4e00\u53e5\uff0cErlang \u7684\u7c7b\u578b\u7cfb\u7edf\u662f\u5728\u4e0d\u5141\u8bb8\u4f60\u81ea\u5df1\u5b9a\u4e49\u65b0\u7c7b\u578b\u7684\u57fa\u7840\u4e0a\uff0c\u5374\u80fd\u591f\u5b8c\u7f8e\u7684\u6ee1\u8db3\u4f60\u7684\u7c7b\u578b\u8981\u6c42\u7684\u8bbe\u8ba1\u3002\u8bf4\u771f\u7684\uff0c\u6ca1\u6709\u4eba\u548c\u6211\u63d0\u8fc7\u8fd9\u4e00\u70b9\uff0c\u4f46\u662f\u5f53\u6709\u4e00\u5929\u6211\u7a81\u7136\u610f\u8bc6\u5230\u7684\u65f6\u5019\uff0c\u90a3\u4e00\u77ac\u95f4\u662f\u6781\u5176\u9707\u60ca\u7684\u2026\u2026\uff08\u60f3\u60f3 Haskell\uff09"),(0,n.kt)("p",null,"2\u3001Erlang \u81ea\u5e26",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%BA%90%E4%BB%A3%E7%A0%81&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6e90\u4ee3\u7801"),"\u53d8\u6362\u7cfb\u7edf\uff0c\u8fd9\u73a9\u610f\u513f\u7528\u4eba\u8bdd\u8bf4\u5c31\u662f\uff0c\u4f60\u53ef\u4ee5\u5bf9\u4f60\u81ea\u5df1\u7684\u6e90\u4ee3\u7801\u8fdb\u884c\u53d8\u6362\u3002\u6bd4\u5982 Erlang \u5b98\u65b9\u81ea\u5df1\u7684 EUnit \u5e93\uff0c\u5b83\u662f\u4e00\u4e2a\u5355\u5143\u6d4b\u8bd5\u5e93\u3002\u5b83\u7684\u539f\u7406\u662f\u4ec0\u4e48\uff1f\u5b9e\u9645\u4e0a\u5c31\u662f\u5f53\u4f60\u5f15\u7528 EUnit \u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u5bfc\u81f4\u4f60\u7684\u5f53\u524d\u6a21\u5757\u589e\u52a0\u4e00\u4e2a parse_transform \u6807\u8bb0\u3002\u7136\u540e\u7f16\u8bd1\u671f\u5c31\u77e5\u9053\u8fd9\u4e2a\u6a21\u5757\u9700\u8981\u88ab\u5916\u90e8\u91cd\u5199\u3002\u6700\u7ec8\u5b9e\u9645\u4e0a\u662f\u4ea4\u7ed9 eunit_autoexport \u6a21\u5757\u6765\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u4e0d\u662f\u7279\u6743\u3002\u4f60\u81ea\u5df1\u4e5f\u53ef\u4ee5\u7528\u3002\u4f46\u662f\u8fd9\u4e2a feature \u786e\u5b9e\u6bd4\u8f83\u9ad8\u7ea7\uff0c\u6bd4\u8f83\u5c11\u6709\u4eba\u8ba8\u8bba\u3002"),(0,n.kt)("p",null,"\u524d\u7aef\u5de5\u7a0b\u5e08\u719f\u6089\u7684 Babel \u5176\u5b9e\u505a\u7684\u5c31\u662f\u8fd9\u4ef6\u4e8b\u3002\u53ea\u4e0d\u8fc7\u5dee\u522b\u5728\u4e8e\uff0cErlang \u76f4\u63a5\u628a\u8fd9\u4e2a\u505a\u5230\u4e86\u5185\u90e8\u800c\u5df2\u3002\u800c\u4e14\u975e\u5e38\u7b80\u6d01\u3002\u5927\u90e8\u5206\u65f6\u5019\u90fd\u7528\u4e0d\u5230\u8fd9\u4e2a\u3002\u5f53\u65f6\u5f53\u4f60\u6709\u90a3\u4e48\u4e00\u4e24\u4e2a feature \u771f\u7684\u9700\u8981\u7528\u725b\u5200\u7684\u65f6\u5019\uff0c\u4f60\u4e00\u5b9a\u4f1a\u53d1\u51fa\u5367\u69fd\u592a\u723d\u4e86\u7684\u8bc4\u4ef7\u3002"),(0,n.kt)("p",null,"3\u3001Erlang \u7684\u6a21\u5757\u7cfb\u7edf\u662f\u6211\u89c1\u8fc7\u6700\u4eba\u6027\u5316\u7684\uff0c\u7b80\u5355\u5230\u5c0f\u5b66\u751f\u90fd\u80fd\u660e\u767d\u3002\u4f60\u4e0d\u9700\u8981 ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=import&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"import")," \u4efb\u4f55\u6a21\u5757\u3002\u4f60\u60f3\u4f7f\u7528\uff0c\u5c31\u76f4\u63a5\u4f7f\u7528\u3002Erlang \u4f1a\u4e3a\u4f60\u81ea\u52a8\u5bfb\u627e\u5e76\u52a0\u8f7d\u3002\u670b\u53cb\u4eec\uff0c\u5176\u4ed6\u8bed\u8a00\u5934\u90e8\u90a3\u4e00\u5806 import \u600e\u4e48\u8bf4\u5462\uff0c\u771f\u7684\u662f\u8131\u88e4\u5b50\u653e\u5c41\u7684\u5b58\u5728\u3002\u56e0\u4e3a Erlang \u7684\u8bed\u6cd5\u4fdd\u8bc1\u4e86\uff0c\u80fd\u591f\u7b80\u5355\u7684\u626b\u63cf\u5f53\u524d\u6587\u4ef6\u5c31\u80fd\u63a8\u5bfc\u51fa\u5230\u5e95\u4f7f\u7528\u4e86\u54ea\u4e9b\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u53ef\u4ee5\u5728\u4e0d\u505c\u6b62\u7cfb\u7edf\u7684\u60c5\u51b5\u4e0b\u5b89\u5168\u7684\u70ed\u5347\u7ea7\u3002\u662f\u7684\uff0c",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%83%AD%E5%8D%87%E7%BA%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u70ed\u5347\u7ea7"),"\u5176\u5b9e Python\u3001JavaScript \u4e4b\u7c7b\u7684\u7528\u70b9 Hack \u5c0f\u6280\u5de7\uff0c\u4e5f\u80fd\u6a21\u4eff\u4e2a\u4e03\u516b\u5206\u3002\u95ee\u9898\u662f\u6ca1\u6709\u4e00\u4e2a\u6562\u8bf4\u201c\u5b89\u5168\u201d\u3002\u56e0\u4e3a Erlang \u7684\u6a21\u5757\u70ed\u5347\u7ea7\u662f\u591a\u7248\u672c\u5e76\u5b58\u7684\u3002\u5047\u8bbe\u4e00\u4e2a\u8fdb\u7a0b\u771f\u6b63\u8dd1\uff0c\u5b83\u4f7f\u7528\u7684\u662f\u8001\u7248\u672c\u6a21\u5757\u3002\u90a3\u4e48\u5347\u7ea7\u7684\u65f6\u5019\uff0c\u65b0\u8fdb\u7a0b\u4f1a\u4f7f\u7528\u65b0\u7248\u672c\u3002\u4e92\u4e0d\u5e72\u6270\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u65b0\u7248\u672c\u5e26\u6765\u4e86\u65b0\u95ee\u9898\uff0c\u4f60\u8fd8\u53ef\u4ee5\u65e0\u7f1d\u7684\u964d\u56de\u53bb\u3002\u5f53\u7136\uff0c\u4f60\u613f\u610f\uff0c\u4e5f\u53ef\u4ee5\u628a\u8001\u7684\u8fdb\u7a0b\u5e72\u6389\u4e00\u4e9b\uff0c\u76f4\u63a5\u5f3a\u5236\u5230\u65b0\u7248\u672c\u3002\u5176\u4ed6\u7cfb\u7edf\u8fd9\u4e48\u505a\u5b9e\u5728\u592a\u53ef\u6015\u3002\u53ef\u662f Erlang \u7684\u8fdb\u7a0b\u662f\u5bb9\u9519\u7684\uff0c\u72b6\u6001\u53ef\u6062\u590d\u800c\u4e14\u53ef\u5347\u7ea7\u7684\uff0c\u6240\u4ee5\u8fd9\u4e48\u505a\u8fd8\u662f\u53ef\u884c\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u70ed\u66f4\uff0c\u53ea\u662f\u5e94\u5bf9\u4e00\u4e9b\u5c40\u90e8\u5c0f\u4fee\u6539\u3002\u5982\u679c\u6a21\u5757\u95f4\u6709\u590d\u6742\u4f9d\u8d56\uff0c\u9700\u8981\u4e00\u6b21\u8fdb\u884c\u591a\u4e2a\u6a21\u5757\u70ed\u66f4\u600e\u4e48\u529e\uff1f\u653e\u5fc3\u5427\u3002Erlang \u6709\u5b8c\u6574\u7684\u65b9\u6848\u3002"),(0,n.kt)("p",null,"4\u3001\u5176\u4ed6\u8bed\u8a00\u91cc\uff0c\u7a0b\u5e8f\u57fa\u672c\u4e0a\u5c31\u662f\uff0c\u4e00\u4e2a\u4e3b\u5165\u53e3\uff0c\u7136\u540e\u8c03\u7528\u5176\u4ed6\u7b2c\u4e09\u65b9\u6a21\u5757\u8fd9\u6837\u7684\u8bbe\u8ba1\u3002\u4f46\u662f\u8fd9\u4e2a\u8bbe\u8ba1\u592a\u7b80\u964b\u3002Erlang \u7684\u8bbe\u8ba1\u662f\uff0c\u6574\u4e2a\u7cfb\u7edf\u662f\u7531\u4e00\u7cfb\u5217\u72ec\u7acb\u8fd0\u884c\u7684 Application \u7ec4\u6210\u7684\u3002\u6ca1\u9519\uff0c\u5176\u5b9e\u4f60\u53ea\u662f\u5728\u4e3a Erlang \u8fd9\u4e2a\u7cfb\u7edf\u91cc\u5f00\u53d1 Application\u3002\u5305\u62ec\u4fd7\u8bdd\u8bf4\u7684\u201c\u7cfb\u7edf",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%A0%87%E5%87%86%E5%BA%93&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6807\u51c6\u5e93"),"\u201d\u8fd9\u79cd\u73a9\u610f\u513f\uff0cErlang \u91cc\u4e5f\u662f\u72ec\u7acb\u7684 Application\u3002"),(0,n.kt)("p",null,"\u6709\u4f55\u533a\u522b\uff1f\u6bcf\u4e2a Application \u90fd\u6709\u81ea\u5df1\u7684\u4e00\u4e2a\u542f\u52a8\u8fc7\u7a0b\uff0c\u81ea\u5df1\u7684\u4e00\u7ec4\u8fdb\u7a0b\uff08\u6784\u6210\u76d1\u7763\u6811\uff0c\u5177\u5907\u72ec\u7acb\u7684\u5bb9\u9519\u6027\uff09\u3002\u76f8\u4e92\u4e4b\u95f4\u8fd0\u884c\u65f6\u8026\u5408\u662f\u677e\u6563\u7684\u3002\u6240\u4ee5\uff0cA \u548c B \u4e24\u4e2a Application \u4f60\u60f3\u8fd0\u884c\u5728\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6216\u8005\u591a\u53f0\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u4e0a\uff0c\u4ee3\u7801\u6709\u5dee\u522b\u5417\uff1f\u6ca1\u6709\u3002"),(0,n.kt)("p",null,"\u4f60\u611f\u89c9\u5230\u4e00\u4e1d\u5947\u602a\u7684\u6c14\u5473\u6ca1\u3002\u662f\u7684\uff0cErlang \u751a\u81f3\u6709\u81ea\u5df1\u7684 Shell \u7528\u6765\u7ba1\u7406\u548c\u63a7\u5236\u8fd9\u6574\u4e2a\u7cfb\u7edf\u3002\u800c\u8fd9\u4e2a Shell \u91cc\u5c31\u662f Erlang \u8bed\u8a00\u672c\u8eab\u3002\u5b8c\u7f8e\u7684\u4e00\u81f4\uff0c\u7b80\u76f4\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u987a\u5e26\u4e00\u63d0\uff0cErlang \u662f\u53ef\u4ee5\u5199\u811a\u672c\u7684\uff0c\u53eb\u505a escript\u3002\u539f\u6c41\u539f\u5473\uff0c\u4fdd\u8bc1\u9c9c\u7f8e\u3002"),(0,n.kt)("p",null,"5\u3001\u4e00\u822c\u8bed\u8a00\u7684\u5b57\u7b26\u4e32\u5904\u7406\uff0c\u611f\u89c9\u5f88\u65b9\u4fbf\u3002\u4f46\u662f\u5f88\u591a\u8bed\u8a00\u5185\u90e8\u662f\u53ea\u80fd\u5904\u7406 Unicode \u7684\u67d0\u4e00\u79cd\u7f16\u7801\u7684\uff08UTF-8\u3001UTF-16BE \u662f\u6d41\u884c\u9009\u62e9\uff09\u3002\u5982\u679c\u60f3\u8981\u968f\u5fc3\u6240\u6b32\u7684\u53bb\u652f\u6301\uff0c\u5c31\u5fc5\u987b\u628a\u5b57\u7b26\u4e32\u5f53\u4f5c\u539f\u59cb\u4e8c\u8fdb\u5236\u6570\u636e\u5904\u7406\u3002\u4f46\u662f Erlang \u91cc\u6839\u672c\u6ca1\u6709\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u5c55\u5f00\u8bf4\u6bd4\u8f83\u590d\u6742\u3002\u5f88\u591a\u4eba\u62b1\u6028 Erlang \u91cc\u5b57\u7b26\u4e32\u5904\u7406\u597d\u50cf\u4e0d\u65b9\u4fbf\u3002\u4e00\u4e2a\u91cd\u8981\u7684\u539f\u56e0\u662f\uff0c\u8fd9\u90e8\u5206\u7684\u7406\u89e3\u9700\u8981\u7a0d\u5fae\u6df1\u4e00\u70b9\u7684\u57fa\u7840\u77e5\u8bc6\uff08\u4e0d\u590d\u6742\uff09\u3002\u4ee5\u540e\u518d\u5c55\u5f00\u8bf4"),(0,n.kt)("p",null,"6\u3001Erlang \u91cc\u9762\u76f4\u63a5\u5305\u542b\u4e86\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u800c\u4e14\u53ea\u9700\u8981\u8fd9\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u662f\u7684\uff0c\u6bd4\u5982 Erlang \u91cc\u662f\u81ea\u5e26\u72b6\u6001\u673a\u6a21\u5f0f\u7684\u3002\u8bf4\u5230\u8fd9\u91cc\u2026\u2026"),(0,n.kt)("h3",{id:"821-beam-vm"},"8.2.1 Beam VM"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u77e5\u9053erlang\u8981\u89e3\u51b3\u7684\u95ee\u9898\u662f\u201c\u9ad8\u5e76\u53d1\u201d\u548c\u201d\u5206\u5e03\u5f0f\u201c\u95ee\u9898\uff0c\u8fd9\u6837\u8bf4\u6709\u70b9\u592a\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u6765\u8bf4\uff0cerlang\u5728\u5e94\u7528\u5c42\u548c\u64cd\u4f5c\u7cfb\u7edf\u5c42\u4e4b\u95f4\u53c8\u52a0\u5165\u4e86\u4e00\u4e2a\u7ec6\u7c92\u5ea6\u7684\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\u5c42\uff08beam vm\uff09\uff0c\u8fd9\u4e2a\u5206\u914d\u5c42\u81ea\u52a8\u628a\u8ba1\u7b97\u4efb\u52a1\u5206\u6d3e\u5230os\uff08thread\uff09\u5c42\u3002\u8fd9\u5176\u5b9e\u662f\u9ad8\u5e76\u53d1\u5904\u7406\u4e2d\u4e00\u4e2a\u5f88\u7406\u60f3\u7684\u73af\u5883\uff0c\u8ba1\u7b97\u8d44\u6e90\u53ef\u4ee5\u66f4\u5408\u7406\u7684\u914d\u7f6e\u3002\u7406\u8bba\u4e0a\u53ef\u4ee5\u505a\u5230\u52a8\u6001\u6269\u5927\u6216\u8005\u7f29\u5c0f\u6240\u9700\u7684\u786c\u4ef6\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u6709\u4e86\u7ec6\u7c92\u5ea6\u7684\u81ea\u52a8\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\uff0c\u5f88\u591a\u65f6\u5019\u5c31\u4e0d\u9700\u8981\u5728\u5e94\u7528\u5c42\u53bb\u8003\u8651\u8fd9\u4e2a\u95ee\u9898\u4e86\uff0c\u51cf\u5c11\u4e86\u5f88\u591a\u65e0\u8c13\u7684\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e0d\u6b63\u662f\u672a\u6765\u6240\u9700\u8981\u7684\u8ba1\u7b97\u6a21\u5f0f\u5417\uff1f"),(0,n.kt)("h3",{id:"842-concurrency-oriented-languages"},"8.4.2 Concurrency Oriented Languages"),(0,n.kt)("h4",{id:"8421-programming-by-observing-the-real-world"},"8.4.2.1 Programming by observing the real world"),(0,n.kt)("p",null,"We oden want to write programs that model the world or interact with the world. Writing such a program in a COPL is easy. Firstly, we perform an analysis which is a three-step process:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"We identify all the truly concurrent activities in our real world activ- ity."),(0,n.kt)("li",{parentName:"ol"},"We identify all message channels between the concurrent activities."),(0,n.kt)("li",{parentName:"ol"},"We write down all the messages which can flow on the dicerent message channels.")),(0,n.kt)("p",null,"Now we write the program. The structure of the program should exactly follow the structure of the problem. Each real world concurrent activity should be mapped onto exactly one concurrent process in our programming language. If there is a 1:1 mapping of the problem onto the program we say that the program is isomorphic to the problem."),(0,n.kt)("p",null,"It is extremely important that the mapping is exactly 1:1. The reason for this is that it minimizes the conceptual gap between the problem and the solution. If this mapping is not 1:1 the program will quickly degenerate, and become diecult to understand. This degeneration is oden observed when non-CO languages are used to solve concurrent problems. Oden the only way to get the program to work is to force several independent activities to be controlled by the same language thread or process. This leads to a inevitable loss of clarity, and makes the programs subject to complex and irreproducible interference errors."),(0,n.kt)("p",null,"In performing our analysis of the problem we must choose an appro- priate granularity for our model. For example, if we were writing an instant messaging system, we might choose to use one process per user and not one process for every atom in the user\u2019s body."),(0,n.kt)("h4",{id:"8422-characteristics-of-a-copl"},"8.4.2.2 Characteristics of a COPL"),(0,n.kt)("p",null,"COPLs are characterised by the following six properties:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"COPLs must support processes. A process can be thought of as a self-contained virtual machine."),(0,n.kt)("li",{parentName:"ol"},"Several processes operating on the same machine must be strongly isolated. A fault in one processe should not adversely ecect another process, unless such interaction is explicitly programmed."),(0,n.kt)("li",{parentName:"ol"},"Each process must be identified by a unique unforgeable identifier. We will call this the Pid of the process."),(0,n.kt)("li",{parentName:"ol"},"There should be no shared state between processes. Processes inter- act by sending messages. If you know the Pid of a process then you can send a message to the process."),(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be unreliable with no guarantee of delivery."),(0,n.kt)("li",{parentName:"ol"},"It should be possible for one process to detect failure in another process. We should also know the reason for failure.")),(0,n.kt)("h4",{id:"8423-process-isolation"},"8.4.2.3 Process isolation*"),(0,n.kt)("p",null,"The notion of ",(0,n.kt)("em",{parentName:"p"},"isolation")," is central to understanding COP, and to the con- struction of fault-tolerant sodware. Two processes operating on the same machine must be as independent as if they ran on physically separated machines."),(0,n.kt)("p",null,"Isolation has several consequences:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Processes have \u201cshare nothing\u201d semantics. This is obvious since they are imagined to run on physically separated machines."),(0,n.kt)("li",{parentName:"ol"},"Message passing is the only way to pass data between processes. Again since nothing is shared this is the only means possible to exchange data."),(0,n.kt)("li",{parentName:"ol"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation."),(0,n.kt)("li",{parentName:"ol"},"Since nothing is shared, everything necessary to perform a dis- tributed computation must be copied. Since nothing is shared, and the only way to communicate between processes is by message pass- ing, then we will never know if our messages arrive (remember we said that message passing is inherently unreliable.) The only way to know if a message has been correctly sent is to send a confirmation message back.")),(0,n.kt)("h4",{id:"8424-names-of-processes"},"8.4.2.4 Names of processes"),(0,n.kt)("p",null,"We require that the names of processes are unforgeable. This means that it should be impossible to guess the name of a process, and thereby interact with that process. We will assume that processes know their own names, and that processes which create other processes know the names of the processes which they have created. In other words, a parent process knows the names of its children."),(0,n.kt)("p",null,"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",null,"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",null,"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.\nIn many primitive religions it was believed that humans had powers over spirits if they could command them by their real names. Knowing the real name of a spirit gave you power over the spirit, and using this name you could command the spirit to do various things for you. COPLs use the same idea."),(0,n.kt)("h4",{id:"8425-message-passing"},"8.4.2.5 Message passing"),(0,n.kt)("p",null,"Message passing obeys the following rules:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be atomic which means that a mes- sage is either delivered in its entirety or not at all."),(0,n.kt)("li",{parentName:"ol"},"Message passing between a pair of processes is assumed to be or- dered meaning that if a sequence of messages is sent and received between any pair of processes then the messages will be received in the same order they were sent."),(0,n.kt)("li",{parentName:"ol"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"8426-protocols"},"8.4.2.6 Protocols*"),(0,n.kt)("p",null,"Isolation of components, and message passing between components, is architecturally suecient for protecting a system from the consequences of a sodware error, but it is not suecient to specify the behaviour of a system, nor, in the event of some kind of failure to determine which component has failed."),(0,n.kt)("p",null,"Up to now we have assumed that failure is a property of a single component, a single component will either do what it is supposed to do or fail as soon as possible. It might happen, however, that no components are observed to fail, and yet the system still does not work as expected."),(0,n.kt)("p",null,"To complete our programming model, we add therefore one more thing. Not only do we need completely isolated components that com- municate only by message passing, but also we need to specify the com- munication protocols that are used between each pair of components that communicate with each other."),(0,n.kt)("p",null,"By specifying the communication protocol that should be obeyed be- tween two components we can easily find out if either of the components involved has violated the protocol. Guaranteeing that the protocol is en- forced should be done by static analysis, if possible, or failing this by compiling run-time checks into the code."),(0,n.kt)("h2",{id:"83-move"},"8.3 Move"),(0,n.kt)("p",null,"Move,asafeandflexibleprogramminglanguagefortheLibraBlockchain","[1][2]",". Move is an executable bytecode language used to implement custom transactions and smart contracts. The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic: a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies. The safety and expressivity of Move have enabled us to implement significant parts of the Libra protocol in Move, including Libra coin, transaction processing, and validator management."),(0,n.kt)("h3",{id:"831-\u95ee\u9898"},"8.3.1 \u95ee\u9898"),(0,n.kt)("p",null,"\u76ee\u524d\u7684\u8bed\u8a00\u5b58\u5728\u51e0\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Indirect representation of assets\uff1a\u8d44\u6e90\u4ec5\u4ec5\u88ab\u7f16\u7801\u4e3a\u4e00\u4e2a\u6574\u6570\uff0c\u4f46\u662f\u4e00\u4e2a\u6574\u6570\u8ddf\u4e00\u4e2a\u8d44\u6e90\u8fd8\u662f \u6709\u5dee\u5f02\u7684\uff0c\u5c06\u8d44\u6e90\u8868\u8ff0\u4e3a\u4e00\u4e2a\u6574\u6570\u4f7f\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u5bb9\u6613\u51fa\u9519\u7684\u7a0b\u5e8f\uff0c\u8d44\u6e90\u9700\u8981\u88ab\u7279\u6b8a\u5bf9\u5f85"),(0,n.kt)("li",{parentName:"ul"},"Scarcity is not extensible: In addition, the scarcity protections are hardcoded directly in the language semantics. A programmer that wishes to create a custom asset must carefully reimplement scarcity with no support from the language."),(0,n.kt)("li",{parentName:"ul"},"Access control is not flexible\uff1a The only access control policy the model enforces is the signature scheme based on the public key. Like the scarcity protections, the access control policy is deeply embedded in the language semantics. It is not obvious how to extend the language to allow programmers to define custom access control policies.")),(0,n.kt)("h3",{id:"832-move-design-goals"},"8.3.2 Move Design Goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"First-Class Resources \uff1aBlockchain systems let users write programs that directly interact with digital assets. As we discussed in Section 2.2, digital assets have special characteristics that distinguish them from the values tradi- tionally used in programming, such as booleans, integers, and strings. A robust and elegant approach to programming with assets requires a representation that preserves these characteristics."),(0,n.kt)("p",{parentName:"li"},"The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic ","[3]",": a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Flexibility\uff1amodules/resources/procedures\uff0c\u6bcf\u4e2a\u4ea4\u6613\u5305\u542b\u4e00\u4e2aScript\uff0c\u8fd9\u4e2ascript\u53ef\u4ee5\u8c03\u7528\u4efb\u610fmodule\u4e2d\u7684procedure\uff0c\u63d0\u4f9b\u5de8\u5927\u7684\u7075\u6d3b\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Safety: resource safety, type safety, memory safety, Move\u5728\u8fd0\u884c\u65f6\uff08on-chain\uff09\u52a8\u6001\u5206\u6790")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Verifiability\uff1a\u5168\u90e8\u5728\u8fd0\u884c\u65f6\u505a\u9a8c\u8bc1\u4f1a\u5e26\u6765\u8ba1\u7b97\u590d\u6742\u5ea6\u548c\u534f\u8bae\u7684\u590d\u6742\u5ea6\uff0c\u6240\u4ee5\u7ed3\u5408off-chain + on-chain\u7684\u9a8c\u8bc1\uff0c\u4f7fon-chain\u5c3d\u53ef\u80fd\u8f7b\u91cf\u5e76\u4e14\u5c3d\u53ef\u80fd\u805a\u7126\u6838\u5fc3\u7684\u5b89\u5168\u5c5e\u6027\u4e0a"))),(0,n.kt)("p",null,"We have made several design decisions that make Move more amenable to static verification than most general-purpose languages:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"No dynamic dispatch. The target of each call site can be statically determined. This makes it easy for verification tools to reason precisely about the effects of a procedure call without performing a complex call graph construction analysis."),(0,n.kt)("li",{parentName:"ol"},"Limited mutability. Every mutation to a Move value occurs through a reference. References are temporary values that must be created and destroyed within the confines of a single transac- tion script. Move\u2019s bytecode verifier uses a \u201cborrow checking\u201d scheme similar to Rust to ensure that at most one mutable reference to a value exists at any point in time. In addition, the language ensures that global storage is always a tree instead of an arbitrary graph. This allows verification tools to modularize reasoning about the effects of a write operation."),(0,n.kt)("li",{parentName:"ol"},"Modularity. Move modules enforce data abstraction and localize critical operations on re- sources. The encapsulation enabled by a module combined with the protections enforced by the Move type system ensures that the properties established for a module\u2019s types cannot be violated by code outside the module. We expect this design to enable exhaustive functional ver- ification of important module invariants by looking at a module in isolation without considering its clients.")),(0,n.kt)("h3",{id:"833-move-overview"},"8.3.3 Move Overview"),(0,n.kt)("h4",{id:"8331-peer-to-peer-payment-transaction-script"},"8.3.3.1 Peer-to-Peer Payment Transaction Script"),(0,n.kt)("p",null,"We use the term resource safety to describe the guarantees that Move resources can never be copied, reused, or lost. These guarantees are quite powerful because Move programmers can implement custom resources that also enjoy these protections."),(0,n.kt)("h4",{id:"8332-module"},"8.3.3.2 Module"),(0,n.kt)("h3",{id:"834-the-move-language"},"8.3.4 The Move Language"),(0,n.kt)("h2",{id:"84-smalltalk"},"8.4 Smalltalk"),(0,n.kt)("h3",{id:"841-object-model"},"8.4.1 Object Model"),(0,n.kt)("h4",{id:"8421-message"},"8.4.2.1 Message"),(0,n.kt)("p",null,"To describe how the objects are represented, the programmer must list all the fields in the object, and give each field a name. To describe how the object will behave, the programmer will give a series of \u201cmethods\u201d."),(0,n.kt)("p",null,"A method is like a function, except that it is applied to a specific object. We also say that the method is \u201cinvoked\u201d on an object or \u201csent to\u201d an object. The object in question is called the \u201creceiver.\u201d Every method is invoked on a receiving object. In C++ and Java, the receiver is called the \u201cthis object\u201d, but Smalltalk does not use this this terminology. The \u201cthis\u201d terminology makes for awkward wordings."),(0,n.kt)("p",null,"Methods in Smalltalk are similar to methods in Java and C++, where they are called \u201cmember functions\u201d. Methods may take arguments and may return a result. The method body is a sequence of executable statements. Methods are invoked from expressions, just as in other languages."),(0,n.kt)("p",null,"There is an important distinction between \u201cmethods\u201d and \u201cmessages\u201d. A method is a body of code, while a message is something that is sent. A method is similar to a function; in this analogy, sending a message is similar to calling a function. An expression which invokes a method is called a \u201cmessage sending expression.\u201d"),(0,n.kt)("p",null,"Smalltalk terminology makes a clear distinction between \u201cmessage\u201d and \u201cmethod\u201d, but Java and C++ terminology sometimes confuses these concepts. A message-sending expression will send a message to the object. How the object responds to the message depends on the class of the object. Objects of different classes will respond to the same message differently, since they will invoke different methods."),(0,n.kt)("p",null,"When a message is sent to an object, a method will be selected and executed. Since we cannot know, in general, the class of the object until run-time, the method cannot be selected until the message is actually sent. This is called \u201cdynamic binding\u201d, and Java, C++, and Smalltalk all have it. With straight functions, the compiler can look at a \u201ccall\u201d statement and figure out at compile-time (i.e., \u201cstatically\u201d) which body of code to branch to. C++ (which always prefers efficiency over clarity) encourages static binding and refers to dynamically bound methods as \u201cvirtual\u201d methods, and refers to the virtual table."),(0,n.kt)("p",null,"In the Smalltalk programming model, all binding is dynamic. However, the compiler and virtual machine will often bind methods statically for greater execution efficiency when it is can be done safely and without changing the program\u2019s behavior."),(0,n.kt)("h4",{id:"8422-message-sending-syntax"},"8.4.2.2 Message Sending Syntax"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x reset "a message-send in Smalltalk"\nx.reset() // a message-send in Java\n\nmyDept manager name last\nmyDept.manager().name().last()\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Binary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x + y "in Smalltalk"\nx + y // in Java\nx.plus(y) //java\n')),(0,n.kt)("p",null,"\u5305\u62ec+ * <= == <===>"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Keyword Messages")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"}," x addKey: a value: b useMap: myMap ifError: errCode")," "),(0,n.kt)("p",null,"The message name is \u201caddKey:value:useMap:ifError:\u201d Four colons mean four arguments."),(0,n.kt)("h4",{id:"8423-discussion-of-smalltalk-syntax"},"8.4.2.3 Discussion of Smalltalk Syntax"),(0,n.kt)("p",null,"These rules are unfamiliar at first, and some readers are probably thinking \u201cthis is very different\u201d. The key is that Smalltalk syntax is very simple. In practice, the syntax is learned quickly and becomes second nature in no time."),(0,n.kt)("p",null,"Compared to Java or C++ syntax, Smalltalk syntax is simpler and cleaner. Technically, Smalltalk is LL(1), which means it can be parsed with the simplest top-down parsing algorithms, while C++ is LR(1) and cannot be parsed with any simple algorithms. What is hard for computers to parse is also hard for programmers to parse."),(0,n.kt)("p",null,"Smalltalk\u7684\u65b9\u5f0f\u66f4\u5229\u4e8e\u52a8\u6001binding\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728x + y \u4e2d\u4e0d\u9700\u8981\u5411\u540e\u770b\u76f4\u63a5\u5c31\u53ef\u4ee5\u63a8\u5bfc\u9700\u8981\u4f7f\u7528\u7684method"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e2d\uff0c\u5982x.processString (y, m, s, d)\uff0c\u6bcf\u4e2a\u53c2\u6570\u90fd\u6709\u540d\u5b57\uff0c\u5f62\u6210\u5305\u542b\u4fe1\u606f\u66f4\u591a\u7684\u51fd\u6570\u540d\u79f0processString:mapping:symbols:defaults:\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u5bf9\u51fd\u6570\u7684\u67e5\u627e")),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5728\u4f20\u7edf\u7684C++/Java\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7f16\u8bd1\u5668\u63a8\u5bfc\u7c7b\u578b\uff0c\u9700\u8981\u6784\u5efa\u8bed\u6cd5\u6811\uff0c\u4ee5\u53ca\u5404\u79cd\u8868\uff0c\u8fd9\u5bfc\u81f4\u52a8\u6001\u7ed1\u5b9a\u6216\u8005\u63a8\u5bfc\u7684\u80fd\u529b\u4e0b\u964d\u3002\u56e0\u4e3aSmalltalk\u662f\u5b8c\u5168\u65e0\u7c7b\u578b\u7684\uff0c\u4e0d\u50cfJava/C++\u6bcf\u4e2a\u53d8\u91cf\u90fd\u5fc5\u987b\u58f0\u660e\u4e00\u4e2a\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"One might reasonably ask, why bother to declare variables at all, if there is no typing information? The primary answer is that every variable must be declared so that the compiler can set aside space for each variable. Every variable will be allocated 32 bits and can hold either a pointer to an object or a SmallInteger."),(0,n.kt)("p",null,"A second reason for declaring variables is so that the compiler can guard against misspellings of variable names by the programmer. Every variable must be declared. If, in the body of executable statements, the programmer misspells a variable name, the compiler will complain that the variable has not been declared."),(0,n.kt)("h4",{id:"8424-the-distinction-between-types-and-classes"},"8.4.2.4 The Distinction Between Types and Classes"),(0,n.kt)("p",null,"Languages like Java and C++ make a distinction between \u201ctypes\u201d and \u201cclasses\u201d. In Java, there are 3 kinds of types: classes, interfaces, and primitive types (like \u201cint\u201d). Each variable is given a type at compile-time; this places restrictions on what values can be assigned to that variable at run-time."),(0,n.kt)("p",null,"In Smalltalk there are no constraints on what can be assigned to a variable. Any variable may point to any class of object. It is the programmer\u2019s responsibility to make sure that a variable\u2019s value is of the correct class at run-time."),(0,n.kt)("p",null,"Which is better: a typed language or an un-typed language? Both approaches have their strengths and weaknesses. In my opinion, neither approach is clearly superior."),(0,n.kt)("p",null,"If a type system is well-designed, then it is often the case that the compiler can catch bugs that would otherwise go unnoticed until run-time. In this way, typed languages make programs more reliable and readable. On the other hand, a strong type system occasionally makes it difficult to do certain things. The programmer ends up writing code to defeat or work around the language\u2019s type system. It sometimes seems that type system is a burden to the programmer, providing only a false sense of protection."),(0,n.kt)("p",null,"With an un-typed language, the program is not cluttered up with type definitions and casting expressions. The algorithm tends to show through more clearly. However, when reading complex code, it can sometimes be virtually impossible to guess what kinds of data a given variable might point to at some point in the code."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dynamic Typing")),(0,n.kt)("p",null,"Sometimes, un-typed languages like Smalltalk are said to be \u201cdynamically type,\u201d since each value has a type, but the compiler does not check the types. Languages like Java and C++ are said to be \u201cstatically typed.\u201d In a statically type language, the compiler checks to make sure every line of the program is type-correct. At runtime, there is no checking and, in theory, the program will run faster. In practice, Smalltalk pays only a very small penalty for dynamic type checking."),(0,n.kt)("p",null,"In a dynamically typed language, each value knows its type and these types are checked at run-time rather than at compile time. By \u201ceach value knows its type\u201d we mean that each object has an implicit pointer to its class. This is part of the object and you can\u2019t have an object without having immediate access to its class. Even with SmallIntegers, there is a tag bit that implicitly gives the class of the object as \u201cSmallInteger\u201d. Contrast this with C++, where you can have a 32-bit quantity without knowing whether it represents an \u201cint\u201d, or a pointer, or a \u201cfloat\u201d."),(0,n.kt)("p",null,"The term \u201cdynamic typing\u201d is somewhat confusing and should be avoided, since it confuses the ideas of \u201cclass\u201d and \u201ctype\u201d. Classes are not types. Sure, Smalltalk keeps class information around at run-time and relies on it, but so do \u201cstatically-typed\u201d languages like Java and C++."),(0,n.kt)("p",null,"Smalltalk is an \u201cuntyped, object-oriented\u201d language while Java is a \u201cstrongly typed, object-oriented language\u201d. C++, as always, defies any simple description."),(0,n.kt)("h3",{id:"842-smalltalk\u9762\u5411\u5bf9\u8c61"},"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u6797\u5efa\u5165\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/20275578/answer/26970925"},"https://www.zhihu.com/question/20275578/answer/26970925"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("p",null,"Smalltalk \u7684\u4eae\u70b9\u5c31\u5728\u4e8e\uff0c\u5b83\u5728\u8bed\u8a00\u5c42\u9762\u5f15\u5165\u4e86\u4e00\u79cd\u79f0\u4e3a\u201c\u5bf9\u8c61\u201d\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u7cfb\u7edf\u3002\u4e00\u4e2a Smalltalk \u7a0b\u5e8f\u7531\u4e00\u7cfb\u5217\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u6784\u6210\uff0c\u6bcf\u4e2a\u6a21\u5757\u4e4b\u95f4\u901a\u8fc7\u901a\u4fe1\u8fdb\u884c\u534f\u540c\u3002"),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u8bf4\uff0c",(0,n.kt)("strong",{parentName:"p"},"Smalltalk \u6240\u79c9\u627f\u7684\u9762\u5411\u5bf9\u8c61\u601d\u60f3\u4f7f\u5f97\u6574\u4e2a\u8f6f\u4ef6\u7cfb\u7edf\u7684\u53ef\u5206\u5272\u6027\u548c",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E5%8F%AF%E7%BB%84%E5%90%88%E6%80%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u53ef\u7ec4\u5408\u6027"),"\u8fc8\u4e0a\u4e86\u4e00\u4e2a\u65b0\u53f0\u9636\u3002\u8fd9\u662f",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E6%80%9D%E6%83%B3&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9762\u5411\u5bf9\u8c61\u601d\u60f3"),"\u7684\u5149\u8f89\u6240\u5728\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u56de\u8fc7\u5934\u6765\u770b\u770b C++ \u548c Java \u4e2d\u7684\u9762\u5411\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\uff0cC++ \u548c Java \u5728\u5b9e\u73b0\u9762\u5411\u5bf9\u8c61\u7684\u8def\u9014\u4e0a\u9047\u5230\u7684\u7b2c\u4e00\u9053\u574e\u662f\u4ed6\u4eec\u672c\u8eab\u90fd\u662f",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E9%9D%99%E6%80%81%E7%B1%BB&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9759\u6001\u7c7b"),"\u578b\u7684\u8bed\u8a00\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u7c7b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4fe1\u6761\u662f\u4e00\u5207\u7ed3\u6784\u7686\u987b\u9884\u5148\u63cf\u8ff0\uff0c\u56e0\u4e3a\u7f16\u8bd1\u5668\u8981\u68c0\u67e5\u3002\u4e8e\u662f\u6ca1\u4ec0\u4e48\u60ac\u5ff5\u7684\u7684\u5c31\u8d70\u4e0a\u4e86 Class-based OOP \u8fd9\u6761\u8def\uff08\u53e6\u4e00\u6761\u8def\u662f Prototype-based OOP\uff09\u3002"),(0,n.kt)("p",null,"Class-based OOP \u7684\u4e00\u4e2a\u7279\u5f81\u662f\u5bf9\u8c61\u7684\u7ed3\u6784\u9700\u8981\u9884\u5148\u58f0\u660e\uff0c\u5e76\u4e14\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u5141\u8bb8\u6539\u53d8\u2014\u2014 C++ \u548c Java \u7684\u4f5c\u8005\u6709\u4e00\u5343\u4e2a\u7406\u7531\u8fd9\u4e48\u5e72\uff0c\u6700\u57fa\u672c\u7684\u539f\u56e0\u5c31\u662f\u6027\u80fd\u8003\u8651\u2014\u2014\u4f46\u8fd9\u6837\u505a\u7684\u4ee3\u4ef7\u9996\u5148\u5c31\u524a\u5f31\u4e86\u7cfb\u7edf\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u66f4\u7cdf\u7cd5\u7684\u662f\uff0cC++ \u548c Java \u4e2d\uff0c\u8fde\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\u3002\u6211\u8fd9\u4e48\u8bf4\u4e00\u90e8\u5206\u670b\u53cb\u53ef\u80fd\u6ca1\u529e\u6cd5\u9a6c\u4e0a\u53cd\u5e94\u8fc7\u6765\u3002\u5176\u5b9e\u5c31\u662f\u8bf4\uff0c\u5728 Smalltalk \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4efb\u4f55\u4e00\u4e2a\u5bf9\u8c61\u968f\u610f\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\uff0c\u53ea\u8981\u4ed6\u4eec\u5bf9\u5916\u754c\u800c\u8a00\u884c\u4e3a\u4e00\u81f4\uff0c\u90a3\u4e48\u7cfb\u7edf\u4f9d\u7136\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\uff0c\u8fd9\u4e00\u70b9\uff0c\u5728\u5927\u5bb6\u66f4\u719f\u6089\u7684 Ruby\u3001Javascript \u7b49\u8bed\u8a00\u4e2d\uff0c\u88ab\u79f0\u4e3a Duck-Type \u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5728 C++ \u548c Java \u4e2d\uff0c\u4f60\u4e0d\u80fd\u968f\u610f\u627e\u4e2a\u5bf9\u8c61 x \u6765\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\u5bf9\u8c61 y\u3002\u5373\u4f7f\u4ed6\u4eec\u62e5\u6709\u5b8c\u5168\u76f8\u540c\u7684\u884c\u4e3a\u4e5f\u4e0d\u884c\u3002\u56e0\u4e3a C++ \u548c Java \u662f Class-based OOP \u6240\u4ee5\u8fde\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\uff01\u8fd9\u79cd\u58f0\u660e\u65b9\u5f0f\u5c31\u662f\u8ba9\u65e0\u6570\u4eba\u6f78\u7136\u6cea\u4e0b\u7684\u2014\u2014\u7ee7\u627f\uff01"),(0,n.kt)("p",null,"\u5373\u4f7f\u4e00\u4e2a\u5bf9\u8c61 x \u548c y \u7684\u884c\u4e3a\u662f\u5b8c\u5168\u4e00\u6837\u7684\uff0c\u4f60\u4e5f\u4e0d\u80fd\u7528 x \u53bb\u66ff\u6362 y\u3002\u5141\u8bb8\u4f60\u66ff\u6362\u7684\u552f\u4e00\u524d\u63d0\u662f\uff0cx \u88ab\u58f0\u660e\u4e3a\u7ee7\u627f\u81ea y \u7684\u3002"),(0,n.kt)("p",null,"\u5728\u6709\u7a7a\u7684\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u518d\u8be6\u7ec6\u8ba8\u8bba\u4e00\u4e0b\u7ee7\u627f\u3002\u4f46\u662f\u5728\u8fd9\u91cc\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5355\u7684\u6765\u8bf4\uff0c\u201c\u7ee7\u627f\u201d\u662f\u4e00\u4eba\u5206\u9970\u4e24\u89d2\u7684\u5178\u578b\u2014\u2014\u5b83\u65e2\u4f5c\u4e3a\u4ee3\u7801\u590d\u7528\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u540c\u65f6\u53c8\u6210\u4e3a\u4e86\u53ef\u66ff\u6362\u6027\u7684\u4e00\u79cd\u58f0\u660e\u3002\u8fd9\u79cd\u8bbe\u8ba1\u975e\u5e38\u5931\u8d25\uff0c\u96be\u4ee5\u4f7f\u7528\u5230\u76f4\u63a5\u5bfc\u81f4\u4e86\u9762\u5411\u5bf9\u8c61\u5728 C++ \u548c Java \u4e2d\u6210\u4e3a\u4e86\u4e00\u4e2a\u9609\u5272\u540e\u7684\u592a\u76d1\u3002")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5f25\u8865\u7ee7\u627f\u7684\u8fd9\u79cd\u7f3a\u9677\uff0c\u4e8e\u662f\u5f15\u5165\u4e86 Interface \uff08\u53ea\u8868\u660e\u53ef\u66ff\u6362\u6027\uff0c\u4e0d\u590d\u7528\u4ee3\u7801\uff09\uff0c\u4f46\u8fd9\u4e5f\u6539\u53d8\u4e0d\u4e86\u4ec0\u4e48\u4e86\u3002\u6bd5\u7adf Interface \u7adf\u7136\u4e5f\u5f00\u59cb\u4e92\u76f8\u73a9\u8d77\u4e86\u7ee7\u627f\u7684\u6e38\u620f\u2026\u2026"),(0,n.kt)("p",null,"\u4e8e\u662f\u6700\u540e\uff0c\u6211\u4eec\u770b\u5230\uff0c\u5c3d\u7ba1 C++ \u548c Java \u4e00\u76f4\u58f0\u79f0\u81ea\u5df1\u662f\u9762\u5411\u5bf9\u8c61\u7684\uff0c\u4f46\u662f\u548c Smalltakl \u4e4b\u7c7b\u7684\u8bed\u8a00\u4e00\u6bd4\uff0c\u8fd9\u79cd\u9762\u5411\u5bf9\u8c61\u7684\u5b9e\u73b0\u51e0\u4e4e\u662f\u4e2a\u53bb\u52bf\u540e\u7684\u592a\u76d1\uff0c\u4ed6\u4eec\u6562\u81ea\u79f0\u4e3a\u7537\u4eba\u771f\u662f\u4e2a\u7b11\u8bdd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5982\u679c\u53ef\u4ee5\u8bf4\u5f97\u76f4\u767d\u4e00\u4e9b\u7684\u8bdd\uff0cC++ \u672c\u8d28\u4e0a\u53ea\u80fd\u7b97\u662f\u4e00\u4e2a\u5e26\u6709\u5c11\u91cf\u9762\u5411\u5bf9\u8c61\u652f\u6301\u7684 C\uff0c\u800c Java \u66f4\u50cf\u662f\u4e00\u4e2a\u53bb\u6389\u4e86\u6307\u9488\uff0c\u5e26\u4e0a\u4e86\u5783\u573e\u56de\u6536\u7684 C++\u3002"),(0,n.kt)("p",null,"\u4f46\u518d\u600e\u4e48\u8bf4\uff0c\u9762\u5411\u5bf9\u8c61\u8fd9\u56de\u4e8b\uff0c\u5728 C++ \u548c Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u91cc\u7b80\u76f4\u90fd\u53ea\u80fd\u7b97\u4e2a\u70b9\u7f00\uff08\u53ef\u6015\u7684\u662f\u8fd9\u4e2a\u70b9\u7f00\u4f1a\u82b1\u6389\u4f60 70% \u7684\u5b66\u4e60\u65f6\u95f4\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u3002\u5728\u7ed3\u6784\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u52a8\u6001\u6027\u3002\u5b83\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u52a8\u6001\u6784\u9020\uff08\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\uff0c\u4e5f\u53ef\u4ee5\u6784\u9020\u4e00\u767e\u4e2a\uff09\uff0c\u52a8\u6001\u9500\u6bc1\u7684\uff1b\u5728\u62bd\u8c61\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u9694\u79bb\u6027\u3002\u5b83\u5e76\u4e0d\u76f4\u63a5\u4f9d\u8d56\u4e8e\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u662f\u901a\u8fc7\u901a\u4fe1\u6765\u4e0e\u4e4b\u534f\u4f5c\u7684\u3002\u53e6\u5916\uff0c\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u662f\u7cfb\u7edf\u5f39\u6027\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6211\u4eec\u90fd\u77e5\u9053\uff0c\u5b9e\u73b0\u4e0a\u8ff0\u7279\u6027\u5728\u76ee\u524d\u7684",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%BC%96%E8%AF%91%E6%8A%80%E6%9C%AF&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u7f16\u8bd1\u6280\u672f"),"\u6761\u4ef6\u4e0b\uff0c\u5f88\u96be\u4fdd\u8bc1\u9ad8\u6027\u80fd\u3002\u6240\u4ee5\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48 C++/Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u8981\u81ea\u6211\u9609\u5272\u7684\u539f\u56e0\u3002\u8fd9\u91cc\u9762\u4e0d\u5f97\u4e0d\u8bf4\u786e\u5b9e\u662f\u900f\u7740\u4e00\u4e1d\u65e0\u5948\u3002"),(0,n.kt)("h2",{id:"85-verse"},"8.5 Verse"),(0,n.kt)("h1",{id:"9-\u62df\u5a32\u54f2\u5b66"},"9. \u62df\u5a32\u54f2\u5b66"),(0,n.kt)("h2",{id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48"},"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u4ef7\u503c\u7531\u4e24\u90e8\u5206\u7ec4\u6210\uff1a"),(0,n.kt)("p",null,"\u4e00\u79cd\u662f\u901a\u8fc7\u89c6\u89c9\u3001\u97f3\u6548\u7b49\u7ed9\u4f60\u5e26\u6765\u5373\u65f6\u7684\u5feb\u4e50\uff1b\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4f5c\u54c1\u627f\u8f7d\u7684\u6545\u4e8b\u3001\u5bf9\u4e16\u754c\u7684\u7406\u89e3\u3001\u4e2a\u4eba\u7684\u751f\u6d3b\u7ecf\u9a8c\u3001\u77e5\u8bc6\u7b49\u4fe1\u606f\u5e26\u7ed9\u4e2a\u4eba\u7684\u7cbe\u795e\u529b\u91cf\uff0c\u8fd9\u79cd\u529b\u91cf\u4e0d\u80fd\u5355\u7eaf\u6bd4\u505a\u77e5\u8bc6\uff0c\u5b83\u66f4\u591a\u662f\u4e30\u5bcc\u6211\u4eec\u7684\u7cbe\u795e\u4e16\u754c\uff0c\u4f46\u662f\u8fd9\u79cd\u4e30\u5bcc\u53ef\u4ee5\u901a\u8fc7\u7ed9\u6211\u67d0\u4e9b\u610f\u8bc6\u4ece\u800c\u4f7f\u6211\u4eec\u5728\u5de5\u4f5c\u4e2d\u521b\u9020\u66f4\u5927\u4ef7\u503c\uff0c\u4f8b\u5982\u5b83\u8ba9\u6211\u4eec\u66f4\u52a0\u79ef\u6781\u3001\u52c7\u6562\u7b49"),(0,n.kt)("p",null,"\u865a\u62df\u4e16\u754c\u4ef7\u503c\u7684\u4ea7\u751f\uff1a"),(0,n.kt)("p",null,"\u521b\u9020\u7684\u8fc7\u7a0b\u548c\u7ed3\u679c\u90fd\u4ea7\u751f\u4ef7\u503c\uff0c\u521b\u9020\u8fc7\u7a0b\u4ea7\u751f\u7684\u4ef7\u503c\u76f8\u5bf9\u4e8e\u521b\u4f5c\u8005\u81ea\u8eab\uff0c\u53c2\u89c1\u5a01\u5ec9\u83ab\u91cc\u65af\u8bba\u8457\uff0c\u5f53\u7136\u9664\u4e86\u521b\u4f5c\u7684\u8fc7\u7a0b\u672c\u8eab\uff0c\u521b\u4f5c\u7684\u4ef7\u503c\u8fd8\u6709\u4e00\u90e8\u4efd\u6765\u6e90\u4e8e\u522b\u4eba\u7684\u8ba4\u53ef\uff0c\u6bd4\u5982\u4f60\u521b\u9020\u7684\u662f\u4e00\u4e2a\u5b8c\u5168\u65e0\u610f\u4e49\u7684\u4eba\uff0c\u9664\u975e\u4f60\u81ea\u5df1\u89c9\u5f97\u5f88\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u80fd\u4f53\u9a8c\u5230\u81ea\u8eab\u5bf9\u8fd9\u4e2a\u521b\u9020\u7684\u4f53\u9a8c\uff0c\u4f46\u5982\u679c\u4f60\u662f\u9884\u671f\u5b83\u53ef\u4ee5\u8ba9\u522b\u4eba\u611f\u5230\u5feb\u4e50\uff0c\u90a3\u4e48\u8fd9\u79cd\u9884\u671f\u4ee5\u53ca\u5b9e\u9645\u7684\u53cd\u9988\u4f1a\u8ba9\u4f60\u611f\u5230\u66f4\u5927\u7684\u5feb\u4e50"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u5feb\u4e50\u5c31\u662f\u4ef7\u503c"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u4f5c\u7684\u5feb\u4e50\uff0c\u4e0d\u4ec5\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u8fc7\u7a0b\uff0c\u66f4\u6765\u6e90\u4e8e\u4f5c\u54c1\u88ab\u5176\u4ed6\u7528\u6237\u6d88\u8d39\u548c\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u5305\u62ec\u53cd\u9988\uff0c\u4ee5\u53ca\u6539\u8fdb\u548c\u518d\u521b\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u521b\u4f5c\u7ed3\u679c\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e0a\u9762\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u901a\u8fc7\u6570\u5b57\u4f5c\u54c1\uff0c\u7279\u522b\u662f\u53d9\u4e8b\u6027\u89c6\u89c9\u827a\u672f\u4f5c\u54c1\u4ea7\u751f\u7684\u4ef7\u503c\uff0c\u4e0d\u5149\u662f\u8fd9\u79cd\u4e0a\u8ff0\u7684\u4ef7\u503c\u672c\u8eab\uff0c\u5979\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u610f\u4e49\u5728\u4e8e\uff1a\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u6211\u4eec\u6240\u6709\u7684\u4e8b\u60c5\u4e00\u822c\u901a\u8fc7\u6587\u5b57\u5f62\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u7406\u8bba\u4e0a\u4efb\u4f55\u6982\u5ff5\u90fd\u53ef\u4ee5\u901a\u8fc7\u7cbe\u51c6\u7684\u6587\u5b57\u8fdb\u884c\u8868\u8ff0\uff0c\u5c31\u50cf\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e00\u6837\uff0c\u4efb\u4f55\u8ba1\u7b97\u673a\u5bf9\u4e00\u6bb5\u7a0b\u5e8f\u7684\u7406\u89e3\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u7136\u800c\u4eba\u7c7b\u8bed\u8a00\u4e0d\u4e00\u6837\uff0c\u4eba\u7c7b\u8bed\u8a00\u7684\u5b57\u9762\u63cf\u8ff0\u901a\u5e38\u90fd\u5e26\u6709\u4e00\u5b9a\u7684\u80cc\u666f\u4fe1\u606f\uff0c\u540c\u6837\u4e00\u6bb5\u8bdd\uff0c\u4e0d\u540c\u80cc\u666f\u4fe1\u606f\u7684\u4eba\u7684\u7406\u89e3\u7a0b\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5e76\u4e14\u8fd9\u79cd\u80cc\u666f\u4fe1\u606f\u6709\u65f6\u5019\u4e0d\u4e00\u5b9a\u662f\u903b\u8f91\u4e0a\u7684\u77e5\u8bc6\uff0c\u8fd8\u6709\u6587\u5316\u3001\u827a\u672f\u3001\u751f\u6d3b\u7ecf\u5386\u7b49\u590d\u6742\u56e0\u7d20\uff0c\u56e0\u6b64\u5bfc\u81f4\u7684\u7ed3\u679c\u5c31\u662f\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("p",null,"\u6211\u544a\u8bc9\u4f60\u8981\u53d8\u5f97\u52c7\u6562\uff0c\u8fd9\u53e5\u8bdd\u5b57\u9762\u610f\u601d\u5f88\u6e05\u6670\uff0c\u4f46\u662f\u5173\u4e8e\u52c7\u6562\u662f\u4ec0\u4e48\uff0c\u4ed6\u53ef\u80fd\u6709\u5f88\u591a\u89e3\u91ca\uff0c\u5230\u5e95\u8981\u505a\u5230\u4ec0\u4e48\u624d\u7b97\u52c7\u6562\uff0c\u6ca1\u6709\u5b9a\u4e49"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u7ed9\u4f60\u770b\u4e86\u4e00\u90e8\u300a\u6307\u73af\u738b\u300b\u6216\u8005\u300a\u970d\u6bd4\u7279\u4eba\u300b\uff0c\u4f60\u9a6c\u4e0a\u5c31\u80fd\u83b7\u5f97\u5f88\u591a\u7cbe\u795e\u4e0a\u7684\u7406\u89e3\uff0c\u8fd9\u91cc\u9762\u4e0d\u5149\u662f\u7535\u5f71\u672c\u8eab\u5305\u542b\u4e86\u66f4\u591a\u4fe1\u606f\uff0c\u4ed6\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u89c6\u89c9\u8bed\u8a00\u3001\u4ee5\u53ca\u878d\u5165\u4f60\u5728\u770b\u8fd9\u4e9b\u8bd7\u53e5\u5185\u5bb9\u548c\u6545\u4e8b\u65f6\u4ea7\u751f\u7684\u81ea\u6211\u60f3\u8c61\u529b\uff0c\u7b49\u7b49\uff0c\u8fd9\u4e9b\u90fd\u662f\u975e\u5b57\u9762\u7684\u4fe1\u606f\u6240\u80fd\u8868\u8fbe\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4f5c\u54c1\u878d\u5165\u7684\u4e0d\u5149\u662f\u521b\u4f5c\u8005\u7684\u7ecf\u9a8c\u77e5\u8bc6\uff0c\u8fd8\u6709\u5f88\u591a\u903b\u8f91\uff0c\u8868\u8fbe\u624b\u6cd5\u7b49\u7b49\u5f88\u590d\u6742\u7684\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u662f\u521b\u4f5c\uff0c\u5b83\u662f\u4e00\u79cd\u8868\u8fbe\u5f62\u5f0f\uff0c\u5b83\u7684\u8868\u8fbe\u80fd\u529b\u8d85\u8d8a\u6587\u5b57\u7684\u5b57\u9762\u610f\u601d\uff0c\u8fd9\u4e5f\u5c31\u662f\u827a\u672f\u521b\u4f5c\u8fd9\u79cd\u4e8b\u7269\u7684\u4ef7\u503c\u6240\u5728"),(0,n.kt)("p",null,"\u4ea4\u6d41\u548c\u793e\u4ea4\u4ea7\u751f\u4ef7\u503c"),(0,n.kt)("h2",{id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48"},"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"RealityIS\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u662f\u4ece\u4e0a\u81f3\u4e0b\u7684\uff0c\u5373\u770b\u5230\u4e0a\u9762\u5e94\u7528\u5c42\u7684\u5f00\u653e\u95ee\u9898\uff0c\u7136\u540e\u627e\u5230\u95ee\u9898\u7684\u6839\u6e90\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u7136\u540e\u518d\u6df1\u5165\u5230\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u8ba1\u7b97\u673a\u4f53\u7cfb\u7ed3\u6784\u7684\u673a\u5236\uff0c\u6700\u540e\u5f97\u51fa\u89e3\u51b3\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddf\u4e00\u822c\u7684\u8f6f\u4ef6\u67b6\u6784\u8fc7\u7a0b\u5f88\u7c7b\u4f3c\uff0c\u7531\u4e1a\u52a1\u5c42\u7684\u9886\u57df\u9700\u6c42\uff0c\u6765\u5f15\u5bfc\u8f6f\u4ef6\u67b6\u6784\u7684\u8bbe\u8ba1\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u6df1\u5165\u5230\u4e86\u7f16\u7a0b\u8bed\u8a00\u8fd9\u4e00\u5c42\u3002\u7136\u800c\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u662f\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\uff0c\u56e0\u6b64\u5fc5\u7136\u5bfc\u81f4\u6cdb\u5316\u6027\u4e0d\u8db3\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u5f53\u6211\u4eec\u5f97\u5230\u8fd9\u5957\u6280\u672f\u67b6\u6784\u4e4b\u540e\uff0c\u518d\u53cd\u5411\u5411\u4e0a\u7406\u89e3\u7684\u65f6\u5019\uff0c\u5374\u53d1\u73b0\u5b83\u5177\u6709\u5f88\u5927\u7684\u901a\u7528\u548c\u6cdb\u534e\u80fd\u529b\uff0c\u8fd9\u4e00\u90e8\u5206\u539f\u56e0\u53ef\u80fd\u662f\u56e0\u4e3a\u6211\u4eec\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u53d1\u751f\u5728\u8bed\u8a00\u8fd9\u4e00\u8f83\u4f4e\u7684\u5c42\u6b21\uff0c\u5e76\u4e14\u6ca1\u6709\u6539\u53d8\u8bed\u8a00\u672c\u8eab\u7684\u673a\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u53e6\u4e00\u65b9\u9762\uff0c\u4e5f\u7531\u4e8e\u6211\u4eec\u5728\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\u6bd4\u8f83\u6ce8\u91cd\u5bf9\u6570\u636e\u7684\u7406\u89e3\uff0c\u5f53\u7136\u8fd9\u91cc\u4e5f\u6709\u5982\u6570\u636e\u9a71\u52a8\u3001\u9ad8\u6027\u80fd\u8ba1\u7b97\u3001\u9ad8\u5ea6\u5e76\u53d1\u7b49\u6280\u672f\u9700\u6c42\u6240\u5f15\u5411\u5bf9\u6570\u636e\u7684\u5173\u6ce8\uff0c\u4e5f\u6709\u523b\u610f\u8fed\u4ee3\u5730\u52a0\u6df1\u5bf9\u6570\u636e\u672c\u8d28\u7684\u601d\u8003\u548c\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5f53\u6211\u4eec\u56de\u8fc7\u5934\u6765\uff0c\u5bf9\u6570\u636e\u6709\u4e86\u66f4\u6df1\u523b\u7684\u7406\u89e3\u548c\u8ba4\u77e5\u4e4b\u540e\uff0c\u4f1a\u53d1\u73b0\uff0c\u4ece\u6839\u6e90\u4e0a\uff0cRealityIS\u7684\u8fd9\u4e9b\u6cdb\u5316\u6027\u80fd\u529b\uff0c\u6765\u6e90\u4e8e\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5f00\u53d1\u548c\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u4f20\u7edf\u4ee5\u786c\u4ef6\u5904\u7406\u5668\u4e3a\u6838\u5fc3\u7684\u7f16\u8bd1\u67b6\u6784\uff0c\u8f6c\u53d8\u4e3a\u4e86\u66f4\u7b26\u5408\u5b9e\u9645\u7269\u7406\u4e16\u754c\u76f4\u89c9\u7684\u673a\u5236\uff0c\u8fd9\u662f\u4e00\u4e2a\u6839\u672c\u6027\u8f6c\u53d8\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u6574\u4e2aRealityIS\u7684\u80fd\u529b\u548c\u601d\u7ef4\uff0c\u90fd\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u57fa\u4e8e\u6570\u636e\u7684\u7f16\u7a0b\u6a21\u578b\u3002\u5305\u62ec\u5982\u89e3\u8026\u3001\u5e76\u53d1\u3001\u6cdb\u578b\u3001\u81ea\u6211\u8fdb\u5316\u5f0f\u7684\u6807\u51c6\u673a\u5236\u7b49\u7b49\uff0c\u8fd9\u4e9b\u672c\u8d28\u4e0a\u90fd\u662f\u4ee5\u6570\u636e\u4e3a\u4e2d\u5fc3\u53bb\u601d\u8003\u624d\u80fd\u5f62\u6210\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5b83\u6709\u4e00\u79cd\u5076\u7136\uff0c\u4e5f\u6709\u5fc5\u7136\uff1b\u5076\u7136\u7684\u662f\u6211\u4eec\u5173\u6ce8\u5230\u6570\u636e\u8fd9\u4e2a\u4e2d\u5fc3\u95ee\u9898\uff0c\u5fc5\u7136\u7684\u662f\u6570\u636e\u4e3a\u4e2d\u5fc3\u7684\u6982\u5ff5\u662f\u4e00\u5957\u80fd\u591f\u4ee5\u771f\u5b9e\u4e16\u754c\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u4f5c\u4e1a\u7684\u89c4\u5219\u3002"),(0,n.kt)("p",null,"\u5c06\u6765\uff0c\u6211\u4eec\u8fd8\u4f1a\u7ee7\u7eed\u5b8c\u5584\u8fd9\u4e00\u6982\u5ff5\uff0c\u6700\u7ec8\uff0cRealityIS\u5c06\u53d8\u4e3a\u4e00\u4e2a\u4ee5\u771f\u5b9e\u4e16\u754c\u7684\u76f4\u89c9\u548c\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u7684\u6784\u5efa\u548c\u8fd0\u884c\uff0c\u8fd9\u5c06\u662f\u4e00\u79cd\u5168\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"mlp",src:l(6018).Z,width:"1400",height:"660"})),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u6df1\u5ea6\u5b66\u4e60\uff0c\u5b83\u7684\u5f88\u591a\u7406\u5ff5\u6765\u81ea\u4e8e\u5bf9\u5927\u8111\u673a\u5236\u7684\u601d\u8003\uff0c\u867d\u7136\u795e\u7ecf\u5143\u7684\u673a\u5236\u5e76\u4e0d\u4e00\u5b9a\u662f\u5927\u8111\u5b9e\u9645\u8fd0\u884c\u7684\u673a\u5236\uff08\u5b9e\u9645\u5f53\u7136\u8981\u590d\u6742\u5f97\u591a\uff09\uff0c\u4f46\u662f\u5b83\u53ef\u80fd\u81f3\u5c11\u662f\u5176\u4e2d\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u601d\u8003\u6293\u4f4f\u4e86\u4e00\u5b9a\u7684\u672c\u8d28\uff0c\u6240\u4ee5\u6700\u7ec8\u57fa\u4e8e\u795e\u7ecf\u5143\u8fd9\u79cd\u7b80\u5355\u7684\u7ed3\u6784\u6784\u5efa\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u80fd\u591f\u5728\u8f83\u5927\u7a0b\u5ea6\u4e0a\u6a21\u62df\u5927\u8111\u7684\u673a\u5236\u3002"),(0,n.kt)("h2",{id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"},"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"BMH-Week-2",src:l(7464).Z,width:"1000",height:"750"})),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236"},"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u662f\u66f4\u6709\u4ef7\u503c\u7684\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"economics",src:l(3625).Z,width:"1920",height:"1280"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h2",{id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf"},"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u5b50\u7cfb\u7edf\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\uff0c\u5b83\u4e5f\u5177\u6709\u9ad8\u5ea6\u7684\u5e76\u53d1\u6027\u3001\u5e76\u884c\u6027\uff0c\u4ee5\u53ca\u9ad8\u5ea6\u7684\u67b6\u6784\u590d\u6742\u5ea6\u7279\u5f81\u3002"),(0,n.kt)("p",null,"\u663e\u7136\u73b0\u6709\u7684\u5e95\u5c42\u8ba1\u7b97\u67b6\u6784\uff0c\u4ee5\u53ca\u4e0a\u5c42\u7684\u8f6f\u4ef6\u5efa\u6784\u90fd\u65e0\u6cd5\u652f\u6491\u8fd9\u6837\u7684\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf\uff0c\u81f3\u5c11\u9700\u8981\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u5e94\u7528\u4e92\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7f16\u8bd1\u548c\u89e3\u91ca"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u7a0b\u5e8f\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u6297\u7834\u574f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5b89\u5168")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\uff0c\u8fd9\u4e0d\u4ec5\u662f\u6280\u672f\u7684\u8981\u6c42\uff0c\u4e5f\u662f\u8fd9\u6837\u7684\u7cfb\u7edf\u7684\u4ef7\u503c\u6240\u5728\u3002\u5fc5\u987b\u5177\u6709\u72ec\u7acb\u5f00\u53d1\u8005\u80fd\u591f\u6269\u5c55\u7cfb\u7edf\u7684\u80fd\u529b\uff0c\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u7a0b\u5e8f\u624d\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u7531\u67d0\u4e2a\u5927\u516c\u53f8\u7ef4\u62a4\u7684\u7a0b\u5e8f\u4e0d\u7ba1\u5728\u89c4\u6a21\u4e0a\u3001\u8fd8\u662f\u529f\u80fd\u4e30\u5bcc\u6027\u4e0a\u90fd\u662f\u4e0d\u8db3\u4ee5\u652f\u6491\u8fd9\u79cd\u9700\u6c42\u3002\u5f53\u7136\u8fd9\u4e48\u591a\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4e5f\u8fd8\u6d89\u53ca\u5230\u66f4\u52a0\u4e25\u683c\u7684\u5b89\u5168\u63a7\u5236\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7a0b\u5e8f\u4f53\u975e\u5e38\u5927\uff0c\u4ee5\u53ca\u6240\u6709\u7a0b\u5e8f\u90fd\u6709\u53ef\u80fd\u4e0d\u65ad\u66f4\u65b0\u548c\u53d8\u5316\uff0c\u56e0\u6b64\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u52a8\u6001\u7f16\u8bd1\u7684\u3002\u7cfb\u7edf\u5fc5\u987b\u80fd\u591f\u968f\u65f6\u7f16\u8bd1\u5355\u4e2a\u7ec4\u4ef6\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5176\u4ed6\u6240\u6709\u7a0b\u5e8f\u3002\u6b64\u5916\uff0c\u6bcf\u4e2a\u6e90\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u4e4b\u95f4\uff0c\u6700\u597d\u8fd8\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5f15\u7528\u6216\u5bfc\u81f4\u975e\u5e38\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b\uff0c\u5373\u4f7f\u7ef4\u62a4\u8fd9\u6837\u7684\u5f15\u7528\u5173\u7cfb\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\u4e8b\u60c5\u3002\u8fd9\u4e5f\u51e0\u4e4e\u5bf9\u7f16\u7a0b\u6a21\u578b\u8fdb\u884c\u4e86\u9650\u5236\uff0c\u4f8b\u5982\u5982\u679c\u8ba9\u7528\u6237\u4f7f\u7528\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u8fdb\u884c\u5f00\u53d1\uff0c\u51e0\u4e4e\u5fc5\u7136\u7684\u7ed3\u679c\u662f\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5f88\u96be\u8fdb\u884c\u7f16\u8bd1\u548c\u89e3\u91ca\u3002\u6211\u4eec\u5fc5\u987b\u4ee5\u67d0\u79cd\u8ba1\u7b97\u67b6\u6784\u7ea7\u522b\u7684\u673a\u5236\uff0c\u4f7f\u53ef\u4ee5\u65e2\u4fdd\u8bc1\u5f00\u53d1\u8005\u5f00\u53d1\u529f\u80fd\u4e0d\u53d7\u9650\u5236\uff0c\u540c\u65f6\u53c8\u80fd\u5c06\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ef4\u6301\u4e00\u5b9a\u7684\u72ec\u7acb\u7ed3\u6784\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u8bed\u8a00\u53ef\u80fd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u8fd8\u5fc5\u987b\u6709\u67d0\u4e9b\u4e2d\u95f4\u62bd\u8c61\u6765\u51cf\u8f7b\u52a8\u6001\u8bed\u8a00\u7684\u6027\u80fd\u5f00\u9500\u3002"),(0,n.kt)("p",null,"\u4ec5\u4ec5\u80fd\u591f\u72ec\u7acb\u7f16\u8bd1\u8fd8\u4e0d\u591f\uff0c\u5b83\u4eec\u8fd8\u9700\u8981\u80fd\u591f\u6309\u9700\u52a0\u8f7d\uff0c\u53ea\u52a0\u8f7d\u5f53\u524d\u4efb\u52a1\u9700\u8981\u7684\u7a0b\u5e8f\u6307\u4ee4\uff0c\u53ea\u521d\u59cb\u5316\u5f53\u524d\u4efb\u52a1\u9700\u8981\u4f7f\u7528\u5230\u7684\u6570\u636e\u3002\u8fd9\u4e5f\u610f\u5473\u7740\u6240\u6709\u7684\u903b\u8f91\u5fc5\u987b\u5c3d\u53ef\u80fd\u4ee5\u6bd4\u8f83\u5c0f\u7c92\u5ea6\u7684\u7ed3\u6784\u7ec4\u7ec7\uff0c\u56e0\u4e3a\u592a\u5927\u7684\u903b\u8f91\u53ef\u80fd\u4f1a\u5b58\u5728\u4e00\u4e9b\u6d6a\u8d39\uff1a\u5185\u5b58\u4e2d\u53ef\u80fd\u4f1a\u5b58\u50a8\u5927\u91cf\u4e0d\u4f1a\u6267\u884c\u5230\u7684\u6307\u4ee4\u548c\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u9700\u8981\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316\u7684\u53e6\u4e00\u4e2a\u539f\u56e0\u662f\u4e3a\u4e86\u5e76\u884c\u5316\uff0c\u5f53\u7a0b\u5e8f\u67b6\u6784\u975e\u5e38\u590d\u6742\u65f6\uff0c\u662f\u5f88\u96be\u8fdb\u884c\u5e76\u884c\u6027\u548c\u5e76\u53d1\u4f18\u5316\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u5c06\u903b\u8f91\u5c3d\u53ef\u80fd\u5355\u5143\u5316\u3001\u72ec\u7acb\u5316\u624d\u6709\u53ef\u80fd\u8fdb\u884c\u7edf\u4e00\u7684\u8c03\u5ea6\u548c\u5206\u53d1\u3002\u5e76\u4e14\u8fd9\u79cd\u5206\u53d1\u4e0d\u5e94\u8be5\u662f\u7531\u5f00\u53d1\u8005\u81ea\u5df1\u6765\u5b9e\u73b0\uff0c\u56e0\u4e3a\u5e73\u53f0\u6ca1\u6709\u529e\u6cd5\u63a7\u5236\u5f00\u53d1\u8005\uff0c\u5982\u679c\u5f00\u53d1\u8005\u6ca1\u6709\u5b8c\u6210\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u90fd\u53d7\u5230\u5f71\u54cd\u3002\u56e0\u6b64\u5fc5\u987b\u662f\u4e00\u79cd\u5e73\u53f0\u7ea7\u7684\u673a\u5236\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5b58\u5728\u7740\u4e0d\u53d7\u63a7\u7684\u4ee3\u7801\uff0c\u56e0\u6b64\u7a33\u5b9a\u6027\u4f1a\u662f\u4e00\u4e2a\u91cd\u5927\u7684\u95ee\u9898\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u8981\u5bf9\u4ee3\u7801\u6709\u4e00\u5b9a\u7684\u5ba1\u6838\u548c\u6d4b\u8bd5\u673a\u5236\uff0c\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u53ef\u80fd\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u5d29\u6e83\u7684\u95ee\u9898\uff0c\u4f8b\u5982\u7531\u4e8e\u7ec4\u4ef6\u8fc7\u671f\u5bfc\u81f4\u7b26\u53f7\u53d8\u5316\u800c\u65e0\u6cd5\u521d\u59cb\u5316\u53d8\u91cf\u65f6\uff0c\u7cfb\u7edf\u8981\u80fd\u591f\u8bc6\u522b\u548c\u820d\u5f03\u8fd9\u6837\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u4fdd\u8bc1\u7cfb\u7edf\u7684\u7a33\u5b9a\u6027\u3002\u7a33\u5b9a\u6027\u7684\u5f88\u5927\u6765\u6e90\u662f\u6570\u636e\u7c7b\u578b\u95ee\u9898\u4ee5\u53ca\u6570\u636e\u6307\u9488\u7684\u6570\u636e\u5408\u6cd5\u6027\u95ee\u9898\uff0cRealityIS\u4fdd\u8bc1\u6240\u6709\u7684\u6570\u636e\u90fd\u662f\u503c\u7c7b\u578b\uff0c\u5e76\u4e14\u80fd\u591f\u68c0\u67e5\u7b26\u53f7\u8868\u7684\u5339\u914d\u5ea6\u4ece\u800c\u675c\u7edd\u7c7b\u578b\u7684\u95ee\u9898\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u7834\u574f\u6027\u4ee3\u7801\u7684\u6267\u884c\u3002"),(0,n.kt)("h2",{id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"},"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h3",{id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h2",{id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c"},"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c"),(0,n.kt)("h2",{id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"},"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h2",{id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(4691).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h2",{id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"},"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"),(0,n.kt)("h3",{id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"},"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"),(0,n.kt)("p",null,"\u8fd9\u662f\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6700\u6838\u5fc3\u7684\u57fa\u7840\u548c\u7406\u5ff5\uff0c\u4e00\u76f4\u4ee5\u6765\uff0c\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\u7684\u7ed3\u6784\u90fd\u662f\u4ee5\u8ba9\u4eba\u4eec\u66f4\u5bb9\u6613\u7406\u89e3\u8f6f\u4ef6\u7684\u6784\u9020\u8fc7\u7a0b\u4e3a\u4e3b\uff0c\u5b83\u7684\u6838\u5fc3\u8fd8\u662f\u56f4\u7ed5\u5e95\u5c42\u7684\u786c\u4ef6\u5bf9\u673a\u5668\u4ee3\u7801\u7684\u6267\u884c\u673a\u5236\uff0c\u6216\u8005\u53ef\u4ee5\u7406\u89e3\u4e3a\u600e\u6837\u8ba9\u4eba\u66f4\u5bb9\u6613\u5730\u7406\u89e3\u673a\u5668\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u903b\u8f91\u3002\u5728\u8fd9\u6837\u7684\u601d\u8def\u80cc\u540e\uff0c\u8bed\u8a00\u5355\u7eaf\u53d8\u6210\u4e3a\u4e00\u4e2a\u673a\u5668\u8bed\u8a00\u7684\u9ad8\u7ea7\u62bd\u8c61\uff0c\u8fd9\u79cd\u62bd\u8c61\u4fdd\u7559\u4e86\u673a\u5668\u6267\u884c\u6307\u4ee4\u7684\u6d41\u7a0b\u548c\u903b\u8f91\uff0c\u800c\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u6309\u7167\u673a\u5668\u7684\u8fd9\u79cd\u903b\u8f91\u53bb\u7f16\u5199\u548c\u7ef4\u62a4\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u673a\u5668\u548c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\uff0c\u5bf9\u4e8e\u4e00\u4ef6\u4e8b\u60c5\uff0c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u4f1a\u628a\u5b83\u4eec\u62c6\u5206\u6210\u5f88\u591a\u6613\u4e8e\u7406\u89e3\u7684\u5b50\u6d41\u7a0b\uff0c\u4f1a\u8fdb\u884c\u4e00\u5b9a\u7684\u89c4\u5212\uff0c\u8bc6\u522b\u5176\u4e2d\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u91cd\u8981\u6027\u7a0b\u5ea6\u7b49\uff0c\u5e76\u53ef\u80fd\u4f1a\u5728\u5b9e\u65bd\u8fc7\u7a0b\u4e2d\u52a8\u6001\u8c03\u6574\uff0c\u6362\u53e5\u8bdd\u8bf4\u4eba\u5904\u7406\u4e8b\u60c5\u65f6\u65f6\u90fd\u8981\u5173\u6ce8\u5168\u5c40\u6027\uff0c\u800c\u964d\u4f4e\u5bf9\u5c40\u90e8\u7ec6\u8282\u7684\u6ce8\u610f\u529b\uff0c\u9664\u975e\u4ed6\u5f00\u59cb\u4e13\u6ce8\u53bb\u5904\u7406\u8fd9\u4e00\u5757\u4e8b\u60c5\uff1b\u673a\u5668\u7684\u903b\u8f91\u5219\u805a\u7126\u4e8e\u4fdd\u8bc1\u628a\u4e8b\u60c5\u505a\u6b63\u786e\uff0c\u5b83\u5fc5\u987b\u8981\u5448\u73b0\u5f88\u6e05\u6670\u7684\u6267\u884c\u6d41\u7a0b\uff0c\u4e3a\u4e86\u66f4\u7cbe\u786e\u5730\u63cf\u8ff0\u6d41\u7a0b\uff0c\u5b83\u4e00\u822c\u4e00\u4ef6\u4e8b\u60c5\u505a\u5b8c\u5c31\u7d27\u63a5\u7740\u5b8c\u6210\u53e6\u4e00\u4ef6\u4e8b\u60c5\uff0c\u539f\u6750\u6599\u4e00\u65e6\u6536\u5230\u5c31\u8981\u7acb\u5373\u8fdb\u884c\u52a0\u5de5\u5904\u7406\uff0c\u5904\u7406\u5b8c\u5c31\u8981\u5f00\u59cb\u8fd0\u8f93\u5165\u5e93\u7b49\u5f85\u3002\u8fd9\u91cc\u9762\u5c31\u4e0d\u7ed9\u7a0b\u5e8f\u5458\u89c4\u5212\u7684\u7a7a\u95f4\uff0c\u5f53\u7136\u7a0b\u5e8f\u5458\u53ef\u4ee5\u53bb\u6784\u5efa\u4e00\u4e9b\u66f4\u6613\u4e8e\u5168\u5c40\u7edf\u7b79\u7ba1\u7406\u3001\u89c4\u5212\u548c\u7406\u89e3\u7684\u67b6\u6784\uff0c\u4f46\u662f\u8fd9\u5f80\u5f80\u9700\u8981\u4ed8\u51fa\u5f88\u5927\u7684\u4ee3\u4ef7\u3002"),(0,n.kt)("p",null,"\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u601d\u60f3\uff0c\u5c31\u662f\u8981\u5728\u4fdd\u8bc1\u4e0e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u6267\u884c\u673a\u5236\u7b49\u4ef7\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u5c31\u662f\u8981\u4fdd\u8bc1\u56fe\u7075\u5b8c\u5907\u6027\uff0c\u8ba9\u7a0b\u5e8f\u7684\u6267\u884c\u6d41\u7a0b\u53ef\u4ee5\u88ab\u66f4\u597d\u5730\u89c4\u5212\u548c\u63a7\u5236\uff0c\u4f7f\u5f97\u4eba\u4eec\u53ef\u4ee5\u4f7f\u7528\u5927\u8111\u7684\u673a\u5236\u6765\u5bf9\u7a0b\u5e8f\u7684\u903b\u8f91\u8fdb\u884c\u7ba1\u7406\u3002\u53ef\u4ee5\u8ba4\u4e3a\u8fd9\u662f\u4e00\u5957\u6784\u5efa\u4e8e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u4e0a\u7684\u8f6f\u4ef6\u67b6\u6784\uff0c\u4f46\u662f\u90a3\u6837\u7684\u5b9e\u73b0\u7ed3\u679c\u53ef\u80fd\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u76f8\u53cd\uff0c\u6211\u4eec\u901a\u8fc7\u6df1\u5165\u5206\u6790\u5e95\u5c42\u51fd\u6570\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u8f6f\u4ef6\u6784\u9020\u7684\u8fc7\u7a0b\u4e2d\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ece\u800c\u66f4\u7b80\u5355\u5730\u5b9e\u73b0\u8f6f\u4ef6\u6784\u9020\u7684\u53ef\u63a7\u5236\u6027\uff0c\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u5c31\u662f\u53ef\u63a7\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u8f6f\u4ef6\u6784\u9020\u601d\u7ef4\u5728\u8fc7\u53bb\u662f\u4ece\u6765\u6ca1\u6709\u7684\uff0c\u4e5f\u662f\u8ddf\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6709\u7740\u672c\u8d28\u533a\u522b\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u8ba4\u4e3a\u5b83\u662f\u7ee7\u51fd\u6570\u5f0f\u7f16\u7a0b\u548c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e4b\u540e\u7684\u7b2c\u4e09\u79cd\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u3002\u8fd9\u6837\u7684\u601d\u7ef4\u8f6c\u53d8\u662f\u975e\u5e38\u57fa\u7840\u3001\u91cd\u8981\u548c\u672c\u8d28\u7684\uff0c\u53ef\u63a7\u6027\u5c06\u7ed9\u8f6f\u4ef6\u5de5\u4e1a\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u5168\u65b0\u7684\u672a\u6765\uff0c\u5c24\u5176\u662f\u4ee5\u4e0b\u4e09\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5f71\u54cd\u4e5f\u53cd\u5e94\u5728\u540e\u7eed\u7684\u53d8\u9769\u56e0\u7d20\u4e4b\u4e2d\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u6709\u5e8f\u548c\u53ef\u63a7\u6027\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u903b\u8f91\u7ec4\u7ec7\u548c\u7ba1\u7406\u53d8\u5f97\u66f4\u7b80\u5355\uff0c\u53ef\u4ee5\u9884\u671f\u4f1a\u6709\u76f8\u8f83\u4e8e\u73b0\u5728\u6307\u6570\u7ea7\u589e\u957f\u7684\u5f00\u53d1\u8005\u4f1a\u53c2\u4e0e\u5230\u8f6f\u4ef6\u5de5\u4e1a\u7684\u751f\u4ea7\u4e2d\uff0c\u751f\u4ea7\u529b\u548c\u521b\u65b0\u90fd\u4f1a\u6709\u5927\u5e45\u63d0\u5347\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u65b0\u7684\u7ec4\u7ec7\u548c\u6267\u884c\u6d41\u7a0b\uff0c\u5c06\u4f1a\u5bf9\u5e95\u5c42\u82af\u7247\u8bbe\u8ba1\u5e26\u6765\u542f\u53d1\uff0c\u8fd9\u53ef\u4ee5\u4fc3\u8fdb\u786c\u4ef6\u7684\u5de8\u5927\u521b\u65b0\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u53ef\u63a7\u6027\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u4e0d\u5149\u662f\u6613\u4e8e\u4eba\u7406\u89e3\u7684\uff0c\u4e5f\u662f\u6613\u4e8e\u673a\u5668\u7406\u89e3\u7684\uff0c\u8fd9\u5c06\u5e26\u6765\u4e24\u4e2a\u65b9\u9762\u7684\u7a81\u7834\uff1a\u4e00\u662f\u7f16\u8bd1\u5668\u672c\u8eab\u80fd\u591f\u66f4\u597d\u5730\u8bc6\u522b\u548c\u7ec4\u7ec7\u7a0b\u5e8f\u7684\u903b\u8f91\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7ba1\u7406\u66f4\u591a\u4e0e\u7a0b\u5e8f\u7ed3\u6784\u76f8\u5173\u7684\u7e41\u7410\u903b\u8f91\uff0c\u4f7f\u7a0b\u5e8f\u5458\u805a\u7126\u4e8e\u4e1a\u52a1\u90e8\u5206\uff1b\u4e8c\u662f\u7ed3\u5408\u6df1\u5ea6\u5b66\u4e60\uff0c\u6211\u4eec\u6709\u673a\u4f1a\u8ba9AI\u751f\u6210\u4e00\u5b9a\u903b\u8f91\u7684\u7a0b\u5e8f\u3002")),(0,n.kt)("h3",{id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"},"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"),(0,n.kt)("p",null,"\u524d\u9762\u7b2c2.1\u8282\u5df2\u7ecf\u8ba8\u8bba\u6700\u7b80\u5355\u7f16\u7a0b\u8bed\u8a00\u7684\u6982\u5ff5\u548c\u7279\u6027\uff0c\u8fd9\u91cc\u8bf4\u660e\u600e\u4e48\u901a\u8fc7\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6765\u5b9e\u73b0\u6700\u7b80\u5355\u7684\u7f16\u7a0b\u8bed\u8a00\uff0cCreationScript\u3002\u5177\u4f53\u6765\u8bb2\uff0c\u8fd9\u662f\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u81ea\u52a8\u7ba1\u7406")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6570\u636e\u8d44\u6e90\u7684\u81ea\u52a8\u7ba1\u7406"))),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u8ba8\u8bba\u53ef\u77e5\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6700\u590d\u6742\u7684\u90e8\u5206\u5728\u4e8e\u628a\u7a0b\u5e8f\u7ed3\u6784\u7684\u6784\u9020\u548c\u63a7\u5236\u5b8c\u5168\u4ea4\u7ed9\u5f00\u53d1\u4eba\u5458\u53bb\u5904\u7406\uff0c\u7f16\u7a0b\u8bed\u8a00\u4e2d\u66f4\u591a\u9700\u8981\u5173\u6ce8\u7684\u6982\u5ff5\u662f\u5173\u4e8e\u8f6f\u4ef6\u7ed3\u6784\u7684\u6784\u9020\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u7b97\u6cd5\u600e\u4e48\u7f16\u5199\u7684\u95ee\u9898\u3002\u5728RealityIS\u4e2d\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u6765\u63a7\u5236\u7a0b\u5e8f\u7684\u7ed3\u6784\uff1a1\uff09\u6211\u4eec\u52a0\u5f3a\u4e86\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u7684\u6784\u5efa\uff0c\u5e76\u628a\u8fd9\u4e9b\u4fe1\u606f\u4fdd\u5b58\u8d77\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\u591f\u6784\u9020\u51fa\u4efb\u4f55\u51fd\u6570\u7ec4\u5408\u7684\u6267\u884c\u987a\u5e8f\uff1b2\uff09\u5bf9\u4e8e\u5177\u4f53\u7684\u7a0b\u5e8f\u903b\u8f91\u7ec4\u5408\uff0c\u901a\u5b9e\u4f53\u5bf9\u8c61\u6765\u8bb0\u5f55\u7a0b\u5e8f\u7684\u529f\u80fd\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u548c\u5b9e\u4f53\u529f\u80fd\u7ed3\u6784\u7684\u4fe1\u606f\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u6784\u9020\u51fa\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u8fd9\u6837\u5c31\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u5fc3\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\uff0c\u4f8b\u5982\u7ee7\u627f\u5173\u7cfb\u3001\u91cd\u8f7d\u5b9e\u73b0\u3001\u591a\u6001\u51fd\u6570\u6d3e\u53d1\uff0c\u751a\u81f3\u624b\u52a8\u7684\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u7b49\u7b49\u7a0b\u5e8f\u7ed3\u6784\u6784\u9020\u6240\u9700\u8981\u505a\u7684\u4e00\u4e9b\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5c06\u5168\u90e8\u7cbe\u529b\u96c6\u4e2d\u4e8e\u4e1a\u52a1\u903b\u8f91\u7684\u5f00\u53d1\u4e0e\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u9700\u8981\u7a0b\u5e8f\u5458\u8fdb\u884c\u7e41\u91cd\u7684\u5904\u7406\uff0c\u5e76\u4e14\u4e0e\u903b\u8f91\u6ca1\u6709\u592a\u5927\u5173\u7cfb\u7684\u662f\u6570\u636e\u7684\u7ba1\u7406\u3002\u4ece\u4e1a\u52a1\u903b\u8f91\u6765\u8bf4\uff0c\u5f00\u53d1\u8005\u672c\u6765\u53ea\u9700\u8981\u5173\u6ce8\u4e1a\u52a1\u6d89\u53ca\u54ea\u4e9b\u6570\u636e\uff0c\u4ee5\u53ca\u4e0d\u540c\u7684\u6570\u636e\u8ddf\u51fd\u6570\u4e4b\u95f4\u662f\u5982\u4f55\u4ea4\u4e92\uff0c\u4f46\u5b9e\u9645\u9664\u4e86\u4e0a\u8ff0\u4efb\u52a1\uff0c\u5f00\u53d1\u8005\u82b1\u8d39\u4e86\u66f4\u591a\u7684\u65f6\u95f4\u53bb\u7ba1\u7406\u6570\u636e\u7684\u521b\u5efa\u3001\u4fee\u6539\u3001\u6301\u4e45\u5316\u3001\u5220\u9664\u7b49\uff0c\u8fd9\u4e9b\u5360\u636e\u7684\u7cbe\u529b\u975e\u5e38\u591a\u3002RealityIS\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5173\u6ce8\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7279\u6027\u4e5f\u662f\u524d\u9762\u6211\u4eec\u8ba8\u8bba\u8fc7\u7684\uff0c\u901a\u8fc7\u5c06\u7a0b\u5e8f\u7ed3\u6784\u7531\u65e0\u5e8f\u8f6c\u5316\u4e3a\u6709\u5e8f\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u53ef\u4ee5\u88ab\u673a\u5668\u7406\u89e3\uff0c\u4ece\u800c\u53ef\u4ee5\u8ba9\u673a\u5668\u5e2e\u6211\u4eec\u5b8c\u6210\u4e00\u4e9b\u7a0b\u5e8f\u6784\u9020\u7684\u4e8b\u60c5\uff0c\u4f7f\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u9762\u5411\u5927\u8111\u7684\u7406\u89e3\uff0c\u800c\u6709\u66f4\u591a\u9762\u5411\u673a\u5668\u7684\u673a\u5236\uff0c\u5b9e\u73b0\u4eba\u548c\u673a\u5668\u7684\u5b8c\u7f8e\u914d\u5408\u548c\u4e92\u8865\u3002"))}k.isMDXComponent=!0},3172:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/20151227220024116-155826feba0f55da04e0ac574f2637b3.jpg"},4542:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/AST-5592d94cf30e7e24589439feeb587560.jpeg"},7464:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/BMH-Week-2-686bbb717fb4b7ddb419ec738f1ec0ba.jpeg"},3136:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Brain-to-Brain-Communication-a56f385e9f7ffc1c0db5114ebff6c151.jpeg"},4892:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-Creative-Mode-85c81437c59bc60970ef01c6bf6e5e01.png"},8128:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-bcfc68fd70be596493a83e07ac4978a2.jpeg"},8250:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/IMG_2973-05d442834682b06c980380dbfeca49a2.jpg"},3402:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-1-269eb341c1aeb3d47e69340e9f16f58a.png"},1594:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-94b9d092532c47c07b29d9a0a994fc56.png"},63:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/R-C-1cd6b321f2f0d10c22cb436c82cf89e3.jpeg"},4986:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/RealityIS.005-bbb01a096532b9d457a7cb4fbfb96a40.jpeg"},958:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/add-c0fef0031b7f32b99f01a937935d1c93.png"},7681:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/blockchain-op-b4a2c1404f3dcf95af920c7cf5ec9147.png"},4015:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/call-stack-d16cc4e022ab0fc0ad74d1f0ecac35d2.jpeg"},3451:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/calling-sequence-6ab7a5989b5667984d84da76e4916b37.jpeg"},3822:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/change-5dab6429c98c6c2455ff7bb1f6bc1c61.png"},4858:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/civilization-a7bc89ba9d4cc408d55ea36d809fb337.jpeg"},7865:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc-cannon-af670062d2ec24bad2fb8cd67593bc0c.jpeg"},9674:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc2-a0ba60559161227add4794ba0eddd786.jpeg"},5130:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/complex-system.024-9efc11c76285e095cdd0e1d248089c92.png"},5335:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/composition-e57808b6f16a8b1944f4afd1361a0a01.png"},3973:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/distributed-a89c2bd2fe6959eea73acdaf0dc22f30.png"},216:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/dynamic-a8dcf87f6abb4a4f87fb2786d9f546c1.png"},3625:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/economics-50ff216d275f497eecf25fa18efefab8.jpeg"},5543:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/env-540070781a6ac0d4b6ca8117f89a14a8.png"},4106:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-a403e17499349f0fd4df5b59f437c43f.jpeg"},4691:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-0e16ea82d71123103fa8a738ce65f4eb.png"},7939:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/is-de628dd839078555017aab17db81094d.png"},2248:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-1-c9f4f83a6a4594ce09cdc10038fb2f06.png"},6203:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-2-d9c73723eb85ed71a10fae5305f2d51f.png"},5979:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/kokid-fe324d84cfb72dd1040e31aa37ef8aa7.gif"},6018:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/mlp-e52dda254b062984effe40f08310427a.jpeg"},7240:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/niantic-opens-lightship-augmented-reality-platform-to-all-developers-fe2e72432380174fb315c4b6f27ea147.webp"},2717:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/obj-com-7f45a33658652fde3b9d4f190300b311.png"},533:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/pasted-image-21192f0a0fbfabcd68ed3e3b365611e6.jpg"},9641:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/piper-banner-00ac70143f99b2c54633f2a156c5785a.png"},4522:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/reality-7ff4e3bf0a679fda0e1ba07e6c368129.png"},2853:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/realworld-aefc3b13bc81e1f876f6d55fe7fb4087.png"},3616:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/roblox-8225bc76c0c3889f67d33ce4012c6db9.jpg"},1310:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/shortcuts-f64049b04e494cf9bb397dca9f9bee89.png"},6383:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/taichi-kernel-f40d892825bd3ddc34d0a54a5cebca82.png"},4305:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/version-tracking-b45605deef79713e1be373d29c45ad3a.png"},2729:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/virtual-and-reality-881079faa7745b48133693081d1614a6.png"},9080:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/vm-il-cd2266988ce34973b9e27af79ae70a1c.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[3650],{4137:(e,t,l)=>{l.d(t,{Zo:()=>u,kt:()=>c});var a=l(7294);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,a)}return l}function r(e){for(var t=1;t=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}var s=a.createContext({}),p=function(e){var t=a.useContext(s),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var l=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),k=p(l),d=n,c=k["".concat(s,".").concat(d)]||k[d]||m[d]||i;return l?a.createElement(c,r(r({ref:t},u),{},{components:l})):a.createElement(c,r({ref:t},u))}));function c(e,t){var l=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=l.length,r=new Array(i);r[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[k]="string"==typeof e?e:n,r[1]=o;for(var p=2;p{l.r(t),l.d(t,{contentTitle:()=>r,default:()=>k,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var a=l(7462),n=(l(7294),l(4137));const i={},r="\u6587\u6863\u8bf4\u660e",o={type:"mdx",permalink:"/zh/learning/Reality-World",source:"@site/src/pages/learning/Reality-World.md",title:"\u6587\u6863\u8bf4\u660e",description:"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002",frontMatter:{}},s=[{value:"1.1 \u53d8\u9769",id:"11-\u53d8\u9769",level:2},{value:"1.1.1 \u5f62\u6001\u53d8\u5316",id:"111-\u5f62\u6001\u53d8\u5316",level:3},{value:"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316",level:3},{value:"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb",id:"1121-\u4e1a\u52a1\u6bd4\u55bb",level:4},{value:"1.1.3 \u6280\u672f\u6311\u6218",id:"113-\u6280\u672f\u6311\u6218",level:3},{value:"1.2 \u73b0\u72b6",id:"12-\u73b0\u72b6",level:2},{value:"1.3 \u6280\u672f\u4f18\u52bf",id:"13-\u6280\u672f\u4f18\u52bf",level:2},{value:"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c",level:3},{value:"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236",id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236",level:3},{value:"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017",id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017",level:3},{value:"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f",id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f",level:3},{value:"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"1.4 \u5546\u4e1a\u6a21\u5f0f",id:"14-\u5546\u4e1a\u6a21\u5f0f",level:2},{value:"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f",level:3},{value:"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c",level:3},{value:"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1",level:4},{value:"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d",id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236",level:3},{value:"1.4.5 \u6301\u7eed\u6d88\u8d39",id:"145-\u6301\u7eed\u6d88\u8d39",level:3},{value:"1.5 \u7528\u6237",id:"15-\u7528\u6237",level:2},{value:"1.5.1 \u666e\u901a\u7528\u6237",id:"151-\u666e\u901a\u7528\u6237",level:3},{value:"1.5.2 \u521b\u4f5c\u7528\u6237",id:"152-\u521b\u4f5c\u7528\u6237",level:3},{value:"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b",id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b",level:4},{value:"1.5.3 \u5f00\u53d1\u8005",id:"153-\u5f00\u53d1\u8005",level:3},{value:"1.5.4 \u6807\u51c6\u4f5c\u8005",id:"154-\u6807\u51c6\u4f5c\u8005",level:3},{value:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c",id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c",level:2},{value:"2.1 Creation Scene Description",id:"21-creation-scene-description",level:2},{value:"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8",id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8",level:3},{value:"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f",id:"212-\u5185\u5b58\u5206\u5e03\u5f0f",level:3},{value:"2.2 Creation Script",id:"22-creation-script",level:2},{value:"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09",id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868",level:3},{value:"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868",id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868",level:4},{value:"2.2.1.2 \u7b26\u53f7\u8868",id:"2212-\u7b26\u53f7\u8868",level:4},{value:"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6",level:4},{value:"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027",id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027",level:4},{value:"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf",id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf",level:4},{value:"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408",level:4},{value:"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7",level:4},{value:"2.2.1.8 \u5b58\u6863\u5c5e\u6027",id:"2218-\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.2 Entity",id:"222-entity",level:3},{value:"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b",level:3},{value:"2.2.3.1 \u79c1\u6709\u53d8\u91cf",id:"2231-\u79c1\u6709\u53d8\u91cf",level:4},{value:"2.2.3.2 \u5199\u5165\u6743\u9650",id:"2232-\u5199\u5165\u6743\u9650",level:4},{value:"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001",level:4},{value:"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026",level:3},{value:"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e",level:4},{value:"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316",level:4},{value:"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026",id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026",level:4},{value:"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026",level:4},{value:"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316",id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316",level:3},{value:"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316",level:4},{value:"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations",id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations",level:4},{value:"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f",level:4},{value:"2.2.6 \u7ec4\u4ef6\u67e5\u8be2",id:"226-\u7ec4\u4ef6\u67e5\u8be2",level:3},{value:"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5",level:4},{value:"2.2.6.2 \u663e\u5f0f\u58f0\u660e",id:"2262-\u663e\u5f0f\u58f0\u660e",level:4},{value:"2.2.6.3 RUST ECS",id:"2263-rust-ecs",level:4},{value:"2.2.6.4 Labels/Layers",id:"2264-labelslayers",level:4},{value:"2.2.7 Component + System",id:"227-component--system",level:3},{value:"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f",level:4},{value:"2.2.7.2 Change-driven update",id:"2272-change-driven-update",level:4},{value:"2.2.7.3 ECS",id:"2273-ecs",level:4},{value:"2.2.7.4 ECS\u53c2\u6570",id:"2274-ecs\u53c2\u6570",level:4},{value:"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1",level:4},{value:"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6",id:"2276-\u5355\u4f8b\u7ec4\u4ef6",level:4},{value:"2.2.8 \u6d88\u606f\u901a\u4fe1",id:"228-\u6d88\u606f\u901a\u4fe1",level:3},{value:"2.2.8.1 \u7cfb\u7edf\u673a\u5236",id:"2281-\u7cfb\u7edf\u673a\u5236",level:4},{value:"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168",id:"2282-\u7ec4\u4ef6\u5b89\u5168",level:4},{value:"2.2.8.3 \u6743\u9650\u63a7\u5236",id:"2283-\u6743\u9650\u63a7\u5236",level:4},{value:"2.2.8.4 \u65f6\u5e8f\u6027",id:"2284-\u65f6\u5e8f\u6027",level:4},{value:"2.2.8.5 \u6027\u80fd\u95ee\u9898",id:"2285-\u6027\u80fd\u95ee\u9898",level:4},{value:"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f",id:"2286-\u4e09\u79cd\u6a21\u5f0f",level:4},{value:"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863",id:"229-\u6570\u636e\u4e0e\u5b58\u6863",level:3},{value:"2.2.9.1 \u6570\u636e\u914d\u7f6e",id:"2291-\u6570\u636e\u914d\u7f6e",level:4},{value:"2.2.9.2 \u5b58\u6863",id:"2292-\u5b58\u6863",level:4},{value:"2.2.9.3 \u4e0d\u8db3",id:"2293-\u4e0d\u8db3",level:4},{value:"2.2.10 \u901a\u7528\u6027",id:"2210-\u901a\u7528\u6027",level:3},{value:"2.2.10.1 \u72ec\u7acb\u7c7b",id:"22101-\u72ec\u7acb\u7c7b",level:4},{value:"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528",level:4},{value:"2.2.10.3 \u6709\u8fd4\u56de\u503c",id:"22103-\u6709\u8fd4\u56de\u503c",level:4},{value:"2.2.10.4 \u7ee7\u627f",id:"22104-\u7ee7\u627f",level:4},{value:"2.2.10.5 \u7ed3\u6784\u4f53",id:"22105-\u7ed3\u6784\u4f53",level:4},{value:"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387",id:"22106-\u63a7\u5236tick\u7684\u9891\u7387",level:4},{value:"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026",id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026",level:3},{value:"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c",id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c",level:4},{value:"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165",id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165",level:4},{value:"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf",level:4},{value:"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165",level:4},{value:"2.2.12 \u7b26\u53f7\u6cdb\u578b",id:"2212-\u7b26\u53f7\u6cdb\u578b",level:3},{value:"2.2.12.1 \u53d8\u91cf\u540d\u79f0",id:"22121-\u53d8\u91cf\u540d\u79f0",level:4},{value:"2.2.12.2 \u6a21\u5f0f\u5339\u914d",id:"22122-\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b",level:4},{value:"2.2.13 \u5e76\u53d1",id:"2213-\u5e76\u53d1",level:3},{value:"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b",id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b",level:4},{value:"2.2.13.2 Erlang\u53caOOP",id:"22132-erlang\u53caoop",level:4},{value:"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b",level:4},{value:"2.2.14 \u667a\u80fd\u611f\u77e5",id:"2214-\u667a\u80fd\u611f\u77e5",level:3},{value:"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92",id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92",level:3},{value:"2.2.14.1 HelpComponent",id:"22141-helpcomponent",level:4},{value:"2.2.15 Components",id:"2215-components",level:3},{value:"2.2.15.1 NeuralComponent",id:"22151-neuralcomponent",level:4},{value:"2.2.15.2 TagComponent",id:"22152-tagcomponent",level:4},{value:"2.2.15.3 RealityIDComponent",id:"22153-realityidcomponent",level:4},{value:"2.2.15.4 HelpComponent",id:"22154-helpcomponent",level:4},{value:"2.2.15.5 DeltaComponent",id:"22155-deltacomponent",level:4},{value:"2.2.16 \u6700\u4f73\u5b9e\u8df5",id:"2216-\u6700\u4f73\u5b9e\u8df5",level:3},{value:"2.2.16.1 more granular is better",id:"22161-more-granular-is-better",level:4},{value:"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f",id:"22162-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28",level:3},{value:"2.2.17.1 \u6570\u636e\u6cdb\u578b",id:"22171-\u6570\u636e\u6cdb\u578b",level:4},{value:"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e",id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e",level:4},{value:"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b",level:3},{value:"2.2.18.1 Update\u673a\u5236",id:"22181-update\u673a\u5236",level:4},{value:"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784",level:4},{value:"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6",id:"22183-\u67b6\u6784\u590d\u6742\u5ea6",level:4},{value:"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI",id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai",level:3},{value:"2.2.20 \u5b89\u5168",id:"2220-\u5b89\u5168",level:3},{value:"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56",id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56",level:3},{value:"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61",level:4},{value:"2.2.21.2 \u5173\u8054\u7ec4\u4ef6",id:"22212-\u5173\u8054\u7ec4\u4ef6",level:4},{value:"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f",id:"22213-\u7ec4\u4ef6\u987a\u5e8f",level:4},{value:"2.2.22 \u5206\u5e03\u5f0f",id:"2222-\u5206\u5e03\u5f0f",level:3},{value:"2.2.23 \u5f02\u5e38",id:"2223-\u5f02\u5e38",level:3},{value:"2.2.23.1 \u81ea\u52a8\u5b58\u6863",id:"22231-\u81ea\u52a8\u5b58\u6863",level:4},{value:"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027",level:4},{value:"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863",id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863",level:4},{value:"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9",id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9",level:4},{value:"2.2.24 \u7ec4\u4ef6\u5c5e\u6027",id:"2224-\u7ec4\u4ef6\u5c5e\u6027",level:3},{value:"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb",level:3},{value:"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898",level:4},{value:"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5",level:4},{value:"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11",level:4},{value:"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11",level:4},{value:"2.3 Creation VM",id:"23-creation-vm",level:2},{value:"2.3.1 Creation Table Engine",id:"231-creation-table-engine",level:3},{value:"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4",id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4",level:4},{value:"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536",level:4},{value:"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*",id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406",level:4},{value:"2.3.2 Add\u3001Remove",id:"232-addremove",level:3},{value:"2.3.3 Change-driven Update",id:"233-change-driven-update",level:3},{value:"2.3.3.1 \u7406\u8bba\u57fa\u7840",id:"2331-\u7406\u8bba\u57fa\u7840",level:4},{value:"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6",id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6",level:4},{value:"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a",id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a",level:4},{value:"2.3.3.4 Version Tracking",id:"2334-version--tracking",level:4},{value:"2.3.3.5 Bevy's Change Detection",id:"2335-bevys-change-detection",level:4},{value:"2.3.4 \u7f16\u8bd1",id:"234-\u7f16\u8bd1",level:3},{value:"2.3.4.1 AOT",id:"2341-aot",level:4},{value:"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f",level:4},{value:"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801",level:4},{value:"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d",id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d",level:3},{value:"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe",level:3},{value:"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f",level:4},{value:"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a",level:4},{value:"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:4},{value:"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868",level:4},{value:"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*",id:"237-\u9690\u5f0f\u865a\u62df\u673a",level:3},{value:"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808",level:4},{value:"2.3.8 \u8c03\u5ea6\u5668",id:"238-\u8c03\u5ea6\u5668",level:3},{value:"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868",id:"239-\u52a8\u6001\u7b26\u53f7\u8868",level:3},{value:"2.3.10 \u865a\u62df\u673a\u67b6\u6784",id:"2310-\u865a\u62df\u673a\u67b6\u6784",level:3},{value:"2.3.10.1 \u670d\u52a1\u7aef",id:"23101-\u670d\u52a1\u7aef",level:4},{value:"2.3.10.2 \u5ba2\u6237\u7aef",id:"23102-\u5ba2\u6237\u7aef",level:4},{value:"2.4. CreationXR",id:"24-creationxr",level:2},{value:"2.4.1 Unified XR Input",id:"241-unified-xr-input",level:3},{value:"2.4.2 XR Scene Understanding",id:"242-xr-scene-understanding",level:3},{value:"2.4.3 Data-driven Architecture",id:"243-data-driven-architecture",level:3},{value:"2.4.4 \u4ea4\u4e92",id:"244-\u4ea4\u4e92",level:3},{value:"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92",level:4},{value:"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92",id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92",level:4},{value:"2.5 Creation AI",id:"25-creation-ai",level:2},{value:"2.5.1 Semantics-based Creating",id:"251-semantics-based-creating",level:3},{value:"2.5.2 Procedural Content Generation",id:"252-procedural-content-generation",level:3},{value:"2.5.3 Intelligent Simulation",id:"253-intelligent-simulation",level:3},{value:"2.5.4 Research",id:"254-research",level:3},{value:"2.6 Creation Cloud",id:"26-creation-cloud",level:2},{value:"2.6.1 Creation Management",id:"261-creation-management",level:3},{value:"2.6.1.1 CreationID",id:"2611-creationid",level:4},{value:"2.6.2 Creation Code Library",id:"262--creation-code-library",level:3},{value:"2.6.2.1 \u6807\u51c6\u7ba1\u7406",id:"2621-\u6807\u51c6\u7ba1\u7406",level:4},{value:"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406",level:4},{value:"2.6.3 Multi-player Services",id:"263-multi-player--services",level:3},{value:"2.6.3.1 Voice Service",id:"2631-voice-service",level:4},{value:"2.6.4 \u7aef\u4e91\u534f\u540c",id:"264-\u7aef\u4e91\u534f\u540c",level:3},{value:"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c",level:4},{value:"2.6.4.2 Client as a Display",id:"2642-client-as-a-display",level:4},{value:"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6",level:4},{value:"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb",level:4},{value:"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f",id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f",level:4},{value:"2.6.5 \u5e76\u884c\u8ba1\u7b97",id:"265-\u5e76\u884c\u8ba1\u7b97",level:3},{value:"2.6.5.1 \u5206\u5e03\u5f0fCreation Table",id:"2651-\u5206\u5e03\u5f0fcreation-table",level:4},{value:"2.6.6 RPC",id:"266-rpc",level:3},{value:"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3",level:2},{value:"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf",id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf",level:3},{value:"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b",id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143",id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143",level:4},{value:"2.7.2.2 \u5217\u8868\u64cd\u4f5c",id:"2722-\u5217\u8868\u64cd\u4f5c",level:4},{value:"2.7.3 \u6570\u636e\u9a71\u52a8",id:"273-\u6570\u636e\u9a71\u52a8",level:3},{value:"2.7.4 ECS",id:"274-ecs",level:3},{value:"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406",level:3},{value:"2.7.6 \u52a8\u6001\u89e3\u91ca",id:"276-\u52a8\u6001\u89e3\u91ca",level:3},{value:"2.7.7 \u8d23\u6743\u8ba9\u6e21",id:"277-\u8d23\u6743\u8ba9\u6e21",level:3},{value:"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217",id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217",level:3},{value:"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217",level:4},{value:"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027",id:"2782-\u5e76\u884c\u4f38\u7f29\u6027",level:4},{value:"2.7.9 Let is crash",id:"279-let-is-crash",level:3},{value:"2.7.9.1 \u5bb9\u9519\u673a\u5236",id:"2791-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6",id:"2792-\u5e76\u53d1\u8c03\u5ea6",level:4},{value:"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f",level:3},{value:"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb",level:4},{value:"2.7.10.2 Machinations",id:"27102-machinations",level:4},{value:"2.7.11 \u6a21\u5f0f\u5339\u914d",id:"2711-\u6a21\u5f0f\u5339\u914d",level:3},{value:"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.12.2 \u540d\u5b57\u5339\u914d",id:"27122-\u540d\u5b57\u5339\u914d",level:4},{value:"2.7.12 \u5206\u5e03\u5f0f",id:"2712-\u5206\u5e03\u5f0f",level:3},{value:"2.7.12.1 Actor\u6a21\u578b",id:"27121-actor\u6a21\u578b",level:4},{value:"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528",level:3},{value:"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6",id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6",level:4},{value:"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027",level:4},{value:"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408",level:4},{value:"2.7.14 Serverless",id:"2714-serverless",level:3},{value:"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5",id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5",level:3},{value:"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:3},{value:"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b",level:4},{value:"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d",level:4},{value:"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b",level:4},{value:"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:4},{value:"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf",level:4},{value:"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61",level:4},{value:"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf",id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf",level:3},{value:"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570",id:"27171-\u5355\u53c2\u6570\u51fd\u6570",level:4},{value:"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b",id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b",level:3},{value:"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027",level:3},{value:"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027",id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027",level:4},{value:"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b",level:4},{value:"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9",level:4},{value:"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7",level:4},{value:"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5",id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5",level:4},{value:"2.7.20 \u8ba1\u7b97\u56fe",id:"2720-\u8ba1\u7b97\u56fe",level:3},{value:"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf",id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf",level:2},{value:"2.8.1 \u52a8\u6001\u7f16\u8bd1",id:"281-\u52a8\u6001\u7f16\u8bd1",level:3},{value:"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539",level:3},{value:"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f",id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f",level:3},{value:"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0",id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0",level:3},{value:"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668",level:3},{value:"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868",level:3},{value:"2.8.7 \u52a8\u6001\u5524\u9192",id:"287-\u52a8\u6001\u5524\u9192",level:3},{value:"2.9 \u4e92\u64cd\u4f5c\u6027",id:"29-\u4e92\u64cd\u4f5c\u6027",level:2},{value:"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5",level:3},{value:"2.9.1.1 Object models",id:"2911-object-models",level:4},{value:"2.9.1.2 Virtual machines",id:"2912-virtual-machines",level:4},{value:"2.9.1.3 Foreign function interfaces",id:"2913-foreign-function-interfaces",level:4},{value:"2.9.1.4 Challenges",id:"2914-challenges",level:4},{value:"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027",level:3},{value:"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3",level:4},{value:"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027",level:4},{value:"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb",level:4},{value:"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027",level:4},{value:"2.9.5 \u4ea4\u4e92\u6a21\u5f0f",id:"295-\u4ea4\u4e92\u6a21\u5f0f",level:3},{value:"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94",id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94",level:4},{value:"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9",level:4},{value:"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027",id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027",level:4},{value:"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236",level:4},{value:"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42",level:3},{value:"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528",id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528",level:4},{value:"2.10 GPU VM",id:"210-gpu-vm",level:2},{value:"2.11 Render VM",id:"211-render-vm",level:2},{value:"2.12 RealityIS Runtime",id:"212-realityis-runtime",level:2},{value:"2.13 \u6027\u80fd\u56e0\u7d20",id:"213-\u6027\u80fd\u56e0\u7d20",level:2},{value:"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931",id:"2131-\u5c40\u90e8\u6027\u4e27\u5931",level:3},{value:"2.13.2 \u65e0\u6548\u8ba1\u7b97",id:"2132-\u65e0\u6548\u8ba1\u7b97",level:3},{value:"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*",id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d",level:2},{value:"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840",id:"2141-realityis\u6838\u5fc3\u57fa\u7840",level:3},{value:"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027",id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027",level:3},{value:"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5",id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5",level:3},{value:"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77",level:4},{value:"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027",id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027",level:4},{value:"2.14.3.3 \u7248\u672c\u7ba1\u7406",id:"21433-\u7248\u672c\u7ba1\u7406",level:4},{value:"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e",level:4},{value:"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027",level:3},{value:"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b",level:2},{value:"2.15.1 \u590d\u6742\u7cfb\u7edf",id:"2151-\u590d\u6742\u7cfb\u7edf",level:3},{value:"2.15.2 \u7ec6\u80de\u6a21\u578b",id:"2152-\u7ec6\u80de\u6a21\u578b",level:3},{value:"2.15.2.1 Isolation",id:"21521-isolation",level:4},{value:"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",level:3},{value:"2.15.3.1 Is Erlang object oriented?",id:"21531-is-erlang-object-oriented",level:4},{value:"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb",id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb",level:4},{value:"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236",id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236",level:4},{value:"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61",level:3},{value:"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb",level:4},{value:"2.15.4.2 \u6d88\u606f\u4f20\u9012",id:"21542-\u6d88\u606f\u4f20\u9012",level:4},{value:"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236",level:4},{value:"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5",id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5",level:4},{value:"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7",id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7",level:4},{value:"2.15.4.6 \u591a\u6001",id:"21546-\u591a\u6001",level:4},{value:"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb",id:"21547-\u5bf9\u8c61\u5173\u7cfb",level:4},{value:"2.15.4.8 \u5bb9\u9519\u673a\u5236",id:"21548-\u5bb9\u9519\u673a\u5236",level:4},{value:"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236",level:2},{value:"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027",id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027",level:3},{value:"2.16.1.1 java class loader & security",id:"21611-java-class-loader--security",level:4},{value:"2.16.1.2 Java applets",id:"21612-java-applets",level:4},{value:"2.16.1.3 MVM",id:"21613-mvm",level:4},{value:"2.16.2 Program Security Mechanisms",id:"2162-program-security-mechanisms",level:3},{value:"2.16.2.1 CFI",id:"21621-cfi",level:4},{value:"2.16.2.2 SFI",id:"21622-sfi",level:4},{value:"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027",level:5},{value:"2.16.2.2.2 Heavyweight Transitions",id:"216222-heavyweight-transitions",level:5},{value:"2.16.2.3 object space model",id:"21623-object--space-model",level:4},{value:"2.16.2.4 lua Environment",id:"21624-lua-environment",level:4},{value:"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236",id:"21625-erlang-\u9694\u79bb\u673a\u5236",level:4},{value:"2.16.3 Webassembly Security",id:"2163-webassembly-security",level:3},{value:"2.16.3.1 Module & CFI",id:"21631-module--cfi",level:4},{value:"2.16.3.2 Memory safety",id:"21632-memory-safety",level:4},{value:"2.16.3.3 Isolation without Taxation",id:"21633-isolation-without-taxation",level:4},{value:"2.16.3.3.1 Zero-cost conditions",id:"216331-zero-cost-conditions",level:5},{value:"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236",level:3},{value:"2.16.4.1 \u5bf9\u8c61\u9694\u79bb",id:"21641-\u5bf9\u8c61\u9694\u79bb",level:4},{value:"2.16.4.2 app spaces",id:"21642-app-spaces",level:4},{value:"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1",id:"21643-\u5bf9\u8c61\u901a\u4fe1",level:4},{value:"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362",level:4},{value:"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784",id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784",level:2},{value:"2.17.1 LLVM",id:"2171-llvm",level:3},{value:"2.17.2 USD",id:"2172-usd",level:3},{value:"2.17.3 MLIR",id:"2173-mlir",level:3},{value:"2.17.4 Lua C API",id:"2174-lua-c-api",level:3},{value:"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784",level:3},{value:"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784",level:2},{value:"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236",id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236",level:3},{value:"2.18.2 \u94fe\u63a5\u673a\u5236",id:"2182-\u94fe\u63a5\u673a\u5236",level:3},{value:"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236",id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236",level:3},{value:"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00",level:2},{value:"3.1 Creation ID",id:"31-creation-id",level:2},{value:"3.2 Creation Simulation",id:"32-creation-simulation",level:2},{value:"3.3 UI\u7ec4\u4ef6",id:"33-ui\u7ec4\u4ef6",level:2},{value:"3.3.1 Bevy UI",id:"331-bevy-ui",level:3},{value:"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001",level:3},{value:"4.1 Reality ID",id:"41-reality-id",level:2},{value:"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406",id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406",id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406",level:3},{value:"4.2 The Reality World app",id:"42-the-reality-world-app",level:2},{value:"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe",level:3},{value:"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054",level:4},{value:"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49",level:4},{value:"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe",level:4},{value:"4.2.2 \u4f20\u9001\u95e8",id:"422-\u4f20\u9001\u95e8",level:3},{value:"4.2.3 Point and Click",id:"423-point-and-click",level:3},{value:"4.3 \u6e90\u52a8\u529b",id:"43-\u6e90\u52a8\u529b",level:2},{value:"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6",level:3},{value:"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a",level:3},{value:"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e",id:"4321-\u6301\u7eed\u7ecf\u6d4e",level:4},{value:"4.3.2.2 \u5e7f\u544a\u5185\u5bb9",id:"4322-\u5e7f\u544a\u5185\u5bb9",level:4},{value:"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca",level:3},{value:"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743",id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743",level:2},{value:"4.4.1 RealityIDComponent",id:"441-realityidcomponent",level:3},{value:"4.4.2 readonly",id:"442-readonly",level:3},{value:"4.4.3 \u91cd\u65b0\u52a0\u8f7d",id:"443-\u91cd\u65b0\u52a0\u8f7d",level:3},{value:"4.5 \u7a33\u5b9a\u6027",id:"45-\u7a33\u5b9a\u6027",level:2},{value:"4.5.1 Reality Verified Components",id:"451-reality-verified-components",level:3},{value:"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6",level:3},{value:"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613",id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613",level:2},{value:"4.6.1 \u53ca\u65f6\u8d2d\u4e70",id:"461-\u53ca\u65f6\u8d2d\u4e70",level:3},{value:"4.6.2 \u667a\u80fd\u8d2d\u4e70",id:"462-\u667a\u80fd\u8d2d\u4e70",level:3},{value:"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a",level:3},{value:"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5",level:4},{value:"4.6.4 \u5e02\u573a\u7ecf\u6d4e",id:"464-\u5e02\u573a\u7ecf\u6d4e",level:3},{value:"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c",level:4},{value:"4.6.5 \u533a\u5757\u94fe",id:"465-\u533a\u5757\u94fe",level:3},{value:"4.6.5.1 \u4ef7\u503c\u5173\u8054",id:"4651-\u4ef7\u503c\u5173\u8054",level:4},{value:"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a",id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a",level:4},{value:"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c",level:4},{value:"4.6.6 Royalty",id:"466-royalty",level:3},{value:"4.6.6.1 \u6807\u51c6\u7a0e",id:"4661-\u6807\u51c6\u7a0e",level:4},{value:"4.6.6.2 \u7ec4\u4ef6\u7a0e",id:"4662-\u7ec4\u4ef6\u7a0e",level:4},{value:"4.6.9 \u5b8c\u6574\u7684\u751f\u6001",id:"469-\u5b8c\u6574\u7684\u751f\u6001",level:3},{value:"4.7 Social",id:"47-social",level:2},{value:"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4",id:"471-\u79c1\u4eba\u5316\u793e\u4ea4",level:3},{value:"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1",id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1",level:4},{value:"4.7.2 \u5173\u6ce8\u73b0\u5b9e",id:"472--\u5173\u6ce8\u73b0\u5b9e",level:3},{value:"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c",level:2},{value:"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027",id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027",level:3},{value:"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb",level:3},{value:"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020",level:3},{value:"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c",id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c",level:3},{value:"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f",id:"485-\u521b\u9020\u7684\u65b9\u5f0f",level:3},{value:"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b",level:3},{value:"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c",level:3},{value:"4.9 Third party apps",id:"49-third-party-apps",level:2},{value:"4.10 \u793e\u4f1a\u4ef7\u503c",id:"410--\u793e\u4f1a\u4ef7\u503c",level:2},{value:"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5",level:3},{value:"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd",level:3},{value:"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df",level:3},{value:"4.11 \u6807\u51c6",id:"411-\u6807\u51c6",level:2},{value:"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9",level:3},{value:"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784",level:3},{value:"4.11.3 \u6807\u51c6\u7ba1\u7406",id:"4113-\u6807\u51c6\u7ba1\u7406",level:3},{value:"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5",id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5",level:4},{value:"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236",id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236",level:4},{value:"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09",id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236",level:4},{value:"4.11.4 \u8de8\u8d8a\u6807\u51c6",id:"4114-\u8de8\u8d8a\u6807\u51c6",level:3},{value:"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027",level:4},{value:"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse",id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse",level:2},{value:"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c",id:"4121-\u6807\u51c6\u7684\u4ef7\u503c",level:3},{value:"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f",level:3},{value:"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6",level:3},{value:"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236",level:4},{value:"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316",level:3},{value:"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027",level:4},{value:"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a",level:4},{value:"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0",level:4},{value:"4.13 \u7528\u6237\u521b\u4f5c",id:"413-\u7528\u6237\u521b\u4f5c",level:2},{value:"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6",level:3},{value:"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4",level:3},{value:"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7",id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7",level:3},{value:"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406",level:3},{value:"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92",level:2},{value:"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458",id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458",level:3},{value:"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI",id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai",level:3},{value:"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012",level:4},{value:"5.1 \u4ee3\u5e01\u7ecf\u6d4e",id:"51-\u4ee3\u5e01\u7ecf\u6d4e",level:2},{value:"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f",level:3},{value:"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165",level:3},{value:"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97",id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97",level:2},{value:"5.2.1 \u7ed3\u7b97\u6027\u80fd",id:"521-\u7ed3\u7b97\u6027\u80fd",level:3},{value:"5.3 \u667a\u80fd\u5408\u7ea6",id:"53-\u667a\u80fd\u5408\u7ea6",level:2},{value:"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e",level:2},{value:"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01",id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01",level:3},{value:"5.4.2 \u6d41\u52a8\u6027",id:"542-\u6d41\u52a8\u6027",level:3},{value:"5.5 \u5e73\u53f0\u4fe1\u7528",id:"55-\u5e73\u53f0\u4fe1\u7528",level:2},{value:"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae",id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae",level:3},{value:"5.5.2 \u4ee3\u5e01\u534f\u8bae",id:"552-\u4ee3\u5e01\u534f\u8bae",level:3},{value:"5.6 \u73b0\u5b9e\u5e94\u7528",id:"56-\u73b0\u5b9e\u5e94\u7528",level:2},{value:"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01",level:2},{value:"5.7.1 \u73a9\u5bb6\u9053\u5fb7",id:"571-\u73a9\u5bb6\u9053\u5fb7",level:3},{value:"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1",id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1",level:3},{value:"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1",level:2},{value:"5.8.1 \u793e\u4ea4\u5206\u4eab",id:"581-\u793e\u4ea4\u5206\u4eab",level:3},{value:"5.8.2 \u53c2\u4e0e\u5185\u6d4b",id:"582-\u53c2\u4e0e\u5185\u6d4b",level:3},{value:"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd",level:2},{value:"5.10 \u67b6\u6784\u7f3a\u9677",id:"510-\u67b6\u6784\u7f3a\u9677",level:2},{value:"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb",level:3},{value:"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5",level:3},{value:"7.1 \u6570\u636e\u683c\u5f0f",id:"71-\u6570\u636e\u683c\u5f0f",level:2},{value:"7.1.1 USD",id:"711-usd",level:3},{value:"7.1.1.1 \u65b0\u601d\u60f3",id:"7111-\u65b0\u601d\u60f3",level:4},{value:"7.1.1.2 \u6280\u672f\u65b9\u6848",id:"7112-\u6280\u672f\u65b9\u6848",level:4},{value:"7.1.1.3 USDZ",id:"7113-usdz",level:4},{value:"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0",id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0",level:4},{value:"7.1.1.5 \u5bf9\u6bd4",id:"7115-\u5bf9\u6bd4",level:4},{value:"7.1.2 Alembic formats",id:"712-alembic-formats",level:3},{value:"7.1.3 Unity Prefabs",id:"713-unity-prefabs",level:3},{value:"7.1.4 \u4ee3\u7801\u751f\u6210",id:"714-\u4ee3\u7801\u751f\u6210",level:3},{value:"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784",id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784",level:2},{value:"7.2.1 Unity DOTS/ECS",id:"721-unity-dotsecs",level:3},{value:"7.2.2 ECS",id:"722-ecs",level:3},{value:"7.2.3 UE5 MASS",id:"723-ue5-mass",level:3},{value:"7.2.4 Data-oriented and -driven",id:"724-data-oriented-and--driven",level:3},{value:"7.2.5 Rust ECS",id:"725--rust-ecs",level:3},{value:"7.3 \u7f16\u8bd1\u5668\u4e0eDSL",id:"73-\u7f16\u8bd1\u5668\u4e0edsl",level:2},{value:"7.3.1 Taichi",id:"731--taichi",level:3},{value:"7.3.1.1 \u65b0\u601d\u60f3",id:"7311-\u65b0\u601d\u60f3",level:4},{value:"7.3.1.2 \u6280\u672f\u65b9\u6848",id:"7312-\u6280\u672f\u65b9\u6848",level:4},{value:"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0",id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0",level:4},{value:"7.3.1.4 \u5bf9\u6bd4",id:"7314-\u5bf9\u6bd4",level:4},{value:"7.3.2 Modular AI",id:"732-modular-ai",level:3},{value:"7.3.2.1 \u65b0\u601d\u60f3",id:"7321-\u65b0\u601d\u60f3",level:4},{value:"7.3.2.2 Challenges",id:"7322-challenges",level:4},{value:"7.3.2.3 Core additions to MLIR",id:"7323-core-additions-to-mlir",level:4},{value:"7.3.2.4 \u7b14\u8bb0",id:"7324-\u7b14\u8bb0",level:4},{value:"7.3.3 Jittor",id:"733-jittor",level:3},{value:"7.3.3.1 The front-end",id:"7331-the-front-end",level:4},{value:"7.3.3.2 The back-end",id:"7332-the-back-end",level:4},{value:"7.3.4 PyTorch",id:"734-pytorch",level:3},{value:"7.3.4.1 Perform focused implementation",id:"7341-perform-focused-implementation",level:4},{value:"7.3.5 OneFlow",id:"735-oneflow",level:3},{value:"7.3.6 PREDA",id:"736-preda",level:3},{value:"7.3.7 Web Assembly",id:"737-web-assembly",level:3},{value:"7.4 Others",id:"74-others",level:2},{value:"7.4.1 \u795e\u7ecf\u7f51\u7edc",id:"741-\u795e\u7ecf\u7f51\u7edc",level:3},{value:"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406",level:3},{value:"7.4.2.1 pip",id:"7421-pip",level:4},{value:"7.4.2.2 Rust",id:"7422-rust",level:4},{value:"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01",id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01",level:3},{value:"7.4.4 Rust",id:"744-rust",level:3},{value:"7.4.5 Unity EditorXR and SceneFusion",id:"745-unity-editorxr-and-scenefusion",level:3},{value:"7.4.6 BEVYengine",id:"746-bevyengine",level:3},{value:"7.4.8 magicavoxel",id:"748-magicavoxel",level:3},{value:"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784",level:3},{value:"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b",id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b",level:3},{value:"7.4.11 Meta Builder bot",id:"7411-meta-builder-bot",level:3},{value:"7.4.12 Houdini: Node-based Workflow",id:"7412-houdini-node-based-workflow",level:3},{value:"7.4.13 realityOS",id:"7413-realityos",level:3},{value:"7.4.14 OpenXR",id:"7414-openxr",level:3},{value:"7.4.15 ECS + AI",id:"7415-ecs--ai",level:3},{value:"7.4.16 Unreal blueprint",id:"7416-unreal-blueprint",level:3},{value:"7.4.17 Pixar",id:"7417-pixar",level:3},{value:"7.4.18 Gaia procedural-worlds.com",id:"7418-gaia-procedural-worldscom",level:3},{value:"7.4.19 Google Maps API",id:"7419-google-maps-api",level:3},{value:"7.4.20 Procedural content generation",id:"7420-procedural-content-generation",level:3},{value:"7.4.21 casualcreator",id:"7421-casualcreator",level:3},{value:"7.4.22 \u5fae\u670d\u52a1\u5316",id:"7422-\u5fae\u670d\u52a1\u5316",level:3},{value:"7.4.23 Google Tilt Brush",id:"7423-google-tilt-brush",level:3},{value:"7.4.24 GitHub",id:"7424-github",level:3},{value:"7.4.25 Stechfab",id:"7425-stechfab",level:3},{value:"7.4.26 Game pigeon: games for iMessage",id:"7426-game-pigeon-games-for-imessage",level:3},{value:"7.5 \u5e94\u7528",id:"75-\u5e94\u7528",level:2},{value:"7.5.1 \u5821\u5792\u4e4b\u591c",id:"751--\u5821\u5792\u4e4b\u591c",level:3},{value:"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981",level:4},{value:"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1",id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1",level:4},{value:"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4",id:"7513-\u79c1\u5bc6\u793e\u4ea4",level:4},{value:"7.5.1.4 Verse Language",id:"7514-verse-language",level:4},{value:"7.5.2 ROBLOX",id:"752-roblox",level:3},{value:"7.5.3 NIANTIC",id:"753-niantic",level:3},{value:"7.5.4 SNAPCHAT",id:"754-snapchat",level:3},{value:"7.5.5 Meta",id:"755-meta",level:3},{value:"7.5.6 Omniverse",id:"756-omniverse",level:3},{value:"7.5.7 Minecraft",id:"757-minecraft",level:3},{value:"7.5.8 Wilder World",id:"758-wilder-world",level:3},{value:"7.6 \u533a\u5757\u94fe",id:"76-\u533a\u5757\u94fe",level:2},{value:"7.6.1 \u95ee\u9898",id:"761-\u95ee\u9898",level:3},{value:"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f",id:"7611-\u6210\u672c\u95ee\u9898",level:4},{value:"7.6.1.2 \u793e\u533a\u6cbb\u7406",id:"7612-\u793e\u533a\u6cbb\u7406",level:4},{value:"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7",id:"7614-\u7cfb\u7edf\u5347\u7ea7",level:4},{value:"7.6.2 \u6982\u5ff5",id:"762-\u6982\u5ff5",level:3},{value:"7.6.2.1 \u667a\u80fd\u5408\u7ea6",id:"7621-\u667a\u80fd\u5408\u7ea6",level:4},{value:"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01",id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01",level:4},{value:"7.6.2.3 ICO",id:"7623-ico",level:4},{value:"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09",id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7",level:4},{value:"7.7 Machinations",id:"77-machinations",level:2},{value:"7.8 Render Graph",id:"78-render-graph",level:2},{value:"7.8.1 WorldRenderer challenges",id:"781-worldrenderer-challenges",level:3},{value:"7.8.2 Modular WorldRenderer goals",id:"782-modular-worldrenderer-goals",level:3},{value:"7.9 MLIR",id:"79-mlir",level:2},{value:"7.9.1 \u4ecb\u7ecd",id:"791-\u4ecb\u7ecd",level:3},{value:"7.9.2 \u8bbe\u8ba1\u539f\u5219",id:"792-\u8bbe\u8ba1\u539f\u5219",level:3},{value:"7.9.3 MLIR structure",id:"793-mlir-structure",level:3},{value:"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR",id:"794-llvm-irspir-vmlir",level:3},{value:"7.9.4.1 LLVM IR",id:"7941-llvm-ir",level:4},{value:"7.9.4.2 SPIR-V",id:"7942-spir-v",level:4},{value:"7.9.4.3 MLIR",id:"7943-mlir",level:4},{value:"7.9.5 MLIR Dialect",id:"795-mlir-dialect",level:3},{value:"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6",id:"7951-\u57fa\u7840\u7ec4\u4ef6",level:4},{value:"7.9.5.2 Dialect\u4f53\u7cfb",id:"7952-dialect\u4f53\u7cfb",level:4},{value:"7.9.5.3 Operations",id:"7953-operations",level:4},{value:"7.9.6 Analysis and Transformation",id:"796-analysis-and-transformation",level:3},{value:"7.9.6.1 C++ style pattern-match and rewrite",id:"7961-c-style--pattern-match-and-rewrite",level:4},{value:"7.9.6.2 \u603b\u7ed3",id:"7962-\u603b\u7ed3",level:4},{value:"7.9.7 Generic Transformation with Interfaces",id:"797-generic-transformation-with-interfaces",level:3},{value:"7.9.8 Lowering",id:"798-lowering",level:3},{value:"7.9.8.1 Dialect Conversions",id:"7981-dialect-conversions",level:4},{value:"7.9.9 Lowering to LLVM",id:"799-lowering-to-llvm",level:3},{value:"7.9.10 MLIR Language",id:"7910-mlir-language",level:3},{value:"7.9.10.1 Dialects",id:"79101-dialects",level:4},{value:"7.9.11 Pattern Rewriting",id:"7911-pattern-rewriting",level:3},{value:"7.10 AI",id:"710-ai",level:2},{value:"7.10.1 Apple Shortcuts",id:"7101-apple-shortcuts",level:3},{value:"7.11 Slack",id:"711-slack",level:2},{value:"8.1 Script languages",id:"81-script-languages",level:2},{value:"8.1.1 SkookumScript",id:"811-skookumscript",level:3},{value:"8.1.1.1 Time-flow logic",id:"8111-time-flow-logic",level:4},{value:"7.1.1.2 Conditional flow control",id:"7112-conditional-flow-control",level:4},{value:"8.1.2 Lua",id:"812-lua",level:3},{value:"8.1.3 GameMonkey",id:"813-gamemonkey",level:3},{value:"8.1.4 Python",id:"814-python",level:3},{value:"8.1.5 JavaScript",id:"815-javascript",level:3},{value:"8.1.6 TypeScript",id:"816-typescript",level:3},{value:"8.1.7 SCUMM",id:"817-scumm",level:3},{value:"8.1.8 Mono-script",id:"818-mono-script",level:3},{value:"8.1.9 AngelScript",id:"819-angelscript",level:3},{value:"8.1.10 Scheme/Guile",id:"8110-schemeguile",level:3},{value:"8.1.11 ActionScript",id:"8111-actionscript",level:3},{value:"8.1.12 mruby",id:"8112-mruby",level:3},{value:"8.2 Erlang",id:"82-erlang",level:2},{value:"8.2.1 Beam VM",id:"821-beam-vm",level:3},{value:"8.4.2 Concurrency Oriented Languages",id:"842-concurrency-oriented-languages",level:3},{value:"8.4.2.1 Programming by observing the real world",id:"8421-programming-by-observing-the-real-world",level:4},{value:"8.4.2.2 Characteristics of a COPL",id:"8422-characteristics-of-a-copl",level:4},{value:"8.4.2.3 Process isolation*",id:"8423-process-isolation",level:4},{value:"8.4.2.4 Names of processes",id:"8424-names-of-processes",level:4},{value:"8.4.2.5 Message passing",id:"8425-message-passing",level:4},{value:"8.4.2.6 Protocols*",id:"8426-protocols",level:4},{value:"8.3 Move",id:"83-move",level:2},{value:"8.3.1 \u95ee\u9898",id:"831-\u95ee\u9898",level:3},{value:"8.3.2 Move Design Goals",id:"832-move-design-goals",level:3},{value:"8.3.3 Move Overview",id:"833-move-overview",level:3},{value:"8.3.3.1 Peer-to-Peer Payment Transaction Script",id:"8331-peer-to-peer-payment-transaction-script",level:4},{value:"8.3.3.2 Module",id:"8332-module",level:4},{value:"8.3.4 The Move Language",id:"834-the-move-language",level:3},{value:"8.4 Smalltalk",id:"84-smalltalk",level:2},{value:"8.4.1 Object Model",id:"841-object-model",level:3},{value:"8.4.2.1 Message",id:"8421-message",level:4},{value:"8.4.2.2 Message Sending Syntax",id:"8422-message-sending-syntax",level:4},{value:"8.4.2.3 Discussion of Smalltalk Syntax",id:"8423-discussion-of-smalltalk-syntax",level:4},{value:"8.4.2.4 The Distinction Between Types and Classes",id:"8424-the-distinction-between-types-and-classes",level:4},{value:"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61",id:"842-smalltalk\u9762\u5411\u5bf9\u8c61",level:3},{value:"8.5 Verse",id:"85-verse",level:2},{value:"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f",id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48",level:2},{value:"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f",id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48",level:2},{value:"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316",level:2},{value:"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236",id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236",level:2},{value:"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf",id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf",level:2},{value:"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b",level:2},{value:"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f",level:3},{value:"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c",id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c",level:2},{value:"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c",level:2},{value:"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b",id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b",level:2},{value:"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236",level:2},{value:"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f",level:3},{value:"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e",level:3}],p={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,n.kt)(u,(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\u6587\u6863\u8bf4\u660e"},"\u6587\u6863\u8bf4\u660e"),(0,n.kt)("p",null,"\u672c\u6587\u6863\u4e0b\u9762\u7684\u6240\u6709\u5185\u5bb9\uff0c\u662f\u6211\u81ea2022\u5e744\u6708\u4ece\u534e\u4e3a\u79bb\u804c\u4e4b\u540e\uff0c\u6574\u6574\u4e00\u5e74\u591a\u7684\u6280\u672f\u601d\u8003\u548c\u63a2\u7d22\u7684\u8fc7\u7a0b\uff0c\u8fd9\u90e8\u5206\u4e0d\u662f\u5b8c\u6574\u7684\u6587\u6863\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4ee5\u7b14\u8bb0\u7684\u5f62\u5f0f\u8bb0\u8f7d\uff0c\u6240\u4ee5\u5b58\u5728\u4e0d\u8fde\u8d2f\uff0c\u751a\u81f3\u6709\u4e9b\u5185\u5bb9\u6211\u8ba4\u4e3a\u592a\u7b80\u5355\u4ee5\u81f3\u4e8e\u4e0d\u9700\u8981\u8bb0\u5f55\u7684\u65f6\u5019\uff0c\u8fd9\u90e8\u5206\u751a\u81f3\u90fd\u6ca1\u6709\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u4f46\u6211\u4ecd\u7136\u628a\u8fd9\u4e9b\u5185\u5bb9\u653e\u5728\u8fd9\u91cc\uff0c\u662f\u56e0\u4e3a\u6211\u89c9\u5f97\u5b83\u5bf9\u4e8e\u60f3\u6df1\u5165\u5b66\u4e60Reality World\u80cc\u540e\u601d\u60f3\u7684\u670b\u53cb\u6709\u5b66\u4e60\u4ef7\u503c"),(0,n.kt)("p",null,"\u672c\u6587\u7684Markdown\u7edf\u8ba1\u5927\u6982\u670920\u4e07\u5b57\u3002"),(0,n.kt)("h1",{id:"1--introduction"},"1. Introduction"),(0,n.kt)("p",null,"\u6e38\u620f\uff0c\u4f5c\u4e3a\u4e00\u79cd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u5b9e\u65f6\u8fd0\u884c\u7684\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u5b83\u4e0d\u5149\u5728\u4ea7\u54c1\u5f62\u6001\u4e0a\u8ddf\u4e00\u822c\u7684\u5e94\u7528\u7a0b\u5e8f\u4f53\u9a8c\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4e00\u822c\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u662f\u529f\u80fd\u578b\u7684\uff0c\u5176\u529f\u80fd\u662f\u660e\u786e\u800c\u5177\u4f53\u7684\uff0c\u800c\u6e38\u620f\u5f80\u5f80\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u6ca1\u6709\u76f4\u89c2\u786e\u5b9a\u6027\u7684\u529f\u80fd\uff0c\u6bcf\u4e2a\u4eba\u83b7\u5f97\u7684\u4f53\u9a8c\u53ef\u80fd\u90fd\u4e0d\u4e00\u6837\uff0c\u5b83\u7684\u6574\u4e2a\u7a0b\u5e8f\u7ec4\u7ec7\u53ca\u5176\u5f00\u53d1\u5de5\u5177\u66f4\u662f\u4e0e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e0d\u4e00\u6837\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u662f\u6309\u987a\u5e8f\u6267\u884c\uff0c\u800c\u6e38\u620f\u4e3a\u4e86\u5b9e\u73b0\u5bf9\u771f\u5b9e\u5b9e\u65f6\u4e16\u754c\u7684\u6a21\u62df\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u4e0d\u95f4\u65ad\u7684\u5b9e\u65f6\u8f6e\u8be2\u7684\u673a\u5236\u3002\u8fd9\u79cd\u8f6e\u8be2\u4e0d\u5149\u9020\u5c31\u4e86\u6e38\u620f\u4e2d\u5404\u4e2a\u52a8\u6001\u7cfb\u7edf\u7684\u5b9e\u65f6\u6027\uff0c\u5b83\u5bf9\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u4ee5\u53ca\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\uff0c\u90fd\u63d0\u4f9b\u4e86\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u53ef\u80fd\u6027\u548c\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5e94\u7528\u7a0b\u5e8f\u673a\u5236\u4e3b\u8981\u88ab\u7528\u6765\u5236\u4f5c\u6e38\u620f\uff0c\u800c\u6e38\u620f\u8fd9\u79cd\u7a0b\u5e8f\u673a\u5236\u7684\u4e00\u4e9b\u96be\u70b9\uff0c\u901a\u5e38\u9700\u8981\u975e\u5e38\u4e13\u4e1a\u7684\u6e38\u620f\u516c\u53f8\u624d\u80fd\u505a\u51fa\u4e0d\u9519\u7684\u6e38\u620f\u4ea7\u54c1\u3002\u800c\u53cd\u89c2\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u7531\u4e8e\u5b83\u4eec\u7684\u673a\u5236\u66f4\u7b80\u5355\uff0c\u6613\u4e8e\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\uff0c\u4e0d\u4ec5\u5bf9\u4eba\u4eec\u7684\u751f\u6d3b\u5e26\u6765\u66f4\u5927\u7684\u5f71\u54cd\uff0c\u4e5f\u5927\u5927\u5730\u4fc3\u8fdb\u4e86\u793e\u4f1a\u8fdb\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd1\u5e74\u6765\uff0c\u968f\u7740\u865a\u62df\u73b0\u5b9e\u548c\u5143\u5b87\u5b99\u6982\u5ff5\u548c\u8d8b\u52bf\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7cfb\u7edf\u8d8a\u6765\u8d8a\u9891\u7e41\u88ab\u7528\u4e8e\u5230\u6e38\u620f\u4e4b\u5916\u66f4\u6cdb\u5316\u7684\u9886\u57df\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u624b\u673a\u7684AR\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Snapchat"),"\u7ed9\u7528\u6237\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u6ee4\u955c\u4f53\u9a8c\uff0c\u4e0d\u540c\u4e8e\u4f20\u7edf\u89c6\u9891\u548c\u56fe\u7247\uff0c\u8fd9\u4e9b\u6ee4\u955c\u662f\u4ea4\u4e92\u5f0f\u7684\uff0c\u7528\u6237\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u79cd\u4ea4\u4e92\u80fd\u529b\u751f\u6210\u8fd8\u5bcc\u6709\u8868\u8fbe\u80fd\u529b\u7684\u89c6\u9891\uff0c\u501f\u52a9\u8fd9\u79cd\u80fd\u529b\uff0cSnapchat\u8fc5\u901f\u79f0\u4e3a\u4e00\u6b3e\u6d41\u884c\u7684\u793e\u4ea4\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u6837\u662f\u57fa\u4e8e\u624b\u673aAR\u7684\u529f\u80fd\uff0c",(0,n.kt)("strong",{parentName:"li"},"Niantic"),"\u501f\u52a9\u624b\u673a\u540e\u7f6e\u6444\u50cf\u5934\u7684\u89c6\u89c9\u5b9a\u4f4d\u80fd\u529b\uff08VPS\uff09\uff0c\u5f00\u53d1\u4e86\u8bf8\u5982Pokemon Go\u7b49\u5e94\u7528\uff0c\u8fd9\u79cd\u65b0\u7684\u57fa\u4e8e\u771f\u5b9e\u5730\u7406\u4f4d\u7f6e\u7684\u5e94\u7528\u8ddf\u4eba\u4eec\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\u7684\u6d3b\u52a8\u8054\u7cfb\u8d77\u6765\uff0c\u5e76\u501f\u52a93D\u4e92\u52a8\u7684\u80fd\u529b\uff0c\u628a\u4eba\u4eec\u7684\u751f\u6d3b\u8054\u7cfb\u5f97\u66f4\u7d27\u5bc6\uff0c\u662f\u4e00\u6b3e\u5178\u578b\u7528\u4e8e\u589e\u5f3a\u793e\u4ea4\u5173\u7cfb\u7684\u5e94\u7528\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5",(0,n.kt)("strong",{parentName:"li"},"Roblox"),"\u4e3a\u9996\u7684\u521b\u4f5c\u7c7b\u5de5\u5177\uff0c\u901a\u8fc7\u7b80\u5316\u7a0b\u5e8f\u5206\u53d1\u548c\u90e8\u7f72\u3001\u63d0\u4f9b\u7edf\u4e00\u7684\u591a\u4eba\u5728\u7ebf\u7b49\u670d\u52a1\uff0c\u964d\u4f4e\u4e86\u6e38\u620f\u5f00\u53d1\u7684\u95e8\u69db\uff0c\u4f7f\u5f97\u66f4\u591a\u7684\u4e2d\u5c0f\u4e2a\u4eba\u521b\u4f5c\u4e92\u52a8\u5185\u5bb9\u66f4\u52a0\u7b80\u5355\u3002\u5e76\u901a\u8fc7\u4e91\u539f\u751f\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u4f7f\u793e\u4ea4\u6e38\u620f\u7684\u6548\u679c\u88ab\u653e\u5927\uff0c\u6210\u4e3a\u672a\u6765\u7684\u91cd\u8981\u8d8b\u52bf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u7c7bMinecraft\u6c99\u76d2\u673a\u5236\u5ef6\u4f38\u7684\u5927\u9003\u6740\u6c99\u76d2\u6e38\u620f",(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b"),"\uff0c\u501f\u52a9\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\uff0c\u4f8b\u5982\u5305\u62ec\u5bf9\u591a\u4eba\u5b9e\u65f6\u6e38\u620f\u66f4\u53cb\u597d\u7684\u5728\u7ebf\u8bed\u97f3\u670d\u52a1\u7b49\uff0c\u4f7f\u5f97\u793e\u4ea4\u5c5e\u6027\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u88ab\u8fdb\u4e00\u6b65\u52a0\u5f3a\u3002\u66f4\u597d\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u4ee5\u53ca\u5821\u5792\u4e4b\u591c\u672c\u8eab\u9003\u751f\u7c7b\u6e38\u620f\u66f4\u597d\u5730\u534f\u540c\u673a\u5236\uff0c\u4f7f\u5f97\u5821\u5792\u4e4b\u591c\u7684\u793e\u4ea4\u5c5e\u6027\u79f0\u4e3a\u4f53\u9a8c\u6700\u597d\u7684\u793e\u4ea4\u5c5e\u6027\uff0c\u5176\u5f00\u521b\u548c\u4e3e\u529e\u7684\u865a\u62df\u6d3e\u5bf9Marshmello\u66f4\u662f\u6380\u8d77\u4e86\u865a\u62df\u6f14\u5531\u4f1a\u7684\u70ed\u6f6e\u3002")),(0,n.kt)("p",null,"\u6240\u6709\u8fd9\u4e9b\u53d8\u5316\u548c\u53d1\u5c55\uff0c\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53ca\u751f\u6001\u90fd\u5e26\u6765\u4e86\u5de8\u5927\u7684\u5f71\u54cd\u548c\u53d8\u5316\uff0c\u8fd9\u4e9b\u5f71\u54cd\u548c\u53d8\u5316\u540e\u9762\uff0c\u9700\u8981\u5168\u65b0\u7684\u6280\u672f\u8303\u5f0f\uff0c\u800c\u8fd9\u4e9b\u65b0\u7684\u6280\u672f\u8303\u5f0f\u53c8\u5c06\u521b\u9020\u589e\u91cf\u7684\u4ef7\u503c\u548c\u4f53\u9a8c\u3002"),(0,n.kt)("h2",{id:"11-\u53d8\u9769"},"1.1 \u53d8\u9769"),(0,n.kt)("h3",{id:"111-\u5f62\u6001\u53d8\u5316"},"1.1.1 \u5f62\u6001\u53d8\u5316"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e9b\u53d8\u5316\uff0c\u4ece\u4e0a\u5f80\u4e0b\u770b\uff0c\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e09\u4e2a\u7ef4\u5ea6\u7684\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005"),"\uff1a\u7531\u4e13\u4e1a\u5f00\u53d1\u8005\u5411\u666e\u901a\u7528\u6237\u8f6c\u79fb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u65b9\u5f0f"),"\uff1a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u65b9\u5f0f\u7531\u5b8c\u5168\u5f00\u53d1\u5230\u57fa\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u73a9\u5bb6\u4f53\u9a8c"),"\uff0c\u7531\u5b8c\u5168\u64cd\u63a7\u5230XR\u8f85\u52a9")),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u5de5\u5177\u65b9\u9762\uff0cRoblox\u548cSnapchat\u7684Lens Studio\u90fd\u9762\u5411\u666e\u901a\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u5171\u540c\u7684\u7279\u70b9\u5305\u62ec\u7b80\u5316\u7684\u811a\u672c\uff0c\u4ee5\u53ca\u4e00\u952e\u53d1\u5e03\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005 \u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u53bb\u5904\u7406\u5e73\u53f0\u76f8\u5173\u95ee\u9898\u3002\u53e6\u4e00\u65b9\u9762\u662f\u8fd9\u7c7b\u5de5\u5177\u90fd\u662f\u6df1\u5165\u96c6\u6210\u5e73\u53f0\u7684\u7279\u5b9a\u529f\u80fd\uff0c\u4f8b\u5982Lens Studio\u5e95\u5c42\u7684AR\u573a\u666f\u7406\u89e3\u7b97\u6cd5\uff0c\u4ee5\u53caRoblox\u5185\u7f6e\u7684\u591a\u4eba\u5728\u7ebf\u670d\u52a1\u3002",(0,n.kt)("strong",{parentName:"p"},"\u6df1\u5ea6\u96c6\u6210\u5e73\u53f0\u4e0e\u7b97\u6cd5\uff0c\u76f8\u6bd4\u4e8e\u4f20\u7edf\u901a\u7528\u6e38\u620f\u5f15\u64ce\uff0c\u5c06\u6210\u4e3a\u672a\u6765\u7684\u4e00\u4e2a\u65b9\u5411\u548c\u4f18\u52bf"),"\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"roblox",src:l(3896).Z,width:"1002",height:"288"})),(0,n.kt)("p",null,"\u5728\u5f00\u53d1\u65b9\u5f0f\u65b9\u9762\uff0c\u4f20\u7edf\u7684\u6d41\u7a0b\u9700\u8981\u5f00\u53d1\u8005\u5b9a\u4e49\u6240\u6709\u7684\u903b\u8f91\uff0c\u5305\u62ec\u89e6\u53d1\u903b\u8f91\u7684\u673a\u5236\uff0c\u8fd9\u90e8\u5206\u5c24\u5176\u590d\u6742\u3002\u5728Snapchat\u57fa\u4e8eAR\u7684\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u4e2d\uff0c\u8fd9\u7c7b\u4e92\u52a8\u5185\u5bb9\u7684\u9a71\u52a8\u5b8c\u5168\u6765\u6e90\u4e8e\u624b\u673a\u5bf9\u573a\u666f\u7406\u89e3\uff0c\u8fd9\u4e9b\u90fd\u7531AR\u7b97\u6cd5\u6765\u63d0\u4f9b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5904\u7406\u4efb\u4f55\u4ea4\u4e92\u9a71\u52a8\u65b9\u9762\u7684\u903b\u8f91\uff0c\u800c\u53ea\u9700\u8981\u5173\u7cfb\u5bf9\u4ea4\u4e92\u7684\u54cd\u5e94\u903b\u8f91\u3002\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u4ec5\u5927\u5927\u7b80\u5316\u4e86\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\uff0c\u4e5f\u4ece\u6839\u672c\u4e0a\u5bf9\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u7684\u6d41\u7a0b\u5e26\u6765\u4e86\u5f88\u5927\u7684\u53d8\u9769\u3002",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u903b\u8f91\u5f00\u53d1\u7684\u89e6\u53d1\u673a\u5236\uff0c\u89e6\u53d1\u673a\u5236\u6570\u636e\u5316\uff0c\u6df1\u5ea6\u4e0e\u5e73\u53f0\u96c6\u6210\uff0c\u662f\u672a\u6765\u4e92\u52a8\u5185\u5bb9\u5f00\u53d1\u8d70\u5411\u5e73\u6c11\u5316\u7684\u91cd\u8981\u65b9\u5f0f \u4e4b\u4e00"),"\u3002\u5f53\u7136\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u57fa\u4e8e\u4ee3\u7406\u7684\u7269\u4f53\u4f4d\u7f6e\u6446\u653e\u673a\u5236\u4e5f\u8d77\u5230\u4e86\u5f88\u5927\u7684\u8f85\u52a9\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u540c\u6837\u501f\u52a9\u4e0e\u4e8b\u4ef6\u89e6\u53d1\u673a\u5236\u7684\u6570\u636e\u5316\uff0c\u4ee5\u53ca\u57fa\u4e8eXR\u8bbe\u5907\u5bf9\u573a\u666f\u7684\u7406\u89e3\uff0c\u7528\u6237\u5bf9\u4e92\u52a8\u5185\u5bb9\u7684\u90e8\u5206\u64cd\u4f5c\uff0c\u7531\u539f\u6765\u4e3b\u52a8\u3001\u7cbe\u7ec6\u5730\u63a7\u5236\u865a\u62df\u6444\u50cf\u673a\u548c\u7269\u4f53\uff0c\u53d8\u4e3a\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7b97\u6cd5\u7684\u81ea\u52a8\u9a71\u52a8\uff0c\u8fd9\u5927\u5927\u7b80\u5316\u4e86\u4ea4\u4e92\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5404\u4e2a\u5c42\u9762\u7684\u53d8\u5316\uff0c\u6700\u7ec8\u90fd\u4f1a\u5bfc\u81f4\u6574\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u5236\u4f5c\u6d41\u7a0b\u4f1a\u53d1\u751f\u8f83\u5927\u7684\u53d8\u5316\u3002"),(0,n.kt)("h3",{id:"112-\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"},"1.1.2 \u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u5316"),(0,n.kt)("p",null,"\u4ece\u5f00\u53d1\u7684\u89d2\u5ea6\uff0c\u4ece\u4e0b\u5f80\u4e0a\u770b\uff0c\u8fd9\u5e26\u6765\u7684\u662f\u8ba1\u7b97\u67b6\u6784\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"change",src:l(326).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\u7684\uff0c\u4ece\u786c\u4ef6\u5230\u8f6f\u4ef6\uff0c\u6240\u6709\u4e00\u5207\u6d41\u7a0b\u548c\u529f\u80fd\u90fd\u662f\u9488\u5bf9\u8fd9\u4e2a\u6a21\u578b\u8bbe\u8ba1\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u7801\u90fd\u4f1a\u88ab\u7f16\u8bd1\u548c\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u53ef\u80fd\u76f8\u4e92\u5f15\u7528\uff0c\u6240\u6709\u9700\u8981\u94fe\u63a5\u5668\u6765\u91cd\u65b0\u5b9a\u4f4d\u6bcf\u4e2a\u5f15\u7528\u53d8\u91cf\u7684\u5730\u5740\u3002\u8fd9\u6837\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u975e\u5e38\u9002\u5408\u4e8e\u5904\u7406\u5177\u6709\u72ec\u7acb\u529f\u80fd\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u4f46\u5b83\u6709\u6bd4\u8f83\u81f4\u547d\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u56e0\u4e3a\u6240\u6709\u6e90\u4ee3\u7801\u7f16\u8bd1\u7684\u76ee\u6807\u4ee3\u7801\u90fd\u4f1a\u94fe\u63a5\u5230\u4e00\u8d77\uff0c\u6240\u4ee5\u5b83\u4eec\u4ece\u6839\u672c\u4e0a\u5c31\u4e0d\u652f\u6301\u5927\u89c4\u6a21\u5e94\u7528\u7a0b\u5e8f\uff0c\u56e0\u4e3a\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u53ef\u80fd\u7531\u6d77\u91cf\u7684\u6e90\u4ee3\u7801\u7ec4\u6210\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\uff0c\u56e0\u6b64\u5b83\u4eec\u5f88\u96be\u652f\u6301\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u72ec\u7acb\u5b50\u7a0b\u5e8f\u901a\u4fe1\uff0c\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u603b\u662f\u9700\u8981\u5f15\u7528\u6e90\u4ee3\u7801\u624d\u53ef\u4ee5\u901a\u4fe1\uff0c\u8fd9\u4f7f\u5f97\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u65e0\u6cd5\u6210\u4e3a\u4e00\u4e2a\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\u5f00\u653e\u7cfb\u7edf\uff0c\u800c\u603b\u662f\u9700\u8981\u4e00\u4e2a\u5f00\u53d1\u5546\u6765\u8fdb\u884c\u7ef4\u62a4")),(0,n.kt)("p",null,"\u968f\u7740UGC\u548c\u5143\u5b87\u5b99\u65f6\u4ee3\u7684\u5230\u6765\uff0c\u8fd9\u79cd\u5927\u89c4\u6a21\u7684\u3001\u5177\u6709\u5185\u751f\u5f00\u653e\u5b50\u7cfb\u7edf\u7684\u591a\u5e94\u7528\u4ea4\u4e92\u67b6\u6784\u8d8a\u6765\u8d8a\u6210\u4e3a\u6700\u6838\u5fc3\u7684\u9700\u6c42\uff0c\u8fd9\u9700\u8981\u6211\u4eec\u5728\u8ba1\u7b97\u67b6\u6784\u4e0a\u505a\u51fa\u8f83\u5927\u7684\u53d8\u9769\u3002"),(0,n.kt)("h4",{id:"1121-\u4e1a\u52a1\u6bd4\u55bb"},"1.1.2.1 \u4e1a\u52a1\u6bd4\u55bb"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u817e\u8baf\u6709\u975e\u5e38\u6d77\u91cf\u7684\u4e1a\u52a1\uff0c\u6bd4\u5982\u5fae\u4fe1\uff0c\u97f3\u4e50\uff0c\u89c6\u9891\u7b49\uff0c\u76ee\u524d\u8fd9\u4e9b\u4e1a\u52a1\u4e4b\u95f4\u76f8\u4e92\u662f\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u4ed6\u4eec\u7ec4\u7ec7\u4e3a\u76f8\u4e92\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u76f8\u4e92\u6bd4\u8f83\u72ec\u7acb\u7684\u6570\u636e\u7ba1\u7406\uff0c\u670d\u52a1\u5668\u67b6\u6784\u548c\u7ec4\u7ec7\uff0c\u867d\u7136\u5f7c\u6b64\u4e4b\u95f4\u5b58\u5728\u4e00\u5b9a\u5173\u8054\uff0c\u4f46\u662f\u8fd9\u79cd\u5173\u8054\u662f\u9ad8\u5ea6\u7ed3\u6784\u5316\u548c\u89c4\u5219\u5316\u7684\uff0c\u4e14\u5173\u8054\u5f88\u5c11\u3002"),(0,n.kt)("p",null,"\u5f00\u653e\u4e16\u754c\u5219\u610f\u5473\u7740\uff0c\u73b0\u5728\u6240\u6709\u8fd9\u4e9b\u4e1a\u52a1\u9700\u8981\u5728\u4e00\u4e2a\u5e94\u7528\u5185\u7ec4\u7ec7\uff0c\u5b83\u7684\u590d\u6742\u5ea6\u662f\u975e\u5e38\u9ad8\u7684\uff0c\u67b6\u6784\u4e5f\u975e\u5e38\u590d\u6742\uff0c\u6570\u636e\u7ba1\u7406\u548c\u5206\u5e03\u5f0f\u8ba1\u7b97\u90fd\u975e\u5e38\u590d\u6742\uff0c\u5e76\u4e14\u7531\u4e8e\u4f20\u7edf\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u5728\u8fd9\u79cd\u4f53\u91cf\u4e0b\u6839\u672c\u65e0\u6cd5\u6709\u6548\u7ba1\u7406\u7ec4\u7ec7\u548c\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97"),(0,n.kt)("p",null,"\u53ef\u884c\u7684\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5fae\u670d\u52a1\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u5f0f\u7f16\u7a0b")),(0,n.kt)("p",null,"\u5fae\u670d\u52a1\u5316\u662f\u4e00\u79cd\u8f6f\u4ef6\u67b6\u6784\uff0c\u9700\u8981\u9ad8\u5ea6\u4f9d\u8d56\u4e8e\u5bf9\u903b\u8f91\u7684\u8bbe\u8ba1\u548c\u5212\u5206\uff0c\u4ed6\u4e0d\u662f\u4e00\u79cd\u57fa\u7840\u7f16\u7a0b\u6a21\u578b\uff0c\u56e0\u6b64\u65e0\u6cd5\u652f\u6491\u5f00\u653e\u5f0f\u7684\u8bbe\u8ba1\uff0c\u8fd9\u4e9b\u5fae\u670d\u52a1\u901a\u5e38\u90fd\u53ea\u80fd\u662f\u5f00\u53d1\u5546\u8bbe\u8ba1\u597d\u7684\uff0c\u666e\u901a\u7528\u6237\u6ca1\u6cd5\u4fee\u6539\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\u4e0d\u652f\u6301\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("h3",{id:"113-\u6280\u672f\u6311\u6218"},"1.1.3 \u6280\u672f\u6311\u6218"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\uff0c\u4e0a\u8ff0\u7684\u4e00\u4e9b\u53d8\u9769\u5e26\u6765\u7684\u6280\u672f\u6311\u6218\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5168\u65b0\u652f\u6301\u591a\u5e94\u7528\u76f8\u4e92\u901a\u4fe1\u7684\u8ba1\u7b97\u67b6\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u80fd\u591f\u5728\u6240\u6709\u8ba1\u7b97\u8f7b\u677e\u5728\u591a\u4e2a\u670d\u52a1\u5668\u4e4b\u95f4\u8fdb\u884c\u5206\u5e03\u5f0f\u8ba1\u7b97\u7684\u6570\u636e\u548c\u8ba1\u7b97\u67b6\u6784")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u8fd9\u4e24\u4e2a\u5e95\u5c42\u6839\u672c\u6027\u7684\u6311\u6218\uff0c\u4e0a\u5c42\u8fd8\u5305\u62ec\u4e00\u4e9b\u5176\u4ed6\u6311\u6218\uff0c\u6bd4\u5982\u72ec\u7acb\u7a0b\u5e8f\u4e4b\u95f4\u9ad8\u6548\u7684\u901a\u4fe1\u6807\u51c6\u6216\u8005\u673a\u5236\uff0c\u7528\u6237\u5bf9\u6743\u9650\u63a7\u5236\u4e0e\u4ee3\u7801\u7684\u5206\u79bb\uff0c\u666e\u901a\u7528\u6237\u600e\u6837\u65e0\u4ee3\u7801\u7f16\u7a0b\u7b49\u7b49\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u8fdb\u4e00\u6b65\u5206\u6790\u3002"),(0,n.kt)("h2",{id:"12-\u73b0\u72b6"},"1.2 \u73b0\u72b6"),(0,n.kt)("p",null,"\u4e0d\u80fd\u968f\u65f6\u968f\u5730\u9ad8\u6548\u7684\u5185\u5bb9\u521b\u5efa\uff0c\u4e0e\u968f\u65f6\u968f\u5730\u65b9\u4fbf\u7684\u5c06\u521b\u5efa\u7684\u5185\u5bb9\u8fdb\u884c\u793e\u4ea4\u5206\u4eab\uff0c\u662f\u5f53\u524d\u6700\u5927\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u662f3D\u6570\u5b57\u4e16\u754c\u53d1\u5c55\u7684\u4e00\u4e9b\u91cd\u8981\u57fa\u7840\uff1b\u524d\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u7f16\u7a0b\uff08\u901a\u5e38\u9700\u8981\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u80fd\u529b\uff09\uff0c\u6240\u6709\u903b\u8f91\u90fd\u662f\u901a\u8fc7\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u5f0f\u521b\u5efa\u51fa\u6765\u7684\uff08\u5927\u90e8\u5206\u4eba\u90fd\u4e0d\u5177\u5907\uff09\uff1b\u800c\u540e\u8005\u7684\u96be\u70b9\u5728\u4e8e\u5b83\u9700\u8981\u4e00\u5957\u65b0\u7684\u652f\u6301\u5206\u5e03\u5f0f\u534f\u540c\u7f16\u8f91\u548c\u5206\u53d1\u7684\u5e95\u5c42\u6570\u636e\u683c\u5f0f\u8868\u8ff0\uff0c\u8fd9\u4e0e\u5f53\u524d\u5927\u90e8\u5206\u5f15\u64ce\u79c1\u6709\u683c\u5f0f\u90fd\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,"1\u3001\u4e3b\u8981\u57fa\u4e8e\u573a\u666f\u7406\u89e3"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206AR\u5e94\u7528\u90fd\u662f\u57fa\u4e8e\u573a\u666f\u7406\u89e3\u7684\u7b80\u5355\u7279\u6548/\u6ee4\u955c\u5448\u73b0\uff0c\u4ee5\u53ca\u56f4\u7ed5\u8fd9\u4e9b\u6ee4\u955c\u975e\u5e38\u7b80\u5355\u7684\u4ea4\u4e92\uff0c\u6ca1\u6709\u56f4\u7ed5\u573a\u666f\u6784\u5efa\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u5373\u5821\u5792\u4e4b\u591c\u7684\u65b9\u5f0f\uff0c\u5305\u62ec\u66f4\u590d\u6742\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"2\u30013D\u5185\u5bb9\u5206\u53d1"),(0,n.kt)("p",null,"\u5f53\u524d\u5927\u90e8\u5206\u4e0d\u80fd\u5206\u53d13D\u5185\u5bb9\u672c\u8eab\uff0c\u800c\u662f\u5206\u4eab\u5f55\u5236\u7684\u89c6\u9891\uff1b\u6216\u8005\u53ea\u662f\u5206\u4eab\u76f8\u540c\u7684\u6ee4\u955c\u7ed9\u670b\u53cb\uff0c\u4f7f\u7528\u4f53\u9a8c\u6ca1\u6709\u5dee\u5f02\u6027"),(0,n.kt)("p",null,"3\u3001\u7528\u6237\u521b\u5efa\u53c2\u4e0e\u611f\u5f88\u5f31"),(0,n.kt)("p",null,"\u7edd\u5927\u90e8\u5206\u90fd\u662f\u573a\u666f\u7406\u89e3\u9a71\u52a8\uff0c\u4ec5\u6709\u7eaf\u89c6\u89c9\u7684\u4f53\u9a8c\uff0c\u6ca1\u67093D\u771f\u6b63\u590d\u6742\u7684\u4ea4\u4e92\u548c\u521b\u5efa\u4f53\u9a8c"),(0,n.kt)("p",null,"4\u3001\u5927\u90e8\u5206\u805a\u7126\u865a\u62df\u7a7a\u95f4"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u5373\u793e\u4ea4\u65b9\u5411\u884c\u4e1a\u5927\u90e8\u5206\u5728\u505a\u865a\u62df\u7a7a\u95f4\uff1a\u5143\u8c61\u3001RecRoom\u3001monoAI\u7b49"),(0,n.kt)("p",null,"5\u30013D\u521b\u5efa\u7684\u4ef7\u503c/Minecraft "),(0,n.kt)("p",null,"\u9664\u4e86\u7cbe\u5fc3\u7684\u6e38\u620f\u89c4\u5219\u8bbe\u8ba1\uff08\u8fd9\u9700\u8981\u5f88\u9ad8\u7684\u5f00\u53d1\u6280\u5de7\u548c\u80fd\u529b\uff09\uff0c3D\u5185\u5bb9\u7684\u521b\u5efa\u672c\u8eab\u4e5f\u662f\u5f88\u6709\u4e50\u8da3\u7684\uff0c\u800c\u80fd\u591f\u521b\u5efa\u81ea\u5df1\u8bbe\u8ba1\u7684\u4e00\u5b9a\u89c4\u5219\u7684\u5185\u5bb9\u5c31\u66f4\u6709\u8da3"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u6ca1\u6709\u96c6\u4e2d\u4e8e\u9762\u5411\u666e\u901a\u7528\u6237\u521b\u5efa3D\u5185\u5bb9\u7684\u80fd\u529b\u6216\u4f53\u9a8c\uff0cRoblox \u9762\u5411\u6709\u4e00\u5b9a\u7ecf\u9a8c\u7684\u5f00\u53d1\u8005\uff0c\u5e76\u4e14\u5f00\u53d1\u6a21\u5f0f\u672c\u8d28\u4e0a\u4e0e\u4f20\u7edf\u6e38\u620f\u5f00\u53d1\u7c7b\u4f3c\uff0c\u53ea\u662f\u5206\u53d1\u673a\u5236\u4e0d\u4e00\u6837\uff0cNV\u548c\u592a\u6781\u9762\u5411\u7528\u6237\u521b\u4f5c\uff0c\u4f46\u662f\u6ca1\u6709\u9762\u5411\u79fb\u52a8\u7aef\uff0c\u800c\u4e14\u662f\u7eaf\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"6\u3001\u5e95\u5c42\u521b\u65b0"),(0,n.kt)("p",null,"\u5f53\u524d\u666e\u904d\u805a\u7126\u4e0a\u5c42\u67b6\u6784\uff0c\u56f4\u7ed5\u600e\u6837\u5c06\u4f20\u7edf\u6e38\u620f\u7684\u6d41\u7a0b\u548c\u4f53\u9a8c\u5f80\u5143\u5b87\u5b99\u4e0a\u9760\uff0c\u5176\u7ed3\u679c\u5927\u591a\u6570\u865a\u62df\u7a7a\u95f4\u7c7b\u4ea7\u54c1\uff0c\u805a\u7126\u5e95\u5c42\u534f\u4f5c\u7684\u4e3b\u8981\u662fOmniverse\u548c\u592a\u6781\uff0c\u5176\u4e2d\u6df1\u5165\u5e95\u5c42\u6027\u80fd\u7684\u53ea\u6709\u592a\u6781\uff0c\u4f46\u5728\u4e2d\u95f4\u5c42\u4e0a\u4e0b\u534f\u540c\u65b9\u9762\u7f3a\u4e4f\u91cd\u70b9\u521b\u65b0\uff0c\u5176\u4e2d\u592a\u6781\u548c\u5143\u8c61\u90fd\u5728\u4e3b\u6253\u4e91\u6e32\u67d3\uff0c\u592a\u6781\u8fd8\u5f3a\u8c03\u5728\u7ebf\u534f\u540c\u7f16\u8f91\uff0cOmniverse\u5219\u652f\u6301\u4e00\u822c\u7684\u534f\u540c\u7f16\u8f91"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u7a7a\u95f4\u4e5f\u4e3b\u8981\u662f\u7eaf\u89c6\u89c9\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u53ea\u662f\u5728\u91cc\u9762\u884c\u8d70\uff0c\u4e0d\u80fd\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u66f4\u4e0d\u80fd\u521b\u4f5c\uff0c\u6216\u8005\u6709\u7684\u4e5f\u662f\u56fa\u5b9a\u89c4\u5219\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982Roblox \u91cc\u9762\u7684\u4e00\u4e9b\u6a21\u62df\u7ecf\u9a8c\u7684\u6e38\u620f"),(0,n.kt)("p",null,"8\u3001\u6e38\u620f\u66f4\u65b0\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u4e00\u822c\u9700\u8981\u91cd\u65b0\u53d1\u5e03\u7684\u6d41\u7a0b\uff0cUbisoft Scalar\u8bd5\u56fe\u901a\u8fc7\u4e91\u7aef\u5fae\u670d\u52a1\u67b6\u6784\u5b9e\u73b0\u53ca\u65f6\u66f4\u65b0\uff0c\u53e6\u5916\u4e91\u539f\u751f\u57fa\u672c\u4e0a\u5929\u751f\u5c31\u662f\u53ca\u65f6\u66f4\u65b0\u7684\uff0c\u56e0\u4e3a\u5b83\u7684\u8d44\u6e90\u90fd\u5728\u4e91\u7aef"),(0,n.kt)("h2",{id:"13-\u6280\u672f\u4f18\u52bf"},"1.3 \u6280\u672f\u4f18\u52bf"),(0,n.kt)("h3",{id:"131-\u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"},"1.3.1 \u65e0\u4ee3\u7801\u4ea4\u4e92\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"\u73b0\u5728\u5927\u90e8\u5206\u5e94\u7528\u90fd\u662f\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7279\u5b9a\u573a\u666f\uff0c\u63d0\u4f9b\u5b98\u65b9\u7279\u5b9a\u7684\u5e94\u7528\u3001\u89c4\u5219\u6216\u73a9\u6cd5\uff0c\u8ddf\u6e38\u620f\u7684\u601d\u8def\u7c7b\u4f3c\uff0c\u66f4\u5f3a\u8c03\u7528\u6237\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u9664\u4e86\u6e38\u620f\u5f15\u64ce\uff0c\u80fd\u8ba9\u7528\u6237\u521b\u4f5c\u7684\u53ea\u6709Roblox \u53ea\u7c7b\u578b\u7684"),(0,n.kt)("p",null,"\u80fd\u591f\u9762\u5411\u666e\u901a\u7528\u6237\uff0c\u4e14\u9488\u5bf9\u4ea4\u4e92\u5185\u5bb9\u8fdb\u884c\u521b\u4f5c\u7684\uff0c\u53ea\u6709\u4e00\u5bb6\uff0c\u5b83\u662f\u672a\u6765\u6700\u57fa\u7840\u7684\u6a21\u5f0f\u548c\u80fd\u529b\uff0c\u5f53\u524d\u6ca1\u6709\u4e00\u5bb6\u5728\u8fd9\u4e2a\u5c42\u9762\uff0c\u72ec\u6b64\u4e00\u5bb6"),(0,n.kt)("p",null,"\u7528\u6237\u53ef\u4ee5\u57fa\u4e8eRealityWorld \u521b\u4f5c\u6e38\u620f\uff0c\u6216\u8005\u7b80\u5355\u7684\u4f5c\u54c1\uff0c\u8ddfRoblox \u4e00\u6837\uff0c\u4f46\u662f\u5b83\u901a\u8fc7\u4e24\u4e2a\u95e8\u69db\u4ee5\u53ca\u4e30\u5bcc\u521b\u4f5c\u7684\u7c7b\u522b\uff0c\u8ba9\u66f4\u591a\u666e\u901a\u7528\u6237\u53ef\u4ee5\u53c2\u4e0e\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u7528\u6237\u7fa4\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u5728\u8fd9\u4e2a\u5e73\u53f0\u4e0a\u5f00\u53d1\u6e38\u620f\u6709\u53ef\u80fd\u5177\u6709\u66f4\u5927\u7684\u7528\u6237\u7fa4"),(0,n.kt)("h3",{id:"132-\u4ee3\u7801\u590d\u7528\u673a\u5236"},"1.3.2 \u4ee3\u7801\u590d\u7528\u673a\u5236"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"CreationXR runtime\uff0c"),"\u53ef\u4ee5\u88ab\u4efb\u610f\u7b2c\u4e09\u65b9app\u96c6\u6210"),(0,n.kt)("p",null,"\u4ed6\u98a0\u8986\u4e86\u4f20\u7edf\u5f00\u53d1\u8005\u751f\u6001\u7684\u65b9\u5f0f\uff0c\u4f20\u7edf\u7684\u5c0f\u7a0b\u5e8f\u6216\u8005Roblox \u6216\u8005Snapchat \u53ea\u80fd\u96c6\u4e2d\u5f0f\uff0c\u53ea\u6709\u5e73\u53f0\u4e00\u4e2a\u5165\u53e3\uff0c\u800c\u50cfNiantic \u8fd9\u79cd\u4ec5\u5f00\u653e\u5e95\u5c42\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u63a5\u5165\u5b9e\u9645\u5f88\u56f0\u96be\uff0c\u56e0\u4e3a\u8981\u8c03\u7528\u4f17\u591a\u7684API"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u5b58\u5728\u5197\u4f59\uff0c\u91cd\u590d\uff0c\u8fd9\u90e8\u5206\u53ef\u4ee5\u5171\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2aapp\u63a5\u5165\u7684\u65b9\u5f0f\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64\u6bcf\u4e2aapp\u5f00\u53d1\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u7c7b\u4f3c\uff0c\u4f46\u662f3D\u90e8\u4efd\u5374\u8981\u91cd\u590d\u5f00\u53d1\uff0c\u4f8b\u5982\u8981\u63a5\u5165\u9884\u89c8\u6d41\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5728\u81ea\u5df1\u7684app\u91cc\u9762\u5171\u4eab\u4e00\u5957\u5f00\u53d1\u6807\u51c6\uff0cUnity\u4e0d\u7b97\u6807\u51c6\uff0c\u56e0\u4e3a\u4ed6\u66f4\u504f\u4f4e\u5c42\uff0c\u6ca1\u6709\u5b9a\u4e49\u592a\u591a\u89c4\u8303\uff0c\u5bfc\u81f4\u6bcf\u4e2a\u4eba\u5f00\u53d1\u4e0d\u4e00\u6837\uff0c\u800cRealityCreate \u662f\u9ad8\u5ea6\u89c4\u8303\u5316\u7684")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u53ef\u4ee5\u5171\u4eabRealityCreate \u9ad8\u5ea6\u89c4\u8303\u5316\u7684\u6d41\u7a0b\uff0c\u53c8\u53ef\u4ee5\u6700\u7b80\u5355\u7684\u6210\u672c\u548c\u65b9\u5f0f\u63a5\u5165\u81ea\u5df1app\uff0c\u4ece\u800c\u662f\u5f00\u53d1\u8005\u805a\u7126\u521b\u4f5c\u672c\u8eab\uff0c\u540c\u65f6\u80fd\u4eab\u53d7\u4e91\u539f\u751f\uff0c\u7528\u6237\u534f\u4f5c\u7b49\u7b49\u6240\u6709Creation XR\u5f97\u597d\u5904"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e5f\u53ef\u4ee5\u907f\u514din-house \u5f15\u64ce\u7684\u95ee\u9898\uff0cin-house \u5f15\u64ce\u4e3b\u8981\u7684\u95ee\u9898\u662f\u4e0d\u80fd\u88ab\u5176\u4ed6app\u7b80\u5355\u4f7f\u7528\uff0c\u6709\u56fa\u5b9a\u7684\u6d41\u7a0b\uff0c\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u6309\u7167in-house \u7684\u505a\u6cd5\u5feb\u901f\u63d0\u5347\u81ea\u5df1\u7684\u5dee\u5f02\u6027\uff0c\u800c\u907f\u514d\u9677\u5165Unreal\u548cUnity \u90a3\u6837\u7684\u901a\u7528\u5f15\u64ce"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u80fd\u50cfUnity\u4e00\u6837\u88ab\u7528\u4e8e\u5f00\u53d1\u72ec\u7acb\u5e94\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u6293\u4f4f\u4e86\u751f\u6001")),(0,n.kt)("p",null,"\u8fd9\u79cd\u6a21\u5f0f\u8fd8\u6709\u4e00\u4e2a\u597d\u5904\uff0c\u9664\u4e86\u5e94\u7528\u90e8\u7f72\u672c\u8eab\uff0c\u4ed6\u8fd8\u63d0\u4f9b\u5982\u5e94\u7528\u7684\u7edf\u8ba1\u5206\u6790\u7b49\u529f\u80fd\uff0c\u5e94\u7528\u7684\u5b58\u50a8\uff0c\u8fd9\u4e9b\u539f\u672c\u90fd\u662f\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u5bf9\u63a5\u7684\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u770b\u6709\u591a\u4e48\u590d\u6742\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u81ea\u5df1\u81ea\u5df1Unity\u5f00\u53d1app\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u62ec\u5927\u91cf\u7684\u7f8e\u672f\u8d44\u6e90\u548c\u903b\u8f91\u5f00\u53d1\u662f\u6bcf\u4e2a\u6e38\u620f\u5f00\u53d1\u8005\u6bd4\u8f83\u91cd\u590d\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u6253\u5305\u90e8\u7f72\uff0c\u8fd9\u8981\u6c42\u4e00\u4e9b\u5e73\u53f0\u5c42\u7684\u6280\u5de7\u548c\u7ecf\u9a8c\uff0c\u8fd9\u4e9b\u5176\u5b9e\u8d85\u51fa\u4e86\u5f00\u53d1\u8005\u5bf9\u5185\u5bb9\u7684\u805a\u7126\uff0c\u9664\u4e86\u5185\u5bb9\u548c\u73a9\u6cd5\uff0c\u4e00\u4e2a\u6e38\u620f\u521b\u4e1a\u516c\u53f8\u8fd8\u9700\u8981\u82b1\u5f88\u591a\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd8\u9700\u8981\u5bf9\u63a5\u5404\u79cdSDK\uff0c\u5305\u62ec\u7aef\u4fa7\u7684\u548c\u4e91\u4fa7\u7684\uff0c\u800c\u5404\u79cdSDK\u90fd\u8981\u516c\u53f8\u81ea\u5df1\u5b66\u4e60\uff0c\u5e76\u4e14\u4e0d\u540c\u516c\u53f8\u4e4b\u95f4\u8fd9\u4e9b\u5de5\u4f5c\u4e5f\u662f\u91cd\u590d\u7684\uff0c\u4f46\u662f\u6bcf\u4e2a\u516c\u53f8\u90fd\u7684\u62db\u4eba\u53bb\u6316\u5751\uff0c\u6709\u65f6\u5019\u8fd9\u4e9b\u53cd\u800c\u6210\u4e3a\u4e00\u4e9b\u5c0f\u56e2\u961f\u6bd4\u8f83\u963b\u788d\u53d1\u5e03\u7684\u4e00\u4e9b\u969c\u788d"),(0,n.kt)("li",{parentName:"ul"},"\u540e\u671f\u7684\u8fd0\u7ef4\u4e5f\u9700\u8981\u4e00\u4e9b\u7cbe\u529b\u548c\u4eba\u529b\u4e5f\u81ea\u5df1\u5f00\u53d1\u7ecf\u9a8c\u7684\u6295\u5165")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u6e38\u620f\u5f00\u53d1\u56e2\u961f\u82b1\u4e86\u8f83\u591a\u7684\u7cbe\u529b\u5728\u4e00\u4e9b\u7e41\u7410\u7684\u4e8b\u60c5\u4e0a\uff0c\u800c\u4e14\u516c\u53f8\u4e4b\u95f4\u7684\u8fd9\u4e9b\u80fd\u529b\u672c\u53ef\u4ee5\u5171\u4eab\u7684\uff0c\u5f00\u53d1\u8005\u672c\u5e94\u8be5\u805a\u7126\u5185\u5bb9\u5f00\u53d1"),(0,n.kt)("p",null,"\u539f\u56e0\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u8981\u81ea\u5df1\u53d1\u5e03app\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u53bb\u7edf\u4e00\u96c6\u6210\u4e00\u4e9b\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u672c\u8eab\u6ca1\u6709\u6807\u51c6\uff0c\u5f88\u96be\u7edf\u4e00"),(0,n.kt)("p",null,"\u5f53\u7136\u5927\u7684\u5e94\u7528\u672c\u8eab\u9700\u8981\u66f4\u7075\u6d3b\u7684\u80fd\u529b\uff0c\u6709\u592a\u591a\u9650\u5236\u53cd\u800c\u4e0d\u5229\u4e8e\u5f00\u53d1\uff0c\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u5c0f\u5185\u5bb9\uff0c\u5c24\u5176\u662f\u4e2a\u4eba\u5185\u5bb9\uff0c\u8fd9\u662f\u53ef\u884c\u7684\uff0c\u800c\u4e14\u4e2a\u4eba\u5f00\u53d1\u8005\u9700\u8981\u8fd9\u6837\u7684\u751f\u6001"),(0,n.kt)("p",null,"Roblox \u5c31\u662f\u505a\u4e86\u8fd9\u4e9b\u4e8b\u60c5\uff0c\u5e94\u7528\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u62c5\u5fc3\u5176\u4ed6\u4e8b\u60c5\uff0c\u4f46\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301Roblox\u4e4b\u5916\u7684\u5206\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4e0d\u652f\u6301\u94fe\u63a5\u7684\u65b9\u5f0f\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u8981\u9762\u5411PC\u548c\u624b\u673a\uff0c\u6ca1\u6709\u9488\u5bf9XR\u7684\u7b97\u6cd5\u5c42\u63a5\u53e3\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u7a0b\u6a21\u578b\u4e0d\u4e00\u6837\u6240\u4ee5\u4e0d\u53ef\u80fd\u652f\u6301XR\u8bbe\u5907\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u5178\u578b\u7684\u4e13\u4e1a\u5f00\u53d1+\u666e\u901a\u7528\u6237\u73a9\u7684\u6a21\u5f0f\uff0c\u6ca1\u6709\u666e\u901a\u7528\u6237\u7684\u521b\u5efa\u6a21\u5f0f\u548c\u521b\u9020\u4f53\u9a8c")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee5\u6b64\u4e3a\u57fa\u7840\uff0c\u6784\u5efa\u5fae\u670d\u52a1\u67b6\u6784")),(0,n.kt)("p",null,"\u7f8e\u672f\u8d44\u6e90\u7684\u91cd\u590d\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f20\u7edf\u4e92\u52a8\u5185\u5bb9\u6700\u91cd\u8981\u7684\u662f\u73a9\u6cd5\u3001\u6545\u4e8b\uff0c\u7f8e\u672f\u76f8\u5bf9\u4e0d\u662f\u6700\u6838\u5fc3\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u8d44\u6e90\u80fd\u591f\u63d0\u4f9b\u72ec\u7279\u7684\u89c6\u89c9\u8bed\u8a00\uff0c\u4f46\u662f\u8fd9\u4e9b\u89c6\u89c9\u8bed\u8a00\u66f4\u591a\u662f\u98ce\u683c\u5316\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\u5728\u540c\u4e00\u79cd\u5199\u5b9e\u98ce\u683c\u7c7b\u578b\u4e0b\uff0c\u73a9\u5bb6\u5bf9\u4e0d\u540c\u7684\u573a\u666f\u611f\u77e5\u7684\u5dee\u5f02\u5c31\u4f1a\u5c0f\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u7f8e\u672f\u573a\u666f\u901a\u8fc7\u7a0b\u5e8f\u5316\u751f\u6210\u65b9\u6cd5\u662f\u80fd\u63d0\u4f9b\u8f83\u597d\u7684\u5dee\u5f02\u6027\u548c\u72ec\u7279\u6027\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u79cd\u7a0b\u5e8f\u5316\u65b9\u6cd5\u66f4\u52a0\u652f\u6301\u98ce\u683c\u5316\uff0c\u90a3\u4e48\u5c31\u80fd\u6ee1\u8db3\u4e0a\u8ff0\u7684\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u98ce\u683c\u5316\u4e3b\u8981\u8868\u73b0\u4e3a\u7eb9\u7406\u6216\u8005\u57fa\u7840\u6750\u8d28\uff0c\u6709\u65f6\u7f51\u683c\u4e5f\u6709\u4e00\u5b9a\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u90fd\u53ef\u4ee5\u8fdb\u884c\u7814\u7a76")),(0,n.kt)("h3",{id:"133-\u9ad8\u6027\u80fd\u4f4e\u529f\u8017"},"1.3.3 \u9ad8\u6027\u80fd\u3001\u4f4e\u529f\u8017"),(0,n.kt)("p",null,"\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u57fa\u4e8eOOP\u8fdb\u884c\u5f00\u53d1\uff0c\u5176\u4e2d\u7684\u5f15\u7528\u5173\u7cfb\u9519\u7efc\u590d\u6742\uff0c\u5bf9\u73b0\u4ee3\u5185\u5b58\u786c\u4ef6\u67b6\u6784\u6781\u5ea6\u4e0d\u53cb\u597d\uff0c\u9700\u8981\u91cd\u65b0\u5bf9\u6e38\u620f\u7684\u8fd0\u884c\u65f6\u5185\u5b58\u6570\u636e\u8fdb\u884c\u66f4\u597d\u7684\u7ba1\u7406\uff0c\u5e76\u4e14\u8fd9\u4e9b\u7ba1\u7406\u53c8\u4e0d\u80fd\u7ed9\u5f00\u53d1\u8005\u5e26\u6765\u6210\u672c\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.1\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u5927\u89c4\u6a21\u5e76\u53d1\u5206\u5e03\u5f0f"},"1.3.4 \u5927\u89c4\u6a21\u5e76\u53d1\u3001\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u76f8\u4f3c\u7684\u539f\u56e0\uff0c\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u65e0\u6cd5\u4f7f\u7528\u5927\u89c4\u6a21\u5e76\u53d1\u7684\u9700\u6c42\uff0c\u4f8b\u5982\u5355\u53f0\u670d\u52a1\u5668\u6700\u591a\u53ea\u80fd\u652f\u6301\u4e0a\u767e\u4eba\u540c\u65f6\u5728\u7ebf\u3002\u8fd9\u4e3b\u8981\u662f\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u7a0b\u5e8f\u548c\u6570\u636e\u8026\u5408\u5ea6\u975e\u5e38\u9ad8\uff0c\u5bfc\u81f4\u5355\u53f0\u670d\u52a1\u5668\u5fc5\u987b\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u7ba1\u5355\u53f0\u670d\u52a1\u5668\u7684\u5185\u5b58\u4e0d\u591f\uff0c\u4e5f\u4f1a\u5e26\u6765\u591a\u53f0\u670d\u52a1\u5668\u91cd\u590d\u52a0\u8f7d\uff0c\u4ee5\u53ca\u91cd\u590d\u52a0\u8f7d\u5bfc\u81f4\u7684\u6570\u636e\u540c\u6b65\u5bfc\u81f4\u7684\u590d\u6742\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.2.13\u8282\u3002"),(0,n.kt)("h3",{id:"134-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"},"1.3.4 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u4f20\u7edf\u7684\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u6240\u6709\u7684\u903b\u8f91\u90fd\u662f\u5305\u542b\u5728\u7a0b\u5e8f\u4e2d\u4e0d\u53ef\u4fee\u6539\uff0c\u6240\u6709\u7684\u5173\u5361\u3001\u5267\u60c5\u7b49\u7b49\u90fd\u662f\u56fa\u5b9a\u7684\uff0c\u8ddf\u7535\u5f71\u6bd4\u8f83\u7c7b\u4f3c\uff0c\u552f\u4e00\u4e0d\u540c\u7684\u53ef\u80fd\u662f\u6e38\u620f\u5177\u6709\u4ea4\u4e92\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u66f4\u65b0\u7a0b\u5e8f\u65f6\uff0c\u901a\u5e38\u901a\u8fc7DLC\u6216Mod\u7b49\u673a\u5236\u5bf9\u6e38\u620f\u8fdb\u884c\u6269\u5c55\u6216\u589e\u5f3a\uff0c\u4f46\u662f\u8fd9\u4e24\u79cd\u673a\u5236\u901a\u5e38\u90fd\u6bd4\u8f83\u53d7\u9650\uff0c\u56e0\u6b64\u672c\u8d28\u4e0a\uff0c\u81f3\u5c11\u4e00\u4e2a\u5df2\u7ecf\u53d1\u5e03\u7684\u6e38\u620f\u5176\u6838\u5fc3\u4f53\u9a8c\u662f\u5f88\u96be\u6539\u53d8\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u5f00\u653e\u7684Metaverse\u4e0d\u4ec5\u9700\u8981\u53ef\u4ee5\u4efb\u610f\u6dfb\u52a0\u72ec\u7acb\u7a0b\u5e8f\u7684\u80fd\u529b\uff0c\u8fd8\u9700\u8981\u80fd\u591f\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u81ea\u52a8\u7b5b\u9009\u4f18\u79c0\u5185\u5bb9\u7684\u80fd\u529b\uff0c\u5426\u5219\u7528\u6237\u53ef\u80fd\u5f88\u5feb\u5c31\u6c89\u5165\u5f88\u591a\u5783\u573e\u6216\u8005\u8d28\u91cf\u8f83\u4f4e\u7684\u4fe1\u606f\u5f53\u4e2d\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u8fd9\u79cd\u5185\u5bb9\u90fd\u662f\u9700\u8981\u5e73\u53f0\u4f7f\u7528\u4e00\u5b9a\u7684\u7b97\u6cd5\u8fdb\u884c\u63a8\u8350\uff0c\u8fd9\u79cd\u63a8\u8350\u7b97\u6cd5\u4e00\u822c\u7531\u7528\u6237\u5bf9\u81ea\u5df1\u7684\u5185\u5bb9\u8bbe\u7f6e\u4e00\u4e9b\u6807\u7b7e\uff0c\u7136\u540e\u5e73\u53f0\u5efa\u7acb\u4e00\u4e9b\u76f8\u5173\u5ea6\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u771f\u5b9e\u4e16\u754c\u5374\u662f\u76f8\u53cd\u7684\uff0c\u5b83\u4eec\u7531\u6bcf\u4e2a\u6839\u636e\u81ea\u5df1\u7684\u5224\u65ad\u548c\u9009\u62e9\uff0c\u6765\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fdb\u5316\u3002\u53c2\u89c14.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"14-\u5546\u4e1a\u6a21\u5f0f"},"1.4 \u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("h3",{id:"141-\u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"},"1.4.1 \u52a0\u5f3a\u670b\u53cb\u95f4\u5728\u7ebf\u4e92\u52a8\u7684\u6700\u597d\u5f62\u5f0f"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5728\u7ebf\u4e92\u52a8\u6709\u4e09\u79cd\u5f62\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89c6\u9891\u7535\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u5728\u7ebf\u6e38\u620f\uff0c\u5982\u300a\u523a\u6fc0\u6218\u573a\u300b"),(0,n.kt)("li",{parentName:"ul"},"\u300aRoblox\u300b\u7c7b\u7684\u865a\u62df\u623f\u95f4")),(0,n.kt)("p",null,"\u5176\u4e2d\u6e38\u620f\u7c7b\u7684\u591a\u4eba\u5728\u7ebf\uff0c\u8fd8\u662f\u4ee5\u6e38\u620f\u4e3a\u4e3b\uff0c\u8fd9\u4e9b\u4ea4\u4e92\u901a\u5e38\u53ea\u662f\u804a\u5929\u6216\u8005\u8bed\u97f3\uff0c\u6709\u70b9\u50cf\u5728\u73b0\u573a\u4e00\u8d77\u73a9\u6e38\u620f\u5927\u5bb6\u53ef\u4ee5\u76f8\u4e92\u8ba8\u8bba\uff1b\u6574\u4f53\u7684\u6d3b\u52a8\u8fd8\u662f\u4ee5\u73a9\u6e38\u620f\u4e3a\u4e3b\uff0c\u4e92\u52a8\u662f\u8f85\u52a9\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u623f\u95f4\u7c7b\u7684\u4ea4\u4e92\uff0c\u76f8\u5bf9\u79c1\u5bc6\u4e00\u70b9\uff0c\u4f46\u662f\u8fd9\u4e9b\u5e94\u7528\u7684\u6e38\u620f\u6027\u5f80\u5f80\u5f88\u5f31\uff0c\u6bd4\u8f83\u5c40\u9650\u4e8e\u5f62\u5f0f\u4e0a\u7684\u5728\u7ebf\u4e92\u52a8\uff0c\u76ee\u7684\u6027\u548c\u5a31\u4e50\u6027\u90fd\u4e0d\u591f\u5f3a\u3002"),(0,n.kt)("p",null,"Reality World\u76f8\u5bf9\u4e0a\u8ff0\u7684\u6a21\u5f0f\uff0c\u5b58\u5728\u4e00\u4e0b\u7684\u4e00\u4e9b\u72ec\u7279\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e92\u52a8\u7684\u89c4\u5219\u548c\u5185\u5bb9\u5f80\u5f80\u662f\u53ef\u4ee5\u7531\u5176\u4e2d\u4e00\u4e2a\u7528\u6237\u521b\u4f5c\u7684\uff0c\u5177\u6709",(0,n.kt)("strong",{parentName:"li"},"\u72ec\u7279\u6027"),"\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u9488\u5bf9\u6027"),"\uff0c\u6bd4\u5982\u9488\u5bf9\u4e00\u4e2a\u751f\u65e5\u4e13\u95e8\u8bbe\u7f6e\u7684\u4e0e\u670b\u53cb\u76f8\u5173\u7684\u573a\u666f\u548c\u4e92\u52a8\u5185\u5bb9\uff1b",(0,n.kt)("strong",{parentName:"li"},"\u8fd9\u79cd\u72ec\u7279\u6027\u4f7f\u5f97Reality World\u7684\u5185\u5bb9\u66f4\u5bb9\u6613\u5728\u597d\u53cb\u4e4b\u95f4\u53d1\u8d77\u4e92\u52a8")),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u5728\u4e92\u52a8\u7684\u8fc7\u7a0b\u4e2d\u8fdb\u884c\u5171\u540c\u521b\u4f5c\uff0c\u6bd4\u5982\u4f60\u5411\u86cb\u7cd5\u4e0a\u5207\u4e00\u5200\u4e0b\u53bb\uff0c\u6240\u6709\u4eba\u90fd\u53ef\u4ee5\u770b\u5230\u86cb\u7cd5\u88ab\u5207\u6210\u4e24\u4efd\uff0c\u8fd9\u662f\u56e0\u4e3aReality World\u7684\u573a\u666f\u591a\u4eba\u534f\u4f5c\u7279\u6027\uff0c\u800c\u5176\u4ed6\u4e92\u52a8\u7684\u5185\u5bb9\u662f\u56fa\u5b9a\u7684\uff0c\u6bcf\u4e2a\u73a9\u5bb6\u53ea\u80fd\u4f53\u9a8c\u8fd9\u4e9b\u8bbe\u8ba1\u597d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"Reality World\u7684\u5185\u5bb9\u53ef\u4ee5\u5373\u4f7f\u521b\u4f5c\u548c\u5206\u4eab\uff0c\u4e0d\u9700\u8981\u63d0\u4ea4\u5230\u5546\u5e97\uff0c\u7136\u540e\u7528\u6237\u4e0b\u8f7d\uff0c\u53ea\u9700\u8981\u9a6c\u4e0a\u521b\u4f5c\u4e4b\u540e\u53d1\u9001\u7ed9\u597d\u53cb\u4e00\u4e2a\u94fe\u63a5\u5c31\u53ef\u4ee5\u53ca\u65f6\u6253\u5f00")),(0,n.kt)("h3",{id:"142-\u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"},"1.4.2 \u7406\u60f3\u7684\u5e7f\u544a-\u65b0\u578b\u865a\u62df\u7ecf\u6d4e\u4f53\u9a8c"),(0,n.kt)("p",null,"\u5728\u73b0\u4ee3\u6570\u5b57\u7ecf\u6d4e\u4e2d\uff0c\u9664\u4e86\u89c6\u9891\u3001\u56fe\u7247\u548c\u97f3\u4e50\u8fd9\u79cd\u80fd\u76f4\u63a5\u4f53\u9a8c\u7684\u6570\u5b57\u5185\u5bb9\uff0c\u5176\u4ed6\u7684\u5927\u90e8\u5206\u5185\u5bb9\uff0c\u5176\u5b9e\u4f53\u548c\u5bf9\u5e94\u7684\u6570\u5b57\u8868\u8ff0\u90fd\u662f\u5206\u5272\u7684\uff0c\u4f8b\u5982\u6dd8\u5b9d\u90fd\u4e70\u7684\u5546\u54c1\u53ea\u662f\u6570\u5b57\u5316\u540e\u7684\u4e00\u4e2a\u8bb0\u5f55\uff0c\u4f60\u5fc5\u987b\u6536\u5230\u4e1c\u897f\u4e4b\u540e\u624d\u80fd\u4f53\u9a8c\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u4e0e\u4e4b\u76f8\u5173\u7684\u6570\u5b57\u7ecf\u6d4e\u662f\u5e7f\u544a\uff0c\u5e7f\u544a\u4f5c\u4e3a\u4e00\u4e2a\u5c55\u793a\u4ea7\u54c1\u7684\u65b9\u5f0f\uff0c\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u5b83\u4eec\u5f80\u5f80\u4ee5\u89c6\u9891\u6216\u8005\u56fe\u7247\u7684\u5f62\u5f0f\u5448\u73b0\u3002\u7136\u800c\u5728\u8fd9\u79cd\u65b9\u5f0f\u4e2d\uff0c\u5e7f\u544a\u8bed\u4ea7\u54c1\u901a\u5e38\u662f\u5272\u88c2\u7684\uff0c\u53d7\u9650\u4e8e\u5b9e\u7269\u9700\u8981\u573a\u5730\u53ca\u8fd0\u8f93\u7b49\u95ee\u9898\uff0c\u6211\u4eec\u5e76\u4e0d\u80fd\u603b\u662f\u5728\u4efb\u610f\u4e00\u4e2a\u5e7f\u544a\u65c1\u8fb9\u653e\u4e0a\u5b9e\u7269\uff0c\u4f7f\u5f97\u4efb\u4f55\u770b\u5230\u5e7f\u544a\u7684\u4eba\u5c31\u53ef\u4ee5\u8d2d\u4e70\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u5bf9\u4e8e\u540e\u8005\u624d\u662f\u7406\u60f3\u7684\u5e7f\u544a\u5f62\u6001\uff1a\u5c31\u662f\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1\uff0c\u6216\u8005\u8bf4\u5e7f\u544a\u53ef\u4ee5\u4e00\u952e\u76f4\u8fbe\u4ea7\u54c1\u4f53\u9a8c\u548c\u8d2d\u4e70\u3002"),(0,n.kt)("h4",{id:"1421-\u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"},"1.4.2.1 \u5e7f\u544a\u672c\u8eab\u5c31\u662f\u4ea7\u54c1"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u4ea7\u54c1\u5c31\u662f\u6570\u5b57\u5185\u5bb9\uff0c\u800c\u975e\u5b9e\u4f53\u5185\u5bb9\uff0c\u7406\u8bba\u4e0a\u662f\u53ef\u4ee5\u505a\u5230\u8fd9\u79cd\u4e00\u952e\u4f53\u9a8c\u7684\u6548\u679c\u7684\u3002\u6bd4\u5982\u5982\u679c\u4ea7\u54c1\u662f\u4e00\u4e2a\u6e38\u620f\u6216\u8005\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u70b9\u51fb\u4e0b\u8f7d\uff0c\u8fd9\u79cd\u5f62\u5f0f\u73b0\u5728\u5f88\u666e\u904d\u3002\u7136\u800c\u8fd9\u79cd\u65b9\u5f0f\u5e76\u4e0d\u662f\u6700\u597d\u7684\u6a21\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7684\u4ea7\u54c1\u90fd\u5f97\u5f00\u53d1\u4e00\u4e2aapp"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u53ef\u80fd\u5e76\u4e0d\u60f3\u8981\u5b89\u88c5\u90a3\u4e48\u591aapp"),(0,n.kt)("li",{parentName:"ul"},"\u56e0\u4e3a\u6bcf\u4e2aapp\u5b89\u88c5\u9664\u4e86\u4f53\u9a8c\u4ea7\u54c1\u8fd8\u6709\u5f88\u591a\u989d\u5916\u7684\u8d1f\u62c5\uff1a\u6ce8\u518c\uff0c\u767b\u5f55\uff0c\u8fdb\u53bb\u4e86\u89e3\u8f6f\u4ef6\u7684\u5bfc\u822a\u529f\u80fd\u7b49\u7b49")),(0,n.kt)("p",null,"\u6240\u4ee5\u5143\u5b87\u5b99\u662f\u4e00\u4e2a\u66f4\u597d\u7684\u5e7f\u544a\u5e73\u53f0\uff0c\u6bcf\u4e2a\u4ea7\u54c1\u53ea\u9700\u8981\u8bbe\u8ba1\u4e00\u4e2a\u4ea4\u4e92\uff0c\u73a9\u5bb6\u76f4\u63a5\u4f53\u9a8c\u4e00\u4e0b\u5c31\u662f\u3002\u4f46\u662f\u73b0\u5728\u7684\u6280\u672f\u5e76\u4e0d\u80fd\u505a\u5230\u8fd9\u79cd\u4f53\u9a8c\uff0c\u8fd9\u91cc\u9762\u7684\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u5e73\u53f0\u65e0\u6cd5\u652f\u6491\u4efb\u4f55\u5f00\u53d1\u8005\u81ea\u7531\u5f00\u53d1\u4ea4\u4e92\u5185\u5bb9\uff0c\u5f80\u5f80\u53ea\u80fd\u901a\u8fc7\u5e73\u53f0\u53d1\u5e03\uff0c\u8fd9\u6837\u5e7f\u544a\u80fd\u529b\u5f88\u53d7\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u589e\u52a0\u4e86\u65b0\u529f\u80fd\uff0c\u4e5f\u9700\u8981\u6240\u6709\u73a9\u5bb6\u90fd\u66f4\u65b0\uff0c\u6709\u65f6\u5019\u4e00\u4e2a\u5e7f\u544a\u53ea\u6709\u5c11\u6570\u4eba\u6709\u4f53\u9a8c\u9700\u6c42")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0cReality World\u53ef\u4ee5\u505a\u5230\u5382\u5546\u53ef\u4ee5\u4efb\u610f\u53d1\u5e03\u5e26\u6709\u4ea4\u4e92\u7684\u5e7f\u544a\uff0c\u7136\u540e\u4efb\u4f55\u73a9\u5bb6\u53ea\u8981\u770b\u5230\u5b83\uff0c\u5c31\u53ef\u4ee5\u53ca\u65f6\u4f53\u9a8c\u548c\u8d2d\u4e70\uff0c\u771f\u6b63\u505a\u5230\uff1a\u4ea7\u54c1\u53ca\u5e7f\u544a\uff0c\u5e7f\u544a\u53ca\u4ea7\u54c1\uff0c\u8fd9\u79cd\u6a21\u5f0f\u6709\u671b\u91cd\u5851\u4e00\u4e2a\u5168\u65b0\u7684\u865a\u62df\u7ecf\u6d4e\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e7f\u544a\u7684\u5185\u5bb9\u662f\u5b9e\u4f53\u5185\u5bb9\uff0c\u4ecd\u7136\u53ef\u4ee5\u865a\u62df\u5316\u4f53\u9a8c\uff0c\u6216\u8005\u901a\u8fc7\u4ea4\u4e92\uff0c\u76f8\u6bd4\u89c6\u9891\u548c\u56fe\u7247\u66f4\u597d\u7684\u4e86\u89e3\u4ea7\u54c1\u3002"),(0,n.kt)("p",null,"\u89c14.6.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"143-\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e"},"1.4.3 \u771f\u6b63\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u66f4\u6709\u4ef7\u503c\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"144-\u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"},"1.4.4 \u4ee5\u6807\u51c6\u548c\u7ec4\u4ef6\u4e3a\u6838\u5fc3\u7684\u62bd\u6210\u673a\u5236"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684NFT\u7c7b\u7684\u6570\u5b57\u4ea4\u6613\u5e02\u573a\uff0c\u4ea4\u6613\u7684\u662f\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\uff0c\u662f\u4e00\u4e2a\u62f7\u8d1d\uff0c\u8fd9\u4e2a\u62f7\u8d1d\u9664\u975e\u901a\u8fc7\u4e00\u5b9a\u7684\u624b\u6bb5\u8ddf\u8e2a\u8f6c\u552e\u8bb0\u5f55\uff0c\u6216\u8005\u751a\u81f3\u9650\u5236\u8f6c\u552e\uff0c\u5f88\u96be\u4fdd\u8bc1\u521b\u4f5c\u8005\u7684\u6743\u76ca\u3002"),(0,n.kt)("p",null,"\u800cReality World\u4ea4\u6613\u7684\u4e3b\u8981\u662f\u7ec4\u4ef6\u548c\u6807\u51c6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u548c\u6807\u51c6\u5e76\u4e0d\u4f1a\u62f7\u8d1d\u4e00\u4efd\uff0c\u800c\u53ea\u662f\u4e00\u4e2a\u5f15\u7528\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6e90\u5934\u62c9\u53d6\u6700\u65b0\u4ee3\u7801\u3002\u6240\u4ee5\u4ed6\u5929\u751f\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u4e86\u89e3\u4f7f\u7528\u8005\u7684\u60c5\u51b5\uff0c\u6bd4\u5982\u4e00\u4e2a\u6807\u51c6\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u5176\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4e5f\u80fd\u591f\u8ffd\u8e2a\u5230\u6240\u6709\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6807\u51c6\u5f00\u53d1\u8005\u4e0d\u80fd\u80fd\u591f\u6536\u53d6\u6240\u6709\u4f7f\u7528\u8005\u7684\u8d39\u7528\uff0c\u5e76\u4e14\u8fd8\u6709\u5f88\u597d\u7684\u66f4\u65b0\u673a\u5236\uff0c\u901a\u77e5\u7528\u6237\u8d2d\u4e70\u76f8\u5173\u548c\u6700\u65b0\u4ea7\u54c1\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002"),(0,n.kt)("h3",{id:"145-\u6301\u7eed\u6d88\u8d39"},"1.4.5 \u6301\u7eed\u6d88\u8d39"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u5316\u8fdb\u7a0b\u4e2d\uff0c\u6570\u5b57\u5316\u4ea7\u54c1\u5f80\u5f80\u662f\u4e00\u6b21\u6027\u6d88\u8d39\uff0c\u8fd9\u5bfc\u81f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f6f\u4ef6\u5f00\u53d1\u8005\u5347\u7ea7\u52a8\u529b\u4e0d\u5927\uff0c\u5bf9\u521b\u65b0\u53ca\u521b\u65b0\u7684\u901f\u5ea6\u662f\u6781\u4e3a\u4e0d\u5229\u7684\uff0c\u56e0\u4e3a\u65b0\u7528\u6237\u4f1a\u8d8a\u6765\u8d8a\u5c11"),(0,n.kt)("li",{parentName:"ul"},"\u5927\u91cf\u9648\u65e7\u4ee3\u7801\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u517c\u5bb9\u6210\u672c\u9ad8\uff0c\u4e00\u65b9\u9762\u662f\u7528\u6237\u4f7f\u7528\u6bd4\u8f83\u9648\u65e7\u7684\u6280\u672f\u6216\u4f53\u9a8c")),(0,n.kt)("p",null,"\u9700\u8981\u6539\u53d8\u8fd9\u79cd\u5c40\u9762\uff0c\u624d\u80fd\u66f4\u5927\u5730\u6fc0\u6d3b\u6570\u5b57\u6d88\u8d39\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.12.4.3\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"15-\u7528\u6237"},"1.5 \u7528\u6237"),(0,n.kt)("p",null,"Reality World\u5e73\u53f0\u6709\u56db\u79cd\u7c7b\u578b\u7684\u7528\u6237\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u4ece\u521b\u4f5c\u5c42\u9762\u533a\u5206\uff0c\u4e0d\u6d89\u53ca\u5546\u4e1a\u65b9\u9762\u7684\u5206\u7c7b\u6216\u8005\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\uff1a\u7c7b\u4f3c\u4e8e\u6296\u97f3\u5e73\u53f0\u53ea\u89c2\u770b\u89c6\u9891\uff0c\u4ece\u6765\u6ca1\u6709\u6216\u8005\u5f88\u5c11\u53d1\u5e03\u5185\u5bb9\u7684\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7528\u6237\uff1a\u6307\u53ea\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u501f\u52a9PC\u7f16\u8f91\u5668\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\uff1a\u4f7f\u7528PC\u7f16\u8f91\u5668Reality Create\u57fa\u4e8e\u6807\u51c6\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4f5c\u8005\uff1a\u57fa\u4e8e\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\u63d0\u51fa\u67d0\u79cd\u62bd\u8c61\uff0c\u5e76\u5c06\u5176\u8f6c\u6362\u4e3a\u6807\u51c6\uff0c\u4ee5\u53ca\u6301\u7eed\u7ef4\u62a4\u6807\u51c6\u7684\u66f4\u65b0")),(0,n.kt)("h3",{id:"151-\u666e\u901a\u7528\u6237"},"1.5.1 \u666e\u901a\u7528\u6237"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u666e\u901a\u7528\u6237\u4e0d\u8fdb\u884c\u4efb\u4f55\u5f62\u5f0f\u7684\u521b\u4f5c\uff0c\u4f46TA\u4ecd\u7136\u662f\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\u5f88\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u90fd\u5176\u4ed6\u521b\u4f5c\u5185\u5bb9\u7684\u4f7f\u7528\u548c\u4f53\u9a8c\u4ea7\u751f\u6d88\u8d39"),(0,n.kt)("li",{parentName:"ul"},"TA\u901a\u8fc7\u79c1\u4eba\u793e\u4ea4\u7f51\u7edc\uff0c\u4ea7\u751f\u7684\u5bf9\u597d\u7684\u5185\u5bb9\u7684\u4e3b\u52a8\u63a8\u8350\u884c\u4e3a\uff0c\u4fc3\u8fdb\u4e86\u6574\u4e2a\u5e02\u573a\u7ecf\u6d4e")),(0,n.kt)("p",null,"\u5f53\u7136\u6240\u6709\u4eba\u90fd\u662f\u666e\u901a\u7528\u6237\uff0c\u5e76\u4e14\u666e\u901a\u7528\u6237\u4e5f\u6709\u53ef\u80fd\u8f6c\u6362\u4e3a\u5176\u4ed6\u521b\u4f5c\u7528\u6237\u3002"),(0,n.kt)("h3",{id:"152-\u521b\u4f5c\u7528\u6237"},"1.5.2 \u521b\u4f5c\u7528\u6237"),(0,n.kt)("p",null,"\u5e73\u53f0\u5f88\u5927\u4e00\u90e8\u5206\u6280\u672f\u7684\u67b6\u6784\u90fd\u662f\u4e3a\u4e86\u521b\u4f5c\u7528\u6237\uff0c\u8fd9\u662f\u533a\u522b\u5176\u4ed6\u7c7b\u4f3c\u5e73\u53f0\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u521b\u4f5c\u6709\u4e24\u7c7b\u4e3b\u6d41\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e4b\u7c7b\u7684\u6c99\u76d2\u6e38\u620f"),"\uff0c\u5728\u8fd9\u7c7b\u6e38\u620f\u4e2d\uff0c\u6574\u4e2a\u4e16\u754c\u7684\u89c4\u5219\u7c7b\u578b\u6bd4\u8f83\u4e00\u81f4\uff0c\u6bd4\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u5821\u5792\u5efa\u9020\u4e0e\u9003\u751f\uff0c\u300a\u6211\u7684\u4e16\u754c\u300b\u4e2d\u7684\u602a\u7269\u673a\u5236\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5185\u7f6e\u4e8e\u7cfb\u7edf\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u5927\u91cf\u5177\u6709\u56fa\u5b9a\u884c\u4e3a\u7684\u7269\u4ef6\uff0c\u73a9\u5bb6\u521b\u4f5c\u7684\u81ea\u7531\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff1a\u57fa\u672c\u4e0a\u4e0d\u6d89\u53ca\u903b\u8f91\u672c\u8eab\u7684\u6784\u9020\uff0c\u53ea\u6709\u8ddf\u7269\u7406\u4f4d\u7f6e\uff0c\u7269\u4f53\u7ec4\u5408\u7b49\u76f8\u5173\u4e0e\u6e38\u620f\u884c\u4e3a\u65e0\u5173\u7684\u7b56\u7565"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"AR\u4e8b\u4ef6\u9a71\u52a8\u7684\u589e\u5f3a\u73b0\u5b9e\u4f53\u9a8c"),"\uff0c\u8fd9\u4e9b\u5e94\u7528\u4ee5\u300aSnapchat\u300b\u4e3a\u4ee3\u8868\uff0c\u5b83\u63d0\u4f9b\u4e00\u4e9b\u56fa\u5b9a\u7684\u5177\u6709\u4e92\u52a8\u4f53\u9a8c\u7684\u9053\u5177\u6216\u8005\u6ee4\u955c\uff0c\u7528\u6237\u501f\u52a9\u6444\u50cf\u673a\u8fdb\u884c\u4f53\u9a8c\uff1b\u8fd9\u79cd\u4f53\u9a8c\u672c\u8eab\u4e0d\u6d89\u53ca3D\u7684\u521b\u4f5c\uff0c\u4f8b\u5982\u5236\u4f5c\u4e00\u4e2a\u65b0\u7684\u6ee4\u955c\u6216\u8005\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u5b83\u4eec\u4ea7\u751f\u4e86\u4e00\u4e2a\u72ec\u4e00\u65e0\u4e8c\u7684\u89c6\u9891\u5185\u5bb9\uff0c\u5e76\u4e14\u8fd9\u4e2a\u5185\u5bb9\u662f\u8ddf\u81ea\u5df1\u9ad8\u5ea6\u76f8\u5173\u7684\u3002")),(0,n.kt)("p",null,"\u300aSnapchat\u300b\u7684\u6a21\u677f\u53ea\u80fd\u5728PC\u7aef\u5236\u4f5c\uff0c\u300aReality World\u300b\u5219\u53ef\u4ee5\u53ca\u65f6\u521b\u4f5c\u300aSnapchat\u300b\u7c7b\u4f3c\u7684\u6a21\u677f\uff0c\u5e76\u4e14\u53ef\u4ee5\u9009\u62e9\u66f4\u4e30\u5bcc\u7684\u529f\u80fd\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u300aReality World\u300b\u9700\u8981\u652f\u6301\u4efb\u610f\u7684\u7ec4\u4ef6\u4f7f\u7528\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u4efb\u610f\u534f\u4f5c\uff0c\u8fd9\u6837\u624d\u80fd\u4e0d\u9650\u5236\u521b\u4f5c\uff0c\u4e0d\u7136\u5c31\u4f1a\u5f88\u5bb9\u6613\u5c40\u9650\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u7ec4\u4ef6\u5305\uff0c\u6216\u8005\u4e00\u4e9b\u7279\u5b9a\u7684\u4e92\u52a8\u7c7b\u578b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4efb\u610f\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u901a\u4fe1\u548c\u7ec4\u5408\u662fReality World\u72ec\u7279\u7684\u529f\u80fd\uff0c\u5b83\u80fd\u591f\u91ca\u653e\u521b\u4f5c\u8005\u65e0\u9650\u7684\u521b\u610f"),"\u3002"),(0,n.kt)("p",null,"XR\u8bbe\u5907\u4e0a\u7684\u521b\u4f5c\u7528\u6237\u5fc5\u987b\u8d2d\u4e70\u8d44\u6e90\uff0c\u56e0\u4e3a\u4ed6\u4eec\u53ea\u80fd\u57fa\u4e8e\u5df2\u6709\u7684\u8d44\u6e90\u8fdb\u884c\u521b\u4f5c\uff0c\u5f53\u7136\u6709\u4e00\u4e9b\u8d44\u6e90\u5305\u6216\u8005\u7ec4\u4ef6\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5316\u751f\u6210\u5185\u5bb9\u7684\uff0c\u8fd9\u7c7b\u7ec4\u4ef6\u53ef\u4ee5\u751f\u6210\u4e00\u4e9b\u968f\u673a\u4e0d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u8d44\u6e90\u7684\u7c7b\u578b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u8d44\u6e90\uff1a\u6a21\u578b\uff08\u5982\u6811\u6728\u3001\u6c7d\u8f66\u3001\u5f13\u7bad\u7b49\uff09\u3001\u7eb9\u7406\u3001\u7c92\u5b50\u7279\u6548\u3001\u52a8\u753b\u7b49\uff0cReality World\u5b98\u65b9\u5e94\u8be5\u63d0\u4f9b\u8f83\u591a\u7684\u57fa\u7840\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u529f\u80fd\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u662f\u6700\u57fa\u672c\u7684\u884c\u4e3a\uff0c\u5b83\u4eec\u662f\u7528\u6237\u770b\u4e0d\u89c1\u7684\u903b\u8f91\u4ee3\u7801\uff0c\u5b83\u4eec\u7528\u6765\u63a7\u5236\u7269\u4f53\u5728\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u884c\u4e3a\uff1b\u4e0d\u540c\u7ec4\u4ef6\u5305\u4e4b\u95f4\u7684\u7ec4\u4ef6\u53ef\u4ee5\u4efb\u4f55\u7ec4\u5408\uff0c\u521b\u4f5c\u8005\u9700\u8981\u533a\u5206\u5b83\u4eec\u7684\u529f\u80fd\uff0c\u624d\u80fd\u751f\u6210\u66f4\u597d\u7684\u5408\u7406\u7684\u4ea4\u4e92\u903b\u8f91\u3002\u8fd9\u662f\u521b\u4f5c\u4f53\u9a8c\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u90e8\u4ef6\u6216\u8005\u7269\u4f53\uff0c\u7531\u4e00\u5b9a\u7684\u7ec4\u4ef6\u7ec4\u5408\u5f62\u6210\uff0c\u5177\u6709\u67d0\u4e9b\u7279\u5b9a\u903b\u8f91\u529f\u80fd\u7684\u6e38\u620f\u5bf9\u8c61\u6216\u8005\u5b9e\u4f53\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u662f\u76f4\u63a5\u5b58\u5728\u4e8e\u6e38\u620f\u573a\u666f\u7ed3\u6784\u4e2d\u7684\u5143\u7d20\uff0c\u8fd9\u4e9b\u7269\u4f53\u53ef\u80fd\u5305\u542b\u6a21\u578b\u3001\u52a8\u753b\u3001\u4ee5\u53ca\u80fd\u591f\u826f\u597d\u63a7\u5236\u8fd9\u4e9b\u6a21\u578b\u53ca\u5176\u884c\u4e3a\u7684\u7ec4\u4ef6\u7ec4\u5408\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u7528\u6237\u76f4\u63a5\u653e\u7f6e\u5728\u573a\u666f\u4e2d\u5c31\u53ef\u4ee5\u4f7f\u7528\u7684\uff0c\u7c7b\u4f3c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5f53\u4e2d\u7684\u7269\u4f53\uff1b\u5b83\u4eec\u6709\u4e9b\u4e5f\u662f\u7528\u4e8e\u5e2e\u52a9\u521b\u4f5c\u4e00\u4e2a\u573a\u666f\u7684\u7ed3\u6784\u6027\u7684\u7ec4\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u5305\u542bTAG\u7684Entity\uff0c\u4e00\u4e2aNPC\u602a\u7269\u7b49\uff1b\u4e5f\u5305\u542b\u4e00\u4e9b\u7279\u6b8a\u5185\u7f6e\u529f\u80fd\u7684\u90e8\u4ef6\uff0c\u4f8b\u5982Layer\u8868\u7b49\u3002")),(0,n.kt)("h4",{id:"1521-\u4e00\u4e2acreation\u7684\u521b\u4f5c\u6d41\u7a0b"},"1.5.2.1 \u4e00\u4e2aCreation\u7684\u521b\u4f5c\u6d41\u7a0b"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u8005\u9996\u5148\u6d4f\u89c8Creation\u5546\u5e97\uff0c\u4e0b\u8f7d\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u57fa\u672c\u7684\u8d44\u6e90\uff0c\u5982\u4e0a\u9762\u4ecb\u7ecd\u7684\u9759\u6001\u8d44\u6e90\u3001\u529f\u80fd\u7ec4\u4ef6\u548c\u7269\u4f53\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5c06\u5176\u62d6\u5165\u521d\u59cb\u7684\u7a7a\u573a\u666f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u9009\u62e9\u7269\u4f53\u5bf9\u5176\u5c5e\u6027\u8fdb\u884c\u7f16\u8f91\uff0c\u5176\u4e2d\u53ef\u4ee5\u5bf9\u5176\u6dfb\u52a0\u7ec4\u4ef6\uff0c\u7ec4\u4ef6\u6309\u7c7b\u578b\u8fdb\u884c\u7ec4\u7ec7\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u6709\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\u53ca\u8bf4\u660e\uff0c\u8bf4\u660e\u5e94\u8be5\u600e\u6837\u4f7f\u7528\u8be5\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u7ec4\u4ef6\u7684\u5c5e\u6027\u53c2\u6570\u7b49\uff0c\u7ec4\u4ef6\u901a\u8fc7\u53c2\u6570\u6765\u6539\u53d8\u7269\u4f53\u7684\u884c\u4e3a\u6216\u8005\u89c6\u89c9\uff0c\u4f8b\u5982\u5982\u679c\u662f\u7a0b\u5e8f\u5316\u751f\u6210\u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u751f\u6210\u4e0d\u540c\u7684\u573a\u666f\uff0c\u5982\u679c\u662f\u7c92\u5b50\u7279\u6548\u7ec4\u4ef6\uff0c\u5219\u5f62\u6210\u4e0d\u540c\u7684\u89c6\u89c9\u6548\u679c"),(0,n.kt)("li",{parentName:"ul"},"\u64ad\u653e\u9884\u89c8"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u94fe\u63a5\u53d1\u9001\u7ed9\u597d\u53cb"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u70b9\u51fb\u94fe\u63a5\u52a0\u5165\u4e00\u8d77\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u597d\u53cb\u5177\u6709\u6743\u9650\uff0c\u53ef\u4ee5\u8fdb\u884c\u5171\u540c\u7f16\u8f91\uff0c\u8fd9\u4e9b\u7f16\u8f91\u4e5f\u53ef\u4ee5\u662f\u540c\u65f6\u5728\u7ebf\u534f\u540c\u7684")),(0,n.kt)("h3",{id:"153-\u5f00\u53d1\u8005"},"1.5.3 \u5f00\u53d1\u8005"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u53ea\u80fd\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5fc5\u987b\u652f\u6301\u67d0\u4e2a\u6807\u51c6\uff0c\u5f53\u7136\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u652f\u6301\u591a\u4e2a\u6807\u51c6\uff0c\u6765\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u548c\u7ec4\u4ef6\u662f\u9694\u79bb\u7684\u3002\u9664\u6765\u81ea\u6807\u51c6\u4e4b\u5916\u7684\u7b26\u53f7\uff0c\u5176\u4ed6\u7b26\u53f7\u90fd\u662f\u79c1\u6709\u53d8\u91cf\u3002"),(0,n.kt)("h3",{id:"154-\u6807\u51c6\u4f5c\u8005"},"1.5.4 \u6807\u51c6\u4f5c\u8005"),(0,n.kt)("p",null,"\u67d0\u4e2a\u6807\u51c6\u7684\u8d1f\u8d23\u4eba\uff0c\u5f53\u7136\u6807\u51c6\u53ef\u4ee5\u8f6c\u5356\uff0c\u5f53\u524d\u8d1f\u8d23\u4eba\u4e0d\u4e00\u5b9a\u662f\u521b\u59cb\u4f5c\u8005\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u6807\u51c6\u4e0d\u4e00\u5b9a\u9700\u8981\u7f16\u7a0b\uff0c\u5b83\u4ec5\u4ec5\u6d89\u53ca\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u62bd\u8c61\u76f8\u5173\u7684\u6570\u636e\u7ed3\u6784\u3002\u56e0\u6b64\uff0c\u4e0d\u5177\u5907\u7f16\u7a0b\u80fd\u529b\uff0c\u4f46\u662f\u5177\u6709\u8f83\u5f3a\u62bd\u8c61\u80fd\u529b\u7684\u4eba\u4e5f\u53ef\u4ee5\u521b\u5efa\u548c\u7ef4\u62a4\u6807\u51c6\u3002\u4f46\u662f\u4ece\u66f4\u597d\u7684\u6570\u636e\u7ed3\u6784\u5b9a\u4e49\u89d2\u5ea6\uff0c\u7531\u7f16\u7a0b\u4eba\u5458\u7ef4\u62a4\u6807\u51c6\u662f\u6700\u5408\u9002\u7684\uff0c\u4f46\u662f\u7f16\u7a0b\u4eba\u5458\u7684\u62bd\u8c61\u80fd\u529b\u5f80\u5f80\u4e0d\u591f\u3002\u6240\u4ee5\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u662f\u67d0\u4e2a\u6807\u51c6\u540e\u9762\u6709\u62bd\u8c61\u80fd\u529b\u8f83\u5f3a\u548c\u7f16\u7a0b\u80fd\u529b\u8f83\u5f3a\u4e24\u8005\u7684\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53c2\u89c14.11\u548c4.12\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h2",{id:"16-\u521b\u9020\u589e\u91cf\u4ef7\u503c"},"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"),(0,n.kt)("p",null,"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f88\u663e\u7136\uff0c\u8fd9\u79cd\u7531\u7528\u6237\u9a71\u52a8\u7684\u5168\u65b0\u4f53\u9a8c\u9700\u6c42\uff0c\u7528\u5f53\u4e0b\u7684\u6280\u672f\u67b6\u6784\u662f\u505a\u4e0d\u5230\u7684\uff0c\u800c\u4e14\u5b83\u7684\u9650\u5236\u7684\u6839\u6e90\u6765\u6e90\u4e8e\u66f4\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u3002\u5728\u8fd1\u51e0\u5341\u5e74\u7684\u8ba1\u7b97\u673a\u65f6\u4ee3\u4e2d\uff0c\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u53d1\u751f\u592a\u6839\u672c\u6027\u53d8\u5316\uff0c\u4f8b\u5982\u6211\u4eec\u80fd\u611f\u77e5\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u8bd1\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u4e00\u4e9b10\u5e74\u524d\u7684\u7ecf\u5178\u8457\u540d\u57fa\u672c\u4e0a\u73b0\u5728\u8fd8\u662f\u9002\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\u4e5f\u6ca1\u6709\u9769\u547d\u6027\u7684\u53d8\u5316\uff0c\u4e0d\u4ec5\u81f32010\u5e74\u4e4b\u540e\u5f88\u5c11\u63a8\u51fa\u5168\u65b0\u7684\u8bed\u8a00\uff0c\u5927\u90e8\u5206\u8bed\u8a00\u8bbe\u8ba1\u4e5f\u53ea\u662f\u9488\u5bf9\u4e00\u4e9b\u5f00\u53d1\u4f53\u9a8c\u5c42\u9762\u7684\u9009\u62e9\uff0c\u5f88\u591a\u8bed\u8a00\u7684\u6838\u5fc3\u601d\u60f3\u751a\u81f3\u65e9\u57282000\u5e74\u4e4b\u524d\u5c31\u786e\u5b9a")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"add",src:l(1377).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u662f\u8ba1\u7b97\u67b6\u6784\u6700\u91cd\u8981\u7684\u6307\u5411\uff0c\u56e0\u4e3a\u5b83\u4eec\u8fde\u63a5\u8ba1\u7b97\u673a\u786c\u4ef6\u548c\u5e94\u7528\u8f6f\u4ef6\uff0c\u5b83\u4eec\u7684\u53d8\u9769\u5f80\u5f80\u80fd\u591f\u51b3\u5b9a\u4e0a\u5c42\u8f6f\u4ef6\u5f62\u6001\u7684\u53d8\u9769\uff0c\u4ece\u800c\u51b3\u5b9a\u6280\u672f\u5e26\u7ed9\u6d88\u8d39\u8005\u7684\u53d8\u9769\u3002"),(0,n.kt)("p",null,"\u5f53\u5143\u5b87\u5b99\u5e26\u6765\u771f\u6b63\u5927\u89c4\u6a21\u3001\u4e92\u64cd\u4f5c\u3001\u5927\u5e76\u53d1\u7b49\u7b49\u8fd9\u4e9b\u4f20\u7edf\u8ba1\u7b97\u6a21\u578b\u4e0d\u80fd\u5e94\u4ed8\u7684\u9700\u6c42\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5168\u65b0\u7684\u601d\u8def\uff0c\u5728\u8ba1\u7b97\u67b6\u6784\u5c42\u9762\u521b\u9020\u5168\u65b0\u7684\u589e\u91cf\u4ef7\u503c\uff0c\u624d\u6709\u673a\u4f1a\u9a71\u52a8\u6574\u4e2a\u5143\u5b87\u5b99\u7684\u53d8\u9769\u3002"),(0,n.kt)("h1",{id:"2-reality-interoperable-system"},"2. Reality Interoperable System"),(0,n.kt)("p",null,"\u7ed3\u6784\u62bd\u8c61\uff0c\u5bf9\u4e8eXR\u7aef\u7684\u9009\u62e9\uff0c\u5982\u679c\u5361\u5305\u592a\u591a\uff0c\u4f1a\u5bfc\u81f4\u9009\u62e9\u64cd\u4f5c\u5f88\u590d\u6742\uff0c\u53c2\u8003\u6dd8\u5b9d\u8d2d\u7269\uff0c\u5927\u5bb6\u4f1a\u628a\u60f3\u4e70\u7684\u5546\u54c1\u653e\u8fdb\u8d2d\u7269\u8f66\uff0c\u6700\u540e\u4e00\u6b21\u6027\u4ed8\u6b3e"),(0,n.kt)("p",null,"\u8ba9\u7528\u6237\u5728\u624b\u673a\u7aef\u5750\u597d\u5f52\u7c7b\uff0c\u7cbe\u9009\u51fa\u786e\u5b9a\u6216\u8005\u5927\u6982\u7387\u4f1a\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7136\u540e\u7b80\u5316\u5b9e\u9645\u7684\u9009\u62e9\uff0c\u751a\u81f3\u901a\u8fc7\u66f4\u52a0\u53cb\u597d\u7684\u547d\u540d\u89c4\u8303\u6765\u4f7f\u7528\u8bed\u8a00\u9009\u62e9"),(0,n.kt)("p",null,"\u603b\u4e4b\u5c31\u662f\u9700\u8981\u66f4\u597d\u7684\u7c7b\u578b\u5316\uff0c\u5e76\u4e14\u5c06\u7528\u6237\u5bf9\u8d44\u6e90\u7684\u9009\u62e9\u8fc7\u7a0b\u4e2d\uff0c\u878d\u5165\u5206\u7c7b\uff0c\u5f62\u6210\u4e00\u4e2a\u5929\u7136\u7684\u7b5b\u9009\u8fc7\u7a0b"),(0,n.kt)("p",null,"\u5b9a\u4e49\u521b\u4f5c\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u4ec5\u4ec5\u662fCreate\u4e2d\u7684\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u50cf\u5907\u5fd8\u5f55\u7b14\u8bb0\u4e00\u6837\u968f\u65f6\u8bb0\u5f55"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u6e90\u7684\u9009\u62e9\u51c6\u5907\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u770b\u522b\u4eba\u7684\u521b\u4f5c\u4e5f\u662f\u521b\u4f5c\u601d\u8003\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u903b\u8f91\u4e0a\u7684\u7ec4\u7ec7\u53ef\u80fd\u6709\u4e00\u90e8\u4efd\u662f\u975e\u89c6\u89c9\u76f8\u5173\u7684\uff0c\u6240\u4ee5\u8d44\u6e90\u7ba1\u7406\u672c\u8eab\u8981\u878d\u5165\u521b\u4f5c\u8fc7\u7a0b\uff0c\u5373\u5b83\u4e0d\u5149\u662f\u8d44\u6e90\u7ba1\u7406\uff0c\u4e5f\u5305\u542b\u4e00\u5b9a\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f8b\u5982\u6545\u4e8b\u5927\u7eb2\u7ed3\u6784\u7b49\u7b49\uff0c\u5c31\u50cf\u7b56\u5212\u5728\u7ec4\u7ec7\u8868\u683c\u7684\u65f6\u5019\uff0c\u6bd4\u5982\u7f16\u5199\u4eba\u7269\u6545\u4e8b\u5bf9\u8bdd"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u80fd\u4ec5\u4f9d\u8d56\u4e8e\u8d44\u6e90\u8d2d\u4e70+XR\u7aef\u9009\u62e9\u8fd9\u6837\u7684\u4f20\u7edf\u6a21\u5f0f\uff0c\u5373\u4ea4\u4e92\u590d\u6742\uff0c\u4e5f\u4e0d\u7b26\u5408\u5b9e\u9645\u7684\u521b\u4f5c\u6d41\u7a0b")),(0,n.kt)("h2",{id:"21-creation-scene-description"},"2.1 Creation Scene Description"),(0,n.kt)("p",null,"\u9700\u8981\u52a0\u5165\u7528\u6237\u7248\u6743\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"USD\u7684asset resolution\u673a\u5236\uff0c\u4f7f\u5f97\u53ef\u4ee5\u76f4\u63a5\u52a0\u8f7dcreation.id\u7684\u5185\u5b58\uff0c\u800c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u52a0\u8f7d\u6a21\u5757\uff0c\u4f46\u662f\u9700\u8981\u5728\u81ea\u5b9a\u4e49resolution\u4e2d\u52a0\u5165\u6743\u9650\u9a8c\u8bc1\uff0c\u4f8b\u5982\u4f20\u5165\u6d88\u8d39\u7684app\u4ee5\u53ca\u7528\u6237\u4fe1\u606f\uff08Reality ID\uff09\u3002"),(0,n.kt)("p",null,"USDZ\u53ef\u80fd\u662f\u5c06\u4e00\u4e9bBehavior\u8f6c\u6362\u4e3aSchema\uff0c\u56e0\u4e3a\u8fd9\u4e9bSchema\u662fC++\u5e93\uff0c\u6240\u4ee5\u9700\u8981\u5c06USD\u7684C++\u5e93\u653e\u8fdbiOS\u7cfb\u7edf\u4e2d\uff1b\u867d\u7136USD\u63d0\u4f9b\u6709Python binding\uff0c\u4f46\u662f\u5b83\u53ea\u662f\u63a5\u53e3\u7684\u5c01\u88c5\uff0c\u56e0\u4e3aUSD\u672c\u8eab\u4e5f\u662f\u4e00\u95e8\u8bed\u8a00\uff0c\u8bed\u8a00\u672c\u8eab\u9700\u8981\u89e3\u91ca\u6216\u8005\u7f16\u8bd1\uff0cUSD\u662f\u5c06\u65b0\u7684Schema\u751f\u6210\u89e3\u6790\u7684C++\u6587\u4ef6\uff0c\u6240\u4ee5\u9700\u8981\u653e\u7f6e\u5728\u8fd0\u884c\u65f6\uff0c\u6240\u4ee5\u5c31\u4e0d\u80fd\u52a8\u6001\u5b9a\u4e49\uff0c\u53ea\u80fd\u662f\u7cfb\u7edf\u7ea7\u522b\u7684Schema\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u811a\u672c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u8fd8\u662f\u9700\u8981\u589e\u52a0\u4e00\u5c42\u89e3\u6790\uff1b"),(0,n.kt)("p",null,"\u4e3a\u6b64USD\u6587\u4ef6\u4e2d\u9700\u8981\u5305\u542b\u4e00\u4e9b\u975eUSD\u7684\u7247\u6bb5\uff0c\u4f8b\u5982\u5b9a\u4e49\u4e00\u4e2a\u7279\u6b8a\u7684Component\u6216\u8005Model\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7asset resolution\u6765\u4e0eUSD\u4e00\u8d77\u9002\u914d\u5de5\u4f5c\u3002\u8fd9\u4e00\u90e8\u5206\u53ef\u4ee5\u4e0d\u662fUSD\u8bed\u8a00\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u5b9a\u4e49\u7684\u8bed\u6cd5\uff1b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aUSD\u6587\u4ef6\u4e0d\u5e94\u8be5\u8ba9\u7528\u6237\u770b\u5230\u548c\u7f16\u8f91\uff0c\u7528\u6237\u770b\u5230\u7684\u662f\u5de5\u7a0b\u6216\u8005\u53ef\u89c6\u5316\u7684\u63cf\u8ff0\uff0c\u6216\u8005\u5c5e\u6027\u8868\u8ff0\u3002\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u4e5f\u4e0d\u9700\u8981\u7f16\u8f91\u8fd9\u4e48\u590d\u6742\u7684\u7ed3\u6784\uff0cUSD\u672c\u8d28\u4e0a\u8fd8\u662f\u9762\u5411\u6570\u636e\u7ed3\u6784\u6216\u8005\u7a0b\u5e8f\u5458\u7684\uff0cRW\u7684\u7ed3\u6784\u5e94\u8be5\u66f4\u7b80\u5355\u3001\u6241\u5e73\u3002"),(0,n.kt)("h3",{id:"211-\u5206\u5e03\u5f0f\u5b58\u50a8"},"2.1.1 \u5206\u5e03\u5f0f\u5b58\u50a8"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h3",{id:"212-\u5185\u5b58\u5206\u5e03\u5f0f"},"2.1.2 \u5185\u5b58\u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5c3d\u91cf\u907f\u514d\u5185\u5b58\u4e2d\u8f83\u5927\u7684\u5c42\u6b21\u6027\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e94\u8be5\u90fd\u662f\u6241\u5e73\u7684\uff0c\u76f8\u5173\u6027\u901a\u8fc7\u7ec4\u4ef6\u901a\u4fe1\u6765\u5b9e\u73b0\u3002\u6240\u6709\u6570\u636e\u90fd\u662f\u6241\u5e73\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f51\u683c\u3001\u6750\u8d28\u3001\u52a8\u753b\u7b49\u6570\u636e\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u5185\u90e8\u5b58\u5230\u5927\u91cf\u76f8\u5173\u6027\u3001\u5f15\u7528\u7b49\uff0c\u5982\u679c\u5c06\u5b83\u4eec\u5b58\u50a8\u4e3a\u6241\u5e73\u7684\uff0c\u5219\u89e3\u6790\u4ee3\u7801\u7684\u6548\u7387\u4f1a\u6bd4\u8f83\u4f4e\uff0c\u901a\u5e38\u8fd9\u79cd\u7d27\u8026\u5408\u7684\u6570\u636e\u90fd\u662f\u4f7f\u7528OOP\u7684\u65b9\u5f0f\u6765\u89e3\u6790\u548c\u6267\u884c\u8ba1\u7b97\u3002\u8fd9\u79cd\u6570\u636e\u6211\u4eec\u5c31\u4fdd\u7559\u4f20\u7edf\u7684\u65b9\u5f0f\uff0c\u4f7f\u7528USD\u6765\u4fdd\u5b58\u8fd9\u4e9b\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6211\u4eec\u5b58\u50a8\u7cfb\u7edf\u91cc\u9762\u4f1a\u6709\u4e24\u7c7b\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662fUSD\uff0c\u7528\u6765\u89e3\u6790\u4f20\u7edf\u7684\u6a21\u578b\u3001\u52a8\u753b\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5355\u5c42\u6b21\u7ed3\u6784\u6570\u636e\uff0c\u8fd9\u90e8\u5206\u4e3b\u8981\u662f\u903b\u8f91\u90e8\u5206")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5176\u4ed6\u4e00\u4e9b\u590d\u6742\u7ed3\u6784\uff0c\u4f8b\u5982\u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u3001AI\u7b49\uff0c\u5982\u679c\u8fd9\u4e9b\u89c4\u5219\u662f\u76f8\u5bf9\u56fa\u5b9a\u7684\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u5355\u72ec\u7684\u683c\u5f0f\u5b58\u50a8\uff0c\u5b83\u4eec\u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u50cf\u7c7b\u4f3cUSD\u90a3\u6837\u7684\u6587\u4ef6\u5f62\u5f0f\u5b58\u50a8\uff0c\u7136\u540e\u5b9e\u4f53\u5bf9\u8c61\u6309\u5355\u72ec\u7684\u673a\u5236\u52a0\u8f7d\u5b83\u4eec\u5e76\u8fdb\u884c\u89e3\u6790\u3002\u4f1a\u5b9a\u4e49\u4e00\u4e9b\u4e13\u95e8\u7684\u52a0\u8f7d\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u64cd\u4f5c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5185\u5b58\u4e2d\u8981\u5c3d\u91cf\u907f\u514d\u4f7f\u7528\u5c42\u6b21\u7ed3\u6784\u53bb\u805a\u5408\u591a\u4e2a\u6570\u636e\uff0c\u9664\u4e86\u50cfUSD\u8fd9\u79cd\u4f20\u7edf\u7684\u6570\u636e\u9664\u5916\uff0c\u5f53\u7136\u5bf9\u4e8eUSD\uff0c\u6211\u4eec\u4e5f\u8981\u5c3d\u91cf\u5229\u7528\u6570\u636e\u9a71\u52a8\u7684\u7279\u6027\u5c3d\u91cf\u628a\u4e0d\u76f8\u5173\u72ec\u7acb\u7684\u6570\u636e\u62c6\u5f00\u3002\u5c3d\u91cf\u907f\u514d\u8f83\u5927\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("h2",{id:"22-creation-script"},"2.2 Creation Script"),(0,n.kt)("p",null,"Creation\u6709\u4e00\u4e2a\u6838\u5fc3\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5e94\u8be5\u50cfLua\u4e00\u6837\u7b80\u5355\uff0c\u8f7b\u91cf\u7684\u8fd0\u884c\u65f6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8bf4\u660e\u6587\u6863\u53ea\u670950\u9875pdf\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u53ea\u9700\u8981\u4e86\u89e3\u8fd920\u9875\u6587\u6863\uff0c\u4e0d\u518d\u9700\u8981\u9605\u8bfb\u5176\u4ed6\u8d44\u6599\u5df2\u5b66\u4e60\u66f4\u9ad8\u7ea7\u7684\u6280\u5de7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u540c\u65f6\u9762\u5411\u4e13\u4e1a\u5f00\u53d1\u8005\u548c\u666e\u901a\u7528\u6237"),(0,n.kt)("li",{parentName:"ul"},"\u5c3d\u53ef\u80fd\u5c11\u7684\u7cfb\u7edf\u5c42API\uff0c\u4e0d\u8981\u5168\u90e8\u66b4\u9732\u5f15\u64ce\u5c42\u7684API\uff0c\u751a\u81f3\u53ef\u4ee5\u5c06\u5f15\u64ce\u5c42\u7684API\u4fee\u6539\u4e0d\u540c\u7684\u6613\u4e8e\u4e1a\u52a1\u4fa7\u7406\u89e3\u7684API\u540d\u5b57\uff0c\u5b83\u7684\u6240\u6709API\u5e94\u8be5\u50cfHoudini\u4e00\u6837\uff0c\u5168\u90e8\u4e13\u6ce8\u4e8e\u4e1a\u52a1\uff0c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u4e86\u89e3\u7684\u5c31\u4e0d\u66b4\u9732\u7ed9\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"Creation Script\u7684\u6838\u5fc3\u76ee\u6807\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u8981\u6784\u5efa\u4e00\u5957\u80fd\u591f\u4fbf\u4e8e\u666e\u901a\u7528\u6237\u7f16\u8f91\u3001\u548c\u5171\u4eab\u903b\u8f91\u7684\u67b6\u6784\uff1b\u6240\u4ee5\u4ed6\u5fc5\u987b\u80fd\u591f\u52a8\u6001\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u6b21\u8981\u76ee\u6807\u662f\u7b80\u5316\u5f00\u53d1\u8005\u7684\u5f00\u53d1\u4f53\u9a8c\uff0c\u4f8b\u5982\u53ea\u4e13\u6ce8\u4e8e\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u7ec4\u7ec7\u8bbe\u8ba1\uff0c\u518d\u6bd4\u5982\u7b80\u5316\u591a\u7ebf\u7a0b\u7684\u5f00\u53d1\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u611f\u77e5\u4e0d\u5230\u5e76\u53d1\u7f16\u7a0b\uff1b\u4f8b\u5982\u4e0d\u80fd\u4e3a\u4e86\u65b9\u4fbf\u5bf9Component \u8fdb\u884c\u7ba1\u7406\uff0c\u5c31\u8981\u6c42\u7528\u6237\u53bb\u914d\u7f6e\u4e00\u4e2a\u5305\u5f15\u7528\u6587\u4ef6\uff0c\u800c\u5e94\u8be5\u81ea\u52a8\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u8be5\u662f\u56fe\u7075\u5b8c\u5907\u7684\uff0c\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u4ed6\u5e94\u8be5\u57fa\u4e8e\u4e00\u4e2a\u5df2\u6709\u7684\u811a\u672c\u8bed\u8a00\uff0c\u4f7f\u4ed6\u4e13\u6ce8\u4e8e\u4e0a\u5c42\u67b6\u6784\uff0c\u800c\u4e0d\u662f\u53bb\u6784\u5efa\u4e00\u5957\u5e95\u5c42\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u5bf9\u8c61\u7684\u6784\u5efa\u5728\u5bbf\u4e3b\uff0c\u811a\u672c\u4e3b\u8981\u505a\u8f7b\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5783\u573e\u56de\u6536\uff0c\u6240\u6709\u5806\u4e0a\u7684\u5bf9\u8c61\u5747\u6709\u5bbf\u4e3b\u5206\u914d\u548c\u7ba1\u7406")),(0,n.kt)("p",null,"\u4f20\u7edf\u8bed\u8a00\u51e0\u4e4e\u90fd\u662f\u4e3a\u4e86\u9762\u5411\u5bf9\u8c61\u800c\u751f\u7684\uff0c\u6240\u4ee5\u5305\u542b\u5f88\u591a\u4e3a\u652f\u6301\u9762\u5411\u5bf9\u8c61\u7684\u529f\u80fd\uff0c\u5982\u679c\u6570\u636e\u9a71\u52a8\u662f\u9700\u8981\u7684\u6838\u5fc3\uff0c\u662f\u4e0d\u662f\u5e94\u8be5\u6709\u4e00\u79cd\u65b0\u7684\u8bed\u8a00\uff0c\u76ee\u524d\u770b\u6765Lua\u66f4\u63a5\u8fd1\u8fd9\u79cd\u8bed\u8a00"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u7528\u9014\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u7528\u4e8e\u68c0\u67e5ECS\u7684\u7ed3\u6784\uff0c\u4e0d\u5408\u6cd5\u7684\u7c7b\u7ed3\u6784\u4e0d\u80fd\u88ab\u52a0\u5165\u5230\u6700\u7ec8\u7a0b\u5e8f\u4e2d"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u68c0\u67e5Component \u6570\u636e\u5185\u5b58\u5206\u914d\u5927\u5c0f\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u4e8e\u5c06\u5e95\u5c42\u9762\u5411\u5bf9\u8c61\u7684\u80fd\u529b\u7981\u6b62\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u4fdd\u6301\u5e95\u5c42\u80fd\u529b\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u4f7f\u7528")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7c7b\u578b\u68c0\u67e5")),(0,n.kt)("p",null,"TypeScript\u6709\u5f88\u597d\u7684\u7684\u7c7b\u578b\u68c0\u67e5\uff0c\u4f46\u662f\u5f80\u5f80\u5f3a\u7c7b\u578b\u7684\u8bed\u8a00\u4e5f\u6709\u4e00\u5b9a\u7684\u9650\u5236\uff0c\u4f8b\u5982\u4e0d\u5141\u8bb8\u50cflua\u4e00\u6837\uff0c\u5728\u540c\u4e00\u4f5c\u7528\u57df\u5185\u76f8\u540c\u7684\u53d8\u91cf\u540d\u79f0\u6539\u53d8\u7c7b\u578b\uff0c\u53e6\u5916\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u4e00\u822c\u7c7b\u578b\u68c0\u67e5\u8fd9\u79cd\u529f\u80fd\u5728\u8fd0\u884c\u65f6\u4e5f\u662f\u5b58\u5728\u7684\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5bf9\u4e8e\u8fd0\u884c\u65f6\u4e0d\u518d\u5fc5\u987b\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u88ab\u68c0\u67e5\u8fc7\u7684\u6e90\u7801\u6ca1\u6709\u88ab\u4fee\u6539\uff0c\u4e00\u822c\u8bed\u8a00\u4e0d\u4f1a\u628a\u8fd9\u4e2a\u529f\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u53ef\u9009\u9879"),(0,n.kt)("p",null,"\u56e0\u6b64\u6709\u5fc5\u8981\u8bbe\u8ba1\u4e00\u79cd\u7c7b\u578b\u68c0\u67e5\uff0c\u5b83\u53ef\u4ee5\u88ab\u79fb\u9664\uff0c\u4f7f\u5f97\u4ec5\u5728\u7f16\u8f91\u65f6\u53d1\u751f\u4f5c\u7528\uff0c\u800c\u4e00\u65e6\u53d1\u5e03\u4e4b\u540e\uff0c\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u4e0d\u9700\u8981\u8fd9\u4e2a\u7c7b\u578b\u68c0\u67e5\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd8\u662f\u4f1a\u4fdd\u7559\u5168\u90e8\u7684\u6e90\u4ee3\u7801\u4fe1\u606f\u3002\u5e76\u4e14\u81ea\u5b9a\u4e49\u7684\u7c7b\u578b\u68c0\u67e5\u53ef\u4ee5\u5bb9\u8bb8\u66f4\u5c11\u7684\u9650\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u600e\u6837\u4e3aLua\u6dfb\u52a0\u65b0\u7684\u8bed\u6cd5")),(0,n.kt)("p",null,"\u53c2\u8003TypeScript\u76f8\u5bf9\u4e8eJavaScript \u6dfb\u52a0\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"Unity DOTS\u4e3a\u4ec0\u4e48\u6ca1\u6709\u9ed8\u8ba4\u628aSystem\u4e2d\u7684\u5e76\u884c\u6027\u6307\u5b9a\u53bb\u6389\uff0c\u662f\u56e0\u4e3a\u4ed6\u5e0c\u671b\u517c\u5bb9\u4f20\u7edf\u7684Component\u811a\u672c\uff0c\u800c\u6309\u7167\u4f20\u7edf\u7684\u5199\u6cd5\uff0c\u6ca1\u6cd5\u53bb\u63a7\u5236\u884c\u4e3a\uff0c\u6240\u4ee5\u53ea\u80fd\u5f00\u53d1\u8005\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5426\u5219\u5c31\u9700\u8981\u50cfRoblox\u4e00\u6837\uff0c\u9700\u8981\u7528\u6237\u81ea\u5df1\u5c06\u811a\u672c\u6302\u5728entity\u4e0a\uff0c\u8fd9\u5c31\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u907f\u514d\u8ba9\u5f00\u53d1\u8005\u624b\u52a8\u5c06Component\u4e0eSystem\u4e4b\u95f4\u8fdb\u884c\u5173\u8054"),(0,n.kt)("p",null,"Minecraft\u901a\u8fc7\u76f4\u63a5\u5728\u5c5e\u6027\u4e2d\u8fdb\u884c\u7f16\u5199MOLANG\u4ee3\u7801\u6765\u907f\u514d\u8be5\u95ee\u9898"),(0,n.kt)("p",null,"\u4f8b\u5982\u5f00\u53d1\u8005\u770b\u5230\u7684\u6587\u4ef6\u6216\u8005\u5bf9\u8c61\u53ea\u6709Component\uff0c\u8fd9\u6837\u8feb\u4f7f\u5f00\u53d1\u8005\u5bf9\u6570\u636e\u8fdb\u884c\u62bd\u8c61\uff1b"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\uff0c\u6211\u4eec\u9996\u5148\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u8054\u4e00\u4e2aComponent\u548c\u4e00\u4e2aSystem\uff0c\u4ed6\u4eec\u5e94\u8be5\u81ea\u52a8\u5173\u8054\uff0c\u4f8b\u5982\u901a\u8fc7Component\u6765\u6253\u5f00\u5bf9\u5e94\u7684System\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91"),(0,n.kt)("p",null,"Component\u9664\u4e86\u81ea\u8eab\u7684\u903b\u8f91\u5c5e\u6027\uff0c\u53e6\u5916\u4e00\u4e9b\u5c5e\u6027\u7528\u6765\u63a7\u5236\u7cfb\u7edf\u7ed3\u6784\uff0c\u4f8b\u5982System\u6267\u884c\u7684\u987a\u5e8f\u7b49\uff0c\u53ef\u4ee5\u5728Component\u4e2d\u660e\u786e\u533a\u5206\u4e24\u79cd\u6570\u636e\uff0c\u6216\u8005\u8fd9\u4e9b\u56fa\u5b9a\u7ed3\u6784\u7684\u6570\u636e\u5c31\u4ee5\u4e00\u4e2aComponent\u672c\u8eab\u7684Property\u5f62\u5f0f\u663e\u793a\uff0c\u907f\u514d\u5f00\u53d1\u8005\u5199\u9519"),(0,n.kt)("p",null,"\u4f46System\u53ef\u80fd\u9700\u8981\u591a\u4e2aComponent\u7684\u6570\u636e\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u4e00\u4e2aSystem\u5fc5\u987b\u5bf9\u5e94\u4e00\u4e2a\u4e3bComponent\uff08\u5373\u4f7f\u8fd9\u4e2aComponent\u53ef\u80fd\u53ea\u662f\u4e00\u4e2a\u540d\u5b57\uff0c\u800c\u5e76\u6ca1\u6709\u4efb\u4f55\u6570\u636e\uff0c\u662f\u6709\u8fd9\u79cd\u60c5\u51b5\u7684\uff0c\u5c31\u662f\u67d0\u4e9b\u903b\u8f91\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff0c\u4ed6\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5bf9\u591a\u79cd\u903b\u8f91\u8fdb\u884c\u8ba1\u7b97\u7684\u4e00\u4e2a\u7ec4\u5408\u903b\u8f91\uff0c\u4f46\u662f\u8fd9\u79cd\u5e94\u8be5\u5f88\u5c11\u624d\u5bf9\uff0c\u6bd5\u7adf\u5927\u90e8\u5206System\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u81ea\u5df1\uff0c\u5176\u4ed6\u7684\u662f\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff09\uff0c\u8fd9\u6837\u4ecd\u7136\u53ef\u4ee5\u5c06System\u9690\u85cf\u5728Component\u4e2d\uff0c\u4f46\u662fSystem\u81ea\u8eab\u80fd\u591f\u6307\u5b9a\u5f15\u7528\u7684\u5176\u4ed6Component\u4f5c\u4e3a\u67e5\u8be2\u6761\u4ef6\uff0c\u4e5f\u5373\u662f\u5728\u5b9a\u4e49ArchType\uff0c\u53ef\u4ee5\u5728System\u7684\u9876\u90e8\u4f7f\u7528\u7c7b\u4f3c\u3002"),(0,n.kt)("p",null,"XXXComponent a;"),(0,n.kt)("p",null,"BBBComponent b; "),(0,n.kt)("p",null,"\u7136\u540e\u5728\u6b63\u6587\u4e2d\u5c31\u53ef\u4ee5\u5f15\u7528\u8fd9\u4e9b\u5bf9\u8c61\uff0c\u89e3\u91ca\u5668\u4f1a\u81ea\u52a8\u5c06\u8be5\u53d8\u91cf\u4eceEntity\u4e2d\u8fdb\u884c\u67e5\u8be2\uff0c\u5e76\u4e14\u68c0\u67e5\u5982\u679cEntity\u4e0d\u5305\u542b\u8be5Component\u7684\u65f6\u5019\u8fdb\u884c\u81ea\u52a8\u6dfb\u52a0\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u68c0\u67e5\u5197\u4f59\uff0c\u5373\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u4f7f\u7528\u5219\u4e0d\u9700\u8981\u6dfb\u52a0"),(0,n.kt)("p",null,"\u4f46\u662fComponent\u7684\u7248\u672c\u53f7\u5728\u54ea\u91cc\u8bbe\u7f6e\uff0c\u4f7f\u7528\u660e\u660e\u7a7a\u95f4\u52a0\u7248\u672c\u53f7\uff1f"),(0,n.kt)("p",null,"BBBBComponent(reality:name,1.2.3)"),(0,n.kt)("p",null,"\u600e\u4e48\u9ed8\u8ba4\u6307\u5b9a\uff1f"),(0,n.kt)("p",null,"\u5f00\u53d1\u8005\u80af\u5b9a\u662f\u5148\u4e0b\u8f7d\u4e86\u4e00\u4e2a\u5305\u542bComponent\u7684\u5305\u518d\u8fdb\u884c\u7f16\u7a0b\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u80fd\u6709\u51b2\u7a81\uff0c\u6240\u4ee5\u6700\u597d\u662f\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u800c\u4e0d\u662f\u81ea\u52a8\u5206\u914d\uff0c\u56e0\u4e3a\u603b\u6709\u4e00\u4e2a\u5730\u65b9\u9700\u8981\u660e\u786e\u6307\u51fa\uff0c\u4f7f\u7528\u5355\u72ec\u7684\u914d\u7f6e\u6587\u4ef6\u770b\u8d77\u6765\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python\u5d4c\u5165 (Embed in Python)"),"\u3002Python\u6781\u5176\u6613\u4e8e\u5b66\u4e60\u5e76\u4e14\u88ab\u5e7f\u6cdb\u91c7\u7528\u3002Taichi\u7684\u524d\u7aef\u8bed\u6cd5\u662fPython\u7684\u5b50\u96c6\uff0c\u8fd9\u4f7f\u5f97\u4efb\u4f55\u4e00\u4e2aPython\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u8f7b\u6613\u5730\u5b66\u4e60\u3001\u4f7f\u7528Taichi\u3002\u6211\u4eec\u4f7f\u7528Python AST\u7075\u6d3b\u7684\u81ea\u7701 (inspection) \u673a\u5236\u6765\u628aPython\u7684AST\u8f6c\u5316\u4e3aTaichi\u7684AST\uff0c\u968f\u540e\u8fdb\u5165\u6211\u4eec\u81ea\u5df1\u7684\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7cfb\u7edf\u3002\u5c06Taichi\u7684\u524d\u7aef\u5d4c\u5165\u8fdbPython\u6709\u5982\u4e0b\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u8fd0\u884c\u3002\u5d4c\u5165\u5728\u89e3\u91ca\u6027\u7684Python\u8bed\u8a00\u800c\u4e0d\u662f\u7f16\u8bd1\u6027\u7684\u8bed\u8a00\u4e2d\uff0c\u5927\u5927\u65b9\u4fbf\u4e86Taichi\u7a0b\u5e8f\u7684\u8fd0\u884c\uff0c\u56e0\u4e3a\u6bcd\u4f53\u8bed\u8a00\u7684\u9884\u5148\u7f16\u8bd1 (ahead-of-time compilation) \u4e0d\u518d\u9700\u8981\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u91cd\u7528\u5df2\u6709\u7684Python\u57fa\u7840\u8bbe\u65bd\u5e76\u4e0e\u5176\u4ea4\u4e92\uff0c\u5305\u62ecIDE (PyCharm\u7b49)\u3001\u5305\u7ba1\u7406\u5668 (pip)\u3001\u5df2\u6709\u7684Python\u5305\uff08\u5982matplotlib\u3001numpy\u3001torch\u7b49\uff09\u3002")),(0,n.kt)("p",null,"\u5373\u65f6 (Just-in-time, JIT) \u7f16\u8bd1\u3002JIT\u4e0d\u4f46\u63d0\u4f9b\u4e86\u6781\u5f3a\u7684\u7f16\u7a0b\u7075\u6d3b\u6027\uff0c\u8fd8\u5ef6\u8fdf\u4e86\u201d\u7f16\u8bd1\u671f\u5e38\u91cf\u201c\u7684\u9700\u6c42\u3002\u6bd4\u5982\uff0c\u5728\u7269\u7406\u6a21\u62df\u5668\u4e2d\uff0c\u65f6\u95f4\u6b65\u957f \u2206t \u901a\u5e38\u88ab\u5b9e\u73b0\u6210\u8fd0\u884c\u65f6\u53d8\u91cf\uff0c\u800c\u4f7f\u7528JIT\u7684\u65f6\u5019\u5219\u53ef\u4ee5\u88ab\u5904\u7406\u6210\u7f16\u8bd1\u671f\u5e38\u91cf\u3002\u8fd9\u5141\u8bb8\u7f16\u8bd1\u5668\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\uff0c\u5982\u5e38\u91cf\u6298\u53e0 (constant folding)\u3002\u540c\u65f6\uff0cTaichi\u652f\u6301\u6a21\u677f\u5143\u7f16\u7a0b\uff0c\u4f34\u968f\u7740JIT\u7684\u61d2\u60f0\u7f16\u8bd1\u6280\u672f\u5927\u91cf\u8282\u7701\u4e86\u4e0d\u5fc5\u8981\u7684\u7f16\u8bd1\u65f6\u95f4\u3002\u53e6\u5916\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u8fd0\u884cPython\u7684\u73af\u5883\uff0c\u5982\u79fb\u52a8\u7aef\u8bbe\u5907\uff0c\u6211\u4eec\u4e5f\u63d0\u4f9b\u63d0\u524d\u7f16\u8bd1 (Ahead of time, AOT) \u76f8\u5173\u8bbe\u65bd"),(0,n.kt)("p",null,"\u5bf9\u5927\u4f17\u7528\u6237\u3001\u6216\u8005\u504f\u7f8e\u672f\u3001\u827a\u672f\u7c7b\u7528\u6237\uff0c\u6700\u597d\u7684\u811a\u672c\u8bed\u8a00\u662f\u4ec0\u4e48\uff1f\u56fe\u5f62\u5316\u7684\u5417\uff1f\u4ed6\u5e94\u8be5\u5177\u6709\u4e24\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e00\u822c\u7528\u6237\u53cb\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408\u6570\u636e\u9a71\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u9002\u5408DSL\u7f16\u8bd1\u5904\u7406")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff1a")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u662f\u9762\u5411\u4e8b\u4ef6\u7f16\u7a0b\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u5199\u7684\u6240\u6709\u903b\u8f91\u51e0\u4e4e\u90fd\u662f\u5728\u6bcf\u4e00\u4e2aframe\u7684\u67d0\u4e2a\u4e8b\u4ef6\u4e2d\u53d1\u751f\u7684\u4e8b\u60c5\uff0c\u4f8b\u5982\u5728Unreal\u7684\u84dd\u56fe\u4e2d\uff0c\u5b83\u7684\u8d77\u70b9\u4e5f\u662f\u9488\u5bf9\u67d0\u4e2a\u4e8b\u4ef6\uff0c\u8fd9\u6709\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u7684\u7c92\u5ea6\uff0c\u6e38\u620f\u903b\u8f91\u4e2d\uff0c\u51e0\u4e4e\u4e3b\u8981\u903b\u8f91\u90fd\u662f\u4e8b\u4ef6\u9a71\u52a8\uff0c\u56e0\u6b64\u8be6\u7ec6\u7684\u4e8b\u4ef6\u975e\u5e38\u591a\uff0c\u6240\u4ee5\u5927\u90e8\u5206\u90fd\u662f\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u7531\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u72b6\u6001\u673a\u6765\u8fdb\u884c\u7ba1\u7406\uff0cFramework\u5c42\u53ea\u6709\u51e0\u4e2a\u57fa\u672c\u7684\u6e38\u620f\u751f\u547d\u5468\u671f\u4e8b\u4ef6\uff0c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4e4b\u95f4\u6ca1\u6709\u6807\u51c6\uff0c\u6216\u8005\u975e\u5e38\u590d\u6742\uff0c\u4e0d\u65b9\u4fbf\u7ef4\u62a4")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4e8b\u4ef6\u4e0e\u903b\u8f91\u4e0d\u4e00\u81f4\uff0c\u50cfUE\u7684\u84dd\u56fe\u662f\u57fa\u4e8e\u4e8b\u4ef6\u7f16\u7a0b\uff0c\u5982\u679c\u6211\u4eec\u8981\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\u7ed9\u666e\u901a\u7528\u6237\uff0c\u8fd9\u79cd\u6ca1\u6709\u6807\u51c6\u7684\u4e8b\u4ef6\u5b9a\u4e49\u5e76\u4e0d\u9002\u5408\u8ba9\u7528\u53bb\u53bb\u5b66\u4e60\uff0c\u8fd9\u4e9b\u4e8b\u4ef6\u901a\u5e38\u4e5f\u6ca1\u6709\u5fc5\u7136\u7684\u903b\u8f91\u8054\u7cfb\uff0c\u4e0d\u5bb9\u6613\u7406\u89e3\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u53ef\u80fd\u5bf9\u5e94\u591a\u4e2a\u4e8b\u4ef6\uff0c\u663e\u7136\u7528\u6237\u9700\u8981\u4e86\u89e3\u7684\u662f\u903b\u8f91\uff0c\u800c\u975e\u4e8b\u4ef6")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u6240\u4ee5\u5e73\u53f0\u5927\u90e8\u5206\u90fd\u5728\u8bbe\u8ba1\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u4e5f\u4fbf\u4e8e\u7406\u89e3\uff0c\u540c\u65f6\u5b83\u4ee3\u8868\u7684\u4e0d\u662f\u6700\u5c0f\u903b\u8f91\uff0c\u800c\u662f\u903b\u8f91\u6a21\u5757\uff0c\u6240\u4ee5\u4ed6\u5c06\u903b\u8f91\u5185\u90e8\u7684\u5b9e\u73b0\u7ec6\u8282\uff08\u4f17\u591a\u7684\u788e\u7247\u4e8b\u4ef6\uff09\u8fdb\u884c\u9690\u85cf")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u6570\u636e\u4e5f\u4ee3\u8868\u63a5\u53e3\uff0c\u6570\u636e\u7684\u6807\u51c6\u6709\u52a9\u4e8e\u6784\u5efa\u7ed3\u6784\u5316\u8868\u8fbe\uff0c\u662f\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ee5\u4e00\u79cd\u66f4\u6e05\u6670\u7684\u65b9\u5f0f\u7ec4\u7ec7"))),(0,n.kt)("p",null,"\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5c31\u50cfHoudini \u4e2d\u9762\u5411Node\u7f16\u7a0b\u4e00\u6837\uff0c\u4e00\u6bb5Python \u4ee3\u7801\u662f\u53d7\u9650\u7684\uff0c\u5b83\u7684\u8f93\u5165\u8f93\u51fa\u662fnode \uff0c\u540c\u65f6\u53c8\u53ef\u4ee5\u4f7f\u7528\u5230python \u672c\u8eab\u7684\u4efb\u610f\u8bed\u8a00\u7279\u6027\u548c\u80fd\u529b\uff1b\u4e0e\u6b64\u7c7b\u4f3c\uff0c\u9762\u5411\u6570\u636e\u7f16\u7a0b\u4e5f\u662f\u9488\u5bf9\u4e00\u4e2a\u7279\u5b9a\u7684\u201c\u6570\u636e\u201d\u7f16\u5199\u811a\u672c\uff0c\u7528\u6237\u7f16\u5199\u7684\u662fSystem\uff0c\u4ed6\u7684\u8f93\u5165\u8f93\u51fa\u662f\u6570\u636eComponent "),(0,n.kt)("p",null,"\u4f46\u8ddf\u4f20\u7edf\u7684ECS\u67b6\u6784\u4e0d\u4e00\u6837\u7684\u662f\uff0c\u5b83\u7684Component \u548cSystem\u4e4b\u95f4\u4e0d\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c\u751a\u81f3\u4e0d\u662f\u81ea\u52a8\u6302\u8f7d\u7684\uff0c\u8fd9\u4e2a\u673a\u5236\u975e\u5e38\u91cd\u8981\uff0c\u4e00\u4e2aComponent \u7406\u8bba\u4e0a\u53ef\u4ee5\u88ab\u591a\u4e2aSystem\u6d88\u8d39\uff0c\u5f53\u7136\u901a\u5e38\u4e00\u4e2a\u7279\u5b9a\u7684Entity\u5b9e\u4f8b\u53ea\u6709\u4e00\u5bf9Component \u4e0eSystem\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u7406\u8bba\u4e0a\u5bf9\u4e00\u4e2a\u5b9e\u4f8b\u7684\u4e00\u4e2a\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u64cd\u4f5c\u903b\u8f91\uff0c\u9664\u975e\u591a\u4e2aSystem\u4e4b\u95f4\u903b\u8f91\u4e0d\u4e00\u6837\uff0c\u4ed6\u4eec\u53ef\u80fd\u504f\u91cd\u6570\u636e\u7684\u67d0\u4e00\u90e8\u4efd\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u6570\u636e\u7684\u7c92\u5ea6\u592a\u5927\u4e86\uff0c\u53ef\u4ee5\u518d\u8fdb\u4e00\u6b65\u7ec6\u5206\uff0c\u5f53\u7136\u53ef\u80fd\u6709\u4e00\u4e9b\u7279\u4f8b\u9700\u8981\u7ef4\u6301\u8f83\u5927\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u4f7f\u5f97app\u5305\u91cc\u53ef\u80fd\u5305\u542b\u4e00\u4e2a\u6570\u636e\u5b9a\u4e49\u7684\u591a\u79cd\u903b\u8f91\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u4f7f\u7528\u81ea\u52a8\u6302\u8f7d\uff0c\u800c\u9700\u8981\u4f9d\u8d56\u4e8e\u7248\u672c\u5236\u5b9a\uff0c\u5728\u5f00\u53d1\u6216\u751f\u6210\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5c06\u4e00\u4e2aSystem\u6dfb\u52a0\u81f3\u4e00\u4e2aEntity\uff0c\u4ed6\u5c31\u751f\u6210\u5bf9\u5e94\u7684System\u5f15\u7528\u548c\u7248\u672c\u53f7\uff0c\u52a0\u8f7d\u7684\u65f6\u5019\u662f\u6839\u636e\u8fd9\u4e2a\u8fdb\u884c\u903b\u8f91\u6302\u8f7d\uff0c\u5f53\u7136\u4e00\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u672c\u8eab\u5728\u9876\u5c42\u4e5f\u4f1a\u8bb0\u5f55\u6240\u6709\u5f15\u7528\u7684Component\u548cSystem\uff0c\u8fd9\u6837\u4fbf\u4e8e\u9884\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6bd4\u5982\u5982\u679c\u6570\u636e\u662f\u6d89\u53ca\u52a8\u753b\uff0c\u5219\u6570\u636e\u5305\u542b\u52a8\u753b\u65f6\u95f4\u548c\u5f53\u524dframe number \u7b49\u52a8\u753b\u4fe1\u606f"),(0,n.kt)("p",null,"\u628a\u6570\u636e\u5f53\u4f5c\u4e00\u4e2a\u7c7b\u4f3cHoudini \u91cc\u9762\u7684\u53ef\u89c6\u8282\u70b9\uff0cSystem\u662f\u53e6\u4e00\u79cd\u7c7b\u578b\u7684\u8282\u70b9\uff0c\u62d6\u52a8\u4efb\u610f\u4e00\u4e2a\u8282\u70b9\u5230\u4e00\u4e2aEntity\u4f1a\u81ea\u52a8\u52a0\u8f7d\u53d8\u91cf\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u7ec4\u4ef6\u7248\u672c\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Creation Script")," "),(0,n.kt)("p",null,"\u5b83\u7684\u8bed\u6cd5\u90e8\u5206\u63a5\u8fd1Lua\uff0c\u4f46\u662f\u56e0\u4e3a\u6240\u6709Table\u5168\u90e8\u7531Table Engine\u63a5\u7ba1\uff0c\u811a\u672c\u4e2d\u53ea\u6709\u7d22\u5f15\u548c\u57fa\u672c\u7c7b\u578b\uff0c\u4e0d\u5b58\u5728\u5806\u4e2d\u5206\u914d\u7684\u5bf9\u8c61\uff0c\u6240\u4ee5\u4e0d\u9700\u8981GC"),(0,n.kt)("p",null,"\u811a\u672c\u53ea\u6709\u7b80\u5355\u7684\u8ba1\u7b97\u548c\u51fd\u6570\u5f62\u5f0f\uff0c\u6240\u6709\u64cd\u4f5c\u5bf9\u8c61\u7edf\u4e00\uff0c\u51fd\u6570\u53ea\u6709\u7b80\u5355\u7684\u6570\u503c\u64cd\u4f5c\uff0c\u5bf9\u8c61\u90fd\u7531\u5e95\u5c42\u5206\u914d"),(0,n.kt)("p",null,"\u811a\u672c\u8d1f\u8d23\u51fd\u6570\u5185\u7684\u6808\u4e0a\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5e95\u5c42\u8d1f\u8d23\u5806\u4e0a\u5185\u5b58\u5206\u914d"),(0,n.kt)("p",null,"\u8fd9\u5f97\u76ca\u4e8e\u7edf\u4e00\u7684\u6570\u636e\u7ed3\u6784\u548c\u5185\u5b58\u7ba1\u7406"),(0,n.kt)("h3",{id:"221-\u5168\u5c40\u53d8\u91cf\u8868\u7b26\u53f7\u8868"},"2.2.1 \u5168\u5c40\u53d8\u91cf\u8868\uff08\u7b26\u53f7\u8868\uff09"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u7684\u6838\u5fc3\u610f\u4e49\u5728\u4e8e\uff0c\u8ba9\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u4ea4\u4e92\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u662f\u8fd9\u6837\uff0c\u90a3\u4e48\u6211\u4eec\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5c31\u53ea\u80fd\u4f9d\u8d56\u4e8e\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u6bcf\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\u53ea\u80fd\u72ec\u7acb\u5de5\u4f5c\u800c\u4e0d\u80fd\u76f8\u4e92\u4ea4\u4e92\uff08\u5728\u4f20\u7edf\u7684\u5e94\u7528\u5f00\u53d1\u6d41\u7a0b\u4e2d\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u53d8\u91cf\u8d4b\u503c\u548c\u5f15\u7528\u624b\u52a8\u5efa\u7acb\u8d77\u4e86\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u7ec4\u4ef6\uff09")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7b26\u53f7\u8868\u9690\u542b\u7684\u903b\u8f91\u662f\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u6d89\u53ca\u7684\u53d8\u91cf\u5e94\u8be5\u8db3\u591f\u5c11\uff0c\u5927\u90e8\u5206\u5e94\u8be5\u662f\u5185\u90e8\u72b6\u6001"),"\uff0c\u4f8b\u5982COC\u4e2d\u7684Cannon\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Damage per second: 11\nHitpoints : 650/650\n\nRange : 4-11tiles\nDamage type : Area Splash\nTargets : Ground\nFavorite target : Any\n")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc-cannon",src:l(1077).Z,width:"2532",height:"1170"}),"\u7b26\u53f7\u8868\u4f7f\u6211\u4eec\u66f4\u52a0\u5c0f\u5fc3\u5730\u5b9a\u4e49\u6211\u4eec\u7684\u53d8\u91cf\uff0c\u4f7f\u5f97\u4e0d\u90a3\u4e48\u968f\u610f\uff0c\u7b26\u53f7\u8868\u7684\u5168\u5c40\u901a\u7528\u6027\u5730\u4f4d\u4f7f\u6211\u4eec\u66f4\u597d\u5730\u5730\u62bd\u8c61\u903b\u8f91\uff0c\u786e\u4fdd\u8bbe\u7f6e\u786e\u5b9e\u7684\u53cd\u5e94\u903b\u8f91\u72b6\u6001\u7684\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7b26\u53f7\u8868\u662f\u4e00\u79cd\u5f88\u597d\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u5f88\u5bb9\u6613\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u7684\u5185\u90e8\u4e34\u65f6\u53d8\u91cf\u548c\u5bf9\u5916\u8868\u73b0\u7279\u5f81\u7684\u91cd\u8981\u72b6\u6001\u53d8\u91cf\u533a\u5206\u51fa\u6765\uff0c\u903b\u8f91\u66f4\u597d\u6e05\u6670\u3002\u4f7f\u5f97\u4ee3\u7801\u903b\u8f91\u66f4\u6e05\u6670\uff0c\u4ed6\u4eba\u9605\u8bfb\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\nnamespace Global{\n iHP //\u8868\u793a\u8840\u91cf\n iHelath //\n iCoin //\n vfPosition\n sLabelName //\u7528\u4e8eUI\u663e\u793a\u540d\u79f0\n}\n")),(0,n.kt)("p",null,"\u5f53\u7136\u7b26\u53f7\u8868\u66f4\u91cd\u8981\u7684\u4ef7\u503c\u662f\uff0c\u5b9e\u73b0\u7ec4\u4ef6\u4e4b\u95f4\u76f8\u4e92\u8c03\u7528\u7684\u9690\u5f0f\u53c2\u6570\u4f20\u9012\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u901a\u5e38\u662f\u6bd4\u8f83\u5c11\u7684\u53d8\u91cf\uff0c\u5728OOP\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u5373\u662f\u4e24\u4e2a\u7c7b\u4e4b\u95f4\u65b9\u6cd5\u8c03\u7528\u7684\u53c2\u6570\uff0c\u5982\u679c\u6211\u4eec\u4e0d\u533a\u5206\u516c\u5171\u548c\u79c1\u6709\u53d8\u91cf\uff0c\u5219\u53ea\u8981\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u6709\u4f9d\u8d56\uff0c\u5c31\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e0a\u6709\u4e9b\u6570\u636e\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u56e0\u6b64\u5b83\u6709\u5229\u4e8e\u63d0\u5347\u6027\u80fd\uff0c\u53ea\u52a0\u8f7d\u6bcf\u4e2a\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8bbe\u7f6eout\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u5bf9\u5e94\u7684\u5c5e\u6027\u6570\u636e\u4f1a\u88ab\u81ea\u52a8\u586b\u5145\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u624b\u52a8\u7684\u53d8\u91cf\u5b9a\u4e49\u3001\u521d\u59cb\u5316\u548c\u53c2\u6570\u7684\u4f20\u9012\uff0c\u8fd9\u662f\u9690\u5f0f\u51fd\u6570\u8c03\u7528\u7684\u6838\u5fc3\u673a\u5236\u3002\u5f53\u7136\uff0c\u5f00\u53d1\u8005\u5e94\u8be5\u4fdd\u8bc1\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\u5e94\u8be5\u540c\u65f6\u5177\u6709\u6d88\u8d39\u8005\u548c\u903b\u8f91\u5904\u7406\uff0c\u5426\u5219\u8fd9\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e2a\u901a\u8fc7\u8bbe\u8ba1\u6765\u89c4\u907f\uff0c\u7f16\u8bd1\u5668\u53ef\u4ee5\u534f\u52a9\u63d0\u793a\uff0c\u56e0\u4e3a\u4e00\u4e2a\u6b63\u5e38\u7684\u8bbe\u8ba1\u80af\u5b9a\u662f\u4e24\u8005\u90fd\u6709\u7684\uff1b\u5f53\u7136\u4e5f\u6709\u53ef\u80fd\u4e00\u4e2a\u7ec4\u4ef6\u65e2\u5145\u5f53\u751f\u4ea7\u8005\u4e5f\u5145\u5f53\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u6700\u6838\u5fc3\u7684\u673a\u5236\uff0c\u56e0\u4e3a\u5982\u679c\u4e0d\u8fd9\u6837\uff0c\u8981\u60f3\u5728\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u5fc5\u987b\u5b9a\u4e49\u4e00\u79cd\u534f\u8bae\uff0c\u8fd9\u79cd\u534f\u8bae\u901a\u5e38\u5c31\u662f\u4f20\u7edf\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u7684\u5f15\u7528\u673a\u5236\uff0c\u56e0\u4e3a\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u8fd0\u884c\u65f6\u53d8\u91cf\u53ef\u4ee5\u8bc6\u522b\uff0c\u8fd9\u5c31\u9700\u8981\u5728B\u4e2d\u5b9a\u4e49\u516c\u5171\u53d8\u91cf\uff0c\u7136\u540eA\u7ec4\u4ef6\u9700\u8981\u5f15\u7528B\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u5f62\u6210\u8026\u5408\uff0c\u4f46\u662f\u4e0d\u5f15\u7528\uff0c\u8bed\u8a00\u672c\u8eab\u7684\u673a\u5236\u6ca1\u6cd5\u4fdd\u8bc1\u54ea\u6015\u662f\u540c\u4e00\u4e2a\u540d\u5b57\u7684\u53d8\u91cf\u6267\u884c\u540c\u4e00\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u901a\u8fc7\u7b26\u53f7\u8868\uff0c\u6574\u4e2a\u4e8b\u60c5\u53d8\u5f97\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u53d8\u91cf\u53ea\u9700\u8981\u5b9a\u4e49\u76f8\u540c\u7684\u540d\u5b57\uff0c\u800c\u4e0d\u9700\u8981\u5f15\u7528\uff0c\u8fd9\u4e2a\u76f8\u540c\u7684\u540d\u5b57\u7531\u7b26\u53f7\u8868\u4fdd\u8bc1\uff0c\u800c\u4e0d\u662f\u5b57\u7b26\u4e32\uff0c\u56e0\u4e3a\u5b57\u7b26\u4e32\u53c8\u8bbe\u8ba1\u5bf9\u5e94\u7684\u89e3\u6790\uff0c\u5e26\u6765\u89e3\u91ca\u8d1f\u62c5\u3002\u800c\u4f20\u7edf\u7f16\u8bd1\u5668\u4e2d\u7684\u7b26\u53f7\u8868\u5929\u751f\u5c31\u662f\u7528\u6765\u5c06\u591a\u4e2a\u540d\u5b57\u76f8\u540c\u7684\u7b26\u53f7\u6307\u5411\u540c\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4e86\u901a\u7528\u8bed\u8a00\u4e2d\u53ea\u80fd\u901a\u8fc7\u5f15\u7528\u6765\u5b9e\u73b0\u53c2\u6570\u4f9d\u8d56\u548c\u4f20\u9012\uff0c\u800c\u8fd9\u79cd\u4f9d\u8d56\u662f\u5bfc\u81f4\u6ca1\u6cd5\u7b80\u5316\u7f16\u7a0b\u751a\u81f3\u65e0\u4ee3\u7801\u7f16\u7a0b\u7684\u6839\u672c\u539f\u56e0\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7b26\u53f7\u8868\u673a\u5236\u4e0d\u9002\u5408\u901a\u7528\u8bed\u8a00\uff0c\u5b83\u662f\u6e38\u620f\u8fd9\u79cdUpdate\u673a\u5236\u76f8\u7ed3\u5408\u624d\u80fd\u53d1\u6325\u4f5c\u7528\uff0c\u56e0\u4e3a\u4e24\u4e2aUpdate\u4e4b\u95f4\u7684\u65f6\u95f4\u5f88\u5c0f\uff0c\u6709\u53ef\u80fd\u901a\u8fc7\u5e27\u4e4b\u95f4\u7684\u53d8\u91cf\u5171\u4eab\u6765\u5b9e\u73b0\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u3002\u5426\u5219\u8fd9\u79cd\u673a\u5236\u5c31\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cd\u673a\u5236\u5fc5\u987b\u914d\u5408\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u5de5\u4f5c\uff0c\u6bd4\u5982\u5355\u7eaf\u96c6\u6210Lua\u6216\u8005C#\u662f\u4e0d\u591f\u7684\u3002"),(0,n.kt)("h4",{id:"2211-\u52a8\u6001\u7684\u7b26\u53f7\u8868"},"2.2.1.1 \u52a8\u6001\u7684\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u4e2d\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u52a8\u6001\u7684\uff0c\u4ee5\u63d0\u5347\u89e3\u91ca\u7684\u6027\u80fd\u3002\u56e0\u4e3a\u7b26\u53f7\u53ef\u80fd\u4f1a\u975e\u5e38\u591a\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u5728\u521b\u5efa\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u6839\u636e\u9009\u62e9\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6240\u6709\u7528\u5230\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u52a8\u6001\u751f\u6210\u4e00\u4e2a\u7b26\u53f7\u8868\uff0c\u8fd9\u53ef\u4ee5\u662f\u4e91\u7aef\u7684\u4e00\u4e2a\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u5f53\u9700\u8981\u4fee\u6539\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u91cd\u65b0\u751f\u6210\u65b0\u7684\u7b26\u53f7\u8868\u3002"),(0,n.kt)("h4",{id:"2212-\u7b26\u53f7\u8868"},"2.2.1.2 \u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u6240\u6709\u4ea4\u4e92\u90fd\u6765\u6e90\u4e8e\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u57fa\u672c\u4e0a\u5c31\u662f\u4e3a\u4e86\u4ea4\u4e92\u800c\u751f"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f15\u7528\u5c31\u662f\u4e3a\u4e86\u907f\u514d\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u76f4\u63a5\u5f15\u7528\u5f15\u5165\u4e86\u4ee3\u7801\u7f16\u7a0b\u601d\u60f3\uff0c\u9650\u5236\u4e86\u7ec4\u5408\u7684\u80fd\u529b\uff0c\u9664\u975e\u7ec4\u4ef6\u4e4b\u95f4\u5b8c\u5168\u72ec\u7acb\u65e0\u4ea4\u4e92\uff0c\u53ea\u8981\u4ea4\u4e92\u901a\u8fc7\u76f4\u63a5\u5f15\u7528\u5c31\u8026\u5408\u4e86\u7c7b\u578b\uff0c\u7b26\u53f7\u8868\u8fd9\u662f\u5b9e\u73b0\u7c7b\u578b\u89e3\u8026\u7684\u5173\u952e"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u9700\u8981\u662f\u516c\u5171\u8d44\u6e90\u7684\u5f62\u5f0f\u7ba1\u7406\uff0c\u7528\u6237\u53ef\u4ee5\u4e0b\u8f7d\u5f88\u591a\u5f00\u53d1\u8005\u5b9a\u4e49\u548c\u4e0a\u4f20\u7684\u7b26\u53f7\u8868\uff0c\u8fd9\u4e9b\u7b26\u53f7\u8868\u7531\u5f00\u53d1\u8005\u4e0a\u4f20\uff0c\u6bd4\u8f83\u6709\u540d\u7684\u7b26\u53f7\u8868\u53ef\u80fd\u4f1a\u5f97\u5230\u5f88\u591a\u5176\u4ed6\u5f00\u53d1\u8005\u7684\u652f\u6301\u548c\u517c\u5bb9\uff0c\u4ece\u800c\u5b9e\u73b0\u8de8\u5f00\u53d1\u8005\u4e4b\u95f4\u7684\u534f\u4f5c"),(0,n.kt)("p",null,"\u591a\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u4e5f\u53ef\u80fd\u6709\u91cd\u590d\uff0c\u9700\u8981\u7edf\u4e00\u7684\u673a\u5236\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f3a\u5316\u5168\u5c40\u8868\uff0c\u628a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\u53d1\u5c55\u4e3a\u5168\u5c40\u8868"),(0,n.kt)("li",{parentName:"ul"},"\u5168\u5c40\u8868\u5206\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u5efa\u7acb\u8868\u4e4b\u95f4\u7684\u6620\u5c04\u548c\u5173\u8054\uff0c\u8fd9\u6bd4\u8f83\u590d\u6742")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u7c7b\u578b\u5f15\u7528\u90fd\u901a\u8fc7\u6570\u636e\u67e5\u627e"),(0,n.kt)("p",null,"\u4f46\u662f\u6570\u636e\u4e0d\u80fd\u5b8c\u5168\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"\u67d0\u79cd\u7a0b\u5ea6\u4e0a\uff0c\u6570\u636e\u7684\u7ec4\u5408\u624d\u4ee3\u8868\u7c7b\u578b"),(0,n.kt)("p",null,"ECS\u7684\u6700\u5927\u95ee\u9898\u53ef\u80fd\u662f\u65e0\u6cd5\u533a\u5206\u7c7b\u578b\uff0c\u53ea\u6709\u5b9a\u4e49\u5b57\u7b26\u4e32\u6216\u8005\u679a\u4e3e\u6570\u503c\uff0ctag\u4e4b\u7c7b\u7684\uff1f\u8fd9\u4e9b\u7c7b\u578b\u7531\u53d8\u91cf\u7684\u503c\u800c\u4e0d\u662f\u7b26\u53f7\u672c\u8eab\u51b3\u5b9a\uff0c\u8fd9\u4e9b\u503c\u53ef\u4ee5\u6709\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u63a7\u5236"),(0,n.kt)("p",null,"\u4f46\u662ftag\u9700\u8981\u662f\u9488\u5bf9\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5b9e\u4f53"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f53\u53ef\u4ee5\u4efb\u610f\u590d\u6742\uff0c\u4ed6\u4e0d\u53ef\u80fd\u5177\u6709\u5355\u4e00\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u7c7b\u578b\u53ef\u80fd\u88ab\u591a\u79cd\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u5185\u5b58\u65e0\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5b9a\u4e49\u591a\u4e2a\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u5305\u542b\u81ea\u5df1\u7684\u6807\u7b7e\uff0c\u6216\u8005\u8de8\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6570\u636e\u5fc5\u987b\u662f\u7ed3\u6784\u4f53\u7b26\u53f7\uff0c\u8fd9\u6837\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u5305\u542b\u4e86\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u5c5e\u6027\u91cd\u590d\u7684\u7ed3\u6784\u4f53\uff0c\u4f46\u8fd9\u6ca1\u5173\u7cfb\uff0c\u672c\u8eab\u6570\u636e\u5c31\u662f\u6709\u4e0d\u540c\u610f\u4e49\u7684\uff0c\u5373\u4f7f\u6570\u636e\u7ed3\u6784\u5dee\u4e0d\u591a"),(0,n.kt)("p",null,"\u8003\u8651\u53ea\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u602a\u7269\u7684\u8840\u91cf\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u7c7b\u578b\u6807\u5fd7\u5e94\u8be5\u662f\u8ddfHP\u5173\u8054\u5728\u4e00\u8d77\uff0c\u8fd8\u662f\u8ddf\u602a\u7269\u5b9e\u4f53\u5462\uff1f"),(0,n.kt)("p",null,"\u9700\u8981\u4e00\u4e2a\u4e07\u80fd\u6807\u7b7e\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u4e00\u4e2a\uff0c\u4f46\u662f\u540d\u5b57\u76f8\u540c\uff0c\u7f16\u8bd1\u5668\u4fdd\u8bc1\u91cd\u590d\u95ee\u9898"),(0,n.kt)("p",null,"\u539f\u5b50\u201c\u6570\u636e\u201d"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u6216\u8005\u6570\u636e\u5217\u8868\u5e94\u8be5\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u4e2a\u6570\u636e\u7684\u7ec4\u5408\u5e94\u8be5\u5145\u5f53\u7c7b\u578b\uff0c\u8868\u793a\u4e00\u7c7b\u529f\u80fd\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u6bd4\u5982HP\u548cHealth \u901a\u5e38\u662f\u7ec4\u5408\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u5355\u72ec\u4f7f\u7528HP\uff0c\u5982\u679c\u6709\u591a\u79cd\u7c7b\u578b\u90fd\u9700\u8981\u4f7f\u7528HP\uff0c\u8fd9\u5c31\u9700\u8981\u5b9a\u4e49\u4e00\u4e2a\u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6ca1\u95ee\u9898\uff0c\u7b26\u53f7\u8868\u7684\u610f\u4e49\u5e76\u4e0d\u662f\u5168\u90e8\u6253\u6563\u6210\u72ec\u7acb\u7684\u7b26\u53f7\uff0c\u800c\u662f\u4e3a\u4e86\u907f\u514d\u7c7b\u578b\u5f15\u7528\uff0c\u4f46\u6709\u4e00\u4e0b\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u53ef\u4ee5\u4e3a\u540c\u4e00\u5b9e\u4f53\u6dfb\u52a0\u591a\u4e2aHP\uff0c\u8fd9\u9700\u8981\u5f00\u53d1\u8005\u7528\u6237\u6765\u907f\u514d")),(0,n.kt)("p",null,"\u6240\u4ee5\u7c7b\u578b\u770b\u8d77\u6765\u66f4\u591a\u5e94\u8be5\u662f\u7531\u7ec4\u4ef6\u7684\u6570\u636e\u5408\u4f5c\u9690\u5f0f\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u7b26\u53f7\u8868\u5e94\u8be5\u8db3\u591f\u677e\u6563\uff0c\u8fd9\u6837\u6765\u4fdd\u8bc1\u6700\u5927\u7684\u7075\u6d3b\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5b9a\u4e49\u7684TAG\u53d8\u91cf\u4e0d\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u4f46\u662f\u548c\u7b26\u53f7\u8868\u7c7b\u4f3c\u7684\u5b9a\u4e49\uff0c\u7f16\u8bd1\u5668\u7279\u6b8a\u5904\u7406"),(0,n.kt)("p",null,"\u6216\u8005TAG\u6570\u7ec4\u7ec4\u4ef6\u672c\u8eab\uff0c\u662f\u4e00\u4e2a\u7528\u6765\u53d6\u4ee3\u5f15\u7528\u7ec4\u4ef6\u7c7b\u578b\u540d\u79f0\u672c\u8eab\u7684\u4e00\u4e2a\u6807\u5fd7"),(0,n.kt)("h4",{id:"2213-\u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"},"2.2.1.3 \u7b26\u53f7\u8868\u5b9a\u4e49\u6807\u51c6"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u6982\u5ff5\u4e0a\uff0c\u7b26\u53f7\u8868\u8868\u793a\u7684\u662f\u4e00\u4e2a\u53d8\u91cf\u5c5e\u6027\uff0c\u6216\u8005\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u5b83\u7684\u76ee\u7684\u770b\u8d77\u6765\u5c31\u662f\u4e3a\u89e3\u8026\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u5f15\u7528\u670d\u52a1\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4ece\u7cfb\u7edf\u7684\u9700\u6c42\u4e0a\u770b\uff0c\u4e00\u4e2a\u7b26\u53f7\u8868\u5e94\u8be5\u662f\u5305\u542b\u4e00\u4e2a\u5b8c\u6574\u7684\u5bf9\u67d0\u4e00\u4e9b\u4e8b\u60c5\u6216\u67d0\u4e00\u7c7b\u903b\u8f91\u7684\u4e00\u4e2a\u5b8c\u6574\u6570\u636e\u7ed3\u6784\uff0c\u56e0\u6b64\u5b83\u5b9a\u4e49\u7684\u662f\u4e00\u4e2a\u6807\u51c6\u3002\u53c2\u89c12.7\u8282\u3002"),(0,n.kt)("h4",{id:"2214-\u7248\u672c\u4e0e\u517c\u5bb9\u6027"},"2.2.1.4 \u7248\u672c\u4e0e\u517c\u5bb9\u6027"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4fee\u6539\u540d\u79f0\uff1a\u53ef\u4ee5\u505a\u4e00\u4e2a\u6620\u5c04\uff0c\u7f16\u8bd1\u5668\u76f4\u63a5\u5904\u7406\uff0c\u751a\u81f3\u7ec4\u4ef6\u53ef\u4ee5\u4e00\u952e\u5347\u7ea7\uff0c\u4ee3\u7801\u66ff\u6362\u6700\u65b0\u540d\u5b57"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7\uff1a\u5982\u679c\u53d1\u73b0\u7f3a\u5931\u76f8\u5173\u7b26\u53f7\uff0c\u76f8\u5173\u7684\u7ec4\u4ef6\u4e0d\u518d\u88ab\u89e3\u91ca/\u7f16\u8bd1\u4ec5\u7a0b\u5e8f\uff0c\u5e76\u63d0\u793a\u7528\u6237\u7ec4\u4ef6\u8fc7\u671f\uff0c\u9700\u8981\u66f4\u65b0\uff1b\u8fd9\u90e8\u5206\u901a\u77e5\u901a\u8fc7Reality World\u8fdb\u884c\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7\uff1a\u4f1a\u901a\u77e5\u5f00\u53d1\u8005\uff0c\u5efa\u8bae\u5f00\u53d1\u8005\u652f\u6301")),(0,n.kt)("h4",{id:"2215-\u7b26\u53f7\u5b9a\u4e49\u53d8\u91cf"},"2.2.1.5 \u7b26\u53f7\u201c\u5b9a\u4e49\u201d\u53d8\u91cf"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7ec4\u4ef6\u5e76\u4e0d\u771f\u6b63\u7684\u5b9a\u4e49\u53d8\u91cf\uff0c\u4f8b\u5982\u5b83\u53ea\u80fd\u9009\u62e9\u53d8\u91cf\uff0c\u4f46\u662f\u4e0d\u80fd\u51b3\u5b9a\u53d8\u91cf\u7684\u7c7b\u578b\uff1b\u6b64\u5916\uff0c\u5b83\u5b58\u5728\u7740\u91cd\u590d\u5b9a\u4e49\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u59822.7.16.5\u8282\u63cf\u8ff0\u7684\u91cd\u590d\u5b9a\u4e49\u53d8\u91cf\u7684\u95ee\u9898\uff0c\u7ec4\u4ef6\u4e2d\u7684\u53d8\u91cf\u5b9a\u4e49\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u3002\u6574\u4e2a\u53d8\u91cf\u5b9a\u4e49\u548c\u4f7f\u7528\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u552f\u4e00\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf\uff0c\u4f46\u5176\u5b9e\u5b83\u5e76\u6ca1\u6709\u5206\u914d\u5185\u5b58\uff0c\u4f46\u5b83\u51b3\u5b9a\u4e86\u53d8\u91cf\u7684\u7c7b\u578b\u548c\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u4e2d\u5f15\u7528\u7b26\u53f7\u8868\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u4f46\u4e5f\u4e0d\u662f\u7b80\u5355\u7684\u5f15\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u4e00\u4e2a\u5bf9\u8c61\u7b2c\u4e00\u6b21\u9047\u5230\u67d0\u4e2a\u7b26\u53f7\u65f6\uff0c\u5b83\u5728\u8be5\u5bf9\u8c61\u4e0a\u6dfb\u52a0\u8be5\u53d8\u91cf\uff0c\u5e76\u5206\u914d\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u540e\u7eed\u7684\u7ec4\u4ef6\u5f15\u7528\u76f8\u540c\u7684\u53d8\u91cf\u65f6\uff0c\u5b83\u59cb\u7ec8\u5c06\u5730\u5740\u6307\u5411\u524d\u9762\u5206\u914d\u597d\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u89c12.7.16.5\u8282\u7684\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h4",{id:"2216-\u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"},"2.2.1.6 \u7b26\u53f7\u5b9a\u4e49\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u5c5e\u6027\u96c6\u5408"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b26\u53f7\u5e94\u8be5\u5b9a\u4e49\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u6570\u636e\u96c6\u5408\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Position {\n float x;\n float y;\n float z;\n}\n")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u4ee5\u4e0a\u7684\u5c5e\u6027\u603b\u662f\u540c\u65f6\u51fa\u73b0\uff0c\u90a3\u4e48\u5c06\u5b83\u4eec\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\u3002"),(0,n.kt)("p",null,"\u5c06\u591a\u4e2a\u76f8\u5173\u7684\u7b26\u53f7\u5b9a\u4e49\u5728\u4e00\u8d77\uff0c\u4f1a\u8feb\u4f7f\u8fd9\u4e9b\u53d8\u91cf\u603b\u662f\u5b58\u50a8\u5728\u540c\u4e00\u4e2a\u5bf9\u8c61\u4e0a\uff0c\u907f\u514d\u4e86\u51fd\u6570\u56e0\u4e3a\u591a\u4e2a\u53c2\u6570\u5206\u5e03\u5728\u591a\u4e2a\u5bf9\u8c61\u4e0a\u5bfc\u81f4\u7684\u591a\u5c42\u5d4c\u5957\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"2217-\u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"},"2.2.1.7 \u4f5c\u4e3a\u901a\u77e5\u673a\u5236\u7684\u7b26\u53f7"),(0,n.kt)("p",null,"\u9664\u4e86\u90a3\u4e9b\u5904\u4e8e\u5d4c\u5957\u51fd\u6570\u6700\u5e95\u5c42\u7684\u51fd\u6570\u6240\u6d88\u8d39\u7684\u5c5e\u6027\uff0c\u8fd9\u7c7b\u5c5e\u6027\u901a\u5e38\u4e0d\u4f1a\u89e6\u53d1\u5176\u4ed6\u7684\u51fd\u6570\u6267\u884c\u8ba1\u7b97\uff08\u663e\u793a\u3001\u5b58\u50a8\u4e4b\u7c7b\u7684\u51fd\u6570\u9664\u5916\uff09\uff0c\u5927\u90e8\u5206\u5c5e\u6027\u9664\u4e86\u6570\u503c\u672c\u8eab\uff0c\u8fd8\u5177\u6709\u901a\u77e5\u5c5e\u6027\uff1a\u5373\u544a\u77e5\u5176\u4ed6\u76f8\u5173\u7ec4\u4ef6\uff0c\u6211\u7684\u6570\u503c\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u76f8\u5173\u7ec4\u4ef6\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u503c\u6ca1\u6709\u53d1\u751f\u4efb\u4f55\u53d8\u5316\uff0c\u6839\u636e\u7ec4\u4ef6\u4f5c\u4e3a\u7eaf\u51fd\u6570\u7684\u673a\u5236\uff0c\u540e\u7eed\u76f8\u5173\u7ec4\u4ef6\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\uff0c\u9664\u4e86\u58f0\u660e.UseDt\u7684\u52a8\u753b\u7c7b\u7ec4\u4ef6\u9664\u5916\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u5982\u679c\u52a8\u753b\u7c7b\u7ec4\u4ef6\u4e0d\u53d7\u901a\u77e5\u673a\u5236\u7684\u5f71\u54cd\uff0c\u90a3\u4e48\u5b83\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u5916\u5916\u90e8\u5bf9\u8c61\u6765\u6267\u884c\u4e00\u4e2a\u7c7b\u4f3cEnable/Begin\u548cDisable/End\u4e4b\u7c7b\u7684\u64cd\u4f5c\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7Spawn\u6765\u5b9e\u73b0\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7c7b\u4f3c\u83b7\u53d6\u5f15\u7528\u6765\u5b9e\u73b0\u63a7\u5236\uff0c\u540e\u7eed\u9700\u8981\u76f8\u5173\u5206\u6790\u4e00\u4e0b\u3002")),(0,n.kt)("p",null,"\u5982\u679c\u9700\u8981\u901a\u8fc7\u503c\u7684\u662f\u5426\u53d8\u5316\u4f5c\u4e3a\u540e\u7eed\u7ec4\u4ef6\u8ba1\u7b97\u7684\u4f9d\u636e\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5c5e\u6027\u503c\u5b9e\u9645\u4e0a\u627f\u62c5\u4e86\u4e24\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u540e\u7eed\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u7684\u8f93\u5165\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u77e5\u529f\u80fd")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e24\u4e2a\u529f\u80fd\u662f\u6709\u6b67\u4e49\u7684\uff0c\u4f8b\u5982\u5982\u679c\u4e00\u4e2a\u6280\u80fd\u8981\u6c42\u6263\u9664\u7684HP\u662f3\uff0c\u6240\u4ee5\u6574\u4e2a\u503c3\u540c\u65f6\u627f\u62c5\u4e86\u901a\u77e5\u529f\u80fd\u548c\u6263\u9664\u7684\u5177\u4f53\u6570\u503c\u7684\u529f\u80fd\uff0c\u4f46\u662f\u5982\u679c\u4e0b\u4e00\u5e27\u8be5\u6280\u80fd\u7ee7\u7eed\u91ca\u653e\uff0c\u90a3\u4e48\u5c5e\u6027\u503c\u4f9d\u65e7\u4e3a3\uff0c\u4f46\u662f\u6b64\u65f6\u7cfb\u7edf\u4f1a\u8ba4\u4e3a\u8be5\u503c\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u56e0\u6b64\u901a\u77e5\u529f\u80fd\u5931\u6548\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u4e00\u7684\u503c\u4e0d\u80fd\u540c\u65f6\u627f\u8f7d\u4e24\u4e2a\u529f\u80fd\uff0c\u5b83\u4eec\u5206\u522b\u9700\u8981\u81ea\u5df1\u7684\u6570\u503c\u6216\u8005\u6807\u8bb0\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u89e3\u51b3\u601d\u8def\u662f\u5728\u6bcf\u4e00\u5e27\u7684\u672b\u5c3e\uff0c\u628a\u8fd9\u4e9b\u6570\u503c\u6e05\u96f6\u3002\u4f46\u662f\u8fd9\u6837\u505a\uff0c\u5176\u4ed6\u6709\u4e9b\u5c5e\u6027\u4f1a\u53d7\u5f71\u54cd\uff0c\u5c31\u662f\u90a3\u4e9b\u4e0d\u662f\u589e\u91cf\u503c\u7684\u53d8\u91cf\uff0c\u5b83\u4eec\u9700\u8981\u59cb\u7ec8\u5b58\u50a8\u81ea\u5df1\u7684\u503c\uff0c\u5b9e\u9645\u4e0a\u53ea\u6709\u50cf\u6280\u80fd\u8fd9\u79cd\u6263\u9664\u6027\u7684\u589e\u5f3a\u5c5e\u6027\u624d\u53ef\u4ee5\u8fd9\u6837\u505a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u8981\u6c42\u6240\u6709\u589e\u91cf\u578b\u7684\u53d8\u91cf\u59cb\u7ec8\u6267\u884c\uff0c\u8ba9\u5f00\u53d1\u8005\u4fdd\u8bc1\u7ed3\u679c\u662f\u6b63\u786e\u7684\uff0c\u4f8b\u5982\u4e0b\u4e00\u5e27\u5982\u679c\u8be5\u6280\u80fd\u6ca1\u6709\u91ca\u653e\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u628a\u503c\u7f6e\u96f6\u3002\u4f46\u5176\u5b9e\u8fd9\u79cd\u7f6e\u96f6\u7684\u8fc7\u7a0b\u4f1a\u662f\u540e\u7eed\u7684\u7ec4\u4ef6\u8bef\u4ee5\u4e3a\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u6839\u636e\u9ed8\u8ba4\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u95ee\u9898\u5728\u4f20\u7edf\u7684\u5f00\u53d1\u4e2d\u4e0d\u4f1a\u5b58\u5728\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u5927\u591a\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7684\u8c03\u7528\u903b\u8f91\uff0c\u5373\u53d1\u8d77\u6280\u80fd\u7684\u51fd\u6570\u4f1a\u901a\u8fc7\u67d0\u79cd\u5f62\u5f0f\u76f4\u63a5\u80fd\u591f\u89e6\u53d1\u5bf9\u6263\u8840\u51fd\u6570\u7684\u8c03\u7528\uff08\u4f8b\u5982\u901a\u8fc7\u4e00\u4e9bManager\u4e4b\u7c7b\u7684\u51fd\u6570\uff09\uff0c\u56e0\u6b64\u5176\u5b9e\u5b83\u4eec\u4e0d\u4f1a\u5b58\u5728\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\u7684\u589e\u91cf\u503c\uff0c\u56e0\u4e3a\u4e0b\u4e00\u6b21\u6ca1\u6709\u6280\u80fd\u91ca\u653e\u5219\u538b\u6839\u5c31\u4e0d\u4f1a\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u601d\u8def\u662f\u901a\u8fc7\u6d88\u606f\u7684\u673a\u5236\uff0c\u4f20\u7edf\u7684\u6d88\u606f\u673a\u5236\u662f\u5c06\u6d88\u606f\u5b58\u653e\u5230\u4e00\u4e2a\u961f\u5217\u4e2d\uff0c\u7136\u540e\u54cd\u5e94\u8005\u4ece\u6d88\u606f\u5217\u8868\u83b7\u53d6\u6d88\u606f\u5e76\u8fdb\u884c\u5904\u7406\uff0c\u5f53\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u8fd9\u6761\u6d88\u606f\u5c31\u4f1a\u88ab\u5220\u9664\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u5c5e\u6027\u901a\u8fc7\u6309\u4f9d\u8d56\u987a\u5e8f\u6267\u884c\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5c5e\u6027\u5145\u5f53\u4e86\u6d88\u606f\u7684\u529f\u80fd\u3002\u4f46\u662f\u8fd9\u4e2a\u6d88\u606f\u5728\u4e00\u5e27\u7ed3\u675f\u540e\u5e76\u6ca1\u6709\u6e05\u9664\uff0c\u800c\u662f\u8fd9\u4e2a\u503c\u4f1a\u6c38\u4e45\u5b58\u5728\uff0c\u56e0\u6b64\u5e26\u6765\u4e86\u4e0a\u8ff0\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u50cf\u786c\u4ef6\u7684\u8f93\u5165\u4e8b\u4ef6\uff0c\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\u95ee\u9898\uff0c\u4f46\u662f\u901a\u5e38\u7cfb\u7edf\u8f93\u5165\u5e76\u6ca1\u6709\u4f7f\u7528\u6d88\u606f\u7684\u673a\u5236\u4f20\u9012\uff0c\u800c\u662f\u76f4\u63a5\u7f16\u5199update\u51fd\u6570\uff0c\u8fd9\u6837\u76d1\u542c\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4f1a\u4e00\u76f4\u6267\u884c\uff0c\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e00\u5e27\u7684\u8ba1\u7b97\u7ed3\u679c\u90fd\u4e0d\u4f1a\u8fdb\u5165\u4e0d\u53ef\u9884\u671f\u7684\u5206\u652f\u3002\u4f46\u662f\u56e0\u4e3a\u5904\u7406\u8f93\u5165\u4e8b\u4ef6\u7684\u811a\u672c\u4e0d\u4f1a\u5f88\u591a\uff0c\u6240\u4ee5\u4e0d\u4f1a\u5bfc\u81f4\u592a\u5927\u7684\u95ee\u9898\u3002\u4f46\u662f\u5982\u679c\u7cfb\u7edf\u5927\u91cf\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684\u903b\u8f91\u4e5f\u5df2\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u5219\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u65b9\u6cd5\u662f\u4f7f\u7528.UseDt(true)\u4f7f\u5176\u50cf\u8f93\u5165\u7ec4\u4ef6\u4e00\u6837\u5e94\u7528\u6267\u884c\u3002\u540e\u7eed\u518d\u8003\u8651\u4f18\u5316\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"2218-\u5b58\u6863\u5c5e\u6027"},"2.2.1.8 \u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1\u4f1a\u6709\u5927\u91cf\u7684\u5c5e\u6027\uff0c\u663e\u7136\u6709\u5f88\u591a\u5c5e\u6027\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u800c\u5e73\u53f0\u4e5f\u65e0\u6cd5\u5224\u65ad\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u4e5f\u65e0\u6cd5\u8ba9\u521b\u4f5c\u7528\u6237\u5728\u521b\u4f5c\u7684\u65f6\u5019\u53bb\u6307\u5b9a\u90a3\u4e9b\u5c5e\u6027\u9700\u8981\u5b58\u6863\uff0c\u5b58\u6863\u7684\u529f\u80fd\u5c5e\u6027\u672c\u8eab\u662f\u5f00\u53d1\u8005\u548c\u6807\u51c6\u5236\u5b9a\u8005\u53ef\u4ee5\u51b3\u5b9a\u7684\u3002\u6240\u4ee5\uff0c\u5b58\u6863\u5c5e\u6027\u5e94\u8be5\u7531\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u4e0d\u7ba1\u662f\u5171\u4eab\u7b26\u53f7\u8868\u6216\u79c1\u6709\u7b26\u53f7\u8868\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7b26\u53f7\u662f\u5426\u9700\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u5168\u5c40\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u6709\u4e9b\u4ec5\u662f\u7528\u6765\u5b9e\u73b0\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u4ea4\u6362\u7684\u7b26\u53f7\u662f\u4e0d\u9700\u8981\u5b58\u6863\u7684\u3002\u4f8b\u5982\u90a3\u4e9b\u4ec5\u4ec5\u662f\u65e0\u5173\u7d27\u8981\u7684\u901a\u77e5\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b58\u6863\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4f1a\u4fdd\u8bc1\u5f53\u7ec4\u4ef6\u6b63\u5e38\u6267\u884c\u540e\uff0c\u5176\u4fee\u6539\u7684\u7ed3\u679c\u4f1a\u88ab\u5b58\u6863\u3002"),(0,n.kt)("h3",{id:"222-entity"},"2.2.2 Entity"),(0,n.kt)("p",null,"ID + TAG"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5b9e\u4f53\u6709\u4e2a\u9690\u85cfprivate\u53d8\u91cf\uff1aTAG\u548cTARGET\u7528\u6765\u5b9a\u4e49\u7ec4\u4ef6\u672c\u8eab\u7684\u6807\u8bc6\u7b26\uff0c\u4ee5\u53ca\u7528\u4f5c\u67e5\u8be2\u6761\u4ef6\u7684\u6807\u5fd7\u7b26"),(0,n.kt)("p",null,"\u5728Entity\u4e0a\u589e\u52a0TAG\uff0c\u56e0\u6b64\u5145\u5f53\u4e00\u4e2aEntity\u7684\u7c7b\u578b\u533a\u5206\uff0c\u521b\u4f5c\u8005\u53ef\u4ee5\u5728Creation\u4e2d\u521b\u5efa\u4e00\u4e2aLayer\u8868\u5bf9\u5176\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u4ee5\u7edf\u4e00\u547d\u540d\u7b49\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eSystem\u7684TARGET\uff0c\u5b83\u6307\u5411Entity\u7684TAG\u5c5e\u6027\uff0c\u867d\u7136System\u5bf9\u4e8e\u4e00\u4e2aCreation\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662fSystem\u672c\u8eab\u53ea\u5305\u542b\u65b9\u6cd5\uff0cSystem\u7684\u72b6\u6001\u6570\u636e\uff08private\u79c1\u6709\u53d8\u91cf\uff09\u662f\u5b58\u50a8\u5728\u6bcf\u4e2aEntity\u5185\u90e8\u7684\uff0c\u5b83\u5177\u6709\u591a\u4e2a\u5b9e\u4f8b\u3002\u56e0\u6b64\u5bf9\u4e8eTARGET\u6765\u8bf4\uff0c\u6bcf\u4e2aEntity\u7684\u503c\u90fd\u4e0d\u4e00\u6837\uff0c\u56e0\u6b64Entity\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u7c7b\u578b\u76ee\u6807Entity\u3002"),(0,n.kt)("h3",{id:"223-\u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"},"2.2.3 \u4e09\u79cd\u53d8\u91cf\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 5\n\nnamespace SomeComponent{\n query Global.HP as hp\n query Global.HP[] as hps\n\n public Global.HP as hp\n \n private fTemp = 100.\n private TARGET = 20\n}\n")),(0,n.kt)("p",null,"\u4e09\u79cd\u7c7b\u578b\u53d8\u91cf\u8bf4\u660e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"private \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u79c1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u8be5\u7ec4\u4ef6\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\u76f4\u63a5\u58f0\u660e\u5b9e\u73b0\uff0c\u56e0\u4e3a\u6ca1\u6709\u4ece\u5168\u5c40\u7b26\u53f7\u8868\u5f15\u7528\u58f0\u660e\uff0c\u6240\u4ee5\u5176\u4ed6\u7ec4\u4ef6\u6ca1\u6709\u53ef\u80fd\u5bf9\u5176\u8fdb\u884c\u8bbf\u95ee\uff1bprivate\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"public \u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u516c\u5171\u53d8\u91cf\uff0c\u53ef\u4ee5\u88ab\u5b9e\u4f53\u5185\u8de8\u7ec4\u4ef6\u8bbf\u95ee\uff0c\u4e5f\u53ef\u4ee5\u88ab\u5176\u4ed6\u5b9e\u4f53\u8bbf\u95ee\uff1bpublic\u4e5f\u662f\u5b9e\u4f53\u7684\u5b9e\u4f8b\u53d8\u91cf\uff1b\u901a\u5e38public\u53d8\u91cf\u7531\u4f7f\u7528\u8be5\u53d8\u91cf\u7684\u7ec4\u4ef6\u5b9a\u4e49\uff0c\u53ef\u4ee5\u591a\u4e2a\u7ec4\u4ef6\u4e2d\u90fd\u91cd\u590d\u5b9a\u4e49\uff0c\u4f1a\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"query\u4e0d\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u53d8\u91cf\uff0c\u5b83\u662f\u6307\u5411\u5916\u90e8\u53d8\u91cf\u7684\u5f15\u7528\uff0c\u5b83\u53ea\u80fd\u8bbf\u95ee\u90a3\u4e9b\u5b9a\u4e49\u4e3apublic\u7684\u5b9e\u4f53")),(0,n.kt)("h4",{id:"2231-\u79c1\u6709\u53d8\u91cf"},"2.2.3.1 \u79c1\u6709\u53d8\u91cf"),(0,n.kt)("p",null,"\u79c1\u6709\u53d8\u91cf\u53ea\u662f\u5b9e\u4f53\u5185\u7ec4\u4ef6\u624d\u53ef\u4ee5\u8bbf\u95ee\u7684\u5c5e\u6027\uff0c\u5b9e\u4f53\u662f\u7528\u6237\u521b\u5efa\u7684\uff0c\u5176\u6240\u6709\u6743\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u540c\u6837\uff0c\u8be5\u5b9e\u4f53\u6240\u6709\u7684\u7ec4\u4ef6\u662f\u7531\u7528\u6237\u9009\u62e9\u7684\uff0c\u6240\u4ee5\u8fd9\u4e2a\u9009\u62e9\u95f4\u63a5\u5305\u542b\u7528\u6237\u5bf9\u8be5\u7ec4\u4ef6\u8bbf\u95ee\u8be5\u5b9e\u4f53\u6570\u636e\u7684\u6743\u9650\u3002"),(0,n.kt)("p",null,"\u9009\u62e9\u7ec4\u4ef6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u662f\u4e00\u79cd\u529f\u80fd\u6784\u5efa\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u4e00\u79cd\u6388\u6743\u884c\u4e3a")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u80fd\u591f\u8bbf\u95ee\u81ea\u5df1\u6240\u5728\u5b9e\u4f53\u7684\u4efb\u4f55\u5c5e\u6027\uff0c\u4e0d\u652f\u6301\u5728\u5b9e\u4f53\u5185\u518d\u5212\u5206\u6743\u9650\uff0c\u90a3\u4e48\u5c06\u4f1a\u589e\u52a0\u590d\u6742\u5ea6\uff0c\u800c\u4e14\u770b\u8d77\u6765\u6ca1\u6709\u90a3\u79cd\u5fc5\u8981\uff0c\u5b9e\u4f53\u8fd9\u4e2a\u7c92\u5ea6\u4f5c\u4e3a\u6743\u9650\u5355\u4f4d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u662f\u8db3\u591f\u7684\uff0c\u5408\u7406\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u662f\u7528\u6237\u8bbe\u7f6e\u548c\u7ba1\u7406\u8d77\u6765\u76f8\u5bf9\u6bd4\u8f83\u5bb9\u6613\u7684")),(0,n.kt)("h4",{id:"2232-\u5199\u5165\u6743\u9650"},"2.2.3.2 \u5199\u5165\u6743\u9650"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u6709\u5bf9\u81ea\u8eab\u5b9e\u4f53\u6240\u5728\u7684\u5c5e\u6027\u624d\u5177\u6709\u5199\u7684\u6743\u9650\uff0c\u4e0d\u80fd\u5bf9\u5176\u4ed6\u5b9e\u4f53\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5426\u5219\u6743\u9650\u4e0d\u53ef\u63a7\u5236\uff0c\u56e0\u4e3a\u6743\u9650\u662f\u6309\u7167\u5b9e\u4f53\u4e3a\u5355\u4f4d\u8fdb\u884c\u6784\u9020\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u62c9\u53d6\u6a21\u5f0f\uff0c\u53c2\u89c12.2.11.2\u8282\u3002"),(0,n.kt)("h4",{id:"2233-\u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"},"2.2.3.3 \u79c1\u6709\u53d8\u91cf\u4e0d\u662f\u7ec4\u4ef6\u7684\u72b6\u6001"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f53\u7684\u5c5e\u6027\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u8f93\u51fa\uff0c\u5b83\u603b\u662f\u5bf9\u4e00\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u50cf\u7c7b\u4f3c\u52a8\u753b\u6216\u8005\u4e00\u4e9b\u81ea\u5b9a\u4e49\u8de8\u5e27\u903b\u8f91\u7684\u8fd9\u79cd\u7ec4\u4ef6\uff0c\u4ed6\u53ef\u80fd\u9700\u8981\u5b58\u50a8\u4e00\u4e9b\u8de8\u5e27\u7684\u72b6\u6001\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u901a\u8fc7\u79c1\u6709\u7684\u7b26\u53f7\u8868\u6765\u5b9a\u4e49\uff0c\u4f46\u5b83\u4eec\u8ddf\u5176\u4ed6\u5c5e\u6027\u4e4b\u95f4\u5b58\u5728\u4e00\u4e2a\u4e3b\u8981\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u53d8\u91cf\u4e00\u822c\u53ea\u80fd\u88ab\u4e00\u4e2a\u552f\u4e00\u7684\u7ec4\u4ef6\u611f\u77e5\uff0c\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u4e5f\u4e0d\u9700\u8981\u77e5\u9053\u5b83\u7684\u5b58\u5728")),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u53ea\u8fd9\u6837\uff0c\u5c31\u9020\u6210\u4e00\u79cd\u6f5c\u5728\u7684\u95ee\u9898\uff0c\u8fd9\u4e9b\u53d8\u91cf\u770b\u8d77\u6765\u5145\u5f53\u4e86\u8fd9\u4e9b\u7ec4\u4ef6\u7684\u72b6\u6001\uff1a\u56e0\u4e3a\u8f93\u5165\u6761\u4ef6\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u7834\u574f\u4e86\u7ec4\u4ef6\u5145\u5f53\u7eaf\u51fd\u6570\u7684\u76ee\u6807\uff0c\u4e5f\u4f7f\u5f97\u901a\u8fc7\u8f93\u5165\u662f\u5426\u53d8\u66f4\u6765\u51b3\u5b9a\u662f\u5426\u9700\u8981\u6267\u884c\u7ec4\u4ef6\u8ba1\u7b97\u53d8\u5f97\u56f0\u96be\uff0c\u53c2\u89c12.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u4e00\u79cd\u89e3\u51b3\u65b9\u6848\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u8fd9\u4e9b\u4e2d\u95f4\u53d8\u91cf\u6210\u4e3a\u65f6\u95f4\u7684\u51fd\u6570\uff0c\u5728\u6bcf\u4e00\u6b21\u51fd\u6570\u8ba1\u7b97\u4e2d\uff0c\u7531\u7ec4\u4ef6\u51fd\u6570\u6839\u636edt\u53c2\u6570\u8ba1\u7b97\u800c\u5f97")),(0,n.kt)("p",null,"\u8fd9\u79cd\u53ef\u80fd\u4f1a\u6bcf\u5e27\u91cd\u590d\u8ba1\u7b97\u4e00\u4e9b\u5185\u5bb9\uff0c\u4f46\u662f\u5176\u5b9e\u53ef\u80fd\u95ee\u9898\u4e0d\u5927\uff0c\u56e0\u4e3a\u90a3\u4e9b\u5b58\u50a8\u7684\u4e2d\u95f4\u72b6\u6001\uff0c\u5176\u5b9e\u5927\u90e8\u5206\u662f\u6bcf\u5e27\u90fd\u8981\u4ee3\u5165dt\u8fdb\u884c\u91cd\u65b0\u8ba1\u7b97\u7684\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u53ef\u80fd\u5e26\u6765\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u76f8\u5bf9\u5e26\u6765\u67b6\u6784\u7684\u7b80\u6d01\u6027\uff0c\u662f\u53ef\u53d6\u7684\u3002\u4f8b\u5982\u5728\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u5f53\u4e2d\uff0c\u4e3a\u4e86\u7ef4\u6301\u51fd\u6570\u7684\u7eaf\u51fd\u6570\u7279\u6027\uff0c\u4ee5\u53ca\u53d8\u91cf\u7684\u4e0d\u53ef\u4fee\u6539\u7279\u6027\uff0c\u5176\u5b9e\u4e5f\u505a\u4e86\u5927\u91cf\u590d\u5236\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u76f8\u5bf9\u6027\u80fd\uff0c\u5b83\u4eec\u5e26\u6765\u7684\u67b6\u6784\u4ef7\u503c\u66f4\u5927\u3002\u4f55\u51b5RealityIS\u53ef\u4ee5\u901a\u8fc7\u5206\u5e03\u5f0f\u53ca\u5176\u4ed6\u7279\u6027\u6765\u5f25\u8865\u8fd9\u4e9b\u6027\u80fd\u635f\u5931\u3002"),(0,n.kt)("h3",{id:"224-\u6570\u636e\u62bd\u8c61\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"},"2.2.4 \u6570\u636e\u62bd\u8c61\uff1a\u5171\u4eab\u53d8\u91cf\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u53d8\u91cf\u7684\u58f0\u660e\u4e0e\u7a0b\u5e8f\u6267\u884c\u6307\u4ee4\u7684\u8026\u5408\uff0c\u662f\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u6700\u5927\u7684\u9650\u5236\uff0c\u8fd9\u53ef\u80fd\u67092\u79cd\u539f\u56e0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u8981\u662f\u8fd8\u662f\u57fa\u4e8e\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\uff0c\u5b83\u4e0a\u9762\u6240\u505a\u7684\u62bd\u8c61\uff0c\u66f4\u591a\u662f\u56f4\u7ed5\u7528\u5f00\u53d1\u8005\uff08\u4eba\u7684\uff09\u7684\u89d2\u5ea6\u600e\u4e48\u53bb\u7406\u89e3\u548c\u7ec4\u7ec7\u673a\u5668\u4ee3\u7801\u7684\u7ed3\u6784\uff0c\u800c\u6ca1\u6709\u56f4\u7ed5\u4eba\u7c7b\u7406\u89e3\u4e8b\u7269\u771f\u6b63\u7684\u903b\u8f91\u53bb\u8fdb\u884c\u8c03\u6574\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u90fd\u662f\u56f4\u7ed5\u5355\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1\uff0c\u5373\u4f7f\u6709\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u9700\u8981\u4ea4\u4e92\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u5c11\u91cf\u4e14\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\u9700\u6c42\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u6807\u51c6\u7684\u5f62\u5f0f\u89e3\u51b3\uff0c\u4f8b\u5982HTTP\u534f\u8bae\u3002")),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5143\u5b87\u5b99\u65f6\u4ee3\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e9b\u5168\u65b0\u7684\u7f16\u7a0b\u67b6\u6784\uff0c\u6240\u4ee5\u6700\u91cd\u8981\u7684\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6211\u4eec\u9700\u8981\u5728\u786c\u4ef6\u67b6\u6784\u548c\u5e94\u7528\u67b6\u6784\u4e4b\u95f4\uff0c\u5efa\u7acb\u8d77\u4e00\u4e2a\u6570\u636e\u62bd\u8c61\u67b6\u6784\uff0c\u5c06\u4f20\u7edf\u786c\u4ef6\u8ba1\u7b97\u67b6\u6784\u7684\u9650\u5236\u9690\u85cf\u8d77\u6765\uff0c\u5e76\u4e14\u4e0a\u5c42\u5e94\u7528\u67b6\u6784\u7684\u80fd\u529b\u53ef\u4ee5\u66f4\u5927\u7684\u91ca\u653e"),"\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u7684\u6838\u5fc3\u903b\u8f91\uff0c\u662f\u901a\u8fc7\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u7684\u6539\u9020\uff0c\u5728\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e2a\u65b0\u7684\u8f6c\u6362\u5c42\uff0c\u662f\u80fd\u591f\u5c06\u57fa\u4e8e\u6570\u636e\u62bd\u8c61\u7684\u7a0b\u5e8f\u67b6\u6784\uff0c\u8f6c\u6362\u4e3a\u4f20\u7edf\u57fa\u4e8e\u786c\u4ef6\u67b6\u6784\u7684\u7a0b\u5e8f\u7ed3\u6784\u3002"),(0,n.kt)("h4",{id:"2241-\u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"},"2.2.4.1 \u5171\u4eab\u53d8\u91cf\u7684\u58f0\u660e"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'#version 1.0.0\n#order 1000\n\nnamespace SomeComponent{\n public Global.iHP as iHP = 5\n public Global.vfPosition = (1000.0, 234.5, 400.8)\n public Global.sLabelName = "Super Man"\n \n private fTemp = 500.6 \n \n fn Update(fTime){\n fTemp = fTemp * fTime\n iHP = fTemp\n }\n}\n')),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u53d8\u91cf\u7684\u987a\u5e8f\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u8981\u8fdb\u884c\u6392\u5e8f\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u8fd9\u91cc\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u540d\u4e0e\u5c40\u90e8\u7b80\u5199\u540d\u5b57\u7684\u533a\u522b\uff0c\u5728\u89e3\u91ca\u5668\u4e2d\uff0c\u9700\u8981\u53bb\u9664\u672c\u5730\u53d8\u91cf\u540d\u79f0\uff0c\u4f7f\u7528\u7edf\u4e00\u7684\u5168\u5c40\u540d\u79f0\uff0c\u56e0\u4e3a\u4e0d\u540c\u7ec4\u4ef6\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\uff0c\u53ef\u80fd\u4f7f\u7528\u4e0d\u540c\u7684\u5c40\u90e8\u53d8\u91cf\u7b80\u5199\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9700\u8981\u5904\u7406\u5176\u4ed6\u7269\u4f53\u7684\u7ec4\u4ef6\uff0c\u5b9a\u4e49\u4e00\u4e2a\u6570\u7ec4\u7684\u5f62\u5f0f\uff0c\u89e3\u91ca\u5668\u81ea\u52a8\u67e5\u627e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 1000\n\nnamespace HandleOtherComponent{\n outer Global.iHP[]\n outer Global.vPosition[]\n \n out vPosition as position\n \n fn Upadte{\n for i in iHP{\n if(distance(vPosition[i]-position)<10){\n iHP[i]-=1\n vPosition[i]=(10,10,10)\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7c7b\u578b\u7528\u4e8e\u7531\u4e00\u4e9b\u7279\u5b9a\u5bf9\u8c61\u53d1\u8d77\u7684\u884c\u4e3a\uff0c\u5982\u679c\u662f\u5168\u5c40\u7ec4\u4ef6\uff0c\u5168\u5c40\u7ec4\u4ef6\u6bcf\u4e2a\u573a\u666f\u53ea\u6709\u4e00\u4e2aEntity\u53ef\u4ee5\u62e5\u6709"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 10\n\nnamespace PhysicalComponent{\n unique Global.Collider[] clliders\n}\n")),(0,n.kt)("p",null,"\u5b9a\u4e49\u4e86global\u7684\u5c5e\u6027\u89e3\u91ca\u5668\u4f1a\u89e3\u91ca\u552f\u4e00\u6027\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6709\u4e9b\u7ec4\u4ef6\u662f\u6ca1\u6709\u65b9\u6cd5\u7684\uff0c\u4f46\u6ca1\u5173\u7cfb\uff0c\u4ece\u7528\u6237\u89d2\u5ea6\u6765\u8bf4\u5b83\u4ecd\u7136\u662f\u4e00\u4e2a\u529f\u80fd\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0.0\n#order 100\n\nnamespace ClidderComponent{\n public Global.Cllider\n public TAG = 100\n}\n")),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u7ec4\u4ef6\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u81ea\u8eab\u8fdb\u884c\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u5bf9\u5176\u4ed6\u5bf9\u8c61\u8fdb\u884c\u4fee\u6539\uff0c\u8fd9\u79cd\u60c5\u51b5\u6709\u4e00\u4e2a\u53d1\u8d77\u7684\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u7c7b\u662f\u6ca1\u6709\u7279\u5b9a\u53d1\u8d77\u7684\u5bf9\u8c61\uff0c\u5b83\u662f\u5bf9\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u901a\u7528\u884c\u4e3a\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce")),(0,n.kt)("h4",{id:"2242-\u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"},"2.2.4.2 \u5171\u4eab\u53d8\u91cf\u7684\u521d\u59cb\u5316"),(0,n.kt)("p",null,"\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u90fd\u53ef\u4ee5\u8bbe\u7f6e\u521d\u59cb\u503c\uff0c\u5176\u4e2d\u4e00\u4e2a\u4fee\u6539\u4f1a\u590d\u5199\u53e6\u4e00\u4e2a\uff0c\u56e0\u4e3a\u5bf9\u4e8e\u5171\u4eab\u53d8\u91cf\uff0c\u4e00\u4e2a\u5b9e\u4f53\u53ea\u6709\u4e00\u4efd\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u521d\u59cb\u5316\u7684\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\u5668\u4e2d\u4fee\u6539\uff0c\u6bcf\u6b21\u9009\u62e9\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u8bbe\u7f6e\u540e\uff0c\u4e0b\u6b21\u5176\u4ed6\u7ec4\u4ef6\u52a0\u8f7d\u7684\u4e5f\u662f\u4fee\u6539\u540e\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fd0\u884c\u65f6\uff0c\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u7269\u4f53\uff0c\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u8fd0\u884c\u6001\u7528\u6237\u53ea\u770b\u5f97\u89c1\u4e00\u4efd\u5171\u4eab\u53d8\u91cf\uff0c\u7ec4\u4ef6\u53ea\u6709\u79c1\u6709\u53d8\u91cf\u53ef\u4ee5\u5355\u72ec\u8bbe\u7f6e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4ee3\u7801\u7684\u5f62\u5f0f\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u6309\u65f6\u95f4\u8986\u5199\u6570\u503c\u3002\u4f46\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u7ec4\u4ef6\u7684\u521d\u59cb\u503c\u5e94\u8be5\u7531\u5176\u5b9a\u4e49\u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u5426\u5219\u5bb9\u6613\u9020\u6210\u8ff7\u60d1\u3002\u4e00\u65e6\u5b9e\u4f8b\u8fd0\u884c\u4e00\u6bb5\u65f6\u95f4\u4e4b\u540e\uff0c\u503c\u5e94\u8be5\u7531\u6301\u4e45\u5316\u7684\u6570\u636e\u8fdb\u884c\u52a0\u8f7d\u521d\u59cb\u5316\u3002")),(0,n.kt)("h4",{id:"2243-\u51fd\u6570\u53c2\u6570\u89e3\u8026"},"2.2.4.3 \u51fd\u6570\u53c2\u6570\u89e3\u8026"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5bf9\u611f\u5174\u8da3\u7684\u6570\u636e\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4fdd\u8bc1\u4e24\u4e2a\u5bf9\u540c\u6837\u6570\u636e\u611f\u5174\u8da3\u7684\u6570\u636e\u90fd\u80fd\u591f\u6309\u987a\u5e8f\u88ab\u6267\u884c")),(0,n.kt)("p",null,"\u5269\u4e0b\u53ea\u8981\u6211\u4eec\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u987a\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u5c31\u53ef\u4ee5\u4ee5\u95f4\u63a5\u7684\u65b9\u5f0f\u5b9e\u73b0\u4ea4\u4e92\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u5171\u540c\u611f\u5174\u8da3\u7684\u53c2\u6570\u5145\u5f53\u4e86\u51fd\u6570\u53c2\u6570\uff0c\u540c\u65f6\u4e0d\u9700\u8981\u5f15\u7528\u5176\u4ed6\u7ec4\u4ef6\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u5168\u65b0\u7684\u673a\u5236\uff0c\u53ea\u6709\u8fd9\u6837\uff0c\u624d\u80fd\u5b9e\u73b0\u4e24\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u800c\u4e14\uff0c\u9664\u4e86\u5bf9\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u89e3\u8026\uff0c\u5b83\u8fd8\u6709\u4e00\u4e0b\u4e09\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u4e0d\u9700\u8981\u53bb\u5173\u5fc3\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f8b\u5982\u5c31\u4e0d\u4f1a\u51fa\u73b0\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u5e38\u89c1\u7684\u4f60\u8c03\u6211\u8fd8\u662f\u6211\u8c03\u7528\u4f60\u7684\u95ee\u9898\uff0c\u8fd9\u8ba9\u6211\u4eec\u5c06\u7f16\u7a0b\u601d\u60f3\u56de\u5f52\u5230\u672c\u8d28\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u53ea\u662f\u5904\u7406\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u5e76\u8f93\u51fa\u76f8\u5173\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u4e2a\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u4e0d\u592a\u4e00\u6837\u3002\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u5927\u90e8\u5206\u529f\u80fd\u90fd\u662f\u5728\u5904\u7406\u6570\u636e\uff0c\u8fd9\u79cd\u601d\u7ef4\u7406\u89e3\u8d77\u6765\u66f4\u7b80\u6d01\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\uff0c\u5927\u90e8\u5206\u5e76\u53d1\u76f8\u5173\u7684\u95ee\u9898\u90fd\u662f\u7531\u4e8e\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u5bf9\u8c61\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u3002\u4e0d\u4ec5\u4e0d\u5229\u4e8e\u5e76\u884c\u8ba1\u7b97\uff0c\u800c\u4e14\u5bb9\u6613\u5bfc\u81f4\u5404\u79cd\u5e76\u53d1\u95ee\u9898\uff0c\u4f8b\u5982\u6b7b\u9501\uff0c\u8d44\u6e90\u62a2\u5360\u7b49\u7b49\uff0c\u56e0\u4e3a\u4e0d\u53ef\u9884\u671f\u7684\u591a\u4e2a\u5bf9\u8c61\u4f1a\u8bbf\u95ee\u540c\u4e00\u4e2a\u5bf9\u8c61\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u80fd\u51cf\u5c11\u56e0\u4e3a\u53d8\u5316\u5bfc\u81f4\u7684\u91cd\u6784\u3001\u91cd\u65b0\u53d1\u5e03\u7a0b\u5e8f\u7b49\u95ee\u9898\u3002\u5f53\u4e00\u4e2a\u51fd\u6570\u53c2\u6570\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u5fc5\u987b\u8981\u4fee\u6539\u8c03\u7528\u8005\u7684\u4ee3\u7801\uff0c\u5b83\u53ef\u80fd\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u518d\u53ef\u7528\u6216\u8005\u5d29\u6e83\uff0c\u56e0\u800c\u4f7f\u5f97\u5176\u4ed6\u7ec4\u4ef6\u4e0d\u592a\u613f\u610f\u66f4\u65b0\u5230\u6700\u65b0\u5f15\u7528\uff0c\u4ece\u800c\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5316\u5f88\u6162\u3002\u51fd\u6570\u89e3\u8026\u53ef\u4ee5\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u7684\u4fee\u6539\u81f3\u5c11\u5e76\u4e0d\u4f1a\u5f71\u54cd\u7a0b\u5e8f\u7684\u8fd0\u884c\u3002\u5f53\u7136\u5982\u679c\u903b\u8f91\u53d1\u751f\u4e86\u8f83\u5927\u7684\u53d8\u5316\uff0c\u7a0b\u5e8f\u7684\u8ba1\u7b97\u7ed3\u679c\u53ef\u80fd\u903b\u8f91\u4e0a\u662f\u4e0d\u53ca\u9884\u671f\u7684\u3002\u8fd9\u79cd\u8981\u6709\u597d\u7684\u673a\u5236\u4fdd\u8bc1\u53ca\u65f6\u66f4\u65b0\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u662f\u7cfb\u7edf\u66f4\u4e0a\u4e00\u5c42\u7684\u673a\u5236\uff0c\u5728\u7cfb\u7edf\u5c42\uff0c\u6211\u4eec\u9996\u5148\u5e94\u8be5\u4fdd\u8bc1\u5e73\u53f0\u8fd0\u884c\u7684\u7a33\u5b9a\u6027\u3002")),(0,n.kt)("h4",{id:"2244-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.4.4 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("h3",{id:"225-\u7ec4\u4ef6\u8bed\u4e49\u5316"},"2.2.5 \u7ec4\u4ef6\u8bed\u4e49\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u673a\u5236\u5e26\u6765\u7684\u6700\u5927\u4ef7\u503c\uff0c\u662f\u5b83\u6d88\u9664\u4e86\u6a21\u5757\u4e4b\u95f4\u7684\u663e\u793a\u8c03\u7528\u53c2\u6570\u4f20\u9012\uff0c\u4f7f\u5f97\u4e00\u4e2a\u7ec4\u4ef6\u9000\u5316\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u800c\u9690\u85cf\u4e86\u4f20\u7edf\u7f16\u7a0b\u4e2d\u8981\u4f7f\u529f\u80fd\u8fd0\u884c\u8d77\u6765\u7684\u53c2\u6570\u4f20\u9012\uff0c\u56e0\u4e3a\u8fd9\u5c31\u9700\u8981\u53d8\u91cf\u7684\u58f0\u660e\u548c\u521d\u59cb\u5316\uff0c\u800c\u53d8\u91cf\u7684\u5b9a\u4e49\u6709\u6d89\u53ca\u7c7b\u578b\u7cfb\u7edf\u3002\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u5bfc\u81f4\u5bf9\u7f16\u7a0b\u7684\u5b66\u4e60\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u62bd\u8c61\u4e3a\u4e00\u4e2a\u529f\u80fd\uff0c\u5b83\u5c31\u53ef\u4ee5\u8bed\u4e49\u5316\uff0c\u4e00\u4e2a\u529f\u80fd\u7528\u4e00\u4e2a\u8bed\u4e49\u8868\u793a\uff0c\u800c\u8bed\u4e49\u662f\u6240\u6709\u4eba\u53ef\u4ee5\u7406\u89e3\u7684\u3002\u4e00\u65e6\u7528\u6237\u9009\u62e9\u4e00\u4e2a\u8bed\u4e49\uff0c\u5bf9\u5e94\u7684\u529f\u80fd\u53ca\u5176\u8ddf\u5176\u4ed6\u529f\u80fd\u4e4b\u95f4\u7684\u4ea4\u4e92\u5c31\u4f1a\u81ea\u52a8\u9002\u914d\u548c\u5de5\u4f5c\uff0c\u7528\u6237\u6700\u591a\u9700\u8981\u8bbe\u7f6e\u4e00\u4e9b\u7279\u5b9a\u7684\u5c5e\u6027\u503c\u3002"),(0,n.kt)("h4",{id:"2251-\u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"},"2.2.5.1 \u8bed\u4e49\u5316\u4e0e\u53ef\u89c6\u5316"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u53ca\u5176\u6e38\u620fUpdate\u673a\u5236\uff0c\u8054\u5408\u8d77\u6765\u89e3\u51b3\u4e86\u4e24\u4e2a\u51fd\u6570\u4e4b\u95f4\u53c2\u6570\u9690\u5f0f\u4f20\u9012\u7684\u95ee\u9898\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u663e\u5f0f\u6307\u5b9a\u4e24\u4e2a\u6a21\u5757\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u65e2\u7b80\u5316\u4e86\u903b\u8f91\u5f00\u53d1\uff0c\u53c8\u4f7f\u5f97\u51fd\u6570\u6216\u8005\u4ee3\u7801\u529f\u80fd\u7684\u8bed\u4e49\u5316\u6210\u4e3a\u53ef\u80fd"),(0,n.kt)("p",null,"\u8bed\u4e49\u5316\u4ee5\u540e\u7684\u7a0b\u5e8f\uff0c\u5f62\u6210\u53ef\u4ee5\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u7684\u7ed3\u6784\uff0c\u6709\u4e86\u8fd9\u4e2a\u57fa\u7840\uff0c\u518d\u7ed3\u5408\u81ea\u7136\u8bed\u8a00\u4eba\u5de5\u667a\u80fd\u548c\u8bed\u97f3\u65b9\u9762\u7684\u8fdb\u5c55\uff0c\u53ef\u4ee5\u505a\u5230\u6700\u7b80\u5316\u7684\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u7136\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u5316\u8bed\u8a00")),(0,n.kt)("p",null,"\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u673a\u5236\uff0c\u867d\u7136\u81ea\u7136\u8bed\u8a00\u4e2d\u672c\u8eab\u4e5f\u662f\u6709\u53e5\u5b50\u8bed\u6cd5\u7ed3\u6784\u7684\uff0c\u4f46\u662f\u81ea\u7136\u8bed\u8a00\u672c\u8eab\u5e76\u6ca1\u6709\u7f16\u7a0b\u8bed\u8a00\u90a3\u4e48\u9ad8\u5ea6\u7ed3\u6784\u5316\uff0c\u4f8b\u5982\u5373\u4f7f\u5305\u542b\u8bed\u6cd5\u9519\u8bef\uff0c\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4ea4\u6d41\u4e5f\u53ef\u80fd\u56e0\u4e3a\u76f8\u540c\u7684\u7ecf\u5386\u3001\u77e5\u8bc6\u7b49\u539f\u56e0\u5bf9\u5176\u8fdb\u884c\u7ea0\u9519\uff0c\u4ece\u800c\u5ffd\u7565\u9519\u8bef\u7684\u8bed\u6cd5\uff0c\u7136\u800c\u673a\u5668\u6267\u884c\u7684\u7ed3\u6784\u5316\u8bed\u8a00\u4e5f\u4e0d\u540c\uff0c\u9664\u975e\u662f\u57fa\u4e8eAI\u8fdb\u884c\u5b66\u4e60\uff0c\u4f46\u662f\u90a3\u6837\u53c8\u9700\u8981\u5927\u91cf\u7684\u6570\u636e\u5b66\u4e60"),(0,n.kt)("p",null,"\u53ef\u89c6\u5316\u56fe\u901a\u5e38\u7531\u4e00\u4e9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u548c"),(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u4e4b\u95f4\u7684\u8fde\u63a5\u5173\u7cfb")),(0,n.kt)("p",null,"\u6765\u8868\u793a\uff0c\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u6d41\u7a0b\u7684\u529f\u80fd\uff0c\u800c\u8fde\u63a5\u5173\u7cfb\u4e0d\u4ec5\u8868\u793a\u4e86\u67d0\u79cd\u6d41\u7a0b\u987a\u5e8f\uff0c\u4ed6\u8fd8\u8868\u793a\u4e86\u6d41\u7a0b\u4e4b\u95f4\u9700\u8981\u9075\u5faa\u7684\u53c2\u6570\u7ea6\u5b9a"),(0,n.kt)("p",null,"\u65e2\u7136\u7b26\u53f7\u8868\u89e3\u51b3\u4e86\u53c2\u6570\u4f20\u9012\uff0c\u90a3\u4e48\u5269\u4e0b\u53ea\u9700\u8981\u663e\u5f0f\u58f0\u660e\u8282\u70b9\u7684\u529f\u80fd\u5b9a\u4e49\uff0c\u5219\u6574\u4e2a\u56fe\u53ef\u4ee5\u6784\u6210\u7ed3\u6784\u5316\u7684\u63cf\u8ff0\uff0c\u540c\u65f6\u4e5f\u662f\u53ef\u89c6\u5316\u7684"),(0,n.kt)("p",null,"\u7531\u4e8e\u81ea\u7136\u8bed\u8a00\u4e0d\u5177\u5907\u7cbe\u786e\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5b9a\u4e49\u660e\u786e\u7684\u8282\u70b9\u7ed3\u6784"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ed3\u6784\u6700\u597d\u662f\u4e00\u79cd\u63cf\u8ff0\u8bed\u8a00\uff0c\u4ed6\u5177\u6709\u57fa\u7840\u7684\u8bed\u6cd5\u7ed3\u6784\uff0c\u800c\u57fa\u4e8e\u8fd9\u4e9b\u7ed3\u6784\u8fdb\u884c\u6269\u5c55\u53ef\u4ee5\u6784\u5efa\u5177\u4f53\u3001\u590d\u6742\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u6240\u8c13\u8bed\u8a00\u7ed3\u6784\uff0c\u5373\u5305\u62ec\u5b83\u7684\u53c2\u6570\uff08\u8fde\u63a5\u5c5e\u6027\uff09\uff0c\u5b83\u7684\u529f\u80fd\u5c5e\u6027\u90fd\u662f\u660e\u786e\u7684"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u53ea\u662f\u4efb\u610f\u5b9a\u4e49\u4e00\u4e9b\u6ca1\u6709\u8054\u7cfb\u7684\u57fa\u7c7b\uff0c\u5219\u65e0\u52a9\u4e8e\u6784\u5efa\u6709\u4ef7\u503c\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u56e0\u4e3a\u5c3d\u7ba1\u4ed6\u53ef\u4ee5\u8fde\u63a5\u4e00\u4e9b\u8282\u70b9\u6784\u6210\u56fe\uff0c\u4f46\u662f\u8fd9\u4e2a\u56fe\u7684\u6d41\u7a0b\u548c\u610f\u4e49\u662f\u5b8c\u5168\u6ca1\u6709\u610f\u4e49\u7684\uff0c\u6ca1\u6709\u4ef7\u503c\u7684"),(0,n.kt)("h4",{id:"2252-\u80fd\u5426\u81ea\u52a8\u751f\u6210machinations"},"2.2.5.2 \u80fd\u5426\u81ea\u52a8\u751f\u6210Machinations"),(0,n.kt)("p",null,"Machinations \u63d0\u4f9b\u4e86\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\uff0c\u4ed6\u80fd\u6784\u5efa\u8d77\u6613\u4e8e\u7406\u89e3\u5177\u6709\u4e00\u5b9a\u903b\u8f91\u7684\u53ef\u89c6\u5316\u56fe\uff0c\u4f46\u662f\u5b83\u7684\u7ed3\u6784\u662f\u4ee5\u7ecf\u6d4e\u6d41\u52a8\u4e3a\u57fa\u7840\u7684\uff0c\u6709\u4e9b\u903b\u8f91\u4e0d\u4e00\u5b9a\u6709\u660e\u663e\u7684\u7ecf\u6d4e\u56e0\u7d20\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u6269\u5c55\uff0c\u6709\u4e86\u8fd9\u6837\u4e25\u8c28\u7684\u8bed\u8a00\u7ed3\u6784\uff0c\u518d\u628a\u7ec4\u4ef6\u5b9a\u4e49\u4e3a\u8fd9\u6837\u7684\u903b\u8f91\u5355\u5143\u8282\u70b9\uff0c\u5219\u8282\u70b9\u7684\u8bed\u4e49\u5c31\u660e\u786e\u800c\u4e14\u53c8\u610f\u4e49\u4e86\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u53ef\u4ee5\u65b9\u4fbf\u7528\u6237\u6d89\u53caGameplay\u7684\u73a9\u6cd5"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e2aMachinations\u4e2d\u7684\u5143\u7d20\uff0c\u8bbe\u8ba1\u5bf9\u5e94\u7684Component\uff0c\u53ea\u8981\u4ece\u8fd9\u4e9bComponent\u96c6\u6210\u7684\u7ec4\u4ef6\uff0c\u5c31\u81ea\u52a8\u9075\u5faa\u76f8\u5e94\u7684\u529f\u80fd\u6216\u8005\u63a5\u53e3\u9700\u6c42\uff0c\u5c31\u53ef\u4ee5\u81ea\u52a8\u751f\u6210\u8bbe\u8ba1\u7684\u53ef\u89c6\u5316\u56fe\u3002"),(0,n.kt)("video",{src:"resources/New-Intro-Video-Averages-comp.mp4"}),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u53ef\u4ee5\u6839\u636eMachinations\u53cd\u5411\u751f\u6210\u521d\u59cb\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u751a\u81f3\u5982\u679cMachinations\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u6709\u7684\u7ec4\u4ef6\u5c31\u8981\u6c42\u5f00\u53d1\u8005\u8fd9\u6837\u53bb\u505a\uff0c\u8fd9\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u5c31\u66f4\u597d\u63a7\u5236\u903b\u8f91\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u5bf9Machinations\u8fdb\u884c\u6df1\u5165\u5206\u6790\uff0c\u52a0\u4e00\u5b9a\u7684\u6539\u9020\u3002"),(0,n.kt)("h4",{id:"2253-\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"},"2.2.5.3 \u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\uff0c\u5bf9\u73b0\u4ee3\u5de5\u4e1a\u5f88\u591a\u7814\u7a76\u76f4\u89c2\u91cd\u8981\uff0c\u5e76\u4e14\u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6df1\u523b\u90fd\u673a\u5236\u90fd\u6df1\u85cf\u4e8e\u590d\u6742\u7cfb\u7edf\u4e2d\uff0c\u5f80\u5f80\u90a3\u4e9b\u76f4\u89c2\u7b80\u5355\u7684\u7ed3\u6784\u5316\u673a\u5236\u5e76\u4e0d\u8db3\u4ee5\u6d1e\u6089\u8fd9\u4e9b\u7cfb\u7edf\u7684\u539f\u7406\u548c\u5f71\u54cd\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u66f4\u597d\u7684\u7a0b\u5e8f\u673a\u5236\u6765\u652f\u6301\u590d\u6742\u7cfb\u7edf\u7684\u4eff\u771f\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u7531\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u7279\u5f81\uff0c\u73b0\u5728\u8ba1\u7b97\u67b6\u6784\u5e76\u4e0d\u80fd\u5f88\u597d\u7684\u5904\u7406\u8fd9\u7c7b\u4efb\u52a1\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u7528\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u901a\u5e38\u65e0\u6cd5\u7ef4\u62a4\u8fd9\u4e48\u5e9e\u5927\u7684\u7cfb\u7edf\u4ea4\u4e92\u5173\u7cfb\uff0c\u5f88\u96be\u5efa\u6a21"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u4e00\u822c\u90fd\u662f\u5b9e\u65f6\u7cfb\u7edf\uff0c\u5b83\u5e76\u4e0d\u592a\u9002\u7528\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\uff0c\u6240\u4ee5\u73b0\u5728\u5927\u90e8\u5206\u4eff\u771f\u4efb\u52a1\u90fd\u662f\u4f7f\u7528\u6e38\u620f\u5f15\u64ce\u6765\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u590d\u6742\u7cfb\u7edf\u5f80\u5f80\u8fd8\u5305\u542b\u4eba\u7684\u4ea4\u4e92\u5f71\u54cd\uff0c\u662f\u4e00\u4e2a\u4ea4\u4e92\u5f0f\u7cfb\u7edf")),(0,n.kt)("p",null,"\u6240\u4ee5\u76ee\u524d\u5e76\u6ca1\u6709\u5f88\u597d\u7684\u89e3\u51b3\u590d\u6742\u95ee\u9898\u4eff\u771f\u7684\u7a0b\u5e8f\u673a\u5236\u6216\u8005\u7cfb\u7edf\u8f6f\u4ef6\uff0cRealityIS\u6709\u673a\u4f1a\u5728\u8fd9\u65b9\u9762\u63d0\u4f9b\u66f4\u597d\u7684\u57fa\u7840\u67b6\u6784\u548c\u80fd\u529b\u3002"),(0,n.kt)("h3",{id:"226-\u7ec4\u4ef6\u67e5\u8be2"},"2.2.6 \u7ec4\u4ef6\u67e5\u8be2"),(0,n.kt)("p",null,"To read or write data, you must first find the data you want to change. "),(0,n.kt)("p",null,"The main way of processing DOTS data is ECS queries. Iterating over all entities that have a matching set of components, is at the center of the ECS architecture. "),(0,n.kt)("p",null,"To identify which entities a system should process, use an ",(0,n.kt)("a",{parentName:"p",href:"https://docs.unity3d.com/Packages/com.unity.entities@0.14/api/Unity.Entities.EntityQuery.html"},"EntityQuery"),". An entity query searches the existing archetypes for those that have the components that match your requirements. You can specify the following component requirements with a query:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c#"},"var queryDescription = new EntityQueryDesc\n{\n None = new ComponentType[] { typeof(Frozen) },\n All = new ComponentType[]{ typeof(RotationQuaternion),\n ComponentType.ReadOnly() }\n};\nEntityQuery query = GetEntityQuery(queryDescription);\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6309\u7c7b\u578b\u67e5\u8be2\u7ec4\u4ef6\u5bf9\u7528\u6237\u6765\u8bb2\u4e0d\u592a\u597d\u7406\u89e3\uff0c\u5b83\u8ba9\u4f60\u5fc5\u987b\u5f88\u6e05\u695a\u6240\u6709\u5b9e\u4f53\u4e2d\u54ea\u4e9b\u5b9e\u4f53\u5177\u6709\u54ea\u4e9b\u7ec4\u4ef6\u7684\u7ec4\u5408")),(0,n.kt)("p",null,"\u6309\u7c7b\u578b\u67e5\u627e\u4e5f\u9650\u5236\u4e86\u7ec4\u4ef6\u7684\u884c\u4e3a\uff0c\u5b83\u53ea\u8ddf\u7c7b\u578b\u4e00\u81f4\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u4e00\u4e2a\u653b\u51fb\u53ef\u80fd\u53ea\u9488\u5bf9\u67d0\u4e9b\u7c7b\u578b\u7684\u602a\u7269\uff0c\u8fd9\u4e9b\u602a\u7269\u7684\u6570\u636e\u5c5e\u6027\u662f\u76f8\u540c\u7684\uff0c\u5373\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u503c\u7684\u533a\u95f4\u4e0d\u540c\uff0c\u5b83\u4eec\u88ab\u5206\u4e3a\u4e0d\u540c\u7684\u7c7b\u522b\uff0c\u9664\u975e\u4f60\u91cd\u590d\u5b9a\u4e49Component\uff0c\u8fd9\u4e9bComponent\u6709\u76f8\u540c\u7684\u5c5e\u6027\uff0c\u5426\u5219\u4f60\u65e0\u6cd5\u533a\u5206\u5b83\u4eec\uff0c\u5373Component\u5145\u5f53\u4e86\u7c7b\u578b\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5b83\u53ea\u662f\u6570\u636e\uff0c\u4e0d\u80fd\u5b8c\u5168\u5145\u5f53\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u5bf9\u4e8eDOTS\u4e2d\u7684\u67e5\u8be2\uff0c\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u610f\u4e49\u662f\u53d6\u4ee3\u7c7b\u578b\u5f15\u7528\u7684\uff0c\u6240\u4ee5ECS\u4e2dComponent\u7684\u7c7b\u578b\u9700\u8981\u653e\u5230\u7b26\u53f7\u8868\u4e2d\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u7b26\u53f7\u8868\u4e2d\u7684\u540d\u79f0\u540c\u65f6\u4e5f\u8868\u793a\u4e86\u7b26\u53f7\uff0c\u56e0\u6b64\u7b26\u53f7\u8868\u9700\u8981\u662f\u7ed3\u6784\u4f53\uff0c\u50cfshader\u4e2d\u7684\u53d8\u91cf\u4e00\u6837\uff0c\u8fd9\u4e2a\u7ed3\u6784\u4f53\u7684\u540d\u79f0\u6216\u8005\u8fd9\u4e2a\u7ed3\u6784\u4f53\u672c\u8eab\u5c31\u4ee3\u8868\u4e86\u7ec4\u4ef6\u7c7b\u578b\uff1a"),(0,n.kt)("p",null,"\u4f8b\u5982\u7b26\u53f7\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"struct Position{\n float x\n float y\n float z\n}\n")),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e2d\u7684\u5b9a\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 1\n\nnamespace SomeComponent : Component{\n public Global.Position as position\n \n fn update(float dt){\n \n }\n} \n")),(0,n.kt)("p",null,"\u5916\u90e8\u5f15\u7528\u7684\u7ec4\u4ef6\uff0c\u4f7f\u7528query\u4fee\u9970\u7b26\uff0c\u8868\u793a\u8fd9\u4e2a\u53d8\u91cf\u4e0d\u662f\u8be5\u5bf9\u8c61\u81ea\u8eab\u7684\u53d8\u91cf\uff0c\u800c\u662f\u67e5\u8be2\u7ed3\u679c\uff0c\u5982\u679c\u6709\u591a\u91cd\u67e5\u8be2\uff0c\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u8054\u5408\u67e5\u8be2\u7684\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u5148\u4ec5\u8003\u8651\u4f46\u7ec4\u4ef6\u67e5\u8be2\uff0cUnity\u95f4\u63a5\u4f7f\u7528\u4e86\u591a\u79cd\u7ec4\u4ef6\u7684\u67d0\u4e9b\u7279\u5b9a\u7ec4\u5408\u6570\u636e\u6765\u5b9a\u4e49\u4e00\u4e2aSystem\uff0c\u56e0\u4e3a\u5355\u4e2a\u7ec4\u4ef6\u65e0\u6cd5\u786e\u5b9a\u6570\u636e\u7c7b\u578b"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#version 1.0\n#order 2\n\nnamespace AttackComponent:Component{\n query Global.Position[] as positions\n query Global.HP[] as hps\n \n public Global.HP as hp\n public Global.Position position\n \n fn update(float dt){\n if input == 'B' {\n for i in positions{\n if(distance(position-positions)<10){\n positions[i].x -= hp\n }\n }\n }\n }\n}\n")),(0,n.kt)("h4",{id:"2261-\u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"},"2.2.6.1 \u7ec4\u4ef6\u7ec4\u5408\u4e0d\u662f\u7406\u60f3\u7684\u67e5\u8be2\u65b9\u6cd5"),(0,n.kt)("p",null,"\u5728Unity DOTS\u4e2d\uff0c\u6309\u7ec4\u4ef6\u7ec4\u5408\u67e5\u8be2\u6709\u4e24\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5927\u7684\u597d\u5904\u662f\u76f4\u63a5\u83b7\u53d6\u6570\u636e\uff0c\u56e0\u4e3aSystem\u9700\u8981\u64cd\u4f5c\u8fd9\u4e9b\u6570\u636e\uff0c\u6240\u4ee5\u76f4\u63a5\u58f0\u660e\u8fd9\u4e9b\u7c7b\u578b\u5c31\u4e0d\u4f1a\u51fa\u9519"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u624d\u662f\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\uff0c\u5c06\u7ec4\u5408\u5b9a\u4e49\u4e3a\u4e00\u79cd\u7279\u5b9a\u7684\u903b\u8f91\u7c7b\u578b")),(0,n.kt)("p",null,"\u76ee\u524d\u770b\u8d77\u6765\u5f62\u6210\u8fd9\u5957\u673a\u5236\u7684\u6838\u5fc3\u539f\u56e0\u662f\u56e0\u4e3a\u524d\u8005\uff1b\u4f46\u662f\u8fd9\u79cd\u7ec4\u5408\u672c\u8d28\u4e0a\u4e0d\u662f\u771f\u6b63\u7684\u67e5\u8be2\u6761\u4ef6\uff0c\u4ed6\u53ef\u80fd\u5bfc\u81f4\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4e00\u4e2aComponent\u80fd\u88ab\u591a\u4e2aSystem\u4f7f\u7528\uff0c\u5c31\u8bf4\u660eComponent\u672c\u8eab\u53ef\u4ee5\u5177\u5907\u591a\u4e2a\u610f\u4e49\uff0c\u4f8b\u5982\u4e24\u4e2a\u4e0d\u540c\u7684System\u6709\u53ef\u80fd\u5b8c\u5168\u6309\u7167\u76f8\u53cd\u7684\u903b\u8f91\u53bb\u5904\u7406\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u5b9a\u4e49\u4e00\u4e2aComponent\u6709\u53ef\u80fd\u521a\u597d\u4e0d\u662f\u67d0\u4e2aSystem\u671f\u671b\u7684\u65b9\u5f0f\uff0c\u7136\u800c\u6700\u7ec8\u5b83\u8fd8\u662f\u88ab\u5f53\u4f5c\u4e86\u67e5\u8be2\u6761\u4ef6\u3002w"),(0,n.kt)("h4",{id:"2262-\u663e\u5f0f\u58f0\u660e"},"2.2.6.2 \u663e\u5f0f\u58f0\u660e"),(0,n.kt)("p",null,"\u8fd8\u662f\u9700\u8981\u67d0\u79cd\u663e\u5f0f\u58f0\u660e\u7684\u7c7b\u578b\uff0c\u54ea\u6015\u662fLayer\u8fd9\u6837"),(0,n.kt)("p",null,"\u611f\u5174\u8da3\u7684\u6570\u636e+TAG\u6570\u7ec4\uff08\u591a\u4e2aTAG\u611f\u5174\u8da3\uff09"),(0,n.kt)("p",null,"\u53ea\u9700\u8981\u58f0\u660e\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\u5c31\u884c"),(0,n.kt)("p",null,"\u7531\u4e8e\u6570\u636e\u65e0\u6cd5\u8868\u8fbe\u7c7b\u578b\uff0c\u6709\u7528\u6237\u624b\u52a8\u8bbe\u5b9a"),(0,n.kt)("p",null,"\u53ef\u4ee5\u50cfUnity\u4e00\u6837\u5b9a\u4e49\u4e00\u4e2aLayer\u5217\u8868\uff0c\u65b9\u4fbf\u7528\u6237\u5bf9\u5bf9\u8c61\u8fdb\u884c\u5f52\u7c7b"),(0,n.kt)("p",null,"Unity\u7684Component \u7ec4\u5408\u67e5\u8be2\u53cd\u800c\u4e0d\u597d\u7406\u89e3\uff0c\u592a\u590d\u6742\uff0c\u9700\u8981\u8bb0\u5fc6\u66f4\u590d\u6742\u7684\u4e1c\u897f\uff0c\u76f8\u6bd4Tag\uff0ctag\u6982\u5ff5\u8db3\u591f\u7b80\u5355"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8981\u80fd\u4efb\u610f\u67e5\u8be2\uff0c\u5c31\u53ef\u4ee5\u6ee1\u8db3\u901a\u7528\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u8868\u6ee1\u8db3\u4efb\u610f\u7ec4\u4ef6\u95f4\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8bed\u4e49\u5316")),(0,n.kt)("h4",{id:"2263-rust-ecs"},"2.2.6.3 RUST ECS"),(0,n.kt)("p",null,'You can use empty structs to help you identify specific entities. These are known as "marker components". Useful with ',(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),"."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Add this to all menu ui entities to help identify them\n#[derive(Component)]\nstruct MainMenuUI;\n\n/// Marker for hostile game units\n#[derive(Component)]\nstruct Enemy;\n\n/// This will be used to identify the main player entity\n#[derive(Component)]\nstruct Player;\n")),(0,n.kt)("h4",{id:"2264-labelslayers"},"2.2.6.4 Labels/Layers"),(0,n.kt)("h3",{id:"227-component--system"},"2.2.7 Component + System"),(0,n.kt)("p",null,"Unity\u5c06Component\u548cSystem\u533a\u5206\u5f00\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\u5c06\u4ee3\u7801\u548c\u6570\u636e\u5206\u5f00\uff0c\u4f7f\u5f97System\u4e2d\u4e0d\u5305\u542b\u4efb\u4f55\u6570\u636e\uff1b\u5373System\u672c\u8eab\u4e5f\u4e0d\u80fd\u6709\u4efb\u4f55\u5b9e\u4f8b\u6570\u636e\uff0c\u56e0\u4e3a\u90a3\u6837\u76f8\u5bf9\u4e8e\u5b83\u9700\u8981\u5904\u7406\u7684Component\u800c\u8a00\uff0c\u5176\u4e2d\u5b58\u5728\u4e86\u201c\u5168\u5c40\u53d8\u91cf\u201d\uff0c\u8fd9\u5f15\u5165\u4e86\u5b9e\u4f53\u95f4\u7684\u76f8\u5173\u6027\uff0c\u8026\u5408\uff0c\u5e76\u4f7f\u5f97\u5f88\u96be\u5b9a\u4e49\u6bcf\u4e2aComponent\u4e4b\u95f4\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e5f\u5e26\u6765\u4e86\u4e0d\u597d\u7684\u540e\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u8005\u9700\u8981\u5206\u522b\u5355\u72ec\u6dfb\u52a0Component\u548cSystem"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4f7f\u7528\u8005\u5fc5\u987b\u5f88\u5c0f\u5fc3\u5904\u7406\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6bd4\u5982\u4f60\u5b9a\u4e49\u4e86Component\uff0c\u4f46\u662f\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u6ca1\u6709\u6dfb\u52a0\u76f8\u5e94\u7684System\uff0c\u5219\u6570\u636e\u53ef\u80fd\u6ca1\u6709\u7528\u5904\uff0c\u8fd9\u4e9b\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u884c\u4e3a\u5b9a\u4e49\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5f15\u5165\u4e86System\uff0c\u4f46\u662f\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u5bf9\u5e94Component\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u5219\u8fd9\u4e9bSystem\u4e5f\u65e0\u6cd5\u53d1\u6325\u4f5c\u7528\u3002")),(0,n.kt)("p",null,"Creation\u540c\u65f6\u89e3\u51b3\u4e86\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0c\u65b9\u6cd5\u662f\u5c06\u4e24\u8005\u878d\u4e3a\u4e00\u4f53\uff0c\u4f46\u662f\u901a\u8fc7\u7f16\u8bd1\u5668\u5c06\u5c5e\u6027\u62bd\u53d6\u4e3aComponent\uff08\u5f53\u7136Unity\u4e5f\u5b58\u5728\u7c7b\u4f3c\u7684\u8f6c\u6362\u673a\u5236\uff09\uff1b\u66f4\u8fdb\u4e00\u6b65\uff0cCreation\u901a\u8fc7public\u3001private\u548cquery\u6807\u5fd7\u7b26\u533a\u5206\u4e86\u516c\u5171\u53d8\u91cf\u3001\u79c1\u6709\u53d8\u91cf\u548c\u5f15\u7528\u53d8\u91cf\uff0c\u4f7f\u903b\u8f91\u66f4\u6e05\u6670\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cCreation\u548cUnity\u5728\u529f\u80fd\u5c42\u9762\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("h4",{id:"2271-\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"},"2.2.7.1 \u7ec4\u4ef6\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u672a\u77e5\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5bf9\u5b9e\u4f53\u6267\u884c\u64cd\u4f5c\uff0c\u6240\u6709\u5f88\u96be\u4fdd\u8bc1\u987a\u5e8f\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u6bd4Unity DOTS\u8981\u590d\u6742\uff0c\u540e\u8005\u7531\u5355\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u6240\u6709\u7ec4\u4ef6\uff0c\u80fd\u591f\u4e25\u683c\u4fdd\u8bc1\u903b\u8f91\u987a\u5e8f\u3002\u4f46\u662fRealityIS\u4e2d\uff0c\u540c\u4e00\u4e2a\u5b9e\u4f53\u53ef\u80fd\u5305\u542b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u987a\u5e8f\uff0c\u53ef\u80fd\u4f1a\u5b8c\u5168\u51b2\u7a81\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5141\u8bb8\u7528\u6237\u81ea\u884c\u53bb\u8c03\u6574\u6267\u884c\u987a\u5e8f\uff0c\u4f1a\u4e00\u4e0b\u5b50\u5bf9\u7528\u6237\u63d0\u9ad8\u4e86\u5f88\u591a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u4ed4\u7ec6\u53bb\u5206\u6790\u4e00\u4e0b\u4e00\u822c\u7684\u60c5\u51b5\uff0c\u5982\u679c\u80fd\u591f\u5728\u505a\u4e00\u4e0b\u5047\u8bbe\u6216\u8005\u7ea6\u675f\uff0c\u90a3\u4e48\u95ee\u9898\u5c31\u4f1a\u7b80\u5316\u5f88\u591a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ea\u8bfb\u7684\u7ec4\u4ef6\u90fd\u653e\u5728\u6700\u540e\u6267\u884c\uff0c\u6240\u6709\u5bf9\u53d8\u91cf\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u4e0d\u7528\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"2\uff0c\u6240\u6709\u5bf9\u5c5e\u6027\u53ef\u5199\u5165\u6216\u8005\u53ea\u8bfb\u7684\u7ec4\u4ef6\u4e4b\u95f4\u90fd\u987a\u5e8f\u65e0\u5173")),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u8fdb\u4e00\u6b65\uff0c\u6211\u4eec\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"3\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u5c5e\u6027")),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2a\u95ee\u9898\u5c31\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u88ab\u5904\u7406\uff0c\u865a\u62df\u673a\u52a8\u6001\u8c03\u6574\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5728\u5173\u5fc3\u4efb\u4f55\u987a\u5e8f\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e2d\uff0c\u8fd9\u4e09\u4e2a\u6761\u4ef6\u8fd8\u662f\u6bd4\u8f83\u5bb9\u6613\u6ee1\u8db3\u3002\u5176\u4e2d\u5bf9\u4e8e\u7b2c3\u6761\uff0c\u8fd9\u5c31\u6709\u70b9\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u662f\u4e00\u4e2a \u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ea\u6709\u4e00\u4e2a\u8f93\u51fa\u503c\uff0c\u5e76\u4e14\u6240\u6709\u8f93\u5165\u53c2\u6570\u90fd\u662f\u53ea\u8bfb\u7684\u3002\u5982\u679c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u53ef\u5199\u5165\u7684\u5c5e\u6027\uff0c\u90a3\u4e48\u5c31\u5f88\u5bb9\u6613\u533a\u5206\u51fa\u6240\u6709\u53ea\u8bfb\u548c\u53ef\u5199\u5165\u4e24\u5927\u7c7b\u7ec4\u4ef6\u3002\u5373\u662f\u8bf4\uff0c\u7b2c\u4e09\u4e2a\u5047\u8bbe\u53ef\u4ee5\u628a\u6240\u6709\u7ec4\u4ef6\u5206\u4e3a\u4e24\u7c7b\uff1a\u53ea\u8bfb\u7684\u7ec4\u4ef6\u548c\u53ea\u5199\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5373\u4fbf\u5982\u6b64\uff0c\u8fd8\u662f\u5269\u4e0b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u7ec4\u4ef6\u5bf9\u4e24\u4e2a\u5c5e\u6027\u4ea4\u53c9\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u8bfb\u6216\u8005\u53ea\u5199\u5c5e\u6027\u4e4b\u95f4\u7531\u4f9d\u8d56\u5173\u7cfb")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u5728\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u81ea\u52a8\u6392\u5e8f\u65f6\uff0c\u5c06\u65e0\u6cd5\u63a8\u7b97\u5b9e\u9645\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6709\u4e24\u79cd\u5904\u7406\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u9047\u5230\u51b2\u7a81\u65f6\u4ea4\u7531\u7528\u6237\u6765\u6307\u5b9a\uff0c\u4f46\u662f\u7531\u4e8e\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u5168\u5c40\u7684\uff0c\u800c\u4e0d\u662f\u6839\u636e\u7528\u6237\u8bbe\u7f6e\u6765\u7684\uff0c\u4f8b\u5982\u4e24\u4e2a\u7528\u6237\u53ef\u80fd\u8bbe\u7f6e\u4e86\u76f8\u53cd\u7684\u987a\u5e8f\uff0c\u6240\u4ee5\u8fd9\u79cd\u65b9\u6cd5\u4e0d\u53ef\u53d6\uff0c\u5e76\u4e14\u5b83\u9700\u8981\u7528\u6237\u4ecb\u5165\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u662f\u7531\u5f00\u53d1\u8005\u6765\u89e3\u51b3\u51b2\u7a81")),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u5f00\u53d1\u8005\u662f\u6700\u4e86\u89e3\u903b\u8f91\u7684\uff0c\u800c\u4e14\u5f00\u53d1\u8005\u4e00\u65e6\u89e3\u51b3\u597d\u51b2\u7a81\u5c31\u4e0d\u9700\u8981\u7528\u6237\u5728\u505a\u4e0d\u5fc5\u8981\u5e76\u4e14\u589e\u52a0\u590d\u6742\u5ea6\u7684\u8bbe\u7f6e\u3002\u53ef\u4ee5\u628a\u6240\u6709\u4ee3\u7801\u770b\u6210\u4e00\u4e2a\u6574\u4e2a\uff0c\u5f53\u5f00\u53d1\u8005\u5728\u63d0\u4ea4\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u5e76\u4e0d\u53ea\u662f\u8981\u8003\u8651\u81ea\u5df1\u7684\u4ee3\u7801\u51b2\u7a81\uff0c\u8fd8\u8981\u8003\u8651\u5168\u5c40\u4ee3\u7801\u51b2\u7a81\u3002\u4e24\u4e2a\u5f00\u53d1\u8005\u63d0\u4ea4\u4ee3\u7801\u603b\u662f\u6709\u65f6\u95f4\u5148\u540e\u987a\u5e8f\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u4e8e\u540e\u63d0\u4ea4\u4ee3\u7801\u7684\u4eba\uff0c\u7cfb\u7edf\u629b\u51fa\u6240\u6709\u53ef\u80fd\u4e0e\u4e4b\u51b2\u7a81\u7684\u7ec4\u4ef6\u3002\u6709\u5f00\u53d1\u8005\u901a\u8fc7\u4e86\u89e3\u51b2\u7a81\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u5e76\u6bd4\u8f83\u81ea\u5df1\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u6765\u8bbe\u7f6e\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u4e5f\u4e0d\u662f\u5b8c\u5168\u53ef\u9760\uff0c\u4f8b\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u6839\u672c\u6ca1\u6709\u770b\u5bf9\u65b9\u7ec4\u4ef6\u7684\u529f\u80fd\uff0c\u968f\u4fbf\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u987a\u5e8f\uff0c\u8fd9\u65f6\u5019\u53ef\u80fd\u5bfc\u81f4\u9519\u8bef\u903b\u8f91\u3002\u4e00\u79cd\u53ef\u80fd\u7684\u65b9\u6cd5\u662f\uff0c\u5bf9\u8fd9\u4e9b\u6709\u51b2\u7a81\u7684\u7ec4\u4ef6\uff0c\u540e\u9762\u5f00\u53d1\u8005\u7684\u8bbe\u7f6e \u7ed3\u679c\u4f1a\u53d1\u9001\u7ed9\u524d\u9762\u5f00\u53d1\u8005\uff0c\u524d\u9762\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u6267\u884c\u987a\u5e8f\u63d0\u51fa\u5f02\u8bae\u6216\u8005\u540c\u610f\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5206\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5c3d\u91cf\u907f\u514d\u7f16\u5199\u8fd9\u79cd\u5728\u4e00\u5e27\u4e4b\u5185\u6709\u590d\u6742\u4f9d\u8d56\u7684\u7ec4\u4ef6\uff0c\u6bd4\u5982\u5982\u679c\u7ec4\u4ef6\u4e4b\u524d\u90fd\u5b8c\u5168\u6ca1\u6709\u4f9d\u8d56\uff0c\u90a3\u5c31\u4e0d\u4f1a\u5b58\u5728\u8fd9\u4e2a\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\uff0c\u5177\u6709\u8fd9\u79cd\u590d\u6742\u987a\u5e8f\u7684\u7ec4\u4ef6\uff0c\u901a\u5e38\u5bf9\u5e94\u7684\u662f\u4e00\u4e2a\u5f00\u53d1\u8005\u5185\u90e8\u7684\u903b\u8f91\uff0c\u8fd9\u65f6\u5019\u5b83\u81ea\u5df1\u8bbe\u7f6e\u6b63\u786e\u7684\u987a\u5e8f\u5c31\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8fd9\u79cd\u53ef\u80fd\u6027\uff0c\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u6ca1\u6709\u610f\u4e49\uff0c\u53ef\u4ee5\u4e0d\u7528\u7406\u4f1a\uff0c\u7531\u7528\u6237\u81ea\u884c\u53d1\u73b0\u95ee\u9898\u540e\u53cd\u9988\u7ed9\u5f00\u53d1\u8005\u534f\u5546\u5904\u7406")),(0,n.kt)("h4",{id:"2272-change-driven-update"},"2.2.7.2 Change-driven update"),(0,n.kt)("p",null,"\u4e8b\u4ef6\u8868\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u5efa\u7acb\u4e8b\u4ef6\u961f\u5217\uff0c\u5ef6\u8fdf\u5230\u4e00\u8d77\u6267\u884c\uff0c\u6d88\u9664\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5e76\u53d1\uff0c\u540c\u65f6\u80fd\u591f\u505a\u5230\u5e76\u884c\u8ba1\u7b97\uff0c\u56e0\u4e3a\u4e00\u4e9b\u76f8\u540c\u7c7b\u578b\u7684\u4e8b\u4ef6\u53ef\u80fd\u5bf9\u5e94\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5373\u4f7f\u540c\u4e00\u4e2a\u4e8b\u4ef6\u5bf9\u5e94\u4e0d\u540c\u7684\u7ec4\u4ef6\uff0c\u901a\u8fc7\u6309\u7ec4\u4ef6\u7c7b\u578b\u6392\u5e8f\u548c\u7ec4\u7ec7\uff0c\u4e5f\u80fd\u5b66\u5230\u6309\u987a\u5e8f\u5e76\u884c\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4e00\u90e8\u5206\u7531\u72b6\u6001\u53d8\u5316\u5bfc\u81f4\u7684\u5206\u652f\u8f6c\u5316\u4e3a\u4e8b\u4ef6\u5e8f\u5217\uff0c\u5f53\u7136\u5b9e\u9645\u5904\u7406\u673a\u5236\u53ef\u80fd\u4e0d\u4e00\u6837")),(0,n.kt)("p",null,"\u6570\u636e\u5e93\u91cd\u7ec4\u6d89\u53ca\u66f4\u65b0\u7b26\u53f7\u8868\u3001\u4ee5\u53caTable\u7684\u6570\u636e\u91cd\u65b0\u8c03\u6574\uff0c\u7b26\u53f7\u8868\u548cTable API\u4e00\u6837\uff0c\u9700\u8981\u7b26\u53f7\u8868API"),(0,n.kt)("h4",{id:"2273-ecs"},"2.2.7.3 ECS"),(0,n.kt)("p",null,"Unity\u4e2dECS\u7684system \u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u8ddfComponent \u4e4b\u95f4\u7684\u8054\u7cfb\u7531System \u5bf9Entity\u7684Query\u5b9a\u4e49\uff0c\u4f46\u662f\u5e26\u6765\u7684\u7ed3\u679c\u662f\u7cfb\u7edf\u521d\u59cb\u5316\u7684\u65f6\u5019\u9700\u8981\u72ec\u7acb\u5b8c\u6210\u4e24\u4e2a\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bbe\u7f6e\u6bcf\u4e2aEntity\u7684Component "),(0,n.kt)("li",{parentName:"ul"},"\u5b9e\u4f8b\u5316\u6240\u6709\u7cfb\u7edf\u4f1a\u4f7f\u7528\u7684System ")),(0,n.kt)("p",null,"\u8fd9\u79cd\u5f31\u5173\u7cfb\u7684\u4e00\u4e2a\u53ef\u80fd\u7684\u7ed3\u679c\u662f\u6709\u4e9bSystem \u53ef\u80fd\u67e5\u8be2\u4e0d\u5230\u4efb\u4f55\u5177\u6709\u611f\u5174\u8da3\u7684Component \uff0c\u800c\u4e14\u7cfb\u7edf\u6ca1\u6cd5\u81ea\u52a8\u8ba1\u7b97\uff0c\u53ea\u80fd\u7531\u5f00\u53d1\u8005\u624b\u52a8\u52a0\u8f7d"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u8fd9\u79cdSystem \u5bf9Component \u7c7b\u578b\u7684\u786e\u5b9a\u6027\u5f15\u7528\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u5f88\u96be\u52a8\u6001\u6784\u5efa\u65b0\u7684\u573a\u666f"),(0,n.kt)("p",null,"\u800c\u4e14\u5173\u952e\u662f\u666e\u901a\u7528\u6237\u5f88\u96be\u53bb\u7406\u89e3\u4e0a\u8ff0\u4e24\u4e2a\u64cd\u4f5c\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u7ed9\u4e00\u4e2aEntity \u6dfb\u52a0\u4e86\u67d0\u4e2aComponent \uff0c\u4f46\u662f\u4ed6\u5f88\u96be\u6bd4\u8f83\u660e\u786e\u5730\u8981\u53bb\u518d\u6dfb\u52a0\u54ea\u4e9bSystem \uff0c\u8fd9\u53ef\u80fd\u9700\u8981\u7c7b\u4f3c\u4e8e\u7ed9\u4e00\u4e2a\u5bf9\u5e94\u8868\uff0c\u800c\u8fd9\u79cd\u5bf9\u5e94\u5173\u7cfb\u53ef\u80fd\u6709\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u7528\u6237\u6309\u7167System \u7684\u529f\u80fd\u63cf\u8ff0\u6dfb\u52a0\u4e86\u67d0\u4e2aSystem \uff0c\u4ed6\u53c8\u53ef\u80fd\u5fd8\u4e86\u8981\u7ed9\u4e00\u4e9bEntity \u6dfb\u52a0\u5bf9\u5e94\u7684Component \uff0c\u7a0b\u5e8f\u6ca1\u529e\u6cd5\u68c0\u67e5\u8fd9\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u66f4\u4e25\u91cd\u7684\uff0cSystem \u7684\u5b9a\u4e49\u548c\u5f00\u53d1\u5fc5\u987b\u4e86\u89e3Component \u7684\u5b9a\u4e49\uff0c\u8fd9\u5c31\u56de\u5230\u4ee5\u524d\u7684\u95ee\u9898\uff1aComponent \u9700\u8981\u534f\u8bae\uff0c\u8fd9\u5f88\u590d\u6742")),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0aSystem \u548cComponent \u662f\u4e25\u683c\u76f8\u5173\u7684\uff0c\u4ed6\u4eec\u5206\u5f00\u6ca1\u6709\u610f\u4e49\uff0c\u5728OOP\u4e2d\u5b83\u4eec\u5c31\u662f\u5b9a\u4e49\u5728\u4e00\u8d77\u7684\uff0c\u5728\u4e00\u8d77\u53ef\u4ee5\u907f\u514d\u9700\u8981\u505a\u4e24\u4e2a\u72ec\u7acb\u770b\u8d77\u6765\u4e0d\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u4f46\u5b9e\u9645\u4e0a\u662f\u76f8\u5173\u7684"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u548c\u5728\u4e00\u8d77\uff0c\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u4e2a\u65b0\u7684\u7406\u89e3\u4e0a\u7684\u95ee\u9898\uff1a"),(0,n.kt)("p",null,"System \u5168\u5c40\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u4f46\u662f\u968f\u7740Component \u4e00\u8d77\u52a0\u5230\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f7f\u5f97\u770b\u8d77\u6765\u6bcf\u4e2aEntity \u5bf9\u4f1a\u6267\u884c\u8fd9\u4e2a\u65b9\u6cd5"),(0,n.kt)("p",null,"\u4f46\u8fd9\u95ee\u9898\u662f\u5426\u4e5f\u4e0d\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5185\u90e8\u7ec4\u4ef6\uff0c\u4ed6\u672c\u6765\u4e5f\u662f\u9700\u8981\u6bcf\u4e2a\u5bf9\u8c61\u6267\u884c\u4e00\u6b21\uff0c\u5728ECS\u4e2d\u53ea\u662f\u6211\u4eec\u5f3a\u8c03\u5e76\u884c\uff0c\u5176\u4e2d\u4e00\u4efd\u4ee3\u7801\u5bf9\u591a\u4e2a\u6570\u636e\u6267\u884c\uff0c\u800c\u9690\u85cf\u4e86System \u5176\u5b9e\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u6267\u884c\u7684\u611f\u89c9\uff0c\u4f46\u662f\u5728\u5185\u90e8\u5176\u5b9e\u662f\u5faa\u73af\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u8981\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7279\u5b9a\u5b9e\u4f53\u904d\u5386\u5176\u4ed6\u5b9e\u4f53\uff0c\u4ed6\u5176\u5b9e\u4e5f\u662f\u90a3\u4e2a\u5b9e\u4f53\u90fd\u4f1a\u6267\u884c\uff0c\u6bd4\u5982\u4e00\u4e2a\u5854\u9632\u6e38\u620f\uff0c\u90a3\u4e2a\u70ae\u5854\u90fd\u8981\u904d\u5386\u884c\u8d70\u7684\u602a\u7269\uff0c\u770b\u770b\u662f\u5426\u5728\u8303\u56f4\u5185\uff0c\u5982\u679c\u5728\u8303\u56f4\u5185\u5c31\u5bf9\u5176\u9020\u6210\u4f24\u5bb3"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u5168\u5c40\u7684\uff0c\u90a3\u5c31\u66f4\u597d\u7406\u89e3\uff0c\u89e3\u91ca\u5668\u4fdd\u8bc1\u5168\u5c40\u53ea\u6709\u4e00\u4e2a\uff0c\u90a3\u4e48\u5c31\u662f\u8be5\u5b9e\u4f53\u6267\u884c\u4e86\u4e00\u6b21")),(0,n.kt)("p",null,"\u5230\u8fd9\u91cc\u4e3b\u8981\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5bf9\u591a\u4e2a\u5b9e\u4f53\u7684\u904d\u5386\u5f80\u5f80\u5e26\u6709\u4e00\u4e2a\u6761\u4ef6\u5f62\u6210\u5206\u652f\uff0c\u5e76\u4e14\u90a3\u4e2a\u5e76\u884c\u7684\u7ec4\u4ef6A\u5185\u90e8\u90fd\u5728\u5355\u72ec\u8bbf\u95ee\u6240\u6709\u5b9e\u4f53\uff0c\u53c8\u53ef\u80fd\u9020\u6210\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1\u51b2\u7a81\uff0c\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u8bbf\u95ee\u540c\u4e00\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u5c40\u90e8\u6027\u7834\u574f\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5206\u522b\u8bbf\u95ee\u4e0d\u540c\u7684\u6570\u636e")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u95ee\u9898\uff0c\u89e3\u91ca\u5668\u8981\u628a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u7684\u6267\u884c\u8f6c\u6362\u4e3a\u4e00\u4e2a\u4e00\u4e2a\u7ec4\u4ef6A\u987a\u5e8f\u6267\u884c\uff0c\u5728\u6bcf\u4e2a\u987a\u5e8f\u6267\u884c\u7684\u7ec4\u4ef6\u5185\u5bf9\u611f\u5174\u8da3\u7684\u6570\u7ec4\u8fdb\u884c\u5e76\u53d1\u8ba1\u7b97"),(0,n.kt)("p",null,"\u6216\u8005\u66f4\u597d\u7684\u65b9\u6848\uff0c\u5bf9\u6240\u6709\u611f\u5174\u8da3\u7684\u5b9e\u4f53\u6570\u7ec4\uff0c\u5e76\u53d1\u5730\u5b89\u987a\u6267\u884c\u7ec4\u4ef6A\u5bf9\u5e94\u7684\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u89e3\u91ca\u5668\u7684\u597d\u5904"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u7531\u4e8eSystem \u770b\u8d77\u6765\u53ef\u80fd\u88ab\u6784\u9020\u591a\u4e2a\u5b9e\u4f8b\uff0c\u6240\u4ee5\u9700\u8981\u89e3\u91ca\u5668\u53ea\u6784\u9020\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u8bb0\u4f4f\u54ea\u4e9b\u7ec4\u4ef6\u5f15\u7528\u4e86\u8fd9\u4e2a\u5b9e\u4f8b\uff0c\u4e5f\u5c31\u662f\u5728Unity\u4e2d\u4e3a\u4e86\u652f\u6301Entity\u7684Query\uff0c\u4ed6\u4e5f\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u6570\u636e\u5e93\u6765\u8bb0\u5f55\u8fd9\u4e9b\u5f15\u7528\u5173\u7cfb\uff0c\u5373\u4f7f\u9488\u5bf9\u7b2c\u4e00\u79cd\u548c\u7b2c\u4e09\u79cd\u7ec4\u4ef6\u4e5f\u662f\u4e00\u6837\u7684"),(0,n.kt)("h4",{id:"2274-ecs\u53c2\u6570"},"2.2.7.4 ECS\u53c2\u6570"),(0,n.kt)("p",null,"\u57fa\u4e8eComponent \u7ec4\u5408\u7684\u65b9\u5f0f\u6539\u53d8\u4e86\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u6a21\u578b\u90fd\u9700\u8981\u53c2\u6570\u4f20\u9012\uff0c\u4e0d\u7ba1\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u7528\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u89c6\u5316\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u58f0\u660e\u5f0f\u7f16\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"HOUDINI \u7a0b\u5e8f\u5316\u7f16\u7a0b")),(0,n.kt)("p",null,"\u4e00\u4e2aSystem \u5904\u7406\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u5206\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u90e8\u5b9a\u4e49\u6570\u636e\uff0c\u5728\u5bf9\u5e94\u7684Component \u4e2d\uff0c\u5185\u90e8\u5b9a\u4e49\u901a\u5e38\u7528\u6765\u4fdd\u5b58\u5e27\u4e0e\u5e27\u4e4b\u95f4\u7684\u5185\u90e8\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5916\u90e8\u5f15\u7528\u6570\u636e\uff0c\u5b9a\u4e49\u4e00\u4e2a\u5168\u5c40\u8f83\u5927\u7684\u516c\u5171\u5c5e\u6027\u540d\u79f0\uff0c\u6bcf\u4e2a\u540d\u79f0\u6709\u7279\u5b9a\u542b\u4e49\uff0c\u4ec5\u6709\u5f15\u7528\u7684\u540d\u79f0\u624d\u4f1a\u52a8\u6001\u7ec4\u5408\u6210\u6240\u6709\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u673a\u5236\u9760\u7f16\u8bd1\u5668\u6765\u5904\u7406\uff0c\u5168\u5c40\u5c5e\u6027\u8868\u4e4b\u95f4\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u7f16\u8bd1\u5668\u81ea\u52a8\u5f15\u5165\uff1b\u5982\u679c\u4e00\u4e2a\u63d2\u4ef6\u5f00\u53d1\u8005\u6216\u8005Creation\u5f00\u53d1\u8005\u7f16\u5199\u7684\u7ec4\u4ef6\u9700\u8981\u8de8\u7cfb\u7edf\u5f15\u7528\uff0c\u9700\u8981\u5b9a\u4e49\u79c1\u6709\u540d\u79f0\u5217\u8868")),(0,n.kt)("p",null,"Global Name "),(0,n.kt)("p",null,"Private Name"),(0,n.kt)("p",null,"\u8fd9\u6837\u4e00\u6765\uff0cTable Engine \u6240\u505a\u7684\u5927\u90e8\u5206\u64cd\u4f5c\u5c31\u662f\u8fdb\u884c\u6570\u7ec4\u7684\u751f\u6210\u3001\u521d\u59cb\u5316\u3001\u590d\u5236\u3001\u6392\u5e8f\u3001\u4fee\u6539\u3001SOA\u7b49\uff0c\u8fd9\u90e8\u5206\u901a\u8fc7\u539f\u751f\u7684\u9ad8\u6548\u5b9e\u73b0\uff0c\u901a\u5e38Table\u662f\u52a8\u6001\u751f\u6210\u7684\uff0c\u4e0d\u77e5\u9053\u7ef4\u5ea6\u548c\u957f\u5ea6\u7b49\u4fe1\u606f\uff0c\u8fd9\u5c31\u662fTable\u8981\u505a\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"Global Name\u4e2d\u7684\u6bcf\u4e2a\u5c5e\u6027\u540d\u79f0\u90fd\u662f\u5177\u6709\u8bed\u4e49\u7684\uff0c\u76f8\u5f53\u4e8e\u5bbe\u8bed\uff0c\u800c\u6bcf\u4e2aSystem\u5f15\u7528\u7684Name\u90fd\u53ef\u4ee5\u8ffd\u8e2a\uff0c\u56e0\u6b64\u53ef\u4ee5\u5f52\u7eb3\u51faSystem\u5927\u81f4\u7684\u8bed\u4e49\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,"\u5728\u4ec0\u4e48\u6761\u4ef6\u4e0b\u505a\u4ec0\u4e48\u4e8b\u60c5\uff0c\u6761\u4ef6\u901a\u5e38\u662fGlobal Name\u4e2d\u67d0\u4e2a\u5c5e\u6027\u7684\u503c"),(0,n.kt)("p",null,"\u6761\u4ef6 \u4e3b\u8bed \u8c13\u8bed\u52a8\u8bcd \u5bbe\u8bed "),(0,n.kt)("p",null,"\u5982\u679c$NAME<5 System \u7531System\u5f00\u53d1\u8005\u586b\u5199\uff0c\u53ef\u4ee5\u591a\u4e2a Global Name"),(0,n.kt)("p",null,"\u6570\u636e\u5f88\u5c11\u662f\u53ea\u6709\u4e00\u4e2aSystem \u5355\u72ec\u6d88\u8d39\uff0c\u901a\u5e38\u662f\u591a\u4e2aSystem \u4f1a\u5171\u4eab\u4e00\u4e9bcomponent \u6570\u636e\uff0c\u4f8b\u5982\u7269\u7406\u5f15\u64ce\u7ec4\u4ef6\u3001\u52a8\u753b\u7cfb\u7edf\u6216\u5176\u4ed6\u7ec4\u4ef6\u4f1a\u4fee\u6539\u4f4d\u7f6e\uff0c\u800c\u6e32\u67d3\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u8fd9\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u6e32\u67d3"),(0,n.kt)("p",null,"\u4e00\u79cd\u5e38\u7528\u7684\u6a21\u5f0f\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6216\u591a\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u8bfb\u5199"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u8fdb\u884c\u6d88\u8d39\uff0c\u901a\u5e38\u8868\u73b0\u4e3a\u53ea\u8bfb\uff0c\u5e76\u4e14\u4f7f\u7528\u76ee\u7684\u901a\u5e38\u662f\u4e3a\u4e86\u7ed9\u7528\u6237\u53cd\u9988\uff0c\u6216\u8005\u5199\u5165\u5230\u7cfb\u7edf\u6216\u8005\u8fdb\u884c\u6570\u636e\u5b58\u6863")),(0,n.kt)("p",null,"\u7531\u4e8e\u591a\u4e2a\u7ec4\u4ef6\u4f1a\u8bbf\u95ee\u6570\u636e\uff0c\u56e0\u6b64\u4e3a\u4e86\u907f\u514d\u6570\u636e\u91cd\u590d\u5b9a\u4e49\uff0c\u6709\u5fc5\u8981\u5b9a\u4e49\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u6807\u51c6\u6570\u636e\u548c\u5bf9\u5e94\u5c5e\u6027\u540d\u79f0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7cfb\u7edf\u901a\u8fc7\u5f15\u7528\u4f7f\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7cfb\u7edf\u4ec5\u4f7f\u7528\u90e8\u5206\u6570\u636e\u5c5e\u6027\uff0c\u901a\u8fc7\u663e\u793a\u58f0\u660e\u5f15\u7528")),(0,n.kt)("h4",{id:"2275-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"},"2.2.7.5 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1"),(0,n.kt)("p",null,"\u4e24\u79cd\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e8b\u4ef6\uff0c\u53c2\u89c12.2.7.2\u8282\uff0c\u672c\u8d28\u4e0a\u662f\u72b6\u6001\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u8c03\u7528\uff0c\u5c31\u662f\u6b63\u5e38\u65b9\u6cd5")),(0,n.kt)("h4",{id:"2276-\u5355\u4f8b\u7ec4\u4ef6"},"2.2.7.6 \u5355\u4f8b\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u6709\u4e00\u7c7b\u7ec4\u4ef6\uff0c\u53ea\u53ef\u4ee5\u6dfb\u52a0\u5230Root\u5bf9\u8c61\u4e0a\uff0c\u5b83\u4e0d\u53ef\u4ee5\u88ab\u6dfb\u52a0\u5230\u4efb\u4f55\u81ea\u5b9a\u4e49\u5b9e\u4f53\u5bf9\u8c61\u4e0a\u3002\u8fd9\u53ef\u4ee5\u7528\u6765\u5904\u7406\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\u3002"),(0,n.kt)("h3",{id:"228-\u6d88\u606f\u901a\u4fe1"},"2.2.8 \u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,"\u7528\u6237\u95f4\u901a\u4fe1\u7684\u60c5\u51b5\u6216\u7c7b\u578b\u6709\u51e0\u4e0b\u51e0\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u548c\u611f\u77e5\uff0c\u8fd9\u662f\u6700\u57fa\u672c\u6743\u9650\uff0c\u8ba9\u522b\u4eba\u53ef\u4ee5\u4e86\u89e3\u4e00\u4e9b\u4f60\u7684\u5c5e\u6027\uff0c\u72b6\u6001 \uff0c\u751a\u81f3\u6027\u683c\uff0c\u4ee5\u53ca\u53ef\u4ee5\u600e\u6837\u4e0e\u4f60\u8fdb\u884c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\uff0c\u6240\u6709\u7528\u6237\u4e4b\u95f4\u7684\u6d89\u53ca\u4fee\u6539\u7684\u64cd\u4f5c\u90fd\u662f\u4e00\u79cd\u4ea4\u6613\uff0c\u4f60\u5fc5\u987b\u6d88\u8017\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90\uff0c\u53e6\u4e00\u65b9\u83b7\u5f97\u67d0\u79cd\u7c7b\u578b\u7684\u8d44\u6e90")),(0,n.kt)("p",null,"\u6682\u65f6\u4e0d\u5f00\u653e\u90a3\u79cd\u4f1a\u5bf9\u5176\u4ed6\u4eba\u9020\u6210\u7834\u574f\u6027\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u653b\u51fb\u522b\u4eba\uff0c\u4e5f\u5c31\u662fReality World\u6ca1\u6709\u66b4\u529b\uff0c\u6ca1\u6709\u574f\u4eba\uff0c\u6ca1\u6709\u7834\u574f\u3002"),(0,n.kt)("p",null,"\u4f46\u4f60\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7ecf\u9a8c\u4e0d\u5584\u800c\u7834\u4ea7\uff0c\u4f8b\u5982\u5730\u76ae\u662f\u9700\u8981\u79df\u91d1\u7684\uff0c\u56e0\u6b64\u4f60\u5fc5\u987b\u8d5a\u94b1\uff0c\u5426\u5219\u4f60\u5c31\u6ca1\u6709\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6700\u597d\u7684\u673a\u5236\u662f\u4f60\u7684\u521b\u9020\u529b\u8d8a\u5f3a\uff0c\u4ed8\u51fa\u7684\u65f6\u95f4\u8d8a\u591a\uff0c\u6536\u5165\u8d8a\u9ad8\uff0c\u76f8\u6bd4\u4f20\u7edf\u7684\u6a21\u62df\u7ecf\u8425\u6e38\u620f\u4e3b\u8981 \u4f9d\u8d56\u4e8e\u65f6\u95f4\uff0c\u8fd9\u91cc\u6211\u4eec\u66f4\u5f3a\u8c03\u521b\u9020\u529b\uff0c\u5176\u5b9e\u4e5f\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u80fd\u529b\u3002"),(0,n.kt)("h4",{id:"2281-\u7cfb\u7edf\u673a\u5236"},"2.2.8.1 \u7cfb\u7edf\u673a\u5236"),(0,n.kt)("p",null,"\u4f46\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e9b\u5168\u5c40\u884c\u4e3a\uff0c\u4f8b\u5982\u5929\u6c14\u5bf9\u5168\u4f53\u57ce\u5e02\u4eba\u5458\u7684 \u5f71\u54cd \uff0c\u4f8b\u5982\u653f\u5e9c\u7684\u653f\u7b56\u7b49\uff0c\u8fd9\u4e9b\u540e\u7eed\u518d\u8003\u8651\u3002\u65e9\u671f\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u4ea4\u6613\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6d88\u606f\u901a\u4fe1\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8eID"),"\uff1a\u5728\u7ec4\u4ef6\u5185\u4fdd\u5b58\u7ec4\u4ef6ID\uff0c\u7136\u540e\u76f4\u63a5\u53d1\u9001\u53ea\u7279\u5b9a\u7684\u4e00\u4e2a\u6216\u591a\u4e2aID\uff0c\u5c31\u50cfErlang\u4e2d\u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u57fa\u4e8e\u7c7b\u578b"),"\uff1a\u4f7f\u7528\u7c7b\u578b+UserID\u8fdb\u884c\u5224\u65ad")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u673a\u5236\u5176\u5b9e\u7c7b\u4f3c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u7684\u673a\u5236\uff1a\u9996\u5148\u4f60\u9700\u8981\u53d6\u5f97\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u7136\u540e\u4f60\u5c31\u53ef\u4ee5\u5411\u5176\u53d1\u9001\u6d88\u606f\uff08\u8c03\u7528\u51fd\u6570\uff09\uff0c\u5f53\u7136Erlang\u4f7f\u7528Pid\u8026\u5408\u5ea6\u66f4\u4f4e \u4e00\u4e9b\u3002\u4f46\u8026\u5408\u4ecd\u7136\u662f\u5b58\u5728\u7684\uff0c\u4f8b\u5982\u5bf9\u65b9\u51fd\u6570\u7b7e\u540d\u4fee\u6539\u4e86\uff0c\u6216\u8005\u751a\u81f3\u5220\u9664\u4e0d\u5b58\u5728\u4e86\uff0c\u6216\u8005PID\u88ab\u4fee\u6539\u4e86\uff0c\u90fd\u662f\u53ef\u80fd\u5f15\u8d77\u95ee\u9898\u7684\uff0c\u7a0b\u5e8f\u5f00\u53d1\u8005\u9700\u8981\u53bb\u5c0f\u5fc3\u5730\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\u548c\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"RealityIS\u91c7\u7528\u7684\u662f\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u7c7b\u578b\u7684\u673a\u5236\u76f8\u5bf9\u4e8e\u57fa\u4e8eID\u7684\u673a\u5236\u4f1a\u5f15\u5165\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff0c\u5373 N:N\u7684\u5173\u7cfb\uff0c\u57fa\u4e8eID\u7684\u673a\u5236\u672c\u8d28\u4e0a\u662f1:1\u7684\u5173\u7cfb\uff0c\u51761:N\u7684\u5173\u7cfb\u4e5f\u662f\u6309\u987a\u5e8f\u4e00\u4e2a\u4e00\u4e2a\u53d1\u9001\u7684\uff0c\u8fd9\u4e9b\u53d1\u9001\u6d88\u606f\u672c\u8eab\u4e5f\u662f\u6309\u987a\u5e8f\u4e32\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4ecb\u7ecd\u4e24\u79cd\u5e38\u89c1\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Unity\u673a\u5236"),"\uff1aUnity\u7684System\u5e76\u4e0d\u662f\u5355\u4e2a\u7ec4\u4ef6\u7684\u8ba1\u7b97\uff0c\u5b83\u672c\u8d28\u4e0a\u8981\u6c42\u5f00\u53d1\u8005\u7ef4\u62a4\u96c6\u5408\u64cd\u4f5c\u7ed3\u6784\uff0c\u90a3\u4e48\u5bf9\u4e8eN:N\u7684\u95ee\u9898\uff0c\u5f00\u53d1\u8005\u81ea\u5df1\u7f16\u5199\u4e24\u4e2a\u5d4c\u5957\u7684\u5faa\u73af\u7ed3\u6784\u5c31\u53ef\u4ee5\u4e86\uff0c\u4f46\u95ee\u9898\u662f\u6bcf\u4e00\u4e2aSystem\u90fd\u9700\u8981\u7f16\u5199\u8fd9\u79cd\u5faa\u73af\u63a7\u5236\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Erlang\u673a\u5236"),"\uff1a\u5c3d\u7ba1Erlang\u7684\u53d1\u9001\u6d88\u606f\u662f1:1\u7684\uff0c\u4f46\u662f\u63a5\u53d7\u6d88\u606f\u786e\u662fN:1\u7684\uff0cErlang\u7684\u673a\u5236\u662f\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e00\u4e2a\u90ae\u7bb1\u5b58\u50a8\u4e00\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u5e76\u4e0d\u9700\u8981\u611f\u77e5\u5230\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u8fd8\u662f\u5bf9\u5355\u4e2a\u6d88\u606f\u7684\u5904\u7406\uff0c\u4f46\u8981\u6c42\u5f00\u53d1\u8005\u4e3b\u52a8\u7f16\u5199\u4e00\u4e2a\u83b7\u53d6\u6d88\u606f\u7684\u64cd\u4f5c\uff0c\u7136\u540e\u6bcf\u4e2areceive\u7684\u64cd\u4f5c\u5c31\u4f1a\u88ab\u5206\u914d\u4e00\u4e2a\u6d88\u606f\uff0c\u76f4\u81f3\u90ae\u7bb1\u4e2d\u7684\u6240\u6709\u6d88\u606f\u88ab\u5904\u7406\u5b8c\u6bd5")),(0,n.kt)("p",null,"\u663e\u7136Erlang\u7684\u673a\u5236\u5bf9\u5f00\u53d1\u8005\u66f4\u53cb\u597d\u4e00\u4e9b\uff0c\u4f46\u5bf9\u4e8e\u6d88\u606f\u7684\u53d1\u9001\u65b9\u9762\uff0c\u7531\u4e8e\u57fa\u4e8e\u7c7b\u578b\u7684\u8fc7\u6ee4\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u95f4\u63a5\u591a\u540c\u65f6\u5411\u591a\u4e2a\u7ec4\u4ef6\u53d1\u9001\u6d88\u606f\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u8ba9\u5f00\u53d1\u8005\u7ef4\u62a4\u4e00\u4e2aPID\u5217\u8868\u9010\u4e2a\u9010\u4e2a\u53d1\u9001\uff0c\u56e0\u6b64\u9700\u8981\u8fd0\u884c\u65f6\u5c06\u8fd9\u4e2a\u53d1\u9001\u7684\u8fc7\u7a0b\u5f62\u6210\u4e00\u6b21\u5217\u8868\u64cd\u4f5c\uff0c\u6765\u5b9e\u73b0Unity\u673a\u5236\u4e2d\u7684\u5916\u90e8\u5faa\u73af\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u907f\u514d\u5f15\u5165\u5217\u8868\u64cd\u4f5c\u7684\u6982\u5ff5\uff0c\u800c\u4e13\u6ce8\u4e8e\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d1\u9001\u6d88\u606f\u7684\u903b\u8f91\u662f\u901a\u8fc7\u8bfb\u53d6\u7ec4\u4ef6\u5c5e\u6027\u6765\u5b9e\u73b0\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6d88\u606f\u7684\u903b\u8f91\u5219\u662f\u901a\u8fc7\u5199\u5165\u5c5e\u6027\u6765\u5b9e\u73b0\u7684")),(0,n.kt)("p",null,"\u8fd9\u6837\u5c31\u8981\u6c42\u8bfb\u53d6\u7684\u7ec4\u4ef6\u5c5e\u6027\u4e0d\u80fd\u8d85\u8fc71\u4e2a\uff0c\u5426\u5219\u540c\u65f6\u5904\u7406\u591a\u4e2a\u7ec4\u4ef6\u7684\u6d88\u606f\u5c31\u53d8\u5f97\u4e0d\u53ef\u80fd\uff0c\u9664\u975e\u8fd9\u591a\u4e2a\u5c5e\u6027\u540c\u65f6\u6765\u81ea\u4e8e\u540c\u4e00\u4e2a\u5b9e\u4f53\u3002\u8fd9\u4e5f\u662f\u4e00\u79cd\u8fc7\u6ee4\u7684\u6761\u4ef6\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u80fd\u4e0d\u4e00\u5b9a\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8de8\u5b9e\u4f53\u8981\u6c42\u53ea\u8bfb\u53d6\u4e00\u4e2a\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u4e00\u5b9e\u4f53\u53ef\u4ee5\u8bfb\u53d6\u591a\u4e2a\u5c5e\u6027")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u600e\u6837\uff0c\u53d1\u9001\u8005\u548c\u63a5\u53d7\u8005\u53ea\u80fd\u662f\u4e00\u4e2a\u5b9e\u4f53\u3002\u8bfb\u53d6\u7684\u6240\u6709\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u53d1\u9001\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u800c\u5199\u5165\u7684\u5c5e\u6027\u7ec4\u5408\u6784\u6210\u63a5\u53d7\u8005\u7684\u8fc7\u6ee4\u6761\u4ef6\u3002\u5269\u4e0b\u7684\u95ee\u9898\u5c31\u662fUnity \u4e5f\u9762\u4e34\u7684\u95ee\u9898\uff0c\u5373\u5355\u7eaf\u4f9d\u9760\u7c7b\u578b\u8fc7\u6ee4\u662f\u4e0d\u591f\u7684\uff0c\u9700\u8981\u53e6\u4e00\u4e2a\u5c42\u6b21\u7684\u8fc7\u6ee4\u6761\u4ef6\uff0c\u5c31\u662f\u7528\u6237\u6dfb\u52a0\u7684Type\uff0c\u4f46\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u8003\u8651\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u56e0\u4e3a\u8fd9\u79cd\u7279\u5b9a\u7684\u4e8b\u60c5\u662f\u7531\u4e1a\u52a1\u903b\u8f91\u51b3\u5b9a\u7684\u3002\u5982\u679c\u6709\u5b9a\u4e49\uff0c\u63a5\u53d7\u8005\u548c\u53d1\u9001\u8005\u5fc5\u987b\u624b\u6301\u76f8\u540c\u7684CID\uff0c\u5e76\u4e14\u53ea\u8981\u5176\u4e2d\u4e00\u4e2a\u62e5\u6709CID\uff0c\u5b83\u4eec\u5c31\u4e0d\u80fd\u4e0e\u6240\u6709\u4e0d\u5177\u5907\u76f8\u540cCID\u7684\u7ec4\u4ef6\u8fdb\u884c\u901a\u4fe1\uff0c\u8fdb\u4e00\u6b65\uff0c\u8fd9\u79cdCID\u53ef\u4ee5\u8f6c\u5316\u4e3a\u516c\u94a5\u548c\u79c1\u94a5\uff0c\u907f\u514d\u88ab\u76f8\u540c\u7684CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4f8b\u5982\u653b\u51fb\u8005\u4f1a\u5c1d\u8bd5\u4e0e\u6240\u6709CID\u8fdb\u884c\u901a\u4fe1\uff0c\u4e8b\u5b9e\u4e0a\u4ed6\u5e94\u8be5\u662f\u9ed8\u8ba4\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"2282-\u7ec4\u4ef6\u5b89\u5168"},"2.2.8.2 \u7ec4\u4ef6\u5b89\u5168"),(0,n.kt)("p",null,"\u4e0d\u80fd\u5bf9\u5176\u4ed6\u4eba\u7684Creation\u6216\u8005\u5b9e\u4f53\u8fdb\u884c\u5220\u9664\u6216\u8005\u4fee\u6539\uff0c\u7406\u8bba\u4e0a\uff0c\u5bf9\u5176\u4ed6\u4eba\u7684\u6570\u636e\u53ea\u80fd\u8bfb\u53d6\uff0c\u6240\u6709\u7684\u4fee\u6539\u64cd\u4f5c\u5747\u662f\u4ea4\u6613"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u6709"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u4e4b\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u7528\u6237\uff08\u5305\u62ec\u964c\u751f\u4eba\uff09")),(0,n.kt)("h4",{id:"2283-\u6743\u9650\u63a7\u5236"},"2.2.8.3 \u6743\u9650\u63a7\u5236"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u516c\u5171\u5c5e\u6027\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u6838\u5fc3\u5b9a\u4e49\uff0c\u5176\u4ed6\u7684\u5747\u662f\u5bf9\u5b83\u7684\u5f15\u7528\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u5bf9\u8c61\u53ea\u58f0\u660e\u4e00\u6b21\uff0c\u56e0\u6b64\u5b83\u7684\u6743\u9650\u4e5f\u5728\u8fd9\u91cc\u88ab\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5728Creation Script\u4e2d\uff0c\u7531\u4e8e\u53d8\u91cf\u76f4\u63a5\u53d8\u6210\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5b9a\u4e49\u7684\u6982\u5ff5\u88ab\u6a21\u7cca\uff0c\u7b26\u53f7\u8868\u4e4b\u540e\u7684\u5f15\u7528\u6b63\u786e\u88ab\u4fdd\u8bc1\uff0c\u4f46\u662f\u7b26\u53f7\u8868\u7684\u6765\u6e90\u786e\u5b9e\u4e0d\u6e05\u6670\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u63a7\u5236\u53d8\u91cf\u53ea\u80fd\u5728\u4e00\u4e2a\u5730\u65b9\u88ab\u5b9a\u4e49\u3002\u751a\u81f3\u6ca1\u6cd5\u533a\u5206\u662f\u8c01\u201c\u5b9a\u4e49\u4e86\u201d\u53d8\u91cf\u3002\u6bd4\u5982\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u540c\u65f6\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5c5e\u6027\uff0c\u4f46\u5206\u522b\u4f7f\u7528\u4e86\u4e0d\u540c\u7684\u6743\u9650\u63a7\u5236\uff0c\u5219\u53ef\u80fd\u4ea7\u751f\u6b67\u4e49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"namespace ComponentA {\n public readonly Global.HP as hp\n}\n\nnamespace ComponentB { \n public readwrite Global.HP as hp\n}\n")),(0,n.kt)("p",null,"\u5f53\u4e0a\u8ff0\u4e24\u4e2a\u7ec4\u4ef6\u88ab\u6dfb\u52a0\u5230\u540c\u4e00\u4e2a\u5b9e\u4f53\u4e86\uff0c\u6743\u9650\u5c06\u53d1\u751f\u6b67\u4e49\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u91cc\u7531\u4ee3\u7801\u5f00\u53d1\u8005\u6765\u5b9a\u4e49\u6743\u9650\u662f\u4e0d\u5408\u9002\u7684\uff0c\u5728\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u4e3a\u4ec0\u4e48\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49\u6743\u9650\uff0c\u662f\u56e0\u4e3a\u5f00\u53d1\u8005\u5373\u662f\u5e94\u7528\u7684\u62e5\u6709\u8005\uff0c\u6216\u8005\u8bf4\u5f00\u53d1\u8005\u662f\u6309\u7167\u62e5\u6709\u6240\u5c5e\u8005\u7684\u65e8\u610f\u6216\u610f\u613f\u8fdb\u884c\u8bbe\u7f6e\u7684\uff0c\u6240\u4ee5\u4e0d\u7ba1\u600e\u6837\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u662f\u540c\u4e00\u4eba"),"\u3002"),(0,n.kt)("p",null,"\u968f\u7740UGC\u6216\u7528\u6237\u521b\u4f5c\u5e73\u53f0\u7684\u5174\u8d77\uff0c\u8fd9\u79cd\u8eab\u4efd\u7684\u7edf\u4e00\u6027\u53d1\u751f\u4e86\u53d8\u5316\uff1a\u5f00\u53d1\u8005\u548c\u5e94\u7528Owner\u53ef\u80fd\u662f\u72ec\u7acb\u4e0d\u540c\u7684\u4eba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6743\u9650\u5b8c\u5168\u7531\u5f00\u53d1\u8005\u6307\u5b9a\u662f\u4e0d\u5408\u9002\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u53e6\u5916\u4e00\u4e9b\u7eaf\u8ba1\u7b97\u7684\u6570\u636e\u5c5e\u6027\uff0c\u53ea\u6709\u4ee3\u7801\u5185\u90e8\u624d\u4f1a\u7528\u5230\uff0c\u5e76\u4e14\u7528\u6237\u4e0d\u4f1a\u5173\u5fc3\uff0c\u8fd9\u4e9b\u6570\u636e\u663e\u7136\u662f\u5e94\u8be5\u7531\u5f00\u53d1\u8005\u63a7\u5236\u7684\uff0c\u800c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u533a\u5206\u8fd9\u4e24\u79cd\u53d8\u91cf\u7684\u6743\u9650\uff1a\u903b\u8f91\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u6216\u8005\u7528\u6237\u53d8\u91cf\u3002\u5c3d\u7ba1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9a\u4e49public\u548cprivate\u6743\u9650\uff0c\u4f46\u662f\u8fd9\u79cd\u5b9a\u4e49\u4ecd\u7136\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u7684\u804c\u8d23\u5c31\u4e0d\u662f\u4e3a\u4e86\u533a\u5206\u7528\u6237\u63a7\u5236\u4e0e\u5f00\u53d1\u4e2d\u95f4\u7684\u533a\u522b\uff0c\u56e0\u6b64\u5f00\u53d1\u8005\u5f80\u5f80\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u610f\u8bc6"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6743\u9650\u548c\u7528\u6237Owner\u9700\u6c42\u4e4b\u95f4\u53ef\u80fd\u662f\u6709\u51b2\u7a81\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u628a\u6743\u9650\u8bbe\u5b9a\u4e4b\u540e\u5c31\u4e0d\u80fd\u66f4\u6539\u4e86\uff0c\u800c\u5b9e\u9645\u4e0a\u7528\u6237\u6743\u9650\u662f\u53ef\u4ee5\u53d1\u751f\u4fee\u6539\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4e24\u8005\u4e4b\u95f4\u7684\u5b9a\u4e49\u6ca1\u6709\u5f88\u5f3a\u7684\u7ea6\u675f\u6027\uff0c\u4f8b\u5982\u7406\u8bba\u4e0a\u5f00\u53d1\u8005\u5c06\u6240\u6709\u5c5e\u6027\u90fd\u5b9a\u4e49\u4e3apublic\u90fd\u662f\u53ef\u4ee5\u7684\uff0c\u800cCreation Script\u4fdd\u8bc1public\u5c5e\u6027\u5fc5\u987b\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u4f7f\u5f97\u5f00\u53d1\u8005\u4f1a\u5c0f\u5fc3\u5730\u533a\u5206\u3002")),(0,n.kt)("p",null,"Creation Script\u5b8c\u7f8e\u7684\u533a\u5206\u4e86\u8fd9\u4e24\u8005\u7684\u5b9a\u4e49\uff0c\u5e76\u4e14\u53ef\u4ee5\u5b9e\u73b0\u7528\u6237\u7684\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u6240\u5c5e\u7684\u4e1c\u897f\u662f\u8d44\u4ea7\u62e5\u6709\u8005\u53ef\u4ee5\u968f\u4fbf\u4fee\u6539\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u56fe\u4e66\u9986\uff0c\u7528\u6237\u53ef\u4ee5\u8bbe\u7f6e\u5b83\u662f\u5426\u53ef\u4ee5\u88ab\u8bbf\u95ee\uff0c\u53ef\u4ee5\u5f00\u542f\u548c\u5173\u95ed\u3002\u4f20\u7edf\u7684\u505a\u6cd5\u662f\u628a\u8fd9\u4e9b\u5c5e\u6027\u6620\u5c04\u5230\u4e00\u4e2a\u6570\u636e\u8868\uff0c\u7136\u540e\u7531\u53e6\u4e00\u4e2a\u7a0b\u5e8f\u53bb\u8bfb\u53d6\u5e76\u4fee\u6539\u8fd9\u4e2a\u6570\u636e\u8868\u3002\u8fd9\u4e2a\u6d41\u7a0b\u975e\u5e38\u590d\u6742\uff0c\u589e\u52a0\u4e86\u7a0b\u5e8f\u7684\u590d\u6742\u6027\uff0c\u800cCreation Script\u76f8\u5f53\u4e8e\u662f\u76f4\u63a5\u201c\u4fee\u6539\u7a0b\u5e8f\u201d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u76f4\u63a5\u63a7\u5236\u6570\u636e\uff0c\u751a\u81f3\u76f4\u63a5\u63a7\u5236\u4ee3\u7801\uff0c\u662f\u6211\u4eec\u8fd9\u4e2a\u4e16\u754c\u672c\u6765\u7684\u5f62\u5f0f\u3002")),(0,n.kt)("h4",{id:"2284-\u65f6\u5e8f\u6027"},"2.2.8.4 \u65f6\u5e8f\u6027"),(0,n.kt)("p",null,"\u89c12.3.6.1\u8282\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2285-\u6027\u80fd\u95ee\u9898"},"2.2.8.5 \u6027\u80fd\u95ee\u9898"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h4",{id:"2286-\u4e09\u79cd\u6a21\u5f0f"},"2.2.8.6 \u4e09\u79cd\u6a21\u5f0f"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u51fd\u6570\u7684\u8f93\u51fa\u9650\u5236\u53ea\u6709\u4e00\u4e2a\u53d8\u91cf\uff0c\u8fd9\u4e5f\u662f\u5927\u591a\u6570\u7a0b\u5e8f\u8bed\u8a00\u7684\u89c4\u8303\uff0c\u90a3\u4e48\u51fd\u6570\u4e4b\u95f4\u7684\u8c03\u7528\u6709\u4e09\u79cd\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c\uff0c\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\u4f5c\u4e3a\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u5c5e\u6027\u4f5c\u4e3a\u53c2\u6570\uff0c\u81ea\u5df1\u7684\u5176\u4ed6\u5c5e\u6027\u4f5c\u4e3a\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u5212\u5206\u4e5f\u9690\u542b\u5730\u610f\u5473\u7740\u53c2\u4e0e\u51fd\u6570\u4ea4\u4e92\u7684\u5bf9\u8c61\u4e0d\u8d85\u8fc72\u4e2a\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u6837\u7684\u5212\u5206\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u7684\u7a0b\u5e8f\u8c03\u7528\uff1a\u53ef\u4ee5\u662f\u4e3b\u52a8\u4fee\u6539\u522b\u4eba\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u662f\u88ab\u52a8\u6d88\u606f\u901a\u77e5\u7684\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u6837\u7684\u5212\u5206\u5bf9\u4e8e\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u6765\u8bb2\uff0c\u4f1a\u5b58\u5728\u4e00\u4e9b\u5e72\u6270\uff0c\u4f7f\u5f97\u53ef\u80fd\u6ca1\u6cd5\u8ba1\u7b97\u51fa\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u4e3a\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u53ef\u80fd\u5b58\u5728\u5faa\u73af\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u8003\u8651\u5230\u4e3b\u52a8\u5f0f\u4fee\u6539\u7684\u5e94\u8be5\u662f\u5c11\u6570\uff0c\u800c\u4e14\u5177\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u9650\u5b9a\u4e3b\u52a8\u5f0f\uff08\u5373\u4e0a\u8ff0\u7b2c\u4e00\u79cd\u60c5\u51b5\uff09\u7684\u7ec4\u4ef6\u603b\u662f\u6700\u4f18\u5148\u6267\u884c\uff0c\u53ea\u6709\u6240\u6709\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u6267\u884c\u5b8c\u4e86\u624d\u4f1a\u6267\u884c\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u65f6\u5019\u7ec4\u4ef6\u7684\u987a\u5e8f\u9700\u8981\u91cd\u65b0\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u66ff\u4ee3\u4e86\u4f20\u7edf\u7684\u6d88\u606f\u5217\u8868\u673a\u5236\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u603b\u662f\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u4e3b\u52a8\u5f0f\u8ba1\u7b97\u53ea\u4e0e\u5f53\u524d\u5e27\u6709\u5173\uff0c\u4e0d\u4f1a\u7f13\u5b58\u6d88\u606f\uff0c\u5b9e\u9645\u4e0a\u5b83\u90fd\u4e0d\u9700\u8981\u6d88\u606f\u5217\u8868\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7f16\u7a0b\u4e2d\u7684\u7acb\u5373\u8c03\u7528\uff0c\u4f46\u662f\u6240\u6709\u7684\u7406\u89e3\u8c03\u7528\u662f\u5e76\u884c\u6267\u884c\u7684\u3002")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e3b\u52a8\u5f0f\u7ec4\u4ef6\u662f\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5185\u4fee\u6539\u5176\u4ed6\u7ec4\u4ef6\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u7f13\u5b58\u8fd9\u79cd\u4e00\u6b21\u6027\u7684\u6d88\u606f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u662f\u8fd9\u79cd\u5bf9\u5916\u4e3b\u52a8\u5f0f\u5199\u5165\u7684\u64cd\u4f5c\u4f1a\u5bfc\u81f4\u5e76\u53d1\u51b2\u7a81\u3002"),"Erlang\u4e3a\u4ec0\u4e48\u6ca1\u6709\u5e76\u53d1\u51b2\u7a81\u5c31\u662f\u5b83\u6ca1\u6709\u4e3b\u52a8\u5f0f\u8c03\u7528\uff0c\u90fd\u662f\u54cd\u5e94\u5f0f\u7684\uff0c\u4efb\u4f55\u5bf9\u51fd\u6570\u7684\u8c03\u7528\u90fd\u662f\u8f6c\u6362\u4e3a\u5176\u4ed6\u51fd\u6570\u7684\u6d88\u606f\u5217\u8868\uff0c\u7136\u540e\u518d\u5176\u4ed6\u51fd\u6570\u5185\u90e8\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"229-\u6570\u636e\u4e0e\u5b58\u6863"},"2.2.9 \u6570\u636e\u4e0e\u5b58\u6863"),(0,n.kt)("p",null,"\u63d0\u4f9b\u6570\u636e\u914d\u7f6e\u8868\uff0c\u4ee5\u53ca\u5728\u811a\u672c\u4e2d\u8bbf\u95ee\u6570\u636e\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6570\u636e\u5b58\u50a8\u90fd\u81ea\u52a8\u53d1\u751f\uff0c\u6240\u4ee5\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u7684\u6570\u636e\u90fd\u9700\u8981\u5b58\u6863\uff0c\u4f46\u4e0d\u9700\u8981\u7528\u6237\u6307\u5b9a\u3002"),(0,n.kt)("h4",{id:"2291-\u6570\u636e\u914d\u7f6e"},"2.2.9.1 \u6570\u636e\u914d\u7f6e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"coc2",src:l(5813).Z,width:"2532",height:"1170"})),(0,n.kt)("h4",{id:"2292-\u5b58\u6863"},"2.2.9.2 \u5b58\u6863"),(0,n.kt)("p",null,"\u5c06\u73a9\u5bb6\u7684\u8fdb\u5ea6\u6570\u636e\u5b58\u6863\uff0c\u9700\u8981\u5b58\u50a8\u81f3\u4e91\u7aef"),(0,n.kt)("h4",{id:"2293-\u4e0d\u8db3"},"2.2.9.3 \u4e0d\u8db3"),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u8ddf\u5bf9\u8c61\u7ba1\u7406\u8d77\u6765\uff0c\u4e0d\u8db3\u7684\u5730\u65b9\u662f\u6570\u636e\u4f1a\u968f\u7740\u5bf9\u8c61\u7684\u5220\u9664\u800c\u5220\u9664\uff0c\u4e0d\u50cf\u4f20\u7edf\u7684\u6570\u636e\u662f\u72ec\u7acb\u5b58\u50a8 \u5728\u6570\u636e\u5e93\u4e2d\uff0c\u5220\u9664\u5bf9\u8c61\u5e76\u4e0d\u4f1a\u5f71\u54cd\u6570\u636e\uff0c\u7136\u540e\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u903b\u8f91\u628a\u6570\u636e\u52a0\u8f7d\u4e0d\u540c\u7684\u5bf9\u8c61\u4e0a\u3002\u8fd9\u5757\u9700\u8981\u6709\u9002\u5f53\u7684\u673a\u5236\u3002"),(0,n.kt)("h3",{id:"2210-\u901a\u7528\u6027"},"2.2.10 \u901a\u7528\u6027"),(0,n.kt)("h4",{id:"22101-\u72ec\u7acb\u7c7b"},"2.2.10.1 \u72ec\u7acb\u7c7b"),(0,n.kt)("p",null,"\u72ec\u7acb\u7684\u7c7b\u5b9a\u4e49\u548cECS\u662f\u7b49\u4ef7\u7684\uff0c\u76f8\u5f53\u4e8e\u628a\u7c7b\u7684\u6bcf\u4e2a\u65b9\u6cd5\u62c6\u4e3a\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u7c7b\u7684\u5b9e\u4f8b\u53d8\u91cf\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\u8868\u5171\u4eab\uff0c\u8fd9\u6837\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u53ef\u4ee5\u8bfb\u5199\uff1b\u800cCreation Script\u4f1a\u533a\u5206\u7ec4\u4ef6\u5185\u90e8\u548c\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u6b64\u628a\u4e00\u4e9b\u53ea\u6709\u65b9\u6cd5\u5185\u90e8\u4f1a\u4f7f\u7528\u7684\u53d8\u91cf\u8bbe\u7f6e\u4e3a\u79c1\u6709\u53d8\u91cf\uff0c\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff1b\u800c\u4f20\u7edfOOP\u4e2d\uff0c\u6bcf\u4e2a\u7c7b\u62e5\u6709\u590d\u6742\u7684\u53d8\u91cf--\u56e0\u6b64\u590d\u6742\u7684\u72b6\u6001\uff0c\u8fd9\u4e9b\u72b6\u6001\u6709\u4e9b\u662f\u8868\u5f81\u5b9e\u4f8b\u7ea7\u522b\u72b6\u6001\u7684\uff0c\u800c\u6709\u4e9b\u5219\u53ea\u662f\u5185\u90e8\u4e24\u6b21Update\u4e4b\u95f4\u7684\u4e00\u4e9b\u4e34\u65f6\u72b6\u6001\u3002\u56e0\u6b64\u8fd9\u79cd\u5212\u5206\u4f7f\u7c7b\u7ed3\u6784\u903b\u8f91\u66f4\u52a0\u6e05\u6670\uff0c\u6211\u4eec\u80fd\u591f\u533a\u5206\u548c\u5173\u6ce8\u90a3\u4e9b\u771f\u6b63\u5bf9\u5916\u8868\u73b0\u81ea\u8eab\u5c5e\u6027\u7684\u72b6\u6001\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u7406\u8bba\u4e0aA\u548cB\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u4e0d\u9700\u8981\u77e5\u9053\u5bf9\u65b9\u7684\u5b58\u5728\uff0c\u4f46\u8fd9\u79cd\u5b8c\u5168\u65e0\u5173\u7684\u4ea4\u4e92\u5e26\u6765\u7684\u4e00\u4e2a\u540e\u679c\u662f\u7ec4\u4ef6\u6267\u884c\u7684\u987a\u5e8f\u975e\u5e38\u91cd\u8981"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u81ea\u52a8\u8bc6\u522b\u8bfb\u5199\u987a\u5e8f\uff0c\u4f46\u8fd9\u901a\u5e38\u6700\u591a\u4fdd\u8bc1\u8bfb\u548c\u5199\u4e4b\u95f4\uff0c\u4f46\u662f\u591a\u4e2a\u5199\u4e4b\u95f4\u4e5f\u6709\u53ef\u80fd\u6709\u4f9d\u8d56\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u5904\u7406\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u540e\u4e00\u79cd\u60c5\u51b5"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52a8\u6807\u8bb0\u6267\u884c\u987a\u5e8f")),(0,n.kt)("h4",{id:"22102-\u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"},"2.2.10.2 \u6ca1\u6709\u8fd4\u56de\u503c\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5728A\u548cB\u7ec4\u4ef6\u4e4b\u95f4\u8bbe\u7f6e\u516c\u5171\u53d8\u91cf\uff0c\u5982\uff1a"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"out Global.iHP as iHP\n"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u662fA\u8c03\u7528B\uff0c\u5373A\u9700\u8981\u5411B\u4f20\u9012\u53c2\u6570\uff0c\u5219A\u7684order\u8bbe\u7f6e\u5c0f\u4e8eB\uff0c\u8ba9A\u5148\u4e8eB\u6267\u884c\u5373\u53ef\uff0c\u8fd9\u6837B\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u5f97\u5230A\u8ba1\u7b97\u751f\u6210\u7684\u53c2\u6570")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u90e8\u6709\u591a\u4e2a\u5176\u4ed6\u7c7b\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u6309\u987a\u5e8f\u8bbe\u7f6e\u591a\u4e2a\u7ec4\u4ef6\u7684order"))),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u5c06OOP\u4e2d\u7684\u65b9\u6cd5\u8c03\u7528\u987a\u5e8f\u8f6c\u6362\u4e3a\u7ec4\u4ef6order\u7684\u987a\u5e8f"),(0,n.kt)("h4",{id:"22103-\u6709\u8fd4\u56de\u503c"},"2.2.10.3 \u6709\u8fd4\u56de\u503c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u8f85\u52a9\u65b9\u6cd5\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aLibrary\u800c\u4e0d\u662f\u7ec4\u4ef6\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679cB\u662f\u5b9e\u4f8b\uff0c\u5177\u6709\u81ea\u5df1\u7684\u5b9e\u4f8b\u53d8\u91cf\uff0c\u8fd9\u4e2a\u65f6\u5019\u9700\u8981\u5c0f\u5fc3\u5730\u5c06\u4e24\u8005\u7684\u65b9\u6cd5\u8c03\u7528\u5173\u7cfb\u62c6\u5206\u5230\u4e24\u5e27\u4e4b\u95f4\uff1aA\u9996\u5148\u6216\u8005B\u4e0a\u4e00\u5e27\u8f93\u51fa\u7684\u7ed3\u679c\uff0c\u8fdb\u884c\u8ba1\u7b97\uff0c\u76f8\u5f53\u4e8eB\u7684\u8fd4\u56de\u503c\uff1b\u7136\u540eA\u5c06\u53c2\u6570\u8f93\u51fa\uff0cB\u6267\u884c\u7684\u65f6\u5019\u6216\u8005A\u7684\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5165\u5230\u5bf9\u7528\u7684\u8f93\u51fa\u53c2\u6570\uff1b\u7136\u540eA\u5728\u4e0b\u4e00\u5e27\u6216\u8005B\u8f93\u51fa\u7684\u53c2\u6570\u8fdb\u884c\u8ba1\u7b97")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5982\u679c\u539f\u6765\u7684OOP\u7c7b\u7279\u522b\u590d\u6742\uff0c\u5c31\u9700\u8981\u5c0f\u5fc3\u5730\u8fdb\u884c\u91cd\u6784\uff0c\u5982\u679c\u4e00\u4e2aOOP\u65b9\u6cd5\u5185\u6709\u4e24\u4e2a\u5373\u4ee5\u4e0a\u7684\u5b9e\u4f8b\u95f4\u51fd\u6570\u8fd4\u56de\u503c\u8c03\u7528\uff0c\u4e0a\u8ff0\u7684\u65b9\u6cd5\u5c31\u4e0d\u884c\uff0c\u9700\u8981\u5bf9\u903b\u8f91\u8fdb\u884c\u8fdb\u4e00\u6b65\u68b3\u7406\uff0c\u6bd4\u5982\u5982\u679c\u662f\u524d\u540e\u6ca1\u6709\u4f9d\u8d56\u72ec\u7acb\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u53ef\u4ee5\u5f88\u597d\u6ef4\u62c6\u5206"),(0,n.kt)("h4",{id:"22104-\u7ee7\u627f"},"2.2.10.4 \u7ee7\u627f"),(0,n.kt)("p",null,"\u7ee7\u627f\u901a\u8fc7\u7ec4\u5408\u5b9e\u73b0"),(0,n.kt)("h4",{id:"22105-\u7ed3\u6784\u4f53"},"2.2.10.5 \u7ed3\u6784\u4f53"),(0,n.kt)("p",null,"\u7531\u4e8e\u5e95\u5c42\u7684Creation Table Engine\u9700\u8981\u4fdd\u8bc1\u6570\u636e\u662f\u7b80\u5355\u7684\u6570\u7ec4\u7ed3\u6784\uff0c\u56e0\u4e3a\u4e0d\u80fd\u8bbe\u7f6e\u592a\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u4e0d\u652f\u6301\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u53ea\u652f\u6301\u57fa\u672c\u7c7b\u578b\u548c\u77e2\u91cf\u7b49\u57fa\u672c\u7c7b\u578b\uff0c\u5176\u4e2dVector\u901a\u8fc7\u5185\u90e8\u7ed3\u6784\u8fdb\u884c\u5904\u7406"),(0,n.kt)("p",null,"\u5f53\u7136\u5176\u5b9e\u7ec4\u4ef6\u7684\u6570\u636e\u672c\u8eab\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7ed3\u6784\u4f53\uff0c\u5982\u679c\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u9700\u8981\u5171\u4eab\u591a\u4e2a\u53d8\u91cf\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u591a\u4e2aout\u53c2\u6570\u5b9e\u73b0\uff0c\u8fd9\u5c31\u76f8\u5f53\u4e8e\u4f20\u9012\u4e00\u4e2a\u9690\u5f0f\u7684\u7ed3\u6784\u4f53\u3002"),(0,n.kt)("h4",{id:"22106-\u63a7\u5236tick\u7684\u9891\u7387"},"2.2.10.6 \u63a7\u5236tick\u7684\u9891\u7387"),(0,n.kt)("h3",{id:"2211-\u8d4b\u503c\u4e0e\u89e3\u8026"},"2.2.11 \u8d4b\u503c\u4e0e\u89e3\u8026"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8d4b\u503c\u8bed\u53e5\u672c\u8eab\u5c31\u5305\u542b\u4e86\u8026\u5408\uff0c\u5b83\u7531\u4e00\u4e2a\u8bfb\u53d6\u8bed\u53e5\u548c\u4e00\u4e2a\u5199\u5165\u8bed\u53e5\u6784\u6210\uff0c\u867d\u7136\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u6ca1\u95ee\u9898\uff0c\u5176\u4e2d\u5305\u542b\u5b89\u5168\u95ee\u9898"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6\u8bed\u53e5\u5f15\u5165\u8026\u5408\uff0c\u539f\u672c\u6211\u53ea\u60f3\u7ed9\u8d44\u6e90\u589e\u52a0\u4e00\u5b9a\u7684\u589e\u52a0\uff0c\u6211\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u603b\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5199\u5165\u662f\u91cd\u5199\uff0c\u8986\u5199\u64cd\u4f5c\uff0c\u5177\u6709\u7834\u574f\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7a0b\u5e8f\u4e2d\u6709+=\u64cd\u4f5c\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u4e0e\u5199\u64cd\u4f5c\u662f\u540c\u4e00\u6743\u9650\uff0c\u80fd\u591f\u6267\u884c+=\u64cd\u4f5c\u7684\u53d8\u91cf\u610f\u5473\u7740\u53ef\u4ee5\u6267\u884c\u5199\u64cd\u4f5c\uff0c\u56e0\u6b64\u4ecd\u7136\u5177\u6709\u7834\u574f\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u5c06\u539f\u503c\u8bfb\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u4e00\u5b9a\u7684\u8ba1\u7b97\uff0c\u4f8b\u5982\u52a0\u51cf\u8ba1\u7b97\uff0c\u7136\u540e\u8fdb\u884c\u8d4b\u503c\uff0c\u8fd9\u4f7f\u5f97\u539f\u672c\u5bf9\u503c\u8fdb\u884c\u589e\u91cf\u7684\u64cd\u4f5c\u903b\u8f91\uff0c\u5f88\u5bb9\u6613\u5199\u5230\u5b9e\u4f53\u5916\u90e8\uff0c\u5373\u589e\u91cf\u6765\u6e90\u7684\u5730\u65b9\uff0c\u8fd9\u79cd\u64cd\u4f5c\u5f15\u5165\u4e86\u4e0d\u5fc5\u8981\u7684\u8026\u5408\uff0c\u56e0\u4e3a\u589e\u91cf\u5b9e\u4f53\u6839\u672c\u4e0d\u9700\u8981\u5305\u542b\u8fd9\u6837\u7684\u903b\u8f91\uff0c\u4f46\u662f\u5982\u679c\u8981\u9694\u79bb\u6743\u9650\uff0c\u5f00\u53d1\u8005\u5fc5\u987b\u5f97\u5199\u4e00\u4e2a\u7c7b\u4f3cAdd(delta)\u7684\u65b9\u6cd5"),(0,n.kt)("p",null,"Machinations \u7684\u8d44\u6e90\u6d41\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\uff0c\u5b83\u5c06\u4e24\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u5373\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u90fd\u770b\u6210\u662f\u589e\u91cf\u7684\uff0c\u8fd9\u6837\u7ecf\u6d4e\u4e4b\u95f4\u7684\u6d41\u52a8\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u5b9e\u4f53\u5c31\u53ea\u9700\u8981\u5173\u5fc3\u81ea\u5df1\u7684\u4e8b\u60c5\uff0c\u7136\u540e\u8f93\u5165\u8f93\u51fa\u4e00\u4e2a\u589e\u91cf\u5c31\u53ef\u4ee5\uff0c\u8fd9\u4e2a\u589e\u91cf\u672c\u8eab\u5bf9\u4e24\u4e2a\u5b9e\u4f53\u6ca1\u6709\u4efb\u4f55\u8026\u5408"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\u5927\u90e8\u5206\u5176\u5b9e\u5c31\u662f\u8fd9\u6837\u7684\u6d41\u7a0b\uff0c\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u8981\u53d6100\u5143\u94b1\uff0c\u94f6\u884c\u76f4\u63a5\u7ed9\u4f60100\uff0c\u800c\u4e0d\u662f\u4f60\u8ba9\u94f6\u884c\u5148\u628a\u6240\u6709\u94b1\u7ed9\u4f60\uff0c\u4f60\u62ff\u6389100\uff0c\u518d\u628a\u5269\u4e0b\u7684\u94b1\u5b58\u56de\u53bb\uff0c\u5982\u679c\u4f60\u5728\u6570\u94b1\u7684\u65f6\u5019\u88ab\u65c1\u8fb9\u7684\u4eba\u62a2\u8d70\u4e86\u600e\u4e48\u529e\u5462\uff1f"),(0,n.kt)("p",null,"Creation Script \u4e2d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\uff08\u5373\u5bf9\u5916\u90e8\u53d8\u91cf\uff09\u7684\u4fee\u6539\u652f\u6301\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u5f0f\u4fee\u6539"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u4e00\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u591a\u4e2a\u4fee\u6539\u4fdd\u8bc1\u539f\u5b50\u6027")),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u4e13\u6ce8\u4e8e\u6784\u9020\u81ea\u5df1\u7684\u589e\u91cf\uff0c\u5927\u5927\u89c1\u51cf\u5c11\u8026\u5408\uff0c\u5e76\u4e14\u4e0d\u9700\u8981\u7f16\u5199\u590d\u6742\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0\u589e\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u5982\u679c\u5b9e\u5728\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u603b\u91cf\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u79cd\u5c11\u6570\u60c5\u51b5\u53ef\u4ee5\u5148\u8bfb\u53d6\u603b\u91cf\uff0c\u8ba1\u7b97\u5408\u9002\u7684\u589e\u91cf\uff0c\u518d\u5bf9\u5176\u8fdb\u884c\u4fee\u6539"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u589e\u91cf\u4e0e\u9ed8\u8ba4\u8d4b\u503c\u76f8\u6bd4\uff0c\u867d\u7136\u80fd\u5b9e\u73b0\u7684\u529f\u80fd\u90fd\u6ca1\u6709\u5dee\u5f02\uff0c\u4f46\u662f\u5b83\u907f\u514d\u4e86\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u7684\u8026\u5408\uff0c\u6bd5\u7adf\u5927\u90e8\u5206\u64cd\u4f5c\u662f\u589e\u91cf\uff0c\u800c\u4e14\u5728ECS\u4e2d\u5728Component \u4e2d\u4e0d\u9002\u5408\u5199\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u4e5f\u53ef\u4ee5\u8fdb\u884c\u4f18\u5316\uff0c\u7cfb\u7edf\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\uff0c\u5f53\u7136\u8fd9\u4e2a\u529f\u80fd\u672c\u8eab\u4e0d\u662f\u4e3a\u4ee3\u7801\u4f18\u5316\u670d\u52a1\u7684\uff0c\u5b83\u662f\u4e3a\u7528\u6237\u5f00\u53d1\u6548\u7387\u670d\u52a1\u7684\uff0c\u80fd\u591f\u7b80\u5316\u903b\u8f91\u5173\u7cfb\uff0c\u8ba9\u7528\u6237\u903b\u8f91\u66f4\u6e05\u6670"),(0,n.kt)("h4",{id:"22111-\u53bb\u9664\u76f4\u63a5\u8d4b\u503c"},"2.2.11.1 \u53bb\u9664\u76f4\u63a5\u8d4b\u503c"),(0,n.kt)("p",null,"\u5269\u4e0b\u64cd\u4f5c\u53ea\u6709\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\u53d6 ."),(0,n.kt)("li",{parentName:"ul"},"\u589e\u91cf\u8fd0\u7b97\uff0c+=")),(0,n.kt)("p",null,"\u5176\u4e2d\u8bfb\u53d6\u64cd\u4f5c\u4e3b\u8981\u7528\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5224\u65ad\u8d44\u6e90\u662f\u5426\u591f\u7528\uff0c\u5982\u679c\u4e0d\u591f\u7528\u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u4f7f\u7528\u65b9\u53ef\u4ee5\u65b9\u4fbf\u663e\u793a\u4e00\u4e9b\u63d0\u793a\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e9b\u4f9d\u8d56\u4e8e\u603b\u91cf\u7684\u589e\u91cf\u8fd0\u7b97\uff0c\u4f8b\u5982\u589e\u52a0\u603b\u91cf\u768410%")),(0,n.kt)("h4",{id:"22112-\u62c9\u53d6\u8fd8\u662f\u4f20\u5165"},"2.2.11.2 \u62c9\u53d6\u8fd8\u662f\u4f20\u5165"),(0,n.kt)("p",null,"\u8d44\u6e90\u7684\u4e24\u79cd\u6d41\u52a8\u6a21\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d41\u5165\u6a21\u5f0f\uff0c\u4e00\u822c\u5bf9\u5e94\u4e8e\u6536\u96c6\u8d44\u6e90\uff0c\u6b64\u65f6\u9700\u8981\u628a\u4e00\u5b9a\u6570\u91cf\u7684\u8d44\u6e90\u4f20\u5165\u4e00\u4e2a\u5bb9\u5668\uff0c\u800c\u4e0d\u662f\u7531\u8be5\u5bb9\u5668\u53bb\u62c9\u53d6\uff0c\u56e0\u4e3a\u5b83\u5e76\u6ca1\u6709\u4e00\u4e2a\u62c9\u53d6\u6e90\uff0c\u800c\u662f\u76f4\u63a5\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u589e\u91cf\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u62c9\u53d6\u6a21\u5f0f\uff0c\u5f53\u6211\u4eec\u9700\u8981\u6d88\u8017\u8d44\u6e90\u5df2\u5b8c\u6210\u67d0\u4ef6\u4e8b\u60c5\u65f6\uff0c\u901a\u5e38\u7531\u5b8c\u6210\u8be5\u4e8b\u60c5\u7684\u5b9e\u4f53\u4ece\u8d44\u6e90\u5bb9\u5668\u8fdb\u884c\u62c9\u53d6\uff0c\u8be5\u5b9e\u4f53\u9996\u5148\u5bf9\u5bb9\u5668\u6267\u884c\u4e00\u4e2a\u51cf\u91cf\u8ba1\u7b97\uff08\u5f53\u7136\u9700\u8981\u5224\u65ad\u5bb9\u91cf\u662f\u5426\u8db3\u591f\uff09\uff0c\u7136\u540e\u6267\u884c\u81ea\u5df1\u7684\u5904\u7406\u903b\u8f91\uff1b")),(0,n.kt)("p",null,"\u9664\u4e86\u751f\u4ea7\u8d44\u6e90\u7684\u6e90\u5934\uff0c\u5927\u90e8\u5206\u903b\u8f91\u90fd\u5e94\u8be5\u662f\u62c9\u53d6\u6a21\u5f0f\u3002\u8fd9\u91cc\u4e3b\u8981\u7684\u539f\u56e0\u662f\u8026\u5408\uff1a\u5982\u679c\u9700\u8981\u8d44\u6e90\u53d8\u5316\u7684\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u5176\u4ed6\u903b\u8f91\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u662f\u4e0d\u5408\u7406\u7684\uff0c\u8d44\u6e90\u7684\u53d8\u5316\u7ec4\u4ef6\u4e0d\u5e94\u8be5\u77e5\u9053\u8fd9\u4e9b\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u903b\u8f91\u662f\u53d8\u5316\u7684\uff0c\u53ef\u80fd\u589e\u52a0\u65b0\u7684\u903b\u8f91\uff0c\u90a3\u4e48\u8fd9\u6839\u672c\u65e0\u6cd5\u5b9e\u73b0")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e94\u8be5\u662f\u7531\u54cd\u5e94\u7ec4\u4ef6\u6765\u62c9\u53d6\uff0c\u5982\u679c\u67d0\u4e2a\u503c\u53d8\u5316\u4e86\uff0c\u611f\u5174\u8da3\u7684\u7ec4\u4ef6\u81ea\u884c\u6765\u8bfb\u53d6\u503c\u8fdb\u884c\u903b\u8f91\u5904\u7406\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ef\u80fd\u968f\u65f6\u589e\u52a0\u5bf9\u8fd9\u4e9b\u53d8\u5316\u611f\u5174\u8da3\u7684\u65b0\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"22113-\u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"},"2.2.11.3 \u4f20\u9012\u53d8\u5316\u7684\u589e\u91cf"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u4e2d\uff0c\u8c03\u7528\u67d0\u4e2a\u51fd\u6570\u4f20\u9012\u7684\u53c2\u6570\u901a\u5e38\u662f\u589e\u91cf\u503c\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u6263\u9664\u591a\u5c11\u8840\u91cf\u3002\u8fd9\u4e2a\u51fd\u6570\u4e00\u65e6\u8c03\u7528\u5b8c\u6bd5\uff0c\u5219\u9700\u8981\u4e0b\u4e00\u6b21\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u624d\u4f1a\u518d\u6b21\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728OOP\u7684\u505a\u6cd5\u662f\uff0c\u4e00\u4e2a\u5927\u7684\u51fd\u6570\u4f53\uff0c\u6709\u5f88\u591a\u5206\u652f\uff0c\u51fd\u6570\u9996\u5148\u5224\u65ad\u8f93\u5165\uff0c\u5982\u679c\u9002\u914d\u6280\u80fd\u7684\u4f7f\u7528\uff0c\u5c31\u8fdb\u884c\u6280\u80fd\u91ca\u653e\u5206\u652f\uff0c\u7136\u540e\u8fdb\u800c\u5bf9\u5b9e\u9645\u7684\u6263\u8840\u7684\u51fd\u6570\u8fdb\u884c\u8c03\u7528\uff1b\u5982\u679c\u6ca1\u6709\u8f93\u5165\u53d1\u751f\u6216\u8005\u6ca1\u6709\u8fdb\u5165\u6280\u80fd\u6267\u884c\u5206\u652f\uff0c\u5219\u540e\u7eed\u7684\u51fd\u6570\u5c31\u4e0d\u4f1a\u88ab\u8c03\u7528\u3002\u5c3d\u7ba1\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u6280\u80fd\u7684\u6263\u8840\u589e\u91cf\u503c\u8fd8\u662f\u88ab\u5b58\u653e\u5728\u6280\u80fd\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u5207\u7ec4\u4ef6\u90fd\u662f\u6241\u5e73\u7684\uff0c\u610f\u5473\u7740\u524d\u9762\u4e0d\u4f1a\u6709\u8fd9\u6837\u7684\u5206\u652f\u6765\u963b\u6321\u524d\u9762\u7684\u6d41\u7a0b\uff0c\u6240\u6709\u7ec4\u4ef6\u9ed8\u8ba4\u90fd\u4f1a\u88ab\u6267\u884c\u3002\u4e3a\u4e86\u5b9e\u73b0\u529f\u80fd\uff0c\u6709\u4e24\u79cd\u65b9\u6cd5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u589e\u91cf\u5c5e\u6027\u90fd\u5bf9\u5e94\u4e00\u4e2a\u72b6\u6001\u91cf\uff0c\u4ee5\u8bf4\u660e\u662f\u5426\u9700\u8981\u6267\u884c\u540e\u7eed\u7684\u64cd\u4f5c\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u628aOOP\u65b9\u6cd5\u4e2d\u90a3\u4e9b\u5206\u652f\u8f6c\u6362\u4e3a\u72b6\u6001\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u589e\u51cf\u7ec4\u4ef6\uff0c\u4f8b\u5982\u6ca1\u6709\u91ca\u653e\u6280\u80fd\u7684\u65f6\u5019\u5c31\u5220\u9664\u6280\u80fd\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u5728\u5b9e\u8df5\u4e0a\u5f88\u96be\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6c38\u8fdc\u4f20\u9012\u589e\u91cf\uff0c\u4f8b\u5982\u6280\u80fd\u7ec4\u4ef6\uff0c\u5982\u679c\u91ca\u653e\u5f53\u505a\u6267\u884c\uff0c\u4fee\u6539\u503c\u5c31\u8bbe\u7f6e\u4e3a\u67d0\u4e2a\u5177\u4f53\u7684\u6570\u503c\uff0c\u5426\u5219\u5c31\u8bbe\u7f6e\u4e3a0\uff0c\u8fd9\u6837\u5bf9\u540e\u7eed\u7ec4\u4ef6\u6ca1\u6709\u5b9e\u8d28\u6027\u7684\u5f71\u54cd\uff0c\u8fd9\u91cc\u6570\u503c0\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u72b6\u6001\u503c\uff0c\u4ed6\u544a\u8bc9\u540e\u7eed\u7ec4\u4ef6\u8be5\u4e8b\u4ef6\u6ca1\u6709\u53d1\u751f\uff0c\u4f46\u53c8\u53ef\u4ee5\u8ba9\u540e\u7eed\u7ec4\u4ef6\u4e0d\u9700\u8981\u5904\u7406\u72b6\u6001\uff0c\u8ba4\u4e3a\u4e00\u76f4\u5728\u53d1\u751f\u3002")),(0,n.kt)("p",null,"\u7b2c\u4e09\u79cd\u60c5\u51b5\u662f\u6700\u7b80\u5355\u7684\u67b6\u6784\uff0c\u4f46\u662f\u5b58\u5728\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u76f8\u5f53\u4e8e\u4f20\u7edfOOP\u4e2d\u90a3\u4e9b\u6240\u6709\u7684\u5206\u652f\u90fd\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u6216\u8005\u6bcf\u5e27\u5f00\u59cb\u4e4b\u524d\uff0c\u9700\u8981\u5bf9\u589e\u91cf\u503c\u8fdb\u884c\u6e05\u96f6\u64cd\u4f5c")),(0,n.kt)("p",null,"\u524d\u8005\u53ef\u4ee5\u901a\u8fc7\u914d\u5408change-driven\u7684\u67b6\u6784\u6765\u5b9e\u73b0\uff0c\u800c\u5bf9\u4e8e\u540e\u8005\uff0c\u4f8b\u5982\u5bf9\u4e8e\u589e\u91cf\u7ec4\u4ef6\u6765\u8bb2\uff0c\u5b83\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u5f71\u54cd\u662f\u5904\u4e8e\u5916\u5faa\u73af\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u5728\u6267\u884c\u5b8c\u6240\u6709\u88ab\u901a\u77e5\u7ec4\u4ef6\u4e4b\u540e\u81ea\u52a8\u6e05\u96f6\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u9700\u8981\u533a\u5206\u54ea\u4e9b\u662f\u589e\u91cf\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u505a\u6cd5\u662f\uff0c\u8ba9\u4e3b\u52a8\u53d1\u751f\u6d88\u606f\u7684\u7ec4\u4ef6\u81ea\u5df1\u7ef4\u62a4\u589e\u91cf\u503c\uff0c\u8fd9\u6837\u5c31\u9700\u8981\u4fdd\u8bc1\u8fd9\u7c7b\u7ec4\u4ef6\u7528\u4e8e\u90fd\u9700\u8981\u6267\u884c\uff0c\u4e0d\u53d7change-driven\u673a\u5236\u7684\u5f71\u54cd\u3002\u4f8b\u5982\u5bf9\u4e8e\u91ca\u653e\u6280\u80fd\u7684\u7ec4\u4ef6\uff0c\u5b83\u6bcf\u5e27\u7684\u76d1\u542c\u8f93\u5165\uff0c\u5982\u679c\u8f93\u5165\u9002\u914d\uff0c\u5c31\u5c06\u589e\u91cf\u8bbe\u7f6e\u4e3a\u9884\u8bbe\u503c\uff0c\u5426\u5219\u8bbe\u7f6e\u4e3a0\u3002\u8fd9\u79cd\u65b9\u6cd5\u5e94\u8be5\u662f\u6700\u7b80\u5355\u7684\uff0c\u4e0d\u80fd\u7ed9\u8fd0\u884c\u65f6\u52a0\u5165\u592a\u591a\u903b\u8f91\u7684\u4e1c\u897f\uff0c\u800c\u4e14\u901a\u5e38\u53d1\u51fa\u4e8b\u4ef6\u7684\u7ec4\u4ef6\u6570\u91cf\u662f\u5c11\u6570\u7684\uff0c\u4f8b\u5982\u5927\u90e8\u5206\u65f6\u95f4\u65f6\u95f4\u90fd\u662f\u968f\u65f6\u8f93\u5165\u6216\u8005\u67d0\u4e9b\u7528\u6237\u4ea4\u4e92\u89e6\u53d1\u7684\uff0c\u8fdb\u800c\u89e6\u53d1\u4e00\u8fde\u4e32\u7684\u8ba1\u7b97\uff0c\u5982\u679c\u6e90\u5934\u4e0d\u4f1a\u4f20\u9012\uff0c\u540e\u7eed\u7684\u5f88\u591a\u8ba1\u7b97\u4e5f\u95f4\u63a5\u7701\u6389\u4e86\uff0c\u5c31\u50cfOOP\u4e2d\u7684\u5206\u652f\u90a3\u6837\u3002\u4f46\u662f\u76f8\u5bf9\u4e8eOOP\uff0c\u81f3\u5c11\u53ef\u4ee5\u8282\u7701\u8ba1\u7b97\uff0c\u4f46\u7701\u4e0d\u4e86\u5185\u5b58\u3002"),(0,n.kt)("h4",{id:"22114-\u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"},"2.2.11.4 \u540c\u65f6\u652f\u6301\u62c9\u53d6\u548c\u5199\u5165"),(0,n.kt)("p",null,"\u5982\u679c\u5168\u90e8\u4f7f\u7528\u62c9\u53d6\uff0c\u4f1a\u5b58\u5728\u6548\u7387\u7684\u95ee\u9898\uff0c\u5e76\u4e14\u62c9\u53d6\u8981\u6c42\u88ab\u5f71\u54cd\u7740\u81ea\u884c\u652f\u6301\u76f8\u5173\u903b\u8f91\uff0c\u8fd9\u6709\u65f6\u5019\u4e0d\u591f\u7075\u6d3b\uff0c\u4f8b\u5982\u5df2\u6709\u7684\u7ec4\u4ef6\u6ca1\u6709\u8fd9\u4e2a\u903b\u8f91\uff0c\u5982\u679c\u65b0\u52a0\u4e00\u4e2a\u7ec4\u4ef6\u4e3b\u52a8\u53bb\u4fee\u6539\u8fd9\u4e9b\u903b\u8f91\uff0c\u90a3\u4e48\u4fee\u6539\u4f1a\u53d8\u5f97\u7b80\u5355\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5f00\u653e\u578b\u53ef\u4e92\u64cd\u4f5c\u7684\u7a0b\u5e8f\uff0c\u4e5f\u8bb8\u8fd9\u6837\u7684\u903b\u8f91\u662f\u5408\u7406\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u6743\u9650\u5185\u7684\u7ec4\u4ef6\u4f7f\u7528\u4e3b\u52a8\u5199\u5165\u7684\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f7f\u7528\u62c9\u53d6\u7684\u65b9\u5f0f")),(0,n.kt)("p",null,"\u5199\u5165\u7684\u65b9\u5f0f\u5012\u662f\u5f88\u597d\u5b9e\u73b0\uff0c\u6bd4\u5982\u901a\u8fc7writein\u6216\u8005writeout\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u63a8\u5bfc\u51fa\u5e94\u8be5\u600e\u6837\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u540c\u65f6\u652f\u6301\u53cc\u5411\u7684\u64cd\u4f5c\uff0c\u6709\u53ef\u80fd\u5c06\u4f7f\u5f97\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\u4e0d\u53ef\u63a8\u5bfc\u3002\u8fd9\u65b9\u9762\u540e\u7eed\u9700\u8981\u597d\u597d\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"2212-\u7b26\u53f7\u6cdb\u578b"},"2.2.12 \u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22121-\u53d8\u91cf\u540d\u79f0"},"2.2.12.1 \u53d8\u91cf\u540d\u79f0"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5305\u542b\u6570\u636e\u7ed3\u6784\uff0c\u53ea\u80fd\u5b9a\u4e49\u7ed3\u6784\u4f53\uff0c\u7ed3\u6784\u4f53\u6709\u540d\u79f0\uff0c\u7ed3\u6784\u4f53\u4e2d\u7684\u53d8\u91cf\u4e5f\u5305\u542b\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u5b9a\u4e49\u65b0\u7684\u7ed3\u6784\uff0c\u800c\u53ea\u80fd\u4f7f\u7528\u5143\u7ec4\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7b26\u53f7\u5b9a\u4e49\u5230\u7ec4\u4ef6\u53d8\u91cf\u4e4b\u95f4\u7684\u6620\u5c04\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Point \n{\n X = 10,\n Y = 20.0\n Z = 30.0\n}\n")),(0,n.kt)("h4",{id:"22122-\u6a21\u5f0f\u5339\u914d"},"2.2.12.2 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4f7f\u7b26\u53f7\u5b9a\u4e49\u4e0e\u7ec4\u4ef6\u53d8\u91cf\u540d\u79f0\u4e4b\u95f4\u8fdb\u884c\u89e3\u8026\uff0c\u53ef\u4ee5\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u3002\u4f46\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684=\u7b26\u53f7\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd8\u662f\u9700\u8981\u8d4b\u503c\u7b26\u53f7\uff0c\u8fd9\u91cc\u4f7f\u7528\u64cd\u4f5c\u7b26as\uff0c\u4f46\u5b83\u7684\u610f\u4e49\u5c31\u76f8\u5f53\u4e8eFP\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,"\u6ce8\u610f\uff0c\u5728Lua\u4e2d\u4f7f\u7528\u7d22\u5f15\u503c\u6765\u907f\u514d\u8c03\u7528\u8005\u8ddf\u88ab\u8c03\u7528\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u81ea\u7136\uff0c\u8fd8\u662f\u9700\u8981\u5f15\u5165\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u5c06\u503c\uff08\u5185\u5b58\u5730\u5740\uff09\u7ed1\u5b9a\u5230\u771f\u6b63\u81ea\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u79f0\u4e0a\u3002"),(0,n.kt)("p",null,"CS\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\u53ea\u5728\u7ec4\u4ef6\u53d8\u91cf\u7ed1\u5b9a\u65f6\u4f7f\u7528\uff0c\u5176\u4ed6\u7ec4\u4ef6\u5185\u90e8\u4e0d\u80fd\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u79f0\u4e3a\u7b26\u53f7\u7ed1\u5b9a\u66f4\u6709\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u53d8\u91cf\u7ed1\u5b9a\u5fc5\u987b\u6765\u81ea\u4e8e\u7b26\u53f7\u8868\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u66ff\u6362\uff0c\u4f46\u4e5f\u662f\u66ff\u6362\u53e6\u4e00\u4e2a\u7b26\u53f7\u8868\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(X, Y, Z) <- Point //read from\nH -> HP //write to\n")),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u5b9e\u73b0\u4e86\u56db\u4e2a\u529f\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8bfb\uff1a\u5373\u4f7f\u7ed3\u6784\u540d\u5b57\u6216\u8005\u5185\u90e8\u53d8\u91cf\u7684\u540d\u5b57\u4e0d\u540c\uff0c\u53ea\u8981\u7c7b\u578b\u5339\u914d\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u53c2\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u6cdb\uff1a\u53ef\u4ee5\u5c06\u9ed8\u8ba4\u7684Point\u7b26\u53f7\u66ff\u6362\u4e3a\u5176\u4ed6\u7ed3\u6784\u76f8\u540c\u7684\u7b26\u53f7\uff0c\u4ece\u800c\u5b9e\u73b0\u7b26\u53f7\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u5199\uff1a\u5199\u5165\u6570\u636e\uff0c\u4e0d\u9700\u8981\u5355\u72ec\u5199\u5165\u5230\u53d8\u91cf\uff0c\u6216\u8005\u8bf4\u9700\u8981\u6784\u9020\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u5efa\uff1a\u9664\u4e86\u83b7\u53d6\u53d8\u91cf\u53ca\u7ed1\u5b9a\u4e4b\u5916\uff0c\u6784\u9020\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u53caSpaw\u51fd\u6570\u53ef\u80fd\u4e5f\u9700\u8981\u6a21\u5f0f\u5339\u914d\u3002")),(0,n.kt)("h4",{id:"22123-\u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"},"2.2.12.3 \u7ec4\u4ef6\u5185\u90e8\u65e0\u7c7b\u578b"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u7c7b\u578b\u4e3b\u8981\u7528\u4e8e\u4e0d\u540c\u7c7b\u6216\u8005\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u591a\u53d8\u91cf\u7684\u805a\u5408\u65b9\u5f0f\uff0c\u53ea\u9700\u8981\u4f20\u64ad\u5355\u4e2a\u7c7b\u578b\u53d8\u91cf\u540d\u79f0\u65e2\u53ef\u4ee5\u4f20\u9012\u591a\u4e2a\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u4e00\u4e2a\u65b9\u6cd5\u5185\u90e8\u6765\u8bb2\uff0c\u4ed6\u8981\u5904\u7406\u7684\u5168\u90e8\u662f\u5355\u4e2a\u53d8\u91cf\uff0c\u591a\u53d8\u91cf\u805a\u5408\u7684\u540d\u79f0\u5bf9\u4e8e\u51fd\u6570\u6765\u8bb2\u6ca1\u6709\u610f\u4e49\uff0c\u53cd\u800c\u9700\u8981\u66f4\u590d\u6742\u7684\u673a\u5236\u53bb\u65b9\u6cd5\u805a\u5408\u4f53\u5185\u90e8\u7684\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bb2\uff0c\u6a21\u5f0f\u5339\u914d\u7b80\u5316\u4e86\u8fd9\u79cd\u5bf9\u5b9e\u9645\u5185\u90e8\u53d8\u91cf\u7684\u8bbf\u95ee\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u5b83\u5e26\u6765\u7684\u4e0d\u597d\u4e00\u9762\uff0c\u53ef\u80fd\u662f\u6784\u9020\u5b9e\u4f8b\u7684\u65f6\u5019\u4e0d\u80fd\u4ee5\u4e00\u4e2a\u805a\u5408\u7c7b\u578b\u7684\u6574\u4f53\u8fdb\u884c\u8d4b\u503c\uff0c\u800c\u662f\u9700\u8981\u5bf9\u5176\u4e2d\u7684\u6bcf\u4e2a\u53d8\u91cf\u90fd\u8d4b\u503c\uff0c\u4f46\u662f\u5176\u5b9e\u672c\u6765\u4e5f\u662f\u9700\u8981\u5bf9\u6bcf\u4e2a\u53d8\u91cf\u8d4b\u503c\u7684\u3002"),(0,n.kt)("h3",{id:"2213-\u5e76\u53d1"},"2.2.13 \u5e76\u53d1"),(0,n.kt)("p",null,"\u9762\u5411\u5bf9\u8c61\u7684\u65e0\u5e8f\u76f8\u4e92\u5f15\u7528\uff0c\u901a\u5e38\u5bfc\u81f4\u5e76\u53d1\uff0c\u800c\u903b\u8f91\u4e0a\u4ed6\u4eec\u4e0d\u4e00\u5b9a\u6709\u5e76\u53d1\uff0c\u800c\u4e14\u6211\u4eec\u6ca1\u6709\u529e\u6cd5\u4ece\u903b\u8f91\u4e0a\u53bb\u63a7\u5236\u8fd9\u79cd\u5e76\u53d1\u7684\u987a\u5e8f\uff0c\u592a\u590d\u6742\uff0c\u5b8c\u5168\u65e0\u6cd5\u9884\u6599\u5bf9\u8c61\u4e4b\u95f4\u4ee5\u4ec0\u4e48\u6837\u7684\u987a\u5e8f\u548c\u65f6\u673a\u89e6\u53d1\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u4ee5\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\u7ec4\u7ec7\uff0c\u80fd\u591f\u66f4\u597d\u5730\u63a7\u5236\u903b\u8f91\u7684\u987a\u5e8f\uff0c\u4ece\u800c\u80fd\u8ddf\u5728\u903b\u8f91\u4e0a\u6bd4\u8f83\u7b80\u5355\u5730\u907f\u514d\u6389\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u5e76\u53d1"),(0,n.kt)("p",null,"\u5c06\u5171\u4eab\u53d8\u91cf\u548c\u79c1\u6709\u53d8\u91cf\u533a\u5206\uff0c\u79c1\u6709\u53d8\u91cf\u4e0d\u4f1a\u89e6\u53d1\u5e76\u53d1\uff0c\u800c\u5171\u4eab\u53d8\u91cf\u56e0\u4e3a\u4ece\u7b26\u53f7\u8868\u5f15\u7528\uff0c\u4ece\u800c\u7f16\u8bd1\u5668\u80fd\u591f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u7ec4\u4ef6\u5bf9\u5171\u4eab\u53d8\u91cf\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u6bd4\u5982\u80fd\u591f\u628a\u4e00\u4e9b\u76f8\u4e92\u72ec\u7acb\u7684\u7ec4\u4ef6\u5e76\u884c\u6267\u884c"),(0,n.kt)("p",null,"\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\uff0c\u90a3\u4e2a\u5bf9\u8c61\u6267\u884c\u7684\u903b\u8f91\u592a\u590d\u6742\uff0c\u5b58\u5728\u4e0d\u53ef\u9884\u6d4b\u7684\u5206\u652f\u3001\u8df3\u8f6c\u7b49\u903b\u8f91\uff0c\u90a3\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\u53ef\u80fd\u5bfc\u81f4\u4e0d\u53ef\u9884\u6d4b\u7684\u6307\u4ee4\u6267\u884c\u987a\u5e8f\u548c\u5e8f\u5217\uff0c\u56e0\u800c\u65e0\u6cd5\u5f88\u597d\u5730\u4f7f\u7528\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u56e0\u6b64\u901a\u5e38\u53ea\u80fd\u4f9d\u8d56\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u4f46\u4e0d\u53ef\u9884\u6d4b\u7684\u6df7\u4e71\u7684\u5bf9\u8c61\u5f15\u7528\u5173\u7cfb\u5c06\u5927\u5927\u5730\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898"),(0,n.kt)("p",null,"\u901a\u8fc7\u7cbe\u5fc3\u5c06\u540c\u4e00\u7ec4\u4ef6\u7684\u6570\u636e\u7ec4\u7ec7\u6210\u6570\u7ec4\uff0c\u4e0d\u5149\u662f\u80fd\u591f\u63a7\u5236\u903b\u8f91\u987a\u5e8f\uff0c\u4ece\u800c\u907f\u514d\u4e00\u90e8\u5206\u5e76\u53d1\uff0c\u540c\u65f6\u5c06\u5bf9\u8c61\u7ea7\u522b\u7684\u7ebf\u7a0b\u5e76\u884c\u8f6c\u5316\u4e3a\u6307\u4ee4\u7ea7\u5e76\u884c\uff0c\u8fdb\u4e00\u6b65\uff0c\u901a\u8fc7\u5bf9\u4f9d\u8d56\u5173\u7cfb\u7684\u8bc6\u522b\u80fd\u591f\u66f4\u597d\u5730\u5c06\u591a\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u6267\u884c\u7ebf\u7a0b\u7ea7\u5e76\u884c\uff0c\u8fd9\u91cc\u7684\u6838\u5fc3\u662f\u80fd\u591f\u901a\u8fc7\u5168\u5c40\u7b26\u53f7\u8868\u548c\u663e\u5f0f\u5171\u4eab\u5173\u7cfb\u8bc6\u522b\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("h4",{id:"22131-\u8fc7\u7a0b\u5f0f\u7f16\u7a0b"},"2.2.13.1 \u8fc7\u7a0b\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"22132-erlang\u53caoop"},"2.2.13.2 Erlang\u53caOOP"),(0,n.kt)("h4",{id:"22133-\u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"},"2.2.13.3 \u9002\u5408\u6e38\u620f\u7a0b\u5e8f\u7684\u5e76\u53d1\u6a21\u578b"),(0,n.kt)("h3",{id:"2214-\u667a\u80fd\u611f\u77e5"},"2.2.14 \u667a\u80fd\u611f\u77e5"),(0,n.kt)("p",null,"\u5f53\u9760\u8fd1\u4e00\u4e2a\u7269\u4f53\uff0c\u6216\u8005\u4f7f\u7528\u4e00\u4e2a\u7279\u5b9a\u7684\u63a2\u7d22\u547d\u4ee4\u7684\u65f6\u5019\uff0c\u5982\u679c\u5176\u672c\u8eab\u4e0d\u5177\u5907\u8bc6\u522b\u5bf9\u65b9\u7684\u64cd\u4f5c\uff0c\u53ef\u4ee5\u52a8\u6001\u67e5\u8be2\u5bf9\u65b9\u7684\u5c5e\u6027\uff0c\u7136\u540e\u52a8\u6001\u63d0\u793a\u662f\u5426\u9700\u8981\u5b89\u88c5\u65b0\u7684\u64cd\u4f5c\u811a\u672c\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6bcf\u4e2a\u811a\u672c\u9700\u8981\u7528\u6237\u624b\u52a8\u9009\u62e9\uff0c\u4e0d\u53ef\u80fd\u81ea\u52a8\u5b89\u88c5\u6240\u6709\u811a\u672c\uff0c\u4f46\u662f\u7cfb\u7edf\u672c\u8eab\u662f\u53ef\u4ee5\u611f\u77e5\u7684\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u8d2d\u4e70\u4e00\u8f86\u8f66\uff0c\u9700\u8981\u4f7f\u7528\u7279\u5b9a\u7684\u8d2d\u4e70\u65b9\u5f0f\u7b49\u3002"),(0,n.kt)("p",null,"\u4e24\u4e2a\u76ee\u6807\u6216\u4ef7\u503c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u79fb\u9664"),"\uff1a\u5f53\u4e00\u4e2a\u573a\u666f\u4e2d\u5e76\u4e0d\u5305\u542b\u67d0\u4e2a\u811a\u672c\u53ef\u64cd\u4f5c\u7684\u5b9e\u4f53\u65f6\uff0c\u53ef\u4ee5\u79fb\u9664\u4e00\u4e9b\u7ec4\u4ef6\uff0c\u6216\u8005\u5355\u7eaf\u7565\u8fc7\u8fd9\u4e9b\u7ec4\u4ef6\uff08\u51fa\u4e8e\u52a8\u6001\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff09\uff0c\u6bd4\u5982\u7528\u6237\u89d2\u8272\u53ef\u80fd\u5b89\u88c5\u975e\u5e38\u591a\u7684\u611f\u77e5\u548c\u4ea4\u4e92\u7ec4\u4ef6\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u573a\u666f\u4e2d\u6839\u672c\u5c31\u6ca1\u6709\u53ef\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5b9e\u4f53"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u52a8\u6001\u6dfb\u52a0"),"\uff1a\u6709\u4e9b\u7c7b\u578b\u7684\u5b9e\u4f53\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u544a\u7269\u4f53\uff0c\u901a\u5e38\u5176\u672c\u8eab\u5e76\u4e0d\u5305\u542b\u5168\u573a\u666f\u7684\u673a\u5236\uff0c\u4ed6\u4eec\u53ea\u662f \u4e34\u65f6\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u667a\u80fd\u8d2d\u4e70"),"\uff1a\u8ba9\u7528\u6237\u5728\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70")),(0,n.kt)("h3",{id:"2215-\u4ea4\u6613\u4e0e\u4ea4\u4e92"},"2.2.15 \u4ea4\u6613\u4e0e\u4ea4\u4e92"),(0,n.kt)("p",null,"\u6240\u6709\u7528\u6237\u4e4b\u95f4\u6d89\u53ca\u4fee\u6539\u6570\u636e\u7684\u7684\u4ea4\u4e92\u90fd\u662f\u4ea4\u6613\uff0c\u5f53\u7136\u5176\u4ed6\u7684\u4e00\u822c\u4e0d\u5177\u5907\u7834\u574f\u6027\u7684\u4ea4\u4e92\u4e5f\u53ef\u4ee5\uff0c\u4f8b\u5982 \u8bfb\u53d6 \u6570\u636e \u3002"),(0,n.kt)("h4",{id:"22141-helpcomponent"},"2.2.14.1 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h3",{id:"2215-components"},"2.2.15 Components"),(0,n.kt)("h4",{id:"22151-neuralcomponent"},"2.2.15.1 NeuralComponent"),(0,n.kt)("h4",{id:"22152-tagcomponent"},"2.2.15.2 TagComponent"),(0,n.kt)("h4",{id:"22153-realityidcomponent"},"2.2.15.3 RealityIDComponent"),(0,n.kt)("h4",{id:"22154-helpcomponent"},"2.2.15.4 HelpComponent"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u672a\u77e5\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e1c\u897f\u90fd\u662f\u672a\u77e5\u7684\uff0c\u5f53\u9762\u5bf9\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f53\u65f6\uff0c\u9700\u8981\u80fd\u591f\u968f\u65f6\u968f\u5730\u83b7\u53d6\u6559\u7a0b\uff0c\u8bf4\u660e\u600e\u6837\u4e0e\u4e4b\u4ea4\u4e92\u4ee5\u53ca\u5e26\u6765\u7684\u5f71\u54cd"),(0,n.kt)("h4",{id:"22155-deltacomponent"},"2.2.15.5 DeltaComponent"),(0,n.kt)("p",null,"\u53c2\u89c12.2.11.3\u8282\u3002"),(0,n.kt)("h3",{id:"2216-\u6700\u4f73\u5b9e\u8df5"},"2.2.16 \u6700\u4f73\u5b9e\u8df5"),(0,n.kt)("h4",{id:"22161-more-granular-is-better"},"2.2.16.1 more granular is better"),(0,n.kt)("p",null,'Bevy has a smart scheduling algorithm that runs your systems in parallel as much as possible. It does that automatically, when your functions don\'t require conflicting access to the same data. Your game will scale to run on multiple CPU cores "for free"; that is, without requiring extra development effort from you.'),(0,n.kt)("p",null,"To improve the chances for parallelism, you can make your data and code more granular. Split your data into smaller types / ",(0,n.kt)("inlineCode",{parentName:"p"},"struct"),"s. Split your logic into multiple smaller systems / functions. Have each system access only the data that is relevant to it. The fewer access conflicts, the faster your game will run."),(0,n.kt)("p",null,"The general rule of thumb for Bevy performance is: more granular is better."),(0,n.kt)("h4",{id:"22162-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.16.2 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("p",null,"\u53c2\u89c12.2.7.1\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2217-\u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"},"2.2.17 \u5173\u4e8e\u6570\u636e\u7684\u672c\u8d28"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u662f\u4e0d\u53d8\u7684\uff0c\u4f46\u662f\u6570\u636e\u7ed3\u6784\u662f\u53d8\u5f97\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u6570\u636e\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u8fd9\u5c31\u5bfc\u81f4\u597d\u50cf\u4e00\u4e2a\u6e38\u620f\u7684\u6570\u636e\u662f\u4e0d\u53ef\u7a7a\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u4e0e\u6570\u636e\u6216\u8005\u6570\u636e\u7c7b\u578b\u5e94\u8be5\u662f\u89e3\u8026\u7684\uff0c\u6682\u4e14\u79f0\u4e4b\u4e3a\u6570\u636e\u6cdb\u578b"),(0,n.kt)("li",{parentName:"ul"},"AI\u7f16\u8bd1\u5668\u6216\u8005AI\u8ba1\u7b97\u5e73\u53f0\u80fd\u591f\u5927\u529b\u53d1\u5c55\uff0c\u6a21\u5757\u5316\uff0c\u5f88\u597d\u7684\u4f18\u5316\uff0c\u662f\u56e0\u4e3aAI\u7684\u6570\u636e\u7ed3\u6784\u7279\u5f81\u5f88\u660e\u663e\uff0c\u6216\u8005\u62bd\u8c61\u5f97\u5f88\u597d"),(0,n.kt)("li",{parentName:"ul"},"\u628a\u6570\u636e\u62bd\u8c61\u51fa\u6765\uff0c\u624d\u66f4\u5bb9\u6613\u770b\u6e05\u903b\u8f91\u7684\u672c\u8d28\uff0c\u6bd4\u5982\u6613\u4e8e\u7ba1\u7406\uff0c\u4f8b\u5982\u80fd\u591f\u5224\u65ad\u54ea\u4e9b\u903b\u8f91\u53ef\u4ee5\u5e76\u884c\uff0c\u4e0d\u7136\u903b\u8f91\u9690\u85cf\u4e8e\u4e00\u56e2\u4e71\u9ebb\u4e4b\u4e2d\uff0c\u4eba\u548c\u8ba1\u7b97\u673a\u90fd\u4e0d\u5bb9\u6613\u8bc6\u522b\u5176\u4e2d\u7684\u79e9\u5e8f")),(0,n.kt)("h4",{id:"22171-\u6570\u636e\u6cdb\u578b"},"2.2.17.1 \u6570\u636e\u6cdb\u578b"),(0,n.kt)("p",null,"\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u6709\u4e9b\u65b9\u6cd5\uff0c\u9053\u7406\u6216\u8005\u903b\u8f91\uff0c\u4ed6\u4eec\u5bf9\u8bb8\u591a\u4e0d\u540c\u7684\u6570\u636e\u6216\u4e8b\u7269\u90fd\u662f\u76f8\u901a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u65b9\u6cd5\u5e94\u7528\u5728\u4e0d\u540c\u7684\u9886\u57df\uff0c\u6bd4\u5982\u4e00\u8f86\u8f66\u5b50\uff0c\u4ed6\u5176\u5b9e\u53ef\u4ee5\u88c5\u4efb\u4f55\u4e1c\u897f\uff0c\u4f46\u662f\u5728\u7a0b\u5e8f\u5458\uff0c\u4e00\u4e2a\u5bf9\u8c61\u6240\u80fd\u5904\u7406\u6570\u636e\u5374\u5f80\u5f80\u5305\u542b\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f7f\u5f97\u65b9\u6cd5\u7684\u5904\u7406\u4e0d\u591f\u901a\u7528"),(0,n.kt)("p",null,"\u53ea\u8981\u903b\u8f91\u4e0a\u80fd\u591f\u4fdd\u8bc1\u5408\u7406\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u7531\u7528\u6237\u786e\u5b9a\uff0c\u90a3\u4e48\u4e00\u4e2a\u903b\u8f91\u5e94\u8be5\u53ef\u4ee5\u4f5c\u7528\u5728\u5177\u6709\u4e0d\u540c\u610f\u4e49\u7684\u76f8\u540c\u6570\u636e\u7c7b\u578b\u4e0a\uff0c\u53ea\u8981\u7528\u6237\u6307\u5b9a\u597d\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u79cd\u65b0\u578b\u6cdb\u578b")),(0,n.kt)("p",null,"\u7f16\u7a0b\u8bed\u8a00\u4e2d\u5b9e\u73b0\u6cdb\u578b\u6765\u9488\u5bf9\u53d8\u5316\u7684\u7c7b\u578b\u8fdb\u884c\u81ea\u9002\u5e94\u6216\u8005\u8fd0\u884c\u65f6\u89e3\u6790\uff0c\u8fd9\u4e9b\u7c7b\u578b\u901a\u5e38\u5177\u6709\u7c7b\u4f3c\u7684\u5904\u7406\u6d41\u7a0b\u6216\u64cd\u4f5c"),(0,n.kt)("p",null,"\u4f46\u6cdb\u578b\u672c\u8d28\u4e0a\u662f\u7f16\u7a0b\u7684\u8303\u7574\uff0c\u8fdb\u4e00\u6b65\uff0c\u5b83\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u4e3a\u4e86\u8282\u7701\u91cd\u590d\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u662f\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\uff0c\u4f46\u8fd0\u884c\u65f6\u63a8\u5bfc\u7c7b\u578b\u7684\u9700\u6c42\u5f80\u5f80\u662f\u7531\u4e8e\u4e0a\u9762\u4e00\u6761\u4e3a\u4e86\u907f\u514d\u4ee3\u7801\u91cd\u590d\u800c\u5bfc\u81f4\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u4e5f\u6709\u5355\u7eaf\u662f\u4e3a\u4e86\u652f\u6301\u53d8\u5316\u7684\u7c7b\u578b\uff0c\u6216\u8005\u7c7b\u578b\u4f5c\u4e3a\u53d8\u91cf\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\uff0c\u6cdb\u578b\u7684\u5b9a\u4e49\u53cd\u800c\u662f\u4e3a\u4e86\u8fd9\u4e2a\u670d\u52a1")),(0,n.kt)("p",null,"\u7c7b\u578b\u53d8\u91cf"),(0,n.kt)("p",null,"\u5b9e\u4f53\u53d8\u91cf"),(0,n.kt)("p",null,"\u903b\u8f91\u53d8\u91cf"),(0,n.kt)("p",null,"public Global.HP as hp"),(0,n.kt)("p",null,"public Global.Health as hp"),(0,n.kt)("p",null,"\u5c06\u53d8\u91cf\u7684\u903b\u8f91\u6620\u5c04\u4e0e\u53d8\u91cf\u540d\u533a\u5206\uff0c\u5728\u4fdd\u6301\u903b\u8f91\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u5904\u7406\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u8fd9\u91cc\u201c\u903b\u8f91\u201d\u672c\u8eab\u6210\u4e3a\u4e86\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u81f3\u4e0d\u540c\u7684\u8d44\u6e90\u7c7b\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6cdb\u578b\u8981\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u5219\u975e\u5e38\u590d\u6742\uff0c\u4f60\u9700\u8981\u628a\u6240\u6709\u53d8\u91cf\u90fd\u8f6c\u5316\u4e3a\u5bf9\u8c61\uff0c\u5e76\u5b9a\u4e49\u63a5\u53e3\uff0c\u7136\u800c\u8fd9\u79cd\u63a5\u53e3\u975e\u5e38\u96be\u5b9a\u4e49\uff0c\u56e0\u4e3a\u540c\u6837\u7684\u540d\u79f0\u53ef\u4ee5\u7528\u505a\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u5e76\u4e14\u8fd9\u79cd\u63a5\u53e3\u662f\u5bb9\u6613\u53d8\u5316\u7684"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u6570\u636e\u662f\u4e0d\u4f1a\u53d8\u5316\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e14\u6e38\u620f\u4e2d\u7684\u903b\u8f91\u901a\u5e38\u4fee\u6539\u7684\u8d44\u6e90\u7684\u6570\u91cf\u662f\u6bd4\u8f83\u6709\u9650\u7684\uff0c\u901a\u5e381\uff0c2\u4e2a\uff0c\u6216\u80053\u4e2a\uff0c\u4ee5\u4e0a\u7684\u5f88\u5c11\u4e86")),(0,n.kt)("p",null,"\u4e00\u79cd\u4e0d\u9700\u8981\u7ea6\u5b9a\u7c7b\u578b\u7684\u6cdb\u578b\uff0c\u53ea\u8981\u6570\u636e\u7ed3\u6784\u7c7b\u578b\u5339\u914d\u4e00\u6837\uff0c\u5e76\u4e14\u8fd9\u6837\u7c7b\u578b\u7684\u68c0\u67e5\u6765\u6e90\u4e8e\u7b26\u53f7\u8868\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6"),(0,n.kt)("p",null,"\u53ea\u9488\u5bf9\u7b80\u5355\u7ed3\u6784"),(0,n.kt)("p",null,"\u590d\u6742\u7ed3\u6784\u4f53\uff0c\u91cc\u9762\u7684\u5f15\u7528\u540d\u79f0\u6bd4\u8f83\u590d\u6742\uff0c\u9664\u975e\u50cfLua\u4e00\u6837\uff0c\u6309\u7d22\u5f15\uff0c\u4f46\u662f\u7d22\u5f15\u53c8\u5f3a\u8c03\u4e86\u987a\u5e8f\uff0c\u987a\u5e8f\u901a\u5e38\u9690\u85cf\u5728\u903b\u8f91\u5f53\u4e2d\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u987a\u5e8f\u5012\u662f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u8bf4\u660e\u4e66\u8bf4\u660e"),(0,n.kt)("h4",{id:"22172-\u63a5\u53e3\u534f\u8bae\u53c2\u6570\u6570\u636e"},"2.2.17.2 \u63a5\u53e3\u3001\u534f\u8bae\u3001\u53c2\u6570\u3001\u6570\u636e"),(0,n.kt)("p",null,"\u63a5\u53e3\u662f\u7528\u6765\u4fdd\u8bc1\u7c7b\u4e4b\u95f4\u534f\u4f5c\u7684\u534f\u8bae\uff0c\u8fd9\u4e2a\u534f\u8bae\u6ca1\u95ee\u9898\uff0c\u5b83\u4fdd\u8bc1\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("p",null,"\u4f46\u662f\u5728\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u9664\u4e86\u534f\u8bae\uff0c\u5b83\u8fd8\u591a\u4e86\u4e00\u79cd\u8eab\u4efd\uff0c\u5145\u5f53\u7c7b\u578b\uff0c\u7c7b\u578b\u88ab\u7528\u4e8e\u5e2e\u52a9\u8bed\u8a00\u8fdb\u884c\u68c0\u67e5\uff0c\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5408\u6cd5\u6027"),(0,n.kt)("p",null,"\u4f46\u8fd9\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9700\u6c42\uff0c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u534f\u8bae\u7684\u9700\u6c42\uff0c\u6bd4\u5982\uff0c\u5728\u73b0\u5b9e\u4e2d\uff0cA\u548cB\u534f\u4f5c\uff0c\u5b83\u4eec\u90fd\u4f1a\u81ea\u5df1\u9075\u5faa\u4e00\u79cd\u7b2c\u4e09\u65b9\u6807\u51c6\uff0cA\u548cB\u4e4b\u95f4\u4e8b\u524d\u4e0d\u9700\u8981\u76f8\u4e92\u534f\u5546\uff0c\u5b83\u4eec\u53ef\u4ee5\u4e0e\u4efb\u610f\u9075\u5faa\u6807\u51c6\u7684\u5b9e\u4f53\u4e4b\u95f4\u8fdb\u884c\u4ea4\u4e92\uff0c\u5c31\u7b97A\u548cB\u6700\u7ec8\u53d1\u73b0\u5b83\u4eec\u9075\u5faa\u7684\u6807\u51c6\u7248\u672c\u4e0d\u4e00\u6837\uff0c\u4f46\u662f\u5927\u591a\u6570\u60c5\u51b5\u662f\u4e00\u6837\u7684"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u7279\u70b9\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u540c\u5728\u4e8eA\u548cB\u4e8b\u524d\u5b8c\u5168\u4e92\u4e0d\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"A\u548cB\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u90fd\u80fd\u76f8\u4e92\u534f\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5f80\u5f80\u662f\u6765\u81ea\u72ec\u7acb\u7684\u7b2c\u4e09\u65b9")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u5f80\u5f80\u9700\u8981\u5f15\u5165\u63a5\u53e3\u58f0\u660e\uff0c\u8fd9\u79cd\u8026\u5408\u4e0d\u5149\u662f\u534f\u8bae\u672c\u8eab\uff0c\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u534f\u8bae\u5916\u7684\u8ddf\u7a0b\u5e8f\u76f8\u5173\u7684\u4e1c\u897f\uff0c\u4f8b\u5982\u7279\u5b9a\u7684\u7a0b\u5e8f\u5305\u3001\u7b7e\u540d\u7684\u987a\u5e8f\uff0c\u751a\u81f3\u6709\u65f6\u5019\u4f9d\u8d56\u7684\u987a\u5e8f\uff0c\u66f4\u7cdf\u7cd5\u7684\u662f\uff0c\u8fd8\u5fc5\u987b\u628a\u8fd9\u4e9b\u5185\u5bb9\u63d2\u5165\u5230\u4ee3\u7801\u4e2d"),(0,n.kt)("p",null,"\u4f60\u5fc5\u987b\u4ece\u90a3\u4e2a\u63a5\u53e3\u7ee7\u627f\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u9075\u5faa\u4e00\u4e2a\u63a5\u53e3\u534f\u8bae"),(0,n.kt)("p",null,"\u5373\u4f7f\u4f60\u6709\u81ea\u5df1\u7684\u65b9\u6cd5\u505a\u4e86\u534f\u8bae\u4e00\u6837\u7684\u4e8b\u60c5\uff0c\u8fd9\u8fd8\u4e0d\u591f\uff0c\u4f60\u5fc5\u987b\u628a\u4ee3\u7801\u79fb\u5230\u63a5\u53e3\u65b9\u6cd5\u3001\u5305\u88c5\u4e00\u4e0b\u7b49\u7b49\uff0c\u4f60\u7684\u4fee\u6539\u4ee3\u7801"),(0,n.kt)("p",null,"\u5728\u9075\u5faa\u534f\u8bae\u4e4b\u5916\uff0c\u5f15\u5165\u4e86\u4e00\u4e9b\u989d\u5916\u7684\u8d1f\u62c5"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff1a\u534f\u8bae\u901a\u5e38\u5173\u6ce8\u6570\u636e\uff0c\u4f60\u80fd\u628a\u8fd9\u4e2a\u6570\u636e\u8fdb\u884c\u5904\u7406\uff0c\u6bd4\u5982\u6211\u4e70\u4e86\u4e00\u79cd\u7279\u5b9a\u7684\u539f\u6750\u6599\uff0c\u6211\u62ff\u8fc7\u6765\u8fdb\u884c\u52a0\u5de5\uff0c\u7136\u540e\u751f\u4ea7\u53e6\u4e00\u79cd\u6750\u6599\uff0c\u5356\u7ed9\u5176\u4ed6\u5382\u5bb6\uff0c\u6211\u4eec\u7ea6\u5b9a\u7684\u534f\u8bae\u662f\u539f\u6750\u6599\u7684\u89c4\u683c\u548c\u54c1\u7c7b\uff0c\u4f46\u4e0d\u662f\u6211\u4eec\u52a0\u5de5\u7684\u65b9\u6cd5\u6216\u8005\u6b65\u9aa4\uff0c\u6211\u7684\u65b9\u6cd5\u548c\u6d41\u7a0b\u968f\u65f6\u53ef\u4ee5\u53d8\u52a8\uff0c\u53ea\u8981\u6211\u8f93\u5165\u548c\u8f93\u51fa\u7684\u89c4\u683c\u4e0d\u53d8"),(0,n.kt)("p",null,"\u5728\u7a0b\u5e8f\u63a5\u53e3\u4e2d\uff0c\u672c\u610f\u4e5f\u662f\u5173\u6ce8\u8f93\u5165\u8f93\u51fa\u7684\u6570\u636e\u89c4\u683c\uff0c\u8fd9\u672c\u53ef\u4ee5\u4ec5\u901a\u8fc7\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u5373\u53ef\uff0c\u4f46\u662f\u7a0b\u5e8f\u9700\u8981\u4fdd\u8bc1\u8fd0\u884c\u65f6\u5bf9\u8c61\u521d\u59cb\u5316\u3001\u53d8\u91cf\u8d4b\u503c\u3001\u53d8\u91cf\u7684\u5408\u6cd5\u6027\u7b49\u7b49\u5404\u79cd\u539f\u56e0\uff0c\u4ed6\u628a\u8f93\u5165\u8f93\u51fa\u6570\u636e\u548c\u65b9\u6cd5\u653e\u5230\u4e86\u4e00\u8d77\uff0c\u8fd9\u91cc\u9762\u4e5f\u6709\u66f4\u91cd\u8981\u7684\u539f\u56e0\u662f\u5b9e\u65f6\u6027\u548c\u987a\u5e8f\uff1a\u8c03\u7528\u65b9\u9700\u8981\u7acb\u5373\u83b7\u53d6\u8fd4\u56de\u7ed3\u679c"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u7684\u534f\u8bae\u7ea6\u5b9a\u7684\u66f4\u50cf\u662f\u65b9\u6cd5\u800c\u4e0d\u662f\u6570\u636e\uff0c\u53c8\u52a0\u4e0a\u7f16\u8bd1\u5668\u7684\u7c7b\u578b\u7cfb\u7edf\u7b49\u539f\u56e0\uff0c\u534f\u8bae\u88ab\u6df1\u5ea6\u8026\u5408\u5728\u7cfb\u7edf\u4e2d\uff0c\u589e\u52a0\u4e86\u590d\u6742\u6027"),(0,n.kt)("p",null,"CreationXR\u4ec5\u5173\u6ce8\u6570\u636e\u53ca\u5176\u7ed3\u6784\uff0c\u5e76\u4e14\u901a\u8fc7\u6e38\u620f\u7279\u6709\u7684Update\u673a\u5236\u4e5f\u80fd\u4fdd\u8bc1\u8fd4\u56de\u503c\u88ab\u7acb\u5373\u53d6\u5f97\uff0c\u4f46\u662f\u5b83\u5f31\u5316\u4e86\u5bf9\u65b9\u6cd5\u76f8\u5173\u7684\u4f9d\u8d56\uff0c\u800c\u6570\u636e\u53ef\u4ee5\u901a\u8fc7\u516c\u5171\u7b26\u53f7\u8868\u5b9a\u4e49\uff0c\u4e0d\u7ba1\u662f\u57fa\u672c\u7c7b\u578b\u8fd8\u662f\u805a\u5408\u7c7b\u578b"),(0,n.kt)("p",null,"\u8fd9\u79cd\u89e3\u8026\u5927\u5927\u7684\u7b80\u5316\u4e86\u7a0b\u5e8f\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u3001\u4e5f\u589e\u52a0\u4e86\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u53ef\u4ee5\u968f\u65f6\u589e\u52a0\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u6216\u8005\u6267\u884c\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u4f46\u5176\u4ed6\u90e8\u5206\u5b8c\u5168\u4e0d\u53d7\u5f71\u54cd"),(0,n.kt)("p",null,"\u5f53\u7136\u5e26\u6765\u7684\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\u662f\uff1a\u8fd9\u79cd\u9690\u5f0f\u7684\u53c2\u6570\u4f20\u9012\u5bfc\u81f4\u7ec4\u4ef6\u7684\u5b9e\u9645\u76ee\u6807\u5e76\u4e0d\u662f\u5f88\u660e\u786e\uff0c\u56e0\u4e3a\u5b83\u5f88\u6709\u53ef\u80fd\u505a\u4e86\u4e00\u4e9b\u4e0d\u53ef\u63a7\u7684\u4e8b\u60c5\uff0c\u8fd9\u79cd\u9700\u8981\u5bf9\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u63cf\u8ff0\uff0c\u5c31\u50cf\u4e00\u4e2a\u4ea7\u54c1\u8bf4\u660e\u4e66\uff0c\u4ed6\u5230\u5e95\u505a\u4e86\u4ec0\u4e48\uff0c\u8fd9\u6837\u7684\u8bf4\u660e\u4e66\u662f\u666e\u901a\u7528\u6237\u53ef\u4ee5\u7406\u89e3\u7684\uff0c\u8bed\u4e49\u5316\u7684"),(0,n.kt)("h3",{id:"2218-\u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"},"2.2.18 \u6e38\u620f\u7a0b\u5e8f\u8ddf\u4f20\u7edf\u7a0b\u5e8f\u7684\u533a\u522b"),(0,n.kt)("h4",{id:"22181-update\u673a\u5236"},"2.2.18.1 Update\u673a\u5236"),(0,n.kt)("p",null,"Update\u662f\u6e38\u620f\u7684\u6838\u5fc3\u9a71\u52a8\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u65e2\u662f\u5f62\u6210\u52a8\u6001\u4e16\u754c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\u53c8\u7531\u4e8e\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5728\u5b9e\u65f6\u66f4\u65b0\u81ea\u5df1\u7684\u72b6\u6001\uff0c\u56e0\u6b64\u4f7f\u5f97\u7cfb\u7edf\u4e4b\u95f4\u7684\u89e3\u8026\u53d8\u5f97\u53ef\u80fd\uff0c\u5373\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u5904\u7406\u81ea\u5df1\u7684\u72b6\u6001")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u53ea\u64cd\u4f5c\u4e1a\u52a1\u89c4\u5219\uff0c\u6ca1\u6709\u5b9e\u4f53\u5316\uff0c\u4ed6\u4eec\u901a\u5e38\u9762\u5bf9\u7684\u662f\u6570\u636e\uff0c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u79cd\u6570\u636e\u901a\u5e38\u53cd\u5e94\u7684\u662f\u89c4\u5219\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f97\u6982\u5ff5"),(0,n.kt)("h4",{id:"22182-\u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"},"2.2.18.2 \u7a0b\u5e8f\u5927\u5c0f\u4e0e\u7a7a\u95f4\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u7a0b\u5e8f\u5305\u5927\u5c0f\u90fd\u6bd4\u8f83\u5c0f\uff0c\u4f8b\u5982\u4e00\u4e2a\u624b\u673aapp\u53ea\u6709\u51e0\u5341\u6700\u591a\u4e0a\u767eM\uff0c\u4f46\u662f\u4e00\u4e2a\u6e38\u620f\u5f80\u5f80\u90fd\u591a\u5927\u51e0\u4e2aG\uff0c\u4e3b\u673a\u6e38\u620f\u751a\u81f3\u51e0\u5341\u5230\u4e0a\u767eG\u3002"),(0,n.kt)("p",null,"\u4e0d\u5149\u7a0b\u5e8f\u5305\u7684\u5927\u5c0f\uff0c\u8ba1\u7b97\u65f6\u52a0\u8f7d\u5230\u663e\u5b58\u7684\u6570\u636e\u91cf\u66f4\u662f\u5dee\u5f02\u5de8\u5927 \uff0c\u4f8b\u5982\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u53ea\u9700\u8981\u52a0\u8f7d\u5c11\u91cf\u6709\u5173\u7684\u6570\u636e\uff0c\u5e38\u9a7b\u5185\u5b58\u4e2d\u7684\u6570\u636e\u901a\u5e38\u4e0d\u591a\uff0c\u6bcf\u4e2a\u4e1a\u52a1\u903b\u8f91\u76f8\u5173\u7684\u6570\u636e\u901a\u5e38\u90fd\u6bd4\u8f83\u72ec\u7acb\uff0c\u5373\u4f7f\u5c11\u91cf\u5355\u4e2a\u903b\u8f91\u9700\u8981\u7684\u6570\u636e\u91cf\u6bd4\u8f83\u5927\uff0c\u4e5f\u4ec5\u9700\u5728\u8ba1\u7b97\u7684\u65f6\u5019\u5373\u4f7f\u52a0\u8f7d\u5c31\u50cf\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u901a\u5e38\u5bf9\u5b9e\u65f6\u6027\u8981\u6c42\u6ca1\u90a3\u4e48\u9ad8\u3002"),(0,n.kt)("p",null,"\u800c\u6e38\u620f\u7a0b\u5e8f\u5185\u7684\u6570\u636e\u901a\u5e38\u9ad8\u5ea6\u5173\u8054\uff0c\u4e14\u5305\u542b\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\uff0c\u6240\u4ee5\u5f80\u5f80\u6570\u636e\u4f1a\u975e\u5e38\u5927\uff0c\u4e14\u5927\u591a\u9700\u8981\u5e38\u9a7b\u5185\u5b58\uff0c\u4f7f\u5f97\u73b0\u4ee3\u6e38\u620f\u7a0b\u5e8f\u7684\u663e\u5b58\u5f80\u5f80\u662f\u4e0d\u591f\u7684\u3002\u7a7a\u95f4\u6570\u636e\u7ed3\u6784\u4e0d\u4ec5\u610f\u5473\u7740\u6bd4\u4e00\u822c\u7684\u6570\u636e\u91cf\u8981\u5927\uff0c\u800c\u4e14\u4e3a\u4e86\u52a0\u901f\u8ba1\u7b97\uff0c\u901a\u5e38\u8fd8\u9700\u8981\u5305\u542b\u5f88\u591a\u5197\u4f59\u7684\u6570\u636e\u548c\u6570\u636e\u7ed3\u6784\u6765\u8fbe\u5230\u5b9e\u65f6\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u672a\u6765\u7684\u865a\u62df\u5f00\u653e\u5927\u4e16\u754c\u9700\u8981\u66f4\u5927\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u53ef\u80fd\u8fdc\u8fdc\u8d85\u51fa\u5355\u53f0\u8ba1\u7b97\u673a\u80fd\u591f\u627f\u8f7d\u7684\u663e\u5b58\u5927\u5c0f\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8fd9\u6837\u7684\u5927\u4e16\u754c\u5c06\u5f88\u96be\u6709\u6548\u5730\u8fd0\u884c\uff0c\u9700\u8981\u65b0\u7684\u6280\u672f\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u6269\u5c55\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"22183-\u67b6\u6784\u590d\u6742\u5ea6"},"2.2.18.3 \u67b6\u6784\u590d\u6742\u5ea6"),(0,n.kt)("h3",{id:"2219-\u72b6\u6001\u673a\u884c\u4e3a\u6811\u4e0eai"},"2.2.19 \u72b6\u6001\u673a\u3001\u884c\u4e3a\u6811\u4e0eAI"),(0,n.kt)("h3",{id:"2220-\u5b89\u5168"},"2.2.20 \u5b89\u5168"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8ba9\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u8fd0\u884c\uff0c\u4ee5\u53ca\u6765\u81ea\u4e0d\u540c\u7528\u6237\u7684\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u8fdb\u884c\u4ea4\u4e92\uff0c\u5b89\u5168\u6027\u662f\u4e00\u4e2a\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002\u8fd9\u91cc\u7684\u5b89\u5168\u6027\u6d89\u53ca\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801bug\u5f15\u8d77\u7684\u7a0b\u5e8f\u5d29\u6e83"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u84c4\u610f\u7834\u574f\u7cfb\u7edf\u548c\u4ed6\u4eba\u6570\u636e")),(0,n.kt)("p",null,"\u540e\u9762\u901a\u8fc7\u4e25\u683c\u63a7\u5236\u7a0b\u5e8f\u5b9e\u4f8b\u5316\u5bf9\u8c61\u6765\u5b9e\u73b0\uff0c\u901a\u8fc7Creation Script\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u5206\u914d\u81ea\u5df1\u7684\u5185\u5b58"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u751a\u81f3\u65e0\u6cd5\u6784\u9020\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u8bbf\u95ee\u7cfb\u7edf\u5e26\u6709\u4f17\u591a\u6570\u636e\u7684\u7ed3\u6784\uff0c\u4f8b\u5982\u573a\u666f\u6811")),(0,n.kt)("p",null,"\u6240\u6709\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u63a5\u53e3\u90fd\u8981\u4fdd\u8bc1\u7528\u6237\u548c\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("h3",{id:"2221-\u7ec4\u5408\u4e0e\u4f9d\u8d56"},"2.2.21 \u7ec4\u5408\u4e0e\u4f9d\u8d56"),(0,n.kt)("h4",{id:"22211-\u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"},"2.2.21.1 \u76f8\u5173\u53c2\u6570\u805a\u96c6\u5230\u4e00\u4e2a\u5bf9\u8c61"),(0,n.kt)("p",null,"\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\uff1a\u5c06\u5d4c\u5957\u7684\u51fd\u6570\u7ed3\u6784\u8f6c\u5316\u4e3a\u6241\u5e73\u7ed3\u6784\uff0c\u5176\u4ee3\u4ef7\u662f\u5b58\u5728\u5927\u91cf\u4e2d\u95f4\u53d8\u91cf\u5c5e\u6027\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u53d8\u91cf\u4e0d\u80fd\u7b97\u662f\u7834\u574f\u4e86\u7eaf\u51fd\u6570\u7684\u7ed3\u6784\uff0c\u4f46\u662f\u4ed6\u4eec\u5e26\u6765\u4e00\u5b9a\u7684\u5e72\u6270\uff0c\u5e76\u4e14\u5927\u91cf\u7684\u4e2d\u95f4\u53d8\u91cf\u5982\u679c\u90fd\u5b58\u50a8\u8d77\u6765\uff0c\u65e2\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u4e5f\u6d6a\u8d39\u5185\u5b58\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u5728RealityIS\u4e2d\u7ec4\u4ef6\u5c5e\u6027\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u6240\u5c5e\u5173\u7cfb\uff0c\u5b83\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u62e5\u6709\u7684\uff0c\u4e5f\u4e0d\u662f\u7531\u5355\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u7684\uff0c\u8fd9\u4e5f\u662fRealityIS\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u4e0d\u53ef\u80fd\u7b80\u5355\u5730\u901a\u8fc7\u5728\u5c5e\u6027\u4e0a\u52a0\u5165\u4e00\u4e9b\u53d8\u91cfattribute \u6765\u58f0\u660e\u5c5e\u6027\u662f\u5426\u5e94\u8be5\u88ab\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u5c5e\u6027\u5e76\u4e0d\u662f\u5728\u4f7f\u7528\u7684\u5730\u65b9\u5b9a\u4e49\u7684\uff0c\u5373\u4e0d\u662f\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u7684\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u7a0b\u4e5f\u662f\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\uff0cRealityIS\u5c5e\u6027\u5b9a\u4e49\u7684\u5730\u65b9\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u8fd9\u662f\u552f\u4e00\u5b9a\u4e49\u7684\u5730\u65b9\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9battribute \u5b9a\u4e49\u5728\u7b26\u53f7\u8868\u4e2d\uff0c\u5373\u53ea\u6709\u7b26\u53f7\u8868\u8981\u6c42\u5b58\u50a8\u7684\u53d8\u91cf\u624d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u5176\u4ed6\u6570\u636e\u90fd\u8ba4\u4e3a\u662f\u4e2d\u95f4\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e5f\u4e0d\u80fd\u4e3a\u4e86\u6301\u4e45\u5316\u628a\u4e2d\u95f4\u53d8\u91cf\u90fd\u653e\u5230\u79c1\u6709\u8868\u4e2d\uff0c\u90a3\u6837\u5c31\u4e0d\u5177\u5907\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u901a\u4fe1\u7684\u80fd\u529b\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u7684\u4e3b\u8981\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u4e3a\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u6240\u6709\u9700\u8981\u4e92\u64cd\u4f5c\u7684\u90fd\u9700\u8981\u5b9a\u4e49\u5728\u5168\u5c40\u8868\u4e2d\uff0c\u5230\u5168\u5c40\u8868\u4e5f\u6709\u4e0d\u9700\u8981\u6301\u4e45\u5316\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4e2d\u95f4\u53d8\u91cf\u5b58\u5728\u4e8e\u79c1\u6709\u8868\u4e5f\u53ef\u4ee5\uff0c\u4f46\u662f\u4ed6\u53ef\u80fd\u9700\u8981\u5173\u8054\u7ec4\u4ef6\uff0c\u4f7f\u5f97\u8ba1\u7b97\u7684\u6700\u7ec8\u7ed3\u679c\u662f\u4e00\u4e2a\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u7684\u5c5e\u6027\u3002"),(0,n.kt)("h4",{id:"22212-\u5173\u8054\u7ec4\u4ef6"},"2.2.21.2 \u5173\u8054\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\u6211\u4eec\u662f\u5426\u5e94\u8be5\u8981\u6c42\u79c1\u6709\u8868\u4e2d\u7684\u7b26\u53f7\u603b\u662f\u4e0d\u5e94\u8be5\u6301\u4e45\u5316\uff0c\u8fd9\u6837\u5c31\u4f1a\u66f4\u52a0\u8feb\u4f7f\u5f00\u53d1\u8005\u9488\u5bf9\u516c\u5171\u53ef\u4ea4\u4e92\u5c5e\u6027\u8fdb\u884c\u5f00\u53d1\uff0c\u5426\u5219\u5f00\u53d1\u7684\u7ec4\u4ef6\u5c06\u6ca1\u6709\u4efb\u4f55\u7528\u5904\u3002"),(0,n.kt)("p",null,"\u8fd9\u5e26\u6765\u4e24\u4e2a\u597d\u5904\uff1a1\u662f\u7ec4\u4ef6\u4e0d\u518d\u4e8e\u5355\u4e2a\u72ec\u7acb\u7ec4\u4ef6\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u800c\u4e14\u4e00\u4e2a\u76f8\u5173\u8054\u7684\u7ec4\uff0c\u8fd9\u6837\u7684\u7ec4\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u7c92\u5ea6\u66f4\u5927\u4e00\u70b9\uff0c2\u662f\u6807\u51c6\u7684\u5730\u4f4d\u66f4\u9ad8\uff0c\u6240\u4ee5\u7ec4\u4ef6\u771f\u6b63\u662f\u5fc5\u987b\u4f9d\u8d56\u4e8e\u6807\u51c6\uff0c\u66f4\u5bb9\u6613\u7ba1\u7406\uff0c\u6574\u4e2a\u7a0b\u5e8f\u673a\u5236\u66f4\u5bb9\u6613\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u7ba1\u4e2d\u95f4\u72b6\u6001\u5982\u4f55\uff0c\u4ed6\u7684\u7b2c\u4e00\u4e2a\u8f93\u5165\uff08\u6216\u8005\u591a\u4e2a\u53c2\u6570\u7684\u5176\u4e2d\u4e4b\u4e00\uff09\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u7136\u540e\u6700\u540e\u4e00\u4e2a\u5199\u5165\u7684\u5c5e\u6027\u4e5f\u5fc5\u987b\u662f\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u4e2d\u95f4\u7684\u5927\u91cf\u5c5e\u6027\u5c5e\u4e8e\u4e2d\u95f4\u5c5e\u6027\uff0c\u6765\u81ea\u79c1\u6709\u8868\uff0c\u4e0d\u4f1a\u88ab\u6301\u4e45\u5316\uff0c\u6240\u6709\u8fd9\u4e00\u8fde\u4e32\u7684\u7ec4\u4ef6\u6210\u4e3a\u5173\u8054\u7ec4\u4ef6\uff0c\u4ed6\u4eec\u5f62\u6210\u4f9d\u8d56\u5173\u7cfb\uff0c\u800c\u6240\u6709\u76f8\u4e92\u4f9d\u8d56\u7684\u7ec4\u5f62\u6210\u4e00\u4e2a\u7eaf\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u4f46\u4e00\u4e2a\u7ec4\u4ef6\u7ec4\u4e2d\u7684\u6240\u6709\u51fd\u6570\u5982\u679c\u5747\u662f\u4f5c\u7528\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5219\u4ed6\u4eec\u53ef\u4ee5\u5408\u5e76\u4e3a\u4e00\u4e2a\u5927\u51fd\u6570\uff0c\u56e0\u4e3a\u53cd\u6b63\u4e2d\u95f4\u8fc7\u7a0b\u522b\u4eba\u65e0\u6cd5\u4ea4\u4e92\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u62c6\u5206\u3002"),(0,n.kt)("p",null,"\u62c6\u5206\u6210\u591a\u4e2a\u4e2d\u95f4\u53d8\u91cf\u9002\u5408\u4e8e\uff1a\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u5206\u5e03\u4e8e\u591a\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u6216\u8005\u8bf4\u7684\u8f93\u5165\u6765\u81ea\u4e8e\u591a\u4e2a\u5b9e\u4f53\uff0c\u8fd9\u79cd\u60c5\u51b5\u5fc5\u987b\u8981\u501f\u7528\u4e2d\u95f4\u53d8\u91cf\u624d\u80fd\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7406\u8bba\u4e0a\u8bf4\uff0c\u53ea\u8981\u8f93\u5165\u5168\u5c40\u7b26\u53f7\u53c2\u6570\u5927\u4e8e\u7b49\u4e8e2\uff0c\u5c31\u9700\u8981\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u4e2d\u95f4\u53d8\u91cf\uff0c\u6765\u8fdb\u884c\u5f52\u5e76\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u4e00\u79cd\u91cd\u8f7d\u7684\u673a\u5236\uff0c\u5982\u679c\u67d0\u4e2a\u5bf9\u8c61\u540c\u65f6\u5305\u542b\u4e86\u591a\u4e2a\u53c2\u6570\uff0c\u53ef\u4ee5\u51cf\u5c11\u4e2d\u95f4\u53d8\u91cf\u7684\u5f52\u5e76\u8fc7\u7a0b\uff0c\u53ef\u80fd\u4f1a\u6709\u4e00\u5b9a\u7a0b\u5ea6\u7684\u6027\u80fd\u63d0\u5347\uff0c\u4f46\u662f\u5bf9\u67b6\u6784\u7b80\u6d01\u6027\u9020\u6210\u7684\u4ee3\u4ef7\u53ef\u80fd\u6709\u70b9\u5927\uff0c\u5e26\u6765\u7f16\u7801\u548c\u8fd0\u884c\u65f6\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5927\u7684\u7ec4\u4ef6\u7ec4\u7531\u591a\u4e2a\u5c0f\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u8fd9\u4e9b\u5c0f\u7ec4\u4ef6\u6784\u6210\u4e00\u4e2a\u8f83\u5927\u903b\u8f91\u7684\u590d\u6742\u7ec6\u8282\uff0c\u800c\u7ec4\u4ef6\u7ec4\u5219\u662f\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u7684\u5355\u4f4d\uff0c\u7ec4\u4ef6\u7ec4\u5185\u5c5e\u4e8e\u5f00\u53d1\u8005\u8fdb\u884c\u7ef4\u62a4\u7684\u5355\u4f4d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5f00\u53d1\u8005\u7684\u7ec4\u4ef6\u662f\u591a\u4e2a\u8f93\u5165\u53c2\u6570\uff0c\u6765\u81ea\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u5219\u4ed6\u5e94\u8be5\u77e5\u9053\u53ea\u6709\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\u7684\u5355\u4e2a\u5bf9\u8c61\u624d\u80fd\u6267\u884c\u8ba1\u7b97\uff0c\u5426\u5219\u4ed6\u5e94\u8be5\u59cb\u7ec8\u5047\u8bbe\u5355\u53d8\u91cf\u8f93\u5165\u7684\u5f62\u6210\uff0c\u901a\u8fc7\u4e2d\u95f4\u53d8\u91cf\u7ec4\u5408\u3002"),(0,n.kt)("h4",{id:"22213-\u7ec4\u4ef6\u987a\u5e8f"},"2.2.21.3 \u7ec4\u4ef6\u987a\u5e8f"),(0,n.kt)("h3",{id:"2222-\u5206\u5e03\u5f0f"},"2.2.22 \u5206\u5e03\u5f0f"),(0,n.kt)("h3",{id:"2223-\u5f02\u5e38"},"2.2.23 \u5f02\u5e38"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u5c06\u4e00\u4e9b\u5b8c\u6574\u7684\u64cd\u4f5c\u5206\u6563\u5230\u591a\u4e2a\u7ec4\u4ef6\u5f53\u4e2d\uff0c\u5355\u4e2a\u7f3a\u4e4f\u539f\u5b50\u6027\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4e0e\u5176\u4ed6\u7ec4\u4ef6\u4e00\u8d77\u6784\u6210\u4e86\u6574\u4e2a\u5b8c\u6574\u8ba1\u7b97\u3002\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u50cfErlang\u90a3\u6837\u91c7\u53d6\u4e22\u5f03\u5355\u4e2a\u8fdb\u7a0b\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\u5728Erlang\u4e2d\u4e00\u4e2a\u8fdb\u7a0b\u5d29\u6e83\u4e86\u5e76\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u8fdb\u7a0b\uff0c\u800c\u4e14Erlang\u5355\u4e2a\u8fdb\u7a0b\u7684\u4efb\u52a1\u6bd4\u8f83\u72ec\u7acb\u3002\u800cRealityIS\u4e2d\u67d0\u4e9b\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u610f\u5473\u7740\u524d\u9762\u67d0\u4e9b\u8ba1\u7b97\u4e5f\u9700\u8981\u53d6\u6d88\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3aRealityIS\u5c06\u91c7\u53d6\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u5f02\u5e38\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u5d29\u6e83\u4e86\uff0c\u6574\u4e2a\u8be5\u5e27\u7684\u6240\u6709\u8ba1\u7b97\u90fd\u9700\u8981\u4e22\u5f03")),(0,n.kt)("p",null,"\u6bd4\u5982\u91c7\u53d6\u54cd\u5e94\u5f0f\uff0c\u5982\u679c\u4e00\u4e2a\u70b8\u5f39\u7206\u70b8\u4e86\uff0c\u4f46\u662f\u540e\u7eed\u5bf9\u70b8\u5f39\u8fdb\u884c\u76f8\u5e94\u7684\u7ec4\u4ef6\u5374\u5d29\u6e83\u4e86\uff0c\u8fd9\u4e2a\u65f6\u5019\u524d\u9762\u7684\u70b8\u5f39\u5c31\u65e0\u6548\u4e86\u3002\u5982\u679c\u662f\u4e00\u4e9b\u5176\u4ed6\u66f4\u91cd\u8981\u7684\u903b\u8f91\u53d1\u751f\uff0c\u8fd9\u6837\u7684\u5f71\u54cd\u5c31\u4f1a\u975e\u5e38\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u6e38\u620f\u7684\u505a\u6cd5\u662f\uff0c\u5f53\u4e00\u4e2a\u5730\u65b9\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u4e86\uff0c\u6e38\u620f\u4f1a\u4ece\u4e00\u4e9b\u56fa\u5b9a\u7684\u5b58\u6863\u8282\u70b9\u6062\u590d\uff0c\u73a9\u5bb6\u9700\u8981\u4ece\u90a3\u4e9b\u56fa\u5b9a\u5b58\u6863\u91cd\u65b0\u5f00\u59cb\u73a9\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u91cd\u590d\u3002"),(0,n.kt)("p",null,"\u91cd\u590d\u80af\u5b9a\u662f\u5fc5\u987b\u7684\uff0c\u95ee\u9898\u662f\u5bf9\u4e8e\u4e00\u4e2a\u6ca1\u6709\u5173\u5361\u7684\u5f00\u653e\u4e16\u754c\uff0c\u5b83\u7684\u5b58\u6863\u8282\u70b9\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u7cfb\u7edf\u9700\u8981\u4e00\u5957\u81ea\u52a8\u5316\u7684\u5b58\u6863\u673a\u5236\u3002"),(0,n.kt)("h4",{id:"22231-\u81ea\u52a8\u5b58\u6863"},"2.2.23.1 \u81ea\u52a8\u5b58\u6863"),(0,n.kt)("p",null,"\u6784\u5efa\u4e00\u4e2a\u5b58\u6863\u673a\u5236\uff0c\u7136\u540e\u5d29\u6e83\u4e4b\u540e\u63d0\u793a\u7528\u6237\u9000\u51fa\uff0c\u5e76\u81ea\u52a8\u56de\u9000\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u5feb\u7167\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u60c5\u51b5\u662f\uff0c\u5c3d\u7ba1\u5f88\u591a\u7528\u6237\u5171\u540c\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\u8fd0\u884c\u7ec4\u4ef6\uff0c\u4f46\u662f\u5927\u90e8\u5206\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1\u8fd8\u90fd\u662f\u5728RealityID\u4e4b\u5185\u7684\uff0c\u6240\u4ee5\u4e00\u822c\u60c5\u51b5\u53ea\u9700\u8981\u9000\u51fa\u5355\u4e2a\u7528\u6237\u5373\u53ef\u3002\u4f46\u4e5f\u6709\u53ef\u80fd\u67d0\u4e2a\u8de8\u7528\u6237\u4e4b\u95f4\u7684\u901a\u4fe1\u4f1a\u5f71\u54cd\u5230\u591a\u4e2a\u7528\u6237\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5185\u5bb9\u662f\u7531\u666e\u901a\u7528\u6237\u521b\u5efa\u7684\uff0c\u6240\u4ee5\u9700\u8981\u907f\u514d\u4f20\u7edf\u6e38\u620f\u8bbe\u7f6e\u7684\u4e13\u95e8\u7684\u5b58\u6863\u8282\u70b9\u7684\u673a\u5236\uff0c\u539f\u56e0\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u5f88\u96be\u6709\u8fd9\u6837\u7684\u80fd\u529b\uff0c\u5b58\u6863\u5f80\u5f80\u662f\u8981\u6253\u5f00\u7a0b\u5e8f\u7684\u7ed3\u6784\u7684\uff0c\u589e\u52a0\u590d\u6742\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u653e\u5f0f\u7684\u4e16\u754c\u5176\u5b9e\u5f88\u96be\u8bbe\u7f6e\u5b58\u6863\u8282\u70b9")),(0,n.kt)("p",null,"\u4f46\u6bcf\u5e27\u5b58\u50a8\u80af\u5b9a\u4ee3\u4ef7\u503c\u5f88\u5927\u7684\uff0c\u6240\u4ee5\u4e5f\u8981\u907f\u514d\u6bcf\u5e27\u5b58\u50a8\u3002"),(0,n.kt)("h4",{id:"22232-\u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"},"2.2.23.2 \u68c0\u6d4b\u5b58\u6863\u5c5e\u6027"),(0,n.kt)("p",null,"\u5f53\u5c5e\u6027\u5b9a\u4e49\u4e3a\u5b58\u6863\u5c5e\u6027\u65f6\uff0c\u5982\u679c\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u7406\u8bba\u4e0a\u8fd9\u4e9b\u4fee\u6539\u90fd\u8981\u5b58\u50a8\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u6bd4\u5982\u73a9\u5bb6\u5728\u653b\u6253\u4e00\u4e2aBoss\uff0c\u8fd9\u5176\u4e2d\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u7cbe\u529b\uff0c\u901a\u5e38\u51e0\u5206\u949f\u751a\u81f3\u5341\u51e0\u5206\u949f\uff0c\u8fd9\u671f\u95f4Boss\u4f1a\u6709\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u73a9\u5bb6\u7684\u52a8\u4f5c\u3001\u52a8\u753b\u72b6\u6001\u3001\u884c\u4e3a\u6811\u7b49\u7b49\u4e5f\u4f1a\u53d1\u751f\u5f88\u591a\u53d8\u5316\u3001\u73af\u5883\u4e2d\u7684\u6811\u6728\u4e5f\u53ef\u80fd\u4e34\u65f6\u88ab\u70b8\u6389\u7b49\u7b49\u3002\u4f46\u5176\u4e2d\u9664\u4e86\u7528\u6237\u4f7f\u7528\u7684\u6280\u80fd\u9053\u5177\u7b49\uff0c\u5176\u4ed6\u5927\u90e8\u5206\u6570\u636e\u90fd\u4e0d\u8981\u5b58\u6863\u3002"),(0,n.kt)("p",null,"Boss\u6218\u5b58\u50a8\u7684\u66f4\u591a\u662f\u4e00\u4e2a\u5927\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5f53\u5176\u4e2d\u51fa\u73b0\u5d29\u6e83\u65f6\uff0c\u73a9\u5bb6\u53ef\u4ee5\u91cd\u65b0\u6253Boss\u3002"),(0,n.kt)("h4",{id:"22233-\u5c5e\u6027\u72ec\u7acb\u5b58\u6863"},"2.2.23.3 \u5c5e\u6027\u72ec\u7acb\u5b58\u6863"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\u5c5e\u6027\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u91c7\u7528\u4f20\u7edf\u7684\u5c5e\u6027\u7ed3\u6784\u8fdb\u884c\u5b58\u50a8\uff0c\u56e0\u4e3a\u90a3\u6837\u5c31\u4f1a\u5b58\u50a8\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f7f\u5176\u5b58\u6863\u65f6\u4f1a\u53d1\u751f\u5e76\u53d1\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u5176\u5b9e\u4f53\u5bf9\u8c61\u5c5e\u6027\u672c\u8eab\u662fTable\u7ed3\u6784\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5411\u5185\u5b58\u8bbf\u95ee\u4e00\u6837\uff0c\u6bcf\u6b21\u4fee\u6539\u4e00\u4e2a\u5c5e\u6027\u4e4b\u540e\uff0c\u8fd9\u4e2a\u5c5e\u6027\u5229\u7528\u865a\u62df\u5185\u5b58\u7cfb\u7edf\u81ea\u52a8\u5b58\u50a8\u5230\u786c\u76d8\uff0c\u7136\u540e\u7b49\u73a9\u5bb6\u9000\u51fa\u6216\u8005\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u518d\u7edf\u4e00\u5b58\u50a8\u5230\u7528\u6237\u7684\u6570\u636e\u5b58\u50a8\u670d\u52a1\u5668\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u5728\u4e91\u7aef\u5b58\u50a8\u7684\u4e5f\u662fTable\uff0c\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2aUSD\u6587\u4ef6\u4e2d\u3002\u5b9e\u9645\u4e0a\u5728\u5185\u5b58\u4e2d\u5b83\u4eec\u4e5f\u4e0d\u5fc5\u5b58\u50a8\u5230\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\uff0c\u4f8b\u5982\u4e00\u4e2a\u6811\u5f62\u7684\u6570\u636e\u7ed3\u6784\u3002\u53ea\u6709\u8fd9\u6837\u624d\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5c06\u4e00\u4e2aIO\u62c6\u5206\u4e3a\u591a\u4e2aIO\uff0c\u53ef\u80fd\u4f1a\u5e26\u6765\u4e00\u5b9a\u6027\u80fd\u635f\u5931\uff0c\u4f46\u662f\u8003\u8651\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e2aIO\u6216\u8005\u5c11\u6570IO\u53ea\u80fd\u91c7\u7528\u5c11\u91cf\u7ebf\u7a0b\uff0c\u5982\u679c\u662f\u5927\u6587\u4ef6\u89e3\u91ca\u4e5f\u4f1a\u5f88\u6162\uff0c\u6ca1\u6cd5\u6709\u6548\u5229\u7528\u591a\u7ebf\u7a0b\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u73b0\u4ee3NoSQL\u6570\u636e\u5e93\u5bf9\u7f13\u5b58\uff0c\u67d0\u4e9b\u67e5\u8be2\u505a\u4e86\u5927\u91cf\u7684\u52a0\u901f\uff0c\u6548\u7387\u8981\u5927\u4e8e\u5355\u7eaf\u7684\u6587\u4ef6\u6216\u6570\u636e\u533a\u67e5\u8be2")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u53ef\u4ee5\u5229\u7528\u5230\u591a\u7ebf\u7a0b\u7684\u4f18\u52bf\uff0c\u53c8\u80fd\u4fdd\u8bc1\u5206\u5e03\u5f0f\u3002"),(0,n.kt)("h4",{id:"22234-\u5b58\u50a8\u65f6\u95f4\u70b9"},"2.2.23.4 \u5b58\u50a8\u65f6\u95f4\u70b9"),(0,n.kt)("p",null,"\u603b\u7684\u6765\u8bf4\uff0c\u6709\u4e24\u4e2a\u5b58\u50a8\u65f6\u95f4\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u7684\u67d0\u4e2a\u7ec4\u4ef6\u8fdb\u7a0b\u5bfc\u81f4\u5d29\u6e83\u65f6")),(0,n.kt)("p",null,"CreationVM\u4f1a\u5305\u542b\u4e24\u4efd\u6570\u636e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4efd\u662f\u6240\u6709\u7ec4\u4ef6\u7684\u5b58\u6863\u6570\u636e")),(0,n.kt)("p",null,"\u5f53\u8fd0\u884c\u65f6\u7ec4\u4ef6\u4fee\u6539\u4e86\u67d0\u4e2a\u5b58\u6863\u5c5e\u6027\uff0c\u8fd9\u4e9b\u503c\u4f1a\u88ab\u8bb0\u5f55\u5728\u5185\u5b58\u4e2d\u3002\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u5e94\u8be5\u4fdd\u8bc1\u4e00\u65e6\u8fd9\u4e9b\u503c\u88ab\u4fee\u6539\uff0c\u5176\u4e4b\u524d\u7684\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\u3001\u539f\u5b50\u6027\u7684\u3001\u4e0d\u53ef\u4fee\u6539\u7684\u3002\u6240\u4ee5\u8fd9\u4e9b\u6570\u636e\u53ef\u4ee5\u88ab\u968f\u65f6\u5199\u5165\u5230\u7528\u6237\u771f\u6b63\u7684\u6570\u636e\u5e93\u6587\u4ef6\u4e2d\u3002"),(0,n.kt)("p",null,"\u53ea\u662f\u56e0\u4e3a\u9891\u7e41\u5199\u5165\u6570\u636e\u5e93\u7684IO\u64cd\u4f5c\uff0c\u6211\u4eec\u9009\u62e9\u5728\u4e00\u4e9b\u5173\u952e\u4e8b\u4ef6\u53d1\u751f\u65f6\u5728\u5199\u5165\u6570\u636e\u5e93\u3002\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\uff0c\u5982\u679cCreationVM\u673a\u5668\u672c\u8eab\u5d29\u6e83\uff0c\u6709\u5bfc\u81f4\u6709\u4e9b\u5c5e\u6027\u6ca1\u6709\u88ab\u5b58\u6863\uff0c\u56e0\u6b64\u4e0b\u6b21\u7528\u6237\u9700\u8981\u91cd\u590d\u6267\u884c\u67d0\u4e9b\u64cd\u4f5c\u3002\u4f46\u662f\u8fd9\u5e76\u6ca1\u6709\u592a\u5927\u95ee\u9898\uff0c\u6e38\u620f\u73a9\u5bb6\u5df2\u7ecf\u4e60\u60ef\u8fd9\u79cd\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u7684\u673a\u5236\uff0c\u5f53\u7528\u6237\u7ec4\u4ef6\u8fdb\u7a0b\u53d1\u751f\u5d29\u6e83\u65f6\uff0c\u7531\u4e8eCreationVM\u7684\u5b58\u6863\u5c5e\u6027\u5e76\u4e0d\u5305\u542b\u4e00\u4e9b\u4e2d\u95f4\u503c\uff0c\u6240\u4ee5\u6240\u6709\u8fd9\u4e9b\u90fd\u4e0d\u4f1a\u88ab\u5199\u5165\u5230\u6570\u636e\u5e93\u3002\u53cd\u4e4b\uff0cCreationVM\u63a5\u6536\u5230\u5d29\u6e83\u901a\u77e5\u4e4b\u540e\uff0c\u4f1a\u7acb\u5373\u5c06\u4e4b\u524d\u7684\u5b58\u6863\u5c5e\u6027\u5199\u5165\u7684\u6570\u636e\u5e93\uff0c\u5e76\u5199\u5165\u5d29\u6e83\u65e5\u5fd7\u3002\u7528\u6237\u9000\u51fa\u5e94\u7528\u65f6\u4e5f\u662f\u540c\u6837\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u8be5\u673a\u5236\u7684\u6210\u529f\u8fd0\u4f5c\u9700\u8981\u5f00\u53d1\u8005\u548c\u8fd0\u884c\u65f6\u534f\u540c\u5de5\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8981\u4fdd\u8bc1\u5f53\u5bf9\u4e00\u4e2a\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u65f6\uff0c\u4e4b\u524d\u7684\u6240\u6709\u64cd\u4f5c\u90fd\u662f\u5408\u6cd5\u7684\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u653e\u5fc3\u5b58\u50a8\u8fd9\u4e9b\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\uff0c\u5982\u679c\u7ec4\u4ef6\u5728\u5b58\u6863\u5c5e\u6027\u7684\u4fee\u6539\u4e4b\u524d\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u90a3\u4e48\u8fd0\u884c\u65f6\u9700\u8981\u4fdd\u8bc1\u5bf9\u5b58\u6863\u5c5e\u6027\u7684\u5199\u5165\u5e94\u8be5\u4e5f\u4e0d\u4f1a\u51fa\u73b0\u95ee\u9898")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u7684\u8fd4\u56de\u503c\u5e94\u8be5\u59cb\u7ec8\u4f4d\u4e8e\u51fd\u6570\u7684\u6700\u540e\uff0c\u4e0d\u80fd\u518d\u4e2d\u95f4\u8fd4\u56de\uff0c\u6216\u8005\u5bf9\u8fd4\u56de\u503c\u5bf9\u8c61\u8d4b\u503c\uff0c\u6216\u8005\u5199\u6210\u4ee5\u4e0b\u65b9\u5f0f\u66f4\u597d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\nGlobal.HP = map() {\n ...\n x + y + z\n}\n")),(0,n.kt)("p",null,"\u6700\u540e\u4e00\u4e2a\u5b57\u53e5\u9ed8\u8ba4\u662f\u8fd4\u56de\u503c\uff0c\u4e0d\u9700\u8981return\u5173\u952e\u5b57\uff0c\u5b83\u8fd4\u56de\u7684\u503c\u4f1a\u8d4b\u503c\u7ed9Global.HP\uff0c\u8fd9\u91cc\u4ecd\u7136\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\uff0c\u4f7f\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u53bb\u5173\u5fc3Global.HP\u7684\u5185\u90e8\u7ed3\u6784\u3002\u540c\u65f6\u7701\u6389\u4e86\u4e00\u4e9b\u58f0\u660e\uff0c\u5982\u679c\u8ddf\u8f93\u5165\u53d8\u91cf\u4e00\u6837\u7684\u58f0\u660e\u5f62\u5f0f\u4f1a\u591a\u5199\u4e00\u4e9b\u65e0\u7528\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2224-\u7ec4\u4ef6\u5c5e\u6027"},"2.2.24 \u7ec4\u4ef6\u5c5e\u6027"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".Component(name) //\u7ec4\u4ef6\u6587\u4ef6\u540d\u548c\u540d\u79f0\n.UseDt(true) //\u662f\u5426\u4f7f\u7528dt\u53c2\u6570\uff0c\u4e00\u822c\u7528\u4e8e\u52a8\u753b\u6216\u8005\u8de8\u5e27\u884c\u4e3a\n")),(0,n.kt)("h3",{id:"2225-\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"},"2.2.25 \u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("p",null,"\u6570\u636e\u548c\u903b\u8f91\u662f\u7a0b\u5e8f\u7684\u4e24\u4e2a\u6700\u57fa\u672c\u5143\u7d20\u548c\u6982\u5ff5\uff0c\u6709\u4e86\u8fd9\u4e24\u4e2a\u57fa\u672c\u5143\u7d20\uff0c\u6211\u4eec\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u7f16\u5199\u4efb\u4f55\u7a0b\u5e8f\u3002"),(0,n.kt)("h4",{id:"22251-\u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"},"2.2.25.1 \u5927\u89c4\u6a21\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u65e0\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u5728\u89e3\u51b3\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4e3b\u6d41\u7684\u4e24\u79cd\u8f6f\u4ef6\u6784\u9020\u601d\u8def\u662f\u9762\u5411\u5bf9\u8c61\u548c\u51fd\u6570\u5f0f\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"22252-\u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"},"2.2.25.2 \u6570\u636e\u548c\u903b\u8f91\u548c\u95ee\u9898"),(0,n.kt)("p",null,"\u53c2\u89c12.7.13.3\u8282\uff0cRealityIS\u4e2d\u7684\u5b9e\u4f53\u5bf9\u8c61\u4ee3\u8868\u7684\u662f\u903b\u8f91\uff0c\u5373\u590d\u5408\u51fd\u6570\uff0c\u56e0\u6b64\u5b9e\u4f53\u5bf9\u8c61\u4ece\u6982\u5ff5\u4e0a\u4ec5\u5305\u542b\u903b\u8f91\uff0c\u4e0d\u5305\u542b\u6570\u636e\uff0c\u8fd9\u4e5f\u662f\u7b80\u5316\u7528\u6237\u7ec4\u7ec7\u903b\u8f91\u7684\u5173\u952e\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u5373\u7528\u6237\u4e0d\u9700\u8981\u5173\u5fc3\u6570\u636e\uff0c\u5173\u5fc3\u7684\u4ec5\u4ec5\u662f\u529f\u80fd"),"\u3002"),(0,n.kt)("p",null,"\u90a3\u4e48\u6570\u636e\u5728\u54ea\u91cc\uff1f\u4ee5\u53ca\u6570\u636e\u662f\u4ec0\u4e48\u6837\u7684\u6982\u5ff5\uff1f"),(0,n.kt)("p",null,"\u5982\u679c\u8bf4\u6570\u636e\u88ab\u9690\u85cf\u8d77\u6765\uff0c\u5b83\u5728\u54ea\u91cc\u4ee5\u4ec0\u4e48\u5f62\u5f0f\u5b58\u5728\u5462\uff1f\u4ece\u7528\u6237\u5c42\u9762\u6765\u8bb2\uff0c\u8868\u9762\u4e0a\u770b\u6570\u636e\u4ecd\u7136\u662f\u9644\u7740\u4e8e\u5b9e\u4f53\u5bf9\u8c61\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u6dfb\u52a0\u4e86\u67d0\u4e2a\u51fd\u6570\u6216\u8005\u590d\u5408\u51fd\u6570\u4e4b\u540e\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c06\u4f1a\u663e\u793a\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7528\u6237\u9700\u8981\u77e5\u6653\u8fd9\u4e9b\u53c2\u6570\u6765\u4e86\u89e3\u51fd\u6570\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u6570\u636e\u672c\u8d28\u4e0a\u662f\u4e0d\u9700\u8981\u7528\u6237\u7ba1\u7406\u7684\uff0cRealityIS\u8ba4\u4e3a\uff0c\u6240\u6709\u6570\u636e\u90fd\u662f\u7528\u6237\u6570\u636e\uff0c\u5373\u6240\u6709\u6570\u636e\u662f\u4e00\u4e2a\u7528\u6237\u7684\u5de8\u5927\u6570\u636e\u8868\uff0c\u5f53\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4ee5\u5b9e\u73b0\u67d0\u4e2a\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5bf9\u8fd9\u4e2a\u5927\u7684\u7528\u6237\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u7684\u67d0\u4e9b\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u548c\u5199\u5165\u6570\u636e\u7684\u64cd\u4f5c\u5219\u7531\u7cfb\u7edf\u5b8c\u6210\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u52a8\u6001\u4ece\u6570\u636e\u8868\u4e2d\u67e5\u8be2\u6570\u636e\uff0c\u90a3\u6837\u5c31\u53d8\u6210\u4f20\u7edf\u7684\u9762\u5411\u6570\u636e\u5e93\u7f16\u7a0b\u7684\u6a21\u5f0f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u6839\u636e\u5bf9\u8c61\u7ec4\u4ef6\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u4ece\u6570\u636e\u5e93\u4e2d\u627e\u51fa\u8fd9\u4e9b\u6570\u636e\uff0c\u5e76\u6309\u7167\u5bf9\u8c61\u7684\u5f62\u5f0f\u5206\u6563\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u5404\u4e2a\u4f4d\u7f6e\uff0c\u6574\u4e2a\u8fd0\u884c\u65f6\u7684\u884c\u4e3a\u5b9e\u9645\u4e0a\u8ddf\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff0c\u66f4\u786e\u5207\u5730\u8bf4ECS\u7684\u5185\u5b58\u5e03\u5c40\u662f\u7c7b\u4f3c\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u770b\u5f85\u548c\u5904\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u662fRealityIS\u4e0e\u4f20\u7edf\u7f16\u7a0b\u6a21\u578b\u7684\u5de8\u5927\u5dee\u5f02\u3002"),(0,n.kt)("h4",{id:"22253-\u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"},"2.2.25.3 \u57fa\u4e8e\u7ec4\u5408\u7684\u6784\u9020\u65b9\u6cd5"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\\2. \u201c\u6709\u201d\u548c\u201d\u80fd\u201d\u548c\u5b9e\u73b0"),(0,n.kt)("p",{parentName:"blockquote"},"\u5728\u7ec4\u4ef6\u6a21\u578b\u4e2d\uff0c\u5bf9\u8c61\u7531\u7ec4\u4ef6\u7ec4\u6210\uff0c\u6240\u4ee5\u5176\u884c\u4e3a\u4e5f\u7531\u7ec4\u4ef6\u4e3b\u5bfc\uff0c\u4f8b\u5982\u4e00\u4e2a\u5bf9\u8c61\u62e5\u6709","[Movement]"," \u548c ","[Location]","\uff0c\u5219\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u80fd\u591f\u79fb\u52a8\uff0c\u8fd9\u5728\u6574\u4f53\u4e0a\u662f\u5341\u5206\u548c\u8c10\u81ea\u7136\u7684\uff0c\u4f46\u5f53\u6211\u4eec\u4ed4\u7ec6\u8003\u91cf\uff0c\u8fd9\u4e2a",(0,n.kt)("strong",{parentName:"p"},'"\u80fd"'),"\u662f\u7531\u4e8e\u4ec0\u4e48\u5462\uff0c\u662f\u56e0\u4e3a ","[Movement]","\u5417\uff0c\u662f\u56e0\u4e3a","[Location]","\u5417\uff0c\u8fd8\u662f\u540c\u65f6\u56e0\u4e3a ","[Movement]"," \u548c ","[Location]","\uff1f\u5f53\u7136\u662f\u540c\u65f6\uff08\u8fd9\u91cc\u4fbf\u63ed\u793a\u51fa\u4e86\u7ec4\u4ef6\u548c\u63a5\u53e3\u7684\u5c55\u5e73\u5bf9\u8c61\u65b9\u5f0f\u662f\u6b63\u4ea4\u7684\uff09\uff0c\u90a3\u79fb\u52a8\u7684\u903b\u8f91\u653e\u5230\u54ea\u5462\uff1f\u7b54\u6848\u662f\u653e\u5728\u8fd9\u4e2a\u201c\u5207\u7247\u201c\u4e0a\u3002\u4f46\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u4f1a\u770b\u5230\u628a\u903b\u8f91\u653e\u5728 ","[Movement]"," \u4e0a\u7684\u505a\u6cd5\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u90fd\u662f\u53ef\u53d6\u7684\uff0c\u540e\u4e00\u79cd\u62e5\u6709\u8f83\u4e3a\u7b80\u5355\u7684\u5b9e\u73b0\u5e76\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u800c",(0,n.kt)("strong",{parentName:"p"},"\u524d\u4e00\u79cd\u62e5\u6709\u66f4\u7cbe\u51c6\u7684\u8bed\u4e49\uff0c\u66f4\u597d\u7684\u62bd\u8c61"),"\uff08\u540e\u4e00\u79cd\u79cd\u65b9\u5f0f\u4e2d ","[Movement]"," \u53bb\u8bbf\u95ee\u5e76\u4fee\u6539\u4e86 ","[Location]"," \u7684\u6570\u636e\uff0c\u8fd9\u7834\u574f\u4e86\u4e00\u5b9a\u7684\u5c01\u95ed\u6027\uff0c\u4e14\u5f62\u6210\u4e86\u8026\u5408\uff0c\u5f53\u7136\u8fd9\u79cd\u8026\u5408\u4e5f\u6709\u4e00\u5b9a\u7684\u597d\u5904\uff0c\u5982\u907f\u514d\u53ea\u6dfb\u52a0\u4e86 ","[Movement]"," \u8fd9\u79cd\u65e0\u610f\u4e49\u7684\u60c5\u51b5\u53d1\u751f\uff09\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aBenzzZX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://zhuanlan.zhihu.com/p/41652478"},"https://zhuanlan.zhihu.com/p/41652478"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h4",{id:"22254-\u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"},"2.2.25.4 \u6570\u636e\u662f\u4e8c\u7b49\u516c\u6c11"),(0,n.kt)("h4",{id:"22255-\u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"},"2.2.25.5 \u7ec4\u4ef6\u662f\u4e00\u7b49\u516c\u6c11"),(0,n.kt)("h2",{id:"23-creation-vm"},"2.3 Creation VM"),(0,n.kt)("p",null,"\u8ddf\u5f15\u64ce\u9ad8\u5ea6\u4e00\u4f53\u5316\uff0c\u4e0d\u662f\u72ec\u7acb\u7684\u865a\u62df\u673a"),(0,n.kt)("h3",{id:"231-creation-table-engine"},"2.3.1 Creation Table Engine"),(0,n.kt)("p",null,"Table Engine\u7ef4\u62a4\u4e00\u4e2aDatabase\uff0c\u4e3b\u8981\u76ee\u6807\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u9020\u548c\u5b58\u50a8\u6240\u6709\u57fa\u4e8eData-driven\u7684\u6570\u636e\uff0c\u5305\u62ecComponent\u7684\u6570\u636e\u3001\u4e8b\u4ef6\u5217\u8868\u3001Hierarchical Level\u6570\u636e\u3001\u884c\u4e3a\u6811/\u72b6\u6001\u673a\u7b49\u7ed3\u6784\uff0c\u6240\u6709\u6570\u636e\u90fd\u5df2\u6570\u7ec4\u7684\u5f62\u5f0f\u7ec4\u7ec7\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9Table\u6570\u636e\u8fdb\u884c\u65b0\u589e\u3001\u5220\u9664\u3001\u4fee\u6539\u3001\u6392\u5e8f\u7b49\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u9700\u8981\u5ef6\u8fdf\u5230Component\u8fdb\u884c\u540e\u7edf\u4e00\u8fdb\u884c\u5904\u7406\uff0c\u800c\u4e0d\u662f\u7acb\u5373\u5904\u7406\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8eComponent\u7684\u6570\u636e\uff0c\u7531\u4e8e\u6240\u6709\u6570\u636e\u6df7\u5728\u4e00\u8d77\uff0c\u9700\u8981\u6309\u7167ArchType\u8fdb\u884c\u7ec4\u7ec7\u3002\u5e76\u4e14\u5757\u5143\u7d20\u7684\u5927\u5c0f\u8fdb\u884c\u81ea\u52a8\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u63d0\u4f9b\u4e00\u4e9b\u6807\u51c6\u7f16\u7a0b\u6848\u4f8b"),(0,n.kt)("p",null,"\u865a\u62df\u673a\u7684\u8bbe\u8ba1\uff1a"),(0,n.kt)("p",null,"\u5982\u679c\u6570\u636e\u90fd\u662fTable\u7c7b\u578b\u7684\u683c\u5f0f\uff0c\u90a3\u4e48\u52a8\u6001\u9700\u8981\u7684\u865a\u62df\u673a\u53ef\u4ee5\u8bbe\u8ba1\u4e3a\u5904\u7406\u539f\u751f\u7c7b\u578b\uff0c\u6240\u6709Table\u6570\u636e\u7684\u5206\u914d\u548c\u7ba1\u7406\u90fd\u4ea4\u7ed9\u7cfb\u7edf\u5c42\uff0c\u8fd9\u6837\u811a\u672c\u9700\u8981\u751f\u6210\u7684\u4ee3\u7801\u4e5f\u4e3a\u201c\u7eaf\u4ee3\u7801\u201d\uff0c\u8fd9\u4e9b\u5b57\u8282\u7801\u5bf9\u5e94\u7684\u64cd\u4f5c\u6570\u5730\u5740\u7684\u5206\u914d\u5219\u4e3aC++\u5c42\u7684\u7f16\u8bd1\u578b\u4ee3\u7801\uff0c\u800c\u4e0d\u662f\u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u907f\u514d\u4e86\u811a\u672c\u8bed\u8a00\u590d\u6742\u7684\u6570\u636e\u5730\u5740\u5206\u914d\uff1a\u4f8b\u5982\u6784\u9020\u865a\u62df\u5bc4\u5b58\u5668\u6216\u8005\u865a\u62df\u6808\uff0c\u4ee5\u53ca\u5bf9\u5e94\u4e3a\u4e86\u6784\u5efa\u865a\u62df\u5bc4\u5b58\u5668\u800c\u6784\u9020\u7684\u7b26\u53f7\u8868\u4ee5\u53ca\u7b26\u53f7\u8868\u7684\u89e3\u91ca\u6620\u5c04\u7b49"),(0,n.kt)("p",null,"\u6240\u6709\u7684\u4ee3\u7801\uff0c\u5728\u865a\u62df\u673a\u8fd9\u4e00\u5c42\u90fd\u662f\u8f6c\u5316\u4e3a\u5bf9table\u7684\u67d0\u79cd\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u5c01\u88c5\u4e3a\u57fa\u7840\u7684C++\u5c42\u7684\u4ee3\u7801\uff0c\u81ea\u52a8\u5c31\u5904\u7406\u4e86\u5185\u5b58\u5730\u5740\u7684\u5206\u914d"),(0,n.kt)("p",null,"\u8981\u62c6\u89e3Table\u7684\u57fa\u672c\u64cd\u4f5c\uff0c\u4e5f\u5c31\u662fSTL\u4e2d\u57fa\u7840Vector\u7684\u57fa\u7840\u6570\u636e\u64cd\u4f5c\uff0c\u5e94\u8be5\u80fd\u591f\u63d0\u70bc\u51fa\u6240\u6709\u53ef\u80fd\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u7136\u540e\u5c01\u88c5\u4e3a\u865a\u62df\u673a\u5c42\u7684\u9ad8\u7ea7\u57fa\u7840\u6307\u4ee4"),(0,n.kt)("p",null,"\u8fd9\u6837\u6574\u4e2aTable Library \u5c31\u662f\u4e00\u4e2a\u7c7b\u4f3cSTL\u7684\u5e93\uff0c\u5b83\u5c01\u88c5\u4e00\u4e9b\u7279\u5b9a\u7684Table\u7684\u64cd\u4f5c\u7c7b\u578b\u548c\u64cd\u4f5c\u65b9\u6cd5\uff0c\u9762\u5411\u6570\u636e\u9a71\u52a8\u7684\u6574\u4e2a\u67b6\u6784\uff0c\u65e2\u652f\u6301\u539f\u751fC++\u8c03\u7528\uff0c\u4e5f\u652f\u6301\u865a\u62df\u673a\u57fa\u7840\u6307\u4ee4\u5c01\u88c5\uff0c\u8fd9\u5c31\u597d\u6bd4Lua\u7684\u67d0\u4e9b\u65b9\u6cd5\u7531C\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684C\u64cd\u4f5c\u662f\u66f4\u4f4e\u5c42\u7684\u64cd\u4f5c\uff0c\u5e76\u4e14\u8fd9\u91cc\u7684\u6570\u636e\u7531C\u5b9a\u4e49\u548c\u5206\u914d\uff0c\u800c\u4e0d\u662f\u50cfLua\u4e00\u6837\u7531Lua\u5206\u914d\u518d\u4f20\u7ed9C\uff0c\u6240\u4ee5\u8fd9\u91cc\u811a\u672c\u8bed\u8a00\u7684\u5b9a\u4e49\u8bed\u8a00\u5904\u7406\u7279\u6b8a\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u4f8b\u5982\u811a\u672c\u8bed\u8a00\u4e2d\u5bf9\u53d8\u91cf\u7684\u4f7f\u7528\u90fd\u7ffb\u8bd1\u4e3a\u5bf9C\u5bf9\u8c61\u7684\u4f7f\u7528\uff0c\u6ca1\u6709\u53d8\u91cf\u590d\u5236\uff0c\u6ca1\u6709\u6570\u636e\u53ea\u6709\u6307\u4ee4"),(0,n.kt)("p",null,"\u5982\u679c\u811a\u672c\u8bed\u8a00\u4e2d\u4e0d\u542b\u7ed3\u6784\u58f0\u660e\uff0c\u6216\u8005\u6ca1\u6709\u81ea\u5df1\u7684\u7ed3\u6784\u4f53\uff0c\u53ea\u6709\u7b80\u5355\u53d8\u91cf\uff0c\u90a3\u4e48\u6574\u4e2a\u89e3\u91ca\u8fc7\u7a0b\u662f\u4e0d\u662f\u4f1a\u5feb\u5f88\u591a"),(0,n.kt)("h4",{id:"2311-\u6570\u636e\u5b58\u50a8\u6570\u7ec4"},"2.3.1.1 \u6570\u636e\u5b58\u50a8\uff1a\u6570\u7ec4"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5355\u72ec\u7f16\u8bd1\uff0c\u9996\u5148\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u5f97\u662f\u72ec\u7acb\u7684\uff0c\u53e6\u5916\u8fd9\u4e9b\u6570\u636e\u7684\u5e03\u5c40\u5f97\u662f\u56fa\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ec4\u4ef6\u9700\u8981\u8bbf\u95ee\u7684\u6bcf\u4e2a\u53d8\u91cf\uff0c\u4f7f\u7528\u6307\u9488\u7684\u65b9\u5f0f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u8fd9\u610f\u5473\u7740\u865a\u62df\u673a\u9700\u8981\u52a8\u6001\u7ed9\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u6bcf\u4e2a\u5730\u5740\u8d4b\u503c\uff0c\u8fd9\u51e0\u4e4e\u662f\u4e0d\u65e0\u505a\u5230\u7684\uff0c\u56e0\u4e3a\u865a\u62df\u673a\u53ea\u5904\u7406\u89c4\u5219\u7684\u5185\u5bb9\uff0c\u901a\u7528\u6027\u7684\u89c4\u5219\uff0c\u4f46\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u786e\u5b9e\u4e0d\u4e00\u6837\u7684\uff0c\u9664\u975e\u662f\u89e3\u91ca\u5668\u6216\u8005\u865a\u62df\u673a\u81ea\u5df1\u5206\u914d\u7684\u5185\u5b58\uff0c\u4f46\u662f\u8fd9\u91cc\u4e00\u4e2a\u5b9e\u4f53\u7684\u7ec4\u4ef6\u7684\u6570\u636e\u4e0d\u662f\u7531\u7ec4\u4ef6\u4ee3\u7801\u81ea\u5df1\u5206\u914d\u7684\uff08\u4f60\u5982\u4f20\u7edf\u7684\u5bc4\u5b58\u5668\u5bfb\u5740\uff0c\u5c31\u662f\u89e3\u91ca\u5668\u6216\u8005\u7f16\u8bd1\u5668\u76f4\u63a5\u9488\u5bf9\u4ee3\u7801\u8bbe\u7f6e\u597d\u5bc4\u5b58\u5668\u5730\u5740\uff09\uff0c\u800c\u662f\u7531Creation Table\u81ea\u5df1\u5206\u914d\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u79cd\u5206\u79bb\uff0c\u7ec4\u597d\u7684\u65b9\u5f0f\u5c31\u662f\u5c06\u7ec4\u4ef6\u8bbf\u95ee\u7684\u6570\u636e\u653e\u5728\u4e00\u4e2a\u8fde\u7eed\u7684\u5185\u5b58\u5730\u5740\u4e2d\uff0c\u7136\u540e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u673a\u53ea\u8981\u52a8\u6001\u5c06\u8d77\u59cb\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\uff0c\u8fd9\u79cd\u89c4\u5219\u662f\u901a\u7528\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u5668\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u4e2d\u7684\u5bfb\u5740\u8f6c\u6362\u4e3a\u57fa\u4e8e\u76f8\u5bf9\u4f4d\u7f6e\u7684\u5bfb\u5740")),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u865a\u62df\u673a\u4e2d\u6267\u884c\u51fd\u6570\u8c03\u7528\uff0c\u5f53\u7136\u8fd9\u91cc\u53ea\u91c7\u7528\u6808\u5f0f\u65b9\u6cd5\uff0c\u6240\u6709\u51fd\u6570\u9700\u8981\u8bbf\u95ee\u7684\u53d8\u91cf\u5b58\u50a8\u5728\u4e00\u4e2a\u6808\u4e2d\uff0c\u51fd\u6570\u6309\u7d22\u5f15\u5bf9\u6808\u4e2d\u7684\u5185\u5b58\u8fdb\u884c\u8bbf\u95ee\u3002"),(0,n.kt)("h4",{id:"2312-\u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"},"2.3.1.2 \u65e0\u7c7b\u578b\u5b9a\u4e49\u4e0e\u5783\u573e\u56de\u6536"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u53ea\u6709\u7ec4\u4ef6\u7c7b\u578b\uff0c\u7ec4\u4ef6\u53ea\u6709\u6570\u636e\uff0c\u6ca1\u6709\u65b0\u7684\u7ed3\u6784\u4f53\u5b9a\u4e49"),"\uff0c\u5168\u5c40\u7b26\u53f7\u8868\u4e2d\u6709\u4e00\u5b9a\u7684\u57fa\u7840\u6570\u636e\u7ed3\u6784\uff0c\u4f46\u662f\u5176\u4ed6\u7684\u6570\u636e\u7ed3\u6784\u5747\u6709\u7ec4\u4ef6\u7684\u6570\u636e\u5b9a\u4e49\u9690\u5f0f\u51b3\u5b9a\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7c7b\u578b\u5b9a\u4e49\u5728\u811a\u672c\u8bed\u8a00\u4e2d\uff0c\u5e76\u4e14\u662f\u6309\u7167\u5355\u4e2a\u7ec4\u4ef6\u7684\u7c7b\u578b\u8fdb\u884c\u5b9a\u4e49\u7684\uff0c\u5373AOS\uff08array of struct\uff09\uff0c\u4e24\u4e2a\u539f\u56e0 \uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u5e76\u4e0d\u5229\u4e8e\u9ad8\u6027\u80fd \u8ba1\u7b97\uff0c\u9ad8\u6027\u80fd\u8ba1\u7b97\u9700\u8981\u662fSOA\u7684\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u5e95\u5c42\u865a\u62df\u673a\u5e76\u4e0d\u4e86\u89e3\u7ec4\u4ef6\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5bfc\u81f4\u4e0d\u80fd\u52a8\u6001\u6784\u9020\u5bf9\u8c61\uff1b\u56e0\u6b64\u9700\u8981\u5728\u811a\u672c\u8bed\u8a00\u5c42\u9762\u76f4\u63a5\u6784\u9020\u5bf9\u8c61\uff0c\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u5c31\u9700\u8981\u5b9e\u73b0\u590d\u6742\u5bf9\u8c61\uff0c\u53ca\u5176\u76f8\u5e94\u7684\u5783\u573e\u56de\u6536\u673a\u5236\uff1b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u95ee\u9898\uff0cUnity\u4f7f\u7528\u4e86\u79bb\u7ebf\u7f16\u8bd1\u7684\u65b9\u5f0f\uff0c\u5c06\u7ec4\u4ef6\u6570\u636e\u7684\u6784\u9020\u8f6c\u6362\u6210\u4e86\u53e6\u5916\u67d0\u79cd\u5f62\u5f0f\u7684\u4e2d\u95f4\u4ee3\u7801\uff1b\u8fd9\u6837\u4f7f\u5f97\u53ef\u4ee5SOA\u7684\u5f62\u5f0f\u8fdb\u884c \u6570\u636e\u7ba1\u7406\uff0c\u4f46\u662f\u5b83 \u53ef\u80fd\u4e0d\u652f\u6301\u52a8\u6001\u66f4\u65b0\uff0c\u6216\u8005\u81f3\u5c11\u9700\u8981\u52a8\u6001\u66f4\u65b0\u6574\u4e2a\u7f16\u8bd1\u540e\u7684\u4e2d\u95f4\u4ee3\u7801\uff1f"),(0,n.kt)("p",null,"\u5f53CTE\u8bd5\u56fe\u5c06 \u4e0a\u8ff0\u8fc7\u7a0b\u653e\u5230\u8fd0\u884c\u65f6\u52a8\u6001\u89e3\u6790\u65f6\uff0c\u6027\u80fd\u662f\u9700\u8981\u91cd\u70b9\u8003\u8651 \u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u7eafA OS->SOA\u7684\u5f00\u9500"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5f53\u573a\u666f\u4e2d\u6709 \u5927\u91cf\u5bf9\u8c61\u65f6 \uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u7684\u6570\u636e\u5173\u7cfb\u7b49\u7b49\u7684\u5224\u65ad\u53ef\u80fd\u4f1a\u975e\u5e38 \u6d88\u8017\u65f6\u95f4")),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u597d\u597d\u5212\u5206\u9636\u6bb5\uff0c\u5e76\u628a\u90e8\u5206\u6570\u636e\u662f\u5426\u53ef\u4ee5\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2aCreation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u786e\u5b9a\u5b83\u5f15\u7528\u7684\u6240\u6709\u53d8\u91cf\u53ca\u5176\u7ec4\u5408\u5173\u7cfb\uff0c\u8fd9\u90e8\u5206\u662f\u5426\u53ef\u4ee5\u9884\u8ba1\u7b97\u6210 \u67d0\u79cd\u683c\u5f0f\uff0c\u5373\u662f\u8ba1\u7b97ArchType\u7684\u65f6\u95f4\uff0c\u8fd9\u4e9b\u53ef\u4ee5 \u5728\u4e91\u7aef\u4e0b\u8f7d \u8d44\u6e90 \u7684 \u65f6\u5019\u8ba1\u7b97 \u597d\uff0c\u4e0b\u8f7d\u65f6\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u8fd0\u884c\u65f6\u9996\u5148\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u5173\u7cfb\u521d\u59cb\u5316\u6570\u7ec4"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6d89\u53ca\u7528\u6237\u5728\u7aef\u4fa7\u7f16\u8f91\u6570\u636e\uff0c\u5219\u9488\u5bf9\u6bcf\u4e2a\u5bf9\u8c61\u52a8\u6001\u4fee\u6539 \uff0c\u4f46\u6b64\u65f6\u5e94\u8be5\u4e0d\u4f1a\u592a\u5f71\u54cd\u6027\u80fd\u3002")),(0,n.kt)("p",null,"\u56e0\u4e3a\u8fd9\u79cdAOS->SOA\u7684\u8f6c\u6362\uff0c\u4f7f\u5f97\u4e0a\u5c42\u811a\u672c\u8bed\u8a00\u5b9a\u4e49\u7684\u5bf9\u8c61\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e0a\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u4ece\u800c\u51cf\u5c11\u811a\u672c\u5c42\u9762\u7684\u590d\u6742\u5ea6\uff0c\u5e76\u4f7f\u5f97\u539f\u751f\u8bed\u8a00 \u7ba1\u7406\u5bf9\u8c61\u6027\u80fd\u66f4\u9ad8\u6548\u3002\u800c\u8fd9\u79cd\u8f6c\u6362\u673a\u5236\u80cc\u540e\u7684\u6838\u5fc3\u56e0\u7d20\u662f\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u89e3\u91ca\u5668\u52a8\u6001\u8bc6\u522b\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5e76\u4ece\u4e2d\u63d0\u53d6\u5c5e\u6027\u53ca\u5176\u7b26\u53f7")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"\u4ee5\u53ca\u5e95\u5c42ECS\u7684\u673a\u5236\u5c06\u8fd9\u4e9b\u5c5e\u6027\u8f6c\u6362\u4e3aSOA\u6570\u7ec4\uff0c\u7531\u4e8e\u6574\u4e2aCTE\u90fd\u662f\u5df2\u77e5\u57fa\u7840\u6570\u636e\u7c7b\u578b\u7684\u6570\u7ec4\uff0c\u6240\u4ee5\u95f4\u63a5\u5730\u4e0d\u9700\u8981\u5173\u6ce8\u4e0a\u5c42 \u811a\u672c\u5b9e\u9645\u7684\u6570\u636e\u7ed3\u6784\uff0c\u6bcf\u4e2a\u5143\u7d20\u6309\u7167\u7d22\u5f15\u8fdb\u884c\u5bfb\u5740\u5373\u53ef\u3002"))),(0,n.kt)("p",null,"\u6574\u4e2aTable\u4e2d\u6ca1\u6709\u4efb\u4f55\u672a\u77e5Struct\u5bf9\u8c61\uff0c\u6240\u8c13\u672a\u77e5\u5373\u662f\u7528\u6237\u5b9a\u4e49\u7684struct\u3002\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u5c31\u662f\u89e3\u91ca\u5668\u52a8\u6001\u5bf9\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\u8fdb\u884c\u91cd\u65b0\u6620\u5c04\uff0c\u901a\u8fc7\u6570\u7ec4\u7d22\u5f15+\u57fa\u7840\u53d8\u91cf\u7c7b\u578b\uff0c\u5c31\u80fd\u8ba1\u7b97\u51fa\u6b63\u786e\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002\u56e0\u4e3a\u6570\u636e\u5728\u5185\u5b58\u4e2d\u662f\u6ca1\u6709struct\u7684\u6982\u5ff5\u7684\uff0cstruct\u7684\u4f5c\u7528\u5728\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u6216\u8005\u89e3\u91ca\u5668\u8ba1\u7b97\u5185\u5b58\u4e2d\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u6211\u4eec\u4e0d\u80fd\u652f\u6301\u7528\u6237\u7aef\u81ea\u5b9a\u4e49struct\uff0c\u5426\u5219\u865a\u62df\u673a\u65e0\u6cd5\u8bc6\u522b\uff0c\u5c31\u9700\u8981\u590d\u6742\u7684\u673a\u5236\u6765\u8bc6\u522b\u7ed3\u6784\u4f53\u3002\u7531\u4e8e\u6e38\u620f\u7684\u7279\u6b8a\u6027\uff1a\u5b83\u80fd\u591f\u5c06\u6240\u6709\u6570\u636e\u901a\u8fc7ECS\u7684\u673a\u5236\u8f6c\u5316\u4e3aTable\uff0c\u6240\u4ee5\u6211\u4eec\u6709\u5c31\u4f1a\u53bb\u9664\u6389\u7ed3\u6784\u4f53\u6216\u8005\u76f8\u5173\u7684\u7c7b\u578b\u89e3\u6790\uff0c\u53d8\u6210\u66f4\u7b80\u5355\u7684\u7d22\u5f15\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u8003\u8651\u6027\u80fd\uff0c\u8fd9\u91cc\u53ef\u80fd\u9700\u8981\u8003\u8651AOT\u7684\u673a\u5236\uff0c\u5373\u63d0\u524d\u5c06\u7d22\u5f15\u7684\u8ba1\u7b97\u8f6c\u5316\u4e3a\u4e2d\u95f4\u5f62\u5f0f\uff0c\u4e0d\u7136\u6bcf\u6b21\u8981\u901a\u8fc7\u865a\u62df\u673a\u4e2d\u7684\u7d22\u5f15\u6620\u5c04\u65b9\u6cd5\u6765\u52a8\u6001\u8ba1\u7b97\u7d22\u5f15\uff0c\u6027\u80fd\u5f00\u652f\u5c31\u4f1a\u6bd4\u8f83\u5927\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u4e2a\u7d22\u5f15\u662f\u8ddf\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u76f8\u5173\u8054\u7684\uff0c\u6240\u4ee5\u9700\u8981\u5728\u5bf9\u8c61\u7684\u521b\u5efa/\u4fee\u6539/\u5220\u9664\u7b49\u73af\u8282\u8fdb\u884c\u91cd\u65b0\u52a8\u6001\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2313-\u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406"},"2.3.1.3 \u8fd0\u884c\u65f6\u5185\u5b58\u7ba1\u7406*"),(0,n.kt)("p",null,"\u5c3d\u7ba1Table\u4e2d\u7684\u6570\u636e\u5728\u4e0d\u65ad\u53d8\u5316\uff0c\u4f46\u662f\u8fd9\u90e8\u5206\u7684\u53d8\u5316\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8ddf\u5783\u573e\u56de\u6536\u7684\u601d\u8def\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u6bb5\u8fde\u7eed\u7684\u5185\u5b58\u4e0d\u591f\u65f6\uff0c\u9700\u8981\u91cd\u65b0\u5ea6\u6570\u636e\u7684\u5e03\u5c40\u8fdb\u884c\u8c03\u6574"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u67d0\u5199\u5bf9\u8c61\u4e0d\u518d\u4f7f\u7528\u65f6\uff0c\u5783\u573e\u56de\u6536\u5668\u53ef\u80fd\u9700\u8981\u5bf9\u67d0\u6bb5\u5185\u5b58\u6570\u636e\u8fdb\u884c\u64e6\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u8bb0\u5f55\u5bf9\u8c61\u4e4b\u95f4\u7684\u7d22\u5f15\uff0c\u5173\u7cfb\u7b49\u7b49")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u90e8\u5206\u601d\u60f3\u53ef\u4ee5\u53c2\u8003\u5783\u573e\u56de\u6536\u7684\u4e00\u4e9b\u601d\u60f3\u548c\u7b97\u6cd5\u3002"),(0,n.kt)("h3",{id:"232-addremove"},"2.3.2 Add\u3001Remove"),(0,n.kt)("p",null,"\u5bf9\u6570\u7ec4\u7684\u64cd\u4f5c\u4e00\u822c\u7531Component\u53d1\u8d77\uff0c\u4f46\u662f\u4e0d\u80fd\u7acb\u5373\u5bf9Table\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u4e3a\u5176\u4ed6Component\u6b63\u5728\u8bbf\u95ee\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u4e9b\u4fee\u6539\u9700\u8981\u5ef6\u8fdf\u5230Component\u548c\u5176\u4ed6\u64cd\u4f5c\u6267\u884c\u5b8c\u6bd5\uff0c\u9700\u8981\u4f7f\u7528\u8bf8\u5982\u7f13\u5b58\u961f\u5217\u4e4b\u7c7b\u7684\u67b6\u6784\u3002\u539f\u5219\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u7ec4\u7ed3\u6784\u7684\u4fee\u6539\u9700\u8981\u5355\u72ec\u4e0d\u7406\uff0c\u4e0d\u80fd\u5f71\u54cd\u5f53\u524d\u64cd\u4f5c")),(0,n.kt)("h3",{id:"233-change-driven-update"},"2.3.3 Change-driven Update"),(0,n.kt)("p",null,"\u5728\u6bcf\u4e00\u5e27\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u901a\u5e38\u505a\u4e09\u79cd\u7c7b\u578b\u7684\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u505a\u4efb\u4f55\u5224\u65ad\uff0c\u628a\u6574\u4e2a\u903b\u8f91\u5b8c\u6574\u6267\u884c\u4e00\u904d\uff0c\u54ea\u6015\u5176\u4e2d\u6d89\u53ca\u7684\u6570\u636e\u6ca1\u6709\u4efb\u4f55\u53d8\u5316\uff08\u56e0\u6b64\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u4efb\u4f55\u53d8\u5316\uff09\uff0c\u8fd9\u79cd\u8ba1\u7b97\u7b56\u7565\u662f\u975e\u5e38\u6d6a\u8d39\u7684\uff0c\u4f46\u662f\u5b83\u786e\u662f\u7ba1\u7406\u6210\u672c\u6700\u4f4e\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u7c7b\u578b\u5305\u542b\u903b\u8f91\u5224\u65ad\uff0c\u56e0\u6b64\u4e00\u90e8\u5206\u8ba1\u7b97\u6307\u4ee4\u96c6\u4e8e\u67d0\u4e9b\u5c5e\u6027\u503c\u7684\u4e0d\u540c\u53ef\u80fd\u4e0d\u4f1a\u88ab\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u7c7b\u662f\u5305\u542b\u4e00\u4e9b\u9700\u8981\u8de8\u8d8a\u591a\u5e27\u6267\u884c\u7684\u903b\u8f91\uff0c\u4f8b\u5982\u52a8\u753b\uff0c\u5b83\u4eec\u901a\u5e38\u53ea\u6267\u884c\u4e00\u6bb5\u8fde\u7eed\u7684\u65f6\u95f4\uff0c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7531\u4e8e\u5c5e\u6027\u6570\u636e\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u5b83\u9700\u8981\u50cf\u7b2c\u4e00\u79cd\u65b9\u5f0f\u4e00\u6837\u5b8c\u6574\u6267\u884c\uff1b\u4f46\u662f\u4e00\u65e6\u8fd9\u6bb5\u65f6\u95f4\u7ed3\u675f\uff0c\u5b83\u53ef\u80fd\u5c31\u4e0d\u518d\u9700\u8981\u88ab\u6267\u884c\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e00\u548c\u7b2c\u4e8c\u79cd\u7c7b\u578b\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e00\u79cd\uff0c\u56e0\u4e3a\u5982\u679c\u6240\u6709\u8f93\u5165\u6570\u636e\u90fd\u4e0d\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u7406\u8bba\u4e0a\u7ed3\u679c\u4e5f\u4e0d\u4f1a\u6709\u53d8\u5316\uff0c\u56e0\u6b64\u53ef\u4ee5\u4e0d\u7528\u6267\u884c\u3002\u7406\u8bba\u4e0a\u7b2c\u4e00\u79cd\u60c5\u51b5\u53ef\u4ee5\u628a\u67d0\u4e9b\u5c5e\u6027\u6570\u636e\u4f5c\u4e3a\u5224\u65ad\u6761\u4ef6\uff0c\u7136\u540e\u7b2c\u4e00\u79cd\u60c5\u51b5\u5c31\u53d8\u4e3a\u7b2c\u4e8c\u79cd\u60c5\u51b5\u3002\u5bf9\u4e8e\u8fd9\u4e24\u79cd\u60c5\u51b5\uff0c\u4e5f\u6709\u53ef\u80fd\u5224\u65ad\u6761\u4ef6\u4f1a\u5305\u542b\u591a\u4e2a\uff0c\u56e0\u6b64\u6839\u636eECS\u7684\u601d\u8def\u53ef\u4ee5\u62c6\u5206\uff0c\u81f3\u5c11\u62c6\u5206\u6210\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u4e2a\u5224\u65ad\u6761\u4ef6\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u5305\u542b\u4e00\u79cd\u5224\u65ad\u6761\u4ef6\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u628a\u8fd9\u4e2a\u5224\u65ad\u6761\u4ef6\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u89c2\u5bdf\u503c\uff0c\u53ea\u6709\u8fd9\u4e2a\u503c\u53d1\u751f\u53d8\u5316\u65f6\u624d\u9700\u8981\u5b8c\u6574\u6267\u884c\u6574\u4e2a\u7ec4\u4ef6\u7684\u903b\u8f91\u3002\u8fd9\u5c31\u662fChange-driven update\u7684\u6838\u5fc3\u601d\u8def\u3002\u5f53\u7136\u5904\u4e8e\u7b80\u5355\uff0c\u6211\u4eec\u53ea\u5224\u65ad\u503c\u662f\u5426\u53d1\u751f\u53d8\u5316\uff0c\u800c\u4e0d\u662f\u68c0\u6d4b\u66f4\u5177\u4f53\u7684\u6761\u4ef6\uff0c\u4f8b\u5982\u4e00\u4e2a\u903b\u8f91\u6761\u4ef6\u662f\u53d8\u91cfa\u5927\u4e8e10\uff0c\u90a3\u4e48a\u75313\u53d8\u62104\u4e5f\u662f\u89e6\u53d1\u903b\u8f91\u66f4\u65b0\u3002\u4f46\u662f\u5c06\u903b\u8f91\u5224\u65ad\u9644\u52a0\u5230\u5c5e\u6027\u503c\u4e0a\u5219\u4f1a\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u8fd9\u5bf9\u4e8e\u4e00\u4e9b\u5305\u542b\u590d\u6742\u8ba1\u7b97\u6216\u8005\u6d89\u53ca\u8f83\u5927\u6570\u636e\u52a0\u8f7d\u7684\u7ec4\u4ef6\u90fd\u662f\u975e\u5e38\u6709\u76ca\u7684\u3002\u800c\u4e14\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bb2\u4e5f\u4e0d\u7b97\u590d\u6742\uff0c\u53ef\u80fd\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5b9a\u4e49\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u72b6\u6001\u53d8\u91cf\uff0c\u5e76\u77e5\u9053\u8fd9\u51e0\u4e2a\u53d8\u91cf\u9700\u8981\u68c0\u6d4b\u5373\u53ef\u3002\u5f53\u7136\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5224\u65ad\u662f\u5426\u8fd9\u4e9b\u503c\u7684\u53d8\u5316\u80fd\u5b8c\u5168\u51b3\u5b9a\u6216\u8986\u76d6\u6574\u4e2a\u903b\u8f91\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u53ea\u6709\u4fee\u6539\u8fc7\u7684\u6570\u636e\u624d\u4f1aUpdate"),(0,n.kt)("h4",{id:"2331-\u7406\u8bba\u57fa\u7840"},"2.3.3.1 \u7406\u8bba\u57fa\u7840"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7406\u8bba\u4e0a\u662f\u4e00\u4e2a\u7eaf\u51fd\u6570\uff0c\u5373\u5982\u679c\u8f93\u5165\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8f93\u51fa\u4e5f\u4e0d\u4f1a\u53d1\u751f\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76d1\u6d4b\u8f93\u5165\uff0c\u53ea\u8981\u8f93\u5165\u7684\u503c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5bf9\u5176\u76f8\u5173\u7684\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5f53\u7136\u8fd9\u91cc\u52a8\u753b\u662f\u4e2a\u4f8b\u5916\uff0c\u4ee5\u53ca\u4e00\u4e9b\u81ea\u884c\u5b9a\u4e49\u8de8\u5e27\u8ba1\u7b97\u903b\u8f91\u7684\u7ec4\u4ef6"),"\uff0c\u6240\u4ee5\u8fd9\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u7684\u5c5e\u6027\u8fdb\u884c\u8bbe\u7f6e\uff0c\u8981\u6c42\u662f\u5426\u5bf9\u8f93\u5165\u8fdb\u884c\u76d1\u6d4b\uff0c\u4ee5\u9a71\u52a8\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".ChangedDriven(True)\n")),(0,n.kt)("p",null,"\u5f53\u7136\u53c2\u89c12.2.3.3\u8282\u53ef\u89c1\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u6240\u6709\u8de8\u5e27\u72b6\u6001\u770b\u505a\u662fdt\u7684\u51fd\u6570\uff0c\u9700\u8981\u5728\u6bcf\u5e27\u8fdb\u884c\u91cd\u590d\u8ba1\u7b97\uff0c\u6240\u4ee5\u7ec4\u4ef6\u51fd\u6570\u672c\u8eab\u4ecd\u7136\u662f\u7eaf\u51fd\u6570\uff0c\u8fd9\u91cc\u5b9e\u8d28\u4e0a\u662f\u5c06dt\u4e5f\u770b\u505a\u4e86\u4e00\u4e2a \u8f93\u5165\u53c2\u6570\uff0c\u800c\u5176\u4ed6\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u4e0d\u4f1a\u4f7f\u7528\u7ec4\u4ef6\u53c2\u6570\u7684\u3002\u6240\u4ee5\u8fd9\u91cc\u5c06\u7ec4\u4ef6\u5c5e\u6027\u540d\u6539\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},".UseDt(True)\n")),(0,n.kt)("p",null,"\u53ef\u80fd\u66f4\u5408\u9002\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u8fd9\u91cc\u8868\u9762\u4e0a\u770b\uff0c\u597d\u50cf\u53ef\u4ee5\u901a\u8fc7\u51fd\u6570\u662f\u5426\u5f15\u7528dt\u8fdb\u884c\u81ea\u52a8\u63a8\u5bfc\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u4f8b\u5982\u51fd\u6570\u53ea\u662f\u4f7f\u7528dt\u6765\u751f\u6210\u968f\u673a\u6570\uff0c\u5e76\u4e0d\u662f\u8ba1\u7b97\u8de8\u5e27\u72b6\u6001\u3002\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4e0d\u80fd\u5bf9dt\u7684\u4f7f\u7528\u6709\u4efb\u4f55\u5047\u8bbe\u3002")),(0,n.kt)("h4",{id:"2332-\u7ba1\u7406\u4e0e\u8c03\u5ea6"},"2.3.3.2 \u7ba1\u7406\u4e0e\u8c03\u5ea6"),(0,n.kt)("p",null,"\u603b\u7684\u539f\u5219\uff0c\u8f93\u5165\u53d8\u5316\u4e86\u624d\u4f1a\u5bfc\u81f4\u7ec4\u4ef6\u6267\u884c\u8fd9\u4ef6\u4e8b\u60c5\u662f\u4e0d\u9700\u8981\u8ba9\u5f00\u53d1\u8005\u611f\u77e5\u7684\uff0c\u66f4\u4e0d\u5e94\u8be5\u9700\u8981\u5b83\u6765\u63a7\u5236\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u662f\u5b8c\u5168\u80fd\u591f\u8ba1\u7b97/\u63a8\u5bfc\u51fa\u8fd9\u4e00\u5207\u7684\u3002\u5f53\u7136\uff0c\u52a8\u753b\u9664\u5916\uff0c\u6216\u8005\u66f4\u786e\u5207\u5730\u8bf4\uff0c\u662f\u90a3\u4e9b\u4e0d\u4f9d\u8d56\u4e8e\u8f93\u5165\uff0c\u800c\u81ea\u884c\u5b9a\u4e49\u4e86\u79c1\u6709\u53d8\u91cf\u7684\u7ec4\u4ef6\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u6240\u4ee5\u5b9a\u4e49\u79c1\u6709\u53d8\u91cf\uff0c\u5176\u76ee\u7684\u5c31\u662f\u5728\u76f8\u540c\u7684\u8f93\u5165\u4e0b\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u7684\u8f93\u51fa\uff0c\u8fd9\u5c31\u662f\u4f20\u7edfOOP\u4e2d\u72b6\u6001\u7684\u5f71\u54cd\u3002\u53c2\u89c12.2.3.3\u8282\u3002"),(0,n.kt)("p",null,"\u5728Bevy\u4e2d\uff0c\u5b83\u4f9d\u8d56\u4e8e\u7531\u7a0b\u5e8f\u5458\u51b3\u5b9a\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5426\u5bf9\u67d0\u4e2aComponent\u9020\u6210\u4e86\u4fee\u6539\uff0c\u4ed6\u9700\u8981\u6bcf\u4e2a\u7ec4\u4ef6\u4f7f\u7528mut\u5173\u952e\u5b57\u7684\u67e5\u8be2\uff0c\u8fd9\u6837\u7cfb\u7edf\u5c31\u53ef\u4ee5\u5224\u65ad\u5176\u503c\u662f\u5426\u53ef\u80fd\u88ab\u4fee\u6539\uff0c\u4f46\u662f\u4e0d\u53ef\u4fee\u6539\u7684\u901a\u5e38\u662f\u5c11\u6570\u3002"),(0,n.kt)("p",null,"\u8ddfUnity\u4e0d\u4e00\u6837\uff0c\u6211\u4eec\u4e0d\u80fd\u628aVersion Number\u66b4\u9732\u5728Query\u4e2d\u8ba9\u5f00\u53d1\u8005\u53bb\u6bd4\u8f83\uff0c\u56e0\u4e3a\u8fd9\u672c\u53ef\u4ee5\u81ea\u52a8\u8fdb\u884c\u7684\u3002\u4f55\u51b5\u5728Query\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u4ecd\u7136\u8fdb\u53bb\u4e86\uff0c\u53ea\u662f\u8fdb\u53bb\u4e4b\u540e\u624d\u53d1\u73b0\u4e0d\u9700\u8981\u8ba1\u7b97\u3002\u8fd9\u4e2a\u5224\u65ad\u7684\u56fa\u5b9a\u7ed3\u6784\u5b8c\u5168\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u53bb\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,"CreationVM\u8fd0\u884c\u65f6\u9700\u8981\u5bf9\u6bcf\u4e2a\u5757\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5982\u679c\u53d1\u73b0\u6ca1\u6709\u4fee\u6539\u5e76\u4e14\u4e0d\u662f\u52a8\u753b\u7c7b\u578b\u7684\uff0c\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u7ec4\u4ef6\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2333-\u53d8\u66f4\u7684\u5224\u5b9a"},"2.3.3.3 \u53d8\u66f4\u7684\u5224\u5b9a"),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u5197\u4f59\u7684\u5b58\u5728\uff0c\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u5f53\u8f93\u5165\u53d1\u751f\u6539\u53d8\u7684\u65f6\u5019\u624d\u8fdb\u884c\u8ba1\u7b97\uff0c\u53ef\u80fd\u4f1a\u5b58\u5728\u5927\u91cf\u91cd\u590d\u8ba1\u7b97\u3002\u6b64\u5916\uff0c\u5373\u4f7f\u662f\u4e0d\u540c\u7684\u8f93\u5165\uff0c\u4e5f\u53ef\u80fd\u5b58\u5728\u76f8\u540c\u7684\u8f93\u51fa\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u4e0d\u80fd\u50cfUnity/Bevy\u90a3\u6837\u4ec5\u51ed\u7ec4\u4ef6\u662f\u5426\u5bf9\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u6765\u8fdb\u884c\u5224\u65ad\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5199\u64cd\u4f5c\u8fd9\u79cd\u903b\u8f91\u662f\u4e0d\u53d8\u7684\uff0c\u610f\u5473\u7740\u5982\u679c\u5b58\u5728\u5927\u91cf\u7684\u6d6a\u8d39\uff0c\u90a3\u4e48\u8fd9\u79cd\u6d6a\u8d39\u4f1a\u4e00\u76f4\u6301\u7eed\uff0c\u8fd9\u672c\u8eab\u662f\u4e00\u79cd\u7ed3\u6784\u6027\u7279\u5f81\uff0c\u53ef\u4ee5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u62c9\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bcf\u4e2a\u503c\u8fdb\u884c\u5224\u522b\u6765\u51b3\u5b9a\u5176\u5c5e\u6027\u662f\u5426\u53d1\u751f\u53d8\u66f4\uff0c\u4f46\u7531\u4e8e\u7ec4\u4ef6\u5904\u5728\u5e76\u884c\u8ba1\u7b97\u4e2d\uff0c\u4e0d\u80fd\u7edf\u4e00\u5bf9\u4e00\u4e2a\u5757\u8bbe\u7f6e\u4e00\u4e2aisChanged\u53d8\u91cf\uff0c\u4e3a\u4e86\u907f\u514d\u5bf9\u5171\u4eab\u53d8\u91cf\u7684\u5199\u64cd\u4f5c\uff0c\u9700\u8981\u4f7f\u7528\u548c\u7ec4\u4ef6\u6570\u636e\u4e00\u6837\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u53ef\u4ee5\u9488\u5bf9\u6bcf\u4e2a\u5757\u4e2d\u7684\u6bcf\u4e2a\u53ef\u5199\u5c5e\u6027\u8bbe\u7f6e\u4e00\u4e2a\u901a\u7528\u7684\u6574\u6570\u6570\u7ec4\uff0c\u5f53\u7136\u8fd8\u662fSOA\u7684\u5f62\u5f0f\uff0c\u4f7f\u5f97\u5b83\u4eec\u597d\u50cf\u7ec4\u4ef6\u7684\u53e6\u5916\u4e00\u4e2a\u5c5e\u6027\uff0c\u53ea\u662f\u8fd9\u4e2a\u5c5e\u6027\u662f\u7531\u5757\u8fdb\u884c\u7ba1\u7406\u7684\uff0c\u800c\u5b9e\u4f53\u6216\u8005\u7ec4\u4ef6\u662f\u611f\u77e5\u4e0d\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7ec4\u4ef6\u51fd\u6570\u5bf9\u8f93\u5165\u503c\u8fdb\u884c\u5199\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u7f16\u8bd1\u5668\u4f1a\u81ea\u52a8\u4e3a\u673a\u5668\u7801\u52a0\u5165\u4e00\u6bb5\u51fd\u6570\uff0c\u8fd9\u7aef\u51fd\u6570\u5176\u5b9e\u505a\u4e86\u4e00\u4e2a\u5224\u65ad\uff1a\u5982\u679c\u8d4b\u503c\u7684\u503c\u4e0e\u539f\u6765\u7684\u503c\u4e0d\u4e00\u6837\uff0c\u5219\u5bf9\u5e94\u5b9e\u4f53\u5bf9\u8c61\u5bf9\u5e94\u7684\u503c\u4e3a1\uff0c\u5426\u5219\u4e3a 0\u3002\u6240\u4ee5\u6bd4\u5982\u4e00\u4e2a\u5305\u542b8\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u7684\u5757\uff0c\u5176\u8ba1\u7b97\u5b8c\u4e4b\u540e\u7684\u503c\u5982\u679c\u6ca1\u6709\u53d1\u751f\u6539\u53d8\uff0c\u5219\u503c\u4e3a\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"00000000\n")),(0,n.kt)("p",null,"\u5982\u679c\u5176\u4e2d\u7684\u4efb\u4f55\u503c\u4e3a1\uff0c\u5219\u610f\u5473\u7740\u5176\u503c\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u6240\u6709\u540e\u7eed\u4f9d\u8d56\u4e8e\u8be5\u5c5e\u6027\u7684\u7ec4\u4ef6\u90fd\u5e94\u8be5\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5bf9\u5e94\u7684\u8c03\u5ea6\u5668\u5e94\u8be5\u628a\u8fd9\u4e2a\u6539\u53d8\u7684\u72b6\u6001\u4f20\u9012\u7ed9\u6240\u6709\u5f15\u7528\u8be5\u5c5e\u6027\u7684\u5757\u3002\u7136\u540e\u5728\u8fd9\u4e9b\u5757\u8ba1\u7b97\u7684\u65f6\u5019\uff0c\u9996\u5148\u8fdb\u884c\u5224\u65ad\uff0c\u9664\u975e\u6240\u6709\u503c\u90fd\u4e3a0\uff0c\u5426\u5219\u6574\u4e2a\u5757\u90fd\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u5757\u53ea\u9700\u8981\u4fdd\u5b58\u4e00\u4e2a\u6570\u5b57\uff0c\u901a\u8fc7\u4f7f\u7528\u7279\u6b8a\u7684\u5bf9\u4f4d\u8fdb\u884c\u64cd\u4f5c\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u6211\u4eec\u751a\u81f3\u6bcf\u4e2a\u5bf9\u8c61\u53ea\u9700\u8981\u5360\u7528\u4e00\u4e2abit\u7684\u5b58\u50a8\uff0c\u8fd9\u4e2a\u5927\u5c0f\u8ddfUnity DOTS\u7684Version Number\u5360\u7528\u7684\u5b58\u50a8\u5dee\u4e0d\u591a\uff0c\u4f46\u662f\u5176\u539f\u7406\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u5e76\u4e14\u57fa\u4e8e\u503c\uff08\u800c\u4e0d\u662f\u903b\u8f91\uff09\u7684\u6bd4\u8f83\u66f4\u53ef\u9760\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u7684\u9002\u914d\uff0c\u6027\u80fd\u5f00\u9500\u4e5f\u51e0\u4e4e\u53ef\u4ee5\u7701\u7565\u3002"),(0,n.kt)("h4",{id:"2334-version--tracking"},"2.3.3.4 Version Tracking"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"version-tracking",src:l(2150).Z,width:"2360",height:"1318"})),(0,n.kt)("p",null,"Change tracking is a hard problem to solve efficiently and robustly. It\u2019s easier to make it a responsibility of the content creators. They define what is static and what is dynamic. Unity doesn\u2019t want to add complexity to content creators."),(0,n.kt)("p",null,"Fortunately the DOTS architecture has a nice solution for this problem. DOTS queries define read and write access properties to each component included in the query. This helps with scheduling, as multiple reads of the same data are race free and can be executed concurrently."),(0,n.kt)("p",null,"Since the write access is tracked explicitly and misuse is guarded by the compiler, we know which component arrays in each chunk were potentially modified."),(0,n.kt)("p",null,"To implement a \u201cfree\u201d data version tracking system, we add a version number to each component array in each chunk. When write access is requested, the array version number is bumped to the global version counter, which is monotonically increasing. Systems store previously seen global version counter value. This value can be used as version change filter in future queries, to limit the query over chunks that have changed since the system saw them previously. This change tracking system is more robust than dirty flags and doesn\u2019t require any additional bookkeeping."),(0,n.kt)("p",null,"We rely heavily on DOTS change tracking in the hybrid renderer."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Version numbers")),(0,n.kt)("p",null,"Version numbers (also known as generations) detect potential changes. You can use them to implement efficient optimization strategies, such as to skip processing when data hasn't changed since the last frame of the application. It's useful to perform quick version checks on entities to improve the performance of your application."),(0,n.kt)("p",null,"This page outlines all of the different version numbers ECS uses, and the conditions that causes them to change."),(0,n.kt)("p",null,"All version numbers are 32-bit signed integers. They always increase unless they wrap around: signed integer overflow is defined behavior in C#. This means that to compare version numbers, you should use the (in)equality operator, not relational operators."),(0,n.kt)("p",null,"For example, the correct way to check if VersionB is more recent than VersionA is to use the following:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"bool VersionBIsMoreRecent = (VersionB - VersionA) > 0;\n")),(0,n.kt)("p",null,"There is usually no guarantee how much a version number increases by."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityId.Version")),(0,n.kt)("p",null,"An ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is made of an index and a version number. Because ECS recycles indices, the version number is increased in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager")," every time the entity is destroyed. If there is a mismatch in the version numbers when an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId")," is looked up in ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityManager"),", it means that the entity referred to doesn\u2019t exist anymore."),(0,n.kt)("p",null,"For example, before you fetch the position of the enemy that a unit is tracking via an ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityId"),", you can call ",(0,n.kt)("inlineCode",{parentName:"p"},"ComponentDataFromEntity.Exists"),". This uses the version number to check if the entity still exists."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"World.Version")),(0,n.kt)("p",null,"ECS increases the version number of a World every time it creates or destroys a manager (i.e. system)."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityDataManager.GlobalVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," is increased before every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"System.LastSystemVersion")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion")," takes the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," after every job component system update."),(0,n.kt)("p",null,"You should use this version number in conjunction with ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion[]"),"."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Chunk.ChangeVersion")),(0,n.kt)("p",null,"For each component type in the archetype, this array contains the value of ",(0,n.kt)("inlineCode",{parentName:"p"},"EntityDataManager.GlobalVersion")," at the time the component array was last accessed as writeable within this chunk. This does not guarantee that anything has changed, only that it might have changed."),(0,n.kt)("p",null,"You can never access shared components as writeable, even if there is a version number stored for those too: it serves no purpose."),(0,n.kt)("p",null,"When you use the ",(0,n.kt)("inlineCode",{parentName:"p"},"WithChangeFilter()")," function in an ",(0,n.kt)("inlineCode",{parentName:"p"},"Entities.ForEach")," construction, ECS compares the ",(0,n.kt)("inlineCode",{parentName:"p"},"Chunk.ChangeVersion")," for that specific component to ",(0,n.kt)("inlineCode",{parentName:"p"},"System.LastSystemVersion"),", and it only processes chunks whose component arrays have been accessed as writeable after the system last started running."),(0,n.kt)("p",null,"For example, if the amount of health points of a group of units is guaranteed not to have changed since the previous frame, you can skip checking if those units should update their damage model."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"EntityManager.m_ComponentTypeOrderVersion[]")),(0,n.kt)("p",null,"For each non-shared component type, ECS increases the version number every time an iterator involving that type becomes invalid. In other words, anything that might modify arrays of that type (not instances)."),(0,n.kt)("p",null,"For example, if you have static objects that a particular component identifies, and a per-chunk bounding box, you only need to update those bounding boxes if the type order version changes for that component."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SharedComponentDataManager.m_SharedComponentVersion[]")),(0,n.kt)("p",null,"These version numbers increase when any structural change happens to the entities stored in a chunk that reference the shared component."),(0,n.kt)("p",null,"For example, if you keep a count of entities per shared component, you can rely on that version number to only redo each count if the corresponding version number changes."),(0,n.kt)("h4",{id:"2335-bevys-change-detection"},"2.3.3.5 Bevy's Change Detection"),(0,n.kt)("p",null,"Bevy allows you to easily detect when data is changed. You can use this to perform actions in response to changes."),(0,n.kt)("p",null,"One of the main use cases is optimization \u2013 avoiding unnecessary work by only doing it if the relevant data has changed. Another use case is triggering special actions to occur on changes, like configuring something or sending the data somewhere."),(0,n.kt)("p",null,"Filtering"),(0,n.kt)("p",null,"You can make a ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html"},"query")," that only yields entities if specific ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/ec.html#components"},"components")," on them have been modified."),(0,n.kt)("p",null,"Use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/queries.html#query-filters"},"query filters"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Added")),(0,n.kt)("p",{parentName:"li"},": detect new component instances"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"if the component was added to an existing entity"),(0,n.kt)("li",{parentName:"ul"},"if a new entity with the component was spawned"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("inlineCode",{parentName:"p"},"Changed")),(0,n.kt)("p",{parentName:"li"},": detect component instances that have been changed"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"triggers when the component is accessed mutably"),(0,n.kt)("li",{parentName:"ul"},"also triggers if the component is newly-added (as per ",(0,n.kt)("a",{parentName:"li",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added")),")")))),(0,n.kt)("p",null,"(If you want to react to removals, see the page on ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/removal-detection.html"},"removal detection"),". It works differently and is much trickier to use.)"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},'/// Print the stats of friendly players when they change\nfn debug_stats_change(\n query: Query<\n // components\n (&Health, &PlayerXp),\n // filters\n (Without, Or<(Changed, Changed)>), \n >,\n) {\n for (health, xp) in query.iter() {\n eprintln!(\n "hp: {}+{}, xp: {}",\n health.hp, health.extra, xp.0\n );\n }\n}\n\n/// detect new enemies and print their health\nfn debug_new_hostiles(\n query: Query<(Entity, &Health), Added>,\n) {\n for (entity, health) in query.iter() {\n eprintln!("Entity {:?} is now an enemy! HP: {}", entity, health.hp);\n }\n}\n')),(0,n.kt)("p",null,"Checking"),(0,n.kt)("p",null,"If you want to access all the entities, as normal, regardless of if they have been modified, but you just want to check the status, you can use the special ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.ChangeTrackers.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ChangeTrackers"))," query parameter."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"/// Make sprites flash red on frames when the Health changes\nfn debug_damage(\n mut query: Query<(&mut Sprite, ChangeTrackers)>,\n) {\n for (mut sprite, tracker) in query.iter_mut() {\n // detect if the Health changed this frame\n if tracker.is_changed() {\n sprite.color = Color::RED;\n } else {\n // extra check so we don't mutate on every frame without changes\n if sprite.color != Color::WHITE {\n sprite.color = Color::WHITE;\n }\n }\n }\n}\n")),(0,n.kt)("p",null,"This is useful for processing all entities, but doing different things depending on if they have been modified."),(0,n.kt)("p",null,"For ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resources"),", change detection is provided via methods on the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.Res.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Res")),"/",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/system/struct.ResMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ResMut"))," system parameters."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn check_res_changed(\n my_res: Res,\n) {\n if my_res.is_changed() {\n // do something\n }\n}\n\nfn check_res_added(\n // use Option, not to panic if the resource doesn't exist yet\n my_res: Option>,\n) {\n if let Some(my_res) = my_res {\n // the resource exists\n\n if my_res.is_added() {\n // it was just added\n // do something\n }\n }\n}\n")),(0,n.kt)("p",null,"Note that change detection cannot currently be used to detect ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," changes (via the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/schedule/struct.State.html"},(0,n.kt)("inlineCode",{parentName:"a"},"State"))," ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/res.html"},"resource"),") (",(0,n.kt)("a",{parentName:"p",href:"https://github.com/bevyengine/bevy/issues/2343"},"bug"),")."),(0,n.kt)("p",null,"What gets detected"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Changed.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Changed"))," detection is triggered by ",(0,n.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/stable/std/ops/trait.DerefMut.html"},(0,n.kt)("inlineCode",{parentName:"a"},"DerefMut")),". Simply accessing components via a mutable query, without actually performing a ",(0,n.kt)("inlineCode",{parentName:"p"},"&mut")," access, will ",(0,n.kt)("em",{parentName:"p"},"not")," trigger it."),(0,n.kt)("p",null,"This makes change detection quite accurate. You can rely on it to optimize your game's performance, or to otherwise trigger things to happen."),(0,n.kt)("p",null,"Also note that when you mutate a component, Bevy does not track if the new value is actually different from the old value. It will always trigger the change detection. If you want to avoid that, simply check it yourself:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-rust"},"fn update_player_xp(\n mut query: Query<&mut PlayerXp>,\n) {\n for mut xp in query.iter_mut() {\n let new_xp = maybe_lvl_up(&xp);\n\n // avoid triggering change detection if the value is the same\n if new_xp != *xp {\n *xp = new_xp;\n }\n }\n}\n")),(0,n.kt)("p",null,"Change detection works on a per-",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/systems.html"},"system")," granularity, and is reliable. A system will not detect changes that it made itself, only those done by other systems, and only if it has not seen them before (the changes happened since the last time it ran). If your system only runs sometimes (such as with ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/states.html"},"states")," or ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/run-criteria.html"},"run criteria"),"), you do ",(0,n.kt)("em",{parentName:"p"},"not")," have to worry about missing changes."),(0,n.kt)("p",null,"Beware of frame delay / 1-frame-lag. This can occur if Bevy runs the detecting system before the changing system. The detecting system will see the change the next time it runs, typically on the next frame update."),(0,n.kt)("p",null,"If you need to ensure that changes are handled immediately / during the same frame, you can use ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/system-order.html"},"explicit system ordering"),"."),(0,n.kt)("p",null,"However, when detecting component additions with ",(0,n.kt)("a",{parentName:"p",href:"https://docs.rs/bevy/0.7.0/bevy/ecs/query/struct.Added.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Added"))," (which are typically done using ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/commands.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Commands")),"), this is not enough; you need ",(0,n.kt)("a",{parentName:"p",href:"https://bevy-cheatbook.github.io/programming/stages.html"},"stages"),"."),(0,n.kt)("h3",{id:"234-\u7f16\u8bd1"},"2.3.4 \u7f16\u8bd1"),(0,n.kt)("p",null,"\u7531\u4e8eSystem\u662f\u4e0d\u4f9d\u8d56\u4e8e\u6570\u636e\u53ca\u6570\u636e\u7ed3\u6784\u7684\uff0c\u5b83\u53ea\u5305\u542b\u4e00\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\uff0c\u6bcf\u4e2aSystem\u4f7f\u7528\u7684\u6240\u6709\u6570\u636e\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e2a\u76f8\u5bf9\u7d22\u5f15\u5730\u5740\u8fdb\u884c\u67e5\u627e\uff0c\u6240\u4ee5\u7f16\u8bd1\u5668\u53ea\u662f\u8ba1\u7b97\u4e86\u6bcf\u4e2a\u53d8\u91cf\u7684\u4e00\u4e2a\u7d22\u5f15\u5730\u5740\uff0c\u901a\u8fc7\u5806\u800c\u4e0d\u662f\u5806\u6808\u6307\u9488\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u5f00\u53d1\u5b8c\u6210\u4e4b\u540e\u5b83\u7684\u7f16\u8bd1\u5de5\u4f5c\u5c31\u7ed3\u675f\u4e86\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5b9e\u9645\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5b9e\u4f53\uff0c\u4e91\u7aef\u4f1a\u6839\u636e\u8fd9\u4e2a\u5b9e\u4f53\u914d\u7f6e\uff08\u5bf9\u7ec4\u4ef6\u7684\u5f15\u7528\uff09\uff0c\u5bf9\u5b9e\u4f53\u7684\u6570\u636e\u8fdb\u884c\u7ec4\u7ec7\uff0c\u5b83\u4f1a\u6839\u636eSystem\u5bf9\u6570\u636e\u7684\u4f7f\u7528\u5b9a\u4e49\uff0c\u5c06\u8fd9\u4e9b\u6570\u636e\u7cbe\u5fc3\u7ec4\u7ec7\u5728Creation Table\u4e2d\uff0c\u7136\u540e\u518d\u5c06\u9002\u5f53\u7684\u6570\u7ec4\u53ca\u5176\u7d22\u5f15\u53d1\u9001\u7ed9System\u7684\u4ee3\u7801\u8fdb\u884c\u6267\u884c\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7f16\u8f91\u5668Reality Create\u4e2d\uff0c\u5f00\u53d1\u8005\u6bcf\u5199\u5b8c\u4e00\u4e2a\u7ec4\u4ef6\uff08\u4f8b\u5982\u4e00\u4e2aSystem\uff09\u90fd\u4f1a\u8fdb\u884c\u7f16\u8bd1\uff0c\u9664\u975e\u4ed6\u518d\u6b21\u4fee\u6539\u7ec4\u4ef6\u6e90\u4ee3\u7801\uff0c\u5426\u5219\u4e0d\u9700\u8981\u518d\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c5e\u4e8e\u4e00\u79cdAOT\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u7528\u6237\uff0c\u5b83\u901a\u5e38\u76f4\u63a5\u5728Reality World app\u4e2d\u8fdb\u884c\u64cd\u4f5c\uff0cTA\u505a\u7684\u4e8b\u60c5\u4e3b\u8981\u662f\u4fee\u6539\u5b9e\u4f53\u7684\u914d\u7f6e\u6570\u636e\uff0c\u5f53\u8fd9\u4e9b\u6570\u636e\u53d1\u751f\u4fee\u6539\u4e4b\u540e\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f1a\u6d89\u53ca\u4ee3\u7801\u91cd\u65b0\u7f16\u8bd1\uff0c\u53ea\u6709Creation Table\u5bf9\u6570\u636e\u7684\u5185\u5b58\u5e03\u5c40\u8fdb\u884c\u91cd\u65b0\u8c03\u6574\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5c3d\u7ba1\u6574\u4e2a\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u770b\u8d77\u6765\u5f88\u590d\u6742\uff0c\u5f97\u76ca\u4e8e\u8fd9\u79cd\u6570\u636e\u5206\u79bb\u7684\u673a\u5236\uff0c\u7f16\u8bd1\u903b\u8f91\u76f8\u5bf9\u8fd8\u662f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("h4",{id:"2341-aot"},"2.3.4.1 AOT"),(0,n.kt)("h4",{id:"2342-\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"},"2.3.4.2 \u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u987a\u5e8f"),(0,n.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u865a\u62df\u673a\u5185\u90e8\u7684\u7ec4\u4ef6\u6267\u884c\u987a\u5e8f\u662f\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4fee\u6539\u7ec4\u4ef6\u673a\u5668\u7801\u5728\u5185\u5b58\u4e2d\u7684\u4f4d\u7f6e\uff0c\u6309\u7167\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u8fdb\u884c\u5b58\u50a8\uff0c\u8fd9\u6837\u7ec4\u4ef6\u6307\u4ee4\u7684\u52a0\u8f7d\u5c06\u80fd\u591f\u5145\u5206\u5229\u7528\u7f13\u5b58\u7279\u6027\uff0c\u8fdb\u4e00\u6b65\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2343-\u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"},"2.3.4.3 \u5ba2\u6237\u7aef\u7684\u5b57\u8282\u7801"),(0,n.kt)("p",null,"\u6709\u4e9b\u5ba2\u6237\u7aef\uff0c\u5982iOS\u5e76\u4e0d\u6c38\u7eed\u76f4\u63a5\u52a0\u8f7d\u673a\u5668\u7801\uff0c\u8fd9\u65f6\u5019\u4f1a\u9000\u5316\u4e3a\u6267\u884c\u5b57\u8282\u7801\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u5df2\u7ecf\u5173\u4e8e\u7ec4\u4ef6\u548c\u6570\u636e\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u5bf9\u7aef\u4fa7\u7684\u5b57\u8282\u7801\u865a\u62df\u673a\u8fdb\u884c\u66f4\u591a\u7684\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u7531\u4e8e\u7aef\u4fa7\u53ea\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u903b\u8f91\uff0c\u6838\u5fc3\u3001\u590d\u6742\u7684\u8ba1\u7b97\u903b\u8f91\u8fd8\u662f\u5728\u540e\u7aef\u8fdb\u884c\u8ba1\u7b97\uff0c\u6240\u4ee5\u6027\u80fd\u5f71\u54cd\u5e76\u4e0d\u5927\u3002\u56e0\u4e3a\u7aef\u4fa7\u5176\u4ed6\u903b\u8f91\u5982\u6e32\u67d3\u548c\u7269\u7406\u6a21\u62df\uff0c\u4ecd\u7136\u662fC++\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"235-\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.3.5 \u94fe\u63a5\u548c\u52a0\u8f7d"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\uff0c\u56e0\u4e3a\u6e90\u4ee3\u7801\u4e4b\u95f4\u76f8\u4e92\u5f15\u7528\u4e86\u7c7b\u578b\u53ca\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u5b83\u4eec\u9700\u8981\u94fe\u63a5\u5728\u4e00\u8d77\u3002\u867d\u7136\u4e3a\u4e86\u5b9e\u73b0\u5982\u589e\u91cf\u66f4\u65b0\u7b49\uff0c\u80fd\u591f\u907f\u514d\u6539\u52a8\u4e00\u4e2a\u95ee\u9898\u5c31\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u7cfb\u7edf\uff0c\u4f46\u662f\u94fe\u63a5\u8fc7\u7a0b\u662f\u7701\u4e0d\u4e86\u7684\uff0c\u94fe\u63a5\u7684\u8fc7\u7a0b\u5373\u662f\u628a\u5404\u4e2a\u6e90\u4ee3\u7801\u4e2d\u76f8\u4e92\u5f15\u7528\u7684\u90e8\u5206\u94fe\u63a5\u8d77\u6765\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u7684\u673a\u5236\u5bf9\u4e8e\u5927\u578b\u5b9e\u65f6\u7cfb\u7edf\u7684\u9650\u5236\u5982\u4e0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u589e\u52a0\u4e86\u542f\u52a8\u65f6\u7684\u52a0\u8f7d\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u5f97\u7a0b\u5e8f\u89c4\u6a21\u5f88\u96be\u4f38\u7f29\uff0c\u56e0\u4e3a\u66f4\u5927\u89c4\u6a21\u7684\u7a0b\u5e8f\u610f\u5473\u7740\u66f4\u5927\u89c4\u6a21\u7684\u94fe\u63a5\u65f6\u95f4"),(0,n.kt)("li",{parentName:"ul"},"\u540c\u65f6\uff0c\u5982\u679c\u94fe\u63a5\u6587\u4ef6\u589e\u591a\uff0c\u5f88\u96be\u7ba1\u7406\u5230\u5e95\u8981\u52a0\u8f7d\u90a3\u4e9b\u52a8\u6001\u5e93\uff0c\u5982\u679c\u6bcf\u4e2a\u52a8\u6001\u5e93\u53ea\u4f7f\u7528\u4e00\u70b9\u4fe1\u606f\uff0c\u90a3\u7cfb\u7edf\u5185\u5b58\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u6d6a\u8d39\u3002")),(0,n.kt)("p",null,"\u867d\u7136\u9759\u6001\u7c7b\u578b\u7684\u8bed\u8a00\u5176\u94fe\u63a5\u8fc7\u7a0b\u53ea\u9700\u8981\u53d1\u751f\u4e00\u6b21\uff0c\u4f46\u662f\u5bf9\u4e8e\u52a8\u6001\u8bed\u8a00\u6765\u8bb2\uff0c\u8fd9\u6837\u7684\u94fe\u63a5\u8fc7\u7a0b\u9700\u8981\u5728\u52a0\u8f7d\u7684\u65f6\u5019\u6267\u884c\uff0c\u8fd9\u589e\u52a0\u4e86\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u52a0\u8f7d\u65f6\u7684\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u89e3\u51b3\u5927\u578b\u7cfb\u7edf\u7684\u52a8\u6001\u89e3\u91ca\u95ee\u9898\uff0c\u6211\u4eec\u5fc5\u987b\u8981\u8981\u80fd\u591f\u5c06\u7a0b\u5e8f\u5206\u6210\u5f88\u5c0f\u7684\u788e\u7247\uff0c\u5e76\u4e14\u53bb\u9664\u76f8\u4e92\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u4ece\u800c\u5f7b\u5e95\u53bb\u9664\u6389\u94fe\u63a5\u8fd9\u4e2a\u73af\u5883"),"\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u9700\u8981\u505a\u5230\u51e0\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u4e4b\u95f4\u6ca1\u6709\u76f8\u4e92\u7c7b\u578b\u5f15\u7528\uff0c\u6216\u8005\u8bf4\u6e90\u4ee3\u7801\u6ca1\u6709\u590d\u6742\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u53ea\u6709\u57fa\u672c\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8bbf\u95ee\u7684\u6570\u636e\u5730\u5740\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u5206\u914d\uff0c\u5373\u4e0d\u9700\u8981\u901a\u8fc7\u7f16\u8bd1\u5668\u5b9e\u73b0\u6307\u5b9a\u548c\u8ba1\u7b97\u6570\u636e\u5730\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u6570\u636e\u7684\u52a8\u6001\u5206\u914d\u8981\u8db3\u591f\u7b80\u5355\uff0c\u5426\u5219\u4e5f\u4f1a\u589e\u52a0\u6027\u80fd\u5f00\u652f\uff0c\u53c2\u89c1Creation Table\u76f8\u5173\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u6e90\u4ee3\u7801\u8981\u8db3\u591f\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u5c3d\u53ef\u80fd\u52a0\u8f7d\u66f4\u5c11\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u6700\u7ec8\uff0cRealityIS\u51e0\u4e4e\u53ef\u4ee5\u5b8c\u5168\u629b\u5f03\u52a8\u6001\u94fe\u63a5\u8fd9\u4e00\u90e8\u5206\u7684\u8ba1\u7b97\u8fc7\u7a0b\u3002"),(0,n.kt)("h3",{id:"236-\u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"},"2.3.6 \u7ec4\u4ef6\u5173\u7cfb\u4e0e\u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u7ef4\u62a4\u4e00\u4e2a\u8868\uff0c\u8bb0\u5f55\u6240\u6709\u5f53\u524d\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u5e76\u6839\u636e\u7ec4\u4ef6\u4e2d\u7684\u6570\u636e\u5b9a\u4e49\uff0c\u7ba1\u7406\u5b9e\u4f53\u5bf9\u8c61\u5185\u5b58\u6570\u636e\u7684\u5e03\u5c40\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\u7b49\u4e8b\u60c5\u3002"),(0,n.kt)("h4",{id:"2361-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"},"2.3.6.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u53ca\u987a\u5e8f"),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6216\u8005Creation\uff0c\u9996\u5148\u9700\u8981\u6839\u636e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u8ba1\u7b97\u5b83\u4eec\u7684\u6267\u884c\u987a\u5e8f\u3002\u57fa\u4e8e\u4e00\u4e0b\u7684\u539f\u7406\u53ef\u4ee5\u8ba1\u7b97\u51fa\u8fd9\u4e2a\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u6709\u4e00\u4e2a\u8f93\u5165\u548c\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u90fd\u6765\u81ea\u7b26\u53f7\u8868")),(0,n.kt)("p",null,"\u57fa\u4e8e\u4e0a\u8ff0\u4e24\u4e2a\u5173\u7cfb\uff0c\u53ef\u4ee5\u8ba1\u7b97\u51fa\u6240\u6709\u7ec4\u4ef6\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u6309\u7167\u8fd9\u6837\u7684\u987a\u5e8f\u6267\u884c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u53ef\u4ee5\u4fdd\u8bc1\u65f6\u5e8f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6709\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u5904\u7406\u590d\u6742\u7684\u987a\u5e8f\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u590d\u6742\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u987a\u5e8f\u51e0\u4e4e\u662f\u4e0d\u53ef\u7ef4\u62a4\u7684")),(0,n.kt)("p",null,"\u5f88\u591a\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u91c7\u7528\u6d88\u606f\u673a\u5236\u6216\u8005\u54cd\u5e94\u5f0f\u7684\u65b9\u5f0f\uff0c\u5f88\u96be\u4fdd\u8bc1\u65f6\u5e8f\u7684\u95ee\u9898\uff0c\u800c\u65f6\u5e8f\u7684\u95ee\u9898\u53ef\u80fd\u4f1a\u5e26\u6765\u5f88\u591abug\u4ee5\u53ca\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u590d\u6742\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u672c\u8d28\u4e0a\u662f\u5c06\u6d88\u606f\u5217\u8868\u8fdb\u884c\u7cbe\u5fc3\u7684\u7ec4\u7ec7\uff0c\u4f7f\u5f97\u4e8b\u4ef6\u7684\u5206\u53d1\u4e0d\u518d\u662f\u5f02\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h4",{id:"2362-\u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"},"2.3.6.2 \u6df1\u5ea6\u5b66\u4e60\u4e2d\u8ba1\u7b97\u56fe\u7684\u542f\u793a"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"Actor\u6a21\u5f0f\u672c\u8eab\u662f\u4e0d\u9700\u8981\u4fdd\u5b58\u72b6\u6001\u7684\uff0c\u800c\u6e38\u620f\u4e2d\u7684\u6570\u636e\u9700\u8981\u6301\u4e45\u4fdd\u5b58\uff0c\u9664\u975e\u5bf9\u8c61\u88ab\u9500\u6bc1")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u521b\u5efa\u5bf9\u8c61\u5b9e\u9645\u4e0a\u662f\u521b\u5efa\u4e86\u4e00\u4e2a\u8ba1\u7b97\u56fe\uff0c\u53ea\u4e0d\u8fc7\u4e0e\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u8ba1\u7b97\u56fe\u76f8\u6bd4\uff0c\u5b83\u4eec\u7684\u8282\u70b9\u90fd\u5177\u6709\u5168\u5c40\u5c5e\u6027\uff0c\u4ece\u800c\u6839\u636e\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u8fdb\u884c\u63a8\u65ad\uff0c\u800cRealityIS\u9700\u8981\u6839\u636e\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u63a8\u65ad\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff0c\u6240\u6709Creation\u5185\u90e8\u7684\u6bcf\u4e2a\u5bf9\u8c61\u7684\u7ec4\u4ef6\u5f62\u6210\u4e00\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\uff0c\u591a\u4e2a\u5bf9\u8c61\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u5728\u5408\u5e76\u5728\u4e00\u4e2a\u7edf\u4e00\u7684\u4f9d\u8d56\u5173\u7cfb\u8868\u3002\u6700\u7ec8\u8fd0\u884c\u65f6\u6309\u7167\u8fd9\u4e2a\u4f9d\u8d56\u5173\u7cfb\u8868\u7684\u987a\u5e8f\u8fdb\u884c\u8ba1\u7b97\u3002\u7531\u4e8e\u8981\u8003\u8651\u5e76\u884c\u6027\uff0c\u540c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5e94\u7684\u591a\u4e2a\u5bf9\u8c61\u65f6\u5e76\u884c\u8ba1\u7b97\u7684\uff0c\u56e0\u6b64\u6570\u636e\u7684\u7ec4\u7ec7\u4e5f\u662f\u4e0d\u4e00\u6837\u7684\u3002")),(0,n.kt)("p",null,"\u5728\u5224\u65ad\u591a\u4e2a\u5bf9\u8c61\u7684\u5e76\u884c\u6027\u65f6\u9700\u8981\u6ce8\u610f\uff0c\u53ea\u6709\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4f5c\u7528\u4e8e\u76f8\u540c\u7684\u7b26\u53f7\u65f6\uff0c\u6211\u4eec\u624d\u8ba4\u4e3a\u5b83\u662f\u903b\u8f91\u4e0a\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\u7684\u3002\u5982\u679c\u4e00\u4e2a\u76f8\u540c\u7684\u7ec4\u4ef6\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u4f5c\u7528\u57df\u4e0d\u540c\u7684\u7b26\u53f7\uff0c\u5219\u5b83\u5e94\u8be5\u72ec\u7acb\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"2363-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"2.3.6.3 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h4",{id:"2364-\u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"},"2.3.6.4 \u7ec4\u4ef6\u51fd\u6570\u7b7e\u540d\u5217\u8868"),(0,n.kt)("p",null,"\u7531\u4e8e\u9700\u8981\u52a8\u6001\u8c03\u7528\u7ec4\u4ef6\u673a\u5668\u7801\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u8c03\u7528\u7684\u4ee3\u7801\u5e8f\u5217\u4e0d\u80fd\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u56e0\u6b64\u52a8\u6001\u7684\u811a\u672c\u4ee3\u7801\u662f\u65e0\u6cd5\u77e5\u9053\u7ec4\u4ef6\u51fd\u6570\u4fe1\u606f\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u77e5\u9053\u8be5\u600e\u4e48\u5c06\u5b9e\u4f53\u7684\u7ec4\u4ef6\u6570\u636e\u4f20\u9012\u5230\u7ec4\u4ef6\u51fd\u6570\u8c03\u7528\u6808\u4e0a\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u9700\u8981\u5b58\u50a8\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u7b7e\u540d\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ef\u4ee5\u76f4\u63a5\u636e\u6b64\u6784\u9020\u51fd\u6570\u8c03\u7528\u6808\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6574\u4e2a\u53c2\u6570\u4f20\u9012\u7684\u8fc7\u7a0b\u662f\u52a8\u6001\u7684\uff0c\u4f46\u662f\u5b83\u53ea\u6d89\u53ca\u5c0f\u6bb5\u6570\u636e\u7684\u590d\u5236\uff0c\u5927\u90e8\u5206\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u8ba1\u7b97\u5c31\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97\uff0c\u5e76\u4e14\u662f\u6309\u7167\u673a\u5668\u7801\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u5176\u4e2d\u52a8\u6001\u7684\u4e00\u90e8\u5206\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u53ef\u80fd\u4f7f\u7528AOT\u5c06\u6240\u6709\u903b\u8f91\u4e8b\u5148\u7f16\u8bd1\uff0c\u53ea\u6709\u7ec4\u4ef6\u662f\u53ef\u4ee5\u7f16\u8bd1\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u4fdd\u8bc1\u4efb\u610f\u7684\u5e76\u53d1\u5206\u914d\uff0c\u5e76\u53d1\u7684\u7ba1\u7406\u90e8\u5206\u90fd\u662f\u5fc5\u987b\u52a8\u6001\u7684\uff0c\u8fd9\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002"),(0,n.kt)("h3",{id:"237-\u9690\u5f0f\u865a\u62df\u673a"},"2.3.7 \u9690\u5f0f\u865a\u62df\u673a*"),(0,n.kt)("p",null,"\u53ea\u8981\u6709\u865a\u62df\u673a\u7684\u5b58\u5728\uff0c\u6e90\u4ee3\u7801\u90fd\u662f\u7f16\u8bd1\u4e3a\u67d0\u79cd\u5f62\u5f0f\u7684\u5b57\u8282\u7801\uff0c\u7136\u540e\u8fd9\u4e9b\u5b57\u8282\u7801\u5728\u865a\u62df\u673a\u4e0a\u6267\u884c\u3002\u7531\u4e8e\u5b57\u8282\u7801\u4e0d\u662f\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u8bfb\u53d6\u4e00\u6761\u4e00\u6761\u7684\u5b57\u8282\u7801\u8fdb\u884c\u89e3\u91ca\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u76f4\u63a5\u5bfc\u81f4\u4e00\u4e2a\u7ed3\u679c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u5e8f\u5217\u5b8c\u5168\u65e0\u6cd5\u88ab\u786c\u4ef6\u4f18\u5316\uff0c\u4f8b\u5982\u6307\u4ee4\u9884\u53d6\u7b49"))),(0,n.kt)("p",null,"\u786c\u4ef6\u53ea\u80fd\u8bc6\u522b\u865a\u62df\u673a\u4e2d\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u6307\u4ee4\uff0c\u800c\u865a\u62df\u673a\u901a\u5e38\u4e0d\u5305\u542b\u903b\u8f91\uff0c\u53ea\u6709\u4e00\u4e9b\u901a\u7528\u51fd\u6570\uff0c\u6240\u4ee5\u6574\u4e2a\u8ba1\u7b97\u4e2d\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\u6307\u4ee4\u4f1a\u5b58\u5728\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u5931\uff0c\u6700\u6781\u7aef\u7684\u60c5\u51b5\u4e0b\uff0c\u6574\u4e2a\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u65e0\u6cd5\u7f13\u5b58\uff0c\u800c\u6bcf\u4e00\u4e2a\u6307\u4ee4\u7684\u6267\u884c\u90fd\u9700\u8981\u72ec\u7acb\u4ece\u5185\u5b58\u4e2d\u52a0\u8f7d\u6307\u4ee4\u5230\u5bc4\u5b58\u5668\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u662f\u811a\u672c\u903b\u8f91\u6e90\u4ee3\u7801\u4e2d\u5305\u542b\u5f88\u591a\u987a\u5e8f\u6307\u4ee4\uff0c\u786c\u4ef6\u4e5f\u65e0\u6cd5\u5f88\u597d\u7684\u9884\u53d6\uff0c\u56e0\u4e3a\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\u7684\u865a\u62df\u673a\u4ee3\u7801\u5e76\u4e0d\u5305\u542b\u8fd9\u4e9b\u903b\u8f91\u6307\u4ee4\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u679c\u662f\u9759\u6001\u8bed\u8a00\uff0c\u5728\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\u5c06IR\u8f6c\u6362\u4e3a\u673a\u5668\u7801\u7684\u65f6\u5019\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u5176\u4e2d\u7684\u6bcf\u4e2a\u7b26\u53f7\u7684\u5730\u5740\u90fd\u8f6c\u6362\u4e3a\u6808\u4e2d\u7684\u4e00\u4e2a\u5730\u5740\uff0c\u800c\u6808\u9876\u6307\u9488\u7531\u7ef4\u6301\u7740\u4e00\u4e2a\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u4e2a\u4f4d\u7f6e\u7531\u8fd0\u884c\u65f6\u5b9e\u65f6\u5206\u914d\uff0c\u6808\u9876\u6307\u9488\u901a\u5e38\u4f1a\u88ab\u4fdd\u6301\u5728\u5bc4\u5b58\u5668\u4e2d\uff0c\u6240\u4ee5\u8bbf\u95ee\u901f\u5ea6\u5f88\u5feb\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4f7fCreation Script\u5b9e\u73b0\u7c7b\u578b\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"AOT\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u88ab\u5f53\u505a\u4e00\u4e2a\u51fd\u6570\uff0c\u7ec4\u4ef6\u4e2d\u8bbf\u95ee\u7684\u7b26\u53f7\u5168\u90e8\u88ab\u8f6c\u6362\u4e3a\u76f8\u5bf9\u4f4d\u7f6e\uff1b\u5176\u5b9e\u6bcf\u4e2a\u7ec4\u4ef6\u5b8c\u5168\u6309\u7167\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u9759\u6001\u7f16\u7a0b\u8bed\u8a00\u4e2d\u51fd\u6570\u7684\u65b9\u5f0f\u8fdb\u884c\u7f16\u8bd1\uff0c\u6bd4\u5982\u5206\u914d\u51fd\u6570\u8c03\u7528\u4e4b\u524d\u7684\u6808\u521d\u59cb\u5316\uff0c\u4ee5\u53ca\u7ed3\u675f\u540e\u6e05\u695a\u6808\u4e2d\u7684\u6570\u636e\u3002\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u6808\u4e2d\u7684\u6570\u636e\u7531\u865a\u62df\u673a\u5b9e\u65f6\u7684\u653e\u8fdb\u53bb\uff0c\u800c\u4e0d\u662f\u673a\u5668\u7801\u4e2d\u63d2\u5165\u7684\u4ee3\u7801\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u4f46\u662f\u4fdd\u6301\u540e\u9762\u51fd\u6570\u5bf9\u6808\u4e2d\u6570\u636e\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f\u4e00\u6837\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u865a\u62df\u673a\u9996\u5148\u5206\u914d\u6808\u4e2d\u7684\u6570\u636e\uff0c\u53ef\u80fd\u6d89\u53ca\u5c06Creation Table\u4e2d\u7684\u6570\u636e\u590d\u5236\u5230\u65b9\u6cd5\u6808\u4e2d\uff0c\u7136\u540e\u7ec4\u4ef6\u65b9\u6cd5\u4e2d\u7684\u673a\u5668\u7801\u5c31\u53ef\u4ee5\u6b63\u5e38\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u6267\u884c\u7ed3\u675f\u4e4b\u540e\uff0c\u865a\u62df\u673a\u9700\u8981\u5c06\u5176\u4e2d\u7684\u7ed3\u679c\u8bfb\u56de\u5230Creation Table\u4e2d\u5bf9\u5e94\u7684\u6570\u636e\u4e2d")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u9762\u4e24\u4e2a\u8fc7\u7a0b\uff0c\u53ef\u80fd\u65e0\u6cd5\u5728\u865a\u62df\u673a\u4e2d\u52a8\u6001\u51b3\u5b9a\uff0c\u56e0\u4e3a\u5176\u4e2d\u5305\u542b\u4e0d\u540c\u7684\u7d22\u5f15\uff0c\u540d\u79f0\u7b49\u7b49\uff0c\u53ef\u80fd\u8fd8\u9700\u8981\u9700\u8981\u8bb2\u76f8\u5e94\u7684\u4ee3\u7801\u7f16\u8bd1\u5230\u7ec4\u4ef6\u51fd\u6570\u7684\u9996\u90e8\u548c\u5c3e\u90e8\uff0c\u8ba9 \u5b83\u4eec\u81ea\u5df1\u6765\u51b3\u5b9a\u6267\u884c\u6808\u4e2d\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u8fd9\u91cc\u662f\u5426\u53ef\u4ee5\u8003\u8651\u80fd\u591f\u7701\u6389\u5411\u6808\u4e2d\u590d\u5236\u6570\u636e\u7684\u95ee\u9898\uff0c\u6539\u4e3a\u76f4\u63a5\u8bfb\u53d6Table\u4e2d\u7684\u6570\u636e\uff0c\u4f46\u8fd9\u9700\u8981\u4fdd\u8bc1\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u8fde\u7eed\uff0c\u4f46\u662f\u7531\u4e8e\u4e0d\u540c\u7ec4\u4ef6\u4f7f\u7528\u7684\u6807\u51c6\u7b26\u53f7\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u4e0d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u53d8\u91cf\u90fd\u8fde\u7eed\uff08\u50cf\u4e00\u4e2a\u65b9\u6cd5\u6808\u4e00\u6837\uff09\uff0c\u6240\u4ee5\u53ef\u80fd\u590d\u5236\u8fd8\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002"),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u901a\u8fc7\u4e0a\u8ff0\u7c7b\u4f3c\u7684\u601d\u8def\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h4",{id:"2371-\u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"},"2.3.7.1 \u7ec4\u4ef6\u673a\u5668\u7801\u7684\u8c03\u7528\u6808"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u65b9\u6cd5\u7684\u673a\u5668\u7801\uff0c\u5e76\u4e14\u65b9\u6cd5\u6536\u5c3e\u5305\u542b\u5bf9\u65b9\u6cd5\u6808\u7684\u53d8\u91cf\u64cd\u4f5c\uff0c\u90a3\u4e48\u7531\u4e8e\u8fd9\u4e9b\u64cd\u4f5c\u7684\u673a\u5668\u7801\u662f\u56fa\u5b9a\u7684\uff0c\u5206\u914d\u7684\u5185\u5b58\u5730\u5740\u53ca\u5bc4\u5b58\u5668\u7b49\u4e5f\u662f\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u8981\u4fdd\u8bc1\u8ddf\u8fd0\u884c\u65f6\u7684Table VM\u6709\u6548\u914d\u5408\uff0cTable VM\u4f20\u7ed9\u65b9\u6cd5\u7ec4\u4ef6\u7684\u6570\u636e\u7684\u987a\u5e8f\u5fc5\u987b\u662f\u56fa\u5b9a\u7684\uff0c\u8fd9\u90e8\u5206\u8981\u901a\u8fc7\u4e0a\u4e00\u8282\u7684\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6765\u5904\u7406\u3002\u8fd9\u6837\u7ec4\u4ef6\u673a\u5668\u7801\u624d\u80fd\u53d6\u5230\u6b63\u786e\u7684\u6570\u636e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"call-stack",src:l(9300).Z,width:"1239",height:"578"})),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u6700\u5927\u7684\u95ee\u9898\u662f\u673a\u5668\u7801\u4e2d\u7f16\u7801\u4e86\u5bf9\u5185\u5b58\u7684\u8c03\u7528\uff0c\u5373\u5bc4\u5b58\u5668\u5206\u914d\u90e8\u5206\uff0c\u8fd9\u90e8\u5206\u4e5f\u662f\u7f16\u8bd1\u8ddf\u89e3\u91ca\u6700\u5927\u7684\u4e0d\u540c\u3002\u901a\u8fc7\u56fa\u5b9a\u5206\u914d\u597d\u7684\u5bc4\u5b58\u5668\uff0cCPU\u80fd\u591f\u4f7f\u7528\u5bc4\u5b58\u5668\u6765\u7f13\u5b58\u53d8\u91cf\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u4e2a\u53d8\u91cf\u90fd\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\uff0c\u90a3\u6837\u5c31\u591a\u4e86\u5f88\u591a\u5bc4\u5b58\u5668\u53d8\u91cf\u8bfb\u53d6\u5199\u5165\u7684\u6307\u4ee4\uff0c\u5e76\u4e14\u65e0\u6cd5\u5229\u7528\u4f20\u7edfCPU\u7684\u4e00\u4e9b\u786c\u4ef6\u4f18\u5316\u624b\u6bb5\uff0c\u5982\u6307\u4ee4\u9884\u53d6\u7b49\u3002"),(0,n.kt)("p",null,"\u7f16\u8bd1\u7684\u673a\u5668\u7801\u5305\u542b\u4e86\u53d8\u91cf\u7684\u5bc4\u5b58\u5668\u5206\u914d\uff0c\u8fd9\u4e9b\u5bc4\u5b58\u5668\u5730\u5740\u901a\u5e38\u662f\u57fa\u4e8e\u4e00\u4e2a\u8c03\u7528\u6808\u6765\u5b9e\u73b0\u7684\uff0c\u901a\u8fc7\u8c03\u7528\u6808\uff0c\u6bcf\u4e2a\u51fd\u6570\u6267\u884c\u7684\u6240\u6709\u6307\u4ee4\u90fd\u662f\u56fa\u5b9a\u4e0d\u53d8\u7684\u3002\u800c\u4fdd\u8bc1\u4efb\u610f\u51fd\u6570\u8c03\u7528\u90fd\u53ef\u4ee5\u6709\u5e8f\u8fdb\u884c\u7684\u534f\u4f5c\u673a\u5236\u4e3b\u8981\u5c31\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6808\u9876\u6307\u9488"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8fd4\u56de\u503c")),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u4e24\u4e2a\u6570\u503c\u9700\u8981\u8fd0\u884c\u65f6\u52a8\u6001\u4f20\u7ed9\u7ec4\u4ef6\u7684\u51fd\u6570\u673a\u5668\u7801\u3002\u5728\u4f20\u7edf\u7684\u9759\u6001\u7f16\u8bd1\u578b\u8bed\u8a00\u4e2d\uff0c\u8c03\u7528\u51fd\u6570\u7684\u90e8\u5206\u4e5f\u662f\u673a\u5668\u7801\uff0c\u56e0\u6b64\u4ece\u54ea\u91cc\u83b7\u53d6\u51fd\u6570\u53c2\u6570\u7684\u503c\u90fd\u53ef\u4ee5\u7f16\u7801\u4e3a\u56fa\u5b9a\u7684\u6307\u4ee4\uff0c\u4f46\u662f\u5728\u52a8\u6001\u6027\u8bed\u8a00\u4e2d\uff0c\u8fd9\u90e8\u5206\u662f\u53ef\u53d8\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3050).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u53c2\u7167\u52a8\u6001\u6027\u8bed\u8a00\u865a\u62df\u673a\u7684\u505a\u6cd5\uff0c\u5728\u4e00\u4e2a\u865a\u62df\u673a\u7684\u5faa\u73af\u4e2d\u8bfb\u53d6\u53d8\u91cf\u5e76\u83b7\u53d6\u5730\u5740\uff0c\u7136\u540e\u4f20\u9012\u7ed9\u88ab\u8c03\u51fd\u6570\u7684\u51fd\u6570\u8c03\u7528\u6808\uff0c\u5305\u62ec\u6808\u9876\u6307\u9488\u548c\u51fd\u6570\u8fd4\u56de\u503c\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u91cc\u7684\u95ee\u9898\u53ef\u80fd\u662f\uff0c\u865a\u62df\u673a\u5e76\u4e0d\u77e5\u9053\u7ec4\u4ef6\u7684\u51fd\u6570\u8c03\u7528\u6808\u7684\u5e03\u5c40\uff0c\u5373\u662f\u51fd\u6570\u7684\u7b7e\u540d\u6216\u8005\u7c7b\u578b\u5b9a\u4e49\uff0c\u6240\u4ee5\u9700\u8981\u5c06\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u51fd\u6570\u7b7e\u540d\u4fe1\u606f\u5b58\u653e\u5728\u7ec4\u4ef6\u5173\u7cfb\u7ba1\u7406\u6570\u636e\u4e2d\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u53e6\u5916\u4e00\u4e2a\u7cbe\u5de7\u7684\u70b9\u662f\uff0cHotSpot VM\u4f7f\u7528OS\u7ebf\u7a0b\u6765\u5b9e\u73b0Java\u7ebf\u7a0b\uff0c\u5e76\u4e14\u4e00\u4e2aJava\u7ebf\u7a0b\u4e0a\u8fd0\u884c\u7684\u6240\u6709native\u51fd\u6570\u548cJava\u65b9\u6cd5\u90fd\u5171\u7528\u4e00\u4e2a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E8%B0%83%E7%94%A8%E6%A0%88&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A143053269%7D"},"\u8c03\u7528\u6808"),"\u3002\u6240\u4ee5HotSpot VM\u4e5f\u628a\u8fd9\u79cd\u505a\u6cd5\u53eb\u505a\u201c\u6df7\u5408\u6a21\u5f0f\u6808\u201d\uff08mixed-mode stack\u6216\u8005\u7b80\u79f0mixed stack\uff09\u3002\u89e3\u91ca\u5668\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528CPU\u7684\u6808\u6307\u9488\u5bc4\u5b58\u5668\u6765\u8868\u793a\u81ea\u5df1\u7684\u6808\u9876\u6307\u9488\u3002"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1aRednaxelaFX\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/55141871/answer/143053269"},"https://www.zhihu.com/question/55141871/answer/143053269"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"238-\u8c03\u5ea6\u5668"},"2.3.8 \u8c03\u5ea6\u5668"),(0,n.kt)("p",null,"\u5982\u679c\u5b8c\u5168\u6309\u7167\u7ec4\u4ef6\u4e3a\u7c92\u5ea6\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u80fd\u5bfc\u81f4\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u4f17\u591a\u7ec4\u4ef6\u88ab\u5206\u914d\u5230\u8f83\u591a\u7684\u670d\u52a1\u5668\uff0c\u6240\u4ee5\u5355\u4e2a\u5ba2\u6237\u7aef\u9700\u8981\u548c\u5f88\u591a\u670d\u52a1\u5668\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u5176\u5b9e\u662f\u4e24\u4e2a\u76f8\u4e92\u51b2\u7a81\u7684\u76ee\u6807\u7684\u6743\u8861\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c06\u5c3d\u53ef\u80fd\u591a\u7684\u6765\u81ea\u4e0d\u540c\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u653e\u5728\u4e00\u4e2a\u670d\u52a1\u5668\u6267\u884c\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u6027\uff0c\u751a\u81f3\u53ef\u4ee5\u653e\u5230GPU\u6267\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u540c\u4e00\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u5c3d\u53ef\u80fd\u653e\u5728\u540c\u4e00\u4e2a\u670d\u52a1\u5668\uff0c\u53ef\u4ee5\u8f83\u5c11\u5ba2\u6237\u7aef\u7684\u94fe\u63a5\u6570\u91cf")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5c3d\u53ef\u80fd\u5c06\u5355\u4e2a\u5ba2\u6237\u7aef\u7684\u7ec4\u4ef6\u81f3\u5c11\u653e\u5230\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\u8fdb\u884c\u8ba1\u7b97\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u662f\u53ef\u884c\u7684\uff0c\u7ec4\u4ef6\u7684\u6267\u884c\u4e3b\u8981\u8fd8\u662f\u4f9d\u8d56\u4e8eCPU\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u5f88\u5927\u7684\u5e76\u884c\u5ea6\uff0c\u4f8b\u59828\u4e2a\u300116\u4e2a\u6216\u8005\u6700\u591a32\u4e2a\u7ec4\u4ef6\u4e00\u8d77\u6267\u884c\u5c31\u5dee\u4e0d\u591a\uff0c\u800c\u8fd9\u6837\u7684\u8981\u6c42\u5f88\u5bb9\u6613\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,"\u5355\u4e2a\u7ec4\u4ef6\u5355\u6b21\u8ba1\u7b97\u7684\u6570\u91cf\u4e0d\u8981\u592a\u591a\uff0c\u8fd9\u6837\u5bf9\u8fd0\u884c\u65f6\u7ec4\u7ec7\u7ba1\u7406\u6570\u636e\u7684\u8981\u6c42\u4f1a\u964d\u4f4e\uff0c\u4f8b\u59828/16/32\u4e2a\u3002\u8fd9\u6837\u5c11\u91cf\u7684\u7ec4\u4ef6\u5e76\u884c\u8ba1\u7b97\u9700\u6c42\u4e5f\u66f4\u5bb9\u6613\u5bf9\u5ba2\u6237\u7aef\u8fdb\u884c\u7ba1\u7406\uff0c\u4f8b\u5982\u53ef\u80fd\u4e00\u4e24\u4e2a\u5ba2\u6237\u7aef\u751a\u81f3\u5355\u4e2a\u5ba2\u6237\u7aef\u90fd\u53ef\u4ee5\u8fbe\u5230\u8fd9\u4e2a\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u540c\u4e00\u4e2a\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u8bbe\u7f6e\u5ba2\u6237\u7aef\u7ba1\u7406\u8c03\u5ea6\uff0c\u6bcf\u4e2a\u5ba2\u6237\u7aef\u5c3d\u53ef\u80fd\u8ddf\u4e00\u4e2a\u6216\u8005\u5c11\u6570\u51e0\u4e2a\u670d\u52a1\u5668\u8c03\u5ea6\u7ba1\u7406\u5668\u76f8\u8fde\u63a5\uff0c\u800c\u8fd9\u4e9b\u8c03\u5ea6\u5668\u8d1f\u8d23\u5bf9\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u670d\u52a1\u5668\u8fdb\u884c\u7ba1\u7406\uff0c\u4e3b\u8981\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6536\u96c6\u6765\u81ea\u540c\u4e00\u670d\u52a1\u5668\u4e2d\u5fc3\u7684\u4e0d\u540c\u670d\u52a1\u5668\u7684\u7ec4\u4ef6\u8ba1\u7b97\u7ed3\u679c\uff0c\u7136\u540e\u901a\u8fc7\u5355\u6b21\u94fe\u63a5\u4e0e\u5355\u4e2a\u5ba2\u6237\u7aef\u8fdb\u884c\u540c\u6b65")),(0,n.kt)("h3",{id:"239-\u52a8\u6001\u7b26\u53f7\u8868"},"2.3.9 \u52a8\u6001\u7b26\u53f7\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u7f16\u8bd1\u67b6\u6784\u4e2d\uff0c\u7b26\u53f7\u8868\u4e3b\u8981\u7528\u4e8e\u8bb0\u5f55\u7528\u6237\u81ea\u5b9a\u4e49\u7c7b\u578b\u7684\u7ed3\u6784\uff0c\u4ee5\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\u3002\u5f53\u7136\u73b0\u4ee3\u9762\u5411\u5bf9\u8c61\u5bf9\u8c61\u4e2d\uff0c\u81ea\u5b9a\u4e49\u7ed3\u6784\u672c\u8eab\u662f\u53ef\u4ee5\u5d4c\u5957\u7684\uff0c\u5e76\u4e14\u81ea\u5b9a\u4e49\u7ed3\u6784\u4f53\u53ef\u80fd\u4f1a\u5305\u542b\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u4e5f\u7528\u6765\u8f85\u52a9\u4f5c\u7528\u57df\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("img",{src:"resources/symbol-table.jpeg",alt:"symbol-table"}),(0,n.kt)("p",null,"\u672c\u8d28\u4e0a\uff0c\u7b26\u53f7\u8868\u7531\u6e90\u4ee3\u7801\u4e2d\u751f\u6210\uff0c\u7136\u540e\u7528\u4e8e\u5e2e\u52a9\u7f16\u8bd1\u5668\u8fdb\u884c\u5185\u5b58\u5730\u5740\u5206\u914d\uff0c\u7136\u540e\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u5c31\u4e0d\u518d\u9700\u8981\u7b26\u53f7\u8868\uff0c\u7b26\u53f7\u8868\u53ea\u662f\u4f5c\u4e3a\u7f16\u8bd1\u9636\u6bb5\u7684\u4e00\u79cd\u4e2d\u95f4\u6570\u636e\u3002\u4f46\u8fd9\u4e5f\u8bf4\u660e\uff0c\u4ece\u6e90\u4ee3\u7801\u672c\u8eab\u5c31\u53ef\u4ee5\u63a8\u5bfc\u5b9e\u9645\u8fd0\u884c\u65f6\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\uff0c\u6240\u4ee5\u52a8\u6001\u8bed\u8a00\u7684\u539f\u7406\u5373\u4f7f\u5982\u679c\uff0c\u5b83\u4eec\u52a8\u6001\u5730\u4ece\u7b26\u53f7\u8868\u8ba1\u7b97\u4e00\u4e2a\u53d8\u91cf\u7684\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4f9d\u8d56\u7f16\u8bd1\u5206\u914d\u597d\u7684\u56fa\u5b9a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u57fa\u672c\u4e0a\uff0c\u5982\u679c\u8bed\u8a00\u9700\u8981\u5177\u6709\u67d0\u79cd\u52a8\u6001\u6027\uff0c\u8fd0\u884c\u65f6\u5185\u5b58\u4e2d\u5b9e\u65f6\u8ba1\u7b97\u548c\u5b58\u50a8\u7b26\u53f7\u8868\u5c31\u662f\u4e0d\u53ef\u907f\u514d\u7684\u3002\u8fd9\u91cc\u7684\u52a8\u6001\u6027\u4e3b\u8981\u662f\u6307\u90a3\u4e9b\u5fc5\u987b\u4ece\u7b26\u53f7\u8868\u7c7b\u578b\u7cfb\u7edf\u63a8\u5bfc\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u5bf9\u8c61\u67d0\u4e2a\u5c5e\u6027\u7684\u5730\u5740\uff0c\u51fd\u6570\u7684\u53c2\u6570\u5217\u8868\u4ee5\u53ca\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u7531\u6b64\u770b\uff0c\u52a8\u6001\u8bed\u8a00\u81f3\u5c11\u6709\u4ee5\u4e0b\u4e24\u79cd\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7b26\u53f7\u67e5\u8be2\uff0c\u7b26\u53f7\u8868\u5f80\u5f80\u662f\u6bd4\u8f83\u590d\u6742\u7684\u6811\u5f62\u7ed3\u6784\uff0c\u67e5\u8be2\u6548\u7387\u8f83\u4f4e"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\u4e2d\u7684\u5bc4\u5b58\u5668\u6ca1\u6709\u5206\u914d\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u9700\u8981\u4ece\u5185\u5b58\u800c\u4e0d\u662f\u5bc4\u5b58\u5668\u8bfb\u53d6")),(0,n.kt)("p",null,"RealityIS\u9488\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0c\u5bf9\u4e8e\u524d\u8005\uff0c\u5b83\u91c7\u7528\u5982\u4e0b\u7684\u4f18\u5316\u624b\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u7c7b\u578b\u7ed3\u6784\uff0c\u66f4\u5c11\u7684\u5c42\u6b21\uff0c\u57fa\u672c\u4e0a\u6ca1\u6709\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784\uff0c\u66f4\u7b80\u5355\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u65e0\u6cd5\u5b9a\u4e49\u590d\u6742\u7684\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u5355\u53f0VM\u5177\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u7531\u4e8e\u6bcf\u4e2aVM\u503e\u5411\u4e8e\u5c06\u5927\u91cf\u76f8\u4f3c\u7684\u903b\u8f91\u653e\u5230\u540c\u4e00\u53f0\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u56e0\u6b64\u540c\u4e00\u53f0\u670d\u52a1\u5668\u62e5\u6709\u66f4\u5c11\u7684\u7c7b\u578b\u4fe1\u606f\u53ca\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u4e2a\u4f18\u5316\uff0cRealityIS\u5bf9\u4e8e\u7c7b\u578b\u7684\u52a8\u6001\u6027\u65b9\u9762\u7684\u6027\u80fd\u635f\u5931\u5c31\u964d\u5230\u4e86\u6bd4\u8f83\u4f4e\u7684\u6c34\u5e73\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u7ec4\u4ef6\u7684\u903b\u8f91\u662f\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u5c3d\u7ba1\u7ec4\u4ef6\u5b9a\u4e49\u7684\u65f6\u5019\u5173\u8054\u4e86\u4e00\u5b9a\u7684\u7c7b\u578b\u4fe1\u606f\uff0c\u4f46\u662f\u6211\u4eec\u901a\u8fc7\u8fd0\u884c\u65f6\u52a8\u6001\u7ed1\u5b9a\u51fd\u6570\u8c03\u7528\u6808\u6765\u4f7f\u51fd\u6570\u7684\u673a\u5668\u7801\u53ef\u4ee5\u72ec\u7acb\u7f16\u8bd1\u3002\u56e0\u6b64\u7406\u8bba\u4e0a\u7ec4\u4ef6\u7684\u8ba1\u7b97\u6548\u7387\u53ef\u4ee5\u63a5\u8fd1\u9759\u6001\u578b\u8bed\u8a00\u3002"),(0,n.kt)("p",null,"\u53c2\u89c12.3.7.1\u8282\u3002"),(0,n.kt)("h3",{id:"2310-\u865a\u62df\u673a\u67b6\u6784"},"2.3.10 \u865a\u62df\u673a\u67b6\u6784"),(0,n.kt)("h4",{id:"23101-\u670d\u52a1\u7aef"},"2.3.10.1 \u670d\u52a1\u7aef"),(0,n.kt)("p",null,"\u540e\u7aef\u7531\u4e8e\u53ef\u4ee5\u52a8\u6001\u52a0\u8f7d\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u6240\u4ee5\u76f4\u63a5\u4f7f\u7528JIT"),(0,n.kt)("h4",{id:"23102-\u5ba2\u6237\u7aef"},"2.3.10.2 \u5ba2\u6237\u7aef"),(0,n.kt)("p",null,"\u5ba2\u6237\u7aef\u7531\u4e8eiOS\u4e0d\u5141\u8bb8\u4f7f\u7528JIT\uff0c\u6240\u4ee5\u53ea\u80fd\u4f7f\u7528\u89e3\u91ca\u5668\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Wasm3\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u7528\u4e8e\u5c06Wasm\u5b57\u8282\u7801\u52a8\u6001\u89e3\u91ca\u6267\u884c\uff0c\u53d1\u751f\u5728\u8fd0\u884c\u65f6"),(0,n.kt)("li",{parentName:"ul"},"Wasm interpreter\uff0c\u8be5\u89e3\u91ca\u5668\u7528\u4e8e\u5c06CreationScript\u89e3\u91ca\u4e3aWasm\u5b57\u8282\u7801\uff0c\u4e3b\u8981\u53d1\u751f\u5728\u7f16\u8f91\u65f6")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"calling-sequence",src:l(3050).Z,width:"3699",height:"1652"})),(0,n.kt)("p",null,"\u56e0\u4e3a\u51fd\u6570\u8c03\u7528\u6808\u53ca\u5176\u76f8\u5173\u7684\u673a\u5236\uff0c\u662f\u88ab\u7f16\u8bd1\u5668\u7f16\u8bd1\u5230\u6700\u7ec8\u7684\u4ee3\u7801\u4e2d\u53bb\u7684\uff0c\u662f\u5728\u4ee3\u7801\u7684\u6bcf\u4e2a\u51fd\u6570\u9996\u4f4d\u63d2\u5165\u4e86\u4e00\u6bb5\u63a7\u5236\u4ee3\u7801\uff0c\u7136\u540e\u7a0b\u5e8f\u5c31\u80fd\u591f\u6309\u7167\u8fd9\u79cd\u673a\u5236\u6267\u884c\uff0c\u800c\u4e0d\u662f\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u4e86\u8be5\u673a\u5236\uff0c\u8fd9\u91cc\u64cd\u4f5c\u7cfb\u7edf\u5176\u5b9e\u53ea\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6808\u9876\u6307\u9488\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u8fd9\u79cd\u673a\u5236\u4e5f\u90e8\u5206\u5b9e\u73b0\u5728\u865a\u62df\u673a\u4e2d\uff0c\u9996\u5148\u865a\u62df\u673a\u6dfb\u52a0\u4e24\u4e2a\u65b9\u6cd5\u5757\uff0c\u7c7b\u4f3c\u4e8e\u539f\u6765\u9759\u6001\u8bed\u8a00\u4ee3\u7801\u4e2d\u51fd\u6570\u9996\u5c3e\u6dfb\u52a0\u7684\u90e8\u5206\uff0c\u7531\u4e8e\u8fd9\u90e8\u5206\u7684\u4ee3\u7801\u7ed3\u6784\u90fd\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u865a\u62df\u673a\u4e2d\u6dfb\u52a0\u4e24\u4e2a\u4ee3\u7801\u5757\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e24\u90e8\u5206\u7684\u53c2\u6570\u90e8\u5206\u4ece\u89e3\u91ca\u5668\u52a8\u6001\u5f97\u6765\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u5f53\u4e00\u4e2a\u51fd\u6570\u7ec4\u4ef6\u5f00\u59cb\u8c03\u7528\u7684\u4e4b\u524d\uff0c\u9996\u5148\u8fd0\u884c\u65f6\u6784\u9020\u597d\u8c03\u7528\u6808\u7684\u53c2\u6570\u4fe1\u606f\uff0c\u5e76\u8c03\u7528\u865a\u62df\u673a\u9996\u5148\u6267\u884c\u51fd\u6570\u5f00\u59cb\u5757\uff0c\u4f20\u5165\u8c03\u7528\u6808\u7684\u6808\u9876\u6307\u9488\u4ee5\u53ca\u8fd4\u56de/\u56de\u8c03\u5730\u5740\uff0c\u8fd9\u6837\u865a\u62df\u673a\u540e\u9762\u7684\u4ee3\u7801\u4e2d\u7684\u53c2\u6570\u5c31\u53ea\u9700\u8981\u6307\u5b9a\u76f8\u5bf9\u5730\u5740\uff0c\u53ef\u4ee5\u6bd4\u8f83\u4f5c\u4e3a\u5e38\u6570\u5199\u5165\u5230Wasm\u6307\u4ee4\u4e2d\uff0c\u8fd9\u6837Wasm\u89e3\u91ca\u5668\u6267\u884c\u6307\u4ee4\u5c31\u4e0d\u9700\u8981\u518d\u67e5\u627e\u5185\u5b58\u5730\u5740\uff0cCPU\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u5199\u56de\u5230\u5bc4\u5b58\u5668\u800c\u4e0d\u662f\u5185\u5b58\uff0c\u56e0\u4e3a\u6211\u4eec\u5047\u8bbe\u5730\u5740\u90fd\u662f\u76f8\u5bf9\u7684\uff0c\u90a3\u4e48\u5728\u89e3\u91ca\u4e3aWasm\u6307\u4ee4\u7684\u89e3\u91ca\u5668\u4e2d\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u628a\u4ee3\u7801\u8f6c\u5316\u4e3a\u5bf9\u5bc4\u5b58\u5668\u7684\u610f\u4e49\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7ed9\u4ed6\u503c\uff0c\u5047\u8bbeCPU\u5565\u4e5f\u4e0d\u77e5\u9053\uff0c\u5b8c\u5168\u9700\u8981\u89e3\u91ca\u5668\u6839\u636e\u6bcf\u4e2a\u6307\u4ee4\u7684\u610f\u4e49\u52a8\u6001\u5224\u65ad\u3002\u6700\u540e\u51fd\u6570\u6267\u884c\u5b8c\u4e86\uff0c\u518d\u56de\u8c03\u89e3\u91ca\u5668\u5f00\u59cb\u4e0b\u4e00\u6b65\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u8282\u7701\u6bcf\u4e2a\u6307\u4ee4\u90fd\u9700\u8981\u5199\u5165\u5199\u51fa\u5185\u5b58\u7684\u64cd\u4f5c\uff0c\u56e0\u4e3a\u5185\u5b58\u5730\u5740\u5df2\u77e5\u4e86\uff0c\u6240\u4ee5\u5b57\u8282\u7801\u4e2d\u7684\u6307\u4ee4\u90fd\u662f\u5e38\u6570\uff0c\u5c31\u4e0d\u9700\u8981\u518d\u5185\u5b58\u4e2d\u67e5\u627e\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u5269\u4e0b\u4e3b\u8981\u7684\u6027\u80fd\u635f\u5931\uff0c\u5c31\u662f\u6307\u4ee4\u7684\u7f13\u5b58\u3001\u9884\u53d6\u8fd9\u4e9b\u64cd\u4f5c\u4e86\uff0c\u56e0\u4e3a\u786c\u4ef6\u7ea7\u7684\u6307\u4ee4\u9884\u53d6\u80af\u5b9a\u662f\u53ea\u80fd\u6765\u81ea\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u8ddfOS\u6709\u5173\uff0c\u65e0\u6cd5\u907f\u514d\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6307\u4ee4\u4e0d\u662f\u673a\u5668\u7801\uff0c\u865a\u62df\u673a\u65e0\u6cd5\u5e94\u7528\u8fd9\u4e9b\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u5185\u5b58\u7684\u6d41\u8fdb\u6d41\u51fa\uff0c\u5176\u5e26\u6765\u7684\u6027\u80fd\u635f\u5931\u5e94\u8be5\u53ef\u4ee5\u5b8c\u5168\u62b5\u6d88\u6389\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7684\u6838\u5fc3\u5728\u5916\u90e8\u52a8\u6001\u6784\u9020\u65b9\u6cd5\u8c03\u7528\u6808\u3002\u8fd9\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f20\u7edf\u7684OOP\u7b49\u6784\u9020\u65b9\u6cd5\uff0c\u56e0\u4e3a\u4e0d\u80fd\u7ba1\u7406\u6570\u636e\uff0c\u6240\u4ee5\u5f88\u96be\u52a8\u6001\u6784\u9020\uff0c\u56e0\u4e3a\u4f60\u65e0\u6cd5\u77e5\u9053\u65b9\u6cd5\u7b7e\u540d\uff0c\u9700\u8981\u53cd\u5c04\u7b49\u5f88\u590d\u6742\u7684\u673a\u5236\u3002\u8fd9\u5176\u5b9e\u76f8\u5f53\u4e8e\u628a \u7f16\u8bd1\u5668\u9759\u6001\u7f16\u8bd1\u65f6\u5bf9\u65b9\u6cd5\u53c2\u6570\u7684\u4fe1\u606f\u62ff\u90fd\u8fd0\u884c\u65f6\uff0c\u52a8\u6001\u8ba1\u7b97\u5f88\u8d39\u6027\u80fd\uff0c\u8fd9\u4e9b\u4fe1\u606f\u4e00\u822c\u5728\u8fd0\u884c\u65f6\u90fd\u6ca1\u6709\u4e86\u3002"),(0,n.kt)("p",null,"\u8bb0\u5f97\u597d\u50cf\u300a\u7f16\u8bd1\u539f\u7406\u300b\u4e2d\u8bf4\u539f\u672c\u51fd\u6570\u6dfb\u52a0\u7684\u9996\u5c3e\u4e24\u5757\u63a7\u5236\u7a0b\u5e8f\u662f\u53ef\u4ee5\u653e\u5230\u51fd\u6570\u5916\u7801\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u8c03\u7528\u7b80\u5355\u5168\u90e8\u590d\u5236\u5230\u6bcf\u4e2a\u51fd\u5185\u90e8\u3002\u6211\u4eec\u7684\u65b9\u6cd5\u76f8\u5f53\u4e8e\u662f\u628a\u8fd9\u4e2a\u8fd8\u539f\u56de\u6765\uff0c\u628a\u5b83\u5206\u6765\u3002\u56e0\u4e3a\u6211\u4eec\u73b0\u5728\u51fd\u6570\u662f\u52a8\u6001\u7684\uff0c\u6240\u4ee5\u4e0d\u80fd\u90a3\u6837\u53bb\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u6211\u4eec\u89e3\u91ca\u5668\u751f\u6210\u7684\u6307\u4ee4\u4e2d\uff0c\u5927\u90e8\u5206\u64cd\u4f5c\u6570\u90fd\u662f\u5e38\u91cf\u800c\u4e0d\u662f\u53d8\u91cf\uff0c\u53d8\u91cf\u610f\u5473\u7740Wasm\u5b57\u8282\u7801\u5728\u89e3\u91ca\u6267\u884c\u7684\u65f6\u5019\u6709\u9700\u8981\u591a\u51e0\u6761\u8bfb\u53d6\u5185\u5b58\u5730\u5740\u7684\u6307\u4ee4\uff0c\u8fd9\u5e26\u6765\u4e24\u4e2a\u7ed3\u679c\uff1a1\uff09\u6307\u4ee4\u6570\u51cf\u5c11\uff0c\u8fd9\u4e5f\u51cf\u5c11\u4e86Wasm\u865a\u62df\u673a\u4e2d\u67e5\u627e\u673a\u5668\u7801\u6307\u4ee4\u8df3\u6765\u8df3\u53bb\u7684\u9891\u7387\uff0c\u4f20\u7edf\u7684\u865a\u62df\u673a\u76f8\u5bf9\u4e0e\u9759\u6001\u8bed\u8a00\u7684\u4ee3\u7801\u4e0a\u7684\u5dee\u522b\u5c31\u662f\uff0c\u9759\u6001\u4ee3\u7801\u662f\u8fde\u7eed\u7684\uff0c\u4f46\u662f\u4f1a\u5b58\u5728\u4ee3\u7801\u91cd\u590d\uff0c\u865a\u62df\u673a\u7684\u673a\u5668\u7801\u662f\u5f88\u5c11\u7684\uff0c\u53ea\u6709\u6807\u51c6\u6307\u4ee4\uff0c\u4f46\u662f\u5c31\u4f1a\u8df3\u8f6c\u6bd4\u8f83\u9891\u7e41\u4ee5\u514b\u670d\u6ca1\u6709\u91cd\u590d\u7684\u95ee\u9898\uff0c\u4e0d\u8fc7\u53d6\u6307\u4ee4\u76f8\u5bf9\u4e8e\u8ba1\u7b97\u90fd\u662f\u72ec\u7acb\u7684\u6307\u4ee4\uff0c\u5e94\u8be5\u5f88\u5feb\u7684\uff1b2\uff09\u56e0\u4e3a\u4e2d\u95f4\u8ba1\u7b97\u7ed3\u679c\u76f4\u63a5\u653e\u5bc4\u5b58\u5668\uff0c\u51cf\u5c11\u5185\u5b58\u6d41\u8fdb\u6d41\u51fa\u3002")),(0,n.kt)("p",null,"\u8fd9\u6837\u51fd\u6570\u4f5c\u4e3a\u7c7b\u578b\u5c31\u662f\u6709\u975e\u5e38\u5927\u4ef7\u503c\u7684\uff0c\u5b83\u5e2e\u52a9CreationScript\u89e3\u91ca\u5668\u600e\u6837\u751f\u6210Wasm\u5b57\u8282\u7801\uff0c\u4ee5\u7ba1\u7406\u4e0a\u8ff0\u884c\u4e3a\u7684\u6267\u884c\u3002\u800c\u4e14\u5b83\u53ea\u9700\u8981\u51fd\u6570\u7c7b\u578b\u6216\u8005\u5b9a\u4e49\u5c31\u884c\uff0c\u4e0d\u9700\u8981\u77e5\u9053\u5177\u4f53\u8c03\u7528\u4ec0\u4e48\u51fd\u6570\uff0c\u53ef\u4ee5\u5355\u72ec\u7f16\u8bd1/\u89e3\u91ca\u6bcf\u4e2a\u7ec4\u4ef6\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u5c31\u662flua\u7684\u673a\u5236\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0")),(0,n.kt)("p",null,"\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\uff0c\u64cd\u4f5c\u6570\u7684\u6570\u636e\u7ed3\u6784\u662f\u5b58\u653e\u5728CPU\u7684\u5bc4\u5b58\u5668\u4e2d\u7684\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u6a21\u578b\u6765\u8bf4\u6ca1\u6709PUSH\u548cPOP\u64cd\u4f5c\uff0c\u4f46\u662f\u6307\u4ee4\u4e2d\u9700\u8981\u5305\u542b\u64cd\u4f5c\u6570\u7684\u5730\u5740(\u6216\u8005\u662f\u5bc4\u5b58\u5668)\uff0c\u5e76\u4e14\u6307\u4ee4\u9700\u8981\u663e\u5f0f\u7684\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u5730\u5740\uff0c\u800c\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u6307\u4ee4\u4e0d\u5305\u542b\u64cd\u4f5c\u6570\u7684\u4fe1\u606f\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u5f97\u5230\uff0c\u4f8b\u5982\uff0c\u5728\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u4e0b\uff0c\u4e00\u4e2a\u52a0\u6cd5\u64cd\u4f5c\u5176\u6307\u4ee4\u5c06\u4f1a\u662f\u4e0b\u9762\u8fd9\u5e45\u56fe\u6240\u793a\uff0e\n",(0,n.kt)("img",{alt:"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0",src:l(2979).Z,width:"667",height:"326"})),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"ADD R1, R2, R3 ;# Add contents of R1 and R2, store result in R3\n")),(0,n.kt)("p",null,"\u5c31\u50cf\u4e0a\u9762\u63d0\u5230\u7684\u4e00\u6837\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u662f\u6ca1\u6709PUSH\u548cPOP\u8fd9\u7c7b\u64cd\u4f5c\u7684\uff0c\u56e0\u6b64\u52a0\u6cd5\u6307\u4ee4\u53ea\u6709\u4e00\u884c\uff0c\u4e0d\u50cf\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u90a3\u6837\uff0c\u8fd9\u91cc\u9700\u8981\u663e\u5f0f\u8bf4\u660e\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e(\u8fd9\u91cc\u662f\u653e\u5728R1\uff0cR2\u5bc4\u5b58\u5668\u4e2d)\uff0c\u4f18\u70b9\u5c31\u662f\u907f\u514d\u4e86\u5927\u91cfPUSH\u548cPOP\u7684\u5f00\u9500\uff0c\u56e0\u6b64\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u5728\u6307\u4ee4\u5206\u53d1\u5faa\u73af\u8981\u6bd4\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u8981\u5feb\uff0e\n\u9664\u4e86\u4e0a\u9762\u7684\u63d0\u5230\u7684\u53ef\u4ee5\u907f\u514dPOP\u548cPUSH\u8fd9\u7c7b\u64cd\u4f5c\u5e26\u6765\u7684\u5f00\u9500\u5916\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7684\u4f18\u70b9\uff0c \u4f8b\u5982\u53ef\u4ee5\u5b9e\u73b0\u67d0\u4e9b\u65e0\u6cd5\u5728\u57fa\u4e8e\u5806\u6808\u5b9e\u73b0\u7684\u865a\u62df\u673a\u4e2d\u5b8c\u6210\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u5047\u8bbe\u73b0\u5728\u8981\u6267\u884c\u4e00\u6761\u51cf\u6cd5\u64cd\u4f5c\uff0c\u5bf9\u4e8e\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u6765\u8bf4\u4f1a\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u4fdd\u5b58\u5728\u4e00\u4e2a\u5bc4\u5b58\u5668\u4e2d\uff0c\u5f53\u8fd9\u6761\u51cf\u6cd5\u6307\u4ee4\u518d\u6b21\u6267\u884c\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u5f97\u5230\u8ba1\u7b97\u7ed3\u679c\uff0c\u4e0d\u9700\u8981\u518d\u6b21\u6267\u884c\uff0e\n\u5c3d\u7ba1\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a\u5b9e\u73b0\u53c8\u5982\u4e0a\u8bf8\u591a\u7684\u4f18\u70b9\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\u6765\u8bf4\uff0c\u4e5f\u5b58\u5728\u7740\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\uff0c\u57fa\u4e8e\u5bc4\u5b58\u5668\u5b9e\u73b0\u7684\u865a\u62df\u673a\u7684\u6307\u4ee4\u5e73\u5747\u957f\u5ea6\u90fd\u8981\u5927\u4e8e\u57fa\u4e8e\u5806\u6808\u7684\u865a\u62df\u673a\u5b9e\u73b0\uff0c\u56e0\u4e3a\u524d\u8005\u9700\u8981\u5c06\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u653e\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u540e\u8005\u6307\u4ee4\u662f\u4e0d\u9700\u8981\u77e5\u9053\u64cd\u4f5c\u6570\u7684\u4f4d\u7f6e\u7684\uff0c\u64cd\u4f5c\u6570\u76f4\u63a5\u901a\u8fc7SP\u83b7\u5f97\uff0c\u56e0\u4e3a\u540e\u8005\u7684\u6307\u4ee4\u957f\u5ea6\u8981\u5c0f\u4e8e\u524d\u8005\uff0e"),(0,n.kt)("p",null,"\u5bc4\u5b58\u5668\u6570\u91cf\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4f46\u4e5f\u6709\u4e0d\u540c\uff1a")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u6307\u4ee4\u957f\u5ea6\u7684\u95ee\u9898\u3002\u5bc4\u5b58\u5668\u865a\u62df\u673a\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u76f4\u63a5\u6267\u884c\u5185\u5b58\u5730\u5740\uff0c\u5730\u5740\u6bd4\u8f83\u957f\uff0c\u5b83\u6ca1\u6709\u8c03\u7528\u6808\uff0c\u6570\u636e\u5728\u5185\u5b58\u4e2d\u6ca1\u6709\u987a\u5e8f\u3002\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u6784\u9020\u8c03\u7528\u6808\u6765\u662f\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u53d8\u6210\u76f8\u5bf9\u4f4d\u7f6e\uff0c\u8fd9\u6837\u6307\u4ee4\u5c31\u6bd4\u8f83\u5c0f\u3002"),(0,n.kt)("p",null,"Lua\u53ea\u662f\u4e3a\u4e86\u6267\u884c\u6027\u80fd\uff0c\u53ef\u4ee5\u4e0d\u8003\u8651\u8c03\u7528\u6808\uff0c\u4f46\u662f\u6211\u4eec\u8981\u8003\u8651\u5b89\u5168\u6027\uff0c\u8c03\u7528\u6808\u662f\u5fc5\u987b\u5f97\uff0c\u56e0\u6b64\u53ef\u4ee5\u7ed3\u5408\u4e24\u8005\u4f18\u52bf\u3002"),(0,n.kt)("p",null,"\u6307\u4ee4\u957f\u5ea6\u7684\u51cf\u5c11\u53ef\u4ee5\u5927\u5927\u51cf\u5c11Wasm\u5b57\u8282\u7801\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u5927\u5c0f\u3002"),(0,n.kt)("h2",{id:"24-creationxr"},"2.4. CreationXR"),(0,n.kt)("p",null,"\u8ddf\u624b\u673a\u6700\u5927\u4e0d\u540c\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u624b\u5177\u6709\u5728\u4e09\u7ef4\u4e16\u754c\u4e2d\u7684\u4f4d\u7f6e\uff0c\u5177\u5907\u521b\u5efa\u7acb\u4f53\u89c6\u89c9\u7269\u4f53\u7684\u57fa\u7840\uff0c\u4e0d\u518d\u4ec5\u9650\u4e8e\u5e73\u9762"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8eSLAM\uff0c\u4eba\u5728\u4e09\u7ef4\u4e16\u754c\u7684\u79fb\u52a8\u4e5f\u5177\u67093D\u4f4d\u7f6e\uff0c\u6240\u4ee5\u4eba\u8eab\u7684\u79fb\u52a8\u4e5f\u662f\u4ea4\u4e92\u7684\u4e00\u79cd\u8f93\u5165"),(0,n.kt)("li",{parentName:"ul"},"XR\u773c\u955c\u7684\u5c4f\u5e55\u66f4\u5927\uff0c\u4e16\u754c\u4e0d\u518d\u4ec5\u9650\u4e8e\u624b\u673a\u5927\u5c0f\u7684\u5c4f\u5e55\u5c3a\u5bf8")),(0,n.kt)("p",null,"\u5f53\u7136\u524d\u4e24\u8005\u5728\u624b\u673a\u4e5f\u662f\u53ef\u4ee5\u505a\u5230\uff0c\u53ea\u662f\u4f53\u9a8c\u6ca1\u90a3\u4e48\u597d"),(0,n.kt)("p",null,"\u786c\u4ef6\u8bbe\u5907\u7684\u4ea4\u4e92\u53ea\u9650\u4e8e\u624b\u52bf\u8bc6\u522b\u3001\u5b9a\u4f4d\u7b49\u57fa\u7840\u63a5\u53e3\uff0c\u5e94\u7528\u5c42\u8981\u5b9a\u4e49\u771f\u6b63\u7684\u4ea4\u4e92\u63a5\u53e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u968f\u7740\u624b\u6307\u7684\u79fb\u52a8\uff0c\u751f\u6210\u4e0d\u540c\u98ce\u683c\u7684\u7b14\u5237"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u52fe\u52d2\u4e00\u4e2a\u591a\u8fb9\u5f62\u4e4b\u540e\uff0c\u751f\u6210\u5c01\u95ed\u7684\u51e0\u4f55\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7528\u6237\u5c06\u4e24\u4e2a\u591a\u8fb9\u5f62\u62fc\u5728\u4e00\u8d77\uff0c\u81ea\u52a8\u5408\u5e76\u6210\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u51e0\u4f55\u8868\u9762\u7684\u7eb9\u7406\u6d82\u9e26\u3001\u6750\u8d28\u7f16\u8f91\uff0c\u55b7\u7ed8"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u80fd\u6d89\u53ca\u5f88\u591a\u7269\u7406\u6a21\u62df\uff0c\u8fd9\u6837\u66f4\u52a0\u771f\u5b9e")),(0,n.kt)("p",null,"\u7531\u4e8e\u624b\u52bf\u4f4d\u7f6e\u4e0d\u662f\u7edd\u5bf9\u7cbe\u51c6\u7684\uff0c\u6240\u4ee5snapping \u7b97\u6cd5\u5f88\u5173\u952e\u2026\u2026"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u624b\u52bf\u8bc6\u522b\u5f88\u5173\u952e")),(0,n.kt)("p",null,"\u4f20\u7edfPC\u6216\u8005\u624b\u673a\u4e8c\u7ef4\u7a7a\u95f4\u521b\u5efa3D\u5f88\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u90fd\u9700\u8981\u4e00\u4e2a\u83dc\u5355\uff0c\u6216\u8005\u8bf4\u6bcf\u4e00\u4e2a\u529f\u80fd\u90fd\u662f\u4e00\u4e2a\u83dc\u5355\uff0c\u4e00\u4e2a3D\u8f6f\u4ef6\u57fa\u672c\u662f\u5c31\u662f\u4e00\u4e2a\u83dc\u5355\u7684\u51e0\u4f55\uff0c\u7528\u6237\u9700\u8981\u9996\u5148\u539f\u5219\u4e00\u79cd\u6a21\u5f0f\uff0c\u7136\u540e\u5728\u8be5\u6a21\u5f0f\u4e0b\u539f\u5219\u5177\u4f53\u7684\u529f\u80fd\u8fdb\u884c\u64cd\u4f5c\uff0c\u83dc\u5355\u53ef\u80fd\u4e0a\u767e\uff0c\u60f3\u8c61\u5c31\u662f\u5821\u5792\u4e4b\u591c\u90fd\u597d\u591a\u83dc\u5355"),(0,n.kt)("p",null,"\u4f46\u5f53\u9009\u62e9\u83dc\u5355\u4ee5\u540e\uff0c\u5b9e\u9645\u7684\u539f\u5b503D\u64cd\u4f5c\u5e76\u4e0d\u591a\uff0c\u5728XR\u4e2d\uff0c\u8fd9\u4e00\u5207\u90fd\u53ef\u4ee5\u901a\u8fc7\u624b\u52bf\u6765\u5927\u5927\u7b80\u5316\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5355\u624b\u4e94\u6307\u6536\u62e2\u5c31\u662f\u7f29\u5c0f\uff0c\u5f20\u5f00\u5c31\u662f\u653e\u5927"),(0,n.kt)("li",{parentName:"ul"},"\u98df\u6307\u79fb\u52a8\u5c31\u662f\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u5de6\u624b\u638c\ud83d\udd90\ufe0f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e2a\u7269\u4f53\uff0c\u5de6\u624b\u624b\u52bf\u5145\u5f53\u4e00\u4e9b\u63a7\u5236\u6a21\u5f0f")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2D vs. 3D")),(0,n.kt)("p",null,"\u4f20\u7edf2D\u9f20\u6807\u6ca1\u6709\u524d\u540e\u6df1\u5ea6\u4e0a\u7684\u6982\u5ff5\uff0c\u7136\u800c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u573a\u666f\u662f3D\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u524d\u7684\u6444\u50cf\u673a\u4e3b\u8981\u662f\u7279\u5b9a\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u8fd1\u7684\u7269\u4f53")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u4f60\u9700\u8981\u5bf9\u67d0\u4e9b\u8ddd\u79bb\u6bd4\u8f83\u8fdc\u7684\u7269\u4f53\u8fdb\u884c\u7f16\u8f91\u65f6\uff0c\u5fc5\u987b\u8981\u5c06\u6444\u50cf\u673a\u79fb\u52a8\u5230\u8fd9\u4e9b\u5730\u65b9\u9644\u8fd1\uff0c\u7136\u800cPC\u4e0a\u79fb\u52a8\u6444\u50cf\u673a\u975e\u5e38\u9ebb\u70e6\uff0c\u56e0\u4e3a\u6ca1\u67093D\u8ddd\u79bb\uff0c\u6211\u4eec\u53ea\u80fd\u501f\u52a9\u9f20\u6807\u6216\u8005\u5c4f\u5e55\u4e0a\u5de6\u53f3\u4e0a\u4e0b\u7684\u6982\u5ff5\uff0c\u8fd9\u79cd\u5e73\u9762\u54113D\u7684\u6620\u5c04\u4f7f\u5f97\u53ea\u80fd\u5b9e\u73b0\u76f8\u5bf9\u4e8e\u5f53\u524d\u4f4d\u7f6e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5de6\u53f3\u4e0a\u4e0b\u79fb\u52a8"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5de6\u53f3\u4e0a\u4e0b\u65cb\u8f6c")),(0,n.kt)("p",null,"\u8fd9\u610f\u5473\u7740\u79fb\u52a8\u5230\u4e00\u4e2a\u8f83\u8fdc\u7684\u5730\u65b9\u4f1a\u975e\u5e38\u9ebb\u70e6\uff0c\u800c3D\u7684\u4ea4\u4e92\u5219\u4e0d\u4e00\u6837\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c06\u624b\u6307\u89e6\u53ca\u5230\u7684\u4e00\u4e2a\u70b9\u62c9\u5230\u773c\u524d"),(0,n.kt)("h3",{id:"241-unified-xr-input"},"2.4.1 Unified XR Input"),(0,n.kt)("h3",{id:"242-xr-scene-understanding"},"2.4.2 XR Scene Understanding"),(0,n.kt)("h3",{id:"243-data-driven-architecture"},"2.4.3 Data-driven Architecture"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u5e94\u8be5\u4ec5\u5173\u6ce8\u7528\u6237\u903b\u8f91\u5c42\uff0c\u5f15\u64ce\u5c42\u9762\u7684\u5f00\u53d1\u8fd8\u662f\u4f7f\u7528\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\uff0c\u6216\u8005\u6709\u4e00\u4e9b\u6570\u636e\u9a71\u52a8\uff0c\u4f46\u5b83\u4e0d\u662fECS\u67b6\u6784\uff0c\u800c\u662f\u4e3a\u4e86\u4fbf\u4e8e\u5982\u8de8\u5e73\u53f0\u6027\u3001\u6e32\u67d3\u7ba1\u7ebf\u914d\u7f6e\u7b49\u8fd9\u6837\u7684\u76ee\u7684\uff0c\u9664\u6b64\u4e4b\u5916\uff0c\u9762\u5411\u5bf9\u8c61\u5177\u6709\u66f4\u597d\u7684\u80fd\u529b\xb7"),(0,n.kt)("h3",{id:"244-\u4ea4\u4e92"},"2.4.4 \u4ea4\u4e92"),(0,n.kt)("p",null,"\u8981\u60f3\u5728XR\u8bbe\u5907\u4e0a\u8fdb\u884c\u4ea4\u4e92\uff08\u5305\u62ec\u5185\u5bb9\u521b\u4f5c\uff09\uff0c\u5e76\u4e14\u9762\u5411\u66f4\u5927\u4f17\u7684\u7528\u6237\uff0c\u5fc5\u987b\u5177\u6709\u66f4\u4f4e\u4ea4\u4e92\u95e8\u69db\uff0c\u4f20\u7edf\u7684\u4e92\u52a8\u7a0b\u5e8f\u5982\u6e38\u620f\u7684\u64cd\u4f5c\u95e8\u69db\u8fd8\u662f\u6bd4\u8f83\u9ad8\u3002\u4f8b\u5982\uff0c\u4f7f\u7528\u624b\u52bf\u89e6\u6478\u7b49\u6309\u952e\u63a7\u5236\u4eba\u7269\u57283D\u7a7a\u95f4\u4e2d\u8fdb\u884c\u884c\u8d70\uff0c\u4f7f\u7528\u590d\u6742\u7684\u6309\u952e\u7ec4\u5408\u63a7\u5236\u89d2\u8272\u5b8c\u6210\u4e00\u4e9b\u590d\u6742\u7684\u4e1c\u897f\uff0c\u4ecd\u7136\u662f\u6e38\u620f\u95e8\u69db\u6bd4\u8f83\u9ad8\u7684\u5176\u4e2d\u4e00\u4e2a\u90e8\u95e8\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u64cd\u63a7\u6280\u5de7\u672c\u8eab\u88ab\u5f53\u505a\u6e38\u620f\u673a\u5236\u5f88\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u5b83\u80fd\u5e26\u6765\u73a9\u6cd5\u7684\u4e50\u8da3\uff0c\u8fd9\u65e0\u53ef\u539a\u975e\uff0c\u4f46\u662f\u4e92\u52a8\u5185\u5bb9\u80cc\u540e\u672c\u8eab\u6240\u8868\u8fbe\u7684\u6545\u4e8b\u3001\u7cfb\u7edf\u4e4b\u95f4\u4ea4\u4e92\u7684\u673a\u5236\u7b49\u4ecd\u7136\u624d\u662f\u4e92\u52a8\u5185\u5bb9\u7684\u6838\u5fc3\uff0c\u5b83\u8868\u8fbe\u7684\u4e1c\u897f\u4f1a\u66f4\u591a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u548c\u8ba1\u7b97\u67b6\u6784\u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5728\u4ea4\u4e92\u9886\u57df\u505a\u4e00\u4e9b\u57fa\u7840\u521b\u65b0\u3002"),(0,n.kt)("h4",{id:"2441-\u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"},"2.4.4.1 \u57fa\u4e8e\u7a7a\u95f4\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u7a7a\u95f4\u4ea4\u4e92\u5f0f\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u7684\u4e3b\u8981\u5f62\u5f0f\uff0c\u5305\u62ec\u79fb\u52a8\u6444\u50cf\u5934\u3001\u79fb\u52a8\u573a\u666f\u3001\u9009\u62e9\u7269\u4f53\u3001\u79fb\u52a8\u7269\u4f53\u7b49\u7b49\uff0c\u5e38\u7528\u7684\u4e00\u4e9b\u64cd\u4f5c\u65b9\u5f0f\uff0c\u5982\u624b\u673a\u4e0a\u7684\u6ed1\u52a8\u3001\u70b9\u51fb\u3001\u53cc\u51fb\u7b49\u624b\u52bf\uff0c\u4ee5\u53caPC\u4e0a\u7684\u952e\u76d8\u548c\u9f20\u6807\uff0c\u6216\u8005\u4e3b\u673a\u6e38\u620f\u673a\u4e0a\u7684\u9065\u611f\u548c\u63a7\u5236\u624b\u67c4\u3002"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4e92\u52a8\u5185\u5bb9\u6700\u9891\u7e41\u548c\u6700\u6838\u5fc3\u7684\u64cd\u4f5c\u662f\u5173\u4e8eCamera\u7684\u79fb\u52a8\uff0c\u8fd9\u65e2\u53ef\u4ee5\u662f\u79fb\u52a8\u89d2\u8272\uff0c\u4e5f\u53ef\u4ee5\u662f\u79fb\u52a8\u573a\u666f\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\uff0c\u51e0\u4e4e\u90fd\u9700\u8981\u4e00\u79cd\u673a\u5236\u80fd\u591f\u63a7\u5236\u5728\u6574\u4e2a\u7a7a\u95f4\u8fdb\u884c\u64cd\u4f5c\u3002\u8fd9\u6837\u7684\u624b\u52bf\u64cd\u4f5c\u901a\u5e38\u6bd4\u8f83\u590d\u6742\uff0c\u5c24\u5176\u5bf9\u4e8e\u8f83\u8fdc\u5904\u7269\u4f53\u7684\u64cd\u4f5c\uff0c\u4f1a\u968f\u7740\u8ddd\u79bb\u548c\u906e\u6321\u7b49\u95ee\u9898\u53d8\u5f97\u66f4\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u4ee5\u89d2\u8272\u5bf9\u53c2\u8003\u7cfb\u79fb\u52a8\u4e16\u754c\uff0c\u548c\u4ee5\u4e16\u754c\u4e3a\u53c2\u8003\u7cfb\u79fb\u52a8\u89d2\u8272\uff0c\u8fd9\u4e24\u79cd\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u4f46\u662f\u5f53\u4f60\u9700\u8981\u540c\u65f6\u652f\u6301\u8fd9\u4e24\u8005\u662f\uff0c\u4e8b\u60c5\u4f1a\u53d8\u5f97\u590d\u6742\uff0c\u5c24\u5176\u79fb\u52a8\u7269\u4f53\u4f1a\u9762\u4e34\u66f4\u591a\u7a7a\u95f4\u6761\u4ef6\u3002\u300a\u5821\u5792\u4e4b\u591c\u300b\u9488\u5bf9\u6b64\u8bbe\u8ba1\u4e86\u4e00\u79cd\u7edf\u4e00\u7684\u67b6\u6784\uff0c\u5728\u624b\u673a\u6a21\u5f0f\u4e2d\uff0c\u5b83\u5c06\u7269\u4f53\u4e0e\u89d2\u8272\u4e4b\u95f4\uff0c\u501f\u52a9\u56fa\u5b9a\u7684\u5c4f\u5e55\u4e2d\u592e\u4f4d\u7f6e\u4fdd\u6301\u4e00\u79cd\u76f8\u5bf9\u5173\u7cfb\uff0c\u56e0\u6b64\u53ef\u4ee5\u628a\u7269\u4f53\u7684\u79fb\u52a8\u64cd\u4f5c\u4e0e\u73a9\u5bb6\u7684Camera\u7ed3\u5408\u8d77\u6765\u3002\u5927\u5927\u7b80\u5316\u4e86\u8fd9\u79cd\u4ea4\u4e92\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite-Creative-Mode",src:l(9456).Z,width:"3342",height:"1668"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u79cd\u65b9\u5f0f\u7b80\u5316\u4e86\u64cd\u4f5c\uff0c\u4f46\u662f\u5982\u679c\u5728XR\u7684\u73af\u5883\uff08\u5305\u62ec\u624b\u673a\u3001AR\u548cVR\u773c\u955c\uff09\uff0c\u7531\u4e8e\u8bbe\u5907\u672c\u8eab\u5177\u5907\u5b9a\u4f4d\u529f\u80fd\uff0c\u56e0\u6b64\u5b83\u8ddf\u771f\u5b9e\u4e16\u754c\u76843\u7ef4\u7a7a\u95f4\u5173\u8054\u8d77\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u501f\u52a9\u4eba\u5728\u771f\u5b9e3\u7ef4\u7a7a\u95f4\u7684\u79fb\u52a8\u4e0e\u865a\u62dfCamera\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u4f7f\u5f97\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u7a7a\u95f4\u662f\u53ef\u4ee5\u76f8\u5bf9\u9759\u6b62\u4e0d\u52a8\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u771f\u5b9e\u7a7a\u95f4\u4eba\u7684\u79fb\u52a8\u5145\u5f53\u4e86\u865a\u62dfCamera\u7684\u79fb\u52a8")),(0,n.kt)("p",null,"\u501f\u52a9\u4e0a\u8ff0\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u6709\u671b\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7b80\u5316XR\u7684\u7a7a\u95f4\u4ea4\u4e92\u95e8\u69db\u3002"),(0,n.kt)("h4",{id:"2442-\u57fa\u4e8e\u8bed\u97f3ai\u7684\u4ea4\u4e92"},"2.4.4.2 \u57fa\u4e8e\u8bed\u97f3+AI\u7684\u4ea4\u4e92"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u4f20\u7edf\u7684\u4e92\u52a8\u5185\u5bb9\u4ea4\u4e92\u90fd\u662f\u53ea\u6d89\u53ca\u52303D\u7684\u7a7a\u95f4\u4ea4\u4e92\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u4ea4\u4e92\u8f6c\u6362\u5230XR\u8bbe\u5907\u65f6\uff0c\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5373\u539f\u672c\u5728\u624b\u673a\u4e0a\u53ea\u9700\u8981\u70b9\u51fb\u5c4f\u5e55\u9009\u62e9\u7684\u65b9\u5f0f\uff0c\u4e5f\u9700\u8981\u53d8\u6210\u4e00\u79cd\u7a7a\u95f4\u4ea4\u4e92")),(0,n.kt)("p",null,"\u8fd9\u5927\u5927\u589e\u52a0\u4e86\u95e8\u69db\uff0c\u4f8b\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6bcf\u4e00\u4e2a\u7269\u54c1\u7684\u9009\u62e9\u90fd\u9700\u8981\u79fb\u52a8\u865a\u62df\u9065\u611f\u6765\u786e\u5b9a\u8981\u64cd\u4f5c\u7684\u5185\u5bb9\u3002\u8fd9\u5728\u4f20\u7edf\u7684\u624b\u673a\u6216\u8005PC\u4e0a\u539f\u672c\u662f\u5f88\u7b80\u5355\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"kokid",src:l(6186).Z,width:"640",height:"360"})),(0,n.kt)("p",null,"\u9488\u5bf9\u6b64\uff0c\u9664\u4e86\u4e0a\u8ff0\u7684\u7a7a\u95f4\u53d8\u6362\u65b9\u6cd5\uff0c\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u662f\u8ba9\u6240\u64cd\u4f5c\u7684\u5185\u5bb9\u5c3d\u53ef\u80fd\u8bed\u4e49\u5316\uff0c\u7136\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u501f\u52a9\u8bed\u97f3\u6765\u8f85\u52a9\u64cd\u4f5c\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u5f88\u96be\u4f7f\u7528\u8bed\u97f3\u8f85\u52a9\uff0c\u56e0\u4e3a\u4fe1\u606f\u90fd\u662f\u6309\u7ed3\u6784\u63cf\u8ff0\u7684\uff0c\u4fe1\u606f\u901a\u8fc7\u6ca1\u6709\u8bed\u4e49\u3002\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5bf9\u6bcf\u4e2a\u5143\u7d20\u52a0\u4e2a\u6807\u7b7e\u4e4b\u7c7b\u7684\u6765\u8f85\u52a9\u8bed\u97f3\u3002"),(0,n.kt)("p",null,"RealityIS\u7ec4\u4ef6\u7684\u8bed\u4e49\u7279\u6027\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u80fd\u5728\u521b\u4f5c\u5185\u5bb9\u7684\u65f6\u5019\uff0c\u5c3d\u53ef\u80fd\u8f83\u5c11\u5bf9\u7a7a\u95f4\u4ea4\u4e92\u7684\u4f9d\u8d56\uff0c\u4ece\u800c\u4f7f\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u66f4\u7b80\u5355\u3002"),(0,n.kt)("h2",{id:"25-creation-ai"},"2.5 Creation AI"),(0,n.kt)("h3",{id:"251-semantics-based-creating"},"2.5.1 Semantics-based Creating"),(0,n.kt)("p",null,"\u57fa\u4e8e \u8bed\u4e49 \u7684 \u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("h3",{id:"252-procedural-content-generation"},"2.5.2 Procedural Content Generation"),(0,n.kt)("h3",{id:"253-intelligent-simulation"},"2.5.3 Intelligent Simulation"),(0,n.kt)("h3",{id:"254-research"},"2.5.4 Research"),(0,n.kt)("p",null,"\u884c\u4e3a\u5206\u6790\u4e0e\u7814\u7a76"),(0,n.kt)("h2",{id:"26-creation-cloud"},"2.6 Creation Cloud"),(0,n.kt)("h3",{id:"261-creation-management"},"2.6.1 Creation Management"),(0,n.kt)("h4",{id:"2611-creationid"},"2.6.1.1 CreationID"),(0,n.kt)("p",null,"2\u3001\u573a\u666f\u5230\u8fbe\u53ca\u65f6\u6027"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u7684\u573a\u666f\u90fd\u5f88\u5927\uff0c\u800c\u4e14\u90fd\u9884\u8bbe\u4e00\u5b9a\u7684\u6d41\u7a0b\u548c\u8def\u7ebf\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u73a9\u5bb6\u90fd\u5fc5\u987b\u4ece\u8d77\u70b9\uff0c\u901a\u8fc7\u524d\u9762\u6240\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u8bbe\u8ba1\u7684\u5173\u5361\uff0c\u624d\u80fd\u5230\u8fbe\u67d0\u4e2a\u573a\u666f\u70b9\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u662f\u9759\u6001\u573a\u666f\u5982\u5854\u9632\uff0c\u4e09\u6d88\u6e38\u620f\uff0c\u6a21\u62df\u7ecf\u8425\u6e38\u620f\uff0c\u5b83\u7684\u72b6\u6001\u4e5f\u4e0d\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u4ece\u96f6\u5f00\u59cb\u628a\u524d\u9762\u7684\u7b49\u7ea7\u90fd\u5b8c\u6210\u4e86\uff0c\u624d\u80fd\u770b\u5230\u8be5\u573a\u666f\u7684\u67d0\u4e2a\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5982\u4e16\u754c\u76f8\u5bf9\u6bd4\u8f83\u9759\u6001\u7684\u5f00\u653e\u573a\u666f\uff0c\u5b83\u7684\u6574\u4e2a\u4e16\u754c\u90fd\u5f88\u5927\uff0c\u4f60\u5f88\u96be\u8ba9\u53e6\u4e00\u4e2a\u73a9\u5bb6\u76f4\u63a5\u5b9a\u4f4d\u5230\u67d0\u4e2a\u4f60\u6307\u5b9a\u7684\u5730\u65b9\uff0c\u4ed6\u4eec\u53ef\u80fd\u8981\u6709\u4e00\u4f1a\u624d\u80fd\u5230\u8fbe\uff0c\u4f8b\u5982\u4e00\u822c\u4f1a\u5206\u4e3a\u4e00\u4e9b\u533a\uff0c\u73a9\u5bb6\u53ef\u80fd\u80fd\u8fdb\u53bb\u4e00\u4e2a\u5927\u533a\u4e00\u4e2a\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u4f46\u662f\u5269\u4e0b\u7684\u8981\u72ec\u7acb\u884c\u8d70\u4e00\u6bb5\u65f6\u95f4\uff0c\u5e76\u4e14\u8981\u77e5\u9053\u65b9\u5411")),(0,n.kt)("p",null,"\u7136\u800c\u6211\u4eec\u9700\u8981\u7684\u662f\u8ba9\u88ab\u5206\u4eab\u7684\u73a9\u5bb6\u80fd\u591f\u6700\u53ca\u65f6\u7684\u3001\u7acb\u523b\u5448\u73b0\u67d0\u4e2a\u5174\u8da3\u70b9\uff0c\u5e76\u4e14\u670b\u53cb\u770b\u5230\u7684\u662f\u540c\u4e00\u72b6\u6001\uff0c\u751a\u81f3\u540c\u4e00\u4e2aCamera\u7684\u4f4d\u7f6e\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u901a\u5e38\u662f\u5c0f\u573a\u666f\u7684\uff0c\u72ec\u7acb\u7684\uff0c\u65e0\u6bd4\u8f83\u590d\u6742\u72b6\u6001\u7684\u64cd\u4f5c"),(0,n.kt)("h3",{id:"262--creation-code-library"},"2.6.2 Creation Code Library"),(0,n.kt)("p",null,"\u4ee3\u7801\u5e93\u662f\u4ee5\u6807\u51c6\u4e3a\u5355\u4f4d\u5bf9\u5176\u8fdb\u884c\u5206\u7c7b\uff0c\u6bcf\u4e2a\u6807\u51c6\u4f1a\u5bf9\u5e94\u65e0\u6570\u4e2a\u5b9e\u73b0\u8be5\u6807\u51c6\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u6807\u51c6\u5e76\u4e0d\u5305\u542b\u7ec4\u4ef6\uff0c\u5b83\u53ea\u4f5c\u4e3a\u7528\u6237\u9009\u62e9\u7ec4\u4ef6\u6216\u8005\u5f00\u53d1\u8005\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u5206\u7c7b\uff0c\u4f8b\u5982\u4e3a\u4e86\u5b9e\u73b0\u4e0d\u540c\u6807\u51c6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u67d0\u4e2a\u7ec4\u4ef6\u53ef\u80fd\u4f7f\u7528\u6765\u81ea\u4e24\u4e2a\u6807\u51c6\u7684\u7b26\u53f7\u3002"),(0,n.kt)("h4",{id:"2621-\u6807\u51c6\u7ba1\u7406"},"2.6.2.1 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u5b83\u5c31\u662f\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u56f4\u7ed5\u6807\u51c6\u4f1a\u6709\u793e\u533a\u548c\u8ba8\u8bba\uff0c\u6807\u51c6\u4f5c\u4e3a\u4e00\u79cd\u7ec4\u4ef6\u5206\u7c7b\u548c\u68c0\u7d22\u4f9d\u636e\uff0c\u53ef\u4ee5\u67e5\u8be2\u6240\u6709\u4e0e\u8be5\u6807\u51c6\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u540d\u79f0\u662f\u552f\u4e00\u7684\u3002"),(0,n.kt)("p",null,"\u4e0d\u540c\u7684\u5f00\u53d1\u8005\u90fd\u53ef\u4ee5\u5b9a\u4e49\u7c7b\u4f3c\u7684\u6807\u51c6\uff0c\u53ea\u662f\u4f60\u9700\u8981\u53bb\u53d1\u5c55\u81ea\u5df1\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u901a\u8fc7\u81ea\u5df1\u5f00\u53d1\u66f4\u4e30\u5bcc\u7684\u7ec4\u4ef6\uff0c\u6216\u8005\u9080\u8bf7\u522b\u7684\u5f00\u53d1\u8005\u9488\u5bf9\u4f60\u7684\u6807\u51c6\u5f00\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u6807\u51c6\u53ea\u5305\u542b\u4e24\u4e2a\u7248\u672c\uff0c\u4ee5\u51cf\u5c11\u7248\u672c\u7ba1\u7406\u7684\u590d\u6742\u5ea6\uff0c\u4ee5\u53ca\u59cb\u7ec8\u4fdd\u6301\u7528\u6237\u7ec4\u4ef6\u66f4\u65b0\uff0c\u53c2\u89c14.11.3.4\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2622-\u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"},"2.6.2.2 \u7ec4\u4ef6\u53ca\u5305\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u5305\u7684\u7ba1\u7406\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u8868\u5199\u7ec4\u4ef6\u65f6\uff0c\u5bf9\u5f15\u7528\u7684\u6807\u51c6\u7b26\u53f7\u8fdb\u884c\u89e3\u91ca\u548c\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u7528\u6237\u5bf9\u5b9e\u4f53\u6dfb\u52a0\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u65f6\uff0c\u81ea\u52a8\u52a0\u8f7d\u7ec4\u4ef6\uff0c\u4ee5\u53ca\u52a8\u6001\u4fee\u6539Creation Table\u7684\u5e03\u5c40")),(0,n.kt)("p",null,"\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u8fd9\u91cc\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u624b\u52a8\u7ef4\u62a4\u7248\u672c\u53f7\uff0c\u53c2\u89c12.7.5\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"263-multi-player--services"},"2.6.3 Multi-player Services"),(0,n.kt)("h4",{id:"2631-voice-service"},"2.6.3.1 Voice Service"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And epic is con conscientiously making an effort to do this in everything we do. Uh, for example, we're moving to a web RTC based, uh, voice coms framework, um, in Fortnite for voice and text and video chat, so that we can start integrating with other services, you know, other platforms, other stores, other echo systems, other chat clients, um, and have shared social experiences across different game clients. You know, we already have some standards for identity and authentication. We can expand them from there with new standards, for friends and connectivity.")),(0,n.kt)("h3",{id:"264-\u7aef\u4e91\u534f\u540c"},"2.6.4 \u7aef\u4e91\u534f\u540c"),(0,n.kt)("p",null,"\u73b0\u6709\u5f15\u64ce\u67b6\u6784\u5f88\u96be\u505a\u5230\u7aef\u4e91\u534f\u540c\uff0c\u4f8b\u5982\u5927\u5bb6\u60f3\u5230\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u548c\u4ea4\u4e92\u653e\u7aef\u4fa7"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u7aef\u53ef\u4ee5\u5171\u4eab\u7684\u5728\u591a\u4e2a\u7528\u6237\u4e4b\u95f4\u5171\u4eab")),(0,n.kt)("p",null,"\u4f46\u8fd9\u4e9b\u90fd\u5f88\u96be\uff0c\u6216\u8005\u5728\u539f\u6709\u5f15\u64ce\u67b6\u6784\u4e0b\u62c6\u5206\u5f88\u96be\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5176\u5b9e\u8fd8\u6709\u53e6\u5916\u4e00\u4e9b\u534f\u540c\uff0c\u4f8b\u5982AOT\u7684\u9884\u7f16\u8bd1\u7b49\uff0c\u8fd9\u79cd\u9700\u8981\u8f6f\u4ef6\u67b6\u6784\u8ddf\u81ea\u5df1\u6d41\u7a0b\u7684\u8054\u5408\u8bbe\u8ba1\u3002"),(0,n.kt)("h4",{id:"2641-\u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"},"2.6.4.1 \u5728\u4e91\u7aef\u6267\u884c\u811a\u672c"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7ec4\u4ef6\u90fd\u5e94\u8be5\u5728\u4e91\u7aef\u6267\u884c\uff0c\u5c24\u5176\u8003\u8651\u5230\u5f88\u591a\u903b\u8f91\u5b9e\u9645\u4e0a\u8ddf\u7528\u6237\u663e\u793a\u662f\u65e0\u5173\u7684\u3002"),(0,n.kt)("h4",{id:"2642-client-as-a-display"},"2.6.4.2 Client as a Display"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6838\u5fc3\u601d\u8def\uff1a\u7aef\u4fa7\u53ea\u9700\u8981\u5b58\u50a8\u548c\u8ba1\u7b97\u8ddf\u663e\u793a\u76f8\u5173\u7684\u5185\u5bb9\uff0c\u6bd4\u5982\u5927\u90e8\u5206UI\u548c\u89c6\u89c9\u6548\u679c\u76f8\u5173\u7684\u5185\u5bb9\u3002\u5176\u4ed6\u7684\u903b\u8f91\u548c\u6570\u636e\uff0c\u5982\u679c\u5b83\u4eec\u867d\u7136\u662f\u6838\u5fc3\u6570\u636e\uff0c\u4f46\u662f\u4e0d\u4f1a\u76f4\u63a5\u663e\u793a\uff0c\u4e5f\u4e0d\u5e94\u8be5\u5b58\u5728\u4e8e\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u811a\u672c\u4e2d\u8981\u533a\u5206\u54ea\u4e9b\u662f\u663e\u793a\u7ec4\u4ef6\uff0c\u54ea\u4e9b\u6570\u636e\u662f\u8ddf\u663e\u793a\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u4e0e\u663e\u793a\u76f8\u5173\u7684\u6570\u636e\uff0c\u5b83\u4eec\u5728\u5ba2\u6237\u7aef\u5185\u5b58\u4e2d\u90fd\u4f1a\u6709\u5b58\u50a8\u7684\u503c\uff0c\u4f46\u662f\u8fd9\u4e9b\u503c\u6709\u53ef\u80fd\u662f\u670d\u52a1\u5668\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u5982\u679c\u662f\u670d\u52a1\u5668\u5199\u5165\u7684\u503c\uff0c\u670d\u52a1\u5668\u4f1a\u81ea\u52a8\u5904\u7406\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u8fd9\u4e2a\u503c\u597d\u50cf\u5c31\u662f\u7aef\u4fa7\u81ea\u5df1\u67d0\u4e2a\u903b\u8f91\u8ba1\u7b97\u7684\uff0c\u5b83\u968f\u65f6\u53ef\u4ee5\u4ece\u5185\u5b58\u4e2d\u83b7\u53d6\u5230\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u8981\u5c06\u8fd9\u4e00\u5207\u9690\u85cf\u8d77\u6765\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7aef\u4fa7\u6765\u8bb2\uff0c\u4ed6\u50cf\u4e00\u4e2a\u865a\u62df\u5185\u5b58\uff0c\u7aef\u4fa7\u968f\u65f6\u90fd\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u53d8\u91cf\u7684\u503c\u3002"),(0,n.kt)("h4",{id:"2643-\u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"},"2.6.4.3 \u5728\u4e91\u7aef\u8ba1\u7b97\u9700\u8981\u52a0\u8f7d\u7684\u7ec4\u4ef6"),(0,n.kt)("h4",{id:"2644-\u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"},"2.6.4.4 \u8ba1\u7b97\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7684\u5173\u7cfb"),(0,n.kt)("h4",{id:"2645-\u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\u4f9d\u8d56\u987a\u5e8f"},"2.6.4.5 \u8ba1\u7b97\u5f53\u524d\u8bf7\u6c42\u4e2d\u6240\u6709\u7ec4\u4ef6\u7684\u6267\u884c\uff08\u4f9d\u8d56\uff09\u987a\u5e8f"),(0,n.kt)("h3",{id:"265-\u5e76\u884c\u8ba1\u7b97"},"2.6.5 \u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u5f88\u96be\u62bd\u53d6\u51fa\u5c0f\u9897\u7c92\u7684\u8ba1\u7b97\uff0c\u6240\u4ee5\u51e0\u4e4e\u65e0\u6cd5\u505a\u5e76\u884c\u8ba1\u7b97\uff0c\u4e00\u4e2a\u6e38\u620f\u5fc5\u987b\u5728\u4e00\u4e2a\u673a\u5668\u4e0a\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u9700\u8981\u52a0\u8f7d\u6240\u6709\u7684\u6570\u636e\u548c\u4ee3\u7801\u3002\u800c\u5f53\u8fd9\u4e2a\u201c\u6e38\u620f\u201d\u662f\u4e00\u4e2a\u65e0\u7a77\u7684\u5143\u5b87\u5b99\u4e16\u754c\u65f6\uff0c\u8fd9\u79cd\u8ba1\u7b97\u4f1a\u53d8\u5f97\u8d8a\u6765\u8d8a\u4f4e\u6548\u548c\u6602\u8d35\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u505a\u6cd5\uff0c\u5982\u679c\u4e0d\u5bf9\u6570\u636e\u505a\u7cbe\u5fc3\u7684\u7ba1\u7406\uff0c\u6700\u591a\u53ea\u80fd\u505a\u5230\u4e09\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5757\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u865a\u62df\u5316\u6d41\u6c34\u7ebf")),(0,n.kt)("p",null,"\u524d\u8005\u7684\u4e3b\u8981\u95ee\u9898\u662f\uff0c\u5b83\u7684\u6570\u636e\u4ecd\u7136\u6ca1\u6709\u62c6\u5206\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u5b83\u53ef\u4ee5\u5728\u4e00\u4e2a\u673a\u5668\u5185\u5f88\u597d\u5730\u505a\u591a\u7ebf\u7a0b\uff0c\u4f46\u662f\u5f53\u5206\u914d\u5230\u591a\u53f0\u673a\u5668\u65f6\uff0c\u6bcf\u53f0\u673a\u5668\u90fd\u8981\u62f7\u8d1d\u51e0\u4e4e\u6240\u6709\u7684\u3001\u76f8\u540c\u7684\u6570\u636e\uff0c\u4f7f\u5f97\u5e76\u884c\u8ba1\u7b97\u7684\u7ba1\u7406\u96be\u5ea6\u5927\u5927\u589e\u52a0\u3002"),(0,n.kt)("p",null,"\u6d41\u6c34\u7ebf\u7ea7\u7684\u591a\u7ebf\u7a0b\uff0c\u56e0\u4e3a\u6d41\u6c34\u7ebf\u4e4b\u95f4\u7684\u987a\u5e8f\uff0c\u4e5f\u4f1a\u589e\u52a0\u7ba1\u7406\u548c\u8c03\u5ea6\u7684\u96be\u5ea6\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u4e3b\u8981\u9488\u5bf9 GPU\uff0c\u7531\u4e8eGPU\u8ba1\u7b97\u662f\u9ad8\u5ea6\u5e76\u884c\u7684\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u4f9d\u8d56\u6bd4\u8f83\u5c0f \uff0c\u6240\u6709\u7406\u8bba\u4e0a\u53ef\u4ee5\u5206\u533a\u57df\u6216\u8005\u5206\u5757\u8fdb\u884c\u8ba1\u7b97\u3002\u4f46\u8fd9\u4e0d\u662f\u7edd\u5bf9\u7684\uff0c\u4f8b\u5982\u7eb9\u7406\u91c7\u6837\uff0c\u9634\u5f71\uff0c\u540e\u5904\u7406\u7b49\u6280\u672f\uff0c\u901a\u8fc7\u662f\u9700\u8981\u5bf9\u7eb9\u7406\u8fdb\u884c\u4efb\u610f\u91c7\u6837\u7684\uff0c\u91c7\u7528\u865a\u62df\u5316\u6d41\u6c34\u7ebf\u8fd9\u4e00\u5757\u6709\u5f88\u591a\u95ee\u9898\u9700\u8981\u5904\u7406\u3002\u76ee\u524d\u770b\u8d77\u6765\u4ec5\u6709\u7c7b\u4f3cEpic Games\u7684\u51e0\u4f55\u88c1\u526a\u662f\u5408\u7406\u7684\uff0c\u4fdd\u8bc1\u8ba1\u7b97\u662f\u7ef4\u6301\u5728\u4e00\u4e2a\u4e0a\u9650\uff0c\u800c\u73b0\u4ee3GPU\u8ba1\u7b97\u8fd9\u6837\u7684\u4e0a\u9650\u901a\u5e38\u95ee\u9898\u4e0d\u5927\u3002\u4f46\u7f3a\u70b9\u662f\u8fd9\u90e8\u5206\u6570\u636e\u7ba1\u7406\u7684\u5f00\u9500\u4e5f\u4e0d\u5c0f\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0d\u7ba1\u600e\u6837\uff0cGPU\u7684\u6e32\u67d3\u90e8\u5206\u901a\u8fc7\u88c1\u526a\uff0c\u76ee\u524d\u770b\u8d77\u6765\u662f\u5b58\u5728\u6bd4\u8f83\u5b8c\u5584\u7684\u7406\u8bba\u548c\u5de5\u7a0b\u5b9e\u8df5\u4e86\uff0c\u6240\u4ee5\u6700\u5927\u7684\u95ee\u9898\u662fCPU\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5f53\u6240\u6709\u8ba1\u7b97\u5904\u4e8e\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\uff0c\u903b\u8f91\u8ba1\u7b97\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u770b\uff0cOOP\u5fc5\u7136\u4e0d\u5408\u9002\uff0cUnreal Engine\u7684\u65b9\u5f0f\u8fd8\u6ca1\u6709\u5b58\u5728\u8f83\u5927\u7684\u95ee\u9898\uff0c\u662f\u56e0\u4e3a\u5b83\u7684\u6e38\u620f\u903b\u8f91\u90e8\u5206\u7684\u89c4\u6a21\u8fd8\u4e0d\u591f\u5927\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5fc5\u7136\u8981\u5c06\u6570\u636e\u548c\u903b\u8f91\u62c6\u5206\u6210\u4e00\u6bb5\u4e00\u6bb5\u5c0f\u7684\u8ba1\u7b97\u5355\u5143\uff0c\u4e0d\u7ba1\u5bf9\u4e8e\u6570\u636e\u8fd8\u662f\u8ba1\u7b97\u6307\u4ee4\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f97\u53ef\u4ee5\u65e0\u9650\u5e76\u884c\u5316\uff0c\u56e0\u6b64ECS\u7c7b\u4f3c\u7684\u6570\u636e\u9a71\u52a8\u51e0\u4e4e\u662f\u672a\u6765\u552f\u4e00\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5b83\u5728\u4e00\u4e2a\u7a0b\u5e8f\u5185\u90e8\u5929\u751f\u5730\u5c06\u6570\u636e\u548c\u903b\u8f91\u533a\u5206\u51fa\u6765\u3002"),(0,n.kt)("h4",{id:"2651-\u5206\u5e03\u5f0fcreation-table"},"2.6.5.1 \u5206\u5e03\u5f0fCreation Table"),(0,n.kt)("p",null,"\u5f53\u8ba1\u7b97\u548c\u6570\u636e\u80fd\u591f\u88ab\u5212\u5206\u4e3a\u5c0f\u5757\u6570\u636e\u65f6\uff0c\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u4e0d\u518d\u88ab\u770b\u505a\u662f\u4e00\u4e2a\u4e0d\u53ef \u5206\u5272\u7684\u6574\u4f53\uff0c\u5b83\u7684\u6570\u636e\u548c\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u88ab\u7b80\u5355\u5730\u5212\u5206\u4e3a\u591a\u4e2a\u72ec\u7acb\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4e00\u4e2a\u6e38\u620f\u4e16\u754c\u5f88\u5bb9\u6613\u88ab\u5206\u914d\u5230\u591a\u53f0\u670d\u52a1\u5668\u4e0a\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u4fdd\u8bc1\u77e5\u9053\u4e0d\u540c\u7684\u6e38\u620f\u5bf9\u8c61\u5bf9\u5e94\u7684\u670d\u52a1\u5668\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u5e76\u884c\u8ba1\u7b97\u67b6\u6784\u53d8\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e32\u67d3\u5728\u5ba2\u6237\u7aef\u6267\u884c\uff0c\u901a\u8fc7\u5f88\u597d\u7684\u51e0\u4f55\u88c1\u526a\u4fdd\u8bc1\u6027\u80fd\u7684\u4e0a\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5728\u4e91\u7aef\u88ab\u5f88\u597d\u5730\u5206\u5e03\u8ba1\u7b97")),(0,n.kt)("h3",{id:"266-rpc"},"2.6.6 RPC"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d"),(0,n.kt)("h2",{id:"27-\u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"},"2.7 \u6838\u5fc3\u7f16\u7a0b\u601d\u60f3"),(0,n.kt)("h3",{id:"271-\u907f\u514d\u5168\u5c40\u53d8\u91cf"},"2.7.1 \u907f\u514d\u5168\u5c40\u53d8\u91cf"),(0,n.kt)("h3",{id:"272-\u51fd\u6570\u5f0f\u7f16\u7a0b"},"2.7.2 \u51fd\u6570\u5f0f\u7f16\u7a0b"),(0,n.kt)("h4",{id:"2721-\u57fa\u672c\u6784\u9020\u5355\u5143"},"2.7.2.1 \u57fa\u672c\u6784\u9020\u5355\u5143"),(0,n.kt)("p",null,"\u4ee5\u5217\u8868\u4e3a\u6838\u5fc3\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u5c06\u4ee3\u7801\u5206\u4e3a\u4e24\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u64cd\u4f5c\u5217\u8868\u7684\u6838\u5fc3\u529f\u80fd\uff0c\u5982filter\uff0cmap\u548creduce"),(0,n.kt)("li",{parentName:"ul"},"\u9ad8\u9636\u51fd\u6570")),(0,n.kt)("p",null,"\u524d\u8005\u5728\u51fd\u6570\u5f0f\u7a0b\u5e8f\u8bed\u8a00\u4e2d\u901a\u5e38\u901a\u8fc7\u5e93\u7684\u5f62\u5f0f\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u66f4\u591a\u4f7f\u7528\u8fd9\u4e9b\u5e93\u5e76\u63d0\u4f9b\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\u6709\u7c7b\u4f3c\u7684\u601d\u60f3\uff0c\u6211\u4eec\u5c06\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u770b\u505a\u5217\u8868\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u90fd\u662f\u5e76\u884c\u8ba1\u7b97\uff0c\u90fd\u662f\u9488\u5bf9\u5217\u8868\u7684\u8ba1\u7b97\uff0c\u54ea\u6015\u6574\u4e2a\u5217\u8868\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\uff08\u8fd0\u884c\u65f6\u4f1a\u6839\u636e\u5143\u7d20\u4e2a\u6570\u4ee5\u51b3\u5b9a\u662f\u5426\u9700\u8981\u4f7f\u7528\u5e76\u884c\u5316\u6307\u4ee4\uff09\u3002\u5728RealityIS\u4e2d\uff0cfilter\uff0cmap\u548creduce\u8fd9\u4e9b\u5e95\u5c42\u51fd\u6570\u7531\u5e73\u53f0\u63d0\u4f9b\uff0c\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u7c7b\u4f3c\u4e8e\u9ad8\u9636\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u7ec4\u4ef6\u5305\u542b\u4e09\u4e2a\u51fd\u6570\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"filter\uff1a\u63d0\u4f9b\u7b5b\u9009\u6761\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"map\uff1a\u4e00\u822c\u7684\u903b\u8f91\u5904\u7406"),(0,n.kt)("li",{parentName:"ul"},"reduce\uff1a\u5408\u5e76\u7edf\u8ba1\u4e4b\u7c7b\u7684\u529f\u80fd\uff0c\u9700\u8981\u6dfb\u52a0\u4e00\u4e9b\u7d2f\u52a0\u503c\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd0\u884c\u65f6\u4f1a\u9996\u5148\u6267\u884cfilter\u51fd\u6570\uff0c\u4ee5\u786e\u4fddmap\u548creduce\u6267\u884c\u7684\u51fd\u6570\u53c2\u6570\u5bf9\u8c61\u4e0d\u80fd\u4e3a\u7a7a\uff0c\u4e8b\u5b9e\u4e0a\u8fd0\u884c\u65f6\u4e5f\u4fdd\u8bc1filter\u6267\u884c\u7684\u96c6\u5408\u5217\u8868\u4e5f\u4e0d\u4f1a\u4e3a\u7a7a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5CreationSctipt\u6ca1\u6709\u7a7a\u503c\u7684\u6982\u5ff5\u3002\u6bcf\u4e2a\u7ec4\u4ef6\u5904\u7406\u7684\u4e5f\u90fd\u662f\u5355\u4e2a\u5b9e\u4f53\u5bf9\u8c61\uff0c\u5b83\u4eec\u4e00\u822c\u4e0d\u5904\u7406\u96c6\u5408\u3002"),(0,n.kt)("h4",{id:"2722-\u5217\u8868\u64cd\u4f5c"},"2.7.2.2 \u5217\u8868\u64cd\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u5b83\u4e0d\u5149\u662f\u5904\u7406\u8be5\u7ec4\u4ef6\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4ed6\u5176\u5b9e\u4e5f\u5305\u542b\u5904\u7406\u96c6\u5408\u7684\u529f\u80fd\uff0c\u5373\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u81ea\u8eab\u7684\u903b\u8f91\uff0c\u4f8b\u5982map"),(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u5b9e\u4f53\u6240\u5728\u96c6\u5408\u7684\u903b\u8f91\uff0c\u4f8b\u5982filter\u6216\u8005reduce\uff0corder\u7b49")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u540e\u8005\u6765\u8bf4\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u901a\u5e38\u6d89\u53cafor\uff0cwhile\u5faa\u73af\u7b49\uff0c\u5728\u4e00\u4e2a\u96c6\u5408\u7684\u5c42\u9762\u53bb\u64cd\u4f5c\uff0c\u4f8b\u5982Unity ECS\u4e2d\u5f00\u53d1\u8005\u662f\u83b7\u53d6\u4e00\u4e2a\u7c7b\u578b\u7684\u5217\u8868\uff0c\u7136\u540e\u5f00\u53d1\u8005\u81ea\u5b9a\u51b3\u5b9a\u5bf9\u5217\u8868\u7684\u904d\u5386\u3002"),(0,n.kt)("p",null,"\u501f\u52a9\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u4e00\u5217\u7406\u5ff5\uff0c\u4f8b\u5982Erlang\uff0c\u5b83\u4eec\u628afor\u6216\u8005while\u4e4b\u7c7b\u7684\u5faa\u73af\u8f6c\u6362\u4e3a\u9012\u5f52\uff0c\u7136\u540e\u5f00\u53d1\u8005\u5c31\u53ef\u4ee5\u805a\u7126\u4e8e\u5904\u7406\u5bf9\u5355\u4e2a\u5143\u7d20\u7684\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5c06\u5bf9\u5217\u8868\u7684\u64cd\u4f5c\u548c\u5bf9\u5143\u7d20\u7684\u64cd\u4f5c\u7edf\u4e00\u5230\u5355\u4e2a\u64cd\u4f5c\u4e2d\u3002\u5f53\u7136\u5bf9\u4e8e\u96c6\u5408\u64cd\u4f5c\u6765\u8bb2\uff0c\u5176\u4e2d\u7684\u5355\u4e2a\u64cd\u4f5c\u53ef\u80fd\u6d89\u53ca\u5230\u5bf9\u591a\u79cd\u60c5\u51b5\u7684\u5904\u7406\uff0c\u8fd9\u79cd\u60c5\u51b5\u5012\u662f\u5f88\u597d\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u53c2\u89c1Erlang\u7684lists\u6a21\u5757\u3002"),(0,n.kt)("h3",{id:"273-\u6570\u636e\u9a71\u52a8"},"2.7.3 \u6570\u636e\u9a71\u52a8"),(0,n.kt)("h3",{id:"274-ecs"},"2.7.4 ECS"),(0,n.kt)("h3",{id:"275-\u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"},"2.7.5 \u5305\u53ca\u4f9d\u8d56\u7ba1\u7406"),(0,n.kt)("p",null,"\u5305\u7ba1\u7406\u7684\u673a\u5236\u4e3b\u8981\u662f\u907f\u514d\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u89e6\u78b0\u548c\u914d\u7f6e\u522b\u4eba\u7684\u6e90\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4f20\u7edf\u7684\u5305\u7ba1\u7406\u601d\u60f3\u4e0d\u540c\uff0cReality World\u7684\u4e3b\u8981\u521b\u65b0\u5728\u4e8e\u4e0d\u9700\u8981\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u914d\u7f6e\u7248\u672c\u53f7\u4e4b\u7c7b\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e0d\u7ba1\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u7528\u6237\u6765\u8bb2\uff0c\u6574\u4e2a\u6d41\u7a0b\u548c\u601d\u8def\u90fd\u7b80\u5316\u4e86\u5f88\u591a\u3002"),(0,n.kt)("h3",{id:"276-\u52a8\u6001\u89e3\u91ca"},"2.7.6 \u52a8\u6001\u89e3\u91ca"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u5f88\u591a\u4e8b\u60c5\u90fd\u5728\u5b9e\u65f6\u53d8\u5316\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u7f16\u8bd1\u578b\u5e73\u53f0\u80af\u5b9a\u4e0d\u518d\u5408\u9002\u3002\u52a8\u6001\u89e3\u6790\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\uff0c\u53ea\u662f\u8981\u505a\u5230\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c40\u90e8\u89e3\u6790\uff0c\u6bcf\u4e2a\u5c40\u90e8\u7ec4\u4ef6\u53ef\u4ee5\u5355\u72ec\u89e3\u91ca\uff0c\u800c\u4e0d\u9700\u8981\u6539\u4e86\u4e00\u4e2a\u811a\u672c\u9700\u8981\u5176\u4ed6\u4eba\u90fd\u91cd\u65b0\u89e3\u91ca\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u91ca\u6548\u7387\u8981\u8db3\u591f\u9ad8")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u5728\u53d1\u5e03\u7684\u65f6\u5019\u5c31\u7f16\u8bd1\u597d\u4e86\uff0c\u540e\u7eed\u5bf9\u7ec4\u4ef6\u7684\u4f7f\u7528\u90fd\u4e0d\u4f1a\u91cd\u65b0\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u7f16\u8bd1\u3002\u5f53\u7136\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5e95\u5c42\u7684\u865a\u62df\u673a\u9700\u8981\u5c06\u7ec4\u4ef6\u9700\u8981\u7684\u6570\u636e\u5730\u5740\u8ba1\u7b97\u6b63\u786e\u5e76\u7ed9\u5230\u7ec4\u4ef6\u6e90\u4ee3\u7801\u3002\u8fd9\u79cd\u9700\u6c42\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\u662f\u4e0d\u592a\u53ef\u884c\u7684\uff0c\u4f46\u662f\u6709\u4e86Creation Table\u5c06\u6240\u6709\u6570\u636e\u8f6c\u6362\u4e3a\u6570\u7ec4\u7684\u5f62\u5f0f\u540e\uff0c\u7ec4\u4ef6\u4e2d\u7684\u6240\u6709\u5730\u5740\u90fd\u662f\u4e00\u4e2a\u76f8\u5bf9\u5730\u5740\u7684\u504f\u79fb\uff0c\u6240\u4ee5\u80fd\u591f\u7b80\u5316\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7684\u52a8\u6001\u4ee3\u7801\u6267\u884c\uff0c\u6574\u4e2a\u7f16\u8bd1\u7cfb\u7edf\u5fc5\u987b\u4ee5\u4e00\u4e2a\u7ec4\u4ef6\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u80fd\u8ddf\u5176\u4ed6\u7684\u4ee3\u7801\u6709\u4efb\u4f55\u5f62\u5f0f\u7684\u5173\u8054\u6216\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136\uff0c\u4f20\u7edf\u7684\u591a\u4e2a\u4ee3\u7801\u94fe\u63a5\u5728\u4e00\u8d77\u7684\u8fc7\u7a0b\u5f0f\u56e0\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u4f8b\u5982\u7f16\u8bd1\u5668\u4e3a\u4e86\u89e3\u91ca\u67d0\u4e2a\u7c7b\u578b\uff0c\u6216\u8005\u5c06\u53d8\u91cf\u6267\u884c\u67d0\u4e2a\u5185\u5b58\u5730\u5740\uff0c\u6216\u8005\u4e3a\u67d0\u4e2a\u5bf9\u8c61\u5206\u914d\u591a\u5927\u7684\u5185\u5b58\u6570\u636e\uff0c\u8fd9\u4e9b\u5bfc\u81f4\u9700\u8981\u4ea4\u53c9\u5173\u8054\u3002\u800c\u5728RealityIS\u4e2d\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u4e4b\u95f4\u662f\u65e0\u5173\u8054\u7684\uff0c\u81f3\u5c11\u7ec4\u4ef6\u4e0d\u9700\u8981\u77e5\u9053\u5176\u4ed6\u7ec4\u4ef6\u7684\u4efb\u4f55\u4fe1\u606f\uff0c\u800c\u5373\u4f7f\u7b80\u6d01\u7684\u5173\u7cfb\u4e5f\u662f\u7531\u865a\u62df\u673a\u6765\u51b3\u5b9a\u7684\uff0c\u6240\u4ee5\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u5bf9\u6bcf\u4e2a\u7ec4\u4ef6\u6267\u884c\u72ec\u7acb\u7684\u7f16\u8bd1\u5c31\u8db3\u591f\u4e86\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u662f\u5728Runtime\u7684\u65f6\u5019\uff0c\u6839\u636e\u7528\u6237\u5b9e\u4f53\u914d\u7f6e\u5b9e\u65f6\u52a0\u8f7d\u7f16\u8bd1\u597d\u7684\u7ec4\u4ef6\u673a\u5668\u7801\u6216\u8005\u5b57\u8282\u7801\uff0c\u7136\u540e\u6839\u636e\u914d\u7f6e\u8fdb\u884c\u5b9e\u65f6\u6570\u636e\u5206\u914d\uff0c\u5e76\u5c06\u5b9e\u65f6\u7684\u6570\u636e\u5730\u5740\u4f20\u9012\u7ed9\u7ec4\u4ef6\u6307\u4ee4\u8fdb\u884c\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u52a8\u6001\u5206\u914d\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u5e03\u4f1a\u5f71\u54cd\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u4f46\u8fd9\u6837\u7684\u65f6\u673a\u53ea\u53d1\u751f\u5728\u7b2c\u4e00\u6b21\u52a0\u8f7d\u7a0b\u5e8f\uff0c\u4ee5\u53ca\u7528\u6237\u5bf9\u5b9e\u4f53\u7684\u7ec4\u4ef6\u8fdb\u884c\u4fee\u6539\u7684\u65f6\u5019\uff0c\u56e0\u6b64\u603b\u4f53\u4e0a\u4e0d\u4f1a\u5bf9\u8fd0\u884c\u65f6\u6027\u80fd\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u89e3\u91ca\u7684\u6548\u7387\u6bd4\u8f83\u4f4e\uff0c\u56e0\u6b64\u53c8\u4e0d\u80fd\u5c06\u6240\u6709\u7684\u903b\u8f91\u548c\u6570\u636e\u90fd\u4f7f\u7528\u52a8\u6001\u811a\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u90a3\u6837\u6574\u4e2a\u7cfb\u7edf\u7684\u6548\u7387\u5c06\u4f1a\u975e\u5e38\u4f4e\u3002\u7406\u60f3\u7684\u72b6\u6001\u662f\u80fd\u591f\u7ed3\u5408\u811a\u672c\u8bed\u8a00\u7684\u7075\u6d3b\u6027\u4e0e\u539f\u751f\u7cfb\u7edf\u8bed\u8a00\u7684\u9ad8\u6027\u80fd\uff0c\u7136\u540e\u4e00\u822c\u7684\u8bed\u8a00\u673a\u5236\u5374\u5f88\u96be\u505a\u5230\u8fd9\u6837\uff0c\u56e0\u4e3a\u6570\u636e\u8ddf\u7a0b\u5e8f\u903b\u8f91\u901a\u5e38\u662f\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5b83\u901a\u5e38\u90fd\u662f\u6709\u4e00\u53f0\u673a\u5668\u540c\u65f6\u6267\u884c\u6570\u636e\u7684\u5206\u914d\u548c\u903b\u8f91\u7684\u89e3\u91ca\u3002\u6bd4\u5982\u73b0\u5728\u7684\u811a\u672c\u8bed\u8a00\uff0c\u5b83\u90fd\u5305\u542b\u81ea\u5df1\u72ec\u7acb\u7684\u865a\u62df\u673a\uff0c\u4f7f\u5f97\u811a\u672c\u4e2d\u7684\u4e00\u4e9b\u90fd\u662f\u7531\u8be5\u865a\u62df\u673a\u7ba1\u7406\u7684\u3002\u865a\u62df\u673a\u672c\u8eab\u5c31\u662f\u4e00\u53f0\u80fd\u591f\u6267\u884c\u901a\u7528\u8ba1\u7b97\u7684\u673a\u5668\u3002\u5373\u4f7f\u811a\u672c\u8bed\u8a00\u4e5f\u80fd\u591f\u8ddf\u81ea\u5b9a\u4e49\u7684\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u4ea4\u4e92\uff0c\u6574\u4e2a\u4ea4\u4e92\u7684\u8fc7\u7a0b\u5374\u662f\u975e\u5e38\u590d\u6742\uff0c\u6bd4\u5982\u8fd9\u79cd\u590d\u6742\u7684\u8fc7\u7a0b\u80af\u5b9a\u4e0d\u9002\u5408\u666e\u901a\u7684\u7528\u6237\u53bb\u914d\u7f6e\uff0c\u800c\u4e14\u4ed6\u4e5f\u8981\u6c42\u66b4\u9732\u4e00\u4e9b\u5e95\u5c42\u7684\u63a5\u53e3\u7ed9\u5e73\u53f0\uff0c\u8fd9\u6837\u5c06\u4f1a\u5e26\u6765\u5b89\u5168\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u5c06\u7ec4\u4ef6\u7684\u6570\u636e\u5185\u5b58\u5206\u914d\u4ea4\u7ed9\u865a\u62df\u673a\u6765\u505a\uff0c\u80fd\u591f\u7b80\u5316\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u8ba9\u5bbf\u4e3b\u5c42\u6765\u7ba1\u7406\u548c\u52a0\u8f7d\u6570\u636e\uff0c\u5c06\u5927\u5927\u63d0\u5347\u7cfb\u7edf\u7684\u6027\u80fd\u3002\u8fd9\u6837\u811a\u672c\u8bed\u8a00\u7701\u6389\u5f88\u591a\u4e8b\u60c5\uff0c\u53ea\u4e13\u6ce8\u4e8e\u552f\u4e00\u9700\u8981\u4e13\u6ce8\u7684\u903b\u8f91\u8ba1\u7b97\u6307\u4ee4\u3002\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7528\u62c5\u5fc3\u590d\u6742\u6570\u636e\u7684\u5206\u914d\u548c\u5bfb\u5740"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u5783\u573e\u56de\u6536\u7ba1\u7406\u590d\u6742\u7684\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u7701\u6389\u6570\u636e\u5206\u914d\uff0c\u4ee5\u53ca\u66f4\u7b80\u5355\u7684\u7ec4\u4ef6\u5f00\u53d1\u89c4\u5219\uff08\u4f8b\u5982\u4e0d\u9700\u8981\u5b9a\u4e49\u590d\u6742\u7684\u9762\u5411\u5bf9\u8c61\u673a\u5236\uff09\uff0c\u6574\u4e2a\u89e3\u91ca\u5668\u4e5f\u4f1a\u53d8\u5f97\u975e\u5e38\u7b80\u5355")),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6574\u4f53\u4e0a\u7c7b\u4f3cAOT\uff0c\u4f46\u662f\u5b83\u4e5f\u4e0d\u662f\u5168\u90e8AOT\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u636e\u7ec4\u7ec7\u90e8\u5206\u9700\u8981\u5728Runtime\u6267\u884c\uff0c\u8fd9\u6837\u4fdd\u8bc1\u65e2\u6709\u6bd4\u8f83\u597d\u7684\u52a8\u6001\u6027\uff0c\u53c8\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\u4fdd\u8bc1\u3002"),(0,n.kt)("h3",{id:"277-\u8d23\u6743\u8ba9\u6e21"},"2.7.7 \u8d23\u6743\u8ba9\u6e21"),(0,n.kt)("p",null,"\u5c06\u5f88\u591a\u539f\u672c\u9700\u8981\u7a0b\u5e8f\u5458\u7ba1\u7406\u7684\u4e8b\u60c5\u4ea4\u7ed9\u8fd0\u884c\u65f6\u7ba1\u7406\uff0c\u4f8b\u5982\u5bf9\u8c61\u7684\u67e5\u627e\u7b5b\u9009\uff0c\u8d4b\u503c\uff0c\u8fd0\u7528\uff0c\u5bf9\u8c61\u72b6\u6001\u7ba1\u7406\u7b49"),(0,n.kt)("h3",{id:"278-\u5e76\u53d1\u6d88\u606f\u961f\u5217"},"2.7.8 \u5e76\u53d1\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6700\u597d\u7684\u5e76\u53d1\u6a21\u578b\u5c31\u662fErlang\u7684\u72ec\u7acb\u8fdb\u7a0b\u5e76\u53d1\u65b9\u5f0f\uff0c\u4f46\u662f\u57fa\u4e8eECS\u7684\u6570\u636e\u7ba1\u7406\u4f1a\u8ba9\u8fd9\u4e2a\u4e8b\u60c5\u53ef\u4ee5\u505a\u7684\u66f4\u597d\u3002"),(0,n.kt)("h4",{id:"2781-\u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"},"2.7.8.1 \u6570\u636e\u672c\u8eab\u5c31\u662f\u6d88\u606f\u961f\u5217"),(0,n.kt)("p",null,"\u6309\u7167\u4f20\u7edf\u7684\u505a\u6cd5\u53ef\u80fd\u5c31\u662f\u9700\u8981\u5355\u72ec\u6784\u5efa\u4e00\u4e9b\u6d88\u606f\u961f\u5217\uff0c\u8ba9\u540e\u901a\u8fc7\u6d88\u606f\u961f\u5217\u9a71\u52a8\u66f4\u65b0\uff0c\u6216\u8005\u8bf4\u5c31\u662f\u5355\u7eaf\u7684\u4f46\u6d88\u606f\u76f4\u63a5\u901a\u77e5\u3002"),(0,n.kt)("p",null,"\u5728ECS\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5b9e\u4f53\u5bf9\u8c61\u7684\u6570\u636e\u5217\u8868\u672c\u8eab\u5c31\u5f53\u505a\u4e00\u4e2a\u6d88\u606f\u961f\u5217\uff0c\u5b83\u6ee1\u8db3\u6d88\u606f\u961f\u5217\u7684\u57fa\u672c\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5217\u8868\u90fd\u5904\u7406\u540c\u7c7b\u578b\u7684\u6d88\u606f\uff0c\u56e0\u6b64\u80fd\u591f\u5b9a\u4f4d\u63a5\u53d7\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u672c\u8eab\u5c31\u643a\u5e26\u4e86\u901a\u4fe1\u7684\u6d88\u606f\u6570\u636e")),(0,n.kt)("p",null,"\u518d\u52a0\u4e0a\u4e00\u4e9b\u5bf9\u5217\u8868\u7684filter\u7b49\u64cd\u4f5c\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e00\u4e9b\u5197\u4f59\u7684\u6570\u636e\uff0c\u6bd4\u5982\u90a3\u4e9b\u6ca1\u6709\u4efb\u4f55\u53d8\u66f4\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3afilter\u672c\u8eab\u7684\u4e00\u4e2a\u9009\u9879\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6f5c\u5728\u7684\u95ee\u9898\u662f\u6027\u80fd\u95ee\u9898\uff0c\u5373\u5217\u8868\u6570\u636e\u4e0d\u53ef\u4ee5\u4fee\u6539\uff0c\u6216\u8005\u91cd\u65b0\u7ec4\u7ec7\u7684\u4ee3\u4ef7\u5f88\u9ad8\u3002\u4f46\u662f\u4e5f\u6709\u4e24\u79cd\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8003\u8651\u5230\u6570\u636e\u662f\u53ea\u8bfb\u7684\uff0c\u5176\u5b9e\u4e5f\u53ef\u4ee5\u628a\u8fd9\u90e8\u5206\u91cd\u65b0\u590d\u5236\u4e00\u4efd\u91cd\u65b0\u7ec4\u7ec7\uff0c\u4f20\u9012\u7ed9\u4f7f\u7528\u8005\uff0c\u8fd9\u6837\u53ef\u4ee5\u63d0\u5347\u5e76\u884c\u8ba1\u7b97\u6027\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u6216\u8005\u5e72\u8106\u4e0d\u7ba1\u7406\u95ee\u9898\u4e5f\u4e0d\u5927")),(0,n.kt)("h4",{id:"2782-\u5e76\u884c\u4f38\u7f29\u6027"},"2.7.8.2 \u5e76\u884c\u4f38\u7f29\u6027"),(0,n.kt)("p",null,"Erlang\u5e76\u4e0d\u64c5\u957f\u505aGPU\u7f16\u7a0b\uff0c\u56e0\u4e3a\u8fd9\u7c7b\u95ee\u9898\u901a\u5e38\u90fd\u9700\u8981\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u6570\u503c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"Erlang\u4e2d\u7684\u6613\u5e76\u884c\u95ee\u9898\u6240\u5904\u7684\u5c42\u7ea7\u8981\u66f4\u9ad8\u4e00\u4e9b\uff0c\u4e00\u822c\u6765\u8bb2\uff0c\u5b83\u4eec\u90fd\u662f\u50cf\u804a\u5929\u670d\u52a1\u5668\uff0c\u7535\u8bdd\u4ea4\u6362\u673a\uff0cweb\u670d\u52a1\u5668\uff0c\u6d88\u606f\u961f\u5217\uff0cweb\u722c\u866b\u4e4b\u7c7b\u7684\u5e94\u7528\uff0c\u53ef\u4ee5 \u628a\u8fd9\u7c7b\u5e94\u7528\u4e2d\u5de5\u4f5c\u7684\u6267\u884c\u4f53\u8868\u793a\u6210\u4e00\u7ec4\u76f8\u4e92\u72ec\u7acb\u7684\u903b\u8f91\u5b9e\u4f53\u3002"),(0,n.kt)("p",null,"Erlang\u4ec5\u5173\u6ce8\u51fd\u6570\u534a\u8eab\uff0c\u4e0d\u5173\u6ce8\u6570\u636e\u7ba1\u7406\uff0c\u56e0\u6b64\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u7684\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u50cfOOP\u4e00\u6837\uff0c\u5206\u5e03\u5728\u5206\u6563\u7684\u533a\u57df\uff0c\u4e0d\u5177\u5907\u6570\u636e\u5c40\u90e8\u6027\u3002"),(0,n.kt)("p",null,"RealityIS\u80fd\u591f\u7cbe\u5fc3\u5730\u5bf9\u540c\u7c7b\u578b\u6570\u636e\u8fdb\u884c\u66f4\u597d\u5730\u7ba1\u7406\uff0c\u4ee5\u5b9e\u73b0\u66f4\u597d\u7684\u5e76\u884c\u8ba1\u7b97\u3002\u4ece\u8fd9\u4e2a\u5c42\u9762\u770b\uff0c\u4ed6\u6709\u70b9\u7c7b\u4f3c\u4e8e\u628aErlang\u4e2d\u90a3\u4e9b\u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u90fd\u4e32\u8054\u8d77\u6765\uff0c\u653e\u5728\u5176\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u7531\u4e8eErlang\u5e76\u6ca1\u6709\u7ba1\u7406\u6570\u636e\uff0c\u6240\u6709\u8981\u60f3\u5728Erlang\u4e2d\u7ba1\u7406\u5e76\u884c\u5176\u5b9e\u5f88\u96be\uff0c\u8bed\u8a00\u4e2d\u5e76\u6ca1\u6709\u8fd9\u4e00\u5c42\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cErlang\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0e\u4e4b\u76f8\u5173\u7684\u7f3a\u70b9\u662f\uff0c\u4e0d\u80fd\u4fdd\u8bc1\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u987a\u5e8f\u3002\u4f60\u53ea\u80fd\u53d1\u8d77\u8fdb\u7a0b\uff0c\u751a\u81f3\u4e0d\u80fd\u53d6\u56de\u8fd4\u56de\u503c\uff0c\u4e5f\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u6216\u8005\u6709\u6ca1\u6709\u6267\u884c\u5b8c\u6bd5\u3002"),(0,n.kt)("p",null,"\u9664\u4e86\u4e0a\u8ff0\u7684\u56e0\u7d20\uff0c\u5728RealityIS\u4e2d\uff0c\u8fd8\u53ef\u4ee5\u5b9e\u73b0\u5927\u89c4\u6a21\u5e76\u884c\u8ba1\u7b97\u3002\u5728\u4f20\u7edf\u7684\u7aef\u4fa7\u6216\u8005\u5355\u673a\u7684\u6e38\u620f\u8fd0\u884c\u65f6\uff0c\u540c\u4e00\u7c7b\u578b\u7684\u5b9e\u4f53\u5bf9\u8c61\u901a\u5e38\u662f\u5c11\u6570\uff0c\u6bd4\u5982\u53ef\u80fd\u5c31\u662f\u51e0\u4e2a\uff0c\u751a\u81f3\u5f88\u5c11\u8d85\u8fc7\u51e0\u5341\u4e2a\uff0c\u9664\u975e\u8ddf\u56fe\u5f62\u6e32\u67d3\u76f8\u5173\u7684\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u6211\u4eec\u628a\u8fd9\u4e9b\u8ba1\u7b97\u653e\u5230\u4e91\u7aef\uff0c\u591a\u4e2a\u7528\u6237\u5c31\u53ef\u80fd\u6c47\u96c6\u66f4\u5927\u7684\u540c\u7c7b\u5bf9\u8c61\uff0c\u8fd9\u79cd\u6570\u91cf\u4e5f\u8bb8\u5927\u5230\u51e0\u5343\u4e0a\u4e07\u800c\u53ef\u4ee5 \u5b8c\u5168\u8f6c\u79fb\u5230GPU\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u3002\u8fd9\u80fd\u591f\u66f4\u5145\u5206\u7684\u5229\u7528\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u95ee\u9898\u662f\uff0c\u6bcf\u4e2a \u540c\u7c7b\u578b\u7684\u8ba1\u7b97\u7ed3\u679c\u6216\u6d88\u606f\u53ef\u80fd\u8981\u5206\u53d1\u5230\u6570\u5343\u4e2a\u5ba2\u6237\u7aef\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4e5f\u8bb8\u53ef\u4ee5\u901a\u8fc7\u4f20\u7edf\u7684\u4e00\u4e9b\u670d\u52a1\u5668\u76f8\u5173\u6280\u672f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"279-let-is-crash"},"2.7.9 Let is crash"),(0,n.kt)("p",null,"\u9519\u8bef\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u56e0\u6b64\u627e\u51fa\u597d\u7684\u5904\u7406\u9519\u8bef\u548c\u95ee\u9898\u7684\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u4f01\u56fe\u9632\u6b62\u9519\u8bef\u7684\u51fa\u73b0\uff0c\u8fd9\u662fErlang\u7684\u54f2\u5b66\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u65b9\u5f0f\u6216\u8005\u539f\u5219\uff1a\u5982\u679c\u7cfb\u7edf\u4e2d\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u9519\u8bef\uff0c\u9020\u6210\u4e86\u6570\u636e\u7834\u574f\uff0c\u90a3\u4e48\u8fd9\u4e2a\u90e8\u5206\u5e94\u8be5\u5c3d\u5feb\u6b7b\u5fd9\u4ee5\u9632\u6b62\u9519\u8bef\u548c\u574f\u6570\u636e\u4f20\u64ad\u5230\u7cfb\u7edf\u7684\u5269\u4f59\u90e8\u5206\u3002"),(0,n.kt)("h4",{id:"2791-\u5bb9\u9519\u673a\u5236"},"2.7.9.1 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("p",null,"\u4e00\u79cd\u66f4\u5b89\u5168\u7684\u89e3\u51b3\u65b9\u6cd5\u662f\uff0c\u786e\u4fdd\u8ba9\u5d29\u6e83\u548c\u6b63\u5e38\u5173\u95ed\u5177\u6709\u540c\u6837\u7684\u6548\u679c\u3002\u8fd9\u79cd\u6548\u679c\u53ef\u4ee5\u901a\u8fc7\u50cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u5171\u4eab\uff0c\u7cfb\u7edf\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u5b8c\u5168\u9694\u79bb"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u8d4b\u503c\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u9694\u79bb\u5355\u4e00\u8fdb\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u4f7f\u7528\u9501\uff0c\u5982\u679c\u53d1\u751f\u5d29\u6e83\u65f6\u6709\u90e8\u5206\u6570\u636e\u662f\u88ab\u52a0\u9501\u7684\uff0c\u90a3\u4e48\u4f1a\u5bfc\u81f4\u5176\u4ed6\u8fdb\u7a0b\u65e0\u6cd5\u8bbf\u95ee\u8fd9\u90e8\u5206\u6570\u636e\uff0c\u5bfc\u81f4\u8fd9\u90e8\u5206\u6570\u636e\u72b6\u6001\u4e0d\u4e00\u81f4")),(0,n.kt)("p",null,"\u5728Erlang\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u574f\u4e86\uff0c\u4f1a\u53d1\u9001\u6700\u540e\u4e00\u6761\u6d88\u606f\u51fa\u53bb\uff0c\u5e76\u4e14\u7cfb\u7edf\u4f1a\u4fdd\u8bc1\u8fd9\u6761\u6d88\u606f\u88ab\u53d1\u51fa\u53bb\uff0c\u53ca\u8fd9\u4e2a\u90e8\u5206\u9ed8\u8ba4\u8ba4\u4e3a\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5185\u90e8\u7684\u4e0d\u540c\u5730\u65b9\u53ef\u80fd\u5bfc\u81f4\u51fa\u9519\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u4e0d\u662f\u50cfErlang\u4e00\u6837\u72ec\u7acb\u8fdb\u7a0b\u6267\u884c\uff0c\u800c\u662f\u4f1a\u53bb\u4fee\u6539\u4e00\u4e9b\u5171\u4eab\u6570\u636e\uff0c\u56e0\u6b64\u5982\u679c\u8fd9\u79cd\u4fee\u6539\u4e4b\u540e\u518d\u53d1\u751f\u5d29\u6e83\uff0c\u5c31\u4f1a\u5bfc\u81f4\u5176\u4ed6\u6a21\u5757\u7684\u72b6\u6001\u53ef\u80fd\u4e0d\u662f\u9884\u671f\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u9632\u6b62\u76f8\u5173\u7684\u4e0d\u4e00\u81f4\u95ee\u9898\uff0c\u53ef\u4ee5\u4ece\u4e00\u4e0b\u65b9\u9762\u8fbe\u5230\u7c7b\u4f3cErlang\u7684\u6548\u679c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u5141\u8bb8\u4fee\u6539\u4e00\u4e2a\u5171\u4eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u540c\u65f6\u5bf9\u591a\u4e2a\u5c5e\u6027\u8fdb\u884c\u4fee\u6539\u3002\u56e0\u4e3a\u672c\u8eab\u6211\u4eec\u7684\u5c5e\u6027\u7ecf\u8fc7\u4e86\u6807\u51c6\u7684\u7cbe\u5fc3\u8bbe\u8ba1\uff0c\u6bcf\u4e2a\u5c5e\u6027\u90fd\u662f\u4ee3\u8868\u5177\u6709\u6bd4\u8f83\u72ec\u7acb\u7684\u610f\u4e49\uff0c\u56e0\u6b64\u4e0d\u540c\u5c5e\u6027\u7684\u4fee\u6539\u5e94\u8be5\u4f7f\u7528\u4e0d\u540c\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5fc5\u987b\u786e\u4fdd\u5728\u6574\u4e2a\u7ec4\u4ef6\u6ca1\u6709\u9519\u8bef\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u540e\u624d\u4f1a\u5b89\u5168\u5730\u4fee\u6539\u5c5e\u6027\uff0c\u8fd9\u4e2a\u5c5e\u6027\u4fee\u6539\u5c31\u50cfErlang\u628a\u6d88\u606f\u53d1\u51fa\u53bb\u4e00\u6837\uff0c\u672c\u8eab\u4e0d\u4f1a\u51fa\u9519\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u4e0a\u8ff0\u7684\u5c5e\u6027\uff0cRealityIS\u4e2d\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u5c31\u50cf\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e00\u6837\uff0c\u5bf9\u5176\u4ed6\u72b6\u6001\u6570\u636e\u4e0d\u4f1a\u9020\u6210\u4efb\u4f55\u7834\u574f\uff0c\u56e0\u6b64\u53ef\u4ee5\u968f\u610f\u4e22\u5f03\u6389\u8be5\u7ec4\u4ef6\u6267\u884c\u7684\u90e8\u5206\u800c\u4e0d\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u50cfReduce\u7d2f\u52a0\u6570\u7684\u6982\u5ff5\u4e5f\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u5904\u7406Reduce\uff0c\u5219\u5b83\u4e0d\u80fd\u5904\u7406Map\uff0c\u56e0\u4e3a\u4e24\u4e2a\u903b\u8f91\u53ef\u4ee5\u8fdb\u4e00\u6b65\u62c6\u5206\uff0c\u5426\u5219\u540c\u4e00\u4e2a\u7ec4\u4ef6\u4e0d\u597d\u7ba1\u7406\u3002")),(0,n.kt)("h4",{id:"2792-\u5e76\u53d1\u8c03\u5ea6"},"2.7.9.2 \u5e76\u53d1\u8c03\u5ea6"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u4e86\u57fa\u4e8e\u5f02\u6b65\u6d88\u606f\u4f20\u9012\u7684\u8f7b\u91cf\u8fdb\u7a0b\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u4e0d\u80fd\u4f9d\u9760\u64cd\u4f5c\u7cfb\u7edf\u6765\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u800c\u662f\u901a\u8fc7\u5728VM\u4e2d\u5b9e\u73b0\u8fdb\u7a0b\uff0c\u4f7f\u53ef\u4ee5\u5bf9\u4f18\u5316\u548c\u53ef\u9760\u6027\u8fdb\u884c\u5b8c\u5168\u638c\u63a7\u3002\u6bd4\u5982\uff0c\u5728Erlang\u4e2d\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5927\u6982\u5360\u7528300\u4e2a\u5b57\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u521b\u5efa\u65f6\u95f4\u53ea\u6709\u51e0\u5fae\u79d2\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7ba1\u7406\u7a0b\u5e8f\u6240\u521b\u5efa\u7684\u6240\u6709\u8fdb\u7a0b\uff0cVM\u4f1a\u4e3a\u6bcf\u4e2a\u6838\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\u6765\u5145\u5f53\u4e00\u4e2a\u8c03\u5ea6\u5668\uff08scheduler\uff09\u3002\u6bcf\u4e2a\u8c03\u5ea6\u5668\u6709\u4e00\u4e2a\u8fd0\u884c\u961f\u5217\uff08run queue\uff09\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2aErlang\u8fdb\u7a0b\u5217\u8868\uff0c\u4f1a\u7ed9\u5176\u4e2d\u7684\u6bcf\u4e2a\u8fdb\u7a0b\u5206\u914d\u4e00\u5c0f\u6bb5\u8fd0\u884c\u65f6\u95f4\u7247\u3002\u5f53\u67d0\u4e2a\u8c03\u5ea6\u5668\u7684\u8fd0\u884c\u961f\u5217\u4e2d\u4efb\u52a1\u8fc7\u591a\u65f6\uff0c\u4f1a\u628a\u4e00\u90e8\u5206\u4efb\u52a1\u8fc1\u79fb\u5230\u5176\u4ed6\u961f\u5217\u4e2d\u3002\u8fd9\u610f\u5473\u7740\uff0c\u6bcf\u4e2aErlangVM\u90fd\u4f1a\u8fdb\u884c\u8d1f\u8f7d\u64cd\u4f5c\uff0c\u7a0b\u5e8f\u5458\u65e0\u9700\u5173\u5fc3\u3002VM\u8fd8\u4f1a\u8fdb\u884c\u5176\u4ed6\u4f18\u5316\u5de5\u4f5c\uff0c\u4f8b\u5982\uff0c\u5bf9\u53d1\u5411\u8fc7\u8f7d\u8fdb\u7a0b\u7684\u6d88\u606f\u8fdb\u884c\u9650\u901f\uff0c\u4ee5\u8c03\u8282\u548c\u5747\u8861\u8d1f\u8f7d\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddfRealityIS\u7684\u8bbe\u8ba1\u7406\u5ff5\u4e00\u6837\uff0c\u8c03\u5ea6\u5668\u662f\u6bcf\u4e2a\u6838\u7684\u65f6\u949f\u63a7\u5236\uff0c\u5c31\u662f\u6e38\u620f\u4e2d\u7684update\u5faa\u73af\uff0c\u5f53\u7136\u8fd9\u91cc\u5904\u7406\u65f6\u95f4\u5206\u914d\u672c\u8eab\uff0c\u8fd8\u9700\u8981\u505a\u4e00\u4e9b\u5728\u6838\u5185\u8fdb\u884c\u8c03\u5ea6\u548c\u6838\u4e4b\u95f4\u901a\u4fe1\u7684\u4e8b\u60c5\u3002\u800c\u6d88\u606f\u5217\u8868\u5b9e\u9645\u4e0a\u662f\u643a\u5e26\u8005\u51fd\u6570\u4e4b\u95f4\u7684\u53c2\u6570\uff0c\u800c\u5728RealityIS\u4e2d\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5217\u8868\u7684\u6570\u636e\uff0c\u5b9e\u9645\u4e0a\u4e5f\u5c31\u662f\u7ec4\u4ef6\u4f1a\u4f7f\u7528\u5230\u7684\u51fd\u6570\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u53ea\u4e0d\u8fc7\u76f8\u5bf9\u4e8eErlang\u7684\u5e76\u53d1\u6027\uff0cRealityIS\u8fd8\u540c\u65f6\u5b9e\u73b0\u4e86\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2710-\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"},"2.7.10 \u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f"),(0,n.kt)("p",null,"OOP\u901a\u5e38\u901a\u8fc7\u590d\u6742\u7684\u7ee7\u627f\u673a\u5236\u6765\u5b9a\u4e49\u4e00\u4e2a\u5305\u542b\u7279\u5b9a\u529f\u80fd\u96c6\u5408\u7684\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u529f\u80fd\u90fd\u5df2\u51fd\u6570\u7684\u5f62\u5f0f\u88ab\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u4e2d\u3002"),(0,n.kt)("p",null,"FP\u5219\u5f3a\u8c03\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f\uff0c\u5176\u4e2d\u7684\u903b\u8f91\u4e3b\u8981\u662f\u56e0\u4e3aFP\u4e2d\u7684\u51fd\u6570\u901a\u5e38\u662f\u201c\u65e0\u72b6\u6001\u7684\u201d\uff0c\u72ec\u7acb\u7684\uff0c\u5bf9\u5e94\u4e8e\u4e00\u4e2a\u7279\u5b9a\u7684\u8f93\u5165\uff0c\u5b83\u7684\u8f93\u51fa\u603b\u662f\u4fdd\u6301\u4e0d\u53d8\uff0c\u56e0\u4e3a\u4e0d\u6d89\u53ca\u5230\u4efb\u4f55\u5185\u90e8\u72b6\u6001\u7684\u4fee\u6539\uff0c\u6240\u4ee5\u540c\u6837\u7684\u8f93\u5165\u4e0d\u4f1a\u53d7\u5230\u4efb\u4f55\u5f71\u54cd\u3002\u56e0\u6b64\uff0c\u8fd9\u6837\u7684\u76f8\u4e92\u72ec\u7acb\u7684\u7eaf\u51fd\u6570\u662f\u53ef\u4ee5\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4e0d\u540c\u51fd\u6570\u7ec4\u5408\u7684\u4e00\u4e2a\u66f4\u590d\u6742\u7684\u51fd\u6570\u5c31\u6784\u6210\u4e00\u4e2a\u7279\u5b9a\u529f\u80fd\u7684\u590d\u6742\u51fd\u6570\u6216\u8005\u590d\u6742\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u63cf\u8ff0\u53ef\u4ee5\u770b\u51fa\uff0c\u6240\u8c13\u7684\u7ec4\u5408\u5176\u5b9e\u5e76\u6ca1\u6709\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5e76\u4e0d\u50cfECS\u4e2d\u90a3\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e00\u6837\uff0c\u4ed6\u5176\u5b9e\u9690\u542b\u7740\u4e00\u5b9a\u7684\u7f16\u7a0b\u903b\u8f91\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u51fd\u6570\u7684\u7ec4\u5408\u662f\u901a\u8fc7\u5c06\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u5408\uff0c\u5b83\u66f4\u50cf\u662f\u4e00\u4e9b\u51fd\u6570\u8fde\u8f7d\u4e00\u8d77\uff0c\u800c\u6bcf\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\uff0c\u50cf\u63d2\u69fd\u4e00\u6837\u6263\u5728\u4e00\u8d77\uff0c\u4f46\u662f\u8fd9\u4e9b\u5361\u6263\u672c\u8eab\u662f\u6709\u4e00\u5b9a\u903b\u8f91\u7684\uff0c\u4f60\u9700\u8981\u77e5\u9053\u5c06\u54ea\u4e2a\u51fd\u6570\u8fde\u5728\u53e6\u5916\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u4e0a\uff0c\u4e5f\u5373\u662f\u610f\u5473\u7740\u4f60\u5176\u5b9e\u8981\u660e\u767d\u6240\u6709\u8fd9\u4e9b\u51fd\u6570\u8fde\u5728\u4e00\u8d77\u7684\u6267\u884c\u903b\u8f91\u548c\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e00\u822c\u8fd9\u79cd\u7ec4\u5408\u7684\u5c42\u6b21\u4e0d\u4f1a\u5f88\u6df1\uff0c\u4f8b\u5982\u901a\u5e38\u90fd\u662f\u4e00\u4e2a\u201c\u4e1a\u52a1\u51fd\u6570\u201d+\u4e00\u4e2a\u9ad8\u9636\u51fd\u6570\u5373\u53ef\uff0c\u4f46\u7406\u8bba\u4e0a\u53ef\u4ee5\u6839\u636e\u62bd\u8c61\u5c42\u7ea7\u4ea7\u751f\u90a3\u79cd\u591a\u5c42\u7684\u590d\u6742\u51fd\u6570\u5d4c\u5957\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5982\u679c\u67d0\u4e2a\u51fd\u6570\u7684\u4fee\u6539\u6d89\u53ca\u5230\u53c2\u6570\u53ca\u8fd4\u56de\u503c\u7c7b\u578b\u8fd9\u79cd\u7ed3\u6784\u6027\u7684\u4fee\u6539\uff0c\u5176\u5b9e\u201c\u7ec4\u5408\u201d\u672c\u8eab\u8fd8\u662f\u9700\u8981\u4fee\u6539\u7684\uff0c\u53ea\u662f\u76f8\u5bf9\u4e8eOOP\u800c\u8a00\uff0c\u5b83\u53ef\u80fd\u53ea\u4fee\u6539\u76f8\u5173\u7684\u51fd\u6570\u8c03\u7528\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u91cd\u65b0\u53bb\u4fee\u6539\u7ee7\u627f\u7ed3\u6784\u6216\u8005\u4fee\u6539\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u800c\u8a00\uff0c\u7ec4\u4ef6\u672c\u8eab\u5145\u5f53\u4e86\u4e1a\u52a1\u51fd\u6570\uff0c\u9ad8\u9636\u51fd\u6570\u88ab\u9690\u85cf\u5728\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u8c03\u5ea6\u4e2d\uff0c\u56e0\u6b64\u8fd9\u91cc\u4e0d\u5b58\u5728\u90a3\u79cd\u51fd\u6570\u8c03\u7528\u51fd\u6570\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u56e0\u6b64\u4e5f\u5373\u610f\u5473\u7740\u6211\u4eec\u65e0\u6cd5\u5b9e\u73b0\u591a\u5c42\u51fd\u6570\u5d4c\u5957\uff0c\u56e0\u4e3a\u603b\u5171\u5c31\u53ea\u6709\u4e24\u5c42\uff1a\u5e73\u53f0\u4e00\u5c42\uff08\u9ad8\u9636\u51fd\u6570\uff09\uff0c\u7ec4\u4ef6\u4e00\u5c42\u3002"),(0,n.kt)("h4",{id:"27101-\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"},"2.7.10.1 \u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("p",null,"\u5f53\u7136\u7ec4\u4ef6\u4e4b\u95f4\u662f\u5b58\u5728\u5173\u7cfb\u7684\uff0c\u8fd9\u79cd\u5173\u7cfb\u4f53\u73b0\u5728\u524d\u540e\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4e32\u8054\uff1a\u524d\u8005\u5c06\u8ba1\u7b97\u7ed3\u679c\u5b58\u5728\u5728\u4e00\u4e2a\u53d8\u91cf\u4e2d\u4f5c\u4e3a\u540e\u4e00\u4e2a\u7ec4\u4ef6\u7684\u53c2\u6570\uff0c\u8fd9\u79cd\u5173\u7cfb\u8ddf\u591a\u4e2a\u51fd\u6570\u5d4c\u5957\u662f\u7c7b\u4f3c\u7684\uff1a\u4e00\u4e2a\u51fd\u6570\u88ab\u4f5c\u4e3a\u51fd\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u4e5f\u53ea\u662f\u5728\u90a3\u4e2a\u51fd\u6570\u4e2d\u53bb\u8ba1\u7b97\u4e00\u4e2a\u7279\u5b9a\u7684\u503c\uff0c\u8fd9\u4e2a\u51fd\u6570\u6700\u7ec8\u5b9e\u9645\u4f7f\u7528\u7684\u4e5f\u662f\u5b83\u8ba1\u7b97\u7684\u7ed3\u679c\uff0c\u81f3\u4e8e\u5b83\u52a8\u6001\u4f20\u7ed9\u5b83\u7684\u53c2\u6570\uff0c\u672c\u8eab\u5b58\u5728\u4e8eRealityIS\u7684\u5b9e\u4f53\u5bf9\u8c61\u6570\u636e\u4e0a\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\uff0c\u8ddfFP\u4e2d\u57fa\u4e8e\u51fd\u6570\u7684\u7ec4\u5408\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u867d\u7136\u7ec4\u4ef6\u4e4b\u4e2d\u770b\u8d77\u6765\u6709\u72b6\u6001\u53c2\u6570\uff0c\u4f46\u662f\u7ec4\u4ef6\u672c\u8eab\u7684\u5b9e\u73b0\u8ddfFP\u4e2d\u7684\u51fd\u6570\u662f\u4e00\u6837\u72ec\u7acb\u7684\uff0c\u8fd9\u4e9b\u53c2\u6570\u53ea\u662f\u7531\u4e1a\u52a1\u5c42\u4f20\u6765\u7684\u5b9e\u9645\u5904\u7406\u7684\u4e00\u4e2a\u6570\u636e\u800c\u5df2"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u5bf9\u4e8eFP\u800c\u8a00\uff0c\u4ed6\u5f88\u591a\u65f6\u5019\u4e5f\u9700\u8981\u53bb\u8bb0\u4f4f\u4e00\u4e9b\u72b6\u6001\uff0c\u7ec4\u4ef6\u7b80\u5316\u4e86\u8fd9\u79cd\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u7279\u522b\u7684\uff0c\u8fd9\u79cd\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u8981\u6c42\u7528\u6237\u7406\u89e3\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u8fd9\u79cd\u903b\u8f91\u5173\u7cfb\u8fd8\u5305\u62ec\u51fd\u6570\u7684\u7b7e\u540d\u53ca\u51fd\u6570\u7b49\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u6d41\u7a0b")),(0,n.kt)("p",null,"\u5f53\u7136\u7f3a\u70b9\u662f\uff0c\u8fd9\u6837\u5e73\u884c\u7684\u7ec4\u5408\u4e0d\u592a\u5bb9\u6613\u4ece\u5168\u5c40\u628a\u63e1\u6e05\u695a\uff0c\u800c\u4e14\u6709\u53ef\u80fd\u6f0f\u6389\u4e00\u4e9b\u4e1c\u897f\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u9700\u8981\u5728\u7ec4\u4ef6\u4e2d\u5b9a\u4e49\u597d\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fdb\u884c\u81ea\u52a8\u8f7d\u5165\u3002"),(0,n.kt)("h4",{id:"27102-machinations"},"2.7.10.2 Machinations"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u7531Machinations\u63cf\u8ff0\u3002"),(0,n.kt)("h3",{id:"2711-\u6a21\u5f0f\u5339\u914d"},"2.7.11 \u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u7684\u51e0\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u7ed1\u5b9a\uff0c\u7701\u7565\u53c2\u6570\u4f20\u9012\u7684\u8d4b\u503c\uff0c\u7ed1\u5b9a\u7b49\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u7ed3\u6784\u89e3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u7b80\u5316\u6761\u4ef6\u8bed\u53e5"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u8c03\u7528\u89e3\u8026")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u56e0\u7d20\u5728CreationScript\u4e2d\u672c\u8eab\u5c31\u4e0d\u662f\u95ee\u9898\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u51fd\u6570\u5f0f\u8bed\u8a00\u4e2d\u7684\u6a21\u5f0f\u5339\u914d\uff0c\u56e0\u4e3a\u5728\u7ec4\u4ef6\u4e2d\u5f00\u53d1\u8005\u90fd\u6ca1\u6709\u673a\u4f1a\u53bb\u6784\u5efa\u7ed3\u6784\u548c\u53d8\u91cf\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4f20\u7edf\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u8fd8\u662f\u9700\u8981\u63d0\u4f9b\u3002\u4f46\u4e0d\u7528\u50cfFP\u90a3\u6837\u6210\u4e3a\u8bed\u8a00\u7684\u6838\u5fc3\u529f\u80fd\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c"},"enum ShapeType {Retangle, Circle, Square};\nstruct Shape {\n enum ShapeType kind;\n union {\n struct {int width, height; } retangleData;\n struct {int radius; } circleData;\n struct {int side; } squareData;\n } shapeData;\n};\n\ndouble area(struct Shape* s){\n if(s->kind == Rectangle) {\n int width, ht;\n width = s->ShapeData.rectangleData.width;\n ht = s->ShapeData.rectangleData.height;\n return width * ht;\n }\n else if(s->kind == Circle){\n ...\n }\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5C\u4ee3\u7801\u57fa\u672c\u4e0a\u5c31\u662f\u5bf9\u51fd\u6570\u7684\u53c2\u6570\u6267\u884c\u6a21\u5f0f\u5339\u914d\u64cd\u4f5c\uff0c\u4f46\u7a0b\u5e8f\u5458\u5fc5\u987b\u7f16\u5199\u6a21\u5f0f\u5339\u914d\u7684\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u5b83\u662f\u6b63\u786e\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u5bf9\u5e94\u7684Erlang\u4ee3\u7801\u91cc\uff0c\u6211\u4eec\u53ea\u9700\u8981\u7f16\u5199\u6a21\u5f0f\uff0cErlang\u7f16\u8bd1\u5668\u5c31\u4f1a\u751f\u6210\u6700\u4f73\u7684\u6a21\u5f0f\u5339\u914d\u4ee3\u7801\uff0c\u7528\u5b83\u6765\u9009\u62e9\u6b63\u786e\u7684\u7a0b\u5e8f\u5165\u53e3\u70b9\u3002"),(0,n.kt)("h4",{id:"27121-\u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"},"2.7.12.1 \u9690\u5f0f\u7684\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u867d\u7136CreationScript\u5e76\u4e0d\u9700\u8981\u5411\u5f00\u53d1\u8005\u63d0\u4f9b\u6a21\u5f0f\u5339\u914d\u7684\u8bed\u6cd5\u548c\u80fd\u529b\uff0c\u4f46\u662fCreationScript\u672c\u8eab\u5219\u4f1a\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5b9a\u4e49\u7ec4\u4ef6\u53c2\u6570\u7684\u65f6\u5019\uff0c\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u89e3\u6784\u7279\u5b9a\u89e3\u6784\u7684\u5c5e\u6027\u5e26\u6765\u7684\u8026\u5408\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"(x, y, z) = Global.Position\n")),(0,n.kt)("p",null,"\u8fd9\u91ccPosition\u53ef\u80fd\u5bf9\u5185\u90e8\u7684\u5143\u7ec4\u4f7f\u7528\u4e0d\u540c\u7684\u5c5e\u6027\u540d\u5b57\uff0c\u8fd9\u5c31\u4f7f\u5f97\u5f00\u53d1\u8005\u9700\u8981\u53bb\u4e86\u89e3\u8fd9\u4e2a\u540d\u5b57\uff0c\u8fdb\u800c\u7f16\u5199\u7684\u7ec4\u4ef6\u4ee3\u7801\u4e0e\u6574\u4e2a\u540d\u5b57\u8026\u5408\uff0c\u6240\u4ee5\u4e0d\u5229\u7528\u51fd\u6570\u91cd\u7528\uff0c\u4f8b\u5982\u5177\u6709\u76f8\u540c\u6570\u636e\u7c7b\u578b\u7ec4\u5408\u7684\u5143\u7ec4\u5c31\u4e0d\u80fd\u518d\u4f7f\u7528\u8fd9\u4e2a\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7ec4\u4ef6\u7684\u53c2\u6570\u5fc5\u987b\u4f7f\u7528\u5143\u7ec4\u7684\u6a21\u5f0f\u5339\u914d\u7684\u65b9\u5f0f\uff0c\u8ba9\u7ec4\u4ef6\u53ef\u4ee5\u7f16\u5199\u4e0e\u5177\u4f53\u7ed3\u6784\u65e0\u5173\u7684\u4ee3\u7801\u3002"),(0,n.kt)("h4",{id:"27122-\u540d\u5b57\u5339\u914d"},"2.7.12.2 \u540d\u5b57\u5339\u914d"),(0,n.kt)("p",null,"\u6a21\u5f0f\u5339\u914d\u662f\u5339\u914d\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6982\u5ff5\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\uff0c\u5373\u7f16\u8bd1\u5668\u53ea\u662f\u5e2e\u52a9\u4f60\u505a\u4e00\u4e2a\u7c7b\u578b\u68c0\u67e5\uff0c\u53ef\u4ee5\u8fbe\u5230\u4e24\u4e2a\u76ee\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u5b9a\u51fd\u6570\u8c03\u7528\u7684\u5408\u6cd5\u6027\uff0c\u4fdd\u8bc1\u6b63\u786e\u7684\u53c2\u6570\u53ca\u5176\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u5e2e\u52a9\u8282\u7701\u4e00\u4e9b\u5197\u4f59\u4ee3\u7801\uff0c\u6bd4\u5982\u5982\u679c\u4e24\u4e2a\u6570\u636e\u7684\u6570\u636e\u7c7b\u578b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5219\u9700\u8981\u62c6\u5f00\u4e3a\u57fa\u672c\u7c7b\u578b\u518d\u8fdb\u884c\u9010\u4e2a\u6bd4\u8f83\uff0c\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801\u4e0d\u5149\u5305\u542b\u4ece\u6570\u636e\u7ed3\u6784\u4e2d\u8bfb\u53d6\u7279\u5b9a\u7684\u6570\u636e\u5b57\u6bb5\uff0c\u8fd8\u5305\u62ec\u5bf9\u63a5\u53d7\u51fd\u6570\u53c2\u6570\u53d8\u91cf\u7684\u8d4b\u503c\uff0c\u6a21\u5f0f\u5339\u914d\u907f\u514d\u4e86\u8fd9\u4e9b\u5197\u4f59\u4ee3\u7801")),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e2a\u5b8c\u6574\u7684\u51fd\u6570\u7684\u8c03\u7528\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6307\u5b9a\u51fd\u6570\u53c2\u6570\uff0c\u5bf9\u4e8e\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7528\u6237\u8fd8\u9700\u8981\u4e86\u89e3\u7ed3\u6784\u540e\u9762\u7684\u6570\u636e\u5e03\u5c40\uff0c\u8fd9\u4e9b\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u90fd\u662f\u5f88\u7e41\u7410\u7684\u3002"),(0,n.kt)("p",null,"\u540d\u5b57\u5339\u914d\u662f\u6a21\u5f0f\u5339\u914d\u7684\u5347\u7ea7\u7248\u672c\uff0c\u5b83\u6709\u4e24\u70b9\u53d8\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7b80\u5316\u4e86\u6570\u636e\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u5b83\u9f13\u52b1\u66f4\u6241\u5e73\u7684\u6570\u636e\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5d4c\u5957\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u9664\u4e86\u4fdd\u8bc1\u7ed3\u6784\u5339\u914d\uff0c\u8fd8\u9700\u8981\u4fdd\u8bc1\u540d\u5b57\u5339\u914d\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u907f\u514d\u7528\u6237\u8f93\u5165\u53c2\u6570\uff0c\u51fd\u6570\u8c03\u7528\u9000\u5316\u4e3a\u8bed\u4e49\u7ec4\u5408")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u8fd9\u6837\u505a\u9700\u8981\u7ed3\u5408\u6570\u636e\u5b9a\u4e49\u7684\u5171\u8bc6\uff0c\u5373\u6240\u6709\u7a0b\u5e8f\u9762\u5411\u516c\u5171\u6570\u636e\u7f16\u7a0b\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7528\u6237\u53ef\u4ee5\u624b\u5de5\u6307\u5b9a\u53c2\u6570\uff0c\u6b64\u65f6\u540d\u5b57\u5339\u914d\u9000\u5316\u4e3a\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("h3",{id:"2712-\u5206\u5e03\u5f0f"},"2.7.12 \u5206\u5e03\u5f0f"),(0,n.kt)("p",null,"\u5206\u5e03\u5f0f\u5185\u7f6e\u4e8e\u8bed\u8a00\u5185\uff0c\u5728CreationVM\u4e0a\u5b9e\u73b0\u5206\u5e03\u5f0f\u8c03\u5ea6\uff0c\u4ee5\u53caUDP\u8fdc\u7a0b\u6d88\u606f\u901a\u4fe1"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"distributed",src:l(9306).Z,width:"2544",height:"1384"})),(0,n.kt)("h4",{id:"27121-actor\u6a21\u578b"},"2.7.12.1 Actor\u6a21\u578b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Actor\u6a21\u578b\u4e2d\uff0cActor\u4e4b\u95f4\u662f\u9ad8\u5ea6\u72ec\u7acb\u7684\uff0c\u5e76\u4e14\u8ba1\u7b97\u5b8c\u8fd4\u56de\u7ed3\u679c\u5c31\u53ef\u4ee5\uff0c\u7136\u800c\u6e38\u620f\u4e2d\u7684\u72b6\u6001\u662f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u7684\uff0c\u6240\u4ee5\u8fd9\u5bfc\u81f4\u5b83\u5e76\u4e0d\u80fd\u5355\u7eaf\u5730\u628aActor\u5f53\u6210\u4e00\u4e2a\u72ec\u7acb\u5bf9\u8c61\uff0c\u4ec5\u4ec5\u4f7f\u7528\u6d88\u606f\u901a\u4fe1\u662f\u4e0d\u591f\u7684\uff0c\u4e5f\u9700\u8981\u6301\u4e45\u4fdd\u5b58\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u5728\u7ba1\u7406\u4e0a\uff0c\u4ed6\u9700\u8981\u7ef4\u62a4\u4e00\u4e2aActor\u5217\u8868\uff0c\u5e76\u4fdd\u8bc1\u5b83\u4eec\u6bcf\u4e00\u5e27\u90fd\u4f1a\u6309\u7167\u67d0\u79cd\u987a\u5e8f\u6267\u884c\uff0cActor\u4e4b\u95f4\u5305\u542b\u4f9d\u8d56\u5173\u7cfb\uff1b\u800c\u4e0d\u4ec5\u4ec5\u662f\u72ec\u7acb\u7ba1\u7406\u6bcf\u4e2aActor\u81ea\u8eab\u7684\u72b6\u6001\u3002"),(0,n.kt)("h3",{id:"2713-\u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"},"2.7.13 \u67ef\u91cc\u5316\u4e0e\u90e8\u5206\u65bd\u7528"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u6709\u591a\u4e2a\u53c2\u6570\uff0c\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\u7684\u503c\u53ef\u4ee5\u5e26\u5165\u51fd\u6570\uff0c\u4f46\u662f\u6b64\u65f6\u4e0d\u8ba1\u7b97\uff0c\u800c\u662f\u5f62\u6210\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u5305\u542b\u4e00\u90e8\u5206\u4e0a\u4e0b\u6587\uff0c\u4f46\u662f\u8fd9\u4e2a\u4e0a\u4e0b\u6587\u662f\u4e0d\u53d8\u7684\u3002\u7136\u540e\u5f53\u6211\u4eec\u628a\u5269\u4e0b\u7684\u53c2\u6570\u5e26\u5165\u51fd\u6570\uff0c\u8fdb\u884c\u6574\u4e2a\u51fd\u6570\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u6548\u679c\u5c31\u662f\u67ef\u91cc\u5316\u6216\u8005\u79f0\u4e3a\u90e8\u5206\u65bd\u7528\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\uff0cRealityIS\u7684\u6574\u4e2a\u7ec4\u4ef6\u8ba1\u7b97\u65b9\u5f0f\uff0c\u8ddf\u67ef\u91cc\u5316\u7684\u601d\u8def\u662f\u7c7b\u4f3c\u7684\u3002\u4e00\u90e8\u5206\u5c5e\u6027\u5148\u5e26\u5165\u65e9\u671f\u7684\u4e00\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u8ba1\u7b97\uff0c\u662f\u5728\u4e3a\u540e\u7eed\u7684\u7ec4\u4ef6\u8ba1\u7b97\u6784\u9020\u4e0a\u4e0b\u6587\u3002\u53ea\u4e0d\u8fc7\u6574\u4e2a\u4e0a\u4e0b\u6587\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u7ba1\u7406\uff0c\u800c\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u624b\u52a8\u7ba1\u7406\uff0c\u5e76\u8bb0\u4f4f\u90a3\u4e9b\u6784\u9020\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(4771).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u8fd9\u4e2a\u601d\u8def\u662fRealityIS\u53ef\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u7684\u7406\u8bba\u57fa\u7840\uff0c\u6b63\u662f\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u90a3\u79cd\u5d4c\u5957\u7684\u67ef\u91cc\u5316\u673a\u5236\u53ef\u4ee5\u8f6c\u53d8\u4e3a\u6241\u5e73\u7684\u7ec4\u5408\u7ed3\u6784\u3002\u4f46\u662f\u5176\u540e\u9762\u7684\u6838\u5fc3\u7406\u8bba\u662f\u4e00\u81f4\u7684\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5982\u679c\u53ef\u89c6\u5316\u5c55\u5f00\uff0cRealityIS\u7684\u7ec4\u5408\u4e5f\u5e94\u8be5\u662f\u5d4c\u5957\u7684\uff0c\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u7ed3\u679c\u662f\u4e00\u81f4\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd0\u884c\u65f6\u4ee5\u4e0d\u540c\u7684\u65b9\u5f0f\u53bb\u7ef4\u6301\u95ed\u5305\u91cc\u9762\u7684\u90a3\u4e9b\u53d8\u91cf\u3002"),(0,n.kt)("h4",{id:"27131-\u6241\u5e73\u5316\u7684\u79d8\u5bc6"},"2.7.13.1 \u6241\u5e73\u5316\u7684\u79d8\u5bc6"),(0,n.kt)("p",null,"\u53ef\u4ee5\u8bc1\u660e\uff0c\u7406\u8bba\u4e0aRealityIS\u7684\u7ec4\u4ef6\u7ec4\u5408\u8ddf\u51fd\u6570\u5f0f\u7f16\u7a0b\u662f\u7b49\u6548\u7684\uff0c\u90a3\u4e48\u4e3a\u4ec0\u4e48\u80fd\u5b9e\u73b0\u6241\u5e73\u7ec4\u5408\u5462\uff1f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fd9\u91cc\u7684\u6838\u5fc3\u79d8\u5bc6\u5728\u4e8e\uff0c\u6e38\u620f\u673a\u5236\u4e2d\u7ec4\u4ef6\u7684\u8de8\u5e27\u901a\u4fe1\u5c06\u8d4b\u503c\u8bed\u53e5\u89e3\u8026\u4e86\uff01")),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u6216\u8005\u51fd\u6570\u7f16\u7a0b\u4e2d\uff0c\u4e00\u4e2a\u51fd\u6570\u63a5\u53d7\u53e6\u4e00\u4e2a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\uff0c\u5e76\u5c06\u8ba1\u7b97\u7684\u7ed3\u679c\u8d4b\u503c\u7ed9\u4e00\u4e2a\u53d8\u91cf\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u5b58\u50a8\u8d77\u6765\uff0c\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u901a\u5e38\u6839\u636e\u51fd\u6570\u7684\u4f5c\u7528\u57df\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u6b63\u662f\u56e0\u4e3a\u8d4b\u503c\u8bed\u53e5\uff0c\u6240\u4ee5\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u53ea\u80fd\u5d4c\u5957\u8fdb\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u968f\u610f\u7ec4\u5408\u5230\u4e00\u8d77\u7531\u5b83\u4eec\u81ea\u7531\u53d1\u6325\u4f5c\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u610f\u7ec4\u5408\u8981\u60f3\u81ea\u52a8\u53d1\u6325\u4f5c\u4e3a\uff0c\u8fd8\u9700\u8981\u53c2\u6570\u4e0e\u51fd\u6570\u4e4b\u95f4\u81ea\u52a8\u5173\u8054\u548c\u5173\u7cfb\uff0c\u8fd9\u5c31\u662fRealityIS\u5728\u5b9a\u4e49\u53d8\u91cf\u7684\u65f6\u5019\u5c31\u7ea6\u675f\u597d\u7684\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u901a\u8fc7\u8de8\u5e27\u7684\u8d4b\u503c\uff0c\u51fd\u6570\u53c2\u6570\u5c31\u4e00\u4e0d\u7528\u8ddf\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u662f\u8026\u5408\u5728\u4e00\u8d77\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u72ec\u7acb\u5b58\u5728\u548c\u7ec4\u5408\uff0c\u518d\u52a0\u4e0a\u4e0a\u8ff0\u63cf\u8ff0\u7684\u51fd\u6570\u4e0e\u53d8\u91cf\u4e4b\u95f4\u7684\u81ea\u52a8\u5173\u7cfb\uff0c\u6240\u4ee5\u5c31\u80fd\u591f\u5b9e\u73b0\u5d4c\u5957\u51fd\u6570\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1RealityIS\u4e0d\u652f\u6301\u53d6\u81ea\u6765\u81ea\u4e24\u4e2a\u4e0d\u540c\u5b9e\u4f53\u5bf9\u8c61\u7684\u53c2\u6570\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u628a\u6765\u81eaA\u7684\u5f71\u54cd\u8ba1\u7b97\u7684\u51fd\u6570\u7ed3\u679c\u5b58\u50a8\u5728B\u4e2d\uff0c\u7136\u540e\u518d\u53d6B\u7684\u503c\u5728C\u4e2d\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u5176\u5b9e\u95f4\u63a5\u5c31\u662f\u4e00\u4e2a\u591a\u4e2a\u6df1\u5c42\u51fd\u6570\u5d4c\u5957\u7684\u7ed3\u679c\u3002\u66f4\u6df1\u5c42\u6b21\u7684\u5d4c\u5957\u53ef\u4ee5\u4e00\u6b21\u6765\u63a8\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u662f\u5b8c\u5168\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u53ea\u662f\u4e0a\u4e0b\u6587\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u8ba1\u7b97\u7ed3\u679c\u88ab\u8de8\u5e27\u7684\u5b9e\u4f53\u53d8\u91cf\u8fdb\u884c\u4fdd\u5b58\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u7b80\u5316\u4e86\u6574\u4e2a\u8ba1\u7b97\u67b6\u6784\uff0c\u540c\u65f6\u7b80\u5316\u4e86\u7528\u6237\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27132-\u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"},"2.7.13.2 \u5d4c\u5957\u964d\u4f4e\u5e76\u884c\u6027"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u901a\u8fc7\u5d4c\u5957\u6765\u5b9e\u73b0\u7ec4\u5408\u3002\u5c3d\u7ba1\u5355\u4e2a\u51fd\u6570\u7684\u529f\u80fd\u662f\u5c0f\u7c92\u5ea6\u7684\uff0c\u4f46\u662f\u5d4c\u5957\u7684\u51fd\u6570\u5219\u5f62\u6210\u4e86\u7279\u5316\uff0c\u5d4c\u5957\u7ec4\u5408\u540e\u7684\u51fd\u6570\u51e0\u4e4e\u90fd\u662f\u5177\u6709\u4e0d\u540c\u903b\u8f91\u7684\u51fd\u6570\uff0c\u56e0\u6b64\u51e0\u4e4e\u65e0\u6cd5\u8fdb\u884c\u5e76\u884c\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u56e0\u4e3a\u51fd\u6570\u7684\u53c2\u6570\u672c\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u4e00\u822c\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u51fd\u6570\u53ef\u80fd\u5177\u6709\u4e0d\u540c\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u5373\u4f7f\u6211\u4eec\u80fd\u591f\u628a\u6240\u6709\u5bf9\u8fd9\u4e9b\u51fd\u6570\u7684\u8c03\u7528\u6c47\u96c6\u8d77\u6765\uff0c\u4ecd\u7136\u4e0d\u80fd\u591f\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u63d0\u5347\u5e76\u884c\u6027\uff0c\u6211\u4eec\u9700\u8981\u628a\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u7684\u673a\u5236\u8f6c\u6362\u4e3a\u4f20\u9012\u503c\u7684\u673a\u5236\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4f20\u9012\u7684\u53c2\u6570\u662f\u4e00\u4e2a\u503c\uff0c\u4f46\u662f\u56e0\u4e3a\u6bcf\u4e00\u4e2a\u5b9e\u9645\u8ba1\u7b97\u7684\u503c\u90fd\u7ecf\u8fc7\u4e86\u524d\u9762\u4e00\u8fde\u4e32\u7684\u51fd\u6570\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7ec4\u5408\u4ecd\u7136\u6ee1\u8db3\u4e00\u4e2a\u5d4c\u5957\u7684\u590d\u5408\u51fd\u6570\u3002"),(0,n.kt)("p",null,"\u800cRealityIS\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\uff0c\u901a\u8fc7\u6241\u5e73\u5316\uff0c\u4e0d\u4ec5\u4fdd\u7559\u4e86\u51fd\u6570\u5f0f\u7f16\u7a0b\u672c\u8eab\u7684\u7279\u8d28\uff0c\u800c\u4e14\u901a\u8fc7\u5c06\u6bcf\u4e2a\u51fd\u6570\u8c03\u7528\u90fd\u72ec\u7acb\u51fa\u6765\uff0c\u4f7f\u5f97\u76f8\u540c\u7684\u7ec4\u4ef6\u53ef\u4ee5\u5b8c\u5168\u5b9e\u73b0\u5e76\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("h4",{id:"27133-\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"},"2.7.13.3 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u590d\u5408"),(0,n.kt)("p",null,"\u51fd\u6570\u5f0f\u7f16\u7a0b\uff08FP\uff09\u672c\u8eab\u7684\u6982\u5ff5\u6bd4\u8f83\u7b80\u5355\u4e86\uff0c\u5c31\u662f\u76f8\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\uff08OOP\uff09\uff0cFP\u7684\u51fd\u6570\u5185\u90e8\u6ca1\u6709\u72b6\u6001\uff0c\u5b8c\u5168\u4f9d\u8d56\u4e8e\u5916\u90e8\u8f93\u5165\uff0c\u6240\u4ee5\u4efb\u4f55\u8f93\u5165\u90fd\u6709\u552f\u4e00\u7684\u8f93\u51fa\uff0c\u8fd9\u79cd\u79f0\u4e3a\u6ca1\u6709\u526f\u4f5c\u7528\u7684\u65b9\u5f0f\uff0c\u5c31\u5f88\u5bb9\u6613\u5b9e\u73b0\u5e76\u53d1\uff0c\u4e5f\u5f88\u5bb9\u6613\u7ba1\u7406\u4ee3\u7801\u590d\u7528\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u539f\u7406")),(0,n.kt)("p",null,"\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u628a\u591a\u4e2a\u7ec4\u4ef6\u4ee5\u67d0\u79cd\u65b9\u5f0f\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u4e00\u822c\u6765\u8bf4\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5176\u5f62\u6210\u7684\u6574\u4f53\u4e5f\u662f\u4e00\u4e2a\u590d\u5408\u4f53\u3002\u5bf9\u4e8e\u590d\u5408\u64cd\u4f5c\u672c\u8eab\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9700\u4e0d\u9700\u8981\u5904\u7406\u5404\u79cd\u590d\u6742\u7684\u53c2\u6570\uff0c\u56e0\u4e3a\u590d\u5408\u64cd\u4f5c\u672c\u8eab\u662f\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u7b80\u5355\u7684\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u51fd\u6570\u672c\u8eab\u5305\u542b\u6709\u6620\u5c04\u5173\u7cfb")),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u5e0c\u671b\u540e\u8005\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u4f20\u7edf\u7684\u51fd\u6570\u8c03\u7528\u5c01\u88c5\u673a\u5236\u4e0d\u592a\u5229\u4e8e\u7528\u6765\u4f5c\u4e3a\u4e00\u79cd\u9762\u5411\u666e\u901a\u7528\u6237\u7684\u590d\u7528\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u590d\u5408\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u590d\u5408\u4f53\u662f\u5426\u5305\u542b\u72b6\u6001"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u8be5\u590d\u5408\u4f53\u4ec5\u4ec5\u662f\u4e00\u4e2a\u529f\u80fd\u7ec4\u5408\u4f53")),(0,n.kt)("p",null,"\u5176\u4e2d\u524d\u8005\u5c31\u662f\u4f20\u7edf\u7684\u547d\u4ee4\u5f0f\u7f16\u7a0b\u6240\u4ee3\u8868\u7684\u65b9\u6cd5\uff0c\u5728OOP\u4e2d\uff0c\u65b9\u6cd5\u4e00\u822c\u662f\u9644\u7740\u4e8e\u67d0\u4e2a\u5bf9\u8c61\u7684\uff0c\u800c\u5bf9\u8c61\u4e00\u822c\u62e5\u6709\u79c1\u6709\u72b6\u6001\uff0c\u56e0\u6b64\u5373\u4f7f\u591a\u4e2a\u5bf9\u8c61\u4ee5\u67d0\u79cd\u65b9\u5f0f\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\uff0c\u5f53\u5728\u4f7f\u7528\u67d0\u4e2a\u8fd9\u6837\u7684\u590d\u5408\u4f53\u65f6\uff0c\u8c03\u7528\u8005\u5c31\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u4e0d\u540c\u7684\u53c2\u6570\u4e0b\u590d\u5408\u4f53\u4f1a\u8868\u73b0\u51fa\u4e0d\u540c\u7684\u529f\u80fd\u7ed3\u679c\u3002\u8fd9\u6837\u5c31\u4f7f\u5f97\u590d\u5408\u4f53\u4e0d\u5229\u4e8e\u4f7f\u7528\uff0c\u5c3d\u7ba1\u590d\u5408\u4f53\u672c\u8eab\u53ef\u4ee5\u5305\u542b\u4e00\u4e9b\u9ed8\u8ba4\u53c2\u6570\uff0c\u4f46\u662f\u8fd8\u662f\u9700\u8981\u5c0f\u5fc3\u7ef4\u62a4\u8fd9\u4e9b\u53c2\u6570\u624d\u80fd\u4fdd\u8bc1\u7ed3\u6784\u7684\u6b63\u786e\u6027\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u5f88\u591a\u8f6f\u4ef6\u6216\u8005\u5e93\u9700\u8981\u8bbe\u7f6e\u5f88\u591a\u53c2\u6570\uff0c\u6709\u65f6\u5019\u54ea\u4e9b\u53c2\u6570\u5fd8\u6389\u4e86\u6216\u8005\u8bbe\u7f6e\u9519\u4e86\uff0c\u6574\u4e2a\u8f6f\u4ef6\u5c31\u53ef\u80fd\u51fa\u73b0\u4e0d\u53ef\u9884\u671f\u7684\u884c\u4e3a\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4f20\u7edf\u7684\u5b9e\u4f53\u7ecf\u6d4e\u4e2d\u7684\u5927\u90e8\u5206\u90e8\u4ef6\u662f\u4ee5\u8fd9\u6837\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4f8b\u5982\u6bcf\u4e2a\u673a\u5668\u90fd\u5e26\u6709\u5404\u79cd\u53c2\u6570\uff0c\u4f7f\u7528\u8005\u9700\u8981\u9996\u5148\u8bbe\u7f6e\u76f8\u5e94\u7684\u53c2\u6570\uff0c\u7136\u540e\u518d\u4e0b\u8fbe\u8fd0\u4f5c\u547d\u4ee4\u3002\u4f8b\u5982\u6d17\u8863\u673a\u7684\u547d\u4ee4\u53ef\u80fd\u5f88\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4ed6\u4e00\u4e9b\u5de5\u4e1a\u673a\u5668\u53ef\u80fd\u5219\u6bd4\u8f83\u590d\u6742\u3002\u8fd9\u662f\u56e0\u4e3a\u4e00\u53f0\u5b9e\u4f53\u7684\u673a\u5668\uff0c\u5b83\u6ca1\u6709\u529e\u6cd5\u63a5\u53d7\u4e00\u4e2a\u5916\u5728\u7684\u8f93\u5165\u8bbe\u7f6e\uff0c\u4e3b\u8981\u7684\u8f93\u5165\u65b9\u6cd5\u662f\u624b\u5de5\u64cd\u4f5c\uff0c\u5927\u90e8\u5206\u673a\u5668\u5e76\u4e0d\u5141\u8bb8\u63d2\u5165\u4e00\u4e2a\u5916\u63a5\u4fe1\u53f7\u6e90\u4ee5\u53ef\u7f16\u7a0b\u7684\u65b9\u5f0f\u8bbe\u7f6e\u53c2\u6570\u3002\u7136\u800c\u5728\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e2d\u6211\u4eec\u4f7f\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e9b\u72b6\u6001\u5168\u90e8\u8c03\u6574\u4e3a\u590d\u5408\u4f53\u7684\u53c2\u6570\uff0c\u8ba9\u590d\u5408\u4f53\u672c\u8eab\u4e0d\u5e26\u4efb\u4f55\u72b6\u6001\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u56e0\u4e3a\u4e00\u65e6\u590d\u5408\u4f53\u7684\u4f7f\u7528\u5305\u542b\u624b\u5de5\u8bbe\u7f6e\u53c2\u6570\u7684\u6d41\u7a0b\uff0c\u5e76\u4e14\u8fd9\u4e9b\u8bbe\u7f6e\u7684\u4f4d\u7f6e\u548c\u683c\u5f0f\u8fd8\u591a\u79cd\u591a\u6837\uff0c\u4f7f\u7528\u8005\u5c31\u65e0\u6cd5\u505a\u5230\u81ea\u52a8\u5316\uff0c\u5e76\u4e14\u8fd9\u6837\u7684\u65b9\u5f0f\u4e0d\u5229\u4e8e\u666e\u901a\u7528\u6237\u4f7f\u7528"),"\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u6700\u6838\u5fc3\u7684\u90e8\u5206\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u4e0d\u80fd\u4ee5\u5e26\u6709\u72b6\u6001\u7684\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u590d\u5408"),"\uff0c\u8fd9\u4e5f\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u6a21\u5f0f\u4e2d\u590d\u5408\u673a\u5236\u7684\u7279\u5f81\uff0c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e2d\u4ee5\u5bf9\u8c61\u5bf9\u5355\u4f4d\uff0c\u5bf9\u8c61\u662f\u7b2c\u4e00\u7b49\u516c\u6c11\uff0c\u51fd\u6570\u662f\u5bf9\u8c61\u7684\u7ec4\u6210\u90e8\u5206\uff0c\u6240\u4ee5\u5bf9\u8c61\u672c\u8eab\u5c31\u5f88\u5bb9\u6613\u5305\u542b\u72b6\u6001\uff0c\u4ee5\u81f3\u4e8e\u5f88\u96be\u5f62\u6210\u4e00\u79cd\u5f88\u597d\u7684\u590d\u5408\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u6bd4\u4ee5\u51fd\u6570\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\u8981\u7b80\u5355\u7684\u591a\uff0c\u51fd\u6570\u7684\u7c92\u5ea6\u8fd8\u662f\u6bd4\u8f83\u7ec6\u3002\u6240\u4ee5\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u6765\u7ba1\u7406\u590d\u5408\u4f53\uff0c\u4e00\u4e2a\u5bf9\u8c61\u5373\u662f\u4e00\u4e2a\u590d\u5408\u4f53\uff0c\u5bf9\u8c61\u672c\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u72b6\u6001\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u5176\u5b9e\u5c31\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684\u4e00\u4e2a\u590d\u5408\u51fd\u6570\u7684\u6241\u5e73\u5f62\u5f0f\u3002\u6b64\u5916\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5e76\u4e0d\u662f\u5355\u7eaf\u4e00\u5806\u51fd\u6570\u7684\u7ec4\u5408\uff0c\u8fd9\u4e9b\u51fd\u6570\u4e4b\u95f4\u5fc5\u987b\u662f\u6709\u76f8\u4e92\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bf9\u8c61\u539f\u5219\u4e0a\u53ea\u4ee3\u8868\u4e00\u4e2a\u590d\u5408\u51fd\u6570\uff0c\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u5185\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u590d\u5408\u51fd\u6570\u662f\u5b64\u7acb\u7684\uff0c\u5219\u4ed6\u4eec\u5e94\u8be5\u8868\u793a\u4e3a\u4e0d\u540c\u7684\u5b9e\u4f53\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u590d\u5408\u7684\u673a\u5236")),(0,n.kt)("p",null,"\u5173\u4e8eFP\u7684\u590d\u5408\uff0c\u4ed6\u5176\u5b9e\u548c\u6570\u5b66\u4e2d\u7684\u590d\u5408\u51fd\u6570\u6982\u5ff5\u662f\u7c7b\u4f3c\u7684\uff0c\u5c31\u662f\u4e00\u4e2a\u5d4c\u5957\u7684\u7ed3\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(3631).Z,width:"538",height:"36"})),(0,n.kt)("p",null,"FP\u5b9e\u73b0\u590d\u5408\u7684\u673a\u5236\u5c31\u662f\u5c06\u51fd\u6570\u672c\u8eab\u770b\u4f5c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u53c2\u6570\u4f20\u9012\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u76f8\u5f53\u4e8e\u53e6\u4e00\u4e2a\u51fd\u6570\u4e2d\u67d0\u4e2a\u672a\u77e5\u53d8\u91cf\u662f\u7531\u8fd9\u4e2a\u4f5c\u4e3a\u53c2\u6570\u7684\u51fd\u6570\u8ba1\u7b97\u51fa\u6765\u7684\uff0c\u8fd9\u6837\u5f62\u6210\u7684\u7ed3\u679c\u51e0\u4e4e\u5c31\u8ddf\u590d\u5408\u51fd\u6570\u662f\u4e00\u6837\u7684\u6548\u679c\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u770b\u590d\u5408\u51fd\u6570\uff0c\u5b83\u662f\u6709\u7ed3\u6784\u7684\uff0c\u4e0d\u662f\u4efb\u610f\u7ec4\u5408\u7684\uff0c\u4f60\u9700\u8981\u7406\u89e3\u51e0\u4e2a\u51fd\u6570\u590d\u5408\u4e4b\u540e\u7684\u90a3\u4e2a\u7ed3\u679c\u7684\u7ed3\u6784\u624d\u80fd\u5f88\u597d\u5730\u590d\u5408\uff0c\u4f8b\u5982\u4f60\u6362\u4e00\u4e2a\u51fd\u6570\u590d\u5408\u4ee5\u540e\u8868\u73b0\u51fa\u7684\u7279\u5f81\u53ef\u80fd\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u3002\u56e0\u6b64\u8fd9\u79cd\u590d\u5408\u65b9\u5f0f\u53ea\u9002\u5408\u7a0b\u5e8f\u5458\uff0c\u4e0d\u80fd\u628a\u8fd9\u79cd\u65b9\u5f0f\u4e22\u7ed9\u666e\u901a\u7528\u6237\uff0c\u666e\u901a\u7528\u6237\u9700\u8981\u4e00\u79cd\u66f4\u6241\u5e73\u7684\uff0c\u4e0d\u9700\u8981\u4e86\u89e3\u90a3\u4e48\u591a\u7ed3\u6784\u7684\u7ec4\u5408\u65b9\u5f0f\uff1a\u591a\u4e00\u4e2a\u7ec4\u4ef6\u53ea\u662f\u591a\u4e00\u4e2a\u529f\u80fd\uff0c\u4f46\u4ed6\u4e0d\u4f1a\u8bf4\u8ba9\u884c\u4e3a\u7ed3\u679c\u5b8c\u5168\u53d8\u4e86\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2714-serverless"},"2.7.14 Serverless"),(0,n.kt)("p",null,"\u4ece\u6982\u5ff5\u4e0a\u8bb2\uff0cCreationScript\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u7684\u5c31\u662f\u4e00\u79cd\u771f\u6b63\u7684Serverless\u670d\u52a1\uff1a\u5373\u5f00\u53d1\u8005\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u51fd\u6570\uff0c\u5e73\u53f0\u81ea\u52a8\u5b9e\u73b0\u4f38\u7f29\u548c\u5e76\u53d1\uff0c\u5f00\u53d1\u8005\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u670d\u52a1\u5668\u76f8\u5173\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,"Serverless\u662f\u4e00\u79cd\u7406\u5ff5\uff0c\u73b0\u6709\u4e91\u5382\u5546\u6709\u4e00\u79cd\u5b9e\u73b0\uff0c\u4f46\u8fd9\u79cd\u5b9e\u73b0\u5e76\u4e0d\u662fSeverless\u7684\u7ec8\u6781\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\u4e91\u5382\u5546\u63d0\u4f9b\u7684Serverless\uff0c\u4ed6\u4eec\u5176\u5b9e\u8fd8\u53ea\u662f\u5c06\u8ba1\u7b97\u6258\u7ba1\u7b80\u5316\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u6574\u4e2a\u7a0b\u5e8f\uff0c\u8fd9\u6837\u4fbf\u4e8e\u4f38\u7f29\uff0c\u800c\u4e91\u5382\u5546\u5b9e\u73b0\u7684\u4f38\u7f29\u4e5f\u6bd4\u8f83\u7b80\u5355\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u51fd\u6570\u672c\u8eab\u662f\u4e0e\u5176\u4ed6\u4e1a\u52a1\u6ca1\u6709\u8026\u5408\u7684\uff0c\u6240\u4ee5\u4ed6\u4eec\u628a\u51fd\u6570\u548c\u6570\u636e\u590d\u5236\u5230\u5176\u4ed6\u670d\u52a1\u5668\u6267\u884c\u5c31\u597d\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u8fd9\u91cc\u9762\u6709\u5f88\u5927\u7684\u9650\u5236\uff0c\u4ed6\u53ea\u9650\u4e8e\u51e0\u4e4e\u5b8c\u5168\u72ec\u7acb\u7684\u51fd\u6570\uff0c\u65e0\u6cd5\u590d\u7528\u72b6\u6001\uff08\u6e38\u620f\u6bcf\u4e00\u5e27\u90fd\u8981\u8ba1\u7b97\uff0c\u9700\u8981\u7ef4\u6301\u4e00\u4e9b\u72b6\u6001\uff09\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0Streaming\u7b49\u7b49\u4e00\u4e9b\u7279\u6027\uff0c\u5bf9\u5b9e\u65f6\u6027\u652f\u6301\u4e5f\u6bd4\u8f83\u5dee\uff0c\u51fd\u6570\u5b58\u6d3b\u7684\u65f6\u95f4\u4e5f\u4e0d\u597d\u63a7\u5236\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u4ed6\u4eec\u53ea\u662f\u5355\u7eaf\u6267\u884c\u4e00\u4e2a\u51fd\u6570\uff0c\u5e76\u6ca1\u6709\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u800c\u5b8c\u5168\u8981\u4f9d\u8d56\u4e8e\u5f00\u53d1\u8005\u81ea\u8eab\u53bb\u8003\u8651\u600e\u6837\u62c6\u5206\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u7684CreationScript\uff0c\u4ed6\u662f\u7ed3\u5408\u81ea\u5df1\u7684\u6570\u636e\u7279\u5f81\u548c\u6e38\u620f\u8fd0\u884c\u673a\u5236\uff0c\u5b9e\u73b0\u7684\u4e00\u5957\u5e76\u53d1\u63a7\u5236\u8bed\u8a00\uff0c\u5b83\u901a\u8fc7\u865a\u62df\u673a\u4e0e\u7ec4\u4ef6\uff08\u4e00\u4e2a\u51fd\u6570\uff09\u7684\u914d\u5408\u6765\u5b9e\u73b0\u4e00\u4e9b\u5982\u72b6\u6001\u6301\u4e45\u5171\u4eab\uff0cStreaming\uff0c\u5e76\u53d1\u5206\u53d1\uff0c\u51fd\u6570\u4e4b\u95f4\u7684\u901a\u4fe1\u7b49\u7b49\uff0c\u8fd9\u4e9b\u673a\u5236\u5982\u679c\u6ca1\u6709\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u5b9a\u5236\u662f\u5f88\u96be\u505a\u5230\u7684\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u51fd\u6570/\u7ec4\u4ef6\u8ddf\u8bed\u8a00\u3001\u8fd0\u884c\u65f6\u865a\u62df\u673a\u7684\u7ed3\u5408\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u8651\u7ec4\u4ef6\u4e4b\u95f4\u600e\u4e48\u53bb\u7ec4\u7ec7\u903b\u8f91\u7684\u4e8b\u60c5\uff0c\u5e73\u53f0\u4f1a\u81ea\u52a8\u628a\u8fd9\u4e9b\u7ec4\u4ef6\u51fd\u6570\u5206\u914d\u5230Serverless\u7684\u67b6\u6784\u4e2d\u53bb\uff0c\u8fd9\u5c31\u662f\u6211\u4eec\u5b9a\u4e49\u7684\u4e0d\u540c\u7684\u66f4\u597d\u7684Serverless\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u5f3a\u8c03RealityIS\u662f\u4e00\u4e2a\u5927\u578b\u7684\u52a8\u6001\u7a0b\u5e8f\u7684\u539f\u56e0\uff0c\u91cc\u9762\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\uff0c\u90fd\u662f\u4e00\u4e2a\u5f88\u5c0f\u7684\u903b\u8f91\uff0c\u90fd\u53ef\u4ee5\u88ab\u72ec\u7acb\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u8ba1\u7b97\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u4e5f\u662f\u4f4e\u8026\u5408\u7684\uff0c\u6240\u4ee5\u6211\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u5730\u63a7\u5236\u4ed6\u4eec\uff0c\u6839\u636e\u9700\u8981\u53ea\u52a0\u8f7d\u4f1a\u7528\u5230\u7684\u90a3\u4e00\u90e8\u5206\u7a0b\u5e8f\uff0c\u4e5f\u53ef\u4ee5\u6839\u636e\u670d\u52a1\u5668\u8d1f\u8f7d\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5206\u914d\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5668\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u5e76\u4e0d\u4ec5\u4ec5\u662f\u6309\u51fd\u6570\u628a\u4ed6\u4eec\u62c6\u51fa\u6765\u800c\u5df2\uff0c\u51fd\u6570\u4e4b\u95f4\u8fd8\u662f\u6709\u5173\u7cfb\u7684\uff0c\u5e76\u4e0d\u662f\u5b8c\u5168\u72ec\u7acb\u7684\uff0c\u8fd9\u79cd\u8c03\u7528\u5173\u7cfb\u8981\u9760RealityIS\u8fd0\u884c\u65f6\u865a\u62df\u673a\u6765\u652f\u6301\uff0c\u8fd9\u662f\u6700\u5173\u952e\u7684\u90e8\u5206\uff0c\u5426\u5219\u4ed6\u5c31\u53ea\u662f\u4e00\u4e2a\u73b0\u5728\u7684\u4e91\u5382\u5546\u7c7b\u4f3c\u7684Serverless\u670d\u52a1\u800c\u5df2\u3002"),(0,n.kt)("h3",{id:"2715-\u81ea\u52a8\u5316\u6d4b\u8bd5"},"2.7.15 \u81ea\u52a8\u5316\u6d4b\u8bd5"),(0,n.kt)("p",null,"\u6e38\u620f\u4e2d\u90a3\u4e9b\u52a8\u753b\u3001\u6e32\u67d3\u3001\u7269\u7406\u6a21\u62df\u7b49\u89c6\u89c9\u56e0\u7d20\u4e4b\u540e\uff0c\u6e38\u620f\u80cc\u540e\u7684\u673a\u5236\u53ef\u4ee5\u62bd\u8c61\u4e3a\u4e00\u5957\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5176\u4e2d\u6240\u6709\u7684\u884c\u4e3a\u90fd\u62bd\u8c61\u4e3a\u8d44\u6e90\uff0c\u8fd9\u5957\u673a\u5236\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u5404\u79cd\u5404\u6837\u7684\u8d44\u6e90\u968f\u7740\u73a9\u5bb6\u7684\u4ecb\u5165\u8fdb\u884c\u600e\u6837\u7684\u6d41\u52a8\uff0c\u4f8b\u5982\u73a9\u5bb6\u7528\u91d1\u5e01\u8d2d\u4e70\u9053\u5177\uff0c\u7528\u4e0d\u540c\u7684\u9053\u5177\u7ec4\u5408\u5f62\u6210\u65b0\u7684\u9053\u5177\uff0c\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u8bf4\u662f\u7ecf\u6d4e\u7684\u6d41\u52a8\uff0c\u800cMachinations \u53ef\u4ee5\u6a21\u62df\u8fd9\u5957\u6d41\u52a8\u7684\u673a\u5236\uff0c\u5b83\u662f\u4e00\u5957\u8bed\u8a00\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u6a21\u62df\u6240\u6709\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d41\u52a8\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u9762\u7684\u4ef7\u503c\u6709\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u6e38\u620f\u673a\u5236\u7684\u6570\u503c\u5e73\u8861\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u5feb\u901f\u6d4b\u8bd5\u8fd9\u5957\u673a\u5236\u7684\u5408\u7406\u6027\uff0c\u8fdb\u800c\u8c03\u6574\u6570\u503c\uff0c\u5426\u5219\u4e0d\u5408\u7406\u7684\u673a\u5236\u76f4\u63a5\u5c31\u5bfc\u81f4\u73a9\u5bb6\u6d41\u5931\uff0c\u8fd9\u8ddf\u5e94\u7528\u7a0b\u5e8f\u4e0d\u592a\u4e00\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6211\u4eec\u7684\u53ef\u7ec4\u5408\u6027\u8db3\u591f\u597d\uff0c\u6211\u4eec\u662f\u53ef\u4ee5\u5728\u8fd9\u5957\u7cfb\u7edf\u548c\u7a0b\u5e8f\u4e4b\u95f4\u81ea\u52a8\u8f6c\u6362\u7684\uff0c\u8fd9\u6837\u5c31\u8fdb\u4e00\u6b65\u964d\u4f4e\u95e8\u69db\uff0c\u8bbe\u8ba1\u5e08\u662f\u7528\u66f4\u7b26\u5408\u903b\u8f91\u7684\u89c6\u89c9\u65b9\u5f0f\u53bb\u8bbe\u8ba1\u6e38\u620f\uff0c\u800c\u4e0d\u662f\u53bb\u601d\u8003\u4ee3\u7801\u7ed3\u6784\uff0c\u8fd9\u4e2a\u5176\u5b9e\u662f\u6211\u4eec\u7ec4\u5408\u7ec4\u4ef6\u8fdb\u884c\u521b\u4f5c\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u5b83\u4f1a\u6210\u4e3a\u6211\u4eec\u9762\u5411\u7ec4\u5408\u7684\u201c\u5f00\u53d1\u6216\u8005\u8bbe\u8ba1\u8bed\u8a00\u201d")),(0,n.kt)("p",null,"\u5c06\u6765\u6211\u4eec\u7b2c\u4e00\u5bb6\u8981\u6536\u8d2d\u7684\u516c\u53f8\u5c31\u662fMachinations \uff0c\u5f53\u7136\u5982\u679c\u4e0d\u80fd\u6536\u8d2d\uff0c\u6211\u4eec\u81ea\u5df1\u4e5f\u4f1a\u505a\u4e00\u5957\u7c7b\u4f3c\u601d\u8def\u7684\u5de5\u5177\u3002"),(0,n.kt)("h3",{id:"2716-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6570\u636e\u901a\u5e38\u5b58\u5728\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u6570\u636e\u6700\u7ec8\u662f\u51fd\u6570\u8c03\u7528\u8fdb\u884c\u901a\u4fe1\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u77e5\u9053\u6570\u636e\u4ece\u54ea\u91cc\u6765\uff0c\u600e\u6837\u88ab\u5b9a\u4e49\uff0c\u600e\u6837\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9\u51fd\u6570\uff0c\u56e0\u6b64\uff0c\u6574\u4e2a\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u51e0\u4e4e\u603b\u5728\u5173\u6ce8\u5bf9\u8c61\uff0c\u56e0\u4e3a\u5bf9\u8c61\u662f\u6570\u636e\u7684\u5c01\u88c5\u5b9e\u4f53\u3002\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5f62\u6210\u6570\u636e\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4f46\u5bf9\u8c61\u7684\u7ed3\u6784\u672c\u8eab\u5305\u542b\u4e86\u592a\u591a\u989d\u5916\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u901a\u5e38\u662f\u8ddf\u5177\u4f53\u95ee\u9898\u8026\u5408\u7684\uff0c\u56e0\u4e3a\u5bf9\u8c61\u7684\u7ed3\u6784\u901a\u5e38\u5c31\u662f\u8fd9\u4e9b\u95ee\u9898\u7684\u6620\u5c04"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u7ed3\u6784\u7684\u5b9e\u73b0\u672c\u8eab\u6ca1\u6709\u7edf\u4e00\u6807\u51c6")),(0,n.kt)("p",null,"\u56e0\u6b64\u4e0d\u4ec5\u4f7f\u7528\u7684\u4eba\u9700\u8981\u53bb\u7406\u89e3\u548c\u5173\u6ce8\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\uff0c\u5f00\u53d1\u7684\u4eba\u4e5f\u5bb9\u6613\u5c06\u4e00\u4e9b\u7c7b\u578b\u4fe1\u606f\u8026\u5408\u5230\u51fd\u6570\u65b9\u6cd5\u4e2d\u3002\u8fd9\u4e9b\u90fd\u662f\u989d\u5916\u7684\u8d1f\u62c5\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u6765\u5206\u6790\u4e00\u4e9b\u4e0d\u540c\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("h4",{id:"27161-\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"},"2.7.16.1 \u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u5e94\u8be5\u4e0d\u5e26\u7c7b\u578b"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u65b9\u6cd5\u7684\u8bbe\u8ba1\u4e0d\u7528\u5e26\u5e26\u5165\u592a\u591a\u81ea\u5b9a\u4e49\u7c7b\u578b\u53c2\u6570\u3002"),(0,n.kt)("p",null,"\u5f53\u6211\u4eec\u5728\u8bbe\u8ba1\u4e00\u4e2a\u65b9\u6cd5\u7684\u65f6\u5019\uff0c\u8111\u888b\u4e2d\u5e94\u8be5\u60f3\u5230\u7684\u662f\u5b83\u5e94\u8be5\u662f\u4e00\u4e2a\u901a\u7528\u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u9488\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u5bf9\u8c61\u8bbe\u8ba1\u7684\u65b9\u6cd5\u3002\u6240\u4ee5\u6211\u4eec\u7b2c\u4e00\u4ef6\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u786e\u4fdd\u65b9\u6cd5\u7684\u53c2\u6570\u4e2d\u6ca1\u6709\u4efb\u4f55\u7279\u5b9a\u7684\u81ea\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\uff0c\u9664\u975e\u8fd9\u79cd\u7ed3\u6784\u662f\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3001\u7406\u89e3\u548c\u8ba4\u53ef\u3001\u5e76\u4e14\u4e0d\u4f1a\u9891\u7e41\u6539\u52a8\u7684\u5171\u8bc6\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u60c5\u51b5\u8fd9\u4e9b\u7279\u6b8a\u7684\u6570\u636e\u7c7b\u578b\u5b9e\u9645\u4e0a\u5145\u5f53\u4e86\u4e00\u4e2a\u7c7b\u4f3c\u57fa\u672c\u7c7b\u578b\u7684\u5730\u4f4d\u3002\u4ed6\u53ef\u80fd\u5e94\u7528\u4e8e\u67d0\u4e2a\u9886\u57df\u6216\u8005\u4e00\u4e2a\u884c\u4e1a\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e3a\u4e86\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u800c\u5b9a\u4e49\u7684\u6570\u636e\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u51fd\u6570\u7684\u53c2\u6570\u7c7b\u578b\u90fd\u662f\u5927\u5bb6\u5df2\u77e5\u7684\u201c\u57fa\u672c\u7c7b\u578b\u201d\uff0c\u6211\u4eec\u5728\u4f20\u9012\u53c2\u6570\u7684\u65f6\u5019\u5c31\u4e0d\u518d\u9700\u8981\u5b9a\u4e49\u56fa\u5b9a\u7684\u8c03\u7528\u8005\u53ca\u5904\u7406\u8c03\u7528\u5173\u7cfb\uff0c\u4efb\u4f55\u53ea\u8981\u5177\u6709\u8fd9\u4e9b\u53c2\u6570\u7684\u4e0a\u4e0b\u6587\u5747\u53ef\u4ee5\u968f\u610f\u53d1\u8d77\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"27162-\u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"},"2.7.16.2 \u5bf9\u65b9\u6cd5\u53c2\u6570\u8fdb\u884c\u6a21\u5f0f\u5339\u914d"),(0,n.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u4e0a\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u65b9\u6cd5\u7684\u53c2\u6570\u7c7b\u578b\u5b8c\u5168\u4e0d\u7528\u81ea\u5b9a\u4e49\u7c7b\u578b\uff0c\u6bd4\u5982\u59822.7.17\u8282\u7684\u63cf\u8ff0\u6240\u793a\uff0c\u62e5\u6709\u591a\u4e2a\u51fd\u6570\u53c2\u6570\u5728RealityIS\u4e2d\u662f\u4e0d\u53ef\u63a7\u7684\uff0c\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5c06\u4e00\u4e9b\u6570\u636e\u8fdb\u884c\u805a\u5408\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u53c2\u6570\u53ea\u80fd\u88ab\u5b58\u653e\u5728\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u4e2d\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u51fd\u6570\u7684\u53c2\u6570\u4f7f\u7528\u4e86\u7ed3\u6784\u4f53\uff0c\u5e76\u4e14\u8fd9\u79cd\u7ed3\u6784\u4f53\u5185\u7684\u53d8\u91cf\u5141\u8bb8\u4f7f\u7528\u4e0d\u540c\u7684\u540d\u5b57\uff0c\u90a3\u4e48\u8fd9\u6837\u5c31\u4f1a\u662f\u51fd\u6570\u7684\u5b9a\u4e49\u4e0e\u67d0\u4e2a\u7279\u5b9a\u89e3\u6784\u53d1\u751f\u8026\u5408\uff0c\u4e3a\u6b64\uff0cRealityIS\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u53c2\u89c12.7.12.1\u8282\u3002"),(0,n.kt)("h4",{id:"27163-\u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"},"2.7.16.3 \u6570\u636e\u9a71\u52a8\u7684\u7f16\u7a0b"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e9b\u65b9\u6cd5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u67b6\u6784\u6765\u907f\u514d\u4e00\u4e9b\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u7684\u95ee\u9898\uff0c\u6e38\u620f\u4e2d\u8457\u540d\u7684\u6570\u636e\u9a71\u52a8\u67b6\u6784\u662fECS\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7c7b\u65b9\u6cd5\u6709\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u8f83\u5f31\uff0c\u5f88\u96be\u6bd4\u8f83\u76f4\u89c2\u5730\u770b\u51fa\u6570\u636e\u4e0e\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u800c\u5bf9\u4e8eRealityIS\u6765\u5c06\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u6570\u636e\u4e0e\u51fd\u6570\u7684\u5173\u7cfb\u6765\u63a8\u5bfc\u5f88\u591a\u4e8b\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u529f\u80fd\u4e4b\u95f4\u7684\u5173\u7cfb\u9700\u8981\u5f00\u53d1\u8005\u5c0f\u5fc3\u5730\u7ef4\u62a4\uff0c\u4f8b\u5982\u4f60\u53ef\u80fd\u7ed9\u5b9e\u4f53\u5bf9\u8c61\u6dfb\u52a0\u4e86Component\uff0c\u4f46\u662f\u4f60\u53ef\u80fd\u5fd8\u4e86\u5728System\u6dfb\u52a0\u76f8\u5e94\u7684filter\uff1b\u4f60\u53ef\u80fd\u6b63\u786e\u5730\u5904\u7406\u597d\u4e86System\uff0c\u4f46\u662f\u53ef\u80fd\u5fd8\u4e86\u7ed9\u6b63\u786e\u7684Entity\u6dfb\u52a0\u5bf9\u5e94\u7684Component\u3002\u56e0\u4e3a\u8fd9\u4e24\u8005\u662f\u5206\u79bb\u7684\uff0c\u5f88\u96be\u7ef4\u62a4\u3002")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cECS\u4e2dSystem\u5b9e\u9645\u4e0a\u8026\u5408\u4e86Component\u7684\u7c7b\u578b\u7ed3\u6784\uff0c\u6240\u4ee5Component\u7684\u4fee\u6539\u5fc5\u7136\u6d89\u53ca\u5230System\u7684\u4fee\u6539\u3002"),(0,n.kt)("h4",{id:"27164-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"2.7.16.4 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(9379).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("h4",{id:"27165-\u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"},"2.7.16.5 \u7ec4\u4ef6\u5f15\u7528\u53d8\u91cf"),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h4",{id:"27166-\u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"},"2.7.16.6 \u7528\u6237\u5b9a\u4e49\u5bf9\u8c61"),(0,n.kt)("p",null,"\u4e0e\u4e4b\u5e26\u6765\u7684\u53e6\u4e00\u4e2a\u53d8\u5316\u662f\uff0cRealityIS\u7684\u5bf9\u8c61\u662f\u7531\u7528\u6237\u5b9a\u4e49\u7684\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u3002\u7528\u6237\u5b9a\u4e49\u7684\u6570\u636e\u53ef\u4ee5\u5f62\u6210\u4efb\u610f\u7684\u5206\u5e03\uff0c\u8fd9\u4e5f\u4e3a\u7a0b\u5e8f\u8fdb\u4e00\u6b65\u5e26\u6765\u4e86\u590d\u6742\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"2717-\u51fd\u6570\u53c2\u6570\u6570\u91cf"},"2.7.17 \u51fd\u6570\u53c2\u6570\u6570\u91cf"),(0,n.kt)("p",null,"\u4e0a\u4e00\u8282\u7684\u9762\u5411\u6570\u636e\u7f16\u7a0b\uff0c\u5b83\u5b9e\u9645\u4e0a\u5047\u8bbe\uff0c\u51fd\u6570\u7684\u53c2\u6570\u53ef\u80fd\u4f1a\u6765\u81ea\u4efb\u610f\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u8fd9\u4ece\u7f16\u7a0b\u672c\u8eab\u7684\u6982\u5ff5\u770b\u662f\u6ca1\u95ee\u9898\u7684\uff0c\u4f46\u662f\u56e0\u4e3aRealityIS\u5f15\u5165\u7531\u8fd0\u884c\u65f6\u7ba1\u7406\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u4e4b\u95f4\u66f4\u591a\u662f\u901a\u8fc7\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u7ec4\u5408\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7684\u5bf9\u8c61\u8fdb\u884c\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u6307\u5b9a\u5bf9\u8c61\u7684\u8fc7\u7a0b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u7a0b\u5e8f\u5199\u6b7b\uff0c\u8fd9\u6837\u5c31\u65e0\u6cd5\u52a8\u6001\u9002\u5e94\u53d8\u5316\u7684\u573a\u666f"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u5fc5\u987b\u901a\u8fc7\u7528\u6237\u624b\u52a8\u6307\u5b9a\u51fd\u6570\u4e0e\u4e4b\u4ea4\u4e92\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,"\u8fd9\u4e24\u8005\u90fd\u4f1a\u5bfc\u81f4\u53ef\u4f38\u7f29\u6027\u548c\u6613\u7528\u6027\u95ee\u9898\u3002\u56e0\u6b64RealityIS\u9009\u62e9\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u81ea\u52a8\u5339\u914d\uff0c\u4f46\u8fd9\u5e26\u6765\u591a\u5c42\u5faa\u73af\u7684\u95ee\u9898\u3002\u4f8b\u5982\u5982\u4e0b\u7684\u573a\u666f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6240\u6709\u53d8\u91cf\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6574\u4e2a\u7ec4\u4ef6\u5c31\u662f\u6267\u884c\u4e00\u6b21\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u6709\u4e00\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5219\u9700\u8981\u589e\u52a0\u4e00\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u53e6\u59162\u4e2a\u53c2\u6570\u6765\u81ea\u53e6\u5916\u4e24\u4e2a\u5bf9\u8c61\uff0c\u5c31\u9700\u89812\u5c42\u5faa\u73af"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u7c7b\u63a8\u3002\u3002\u3002")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(9379).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\u5e26\u6765\u4e86\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u65e0\u6cd5\u9884\u77e5\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u60c5\u51b5\u4f1a\u662f\u600e\u6837\uff0c\u8fd9\u4e9b\u53d8\u91cf\u53ef\u80fd\u6765\u81ea\u4efb\u610f\u7684\u7ec4\u5408\uff0c\u56e0\u4e3a\u5bf9\u8c61\u5b8c\u5168\u662f\u7531\u7528\u6237\u6765\u7ec4\u7ec7\u7684\u3002\u4e3a\u4e86\u5e94\u5bf9\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u4f5c\u4e3a\u4e24\u4e2a\u5047\u8bbe\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u4f7f\u7528\u4e862\u4e2a\u4ee5\u4e0a\u7684\u53c2\u6570\uff0c\u6211\u4eec\u9ed8\u8ba4\u8ba4\u4e3a\u5f00\u53d1\u8005\u662f\u5e0c\u671b\u6240\u6709\u8fd9\u4e9b\u53c2\u6570\u90fd\u4f4d\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u6837\u7cfb\u7edf\u53ea\u8981\u7b5b\u9009\u51fa\u540c\u65f6\u5177\u6709\u6240\u6709\u5c5e\u6027\u7684\u5bf9\u8c61\u5373\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u5982\u679c\u7528\u6237\u6307\u5b9a\u4e86\u5916\u90e8\u53d8\u91cf\uff0c\u90a3\u4e48\u4e00\u4e2a\u51fd\u6570\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2a\u5916\u90e8\u53d8\u91cf\uff0c\u56e0\u4e3a\u591a\u91cd\u5d4c\u5957\u7684\u5faa\u73af\u4f1a\u5e26\u6765\u590d\u6742\u6027")),(0,n.kt)("h4",{id:"27171-\u5355\u53c2\u6570\u51fd\u6570"},"2.7.17.1 \u5355\u53c2\u6570\u51fd\u6570"),(0,n.kt)("p",null,"\u9650\u5236\u5355\u53c2\u6570\u51fd\u6570\uff0c\u7406\u8bba\u4e0a\u4e0d\u4f1a\u5bf9\u7a0b\u5e8f\u7684\u8868\u8fbe\u80fd\u529b\u5e26\u6765\u9650\u5236\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u57fa\u7840\u7684\u64cd\u4f5c\u7b26\u90fd\u662f\u4e8c\u5143\u751a\u81f3\u4e00\u5143\u64cd\u4f5c\u7b26\uff0c\u5176\u4ed6\u7684\u64cd\u4f5c\u7b26\u90fd\u53ef\u4ee5\u8f6c\u6362\u4e3a\u4e8c\u5143\u64cd\u4f5c\u7b26\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"AST",src:l(7903).Z,width:"960",height:"514"})),(0,n.kt)("p",null,"\u4f46\u662f\u62c6\u6563\u6210\u4e8c\u5143\u64cd\u4f5c\u786e\u5b9e\u4f1a\u5e26\u6765\u4e00\u5b9a\u590d\u6742\u6027\uff0c\u8fd9\u4e9b\u590d\u6742\u6027\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e0b\u51e0\u4e2a\u65b9\u9762\u8fdb\u884c\u7f13\u89e3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f8\u5173\u5c5e\u6027\u5c3d\u91cf\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u7b26\u53f7\uff0c\u8fd9\u6837\u5c31\u4fdd\u8bc1\u5b83\u4eec\u59cb\u7ec8\u5b58\u5728\u4e8e\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u65f6\uff0c\u6240\u4ee5\u5176\u5b9e\u5c3d\u7ba1\u6700\u7ec8\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u662f\u4e8c\u5143\u7684\uff0c\u4f46\u662f\u5185\u90e8\u7684\u5f88\u591a\u903b\u8f91\u8fd8\u662f\u4e0d\u53d7\u9650\u5236\u7684\uff0c\u8fd9\u6837\u7684\u5173\u7cfb\u5b9e\u9645\u4e0a\u7c7b\u4f3c\u4e8e\u4ea4\u4e92\u7684\u5bf9\u8c61\u662f\u4e24\u4e2a\uff0c\u8fd9\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e5f\u662f\u6bd4\u8f83\u5ba2\u89c2\u7684\uff0c\u4ea4\u6613\u7684\u5bf9\u8c61\u4e4b\u95f4\u901a\u5e38\u90fd\u662f\u4e24\u4e2a\u4eba\uff0c\u591a\u8fb9\u534f\u8bae\u7684\u673a\u5236\u662f\u6bd4\u8f83\u5c11\u7684\uff0c\u591a\u8fb9\u7684\u673a\u5236\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5404\u79cd\u5bfb\u627e\u4e00\u4e2a\u4ee3\u7406\u51fa\u6765\u4ea4\u6613\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u5185\u90e8\u53d8\u91cf\u8fdb\u884c\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f52\u5e76\u7684\u4e8b\u60c5\u7531\u7ec4\u4ef6\u5f00\u53d1\u8005\u6765\u9690\u85cf\u3002\u7ec4\u4ef6\u5f00\u53d1\u8005\u901a\u8fc7\u4e00\u4e9b\u5185\u90e8\u79c1\u6709\u53d8\u91cf\u6765\u9690\u85cf\u5927\u91cf\u5f52\u5e76\u7684\u7ec6\u8282\uff0c\u4f7f\u5f97\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u770b\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u6574\u4f53\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("h3",{id:"2718-\u54cd\u5e94\u5f0f\u7f16\u7a0b"},"2.7.18 \u54cd\u5e94\u5f0f\u7f16\u7a0b"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bb9\u6613\u5bfc\u81f4\u5e76\u53d1\uff0c\u56e0\u6b64RealityIS\u4e3b\u8981\u662f\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u4f46\u662f\u4e0e\u5176\u4ed6\u5b8c\u5168\u901a\u8fc7\u6d88\u606f\u901a\u8fc7\u7684\u673a\u5236\u4e0d\u540c\uff0cRealityIS\u80fd\u591f\u5b9e\u73b0\u539f\u751f\u7684\u53c2\u6570\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4f46\u4e0e\u4e4b\u5e26\u6765\u7684\u95ee\u9898\u662f\u539f\u5b50\u6027\uff0c\u6bd4\u5982\u5728Erlang\u5355\u4e2a\u8fdb\u7a0b\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\uff0c\u4f46\u662fRealityIS\u7684\u5355\u4e2a\u8fdb\u7a0b\u53ea\u662f\u6267\u884c\u4e0a\u72ec\u7acb\uff0c\u4f46\u662f\u8ddf\u5176\u4ed6\u7ec4\u4ef6\u5b58\u5728\u8f83\u5f3a\u7684\u5173\u8054\u3002\u8fd9\u65b9\u9762\u4e3b\u8981\u901a\u8fc7\u5b58\u6863\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2719-\u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"},"2.7.19 \u7a0b\u5e8f\u4e2d\u7684\u52a8\u6001\u6027"),(0,n.kt)("p",null,"\u786c\u4ef6\u67b6\u6784\u672c\u8eab\u5e76\u6ca1\u6709\u9650\u5236\u548c\u5b9a\u4e49\u4e00\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u600e\u6837\u7ec4\u7ec7\uff0c\u5b83\u8ddf\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u662f\u5206\u79bb\u7684\uff0c\u786c\u4ef6\u53ea\u9700\u8981\u77e5\u9053\u6211\u81ea\u6267\u884c\u67d0\u4e2a\u6307\u4ee4\u7684\u65f6\u5019\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u4ee5\u53ca\u5c06\u6570\u636e\uff08\u8ba1\u7b97\u7ed3\u679c\u6216\u4e2d\u95f4\u53d8\u91cf\uff09\u5199\u56de\u5230\u54ea\u4e2a\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u7a0b\u5e8f\u4ee3\u7801\u6587\u4ef6\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e86\u4e00\u5b9a\u7684\u5b9a\u4e49\uff0c\u6bd4\u5982\u52a0\u8f7d\u5e76\u6267\u884c\u5305\u542b\u673a\u5668\u7801\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002\u7f16\u8bd1\u5668\u5e94\u8be5\u5c06\u7a0b\u5e8f\u4ee3\u7801\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6216\u591a\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5728\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e2d\uff0c\u7a0b\u5e8f\u88ab\u7ec4\u7ec7\u4e3a\u4e00\u4e9b\u65b9\u6cd5\u6784\u6210\u7684\u4ee3\u7801\u5757\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u8fd9\u4e9b\u4ee3\u7801\u5757\u751f\u6210\u5730\u5740\uff0c\u5e76\u5c06\u5730\u5740\u6620\u5c04\u5230\u7a0b\u5e8f\u4e2d\u7684\u7b26\u53f7\u5bf9\u5e94\u7684\u5730\u5740\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u4e5f\u6ca1\u6709\u5bf9\u7a0b\u5e8f\u6e90\u4ee3\u7801\u7684\u7ec4\u7ec7\u8fdb\u884c\u4e00\u5b9a\u7684\u7ea6\u675f\uff0c\u4f8b\u5982\u7a0b\u5e8f\u4e2d\u5bf9\u4efb\u4f55\u4ee3\u7801\u5757\u6216\u8005\u53d8\u91cf\u7684\u5730\u5740\u6620\u5c04\u8fd8\u662f\u7531\u7f16\u8bd1\u5668\u51b3\u5b9a\u7684\u3002\u800c\u8fd9\u4e9b\u4ee3\u7801\u5757\u672c\u8eab\u662f\u600e\u4e48\u751f\u6210\u7684\uff0c\u4f8b\u5982\u662f\u7531OOP\u4e2d\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u8fd8\u662f\u7531\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u6241\u5e73\u4e0e\u6570\u636e\u72b6\u6001\u72ec\u7acb\u7684\u7ec4\u7ec7\u5173\u7cfb\uff0c\u8fd9\u4e9b\u90fd\u6ca1\u6709\u4efb\u4f55\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u548c\u7f16\u8bd1\u7406\u8bba\u4e0a\u53ef\u4ee5\u662f\u4efb\u610f\u7684\uff0c\u9762\u5411\u5bf9\u8c61\u6216\u8005\u51fd\u6570\u5f0f\u7f16\u7a0b\u90fd\u53ea\u662f\u5176\u4e2d\u4e00\u79cd\u7279\u6b8a\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u7406\u8bba\u4e0a\uff0c\u6784\u5efa\u4e00\u79cd\u6781\u5ea6\u52a8\u6001\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u65b9\u5f0f\u662f\u53ef\u884c\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u7a0b\u5e8f\u7684\u7f16\u8bd1\u8fc7\u7a0b\uff0c\u65e9\u671f\u7684\u7f16\u7a0b\u8bed\u8a00\u5927\u591a\u662f\u9759\u6001\u7684\uff0c\u5373\u4e00\u65e6\u7f16\u8bd1\u5b8c\u6210\u4e4b\u540e\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u90fd\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u4e8c\u8fdb\u5236\u673a\u5668\u7801\u3002\u5982\u679c\u9700\u8981\u5bf9\u4ee3\u7801\u8fdb\u884c\u4fee\u6539\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u8fdb\u884c\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7a0b\u5e8f\u4ecd\u7136\u5177\u6709\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f8b\u5982\u4f60\u53ef\u4ee5\u58f0\u660e\u4e00\u4e2a\u6267\u884c\u67d0\u4e2a\u65b9\u6cd5\u7684\u5730\u5740\u6307\u9488\uff0c\u5982\u679c\u4f60\u77e5\u9053\u81ea\u5df1\u7a0b\u5e8f\u4e2d\u6709\u591a\u4e2a\u65b9\u6cd5\u5305\u542b\u76f8\u540c\u7684\u7b7e\u540d\uff0c\u90a3\u4e48\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u65b9\u6cd5\u7684\u5185\u5b58\u5730\u5740\u8d4b\u503c\u7ed9\u4e00\u4e2a\u76f8\u540c\u7684\u53d8\u91cf\uff0c\u56e0\u6b64\u7a0b\u5e8f\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u5730\u5bf9\u4e0d\u540c\u7684\u65b9\u6cd5\u8fdb\u884c\u8c03\u7528\u3002\u4e0e\u4e4b\u7c7b\u4f3c\uff0c\u4e00\u4e2a\u6307\u9488\u4e5f\u53ef\u4ee5\u6267\u884c\u591a\u4e2a\u5177\u6709\u76f8\u540c\u7c7b\u578b\u5b9a\u4e49\u7684\u5bf9\u8c61\uff0c\u8fd0\u884c\u65f6\u5bf9\u8fd9\u4e9b\u51fd\u6570\u5bf9\u8c61\u7684\u52a8\u6001\u65b9\u6cd5\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u8fd9\u6837\u7684\u52a8\u6001\u80fd\u529b\u662f\u975e\u5e38\u6709\u9650\u7684\uff0c\u672c\u8d28\u4e0a\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u903b\u8f91\u5b9a\u4e49\u662f\u56fa\u5b9a\u7684\uff0c\u7a0b\u5e8f\u53ea\u662f\u5728\u67d0\u4e9b\u4ee3\u7801\u5757\u6267\u884c\u7684\u5148\u540e\u987a\u5e8f\u4e0a\u80fd\u591f\u8fdb\u884c\u4e00\u5b9a\u7684\u81ea\u7531\u7ec4\u5408\u800c\u5df2\u3002"),(0,n.kt)("h4",{id:"27191-\u52a8\u6001\u7684\u91cd\u8981\u6027"},"2.7.19.1 \u52a8\u6001\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u968f\u7740\u4e92\u64cd\u4f5c\u3001\u53ef\u6269\u5c55\u6027\u7b49\u9700\u6c42\u8d8a\u6765\u8d8a\u5927\uff0c\u4ee5\u53ca\u90e8\u7f72\u5230\u7528\u6237\u73af\u5883\u7684\u6210\u672c\u3002\u6211\u4eec\u8d8a\u6765\u8d8a\u9700\u8981\u7a0b\u5e8f\u5177\u6709\u66f4\u5f3a\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u5df2\u6709\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u7528\u4e8e\u5b9e\u73b0\u4e00\u4e9b\u52a8\u6001\u6027\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5bf9\u4e8e\u672a\u6765\u800c\u8a00\uff0c\u6700\u91cd\u8981\u7684\u52a8\u6001\u6027\u5728\u4e8e\uff0c\u7531\u4e8e\u6240\u6709\u5b50\u7a0b\u5e8f\u672c\u8d28\u4e0a\u5904\u4e8e\u4e00\u4e2a\u5171\u540c\u7684\u5185\u5b58\u73af\u5883\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u65b9\u5f0f\u4f1a\u53d1\u751f\u6839\u672c\u6027\u7684\u53d8\u5316\uff0c\u8fd9\u4e9b\u53d8\u5316\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4ee3\u7801\u672c\u8eab\u975e\u5e38\u5de8\u5927\uff0c\u6240\u4ee5\u6ca1\u6709\u529e\u6cd5\u7f16\u8bd1\u4e3a\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u603b\u7684\u7a0b\u5e8f\u6570\u91cf\u5de8\u5927\uff0c\u56e0\u6b64\u5b83\u4e0d\u53ef\u80fd\u5168\u90e8\u52a0\u8f7d\u5230\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5fc5\u987b\u8981\u8fdb\u884c\u6309\u9700\u52a0\u8f7d"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u610f\u5473\u7740\u9700\u8981\u5206\u6790\u7528\u6237\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u52a8\u6001\u5730\u51b3\u5b9a\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u4ee3\u7801\u7ec4\u7ec7\u610f\u5473\u7740\uff0c\u4f20\u7edf\u7a0b\u5e8f\u4e2d\u90a3\u4e9b\u7c7b\u578b\u67e5\u8be2\u3001\u5185\u5b58\u5730\u5740\u8ba1\u7b97\u90fd\u8981\u52a8\u6001\u8ba1\u7b97")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u9700\u6c42\u4e0e\u73b0\u4ee3\u8ba1\u7b97\u67b6\u6784\u662f\u5929\u751f\u4e0d\u517c\u5bb9\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u8981\u5f00\u53d1\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"RealityIS.005",src:l(2234).Z,width:"1920",height:"1080"})),(0,n.kt)("h4",{id:"27192-\u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"},"2.7.19.2 \u52a8\u6001\u6027\u7684\u672c\u8d28\u548c\u5206\u7c7b"),(0,n.kt)("p",null,"\u52a8\u6001\u6027\u662f\u6307\u4e00\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u4e0d\u5fc5\u6309\u7167\u5b8c\u5168\u7f16\u8bd1\u597d\u7684\u673a\u5668\u7801\u6267\u884c\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u52a8\u6001\u6027\u5f80\u5f80\u610f\u5473\u7740\u80fd\u591f\u5bf9\u5df2\u7ecf\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u6269\u5c55\u6216\u8005\u66f4\u65b0\u3002\u524d\u9762\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5bf9\u4e8e\u9759\u6001\u8bed\u8a00\u800c\u8a00\uff0c\u5b83\u4e5f\u5b58\u5728\u7740\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u8fd9\u53ef\u4ee5\u79f0\u4e3a\u903b\u8f91\u4e0a\u7684\u52a8\u6001\u6027\uff0c\u5373\u6240\u6709\u903b\u8f91\u662f\u56fa\u5b9a\u7f16\u8bd1\u597d\u7684\uff0c\u53ea\u662f\u7a0b\u5e8f\u6839\u636e\u8fd0\u884c\u65f6\u73af\u5883\u52a8\u6001\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e00\u822c\u90fd\u662f\u57fa\u4e8e\u6307\u9488\u6765\u5b9e\u73b0\u7684\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u9009\u62e9\u7c7b\u578b")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u52a8\u6001\u6027\u4e25\u683c\u6765\u8bf4\u5bf9\u7a0b\u5e8f\u7684\u53ef\u6269\u5c55\u80fd\u529b\u5e76\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u9664\u975e\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5df2\u7ecf\u5305\u542b\u6240\u6709\u53ef\u80fd\u7684\u529f\u80fd\uff0c\u4f46\u663e\u7136\u90a3\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u56e0\u6b64\u6211\u4eec\u66f4\u5e38\u671f\u5f85\u7684\u52a8\u6001\u6027\uff0c\u66f4\u591a\u662f\u6307\u6269\u5c55\u52a8\u6001\u6027\uff0c\u5373\u80fd\u591f\u52a8\u6001\u52a0\u5165\u4e00\u4e9b\u4e4b\u524d\u7f16\u8bd1\u597d\u7684\u7a0b\u5e8f\u4e0d\u5177\u5907\u7684\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6269\u5c55\u52a8\u6001\u6027\u5305\u62ec\u53ef\u4ee5\u901a\u8fc7\u5f88\u591a\u65b9\u5f0f\u8fdb\u884c\u5b9e\u73b0\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u7684\u7a0b\u5e8f\u5e93\uff0c\u53ef\u4ee5\u901a\u8fc7\u94fe\u63a5\u8fc7\u7a0b\u52a8\u6001\u52a0\u8f7d\u7b2c\u4e09\u65b9\u9759\u6001\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u79cd\u4e00\u822c\u901a\u8fc7\u865a\u62df\u673a\u5bf9\u52a8\u6001\u7684\u51fd\u6570\u548c\u7c7b\u578b\u8fdb\u884c\u89e3\u91ca")),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u9759\u6001\u7a0b\u5e8f\u5e93\uff0c\u5b83\u672c\u8d28\u4e0a\u662f\u5229\u7528\u524d\u9762\u7684\u903b\u8f91\u52a8\u6001\u6027\u80fd\u529b\u6765\u5b9e\u73b0\u7684\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u5e93\u4e2d\u53ef\u80fd\u5305\u62ec\u65b0\u7684\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\uff0c\u4f46\u662f\u5b83\u4eec\u5747\u5df2\u7ecf\u7f16\u8bd1\u4e3a\u9759\u6001\u7684\u673a\u5668\u7801\uff0c\u5373\u81ea\u8eab\u5df2\u7ecf\u5305\u542b\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u673a\u5236\uff0c\u4f8b\u5982\u5bf9\u8fd9\u4e9b\u7c7b\u578b\u8fdb\u884c\u89e3\u6790\u4ee5\u8ba1\u7b97\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u800c\u52a8\u6001\u811a\u672c\u8bed\u8a00\u5219\u4e0d\u540c\uff0c\u7531\u4e8e\u5176\u4e2d\u6d89\u53ca\u7684\u65b0\u7684\u6570\u636e\u7c7b\u578b\u6216\u8005\u51fd\u6570\u5b9a\u4e49\u6ca1\u6709\u8fb9\u7f16\u8bd1\u4e3a\u9759\u6001\u673a\u5668\u7801\uff0c\u6240\u4ee5\u8fd9\u4e9b\u811a\u672c\u8bed\u8a00\u9700\u8981\u88ab\u4e00\u79cd\u79f0\u4e3a\u865a\u62df\u673a\u7684\u7a0b\u5e8f\u8fdb\u884c\u52a8\u6001\u7684\u89e3\u91ca\uff0c\u8fd9\u4e2a\u89e3\u91ca\u7684\u8fc7\u7a0b\u5b9e\u9645\u4e0a\u5c31\u662f\u52a8\u6001\u5730\u6a21\u62df\u7f16\u8bd1\u7684\u8fc7\u7a0b\uff0c\u5bf9\u7c7b\u578b\u7684\u7ed3\u6784\u8fdb\u884c\u67e5\u8be2\u4ee5\u8ba1\u7b97\u5730\u5740\u3002\u4f46\u7531\u4e8e\u8fd9\u4e9b\u5b9a\u4e49\u7684\u51fd\u6570\u5e76\u6ca1\u6709\u88ab\u7f16\u8bd1\u4e3a\u673a\u5668\u7801\uff0c\u800c\u662f\u7531\u865a\u62df\u673a\u52a8\u6001\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6267\u884c\u8fc7\u7a0b\u5e76\u4e0d\u80fd\u591f\u5f88\u597d\u7684\u5229\u7528\u5230\u786c\u4ef6\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u4f8b\u5982\u6307\u4ee4\u7684\u9884\u53d6\uff0c\u5206\u652f\u9884\u6d4b\u7b49\u7b49\u3002\u56e0\u6b64\u52a8\u6001\u811a\u672c\u8bed\u8a00\u7684\u6027\u80fd\u901a\u5e38\u6bd4\u673a\u5668\u7801\u8981\u4f4e\u5f97\u591a\u3002"),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u8fd9\u4e9b\u52a8\u6001\u7684\u80fd\u529b\uff0c\u52a0\u4e0a\u5408\u9002\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u53ef\u4ee5\u8bbe\u8ba1\u51fa\u5177\u6709\u6bd4\u8f83\u597d\u6269\u5c55\u6027\u7684\u7a0b\u5e8f\u3002\u51e0\u4e2a\u4f8b\u5b50\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f20\u7edf\u6e38\u620f\u5f15\u64ce\u4e2d\u7684\u63d2\u4ef6\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982Lua\u811a\u672c\u8bed\u8a00\u53ef\u4ee5\u589e\u52a0\u65b0\u7684\u903b\u8f91\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u5728Erlang\u4e2d\uff0c\u7531\u4e8e\u6bcf\u4e2a\u8fdb\u7a0b\u542f\u52a8\u65f6\u59cb\u7ec8\u52a0\u8f7d\u6700\u65b0\u7684\u811a\u672c\u4ee3\u7801\uff0c\u56e0\u6b64\u53ef\u4ee5\u5b9e\u73b0\u52a8\u6001\u66f4\u65b0\u3002\u6ce8\u610f\u8fd9\u79cd\u673a\u5236\u4e0eLua\u76f8\u6bd4\u5b58\u5728\u672c\u8d28\u67b6\u6784\u4e0a\u7684\u533a\u522b\uff0cLua\u7684\u70ed\u52a0\u8f7d\u53ea\u662f\u4e00\u79cd\u8bed\u8a00\u7684\u529f\u80fd\uff0c\u4f46\u662f\u8fd9\u4e2a\u52a0\u8f7d\u7684\u8fc7\u7a0b\u6216\u8005\u8bf4\u67b6\u6784\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u53bb\u6784\u5efa\u3002\u4e0d\u540c\u7684\u5e94\u7528\u5f80\u5f80\u4f1a\u8bbe\u8ba1\u51fa\u4e0d\u540c\u7684\u70ed\u66f4\u65b0\u673a\u5236\u3002\u800cErlang\u662f\u4e00\u79cd\u5185\u5efa\u4e8e\u8bed\u8a00\u7684\u673a\u5236\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u5c06\u5bf9\u5e94\u76ee\u5f55\u4e0b\u7684\u4ee3\u7801\u66f4\u65b0\uff0cErlang\u4f1a\u81ea\u884c\u52a0\u8f7d\uff0c\u66f4\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u505a\u989d\u5916\u7684\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u6df1\u5165\u601d\u8003\u52a8\u6001\u6027\u7684\u672c\u8d28\uff0c\u6216\u8005\u8bf4\u7406\u89e3\u5b83\u8981\u89e3\u51b3\u7684\u6838\u5fc3\u95ee\u9898\uff0c\u5927\u6982\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u52a8\u66f4\u65b0")),(0,n.kt)("p",null,"\u53bb\u8026\u5408\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u673a\u5236\u672c\u8eab\u770b\u5f85\u52a8\u6001\u6027\uff0c\u8bed\u8a00\u5c42\u9762\u7684\u52a8\u6001\u6027\u5927\u591a\u6d89\u53ca\u67d0\u79cd\u89e3\u8026\u7684\u64cd\u4f5c\uff0c\u4f7f\u8fd0\u884c\u65f6\u53ef\u4ee5\u52a8\u6001\u66ff\u6362\u4e00\u4e9b\u65b9\u6cd5\u6216\u8005\u8bf4\u89e3\u6790\u67d0\u4e9b\u65b0\u7684\u7c7b\u578b\u3002\u53ef\u6269\u5c55\u6027\u662f\u4ece\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u8005\u7684\u89d2\u5ea6\u770b\u5f85\u52a8\u6001\u6027\uff0c\u5b83\u5f80\u5f80\u662f\u8fd0\u7528\u524d\u9762\u8bed\u8a00\u63d0\u4f9b\u7684\u89e3\u8026\u673a\u5236\u6765\u5b9e\u73b0\u7684\u67d0\u79cd\u67b6\u6784\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"dynamic",src:l(7635).Z,width:"2022",height:"400"})),(0,n.kt)("p",null,"\u800c\u81ea\u52a8\u66f4\u65b0\u662f\u9488\u5bf9\u7528\u6237\u800c\u8a00\u7684\uff0c\u5b83\u5177\u6709\u6700\u9ad8\u7684\u8981\u6c42\u3002\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u53d7\u9650\u4e8e\u7f16\u7a0b\u8bed\u8a00\u7684\u67b6\u6784\uff0c\u5f53\u7a0b\u5e8f\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u7528\u6237\u4e0d\u5f97\u4e0d\u91cd\u65b0\u5b89\u88c5\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\u867d\u7136\u50cf\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u4f1a\u4f7f\u7528\u5982Lua\u8fd9\u6837\u7684\u52a8\u6001\u811a\u672c\u8bed\u8a00\u6765\u5b9e\u73b0\u67d0\u4e9b\u7a0b\u5ea6\u7684\u70ed\u66f4\u65b0\uff0c\u4f46\u662f\u5927\u7684\u529f\u80fd\u672c\u8d28\u4e0a\u8fd8\u662f\u9700\u8981\u91cd\u65b0\u4e0b\u8f7d\u548c\u5b89\u88c5\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u73b0\u5728\u5982App Store\u7b49\u4f7f\u7528\u4e00\u79cd\u81ea\u52a8\u66f4\u65b0\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u8fdb\u884c\u5e94\u7528\u66f4\u65b0\uff0c\u770b\u8d77\u6765\u5b9e\u73b0\u4e86\u5e94\u7528\u7684\u81ea\u52a8\u66f4\u65b0\uff0c\u56e0\u4e3a\u5bf9\u7528\u6237\u57fa\u672c\u4e0a\u6ca1\u6709\u9020\u6210\u4ec0\u4e48\u56f0\u6270\u3002\u4f46\u662f\u8fd9\u4e2a\u95ee\u9898\u5176\u5b9e\u672c\u8d28\u4e0a\u8fd8\u4e0d\u662f\u7528\u6237\u5c42\u9762\u7684\u95ee\u9898\uff0c\u5b83\u662f\u7531\u7528\u6237\u9700\u6c42\u63a8\u751f\u51fa\u7684\u5f00\u53d1\u8005\u7684\u95ee\u9898\u3002\u5c3d\u7ba1\u5bf9\u6574\u4e2a\u6b63\u5e38\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u91cd\u65b0\u53d1\u5e03\u6574\u4e2a\u7a0b\u5e8f\u4e0d\u4f1a\u5bf9\u7528\u6237\u9020\u6210\u56f0\u6270\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u5728\u4e24\u4e2a\u65b9\u9762\u505a\u7684\u66f4\u597d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u80fd\u5426\u503c\u4fee\u6539\u90e8\u5206\u4ee3\u7801\uff0c\u7136\u540e\u4e0d\u9700\u8981\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7f16\u8bd1\uff0c\u5c31\u53ef\u4ee5\u6700\u7b80\u5355\u5730\u53d1\u5e03\u66f4\u65b0\u3002\u5f53\u7136\u8fd9\u91cc\u8bf4\u7684\u662f\u5b8c\u6574\u529f\u80fd\u7684\u4fee\u6539\uff0c\u800c\u4e0d\u662f\u5982Lua\u90a3\u6837\u7684\u6269\u5c55\u4fee\u6539\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u7684\u73af\u5883\uff0c\u600e\u6837\u8ba9\u76f8\u4e92\u5f15\u7528\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u6267\u884c\u66f4\u597d\u5730\u534f\u4f5c\u66f4\u65b0")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\uff0c\u5f53\u524d\u7684\u8bed\u8a00\u673a\u5236\u51e0\u4e4e\u662f\u505a\u4e0d\u5230\u7684\uff0c\u8fd9\u9700\u8981\u5bf9\u8bed\u8a00\u548c\u7f16\u8bd1\u8fc7\u7a0b\u8fdb\u884c\u91cd\u6784\u3002"),(0,n.kt)("h4",{id:"27193-\u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"},"2.7.19.3 \u52a8\u6001\u7684\u9650\u5236\u548c\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u901a\u8fc7\u4e0a\u8ff0\u7684\u4e00\u4e9b\u673a\u5236\uff0c\u73b0\u4ee3\u7684\u8ba1\u7b97\u67b6\u6784\u4e5f\u80fd\u591f\u5b9e\u73b0\u4e00\u5b9a\u7684\u52a8\u6001\u6027\uff0c\u4f46\u57fa\u672c\u4e0a\u73b0\u5728\u7684\u52a8\u6001\u6027\u67b6\u6784\u672c\u8d28\u4e0a\u4e0d\u662f\u4e3a\u4e86\u771f\u6b63\u7684\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u800c\u8bbe\u8ba1\u7684\uff0c\u5b83\u4eec\u66f4\u591a\u662f\u4ece\u7a0b\u5e8f\u8bed\u8a00\u7684\u89d2\u5ea6\u53bb\u8bbe\u8ba1\uff0c\u53ea\u662f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b9\u4fbf\u5f00\u53d1\u8005\u8fdb\u884c\u4e00\u5b9a\u9650\u5ea6\u6269\u5c55\u7684\u673a\u5236\u3002\u4f8b\u5982\u65b0\u7684\u811a\u672c\u4e0d\u80fd\u4efb\u610f\u8bbf\u95ee\u4e4b\u524d\u5185\u5b58\u6570\u636e\uff0c\u5f80\u5f80\u90fd\u662f\u9884\u7559\u56fa\u5b9a\u7684\u63a5\u53e3\u3002\u8fd9\u4f7f\u5f97\u65b0\u7684\u811a\u672c\u57fa\u672c\u4e0a\u53ea\u80fd\u7528\u6765\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u6269\u5c55\u65b0\u529f\u80fd\uff0c\u5e76\u4e14\u8fd9\u4e9b\u65b0\u529f\u80fd\u5bf9\u4e4b\u524d\u7684\u4ee3\u7801\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u3002"),(0,n.kt)("h4",{id:"27194-\u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"},"2.7.19.4 \u7a0b\u5e8f\u65b9\u6cd5\u7684\u52a8\u6001\u7ec4\u7ec7"),(0,n.kt)("p",null,"\u5982\u679c\u6240\u6709\u7684\u5b50\u7a0b\u5e8f\u5728\u540c\u4e00\u4e2a\u201c\u5185\u5b58\u201d\u6216\u8005\u6267\u884c\u73af\u5883\u8fd0\u884c\uff0c\u4f7f\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u8d85\u7ea7\u5de8\u5927\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u5176\u4e2d\u5305\u542b\u5343\u5343\u4e07\u4e07\u751a\u81f3\u4e0a\u4ebf\u7ea7\u7684\u4ee3\u7801\u6587\u4ef6\u3002\u90a3\u4e48\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u7528\u6237\u800c\u8a00\uff0cTA\u6240\u9700\u8981\u8fd0\u884c\u5b9e\u9645\u8ba1\u7b97\u7684\u201c\u7a0b\u5e8f\u201d\u53ea\u80fd\u662f\u8fd9\u4e9b\u6240\u6709\u7a0b\u5e8f\u4e2d\u7684\u5f88\u5c0f\u4e00\u90e8\u5206\u3002\u540c\u6837\u5f88\u663e\u7136\u7684\u662f\uff0c\u8fd9\u4e2a\u7528\u6237\u201c\u7a0b\u5e8f\u201d\u5fc5\u7136\u662f\u52a8\u6001\u751f\u6210\u7684\u3002"),(0,n.kt)("p",null,"\u600e\u4e48\u52a8\u6001\u7ec4\u5408\u67d0\u4e2a\u7528\u6237\u5b9a\u4e49\u7684\u201c\u7a0b\u5e8f\u201d\uff0c\u5c31\u6210\u4e3a\u52a8\u6001\u6027\u7684\u6700\u5927\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u56e0\u4e3a\u52a8\u6001\u7ec4\u5408\u7a0b\u5e8f\uff0c\u4e0d\u50cf\u60f3\u8c61\u4e2d\u90a3\u4e48\u7b80\u5355\uff0c\u6bd4\u5982\u8bf4\u6bcf\u4e2a\u4ee3\u7801\u6587\u4ef6\u8bbe\u7f6e\u4e00\u4e2aID\uff0c\u7136\u540e\u5efa\u7acb\u4e00\u4e2a\u7528\u6237\u7a0b\u5e8f\u6570\u636e\u5e93\u3002\u56e0\u4e3a\u7a0b\u5e8f\u4ee3\u7801\u603b\u662f\u5173\u8054\u7740\u7c7b\u578b\uff0c\u7c7b\u578b\u548c\u65b9\u6cd5\u5f15\u7528\u5f80\u5f80\u6765\u81ea\u5176\u4ed6\u6587\u4ef6\uff0c\u56e0\u6b64\u7a0b\u5e8f\u7ed3\u6784\u672c\u8eab\u662f\u4e00\u4e2a\u53ca\u5176\u9519\u7efc\u590d\u6742\u7684\u7cfb\u7edf\uff0c\u6839\u672c\u4e0d\u53ef\u80fd\u901a\u8fc7\u6587\u4ef6\u7ea7\u522b\u8fdb\u884c\u5212\u5206\u548c\u7ec4\u5408\u3002\u800c\u5982\u679c\u8981\u901a\u8fc7\u4f20\u7edf\u7684\u7f16\u8bd1\u89e3\u91ca\u673a\u5236\uff1a\u5373\u901a\u8fc7\u9996\u5148\u6784\u5efa\u6240\u6709\u7c7b\u578b\u5b9a\u4e49\u7684\u7b26\u53f7\u8868\uff0c\u7136\u540e\u901a\u8fc7\u7b26\u53f7\u8868\u67e5\u8be2\u548c\u8ba1\u7b97\u5730\u5740\u7a7a\u95f4\uff0c\u8fd9\u5c31\u51e0\u4e4e\u7b49\u4e8e\u6bcf\u4e00\u6b21\u8fd0\u884c\u7528\u6237\u7a0b\u5e8f\u5c31\u9700\u8981\u52a0\u8f7d\u89e3\u6790\u51e0\u4e4e\u6240\u6709\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5e94\u5bf9\u548c\u7ba1\u7406\u8fd9\u79cd\u65b0\u7684\u9700\u6c42\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\u65b9\u5f0f\u9700\u8981\u53d1\u751f\u5f88\u5927\u7684\u53d8\u5316\u3002\u8fc7\u53bb\u7684\u601d\u7ef4\u662f\u6211\u4eec\u4e0d\u8003\u8651\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u53ea\u9700\u8981\u8003\u8651\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u7c7b\u578b\u5f15\u7528\u5b89\u5168\uff0c\u7136\u540e\u4f9d\u9760\u7f16\u8bd1\u5668\u6765\u5bf9\u7a0b\u5e8f\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u4ee3\u7801\u8c03\u7528\u987a\u5e8f\u8fdb\u884c\u7ba1\u7406\u548c\u7ec4\u7ec7\u3002\u800c\u73b0\u5728\u6211\u4eec\u9700\u8981\u5728\u4e0d\u5f15\u5165\u6240\u6709\u4ee3\u7801\u7684\u60c5\u51b5\u4e0b\u63d0\u524d\u8ba1\u7b97\u6309\u9700\u52a0\u8f7d\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u8fd9\u5c31\u9700\u8981\u5728\u4ee3\u7801\u7ec4\u7ec7\u4e0a\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4f7f\u5f97\u52a0\u8f7d\u5668\u53ef\u4ee5\u76f4\u63a5\u77e5\u9053\u4ec5\u9700\u8981\u52a0\u8f7d\u54ea\u4e9b\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\uff0c\u4ece\u8bed\u8a00\u673a\u5236\u4e2d\u62bd\u53d6\u51fa\u6765\uff0c\u7136\u540e\u5b58\u81f3\u6570\u636e\u5e93\u4e2d\u3002\u4f46\u662f\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u4e0d\u662f\u90a3\u4e48\u597d\u8bc6\u522b\u7684\uff0c\u5e76\u4e14\u6211\u4eec\u4e0d\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u8c03\u6574\u6216\u91cd\u7ec4\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005\u53ef\u80fd\u5bf9\u4ee3\u7801\u8fdb\u884c\u66f4\u65b0\u3002\u6240\u4ee5\u597d\u7684\u601d\u8def\u662f\u6211\u4eec\u9700\u8981\u5bf9\u4ee3\u7801\u7684\u7ec4\u7ec7\u65b9\u5f0f\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ee5\u4fbf\u4e8e\u80fd\u591f\u8fd9\u79cd\u7ec4\u7ec7\u672c\u8eab\u80fd\u591f\u5e2e\u52a9\u6784\u5efa\u8fd9\u79cd\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8868\u73b0\u4e3a\u5b83\u4f7f\u7528\u7684\u53c2\u6570\uff0c\u800c\u8fd9\u4e2a\u53c2\u6570\u5e76\u4e0d\u662f\u7531\u5f00\u53d1\u8005\u968f\u4fbf\u5b9a\u4e49\u7684\uff08\u5426\u5219\u5b83\u53ef\u4ee5\u5b9a\u4e49\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u7cfb\u7edf\u6839\u672c\u65e0\u6cd5\u5bf9\u5176\u8fdb\u884c\u63d0\u53d6\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u90a3\u6837\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4eec\u6765\u81ea\u4e8e\u56fa\u5b9a\u7684\u4f4d\u7f6e\uff0c\u5171\u4eab\u7b26\u53f7\u8868\u5bf9\u5e94\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5b83\u4e0e\u5176\u4ed6\u7a0b\u5e8f\u4e4b\u95f4\u90fd\u9075\u5faa\u76f8\u540c\u7684\u7b26\u53f7\u5b9a\u4e49")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u4e24\u70b9\u5c31\u4f7f\u5f97\u7cfb\u7edf\u53ef\u4ee5\u62bd\u53d6\u51fa\u4efb\u4f55\u7528\u6237\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8fd9\u662fRealityIS\u5b9e\u73b0\u52a8\u6001\u6027\u7684\u6838\u5fc3\u56e0\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u5b83\u5c06\u7ec4\u4ef6\u7684\u65b9\u6cd5\u4e0e\u6570\u636e\u4e00\u4e00\u5173\u8054\u8d77\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u5efa\u7acb\u5171\u540c\u9075\u5faa\u7684\u7b26\u53f7\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u81ea\u884c\u4efb\u4f55\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5c31\u4f7f\u5f97\u5bf9\u8c61\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u53ef\u4ee5\u63a8\u7b97\u51fa\u6765\u7684")),(0,n.kt)("p",null,"\u5c06\u7a0b\u5e8f\u8bed\u8a00\u7684\u4f9d\u8d56\u5173\u7cfb\u62bd\u53d6\u51fa\u6765\u4e4b\u540e\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u53d1\u751f\u4e86\u975e\u5e38\u5927\u7684\u53d8\u5316\uff0c\u4ece\u603b\u4f53\u4e0a\u770b\uff0c\u5b83\u53d8\u6210\u4e86\u4e00\u79cd\u590d\u6742\u7684\u5173\u7cfb\u8868\uff0c\u5176\u4e2d\u7684\u4efb\u610f\u7ec4\u5408\u90fd\u53ef\u4ee5\u63a8\u7b97\u51fa\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u662f\u5b9e\u73b0\u5927\u578b\u52a8\u6001\u7cfb\u7edf\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"obj-com",src:l(3972).Z,width:"2666",height:"898"})),(0,n.kt)("p",null,"\u5c06\u6570\u636e\u548c\u7ec4\u4ef6\u878d\u5408\u4e3a\u4e00\u4f53\u662f\u5173\u952e\u601d\u60f3\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u662f\u6ca1\u6709\u8fd9\u79cd\u673a\u5236\u7684\uff0c\u751a\u81f3\u662f\u4e0d\u53ef\u7406\u89e3\u7684\uff0c\u4f46\u662f\u4e0d\u7a81\u7834\u8fd9\u4e00\u70b9\u5c31\u65e0\u6cd5\u5b9e\u73b0\u4e0a\u8ff0\u7684\u529f\u80fd\uff0c\u8fd9\u79cd\u601d\u8def\u89e3\u51b3\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\u4f9d\u8d56\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u4e86\u5f00\u53d1\u8005\u6216\u8005\u5bf9\u6570\u636e\u548c\u7ec4\u4ef6\u4e4b\u95f4\u5173\u7cfb\u7684\u624b\u52a8\u4e14\u5bb9\u6613\u51fa\u9519\u6216\u9020\u6210\u5197\u4f59\u7684\u7ef4\u62a4")),(0,n.kt)("p",null,"\u8fd9\u65b9\u9762\u7684\u5185\u5bb9\u53c2\u89c1\u9762\u5411\u6570\u636e\u7f16\u7a0b\u3002"),(0,n.kt)("h4",{id:"27195-\u52a8\u6001\u6027\u7684\u9636\u6bb5"},"2.7.19.5 \u52a8\u6001\u6027\u7684\u9636\u6bb5"),(0,n.kt)("p",null,"\u8981\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b8c\u5168\u6309\u8fd9\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\uff0c\u5fc5\u7136\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u8fd9\u4e9b\u95ee\u9898\u81f3\u5c11\u6765\u81ea\u4e24\u4e2a\u65b9\u9762\uff1a1\uff09\u52a8\u6001\u67e5\u8be2\u6570\u636e\u5e93\uff1b2\uff09\u52a8\u6001\u7f16\u8bd1\u3001\u89e3\u91ca\u3001\u94fe\u63a5\u7b49\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u4e0a\u8ff0\u7684\u95ee\u9898\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6211\u4eec\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u64cd\u4f5c\u8fc7\u7a0b\u63d0\u524d\u8ba1\u7b97\u51fa\u6765\u3002\u6839\u636e\u6574\u4e2a\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u8fc7\u7a0b\uff0c\u5927\u6982\u53ef\u4ee5\u5212\u5206\u4e3a\u4e09\u4e2a\u9636\u6bb5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7f16\u8bd1\uff0c\u8fd9\u53d1\u751f\u5728\u5f00\u53d1\u8005\u5f00\u53d1\u7ec4\u4ef6\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u7f16\u8f91\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u4f7f\u7528\u7ec4\u4ef6\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c\u7684\u65f6\u5019"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u52a0\u8f7d\u65f6\uff0c\u8fd9\u53d1\u751f\u5728\u7528\u6237\u8bf7\u6c42\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u6267\u884c\u4e4b\u524d")),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u7f16\u8f91\u597d\u5bf9\u8c61\u4e4b\u540e\uff0c\u5176\u76f8\u5e94\u4f7f\u7528\u7684\u7ec4\u4ef6\u53ca\u5176\u6570\u636e\u7ed3\u6784\u5c31\u56fa\u5b9a\u4e0b\u6765\u4e86\uff0c\u800c\u7ec4\u4ef6\u7684\u4ee3\u7801\u5b9e\u9645\u4e0a\u5728\u5f00\u53d1\u8005\u63d0\u4ea4\u5230\u4ee3\u7801\u5e93\u4e4b\u524d\u5c31\u5df2\u7ecf\u7f16\u8bd1\u597d\u4e86\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\u52a8\u6001\u8ba1\u7b97\u7684\u5185\u5bb9\u5c31\u6bd4\u8f83\u7b80\u5355\u3002\u4ec5\u6d89\u53ca\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u987a\u5e8f\u7b49\u8ba1\u7b97\u3002"),(0,n.kt)("h3",{id:"2720-\u8ba1\u7b97\u56fe"},"2.7.20 \u8ba1\u7b97\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c12.3.6\u8282"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4e4b\u95f4\u7531\u8f93\u5165\u8f93\u51fa\u7684\u5173\u7cfb\u51b3\u5b9a\u6267\u884c\u987a\u5e8f\uff0c\u8fd9\u6784\u6210\u4e86\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\u3002"),(0,n.kt)("h2",{id:"28-\u5927\u578b\u52a8\u6001\u7cfb\u7edf"},"2.8 \u5927\u578b\u52a8\u6001\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64RealityIS\u5e94\u8be5\u662f\u4e00\u4e2a\u5b8c\u5168\u52a8\u6001\u7684\u7cfb\u7edf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u52a8\u6001\u4f53\u73b0\u5728\u591a\u4e2a\u5c42\u9762\u3002"),(0,n.kt)("h3",{id:"281-\u52a8\u6001\u7f16\u8bd1"},"2.8.1 \u52a8\u6001\u7f16\u8bd1"),(0,n.kt)("p",null,"\u9996\u5148\uff0c\u7a0b\u5e8f\u662f\u6700\u6838\u5fc3\u7684\u52a8\u6001\u5185\u5bb9\uff0c\u800c\u4e14\u7531\u4e8e\u6574\u4e2a\u4e16\u754c\u4ee3\u7801\u91cf\u5f88\u5927\uff0c\u56e0\u6b64\u5fc5\u987b\u5b8c\u5168\u52a8\u6001\u89e3\u91ca\u3002"),(0,n.kt)("p",null,"\u8d77\u7801\u8981\u6ee1\u8db3\u4e24\u4e2a\u65b9\u9762\u7684\u9700\u6c42\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u6587\u4ef6\u72ec\u7acb\u7f16\u8bd1\uff0c\u4e0d\u80fd\u653e\u5230\u4e00\u6b21\u6027\u7f16\u8bd1"),(0,n.kt)("li",{parentName:"ul"},"\u907f\u514d\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u94fe\u63a5\u8fc7\u7a0b\uff0c\u53c8\u5fc5\u987b\u505a\u5230\u4e24\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u4e4b\u95f4\u4e0d\u80fd\u6709\u5f15\u7528\uff0c\u56e0\u4e3a\u5f15\u7528\u5c31\u610f\u5473\u7740\u8981\u52a0\u8f7d\u5de8\u5927\u7684\u4ee3\u7801"),(0,n.kt)("li",{parentName:"ul"},"\u53ea\u52a0\u8f7d\u9700\u8981\u7684\u7ec4\u4ef6\u53ca\u6e90\u4ee3\u7801\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5927\u91cf\u7684\u4e0d\u4f1a\u88ab\u6267\u884c\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u53c2\u89c12.7.6\u8282\u7684\u5185\u5bb9\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u6837\u5927\u89c4\u6a21\u7a0b\u5e8f\u5b9e\u65f6\u89e3\u91ca\u7684\uff0cRealityIS\u4f7f\u7528\u4e86\u7279\u6b8a\u7684\u67b6\u6784\u6765\u4fdd\u8bc1\u6574\u4e2a\u7a0b\u5e8f\u5728\u89e3\u91ca\u65f6\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6e90\u4ee3\u7801\u7684\u52a8\u6001\u89e3\u91ca\uff0c\u5b83\u53ea\u53d1\u751f\u5728\u4ee3\u7801\u5f00\u53d1\u7684\u65f6\u5019\uff0c\u4e5f\u5c31\u662f\u5f00\u53d1\u8005\u5728Reality Create\u4e2d\u7f16\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4ee5\u53ca\u53d1\u5e03\u7ec4\u4ef6\u7684\u65f6\u5019\u3002\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u652f\u6301\u5927\u89c4\u6a21\u7684\u4ee3\u7801\u6267\u884c\uff0c\u8fd9\u79cd\u7f16\u8bd1\u53ea\u9488\u5bf9\u5355\u4e2a\u7ec4\u4ef6\uff0c\u4e0d\u80fd\u5bf9\u591a\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u53c9\u7f16\u8bd1\u3002\u5f53\u7136RealityIS\u4e5f\u53ef\u4ee5\u907f\u514d\u8fd9\u6837\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0cRealityIS\u5728\u5176\u4ed6\u5730\u65b9\uff0c\u5e76\u4e0d\u9700\u8981\u7f16\u8bd1\u3002\u6574\u4e2a\u8fc7\u7a0b\u76f8\u5bf9\u6bd4\u8f83\u8f7b\u91cf\uff0c\u66f4\u591a\u7684\u662f\u52a8\u6001\u4e00\u4e9b\u5b9e\u4f53\u4e0e\u7ec4\u4ef6\u5173\u7cfb\u7684\u7ba1\u7406\u7b49\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u6839\u636e2.3.1.3\u8282\u7684\u5185\u5bb9\uff0c\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u505a\u5230\u8ba9\u52a8\u6001\u7684Creation Script\u5177\u6709\u7c7b\u4f3c\u9759\u6001\u8bed\u8a00\u7684\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"282-\u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"},"2.8.2 \u52a8\u6001\u521b\u5efa\u548c\u4fee\u6539"),(0,n.kt)("p",null,"\u5728Reality World\u8fd9\u6837\u5b8c\u5168\u5f00\u653e\u7684\u4e16\u754c\u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u53ea\u80fd\u4e8b\u5148\u8bbe\u7f6e\u597d\u56fa\u5b9a\u7684\u5185\u5bb9\u3002\u4f8b\u5982\u7528\u6237\u53ef\u4ee5\u4e00\u8fb9\u73a9\u4e00\u8fb9\u4fee\u6539\u573a\u666f\uff0c\u8fd9\u79cd\u521b\u5efa\u7684\u8fc7\u7a0b\u672c\u8eab\u4e5f\u662f\u4e00\u79cd\u73a9\u6cd5\u3002"),(0,n.kt)("p",null,"\u7531\u4e8eRealityIS\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u7f16\u8bd1\u597d\u7684\uff0c\u6240\u4ee5\u8fd9\u79cd\u4fee\u6539\u4e0d\u6d89\u53ca\u5230\u4ee3\u7801\u7684\u4fee\u6539\uff0c\u56e0\u6b64\u52a8\u6001\u64cd\u4f5c\u662f\u975e\u5e38\u5bb9\u6613\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7528\u6237\u4fee\u6539\u4e00\u4e2a\u5b9e\u4f53\u7684\u65f6\u5019\uff0c\u56e0\u4e3a\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u6570\u636e\u9a71\u52a8\u7684\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u53ea\u6d89\u53ca\u5230\u6570\u636e\u7684\u8c03\u6574\u3002\u7136\u800c\uff0c\u56e0\u4e3aRealityIS\u7684Runtime\u4f1a\u627f\u62c5\u4e00\u90e8\u5206\u89e3\u91ca\u4ee5\u53ca\u7ed9\u6307\u4ee4\u5206\u914d\u6b63\u786e\u5185\u5b58\u5730\u5740\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u7528\u6237\u7684\u6570\u636e\u8c03\u6574\u4f1a\u5bfc\u81f4Creation Table Engine\u5bf9\u5185\u5b58\u4e2d\u7684\u6570\u636e\u5e03\u5c40\u8fdb\u884c\u8c03\u6574\u3002\u5f53\u7136\u8fd9\u79cd\u8c03\u6574\u76f4\u53d1\u751f\u5728\u4fee\u6539\u7684\u65f6\u5019\uff0c\u6240\u4ee5\u603b\u4f53\u5e94\u8be5\u4e0d\u4f1a\u5f71\u54cd\u6027\u80fd\u3002"),(0,n.kt)("h3",{id:"283-\u52a8\u6001\u52a0\u8f7d\u573a\u666f"},"2.8.3 \u52a8\u6001\u52a0\u8f7d\u573a\u666f"),(0,n.kt)("p",null,"Reality World\u662f\u4e00\u4e2a\u975e\u5e38\u5de8\u5927\u7684\u4e16\u754c\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u80fd\u6309\u7167\u4f20\u7edf\u7684\u65b9\u5f0f\u4e00\u4e0b\u5b50\u52a0\u8f7d\u6574\u4e2a\u7a0b\u5e8f\uff0c\u800c\u662f\u53ea\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u7528\u6237\u9700\u8981\u7684\u6570\u636e\u3002\u8fd9\u91cc\u9762\u53ef\u80fd\u8981\u6d89\u53ca\u5f88\u591a\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u6570\u636e\u7ba1\u7406\u3002"),(0,n.kt)("h3",{id:"284-\u52a8\u6001\u63a8\u9001\u66f4\u65b0"},"2.8.4 \u52a8\u6001\u63a8\u9001\u66f4\u65b0"),(0,n.kt)("p",null,"\u5f53\u7528\u6237A\u4fee\u6539\u4e86\u5185\u5bb9\uff0c\u5176\u4ed6\u4e0e\u8fd9\u4e2a\u5185\u5bb9\u76f8\u5173\u7684\u7528\u6237\u5f53\u524d\u7684\u573a\u666f\u5fc5\u987b\u52a8\u6001\u66f4\u65b0\u3002"),(0,n.kt)("h3",{id:"285-\u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"},"2.8.5 \u52a8\u6001\u5206\u914d\u670d\u52a1\u5668"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u7531\u4e8e\u6574\u4e2a\u5185\u5bb9\u7684\u521b\u5efa\u3001\u52a0\u8f7d\u3001\u66f4\u65b0\u548c\u63a8\u9001\u7b49\u7b49\uff0c\u90fd\u662f\u52a8\u6001\u53d1\u751f\u7684\uff0c\u4efb\u52a1\u590d\u6742\u800c\u4e14\u8ba1\u7b97\u91cf\u8f83\u5927\uff0c\u6240\u4ee5\u9700\u8981\u52a8\u6001\u7684\u5206\u914d\u670d\u52a1\u5668\uff0c\u4e0d\u80fd\u6709\u4e00\u4e9b\u592a\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6216\u8005\u9700\u8981\u4eba\u5de5\u8fdb\u884c\u67d0\u4e9b\u914d\u7f6e\u7684\u5de5\u4f5c\uff0c\u800c\u4e14\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u884c\u4f38\u7f29\u7684\u3002"),(0,n.kt)("h3",{id:"286-\u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"},"2.8.6 \u52a8\u6001\u5b9e\u4f53\u5bf9\u8c61\u7ec4\u4ef6\u5217\u8868"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u673a\u5236\u4e2d\uff0c\u89d2\u8272Avator\u662f\u4e00\u4e2a\u6bd4\u8f83\u590d\u6742\u7684\u7c7b\uff0c\u4ed6\u9700\u8981\u627f\u8f7d\u6240\u6709Avator\u6240\u80fd\u64cd\u4f5c\u7684\u529f\u80fd\uff0c\u5176\u4ed6\u7269\u4f53\u5bf9\u8c61\u7684\u811a\u672c\u901a\u5e38\u5219\u6bd4\u8f83\u7b80\u5355\u56fa\u5b9a\u3002avator\u51e0\u4e4e\u53ef\u4ee5\u8ddf\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u4e00\u5207\u7269\u4f53\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u5c31\u5bfc\u81f4\u4e00\u4e2a\u95ee\u9898\uff0c\u5373avator\u6240\u643a\u5e26\u7684\u5927\u90e8\u5206\u7ec4\u4ef6\u529f\u80fd\uff0c\u5728\u67d0\u4e2a\u65f6\u523b\u53ef\u80fd\u90fd\u4e0d\u9700\u8981\uff0c\u56e0\u4e3a\u5b83\u4e00\u6b21\u53ef\u80fd\u53ea\u8ddf\u5c11\u6570\u7ec4\u4ef6\u8fdb\u884c\u4ea4\u4e92\uff0c\u4f7f\u7528\u5c11\u6570\u6280\u80fd\u3002"),(0,n.kt)("p",null,"\u5728\u4e00\u4e2a\u5f00\u53d1\u7684\u5927\u4e16\u754c\uff0c\u8fd9\u6837\u7684\u95ee\u9898\u5c31\u66f4\u52a0\u4e25\u91cd\uff0c\u56e0\u4e3a\u6240\u6709avator\u80fd\u591f\u6267\u884c\u7684\u7ec4\u4ef6\u53ef\u80fd\u662f\u65e0\u7a77\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u52a0\u8f7d\u5728avator\u8eab\u4e0a\uff0c\u800c\u5fc5\u987b\u5b9e\u73b0\u6839\u636e\u9700\u8981\u52a8\u6001\u52a0\u8f7d\u3002\u4f8b\u5982\uff0c\u73a9\u5bb6\u8981\u8fdb\u5165\u4e00\u5757\u51b0\u96ea\u4e4b\u5730\uff0c\u5468\u56f4\u7684\u73af\u5883\u4f1a\u5bf9\u5b83\u7684\u4f53\u80fd\u6d88\u8017\u9020\u6210\u5f71\u54cd\uff0c\u8fd9\u79cd\u53ea\u6709\u5728\u8fd9\u4e2a\u73af\u5883\u624d\u80fd\u53d1\u6325\u4f5c\u7528\u7684\u7ec4\u4ef6\uff0c\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e2a\u533a\u57df\uff0c\u73a9\u5bb6\u8fdb\u5165\u8fd9\u4e2a\u533a\u57df\u7684\u65f6\u5019\u52a8\u6001\u52a0\u8f7d\u8fd9\u4e2a\u7ec4\u4ef6\uff0c\u7136\u540e\u79bb\u5f00\u7684\u65f6\u5019\u5378\u8f7d\u8be5\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0d\u53ef\u80fd\u628a\u6240\u6709\u7684\u7ec4\u4ef6\u90fd\u5b9e\u73b0\u8fd9\u79cd\u52a8\u6001\u52a0\u8f7d\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd8\u662f\u6709\u4e00\u4e9b\u60c5\u51b5\u53ef\u4ee5\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u8fd9\u79cd\u8ddf\u5730\u7406\u4f4d\u7f6e\u76f8\u5173\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2aBounding box"),(0,n.kt)("li",{parentName:"ul"},"\u8ba9\u73a9\u5bb6\u4e3b\u52a8\u9009\u62e9\uff0c\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u8d5b\u8f66\u5e7f\u544a\uff0c\u73a9\u5bb6\u9ed8\u8ba4\u80af\u5b9a\u662f\u4e0d\u5e26\u8fd9\u4e9b\u7ec4\u4ef6\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u7ec4\u4ef6\uff0c\u8ba9\u73a9\u5bb6\u9009\u62e9\u9700\u8981\u52a0\u8f7d\u8d5b\u8f66\u7ec4\u4ef6\uff1b\u4e8b\u5b9e\u4e0a\u8fd9\u5e94\u8be5\u6210\u4e3a\u9ed8\u8ba4\u673a\u5236\uff0c\u5373\u73a9\u5bb6\u770b\u5230\u67d0\u4e2a\u7269\u4f53\uff0c\u4f46\u662f\u5374\u4e0d\u80fd\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\u7684\u65f6\u5019\uff0c\u73a9\u5bb6\u5c31\u53ef\u4ee5\u9009\u62e9\u8fd9\u4e2a\u7269\u4f53\uff0c\u6309\u4e00\u4e2a\u7279\u6b8a\u7684\u952e\uff0c\u5c31\u81ea\u52a8\u88c5\u4e0a\u5bf9\u5e94\u7684\u7ec4\u4ef6\uff0c\u540c\u6837\u73a9\u5bb6\u53ef\u4ee5\u5378\u8f7d\uff0c\u73a9\u5bb6\u53ef\u4ee5\u67e5\u770b\u8eab\u4e0a\u88c5\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u957f\u65f6\u95f4\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\uff0c\u7cfb\u7edf\u53ef\u4ee5\u81ea\u884c\u5378\u8f7d\u6389\uff0c\u751a\u81f3\u8bbe\u7f6e\u4e00\u4e2a\u6700\u5927\u7ec4\u4ef6\u6570\u91cf\u3002\u4f8b\u5982\u73a9\u5bb6\u81ea\u5df1\u5f88\u6e05\u695a\u9700\u8981\u73a9\u54ea\u4e00\u4e2a\u6e38\u620f\uff0c\u5b83\u53ef\u80fd\u4e3b\u52a8\u88c5\u8f7d\u4e0a\u4e0e\u4e4b\u76f8\u5173\u7684\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u53d8\u5316\u7f16\u7a0b\uff0c\u5373\u6ca1\u6709\u4f7f\u7528\u7684\u7ec4\u4ef6\u4e0d\u4f1a\u53d1\u751f\u8ba1\u7b97\u548c\u7f51\u7edc\u4f20\u8f93\uff0c\u4f46\u662f\u8fd9\u79cd\u60c5\u51b5\u4ecd\u7136\u5360\u636e\u5185\u5b58\uff0c\u5e76\u4e0d\u662f\u5f88\u53ef\u53d6\u7684\u65b9\u6848\u3002")),(0,n.kt)("h3",{id:"287-\u52a8\u6001\u5524\u9192"},"2.8.7 \u52a8\u6001\u5524\u9192"),(0,n.kt)("p",null,"\u5373\u65f6\u5524\u9192\uff1a\u5982\u679c\u77e5\u9053\u54ea\u4e9b\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u53d8\u91cf\u611f\u5174\u8da3\uff0c\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u8ba9\u8fd9\u4e9b\u6570\u636e\u5b9e\u65f6\u5904\u4e8e\u5185\u5b58\uff0c\u800c\u53ef\u4ee5\u4e3b\u52a8\u5373\u65f6\u52a0\u8f7d\u4ee3\u7801\u5e76\u6267\u884c\uff0c\u76f8\u5f53\u4e8e\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u6570\u636e\u5b58\u50a8\u5230\u4e86\u786c\u76d8\uff0c\u7136\u540e\u901a\u8fc7\u7f13\u5b58\u673a\u5236\u52a8\u6001\u52a0\u8f7d\uff0c\u5b9e\u9645\u4e0a\u7f13\u5b58\u7cfb\u7edf\u672c\u6765\u4e5f\u662f\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u5f53\u5185\u5b58\u6570\u636e\u8fc7\u591a\u65f6\uff0c\u90a3\u4e9b\u4e0d\u5e38\u7528\u7684\u6570\u636e\u5c31\u4f1a\u88ab\u7f13\u5b58\u5230\u786c\u76d8\uff0c\u4f46\u53c8\u53ef\u4ee5\u5373\u65f6\u88ab\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"29-\u4e92\u64cd\u4f5c\u6027"},"2.9 \u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems."),(0,n.kt)("p",null,"\u5e7f\u4e49\u4e0a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u6307\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u4e2d\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u8ddf\u4e24\u4e00\u4e2a\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u534f\u8c03\u5de5\u4f5c\u3002\u8fd9\u4e9b\u4ea7\u54c1\u6216\u8005\u7cfb\u7edf\u53ef\u4ee5\u662f\u4efb\u4f55\u9886\u57df\uff0c\u6bd4\u5982\u91d1\u878d\u3001\u533b\u7597\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"With respect to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Software"},"software"),", the term ",(0,n.kt)("em",{parentName:"p"},"interoperability")," is used to describe the capability of different programs to exchange data via a common set of exchange formats, to read and write the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/File_format"},"file formats"),", and to use the same ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Protocol_(computing)"},"protocols"),". The lack of interoperability can be a consequence of a lack of attention to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Standardization"},"standardization")," during the design of a program."),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e8e\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u7528\u4e8e\u63cf\u8ff0\u4e24\u4e2a\u4e0d\u540c\u7684\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u4e00\u5b9a\u7684\u4ea4\u6362\u683c\u5f0f\u4ea4\u6362\u6570\u636e\u7684\u80fd\u529b\uff0c\u8be5\u4e24\u4e2a\u7a0b\u5e8f\u80fd\u591f\u901a\u8fc7\u76f8\u540c\u7684\u534f\u8bae\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u9886\u57df\uff0c\u4e92\u64cd\u4f5c\u6027\u6ce8\u91cd\u7684\u662f\u7cfb\u7edf\u4e4b\u95f4\u7684\u6807\u51c6\uff0c\u5982\u679c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u9700\u8981\u5f88\u597d\u5730\u534f\u4f5c\uff0c\u9700\u8981\u4e8b\u5148\u5f88\u597d\u5730\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\uff0c\u5426\u5219\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u6839\u672c\u65e0\u6cd5\u534f\u540c\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u968f\u7740\u5f00\u653e\u5143\u5b87\u5b99\u548c\u53bb\u4e2d\u5fc3\u5316\u7684\u9700\u6c42\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\uff0cRealityIS\u6709\u4e00\u4e9b\u4e0d\u4e00\u6837\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u8981\u6c42\u4f7f\u5f97\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u5f88\u96be\u53bb\u6784\u5efa\u8fd9\u6837\u7684\u80fd\u529b\u3002\u672c\u8282\u901a\u8fc7\u7cfb\u7edf\u68b3\u7406\u4e92\u64cd\u4f5c\u6027\u7684\u6982\u5ff5\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u89e3\u91caRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u601d\u8def\u548c\u65b9\u6cd5\uff0c\u4ee5\u53ca\u5b83\u89e3\u51b3\u7684\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"291-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"},"2.9.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5"),(0,n.kt)("p",null,"\u5927\u90e8\u5206\u7684\u4e92\u64cd\u4f5c\u6027\u90fd\u9700\u8981\u4e00\u5b9a\u7684\u7f16\u7a0b\u8bed\u8a00\u673a\u5236\u6765\u652f\u6301\uff0c\u6240\u4ee5\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u662f\u6307\u8bed\u8a00\u4e92\u64cd\u4f5c\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Language interoperability")," is the capability of two different ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Programming_languages"},"programming languages")," to natively interact as part of the same system and operate on the same kind of data structures."),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\u6027\u662f\u6307\u4e24\u4e2a\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u4e4b\u95f4\uff0c\u80fd\u591f\u539f\u751f\u5730\u8fdb\u884c\u4ea4\u4e92\uff0c\u4ee5\u53ca\u5bf9\u76f8\u540c\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u64cd\u4f5c\u7684\u80fd\u529b\u3002\u5176\u4e2d\u4e24\u79cd\u6bd4\u8f83\u91cd\u8981\u7684\u673a\u5236\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u6807\u8bb0\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u901a\u8fc7\u865a\u62df\u673a")),(0,n.kt)("p",null,"\u8fdb\u884c\u4e92\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"There are many ways programming languages are interoperable with one another. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/HTML"},"HTML"),", ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Cascading_Style_Sheets"},"CSS"),", and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/JavaScript"},"JavaScript")," are interoperable as they are used in tandem in webpages. Some ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Object_oriented"},"object oriented")," languages are interoperable thanks to their shared hosting ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (e.g. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_CLI_languages"},".NET CLI compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Common_Language_Runtime"},"Common Language Runtime")," and ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/List_of_JVM_languages"},"JVM compliant languages")," in the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Java_virtual_machine"},"Java Virtual Machine"),")."),(0,n.kt)("p",null,"\u5176\u4e2d\u5bf9\u4e8e\u6807\u8bb0\u8bed\u8a00\uff0c\u5f53HTML+CSS\u6807\u8bb0\u8bed\u8a00\u5728\u6d4f\u89c8\u5668\u4e2d\u8fdb\u884c\u89e3\u91ca\u6267\u884c\u6027\uff0c\u5176\u4e2d\u5b9a\u4e49\u7684\u5143\u7d20\u80fd\u591f\u88abJavaScript\u8bed\u8a00\u8fdb\u884c\u89e3\u91ca\uff1b\u800c\u5bf9\u4e8e\u57fa\u4e8e\u865a\u62df\u673a\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5b83\u4eec\u4e3b\u8981\u662f\u501f\u52a9\u865a\u62df\u673a\u7684\u76f8\u540c\u4e2d\u95f4\u8bed\u8a00\u53ca\u5185\u5b58\u7ed3\u6784\uff0c\u4e0d\u540c\u8bed\u8a00\u7f16\u5199\u7684\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u8c03\u7528\u3002"),(0,n.kt)("h4",{id:"2911-object-models"},"2.9.1.1 Object models"),(0,n.kt)("p",null,"Object models are standardised models which allow objects to be represented in a language-agnostic way, such that the same objects may be used across programs and across languages. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/CORBA"},"CORBA")," and the ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Component_Object_Model"},"COM")," are the most popular object models."),(0,n.kt)("h4",{id:"2912-virtual-machines"},"2.9.1.2 Virtual machines"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"vm-il",src:l(842).Z,width:"2210",height:"1052"})),(0,n.kt)("p",null,"Different Languages compile into a shared runtime"),(0,n.kt)("p",null,"A ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Virtual_machine"},"virtual machine")," (VM) is a specialised intermediate language that several different languages compile down to. Languages that use the same virtual machine can interoperate, as they will share a memory model and compiler and thus libraries from one language can be re-used for others on the same VM. VMs can incorporate type systems to ensure the correctness of participating languages and give languages a common ground for their type information. The use of an intermediate language during compilation or interpretation can provide more opportunities for optimisation."),(0,n.kt)("h4",{id:"2913-foreign-function-interfaces"},"2.9.1.3 Foreign function interfaces"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Foreign_function_interface"},"Foreign function interfaces")," (FFI) allow programs written in one language to call functions written in another language. There are often considerations that preclude simply treating foreign functions as functions written in the host language, such as differences in types and execution model. Foreign function interfaces enable building ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Wrapper_library"},"wrapper libraries")," that provide functionality from a library from another language in the host language, often in a style that is more idiomatic for the language. Most languages have FFIs to ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/C_(programming_language)"},"C"),', which is the "lingua franca" of programming today.'),(0,n.kt)("h4",{id:"2914-challenges"},"2.9.1.4 Challenges"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Object model differences")),(0,n.kt)("p",null,"Object oriented languages attempt to pair containers of data with code, but how each language chooses how to do that may be slightly different. Those design decisions do not always map to other languages easily. For instance, classes using multiple inheritance from a language that permits it will not translate well to a language that does not permit multiple inheritance. A common approach to this issue is defining a subset of a language that is compatible with another language's features.[",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Language_interoperability#cite_note-3"},"3","]")," This approach does mean in order for the code using features outside the subset to interoperate it will need to wrap some of its interfaces into classes that can be understood by the subset."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Memory models")),(0,n.kt)("p",null,"Differences in how programming languages handle de-allocation of memory is another issue when trying create interoperability. Languages with automatic de-allocation will not interoperate well with those with manual de-allocation, and those with deterministic destruction will be incompatible with those with nondeterministic destruction. Based on the constraints of the language there are many different strategies for bridging the different behaviors. For example: C++ programs, which normally use manual de-allocation, could interoperate with a Java style garbage collector by changing de-allocation behavior to delete the object, but not reclaim the memory. This requires that each object will have to manually be de-allocated, in order for the garbage collector to release the memory safely."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Mutability")),(0,n.kt)("p",null,"Mutability becomes an issue when trying to create interoperability between pure functional and procedural languages. Languages like ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Haskell_(programming_language)"},"Haskell")," have no mutable types, whereas C++ does not provide such rigorous guarantees. Many functional types when bridged to object oriented languages can not guarantee that the underlying objects won't be modified."),(0,n.kt)("h3",{id:"292-\u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.2 \u533a\u5757\u94fe\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"In addition to the perspective of scalability, we also need to think from a practical perspective, why we need interoperability, or why we need cross-chain. Traditionally, blockchain can solve the problem of trust. If scalability can be solved, then the problem of performance will also be solved. Interoperability can actually solve the broader problem of trust when the above two issues are resolved."),(0,n.kt)("p",null,"At present, different application scenarios have different alliance chains and public chains. With these chains in place, we need to use interoperability to communicate useful data. This will involve different approaches to cross-chain or interoperability. In the future, we will see a blockchain system with extremely blurred boundaries, that is, private chains, alliance chains, and public chains are interconnected in some way."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"blockchain-op",src:l(8619).Z,width:"2360",height:"982"})),(0,n.kt)("p",null,"The interoperability in the blockchain field, why is it not explicitly mentioned in traditional Internet applications? Because the Internet infrastructure now provides these functions, such as various SDKs and APIs. If you make an application and want to call the data on WeChat, then you can get the data down through the SDK and interface on WeChat. If you want to make a payment, Alipay also has a corresponding payment channel. When you write the code, you can call the API to make the payment. At present, the reason why it cannot be done on the blockchain is that our data is still in an isolated state due to the different consensus and block structures of various blockchains. In order for the data on different islands to communicate, we must connect different blockchains through interoperability and cross-chain systems."),(0,n.kt)("p",null,"What are the specific ways of interoperability and cross-chain protocols? The first way is the notary model. There is a notary between different chains. The second way to relatively decentralize is the side chain pattern. Through the side chain method, on the chain B, it can be verified which transactions on the chain A are written into the block, then the chain B can verify the operations on A and perform corresponding operations on B such as transfer. The third method is hash time lock. This is a relatively complex protocol. It is a cross-chain operation that integrates decentralized and transparent transaction assets conversion. To put it simply, if I trade bitcoin for Ethereum, I put a lock on Bitcoin, and at the same time, the other party also puts a lock on Ethereum. I give him the key, and I can get the corresponding Ethereum with the same key, and at the same time he can get the corresponding Bitcoin based on the key. There is also a time lock, which guarantees that both parties can only unlock Ethereum and Bitcoin within a limited time, otherwise the agreement will automatically terminate and neither party will obtain the assets of the other."),(0,n.kt)("h3",{id:"293-\u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.3 \u5143\u5b87\u5b99\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Understanding Metaverse Interoperability")),(0,n.kt)("p",null,"Interoperability is the preeminent driving force behind the development of the metaverse. Let\u2019s take a look at ",(0,n.kt)("a",{parentName:"p",href:"https://www.oodlestechnologies.com/blockchain-applications-development/"},"blockchain technology")," to decode how interoperability works in the metaverse. "),(0,n.kt)("p",null,"In blockchain environments, we have both non-interoperable as well as interoperable platforms. However, interoperability is imperative if we are seeking to devise blockchain-powered high-utility services in the metaverse."),(0,n.kt)("p",null,"Interoperability equips the blockchain ecosystem to communicate, use one another\u2019s features and services, share arbitrary data, and more. Similarly, interoperability enables a myriad of metaverse projects to function in a unified manner through sharing of services, data, features, and experiences. It also allows cross-platform trading as well as other activities that are nearly impossible to function in siloed spaces."),(0,n.kt)("p",null,"To understand the concept of metaverse interoperability in a different way, let us take a look at the internet. It is equipped with layered standards that enable diverse networks as well as subnetworks to seamlessly interact with each other. "),(0,n.kt)("p",null,"In the real world, when we move between different locations, our identities also travel from one place to another without any trouble. Even our assets and possessions can be effectively transferred to different locations without undergoing any major changes. It signifies that there is a continuity in the real world that altogether keeps us as well as our assets intact during any transit. "),(0,n.kt)("p",null,"This is the reason why metaverse \u2013 the integration of borderless virtual worlds \u2013 aims at furnishing a transparent platform for socio-cultural interaction, similar to the physical world. Such amalgamation would make all digital realms, irrespective of their canvas and size, an integral part of a larger existence or entity."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Domains of Interoperability")),(0,n.kt)("p",null,"To illustrate various domains of interoperability in the metaverse, here is a representation for a quick reference:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Connectivity: Networking, communications"),(0,n.kt)("li",{parentName:"ul"},"Persistence: Ownership, Identity, History, Accounting"),(0,n.kt)("li",{parentName:"ul"},"Presentation: Physical properties, graphic models"),(0,n.kt)("li",{parentName:"ul"},"Meaning: Semantics, metadata, ontologies"),(0,n.kt)("li",{parentName:"ul"},"Behavior: Economies, rules, consequence, power")),(0,n.kt)("h3",{id:"294-realityis\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"},"2.9.4 RealityIS\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u5185\u5bb9\u53ef\u4ee5\u770b\u51fa\uff0c\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u805a\u7126\u5728\u4e24\u4e2a\u4e0d\u540c\u7684\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c",(0,n.kt)("strong",{parentName:"p"},"\u4fe1\u606f\u4ea4\u6362"),"\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728HTML\u4e2d\u6267\u884cJavaScript\u811a\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u5728JVM\u4e4b\u95f4\u5b9e\u73b0\u4e0d\u540c\u8bed\u8a00\u7684\u76f8\u4e92\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"C\u548cLua\u4e4b\u95f4\u7684\u51fd\u6570\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e24\u4e2a\u72ec\u7acb\u7684\u533a\u5757\u94fe\u4e2d\u8054\u901a\uff0c\u5df2\u5b9e\u73b0\u8de8\u94fe\u7684\u4ea4\u6613\uff0c\u5e76\u786e\u4fdd\u94fe\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6362\u662f\u53ef\u4fe1\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u80fd\u591f\u6b63\u786e\u8bc6\u522b\u4e0d\u540c\u7528\u6237\u7684\u8eab\u4efd\u3001\u7ecf\u6d4e\u3001\u7269\u7406\u5916\u89c2\u7b49\u4e00\u4e9b\u57fa\u672c\u5c5e\u6027")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u5f88\u597d\u7684\u6982\u5ff5\uff0c\u4f46\u5b9e\u9645\u5b83\u4eec\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u5f62\u6210\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u9769\u65b0\u3002\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u901a\u8fc7\u4f20\u7edf\u8bed\u8a00\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u6027\u7279\u6027\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u4e48\u662f\u4f20\u7edf\u7684\u4e92\u8054\u7f51\u5e94\u7528\u4e4b\u95f4\u901a\u8fc7\u5404\u81ea\u7684API\u6216\u8005SDK\u65e9\u5c31\u5df2\u7ecf\u5b9e\u73b0")),(0,n.kt)("p",null,"RealityIS\u5bf9\u4e92\u64cd\u4f5c\u6027\u6709\u5168\u65b0\u7684\u7406\u89e3\u548c\u76ee\u6807\uff0c\u8fd9\u4e9b\u9700\u6c42\u662f\u672a\u6765\u8ba1\u7b97\u67b6\u6784\u548c\u6d88\u8d39\u8005\u6570\u5b57\u7ecf\u6d4e\u6a21\u5f0f\u7684\u5ba2\u89c2\u9700\u6c42\u3002\u4e3a\u4e86\u66f4\u597d\u5730\u7406\u89e3\u8fd9\u4e9b\u9700\u6c42\uff0c\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027 \u6709\u54ea\u4e9b\u4e0d\u8db3\u3002"),(0,n.kt)("h4",{id:"2941-\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"},"2.9.4.1 \u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u7684\u4e0d\u8db3"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8bed\u8a00\u4e92\u64cd\u4f5c\u4e3b\u8981\u5f3a\u8c03\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5171\u4eab\uff1a\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u53ef\u4ee5\u4f20\u9012\u6d88\u606f\uff0c\u5f53\u7136\u8fd9\u4e2a\u6d88\u606f\u901a\u5e38\u4e0d\u4ec5\u4ec5\u662f\u5355\u7eaf\u7684\u5b57\u7b26\u4e32\uff0c\u800c\u662f\u5305\u542b\u4e24\u8005\u90fd\u80fd\u591f\u7406\u89e3\u548c\u89e3\u91ca\u7684\u683c\u5f0f\u534f\u8bae\uff0c\u5b83\u4eec\u901a\u5e38\u662f\u5305\u542b\u4e00\u5b9a\u7684\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u4e2a\u6570\u636e\u7ed3\u6784\u5f80\u5f80\u662f\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u5f62\u6210\u7684\u901a\u4fe1\u6807\u51c6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u5171\u4eab\uff1a\u5176\u4e2d\u4e00\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u7f16\u5199\u7684\u90e8\u5206\u4ee3\u7801\uff0c\u53ef\u4ee5\u5728\u53e6\u4e00\u4e2a\u7cfb\u7edf\u4e2d\u6267\u884c\uff0c\u4f8b\u5982JavaScript\u4ee3\u7801\uff0c\u6216\u8005\u5728JVM\u4e0a\u4f7f\u7528\u4e0d\u540c\u8bed\u8a00\u5f00\u53d1\u7684\u5e93\uff0c\u4f8b\u5982Scala\u8bed\u8a00\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u4f20\u7edfJava\u8bed\u8a00\u7f16\u5199\u7684\u4ee3\u7801\u5e93\u3002")),(0,n.kt)("p",null,"\u5c3d\u7ba1\u662f\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4f46\u662f\u603b\u7684\u6765\u8bb2\uff0c\u5728\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u4e2d\u4e24\u4e2a\u8bed\u8a00\u901a\u5e38\u5e76\u4e0d\u5bf9\u7b49\uff0c\u5176\u4e2d\u4e00\u4e2a\u5f80\u5f80\u662f\u53e6\u4e00\u4e2a\u8bed\u8a00\u7684\u8f85\u52a9\u7cfb\u7edf\u3002\u5176\u4e3b\u8981\u7684\u53cd\u6620\u51fa\u6765\u7684\u7279\u5f81\u662f\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u5728\u5176\u4e2d\u4e00\u4e2a\u7cfb\u7edf\u6216\u8bed\u8a00\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u6682\u4e14\u79f0\u4e3a\u5bbf\u4e3b\u8bed\u8a00\uff0c\u53e6\u4e00\u4e2a\u8bed\u8a00\u6ca1\u6709\u81ea\u5df1\u7684\u8fd0\u884c\u65f6\uff0c\u5b83\u7684\u4ee3\u7801\u9700\u8981\u4f9d\u9644\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u8fd0\u884c\u65f6\u4e2d\u8fd0\u884c\uff0c\u800c\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\u4e4b\u6240\u4ee5\u80fd\u591f\u8fd0\u884c\u5916\u6765\u8bed\u8a00\uff0c\u662f\u56e0\u4e3a\u5b83\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u8be5\u865a\u62df\u673a\u80fd\u591f\u6267\u884c\u8fd9\u90e8\u5206\u5e26\u6765\u8bed\u8a00\u7684\u4ee3\u7801\uff0c\u5e76\u53ef\u4ee5\u501f\u52a9\u865a\u62df\u673a\u4e0e\u5bbf\u4e3b\u5171\u4eab\u5185\u5b58\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u770b\u8d77\u6765\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u53ef\u4ee5\u5171\u4eab\u5185\u5b58\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u4e9b\u5185\u5b58\u4e2d\u6570\u636e\u7684\u6240\u6709\u8005\u901a\u5e38\u662f\u5bbf\u4e3b\u8bed\u8a00\u6216\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5185\u5b58\u4e2d\u7684\u53d8\u91cf\u6216\u8005\u5bf9\u8c61\u57fa\u672c\u4e0a\u90fd\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u5206\u914d\u548c\u7ba1\u7406\u3002\u5916\u6765\u8bed\u8a00\u5c3d\u7ba1\u53ef\u4ee5\u7528\u4e8e\u58f0\u660e\u6216\u6784\u9020\u81ea\u5df1\u7684\u53d8\u91cf\uff0c\u4f46\u8fd9\u4e9b\u53d8\u91cf\u901a\u5e38\u662f\u5c40\u90e8\u53d8\u91cf\uff0c\u5916\u6765\u8bed\u8a00\u7684\u4ee3\u7801\u603b\u7684\u6765\u8bf4\u66f4\u50cf\u662f\u4e00\u4e2a\u51fd\u6570\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u5728\u5bbf\u4e3b\u7a0b\u5e8f\u4e2d\u6267\u884c\uff0c\u5e76\u4e14\u901a\u5e38\u7531\u5bbf\u4e3b\u7a0b\u5e8f\u8fdb\u884c\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u4e24\u4e2a\u8bed\u8a00\u4e4b\u95f4\u5f62\u6210\u8fd9\u79cd\u4e0d\u5bf9\u7b49\uff0c\u662f\u56e0\u4e3a\u4e00\u4e2a\u8bed\u8a00\u5bf9\u5e94\u7684\u7a0b\u5e8f\u5728\u8fd0\u884c\u65f6\u662f\u9700\u8981\u82b1\u8d39\u5927\u91cf\u7684\u4ee3\u7801\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u4e0a\u4e0b\u6587\u7684\u6570\u636e\u6784\u9020\u7684\uff0c\u800c\u4f5c\u4e3a\u4e00\u4e2a\u7b80\u5355\u6d88\u606f\u4f20\u9012\u8fc7\u6765\u7684\u4ee3\u7801\uff0c\u6839\u672c\u4e0d\u8db3\u4e8e\u6784\u9020\u5927\u91cf\u5c5e\u4e8e\u5b83\u81ea\u5df1\u7684\u4e0a\u4e0b\u6587\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u7406\u8bba\u4e0a\u53ef\u4ee5\u7f16\u5199\u590d\u6742\u7684\u4ee3\u7801\u4f20\u7ed9\u5bbf\u4e3b\u8bed\u8a00\uff0c\u6216\u8005\u5728\u5bbf\u4e3b\u8bed\u8a00\u4e2d\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e48\u591a\u7684\u4ee3\u7801\u4e0e\u5bbf\u4e3b\u7a0b\u5e8f\u7684\u4ea4\u4e92\u5c06\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u6240\u4ee5\u5927\u90e8\u5206\u4e92\u64cd\u4f5c\u4e3b\u8981\u662f\u7528\u6765\u5b9e\u73b0\u4e00\u4e9b\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u7684\u5c11\u90e8\u5206\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7ea7\u522b\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u8db3\u4e8e\u771f\u6b63\u6253\u7834\u4e24\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5272\u88c2\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u771f\u6b63\u9700\u6c42\u7684\uff0c\u4e5f\u662fRealityIS\u5b9a\u4e49\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u662f\u5c06\u4e24\u4e2a\u8bed\u8a00\u6216\u8005\u7cfb\u7edf\u770b\u505a\u5bf9\u7b49\u7684\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e0d\u5b58\u5728\u5bbf\u4e3b\u548c\u5916\u6765\u8bed\u8a00\u7684\u6982\u5ff5\uff0c\u5b83\u4eec\u540c\u65f6\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5168\u90e8\u6570\u636e\uff0c\u5b83\u4eec\u540c\u65f6\u62e5\u6709\u5404\u81ea\u5b8c\u6574\u7684\u5168\u90e8\u7a0b\u5e8f\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u53ef\u4ee5\u8fdb\u884c\u4efb\u4f55\u4ee3\u7801\u4e0e\u6570\u636e\u4e4b\u95f4\u7684\u76f8\u4e92\u8c03\u7528\u548c\u5171\u4eab\uff0c\u53ea\u8981\u7528\u6237\u7528\u6237\u5b83\u4eec\u6709\u8fd9\u6837\u7684\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2942-\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"},"2.9.4.2 \u591a\u5e94\u7528\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"is",src:l(8732).Z,width:"2720",height:"1406"})),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u5176\u6839\u57fa\u8fd8\u662f\u9762\u5411\u5355\u5e94\u7528\uff0c\u5b83\u89e3\u51b3\u7684\u662f\u5355\u5e94\u7528\u6216\u8005\u5355\u4e2a\u7cfb\u7edf\u8ddf\u5916\u754c\u4e4b\u95f4\u600e\u6837\u901a\u4fe1\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u901a\u4fe1\u901a\u5e38\u5f88\u7b80\u5355\uff0c\u6bd4\u5982\u5bf9\u4e8e\u5fae\u4fe1\u3001\u652f\u4ed8\u5b9d\u6765\u8bf4\uff0c\u8c03\u7528\u5b83\u4eec\u63d0\u4f9b\u7684API\u5176\u5b9e\u5c31\u662f\u4e00\u79cd\u548c\u8fd9\u4e9b\u7cfb\u7edf\u7684\u4e92\u64cd\u4f5c\u3002\u8fd9\u79cd\u4e92\u64cd\u4f5c\u4e4b\u95f4\u4f20\u9012\u7684\u4fe1\u606f\u7528\u4e00\u4e9b\u7b80\u5355\u7ed3\u6784\u7684\u5b57\u7b26\u4e32\u90fd\u53ef\u4ee5\u3002\u8fd9\u4e9b\u7cfb\u7edf\u4e4b\u95f4\u7684\u534f\u8bae\u6216\u8005\u6807\u51c6\u901a\u5e38\u4e5f\u6bd4\u8f83\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u901a\u5e38\u8868\u73b0\u51fa\u4e00\u4e0b\u51e0\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u662f\u5355\u5411\u7684\uff0c\u4e24\u4e2a\u7cfb\u7edf\u4e4b\u95f4\u901a\u5e38\u4e0d\u5bf9\u7b49\uff0c\u8868\u73b0\u4e3a\u4f17\u591a\u5c0f\u5e94\u7528\u4f9d\u9644\u4e8e\u4e00\u4e9b\u5927\u7684\u5e73\u53f0\uff0c\u4f8b\u5982\u73b0\u5728\u7684\u5c0f\u7a0b\u5e8f\u3001\u5fae\u4fe1\u5e73\u53f0\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u901a\u5e38\u901a\u4fe1\u7684\u5185\u5bb9\u6bd4\u8f83\u7b80\u5355\uff0c\u6269\u5c55\u80fd\u529b\u8f83\u5dee\uff0c\u4f8b\u5982\u5982\u679c\u9700\u8981\u6269\u5c55\u4e00\u4e9b\u6d88\u606f\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u5b9a\u4e49\u53cc\u65b9\u7684\u89e3\u6790\u683c\u5f0f\uff0c\u66f4\u4e0d\u7528\u8bf4\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u6d88\u606f\u901a\u4fe1\u4e86")),(0,n.kt)("p",null,"RealityIS\u8ddf\u8fd9\u4e9b\u673a\u5236\u7684\u6700\u5927\u4e0d\u540c\uff0c\u5728\u4e8e\u5b83\u5c1d\u8bd5\u89e3\u51b3\u4e24\u4e2a\u66f4\u590d\u6742\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u7b49\u6027"),"\uff0c\u5373\u4e92\u64cd\u4f5c\u7684\u4e24\u4e2a\u7a0b\u5e8f\u6216\u7cfb\u7edf\u4e4b\u95f4\u662f\u5bf9\u7b49\u7684\uff0c\u4e0d\u662f\u4f9d\u9644\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6269\u5c55\u6027"),"\uff0c\u53ef\u4ee5\u6bd4\u8f83\u5bb9\u6613\u5730\u5b9e\u73b0\u4efb\u610f\u901a\u4fe1\uff0c\u800c\u4e0d\u662f\u5c40\u9650\u4e8e\u5c11\u6570\uff08\u4e5f\u6bd4\u8f83\u5bb9\u6613\u5b9e\u73b0\u7684\uff09\u534f\u5b9a\u7684\u683c\u5f0f")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u8981\u6c42\u5bf9\u4e92\u64cd\u4f5c\u6027\u7684\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u4e86\u5168\u65b0\u7684\u6311\u6218\uff0c\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u57fa\u672c\u4e0a\u5f88\u96be\u652f\u6301\u8fd9\u6837\u7684\u8981\u6c42\u3002"),(0,n.kt)("p",null,"\u5bf9\u7b49\u6027\u5bf9\u8ba1\u7b97\u67b6\u6784\u63d0\u51fa\u7684\u4e3b\u8981\u6311\u6218\u662f\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u5171\u4eab\uff0c\u5373\u6240\u6709\u5b50\u7a0b\u5e8f\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u5747\u6709\u5404\u81ea\u7684\u5b8c\u6574\u7684\u5185\u5b58\u4e0a\u4e0b\u6587\uff1a\u5373\u6240\u6709\u6570\u636e\u548c\u4ee3\u7801\uff0c\u629b\u5f00\u6389\u4e92\u64cd\u4f5c\u6027\u7684\u9700\u8981\uff0c\u6bcf\u4e2a\u5b50\u7a0b\u5e8f\u90fd\u662f\u4e00\u4e2a\u72ec\u7acb\u771f\u6b63\u7684\u7a0b\u5e8f\u3002\u56e0\u4e3a\u5171\u5904\u4e8e\u4e00\u4e2a\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u5b83\u4eec\u4e4b\u95f4\u968f\u65f6\u90fd\u53ef\u4ee5\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u4e2a\u8ba1\u7b97\u67b6\u6784\u7684\u6839\u672c\u53d8\u9769\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u67b6\u6784\u90fd\u662f\u9488\u5bf9\u5355\u5e94\u7528\u7684\uff0c\u56e0\u6b64\u6574\u4e2a\u5185\u5b58\u7684\u6570\u636e\u90fd\u53ef\u4ee5\u7531\u8be5\u7a0b\u5e8f\u81ea\u7531\u63a7\u5236\u548c\u5904\u7406\uff0c\u73b0\u5728\u7f16\u7a0b\u8bed\u8a00\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u6574\u4e2a\u7f16\u8bd1\u8fc7\u7a0b\u90fd\u662f\u56f4\u7ed5\u6574\u4e2a\u76ee\u6807\u8bbe\u8ba1\u7684\u3002"),(0,n.kt)("p",null,"\u800c\u8ba9\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5171\u5904\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u8fd9\u4e2a\u9996\u5148\u5e26\u6765\u7684\u6311\u6218\u5c31\u662f\u6570\u636e\u5b89\u5168\uff1a\u5982\u679c\u6309\u7167\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\uff0c\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u6307\u9488\u4f7f\u53ef\u4ee5\u8bbf\u95ee\u4efb\u610f\u5730\u5740\u7684\uff0c\u8fd9\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u4e0d\u518d\u662f\u5b89\u5168\u7684\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6ca1\u6709\u4efb\u4f55\u673a\u5236\u53ef\u4ee5\u4fdd\u62a4\u8fd9\u4e2a\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u662f\u7b80\u5355\u5730\u5047\u8bbe\uff0c\u53ea\u8981\u4f60\u7684\u4ee3\u7801\u5728\u4e00\u4e2a\u8fd0\u884c\u65f6\u73af\u5883\u4e2d\u8fd0\u884c\uff0c\u90a3\u4e48\u6574\u4e2a\u5185\u5b58\u73af\u5883\u90fd\u662f\u4f60\u7684\uff0c\u4f60\u53ef\u4ee5\u4efb\u610f\u7834\u574f\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u56e0\u4e3a\u4ee3\u7801\u6709\u4efb\u610f\u7834\u574f\u7684\u80fd\u529b\uff0c\u624d\u9700\u8981\u5404\u79cd\u8bed\u8a00\u673a\u5236\uff08\u5982\u7c7b\u578b\u68c0\u67e5\uff09\u6765\u7ea6\u675f\u5f00\u53d1\u8005\u8fdb\u884c\u5b89\u5168\u7f16\u7a0b\uff0c\u800c\u50cfC\u8fd9\u6837\u7684\u8bed\u8a00\u5c31\u901a\u5e38\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u4e0d\u5b89\u5168\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u76ee\u524d\u6211\u4eec\u65e0\u6cd5\u4ece\u6839\u672c\u4e0a\u7a81\u7834\u8fd9\u4e00\u7f3a\u9677\uff0c\u53ef\u9884\u89c1\u7684\u77ed\u671f\u5c06\u6765\u4e5f\u4e0d\u4f1a\u6709\u7c7b\u4f3c\u7684\u8ba1\u7b97\u67b6\u6784\u6765\u652f\u6491\u8fd9\u79cd\u9700\u6c42\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u57fa\u4e8e\u5f53\u524d\u7684\u7f16\u8bd1\u67b6\u6784\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u529f\u80fd\u3002\u800c\u5f53\u524d\u7f16\u8bd1\u4f53\u7cfb\u4e0b\u552f\u4e00\u80fd\u591f\u5b9e\u73b0\u8fd9\u6837\u529f\u80fd\u7684\u65b9\u5f0f\uff0c\u53ef\u80fd\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u8ba9\u5b50\u7a0b\u5e8f\u5728\u5806\u4e0a\u5206\u914d\u4efb\u4f55\u5185\u5b58\uff0c\u5b83\u4eec\u53ea\u80fd\u5728\u81ea\u5df1\u7684\u51fd\u6570\u5806\u6808\u4e0a\u5b9e\u73b0\u53d8\u91cf\u7684\u5206\u914d\u548c\u4f7f\u7528"),"\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u5b50\u7a0b\u5e8f\u4e0d\u80fd\u4f7f\u7528\u6307\u9488\uff0c\u4e0d\u80fd\u6784\u9020\u5bf9\u8c61\uff0c\u65e0\u6cd5\u5f15\u7528\u5bf9\u8c61\uff0c\u5b83\u4eec\u80fd\u591f\u4f7f\u7528\u7684\u90fd\u662f\u5728\u6808\u4e0a\u5206\u914d\u7684\u503c\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u73b0\u4ee3\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u4e0a\u8ff0\u8fd9\u4e9b\u7ea6\u675f\u90fd\u662f\u6781\u5927\u7684\u9650\u5236\uff0c\u8fd9\u4e5f\u5fc5\u5c06\u5927\u5927\u9650\u5236\u7a0b\u5e8f\u7684\u80fd\u529b\u3002\u7136\u800cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u7279\u6b8a\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u5373\u4f7f\u5728\u8fd9\u6837\u7684\u9650\u5236\u4e0b\uff0c\u8bed\u8a00\u80cc\u540e\u7684\u8fd0\u884c\u65f6\u548c\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5f00\u53d1\u8005\u53ef\u4ee5\u5b9e\u73b0\u4efb\u4f55\u5176\u4ed6\u8bed\u8a00\u53ef\u4ee5\u5177\u5907\u7684\u80fd\u529b\u3002\u8fd9\u4e9b\u673a\u5236\u53c2\u89c1\u524d\u9762\u7ae0\u8282\u7684\u5185\u5bb9\uff0c\u4f46\u8fd9\u91cc\u603b\u7ed3\u5b83\u7684\u6838\u5fc3\u7406\u5ff5\u548c\u673a\u5236\u662f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u601d\u7ef4\u8bc1\u660e\u591a\u4e2a\u72ec\u7acb\u7eaf\u51fd\u6570\u53ef\u4ee5\u590d\u5408\u6784\u6210\u6210\u590d\u6742\u51fd\u6570\uff0c\u8fdb\u800c\u89e3\u51b3\u4efb\u4f55\u903b\u8f91\u95ee\u9898\uff0c\u800c\u7eaf\u51fd\u6570\u672c\u8eab\uff0c\u9664\u4e86\u5b83\u6ca1\u6709\u5185\u90e8\u72b6\u6001\u8fd9\u4e00\u5916\u5728\u6982\u5ff5\u4e4b\u5916\uff0c\u4ece\u7f16\u8bd1\u673a\u5236\u6765\u8bb2\uff0c\u5b83\u7684\u4e00\u4e2a\u6838\u5fc3\u7684\u7ea6\u675f\u662f\u6bcf\u4e2a\u7eaf\u51fd\u6570\u53ea\u80fd\u5728\u6808\u4e0a\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u53d8\u91cf\u4f1a\u968f\u7740\u51fd\u6570\u7684\u8c03\u7528\u7ed3\u675f\u800c\u4e22\u5f03\uff0c\u6240\u4ee5\u5b83\u4eec\u4e0d\u80fd\u5b58\u50a8\u72b6\u6001\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5141\u8bb8\u4e00\u4e2a\u51fd\u6570\u80fd\u591f\u6784\u9020\u6216\u8005\u8bbf\u95ee\u4e00\u4e2a\u5bf9\u8c61\u6216\u8005\u5f15\u7528\u7c7b\u4f3c\uff0c\u90a3\u4e48\u8fd9\u4e2a\u51fd\u6570\u53ef\u80fd\u5c31\u4f1a\u8bb0\u4f4f\u67d0\u4e9b\u72b6\u6001"),"\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u7684\u673a\u5236\u5206\u6790\uff0c\u6211\u4eec\u5b8c\u5168\u6709\u53ef\u80fd\u6784\u9020\u4e00\u79cd\u591a\u5e94\u7528\u5bf9\u7b49\u5171\u4eab\u540c\u4e00\u5185\u5b58\u548c\u8fd0\u884c\u65f6\u7684\u673a\u5236\uff0c\u5728\u6b64\u57fa\u7840\u4e4b\u4e0a\uff0c\u53ea\u9700\u8981\u505a\u5927\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u4e2a\u5b50\u51fd\u6570\u7ec4\u4ef6\u53ef\u4ee5\u7531\u8fd0\u884c\u65f6\u6765\u7ec4\u5408\u4e3a\u590d\u5408\u51fd\u6570"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u6765\u7ba1\u7406\u5b50\u7a0b\u5e8f\u81ea\u8eab\u6240\u5c5e\u6570\u636e\uff08\u4e0d\u662f\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u6570\u636e\uff0c\u800c\u662f\u5b50\u7a0b\u5e8f\u7684\u6570\u636e\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u63d0\u4f9b\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u51fd\u6570\u76f8\u4e92\u8c03\u7528\u7684\u673a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u5728\u8fd9\u4e2a\u8c03\u7528\u7684\u8fc7\u7a0b\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u6743\u9650\u63a7\u5236")),(0,n.kt)("p",null,"RealityIS\u5b9e\u73b0\u4e86\u4e0a\u8ff0\u6240\u6709\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6027\u6982\u5ff5\u4e0d\u592a\u4e00\u6837\u7684\u662f\uff0c\u4f20\u7edf\u4e92\u64cd\u4f5c\u6027\u66f4\u5f3a\u8c03\u4e24\u79cd\u8bed\u8a00\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3002\u800cRealityIS\u76ee\u524d\u53ea\u80fd\u652f\u6301\u5355\u8bed\u8a00\u7684\u4e92\u64cd\u4f5c\uff0c\u5c3d\u7ba1\u4eceJVM\u7684\u89d2\u5ea6\u770b\uff0c\u652f\u6301\u591a\u8bed\u8a00\u4e5f\u4e0d\u662f\u4e0d\u53ef\u80fd\uff0c\u4f46\u662f\u7531\u4e8eCreationScript\u672c\u8eab\u5df2\u7ecf\u662f\u4e00\u79cd\u6781\u5ea6\u7b80\u5316\u7684\u8bed\u8a00\uff0c\u8fd9\u6837\u7684\u591a\u8bed\u8a00\u652f\u6301\u6ca1\u6709\u592a\u5927\u7684\u610f\u4e49\u3002\u4f20\u7edf\u7684\u591a\u8bed\u8a00\u4e92\u64cd\u4f5c\u662f\u56e0\u4e3a\u4e0d\u540c\u8bed\u8a00\u4e4b\u95f4\u5f80\u5f80\u5b58\u5728\u7740\u8f83\u5927\u7684\u7279\u6027\u5dee\u5f02\uff0c\u6216\u8005\u64c5\u957f\u5904\u7406\u7684\u5b50\u7cfb\u7edf\u5177\u6709\u4e0d\u540c\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u95ee\u9898\u5728RealityIS\u4e2d\u662f\u4e0d\u5b58\u5728\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5982\u679c\uff0cRealityIS\u672c\u8eab\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u67b6\u6784\uff0c\u7406\u8bba\u4e0a\u53ef\u4ee5\u5904\u7406\u4efb\u610f\u903b\u8f91\uff0c\u5e76\u4e14RealityIS\u5185\u90e8\u4e5f\u662f\u4e24\u4e2a\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5bf9\u7b49\u7684\u5b50\u7a0b\u5e8f\u3002\u8fd9\u6837\u7684\u4e92\u64cd\u4f5c\u80fd\u529b\uff0c\u8981\u5927\u4e8e\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5173\u4e8e\u6269\u5c55\u6027\uff0c\u8fd9\u6d89\u53ca\u53e6\u4e00\u4e2a\u6982\u5ff5\uff0c\u5373\u6807\u51c6\u76f8\u5173\u7684\u95ee\u9898\uff0c\u53c2\u89c1\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"2943-\u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"},"2.9.4.3 \u6807\u51c6\u4e0e\u4f9b\u5e94\u5173\u7cfb"),(0,n.kt)("p",null,"\u53ef\u6269\u5c55\u6027\u5b9e\u8d28\u662f\u6d89\u53ca\u6807\u51c6\u7684\u95ee\u9898\uff0c\u5e94\u7528\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u5fc5\u7136\u901a\u8fc7\u6807\u51c6\u6765\u5b9e\u73b0\uff0c\u56e0\u6b64\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\u662f\u5173\u4e8e\u80fd\u591f\u600e\u6837\u7b80\u5355\u9ad8\u6548\u5730\u6d89\u53ca\u4e00\u4e2a\u6807\u51c6\uff0c\u80fd\u591f\u8ba9\u5e0c\u671b\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5feb\u901f\u96c6\u6210\u652f\u6301\u8fd9\u6837\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u5148\u6765\u770b\u770b\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u4e4b\u95f4\u6807\u51c6\u7684\u673a\u5236\u662f\u600e\u6837\u8fd0\u4f5c\u7684\u3002\u4f20\u7edf\u7684\u5927\u5e73\u53f0\u5982\u5fae\u4fe1\u548c\u652f\u4ed8\u5b9d\uff0c\u5b83\u4eec\u6709\u6bd4\u8f83\u5927\u7684\u5f71\u54cd\u529b\uff0c\u6240\u4ee5\u5b83\u4eec\u63d0\u4f9b\u7684\u6807\u51c6\u5927\u5bb6\u90fd\u4f1a\u53bb\u9075\u5b88\uff0c\u5373\u4fbf\u8fd9\u79cd\u6807\u51c6\u7684\u89c4\u8303\u7279\u522b\u5dee\uff0c\u5f00\u53d1\u8005\u4e5f\u53ea\u80fd\u53bb\u517c\u5bb9\u548c\u652f\u6301\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\u5e73\u53f0\u4e4b\u95f4\u5b9a\u4e49\u6807\u51c6\u7684\u65b9\u5f0f\u5dee\u522b\u5f88\u5927\uff0c\u9020\u6210\u5206\u5316\uff0c\u5c0f\u5f00\u53d1\u8005\u9700\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u5927\u5e73\u53f0\u9002\u914d\u4e0d\u540c\u7684\u6807\u51c6\u5f62\u5f0f\u3002\u6bd4\u5982\u4e00\u4e2a\u6e38\u620f\u901a\u5e38\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u53d1\u884c\u5e73\u53f0\u4ecb\u5165\u5f88\u591a\u5bb6SDK\uff0c\u4f46\u672c\u8d28\u4e0a\u5b83\u4eec\u7684\u529f\u80fd\u90fd\u5dee\u4e0d\u591a\uff0c\u8fd9\u4e5f\u5bfc\u81f4\u4e00\u4e9b\u63d0\u4f9b\u7edf\u4e00\u670d\u52a1\u63a5\u53e3\u7684\u670d\u52a1\uff0c\u4f8b\u5982AnySDK\uff0c\u4f8b\u5982Unity\u63d0\u4f9b\u7684ARFundation\u5f88\u5927\u7a0b\u5ea6\u4e0a\u90fd\u662f\u5728\u7edf\u4e00ARCore\u548cARKit\u7684\u63a5\u53e3\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e09\u4e2a\u95ee\u9898\u662f\uff0c\u6240\u8c13\u7684\u4e92\u64cd\u4f5c\u901a\u5e38\u53ea\u6709\u5c0f\u5e94\u7528\u53bb\u96c6\u6210\u5927\u5e73\u53f0\u6216\u8005\u5927\u5e94\u7528\uff0c\u800c\u5927\u5e94\u7528\u4e0d\u4f1a\u53bb\u517c\u987e\u5c0f\u5e94\u7528\u7684\u4e92\u64cd\u4f5c\u6027\u3002\u6240\u4ee5\u8fd9\u662f\u4e00\u79cd\u9644\u5c5e\u5e94\u7528\uff0c\u9644\u5c5e\u5f62\u6001\uff0c\u800c\u4e0d\u662f\u4e00\u79cd\u5171\u751f\u5e73\u7b49\u5f62\u6001\u3002\u4f46\u8fd9\u79cd\u5f62\u6001\u5176\u663e\u7136\u7684\u7f3a\u70b9\u662f\uff0c\u8fd9\u79cd\u751f\u6001\u5b83\u7684\u603b\u4f53\u529f\u80fd\u5c31\u662f\u56f4\u7ed5\u5927\u5e94\u7528\u6216\u8005\u5927\u5e73\u53f0\u7684\u8303\u56f4\u53bb\u6269\u5c55\u7684\u8303\u56f4\uff0c\u8fd9\u4e2a\u8303\u56f4\u7684\u5927\u5c0f\u57fa\u672c\u4e0a\u662f\u53d7\u5927\u5e73\u53f0\u672c\u8eab\u7684\u6027\u8d28\u6240\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u56f4\u7ed5YouTube\u7684\u5c31\u662f\u89c6\u9891\u751f\u6001\uff0c\u56f4\u7ed5\u5fae\u4fe1\u7684\u793e\u4ea4\u751f\u6001\uff0c\u4ee5\u53ca\u56f4\u7ed5\u652f\u4ed8\u5b9d\u7684\u7535\u5546\u751f\u6001\u3002"),(0,n.kt)("p",null,"\u8981\u60f3\u5f00\u53d1\u4e00\u4e2a\u5171\u751f\u5171\u4eab\u7684\u5f00\u653e\u5e73\u53f0\uff0c\u663e\u7136\u6807\u51c6\u7684\u5f62\u6001\u9700\u8981\u53d8\u9769\u3002\u8fd9\u81f3\u5c11\u9700\u8981\u601d\u8003\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u7edf\u4e00\u6807\u51c6\u5236\u5b9a\u5f62\u5f0f\uff0c\u600e\u6837\u8ba9\u5927\u5bb6\u5236\u5b9a\u66f4\u5bb9\u6613\u96c6\u6210\u3001\u66f4\u7edf\u4e00\u3001\u66f4\u7b80\u5355\u5730\u89c4\u8303\u5f62\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u662f\u8ba9\u5f71\u54cd\u529b\u6ca1\u90a3\u4e48\u5927\u7684\u7ec4\u7ec7\u6216\u8005\u7cfb\u7edf\u5236\u5b9a\u7684\u6807\u51c6\uff0c\u80fd\u591f\u6709\u673a\u4f1a\u6162\u6162\u8fdb\u5316\uff0c\u8fdb\u800c\u6709\u53ef\u80fd\u8ba9\u5f71\u54cd\u529b\u66f4\u5927\u7684\u7cfb\u7edf\u6765\u53cd\u5411\u652f\u6301\uff0c\u5b9e\u73b0\u7cfb\u7edf\u4e4b\u95f4\u7684\u5bf9\u7b49")),(0,n.kt)("p",null,"\u4ee5\u524d\u662f\u901a\u8fc7\u5f71\u54cd\u529b\u5e26\u52a8\u6807\u51c6\uff0c\u7531\u5b83\u4eec\u6765\u5236\u5b9a\u6807\u51c6\uff0c\u6240\u4ee5\u6574\u4e2a\u4e92\u64cd\u4f5c\u7684\u751f\u6001\u6838\u5fc3\u8fd8\u662f\u5927\u5e73\u53f0\u7684\u5730\u4f4d\u3002\u5c0f\u5e94\u7528\u6ca1\u6709\u673a\u4f1a\u53bb\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u66f4\u5e0c\u671b\u5b83\u50cf\u771f\u5b9e\u793e\u4f1a\uff0c\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u90fd\u53ef\u4ee5\u53bb\u53d1\u8d77\u81ea\u5df1\u7684\u751f\u610f\uff0c\u53ea\u8981\u5b83\u4eec\u7684\u751f\u610f\u505a\u5f97\u8db3\u591f\u597d\uff0c\u6162\u6162\u5c31\u4f1a\u63d0\u5347\u81ea\u5df1\u7684\u5f71\u54cd\u529b\u3002\u800c\u4e14\uff0c\u5f53\u5176\u4ed6\u7684\u7ec4\u7ec7\u6216\u8005\u4e2a\u4eba\u53d1\u73b0\u8fd9\u4e2a\u4ea7\u54c1\u7684\u65f6\u5019\uff0c\u4ed6\u4eec\u4e5f\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u4e0e\u4e4b\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f9b\u5e94\u5173\u7cfb\uff0c\u800c\u975e\u5e73\u53f0\u5f71\u54cd\u529b\u7684\u5ef6\u4f38\uff0c\u624d\u80fd\u771f\u6b63\u4fc3\u8fdb\u521b\u65b0\u3002\u800c\u5927\u5e73\u53f0\u4f1a\u627c\u6740\u5f88\u591a\u521b\u65b0\uff0c\u5e76\u4e14\u4f1a\u62a2\u593a\u5f88\u591a\u5177\u6709\u521b\u9020\u80fd\u529b\u7684\u4e2a\u4eba\u6216\u8005\u7ec4\u7ec7\u7684\u8d44\u6e90\uff0c\u800c\u8fd9\u9760\u7684\u4e0d\u662f\u5b9e\u529b\u548c\u4ea7\u54c1\uff0c\u800c\u5355\u7eaf\u5c31\u662f\u5e73\u53f0\u7684\u5784\u65ad\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u5e73\u53f0\u7684\u5f71\u54cd\u529b\u4e0d\u518d\u662f\u4e3b\u5bfc\u7684\uff0c\u90a3\u4e48\u6807\u51c6\u672c\u8eab\u5c31\u5e94\u8be5\u662f\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u56e0\u7d20\uff0c\u5728\u5e73\u53f0\u7ed9\u6bcf\u4e2a\u7ec4\u7ec7\u6216\u4e2a\u4eba\u63d0\u4f9b\u516c\u5e73\u673a\u4f1a\u4f7f\u5927\u5bb6\u90fd\u6709\u673a\u4f1a\u6210\u957f\u7684\u65f6\u5019\uff0c\u8fd8\u9700\u8981\u4e00\u4e2a\u80fd\u591f\u4f7f\u4e4b\u4e0e\u5176\u4ed6\u7ec4\u7ec7\u5efa\u7acb\u4f9b\u5e94\u5173\u7cfb\u7684\u7b80\u5355\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u5c06\u6807\u51c6\u5355\u72ec\u5206\u79bb\u5904\u7406\uff0c\u5206\u79bb\u4e4b\u540e\uff0c\u6807\u51c6\u7684\u5730\u4f4d\u63d0\u5347\uff0c\u6807\u51c6\u662f\u516c\u7acb\u7ec4\u7ec7\uff0c\u5b83\u4e0d\u53d7\u5176\u4ed6\u5b9e\u9645\u5f00\u53d1\u4ea7\u54c1\u7684\u7ec4\u7ec7\u6216\u4e2a\u4eba\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u5b83\u4eec\u53ef\u4ee5\u5f62\u6210\u5efa\u8bae\uff0c\u4f46\u603b\u7684\u6765\u8bf4\uff0c\u90a3\u4e9b\u6709\u5f71\u54cd\u529b\u7684\u5927\u5e94\u7528\u6ca1\u6709\u529e\u6cd5\u901a\u8fc7\u6807\u51c6\u53bb\u627c\u6740\u5c0f\u5e94\u7528\uff0c\u56e0\u4e3a\u6807\u51c6\u672c\u8eab\u5177\u6709\u4e00\u4e2a\u5de8\u5927\u7684\u80fd\u529b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6807\u51c6\u662f\u5f00\u653e\u7684")),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u53ea\u662f\u901a\u4fe1\u63a5\u53e3\uff0c\u5b83\u4e0d\u662f\u7ba1\u9053\u6216\u5176\u4ed6\u4e1c\u897f\uff0c\u4f60\u6ca1\u6cd5\u63a7\u5236")),(0,n.kt)("p",null,"\u5173\u4e8e\u6807\u51c6\u76f8\u5173\u7684\u5185\u5bb9\u53c2\u89c14.11\u8282\uff0cRealityIS\u7684\u6807\u51c6\u673a\u5236\u4f7f\u5f97\u4efb\u4f55\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u5c31\u4efb\u4f55\u611f\u5174\u8da3\u90e8\u5206\u8fdb\u884c\u901a\u4fe1\u3002"),(0,n.kt)("h4",{id:"2944-\u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"},"2.9.4.4 \u4e3a\u4e86\u53ef\u7ec4\u5408\u6027"),(0,n.kt)("p",null,"\u7406\u89e3RealityIS\u7684\u4e92\u64cd\u4f5c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u4e92\u64cd\u4f5c\u6027\u4e0e\u53ef\u7ec4\u5408\u6027\u7684\u5173\u7cfb\uff0cRealityIS\u7684\u4e92\u64cd\u4f5c\u6027\u4e0d\u4ec5\u4ec5\u662f\u4e3a\u4e86\u5e94\u7528\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u8fd9\u79cd\u901a\u4fe1\u7684\u76ee\u7684\u4e3b\u8981\u662f\u4e3a\u4e86\u5b9e\u73b0\u81ea\u52a8\u7ec4\u5408\uff0c\u4ece\u800c\u5927\u5927\u7b80\u5316\u5e94\u7528\u5f00\u53d1\u3002"),(0,n.kt)("p",null,"\u53ef\u7ec4\u5408\u6027\u8ddf\u4e92\u64cd\u4f5c\u6027\u662f\u9ad8\u5ea6\u5173\u8054\u7684\uff0c\u5b9e\u9645\u4e0a\u5b83\u4eec\u5e76\u4e0d\u662f\u72ec\u7acb\u7684\u6982\u5ff5\uff0c\u7ec4\u5408\u662f\u9700\u8981\u4e92\u64cd\u4f5c\u8f85\u52a9\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u6216\u8005\u51fd\u6570\u4e4b\u95f4\u7ec8\u5f52\u662f\u6709\u8054\u7cfb\u7684\uff0c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u8054\u7cfb\uff0c\u73b0\u6709\u7684\u4f53\u7cfb\u5c31\u662f\u53ea\u8003\u8651\u89e3\u8026\u800c\u4e0d\u53bb\u7ef4\u62a4\u8fd9\u4e2a\u8054\u7cfb\uff0c\u6240\u4ee5\u5230\u76ee\u524d\u4e3a\u6b62\u51e0\u4e4e\u627e\u4e0d\u5230\u6bd4\u8f83\u597d\u7684\u53ef\u7ec4\u5408\u6027\u7684\u67b6\u6784\uff0c\u539f\u56e0\u5c31\u662f\u6ca1\u6709\u89e3\u51b3\u4e92\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u4f46\u53cd\u4e4b\u89e3\u51b3\u4e86\u4e92\u64cd\u4f5c\uff0c\u53ef\u7ec4\u5408\u6027\u66f4\u50cf\u662f\u4e00\u4e2a\u7ed3\u679c\uff0c\u6240\u4ee5\u5176\u5b9e\u6838\u5fc3\u662f\u4e92\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u67b6\u6784\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e00\u76f4\u5f53\u4f5c\u6700\u6838\u5fc3\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"composition",src:l(4771).Z,width:"2734",height:"1400"})),(0,n.kt)("p",null,"\u5982\u4eca\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u867d\u7136\u901a\u8fc7\u8f6f\u4ef6\u67b6\u6784\u8bbe\u8ba1\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u505a\u5230\u4e00\u5b9a\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f46\u662f\u8fd9\u4e9b\u7ec4\u5408\u6027\u51e0\u4e4e\u90fd\u5e02\u9488\u5bf9\u5f00\u53d1\u8005\u7684\uff0c\u666e\u901a\u7528\u6237\u5f88\u96be\u5229\u7528\u5230\u8fd9\u79cd\u80fd\u529b\uff0c\u8fd9\u662f\u56e0\u4e3a\u8fd9\u4e9b\u903b\u8f91\u4e0a\u7684\u7ec4\u5408\uff0c\u672c\u8d28\u4e0a\u5c31\u662f\u67d0\u79cd\u5f62\u5f0f\u4e0a\u7684\u51fd\u6570\u8c03\u7528\uff0c\u8fd9\u5c31\u4e0d\u53ef\u907f\u514d\u7684\u4f1a\u6d89\u53ca\u5230\u51fd\u6570\u7684\u5b9a\u4e49\u3001\u5730\u5740\u3001\u53c2\u6570\u5217\u8868\u3001\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u8fd9\u4e9b\u7a0b\u5e8f\u7684\u673a\u5236\uff0c\u800c\u666e\u901a\u7528\u6237\u65e2\u65e0\u6cd5\u5b66\u4e60\u548c\u7406\u89e3\u8fd9\u4e9b\u6982\u5ff5\uff0c\u4e5f\u5f88\u96be\u5728\u8fd0\u884c\u65f6\u4e0d\u901a\u8fc7\u4ee3\u7801\u7684\u65b9\u5f0f\u53bb\u62ff\u5230\u8fd9\u4e00\u5207\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7RealityIS\u9488\u5bf9\u4e92\u64cd\u4f5c\u6027\u8bbe\u8ba1\u7684\u4e00\u5957\u6807\u51c6\u8fd0\u4f5c\u673a\u5236\uff0cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u9690\u5f0f\u5730\u8fdb\u884c\u51fd\u6570\u8c03\u7528\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u51fd\u6570\u4e4b\u95f4\u4e0d\u518d\u9700\u8981\u663e\u5f0f\u6307\u5b9a\u8c03\u7528\u51fd\u6570\u7684\u65b9\u6cd5\u540d\u79f0\u3001\u51fd\u6570\u5730\u5740\u3001\u53c2\u6570\u6570\u91cf\u3001\u53c2\u6570\u7684\u6570\u636e\u7c7b\u578b\u7b49\u7b49\u4fe1\u606f\uff0c\u800c\u662f\u5b83\u4eec\u4ec5\u4ec5\u9700\u8981\u9488\u5bf9\u4e00\u5b9a\u7684\u6807\u51c6\u63a5\u53e3\u5b9e\u73b0\u81ea\u5df1\u611f\u5174\u8da3\u7684\u529f\u80fd\u5373\u53ef"),"\u3002\u6b63\u662f\u8fd9\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u7528\u6237\u4e0d\u9700\u8981\u53bb\u4e86\u89e3\u4e00\u4e9b\u7a0b\u5e8f\u672f\u8bed\uff0c\u8fd9\u6837\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u88ab\u5f53\u505a\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u529f\u80fd\u770b\u5f85\uff0c\u56e0\u6b64\u4f7f\u5f97\u666e\u901a\u7528\u6237\u80fd\u591f\u6bd4\u8f83\u7b80\u5355\u5730\u53bb\u5b9a\u4e49\u81ea\u5df1\u7684\u7a0b\u5e8f\u6216\u8005\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cRealityIS\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u5176\u5b9e\u662f\u9700\u8981\u4f9d\u8d56\u4e8e\u5b83\u7684\u4e92\u64cd\u4f5c\u6027\u673a\u5236\u6765\u5b9e\u73b0\u7684\uff0c\u5426\u5219\u6211\u4eec\u7528\u4e8e\u65e0\u6cd5\u7834\u9664\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u8fd9\u6837\u5373\u4f7f\u6709\u8f83\u597d\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u4e5f\u53ea\u80fd\u4e3b\u8981\u9488\u5bf9\u4e13\u4e1a\u5f00\u53d1\u8005\u3002RealityIS\u901a\u8fc7\u4e92\u64cd\u4f5c\u6027\u5b9e\u73b0\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u4f7f\u5f97RealityIS\u5e73\u53f0\u7684\u4ef7\u503c\u6709\u4e86\u66f4\u5927\u7684\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u76f8\u5173\u5185\u5bb9\u53c2\u89c12.7.10\u8282\u3002"),(0,n.kt)("h3",{id:"295-\u4ea4\u4e92\u6a21\u5f0f"},"2.9.5 \u4ea4\u4e92\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u673a\u5236\u672c\u8eab\uff0c\u7a0b\u5e8f\u4e4b\u95f4\u7684\u901a\u4fe1\u6216\u8005\u4e92\u64cd\u4f5c\u5f80\u5f80\u8fd8\u6d89\u53ca\u4e00\u4e2a\u8c03\u7528\u65b9\u5411\u7684\u95ee\u9898\uff0c\u8fd9\u4e2a\u5728\u6e38\u620f\u5f00\u53d1\u4e2d\u5c24\u5176\u660e\u663e\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u7279\u522b\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\uff0c\u65b9\u6cd5\u548c\u6570\u636e\u5f80\u5f80\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u4e2a\u7c7b\u6216\u8005\u4e00\u4e2a\u76f8\u5bf9\u76f8\u5173\u7684\u6a21\u5757\u5f53\u524d\uff0c\u8fd9\u5c31\u5bfc\u81f4\u51fd\u6570\u7684\u4ea4\u4e92\u5177\u6709\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u8fd9\u4e9b\u6a21\u5f0f\u5bf9\u6574\u4f53\u67b6\u6784\u548c\u590d\u6742\u5ea6\u90fd\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u4ee5\u9762\u5411\u5bf9\u8c61\u4e3a\u4f8b\uff0c\u8bbe\u60f3\u6709\u4e00\u4e2a\u89d2\u8272\u5bf9\u8c61A\uff0c\u4f7f\u7528\u4e86\u4e00\u4e2a\u9053\u5177\u780d\u4f24\u4e86\u4e00\u4e2a\u602a\u7269\u5bf9\u8c61B\uff0c\u5bf9\u5176\u9020\u62105\u70b9\u4f24\u5bb3\uff0c\u6839\u636e\u5176\u4ea4\u4e92\u6a21\u5f0f\u7684\u4e0d\u540c\uff0c\u8fd9\u91cc\u53ef\u80fd\u6709\u4e00\u4e0b\u4e09\u4e2d\u903b\u8f91\u7ec4\u7ec7\u65b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9020\u6210\u4f24\u5bb3\u7684\u4ee3\u7801\u5c01\u88c5\u5728A\u7c7b\u4e2d\uff0c\u56e0\u4e3a\u6211\u4eec\u8ba4\u4e3a\u662f\u89d2\u8272\u7684\u52a8\u4f5c\u5bfc\u81f4\u7684\u7ed3\u679c\uff0c\u6240\u4ee5A\u7c7b\u4e2d\u7684\u67d0\u4e2a\u65b9\u6cd5\u9700\u8981\u53d6\u5f97\u5bf9\u8c61B\u7684\u5f15\u7528\uff0c\u7136\u540e\u5bf9\u5bf9\u8c61B\u4e2d\u7684HP\u53d8\u91cf\u8fdb\u884c\u4fee\u6539\uff0c\u56e0\u6b64\u8fd9\u4e5f\u8981\u6c42B\u66b4\u9732\u8be5\u5c5e\u6027\u7684\u8bbf\u95ee\u6743\u9650\u3002\u5f53\u7136\u6211\u4eec\u53ef\u4ee5\u5c06\u5bf9\u8fd9\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u6539\u4e3a\u65b9\u6cd5\u7684\u5f62\u5f0f\uff0c\u8ba9A\u5bf9\u8c03\u7528\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u4f46\u4e24\u8005\u672c\u8d28\u4e0a\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u9762\u7684\u6838\u5fc3\u95ee\u9898\u662fA\u9700\u8981\u8c03\u7528B\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u89e3\u9664\u4e24\u8005\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u53e6\u4e00\u4e2a\u65b9\u6cd5\u662f\u91c7\u7528\u54cd\u5e94\u7684\u6a21\u5f0f\uff0cA\u4e0d\u4f1a\u76f4\u63a5\u4fee\u6539B\uff0c\u800c\u662f\u53d1\u51fa\u4e00\u4e2a\u6d88\u606f\u5230\u4e00\u4e2a\u5730\u65b9\uff0c\u7136\u540eB\u4f1a\u53bb\u8fd9\u4e2a\u5730\u65b9\u68c0\u6d4b\u8fd9\u4e2a\u6d88\u606f\uff0c\u5982\u679c\u53d1\u73b0\u5177\u6709\u67d0\u6761\u6d88\u606f\uff0c\u5219\u6267\u884c\u4e00\u4e2a\u6389\u8840\u7684\u8ba1\u7b97\uff0c\u8fd9\u4e2a\u8fc7\u7a0bA\u548cB\u4e0d\u4f1a\u8026\u5408\uff0c\u8fd9\u4e2a\u5177\u4f53\u7684\u6263\u8840\u64cd\u4f5c\u4e3b\u8981\u662f\u7531B\u53d1\u8d77\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u8fd8\u6709\u4e00\u79cd\u975e\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u6cd5\uff0c\u8fd9\u79cd\u65b9\u6cd5\u4ee5\u65b9\u6cd5\u4e3a\u6838\u5fc3\uff0c\u5b83\u540c\u65f6\u4f20\u5165A\u548cB\u4e24\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c3d\u7ba1A\u548cB\u4e4b\u95f4\u4e0d\u4f1a\u76f4\u63a5\u8026\u5408\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u7684\u610f\u4e49\u4e0d\u5927\uff0c\u9664\u4e86\u8981\u5728\u989d\u5916\u4e0d\u76f8\u5173\u7684\u5730\u65b9\u53bb\u7ef4\u62a4\u8fd9\u79cd\u5173\u7cfb\uff0c\u800c\u4e14\u4e00\u65e6\u7531\u4efb\u4f55\u7ed3\u6784\u7684\u4fee\u6539\uff0c\u51e0\u4e2a\u5730\u65b9\u4e5f\u4f1a\u53d7\u5230\u5f71\u54cd\u3002")),(0,n.kt)("p",null,"\u9009\u62e9\u7b2c\u4e00\u8fd8\u662f\u7b2c\u4e8c\u79cd\uff0c\u4e00\u822c\u7684\u7f16\u7a0b\u8bed\u8a00\u5e76\u6ca1\u6709\u9650\u5236\uff0c\u4f46\u662f\u5728\u5927\u90e8\u5206\u6e38\u620f\u7a0b\u5e8f\u4e2d\uff0c\u9009\u62e9\u4e00\u7684\u53ef\u80fd\u4f1a\u66f4\u591a\uff0c\u8fd9\u79cd\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e8c\u4f1a\u5e26\u6765\u4e00\u4e9b\u989d\u5916\u7684\u7ed3\u6784\u4ee5\u53ca\u7ef4\u62a4\uff0c\u5e76\u4e14\u6ca1\u6709\u4e00\u90a3\u4e48\u5bb9\u6613\u8c03\u5f0f\u3002\u4f46\u662f\u4e00\u5b9e\u9645\u4e0a\u4f1a\u5e26\u6765\u5f88\u591a\u95ee\u9898\uff0c\u6211\u4eec\u628a\u4e00\u79f0\u4e3a\u4e3b\u52a8\u5f0f\uff0c\u76f8\u5e94\u7684\u628a\u4e8c\u79f0\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2951-\u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.1 \u4e3b\u52a8\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u76f4\u63a5\u5f15\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c \u5e76\u901a\u8fc7\u8c03\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u65b9\u6cd5\u6216\u8005\u5c5e\u6027\u8bbf\u95ee\u6765\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u79cd\u65b9\u5f0f\u51e0\u4e4e\u662f\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u652f\u6301\u7684\u673a\u5236\uff0c\u5b83\u4e5f\u662f\u7f16\u5199\u8d77\u6765\u6700\u76f4\u63a5\u548c\u7b80\u5355\u7684\u673a\u5236\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u7531\u5f88\u591a\u7f3a\u70b9\u3002"),(0,n.kt)("p",null,"\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u7684\u95ee\u9898\u5927\u6982\u53ef\u4ee5\u5f52\u4e3a\u4ee5\u4e0b\u51e0\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u6269\u5c55\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u53d1")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u8026\u5408\uff0c\u5f88\u660e\u663eA\u76f4\u63a5\u8c03\u7528\u4e86B\uff0cA\u548cB\u4e4b\u95f4\u5b58\u5728\u76f4\u63a5\u8026\u5408\uff0c\u5982\u679cA\u548cB\u4e4b\u95f4\u76f8\u5173\u8c03\u7528\u90e8\u5206\u7684\u7ed3\u6784\u53d1\u751f\u53d8\u5316\uff0c\u4e24\u8005\u90fd\u5fc5\u987b\u54cd\u5e94\u8c03\u6574\u3002\u6b64\u5916\uff0c\u8026\u5408\u5e26\u6765\u7684\u66f4\u5927\u7684\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u4e3a\u4e86\u8bbf\u95eeB\u7684\u6210\u5458\uff0c\u7c7bB\u4e0d\u5f97\u4e0d\u5c06\u8fd9\u4e9b\u53d8\u91cf\u6216\u65b9\u6cd5\u7684\u8bbf\u95ee\u6743\u9650\u516c\u5f00\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4efb\u4f55\u4ee3\u7801\u7406\u8bba\u4e0a\u90fd\u53ef\u4ee5\u8bbf\u95ee\uff0c\u9020\u6210\u8f83\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002\u5c3d\u7ba1\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u6210\u5458\u7684\u6743\u9650\u8303\u56f4\uff0c\u4f8b\u5982\u7a0b\u5e8f\u96c6\u5185\u90e8\uff0c\u53cb\u5143\u7b49\u673a\u5236\uff0c\u4f46\u8fd9\u4e9b\u6743\u9650\u63a7\u5236\u7684\u7075\u6d3b\u6027\u8fdc\u8fdc\u4e0d\u591f\u3002"),(0,n.kt)("p",null,"\u5176\u6b21\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5e26\u6765\u903b\u8f91\u4e0a\u7684\u4e00\u4e9b\u5173\u7cfb\u6df7\u4e71\uff0c\u6709\u65f6\u5019A\u548cB\u76f4\u63a5\u5e76\u6ca1\u6709\u5fc5\u8981\u7684\u56e0\u679c\u5173\u7cfb\uff0c\u4f46\u662f\u5176\u6d41\u7a0b\u4e0a\u4e5f\u53ef\u4ee5\u8fd9\u6837\u53bb\u6267\u884c\u3002\u518d\u6bd4\u5982\u6709\u65f6\u5019\u6211\u4eec\u5355\u7eaf\u4ece\u7c7bB\u53bb\u8003\u5bdf\u5b83\u7684\u529f\u80fd\uff0c\u6211\u4eec\u53ef\u80fd\u6839\u672c\u4e0d\u77e5\u9053\u5b83\u4ec0\u4e48\u65f6\u5019\u4f1a\u88ab\u8c03\u7528\uff0c\u88ab\u8c01\u8c03\u7528\uff0c\u6211\u4eec\u65e0\u6cd5\u9884\u6d4b\u7a0b\u5e8f\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5c24\u5176\u662f\u5728\u9762\u5411\u5bf9\u8c61\u7ed3\u6784\u4e2d\u518d\u5939\u6742\u7740\u72b6\u6001\u7684\u60c5\u51b5\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u7c7bB\u7684\u4e00\u4e9b\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u6709\u65f6\u5019\u53ef\u80fd\u5e76\u4e0d\u4ec5\u4ec5\u6765\u81eaA\uff0c\u8fd8\u8981\u8003\u8651\u5176\u4ed6\u5bf9\u8c61\u7684\u5f71\u54cd\uff0c\u4f46\u662fA\u4f5c\u4e3a\u8c03\u7528\u65b9\u53ef\u80fd\u6839\u672c\u65e0\u6cd5\u53bb\u611f\u77e5\u8fd9\u6837\u7684\u4e8b\u60c5\u3002\u5b9e\u9645\u4e0a\u901a\u8fc7\u4e0b\u4e00\u8282\u7684\u5185\u5bb9\u53ef\u77e5\uff0c\u54cd\u5e94\u5f0f\u7684\u903b\u8f91\u7ec4\u7ec7\u65b9\u5f0f\u624d\u662f\u5927\u90e8\u5206\u6d3b\u52a8\u8fdb\u884c\u4ea4\u4e92\u7684\u903b\u8f91\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53ef\u6269\u5c55\u6027\uff0c\u8fd9\u8ddf\u8026\u5408\u5b9e\u9645\u4e0a\u4e5f\u662f\u76f8\u5173\u7684\uff0c\u7531\u4e8eB\u6267\u884c\u4ec0\u4e48\u6837\u7684\u903b\u8f91\u4ee5\u53ca\u4ec0\u4e48\u65f6\u5019\u6267\u884c\u7531A\u6765\u63a7\u5236\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u5982\u679cB\u5bf9\u4e8e\u67d0\u4e00\u7c7b\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c\u6709\u5176\u4ed6\u7684\u4e00\u4e9b\u903b\u8f91\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u53d7\u5176\u4ed6\u4e00\u4e9b\u65b0\u52a0\u5165\u7684\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u5b83\u5f88\u96be\u901a\u8fc7\u5728\u4e0d\u5f71\u54cdA\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u6216\u6269\u5c55\u3002\u8fd9\u79cd\u6269\u5c55\u4e0d\u4ec5\u4ec5\u662f\u8981\u6c42A\u4fee\u6539\u63a5\u53e3\u90a3\u4e48\u7b80\u5355\uff0c\u6709\u65f6\u5019\u6d89\u53ca\u4f1a\u878d\u5408\u66f4\u591a\u7684\u903b\u8f91\uff0c\u8fd9\u6837\u8c03\u6574\u8d77\u6765\u7684\u4ee3\u4ef7\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u6211\u4eec\u540e\u9762\u4f1a\u770b\u5230\uff0c\u5982\u679c\u91c7\u7528\u54cd\u5e94\u5f0f\uff0cA\u7684\u5f71\u54cd\u5c31\u53ea\u662f\u4f1a\u62bd\u8c61\u4e3a\u4e00\u4e2a\u56e0\u7d20\uff0c\u800cB\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u5404\u79cd\u56e0\u7d20\u4e4b\u540e\u505a\u51fa\u771f\u6b63\u7684\u54cd\u5e94\u3002\u5373\u4f7f\u54cd\u5e94\u7684\u903b\u8f91\u6216\u8005\u89c4\u5219\u53d8\u4e86\uff0c\u4f46\u662f\u53ea\u8981A\u8fd9\u4e2a\u56e0\u7d20\u672c\u8eab\u7684\u903b\u8f91\u6ca1\u53d8\uff0cA\u5c31\u4e0d\u9700\u8981\u8fdb\u884c\u4efb\u4f55\u4fee\u6539\u3002\u8fd9\u6837\u7684\u65b9\u5f0f\u5c31\u4f7f\u5f97B\u5f88\u5bb9\u6613\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u4e0e\u6269\u5c55\u3002"),(0,n.kt)("p",null,"\u6700\u540e\uff0c\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u5f80\u5f80\u5bfc\u81f4\u5e76\u53d1\u95ee\u9898\uff0c\u5bf9\u4e2a\u5bf9\u8c61\u5bf9B\u7684\u8c03\u7528\u5b8c\u5168\u4e0d\u4f1a\u4e5f\u4e0d\u53ef\u80fd\u8003\u8651\u5230B\u7684\u72b6\u6001\uff0c\u4f8b\u5982\u662f\u5426\u6b63\u5728\u88ab\u5176\u4ed6\u7684\u8fdb\u7a0b\u8bbf\u95ee\u3002\u8fd9\u4e2d\u60c5\u51b5\u5c31\u5f88\u5bb9\u6613\u5bfc\u81f4\u5171\u4eab\u7ade\u4e89\uff0c\u800c\u4e14\u9664\u4e86\u52a0\u9501\u51e0\u4e4e\u662f\u65e0\u6cd5\u907f\u514d\u7684\u3002\u800c\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u5b83\u4eec\u901a\u5e38\u53ef\u4ee5\u901a\u8fc7\u5148\u6536\u96c6\u5404\u79cd\u5f71\u54cd\u56e0\u7d20\uff0c\u7136\u540e\u8fdb\u884c\u7edf\u4e00\u7684\u6d88\u606f\u5904\u7406\uff0c\u800c\u907f\u514d\u4efb\u4f55\u5e76\u53d1\u7684\u95ee\u9898\u3002\u56e0\u4e3a\u5185\u90e8\u7684\u6d88\u606f\u59cb\u7ec8\u662f\u4e32\u884c\u7684\u65b9\u5f0f\u6267\u884c\u3002"),(0,n.kt)("h4",{id:"2952-\u4e00\u5207\u7686\u662f\u54cd\u5e94"},"2.9.5.2 \u4e00\u5207\u7686\u662f\u54cd\u5e94"),(0,n.kt)("p",null,"\u73b0\u4ee3\u7f16\u7a0b\u7684\u4e00\u4e9b\u673a\u5236\u5f80\u5f80\u662f\u53d7\u786c\u4ef6\u67b6\u6784\uff0c\u4ee5\u53ca\u7f16\u7a0b\u8bed\u8a00\u7f16\u8bd1\u8fc7\u7a0b\u7684\u4e00\u4e9b\u9650\u5236\u6216\u5f71\u54cd\uff0c\u5b83\u4eec\u539f\u751f\u5e76\u4e0d\u662f\u4e3a\u4e86\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u4ea4\u4e92\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u9996\u5148\u6765\u89c2\u5bdf\u4e00\u4e0b\u771f\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u6d3b\u52a8\u4ea4\u4e92\u65b9\u5f0f\u3002"),(0,n.kt)("p",null,"\u9996\u5148\u8003\u8651\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4eba\u7c7b\u6d3b\u52a8\uff0c\u6bd4\u5982\u6cd5\u5f8b\uff0c\u56fd\u5bb6\u4f1a\u6307\u5b9a\u4e00\u4e9b\u6cd5\u5f8b\u4ee5\u7ea6\u675f\u4eba\u4eec\u7684\u4e00\u4e9b\u884c\u4e3a\uff0c\u4ece\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u89d2\u5ea6\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u7f16\u5199\u4e00\u4e2a\u6cd5\u5f8b\u673a\u6784\u7684\u5bf9\u8c61A\uff0c\u7136\u540e\u7528B\u6765\u8868\u793a\u4eba\u7c7b\uff0cA\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528B\u7684\u5c5e\u6027\u6216\u8005\u65b9\u6cd5\u8981\u6c42B\u4e0d\u80fd\u8fdd\u53cd\u67d0\u4e2a\u6cd5\u5f8b\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5728\u4eba\u7c7b\u6d3b\u52a8\u4e2d\uff0c\u4eba\u662f\u601d\u7ef4\u7684\u4e3b\u4f53\uff0c\u4eba\u7c7b\u7684\u6574\u4e2a\u6d3b\u52a8\u51e0\u4e4e\u90fd\u662f\u7531\u4f17\u591a\u4e2a\u4eba\u610f\u5fd7\u51b3\u5b9a\u7684\u7ed3\u679c\u3002\u867d\u7136\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5728\u5b8f\u89c2\u7684\u89d2\u5ea6\u770b\uff0c\u4e2a\u4eba\u7684\u610f\u5fd7\u662f\u53d7\u4e00\u5b9a\u7684\u7ea6\u675f\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5e76\u4e0d\u80fd\u7531\u6b64\u5c31\u6309\u7167\u4e3b\u52a8\u5f0f\u7684\u65b9\u5f0f\u5bf9\u6574\u4e2a\u4eba\u7c7b\u6d3b\u52a8\u8fdb\u884c\u7f16\u7a0b\u3002\u9664\u4e86\u8fd9\u79cd\u8d1f\u9762\u7684\u4e8b\u5b9c\uff0c\u5373\u4f7f\u662f\u6b63\u9762\u7684\u6d3b\u52a8\u4e5f\u662f\u5982\u6b64\uff0c\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u7ed9\u522b\u4eba\u5f88\u591a\u5fe0\u544a\u6216\u8005\u5efa\u8bae\uff0c\u4f46\u5373\u4f7f\u8fd9\u4e9b\u5fe0\u544a\u6216\u8005\u5efa\u8bae\u771f\u6b63\u662f\u88ab\u8bc1\u660e\u6709\u4ef7\u503c\u7684\uff0c\u5176\u4ed6\u4eba\u4ecd\u7136\u6709\u53ef\u80fd\u56e0\u4e3a\u67d0\u4e9b\u56e0\u7d20\u800c\u9009\u62e9\u4e0d\u53bb\u91c7\u7eb3\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Brain-to-Brain-Communication",src:l(8369).Z,width:"850",height:"450"})),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u6b63\u662f\u4e00\u79cd\u54cd\u5e94\u5f0f\u7684\u4f53\u73b0\u3002\u54cd\u5e94\u5f0f\u7f16\u7a0b\u662f\u4ee5\u63a5\u53d7\u4fe1\u606f\u8005\u4e3a\u4e2d\u5fc3\uff0c\u5b83\u5047\u8bbe\u63a5\u53d7\u4fe1\u606f\u7684\u5bf9\u8c61\u62e5\u6709\u81ea\u6211\u610f\u5fd7\uff0c\u5b83\u5e94\u8be5\u7531\u81ea\u5df1\u6765\u51b3\u5b9a\u5e94\u8be5\u600e\u6837\u57fa\u4e8e\u5916\u90e8\u7684\u4fe1\u606f\u8fdb\u884c\u51b3\u7b56\u548c\u54cd\u5e94\u3002\u6b63\u662f\u8fd9\u79cd\u81ea\u6211\u610f\u5fd7\uff0c\u4ece\u7a0b\u5e8f\u7684\u89d2\u5ea6\u4e0d\u5149\u4f7f\u5176\u66f4\u5177\u6709\u6269\u5c55\u6027\uff0c\u4ece\u8fdb\u5316\u7684\u89d2\u5ea6\uff0c\u8fd9\u6837\u7684\u7cfb\u7edf\u80fd\u591f\u4ea7\u751f\u51fa\u66f4\u52a0\u4e30\u5bcc\u800c\u521b\u65b0\u7684\u6210\u679c\u3002\u800c\u5982\u679c\u662f\u4e3b\u52a8\u5f0f\u7f16\u7a0b\uff0c\u5728\u5f88\u591a\u89c4\u5219\u51e0\u4e4e\u5c31\u662f\u4e00\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u4e2a\u7cfb\u7edf\u5f88\u96be\u5177\u5907\u6709\u8fdb\u5316\u80fd\u529b\u3002"),(0,n.kt)("p",null,"\u518d\u6765\u5206\u6790\u4e00\u4e9b\u5927\u81ea\u7136\u6d3b\u52a8\uff0c\u5c3d\u7ba1\u5b83\u4eec\u770b\u8d77\u6765\u7269\u7406\u5ba2\u89c2\u89c4\u5f8b\u662f\u56fa\u5b9a\u7684\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e3b\u52a8\u5f0f\u7f16\u7a0b\u6765\u5904\u7406\u6240\u6709\u4e8b\u60c5\u3002\u4f46\u5b9e\u9645\u4e0a\u4efb\u4f55\u4e8b\u60c5\u90fd\u662f\u53d7\u5230\u5404\u79cd\u590d\u6742\u73af\u5883\u56e0\u7d20\u5f71\u54cd\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u7269\u4f53\u4ece\u7a7a\u4e2d\u6389\u4e0b\u6765\uff0c\u53d6\u51b3\u4e8e\u5730\u9762\u662f\u6c34\u3001\u6ce5\u571f\u3001\u6df7\u6ce5\u571f\u3001\u706b\u7b49\u5404\u79cd\u60c5\u51b5\uff0c\u5176\u7ed3\u679c\u4f1a\u5b8c\u5168\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\uff0c\u4efb\u4f55\u4e8b\u60c5\u7684\u5f71\u54cd\uff0c\u90fd\u65e0\u6cd5\u6709\u786e\u5b9a\u6027\u7684\u56e0\u7d20\uff0c\u5982\u679c\u4e00\u4e2a\u7269\u4f53\u7684\u67d0\u4e2a\u7ed3\u679c\u9700\u8981\u6709\u5916\u90e8\u67d0\u4e2a\u5bf9\u8c61\u6765\u51b3\u5b9a\uff0c\u8fd9\u901a\u5e38\u662f\u4e0d\u5408\u9002\u7684\u3002\u65e2\u4e0d\u5177\u5907\u6269\u5c55\u6027\uff0c\u540c\u65f6\u4e5f\u4e0d\u80fd\u4fdd\u8bc1\u6b63\u786e\u6027\u3002\u53ea\u6709\u7269\u4f53\u81ea\u8eab\uff0c\u5b83\u4efb\u4f55\u65f6\u523b\u90fd\u80fd\u591f\u611f\u77e5\u81ea\u5df1\u7684\u73af\u5883\uff0c\u53ea\u6709\u57fa\u4e8e\u6240\u6709\u73af\u5883\u56e0\u7d20\u7684\u7efc\u5408\u6027\u5224\u65ad\uff0c\u624d\u80fd\u66f4\u597d\u5730\u51b3\u5b9a\u5176\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u770b\u5230\u4efb\u4f55\u4e8b\u7269\u65f6\u95f4\u7684\u4ea4\u4e92\uff0c\u51e0\u4e4e\u90fd\u53ef\u4ee5\u5f52\u7ed3\u4e3a\u54cd\u5e94\u5f0f\u3002"),(0,n.kt)("h4",{id:"2953-\u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"},"2.9.5.3 \u54cd\u5e94\u5f0f\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"\u5f53\u7136\u4ece\u7f16\u7a0b\u7684\u89d2\u5ea6\uff0c\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e5f\u5b58\u5728\u4e00\u5b9a\u7684\u95ee\u9898\uff0c\u4e3b\u8981\u662f\u4ee5\u4e0b\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u53cd\u9988\u673a\u5236 ")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u6027\u80fd\u95ee\u9898\uff0c\u4f8b\u5982\u6709\u591a\u4e2a\u7c7b\u578bB\u7684\u5bf9\u8c61\u5217\u8868\uff0c\u539f\u672cA\u53ea\u9700\u8981\u904d\u5386\u4ee5\u4e0b\u961f\u5217B\uff0c\u4fee\u6539\u4ee5\u4e0b\u5c5e\u6027\u5373\u53ef\uff0c\u4f46\u662f\u73b0\u5728\u53ef\u80fd\u9700\u8981\u7ed9\u6bcf\u4e2a\u5bf9\u8c61B\u6dfb\u52a0\u4e00\u4e2a\u65b9\u6cd5\uff0c\u7136\u540e\u7531B\u5206\u522b\u6267\u884c\u4e00\u4e0b\u65b9\u6cd5\u3002\u5c3d\u7ba1\u770b\u8d77\u6765\u4f1a\u5b58\u5728\u6027\u80fd\u95ee\u9898\uff0c\u4f46\u662f\u5bf9\u4e8e\u76f8\u540c\u7684\u903b\u8f91\uff0c\u4e24\u79cd\u65b9\u5f0f\u8c03\u7528\u7684\u6838\u5fc3\u4ee3\u7801\u51e0\u4e4e\u662f\u4e00\u6837\u7684\uff0c\u5269\u4e0b\u5c31\u662f\u4e0d\u540c\u673a\u5236\u5728\u7ec4\u7ec7\u6570\u636e\u7684\u5dee\u5f02\uff0c\u4f46\u662f\u8fd9\u79cd\u673a\u5236\u4e0a\u7684\u5dee\u5f02\u76f8\u5bf9\u4e8e\u6838\u5fc3\u4ee3\u7801\u6765\u8bb2\uff0c\u51e0\u4e4e\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u3002\u672c\u8d28\u4e0a\u4e24\u79cd\u65b9\u6cd5\u7684\u6027\u80fd\u5dee\u5f02\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u7b2c\u4e8c\u4e2a\u95ee\u9898\u5c5e\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7279\u6709\u7684\u4e00\u4e2a\u95ee\u9898\uff0c\u6bd4\u5982\u5982\u679cA\u9700\u8981\u6263\u6389B\u7684\u67d0\u4e2a\u6570\u503c\u53d8\u91cf\uff0c\u5982\u679c\u6574\u4e2a\u903b\u8f91\u6b63\u5e38\u6267\u884c\u5f53\u7136\u6ca1\u95ee\u9898\u3002\u4f46\u662f\u8bbe\u60f3\u5982\u679cB\u7684\u8fd9\u4e2a\u8d44\u6e90\u4e0d\u591f\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u8fd9\u4e2a\u64cd\u4f5c\u4e0d\u5e94\u8be5\u6267\u884c\u3002\u5982\u679c\u662f\u91c7\u7528\u4e3b\u52a8\u5f0f\uff0c\u7531\u4e8eA\u662f\u53ef\u4ee5\u8bbf\u95eeB\u7684\u6210\u5458\u7684\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5224\u65ad\u662f\u5426\u53ef\u4ee5\u6267\u884c\u8ba1\u7b97\uff0c\u8fd9\u5c31\u7b80\u5316\u4e86\u6574\u4e2a\u95ee\u9898\u3002\u5f53\u7136\u5176\u4ee3\u4ef7\u662fB\u4e0d\u5f97\u4e0d\u66b4\u9732\u6570\u636e\u8bbf\u95ee\u6743\u9650\u7ed9\u5916\u90e8\uff0c\u9020\u6210\u5de8\u5927\u7684\u5b89\u5168\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u5e0c\u671b\u6240\u6709\u6d89\u53ca\u53cc\u65b9\u8d44\u6e90\u53d8\u5316\u7684\u8ba1\u7b97\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u4e2d\u6267\u884c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u6d89\u53ca\u4e24\u4e2a\u5bf9\u8c61\uff0c\u4e24\u4e2a\u5bf9\u8c61\u90fd\u643a\u5e26\u5404\u81ea\u76f8\u5173\u7684\u5c5e\u6027\u6570\u636e\uff0c\u7136\u540e\u901a\u8fc7\u4e00\u4e9b\u7279\u6b8a\u7684\u4ea4\u6613\u51fd\u6570\u6765\u83b7\u5f97\u6743\u9650\u3002"),(0,n.kt)("h4",{id:"2954-\u54cd\u5e94\u6d88\u606f\u5c5e\u6027"},"2.9.5.4 \u54cd\u5e94\u6d88\u606f\u5c5e\u6027"),(0,n.kt)("p",null,"\u5728\u4e86\u89e3\u54cd\u5e94\u673a\u5236\u7684\u65b9\u5f0f\u4e4b\u524d\uff0c\u6211\u4eec\u8981\u5148\u4e86\u89e3\u54cd\u5e94\u5f0f\u7f16\u7a0b\u7684\u53e6\u4e00\u4e2a\u7279\u6027\uff0c\u5373\u4e8b\u4ef6\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e3b\u8981\u901a\u8fc7\u4e8b\u4ef6\u6d88\u606f\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u8fd9\u901a\u5e38\u7531\u4e24\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u662f\u6309\u7c7b\u578b\u5efa\u7acb\u5168\u5c40\u7684\u4e8b\u4ef6\u5217\u8868\uff0c\u7136\u540e\u54cd\u5e94\u4e8b\u4ef6\u7684\u5bf9\u8c61\u5206\u522b\u4ece\u8fd9\u4e2a\u5217\u8868\u53bb\u83b7\u53d6\u4e8b\u4ef6\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u79cd\u662f\u7c7b\u4f3cErlang\u7684\u673a\u5236\uff0c\u7cfb\u7edf\u4f1a\u5c06\u8fd9\u4e9b\u4e8b\u4ef6\u6d88\u606f\u5206\u53d1\u5230\u5177\u4f53\u6bcf\u4e2a\u8fdb\u7a0b\u5185\u90e8\uff0c\u5f62\u6210\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5c40\u90e8\u6d88\u606f\u5217\u8868")),(0,n.kt)("p",null,"\u4e0d\u7ba1\u4e0a\u8ff0\u54ea\u79cd\u5f62\u5f0f\uff0c\u5b83\u4eec\u7684\u4e00\u4e2a\u76f8\u540c\u70b9\u90fd\u662f\uff0c\u8fd9\u4e2a\u6d88\u606f\u5217\u8868\u53ea\u662f\u4e34\u65f6\u5b58\u5728\uff0c\u4e00\u65e6\u7cfb\u7edf\u6ce8\u518c\u7684\u6240\u6709\u54cd\u5e94\u8005\u90fd\u5904\u7406\u5b8c\u6bd5\uff0c\u6d88\u606f\u5c31\u4f1a\u88ab\u4e22\u5f03\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u6211\u4eec\u7684\u6d88\u606f\u901a\u77e5\u673a\u5236\u4e0d\u662f\u6309\u7167\u4e0a\u8ff0\u4e24\u79cd\u4e2d\u7684\u4efb\u610f\u4e00\u79cd\u7ec4\u7ec7\u7684\uff0c\u800c\u662f\u6309\u7167\u666e\u901a\u7684\u51fd\u6570\u4f20\u9012\u673a\u5236\uff0c\u5e76\u4e14\u8fd9\u4e2a\u51fd\u6570\u4f20\u9012\u662f\u6bcf\u5e27\u90fd\u6267\u884c\u7684\uff0c\u6240\u4ee5\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\u67d0\u4e2a\u6280\u80fd\u91ca\u653e\u4e4b\u540e\uff0c\u53d1\u9001\u4e00\u6761\u6263\u9664HP\u6570\u91cf\u4e3a3\u7684\u6d88\u606f\uff0c\u54cd\u5e94\u8005\u5728\u6263\u96643\u4e2aHP\u4e4b\u540e\uff0c\u8fd9\u4e2a\u503c\u53ef\u80fd\u4f1a\u5728\u4e0b\u4e00\u5e27\u88ab\u4fdd\u5b58\uff0c\u9664\u975e\u5f00\u53d1\u8005\u4fdd\u8bc1\u53d1\u51fa\u6d88\u606f\u7684\u7ec4\u4ef6\u6bcf\u5e27\u603b\u662f\u6267\u884c\u3002\u4f46\u662fRealityIS\u7684Change-Driven\u673a\u5236\u4f7f\u5f97\u6709\u53ef\u80fd\u7ed5\u8fc7\u8fd9\u4e2a\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u901a\u8fc7\u5bf9\u5c5e\u6027\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u6027\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Message]\nfloat HP\n")),(0,n.kt)("p",null,"\u5982\u679c\u662fMessage\u5c5e\u6027\uff0c\u8fd0\u884c\u65f6\u4fdd\u8bc1\u5728\u6bcf\u5e27\u7684\u6240\u6709\u7ec4\u4ef6\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\uff0c\u5c06\u5176\u6e05\u96f6\u3002",(0,n.kt)("strong",{parentName:"p"},"\u4f46\u8fd9\u53ef\u80fd\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\u5f62\u5f0f\uff0c\u8fd9\u4e00\u5757\u8fd8\u8981\u8fdb\u4e00\u6b65\u601d\u8003"),"\u3002"),(0,n.kt)("h4",{id:"2955-\u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"},"2.9.5.5 \u7b80\u5316\u7684\u54cd\u5e94\u673a\u5236"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u53cd\u9988\u7684\u95ee\u9898\uff0c\u4f20\u7edf\u7684\u89e3\u51b3\u65b9\u6848\u662f\u5f80\u56de\u53d1\u9001\u786e\u8ba4\u6d88\u606f\uff0c\u4f46\u8fd9\u5e26\u6765\u4e00\u5b9a\u7684\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,"\u5176\u5b9e\u5206\u6790\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u5728\u5927\u591a\u6570\u8bf7\u4e0b\u5b83\u4eec\u662f\u53ef\u4ee5\u6b63\u786e\u6267\u884c\u7684\uff0c\u53ea\u6709\u5728\u5c11\u6570\u6781\u7aef\u60c5\u51b5\u4e0b\u7a0b\u5e8f\u4f1a\u51fa\u73b0\u5f02\u5e38\uff0c\u4f8b\u5982\u786c\u4ef6\u95ee\u9898\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6211\u4eec\u5374\u8981\u4e3a\u4e86\u9632\u6b62\u8fd9\u79cd\u95ee\u9898\uff0c\u800c\u5bf9\u6240\u6709\u6d88\u606f\u5904\u7406\u4f7f\u7528\u4e00\u79cd\u53cd\u9988\u7684\u673a\u5236\u3002\u53cd\u9988\u6d89\u53ca\u5230\u5f02\u6b65\uff0c\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u901a\u4fe1\u90fd\u8981\u7ef4\u62a4\u8fd9\u79cd\u5f02\u6b65\u7684\u786e\u8ba4\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u8003\u8651\u5230\u6e38\u620f\u7684\u4e00\u4e9b\u7279\u5f81\uff0c\u6e38\u620f\u4e2d\u5927\u91cf\u5185\u5b58\u5f53\u4e2d\u9700\u8981\u8bb0\u5f55\u548c\u8ba1\u7b97\u7684\u4e00\u4e9b\u5bf9\u8c61\u4e0d\u4e00\u5b9a\u90fd\u9700\u8981\u9700\u8981\u5b58\u6863\u7684\uff0c\u5982\u679c\u628a\u6240\u6709\u8fd9\u4e9b\u6570\u636e\u5b58\u6863\uff0c\u4f1a\u5bfc\u81f4\u5f88\u5927\u7684\u95ee\u9898\uff0c\u5373\u7a0b\u5e8f\u5728\u6062\u590d\u7684\u65f6\u5019\u6839\u672c\u65e0\u6cd5\u7cbe\u786e\u6062\u590d\u5230\u67d0\u4e9b\u4e2d\u95f4\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5RealityIS\u6539\u53d8\u4e86\u4e00\u79cd\u7b56\u7565\uff0c\u5b83\u53ea\u5bf9\u67d0\u4e9b\u5173\u952e\u65f6\u95f4\u70b9\u8fdb\u884c\u5b58\u6863\uff0c\u800c\u5728\u8fd9\u4e9b\u5b58\u6863\u8282\u70b9\u4e4b\u95f4\uff0c\u4e00\u5207\u6570\u636e\u90fd\u662f\u53ef\u4ee5\u4e22\u5f03\u7684\u3002\u6240\u4ee5\u5f53\u6709\u5f02\u5e38\u53d1\u751f\u65f6\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6062\u590d\u5230\u4e0a\u4e00\u4e2a\u5b58\u6863\u8282\u70b9\u5373\u53ef\u3002"),(0,n.kt)("h3",{id:"296-\u4e3aosi\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"},"2.9.6 \u4e3aOSI\u6784\u5efa\u5168\u65b0\u7684\u4e92\u64cd\u4f5c\u5c42"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability",src:l(8934).Z,width:"2556",height:"1406"})),(0,n.kt)("h4",{id:"2961-\u7b2c\u4e09\u65b9\u5e94\u7528"},"2.9.6.1 \u7b2c\u4e09\u65b9\u5e94\u7528"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Interoperability-1",src:l(4917).Z,width:"2530",height:"1372"})),(0,n.kt)("h2",{id:"210-gpu-vm"},"2.10 GPU VM"),(0,n.kt)("h2",{id:"211-render-vm"},"2.11 Render VM"),(0,n.kt)("h2",{id:"212-realityis-runtime"},"2.12 RealityIS Runtime"),(0,n.kt)("p",null,"RealityIS Runtime\u53ef\u4ee5\u7ed9\u7b2c\u4e09\u65b9\u4f7f\u7528\uff0c\u901a\u8fc7\u96c6\u6210\u5230\u7b2c\u4e09\u65b9App\u5f62\u6210\u72ec\u7acb\u5206\u53d1\u7684App\u5f62\u6001\u3002RealityIS Runtime\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7aef\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u6e32\u67d3\u4ee5\u53ca\u8d44\u6e90\u52a0\u8f7d\u76f8\u5173\u7684\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u4e91\u4fa7\u7684\u8fd0\u884c\u65f6\uff0c\u8d1f\u8d23\u4e91\u7aef\u7684\u5206\u5e03\u5f0f\u80fd\u529b")),(0,n.kt)("p",null,"\u57fa\u4e8e\u6b64\uff0c\u5176\u4e2d\u7684\u4e00\u4e9b\u53d8\u5316\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u7aef\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u96c6\u6210\u81ea\u5df1\u7684C++\u5e93\uff0c\u53ef\u4ee5\u6269\u5c55\u5e94\u7528\u7684\u80fd\u529b\uff0c\u5e76\u4e0e\u672c\u5730App\u5176\u4ed6\u6a21\u5757\u8fdb\u884c\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e91\u4fa7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u81ea\u5df1\u7684\u670d\u52a1\u5668\u4e2d\u5fc3\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7C++\u6269\u5c55\u80fd\u529b")),(0,n.kt)("p",null,"\u4e0d\u53d8\u7684\u90e8\u5206\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Creation\u7684\u6258\u7ba1\u5b58\u50a8\u662f\u4e0d\u53d8\u7684\uff0c\u8fd9\u4e2a\u53ea\u9762\u5411\u5f00\u53d1\u8005\uff0c\u4f46\u662f\u8fd0\u884c\u65f6\u7684\u5b9e\u9645\u6570\u636e\u90fd\u662f\u5b58\u50a8\u5728\u81ea\u5b9a\u4e49\u670d\u52a1\u5668\u4e2d\u7684"),(0,n.kt)("li",{parentName:"ul"},"RealityID\u662f\u4e0d\u53d8\u7684\uff0c\u7528\u6237\u4ecd\u7136\u9700\u8981\u6ce8\u518cRealityID\uff0c\u8fdb\u884c\u7edf\u4e00\u5b89\u5168\u9a8c\u8bc1\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u8ddf\u81ea\u5df1\u6570\u636e\u5e93\u7684\u8bb0\u5f55\u8fdb\u884c\u6620\u5c04")),(0,n.kt)("p",null,"\u4ece\u4ef7\u503c\u4e0a\u770b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7edf\u4e00\u4e86\u5e94\u7528\u5f00\u53d1\u7684\u65b9\u5f0f\uff0c\u7b80\u5316\u4e86\u90e8\u7f72"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528C++\u5bf9\u7cfb\u7edf\u8fdb\u884c\u6269\u5c55"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u628aRealityIS\u5f53\u505a\u4e00\u79cd\u9762\u5411\u9886\u57df\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u3001\u7edf\u4e00\u3001\u7b80\u5355\u7f16\u7a0b\u6216\u8005\u81ea\u5b9a\u4e49\u7684\u673a\u5236")),(0,n.kt)("h2",{id:"213-\u6027\u80fd\u56e0\u7d20"},"2.13 \u6027\u80fd\u56e0\u7d20"),(0,n.kt)("h3",{id:"2131-\u5c40\u90e8\u6027\u4e27\u5931"},"2.13.1 \u5c40\u90e8\u6027\u4e27\u5931"),(0,n.kt)("p",null,"\u8fc7\u53bb\u5f88\u591a\u51fd\u6570\u5185\u90e8\u7684\u4e34\u65f6\u53d8\u91cf\uff0c\u5176\u751f\u547d\u5468\u671f\u672c\u6765\u53ea\u5305\u542b\u51fd\u6570\u5185\uff0c\u7b49\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u4e4b\u540e\u5c31\u4f1a\u91ca\u653e\uff0c\u4f46\u662f\u7531\u4e8e\u9700\u8981\u5728\u4e0a\u4e0b\u6e38\u51fd\u6570\u4e4b\u95f4\u4f20\u9012\u53c2\u6570\uff0c\u5b83\u6709\u53ef\u80fd\u4f1a\u5347\u7ea7\u4e3a\u5b9e\u4f53\u53d8\u91cf\uff0c\u8fd9\u5c31\u5bfc\u81f4\u5176\u5b58\u50a8\u65f6\u95f4\u6bd4\u8f83\u957f\uff0c\u5185\u5b58\u5360\u7528\u66f4\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5373\u5c40\u90e8\u6027\u4e27\u5931")),(0,n.kt)("p",null,"\u9996\u5148\u5bf9\u4e8e\u4f20\u7edfOOP\u4e2d\u7684\u79c1\u6709\u53d8\u91cf\u548c\u516c\u5171\u53d8\u91cf\u800c\u8a00\uff0c\u8fd9\u4e9b\u53d8\u91cf\u672c\u8eab\u5c31\u662f\u6301\u4e45\u5b58\u50a8\u7684\uff0c\u6240\u4ee5\u8fd9\u90e8\u5206\u5f71\u54cd\u4e0d\u5927\u3002"),(0,n.kt)("p",null,"\u4e3b\u8981\u662f\u5927\u90e8\u5206\u51fd\u6570\u5185\u90e8\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u4f7f\u7528\uff0c\u8fd9\u91cc\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5728\u4f20\u7edf\u4e2d\u5355\u4e2a\u51fd\u6570\u53ef\u4ee5\u72ec\u7acb\u5b8c\u6210\u7684\u4e8b\u60c5\uff0c\u5728RealityIS\u4e2d\u4e5f\u662f\u72ec\u7acb\u5b8c\u6210\uff0c\u90a3\u4e48\u4e24\u8005\u662f\u7b49\u6548\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f20\u7edfOOP\u4e2d\u7684\u4e00\u4e2a\u590d\u6742\u51fd\u6570\u9700\u8981\u62c6\u6210\u591a\u4e2a\u51fd\u6570\uff0c\u8fd9\u79cd\u60c5\u51b5\u5728\u4f20\u7edfOOP\u4e2d\u5c3d\u7ba1\u51fd\u6570\u7684\u6267\u884c\u65f6\u95f4\u8fb9\u957f\uff0c\u4f46\u662f\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u5176\u5b58\u50a8\u65f6\u95f4\u6700\u591a\u4e5f\u53ea\u5728\u51fd\u6570\u6267\u884c\u671f\u95f4\uff1b\u5bf9\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u4e0d\u7ba1\u5d4c\u5957\u7ed3\u6784\u5982\u4f55\uff0c\u4e5f\u80fd\u4fdd\u8bc1\u53ea\u5b58\u50a8\u4e8e\u9700\u8981\u7684\u5d4c\u5957\u671f\u95f4\uff0c\u8ddfOOP\u57fa\u672c\u4e0a\u7b49\u4ef7\u3002")),(0,n.kt)("p",null,"\u5bf9\u4e8eRealityIS\u6765\u8bf4\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u662f\u88ab\u6253\u4e71\u7684\uff0c\u65e0\u6cd5\u4fdd\u8bc1\u76f8\u5173\u7684\u4e24\u4e2a\u903b\u8f91\u4e00\u5b9a\u662f\u6309\u7d27\u90bb\u6267\u884c\u7684\uff0c\u6781\u7aef\u60c5\u51b5\u4e0b\u53ef\u80fd\u4e2d\u95f4\u9694\u4e86\u5f88\u591a\u65e0\u5173\u7684\u7ec4\u4ef6\uff0c\u751a\u81f3\u53ef\u80fd\u540e\u7eed\u90fd\u4e0d\u4f1a\u518d\u88ab\u4f7f\u7528\uff0c\u4f8b\u5982\u540e\u7eed\u7684\u6761\u4ef6\u5224\u65ad\u5bfc\u81f4\u65e0\u6cd5\u8fdb\u884c\u76f8\u5e94\u7ec4\u4ef6\u5206\u652f\uff0c\u56e0\u6b64\u5f88\u96be\u9884\u6d4b\u5176\u53d8\u91cf\u7684\u5b58\u7eed\u65f6\u95f4\u3002"),(0,n.kt)("p",null,"\u4f46\u597d\u5904\u662f\u5b83\u53ea\u5206\u914d\u4e00\u6b21\uff0c\u907f\u514d\u4e0b\u6b21\u5bf9\u8be5\u53d8\u91cf\u7684\u91cd\u590d\u6784\u9020\u3002\u4ee5\u5b58\u50a8\u6362\u53d6\u8ba1\u7b97\uff08\u8fd9\u91cc\u4e3b\u8981\u6307\u5bf9\u8c61\u7684\u5206\u914d\u548c\u521d\u59cb\u5316\uff0c\u9500\u6bc1\u7b49\u64cd\u4f5c\uff09\u7684\u4e00\u79cd\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u4e9b\u53d8\u91cf\u8ddf\u5783\u573e\u56de\u6536\u4e2d\u7684\u53d8\u91cf\u8fd8\u662f\u4e0d\u4e00\u6837\uff0c\u81f3\u5c11\u8fd9\u4e9b\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u662f\u8ddf\u5b9e\u4f53\u5bf9\u8c61\u4e00\u81f4\u7684\uff0c\u5b83\u4eec\u4f1a\u968f\u7740\u5b9e\u4f53\u5bf9\u8c61\u7684\u9500\u6bc1\u800c\u81ea\u52a8\u56de\u6536\u3002"),(0,n.kt)("p",null,"\u4e00\u79cd\u4f18\u5316\u65b9\u6cd5\u662f\uff0c\u8fd9\u4e9b\u6ca1\u6709\u6807\u8bb0\u6c38\u4e45\u5b58\u50a8\u7684\u3001\u4e34\u65f6\u7684\u53d8\u91cf\uff0c\u5728\u6bcf\u5e27\u7ed3\u675f\u4e4b\u540e\u5168\u90e8\u9500\u6bc1\uff0c\u8fd9\u6837\u81f3\u5c11\u4e0b\u4e00\u5e27\u8fd8\u6ca1\u6709\u521d\u59cb\u5316 \u8fd9\u4e2a\u53d8\u91cf\u7684\u65f6\u5019\u5185\u5b58\u5360\u7528\u662f\u4e0d\u9700\u8981\u7684\uff0c\u4f46\u662f\u8fd9\u6837\u89e3\u51b3\u4e0d\u4e86\u6839\u672c\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u5e27\u7ed3\u675f\u7684\u65f6\u5019\u5185\u5b58\u8fd8\u662f\u4f1a\u5f88\u9ad8\uff0c\u800c\u8fd9\u4e9b\u5f62\u6210\u4e00\u4e2a\u9608\u503c\u8fd8\u662f\u4f1a\u9650\u5236\u5355\u53f0\u670d\u52a1\u5668\u7684\u80fd\u529b\uff0c\u800c\u4e14\u8fd9\u79cd\u4f18\u5316\u5e26\u6765\u590d\u6742\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6700\u597d\u7684\u6307\u5bfc\u662f")),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u7684\u53d8\u91cf\u4e0d\u6d89\u53ca\u8ddf\u5176\u4ed6\u5bf9\u8c61\u901a\u4fe1\uff0c\u5219\u6700\u597d\u6240\u6709\u6d89\u53ca\u7684\u79c1\u6709\u64cd\u4f5c\u90fd\u96c6\u4e2d\u5230\u4e00\u4e2a\u51fd\u6570\uff0c\u76f4\u5230\u8f93\u51fa\u5168\u5c40\u5c5e\u6027\u672a\u77e5\uff0c\u8fd9\u6837\u5185\u90e8\u7684\u53d8\u91cf\u90fd\u662f\u4e34\u65f6\u53d8\u91cf\uff0c\u8ddfOOP\u4e00\u6837\u7684\u6548\u679c\u3002\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u9700\u8981\u901a\u4fe1\uff0c\u90a3\u4e48\u8fd9\u76f8\u5f53\u4e8eOOP\u4e2d\u7684\u5bf9\u8c61\u79c1\u6709\u53d8\u91cf\uff0c\u672c\u8eab\u4e5f\u662f\u4e00\u76f4\u5b58\u50a8\u7684\uff0c\u8fd9\u4e5f\u662f\u7b49\u6548\u7684\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u6709\u70b9\u8fdd\u80cc\u7ec4\u5408\u7684\u601d\u8def\uff0c\u4f46\u662f\u6211\u4eec\u6240\u63d0\u5021\u7684\u7ec4\u5408\u601d\u60f3\uff0c\u4e5f\u5e76\u4e0d\u662f\u8bf4\u628a\u6240\u6709\u51fd\u6570\u62c6\u6210\u5c0f\u51fd\u6570\uff0c\u7ec4\u5408\u7684\u662f\u7ed3\u6784\u6027\u7684\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u79cd\u662f\u5bf9\u4e8e\u5df2\u7ecf\u7f16\u8f91\u597d\u7684\u5bf9\u8c61\uff0c\u53ef\u4ee5\u5bf9\u7ec4\u5408\u8fdb\u884c\u5408\u6279\u64cd\u4f5c\uff0c\u5373\u5c06\u90a3\u4e9b\u7ecf\u8fc7\u7ec4\u5408\u5f62\u6210\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5982\u679c\u4ed6\u4eec\u4e2d\u95f4\u5904\u7406\u7684\u90fd\u662f\u79c1\u6709\u53d8\u91cf\uff0c\u5e76\u4e14\u6ca1\u6709\u5916\u90e8\u4ea4\u4e92\uff0c\u53ef\u4ee5\u5408\u6279\u6210\u4e00\u4e2a\u51fd\u6570\u7684\u6548\u679c\uff0c\u5f53\u7136\u8fd9\u53ef\u80fd\u9700\u8981\u5728\u51fd\u6570\u6d3e\u53d1\u5c42\u505a\u4e00\u70b9\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5e26\u6765\u8fd0\u884c\u65f6\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u4f46\u8003\u8651\u5230\u5206\u5e03\u5f0f\u7684\u7ed3\u679c\uff0c\u5355\u53f0\u673a\u5668\u4e0d\u4f1a\u6210\u4e3a\u6027\u80fd\u74f6\u9888\uff0c\u800c\u4e14\u73b0\u4ee3\u8ba1\u7b97\u673a\u8ba1\u7b97\u662f\u74f6\u9888\uff0c\u800c\u5185\u5b58\u5e76\u4e0d\u662f\u5927\u7684\u74f6\u9888\uff0c\u9664\u975e\u90a3\u79cd\u6570\u636e\u7ed3\u6784\u7279\u522b\u5927\u4e14\u4e0d\u6613\u4e8e\u62c6\u5206\u7684\u573a\u666f\uff0c\u603b\u4f53\u6765\u8bb2\u95ee\u9898\u4e0d\u5927\u3002"),(0,n.kt)("h3",{id:"2132-\u65e0\u6548\u8ba1\u7b97"},"2.13.2 \u65e0\u6548\u8ba1\u7b97"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e00\u822c\u6bd4\u6e38\u620f\u7a0b\u5e8f\u7684\u6027\u80fd\u9ad8\uff0c\u662f\u56e0\u4e3a\u5e94\u7528\u7a0b\u5e8f\u5927\u591a\u91c7\u7528\u4e8b\u4ef6\u9a71\u52a8\u7684\u673a\u5236\uff0c\u4e3b\u5faa\u73af\u53ea\u6709\u4e00\u4e2a\uff0c\u5f53\u5f53\u524d\u4efb\u52a1\u5904\u7406\u5b8c\u6bd5\u65f6\uff0c\u5b83\u4f1a\u5728\u67d0\u4e2a\u5730\u65b9\u5904\u4e8e\u7b49\u5f85\u72b6\u6001\uff0c\u6216\u8005\u5c31\u662f\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u6ca1\u6709\u518d\u9700\u8981\u6267\u884c\u7684\u4efb\u52a1\u4e86\u3002\u5f53\u7cfb\u7edf\u68c0\u6d4b\u5230\u67d0\u4e2a\u4e8b\u4ef6\u65f6\uff0c\u4e00\u822c\u662f\u7528\u6237\u8f93\u5165\u4e8b\u4ef6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u89e6\u53d1\u4ee3\u7801\u7684\u6267\u884c\uff0c\u4e3a\u6b64\uff0c\u4e00\u822c\u7684\u65b9\u5f0f\u662f\u5728main\u4e2d\u7ef4\u6301\u4e00\u4e2a\u5c0f\u5faa\u73af\u6765\u4e13\u95e8\u68c0\u6d4b\u7cfb\u7edf\u4e8b\u4ef6\uff0c\u4ee5\u4fbf\u4e8e\u63a5\u6536\u5230\u7cfb\u7edf\u4e8b\u4ef6\u7684\u65f6\u5019\u53ef\u4ee5\u6b63\u786e\u89e6\u53d1\u6267\u884c\u903b\u8f91\u7684\u4ee3\u7801\uff0c\u56e0\u4e3a\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u6307\u4ee4\u5df2\u7ecf\u505c\u6b62\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7684\u903b\u8f91\u7ed3\u6784\u662f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\u7684\uff0c\u6240\u4ee5\u8fd9\u5f88\u5bb9\u6613\u901a\u8fc7\u4ee3\u7801\u6765\u63a7\u5236\u6574\u4e2a\u6d41\u7a0b\uff0c\u4f8b\u5982\u5982\u679c\u7528\u6237\u8f93\u5165\u6ca1\u6709\u53d1\u751f\uff0c\u90a3\u4e48\u6761\u4ef6\u5224\u65ad\u903b\u8f91\u4f1a\u4fdd\u8bc1\u540e\u7eed\u7684\u903b\u8f91\u90fd\u4e0d\u9700\u8981\u6267\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u65e0\u5e8f\u7684\u8ba1\u7b97\u6307\u4ee4\u88ab\u8f6c\u6362\u4e3a\u6709\u5e8f\u5217\u8868\u4e4b\u540e\uff0c\u5e26\u6765\u7684\u4e00\u4e2a\u4ee3\u4ef7\u662f\u8fd9\u79cd\u524d\u540e\u903b\u8f91\u5206\u652f\u63a7\u5236\u80fd\u529b\u7684\u4e27\u5931\uff1a\u540e\u7eed\u7684\u51fd\u6570\u552f\u4e00\u7684\u5f71\u54cd\u56e0\u7d20\u662f\u8f93\u5165\u53c2\u6570\uff0c\u53ea\u80fd\u6839\u636e\u53c2\u6570\u8fdb\u884c\u5224\u65ad\u662f\u5426\u8981\u8fdb\u884c\u8ba1\u7b97\uff0c\u4f46\u56e0\u4e3a\u6570\u636e\u5168\u90e8\u662f\u88ab\u653e\u5230block\u91cc\u9762\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u68c0\u6d4bblock\u4e2d\u5c5e\u6027\u72b6\u6001\u7684\u6539\u53d8\uff0c\u4e3b\u8981\u6709\u4e00\u4e2a\u53d1\u751f\u53d8\u5316\u5c31\u9700\u8981\u6267\u884c\u51fd\u6570\u8ba1\u7b97\u3002"),(0,n.kt)("h2",{id:"214-\u5e95\u5ea7\u94fe\u63a5\u548c\u52a0\u8f7d"},"2.14 \u5e95\u5ea7\uff1a\u94fe\u63a5\u548c\u52a0\u8f7d*"),(0,n.kt)("h3",{id:"2141-realityis\u6838\u5fc3\u57fa\u7840"},"2.14.1 RealityIS\u6838\u5fc3\u57fa\u7840"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4e0a\u5c42\u7cfb\u7edf\u6709\u5f88\u591a\u4e0d\u540c\u7684\u673a\u5236\u3001\u4e0d\u540c\u7684\u8f6f\u4ef6\u67b6\u6784\u601d\u8def\uff0c\u4f46RealityIS\u7684\u6838\u5fc3\u57fa\u7840\u5176\u5b9e\u662f\u8ba1\u7b97\u673a\u7a0b\u5e8f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u673a\u5236\u548c\u539f\u7406\u3002"),(0,n.kt)("p",null,"\u591a\u5e74\u6765\uff0c\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u539f\u7406\u57fa\u672c\u4e0a\u90fd\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u800c\u4e0a\u5c42\u7684\u7f16\u8bd1\u539f\u7406\u548c\u66f4\u4e0b\u5c42\u7684\u786c\u4ef6\u6307\u4ee4\u548c\u6c47\u7f16\u90fd\u662f\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u8fd9\u4f7f\u5f97\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u91cd\u8981\u6027\u6ca1\u6709\u88ab\u7ed9\u4e88\u8db3\u591f\u7684\u91cd\u89c6\u3002\u5c3d\u7ba1\u5b83\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u662f\u5b83\u5374\u5bf9\u4e0a\u5c42\u7684\u7f16\u8bd1\u8fc7\u7a0b\u751a\u81f3\u7f16\u7a0b\u8bed\u8a00\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u591a\u5e74\u6765\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u662f\u4f53\u73b0\u5728\u5b83\u4fc3\u8fdb\u4e86\u4e0a\u5c42\u7684\u53d1\u5c55\u548c\u8fdb\u5316\uff0c\u76f8\u53cd\uff0c\u5b83\u675f\u7f1a\u4e86\u4e0a\u9762\u7684\u8fdb\u5316\u3002"),(0,n.kt)("p",null,"\u94fe\u63a5\u548c\u52a0\u8f7d\u6709\u5f88\u591a\u91cd\u8981\u7684\u7279\u70b9\uff0c\u4f7f\u5f97\u5b83\u65e2\u91cd\u8981\u53c8\u8db3\u591f\u7b80\u5355\uff0c\u540c\u65f6\u5bf9\u4e0a\u4e0b\u6e38\u6709\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u66f4\u786e\u5207\u8bf4\u8f83\u5927\u7684\u7ea6\u675f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u975e\u5e38\u7b80\u5355"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f\u4e00\u79cd\u975e\u5e38\u4f18\u96c5\u7684\u7ed3\u6784\u6027\u62bd\u8c61"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u548c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4ea7\u751f\u4e86\u5de8\u5927\u7684\u675f\u7f1a"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u662f")),(0,n.kt)("p",null,"\u6b63\u56e0\u4e3a\u5982\u6b64\uff0cRealityIS\u8bde\u751f\u6700\u5173\u952e\u7684\u8fdb\u7a0b\u662f\u9996\u5148\u4ece\u7b26\u53f7\u8868\u5f97\u5230\u542f\u793a\uff0c\u800c\u4e0d\u662f\u76f8\u53cd\u4ece\u6e38\u620f\u7a0b\u5e8f\u7684\u7ed3\u6784\u7740\u624b\u3002\u524d\u8005\u53ef\u4ee5\u8ba4\u4e3a\u662f\u81ea\u4e0b\u5411\u4e0a\u7684\uff0c\u800c\u540e\u8005\u662f\u81ea\u4e0a\u5411\u4e0b\u7684\u3002\u6ca1\u6709\u5bf9\u7b26\u53f7\u8868\u7684\u5173\u952e\u7406\u89e3\uff0c\u6e38\u620f\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ba1\u7406\u53ea\u80fd\u7528\u4f5c\u5f00\u53d1\u5546\u5185\u90e8\u66f4\u597d\u7684\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\uff0c\u5c3d\u7ba1\u4e5f\u53ef\u4ee5\u7b80\u5316\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u4f7f\u7528\u590d\u7528\u6765\u63d0\u9ad8\u5de5\u4e1a\u5316\u751f\u4ea7\uff0c\u4f46\u662f\u5b83\u65e0\u6cd5\u76f4\u63a5\u5230\u8fbe\u4e92\u64cd\u4f5c\u6027\u3002\u5bf9\u7b26\u53f7\u8868\u7684\u542f\u793a\u624d\u5bfc\u81f4\u4e86\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u5207\u673a\u5236\u3002\u800c\u7b26\u53f7\u8868\u6b63\u662f\u94fe\u63a5\u548c\u52a0\u8f7d\u7684\u6838\u5fc3\u3002"),(0,n.kt)("h3",{id:"2142-\u7a0b\u5e8f\u7ed3\u6784\u6027"},"2.14.2 \u7a0b\u5e8f\u7ed3\u6784\u6027"),(0,n.kt)("h3",{id:"2143-\u65b0\u578b\u52a8\u6001\u94fe\u63a5"},"2.14.3 \u65b0\u578b\u52a8\u6001\u94fe\u63a5"),(0,n.kt)("h4",{id:"21431-\u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"},"2.14.3.1 \u5c06\u76ee\u6807\u6587\u4ef6\u5408\u5e76\u5728\u4e00\u8d77"),(0,n.kt)("p",null,"\u8fd9\u79cd\u67b6\u6784\u4ea7\u751f\u4e86\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u5176\u4e2d\u6700\u6838\u5fc3\u7684\u662f\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u4e00\u4e2a\u6574\u4f53\uff0c\u800c\u8fd9\u662f\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\uff0c\u5c06\u6bcf\u4e2a\u51fd\u6570\u90fd\u72ec\u7acb\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\uff0c\u4f1a\u5bfc\u81f4\u52a8\u6001\u67e5\u8be2\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u8fd9\u662f\u7531\u4e8e\u5185\u5b58\u7684\u5bfb\u5740\u67b6\u6784\u51b3\u5b9a\u7684\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u9488\u5bf9\u6bcf\u6570\u636e\u6bb5\u548c\u7a0b\u5e8f\u6bb5\u90fd\u5206\u914d\u7edd\u5bf9\u5730\u5740\uff0c\u90a3\u6837\u4e0d\u7ba1\u662f\u7f16\u8bd1\u548c\u8fd0\u884c\u65f6\u7684\u8fc7\u7a0b\u90fd\u6709\u5de8\u5927\u5f71\u54cd\uff0c\u800c\u76f8\u5bf9\u5bfb\u5740\u4f7f\u5f97\u7a0b\u5e8f\u66f4\u5bb9\u6613\u5408\u5e76\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5c06\u7a0b\u5e8f\u7ed3\u6784\u8fdb\u884c\u4e86\u7b80\u5316\u5904\u7406\uff0c\u4f7f\u5f97\u8fd9\u4e2a\u52a8\u6001\u67e5\u8be2\u7684\u5f00\u9500\u53d8\u5f97\u5f88\u4f4e\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e8c\u8fdb\u5236\u7684\u5b89\u5168\u6027\uff0c\u52a8\u6001\u7ec4\u7ec7\u5b58\u5728\u8f83\u5927\u7684\u4e8c\u8fdb\u5236\u7248\u672c\u95ee\u9898\uff0c\u8fdb\u800c\u4ea7\u751f\u5b89\u5168\u6027\u95ee\u9898\u3002\u9488\u5bf9\u8fd9\u70b9\uff0cRealityIS\u5728\u66f4\u4e0a\u5c42\u7684\u811a\u6b65\u8bed\u8a00\u5c42\u9762\u8fdb\u884c\u52a8\u6001\u7ec4\u7ec7\uff0c\u51cf\u5c11\u5bf9\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("h4",{id:"21432-\u4e8c\u8fdb\u5236\u5b89\u5168\u6027"},"2.14.3.2 \u4e8c\u8fdb\u5236\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21433-\u7248\u672c\u7ba1\u7406"},"2.14.3.3 \u7248\u672c\u7ba1\u7406"),(0,n.kt)("h4",{id:"21434-\u6027\u80fd\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"},"2.14.3.4 \u6027\u80fd\uff1a\u5927\u91cf\u7684\u7b26\u53f7\u89e3\u6790\u548c\u67e5\u627e"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u52a8\u6001\u94fe\u63a5\u6280\u672f\u4e2d\u5305\u542b\u8f83\u5927\u7684\u5171\u4eab\u5e93\u7b26\u53f7\u8868\u3001\u7a0b\u5e8f\u5bf9\u5171\u4eab\u5e93\u7b26\u53f7\u7684\u5f15\u7528\u90fd\u9700\u8981\u52a8\u6001\u67e5\u627e\u7b26\u53f7\u8868\uff0c\u56e0\u6b64\u5f15\u8d77\u8f83\u5927\u7684\u6027\u80fd\u5f00\u652f\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u51cf\u5c11\u6027\u80fd\u5f00\u652f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u7ec4\u4ef6\u51fd\u6570\u5185\u7684\u5168\u5c40\u7b26\u53f7\u67e5\u627e\uff0c\u51fd\u6570\u90fd\u662f\u9759\u6001\u6307\u9488\uff0c\u8fd9\u5f97\u76ca\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u98ce\u683c\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u90fd\u662f\u7eaf\u51fd\u6570\uff0c\u5373\u4f7f\u5bf9\u4e8eiOS\u7cfb\u7edf\uff0c\u53ea\u80fd\u91c7\u53d6\u89e3\u91ca\u6027\u7684\u6267\u884c\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u51fd\u6570\u4f7f\u7528\u7684\u5730\u5740\u4e5f\u662f\u5728\u4e00\u4e2a\u5f88\u5c0f\u7684\u5185\u5b58\u5730\u5740\u7a7a\u95f4\uff0c\u6b64\u65f6\u7684\u4ee3\u7801\u5f62\u6210\u4e00\u79cd\u201c\u9690\u5f0f\u7684\u7b26\u53f7\u8868\u201d\uff0c\u56e0\u4e3a\u6211\u4eec\u901a\u4ee3\u7801\u83b7\u53d6\u7b26\u53f7\u5728\u6808\u4e2d\u7684\u5730\u5740\uff0c\u8fd9\u907f\u514d\u4e86\u5927\u91cf\u7684\u5168\u5c40\u67e5\u627e"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u5bf9\u4e8eRealityIS\u8fd0\u884c\u65f6\uff0c\u4ed6\u9700\u8981\u67e5\u627e\u5168\u5c40\u7b26\u53f7\u8868\u6765\u83b7\u53d6\u5730\u5740\uff0c\u6211\u4eec\u7684\u7b26\u53f7\u8868\u7ed3\u6784\u4e5f\u66f4\u52a0\u5de7\u5999\u3002\u8fd9\u79cd\u67e5\u627e\u88ab\u8f6c\u5316\u4e3a\u53e6\u4e00\u79cd\u5f62\u5f0f\uff1a\u5373\u5728\u7f16\u8bd1\u65f6\u5efa\u7acb\u4e86\u51fd\u6570\u7ec4\u4ef6\u548c\u7b26\u53f7\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u7136\u540e\u8fd9\u79cd\u5173\u7cfb\u5728\u52a0\u8f7d\u65f6\u88ab\u4fdd\u5b58\u4e3a\u5185\u5b58\u4e2d\u6570\u636e\u548c\u4ee3\u7801\u7684\u4e00\u4e2a\u5f71\u89c6\uff0c\u8fd9\u5c31\u662f\u4e00\u4e2aC++\u7684\u6307\u9488\u5c31\u627e\u5230\u4e86\u5bf9\u5e94\u7684\u5730\u5740\uff0c\u6240\u4ee5\u8fd9\u95f4\u63a5\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u6bcf\u6b21\u7b26\u53f7\u8868\u5168\u5c40\u67e5\u627e\uff0c\u56e0\u4e3a\u5b83\u53ea\u5728\u52a0\u8f7d\u65f6\u8ba1\u7b97\u4e00\u6b21\uff0c\u800c\u4e0d\u662f\u9700\u8981\u6bcf\u6b21\u9047\u5230\u7b26\u53f7\u52a8\u6001\u4e14\u91cd\u590d\u67e5\u627e\u3002\u7ec4\u4ef6\u548c\u51fd\u6570\u4e4b\u95f4\u7684\u786e\u5b9a\u5173\u7cfb\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\u3002")),(0,n.kt)("h3",{id:"2144-\u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"},"2.14.4 \u591a\u4efb\u52a1\u7cfb\u7edf\u5b89\u5168\u6027"),(0,n.kt)("p",null,"\u5c06\u57282.16\u8282\u4e13\u95e8\u8ba8\u8bba"),(0,n.kt)("h2",{id:"215-\u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"},"2.15 \u590d\u6742\u7cfb\u7edf\u548c\u7ec6\u80de\u6a21\u578b"),(0,n.kt)("h3",{id:"2151-\u590d\u6742\u7cfb\u7edf"},"2.15.1 \u590d\u6742\u7cfb\u7edf"),(0,n.kt)("h3",{id:"2152-\u7ec6\u80de\u6a21\u578b"},"2.15.2 \u7ec6\u80de\u6a21\u578b"),(0,n.kt)("p",null,"But for Dr. Kay, he states that ",(0,n.kt)("a",{parentName:"p",href:"http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en"},"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.")," Why? Well, part of his background was cell biology and when he did the math on their computational power, he realized that while software routinely has trouble scaling, cells can easily coordinate and scale by a factor of over a trillion, creating some of the most fantastically complex things in existence, capable of correcting their own errors. By comparison, the most sophisticated computer software programs are slow, tiny, bugfests. ",(0,n.kt)("em",{parentName:"p"},"Kay's")," conception of OOP starts with a single question: how can we get our software to match this scalability?"),(0,n.kt)("h4",{id:"21521-isolation"},"2.15.2.1 Isolation"),(0,n.kt)("p",null,'First, let\'s discuss isolation. This is a shorter term than "local retention and protection and hiding of state-process".'),(0,n.kt)("p",null,"The interior of a cell is messy and confusing, but the cell membrance wraps this up in a tidy package, hiding the internal details. It's estimated that around 50 to 70 ",(0,n.kt)("em",{parentName:"p"},"billion")," cells die in your body every day. But you don't. Could your software keep running if you had millions of exceptions being thrown every minute? I doubt it."),(0,n.kt)("p",null,"You not dying when your cells die isn't encapsulation; it's isolation. Consider the following (awful) example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"class MyExample:\n def reciprocal(self, num):\n return 1.0/num\n\nexample = MyExample()\nprint example.reciprocal(4);\nprint example.reciprocal(0);\n")),(0,n.kt)("p",null,"In the above code, we've encapsulated the reciprocal equation in the class, but then ..."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'0.25\nTraceback (most recent call last):\n File "class.py", line 7, in \n print example.reciprocal(0);\n File "class.py", line 3, in reciprocal\n return 1.0/num\nZeroDivisionError: float division by zero\n')),(0,n.kt)("p",null,"The object dies, as does the code which contained it. This is the antithesis of what Dr. Kay is trying to get us to understand."),(0,n.kt)("p",null,"If you think of Web browsers and servers as objects, however, we see something closer to his vision. If your browser crashed every time a web server crashed or was otherwise unavailable, Microsoft IIS would never have reached 2.0."),(0,n.kt)("p",null,"Now that we sort of understand a core idea of Kay's, Lets take it further. Kay points out that from the early days of Arpanet in the 60s, to the time of his OOPSLA keynote in 1997, Arpanet had grown roughly 100 million times the size of what it was. And it didn't have to be repeatedly taken down for maintenance every time we wanted to extend it. The internet, today, is sometimes cited by Kay as the only working example of his OO model."),(0,n.kt)("h3",{id:"2153-\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"},"2.15.3 \u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"),(0,n.kt)("h4",{id:"21531-is-erlang-object-oriented"},"2.15.3.1 Is Erlang object oriented?"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Joe Armstrong:")," Smalltalk got a lot of the things right. So if your question is about what I think about object oriented programming, I sort of changed my mind over that. I wrote a an article, a blog thing, years ago - Why object oriented programming is silly. I mainly wanted to provoke people with it. They had a quite interesting response to that and I managed to annoy a lot of people, which was part of the intention actually. I started wondering about what object oriented programming was and I thought Erlang wasn't object oriented, it was a functional programming language."),(0,n.kt)("p",null,"Then, my thesis supervisor said \"But you're wrong, Erlang is extremely object oriented\". He said object oriented languages aren't object oriented. I might think, though I'm not quite sure if I believe this or not, but Erlang might be the only object oriented language because the 3 tenets of object oriented programming are that it's based on message passing, that you have isolation between objects and have polymorphism."),(0,n.kt)("p",null,"Alan Kay himself wrote this famous thing and said \"The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages\". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back."),(0,n.kt)("p",null,"But you don't really do that and you don't really have isolation which is one of the problems. Dan Ingalls said yesterday (I thought it was very nice) about messaging that once you got messaging, you don't have to care where the message came from. You don't really have to care, the runtime system has to organize the delivery of the message, we don't have to care about how it's processed. It sort of decouples the sender and the receiver in this kind of mutual way. That's why I love messaging."),(0,n.kt)("p",null,"The 3 things that object oriented programming has it's messaging, which is possibly the most important thing. The next thing is isolation and that's what I talked about earlier, that my program shouldn't crash your program, if the 2 things are isolated, then any mistakes I make in my program will not crash your program. This is certainly not true with Java. You cannot take 2 Java applications, bung them in the JVM and one of them still halts the machine and the other one will halt as well. You can crash somebody else's application, so they are not isolated."),(0,n.kt)("p",null,"The third thing you want is polymorphism. Polymorphism is especially regarding messaging, that's just there for the programmer's convenience. It's very nice to have for all objects or all processes or whatever you call them, to have a printMe method - \"Go print yourself\" and then they print themselves. That's because the programmers, if they all got different names, the programmer is never going to remember this, so it's a polymorphism. It just means \"OK, all objects have a printMe method. All objects have a what's your size method or introspection method.\""),(0,n.kt)("p",null,"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about. You can try it and see it for yourself."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://www.infoq.com/interviews/johnson-armstrong-oop/"},"https://www.infoq.com/interviews/johnson-armstrong-oop/"))),(0,n.kt)("h4",{id:"21532-\u6d88\u606f\u4e0e\u9694\u79bb"},"2.15.3.2 \u6d88\u606f\u4e0e\u9694\u79bb"),(0,n.kt)("p",null,"\u6309\u7167Alan Kay\u7684\u5b9a\u4e49\uff0cOOP\u7684\u6838\u5fc3\u4e09\u8981\u7d20\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"message passing, "),(0,n.kt)("li",{parentName:"ul"},"that you have isolation between objects "),(0,n.kt)("li",{parentName:"ul"},"and have polymorphism.")),(0,n.kt)("p",null,"\u5927\u591a\u6570\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u90fd\u652f\u6301\u591a\u6001\uff0c\u4f46\u662f\u5173\u4e8e\u9694\u79bb\u7684\u610f\u4e49\uff0c\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u7684\u7406\u89e3\u662f\u4e0d\u592a\u5b8c\u6574\u7684\u3002\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u4eba\u4eec\u8bf4\u7684\u66f4\u591a\u7684\u662f\u5c01\u88c5\u800c\u4e0d\u662f\u9694\u79bb\uff0c\u8868\u9762\u4e0a\u770b\u5c01\u88c5\u5176\u5b9e\u5c31\u662f\u628a\u5404\u79cd\u7ec6\u8282\u9690\u85cf\u5728\u5bf9\u8c61\u5185\u90e8\uff0c\u4ece\u800c\u5b9e\u73b0\u4e86\u9694\u79bb\u3002\u4f46\u8fd9\u53ea\u662f\u6982\u5ff5\u4e0a\u7684\u9694\u79bb\uff0c\u800c\u4e0d\u662f\u771f\u6b63\u8fd0\u884c\u65f6\u7684\u5bf9\u8c61\u9694\u79bb\u3002"),(0,n.kt)("p",null,"\u4e4b\u6240\u4ee5\u63d0\u51faisolation\u7684\u6982\u5ff5\uff0c\u5b83\u7684\u610f\u4e49\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5927\u89c4\u6a21\u7a0b\u5e8f\u7684\u5065\u58ee\u6027\uff0c\u6bd4\u5982\u57281000\u4e2a\u5bf9\u8c61\u8fd0\u884c\u7684\u7a0b\u5e8f\u4e2d\uff0c\u5982\u679c\u6709\u5176\u4e2d\u51e0\u4e2a\u5bf9\u8c61\u53d1\u751f\u4e86\u9519\u8bef\uff0c\u5982\u679c\u5b83\u7684\u903b\u8f91\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u5bf9\u8c61\uff0c\u5219\u6574\u4e2a\u7a0b\u5e8f\u5e94\u8be5\u4e0d\u53d7\u5230\u5f71\u54cd\u3002\u6240\u4ee5\u5b83\u662f\u4ece\u7a0b\u5e8f\u6784\u9020\u65b9\u9762\u7684\u610f\u4e49\uff0c\u800c\u5c01\u88c5\u5e76\u4e0d\u80fd\u89e3\u51b3\u4e0a\u8ff0\u7684\u5065\u58ee\u6027\u95ee\u9898\uff0c\u5c01\u88c5\u7684\u6982\u5ff5\u66f4\u591a\u7684\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u800c\u8a00\u7684\uff0c\u8ba9\u7a0b\u5e8f\u5458\u628a\u4e00\u7ec4\u76f8\u5173\u7684\u65b9\u6cd5\u548c\u5c5e\u6027\u5c01\u88c5\u5728\u4e00\u4e2a\u5bf9\u8c61\u4e0a\u662f\u6613\u4e8e\u7406\u89e3\u548c\u7ba1\u7406\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u662f\u9762\u5411\u8f6f\u4ef6\u6784\u9020\u7684\u610f\u4e49\uff0c\u5373\u9762\u5411\u673a\u5668\uff0c\u800c\u4e0d\u662f\u9762\u5411\u7a0b\u5e8f\u5458\u7406\u89e3\u7684\u610f\u4e49\uff0c\u800c\u5f53\u4eca\u5927\u591a\u6570\u5173\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u6982\u5ff5\u66f4\u591a\u662f\u56f4\u7ed5\u7a0b\u5e8f\u5458\u7684\u7406\u89e3\u7684\u89d2\u5ea6\u3002")),(0,n.kt)("p",null,"\u90a3\u4e3a\u4ec0\u4e48\u5bf9\u8c61\u5c01\u88c5\u89e3\u51b3\u4e0d\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u800cErlang\u89e3\u51b3\u4e86\u9694\u79bb\u7684\u95ee\u9898\uff0c\u6838\u5fc3\u539f\u56e0\u5728\u4e8eErlang\u4e3a\u4e86\u4fdd\u8bc1\u5065\u58ee\u6027\uff0c\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u72ec\u7acb\u8fd0\u884c\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9694\u79bb\uff0c\u4e00\u4e2a\u5bf9\u8c61\u7684Crash\u4e0d\u80fd\u5f71\u54cd\u5176\u4ed6\u5bf9\u8c61\uff0c\u6240\u4ee5Erlang\u628a\u65b9\u6cd5\u8c03\u7528\u8fdb\u884c\u4e86\u5207\u9664\u3002\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u51e0\u4e4e\u9664Erlang\u4e4b\u5916\u7684\u6240\u6709\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4eec\u4e3a\u4e86\u4fdd\u8bc1\u7a0b\u5e8f\u6267\u884c\u7684\u5e8f\u5217\uff0c\u90fd\u662f\u91c7\u7528\u76f4\u63a5\u8c03\u7528\u7684\u65b9\u6cd5\uff0c\u5373\u5f53A\u5bf9\u8c61\u8c03\u7528B\u5bf9\u8c61\u7684\u65b9\u6cd5\u65f6\uff0cA\u5bf9\u8c61\u7684\u6307\u4ee4\u4f1a\u88ab\u6302\u8d77\uff0c\u7a0b\u5e8f\u4f1a\u8fdb\u5165\u5230B\u5bf9\u8c61\u5185\u90e8\u76f8\u5e94\u7684\u65b9\u6cd5\u8fdb\u884c\u6267\u884c\uff0c\u5e76\u4e14\u7b49\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u8fd4\u56de\u503c\u7ed9A\u5bf9\u8c61\uff0c\u5e76\u5c06\u6267\u884c\u6307\u4ee4\u7684\u6307\u9488\u8fd4\u56de\u5230\u5bf9\u8c61A\u8c03\u7528\u65b9\u6cd5\u540e\u9762\u7684\u4f4d\u7f6e\u3002"),(0,n.kt)("p",null,"\u6574\u4e2a\u73b0\u4ee3\u7f16\u8bd1\u67b6\u6784\u90fd\u662f\u6309\u7167\u4e0a\u8ff0\u7684\u6d41\u7a0b\u6784\u5efa\u7684\uff0c\u6bd4\u5982\u5728\u65b9\u6cd5\u8c03\u7528\u7684\u65f6\u5019\uff0c\u7a0b\u5e8f\u8df3\u8f6c\u5230B\u5bf9\u8c61\u76f8\u5e94\u7684\u4ee3\u7801\u533a\u57df\uff0c\u5e76\u4f7f\u7528\u5bc4\u5b58\u5668\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u7136\u540e\u65b9\u6cd5\u6267\u884c\u5b8c\u6bd5\u540e\u8df3\u8f6c\u56de\u5230\u539f\u6765\u7684\u8fd4\u56de\u5730\u5740\u3002"),(0,n.kt)("p",null,"\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u6837\u7684\u6d41\u7a0b\u5bf9\u4e8e\u7f16\u8bd1\u5668\u67b6\u6784\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u7a0b\u5e8f\u5458\u90fd\u662f\u76f8\u5bf9\u5bb9\u6613\u7406\u89e3\u7684\uff1a\u5f97\u5230\u8fd4\u56de\u503c\u540e\u63a5\u7740\u6267\u884c\u540e\u9762\u7684\u8bed\u53e5\uff0c\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u601d\u8def\u662f\u8fde\u8d2f\u7684\u3002\u5e76\u4e14\u5982\u524d\u9762\u5173\u4e8e\u54cd\u5e94\u5f0f\u7f16\u7a0b\u6216\u8005\u7edf\u7b79\u7f16\u7a0b\u76f8\u5173\u7684\u63cf\u8ff0\uff0c\u7a0b\u5e8f\u5458\u4e0d\u9700\u8981\u989d\u5916\u4fdd\u5b58\u8ba1\u7b97\u7ed3\u679c\uff0c\u76f4\u63a5\u4f7f\u7528\u5f53\u524d\u7684\u503c\u8fdb\u884c\u8ba1\u7b97\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u7ba1\u7406\u662f\u6700\u7b80\u5355\u7684\u3002\u5426\u5219\u6211\u4eec\u9700\u8981\u4e00\u5957\u590d\u6742\u7684\u673a\u5236\u6765\u7ba1\u7406\u903b\u8f91\uff0c\u6bd4\u5982\u9700\u8981\u4fdd\u5b58\u4e00\u4e9b\u503c\u5728\u540e\u9762\u67d0\u4e2a\u65f6\u5019\u4f7f\u7528\uff0c\u800c\u5982\u679c\u4f7f\u7528\u7684\u65f6\u5019\u4ee3\u7801\u5728\u5176\u4ed6\u4f4d\u7f6e\uff0c\u8fd8\u6d89\u53ca\u600e\u4e48\u53d6\u5f97\u8fd9\u4e9b\u5b58\u50a8\u7684\u8ba1\u7b97\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u79cd\u8026\u5408\u7684\u903b\u8f91\u7834\u574f\u4e86\u9694\u79bb\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u88ab\u8c03\u7528\u65b9\u6cd5Crash\uff0c\u6bd4\u5982\u4f1a\u5f71\u54cd\u540e\u9762\u6574\u4e2a\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u8ba9\u6574\u4e2a\u7a0b\u5e8f\u5d29\u6e83\u3002\u8fd8\u4e0d\u8bf4\u8fd9\u79cd\u8026\u5408\u5bfc\u81f4\u4e86\u6574\u4e2a\u7a0b\u5e8f\u7684\u5355\u4e00\u6027\u95ee\u9898\uff0c\u5373\u6574\u4e2a\u7a0b\u5e8f\u9700\u8981\u88ab\u4e00\u6b21\u6027\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u6574\u4f53\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cA\u5bf9B\u7684\u5f15\u7528\uff0c\u5f62\u6210\u4e86\u8026\u5408\uff0cB\u4e0d\u80fd\u52a8\u6001\u66f4\u65b0\uff0c\u5982\u679cB\u6709\u4fee\u6539\uff0c\u4e5f\u9700\u8981\u6574\u4e2a\u7a0b\u5e8f\u91cd\u65b0\u7f16\u8bd1\uff0c\u5373\u4f7f\u52a8\u6001\u8bed\u8a00\uff0c\u4e5f\u4f1a\u5f62\u6210\u5f88\u6df1\u7684\u4f9d\u8d56\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u8981\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u6211\u4eec\u5fc5\u987b\u5c06\u65b9\u6cd5\u8c03\u7528\u5207\u5f00\uff0c\u5373A\u65b9\u6cd5\u4e0d\u9700\u8981\u7b49\u5f85B\u65b9\u6cd5\u7684\u8fd4\u56de\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u53ef\u4ee5\u6709\u5f88\u591a\u4e0d\u540c\u7684\u5b9e\u73b0\u673a\u5236\uff0c\u4f46\u4e0d\u7ba1\u600e\u6837\u90fd\u4f1a\u7ed9\u7cfb\u7edf\u67b6\u6784\u548c\u5f00\u53d1\u8005\u5e26\u6765\u4e00\u4e9b\u4e0d\u4fbf\uff0c\u6216\u8005\u8bf4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"We need to isolate all the code that runs in order to achieve a goal in such a way that we can detect if any errors occurred when trying to achieve a goal. Also, when we are trying to simultaneously achieve multiple goals we do not want a sodware error occurring in one part of the system to propagate to another part of the system."),(0,n.kt)("p",{parentName:"blockquote"},"The essential problem that must be solved in making a fault-tolerant sodware system is therefore that of fault-isolation. Dicerent programmers will write dicerent modules, some modules will be correct, others will have errors. We do not want the errors in one module to adversely acect the behaviour of a module which does not have any errors."),(0,n.kt)("p",{parentName:"blockquote"},"To provide fault-isolation we use the traditional operating system no- tion of a process. Processes provide protection domains, so that an error in one process cannot acect the operation of other processes. Dicerent pro- grammers write dicerent applications which are run in dicerent processes; errors in one application should not have a negative influence on the other applications running in the system."),(0,n.kt)("p",{parentName:"blockquote"},"-- from Joe Armstrong\u2018s Phd thesis")),(0,n.kt)("p",null,"Erlang\u9009\u62e9\u4e86\u8ba9\u6bcf\u4e2a\u7ebf\u7a0b\u4e4b\u95f4\u5b8c\u5168\u9694\u79bb\uff0c\u6240\u4ee5\u5929\u751f\u5c31\u89e3\u51b3\u4e86\u9694\u79bb\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e14\u8fd9\u79cd\u9694\u79bb\u6027\u662f\u975e\u5e38\u5f7b\u5e95\u7684\u3002\u5c3d\u7ba1\u5728\u4e00\u4e2a\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u521b\u5efa\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4f46\u662f\u5b83\u5374\u4e0d\u80fd\u76f4\u63a5\u8c03\u7528\uff0c\u6240\u6709\u7684\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u5c31\u81ea\u7136\u53d8\u6210\u4e86\u6d88\u606f\u3002\u8fd9\u53c8\u5929\u751f\u7b26\u5408\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u6838\u5fc3\uff0c\u5373\u6d88\u606f\u4f20\u9012\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5982\u679c\u6ca1\u6709\u5b9e\u73b0\u65b9\u6cd5\u8c03\u7528\u7684\u5207\u5272\uff0c\u4ece\u7406\u8bba\u4e0a\u8bf4\u5c31\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0c\u4e5f\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u7684\u6d88\u606f\u4f20\u9012\u3002")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation.")),(0,n.kt)("p",null,"\u5728Smalltalk\u4e2d\uff0c\u5c3d\u7ba1\u8bed\u8a00\u5f00\u53d1\u8005\u8ba4\u4e3a\u65b9\u6cd5\u8c03\u7528\u662f\u6d88\u606f\u4f20\u9012\uff0c\u800c\u4e0d\u662f\u4f20\u7edf\u7f16\u7a0b\u610f\u4e49\u4e0a\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u4f46\u672c\u8d28\u4e0a\u8fd9\u79cd\u6d88\u606f\u4f20\u9012\u6ca1\u80fd\u591f\u5b9e\u73b0\u771f\u6b63\u7684\u9694\u79bb\uff0cSmalltalk\u7684\u6d88\u606f\u4f20\u9012\u66f4\u591a\u662f\u7ed3\u5408\u5ef6\u8fdf\u7ed1\u5b9a\u7684\u52a8\u6001\u7279\u6027\u4f7f\u5f97\u54cd\u5e94\u8005\u6709\u4e00\u5b9a\u7684\u7075\u6d3b\u6027\uff0c\u4f8b\u5982\u5bf9\u4e00\u4e2a\u201c\u65b9\u6cd5\u8c03\u7528\u201d\u7684\u6d88\u606f\u4ea7\u751f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u54cd\u5e94\uff0c\u8fd9\u5f97\u76ca\u4e8e\u5ef6\u8fdf\u7ed1\u5b9a\uff0c\u4f8b\u5982\u53ef\u4ee5\u901a\u8fc7\u8fd0\u884c\u65f6\u7684\u4e00\u6761\u60c5\u51b5\u6267\u884c\u4e0d\u540c\u7684\u54cd\u5e94\u3002\u4f46\u8fd9\u79cd\u7279\u6027\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u8f6f\u4ef6\u53ef\u6269\u5c55\u6027\u7684\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u6700\u91cd\u8981\u7684\u9694\u79bb\u95ee\u9898\u3002\u800c\u53ef\u6269\u5c55\u6027\u5e76\u4e0d\u662fSmalltalk\u552f\u4e00 \u7684\u4f18\u52bf\uff0c\u5f88\u591a\u52a8\u6001\u8bed\u8a00\u90fd\u80fd\u591f\u505a\u5230\u8fd9\u6837\u7684\u3002"),(0,n.kt)("p",null," \u5f53\u7136\u5bf9\u4e8e\u5065\u58ee\u6027\uff0cSmalltalk\u7684\u601d\u8def\u662f\uff1a1\uff09\u9996\u5148\u4fdd\u5b58\u5feb\u7167\uff1b2\uff09\u7136\u540e\u53ef\u4ee5\u52a8\u6001\u4fee\u6539\u4ee3\u7801\u8fdb\u884c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"Erlang\u7684\u6d88\u606f\u4f20\u9012\u6a21\u578b\u5e26\u6765\u4e86\u5bf9\u8c61\u4e4b\u95f4\u5173\u7cfb\u7684\u975e\u5e38\u4e0d\u4e00\u6837\u7684\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f46\u5b83\u4fdd\u8bc1\u4e86\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u7684\u771f\u6b63\u6838\u5fc3\u7279\u6027\u3002\u8fd9\u79cd\u4e0d\u4e00\u6837\u7684\u7279\u6027\u662f\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u90fd\u4e0d\u5177\u5907\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u8bf4\u662f\u552f\u4e00 \u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002"),(0,n.kt)("h4",{id:"21533-erlang\u6d88\u606f\u7684\u9650\u5236"},"2.15.3.3 Erlang\u6d88\u606f\u7684\u9650\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Each independent activity should be performed in a completely isolated process. Such processes should share no data, and only commu- nicate by message passing. This is to limit the consequences of a sodware error."),(0,n.kt)("p",{parentName:"blockquote"},"As soon as two processes share any common resource, for example, memory or a pointer to memory, or a mutex etc the possibility exists that a sodware error in one of the processes will corrupt the shared resource. Since eliminating all such sodware errors for large sodware systems is an unsolved problem I think that the only realistic way to build large reliable systems is by partitioning the system into independent parallel processes, and by providing mechanisms for monitoring and restarting these pro- cesses.")),(0,n.kt)("p",null,"\u7a0b\u5e8f\u4e2d\u7684\u5bf9\u8c61\u4e4b\u95f4\u5f80\u5f80\u90fd\u5305\u542b\u7740\u590d\u6742\u7684\u5173\u7cfb\uff0c\u5bf9\u8c61\u6570\u636e\u7684\u5f15\u7528\uff0c\u65b9\u6cd5\u8c03\u7528\uff0c\u6216\u8005\u7b2c\u4e09\u65b9\u5171\u4eab\u6570\u636e\uff0c\u8fd9\u4e9b\u90fd\u662f\u5e76\u53d1\u548c\u9694\u79bb\u9762\u5bf9\u7684\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u65b9\u9762Erlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u66f4\u597d\u7684\u65b9\u6cd5\uff0c\u53ea\u662f\u5f3a\u884c\u5c06\u5bf9\u8c61\u5b8c\u5168\u9694\u79bb\u5f00\uff0c\u6240\u4ee5\u5bf9\u8c61\u4e4b\u95f4\u7684\u6240\u6709\u901a\u4fe1\u5c31\u53d8\u6210\u6d88\u606f\uff0c\u8fd9\u4e9b\u6d88\u606f\u53ef\u80fd\u662f\u5bf9\u53e6\u4e00\u4e2a\u5bf9\u8c61\u67d0\u4e2a\u6570\u636e\u7684\u8bfb\u53d6\uff0c\u67d0\u4e2a\u65b9\u6cd5\u7684\u8c03\u7528\u7b49\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u5168\u90e8\u8f6c\u5316\u4e3a\u6d88\u606f\uff1b\u5e76\u4e14\u7531\u4e8e\u6d88\u606f\u7684\u5f02\u6b65\u6027\uff0c\u7a0b\u5e8f\u7684\u987a\u5e8f\u88ab\u6253\u4e71\uff0c\u9700\u8981\u4ee5\u4e00\u79cd\u975e\u76f4\u63a5\u7684\u65b9\u5f0f\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u867d\u7136\u672c\u8d28\u4e0a\u6240\u6709\u7684\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u8fd9\u4e48\u53bb\u8f6c\u5316\uff0c\u4f46\u662f\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u590d\u6742\u6027\uff0c\u800cErlang\u5e76\u6ca1\u6709\u63d0\u4f9b\u5f88\u597d\u7684\u673a\u5236\u53bb\u89e3\u51b3\u8fd9\u79cd\u590d\u6742\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u8fd9\u5c31\u4f7f\u5f97Erlang\u57fa\u672c\u4e0a\u53ea\u9002\u5408\u4e8e\u90a3\u79cd\u9ad8\u5e76\u53d1\u4f46\u662f\u7ebf\u7a0b\u76f8\u5bf9\u72ec\u7acb\u7684\u5e94\u7528\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u4e0b\u4e00\u8282\u5c06\u770b\u5230\uff0cRealityIS\u901a\u8fc7\u5f15\u5165\u4e00\u79cd\u65b0\u7684\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002"),(0,n.kt)("h3",{id:"2154-createscript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"},"2.15.4 CreateScript\u4e2d\u7684\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u53ea\u80fd\u4fee\u6539\u81ea\u8eab\u5c5e\u6027\uff0c\u4e0d\u80fd\u4fee\u6539\u5176\u4ed6\u5bf9\u8c61\u5c5e\u6027\uff0c\u53ea\u80fd\u7ed9\u5176\u4ed6\u5bf9\u8c61\u8f93\u5165\u53c2\u6570\uff0c\u7531\u5176\u4ed6\u5bf9\u8c61\u81ea\u884c\u5904\u7406\uff0c\u8fd9\u6837\u7684\u53c2\u6570\u8f93\u5165\u5b9e\u9645\u4e0a\u5c31\u662f\u6d88\u606f"),(0,n.kt)("h4",{id:"21541-\u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"},"2.15.4.1 \u91cd\u65b0\u5b9a\u4e49\u9694\u79bb"),(0,n.kt)("p",null,"\u5e76\u4e0d\u9700\u8981\u6240\u6709\u7ebf\u7a0b\u771f\u6b63\u9694\u79bb\uff0c\u771f\u6b63\u9694\u79bb\u5e26\u6765\u5f88\u591a\u7f16\u7a0b\u4e0a\u7684\u4e0d\u4fbf\u3002"),(0,n.kt)("p",null,"\u539f\u59cb\u9694\u79bb\u7684\u5b9a\u4e49\u662f\u5e0c\u671b\u6bcf\u4e2a\u4ee3\u7801\u90fd\u4e0d\u5f71\u54cd\u5176\u4ed6\u4ee3\u7801\uff0c\u4f46\u5b9e\u9645\u4e0a\u8fd9\u53ea\u662f\u4e00\u4e2a\u7c92\u5ea6\u7684\u95ee\u9898\uff0c\u6bd4\u5982\u4e25\u683c\u7684\u4e00\u70b9\u7684\u662f\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u90fd\u9694\u79bb\uff0c\u6bcf\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u5f7c\u6b64\u90fd\u4e0d\u5f71\u54cd\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u7a0d\u5fae\u653e\u677e\u4e00\u4e0b\u8fd9\u79cd\u9694\u79bb\uff0c\u4f60\u5f71\u54cd\u53ef\u4ee5\u5f71\u54cd\u4e00\u5b9a\u7684\u8303\u56f4\uff0c\u5355\u53ea\u53ea\u8981\u6700\u7ec8\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8bc6\u522b\u8fd9\u79cd\u5f71\u54cd\uff0c\u5e76\u5c06\u6240\u6709\u53d7\u5f71\u54cd\u7684\u90e8\u5206\u5168\u90e8\u53bb\u9664\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u662fRealityIS\u4e2d\u7684\u673a\u5236\uff0c\u5b83\u901a\u8fc7\u5b9a\u4e49\u5173\u952e\u5b58\u6863\u5c5e\u6027\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u5411Smalltalk\u90a3\u6837\u5c1d\u8bd5\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5b58\u6863\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u53ef\u4ee5\u4ece\u4efb\u610f\u4f4d\u7f6e\u6062\u590d\u3002\u76f8\u53cd\uff0cRealityIS\u53ea\u80fd\u4ece\u4e00\u4e9b\u5173\u952e\u8282\u70b9\u8fdb\u884c\u6062\u590d\uff0c\u5e94\u7528\u7a0b\u5e8f\u6216\u8005\u7ec4\u4ef6\u9700\u8981\u5bf9\u5bf9\u8c61\u7684\u6570\u636e\u5b57\u6bb5\u8fdb\u884c\u6062\u590d\uff0c\u8fd9\u4e9b\u5b57\u6bb5\u6839\u636e\u4e0a\u4e00\u4e2a\u672a\u53d7\u5f71\u54cd\u7684\u5173\u952e\u5b58\u6863\u5c5e\u6027\u8fdb\u884c\u63a8\u7b97\u3002"),(0,n.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4\u7684\u9694\u79bb\u6027\u6982\u5ff5\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4fdd\u6301\u7a0b\u5e8f\u7684\u63a7\u5236\u80fd\u529b\uff0c\u4f7f\u7a0b\u5e8f\u5458\u53ef\u4ee5\u50cf\u4f20\u7edf\u7a0b\u5e8f\u90a3\u6837\u8fdb\u884c\u64cd\u4f5c\uff0c\u540c\u65f6\u53c8\u80fd\u4fdd\u8bc1\u9694\u79bb\u6027\u3002\u5bf9\u8c61\u4e4b\u95f4\u4ecd\u7136\u4ee5\u6d88\u606f\u8fdb\u884c\u4f20\u9012\uff0c\u4f46\u662f\u8fd9\u79cd\u6d88\u606f\u66f4\u7c7b\u4f3c\u4e8e\u65b9\u6cd5\u8c03\u7528\uff0c\u8c03\u7528\u7684\u65b9\u5f0f\u66f4\u76f4\u63a5\uff0c\u800c\u4e0d\u662f\u50cfErlang\u4e00\u6837\u6bcf\u4e2a\u8c03\u7528\u90fd\u9700\u8981\u5c01\u88c5\u4e3a\u6d88\u606f\u3002"),(0,n.kt)("p",null,"\u9694\u79bb\u5e26\u6765\u5f88\u591a\u597d\u5904\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u5730\u5e76\u53d1\u5904\u7406\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u4e00\u4e2a\u4e3b\u8981\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5065\u58ee\u6027\uff0c\u66f4\u597d\u5bb9\u9519\uff0c\u4e00\u90e8\u5206\u7684error\u4e0d\u4f1a\u5f71\u54cd\u5176\u4ed6\u7ec4\u4ef6\uff0c\u8fd9\u662fErlang\u91c7\u7528\u5f3a\u9694\u79bb\u7684\u9996\u8981\u548c\u6838\u5fc3\u539f\u56e0"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u66f4\u597d\u7684\u903b\u8f91\u7ba1\u7406\u548c\u7ec4\u7ec7"),(0,n.kt)("li",{parentName:"ul"},"\u9694\u79bb\u5e26\u6765\u5b89\u5168\u6027\uff0c\u5c24\u5176\u5728\u591a\u5e94\u7528\u73af\u5883\uff0c\u8fd9\u5bf9RealityIS\u66f4\u91cd\u8981\uff0c\u8fd9\u90e8\u5206\u5728\u7b2c2.16\u8282\u4e13\u95e8\u8ba8\u8bba\u3002")),(0,n.kt)("h4",{id:"21542-\u6d88\u606f\u4f20\u9012"},"2.15.4.2 \u6d88\u606f\u4f20\u9012"),(0,n.kt)("p",null,"\u4ecb\u4e8eSmalltalk\u548cErlang\u4e4b\u95f4"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"21543-\u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"},"2.15.4.3 \u5e76\u53d1\u6d41\u7a0b\u63a7\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In our system concurrency plays a central role, so much so that I have coined the term ",(0,n.kt)("em",{parentName:"p"},"Concurrency Oriented Programming")," to distinguish this style of programming from other programming styles."),(0,n.kt)("p",{parentName:"blockquote"},"In Concurrency Oriented Programming the concurrent structure of the program should follow the concurrent structure of the application. It is particularly suited to programming applications which model or interact with the real world."),(0,n.kt)("p",{parentName:"blockquote"},"The word concurrency refers to sets of events which happen simulta- neously. The real world is concurrent, and consists of a large number of events many of which happen simultaneously. At an atomic level our bodies are made up of atoms, and molecules, in simultaneous motion. At a macroscopic level the universe is populated with galaxies of stars in simultaneous motion."),(0,n.kt)("p",{parentName:"blockquote"},"When we perform a simple action, like driving a car along a freeway, we are aware of the fact that there may be several hundreds of cars within our immediate environment, yet we are able to perform the complex task of driving a car, and avoiding all these potential hazards without even thinking about it."),(0,n.kt)("p",{parentName:"blockquote"},"In the real world sequential activities are a rarity. As we walk down the street we would be very surprised to find only one thing happening, we expect to encounter many simultaneous events."),(0,n.kt)("p",{parentName:"blockquote"},"If we did not have the ability to analyze and predict the outcome of many simultaneous events we would live in great danger, and tasks like driving a car would be impossible. The fact that we can do things which require processing massive amounts of parallel information suggests that we are equipped with perceptual mechanisms which allow us to intuitively understand concurrency without consciously thinking about it.")),(0,n.kt)("p",null,"\u4e16\u754c\u5929\u7136\u662f\u5e76\u53d1\u7684\uff0c\u6211\u4eec\u7684\u5927\u8111\u7684\u601d\u8003\u65b9\u5f0f\u4e5f\u5929\u751f\u9002\u914d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5e76\u53d1\u6a21\u578b\uff0c\u7528\u8fd9\u79cd\u5bf9\u771f\u5b9e\u4e16\u754c\u7684\u903b\u8f91\u6d41\u7a0b\u6765\u5f00\u53d1\u7a0b\u5e8f\u662f\u6700\u597d\u7684\uff0c\u7136\u800c\u6211\u4eec\u51e0\u4e4e\u4ece\u6765\u6ca1\u6709\u8fd9\u79cd\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u6216\u8005\u7f16\u7a0b\u6a21\u578b\u90fd\u662f\u987a\u5e8f\u7f16\u7a0b\u6a21\u578b\uff1a"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"When it comes to computer programming things suddenly become inverted. Programming a sequential chain of activities is viewed the norm , and in some sense is thought of as being easy, whereas programming collections of concurrent activities is avoided as much as possible, and is generally perceived as being diecult."),(0,n.kt)("p",{parentName:"blockquote"},"I believe that this is due to the poor support which is provided for con- currency in virtually all conventional programming languages. The vast majority of programming languages are essentially sequential; any concur- rency in the language is provided by the underlying operating system, and not by the programming language."),(0,n.kt)("p",{parentName:"blockquote"},"In this thesis I present a view of the world where concurrency is pro- vided by the programming language, and not by the underlying operating system. Languages which have good support for concurrency I call Concur ",(0,n.kt)("em",{parentName:"p"},"rency Oriented Languages,")," or COPLs for short.")),(0,n.kt)("p",null,"\u54cd\u5e94\u5f0f"),(0,n.kt)("h4",{id:"21544-\u5bf9\u8c61\u53ca\u5c01\u88c5"},"2.15.4.4 \u5bf9\u8c61\u53ca\u5c01\u88c5"),(0,n.kt)("h4",{id:"21545-\u7c7b\u578b\u53ca\u7b26\u53f7"},"2.15.4.5 \u7c7b\u578b\u53ca\u7b26\u53f7"),(0,n.kt)("h4",{id:"21546-\u591a\u6001"},"2.15.4.6 \u591a\u6001"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Concurrency Oriented Programming also provides the two major ad- vantages commonly associated with object-oriented programming. These are polymorphism and the use of defined protocols having the same mes- sage passing interface between instances of dicerent process types."),(0,n.kt)("p",{parentName:"blockquote"},"When we partition a problem into a number of concurrent processes we can arrange that all the processes respond to the same messages (ie they are polymorphic,) and that they all follow the same message passing interface.")),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4ea4\u4e92\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u53ef\u4ee5\u54cd\u5e94\u4e0d\u540c\u7684\u6d88\u606f\uff0c\u771f\u5b9e\u4e16\u754c\u5929\u751f\u662f\u591a\u6001\u7684\uff0c\u7136\u800c\u8fd9\u4f1a\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a7\u5236\u53d8\u5f97\u56f0\u96be\uff0c\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u7684\u591a\u6001\u6027\u5219\u76f8\u53cd\uff0c\u5b83\u5e0c\u671b\u5c3d\u53ef\u80fd\u5c11\u7684\u591a\u6001\u6027\uff0c\u56e0\u4e3a\u66f4\u5e7f\u6cdb\u7684\u591a\u6001\u5c06\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u53d8\u5f97\u590d\u6742\u96be\u4ee5\u7406\u89e3\uff0c\u5e76\u4e14\u52a8\u6001\u7684\u8ba1\u7b97\u5730\u5740\u5c06\u4f1a\u5bfc\u81f4\u66f4\u5927\u7684\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("h4",{id:"21547-\u5bf9\u8c61\u5173\u7cfb"},"2.15.4.7 \u5bf9\u8c61\u5173\u7cfb"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",{parentName:"blockquote"},"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",{parentName:"blockquote"},"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u4fdd\u8bc1\u7ebf\u7a0b\u4e4b\u95f4\u7684\u5b89\u5168\uff0cErlang\u4f7f\u7528Name\u6765\u8868\u5f81\u6743\u9650\uff0c\u4f60\u62e5\u6709\u67d0\u4e2a\u7ebf\u7a0b\u7684name\uff0c\u4f60\u5c31\u6709\u6743\u9650\u4e0e\u4e4b\u8fdb\u884c\u6d88\u606f\u901a\u4fe1\u3002\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\uff0c\u4f60\u51e0\u4e4e\u603b\u662f\u4e0e\u4f60\u8ba4\u8bc6\u7684\u4eba\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u51e0\u4e4e\u4e0d\u4f1a\u8ddf\u964c\u751f\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\uff0c\u6216\u8005\u4e00\u4e2a\u66f4\u5f00\u653e\u7684\u7a0b\u5e8f\u4e16\u754c\uff0c\u9664\u4e86\u8fd9\u79cd\u57fa\u4e8ename\u7684\u4ea4\u4e92\u5173\u7cfb\uff0c\u8fd8\u6709\u5927\u91cf\u7684\u903b\u4e0d\u662f\u57fa\u4e8ename\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u5e7f\u64ad\u7684\u6d88\u606f\u80af\u5b9a\u4e0d\u4f1a\u53bb\u6309\u4e00\u4e2a\u4e00\u4e2a\u7684name\u8fdb\u884c\u4f20\u9012\uff0c\u800c\u4e14\u6309\u7167name\u7684\u8bbe\u8ba1\u521d\u8877\uff0c\u5b83\u4e5f\u4e0d\u4f1a\u8f7b\u6613\u8ba9\u4e00\u4e2a\u8fdb\u7a0b\u638c\u63e1\u6240\u8fdb\u7a0b\u7684name\uff0c\u5426\u5219name\u7684\u8bbe\u8ba1\u5c31\u4f1a\u5931\u53bb\u610f\u4e49\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u6743\u9650\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e09\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7cfb\u7edf\u6743\u9650\uff0c\u53ef\u4ee5\u5411\u6240\u6709\u4eba\u53d1\u9001\u6d88\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u597d\u53cb\u6743\u9650\uff0c\u57fa\u4e8e\u7ec4\u4ef6\u7c7b\u578b\u8fdb\u884c\u68c0\u7d22\uff0c\u4f46\u662f\u9644\u5e26\u597d\u53cb\u6743\u9650\u7b5b\u9009"),(0,n.kt)("li",{parentName:"ul"},"\u5e94\u7528\u5185\u6743\u9650\uff0c\u7406\u8bba\u4e0a\u4e00\u4e2a\u5e94\u7528\u5185\u90e8\u7684\u7ec4\u4ef6\u5728\u5e94\u7528\u5185\u90e8\u62e5\u6709\u6240\u6709\u6743\u9650\uff0c\u5c31\u50cf\u4e00\u4e2a\u5e94\u7528\u5e94\u7528\uff0c\u9664\u975e\u7528\u6237\u7981\u6b62\u67d0\u4e2a\u6570\u636e\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u6bcf\u4e2aobject\u9700\u8981\u643a\u5e26\u5f88\u591a\u4fe1\u606f\uff0c\u4f8b\u5982appid\uff0cusderid\u7b49\u5f85\u3002"),(0,n.kt)("h4",{id:"21548-\u5bb9\u9519\u673a\u5236"},"2.15.4.8 \u5bb9\u9519\u673a\u5236"),(0,n.kt)("h2",{id:"216-\u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"},"2.16 \u9694\u79bb\u4e0e\u5b89\u5168\u673a\u5236"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The inability to isolate sodware components from each other is the main reason why many popular programming languages cannot be used for making robust system sodware."),(0,n.kt)("p",{parentName:"blockquote"},"It is essential for security to be able to isolate mistrusting pro- grams from one another, and to protect the host platform from such programs. Isolation is diecult in object-oriented systems because objects can easily become aliased.4\u2014Bryce ","[21]"),(0,n.kt)("p",{parentName:"blockquote"},"Bryce goes on to say that object aliasing is diecult if not impossible to detect in practice, and recommends the use of protection domains (akin to OS processes) to solve this problem."),(0,n.kt)("p",{parentName:"blockquote"},"In a paper on Java Czajkowski, and Dayn`es, from Sun Microsystems, write:"),(0,n.kt)("p",{parentName:"blockquote"},"The only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and to execute each JVM in a separate OS process. This introduces various ineeciencies in resource utilization, which downgrades perfor- mance, scalability, and application startup time. The benefits the language can ocer are thus reduced mainly to portability and improved programmer productivity. Granted these are important, but the full potential of language-provided safety is not realized. Instead there exists a curious distinction between \u201clanguage safety,\u201d and \u201creal safety\u201d. \u2014 ","[28]"),(0,n.kt)("p",{parentName:"blockquote"},"In this paper they introduce the MVM (an extension to the JVM) where their goal is:"),(0,n.kt)("p",{parentName:"blockquote"},"... to turn the JVM into an execution environment akin to an OS. In particular, the abstraction of a process, ocered by modern OSes, is the role model in terms of features; isolation from other computations, resources accountability and control, and ease of termination and resource reclamation."),(0,n.kt)("p",{parentName:"blockquote"},"To achieve this they conclude that:"),(0,n.kt)("p",{parentName:"blockquote"},"... tasks cannot directly share objects, and that the only way for tasks to communicate is to use standard, copying commu- nication mechanisms, ..."),(0,n.kt)("p",{parentName:"blockquote"},"These conclusions are not new. Very similar conclusions were arrived at some two decades earlier by Jim Gray who described the architecture of the Tandem Computer in his highly readable paper Why do computers stop and what can be done about it. He says:"),(0,n.kt)("p",{parentName:"blockquote"},"As with hardware, the key to sodware fault-tolerance is to hier- archically decompose large systems into modules, each mod- ule being a unit of service and a unit of failure. A failure of a module does not propagate beyond the module."),(0,n.kt)("p",{parentName:"blockquote"},"..."),(0,n.kt)("p",{parentName:"blockquote"},"The process achieves fault containment by sharing no state with other processes; its only contact with other processes is via messages carried by a kernel message system. \u2014 ","[38]"),(0,n.kt)("p",{parentName:"blockquote"},"Language which support this style of programming (parallel processes, no shared data, pure message passing) are what Andrews and Schneider ","[4]"," refer to as a \u201cMessage oriented languages.\u201d The language with the delightful name PLITS5 (1978) ","[35]"," is probably the first example of such a programming language:"),(0,n.kt)("p",{parentName:"blockquote"},"The fundamental design decision in the implementation of RIG6 was to allow a strict message discipline with no shared data structures. All communication between user and server messages is through messages which are routed by the Aleph kernel. This message discipline has proved to be very flexible and reliable. \u2014 ","[35]")),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5728\u7ec4\u4ef6\u4e4b\u95f4\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4f20\u9012\u57fa\u672c\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5e76\u4e14\u4e0d\u5305\u542b\u4efb\u4f55\u6307\u9488\u548c\u5f15\u7528\u6765\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5b89\u5168\u6027\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h3",{id:"2161-\u94fe\u63a5\u7684\u5b89\u5168\u6027"},"2.16.1 \u94fe\u63a5\u7684\u5b89\u5168\u6027"),(0,n.kt)("h4",{id:"21611-java-class-loader--security"},"2.16.1.1 java class loader & security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Today's computer users cannot realistically trust that the programs they run are bug or virus free. It is cruicial then that the host be able to run a non-trusted program in isolation from its services. This means that client programs not be able to communicate with services, or that they can only do so under the control of a security policy that decides whether each method call from a program to the servers is permitted."),(0,n.kt)("p",{parentName:"blockquote"},"In comparison, the ability to isolate programs in this fashion is awkward in Java using loader spaces. In Java, each program is allocated its own class loader, which is responsible for loading versions of the classes for the program. An object instantiated from a class loaded by one loader is considered as possesing a distinct type to objects of the same class loaded by another loader. This means that the assignment of an object reference in one domain to a variable in another domain consititues a type error. This model is inconvenient for client-sever comunication, since parameter objects must be serialized (transferred by value).")),(0,n.kt)("p",null,"Java\u7684class loader\u4e0d\u5b89\u5168\uff0c\u6240\u6709\u5177\u6709\u5916\u90e8\u7b26\u53f7\u7684\u865a\u62df\u673a\u52a0\u8f7d\u65b9\u5f0f\uff0c\u5728multitasking \u60c5\u51b5\u4e0b\u90fd\u662f\u8fd9\u6837\uff1f"),(0,n.kt)("p",null,"\u5728OOP\u4e2d\uff0c\u7c7b\u4f3c\u4e4b\u95f4\u5305\u542b\u7ee7\u627f\u5173\u7cfb\uff0c\u4e0d\u540c\u7684\u7c7b\u578b\u4e4b\u95f4\u4e5f\u53ef\u80fd\u5305\u542b\u5f15\u7528\u5173\u7cfb\uff0c\u8fd9\u4f7f\u5f97object\u5f80\u5f80\u4e0d\u662f\u72ec\u7acb\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u5bf9\u8c61\u7684\u7c7b\u578b\u4fe1\u606f\u5305\u542b\u5728\u7c7b\u4f3cClass\u8fd9\u6837\u7684\u5bf9\u8c61\u4e2d\uff0c\u800c\u8fd9\u6837\u7684\u5bf9\u8c61\u88ab\u6240\u6709\u8be5\u7c7b\u578b\u7684\u5bf9\u8c61\u5f15\u7528\uff0c\u6240\u4ee5\u5c31\u5bfc\u81f4\u5bf9\u8c61\u4e0d\u80fd\u5177\u6709\u72ec\u7acb\u3001\u5b8c\u5168\u9694\u79bb\u7684domain space\uff0c\u56e0\u4e3a\u90a3\u6837\u5c06\u5931\u53bb\u7c7b\u578b\u4fe1\u606f\uff0c\u9664\u975e\u5bf9\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u590d\u5236\uff0c\u4f46\u8fd9\u4f1a\u5360\u636e\u5927\u91cf\u7684\u5b58\u50a8\u7a7a\u95f4\u3002"),(0,n.kt)("p",null,"\u800c\u5728\u540c\u4e00\u4e2adomain space\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b8c\u5168\u4e0d\u5b58\u5728\u76f8\u4e92\u5f15\u7528\uff0c\u90a3\u6837\u8bed\u8a00\u662f\u53ef\u4ee5\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u4f46\u662f\u4e00\u65e6\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u5f15\u7528\uff0c\u83b7\u5f97\u5f15\u7528\u7684\u5bf9\u8c61\u5c31\u53ef\u4ee5\u8c03\u7528\u6240\u6709\u8be5\u5bf9\u8c61\u7684\u516c\u5171\u65b9\u6cd5\u3002\u867d\u7136\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u516c\u5171\u5c5e\u6027\u6765\u63a7\u5236\u8bbf\u95ee\u6743\u9650\uff0c\u4f46\u8fd9\u5f80\u5f80\u53ea\u662f\u9488\u5bf9\u7c7b\u578b\u672c\u8eab\u7684\u7279\u6027\uff0c\u800c\u4e0d\u80fd\u63a7\u5236\u5e94\u7528\u7a0b\u5e8f\u903b\u8f91\u4e0d\u5c0f\u5fc3\u5c06\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u7ed9\u975e\u6cd5\u7684\u5bf9\u8c61\u3002\u4f8b\u5982\u5728\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\uff0c\u6709\u65f6\u5019\u53ea\u662f\u4e3a\u4e86\u83b7\u53d6\u6570\u636e\uff0c\u800c\u7b80\u4fbf\u5730\u628a\u4e00\u4e2a\u6574\u4e2a\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\u8fc7\u53bb\uff0c\u8fd9\u5c31\u5e26\u6765\u4e86\u98ce\u9669\uff0c\u56e0\u4e3a\u83b7\u5f97\u8fd9\u4e2a\u5f15\u7528\u7684\u7a0b\u5e8f\u4e0d\u4f46\u53ef\u4ee5\u83b7\u53d6\u53d8\u91cf\u7684\u503c\uff0c\u5b83\u8fd8\u53ef\u4ee5\u975e\u6cd5\u65b9\u6cd5\u6240\u6709\u7684\u516c\u5171\u65b9\u6cd5\u3002\u5f53\u6574\u4e2a\u7a0b\u5e8f\u90fd\u5c5e\u4e8e\u4e00\u4e2a\u5f00\u53d1\u5546\u65f6\uff0c\u8fd9\u6ca1\u95ee\u9898\uff0c\u4f46\u662f\u5728multitasking\u7684\u73af\u5883\u4e0b\uff0c\u5c31\u5b58\u5728\u5b89\u5168\u95ee\u9898\u3002\u4e0d\u540cDomain\u7684object\u53ef\u4ee5\u901a\u8fc7\u5168\u5c40\u53d8\u91cf\u7b49\u65b9\u5f0f\u83b7\u53d6\u5230\u4e00\u4e9b\u4e0d\u5c5e\u4e8e \u81ea\u5df1Domain\u7684\u5bf9\u8c61\uff0c\u4f8b\u5982\u901a\u8fc7\u4e00\u4e2a\u516c\u5171\u7684\u4e8b\u4ef6\u7ba1\u7406\u5668\uff0c\u4efb\u4f55task\u53ef\u80fd\u90fd\u53ef\u4ee5\u83b7\u5f97\u6574\u4e2a\u4e8b\u4ef6\u961f\u5217\u3002"),(0,n.kt)("p",null,"\u4fdd\u8bc1\u6240\u6709\u7684object\u4e4b\u95f4\u7684\u901a\u8fc7\u90fd\u901a\u8fc7\u4f20\u9012\u503c\uff0c\u6216\u8005\u590d\u5236\u5bf9\u8c61\u7684\u65b9\u5f0f\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\uff0c\u4f46\u662f\u8fd9\u6837\u53c8\u4f1a\u7ed9\u7f16\u7a0b\u5e26\u6765\u4e0d\u4fbf\u3002"),(0,n.kt)("h4",{id:"21612-java-applets"},"2.16.1.2 Java applets"),(0,n.kt)("p",null,"Java\u6709\u4e00\u4e9b\u9ad8\u7ea7\u7684security model\uff0c\u5176\u4e2d\u5305\u62ecprotection domian\uff0c\u5176\u8bbe\u8ba1\u76ee\u6807\u662f\u5bf9applets\u8fdb\u884c\u9694\u79bb\u3002class loader\u53ea\u662fjava\u7684\u57fa\u672c\u9694\u79bb\u673a\u5236\u3002Java\u4e2d\u7684\u6bcf\u4e2aapplet\u62e5\u6709\u81ea\u5df1\u72ec\u7acb\u7684class loader\uff0c\u6bcf\u4e2a\u72ec\u7acb\u7684class loader\u4f1a\u5728\u81ea\u5df1\u7684protection domain\u52a0\u8f7d\u72ec\u7acb\u548c\u79c1\u6709\u7248\u672c\u7684class\u3002Java\u4f1a\u4fdd\u8bc1\u540c\u4e00\u4e2aclass\u5728\u4e0d\u540c\u7684protection domain\u4e2d\u6709\u4e0d\u540c\u7684\u7684\u7c7b\u578b\uff08distinct type\uff09\uff0c\u56e0\u6b64\u7c7b\u578b\u662f\u9694\u79bb\u673a\u5236\u7684\u57fa\u7840\uff0c\u56e0\u4e3a\u5c06\u4e00\u4e2aloader space\u7684\u5bf9\u8c61\u5f15\u7528\u8d4b\u503c\u7ed9\u53e6\u4e00\u4e2aloader space\u4e2d\u76f8\u540c\u540d\u79f0\u7684class\u4f1a\u5bfc\u81f4\u7c7b\u578b\u9519\u8bef\u3002\u8fd9\u662f\u4e00\u79cd\u52a8\u6001\u7c7b\u578b\uff08dynamic typing\uff09\u68c0\u67e5\u7cfb\u7edf\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u65b0\u7684\u7c7b\u578b\u673a\u5236\u7531\u8fd0\u884c\u65f6\u63d0\u4f9b\u800c\u4e0d\u662f\u7f16\u8bd1\u65f6\u53ef\u4ee5\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u7684\u95ee\u9898\u662f\uff0c\u6240\u6709\u7cfb\u7edf\u7ea7\u522b\u7684\u7c7b\u578b\uff08\u4f8b\u5982java.lang\u7b49\u7b49\uff09\u662f\u5171\u4eab\u7684\uff0c\u56e0\u6b64\u8fd8\u662f\u4f1a\u5bfc\u81f4aliasing\u3002\u4f8b\u5982\u5bf9\u4e8e\u4e00\u4e2a\u7ee7\u627f\u81eaPasswordID\u7684Password\u7c7b\uff0c\u4e24\u4e2aclass loader\u5206\u522b\u521b\u5efa\u81ea\u5df1space\u52a0\u8f7dPassword\u7c7b\uff0c\u4f46\u662f\u6ca1\u6709\u52a0\u8f7dPasswordID\u7c7b\uff0c\u8fd9\u4e2a\u65f6\u5019\u4f7f\u7528\u5230\u7684PasswordID\u7c7b\u4f1a\u7531system loader\u8fdb\u884c\u52a0\u8f7d\uff0c\u6b64\u65f6\u5982\u679c\u4e24\u4e2aspace\u7684\u5f15\u7528\u901a\u8fc7PasswordID\u7c7b\u578b\u8fdb\u884c\u8d4b\u503c\u4f20\u9012\uff0c\u5219\u5c31\u4f1a\u9020\u6210aliasing\u3002"),(0,n.kt)("h4",{id:"21613-mvm"},"2.16.1.3 MVM"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Improved scalability results from an aggressive application of the main design principle of MVM: share as much of the runtime as possible among applications and replicate everything else.")),(0,n.kt)("p",null,"Java class loader\u53ea\u80fd\u505a\u5230\u7c7b\u578b\u5b89\u5168\uff0c\u6240\u4ee5\u5e94\u7528\u9700\u8981\u4fdd\u8bc1Java\u6587\u4ef6\u7684\u6765\u6e90\u662f\u53ef\u9760\u7684\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The existing application isolation mechanisms, such as class loaders ","[16]",", do not guarantee that two arbitrary applications executing in the same instance of the JVM will not interfere with one another. Such interference can occur in many places. For instance, mutable parts of classes can leak object references and can allow one application to prevent the others from invoking certain methods. The internalized strings introduce shared, easy to capture monitors. Sharing event and finalization queues and their associated handling threads can block or hinder the execution of some application. Monopolizing of computational resources, such as heap memory, by one application can starve the others.")),(0,n.kt)("p",null,"\u56e0\u6b64\u552f\u4e00\u7684\u5b89\u5168\u65b9\u5f0f\u662f\u4fdd\u8bc1\u6bcf\u4e2aapp\u53ea\u8fd0\u884c\u4e8e\u4e00\u4e2a\u72ec\u7acb\u7684JVM\u73af\u5883\uff0c\u4f46\u8fd9\u4f1a\u5bfc\u81f4\u8d44\u6e90\u7684\u5229\u7528\u7387\u4f4e\uff0c\u6027\u80fd\u3001\u53ef\u4f38\u7f29\u6027\u548c\u542f\u52a8\u65f6\u95f4\u7684\u95ee\u9898\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Their existence perpetuates the current situation, where the only safe way to execute multiple applications, written in the Java programming language, on the same computer is to use a separate JVM for each of them, and execute each JVM in a separate OS process.")),(0,n.kt)("p",null,"\u9488\u5bf9\u591a\u5e94\u7528\u7684\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u7ea7\u522b\u7684\u5b89\u5168\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"language safety"),(0,n.kt)("li",{parentName:"ul"},"real safety")),(0,n.kt)("p",null,"\u524d\u8005\u666e\u904d\u7f3a\u4e4f\uff0c\u5df2\u6709\u7684\u65b9\u6848\u90fd\u6216\u591a\u6216\u5c11\u9650\u5236\u8bed\u8a00\u6216\u8005\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\uff0c\u540e\u8005\u5219\u5927\u591a\u6570\u4f9d\u8d56\u4e8ehardware-assisted\uff0c OS-style\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Three goals dictate our design choices: (i) no form of interference among executing applications should be allowed, (ii) an illusion of having the JVM (with all core APIs and standard mechanisms) to itself should be provided for each task, and (iii) MVM should perform and scale well. The motivation is to make the system attractive from the practical point of view."),(0,n.kt)("p",{parentName:"blockquote"},"The key design principle of MVM is: examine each component of the JVM and determine whether sharing it among tasks can lead to any interference among them. In some cases this approach yields a clear verdict that the given component can be shared without jeopardizing the safety of the tasks. Other components are either replicated on a per-task basis or made ",(0,n.kt)("em",{parentName:"p"},"task re-entrant"),", that is, usable by many tasks without causing any inter-task interference. This builds on the ideas described in ","[6]",". The technique presented in that work \u2013 replicating static fields and class monitors \u2013 has been generalized in MVM to classify all components of the JVM as \u2018shareable\u2019 or \u2018non-shareable\u2019.")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"A simple way of explaining the model is to first think of a straightforward approach to multitasking in the JavaTM application environment: all applications share all classes. The essential observation at this point is that a safe language already has some built-in support for isolating applications: data references cannot be forged, unsafe casting is not allowed, and jumping to an arbitrary code location is impossible. Consequently, the only data exchange mechanism (barring explicit inter-application communication) is through static fields. This can only occur either by explicit manipulation of static fields or by invoking methods which access these fields. It can lead to unexpected and incorrect behavior depending on how applications use the same class with static fields."),(0,n.kt)("p",{parentName:"blockquote"},"The above observation suggests an approach for achieving isolation among applications: to maintain a separate copy of the static fields for each class, one copy per application that uses the given class. However, only one copy of the ",(0,n.kt)("em",{parentName:"p"},"code")," of any class should exist in the system, regardless of how many applications use it, since methods cannot transfer data from one application to another once the static fields communication channel is removed. (Dealing with covert communication channels is beyond the scope of this paper). Our proposal effectively gives each application the illusion that it has exclusive access to static fields while in reality each application has a separate copy of these fields.")),(0,n.kt)("h3",{id:"2162-program-security-mechanisms"},"2.16.2 Program Security Mechanisms"),(0,n.kt)("p",null,"\u6709\u8bb8\u591a\u5de5\u4f5c\u7528\u4e8e\u5bf9\u7a0b\u5e8f\u96c6\u6210access control\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e4b\u95f4\u6dfb\u52a0\u4e00\u4e2asecurity policy checker\uff0c\u4f8b\u5982Java\u7684\u7cfb\u7edf\u7c7b\u5305\u542b\u4e00\u4e2a\u5bf9SecurityManager\u5bf9\u8c61\u7684\u8c03\u7528\u7528\u4e8e\u68c0\u67e5\u7ebf\u7a0b\u4e4b\u95f4\u7684\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u4e9b\u5b89\u5168\u7b56\u7565\u5219\u7531\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u652f\u6301\uff0c\u7f16\u7a0b\u8bed\u8a00\u5e26\u6709 \u4e00\u5b9a\u7684\u8bbf\u95ee\u6743\u9650\u7684notion\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u63a7\u5236\u4e00\u4e9b\u5bf9\u8c61\u5bf9\u53e6\u4e00\u4e9b\u5bf9\u8c61\u7684\u8bbf\u95ee\u6743\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u4eca\u66f4\u591a\u7684\u8bed\u8a00\u8bbe\u8ba1\u8005\u5219\u66f4\u591a\u503e\u5411\u4e8e\u5c06\u5b89\u5168\u4e0e\u7c7b\u578b\u7b49\u4ef7\uff0c\u8fd9\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u9759\u6001\u6216\u8005\u52a8\u6001\u68c0\u67e5\u6280\u672f")),(0,n.kt)("h4",{id:"21621-cfi"},"2.16.2.1 CFI"),(0,n.kt)("p",null,"Current software attacks often build on exploits that subvert ma- chine-code execution. The enforcement of a basic safety property, Control-Flow Integrity (CFI), can prevent such attacks from arbi- trarily controlling program behavior. CFI enforcement is simple, and its guarantees can be established formally, even with respect to powerful adversaries. Moreover, CFI enforcement is practical: it is compatible with existing software and can be done efficiently using software rewriting in commodity systems. Finally, CFI pro- vides a useful foundation for enforcing further security policies, as we demonstrate with efficient software implementations of a pro- tected shadow call stack and of access control for memory regions."),(0,n.kt)("h4",{id:"21622-sfi"},"2.16.2.2 SFI"),(0,n.kt)("p",null,"\u5185\u5b58\u5b89\u5168\u662f\u6700\u5927\u6613\u53d7\u4e25\u91cd\u653b\u51fb\u7684\u6765\u6e90\uff0c\u5927\u7ea670%\uff0c\u4e00\u4e9b\u6000\u6709\u6076\u610f\u7684\u653b\u51fb\u8005\u4f8b\u5982\u4e00\u4e9b\u5185\u5b58\u5b89\u5168\u7684bug\u6765\u653b\u51fb\u8f6f\u4ef6\uff0cSoftware sandboxing\u6216\u8005software-based fault isolation (SFI) \u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u8fd9\u4e9b\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cdbug\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u4ed6\u7684\u4e00\u4e9b\u4f8b\u5b50\uff0c\u5982OS kernels\uff0cdatabases, browsers , language runtime, and serverless clouds.")),(0,n.kt)("p",null,"SFI\u5f3a\u5236\u5c06\u672a\u4fe1\u4efb\u7684\u4ee3\u7801\u9694\u79bb\u5230\u81ea\u5df1\u7684\u6c99\u76d2\u73af\u5883\uff0c\u5e76\u4fdd\u8bc1\u6bcf\u6b21\u5185\u5b58\u8bbf\u95ee\u90fd\u88ab\u52a8\u6001\u68c0\u67e5\u3002\u4f8b\u5982NaCI\u548cWasm\u90fd\u6709\u63aa\u65bd\u4fdd\u8bc1\u672a\u4fe1\u4efb\u7684\u7ec4\u4ef6\u7684\u5185\u5b58 \u8bbf\u95ee\u90fd\u5904\u4e8e\u81ea\u5df1\u7684\u6c99\u76d2\u533a\u57df\uff0c\u5e76\u4e14\u6dfb\u52a0\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u68c0\u67e5\u4ee5\u4fdd\u8bc1\u6240\u6709\u7684control flow\u90fd\u88ab\u9650\u5b9a\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u8def\u57fa\u5185\u90e8\u3002"),(0,n.kt)("p",null,"\u5b89\u5168\u548c\u6027\u80fd\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u8fd0\u884c\u65f6\u4ee3\u7801\u8fd8\u5f97\u4fdd\u8bc1\u8fd9\u79cd\u68c0\u67e5\u672c\u8eab\u662f\u5b89\u5168\u548c\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u901a\u5e38\u673a\u5236\u5c31\u6bd4\u8f83\u590d\u6742\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u6f0f\u6389\u7684\u68c0\u67e5\u90fd\u53ef\u80fd\u5bfc\u81f4\u653b\u51fb\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u8fd0\u884c\u65f6\u68c0\u67e5\u7684\u5b89\u5168\u6027\u548c\u6b63\u786e\u6027\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u6b63\u786e\u6027\u548c\u8ba1\u7b97\u91cf\u4e5f\u662f\u5f71\u54cd\u5b89\u5168\u548c\u6027\u80fd\u7684\u91cd\u8981\u6765\u6e90")),(0,n.kt)("p",null,"\u5728\u4e00\u4e9b\u6c99\u76d2\u5e94\u7528\u67b6\u6784\u6bd4\u8f83\u91cd\u7684\u5e94\u7528\u4e2d\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u53ef\u80fd\u5360\u636e\u4e86\u8f83\u5927\u7684\u6027\u80fd\u5f00\u9500\uff0c\u4f8b\u5982Firefox\u53ef\u80fd\u56e0\u4e3a\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u5f71\u54cd\u4e86\u8f83\u5927\u7684\u6027\u80fd\u800c\u4e0d\u5f97\u4e0d\u5f03\u6389\u6c99\u76d2\u5b57\u4f53\u6e32\u67d3\u3002"),(0,n.kt)("h5",{id:"216221-\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"},"2.16.2.2.1 \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u8003\u8651\u5982\u4e0b\u4ee3\u7801\uff0c\u5728\u6d4f\u89c8\u5668\u4e2d\u6267\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u7684\u5b57\u4f53\u6e32\u67d3\u5e93\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"void onPageLoad(int* text) {\n ...\n int* screen = ...; // stored in r12 \n int* temp_buf = ...; \n gr_get_pixel_buffer(text, temp_buf); \n memcpy(screen, temp_buf, 100);\n ...\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6bb5\u4ee3\u7801\u8c03\u7528libgraphite\u5e93\u7684gr_get_pixel_buffer\u65b9\u6cd5\u5c06\u6587\u672c\u6e32\u67d3\u5230\u4e00\u4e2a\u4e34\u65f6\u7684buffer\u4e2d\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u4e34\u65f6buffer\u7684\u5185\u5bb9\u62f7\u8d1d\u5230\u5c4f\u5e55\u53d8\u91cf\u4e2d\u7528\u4e8e\u6e32\u67d3\u3002\u4f7f\u7528SFI\u5c06\u5e93\u7684\u5185\u5b58\u9694\u79bb\u8d77\u6765\uff0c\u5373\u5185\u5b58\u9694\u79bb\u673a\u5236\u4f7f\u5f97gr_get_pixel_buffer\u4e0d\u80fd\u591f\u83b7\u53d6\u4efb\u4f55onPageLoad\u6216\u5176\u4ed6\u90e8\u5206\u7684\u6d4f\u89c8\u5668\u5806\u548c\u6808\u5185\u5b58\u3002\u7136\u800c\u4e0d\u4fe1\u7684\u4e8b\uff0c\u5355\u7eaf\u7684\u5185\u5b58\u9694\u79bb\u662f\u4e0d\u591f\u7684\uff0c\u5982\u679c\u6574\u4e2a\u5207\u6362\u4ec5\u4ec5\u662f\u4e00\u4e2a\u65b9\u6cd5\u8c03\u7528\uff0c\u5219\u653b\u51fb\u8005\u53ef\u80fd\u8fdd\u80cc\u65b9\u6cd5\u8c03\u7528\u7684\u7ea6\u5b9a\u4ee5\u6253\u7834\u9694\u79bb\uff0c\u51e0\u79cdlibgraphite\u53ef\u4ee5\u4f7f\u7528\u7684\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Clobbering Callee-Save Registers"),"\uff1a\u5047\u8bbe\u4e0a\u8ff0\u7684screen\u53d8\u91cf\u7f16\u8bd1\u5230\u5bc4\u5b58\u5668r12\u4e2d\uff0c\u5728System V\u8c03\u7528\u7ea6\u5b9a\uff08calling convention\uff09\u4e2d\uff0cr12\u662f\u4e00\u4e2acallee-saved register\uff0c\u6240\u4ee5\u5982\u679cgr_get_pixel_buffer\u52ab\u6301r12\uff0c\u5b83\u53ef\u4ee5\u5728\u8c03\u7528\u8fd4\u56de\u4e4b\u524d\u83b7\u53d6\u8be5\u5bc4\u5b58\u5668\u6307\u5411\u7684\u5b9e\u9645\u5185\u5b58\u7684\u503c\uff0c\u8fd8\u53ef\u4ee5\u5c06\u8be5\u5bc4\u5b58\u5668\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u8be5\u6c99\u76d2\u4e2d\u7684\u5185\u5b58\u5730\u5740\uff0c\u8fd9\u6837\u5728\u540e\u9762\u7684memcpy\u6307\u4ee4\u4e2d\u8fdb\u884c\u590d\u5236\uff0c\u8fd9\u5c31\u53ef\u4ee5\u7ed9\u653b\u51fb\u8005\u4e00\u79cd\u65b9\u6cd5\u4f7f\u5b83\u53ef\u4ee5\u52ab\u6301\u6d4f\u89c8\u5668\u7684control flow\u3002\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u5f62\u5f0f\u7684\u653b\u51fb\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1callee-save register integrity\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u5728\u8fd4\u56de\u4e4b\u524d\u5c06 callee-save register\u91cd\u7f6e\u4e3a\u539f\u6765\u7684\u503c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Leaking Scratch Registers"),"\uff1a\u540c\u6837\u7684\uff0c\u5176\u4ed6scratch registers\u4e5f\u53ef\u80fd\u4f1a\u6cc4\u9732\u654f\u611f\u4fe1\u606f\u7ed9\u6c99\u76d2\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u4fdd\u5b58\u4e86\u4e00\u4e2a\u5bc6\u94a5\u5728scratch register\u4e2d\uff0c\u4ec5\u4ec5\u662f\u5185\u5b58\u9694\u79bb\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u53d7\u653b\u51fb\u8005\u63a7\u5236\u7684libgraphite\u4e0d\u4f1a\u8bfb\u53d6\u548c\u4f7f\u7528\u8fd9\u4e9b\u5bc4\u5b58\u5668\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u6cc4\u9732\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1scratch register confidentiality"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Reading and corrupting stack frames"),"\uff1a\u6700\u540e\uff0c\u5982\u679c\u5bbf\u4e3b\u548c\u6c99\u76d2\u5e94\u7528\u7a0b\u5e8f\u5171\u4eab\u4e00\u4e2a\u6808\uff0c\u653b\u51fb\u8005\u5c31\u53ef\u80fd\u8bfb\u53d6\u6216\u8005 \u7834\u574f\u6808\u4e2d\u7684\u6570\u636e\u6216\u8005\u6307\u9488\uff0c\u4e3a\u4e86\u963b\u6b62\u8fd9\u79cd\u653b\u51fb\uff0c\u9700\u8981stack frame encapsulation\uff0c\u5373\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u4e0d\u80fd\u8bbf\u95ee\u8c03\u7528\u6808\u3002")),(0,n.kt)("h5",{id:"216222-heavyweight-transitions"},"2.16.2.2.2 Heavyweight Transitions"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684SFI\u90fd\u4f7f\u7528\u6bd4\u8f83\u91cd\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u6280\u672f\uff0c\u4f8b\u5982NaCI\u4ee5\u53caWasm\u7f16\u8bd1\u5668Lucet\uff0c\u8fd9\u79cd\u6280\u672f\u5c06\u6240\u6709\u7684\u8c03\u7528\u548c\u8fd4\u56de\u503c\u90fd\u5c01\u88c5\u8d77\u6765\u4ee5\u5e94\u5bf9\u524d\u9762\u63d0\u5230\u7684\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u6837\u7684\u5207\u6362\u90fd\u662f\u5b89\u5168\u7684\uff0c\u4ed6\u4eec\u63d0\u4f9b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Callee-save register integrity"),"\uff1a\u5728\u8c03\u7528\u7684\u65f6\u5019\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3aSpringboard\u7684\u4ee3\u7801\u6765\u5305\u88c5calls\uff0c\u5373\u5c06\u5bc4\u5b58\u5668\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5e94\u7528\u5185\u5b58\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u72ec\u7acb\u7684\u6808\u4e2d\uff1b\u5f53\u7531\u5e93\u8fd4\u56de\u5230\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u4f7f\u7528\u4e00\u6bb5\u79f0\u4e3atrampoline\u7684\u4ee3\u7801\u5305\u88c5returns\uff0c\u5e76\u91cd\u7f6e\u5bc4\u5b58\u5668\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Scratch register confidentiality"),"\uff1a\u7531\u4e8e\u4efb\u4f55Scratch register \u90fd\u53ef\u80fd\u5305\u542b\u654f\u611f\u4fe1\u606f\uff0c\u6240\u4ee5Springboard\u5728\u5207\u6362\u5230\u6c99\u76d2\u4e4b\u524d\u4f1a\u6e05\u9664\u6240\u6709\u7684Scratch register\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Stack frame encapsulaton"),"\uff1a\u5927\u90e8\u5206\u7684SFI\u4f1a\u5bf9\u5bbf\u4e3b\u7a0b\u5e8f\u548c\u6c99\u76d2\u4ee3\u7801\u8bbe\u7f6e\u72ec\u7acb\u7684\u8c03\u7528\u6808\uff0c\u4ee5\u4fdd\u8bc1\u6c99\u76d2\u4ee3\u7801\u65e0\u6cd5\u8bbf\u95ee\u53d7\u4fe1\u4efb\u7684\u8c03\u7528\u6808\u3002\u8be5\u673a\u5236\u540c\u6837\u7531Springboard\u548ctrampoline\u6765\u5b9e\u73b0\uff1a\u9996\u5148\uff0c\u8ffd\u8e2a\u6240\u6709\u6808\u6307\u9488\uff0c\u7136\u540eSpringboard\u4f1a\u5c06\u8fd9\u4e9b\u6808\u4e0a\u7684\u53c2\u6570\u5168\u90e8\u590d\u5236\u5230\u6c99\u76d2\u4ee3\u7801\u7684\u8c03\u7528\u6808\u4e2d\uff0c\u6700\u540etrampoline\u4f1a\u8ffd\u8e2a\u5b9e\u9645\u7684\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u5728\u53d7\u4fdd\u62a4\u7684\u5185\u5b58\u4e2d\uff0c\u8fd9\u6837\u6c99\u76d2\u4ee3\u7801\u5e93\u5c06\u65e0\u6cd5\u7834\u574f\u5b83\u3002")),(0,n.kt)("p",null,"\u7531\u4e0a\u9762\u7684\u8fc7\u7a0b\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u673a\u5236\u53ef\u4ee5\u4fdd\u5b58\u5207\u6362\u7684\u5b89\u5168\uff0c\u4f46\u662f\u5177\u6709\u4e24\u4e2a\u6bd4\u8f83\u4e25\u91cd\u7684\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u5b83\u4eec\u7ed9SFI\u5e26\u6765\u8f83\u5927\u7684\u8d1f\u62c5\uff0c\u76f8\u6bd4\u4e8e\u5355\u7eaf\u7684\u65b9\u6cd5\u8c03\u7528\u8ba1\u7b97\u91cf\u8981\u5927\u5f97\u591a\uff0c\u8fd9\u79cd\u4fdd\u5b88\u5730\u5207\u6362\u4f1a\u5e26\u6765\u5927\u91cf\u7684\u4e0d\u5fc5\u8981\u7684\u72b6\u6001\u4fdd\u5b58\u548c\u6e05\u9664\uff0c\u51e0\u4e4e\u76f8\u5f53\u4e8e\u91cd\u65b0\u5b9e\u73b0OS\u8fdb\u7a0b\u7684\u5f88\u591a\u57fa\u7840\u529f\u80fd\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0cSpringboard\u548ctrampoline\u5fc5\u987b\u9488\u5bf9\u4e0d\u540c\u7684\u5e73\u53f0\u5b9a\u5236\uff0c\u56e0\u4e3a\u6bcf\u4e2a\u5e73\u53f0\u6709\u4e0d\u540c\u7684calling convention\uff0c\u4efb\u4f55\u5b9e\u73b0\u9519\u8bef\u5c31\u53ef\u80fd\u5bfc\u81f4\u6c99\u76d2\u80fd\u591f\u9003\u79bb\u8fd9\u79cd\u653b\u51fb\u3002")),(0,n.kt)("h4",{id:"21623-object--space-model"},"2.16.2.3 object space model"),(0,n.kt)("h4",{id:"21624-lua-environment"},"2.16.2.4 lua Environment"),(0,n.kt)("h4",{id:"21625-erlang-\u9694\u79bb\u673a\u5236"},"2.16.2.5 Erlang \u9694\u79bb\u673a\u5236"),(0,n.kt)("h3",{id:"2163-webassembly-security"},"2.16.3 Webassembly Security"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://webassembly.org/docs/security/"},"https://webassembly.org/docs/security/"))),(0,n.kt)("h4",{id:"21631-module--cfi"},"2.16.3.1 Module & CFI"),(0,n.kt)("h4",{id:"21632-memory-safety"},"2.16.3.2 Memory safety"),(0,n.kt)("h4",{id:"21633-isolation-without-taxation"},"2.16.3.3 Isolation without Taxation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684Heavyweight Transitions\u662f\u4fdd\u5b88\u7684\uff0c\u56e0\u4e3a\u5b83\u4eec\u5bf9\u6c99\u76d2\u4ee3\u7801\u7684\u8fd0\u884c\u7684\u7ed3\u6784\u505a\u4e86\u6bd4\u8f83\u5c11\u7684\u5047\u8bbe\u3002\u4f46NaCI\u548cWasm\u901a\u8fc7Springboard\u548ctrampoline\u7684\u673a\u5236\u786e\u5b9e\u4e5f\u7ed9\u6c99\u76d2\u4ee3\u7801\u5e93\u5f3a\u5236\u589e\u52a0\u4e86\u4e00\u5b9a\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u8fd9\u7bc7\u8bba\u6587\u6307\u51fa\u901a\u8fc7\u8fdb\u4e00\u6b65\u5bf9\u6c99\u76d2\u4ee3\u7801\u589e\u52a0\u9002\u5f53\u7684\u7ed3\u6784\uff0c\u53ef\u4ee5\u907f\u514d\u6389\u51e0\u4e4e\u6240\u6709\u524d\u9762\u63d0\u5230\u7684\u7531Heavyweight Transitions\u5e26\u6765\u7684\u989d\u5916\u5de5\u4f5c\uff0c\u4f7f\u5f97\u6574\u4e2a\u4e0a\u4e0b\u6587\u5207\u6362\u66f4\u7b80\u5355\u3001\u8ba1\u7b97\u66f4\u5feb\uff0c\u540c\u65f6\u6613\u4e8e\u79fb\u690d\u3002\u5b83\u66f4\u50cf\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u62bd\u8c61\u3001\u53ef\u7ec4\u5408\u7684\u7f16\u7a0b\u8bed\u8a00\u3002\u9996\u5148\u63d0\u51fa\u80fd\u591f \u5b9e\u73b0zero-cost\u5207\u6362\u7684\u6761\u4ef6\u3002"),(0,n.kt)("h5",{id:"216331-zero-cost-conditions"},"2.16.3.3.1 Zero-cost conditions"),(0,n.kt)("p",null,"\u5047\u8bbe\u6c99\u76d2\u5e93\u4ee3\u7801\u662f\u6709\u4e00\u4e9b\u51fd\u6570\u53ca\u5176\u671f\u671b\u7684\u53c2\u6570\u7ec4\u6210\uff0c\u8fd9\u7bc7\u8bba\u6587\u63d0\u51fa\u4e86\u4e00\u4e9b\u6761\u4ef6\uff0c\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\uff08\u5373\u5305\u542b\u8fd9\u79cd\u7ed3\u6784\uff09\u7684\u7b2c\u4e09\u65b9Wasm\u4ee3\u7801\u53ef\u4ee5\u88ab\u5f62\u5f0f\u5316\u7684\u9a8c\u8bc1\uff0c\u4ece\u800c\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u7684\u5b89\u5168\u3002\u8fd9\u4e9b\u6761\u4ef6\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Calee-save register restoration"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Well-bracketed control-flow"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Type-directed forward-edge CFI"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Local state encapsulation"),"\uff1a"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Confidentiality"),"\uff1a")),(0,n.kt)("p",null,"\u8fd9\u79cd\u65b9\u6cd5\u7684\u4ef7\u503c\u5728\u4e8e\u5b83\u80fd\u591f\u4ee5\u4e00\u79cd\u5f62\u5f0f\u5316\u7684\u7ed3\u6784\u6765\u63cf\u8ff0\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u4ee3\u7801\uff0c\u4f7f\u5f97\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u8fd9\u6837\u7684\u7ed3\u6784\u53bb\u6784\u9020\u7ec4\u4ef6\uff0c\u5219\u5176\u751f\u6210\u7684Wasm\u4ee3\u7801\u53ef\u4ee5\u662f\u88ab\u5f62\u5f0f\u5316\u9a8c\u8bc1\u7684\u3002\u8fd9\u4e9b\u6dfb\u52a0\u7684\u989d\u5916\u7ed3\u6784\u4e0d\u4ec5\u80fd\u591f\u7528\u4e8e\u5f62\u5f0f\u5316\u9a8c\u8bc1\uff0c\u8fd8\u80fd\u591f\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e3a\u4e86\u907f\u514d\u989d\u5916\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u8ba1\u7b97\u91cf\uff0c\u8fd9\u4e9b\u6761\u4ef6\u6240\u7ea6\u675f\u7684\u5b9e\u9645\u4e0a\u662f\u5e0c\u671b\u80fd\u591f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u9075\u5faa\u6b63\u5e38\u7684\u9694\u79bb\u539f\u5219\uff0c\u5373\u4e0d\u8981\u53bb\u8bbf\u95ee\u8d85\u51fa\u81ea\u5df1\u8303\u56f4\u7684\u5185\u5b58\u548c\u4ee3\u7801\uff0c\u4e0d\u8981\u53bb\u901a\u8fc7\u5bc4\u5b58\u5668\u548c\u8fd4\u56de\u5730\u5740\u7b49\u53bb\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u7684control flow\u3002"),(0,n.kt)("p",null,"\u5373\u5982\u679c\u6211\u4eec\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u662f\u5b89\u5168\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u4e3a\u4e86\u9694\u79bb\u53bb\u505a\u4e00\u4e9b\u989d\u5916\u7684\u4fdd\u5b58\u6216\u8005\u6e05\u9664\u5de5\u4f5c\u3002\u5f53\u7136\u8fd9\u79cd\u65b9\u5f0f\u9700\u8981\u7ba1\u7406\u5458\u4fdd\u8bc1\u4e0d\u5f15\u5165\u6ca1\u6709\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u3002"),(0,n.kt)("h3",{id:"2164-\u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"},"2.16.4 \u5168\u65b0\u7684\u591a\u4efb\u52a1\u9694\u79bb\u673a\u5236"),(0,n.kt)("p",null,"\u591a\u5e94\u7528\u73af\u5883\u4e0b\u5e94\u7528\u7a0b\u5e8f\u7684\u9694\u79bb\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u4e24\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7eaf\u811a\u672c\u8bed\u8a00"),"\uff0c\u8fd9\u79cd\u8bed\u8a00\u4e0d\u5141\u8bb8\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4efb\u4f55\u5f62\u5f0f\u7684\u80fd\u591f\u5305\u542b\u4e8c\u8fdb\u5236\u5f62\u5f0f\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u7ec4\u4ef6\u80fd\u591f\u8c03\u7528\u7684\u5168\u90e8\u4e8c\u8fdb\u5236\u4ee3\u7801\u5747\u6765\u81ea\u4e8e\u5bbf\u4e3b\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ea\u9700\u8981\u7b80\u5355\u7684\u4fdd\u8bc1\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff1a1\uff09\u4e0d\u80fd\u8bbf\u95ee\u5168\u5c40\u5171\u4eab\u53d8\u91cf\uff0c2\uff09\u4e0d\u80fd\u5171\u4eab\u8c03\u7528\u6808\uff0c\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u89e3\u51b3\u591a\u5e94\u7528\u5b89\u5168\u6027\u95ee\u9898\u3002\u8fd9\u79cd\u8bed\u8a00\u7684\u4ee3\u8868\u662fErlang\uff0c\u5f00\u53d1\u8005\u7f16\u5199\u7684\u6240\u6709\u4ee3\u7801\u90fd\u662fErlang\u811a\u672c\uff0c\u88abErlang\u89e3\u91ca\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u975e\u811a\u672c\u8bed\u8a00"),"\uff0c\u975e\u811a\u672c\u8bed\u8a00\u5373\u80fd\u591f\u4ee5\u67d0\u79cd\u65b9\u5f0f\u4f7f\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u5305\u542b\u4e8c\u8fdb\u5236\u4ee3\u7801\u7684\u8bed\u8a00\uff0c\u5305\u62ec\u6d4f\u89c8\u5668\u4e2d\u7684NaCI\u8fd9\u79cd\u76f4\u63a5\u8c03\u7528\u4e8c\u8fdb\u5236\u4ee3\u7801\u5e93\u7684\u7cfb\u7edf\uff0c\u4e5f\u5305\u62ec\u50cfWasm\u8fd9\u79cd\u867d\u7136\u4ee5\u4e2d\u95f4IR\u5f62\u5f0f\u5b58\u50a8\uff0c\u4f46\u662f\u8fd9\u4e9b\u4e2d\u95f4IR\u662f\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u6307\u4ee4\u7684\uff0c\u6240\u4ee5\u5728\u88ab\u52a8\u6001\u7f16\u8bd1\u4e4b\u540e\u662f\u53ef\u4ee5\u7834\u574f\u5bbf\u4e3b\u7a0b\u5e8f\u5185\u5b58\u7684\uff0c\u7b2c\u4e09\u79cd\u662f\u50cfPython\u8fd9\u79cd\uff0c\u7b2c\u4e09\u65b9Python\u5e93\u672c\u8eab\u662f\u53ef\u4ee5\u8c03\u7528C\u5e93\u4ee3\u7801\u7684\u7ec4\u4ef6\u3002")),(0,n.kt)("p",null,"\u603b\u800c\u8a00\u4e4b\uff0c\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u8fd8\u8981\u907f\u514d\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u8bbf\u95ee\u5bc4\u5b58\u5668\uff0c\u53ea\u8981\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u80fd\u591f\u4ee5\u67d0\u79cd\u5f62\u5f0f\u5305\u542b\u5bc4\u5b58\u5668\uff0c\u5219\u53ef\u4ee5\u7ed5\u5f00\u5185\u5b58\u9694\u79bb\u3002CreateScript\u672c\u8eab\u5c5e\u4e8e\u7eaf\u811a\u672c\u578b\u8bed\u8a00\uff0c\u4f46\u662f\u96c6\u6210\u5230\u7b2c\u4e09\u65b9app\u4e2d\u5219\u4f1a\u5f15\u5165\u7b2c\u4e09\u65b9\u5305\u542b\u64cd\u4f5c\u5bc4\u5b58\u5668\u7684\u4ee3\u7801\u3002\u6240\u4ee5\u540e\u671f\u5728\u5904\u7406\u8fd9\u90e8\u5206\u7684\u65f6\u5019\u8fd8\u662f\u9700\u8981\u8003\u8651\u4f20\u7edf\u7684SFI\u6280\u672f\u3002"),(0,n.kt)("h4",{id:"21641-\u5bf9\u8c61\u9694\u79bb"},"2.16.4.1 \u5bf9\u8c61\u9694\u79bb"),(0,n.kt)("p",null,"\u6ca1\u6709\u5168\u5c40\u53d8\u91cf\uff0c\u5168\u90e8\u90fd\u662f\u5b9e\u4f8b"),(0,n.kt)("p",null,"\u73af\u5883\u53d8\u91cf\u90fd\u662f\u53ea\u8bfb\u7684\uff0c\u5982\u679c\u6709app\u76f8\u5173\u7684\uff0c\u521b\u5efa\u7279\u5b9aapp\u7684\u73af\u5883object"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u7531\u591a\u4e2a\u7ec4\u4ef6\u7ec4\u6210\uff0c\u5bf9\u8c61\u7531\u7528\u6237\u521b\u5efa\uff0c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u5185\u90e8\u7684\u901a\u4fe1\uff0c\u5728\u9694\u79bb\u8303\u56f4\u4e4b\u5185\uff0c\u6240\u4ee5\u91c7\u7528\u57fa\u672c\u7684\u7c7b\u578b\u5b89\u5168\u5c31\u884c"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u52a0\u5b89\u5168\u7b56\u7565\uff0c\u56e0\u4e3a\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u53ef\u80fd\u662f\u8de8\u5e94\u7528\u7684\uff08\u5c3d\u7ba1\u5927\u90e8\u5206\u53ef\u80fd\u662fapp\u5185\u90e8\u7684\uff09\uff0c\u8fd9\u662f\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027\u7684\u57fa\u7840")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u4f53\u662f\u57fa\u4e8e\u5bf9\u8c61\u7684\u5b89\u5168\u63a7\u5236\uff0c\u80cc\u540e\u7684\u63a7\u5236\u7b56\u7565\u662f\u5bf9\u8c61\u6240\u5c5e\u7684appId\u548cuserId\u4e4b\u95f4\u7684\u6743\u9650\u5173\u7cfb\uff0c\u5f53\u7136\u8fd9\u4e2a\u5173\u7cfb\u53ea\u9700\u8981\u9a8c\u8bc1\u4e00\u6b21\uff0c\u8fd9\u4e9b\u5173\u7cfb\u53ef\u4ee5\u4ee5\u52a0\u5bc6\u7684\u65b9\u5f0f\u9884\u5b58\u50a8\uff0c\u5728\u670d\u52a1\u7aef\u7edf\u4e00\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u987a\u5e8f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u8ba1\u7b97\u5bf9\u8c61\u7684\u5185\u90e8\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\u8ba1\u7b97\u9700\u8981\u8de8\u5bf9\u8c61\u901a\u4fe1\u7684\u7ec4\u4ef6")),(0,n.kt)("p",null,"\u5176\u80cc\u540e\u7684\u903b\u8f91\u662f\uff0c\u5bf9\u8c61\u5185\u90e8\u9996\u5148\u53d1\u751f\u5185\u90e8\u53d8\u5316\uff0c\u7136\u540e\u8fd9\u79cd\u53d8\u5316\u5f71\u54cd\u5230\u5916\u90e8\u3002\u8fd9\u6837\u80fd\u907f\u514d\u4e00\u4e9b\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u4e2d\u4efb\u610f\u987a\u5e8f\u7684\u76f8\u4e92\u8c03\u7528\u5bfc\u81f4\u7684\u6df7\u4e71\u7ec4\u7ec7\u7ed3\u6784\u548c\u903b\u8f91"),(0,n.kt)("h4",{id:"21642-app-spaces"},"2.16.4.2 app spaces"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"an approach to safe object sharing"),(0,n.kt)("p",{parentName:"blockquote"},"The crux of the problem is that once a reference is obtained, it can be used to name an object and to invoke methods of that object. We believe that naming and invocation must be sepatated, thus introducing access control into the language.")),(0,n.kt)("p",null,"access control"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5c5e\u4e8e\u4e00\u4e2aapp space\uff0c\u8fd9\u4e2aapp space\u7528\u4e8e\u63a7\u5236\u6743\u9650\uff0capp space\u4ee5\u7528\u6237\u4e3a\u57fa\u7840\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u7528\u6237\u62e5\u6709\u72ec\u7acb\u7684app space"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"app space\u5f71\u54cd\u5e76\u884c\u6027")),(0,n.kt)("p",null,"\u653e\u5230\u4e00\u8d77\u5e76\u884c\u8ba1\u7b97\u7684\u5bf9\u8c61\u5fc5\u987b\u662f\u540c\u4e00\u4e2aapp space\uff0c\u5c3d\u7ba1\u591a\u4e2a\u4e0d\u540cspace\u7684\u5bf9\u8c61\u53ef\u80fd\u62e5\u6709\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u5b83\u4eec\u4f1a\u88ab\u72ec\u7acb\u8ba1\u7b97\uff0c\u4ee5\u53ca\u72ec\u7acb\u5b58\u50a8\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u65b9\u4fbf\u5e76\u884c\u8ba1\u7b97\uff0c\u4e0d\u662f\u5c06\u4e00\u4e2a\u5bf9\u8c61\u7684\u6240\u6709\u5c5e\u6027\u5b58\u50a8\u5230\u4e00\u8d77\uff0c\u800c\u662f\u4f1a\u6309\u7167\u7ec4\u4ef6\u7c7b\u578b\u5206\u5f00\u5b58\u50a8\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bcf\u4e2a\u76f8\u540c\u7c7b\u578b\u5bf9\u5e94\u7684\u5c5e\u6027 \uff0c\u5b83\u4eec\u5e94\u8be5\u770b\u8d77\u6765\u5c31\u50cf\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5b83\u4eec\u5f62\u6210\u4e00\u4e2agroup\uff0c\u6bcf\u4e2agroup\u65e2\u5c5e\u4e8e\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4e5f\u5c5e\u4e8e\u4e00\u4e2aspace\u3002\u5c31\u50cf \u628a\u4e00\u4e2a\u5bf9\u8c61\u5206\u6210\u591a\u6bb5\uff0c\u6bcf\u4e2a\u6bb5\u8ddf\u4f5c\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u6574\u4f53\u62e5\u6709\u76f8\u540c\u7684\u884c\u4e3a"),(0,n.kt)("h4",{id:"21643-\u5bf9\u8c61\u901a\u4fe1"},"2.16.4.3 \u5bf9\u8c61\u901a\u4fe1"),(0,n.kt)("p",null,"\u5bf9\u8c61\u901a\u4fe1\u53ea\u80fd\u53d1\u751f\u57282\u4e2a\u5bf9\u8c61\u4e4b\u95f4\uff0c\u5373\uff0c\u5982\u679c\u5916\u90e8\u53c2\u6570\u5305\u542b\u591a\u4e2a\u53c2\u6570\uff0c\u5fc5\u987b\u662f\u6765\u81ea\u4e00\u4e2a\u5305\u542b\u6240\u6709\u8fd9\u4e9b\u5c5e\u6027\u7684\u5bf9\u8c61\uff0c\u4e0d\u80fd\u662f\u6765\u81ea\u591a\u4e2a\u5bf9\u8c61\u7684\u7ec4\u5408\u6240\u4ee5\u5f00\u53d1\u8005\u5e94\u8be5\u907f\u514d\u4f7f\u7528\u65e0\u5173\u7684\u591a\u4e2a\u53c2\u6570\u8f93\u5165\uff0c\u6700\u4f73\u65b9\u6cd5\u662f\u4f7f\u7528\u5168\u5c40\u7b26\u53f7\uff0c\u56e0\u4e3a\u90a3\u662f\u4ee3\u8868\u7740\u4ea4\u4e92\u7684\u903b\u8f91\u53d8\u91cf\u3002\u5982\u679c\u4f7f\u75282\u4e2a\u4ee5\u4e0a\u7b26\u53f7\uff0c\u8fd9\u4e9b\u7b26\u53f7\u5e94\u8be5\u4ece\u903b\u8f91\u4e0a\u5e94\u8be5\u5728\u4e00\u8d77\uff0c\u6216\u8005\u5f00\u53d1\u8005\u4fdd\u8bc1\u4ed6\u4eec\u5e94\u8be5\u5728\u4e00\u8d77"),(0,n.kt)("h4",{id:"21644-\u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"},"2.16.4.4 \u907f\u514d\u4e0a\u4e0b\u6587\u5207\u6362"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6c99\u76d2\u673a\u5236\u90fd\u662f\u91c7\u7528\u7c7b\u4f3cCPU\u65f6\u95f4\u7247\u7684\u65b9\u5f0f\uff0c\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6574\u4e2a\u6267\u884c\u662f\u65e0\u5e8f\u7684\uff0c\u6240\u4ee5\u4f60\u65e0\u6cd5\u6309\u67d0\u79cd\u987a\u5e8f\u6267\u884c\u6574\u4e2a\u8f6f\u4ef6\uff0c\u53ea\u80fd\u5728\u4e0d\u540c\u7684\u7ebf\u7a0b\u4e4b\u95f4\u8fdb\u884c\u5207\u6362\uff1b\u867d\u7136Erlang\u5728\u7ebf\u7a0b\u4e4b\u95f4\u5206\u914d\u4f18\u5148\u7ea7\uff0c\u4f46\u662f\u4ecd\u7136\u662f\u9700\u8981\u5207\u6362\uff0c\u56e0\u4e3a\u7ebf\u7a0b\u6570\u91cf\u53ef\u80fd\u5f88\u591a\uff0c\u5e76\u4e14\u7cfb\u7edf\u4e0d\u77e5\u9053\u6bcf\u4e2a\u7ebf\u7a0b\u9700\u8981\u591a\u957f\u65f6\u95f4\u624d\u80fd\u6267\u884c\u5b8c\u5168\u90e8\u8ba1\u7b97\uff0c\u5373\u4f7f\u5b83\u53ef\u80fd\u8fd8\u5dee\u51e0\u4e2a\u6307\u4ee4\u5c31\u6267\u884c\u5b8c\u4e86\uff0c\u4e5f\u53ef\u80fd\u4f1a\u53d1\u751f\u5207\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5355\u4e00\u4e00\u4e2a\u8ba1\u7b97\u53ef\u80fd\u6bd4\u8f83\u5927\uff0c\u6240\u4ee5\u65e0\u6cd5\u76f4\u63a5\u5c06\u4e00\u4e2a\u65b9\u6cd5\u8ba1\u7b97\u5b8c\u518d\u8fdb\u884c\u4e0b\u4e00\u4e2a\u8ba1\u7b97\uff0c\u4f60\u5fc5\u987b\u8981\u4fdd\u5b58\u72b6\u6001")),(0,n.kt)("p",null,"\u7531\u4e8e\u4e0a\u8ff0\u7684\u539f\u56e0\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u5728\u7ebf\u7a0b\u4e4b\u95f4\u4e0d\u505c\u5730\u5207\u6362\u4e0a\u4e0b\u6587\uff0c\u8fd9\u5c31\u5bfc\u81f4\u8f83\u5927\u7684\u5f00\u9500\uff0c\u9700\u8981\u82b1\u5f88\u591a\u65f6\u95f4\u5904\u7406\u5185\u5b58\u6570\u636e\u7684\u6362\u8fdb\u6362\u51fa\u3002\u56e0\u4e3a\u7ebf\u7a0b\u5185\u90e8\u53ef\u80fd\u4fdd\u5b58\u7740\u590d\u6742\u7684\u72b6\u6001\u3002"),(0,n.kt)("p",null,"\u5728RealityIS\u4e2d\uff0c\u7531\u4e8e\u6574\u4e2a\u6267\u884c\u7684\u6709\u5e8f\u7684\uff0c\u5373\u6240\u6709\u7ec4\u4ef6\u90fd\u9700\u8981\u5728\u4e00\u5e27\u4e4b\u5185\u88ab\u6267\u884c\uff0c\u6240\u4ee5\u8fd9\u5c31\u53ef\u4ee5\u907f\u514d\u6389\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u56e0\u4e3a\u4e0d\u5fc5\u4e3a\u4e86\u8003\u8651\u4e24\u4e00\u4e2a \u7ebf\u7a0b\u88ab\u62d6\u5ef6\u65f6\u95f4\u800c\u6682\u65f6\u505c\u6b62\u5f53\u524d\u7ebf\u7a0b\u7684\u8ba1\u7b97\u5e76\u5207\u6362\u5230\u5176\u4ed6\u7ebf\u7a0b\u3002\u8fd9\u907f\u514d\u989d\u5927\u91cf\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u5bfc\u81f4\u7684\u5185\u5b58\u6362\u8fdb\u6362\u51fa\u7b49\u989d\u5916\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4ee3\u4ef7\u662f\u5f00\u53d1\u8005\u9700\u8981\u4fdd\u8bc1\u6240\u6709\u8ba1\u7b97\u5728\u6bcf\u4e00\u5e27\u90fd\u53ef\u4ee5\u88ab\u8ba1\u7b97\u5b8c\uff0c\u6bd4\u5982\u5c31\u4e0d\u80fd\u51fa\u73b0\u90a3\u79cd\u5355\u4e00\u7ec4\u4ef6\u9700\u8981\u6570\u5e27\u624d\u80fd\u8ba1\u7b97\u5b8c\u6bd5\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u9700\u8981\u5f02\u6b65\u5904\u7406\uff0c\u4e0d\u5f71\u54cd\u5f53\u524d\u5faa\u73af\u3002\u4f46\u6e38\u620f\u672c\u8eab\u5c31\u662f\u8fd9\u6837\u7684\u673a\u5236\u7684\u3002"),(0,n.kt)("h2",{id:"217-\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17 \u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("h3",{id:"2171-llvm"},"2.17.1 LLVM"),(0,n.kt)("h3",{id:"2172-usd"},"2.17.2 USD"),(0,n.kt)("h3",{id:"2173-mlir"},"2.17.3 MLIR"),(0,n.kt)("h3",{id:"2174-lua-c-api"},"2.17.4 Lua C API"),(0,n.kt)("p",null,"\u76f4\u63a5\u83b7\u53d6\u5185\u5b58\u5730\u5740\uff0c\u800c\u4e0d\u662f\u4ece\u5b57\u7b26\u4e32\u89e3\u6790\u3002"),(0,n.kt)("h3",{id:"2175-\u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"},"2.17.5 \u57fa\u4e8e\u7b26\u53f7\u8868\u7684\u4e92\u64cd\u4f5c\u67b6\u6784"),(0,n.kt)("p",null,"\u4e92\u64cd\u4f5c\u5fc5\u7136\u57fa\u4e8e\u67d0\u79cd\u6807\u51c6\uff0c\u67d0\u79cd\u9884\u5b9a\u7684\u683c\u5f0f\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u4e92\u64cd\u4f5c\u67b6\u6784\u57fa\u672c\u4e0a\u662f\uff1a1\uff09\u9996\u5148\u8bbe\u8ba1\u597d\u67d0\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u5176\u4e2d\u7684\u683c\u5f0f\u51e0\u5305\u62ec\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\u3001\u5c5e\u6027\u7ec4\u7ec7\u7684\u6570\u636e\u7ed3\u6784\u3001\u4e5f\u53ef\u80fd\u5305\u542b\u5904\u7406\u8fd9\u4e9b\u6570\u636e\u7684\u7ea6\u5b9a\u63a5\u53e3\uff0c\u5f53\u7136\u63a5\u53e3\u7ea6\u5b9a\u5e76\u6ca1\u6709\u90a3\u4e48\u5927\u7684\u610f\u4e49\uff0c\u5904\u7406\u6570\u636e\u7684\u7a0b\u5e8f\u7406\u8bba\u4e0a\u53ef\u4ee5\u6309\u7167\u4efb\u4f55\u65b9\u5f0f\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\uff1b2\uff09\u53d1\u751f\u6570\u636e\u4e00\u65b9\u6309\u7167\u6570\u636e\u683c\u5f0f\u751f\u6210\u6570\u636e\uff1b3\uff09\u501f\u52a9\u5e73\u53f0\u63d0\u4f9b\u7684\u67d0\u79cd\u673a\u5236\u53d1\u751f\u6570\u636e\u7ed9\u63a5\u6536\u65b9\uff0c\u5176\u4e2d\u4f20\u8f93\u7684\u901a\u5e38\u662f\u5e8f\u5217\u5316\u4e4b\u540e\u7684\u5b57\u7b26\u4e32\u6216\u8005\u5bf9\u5e94\u7684\u4e8c\u8fdb\u5236\u6570\u636e\uff1b4\uff09\u63a5\u6536\u65b9\u63a5\u53d7\u5230\u6570\u636e\u9996\u5148\u8fdb\u884c\u53cd\u5e8f\u5217\u5316\uff0c\u7136\u540e\u6309\u7167\u683c\u5f0f\u6807\u51c6\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u6d41\u7a0b\u5b58\u5728\u4e09\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6027\u80fd\u95ee\u9898\uff0c\u5b58\u5728\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u95ee\u9898\uff0c\u53cc\u65b9\u53ea\u9700\u8981\u9075\u5faa\u683c\u5f0f\u6807\u51c6\uff0c\u4f46\u662f\u53d1\u9001\u548c\u89e3\u6790\u7684\u7a0b\u5e8f\u53ca\u5176\u63a5\u53e3\u90fd\u662f\u5b8c\u5168\u7531\u53cc\u65b9\u81ea\u5df1\u51b3\u5b9a\u7684\uff0c\u5f53\u6709\u5927\u91cf\u7684\u6570\u636e\u9700\u8981\u8fdb\u884c\u4e92\u64cd\u4f5c\u65f6\uff0c\u8fd9\u79cd\u5927\u91cf\u7684\u534f\u4f5c\u5c31\u4f1a\u5e26\u6765\u5de8\u5927\u7684\u6210\u672c\u3002\u7531\u4e8e\u53cc\u65b9\u7406\u8bba\u4e0a\u8bf4\u751a\u81f3\u53ef\u80fd\u91c7\u7528\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6240\u4ee5\u5728\u5173\u4e8e\u600e\u4e48\u5904\u7406\u6570\u636e\uff08\u5305\u62ec\u53d1\u9001\u548c\u63a5\u6536\uff09\u4e0a\u6ca1\u6709\u673a\u5236\u80fd\u591f\u8fbe\u6210\u5171\u8bc6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u66f4\u65b0\u95ee\u9898\uff0c\u5f53\u6807\u51c6\u9700\u8981\u66f4\u65b0\u65f6\uff0c\u5b8c\u5168\u6ca1\u6709\u6709\u6548\u7684\u673a\u5236\u53ef\u4ee5\u4fdd\u8bc1\u53cc\u65b9\u53ef\u4ee5\u53ca\u65f6\u66f4\u65b0\uff0c\u5bfc\u81f4\u7a0b\u5e8f\u4e0d\u53ef\u7528\u6216\u8005\u5f88\u96be\u66f4\u65b0\u5230\u6700\u65b0\u529f\u80fd\u3002\u5c3d\u7ba1\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u8fd9\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u5728\u6570\u5b57\u4e16\u754c\uff0c\u6211\u4eec\u7406\u5e94\u6709\u65b9\u6cd5\u53ef\u80fd\u66f4\u597d\u5730\u7ba1\u7406\u8fd9\u79cd\u66f4\u65b0\u3002")),(0,n.kt)("p",null,"\u6309\u6743\u91cd\u770b\uff0c\u63a5\u53e3\u7684\u95ee\u9898\u662f\u6700\u5927\u7684\uff0c\u5176\u672c\u8d28\u7684\u95ee\u9898\u5728\u4e8e\u4ec5\u4ec5\u6709\u6570\u636e\u683c\u5f0f\uff0c\u6ca1\u6709\u5efa\u7acb\u8d77\u66f4\u4e0a\u4e00\u5c42\u5173\u4e8e\u6570\u636e\u683c\u5f0f\u7684\u5904\u7406\u6807\u51c6\u3002\u8fd9\u91cc\u9762\u5305\u542b\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5904\u7406\u6570\u636e\u7684\u5c5e\u6027\u540d\u79f0\u7684\u95ee\u9898\uff0c\u8fd9\u8868\u73b0\u5728\uff0c\u5c3d\u7ba1\u53cc\u65b9\u90fd\u77e5\u9053\u683c\u5f0f\u4e2d\u5173\u4e8e\u6570\u636e\u5c5e\u6027\u7684\u5b9a\u4e49\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6bcf\u4e2a\u7a0b\u5e8f\u5728\u5185\u90e8\u771f\u6b63\u5904\u7406\u7684\u7b97\u6cd5\u4e2d\uff0c\u5b83\u4f7f\u7528\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5e76\u4e0d\u4e00\u5b9a\u662f\u6807\u51c6\u683c\u5f0f\u4e2d\u5b9a\u4e49\u7684\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u5c31\u5bfc\u81f4\u53cc\u65b9\u5fc5\u7136\u8981\u505a\u4e00\u4e9b\u540d\u79f0\u548c\u6570\u636e\u7ed3\u6784\u8f6c\u5316\u4e4b\u7c7b\u7684\u5de5\u4f5c\u3002\u8fd9\u4e9b\u5de5\u4f5c\u4e0d\u5149\u662f\u7e41\u7410\u7684\uff0c\u800c\u4e14\u56e0\u4e3a\u6bcf\u4e2a\u7a0b\u5e8f\u5b9a\u4e49\u4e0d\u4e00\u6837 \uff0c\u8fd9\u79cd\u4eba\u5de5\u7684\u4e00\u4e9b\u5de5\u4f5c\u5bfc\u81f4\u5f88\u96be\u8fdb\u884c\u81ea\u52a8\u5316\uff0c\u6bd4\u5982\u6d89\u53ca\u7b2c\u4e09\u4e2a\u6807\u51c6\u66f4\u65b0\u7684\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u6570\u636e\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\u7684\u95ee\u9898\uff0c\u8ddf\u4e0a\u9762\u7684\u95ee\u9898\u6709\u5173\uff0c\u6ca1\u6709\u6bd4\u8f83\u6807\u51c6\u7684\u5bf9\u6570\u636e\u8fdb\u884c\u76f4\u63a5\u8bfb\u5199\u7684\u65b9\u6cd5")),(0,n.kt)("p",null,"\u4e0a\u9762\u7b2c\u4e00\u4e2a\u95ee\u9898\u53ef\u4ee5\u4f7f\u7528\u7b26\u53f7\u8868\u8fdb\u884c\u89e3\u51b3\uff0c\u7b26\u53f7\u8868\u56e0\u4e3a\u5b9a\u4e49\u7684\u5c31\u662f\u53d8\u91cf\u7684\u5b9a\u4e49\uff0c\u6240\u4ee5\u5982\u679c\u6807\u51c6\u5b9a\u4e49\u7684\u4e0d\u4ec5\u4ec5\u662f\u683c\u5f0f\u672c\u8eab\uff0c\u800c\u662f\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u8fd0\u884c\u65f6\u7b26\u53f7\u7684\u89e3\u6790\uff0c\u8fd9\u5929\u751f\u5c31\u5c06\u5904\u7406\u53cc\u65b9\u7684\u6570\u636e\u540d\u79f0\u548c\u683c\u5f0f\u8fdb\u884c\u7edf\u4e00\u3002"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5b83\u7684\u601d\u60f3\u6765\u6e90\u4e8eUSD\u548cMLIR\uff0c\u5373\u6807\u51c6\u7cfb\u7edf\u4e0d\u4ec5\u8981\u89e3\u51b3\u4e2d\u95f4\u4ea4\u6362\u683c\u5f0f\u7684\u95ee\u9898\uff0c\u8fd8\u9700\u8981\u63d0\u4f9b\u5173\u4e8e\u5bf9\u4ea4\u6362\u6570\u636e\u8fdb\u884c\u89e3\u6790\u7684\u529f\u80fd\uff0c\u8fd9\u907f\u514d\u4e86\u53cc\u65b9\u5404\u81ea\u5199\u4e00\u4e9b\u72ec\u7acb\u7684\u91cd\u590d\u4ee3\u7801\uff0c\u53c8\u4f7f\u5f97\u5bf9\u6570\u636e\u7684\u8bfb\u5199\u4fee\u6539\u53d8\u5f97\u7b80\u5355\u3002"),(0,n.kt)("p",null,"\u4ece\u8fd9\u4e2a\u610f\u4e49\u4e0a\u8bf4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"CreateScript\u4e2d\u5b9a\u4e49\u7684\u7b26\u53f7\uff08\u53ca\u5c5e\u6027\u53ca\u5176\u6570\u636e\u7ed3\u6784\uff09\u5c31\u76f8\u5f53\u4e8eUSD\u6216\u8005MLIR\u4e2d\u5b9a\u4e49\u7684\u683c\u5f0f\u6807\u51c6"),(0,n.kt)("li",{parentName:"ul"},"\u800cCreate\u7684\u6574\u4e2a\u8fd0\u884c\u65f6\u4fdd\u8bc1\u4e24\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u80fd\u591f\u83b7\u53d6\u5230\u6570\u636e\u8fdb\u884c\u5904\u7406\u7684\u673a\u5236\uff0c\u5c31\u50cfUSD/MLIR\u4e2d\u63d0\u4f9b\u7684\u5bf9\u81ea\u5b9a\u4e49\u6570\u636e\u683c\u5f0f\u7684\u89e3\u6790\uff0c\u53ea\u4e0d\u8fc7USD\u6216\u8005MLIR\u4e2d\u662f\u6309\u6a21\u677f\u751f\u6210\u7684\u5bf9\u5e94\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u800cCreateScript\u662f\u4e00\u79cd\u8fd0\u884c\u65f6\u7684\u8bed\u8a00\u673a\u5236\uff0c\u8fd9\u79cd\u8bed\u8a00\u673a\u5236\u4fdd\u8bc1\u53ef\u4ee5\u76f4\u63a5\u4ece\u5185\u5b58\u4e2d\u8fdb\u884c\u6570\u636e\u8bfb\u53d6\uff0c\u800c\u4e0d\u662f\u4ece\u4e00\u4e2a\u6570\u636e\u6587\u4ef6\u4e2d\u8fdb\u884c\u89e3\u6790")),(0,n.kt)("h2",{id:"218-\u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"},"2.18 \u4ece\u5355\u5e94\u7528\u5230\u591a\u5e94\u7528\u67b6\u6784"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u4ece\u8bed\u8a00\u673a\u5236\u6216\u8005\u8bed\u6cd5\u7279\u6027\u4e0a\u770b\uff0cCreateScript\u8bbe\u8ba1\u4e86\u5f88\u591a\u4e0d\u4e00\u6837\u7684\u601d\u8def\uff0c\u4f46\u5bf9\u4e8e\u5b83\u4eec\u4e2d\u7684\u5927\u591a\u6570\uff0c\u90fd\u4e0d\u5355\u7eaf\u53ea\u662f\u4e00\u79cd\u4e0d\u4e00\u6837\u7684\u8bed\u6cd5\u5f62\u5f0f\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u7531\u5e95\u5c42\u6574\u4e2a\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u7cfb\u7edf\u53d1\u751f\u4e86\u5f88\u5927\u7684\u53d8\u5316\uff0c\u6216\u8005\u8bf4\u8ddf\u8fd9\u4e9b\u53d8\u5316\u7684\u5e95\u5c42\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u5c06\u6240\u6709\u7684\u539f\u56e0\u548c\u56e0\u7d20\u5206\u4e3a\u4e09\u5927\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6700\u5e95\u5c42\u7684\u56e0\u7d20\uff0c\u8fd9\u6d89\u53ca\u7f16\u8bd1\u3001\u89e3\u91ca\u548c\u94fe\u63a5\u7684\u8fc7\u7a0b"),(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u95f4\u5c42\u7684\u56e0\u7d20\uff0c\u6bd4\u5982\u4e92\u64cd\u4f5c\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4e0a\u5c42\u66f4\u504f\u5411\u4e8e\u8bed\u8a00\u7684\u8bed\u6cd5\u5f62\u5f0f")),(0,n.kt)("p",null,"\u672c\u8282\u6211\u4eec\u8ba8\u8bba\u4e00\u4e9b\u6700\u5e95\u5c42\u7684\u673a\u5236\u548c\u95ee\u9898\uff0c\u7136\u540e\u53ef\u4ee5\u4ece\u4e2d\u63a8\u5bfc\u51fa\u6211\u4eec\u4e3a\u4ec0\u4e48\u5fc5\u987b\u8981\u8fd9\u4e48\u8bbe\u8ba1\uff0c\u4e5f\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u6574\u4e2aCreateScript\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u4ece\u6839\u672c\u4e0a\u8bf4\uff0cRealityIS\u4e3a\u4ec0\u4e48\u5fc5\u987b\u91cd\u65b0\u5f00\u53d1\u4e00\u6574\u5957\u5e95\u5c42\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u662f\u56e0\u4e3a\u5f53\u4eca\u6240\u6709\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u6bcf\u4e00\u4e2a\u90e8\u5206\uff0c\u90fd\u662f\u5728\u56f4\u7ed5\u5355\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\u800c\u8bbe\u8ba1\u7684\uff0c\u8fd9\u4ece\u6839\u672c\u4e0a\u5c31\u4f7f\u5f97\u591a\u5e94\u7528\u7684\u5efa\u6784\u5f88\u96be\u88ab\u6784\u5efa\uff0c\u8fd9\u5bfc\u81f4\u4e00\u4e9b\u95ee\u9898\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u57fa\u4e8e\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6784\u5efa\u591a\u5e94\u7528\u73af\u5883\u5f88\u96be\u4fdd\u8bc1\u5b89\u5168\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u96be\u5b9e\u73b0\u4e92\u64cd\u4f5c\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u5e94\u7528\u7684\u8fd0\u884c\u65f6\u5f88\u96be\u88ab\u5916\u90e8\u5f00\u53d1\u8005\u8fdb\u884c\u6269\u5c55\uff0c\u5f53\u7136\u8fd9\u91cc\u6307\u7684\u662f\u6269\u5c55\u4e00\u4e2a\u5e94\u7528\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u8f6f\u4ef6\u3002\u6240\u8c13\u5e94\u7528\u662f\u6307\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\uff0c\u6240\u6709\u7684\u7528\u6237\u90fd\u53ef\u4ee5\u5373\u4f7f\u83b7\u5f97\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u7248\u672c\uff0c\u800c\u8f6f\u4ef6\u662f\u6307\u53ea\u80fd\u88ab\u67d0\u4e2a\u7528\u6237\u81ea\u5df1\u4f7f\u7528\u7684\u8f6f\u4ef6\u62f7\u8d1d\uff0c\u4f8b\u5982\u67d0\u4e2a\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8eUnreal Engine\u5f00\u53d1\u6216\u8005\u8d2d\u4e70\u4e00\u4e9b\u6269\u5c55\u63d2\u4ef6\uff0c\u6765\u5f62\u6210\u4e00\u4e2a\u81ea\u5df1\u72ec\u7279\u7684\u7248\u672c\uff0c\u8fd9\u4e2a\u7248\u672c\u7684\u8f6f\u4ef6\u867d\u7136\u662f\u7ecf\u8fc7\u6269\u5c55\u6216\u8005\u4fee\u6539\u7684\uff0c\u4f46\u662f\u8fd9\u4e2a\u6269\u5c55\u6216\u8005\u4fee\u6539\u4e4b\u540e\u7684\u8f6f\u4ef6\u53ea\u80fd\u88ab\u8be5\u5f00\u53d1\u8005\u4e00\u4e2a\u4eba\u4f7f\u7528")),(0,n.kt)("p",null,"\u4e00\u4e0b\u6211\u4eec\u8be6\u7ec6\u63cf\u8ff0\u8fd9\u4e9b\u95ee\u9898\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u90fd\u662f\u4e0e\u5177\u4f53\u7f16\u7a0b\u8bed\u8a00\u65e0\u5173\u7684\uff0c\u800c\u662f\u8bbe\u8ba1\u66f4\u5e95\u5c42\u7684\u4e00\u4e9b\u673a\u5236\u6216\u8005\u7ea6\u5b9a\uff0c\u4f8b\u5982\u65b9\u6cd5\u8c03\u7528\u7ea6\u5b9a\uff08Calling convention\uff09\u3002"),(0,n.kt)("h3",{id:"2181-\u65b9\u6cd5\u8c03\u7528\u673a\u5236"},"2.18.1 \u65b9\u6cd5\u8c03\u7528\u673a\u5236"),(0,n.kt)("p",null,"\u65b9\u6cd5\u8c03\u7528\u662f\u7f16\u8bd1\u8fc7\u7a0b\u8981\u5904\u7406\u7684\u4e00\u4e2a\u91cd\u8981\u7684\u90e8\u5206\uff0c\u540c\u4e00\u4e2a\u65b9\u6cd5\u7684\u4ee3\u7801\u901a\u5e38\u7f16\u8bd1\u5230\u76f8\u90bb\u7684\u6307\u4ee4\u5e8f\u5217\u4e2d\uff0c\u5728\u5185\u5b58\u4e2d\u5904\u4e8e\u8fde\u7eed\u7684\u4f4d\u7f6e\uff0c\u56e0\u6b64CPU\u603b\u662f\u80fd\u591f\u6309\u987a\u5e8f\u6b63\u786e\u6267\u884c\u4e00\u4e2a\u65b9\u6cd5\u3002\u5373\u4f7f\u5bf9\u4e8e\u8df3\u8f6c\u8bed\u53e5\uff0c\u8df3\u8f6c\u5230\u4efb\u610f\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u5219\u610f\u5473\u7740\u540e\u7eed\u7684\u6267\u884c\u90fd\u5c06\u4ece\u65b0\u7684\u4f4d\u7f6e\u91cd\u65b0\u6309\u987a\u5e8f\u6267\u884c\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u8bbe\u7f6e\u4e00\u4e2a\u7279\u6b8a\u7684\u8df3\u8f6c\u6307\u4ee4\u7528\u4e8e\u5c06\u5f53\u524d\u6307\u4ee4\u7684\u4f4d\u7f6e\u6539\u4e3a\u6307\u5411\u65b0\u7684\u5730\u5740\u5373\u53ef\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u65b9\u6cd5\u8c03\u7528\u7684\u6d41\u7a0b\u5219\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u8df3\u8f6c\u6d41\u7a0b\uff0c\u5f53\u4e00\u4e2a\u51fd\u6570A\u4e2d\u7684\u67d0\u4e2a\u8bed\u53e5\u8c03\u7528\u51fd\u6570B\u65f6\uff0c\u7cfb\u7edf\u9700\u8981\u5c06\u6307\u4ee4\u6267\u884c\u8df3\u8f6c\u5230\u51fd\u6570B\u7684\u5f00\u59cb\u4f4d\u7f6e\uff0c\u540c\u65f6\u7b49\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u65f6\uff0c\u7cfb\u7edf\u8fd8\u9700\u8981\u80fd\u591f\u6b63\u786e\u8fd4\u56de\u5230\u51fd\u6570A\u4e2d\u540e\u7eed\u7684\u6307\u4ee4\u4f4d\u7f6e\u3002\u4e3a\u4e86\u80fd\u591f\u6b63\u786e\u5904\u7406\u4e0a\u8ff0\u7684\u6d41\u7a0b\uff0c\u5728\u4f20\u7edf\u7684\u7f16\u8bd1\u6d41\u7a0b\u4e2d\uff0c\u5bf9\u4e8e\u65b9\u6cd5\u7684\u8c03\u7528\uff0c\u5927\u591a\u6570\u662f\u4f7f\u7528\u4e00\u79cd\u76f8\u4e92\u534f\u4f5c\u7684\u673a\u5236\uff0c\u5373\u4f1a\u5728\u51fd\u6570A\u548c\u51fd\u6570B\u4e2d\u5206\u522b\u65b0\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u51fd\u6570A\u4e2d\u7684\u8c03\u7528\u4ee3\u7801\u5904\u8bbe\u7f6e\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\uff0c\u4f7f\u4e4b\u53ef\u4ee5\u8df3\u8f6c\u81f3\u51fd\u6570B\u7684\u4f4d\u7f6e\uff0c\u540c\u65f6\u5c06\u4e0b\u4e00\u6761\u8bed\u53e5\u7684\u5730\u5740\u4f20\u9012\u7ed9\u51fd\u6570B\uff0c\u4f7f\u51fd\u6570B\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u7cfb\u7edf\u53ef\u4ee5\u8fd4\u56de\u5230\u6b63\u786e\u7684\u4f4d\u7f6e"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570B\u4e2d\u5219\u4f1a\u589e\u52a0\u4e00\u6bb5\u4ee3\u7801\uff0c\u8be5\u4ee3\u7801\u9996\u5148\u4f1a\u4fdd\u5b58\u8fd4\u56de\u5730\u5740\uff0c\u5e76\u5728\u51fd\u6570\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u6267\u884c\u4e00\u4e2a\u8df3\u8f6c\u6307\u4ee4\u4f7f\u4e4b\u8df3\u8f6c\u56de\u51fd\u6570A\u4e2d\u7684\u4e0b\u4e00\u6761\u8bed\u53e5")),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u8fd4\u56de\u5730\u5740\u662f\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u51fd\u6570B\u5e76\u4e0d\u4f1a\u4fdd\u5b58\u5728\u6307\u4ee4\u4e2d\uff0c\u800c\u662f\u5c06\u8fd4\u56de\u5730\u5740\u5b58\u50a8\u5728\u6808\u4e2d\uff0c\u8fd9\u4e2a\u6808\u7684\u5730\u5740\u53ef\u4ee5\u540c\u65f6\u88abA\u548cB\u8bbf\u95ee\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51fd\u6570B\u53ef\u80fd\u4e0d\u9075\u5faa\u76f8\u5173\u7684\u7ea6\u5b9a\uff0c\u4f8b\u5982\u5b83\u53ef\u4ee5\u4fee\u6539\u8fd9\u4e2a\u8fd4\u56de\u51fd\u6570\u5730\u5740\uff0c\u4f7f\u4e4b\u6307\u5411\u4e0d\u5408\u6cd5\u7684\u4f4d\u7f6e\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u7684\u63a7\u5236\u6d41\u88ab\u7834\u574f\uff0c\u53ef\u80fd\u5f15\u8d77\u7a0b\u5e8f\u5d29\u6e83\u3002\u5728\u4e00\u4e9b\u7f13\u5b58\u6ea2\u51fa\u7684\u653b\u51fb\u4e2d\uff0c\u7834\u574f\u8005\u8fd8\u5229\u7528\u7f13\u5b58\u6ea2\u51fa\u6ce8\u5165\u7684\u51fd\u6570\u4ee3\u7801\uff0c\u4f7f\u7a0b\u5e8f\u6d41\u6307\u5411\u8fd9\u4e9b\u4ee3\u7801\u4ece\u800c\u53ef\u4ee5\u6267\u884c\u4e00\u4e9b\u975e\u6cd5\u4ee3\u7801\u3002"),(0,n.kt)("h3",{id:"2182-\u94fe\u63a5\u673a\u5236"},"2.18.2 \u94fe\u63a5\u673a\u5236"),(0,n.kt)("h3",{id:"2183-\u5185\u5b58\u9694\u79bb\u673a\u5236"},"2.18.3 \u5185\u5b58\u9694\u79bb\u673a\u5236"),(0,n.kt)("h2",{id:"219-\u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"},"2.19 \u5e76\u884c\u7f16\u7a0b\u8bed\u8a00"),(0,n.kt)("h1",{id:"3-reality-create"},"3. Reality Create"),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,"\u7b2c\u4e00\u76ee\u6807\u662f\u5168\u90e8\u7a0b\u5e8f\u52a8\u6001\u5316\uff0c\u4efb\u4f55\u6574\u4e2aCreation \u90fd\u53ef\u4ee5\u52a8\u6001\u4e0b\u8f7d\uff0c\u6240\u4ee5\u4e0d\u7528\u7f16\u5199C++\u4ee3\u7801\uff0c\u4e5f\u5c31\u610f\u5473\u7740\u5e95\u5c42\u5fc5\u987b\u9ad8\u5ea6\u4f18\u5316\uff0c\u811a\u672c\u7684\u8f6c\u6362\u90e8\u4efd\u4e5f\u8981\u9ad8\u5ea6\u4f18\u5316\uff0c\u53ef\u4ee5\u53bb\u9664\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684\u9762\u5411\u5bf9\u8c61\u5c5e\u6027"),(0,n.kt)("h2",{id:"31-creation-id"},"3.1 Creation ID"),(0,n.kt)("h2",{id:"32-creation-simulation"},"3.2 Creation Simulation"),(0,n.kt)("h2",{id:"33-ui\u7ec4\u4ef6"},"3.3 UI\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5c06UI\u5143\u7d20\u96c6\u4e8eCreation Script\u6784\u5efa\u6210\u7ec4\u4ef6\uff0c\u7136\u540e\u6574\u4e2a\u7f16\u8f91\u5668\u53ef\u4ee5\u96c6\u4e8eCreation Script\u6765\u521b\u5efa\uff0c\u5373\u6574\u4e2a\u7f16\u8f91\u5668\u5f53\u4f5c\u4e00\u4e2aCreation\u3002"),(0,n.kt)("p",null,"UI\u7ec4\u4ef6\u7684\u505a\u6cd5\u5176\u5b9e\u53ef\u4ee5\u6309\u71673D Renerer\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u552f\u4e00\u7684\u533a\u522b\u5c31\u662fCamera\u4e0d\u4e00\u81f4\uff0c3D\u7684\u6e32\u67d3\u90e8\u5206\u80af\u5b9a\u4e5f\u662f\u9700\u8981\u7ee7\u627f\u5230\u539f\u751fC++\u4ee3\u7801\u4e2d\uff0cUI\u6e32\u67d3\u5b8c\u5168\u4e5f\u662f\u7c7b\u4f3c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7f16\u8f91\u5668\u4e2d\uff0c\u7f16\u8f91\u76f8\u5173\u7684\u529f\u80fd\u53ea\u662f\u5b58\u5728\u4e8e\u7f16\u8f91\u5668\u4e2d\uff0c\u4e0d\u4f1a\u5305\u542b\u5728\u8fd0\u884c\u65f6\uff0c\u8fd9\u5757\u4ecd\u7136\u9700\u8981\u5904\u7406\uff0c\u4f46\u662f\u81f3\u5c11\u6574\u4e2a\u7f16\u8f91\u5668\u7684\u6784\u5efa\u53ef\u4ee5\u4f7f\u7528\u7edf\u4e00\u7684\u67b6\u6784\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u6709\u4e00\u90e8\u5206\u529f\u80fd\u662f\u7f16\u8f91\u5668\u7279\u6709\u7684\uff0c\u5305\u62ec\u4ee3\u7801\u7684\u63d0\u793a\uff0c\u8c03\u8bd5\u7b49\u7b49\u529f\u80fd\uff0c\u8fd9\u90e8\u5206\u5728Runtime\u90e8\u5206\u8fd8\u662f\u9700\u8981\u4ece\u865a\u62df\u673a\u4e2d\u62ff\u6389\u3002"),(0,n.kt)("h3",{id:"331-bevy-ui"},"3.3.1 Bevy UI"),(0,n.kt)("p",null,"A custom ECS-driven UI framework built specifically for Bevy"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Built directly on top of Bevy's ECS, Renderer, and Scene plugins"),(0,n.kt)("li",{parentName:"ul"},"Compose UIs dynamically in code or declaratively using the Bevy Scene format"),(0,n.kt)("li",{parentName:"ul"},'Use a familiar "flex box" model to layout your UIs')),(0,n.kt)("h3",{id:"332-\u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"},"3.3.2 \u7edf\u4e00\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001"),(0,n.kt)("h1",{id:"4-reality-world-niantic-opens-lightship-augmented-reality-platform-to-all-developers"},"4. Reality World ",(0,n.kt)("img",{alt:"niantic-opens-lightship-augmented-reality-platform-to-all-developers",src:l(738).Z,width:"1200",height:"579"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6838\u5fc3\u4ea7\u54c1"),"\uff0c\u5c31\u662f\u4ee5\u73b0\u5b9e\u4e16\u754c\u7684\u5730\u9762\u5e73\u9762\u7279\u5f81\u4e3a\u5e95\u677f"),(0,n.kt)("p",null,"\u521b\u4f5c\u5143\u7d20\u3001\u6a21\u677f\u3001\u884c\u4e3a\u7ec4\u4ef6\u5206\u7c7b\u4e2d\u4ee5\u5efa\u7b51\u7c7b\u3001\u57ce\u5e02\u88c5\u626e\u7c7b\u4e3a\u6838\u5fc3\u6216\u8005\u4f18\u5148\uff0c\u4ee5\u5c0f\u4e16\u754c\u5408\u6210\u5927\u57ce\u5e02\u7684\u65b9\u5f0f\uff0c\u91cd\u65b0\u5b9a\u4e49\u6211\u4eec\u7684\u4e16\u754c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9664\u4e86\u5efa\u7b51\u4e4b\u5916\uff0c\u8fd8\u6709\u8bb8\u591a\u57ce\u5e02\u5143\u7d20\uff0c\u4f8b\u5982\u5e7f\u544a\uff0c\u4ea4\u901a"),(0,n.kt)("li",{parentName:"ul"},"\u57ce\u5e02\u4e3b\u9898\u7ed3\u6784\u5c06\u4e0d\u4ec5\u4ec5\u662f\u5efa\u7b51\uff0c\u53ef\u80fd\u975e\u5e38\u591a\u5947\u89c2\u521b\u9020\uff0c\u975e\u5e38\u591a\u5143"),(0,n.kt)("li",{parentName:"ul"},"\u6e38\u89c8\u57ce\u5e02\u5c06\u662f\u4e00\u79cd\u5f88\u72ec\u7279\u7684\u4f53\u9a8c"),(0,n.kt)("li",{parentName:"ul"},"\u8981\u6709\u673a\u5236\u5728\u57ce\u5e02\u4e2d\u6784\u9020\u6587\u5316")),(0,n.kt)("p",null,"\u540c\u65f6\u6574\u4e2a\u57fa\u7840\u4ecd\u7136\u662f\u53ef\u4ee5\u5c40\u90e8\u72ec\u7acb\u7269\u4f53\u53ef\u5206\u4eab\u7684\u65b9\u5f0f"),(0,n.kt)("p",null,"\u7b2c\u4e00\u671f\u4ea7\u54c1\u6574\u4f53\u4f1a\u6709\u4e09\u79cd\u4f53\u9a8c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5927\u7684\u73b0\u5b9e\u4e16\u754c"),(0,n.kt)("li",{parentName:"ul"},"\u72ec\u7acb\u5206\u4eab"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5Code\u7684\u5f62\u5f0f\u521b\u9020\u5e73\u884c\u4e16\u754c")),(0,n.kt)("p",null,"\u6240\u6709\u7684\u5efa\u7b51\u5185\u5bb9\u4e0d\u4f1a\u662f\u9759\u6001\u7684\uff0c\u5b83\u4f1a\u4e3a\u521b\u4f5c\u8005\u5e26\u6765\u6536\u76ca\uff0c\u6210\u957f\u6216\u8005\u5347\u7ea7\uff0c\u7c7b\u4f3c\u6a21\u62df\u7ecf\u8425\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u8fd9\u91cc\u4e3b\u8981\u662f\u9760\u521b\u9020\u7684\u827a\u672f\u6027\u3001\u6587\u5316\u6027\u7b49\uff0c\u901a\u8fc7\u521b\u9020\u7684\u72ec\u7acb\u6027\u5438\u5f15\u6d41\u91cf\uff0c\u4ece\u800c\u5f62\u6210\u533a\u57df\u7b49\u7ea7\u4e2d\u5fc3\u533a\u7b49\u7b49\uff0c\u8f83\u70ed\u95e8\u7684\u533a\u57df\u4f1a\u5e26\u6765\u66f4\u9ad8\u7684\u6536\u76ca\uff0c\u5f62\u6210\u57ce\u5e02\u6587\u5316\uff08\u521b\u4f5c\u672c\u8eab\u8574\u542b\u7740\u6587\u5316\uff09\uff0c\u8fd9\u53ef\u80fd\u4e5f\u4f1a\u5f62\u6210\u533a\u57df\u534f\u4f5c\uff0c\u5171\u540c\u5b9a\u4e49\u4e00\u4e9b\u6587\u5316\uff0c\u53ef\u4ee5\u7c7b\u4f3cEverdale\u673a\u5236\u534f\u4f5c\u5171\u5efa"),(0,n.kt)("p",null,"\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u505a\u6cd5\uff0c\u878d\u5165\u5efa\u9020\u548c\u6a21\u62df\u7ecf\u8425\uff0c\u5168\u9762\u5efa\u8bbe\u57ce\u5e02\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u9650\u5236\u8d44\u6e90\u7c7b\u578b\uff0c\u9f13\u52b1\u4ea4\u6613\uff0c\u9f13\u52b1\u5408\u4f5c\uff0c\u4fbf\u6e38\u620f\u4e00\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u53ea\u878d\u5165\u5c11\u91cf\u6e38\u620f\u5143\u7d20\uff0c\u4ee5\u521b\u9020\u4e3a\u6781\u9650\uff0c\u4e0d\u9650\u5236\u8d44\u6e90")),(0,n.kt)("p",null,"\u524d\u8005\u65e9\u671f\u53d1\u5c55\u66f4\u5feb\uff0c\u540e\u8005\u65e9\u671f\u53c2\u4e0e\u8f83\u5f31\uff0c\u53ef\u4ee5\u4e24\u8005\u7ed3\u5408"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&app=appid&cam=6dof"},"http://creation.id/=qwe&app=appid&cam=6dof")),(0,n.kt)("p",null,"\u5750\u6807\u7684\u6982\u5ff5\u4f7f\u5f97\u5927\u5bb6\u53ef\u4ee5\u5728RealityWorld \u4e4b\u5916\u5927\u91cf\u5ba3\u4f20\u4e00\u4e2a\u5730\u70b9\uff0c\u5c31\u5728\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u751a\u81f3\u5927\u5bb6\u56de\u53bb\u627e\u8fd9\u6837\u7684\u653b\u7565\u548c\u5217\u8868\uff0c\u800c\u4e0d\u662f\u901a\u8fc7\u91cc\u9762\u7684\u6e38\u89c8"),(0,n.kt)("p",null,"\u9ed8\u8ba4\u6253\u5f00\u5f53\u524d\u4f4d\u7f6e\uff0c\u6240\u4ee5\u53bb\u54ea\u91cc\u90fd\u53ef\u4ee5\u770b\u770b"),(0,n.kt)("h2",{id:"41-reality-id"},"4.1 Reality ID"),(0,n.kt)("p",null,"\u7528\u6237\u4e2d\u5fc3"),(0,n.kt)("h3",{id:"411-\u7528\u6237\u7ec4\u4ef6\u7ba1\u7406"},"4.1.1 \uff08\u7528\u6237\uff09\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("p",null,"\u7ec4\u4ef6\u7248\u672c\u5347\u7ea7\uff0c\u7b49\u7b49\uff0c\u4fdd\u8bc1\u7ec4\u4ef6\u662f\u6700\u65b0\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7f16\u8bd1\u4e4b\u540e\u5217\u51fa\u6240\u6709\u95ee\u9898\uff0c\u7528\u6237\u4e5f\u53ef\u4ee5\u76f4\u63a5\u53d1\u9001\u4fe1\u606f\u7ed9\u5f00\u53d1\u8005\uff0c\u8981\u6c42\u66f4\u65b0\u7ec4\u4ef6\u4ee5\u652f\u6301\u67d0\u4e9b\u65b0\u7684\u6807\u51c6\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u662f\u7528\u6237\u5bf9\u8c61\u7f16\u8bd1\u53d1\u751f\u7684\u5730\u65b9\uff0c\u56e0\u4e3a\u8fd9\u91cc\u8bbe\u7f6e\u7684\u4e1c\u897f\u57fa\u672c\u4e0a\u4e0d\u4f1a\u518d\u4fee\u6539\uff0c\u5f53\u7136\u4e5f\u5e94\u8be5\u652f\u6301\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u7f16\u8bd1\uff0c\u8fd9\u79cd\u662f\u5c11\u6570\u60c5\u51b5"),(0,n.kt)("h3",{id:"412-\u7528\u6237\u5b9e\u4f53\u6743\u9650\u7ba1\u7406"},"4.1.2 \uff08\u7528\u6237\u5b9e\u4f53\uff09\u6743\u9650\u7ba1\u7406"),(0,n.kt)("h2",{id:"42-the-reality-world-app"},"4.2 The Reality World app"),(0,n.kt)("h3",{id:"421-\u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"},"4.2.1 \u771f\u5b9e\u4e16\u754c\u4f5c\u4e3a\u5e95\u56fe"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"realworld",src:l(6336).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u5c3d\u7ba1\u5bf9\u4e8e\u5143\u5b87\u5b99\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u4efb\u610f\u7684\u865a\u62df\u4e16\u754c\uff0c\u4f46\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u81f3\u5c11\u6709\u4ee5\u4e0b\u7f3a\u9677\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5c06\u6839\u73b0\u5b9e\u4e16\u754c\u5b8c\u5168\u8131\u8282\uff0c\u8fd9\u79cd\u5272\u88c2\u611f\u4f1a\u975e\u5e38\u5927\uff0c\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u91cc\u9762\u7684\u5185\u5bb9\u5f88\u96be\u8ddf\u73b0\u5b9e\u4e16\u754c\u6709\u4e00\u4e2a\u8054\u7cfb\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u8981\u60f3\u8ba9\u672a\u6765\u76843D\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u8fd9\u4e2a\u865a\u62df\u4e16\u754c\u4e00\u5b9a\u662f\u548c\u73b0\u5b9e\u4e16\u754c\u6709\u5173\u8054\u7684\uff0c\u5426\u5219\u5b83\u5c31\u6446\u8131\u4e0d\u4e86\u7c7b\u4f3c\u6e38\u620f\u7684\u6982\u5ff5\uff0c\u4eba\u4eec\u628a\u5b83\u5f53\u505a\u4e00\u4e2a\u4e13\u95e8\u7684\u5a31\u4e50\u65b9\u5f0f\uff0c\u5076\u5c14\u8fdb\u53bb\u4f53\u9a8c\u4e00\u4e0b\uff0c\u800c\u4e0d\u662f\u65f6\u65f6\u8ddf\u5b83\u4fdd\u6301\u8054\u7cfb\u548c\u8fde\u63a5"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4fc3\u8fdb\u5730\u7406\u4e0a\u9760\u8fd1\u7684\u4eba\u4e4b\u95f4\u8fdb\u884c\u4e92\u52a8\uff0c\u5728\u4e00\u4e2a\u7eaf\u865a\u62df\u4e16\u754c\u4e2d\uff0c\u771f\u5b9e\u7684\u5730\u7406\u4f4d\u7f6e\u5728\u5176\u4e2d\u65e0\u6cd5\u4ea7\u751f\u8f83\u597d\u7684\u5173\u8054\uff0c\u56e0\u6b64\u5b83\u4eec\u7684\u4e92\u52a8\u901a\u5e38\u53ea\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u597d\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\uff0c\u6216\u8005\u8bf4\u901a\u8fc7\u67d0\u4e9b\u6e38\u620f\u5185\u5bb9\u7684\u673a\u5236\u4fc3\u8fdb\u7684\u5177\u6709\u7c7b\u4f3c\u7231\u597d\u548c\u5174\u8da3\u7684\u964c\u751f\u4eba\u4e4b\u95f4\u7684\u4e92\u52a8\u3002\u4f46\u662f\u57ce\u5e02\u4f5c\u4e3a\u4e00\u4e2a\u91cd\u8981\u7684\u6587\u5316\u8f7d\u4f53\u548c\u7b26\u53f7\uff0c\u5b83\u672c\u8eab\u4e5f\u662f\u5177\u6709\u4e30\u5bcc\u7684\u4fe1\u606f\u5728\u91cc\u9762\u7684\uff0c\u800c\u4e14\u4eba\u4e0e\u57ce\u5e02\u4e4b\u95f4\u7684\u5173\u7cfb\u662f\u73b0\u4ee3\u6587\u660e\u4e2d\u4eba\u7c7b\u4e0d\u53ef\u5ffd\u89c6\u7684\u91cd\u8981\u4f53\u9a8c\uff0c",(0,n.kt)("strong",{parentName:"li"},"\u6240\u4ee5\u600e\u6837\u5229\u7528\u597d\u8fd9\u79cd\u771f\u5b9e\u4e16\u754c\u7684\u5730\u7406\u5173\u7cfb\uff0c\u4e5f\u662f\u672a\u6765\u5143\u5b87\u5b99\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6210\u4e00\u90e8\u5206\u7684\u91cd\u8981\u90e8\u5206\u4e4b\u4e00"),"\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5143\u5b87\u5b99\u4f5c\u4e3a\u73b0\u5b9e\u4e16\u754c\u7684\u5ef6\u5c55\uff0c\u5176\u5b9e\u524d\u9762\u4e24\u90e8\u5206\u90fd\u8bf4\u660e\u4e86\uff0c\u771f\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u5173\u8054\u548c\u5173\u7cfb\uff0c\u4f1a\u6210\u4e3a\u672a\u6765\u5143\u5b87\u5b99\u91cd\u8981\u7684\u6838\u5fc3\u673a\u5236\uff0c\u5426\u5219\u5b83\u4e0d\u4ec5\u4f1a\u5bf9\u6211\u4eec\u7684\u751f\u6d3b\u9020\u6210\u5272\u88c2\uff0c\u5e76\u4e14\u5b83\u65e0\u6cd5\u6210\u4e3a\u4eba\u4eec\u65e5\u5e38\u751f\u6d3b\u7684\u4e00\u90e8\u5206\uff0c\u5c31\u50cf\u4eca\u5929\u7684\u6cdb\u5a31\u4e50\u7c7b\u5e94\u7528\u5982\u6296\u97f3\u3001\u5fae\u4fe1\u7b49\u3002\u5e76\u4e14\u4f5c\u4e3a\u672a\u6765\u79d1\u6280\u751f\u6d3b\u91cd\u8981\u7684\u4e00\u9762\uff0c\u6211\u4eec\u5e0c\u671b\u5b83\u8981\u80fd\u591f\u7528\u6765\u63d0\u5347\u4eba\u4eec\u7684\u751f\u6d3b\u54c1\u8d28\uff0c\u8fd9\u5305\u62ec\u4e24\u4e2a\u5c42\u9762\uff1a\u4f7f\u4eba\u4eec\u611f\u5230\u66f4\u52a0\u5feb\u4e50\uff0c\u4ee5\u53ca\u5e2e\u52a9\u4eba\u4eec\u63d0\u4f9b\u66f4\u52a0\u4e30\u5bcc\u7684\u6570\u5b57\u5316\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u5c06\u4ee5\u73b0\u5b9e\u4e16\u754c\u771f\u5b9e\u5730\u56fe\u4e3a\u5e95\u677f\u8fdb\u884c\u6253\u9020\uff0c\u4ee5\u56f4\u7ed5\u73b0\u5b9e\u4e16\u754c\u4e0e\u865a\u62df\u4e16\u754c\u7684\u7d27\u5bc6\u8054\u7cfb\u4e3a\u6838\u5fc3\u8bbe\u8ba1\u539f\u5219\uff0c\u5f00\u53d1\u80fd\u591f\u901a\u8fc7\u5143\u5b87\u5b99\u7684\u4e30\u5bcc\u6570\u5b57\u5316\u673a\u5236\u6765\u63d0\u5347\u4eba\u4eec\u751f\u6d3b\u54c1\u8d28\u7684\u5f00\u653e\u865a\u62df\u4e16\u754c\u3002"),(0,n.kt)("h4",{id:"4211-\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"},"4.2.1.1 \u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054"),(0,n.kt)("p",null,"Reality World\u4e16\u754c\u7684\u5e95\u5ea7\u662f\u771f\u5b9e\u4e16\u754c\u7684\u5e73\u9762\u5730\u56fe\uff0c\u5e76\u4e14\u4fdd\u7559\u57ce\u5e02\u4e3b\u8981\u7684\u9053\u8def\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u505a\u6709\u51e0\u4e2a\u597d\u5904\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u865a\u62df\u4e16\u754c\u8ddf\u771f\u5b9e\u4e16\u754c\u662f\u6709\u5173\u8054\u7684\uff0c\u8fd9\u79cd\u5173\u8054\u4e0d\u4ec5\u662f\u6307\u5730\u7406\u4e0a\u7684\u4f4d\u7f6e\u5173\u8054\uff0c\u800c\u662f\u6211\u4eec\u6709\u673a\u4f1a\u53bb\u8868\u8fbe\u8ddf\u4e00\u4e2a\u57ce\u5e02\u76f8\u5173\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u5f53\u524d\u57ce\u5e02\u7684\u67d0\u4e9b\u6307\u6570\uff0c\u57ce\u5e02\u7684\u4e00\u4e9b\u6587\u5316\u98ce\u8c8c\uff0c\u53ef\u4ee5\u62bd\u8c61\u6210\u67d0\u79cd\u6e38\u620f\u673a\u5236\uff0c\u8fd9\u6837\u540c\u4e00\u4e2a\u57ce\u5e02\u4e2d\u7684\u5e02\u6c11\u90fd\u53ef\u4ee5\u611f\u53d7\u5230\u7c7b\u4f3c\u7684\u4e0e\u8be5\u5ea7\u57ce\u5e02\u72ec\u6709\u7684\u4f53\u9a8c\u3002\u8fd9\u4e9b\u4f53\u9a8c\u5f80\u5f80\u90fd\u662f\u5173\u4e8e\u73b0\u5b9e\u7684\u4fe1\u606f\uff0c\u5b83\u5305\u542b\u4eba\u4e0e\u57ce\u5e02\u548c\u5468\u56f4\u73af\u5883\u548c\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u6240\u4ee5\u8fd9\u79cd\u673a\u5236\u5f62\u6210\u4e86\u5bf9\u73b0\u5b9e\u7684\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u6700\u91cd\u8981\u7684\u662f\u5173\u7cfb\uff0c\u5730\u7406\u4f4d\u7f6e\u662f\u4e00\u79cd\u91cd\u8981\u7684\u5173\u7cfb\uff0c\u5b83\u4e0d\u4ec5\u4ec5\u662f\u4f4d\u7f6e\u7684\u5173\u7cfb\uff0c\u5b83\u662f\u4e00\u79cd\u628a\u5927\u5bb6\u62c9\u5728\u4e00\u8d77\uff0c\u8fd9\u91cc\u7684\u4eba\u90fd\u6709\u5171\u540c\u7684\u4e00\u4e9b\u8ba4\u77e5\u7684\u5173\u7cfb\u3002\u6240\u4ee5\u5730\u7406\u4f4d\u7f6e\u5b9e\u9645\u4e0a\u9690\u85cf\u7740\u5f88\u591a\u4fe1\u606f\uff0c\u662f\u975e\u5e38\u91cd\u8981\u7684\u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u4e0e\u771f\u5b9e\u4e16\u754c\u4e0d\u4e00\u6837\uff0c\u771f\u5b9e\u4e16\u754c\u7684\u5916\u89c2\u548c\u7ec6\u8282\u5728\u865a\u62df\u4e16\u754c\u4e2d\u4e0d\u662f\u6700\u91cd\u8981\u7684\uff0c\u4eba\u4eec\u5e0c\u671b\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u4e16\u754c\uff0c\u4eba\u4eec\u5e0c\u671b\u80fd\u591f\u6539\u53d8\u73b0\u5b9e\u4e16\u754c\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\uff0c\u4eba\u4eec\u6709\u53ef\u80fd\u521b\u9020\u51fa\u4e00\u4e2a\u4e0d\u4e00\u6837\u7684\u865a\u62df\u4e16\u754c\uff0c\u8fd9\u4e2a\u4e16\u754c\u4ee3\u8868\u7740\u4eba\u4eec\u671f\u671b\u3001\u5411\u5f80\u548c\u60f3\u8c61\u4e2d\u7684\u4e00\u4e2a\u4e16\u754c\u3002\u4e5f\u4ee3\u8868\u7740\u4eba\u4eec\u5bf9\u73b0\u5b9e\u4e16\u754c\u4ee5\u53ca\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u601d\u8003\u3002"),(0,n.kt)("p",null,"\u4e0d\u8fc7\uff0c\u4e0e\u865a\u62df\u4e16\u754c\u4e2d\u7684\u5efa\u7b51\u7269\u7b49\u5916\u89c2\u4e0d\u4e00\u6837\u7c7b\u4f3c\uff0c\u5c3d\u7ba1\u5730\u9762\u7684\u9053\u8def\u4f4d\u7f6e\u662f\u4fdd\u7559\u7684\uff0c\u4f46\u662f\u9053\u8def\u7684\u540d\u79f0\u662f\u53ef\u4ee5\u66f4\u6539\u7684\u3002\u8fd9\u662f\u4e16\u754c\u7684\u9053\u8def\u7ed3\u6784\u53ca\u5176\u89c6\u89c9\u4f4d\u7f6e\u80fd\u591f\u5e2e\u52a9\u4eba\u4eec\u5728\u865a\u62df\u4e16\u754c\u66f4\u597d\u5730\u5bfc\u822a\uff0c\u6240\u4ee5\u5373\u4fbf\u8fd9\u4e9b\u9053\u8def\u7684\u540d\u5b57\u88ab\u4fee\u6539\u4e86\uff0c\u4eba\u4eec\u4ecd\u7136\u80fd\u591f\u5f88\u597d\u5730\u5173\u8054\u5b83\u4eec\u3002\u4f46\u662f\u5982\u679c\u8fd9\u662f\u4e00\u4e2a\u7eaf\u865a\u62df\u800c\u5de8\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u4eba\u4eec\u5219\u5f88\u96be\u8bb0\u4f4f\u90a3\u4e48\u591a\u7684\u5730\u5740\u540d\u79f0\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u5143\u5b87\u5b99\u4e16\u754c\u5c06\u80fd\u591f\u63d0\u5347\u4eba\u4eec\u73b0\u5b9e\u751f\u6d3b\u7684\u751f\u6d3b\u54c1\u8d28\u3002"),(0,n.kt)("h4",{id:"4212-\u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"},"4.2.1.2 \u771f\u5b9e\u5730\u7406\u7684\u610f\u4e49"),(0,n.kt)("p",null,"\u5730\u7406\u4e0d\u4ec5\u4ec5\u662f\u5730\u56fe\u4e0a\u7684\u4f4d\u7f6e\uff0c\u5b83\u8574\u85cf\u7740\u5f88\u591a\u610f\u4e49\uff0c\u51e0\u4e4e\u53ef\u4ee5\u8bf4\u8ddf\u6211\u4eec\u5927\u90e8\u5206\u7684\u65e5\u5e38\u751f\u6d3b\uff0c\u4ee5\u53ca\u65e5\u5e38\u751f\u6d3b\u4e4b\u5916\u66f4\u91cd\u8981\u7684\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\u5c42\u9762\uff0c\u8fd9\u4e9b\u4fe1\u606f\u66f4\u52a0\u91cd\u8981\uff0c\u5b83\u5173\u4e4e\u4eba\u7684\u60c5\u611f\u3001\u60c5\u7eea\u3001\u5bf9\u751f\u6d3b\u7684\u4f53\u9a8c\u548c\u54c1\u8d28\u7b49\u3002"),(0,n.kt)("p",null,"\u771f\u5b9e\u4e16\u754c\u662f\u5173\u4e8e\u5927\u5bb6\u901a\u8fc7\u4e00\u5b9a\u76f8\u90bb\u7684\u5730\u7406\u4f4d\u7f6e\u5f7c\u6b64\u805a\u5728\u4e00\u8d77\uff0c\u7136\u540e\u56e0\u6b64\u800c\u5171\u540c\u5173\u5fc3\u548c\u5173\u6ce8\u67d0\u4e9b\u76f8\u540c\u7684\u4e8b\u60c5\uff0c\u8fdb\u800c\u5f62\u6210\u67d0\u4e9b\u76f8\u5173\u8054\u7684\u5173\u7cfb\u3001\u4fe1\u7528\u3001\u4e16\u754c\u89c2\u3001\u6587\u5316\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1\u6709\u65f6\u5019\u6211\u4eec\u8ddf\u5468\u56f4\u7684\u4eba\u5e76\u4e0d\u76f4\u63a5\u8ba4\u8bc6\uff0c\u4f46\u662f\u6211\u4eec\u8ddf\u4ed6\u4eec\u4e4b\u95f4\u4ecd\u7136\u6f5c\u85cf\u8fd9\u67d0\u4e9b\u8054\u7cfb\uff0c\u8fd9\u4e9b\u8054\u7cfb\u5e76\u4e0d\u4e00\u5b9a\u662f\u663e\u5f0f\u53ef\u89c1\u7684\uff0c\u4f46\u662f\u5b83\u4eec\u5374\u662f\u5ba2\u89c2\u5b58\u5728\u7684\u3002\u7136\u800c\u5bf9\u4e8e\u8fdc\u5728\u4e00\u4e2a\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u7684\u5730\u65b9\uff0c\u6240\u6709\u8fd9\u4e9b\u8054\u7cfb\u90fd\u4e0d\u5b58\u5728\uff0c\u6216\u8005\u8bf4\u5f88\u5f31\u3002\u6bd4\u5982\u8bf4\u5bf9\u4e8e\u6240\u6709\u4e2d\u56fd\u4eba\uff0c\u6211\u4eec\u4e4b\u95f4\u4ecd\u7136\u5b58\u5728\u4e00\u4e9b\u8054\u7cfb\u548c\u5173\u7cfb\uff0c\u4f46\u662f\u5bf9\u4e8e\u5927\u90e8\u5206\u4eba\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f88\u5f31\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0c\u5730\u7406\u4fe1\u606f\u751a\u81f3\u662f\u6bd4\u4eb2\u60c5\u66f4\u91cd\u8981\u7684\u610f\u4e49\uff0c\u4eb2\u60c5\u4e4b\u95f4\u7684\u8054\u7cfb\u53cd\u800c\u662f\u6bd4\u8f83\u7b80\u5355\u7684\uff0c\u6211\u4eec\u5927\u90e8\u5206\u7684\u60c5\u611f\u548c\u7cbe\u529b\u4e5f\u8bb8\u4f1a\u66f4\u591a\u82b1\u5728\u8fd9\u79cd\u57fa\u4e8e\u5730\u7406\u4f4d\u7f6e\u4fe1\u606f\u4e0a\u3002\u5f53\u7136\u6211\u4eec\u628a\u540c\u4e8b\u7b49\u5173\u7cfb\u4e5f\u5f52\u7ed3\u5230\u5730\u7406\u4fe1\u606f\u76f8\u5173\uff0c\u4f8b\u5982\u6211\u4eec\u8ddf\u53e6\u4e00\u4e2a\u57ce\u5e02\u7684\u540c\u4e8b\u5f80\u5f80\u6ca1\u6709\u672c\u5730\u540c\u4e8b\u4e4b\u95f4\u5173\u7cfb\u90a3\u4e48\u7d27\u5bc6\u3002\u540c\u6837\u7684\uff0c\u672c\u5730\u540c\u5b66\u4e4b\u95f4\u901a\u5e38\u4e5f\u8981\u6bd4\u5176\u4ed6\u57ce\u5e02\u7684\u540c\u5b66\u4e4b\u95f4\u5173\u7cfb\u7d27\u5bc6\uff0c\u56e0\u4e3a\u4ed6\u4eec\u4e4b\u95f4\u66f4\u6709\u53ef\u80fd\u4f1a\u6709\u66f4\u591a\u7684\u8054\u7cfb\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5143\u5b87\u5b99\u600e\u6837\u8868\u8fbe\u8fd9\u4e9b\u610f\u4e49\u5462"),"\uff1f"),(0,n.kt)("p",null,"\u5730\u7406\u4fe1\u606f\uff0c\u6216\u8005\u8bf4\u4eba\u4e0e\u793e\u4f1a\u7684\u5173\u7cfb\uff0c\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u4fe1\u606f\uff0c\u53c2\u89c1\u7b2c4.10.1\u8282\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5f88\u96be\u7528\u4f20\u7edf\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u6709\u65f6\u5019\u751a\u81f3\u4e5f\u5f88\u96be\u4f7f\u7528\u7535\u5f71\u6216\u8005\u5c0f\u8bf4\u8fd9\u79cd\u53d9\u4e8b\u7684\u65b9\u5f0f\u8fdb\u884c\u8868\u8fbe\u3002\u7531\u7b2c4.10.3\u8282\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u79cd\u4fe1\u606f\u7c7b\u578b\u6700\u597d\u7684\u8868\u8fbe\u7684\u65b9\u5f0f\u662f\u80fd\u591f\u6a21\u62df\u590d\u6742\u7cfb\u7edf\u673a\u5236\u7684\u6e38\u620f\u7a0b\u5e8f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u5728Reality World\u4e2d\uff0c\u53ea\u8981\u6211\u4eec\u63d0\u4f9b\u8db3\u591f\u597d\u7684\u5e73\u53f0\u6280\u672f\uff0c\u8ba9\u666e\u901a\u5927\u4f17\u80fd\u591f\u8868\u8fbe\u81ea\u5df1\u7684\u673a\u5236\uff0c\u5c31\u80fd\u591f\u91ca\u653e\u8fd9\u79cd\u80fd\u529b\uff0c\u56e0\u4e3a\u5927\u4f17\u4e0d\u540c\u7684\u4eba\u80fd\u591f\u62bd\u8c61\u63d0\u70bc\u51fa\u8fd9\u79cd\u5173\u7cfb\u3002\u4ece\u800c\u5f62\u6210\u5173\u4e8e\u8fd9\u4e9b\u5173\u7cfb\u7684\u8868\u8fbe\u3002"),(0,n.kt)("h4",{id:"4213-\u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"},"4.2.1.3 \u4f5c\u4e3a\u5de8\u5927\u865a\u62df\u4e16\u754c\u7684\u5730\u56fe"),(0,n.kt)("p",null,"\u53c2\u89c14.2.3\u8282\u4f20\u9001\u95e8"),(0,n.kt)("h3",{id:"422-\u4f20\u9001\u95e8"},"4.2.2 \u4f20\u9001\u95e8"),(0,n.kt)("p",null,"\u7531\u4e8e\u5730\u56fe\u7684\u9650\u5236\uff0c\u4ee5\u53ca\u590d\u6742\u5ea6\u7684\u63a7\u5236\uff0c\u5b9a\u4e49\u4e00\u4e9b\u6807\u51c6\u7684\u4f20\u9001\u95e8\u673a\u5236\uff0c\u70b9\u51fb\u53ef\u4ee5\u8fdb\u5165\u79c1\u6709\u7684Creation"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u7ba1\u662fReality World\u4e2d\u7684\u5185\u5bb9"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u4e2a\u4eba\u72ec\u7acb\u7684Creation")),(0,n.kt)("p",null,"\u8fd9\u6837Reality World\u66f4\u50cf\u662f\u4e00\u4e2a\u591a\u91cd\u865a\u62df\u4e16\u754c\u7684\u5165\u53e3\uff0c\u4ed6\u53ef\u4ee5\u53bb\u5230\u5f88\u591a\u4e0d\u540c\u7684\u865a\u62df\u4e16\u754c\uff0c\u6bcf\u4e2a\u72ec\u7acb\u865a\u62df\u4e16\u754c\u5177\u6709\u66f4\u4e0d\u4e00\u6837\u7684\u4f53\u9a8c\uff0c\u6bd4\u5982\u5728\u5b89\u5168\u65b9\u9762\u6ca1\u6709\u66f4\u591a\u7684\u9650\u5236\uff0c\u6bd4\u5982\u53ef\u4ee5\u4f7f\u7528\u66b4\u529b\uff0c\u6709\u574f\u4eba\uff0c\u5bb9\u6613\u906d\u5230\u653b\u51fb\u7b49\u7b49\u3002\u8fd9\u4e9b\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u662f\u4e00\u4e2a\u5e7f\u544a\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u4e00\u4e2a\u72ec\u7acb\u7684\u6e38\u620f\uff0c\u4e00\u4e2a\u5176\u4ed6\u4e92\u52a8\u5185\u5bb9\u7b49\u7b49\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"virtual-and-reality",src:l(3482).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7531\u4e8eReality World\u4e3b\u8981\u662f\u57fa\u4e8e\u73b0\u5b9e\u5730\u677f\uff0c\u56e0\u6b64\u5f62\u6210\u4e00\u79cd\u865a\u62df\u4e0e\u73b0\u5b9e\u7ed3\u5408\u7684\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"423-point-and-click"},"4.2.3 Point and Click"),(0,n.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u64cd\u63a7\uff0c\u53ef\u4ee5\u4f7f\u7528Point and Click\u6a21\u5f0f\u4e3a\u9ed8\u8ba4\u4e3b\u6a21\u5f0f\u3002"),(0,n.kt)("h2",{id:"43-\u6e90\u52a8\u529b"},"4.3 \u6e90\u52a8\u529b"),(0,n.kt)("h3",{id:"431-\u7528\u6237\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"},"4.3.1 \u7528\u6237\uff1a\u521b\u4f5c\u548c\u4f53\u9a8c\u81ea\u7531\u5ea6"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5176\u4ed6\u5927\u4e16\u754c\uff0c\u56fa\u5b9a\u7684\u6a21\u5f0f\uff0c\u6a21\u677f\uff0c\u7528\u6237\u5b8c\u5168\u53ef\u4ee5\u81ea\u5b9a\u4e49\u81ea\u5df1\u6240\u5c5e\u7684\u4efb\u4f55\u4e1c\u897f\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u521b\u4f5c\u7684\u5efa\u7b51\u53ef\u4ee5\u6709\u5b8c\u5168\u4e0d\u540c\u7684\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u81ea\u5df1\u7684Avatar\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e0d\u540c\u7684\u884c\u4e3a")),(0,n.kt)("p",null,"\u603b\u4e4b\uff0c\u8fd9\u79cd\u81ea\u7531\u6027\u4ea7\u751f\u4e86\u4e24\u4e2a\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63a7\u5236\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4f53\u9a8c\uff0c\u81ea\u5df1\u8bbe\u8ba1\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u4e16\u754c\u7684\u4f53\u9a8c\u4f1a\u66f4\u52a0\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u53ef\u9884\u671f\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e2a\u7528\u6237\u5c55\u793a\u7ed9\u5176\u4ed6\u73a9\u5bb6\u7684\u5185\u5bb9\u4e5f\u662f\u4e30\u5bcc\uff0c\u800c\u4e0d\u662f\u56fa\u5b9a\u7684\u6a21\u677f")),(0,n.kt)("h3",{id:"432-\u5f00\u53d1\u8005\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"},"4.3.2 \u5f00\u53d1\u8005\uff1a\u66f4\u6d3b\u8dc3\u7684\u7ecf\u6d4e\u5e02\u573a"),(0,n.kt)("p",null,"\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e2a\u66f4\u63a5\u8fd1\u771f\u5b9e\u793e\u4f1a\u7684\u7ecf\u6d4e\u7cfb\u7edf\u548c\u673a\u5236\uff0c\u4f7f\u5f97Reality World\u91cc\u9762\u7684\u7ecf\u6d4e\u751f\u4ea7\u80fd\u591f\u6839\u636e\u5e02\u573a\u884c\u4e3a\uff0c\u4f7f\u4f18\u79c0\u7684\u5185\u5bb9\u66f4\u52a0\u83b7\u76ca\uff0c\u4ece\u800c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u66f4\u52a0\u6d3b\u8dc3\u548c\u7e41\u8363\uff0c\u6765\u4e3a\u4e0d\u540c\u7684\u7528\u6237\u521b\u9020\u4ef7\u503c\u3002"),(0,n.kt)("h4",{id:"4321-\u6301\u7eed\u7ecf\u6d4e"},"4.3.2.1 \u6301\u7eed\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u5e02\u573a\uff0c\u6784\u5efa\u6301\u7eed\u6d88\u8d39\u7684\u7ecf\u6d4e\u4f53\u5236\u6765\u662f\u5f00\u53d1\u8005\u83b7\u76ca\u66f4\u591a\uff0c\u5e76\u4e14\u53ef\u4ee5\u6301\u7eed\u83b7\u76ca\u3002\u53c2\u89c11.4.5\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h4",{id:"4322-\u5e7f\u544a\u5185\u5bb9"},"4.3.2.2 \u5e7f\u544a\u5185\u5bb9"),(0,n.kt)("p",null,"\u901a\u8fc7\u63d0\u4f9b\u72ec\u7279\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u5e7f\u544a\u8bed\u4ea7\u54c1\u878d\u4e3a\u4e00\u4f53\uff0c\u63d0\u5347\u5e7f\u544a\u7684\u6548\u679c\uff0c\u4ece\u800c\u63d0\u9ad8\u9500\u552e\u6570\u91cf\u3002\u89c11.4.2\u8282\u5185\u5bb9\u3002"),(0,n.kt)("h3",{id:"433-\u6807\u51c6\u4f5c\u8005\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"},"4.3.3 \u6807\u51c6\u4f5c\u8005\uff1a\u9ad8\u7ea7\u62bd\u8c61\u80fd\u529b\u7684\u5de8\u5927\u6536\u76ca"),(0,n.kt)("p",null,"\u6807\u51c6\u4f5c\u8005\u662fReality World\u91cc\u9762\u6700\u5177\u4ef7\u503c\u7684\u7528\u6237\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TA\u5177\u6709\u5bf9\u73b0\u5b9e\u4e16\u754c\u6700\u9ad8\u7684\u62bd\u8c61\u548c\u8bbe\u8ba1\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u79cd\u62bd\u8c61\u80fd\u529b\u4f7f\u5f97Reality World\u7684\u4f53\u9a8c\u80fd\u591f\u8fdb\u5316\u5f97\u8d8a\u6765\u8d8a\u597d\uff0c\u5e76\u4e14\u8986\u76d6\u7684\u8303\u56f4\u4f1a\u8d8a\u6765\u8d8a\u4e30\u5bcc"),(0,n.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u7ef4\u6301\u8fd9\u79cd\u5229\u76ca\uff0c\u6807\u51c6\u4f5c\u8005\u8fd8\u4f1a\u5f88\u597d\u5730\u7ef4\u62a4\u6807\u51c6\u793e\u533a\u7ec4\u4ef6\u7684\u5f00\u53d1")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5e73\u53f0\u9700\u8981\u7ed9\u6807\u51c6\u4f5c\u8005\u6700\u9ad8\u7684\u7ecf\u6d4e\u5229\u76ca\uff0c\u53ea\u6709TA\u4eec\u624d\u4f1a\u4f7f\u6574\u4e2a\u5e73\u53f0\u8d8a\u6765\u8d8a\u5065\u5eb7\u3002"),(0,n.kt)("h2",{id:"44-\u5b89\u5168\u548c\u6240\u6709\u6743"},"4.4 \u5b89\u5168\u548c\u6240\u6709\u6743"),(0,n.kt)("p",null,"USD\u7684\u597d\u5904\u5728\u4e8e\uff0c\u53ef\u4ee5\u628a\u6bcf\u4e2a\u7528\u6237\u81ea\u5df1\u521b\u4f5c\u7684Creation\u4fdd\u5b58\u4e3a\u72ec\u7acb\u7684\u6587\u4ef6\uff0c\u8fd9\u6837\u65b9\u4fbf\u72ec\u7acb\u7684\u7f16\u8f91\u3001\u66f4\u65b0\u751a\u81f3\u5220\u9664\uff1b\u7136\u540e\u53c8\u53ef\u4ee5\u628a\u6240\u6709\u7528\u6237\u7684\u5185\u5bb9\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u5b83\u4eec\u7684\u76f8\u5bf9\u5750\u6807\u4f4d\u7f6e\u7b49\u4fe1\u606f\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u6837\u4e00\u4e2a\u5927\u4e16\u754c\u4e2d\uff0c\u6743\u9650\u6709\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u662f\u5bf9\u4e8e\u5355\u4e2a\u7528\u6237\u81ea\u5df1\u7684Creation\uff0c\u5176\u4e2d\u7684\u7ec4\u4ef6\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u5f00\u53d1\u8005\uff0c\u8fd9\u4e9b\u4e0d\u540c\u7684\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u80fd\u9700\u8981\u901a\u4fe1"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u79cd\u662f\u5f53\u5c06\u6240\u6709\u7528\u6237\u7684Creation\u5408\u6210\u5230\u4e00\u4e2a\u573a\u666f\u4e2d\uff0c\u5b83\u4eec\u53ef\u80fd\u4f7f\u7528\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u8fd9\u65f6\u5019\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u975e\u6cd5\u7684\u8bbf\u95ee")),(0,n.kt)("p",null,"\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u6765\u8bf4\uff0c\u6211\u4eec\u771f\u6b63\u5e94\u8be5\u5173\u5fc3\u7684\u662f\u540e\u8005\u3002\u5373\u662f\u8bf4\uff0c\u5bf9\u4e8e\u524d\u8005\u6765\u8bb2\uff0c\u5c3d\u7ba1\u7528\u6237\u4f7f\u7528\u4e86\u591a\u4e2a\u5f00\u53d1\u8005\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u4f46\u662f\u5bf9\u4e8e\u7528\u6237\u6765\u8bb2\uff0c\u6700\u7ec8\u7684Creation\u90fd\u662f\u4ed6\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u4fdd\u8bc1\u7684\u662f\u6240\u6709\u7ec4\u4ef6\u7ec4\u5408\u5728\u4e00\u8d77\u662f\u5426\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\uff0c\u800c\u4e0d\u662f\u53bb\u5206\u914d\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8bbf\u95ee\u6743\u9650\uff1a\u4e00\u662f\u672c\u8d28\u4e0a\u7ec4\u4ef6\u8bbf\u95ee\u7684\u90fd\u662f\u4ed6\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e8c\u662f\u8fd9\u6837\u7684\u5173\u5fc3\u6d89\u53ca\u5230\u4e86\u4ee3\u7801\u7684\u7ec4\u7ec7\u548c\u5f00\u53d1\u903b\u8f91\uff0c\u8fd9\u4e0d\u662f\u7528\u6237\u5e94\u8be5\u5173\u5fc3\u7684\u3002\u4f46\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u786e\u5b9e\u4f1a\u5b58\u5728\u6709\u4e9b\u6076\u610f\u7ec4\u4ef6\u7834\u8bdd\u6570\u636e\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u5e94\u8be5\u5c0f\u5fc3\u5ba1\u6838\u7ec4\u4ef6\uff0c\u5e76\u4e14\u4f9d\u9760\u4e3e\u62a5\u7b49\u65b9\u5f0f\u76d1\u7ba1\u3002\u8fd9\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u76d1\u7ba1\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\uff0c\u4ed6\u5e94\u8be5\u8ba4\u4e3a\u4ed6\u4f7f\u7528\u7684\u7ec4\u4ef6\u5e94\u8be5\u90fd\u662f\u5b89\u5168\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u67d0\u4e2a\u5c5e\u6027\u7684\u4fee\u6539\u8d85\u51fa\u4e86\u7528\u6237\u7684\u9884\u671f\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u5e0c\u671b\u53ea\u8bfb\uff0c\u4f46\u662f\u8be5\u7ec4\u4ef6\u786e\u5b9e\u8bfb\u548c\u5199\u3002\u8fd9\u6837\u7684\u60c5\u51b5\u4e5f\u5e94\u8be5\u662f\u6b63\u5e38\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u5bf9\u53d8\u91cf\u7684\u8bbf\u95ee\u6743\u9650\u672c\u8eab\u662f\u5305\u542b\u5728\u7ec4\u4ef6\u7684\u903b\u8f91\u4e4b\u4e2d\u7684\u3002\u5982\u679c\u7528\u6237\u8ba4\u4e3a\u8fd9\u79cd\u6743\u9650\u8d8a\u754c\u4e86\uff0c\u7528\u6237\u5e94\u8be5\u9009\u62e9\u4f7f\u7528\u5176\u4ed6\u7ec4\u4ef6\uff0c\u6216\u8005\u4fee\u6539\u7ec4\u4ef6\u3002\u56e0\u4e3a\u76f4\u63a5\u4fee\u6539\u5c5e\u6027\u4e0d\u8ba9\u5176\u8bbf\u95ee\uff0c\u8fd9\u53ef\u80fd\u7834\u574f\u4e86\u7ec4\u4ef6\u672c\u8eab\u7684\u610f\u56fe\uff0c\u4f7f\u5f97\u5176\u7ec4\u4ef6\u7684\u529f\u80fd\u5b8c\u5168\u4e0d\u751f\u6548\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5readonly\u6216readwrite\u6743\u9650\u6807\u5fd7\u5e94\u8be5\u662f\u7528\u6765\u5904\u7406Reality World\u8fd9\u79cd\u591aCreation\u5171\u4eab\u7684\u573a\u666f\uff0c\u5373\u6211\u4eec\u7684\u6570\u636e\u80fd\u591f\u88ab\u4e0d\u8ba4\u8bc6\u7684\u4eba\u600e\u4e48\u8bbf\u95ee\u3002\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5b58\u5728\u4e00\u4e0b\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9\u5355\u4e2a\u53d8\u91cf\u8fdb\u884c\u58f0\u660e\u4f1a\u663e\u5f97\u975e\u5e38\u590d\u6742\uff0c\u6240\u6709\u5b9e\u4f53\u7684\u6240\u6709\u53d8\u91cf\u53ef\u80fd\u4f1a\u591a\u8fbe\u51e0\u767e\u4e2a"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u5bf9Creation\u65e2\u8fdb\u884c\u8bbe\u7f6e\u53c8\u4f1a\u5bfc\u81f4\u5927\u90e8\u5206\u5171\u4eab\u4ea4\u4e92\u7684\u673a\u5236\u5efa\u7acb\u4e0d\u8d77\u6765\uff0c\u56e0\u4e3a\u7528\u6237\u503e\u5411\u4e8e\u628a\u6240\u6709\u6570\u636e\u8bbe\u4e3a\u79c1\u6709\uff0c\u8fd9\u4f7f\u5f97\u57fa\u672c\u4e0a\u65e0\u6cd5\u4e0e\u5916\u754c\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u8bf8\u5982RenderComponent\u8fd9\u79cd\u6570\u636e\uff0c\u7528\u6237\u662f\u4e0d\u53ef\u4ee5\u8bbe\u7f6e\u6743\u9650\u7684\uff0c\u4e0d\u8fc7\u8fd9\u79cd\u60c5\u51b5\u7531\u7cfb\u7edf\u51b3\u5b9a\u5c31\u597d\u4e86\uff0c\u4f8b\u5982\u7cfb\u7edf\u4e0d\u8ba9\u7f16\u8f91\u8fd9\u90e8\u5206\u5c5e\u6027\uff0c\u4f8b\u5982\u7269\u7406\u548c\u53ef\u89c6\u76f8\u5173\u7684\u5c5e\u6027\u57fa\u672c\u4e0a\u90fd\u5c5e\u4e8e\u8fd9\u79cd\u5c5e\u6027")),(0,n.kt)("p",null,"\u7528\u6237\u8fd8\u662f\u5e94\u8be5\u5bf9\u6bcf\u4e2a\u5b9e\u4f53\u7684\u6bcf\u4e2a\u53d8\u91cf\u7ba1\u7406\u8fd9\u79cd\u6743\u9650\uff0c\u7531\u7f16\u8f91\u5668\u6216\u8005\u7cfb\u7edf\u52a8\u6001\u5c06\u6240\u6709\u516c\u5171\u7684\u7b26\u53f7\u53d8\u91cf\u603b\u7ed3\u5230\u4e00\u8d77\uff0c\u5e76\u6309\u7c7b\u522b\u5f62\u6210\u4e00\u4e2a\u5982iOS\u7cfb\u7edf\u4e2dSetting\u7684\u5217\u8868\uff0c\u7531\u7528\u6237\u7edf\u4e00\u8bbe\u7f6e\uff0c\u8fd9\u6837\u5728\u6253\u5305\u7684\u65f6\u5019\u76f4\u63a5\u4fee\u6539\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\uff0c\u8fd9\u6837\u8fd9\u4e9b\u6743\u9650\u8bbe\u7f6e\u5230\u5b9e\u4f53\u7ea7\u522b\u662f\u4e0d\u53ef\u89c1\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u8fd9\u79cdSetting\u8868\u53ea\u5bf9Reality World\u6709\u6548\uff0c\u5982\u679c\u4e0d\u53d1\u5e03\u81f3Reality World\uff0c\u5219\u8fd9\u4e2a\u529f\u80fd\u6839\u672c\u4e0d\u53ef\u89c1\u3002\u4e5f\u5373\u4e0d\u4f1a\u5141\u8bb8\u7b2c\u4e09\u65b9\u5f00\u53d1\u7c7b\u4f3cReality World\u7684\u5e94\u7528--\u5f00\u653e\u4e16\u754c\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u7531\u4e8e\u7b26\u53f7\u8868\u7684\u6982\u5ff5\uff0c\u4e5f\u7b80\u5316\u4e86\u6574\u4e2a\u6743\u9650\u8bbe\u7f6e\u7684\u590d\u6742\u5ea6\uff0c\u5373\u540c\u4e00\u4e2a\u7b26\u53f7\u5373\u4f7f\u6709\u591a\u4e2a\u5b9e\u4f8b\uff0c\u5b83\u7684\u5168\u7cfb\u5747\u8bbe\u7f6e\u4e00\u6b21\uff0c\u907f\u514d\u4e86\u5bf9\u6240\u6709\u5c5e\u6027\u5b9e\u4f8b\u5206\u522b\u8bbe\u7f6e\uff0c\u56e0\u4e3a\u7b26\u53f7\u672c\u8eab\u4e5f\u662f\u5305\u542b\u4e86\u610f\u4e49\u5728\u91cc\u9762\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u968f\u4fbf\u5b9a\u4e49\u7684\u53d8\u91cf\u540d\u5b57\u3002"),(0,n.kt)("h3",{id:"441-realityidcomponent"},"4.4.1 RealityIDComponent"),(0,n.kt)("p",null,"\u6bcf\u4e2aEntity\u90fd\u5e94\u8be5\u5177\u6709RealityID\u8fd9\u4e2a\u5b57\u6bb5\uff0c\u7528\u4e8e\u533a\u5206System\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u77e5\u9053\u6240\u5c5e\u5173\u7cfb"),(0,n.kt)("h3",{id:"442-readonly"},"4.4.2 readonly"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0d\u540c\u7528\u6237\u4e4b\u95f4\u7684\u6743\u9650\u95ee\u9898\uff0c\u5b83\u4eec\u53ea\u80fd\u662freadonly\uff0c\u5373\u7528\u6237\u4e4b\u95f4\u53ea\u80fd\u8bfb\u53d6\u6570\u636e\uff0c\u4e0d\u540c\u5199\u6216\u8005\u4fee\u6539\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5c06System\u5f3a\u5236\u4e0e\u4e00\u4e2aComponent\u5173\u8054\u662f\u6709\u610f\u4e49\u7684\uff0c\u8fd9\u6837System\u662f\u6709\u6240\u6709\u6743\u7684\uff0c\u5b83\u5c5e\u4e8e\u67d0\u4e00\u4e2a\u7279\u5b9a\u7684Entity\uff0c\u800c\u6bcf\u4e2aEntity\u62e5\u6709\u7279\u5b9a\u7684RealityID\uff0c\u56e0\u6b64\u53ef\u4ee5\u4fbf\u4e8e\u63a7\u5236\u3002\u5982\u679cSystem\u662f\u7cfb\u7edf\u72ec\u7acb\u65b9\u6cd5\uff0c\u5c31\u53ea\u80fd\u62ff\u5230Entity\u4e4b\u540e\u624d\u80fd\u51b3\u5b9a\u5176\u6570\u636e\u662f\u5426\u53ef\u7528\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5982\u679c\u6743\u9650\u4e0d\u591f\uff0c\u5219\u4f1a\u9020\u6210\u6d6a\u8d39\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u7cfb\u7edf\u5e94\u8be5\u907f\u514d\u8bfb\u53d6\u6ca1\u6709\u6743\u9650\u7684\u6570\u636e\uff0c\u7531\u4e8eSystem\u4e0e\u5b9e\u4f53\u5173\u8054\uff0c\u5c31\u53ef\u4ee5\u6bd4\u8f83\u6743\u9650\uff0c\u5373\u5bf9\u4e8eRealityID\u4e0d\u7b49\u4e8e\u81ea\u5df1\u7684\u6570\u636e\uff0c\u4e0d\u80fd\u8fdb\u884c\u4fee\u6539\u64cd\u4f5c\uff0c\u5e76\u4e14\u662f\u5426\u53ef\u8bfb\u4e5f\u53d6\u51b3\u4e8e\u7528\u6237\u7684\u8bbe\u7f6e\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u5bf9\u4e8e\u7a0b\u5e8f\u800c\u8a00\uff0c\u6709\u4e09\u79cd\u6743\u9650\uff1a\u5176\u4e2dreadonly\u548creadwrite\u5e94\u8be5\u662fCreation\u5185\u90e8\u7684\u4e8b\u60c5\uff1b\u8fd9\u91cc\u7684readonly\u8fd8\u6709\u5e94\u8be5\u62c6\u5206\u6210RealityID\u5185\u90e8\u548cRealityID\u4e4b\u95f4\uff0c\u6bd4\u5982\u4f7f\u7528share"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"readonly"),(0,n.kt)("li",{parentName:"ul"},"readwrite"),(0,n.kt)("li",{parentName:"ul"},"share")),(0,n.kt)("h3",{id:"443-\u91cd\u65b0\u52a0\u8f7d"},"4.4.3 \u91cd\u65b0\u52a0\u8f7d"),(0,n.kt)("p",null,"\u7531\u4e8e\u7528\u6237\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\u6743\u9650\uff0c\u56e0\u6b64\u5f53\u67d0\u4e2a\u7528\u6237\u4fee\u6539\u4e4b\u540e\uff0c\u5176\u4ed6\u6b63\u5728Reality World\u7684\u5728\u7ebf\u7528\u6237\u5e94\u8be5\u5bf9\u5176\u8fdb\u884c\u91cd\u65b0\u52a0\u8f7d\u3002"),(0,n.kt)("h2",{id:"45-\u7a33\u5b9a\u6027"},"4.5 \u7a33\u5b9a\u6027"),(0,n.kt)("p",null,"\u9700\u8981\u786e\u4fdd\u6bcf\u4e2aCreation\u5728\u63d0\u4ea4\u4e4b\u524d\uff0c\u8fd0\u884c\u65f6\u662f\u7a33\u5b9a\u7684\uff0c\u5426\u5219\u7a0b\u5e8f\u4e2d\u53ea\u8981\u5305\u542b\u8fd9\u4e2aCreation\u5c31\u53ef\u80fd\u5bfc\u81f4\u5d29\u6e83\u3002\u5728Reality World\u8fd9\u79cd\u5b8c\u5168\u5f00\u53d1\u7684\u4e16\u754c\u4e2d\uff0c\u8fd9\u4e2a\u95ee\u9898\u66f4\u662f\u4e25\u91cd\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\uff0c\u6838\u5fc3\u95ee\u9898\u5176\u5b9e\u5f52\u7ed3\u4e3a\u4e00\u4e2a\uff0c\u5373\u7a0b\u5e8f\u7684\u7a33\u5b9a\u6027\uff0c\u6240\u4ee5\u5bf9\u6240\u6709\u7684\u7ec4\u4ef6\u8981\u8fdb\u884c\u5ba1\u6838\uff0c\u4ee5\u51cf\u8f7b\u5bf9\u540e\u9762\u7528\u6237Creation\u7a33\u5b9a\u6027\u7684\u68c0\u67e5\u3002"),(0,n.kt)("p",null,"\u6240\u6709\u9700\u8981\u63d0\u4ea4\u5230Reality World\u7684\u5fc5\u987b\u662f\u7ecf\u8fc7Reality World\u9a8c\u8bc1\u8fc7\u7684\u7ec4\u4ef6\uff0c\u5426\u5219\u65e0\u6cd5\u53d1\u5e03\u81f3Reality World\uff0c\u4f46\u662f\u7528\u6237\u81ea\u5df1\u7684Creation\u5219\u53ef\u4ee5\u4f7f\u7528\u672a\u7ecf\u9a8c\u8bc1\u7684\u7ec4\u4ef6\uff0c\u56e0\u4e3a\u8fd9\u5f71\u54cd\u7684\u7528\u6237\u8303\u56f4\u5f88\u5c0f\uff0c\u7528\u6237\u4e00\u65e6\u53d1\u73b0\u95ee\u9898\u81ea\u5df1\u53bb\u89e3\u51b3\u3002"),(0,n.kt)("h3",{id:"451-reality-verified-components"},"4.5.1 Reality Verified Components"),(0,n.kt)("p",null,"\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u5ba1\u6838\u4e0e\u6d4b\u8bd5\uff0c\u5408\u6cd5\u7684\u7ec4\u4ef6\u624d\u80fd\u88ab\u7528\u6237\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u672a\u7ecf\u5ba1\u6838\u7684\u7ec4\u4ef6\u81ea\u80fd\u7528\u4e8e\u5c0f\u8303\u56f4\u6d4b\u8bd5\u3002"),(0,n.kt)("h3",{id:"452-\u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"},"4.5.2 \u63d0\u524d\u9884\u6d4b\u8fc7\u671f\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u5408\u6cd5\u4f46\u662f\u6bd4\u8f83\u65e7\u7684\u7ec4\u4ef6\uff0c\u53ef\u80fd\u5bfc\u81f4\u8ddf\u6807\u51c6\u4e0d\u518d\u517c\u5bb9\u7b49\u5bfc\u81f4\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u8fc7\u671f\u884c\u4e3a\u8981\u8fdb\u884c\u5224\u65ad\u3002\u4ece\u4e24\u4e2a\u5c42\u9762\u6765\u4fdd\u8bc1\u7a33\u5b9a\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u63d0\u9192\u7528\u6237\u53ca\u65f6\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u672a\u7ecf\u66f4\u65b0\u7684\u4ee3\u7801\uff0c\u7cfb\u7edf\u80fd\u591f\u5728\u52a0\u8f7d\u65f6\u52a8\u6001\u5224\u65ad\uff0c\u7136\u540e\u4e22\u5f03\u4e0e\u6807\u51c6\u4e0d\u517c\u5bb9\u7684\u4ee3\u7801")),(0,n.kt)("p",null,"\u901a\u8fc7\u4ee5\u4e0a\u7684\u673a\u5236\uff0c\u80fd\u591f\u4fdd\u8bc1\u6574\u4e2aReality World\u7684\u7a33\u5b9a\u6027\u3002\u8fd9\u5bf9\u4e8e\u4e00\u4e2a\u5927\u7684\u52a8\u6001\u66f4\u65b0\u7684\u4e16\u754c\u81f3\u5173\u91cd\u8981\u3002\u56e0\u4e3a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u65b9\u9762\u53c8\u4e0d\u80fd\u9650\u5236\u5f00\u53d1\u8005\u81ea\u7531\u63d0\u4ea4\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u4e0d\u5177\u5907\u5f00\u653e\u6027\uff0c\u4f46\u662f\u8fd9\u5c31\u5bb9\u6613\u5bfc\u81f4\u4e0d\u7a33\u5b9a\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u4e00\u65b9\u9762\u5fc5\u987b\u4fdd\u8bc1\u6574\u4e2a\u7cfb\u7edf\u7684\u66f4\u65b0\u673a\u5236\uff0c\u56e0\u4e3a\u7ef4\u62a4\u592a\u591a\u8fc7\u671f\u7684\u7ec4\u4ef6\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7cfb\u7edf\u6765\u8bf4\u6210\u672c\u975e\u5e38\u9ad8\uff0c\u5fc5\u987b\u4fc3\u8fdb\u7cfb\u7edf\u5feb\u901f\u66f4\u65b0")),(0,n.kt)("h2",{id:"46-\u7ecf\u6d4e\u4e0e\u4ea4\u6613"},"4.6 \u7ecf\u6d4e\u4e0e\u4ea4\u6613"),(0,n.kt)("p",null,"\u7531\u4e8e\u5b89\u5168\u6027\u7684\u539f\u56e0\uff0c\u6240\u6709\u4e24\u4e2a\u7528\u6237\u4e4b\u95f4\u7684\u4ea4\u6613\uff0c\u90fd\u9700\u8981\u8c03\u7528\u4e00\u4e9b\u7279\u6b8a\u7684\u7cfb\u7edfAPI\uff0c\u8fd9\u4e9bAPI\u4e0d\u5e94\u8be5\u7279\u5b9a\u4e8eReality World\uff0c\u800c\u662f\u6240\u6709Creation\u4e2d\u6d89\u53ca\u6d88\u8d39\u7684\u90fd\u53ef\u4ee5\uff0c\u56e0\u4e3a\u672c\u8d28\u4e0a\u4ea4\u6613\u5c31\u662f\u4e24\u4e2aReality ID\u4e4b\u95f4\u53d1\u751f\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"461-\u53ca\u65f6\u8d2d\u4e70"},"4.6.1 \u53ca\u65f6\u8d2d\u4e70"),(0,n.kt)("p",null,"3D\u7684\u4e1c\u897f\u6ca1\u6cd5\u50cf\u4f20\u7edf\u5546\u54c1\u4e00\u6837\u901a\u8fc7\u56fe\u7247\u7684\u65b9\u5f0f\u6d4f\u89c8\u5c31\u53ef\u4ee5\u83b7\u5f97\u5f88\u597d\u7684\u4e86\u89e3\uff0c\u56e0\u4e3a\u5b83\u662f\u4e00\u79cd\u4f53\u9a8c\uff0c\u89c6\u89c9\u53ea\u662f\u5176\u4e2d\u5f88\u5c0f\u7684\u5143\u7d20\uff0c\u751a\u81f3\u89c6\u9891\u4e5f\u4e0d\u662f\u6700\u597d\u7684\u4e86\u89e3\u65b9\u5f0f"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f20\u7edf\u7684\u5e7f\u544a\uff0c\u6211\u4eec\u901a\u5e38\u4e0d\u80fd\u83b7\u5f97\u592a\u591a\u4f53\u9a8c\u4e0a\u7684\u4fe1\u606f\uff0c\u66f4\u591a\u662f\u5176\u4ed6\u4e00\u4e9b\u975e\u4ea7\u54c1\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u4e00\u79cd\u65b0\u7684\u8d2d\u4e70\u6a21\u5f0f\uff1a\u5f53\u4f60\u5728\u4f53\u9a8c\u4e00\u4e2a\u4e92\u52a8\u5185\u5bb9\u7684\u65f6\u5019\u76f4\u63a5\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u5728\u8bd5\u9a7e\u4e00\u8f86\u8f66\uff0c\u83b7\u5f97\u4e0d\u9519\u7684\u4f53\u9a8c\u4e4b\u540e\u4e00\u952e\u8d2d\u4e70"),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u8ddf\u597d\u53cb\u4e00\u8d77\u73a9\u6e38\u620f\uff0c\u770b\u5230\u597d\u53cb\u4f7f\u7528\u7684\u67d0\u4e2a\u4ea4\u4e92\u5185\u5bb9"),(0,n.kt)("h3",{id:"462-\u667a\u80fd\u8d2d\u4e70"},"4.6.2 \u667a\u80fd\u8d2d\u4e70"),(0,n.kt)("p",null,"\u5728\u7528\u6237\u8bd5\u4f53\u9a8c\u67d0\u4e2a\u5185\u5bb9\u6216\u8005\u770b\u5230\u67d0\u4e2a\u5185\u5bb9\u65f6\u53ef\u4ee5\u7406\u89e3\u8d2d\u4e70\uff0c\u5c31\u50cf\u5728\u5546\u573a\u7684\u8d2d\u4e70\u4f53\u9a8c\u3002"),(0,n.kt)("h3",{id:"463-\u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"},"4.6.3 \u76f4\u63a5\u53d1\u5e03\u800c\u4e0d\u662f\u5e7f\u544a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"You can play the game with. And that was incredibly interesting to see. Um, I think this is going to be the future of this shared 3d entertainment, medium. Um, it's not about Facebook pages, it's not about advertising. It's about actually delivering meaningful experiences that people can interact with. And that become part of this much larger world, right?")," So the programming model for the metaverse must incorporate, uh, the assumption that everybody's on objects, they build should be able to interact sensibly and fit and safely with everybody else's objects, your car, you know, built by Ford should be able to interact with your motorcycle built by Dati."),(0,n.kt)("p",null,"If an architect to be is a major work of architecture in the metaverse, you know, that should work with all the different player models have been introduced into the game and everything should work together. So I think the center, the focus of any programming model, uh, for the metaverse needs to be open world compatibility over time, open interfaces, um, which can evolve and be extended over time."),(0,n.kt)("h4",{id:"4631-\u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"},"4.6.3.1 \u73b0\u5728\u7684\u53ef\u80fd\u505a\u6cd5"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"R-C",src:l(5714).Z,width:"1170",height:"780"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u8fd9\u6837\u7684\u9700\u6c42\uff0c\u73b0\u6709\u53ef\u80fd\u7684\u505a\u6cd5\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u6bcf\u4e2a\u5e7f\u544a\u4ea7\u54c1\uff0c\u5e7f\u544a\u5546\u81ea\u5df1\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5e76\u53d1\u5e03\uff0c\u7531\u4e8e\u5f00\u53d1\u8005\u5177\u6709\u6240\u6709\u7684\u6e90\u4ee3\u7801\uff0c\u6240\u4ee5\u53ef\u4ee5\u4efb\u610f\u4ea4\u4e92"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8981\u5b9e\u73b0\u81ea\u5b9a\u4e49\u590d\u6742\u4ea4\u4e92\uff0c\u6bcf\u4e2a\u5e7f\u544a\u5546\u9700\u8981\u628a\u6e90\u4ee3\u7801\u4ea4\u7ed9\u5e73\u53f0\uff0c\u7531\u5e73\u53f0\u7edf\u4e00\u90e8\u7f72\u53d1\u5e03\uff0c\u5e76\u8981\u6c42\u7528\u6237\u66f4\u65b0"),(0,n.kt)("li",{parentName:"ul"},"\u5e7f\u544a\u53ef\u4ee5\u4f7f\u7528\u6709\u9650\u7684\u4ea4\u4e92\uff0c\u6309\u7167\u4e00\u5b9a\u7684\u6807\u51c6\u5f00\u53d1\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4e0d\u7ecf\u8fc7\u5f00\u53d1\u5546\u81ea\u5b9a\u53d1\u5e03")),(0,n.kt)("p",null,"\u663e\u7136\u8fd9\u4e9b\u90fd\u4e0d\u662f\u6700\u597d\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5RealityIS\u53ef\u4ee5\u521b\u4f5c\u5168\u65b0\u7684\u5546\u4e1a\u6a21\u5f0f\uff0c\u8fd9\u91cc\u4efb\u610f\u5e7f\u544a\u5546\u53ef\u4ee5\u5b8c\u5168\u6309\u7167\u81ea\u5df1\u7684\u8bbe\u8ba1\u5b9a\u4e49\u529f\u80fd\u4e30\u5bcc\u7684\u4ea7\u54c1\uff0c\u7136\u540e\u5728Reality World\u4e2d\u81ea\u7531\u53d1\u5e03\u3002"),(0,n.kt)("h3",{id:"464-\u5e02\u573a\u7ecf\u6d4e"},"4.6.4 \u5e02\u573a\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u5b9e\u9645\u4ef7\u503c\u7531\u4eba\u4eec\u4e3b\u52a8\u53c2\u4e0e\u7ecf\u6d4e\u7684\u884c\u4e3a\u51b3\u5b9a\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u7684\u6295\u7968\u6216\u8005\u5176\u4ed6\u673a\u5236\u51b3\u5b9a\uff0c\u786e\u4fdd\u865a\u62df\u8d27\u5e01\u7684\u6570\u91cf\u662f\u7531\u7ecf\u6d4e\u884c\u4e3a\u51b3\u5b9a\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u9700\u8981\u4e0e\u8fd9\u79cd\u884c\u4e3a\u4ea7\u751f\u76f4\u63a5\u5173\u8054\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5bf9\u4e8eReality World\u7684\u7ecf\u6d4e\u6765\u8bf4\uff0c\u6709\u4e24\u70b9\u662f\u81f3\u5173\u91cd\u8981\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u7ecf\u6d4e\u7684\u4e3b\u8981\u63a8\u52a8\u8005\u662f\u4eba\u4eec\u7684\u4e3b\u52a8\u7ecf\u6d4e\u53c2\u4e0e\u884c\u4e3a"),(0,n.kt)("li",{parentName:"ul"},"\u786e\u4fdd\u865a\u62df\u7ecf\u6d4e\u7684\u8d27\u5e01\u4e0e\u4eba\u4eec\u5b9e\u9645\u611f\u53d7\u5230\u7684\u4ef7\u503c\u76f8\u5173\u8054")),(0,n.kt)("p",null,"Reality World\u901a\u8fc7\u6784\u5efa\u9ad8\u5ea6\u5f00\u653e\u7684\u4e16\u754c\uff0c\u907f\u514d\u4e2d\u592e\u5f0f\u7684\u5e72\u9884\u6765\u5b9e\u73b0\u8fd9\u6837\u7684\u7ecf\u6d4e\u8fd0\u4f5c\u3002\u540c\u65f6\u6807\u51c6\u7684\u53d1\u5e03\u3001\u53cd\u9988\u4ee5\u53ca\u4eba\u4eec\u5b9e\u9645\u4f7f\u7528\u76f8\u5173\u8054\uff0c\u901a\u8fc7\u4eba\u4eec\u7684\u4e3b\u52a8\u9009\u62e9\u6765\u5b9e\u73b0\u4ef7\u503c\u7684\u7b5b\u9009\u4e0e\u4f20\u9012\u3002"),(0,n.kt)("p",null,"\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5f8b\u662f\u76f8\u5bf9\u786e\u5b9a\u4eba\uff0c\u4eba\u4eec\u4e0d\u7ba1\u662f\u5728\u771f\u5b9e\u4e16\u754c\u8fd8\u662f\u865a\u62df\u4e16\u754c\u4e2d\u90fd\u9700\u8981\u6709\u7c7b\u4f3c\u516c\u5e73\u7684\u673a\u5236\u6765\u4fdd\u8bc1\u4eba\u4eec\u7684\u7ecf\u6d4e\u6d3b\u52a8\u53c2\u4e0e\u662f\u6709\u610f\u4e49\u7684\uff0c\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u89c4\u5219\u662f\u4eba\u7c7b\u6570\u5e74\u6765\u79ef\u7d2f\u7684\u6210\u679c\uff0c\u5b83\u4e5f\u662f\u4eba\u4eec\u719f\u6089\u7684\u601d\u7ef4\uff0c\u53ea\u4e0d\u8fc7\u865a\u62df\u4e16\u754c\u53ef\u4ee5\u901a\u8fc7\u6570\u5b57\u6280\u672f\u66f4\u5c11\u4e2d\u592e\u96c6\u6743\u5f0f\u7684\u5e72\u9884\u3002"),(0,n.kt)("p",null,"\u90a3\u65e2\u7136\u662f\u8ddf\u771f\u5b9e\u793e\u4f1a\u4e00\u6837\u7684\u7ecf\u6d4e\u4f53\u9a8c\uff0c\u8fd8\u6709\u4ec0\u4e48\u610f\u4e49\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u865a\u62df\u4e16\u754c\u5462\uff1f\u5c3d\u7ba1\u4e24\u8005\u7684\u7ecf\u6d4e\u4f53\u5236\u76f8\u4f3c\uff0c\u4f46\u662f\u5728\u865a\u62df\u4e16\u754c\u4e2d\u53ef\u4ee5\u521b\u4f5c\u548c\u4f53\u9a8c\u5728\u771f\u5b9e\u4e16\u754c\u65e0\u6cd5\u5b9e\u73b0\u7684\u4e8b\u60c5\u548c\u4f53\u9a8c\uff0c\u8fd9\u5c31\u662f\u865a\u62df\u4e16\u754c\u7684\u4ef7\u503c\uff0c\u800c\u4e14\u8fd9\u79cd\u4ef7\u503c\u901a\u8fc7\u7ecf\u6d4e\u7684\u673a\u5236\u800c\u5f97\u4eba\u4eec\u89c9\u5f97\u4e5f\u662f\u6709\u610f\u4e49\u7684\u3002\u53cd\u4e4b\uff0c\u6ca1\u6709\u4efb\u4f55\u7ecf\u6d4e\u610f\u4e49\u7684\u4e8b\u60c5\u53ef\u80fd\u5c31\u662f\u65e0\u610f\u4e49\u7684\uff0c\u4eba\u4eec\u4f1a\u628a\u5f88\u591a\u4e8b\u60c5\u5f53\u6210\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\uff0c\u5373\u4f7f\u662f\u7cbe\u795e\u4e0a\u7684\u4f53\u9a8c\u4e5f\u53ef\u4ee5\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u4e00\u90e8\u5206\u3002"),(0,n.kt)("p",null,"\u7ecf\u6d4e\u601d\u7ef4\u662f\u4eba\u4eec\u89c9\u5f97\u6240\u6709\u53c2\u4e0e\u4e0e\u4ed8\u51fa\u4f1a\u6709\u610f\u4e49\u7684\u4e00\u79cd\u5fc3\u7406\u57fa\u7840\u3002"),(0,n.kt)("h4",{id:"4641-\u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"},"4.6.4.1 \u5355\u6b21\u8d2d\u4e70\u4e0d\u5177\u5907\u4efb\u4f55\u4ef7\u503c"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5c3d\u7ba1\u7528\u6237\u7684\u7ecf\u6d4e\u8d2d\u4e70\u884c\u4e3a\u4e3a\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u4ea7\u751f\u4ef7\u503c\uff0c\u4f46\u662f\u8fd9\u79cd\u4ef7\u503c\u662f\u4e00\u79cd\u603b\u4f53\u884c\u4e3a\uff0c\u800c\u4e0d\u662f\u7531\u5355\u8bcd\u8d2d\u4e70\u51b3\u5b9a\u7684\u3002"),(0,n.kt)("h3",{id:"465-\u533a\u5757\u94fe"},"4.6.5 \u533a\u5757\u94fe"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u89e3\u51b3\u4e86\u4e24\u4ef6\u4e8b\u60c5\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u901a\u8fc7\u6280\u672f\u624b\u6bb5\u5b9a\u4e49\u4e86\u7269\u6743\uff0c\u5e76\u4e14\u4e00\u65e6\u4f60\u62e5\u6709\u7269\u6743\uff0c\u522b\u4eba\u6ca1\u6cd5\u7be1\u6539\uff0c\u56e0\u4e3a\u6574\u4e2a\u4efb\u4f55\u5bf9\u8be5\u7269\u6743\u7684\u8f6c\u6362\u90fd\u4f1a\u88ab\u8bb0\u5f55\uff0c\u800c\u8fd9\u79cd\u8f6c\u6362\u53ea\u6709\u5728\u6240\u6709\u8005\u540c\u610f\u4e4b\u540e\u624d\u80fd\u88ab\u6267\u884c\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u7684\u8d26\u672c\u673a\u5236\uff0c\u5b9e\u9645\u4e0a\u610f\u5473\u7740\u7269\u54c1\u53ef\u4ee5\u88ab\u4efb\u610f\u8f6c\u6362\u6216\u8005\u8bf4\u4ea4\u6613\uff0c\u8fd9\u5c31\u4e3a\u5546\u54c1\u7684\u81ea\u7531\u4ea4\u6613\u521b\u9020\u4e86\u53ef\u80fd\u3002\u53cd\u89c2\u4f20\u7edf\u7684\u4e2d\u592e\u5f0f\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u4e00\u4ef6\u7269\u54c1\u7684\u4ea4\u6613\u901a\u5e38\u53ea\u53d1\u751f\u4e00\u6b21\uff0c\u4e00\u822c\u5e73\u53f0\u4e0d\u4f1a\u63d0\u4f9b\u8fd9\u79cd\u65e0\u9650\u8f6c\u5356\u7684\u673a\u5236\uff0c\u5373\u4f7f\u63d0\u4f9b\u8fd9\u79cd\u673a\u5236\uff0c\u901a\u5e38\u4e5f\u662f\u8ba4\u4e3a\u4e0d\u53ef\u9760\u7684\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4ea4\u6613\u8d26\u672c\u53ef\u80fd\u88ab\u7be1\u6539\u3002")),(0,n.kt)("p",null,"\u4f46\u672c\u8d28\u4e0a\uff0c\u533a\u5757\u94fe\u53ea\u89e3\u51b3\u5173\u4e8e\u7269\u54c1\u4ea4\u6613\u7684\u8fc7\u7a0b\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u53ea\u662f\u8f85\u52a9\u6027\u7684\uff0c\u4f46\u662f\u5b83\u5e76\u4e0d\u662f\u7ecf\u6d4e\u6d3b\u52a8\u7684\u5168\u90e8\u3002\u4f8b\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u80fd\u5426\u4fdd\u8bc1\u865a\u62df\u8d27\u5e01\u4e0e\u771f\u5b9e\u4ef7\u503c\u7684\u6620\u5c04\u662f\u5426\u5b89\u5168\u53ef\u9760\u7684\u95ee\u9898\uff0c\u8fd9\u53ef\u80fd\u5bfc\u81f4\u4e0a\u5f53\u53d7\u9a97\uff1b"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u6ca1\u6709\u89e3\u51b3\u7269\u54c1\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u600e\u6837\u66f4\u516c\u5e73\u5730\u51b3\u5b9a\u7269\u54c1\u4ef7\u503c\u7684\u673a\u5236\uff1b\u4f8b\u5982\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4eba\u4eec\u7684\u7ecf\u6d4e\u4ea4\u6613\u9664\u4e86\u4ea7\u751f\u7269\u54c1\u4ea4\u6362\uff0c\u8fd9\u79cd\u884c\u4e3a\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7ecf\u6d4e\u4ef7\u503c\uff0c\u6bd4\u5982\u6700\u6838\u5fc3\u7684\u662f\u51b3\u5b9a\u7269\u54c1\u7684\u4ef7\u503c\u3002\u8fd9\u4e9b\u673a\u5236\u8ddf\u533a\u5757\u94fe\u7684\u7406\u5ff5\u90fd\u5dee\u5f88\u8fdc\u3002")),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u5b83\u7ea6\u6e38\u620f\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u5927\u5bb6\u5206\u4eab\u548c\u5171\u540c\u73a9\u6e38\u620f\u624d\u80fd\u4ea7\u751f\u4ef7\u503c\u7684\u7406\u5ff5\u662f\u76f8\u8fdd\u80cc\u7684\uff0c\u533a\u5757\u94fe\u66f4\u9f13\u52b1\u5c01\u95ed\u548c\u79d8\u5bc6\u7684\u884c\u4e3a\u3002"),(0,n.kt)("h4",{id:"4651-\u4ef7\u503c\u5173\u8054"},"4.6.5.1 \u4ef7\u503c\u5173\u8054"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u4e0d\u89e3\u51b3\u4ef7\u503c\u5173\u8054\u7684\u95ee\u9898\uff0c\u4e00\u5b9a\u6570\u91cf\u7684\u865a\u62df\u8d27\u5e01\u5230\u5e95\u5173\u8054\u591a\u5c11\u5b9e\u9645\u7269\u54c1\u7684\u4ef7\u503c\uff0c\u4ee5\u53ca\u600e\u6837\u5173\u8054\uff0c\u8fd9\u4e0d\u662f\u533a\u5757\u94fe\u4f1a\u8003\u8651\u7684\u3002\u5982\u679c\u8fd9\u4e2a\u95ee\u9898\u4e0d\u89e3\u51b3\uff0c\u4e5f\u8bb8\u4ece\u6e90\u5934\u4e0a\u5c31\u4e0d\u53ef\u63a7\u4e86\uff0c\u540e\u9762\u7684\u7269\u6743\u4fdd\u969c\u4e5f\u5c31\u6ca1\u6709\u610f\u4e49\u3002"),(0,n.kt)("h4",{id:"4652-\u4ef7\u503c\u7684\u51b3\u5b9a"},"4.6.5.2 \u4ef7\u503c\u7684\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5728\u4ea4\u6613\u8fc7\u7a0b\u4e2d\uff0c\u7269\u54c1\u7684\u4ef7\u503c\u5230\u5e95\u600e\u6837\u53d8\u52a8\uff0c\u6ca1\u6709\u66f4\u597d\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4e00\u4e2a\u7269\u54c1\u7684\u4ef7\u503c\u80af\u5b9a\u4e0d\u662f\u7531\u6295\u7968\u6765\u51b3\u5b9a\u7684\uff0c\u5b83\u662f\u7531\u4eba\u4eec\u7684\u7ecf\u6d4e\u884c\u4e3a\u6765\u51b3\u5b9a\u7684\u3002\u6295\u7968\u662f\u53ef\u4ee5\u88ab\u64cd\u4f5c\u7684\uff0c\u6216\u8005\u4e5f\u53ef\u80fd\u662f\u865a\u5047\u7684\u3002\u4f46\u662f\u771f\u5b9e\u7684\u7ecf\u6d4e\u884c\u4e3a\u662f\u4e0d\u4f1a\u8bf4\u8c0e\u7684\uff0c\u5373\u4f7f\u67d0\u4e9b\u4e2a\u4f53\u5b58\u5728\u504f\u5dee\uff0c\u4f46\u603b\u4f53\u800c\u8a00\u662f\u5ba2\u89c2\u7684\uff0c\u8fd9\u5c31\u662f\u771f\u5b9e\u4e16\u754c\u7269\u54c1\u4ef7\u503c\u51b3\u5b9a\u7684\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728Reality World\uff0c\u6211\u4eec\u4ece\u6280\u672f\u4e0a\u628a\u4eba\u4eec\u8fd9\u79cd\u7ecf\u6d4e\u884c\u4e3a\u878d\u5165\u5230\u5546\u54c1\u4ef7\u503c\u4f53\u7cfb\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u79c1\u4eba\u7f51\u7edc\u4e4b\u95f4\u7684\u53e3\u7891\uff0c\u4f8b\u5982\u5982\u679c\u4f60\u51b3\u5b9a\u67d0\u4e2a\u4e1c\u897f\u597d\uff0c\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u8fd9\u6837\u7684\u63a8\u8350\u66f4\u9760\u8c31\uff0c\u4f60\u7528\u670b\u53cb\u4e4b\u95f4\u7684\u5173\u7cfb\u6765\u4fdd\u969c\u4f60\u7684\u53e3\u7891\uff0c\u800c\u4e0d\u662f\u968f\u4fbf\u4e00\u53e5\u4e0d\u8d1f\u8d23\u4efb\u7684\u8bdd\u3002\u800c\u4e3a\u4ec0\u4e48\u4f60\u4f1a\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u662f\u56e0\u4e3a\u865a\u62df\u4e16\u754c\u7684\u4e92\u52a8\u5927\u90fd\u591a\u662f\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u8fdb\u884c\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7ade\u4e89\uff0c\u5bf9\u4e8e\u76f8\u4f3c\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u7ec4\u4ef6\u5b9e\u73b0\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u4e4b\u95f4\u4f1a\u76f8\u4e92\u7ade\u4e89\uff0c\u56e0\u6b64\u7ade\u4e89\u4e5f\u4f1a\u6307\u5bfc\u5b9a\u4ef7\uff0c\u5bf9\u6807\u51c6\u4e5f\u662f\u4e00\u6837\u3002")),(0,n.kt)("p",null,"\u56e0\u6b64\uff0cReality World\u662f\u66f4\u63a5\u8fd1\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u4fdd\u8bc1\u7269\u54c1\u7684\u4ef7\u503c\u662f\u4e0e\u4f60\u9700\u8981\u4ed8\u51fa\u7684\u4ee3\u7801\u5339\u914d\u7684\u3002"),(0,n.kt)("h4",{id:"4653-\u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"},"4.6.5.3 \u8f6c\u5356\u6ca1\u6709\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684NFT\u7cfb\u7edf\u4e2d\uff0c\u7269\u54c1\u88ab\u53cd\u590d\u548c\u5927\u91cf\u8f6c\u5356\uff0c\u800c\u4e0d\u662f\u50cf\u6e38\u620f\u4e00\u6837\u88ab\u5927\u91cf\u73a9\u5bb6\u771f\u6b63\u7684\u4f53\u9a8c\u3002\u5728\u8fd9\u4e9b\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u751a\u81f3\u5927\u90e8\u5206\u4e70\u5bb6\u548c\u5356\u5bb6\u6839\u672c\u5c31\u6ca1\u6709\u53bb\u4f53\u9a8c\u5b83\u771f\u6b63\u7684\u5185\u5bb9\uff0c\u5f53\u7136\u4e5f\u4e0d\u53ef\u80fd\u6709\u673a\u4f1a\u53bb\u6539\u8fdb\u5b83\uff0c\u6216\u8005\u53bb\u589e\u52a0\u5b83\u7684\u4ef7\u503c\u3002\u8fd9\u6837\u7684\u7ecf\u6d4e\u6d3b\u52a8\u6beb\u65e0\u610f\u4e49\uff0c\u5b83\u5bf9\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u90fd\u6beb\u65e0\u8d21\u732e\u3002"),(0,n.kt)("h3",{id:"466-royalty"},"4.6.6 Royalty"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u7ecf\u6d4e\u6d3b\u52a8\u4e2d\u7684\u751f\u4ea7\u8005\uff0c\u6709\u4e24\u79cd\u6fc0\u52b1\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u6b21\u6027\u8d39\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e")),(0,n.kt)("p",null,"\u5728\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u4e00\u6b21\u6027\u8d39\u7528\u901a\u5e38\u53d1\u751f\u5728\u5546\u54c1\u4ea4\u6613\u7684\u7ec8\u7aef\uff0c\u5373\u5546\u54c1\u8f6c\u79fb\u5230\u6700\u7ec8\u6d88\u8d39\u8005\u7684\u8fc7\u7a0b\u4e2d\u3002\u4f46\u662f\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u5f3a\u52bf\u548c\u6280\u672f\u7ade\u4e89\u529b\u5f3a\u7684\u751f\u4ea7\u8005\uff0c\u4ed6\u4eec\u4e5f\u4f1a\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u5f95\u5361\u8ddf\u534e\u4e3a\u7684\u5408\u4f5c\uff0c\u662f\u6309\u7167\u624b\u673a\u9500\u91cf\u8fdb\u884c\u5206\u6210\u3002\u5f53\u7136\u8fd9\u4e9b\u90fd\u4f1a\u968f\u7740\u4e00\u4e9b\u8bdd\u8bed\u6743\u7b49\u56e0\u7d20\u53ef\u4ee5\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8eReality World\u4e2d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5f71\u54cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7248\u7a0e\u53ef\u80fd\u66f4\u52a0\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u80fd\u529b"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u4e00\u6b21\u6027\u8d39\u7528\u53ef\u80fd\u66f4\u5bb9\u6613\u9f13\u52b1\u5f00\u53d1\u8005\u5f00\u53d1\u66f4\u591a\u7684\u5185\u5bb9\uff0c\u4f46\u4e5f\u8bb8\u5b83\u6ca1\u6709\u7cbe\u529b\u53bb\u63d0\u5347\u5355\u4e2a\u4ea7\u54c1\u7684\u7ade\u4e89\u529b\uff0c\u56e0\u4e3a\u65e0\u6cd5\u8f6c\u5316\u5b58\u91cf\u7528\u6237\u7684\u4ef7\u503c\uff0c\u6c38\u8fdc\u53ea\u6709\u65b0\u7528\u6237\u624d\u80fd\u4ea7\u751f\u6536\u5165\u3002")),(0,n.kt)("p",null,"\u5f53\u7136\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u5f00\u53d1\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u4f46\u662f\u56e0\u4e3a\u7248\u7a0e\u7684\u6536\u76ca\u4e3b\u8981\u662f\u53d6\u51b3\u4e8e\u5f71\u54cd\u529b\u548c\u77e5\u540d\u5ea6\uff0c\u4e0d\u540c\u7684\u5f71\u54cd\u529b\u548c\u540d\u6c14\u5176\u7248\u7a0e\u6536\u5165\u7684\u5dee\u8ddd\u975e\u5e38\u5927\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u66f4\u613f\u610f\u82b1\u5fc3\u601d\u63d0\u5347\u5355\u4e2a\u6807\u51c6\u6216\u7ec4\u4ef6\u7684\u54c1\u8d28\uff0c\u56e0\u4e3a\u53ea\u8981\u6709\u597d\u7684\u5f71\u54cd\u529b\uff0c\u8fd9\u5957\u673a\u5236\u4ee5\u4fdd\u8bc1ta\u8d5a\u53d6\u8db3\u591f\u7684\u6536\u5165\u3002\u5c31\u597d\u6bd4\u82f9\u679c\u624b\u673a\uff0cTA\u9700\u8981\u7ef4\u6301\u81ea\u5df1\u7684\u54c1\u724c\uff0c\u7136\u540e\u9500\u552e\u5c31\u4f1a\u5f88\u9ad8\uff0c\u800c\u5176\u4ed6\u4e00\u4e9b\u624b\u673a\u5382\u5546\u5219\u4f1a\u5c1d\u8bd5\u5f00\u53d1\u591a\u79cd\u4e0d\u540c\u5b9a\u4f4d\u7684\u4ea7\u54c1\u548c\u5f00\u53d1\u7ec6\u5206\u5e02\u573a\u3002"),(0,n.kt)("p",null,"\u6211\u4eec\u663e\u7136\u662f\u9700\u8981\u9f13\u52b1\u5f00\u53d1\u8005\u5236\u4f5c\u66f4\u597d\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u5f00\u53d1\u6570\u91cf\u66f4\u591a\u7684\u6807\u51c6\u548c\u7ec4\u4ef6\u3002\u6240\u6709\u5bf9\u8fd9\u4e24\u7c7b\u5f00\u53d1\u8005\u4f7f\u7528\u7248\u7a0e\u7684\u5f62\u5f0f\u3002"),(0,n.kt)("h4",{id:"4661-\u6807\u51c6\u7a0e"},"4.6.6.1 \u6807\u51c6\u7a0e"),(0,n.kt)("p",null,"\u5373\u7ec4\u4ef6\u5f00\u53d1\u8005\uff0c\u5728\u6bcf\u9500\u552e\u4e00\u4ef6\u7ec4\u4ef6\u65f6\uff0c\u6807\u51c6\u7684\u5236\u5b9a\u8005\u53ef\u4ee5\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u53ea\u662f\u57fa\u4e8e\u6807\u51c6\u5f00\u53d1\u7ec4\u4ef6\uff0c\u800c\u6ca1\u6709\u5f62\u6210\u4efb\u4f55\u9500\u552e\u6536\u5165\uff0c\u662f\u4e0d\u9700\u8981\u5411\u6807\u51c6\u4f5c\u8005\u652f\u4ed8\u8d39\u7528\u7684\u3002\u8fd9\u6837\u964d\u4f4e\u7ec4\u4ef6\u5f00\u53d1\u8005\u7684\u95e8\u69db\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u6807\u51c6\u4f5c\u8005\u5728\u6ca1\u6709\u4efb\u4f55\u6807\u51c6\u7a0e\u6536\u5165\u4e4b\u524d\uff0c\u4e5f\u4e0d\u9700\u8981\u5411\u5e73\u53f0\u652f\u4ed8\u8d39\u7528\u3002"),(0,n.kt)("h4",{id:"4662-\u7ec4\u4ef6\u7a0e"},"4.6.6.2 \u7ec4\u4ef6\u7a0e"),(0,n.kt)("p",null,"\u5373\u666e\u901a\u7528\u6237\u4f7f\u7528\u67d0\u4e2a\u7ec4\u4ef6\u5f00\u53d1\u7684\u5185\u5bb9\uff0c\u5728\u4ea7\u751f\u6536\u5165\u7684\u65f6\u5019\u4f1a\u6536\u53d6\u4e00\u5b9a\u7684\u7248\u7a0e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u5bf9\u4e8e\u7ec4\u4ef6\u7a0e\u6765\u8bf4\u8981\u66f4\u590d\u6742\u4e00\u4e9b\uff0c\u56e0\u4e3a\u7528\u6237\u7684\u6536\u5165\u53ef\u80fd\u6765\u81ea\u591a\u4e2a\u7ec4\u4ef6\u7684\u7ed3\u679c\uff0c\u5f88\u96be\u6e05\u6670\u5224\u5b9a\u67d0\u5355\u4e2a\u7ec4\u4ef6\u7684\u8d21\u732e\u3002\u8fd9\u5757\u540e\u7eed\u5728\u68b3\u7406\u4e00\u4e0b\u601d\u8def\u3002"),(0,n.kt)("h3",{id:"469-\u5b8c\u6574\u7684\u751f\u6001"},"4.6.9 \u5b8c\u6574\u7684\u751f\u6001"),(0,n.kt)("p",null,"\u65e2\u8981\u6709\u6d88\u8d39\u8005\uff0c\u751f\u6210\u8005\uff0c\u5de5\u5177\u5236\u4f5c\uff0c\u4f9b\u5e94\u94fe\uff0c\u624d\u80fd\u5168\u57df\u6fc0\u6d3b"),(0,n.kt)("h2",{id:"47-social"},"4.7 Social"),(0,n.kt)("h3",{id:"471-\u79c1\u4eba\u5316\u793e\u4ea4"},"4.7.1 \u79c1\u4eba\u5316\u793e\u4ea4"),(0,n.kt)("img",{src:"resources/reworld.png"}),(0,n.kt)("p",null,"\u4e92\u52a8\u5185\u5bb9\u9700\u8981\u548c\u670b\u53cb\u4e00\u8d77\u73a9\uff0c\u4f1a\u7ed9\u670b\u53cb\u63a8\u8350\u81ea\u5df1\u89c9\u5f97\u8fd8\u73a9\u7684\u4e1c\u897f\uff0c\u5f62\u6210\u826f\u6027\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u95f4\u63a5\u4e5f\u4f1a\u5bfc\u81f4\u793e\u533a\u66f4\u6587\u660e"),(0,n.kt)("p",null,"\u5927\u591a\u6570\u7c7bRoblox \u5e73\u53f0\u90fd\u662f\u7c7b\u4f3c\u7684\u6a21\u5f0f\uff0c\u5b83\u4eec\u770b\u8d77\u6765\u50cf\u4e00\u4e2a\u5e94\u7528\u5e02\u573a"),(0,n.kt)("p",null,"\u53ea\u6709\u79c1\u4eba\u5316\u624d\u80fd\u4fc3\u8fdb\u5927\u4f17\u521b\u4f5c\uff0c\u5c31\u50cfSnapchat"),(0,n.kt)("p",null,"\u751a\u81f3\u6296\u97f3\u89c6\u9891\u5927\u90e8\u5206\u90fd\u662f\u56f4\u7ed5\u81ea\u5df1\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u5e94\u7528\u5e02\u573a\u578b\u7684\u5e94\u7528\uff0c\u662f\u4e0d\u4f1a\u6fc0\u53d1\u666e\u901a\u7528\u6237\u7684\uff0c\u5c31\u50cf\u4f60\u8981\u6c42\u666e\u901a\u7528\u6237\u521b\u4f5c\u4e25\u8083\u7684\u5927\u7247\uff0c\u4ed6\u4eec\u505a\u4e0d\u5230\uff0c\u6240\u4ee5\u5fc5\u987b\u79c1\u4eba\u5316"),(0,n.kt)("p",null,"\u8ddf\u5fae\u4fe1\u7684\u6a21\u5f0f\uff0c\u501f\u52a9\u79c1\u4eba\u5c0f\u5708\u5b50\u7684\u5f3a\u70c8\u5206\u4eab\u548c\u521b\u4f5c\u9700\u6c42"),(0,n.kt)("h4",{id:"4711-\u6dd8\u5b9d\u548c\u5fae\u4fe1"},"4.7.1.1 \u6dd8\u5b9d\u548c\u5fae\u4fe1"),(0,n.kt)("p",null,"\u6dd8\u5b9d\u7684\u6a21\u5f0f\u7c7b\u4f3c\u4e8e\u4f20\u7edf\u7ecf\u6d4e\u7684\u6570\u5b57\u5316\uff0c\u53ea\u662f\u4e00\u4e2a\u9500\u552e\u5e73\u53f0\uff0c\u793e\u4ea4\u6027\u51e0\u4e4e\u4e0d\u5b58\u5728\u3002\u8868\u73b0\u5728\u4e00\u4e9b\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u4f60\u4e70\u4e86\u4e00\u4e2a\u4e1c\u897f\uff0c\u51e0\u4e4e\u6ca1\u6709\u4ec0\u4e48\u6e20\u9053\u628a\u8fd9\u5bb6\u5e97\u6216\u8005\u8fd9\u4ef6\u5546\u54c1\u5206\u4eab\u7ed9\u597d\u53cb\uff0c\u751a\u81f3\u6709\u65f6\u5019\u8fd8\u9700\u8981\u901a\u8fc7\u5fae\u4fe1\u53bb\u5206\u4eab\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5bb6\u6dd8\u5b9d\u5e97\u7684\u54c1\u724c\u6548\u5e94\u76f8\u5bf9\u6bd4\u8f83\u5f31\uff0c\u4e00\u65b9\u9762\u662f\u591a\u5bb6\u5e97\u53ef\u80fd\u9500\u552e\u540c\u4e00\u79cd\u5546\u54c1\uff0c\u4e00\u65b9\u9762\u662f\u6ca1\u6709\u7ef4\u7cfb\u5e97\u5bb6\u548c\u6d88\u8d39\u8005\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u4e9b\u65b9\u5f0f\u6216\u5de5\u5177\u3002\u6240\u4ee5\u6dd8\u5b9d\u5546\u5e97\u7684\u58f0\u8a89\u6216\u540d\u58f0\u4e3b\u8981\u9760\u6d41\u91cf\uff0c\u6216\u8005\u9500\u91cf\u8fd9\u4e00\u5355\u4e00\u5c5e\u6027\uff0c\u4f46\u662f\u56e0\u4e3a\u53d7\u6d41\u91cf\u8fd9\u79cd\u5e73\u53f0\u63a7\u5236\u529b\u91cf\u7684\u5f71\u54cd\uff0c\u9500\u91cf\u672c\u8eab\u53c8\u662f\u53d7\u6d41\u91cf\u5f71\u54cd\u7684\uff0c\u5bfc\u81f4\u5c0f\u54c1\u724c\u4e0d\u6613\u4e8e\u6210\u957f\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5373\u4f7f\u4f60\u770b\u5230\u670b\u53cb\u7684\u67d0\u4e2a\u4e1c\u897f\u8f83\u597d\uff0c\u8fd9\u79cd\u793e\u4ea4\u5bfc\u81f4\u7684\u63a8\u8350\u6709\u65f6\u5019\u5e76\u4e0d\u80fd\u76f4\u63a5\u8f6c\u5316\u5230\u8fd9\u5bb6\u5e97\uff0c\u4e00\u662f\u5206\u4eab\u4e0d\u65b9\u4fbf\uff0c\u6211\u8fd8\u8981\u53bb\u8ba2\u5355\u91cc\u641c\u7d22\u7136\u540e\u8f6c\u53d1\uff0c\u8fd9\u662f\u4e00\u4e2a\u9ebb\u70e6\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u5bf9\u6bd4\u5fae\u4fe1 \uff0c\u6211\u60f3\u5206\u4eab\u7684\u4e1c\u897f\u90fd\u5728\u670b\u53cb\u5708\uff0c\u5927\u5bb6\u968f\u65f6\u53ef\u4ee5\u81ea\u5df1\u53bb\u770b\u3002\u5f53\u7136\u5bf9\u4e8e\u6dd8\u5b9d\uff0c\u66f4\u6709\u53ef\u80fd\u7684\u60c5\u51b5\u662f\u5927\u5bb6\u8bf4\u4e2a\u54c1\u724c\u540d\u5b57\uff0c\u5927\u5bb6\u81ea\u5df1\u53bb\u641c\u7d22\u8d2d\u4e70\uff0c\u8fd9\u4e2a\u65f6\u5019\uff0c\u54c1\u724c\u7684\u6548\u5e94\u7684\u66f4\u5927\u7684\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\u603b\u7ed3\u8d77\u6765\u53ef\u80fd\u662f\u4e24\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u5e76\u4e0d\u662f\u4e00\u4e2a\u521b\u4f5c\u5e73\u53f0\uff0c\u6240\u4ee5\u591a\u4e2a\u5546\u5e97\u4e4b\u95f4\u540c\u8d28\u5316\u5f88\u4e25\u91cd\uff0c\u5bfc\u81f4\u51e0\u4e4e\u6ca1\u6709\u54c1\u724c\u7ade\u4e89\u529b\uff1b\u800c\u53cd\u89c2\u6e38\u620f\u5e02\u573a\uff0c\u4e00\u4e2a\u6e38\u620f\u662f\u9760\u521b\u9020\u7684\u72ec\u7279\u6027\u6765\u5efa\u7acb\u54c1\u724c\u58f0\u8a89\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6dd8\u5b9d\u6ca1\u6709\u793e\u4ea4\uff0c\u56e0\u4e3a\u5355\u7eaf\u56f4\u7ed5\u5546\u54c1\u8d2d\u4e70\u6784\u5efa\u793e\u4ea4\u662f\u6ca1\u6709\u592a\u5927\u5438\u5f15\u529b\u7684\u3002\u793e\u4ea4\u66f4\u591a\u6e90\u4e8e\u751f\u6d3b\uff0c\u5728\u5546\u54c1\u4e4b\u5916\uff0c\u8fd8\u6709\u66f4\u591a\u7684\u6d3b\u52a8\uff0c\u5546\u54c1\u8d2d\u4e70\u6d3b\u52a8\u751a\u81f3\u53ef\u80fd\u53ea\u5360\u4eba\u7c7b\u6d3b\u52a8\u5f88\u5c0f\u7684\u4e00\u90e8\u5206\uff0c\u6bd4\u5982\u5f88\u591a\u5176\u4ed6\u66f4\u5177\u4ef7\u503c\u7684\u670d\u52a1\u662f\u901a\u8fc7\u6dd8\u5b9d\u8d2d\u4e70\u4e0d\u5230\u7684\u3002\u4f55\u51b5\u4e00\u4e2a\u7eaf\u5546\u54c1\u63a8\u8350\u7684\u793e\u4ea4\u4f1a\u5f15\u8d77\u4eba\u4eec\u65b9\u6848\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6dd8\u5b9d\u6784\u5efa\u4e0d\u8d77\u793e\u4ea4\u80fd\u529b\u3002")),(0,n.kt)("p",null,"\u4f46\u662f\u53cd\u89c2\u5fae\u4fe1\uff0c\u5fae\u4fe1\u5b8c\u5168\u662f\u793e\u4ea4\u9a71\u52a8\u3002\u4f60\u7684\u6bcf\u4e00\u4e2a\u4f1a\u8bdd\uff0c\u6bcf\u4e00\u4e2a\u597d\u53cb\uff0c\u6bcf\u4e00\u6b21\u53c2\u52a0\u7fa4\u804a\uff0c\u90fd\u662f\u56e0\u4e3a\u4f60\u7684\u6587\u5b57\u6240\u6d89\u53ca\u7684\u67d0\u4ef6\u4e8b\u662f\u4e0e\u5176\u4ed6\u67d0\u4e2a\u4eba\u76f8\u5173\u7684\u3002\u8fd9\u4e9b\u5927\u91cf\u7684\u6c9f\u901a\u4ea4\u6d41\u76ee\u7684\uff0c\u5176\u5b9e\u80cc\u540e\u7684\u4ef7\u503c\u5f88\u5927\u90e8\u5206\u4e5f\u53ef\u80fd\u5f52\u7c7b\u4e3a\u4ef7\u503c\uff0c\u54ea\u6015\u662f\u4ea4\u5230\u4e00\u4e2a\u5355\u7eaf\u7684\u597d\u670b\u53cb\uff0c\u5176\u5b9e\u65e5\u540e\u4e5f\u4f1a\u4ea7\u751f\u67d0\u4e9b\u4ef7\u503c\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\u53ef\u4ee5\u8bf4\u793e\u4ea4\u662f\u6784\u5efa\u4ef7\u503c\u7684\u91cd\u8981\u8fc7\u7a0b\u548c\u624b\u6bb5\uff0c\u800c\u6700\u540e\u7684\u4ea4\u6613\u53cd\u800c\u53ea\u662f\u4e00\u4e2a\u5f88\u7b80\u5355\u7684\u8fc7\u7a0b\u6216\u8005\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5fae\u4fe1\u6ca1\u6709\u4ef7\u503c\u4ea4\u6613\u7684\u65b9\u5f0f\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u6784\u5efa\u4ef7\u503c\u548c\u4ef7\u503c\u4ea4\u6613\u5206\u79bb\u7684\u67b6\u6784\u662f\u4e00\u79cd\u6bd4\u8f83\u597d\u7684\u67b6\u6784\uff0c\u6216\u8005\u8bf4\u6784\u67b6\u4ef7\u503c\u7684\u8fc7\u7a0b\u4e0e\u4ef7\u503c\u4ea4\u6613\u672c\u8eab\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7684\u8026\u5408\u3002"),(0,n.kt)("p",null,"\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4ea4\u6613\u5e73\u53f0\uff0c\u4f46\u662f\u6253\u901a\u6dd8\u5b9d\u7684\u5b9e\u7269\u6216\u8005\u7eaf\u5546\u54c1\u5316\u7684\u5f62\u5f0f\uff0c\u4f7f\u4e4b\u6cdb\u534e\u5230\u6240\u6709\u4ef7\u503c\u670d\u52a1\uff0c\u6bd4\u5982\u6e38\u620f\u4f53\u9a8c\uff0c\u8f6f\u4ef6\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u5e73\u53f0\uff0c\u521b\u4f5c\u4e0d\u5149\u751f\u4ea7\u5546\u54c1\uff0c\u800c\u4e14\u7ed3\u5408\u9500\u552e\u5e73\u53f0\uff0c\u4f7f\u5f97\u9500\u552e\u5546\u54c1\u540c\u8d28\u5316\u8f83\u4f4e\uff0c\u56e0\u4e3a\u5b83\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u9500\u552e\u5e73\u53f0\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u793e\u4ea4\uff0c\u6e38\u620f\u5929\u751f\u5177\u6709\u793e\u4ea4\u6027\uff0c\u4f46\u662f\u73b0\u5728\u7684\u6e38\u620f\u4e3b\u8981\u53ea\u662f\u4e00\u4e2a\u597d\u53cb\u5217\u8868\uff0c\u6392\u540d\u3002\u7f3a\u4e4f\u5fae\u4fe1\u90a3\u79cd\uff0c\u4e3a\u4e86\u67d0\u4e2a\u76ee\u6807\u6216\u5173\u7cfb\uff0c\u4e3b\u52a8\u53d1\u8d77\u793e\u4ea4\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u4f60\u53d1\u73b0\u4e00\u4e2a\u597d\u73a9\u7684\u6e38\u620f\uff0c\u662f\u5426\u53ef\u4ee5\u66f4\u597d\u5730\u9080\u8bf7\u670b\u53cb\u52a0\u5165\u8fdb\u6765\u3002\u4f20\u7edf\u7684\u65b9\u5f0f\u8981\u53bb\u5fae\u4fe1\u4e2d\u5206\u4eab\uff0c\u6bcf\u6b21\u8fdb\u5165\u90fd\u9700\u8981\u91cd\u65b0\u5206\u4eab\uff0c\u6709\u4e00\u79cd\u5272\u88c2\u3002\u800c\u6211\u4eec\u4f1a\u4fdd\u5b58\u4e00\u4e2a\u6700\u8fd1\u5217\u8868\uff0c\u5982\u679c\u4f60\u4eec\u7ecf\u5e38\u73a9\u4e00\u4e2a\u6e38\u620f\uff0c\u6253\u4e2a\u62db\u547c\u76f4\u63a5\u5c31\u8fdb\u5165\u4e86\u3002\u5fae\u4fe1\u4e0d\u4f1a\u4e3a\u4e00\u4e9b\u4e13\u7528\u7684\u793e\u4ea4\u76ee\u7684\u8fdb\u884c\u670d\u52a1\u3002")),(0,n.kt)("p",null,"\u5173\u4e8e\u793e\u4ea4\u4ea4\u6613\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u66f4\u597d\u7684\u63a8\u8350\uff0c\u5982\u4e0a\u9762\u7b2c\u4e09\u90e8\u5206\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u76f4\u63a5\u4ea4\u6613")),(0,n.kt)("h3",{id:"472--\u5173\u6ce8\u73b0\u5b9e"},"4.7.2 \u5173\u6ce8\u73b0\u5b9e"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"reality",src:l(8120).Z,width:"1920",height:"1080"})),(0,n.kt)("h2",{id:"48-\u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"},"4.8 \u521b\u9020\u6027\u548c\u5f00\u653e\u4e16\u754c"),(0,n.kt)("p",null,"\u5728\u6e38\u620f\u548c\u7535\u5f71\u7b493D\u8f7d\u4f53\u7684\u5a31\u4e50\u4f53\u9a8c\u4e2d\uff0c\u6709\u4e09\u79cd\u4e3b\u8981\u7684\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7279\u7684\u7c7b\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6e38\u620f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6545\u4e8b\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u6027")),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u6e38\u620f\uff0c\u5b83\u662f\u6e38\u620f\u4e2d\u7684\u7075\u9b42\uff0c\u6709\u6e38\u620f\u8bbe\u8ba1\u5e08\u6839\u636e\u81ea\u5df1\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\u8bbe\u8ba1\u51fa\u7684\uff0c\u8ba9\u73a9\u5bb6\u4ea7\u751f\u5fc3\u6d41\u7684\u77ac\u95f4\u4f53\u9a8c"),(0,n.kt)("p",null,"\u6545\u4e8b\u6027\u4e3b\u8981\u5bf9\u5e94\u4e8e\u7535\u5f71"),(0,n.kt)("p",null,"\u521b\u4f5c\u6027\u7684\u6700\u5927\u4e0d\u540c\u548c\u9b45\u529b\u5728\u4e8e\uff0c\u521b\u4f5c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u88ab\u52a8\u7684\u4f53\u9a8c\uff0c\u5b83\u662f\u9700\u8981\u601d\u8003\u3001\u6784\u601d\u3001\u81ea\u5df1\u4e2a\u4eba\u5bf9\u751f\u6d3b\u5404\u65b9\u9762\u7684\u7406\u89e3\u3001\u611f\u609f\u548c\u60f3\u8c61\u529b\u7684\uff0c\u56e0\u6b64\u8fd9\u79cd\u8981\u6c42\u66f4\u9ad8\uff0c\u5b83\u7684\u7ed3\u679c\u5bf9\u5e94\u7684\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u6e38\u620f\u6001\u7684\u5fc3\u6d41\uff0c\u5b83\u5bf9\u5e94\u4e8e\u6210\u5c31\u4e86\uff0c\u751a\u81f3\u67d0\u79cd\u7cbe\u795e\u7269\u8d28\uff0c\u521b\u4f5c\u7684\u4e1c\u897f\u624d\u66f4\u5bf9\u5e94\u4e8e\u4ef7\u503c\uff0c\u624d\u66f4\u5bb9\u6613\u4ea7\u751f\u4ea4\u6613"),(0,n.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u5bfc\u6f14\u6216\u8005\u4e00\u4e2a\u827a\u672f\u5de5\u4f5c\u8005\uff0c\u4ed6\u6301\u7eed\u521b\u4f5c\u4f18\u79c0\u4f5c\u54c1\u7684\u52a8\u529b\u4e3b\u8981\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u4f53\u9a8c\uff0c\u90a3\u4e48\u5c06\u8fd9\u79cd\u80fd\u529b\u91ca\u653e\u5230\u666e\u901a\u5927\u4f17\u5f53\u4e2d\uff0c\u4e5f\u4e00\u5b9a\u4f1a\u662f\u4e0d\u9519\u7684\u4f53\u9a8c"),(0,n.kt)("p",null,"\u8fc7\u53bb\u7684\u79d1\u6280\u6211\u4eec\u805a\u7126\u4e8e\u6539\u5584\u4e00\u4e9b\u5b9e\u7528\u4ea7\u54c1\u7684\u4f53\u9a8c\uff0c\u5b83\u4f53\u73b0\u5728\u53bb\u6d41\u7a0b\u3001\u4fbf\u6377\u6027\u3001\u6548\u7387\u7b49\uff1b\u4e92\u8054\u7f51\u65f6\u4ee3\u9664\u4e86\u63d0\u5347\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u6548\u7387\uff0c\u4ed6\u5f88\u5927\u7684\u4f53\u9a8c\u6539\u5584\u5728\u4e8e\u91ca\u653e\u4e86\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u5c31\u662f\u89c6\u9891\u548c\u7167\u7247\uff0c\u672c\u8d28\u4e0a\u7167\u7247\u548c\u89c6\u9891\u6240\u53cd\u5e94\u7684\u662f\u6bcf\u4e2a\u4eba\u611f\u77e5\u548c\u89c2\u5bdf\u4e16\u754c\u7684\u80fd\u529b\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u4e0d\u540c\u89c6\u89d2\u955c\u5934\u89c2\u5bdf\u540c\u4e00\u4e16\u754c\u4e0d\u540c\u7684\u7f8e\u611f"),(0,n.kt)("li",{parentName:"ul"},"\u6355\u6349\u4e0d\u540c\u611f\u5174\u8da3\u7684\u753b\u9762\u8868\u8fbe\u81ea\u5df1\u7684\u4e2a\u6027\u3001\u7406\u89e3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u62cd\u6444\u611f\u5174\u8da3\u7684\u89c6\u9891\u6545\u4e8b\u53cd\u5e94\u81ea\u5df1\u7684\u5174\u8da3\u3001\u4e3b\u5f20\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u8f6c\u8f7d\u4e0d\u540c\u7684\u89c6\u9891\u548c\u56fe\u7247\u4fe1\u606f\u8868\u8fbe\u81ea\u5df1\u7684\u89c2\u70b9\u3001\u4ef7\u503c\u89c2\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5df2\u6709\u5e26\u6709\u5404\u79cd\u5386\u53f2\u3001\u6280\u672f\u3001\u6587\u5316\u7b49\u4fe1\u606f\u7684\u56fe\u7247\u548c\u89c6\u9891\u6dfb\u52a0\u81ea\u5df1\u7684\u7406\u89e3\uff0c\u6292\u53d1\u81ea\u5df1\u7684\u4e3b\u5f20\u3001\u8ba4\u77e5\u3001\u89c2\u70b9\uff1a\u4ef7\u503c\u7b49")),(0,n.kt)("p",null,"\u4f46\u6240\u6709\u8fd9\u4e9b\uff0c\u4ed6\u90fd\u662f\u5728\u89c2\u5bdf\u6216\u8005\u5b66\u4e60\u4e86\u89e3\u8fd9\u4e2a\u4e16\u754c\uff0c\u5b83\u7684\u5de5\u5177\u901a\u5e38\u53ea\u662f\u955c\u5934\uff0c\u9664\u6b64\u4e4b\u5916\u5b83\u51e0\u4e4e\u6ca1\u6709\u5176\u4ed6\u5de5\u5177\uff0c\u4ed6\u7684\u8868\u8fbe\u80fd\u529b\u5f88\u53d7\u9650\u4e8e\u6211\u4eec\u773c\u775b\u6240\u80fd\u770b\u5230\u7684\u4e8b\u7269"),(0,n.kt)("p",null,"\u800c\u53cd\u89c2\u6211\u4eec\u7684\u4e16\u754c\u4e3a\u4ec0\u4e48\u591a\u59ff\u591a\u5f69\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u7528\u5404\u79cd\u5de5\u5177\u5982\u521b\u9020\u4e86\u5efa\u7b51\u3001\u8f66\u5b50\u3001\u8863\u670d\u3001\u8349\u5730\u3001\u516c\u56ed\u3001\u827a\u672f\u4f5c\u54c1\u7b49\u7b49\u6574\u4e2a\u4e16\u754c\uff0c\u8fd9\u4e9b\u521b\u9020\u7684\u4ef7\u503c\u662f\u56e0\u4e3a\u4ed6\u4eec\u878d\u5165\u4e86\u4eba\u4eec\u7684\u7406\u89e3\u3001\u601d\u8003\u3001\u60f3\u8c61\u3001\u751a\u81f3\u68a6\u60f3\u548c\u671f\u671b\u7b49\u7b49"),(0,n.kt)("p",null,"\u521b\u9020\u4f34\u968f\u7740\u6574\u4e2a\u6587\u660e\uff0c\u56e0\u4e3a\u4eba\u4eec\u521b\u9020\u7684\u4e1c\u897f\u6539\u5584\u4e86\u8fd9\u4e2a\u4e16\u754c\uff0c\u63d0\u5347\u4e86\u4eba\u4eec\u7684\u8ba4\u77e5\u3001\u7406\u89e3\u3001\u751f\u6d3b\u6548\u7387\u3001\u751f\u6d3b\u8d28\u91cf\u7b49\u7b49\uff0c\u6240\u4ee5\u5b83\u4fc3\u8fdb\u4e86\u6587\u660e\u8fdb\u7a0b"),(0,n.kt)("p",null,"\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u7684\u521b\u9020\u6027\u662f\u5426\u8db3\u591f\u4e86\uff0c\u53d7\u9650\u4e8e\u5f88\u591a\u7269\u7406\u7ea6\u675f\uff0c\u5f88\u591a\u521b\u9020\u80af\u5b9a\u662f\u53d7\u9650\u7684"),(0,n.kt)("p",null,"\u4f46\u662f\u521b\u9020\u865a\u62df\u7684\u5185\u5bb9\u76f8\u8f83\u4e8e\u7269\u8d28\u7269\u54c1\u662f\u5426\u5177\u6709\u4ef7\u503c\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u53ea\u8981\u521b\u9020\u7684\u7ed3\u679c\u63d0\u5347\u4e86\u4eba\u4eec\u5bf9\u4e16\u754c\u7684\u8ba4\u77e5\u548c\u7406\u89e3\u3001\u63d0\u5347\u4e86\u751f\u6d3b\u8d28\u91cf\u3001\u7cbe\u795e\u4e16\u754c\uff0c\u4ece\u800c\u4e5f\u5c31\u4fc3\u8fdb\u4e86\u6587\u660e\u7684\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4ed6\u5c31\u548c\u7269\u7406\u4e16\u754c\u7684\u521b\u9020\u662f\u7b49\u4ef7\u7684"),"\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u8bf4\uff0c\u5b83\u751a\u81f3\u53ef\u4ee5\u4e0d\u9700\u8981\u8ddf\u7269\u7406\u4e16\u754c\u53d1\u751f\u5173\u8054\uff0c\u5c31\u50cf\u4e00\u4e9b\u79d1\u5e7b\u7535\u5f71\u6216\u8005\u4e00\u4e9b\u7384\u5e7b\u5c0f\u8bf4\u8bb2\u8ff0\u7684\u6545\u4e8b\u90a3\u6837"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u79d1\u6280\u7684\u4e0b\u4e00\u4e2a\u5177\u6709\u793e\u4f1a\u4ef7\u503c\u7684\u4f7f\u547d\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u5f53\u524d\u5728\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u65b9\u9762\u6700\u5bb9\u6613\u5b9e\u65bd\u7684\u662f\u5199\u4f5c\uff1a\u53ef\u4ee5\u57fa\u4e8e\u81ea\u5df1\u7684\u7406\u89e3\u521b\u9020\u65b0\u7684\u7406\u89e3\uff1b\u5176\u6b21\u662f\u7535\u5f71\u548c\u6e38\u620f\uff0c\u4f46\u662f\u4ed6\u4eec\u4ec5\u9762\u5411\u5c11\u6570\u5f00\u53d1\u8005\u6216\u8005\u7535\u5f71\u5de5\u4f5c\u8005"),(0,n.kt)("h3",{id:"481-\u5206\u5de5\u7684\u91cd\u8981\u6027"},"4.8.1 \u5206\u5de5\u7684\u91cd\u8981\u6027"),(0,n.kt)("p",null,"\u540c\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u865a\u62df\u7684\u521b\u9020\u4e5f\u5fc5\u7136\u9700\u8981\u5206\u5de5\uff0c\u4e0d\u53ef\u80fd\u6240\u6709\u4e1c\u897f\u90fd\u9700\u8981\u6bcf\u4e2a\u521b\u4f5c\u8005\u4ece\u96f6\u5f00\u59cb\u642d\u5efa"),(0,n.kt)("p",null,"\u5206\u5de5\u610f\u5473\u7740\u52b3\u52a8\u529b\u590d\u7528\uff0c\u8282\u7701\u65f6\u95f4\uff0c\u5206\u5de5\u4e5f\u610f\u5473\u7740\u4ef7\u503c\u7684\u4ea4\u6613"),(0,n.kt)("p",null,"\u5546\u5e97\u6570\u5b57\u8d44\u4ea7\u3001\u7ec4\u4ef6\u7b49\u5176\u5b9e\u5c31\u662f\u5206\u5de5\u7684\u4ea7\u7269"),(0,n.kt)("p",null,"\u73b0\u5b9e\u4e16\u754c\u7684\u5206\u5de5\u7531\u4eba\u7c7b\u81ea\u8eab\u9a71\u52a8\uff0c\u4f8b\u5982\u884c\u4e1a\u6807\u51c6\u7531\u884c\u4e1a\u5185\u90e8\u8ba8\u8bba\u51b3\u5b9a"),(0,n.kt)("p",null,"\u5f00\u53d1\u51fa\u80fd\u591f\u6613\u4e8e\u5206\u5de5\u534f\u4f5c\u7684\u67b6\u6784\uff0c\u662f\u91ca\u653e\u521b\u9020\u529b\u548c\u8868\u8fbe\u80fd\u529b\u7684\u91cd\u8981\u57fa\u7840"),(0,n.kt)("h3",{id:"482-\u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"},"4.8.2 \u5171\u540c\u521b\u9020\u62c9\u8fd1\u8ddd\u79bb"),(0,n.kt)("p",null,"\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u4eba\u4eec\u4e4b\u95f4\u7684\u8ddd\u79bb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eb2\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u53cb\u60c5"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u4e00\u8d77\u5de5\u4f5c\u6216\u5b66\u4e60")),(0,n.kt)("p",null,"\u56f4\u7ed5\u7740\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u6216\u8005\u8bf4\u4e3a\u4e86\u4e00\u4e9b\u5171\u540c\u7684\u76ee\u6807\u6216\u8005\u5546\u4e1a\u76ee\u7684\uff0c\u5408\u4f5c\u505a\u4e00\u4ef6\u5171\u540c\u7684\u4e8b\u60c5\uff0c\u8fd9\u662f\u751f\u6d3b\u4e2d\u6700\u591a\u7684\u62c9\u8fd1\u4eba\u4eec\u8ddd\u79bb\u7684\u65b9\u5f0f\uff0c\u8fd9\u4e5f\u662f\u6211\u4eec\u65e5\u5e38\u793e\u4ea4\u5708\u5b50\u6269\u5c55\u7684\u4e3b\u8981\u6765\u6e90"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u9020\u6027\u4e0d\u4ec5\u4ec5\u9488\u5bf9\u4e2a\u4eba\uff0c\u8fd8\u9700\u8981\u56f4\u7ed5\u5171\u540c\u76ee\u6807\uff0c\u5171\u540c\u521b\u9020\u548c\u534f\u540c\uff0c\u624d\u80fd\u4fc3\u8fdb\u4eba\u4eec\u4e4b\u95f4\u7684\u4ea4\u6d41\u548c\u4e86\u89e3"),(0,n.kt)("h3",{id:"483-\u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"},"4.8.3 \u521b\u9020\u6e38\u620f\u6027\u4e0e\u4e00\u822c\u521b\u9020"),(0,n.kt)("p",null,"\u6e38\u620f\u6027\u6709\u73a9\u6cd5\uff0c\u76ee\u6807\uff0c\u7b56\u7565\uff0c\u5ef6\u7eed\u6027\u8f83\u5927\u3002"),(0,n.kt)("p",null,"\u4e00\u822c\u521b\u9020\u66f4\u591a\u53ea\u662f\u770b\u4e00\u4e0b\uff0c\u5373\u4f7f\u6709\u4ea4\u4e92\uff0c\u4ea4\u4e92\u7684\u76ee\u7684\u6027\u4e5f\u5f88\u5f31\uff0c\u6240\u4ee5\u9700\u8981\u628a\u5355\u4e2a\u4e00\u822c\u521b\u4f5c\u5185\u5bb9\u7684\u4f53\u9a8c\uff0c\u8f6c\u5316\u4e3a\u6301\u7eed\uff0c\u6709\u76ee\u6807\u548c\u5438\u5f15\u529b\u7684\u4e00\u79cd\u4f53\u9a8c\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u4e00\u822c\u6e38\u620f\u4e2d\u5f88\u591a\u65f6\u95f4\u7684\u64cd\u4f5c\u5728\u4e8e\u63a2\u7d22\uff0c\u63a2\u7d22\u4e2d\u4e00\u65b9\u9762\u662f\u4e86\u89e3\u73af\u5883\uff0c\u4e00\u65b9\u9762\u662f\u6536\u96c6\u8d44\u6e90\uff0c\u6240\u4ee5\u8fd9\u4e9b\u4e00\u822c\u76843D\u5185\u5bb9\u4e2d\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\uff0c\u4f8b\u5982\u6bcf\u4e2a\u5185\u5bb9\u90fd\u53ef\u4ee5\u83b7\u5f97\u4e00\u5b9a\u7684\u7ecf\u9a8c\uff0c\u4f46\u662f\u7ecf\u9a8c\u8ddf\u8bbe\u8ba1\u4ea4\u4e92\u6709\u5173\uff0c\u4f46\u7ecf\u9a8c\u662f\u5171\u4eab\u7684"),(0,n.kt)("h3",{id:"484-\u65f6\u95f4\u521b\u9020\u4ef7\u503c"},"4.8.4 \u65f6\u95f4\u521b\u9020\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u53ea\u662f\u73a9\u522b\u4eba\u8bbe\u8ba1\u7684\u6e38\u620f\uff0c\u6216\u8005\u770b\u7535\u5f71\uff0c\u8fd9\u901a\u5e38\u53ea\u662f\u4e2a\u4eba\u89c6\u89c9\u4e0a\u7684\u4f53\u9a8c\u3001\u4e2a\u4eba\u7406\u89e3\u7684\u5347\u534e\u3001\u5fc3\u6d41\uff0c\u8fd9\u79cd\u5fc3\u7406\u611f\u89c9\u5f80\u5f80\u5f88\u96be\u4f20\u9012\u7ed9\u5176\u4ed6\u4eba\uff0c\u4f8b\u5982\u5f53\u522b\u4eba\u7ed9\u4f60\u8bb2\u8ff0\u67d0\u4e2a\u6e38\u620f\u4f53\u9a8c\u65f6\uff0c\u5982\u679c\u4f60\u8981\u83b7\u5f97\u7c7b\u4f3c\u7684\u4f53\u9a8c\uff0c\u4f60\u5fc5\u987b\u81ea\u5df1\u4eb2\u81ea\u73a9\u4e00\u4e0b\uff0c\u4ed6\u6ca1\u53d1\u901a\u8fc7\u53e3\u8ff0\u4f20\u9012\u7ed9\u4f60"),(0,n.kt)("p",null,"\u5373\uff0c\u5982\u679c\u8ba4\u4e3a\u8fd9\u79cd\u6e38\u620f\u4f53\u9a8c\u662f\u4e00\u79cd\u4ef7\u503c\uff0c\u90a3\u4e48\u53ea\u6709\u6e38\u620f\u5f00\u53d1\u8005\u521b\u9020\u4e86\u4ef7\u503c\uff0c\u800c\u5927\u90e8\u5206\u73a9\u5bb6\u4e5f\u662f\u83b7\u5f97\u4ef7\u503c\uff0c\u5e76\u4e14\u8fd9\u79cd\u4ef7\u503c\u4e0d\u53ef\u8f6c\u5316"),(0,n.kt)("p",null,"\u4f46\u5982\u679c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e2a\u4e16\u754c\u4f1a\u884d\u751f\u4ef7\u503c\u548c\u521b\u9020\u4ef7\u503c\uff0c\u5219\u6211\u4eec\u5e0c\u671b\u666e\u901a\u7684\u7528\u6237\u80fd\u591f\u521b\u5efa\u53ef\u4ee5\u4ea4\u6613\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u65f6\u95f4\u53ef\u4ee5\u521b\u9020\u8fd9\u79cd\u4ef7\u503c"),(0,n.kt)("p",null,"\u5982\u679c\u6ca1\u6709\u521b\u9020\uff0c\u4ec5\u4ec5\u662f\u4f53\u9a8c\uff0c\u8fd9\u5176\u5b9e\u53c8\u56de\u5230\u4e86\u4f20\u7edf\u6e38\u620f\u884c\u4e1a\uff1a"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u4eba\u53ef\u4ee5\u521b\u9020\u6e38\u620f"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u521b\u9020\u51fa\u597d\u73a9\u7684\u4f53\u9a8c\uff0c\u9700\u8981\u5de8\u5927\u7684\u65f6\u95f4"),(0,n.kt)("p",null,"\u73a9\u5bb6\u90fd\u5728\u73a9\u540c\u6837\u4e00\u4e9b\u6e38\u620f"),(0,n.kt)("p",null,"\u53ea\u6709\u5c11\u6570\u6e38\u620f\u6b63\u5728\u88ab\u5e7f\u6cdb\u4f53\u9a8c\uff0c\u5c11\u6570\u4eba\u53d7\u76ca"),(0,n.kt)("p",null,"\u4e30\u5bcc\u6027\u4e0d\u591f"),(0,n.kt)("p",null,"\u7f3a\u4e4f\u6e38\u620f\u4e4b\u5916\u7684\u5f88\u591a\u4f53\u9a8c"),(0,n.kt)("p",null,"\u53ea\u6709\u521b\u9020\u548c\u6e38\u620f\u4f53\u9a8c\u7ed3\u5408\uff0c\u624d\u80fd\u5747\u5206\u548c\u6d88\u8017\u66f4\u591a\u7684\u65f6\u95f4\uff0c\u8ba9\u7528\u6237\u80fd\u591f\u6301\u7eed\u6295\u5165\uff0c\u800c\u4f20\u7edf\u6e38\u620f\u7684\u6d3b\u8dc3\u5ea6\u5f80\u5f80\u8ddf\u4e00\u4e9b\u65b0\u6e38\u620f\u6216\u8005\u7ecf\u5178\u6e38\u620f\u76f8\u5173"),(0,n.kt)("h3",{id:"485-\u521b\u9020\u7684\u65b9\u5f0f"},"4.8.5 \u521b\u9020\u7684\u65b9\u5f0f"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec8\u7aef\u7528\u6237\u4e0d\u4f1a\u76f4\u63a5\u5efa\u6a21\uff0c\u9664\u975e\u662f\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e0d\u9700\u8981\u7528\u6237\u96d5\u7422\u7cbe\u7ec6\u7f51\u683c\uff0c\u8fd9\u90e8\u5206\u8fd8\u662f\u8981\u56de\u5f52\u4f20\u7edfDCC\uff0c\u90a3\u91cc\u53ef\u4ee5\u8fdb\u884c\u66f4\u7cbe\u81f4\u5fae\u8c03\uff0c\u57283\u7ef4\u7a7a\u95f4\u505a\u4e0d\u5230\uff08\u8fd9\u6837\u4e5f\u5c31\u907f\u514d\u5c06\u4f20\u7edfDCC\u7684\u5de5\u5177\u5f15\u5165\u8fdb\u6765\uff0c\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u505a\u8ddf\u4f4d\u7f6e\u76f8\u5173\u7684\u4ea4\u4e92\uff0c\u5927\u5927\u7b80\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u4eba\u4eec\u52a0\u5de5\u67d0\u4e2a\u4e1c\u897f\u4e5f\u662f\u57fa\u4e8e\u73b0\u6709\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u4ece\u96f6\u5f00\u59cb\uff09"),(0,n.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e00\u4e9b\u4e0d\u9700\u8981\u7cbe\u81f4\u7f51\u683c\uff0c\u5e76\u4e14\u6709\u81ea\u7531\u5ea6\u7684\u7269\u4f53\uff0c\u5982\u5730\u9762\uff0c\u5c71\u8109\u7b49\u7b49\uff0c\u5927\u90e8\u5206\u8ddf\u73af\u5883\u6709\u5173")),(0,n.kt)("p",null,"\u6700\u540e\u7684\u4ea4\u4e92\u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u4fbf\u7b26\u5408\u89c6\u89c9\u76f4\u89c2\u5e38\u8bc6\u7684\u4ea4\u4e92\u96c6\u5408\uff0c\u7528\u6237\u57fa\u672c\u662f\u73af\u5883\u9760\u57fa\u4e8e\u624b\u52bf\u7684\u7a0b\u5e8f\u5316\u751f\u6210\uff0c\u4e2a\u6027\u7269\u4f53\u9760\u6a21\u677f\uff0c\u8c22\u8c22\u6a21\u7248\u901a\u8fc7DCC\u751f\u6210\uff0c\u5927\u90e8\u5206\u811a\u672c\u548c\u903b\u8f91\u4e5f\u662f\u9488\u5bf9\u4e2a\u6027\u7269\u4f53"),(0,n.kt)("p",null,"\u7c98\u6027\uff0c\u7531\u4e8e\u521b\u9020\u82b1\u8d39\u4e86\u5de8\u5927\u7684\u65f6\u95f4\uff0c\u56e0\u6b64\u7c98\u6027\u66f4\u9ad8"),(0,n.kt)("h3",{id:"486-\u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"},"4.8.6 \u5927\u4e16\u754c\u5408\u6210\u80fd\u529b"),(0,n.kt)("p",null,"\u5355\u6b21\u521b\u9020\u662f\u5c40\u90e8\u7684\uff0c\u5355\u4e2a\u5c40\u90e8\u573a\u666f\u53ef\u4ee5\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u5982\u679c\u628a\u8fd9\u79cd\u80fd\u529b\u5f00\u53d1\uff0c\u4f8b\u5982\u57fa\u4e8e\u4e00\u5757\u56fa\u5b9a\u7c7b\u578b\u7684\u5730\u6216\u8005\u73af\u5883\uff0c\u7ec4\u6210\u81ea\u5df1\u7684\u5c0f\u4e16\u754c\uff0c\u5c31\u5bb9\u6613\u8ba9\u4e00\u4e9b\u5fd7\u540c\u9053\u5408\u7684\u4eba\u4e00\u8d77\u53bb\u6784\u5efa\u4e00\u4e2a\u4ed6\u4eec\u559c\u6b22\u7684\u4e16\u754c\uff0c\u53ef\u4ee5\u662f\u79d1\u5e7b\uff0c\u6b66\u4fa0\u7b49\u7b49\u98ce\u683c"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9f13\u52b1\u5408\u4f5c\u4e0e\u534f\u4f5c\uff0c\u662f\u975e\u5e38\u597d\u7684\u534f\u4f5c\u4f8b\u5b50"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u7ed9\u5176\u4ed6\u4eba\u7684\u6e38\u89c8\u5e26\u6765\u66f4\u5927\u7684\u5438\u5f15\u529b\uff0c\u5b8f\u5927\u7684\uff0c\u5f62\u6210\u4f17\u591a\u5177\u6709\u66f4\u590d\u6742\u8868\u8fbe\u548c\u6587\u5316\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u6587\u5316\u7684\u611f\u89c9\u9700\u8981\u590d\u6742\u6027\u6765\u8868\u73b0\uff0c\u5c40\u90e8\u8f83\u5c0f\u7684\u573a\u666f\u5f80\u5f80\u65e0\u6cd5\u8868\u8fbe\u4e00\u79cd\u6587\u5316\uff0c\u751a\u81f3\u4e00\u4e2a\u6587\u660e"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u660e\u672c\u8eab\u81ea\u5e26\u6545\u4e8b\u4e86")),(0,n.kt)("p",null,"\u5927\u5730\u56fe\u5728PC Create\u4e0a\u521b\u5efa\uff0c\u6216\u8005\u63d0\u4f9b\u4e00\u4e9b\u6a21\u7248\uff0c\u50cfMinecraft Editor \u4e00\u6837"),(0,n.kt)("h3",{id:"487-\u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"},"4.8.7 \u865a\u62df\u4e16\u754c\u5de8\u5927\u7684\u63a2\u7d22\u6210\u672c"),(0,n.kt)("p",null,"\u867d\u7136\u6c89\u6d78\u5f0f\u3001\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\u5177\u6709\u5f88\u597d\u7684\u4f53\u9a8c\uff0c\u4f46\u662f\u76f8\u5bf9\u4e8e\u5f71\u89c6\u6765\u8bf4\uff0c\u5176\u63a2\u7d22\u6210\u672c\u66f4\u9ad8\uff0c\u4f8b\u5982\u770b\u5b8c\u4e00\u90e8\u9b54\u6212\u9700\u8981\u4e09\u4e2a\u5c0f\u65f6\uff0c\u4f46\u662f\u63a2\u7d22\u4e00\u4e2a\u4e2d\u571f\u4e16\u754c\u53ef\u80fd\u603b\u5171\u4f1a\u82b1\u8d39\u5f88\u591a\u5929\u65f6\u95f4\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u5bf9\u4e8e\u666e\u901a\u7528\u6237\u6765\u8bb2\u53ef\u80fd\u662f\u4e0d\u53ef\u884c\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u666e\u901a\u7528\u6237\u53ef\u80fd\u4ec5\u4ec5\u968f\u4fbf\u770b\u770b\uff0c\u65e0\u6cd5\u6df1\u5165\u4f53\u9a8c\u6545\u4e8b"),(0,n.kt)("li",{parentName:"ul"},"\u73a9\u5bb6\u5bf9\u865a\u62df\u4e16\u754c\u7684\u63a2\u7d22\u672c\u8d28\u4e0a\u6e90\u4e8e\u672a\u77e5\u7684\u4f53\u9a8c\uff0c\u8fd9\u79cd\u672a\u77e5\u5e76\u4e0d\u662f\u5355\u5355\u4e00\u4e2a\u4e00\u4e2a\u5b8f\u5927\u7684\u865a\u62df\u4e16\u754c\uff0c\u800c\u662f\u6545\u4e8b\u6216\u8005\u73a9\u6cd5\uff0c\u56e0\u6b64\u9700\u8981\u82b1\u5927\u91cf\u7cbe\u529b\u8bbe\u8ba1\uff0c\u800c\u4e00\u65e6\u73a9\u5bb6\u63a2\u7d22\u73a9\u6240\u6709\u672a\u77e5\uff0c\u90a3\u4e48\u8fd9\u4e2a\u4e16\u754c\u4fbf\u4e0d\u518d\u65b0\u5947\uff0c\u9664\u975e\u5b83\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u4e0d\u65ad\u4f1a\u6709\u65b0\u5947\u6545\u4e8b\u53d1\u751f\uff0c\u90a3\u5fc5\u987b\u662f\u4e00\u4e2a\u5f00\u653e\u4e16\u754c\uff0c\u7528\u6237\u80fd\u591f\u9ad8\u5ea6\u81ea\u5b9a\u4e49\u6216\u8005\u751a\u81f3\u81ea\u6211\u6f14\u8fdb")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5f00\u653e\u4e16\u754c\u67b6\u6784\u53ca\u5176\u91cd\u8981"),(0,n.kt)("h2",{id:"49-third-party-apps"},"4.9 Third party apps"),(0,n.kt)("h2",{id:"410--\u793e\u4f1a\u4ef7\u503c"},"4.10 \u793e\u4f1a\u4ef7\u503c"),(0,n.kt)("h3",{id:"4101-\u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"},"4.10.1 \u66f4\u597d\u7684\u4fe1\u606f\u4f20\u64ad\u5a92\u4ecb\u5373\u4fe1\u606f\u8868\u8fbe\u65b9\u6cd5"),(0,n.kt)("p",null,"\u6309\u7167\u4fe1\u606f\u7684\u7ec4\u7ec7\u7279\u5f81\uff0c\u5176\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u975e\u5e38\u7b80\u5355\uff0c\u80fd\u591f\u7528\u7ed3\u6784\u5316\u7684\u65b9\u5f0f\u7b80\u5355\u63cf\u8ff0\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u4e00\u4e2a\u516c\u5f0f\uff0c\u4e00\u95f4\u4e8b\u60c5\u7684\u65b9\u6cd5\uff0c\u83dc\u8c31\uff0c\u4e00\u6761\u670b\u53cb\u5708\uff0c\u4e00\u6bb5\u89c6\u9891\u7b49\u3002\u8fd9\u79cd\u4fe1\u606f\u6240\u8868\u793a\u7684\u542b\u4e49\u901a\u5e38\u662f\u660e\u786e\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u79cd\u662f\u63cf\u8ff0\u4eba\u4e0e\u4eba\u3001\u6216\u8005\u4eba\u4e0e\u4e8b\u60c5\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u901a\u5e38\u6bd4\u8f83\u62bd\u8c61\uff0c\u5b83\u4e0d\u80fd\u6709\u4e00\u4e2a\u5f88\u786e\u5b9a\u7684\u3001\u7b80\u5355\u7684\u65b9\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff0c\u6bd4\u5982\u4e00\u4e2a\u6545\u4e8b\uff0c\u4e00\u95f4\u827a\u672f\u54c1\uff0c\u5bf9\u4ed6\u7684\u4f20\u64ad\u6d89\u53ca\u4e00\u4e9b\u89e3\u91ca\uff0c\u751a\u81f3\u4e00\u4e9b\u76f8\u5173\u7684\u89c6\u89c9\u7b26\u53f7\uff0c\u6587\u5316\u7b49\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u79cd\u662f\u673a\u5236\uff0c\u8fd9\u79cd\u673a\u5236\u5f80\u5f80\u662f\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u65e2\u4e0d\u80fd\u50cf\u7b2c\u4e00\u79cd\u4fe1\u606f\u90a3\u6837\u80fd\u591f\u7b80\u5355\u63cf\u8ff0\u548c\u4f20\u64ad\uff0c\u4e5f\u4e0d\u50cf\u7535\u5f71\u7b49\u827a\u672f\u54c1\u90a3\u6837\u53ef\u4ee5\u76f4\u63a5\u89e3\u8bfb\uff0c\u7531\u4e8e\u673a\u5236\u5185\u5b50\u7cfb\u7edf\u6784\u9020\u590d\u6742\u7684\u76f8\u4e92\u5173\u7cfb\uff0c\u56e0\u6b64\u5b83\u9700\u8981\u65b0\u7684\u5a92\u4ecb\u8fdb\u884c\u4f20\u64ad\u3002")),(0,n.kt)("p",null,"\u7535\u5f71\u66f4\u591a\u662f\u5bf9\u4eba\u4e0e\u4eba\u6216\u8005\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7684\u5173\u7cfb\u8fdb\u884c\u63cf\u8ff0\uff0c\u7406\u89e3\u548c\u8868\u8fbe\uff0c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u662f\u975e\u7ed3\u6784\u5316\u7684\uff0c\u5b83\u5f88\u96be\u4f7f\u7528\u4e00\u5b9a\u7684\u89c4\u5219\u3001\u6a21\u578b\u3001\u5b9a\u5f8b\u3001\u516c\u5f0f\u7b49\u7b49\u8fdb\u884c\u63cf\u8ff0\uff0c\u6240\u4ee5\u8fd9\u79cd\u975e\u5e38\u9002\u5408\u4e8e\u6587\u5b66\u3001\u7535\u5f71\u3001\u7f8e\u672f\u3001\u620f\u5267\u7b49\u7b49\u5f62\u5f0f\u3002"),(0,n.kt)("p",null,"\u4e0e\u56f4\u7ed5\u4eba\u7684\u5173\u7cfb\u60c5\u611f\u4e0d\u540c\u7684\u53e6\u4e00\u4e2a\u7ef4\u5ea6\u662f\u7406\u89e3\u793e\u4f1a\u8fd0\u4f5c\u7684\u673a\u5236\uff0c\u6bd4\u5982\u4ea4\u901a\uff0c\u65c5\u6e38\u8def\u7ebf\uff0c\u57ce\u5e02\u4e0d\u540c\u7684\u5206\u533a\uff0c\u5de5\u4f5c\u4e0e\u516c\u53f8\u7684\u5206\u7c7b\u7b49\u7b49\uff0c\u8fd9\u4e9b\u53cd\u5e94\u7684\u662f\u793e\u4f1a\u673a\u5236\uff0c\u4ed6\u4eec\u662f\u53ef\u4ee5\u91cf\u5316\u548c\u7ed3\u6784\u5316\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"civilization",src:l(9460).Z,width:"3840",height:"2160"})),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u4e00\u4e2a\u7279\u70b9\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u5f80\u5f80\u662f\u5bb9\u6613\u7528\u6bd4\u8f83\u7b80\u5355\u7684\u4fe1\u606f\u8fdb\u884c\u8868\u8fbe\uff0c\u5c3d\u7ba1\u8fd9\u4e9b\u7b80\u77ed\u7684\u4fe1\u606f\u662f\u9700\u8981\u975e\u51e1\u7684\u4eba\u5bf9\u5176\u8fdb\u884c\u9ad8\u5ea6\u7406\u89e3\u548c\u62bd\u8c61\u63d0\u70bc\uff0c\u6bd4\u5982\u4e00\u90e8\u7535\u5f71\u901a\u5e38\u5c31\u8db3\u4ee5\u8bb2\u8ff0\u4e00\u4e2a\u6df1\u523b\u7684\u9053\u7406"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u673a\u5236\u5374\u662f\u66f4\u590d\u6742\u7684\uff0c\u56e0\u4e3a\u673a\u5236\u672c\u8eab\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u7531\u8bb8\u591a\u76f8\u4e92\u76f8\u5173\u7684\u5b50\u7cfb\u7edf\u6784\u6210\uff0c\u800c\u8fd9\u79cd\u5173\u7cfb\u5f80\u5f80\u4e0d\u662f\u4eba\u6613\u4e8e\u7406\u89e3\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4eba\u5f88\u5bb9\u6613\u7406\u89e3\u4e00\u4e2a\u516c\u5f0f\uff0c\u4f46\u662f\u590d\u6742\u7cfb\u7edf\u65e0\u6cd5\u8868\u8ff0\u6210\u4e00\u4e2a\u5355\u4e00\u7684\u516c\u5f0f\uff0c\u5b83\u662f\u4e00\u4e2a\u591a\u7ef4\u7ebf\u6027\u51fd\u6570\uff0c\u5b83\u7684\u7406\u89e3\u8574\u85cf\u5728\u6240\u6709\u90a3\u4e9b\u5173\u7cfb\u5f53\u4e2d\uff0c\u4e0d\u540c\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u4f1a\u5bfc\u81f4\u5dee\u5f02\u5f88\u5927\u7684\u5173\u7cfb\uff0c\u6709\u591a\u79cd\u56e0\u7d20\u7684\u5f71\u54cd\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6240\u4ee5\u4ed6\u6bd4\u5982\u4e0d\u592a\u80fd\u591f\u7528\u4e00\u90e8\u7535\u5f71\u6765\u8868\u8ff0\uff0c\u6216\u8005\u8bf4\u7535\u5f71\u4e1a\u52a1\u80fd\u591f\u505a\u4e00\u4e9b\u79d1\u666e\uff0c\u4f46\u662f\u771f\u6b63\u7684\u7406\u89e3\u4f60\u5fc5\u987b\u53bb\u4f7f\u7528\u90a3\u4e2a\u7cfb\u7edf\uff0c\u8fd9\u79cd\u201c\u4f7f\u7528\u201d\u4ece\u6570\u5b57\u5316\u7684\u89d2\u5ea6\u6765\u8bb2\u5c31\u662f\u6a21\u62df\uff0c\u800c\u6e38\u620f\u5c31\u662f\u8fd9\u6837\u6a21\u62df\u7684\u6838\u5fc3\u65b9\u5f0f\u4e4b\u4e00")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5927\u90e8\u5206\u8fd9\u6837\u7684\u793e\u4f1a\u673a\u5236\u90fd\u53ef\u4ee5\u501f\u52a93D\u6765\u8fdb\u884c\u5b66\u4e60\u548c\u7406\u89e3\uff0c\u751a\u81f3\u53c2\u4e0e\u5f71\u54cd"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u4eba\u5176\u5b9e\u662f\u6df1\u5ea6\u8ddf\u793e\u4f1a\u9ad8\u5ea6\u8026\u5408\u7684\uff0c\u5f88\u591a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u4e5f\u6765\u6e90\u4e8e\u793e\u4f1a\u673a\u5236\u7684\u5f71\u54cd\uff0c\u6240\u4ee5\u793e\u4f1a\u673a\u5236\u672c\u8d28\u4e0a\u4e5f\u662f\u53e6\u4e00\u79cd\u5e2e\u52a9\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u5173\u7cfb\u7684\u4e00\u79cd\u65b9\u5f0f"),(0,n.kt)("h3",{id:"4102-\u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"},"4.10.2 \u91ca\u653e\u5b9e\u65f6\u6a21\u62df\u7a0b\u5e8f\u673a\u5236\u7684\u6f5c\u80fd"),(0,n.kt)("p",null,"\u5982\u4e0a\u4e00\u8282\u7684\u4fe1\u606f\u5206\u7c7b\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u6a21\u578b\u53ea\u9002\u5408\u5904\u7406\u7ed3\u6784\u5316\u7684\u8ba1\u7b97\uff0c\u8fd9\u79cd\u8ba1\u7b97\u901a\u5e38\u662f\u786e\u5b9a\u7684\uff0c\u5176\u5e94\u7528\u7ed3\u6784\u901a\u5e38\u4e5f\u662f\u4e0d\u4f1a\u7684\uff0c\u4f8b\u5982\u5fae\u4fe1\u3001\u6dd8\u5b9d\u3001\u6296\u97f3\u3001\u652f\u4ed8\u5b9d\u3001\u5927\u4f17\u70b9\u8bc4\u7b49\u7b49\u8fd9\u6837\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e9b\u7a0b\u5e8f\u5f53\u4e2d\uff0c\u901a\u5e38\u662f\u7531\u7528\u6237\u53d1\u51fa\u4e00\u4e2a\u64cd\u4f5c\u6307\u793a\uff0c\u7136\u540e\u5e94\u7528\u7a0b\u5e8f\u6309\u7167\u56fa\u5b9a\u7684\u903b\u8f91\u6267\u884c\u67d0\u4e2a\u7ed3\u6784\u57fa\u672c\u4e0a\u4e0d\u53d8\u7684\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"complex-system.024",src:l(9792).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"\u7136\u800c\uff0c\u73b0\u5b9e\u5f53\u4e2d\u8fd8\u6709\u5927\u91cf\u7684\u7c7b\u4f3c\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\uff0c\u8fd9\u7c7b\u4fe1\u606f\u5bf9\u4eba\u4eec\u7406\u89e3\u8fd9\u4e2a\u4e16\u754c\u548c\u793e\u4f1a\u53ef\u80fd\u66f4\u52a0\u81f3\u5173\u91cd\u8981\uff0c\u5e76\u4e14\u8fd9\u7c7b\u4fe1\u606f\u901a\u5e38\u4e0d\u80fd\u4f7f\u7528\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u8fdb\u884c\u8868\u8fbe\u3002\u6e38\u620f\u7a0b\u5e8f\u67b6\u6784\u662f\u975e\u5e38\u9002\u5408\u5904\u7406\u8fd9\u7c7b\u4fe1\u606f\u7684\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u76ee\u524d\u8fd8\u6ca1\u6709\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u4e0d\u7ba1\u662f\u5728\u5f00\u53d1\u5de5\u5177\u3001\u5f00\u53d1\u6d41\u7a0b\u8fd8\u662f\u5f00\u53d1\u6210\u672c\u4e0a\u5b83\u90fd\u5b58\u5728\u7740\u5f88\u591a\u95ee\u9898\uff0c\u8fd8\u4e0d\u5177\u5907\u8fd9\u6837\u7684\u6f5c\u80fd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cRealityIS\u6709\u673a\u4f1a\u53bb\u91ca\u653e\u8fd9\u6837\u7684\u6f5c\u80fd\uff0c\u4f7f\u5f97\u6e38\u620f\u7c7b\u5b9e\u65f6\u4e92\u52a8\u5185\u5bb9\u7684\u5f00\u53d1\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u4f8b\u5982\u8ddf\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5dee\u4e0d\u591a\u3002\u4e5f\u8bb8\u5728\u8fd9\u6837\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u79cd\u5b9e\u65f6\u6a21\u62df\u7684\u7a0b\u5e8f\u67b6\u6784\u4e5f\u8bb8\u53ef\u4ee5\u6210\u4e3a\u6574\u4e2a\u6570\u5b57\u5316\u7684\u5e38\u6001\u3002\u8fd9\u6837\u6570\u5b57\u5316\u80fd\u591f\u5728\u4eba\u7c7b\u6587\u660e\u8fdb\u7a0b\u4e2d\u8fdb\u4e00\u6b65\u53d1\u751f\u66f4\u5927\u7684\u63a8\u52a8\u4f5c\u7528\uff0c\u56e0\u4e3a\u4eba\u4e0e\u4eba\u4e4b\u95f4\u6709\u4e00\u79cd\u66f4\u9ad8\u6548\u3001\u66f4\u5177\u8868\u8fbe\u529b\u7684\u4fe1\u606f\u8868\u8fbe\u65b9\u5f0f\u3002"),(0,n.kt)("h3",{id:"4103-\u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"},"4.10.3 \u590d\u6742\u7cfb\u7edf\u7684\u6a21\u62df"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u7531\u8bb8\u591a\u90e8\u5206\u7ec4\u6210\uff0c\u8fd9\u4e9b\u90e8\u5206\u5355\u4e2a\u770b\u4e00\u822c\u90fd\u5f88\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u628a\u5b83\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\u540e\u5f62\u6210\u7684\u590d\u6742\u7cfb\u7edf\u5927\u90fd\u80fd\u8868\u73b0\u51fa\u65e0\u6cd5\u9884\u6d4b\u7684\u60ca\u4eba\u7279\u6027\uff0c\u5f88\u96be\u901a\u8fc7\u5355\u72ec\u62c6\u5206\u5206\u6790\u6bcf\u4e2a\u7ec4\u6210\u90e8\u5206\u6765\u89e3\u91ca\u8fd9\u79cd\u73b0\u8c61\u3002\u53ef\u4ee5\u901a\u8fc7\u5f15\u5165\u6b63/\u8d1f\u53cd\u9988\u5faa\u73af\u6765\u5f71\u54cd\u6574\u4e2a\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u590d\u6742\u7cfb\u7edf\u5176\u5b9e\u80fd\u591f\u7528\u6765\u8868\u8fbe\u662f\u771f\u5b9e\u751f\u6d3b\u4e2d\u5927\u91cf\u7684\u4fe1\u606f\uff0c\u4ed6\u5bf9\u4e8e\u6211\u4eec\u7406\u89e3\u4eba\u4e0e\u4eba\u4e4b\u95f4\u3001\u4eba\u4e0e\u793e\u4f1a\u4e4b\u95f4\u7b49\u7b49\u7684\u5173\u7cfb\u81f3\u5173\u91cd\u8981\u3002\u901a\u5e38\u8fd9\u4e9b\u77e5\u8bc6\u8981\u6bd4\u6211\u4eec\u4e00\u822c\u80fd\u591f\u4ece\u4e66\u4e2d\u770b\u5230\u7684\u4fe1\u606f\u8981\u591a\u5f97\u591a\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pasted-image",src:l(2694).Z,width:"642",height:"449"})),(0,n.kt)("p",null,"\u4f8b\u5982\u5173\u4e8e\u7ba1\u7406\uff0c\u5176\u5b9e\u5b83\u4e5f\u662f\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u6709\u5f88\u591a\u5f71\u54cd\u56e0\u7d20\uff0c\u5982\u679c\u6211\u4eec\u628a\u8fd9\u4e9b\u56e0\u7d20\u7528\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u6765\u8868\u8fbe\uff0c\u8fd9\u6837\u5b66\u4e60\u8005\u53ef\u4ee5\u901a\u8fc7\u4ea4\u4e92\u7684\u65b9\u5f0f\uff0c\u5bf9\u67d0\u4e9b\u5b50\u7cfb\u7edf\u65bd\u52a0\u5f71\u54cd\uff0c\u6765\u5b9e\u65f6\u770b\u5230\u5b83\u4eec\u5bf9\u6574\u4e2a\u7ba1\u7406\u4f53\u7cfb\u5f71\u54cd\u7684\u6548\u679c\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u6211\u4eec\u4e0d\u4ec5\u53ef\u4ee5\u7528\u6765\u5b66\u4e60\u8fd9\u6837\u7684\u4e00\u4e9b\u7cfb\u7edf\u673a\u5236\uff0c\u4e5f\u53ef\u4ee5\u7528\u6765\u5bf9\u4e00\u4e9b\u673a\u5236\u5176\u8fdb\u884c\u6a21\u62df\u548c\u9884\u6d4b\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u80fd\u529b\u662f\u5f88\u96be\u901a\u8fc7\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u6765\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u8fd9\u6837\u7684\u7cfb\u7edf\u5c06\u7ed9\u4eba\u7c7b\u7684\u6587\u660e\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u63a8\u8fdb\u3002"),(0,n.kt)("h2",{id:"411-\u6807\u51c6"},"4.11 \u6807\u51c6"),(0,n.kt)("p",null,"\u57fa\u4e8e\u5168\u5c40\u548c\u516c\u5171\u7b26\u53f7\u8868\u6784\u5efa\u6c9f\u901a\u65b9\u5f0f\u548c\u6807\u51c6\u3002"),(0,n.kt)("h3",{id:"4111-\u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"},"4.11.1 \u4f20\u7edf\u505a\u6cd5\u7684\u7f3a\u70b9"),(0,n.kt)("p",null,"Epic CEO\u5728\u5176\u6f14\u8bb2\u300aFundamental Principles and Technologis for the Metaverse\u300b\u4e2d\u6307\u51fa\uff0c\u4e3a\u4e86\u5b9e\u73b0\u4e00\u4e2aOpen Metaverse\uff0c\u50cf\u6211\u4eec\u4eca\u5929\u7684\u5404\u79cd\u4e92\u64cd\u4f5c\u7cfb\u7edf\u5982Web\u7b49\u4e00\u6837\uff0c\u9700\u8981\u5b9a\u4e49\u975e\u5e38\u591a\u7684\u6807\u51c6\u7528\u6765\u5b9e\u73b0Metaverse\u5185\u90e8\u5404\u4e2a\u5b9e\u4f53\u3001\u5bf9\u8c61\u7b49\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4f8b\u5982\u5173\u4e8e\u7528\u6237\u7684\u8eab\u4efd\u3001\u8d44\u4ea7\u6240\u6709\u6743\u3001\u793e\u4ea4\u56fe\u8c31\u7b49\u7b49\u3002\u4ed6\u8fdb\u4e00\u6b65\u6307\u51fa\u53ef\u4ee5\u53c2\u89c1\u73b0\u5728\u7684\u4e00\u4e9b\u6807\u51c6\u5982Html+JavaScript\u7b49\u8fdb\u884c\u8bbe\u8ba1\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u4f46\u6211\u4eec\u518d\u6df1\u5165\u53bb\u601d\u8003\u8fd9\u79cd\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u4f1a\u53d1\u73b0\u4e5f\u8bb8\u6211\u4eec\u5e76\u4e0d\u80fd\u4f7f\u7528\u540c\u6837\u7684\u65b9\u5f0f\u53bb\u8bbe\u8ba1Metaverse\u7684\u6807\u51c6\uff0c\u4f8b\u5982\u5176\u4e2d\u4e24\u4e2a\u6700\u91cd\u8981\u7684\u539f\u56e0\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5b9e\u65f6\u6027"),"\uff1a\u73b0\u5728\u7684\u6807\u51c6\u6307\u5b9a\u90fd\u662f\u901a\u8fc7\u6587\u672c\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u5404\u4e2a\u5b50\u7cfb\u7edf\u5bf9\u6587\u672c\u8fdb\u884c\u89e3\u6790\uff0c\u8fd9\u79cd\u5927\u91cf\u5b9e\u65f6\u7684\u6587\u672c\u89e3\u6790\u548c\u5b57\u7b26\u4e32\u5904\u7406\u5728\u6e38\u620f\u7a0b\u5e8f\u4e2d\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e92\u64cd\u4f5c\u6027"),"\uff1a\u5373\u4f7f\u53ef\u4ee5\u89e3\u51b3\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u672c\u8d28\u4e0a\u53ea\u662f\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u6211\u4eec\u5c06\u522b\u4eba\u7684\u4ee3\u7801\u653e\u5728\u6211\u4eec\u7684\u73af\u5883\u4e2d\u521d\u59cb\u5316\u548c\u5206\u914d\u53d8\u91cf\uff0c\u56e0\u6b64\u53ef\u4ee5\u83b7\u5f97\u76f4\u63a5\u7684\u53d8\u91cf\u5730\u5740\uff0c\u4f46\u662f\u62ff\u5230\u5730\u5740\u4e4b\u540e\u8981\u8fdb\u884c\u6b63\u786e\u7684\u901a\u4fe1\u8fd8\u662f\u9700\u8981\u4e86\u89e3\u5173\u4e8e\u51fd\u6570\u7684\u5b9a\u4e49\u7b49\u7b49\uff0c\u5426\u5219\u6211\u4eec\u53ea\u80fd\u7ea6\u5b9a\u4e00\u4e9b\u56fa\u5b9a\u7684\u8c03\u7528\u884c\u4e3a\u3002")),(0,n.kt)("p",null,"\u4ee5\u4e0a\u8fd9\u5957\u673a\u5236\u5047\u8bf4\u80fd\u591f\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u5b83\u4e5f\u53ea\u662f\u9488\u5bf9\u53cc\u65b9\u7ea6\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u5c31\u9650\u5236\u4e86\u81ea\u7531\u5ea6\u3002\u4f20\u7edf\u7684\u4e00\u4e9b\u4e92\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u5b83\u4eec\u4e4b\u95f4\u7684\u901a\u4fe1\u975e\u5e38\u7b80\u5355\uff0c\u57fa\u672c\u4e0a\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u56fa\u5b9a\u7684\u89c4\u5219\u8fdb\u884c\u63cf\u8ff0\uff0c\u4e14\u6807\u51c6\u4e4b\u95f4\u53d8\u66f4\u7684\u9891\u7387\u975e\u5e38\u4f4e\u3002"),(0,n.kt)("p",null,"\u800cMetaverse\u662f\u4e00\u4e2a\u66f4\u52a0\u6d3b\u8dc3\u7684\u5927\u4e16\u754c\uff0c\u5b83\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u8fd0\u4f5c\uff0c\u56e0\u6b64\u5b83\u672c\u8d28\u4e0a\u4e0d\u80fd\u4f7f\u7528\u8fd9\u79cd\u9650\u5236\u6bd4\u8f83\u5927\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u6211\u4eec\u751f\u6d3b\u4e2d\u8ddf\u5176\u4ed6\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u975e\u5e38\u81ea\u7136\u7684\uff0c\u6211\u4eec\u6709\u5f88\u5927\u7684\u81ea\u7531\u5ea6\uff0c\u6ca1\u6709\u88ab\u4e25\u683c\u9650\u5236\u6bcf\u4ef6\u4e8b\u60c5\u4e00\u5b9a\u8981\u6309\u600e\u6837\u7684\u65b9\u5f0f\u505a\uff0c\u5f53\u7136\u5b83\u4e5f\u5b58\u5728\u4e00\u90e8\u5206\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u4f8b\u5982\u6211\u4eec\u8981\u9075\u5faa\u4ea4\u901a\u89c4\u5219\uff0c\u6cd5\u5f8b\u89c4\u5219\u7b49\u7b49\u3002"),(0,n.kt)("h3",{id:"4112-\u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"},"4.11.2 \u5f00\u653e\u7684\u6807\u51c6\u67b6\u6784"),(0,n.kt)("p",null,"\u5982\u679cMetaverse\u662f\u8981\u5c3d\u53ef\u80fd\u6a21\u62df\u771f\u5b9e\u4e16\u754c\uff0c\u6216\u8005\u8bf4\u5b83\u7684\u6574\u4e2a\u7cfb\u7edf\u66f4\u7b26\u5408\u4eba\u7c7b\u7684\u8ba4\u77e5\uff0c\u5b83\u7684\u6807\u51c6\u5fc5\u987b\u652f\u6301\u4e24\u79cd\u65b9\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e2\u8981\u80fd\u591f\u50cf\u4f20\u7edf\u7684\u6807\u51c6\u90a3\u6837\u5236\u5b9a\u56fa\u5b9a\u3001\u9700\u8981\u516c\u4f17\u5171\u540c\u9075\u5b88\u3001\u4e0d\u592a\u5bb9\u6613\u53d8\u5316\u7684\u6807\u51c6\uff0c\u5982\u4ea4\u901a\u89c4\u5219"),(0,n.kt)("li",{parentName:"ul"},"\u53c8\u8981\u80fd\u591f\u652f\u6301\u5c40\u90e8\u7fa4\u4f53\u4e4b\u95f4\u5b9a\u4e49\u81ea\u5df1\u7684\u5c0f\u6807\u51c6\uff0c\u5e76\u4e14\u5bf9\u4e8e\u8fd9\u4e9b\u5c0f\u6807\u51c6\uff0c\u7fa4\u4f53\u4e4b\u5916\u7684\u53c2\u4e0e\u8005\u53ea\u8981\u613f\u610f\u9075\u5faa\u8be5\u5c0f\u6807\u51c6\u5bf9\u5e94\u7684\u534f\u5b9a\uff0cTA\u4eec\u5c31\u53ef\u4ee5\u5f88\u8f7b\u677e\u5730\u53c2\u4e0e\u5230\u8fd9\u4e2a\u5c0f\u7fa4\u4f53\u4e2d\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u673a\u5236\u5f88\u50cf\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\uff0c\u5b83\u8ba9\u4eba\u4eec\u5373\u6709\u5f88\u5927\u7684\u7075\u6d3b\u5ea6\u548c\u81ea\u7531\uff0c\u540c\u65f6\u4e5f\u53d7\u4e00\u5b9a\u7684\u793e\u4f1a\u7ea6\u675f\u3002"),(0,n.kt)("p",null,"RealityIS\u7684\u7b26\u53f7\u8868\u5c31\u63d0\u4f9b\u4e86\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7b26\u53f7\u8868\u672c\u8eab\u63d0\u4f9b\u4e86\u4e00\u79cd\u5b9a\u4e49\u6807\u51c6\u7684\u673a\u5236\uff1a\u53ea\u8981\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u5305\u542b\uff08\u7c7b\u6bd4\u4e8e\u9075\u5faa\uff09\u8fd9\u6837\u7684\u7b26\u53f7\u6570\u636e\u5b9a\u4e49\uff0c\u5b83\u4eec\u81ea\u7136\u5c31\u9075\u5faa\u4e86\u76f8\u540c\u7684\u6807\u51c6\u3002\u6240\u4ee5\uff0c\u5bf9\u4e8e\u5168\u5c40\u7b26\u53f7\u8868\uff0c\u8fd9\u5c31\u662f\u5bf9\u5e94\u4e00\u4e9b\u516c\u5171\u6807\u51c6\uff0c\u800c\u5bf9\u4e8e\u4e00\u4e9b\u5c40\u90e8\u7684\u5f00\u53d1\u8005\uff0c\u5b83\u4eec\u53ef\u4ee5\u521b\u5efa\u81ea\u5df1\u7684\u5c40\u90e8\u7b26\u53f7\u8868\uff0c\u4ece\u800c\u6784\u5efa\u5c40\u90e8\u5c0f\u6807\u51c6\uff0c\u8fd9\u6837\u7406\u8bba\u4e0a\u6765\u8bf4\u5c31\u662f\u4e00\u79cd\u5b8c\u5168\u7684\u81ea\u7531\u5ea6\uff0c\u6bd4\u5982\u4f60\u751a\u81f3\u53ef\u4ee5\u5b9a\u4e49\u522b\u4eba\u5b8c\u5168\u4e0d\u77e5\u9053\u7684\u6807\u51c6\uff0c\u8fd9\u79cd\u81ea\u7531\u5ea6\u662f\u5b58\u5728\u7684\uff0c\u53ea\u662f\u90a3\u6837\u4f60\u6ca1\u6709\u529e\u6cd5\u8ddf\u522b\u4eba\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u4f60\u9700\u8981\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u8fd9\u79cd\u63a8\u5e7f\u4e5f\u4e0d\u662f\u628a\u4f60\u7684\u4e1c\u897f\u653e\u5230\u4e00\u4e2a\u7ec4\u4ef6\u5e02\u573a\u6216\u8005\u53bb\u505a\u5e7f\u544a\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u53bb\u63a8\u5e7f\u4f60\u7684\u6807\u51c6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7528\u6237\u5c42\u9762"),"\uff1a\u4f60\u53ea\u9700\u8981\u5c06\u4f60\u7684\u4f5c\u54c1\u653e\u7f6e\u5230\u8fd9\u4e2a\u4e16\u754c\u4e2d\uff0c\u5f53\u6709\u5176\u4ed6\u4eba\u4f53\u9a8c\u5230\u5b83\u65f6\uff0c\u4ed6\u53ef\u4ee5\u76f4\u63a5\u5c31\u590d\u5236\u4f60\u7684\u7ec4\u4ef6\u3002\u867d\u7136\u8fd9\u79cd\u65b9\u5f0f\u5e76\u6ca1\u6709\u5f15\u5165\u65b0\u7684\u5f00\u53d1\u8005\u6765\u9075\u5faa\u4f60\u7684\u6807\u51c6\uff0c\u4f46\u662f\u5b83\u5f15\u5165\u548c\u589e\u52a0\u4e86\u4f7f\u7528\u5b83\u7684\u7528\u6237\u3002\u5b9e\u9645\u4e0a\u6211\u4eec\u5efa\u7acb\u7684\u6807\u51c6\uff0c\u5f53\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u652f\u6301\u4e4b\u540e\uff0c\u6211\u4eec\u6700\u7ec8\u7684\u76ee\u7684\u8fd8\u662f\u5e0c\u671b\u901a\u8fc7\u66f4\u591a\u7684\u652f\u6301\u7a0b\u5e8f\u6765\u83b7\u5f97\u4f7f\u7528\u7684\u7528\u6237\uff0c\u4ece\u8fd9\u4e2a\u5c42\u9762\u6765\u8bb2\uff0c\u5b83\u7684\u7ed3\u679c\u662f\u4e00\u6837\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u8005\u5c42\u9762"),"\uff1a\u6bcf\u4e2a\u5f00\u53d1\u8005\u5b9a\u4e49\u7684\u6807\u51c6\u90fd\u53ef\u4ee5\u53d1\u5e03\u5230\u4e00\u4e2a\u5171\u4eab\u6807\u51c6\u5e93\uff0c\u5176\u5b9e\u5c31\u662f\u5171\u4eab\u7b26\u53f7\u8868\u3002\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u641c\u7d22\u5171\u4eab\u5e93\uff0c\u5e76\u901a\u8fc7\u5bf9\u5176\u5f15\u7528\u4ee5\u652f\u6301\u8fd9\u4e2a\u6807\u51c6\u3002\u8fd9\u6837\uff0c\u5b9a\u4e49\u7684\u6bd4\u8f83\u597d\u7684\u6807\u51c6\u5c31\u5bb9\u6613\u88ab\u66f4\u591a\u7684\u5f00\u53d1\u8005\u5f15\u7528\u548c\u652f\u6301\uff0c\u56e0\u6b64\u88ab\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002")),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u5f62\u6210\u7684\u6807\u51c6\u7cfb\u7edf\u662f\u4e00\u5957\u81ea\u6211\u81ea\u8fdb\u5316\u7684\u6807\u51c6\u67b6\u6784\uff0c\u5728\u8fd9\u6837\u7684\u67b6\u6784\u4e0b\uff0c\u4efb\u4f55\u6807\u51c6\u4e0d\u4ec5\u80fd\u591f\u88ab\u5176\u4ed6\u72ec\u7acb\u5f00\u53d1\u8005\u4efb\u610f\u652f\u6301\uff0c\u4ee5\u5f62\u6210\u6807\u51c6\u7684\u63a8\u5e7f\uff1b\u5e76\u4e14\u901a\u8fc7\u53ca\u65f6\u8d2d\u4e70\u7b49\u65b9\u5f0f\uff0c\u6807\u51c6\u80fd\u591f\u88ab\u66f4\u76f4\u63a5\u7684\u901a\u8fc7\u7528\u6237\u8fdb\u884c\u666e\u53ca\uff0c\u4ece\u800c\u80fd\u591f\u63a8\u52a8\u90a3\u4e9b\u66f4\u597d\u7684\u6807\u51c6\u88ab\u66f4\u591a\u7684\u4eba\u7fa4\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u4e24\u79cd\u673a\u5236\uff0c\u6700\u7ec8\u6574\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u4f7f\u6807\u51c6\u5b9e\u73b0\u81ea\u6211\u8fdb\u5316\uff0c\u5e76\u4e14\u5e26\u52a8\u7740\u6574\u4e2a\u4e16\u754c\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\u3002"),(0,n.kt)("h3",{id:"4113-\u6807\u51c6\u7ba1\u7406"},"4.11.3 \u6807\u51c6\u7ba1\u7406"),(0,n.kt)("p",null,"\u6807\u51c6\u5373\u662f\u6574\u4f53\u7cfb\u7edf\u8fdb\u884c\u81ea\u8fdb\u5316\u7684\u673a\u5236\uff0c\u4e5f\u662f\u5b9e\u73b0\u7528\u6237\u5b9e\u4f53\u529f\u80fd\u7684\u673a\u5236\u3002\u5b83\u7684\u6574\u4e2a\u7ba1\u7406\u548c\u66f4\u65b0\u5fc5\u987b\u975e\u5e38\u9ad8\u6548\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7ba1\u7406\u501f\u9274\u4e86\u73b0\u4ee3\u5e94\u7528\u7a0b\u5e8f\u5e02\u573a\u7684\u63a8\u9001\u3001\u6e90\u4ee3\u7801\u5305\u7ba1\u7406\u3001Github\u591a\u7248\u672c\u7ba1\u7406\u7b49\u601d\u60f3\u3002\u4f46\u5b83\u540c\u65f6\u4e5f\u5305\u542b\u4e00\u4e9bRealityIS\u72ec\u7279\u7684\u673a\u5236\u3002\u5b83\u5b9e\u73b0\u7684\u529f\u80fd\u4e0d\u4ec5\u5305\u62ec\u5f00\u53d1\u8005\u5411\u7528\u6237\u7684\u63a8\u9001\uff0c\u4e5f\u5305\u62ec\u7528\u6237\u5411\u5f00\u53d1\u8005\u751a\u81f3\u6807\u51c6\u4f5c\u8005\u7684\u53cd\u5411\u5efa\u8bae\uff0c\u4ee5\u53ca\u6807\u51c6\u4f5c\u8005\u5efa\u8bae\u5f00\u53d1\u8005\u9488\u5bf9\u65b0\u7684\u7b26\u53f7\u8fdb\u884c\u5f00\u53d1\u7684\u5efa\u8bae\uff0c\u603b\u7ed3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u66f4\u6539\uff1a\u5411\u7ec4\u4ef6\u5f00\u53d1\u8005\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u66f4\u6539\uff1a\u5411\u7528\u6237\u63a8\u9001"),(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u6807\u51c6\u5efa\u8bae\uff1a\u6807\u51c6\u4f5c\u8005\u589e\u52a0\u65b0\u7684\u529f\u80fd\uff0c\u5efa\u8bae\u7ec4\u4ef6\u5f00\u53d1\u8005\u652f\u6301"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u589e\u5f3a\uff1a\u7528\u6237\u5bf9\u7ec4\u4ef6\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u5efa\u8bae\uff1a\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u5bf9\u6807\u51c6\u4f5c\u8005\u7684\u5efa\u8bae"),(0,n.kt)("li",{parentName:"ul"},"\u7279\u6027\u5efa\u8bae\uff1a\u7528\u6237\u53ef\u4ee5\u9488\u5bf9\u6807\u51c6\u4f5c\u8005\u6216\u8005\u5f00\u53d1\u8005\u63d0\u51fa\u65b0\u7684\u76f8\u53cd\u7684\u7ec4\u4ef6\u5f00\u53d1\u5efa\u8bae")),(0,n.kt)("p",null,"\u6574\u4e2aRealityIS\u7684\u81ea\u6211\u8fdb\u5316\u529f\u80fd\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u7684\u4e00\u4e9b\u5217\u673a\u5236\u6765\u5b9e\u73b0\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u540c\u65f6\u6807\u51c6\u7ba1\u7406\u7684\u53e6\u5916\u4e00\u4e2a\u5927\u7684\u76ee\u6807\u662f\u4f7f\u7528\u6237\u7684\u7ec4\u4ef6\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0"),"\uff0c\u51cf\u5c11\u7ef4\u62a4\u65e7\u7ec4\u4ef6\u5e26\u6765\u7684\u590d\u6742\u517c\u5bb9\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u7ba1\u7406\u6709\u4e24\u6761\u7ebf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0a\u800c\u4e0b\u7684\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u662f\u81ea\u4e0b\u800c\u4e0a\u7684\u53cd\u9988\u5efa\u8bae")),(0,n.kt)("h4",{id:"41131-\u6807\u51c6\u66f4\u65b0\u901a\u77e5"},"4.11.3.1 \u6807\u51c6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u6807\u51c6\u672c\u8eab\u6709\u66f4\u6539\uff0c\u4f1a\u901a\u77e5\u5230\u6240\u6709\u652f\u6301\u8be5\u6807\u51c6\u7684\u5f00\u53d1\u8005\uff0c\u63d0\u9192\u4ed6\u4eec\u5347\u7ea7\u7248\u672c\u3002\u5f00\u53d1\u8005\u5728\u6536\u5230\u901a\u77e5\u4e4b\u540e\uff0c\u53ef\u4ee5\u53d1\u5e03\u652f\u6301\u65b0\u6807\u51c6\u7684\u65b0\u7248\u672c\u7ec4\u4ef6\u3002\u5f53\u7136\u7ec4\u4ef6\u5f00\u53d1\u8005\u9700\u8981\u5b9e\u73b0\u517c\u5bb9\u6027\u3002\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65b0\u589e\u7b26\u53f7"),(0,n.kt)("li",{parentName:"ul"},"\u7b26\u53f7\u91cd\u547d\u540d"),(0,n.kt)("li",{parentName:"ul"},"\u5220\u9664\u7b26\u53f7")),(0,n.kt)("p",null,"\u6807\u51c6\u66f4\u65b0\u673a\u5236\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\uff0c\u800c\u4e0d\u4f1a\u7531\u4e8e\u4fe1\u606f\u7684\u6ede\u540e\u751a\u81f3\u4e0d\u77e5\u9053\u6807\u51c6\u7684\u6539\u8fdb\u800c\u5bfc\u81f4\u4e00\u4e2a\u6807\u51c6\u8fdf\u8fdf\u65e0\u6cd5\u5feb\u901f\u8fdb\u5316\u3002\u76f8\u6bd4\u4e8e\u4f20\u7edf\u7684\u65b9\u6cd5\uff0c\u6709\u4e24\u9879\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\uff0c\u6807\u51c6\u7684\u4fee\u6539\u53ef\u4ee5\u76f4\u63a5\u901a\u77e5\u5230\u6240\u6709\u5173\u6ce8\u8005\uff1b\u4e2d\u95f4\u6ca1\u6709\u4efb\u4f55\u65f6\u5ef6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u9700\u8981\u5f00\u53d1\u8005\u4e3b\u52a8\u53bb\u5173\u6ce8\u67d0\u4e2a\u6807\u51c6\uff0c\u4ee5\u5f00\u53d1\u8005\u4e3a\u4e2d\u5fc3\u53bb\u63a8\u52a8\u4e00\u9879\u6807\u51c6\u3002\u4f20\u7edf\u7684\u65b9\u6cd5\u662f\u4e00\u4e2a\u5927\u5bb6\u5171\u540c\u6765\u5236\u5b9a\u6807\u51c6\u7684\u8fc7\u7a0b\uff0c\u8fd9\u79cd\u6548\u7387\u6781\u4f4e\uff0c\u800cRealityIS\u53cd\u8fc7\u6765\uff0c\u5148\u5b9a\u4e49\u6807\u51c6\u3002\u53ef\u4ee5\u8fd9\u6837\u505a\u7684\u4e00\u4e2a\u539f\u56e0\u662fRealityIS\u7b80\u5316\u4e86\u6807\u51c6\u7684\u5b9a\u4e49\uff1a\u5b83\u4ec5\u5173\u6ce8\u4e00\u4e2a\u903b\u8f91\u7ed3\u6784\u4e2d\u9700\u8981\u76f8\u4e92\u901a\u4fe1\u7684\u53c2\u6570\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5b83\u76f4\u63a5\u544a\u77e5\u9700\u8981\u4fee\u6539\u7684\u5730\u65b9\uff0c\u7531\u4e8e\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8ddf\u7ec4\u4ef6\u7684\u53d8\u91cf\u5f15\u7528\u5173\u8054\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8ba1\u7b97\u51fa\u54ea\u4e9b\u7ec4\u4ef6\u9700\u8981\u4fee\u6539\uff0c\u4ec0\u4e48\u53d8\u91cf\u9700\u8981\u4fee\u6539\u3002\u800c\u4f20\u7edf\u7684\u65b9\u6cd5\u901a\u5e38\u662f\u901a\u8fc7\u6587\u672c\u7684\u65b9\u5f0f\uff0c\u5982\u90ae\u4ef6\uff0c\u544a\u77e5\u4fee\u6539\u7684\u5185\u5bb9\uff0c\u7136\u540e\u5f00\u53d1\u8005\u518d\u5bf9\u7167\u4fee\u6539\u3002\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u80fd\u591f\u5feb\u901f\u8fdb\u884c\u4fee\u6539\u3002")),(0,n.kt)("h4",{id:"41132-\u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"},"4.11.3.2 \u7ec4\u4ef6\u66f4\u65b0\u901a\u77e5"),(0,n.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u5f00\u53d1\u8005\u66f4\u65b0\u4e86\u7ec4\u4ef6\uff0c\u4e5f\u4f1a\u81ea\u52a8\u901a\u77e5\u5230\u6240\u6709\u4f7f\u7528\u8be5\u7ec4\u4ef6\u7684\u7528\u6237\u3002\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e00\u952e\u5347\u7ea7\uff0c\u6216\u8005\u7528\u6237\u53ef\u4ee5\u5f00\u542f\u81ea\u52a8\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u540c\u6837\uff0c\u7531\u4e8e\u7ec4\u4ef6\u90fd\u662f\u7ed3\u6784\u5316\u7684\u3001\u6570\u636e\u9a71\u52a8\u7684\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u5199\u6b7b\u5728\u4ee3\u7801\u4e2d\uff0c\u6240\u4ee5\u7cfb\u7edf\u53ef\u4ee5\u8f83\u4e3a\u5bb9\u6613\u5730\u5c06\u6240\u4ee5\u8fd9\u4e9b\u7ec4\u4ef6\u4fe1\u606f\u62bd\u53d6\u51fa\u6765\u5f62\u6210\u5217\u8868\u3002\u7528\u6237\u7684\u6240\u6709\u5b9e\u4f53\u5bf9\u8c61\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u4f4e\u7f57\u5217\u51fa\u6765\uff0c\u6240\u4ee5\u5c31\u66f4\u65b9\u4fbf\u7528\u6237\u5bf9\u8fd9\u4e9b\u7ec4\u4ef6\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u5f88\u65b9\u4fbf\u5730\u5bf9\u5b9e\u4f53\u5bf9\u8c61\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("h4",{id:"41133-\u6807\u51c6\u53cd\u9988\u673a\u5236"},"4.11.3.3 \u6807\u51c6\u53cd\u9988\u673a\u5236"),(0,n.kt)("p",null,"\u6709\u4ee5\u4e0b\u591a\u79cd\u53cd\u9988\u673a\u5236\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u5f00\u53d1\u8005\uff09\u53cd\u9988\u7ec4\u4ef6\u529f\u80fd\uff1a\u7528\u6237\u57fa\u4e8e\u7ec4\u4ef6\u7684\u529f\u80fd\u7406\u89e3\u548c\u9700\u6c42\uff0c\u7528\u6237\u53ef\u4ee5\u7ed9\u7ec4\u4ef6\u5f00\u53d1\u8005\u63d0\u4f9b\u53cd\u9988\u610f\u89c1\uff0c\u4ee5\u5b8c\u5584\u6216\u589e\u5f3a\u67d0\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u4f5c\u8005\uff09\u53cd\u9988\u6807\u51c6\u7ed3\u6784\uff1a\u53ef\u4ee5\u5411\u6807\u51c6\u7ec4\u7ec7\u63d0\u51fa\u5efa\u8bae\uff0c\u4f8b\u5982\u4fee\u6539\u3001\u5220\u9664\u6216\u8005\u91cd\u547d\u540d\u7b26\u53f7\u3002\u8fd9\u91cc\u7684\u53cd\u9988\u4e2d\u53ef\u4ee5\u662f\u7528\u6237\u6216\u8005\u5f00\u53d1\u8005\u3002"),(0,n.kt)("li",{parentName:"ul"},"\uff08\u5411\u6807\u51c6\u793e\u533a\uff09\u5f81\u8be2\u65b0\u529f\u80fd\u5f00\u53d1\uff1a\u53ef\u4ee5\u5728\u6807\u51c6\u793e\u533a\u53d1\u5e03\u65b0\u7684\u529f\u80fd\u9700\u6c42\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u6309\u7167\u76f8\u5173\u9700\u6c42\u8fdb\u884c\u7ec4\u4ef6\u5f00\u53d1\u3002 ")),(0,n.kt)("h4",{id:"41134-\u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\u7248\u672c\u7ba1\u7406\u673a\u5236"},"4.11.3.4 \u59cb\u7ec8\u4fdd\u6301\u6700\u65b0\uff08\u7248\u672c\u7ba1\u7406\u673a\u5236\uff09"),(0,n.kt)("p",null,"\u4e3a\u4e86\u51cf\u5c11\u5bf9\u65e7\u7ec4\u4ef6\u7684\u517c\u5bb9\u6027\u7ef4\u62a4\u6210\u672c\uff0c\u6240\u6709\u7ec4\u4ef6\u6700\u597d\u90fd\u662f\u4fdd\u6301\u6700\u65b0\u3002"),(0,n.kt)("p",null,"\u8fd9\u91cc\u5176\u4e2d\u4e00\u6761\u53ef\u9009\u7684\u505a\u6cd5\u5c31\u662f\u7528\u4e8e\u53ea\u4fdd\u5b58\u6700\u65b0\u7684\u6807\u51c6\uff0c\u8fd9\u6837\u65e7\u7684\u7ec4\u4ef6\u5c31\u5fc5\u987b\u5347\u7ea7\u3002\u4f46\u8fd9\u53ef\u80fd\u5bfc\u81f4\u6709\u65f6\u5019\u5728\u7ec4\u4ef6\u6ca1\u6709\u66f4\u65b0\u4e4b\u524d\u65e0\u6cd5\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u5c31\u662f\u6807\u51c6\u4f5c\u8005\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e9b\u65e7\u6807\u51c6\u5b58\u7eed\u7684\u65f6\u95f4\uff0c\u7ed9\u5f00\u53d1\u8005\u548c\u7528\u6237\u4e00\u6bb5\u65f6\u95f4\u8fdb\u884c\u66f4\u65b0\u5347\u7ea7\u3002"),(0,n.kt)("p",null,"\u6216\u8005\u7cfb\u7edf\u9ed8\u8ba4\u5c31\u662f\u4e24\u4e2a\u7248\u672c\uff0c\u5176\u4e2d\u6bcf\u4e00\u4e2a \u65b0\u7248\u672c\u53d1\u5e03\u4e4b\u540e\uff0c\u65e7\u7248\u672c\u6700\u591a\u5b58\u7eed\u56fa\u5b9a\u7684\u65f6\u95f4\uff0c\u5982\u4e09\u4e2a\u6708\uff0c\u4e09\u4e2a\u6708\u4e4b\u540e\u81ea\u52a8\u5220\u9664\u3002\u8fd9\u79cd\u65b9\u5f0f\u770b\u8d77\u6765\u662f\u4e24\u8005\u7684\u4e00\u4e2a\u6743\u8861\u3002"),(0,n.kt)("h3",{id:"4114-\u8de8\u8d8a\u6807\u51c6"},"4.11.4 \u8de8\u8d8a\u6807\u51c6"),(0,n.kt)("p",null,"\u4ece\u903b\u8f91\u4e0a\u8bb2\uff0c\u7ec4\u4ef6\u5173\u6ce8\u7684\u53ea\u6709\u7b26\u53f7\uff0c\u800c\u4e0d\u662f\u6807\u51c6\uff0c\u6807\u51c6\u53ea\u662f\u7ec4\u4ef6\u5f00\u53d1\u8005\u5728\u5f00\u53d1\u7ec4\u4ef6\u7684\u601d\u8003\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u53c2\u8003\uff0c\u4ed6\u5bf9\u6807\u51c6\u672c\u8eab\u6ca1\u6709\u76f4\u63a5\u7684\u6240\u5c5e\u6216\u8005\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e00\u4e2a\u7ec4\u4ef6\u662f\u53ef\u4ee5\u8de8\u57df\u6807\u51c6\u7684\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u6211\u4eec\u628a\u6bcf\u4e2a\u6807\u51c6\u7406\u89e3\u4e3a\u4e00\u4e2a\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u8fd9\u79cd\u8de8\u8d8a\u6807\u51c6\u7684\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u4ece\u800c\u5b9e\u73b0\u6807\u51c6\u4e4b\u95f4\u7684\u8054\u7cfb\u6216\u8005\u5173\u7cfb\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u6574\u4e2a\u5929\u6c14\u7cfb\u7edf\u5305\u62ec\u4e91\u5c42\u5b50\u7cfb\u7edf\uff0c\u6d77\u6d0b\u5b50\u7cfb\u7edf\uff0c\u5929\u7a7a\u5b50\u7cfb\u7edf\uff0c\u9646\u5730\u5b50\u7cfb\u7edf\u7b49\u7b49\uff0c\u7136\u540e\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u662f\u5b58\u5728\u4e00\u5b9a\u6bd4\u8f83\u7b80\u5355\u7684\u5173\u7cfb\uff0c\u4ece\u800c\u5f62\u6210\u6574\u4e2a\u5929\u6c14\u590d\u6742\u7cfb\u7edf\u7684\u3002"),(0,n.kt)("h4",{id:"41141-\u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"},"4.11.4.1 \u4e0e\u76f8\u5173\u6807\u51c6\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5982\u679c\u628a\u6bcf\u4e2a\u6807\u51c6\u770b\u505a\u4e00\u4e2a\u66f4\u5927\u590d\u6742\u7cfb\u7edf\u7684\u5b50\u7cfb\u7edf\uff0c\u90a3\u4e48\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u4e2d\u5fc5\u7136\u6709\u90e8\u5206\u5c5e\u6027\u662f\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u7684\u5c5e\u6027\u76f8\u5173\u7684\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u6bcf\u4e2a\u6807\u51c6\u901a\u5e38\u4f1a\u5305\u542b\u5c11\u90e8\u5206\u4e0e\u76f8\u5173\u6807\u51c6\u6709\u5173\u7684\u7b26\u53f7\uff0c\u5bf9\u4e8e\u8fd9\u4e9b\u7b26\u53f7\uff0c\u5b83\u4eec\u7684\u5c5e\u6027\u503c\u901a\u5e38\u7531\u5185\u90e8\u7684\u673a\u5236\u8ba1\u7b97\uff0c\u7136\u540e\u8fd9\u4e9b\u503c\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u76f8\u5173\u6807\u51c6\u4e2d\u4e0e\u4e4b\u76f8\u5173\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5bf9\u4e8e\u54ea\u4e9b\u662f\u76f8\u5173\u5c5e\u6027\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u53bb\u7ea6\u675f\u5b83\u3002\u8fd9\u53ea\u662f\u5f00\u53d1\u8005\u8111\u4e2d\u77e5\u9053\u7684\u4e00\u4e2a\u6982\u5ff5\u3002\u4ece\u7406\u8bba\u4e0a\u6765\u8bf4\uff0c\u6807\u51c6\u7684\u4efb\u4f55\u5c5e\u6027\u4e5f\u8bb8\u90fd\u53ef\u80fd\u4e0e\u5176\u4ed6\u5b50\u7cfb\u7edf\u6709\u67d0\u79cd\u5173\u7cfb\uff0c\u56e0\u6b64\u6211\u4eec\u4e0d\u9700\u8981\u9650\u5236\u4ed6\uff0c\u8fd9\u53ea\u662f\u5bf9\u5f00\u53d1\u8005\u7684\u4e00\u79cd\u6307\u5bfc\u3002"),(0,n.kt)("h2",{id:"412-\u81ea\u6211\u8fdb\u5316\u7684metaverse"},"4.12 \u81ea\u6211\u8fdb\u5316\u7684Metaverse"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h3",{id:"4121-\u6807\u51c6\u7684\u4ef7\u503c"},"4.12.1 \u6807\u51c6\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u7b26\u53f7\u8868\u662f\u5b9e\u73b0\u591a\u7a0b\u5e8f/\u591a\u5e94\u7528\u4e4b\u95f4\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6807\u51c6\u5219\u6784\u5efa\u4e8e\u7b26\u53f7\u8868\u4e4b\u4e0a\uff0c\u5b83\u662f\u4e00\u7ec4\u8bed\u4e49\u4e0a\u76f8\u5173\u7684\u7b26\u5408\u96c6\u5408\u7684\u6982\u5ff5\u3002\u7b26\u53f7\u603b\u662f\u5b58\u5728\u4e8e\u4e00\u4e2a\u6807\u51c6\u4e4b\u4e2d\uff0c\u5373\u7b26\u53f7\u6309\u6807\u51c6\u7684\u5f62\u5f0f\u8fdb\u884c\u7ec4\u7ec7\u3002"),(0,n.kt)("p",null,"\u76f8\u6bd4\u4e8e\u5355\u4e2a\u7b26\u53f7\uff0c\u6807\u51c6\u662f\u5bf9\u73b0\u5b9e\u4e16\u754c\u67d0\u4e9b\u5173\u7cfb\u6216\u903b\u8f91\u7684\u62bd\u8c61\u3002\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u662f\u56f4\u7ed5\u67d0\u4e00\u7c7b\u5173\u7cfb\u6216\u8005\u67d0\u4e00\u7c7b\u4e8b\u7269\u7684\u6838\u5fc3\u7684\u6570\u636e\u5c5e\u6027\uff0c\u5176\u4e2d\u901a\u8fc7\u8fd9\u4e9b\u6570\u636e\u8981\u80fd\u591f\u63cf\u8ff0\u8be5\u7c7b\u5173\u7cfb\u6216\u6570\u636e\u7684\u7279\u5f81\u4ee5\u53ca\u5404\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5c5e\u6027\u5e94\u8be5\u662f\u4fbf\u4e8e\u4eba\u7c7b\u7406\u89e3\u7684\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6240\u4ee5\u6807\u51c6\u662fReality World\u7684\u4e00\u4e2a\u6838\u5fc3\u6307\u6807\uff0c\u5b83\u4e5f\u662f\u4ee3\u8868\u7528\u6237\u521b\u4f5c\u7684\u6700\u9ad8\u62bd\u8c61\u80fd\u529b\uff0c\u6211\u4eec\u5bf9\u4e8e\u73b0\u5b9e\u4e16\u754c\u7684\u4e00\u4e9b\u5173\u7cfb\u7684\u6df1\u523b\u62bd\u8c61\u7406\u89e3\u90fd\u8574\u85cf\u5728\u6807\u51c6\u7684\u5b9a\u4e49\u53ca\u5176\u7ed3\u6784\u4e2d\u3002")),(0,n.kt)("p",null,"Reality World\u4e2d\u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u662f\u56f4\u7ed5\u6807\u51c6\u6765\u5f00\u53d1\u7684\uff0c\u8fd9\u4fdd\u8bc1\u7ec4\u4ef6\u4e0d\u4f1a\u592a\u6df7\u4e71\uff0c\u56e0\u4e3a\u5b83\u4eec\u662f\u6309\u7167\u5f88\u4e25\u683c\u7684\u903b\u8f91\u6765\u903b\u8f91\u7684\uff0c\u8fd9\u79cd\u903b\u8f91\u7531\u6807\u51c6\u6765\u5b9a\u4e49\u3002\u540c\u65f6\u4ed6\u4e5f\u4fdd\u8bc1\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u53d8\u5f97\u6709\u610f\u4e49\uff0c\u76f8\u5173\u6027\u6bd4\u8f83\u9ad8\uff0c\u56e0\u4e3a\u76f8\u5bf9\u4e8e\u540c\u4e00\u6807\u51c6\u7684\u4e0d\u540c\u7ec4\u4ef6\uff0c\u5b83\u4eec\u5f7c\u6b64\u77e5\u9053\u5e94\u8be5\u600e\u6837\u534f\u4f5c\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u4e0d\u4ec5\u5305\u542b\u4e00\u4e9b\u7684\u76f8\u5173\u6027\uff0c\u4e5f\u5305\u62ec\u5bf9\u903b\u8f91\u5f00\u53d1\u7684\u6307\u5bfc\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u5b9a\u4e49\u5f62\u5f0f\u4e5f\u4f7f\u5f97\u6807\u51c6",(0,n.kt)("strong",{parentName:"p"},"\u6613\u4e8e\u5b9a\u4e49"),"\uff1a\u6211\u4eec\u53ea\u9700\u8981\u627e\u51fa\u63cf\u8ff0\u67d0\u7c7b\u5173\u7cfb\u7684\u6570\u636e\uff0c\u800c\u4e0d\u662f\u9700\u8981\u53bb\u5b9e\u73b0\u6216\u5b9a\u4e49\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u64cd\u4f5c\u7684\u65b9\u6cd5\uff0c\u8fd9\u6837\u5c31\u662f\u7684\u6807\u51c6\u7684\u5b9a\u4e49\u6839\u672c\u4e0d\u9700\u8981\u5f88\u590d\u6742\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u6bd4\u5982\u7c7b\u4f3cUSD\u7c7b\u591a\u5c42\u7ea7\u7684\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u4e5f\u5e94\u8be5\u662f\u53ef\u4ee5\u81ea\u6211\u8fdb\u5316\u7684\uff0c\u6807\u51c6\u7684\u4f5c\u8005\u53ef\u4ee5\u5bf9\u6807\u51c6\u4e2d\u7684\u7b26\u53f7\u8fdb\u884c\u65b0\u589e\u3001\u4fee\u6539\u3001\u91cd\u547d\u540d\u6216\u8005\u5220\u9664\u7b49\uff0c\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u6765\u5b9e\u73b0\u6807\u51c6\u7684\u8fdb\u5316\uff0c\u5f62\u6210\u66f4\u597d\u7684\u62bd\u8c61\uff0c\u66f4\u597d\u7684\u6807\u51c6\u3002\u800c\u52a8\u6001\u7f16\u8bd1\u7684\u673a\u5236\uff0c\u4ee5\u53ca\u6807\u51c6\u66f4\u65b0\u901a\u77e5\u673a\u5236\uff0c\u4f7f\u5f97\u4f7f\u7528\u8fd9\u4e9b\u6807\u51c6\u7684\u7528\u6237\u6216\u8005\u7ec4\u4ef6\u53ef\u4ee5\u5f97\u5230\u901a\u77e5\uff0c\u4f7f\u5f97\u7ec4\u4ef6\u5728\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\u3002\u6700\u7ec8\u771f\u4e2a\u7cfb\u7edf\u6216\u8005\u8bf4\u4e16\u754c\uff0c\u5411\u7740\u4f18\u79c0\u8fdb\u5316\u7684\u80fd\u529b\u662f\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u597d\u7684\u6807\u51c6\u4ee3\u8868\u7740\u4f18\u79c0\u7684\u4e8b\u60c5\uff0c\u4ed6\u4f1a\u88ab\u66f4\u591a\u7684\u4eba\u4f7f\u7528\uff0c\u5b83\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u6307\u6807"),(0,n.kt)("p",null,"\u6807\u51c6\u672c\u8eab\u4e5f\u662f\u4e00\u4e2a\u7c7b\u578b\u67e5\u627e\u7684\u4f9d\u636e\uff0c\u6807\u51c6\u7684\u8bbe\u8ba1\u5e94\u8be5\u56f4\u7ed5\u67d0\u4e00\u7c7b\u4e3b\u9898\uff0c\u800c\u4e0d\u662f\u6cdb\u6cdb\u7684\u6d89\u53ca\u591a\u4e2a\u65e0\u5173\u5185\u5bb9\u7684\u6807\u51c6\u3002\u8fd9\u4e9b\u4e5f\u662f\u666e\u901a\u7528\u6237\u8fdb\u884c\u521b\u4f5c\u65f6\u7684\u7ec4\u4ef6\u7b5b\u9009\u673a\u5236\u4e4b\u4e00\u3002"),(0,n.kt)("h3",{id:"4122-\u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"},"4.12.2 \u57fa\u4e8e\u6807\u51c6\u7684\u5546\u4e1a\u6a21\u5f0f"),(0,n.kt)("p",null,"\u9488\u5bf9\u7b26\u53f7\u8868\u7684\u7248\u6743\uff0c\u7c7b\u6bd4\u6307\u5b9a\u6807\u51c6\uff0c\u7b26\u53f7\u8868\u6807\u51c6\u672c\u8eab\u6bd4\u5b9e\u73b0\u7684\u7ec4\u4ef6\u662f\u66f4\u9ad8\u4ef7\u503c\u7684\u4e1c\u897f"),(0,n.kt)("h3",{id:"4123-\u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"},"4.12.3 \u81ea\u6211\u8fdb\u5316\u7684\u6807\u51c6"),(0,n.kt)("h4",{id:"41231-\u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"},"4.12.3.1 \u81ea\u6211\u8fdb\u5316\u7684\u6838\u5fc3\u673a\u5236"),(0,n.kt)("h3",{id:"4124-\u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"},"4.12.4 \u6807\u51c6\u7684\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u524d\u8005\u662f\u6307\u4e00\u4e2a\u597d\u7684\u6807\u51c6\uff0c\u6709\u4e00\u5b9a\u7684\u673a\u5236\u88ab\u66f4\u591a\u4eba\u53d1\u73b0\uff0c\u4ece\u800c\u4fc3\u8fdb\u4e86\u6807\u51c6\u7684\u63a8\u5e7f\uff0c\u8fd9\u662f\u4e00\u79cd\u7ef4\u5ea6\u7684\u8fdb\u5316\uff0c\u56e0\u4e3a\u8fd9\u6837\u597d\u7684\u4e1c\u897f\u4f1a\u8d8a\u6765\u8d8a\u88ab\u66f4\u591a\u4f7f\u7528\uff0c\u4ece\u7528\u6237\u6765\u770b\uff0c\u8fd9\u4e2a\u4e16\u754c\u53d8\u5f97\u8d8a\u6765\u8d8a\u7f8e\u597d\u3002"),(0,n.kt)("p",null,"\u540e\u8005\u662f\u6307\uff0c\u4fc3\u8fdb\u6807\u51c6\u672c\u8eab\u7684\u8fdb\u5316\u3002\u5373\u5bf9\u4e8e\u4e00\u4e2a\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684\u6807\u51c6\uff0c\u8fd9\u4e2a\u6807\u51c6\u5e76\u4e0d\u662f100%\u5b8c\u7f8e\u7684\uff0c\u5b83\u672c\u8eab\u8fd8\u6709\u6539\u8fdb\u7a7a\u95f4\uff0c\u5b83\u672c\u8eab\u4e5f\u53ef\u4ee5\u5ef6\u540e"),(0,n.kt)("h4",{id:"41241-\u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"},"4.12.4.1 \u7b26\u53f7\u8868\u7684\u7248\u672c\u517c\u5bb9\u6027"),(0,n.kt)("h4",{id:"41242-\u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"},"4.12.4.2 \u4ee5\u6807\u51c6\u4e3a\u4e2d\u5fc3\u7684\u793e\u533a"),(0,n.kt)("p",null,"\u8ba2\u9605\u7684\u673a\u5236"),(0,n.kt)("h4",{id:"41243-\u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"},"4.12.4.3 \u63a8\u52a8\u7ec4\u4ef6\u66f4\u65b0"),(0,n.kt)("p",null,"\u53c2\u89c14.11.3.4\u8282\uff0c\u6807\u51c6\u7684\u66f4\u65b0\u673a\u5236\uff08\u4fdd\u6301\u6700\u65b0\u4e24\u4e2a\u7248\u672c\uff09\u4f7f\u5f97\u6807\u51c6\u80fd\u591f\u5feb\u901f\u8fdb\u5316\u4ee5\u53ca\u7275\u5f15\u7528\u6237\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u6807\u51c6\u7684\u8fd9\u79cd\u7248\u672c\u673a\u5236\u8fd8\u4fc3\u8fdb\u4e86\u7ec4\u4ef6\u66f4\u65b0\uff0c\u5f53\u6807\u51c6\u66f4\u65b0\u4e86\uff0c\u53ef\u80fd\u4e0d\u4e45\u4e4b\u524d\uff0c\u6bd4\u5982\u4e00\u4e2a\u6708\u6216\u8005\u534a\u5e74\u7684\u7ec4\u4ef6\u5c06\u6709\u53ef\u80fd\u8fc7\u65f6\uff0c\u8fd9\u65f6\u5019\u4e3a\u4e86\u6301\u7eed\u88ab\u5176\u4ed6\u65b0\u7528\u6237\u4f7f\u7528\uff0c\u5b83\u5fc5\u987b\u66f4\u7ec6\u7ec4\u4ef6\uff0c\u5426\u5219\u65b0\u7528\u6237\u65e0\u6cd5\u8d2d\u4e70\uff0c\u8fd9\u6837\u5c31\u4fc3\u8fdb\u7ec4\u4ef6\u5f00\u53d1\u8005\u5feb\u901f\u66f4\u65b0\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u662f\u5df2\u7ecf\u8d2d\u4e70\u7684\u7528\u6237\uff0c\u5b83\u53ef\u4ee5\u53cd\u9988\u8981\u6c42\u7ec4\u4ef6\u66f4\u65b0\uff0c\u8fd9\u91cc\u9762\u5c31\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u523a\u6fc0\u5f00\u53d1\u8005\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u8d2d\u4e70\u662f\u4e00\u6b21\u6027\u7684\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u4e0d\u7528\u5bf9\u8fc7\u671f\u8d1f\u8d23"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u7528\u6237\u9700\u8981\u5347\u7ea7\u7ec4\u4ef6\u65f6\uff0c\u8fd9\u662f\u4e00\u6b21\u91cd\u65b0\u8d2d\u4e70\u884c\u4e3a\uff0c\u5bf9\u5f00\u53d1\u8005\u6765\u8bb2\u6709 \u4e8c\u6b21\u6536\u5165\uff0c\u5f53\u5982\u5f00\u53d1\u8005\u53ef\u4ee5\u8bbe\u7f6e\u8001\u7528\u6237\u4f18\u60e0\uff0c\u751a\u81f3\u8001\u7528\u6237\u514d\u8d39\u5347\u7ea7\uff0c\u6240\u4ee5\u5f00\u53d1\u8005\u6709\u8db3\u591f\u5927\u7684\u52a8\u529b\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u4ece\u5b9e\u9645\u6765\u8bb2\uff0c\u771f\u5b9e\u793e\u4f1a\u4e5f\u662f\u8fd9\u4e2a\u6837\u5b50\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4f60\u4e70\u7684\u4e1c\u897f\u662f\u5bb9\u6613\u8fc7\u65f6\u7684\uff0c\u4f60\u53ef\u80fd\u4f1a\u91cd\u65b0\u8d2d\u4e70\u76f8\u540c\u4ea7\u54c1\u7684\u65b0\u54c1\uff0c\u6bd4\u5982\u624b\u673a")),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5bf9\u4e8e\u8f6f\u4ef6\u6765\u8bb2\uff0c\u66f4\u65b0\u5f88\u5feb\uff0c\u4f60\u4e0d\u53ef\u80fd\u5f00\u53d1\u4e00\u4e2a\u7ec4\u4ef6\u5c31\u7528\u51e0\u5e74\uff0c\u8fd9\u79cd\u9648\u5e74\u7684\u8001\u4ee3\u7801\u540e\u9762\u4e00\u5b9a\u6709\u517c\u5bb9\u6027\u95ee\u9898\uff0c\u800c\u4e14\u5b83\u4e0d\u66f4\u65b0\u4e5f\u4ee3\u8868\u7740\u7528\u6237\u4f53\u9a8c\u7684\u8fd8\u662f\u5f88\u4e45\u4e4b\u524d\u7684\u4e1c\u897f\uff0c\u5f53\u7136\u8fd9\u4e9b\u4e1c\u897f\u4e5f\u6709\u53ef\u80fd\u7ecf\u5f97\u8d77\u65f6\u95f4\u8003\u9a8c\u3002\u4f46\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u6709\u4e24\u79cd\u601d\u8def\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u8fd9\u79cd\u6bd4\u8f83\u7a33\u5b9a\u7684\u4ea7\u54c1\uff0c\u5176\u4ee3\u7801\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u5f00\u53d1\u8005\u6bcf\u6b21\u53ef\u80fd\u5e76\u4e0d\u9700\u8981\u82b1\u8d39\u5f88\u591a\u65f6\u95f4\u5c31\u53ef\u4ee5\u66f4\u65b0\u5347\u7ea7\u4e00\u4e0b\u7ec4\u4ef6"),(0,n.kt)("li",{parentName:"ul"},"\u6807\u51c6\u4e5f\u8d8b\u5411\u4e8e\u7a33\u5b9a\uff0c\u6bcf\u4e2a\u6807\u51c6\u90fd\u662f\u4e00\u4e2a\u8fdb\u5316\u7684\u8fc7\u7a0b\uff0c\u5230\u4e00\u5b9a\u7684\u9636\u6bb5\u5b83\u4e5f\u4f1a\u8d8b\u4e8e\u7a33\u5b9a"),(0,n.kt)("li",{parentName:"ul"},"\u6b64\u5916\uff0c\u6807\u51c6\u5f00\u53d1\u8005\u4e3a\u4e86\u907f\u514d\u5f00\u53d1\u8005\u6d41\u5931\uff0cTA\u4e5f\u8981\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u7a33\u5b9a\uff0c\u5426\u5219\u9891\u7e41\u53d8\u5316\u7684\u6807\u51c6\u6709\u53ef\u80fd\u4f1a\u6d41\u5931\u5f00\u53d1\u8005")),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u5bf9\u4e8e\u4f20\u7edf\u7684App\u6765\u8bb2\uff0c\u6bd4\u5982\u6709\u65f6\u5019\u770b\u5230\u5f88\u591a\u975e\u5e38\u4e45\u7684app\u6ca1\u6709\u66f4\u65b0\u5347\u7ea7\u4e5f\u80fd\u8fd0\u884c\uff0c\u4f46\u662f\u56e0\u4e3a\u5b83\u662f\u72ec\u7acb\u7a0b\u5e8f\uff0c\u53ea\u8981OS\u4fdd\u6301\u4e00\u5b9a\u7684\u517c\u5bb9\u65f6\u95f4\u5373\u53ef\uff0c\u4f46\u662f\u5bf9\u4e8e\u5728\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u5f00\u653e\u5927\u4e16\u754c\u6765\u8bb2\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u590d\u6742\u5f97\u591a\uff0c\u6240\u4ee5\u524d\u671f\u4f7f\u7528\u66f4\u7b80\u5355\u7684\u65b9\u5f0f\u5904\u7406\u3002"),(0,n.kt)("h2",{id:"413-\u7528\u6237\u521b\u4f5c"},"4.13 \u7528\u6237\u521b\u4f5c"),(0,n.kt)("h3",{id:"4131-\u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"},"4.13.1 \u4ee5\u7ec4\u4ef6\u4e3a\u6700\u5c0f\u7c92\u5ea6"),(0,n.kt)("h3",{id:"4132-\u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"},"4.13.2 \u4ee5\u6807\u51c6\u4e3a\u6574\u4f53\u601d\u7ef4"),(0,n.kt)("h3",{id:"4133-\u53cd\u9988\u548c\u8bc4\u4ef7"},"4.13.3 \u53cd\u9988\u548c\u8bc4\u4ef7"),(0,n.kt)("h3",{id:"4134-\u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"},"4.13.4 \u5b9e\u4f53\u548c\u7ec4\u4ef6\u7ba1\u7406"),(0,n.kt)("h2",{id:"414-\u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"},"4.14 \u57fa\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u4ea4\u4e92"),(0,n.kt)("h3",{id:"4141-\u9762\u5411\u6280\u672f\u4eba\u5458"},"4.14.1 \u9762\u5411\u6280\u672f\u4eba\u5458"),(0,n.kt)("p",null,"ChatGPT\u65e9\u671f\u7684\u6d41\u91cf\u5927\u90e8\u5206\u6765\u81ea\u6280\u672f\u4eba\u5458\uff0c\u8ddf\u533a\u5757\u94fe\u4e00\u6837\uff0c\u5148\u7531\u6280\u672f\u4eba\u5458\u5230\u975e\u6280\u672f\u4eba\u5458\uff0c\u501f\u52a9\u73b0\u5728\u7684\u793e\u4ea4\u7f51\u7edc\uff0c\u73b0\u5728\u7684\u4fe1\u606f\u4f20\u64ad\u4f1a\u66f4\u5feb"),(0,n.kt)("h3",{id:"4142-\u53bb\u4e2d\u5fc3\u5316\u7684ai"},"4.14.2 \u53bb\u4e2d\u5fc3\u5316\u7684AI"),(0,n.kt)("p",null,"\u4ee5ChatGPT\u4e3a\u4ee3\u8868\u7684\u5927\u6a21\u578b\uff0c\u662f\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u65b9\u5f0f\uff0c\u8fc7\u53bb\u5206\u6563\u5728\u591a\u4e2a\u8f6f\u4ef6\u4e2d\u7684\u4fe1\u606f\u548c\u529f\u80fd\uff0c\u73b0\u5728\u88ab\u96c6\u6210\u5230\u4e00\u4e2a\u66f4\u52a0\u4e2d\u5fc3\u5316\u7684\u6a21\u578b\u548c\u516c\u53f8\u4e2d\uff0c\u4f7f\u5f97\u5355\u4e00\u516c\u53f8\u5bf9\u66f4\u5e7f\u6cdb\u7684\u80fd\u529b\u62e5\u6709\u66f4\u5f3a\u63a7\u5236\u6743\uff0c \u56e0\u6b64\u4fe1\u606f\u5b89\u5168\u4f1a\u66f4\u52a0\u590d\u6742\u3002\u56e0\u4e3a\u4e0d\u7ba1\u4e00\u4e2a\u6a21\u578b\u662f\u5426\u80fd\u591f\u52a8\u6001\u5b66\u4e60\u65b0\u77e5\u8bc6\u7684\u80fd\u529b\uff0c\u8fd8\u662f\u8bf4\u5b83\u7684\u6570\u636e\u5747\u6765\u81ea\u5206\u6563\u7684\u4e92\u8054\u7f51\uff0c\u4f46\u6700\u7ec8\u9762\u5411\u7528\u6237\u7684\u6574\u4e2a\u6d41\u7a0b\u662f\u901a\u8fc7\u5927\u6a21\u578b\u4e2d\u7684\u7b97\u5b50\u548c\u7a0b\u5e8f\u8fdb\u884c\u8ba1\u7b97\u7684\uff0c\u8fd9\u4e9b\u8f93\u5165\u4fe1\u606f\u4e0d\u7ba1\u662f\u5426\u771f\u5b9e\u51c6\u786e\uff0c\u5927\u6a21\u578b\u7684\u8ba1\u7b97\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\uff0c\u5b83\u638c\u63e1\u7740\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u63a7\u5236\u4fe1\u606f\u7684\u6d41\u52a8\u548c\u5206\u914d\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u672a\u6765\u7684AI\u5e94\u8be5\u662f\u53bb\u4e2d\u5fc3\u5316\u7684\uff0c\u5e94\u8be5\u4ee5\u67d0\u79cd\u7528\u6237\u53ef\u63a7\u7684\u5f62\u5f0f\uff0c\u66f4\u5206\u6563\u7684\u5f62\u5f0f\uff0c\u4f8b\u5982\u50cfRealityIS\u4e2d\uff0c\u5e73\u53f0\u63d0\u4f9b\u7684\u662f\u57fa\u7840\u6a21\u5757\u800c\u4e0d\u662f\u6a21\u578b\uff0c\u7528\u6237\u53bb\u9009\u62e9\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u672a\u6765\u7684AI\u6216\u8bb8\u5e94\u8be5\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u95ee\u9898\u7684\u7ed3\u679c\u533a\u5206\uff0c\u5f53\u4eca\u7684ChatGPT\u7684\u6210\u529f\u5728\u4e8e\u5b83\u5c06\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u4fe1\u606f\u7684\u7ed3\u679c\u8fdb\u884c\u5173\u8054\uff0c\u8fd9\u79cd\u5173\u8054\u4e00\u65b9\u9762\u65b9\u4fbf\u4e2d\u5fc3\u5316\u7684\u5927\u6a21\u578b\u8fdb\u884c\u5b66\u4e60\u5904\u7406\uff0c\u4f46\u4e5f\u540c\u65f6\u5e26\u6765\u4e86\u98ce\u9669\u3002\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u5c06\u83b7\u53d6\u7ed3\u679c\u90e8\u5206\u7684\u63a7\u5236\u6743\u4ea4\u7ed9\u7528\u6237\uff0c\u7531\u7528\u6237\u6765\u63a7\u5236\uff0c\u53ef\u4ee5\u6709\u8bb8\u591a\u65b9\u5f0f\uff0c\u4f8b\u5982RealityIS\u7684\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"41421-\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"},"4.14.2.1 \u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012"),(0,n.kt)("p",null,"\u4ece\u53e6\u4e00\u4e2a\u89d2\u5ea6\uff0cchatGPT\u5f71\u54cd\u4e86\u4fe1\u606f\u7684\u4f20\u9012\uff0c\u6743\u5a01\u4fe1\u606f\u6bd4\u5982\u65b0\u95fb\u3001\u6280\u672f\u6587\u7ae0\uff0c\u6700\u6838\u5fc3\u7684\u539f\u5219\u80af\u5b9a\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u6bd4\u5982\u5404\u5927\u7f51\u7ad9\u9700\u8981\u63a8\u51fa\u81ea\u5df1\u7684\u5b98\u65b9\u7f51\u7ad9\u6216\u8005\u4fe1\u606f\u6e90\u4f9b\u7528\u6237\u76f4\u63a5\u6d88\u8d39\u3002\u76f4\u63a5\u4f20\u9012\u662f\u4fdd\u6301\u4fe1\u606f\u771f\u5b9e\u6027\u7684\u552f\u4e00\u9014\u5f84\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u4e00\u65e6\u4fe1\u606f\u7684\u4f20\u64ad\u65b9\u5f0f\u53d8\u5f97\u4e0d\u662f\u76f4\u63a5\u4f20\u9012\uff0c\u8fd9\u5c06\u4f1a\u5927\u5927\u5f71\u54cd\u4fe1\u606f\u7684\u4f20\u64ad\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6e20\u9053\u53ef\u80fd\u4f1a\u4fee\u6539\u4fe1\u606f\u5185\u5bb9\u3002\u5373\u4f7f\u662f\u8f6c\u6458\uff0c\u4e5f\u5f88\u96be\u8fa8\u522b\u8f6c\u53d1\u8005\u505a\u4e86\u54ea\u4e9b\u4fe1\u606f\u4fee\u6539\uff0c\u9664\u975e\u4f60\u53bb\u770b\u539f\u6587\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u6211\u4eec\u603b\u662f\u529b\u6c42\u4fe1\u606f\u7684\u76f4\u63a5\u4f20\u9012\uff0c\u4f20\u9012\u7684\u5a92\u4ecb\u662f\u62a5\u7eb8\uff0c\u62a5\u7eb8\u6709\u51fa\u7248\u793e\u6743\u5a01\u5370\u5237\u5382\u7ecf\u8fc7\u6743\u5a01\u6e20\u9053\u76f4\u63a5\u5230\u8fbe\u7528\u6237\u624b\u4e2d\uff0c\u4e00\u822c\u5f88\u96be\u7be1\u6539\u3002\u800c\u4e92\u8054\u7f51\u5e95\u5ea7\u7684\u4e92\u8054\u6a21\u578b\uff0c\u4e5f\u662f\u5c3d\u53ef\u80fd\u4fdd\u8bc1\u8fd9\u4e9b\u5e95\u5c42\u673a\u5236\u4e0d\u4f1a\u7be1\u6539\u4f20\u8f93\u4fe1\u606f\uff0c\u5e76\u4ee5\u6807\u51c6\u7684\u5f62\u5f0f\u5f00\u653e\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u663e\u7136\u5927\u516c\u53f8\u7684\u5927\u6a21\u578b\u4f5c\u4e3a\u4e00\u4e2a\u4fe1\u606f\u4f20\u64ad\u6e20\u9053\u548c\u65b9\u5f0f\uff0c\u5b83\u65e0\u6cd5\u6709\u8fd9\u6837\u7684\u4fdd\u8bc1\u3002"),(0,n.kt)("h1",{id:"5-realitycoin"},"5. RealityCoin"),(0,n.kt)("p",null,"\u5c06\u8fc7\u53bb\u4f20\u7edf\u6e38\u620f\u5e02\u573a\u4e2d\uff0c\u53ea\u6709\u5f00\u53d1\u5546\u3001\u53d1\u884c\u5546\u548c\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\uff0c\u6269\u5c55\u4e3a\u5176\u4ed6\u4eba\u53ef\u4ee5\u53c2\u4e0e\u6295\u8d44\uff0c\u901a\u8fc7\u6295\u8d44\u6765\u9a71\u52a8\u6e38\u620f\u4f53\u9a8c\u6216\u5e94\u7528\u7a0b\u5e8f\u529f\u80fd\u83b7\u5f97\u66f4\u5e7f\u6cdb\u7684\u4f7f\u7528\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4ee5\u592a\u574a\u7c7b\u4f3c\u7684\u53bb\u4e2d\u5fc3\u5316\u5e73\u53f0\uff0c\u7531\u4e8e\u4ee5\u592a\u574a\u53d1\u884c\u7684\u4ee3\u5e01\u8ddf\u5b9e\u9645\u8fd0\u884c\u7684\u4ea7\u4e1a\u4e4b\u95f4\u7f3a\u4e4f\u5173\u8054\uff0c\u672c\u8d28\u4e0a\u4ee5\u592a\u574a\u53ea\u4fdd\u8bc1\u4ea4\u6613\u7684\u6267\u884c\u548c\u5408\u7ea6\u7684\u6267\u884c\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ea4\u6613\u548c\u5408\u7ea6\u80cc\u540e\u7684\u5b9e\u4f53\u53ca\u5176\u5b9e\u4f53\u7684\u4fe1\u7528\u4f53\u7cfb\uff0c\u4ecd\u7136\u9700\u8981\u4f9d\u8d56\u4e8e\u7b2c\u4e09\u65b9\u673a\u6784\uff0c\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u673a\u6784\u5927\u90fd\u662f\u4e2d\u5fc3\u5316\u7684\u673a\u6784\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u7269\u4f53\u80fd\u4e0d\u80fd\u6309\u65f6\u9001\u8fbe"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u5bf9\u5e94\u7684\u771f\u5b9e\u4e16\u754c\u7684\u7269\u6743\u662f\u5426\u771f\u5b9e\uff0c\u751a\u81f3\u662f\u5426\u771f\u6709\u5176\u6743"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u80cc\u540e\u7684\u56e2\u961f\u662f\u5426\u6709\u80fd\u529b\u6267\u884c\u4ee3\u5e01\u7684\u627f\u8bfa\uff0c\u751a\u81f3\u8c01\u6765\u9a8c\u8bc1\u8fd9\u4e2a\u56e2\u961f\u53ca\u5176\u6267\u884c")),(0,n.kt)("p",null,"\u7531\u4e8eRealityCoin\u53ea\u670d\u52a1\u4e8eReality World\u5e73\u53f0\u4e0a\u7684\u5e94\u7528\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u4ee3\u5e01\u548c\u5e73\u53f0\u4e4b\u95f4\u52a0\u5165\u4e00\u4e9b\u4fe1\u7528\u7ea6\u5b9a\uff0c\u7528\u4ee5\u4fdd\u8bc1\u4ee3\u5e01\u7684\u98ce\u9669\u53ef\u63a7\u3002\u5e76\u4e14\uff0c\u901a\u8fc7\u4fdd\u8bc1\u4ee3\u5e01\u5bf9\u5e94\u7684\u4ea7\u54c1\u786e\u6709\u5176\u7269\uff0c\u751a\u81f3\u53ef\u4ee5\u907f\u514d\u4e00\u4e9b\u8bc1\u5238\u76d1\u7ba1\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h2",{id:"51-\u4ee3\u5e01\u7ecf\u6d4e"},"5.1 \u4ee3\u5e01\u7ecf\u6d4e"),(0,n.kt)("h3",{id:"511-\u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"},"5.1.1 \u4fc3\u8fdb\u524d\u671f\u4ea7\u54c1\u6210\u957f"),(0,n.kt)("p",null,"\u9664\u4e86Reality World\u5185\u90e8\u7c7b\u4f3c\u5b9e\u4f53\u6216\u8005\u4e2a\u4f53\u7ecf\u6d4e\uff0c\u8fd9\u5728\u524d\u671f\u6ca1\u6709\u4ea7\u54c1\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u4f20\u7edf\u7684\u505a\u6cd5\u5c31\u662f\u9760\u8fd0\u8425\uff0c\u5176\u5b9e\u5c31\u662f\u6295\u653e\u6d41\u91cf\uff0c\u6216\u8005\u5c31\u5355\u7eaf\u9700\u8981\u9760\u4ea7\u54c1\u7684\u53e3\u7891\u3002\u524d\u8005\u6210\u672c\u8f83\u9ad8\uff0c\u800c\u540e\u8005\u6210\u529f\u7387\u8f83\u4f4e\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u903b\u8f91\uff0c\u5b83\u4e0d\u4ec5\u662f\u4e00\u4e2a\u5b89\u5168\u7684\u4ef7\u503c\u4ea4\u6613\u4e2d\u4ecb\uff0c\u5b83\u7684\u67b6\u6784\u4f53\u7cfb\u4e2d\u5929\u751f\u878d\u5165\u4e86\u6295\u8d44\u7684\u903b\u8f91\uff0c\u6bd4\u5982\u5b83\u9996\u5148\u662f\u53d1\u5e01\uff0c\u6b64\u65f6\u5b9e\u7269\u8fd8\u6ca1\u6709\u751f\u4ea7\u51fa\u6765\u6216\u8005\u4ea7\u54c1\u5904\u4e8e\u524d\u671f\u8fd0\u8425\u671f\uff0c\u4ea7\u54c1\u77e5\u540d\u5ea6\u8fd8\u6ca1\u6709\u90a3\u4e48\u9ad8\u3002\u6b64\u65f6\u5c31\u57fa\u4e8e\u6295\u8d44\u8005\u5bf9\u672a\u6765\u4ea7\u54c1\u7406\u5ff5\u6216\u8005\u6545\u4e8b\u7684\u9884\u671f\uff0c\u8fdb\u884c\u6295\u8d44\uff0c\u4f8b\u5982\u4ee3\u5e01\u5c31\u662f\u8fd9\u6837\uff1b\u5373\u4f7f\u6ca1\u6709\u6295\u8d44\uff0c\u5b9e\u73b0\u5206\u53d1\u7684\u865a\u62df\u8d27\u5e01\uff0c\u4e5f\u4f1a\u8ba9\u6301\u5e01\u8005\u4e3a\u4e86\u4f7f\u5f97\u6240\u6301\u8d27\u5e01\u589e\u503c\uff0c\u800c\u4f1a\u65e0\u5f62\u4e2d\u53c2\u4e0e\u5e2e\u52a9\u5e73\u53f0\u7684\u63a8\u5e7f\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u8fd9\u4e00\u5957\u903b\u8f91\u80cc\u540e\uff0c\u80fd\u591f\u8ba9\u65e9\u5165\u5c40\u7684\u4eba\u5728\u4ee5\u540e\u83b7\u5f97\u66f4\u5927\u7684\u56de\u62a5\uff0c\u57fa\u4e8e\u5bf9\u5e73\u53f0\u6216\u8005\u4ea7\u54c1\u672a\u6765\u7684\u9884\u671f\u6216\u60f3\u8c61\u7a7a\u95f4\u3002\u56e0\u4e3a\u5982\u679c\u57fa\u4e8e\u6295\u8d44\u8005\u7684\u9884\u671f\uff0c\u65e5\u540e\u8fd9\u4e9b\u81ea\u5df1\u6240\u6301\u7684\u865a\u62df\u8d27\u5e01\u6216\u8005\u4ee3\u5e01\uff0c\u4f1a\u83b7\u5f97\u8f83\u5927\u7684\u4ef7\u503c\u589e\u503c\u7a7a\u95f4\u3002\u56e0\u6b64\u5e26\u6765\u7684\u7ed3\u679c\u662f\u5728\u4ea7\u54c1\u8fd8\u6ca1\u6709\u77e5\u540d\u5ea6\u7684\u65f6\u5019\uff0c\u5c31\u53ef\u4ee5\u5438\u5f15\u90a3\u4e9b\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u8fd9\u5e2e\u52a9\u4e86\u524d\u671f\u7684\u4ea7\u54c1\u63a8\u5e7f\u3002\u5e76\u4e14\u8d8a\u65e9\u53c2\u4e0e\u7684\u4eba\u83b7\u5f97\u7684\u589e\u503c\u7a7a\u95f4\u4f1a\u8d8a\u5927\uff0c\u6240\u4ee5\u65e9\u671f\u53ef\u4ee5\u5feb\u901f\u6210\u957f\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u968f\u7740\u7528\u6237\u91cf\u589e\u591a\uff0c\u6216\u8005\u4ea7\u54c1\u5e02\u573a\u8d8a\u6210\u719f\uff0c\u8fd9\u79cd\u589e\u503c\u7a7a\u95f4\u5c31\u9010\u6e10\u53d8\u5c0f\uff0c\u4f46\u662f\u4ea7\u54c1\u7684\u5e02\u573a\u5374\u5df2\u7ecf\u7a33\u5b9a\u4e86\uff0c\u6b64\u65f6\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u6295\u8d44\u8005\u4f1a\u6162\u6162\u9000\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u662f\u4ea7\u54c1\u5f00\u53d1\u8005\u8fd8\u662f\u53ef\u4ee5\u6301\u7eed\u83b7\u5f97\u8f83\u5927\u7684\u6536\u5165")),(0,n.kt)("h3",{id:"512-\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"},"5.1.2 \u8ba9\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u6536\u5165"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u73a9\u5bb6\u4e3b\u8981\u662f\u4ed8\u8d39\u83b7\u5f97\u4f53\u9a8c\uff0c\u5c5e\u4e8e\u6d88\u8d39\u8005\u3002\u4ee3\u5e01\u7ecf\u6d4e\u53ca\u7cfb\u7edf\u53ef\u4ee5\u8ba9\u73a9\u5bb6\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u53c2\u4e0e\u5bf9\u6e38\u620f\u7684\u6295\u8d44\uff0c\u8fd8\u53ef\u4ee5\u4ece\u4e2d\u83b7\u5f97\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u4f8b\u5982\u73a9\u5bb6\u5728\u73a9\u4e86\u67d0\u4e2a\u6e38\u620f\u4e4b\u540e\uff0c\u89c9\u5f97\u8bbe\u8ba1\u5f88\u597d\uff0c\u5c31\u53ef\u4ee5\u8d2d\u4e70\u5176\u6210\u957f\u4ee3\u5e01\uff0c\u65e5\u540e\u7b49\u6e38\u620f\u5927\u70ed\u4e4b\u540e\u5c31\u53ef\u4ee5\u56de\u62a5\u589e\u503c\u56de\u62a5\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u7531\u4e8e\u73a9\u5bb6\u672c\u8eab\u4e5f\u4ed8\u8d39\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u73a9\u5bb6\u662f\u4e0d\u4f1a\u8d5a\u94b1\u7684\uff0c\u8fd9\u79cd\u6a21\u5f0f\u662f\u65e9\u671f\u7684\u73a9\u5bb6\u8d5a\u53d6\u540e\u6765\u52a0\u5165\u73a9\u5bb6\u7684\u94b1\uff0c\u8fd9\u4e5f\u4f7f\u5f97\u90a3\u4e9b\u613f\u610f\u6295\u8d44\u7684\u73a9\u5bb6\u66f4\u613f\u610f\u53bb\u53d1\u73b0\u4e00\u4e9b\u597d\u7684\u6e38\u620f\uff0c\u5e76\u4e14\u662f\u5904\u4e8e\u65e9\u671f\u7684\u6e38\u620f\uff0c\u8d8a\u662f\u65e9\u671f\u5b83\u4eec\u53ef\u80fd\u8d5a\u53d6\u7684\u589e\u503c\u7a7a\u95f4\u8d8a\u5927\u3002"),(0,n.kt)("p",null,"\u8fd9\u5c31\u5bf9\u6574\u4e2a\u65b0\u6e38\u620f\u7684\u53d1\u5c55\u5f62\u6210\u6b63\u5411\u53cd\u9988\u3002\u8fd9\u4e9b\u672c\u8eab\u4e5f\u662f\u9a71\u52a8\u6574\u4e2a\u7cfb\u7edf\u81ea\u6211\u8fdb\u5316\u7684\u4e00\u4e2a\u903b\u8f91\uff0c\u56e0\u4e3a\u90a3\u4e9b\u4e0d\u597d\u73a9\u7684\u6e38\u620f\uff0c\u80af\u5b9a\u6295\u8d44\u7684\u4eba\u5c31\u4f1a\u66f4\u5c11\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u628a\u4e2a\u4f53\u7ecf\u6d4e\u548c\u4ee3\u5e01\u7ecf\u6d4e\u7ed3\u5408\u8d77\u6765\uff0c\u901a\u8fc7\u5b9e\u9645\u4f53\u9a8c\u6765\u83b7\u5f97\u5bf9\u4ea7\u54c1\u7684\u611f\u53d7\uff0c\u7136\u540e\u57fa\u4e8e\u611f\u53d7\u8fdb\u884c\u6295\u8d44\uff0c\u8fd9\u6709\u70b9\u50cf\u98ce\u9669\u6295\u8d44\u8fc7\u7a0b\u4e2d\u7684\u4ea7\u54c1\u5c3d\u8c03\u7684\u8fc7\u7a0b\u3002"),(0,n.kt)("h2",{id:"52-\u9a8c\u8bc1\u548c\u7ed3\u7b97"},"5.2 \u9a8c\u8bc1\u548c\u7ed3\u7b97"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u5e73\u53f0\u4e3b\u8981\u63d0\u4f9b\u9a8c\u8bc1\uff0c\u53ef\u4ee5\u5728\u4e2d\u5fc3\u5316\u5e73\u53f0\u63d0\u4f9b\u7ed3\u7b97\uff0c\u6709\u5e73\u53f0\u4fe1\u7528\u4fdd\u8bc1\u5bf9\u4e8e\u7ed3\u7b97\u7269\u6743\u7684\u6620\u5c04\u3002\u5b9e\u9645\u4e0a\u7528\u6237\u5173\u5fc3\u7684\u662f\u6570\u636e\u548c\u81ea\u4e3b\u7684\u6743\u5229\uff0c\u8fd9\u79cd\u6620\u5c04\u672c\u8eab\u4e5f\u65e0\u6cd5\u901a\u8fc7\u533a\u5757\u94fe\u4fdd\u8bc1\uff0c\u56e0\u4e3a\u4e0d\u80fd\u5c06\u6574\u4e2a\u5e94\u7528\u5185\u7f6e\u4e8e\u533a\u5757\u94fe\u5185\u3002"),(0,n.kt)("h3",{id:"521-\u7ed3\u7b97\u6027\u80fd"},"5.2.1 \u7ed3\u7b97\u6027\u80fd"),(0,n.kt)("p",null,"\u600e\u6837\u4fdd\u8bc1\u5b9e\u65f6\u7ed3\u7b97\u7684\u6027\u80fd"),(0,n.kt)("p",null,"IOTA"),(0,n.kt)("h2",{id:"53-\u667a\u80fd\u5408\u7ea6"},"5.3 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("p",null,"\u600e\u6837\u8ba9\u7528\u6237\u5b9a\u4e49\u4ee3\u5e01\uff0c\u4ee5\u53ca\u4ee3\u5e01\u4ea4\u6613\u7684\u89c4\u5219"),(0,n.kt)("h2",{id:"54-\u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"},"5.4 \u6570\u5b57\u5316\u7684\u7269\u7269\u4ea4\u6362\u4e0e\u672a\u6765\u7ecf\u6d4e"),(0,n.kt)("p",null,"\u6240\u6709\u4ee3\u5e01\u4e4b\u95f4\u90fd\u53ef\u4ee5\u8fdb\u884c\u4ea4\u6613"),(0,n.kt)("p",null,"Lykke"),(0,n.kt)("h3",{id:"541-\u53ef\u7f16\u7a0b\u8d27\u5e01"},"5.4.1 \u53ef\u7f16\u7a0b\u8d27\u5e01"),(0,n.kt)("h3",{id:"542-\u6d41\u52a8\u6027"},"5.4.2 \u6d41\u52a8\u6027"),(0,n.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u770b\u5230\uff0c\u51e0\u4e4e\u6bcf\u4e00\u79cd\u65b0\u51fa\u73b0\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u90fd\u548c\u67d0\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c3d\u7ba1\u5f88\u591a\u9879\u76ee\u7ecf\u4e0d\u8d77\u63a8\u6572\uff0c\u800c\u501f\u6b64\u9879\u76ee\u53d1\u884c\u7684\u52a0\u5bc6\u6570\u5b57\u5e01\u88ab\u4eba\u4eec\u6316\u82e6\u4e3a \u201c\u7a7a\u6c14\u5e01\u201d\uff0c\u4e5f\u5c31\u662f\u9a97\u94b1\u7684\u5de5\u5177\uff0c\u4f46\u662f\u8fd9\u4e2a\u7ecf\u6d4e\u6a21\u578b\u7684\u51fa\u53d1\u70b9\u662f\u6b63\u9762\u7684\uff0c\u5373\u6bcf\u4e00\u4e2a\u53d1\u5e01\u7684\u533a\u5757\u94fe\u9879\u76ee\uff0c\u90fd\u5c1d\u8bd5\u4ee5\u5176\u6240\u53d1\u884c\u7684\u901a\u8bc1(tioken\uff09\u4f5c\u4e3a\u6fc0\u52b1\u5de5\u5177\uff0c\u4fc3\u8fdb\u53c2\u4e0e\u5404\u65b9\u79ef\u6781\u534f\u4f5c\u3002\u53c2\u4e0e\u8005\u5bf9\u8fd9\u4e2a\u7ecf\u6d4e\u9879\u76ee\u7684\u8d21\u732e\u8d85\u5927\uff0c\u5f97\u5230\u7684\u5e01\u8d8a\u591a\u3002\u800c\u968f\u7740\u9879\u76ee\u53d1\u5c55\u6210\u719f\uff0c\u5f97\u5230\u5e02\u573a\u8d8a\u6765\u8d8a\u591a\u7684\u8ba4\u53ef\uff0c\u5e01\u7684\u4ef7\u503c\u4e5f\u5c06\u6c34\u6da8\u8239\u9ad8\u3002\n\u8fd9\u5c31\u662f\u4e00\u4e2a\u7406\u60f3\u7684 token\u7ecf\u6d4e\u7cfb\u7d71\u3002\u6362\u6210\u73b0\u5728\u65f6\u9ae6\u7684\u672f\u8bed-\u662f\u4e00\u4e2atoken \u7ecf\u6d4e\u751f\u6001\u5708\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0c\u5982\u679c\u52a0\u5bc6\u6570\u5b9a\u800c\u548c\u88dd\u548c\u8981\u4e3a\u578b\u5730\u6bdb\u9875\u7684\u7ecf\u6ecb\u884c\u4e3a\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5176\u793e\u4f1a\u7ecf\u6d4e\u4ef7\u503c\u4f1a\u66f4\u5927\uff0c\u4e5f\u66f4\u5bb9\u6613\u88ab\u63a5\u53d7\uff0c\u5728\u7ecf\u6d4e\u8131\u865a\u5411\u5b9e\u7684\u5927\u73af\u5883\u4e0b\u3002\u66f4\u6709\u52a9\u76ca\u3002\u8fd9\u7c7b\u7ecf\u6d4e\u6d3b\u52a8\u5e76\u4e0d\u662f\u6ca1\u6709\uff0c\u6b63\u5982\u7b2c3\u7ae0\u8ba8\u8bba\u7684\u77e5\u8bc6\u8d21\u732e\u4e0e\u5206\u4eab\u7684\u4f8b\u5b50\uff0c\u7c7b\u4f3c\u5e94\u7528\u573a\u666f\u8fd8\u6709\u5f88\u591a\u3002"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u4e00\u4e2a\u6839\u672c\u80fd\u529b\u662f\u80fd\u591f\u5b9e\u73b0\u5357\u6d41\u5230\u534e\u3001\u5feb\u901f\u4ea4\u6613\u3001\u5feb\u901f\u6d41\u8f6c\u3001\u767b\u5168\u53ef\u7a2e\u7684\u529f\u80fd\u3002\u6211\u4eec\u53ef\u4ee5\u8bbe\u60f3\u4e00\u4e0b\uff0c\u628a\u5404\u79cd\u6743\u76ca\u8bc1\u660e\u6bd4\u5982\u95e8\u7968\u3001\u79ef\u5206\u3001\u5408\u540c\u3001\u8bc1\u4e66\u3001\u70b9\u5361\u3001\u8bc1\u5238\u3001\u6743\u9650\u3001\u8d44\u8d28\u7b49\u5168\u90e8\u8fdb\u4e2a\n\u901a\u8bc1\u5316 \uff08tokenization \uff09\uff0c\u5728\u533a\u5757\u94fe\u4e0a\u6d41\u8f6c\uff0c\u653e\u5230\u5e02\u573a\u4e0a\u4ea4\u6613\uff0c\u8ba9\u5e02\u573a\u81ea\u52a8\u786e\u5b9a\u5176\u4ef7\u683c\uff0c\u540c\u65f6\u5728\u73b0\u5b9e\u7ecf\u6d4e\u751f\u6d3b\u4e2d\u53ef\u4ee5\u6d88\u8d39\u3001\u53ef\u4ee5\u9a8c\u8bc1\uff0c\u8fd9\u4e9b\u90fd\u662f\u7d27\u8d34\u5b9e\u4f53\u7ecf\u6d4e\u7684\u826f\u6027\u5e94\u7528\u3002\ntoken \u7ecf\u6d4e\u5177\u6709\u4e00\u4e2a\u7279\u70b9\uff0c\u5c31\u662f\u5404\u4e2a\u7ecf\u6d4e\u751f\u6001\u5708\u7684 token \u90fd\u5177\u6709\u7279\u5b9a\u7ef4\u5ea6\u4e0a\u7684\u4ef7\u503c\uff0c\u5728\u5404\u81ea\u7684\u5708\u5b50\u5185\u662f\u4e0d\u53ef\u6216\u7f3a\u7684\u3002\u4f5c\u4e3a\u4e00\u4e2a\u5f00\u653e\u7684\u7ecf\u6d4e\u7cfb\u7edf\uff0c\u5708\u5185\u6210\u5458\u7684\u8fdb\u51fa\u4f1a\u5e26\u6765 token \u7684\u6d41\u52a8\u548c\u4ea4\u6362\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u51fa\u73b0\u7c7b\u4f3c\u4e0d\u540c\u8d27\u5e01\u4e4b\u95ee\u5151\u6362\u7684\u60c5\u51b5\u3002\u5404\u79cdtoken \u53ef\u4ee5\u7528\u6cd5\u5e01\u6807\u4ef7\uff0c\u4f46\u90fd\u7981\u6b62\u6cd5\u5e01\u76f4\u6309\u66ff\u4ee3\u5404\u79cd\u5e01\u5728\u6240\u5728\u7684 token \u7ecf\u6d4e\u751f\u6001\u5708\u5185\u4f7f\u7528\u3002\n\u8fd9\u79cd\u5207\u65ad\u4e86\u6cd5\u5e01\u8fdb\u5165token \u7ecf\u6d4e\u751f\u6001\u5708\uff0c\u800c\u5c06token \u4f5c\u4e3a\u6240\u5728\u7ecf\u6d4e\u751f\u6001\u5708\u7684\u201c\u56fe\u5e01\u201d\u7684\u7ecf\u6d4e\u73b0\u8c61\u662f\u503c\u5f97\u63a2\u8ba8\u7684\u3002\n\u8bd5\u60f3\u4e00\u4e2a\u8fd9\u6837\u7684\u793e\u4f1a\uff0c\u6cd5\u5e01\u4e0d\u518d\u662f\u6240\u6709\u7ecf\u6d4e\u6d3b\u52a8\u7684\u8d27\u5e01\u5a92\u4ecb\uff0c\u793e\u4f1a\u7ecf\u6d4e\u751f\u6d3b\u88ab\u5206\u6210\u4e86\u591a\u6837\u5316\u7684\u5f88\u540d\u516c\u5f00\u653e\u7684\u5708\u5b50\uff0c\u6bcf\u4e2a\u5708\u5b50\u90fd\u6709\u81ea\u5df1\u7684\u7ecf\u6d4e\u6d3b\u52a8\uff0c\u5728\u7279\u5b9a\u8303\u56f4\u5185\uff0c \u4f7f\u7528\u767d\u5df1\u7684\u201c\u5708\u5e01\u201d\u3002\u4f46\u4e5f\u6709\u4eba\n\u5728\u8fd9\u4e9b\u7ecf\u6d4e\u6d3b\u52a8\u4e4b\u5916\uff0c\u5904\u4e8e\u5e73\u5e38\u751f\n\u6d3b\n\u5b50\uff0c\u4f7f\u7528\u7684\u662f\u6cd5\u5e01\u4f5c\u4e3a\u4ea4"),(0,n.kt)("p",null,"\u6613\u5a92\u4ecb\u3002\u6bcf\u4e2a\u4eba\u6bcf\u65f6\u6bcf\u523b\u90fd\u5728\u4e0d\u540c\u7684\u5708\u5b50\u95f4\u6d41\u52a8\uff0c\u5728\u4e0d\u540c\u7684\u5708\u5b50\u904a\n\u5faa\u900f\u660e\u7684\u89c4\u5219\uff0c\u4f7f\u7528\u4e0d\u540c\u7684 \u201c\u5708\u5e01\u201d\n\uff0c\u76f8\u5e94\u4e5f\u7559\u4e0b\u4e86\u53ef\u8ffd\u6eaf\u548c\u4e0d\u53ef\n\u7be1\u6539\u7684\u6d3b\u52a8\u8bb0\u5f55\uff08\u56fe 4.3\uff09\u3002\n\u6743\u76ca\u8bc1\u660e\n\u5408\u7f51\n\u6cdf\u4e66\n\u56fe 4.3 \u6743\u76ca\u8bc1\u660e\u901a\u8bc1\u5316\n\u8fd9\u6216\u8bb8\u662f\u4e00\u4e2a\u66f4\u52a0\u6709\u5e8f\u7684\u793e\u4f1a\u5f62\u6001\u3002\u6709\u4e86token\uff0c\u53c2\u4e0e\u8005\u3001\u9879\n\u4e14\u5efa\u8bbe\u8005\u3001\u4ea7\u54c1\uff0c\u8fd9\u6b64\u8981\u7d20\u5728\u7279\u5b9a\u7ecf\u6d4e\u751f\u6001\u570b\u5185\u6709\u673a\u5730\u6d4e\u52a8\u8d77\u6765\u3002\u8fdb\u4eba\u5712\u5b50\u7684\u4eba\u8d8a\u591a\uff0c\u751f\u5e7f\u8bdd\u52a8\u8d8a\u660c\u76db\uff0ctoken\u5c31\u8d8a\u6709\u4ef7\u8857\u3002\u5927\u708e\u793e\u4f1a\u751f\u6d3b\u4f1a\u51fa\u73b0\u767d\u7ec4\u7ec7\u7ecf\u6d4e\u751f\u6001\uff0ctoken \u53ef\u4ee5\u65b9\u4fbf\u3001\u4f4e\u6210\u672c\u5730\u5b9e\u73b0\u95dc\n\u5185\u7684\u6295\u7968\u548c\u8868\u6c7a\u3002\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u8fd8\u4ece\u672a\u6709\u4e00\u4e2a\u56fd\u5bb6\u7ecf\u5386\u8fc7\u8fd9\u6837\u4e00\u4e2a\n\u5b58\u5728\u591a\u79cd\u4ef7\u503c\u7b26\u53f7\u548c\u591a\u79cd\u4ef7\u503c\u5c3a\u5ea6\u7684\u793e\u4f1a\uff0c\u5728\u8fd9\u4e2a\u793e\u4f1a\u4e2d\u793e\u4f1a\u6cbb\u7406\u3001\u56fd\u5bb6\u7ba1\u7406\u3001\u5b8f\u89c2\u7ecf\u6d4e\u7b49\u65b9\u9762\uff0c\u90fd\u4f1a\u51fa\u73b0\u524d\u6240\u672a\u6709\u7684\u8003\u9a8c\uff0c\u5f88\u591a\u7ecf\u6d4e\u548c\u793e\u4f1a\u89c4\u5219\u90fd\u4f1a\u9010\u6e10\u53d1\u751f\u6df1\u523b\u7684\u53d8\u5316\u3002"),(0,n.kt)("h2",{id:"55-\u5e73\u53f0\u4fe1\u7528"},"5.5 \u5e73\u53f0\u4fe1\u7528"),(0,n.kt)("p",null,"\u5e73\u53f0\u4fe1\u7528\u4e3b\u8981\u662f\u6307\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u7269\u6743\u5230\u5e73\u53f0\u8d44\u4ea7\u7684\u6620\u5c04\u4fe1\u7528\u4fdd\u8bc1\uff0c\u4f8b\u5982\u7ec4\u4ef6\uff0c\u6807\u51c6\u548c\u4f5c\u54c1"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6295\u8d44\u8005\u548c\u521b\u4f5c\u7528\u6237\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u7c7b\u4f3c\u516c\u7ea6\u7684\u534f\u8bae\u673a\u5236\uff0c\u4fdd\u8bc1\u6295\u8d44\u8005\u6743\u76ca\uff0c\u4ee5\u53ca\u5efa\u7acb\u4e00\u4e9b\u8282\u7ea6\u65e0\u63a7\u5236\u4eba\u7ba1\u7406\u548c\u6cd5\u5f8b\u4e4b\u95f4\u7684\uff0c\u7c7b\u4f3c\u6cd5\u5f8b\u7684\u7ea6\u675f")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u672c\u8d28\u4e0a\u53ea\u80fd\u4fdd\u8bc1\u5b58\u5165\u533a\u5757\u94fe\u7684\u6570\u636e\u7684\u4e0d\u53ef\u7be1\u6539\u6027\uff0c\u6240\u4ee5\u8fd9\u91cc\u9762\u5c31\u5b58\u5728\u6f0f\u6d1e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u5728\u533a\u5757\u94fe\u4e2d\u7684\u6570\u636e\u662f\u65e0\u6cd5\u4fdd\u8bc1\u4fe1\u7528\u7684")),(0,n.kt)("p",null,"\u800c\u8fd9\u6837\u7684\u6570\u636e\u662f\u5f88\u591a\u7684\uff0c\u800c\u4e14\u51e0\u4e4e\u4e0d\u53ef\u80fd\u7edd\u5bf9\u4fdd\u8bc1\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u4e0a\uff0c\u56e0\u4e3a\u533a\u5757\u94fe\u7684\u6838\u5fc3\u7684\u5206\u5e03\u5f0f\u5b58\u50a8\u548c\u8ba1\u7b97\uff0c\u5c31\u5bfc\u81f4\u4eba\u7c7b\u4fe1\u606f\u51e0\u4e4e\u4e0d\u53ef\u80fd\u5c06\u6240\u6709\u4fe1\u606f\u8fc1\u79fb\u81f3\u533a\u5757\u94fe\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u533a\u5757\u94fe\u4e0a\u4ea4\u6613\u7684\u6570\u503c\u867d\u7136\u662f\u7edd\u5bf9\u4e0d\u53ef\u7be1\u6539\u7684\uff0c\u4f46\u662f\u5176\u6570\u503c\u5bf9\u5e94\u5b9e\u7269\u7684\u6620\u5c04\u5173\u7cfb\u5219\u662f\u9700\u8981\u7b2c\u4e09\u65b9\u4fe1\u7528\u673a\u6784\u62c5\u4fdd\u7684\uff0c\u5426\u5219\u8fd9\u4e9b\u6570\u636e\u4e5f\u662f\u53ef\u80fd\u5b58\u5728\u6b3a\u9a97\u7684\uff0c\u800c\u5b9e\u9645\u4e0a\u4f20\u7edf\u7684\u5546\u4e1a\u6b3a\u8bc8\u4e2d\uff0c\u6570\u636e\u8d26\u672c\u672c\u8eab\u4f5c\u5047\u53ef\u80fd\u53cd\u800c\u662f\u8c28\u614e\u7684\uff0c\u56e0\u4e3a\u8fd9\u90e8\u5206\u6bd4\u8f83\u5bb9\u6613\u88ab\u67e5\u51fa\u6765\uff0c\u5c24\u5176\u73b0\u5728\u672c\u8eab\u6570\u5b57\u5316\u4e5f\u6bd4\u8f83\u591a\u4e86\uff0c\u4f46\u662f\u4f5c\u5047\u7684\u5f80\u5f80\u90fd\u5728\u4e8e\u8fd9\u4e9b\u8d44\u4ea7\u6240\u6807\u6ce8\u7684\u6570\u5b57\u8ddf\u5b9e\u9645\u4ef7\u503c\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u8fd9\u5374\u662f\u6700\u96be\u7ba1\u7406\u7684\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4e4e\u5927\u90e8\u5206\u9700\u8981\u5360\u7528\u5927\u91cf\u5b58\u50a8\u7684\u6570\u636e\u5f88\u96be\u5b58\u50a8\u5728\u533a\u5757\u94fe\uff0c\u4f8b\u5982\u628a\u4f60\u7f51\u76d8\u7684\u7167\u7247\u6570\u636e\u653e\u5230\u533a\u5757\u94fe\uff0c\u4f60\u627f\u62c5\u5f97\u8d77\u8fd9\u4e2a\u6210\u672c\u5417"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\uff0c\u8ba1\u7b97\u7a0b\u5e8f\u4e5f\u662f\u4e00\u4e2a\u4fe1\u7528\u95ee\u9898\u7684\u6765\u6e90\uff0c\u5982\u679c\u4f60\u7684\u8ba1\u7b97\u4e0d\u662f\u5728\u533a\u5757\u94fe\u4e0a\u7684\uff0c\u7406\u8bba\u4e0a\u8bf4\u8fd9\u4e5f\u662f\u5bb9\u6613\u51fa\u95ee\u9898\u7684\uff0c\u4f46\u662f\u8ba1\u7b97\u653e\u5728\u533a\u5757\u94fe\u51e0\u4e4e\u4e5f\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u6bd4\u5982\u4f60\u5f97\u628a\u6240\u6709\u4ee3\u7801\u8f6c\u5316\u6587\u533a\u5757\u94fe\u865a\u62df\u673a\u7684\u4ee3\u7801\uff0c\u53e6\u5916\u662f\u9762\u4e34\u6e90\u4ee3\u7801\u5f00\u6e90\u7684\u95ee\u9898\uff0c\u4ee5\u53ca\u540c\u6837\u7684\u5927\u89c4\u6a21\u8ba1\u7b97\u6027\u80fd\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u7edd\u5bf9\u4fe1\u7528\u5b89\u5168\u7684\u533a\u5757\u94fe\u662f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u6570\u636e\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u903b\u8f91\u8ba1\u7b97\u90fd\u5728\u533a\u5757\u94fe\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u8d44\u4ea7\u539f\u751f\u5c31\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u6240\u4ee5\u4e0d\u6d89\u53ca\u4efb\u4f55\u94fe\u5916\u7684\u5173\u8054\u548c\u64cd\u4f5c")),(0,n.kt)("p",null,"RealityIS\u5e73\u53f0\u4e2d\u7684\u6240\u6709\u8d44\u6e90\u539f\u751f\u662f\u6570\u5b57\u8d44\u4ea7\uff0c\u53ea\u8981\u4fdd\u8bc1\u597d\u533a\u5757\u94fe\u4fe1\u606f\u5230\u6570\u5b57\u8d44\u4ea7\u7684\u6620\u5c04\uff0c\u5c31\u80fd\u66f4\u5b89\u5168\u3002"),(0,n.kt)("h3",{id:"551-\u7528\u6237\u793e\u533a\u534f\u8bae"},"5.5.1 \u7528\u6237\u793e\u533a\u534f\u8bae"),(0,n.kt)("h3",{id:"552-\u4ee3\u5e01\u534f\u8bae"},"5.5.2 \u4ee3\u5e01\u534f\u8bae"),(0,n.kt)("h2",{id:"56-\u73b0\u5b9e\u5e94\u7528"},"5.6 \u73b0\u5b9e\u5e94\u7528"),(0,n.kt)("p",null,"\u901a\u8fc7\u6a21\u62df\u548c\u8ddf\u8e2a\u771f\u5b9e\u4e16\u754c\u7684\u67d0\u4e9b\u89c4\u5f8b\uff0c\u6765\u89e3\u51b3\u73b0\u5b9e\u95ee\u9898"),(0,n.kt)("h2",{id:"57-\u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"},"5.7 \u793e\u533a\u6cbb\u7406\u4e0e\u884c\u4e3a\u4ee3\u5e01"),(0,n.kt)("h3",{id:"571-\u73a9\u5bb6\u9053\u5fb7"},"5.7.1 \u73a9\u5bb6\u9053\u5fb7"),(0,n.kt)("p",null,"\u53d1\u884c\u4ee3\u5e01\uff0c\u5982\u679c\u957f\u65f6\u95f4\u6ca1\u6709\u88ab\u4e3e\u62a5\u6709\u4e0d\u826f\u793e\u533a\u884c\u4e3a\u7684\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\uff0c\u901a\u8fc7\u5229\u76ca\u6765\u4fc3\u8fdb\u793e\u4f1a\u7684\u98ce\u6c14\u3002"),(0,n.kt)("h3",{id:"572-\u793e\u533a\u5171\u540c\u5f00\u53d1"},"5.7.2 \u793e\u533a\u5171\u540c\u5f00\u53d1"),(0,n.kt)("h2",{id:"58-\u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"},"5.8 \u73a9\u5bb6\u53c2\u4e0e\u7684\u7ecf\u6d4e\u5956\u52b1"),(0,n.kt)("h3",{id:"581-\u793e\u4ea4\u5206\u4eab"},"5.8.1 \u793e\u4ea4\u5206\u4eab"),(0,n.kt)("p",null,"\u7531\u4e8e\u793e\u4ea4\u5206\u4eab\u662f\u91cd\u8981\u7684\u4e00\u90e8\u5206\uff0c\u53ef\u4ee5\u8ba9\u670b\u53cb\u4e4b\u95f4\u7684\u4e92\u52a8\u8f6c\u6362\u4e3aRealityCoin\u5956\u52b1"),(0,n.kt)("h3",{id:"582-\u53c2\u4e0e\u5185\u6d4b"},"5.8.2 \u53c2\u4e0e\u5185\u6d4b"),(0,n.kt)("p",null,"\u63d0\u4ea4bug\u6216\u8005\u5efa\u8bae\uff0c\u83b7\u5f97\u5f00\u53d1\u5546\u63a5\u53d7\u7684\u53ef\u4ee5\u83b7\u5f97\u4ee3\u5e01\u5956\u52b1\u3002"),(0,n.kt)("h2",{id:"59-\u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"},"5.9 \u6570\u5b57\u8d27\u5e01\u5bf9\u5e73\u53f0\u7684\u5f71\u54cd"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6e38\u620f\u4e2d\uff0c\u6e38\u620f\u4ee3\u5e01\u672c\u8eab\u4e0d\u4f1a\u5f71\u54cd\u5230\u6e38\u620f\u672c\u8eab\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5f53\u4ee3\u5e01\u5f62\u6210\u4e00\u79cd\u66f4\u5927\u8303\u56f4\u7684\u4e1c\u897f\uff0c\u4ed6\u53ef\u80fd\u5bf9\u6e38\u620f\u672c\u8eab\u9020\u6210\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u4f8b\u5982\u4ee3\u5e01\u53ef\u80fd\u4f1a\u8d2c\u503c\u6216\u8005\u5347\u503c\uff0c\u8fd9\u5728\u4f20\u7edf\u6e38\u620f\u5185\u662f\u4e0d\u4f1a\u53d1\u751f\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u65f6\u5019\u4ee3\u5e01\u7ecf\u6d4e\u7684\u4e00\u4e9b\u6839\u672c\u6027\u7f3a\u9677\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ef7\u503c\u4e0d\u7a33"),(0,n.kt)("li",{parentName:"ul"},"\u516c\u4fe1\u529b\u4e0d\u5f3a"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u63a5\u53d7\u8303\u56f4\u6709\u9650"),(0,n.kt)("li",{parentName:"ul"},"\u5bb9\u6613\u4ea7\u751f\u8f83\u5927\u7684\u8d1f\u5916\u90e8\u6027")),(0,n.kt)("p",null,"\u5b83\u5f88\u96be\u901a\u8fc7\u516c\u4f17\u548c\u5e02\u573a\u7684\u68c0\u9a8c\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u4e0d\u7ba1\u91c7\u7528\u7684\u6280\u672f\u6709\u591a\u5148\u8fdb\uff0c\u91c7\u7528\u8fd9\u7c7b\u52a0\u5bc6\u6570\u5b57\u5e01\u4f5c\u4e3a\u201c\u8d27\u5e01\u201d\uff0c\u4ecd\u662f\u8d70\u56de\u5934\u8def\uff0c\u662f\u56de\u5f52\u4e00\u79cd\u843d\u540e\u7684\u8d27\u5e01\u5f62\u6001\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u4e3a\u4e86\u907f\u514d\u8fd9\u4e9b\u7f3a\u70b9\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u50cf\u4f20\u7edf\u6e38\u620f\u4e00\u6837\uff0c\u5c06\u8d27\u5e01\u5c5e\u6027\u63a7\u5236\u5728\u6e38\u620f\u6216\u8005\u5e73\u53f0\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u4e25\u683c\u63a7\u5236\u6295\u673a\u884c\u4e3a\u5e26\u6765\u7684\u5f71\u54cd")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u7406\u5ff5\u5b9e\u9645\u4e0a\u4f7f\u6211\u4eec\u5728\u4f7f\u7528\u4ee5\u533a\u5757\u94fe\u4e3a\u5f88\u7684\u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u5b57\u7ecf\u6d4e\u65b9\u9762\u63d0\u51fa\u4e24\u4e2a\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53bb\u4e2d\u5fc3\u5316\uff0c\u662f\u7528\u6765\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\u548c\u4e2a\u4eba\u9690\u5f0f\uff0c\u662f\u7528\u6237\u7684\u5ba2\u89c2\u9700\u6c42"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u8d27\u5e01\u7684\u884c\u4e3a\uff0c\u66f4\u591a\u662f\u5c11\u6570\u6295\u673a\u8005\u7684\u9700\u6c42\uff0c\u800c\u4e0d\u662f\u5e7f\u5927\u7528\u6237\u7684\u9700\u6c42\uff0c\u5f53\u7136\u4ee3\u5e01\u7ecf\u6d4e\u6709\u4e00\u5b9a\u7684\u4f18\u52bf\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u8fd9\u90e8\u5206\u63a7\u5236\u5728RealityIS\u5e73\u53f0\u5185\u90e8\uff0c\u800c\u4e0d\u4f1a\u50cf\u5176\u4ed6\u6570\u5b57\u8d27\u5e01\u4e00\u6837\u76ee\u6807\u4e3a\u901a\u7528\u7684\u4ef7\u503c\u4ea4\u6362\u65b9\u5f0f\u3002")),(0,n.kt)("h2",{id:"510-\u67b6\u6784\u7f3a\u9677"},"5.10 \u67b6\u6784\u7f3a\u9677"),(0,n.kt)("h3",{id:"5101-\u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"},"5.10.1 \u4e0d\u5408\u7406\u7684\u6fc0\u52b1\u4f53\u7cfb"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u516c\u94fe\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u548c\u8ba1\u7b97\u5b89\u5168\uff0c\u5bf9\u8282\u70b9\u7ed9\u4e88\u4e86\u8d85\u989d\u7684\u6fc0\u52b1\uff0c\u8fd9\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6316\u77ff\u4ea7\u751f\u7684\u539f\u59cb\u4ee3\u5e01\uff0c\u5e76\u4e14\u8fd9\u662f\u4ee3\u5e01\u7684\u539f\u751f\u548c\u552f\u4e00\u7684\u53d1\u884c\u65b9\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u6613\u7684\u624b\u7eed\u8d39")),(0,n.kt)("p",null,"\u7531\u4e8e\u8282\u70b9\u6570\u91cf\u5e9e\u5927\uff0c\u4ee5\u53ca\u8282\u70b9\u9700\u8981\u6301\u7eed\u7ef4\u6301\u4e0b\u53bb\uff0c\u56e0\u6b64\u533a\u5757\u94fe\u8282\u70b9\u7684\u6210\u672c\u662f\u6781\u5ea6\u9ad8\u6602\u7684\uff0c\u5b83\u8fdc\u8fdc\u8d85\u51fa\u4e86\u8ba1\u7b97\u8d44\u6e90\u672c\u8eab\u4f5c\u4e3a\u4e91\u8ba1\u7b97\u57fa\u7840\u8bbe\u65bd\u7684\u6210\u672c\uff0c\u5b83\u8fd8\u5728\u53e6\u5916\u4e24\u4e2a\u5c42\u9762\u63a7\u5236\u7740\u8fd9\u79cd\u9ad8\u6602\u7684\u6fc0\u52b1\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8282\u70b9\u662f\u9700\u8981\u6c38\u4e45\u7ef4\u6301\u4e0b\u53bb\u7684\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u4e2a\u6301\u7eed\u9ad8\u6602\u6210\u672c")),(0,n.kt)("p",null,"\u5e76\u4e14\uff0c\u8282\u70b9\u867d\u7136\u8d5a\u53d6\u4e86\u5927\u91cf\u7684\u6fc0\u52b1\uff0c\u4f46\u662f\u5b83\u4eec\u786e\u5b9e\u6574\u4e2a\u4f53\u7cfb\u91cc\u6700\u6ca1\u6709\u521b\u9020\u6027\u7684\u52b3\u52a8\u4ed8\u51fa\uff0c\u76f8\u5bf9\u4e8e\u90a3\u4e9b\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ef4\u62a4\u5e73\u53f0\u8fed\u4ee3\u5f00\u53d1\u5347\u7ea7\u7684\u5f00\u53d1\u8005"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u90a3\u4e9b\u771f\u6b63\u521b\u9020\u52b3\u52a8\u4ef7\u503c\u7684\u751f\u6210\u8005")),(0,n.kt)("p",null,"\u8fd9\u90fd\u662f\u65e2\u4e0d\u79d1\u5b66\u7684\uff0c\u6781\u4e0d\u5408\u7406\u7684\uff0c\u90a3\u4e9b\u4f20\u7edf\u884c\u4e1a\u771f\u6b63\u4ece\u4e8b\u521b\u9020\u52b3\u52a8\u548c\u4ef7\u503c\u751f\u6210\u7684\u4ece\u4e1a\u8005\uff0c\u5b83\u4eec\u672c\u8d28\u4e0a\u6ca1\u6709\u4ece\u533a\u5757\u94fe\u83b7\u5f97\u592a\u591a\u597d\u5904\uff08\u9664\u4e86\u54ea\u4e9b\u81ea\u5e26\u64cd\u4f5c\u5c5e\u6027\u7684NFT\u4e4b\u7c7b\u7684\u521b\u4f5c\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u90a3\u4e9b\u771f\u6b63\u751f\u6210\u5546\u54c1\u7684\u751f\u6210\u8005\uff0cTA\u7684\u7269\u54c1\u4ea4\u6613\u88ab\u8feb\u4f7f\u7528\u6570\u5b57\u8d27\u5e01\u8fdb\u884c\u7ed3\u7b97\uff0c\u8fd9\u5c31\u8feb\u4f7f\u4ed6\u4eec\u53bb\u8d2d\u4e70\u533a\u5757\u94fe\u539f\u751f\u6570\u5b57\u8d27\u5e01\uff0c\u8fd9\u5728\u5bfc\u81f4\u6570\u5b57\u8d27\u5e01\u6d41\u901a\u7684\u540c\u65f6\uff0c\u8feb\u4f7f\u8fd9\u4e9b\u4eba\u9762\u4e34\u7740\u6570\u5b57\u8d27\u5e01\u7684\u98ce\u9669\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u4ed6\u4eec\u7684\u8d2d\u4e70\u6570\u5b57\u8d27\u5e01\u7684\u672c\u8eab\u5c31\u627f\u62c5\u4e86\u65e9\u671f\u4ee5\u53ca\u6570\u5b57\u8d27\u5e01\u589e\u503c\u9020\u6210\u7684\u6ea2\u4ef7\u6210\u672c"),(0,n.kt)("li",{parentName:"ul"},"\u53e6\u5916\u662f\uff0c\u7531\u4e8e\u8fd9\u79cd\u6ea2\u4ef7\u7684\u98ce\u9669\uff0c\u4ed6\u4eec\u638c\u63e1\u7684\u6570\u5b57\u8d27\u5e01\u9762\u4e34\u7740\u8d2c\u503c\u7684\u98ce\u9669")),(0,n.kt)("p",null,"\u800c\u8fd9\u79cd\u98ce\u9669\u51e0\u4e4e\u662f\u7edd\u5bf9\u5b58\u5728\u7684\uff0c\u56e0\u4e3a\u6570\u5b57\u8d27\u5e01\u603b\u4f53\u4e0a\u5e76\u4e0d\u662f\u8ddf\u7ecf\u6d4e\u751f\u6210\u6302\u94a9\u7684\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u7684\u989d\u5ea6\u5f88\u4f4e\uff0c\u4f46\u662f\u5b83\u4eec\u51e0\u4e4e\u5360\u636e\u4e00\u6837\u7684\u8ba1\u7b97\u8d44\u6e90"),(0,n.kt)("li",{parentName:"ul"},"\u5f88\u591a\u4ea4\u6613\u5b58\u5728\u5927\u91cf\u7684\u6295\u673a\u884c\u4e3a")),(0,n.kt)("p",null,"\u8fd9\u4e9b\u6295\u673a\u884c\u4e3a\u4e0e\u771f\u5b9e\u7ecf\u6d4e\u884c\u4e3a\u6df7\u5728\u4e00\u8d77\uff0c\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u751f\u6001\u6781\u4e0d\u5408\u7406\uff0c\u5bfc\u81f4\u6781\u4e0d\u7a33\u5b9a\uff0c\u98ce\u9669\u6781\u5927\u3002"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u5728\u5c06\u533a\u5757\u94fe\u7684\u597d\u5904\uff0c\u5f88\u5c11\u6709\u4eba\u4f1a\u53bb\u63ed\u793a\u8fd9\u4e9b\u98ce\u9669\uff0c\u4e5f\u5f88\u5c11\u6709\u53c2\u4e0e\u8005\u771f\u6b63\u4e86\u89e3\u8fd9\u4e9b\u98ce\u9669\u3002"),(0,n.kt)("h3",{id:"5102-\u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"},"5.10.2 \u9ad8\u98ce\u9669\u9ad8\u56de\u62a5"),(0,n.kt)("p",null,"\u5f53\u7136\u5bf9\u4e8e\u77ff\u5de5\u548cICO\u7684\u65e9\u671f\u53c2\u4e0e\u8005\uff0c\u56e0\u4e3a\u4ed6\u4eec\u7684\u6295\u5165\u662f\u53ef\u80fd\u6ca1\u6709\u4efb\u4f55\u56de\u62a5\u7684\uff0c\u56e0\u6b64\u65e9\u671f\u9762\u4e34\u7740\u6781\u5927\u7684\u98ce\u9669\uff0c\u80af\u5b9a\u662f\u9700\u8981\u6bd4\u6b63\u5e38\u66f4\u5927\u4e00\u4e9b\u7684\u7ecf\u6d4e\u56de\u62a5\u4f5c\u4e3a\u4ee3\u4ef7\uff0c\u5426\u5219\u4ed6\u4eec\u5c31\u4e0d\u4f1a\u5192\u8fd9\u4e2a\u98ce\u9669\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e5f\u662f\u4e00\u79cd\u6fc0\u52b1\u7c7b\u4f3c\u521b\u4e1a\u7684\u673a\u5236\u3002\u4ed6\u4eec\u7684\u65e9\u671f\u884c\u4e3a\u4ece\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u7c7b\u4f3c\u53c2\u4e0e\u521b\u4e1a\u3002"),(0,n.kt)("h1",{id:"6-applications"},"6. Applications"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u4ea7\u54c1\u8981\u601d\u80033D\u5e26\u6765\u7684\u4ef7\u503c\u589e\u76ca\uff0c\u800c\u4e0d\u662f\u7b80\u5355\u628a\u4e1c\u897f\u642c\u52303D\u6216XR"),(0,n.kt)("p",null,"1\u3001\u751f\u65e5\u5899"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env1",src:l(595).Z,width:"1744",height:"1034"})),(0,n.kt)("p",null,"\u597d\u53cbA\u7528AR\u624b\u673a\u6216\u773c\u955c\u627e\u4e00\u5757\u5899\u9762\u8fdb\u884c\u521b\u4f5c\uff0c\u5176\u4e2d\u53ef\u4ee5\u628a\u80cc\u666f\u56fe\u8272\uff0c\u7eaf\u8272\u6216\u67d0\u79cdpattern\uff0c\u7136\u540e\u5728\u5899\u4e0a\u8bbe\u7f6e\u88c5\u9970\u548c\u5b9a\u5236\u795d\u798f\uff0c\u5176\u4e2d\u67d0\u4e9b\u5143\u7d20\u5305\u542b\u4e00\u4e9b\u4ea4\u4e92\uff1b\u6700\u540e\u5c06\u7ed3\u679c\u53d1\u7ed9\u597d\u53cbB\uff0c\u597d\u53cbB\u627e\u4e00\u4e2a\u7acb\u9762\u6216\u8005\u7eaf\u865a\u62df\u7684\u65b9\u5f0f\u5c31\u53ef\u4ee53D\u67e5\u770b\uff0c\u5982\u679c\u662f\u7acb\u9762\uff0c\u4e5f\u6839\u636e\u8bed\u4e49\u8bc6\u522b\uff0c\u5c06\u80cc\u666f\u5899\u6362\u8272"),(0,n.kt)("p",null,"\u53ef\u4ee5\u70b9\u51fb\u4ea4\u4e92\u6709\u751f\u65e5\u76f8\u5173\u7684\u6d41\u7a0b\uff0c\u4f8b\u5982\u70b9\u8721\u70db\uff0c\u51fa\u73b0\u7279\u6548\uff0c\u5531\u751f\u65e5\u6b4c\uff0c\u73b0\u5b9e\u7279\u5b9a\u7684\u4fe1\u606f\uff0c\u597d\u53cb\u4e00\u8d77\u56f4\u89c2\u7b49\u7b49"),(0,n.kt)("p",null,"2\u3001\u4e8c\u7ef4\u5899\u9762\u6d82\u9e26\u7c7b\u521b\u4f5c"),(0,n.kt)("p",null,"\u968f\u4fbf\u627e\u4e00\u5757\u7a7a\u5730\u5730\u9762\uff0c\u4ece\u5730\u9762\u62c9\u4e00\u4e2a\u5782\u76f4\u9762\uff0c\u5c31\u53ef\u4ee5\u8fdb\u884c\u5899\u9762\u827a\u672f\u521b\u4f5c"),(0,n.kt)("p",null,"\u6709\u4ea4\u4e92\u7684\u6d82\u9e26"),(0,n.kt)("p",null,"3\u30013D\u8131\u53e3\u79c0"),(0,n.kt)("p",null,"4\uff0c\u79fb\u52a8\u7684\u7075\u611f\u6c1b\u56f4"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"env",src:l(7812).Z,width:"3344",height:"1114"})),(0,n.kt)("p",null),"5, \u505a\u4e00\u4e2a\u89e3\u5bc6\u6e38\u620f",(0,n.kt)("p",null,"![00 0O R]","(resources/00 0O R.gif)"),(0,n.kt)("p",null,"\u53ef\u80fd\u5305\u542b\u79fb\u52a8\u62fc\u56fe\uff0c\u5305\u542b\u62e8\u4e00\u5b9a\u7684\u987a\u5e8f\u70b9\u4eae\u6309\u94ae\uff0c\u6240\u4ee5\u9700\u8981\u5305\u542b\u4e00\u4e9b\u7279\u5b9a\u73a9\u6cd5\u7c7b\u578b\u7684\u6570\u636e\u7ed3\u6784"),(0,n.kt)("p",null,"6\u3001\u77e5\u8bc6\u8bb2\u89e3\u7c7b\u4f1a\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6a21\u578b\uff0c\u6709\u4e9b\u4ea4\u4e92\u70b9\u51fb\u5c55\u793a\uff0c\u666e\u901a\u4eba\u53ef\u4ee5\u5236\u4f5c\uff0c\u4e0d\u53ea\u662f\u5b98\u65b9\u5236\u4f5c\u5c11\u91cf"),(0,n.kt)("p",null,"7\u3001\u865a\u62df\u623f\u95f4"),(0,n.kt)("p",null,"\u6bd4\u5982\u73b0\u5728\u7684\u865a\u62df\u804a\u5929\u7c7b\u573a\u666f\uff0c\u4e00\u822c\u90fd\u662f\u5b98\u65b9\u63d0\u4f9b\u7684\u5c11\u6570\u56fa\u5b9a\u573a\u666f\uff0c\u6216\u8005\u5141\u8bb8\u4e00\u5b9a\u7684\u5b9a\u5236\u6027\uff0c\u4f46\u662f\u901a\u5e38\u5b9a\u5236\u80fd\u529b\u6709\u9650\uff0c\u6bd4\u5982\u51e0\u4f55\u662f\u56fa\u5b9a\u7684\uff0c\u53ea\u5141\u8bb8\u6539\u6750\u8d28\uff0c\u6216\u8005\u53ea\u5141\u8bb8\u589e\u51cf\u90e8\u4ef6\uff0c\u6216\u8005\u79fb\u52a8\u4f4d\u7f6e"),(0,n.kt)("p",null,"\u5728RealityWorld \u91cc\u7528\u6237\u4e5f\u53ef\u4ee5\u521b\u5efa\u66f4\u52a0\u4e30\u5bcc\u591a\u6837\u7684\u804a\u5929\u73af\u5883\uff0c\u7136\u540e\u9080\u8bf7\u7528\u6237\u8fdb\u6765\u804a\u5929"),(0,n.kt)("p",null,"8\u3001\u4e2a\u4eba\u6536\u85cf\u9986"),(0,n.kt)("p",null,"\u6709\u4e00\u4e2a\u81ea\u5df1\u7684\u623f\u95f4\u6216\u8005\u7279\u5b9a\u7684\u573a\u666f\uff0c\u53ef\u4ee5\u662f\u81ea\u5df1\u8bbe\u8ba1\u7684\uff0c\u6709\u81ea\u5df1\u7684\u6536\u85cf\uff0c\u53ef\u4ee5\u52a0\u5165\u4e00\u4e9b\u81ea\u5df1\u7684\u73a9\u6cd5\uff0c\u597d\u53cb\u53c2\u89c2\u53ef\u4ee5\u8d60\u9001Creation, Part"),(0,n.kt)("p",null,"9\u3001\u53bb\u4e00\u4e2a\u6d6a\u6f2b\u7684Creation \u4e2d\u7ea6\u4f1a"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://creation.id/=qwe&session=sessionid"},"creation.id/=qwe&session=sessionid")),(0,n.kt)("p",null,"10, \u57fa\u4e8e\u73b0\u5b9e\u7684\u521b\u4f5c"),(0,n.kt)("video",{src:"resources/2022-04-04 08.55.06.mov"}),(0,n.kt)("p",null,"\u73b0\u5b9e\u63d0\u4f9b\u7c97\u7565\u7684\u51e0\u4f55\u4e0e\u53c2\u8003\u6750\u8d28\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("p",null,"11\u3001"),(0,n.kt)("img",{src:"resources/APPLE ARCADE.jpg",alt:"APPLE ARCADE"}),(0,n.kt)("p",null,"12\u3001\u8fde\u7eed\u5267\uff0c\u6574\u4e2a\u5f00\u53d1\u5468\u671f\u5747\u53ef\u53d1\u5e03"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5173\u5361\u6216\u8005\u6545\u4e8b\u4e00\u70b9\u4e00\u70b9\u66f4\u65b0\uff0c\u6bcf\u6b21\u73a9\u5bb6\u73a9\u4e00\u5c0f\u6bb5\uff0c\u50cf\u8fde\u7eed\u5267\u4e00\u6837\uff0c\u751a\u81f3\u4e16\u754c\u90fd\u662f\u4e00\u70b9\u4e00\u70b9\u6784\u5efa\uff1b\u6216\u8005\u6709\u70b9\u89c2\u770b\u521b\u4f5c\u8fc7\u7a0b\uff0c\u8fc7\u53bb\u6574\u4e2a\u6e38\u620f\u9700\u8981\u4e00\u6b21\u6027\u505a\u5b8c\u518d\u8d70\u53d1\u5e03\u6d41\u7a0b\uff0c\u8fd9\u79cd\u53ef\u4ee5\u5b9e\u65f6\u628a\u4e2d\u95f4\u521b\u4f5c\u8fc7\u7a0b\u5171\u4eab\u51fa\u6765\uff0c\u53ef\u4ee5\u53cd\u9988\uff0c\u4e3b\u8981\u89e3\u51b3\u7684\u662f\u4e2d\u95f4\u4efb\u4f55\u72b6\u6001\u90fd\u53ef\u4ee5\u53d1\u5e03\uff0c\u800c\u4e0d\u662f\u8981\u7559\u5230\u6700\u540e\u53ea\u505a\u5b8c\u4e86\u518d\u53bb\u5904\u7406\u53d1\u5e03\u76f8\u5173\u7684\u4e8b\u60c5\uff0c\u8fd9\u4e9b\u4e8b\u60c5\u5bfc\u81f4\u4e0d\u80fd\u63d0\u524d\u53d1\u5e03\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662f\u4e00\u79cd\u6d41\u7a0b\u4e0a\u7684\u521b\u65b0\uff0c\u5e26\u6765\u5168\u65b0\u7684\u6a21\u5f0f"),(0,n.kt)("p",null,"13\u3001story telling"),(0,n.kt)("p",null,"![Pasted Graphic]","(resources/Pasted Graphic.jpg)"),(0,n.kt)("p",null,"*Like a well-executed joke, the pleasure is in the experience more than it is in the retelling. You have to be there."),(0,n.kt)("p",null,"Super Brothers \u5f00\u521b\u4e86\u4e00\u79cd\u53d9\u4e8b+\u4ea4\u4e92\u7684\u975e\u5e38\u4f18\u79c0\u7684\u4f53\u9a8c\uff0c\u76f8\u5bf9\u4e8e\u5355\u7eaf\u6e38\u620f\uff0c\u4ed6\u7684\u6545\u4e8b\u7ebf\u8ba9\u6574\u4e2a\u4e16\u754c\u89c2\u5448\u73b0\u66f4\u5b8c\u6574\uff0c\u76f8\u5bf9\u4e8e\u7535\u5f71\uff0c\u4ed6\u7684\u4ea4\u4e92\u53ef\u4ee5\u8ba9\u6545\u4e8b\u7684\u4f53\u9a8c\u66f4\u771f\u5b9e"),(0,n.kt)("p",null,"\u521b\u4f5c\u90e8\u5206\u6d89\u53ca\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u5747\u53ef\u4ee5\u5b9e\u73b0"),(0,n.kt)("p",null,"\u6545\u4e8b\u7684\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u73af\u5883\uff0c\u7269\u7406\u73af\u5883\u901a\u5e38\u662f\u9759\u6001\u7684\uff0c\u4f46\u4e00\u4e9b\u91cd\u8981\u7269\u54c1\u901a\u5e38\u662f\u52a8\u6001\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u4fe1\u606f\uff0c\u9700\u8981\u63a2\u7d22\u4e0d\u540c\u7684\u5730\u65b9\u4e86\u89e3\u4fe1\u606f"),(0,n.kt)("li",{parentName:"ul"},"\u4ea4\u4e92\uff0c\u5bf9\u4fe1\u606f\u7684\u63a2\u7d22\u662f\u4e00\u79cd\u4ea4\u4e92\uff0c\u5176\u4ed6\u6bd4\u5982\u89e3\u5bc6\uff0c\u5f00\u52a8\u673a\u5173\u7b49\u7b49"),(0,n.kt)("li",{parentName:"ul"},"\u4e16\u754c\u72b6\u6001")),(0,n.kt)("p",null,"14\u3001\u4e92\u52a8\u5c0f\u8bf4/\u6545\u4e8b"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u5c0f\u8bf4\u7684\u57fa\u7840\u4e0a\uff0c2D+3D\uff0c\u5148\u6587\u5b57\u4ecb\u7ecd\u57fa\u672c\u5267\u60c5\u548c\u80cc\u666f\uff0c\u7136\u540e\u8fdb\u53bb3D\u573a\u666f\uff0c\u5177\u6709\u6c89\u6d78\u611f\uff0c\u800c\u4e14\u56e0\u4e3a\u524d\u9762\u7684\u6587\u5b57\u5267\u60c5\uff0c\u5bf9\u573a\u666f\u7684\u63a2\u7d22\u4f1a\u66f4\u878d\u5165\uff0c\u7136\u540e\u6761\u4ef6\u662f\u9700\u8981\u57283D\u573a\u666f\u4e2d\u5b8c\u6210\u4e00\u5b9a\u7684\u4efb\u52a1\u624d\u80fd\u8fdb\u5165\u4e0b\u4e00\u7ae0\uff0c\u628a\u6e38\u620f\u7684\u673a\u5236\u878d\u5165\u8fdb\u6765\uff0c\u6e38\u620f\u7ed3\u5408\u6587\u5b57\u5267\u60c5\uff0c\u5f25\u8865\u4e86\u7eaf\u6e38\u620f\u63a2\u7d22\u9700\u8981\u8bdd\u8d39\u5927\u91cf\u65f6\u95f4\uff0c\u5e76\u4e14\u5267\u60c5\u6bd4\u8f83\u96f6\u788e\u7684\u611f\u89c9"),(0,n.kt)("h1",{id:"7-\u6838\u5fc3\u53c2\u8003\u67b6\u6784"},"7. \u6838\u5fc3\u53c2\u8003\u67b6\u6784"),(0,n.kt)("p",null,"\u672c\u6587\u4ecb\u7ecd\u5bf9Reality World\u6709\u5f71\u54cd\u6216\u8005\u53ef\u4ee5\u53c2\u8003\u7684\u6280\u672f\u67b6\u6784\uff0c\u901a\u8fc7\u5206\u6790\u4ed6\u4eec\u7684\u6280\u672f\u539f\u7406\uff0c\u8bc6\u522b\u5176\u80cc\u540e\u7684\u6280\u672f\u67b6\u6784\uff0c\u4ee5\u53ca\u5176\u7279\u5b9a\u6280\u672f\u67b6\u6784\u8574\u85cf\u7740\u7684\u5bf9\u5f00\u53d1\u8005\u6216\u8005\u7528\u6237\u751f\u6001\u7684\u5f71\u54cd\u3002\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u6280\u672f\u65b9\u6848\uff0c\u4e5f\u4f1a\u5206\u6790\u5176\u4f18\u7f3a\u70b9\uff0c\u4ee5\u53caReality World\u5e94\u8be5\u600e\u6837\u5438\u6536\u8fd9\u4e9b\u4f18\u70b9\uff0c\u6700\u91cd\u8981\u7684\uff0c\u6211\u4eec\u5e94\u8be5\u4ece\u8fd9\u4e9b\u67b6\u6784\u4e2d\u5f97\u5230\u4ec0\u4e48\u66f4\u6df1\u5c42\u6b21\u7684\u3001\u6709\u4ef7\u503c\u7684\u4fe1\u606f\u4ee5\u5e2e\u52a9Reality World\u6784\u5efa\u66f4\u597d\u7684\u6280\u672f\u67b6\u6784\u548c\u6280\u672f\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u6bcf\u4e2a\u53c2\u8003\u67b6\u6784\u6309\u5982\u4e0b\u7684\u683c\u5f0f\u8fdb\u884c\u63cf\u8ff0\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u65b0\u601d\u60f3"),"\uff1a\u76f8\u5bf9\u4f20\u7edf\u6280\u672f\u65b9\u6848\uff0c\u8be5\u6280\u672f\u65b9\u6848\u8be5\u6765\u4ec0\u4e48\u65b0\u601d\u60f3\u6216\u65b0\u601d\u8def"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6280\u672f\u65b9\u6848"),"\uff1a\u5bf9\u76f8\u5173\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\u8fdb\u884c\u8868\u8ff0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4e0d\u8db3\u53ca\u539f\u56e0"),"\uff1a\u5728Reality World\u7684\u65b9\u5411\u4e0a\uff0c\u8be5\u6280\u672f\u65b9\u6848\u6ca1\u6709\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u6216\u8005\u65e0\u6cd5\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff1b\u5176\u4e2d\u7684\u539f\u56e0\u662f\u56e0\u4e3a\u6280\u672f\u65b9\u6848\u7684\u4e0d\u8db3\uff0c\u8fd8\u662f\u4ea7\u54c1\u5b9a\u4f4d\u548c\u65b9\u5411\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5bf9\u6bd4"),"\uff1aReality World\u4e0e\u5176\u5bf9\u6bd4\u5b58\u5728\u54ea\u4e9b\u5dee\u5f02\uff0c\u6216\u8005\u8bf4Reality World\u901a\u8fc7\u4ec0\u4e48\u6837\u7684\u6280\u672f\u65b9\u6848\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898")),(0,n.kt)("h2",{id:"71-\u6570\u636e\u683c\u5f0f"},"7.1 \u6570\u636e\u683c\u5f0f"),(0,n.kt)("h3",{id:"711-usd"},"7.1.1 USD"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"piper-banner",src:l(7216).Z,width:"2540",height:"1120"})),(0,n.kt)("p",null,"Universal Scene Description (USD) is the first publicly available software that addresses the need to robustly and scalably interchange and augment arbitrary 3D scenes that may be** ",(0,n.kt)("strong",{parentName:"p"},"composed")," **from many elemental assets."),(0,n.kt)("h4",{id:"7111-\u65b0\u601d\u60f3"},"7.1.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u534f\u4f5c"),"\uff1aUSD\u662f\u4e00\u4e2a\u4e3a\u4e86\u5927\u89c4\u6a21\u534f\u4f5c\u7684\u9ad8\u6027\u80fd\u53ef\u6269\u5c55\u8f6f\u4ef6\u5e73\u53f0"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u4ea4\u6362"),"\uff1aUSD\u63d0\u4f9b\u4e86\u5728\u591a\u4e2aDCC\u5de5\u5177\u4e4b\u95f4\u8fdb\u884c\u4ea4\u6362\u7684\u683c\u5f0f\uff0c\u8fd9\u901a\u8fc7\u5185\u7f6e\u7684\u4e00\u4e9bschema\u5b9e\u73b0\uff0c\u5305\u62ecgeometry\uff0cshading\uff0clighting\u548cphysics\u7b49"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u5408\u6210"),"\uff1aUSD\u72ec\u7279\u7684\u5408\u6210\u7279\u6027\u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u6536\u76ca\uff0c\u6bd4\u5982\u80fd\u591f\u5c06\u4e30\u5bcc\u591a\u6837\u7684individual asset\u5408\u6210\u5230\u4e00\u4e2a\u5927\u573a\u666f\uff0c\u8fd9\u5141\u8bb8\u591a\u4eba\u540c\u6b65\u534f\u4f5c\uff08\u800c\u4e0d\u4f1a\u5bfc\u81f4\u51b2\u7a81\uff09")),(0,n.kt)("p",null,"USD\u7684\u5408\u6210\u5f15\u64ce\u5bf9\u4efb\u4f55\u7279\u5b9a\u7684domain\u662f\u65e0\u611f\u77e5\u7684\uff08agnostic\uff09\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u88ab\u6269\u5c55\u6765\u7f16\u7801\uff08encode\uff09\u4e0e\u5408\u6210\u5176\u4ed6domain\u3002"),(0,n.kt)("h4",{id:"7112-\u6280\u672f\u65b9\u6848"},"7.1.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Schema")),(0,n.kt)("p",null,"Schema\u7528\u4e8e\u4eceUsdObject\u7f16\u8f91\u3001\u67e5\u8be2\u548c\u5b9a\u4e49\u7ed3\u6784\u5316\u7684\u6570\u636e\uff08structured data\uff09\uff0c\u5927\u90e8\u5206\u6838\u5fc3\u5e93\u4e2d\u7684Schema\u662fprim schemas\uff0c\u8fd9\u53c8\u5206\u4e3a\u4e24\u7c7b\uff1a1\uff09IsA Schemas\uff1b2\uff09API Schemas\uff1b3\uff09\u53e6\u5916\u8fd8\u6709\u4e00\u4e9bSchema\u79f0\u4e3aproperty schemas\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2aprim\u53ef\u4ee5\u8ba2\u9605\u591a\u4e2aAPI Schema\uff0c\u4f46\u662f\u53ea\u80fd\u8ba2\u9605\u4e00\u4e2aIsA Schema\uff0cUSD\u63d0\u4f9b\u4e86\u5de5\u5177\u7528\u4e8e\u751f\u6210Schema\u7684\u4ee3\u7801\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"IsA Schema")),(0,n.kt)("p",null,"IsA Schema\u7528\u4e8e\u5b9a\u4e49\u4e00\u4e2aprim\u5728Stage\u4e2d\u7684\u89d2\u8272\u6216\u8005\u76ee\u7684\uff0c\u5b83\u7ee7\u627f\u81eaUsdTyped\u7c7b\uff0c\u5e76\u53ef\u4ee5\u6307\u5b9atypeName metadata\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"UsdPrim::IsA()\n")),(0,n.kt)("p",null,"IsA Schema\u53ef\u4ee5\u662f\u5b9e\u7684\u6216\u8005\u865a\u7684\uff0c\u4f8b\u5982UsdGeomImageeable\u662f\u865a\u7684IsA Schema\uff0c\u800cUsdGeomMesh\u662f\u5b9e\u7684IsA Schema\uff0c\u56e0\u4e3a\u5b83\u5305\u542b\u4e00\u4e2aDefine()\u65b9\u9762\u53ef\u4ee5\u5b9a\u4e49typeName\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"API Schema")),(0,n.kt)("p",null,"API Schema\u662fprim\u7684Schema\uff0c\u5b83\u4eec\u7528\u4e8e\u63d0\u4f9b\u63a5\u53e3\uff08API\uff09\u5bf9prim\u76f8\u5173\u7684\u6570\u636e\u8fdb\u884c\u5b9a\u4e49\u3001\u7f16\u8f91\u548c\u63d0\u53d6\u3002\u5b83\u7ee7\u627f\u81eaUsdAPISchemaBase\u7c7b\u800c\u4e0d\u662fUsdTyped\uff0c\u56e0\u6b64\u76f8\u5bf9\u4e8e\u201cis a\u201d\u53ef\u4ee5\u79f0\u4e3a\u201chas a\u201d\u3002API Schema\u6709\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Non-applied API Schemas"),(0,n.kt)("li",{parentName:"ul"},"Single and Multiple Apply Schemas"),(0,n.kt)("li",{parentName:"ul"},"Multiple-apply schemas")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Model, component and Assembly")),(0,n.kt)("p",null,"Kind\u662f\u4e00\u4e2aprim-level\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u5b83\u76f8\u5bf9\u4e8eschema type\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\uff0c\u5bf9\u5e94\u4e8eModel Hierarchy\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"model\uff0ckind\u7684\u62bd\u8c61\u57fa\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"group"),(0,n.kt)("li",{parentName:"ul"},"assembly"),(0,n.kt)("li",{parentName:"ul"},"component"),(0,n.kt)("li",{parentName:"ul"},"subcomponenet")),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8e\u66f4\u7ec6\u788e\u7684asset\u6216\u8005prim\uff0cmodel\u63d0\u4f9b\u4e00\u79cd\u5c06\u573a\u666f\u7ed3\u6784\u8fdb\u884c\u7ec6\u5206\u7684\u67b6\u6784\uff1bmodel\u7ed3\u6784\u4e5f\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u65b9\u5f0f\u7ba1\u7406\u548c\u5f15\u7528\u8d44\u6e90\uff0c\u5426\u5219\u5bf9\u66f4\u5bf9referenced assets\u5f15\u7528\u548c\u63a8\u7406\u4f1a\u53d8\u5f97\u590d\u6742\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "TreeSpruce" (\n kind = "component"\n)\n{\n # Geometry and shading prims that define a Spruce tree...\n\n def "Cone_1" (\n kind = "subcomponent"\n references = @Cones/PineConeA.usd@\n )\n {\n }\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Asset AssetInfo and Asset Resolution")),(0,n.kt)("p",null,"Asset\u662f\u80fd\u591f\u4f7f\u7528\u4e00\u4e2a\u5b57\u7b26\u4e32\u6807\u5fd7\u7b26\uff08via asset resolution\uff09\u88ab\u8bc6\u522b\u548c\u5b9a\u4f4d\u7684\u8d44\u6e90\uff0casset\u53ef\u4ee5\u662f\u4e00\u4e2a\u6587\u4ef6\uff0c\u6216\u8005\u591a\u4e2a\u6587\u4ef6\u7ec4\u5408\u5f15\u7528\u5f62\u6210\u7684\u5355\u4e2a\u6587\u4ef6\uff0c\u5b83\u4e00\u822c\u6709\u7248\u672c\u63a7\u5236\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e00\u4e9b\u5982asset dependency analysis\u7b49\u64cd\u4f5c\uff0cUSD\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7279\u6b8a\u7684\u5b57\u7b26\u4e32\u7c7b\u578b\uff0casset\uff08represents a resolvable path to another asset\uff09\uff0c\u8fd9\u6837\u6240\u6709\u7684metadata\u548cattributes\u90fd\u80fd\u88ab\u5f88\u5feb\u5730\u5b9a\u4f4d\u548c\u8bc6\u522b\u3002"),(0,n.kt)("p",null,"\u5c3d\u7ba1USD\u7684composition arcs\u80fd\u591f\u7528\u6765\u5408\u6210\u573a\u666f\uff0c\u4f46\u662f\u4ed6\u4eec\u5e76\u4e0d\u65b9\u4fbf\u5728\u5185\u5b58\u4e2d\u5bf9\u8d44\u6e90\u8fdb\u884c\u5b9a\u4f4d\u548c\u8bc6\u522b\uff0cAssetInfo\u662fcomposition arcs\u7684\u8865\u5145\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Xform "Forest_set" (\n assetInfo = {\n asset identifier = @Forest_set/usd/Forest_set.usd@\n string name = "Forest_set"\n }\n kind = "assembly"\n)\n{\n # Possibly deep namespace hierarchy of prims, with references to other assets\n}\n')),(0,n.kt)("p",null,"Asset Resolution\u662f\u5c06\u4e00\u4e2aasset path\u8f6c\u6362\u4e3a\u53ef\u4ee5\u5b9a\u4f4d\u4e00\u4e2a\u8d44\u6e90\u7684location\u7684\u8fc7\u7a0b\uff0c\u9ed8\u8ba4\u6309\u7167\u6587\u4ef6\u8def\u5f84\u8fdb\u884c\u641c\u7d22\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5b9a\u4f4d\u903b\u8f91\uff0c\u751a\u81f3\u8d44\u6e90\u4e0d\u4e00\u5b9a\u9700\u8981\u5b58\u50a8\u5728\u78c1\u76d8\u4e2d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Prim, Property and Attribute")),(0,n.kt)("p",null,"USD\u7684\u547d\u540d\u7a7a\u95f4\u4e3b\u8981\u7531\uff1aPrim\u548cProperty\u7ec4\u6210\uff0c\u5176\u4e2dPrim\u63d0\u4f9b\u5bf9\u5408\u6210\u573a\u666f\u7684\u7ec4\u7ec7\u548c\u7d22\u5f15\uff0c\u5b83\u662fUSD\u7684\u4e3b\u8981\u5bb9\u5668\uff0cprim\u53ef\u4ee5\u5305\u542b\u53e6\u4e00\u4e2aprim\uff0c\u5f62\u6210\u4e00\u4e2anamespace hierarchy Stage\uff1b"),(0,n.kt)("p",null,"Prim\uff0c\u8fde\u540c\u5b83\u7684indices\uff0c\u662fStage\u4e2d\u552f\u4e00\u88ab\u6301\u4e45\u5316\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff1b\u5bf9prim\u8fdb\u884c\u64cd\u4f5c\u7684\u63a5\u53e3\u7531UsdPrim\u7c7b\u63d0\u4f9b\uff1bprim\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2aschema typename\uff0c\u4e5f\u53ef\u4ee5\u63d0\u4f9b\u5982scene-level instancing, load/unload behavior, and deactivation\u7b49\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u800cProperty\u63d0\u4f9breal data\u3002\u6709\u4e24\u79cd\u7c7b\u578b\u7684Property\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Attribute"),(0,n.kt)("li",{parentName:"ul"},"Relationship")),(0,n.kt)("p",null,"Property\u53ef\u4ee5\u88ab\u7ec4\u6210\u65b0\u7684\u5c42\u7ea7\u4e14\u4e0d\u9700\u8981\u5f15\u5165\u65b0\u7684Prim\uff0c\u8fd9\u53ef\u4ee5\u63d0\u5347\u5185\u5b58\u7684\u5c40\u90e8\u6027\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"#usda 1.0\n\nover MyMesh\n{\n rel material:binding = \n color3f[] primvars:displayColor = [ (.4, .2, .6) ]\n}\n")),(0,n.kt)("p",null,"Attribute\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Sphere "BigBall"\n{\n double radius = 100\n double radius.timeSamples = {\n 1: 100,\n 24: 500,\n }\n}\n')),(0,n.kt)("h4",{id:"7113-usdz"},"7.1.1.3 USDZ"),(0,n.kt)("p",null,"USD\u7684\u6838\u5fc3\u662f\u65b9\u4fbf\u5bf9\u4f17\u591a\u5206\u6563\u7684\u8d44\u6e90\u8fdb\u884c\u5408\u6210\uff0c\u5176\u4e2d\u8d44\u6e90\u5df2\u5206\u6563\u7684\u788e\u7247\u5f62\u5f0f\u5206\u5e03\uff0c\u8fd9\u79cd\u673a\u5236\u662f\u4e3a\u4e86\u7f16\u8f91\u6001\u8bbe\u8ba1\u7684\uff0c\u6b64\u65f6\u6574\u4e2a\u573a\u666f\u8fd8\u6ca1\u6709\u7f16\u8f91\u5b8c\u6210\uff0c\u9700\u8981\u7ee7\u7eed\u7ef4\u6301\u8fd9\u79cd\u5206\u6563\u7684\u72b6\u6001\uff1b\u7136\u800c\u5f53\u6211\u4eec\u7684\u5185\u5bb9\u5168\u90e8\u7f16\u8f91\u5b8c\u6210\u65f6\uff0c\u5206\u6563\u7684\u6587\u4ef6\u5374\u4e0d\u4fbf\u4e8e\u7ba1\u7406\uff0c\u6b64\u65f6\u7684\u6838\u5fc3\u9700\u6c42\u662f\u5206\u53d1\uff0c\u5b83\u8981\u6c42\u4e00\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"A single object, from marshaling and transmission perspectives"),(0,n.kt)("li",{parentName:"ol"},"Potentially streamable"),(0,n.kt)("li",{parentName:"ol"},"Usable without unpacking to a filesystem")),(0,n.kt)("p",null,"USDZ\u901a\u8fc7USD\u63d0\u4f9b\u7684FileFormat plugin\u673a\u5236\u5b9e\u73b0\uff1aUsdUsdzFileFormat"),(0,n.kt)("h4",{id:"7114--\u4e0d\u8db3\u4e0e\u539f\u56e0"},"7.1.1.4 \u4e0d\u8db3\u4e0e\u539f\u56e0"),(0,n.kt)("p",null,"USD\u4e3b\u8981\u805a\u7126\u4e8e\u600e\u6837\u5bf9\u5408\u6210\u7684\u573a\u666f\u8fdb\u884c\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u56e0\u6b64\u5b83\u504f\u5411\u4e8e\u201clow-memory footprint, higher-latency data access\u201d \u800c\u4e0d\u662f \u201chigh-memory footprint, low-latency access to data\u201d\uff0c\u56e0\u4e3a\u5728\u5185\u5b58\u4e2d\u7f13\u5b58\u66f4\u591a\u6570\u636e\uff0c\u4f1a\u5f71\u54cd\u5bf9\u57fa\u4e8e\u5408\u6210\u7ed3\u6784\u573a\u666f\u7684\u7f16\u8f91\u548c\u63d0\u53d6\uff0c\u5e26\u6765\u590d\u6742\u6027\uff0c\u56e0\u4e3a\u5728\u7f16\u8f91\u9636\u6bb5\u4f1a\u6709\u66f4\u591a\u7684\u6570\u636e\u4fee\u6539\uff0c\u800c\u8fd0\u884c\u65f6\u9636\u6bb5\u5219\u57fa\u672c\u4e0a\u4fdd\u6301\u6570\u636e\u4e0d\u53d8\u3002\u6240\u4ee5USD\u4e0d\u592a\u9002\u5408\u8fd0\u884c\u65f6\u3002\u4f46\u662fUSD\u63d0\u4f9b\u4e86\u4e00\u4e9b\u4fbf\u5229\u548c\u5de5\u5177\uff08facilities\uff09\uff0c\u4f7f\u5f97\u5ba2\u6237\u7aef\u53ef\u4ee5\u5bf9UsdStage\u6784\u5efa\u4e00\u4e9b\u6269\u5c55\u6027\u7684\u7f13\u5b58\uff0c\u4ee5\u63d0\u4f9b\u5bf9USD\u6570\u636e\u7684\u4f4e\u5ef6\u65f6\u8bbf\u95ee\u3002"),(0,n.kt)("p",null,"USDZ\u4ece\u5206\u53d1\u7684\u89d2\u5ea6\u5bf9USD\u8fdb\u884c\u4e86\u589e\u5f3a\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0cUSD\u4e3b\u8981\u662f\u4e3a\u4e86\u5728DCC\u4e4b\u95f4\u8fdb\u884c\u6570\u636e\u4ea4\u6362\u548c\u534f\u540c\uff0c\u8fd9\u5168\u662f\u7f16\u8f91\u65f6\u7684\u9700\u6c42\uff0c\u6709\u5f88\u591a\u529f\u80fd\u672c\u8eab\u5bf9\u8fd0\u884c\u65f6\u6ca1\u6709\u4efb\u4f55\u7528\u5904\uff0c\u4f8b\u5982\u7531\u5927\u91cf\u7684\u788e\u7247\u7ec4\u5408\u5f62\u6210\u7684\u5927\u578b\u573a\u666f\u867d\u7136\u9002\u5408\u7f16\u8f91\u65f6\uff0c\u4f46\u662f\u5374\u4e0d\u5229\u4e8e\u8fd0\u884c\u65f6\u52a0\u8f7d\uff0c\u6240\u4ee5\u9700\u8981\u5728\u8fd0\u884c\u65f6\u5bf9USD\u8fdb\u884c\u4e00\u5b9a\u7684\u5b9a\u5236\uff0c\u4f8b\u5982\u662f\u5426\u4eceCore\u4e2d\u5220\u9664\u4e00\u4e9b\u6a21\u5757\uff0c\u6216\u8005\u53bb\u6389\u4e00\u4e9b\u529f\u80fd\u3002"),(0,n.kt)("p",null,"\u6570\u5b57\u5185\u5bb9\u7684\u751f\u547d\u5468\u671f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8f91\uff08USD"),(0,n.kt)("li",{parentName:"ul"},"\u5206\u53d1\uff08USDZ"),(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\uff08USDX\uff09")),(0,n.kt)("p",null,"\u9700\u8981\u5728USDZ\u57fa\u7840\u4e0a\u8fdb\u884c\u8fd0\u884c\u65f6\u6539\u9020\uff0c\u4f7f\u5176\u5206\u53d1\u5f97\u662f\u9002\u5408\u8fd0\u884c\u6001\u5f97\u683c\u5f0f\uff0c\u6240\u4ee5\u53ef\u4ee5\u9690\u85cf\u5206\u53d1\u6001\uff0c\u53ea\u9700\u8981\u7f16\u8f91\u548c\u8fd0\u884c\u65f6\u4e24\u4e2a\u5f62\u6001\uff1b"),(0,n.kt)("p",null,"\u540c\u65f6\u4e3a\u4e86\u4fdd\u8bc1\u7ee7\u7eed\u7f16\u8f91\uff0c\u9700\u8981\u5c06\u7f16\u8f91\u6001\u548c\u8fd0\u884c\u6001\u533a\u5206\uff0c\u4f46\u662f"),(0,n.kt)("h4",{id:"7115-\u5bf9\u6bd4"},"7.1.1.5 \u5bf9\u6bd4"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"USD\u592a\u8fc7\u590d\u6742\uff0c\u6709\u5f88\u591a\u989d\u5916\u7684\u5c5e\u6027\u90fd\u662f\u4e3a\u4e86\u5408\u6210\u573a\u666f\u7684\u76ee\u7684\uff0c\u800c\u5408\u6210\u573a\u666f\u5e76\u4e0d\u662f\u8fd0\u884c\u65f6\u9700\u8981\u7684\uff0c\u6216\u8005\u8bf4\u4e00\u65e6\u5230\u4e86\u8fd0\u884c\u65f6\uff0c\u6709\u4e9b\u5408\u6210\u5c5e\u6027\u5df2\u7ecf\u56fa\u5b9a\u4e86\uff0c\u6211\u4eec\u4fbf\u4e0d\u518d\u9700\u8981\u90a3\u4e48\u590d\u6742\u7684\u5c5e\u6027\uff0c\u4f8b\u5982\u81f3\u5c11\u4e0d\u518d\u9700\u8981\u5355\u4e00\u573a\u666f\uff08\u4e00\u4e2a\u5fae\u578bapp\uff09\u5185\u90e8\u6240\u6709\u5408\u6210\u5c5e\u6027\uff0c\u90a3\u4e48\u8be5\u5fae\u578b\u573a\u666f\u5c31\u5e94\u8be5\u8f6c\u5316\u4e3a\u56fa\u5b9a\u683c\u5f0f\u573a\u666f\uff0c\u800c\u6574\u4e2a\u5408\u6210\u80fd\u529b\u4fdd\u6301\u5728\u5fae\u578b\u573a\u666f\u5c42\u9762\u5c31\u53ef\u4ee5"),(0,n.kt)("li",{parentName:"ul"},"\u4e14\u5bf9\u8fd0\u884c\u65f6\u4e0d\u592a\u53cb\u597d\uff0c\u6709\u5f88\u591a\u5c5e\u6027\uff0c\u8ddf\u4e0a\u9762\u4e00\u6837\uff0c\u6709\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u5408\u6210\u7ec6\u8282\u5728\u8fd0\u884c\u65f6\u6267\u884c\uff0c\u8fd9\u90e8\u5206\u8981\u53bb\u6389")),(0,n.kt)("p",null,"\u9488\u5bf9\u4e0a\u8ff0\u7279\u6027\uff0c\u6709\u5fc5\u8981\u5f00\u53d1\u4e00\u4e2a\u4e2d\u95f4\u683c\u5f0f\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5b83\u5728\u5f00\u53d1\u8005\u4fdd\u5b58\u573a\u666f\u81f3RW\u65f6\u6267\u884c\u9884\u5904\u7406\uff0c\u5176\u8ba1\u7b97\u8fc7\u7a0b\u4e3b\u8981\u662f\u63d0\u524d\u8ba1\u7b97\u4e00\u4e9b\u5408\u6210\u65b9\u9762\u7684\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u7ec8\u8fd0\u884c\u65f6\u76f4\u63a5\u52a0\u8f7d\u8be5\u683c\u5f0f"),(0,n.kt)("li",{parentName:"ul"},"DSL\u9488\u5bf9\u8be5\u683c\u5f0f\u5c31\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6bcf\u4e2a\u5fae\u578b\u573a\u666f\uff0c\u5f00\u53d1\u8005\u672c\u5730\u4f1a\u4fdd\u5b58\u539f\u59cbUSD\u6587\u4ef6\uff0c\u4e0b\u6b21\u4ed6\u4ecd\u7136\u5bf9\u539f\u59cb\u6587\u4ef6\u8fdb\u884c\u7f16\u8f91\uff0c\u7136\u540e\u63d0\u4ea4\u65f6\u8fdb\u884c\u9884\u5904\u7406\uff0c\u518d\u4fdd\u5b58\u4e2d\u95f4\u683c\u5f0f\u81f3\u4e91\u7aef\u5185\u5bb9\u670d\u52a1\u5668")),(0,n.kt)("p",null,"\u517c\u5bb9\u7b2c\u4e09\u65b9\uff0c\u5728\u7b2c\u4e09\u65b9\u505a\u63d2\u4ef6\uff0c\u8f6c\u5316\u4e3aRW\u652f\u6301\u7684\u683c\u5f0f\uff0c\u7136\u540e\u5728RW\u505a\u573a\u666f\u548c\u4ea4\u4e92\u7f16\u8f91"),(0,n.kt)("p",null,"\u7136\u800c\u600e\u4e48\u5b9e\u65f6\u591a\u4eba\u534f\u540c\u4fee\u6539\uff0c\u53e6\u5916\u7528\u6237\u5f00\u53d1\u5fae\u578b\u573a\u666f\u5927\u90e8\u5206\u90fd\u662f\u5728\u7aef\u4fa7\u8fd0\u884c\u65f6\u8fdb\u884c"),(0,n.kt)("p",null,"\u5177\u6709\u5bf9\u7528\u6237\u53ef\u8bfb\u7684\u8868\u8ff0\u5f62\u5f0f\uff0c\u548c\u5bf9\u7a0b\u5e8f\u9ad8\u6548\u52a0\u8f7d\u7684\u4e8c\u8fdb\u5236\u5f62\u5f0f"),(0,n.kt)("h3",{id:"712-alembic-formats"},"7.1.2 Alembic formats"),(0,n.kt)("h3",{id:"713-unity-prefabs"},"7.1.3 Unity Prefabs"),(0,n.kt)("h3",{id:"714-\u4ee3\u7801\u751f\u6210"},"7.1.4 \u4ee3\u7801\u751f\u6210"),(0,n.kt)("p",null,"USD\u4e2d\u7684Schema\u548cLLVM\u4e2d\u7684TableGen\uff0c\u90fd\u662f\u6309\u7167\u4e00\u79cd\u6587\u672c\u683c\u5f0f\uff0c\u5b9a\u4e49\u4e00\u79cd\u683c\u5f0f\uff0c\u7136\u540e\u751f\u6210\u5bf9\u5e94\u7684C++\u4ee3\u7801\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,n.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,n.kt)("h2",{id:"72-\u6570\u636e\u9a71\u52a8\u67b6\u6784"},"7.2 \u6570\u636e\u9a71\u52a8\u67b6\u6784"),(0,n.kt)("h3",{id:"721-unity-dotsecs"},"7.2.1 Unity DOTS/ECS"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DOTS\u6216\u8005ECS\u8fd8\u662f\u4ec5\u5173\u6ce8\u6027\u80fd\u5c42\u9762\uff0c\u4f46\u662f\u6570\u636e\u9a71\u52a8\u7684\u597d\u5904\u662f\u5b83\u8ba9\u5f00\u53d1\u8005\u628a\u903b\u8f91\u533a\u5206\u4e86\u51fa\u6765\uff0c\u6240\u4ee5\u5728\u8fd9\u4e9b\u903b\u8f91\u7684\u7ec4\u7ec7\u5c42\u9762\u518d\u52a0\u4e0a\u4e00\u5c42\u7ba1\u7406\uff0c\u5c31\u53ef\u4ee5\u5411\u4e0a\u5c42\u7528\u6237\u5c42\u8fdb\u4e00\u6b65\u7b80\u5316\u903b\u8f91\u5f00\u53d1"),(0,n.kt)("p",null,"SRP Batcher\u628a\u6750\u8d28\u6570\u636e\u4ece\u539f\u6765\u7684raw data\u91cc\u9762\u62bd\u53d6\u51fa\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba9GameObject rendering\u7684\u6027\u80fd\u968f\u7740scriptable pupeline\u5f97\u5230\u63d0\u5347"),(0,n.kt)("li",{parentName:"ul"},"GPU\u4e2d\u53ef\u4ee5\u7f13\u5b58\u6750\u8d28\u6570\u636e\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u6b21\u90fd\u5207\u6362shader\uff0c\u56e0\u4e3adraw call\u63d0\u4ea4\u7684\u9891\u7387\u8fdc\u9ad8\u4e8e\u6750\u8d28\u6570\u636e\u5207\u6362\u548c\u63d0\u4ea4\u7684\u9891\u7387")),(0,n.kt)("p",null,"System \u5bf9component \u7684\u5f15\u7528\u6bd4\u8f83\u590d\u6742\uff0cUnity\u4e3a\u4e86\u7b80\u5316\u4ee5\u53ca\u4e0d\u6539\u53d8\u539f\u6765\u7684\u4ee3\u7801\uff0c\u8ba9\u5f00\u53d1\u8005\u5b9e\u73b0\u4e00\u4e2a\u539f\u6765\u7684Component \u7c7b\uff0c\u7136\u540e\u81ea\u52a8\u62c6\u5206\uff0c\u8fd9\u6837\u4e5f\u8bb8\u4f1a\u4f7f\u5f97\u7528\u6237\u4e0d\u6613\u4e8e\u5f7b\u5e95\u4f7f\u7528\u6570\u636e\u9a71\u52a8\u7684\u601d\u60f3\uff0c\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4e00\u4e2a\u7279\u6b8a\u7684\u8bed\u6cd5\u7cd6\u5305\u88c5\u5f15\u7528\uff0c\u7136\u540e\u7f16\u8bd1\u5668\u81ea\u52a8\u5c06\u5f15\u7528\u8f6c\u5316\u4e3a\u901a\u8fc7Component \u590d\u5236\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u5f15\u7528"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\u8ba1\u7b97\uff1a")),(0,n.kt)("p",null,"Unity\u7684EntityQuery\u4f3c\u4e4e\u53ef\u4ee5\u6309\u4e0a\u8ff0\u7684\u601d\u8def\u53bb\u4f18\u5316\uff0c\u751a\u81f3\u5e76\u884c\u8ba1\u7b97\u7684\u663e\u793a\u8c03\u7528\u90fd\u662f\u9690\u85cf\u7684\uff0c\u7528\u6237\u4e0d\u5e94\u8be5\u5173\u6ce8\u5e76\u884c\uff0c\u7528\u6237\u5bf9\u5355\u4e2aSystem \u7684\u6267\u884c\u81ea\u52a8\u8f6c\u53d8\u4e3a\u5e76\u884c\uff0c\u5305\u62ec\u5b9e\u9645\u7684\u67e5\u8be2\u548c\u5e76\u884c\u6267\u884c\uff0c\u53ea\u9700\u8981\u6bcf\u4e2asystem\u5fc5\u987b\u5728\u5934\u90e8\u5f15\u7528Components \u5373\u53ef\uff08\u58f0\u660e\u5305\u62ec\u662f\u5426\u53ea\u8bfb\u7684\u4f7f\u7528\u8bf4\u660e\uff09\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u5f15\u7528\u58f0\u660e\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u7c7b\u4f3c"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u5f15\u7528\u5efa\u7acbarchetype "),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u7f16\u8bd1\u5668\u6839\u636e\u8fd9\u4e2a\u6267\u884c\u81ea\u52a8\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u901a\u8fc7\u8bbe\u5b9a\u903b\u8f91\u7c7b\u578b\u548c\u51e0\u4f55\u6216\u8005\u5916\u89c2\u7c7b\u578b\u4e4b\u95f4\u7684\u7ea6\u675f\u548c\u5bf9\u5e94\u5173\u7cfb\u6765\u63a7\u5236\u65b0\u7c7b\u578b\u7684\u521b\u5efa\uff0c\u4f46\u662f\u8fd9\u4e9b\u4ec5\u53d1\u751f\u5728\u7f16\u8bd1\u671f\u95f4")),(0,n.kt)("p",null,"\u592a\u6781\u7684Megakernel programming \u6709\u8fd9\u6837\u7684\u601d\u60f3\uff0c\u5c06\u4f20\u7edfelement-wise\u7684\u7f16\u7a0b\uff0c\u591a\u4e2a\u8ba1\u7b97\u9636\u6bb5\u5408\u5e76\u4e3a\u4e00\u4e2asingle kernel \uff0c\u7f16\u7a0b\u7406\u89e3\u66f4\u81ea\u7136"),(0,n.kt)("p",null,"\u4e00\u5f00\u59cb\u5c31\u8981\u6559\u4f1a\u7528\u6237\uff0c\u600e\u6837\u57fa\u4e8e\u903b\u8f91\u6216\u8005\u529f\u80fd\u7ec4\u5408\u6765\u521b\u5efa\uff0c\u8fd9\u4e9b\u90fd\u662f\u57fa\u672c\u89c4\u5f8b\u548c\u903b\u8f91\uff0c\u8bbe\u8ba1\u7684\u65f6\u5019\u8981\u8003\u8651\u9ad8\u5ea6\u901a\u7528\u6027\u3001\u62bd\u8c61\u6027\u3001\u903b\u8f91\u6027\uff0c\u8fd9\u6837\u7528\u6237\u7406\u89e3\u6210\u672c\u6700\u4f4e\uff0c\u800c\u5728\u8bbe\u8ba1\u7684\u65f6\u5019\u6784\u601d\u7684\u6210\u672c\u4e5f\u6700\u4f4e\uff0c\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u662f\u672c\u8d28\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6784\u5efa\u5b50\u903b\u8f91\u53ca\u5176\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u53ca\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u4e0e\u5916\u89c2\u7684\u7c7b\u578b"),(0,n.kt)("li",{parentName:"ul"},"\u51e0\u4f55\u5916\u89c2\u53ca\u5176\u7c7b\u578b\u4e0e\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u7cfb"),(0,n.kt)("li",{parentName:"ul"},"\u7136\u540e\u6709\u4e00\u5957\u6846\u67b6\u6765\u652f\u6491\u8fd9\u4e2a\u4f53\u7cfb")),(0,n.kt)("p",null,"Unity\u7684DOTS\u505a\u7684\u8fd8\u4e0d\u591f\u5f7b\u5e95\uff0c\u5b83\u8fd8\u662f\u4e3a\u4e86\u517c\u5bb9\u539f\u6765\u7684Component\uff0c\u4f9d\u8d56\u4e8e\u7f16\u8f91\u5668\u5c5e\u6027\u628aComponent\u548cSystem\u5206\u79bb\u51fa\u6765\uff0c\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u3001\u5173\u7cfb\u548c\u533a\u522b\u90fd\u6ca1\u6709\u90a3\u4e48\u660e\u663e\uff0c\u4e0d\u5229\u4e8e\u6df1\u5165\u8d2f\u5f7b\u6570\u636e\u9a71\u52a8\u8fd9\u4e00\u7406\u5ff5"),(0,n.kt)("p",null,"\u5728RW\u4e2d\uff0c\u6240\u6709\u903b\u8f91\u548c\u6570\u636e\u5fc5\u987b\u5206\u5f00\uff0c\u5b83\u4eec\u6ca1\u6709\u529e\u6cd5\u6df7\u5230\u4e00\u8d77\uff0c\u4f46\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u5c06\u7ec4\u4ef6\u53d1\u5e03\uff0c\u53d8\u6210private\u7684\uff0c\u4f46\u8f6f\u4ef6\u67b6\u6784\u4e00\u6837\uff0c\u5e76\u4e14\u9075\u5faa\u540c\u6837\u7684\u5305\u7ba1\u7406\uff0c\u4e2d\u5fc3\u5316\u7684\u7ec4\u4ef6\u7ba1\u7406\u548c\u52a0\u8f7d\uff0c\u7248\u672c\u7ba1\u7406\uff0c\u53ea\u662f\u7ec4\u4ef6\u4e0d\u5bf9\u5916\u516c\u5f00\u800c\u5df2"),(0,n.kt)("p",null,"\u5176\u4e2d\u4e00\u79cd\u8ba9\u591a\u4e2a\u5f00\u53d1\u8005\u9075\u5faa\u516c\u5171\u534f\u5b9a\u7684\u65b9\u6cd5\uff0c\u662f\u7531\u5e73\u53f0\u6765\u5b9a\u4e49\u6570\u636e\uff0c\u5e73\u53f0\u5b9a\u4e49\u7684\u662f\u4e00\u4e9b\u4e1a\u52a1\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u6210\u4e3a\u516c\u5171\u63a5\u53e3\uff0c\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u5c31\u53ef\u4ee5\u76f8\u4e92\u72ec\u7acb\u5de5\u4f5c\uff1b\u5982\u679c\u5e73\u53f0\u7f3a\u4e4f\u67d0\u4e9b\u7c7b\u578b\u516c\u5171\u63a5\u53e3\uff0c\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u81ea\u884c\u5b9a\u4e49\uff0c\u4f46\u662f\u5f00\u53d1\u8005\u9700\u8981\u9009\u62e9\u54ea\u4e9b\u5c5e\u6027\u662f\u516c\u5171\u63a5\u53e3\uff0c\u7136\u540e\u5176\u4ed6\u5f00\u53d1\u8005\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u4e9b\u516c\u5171\u63a5\u53e3\u5f00\u53d1\uff0c\u8fd9\u4e9b\u516c\u5171\u6570\u636e\u63a5\u53e3\u8ddf\u4e0e\u7279\u5b9a\u65b9\u6cd5\u76f8\u5173\u7684\u6570\u636e\u63a5\u53e3\u5206\u5f00"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u7684\u91cd\u8981\u6027\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u53ef\u4ee5\u91cd\u7528\uff0c\u6240\u4ee5\u6709\u673a\u4f1a\u5c06\u4e00\u90e8\u5f00\u53d1\u8005\u5199\u7684\u4ee3\u7801\u5171\u4eab\u7ed9\u5176\u4ed6\u4eba"),(0,n.kt)("li",{parentName:"ul"},"\u5c06\u4ee3\u7801\u4ece\u6570\u636e\u5265\u79bb\u51fa\u6765\uff0c\u624d\u53ef\u4ee5\u505a\u5230\u666e\u901a\u7528\u6237\u80fd\u591f\u6784\u5efa\u4e30\u5bcc\u7684\u529f\u80fd")),(0,n.kt)("p",null,"\u539f\u5219\uff1a"),(0,n.kt)("p",null,"Composition over inheritance "),(0,n.kt)("p",null,"\u867d\u7136ECS\u76f8\u8f83\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u6982\u5ff5\u6ca1\u90a3\u4e48\u76f4\u89c2\uff0c\u4f46\u662fOOP\u53ca\u5176\u7ee7\u627f\u7684\u65b9\u5f0f\u5e26\u6765\u7684\u903b\u8f91\u4e0a\u7684\u590d\u6742\u6027\u548c\u53ef\u7ef4\u62a4\u6027\uff0cECS\u5176\u5b9e\u66f4\u7b80\u5316\u4e86\uff0c\u5b83\u7b80\u5316\u7684\u539f\u56e0\u662f\u4e24\u4e2a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u95ee\u9898\u5206\u800c\u6cbb\u4e4b"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c42\u6b21\u66f4\u6241\u5e73\uff0c\u7ec4\u7ec7\u590d\u6742\u6027\u964d\u4f4e")),(0,n.kt)("p",null,"\u5f00\u6e90ECS\u5b9e\u73b0\uff1aFlecs"),(0,n.kt)("p",null,"ECS\u662f\u5b9e\u73b0in-game editor\u7684\u6838\u5fc3"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u4e5f\u8981\u652f\u6301\u7f51\u7edc\u670d\u52a1\u76f8\u5173\u7684\u529f\u80fd"),(0,n.kt)("p",null,"\u534f\u8bae\u7531\u5b98\u65b9\u6765\u5b9a\u4e49\uff0c\u5f00\u53d1\u8005\u5b9e\u73b0\u529f\u80fd\uff0c\u4f46\u8fd9\u79cd\u673a\u5236\u4f1a\u5f00\u653e\u7ed9\u5f00\u53d1\u8005\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5728\u5185\u90e8\u5b9e\u73b0\u534f\u8bae\u5b9a\u4e49\uff0c\u7136\u540e\u901a\u8fc7\u79c1\u4ed3\u6216\u8005\u4ee3\u7801\u6587\u4ef6\u5206\u4eab\u7ed9\u522b\u4eba\uff0c\u524d\u8005\u6700\u597d\uff0c\u7136\u540e\u4f18\u79c0\u7684\u534f\u8bae\u4e13\u4e3a\u516c\u5171\u7684"),(0,n.kt)("h3",{id:"722-ecs"},"7.2.2 ECS"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5171\u4eab\u7ec4\u4ef6\uff1a\u5305\u542b\u5173\u7cfb\u548c\u5904\u7406\u987a\u5e8f\uff0c\u8fd9\u4e9b\u6982\u5ff5\u4fc3\u8fdb\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u8de8\u7cfb\u7edf\u901a\u4fe1\uff1a\u4e24\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\u95f4\u9700\u8981\u901a\u4fe1")),(0,n.kt)("p",null,"ECS game engine design "),(0,n.kt)("p",null,"\u7528\u6237\u611f\u77e5\u7684\u5e94\u8be5\u53ea\u6709Component \uff0c\u4ed6\u4e0d\u9700\u8981\u77e5\u9053\u6709\u4e2aSystem\uff0cComponent \u7684\u8bbe\u8ba1\u539f\u5219\u5e94\u8be5\u662f\u4e00\u4e2a\u529f\u80fd\u8282\u70b9\uff0cNode\uff0c\u50cfHoudini \u4e2d\u7684\u8282\u70b9\u4e00\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u8282\u70b9\u544a\u8bc9\u7528\u6237\u8be5\u8282\u70b9\u4e3a\u76ee\u6807\u7269\u4f53\u6dfb\u52a0\u4e86\u4ec0\u4e48\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u529f\u80fd\u5e94\u8be5\u7528\u4e00\u4e2a\u8bed\u4e49\u4e0a\u7684\u540d\u5b57\u63cf\u8ff0\uff0c\u4e00\u5b9a\u8981\u8d77\u4e00\u4e2a\u5f88\u597d\u7684\u540d\u5b57\uff0c\u5b98\u65b9\u8981\u4fdd\u7559\u4e00\u4e9b\u5e38\u89c1\u529f\u80fd\u7684\u540d\u5b57\u5217\u8868\uff0c\u6709\u4e00\u4e2a\u603b\u7684\u540d\u5b57\u5217\u8868\uff0c\u4e0d\u80fd\u5f00\u53d1\u8005\u968f\u610f\u8d77\u540d\u5b57\uff0c\u9664\u975e\u662f\u4ed6\u5185\u90e8\u79c1\u6709\u7684\u8282\u70b9"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u5168\u5c40\u7684\u529f\u80fd\u8282\u70b9\u5217\u8868\u53ef\u4ee5\u5728\u6587\u6863\u4e2d\u7ea2\u7528\u6237\u9009\u62e9\u548c\u67e5\u8be2\uff0c\u666e\u901a\u7528\u6237\u771f\u6b63\u4f7f\u7528\u7684\u662f\u516c\u5171\u5217\u8868\u4e2d\u7684\u529f\u80fd\u8282\u70b9\uff0c\u5b98\u65b9\u7ea6\u5b9a\u548c\u7ef4\u62a4\u5176\u4e2d\u540d\u5b57\u548c\u6570\u636e\u7ed3\u6784\u5b9a\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u53ef\u4ee5\u63d0\u4ea4\u65b0\u7684\u8282\u70b9\u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u63d0\u4ea4\u7ecf\u8fc7\u5b98\u65b9\u5ba1\u6838\uff0c\u5ba1\u6838\u6570\u636e\u89c4\u8303\uff0c\u8ddf\u5176\u4ed6\u8282\u70b9\u4e4b\u95f4\u7684\u517c\u5bb9\u6027\uff0c\u4f8b\u5982\u67d0\u4e9b\u7c7b\u578b\u7684\u8282\u70b9\u4e0d\u9002\u5408\u4e8e\u67d0\u4e9b\u7c7b\u578b\u7684\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u7406\u8bba\u4e0a\u4e00\u4e2a\u8282\u70b9\u5b9a\u4e49\u53ea\u80fd\u6709\u4e00\u4e2aSystem \uff0c\u4f46\u662fSystem \u4e4b\u95f4\u7684\u5b9e\u73b0\u5dee\u5f02\u5f88\u5927\uff0c\u5c24\u5176\u6027\u80fd\u5dee\u5f02\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u6027\u80fd\u6d4b\u8bd5\u65b9\u6cd5\u9009\u62e9\u5176\u4e2d\u6700\u4f18\u7684\u7248\u672c\u4e3a\u9ed8\u8ba4\u7248\u672c\uff0c\u6700\u597d\u4e0d\u8981\u8ba9\u7528\u6237\u9009\u62e9\u7248\u672c\uff0c\u54ea\u6015\u662f\u968f\u673a\u9009\u62e9\u4e00\u4e2a\u7248\u672c\u4e5f\u8981\uff0c\u4f8b\u5982\u63d0\u4ea4\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u8981\u6c42\u5f00\u53d1\u8005\u63d0\u4f9b\u6027\u80fd\u6d4b\u8bd5\u7ed3\u679c\uff0c\u6240\u4ee5\u8282\u70b9\u7684\u5b9e\u73b0\u8981\u5b9a\u4e49\u4e00\u5957\u597d\u7684\u4eff\u771f\u6d4b\u8bd5\u5de5\u5177\u548c\u6846\u67b6"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u5b9a\u4e0d\u8981\u901a\u8fc7\u7528\u6237\u53bb\u67e5\u770b\u5176\u4e2d\u7684\u6570\u636e\u624d\u80fd\u7406\u89e3\u8282\u70b9\u7684\u542b\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u9700\u8981\u4fee\u6539\u53c2\u6570\u7684\u65f6\u5019\u624d\u4f1a\u53bb\u6253\u5f00\u8282\u70b9\u7684\u53c2\u6570")),(0,n.kt)("p",null,"\u8fd9\u5176\u5b9e\u548c\u82f9\u679c\u7684USDZ\u7684\u601d\u60f3\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u82f9\u679c\u53ea\u5b9a\u4e49\u4e86\u5c11\u91cf\u8282\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u51e0\u767e\u79cd\u8282\u70b9\u5b9e\u73b0\u5f88\u4e30\u5bcc\u7684\u529f\u80fd"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Houdini \u6709\u51e0\u767e\u79cd"),(0,n.kt)("li",{parentName:"ul"},"Fornite \u4e5f\u6709100\u591a\u79cd")),(0,n.kt)("p",null,"\u901a\u7528\u5f15\u64ce\u4e0d\u4f1a\u8fd9\u4e48\u505a\uff0c\u53ea\u6709in-house\u6216\u8005\u5821\u5792\u4e4b\u591c\u8fd9\u79cd\u6c99\u76d2\u6e38\u620f\u4f1a\u8fd9\u4e48\u505a"),(0,n.kt)("h3",{id:"723-ue5-mass"},"7.2.3 UE5 MASS"),(0,n.kt)("h3",{id:"724-data-oriented-and--driven"},"7.2.4 Data-oriented and -driven"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.dataorienteddesign.com"},"https://www.dataorienteddesign.com")),(0,n.kt)("p",null,"Data Oriented Programming unlearning objects (book)"),(0,n.kt)("h3",{id:"725--rust-ecs"},"7.2.5 Rust ECS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://specs.amethyst.rs/docs/tutorials/"},"https://specs.amethyst.rs/docs/tutorials/")),(0,n.kt)("h2",{id:"73-\u7f16\u8bd1\u5668\u4e0edsl"},"7.3 \u7f16\u8bd1\u5668\u4e0eDSL"),(0,n.kt)("p",null,"RW\u5e95\u5c42\u9700\u8981\u6781\u9ad8\u7684\u6027\u80fd\u6765\u652f\u6491\u4e0a\u5c42\u590d\u6742\u7684\u56fe\u5f62\u548c\u903b\u8f91\u8ba1\u7b97\uff0c\u540c\u65f6\u8fd9\u79cd\u6027\u80fd\u4f18\u5316\u53c8\u8981\u540c\u65f6\u5bf9\u8de8\u5e73\u53f0\u79fb\u690d\u6027\u548c\u5f00\u53d1\u6548\u7387\u5e26\u6765\u597d\u5904\uff0c\u6240\u4ee5\u5b83\u4e0d\u662f\u5355\u7eaf\u7684\u6027\u80fd\u4f18\u5316\uff0c\u662f\u4e00\u5957\u9ad8\u5ea6\u4f18\u826f\u7684\u5e95\u5c42\u6846\u67b6\uff0c\u5177\u4f53\u4e4b\u524d\u4e00\u4e0b\u51e0\u4e2a\u91cd\u8981\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u5f62\u7ba1\u7ebf\u7684\u6df1\u5ea6\u5b9a\u5236"),(0,n.kt)("li",{parentName:"ul"},"\u9488\u5bf9\u6570\u636e\u9a71\u52a8\u7684\u4f18\u5316\uff0c\u6570\u636e\u9a71\u52a8\u9664\u4e86\u8ba9\u666e\u901a\u7528\u6237\u80fd\u591f\u4f7f\u7528\u903b\u8f91\uff0c\u8fd8\u8981\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6765\u7b80\u5316\u5f00\u53d1\u8005\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4f8b\u5982\u53ea\u8981\u6309\u7167\u67d0\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u4e0d\u4ec5\u80fd\u4f7f\u6d41\u7a0b\u66f4\u7b80\u5355\uff0c\u8fd8\u4f1a\u662f\u7684\u5e95\u5c42\u7f16\u8bd1\u65f6\u548c\u8fd0\u884c\u65f6\u80fd\u591f\u9488\u5bf9\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u4f18\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u8bed\u8a00\u7684\u6df1\u5165\u5b9a\u5236\uff0c\u8ddf\u4e0a\u9762\u7684\u6570\u636e\u9a71\u52a8\u76f8\u7ed3\u5408\uff0c\u7528\u6237\u8d77\u6765\u6781\u5176\u7b80\u5355")),(0,n.kt)("h3",{id:"731--taichi"},"7.3.1 Taichi"),(0,n.kt)("p",null,"Born from the MIT CSAIL lab, Taichi was designed to facilitate computer graphics researchers' everyday life, by helping them quickly implement visual computing and physics simulation algorithms that are executable on GPU. The path Taichi took was an innovative one: Taichi is embedded in Python and uses modern just-in-time (JIT) frameworks (for example LLVM, SPIR-V) to offload the Python source code to native GPU or CPU instructions, offering the performance at both development time and runtime."),(0,n.kt)("h4",{id:"7311-\u65b0\u601d\u60f3"},"7.3.1.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"Taichi\u662f\u4e00\u95e8\u9762\u5411\u7269\u7406\u6a21\u62df\u548c\u8ba1\u7b97\u673a\u89c6\u89c9\u8ba1\u7b97\u7684\u9886\u57df\u7279\u5b9a\u8bed\u8a00\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u4f7f\u7528C++\u7b49\u8bed\u8a00\u81ea\u884c\u5b9e\u73b0\u7684\u7b97\u6cd5\uff0ctaichi\u63d0\u4f9b\u4e00\u4e0b\u65b9\u9762\u7684\u6539\u8fdb\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u63d0\u4f9b\u4e86\u5e76\u884c\u8ba1\u7b97\u62bd\u8c61"),"\uff0c\u4f7f\u5f97\u5f00\u53d1\u4eba\u5458\u4e0d\u9700\u8981\u7279\u522b\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u7ba1\u7406\uff0c\u5e76\u4e14\u5177\u6709\u8f83\u597d\u7684\u4e00\u81f4\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5316\u4e86\u4ee3\u7801\u590d\u6742\u5ea6\u6027"),"\uff0c\u4e3b\u8981\u662f\u4e24\u4e2a\u65b9\u9762\uff0c\u4e00\u4e2a\u662f\u56e0\u4e3a\u4e0d\u7528\u5173\u5fc3\u5e76\u884c\u8ba1\u7b97\uff0c\u5f00\u53d1\u8005\u4e13\u6ce8\u4e8e\u5355\u4e2aKernel\uff0c\u7701\u6389\u4e86\u4e00\u5b9a\u7684\u590d\u6742\u5ea6\uff0c\u540c\u65f6\u903b\u8f91\u66f4\u6e05\u6670\uff1b\u53e6\u4e00\u4e2a\u662f\u901a\u8fc7\u5c06\u6570\u636e\u548c\u7b97\u6cd5\u5206\u79bb\uff0c\u4f7f\u5f97\u50cf\u7a00\u758f\u7ed3\u6784\u8fd9\u6837\u7684\u7b97\u6cd5\u88ab\u81ea\u52a8\u4f18\u5316\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u4e3a\u4e86\u6027\u80fd\u7f16\u5199\u5f88\u591a\u590d\u6742\u7684\u4ee3\u7801\uff0c\u4f8b\u5982\u5bf9\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u590d\u6742\u7684\u7ba1\u7406\u548c\u6392\u5e03")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9ad8\u6027\u80fd"),"\uff0c\u901a\u8fc7\u7f16\u8bd1\u5668\u8fdb\u884c\u4e86\u5927\u91cf\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u7684\u4f18\u5316\uff0c\u56e0\u6b64\u6027\u80fd\u63d0\u5347\u6bd4\u8f83\u5927\uff0c\u4f46\u6bd4\u8f83\u5c40\u9650\u4e8e\u4e00\u4e9b\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4f18\u5316\u6b63\u5f0f\u9488\u5bf9\u8fd9\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u7ed3\u6784\u6216\u8005\u5f62\u5f0f\u8fdb\u884c\u4f18\u5316\u7684")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u5373\u65f6\u7f16\u8bd1"),"\uff0cTaichi\u63d0\u4f9b\u5373\u65f6\u7f16\u8bd1\u548c\u9884\u7f16\u8bd1\u4e24\u79cd\u65b9\u6848\uff0c\u5176\u4e2d\u9488\u5bf9\u5373\u65f6\u7f16\u8bd1\uff0c\u7531\u4e8e\u80fd\u591f\u77e5\u9053\u4e00\u4e9b\u8fd0\u884c\u65f6\u7684\u4fe1\u606f\uff0c\u56e0\u6b64Taichi\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u4f18\u5316")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u8de8\u5e73\u53f0\u90e8\u7f72"),"\uff0c\u5c06\u4e0a\u5c42\u7b97\u6cd5\u5168\u90e8\u8f6c\u6362\u4e3a\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u6709\u5229\u4e8e\u8de8\u5e73\u53f0\u90e8\u7f72\uff0c\u8fd9\u4e5f\u51cf\u8f7b\u4e86\u5f00\u53d1\u8005\u9488\u5bf9\u591a\u4e2a\u5e73\u53f0\u8fdb\u884c\u9002\u914d\u7684\u75db\u82e6\u8fc7\u7a0b"))),(0,n.kt)("p",null,"\u5176\u4ed6\u65b9\u9762\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Academia"),"\uff0c\u5b66\u672f\u754c\u7684\u7814\u7a76\u5b9e\u73b0\u4e2d\uff0c\u5f80\u5f80\u56e0\u4e3a\u7f3a\u4e4f\u4f18\u5316\uff0c\u4e34\u65f6\u7684\u5b9e\u73b0\u65b9\u6848\uff0c\u5f80\u5f80\u5bfc\u81f4\u5f88\u96be\u590d\u7528\uff0cTaichi\u5e0c\u671b\u6539\u53d8\u8fd9\u4e2a\u5c40\u9762\uff0c\u4e00\u65b9\u9762\u901a\u8fc7\u4f18\u5316\u7684\u5e95\u5c42\u6280\u672f\u652f\u6301\uff0c\u4e00\u65b9\u9762\u63d0\u4f9b\u7edf\u4e00\u7684\u63a5\u53e3"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Apps & game engine integration"),"\uff0c\u7531\u4e8e\u7edf\u4e00\u7684\u4e2d\u95f4\u8868\u8ff0\uff0c\u4f7f\u5f97Taichi\u5bb9\u6613\u8de8\u5e73\u53f0\uff0cTaichi\u53ef\u4ee5\u7f16\u8bd1\u4e00\u4e9b\u8de8\u5e73\u53f0\u7684\u5e93\u4f9b\u5176\u4ed6\u5e73\u53f0\u8c03\u7528\uff0c\u4f8b\u5982Taichi\u7684AOT\uff08Ahead of time\uff09\u6a21\u5757\u53ef\u4ee5\u6784\u5efa\u5e76\u4fdd\u5b58\u5728computer shaders\uff0c\u8fd9\u6837\u53ef\u4ee5\u88ab\u5176\u4ed6\u8fd0\u884c\u65f6\u8c03\u7528\uff0cAOT\u548cJIT\u662f\u4e24\u79cd\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"General-purpose computing"),"\uff0c\u867d\u7136\u65e9\u671f\u9762\u5411\u7279\u5b9a\u7684\u76ee\u6807\u5982\u7269\u7406\u6a21\u62df\uff0c\u4f46\u662f\u4e5f\u4f1a\u6709\u66f4\u591a\u7684\u901a\u7528\u8ba1\u7b97\u652f\u6301\uff0c\u4f8b\u5982TaichiSLAM"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Maybe a new frontend"),"\uff0c\u53ef\u4ee5\u5c06Python\u6539\u4e3a\u5176\u4ed6\u524d\u7aef")),(0,n.kt)("h4",{id:"7312-\u6280\u672f\u65b9\u6848"},"7.3.1.2 \u6280\u672f\u65b9\u6848"),(0,n.kt)("p",null,"\u4ee5\u4e0b\u4e3aTaichi\u8bed\u8a00\u7684\u6838\u5fc3\u6280\u672f\u67b6\u6784\uff1a"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"taichi-kernel",src:l(4081).Z,width:"3110",height:"1586"})),(0,n.kt)("p",null,"Taichi\u7684\u6838\u5fc3\u662f\u4e00\u4e2a\u7f16\u8bd1\u5668\uff08compiler\uff09\uff0c\u5728\u8fd9\u4e2a\u7f16\u8bd1\u5668\u4e2d\uff0c\u5b83\u9488\u5bf9\u7279\u5b9a\u7684\u4e00\u4e9b\u8ba1\u7b97\u4efb\u52a1\uff0c\u5982\u7269\u7406\u6a21\u62df\uff0c\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u7684\u7c7b\u578b\u7b49\u8fdb\u884c\u4f18\u5316\uff0c\u901a\u8fc7\u4fee\u6539\u548c\u8c03\u6574\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u7684\u5185\u5bb9\u5e03\u5c40\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u8ba1\u7b97\u7684\u7f13\u5b58\u5c40\u90e8\u6027\u66f4\u597d\uff0c\u540c\u65f6\u4e5f\u901a\u8fc7\u5411\u91cf\u5316\u7684\u6570\u636e\u7c7b\u578b\u7cfb\u7edf\uff0c\u4f7f\u5f97\u5e94\u7528\u7684\u5185\u5b58\u5360\u7528\u66f4\u5c0f\uff0c\u4ece\u800c\u4e5f\u51cf\u5c11\u5185\u5b58\u5bf9\u5e26\u5bbd\u7684\u5360\u7528\uff0c\u4e0d\u4ec5\u63d0\u9ad8\u4e86\u8ba1\u7b97\u6548\u7387\uff0c\u4e5f\u51cf\u5c11\u4e86\u5185\u5b58\u5360\u7528\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u76ee\u7684\uff0cTaichi\u5728\u524d\u7aef\u8bed\u8a00\u4e2d\uff08\u76ee\u524d\u662fPython\uff09\uff0c\u901a\u8fc7\u5143\u7f16\u7a0b\u5b9a\u4e49\u4e86\u7279\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'import taichi as ti\n\nti.init(arch=ti.gpu)\n\nn = 320\npixels = ti.field(dtype=float, shape=(n * 2, n))\n\n@ti.func\ndef complex_sqr(z):\n return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])\n\n@ti.kernel\ndef paint(t: float):\n for i, j in pixels: # Parallelized over all pixels\n c = ti.Vector([-0.8, ti.cos(t) * 0.2])\n z = ti.Vector([i / n - 1, j / n - 0.5]) * 2\n iterations = 0\n while z.norm() < 20 and iterations < 50:\n z = complex_sqr(z) + c\n iterations += 1\n pixels[i, j] = 1 - iterations * 0.02\n\ngui = ti.GUI("Julia Set", res=(n * 2, n))\n\ni = 0\nwhile gui.running:\n paint(i * 0.03)\n gui.set_image(pixels)\n gui.show()\n i = i + 1\n')),(0,n.kt)("p",null,"\u8fd9\u4e9b\u81ea\u5b9a\u4e49\u7c7b\u578b\u6784\u6210Taichi\u8bed\u8a00\uff0c\u5b83\u4eec\u501f\u52a9Python\u7684AST\u63a7\u5236\u80fd\u529b\uff0c\u751f\u6210\u5e26\u6765Taichi\u7c7b\u578b\u4fe1\u606f\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u7136\u540e\u5e95\u5c42\u7684\u7f16\u8bd1\u5668\u5c31\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u7c7b\u578b\u4fe1\u606f\u8fdb\u884c\u7279\u5b9a\u7684\u4ee3\u7801\u4f18\u5316\u548c\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u5176\u4e2d\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u7f16\u8bd1\u4f18\u5316\u8fc7\u7a0b\uff0cTaichi\u66f4\u662f\u9488\u5bf9\u4f8b\u5982\u7a00\u758f\u7ed3\u6784\u7b49\u7279\u5b9a\u7684\u8ba1\u7b97\u8fdb\u884c\u4e86\u5927\u91cf\u7684\u4ee3\u7801\u8c03\u6574\uff0c\u751f\u6210\u76f8\u5bf9\u4e8e\u524d\u7aef\u6570\u500d\u7684\u4ee3\u7801\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u4e0d\u4f46\u51cf\u5c11\u4e86\u4e0a\u5c42\u8bed\u8a00\u7684\u4ee3\u7801\u91cf\uff0c\u8fd8\u5bf9\u5176\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u505a\u4e86\u5927\u91cf\u7684\u8c03\u6574\uff0c\u4ee5\u63d0\u5347\u8ba1\u7b97\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u5b9e\u73b0\u4e0a\u8ff0\u80fd\u529b\u7684\u5176\u4e2d\u6700\u91cd\u8981\u7684\u601d\u8def\u662f\u6570\u636e\u9a71\u52a8\uff0c\u5b83\u5c06\u4e00\u4e9b\u7279\u5b9a\u7b97\u6cd5\u7684\u6570\u636e\u8868\u8ff0\u4ece\u7b97\u6cd5\u6307\u4ee4\u5f53\u4e2d\u5206\u79bb\u51fa\u6765\uff0c\u4ece\u800c\u4f7f\u5f97\u7f16\u8bd1\u5668\u80fd\u591f\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u4fee\u6539\uff0c\u5df2\u751f\u6210\u66f4\u52a0\u4f18\u5316\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u6392\u5e03\u3002\u5f53\u7136\uff0c\u8fd9\u6837\u7684\u4e0a\u4e0b\u6587\u77e5\u8bc6\u5fc5\u987b\u9488\u5bf9\u7279\u5b9a\u7684\u7b97\u6cd5\uff0c\u5e76\u4e0d\u662f\u5bf9\u6240\u6709\u7b97\u6cd5\u90fd\u80fd\u5b9e\u73b0\u4f18\u5316\u3002"),(0,n.kt)("h4",{id:"7313-\u4e0d\u8db3\u53ca\u539f\u56e0"},"7.3.1.3 \u4e0d\u8db3\u53ca\u539f\u56e0"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eReality World\u7684\u4ea7\u54c1\u65b9\u5411\uff0cTaichi\u5b58\u5728\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u9762\u5411\u7b97\u6cd5\u800c\u4e0d\u662f\u903b\u8f91"),"\uff0c\u5c3d\u7ba1Taichi\u53ef\u4ee5\u51cf\u5c11\u4ee3\u7801\u91cf\uff0c\u4f46\u662f\u5b83\u7684\u6838\u5fc3\u662f\u9762\u5411\u7279\u5b9a\u7b97\u6cd5\u7ed3\u6784\u7684\u4f18\u5316\uff0c\u5b83\u4e0d\u6d89\u53ca\u903b\u8f91\u5c42\u9762\u7684\u8003\u8651\uff0c\u4f8b\u5982\u600e\u4e48\u5e2e\u52a9\u5f00\u53d1\u8005\u5b9e\u73b0\u4ea4\u4e92\u903b\u8f91\uff1b")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u652f\u6301\u52a8\u6001\u521b\u5efa")))),(0,n.kt)("p",null,"Taichi\u6700\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u5e95\u5c42\u4f18\u5316\u7279\u522b\u91cd\uff0c\u8fd9\u4e5f\u662f\u5b9e\u73b0\u6027\u80fd\u63d0\u5347\u7684\u5173\u952e\uff0c\u800c\u8fd9\u4e00\u5c42\u4f18\u5316\u5b9e\u73b0\u4e8eC++\u4e2d\uff0c\u56e0\u6b64Taichi\u7684\u8fd0\u884c\u65f6\u7a0b\u5e8f\u53ea\u80fd\u662f\u4e24\u79cd\u60c5\u51b5\u4e4b\u4e00\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u662f\u8fd0\u884c\u65f6\u5e26\u4e0aTaichi\u7684\u7f16\u8bd1\u5668\uff0c\u8fd9\u79cd\u60c5\u51b5\u53ef\u4ee5\u652f\u6301\u4efb\u610f\u7684\u7b97\u6cd5\u4fee\u6539\uff0c\u8fd9\u4e5f\u662fPC\u4e0a\u7684\u4e00\u822c\u6a21\u5f0f"),(0,n.kt)("li",{parentName:"ol"},"\u5982\u679c\u8fd0\u884c\u65f6\u6ca1\u6709Taichi\u7684\u7f16\u8bd1\u73af\u5883\uff0c\u9700\u8981\u63d0\u524d\u5c06Taichi\u7a0b\u5e8f\u7f16\u8bd1\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7a0b\u5e8f\u4e00\u65e6\u90e8\u7f72\u5c31\u4e0d\u80fd\u4fee\u6539")),(0,n.kt)("p",null,"\u7b2c\u4e00\u79cd\u6a21\u5f0f\u662f\u6bd4\u8f83\u6162\u7684\uff0c\u56e0\u4e3a\u8fd0\u884c\u65f6\u9700\u8981\u5373\u65f6\u7f16\u8bd1\uff0c\u5e76\u4e14Taichi\u7684\u7f16\u8bd1\u8fc7\u7a0b\u76f8\u5bf9\u4e8e\u4e00\u822c\u7684\u7a0b\u5e8f\u7f16\u8bd1\u8981\u66f4\u52a0\u590d\u6742\uff0c\u56e0\u6b64\u8fd9\u79cd\u6a21\u5f0f\u4e0d\u9002\u5408\u5b9e\u65f6\u7684\u6e38\u620f\u5f15\u64ce\u7cfb\u7edf\uff1b\u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u6a21\u5f0f\uff0c\u7531\u4e8e\u7b97\u6cd5\u88ab\u7f16\u8bd1\u4e3a\u56fa\u5b9a\u7684\u5e95\u5c42\u673a\u5668\u8bed\u8a00\uff0c\u56e0\u6b64\u7a0b\u5e8f\u4e0d\u80fd\u518d\u88ab\u52a8\u6001\u4fee\u6539\uff0c\u9664\u975eTaichi\u5c06\u6240\u6709\u7684\u89e3\u91ca\u8fc7\u7a0b\u4e0a\u79fb\u81f3\u811a\u672c\u8bed\u8a00\uff08Python\uff09\u8fd9\u4e00\u5c42\uff0c\u4f46\u5c3d\u7ba1\u5982\u6b64\uff0c\u867d\u7136\u80fd\u591f\u652f\u6301\u52a8\u6001\u7a0b\u5e8f\uff0c\u4f46\u662f\u4e0a\u5c42\u7684\u89e3\u91ca\u8fc7\u7a0b\u4ecd\u7136\u975e\u5e38\u590d\u6742\u3002"),(0,n.kt)("p",null,"Reality World\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898\u7684\u65b9\u6cd5\u662f\u53ea\u63d0\u4f9b\u811a\u672c\u8bed\u8a00\u5c42\u9762\u7684\u4f18\u5316\u6216\u8005\u89e3\u91ca\uff0c\u800c\u4e3a\u4e86\u4fdd\u6301\u6027\u80fd\uff0cRW\u4e0d\u4f1a\u8fdb\u884c\u4efb\u4f55\u5e95\u5c42\u7684\u7279\u5b9a\u4f18\u5316\uff0c\u540c\u65f6\u56e0\u4e3aRW\u8981\u4fdd\u6301\u8ba1\u7b97\u7684\u901a\u7528\u6027\uff0c\u4ee5\u53ca\u5b83\u7684\u76ee\u6807\u662f\u9762\u5411\u903b\u8f91\u7ed3\u6784\uff0c\u6240\u4ee5\u6ca1\u6709\u5fc5\u8981\u53bb\u505a\u8fd9\u4e00\u5c42\uff0c\u53ea\u9700\u8981\u901a\u8fc7\u811a\u672c\u8bed\u8a00\u5c42\u7684DSL\u4f7f\u5f97\u5f00\u53d1\u8fc7\u7a0b\u8db3\u591f\u7b80\u5355\u5c31\u884c\uff0cRW\u7684\u67b6\u6784\u66f4\u50cfUnity DOTS\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e9bReality Create\u7684\u5185\u7f6e\u56fa\u5b9a\u7b97\u6cd5\u9002\u5408\u7528Taichi\u7f16\u8bd1\u5417\uff1f")),(0,n.kt)("p",null,"Taichi\u7684\u53e6\u5916\u4e00\u4e2a\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u7684\u7f16\u8bd1\u662f\u8ddf\u7b97\u6cd5\u6570\u636e\u7ed3\u6784\u76f8\u5173\u7684\uff0c\u4f8b\u5982\u5206\u914d\u7684\u5217\u8868\u662f5\u4e2a\u8fd8\u662f10\u4e2a\u5143\u7d20\uff0c\u8fd9\u4e9b\u90fd\u4f1a\u8ddf\u7f16\u8bd1\u5668\u8026\u5408\uff0c\u5b83\u662f\u4e00\u4e2a\u4e0e\u6570\u636e\u6709\u5173\u7684\u4f18\u5316\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u53ea\u4e0e\u62bd\u8c61\u7ed3\u6784\u6709\u5173\u7684\u4f18\u5316\uff0c\u6216\u8005\u8fd9\u4e9b\u6570\u503c\u5373\u4f7f\u4e0d\u662f\u6765\u6e90\u4e8e\u8fd0\u884c\u65f6\uff0c\u4e5f\u662f\u4e0e\u7c7b\u578b\u7684\u5b9a\u4e49\u6709\u5173\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u5b83\u53ea\u9002\u5408\u4e0e\u56fa\u5b9a\u7684\u7b97\u6cd5\u5b9e\u73b0\u3002"),(0,n.kt)("h4",{id:"7314-\u5bf9\u6bd4"},"7.3.1.4 \u5bf9\u6bd4"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null}),(0,n.kt)("th",{parentName:"tr",align:null},"Taichi"),(0,n.kt)("th",{parentName:"tr",align:null},"Creation Script"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u76ee\u6807"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u5e95\u5c42\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9762\u5411\u4e0a\u5c42\u8bed\u4e49\u3001\u529f\u80fd\u3001\u903b\u8f91")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u7f16\u8bd1\u7c7b\u578b"),(0,n.kt)("td",{parentName:"tr",align:null},"C++\u4fa7"),(0,n.kt)("td",{parentName:"tr",align:null},"\u811a\u672c\u4fa7")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"\u4f18\u5316\u7b97\u6cd5"),(0,n.kt)("td",{parentName:"tr",align:null},"\u9488\u5bf9\u7279\u5b9a\u7b97\u6cd5\u6df1\u5ea6\u4f18\u5316\uff0c\u4f8b\u5982\u9488\u5bf9\u7a00\u758f\u7ed3\u6784\uff0c\u4ee5\u53ca\u5411\u91cf\u5316\u8fdb\u884c\u6df1\u5ea6\u7684\u4f18\u5316"),(0,n.kt)("td",{parentName:"tr",align:null},"\u4ec5\u9488\u5bf9\u5f00\u53d1\u590d\u6742\u7684\u8fdb\u884c\u4e00\u5b9a\u7684\u4f18\u5316\uff0c\u4f8b\u5982\u7b80\u5316\u5e76\u884c\u8ba1\u7b97\uff0c\u5f15\u5165\u4e00\u4e9b\u5feb\u6377\u53d8\u91cf\uff0c\u4e00\u4e9b\u8fb9\u754c\u9650\u5236\u7b49")))),(0,n.kt)("h3",{id:"732-modular-ai"},"7.3.2 Modular AI"),(0,n.kt)("h4",{id:"7321-\u65b0\u601d\u60f3"},"7.3.2.1 \u65b0\u601d\u60f3"),(0,n.kt)("p",null,"\u6211\u4eec\u9700\u8981\u4e0b\u4e00\u4ee3\u7f16\u8bd1\u5668\u548c\u7f16\u7a0b\u8bed\u8a00\u6765\u5e2e\u52a9\u89e3\u51b3\u8fd9\u79cd\u788e\u7247\u5316"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\uff0c\u8ba1\u7b97\u673a\u884c\u4e1a\u9700\u8981\u66f4\u597d\u7684\u786c\u4ef6\u62bd\u8c61\uff0c\u786c\u4ef6\u62bd\u8c61\u662f\u5141\u8bb8\u8f6f\u4ef6\u521b\u65b0\u7684\u65b9\u5f0f\uff0c\u4e0d\u9700\u8981\u8ba9\u6bcf\u79cd\u4e0d\u540c\u8bbe\u5907\u53d8\u5f97\u8fc7\u4e8e\u4e13\u7528\u5316\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\uff0c\u6211\u4eec\u9700\u8981\u652f\u6301\u5f02\u6784\u8ba1\u7b97\uff0c\u56e0\u4e3a\u8981\u5728\u4e00\u4e2a\u6df7\u5408\u8ba1\u7b97\u77e9\u9635\u91cc\u505a\u77e9\u9635\u4e58\u6cd5\u3001\u89e3\u7801JPEG\u3001\u975e\u7ed3\u6784\u5316\u8ba1\u7b97\u7b49\u7b49\u3002\u7136\u540e\uff0c\u8fd8\u9700\u8981\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u8bed\u8a00\uff0c\u4ee5\u53ca\u666e\u901a\u4eba\u4e5f\u53ef\u4ee5\u7528\u7684\u7f16\u7a0b\u6a21\u578b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u6700\u540e\uff0c\u6211\u4eec\u4e5f\u9700\u8981\u5177\u5907\u9ad8\u8d28\u91cf\u3001\u9ad8\u53ef\u9760\u6027\u548c\u9ad8\u5ef6\u5c55\u6027\u7684\u67b6\u6784\u3002")),(0,n.kt)("p",null,"\u5728GCC\u4e4b\u524d\uff0c\u6bcf\u5bb6\u516c\u53f8\u90fd\u8981\u5f00\u53d1\u81ea\u5df1\u7684\uff1a\u524d\u7aef->\u4f18\u5316\u5668->\u540e\u7aef\uff0c\u6bcf\u5bb6\u516c\u53f8\u901a\u5e38\u53ea\u5f00\u53d1\u4e00\u79cd\u524d\u7aef\u548c\u4e00\u79cd\u540e\u7aef\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff1bGCC\u5c06\u4e09\u8005\u5206\u79bb\uff0c\u51cf\u5c11\u4e86\u788e\u7247\u5316\uff1b"),(0,n.kt)("p",null,"LVVM\u662f\u4e00\u7cfb\u5217\u5e93\u7684\u7ec4\u5408\uff0c\u5b83\u7684\u6a21\u5757\u6027\u51f8\u663e\u4e86\u63a5\u53e3\u548c\u7ec4\u4ef6\u7684\u91cd\u8981\u6027\uff0cKey insight\uff1aCompilers as libraries\uff0cnot an app"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Enable embedding in other applications"),(0,n.kt)("li",{parentName:"ul"},"Mix and match components"),(0,n.kt)("li",{parentName:"ul"},"No hard coded lowering pipeline ")),(0,n.kt)("p",null,"\u6b64\u5916\uff0cLLVM\u8fd8\u8ba9JIT\u7f16\u8bd1\uff08\u5373\u65f6\u7f16\u8bd1\uff09\u80fd\u6709\u66f4\u591a\u4f5c\u4e3a\u3002\u867d\u7136JIT\u7f16\u8bd1\u5668\u5df2\u7ecf\u662f\u4e00\u79cd\u8457\u540d\u7684\u6280\u672f\uff0c\u4f46\u5b83\u4e00\u5f00\u59cb\u662f\u7528\u5728\u5176\u4ed6\u5730\u65b9\u3002\u6709\u4e86LLVM\u4ee5\u540e\uff0c\u82af\u7247\u8bbe\u8ba1\u3001HLS\u5de5\u5177\u3001\u56fe\u5f62\u5904\u7406\u3001\u90fd\u66f4\u52a0\u4fbf\u6377\uff0c\u8fd8\u4fc3\u8fdb\u4e86CUDA\u548cGPGPU\u7684\u8bde\u751f\uff0c\u8fd9\u4e9b\u90fd\u662f\u5f88\u4e86\u4e0d\u8d77\u7684\u6210\u5c31\u3002\u4f46\u66f4\u91cd\u8981\u7684\u7684\u662f\uff0cLLVM\u6574\u5408\u4e86\u7684\u788e\u7247\u5316\u3002LLVM\u51fa\u73b0\u4e4b\u524d\u6709\u5f88\u591a\u79cdJIT\u7f16\u8bd1\u5668\u6846\u67b6\uff0c\u4f46LLVM\u7684\u5b58\u5728\uff0c\u63d0\u5347\u4e86JIT\u7f16\u8bd1\u5668\u7684\u57fa\u7ebf\uff0c\u8ba9\u5b83\u8ff8\u53d1\u51fa\u66f4\u591a\u53ef\u80fd\uff0c\u4e5f\u8ba9\u884c\u4e1a\u53ef\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u5c42\u6b21\u7684\u521b\u65b0\u3002"),(0,n.kt)("p",null,"LLVM\u7684\u4e3b\u8981\u7f3a\u70b9\u662f\u4e0d\u592a\u9002\u5408\u505a\u5e76\u884c\u5904\u7406\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u52a0\u901f\u5668\u662f\u4ec0\u4e48\uff1f\u53ef\u4ee5\u628a\u5b83\u9ad8\u5ea6\u7b80\u5316\u6210\u4e24\u4e2a\u90e8\u5206:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u4e2a\u662f\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u3002\u56e0\u4e3a\u7845\u672c\u8eab\u7684\u7ed3\u6784\u4e5f\u662f\u5e76\u884c\u7684\uff0c\u52a0\u901f\u5668\u8981\u7528\u5230\u8bb8\u591a\u6676\u4f53\u7ba1\uff0c\u4e5f\u5c31\u9700\u8981\u5f88\u591a\u7845\u6765\u8fbe\u6210\u8fd9\u79cd\u5e76\u884c\u5904\u7406\u80fd\u529b\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u4e2a\u90e8\u5206\u8d77\u63a7\u5236\u4f5c\u7528\u3002\u5b83\u7684\u540d\u5b57\u4e0d\u592a\u7edf\u4e00\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u63a7\u5236\u5904\u7406\u5668\uff08Control Processor\uff09\u201d\uff0c\u6709\u4eba\u53eb\u5b83\u201c\u5e8f\u5217\u5668\uff08Sequencer\uff09\u201d\u3002\u6709\u4eba\u5e0c\u671b\u5b83\u5c0f\u4e00\u70b9\uff0c\u6240\u4ee5\u4f1a\u505a\u72b6\u6001\u673a\u7136\u540e\u5d4c\u5165\u5bc4\u5b58\u5668\u3002\u8fd9\u4e2a\u90e8\u5206\u57fa\u672c\u4e0a\u8d77\u5230\u7f16\u6392\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u7684\u4f5c\u7528\u3002\u5982\u679c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u662f\u4e00\u4e2a\u5927\u578b\u77e9\u9635\u4e58\u6cd5\u5355\u5143\uff0c\u63a7\u5236\u5904\u7406\u5668\u5c31\u4f1a\u547d\u4ee4\u5b83\u6267\u884c\u4e00\u4e9b\u5b8f\u64cd\u4f5c\uff0c\u4f8b\u5982\u4ece\u8fd9\u4e2a\u5185\u5b58\u533a\u52a0\u8f7d\u3001\u6267\u884c\u67d0\u4e00\u64cd\u4f5c\u3001\u6267\u884c\u53e6\u4e00\u64cd\u4f5c\u3001\u66f4\u65b0SRAM\u7b49\u3002")),(0,n.kt)("p",null,"\u8fd8\u6709\u4e00\u4e9b\u52a0\u901f\u5668\u5f88\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u63a7\u5236\u903b\u8f91\u548c\u8ba1\u7b97\u4e4b\u95f4\u7684\u6bd4\u7387\u4e5f\u5404\u6709\u4e0d\u540c\u3002\u6b63\u5982Patterson\u548cHennessy\u6240\u8bf4\u90a3\u6837\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u70b9\uff0c\u4f46\u6bcf\u4e2a\u70b9\u90fd\u9700\u8981\u4e00\u5b9a\u7a0b\u5ea6\u7684\u7f16\u6392\u3002\u4f46\u4eba\u4eec\u5e38\u5e38\u5fd8\u8bb0\u5176\u4ed6\u4e00\u4e9b\u76f8\u5173\u7684\u5de5\u4f5c\uff0c\u6bd4\u5982\uff0c\u4f60\u4e0d\u6b62\u9700\u8981\u7f16\u6392\uff0c\u8fd8\u8981\u89e3\u51b3\u542f\u52a8\u95ee\u9898\uff0c\u6bd4\u5982\u7535\u6e90\u7ba1\u7406\uff0c\u8fd8\u8981\u4e0d\u65ad\u8c03\u8bd5\u6392\u9519\u3002\u5982\u679c\u4f60\u60f3\u505a\u5f97\u5c3d\u5584\u5c3d\u7f8e\uff0c\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u90e8\u4ef6\u8fdb\u884c\u7f16\u7a0b\uff1b\u5982\u679c\u4f60\u5e0c\u671b\u7b80\u5355\u4e00\u70b9\uff0c\u53ef\u4ee5\u628a\u8fd9\u4e9b\u90e8\u4ef6\u505a\u5f97\u5f88\u5c0f\u3002"),(0,n.kt)("p",null,"\u5f53\u63a7\u5236\u5904\u7406\u5668\u548c\u5e76\u884c\u8ba1\u7b97\u5355\u5143\u90fd\u9f50\u5907\u4e4b\u540e\uff0c\u600e\u4e48\u7ed9\u5b83\u4eec\u8f93\u5165\u548c\u8f93\u51fa\u4fe1\u606f\uff1f\u8fd9\u65f6\u5c31\u9700\u8981\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u3002\u6839\u636e\u62bd\u8c61\u7b49\u7ea7\u7684\u4e0d\u540c\uff0c\u8fd9\u4e2a\u5185\u5b58\u63a5\u53e3\u53ef\u4ee5\u662f\u5c0f\u578b\u7684block\uff0c\u4e5f\u53ef\u4ee5\u662f\u652f\u6301\u7269\u8054\u7f51\u7684\u82af\u7247\uff0c\u8fd9\u6837\u52a0\u901f\u5668\u5c31\u53ef\u4ee5\u548c\u8be5\u82af\u7247\u8fde\u63a5\u6574\u4e2a\u7f51\u7edc\u901a\u4fe1\u4e86\u3002\u8fd9\u91cc\u9700\u8981\u7528\u5230\u50cfAMBA\u6216\u7c7b\u4f3c\u7684\u6280\u672f\u3002"),(0,n.kt)("p",null,"\u4f60\u53ef\u4ee5\u5728\u66f4\u5927\u7684\u7c92\u5ea6\uff08granularity\uff09\u4e0a\u6784\u5efa\u6574\u4e2a ASIC\uff0c\u6240\u6709\u7684 ASIC \u90fd\u5728\u52a0\u901f\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4f60\u53ef\u80fd\u6b63\u5728\u4e0e PCI \u901a\u4fe1\uff0c\u5e76\u4e14\u6b63\u5728\u82af\u7247\u5916\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u4f46\u8fd9\u79cd\u201c\u6211\u6709\u4e00\u4e2a\u63a7\u5236\u5904\u7406\u5668\uff0c\u6709\u4e00\u4e2a\u8ba1\u7b97\u5355\u5143\u548c\u6709\u4e00\u4e2a\u5185\u5b58\u63a5\u53e3\u201d\u7684\u6a21\u578b\uff0c\u662f\u6784\u5efa\u8fd9\u4e9b\u4e1c\u897f\u7684\u4e00\u79cd\u975e\u5e38\u6807\u51c6\u7684\u65b9\u6cd5\u3002"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u6211\u7684\u4e3b\u5f20\u662f\u521b\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u53d1\u5c55\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u901a\u8fc7\u4e0d\u65ad\u521b\u65b0\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u6211\u4eec\u5e94\u8be5\u5bf9\u6b64\u8fc7\u7a0b\u6240\u9700\u7684\u4e00\u5207\u5b9e\u884c\u6807\u51c6\u5316\uff0c\u901a\u8fc7\u6807\u51c6\u5316\u80fd\u591f\u5feb\u901f\u5b8c\u6210\u5de5\u4f5c\uff0c\u7136\u540e\u5c31\u53ef\u4ee5\u628a\u65f6\u95f4\u82b1\u5728\u771f\u6b63\u91cd\u8981\u7684\u4e8b\u60c5\u4e0a\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6709\u4e00\u79cd\u76f8\u5bf9\u8f83\u65b0\u7684\u7f16\u8bd1\u5668\u6280\u672fMLIR\u53ef\u4ee5\u5e2e\u4e0a\u5fd9\u3002\u4f60\u53ef\u4ee5\u628aMLIR\u770b\u4f5c\u662f\u4e00\u4e2a\u5143\u7f16\u8bd1\u5668\uff0c\u5b83\u5141\u8bb8\u4f60\u975e\u5e38\u5feb\u901f\u5730\u6784\u5efa\u52a0\u901f\u5668/\u7f16\u8bd1\u5668\u3002MLIR\u7684\u5168\u79f0\u662f\u201c\u591a\u7ea7\u4e2d\u95f4\u8868\u793a\u201d\uff0c\u5b83\u652f\u6301\u6784\u5efa\u5206\u5c42\u7f16\u8bd1\u5668\uff0c\u5e76\u4ee5\u9002\u7528\u4e13\u95e8\u9886\u57df\u7684\u65b9\u5f0f\u6784\u5efa\uff0c\u540c\u65f6\u4fdd\u7559\u9886\u57df\u7684\u590d\u6742\u6027\u3002\u7136\u540e\uff0c\u4f7f\u7528MLIR\u63d0\u4f9b\u7684\u5927\u91cf\u5e93\u548c\u4f8b\u7a0b\u6765\u505a\u4e00\u4e9b\u4e8b\u60c5\uff0c\u6bd4\u5982\uff0c\u7528\u591a\u9762\u4f53\u7f16\u8bd1\u5668\u6765\u505a\u5faa\u73af\u5c55\u5f00\u548c\u5faa\u73af\u878d\u5408\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u73b0\u5728\uff0c\u6211\u4eec\u5f00\u59cb\u770b\u5230\u7684\u662f\uff0cMLIR\u5f00\u59cb\u7edf\u4e00\u5f02\u6784\u8ba1\u7b97\u7684\u4e16\u754c\uff0c\u8fd9\u4e5f\u662f\u6211\u5e0c\u671b\u770b\u5230\u7684\u3002\u6240\u6709\u7684\u5927\u516c\u53f8\u73b0\u5728\u90fd\u5728\u4e0d\u540c\u7a0b\u5ea6\u5730\u4f7f\u7528MLIR\uff0c\u6211\u8ba4\u4e3a\uff0c\u5efa\u7acb\u5728RISC-V\u4e4b\u4e0a\u7684MLIR\u5f88\u6709\u5fc5\u8981\uff0c\u56e0\u4e3a\u4e00\u65e6\u5f00\u59cb\u4ece\u4e0b\u5f80\u4e0a\u6574\u5408\u884c\u4e1a\uff0c\u5c31\u53ef\u4ee5\u5f00\u59cb\u628a\u8d8a\u6765\u8d8a\u591a\u7684\u5c42\uff08layer\uff09\u62c9\u5230\u4e00\u8d77\uff0c\u91cd\u590d\u4f7f\u7528\u66f4\u591a\u7684\u6280\u672f\u3002\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u4e13\u6ce8\u5728\u5806\u6808\u4e2d\u66f4\u6709\u8da3\u7684\u90e8\u5206\uff0c\u800c\u4e0d\u662f\u4e00\u904d\u53c8\u4e00\u904d\u5730\u91cd\u65b0\u53d1\u660e\u8f6e\u5b50\u3002"),(0,n.kt)("p",null,"\u4e5f\u8bb8\u4f60\u4e0d\u4f1a\u611f\u5230\u60ca\u8bb6\uff0c\u4f46\u6211\u8ba4\u4e3a\u7b54\u6848\u662f\u7f16\u8bd1\u5668\uff0c\u8fd9\u662f\u771f\u6b63\u8981\u8d70\u7684\u4e00\u6761\u8def\u3002"),(0,n.kt)("p",null,"\u4f5c\u4e3a\u7f16\u8bd1\u5668\u7f16\u7a0b\u8bed\u8a00\u4ece\u4e1a\u8005\uff0c\u6211\u8ba4\u4e3a\u786c\u4ef6\u8bbe\u8ba1\u8fd9\u4e2a\u9886\u57df\u5df2\u7ecf\u5230\u4e86\u91cd\u65b0\u8bc4\u4f30\u7684\u5730\u6b65\u3002\u6574\u4e2a\u9886\u57df\u662f\u5efa\u7acb\u5728\u4e24\u79cd\u6280\u672f\u4e4b\u4e0a\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e3b\u8981\u662f\u4e00\u79cd\u53eb\u505aVerilog\u7684\u6280\u672f\uff0c\u4f60\u5927\u6982\u7387\u53ef\u80fd\u4e0d\u559c\u6b22Verilog\u3002\u5b83\u6709\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u6807\u51c6\uff0c\u5f53\u6211\u770b\u5b83\u65f6\uff0c\u4e0d\u77e5\u9053\u5b83\u662f\u88ab\u8bbe\u8ba1\u6210\u4e00\u4e2aIR\uff0c\u4e5f\u5373\u4e00\u4e2a\u4e0d\u540c\u5de5\u5177\u4e4b\u95f4\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u8fd8\u662f\u88ab\u8bbe\u8ba1\u6210\u8ba9\u4eba\u4eec\u76f4\u63a5\u4e66\u5199\u7684\u4e1c\u897f\u3002\u6211\u8ba4\u4e3a\uff0c\u5b83\u5728\u8fd9\u4e24\u65b9\u9762\u90fd\u5f88\u5931\u8d25\uff0c\u5b83\u771f\u7684\u5f88\u96be\u4f7f\u7528\uff0c\u5bf9\u5de5\u5177\u6765\u8bf4\u4e5f\u5f88\u96be\u751f\u6210\u3002"),(0,n.kt)("p",null,"\u6b64\u5916\uff0cEDA\u5de5\u5177\u3001\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u5df2\u7ecf\u975e\u5e38\u6210\u719f\uff0c\u5b83\u4eec\u975e\u5e38\u6807\u51c6\u5316\uff0c\u6709\u5f88\u591a\u5927\u516c\u53f8\u6b63\u5728\u63a8\u52a8\u548c\u5f00\u53d1\u8fd9\u4e9b\u5de5\u5177\u3002\u4f46\u4ed6\u4eec\u7684\u521b\u65b0\u901f\u5ea6\u5e76\u4e0d\u5feb\uff0c\u8bbe\u8ba1\u65f6\u5e76\u4e0d\u6ce8\u91cd\u53ef\u7528\u6027\u3002\u5b83\u4eec\u6bd4\u52a0\u901f\u5668\u7f16\u8bd1\u5668\u8981\u5dee\u5f97\u591a\uff0c\u7edd\u5bf9\u4e0d\u662f\u4ee5\u8f6f\u4ef6\u67b6\u6784\u7684\u6700\u4f73\u5b9e\u8df5\u6765\u6784\u5efa\u7684\uff0c\u800c\u4e14\u6210\u672c\u4e5f\u975e\u5e38\u9ad8\u3002\u56e0\u6b64\uff0c\u8fd9\u4e2a\u9886\u57df\u6709\u5de8\u5927\u7684\u521b\u65b0\u673a\u4f1a\u3002"),(0,n.kt)("p",null,"\u6211\u4e0d\u662f\u7b2c\u4e00\u4e2a\u8ba4\u8bc6\u5230\u8fd9\u4e00\u70b9\u7684\u4eba\u3002\u5728\u5f00\u6e90\u793e\u533a\uff0c\u5df2\u7ecf\u6784\u5efa\u4e86\u4e00\u5806\u5de5\u5177\u63a8\u52a8\u884c\u4e1a\u5411\u524d\u53d1\u5c55\u3002\u8fd9\u4e9b\u5de5\u5177\u975e\u5e38\u68d2\uff0c\u6bd4\u5982Verilator\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0cYosys\u662f\u53e6\u4e00\u4e2a\u975e\u5e38\u68d2\u7684\u5de5\u5177\uff0c\u5b83\u6709\u5f88\u597d\u7684\u5b9a\u7406\u8bc1\u660e\u5668\uff08Theorem Prover\uff09\u3002"),(0,n.kt)("p",null,"\u6211\u7684\u62c5\u5fe7\u5728\u4e8e\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u7406\u60f3\u76ee\u6807\u662f\u8bd5\u56fe\u50cf\u4e13\u6709\u5de5\u5177\u4e00\u6837\u597d\uff0c\u800c\u6211\u5e76\u4e0d\u771f\u7684\u8ba4\u4e3a\u4e13\u6709\u5de5\u5177\u6709\u90a3\u4e48\u597d\u3002\u53e6\u5916\uff0c\u8fd9\u4e9b\u5de5\u5177\u7684\u8bbe\u8ba1\u8005\u5e76\u6ca1\u6709\u5408\u4f5c\u3002\u6bcf\u4e2a\u5de5\u5177\u90fd\u5728\u9075\u5faa\u5355\u4e00\u50f5\u5316\u7684\u65b9\u6cd5\uff0c\u6ca1\u6709\u5b9e\u73b0\u5927\u7a0b\u5ea6\u7684\u6a21\u5757\u5316\u6216\u91cd\u590d\u4f7f\u7528\uff0c\u53ef\u4ee5\u4ece\u5176\u4e2d\u4e00\u4e9b\u5de5\u5177\u4e2d\u5f97\u5230\u7f51\u7edc\u5217\u8868\uff0c\u7528\u5b83\u6765\u89e3\u6790\u4e00\u4e9bVerilog\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\u4f46\u662f\uff0c\u5b83\u4e0d\u662f\u7531\u57fa\u4e8e\u5e93\u7684\u8bbe\u8ba1\u6784\u5efa\uff0c\u4e0eLLVM\u4e4b\u7c7b\u7684\u4e1c\u897f\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u8981\u521b\u5efa\u5728\u8bed\u6cd5\u4e0a\u6b63\u786e\uff0c\u5e76\u4e14\u80fd\u8868\u8fbe\u4f60\u60f3\u8981\u7684\u4e1c\u897f\u7684Verilog\u975e\u5e38\u56f0\u96be\u3002\u6b64\u5916\uff0c\u56e0\u4e3a\u8bb8\u591a\u4e0eVerilog\u6709\u5173\u7684\u5de5\u5177\u90fd\u6709\u70b9\u5947\u602a\uff0c\u800c\u4e14\u5f88\u96be\u9ad8\u8d28\u91cf\u5730\u9884\u6d4b\u3002\u751f\u6210\u4e0e\u5de5\u5177\u517c\u5bb9\u7684Verilog\u662f\u6bcf\u4e2a\u524d\u7aef\u5de5\u5177\u90fd\u5fc5\u987b\u91cd\u65b0\u53d1\u660e\u7684\u4e00\u95e8\u9ed1\u79d1\u6280\u3002\u56e0\u6b64\uff0c\u5728\u5806\u6808\u4e2d\u771f\u7684\u7f3a\u5931\u4e86\u4e00\u79cd\u7ec4\u4ef6\uff0c\u8fd9\u4e2a\u7ec4\u4ef6\u5141\u8bb8\u4eba\u4eec\u5728\u7f16\u7a0b\u6a21\u578b\u6c34\u5e73\u4e0a\u8fdb\u884c\u521b\u65b0\uff0c\u5e76\u5141\u8bb8\u4eba\u4eec\u627e\u5230\u65b9\u6cd5\u8ba9\u6240\u6709\u5de5\u5177\u90fd\u63a5\u53d7\u5b83\u3002"),(0,n.kt)("p",null,'\u6709\u4e00\u4e2a\u53ebCIRCT\u7684\u65b0\u5f00\u6e90\u9879\u76ee\u6b63\u8bd5\u56fe\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002CIRCT\u7684\u5168\u79f0\u662f"Circuit IR for Compilers and Tools\uff08\u7f16\u8bd1\u5668\u548c\u5de5\u5177\u7684Circuit IR\uff09"\uff0c\u5b83\u6784\u5efa\u5728MLIR\u548cLLVM\u4e4b\u4e0a\u3002CIRCT\u793e\u533a\u7684\u76ee\u7684\u662f\u63d0\u5347\u6574\u4e2a\u786c\u4ef6\u8bbe\u8ba1\u4e16\u754c\uff0c\u4fc3\u8fdb\u7f16\u7a0b\u6a21\u578b\u7684\u521b\u65b0\uff0c\u5e76\u542f\u7528\u4e00\u5957\u65b0\u7684\u6a21\u5757\u5316\u786c\u4ef6\u8bbe\u8ba1\u5de5\u5177\u3002\u5b83\u786e\u5b9e\u8fd0\u7528\u4e86\u5f88\u591a\u6211\u4eec\u5230\u76ee\u524d\u4e3a\u6b62\u4e00\u76f4\u5728\u8ba8\u8bba\u7684\u57fa\u4e8e\u5e93\u7684\u6280\u672f\u3002'),(0,n.kt)("p",null,"\u6b64\u5916\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u7ec4\u5408\u7684\u57fa\u4e8e\u5e93\u7684\u5de5\u5177\u94fe\uff0c\u53ef\u4ee5\u5efa\u7acb\u6709\u8da3\u7684\u65b0\u7684\u5f39\u6027\u63a5\u53e3\u8fde\u63a5\uff0c\u4f60\u53ef\u4ee5\u5efa\u7acbChisel\u793e\u533a\u6b63\u5728\u63a2\u7d22\u7684\u65b0\u7f16\u7a0b\u6a21\u578b\uff0c\u7528\u5b83\u6765\u52a0\u901fChisel\u6d41\u7a0b\u3002\u5b83\u5e26\u6765\u4e86\u5f88\u591a\u597d\u5904\uff0c\u53ef\u4ee5\u8ba9\u5f88\u591a\u4eba\u4e00\u8d77\u5de5\u4f5c\uff0c\u63a8\u52a8\u4e0d\u540c\u65b9\u5f0f\u7684\u521b\u65b0\u3002\u6211\u4eec\u6b63\u5728\u5efa\u7acb\u4e00\u4e2a\u771f\u6b63\u4f1f\u5927\u7684\u5c0f\u4e16\u754c\uff0c\u8ba9\u5173\u5fc3\u786c\u4ef6\u7f16\u8bd1\u5668\u7684\u4eba\u5728\u4e00\u8d77\u5de5\u4f5c\uff0c\u8fd9\u5f88\u6709\u8da3\u3002\u8fd9\u9879\u5de5\u4f5c\u4ecd\u5904\u4e8e\u65e9\u671f\uff0c\u76ee\u6807\u662f\u66f4\u5feb\u5730\u6784\u5efa\u52a0\u901f\u5668\uff0c\u8ba9\u52a0\u901f\u5668\u53d8\u5f97\u66f4\u5feb\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Modular,")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"composable &")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"layered architecture")," is what the world of AI needs, and ",(0,n.kt)("strong",{parentName:"li"},"we are building it for everyone."))),(0,n.kt)("h4",{id:"7322-challenges"},"7.3.2.2 Challenges"),(0,n.kt)("p",null,"Compiling an AI graph is actually quite different from traditional compilation problems. "),(0,n.kt)("p",null,"An AI graph contains two things: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"the graph topology (how the layers are interconnected) and "),(0,n.kt)("li",{parentName:"ul"},"the model weights (parameters associated with specific layers). ")),(0,n.kt)("p",null,"In terms of size, the graph topology is on the order of kilobytes, whereas weights are on the order of megabytes and gigabytes. For example, look at some of the bigger models released by Meta. The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/facebookresearch/metaseq/tree/main/projects/OPT"},"Open Pre-trained Transformers")," have 30B, 66B, or even 175B+ parameters, which equates to 100+ gigabytes of weights. There are even larger models like ",(0,n.kt)("a",{parentName:"p",href:"https://www.deepmind.com/blog/language-modelling-at-scale-gopher-ethical-considerations-and-retrieval"},"Gopher")," or ",(0,n.kt)("a",{parentName:"p",href:"https://www.microsoft.com/en-us/research/blog/using-deepspeed-and-megatron-to-train-megatron-turing-nlg-530b-the-worlds-largest-and-most-powerful-generative-language-model/"},"Megatron")," too."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR in the Modular compilation stack")),(0,n.kt)("p",null,"The Modular stack leverages the ",(0,n.kt)("a",{parentName:"p",href:"http://mlir.llvm.org/"},"MLIR compiler infrastructure")," to represent and transform AI models, including AI operator graphs (for multiple frameworks), mid-level runtime primitives, and low-level machine code generation. Our team has many of the ",(0,n.kt)("a",{parentName:"p",href:"https://arxiv.org/abs/2002.11054"},"foundational architects of MLIR"),", who were deeply involved in ",(0,n.kt)("a",{parentName:"p",href:"https://www.blog.google/technology/ai/mlir-accelerating-ai-open-source-infrastructure/"},"releasing MLIR to the world"),", and we continue to actively maintain large portions of core ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," today."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR is a good thing, but its approach for managing weights was not!")),(0,n.kt)("p",null,"One of the fundamental building blocks of MLIR is an ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"Attribute"),", which you can think of as a form constant data that is \u201cunique\u2019d\u201d (aka, memoized, or ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/String_interning"},"intern\u2019ed"),"). Attributes are user extensible, meaning they may take various forms depending on the use case. Attributes are used for things like constant expression values (e.g. \u201c5\u201d, \u201c10.0\u201d, etc.), string literals, for enumerators (e.g. \u201cless than\u201d, \u201cgreater than\u201d, \u201cequal to\u201d, etc.), for arrays of data \u2026 and far more. Most MLIR-based AI tooling uses attributes to hold weights for AI models."),(0,n.kt)("p",null,"However, this is a problem: model weights can be enormous, and MLIR stores a two-gigabyte weight tensor the same way as a four-byte tensor \u2014 in an attribute containing a unique\u2019d array of elements. This creates an obvious problem given we just used the words ",(0,n.kt)("strong",{parentName:"p"},"unique\u2019d")," and ",(0,n.kt)("strong",{parentName:"p"},"gigabytes")," so close together!"),(0,n.kt)("p",null,'Here is the challenge: when something is unique\u2019d in MLIR, it is allocated, hashed, and stored within an "',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),'". These objects have lifetimes attached to the ',(0,n.kt)("strong",{parentName:"p"},"MLIRContext"),", and they are not destroyed until the context is destroyed. This is great for small values because we can pass them around and compare unique'd objects by pointer, share allocations for attributes (very common), and more."),(0,n.kt)("p",null,"These benefits turn into a liability with huge weight tensors: we don\u2019t want to reallocate, copy, or unique them. We also don\u2019t want them to live forever: it is important to deallocate big weights when the computation no longer references them. For example, when we run a tool that quantizes our model, it needs to transform the operator graph and generate new weights \u2014 and can end up with multiple copies of that data which all live for the duration of the compilation process."),(0,n.kt)("p",null,"Another problem for ML tooling is how MLIR was serialized to the file system. When we started, MLIR had no binary serialization format - just a textual format. This is a problem for large weights because each byte of binary data ended up being emitted in a hexadecimal form - taking 2x the space as the data it is encoding. That means that we end up not only taking a long time to create the hex ",(0,n.kt)("em",{parentName:"p"},"(about 20 seconds for a decently sized multi-gigabyte model)"),", but our intermediate files are twice as big as they should be - 2x an already big number!"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A bigger impact than just developer productivity")),(0,n.kt)("p",null,"This well-intended design mechanism can cripple even the best compilers. The most obvious challenge is that it compounds the time necessary to compile, inspect, and transform a model. If you have ever used the excuse, \"My code's compiling,\" you'll be aware of the pain this creates. Here, we are forcing the processor to continuously allocate, copy, and hash multiple gigabytes of data."),(0,n.kt)("p",null,"A bigger problem than compile-time is that memory use impacts larger scale architectural features in the Modular stack. For example, because our compiler and technology stack itself is highly parallel and utilizes advanced features like online search, memory use directly affects the amount of work we can do in parallel. This is important to get the highest quality of results."),(0,n.kt)("p",null,"At Modular, it is core to our ethos that we build tools that users will fall in love with. We realize that advanced features simply won\u2019t get used if they are difficult to use, impact productivity, or have significant caveats (e.g. they don\u2019t work in all cases). We love that fixing ",(0,n.kt)("strong",{parentName:"p"},"these foundational problems with large weights"),", allows us to ",(0,n.kt)("em",{parentName:"p"},"subtract complexity")," from our users lives and workflows."),(0,n.kt)("h4",{id:"7323-core-additions-to-mlir"},"7.3.2.3 Core additions to MLIR"),(0,n.kt)("p",null,"We took a step back to understand what we needed to solve this problem with large model tooling and listed out:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Only allocate memory when necessary"),": We know it is more efficient to memory map large data (like weights) from disk, instead of copying data into malloc\u2019d blocks.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"No hashing or uniquing"),": Let\u2019s not check equality of 2 gigabytes blobs of data; weights should be identified by name instead of being implicitly unique\u2019d by content.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enabling Inline Mutation"),": If there is only one user of the data, we should be able to quantize, transform and manipulate data in place instead of making a copy of it first.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Enable deallocation"),": The data we are working with is huge, and we need to deallocate it when the last reference to the data is destroyed.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Fast serialization"),": Whether JITing, searching optimization parameters, or just iterating locally, we cache IR for many reasons, and it should be ",(0,n.kt)("strong",{parentName:"li"},"fast."))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fixing the weight attributes")),(0,n.kt)("p",null,"\u6a21\u578b\u4e2d\u7684weight\u662f\u5e38\u91cf\uff0c\u5728\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u53d8\u3002\u8fd9\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u57fa\u7840\uff0c\u8ddf\u5176\u4ed6\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u60c5\u51b5\u4e0d\u4e00\u6837\uff0c\u4e00\u822c\u7f16\u7a0b\u4e2d\u7684\u4e0d\u53d8\u91cf\u662f\u5c11\u6570\uff0c\u800c\u5927\u90e8\u5206\u53d8\u91cf\u90fd\u4f1a\u968f\u7740\u8ba1\u7b97\u8fc7\u7a0b\u800c\u53d1\u751f\u53d8\u5316\u3002"),(0,n.kt)("p",null,"The first four requirements address one fundamental problem with how we've been using MLIR: weights are constant data, but shouldn't be managed like other MLIR attributes. Until now, we've been trying to place a square peg into a round hole, creating a lot of wasted space that's costing us development velocity (and, therefore, money for users of the tools)."),(0,n.kt)("p",null,'We decided we needed to manage this weight data differently than other types of attributes. This prompted our first fundamental extension to MLIR, "Resources," a mechanism to separate data from its references within the computation.'),(0,n.kt)("p",null,"\u7b2c\u4e00\u4e2a\u57fa\u672c\u6269\u5c55\uff1aresources\uff0c\u4e00\u79cd\u5c06\u6570\u636e\u53ca\u5176\u5f15\u7528\u8fdb\u884c\u5206\u79bb\u7684\u673a\u5236"),(0,n.kt)("p",null,"Each blob of serialized MLIR may now contain additional sections, known as \u201cresource\u201d sections. These sections either include "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u201cdialect\u201d resources (a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/LangRef/#dialects"},"dialect")," is essentially a namespace-like abstraction used when extending MLIR) or "),(0,n.kt)("li",{parentName:"ul"},"\u201cexternal\u201d resources (for toolchain-specific data). ")),(0,n.kt)("p",null,"The data within these sections is represented using a simple key-value pairing, creating a json-like structure, like so:"),(0,n.kt)("p",null,"Encoding resources this way also brings some secondary benefits:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Printing IR for debugging is less error-prone, leading to a better development experience"),": Resources are specialized sections; we don\u2019t have to worry about accidentally dumping 4 gigabytes to the screen while debugging something.",(0,n.kt)("strong",{parentName:"li"},"\u200d")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"We can soundly process the IR without the data present"),": With the IR only holding references to the data and not the data itself, we can omit the underlying resource data if desired. For example, this greatly simplifies reproducers that don\u2019t need the big weight data (consider sending a colleague a 20-megabyte file instead of a 1.2-gigabyte file).")),(0,n.kt)("p",null,"By introducing resources as a new concept, we\u2019ve finally been able to build a clean separation between program and data. Now we never pass our weight data directly to an attribute. Instead, we pass a weak reference to the attribute and pass the data to a specialized manager. With this, we now have much more control over when and how weights are allocated, mutated, and destroyed."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"A new binary encoding for MLIR")),(0,n.kt)("p",null,"With a better representation of our weights, the only thing we needed now was a more efficient method of storing these weights when serializing our MLIR representation."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"What is the user impact?")),(0,n.kt)("p",null,"In the end, adding resources and a binary encoding to MLIR has made our toolchain and development workflow significantly faster and reduced our memory usage substantially - making our performance and velocity incredible. It\u2019s also made everything about MLIR better \u2014 more on that later."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},(0,n.kt)("img",{parentName:"a",src:"https://uploads-ssl.webflow.com/62a8b4a3467401a65a14d263/636c536434d44a0efd47c896_mlir-dot-touch.jpg",alt:"img"}))),(0,n.kt)("p",null,"Said by every ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/"},"MLIR")," developer, everywhere"),(0,n.kt)("p",null,"\u200d"),(0,n.kt)("p",null,"To validate this, we tested our changes across models of various sizes, measuring the speed of a real-life lowering and optimization pipeline in our MLIR-based graph compiler (from a TensorFlow serialized model to the input format of our runtime) and the memory used during that process."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Compilation Workflow","*")),(0,n.kt)("p",null,"MLIR is now significantly faster. Going from a serialized TensorFlow model (from a checkout of TensorFlow 2.10) to our runtime input format, a process that involves many transformations of the underlying program representation, was ~1.8-2x faster in terms of wall clock time than before, with speed scaling consistently across the various model sizes."),(0,n.kt)("p",null,"Diving a bit deeper, the TF serialized model processing is now basically instant \u2014 all our time is spent writing the big-weight data to disk when generating the MLIR. In fact, the actual time spent in our code is about 10x faster than before. Most of the time is now bounded by the speed at which the SSD writes >1 gigabyte of data to disk."),(0,n.kt)("p",null,"For ML developers using our tools this means faster model compilation, thereby improving productivity and iteration time. This has benefits for production environments as well when loading (and compiling) models. For example, when dynamically loading and unloading models based on incoming traffic \u2014 e.g., use cases with many of personalized/fine-tuned user models."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Speed: Serialization","*")),(0,n.kt)("p",null,"Also faster is serialization due to the introduction of a binary encoding. Interacting with MLIR via external tools depends on the reading and writing of serialized MLIR \u2014 whether for introspection, caching, reproducer generation, etc. Again, we tested serialization performance across various model sizes and saw a significant speed-up, peak performance being SSD bound. More specifically, reading textual data for larger models took ~5 seconds compared to <10ms for reading binary. And writing was > ~5x faster for binary than textual formats."),(0,n.kt)("p",null,"For Modular, this enables us to develop infrastructure and tooling around MLIR that would otherwise be prohibitively slow or expensive. For example, this would allow us to provide an efficient debugger that relies on caching model representations throughout the compilation workflow, improving the underlying compiler performance, and much much more."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"*Memory Usage","*")),(0,n.kt)("p",null,"Finally, the mmap capabilities of our binary serialization and the separation of IR and data via resources have also significantly reduced memory consumption. Across all model sizes, we are using less memory during the compilation process. Where before we had to allocate the relative size of the weights in a model, we no longer have to allocate at all for the weights, meaning we save significant memory every time we compile."),(0,n.kt)("h4",{id:"7324-\u7b14\u8bb0"},"7.3.2.4 \u7b14\u8bb0"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u5e73\u53f0\uff0c\u6bd4\u5982TensorFlow\u3001PyTorch\u548cCUDA\uff0c\u4ed6\u4eec\u5e76\u4e0d\u662f\u6a21\u5757\u5316\u7684\uff0c\u6240\u4ee5\u5b83\u4eec\u968f\u7740\u6280\u672f\u7684\u4e0d\u65ad\u53d1\u5c55\u79ef\u7d2f\u4e86\u8d8a\u6765\u8d8a\u591a\u7684\u76f8\u4e92\u4f9d\u8d56\u548c\u8026\u5408\uff0c\u7136\u540e\u5728\u4f01\u4e1a\u5b9e\u9645\u90e8\u7f72\u5e94\u7528\u7684\u65f6\u5019\uff0c\u9762\u5bf9\u5f02\u6784\u7684\u786c\u4ef6\u5e73\u53f0\u548c\u52a0\u901f\u5668\uff0c\u6bd4\u5982\u670d\u52a1\u5668\u3001\u79fb\u52a8\u7aef\u3001microcontroller\uff0c\u6216\u8005\u6d4f\u89c8\u5668\u767b\uff0c\u4f01\u4e1a\u5c31\u9700\u8981\u8ddf\u8fd9\u79cd\u8026\u5408\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5Modular\u76ee\u6807\u662f\u9762\u5411\u5f02\u6784\u73af\u5883\u7684\u5b9e\u9645\u90e8\u7f72\u95ee\u9898\uff0c\u5728\u8f6f\u4ef6\u7684\u6784\u5efa\u5c42\u9762\uff0c\u901a\u8fc7\u63d0\u4f9b\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\uff0c\u6765\u9002\u5e94\u8fd9\u79cd\u73af\u5883\u53d8\u5316\uff0c\u4f7f\u5f97\u90e8\u7f72\u6210\u672c\u66f4\u4f4e\uff0c\u90e8\u7f72\u5176\u5b9e\u4e5f\u5c31\u662f\u4ea7\u54c1\u5316\u7684\u6838\u5fc3\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e9b\u5e73\u53f0\u6784\u5efa\u51fa\u7684\u662f\u5355\u4e00\u7684\u5927\u578b\u7cfb\u7edf\uff08monolithic system\uff09\uff0c\u4e00\u65e6\u8131\u79bb\u5b83\u4eec\u521d\u59cb\u7684\u76ee\u6807\uff0c\u5c31\u4e0d\u5bb9\u6613\u6269\u5c55\u548c\u6cdb\u5316\u3002\u8fd9\u79cd\u5c40\u9762\u5bfc\u81f4\u4e86\u786c\u4ef6\u4ea7\u751f\u9488\u5bf9\u8fd9\u4e9b\u5e73\u53f0\u5f00\u53d1\u5404\u79cd\u5de5\u5177\uff0c\u5bfc\u81f4AI\u5de5\u4e1a\u7684\u788e\u7247\u5316\uff0c\u8fd9\u4e9b\u5de5\u5177\u5177\u6709\u5404\u81ea\u7684\u9650\u5236\u548c\u4e00\u4e9b\u6743\u8861\u3002\u8fd9\u6837\u7684\u8bbe\u8ba1\u6a21\u5f0f\u5bfc\u81f4\u8fd9\u4e9b\u521b\u65b0\u5de5\u4f5c\u4e0d\u6613\u4e8e\u4f7f\u7528\uff0c\u4e0d\u6613\u4e8e\u79fb\u690d\uff0c\u4e5f\u4e0d\u6613\u4e8e\u4f38\u7f29\u3002\u8fd9\u6837\u7684\u6280\u672f\u4f7f\u5f97\u53ea\u6709\u5927\u516c\u53f8\u7684\u5168\u6808\u4e13\u5bb6\u624d\u80fd\u591f\u5f88\u597d\u5730\u638c\u63e1\u548c\u4f7f\u7528\u8fd9\u4e9b\u6280\u672f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"AI\u6280\u672f\u5fc5\u987b\u80fd\u591f\u5f88\u5bb9\u6613\u5730\u88ab\u4efb\u4f55\u4eba\u4f7f\u7528\uff0c\u8fd9\u6837\u624d\u80fd\u4f7f\u5f97\u521b\u65b0\u4ea7\u54c1\u53ef\u4ee5\u590d\u6742\u7684\u8f6f\u4ef6\u548c\u786c\u4ef6\u94fe\u4e2d\u89e3\u653e\u51fa\u6765\uff0c\u4ece\u800c\u5de8\u5927\u5730\u63d0\u5347\u6211\u4eec\u7684\u65e5\u5e38\u751f\u6d3b\u3002Imagine a world where ML research ",(0,n.kt)("em",{parentName:"strong"},"truly flows")," rapidly and effectively into production from a large global community. One where these breakthroughs are more accessible to everyone, allowing product innovators to drastically improve our daily lives and be freed from the chains of software and hardware complexity.")),(0,n.kt)("h3",{id:"733-jittor"},"7.3.3 Jittor"),(0,n.kt)("p",null,"The development of deep learning frameworks revolves around improving human productivity and com- putational performance. To achieve good performance from modern processors, developers often need to write assembly language, use special instruction sets, or use specialised languages or libraries, such as shaders for GPU programming, CUDA ","[9]",", and OpenCL ","[10]",". Although these provide excellent perfor- mance, they are difficult to use and debug, and furthermore, programmers need a good understanding of the underlying hardware. Scripting languages such as Python and JavaScript are interpreted, giving immediate feedback, further reducing the difficulty of programming, but this sacrifices performance."),(0,n.kt)("p",null,"To simultaneously improve productivity and performance, various scientific computing libraries and deep learning frameworks have been developed. A widely used optimization method is static compilation with dynamic binding. This optimization method uses C, C ++, CUDA ","[9]",", or other languages to statically compile the operators needed in deep learning, while the user dynamically applies them via scripting languages such as Python and Javascript. Many frameworks adopt this approach, including Numpy ","[11]",", Matlab, Theano ","[2]",", TensorFlow ","[4]",", MXNet ","[12]",", and PyTorch ","[5]","."),(0,n.kt)("p",null,"Dynamic binding allows users to take full advantage of the underlying hardware performance when using a scripting language, but it has a problem: all operations are statically compiled, making optimiza- tions such as operator fusion difficult; this important optimization technique combines multiple operators into one operator, so that intermediate results do not need to be stored. Dynamic binding with a scripting language cannot use this optimization. For example, the user may need to calculate d = ab + c, where a, b, c are tensors. First, the scripting interpreter executes tmp = TensorMul(a,b) and then executes d = TensorAdd(tmp,c). If we could compile the whole expression, rather than applying operators one by one, we could execute d = TensorMulAndAdd(a,b,c) directly without the need for temporary storage. This is significant, as on modern processors, memory access is often much slower than calculation. However, we cannot guess what combinations of operators the user may require, and static compilation of all possible combinations is obviously infeasible. To solve this problem, we may use JIT compilation technology to dynamically compile and optimize the operators that the user needs."),(0,n.kt)("p",null,"Jittor is a completely new design of deep learning framework based on JIT compilation technology. Following the above discussion, Jittor is designed based on the following principles."),(0,n.kt)("p",null,"\u2022 It should be highly customizable yet easy to use. Users should be able to define new operators and models with just a few lines of code."),(0,n.kt)("p",null,"\u2022 It should separate coding from optimization. Users should be able to focus on coding using the front-end interface, while the code is automatically optimized by the back-end. This improves readability of the front-end code, while well-tested, standard optimization code in the back-end ensures robustness."),(0,n.kt)("p",null,"\u2022 Everything should be compiled JIT. This includes the back-end and operations. Users should be able to change the source code at any time."),(0,n.kt)("h4",{id:"7331-the-front-end"},"7.3.3.1 The front-end"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Meta-operators")),(0,n.kt)("p",null,"\u5143\u64cd\u4f5c\u662f\u5728\u4e00\u822c\u7684\u64cd\u4f5c\u4e0a\u6dfb\u52a0\u4e86\u4e00\u4e2a\u7279\u5b9a\u7684\u7c7b\u522b\uff0c\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u63d0\u4f9b\u8bb8\u591a\u5185\u7f6e\u7684\u64cd\u4f5c\u4f7f\u5f00\u53d1\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u901a\u5e38\u505a\u4e00\u4e9b\u76f8\u4f3c\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u64cd\u4f5c\u5efa\u7acb\u66f4\u9ad8\u7684\u62bd\u8c61\u3002\u901a\u5e38\u8fd9\u4e9b\u64cd\u4f5c\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Reindex\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u5efa\u7acbone-to-many\u7684\u6620\u5c04\uff0c\u4f8b\u5982broadcast\u3001pad\u3001slice\uff0cIn short, the reindex operator rearranges the input and stores it in appropriate positions of the output. Index bounds checking is also performed based on the indexing function."),(0,n.kt)("li",{parentName:"ul"},"Reindex-reduce\uff0c\u63d0\u4f9bmany-to-one\u7684\u6620\u5c04\uff0c\u4f8b\u5982sum\u3001product"),(0,n.kt)("li",{parentName:"ul"},"Element-wise\uff0c\u9010\u5143\u7d20\u8ba1\u7b97\uff0c\u4f8b\u5982\u77e9\u9635\u8ba1\u7b97\uff0c\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u5177\u6709\u76f8\u540c\u7684shape")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(397).Z,width:"1498",height:"998"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Fusion of operators")),(0,n.kt)("p",null,"\u5229\u7528\u4e0a\u8ff0\u7684\u7c7b\u578b\u4fe1\u606f\uff0cJittor\u53ef\u4ee5\u5c06\u591a\u4e2a\u64cd\u4f5c\u8fdb\u884c\u5408\u5e76\uff0c\u8ba1\u7b97\u51fa\u4e00\u4e2a\u65b0\u7684\u8ba1\u7b97\u516c\u5f0f\uff0c\u4f7f\u5f97\u5f88\u591a\u4e2d\u95f4\u53d8\u91cf\u7684\u5b58\u50a8\u88ab\u7701\u6389\u3002"),(0,n.kt)("p",null,"\u4f46\u5176\u6838\u5fc3\u662f\u901a\u8fc7\u5143\u64cd\u4f5c\u7684\u7c7b\u578b\u548c\u5206\u7c7b\uff0c\u77e5\u9053\u548c\u6bcf\u4e2a\u64cd\u4f5c\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u5c3d\u7ba1\u662f\u4e00\u79cd\u62bd\u8c61\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u3002"),(0,n.kt)("p",null,"\u5c31\u50cf\u6211\u4eec\u5728\u8fdb\u884c\u6570\u5b66\u51fd\u6570\u7684\u5408\u5e76\u65f6\uff0c\u6211\u4eec\u5e76\u4e0d\u9700\u8981\u5173\u5fc3\u6bcf\u4e2a\u503c\u662f\u591a\u5c11\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u51fd\u6570\u7684\u5f62\u5f0f\uff0c\u7136\u540e\u6839\u636e\u51fd\u6570\u7684\u5f62\u5f0f\u5bf9\u51fd\u6570\u8fdb\u884c\u5408\u5e76\u4e4b\u540e\uff0c\u518d\u5c06\u503c\u5e26\u5165\u6700\u540e\u7684\u51fd\u6570\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Variables")),(0,n.kt)("p",null,"Variables are tensors with the following properties:"),(0,n.kt)("p",null,"\u2022 A shape attribute.\n\u2022 A data type attribute, dtype, e.g., float or int.\n\u2022 A stop grad attribute to prevent gradient back propagation for this variable.\n\u2022 A stop fuse attribute to prevent fusion of operators associated with this variable.\nThe stop grad attribute is usually used in testing or inferencing, while the stop fuse attribute provides control over operator fusion: the user may get better performance by careful use of these attributes. For example, operator fusion will consume register resources in a GPU. With sufficient resources, fusion will always improve performance, but fusing hundreds of operators will exhaust resources and cause performance degradation."),(0,n.kt)("h4",{id:"7332-the-back-end"},"7.3.3.2 The back-end"),(0,n.kt)("p",null,"The back-end is responsible for resource management, process scheduling and compilation optimization. It includes the operator fuser, which decides the fusing strategy used for the meta-operators, external operators, which are customized operators provided by users or third-party libraries, the JIT compiler, the integrated compiler used to optimize meta-operators, and the unified graph execution, which unifies static and dynamic graphs execution."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operator fuser")),(0,n.kt)("p",null,"\u5b9e\u9645\u7684\u8ba1\u7b97\u56fe\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4e3a\u4e86\u66f4\u7b80\u5355\u5730\u5904\u7406\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c06\u8ba1\u7b97\u56fe\u770b\u505a\u4e00\u4e2a\u6709\u5411\u65e0\u73af\u56fe\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u8868\u793a\u4e00\u4e2a\u64cd\u4f5c\uff0c\u800c\u8fb9\u8868\u793a\u53d8\u91cf\uff0c\u901a\u8fc7\u5c06\u56fe\u5212\u5206\u6210\u591a\u4e2a\u5b50\u56fe\u7684\u65b9\u6cd5\u6765\u8fdb\u884cfuse\u64cd\u4f5c\u3002\u5176\u5224\u65ad\u7684\u4f9d\u636e\u4f7f\u5f97\u603b\u7684\u4ee3\u4ef7\u6700\u5c0f\uff0c\u5176\u4e2d\u4ee3\u4ef7\u51fd\u6570 \u8868\u793a\u4e3a\u6bcf\u4e2a\u5b50\u56fe\u5bf9\u53d8\u91cf\u7684\u8bfb\u548c\u5199\u7684\u6307\u4ee4\u7684\u603b\u6570\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u7684\u6027\u80fd\u74f6\u9888\u4e3b\u8981\u5728\u4e8e\u5185\u5b58\u64cd\u4f5c\u3002fusion\u901a\u8fc7\u51cf\u5c11\u5185\u5b58\u64cd\u4f5c\u6765\u63d0\u5347\u6027\u80fd\u3002"),(0,n.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u51e0\u4e2a\u7279\u5b9a\u7684\u89c4\u5219\u9700\u8981\u6ee1\u8db3\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"JIT compiler")),(0,n.kt)("p",null,"\u5728fuser\u4e4b\u540e\uff0c\u5c06\u4ee3\u7801\u7f16\u8bd1\u4e3a\u9ad8\u6027\u80fdC++\u4ee3\u7801\u3002\u5e76\u4f1a\u8fdb\u4e00\u6b65\u88abLVVM\u4f18\u5316\u81f3\u4e0d\u540c\u7684\u786c\u4ef6\u5e73\u53f0\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unified graph execution")),(0,n.kt)("p",null,"According to the execution method of computational graphs, deep-learning frameworks can be based either on a static graph execution (also called a define-and-run approach) or a dynamic graph execution (define-by-run, eager execution). Static graph based frameworks are efficient and easy to optimize, and dynamic graph based frameworks are easy-to-use and flexible. Most current frameworks, including TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer, support dynamic graphs."),(0,n.kt)("p",null,"As an alternative, we propose our unified graph execution approach. Unified graph execution provides an imperative style interface which has the same flexibility as a dynamic graph. And it is also as efficient as a static graph."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"jittor-1",src:l(105).Z,width:"1732",height:"1642"})),(0,n.kt)("p",null,"\u9759\u6001\u56fe\u5728\u8fd0\u884c\u4e4b\u524d\u5b9a\u4e49model\uff0c\u7136\u540e\u8fd0\u884c\u65f6\u5bf9\u6570\u636e\u6267\u884c\u64cd\u4f5c\u3002\u5176\u4e2d\u5728\u7f16\u8bd1\u7684\u65f6\u5019\u4f7f\u7528\u4e00\u4e2aplaceholder\u6765\u8868\u793a\u6570\u636e\uff0c\u7f16\u8bd1\u5668\u5bf9\u8ba1\u7b97\u56fe\u8fdb\u884c\u4f18\u5316\u3002\u7531\u4e8e\u53ea\u6709\u8fd0\u884c\u65f6\u624d\u4f1a\u77e5\u9053\u6570\u636e\uff0c\u6240\u4ee5\u50cfprint\u8fd9\u6837\u7684\u65b9\u6cd5\u65e0\u6cd5\u652f\u6301\uff0c\u4e0d\u5229\u4e8e\u8c03\u8bd5\u7b49\u3002\u7279\u70b9\u662f\u6027\u80fd\u9ad8\u3001\u5b9e\u73b0\u7b80\u5355\u3002TensorFlow\u91c7\u7528\u8fd9\u79cd\u6a21\u5f0f\u3002"),(0,n.kt)("p",null,"Eager execution executes each operator immediately when it is added to the graph. Because addition of operators is performed on the CPU while they are executed on the GPU, eager execution will lower the latency between CPU and GPU, thus reducing overheads, allowing this approach to achieve competitive performance with the static graph approach. this furthermore allows the user to manipulate intermediate results during model building. This provides users with a great deal of flexibility: for example data can be printed, and the model can be changed according to the intermediate results obtained, which is hard to do with static graphs, and is essential in applications such as generative adversarial networks (GANs) ","[18]"," and reinforcement learning ","[19]",". For example, when training a GAN, the computation graph keeps changing between the discriminator and generator. This flexibility has made dynamic graphs popular, and most frameworks (such as TensorFlow 2.0\u2019s eager mode, PyTorch, and Chainer) currently support them."),(0,n.kt)("p",null,"To obtain the benefits of both approaches, without their drawbacks, we use a unified graph execution approach. It provides the full flexibility of a dynamic graph, and the graph can be rebuilt frequently without performance degradation, yet operator fusion is still possible. This is achieved by lazy execution. See Figure 7(c). Operators interpreted by Python are not executed immediately, but delayed until their results are needed. op1 in line 3 is not executed until x2 is printed: x2 is needed at that point, and it depends on x1 which in turn requires op1 to be executed. During printing in line 5, three things happen. First, unified execution will select all those operators in graph G that are required by printing, and split them off into a new sub-graph G\u2032; in Figure 7 this is op1 and op2. The sub-graph G\u2032 is then optimized using the operator fusion process in Subsection 4.1: the operator fuser takes G\u2032 as input, and partitions G\u2032 into multiple sub-graphs G\u2032\u2032, where each sub-graph represents one fused operator. Finally, sub-graph i G\u2032 is executed. In this very simple example, as op1 and op2 are executed together, there is an opportunity to fuse them before doing so. While addition and execution of operators is coupled in the dynamic graph, it is decoupled in the unified graph."),(0,n.kt)("h3",{id:"734-pytorch"},"7.3.4 PyTorch"),(0,n.kt)("p",null,"\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u901a\u5e38\u662f\u4e00\u4e2alibrary\uff0c\u800c\u4e0d\u662f\u4e00\u95e8\u901a\u7528\u7f16\u7a0b\u8bed\u8a00\uff0clibrary\u610f\u5473\u7740\u5b83\u6709\u81ea\u5df1\u7684\u7279\u5b9a\u903b\u8f91\uff0c\u5b83\u53ea\u80fd\u5904\u7406\u5b83\u7684\u903b\u8f91\u6240\u5b9a\u4e49\u7684\u4e8b\u60c5\uff0c\u5c31\u50cf\u5176\u4ed6\u4efb\u4f55library\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u90fd\u662f\u4f7f\u7528\u9759\u6001\u6570\u636e\u6d41\u56fe\uff0c\u5b83\u4eec\u90fd\u662f\u73b0\u7f16\u8bd1\u597d\u6a21\u578b\uff0c\u7136\u540e\u6279\u91cf\u6267\u884c\u6570\u636e\u5904\u7406\uff0c\u8fd9\u867d\u7136\u6709\u6bd4\u8f83\u597d\u7684\u6027\u80fd\uff0c\u4f46\u662f\u4e27\u5931\u4e86\u6613\u7528\u6027\u3001\u7075\u6d3b\u6027\uff0c\u4e5f\u4e0d\u6613\u4e8e\u8c03\u8bd5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"define-by-run approach")),(0,n.kt)("p",null,"Separately, libraries such as NumPy","[12]",", Torch","[6]",", Eigen","[13]"," and Lush","[14]"," made ",(0,n.kt)("strong",{parentName:"p"},"array-based programming")," productive in general purpose languages such as Python, Lisp, C++ and Lua."),(0,n.kt)("p",null,"Easy and efficient ",(0,n.kt)("strong",{parentName:"p"},"interoperability")," is one of the top priorities for PyTorch because it opens the possibility to leverage the rich ecosystem of Python libraries as part of user programs. Hence, PyTorch allows for bidirectional exchange of data with external libraries. "),(0,n.kt)("p",null,"Moreover, many of the critical systems are designed specifically to be ",(0,n.kt)("strong",{parentName:"p"},"extensible"),". For instance, the automatic differentiation system allows users to add support for custom differentiable functions."),(0,n.kt)("p",null,"Most importantly, users are free to replace any component of PyTorch that does not meet the needs or performance requirements of their project. They are all designed to be completely interchangeable, and PyTorch takes great care not to impose any particular solution."),(0,n.kt)("h4",{id:"7341-perform-focused-implementation"},"7.3.4.1 Perform focused implementation"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Python Global Interpreter Lock (GIL)")," is a type of process lock which is used by python whenever it deals with processes. Generally, Python only uses only one thread to execute the set of written statements. This means that in python only one thread will be executed at a time. The performance of the single-threaded process and the multi-threaded process will be the same in python and this is because of GIL in python. We can not achieve multithreading in python because we have global interpreter lock which restricts the threads and works as a single thread."),(0,n.kt)("p",null,"Running deep learning algorithms efficiently from a Python interpreter is notoriously challenging: for instance, the global interpreter lock ","[33]"," effectively ensures that only one of any number of concurrent threads is running at any given time. Deep learning frameworks based on the construction of a static data-flow graph sidestep this problem by deferring the evaluation of the computation to a custom interpreter."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"An efficient C++ core")),(0,n.kt)("p",null,"\u6838\u5fc3\u4ee3\u7801 \u90fd\u7531C++\u7f16\u5199\uff0c\u7136\u540ebinding\u5230Python\uff0c\u5305\u62ec\u6570\u636e\u7ed3\u6784\u3001CPU/GPU\u7b97\u5b50\u3001\u5e76\u884c\u8ba1\u7b97\u7b49\uff0c\u8fd9\u6837\u53ef\u4ee5\u7ed5\u5f00GIL\uff0c\u540c\u65f6\u8fd8\u53ef\u4ee5\u5c06PyTorch\u7684\u4ee3\u7801binding\u5230\u5176\u4ed6\u8bed\u8a00\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Separate control and data flow")),(0,n.kt)("p",null,"PyTorch\u4e25\u683c\u5730\u5c06\u63a7\u5236\u548c\u6570\u636e\u6d41\u5206\u5f00\uff0c\u8fd9\u91cc\u7684\u63a7\u5236\u4e3b\u8981\u662f\u6307CPU\u4e0a\u7684\u7a0b\u5e8f\u5206\u652f\u3001\u5faa\u73af\u7b49\u63a7\u5236\u7b97\u5b50\u7684\u903b\u8f91\uff0c\u8fd9\u90e8\u5206\u5728Python\u548c\u90e8\u5206C++\u4e2d\u6267\u884c\uff1b\u800c\u6570\u636e\u6d41\u6307\u7684\u662f\u7528\u4e8e\u5728GPU\u4e2d\u6267\u884c\u7684\u7b97\u5b50\u8c03\u7528\u53ca\u5176\u76f8\u5173\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u7406\u89e3\u5728\u5728GPU\u4e2d\u6267\u884c\u4e00\u6b21\u8ba1\u7b97\u9700\u8981\u7684\u7b97\u5b50\u5373\u6570\u636e\uff0c\u8fd9\u4e9b\u8ba1\u7b97\u6309\u7167\u7ebf\u6027\u7684\u65b9\u5f0f\u8fdb\u884c\u6392\u5e8f\uff0c\u7136\u540e\u88ab\u8f6c\u6362\u4e3aCUDA kernel\u7684\u961f\u5217\uff0c\u6309\u7167FIFO\u7684\u987a\u5e8f\u88ab\u6267\u884c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u662f\u5f02\u6b65\u7684\uff0c\u80fd\u591f\u5145\u5206\u4f7fGPU\u7684\u8ba1\u7b97\u8fbe\u5230\u9971\u548c\uff0c\u5373\u4fbf\u662f\u5728Python\u8fd9\u6837\u7684\u89e3\u91ca\u6027\u8bed\u8a00\u4e2d\u4e5f\u53ef\u4ee5\u5f97\u5230\u975e\u5e38\u9ad8\u7684\u6027\u80fd\uff0c\u56e0\u4e3a\u771f\u6b63\u9700\u8981\u8bdd\u65f6\u95f4\u7684\u8ba1\u7b97\u90fd\u662fCUDA\u7f16\u8bd1\u7684\uff0c\u800cPython\u53ea\u8d1f\u8d23\u63a7\u5236\u903b\u8f91\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Custom caching tensor allocator")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f60\u77e5\u4e0d\u77e5\u9053\u4e3b\u6d41\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6pytorch\u662f\u6309\u7167\u7740Haskell typeclass SML module\u7684\u6a21\u6837\u67b6\u6784\u7684\uff0cPytorch\u4e3bmaintainer\u5c31\u662f\u4e00\u4e2aHaskell\u9ad8\u624b\uff0cPytorch\u8584\u7eb1Tensorflow\u5c31\u662fPL\u8584\u7eb1System\u7684\u4e00\u4e2a\u7edd\u4f73\u4f8b\u5b50\uff1f"),(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u5706\u89d2\u9a91\u58eb\u9b54\u7406\u6c99\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/21410150/answer/2740843224"},"https://www.zhihu.com/question/21410150/answer/2740843224"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("h3",{id:"735-oneflow"},"7.3.5 OneFlow"),(0,n.kt)("p",null,"Deep learning frameworks such as TensorFlow and PyTorch provide a productive interface for expressing and training a deep neural network (DNN) model on a single device or using data parallelism. Still, they may not be flexible or efficient enough in training emerging large models on distributed devices, which require more sophisticated parallelism beyond data parallelism. Plugins or wrappers have been developed to strengthen these frameworks for model or pipeline parallelism, but they complicate the usage and implementation of distributed deep learning. Aiming at a simple, neat redesign of distributed deep learning frameworks for various paral- lelism paradigms, we present ",(0,n.kt)("em",{parentName:"p"},"OneFlow"),", a novel distributed training framework based on an ",(0,n.kt)("em",{parentName:"p"},"SBP")," (",(0,n.kt)("em",{parentName:"p"},"split"),", ",(0,n.kt)("em",{parentName:"p"},"broadcast")," and ",(0,n.kt)("em",{parentName:"p"},"partial-value"),") abstraction and the actor model. ",(0,n.kt)("em",{parentName:"p"},"SBP")," enables much easier programming of data parallelism and model parallelism than existing frameworks, and the actor model provides a succinct runtime mechanism to manage the complex dependencies imposed by resource constraints, data movement and computation in dis- tributed deep learning."),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u601d\u8def\uff0c\u662f\u6839\u636e\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\uff0c\u9759\u6001\u5730\u63a8\u5bfc\u51fa\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u7136\u540e\u5229\u7528Actor\u6a21\u578b\uff0c\u628a\u6bcf\u4e2a\u8282\u70b9\u5f53\u505a\u4e00\u4e2aActor\uff0c\u901a\u8fc7 \u4f9d\u8d56\u5173\u7cfb\u6765\u51b3\u5b9a\u8ba1\u7b97\u987a\u5e8f\uff0c\u901a\u8fc7\u8ba1\u7b97\u56fe\u8282\u70b9\u5185\u90e8\u7684\u72b6\u6001\u6765\u7ba1\u7406Actor\u7684\u8ba1\u7b97\u3002Actor\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u7684\u662f\u5bf9\u5e94\u8282\u70b9\u7684\u72b6\u6001\uff0c\u5982\u679c\u4e00\u4e2a\u8ba1\u7b97\u8282\u70b9\u7684\u4e0a\u6e38\u5df2\u7ecf\u8ba1\u7b97\u5b8c\u6bd5\uff0c\u5219\u5f53\u524dActor\u8fdb\u884c\u6267\u884c\u72b6\u6001\uff0c\u53ef\u4ee5\u88ab\u7a7a\u95f2\u7684\u8ba1\u7b97\u673a\u8fdb\u884c\u8ba1\u7b97\u3002\u6b64\u5916\u5728\u8ba1\u7b97\u4e00\u4e2a\u8282\u70b9\u4e4b\u524d\uff0c\u5982\u679c\u6d89\u53ca\u6570\u636e\u9700\u8981\u5904\u7406\u5982\u62f7\u8d1d\u7684\uff0c\u5219\u6709\u4e13\u95e8\u5904\u7406\u6570\u636e\u62f7\u8d1d\u7684Actor\u4f1a\u8fdb\u884c\u5904\u7406\u3002"),(0,n.kt)("p",null,"OneFlow\u7684\u6838\u5fc3\u8fd8\u662f\u56e0\u4e3a\u9759\u6001\u7684\u8ba1\u7b97\u56fe\u53ef\u4ee5\u5b8c\u6574\u63a8\u7b97\u51fa\u6240\u6709\u8282\u70b9\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7136\u540e\u53ef\u4ee5\u4f9d\u636e\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\u8c03\u5ea6\u3002"),(0,n.kt)("p",null,"RealityIS\u76f8\u5bf9\u4e8eOneFlow\u6709\u4ee5\u4e0b\u4e00\u4e9b\u533a\u522b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8282\u70b9\u7c7b\u578b\u662f\u56fa\u5b9a\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u6709\u5f88\u591a\u4fe1\u606f\u5e2e\u52a9\u63a8\u65ad\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u548c\u72b6\u6001\uff0c\u800cRealityIS\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e0d\u80fd\u4e8b\u5148\u63a8\u65ad\u51fa\u6765\u7684\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u65b9\u6cd5\u53c2\u6570\u90fd\u4e0d\u4e00\u6837\uff0c\u6ca1\u6cd5\u8fdb\u884c\u8fd9\u6837\u7684\u5168\u5c40\u63a8\u65ad\uff0c\u6240\u4ee5\u5b83\u53ea\u80fd\u52a8\u6001\u8ba1\u7b97\uff0c\u4e0d\u80fd\u6709\u4e00\u4e2a\u5df2\u77e5\u7684\u4f9d\u8d56\u5173\u7cfb\u6765\u5168\u5c40\u6307\u5bfc"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u8282\u70b9\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u662f\u4e8b\u5148\u9759\u6001\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u800c\u7531\u4e8e\u7f3a\u4e4f\u4e0a\u8ff0\u90a3\u6837\u7684\u7c7b\u578b\u4fe1\u606f\uff0cRealityIS\u7684\u4f9d\u8d56\u987a\u5e8f\u53ea\u80fd\u8fd0\u884c\u65f6\u52a8\u6001\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"\u8ba1\u7b97\u56fe\u7684\u8ba1\u7b97\u4e0d\u662f\u5b9e\u65f6\u7684\uff0c\u5b83\u662f\u4e00\u6b21\u6027\u7684\u8ba1\u7b97\uff0c\u56e0\u6b64Actor\u4e4b\u95f4\u901a\u8fc7\u6d88\u606f\u534f\u8c03\u987a\u5e8f\u6240\u5e26\u6765\u7684\u5f00\u9500\u5e76\u65e0\u592a\u5927\u5f71\u54cd\uff0c\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u6a21\u578b\u7279\u522b\u5927\uff0c\u8fd9\u79cd\u8c03\u5ea6\u5bf9\u4e8e\u5b9e\u65f6\u7cfb\u7edf\u7684\u5f00\u9500\u662f\u5f88\u5927\u7684"),(0,n.kt)("li",{parentName:"ul"},"OneFlow\u4ee5\u8282\u70b9\u5728\u8ba1\u7b97\u5355\u5143\uff0c\u800cRealityIS\u4e2d\u5bf9\u8c61\u6216\u8005\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u4f1a\u66f4\u52a0\u590d\u6742\uff0c\u800c\u4e14\u8fd8\u8981\u8003\u8651UserID\u5e26\u6765\u7684\u4fe1\u606f\u7ef4\u5ea6\u5bf9\u5e94\u7684\u590d\u6742\u5ea6\uff0c\u5982\u679c\u5355\u7eaf\u4ee5\u903b\u8f91\u8ba1\u7b97\u5355\u5143\u5982\u7ec4\u4ef6\u4e3a\u4e00\u4e2aActor\uff0c\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u72b6\u6001\u540c\u6b65\u548c\u6d88\u606f\u901a\u4fe1\u7684\u95ee\u9898\u3002")),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u5bf9\u4e8e\u4e24\u8005\u800c\u8a00\uff0c\u6838\u5fc3\u7684\u95ee\u9898\u5747\u662f\u8ba1\u7b97\u987a\u5e8f\u6216\u8005\u8bf4\u8ba1\u7b97\u5355\u5143\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u7684\u95ee\u9898\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u6a21\u578b\u4e2d\uff0c\u6574\u4e2a\u7a0b\u5e8f\u7684\u8ba1\u7b97\u987a\u5e8f\u5b8c\u5168\u5185\u7f6e\u4e8e\u4ee3\u7801\u5185\u90e8"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8ba1\u7b97\u56fe\u4e2d\uff0c\u8ba1\u7b97\u987a\u5e8f\u5176\u5b9e\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u7c7b\u4f3c\u4e8e\u4e0a\u8ff0\u9762\u5411\u5bf9\u8c61\u8ba1\u7b97\u6a21\u578b\uff0cOneFlow\u53ea\u662f\u628a\u8fd9\u79cd\u4f9d\u8d56\u987a\u5e8f\u8f6c\u6362\u4e3a\u6570\u636e\uff0c\u6765\u6307\u5bfc\u5206\u5e03\u5f0f\u8ba1\u7b97\u800c\u5df2\u3002\u800c\u4e3a\u4ec0\u4e48\u5b83\u80fd\u591f\u63d0\u53d6\u8fd9\u79cd\u987a\u5e8f\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u56fe\u5c06\u6570\u636e\u548c\u8ba1\u7b97\u5206\u79bb\uff0c\u6570\u636e\u5145\u5f53\u4e86\u8ba1\u7b97\u4e4b\u95f4\u7684\u8fde\u63a5\uff0c\u5e76\u4e14\u5929\u7136\u5212\u5206\u6210\u4e0d\u540c\u7684\u7ec6\u5206\u51e0\u70b9\uff0c\u56e0\u6b64\u81ea\u7136\u5bb9\u6613\u5c06\u8fd9\u79cd\u987a\u5e8f\u6570\u636e\u62bd\u53d6\u51fa\u6765\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u6e38\u620f\u67b6\u6784\u4e2d\uff0c\u8fd9\u4e2a\u4e8b\u60c5\u4f1a\u6bd4\u8f83\u590d\u6742\u70b9")),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\uff0c\u6e38\u620f\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\u80af\u5b9a\u662f\u53ef\u4ee5\u63a8\u5bfc\u51fa\u6765\u7684\uff0c\u4f46\u8fd9\u6709\u4e2a\u91cd\u8981\u7684\u524d\u63d0\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u90a3\u5c31\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u9700\u8981\u975e\u5e38\u660e\u786e"),"\uff0c\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u5176\u5b9e\u5c31\u5145\u5f53\u4e86\u8fd9\u6837\u4e00\u4e2a\u660e\u786e\u7684\u5173\u7cfb\uff0c\u8fd9\u79cd\u8f93\u5165\u8f93\u5165\u5173\u7cfb\u51b3\u5b9a\u4e86\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002\u7136\u800c\u4f20\u7edf\u6e38\u620f\u4e2d\uff0c\u5047\u8bbe\u4e24\u4e2a\u7ec4\u4ef6A\u548cB\uff0cA\u5bf9\u67d0\u4e2a\u6570\u636e\u5c5e\u6027\u8fdb\u884c\u5199\u5165\uff0c\u7136\u540eB\u5bf9A\u5199\u4e66\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u53d6\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u63a8\u65ad\u51faA\u5e94\u8be5\u5148\u4e8eB\u6267\u884c\u3002\u7136\u540e\u6211\u4eec\u5728\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u4ec5\u4ec5\u628a\u53d8\u91cf\u5f53\u4e2d\u4e00\u4e2a\u53ef\u8bfb\u53ef\u5199\u7684\u666e\u901a\u53d8\u91cf\uff0c\u56e0\u6b64\u8fd0\u884c\u65f6\u6216\u8005\u7f16\u8bd1\u5668\u5e76\u4e0d\u80fd\u63a8\u65ad\u51fa\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u53ea\u8bfb\u64cd\u4f5c\uff0c\u800c\u54ea\u4e2a\u7ec4\u4ef6\u5bf9\u8be5\u5c5e\u6027\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\u56e0\u6b64\u7cfb\u7edf\u6ca1\u6cd5\u63a8\u65ad\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u4e00\u822c\u6307\u91c7\u53d6\u4e00\u79cd\u6bd4\u8f83\u91ce\u86ee\u7684\u65b9\u5f0f\uff1a\u5373\u5168\u5c40\u5730\u7ed9\u7ec4\u4ef6\u52a0\u4e00\u4e2a\u8ba1\u7b97\u987a\u5e8f\uff0c\u6216\u8005\u8bf4\u6307\u5b9a\u67d0\u4e2a\u7ec4\u4ef6\u5bf9\u5176\u4ed6\u7ec4\u4ef6\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u65b9\u6cd5\u663e\u7136\u4e0d\u591f\u9c81\u68d2\uff0c\u56e0\u4e3a\u540c\u6837\u4e00\u4e2a\u7ec4\u4ef6\u5728\u4e0d\u540c\u7684\u5bf9\u8c61\u4e2d\u53ef\u80fd\u9700\u8981\u5b58\u5728\u4e0d\u540c\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u7279\u522b\u662f\u5f53\u4f7f\u7528\u4e00\u4e9b\u6a21\u5f0f \u5339\u914d\u7684\u65b9\u5f0f\u7684\u65f6\u5019\uff0c\u7ec4\u4ef6\u7684\u987a\u5e8f\u66f4\u662f\u4e0d\u786e\u5b9a\u7684\u3002"),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0cRealityIS\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u9700\u8981\u660e\u786e\u5b9a\u4e49\u8bfb\u4e0e\u5199\u7684\u5173\u7cfb\uff0c\u8fd9\u5176\u5b9e\u5c31\u662f\u95f4\u63a5\u5730\u5b9a\u4e49\u6e05\u695a\u4e86\u8ba1\u7b97\u56fe\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u8fdb\u884c\u4f9d\u8d56\u987a\u5e8f\u7684\u63a8\u65ad\u3002"),(0,n.kt)("h3",{id:"736-preda"},"7.3.6 PREDA"),(0,n.kt)("p",null,"\u53ef\u4ee5\u7f16\u8bd1\u5230Web assembly\uff0c\u8ba4\u4e3a\u592a\u5305\u7f57\u4e07\u8c61\uff0c\u533a\u5757\u94fe\u662f\u975e\u5e38\u7b80\u5355\u7684\uff0c\u4e0d\u9700\u8981\u90a3\u4e48\u591a\u7279\u6027\u3001\u8d44\u6e90\u7ba1\u7406\u6bd4\u8f83\u7b80\u5355\uff0c\u4e0d\u9700\u8981GC\uff0c\u6267\u884c\u5b8c\u6240\u6709\u4e1c\u897f\u5168\u90e8\u5220\u6389\uff0c\u5e0c\u671b\u6709\u66f4\u8f7b\u91cf\u7ea7\u7684\u4e1c\u897f\u3002"),(0,n.kt)("h3",{id:"737-web-assembly"},"7.3.7 Web Assembly"),(0,n.kt)("p",null,"rust\u5728web assembly\u65b9\u9762\u8d70\u5728\u524d\u9762"),(0,n.kt)("p",null,"\u662f\u4e00\u5957\u65b0\u7684\u6307\u4ee4\u96c6\u3002"),(0,n.kt)("p",null,"Rust\u5f00\u53d1\u8005\u53d7\u5230\u7684\u7ea6\u675f\u6bd4\u8f83\u5927\uff0c\u6bd4\u5982\u7c7b\u578b\u7cfb\u7edf\u3002\u79ef\u6781\u62e5\u62b1\u4e00\u4e9b\u5b66\u672f\u7684\u6210\u679c\uff0cRust\u7684\u6210\u679c\u4ee3\u8868\u7f16\u7a0b\u8bed\u8a00\u7406\u8bba\u7684\u6210\u529f\u3002"),(0,n.kt)("p",null,"\u8bed\u8a00\u7684\u52a8\u673a\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u89e3\u51b3\u7279\u5b9a\u7684\u95ee\u9898\uff0cjava\uff0cerlang\uff0crust"),(0,n.kt)("li",{parentName:"ul"},"\u5e73\u53f0\u578b\uff0cC#\uff0cSwift\uff0cGo\uff0c\u751f\u6001\uff0c\u672a\u6765\u6280\u672f\u6f14\u8fdb"),(0,n.kt)("li",{parentName:"ul"},"\u5174\u8da3\u3001\u5b66\u672f\u7814\u7a76\u578b\uff0cScala\uff0cHaskell\u7b49")),(0,n.kt)("h2",{id:"74-others"},"7.4 Others"),(0,n.kt)("h3",{id:"741-\u795e\u7ecf\u7f51\u7edc"},"7.4.1 \u795e\u7ecf\u7f51\u7edc"),(0,n.kt)("h3",{id:"742-\u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"},"7.4.2 \u5f00\u6e90\u4ee3\u7801\u7ba1\u7406"),(0,n.kt)("h4",{id:"7421-pip"},"7.4.2.1 pip"),(0,n.kt)("h4",{id:"7422-rust"},"7.4.2.2 Rust"),(0,n.kt)("h3",{id:"743-\u533a\u5757\u94fenft\u865a\u62df\u8d27\u5e01"},"7.4.3 \u533a\u5757\u94fe/NFT/\u865a\u62df\u8d27\u5e01"),(0,n.kt)("p",null,"NFTCN/Bigverse/Opensea "),(0,n.kt)("p",null,"\u5f53\u524d\u7684NFT\u6570\u5b57\u8d44\u4ea7\u5e02\u573a\u4e3b\u8981\u8fd8\u662f\u504f2D"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"NFT\u8d44\u4ea7\u751f\u6210\u672c\u8eab\u5f88\u7b80\u5355\uff0c\u56e0\u6b64\u4e5f\u5bb9\u6613\u590d\u5236\u3001\u5c71\u5be8"),(0,n.kt)("li",{parentName:"ul"},"\u521b\u4f5c\u65b9\u5f0f\u7b80\u5355\uff0c\u5927\u591a\u6570\u751a\u81f3\u90fd\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u56fe\u50cf\u5904\u7406\u53ca\u98ce\u683c\u5316\u5de5\u5177\u6216\u8005\u7b80\u5355\u7684\u7f16\u8f91\uff0c\u800c\u5f00\u53d13D\u7684\u5185\u5bb9\u751f\u6210\u8981\u96be\u5f97\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5e02\u573a\uff0c\u65e0\u5bf9\u5185\u5bb9\u8fdb\u884c\u4ef7\u503c\u53d1\u73b0\u548c\u4ef7\u503c\u589e\u503c\u7684\u65b9\u5f0f\u548c\u7a7a\u95f4\uff0c\u5f53\u524d\u4e3b\u8981\u7684\u673a\u5236\u662f\u4f4e\u4e70\u9ad8\u4e70\uff0c\u7a7a\u7b49\u7740\u589e\u503c\uff0c\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u6240\u8c13\u7684\u4e00\u4e9b\u4f30\u503c\u7684\u673a\u5236\u548c\u670d\u52a1\u6765\u5224\u5b9a\u4ef7\u503c\uff0c\u4f46\u5b9e\u9645\u4e0a\u73b0\u5b9e\u751f\u6d3b\u4e2d\u4e00\u4e2a\u827a\u672f\u54c1\u7684\u4ef7\u503c\u6709\u65f6\u662f\u901a\u8fc7\u4eba\u4eec\u7684\u4e86\u89e3\u3001\u5b66\u4e60\u3001\u7ed3\u6784\u3001\u7814\u7a76\u3001\u80cc\u540e\u7684\u6587\u5316\u4ef7\u503c\u548c\u793e\u4f1a\u4ef7\u503c\u7684\u53d1\u6398\u548c\u6f14\u8fdb\u540e\uff0c\u624d\u4f1a\u6162\u6162\u50ac\u751f\u4e00\u4e2a\u4f5c\u54c1\u7684\u4ef7\u503c\uff0c\u800c\u4e00\u4e2a\u5355\u5355\u7684\u5e02\u573a\u5e76\u4e0d\u8db3\u4ee5\u5f62\u6210\u8fd9\u6837\u7684\u673a\u5236\uff0c\u8fd9\u6837\u4f5c\u54c1\u9700\u8981\u4e00\u79cd\u80fd\u591f\u66f4\u751f\u6d3b\u5316\u7684\u5448\u73b0\u673a\u5236\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5217\u8868\uff0c\u5b83\u5e94\u8be5\u80fd\u591f\u8ba9\u66f4\u591a\u7684\u4eba\u5bf9\u5b83\u6709\u66f4\u591a\u7ef4\u5ea6\u3001\u66f4\u591a\u673a\u4f1a\u7684\u518d\u8ba4\u77e5\uff0c\u7ed3\u6784\u3001\u89e3\u8bfb\u3001\u6b23\u8d4f\u3001\u89c2\u5bdf\u3001\u4f53\u9a8c\uff0c\u8fd9\u6837\u624d\u6709\u673a\u4f1a\u53bb\u6316\u6398\u5b83\u7684\u4ef7\u503c\uff0c\u5b83\u7edd\u4e0d\u662f\u4f60\u4e70\u6765\u653e\u5728\u90a3\u91cc\u4ed6\u5c31\u81ea\u5df1\u4f1a\u589e\u503c"),(0,n.kt)("li",{parentName:"ul"},"\u4ec5\u4ec5\u4e00\u4e2a\u5e02\u573a\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u72ec\u7acb\u76843D\u6216\u80053D\u7684\u5f62\u5f0f\u5c55\u73b0\uff0c\u7f3a\u4e4f\u4e0e\u4e4b\u76f8\u5173\u7684\u73af\u5883\uff0c\u7279\u522b\u662f3D\u4f5c\u54c1\u5f80\u5f80\u4e0d\u662f\u5355\u4e2a\u7269\u4f53\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u7684\u8868\u8fbe\u5f80\u5f80\u548c\u73af\u5883\u7b49\u56e0\u7d20\u6709\u5173\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684\u4f5c\u54c1\uff0c\u65e2\u5bb9\u6613\u88ab\u590d\u5236\u548c\u4e0b\u8f7d\uff0c\u53c8\u7f3a\u4e4f\u8868\u8fbe\u80fd\u529b")),(0,n.kt)("p",null,"\u62df\u5a32\u76843D\u521b\u4f5c\u66f4\u96be\uff0c\u5e76\u4e14\u5b83\u7684\u5185\u5bb9\u4e0d\u662f\u5355\u4e2a\u4e3b\u4f53\uff0c\u800c\u662f\u878d\u5165\u5728\u73af\u5883\u4e2d\uff0c\u751a\u81f3\u548c\u5176\u4ed6\u5185\u5bb9\u4e00\u8d77\u5448\u73b0\uff0c\u73af\u5883\u751a\u81f3\u7a0b\u5e8f\u90fd\u662f\u4e00\u90e8\u5206\uff0c\u5728\u8131\u79bb\u8fd9\u4e2a\u73af\u5883\uff0c\u4ed6\u751a\u81f3\u90fd\u65e0\u6cd5\u8fd0\u884c\uff0c\u88ab\u590d\u5236\u7684\u98ce\u9669\u964d\u4f4e\uff0c\u540c\u65f6\u5b83\u5e76\u4e0d\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u5e02\u573a\uff0c\u5b83\u66f4\u591a\u662f\u5904\u4e8e\u4e00\u79cd\u88ab\u6b23\u8d4f\u7684\u793e\u4f1a\u72b6\u6001\uff0c\u5b83\u7684\u4ef7\u503c\u66f4\u5bb9\u6613\u88ab\u89e3\u8bfb\u548c\u7ed3\u6784\uff0c\u878d\u5165\u771f\u6b63\u7684\u4ef7\u503c\u8bc4\u5224\u4f53\u7cfb\u548c\u65b9\u5f0f"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"3D\u5185\u5bb9\u4e0d\u9002\u5408\u4ea4\u6613")),(0,n.kt)("p",null,"\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u50cf\u827a\u672f\uff0c\u66f4\u591a\u88ab\u6536\u85cf\uff0c\u4e92\u52a8\u5185\u5bb9\u662f\u52a8\u6001\u66f4\u65b0\u7684\uff0c\u5b83\u4e5f\u4e0e\u7279\u5b9a\u7684\u8fd0\u884c\u65f6\u73af\u5883\u548c\u64cd\u4f5c\u7cfb\u7edf\u9ad8\u5ea6\u8026\u5408\uff0c\u4ed6\u8fd8\u4f1a\u8fdb\u884c\u4e0d\u65ad\u66f4\u65b0\uff0c\u4fee\u590dbug\uff0c\u56e0\u6b64\u4ed6\u66f4\u9002\u5408\u6309\u73a9\u5bb6\u6536\u8d39\uff0c\u6309\u670d\u52a1\u6536\u8d39\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u4e00\u6b21\u6027\u7684\u4ea7\u54c1\u4e70\u5356\uff0c\u5f53\u7136\u4ec5\u4f5c\u4e3a\u7eaf\u8d44\u4ea7\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u4e00\u6837"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u865a\u62df\u5730\u5757\uff1a")),(0,n.kt)("p",null,"\u865a\u62df\u5730\u5757\u4e5f\u662f\u6ca1\u6709\u597d\u7684\u4ef7\u503c\u652f\u6491\uff0c\u5e76\u4e0d\u662f\u4efb\u4f55\u4e00\u4e2a\u865a\u62df\u7a7a\u95f4\u5f04\u4e00\u4e2a\u552f\u4e00\u5730\u5757\u5212\u5206\u7684\u673a\u5236\u5c31\u53ef\u4ee5\uff0c\u90a3\u6837\u7684\u8bdd\u5c31\u592a\u7b80\u5355\u4e86\u592a\u5bb9\u6613\u4e86\uff0c\u73b0\u5b9e\u5f88\u591a\u5143\u5b87\u5b99\u7684\u6982\u5ff5\u548c\u4ea7\u54c1\u7ed9\u4eba\u7684\u611f\u89c9\u5c31\u662f\u592a\u7b80\u5355\u592a\u5bb9\u6613\u4e86\uff0c\u8fd9\u662f\u4e0d\u7b26\u5408\u903b\u8f91\u7684\uff0c\u5176\u6839\u672c\u539f\u56e0\u662f\u6ca1\u6709\u4ef7\u503c\u652f\u6491\uff0c\u6ca1\u6709\u5171\u540c\u7684\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u6bd4\u5982\u5982\u679c\u5728\u8d5b\u5c14\u8fbe\u91cc\u9762\u5efa\u7acb\u865a\u62df\u5730\u5757\uff0c\u90a3\u80af\u5b9a\u6709\u4ef7\u503c\uff0c\u56e0\u4e3a\u4ed6\u6709\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\uff0c\u4f46\u4f60\u968f\u4fbf\u642d\u5efa\u4e00\u4e2a\u5730\u5757\uff0c\u4ed6\u5e76\u4e0d\u5177\u5907\u5171\u540c\u8ba4\u540c\u4ef7\u503c\uff0c\u4ec5\u4ec5\u662f\u50cf\u8d4c\u535a\u4e00\u6837\u5c11\u90e8\u4efd\u4eba\u7684\u7092\u4f5c\uff0c\u5927\u90e8\u5206\u4eba\u5e76\u4e0d\u8ba4\u53ef\u8fd9\u4e9b\u4ef7\u503c"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u600e\u6837\u521b\u5efa\u4ef7\u503c\u8ba4\u540c\u57fa\u7840\u662f\u6700\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u4ef7\u503c\u521b\u9020\u548c\u8ba4\u540c\u662f\u5f88\u96be\u7684\uff0c\u4e0d\u7136\u5c31\u7f16\u7a0b\u865a\u62df\u8d27\u5e01\u4e00\u6837\u4e00\u79cd\u7eaf\u673a\u5236\uff0c\u6ca1\u6709\u4ef7\u503c\u62c5\u4fdd"),(0,n.kt)("p",null,"\u4ef7\u503c\u8ba4\u540c\u9700\u8981\u6240\u6709\u4eba\u80fd\u591f\u53c2\u4e0e\uff0c\u4ee5\u67d0\u79cd\u65b9\u5f0f\uff0c\u624d\u80fd\u5f62\u6210\u4ef7\u503c\u8ba4\u540c\uff0c\u8fd9\u79cd\u53c2\u4e0e\u6216\u8005\u4ef7\u503c\u8ba4\u540c\u5e94\u8be5\u662f\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u9700\u8981\u4e00\u79cd\u5b9e\u9645\u7684\u53c2\u4e0e\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u50cf\u7092\u623f\u4e00\u6837\uff0c\u5c31\u662f\u8bf4\u5b83\u9700\u8981\u5177\u5907\u771f\u6b63\u7684\u4ef7\u503c\uff0c\u4e0d\u7ba1\u662f\u6e38\u620f\u5e26\u6765\u7cbe\u795e\u4e0a\u7684\uff0c\u6216\u8005\u5b83\u4f20\u8fbe\u4e86\u67d0\u79cd\u77e5\u8bc6\u6216\u8005\u6587\u5316\u3002"),(0,n.kt)("p",null,"\u4f20\u7edf\u6570\u5b57\u5185\u5bb9\u5f97\u8d27\u5e01\u5316\u8fd8\u5b58\u5728\u4e00\u4e2a\u91cd\u8981\u95ee\u9898\uff0c\u5b83\u9700\u8981\u4e00\u79cd\u62c5\u4fdd\u673a\u5236\uff0c\u4e0d\u50cf\u5b9e\u7269\u4e00\u6837\u7269\u6743\u662f\u552f\u4e00\u7684\u660e\u786e\u7684\uff0c\u5f53\u7136\u8fd9\u4e5f\u662f\u6709\u56fd\u5bb6\u673a\u6784\u62c5\u4fdd\u8d1f\u8d23\u7269\u6743\u7ba1\u7406\uff0c\u865a\u62df\u8d27\u5e01\u6216\u8005\u533a\u5757\u94fe\u867d\u7136\u5728\u673a\u5236\u4e0a\u80fd\u64cd\u4f5c\u4e00\u4e2a\u6570\u5b57\u5185\u5bb9\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u662f\u8fd9\u4e2a\u6570\u5b57\u5185\u5bb9\u672c\u8eab\u662f\u53ef\u4ee5\u590d\u5236\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4f5c\u8005\u53ef\u4ee5\u5728\u4e0d\u540c\u7684\u6570\u5b57\u5e73\u53f0\u53d1\u5e03\uff0c\u7406\u8bba\u4e0a\uff0c\u53ea\u6709\u5e73\u53f0\u81ea\u8eab\u53ef\u4ee5\u4fdd\u8bc1\u7269\u6743\u552f\u4e00\uff0c\u5e73\u53f0\u5fc5\u987b\u4e0e\u4f5c\u8005\u8fbe\u6210\u5b9e\u7269\u6216\u8005\u539f\u59cb\u4f5c\u54c1\u7684\u7269\u6743\u534f\u8bae\uff0c\u6bd4\u5982\u4f5c\u8005\u4e0d\u80fd\u5728\u5176\u4ed6\u5e73\u53f0\u518d\u4f7f\u7528\u6b21\u4f5c\u54c1\uff0c\u6216\u8005\u4f5c\u8005\u9500\u6bc1\u539f\u59cb\u7535\u5b50\u7248\uff0c\u8fd9\u6837\u4fdd\u8bc1\u8be5\u5e73\u53f0\u7684\u7269\u6743\u552f\u4e00\uff0c\u4f46\u8fd9\u4e9b\u673a\u5236\u90fd\u4f9d\u8d56\u4e8e\u771f\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u4fdd\u969c\uff0c\u5b9e\u9645\u4e0a\u865a\u62df\u8d27\u5e01\u53ea\u8981\u662f\u8ddf\u73b0\u5b9e\u4e16\u754c\u5173\u8054\u7684\uff0c\u5b83\u7684\u7269\u6743\u90fd\u9700\u8981\u73b0\u5b9e\u4e16\u754c\u7684\u6cd5\u5f8b\u7269\u6743\u4fdd\u969c"),(0,n.kt)("p",null,"\u9664\u975e\u662f\u5b8c\u5168\u865a\u62df\u8d27\u5e01\uff0c\u4ed6\u4e0d\u9700\u8981\u6620\u5c04\u5b9e\u7269\uff0c\u8d27\u5e01\u7684\u53d1\u884c\u672c\u8eab\u5c31\u662f\u57fa\u4e8e\u533a\u5757\u94fe\u5927\u578b\u7684\uff0c\u6240\u4ee5\u5b83\u672c\u8eab\u5c31\u6709\u7269\u6743\u4fdd\u8bc1\u4e86\uff0c\u4f46\u662f\u8fd9\u79cd\u4e5f\u662f\u6ca1\u6709\u6cd5\u5f8b\u4fdd\u969c"),(0,n.kt)("p",null,"\u62df\u5a32\u7684\u6570\u5b57\u5185\u5bb9\u662f\u7531\u7528\u6237\u521b\u5efa\u7684\uff0c\u6216\u8005\u5927\u90e8\u5206\uff0c\u867d\u7136\u7528\u6237\u53ef\u4ee5\u5bfc\u5165\u4e00\u90e8\u5206\u5df2\u6709\u8d44\u6e90\uff0c\u8fd9\u90e8\u5206\u65e0\u6cd5\u63a7\u5236\u7269\u6743\u7684\u552f\u4e00\u6027\uff0c\u9700\u8981\u501f\u52a9\u73b0\u5b9e\u4e16\u754c\u7684\u7248\u6743\u673a\u5236\uff0c\u4f46\u662f\u5b83\u7684\u5927\u90e8\u5206\u5185\u5bb9\u662f\u7528\u6237\u57fa\u4e8e\u62df\u5a32\u5e73\u53f0\u521b\u5efa\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u5b83\u7684\u90a3\u4e2a\u5185\u5bb9\u5728\u521b\u5efa\u65f6\u5df2\u7ecf\u57fa\u4e8e\u533a\u5757\u94fe\u6280\u672f\u5f97\u5230\u7269\u6743\u4fdd\u969c"),(0,n.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\uff0c\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u4e0d\u50cf\u4f20\u7edf\u7684\u56fe\u7247\u6216\u8005\u89c6\u9891\uff0c\u5176\u5f88\u5bb9\u6613\u88ab\u590d\u5236\u4fdd\u5b58\uff0c\u4e5f\u4e0d\u50cf\u4f20\u7edf\u76843D\u5185\u5bb9\u4e00\u6837\u5bb9\u6613\u88ab\u4e0b\u8f7d\uff0c\u5b83\u672c\u8eab\u662f\u4e00\u79cd\u79c1\u6709\u683c\u5f0f\uff0c\u4ed6\u5fc5\u987b\u501f\u52a9\u5e73\u53f0\u624d\u80fd\u89e3\u6790\uff0c\u5b83\u7684\u5185\u5bb9\u4e5f\u5168\u90e8\u5b58\u50a8\u5728\u4e91\u7aef\uff0c\u8fd9\u4f7f\u5f97\u5b83\u7684\u7269\u6743\u80fd\u591f\u8fdb\u4e00\u6b65\u88ab\u4fdd\u969c\uff1a\u4f60\u53ea\u80fd\u5728\u8fd9\u4e2a\u5e73\u53f0\u624d\u80fd\u4f53\u9a8c\u8fd9\u4e2a\u4f5c\u54c1\uff0c\u4f46\u5728\u8fd9\u4e2a\u5e73\u53f0\u5b83\u662f\u552f\u4e00\u7684\uff0c\u4f60\u4e0d\u80fd\u5c06\u5b83\u590d\u5236\u5230\u5176\u4ed6\u5730\u65b9"),(0,n.kt)("li",{parentName:"ul"},"\u5f53\u7136\u62df\u5a32\u672c\u8eab\u8fd8\u6709\u4e00\u5957\u4ef7\u503c\u8ba4\u540c\u7684\u673a\u5236\uff0c\u5c31\u50cf\u6e38\u620f\u4e00\u6837\uff0c\u4f60\u5fc5\u987b\u8981\u53d1\u6325\u4f60\u7684\u7ecf\u9a8c\u548c\u521b\u9020\u529b\uff0c\u4ed8\u51fa\u65f6\u95f4\u548c\u601d\u8003\u624d\u80fd\u521b\u4f5c\u51fa\u597d\u7684\u4e1c\u897f\uff0c\u800c\u5176\u4ed6\u7528\u6237\u5728\u4f53\u9a8c\u8fc7\u7a0b\u4e2d\u4f53\u9a8c\u5230\u4e86\u4f60\u7684\u6587\u5316\u827a\u672f\u8868\u8fbe\uff0c\u4f60\u7684\u4ef7\u503c\u5e76\u88ab\u8ba4\u540c\uff0c\u7528\u6237\u6709\u4e00\u4e2a\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5546\u54c1\u4e70\u5356\uff0c\u8fd9\u7c7b\u4f3c\u4e8e\u5546\u54c1\u9700\u8981\u4f7f\u7528\u624d\u6709\u4ef7\u503c\uff0c\u8fd9\u4e2a\u4f7f\u7528\u5c31\u662f\u5bf9\u6570\u5b57\u5185\u5bb9\u6587\u5316\u827a\u672f\u8868\u8fbe\u7684\u4f53\u9a8c\uff0c\u4f7f\u7528+\u4ea4\u6613 \u624d\u80fd\u5f62\u6210\u5faa\u73af\uff1a\u4f7f\u7528\u53d1\u73b0\u4ef7\u503c\uff0c\u4fc3\u8fdb\u4ea4\u6613\uff0c\u8fdb\u800c\u4fc3\u8fdb\u4f7f\u7528\u4ef7\u503c\u7684\u521b\u9020"),(0,n.kt)("li",{parentName:"ul"},"\u9759\u60012D\u827a\u672f\u54c1\u5176\u5b9e\u8fd8\u662f\u7eb8\u8d28\u66f4\u73cd\u8d35\uff0c\u65e0\u8bba\u662f\u521b\u4f5c\u7684\u96be\u5ea6\u3001\u4eea\u5f0f\u611f\uff0c\u8fd8\u662f\u4f53\u9a8c\u6b23\u8d4f\u65f6\u7684\u4e13\u6ce8\u548c\u4eea\u5f0f\u611f\uff0c\u5728\u6570\u5b57\u5c4f\u5e55\u4e0a\u770b2D\u827a\u672f\u53d7\u5f88\u591a\u56e0\u7d20\u5f71\u54cd\uff0c\u6bd4\u5982\u53d7\u5c4f\u5e55\u5206\u8fa8\u7387\u3001\u8272\u5f69\u3001\u5c4f\u5e55\u5c3a\u5bf8\u7b49\u56e0\u7d20\u5f71\u54cd\uff0c\u4f463D\u6570\u5b57\u5185\u5bb9\u5219\u5929\u751f\u662f\u865a\u62df\u7684")),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u6280\u672f\u5bfc\u81f4\u7684\u601d\u7ef4\u6709\u65f6\u5019\u5f88\u53d7\u9650\uff0c\u5927\u5bb6\u4f1a\u503e\u5411\u4e8e\u653e\u5927\u8fd9\u9879\u6280\u672f\u7684\u529f\u7528\uff0c\u8ba4\u4e3a\u4e00\u5207\u7686\u53ef\u4ee5\u4f7f\u7528\u533a\u5757\u94fe\uff0c\u56e0\u4e3a\u6240\u6709\u4e8b\u52a1\u672c\u8d28\u4e0a\u90fd\u6d89\u53ca\u7269\u6743\u548c\u4ea4\u6613\uff0c\u4f46\u4ed6\u6709\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6709\u65f6\u5019\u4f1a\u8ba9\u4e00\u4e9b\u4e8b\u60c5\u66f4\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u66f4\u5927\u7684\u95ee\u9898\u4ed6\u53ef\u80fd\u4f1a\u9650\u5236\u6211\u4eec\u7684\u60f3\u8c61\u529b\uff0c\u4f8b\u5982\u6e38\u620f\u7684\u5206\u53d1\u8ddf\u4f20\u7edf\u7684\u4ea4\u6613\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4f20\u7edf\u7684\u4ea4\u6613\u7269\u54c1\u662f\u72ec\u7acb\u7684\uff0c\u6216\u8005\u4e0d\u53ef\u5206\u5272\u7684\uff0c\u4e00\u6b21\u4ea4\u6613\u5bf9\u5e94\u4e00\u4ef6\u5177\u4f53\u7684\u7269\u54c1\uff0c\u4f46\u662f\u6e38\u620f\u7a0b\u5e8f\u901a\u5e38\u662f\u6709\u6301\u7eed\u66f4\u65b0\u7684\uff0c\u5f53\u6e38\u620f\u8fd9\u79cd\u6570\u5b57\u8d44\u4ea7\u53d1\u751f\u53d8\u66f4\uff0c\u4ed6\u7684Token\u4f1a\u53d8\u66f4\u5417\uff0c\u53d8\u66f4\u4e86\u539f\u6765\u7684\u8d2d\u4e70\u5c31\u5931\u6548\u4e86\uff0c\u4f46\u4e0d\u4e0d\u53d8\u66f4\u600e\u6837\u8ba9\u8ba2\u9605\u7684\u7528\u6237\u4eab\u53d7\u5230\u65b0\u589e\u670d\u52a1\uff0c\u6240\u4ee5\u5f53\u524d\u7684NFT\u5e02\u573a\u4e3b\u8981\u805a\u7126\u4e8e\u56fe\u7247\u8fd9\u79cd\u901a\u5e38\u4e0d\u4f1a\u4fee\u6539\u7684\u9759\u6001\u5185\u5bb9\uff0c\u5b83\u672c\u8eab\u4e0d\u662f\u7a0b\u5e8f\uff0c\u800c3D\u6570\u5b57\u5185\u5bb9\u4f1a\u9762\u4e34\u66f4\u590d\u6742\u7684\u53d8\u66f4"),(0,n.kt)("li",{parentName:"ul"},"\u518d\u6bd4\u5982\uff0c\u4f20\u7edf\u7684\u4e66\u753b\u662f\u6536\u85cf\u7684\u6982\u5ff5\u4e3a\u4e3b\uff0c\u5b83\u672c\u8eab\u662f\u7531\u5b9e\u4f53\u552f\u4e00\u6027\u6f14\u53d8\u51fa\u6765\u7684\u65b9\u5f0f\uff0c\u901a\u5e38\u4e00\u4e2a\u753b\u5bb6\u4e0d\u4f1a\u6279\u91cf\u753b\u540c\u4e00\u526f\u753b\uff0c\u4f46\u4ea4\u4e92\u7a0b\u5e8f\u5929\u751f\u5c31\u662f\u6570\u5b57\u51fa\u751f\uff0c\u4ee5\u590d\u5236\u7684\u65b9\u5f0f\u4e3a\u4e3b\uff0c\u4ed6\u8981\u9762\u5bf9\u7684\u662f\u73a9\u5bb6\u6570\u91cf\u7684\u6982\u5ff5\u548c\u6a21\u5f0f\uff0c\u5355\u5e45\u753b\u7684\u6536\u85cf\u4ef7\u683c\u5f88\u9ad8\uff0c\u666e\u901a\u4eba\u6839\u672c\u627f\u53d7\u4e0d\u8d77\uff1b\u800c\u6e38\u620f\u9762\u5411\u7fa4\u4f53\uff0c\u6240\u4ee5\u5355\u4e2a\u590d\u5236\u7684\u6210\u672c\u5f88\u4f4e\uff0c\u8fd9\u624d\u5bfc\u81f4\u666e\u901a\u4eba\u53ef\u4ee5\u53c2\u4e0e\uff0c\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u6a21\u5f0f\uff0c\u524d\u8005\u5bb9\u6613\u5bfc\u81f4\u53cd\u590d\u62cd\u5356\uff0c\u591a\u6b21\u4ea4\u6613\uff0c\u800c\u540e\u8005\u51e0\u4e4e\u53ea\u6709\u4e00\u6b21\u6027\u4ea4\u6613\uff0c\u9632\u7be1\u6539\u7684\u9700\u6c42\u5f88\u4f4e\uff0c\u6211\u4eec\u552f\u4e00\u9700\u8981\u4fdd\u8bc1\u7684\u662f\u7248\u6743\u800c\u975e\u7269\u6743\uff0c\u800c\u533a\u5757\u94fe\u6070\u597d\u4e0d\u64c5\u957f\u7248\u6743"),(0,n.kt)("li",{parentName:"ul"},"3D\u9632\u7be1\u6539\u7684\u9700\u6c42\u8fdc\u4f4e\u4e8e\u56fe\u50cf\uff0c\u56e0\u4e3a\u5b83\u7684\u6570\u5b57\u5185\u5bb9\u7be1\u6539\u4e0d\u4ec5\u4ec5\u610f\u5473\u7740\u6570\u5b57\u5b58\u50a8\u7684\u5185\u5bb9\u53d8\u66f4\uff0c\u800c\u5f88\u6709\u53ef\u80fd\u7be1\u6539\u7684\u7a0b\u5e8f\u65e0\u6cd5\u8fd0\u884c\uff0c\u56e0\u4e3a\u5b83\u7684\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u53ca\u5176\u4ed6\u4e00\u4e9b\u4f9d\u8d56\u5982\u8054\u7f51\u7b49\u9ad8\u5ea6\u76f8\u5173\uff0c\u5bf9\u4e8e\u6e38\u620f\u7a0b\u5e8f\u4eba\u4eec\u4e00\u822c\u7be1\u6539\u7684\u662f\u5916\u6302\u800c\u975e\u7a0b\u5e8f\u672c\u8eab\uff0c\u6211\u4eec\u4e3b\u8981\u4fdd\u62a4\u7684\u662f\u539f\u59cb\u7684\u7248\u6743\uff0c\u800c\u975e\u4ea4\u6613\u8fc7\u7a0b\u4e2d\u7684\u7269\u6743")),(0,n.kt)("h3",{id:"744-rust"},"7.4.4 Rust"),(0,n.kt)("p",null,"\u6e38\u620f\u548c\u56fe\u5f62\u7cfb\u7edf\u76f8\u5bf9\u4f20\u7edf\u5e94\u7528\u67b6\u6784\u5e76\u884c\u8ba1\u7b97\u7684\u884c\u4e3a\u66f4\u591a\uff0c\u8981\u91cd\u70b9\u5173\u6ce8\u8bed\u8a00\u5bf9\u5e76\u884c\u8ba1\u7b97\u7684\u652f\u6301"),(0,n.kt)("p",null,"embark.dev"),(0,n.kt)("p",null,"Rust-gpu"),(0,n.kt)("p",null,"Kajiya "),(0,n.kt)("p",null,"rafx "),(0,n.kt)("p",null,"gamedev.rs"),(0,n.kt)("h3",{id:"745-unity-editorxr-and-scenefusion"},"7.4.5 Unity EditorXR and SceneFusion"),(0,n.kt)("h3",{id:"746-bevyengine"},"7.4.6 BEVYengine"),(0,n.kt)("p",null,"\u57fa\u4e8e\u6570\u636e\u9a71\u52a8\u7684rust\u6e38\u620f\u5f15\u64ce"),(0,n.kt)("h3",{id:"748-magicavoxel"},"7.4.8 magicavoxel"),(0,n.kt)("p",null,"\u611f\u89c9\u4ee5Voxel \u4e3a\u57fa\u7840\u7684\u521b\u5efa\uff0c\u4e00\u662f\u6bd4\u7cbe\u7ec6\u7684\u4e09\u89d2\u5f62\u4fbf\u4e8e\u751f\u6210\uff0c\u800c\u4e14\u7b26\u5408\u7269\u7406\u521b\u5efa\u7684\u65b9\u5f0f"),(0,n.kt)("h3",{id:"749-\u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"},"7.4.9 \u6240\u6709\u5e73\u53f0\u7684\u63d2\u4ef6\u67b6\u6784"),(0,n.kt)("p",null,"Unity unreal engine blender"),(0,n.kt)("h3",{id:"7410-\u4f20\u7edfdcc\u6d41\u7a0b"},"7.4.10 \u4f20\u7edfDCC\u6d41\u7a0b"),(0,n.kt)("h3",{id:"7411-meta-builder-bot"},"7.4.11 Meta Builder bot"),(0,n.kt)("p",null,"\u8bed\u8a00\u6216\u6587\u672c\u81f3\u5c11\u751f\u6210\u8981\u7d20\uff0c\u5982\u679c\u6709\u8bef\u5dee\uff0c\u81f3\u5c11\u5927\u90e8\u5206\u8981\u7d20\uff0c\u7136\u540e\u7528\u6237\u4ea4\u4e92\u4e13\u6ce8\u4e8e\u7cbe\u8c03\uff0c\u6216\u8005\u628a\u8981\u7d20\u548c\u4ea4\u4e92\u5206\u5f00\uff0c\u5728\u7528\u6237\u786e\u5b9a\u8981\u7d20\u4e4b\u540e\uff0c\u76f8\u5f53\u4e8e\u6709\u4e86\u7c7b\u578b\u5148\u9a8c\uff0c\u518d\u786e\u5b9a\u4ea4\u4e92\u6709\u66f4\u591a\u80cc\u666f"),(0,n.kt)("p",null,"\u5728C\u7aef\uff0c\u4ece\u6570\u636e\u5e93\u9009\u62e9\u4f1a\u6bd4\u8f83\u590d\u6742\uff0c\u6240\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u7c7b\u578b\u5212\u5206\uff0c\u5e76\u5177\u6709\u4e00\u5b9a\u7684\u65e0\u6cd5\u5bf9\u5185\u5bb9\u8fdb\u884c\u7ec4\u7ec7\u53d8\u5f97\u975e\u5e38\u91cd\u8981\uff0c\u5927\u5927\u51cf\u5c11\u4ea4\u4e92\u6210\u672c\uff0c\u800c\u5c06\u4ea4\u4e92\u96c6\u4e2d\u4e8e\u5f53\u524d\u573a\u666f\u53ef\u4ee5\u770b\u5230\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u7684\u6309\u94ae\u90fd\u8f6c\u6210\u8bed\u97f3\u6216\u8005\u4e00\u4e9b\u5feb\u6377\u6587\u5b57\uff0c\u77ed\u8bed\uff0c\u5173\u952e\u5b57"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ"},"https://mp.weixin.qq.com/s/JKe-KrInwAzIjb9ndXpJoQ")),(0,n.kt)("h3",{id:"7412-houdini-node-based-workflow"},"7.4.12 Houdini: Node-based Workflow"),(0,n.kt)("p",null,"3\u3001Houdini "),(0,n.kt)("p",null,"\u8981\u50cfHoudini \u4e00\u6837\u628a\u590d\u6742\u7684\u7ed3\u6784\u5b9a\u4e49\uff0c\u65b9\u6cd5\u6784\u9020\uff0c\u6d41\u7a0b\u5b9a\u4e49\uff0c\u53c2\u6570\u8d4b\u503c\uff0c\u7b49\u5168\u90e8\u53bb\u6389\uff0c\u7528\u6237\u53ea\u4e13\u5fc3\u5199\u903b\u8f91\uff0c\u6700\u540e\u6574\u4e2a\u7f16\u7a0b\u662f\u50cfHoudini \u90a3\u6837\u5e72\u51c0\u6574\u6d01\u7684\uff0c\u6ca1\u6709\u4ee3\u7801\u75d5\u8ff9\u7684"),(0,n.kt)("p",null,"Houdini\u7684node\u6ca1\u6709\u53c2\u6570\uff0c\u53ea\u6709\u8282\u70b9\uff0c\u4ed6\u628aoperation\u5206\u6210\u4e00\u4e9b\u7c7b\u578b\uff0c\u90a3\u4e2a\u7c7b\u578b\u4e4b\u95f4\u7684\u53c2\u6570\u4f20\u9012\u662f\u56fa\u5b9a\u7684"),(0,n.kt)("p",null,"Houdini\u7684Node network \u662f\u4e00\u79cd\u8fd0\u884c\u8fc7\u7a0b\uff0c\u4ed6\u65e2\u53ef\u4ee5\u5145\u5f53\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u9759\u6001\u914d\u7f6e\uff0c\u5982\u679c\u6240\u6709\u8282\u70b9\u6ca1\u6709\u5ef6\u8fdf\uff0c\u77ac\u65f6\u6267\u884c\uff0c\u4ed6\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9759\u6001\u8bbe\u7f6e\uff0c\u5982\u679c\u8fd9\u4e9b\u8282\u70b9\u7684\u6307\u4ee4\u80fd\u5728\u4e00\u5e27\u5185\u6267\u884c\u5b8c\uff0c\u8fd9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u4e00\u4e2ausd\u6216\u8005\u5176\u4ed6\u5408\u9002\u6587\u4ef6\u7684\u52a0\u8f7d\u8fc7\u7a0b\uff0c\u76f8\u5f53\u4e8e\u5728\u52a0\u8f7d\u8fc7\u7a0b\u7684\u987a\u5e8f\u6267\u884c\u4e2d\uff0c\u540e\u7eed\u7684\u52a0\u8f7d\u53ef\u80fd\u4f1a\u4fee\u6539\u524d\u9762\u7684\u5c5e\u6027\uff0c\u4f46\u4e0d\u8db3\u7684\u65b9\u9762\u662f\u52a0\u8f7d\u7684\u8fc7\u7a0b\u65e0\u6cd5\u5e76\u884c\u5316\uff0c\u56e0\u4e3aNode network \u662f\u4e00\u4e2a\u987a\u5e8f\u6307\u4ee4"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u52a8\u753b\uff0c\u5982\u679c\u67d0\u4e9b\u8282\u70b9\u7684\u6267\u884c\u9700\u8981\u65f6\u95f4\uff0c\u4ed6\u5c31\u5f62\u6210\u52a8\u753b")),(0,n.kt)("p",null,"Houdini\u7684\u6d41\u7a0b\u548c\u6570\u636e\u9a71\u52a8\u7684\u6d41\u7a0b\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u4e00\u4e2a\u662f\u6267\u884c\u8ba1\u7b97\u7684\u8fc7\u7a0b\uff0c\u4e00\u4e2a\u662f\u5355\u7eaf\u7684\u7ec4\u5408\u914d\u7f6e\uff0c\u8fd9\u662f\u56e0\u4e3aHoudini \u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a\u5185\u5bb9\u751f\u6210\u7684\u8fc7\u7a0b\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u7f16\u8f91\u6001\uff0c\u800cECS\u662f\u8fd0\u884c\u6001"),(0,n.kt)("p",null,"\u5185\u5bb9\u751f\u6210\u8fc7\u7a0b\u4e2d\u600e\u4e48\u5bf9\u4e00\u4e2a\u57fa\u7840\u6a21\u578b\u8fdb\u884c\u53d8\u5f62\uff0c\u5176\u8f93\u5165\u8f93\u51fa\u53c2\u6570\u662f\u786e\u5b9a\u6216\u8005\u53ef\u4ee5\u63a8\u5bfc\u7684\uff0c\u4f46\u662f\u903b\u8f91\u4e4b\u95f4\u7684\u5173\u8054\u5219\u6bd4\u8f83\u590d\u6742\uff0c\u6ca1\u6709\u89c4\u5219\uff0c\u9700\u8981\u5b9a\u4e49\u534f\u8bae"),(0,n.kt)("p",null,"Directable results "),(0,n.kt)("p",null,"\u7531\u4e8e\u6240\u6709\u8bbe\u8ba1\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6574\u4e2a\u521b\u4f5c\u8fc7\u7a0b\u90fd\u662f\u8fc7\u7a0b\u5f0f\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u5728\u6700\u540e\u4e00\u523b\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u4f20\u7edf\u7684\u786c\u7f16\u7801\uff0c\u5b83\u5177\u6709\u8bb8\u591a\u4e2d\u95f4\u5f62\u6001\uff0c\u6ca1\u6709\u5f62\u6210\u4e00\u4e2a\u6574\u4f53\u6d41\u7a0b\u548c\u7ed3\u6784\uff0c\u6240\u4ee5\u5f88\u5bb9\u6613\u4e2d\u95f4\u67d0\u4e9b\u6d41\u7a0b\u6216\u8005\u903b\u8f91\u53d8\u4e86\uff0c\u5176\u540e\u9762\u7684\u6d41\u7a0b\u90fd\u53d7\u5230\u8f83\u5927\u7684\u5f71\u54cd\uff0c\u751a\u81f3\u9700\u8981\u91cd\u65b0\u4fee\u6539\u540e\u9762\u7684\u4ee3\u7801\u548c\u903b\u8f91\uff0c\u8fed\u4ee3\u6210\u672c\u9ad8"),(0,n.kt)("p",null,"\u6570\u636e\u9a71\u52a8\u6709\u70b9\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u53ef\u4ee5\u5b9e\u73b0\u8fd9\u4e2a\u76ee\u6807"),(0,n.kt)("p",null,"\u5176\u5b9e\u5c31\u6709\u70b9\u50cf\u7f16\u8bd1\u6d41\u7a0b\u6216\u8005\u6e32\u67d3\u7ba1\u7ebf\u4e00\u6837\uff0c\u4ed6\u5b9a\u4e49\u597d\u4e86\u6574\u4e2a\u7ba1\u7ebf\u4e4b\u95f4\u7684\u53c2\u6570\u548c\u63a5\u53e3\uff0c\u90a3\u4e48\u4e2d\u95f4\u7684\u8c03\u6574\u5c31\u4e0d\u4f1a\u5f71\u54cd\u90a3\u4e48\u5927\uff0c\u4f60\u53ea\u9700\u8981\u9075\u5faa\u63a5\u53e3\u89c4\u8303\u5c31\u884c"),(0,n.kt)("p",null,"Tool building "),(0,n.kt)("p",null,"\u57fa\u4e8enode-based\u7684\u5de5\u4f5c\u6d41\u7a0b\u53ef\u4ee5\u4f7f\u5f97\u81ea\u5b9a\u4e49node\u53d8\u5f97\u53ef\u80fd\uff0c\u53ea\u8981\u9075\u7167node\u4e4b\u95f4\u7684\u534f\u8bae\uff0c\u7136\u540enode\u5c31\u53ef\u4ee5\u5171\u4eab\uff0c\u5373\uff1a"),(0,n.kt)("p",null,"Houdini Digital Assets "),(0,n.kt)("p",null,"\u4e0a\u4e0b\u6e38\u7684\u53c2\u6570\u5f62\u5f0f\u57fa\u672c\u662f\u8fd8\u662fHoudini \u672c\u8eab\u7684node\u5b9a\u4e49\u7684\uff0c\u5f00\u53d1\u8005\u53ea\u662f\u628a\u4e2d\u95f4\u67d0\u4e9b\u5904\u7406\u8fc7\u7a0b\u4fdd\u5b58\u4e3a\u4e00\u4e2a.hda \u8d44\u4ea7\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u5b9a\u4e49\u53c2\u6570\uff0c\u521b\u4f5c\u505a\u7684\u53ea\u662f\u628a\u4e00\u4e2a\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u590d\u7528\uff0c\u8fd9\u4e9b\u590d\u6742\u7684\u751f\u6210\u8fc7\u7a0b\u8fd8\u662f\u7528Houdini \u57fa\u672c\u7684\u64cd\u4f5c\uff0cHoudini\u6709\u6d77\u91cf\u7684\u57fa\u7840\u64cd\u4f5c\uff0c\u521b\u4f5c\u8005\u51e0\u4e4e\u5f88\u5c11\u4f1a\u7f16\u5199\u81ea\u5b9a\u4e49\u51fd\u6570\u4ee3\u7801\uff0c\u6216\u8005\u53ea\u9700\u8981\u7b80\u5355\u5f88\u5c0f\u7247\u6bb5\u7684\u4ee3\u7801"),(0,n.kt)("p",null,"\u6240\u4ee5Reality World\u8981\u60f3\u505a\u5230\u8fd9\u4e00\u5c42\uff0c\u8981\u5bf9\u6e38\u620f\u903b\u8f91\u811a\u672c\u8fdb\u884c\u6df1\u5165\u5206\u7c7b\uff0c\u5e76\u628a\u8fd9\u4e9b\u6a21\u5f0f\u672f\u8bed\u5316\uff0c\u8fd9\u4e9b\u5206\u7c7b\u8981\u80fd\u591f\u5bf9\u6bd4\uff0c\u6240\u6709\u6e38\u620f\u7684\u903b\u8f91\u7ec4\u5408\uff0c\u4ee5\u53ca\u4fdd\u8bc1\u76f8\u5e94\u7684\u7075\u6d3b\u6027\uff0c\u4f7f\u5f97\u81ea\u5b9a\u4e49\u7684\u6210\u672c\u6700\u4f4e\uff0c\u81ea\u5b9a\u4e49\u7684\u6a21\u5f0f\u66f4\u7b80\u5355"),(0,n.kt)("p",null,"A new way of thinking "),(0,n.kt)("p",null,"\u7531\u4e8e\u5168\u65b0\u7684\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5b9a\u4e49\u7684\u80fd\u529b\u800c\u4e0d\u662f\u9488\u5bf9\u5177\u4f53\u95ee\u9898\u91cd\u590d\u89e3\u51b3\uff0c\u5c31\u4f1a\u4ea7\u751f\u4e00\u79cd\u65b0\u7684\u521b\u5efa\u6570\u5b57\u5185\u5bb9\u7684\u601d\u7ef4"),(0,n.kt)("p",null,"\u7f16\u7a0b\u90fd\u662f\u5728node\u4e4b\u95f4\u7f16\u7a0b\uff0c\u56fa\u5b9a\u7684\u8f93\u5165\u8f93\u51fa"),(0,n.kt)("p",null,"\u8ddfHoudini \u7684\u4e3b\u8981\u533a\u522b\u662f\u4ed6\u662f\u79bb\u7ebf\u7684\uff0c\u7f16\u8f91\u6001\u7684\uff0c\u4e0d\u9700\u8981\u5185\u5bb9\u5ba1\u67e5\uff0c\u517c\u5bb9\u6027\u68c0\u67e5\uff0c\u5b89\u5168\u6027\u7b49\uff0c\u800c\u62df\u5a32\u662f\u8fd0\u884c\u65f6\u7684\uff0c\u5305\u62ec\u5305\u7684\u5927\u5c0f\uff0c\u4eff\u771f\u6a21\u62df\uff0c\u5b89\u5168\uff0c\u517c\u5bb9\u6027\u7b49\u95ee\u9898\u5f88\u591a"),(0,n.kt)("p",null,"\u4e00\u65b9\u9762\u53ef\u4ee5\u901a\u8fc7\u7f16\u8bd1\u5668\u8981\u505a\u4e00\u4e9b\u5206\u6790\uff0c\u53e6\u4e00\u65b9\u9762\u7528\u6237\u9700\u8981\u5728\u81ea\u5df1\u7684\u73af\u5883\u8dd1\u8d77\u6765"),(0,n.kt)("h3",{id:"7413-realityos"},"7.4.13 realityOS"),(0,n.kt)("h3",{id:"7414-openxr"},"7.4.14 OpenXR"),(0,n.kt)("p",null,"\u82f9\u679c\u9000\u51fa\u4e86OpenXR\u610f\u5473\u7740\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u82f9\u679c\u4f1a\u5bf9XR\u7684\u7406\u89e3\u6709\u8f83\u5927\u7684\u5dee\u5f02\uff0c\u82f9\u679c\u4e5f\u662f\u5e0c\u671b\u52a0\u5f3a\u8fd9\u79cd\u5dee\u5f02\u6765\u589e\u5f3a\u81ea\u5df1\u7684\u7ade\u4e89\u529b\u548c\u5dee\u5f02\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u6807\u51c6\u8fd8\u5b58\u5728\u5f88\u591a\u53d8\u6570\uff0c\u6807\u51c6\u672c\u8eab\u53ef\u80fd\u9762\u4e34\u8f83\u5927\u53d8\u5316"),(0,n.kt)("li",{parentName:"ul"},"XR\u7684\u5f00\u53d1\u63a5\u53e3\u4f1a\u8fdb\u4e00\u6b65\u5206\u5316\uff0c\u5f00\u53d1\u8005\u9762\u5bf9\u66f4\u52a0\u590d\u6742\u7684\u6982\u5ff5\u548c\u5f00\u53d1\u65b9\u5f0f\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u81ea\u7814\u7684\u63a5\u53e3\u5c01\u88c5\u4f1a\u66f4\u5feb\u901f\u76f8\u5e94\u8fd9\u79cd\u53d8\u5316\uff0c\u5e76\u4e14\u7b80\u5316\u7528\u6237\u5f00\u53d1")),(0,n.kt)("h3",{id:"7415-ecs--ai"},"7.4.15 ECS + AI"),(0,n.kt)("p",null,"EntitiesBT"),(0,n.kt)("p",null,"Behavior Tree "),(0,n.kt)("p",null,"\u5728\u539f\u751f\u7684ECS\u6846\u67b6\u4e0b\u5b9e\u73b0\u5177\u6709\u575a\u5f3a\u4f9d\u8d56\u5173\u7cfb\u7684\u529f\u80fd\u662f\u5426\u5f88\u96be\uff0c\u4f8b\u5982\u884c\u4e3a\u6811\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u662f\u50cf\u884c\u4e3a\u6811\u4e00\u6837\u76f8\u5bf9\u56fa\u5b9a\u7684\u89c4\u5219\uff0c\u6211\u4eec\u53ef\u4ee5\u50cfUE blueprint \u4e00\u6837\u5b9a\u4e49\u5957\u6846\u67b6\uff0c\u7136\u540e\u5bf9\u4e8e\u8fd9\u4e2a\u6846\u67b6\u6309\u592a\u6781\u4e00\u6837\u7684\u601d\u8def\u5728\u7f16\u8bd1\u5c42\u5bf9\u4ee3\u7801\u505a\u91cd\u65b0\u8c03\u6574\uff0c\u5f53\u7136\u8981\u8003\u8651\u91cd\u65b0\u7f16\u8f91\u7684\u4fbf\u6377\u6027\uff0c\u6240\u4ee5\u53ef\u80fd\u662f\u62df\u5a32\u8fd0\u884c\u65f6\u4e0a\u7684\u4e00\u4e2a\u811a\u672c\u8f7b\u91cf\u7ea7JIT"),(0,n.kt)("h3",{id:"7416-unreal-blueprint"},"7.4.16 Unreal blueprint"),(0,n.kt)("p",null,"\u84dd\u56fe\u4ee5\u53ca\u76f8\u5e94\u7684\u5f88\u591a\u7f16\u8f91\u5668\u53caUI\u754c\u9762\uff0c\u672c\u8d28\u4e0a\u4ed6\u4eec\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u5f00\u53d1\uff0c\u4ed6\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u5316\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fa\u5b9a\u7c7b\u578b\u7684\u5b9a\u4e49\uff1a\u5bf9\u4e8e\u4e00\u4e9b\u7279\u5b9a\u56fa\u5b9a\u7684\u7c7b\u578b\uff0c\u4f8b\u5982blueprint \u5305\u542b\u7684\u90a3\u4e9b\u7c7b\u578b\uff0c\u4ed6\u4eec\u5f80\u5f80\u5728OOP\u4e2d\u6709\u4e00\u5b9a\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\u4e00\u822c\u9700\u8981\u5b9a\u4e49\u90a3\u51e0\u4e2a\u7c7b\u6216\u8005\u5b9e\u4f8b\uff0c\u90a3\u4e2a\u7c7b\u9700\u8981\u5f15\u7528\u90a3\u4e9b\u7c7b\u7684\u5b9e\u4f8b\uff0c\u4ee5\u53ca\u600e\u6837\u5bf9\u8fd9\u4e9b\u5b9e\u4f8b\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u4e8e\u5b9e\u73b0\u8fd9\u4e9bblueprint\u5bf9\u5e94\u7684\u529f\u80fd\uff0c\u4ed6\u4eec\u7684\u8fd9\u79cd\u901a\u7528\u7ed3\u6784\u88ab\u8bbe\u8ba1\u51fa\u6765\uff0c\u5426\u5219\u90a3\u4e2a\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u5b9a\u4e49\u81ea\u5df1\u7684\u5bf9\u8c61\u6a21\u578b\uff0c\u6bcf\u4e2a\u4eba\u5b9a\u4e49\u7684\u53ef\u80fd\u5f88\u4e0d\u4e00\u6837\uff0c\u76f8\u5e94\u7684\u5185\u5b58\u7ba1\u7406\uff0c\u7b49\u7b49\u90fd\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"\u5bf9\u5e94\u529f\u80fd\u7684\u521d\u59cb\u5316\uff0c\u6210\u5458\u53d8\u91cf\u590d\u5236\u7ba1\u7406\u7b49\u662f\u5f88\u7e41\u7410\u7684\u4e8b\u60c5\uff0c\u6309\u7167\u84dd\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4ed6\u5b9e\u9645\u4e0a\u628a\u6d41\u7a0b\u56fa\u5316\u4e86\uff0c\u56e0\u6b64\u8fd9\u4e9b\u57fa\u672c\u7684\u6d41\u7a0b\u5c31\u7b80\u5316\u4e86"),(0,n.kt)("li",{parentName:"ul"},"\u5269\u4e0b\u7528\u6237\u9700\u8981\u505a\u7684\u5c31\u662f\u9488\u5bf9\u56fa\u5b9a\u7ed3\u6784\u548c\u67b6\u6784\u4e0b\u7684\u5177\u4f53\u67d0\u4e2a\u51fd\u6570\u8fdb\u884c\u4ee3\u7801\u7f16\u5199")),(0,n.kt)("p",null,"\u574f\u5904\u662f\u6574\u4e2a\u903b\u8f91\u90fd\u662f\u57fa\u4e8e\u4ee3\u7801\u7684\uff0c\u5e76\u4e14\u65e0\u6cd5\u81ea\u5b9a\u4e49\uff0c\u5b58\u5728\u4e00\u5b9a\u7684\u5197\u4f59\uff0c\u5982\u679c\u4e0d\u91c7\u7528\u5b83\u7684\u6a21\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u81ea\u5df1\u4ece\u96f6\u5b9e\u73b0\uff0c\u90a3\u5c31\u9700\u8981\u5b9e\u73b0\u6574\u4e2a\u6a21\u5757\u7684\u67b6\u6784\uff0c\u5bf9\u8c61\u4e4b\u95f4\u7684\u7ba1\u7406\u7b49\uff0c\u4ee3\u4ef7\u66f4\u5927\uff0c\u4f46\u81ea\u7531\u5ea6\u66f4\u5927\uff0c\u4f8b\u5982\u53ef\u4ee5\u4f7f\u7528\u6570\u636e\u9a71\u52a8\uff0cUE\u7684\u6d41\u7a0b\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u597d\u7684\uff0c\u6216\u8005\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7c7b\u578b\u6216\u8005\u73af\u5883\u4e0b\u4e0d\u4e00\u5b9a\u6700\u4f18"),(0,n.kt)("p",null,"\u84dd\u56fe\u5e76\u6ca1\u6709\u7b80\u5316\u903b\u8f91\u7684\u67b6\u6784\uff0c\u4ed6\u76f8\u5f53\u4e8eUE\u5e2e\u52a9\u6253\u4e86\u4e00\u4e2a\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5bf9\u5176\u4e2d\u7684\u65b9\u6cd5\u8fdb\u884c\u586b\u5145\uff0c\u6574\u4e2a\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7684\u601d\u8def\uff0c\u5bf9\u4e8eEpic \u6765\u8bb2\uff0c\u5b83\u9700\u8981\u53bb\u5b9e\u73b0\u5927\u91cf\u8fd9\u6837\u7684\u67b6\u6784\uff0c\u6240\u4ee5\u5b83\u7684\u529f\u80fd\u6bd4Unity\u8981\u590d\u6742\u5f97\u591a\uff0c\u4f46\u8fd9\u4e9b\u5b9e\u73b0\u5bf9\u4e8e\u7279\u5b9a\u7684\u4e00\u4e2a\u6e38\u620f\u5e76\u4e0d\u4e00\u5b9a\u662f\u6700\u4f18\u5316\u7684\uff0c\u4ed6\u4f1a\u727a\u7272\u6027\u80fd\u6765\u6362\u53d6\u8fd9\u79cd\u7b80\u5355\uff0c\u56e0\u4e3a\u901a\u7528\u7684\u67b6\u5b50\u5f80\u5f80\u4e0d\u662f\u6700\u4f18\u7684\uff0c\u800c\u5b83\u9762\u5411\u5bf9\u8c61\u7684\u6df1\u5ea6\u5b9e\u73b0\u5bfc\u81f4\u4ee3\u7801\u4e5f\u5f88\u96be\u4f18\u5316\uff0c\u4f8b\u5982\u67b6\u5b50\u91cc\u9762\u5b58\u5728\u5927\u91cf\u4ea4\u53c9\u5f15\u7528"),(0,n.kt)("p",null,"\u50cfUnity\u56e0\u4e3a\u6ca1\u6709\u63d0\u4f9b\u4f17\u591a\u8fd9\u79cd\u6df1\u5ea6\u5b9a\u5236\u7684\u67b6\u5b50\uff0c\u53cd\u800c\u80fd\u591f\u5bb9\u6613\u53bb\u5b9e\u73b0ECS\u8fd9\u79cd\u4f18\u5316"),(0,n.kt)("p",null,"\u76f8\u5bf9\u4e8eUnity\uff0c\u6709\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5\uff0c\u7c7b\u4f3c\u5b9a\u4e49\u4e86\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u8303\u5f0f\uff0c\u4f46\u8fd9\u4e9b\u8303\u5f0f\u672c\u8eab\u662f\u6309\u7167OOP\u7684\u65b9\u5f0f\u5b9a\u4e49\u7684\uff0c\u56e0\u6b64\u4ed6\u7684\u8303\u5f0f\u662f\u5b9e\u73b0\u4e86\u4e00\u4e9b\u7279\u5b9a\u7684\u529f\u80fd\uff0c\u800c\u4e0d\u662f\u5b9a\u4e49\u4e86\u4e00\u4e2a\u6846\u67b6\uff0c\u6240\u4ee5UE\u8981\u5b66\u4e60\u66f4\u591a\u7684\u77e5\u8bc6\uff0c\u5f88\u591a\u77e5\u8bc6\u5c31\u662f\u5173\u4e8e\u8fd9\u4e9b\u7279\u5b9a\u8303\u5f0f\u7684"),(0,n.kt)("p",null,"\u9664\u4e86\u8303\u5f0f\u672c\u8eab\uff0cBlueprint \u7684\u53e6\u4e00\u4e2a\u5f3a\u5927\u7684\u529f\u80fd\u5728\u4e8e\u5b83\u628a\u6574\u4e2a\u4e00\u4e2a\u4ee3\u7801\u5757\u6216\u8005\u4e00\u4e2a\u590d\u6742\u7684\u5b50\u6a21\u5757\u7cfb\u7edf\uff0c\u6253\u6563\u6210\u591a\u4e2a\u4ee5\u65b9\u6cd5\u4e3a\u5355\u4f4d\u7684\u53ef\u89c6\u7f16\u8f91\u6a21\u5757\uff0c\u8fd9\u6837\u662f\u7684\u4fee\u6539\u5355\u72ec\u7684\u6a21\u5757\u66f4\u52a0\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u5173\u6ce8\u51fd\u6570\u7684\u8f93\u5165\u8f93\u51fa\uff0c\u4e0d\u9700\u8981\u5728\u4ee3\u7801\u4e2d\u5bfb\u627e\u4fee\u6539\u51fd\u6570\u7684\u5165\u53e3\uff0c\u4e5f\u4e0d\u9700\u8981\u5f15\u5165\u4e00\u4e9b\u53d8\u91cf\u7684\u4fe1\u7528\u3001\u8bfb\u53d6\u6216\u8005\u4fee\u6539\u7e41\u7410\u7684\u4ee3\u7801"),(0,n.kt)("h3",{id:"7417-pixar"},"7.4.17 Pixar"),(0,n.kt)("p",null,"\u76ae\u514b\u65af\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408"),(0,n.kt)("p",null,"\u79d1\u6280\u4e0e\u827a\u672f\u7ed3\u5408\u7684\u7ed3\u679c\u662f\u4ec0\u4e48"),(0,n.kt)("h3",{id:"7418-gaia-procedural-worldscom"},"7.4.18 Gaia procedural-worlds.com"),(0,n.kt)("p",null,"\u7a0b\u5e8f\u5316\u9759\u6001\u5185\u5bb9\u751f\u6210\u5e94\u8be5\u8fd8\u662f\u6bd4\u8f83\u6210\u719f\u7684\u67b6\u6784\u4e86\uff0c\u540e\u671f\u5e94\u8be5\u80fd\u591f\u5bb9\u6613\u5f00\u53d1\uff0c\u5230\u4ea4\u4e92\u66f4\u96be"),(0,n.kt)("p",null,"\u4ea4\u4e92\u7684\u8bbe\u8ba1\u4e5f\u8981\u662f\u7a0b\u5e8f\u5316\u7684\uff0c\u5f53\u7136\u7531\u4e8eECS\u672c\u8eab\u662f\u7ec4\u4ef6\u5316\u7684\uff0c\u6ca1\u6709\u64cd\u4f5c\u987a\u5e8f\u4f9d\u8d56\uff0c\u6240\u4ee5\u8fd9\u4e2a\u95ee\u9898\u4e0d\u5927\u5b58\u5728\uff0c\u4f46\u662f\u5f53\u9700\u8981\u5bf9\u9759\u6001\u5185\u5bb9\u8bbe\u8ba1\u591a\u4e2a\u4fee\u6539\u65f6\uff0c\u64cd\u4f5c\u6b65\u9aa4\u7684\u5f71\u54cd\u5c31\u51fa\u6765\u4e86\uff0c\u7a0b\u5e8f\u5316\u7684\u597d\u5904\u662fdirectable\uff0c\u5b83\u7b80\u5316\u4e86\u5bf9\u64cd\u4f5c\u7684\u4efb\u610f\u4fee\u6539\uff0c\u4f20\u7edf\u7684\u8f6f\u4ef6\u5c31\u662f\u9075\u5faa\u89c4\u5219\u548c\u6b65\u9aa4\u7684\uff0c\u8fd9\u6837\u5982\u679c\u6709\u4e9b\u5386\u53f2\u64cd\u4f5c\u4fee\u6539\u4e86\u6216\u8005\u9700\u8981\u4fee\u6539\uff0c\u5f80\u5f80\u4f1a\u5f71\u54cd\u5176\u4ed6\u5927\u91cf\u4fee\u6539"),(0,n.kt)("p",null,"\u4f46\u811a\u672c\u53ea\u662f\u9488\u5bf9\u5355\u4e2a\u7269\u4f53\u7684\u884c\u4e3a\uff0c\u6574\u4e2a\u573a\u666f\u7684\u7ed3\u67b6\u6784\u8bbe\u8ba1\u8fd8\u662f\u5e94\u8be5\u5c3d\u53ef\u80fd\u7684\u7a0b\u5e8f\u5316\uff0c\u800cRoblox \u6ca1\u6709\u8fd9\u6837\u7684\u673a\u5236\uff0c\u7a0b\u5e8f\u5316\u7684\u573a\u666f\u8bbe\u8ba1\u4f7f\u5f97\u901a\u5e38\u53ef\u4ee5\u66f4\u9ad8\u6548\u5730\u8bbe\u8ba1\u5927\u73af\u5883\uff0c\u7136\u540e\u7cbe\u8c03\u5c0f\u7269\u4f53\uff0c\u800c\u4e0d\u662f\u5bf9\u573a\u666f\u6bcf\u4e2a\u7269\u4f53\u90fd\u8981\u72ec\u7acb\u6446\u653e\u548c\u8bbe\u8ba1\uff0c\u56e0\u4e3a\u5927\u73af\u5883\u901a\u5e38\u90fd\u6709\u4e00\u5b9a\u7684\u968f\u673a\u6027"),(0,n.kt)("h3",{id:"7419-google-maps-api"},"7.4.19 Google Maps API"),(0,n.kt)("h3",{id:"7420-procedural-content-generation"},"7.4.20 Procedural content generation"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684DCC\u4f7f\u7528deforming, cutting, merging \u7b49\u4ee3\u66ff\u5bf9\u4e09\u89d2\u5f62\u7684\u76f4\u63a5\u64cd\u4f5c\uff0c\u4ece\u800c\u7b80\u5316\u5185\u5bb9\u521b\u4f5c"),(0,n.kt)("p",null,"PCG\u4f7f\u7528\u6237\u4e13\u6ce8\u4e8e\u7528\u4e8e\u751f\u6210\u5185\u5bb9\u7684\u7a0b\u5e8f\u5316\u7b97\u6cd5\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7e41\u7410\u7684\u5185\u5bb9\u64cd\u4f5c\uff0c\u8fd9\u79cd\u7b97\u6cd5\u66f4\u7b26\u5408\u4eba\u7684\u903b\u8f91"),(0,n.kt)("p",null,"PCG\u7684\u8ba1\u7b97\u8fc7\u7a0b\u6bd4\u8f83\u590d\u6742\uff0c\u66f4\u9002\u5408PC\u7aef\uff0c\u79fb\u52a8\u7aef\u8981\u4e13\u6ce8\u73a9\u6cd5\u90e8\u4efd"),(0,n.kt)("p",null,"\u7b54\u4e3b\u5bf9\u751f\u6210\u7b97\u6cd5\u7684\u7406\u89e3\u5c31\u597d\u50cf\u67d0\u4e9b\u65f6\u671f\u5bf9\u706b\u836f\u7684\u7406\u89e3\uff1a\u7528\u6765\u653e\u70df\u82b1\u7684\u4e1c\u897f\uff0c\u9700\u8981\u7814\u7a76\u66f4\u597d\u7684\u706b\u836f\u4e48\uff1f\u4e0d\u662f\u7b97\u6cd5\u591f\u4e86\uff0c\u800c\u662f\u8bbe\u8ba1\u8005\u4e0d\u77e5\u9053\u8bbe\u8ba1\u76ee\u7684\u4e3a\u4f55\uff0c\u5bf9\u7b97\u6cd5\u6ca1\u6709\u8981\u6c42\u3002\u6e38\u620f\u6838\u5fc3\u8bbe\u8ba1\u7edd\u4e0d\u662f\u5267\u60c5\u3001\u573a\u666f\uff0c\u800c\u662f\u73a9\u6cd5\u3002\u73a9\u6cd5\u662f\u4ec0\u4e48\uff0c\u5c31\u662f\u7ed9\u73a9\u5bb6\u6709\u610f\u601d\u7684\u95ee\u9898\uff0c\u8ba9\u73a9\u5bb6\u89e3\u51b3\u95ee\u9898\u3002\u7528\u7b97\u6cd5\u63d0\u51fa\u7684\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u548c\u89e3\u51b3\u95ee\u9898\u96be\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u73a9\u5bb6\u5373\u4f7f\u77e5\u9053\u4e86\u4f60\u5982\u4f55\u751f\u6210\u95ee\u9898\uff0c\u4f46\u662f\u4ed6\u73b0\u5728\u4e5f\u4e0d\u77e5\u9053\u5982\u4f55\u6709\u6548\u7684\u89e3\u51b3\u95ee\u9898\u3002\u8fd9\u5c31\u662f\u8457\u540d\u7684NP/P\u95ee\u9898\uff0c\u6211\u5f53\u7136\u77e5\u9053\u4fc4\u7f57\u65af\u65b9\u5757\u968f\u673a\u751f\u6210\u7684\u65b9\u5757\u968f\u673a\u7b97\u6cd5\uff0c\u4f46\u5c31\u6ca1\u6709\u4e00\u4e2a\u9ad8\u6548\u7684\u7b97\u6cd5\u53bb\u89e3\u51b3\u4fc4\u7f57\u65af\u65b9\u5757\u62fc\u63a5\u95ee\u9898\uff0c\u6570\u72ec\u7684\u751f\u6210\u7b97\u6cd5\u5f88\u9ad8\u6548\uff0c\u89e3\u51b3\u6570\u72ec\u7684\u7b97\u6cd5\u5f88\u6162\uff0c\u751f\u6210\u5730\u56fe\u7684\u7b97\u6cd5\u9ad8\u6548\uff0c\u8bbf\u95ee\u5730\u56fe\u4e0a\u7684\u6bcf\u4e00\u4e2a\u70b9\u7684\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u5c31\u96be\u7206\u4e86\u3002\u4e3a\u5565\u89c9\u5f97\u751f\u6210\u7b97\u6cd5\u6ca1\u7528\uff0c\u56e0\u4e3a\u4e0d\u77e5\u9053\u8981\u6784\u9020\u4ec0\u4e48\u95ee\u9898\u7ed9\u73a9\u5bb6\uff0c\u8bbe\u8ba1\u76ee\u7684\u5230\u5e95\u662f\u4ec0\u4e48\uff0c\u800c\u662f\u6f2b\u65e0\u76ee\u7684\u5730\u53bb\u751f\u6210\u90a3\u4e9b\u82b1\u82b1\u8349\u8349\uff0c\u548c\u7528\u706b\u836f\u653e\u70df\u706b\u4e00\u4e2a\u9053\u7406\uff0c\u672c\u6765\u5c31\u4e0d\u662f\u8bbe\u8ba1\u7684\u6838\u5fc3\uff0c\u518d\u600e\u4e48\u63d0\u5347\u6280\u672f\u4e5f\u53ea\u662f\u88c5\u9970\u3002"),(0,n.kt)("p",null,"\u4fc4\u7f57\u65af\u65b9\u5757\u5c31\u662f\u4f8b\u5b50\uff0c\u771f\u6b63\u628a\u7b97\u6cd5\u751f\u6210\u8981\u7528\u4e8e\u73a9\u6cd5\u4e0a\uff0c\u5c31\u9700\u8981\u4e86\u89e3P/NP\u95ee\u9898\uff1a\u7528\u7b80\u5355\u7684\u4fe1\u606f\u662f\u53ef\u4ee5\u6784\u9020\u590d\u6742\u95ee\u9898\u3002\u5176\u5b9eMOBA\u6e38\u620f\u91cc\uff0c\u4e00\u4e2a\u65f6\u95f4\u6bb5\u7684\u8d70\u4f4d\u89c4\u5212\u4e5f\u662fNP\u95ee\u9898\uff1a\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\uff0c\u5982\u679c\u8981\u8bbf\u95ee\u548c\u4fa6\u5bdf\u5730\u56fe\u4e0a\u591a\u4e2a\u6218\u7565\u8981\u70b9\uff0c\u5982\u4f55\u624d\u80fd\u8d70\u6700\u5c11\u7684\u8def\uff0c\u6d88\u8017\u6700\u5c11\u7684\u65f6\u95f4\uff0c\u8fbe\u5230\u6218\u7565\u76ee\u6807\u3002\u6709\u65f6\u5019\u8fd9\u4e9b\u6218\u7565\u8981\u70b9\u8fd8\u662f\u5176\u4ed6\u73a9\u5bb6\u5f71\u54cd\u4e0b\u751f\u6210\u7684\u3002"),(0,n.kt)("h3",{id:"7421-casualcreator"},"7.4.21 casualcreator"),(0,n.kt)("h3",{id:"7422-\u5fae\u670d\u52a1\u5316"},"7.4.22 \u5fae\u670d\u52a1\u5316"),(0,n.kt)("p",null,'When it comes to cloud technology in gaming, most people associate it with game streaming. However, Scalar is based on cloud computing, which Romell as explained, is quite different from the term we\'ve heard about so often. "Cloud streaming is a distribution model; it improves people\u2019s access to games, but it doesn\u2019t change, in essence, what games are, or the quality of them. The game is still being run on a single-processing machine placed remotely and then streamed via the cloud to your screen," he said.'),(0,n.kt)("p",null,'"Cloud computing \u2013 what Ubisoft Scalar enables \u2013 means the processing power for a game isn\u2019t tied to a single machine, but a decentralized computation system. The processing is taking place in the cloud. This eliminates the limits of local hardware for players, improves the quality of games, and opens up new possibilities for game developers."'),(0,n.kt)("p",null,"\u66f4\u65b0\u4e0d\u4f1a\u505c\u670d"),(0,n.kt)("p",null,"\u628a\u6e38\u620f\u5f15\u64ce\u7684\u591a\u4e2a\u7ec4\u4ef6\uff0c\u5982physics, AI\u7b49\u90fd\u8f6c\u6210\u5fae\u670d\u52a1\uff0c\u7136\u540e\u5355\u72ec\u5728\u4e91\u7aef\u8ba1\u7b97\uff0c\u6240\u4ee5\u7406\u8bba\u4e0a\u4e0d\u53d7\u9650\u5236\uff0c\u4f20\u7edf\u7684\u5f15\u64ce\u628a\u6574\u4e2a\u5f15\u64ce\u5728\u4e00\u53f0\u673a\u5668\u65e0\u5f62\uff0c\u7531\u4e8e\u5171\u4eab\u6574\u4e2a\u573a\u666f\u5927\u91cf\u6570\u636e\uff0c\u56e0\u6b64\u4e0d\u597d\u5e76\u884c\u8ba1\u7b97"),(0,n.kt)("p",null,"3\u670817\u65e5\u6d88\u606f\uff0c\u636e\u5916\u5a92\u62a5\u9053\uff0c\u5728\u5f53\u5730\u65f6\u95f4\u661f\u671f\u56db\u7684GDC\u6f14\u8bb2\u4e2d\uff0c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u7684\u603b\u7ecf\u7406Patrick Bach\u3001\u6280\u672f\u603b\u76d1Christian Holmqvist\u548c\u9996\u5e2d\u6280\u672f\u5b98/\u6280\u672f\u603b\u76d1Per-Olof Romell\u516c\u5e03\u4e86\u4e00\u9879\u5168\u65b0\u4e91\u8ba1\u7b97\u6280\u672f\uff0c\u8be5\u6280\u672f\u88ab\u79f0\u4e3aUbisoft Scalar\u3002\u4ed6\u4eec\u58f0\u79f0\u8be5\u6280\u672f\u5c06\u521b\u9020\u5168\u65b0\u7684\u6e38\u620f\u7c7b\u578b\u3002\u4ed6\u4eec\u8868\u793a\uff0c\u8fd9\u9879\u6280\u672f\u5c06\u4f7f\u80b2\u78a7\u80fd\u591f\u5236\u4f5c\u6bd4\u4ee5\u5f80\u66f4\u5927\uff0c\u66f4\u590d\u6742\u7684\u6e38\u620f\u4e16\u754c\uff0c\u8fd9\u4e9b\u6e38\u620f\u4e16\u754c\u53ef\u4ee5\u5b9e\u65f6\u66f4\u65b0\uff0c\u5e76\u7531\u5927\u91cf\u73a9\u5bb6\u586b\u5145\uff0c\u4ece\u800c\u521b\u9020\u65b0\u7684\u793e\u4ea4\u4f53\u9a8c\u3002\u5173\u4e8e\u4f7f\u7528\u8be5\u6280\u672f\u5f00\u53d1\u7684\u65b0\u4f5c\u3002Bach\u8868\u793a\uff1a\u201c\u80b2\u78a7\u65af\u5fb7\u54e5\u5c14\u6469\u6b63\u5728\u7814\u7a76\u4e0eScalar\u4e00\u8d77\u5f00\u53d1\u7684IP\uff0c\u76ee\u6807\u5f53\u7136\u662f\u5145\u5206\u5229\u7528\u8fd9\u9879\u65b0\u6280\u672f\u7684\u6240\u6709\u53ef\u80fd\u6027\uff0c\u4f46\u73b0\u5728\u8c08\u8bba\u8fd9\u4e2a\u8fd8\u4e3a\u65f6\u8fc7\u65e9\u201d\u3002"),(0,n.kt)("h3",{id:"7423-google-tilt-brush"},"7.4.23 Google Tilt Brush"),(0,n.kt)("p",null,"\u592a\u504f\u5e95\u5c42\uff0c\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u751f\u6210\u6700\u539f\u59cb\u7684Mesh\uff0c\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u63a7\u5236\u7cbe\u7ec6\u5ea6\u4e0d\u591f\uff0c\u6240\u4ee5\u7f51\u683c\u548c\u6750\u8d28\u90fd\u4e0d\u591f\u7cbe\u7ec6"),(0,n.kt)("li",{parentName:"ul"},"\u5c5e\u4e8e\u57fa\u7840\u521b\u4f5c\uff0c\u90a3\u4e2a\u7269\u4f53\u90fd\u8981\u4ece\u65e0\u5230\u6709\u521b\u4f5c\uff0c\u6216\u8005\u57fa\u4e8e\u4e00\u4e9b\u57fa\u672c\u7684\u51e0\u4f55\u4f53\u8fdb\u884c\u521b\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u751f\u6210\u590d\u6742\u51e0\u4f55\uff0c\u66f4\u591a\u662f\u6982\u5ff5\u4e0a\u7684\u611f\u89c9"),(0,n.kt)("li",{parentName:"ul"},"\u5e76\u4e14\u8fd9\u4e9b\u4f5c\u54c1\u5b9e\u9645\u4e0a\u5f88\u5c11\u6709\u88ab\u771f\u6b63\u4f7f\u7528\u6216\u8005\u88ab\u5f53\u4f5c\u827a\u672f\uff0c\u56e0\u4e3a\u521b\u4f5c\u5f88\u53d7\u9650")),(0,n.kt)("p",null,"\u5982\u679c\u8981\u63d0\u4f9b\u66f4\u7cbe\u7ec6\u7684\u63a7\u5236\uff0c\u5219\u9762\u4e34\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"UI\u592a\u590d\u6742\u4e0d\u597d\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u624b\u52bf\u63a7\u5236\u7684\u7cbe\u5ea6\u8bef\u5dee\u6bd4\u8f83\u5927")),(0,n.kt)("p",null,"\u8fd9\u7c7b\u521b\u4f5c\u7684\u4f5c\u54c1\u901a\u5e38\u53ea\u662f\u534a\u6210\u54c1\uff0c\u53ef\u80fd\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u573a\u666f\u548c\u6982\u5ff5\uff0c\u7136\u540e\u5728PC\u4e0a\u5728\u8fdb\u4e00\u6b65\u7cbe\u7ec6\u5fae\u8c03\uff0c\u4f46\u5982\u679c\u662f\u8fd9\u6837\uff0c\u5728PC\u4e0a\u6709\u66f4\u591a\u7684\u65b9\u5f0f\u751f\u6210\u8fd9\u6837\u7684\u6982\u5ff5"),(0,n.kt)("p",null,"\u5982\u679c\u76f4\u63a5\u4f7f\u7528\uff0c\u8fd9\u7c7b\u573a\u666f\u901a\u5e38\u6ca1\u6709\u592a\u5927\u7528\u5904\uff0c\u53ea\u6709\u9759\u6001\u7684\u4e1c\u897f\uff0c\u6ca1\u6cd5\u7f16\u8f91\u52a8\u753b\uff0c\u5f53\u7136\u5982\u679c\u8981\u5728XR\u8bbe\u5907\u52a0\u5165\u52a8\u753b\u7f16\u8f91\uff0c\u90a3\u53c8\u662f\u53e6\u5916\u4e00\u4e2a\u5f88\u590d\u6742\uff0c\u51e0\u4e4e\u4e0d\u592a\u53ef\u80fd\u7684\u4e8b\u60c5"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5728XR\u8bbe\u5907\u4e0a\uff0c\u4e0d\u80fd\u76f4\u63a5\u521b\u4f5c\u539f\u59cb\u51e0\u4f55\uff0c\u56e0\u4e3a\u8fd9\u6837\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u6837\u51e0\u4f55\u662f\u9759\u6001\u7684\uff0c\u6ca1\u6709\u52a8\u753b"),(0,n.kt)("li",{parentName:"ul"},"\u592a\u7b80\u5355")),(0,n.kt)("p",null,"\u5b83\u53ea\u80fd\u662f\u57fa\u4e8e\u67d0\u4e9b\u6807\u51c6\u7ec4\u4ef6\u7684\u521b\u4f5c\uff0c\u8fd9\u4e9b\u7ec4\u4ef6\u901a\u5e38\u7531PC\u5236\u4f5c\uff0c\u5e26\u6709\u52a8\u753b\u548c\u4e00\u5b9a\u7684\u903b\u8f91\u5c5e\u6027\uff08\u56e0\u4e3aXR\u4e0a\u4e5f\u65e0\u6cd5\u7f16\u8f91\u903b\u8f91\uff09\uff0c\u5e76\u4e14\u5728XR\u8bbe\u5907\u4e0a\u4ea4\u4e92\u7684\u662fPCG\u7684\u65b9\u5f0f\uff0c\u8fd9\u6837\u4f7f\u5f97\u4ea4\u4e92\u9700\u8981\u7684\u5e76\u4e0d\u662f\u7cbe\u7ec6\u4f4d\u7f6e\uff0c\u800c\u4e14PCG\u7684\u53c2\u6570\uff0c\u8fd9\u6837\u53c2\u6570\u7684\u7a7a\u95f4\u548c\u8303\u56f4\u5c0f\u7684\u591a\uff0c\u540c\u65f6\u80fd\u591f\u751f\u6210\u66f4\u591a\u5185\u5bb9\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u4e00\u4e2a\u57fa\u7840\u51e0\u4f55"),(0,n.kt)("h3",{id:"7424-github"},"7.4.24 GitHub"),(0,n.kt)("p",null,"\u591a\u4eba\u534f\u4f5c\u7684\u5178\u8303\uff0c\u5728\u534f\u4f5c\u4e2d\u4f53\u73b0\u8d21\u732e\u5ea6",(0,n.kt)("sup",{parentName:"p",id:"fnref-hello"},(0,n.kt)("a",{parentName:"sup",href:"#fn-hello",className:"footnote-ref"},"hello"))),(0,n.kt)("p",null,"\u6bd4\u5982\u4f60\u53d1\u73b0\u67d0\u4e2aCreation \u5b58\u5728\u4e0d\u5408\u7406\uff0c\u63d0\u51fa\u4fee\u6539"),(0,n.kt)("h3",{id:"7425-stechfab"},"7.4.25 Stechfab"),(0,n.kt)("h3",{id:"7426-game-pigeon-games-for-imessage"},"7.4.26 Game pigeon: games for iMessage"),(0,n.kt)("img",{src:"resources/games-pen.png",alt:"games-pen"}),(0,n.kt)("h2",{id:"75-\u5e94\u7528"},"7.5 \u5e94\u7528"),(0,n.kt)("h3",{id:"751--\u5821\u5792\u4e4b\u591c"},"7.5.1 \u5821\u5792\u4e4b\u591c"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Fortnite",src:l(6).Z,width:"1920",height:"1080"})),(0,n.kt)("p",null,"Game theme, starter island "),(0,n.kt)("p",null,"\u7ec4\u4ef6\u4f1a\u968f\u7740theme\u53d8\u5316"),(0,n.kt)("p",null,"\u76f8\u6bd4\u5821\u5792\u4e4b\u591c\u53ea\u4ece\u6a21\u677f\u521b\u5efa\uff0cRW\u5177\u6709\u80fd\u591f\u8ba9\u7528\u6237\u521b\u9020\u6a21\u677f\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u5ea6\u548c\u53ef\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a"),(0,n.kt)("p",null,"Accolade \u81ea\u52a8\u63a7\u5236XP\u7684\u83b7\u53d6\uff0c\u81ea\u52a8\u8ba1\u7b97\u5e73\u8861\uff0c\u6839\u636e\u65f6\u95f4"),(0,n.kt)("p",null,"\u8d44\u6e90\u662f\u5f15\u7528\u5185\u90e8\uff0c\u9700\u8981\u6e38\u620f\u5305\u5185\u767b\u5f55\u65f6\u4e0b\u8f7d\uff0c\u662f\u5426\u65e0\u6cd5\u7528\u6237\u81ea\u5df1\u52a8\u6001\u6dfb\u52a0"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u662f\u5b9e\u73b0\u4e86\u56fa\u5b9a\u4e00\u5957\u8d44\u6e90\u548c\u903b\u8f91\u7684\u6570\u636e\u5316\uff0c\u73b0\u5b9e\u4e16\u754c\u6bd4\u6e38\u620f\u89c4\u5219\u66f4\u590d\u6742\uff0c\u4e0d\u7ba1\u662f\u903b\u8f91\u8fd8\u662f\u573a\u666f\uff0c\u4ea4\u4e92\uff0c\u6240\u4ee5\u5fc5\u987b\u8981\u652f\u6301\u7f16\u7a0b\u6269\u5c55\u80fd\u529b"),(0,n.kt)("p",null,"\u4f8b\u5982\u5821\u5792\u4e4b\u591c\u91cc\u5927\u90e8\u5206\u8d44\u6e90\u5916\u89c2\u662f\u4e0d\u80fd\u4fee\u6539\u7684\uff0c\u4f46\u662f\u751f\u6d3b\u4e2d\u7684\u8bbe\u8ba1\u5f80\u5f80\u90fd\u8bbe\u7acb\u7167\u7247\u7f16\u8f91\uff0c\u81ea\u5b9a\u4e49\u4e00\u4e9b\u5185\u5bb9\uff0c\u56e0\u4e3a\u4ed6\u662f\u56fa\u5b9a\u7684\u7c7b\uff0c\u65e0\u6cd5\u7ec4\u5408\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u51cf\u5c11\u6216\u589e\u52a0\u529f\u80fd\u6765\u4fee\u6539\u5df2\u6709\u7269\u4f53"),(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u901a\u8fc7\u7ec4\u5408\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u65b0\u7684\u529f\u80fd"),(0,n.kt)("li",{parentName:"ul"},"\u4e5f\u6ca1\u6709\u529e\u6cd5\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u6240\u6709\u90fd\u4f9d\u8d56\u4e8e\u5b98\u65b9\u6784\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u589e\u52a0\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff0c\u90fd\u8981\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\uff0c\u5c3d\u7ba1\u4ed6\u4eec\u6709\u590d\u7528\uff0c\u4ee3\u7801\u4f1a\u91cd\u590d\uff0c\u7528\u6237\u9700\u8981\u7406\u89e3\u548c\u8bb0\u4f4f\u7684\u7c7b\u578b\u975e\u5e38\u591a")),(0,n.kt)("p",null,"\u6240\u6709\u4e1c\u897f\u6216\u8005\u5927\u90e8\u5206\u4e1c\u897f\u90fd\u88ab\u89c6\u89c9\u5316\uff0c\u7136\u540e\u6570\u636e\u9a71\u52a8\uff0c\u4fee\u6539\u8bbe\u5b9a\u597d\u7684\u5c5e\u6027"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u7b80\u5316\u4e86\u6811\u5f62\u5c42\u7ea7\u7ed3\u6784\uff0c\u6240\u6709\u5185\u5bb9\u90fd\u662f\u6241\u5e73"),(0,n.kt)("h4",{id:"7511-\u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"},"7.5.1.1 \u5b9a\u4e49\u4ea4\u4e92\u7c7b\u578b\u5f88\u91cd\u8981"),(0,n.kt)("p",null,"\u5821\u5792\u4e4b\u591c\u6709122\u79cddevices"),(0,n.kt)("h4",{id:"7512-\u591a\u4eba\u5728\u7ebf\u670d\u52a1"},"7.5.1.2 \u591a\u4eba\u5728\u7ebf\u670d\u52a1"),(0,n.kt)("p",null,"\u97f3\u9891\u7684\u91cd\u8981\u6027"),(0,n.kt)("h4",{id:"7513-\u79c1\u5bc6\u793e\u4ea4"},"7.5.1.3 \u79c1\u5bc6\u793e\u4ea4"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"I, I, couldn't be more pleased with the situation in Fortnite. Fortnite is the most positive social experience I've ever interacted with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, and it's true that there are negative people out there sometimes, but the far majority of encounters are positive. Um, and also the far majority of social engagement on fortnight isn't with random strangers. It's not what many to many with millions of people are participating. It's players together with their friends, talking with their friends, kind of as an isolated group, uh, wandering through a much larger outside world. And a lot of the decisions we've made in the game have really contributed to the positivity here. One is that we have voice chat, so you can chat with your friends, but voice chat only works with people in your squad that either you're explicitly friends with and you explicitly joined up with, or you're friends explicitly joined up with.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"And, you know, we really are innately trained to, uh, you know, in ordinary circumstances, respect people when we're interacting with them personally far, far more than when we're interacting with them with text. And so I think this is an area where the matter verse will have a major advantage overall. So O other social media, it's that inherently by being focused on small groups and actual friends, engaging in a much larger outside world and in carrying all of the emotional content of voice and perhaps even facial capture in the future, uh, it'll be a much higher empathy platform, only much less subject to abuse where, you know, one nasty action affects millions of people, uh, because of curation.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"So, so I think we have a lot of positive things to be excited about there. Um, but the key point, the key challenge for this new medium is that to succeed anything that causes itself, the metaverse must actually be better than all other experiences competing for people's digital time. And that's a massive challenge. This means the metaverse needs to be better than an hour on the metaverse needs to be better than an hour on Facebook or Instagram or an hour on YouTube, uh, or an hour on Netflix.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Um, it'll be actual interactive objects, actual experiences, and actual engaging things and not just ads forced upon you. And, you know, I think we can completely escape an advertising based business model if we take this approach that the only way you ever get to see a commercial thing is if you decide to see it yourself, because it's really cool. And I think we'll see a whole new level of competition among brands to surface really awesome 3d content. Um, and you know, I think you can look to Fortnite and some of these other games is pioneering. A lot of these really exciting engaging non-advertising based, uh, mechanisms for exposing stuff.")),(0,n.kt)("h4",{id:"7514-verse-language"},"7.5.1.4 Verse Language"),(0,n.kt)("p",null,"Now, the next question is about programming model, because if we want to have this huge shared experience with many different types of games, other entertainment experiences, or, you know, any sort of experience at all, what you're talking about is a huge amount of user generated content in the form of 3d assets and also a huge amount of user written code, um, uh, per perhaps an unprecedented amount of user written code. And, you know, there's already some evidence of models like this working."),(0,n.kt)("p",null,"Um, I think the web with Java script is sort of a microcosm of this. Now the web is a much simpler programming model than the metaverse will have to be because on a website, all of the code that's running in Java script on that site is nominally under the control of the website operator. You can decide exactly what code runs and you don't ever have to deal with random user code being injected that might interact with you."),(0,n.kt)("p",null,"Um, uh, so the web BES, a closed world programming model, whereas the metaverse will need to be an open world programming model because the goal, it can't just be another app store, right?"),(0,n.kt)("p",null,"You can't have a thousand different experiences and you can be in one at a time. And when you're in that one experience, it dictates everything, right? The, the metaverse has gotta be about interoperability of user creative objects of all different types, right? Because, uh, besides having some core game experiences in the sort of place you're also going to have, you know, the equivalent of Facebook pages, uh, for every object that, that exists in the physical world, you know, uh, like Ford creates a new car, they're going to want to unveil the car, um, as a user drivable object, right?"),(0,n.kt)("p",null,"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Uh, in this virtual world. Um, and that's going to be a really interesting and more powerful way to unveil a car than to just announce it on your Facebook page.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"The Facebook page, you can have text and video, but in the virtual world, you can actually get in the car, you can go around it, you can look at it from all different angles. You can open the doors, you can drive it, you can see how it handles. Um, and you know, you can have a, a huge set of interactions that are much more interesting and organic as it's not just a, an advertisement, uh, for a product, but also something that you can experience and have fun with. And I think we need to look at, uh, all of the crossovers that have occurred, um, in recent years between games and, um, and other brands as kind of an indicator of where the metaverse will go.")),(0,n.kt)("h3",{id:"752-roblox"},"7.5.2 ROBLOX"),(0,n.kt)("p",null,"Roblox\u793e\u533a\u592a\u5c01\u95ed\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5177\u5907\u5f00\u653e\u80fd\u529b\uff0c\u6ca1\u6709\u5e73\u53f0\u5f00\u653e\u7684\u6a21\u5f0f\uff0c\u522b\u7684\u5e94\u7528\u65e0\u6cd5\u8c03\u7528"),(0,n.kt)("li",{parentName:"ul"},"\u5f00\u53d1\u8005\u4e4b\u95f4\u5f88\u96be\u5171\u4eab\uff0c\u6ca1\u6709\u7ec4\u4ef6\u751f\u6001\uff0c\u6574\u4e2a\u5f00\u53d1\u6a21\u5f0f\u8fd8\u662f\u4f20\u7edf\u5c01\u95ed\u7684app\u6a21\u5f0f\uff0c\u6bcf\u4e2a\u5f00\u53d1\u8005\u5355\u72ec\u9488\u5bf9\u81ea\u5df1\u7684app\u72ec\u7acb\u5f00\u53d1\uff0c\u5171\u4eab\u590d\u7528\u80fd\u529b\u4e0d\u591f\uff0c\u53ea\u662f\u6784\u5efa\u4e86\u4e00\u5957\u81ea\u5206\u53d1\u673a\u5236")),(0,n.kt)("p",null,"\u76f8\u540c\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u8d44\u6e90\u90fd\u662f\u4e91\u7aef\u7684\uff0c\u8fd9\u4f7f\u5f97\u591a\u4eba\u534f\u4f5c\u66f4\u7b80\u5355\uff0c\u4e0d\u7ba1\u662f\u5bf9\u4e8e\u5f00\u53d1\u8005\u8fd8\u662f\u5bf9\u4e8e\u7528\u6237\uff0c\u90fd\u6ca1\u6709\u672c\u5730\u8d44\u6e90\u6570\u636e\uff0c\u5168\u662f\u4e91\u7aef\u7684\uff0c\u8d44\u6e90\u4e0a\u4f20\u540eRoblox \u6709\u4e2a\u5185\u5bb9\u5ba1\u6838\u6d41\u7a0b\uff0c\u5927\u6982\u51e0\u5206\u949f"),(0,n.kt)("li",{parentName:"ul"},"Roblox packages, \u53ef\u590d\u7528\u7684\u6e38\u620f\u8d44\u6e90\uff0c\u6e38\u620f\u53ef\u4ee5\u5b9e\u65f6\u540c\u6b65\u5230\u6700\u65b0\u7248\u672c\uff0cRoblox \u7684\u8d44\u6e90\u5206\u4eab\u53ea\u5728\u6307\u5b9a\u597d\u53cb\u548c\u7ec4\u4e4b\u95f4\uff0c\u5207\u7248\u672c\u53f7\u76f8\u5bf9\u7b80\u5355\uff0c\u6bcf\u6b21\u63d0\u4ea4\u81ea\u52a8\u751f\u6210\u4e00\u4e2aV1, V2, V3\u2026\u4e4b\u7c7b\u7684\u7248\u672c\uff0c\u4ec5\u80fd\u6839\u636e\u65f6\u95f4\u5224\u522b\uff0c\u529f\u80fd\u5f88\u6709\u9650\uff0c\u4e0d\u5177\u5907\u5927\u89c4\u6a21\u534f\u540c\u7684\u57fa\u7840"),(0,n.kt)("li",{parentName:"ul"},"\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff1a\u7528\u6237\u6709group\u7684\u6982\u5ff5\uff1aMy packages\u548cGroup packages \uff0c\u6709Collaborators\u7684\u6982\u5ff5\uff0c\u4ed6\u4eec\u53ef\u4ee5\u7f16\u8f91\u6e38\u620f\uff0c\u5176\u4ed6\u7528\u6237\u7f16\u8f91\u65f6\uff0c\u9009\u4e2d\u4e00\u4e2a\u7269\u4f53\u4f1a\u5e26\u4e0d\u540c\u7684\u989c\u8272\uff0c\u5bf9\u4e8e\u811a\u672c\uff0c\u5f53\u5176\u4ed6\u4eba\u5728\u7f16\u8f91\u65f6\uff0c\u4f1a\u6709\u989c\u8272\u63d0\u793a\uff0c\u4f46\u662f\u4ecd\u7136\u53ef\u4ee5\u7f16\u8f91\uff0c\u7f16\u8f91\u5b8c\u4ee5\u540e\u4f1a\u6709\u8349\u7a3f\u5b58\u50a8\uff0c\u63d0\u4ea4\u4e4b\u540e\u53ef\u4ee5\u8fdb\u884c\u5408\u5e76\uff0c\u53ef\u4ee5\u4e0e\u670d\u52a1\u5668\u7248\u672c\u8fdb\u884c\u6bd4\u8f83\uff0c\u89e3\u51b3\u51b2\u7a81\u4e4b\u540e\u518d\u63d0\u4ea4\uff0c\u4e5f\u53ef\u4ee5\u56de\u6eda\uff0c\u7c7b\u4f3c\u7248\u672c\u7684\u6982\u5ff5\u4e86"),(0,n.kt)("li",{parentName:"ul"},"Data Store\u7528\u4e8e\u5b58\u50a8\u9700\u8981\u6301\u4e45\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u53ea\u80fd\u5728Script\u800c\u975eLocal Script\u4e2d\u8c03\u7528\uff0c\u6309\u5b57\u5178\u7684\u65b9\u5f0f\u5b58\u50a8\uff0c\u6709\u7248\u672c\u53f7\uff0c\u53ef\u4ee5\u7528\u4e8e\u4e00\u4e9b\u95ee\u9898\u5b9a\u4f4d\u548c\u652f\u6301\uff0c\u65e7\u7248\u672c\u7684\u5185\u5bb9\u4f1a\u572830\u5929\u540e\u88ab\u5220\u9664"),(0,n.kt)("li",{parentName:"ul"},"\u5f15\u64ceplug-in\uff0c\u7528\u4e8e\u589e\u5f3a\u5f15\u64ce\uff0cmarketplace \uff0c\u8ddf\u5176\u4ed6\u5f15\u64ce\u5dee\u4e0d\u591a"),(0,n.kt)("li",{parentName:"ul"},"Client-service \u6a21\u5f0f\uff0c\u6240\u6709\u4e4b\u95f4\u4f20\u9012\u7684\u53c2\u6570\u90fd\u662f\u53ef\u4ee5Replicated\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c\u5426\u5219\u4f20\u9012\u7ed3\u679c\u4e3a\u7a7a\uff0c\u4f8b\u5982Part\u5c31\u662f\u4e0d\u53ef\u4ee5\u5728Server\u548cClient \u4e4b\u95f4\u8fdb\u884c\u4f20\u9012\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u975e\u76f4\u63a5\u64cd\u4f5c\u7684\u7269\u4f53\u90fd\u662f\u7269\u7406\u6a21\u62df\u7684\uff0c\u7269\u7406\u6a21\u62df\u53ef\u4ee5\u662fclient\u6216\u8005server \u8ba1\u7b97\uff0c\u4e00\u822c\u9760\u8fd1\u7528\u6237\u7684\u5730\u65b9\u4f1a\u9996\u5148\u5728\u8be5\u7528\u6237\u7684client device\u8ba1\u7b97\uff0c\u5426\u5219\u5728server\u7aef\u8ba1\u7b97"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u5728\u7b80\u53163D\u5185\u5bb9\u7684\u5c42\u9762\u505a\u7684\u5f88\u597d\uff0c\u8fd9\u6837\u907f\u514d\u7528\u6237\u5411\u7740\u6700\u9ad8\u8d28\u91cf\u7684\u5185\u5bb9\u521b\u4f5c\uff0c\u6bd4\u5982\u7528\u65b9\u5757\u5c31\u80fd\u63cf\u8ff0\u6811\uff0c\u4f7f\u5f97\u6e32\u67d3\u5728\u79fb\u52a8\u7aef\u538b\u529b\u4e5f\u5c11\u4e86\u5f88\u591a"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9690\u79c1\u4fdd\u62a4\uff0c\u5185\u5bb9\u7248\u6743")),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u7f16\u7a0b\u6a21\u5f0f\uff0c\u57fa\u672c\u4e0a\u8fd8\u662fUnity\u4f20\u7edf\u7684\u6a21\u5f0f\uff0c\u4e3b\u8981\u4e0d\u540c\u5728\u4e8e\u5929\u751f\u8054\u7f51"),(0,n.kt)("li",{parentName:"ul"},"\u4f8b\u5982\u811a\u672c\u7684\u6302\u8f7d\u8ddf\u573a\u666f\u5c42\u7ea7\u6216\u8005\u5177\u4f53\u7269\u4f53\u6709\u5173\uff0c\u8fd8\u662f\u50cfUnity\u539f\u6765\u7684\u65b9\u5f0f\u4e00\u6837\u9488\u5bf9game object \u7f16\u5199\u811a\u672c\uff0c\u811a\u672c\u4e2d\u901a\u8fc7script.parent\u5f15\u7528\u6240\u5c5e\u5bf9\u8c61\uff0c\u8fd9\u5929\u751f\u5c31\u4f7f\u5f97\u811a\u672c\u4e0e\u7279\u5b9a\u573a\u666f\u7ed3\u6784\u6216\u7269\u4f53\u8026\u5408\uff0c\u4e0d\u5229\u4e8e\u590d\u7528\uff0c\u53ef\u590d\u7528\u7684\u811a\u672c\u5e94\u8be5\u4ec5\u5173\u6ce8\u6570\u636e\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u76843D\u7269\u4f53\uff0c\u8fd9\u79cd\u6570\u636e\u662f\u903b\u8f91\u6570\u636e\uff0c\u4ed6\u5c31\u4f7f\u5f97\u903b\u8f91\u548c\u8868\u73b0\u5206\u79bb\u51fa\u6765"),(0,n.kt)("li",{parentName:"ul"},"\u6bd4\u5982\u5bf9\u4e8e\u4e00\u4e2aUI\u6309\u94ae\u7684\u70b9\u51fb\u4e8b\u4ef6\uff0c\u8fd8\u9700\u8981\u5199script.Parent.MouseButton1Click:Connect(function() end())"),(0,n.kt)("li",{parentName:"ul"},"\u811a\u672c\u5c31\u7b49\u88c5\u7684\u4e3b\u8981\u662f\u7ed3\u6784\uff0c\u6709\u70b9\u7c7b\u4f3cUE blueprint \uff0c\u6216\u8005\u8bf4\u5b9a\u4e49\u4e86\u4e00\u4e9b\u89c4\u8303\uff0c\u4e00\u4e9b\u7ed3\u6784\uff0c\u8fd9\u4e9b\u89c4\u8303\u5927\u591a\u6570\u9488\u5bf9client-server\u67b6\u6784\u7684\u4e00\u4e9b\u8c03\u6574\uff0c\u6ca1\u6709\u50cfHoudini \u4e00\u6837\u6709\u4e9b\u66f4\u591a\u903b\u8f91\u5c42\u9762\u7684\u5c01\u88c5"),(0,n.kt)("li",{parentName:"ul"},"PNC/Weapons Kit\uff0c\u6709\u4e00\u5957\u56fa\u5b9a\u6a21\u7248\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8eUE\u4e2d\u5185\u7f6e\u7684\u5f88\u591a\u7cfb\u7edf\uff0c\u5e73\u53f0\u63d0\u4f9b\u4e86\u8fd9\u4e9b\u76f8\u5bf9\u6bd4\u8f83\u56fa\u5b9a\u7cfb\u7edf\u7684\u67b6\u5b50\uff0c\u5f00\u53d1\u8005\u5f80\u5f80\u4fee\u6539\u7684\u662f\uff1a\u589e\u52a0\u6216\u79fb\u9664\u67d0\u4e9b\u7ec4\u4ef6\uff1b\u4fee\u6539\u5176\u4e2d\u4e00\u4e9b\u53c2\u6570\uff1b\u6216\u8005\u57fa\u4e8e\u67b6\u5b50\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u4fee\u6539\u3002\u5176\u4e2d\u5982\u679c\u662f\u4fee\u6539\u7684\u662f\u4e00\u90e8\u5206\u51fd\u6570\u529f\u80fd\uff0cUE\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u5b9a\u4f4d\u65b9\u5f0f\uff0cRoblox\u5219\u66f4\u5bb9\u6613\u7834\u574f\u6574\u4e2a\u4f53\u7ed3\u6784\uff0c\u4f46Roblox\u63d0\u4f9b\u4e86\u57fa\u4e8e\u6a21\u7248\u4ee3\u7801\u8fdb\u884c\u5b9a\u5236\u7684\u80fd\u529b\uff0c\u7075\u6d3b\u6027\u66f4\u5927\uff0c\u4f46\u662f\u96be\u5ea6\u4e5f\u66f4\u5927\uff0c\u4f8b\u5982\u9700\u8981\u5f15\u7528\u3001\u8bfb\u53d6\u548c\u7ba1\u7406\u53d8\u91cf\uff0c\u5bfb\u627e\u5165\u53e3\u51fd\u6570\uff0c\u5904\u7406\u8f93\u5165\u8f93\u51fa\u7b49"),(0,n.kt)("li",{parentName:"ul"},"Configuration\uff0c\u5bf9\u4e8eNPC kit\u8fd9\u6837\u6bd4\u8f83\u590d\u6742\u7684\u5bf9\u8c61\uff0c\u7531\u4e8e\u6709\u8bb8\u591a\u516c\u5171\u5c5e\u6027\u88ab\u5f88\u591a\u811a\u672c\u8bbf\u95ee\uff0cRoblox \u5efa\u8bae\u5c06\u8fd9\u4e9b\u516c\u5171\u5c5e\u6027\u5b58\u50a8\u5728\u4e00\u4e2avalue object\u4e2d\uff0c\u7528\u4e00\u4e2aConfiguration container\u5c01\u88c5\uff0c\u8fd9\u662f\u5178\u578b\u4f20\u7edf\u7684OOP\u601d\u60f3\uff0c\u5176\u4e2d\u5e26\u6765\u7684\u95ee\u9898\u6709\u5f88\u591a\uff0c\u6bd4\u5982\u591a\u4e2a\u5bf9\u8c61\u7684\u6307\u9488\u5f15\u7528\uff0c\u6bd4\u5982\u5982\u679c\u67d0\u4e9b\u53d8\u91cf\u88ab\u5220\u9664\u5176\u4e2d\u4e00\u4e9b\u811a\u672c\u53ef\u80fd\u4e0d\u5de5\u4f5c\uff0c\u4e5f\u53ef\u80fd\u79fb\u9664\u4e86\u4e00\u4e9b\u811a\u672c\u800c\u67d0\u4e9b\u53d8\u91cf\u538b\u6839\u5c31\u4e0d\u88ab\u4f7f\u7528\uff0c\u6838\u5fc3\u95ee\u9898\u5c31\u662f\u6570\u636e\u548c\u903b\u8f91\u4e4b\u95f4\u8131\u79bb\u4e86\u5173\u7cfb\uff0c\u4f7f\u5f97\u9700\u8981\u989d\u5916\u5c0f\u5fc3\u8fd9\u79cd\u5173\u7cfb\u7684\u7ef4\u62a4"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u4e2d\u7684\u590d\u7528\u95ee\u9898\u4e00\u65b9\u9762\u901a\u8fc7ModuleScript\uff0c\u77e5\u8bc6\u4ee3\u7801\u7ea7\u7684\u590d\u7528"),(0,n.kt)("li",{parentName:"ul"},"Roblox \u7684\u591a\u4eba\u5728\u7ebf\u7528\u6237\u6570\u8fd8\u662f\u6709\u9650\u768415\u4e2a\u4eba\uff0c\u6240\u4ee5\u8fd8\u662f\u91c7\u7528\u6bd4\u8f83\u4f20\u7edf\u7684\u591a\u4eba\u540c\u6b65\u67b6\u6784\uff0c\u6ca1\u6709\u5145\u5206\u53d1\u6325\u73b0\u4ee3\u4e91\u8ba1\u7b97\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5fae\u670d\u52a1\u67b6\u6784\uff0c\u5141\u8bb8\u4e0d\u9650\u5236\u7684\u4eba\u6570")),(0,n.kt)("p",null,"Roblox \u7684\u6838\u5fc3\u4f18\u52bf\u5728\u4e8e\u4e91\u539f\u751f\uff0c\u4ed6\u53ef\u80fd\u4f1a\u81ea\u52a8\u5904\u7406\u5f88\u591a\u540c\u6b65\u95ee\u9898\uff0c\u4f8b\u5982\u5728Script\u4e2d\u8c03\u7528Instance.new\u5c31\u4f1a\u5728workspace\u4e2d\u521b\u5efa\u4e00\u4e2aPart\u5e76\u81ea\u52a8\u540c\u6b65\u5230\u5728\u7ebf\u573a\u666f\uff0c\u5927\u90e8\u5206\u7684\u811a\u672c\u90fd\u662f\u901a\u8fc7Script\u7f16\u5199\u7684\uff0c\u91cc\u9762\u7279\u522b\u662f\u5bf9Workspace\u4e2dpart\u7684\u4fee\u6539\u4f1a\u81ea\u52a8\u540c\u6b65\u5230\u7aef\u4fa7"),(0,n.kt)("p",null,"\u8ddfRoblox\u7684\u6700\u5927\u533a\u522b\u5728\u4e8e\uff0c\u6211\u4eec\u9700\u8981\u9762\u5411C\u7aef\u7684\u7528\u6237\uff0c\u7528\u6237\u53ef\u80fd\u662f\u4e0d\u4f9d\u8d56\u4e8ePC\u7684\uff0c\u800cRoblox\u7684\u6574\u4e2a\u751f\u6001\u8fd8\u662f\u6bd4\u8f83\u4f9d\u8d56\u4e8e\u4f20\u7edf\u7684\u6e38\u620f\u5f00\u53d1\u6a21\u5f0f\uff0c\u5176\u521b\u65b0\u5728\u4e8e\u4e91\u539f\u751f\u548c\u5206\u53d1\u6a21\u5f0f\uff0c\u4e3a\u4e86\u5b9e\u73b0\u5728C\u7aef\u521b\u4f5c\uff0c\u9700\u8981\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u65f6\u5373\u662f\u521b\u4f5c\u6001\uff0c\u5b83\u6bd4\u8f83\u5c11\u6709\u7f16\u8f91\u6001\u7684\u6982\u5ff5\uff0c\u50cfMinecraft \u90a3\u6837"),(0,n.kt)("li",{parentName:"ul"},"\u9700\u8981\u5728\u903b\u8f91\u5c42\u9762\u505a\u66f4\u591a\u7684\u67b6\u6784\u6765\u652f\u6491C\u7aef\u521b\u4f5c\uff0c\u6709\u70b9\u7c7b\u4f3c\u4e8e\uff1aRoblox + Houdini \uff0c\u800c\u7531\u6b64\u884d\u751f\u51fa\u6765\u7684\u6280\u672f\u548c\u67b6\u6784\u8981\u6bd4Roblox \u590d\u6742\u5f97\u591a\uff0c\u4f46\u5176\u7ed3\u679c\u662f\u4f1a\u6bd4Roblox \u5728\u521b\u4f5c\u5c42\u9762\u66f4\u5927\u91cf\u7684\u666e\u53ca")),(0,n.kt)("h3",{id:"753-niantic"},"7.5.3 NIANTIC"),(0,n.kt)("h3",{id:"754-snapchat"},"7.5.4 SNAPCHAT"),(0,n.kt)("h3",{id:"755-meta"},"7.5.5 Meta"),(0,n.kt)("h3",{id:"756-omniverse"},"7.5.6 Omniverse"),(0,n.kt)("h3",{id:"757-minecraft"},"7.5.7 Minecraft"),(0,n.kt)("p",null,"\u5f3a\u9879\u5728\u4e8e\u57fa\u4e8e\u50cf\u7d20\u5757\uff0c\u53ef\u4ee5\u81ea\u7531\u7ec4\u5408\uff0c\u81ea\u7531\u5ea6\u5927\uff0c\u53ef\u4ee5\u6784\u5efa\u4efb\u610f\u7ed3\u6784\u7684\u573a\u666f\u6216\u7269\u4f53\uff0c\u4e0d\u4f9d\u8d56\u4e8eDCC\u8f93\u51fa\uff0c\u56e0\u6b64\u771f\u6b63\u7684\u4f4e\u95e8\u69db"),(0,n.kt)("p",null,"\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u65e0\u6cd5\u4f7f\u7528\u5f3a\u5927\u7684DCC\u8f93\u51fa"),(0,n.kt)("li",{parentName:"ul"},"\u7531\u4e8e\u50cf\u7d20\u5757\u677e\u6563\u7ec4\u5408\uff0c\u901a\u5e38\u65e0\u6cd5\u5bf9\u7269\u4f53\u7ea7\u8bbe\u7f6e\u73a9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"\u6bcf\u4e00\u5757\u5355\u72ec\u6784\u5efa\uff0c\u624b\u5de5\u91cf\u6781\u5927\uff0c\u5f53\u7136\u6709\u4e9b\u5c1d\u8bd5\u7528\u4e00\u4e9bDCC\u8f93\u51fa\u7684\u573a\u666f\u4f53\u7d20\u5316\u540e\u4f5c\u4e3a\u8f93\u5165")),(0,n.kt)("p",null,"Minecraft pc \u7f16\u8f91\u5668"),(0,n.kt)("p",null,"Minecraft MOD"),(0,n.kt)("p",null,"Minecraft \u7684\u6240\u6709\u5185\u5bb9\u90fd\u5728\u672c\u5730\uff0c\u8fdb\u5ea6\u9700\u8981\u81ea\u5df1\u5907\u4efd\uff0c\u5206\u4eab\u7684\u5185\u5bb9\u9700\u8981\u81ea\u5df1\u5b89\u88c5\u5728\u672c\u5730\u7279\u5b9a\u7684\u6587\u4ef6\u5939\uff0c\u7f51\u6613\u7684\u7248\u672c\u4f1a\u505a\u4e00\u4e9b\u8054\u7f51\u8d2d\u4e70"),(0,n.kt)("p",null,"\u4f7f\u7528\u56fa\u5b9a\u7684\u6587\u4ef6\u5939\u7ed3\u6784\uff0c\u5f88\u591a\u5185\u5bb9\u6df7\u5230\u4e00\u8d77\uff0c\u7ba1\u7406\u590d\u6742\u5ea6\u9ad8\uff0c\u5bb9\u6613\u9020\u6210\u5197\u4f59\u8d44\u6e90\uff0c\u4e0d\u65b9\u4fbf\u591a\u4eba\u534f\u4f5c\u7f16\u8f91\uff0c\u4f8b\u5982\u6bcf\u4e2a\u72ec\u7acb\u7684json\u90fd\u5f15\u5165ID\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5220\u9664\u5bf9\u5e94\u7684\u8d44\u6e90\u8fd8\u9700\u8981\u89e3\u6790json\u6587\u4ef6\uff0c\u663e\u7136\u4e0d\u53ef\u80fd\uff0c\u8fd9\u4f7f\u5f97\u5907\u4efd\u4e5f\u4f1a\u62f7\u8d1d\u5197\u4f59\u6587\u4ef6\uff0c\u5982\u679c\u8d2d\u4e70\u4e86\u4e00\u4e2aPack\uff0c\u5219\u5728\u65b0\u7684\u521b\u4f5c\u8005\u5fc5\u987b\u5168\u90e8\u5bfc\u5165\u8be5Pack\uff0c\u8fd9\u662f\u4f20\u7edfUE\u548cUnity\u90a3\u79cd\u4f20\u7edf\u7684\u672c\u5730\u6587\u4ef6\u8d44\u6e90\u7ba1\u7406\u65b9\u5f0f\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u6309\u6587\u4ef6\u5939\u8fdb\u884c\u8d44\u6e90\u7ba1\u7406\uff0c\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u533a\u5206\u6587\u4ef6\u5939\u5185\u8d44\u6e90\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bb9\u6613\u5197\u4f59"),(0,n.kt)("li",{parentName:"ol"},"USD\u662f\u6309\u7167\u8d44\u6e90\u8fdb\u884c\u7ba1\u7406")),(0,n.kt)("p",null,"\u800cRealityWorld\u4f7f\u7528\u66f4\u52a0\u5148\u8fdb\u7684USD\u7ed3\u6784"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Molang: \u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u8ba9\u5f00\u53d1\u8005\u5199\u811a\u672c\uff1f")),(0,n.kt)("p",null,"\u5f88\u5927\u7684\u539f\u56e0\u53ef\u80fd\u662f\u4e0d\u65b9\u4fbf\u7ba1\u7406\uff0c\u56e0\u4e3aMinecraft\u5b8c\u5168\u9650\u5b9a\u4e8e\u6570\u636e\u9a71\u52a8\uff0c\u5f00\u53d1\u8005\u80fd\u4fee\u6539\u7684\u662f\u4e24\u79cd\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u5c5e\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u7ec4\u4ef6\u7684\u7ec4\u5408\u5f62\u6210\u65b0\u7684Entity")),(0,n.kt)("p",null,"\u5176\u4e2d\u540e\u8005\u901a\u8fc7json\u7684\u5b9a\u4e49\u5b9e\u73b0\uff0c\u800c\u524d\u8005\u662f\u76f4\u63a5\u5728json\u4e2d\u7684\u5bf9\u8c61\u8fdb\u884c\u8d4b\u503c\u64cd\u4f5c\uff0c\u90a3\u4e48\u5982\u679c\u8981\u4f7f\u7528\u5355\u72ec\u7684\u811a\u672c\u6587\u4ef6\uff0c\u5219\u4f1a\u6d89\u53ca\u7684\u6570\u91cf\u975e\u5e38\u5927\uff0c\u8fd9\u4e9b\u811a\u672c\u6587\u4ef6\u600e\u4e48\u5173\u8054\uff0c\u5982\u679c\u9700\u8981\u624b\u52a8\u5173\u8054\u5c31\u5f15\u5165\u4e86\u590d\u6742\u6027\uff0c\u4f8b\u5982\u5728Roblox\u4e2d\u9700\u8981\u5c06\u811a\u672c\u624b\u52a8\u5173\u8054\u5230\u5bf9\u5e94\u7684\u5b9e\u4f53\uff0c\u800c\u5b9e\u4f53\u4e4b\u95f4\u5f80\u5f80\u8fd8\u6d89\u53ca\u5c42\u6b21\u8def\u5f84\u7ed3\u6784\uff0c\u5c31\u4f1a\u8fdb\u4e00\u6b65\u590d\u6742\u5316\uff0cMinecraft\u5219\u76f4\u63a5\u5c06\u811a\u672c\u5199\u5728\u5c5e\u6027\u8d4b\u503c\u7684\u5730\u65b9\uff0c\u7b80\u5316\u4e86\u5f88\u591a\u4e1c\u897f"),(0,n.kt)("p",null,"\u4f46\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u5f00\u53d1\u8005\u65e0\u6cd5\u81ea\u5b9a\u4e49\u884c\u4e3a\u65b9\u6cd5\uff0c\u4ed6\u53ea\u80fd\u662f\u5bf9\u56fa\u5b9a\u7684\u7ed3\u6784\u7684\u503c\u8fdb\u884c\u4fee\u6539\uff0c\u800c\u65e0\u6cd5\u5b9a\u4e49\u65b0\u7684\u903b\u8f91"),(0,n.kt)("p",null,"\u4e3a\u4e86\u8bbf\u95ee\u7cfb\u7edf\u5185\u5b58\u4e2d\u7684\u6e38\u620f\u72b6\u6001\u4e0e\u6570\u503c\uff0cMolang\u63d0\u4f9b\u4e86\u5927\u91cf\u7684Query function\u8fdb\u884c\u67e5\u8be2"),(0,n.kt)("p",null,"\u56e0\u6b64Molang\u662f\u4e00\u79cd\u57fa\u4e8e\u8868\u8fbe\u5f0f\u7684\u8bed\u8a00\uff1aexpression-based language "),(0,n.kt)("h3",{id:"758-wilder-world"},"7.5.8 Wilder World"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Wilder World")),(0,n.kt)("p",null,"Liquidity"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"One of the biggest problems in the NFT space is that the best content is reserved for the uber-wealthy. We are flipping this paradigm on its head by enabling fully fractionalized NFT ownership, which will not only drive more capital into the space but will make it available to a much wider audience.")),(0,n.kt)("p",null,"No Artist Fees"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Other platforms charge artists between 15% and 30%. We consider this is an antiquated way of thinking, older world not Wilder World. Instead, we have designed our native token to create value for all participants while redistributing wealth directly back into our Wilder community. There\u2019s no middleman or platform taking a cut of the artist\u2019s hard earned reward.")),(0,n.kt)("p",null,"\u4f20\u7edf\u6ca1\u6709\u73b0\u5b9e\u4ef7\u503c\u652f\u6491\u7684NFT\uff0c\u5927\u90e8\u5206\u7684\u4ef7\u503c\u6765\u6e90\u4e8e\uff0c\u6709\u70b9\u50cf\u4f20\u9500\u4e00\u6837\uff0c\u8f6c\u5356\uff0c\u65e9\u671f\u7684\u73a9\u5bb6\u8f6c\u5356\u7ed9\u540e\u7eed\u7684\u73a9\u5bb6\uff0c\u8d5a\u53d6\u5dee\u4ef7\uff0c\u800c\u540e\u7eed\u7684\u73a9\u5bb6\u8981\u60f3\u8d5a\u94b1\uff0c\u5fc5\u987b\u4e0d\u65ad\u6709\u4eba\u63a5\u9f99\uff0c\u7136\u540e\u4e00\u65e6\u5230\u4e86\u67d0\u4e9b\u4e0d\u53ef\u601d\u8bae\u7684\u4ef7\u503c\u5c31\u4e0d\u4f1a\u6709\u4eba\u63a5\u9f99"),(0,n.kt)("h2",{id:"76-\u533a\u5757\u94fe"},"7.6 \u533a\u5757\u94fe"),(0,n.kt)("h3",{id:"761-\u95ee\u9898"},"7.6.1 \u95ee\u9898"),(0,n.kt)("h4",{id:"7611-\u6210\u672c\u95ee\u9898"},"7.6.1.1 \u6210\u672c\u95ee\u9898\uff1f"),(0,n.kt)("p",null,"\u533a\u5757\u94fe\u7684\u865a\u62df\u8d27\u5e01\u6709\u4e00\u90e8\u5206\u662f\u7531\u77ff\u673a\u4ea7\u751f\u7684\uff0c\u6536\u76ca\u5f52\u77ff\u4e3b\uff0c\u8fd9\u6837\u4ed6\u4eec\u624d\u6709\u5de8\u5927\u52a8\u529b\u548c\u7ecf\u6d4e\u5229\u76ca\u53bb\u505a\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u4e5f\u624d\u80fd\u4fdd\u8bc1\u6574\u4e2a\u5206\u5e03\u5f0f\u8282\u70b9\u53ef\u4ee5\u5b89\u5168\u8fd0\u884c\u3002"),(0,n.kt)("p",null,"\u663e\u7136\uff0c\u8fd9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u5149\u662f\u80fd\u6e90\u6d6a\u8d39"),(0,n.kt)("li",{parentName:"ul"},"\u8fd8\u662f\u6210\u672c\u6d6a\u8d39")),(0,n.kt)("p",null,"\u76f8\u5f53\u5927\u4e00\u90e8\u5206\u865a\u62df\u8d27\u5e01\u90fd\u5206\u914d\u7ed9\u4e86\u77ff\u4e3b\uff0c\u6765\u4fdd\u8bc1\u5206\u5e03\u5f0f\u8282\u70b9\u7684\u8fd0\u884c\uff0c\u5fc5\u987b\u7ed9\u4ed6\u4eec\u8db3\u591f\u7684\u5229\u76ca\u3002\u6240\u4ee5\u8fc7\u53bb\u7531\u4e2d\u4ecb\u6536\u53d6\u7684\u90a3\u4e9b\u8d39\u7528\u5176\u5b9e\u73b0\u5728\u8f6c\u79fb\u5230\u77ff\u4e3b\u624b\u4e0a\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u79cd\u8d39\u7528\u770b\u8d77\u6765\u4e0d\u662f\u7531\u7528\u6237 \u4ed8\u8d39\u7684\uff0c\u800c\u662f\u7ed9\u77ff\u4e3b\u7684\u4e00\u79cd\u201c\u4ee3\u5e01\u201d\uff0c\u4ed6\u53ef\u80fd\u73b0\u9636\u6bb5\u5e76\u4e0d\u503c\u94b1\uff0c\u800c\u662f\u5c06\u6765\u968f\u7740\u5e73\u53f0\u7684\u589e\u52a0\u800c\u5bfc\u81f4\u8fd9\u79cd\u4ee3\u5e01\u4f1a\u5347\u503c\u3002\u8fd9\u662f\u4e00\u79cd\u5bf9\u5c06\u6765\u6295\u673a\u7684\u884c\u4e3a\uff0c\u5982\u679c\u5e73\u53f0\u6ca1\u6709\u5efa\u7acb\u8d77\u6765\uff0c\u77ff\u4e3b\u6ca1\u6709\u4efb\u4f55\u6536\u5165\u3002"),(0,n.kt)("p",null,"\u90a3\u5373\u4f7f\u5c06\u6765\u5e73\u53f0\u8d77\u6765\u4e86\uff0c\u8fd9\u4e9b\u77ff\u4e3b\u624b\u4e0a\u7684\u4ee3\u5e01\u7684\u5b9e\u9645\u5151\u73b0\u4f1a\u6709\u672a\u6765\u53c2\u5165\u8fdb\u6765\u7684\u4eba\u4e70\u5355\uff0c\u4e5f\u5c31\u662f\u672a\u6765\u90a3\u4e9b\u865a\u62df\u8d27\u5e01\u7684\u8d2d\u4e70\u8005\u6240\u652f\u4ed8\u7684\u8d39\u7528\u4e2d\uff0c\u5b9e\u9645\u6709\u90e8\u5206\u662f \u652f\u4ed8\u7ed9\u4e86\u65e9\u671f\u7684\u77ff\u4e3b\u6216\u8005\u65e9\u671f\u6d41\u901a\u7684\u4eba\u3002"),(0,n.kt)("p",null,"\u5982\u6b64\u4e0b\u53bb\uff0c\u865a\u62df\u8d27\u5e01\u7684\u4ef7\u503c\u5c06\u4f1a\u8d8a\u6765\u8d8a\u9ad8\uff0c\u800c\u540e\u52a0\u5165\u7684\u4eba\u9700\u8981\u652f\u4ed8\u66f4\u591a\u7684\u652f\u51fa\u7ed9\u524d\u9762\u7684\u6240\u6709\u4eba\u3002"),(0,n.kt)("p",null,"\u800c\u5982\u679c\u8fd9\u4e2a\u5e73\u53f0\u672c\u8eab\u5e76\u6ca1\u6709\u521b\u9020\u4ef7\u503c\u7684\u8bdd\uff0c\u90a3\u4e48\u8fd9\u4e2a\u6c14\u6ce1\u65e9\u665a\u4f1a\u7834\u706d\u3002\u9664\u975e\u8fd9\u4e2a\u5e73\u53f0\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u521b\u9020\u4e86\u65b0\u7684\u4ef7\u503c\uff0c\u6765\u5339\u914d\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u5728\u540e\u7eed\u7684\u5e73\u53f0\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff0c\u6574\u4e2a\u8ba1\u7b97\u6301\u7eed\u5728\u8fd0\u884c\uff0c\u5e73\u53f0\u6301\u7eed\u5728\u7ed9\u8fd9\u4e9b\u77ff\u4e3b\u63d0\u4f9b\u66f4\u9ad8\u7684\u5956\u52b1\uff0c\u8fd9\u79cd\u5956\u52b1\u662f\u6301\u7eed\u4e0d\u65ad\u7684\uff0c\u800c\u4e14\u540e\u7eed\u7684\u5956\u52b1\u4ef7\u503c\u4f1a\u8d8a\u6765\u8d8a\u5927\uff0c\u90a3\u4e48\u600e\u6837\u624d\u80fd\u652f\u6491\u8fd9\u79cd\u589e\u957f\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u8fd9\u79cd\u4e3a\u4e86\u7ef4\u6301\uff08\u91cd\u590d\u7684\uff09\u5206\u5e03\u5f0f\u8282\u70b9\u6240\u9700\u8981\u4ed8\u51fa\u7684\u9ad8\u6602\u7ecf\u6d4e\u5229\u76ca\u523a\u6fc0\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u96be\u4ee5\u627f\u53d7\uff0c\u5f53\u7136\u5e73\u53f0\u4e0d\u4f1a\u51fa\u4ec0\u4e48\u94b1\uff0c\u5b83\u4eec\u53ea\u9700\u8981\u53d1\u884c\u4e00\u4e9b\u4ee3\u5e01\uff0c\u7136\u540e\u628a\u751f\u6001\u505a\u5927\uff0c\u5b83\u4eec\u7684\u6536\u5165\u4e5f\u589e\u5927\uff0c\u4e5f\u8bb8\u5b83\u4eec\u4e2d\u9014\u5728\u9ad8\u70b9\u5957\u73b0\uff0c\u4f46\u662f\u5f53\u4ef7\u503c\u5f00\u59cb\u4e0b\u8dcc\u7684\u65f6\u5019\u5b83\u4eec\u4e5f\u6ca1\u6709\u4ec0\u4e48\u635f\u5931\uff0c\u56e0\u4e3a\u6574\u4e2a\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u5b83\u4eec\u5e76\u6ca1\u6709\u4ed8\u51fa\u4ec0\u4e48\u6210\u672c\uff0c\u77ff\u4e3b\u90fd\u662f\u5728\u4e3a\u4e86\u672a\u6765\u8d44\u6e90\u51fa\u94b1\u6765\u652f\u6301\u8fd9\u4e2a\u884c\u4e3a\u548c\u8fd0\u4f5c\u3002"),(0,n.kt)("p",null,"\u6bd4\u7279\u5e01\u7684\u5956\u52b1\u673a\u5236\u7c7b\u4f3c\u4e8e\u5f69\u7968\u7684\u673a\u5236\uff0c\u53ea\u6709\u80dc\u51fa\u7684\u673a\u5668\u624d\u4f1a\u83b7\u5f97\u6bd4\u7279\u5e01\u3002\u5f53\u7136\u8ddf\u5f69\u7968\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u79cd\u5f69\u7968\u8fd8\u4f1a\u5347\u503c\u3002"),(0,n.kt)("h4",{id:"7612-\u793e\u533a\u6cbb\u7406"},"7.6.1.2 \u793e\u533a\u6cbb\u7406"),(0,n.kt)("h4",{id:"7614-\u7cfb\u7edf\u5347\u7ea7"},"7.6.1.4 \u7cfb\u7edf\u5347\u7ea7"),(0,n.kt)("h3",{id:"762-\u6982\u5ff5"},"7.6.2 \u6982\u5ff5"),(0,n.kt)("h4",{id:"7621-\u667a\u80fd\u5408\u7ea6"},"7.6.2.1 \u667a\u80fd\u5408\u7ea6"),(0,n.kt)("h4",{id:"7622-\u529f\u80fd\u6027\u4ee3\u5e01"},"7.6.2.2 \u529f\u80fd\u6027\u4ee3\u5e01"),(0,n.kt)("h4",{id:"7623-ico"},"7.6.2.3 ICO"),(0,n.kt)("p",null,"\u8fd9\u79cd\u4ee3\u5e01\u7ecf\u6d4e\u548c\u5f00\u53d1\u5e73\u53f0\u7684\u73b0\u8c61\uff0c\u6b63\u5f00\u59cb\u4e3a\u6211\u4eec\u5c55\u793a\u4e00\u4e2a\u5168\u65b0\u7684\u3001\u53bb\u4e2d\u5fc3\u5316\u7684\u672a\u6765\u7ecf\u6d4e\u3002\u521d\u521b\u4f01\u4e1a\u6b63\u4e3b\u5f20\u8ba1\u7b97\u673a\u5b58\u50a8\u5e73\u53f0\u3001\u62fc\u8f66\u5e94\u7528\u3001\u592a\u9633\u80fd\u53d1\u7535\u3001\u4ee5\u53ca\u5728\u7ebf\u5e7f\u544a\u5408\u7ea6\u7b49\u5728\u5185\u7684\u4ea7\u4e1a\u90fd\u4f1a\u88ab\u53bb\u4e2d\u5fc3\u5316\u5e76\u4ee5\u4ee3\u5e01\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u6570\u5b57\u8d44\u4ea7\u751a\u81f3\u53ef\u80fd\u4f1a\u6210\u4e3a\u4eba\u7c7b\u521b\u9020\u53ca\u4ea4\u6613\u4ef7\u503c\u7684\u4e3b\u8981\u65b9\u5f0f\u3002"),(0,n.kt)("h4",{id:"7624-dao\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7"},"7.6.2.4 DAO\uff08\u53bb\u4e2d\u5fc3\u5316\u81ea\u6cbb\u7ec4\u7ec7\uff09"),(0,n.kt)("h2",{id:"77-machinations"},"7.7 Machinations"),(0,n.kt)("h2",{id:"78-render-graph"},"7.8 Render Graph"),(0,n.kt)("h3",{id:"781-worldrenderer-challenges"},"7.8.1 WorldRenderer challenges"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"explicit immediate mode\uff0c\u663e\u5f0f\u7684\u7acb\u5373\u6267\u884c\u6a21\u5f0f\u4e0d\u5229\u4e8e\u7edf\u7b79\u534f\u8c03"),(0,n.kt)("li",{parentName:"ul"},"explicit resource management\uff0c\u8d44\u6e90\u7ba1\u7406\u5f88\u590d\u6742"),(0,n.kt)("li",{parentName:"ul"},"tight coupling between rendering systems"),(0,n.kt)("li",{parentName:"ul"},"limited extensibility"),(0,n.kt)("li",{parentName:"ul"},"games teams must fork/diverge to customize\uff0c\u53ef\u590d\u7528\u6027\u5dee")),(0,n.kt)("h3",{id:"782-modular-worldrenderer-goals"},"7.8.2 Modular WorldRenderer goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"High-level knowledge of the full frame"),(0,n.kt)("li",{parentName:"ul"},"improved extensibility, 1) Decoupled and composable code modules; 2) automatic resource management"),(0,n.kt)("li",{parentName:"ul"},"Better visualizations and diagnostics")),(0,n.kt)("h2",{id:"79-mlir"},"7.9 MLIR"),(0,n.kt)("p",null,"MLIR\u7684\u76ee\u6807\u662f\u6784\u5efa\u53ef\u590d\u7528\u3001\u53ef\u6269\u5c55\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\uff0c\u4ece\u800c\u89e3\u51b3\u8f6f\u4ef6\u788e\u7247\u5316\u3001\u5f02\u6784\u786c\u4ef6\u7684\u7f16\u8bd1\u3001\u51cf\u5c11DSL\u7f16\u8bd1\u5668\u7684\u6784\u5efa\u65f6\u95f4\uff0c\u5e76\u5c06\u5df2\u6709\u7684\u7f16\u8bd1\u5668\u8fde\u63a5\u5728\u4e00\u8d77\u3002"),(0,n.kt)("p",null,"MLIR\u4f7f\u5404\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e0a\u7684\u4ee3\u7801\u751f\u6210\u3001\u8f6c\u6362\u5668\u3001\u4ee5\u53ca\u4f18\u5316\u5668\u53d8\u5f97\u7b80\u5355\uff0c\u5e76\u4e14\u8d2f\u7a7f\u5e94\u7528\u7a0b\u5e8f\u57df\u3001\u786c\u4ef6\u76ee\u6807\u3001\u4ee5\u53ca\u8fd0\u884c\u65f6\u73af\u5883\u3002"),(0,n.kt)("h3",{id:"791-\u4ecb\u7ecd"},"7.9.1 \u4ecb\u7ecd"),(0,n.kt)("p",null,"\u7f16\u8bd1\u5668\u9886\u57df\u6bd4\u8f83\u6210\u719f\u7684\u5e73\u53f0\u6280\u672f\uff0c\u4e00\u4e2a\u5171\u540c\u7684\u7279\u70b9\u5c31\u662f \uff1a\u201cone size fits all\u201d\uff0ca single abstraction level to interface with the system: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},'LLVM\uff0cis roughly "C with vectors"'),(0,n.kt)("li",{parentName:"ul"},'JVM\uff0cprovides an "object-oriented type system with garbage collector"')),(0,n.kt)("p",null,"\u4e0e\u6b64\u540c\u65f6\uff0c\u8bb8\u591a\u95ee\u9898\u53ef\u80fd\u9700\u8981\u66f4\u9ad8\u6216\u8005\u66f4\u4f4e\u7684\u5c42\u6b21\u62bd\u8c61\uff0c\u6bd4\u5982\u8bf4C++\u6e90\u4ee3\u7801\u7ea7\u522b\u7684\u5206\u6790\u4f7f\u7528LLVM IR\u5c31\u4f1a\u6bd4\u8f83\u56f0\u96be\uff0c\u8bb8\u591a\u8bed\u8a00\u5305\u62ecSwift\u3001Rust\u3001Julia\u3001Fortran\u7b49\u90fd\u5f00\u53d1\u4e86\u81ea\u5df1\u7684IR\u4ee5\u89e3\u51b3\u4e00\u4e9b\u9886\u57df\u7279\u5b9a\u95ee\u9898\uff0c\u6bd4\u5982\u4e00\u4e9b\u8bed\u8a00/\u5e93\u7279\u5b9a\u7684\u4f18\u5316\u3001\u4e00\u4e9b\u57fa\u4e8e\u6d41\u7684\u7c7b\u578b\u68c0\u6d4b\uff0c\u8fd8\u6709\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684ML graphs\u7b49\u3002"),(0,n.kt)("p",null,"\u5f00\u53d1\u8fd9\u79cd\u9886\u57df\u7279\u5b9a\u7684IR\u7f3a\u4e4f\u6bd4\u8f83\u7a0b\u5e8f\u7684\u4e00\u4e9b\u5de5\u5177\uff0c\u81ea\u884c\u5f00\u53d1\u7684\u5de5\u7a0b\u5b9e\u73b0\u5f80\u5f80\u8d28\u91cf\u6bd4\u8f83\u4f4e\u3001\u7f16\u8bd1\u6162\u3001\u7f3a\u4e4f\u597d\u7684\u8c03\u8bd5\u65b9\u6cd5\u3001\u4efb\u610f\u51fabug\u7b49\u4e0d\u7a33\u5b9a\u56e0\u7d20"),(0,n.kt)("p",null,"The MLIR project1 aims to directly tackle these program- ming language design and implementation challenges\u2014by making it cheap to define and introduce new abstraction levels, and provide \u201cin the box\u201d infrastructure to solve common compiler engineering problems. MLIR does this by "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"(1) \u628a\u57fa\u4e8eSSA\u7684IR\u6570\u636e\u7ed3\u6784\u8fdb\u884c\u6807\u51c6\u5316"),(0,n.kt)("li",{parentName:"ul"},"(2) \u63d0\u4f9b\u4e00\u4e2a\u5b9a\u4e49\u7cfb\u7edf\u7528\u4e8e\u5b9a\u4e49IR dialect"),(0,n.kt)("li",{parentName:"ul"},"(3) \u63d0\u4f9b\u4e00\u4e9b\u5e7f\u6cdb\u7684\u57fa\u7840\u8bbe\u65bd\uff0c\u5305\u62ecdocumentation, parsing and printing logic, location tracking, multithreaded compilation support, pass management, etc.")),(0,n.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0cMLIR\u5f15\u5165\u7684\u4e00\u4e9b\u7cfb\u7edf\u90fd\u662f\u57fa\u4e8e\u4f20\u7edf\u7684\u4e00\u4e9b\u6982\u5ff5\u548c\u7b97\u6cd5\u4e4b\u5916\u7684\uff0c\u8fd9\u7ed9\u5b66\u672f\u7814\u7a76\u5e26\u6765\u4e86\u5f88\u591a\u673a\u4f1a\uff0c\u4e00\u4e9b \u539f\u5219\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Parsimony:")," Apply Occam\u2019s razor to builtin semantics, concepts, and programming interface. Harness both intrin- sic and incidental complexity by abstracting properties of operations and types. Specify invariants once, but verify correctness throughout. Query properties in the context of a given compilation pass. With very little builtin, this opens the door to extensibility and customization."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("em",{parentName:"li"},"Traceability:")," Retain rather than recover information. Declare rules and properties to enable transformation, rather than step wise imperative specification. Extensibility comes with generic means to trace information, enforced by extensive verification. Composable abstractions stem from \u201cglassboxing\u201d their properties and separating their roles\u2014type, control, data flow, etc."),(0,n.kt)("li",{parentName:"ul"},"Progressivity:* Premature lowering is the root of all evil. Beyond representation layers, allow multiple transformation paths that lower individual regions on demand. Together with abstraction-independent principles and interfaces, this enables reuse across multiple domains.")),(0,n.kt)("p",null,"\u8d21\u732e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4e00\u4e9b\u5df2\u7ecf\u88ab\u8bc1\u660e\u7684\u8bbe\u8ba1\u548c\u5de5\u7a0b\u539f\u5219\uff0c\u5b9a\u4f4d\u51fa\u7528\u4e8e\u89e3\u51b3\u53ef\u6269\u5c55\u548c\u6a21\u5757\u5316\u7684\u7f16\u8bd1\u7cfb\u7edf\u7684\u95ee\u9898"),(0,n.kt)("li",{parentName:"ul"},"\u4e00\u4e2a\u6ee1\u8db3\u8fd9\u4e9b\u539f\u5219\u7684\u5168\u65b0\u7684\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u63cf\u8ff0"),(0,n.kt)("li",{parentName:"ul"},"\u63a2\u7d22\u5df2\u6709\u7684\u5f15\u7528\uff0c\u5c55\u793a\u8fd9\u79cd\u57fa\u7840\u8bbe\u65bd\u7684\u901a\u7528\u6027")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Where did MLIR come from\uff1f")),(0,n.kt)("p",null,"\u89c2\u5bdf\u5230\u5f53\u4eca\u7684\u5927\u591a\u6570\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u57fa\u672c\u4e0a\u90fd\u7531\u4e00\u4e9b\u4e0d\u540c\u7684\u7f16\u8bd1\u5668\u3001\u56fe\u6280\u672f\u3001\u8fd0\u884c\u65f6 \u7ec4\u6210\uff0c\u5e76\u4e14\u5b83\u4eec\u4e4b\u95f4\u5e76\u6ca1\u6709\u5171\u4eab\u4e00\u4e9b\u901a\u7528\u7684\u57fa\u7840\u8bbe\u65bd\u6216\u8005\u8bbe\u8ba1\u539f\u5219\uff0c\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u5f00\u53d1\u6210\u672c\uff0c\u53ef\u7ef4\u62a4\u6027\u7b49\u7b49\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u5f88\u5feb\u6211\u4eec\u610f\u8bc6\u5230\u7f16\u8bd1\u5668\u5de5\u4e1a\u4e2d\u5b58\u5728\u76f8\u4f3c\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5df2\u6709\u7684\u7cfb\u7edf\u5982LLVM\u5728\u4e0d\u540c\u7684\u8bed\u8a00\u4e4b\u95f4\u8fdb\u884c\u7edf\u4e00\u548c\u96c6\u6210\u65b9\u9762\u975e\u5e38\u6210\u529f\uff0c\u4f46\u662f\u4e00\u4e9b\u9ad8\u5c42\u6b21\u7684\u8bed\u8a00\u901a\u5e38\u4f1a\u6784\u5efa\u81ea\u5df1\u7684\u9ad8\u5c42\u62bdIR\uff0c\u4ee5\u53ca\u4e3a\u8fd9\u4e9b\u9ad8\u5c42\u6b21\u62bd\u8c61\u6784\u5efa\u76f8\u4f3c\u7684\u6280\u672f"),(0,n.kt)("li",{parentName:"ul"},"\u4ee5\u6b64\u540c\u65f6\uff0cLLVM\u793e\u533a\u5374\u5728\u6323\u624e\u4e8e\u5e76\u884c\u6784\u9020\u7684\u8868\u8ff0\uff0c\u4ee5\u53ca\u600e\u6837\u5171\u4eab\u524d\u7aef\u7684lowering infrastructure")),(0,n.kt)("h3",{id:"792-\u8bbe\u8ba1\u539f\u5219"},"7.9.2 \u8bbe\u8ba1\u539f\u5219"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Little Builtin, Everything Customizable ","[Parsimony]")),(0,n.kt)("p",null,"\u6574\u4e2a\u7cfb\u7edf\u57fa\u4e8e\u51e0\u4e2a\u6700\u5c11\u7684\u57fa\u7840\u6982\u5ff5\uff0c\u8ba9\u5927\u90e8\u5206\u4e2d\u95f4\u8868\u8ff0\u53ef\u4ee5\u5b8c\u5168\u81ea\u5b9a\u4e49\u3002IR\u4e2d\u6700\u5e38\u7528\u7684\u4e00\u4e9b\u62bd\u8c61\uff0c\u5982types\u3001operations\u3001\u4ee5\u53caattributes\u5e94\u8be5\u7528\u6765\u8868\u8ff0\u8fd9\u4e9bIR\uff0c\u8fd9\u6837\u4e00\u81f4\u6027\u5c31\u6bd4\u8f83\u597d\u3002\u53ef\u5b9a\u5236\u6027\u80fd\u591f\u9002\u5e94\u9700\u6c42\u7684\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u5e94\u8be5\u4f7f\u7528\u4e00\u4e9b\u53ef\u590d\u7528\u7684\u7ec4\u4ef6\u6765\u6784\u5efaIR\uff0c\u800c\u8ba9\u8bed\u8a00\u62bd\u8c61\u652f\u6301\u8fd9\u4e9b\u4e2d\u95f4\u8bed\u8a00\u7684\u8bed\u6cd5\u548c\u8bed\u4e49\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a\u6210\u529f\u7684\u53ef\u5b9a\u5236\u6027\u7684\u6807\u51c6\u662f\uff0c\u5b83\u6709\u80fd\u529b\u53bb\u8868\u8fbe\u4e0d\u540c\u7684\u62bd\u8c61\uff0c\u6bd4\u5982\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684\u56fe\u3001\u5404\u79cdAST\u3001\u6570\u5b66\u62bd\u8c61\u4e2d\u7684\u591a\u6001\u7f16\u8bd1\u3001\u63a7\u5236\u6d41\u56fe\uff08Control Flow Graph\uff09\u3001\u6307\u4ee4\u7ea7\u7684IR\u5982LLVM IR\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\uff0c\u7531\u4e8e\u6bd4\u8f83\u7cdf\u7cd5\u7684\u517c\u5bb9\u6027\u62bd\u8c61\uff0c\u53ef\u5b9a\u5236\u80fd\u529b\u5e26\u6765\u5185\u90e8\u788e\u7247\u5316\u7684\u98ce\u9669\uff0c\u8fd9\u770b\u8d77\u6765\u6ca1\u6709\u4ec0\u4e48\u597d\u7684\u6280\u672f\u65b9\u6848\uff0c\u4f46\u662f\u7cfb\u7edf\u5e94\u8be5\u9f13\u52b1\u6211\u4eec\u8bbe\u8ba1\u53ef\u590d\u7528\u7684\u62bd\u8c61\uff0c\u5e76\u4e14\u5047\u8bbe\u6211\u4eec\u8bbe\u8ba1\u7684\u62bd\u8c61\u53ef\u80fd\u4f1a\u88ab\u7528\u4e8e\u8d85\u51fa\u6211\u4eec\u521d\u59cb\u60f3\u6cd5\u7684\u8303\u56f4\uff0c\u4ee5\u4fbf\u4e8e\u66f4\u597d\u5730\u517c\u5bb9\u5916\u90e8\u62bd\u8c61\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"SSA and Regions ","[Parsimony]")),(0,n.kt)("p",null,"\u5c3d\u7ba1SSA\u88ab\u5e7f\u6cdb\u91c7\u7528\uff0c\u5b83\u4eec\u5927\u591a\u662f\u4e00\u4e9b\u6bd4\u8f83\u5e73\u7684\u3001\u7ebf\u6027\u7684CFG\uff0c\u4f46\u662f \u4e00\u4e9b \u9ad8\u5c42\u6b21\u7684\u62bd\u8c61\u5374\u5f15\u5165\u5c06\u5d4c\u5957\u7684\u533a\u5757\uff08nested regions\uff09\u4f5c\u4e3a\u7b2c\u4e00\u7b49\u516c\u6c11\u3002\u4e3a\u4e86\u652f\u6301\u5f02\u6784\u7f16\u8bd1\uff0c\u7cfb\u7edf \u5fc5\u987b\u652f\u6301\u80fd\u591f\u8868\u8fbe\u7ed3\u6784\u5316\u7684\u63a7\u5236\u6d41\u3001\u5e76\u884c\u7ed3\u6784\u3001\u6e90\u8bed\u8a00\u4e2d\u7684 \u95ed\u5305\uff0c\u4ee5\u53ca\u8bb8\u591a\u5176\u4ed6\u76ee\u7684\u3002\u5176\u4e2d\u4e00\u4e2a\u7279\u522b\u7684\u6311\u6218\u662f\u4f7f\u57fa\u4e8eCFG\u7684\u5206\u6790\u548c\u8f6c\u6362\u7ec4\u5408\u80fd\u591f\u57fa\u4e8enested region\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u4e3a\u6b64\uff0c\u5fc5\u987b\u8981\u727a\u7272\u4e00\u4e9bLVVM\u7684\u4e00\u822c\u751a\u81f3\u6bd4\u8f83\u6743\u5a01\u7684\u5c5e\u6027\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Maintain Higher-Level Semantics ","[Progressivity]",":")),(0,n.kt)("p",null,"\u7cfb\u7edf\u5e94\u8be5\u4fdd\u7559\u4e00\u4e9b\u7ed3\u6784\u4fe1\u606f\u5e2e\u52a9\u4e0b\u4e00\u5c42\u6b21\u8fdb\u884c\u5206\u6790\u548c\u4f18\u5316\uff0c\u8fd9\u79cd\u4fe1\u606f\u5e94\u8be5\u6e10\u8fdb\u5f0f\u5730\u5411\u4e0b\u4f20\u9012\uff0c\u7ed3\u6784\u4fe1\u606f\u7684\u4e22\u5f03\u5e94\u8be5\u4f7f\u5f97\u4e0b\u4e00\u5c42\u62bd\u8c61\u521a\u597d\u4e0d\u9700\u8981\u8fd9\u6837\u7684\u7ed3\u6784\u4fe1\u606f\u3002\u4f8b\u5982\u5728transformation\u9636\u6bb5\uff0c\u6240\u6709\u7684\u7ed3\u6784\u5316\u63a7\u5236\u6d41\u4fe1\u606f\uff0c\u4f8b\u5982\u5faa\u73af\u7ed3\u6784\u90fd\u9700\u8981\u4fdd\u7559\uff0c\u79fb\u9664\u8fd9\u6837\u7684\u4fe1\u606f\u5219\u610f\u5473\u7740\u540e\u7eed\u4e0d\u4f1a\u518d\u53d1\u751ftransformation\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u7ed3\u6784\u662f\uff0c\u4e0d\u540c\u62bd\u8c61\u5c42\u6b21\u7684\u6982\u5ff5\u4f1a\u5904\u4e8e\u540c\u4e00\u4e2aIR\u4e2d\uff0c\u4f7f\u5f97\u4f4e\u5c42\u6b21\u7684\u62bd\u8c61\u53ef\u4ee5\u4f7f\u7528\u9ad8\u5c42\u6b21\u7684\u4e00\u4e9b\u4fe1\u606f\u6765\u8f85\u52a9\u8fdb\u884c\u4f18\u5316\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u7ed3\u6784\u662f\u7cfb\u7edf\u5e94\u8be5\u652f\u6301\u6e10\u8fdb\u5f0f\u5730lowering\uff0c\u5728\u591a\u4e2a\u62bd\u8c61\u5c42\u6b21\u4e4b\u95f4\u4ee5small steps\u8fdb\u884c\u63a8\u8fdb\u3002"),(0,n.kt)("p",null,"\u5f53\u524d\u7684\u7f16\u8bd1\u5668\u5176\u5b9e\u4e5f\u5df2\u7ecf\u5305\u542b\u4e86\u5f88\u591a\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Declaration and Validation [Parsimony and Traceability")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Source Location Tracking ","[Traceability]")),(0,n.kt)("h3",{id:"793-mlir-structure"},"7.9.3 MLIR structure"),(0,n.kt)("p",null,"MLIR\u8bed\u8a00\u7528\u4e8e\u63cf\u8ff0high-level structure\uff0c\u8fd9\u4e2a\u7ed3\u6784\u5176\u5b9e\u662f\u4e00\u68f5\u6811\uff0c\u5176\u4e2d\u7684\u8282\u70b9\u5305\u542boperation\u548coperand\u3002\u6240\u6709\u5bf9\u8fd9\u68f5\u6811\u7684\u64cd\u4f5c\uff0c\u6bd4\u5982 \u8f6c\u6362\u3001\u4f18\u5316\u7b49\uff0c\u90fd\u53ef\u4ee5\u8868\u793a\u4e3a\u5bf9\u6574\u4e2a\u6811\u7684\u904d\u5386\uff0cMLIR\u901a\u8fc7Pass\u6765\u5b9e\u73b0\u904d\u5386\uff0c\u6bcf\u4e2apass\u4ece\u67d0\u4e2aoperation\u5f00\u59cb\uff0c\u5927\u591a\u6570\u65f6\u5019\u6700\u9876\u5c42\u7684operation\u662fModuleOp\uff0cPassManager\u5c31\u88ab\u8bbe\u8ba1\u4e3a\u9650\u5236\u5176operation \u4e3aModuleOp\u3002"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void runOnOperation() override {\n Operation *op = getOperation();\n resetIndent();\n printOperation(op);\n }\n")),(0,n.kt)("p",null,"\u6574\u4e2a IR\u662f\u5d4c\u5957\u7684\uff0c\u9664\u4e86operation\uff0c\u8fd8\u6709 \u5176\u4ed6\u4e00\u4e9b\u5c42\u6b21\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"operation\uff0c\u53ef\u4ee5\u62e5\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u5d4c\u5957\u7684Regions"),(0,n.kt)("li",{parentName:"ul"},"Region\uff0c\u6709\u4e00\u4e2aBlock\u96c6\u5408\u5217\u8868\u7ec4\u6210"),(0,n.kt)("li",{parentName:"ul"},"Block\uff0c\u5305\u542b\u4e00\u7ec4operation\u7684\u96c6\u5408")),(0,n.kt)("p",null,"\u4e00\u4e2a\u5b9e\u4f8b\u6570\u636e\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"visiting op: 'builtin.module' with 0 operands and 0 results\n 1 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 3 operations\n visiting op: 'dialect.op1' with 0 operands and 4 results\n 1 attributes:\n - 'attribute name' : '42 : i32'\n 0 nested regions:\n visiting op: 'dialect.op2' with 0 operands and 0 results\n 2 nested regions:\n Region with 1 blocks:\n Block with 0 arguments, 0 successors, and 1 operations\n visiting op: 'dialect.innerop1' with 2 operands and 0 results\n 0 nested regions:\n Region with 3 blocks:\n Block with 0 arguments, 2 successors, and 2 operations\n visiting op: 'dialect.innerop2' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop3' with 3 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop4' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop5' with 0 operands and 0 results\n 0 nested regions:\n Block with 1 arguments, 0 successors, and 2 operations\n visiting op: 'dialect.innerop6' with 0 operands and 0 results\n 0 nested regions:\n visiting op: 'dialect.innerop7' with 0 operands and 0 results\n 0 nested regions:\n 0 nested regions:\n")),(0,n.kt)("h3",{id:"794-llvm-irspir-vmlir"},"7.9.4 LLVM IR\u3001SPIR-V\u3001MLIR"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("a",{parentName:"p",href:"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"},"https://mp.weixin.qq.com/s/G36IllLOTXXbc4LagbNH9Q"))),(0,n.kt)("h4",{id:"7941-llvm-ir"},"7.9.4.1 LLVM IR"),(0,n.kt)("p",null,"IR\u53ea\u662f\u7a0b\u5e8f\u7684\u4e00\u79cd\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u8bbe\u8ba1\u6ce8\u91cd\u652f\u6301\u53d8\u6362\u64cd\u4f5c\u3002"),(0,n.kt)("p",null,"IR\u7684\u4e09\u79cd\u5f62\u6001\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u8868\u793a\uff0c\u7528\u4e8e\u9ad8\u6548\u7684\u5206\u6790\u4e0e\u53d8\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u5b57\u8282\u7801\uff1a\u7528\u4e8e\u5b58\u50a8\u548c\u4ea4\u6362"),(0,n.kt)("li",{parentName:"ul"},"\u6587\u672c\u8868\u793a\uff1a\u7528\u4e8e \u9605\u8bfb\u548c\u7ea0\u9519")),(0,n.kt)("p",null,"LLVM\u7684\u4e0d\u8db3\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4e2d\u5fc3\u5316\u548c\u5404\u79cd\u884d\u751f\uff1aLLVM IR\u662f\u524d\u540e\u7aef\u89e3\u8026\u7684\u57fa\u7840\uff0c\u5904\u4e8e\u6838\u5fc3/\u4e2d\u5fc3\u5730\u4f4d\uff0c\u5b8c\u6574\u7684\u7f16\u8bd1\u8def\u5f84\u5fc5\u987b\u7ecf\u8fc7LLVM IR\uff0c\u5bfc\u81f4\u5176\u8fdb\u5316\u7f13\u6162"),(0,n.kt)("li",{parentName:"ul"},"\u6f14\u8fdb\u4e0e\u517c\u5bb9\u6027\uff1a\u9a71\u52a8\u7684\u5347\u7ea7\u901a\u5e38\u65e0\u6cd5\u5f97\u5230\u4fdd\u8bc1\uff0c\u56e0\u6b64\u9a71\u52a8\u4f9d\u8d56\u7684LLVM IR\u5e93\u4e5f\u53ef\u80fd\u6c38\u8fdc\u5f97\u4e0d\u5230\u5347\u7ea7")),(0,n.kt)("h4",{id:"7942-spir-v"},"7.9.4.2 SPIR-V"),(0,n.kt)("p",null,"SPIR-V\u662fKhronos API\u5171\u7528\u7684\u4e2d\u95f4\u8bed\u8a00\uff0c\u5305\u62ecVulkan\uff0cOpenGL\uff0cOpenCLass\u7b49\uff0cKhronos group\u7684\u6807\u8bed\u662f\uff1a\u94fe\u63a5\u8f6f\u4ef6\u4e0e\u786c\u4ef6\u3002"),(0,n.kt)("p",null,"LLVM IR\u76f8\u5bf9\u4e8eSPIR-V\u6709\u4e24\u4e2a\u65b9\u9762\u7684\u4e0d\u540c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u6709\u6bd4\u8f83\u597d\u7684\u7248\u672c\u7ba1\u7406\u548c\u6269\u5c55\u7ba1\u7406\uff0c\u4e5f\u6709\u7a33\u5b9a\u7684\u5b57\u8282\u7801\u8868\u793a"),(0,n.kt)("li",{parentName:"ul"},"SPIR-V\u4e3b\u8981\u7528\u4e8e\u9a71\u52a8\u5185\u90e8\u7684\u4e8c\u6b21\u7f16\u8bd1\uff08\u5728\u7ebf\u7f16\u8bd1\uff09")),(0,n.kt)("p",null,"\u7a33\u5b9a\u7684\u5b57\u8282\u7801\uff0c\u5b8c\u6574\u7684 GPU \u7f16\u8bd1\u5668\u88ab\u5206\u4e3a\u4e24\u90e8\u5206\u2014\u2014\u9996\u5148\u901a\u8fc7\u79bb\u7ebf\u5de5\u5177\u94fe\u4ece\u9ad8\u5c42\u6b21\u6e90\u4ee3\u7801\u751f\u6210 SPIR-V\uff0c\u7136\u540e\u901a\u8fc7\u9a71\u52a8\u5185\u90e8\u7f16\u8bd1\u5668\u5c06 SPIR-V \u5728\u7ebf\u7f16\u8bd1\u6210\u673a\u5668\u7801\u3002\u867d\u7136\u50cf LLVM IR \u4e00\u6837\u5728\u6574\u4e2a\u7f16\u8bd1\u6d41\u7a0b\u4e2d\u5904\u4e8e\u201c\u4e2d\u95f4\u201d\u4f4d\u7f6e\uff0cSPIR-V \u66f4\u4fa7\u91cd\u4e8e\u9a71\u52a8\u5185\u90e8\u4e8c\u6b21\u7f16\u8bd1\u7684\u9ad8\u6548\uff0c\u56e0\u4e3a\u8fd9\u4e00\u6b65\u5728\u8fd0\u884c\u65f6\u8fdb\u884c\u3002\u6240\u4ee5 SPIR-V \u7684\u6838\u5fc3\u662f\u5176\u5b57\u8282\u7801\u3002\u5176\u7f16\u7801\u6709\u5f88\u591a\u7b80\u5316\u9a71\u52a8\u4e8c\u6b21\u7f16\u8bd1\u7684\u8003\u91cf\uff0c\u50cf\u662f\u7528\u5404\u79cd\u63d0\u524d\u7684\u663e\u793a\u58f0\u660e\u6765\u907f\u514d\u8fd0\u884c\u65f6\u590d\u6742\u7684\u5206\u6790\u3002SPIR-V \u5e76\u6ca1\u6709\u5728\u89c4\u8303\u4e2d\u6307\u5b9a\u5185\u5b58\u8868\u793a\u6216\u8005\u6587\u672c\u8868\u793a\uff0c\u8fd9\u4e9b\u90fd\u662f\u5b9e\u73b0 SPIR-V \u6807\u51c6\u89c4\u8303\u7684\u5de5\u5177\u94fe\u81ea\u884c\u5b9a\u4e49\u7684\u3002\u6bd4\u5982 SPIRV-Tools \u6709\u5176\u81ea\u5df1\u7684\u5185\u5b58\u8868\u793a\u548c\u6587\u672c\u8868\u793a\uff0c \u540c\u6837 MLIR \u4e2d\u7684 SPIR-V dialect \u4e5f\u662f\u3002"),(0,n.kt)("p",null,"GPU\u9886\u57df\u4e13\u7528\uff1a\u5176\u5b9e SPIR-V \u7684 IR \u90e8\u5206\u548c LLVM IR \u76f8\u5dee\u5e76\u4e0d\u592a\u5927\u3002SPIR-V \u501f\u9274\u4e86\u5f88\u591a LLVM IR \u7684\u8bbe\u8ba1\u2014\u2014\u5b83\u540c\u6837\u662f\u7531\u63a7\u5236\u6d41\u3001\u57fa\u672c\u5757\u3001\u4ee5\u53ca\u9759\u6001\u5355\u8d4b\u503c\u6765\u8868\u793a\u7a0b\u5e8f\u3002\u6307\u4ee4\u7684\u7c92\u5ea6\u548c LLVM IR \u4e5f\u76f8\u5dee\u4e0d\u5927\u3002SPIR-V \u4e2d\u72ec\u7279\u7684\u90e8\u5206\u5728\u4e8e\u5bf9\u5f88\u591a GPU \u6982\u5ff5\u7684\u539f\u751f\u652f\u6301\u3002\u8fd9\u79cd\u652f\u6301\u901a\u8fc7\u5f88\u591a SPIR-V \u72ec\u6709\u7684\u673a\u5236\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982 decorations, builtins, \u4ee5\u53ca\u7279\u6b8a\u7684\u6307\u4ee4\uff08\u50cf\u662f\u5bfc\u6570\u8ba1\u7b97\u3001\u56fe\u50cf\u53d6\u6837\uff09\u3002\u53e6\u5916\u4e3a\u4e86\u652f\u6301\u56fe\u5f62\u56fe\u50cf\u548c\u9ad8\u6027\u80fd\u8ba1\u7b97\u7684\u4e24\u79cd\u4f7f\u7528\u573a\u666f\uff0c SPIR-V \u4e2d\u6709\u8bb8\u591a\u6267\u884c\u6a21\u578b\u548c\u6a21\u5f0f\u3002\u5f53\u7136\uff0c\u5bf9\u56fe\u5f62\u56fe\u50cf\u4e5f\u6709 structured control flow \u7684\u7279\u6b8a\u9700\u6c42\u3002"),(0,n.kt)("h4",{id:"7943-mlir"},"7.9.4.3 MLIR"),(0,n.kt)("p",null,"\u4e00\u4e2a GPU \u4e3a\u4e3b\u7684\u6807\u51c6\u89c4\u8303\u9700\u8981\u539f\u751f\u652f\u6301\u5404\u79cd GPU \u6982\u5ff5\uff0c\u80fd\u591f\u63d0\u4f9b\u4e0d\u540c\u7b49\u7ea7\u7684\u6269\u5c55\u9700\u6c42\uff0c \u4ee5\u53ca\u63d0\u4f9b\u7a33\u5b9a\u548c\u517c\u5bb9\u7684\u5b57\u8282\u7801\u3002\u8fd9\u4e9b\u9700\u6c42\u5e76\u4e0d\u7b26\u5408 LLVM IR \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u6240\u4ee5 Khronos Group \u63a8\u51fa\u4e86 SPIR-V\u3002\u4f46\u662f\u8bbe\u8ba1\u4e00\u5957\u4e2d\u95f4\u8868\u793a\u53ea\u662f\u4e2a\u5f00\u59cb\uff0c\u56f4\u7ed5\u5176\u5f00\u53d1\u548c\u7ef4\u62a4\u6574\u5957\u5de5\u5177\u94fe\u9700\u8981\u6301\u7eed\u4e0d\u65ad\u7684\u5de5\u7a0b\u6295\u5165\u3002SPIR-V \u4e0e LLVM IR \u5b8c\u5168\u65e0\u5173\uff0cSPIR-V \u7684\u7f16\u8bd1\u5668\u6808\u65e0\u6cd5\u5229\u7528\u73b0\u6709\u7684 LLVM \u5e93\u3002\u6240\u4ee5 SPIR-V \u7684\u6574\u4e2a\u6808\u662f\u4ece\u5934\u5f00\u59cb\u72ec\u7acb\u5f00\u53d1\u7684\uff0c\u4ece\u6c47\u7f16\u3001\u53cd\u6c47\u7f16\uff0c\u4e00\u6b65\u6b65\u5230\u5404\u79cd\u8bed\u8a00\u7684\u7f16\u8bd1\u5668\u548c\u4f18\u5316\u3002\u800cMLIR\u6070\u597d\u53ef\u4ee5\u5e2e\u52a9\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316 (infrastructurization)"),"\uff0cMLIR \u662f\u7528\u6765\u5f00\u53d1\u7f16\u8bd1\u5668\u57fa\u7840\u8bbe\u65bd\u3002\u5b83\u63d0\u4f9b\u4e00\u7cfb\u5217\u53ef\u590d\u7528\u7684\u6613\u6269\u5c55\u7684\u57fa\u7840\u7ec4\u4ef6\uff0c\u7528\u6765\u642d\u5efa\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u3002\u5728 LLVM IR \u548c SPIR-V \u4e2d\uff0c\u6211\u4eec\u6709\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\uff0c\u5176\u4e2d\u542b\u6709\u5b8c\u5907\u7684\u6307\u4ee4\u96c6\u6765\u7f16\u8bd1\u6240\u6709\u7684 CPU \u548c GPU \u7a0b\u5e8f\u3002MLIR \u4e2d\u5219\u6ca1\u6709\u5b8c\u5168\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\u7684\u4e2d\u95f4\u8868\u793a\u3002MLIR \u63d0\u4f9b\u57fa\u7840\u8bbe\u65bd\u6765\u5e2e\u52a9\u5b9a\u4e49 operation \u4ee5\u53ca\u5c06\u903b\u8f91\u76f8\u5173\u7684 operation \u7ec4\u5408\u6210 dialect\u3002\u53e6\u5916\uff0cMLIR \u4e5f\u63d0\u4f9b\u4e00\u4e9b\u666e\u9002\u7684 pattern \u6216\u8005 pass\uff0c\u8fd9\u4e9b pattern \u6216\u8005 pass \u5e76\u4e0d\u4e0e\u5177\u4f53\u7684 operation \u7ed1\u5b9a\uff0c\u80fd\u591f\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"\u65e0\u8bba\u662f\u5bf9 operation \u8fd8\u662f pattern/pass \u7684\u652f\u6301\u90fd\u8981\u6c42 MLIR \u4ee5\u66f4\u52a0\u7ec6\u7684\u7c92\u5ea6\u770b\u5f85\u7f16\u8bd1\u5668\u3002\u5728 MLIR \u4e2d\uff0coperation \u4e0d\u518d\u662f\u6700\u57fa\u7840\u7684\u90e8\u4ef6\uff0c\u7c92\u5ea6\u8fdb\u4e00\u6b65\u7ec6\u5316\u5230\u7c7b\u578b, \u503c, attribute, region, \u4ee5\u53ca interface (\u4f8b\u5982 attribute/type/operation interface).","[8]"),(0,n.kt)("p",null,"Operation \u53ef\u4ee5\u6709\u4efb\u610f\u6570\u91cf\u7684\u8f93\u5165\u3001\u8f93\u51fa\u3001attribute\uff0c\u5e76\u5305\u542b\u4efb\u610f\u6570\u91cf\u7684 region\u3002\u5176\u4e2d region \u80fd\u591f\u8868\u793a operation \u4e4b\u95f4\u7684\u5d4c\u5957\u5173\u7cfb\uff0c\u4ece\u800c\u7b80\u5316\u7f16\u8bd1\u5668\u7684\u5206\u6790\u548c\u8f6c\u6362\u3002Operation \u53ef\u4ee5\u5b9e\u73b0 operation interface\uff0cpattern \u548c pass \u7ed1\u5b9a\u7684\u662f operation interface\uff0c\u7531\u6b64\u800c\u5b9e\u73b0\u4e0e\u5177\u4f53 operation \u7684\u89e3\u7ed1\u5e76\u505a\u5230\u81ea\u9002\u5e94\u3002"),(0,n.kt)("p",null,"MLIR \u91cc\u9762\u7684\u6982\u5ff5\u90fd\u8bbe\u8ba1\u7684\u6bd4\u8f83\u62bd\u8c61\uff0c\u76ee\u7684\u662f\u80fd\u6bd4\u8f83\u597d\u5730\u6620\u5c04\u5230\u4e0d\u540c\u7684\u9886\u57df\u548c\u573a\u666f\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dialects, dialects, dialects"),"\uff0c\u5f53\u7136\uff0c\u8fd9\u5957\u57fa\u7840\u8bbe\u65bd\u5b58\u5728\u7684\u76ee\u7684\u662f\u5e2e\u52a9\u642d\u5efa\u6700\u7ec8\u7f16\u8bd1\u5668\u3002\u6211\u4eec\u5728\u5199 C++ \u7a0b\u5e8f\u7684\u7684\u65f6\u5019\u4f1a\u8c03\u7528 STL \u6216\u8005\u66f4\u52a0\u9ad8\u5c42\u6b21\u7684\u5e93\uff0c\u5f88\u5c11\u4f1a\u4ece\u5934\u5f00\u59cb\u5b9e\u73b0\u6240\u6709\u7684\u7ec6\u8282\u3002\u53e6\u5916\uff0c\u57fa\u7840\u8bbe\u65bd\u4e5f\u9700\u8981\u4e0e\u5176\u652f\u6301\u7684\u9886\u57df\u534f\u540c\u53d1\u5c55\uff0c\u56e0\u4e3a\u4f7f\u7528\u573a\u666f\u4e2d\u4f1a\u63d0\u4f9b\u5f88\u591a\u9700\u6c42\u3002\u56e0\u6b64\uff0cMLIR \u4ee3\u7801\u5e93\u4e2d\u81ea\u5e26\u5f88\u591a\u7528\u6765\u7ed9\u5404\u79cd\u5c42\u7ea7\u6982\u5ff5\u5efa\u6a21\u7684 dialect\u3002","[9]"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684 dialect \u751f\u6001\u76ee\u524d\u8fd8\u5728\u6269\u5f20\u6f14\u8fdb\u9636\u6bb5\uff0c\u4f46 dialect \u4e4b\u95f4\u7684\u7ec4\u7ec7\u7ed3\u6784\u4ee5\u53ca\u6709\u4e9b dialect \u5df2\u7ecf\u76f8\u5bf9\u7a33\u5b9a\u4e86\u3002"),"\u6bd4\u5982\u6211\u4eec\u6709 LLVM \u548c SPIR-V dialect \u4f5c\u4e3a\u4e0e\u5176\u4ed6\u7cfb\u7edf\u8f6c\u6362\u7684\u8fb9\u754c dialect\u3002\uff08\u5176\u5b9e MLIR \u53ef\u4ee5\u540c\u65f6\u8868\u793a LLVM IR \u548c SPIR-V \u8fd9\u4e00\u70b9\u4e5f\u8868\u660e\u4e86 MLIR \u7684\u57fa\u7840\u8bbe\u65bd\u89d2\u8272\u3002\uff09 \u62bd\u8c61\u5c42\u6b21\u5c45\u4e2d\u7684\u6709 Linalg, Tensor, Vector, SCF dialect\uff0c\u5b83\u4eec\u534f\u540c\u5408\u4f5c\u7528\u6765\u751f\u6210\u4ee3\u7801\u3002\u53e6\u5916\uff0cMLIR \u4e2d\u8fd8\u6709 Affine, Math, Arithmetic dialect \u7528\u6765\u63cf\u8ff0\u5e95\u5c42\u8ba1\u7b97\u3002\u5728 AI \u6846\u67b6\u5c42\u9762\uff0c\u6709 TensorFlow, TFLite, MHLO, Torch, TOSA \u8fdb\u884c\u5bf9\u63a5\u548c\u5bfc\u5165\u6a21\u578b\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u7528\u9014\u7684 dialect\uff0c\u50cf\u662f PDL \u7528\u6765\u5b9a\u4e49\u7f16\u8bd1\u5668\u8f6c\u6362\u7b49\u7b49\u3002"),(0,n.kt)("p",null,"Alex \u4e4b\u524d\u5728 MLIR \u8bba\u575b\u4e0a\u5206\u4eab\u7684\u5404 dialect \u4e4b\u95f4\u7684\u5173\u7cfb","[10]","\u975e\u5e38\u503c\u5f97\u4e00\u8bfb\uff0c\u4e4b\u540e\u6211\u4e5f\u4f1a\u5199\u4e0b\u6211\u7684\u7406\u89e3\u3002\u8fd9\u4e9b\u5404\u5f0f\u5404\u6837\u7684 dialect \u548c\u4ee5\u540e\u5305\u88c5\u5b83\u4eec\u800c\u4ea7\u751f\u7684\u5c40\u90e8\u6216\u8005\u5b8c\u6574\u7684\u8f6c\u6362\u6d41\u7a0b\u5c06\u6781\u5927\u7b80\u5316\u9886\u57df\u76f8\u5173\u7f16\u8bd1\u5668\u7684\u5f00\u53d1\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8fdb\u4e00\u6b65\u89e3\u8026\u7f16\u8bd1\u5668\u548c\u4e2d\u95f4\u8868\u793a"),"\uff1a\u5176\u5b9e",(0,n.kt)("strong",{parentName:"p"},"\u57fa\u7840\u8bbe\u65bd\u5316\u4ee5\u53ca\u7531\u6b64\u4ea7\u751f\u7684\u5927\u91cf dialect \u90fd\u662f\u8fdb\u4e00\u6b65\u89e3\u8026\u548c\u6a21\u5757\u5316\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u7684\u4e00\u79cd\u81ea\u7136\u7ed3\u679c"),"\u3002\u552f\u4e00\u7684\u4e2d\u95f4\u8868\u793a\u88ab\u8bb8\u591a\u4ee5 dialect \u5f62\u6001\u5b58\u5728\u7684\u90e8\u5206\u7684\u4e2d\u95f4\u8868\u793a\u53d6\u4ee3\u3002\u6ca1\u6709\u67d0\u4e2a\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u518d\u5904\u4e8e\u4e2d\u5fc3\u5730\u4f4d\uff0c\u90fd\u662f\u6309\u9700\u7ec4\u5408\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\uff0c\u8fdb\u4e00\u6b65\u89e3\u8026\u4e2d\u95f4\u8868\u793a\u4e5f\u8ba9\u6211\u4eec\u53ef\u4ee5\u7075\u6d3b\u5730\u6839\u636e\u9886\u57df\u8fdb\u884c\u8bbe\u8ba1\u548c\u6298\u4e2d\u3002\u6211\u4eec\u53ea\u9700\u9009\u53d6\u6240\u9700\u7684\u90e8\u5206\u4e2d\u95f4\u8868\u793a\u6765\u7ec4\u5408\u6210\u5b8c\u6574\u7f16\u8bd1\u5668\uff0c\u4e0d\u518d\u9700\u8981\u5168\u76d8\u63a5\u6536\u50cf LLVM IR \u4e00\u6837\u7684\u4e00\u5957\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u3002\u56e0\u4e3a interface \u7684\u5b58\u5728\uff0c\u6269\u5c55\u6a21\u5757\u7684\u66f4\u80fd\u4e5f\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u2014\u2014\u6211\u4eec\u65e2\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 operation \u6765\u5b9e\u73b0\u5df2\u6709\u7684 interface\uff0c\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u65b0\u7684 interface \u7136\u540e\u652f\u6301\u73b0\u6709 operation\u3002"),(0,n.kt)("p",null,"\u6362\u8a00\u4e4b\uff0cLLVM IR \u5929\u7136\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u7edf\u4e00\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0cMLIR \u7684\u57fa\u7840\u8bbe\u65bd\u548c dialect \u751f\u6001\u5219\u5929\u7136\u662f\u53bb\u4e2d\u5fc3\u5316\u5e76\u4e14\u504f\u597d\u79bb\u6563\u7684\u7f16\u8bd1\u6d41\u7a0b\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u7684\u4e00\u822c\u53d1\u5c55\u8d8b\u52bf\u662f\u4ece\u5355\u4e00\u7684\u5f3a\u8026\u5408\u6574\u4f53\u5230\u9002\u7528\u4e0d\u540c\u573a\u666f\u7684\u591a\u79cd\u591a\u6837\u7684\u9009\u62e9\u3002\u5bf9\u4e8e\u6280\u672f\u6808\u7684\u4e0a\u5c42\u800c\u8a00\uff0c\u8fd9\u5c24\u5176\u660e\u663e\uff0c\u56e0\u4e3a\u8d8a\u5f80\u4e0a\u8d8a\u63a5\u8fd1\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\uff0c\u800c\u7528\u6237\u548c\u5546\u4e1a\u9700\u6c42\u672c\u8eab\u5c31\u5404\u5f0f\u5404\u6837\uff0c\u7531\u5c42\u51fa\u4e0d\u7a77\u7684\u524d\u7aef\u6846\u67b6\u53ef\u89c1\u4e00\u6591\u3002"),(0,n.kt)("p",null,"\u6280\u672f\u6808\u7684\u5e95\u5c42\u4e00\u822c\u76f8\u5bf9\u7a33\u5b9a\u3002\u5c11\u6570\u51e0\u79cd\u786c\u4ef6\u67b6\u6784\u3001\u7f16\u8bd1\u5668\u548c\u64cd\u4f5c\u7cfb\u7edf\u7edf\u6cbb\u5f88\u591a\u5e74\u3002\u4f46\u534a\u5bfc\u4f53\u8fdb\u5c55\u7684\u53d8\u6162\u548c\u8ba1\u7b97\u9700\u6c42\u7684\u7206\u70b8\u5f0f\u589e\u957f\u4e5f\u5728\u9a71\u52a8\u7740\u5e95\u5c42\u6280\u672f\u7684\u53d8\u9769\u3002\u73b0\u5728\u4f9d\u7136\u4f9d\u9760\u901a\u7528\u67b6\u6784\u548c\u666e\u9002\u4f18\u5316\u5f88\u96be\u518d\u6ee1\u8db3\u5404\u79cd\u9700\u6c42\uff0c\u5f00\u53d1\u9886\u57df\u4e13\u7528\u7684\u6574\u4f53\u7684\u89e3\u51b3\u65b9\u6848\u662f\u4e00\u6761\u51fa\u8def\u3002RISC-V \u5728\u82af\u7247\u6307\u4ee4\u96c6\u5c42\u6b21\u63a2\u7d22\u6a21\u5757\u5316\u548c\u5b9a\u5236\u5316\uff0cMLIR \u5219\u662f\u5728\u7f16\u8bd1\u5668\u4ee5\u53ca\u4e2d\u95f4\u8868\u793a\u5c42\u9762\u505a\u7c7b\u4f3c\u63a2\u7d22\u3002\u4e24\u8005\u8054\u624b\u4f1a\u7ed9\u5e95\u5c42\u6280\u672f\u6808\u5e26\u6765\u4f55\u79cd\u9769\u65b0\u662f\u4e00\u4e2a\u503c\u5f97\u62ed\u76ee\u4ee5\u5f85\u7684\u4e8b\u60c5\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u8de8\u7cfb\u7edf\u8fb9\u754c\u7684\u6e10\u8fdb\u5f0f\u4ee3\u7801\u8868\u793a\u9012\u964d")),(0,n.kt)("p",null,"\u5728\u7ed3\u675f\u672c\u7ae0\u4e4b\u524d\uff0c\u518d\u5570\u55e6\u6700\u540e\u4e00\u70b9\u3002\u5176\u5b9e\u6211\u4eec\u53ef\u4ee5\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u770b\u5f85 MLIR \u5e26\u6765\u7684\u89e3\u8026\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u6c34\u5e73\u65b9\u5411\u4e0a\uff0cdialect \u628a\u5b8c\u6574\u4e2d\u95f4\u8868\u793a\u6253\u6563\u6210\u8bb8\u591a\u5c40\u90e8\u4e2d\u95f4\u8868\u793a\uff1b\u5782\u76f4\u65b9\u5411\u4e0a\uff0cMLIR \u8ba9\u6211\u4eec\u53ef\u4ee5\u5bf9\u5904\u4e8e\u4e0d\u540c\u5c42\u7ea7\u7684\u6982\u5ff5\u8fdb\u884c\u5efa\u6a21"),"\u3002\u8fd9\u5bf9\u9886\u57df\u4e13\u7528\u7f16\u8bd1\u5668\u662f\u975e\u5e38\u6709\u7528\u7684\uff0c\u56e0\u4e3a\u9886\u57df\u4e13\u7528\u8bed\u8a00\u4e00\u822c\u662f\u9ad8\u5ea6\u62bd\u8c61\u7684\u58f0\u660e\u5f0f\u8bed\u8a00\uff0c\u53ea\u63cf\u8ff0\u4efb\u52a1\uff0c\u9700\u8981\u7f16\u8bd1\u5668\u5c06\u5176\u8f6c\u6362\u6210\u5177\u4f53\u7684\u547d\u4ee4\u5f0f\u673a\u5668\u6307\u4ee4\u3002\u4e00\u6b65\u8de8\u8d8a\u8fd9\u4e2a\u5de8\u5927\u7684\u62bd\u8c61\u5dee\u8ddd\u662f\u975e\u5e38\u96be\u7684\uff0c\u5229\u7528\u591a\u7ea7\u62bd\u8c61\u548c\u5efa\u6a21\u6765\u8fdb\u884c\u6e10\u8fdb\u5f0f lowering \u662f\u66f4\u52a0\u9002\u5408\u7684\u65b9\u5f0f\u3002\u6211\u4eec\u53ef\u4ee5\u5206\u79bb\u5404\u4e2a\u5c42\u6b21\u5173\u6ce8\u7684\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u4e5f\u66f4\u52a0\u7684\u6613\u5f00\u53d1\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u8fd9\u5e76\u4e0d\u662f\u4ec0\u4e48\u5168\u65b0\u7684\u6982\u5ff5\uff0c\u5728\u4e0d\u540c\u7684\u9879\u76ee\u4e2d\u6211\u4eec\u5df2\u7136\u770b\u5230\u5404\u79cd\u7c7b\u4e2d\u95f4\u8868\u793a\u7684\u8bbe\u7f6e\uff0c\u50cf\u662f Clang AST \u6216\u8005\u5404\u79cd\u673a\u5668\u5b66\u4e60\u6846\u67b6\u4e2d\u7684\u8ba1\u7b97\u56fe\u3002",(0,n.kt)("strong",{parentName:"p"},"MLIR \u7684\u4f18\u52bf\u662f\u4f7f\u7528\u540c\u6837\u7684\u57fa\u7840\u8bbe\u65bd\u5c06\u8fd9\u4e9b\u4e0d\u540c\u5c42\u6b21\u7684\u8868\u793a\u8fde\u63a5\u8d77\u6765\uff0c\u8ba9\u5b83\u4eec\u4e4b\u95f4\u7684\u4fe1\u606f\u6d41\u901a\u53d8\u5f97\u66f4\u52a0\u987a\u7545\u3002"),"\u5176\u5b9e\u73b0\u4ee3\u590d\u6742\u7cfb\u7edf\u7684\u5f00\u53d1\u591a\u662f\u9009\u53d6\u5404\u79cd\u5b50\u7cfb\u7edf\u7136\u540e\u5c06\u5176\u7ec4\u5408\u3002\u5c06\u6765\u81ea\u524d\u4e00\u4e2a\u5b50\u7cfb\u7edf\u7684\u6570\u636e\u8fdb\u884c\u9a8c\u8bc1\u3001\u8f6c\u5316\u7136\u540e\u4f20\u9012\u7ed9\u4e0b\u4e00\u4e2a\u5b50\u7cfb\u7edf\u6d88\u8017\u6389\u5f88\u591a\u5de5\u7a0b\u8d44\u6e90\u3002\u5982\u679c\u6240\u6709\u5b50\u7cfb\u7edf\u4f7f\u7528\u76f8\u540c\u7684\u5185\u90e8\u57fa\u7840\u8bbe\u65bd\uff0c\u8fd9\u4e9b\u8d44\u6e90\u6295\u5165\u5c31\u90fd\u53ef\u4ee5\u8282\u7701\u4e0b\u6765\uff0c\u53e6\u5916\uff0c\u4f7f\u7528\u76f8\u540c\u5de5\u5177\u4e5f\u4f1a\u4f7f\u5f97\u8de8\u7ec4\u8de8\u9879\u76ee\u7684\u6c9f\u901a\u534f\u8c03\u53d8\u5f97\u66f4\u52a0\u7b80\u5355\u3002"),(0,n.kt)("h3",{id:"795-mlir-dialect"},"7.9.5 MLIR Dialect"),(0,n.kt)("h4",{id:"7951-\u57fa\u7840\u7ec4\u4ef6"},"7.9.5.1 \u57fa\u7840\u7ec4\u4ef6"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u57fa\u672c\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002 \u5728\u8fd9\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4e00\u7cfb\u5217\u4e92\u8865\u534f\u4f5c\u7684\u64cd\u4f5c\uff0c\u548c\u8fd9\u4e9b\u64cd\u4f5c\u6240\u9700\u7684\u7c7b\u578b (type) \u4ee5\u53ca\u5c5e\u6027 (attribute) \u7b49\u7b49\u3002 \u7279\u5b9a\u7684\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u53ea\u9700\u8981\u7ec4\u5408\u73b0\u6709\u7684 dialect\uff0c\u5e76\u52a0\u4ee5\u81ea\u5df1\u7684\u6269\u5c55\u6216\u8005\u5b9a\u5236\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5185\u5d4c\u7ed3\u6784\u7684\u64cd\u4f5c\uff08Operations carrying structures\uff09")),(0,n.kt)("p",null,"MLIR \u4e2d\u64cd\u4f5c\u7684\u4e00\u4e2a\u7a81\u51fa\u7279\u6027\u662f\u53ef\u4ee5\u901a\u8fc7",(0,n.kt)("em",{parentName:"p"},"region"),"[2]","\u6765\u5185\u5d4c (nest) \u7ed3\u6784 (structure)\u3002MLIR \u4e2d\u5f88\u591a\u53ef\u4ee5\u6dfb\u52a0\u8d1f\u8f7d\u64cd\u4f5c (payload op) \u7684\u7ed3\u6784\u5316\u64cd\u4f5c (structured op) \u90fd\u4f9d\u8d56\u4e8e\u8fd9\u79cd\u7279\u6027\u3002\u8fd9\u4e9b\u7ed3\u6784\u5316\u64cd\u4f5c\u672c\u8eab\u53ea\u5b9a\u4e49\u67d0\u79cd\u7ed3\u6784\u6027\u8bed\u4e49\uff0c\u6bd4\u5982\u63a7\u5236\u6d41 (control flow)\u3002\u5177\u4f53\u7684\u8ba1\u7b97\u6027\u8bed\u4e49\u5219\u6765\u81ea\u4e8e\u6dfb\u52a0\u7684\u8d1f\u8f7d\u64cd\u4f5c\u3002\u7ed3\u6784\u5316\u64cd\u4f5c\u4e0e\u8d1f\u8f7d\u64cd\u4f5c\u76f8\u4e92\u7ec4\u5408\u3001\u76f8\u4e92\u6269\u5c55\u3002\u4e00\u4e2a\u7a81\u51fa\u7684\u4f8b\u5b50\u662f linalg.generic op\uff1b\u5f53\u7136\u51fd\u6570 (function) \u4ee5\u53ca\u6a21\u5757 (module) \u5176\u5b9e\u90fd\u662f\u8fd9\u79cd\u7ed3\u6784\u5316\u64cd\u4f5c\u3002Region \u7ed9\u8d1f\u8f7d\u64cd\u4f5c\u8bbe\u7f6e\u4e86\u660e\u786e\u7684\u8fb9\u754c\uff0c\u8fd9\u6709\u52a9\u4e8e\u7b80\u5316\u4e2d\u95f4\u8868\u793a\u8f6c\u6362\u65f6\u6240\u9700\u7684\u6a21\u5f0f\u5339\u914d\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ee3\u8868\u62bd\u8c61\u5c42\u6b21\u7684\u7c7b\u578b\uff08Types signaling abstraction levels\uff09")),(0,n.kt)("p",null,"\u64cd\u4f5c\u5f52\u6839\u5230\u5e95\u53ea\u662f\u9488\u5bf9\u67d0\u79cd\u7c7b\u578b\u7684\u503c (value) \u6240\u8fdb\u884c\u7684\u67d0\u79cd\u8ba1\u7b97 (computation)\u3002\u7c7b\u578b\u624d\u662f\u62bd\u8c61\u5c42\u6b21 (abstraction level) \u7684\u4ee3\u8868\u3002\u4e3e\u4e2a\u6817\u5b50\uff0c\u5f20\u91cf (tensor)\u3001buffer\u3001\u4ee5\u53ca\u6807\u91cf (scalar) \u90fd\u53ef\u4ee5\u652f\u6301\u52a0\u51cf\u4e58\u9664\u7b49\u5404\u79cd\u64cd\u4f5c\u3002\u8fd9\u4e9b\u64cd\u4f5c\u5728\u672c\u8d28\u4e0a\u5e76\u6ca1\u6709\u591a\u5c11\u533a\u522b\uff0c\u4f46\u5b83\u4eec\u660e\u663e\u5c5e\u4e8e\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002\u5f20\u91cf\u5b58\u5728\u4e8e\u673a\u5668\u5b66\u4e60\u6846\u67b6\u6216\u8005\u7f16\u7a0b\u6a21\u578b (programming model) \u8fd9\u4e00\u9ad8\u5c42\u62bd\u8c61\u3002Buffer \u5b58\u5728\u4e8e\u6267\u884c\u7cfb\u7edf (system) \u548c\u5185\u5b58\u4f53\u7cfb (memory hierarchy) \u8fd9\u4e00\u4e2d\u5c42\u62bd\u8c61\u3002\u6807\u91cf\u5b58\u5728\u4e8e\u6267\u884c\u82af\u7247 (chip) \u548c\u5bc4\u5b58\u5668 (register) \u8fd9\u4e00\u5e95\u5c42\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u4e00\u4e2a dialect \u53ef\u4ee5\u81ea\u7531\u5730\u5b9a\u4e49\u5404\u79cd\u7c7b\u578b\u3002 MLIR \u7684\u6838\u5fc3\u57fa\u7840\u8bbe\u65bd\u4f1a\u65e0\u5dee\u522b\u5730\u5bf9\u5f85\u4ee5\u53ca\u7528\u7edf\u4e00\u7684\u673a\u5236\u652f\u6301\u6765\u81ea\u4e0d\u540c dialect \u7684\u7c7b\u578b\u3002 \u6bd4\u5982\uff0c",(0,n.kt)("em",{parentName:"p"},"type conversion")," ","[3]","\u5c31\u662f\u901a\u7528\u7684\u8f6c\u6362\u7c7b\u578b\u7684\u673a\u5236\u3002 Dialect A \u53ef\u4ee5\u91cd\u7528\u6765\u81ea dialect B \u7684\u7c7b\u578b\uff0c\u4e5f\u53ef\u4ee5\u5bf9\u5176\u8fdb\u4e00\u6b65\u6269\u5c55\u548c\u7ec4\u5408\uff0c\u4f8b\u5982\u5c06\u57fa\u7840\u7c7b\u578b (primitive type) \u653e\u5165\u5bb9\u5668\u7c7b\u578b\u4e2d (container type)\u3002 ",(0,n.kt)("strong",{parentName:"p"},"\u4e00\u4e2a dialect \u4e5f\u53ef\u4ee5\u5b9a\u4e49\u89c4\u5219\u6765\u5b9e\u73b0\u81ea\u8eab\u7c7b\u578b\u548c\u5176\u4ed6 dialect \u7c7b\u578b\u7684\u76f8\u4e92\u8f6c\u6362\u3002 \u628a\u8fd9\u4e9b\u89c4\u5219\u52a0\u5165\u5230 type converter \u4e2d\u540e\uff0c\u6240\u6709\u7684\u89c4\u5219\u4f1a\u76f8\u4e92\u7ec4\u5408\uff0c\u7531\u6b64 type conversion \u673a\u5236\u4f1a\u81ea\u884c\u627e\u51fa\u8f6c\u6362\u901a\u8def\u6765\u5b9e\u73b0\u8f6c\u6362\u3002")," \u4e0d\u8fc7\u603b\u800c\u8a00\u4e4b\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u76f8\u8f83\u4e8e\u64cd\u4f5c\u7684\u7ec4\u5408\u4e0e\u8f6c\u6362\uff0c\u7c7b\u578b\u7684\u7ec4\u5408\u4ee5\u53ca\u8f6c\u6362\u901a\u5e38\u6709\u66f4\u591a\u9650\u5236\u4e5f\u66f4\u52a0\u590d\u6742\uff0c\u6bd5\u7adf\u7c7b\u578b\u7684\u5339\u914d\u5960\u5b9a\u4e86\u64cd\u4f5c\u53ef\u4ee5\u8854\u63a5\u7684\u57fa\u7840\u3002")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4e0d\u540c\u5efa\u6a21\u7c92\u5ea6\u7684Dialect\uff08Dialects as modeling granularity\uff09")),(0,n.kt)("p",null,"\u901a\u8fc7\u5b9a\u4e49\u548c\u7ec4\u7ec7\u64cd\u4f5c\u548c\u7c7b\u578b\uff0cdialect \u7ed9\u7f16\u8bd1\u5668\u63d0\u4f9b\u4e86\u7c97\u7c92\u5ea6\u9ad8\u5c42\u6b21\u7684\u5efa\u6a21\u65b9\u5f0f\u3002\u5982\u679c\u4e24\u4e2a dialect \u6240\u6d89\u53ca\u7684\u7c7b\u578b\u76f8\u540c\uff0c\u90a3\u4e48\u5b83\u4eec\u57fa\u672c\u5c5e\u4e8e\u7edf\u4e00\u62bd\u8c61\u5c42\u6b21\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u6d89\u53ca\u4e0d\u540c\u7c7b\u578b\u7684 dialect \u8fdb\u884c\u8f6c\u6362\u672c\u8d28\u4e0a\u5219\u662f\u8f6c\u6362\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u3002"),(0,n.kt)("p",null,"\u4e3a\u7b80\u5316\u5b9e\u73b0\uff0c\u6211\u4eec\u4e00\u822c",(0,n.kt)("strong",{parentName:"p"},"\u5c06\u9ad8\u5c42\u6b21 (high-level) \u62bd\u8c61\u9012\u964d (lower) \u5230\u4f4e\u5c42\u6b21 (low-level) \u62bd\u8c61\u3002\u9012\u964d\u7684\u8fc7\u7a0b\u901a\u5e38\u4f1a\u8fdb\u884c\u67d0\u79cd\u5f62\u5f0f\u7684\u95ee\u9898\u5206\u89e3 (decomposition) \u6216\u8005\u8d44\u6e90\u5206\u914d (resource assignment) \u6765\u9010\u6e10\u8d34\u8fd1\u5e95\u5c42\u786c\u4ef6"),"\u3002\u524d\u8005\u7684\u4f8b\u5b50\u6709 tiling, vectorization \u7b49\u7b49\uff1b\u540e\u8005\u7684\u4f8b\u5b50\u6709 bufferization, \u5bc4\u5b58\u5668\u5206\u914d (register allocation) \u7b49\u7b49\u3002\u5373\u4fbf\u5982\u6b64\uff0c\u9012\u964d\u4f9d\u7136\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4e0d\u540c\u7684\u62bd\u8c61\u5c42\u6b21\u6709\u4e0d\u540c\u7684\u76ee\u7684\u4ee5\u53ca\u5bf9\u6b63\u786e\u6027\u548c\u6027\u80fd\u7684\u7406\u89e3\u3002\u6bd4\u5982\u7f16\u7a0b\u6a21\u578b\u5c42\u8003\u8651\u7684\u662f\u4ee3\u7801\u7684\u8868\u793a\u80fd\u529b\u4ee5\u53ca\u7b80\u6d01\u6027\uff0c\u5f88\u5c11\u6d89\u53ca\u5177\u4f53\u786c\u4ef6\u7279\u6027\uff1b\u800c\u786c\u4ef6\u5c42\u8003\u8651\u7684\u662f\u8d44\u6e90\u7684\u6700\u4f73\u4f7f\u7528\uff0c\u5f88\u5c11\u8003\u8651\u6613\u4e8e\u7f16\u7a0b\u3002\u56e0\u6b64\uff0c\u5728\u8bf8\u591a MLIR \u673a\u5236\u4e2d\uff0c",(0,n.kt)("em",{parentName:"p"},"dialect conversion")," ","[4]","\u53ef\u80fd\u662f\u6700\u590d\u6742\u7684\u5c31\u5e76\u4e0d\u5947\u602a\u4e86\u3002"),(0,n.kt)("h4",{id:"7952-dialect\u4f53\u7cfb"},"7.9.5.2 Dialect\u4f53\u7cfb"),(0,n.kt)("p",null,"\u4ee5\u64cd\u4f5c\u548c\u7c7b\u578b\u7684\u53ef\u7ec4\u5408\u6027\u4ee5\u53ca\u53ef\u6269\u5c55\u6027\u4e3a\u57fa\u7840\uff0cdialect\u53ef\u4ee5\u4f5c\u4e3a\u7ec4\u5408\u673a\u5668\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u9ad8\u5c42\u6b21\u57fa\u7840\u7ec4\u4ef6\u3002"),(0,n.kt)("h4",{id:"7953-operations"},"7.9.5.3 Operations"),(0,n.kt)("p",null,"\u4e00\u4e2aoperation\u7c7b\u7ee7\u627f\u4e8emlir::Op\u7c7b\uff0c\u5176\u4e2dmlir::Op\u7c7b\u643a\u5e26\u4e00\u4e9b\u53ef\u9009\u7684traits\u6765\u81ea\u5b9a\u4e49\u4e00\u4e9b\u884c\u4e3a\uff0cTraits\u63d0\u4f9b\u4e00\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u5bf9\u4e00\u4e2aOperation\u6ce8\u5165\u4e00\u4e9b\u884c\u4e3a\uff0c\u4f8b\u5982\u989d\u5916\u7684accessors\u3001verification\u7b49\u7b49\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"class ConstantOp : public mlir::Op<\n /// `mlir::Op` is a CRTP class, meaning that we provide the\n /// derived class as a template parameter.\n ConstantOp,\n /// The ConstantOp takes zero input operands.\n mlir::OpTrait::ZeroOperands,\n /// The ConstantOp returns a single result.\n mlir::OpTrait::OneResult,\n /// We also provide a utility `getType` accessor that\n /// returns the TensorType of the single result.\n mlir::OpTraits::OneTypedResult::Impl> {\n\n public:\n /// Inherit the constructors from the base Op class.\n using Op::Op;\n\n /// Provide the unique name for this operation. MLIR will use this to register\n /// the operation and uniquely identify it throughout the system. The name\n /// provided here must be prefixed by the parent dialect namespace followed\n /// by a `.`.\n static llvm::StringRef getOperationName() { return \"toy.constant\"; }\n\n /// Return the value of the constant by fetching it from the attribute.\n mlir::DenseElementsAttr getValue();\n\n /// Operations may provide additional verification beyond what the attached\n /// traits provide. Here we will ensure that the specific invariants of the\n /// constant operation are upheld, for example the result type must be\n /// of TensorType and matches the type of the constant `value`.\n LogicalResult verifyInvariants();\n\n /// Provide an interface to build this operation from a set of input values.\n /// This interface is used by the `builder` classes to allow for easily\n /// generating instances of this operation:\n /// mlir::OpBuilder::create(...)\n /// This method populates the given `state` that MLIR uses to create\n /// operations. This state is a collection of all of the discrete elements\n /// that an operation may contain.\n /// Build a constant with the given return type and `value` attribute.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::Type result, mlir::DenseElementsAttr value);\n /// Build a constant and reuse the type from the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n mlir::DenseElementsAttr value);\n /// Build a constant by broadcasting the given 'value'.\n static void build(mlir::OpBuilder &builder, mlir::OperationState &state,\n double value);\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u8fd9\u4e2aoperation\u53ef\u4ee5\u6ce8\u518c\u7ed9ToyDialect\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyDialect::initialize() {\n addOperations();\n}\n")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u5b9a\u4e49\u4e86\u4e00\u4e2aoperation\uff0c\u90a3\u4e48\u600e\u6837\u83b7\u53d6\u5b83\u4ee5\u53ca\u5bf9\u5176\u8fdb\u884c\u8f6c\u6362\u5462\uff1f"),(0,n.kt)("p",null,"\u5728MLIR\u4e2d\u6709\u4e24\u6839\u8ddfoperation\u76f8\u5173\u7684\u7c7b\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Operation"),"\uff1a\u5b83\u7528\u4e8e\u901a\u7528\u5730model all operations\uff0c\u5b83\u662f\u4e0d\u900f\u660e\u7684\uff0c\u610f\u5473\u7740\u5b83\u4e0d\u4f1a\u63cf\u8ff0\u4efb\u4f55operation\u7684\u5c5e\u6027\u6216\u8005\u7c7b\u578b\uff1b\u53cd\u4e4b\uff0c\u5b83\u63d0\u4f9b\u5bf9\u4e00\u4e2aoperation\u5b9e\u4f8b\u7684\u901a\u7528API\u3002"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"OP"),"\uff1a\u6bcf\u4e2a\u7279\u5b9a\u7c7b\u578b\u7684operation\u7ee7\u627f\u81eaOp\uff0c\u8fd9\u4e9b\u7ee7\u627f\u81eaOp\u7684\u7c7b\u50cf\u4e00\u4e2a\u6307\u5411\u4e00\u4e2aOperation*\u7684\u667a\u80fd\u6307\u9488\uff0c\u63d0\u4f9b\u4e00\u4e9b\u7279\u5b9a\u4e8e\u67d0\u4e2a\u64cd\u4f5c\u7684accessor\u65b9\u6cd5\u3001\u7c7b\u578b\u68c0\u67e5\u7b49\u7b49\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u6211\u4eec\u7ed9Toy\u5b9a\u4e49\u4e00\u4e2a operation\u65f6\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u5728\u5b9a\u4e49\u4e00\u7ec4\u5e72\u51c0\u3001\u5305\u542b\u4e00\u4e9b\u6709\u7528\u8bed\u4e49\u7684\u63a5\u53e3\uff0c\u901a\u8fc7\u8fd9\u4e9b\u63a5\u53e3\u53ef\u4ee5\u6784\u5efaOperation\u5e76\u4e0e\u4e4b\u8fdb\u884c\u4ea4\u4e92\uff08interfaing\uff09\u3002\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u7ee7\u627f\u81eaOp\u7684\u7c7b\u4e0d\u5305\u542b\u4efb\u4f55\u7c7b\u5b57\u6bb5\uff08class field\uff09\uff0c\u6240\u6709\u56f4\u7ed5\u6574\u4e2aoperation\u7684\u6570\u636e\u90fd\u5b58\u50a8\u5728\u5f15\u7528 \u7684Operation\u4e2d\u3002\u8fd9\u5e26\u6765\u7684\u5176\u4e2d\u4e00\u4e2a\u8981\u6c42\u662f\uff0c\u6240\u6709\u7684Op\u7c7b\u7684\u4f20\u503c\u90fd\u5e94\u8be5\u662f\u503c\u7c7b\u578b\uff0c\u800c\u4e0d\u80fd \u662f\u6307\u9488\u6216\u8005\u5f15\u7528\u7c7b\u578b\u3002")),(0,n.kt)("p",null,"\u7ed9\u5b9a\u4e00\u4e2a\u901a\u7528\u7684Operation*\u5b9e\u4f8b\uff0c\u6211\u4eec\u603b\u662f\u53ef\u4ee5\u83b7\u53d6\u5230\u4e00\u4e2a\u7279\u5b9a\u7684Op\u5b9e\u4f8b\uff0c\u53ef\u4ee5\u4f7f\u7528LLVM\u63d0\u4f9b\u7684\u8f6c\u6362\u65b9\u6cd5\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'void processConstantOp(mlir::Operation *operation) {\n ConstantOp op = llvm::dyn_cast(operation);\n\n // This operation is not an instance of `ConstantOp`.\n if (!op)\n return;\n\n // Get the internal operation instance wrapped by the smart pointer.\n mlir::Operation *internalOperation = op.getOperation();\n assert(internalOperation == operation &&\n "these operation instances are the same");\n}\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Operation Definition Specification\uff08ODS\uff09")),(0,n.kt)("p",null,"\u4f7f\u7528TableGen\u7684\u65b9\u5f0f\u5b9a\u4e49"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Base class for toy dialect operations. This operation inherits from the base\n// `Op` class in OpBase.td, and provides:\n// * The parent dialect of the operation.\n// * The mnemonic for the operation, or the name without the dialect prefix.\n// * A list of traits for the operation.\nclass Toy_Op traits = []> :\n Op;\n")),(0,n.kt)("p",null,"\u7136\u540e\u5b9a\u4e49operation\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'def ConstantOp : Toy_Op<"constant"> {\n // Provide a summary and description for this operation. This can be used to\n // auto-generate documentation of the operations within our dialect.\n let summary = "constant operation";\n let description = [{\n Constant operation turns a literal into an SSA value. The data is attached\n to the operation as an attribute. For example:\n\n %0 = "toy.constant"()\n { value = dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]> : tensor<2x3xf64> }\n : () -> tensor<2x3xf64>\n }];\n\n // The constant operation takes an attribute as the only input.\n // `F64ElementsAttr` corresponds to a 64-bit floating-point ElementsAttr.\n let arguments = (ins F64ElementsAttr:$value);\n\n // The generic call operation returns a single value of TensorType.\n // F64Tensor corresponds to a 64-bit floating-point TensorType.\n let results = (outs F64Tensor);\n\n // Add additional verification logic to the constant operation. Setting this bit\n // to `1` will generate a `::mlir::LogicalResult verify()` declaration on the\n // operation class that is called after ODS constructs have been verified, for\n // example the types of arguments and results. We implement additional verification\n // in the definition of this `verify` method in the C++ source file. \n let hasVerifier = 1;\n \n \n // Add custom build methods for the constant operation. These methods populate\n // the `state` that MLIR uses to create operations, i.e. these are used when\n // using `builder.create(...)`.\n let builders = [\n // Build a constant with a given constant tensor value.\n OpBuilder<(ins "DenseElementsAttr":$value), [{\n // Call into an autogenerated `build` method.\n build(builder, result, value.getType(), value);\n }]>,\n\n // Build a constant with a given constant floating-point value. This builder\n // creates a declaration for `ConstantOp::build` with the given parameters.\n OpBuilder<(ins "double":$value)>\n ];\n}\n\n')),(0,n.kt)("h3",{id:"796-analysis-and-transformation"},"7.9.6 Analysis and Transformation"),(0,n.kt)("p",null,"\u672c\u8282\u4ecb\u7ecd\u600e\u6837\u5229\u7528Toy Dialect\u53ca\u5176\u9ad8\u5c42\u6b21\u8bed\u4e49\u6765\u6267\u884clocal pattern-match transformations\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5728LLVM\u4e2d\u4f1a\u5f88\u56f0\u96be\u3002"),(0,n.kt)("p",null,"\u6709\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u7528\u4e8e\u5b9e\u73b0pattern-match transformation\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"imperative C++ pattern-match and rewrite"),(0,n.kt)("li",{parentName:"ul"},"declarative\uff0crule-based pattern-match and rewrite using table-driven Declarative Rewrite Rules\uff08DDR\uff09\uff0c\u6b64\u65f6operation\u5fc5\u987b\u662f\u4f7f\u7528ODS\u5b9a\u4e49\u7684")),(0,n.kt)("h4",{id:"7961-c-style--pattern-match-and-rewrite"},"7.9.6.1 C++ style pattern-match and rewrite"),(0,n.kt)("p",null,"\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u4f18\u5316\u8f6c\u7f6e\u7684\u8f6c\u7f6e\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u53ef\u4ee5\u76f4\u63a5\u8fd4\u56dex\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u4efb\u4f55\u8f6c\u7f6e\u64cd\u4f5c\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"def transpose_transpose(x) {\n return transpose(transpose(x));\n}\n")),(0,n.kt)("p",null,"\u6b63\u5e38\u7684IR\u662f\u8fd9\u6837\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n %0 = toy.transpose(%arg0 : tensor<*xf64>) to tensor<*xf64>\n %1 = toy.transpose(%0 : tensor<*xf64>) to tensor<*xf64>\n toy.return %1 : tensor<*xf64>\n}\n")),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u60c5\u51b5\u5bf9\u4e8eLLVM\u6765\u8bf4\u662f\u5f88\u96be\u7684\uff0c\u4f8b\u5982Clang\u4e0d\u80fd\u4f18\u5316\u6389\u4e34\u65f6\u6570\u7ec4\uff0c\u4ee5\u53ca\u76f8\u5e94\u7684\u8f6c\u7f6e\u8ba1\u7b97\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c++"},"#define N 100\n#define M 100\n\nvoid sink(void *);\nvoid double_transpose(int A[N][M]) {\n int B[M][N];\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n B[j][i] = A[i][j];\n }\n }\n for(int i = 0; i < N; ++i) {\n for(int j = 0; j < M; ++j) {\n A[i][j] = B[j][i];\n }\n }\n sink(A);\n}\n")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u4e0a\u8ff0\u7684\u64cd\u4f5c\uff0c\u8fd9\u6d89\u53ca\u5230\u5728IR\u4e2d\u5339\u914d\u4e00\u4e2atree-like\u7684\u6a21\u5f0f\uff0c\u5e76\u4e14\u5c06\u5176\u66ff\u6362\u4e3a\u4e00\u7ec4\u65b0\u7684operation\u3002we can plug into the MLIR ",(0,n.kt)("inlineCode",{parentName:"p"},"Canonicalizer")," pass by implementing a ",(0,n.kt)("inlineCode",{parentName:"p"},"RewritePattern"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},'/// Fold transpose(transpose(x)) -> x\nstruct SimplifyRedundantTranspose : public mlir::OpRewritePattern {\n /// We register this pattern to match every toy.transpose in the IR.\n /// The "benefit" is used by the framework to order the patterns and process\n /// them in order of profitability.\n SimplifyRedundantTranspose(mlir::MLIRContext *context)\n : OpRewritePattern(context, /*benefit=*/1) {}\n\n /// This method is attempting to match a pattern and rewrite it. The rewriter\n /// argument is the orchestrator of the sequence of rewrites. It is expected\n /// to interact with it to perform any changes to the IR from here.\n mlir::LogicalResult\n matchAndRewrite(TransposeOp op,\n mlir::PatternRewriter &rewriter) const override {\n // Look through the input of the current transpose.\n mlir::Value transposeInput = op.getOperand();\n TransposeOp transposeInputOp = transposeInput.getDefiningOp();\n\n // Input defined by another transpose? If not, no match.\n if (!transposeInputOp)\n return failure();\n\n // Otherwise, we have a redundant transpose. Use the rewriter.\n rewriter.replaceOp(op, {transposeInputOp.getOperand()});\n return success();\n }\n};\n')),(0,n.kt)("p",null,"transformation\u4e3b\u8981\u5728operation canonicalization pass\u88ab\u6267\u884c\uff0ccanonicalization\u662fMLIR\u7684\u4e00\u4e2a\u91cd\u8981\u9636\u6bb5\uff0c\u80fd\u591f\u5bf9\u4ee3\u7801\u7684\u597d\u574f\u8fdb\u884c\u4e00\u4e9b\u63a8\u7406\uff0c\u6267\u884creliable compiler transformation\u3002\u4e3a\u4e86\u4fdd\u8bc1canonicalization\u80fd\u591f\u5e94\u7528\u6211\u4eec\u7684new transform\uff0c\u9700\u8981\u8bbe\u7f6ehasCanonicalizer=1\uff0c\u5e76\u4e14\u5c06\u6211\u4eec\u7684pattern\u6ce8\u518c\u5230canonicalization\u6846\u67b6\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"// Register our patterns for rewrite by the Canonicalization framework.\nvoid TransposeOp::getCanonicalizationPatterns(\n RewritePatternSet &results, MLIRContext *context) {\n results.add(context);\n}\n")),(0,n.kt)("p",null,"\u540c\u65f6\u6211\u4eec\u9700\u8981\u7ed9\u7f16\u8bd1\u5668\u589e\u52a0\u4e00\u4e2aoptimization pipeline\uff0cMLIR\u901a\u8fc7 \u4e00\u4e2aPassManager\u7ba1\u7406 \uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"}," mlir::PassManager pm(module.getContext());\n pm.addNestedPass(mlir::createCanonicalizerPass());\n")),(0,n.kt)("p",null,"\u6700\u7ec8\u4f18\u5316\u7684IR\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {\n toy.return %arg0 : tensor<*xf64>\n}\n")),(0,n.kt)("h4",{id:"7962-\u603b\u7ed3"},"7.9.6.2 \u603b\u7ed3"),(0,n.kt)("p",null,"\u5728\u8fd9\u91cc\uff0c\u6574\u4e2a\u8fc7\u7a0b\u4ee5Operation\u4e3a\u4e2d\u5fc3\uff0cOperation\u662fIR\u7684\u57fa\u672c\u5143\u7d20\uff0c\u5176\u5305\u542b\u7684\u662f\u4ee3\u7801\u7684\u57fa\u672c\u7ec4\u7ec7\u5143\u7d20\uff0c\u8fd9\u91cc\u901a\u8fc7\u5bf9\u4ee3\u7801\u7684\u7ed3\u6784\u8fdb\u884c\u5206\u79bb\u6765\u8fdb\u884c\u4f18\u5316\uff0c\u800c\u4f18\u5316\u6216\u8005transformation\u7684\u903b\u8f91\uff0c\u5176\u5b9e\u4e5f\u5c31\u662f\u5bf9Operation\u8fdb\u884c\u6539\u5199\uff0c\u5b83\u901a\u8fc7\u5bf9Operation\u8fdb\u884c\uff08\u66b4\u529b\uff09\u6a21\u5f0f\u5339\u914d\uff0c\u8fd9\u8ddf\u4f20\u7edf\u7f16\u8bd1\u5668\u5bf9AST\u7684\u5206\u6790\u8fc7\u7a0b\u662f\u7c7b\u4f3c\u7684\uff0c\u53ea\u4e0d\u8fc7MLIR\u4f7f\u7528\u4e00\u79cd\u7279\u5b9a\u7684\u7ed3\u6784\u6765\u8868\u793a\u4efb\u610f\u7684IR\uff0c\u8fd9\u4e2aIR\u53ef\u6709\u7528\u6237\u81ea\u5b9a\u4e49\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u56fa\u5b9a\u7684IR\u7ed3\u6784\uff0c\u7136\u540e\u7531\u4e8e\u5404\u4e2aDialect\u4e86\u89e3\u5176\u4e2d\u7684\u6784\u6210\uff0c\u4f8b\u5982Operation\uff0c\u56e0\u6b64\u5c31\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u7279\u5b9a\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u4fee\u6539\u7684\u5176\u5b9e\u662fMLIR\u7684\u7ed3\u6784\uff0c\u8fd9\u79cd\u4fee\u6539\u662f\u7531\u7279\u5b9a\u7684Dialect\u5b9e\u4f8b\u8fdb\u884c\u6267\u884c\u7684\u3002MLIR\u7cfb\u7edf\u8bbe\u7f6e\u4e00\u4e2a\u6ce8\u518c\u7ba1\u7406\u7684\u673a\u5236\uff0c\u8ba9\u5404\u4e2aDialect\u8fdb\u884c\u81ea\u5b9a\u4e49\u5904\u7406\u3002"),(0,n.kt)("p",null,"MLIR\u4e3a\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\uff0c\u5b83\u7684Operation\u5b9e\u9645\u4e0a\u662f\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u8fd0\u884c\u65f6\u6267\u884c\u7684\u4ee3\u7801\u65b9\u6cd5\uff0c\u56e0\u6b64\u5b83\u6ca1\u6709\u53d8\u91cf\uff0c\u53ea\u6709\u7ed3\u6784\uff0c\u8fd9\u4e2a\u7ed3\u6784\u88ab\u8868\u8ff0\u4e3a\u4e00\u79cd\u683c\u5f0f\uff0c\u5b83\u53ef\u4ee5\u662fin memory\u7684\uff0c\u4e5f\u53ef\u4ee5\u662f\u6587\u672c\u7684\uff0c\u6240\u6709\u90a3\u4e9b\u5173\u4e8e\u5206\u6790\u3001\u4f18\u5316\u3001\u53d8\u6362\u7684\u64cd\u4f5c\u5176\u5b9e\u4e5f\u662f\u5728\u4fee\u6539\u8fd9\u4e2aIR\u7ed3\u6784\uff0c\u5f53\u7136 \u4e3b\u8981\u901a\u8fc7Operation\u4e3a\u5355\u4f4d\u8fdb\u884c\uff0c\u800c\u4e0d\u662fLLVM IR\u4e2d\u7684\u5355\u6761\u6307\u4ee4\u4e3a\u5355\u4f4d\u3002\u7531\u4e8eDialect\u6216\u8005Operation\u5305\u542b\u66f4\u9ad8\u5c42\u7684\u62bd\u8c61\u4fe1\u606f\uff0c\u56e0\u6b64\u4f18\u5316\u7684\u7a7a\u95f4\u66f4\u5927\u3002"),(0,n.kt)("h3",{id:"797-generic-transformation-with-interfaces"},"7.9.7 Generic Transformation with Interfaces"),(0,n.kt)("h3",{id:"798-lowering"},"7.9.8 Lowering"),(0,n.kt)("p",null,"Tensors represent an abstract value-typed sequence of data, meaning that they don\u2019t live in any memory. MemRefs, on the other hand, represent lower level buffer access, as they are concrete references to a region of memory."),(0,n.kt)("h4",{id:"7981-dialect-conversions"},"7.9.8.1 Dialect Conversions"),(0,n.kt)("p",null,"\u9700\u8981\u81f3\u5c11\u4e24\u4e2a\u5143\u7d20\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#conversion-target"},"Conversion Target"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the formal specification of what operations or dialects are legal for the conversion. Operations that aren\u2019t legal will require rewrite patterns to perform ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/getting_started/Glossary/#legalization"},"legalization"),"."))),(0,n.kt)("li",{parentName:"ul"},"A set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#rewrite-pattern-specification"},"Rewrite Patterns"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"This is the set of ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/Tutorials/QuickstartRewrites/"},"patterns")," used to convert ",(0,n.kt)("em",{parentName:"li"},"illegal")," operations into a set of zero or more ",(0,n.kt)("em",{parentName:"li"},"legal")," ones."))),(0,n.kt)("li",{parentName:"ul"},"Optionally, a ",(0,n.kt)("a",{parentName:"li",href:"https://mlir.llvm.org/docs/DialectConversion/#type-conversion"},"Type Converter"),".",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"If provided, this is used to convert the types of block arguments. ")))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Target")),(0,n.kt)("p",null,"\u8fd9\u91cc\u6211\u4eec\u5c06\u8ba1\u7b97\u6bd4\u8f83\u91cd\u7684Toy\u64cd\u4f5c\u8f6c\u5316\u4e3a\u6765\u81ea\u591a\u4e2adialect\u4e2d\u64cd\u4f5c\u7684\u96c6\u5408\uff1aAffine\u3001Arith\u3001Func\u4ee5\u53caMemRef\uff0c\u4ee5\u4fbf\u8fdb\u884c\u8fdb\u4e00\u6b65\u4f18\u5316\uff0c\u9996\u5148\u5b9a\u4e49conversion target\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n // The first thing to define is the conversion target. This will define the\n // final target for this lowering.\n mlir::ConversionTarget target(getContext());\n\n // We define the specific operations, or dialects, that are legal targets for\n // this lowering. In our case, we are lowering to a combination of the\n // `Affine`, `Arith`, `Func`, and `MemRef` dialects.\n target.addLegalDialect();\n\n // We also define the Toy dialect as Illegal so that the conversion will fail\n // if any of these operations are *not* converted. Given that we actually want\n // a partial lowering, we explicitly mark the Toy operations that don't want\n // to lower, `toy.print`, as *legal*. `toy.print` will still need its operands\n // to be updated though (as we convert from TensorType to MemRefType), so we\n // only treat it as `legal` if its operands are legal.\n target.addIllegalDialect();\n target.addDynamicallyLegalOp([](toy::PrintOp op) {\n return llvm::none_of(op->getOperandTypes(),\n [](Type type) { return type.isa(); });\n });\n ...\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Conversion Patterns")),(0,n.kt)("p",null,"\u8ddfCanonicalization\u6846\u67b6\u6709\u70b9\u7c7b\u4f3c\uff0cDialectConversion\u4e5f\u4f7f\u7528RewritePatterns\u6765\u6267\u884c\u8f6c\u5316\u903b\u8f91\u3002\u53ef\u4ee5\u4f7f\u7528\u4e24\u79cdpattern\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"RewritePattern"),(0,n.kt)("li",{parentName:"ul"},"ConversionPatterns\uff0c\u4e3b\u8981\u7684\u533a\u522b\u662f\u63a5\u53d7\u4e00\u4e2a\u989d\u5916\u7684\u53c2\u6570\uff1aoperands\uff0c\u8fd9\u4e9boperands\u53ef\u80fd\u662f\u4e4b\u524d\u88ab\u79fb\u9664\u6216\u8005\u88ab\u91cd\u65b0\u6620\u5c04\u7684\u64cd\u4f5c\u6570\uff0c\u56e0\u4e3a\u4e00\u4e9b\u64cd\u4f5c\u9700\u8981\u5bf9\u65e7\u7684\u4fe1\u606f\u8fdb\u884c\u5339\u914d")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"/// Lower the `toy.transpose` operation to an affine loop nest.\nstruct TransposeOpLowering : public mlir::ConversionPattern {\n TransposeOpLowering(mlir::MLIRContext *ctx)\n : mlir::ConversionPattern(TransposeOp::getOperationName(), 1, ctx) {}\n\n /// Match and rewrite the given `toy.transpose` operation, with the given\n /// operands that have been remapped from `tensor<...>` to `memref<...>`.\n mlir::LogicalResult\n matchAndRewrite(mlir::Operation *op, ArrayRef operands,\n mlir::ConversionPatternRewriter &rewriter) const final {\n auto loc = op->getLoc();\n\n // Call to a helper function that will lower the current operation to a set\n // of affine loops. We provide a functor that operates on the remapped\n // operands, as well as the loop induction variables for the inner most\n // loop body.\n lowerOpToLoops(\n op, operands, rewriter,\n [loc](mlir::PatternRewriter &rewriter,\n ArrayRef memRefOperands,\n ArrayRef loopIvs) {\n // Generate an adaptor for the remapped operands of the TransposeOp.\n // This allows for using the nice named accessors that are generated\n // by the ODS. This adaptor is automatically provided by the ODS\n // framework.\n TransposeOpAdaptor transposeAdaptor(memRefOperands);\n mlir::Value input = transposeAdaptor.input();\n\n // Transpose the elements by generating a load from the reverse\n // indices.\n SmallVector reverseIvs(llvm::reverse(loopIvs));\n return rewriter.create(loc, input, reverseIvs);\n });\n return success();\n }\n};\n")),(0,n.kt)("p",null,"\u7136\u540e\u5c06pattern\u6dfb\u52a0\u5230lowering process\u4e2d\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-C++"},"void ToyToAffineLoweringPass::runOnOperation() {\n ...\n\n // Now that the conversion target has been defined, we just need to provide\n // the set of patterns that will lower the Toy operations.\n mlir::RewritePatternSet patterns(&getContext());\n patterns.add<..., TransposeOpLowering>(&getContext());\n\n // With the target and rewrite patterns defined, we can now attempt the\n // conversion. The conversion will signal failure if any of our *illegal*\n // operations were not converted successfully.\n if (mlir::failed(mlir::applyPartialConversion(getOperation(), target, patterns)))\n signalPassFailure();\n}\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u5b9e\u4f8b")),(0,n.kt)("p",null,"\u4ee5\u4e0b\u7684IR\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"toy.func @main() {\n %0 = toy.constant dense<[[1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]]> : tensor<2x3xf64>\n %2 = toy.transpose(%0 : tensor<2x3xf64>) to tensor<3x2xf64>\n %3 = toy.mul %2, %2 : tensor<3x2xf64>\n toy.print %3 : tensor<3x2xf64>\n toy.return\n}\n")),(0,n.kt)("p",null,"\u88ab\u8f6c\u6362\u4e3a\uff08\u5176\u4e2d\u5305\u542b\u4e00\u4e9bAffine\u4f18\u5316\uff09\uff1a"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"func.func @main() {\n %cst = arith.constant 1.000000e+00 : f64\n %cst_0 = arith.constant 2.000000e+00 : f64\n %cst_1 = arith.constant 3.000000e+00 : f64\n %cst_2 = arith.constant 4.000000e+00 : f64\n %cst_3 = arith.constant 5.000000e+00 : f64\n %cst_4 = arith.constant 6.000000e+00 : f64\n\n // Allocating buffers for the inputs and outputs.\n %0 = memref.alloc() : memref<3x2xf64>\n %1 = memref.alloc() : memref<2x3xf64>\n\n // Initialize the input buffer with the constant values.\n affine.store %cst, %1[0, 0] : memref<2x3xf64>\n affine.store %cst_0, %1[0, 1] : memref<2x3xf64>\n affine.store %cst_1, %1[0, 2] : memref<2x3xf64>\n affine.store %cst_2, %1[1, 0] : memref<2x3xf64>\n affine.store %cst_3, %1[1, 1] : memref<2x3xf64>\n affine.store %cst_4, %1[1, 2] : memref<2x3xf64>\n\n affine.for %arg0 = 0 to 3 {\n affine.for %arg1 = 0 to 2 {\n // Load the transpose value from the input buffer.\n %2 = affine.load %1[%arg1, %arg0] : memref<2x3xf64>\n\n // Multiply and store into the output buffer.\n %3 = arith.mulf %2, %2 : f64\n affine.store %3, %0[%arg0, %arg1] : memref<3x2xf64>\n }\n }\n\n // Print the value held by the buffer.\n toy.print %0 : memref<3x2xf64>\n memref.dealloc %1 : memref<2x3xf64>\n memref.dealloc %0 : memref<3x2xf64>\n return\n}\n")),(0,n.kt)("h3",{id:"799-lowering-to-llvm"},"7.9.9 Lowering to LLVM"),(0,n.kt)("h3",{id:"7910-mlir-language"},"7.9.10 MLIR Language"),(0,n.kt)("p",null,"MLIR\u662f\u57fa\u4e8egraph-like\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4e2d\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"nodes\uff0c\u79f0\u4e3aOperations"),(0,n.kt)("li",{parentName:"ul"},"edges\uff0c\u79f0\u4e3aValues")),(0,n.kt)("p",null,"\u6bcf\u4e2aValue\u662f\u4e00\u4e2aOperation\u6216\u8005BLock\u7684\u8fd4\u56de\u503c\u53c2\u6570\uff0c\u5176\u4e2dValue Type\u4f7f\u7528\u7c7b\u578b\u7cfb\u7edf\u8fdb\u884c\u5b9a\u4e49\u3002Operation\u5305\u542b Region\uff0cRegion\u5305\u542bBlock\uff0cBlock\u53c8\u5305\u542bOperation\uff0c\u5f62\u6210\u5d4c\u5957\u7ed3\u6784\uff0c\u5176\u4e2d\u7684\u96c6\u5408\u7684\u987a\u5e8f\u7531\u5176\u7ed3\u6784\u51b3\u5b9a\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u987a\u5e8f\u4e0d\u4e00\u5b9a\u6709\u8bed\u4e49\u4e0a\u7684\u610f\u4e49\u3002"),(0,n.kt)("p",null,"Operation\u53ef\u4ee5\u8868\u8ff0\u8bb8\u591a\u4e0d\u540c\u7684\u6982\u5ff5\uff0c\u4ece\u9ad8\u62bd\u8c61\u5c42\u7ea7\u7684\u6982\u5ff5\u5982\u51fd\u6570\u5b9a\u4e49\u3001\u51fd\u6570\u8c03\u7528\u3001buffer\u5206\u914d\u7b49\u7b49\uff0c\u5230\u4f4e\u5c42\u6b21\u7684\u8ddf\u6570\u5b66\u3001\u6307\u4ee4\u3001\u5bc4\u5b58\u5668\u76f8\u5173\u7684\u6982\u5ff5\u7b49\u7b49\u3002\u8fd9\u79cd\u4e0d\u540c\u7684\u6982\u5ff5\u90fd\u53ef\u4ee5\u4f7f\u7528MLIR\u4e2d\u7684operation\u8868\u793a\uff0c\u4f7f\u5f97MLIR\u53ef\u4ee5\u88ab\u4efb\u610f\u6269\u5c55\u3002"),(0,n.kt)("p",null,"MLIR\u540c\u65f6\u8fd8\u63d0\u4f9b\u4e00\u4e2a\u53ef\u6269\u5c55\u7684\u6846\u67b6\u7528\u4e8e\u5b9e\u73b0operation\u7684\u53d8\u6362\uff0c\u8fd9\u4f7f\u7528\u7f16\u8bd1\u5668\u4e2d\u5e38\u7528\u7684Pass\u7684\u6982\u5ff5\u5b9e\u73b0\uff0c\u5728\u4efb\u610f\u7684operation\u96c6\u5408\u4e0a\u5b9e\u73b0\u4efb\u610f\u7684pass\u5bfc\u81f4\u4f38\u7f29\u6027\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u6bcf\u4e2aTransformation\u5fc5\u987b\u8003\u8651\u6bcf\u4e2aoperation\u7684\u8bed\u4e49\u3002MLIR\u901a\u8fc7\u4f7f\u7528Traits\u548cInterfaces\u6765\u62bd\u8c61\u5730\u63cf\u8ff0operation semantics\u6765\u514b\u670d\u8fd9\u4e2a\u95ee\u9898\uff0c\u4f7f\u5f97Transformation\u5728operation\u4e0a\u7684\u64cd\u4f5c\u662f\u66f4\u52a0\u901a\u7528\u7684\u3002\u5176\u5185\u90e8\u4f7f\u7528\u6a21\u5f0f\u5339\u914d\u6765\u8fdb\u884c\u7b5b\u9009\u3002"),(0,n.kt)("h4",{id:"79101-dialects"},"7.9.10.1 Dialects"),(0,n.kt)("p",null,"Dialects are the mechanism by which to engage with and extend the MLIR ecosystem. They allow for defining new ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#operations"},"operations"),", as well as ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#attributes"},"attributes")," and ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/LangRef/#type-system"},"types"),". Each dialect is given a unique ",(0,n.kt)("inlineCode",{parentName:"p"},"namespace")," that is prefixed to each defined attribute/operation/type. For example, the ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/Dialects/Affine/"},"Affine dialect")," defines the namespace: ",(0,n.kt)("inlineCode",{parentName:"p"},"affine"),"."),(0,n.kt)("p",null,"MLIR allows for multiple dialects, even those outside of the main tree, to co-exist together within one module. Dialects are produced and consumed by certain passes. MLIR provides a ",(0,n.kt)("a",{parentName:"p",href:"https://mlir.llvm.org/docs/DialectConversion/"},"framework")," to convert between, and within, different dialects."),(0,n.kt)("h3",{id:"7911-pattern-rewriting"},"7.9.11 Pattern Rewriting"),(0,n.kt)("p",null,"This document details the design and API of the pattern rewriting infrastructure present in MLIR, a general DAG-to-DAG transformation framework. This framework is widely used throughout MLIR for\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"canonicalization, "),(0,n.kt)("li",{parentName:"ul"},"conversion, and "),(0,n.kt)("li",{parentName:"ul"},"general transformation.")),(0,n.kt)("h2",{id:"710-ai"},"7.10 AI"),(0,n.kt)("h3",{id:"7101-apple-shortcuts"},"7.10.1 Apple Shortcuts"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"shortcuts",src:l(7652).Z,width:"2126",height:"982"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u5feb\u6377\u6307\u4ee4\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u5feb\u6377\u6307\u4ee4"),"\u53ef\u8ba9\u4f60\u4f7f\u7528 App \u5feb\u901f\u5b8c\u6210\u4efb\u52a1\uff0c\u53ea\u9700\u8f7b\u70b9\u4e00\u4e0b\u6216\u8be2\u95ee Siri \u5373\u53ef\u3002\u5feb\u6377\u6307\u4ee4\u53ef\u4ee5\u81ea\u52a8\u5316\u5404\u79cd\u4efb\u52a1\uff0c\u4f8b\u5982\uff0c\u83b7\u53d6\u524d\u5f80\u201c\u65e5\u5386\u201d\u4e0a\u4e0b\u4e00\u4e2a\u65e5\u7a0b\u7684\u8def\u7ebf\u3001\u5c06\u6587\u672c\u4ece\u4e00\u4e2a App \u79fb\u5230\u53e6\u4e00\u4e2a App\u3001\u751f\u6210\u652f\u51fa\u62a5\u544a\u7b49\u3002"),(0,n.kt)("p",null,"\u57fa\u4e8e\u4f60\u4f7f\u7528 Apple \u8bbe\u5907\u7684\u65b9\u5f0f\uff08App \u4f7f\u7528\u4ee5\u53ca\u6d4f\u89c8\u5668\u3001\u7535\u5b50\u90ae\u4ef6\u548c\u4fe1\u606f\u5386\u53f2\u8bb0\u5f55\uff09\uff0cSiri \u4f1a\u5efa\u8bae\u7b80\u5355\u5b9e\u7528\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u5feb\u901f\u8f7b\u70b9\u5373\u53ef\u8fd0\u884c\u3002\u521b\u5efa\u5feb\u6377\u6307\u4ee4\u540e\uff0c\u4f60\u53ef\u4ee5\u6fc0\u6d3b Siri\uff0c\u7136\u540e\u8bf4\u51fa\u5feb\u6377\u6307\u4ee4\u7684\u540d\u79f0\u4ee5\u8fd0\u884c\u5b83\u3002\u9664\u4e86\u8fd0\u884c Siri \u5efa\u8bae\u7684\u7b80\u5355\u5feb\u6377\u6307\u4ee4\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u5c06\u73b0\u6709\u5feb\u6377\u6307\u4ee4\u6216\u81ea\u5b9a\u5feb\u6377\u6307\u4ee4\u6dfb\u52a0\u5230\u8bbe\u5907\u3002\u8be5 App \u53ef\u8ba9\u4f60\u5408\u5e76\u591a\u4e2a App \u95f4\u7684\u591a\u4e2a\u6b65\u9aa4\uff0c\u4ee5\u521b\u5efa\u529f\u80fd\u5f3a\u5927\u7684\u4efb\u52a1\u81ea\u52a8\u5316\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u64cd\u4f5c\uff1f")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\u64cd\u4f5c"),"\u662f\u5feb\u6377\u6307\u4ee4\u7684\u7ec4\u6210\u90e8\u5206\u3002\u6bcf\u4e00\u4e2a\u5feb\u6377\u6307\u4ee4\u7686\u7531\u4e00\u7cfb\u5217\u64cd\u4f5c\u7ec4\u6210\uff0c\u6bcf\u4e00\u4e2a\u64cd\u4f5c\u5373\u4e3a\u6267\u884c\u7279\u5b9a\u529f\u80fd\u7684\u4e00\u4e2a\u6b65\u9aa4\u3002\u4f8b\u5982\uff0c\u5171\u4eab\u52a8\u753b GIF \u7684\u5feb\u6377\u6307\u4ee4\u53ef\u80fd\u5305\u542b\u4e09\u4e2a\u8fde\u7eed\u7684\u64cd\u4f5c\uff1a\u201c\u83b7\u53d6\u6700\u65b0\u7684\u7167\u7247\u201d\u4f1a\u6293\u53d6\u4f7f\u7528\u8bbe\u5907\u62cd\u6444\u7684\u6700\u65b0\u7167\u7247\uff0c\u201c\u5236\u4f5c GIF\u201d\u4f7f\u7528\u8fd9\u4e9b\u7167\u7247\u6784\u5efa\u52a8\u753b GIF\uff0c\u201c\u53d1\u9001\u4fe1\u606f\u201d\u4f1a\u81ea\u52a8\u5c06 GIF \u53d1\u9001\u7ed9\u6536\u4ef6\u4eba\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u5206\u89e3\u6210\u8f83\u5c0f\u7684\u90e8\u5206\uff0c\u64cd\u4f5c\u53ef\u5b9e\u73b0 Apple \u8bbe\u5907\u4e0a App \u7684\u6700\u4f73\u529f\u80fd\u3002\u901a\u8fc7\u6570\u767e\u4e2a\u64cd\u4f5c\uff0c\u4f60\u53ef\u4ee5\u5c06\u5404\u79cd\u5355\u72ec\u7684\u6b65\u9aa4\u94fe\u63a5\u5728\u4e00\u8d77\u4ee5\u6784\u5efa\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u4ec0\u4e48\u662f\u81ea\u52a8\u5316\uff1f")),(0,n.kt)("p",null,"\u81ea\u52a8\u5316\u662f\u4e00\u79cd\u7531\u4e8b\u4ef6\u6fc0\u6d3b\u7684\u5feb\u6377\u6307\u4ee4\uff0c\u800c\u975e\u624b\u52a8\u542f\u52a8\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u201c\u5feb\u6377\u6307\u4ee4\u201d App \u8bbe\u7f6e\u4e2a\u4eba\u6216\u5bb6\u5ead\u81ea\u52a8\u5316\uff0c\u7136\u540e\u901a\u8fc7\u5230\u8fbe\u3001\u79bb\u5f00\u3001\u66f4\u6539 iPhone \u4e0a\u7684\u8bbe\u7f6e\u548c\u4e00\u5929\u4e2d\u7684\u67d0\u4e2a\u65f6\u95f4\u7b49\u4e8b\u4ef6\u89e6\u53d1\u81ea\u52a8\u5316\u5feb\u6377\u6307\u4ee4\u3002"),(0,n.kt)("h2",{id:"711-slack"},"7.11 Slack"),(0,n.kt)("h1",{id:"8-programming-language"},"8. Programming Language"),(0,n.kt)("h2",{id:"81-script-languages"},"8.1 Script languages"),(0,n.kt)("h3",{id:"811-skookumscript"},"8.1.1 SkookumScript"),(0,n.kt)("p",null,"SkookumScript uses a ",(0,n.kt)("a",{parentName:"p",href:"http://en.wikipedia.org/wiki/Multi-pass_compiler"},"multi-pass compiler")," to determine what files and components are needed, and automatically manages them in the memory of the parser and runtime, so aspects such as dependencies are always up-to-date."),(0,n.kt)("h4",{id:"8111-time-flow-logic"},"8.1.1.1 Time-flow logic"),(0,n.kt)("p",null,"Coroutines and methods\nCommands that may take time (multiple frames) to complete are called ",(0,n.kt)("em",{parentName:"p"},"coroutines")," and have identfier names that must start with an underscore ",(0,n.kt)("inlineCode",{parentName:"p"},"_"),". Commands that start without an underscore such as ",(0,n.kt)("inlineCode",{parentName:"p"},"println()")," complete immediately (within the same frame) and are called ",(0,n.kt)("em",{parentName:"p"},"methods"),"."),(0,n.kt)("h4",{id:"7112-conditional-flow-control"},"7.1.1.2 Conditional flow control"),(0,n.kt)("h3",{id:"812-lua"},"8.1.2 Lua"),(0,n.kt)("p",null,'It provides "meta language" features. You can implement object-oriented structures, or pure procedural functions, etc. It has a very simple C interface, and gives the engine developer a lot of flexibility in the language itself.'),(0,n.kt)("p",null,"Artists tend to love Lua too because it's very approachable, with plain and forgiving syntax. If your codebase is C or C++, I would highly recommend it."),(0,n.kt)("p",null,"It has good runtime performance when compared to other scripting languages like Python. (...and it has full support for closures.)"),(0,n.kt)("p",null,"It has a small memory footprint (approx 150k), it has excellent C/C++ bindings making it easy to add new game specific APIs, it is easy to pick up, it is flexible - i.e Has elements of OO, imperative and functional - none of which are mandatory, it has good buy-in from from mod community from games such as WoW etc."),(0,n.kt)("p",null,"\u7b80\u5355\u7684\u8bf4\uff0cregister-based\u7684\u6307\u4ee4\u683c\u5f0f\u8bbe\u8ba1\u628astack-based\u7684\u6307\u4ee4\u4e2d\u5206\u51e0\u6761\u6307\u4ee4\u8981\u5b8c\u6210\u7684\u4e8b\u60c5\u7528\u4e00\u6761\u6307\u4ee4\u641e\u5b9a\u4e86\uff0c\u5feb\u5f53\u7136\u662f\u5feb\u4e86\uff0c\u96be\u5ea6\u4e5f\u52a0\u5927\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u8fd8\u6709\u4e00\u70b9\u4e0a\u9762\u7684\u56de\u7b54\u4e2d\u4f3c\u4e4e\u6ca1\u6709\u63d0\u5230\uff0cLua\u4f7f\u7528\u7684\u662f\u4e00\u904d\u904d\u5386\u5c31\u751f\u4ea7\u6307\u4ee4\u7684\u65b9\u5f0f\uff0c\u5b66\u8fc7\u7f16\u8bd1\u539f\u7406\u7684\uff0c\u5927\u6982\u90fd\u80fd\u77e5\u9053\u4e00\u822c\u5206\u4e24\u904d\u904d\u5386\uff0c\u7b2c\u4e00\u904d\u751f\u6210AST\uff0c\u518d\u4e00\u904d\u904d\u5386AST\u751f\u6210\u6307\u4ee4\uff0c\u800c\u5728Lua\u4e2d\u662f\u76f4\u63a5\u8df3\u8fc7\u4e86AST\u6307\u4ee4\u8fd9\u4e00\u6b65\u7684\u3002"),(0,n.kt)("p",null,"\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5feb\u662f\u5feb\u4e86\uff0c\u4ee3\u7801\u7684\u5b9e\u73b0\u96be\u5ea6\u4e5f\u5927\u4e86\u4e9b\u3002\u6700\u65e9\u7684Lua\u89e3\u91ca\u5668\uff0c\u4e5f\u662f\u4f7f\u7528lex\u3001yacc\u8fd9\u6837\u7684\u5de5\u5177\u6765\u81ea\u52a8\u751f\u6210\u4ee3\u7801\u7684\uff0c\u540e\u6765\u4e3a\u4e86\u63d0\u5347\u6027\u80fd\uff0c\u4f5c\u8005\u6539\u6210\u4e86\u81ea\u5df1\u624b\u5199\u7684\u9012\u5f52\u4e0b\u964d\u7684\u5206\u6790\u5668\u3002\u8fd9\u90e8\u5206\u4ee3\u7801\u662f\u6211\u8ba4\u4e3aLua\u4ee3\u7801\u4e2d\u6700\u96be\u7406\u89e3\u7684\u4e00\u4e2a\u90e8\u5206\u4e86--\u56e0\u4e3a\u5b83\u8981\u4e00\u904d\u5206\u6790\u5e72\u592a\u591a\u7684\u4e8b\u60c5\u4e86\u3002"),(0,n.kt)("p",null,"\u6211\u5728\u9605\u8bfbLua\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\uff0c\u80fd\u5145\u5206\u611f\u53d7\u5230\u4f5c\u8005\u4e3a\u4e86Lua\u5728\u6027\u80fd\u4e0a\u7684\u63d0\u5347\u82b1\u8d39\u7684\u5fc3\u8840\uff0c\u81f4\u656c\u3002"),(0,n.kt)("p",null,"\u629b\u5f00\u7406\u8bba\u4e0d\u8c08\uff0c\u5982\u679c\u8981\u5728 Lua \u4e2d\u5b9e\u8df5\uff0c\u6211\u4eec\u5230\u5e95\u53ef\u4ee5\u505a\u70b9\u4ec0\u4e48\u5462\uff1f"),(0,n.kt)("p",null,"\u6211\u8ba4\u4e3a\u9700\u8981\u6709\u8fd9\u51e0\u4e2a\u65b9\u9762\uff1a"),(0,n.kt)("p",null,"\u9996\u5148\u5e94\u8be5\u5bf9 Lua \u52a0\u5f3a\u7c7b\u578b\u7cfb\u7edf\u3002Lua \u7684\u52a8\u6001\u6027\u5929\u7136\u652f\u6301\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u805a\u5408\u5728\u4e00\u8d77\uff0c\u6211\u4eec\u628a\u4e0d\u540c\u7684 Component \u653e\u5728\u4e00\u5f20\u8868\u91cc\u7ec4\u5408\u6210 Entity \u5c31\u8db3\u591f\u4e86\u3002\u4f46\u5982\u679c Component \u5206\u7684\u5f88\u7ec6\u7684\u8bdd\uff0c\u7528\u5f88\u591a\u7684\u8868\u7ec4\u5408\u6210\u4e00\u4e2a Entity \u5bf9\u8c61\u7684\u989d\u5916\u5f00\u9500\u4e0d\u5c0f\u3002\u4e0d\u50cf C++ \uff0c\u7ed3\u6784\u4f53\u805a\u5408\u7684\u989d\u5916\u5f00\u9500\u51e0\u4e4e\u4e3a\u96f6\u3002\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u628a\u4e0d\u540c Component \u7684\u6570\u636e\u76f4\u63a5\u5e73\u5766\u653e\u5728\u4e00\u4e2a table \u4e2d\uff0c\u53ea\u8981\u952e\u503c\u4e0d\u51b2\u7a81\u5373\u53ef\u3002\u4f46\u662f\u6211\u4eec\u9700\u8981\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\u65b9\u4fbf\u8fd0\u884c\u65f6\u4ece Entity \u4e2d\u8403\u53d6\u51fa Component \u6765\u3002\u53e6\u5916\uff0c\u5982\u679c\u662f C / Lua \u6df7\u5408\u8bbe\u8ba1\u7684\u8bdd\uff0c\u67d0\u4e9b Component \u8fd8\u5e94\u8be5\u53ef\u4ee5\u662f userdata \u3002"),(0,n.kt)("p",null,"\u4ece\u8282\u7701\u7a7a\u95f4\u53ca\u65b9\u4fbf\u904d\u5386\u7684\u89d2\u5ea6\u8bb2\uff0c\u6211\u4eec\u751a\u81f3\u53ef\u4ee5\u628a\u540c\u7c7b\u7684 C Component \u805a\u5408\u5728\u4e00\u5927\u5757\u5185\u5b58\u4e2d\uff0c\u7136\u540e\u5728 Entity \u7684 table \u4e2d\u53ea\u4fdd\u7559\u4e00\u4e2a lightuserdata \u5373\u53ef\u3002ECS \u7684 System \u6700\u91cd\u8981\u7684\u64cd\u4f5c\u5c31\u662f\u904d\u5386\u5904\u7406\u540c\u7c7b Component \uff0c\u8fd9\u6837\u5929\u7136\u5c31\u53ef\u4ee5\u5206\u4e3a C System \u548c Lua System \u3002\u6570\u636e\u7684\u5185\u805a\u6027\u5f88\u9ad8\uff0c\u53ef\u4ee5\u76f4\u63a5\u533a\u5206\u5f00 C data \u548c Lua Data \u3002"),(0,n.kt)("p",null,"\u7136\u540e\u3001\u5c31\u662f\u65b9\u4fbf\u7684\u904d\u5386\u3002ECS \u7684 System \u9700\u8981\u505a\u7684\u5c31\u662f\u7b5b\u9009\u51fa\u5b83\u5173\u5fc3\u7684 Entity \uff0c\u9488\u5bf9\u5176\u4e2d\u7684 Component \u505a\u64cd\u4f5c\u3002\u5982\u679c\u9700\u8981\u7b5b\u9009\u7ed3\u679c\u5927\u5927\u5c11\u4e8e\u5168\u4f53 Entity \u6570\u91cf\uff0c\u904d\u5386\u9010\u4e2a\u5224\u65ad\u5c31\u4f1a\u6548\u7387\u5f88\u4f4e\u3002\u597d\u5728\u5728 Lua \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u5bb9\u6613\u5730\u505a\u51fa cache \uff0c\u53ea\u9700\u8981\u904d\u5386\u7b5b\u9009\u4e00\u6b21\uff0c\u5728\u76d1\u63a7\u65b0\u7684 Component \u7684\u8bde\u751f\u5c31\u53ef\u4ee5\u65b9\u4fbf\u7684\u7ef4\u62a4\u904d\u5386\u7528\u7684\u96c6\u5408\u4e86\u3002"),(0,n.kt)("p",null,"Squirrel"),(0,n.kt)("p",null,"\u53d7lua\u5f71\u54cd\u6700\u5927\uff0c\u4f46\u98ce\u683c\u662fC/C++\u98ce\u683c\u7684\uff0c\u5728lua\u57fa\u7840\u4e0a\u6dfb\u52a0\u4e86class\uff0carray\u7b49"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://squirrel-lang.org/#overview"},"http://squirrel-lang.org/#overview")),(0,n.kt)("p",null,"V8 JavaScript from Google"),(0,n.kt)("h3",{id:"813-gamemonkey"},"8.1.3 GameMonkey"),(0,n.kt)("p",null,"This one is used by several teams. It's faster than Lua and better at threading."),(0,n.kt)("p",null,"\u6ca1\u6709\u7ef4\u62a4\u4e86"),(0,n.kt)("h3",{id:"814-python"},"8.1.4 Python"),(0,n.kt)("p",null,"This one has been used in several games (e.g. Civilization IV)."),(0,n.kt)("p",null,"It is very easy to teach to non-programmers/designers. It is even easier to pick up for developers since it essentially reads like pseudocode. Being dynamically typed is just one of the aspects that help to get people with little to no prior coding experience up and running fast with the language."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The C bindings for python are much more geared towards extending python with C, than embedding python in C.")),(0,n.kt)("h3",{id:"815-javascript"},"8.1.5 JavaScript"),(0,n.kt)("h3",{id:"816-typescript"},"8.1.6 TypeScript"),(0,n.kt)("h3",{id:"817-scumm"},"8.1.7 SCUMM"),(0,n.kt)("h3",{id:"818-mono-script"},"8.1.8 Mono-script"),(0,n.kt)("p",null,"The Mono framework is faster than most (perhaps all?) of scripting languages out there because it's not interpreted, and because there's a layer between the compiler and the instruction set, it allows you to program in a variety of languages including C# and dialects of Python, Lua and Javascript."),(0,n.kt)("p",null,"Possible cons:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"If you're doing console development (including iOS), JITing code is apparently out of the question because you can't mark data pages as executable. The IL it has to be pre-compiled to the target platform."),(0,n.kt)("li",{parentName:"ul"},"Mono has license restrictions. You need a commercial license if you want to use it in an environment where the end user is not allowed/able to upgrade the Mono runtime.")),(0,n.kt)("h3",{id:"819-angelscript"},"8.1.9 AngelScript"),(0,n.kt)("h3",{id:"8110-schemeguile"},"8.1.10 Scheme/Guile"),(0,n.kt)("p",null,"With guile you can have your own DSL (Domain Specific Language) just for your game. Once you get used to the parentheses and prefix notation, scheme is heaven to work with."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"http://www.gnu.org/software/guile/"},"http://www.gnu.org/software/guile/")),(0,n.kt)("p",null,"libguile "),(0,n.kt)("p",null,"Guile also provides an object library, libguile, that allows other applications to easily incorporate a complete Scheme interpreter. "),(0,n.kt)("p",null,"\u8bbe\u8ba1\u539f\u5219\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u59cb\u7ec8\u5b9a\u4f4d\u4e3a\u4e00\u4e2a\u6269\u5c55\u8bed\u8a00"),(0,n.kt)("li",{parentName:"ul"},"Guile\u4f7f\u7528\u4fdd\u5b88\u5783\u573e\u56de\u6536\uff0cconservative garbage collection "),(0,n.kt)("li",{parentName:"ul"},"it implements the Scheme concept of continuations by copying and reinstating the C stack\u2014but whose practical consequence is that most existing C code can be glued into Guile as is, without needing modifications to cope with strange Scheme execution flows. "),(0,n.kt)("li",{parentName:"ul"},"Module system\uff0c\u5b83\u4f7f\u5f97extensions\u53ef\u4ee5\u4e0e\u4e4b\u524d\u7684\u6a21\u5757\u5171\u5b58")),(0,n.kt)("p",null,"\u6700\u5f00\u59cb\u662f\u57fa\u4e8eEmacs Lisp\u4f5c\u4e3aEmacs\u6269\u5c55\u8bed\u8a00\u7684\u5de8\u5927\u6210\u529f\uff0cGNU Project\u63d0\u51fa\u4e00\u79cd\u5e0c\u671b\u53ef\u4ee5\u5bf9\u6240\u6709GNU \u5e94\u7528\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u5b9e\u73b0\u7c7b\u4f3c\u529f\u80fd\u7684\u8bed\u8a00"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"1.5 Supporting Multiple Languages")," "),(0,n.kt)("p",null,"Since the 2.0 release, Guile\u2019s architecture supports compiling any language to its core virtual machine bytecode, and Scheme is just one of the supported languages. Other supported languages are Emacs Lisp, ECMAScript (commonly known as Javascript) and Brainfuck, and work is under discussion for Lua, Ruby and Python. "),(0,n.kt)("p",null,"This means that users can program applications which use Guile in the language of their choice, rather than having the tastes of the application\u2019s author imposed on them. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.4 Writing Guile Extensions")," "),(0,n.kt)("p",null,"You can link Guile into your program and make Scheme available to the users of your program. You can also link your library into Guile and make its functionality available to all users of Guile. "),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2.5 Using the Guile Module System")," "),(0,n.kt)("p",null,"Guile has support for dividing a program into modules. By using modules, you can group related code together and manage the composition of complete programs from largely in- dependent parts. "),(0,n.kt)("p",null,"Module\u4e4b\u95f4\u662f\u600e\u4e48\u901a\u4fe1\u7684\uff1f\u5b8c\u5168\u72ec\u7acb\u5417\uff1f"),(0,n.kt)("p",null,"3.1.1 Latent Typing "),(0,n.kt)("p",null,"\u6ca1\u6709\u529e\u6cd5\u4e3a\u4e00\u4e2a\u53d8\u91cf\u5b9a\u4e49\u7c7b\u578b\uff0c\u4ee5\u53ca\u4e3a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u5b9a\u4e49\u8fd4\u56de\u7c7b\u578b\uff0c\u6240\u6709\u7684\u53d8\u91cf\u548c\u8868\u8fbe\u5f0f\u90fd\u5fc5\u987b\u5728runtime\u7684\u65f6\u5019\u786e\u5b9a\uff0c\u4e00\u4e2a\u53d8\u91cf\u7684\u540d\u5b57x\u53ea\u4e0d\u8fc7\u8868\u793a\u5185\u5b58\u4e2d\u7684\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u540c\u65f6\u7531\u4e8e\u53d8\u91cf\u6ca1\u6709\u7c7b\u578b\uff0c\u6240\u4ee5\u53ef\u4ee5\u8d4b\u4e88\u65b0\u7684\u7c7b\u578b\u7684\u503c"),(0,n.kt)("p",null,"3.2.1 Procedures as Values\n\u8ddf\u5176\u4ed6\u53d8\u91cf\u4e00\u6837\u5904\u4e8e\u540c\u4e00\u4e2a\u7a7a\u95f4\uff0c\u6240\u4ee5\u4f60\u751a\u81f3\u53ef\u4ee5\u5bf9\u4e00\u4e2aprocedure\u4f7f\u7528\u4e00\u4e2a\u4e0d\u540c\u7684\u540d\u5b57"),(0,n.kt)("p",null,"5.7 An Overview of Guile Programming "),(0,n.kt)("p",null,"5.7.1.2 Four Steps Required to Add Guile "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"First, \u5728Guile\u4e2drepresent\u5e94\u7528\u7a0b\u5e8f\u5bf9\u8c61\uff0c\u9664\u975e\u662f\u4e00\u4e9b\u7b80\u5355\u7684\u5185\u7f6e\u6570\u636e\u7c7b\u578b\u5982\u6570\u5b57\uff0c\u5426\u5219\u6211\u4eec\u9700\u8981\u4f7f\u7528foreign object interface\u521b\u9020\u5bf9\u5e94\u7684Scheme\u6570\u636e\u7c7b\u578b\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u53d7\u5783\u573e\u56de\u6536\u7684\u7ba1\u7406"),(0,n.kt)("li",{parentName:"ul"},"Second\u7f16\u5199\u53ef\u4ee5\u88abGuile\u8bbf\u95ee\u7684operations"),(0,n.kt)("li",{parentName:"ul"},"Third,\u5728\u5bbf\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u9700\u8981\u6709\u4e00\u79cd\u673a\u5236\u80fd\u591f\u8c03\u7528\u6dfb\u52a0\u8fdb\u6765\u7684Guile\u65b9\u6cd5"),(0,n.kt)("li",{parentName:"ul"},"Finally,\u5728\u5e94\u7528\u7a0b\u5e8f\u7684top-level\uff0c\u9700\u8981\u505a\u4e00\u4e9b\u7ed3\u6784\u8c03\u6574\uff0c\u4f7f\u5f97\u53ef\u4ee5\u521d\u59cb\u5316Guile\u7684\u89e3\u91ca\u5668\uff0c\u4ee5\u53ca\u4e3aScheme\u5b9a\u4e49foreign objects\u548cprimitives")),(0,n.kt)("p",null,"5.7.1.3 How to Represent Dia Data in Scheme "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u8be5\u8868\u8ff0\u5fc5\u987b\u80fd\u591f\u88ab\u539f\u59cb\u8bed\u8a00decodable\uff0c\u56e0\u4e3a\u539f\u751f\u8bed\u8a00\u9700\u8981\u83b7\u53d6\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"The representation must also cope with Scheme code holding on to the value for later use. "),(0,n.kt)("li",{parentName:"ul"},"\u5185\u5b58\u6570\u636e\u540c\u65f6\u88abC\u548cScheme\u8bbf\u95ee\uff0c\u4e0d\u80fd\u53ea\u662f\u7b80\u5355\u5730\u4f7f\u7528\u5783\u573e\u56de\u6536\u673a\u5236")),(0,n.kt)("p",null,"One resolution of these issues is for the Scheme-level representation of a shape to be a new, Scheme-specific C structure wrapped up as a foreign object. The foreign object is what is passed into and out of Scheme code, and the Scheme-specific C structure inside the foreign object points to Dia\u2019s underlying C structure so that the code for primitives like square? can get at it. "),(0,n.kt)("p",null,"9 Guile Implementation "),(0,n.kt)("h3",{id:"8111-actionscript"},"8.1.11 ActionScript"),(0,n.kt)("p",null,"This is a hybrid dynamic/static typed language used to create Flash games, which can be widely distributed on the web. It is fairly well supported with libraries like Flixel, FlashPunk and Box2d."),(0,n.kt)("h3",{id:"8112-mruby"},"8.1.12 mruby"),(0,n.kt)("h2",{id:"82-erlang"},"8.2 Erlang"),(0,n.kt)("p",null,"Erlang \u7b97\u4e0d\u4e0a\u51b7\u95e8\uff0c\u81f3\u5c11\u4f60\u8fd8\u77e5\u9053\u540d\u5b57\uff0c\u5f88\u591a\u4f60\u8fde\u540d\u5b57\u90fd\u6ca1\u542c\u8fc7\u7684\u624d\u7b97\u51b7\u95e8\u3002\uff08\u4f46\u662f\u5f88\u591a\u51b7\u95e8\u7684\u8bbe\u8ba1\u7406\u5ff5\u5374\u975e\u5e38\u5148\u8fdb\uff09"),(0,n.kt)("p",null,"Erlang \u5728\u9ad8\u5e76\u53d1\u65b9\u9762\u6709\u4f18\u52bf\u8fd9\u4e2a\u8bf4\u6cd5\uff0c\u5176\u5b9e\u975e\u5e38\u7247\u9762\u3002Erlang \u6700\u725b\u903c\u7684\u5730\u65b9\u662f\u5b83\u662f\u76ee\u524d\u552f\u4e00\u4e00\u4e2a\u5177\u5907\u8f6f\u5b9e\u65f6\uff08Software Realtime\uff09\u7ea7\u522b\u7684\u7cfb\u7edf\u3002Java \u6a21\u4eff\u4e0d\u4e86\uff0cGo \u6a21\u4eff\u4e0d\u4e86\u3002\u5f53\u7136\u5982\u679c\u4f60\u8981\u7528 C/Rust \u4e4b\u7c7b\u6765\u505a\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u662f\u5176\u5b9e\u5c31\u662f\u628a Erlang \u518d\u505a\u4e00\u904d\u800c\u5df2\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u8f6f\u5b9e\u65f6\u6307\u7684\u662f\u5783\u573e\u56de\u6536\u6027\u80fd\u5e73\u7a33\u3002\u5982\u679c\u505a\u8bed\u97f3\u7c7b\u5e94\u7528\uff0c\u9700\u8981\u7f51\u7edc\u4f20\u8f93\u8fc7\u7a0b\u4e0d\u4f1a\u56e0\u4e3a GC \u56de\u6536\u5bfc\u81f4\u5ef6\u8fdf\u6296\u52a8\uff0cErlang \u662f\u4f60\u7684\u5f00\u7bb1\u5373\u7528\u7684\u6700\u4f73\u9009\u62e9\uff0c\u6ca1\u6709\u4e4b\u4e00\u3002"),(0,n.kt)("p",null,"\u201c\u542c\u8d77\u6765\u4e5f\u6ca1\u591a\u725b\u903c\u3002\u4e0d\u5c31\u662f GC \u6280\u672f\u7684\u4f18\u5316\u561b\u3002\u6211\u641e\u4e2a\u5e76\u53d1\u5f0f GC \u7b97\u6cd5\u4e0d\u5c31\u884c\u4e86\uff1f\u201c\u2014\u2014\u8bf4\u8fd9\u8bdd\u7684\uff0c\u53ea\u80fd\u8bf4\u7b2c\u4e00\u5e76\u4e0d\u4e86\u89e3 GC\uff0c\u7b2c\u4e8c\u4e5f\u6839\u672c\u4e0d\u77e5\u9053 Erlang \u7684\u6050\u6016\u4e4b\u5904\u3002\u53ea\u80fd\u8bf4\u670b\u53cb\uff0c\u4f60\u5bf9\u529b\u91cf\u4e00\u65e0\u6240\u77e5\u3002\u8fd9\u91cc\u4e0d\u60f3\u5c55\u5f00\u516b\u767e\u5b57\u590d\u8bfb\u673a\u5f0f\u4ecb\u7ecd\u3002\u81ea\u5df1\u53ef\u4ee5\u770b\u770b Erlang VM \u7684\u8bbe\u8ba1\u4ecb\u7ecd\u3002\u4f60\u4f1a\u660e\u767d\u4e3a\u4ec0\u4e48 Erlang \u91cc\u7684 GC \u624d\u662f\u771f\u6b63\u5b8c\u5168\u5e76\u884c\uff0c\u7edd\u65e0 Stop the World \u53ef\u80fd\uff0c\u800c\u4e14\u56de\u6536\u5ef6\u8fdf\u67d4\u6027\u53ef\u9884\u6d4b\u7684\u3002\u8fd9\u4e00\u5207\u4e0d\u662f\u6ca1\u6709\u4ee3\u4ef7\u7684\uff0c\u4ee3\u4ef7\u5c31\u662f\u53d8\u91cf\u5fc5\u987b\u7edd\u4e0d\u80fd\u88ab\u5171\u4eab\uff0c\u800c\u4e14\u4e0d\u80fd\u88ab\u4fee\u6539\u3002\u8fd9\u4e00\u6765 Java \u4e4b\u7c7b\u7684 C \u5bb6\u65cf\u8bed\u8a00\u8fd8\u73a9\u4e2a\u5565\uff0c\u51c9\u4e86\u3002"),(0,n.kt)("p",null,"\u53e6\u5916\u4e00\u4e9b\u56de\u7b54\u91cc\uff0c\u770b\u4e86\u4e00\u5708\uff0c\u5176\u5b9e\u5f88\u591a\u4e5f\u53ea\u662f\u968f\u4fbf\u7528\u4e86\u4e00\u4e0b\u8bd5\u8bd5\u3002\u8bf4\u51e0\u4e2a\u70b9\uff1a"),(0,n.kt)("p",null,"1\u3001Erlang \u662f\u5b98\u65b9\u81ea\u5e26\u4e00\u5957\u9759\u6001\u7c7b\u578b\u5206\u6790\u7cfb\u7edf\u7684\u2014\u2014",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=dialyzer&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"dialyzer"),"\uff0c\u4f60\u4e0d\u9700\u8981\u5b8c\u5168\u6807\u6ce8\u6240\u6709\u7c7b\u578b\uff0c\u672a\u6807\u6ce8\u7684\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\uff1b\u5b98\u65b9\u5efa\u8bae\u4f60\u5728\u6240\u6709\u9879\u76ee\u91cc\u90fd\u9ed8\u8ba4\u4f7f\u7528\u5b83\u6765\u68c0\u67e5\u9879\u76ee\uff0c\u5982\u679c\u4f60\u9075\u5faa\u8fd9\u4e2a\u5efa\u8bae\uff0c\u90a3\u4e48\u4f60\u8fd8\u80fd\u4eab\u53d7\u81ea\u52a8\u751f\u6210\u6587\u6863\u7684\u597d\u5904\uff1b\u800c\u4e14\u5b98\u65b9\u6807\u51c6\u5e93\u91cc\u4e5f\u90fd\u5199\u4e86\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"\u4e3a\u4ec0\u4e48 Erlang \u6ca1\u6709\u628a\u9759\u6001\u7c7b\u578b\u5206\u6790\u4f5c\u4e3a\u5439\u7684\u70b9\uff1f"),(0,n.kt)("p",null,"\u56e0\u4e3a\u9759\u6001\u7c7b\u578b\u7cfb\u7edf\uff08\u7f16\u8bd1\u671f\u68c0\u67e5\uff09\u5176\u5b9e\u6709\u5176\u5c40\u9650\u6027\uff0c\u7279\u522b\u662f\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e0b\uff0c\u4e24\u4e2a\u7cfb\u7edf A \u548c B\uff0c\u5047\u8bbe\u67d0\u6570\u636e\u7c7b\u578b\u505a\u4e86\u5347\u7ea7\uff0c\u90a3\u4e48\u5b9e\u9645\u7cfb\u7edf\u5347\u7ea7\u91cc\uff0c\u4f1a\u51fa\u73b0 A \u5347\u7ea7\u4e86\uff0cB \u8fd8\u5904\u4e8e\u65e7\u7248\u672c\u7684\u60c5\u51b5\u3002\u8fd9\u4e2a\u65f6\u5019\u8fd8\u6709\u4e2a\u5c41\u7684\u7c7b\u578b\u4e00\u81f4\u3002\u6240\u4ee5\u4f9d\u8d56\u4e8e\u9759\u6001\u7c7b\u578b\u5206\u6790\u4fdd\u91cd\u7cfb\u7edf\u4e00\u81f4\uff0c\u53ea\u80fd\u5bf9\u4e8e\u5355\u4e2a\u975e\u5206\u5e03\u5f0f\u7cfb\u7edf\u6bd4\u8f83\u597d\u3002\u5bf9\u4e8e\u771f\u5b9e\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u8bbe\u8ba1\u51fa\u53d1\u70b9\u6839\u672c\u4e0d\u662f\u7c7b\u578b\u4e00\u81f4\u3002\u800c\u662f\u5373\u4f7f\u4e0d\u4e00\u81f4\uff0c\u4e5f\u8981\u80fd\u5bb9\u5fcd\u3002\u8fd9\u5c31\u662f\u53e6\u5916\u4e00\u4e2a\u8bdd\u9898\u4e86\u3002"),(0,n.kt)("p",null,"\u989d\u5916\u63d0\u4e00\u53e5\uff0cErlang \u7684\u7c7b\u578b\u7cfb\u7edf\u662f\u5728\u4e0d\u5141\u8bb8\u4f60\u81ea\u5df1\u5b9a\u4e49\u65b0\u7c7b\u578b\u7684\u57fa\u7840\u4e0a\uff0c\u5374\u80fd\u591f\u5b8c\u7f8e\u7684\u6ee1\u8db3\u4f60\u7684\u7c7b\u578b\u8981\u6c42\u7684\u8bbe\u8ba1\u3002\u8bf4\u771f\u7684\uff0c\u6ca1\u6709\u4eba\u548c\u6211\u63d0\u8fc7\u8fd9\u4e00\u70b9\uff0c\u4f46\u662f\u5f53\u6709\u4e00\u5929\u6211\u7a81\u7136\u610f\u8bc6\u5230\u7684\u65f6\u5019\uff0c\u90a3\u4e00\u77ac\u95f4\u662f\u6781\u5176\u9707\u60ca\u7684\u2026\u2026\uff08\u60f3\u60f3 Haskell\uff09"),(0,n.kt)("p",null,"2\u3001Erlang \u81ea\u5e26",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%BA%90%E4%BB%A3%E7%A0%81&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6e90\u4ee3\u7801"),"\u53d8\u6362\u7cfb\u7edf\uff0c\u8fd9\u73a9\u610f\u513f\u7528\u4eba\u8bdd\u8bf4\u5c31\u662f\uff0c\u4f60\u53ef\u4ee5\u5bf9\u4f60\u81ea\u5df1\u7684\u6e90\u4ee3\u7801\u8fdb\u884c\u53d8\u6362\u3002\u6bd4\u5982 Erlang \u5b98\u65b9\u81ea\u5df1\u7684 EUnit \u5e93\uff0c\u5b83\u662f\u4e00\u4e2a\u5355\u5143\u6d4b\u8bd5\u5e93\u3002\u5b83\u7684\u539f\u7406\u662f\u4ec0\u4e48\uff1f\u5b9e\u9645\u4e0a\u5c31\u662f\u5f53\u4f60\u5f15\u7528 EUnit \u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u5bfc\u81f4\u4f60\u7684\u5f53\u524d\u6a21\u5757\u589e\u52a0\u4e00\u4e2a parse_transform \u6807\u8bb0\u3002\u7136\u540e\u7f16\u8bd1\u671f\u5c31\u77e5\u9053\u8fd9\u4e2a\u6a21\u5757\u9700\u8981\u88ab\u5916\u90e8\u91cd\u5199\u3002\u6700\u7ec8\u5b9e\u9645\u4e0a\u662f\u4ea4\u7ed9 eunit_autoexport \u6a21\u5757\u6765\u5904\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u673a\u5236\u4e0d\u662f\u7279\u6743\u3002\u4f60\u81ea\u5df1\u4e5f\u53ef\u4ee5\u7528\u3002\u4f46\u662f\u8fd9\u4e2a feature \u786e\u5b9e\u6bd4\u8f83\u9ad8\u7ea7\uff0c\u6bd4\u8f83\u5c11\u6709\u4eba\u8ba8\u8bba\u3002"),(0,n.kt)("p",null,"\u524d\u7aef\u5de5\u7a0b\u5e08\u719f\u6089\u7684 Babel \u5176\u5b9e\u505a\u7684\u5c31\u662f\u8fd9\u4ef6\u4e8b\u3002\u53ea\u4e0d\u8fc7\u5dee\u522b\u5728\u4e8e\uff0cErlang \u76f4\u63a5\u628a\u8fd9\u4e2a\u505a\u5230\u4e86\u5185\u90e8\u800c\u5df2\u3002\u800c\u4e14\u975e\u5e38\u7b80\u6d01\u3002\u5927\u90e8\u5206\u65f6\u5019\u90fd\u7528\u4e0d\u5230\u8fd9\u4e2a\u3002\u5f53\u65f6\u5f53\u4f60\u6709\u90a3\u4e48\u4e00\u4e24\u4e2a feature \u771f\u7684\u9700\u8981\u7528\u725b\u5200\u7684\u65f6\u5019\uff0c\u4f60\u4e00\u5b9a\u4f1a\u53d1\u51fa\u5367\u69fd\u592a\u723d\u4e86\u7684\u8bc4\u4ef7\u3002"),(0,n.kt)("p",null,"3\u3001Erlang \u7684\u6a21\u5757\u7cfb\u7edf\u662f\u6211\u89c1\u8fc7\u6700\u4eba\u6027\u5316\u7684\uff0c\u7b80\u5355\u5230\u5c0f\u5b66\u751f\u90fd\u80fd\u660e\u767d\u3002\u4f60\u4e0d\u9700\u8981 ",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=import&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"import")," \u4efb\u4f55\u6a21\u5757\u3002\u4f60\u60f3\u4f7f\u7528\uff0c\u5c31\u76f4\u63a5\u4f7f\u7528\u3002Erlang \u4f1a\u4e3a\u4f60\u81ea\u52a8\u5bfb\u627e\u5e76\u52a0\u8f7d\u3002\u670b\u53cb\u4eec\uff0c\u5176\u4ed6\u8bed\u8a00\u5934\u90e8\u90a3\u4e00\u5806 import \u600e\u4e48\u8bf4\u5462\uff0c\u771f\u7684\u662f\u8131\u88e4\u5b50\u653e\u5c41\u7684\u5b58\u5728\u3002\u56e0\u4e3a Erlang \u7684\u8bed\u6cd5\u4fdd\u8bc1\u4e86\uff0c\u80fd\u591f\u7b80\u5355\u7684\u626b\u63cf\u5f53\u524d\u6587\u4ef6\u5c31\u80fd\u63a8\u5bfc\u51fa\u5230\u5e95\u4f7f\u7528\u4e86\u54ea\u4e9b\u6a21\u5757\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u53ef\u4ee5\u5728\u4e0d\u505c\u6b62\u7cfb\u7edf\u7684\u60c5\u51b5\u4e0b\u5b89\u5168\u7684\u70ed\u5347\u7ea7\u3002\u662f\u7684\uff0c",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%83%AD%E5%8D%87%E7%BA%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u70ed\u5347\u7ea7"),"\u5176\u5b9e Python\u3001JavaScript \u4e4b\u7c7b\u7684\u7528\u70b9 Hack \u5c0f\u6280\u5de7\uff0c\u4e5f\u80fd\u6a21\u4eff\u4e2a\u4e03\u516b\u5206\u3002\u95ee\u9898\u662f\u6ca1\u6709\u4e00\u4e2a\u6562\u8bf4\u201c\u5b89\u5168\u201d\u3002\u56e0\u4e3a Erlang \u7684\u6a21\u5757\u70ed\u5347\u7ea7\u662f\u591a\u7248\u672c\u5e76\u5b58\u7684\u3002\u5047\u8bbe\u4e00\u4e2a\u8fdb\u7a0b\u771f\u6b63\u8dd1\uff0c\u5b83\u4f7f\u7528\u7684\u662f\u8001\u7248\u672c\u6a21\u5757\u3002\u90a3\u4e48\u5347\u7ea7\u7684\u65f6\u5019\uff0c\u65b0\u8fdb\u7a0b\u4f1a\u4f7f\u7528\u65b0\u7248\u672c\u3002\u4e92\u4e0d\u5e72\u6270\u3002"),(0,n.kt)("p",null,"\u5373\u4f7f\u65b0\u7248\u672c\u5e26\u6765\u4e86\u65b0\u95ee\u9898\uff0c\u4f60\u8fd8\u53ef\u4ee5\u65e0\u7f1d\u7684\u964d\u56de\u53bb\u3002\u5f53\u7136\uff0c\u4f60\u613f\u610f\uff0c\u4e5f\u53ef\u4ee5\u628a\u8001\u7684\u8fdb\u7a0b\u5e72\u6389\u4e00\u4e9b\uff0c\u76f4\u63a5\u5f3a\u5236\u5230\u65b0\u7248\u672c\u3002\u5176\u4ed6\u7cfb\u7edf\u8fd9\u4e48\u505a\u5b9e\u5728\u592a\u53ef\u6015\u3002\u53ef\u662f Erlang \u7684\u8fdb\u7a0b\u662f\u5bb9\u9519\u7684\uff0c\u72b6\u6001\u53ef\u6062\u590d\u800c\u4e14\u53ef\u5347\u7ea7\u7684\uff0c\u6240\u4ee5\u8fd9\u4e48\u505a\u8fd8\u662f\u53ef\u884c\u3002"),(0,n.kt)("p",null,"\u6a21\u5757\u70ed\u66f4\uff0c\u53ea\u662f\u5e94\u5bf9\u4e00\u4e9b\u5c40\u90e8\u5c0f\u4fee\u6539\u3002\u5982\u679c\u6a21\u5757\u95f4\u6709\u590d\u6742\u4f9d\u8d56\uff0c\u9700\u8981\u4e00\u6b21\u8fdb\u884c\u591a\u4e2a\u6a21\u5757\u70ed\u66f4\u600e\u4e48\u529e\uff1f\u653e\u5fc3\u5427\u3002Erlang \u6709\u5b8c\u6574\u7684\u65b9\u6848\u3002"),(0,n.kt)("p",null,"4\u3001\u5176\u4ed6\u8bed\u8a00\u91cc\uff0c\u7a0b\u5e8f\u57fa\u672c\u4e0a\u5c31\u662f\uff0c\u4e00\u4e2a\u4e3b\u5165\u53e3\uff0c\u7136\u540e\u8c03\u7528\u5176\u4ed6\u7b2c\u4e09\u65b9\u6a21\u5757\u8fd9\u6837\u7684\u8bbe\u8ba1\u3002\u4f46\u662f\u8fd9\u4e2a\u8bbe\u8ba1\u592a\u7b80\u964b\u3002Erlang \u7684\u8bbe\u8ba1\u662f\uff0c\u6574\u4e2a\u7cfb\u7edf\u662f\u7531\u4e00\u7cfb\u5217\u72ec\u7acb\u8fd0\u884c\u7684 Application \u7ec4\u6210\u7684\u3002\u6ca1\u9519\uff0c\u5176\u5b9e\u4f60\u53ea\u662f\u5728\u4e3a Erlang \u8fd9\u4e2a\u7cfb\u7edf\u91cc\u5f00\u53d1 Application\u3002\u5305\u62ec\u4fd7\u8bdd\u8bf4\u7684\u201c\u7cfb\u7edf",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E6%A0%87%E5%87%86%E5%BA%93&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A%22807952152%22%7D"},"\u6807\u51c6\u5e93"),"\u201d\u8fd9\u79cd\u73a9\u610f\u513f\uff0cErlang \u91cc\u4e5f\u662f\u72ec\u7acb\u7684 Application\u3002"),(0,n.kt)("p",null,"\u6709\u4f55\u533a\u522b\uff1f\u6bcf\u4e2a Application \u90fd\u6709\u81ea\u5df1\u7684\u4e00\u4e2a\u542f\u52a8\u8fc7\u7a0b\uff0c\u81ea\u5df1\u7684\u4e00\u7ec4\u8fdb\u7a0b\uff08\u6784\u6210\u76d1\u7763\u6811\uff0c\u5177\u5907\u72ec\u7acb\u7684\u5bb9\u9519\u6027\uff09\u3002\u76f8\u4e92\u4e4b\u95f4\u8fd0\u884c\u65f6\u8026\u5408\u662f\u677e\u6563\u7684\u3002\u6240\u4ee5\uff0cA \u548c B \u4e24\u4e2a Application \u4f60\u60f3\u8fd0\u884c\u5728\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6216\u8005\u591a\u53f0\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u4e0a\uff0c\u4ee3\u7801\u6709\u5dee\u522b\u5417\uff1f\u6ca1\u6709\u3002"),(0,n.kt)("p",null,"\u4f60\u611f\u89c9\u5230\u4e00\u4e1d\u5947\u602a\u7684\u6c14\u5473\u6ca1\u3002\u662f\u7684\uff0cErlang \u751a\u81f3\u6709\u81ea\u5df1\u7684 Shell \u7528\u6765\u7ba1\u7406\u548c\u63a7\u5236\u8fd9\u6574\u4e2a\u7cfb\u7edf\u3002\u800c\u8fd9\u4e2a Shell \u91cc\u5c31\u662f Erlang \u8bed\u8a00\u672c\u8eab\u3002\u5b8c\u7f8e\u7684\u4e00\u81f4\uff0c\u7b80\u76f4\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e00\u6837\u3002"),(0,n.kt)("p",null,"\u987a\u5e26\u4e00\u63d0\uff0cErlang \u662f\u53ef\u4ee5\u5199\u811a\u672c\u7684\uff0c\u53eb\u505a escript\u3002\u539f\u6c41\u539f\u5473\uff0c\u4fdd\u8bc1\u9c9c\u7f8e\u3002"),(0,n.kt)("p",null,"5\u3001\u4e00\u822c\u8bed\u8a00\u7684\u5b57\u7b26\u4e32\u5904\u7406\uff0c\u611f\u89c9\u5f88\u65b9\u4fbf\u3002\u4f46\u662f\u5f88\u591a\u8bed\u8a00\u5185\u90e8\u662f\u53ea\u80fd\u5904\u7406 Unicode \u7684\u67d0\u4e00\u79cd\u7f16\u7801\u7684\uff08UTF-8\u3001UTF-16BE \u662f\u6d41\u884c\u9009\u62e9\uff09\u3002\u5982\u679c\u60f3\u8981\u968f\u5fc3\u6240\u6b32\u7684\u53bb\u652f\u6301\uff0c\u5c31\u5fc5\u987b\u628a\u5b57\u7b26\u4e32\u5f53\u4f5c\u539f\u59cb\u4e8c\u8fdb\u5236\u6570\u636e\u5904\u7406\u3002\u4f46\u662f Erlang \u91cc\u6839\u672c\u6ca1\u6709\u8fd9\u4e2a\u95ee\u9898\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e2a\u5c55\u5f00\u8bf4\u6bd4\u8f83\u590d\u6742\u3002\u5f88\u591a\u4eba\u62b1\u6028 Erlang \u91cc\u5b57\u7b26\u4e32\u5904\u7406\u597d\u50cf\u4e0d\u65b9\u4fbf\u3002\u4e00\u4e2a\u91cd\u8981\u7684\u539f\u56e0\u662f\uff0c\u8fd9\u90e8\u5206\u7684\u7406\u89e3\u9700\u8981\u7a0d\u5fae\u6df1\u4e00\u70b9\u7684\u57fa\u7840\u77e5\u8bc6\uff08\u4e0d\u590d\u6742\uff09\u3002\u4ee5\u540e\u518d\u5c55\u5f00\u8bf4"),(0,n.kt)("p",null,"6\u3001Erlang \u91cc\u9762\u76f4\u63a5\u5305\u542b\u4e86\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u800c\u4e14\u53ea\u9700\u8981\u8fd9\u51e0\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u662f\u7684\uff0c\u6bd4\u5982 Erlang \u91cc\u662f\u81ea\u5e26\u72b6\u6001\u673a\u6a21\u5f0f\u7684\u3002\u8bf4\u5230\u8fd9\u91cc\u2026\u2026"),(0,n.kt)("h3",{id:"821-beam-vm"},"8.2.1 Beam VM"),(0,n.kt)("p",null,"\u5927\u5bb6\u90fd\u77e5\u9053erlang\u8981\u89e3\u51b3\u7684\u95ee\u9898\u662f\u201c\u9ad8\u5e76\u53d1\u201d\u548c\u201d\u5206\u5e03\u5f0f\u201c\u95ee\u9898\uff0c\u8fd9\u6837\u8bf4\u6709\u70b9\u592a\u62bd\u8c61\u3002"),(0,n.kt)("p",null,"\u5177\u4f53\u6765\u8bf4\uff0cerlang\u5728\u5e94\u7528\u5c42\u548c\u64cd\u4f5c\u7cfb\u7edf\u5c42\u4e4b\u95f4\u53c8\u52a0\u5165\u4e86\u4e00\u4e2a\u7ec6\u7c92\u5ea6\u7684\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\u5c42\uff08beam vm\uff09\uff0c\u8fd9\u4e2a\u5206\u914d\u5c42\u81ea\u52a8\u628a\u8ba1\u7b97\u4efb\u52a1\u5206\u6d3e\u5230os\uff08thread\uff09\u5c42\u3002\u8fd9\u5176\u5b9e\u662f\u9ad8\u5e76\u53d1\u5904\u7406\u4e2d\u4e00\u4e2a\u5f88\u7406\u60f3\u7684\u73af\u5883\uff0c\u8ba1\u7b97\u8d44\u6e90\u53ef\u4ee5\u66f4\u5408\u7406\u7684\u914d\u7f6e\u3002\u7406\u8bba\u4e0a\u53ef\u4ee5\u505a\u5230\u52a8\u6001\u6269\u5927\u6216\u8005\u7f29\u5c0f\u6240\u9700\u7684\u786c\u4ef6\u8ba1\u7b97\u8d44\u6e90\u3002"),(0,n.kt)("p",null,"\u6709\u4e86\u7ec6\u7c92\u5ea6\u7684\u81ea\u52a8\u8ba1\u7b97\u8d44\u6e90\u5206\u914d\uff0c\u5f88\u591a\u65f6\u5019\u5c31\u4e0d\u9700\u8981\u5728\u5e94\u7528\u5c42\u53bb\u8003\u8651\u8fd9\u4e2a\u95ee\u9898\u4e86\uff0c\u51cf\u5c11\u4e86\u5f88\u591a\u65e0\u8c13\u7684\u5de5\u4f5c\u3002"),(0,n.kt)("p",null,"\u8fd9\u4e0d\u6b63\u662f\u672a\u6765\u6240\u9700\u8981\u7684\u8ba1\u7b97\u6a21\u5f0f\u5417\uff1f"),(0,n.kt)("h3",{id:"842-concurrency-oriented-languages"},"8.4.2 Concurrency Oriented Languages"),(0,n.kt)("h4",{id:"8421-programming-by-observing-the-real-world"},"8.4.2.1 Programming by observing the real world"),(0,n.kt)("p",null,"We oden want to write programs that model the world or interact with the world. Writing such a program in a COPL is easy. Firstly, we perform an analysis which is a three-step process:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"We identify all the truly concurrent activities in our real world activ- ity."),(0,n.kt)("li",{parentName:"ol"},"We identify all message channels between the concurrent activities."),(0,n.kt)("li",{parentName:"ol"},"We write down all the messages which can flow on the dicerent message channels.")),(0,n.kt)("p",null,"Now we write the program. The structure of the program should exactly follow the structure of the problem. Each real world concurrent activity should be mapped onto exactly one concurrent process in our programming language. If there is a 1:1 mapping of the problem onto the program we say that the program is isomorphic to the problem."),(0,n.kt)("p",null,"It is extremely important that the mapping is exactly 1:1. The reason for this is that it minimizes the conceptual gap between the problem and the solution. If this mapping is not 1:1 the program will quickly degenerate, and become diecult to understand. This degeneration is oden observed when non-CO languages are used to solve concurrent problems. Oden the only way to get the program to work is to force several independent activities to be controlled by the same language thread or process. This leads to a inevitable loss of clarity, and makes the programs subject to complex and irreproducible interference errors."),(0,n.kt)("p",null,"In performing our analysis of the problem we must choose an appro- priate granularity for our model. For example, if we were writing an instant messaging system, we might choose to use one process per user and not one process for every atom in the user\u2019s body."),(0,n.kt)("h4",{id:"8422-characteristics-of-a-copl"},"8.4.2.2 Characteristics of a COPL"),(0,n.kt)("p",null,"COPLs are characterised by the following six properties:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"COPLs must support processes. A process can be thought of as a self-contained virtual machine."),(0,n.kt)("li",{parentName:"ol"},"Several processes operating on the same machine must be strongly isolated. A fault in one processe should not adversely ecect another process, unless such interaction is explicitly programmed."),(0,n.kt)("li",{parentName:"ol"},"Each process must be identified by a unique unforgeable identifier. We will call this the Pid of the process."),(0,n.kt)("li",{parentName:"ol"},"There should be no shared state between processes. Processes inter- act by sending messages. If you know the Pid of a process then you can send a message to the process."),(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be unreliable with no guarantee of delivery."),(0,n.kt)("li",{parentName:"ol"},"It should be possible for one process to detect failure in another process. We should also know the reason for failure.")),(0,n.kt)("h4",{id:"8423-process-isolation"},"8.4.2.3 Process isolation*"),(0,n.kt)("p",null,"The notion of ",(0,n.kt)("em",{parentName:"p"},"isolation")," is central to understanding COP, and to the con- struction of fault-tolerant sodware. Two processes operating on the same machine must be as independent as if they ran on physically separated machines."),(0,n.kt)("p",null,"Isolation has several consequences:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Processes have \u201cshare nothing\u201d semantics. This is obvious since they are imagined to run on physically separated machines."),(0,n.kt)("li",{parentName:"ol"},"Message passing is the only way to pass data between processes. Again since nothing is shared this is the only means possible to exchange data."),(0,n.kt)("li",{parentName:"ol"},"Isolation implies that message passing is asynchronous. If process communication is synchronous then a sodware error in the receiver of a message could indefinitely block the sender of the message destroying the property of isolation."),(0,n.kt)("li",{parentName:"ol"},"Since nothing is shared, everything necessary to perform a dis- tributed computation must be copied. Since nothing is shared, and the only way to communicate between processes is by message pass- ing, then we will never know if our messages arrive (remember we said that message passing is inherently unreliable.) The only way to know if a message has been correctly sent is to send a confirmation message back.")),(0,n.kt)("h4",{id:"8424-names-of-processes"},"8.4.2.4 Names of processes"),(0,n.kt)("p",null,"We require that the names of processes are unforgeable. This means that it should be impossible to guess the name of a process, and thereby interact with that process. We will assume that processes know their own names, and that processes which create other processes know the names of the processes which they have created. In other words, a parent process knows the names of its children."),(0,n.kt)("p",null,"In order to write COPLs we will need mechanisms for finding out the names of the processes involved. Remember, if we know the name of a process, we can send a message to that process."),(0,n.kt)("p",null,"System security is intimately connected with the idea of knowing the name of a process. If we do not know the name of a process we cannot interact with it in any way, thus the system is secure. Once the names of processes become widely know the system becomes less secure. We call the process of revealing names to other processes in a controlled manner the ",(0,n.kt)("em",{parentName:"p"},"name distribution problem"),"\u2014 the key to security lies in the name distribu- tion problem. When we reveal a Pid to another process we will say that we have published the name of the process. If a name is never published there are no security problems."),(0,n.kt)("p",null,"Thus knowing the name of a process is the key element of security. Since names are unforgeable the system is secure only if we can limit the knowledge of the names of the processes to trusted processes.\nIn many primitive religions it was believed that humans had powers over spirits if they could command them by their real names. Knowing the real name of a spirit gave you power over the spirit, and using this name you could command the spirit to do various things for you. COPLs use the same idea."),(0,n.kt)("h4",{id:"8425-message-passing"},"8.4.2.5 Message passing"),(0,n.kt)("p",null,"Message passing obeys the following rules:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Message passing is assumed to be atomic which means that a mes- sage is either delivered in its entirety or not at all."),(0,n.kt)("li",{parentName:"ol"},"Message passing between a pair of processes is assumed to be or- dered meaning that if a sequence of messages is sent and received between any pair of processes then the messages will be received in the same order they were sent."),(0,n.kt)("li",{parentName:"ol"},"Messages should not contain pointers to data structures contained within processes\u2014they should only contain constants and/or Pids.")),(0,n.kt)("h4",{id:"8426-protocols"},"8.4.2.6 Protocols*"),(0,n.kt)("p",null,"Isolation of components, and message passing between components, is architecturally suecient for protecting a system from the consequences of a sodware error, but it is not suecient to specify the behaviour of a system, nor, in the event of some kind of failure to determine which component has failed."),(0,n.kt)("p",null,"Up to now we have assumed that failure is a property of a single component, a single component will either do what it is supposed to do or fail as soon as possible. It might happen, however, that no components are observed to fail, and yet the system still does not work as expected."),(0,n.kt)("p",null,"To complete our programming model, we add therefore one more thing. Not only do we need completely isolated components that com- municate only by message passing, but also we need to specify the com- munication protocols that are used between each pair of components that communicate with each other."),(0,n.kt)("p",null,"By specifying the communication protocol that should be obeyed be- tween two components we can easily find out if either of the components involved has violated the protocol. Guaranteeing that the protocol is en- forced should be done by static analysis, if possible, or failing this by compiling run-time checks into the code."),(0,n.kt)("h2",{id:"83-move"},"8.3 Move"),(0,n.kt)("p",null,"Move,asafeandflexibleprogramminglanguagefortheLibraBlockchain","[1][2]",". Move is an executable bytecode language used to implement custom transactions and smart contracts. The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic: a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies. The safety and expressivity of Move have enabled us to implement significant parts of the Libra protocol in Move, including Libra coin, transaction processing, and validator management."),(0,n.kt)("h3",{id:"831-\u95ee\u9898"},"8.3.1 \u95ee\u9898"),(0,n.kt)("p",null,"\u76ee\u524d\u7684\u8bed\u8a00\u5b58\u5728\u51e0\u4e2a\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Indirect representation of assets\uff1a\u8d44\u6e90\u4ec5\u4ec5\u88ab\u7f16\u7801\u4e3a\u4e00\u4e2a\u6574\u6570\uff0c\u4f46\u662f\u4e00\u4e2a\u6574\u6570\u8ddf\u4e00\u4e2a\u8d44\u6e90\u8fd8\u662f \u6709\u5dee\u5f02\u7684\uff0c\u5c06\u8d44\u6e90\u8868\u8ff0\u4e3a\u4e00\u4e2a\u6574\u6570\u4f7f\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u5bb9\u6613\u51fa\u9519\u7684\u7a0b\u5e8f\uff0c\u8d44\u6e90\u9700\u8981\u88ab\u7279\u6b8a\u5bf9\u5f85"),(0,n.kt)("li",{parentName:"ul"},"Scarcity is not extensible: In addition, the scarcity protections are hardcoded directly in the language semantics. A programmer that wishes to create a custom asset must carefully reimplement scarcity with no support from the language."),(0,n.kt)("li",{parentName:"ul"},"Access control is not flexible\uff1a The only access control policy the model enforces is the signature scheme based on the public key. Like the scarcity protections, the access control policy is deeply embedded in the language semantics. It is not obvious how to extend the language to allow programmers to define custom access control policies.")),(0,n.kt)("h3",{id:"832-move-design-goals"},"8.3.2 Move Design Goals"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"First-Class Resources \uff1aBlockchain systems let users write programs that directly interact with digital assets. As we discussed in Section 2.2, digital assets have special characteristics that distinguish them from the values tradi- tionally used in programming, such as booleans, integers, and strings. A robust and elegant approach to programming with assets requires a representation that preserves these characteristics."),(0,n.kt)("p",{parentName:"li"},"The key feature of Move is the ability to define custom resource types with semantics inspired by linear logic ","[3]",": a resource can never be copied or implicitly discarded, only moved between program storage locations. These safety guarantees are enforced statically by Move\u2019s type system. Despite these special protections, resources are ordinary program values \u2014 they can be stored in data structures, passed as arguments to procedures, and so on. First-class resources are a very general concept that programmers can use not only to implement safe digital assets but also to write correct business logic for wrapping assets and enforcing access control policies.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Flexibility\uff1amodules/resources/procedures\uff0c\u6bcf\u4e2a\u4ea4\u6613\u5305\u542b\u4e00\u4e2aScript\uff0c\u8fd9\u4e2ascript\u53ef\u4ee5\u8c03\u7528\u4efb\u610fmodule\u4e2d\u7684procedure\uff0c\u63d0\u4f9b\u5de8\u5927\u7684\u7075\u6d3b\u6027")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Safety: resource safety, type safety, memory safety, Move\u5728\u8fd0\u884c\u65f6\uff08on-chain\uff09\u52a8\u6001\u5206\u6790")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Verifiability\uff1a\u5168\u90e8\u5728\u8fd0\u884c\u65f6\u505a\u9a8c\u8bc1\u4f1a\u5e26\u6765\u8ba1\u7b97\u590d\u6742\u5ea6\u548c\u534f\u8bae\u7684\u590d\u6742\u5ea6\uff0c\u6240\u4ee5\u7ed3\u5408off-chain + on-chain\u7684\u9a8c\u8bc1\uff0c\u4f7fon-chain\u5c3d\u53ef\u80fd\u8f7b\u91cf\u5e76\u4e14\u5c3d\u53ef\u80fd\u805a\u7126\u6838\u5fc3\u7684\u5b89\u5168\u5c5e\u6027\u4e0a"))),(0,n.kt)("p",null,"We have made several design decisions that make Move more amenable to static verification than most general-purpose languages:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"No dynamic dispatch. The target of each call site can be statically determined. This makes it easy for verification tools to reason precisely about the effects of a procedure call without performing a complex call graph construction analysis."),(0,n.kt)("li",{parentName:"ol"},"Limited mutability. Every mutation to a Move value occurs through a reference. References are temporary values that must be created and destroyed within the confines of a single transac- tion script. Move\u2019s bytecode verifier uses a \u201cborrow checking\u201d scheme similar to Rust to ensure that at most one mutable reference to a value exists at any point in time. In addition, the language ensures that global storage is always a tree instead of an arbitrary graph. This allows verification tools to modularize reasoning about the effects of a write operation."),(0,n.kt)("li",{parentName:"ol"},"Modularity. Move modules enforce data abstraction and localize critical operations on re- sources. The encapsulation enabled by a module combined with the protections enforced by the Move type system ensures that the properties established for a module\u2019s types cannot be violated by code outside the module. We expect this design to enable exhaustive functional ver- ification of important module invariants by looking at a module in isolation without considering its clients.")),(0,n.kt)("h3",{id:"833-move-overview"},"8.3.3 Move Overview"),(0,n.kt)("h4",{id:"8331-peer-to-peer-payment-transaction-script"},"8.3.3.1 Peer-to-Peer Payment Transaction Script"),(0,n.kt)("p",null,"We use the term resource safety to describe the guarantees that Move resources can never be copied, reused, or lost. These guarantees are quite powerful because Move programmers can implement custom resources that also enjoy these protections."),(0,n.kt)("h4",{id:"8332-module"},"8.3.3.2 Module"),(0,n.kt)("h3",{id:"834-the-move-language"},"8.3.4 The Move Language"),(0,n.kt)("h2",{id:"84-smalltalk"},"8.4 Smalltalk"),(0,n.kt)("h3",{id:"841-object-model"},"8.4.1 Object Model"),(0,n.kt)("h4",{id:"8421-message"},"8.4.2.1 Message"),(0,n.kt)("p",null,"To describe how the objects are represented, the programmer must list all the fields in the object, and give each field a name. To describe how the object will behave, the programmer will give a series of \u201cmethods\u201d."),(0,n.kt)("p",null,"A method is like a function, except that it is applied to a specific object. We also say that the method is \u201cinvoked\u201d on an object or \u201csent to\u201d an object. The object in question is called the \u201creceiver.\u201d Every method is invoked on a receiving object. In C++ and Java, the receiver is called the \u201cthis object\u201d, but Smalltalk does not use this this terminology. The \u201cthis\u201d terminology makes for awkward wordings."),(0,n.kt)("p",null,"Methods in Smalltalk are similar to methods in Java and C++, where they are called \u201cmember functions\u201d. Methods may take arguments and may return a result. The method body is a sequence of executable statements. Methods are invoked from expressions, just as in other languages."),(0,n.kt)("p",null,"There is an important distinction between \u201cmethods\u201d and \u201cmessages\u201d. A method is a body of code, while a message is something that is sent. A method is similar to a function; in this analogy, sending a message is similar to calling a function. An expression which invokes a method is called a \u201cmessage sending expression.\u201d"),(0,n.kt)("p",null,"Smalltalk terminology makes a clear distinction between \u201cmessage\u201d and \u201cmethod\u201d, but Java and C++ terminology sometimes confuses these concepts. A message-sending expression will send a message to the object. How the object responds to the message depends on the class of the object. Objects of different classes will respond to the same message differently, since they will invoke different methods."),(0,n.kt)("p",null,"When a message is sent to an object, a method will be selected and executed. Since we cannot know, in general, the class of the object until run-time, the method cannot be selected until the message is actually sent. This is called \u201cdynamic binding\u201d, and Java, C++, and Smalltalk all have it. With straight functions, the compiler can look at a \u201ccall\u201d statement and figure out at compile-time (i.e., \u201cstatically\u201d) which body of code to branch to. C++ (which always prefers efficiency over clarity) encourages static binding and refers to dynamically bound methods as \u201cvirtual\u201d methods, and refers to the virtual table."),(0,n.kt)("p",null,"In the Smalltalk programming model, all binding is dynamic. However, the compiler and virtual machine will often bind methods statically for greater execution efficiency when it is can be done safely and without changing the program\u2019s behavior."),(0,n.kt)("h4",{id:"8422-message-sending-syntax"},"8.4.2.2 Message Sending Syntax"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Unary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x reset "a message-send in Smalltalk"\nx.reset() // a message-send in Java\n\nmyDept manager name last\nmyDept.manager().name().last()\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Binary Messages")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'x + y "in Smalltalk"\nx + y // in Java\nx.plus(y) //java\n')),(0,n.kt)("p",null,"\u5305\u62ec+ * <= == <===>"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Keyword Messages")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"}," x addKey: a value: b useMap: myMap ifError: errCode")," "),(0,n.kt)("p",null,"The message name is \u201caddKey:value:useMap:ifError:\u201d Four colons mean four arguments."),(0,n.kt)("h4",{id:"8423-discussion-of-smalltalk-syntax"},"8.4.2.3 Discussion of Smalltalk Syntax"),(0,n.kt)("p",null,"These rules are unfamiliar at first, and some readers are probably thinking \u201cthis is very different\u201d. The key is that Smalltalk syntax is very simple. In practice, the syntax is learned quickly and becomes second nature in no time."),(0,n.kt)("p",null,"Compared to Java or C++ syntax, Smalltalk syntax is simpler and cleaner. Technically, Smalltalk is LL(1), which means it can be parsed with the simplest top-down parsing algorithms, while C++ is LR(1) and cannot be parsed with any simple algorithms. What is hard for computers to parse is also hard for programmers to parse."),(0,n.kt)("p",null,"Smalltalk\u7684\u65b9\u5f0f\u66f4\u5229\u4e8e\u52a8\u6001binding\uff0c\u5305\u62ec\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5728x + y \u4e2d\u4e0d\u9700\u8981\u5411\u540e\u770b\u76f4\u63a5\u5c31\u53ef\u4ee5\u63a8\u5bfc\u9700\u8981\u4f7f\u7528\u7684method"),(0,n.kt)("li",{parentName:"ul"},"\u5728\u65b9\u6cd5\u8c03\u7528\u4e2d\uff0c\u5982x.processString (y, m, s, d)\uff0c\u6bcf\u4e2a\u53c2\u6570\u90fd\u6709\u540d\u5b57\uff0c\u5f62\u6210\u5305\u542b\u4fe1\u606f\u66f4\u591a\u7684\u51fd\u6570\u540d\u79f0processString:mapping:symbols:defaults:\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u5bf9\u51fd\u6570\u7684\u67e5\u627e")),(0,n.kt)("p",null,"\u76f8\u53cd\uff0c\u5728\u4f20\u7edf\u7684C++/Java\u4e2d\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7f16\u8bd1\u5668\u63a8\u5bfc\u7c7b\u578b\uff0c\u9700\u8981\u6784\u5efa\u8bed\u6cd5\u6811\uff0c\u4ee5\u53ca\u5404\u79cd\u8868\uff0c\u8fd9\u5bfc\u81f4\u52a8\u6001\u7ed1\u5b9a\u6216\u8005\u63a8\u5bfc\u7684\u80fd\u529b\u4e0b\u964d\u3002\u56e0\u4e3aSmalltalk\u662f\u5b8c\u5168\u65e0\u7c7b\u578b\u7684\uff0c\u4e0d\u50cfJava/C++\u6bcf\u4e2a\u53d8\u91cf\u90fd\u5fc5\u987b\u58f0\u660e\u4e00\u4e2a\u7c7b\u578b\u3002"),(0,n.kt)("p",null,"One might reasonably ask, why bother to declare variables at all, if there is no typing information? The primary answer is that every variable must be declared so that the compiler can set aside space for each variable. Every variable will be allocated 32 bits and can hold either a pointer to an object or a SmallInteger."),(0,n.kt)("p",null,"A second reason for declaring variables is so that the compiler can guard against misspellings of variable names by the programmer. Every variable must be declared. If, in the body of executable statements, the programmer misspells a variable name, the compiler will complain that the variable has not been declared."),(0,n.kt)("h4",{id:"8424-the-distinction-between-types-and-classes"},"8.4.2.4 The Distinction Between Types and Classes"),(0,n.kt)("p",null,"Languages like Java and C++ make a distinction between \u201ctypes\u201d and \u201cclasses\u201d. In Java, there are 3 kinds of types: classes, interfaces, and primitive types (like \u201cint\u201d). Each variable is given a type at compile-time; this places restrictions on what values can be assigned to that variable at run-time."),(0,n.kt)("p",null,"In Smalltalk there are no constraints on what can be assigned to a variable. Any variable may point to any class of object. It is the programmer\u2019s responsibility to make sure that a variable\u2019s value is of the correct class at run-time."),(0,n.kt)("p",null,"Which is better: a typed language or an un-typed language? Both approaches have their strengths and weaknesses. In my opinion, neither approach is clearly superior."),(0,n.kt)("p",null,"If a type system is well-designed, then it is often the case that the compiler can catch bugs that would otherwise go unnoticed until run-time. In this way, typed languages make programs more reliable and readable. On the other hand, a strong type system occasionally makes it difficult to do certain things. The programmer ends up writing code to defeat or work around the language\u2019s type system. It sometimes seems that type system is a burden to the programmer, providing only a false sense of protection."),(0,n.kt)("p",null,"With an un-typed language, the program is not cluttered up with type definitions and casting expressions. The algorithm tends to show through more clearly. However, when reading complex code, it can sometimes be virtually impossible to guess what kinds of data a given variable might point to at some point in the code."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Dynamic Typing")),(0,n.kt)("p",null,"Sometimes, un-typed languages like Smalltalk are said to be \u201cdynamically type,\u201d since each value has a type, but the compiler does not check the types. Languages like Java and C++ are said to be \u201cstatically typed.\u201d In a statically type language, the compiler checks to make sure every line of the program is type-correct. At runtime, there is no checking and, in theory, the program will run faster. In practice, Smalltalk pays only a very small penalty for dynamic type checking."),(0,n.kt)("p",null,"In a dynamically typed language, each value knows its type and these types are checked at run-time rather than at compile time. By \u201ceach value knows its type\u201d we mean that each object has an implicit pointer to its class. This is part of the object and you can\u2019t have an object without having immediate access to its class. Even with SmallIntegers, there is a tag bit that implicitly gives the class of the object as \u201cSmallInteger\u201d. Contrast this with C++, where you can have a 32-bit quantity without knowing whether it represents an \u201cint\u201d, or a pointer, or a \u201cfloat\u201d."),(0,n.kt)("p",null,"The term \u201cdynamic typing\u201d is somewhat confusing and should be avoided, since it confuses the ideas of \u201cclass\u201d and \u201ctype\u201d. Classes are not types. Sure, Smalltalk keeps class information around at run-time and relies on it, but so do \u201cstatically-typed\u201d languages like Java and C++."),(0,n.kt)("p",null,"Smalltalk is an \u201cuntyped, object-oriented\u201d language while Java is a \u201cstrongly typed, object-oriented language\u201d. C++, as always, defies any simple description."),(0,n.kt)("h3",{id:"842-smalltalk\u9762\u5411\u5bf9\u8c61"},"8.4.2 Smalltalk\u9762\u5411\u5bf9\u8c61"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"\u4f5c\u8005\uff1a\u6797\u5efa\u5165\n\u94fe\u63a5\uff1a",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/20275578/answer/26970925"},"https://www.zhihu.com/question/20275578/answer/26970925"),"\n\u6765\u6e90\uff1a\u77e5\u4e4e\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002")),(0,n.kt)("p",null,"Smalltalk \u7684\u4eae\u70b9\u5c31\u5728\u4e8e\uff0c\u5b83\u5728\u8bed\u8a00\u5c42\u9762\u5f15\u5165\u4e86\u4e00\u79cd\u79f0\u4e3a\u201c\u5bf9\u8c61\u201d\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u7cfb\u7edf\u3002\u4e00\u4e2a Smalltalk \u7a0b\u5e8f\u7531\u4e00\u7cfb\u5217\u7684\u9ad8\u7ea7\u52a8\u6001\u6a21\u5757\u6784\u6210\uff0c\u6bcf\u4e2a\u6a21\u5757\u4e4b\u95f4\u901a\u8fc7\u901a\u4fe1\u8fdb\u884c\u534f\u540c\u3002"),(0,n.kt)("p",null,"\u4e5f\u5c31\u662f\u8bf4\uff0c",(0,n.kt)("strong",{parentName:"p"},"Smalltalk \u6240\u79c9\u627f\u7684\u9762\u5411\u5bf9\u8c61\u601d\u60f3\u4f7f\u5f97\u6574\u4e2a\u8f6f\u4ef6\u7cfb\u7edf\u7684\u53ef\u5206\u5272\u6027\u548c",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E5%8F%AF%E7%BB%84%E5%90%88%E6%80%A7&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u53ef\u7ec4\u5408\u6027"),"\u8fc8\u4e0a\u4e86\u4e00\u4e2a\u65b0\u53f0\u9636\u3002\u8fd9\u662f",(0,n.kt)("a",{parentName:"strong",href:"https://www.zhihu.com/search?q=%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E6%80%9D%E6%83%B3&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9762\u5411\u5bf9\u8c61\u601d\u60f3"),"\u7684\u5149\u8f89\u6240\u5728\u3002")),(0,n.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u56de\u8fc7\u5934\u6765\u770b\u770b C++ \u548c Java \u4e2d\u7684\u9762\u5411\u5bf9\u8c61\u3002"),(0,n.kt)("p",null,"\u4e8b\u5b9e\u4e0a\uff0cC++ \u548c Java \u5728\u5b9e\u73b0\u9762\u5411\u5bf9\u8c61\u7684\u8def\u9014\u4e0a\u9047\u5230\u7684\u7b2c\u4e00\u9053\u574e\u662f\u4ed6\u4eec\u672c\u8eab\u90fd\u662f",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E9%9D%99%E6%80%81%E7%B1%BB&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u9759\u6001\u7c7b"),"\u578b\u7684\u8bed\u8a00\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u7c7b\u8bed\u8a00\u7684\u8bbe\u8ba1\u4fe1\u6761\u662f\u4e00\u5207\u7ed3\u6784\u7686\u987b\u9884\u5148\u63cf\u8ff0\uff0c\u56e0\u4e3a\u7f16\u8bd1\u5668\u8981\u68c0\u67e5\u3002\u4e8e\u662f\u6ca1\u4ec0\u4e48\u60ac\u5ff5\u7684\u7684\u5c31\u8d70\u4e0a\u4e86 Class-based OOP \u8fd9\u6761\u8def\uff08\u53e6\u4e00\u6761\u8def\u662f Prototype-based OOP\uff09\u3002"),(0,n.kt)("p",null,"Class-based OOP \u7684\u4e00\u4e2a\u7279\u5f81\u662f\u5bf9\u8c61\u7684\u7ed3\u6784\u9700\u8981\u9884\u5148\u58f0\u660e\uff0c\u5e76\u4e14\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u5141\u8bb8\u6539\u53d8\u2014\u2014 C++ \u548c Java \u7684\u4f5c\u8005\u6709\u4e00\u5343\u4e2a\u7406\u7531\u8fd9\u4e48\u5e72\uff0c\u6700\u57fa\u672c\u7684\u539f\u56e0\u5c31\u662f\u6027\u80fd\u8003\u8651\u2014\u2014\u4f46\u8fd9\u6837\u505a\u7684\u4ee3\u4ef7\u9996\u5148\u5c31\u524a\u5f31\u4e86\u7cfb\u7edf\u7684\u52a8\u6001\u6027\u3002"),(0,n.kt)("p",null,"\u66f4\u7cdf\u7cd5\u7684\u662f\uff0cC++ \u548c Java \u4e2d\uff0c\u8fde\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\u3002\u6211\u8fd9\u4e48\u8bf4\u4e00\u90e8\u5206\u670b\u53cb\u53ef\u80fd\u6ca1\u529e\u6cd5\u9a6c\u4e0a\u53cd\u5e94\u8fc7\u6765\u3002\u5176\u5b9e\u5c31\u662f\u8bf4\uff0c\u5728 Smalltalk \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4efb\u4f55\u4e00\u4e2a\u5bf9\u8c61\u968f\u610f\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\uff0c\u53ea\u8981\u4ed6\u4eec\u5bf9\u5916\u754c\u800c\u8a00\u884c\u4e3a\u4e00\u81f4\uff0c\u90a3\u4e48\u7cfb\u7edf\u4f9d\u7136\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\uff0c\u8fd9\u4e00\u70b9\uff0c\u5728\u5927\u5bb6\u66f4\u719f\u6089\u7684 Ruby\u3001Javascript \u7b49\u8bed\u8a00\u4e2d\uff0c\u88ab\u79f0\u4e3a Duck-Type \u6982\u5ff5\u3002"),(0,n.kt)("p",null,"\u5728 C++ \u548c Java \u4e2d\uff0c\u4f60\u4e0d\u80fd\u968f\u610f\u627e\u4e2a\u5bf9\u8c61 x \u6765\u66ff\u6362\u6389\u53e6\u5916\u4e00\u4e2a\u5bf9\u8c61 y\u3002\u5373\u4f7f\u4ed6\u4eec\u62e5\u6709\u5b8c\u5168\u76f8\u540c\u7684\u884c\u4e3a\u4e5f\u4e0d\u884c\u3002\u56e0\u4e3a C++ \u548c Java \u662f Class-based OOP \u6240\u4ee5\u8fde\u53ef\u66ff\u6362\u6027\u4e5f\u9700\u8981\u9884\u5148\u58f0\u660e\uff01\u8fd9\u79cd\u58f0\u660e\u65b9\u5f0f\u5c31\u662f\u8ba9\u65e0\u6570\u4eba\u6f78\u7136\u6cea\u4e0b\u7684\u2014\u2014\u7ee7\u627f\uff01"),(0,n.kt)("p",null,"\u5373\u4f7f\u4e00\u4e2a\u5bf9\u8c61 x \u548c y \u7684\u884c\u4e3a\u662f\u5b8c\u5168\u4e00\u6837\u7684\uff0c\u4f60\u4e5f\u4e0d\u80fd\u7528 x \u53bb\u66ff\u6362 y\u3002\u5141\u8bb8\u4f60\u66ff\u6362\u7684\u552f\u4e00\u524d\u63d0\u662f\uff0cx \u88ab\u58f0\u660e\u4e3a\u7ee7\u627f\u81ea y \u7684\u3002"),(0,n.kt)("p",null,"\u5728\u6709\u7a7a\u7684\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u518d\u8be6\u7ec6\u8ba8\u8bba\u4e00\u4e0b\u7ee7\u627f\u3002\u4f46\u662f\u5728\u8fd9\u91cc\uff0c",(0,n.kt)("strong",{parentName:"p"},"\u7b80\u5355\u7684\u6765\u8bf4\uff0c\u201c\u7ee7\u627f\u201d\u662f\u4e00\u4eba\u5206\u9970\u4e24\u89d2\u7684\u5178\u578b\u2014\u2014\u5b83\u65e2\u4f5c\u4e3a\u4ee3\u7801\u590d\u7528\u7684\u4e00\u79cd\u624b\u6bb5\uff0c\u540c\u65f6\u53c8\u6210\u4e3a\u4e86\u53ef\u66ff\u6362\u6027\u7684\u4e00\u79cd\u58f0\u660e\u3002\u8fd9\u79cd\u8bbe\u8ba1\u975e\u5e38\u5931\u8d25\uff0c\u96be\u4ee5\u4f7f\u7528\u5230\u76f4\u63a5\u5bfc\u81f4\u4e86\u9762\u5411\u5bf9\u8c61\u5728 C++ \u548c Java \u4e2d\u6210\u4e3a\u4e86\u4e00\u4e2a\u9609\u5272\u540e\u7684\u592a\u76d1\u3002")),(0,n.kt)("p",null,"\u4e3a\u4e86\u5f25\u8865\u7ee7\u627f\u7684\u8fd9\u79cd\u7f3a\u9677\uff0c\u4e8e\u662f\u5f15\u5165\u4e86 Interface \uff08\u53ea\u8868\u660e\u53ef\u66ff\u6362\u6027\uff0c\u4e0d\u590d\u7528\u4ee3\u7801\uff09\uff0c\u4f46\u8fd9\u4e5f\u6539\u53d8\u4e0d\u4e86\u4ec0\u4e48\u4e86\u3002\u6bd5\u7adf Interface \u7adf\u7136\u4e5f\u5f00\u59cb\u4e92\u76f8\u73a9\u8d77\u4e86\u7ee7\u627f\u7684\u6e38\u620f\u2026\u2026"),(0,n.kt)("p",null,"\u4e8e\u662f\u6700\u540e\uff0c\u6211\u4eec\u770b\u5230\uff0c\u5c3d\u7ba1 C++ \u548c Java \u4e00\u76f4\u58f0\u79f0\u81ea\u5df1\u662f\u9762\u5411\u5bf9\u8c61\u7684\uff0c\u4f46\u662f\u548c Smalltakl \u4e4b\u7c7b\u7684\u8bed\u8a00\u4e00\u6bd4\uff0c\u8fd9\u79cd\u9762\u5411\u5bf9\u8c61\u7684\u5b9e\u73b0\u51e0\u4e4e\u662f\u4e2a\u53bb\u52bf\u540e\u7684\u592a\u76d1\uff0c\u4ed6\u4eec\u6562\u81ea\u79f0\u4e3a\u7537\u4eba\u771f\u662f\u4e2a\u7b11\u8bdd\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5982\u679c\u53ef\u4ee5\u8bf4\u5f97\u76f4\u767d\u4e00\u4e9b\u7684\u8bdd\uff0cC++ \u672c\u8d28\u4e0a\u53ea\u80fd\u7b97\u662f\u4e00\u4e2a\u5e26\u6709\u5c11\u91cf\u9762\u5411\u5bf9\u8c61\u652f\u6301\u7684 C\uff0c\u800c Java \u66f4\u50cf\u662f\u4e00\u4e2a\u53bb\u6389\u4e86\u6307\u9488\uff0c\u5e26\u4e0a\u4e86\u5783\u573e\u56de\u6536\u7684 C++\u3002"),(0,n.kt)("p",null,"\u4f46\u518d\u600e\u4e48\u8bf4\uff0c\u9762\u5411\u5bf9\u8c61\u8fd9\u56de\u4e8b\uff0c\u5728 C++ \u548c Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u91cc\u7b80\u76f4\u90fd\u53ea\u80fd\u7b97\u4e2a\u70b9\u7f00\uff08\u53ef\u6015\u7684\u662f\u8fd9\u4e2a\u70b9\u7f00\u4f1a\u82b1\u6389\u4f60 70% \u7684\u5b66\u4e60\u65f6\u95f4\uff09\u3002"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u3002\u5728\u7ed3\u6784\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u52a8\u6001\u6027\u3002\u5b83\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u52a8\u6001\u6784\u9020\uff08\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\uff0c\u4e5f\u53ef\u4ee5\u6784\u9020\u4e00\u767e\u4e2a\uff09\uff0c\u52a8\u6001\u9500\u6bc1\u7684\uff1b\u5728\u62bd\u8c61\u5c42\u6b21\uff0c\u5bf9\u8c61\u4e4b\u6240\u4ee5\u9ad8\u7ea7\uff0c\u662f\u56e0\u4e3a\u5b83\u5177\u6709\u9694\u79bb\u6027\u3002\u5b83\u5e76\u4e0d\u76f4\u63a5\u4f9d\u8d56\u4e8e\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff0c\u800c\u662f\u901a\u8fc7\u901a\u4fe1\u6765\u4e0e\u4e4b\u534f\u4f5c\u7684\u3002\u53e6\u5916\uff0c\u5bf9\u8c61\u7684\u53ef\u66ff\u6362\u6027\u4e5f\u662f\u7cfb\u7edf\u5f39\u6027\u7684\u5173\u952e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u6211\u4eec\u90fd\u77e5\u9053\uff0c\u5b9e\u73b0\u4e0a\u8ff0\u7279\u6027\u5728\u76ee\u524d\u7684",(0,n.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=%E7%BC%96%E8%AF%91%E6%8A%80%E6%9C%AF&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A26970925%7D"},"\u7f16\u8bd1\u6280\u672f"),"\u6761\u4ef6\u4e0b\uff0c\u5f88\u96be\u4fdd\u8bc1\u9ad8\u6027\u80fd\u3002\u6240\u4ee5\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48 C++/Java \u4e4b\u7c7b\u7684\u8bed\u8a00\u8981\u81ea\u6211\u9609\u5272\u7684\u539f\u56e0\u3002\u8fd9\u91cc\u9762\u4e0d\u5f97\u4e0d\u8bf4\u786e\u5b9e\u662f\u900f\u7740\u4e00\u4e1d\u65e0\u5948\u3002"),(0,n.kt)("h2",{id:"85-verse"},"8.5 Verse"),(0,n.kt)("h1",{id:"9-\u62df\u5a32\u54f2\u5b66"},"9. \u62df\u5a32\u54f2\u5b66"),(0,n.kt)("h2",{id:"91-\u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48"},"9.1 \u5143\u5b87\u5b99\u7684\u793e\u4f1a\u4ef7\u503c\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u4ef7\u503c\u7531\u4e24\u90e8\u5206\u7ec4\u6210\uff1a"),(0,n.kt)("p",null,"\u4e00\u79cd\u662f\u901a\u8fc7\u89c6\u89c9\u3001\u97f3\u6548\u7b49\u7ed9\u4f60\u5e26\u6765\u5373\u65f6\u7684\u5feb\u4e50\uff1b\u53e6\u4e00\u79cd\u662f\u901a\u8fc7\u4f5c\u54c1\u627f\u8f7d\u7684\u6545\u4e8b\u3001\u5bf9\u4e16\u754c\u7684\u7406\u89e3\u3001\u4e2a\u4eba\u7684\u751f\u6d3b\u7ecf\u9a8c\u3001\u77e5\u8bc6\u7b49\u4fe1\u606f\u5e26\u7ed9\u4e2a\u4eba\u7684\u7cbe\u795e\u529b\u91cf\uff0c\u8fd9\u79cd\u529b\u91cf\u4e0d\u80fd\u5355\u7eaf\u6bd4\u505a\u77e5\u8bc6\uff0c\u5b83\u66f4\u591a\u662f\u4e30\u5bcc\u6211\u4eec\u7684\u7cbe\u795e\u4e16\u754c\uff0c\u4f46\u662f\u8fd9\u79cd\u4e30\u5bcc\u53ef\u4ee5\u901a\u8fc7\u7ed9\u6211\u67d0\u4e9b\u610f\u8bc6\u4ece\u800c\u4f7f\u6211\u4eec\u5728\u5de5\u4f5c\u4e2d\u521b\u9020\u66f4\u5927\u4ef7\u503c\uff0c\u4f8b\u5982\u5b83\u8ba9\u6211\u4eec\u66f4\u52a0\u79ef\u6781\u3001\u52c7\u6562\u7b49"),(0,n.kt)("p",null,"\u865a\u62df\u4e16\u754c\u4ef7\u503c\u7684\u4ea7\u751f\uff1a"),(0,n.kt)("p",null,"\u521b\u9020\u7684\u8fc7\u7a0b\u548c\u7ed3\u679c\u90fd\u4ea7\u751f\u4ef7\u503c\uff0c\u521b\u9020\u8fc7\u7a0b\u4ea7\u751f\u7684\u4ef7\u503c\u76f8\u5bf9\u4e8e\u521b\u4f5c\u8005\u81ea\u8eab\uff0c\u53c2\u89c1\u5a01\u5ec9\u83ab\u91cc\u65af\u8bba\u8457\uff0c\u5f53\u7136\u9664\u4e86\u521b\u4f5c\u7684\u8fc7\u7a0b\u672c\u8eab\uff0c\u521b\u4f5c\u7684\u4ef7\u503c\u8fd8\u6709\u4e00\u90e8\u4efd\u6765\u6e90\u4e8e\u522b\u4eba\u7684\u8ba4\u53ef\uff0c\u6bd4\u5982\u4f60\u521b\u9020\u7684\u662f\u4e00\u4e2a\u5b8c\u5168\u65e0\u610f\u4e49\u7684\u4eba\uff0c\u9664\u975e\u4f60\u81ea\u5df1\u89c9\u5f97\u5f88\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u80fd\u4f53\u9a8c\u5230\u81ea\u8eab\u5bf9\u8fd9\u4e2a\u521b\u9020\u7684\u4f53\u9a8c\uff0c\u4f46\u5982\u679c\u4f60\u662f\u9884\u671f\u5b83\u53ef\u4ee5\u8ba9\u522b\u4eba\u611f\u5230\u5feb\u4e50\uff0c\u90a3\u4e48\u8fd9\u79cd\u9884\u671f\u4ee5\u53ca\u5b9e\u9645\u7684\u53cd\u9988\u4f1a\u8ba9\u4f60\u611f\u5230\u66f4\u5927\u7684\u5feb\u4e50"),(0,n.kt)("p",null,"\u5728\u865a\u62df\u4e16\u754c\uff0c\u5feb\u4e50\u5c31\u662f\u4ef7\u503c"),(0,n.kt)("p",null,"\u56e0\u6b64\uff0c\u521b\u4f5c\u7684\u5feb\u4e50\uff0c\u4e0d\u4ec5\u6765\u6e90\u4e8e\u521b\u4f5c\u7684\u8fc7\u7a0b\uff0c\u66f4\u6765\u6e90\u4e8e\u4f5c\u54c1\u88ab\u5176\u4ed6\u7528\u6237\u6d88\u8d39\u548c\u4f53\u9a8c\u7684\u8fc7\u7a0b\uff0c\u5305\u62ec\u53cd\u9988\uff0c\u4ee5\u53ca\u6539\u8fdb\u548c\u518d\u521b\u4f5c"),(0,n.kt)("p",null,"\u5bf9\u4e8e\u521b\u4f5c\u7ed3\u679c\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u5bf9\u5e94\u4e0a\u9762\u7684\u4ef7\u503c"),(0,n.kt)("p",null,"\u901a\u8fc7\u6570\u5b57\u4f5c\u54c1\uff0c\u7279\u522b\u662f\u53d9\u4e8b\u6027\u89c6\u89c9\u827a\u672f\u4f5c\u54c1\u4ea7\u751f\u7684\u4ef7\u503c\uff0c\u4e0d\u5149\u662f\u8fd9\u79cd\u4e0a\u8ff0\u7684\u4ef7\u503c\u672c\u8eab\uff0c\u5979\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u610f\u4e49\u5728\u4e8e\uff1a\u8868\u8fbe\u80fd\u529b"),(0,n.kt)("p",null,"\u6211\u4eec\u6240\u6709\u7684\u4e8b\u60c5\u4e00\u822c\u901a\u8fc7\u6587\u5b57\u5f62\u5f0f\u8fdb\u884c\u8868\u8fbe\uff0c\u7406\u8bba\u4e0a\u4efb\u4f55\u6982\u5ff5\u90fd\u53ef\u4ee5\u901a\u8fc7\u7cbe\u51c6\u7684\u6587\u5b57\u8fdb\u884c\u8868\u8ff0\uff0c\u5c31\u50cf\u8ba1\u7b97\u673a\u7a0b\u5e8f\u4e00\u6837\uff0c\u4efb\u4f55\u8ba1\u7b97\u673a\u5bf9\u4e00\u6bb5\u7a0b\u5e8f\u7684\u7406\u89e3\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u7136\u800c\u4eba\u7c7b\u8bed\u8a00\u4e0d\u4e00\u6837\uff0c\u4eba\u7c7b\u8bed\u8a00\u7684\u5b57\u9762\u63cf\u8ff0\u901a\u5e38\u90fd\u5e26\u6709\u4e00\u5b9a\u7684\u80cc\u666f\u4fe1\u606f\uff0c\u540c\u6837\u4e00\u6bb5\u8bdd\uff0c\u4e0d\u540c\u80cc\u666f\u4fe1\u606f\u7684\u4eba\u7684\u7406\u89e3\u7a0b\u5ea6\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5e76\u4e14\u8fd9\u79cd\u80cc\u666f\u4fe1\u606f\u6709\u65f6\u5019\u4e0d\u4e00\u5b9a\u662f\u903b\u8f91\u4e0a\u7684\u77e5\u8bc6\uff0c\u8fd8\u6709\u6587\u5316\u3001\u827a\u672f\u3001\u751f\u6d3b\u7ecf\u5386\u7b49\u590d\u6742\u56e0\u7d20\uff0c\u56e0\u6b64\u5bfc\u81f4\u7684\u7ed3\u679c\u5c31\u662f\uff0c\u6bd4\u5982\uff1a"),(0,n.kt)("p",null,"\u6211\u544a\u8bc9\u4f60\u8981\u53d8\u5f97\u52c7\u6562\uff0c\u8fd9\u53e5\u8bdd\u5b57\u9762\u610f\u601d\u5f88\u6e05\u6670\uff0c\u4f46\u662f\u5173\u4e8e\u52c7\u6562\u662f\u4ec0\u4e48\uff0c\u4ed6\u53ef\u80fd\u6709\u5f88\u591a\u89e3\u91ca\uff0c\u5230\u5e95\u8981\u505a\u5230\u4ec0\u4e48\u624d\u7b97\u52c7\u6562\uff0c\u6ca1\u6709\u5b9a\u4e49"),(0,n.kt)("p",null,"\u4f46\u662f\u6211\u7ed9\u4f60\u770b\u4e86\u4e00\u90e8\u300a\u6307\u73af\u738b\u300b\u6216\u8005\u300a\u970d\u6bd4\u7279\u4eba\u300b\uff0c\u4f60\u9a6c\u4e0a\u5c31\u80fd\u83b7\u5f97\u5f88\u591a\u7cbe\u795e\u4e0a\u7684\u7406\u89e3\uff0c\u8fd9\u91cc\u9762\u4e0d\u5149\u662f\u7535\u5f71\u672c\u8eab\u5305\u542b\u4e86\u66f4\u591a\u4fe1\u606f\uff0c\u4ed6\u8fd8\u5305\u542b\u4e86\u5f88\u591a\u89c6\u89c9\u8bed\u8a00\u3001\u4ee5\u53ca\u878d\u5165\u4f60\u5728\u770b\u8fd9\u4e9b\u8bd7\u53e5\u5185\u5bb9\u548c\u6545\u4e8b\u65f6\u4ea7\u751f\u7684\u81ea\u6211\u60f3\u8c61\u529b\uff0c\u7b49\u7b49\uff0c\u8fd9\u4e9b\u90fd\u662f\u975e\u5b57\u9762\u7684\u4fe1\u606f\u6240\u80fd\u8868\u8fbe\u7684"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4f5c\u54c1\u878d\u5165\u7684\u4e0d\u5149\u662f\u521b\u4f5c\u8005\u7684\u7ecf\u9a8c\u77e5\u8bc6\uff0c\u8fd8\u6709\u5f88\u591a\u903b\u8f91\uff0c\u8868\u8fbe\u624b\u6cd5\u7b49\u7b49\u5f88\u590d\u6742\u7684\u56e0\u7d20"),(0,n.kt)("p",null,"\u6240\u4ee5\u8fd9\u5c31\u662f\u521b\u4f5c\uff0c\u5b83\u662f\u4e00\u79cd\u8868\u8fbe\u5f62\u5f0f\uff0c\u5b83\u7684\u8868\u8fbe\u80fd\u529b\u8d85\u8d8a\u6587\u5b57\u7684\u5b57\u9762\u610f\u601d\uff0c\u8fd9\u4e5f\u5c31\u662f\u827a\u672f\u521b\u4f5c\u8fd9\u79cd\u4e8b\u7269\u7684\u4ef7\u503c\u6240\u5728"),(0,n.kt)("p",null,"\u4ea4\u6d41\u548c\u793e\u4ea4\u4ea7\u751f\u4ef7\u503c"),(0,n.kt)("h2",{id:"92-realityis\u7684\u672c\u8d28\u662f\u4ec0\u4e48"},"9.2 RealityIS\u7684\u672c\u8d28\u662f\u4ec0\u4e48\uff1f"),(0,n.kt)("p",null,"RealityIS\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u662f\u4ece\u4e0a\u81f3\u4e0b\u7684\uff0c\u5373\u770b\u5230\u4e0a\u9762\u5e94\u7528\u5c42\u7684\u5f00\u653e\u95ee\u9898\uff0c\u7136\u540e\u627e\u5230\u95ee\u9898\u7684\u6839\u6e90\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u9650\u5236\uff0c\u7136\u540e\u518d\u6df1\u5165\u5230\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u8ba1\u7b97\u673a\u4f53\u7cfb\u7ed3\u6784\u7684\u673a\u5236\uff0c\u6700\u540e\u5f97\u51fa\u89e3\u51b3\u65b9\u6848\u3002"),(0,n.kt)("p",null,"\u8fd9\u8ddf\u4e00\u822c\u7684\u8f6f\u4ef6\u67b6\u6784\u8fc7\u7a0b\u5f88\u7c7b\u4f3c\uff0c\u7531\u4e1a\u52a1\u5c42\u7684\u9886\u57df\u9700\u6c42\uff0c\u6765\u5f15\u5bfc\u8f6f\u4ef6\u67b6\u6784\u7684\u8bbe\u8ba1\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u91cc\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u6df1\u5165\u5230\u4e86\u7f16\u7a0b\u8bed\u8a00\u8fd9\u4e00\u5c42\u3002\u7136\u800c\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u662f\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\uff0c\u56e0\u6b64\u5fc5\u7136\u5bfc\u81f4\u6cdb\u5316\u6027\u4e0d\u8db3\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\uff0c\u5f53\u6211\u4eec\u5f97\u5230\u8fd9\u5957\u6280\u672f\u67b6\u6784\u4e4b\u540e\uff0c\u518d\u53cd\u5411\u5411\u4e0a\u7406\u89e3\u7684\u65f6\u5019\uff0c\u5374\u53d1\u73b0\u5b83\u5177\u6709\u5f88\u5927\u7684\u901a\u7528\u548c\u6cdb\u534e\u80fd\u529b\uff0c\u8fd9\u4e00\u90e8\u5206\u539f\u56e0\u53ef\u80fd\u662f\u56e0\u4e3a\u6211\u4eec\u7684\u201c\u8f6f\u4ef6\u67b6\u6784\u201d\u53d1\u751f\u5728\u8bed\u8a00\u8fd9\u4e00\u8f83\u4f4e\u7684\u5c42\u6b21\uff0c\u5e76\u4e14\u6ca1\u6709\u6539\u53d8\u8bed\u8a00\u672c\u8eab\u7684\u673a\u7406\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u53e6\u4e00\u65b9\u9762\uff0c\u4e5f\u7531\u4e8e\u6211\u4eec\u5728\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\u6bd4\u8f83\u6ce8\u91cd\u5bf9\u6570\u636e\u7684\u7406\u89e3\uff0c\u5f53\u7136\u8fd9\u91cc\u4e5f\u6709\u5982\u6570\u636e\u9a71\u52a8\u3001\u9ad8\u6027\u80fd\u8ba1\u7b97\u3001\u9ad8\u5ea6\u5e76\u53d1\u7b49\u6280\u672f\u9700\u6c42\u6240\u5f15\u5411\u5bf9\u6570\u636e\u7684\u5173\u6ce8\uff0c\u4e5f\u6709\u523b\u610f\u8fed\u4ee3\u5730\u52a0\u6df1\u5bf9\u6570\u636e\u672c\u8d28\u7684\u601d\u8003\u548c\u7406\u89e3\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\u5f53\u6211\u4eec\u56de\u8fc7\u5934\u6765\uff0c\u5bf9\u6570\u636e\u6709\u4e86\u66f4\u6df1\u523b\u7684\u7406\u89e3\u548c\u8ba4\u77e5\u4e4b\u540e\uff0c\u4f1a\u53d1\u73b0\uff0c\u4ece\u6839\u6e90\u4e0a\uff0cRealityIS\u7684\u8fd9\u4e9b\u6cdb\u5316\u6027\u80fd\u529b\uff0c\u6765\u6e90\u4e8e\u5c06\u6574\u4e2a\u7a0b\u5e8f\u5f00\u53d1\u548c\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u4f20\u7edf\u4ee5\u786c\u4ef6\u5904\u7406\u5668\u4e3a\u6838\u5fc3\u7684\u7f16\u8bd1\u67b6\u6784\uff0c\u8f6c\u53d8\u4e3a\u4e86\u66f4\u7b26\u5408\u5b9e\u9645\u7269\u7406\u4e16\u754c\u76f4\u89c9\u7684\u673a\u5236\uff0c\u8fd9\u662f\u4e00\u4e2a\u6839\u672c\u6027\u8f6c\u53d8\u3002"),(0,n.kt)("p",null,"\u6700\u7ec8\uff0c\u6574\u4e2aRealityIS\u7684\u80fd\u529b\u548c\u601d\u7ef4\uff0c\u90fd\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u57fa\u4e8e\u6570\u636e\u7684\u7f16\u7a0b\u6a21\u578b\u3002\u5305\u62ec\u5982\u89e3\u8026\u3001\u5e76\u53d1\u3001\u6cdb\u578b\u3001\u81ea\u6211\u8fdb\u5316\u5f0f\u7684\u6807\u51c6\u673a\u5236\u7b49\u7b49\uff0c\u8fd9\u4e9b\u672c\u8d28\u4e0a\u90fd\u662f\u4ee5\u6570\u636e\u4e3a\u4e2d\u5fc3\u53bb\u601d\u8003\u624d\u80fd\u5f62\u6210\u7684\u7ed3\u679c\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0c\u5b83\u6709\u4e00\u79cd\u5076\u7136\uff0c\u4e5f\u6709\u5fc5\u7136\uff1b\u5076\u7136\u7684\u662f\u6211\u4eec\u5173\u6ce8\u5230\u6570\u636e\u8fd9\u4e2a\u4e2d\u5fc3\u95ee\u9898\uff0c\u5fc5\u7136\u7684\u662f\u6570\u636e\u4e3a\u4e2d\u5fc3\u7684\u6982\u5ff5\u662f\u4e00\u5957\u80fd\u591f\u4ee5\u771f\u5b9e\u4e16\u754c\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u4f5c\u4e1a\u7684\u89c4\u5219\u3002"),(0,n.kt)("p",null,"\u5c06\u6765\uff0c\u6211\u4eec\u8fd8\u4f1a\u7ee7\u7eed\u5b8c\u5584\u8fd9\u4e00\u6982\u5ff5\uff0c\u6700\u7ec8\uff0cRealityIS\u5c06\u53d8\u4e3a\u4e00\u4e2a\u4ee5\u771f\u5b9e\u4e16\u754c\u7684\u76f4\u89c9\u548c\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u4f5c\u65b9\u5f0f\u7c7b\u4f3c\u7684\u673a\u5236\u8fdb\u884c\u6574\u4e2a\u7a0b\u5e8f\u7684\u6784\u5efa\u548c\u8fd0\u884c\uff0c\u8fd9\u5c06\u662f\u4e00\u79cd\u5168\u65b0\u7684\u8ba1\u7b97\u67b6\u6784\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"mlp",src:l(3405).Z,width:"1400",height:"660"})),(0,n.kt)("p",null,"\u8fd9\u6709\u70b9\u50cf\u6df1\u5ea6\u5b66\u4e60\uff0c\u5b83\u7684\u5f88\u591a\u7406\u5ff5\u6765\u81ea\u4e8e\u5bf9\u5927\u8111\u673a\u5236\u7684\u601d\u8003\uff0c\u867d\u7136\u795e\u7ecf\u5143\u7684\u673a\u5236\u5e76\u4e0d\u4e00\u5b9a\u662f\u5927\u8111\u5b9e\u9645\u8fd0\u884c\u7684\u673a\u5236\uff08\u5b9e\u9645\u5f53\u7136\u8981\u590d\u6742\u5f97\u591a\uff09\uff0c\u4f46\u662f\u5b83\u53ef\u80fd\u81f3\u5c11\u662f\u5176\u4e2d\u6838\u5fc3\u7684\u4e00\u90e8\u5206\uff0c\u6216\u8005\u8bf4\u8fd9\u79cd\u601d\u8003\u6293\u4f4f\u4e86\u4e00\u5b9a\u7684\u672c\u8d28\uff0c\u6240\u4ee5\u6700\u7ec8\u57fa\u4e8e\u795e\u7ecf\u5143\u8fd9\u79cd\u7b80\u5355\u7684\u7ed3\u6784\u6784\u5efa\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u80fd\u591f\u5728\u8f83\u5927\u7a0b\u5ea6\u4e0a\u6a21\u62df\u5927\u8111\u7684\u673a\u5236\u3002"),(0,n.kt)("h2",{id:"93-\u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"},"9.3 \u6807\u51c6\u53ca\u81ea\u6211\u8fdb\u5316"),(0,n.kt)("p",null,"\u4e00\u4e2a\u4e0d\u80fd\u81ea\u6211\u8fdb\u5316\u7684Metaverse\u5c31\u662f\u4e00\u4e2a\u6e38\u620f\uff0c\u8fd9\u663e\u7136\u4e0d\u662fMetaverse\u7684\u5f62\u6001\u3002\u6b64\u5916\uff0c\u5373\u4fbf\u6211\u4eec\u89e3\u51b3\u4e86\u591a\u7a0b\u5e8f\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u5b83\u53ea\u662f\u589e\u52a0\u4e86\u4e00\u4e2a\u6e38\u620f\u5185\u7684\u7cfb\u7edf\u4f1a\u66f4\u52a0\u4e30\u5bcc\u3002\u7136\u800c\u5bf9\u4e8e\u4e00\u4e2a\u597d\u7684\u4e16\u754c\uff0c\u8fd9\u79cd\u4e30\u5bcc\u4e0d\u4ec5\u4ec5\u662f\u6307\u6570\u91cf\u4e0a\u8d8a\u6765\u8d8a\u591a\uff0c\u800c\u4e14\u9700\u8981\u5728\u4e30\u5bcc\u4e0a\u5f62\u6210\u5c42\u6b21\uff0c\u751a\u81f3\u5bf9\u4e8e\u793e\u4f1a\u7684\u8fd0\u884c\u673a\u5236\uff0c\u540e\u8005\u662f\u66f4\u91cd\u8981\u7684\uff0c\u56e0\u4e3a\u7528\u6237\u5173\u6ce8\u548c\u9700\u8981\u7684\u662f\u6709\u5c42\u6b21\u7684\u4fe1\u606f\uff0c\u800c\u4e0d\u662f\u66f4\u591a\u6d77\u91cf\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u65e0\u610f\u4e49\u65e0\u4ef7\u503c\u7684\u4fe1\u606f\u3002\u7136\u800c\uff0c\u4ec5\u4ec5\u5411\u5176\u4e2d\u589e\u52a0\u7a0b\u5e8f\u7684\u80fd\u529b\u4e0d\u80fd\u4fdd\u8bc1\u8fd9\u79cd\u4e30\u5bcc\u5f62\u6210\u5c42\u6b21\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"BMH-Week-2",src:l(4679).Z,width:"1000",height:"750"})),(0,n.kt)("p",null,"\u5f53\u4e00\u4e2a\u5f00\u53d1\u8005\u5411\u5176\u4e2d\u6dfb\u52a0\u4e86\u4e00\u4e2a\u65b0\u7684\u7a0b\u5e8f\uff0c\u600e\u4e48\u80fd\u591f\u5224\u65ad\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f\u5e76\u4e14\u662f\u8981\u901a\u8fc7\u7528\u6237\u7684\u89c6\u89d2\u53bb\u8bc4\u5224\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u4ef7\u503c\uff1f"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u793e\u4f1a\u8fdb\u5316\u7684\u673a\u5236\u6765\u6e90\u4e8e\u4e24\u80a1\u529b\u91cf\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5c11\u6570\u4f18\u79c0\u7684\u4eba\u80fd\u591f\u521b\u9020\u4e00\u4e9b\u597d\u7684\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u4e0d\u4ec5\u4ec5\u662f\u6307\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u7269\uff0c\u66f4\u53ef\u80fd\u5305\u542b\u4e00\u4e9b\u7ed3\u6784\u3001\u5173\u7cfb\u4ee5\u53ca\u793e\u4f1a\u8fd0\u4f5c\u7684\u4e00\u4e9b\u903b\u8f91\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5728Reality World\u5c31\u5bf9\u5e94\u6807\u51c6\uff0c\u6807\u51c6\u7684\u6570\u636e\u7ed3\u6784\u53ca\u5176\u6570\u636e\u7ec4\u5408\u80cc\u540e\u53cd\u6620\u7684\u662f\u4e00\u5b9a\u6df1\u5c42\u6b21\u7684\u7ed3\u6784\u3001\u5173\u7cfb\u548c\u903b\u8f91\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u597d\u7684\u4e1c\u897f\u4f1a\u88ab\u5176\u4ed6\u5c11\u90e8\u5206\u4eba\u63a5\u89e6\u5230\uff0c\u4e0d\u7ba1\u662f\u5730\u7406\u4f4d\u7f6e\u4e0a\u8f83\u8fd1\uff0c\u8fd8\u662f\u719f\u4eba\u4e4b\u95f4\u4ecb\u7ecd\u7b49\u7b49\uff0c\u8fd9\u90e8\u5206\u673a\u5236\u5728\u73b0\u5b9e\u793e\u4f1a\u4e2d\u5f80\u5f80\u901a\u8fc7\u5e7f\u544a \u8fdb\u884c\u52a0\u5f3a\u3002\u5f53\u8fd9\u4e00\u5c11\u90e8\u5206\u4eba\u4f7f\u7528\u4e4b\u540e\u89c9\u5f97\u771f\u6b63\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u4ed6\u4eec\u4f1a\u5f62\u6210\u63a8\u5e7f\u7684\u529b\u91cf\uff0c\u901a\u8fc7\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u628a\u8fd9\u4e2a\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u63a8\u5411\u66f4\u5927\u7684\u4eba\u7fa4\uff0c\u5982\u6b64\uff0c\u90a3\u4e9b\u6700\u6709\u4ef7\u503c\u7684\u4e1c\u897f\u88ab\u9010\u6b65\u6316\u6398\u51fa\u6765\u3002")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u4e24\u79cd\u673a\u5236\u5bfc\u81f4\u7684\u7ed3\u679c\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u521b\u9020\u4e1c\u897f\u4f1a\u6709\u4ef7\u503c\uff0c\u4f60\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u4f7f\u7528\uff0c\u4ece\u800c\u4e3a\u66f4\u591a\u4eba\u521b\u9020\u4ef7\u503c\uff0c\u4f60\u7684\u521b\u4f5c\u4e5f\u6709\u673a\u4f1a\u88ab\u66f4\u591a\u4eba\u8ba4\u53ef"),(0,n.kt)("li",{parentName:"ul"},"\u4eba\u4eec\u4f1a\u89c9\u5f97\u793e\u4f1a\u8d8a\u6765\u8d8a\u8fdb\u6b65\uff0c\u5e78\u798f\u611f\u66f4\u5f3a\uff0c\u56e0\u4e3a\u4f60\u611f\u89c9\u8fd9\u4e2a\u793e\u4f1a\u5728\u8fdb\u6b65\uff0c\u4f60\u8d8a\u6765\u8d8a\u80fd\u4f7f\u7528\u5230\u66f4\u597d\u7684\u4e1c\u897f")),(0,n.kt)("p",null,"\u8fd9\u79cd\u8fdb\u5316\u6700\u6839\u672c\u7684\u529b\u91cf\u6765\u81ea\u4e8e\u793e\u4f1a\u4e2a\u4eba\uff0c\u800c\u4e0d\u662f\u5c11\u6570\u4e2d\u592e\u673a\u6784\u3002\u6240\u4ee5\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4e00\u5b9a\u8981\u6709\u7c7b\u4f3c\u7684\u673a\u5236\u6765\u91ca\u653e\u4e2a\u4eba\u7684\u8fd9\u79cd\u529b\u91cf\uff0c\u800c\u4e0d\u662f\u4f9d\u9760\u5e73\u53f0\uff0c\u5e73\u53f0\u6ca1\u6cd5\u505a\u8fd9\u4ef6\u4e8b\u60c5\u3002"),(0,n.kt)("h2",{id:"94-reality-world\u4e2d\u7684\u5e02\u573a\u7ecf\u6d4e\u673a\u5236"},"9.4 Reality World\u4e2d\u7684\u201c\u5e02\u573a\u7ecf\u6d4e\u201d\u673a\u5236"),(0,n.kt)("p",null,"\u5373\u5e02\u573a\u4f1a\u51b3\u5b9a\u54ea\u4e9b\u4e1c\u897f\u662f\u66f4\u6709\u4ef7\u503c\u7684\uff0c\u8fd9\u662f\u4e0e\u4f20\u7edf\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u6839\u672c\u6027\u7684\u4e0d\u540c\uff0c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\u90fd\u9700\u8981\u7531\u5e73\u53f0\u5b9e\u73b0\u67d0\u79cd\u63a8\u8350\u6216\u8005\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u5fae\u535a\u7684\u4fe1\u606f\uff0c\u77e5\u4e4e\u7684\u6587\u7ae0\uff0c\u6dd8\u5b9d\u7684\u5546\u54c1\uff0c\u6296\u97f3\u7684\u89c6\u9891\uff0c\u8fd9\u5c31\u8981\u6c42\u57fa\u4e8e\u4e00\u5b9a\u7684\u6807\u7b7e\uff0c\u5206\u7c7b\u7b49\u673a\u5236\uff0c\u4fe1\u606f\u53d1\u5e03\u8005\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u79cd\u6807\u7b7e\u5206\u7c7b\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u5374\u4e0d\u662f\u8fd9\u6837\u7684\uff0c\u6211\u4eec\u6240\u6709\u7684\u4e00\u5207\u4e0d\u662f\u7531\u7c7b\u4f3c\u56fd\u5bb6\u6216\u4e2d\u592e\u7684\u5b98\u65b9\u673a\u6784\u51b3\u5b9a\u7684\uff0c\u800c\u662f\u9760\u4eba\u4eec\u81ea\u5df1\u7684\u9009\u62e9\uff0c\u4fc3\u8fdb\u6574\u4e2a\u4e16\u754c\u7684\u8fd0\u8f6c\u3002"),(0,n.kt)("p",null,"\u7c7b\u4f3c\u771f\u5b9e\u4e16\u754c\u516c\u53f8\u4e4b\u95f4\u7684\u9500\u552e\uff0c\u4ea7\u54c1\u8d8a\u597d\u5356\u7684\u8d8a\u591a\uff0c\u552e\u4ef7\u4e5f\u53ef\u4ee5\u968f\u5e02\u573a\u8c03\u6574\u3002"),(0,n.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u673a\u5236\u4fc3\u8fdb\u4f5c\u54c1\u7684\u4e0d\u65ad\u6539\u8fdb\uff0c\u5c31\u662fiPhone\u624b\u673a\u4e00\u6837\uff0c\u800c\u4f20\u7edf\u7684\u5185\u5bb9\u90fd\u662f\u4e00\u6b21\u6027\u53d1\u5e03\uff0c\u7f3a\u4e4f\u5bf9\u539f\u4ea7\u54c1\u7684\u6539\u8fdb\u673a\u4f1a\u3002\u6e38\u620f\u4e5f\u4e00\u822c\u7531\u4e8e\u592a\u590d\u6742\uff0c\u53d1\u5e03\u540e\u4e0d\u4f1a\u6709\u5927\u7684\u6539\u8fdb\u3002\u76ee\u524d\u8fd9\u4e9b\u6570\u5b57\u7ecf\u6d4e\u8ddf\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u90fd\u4e0d\u4e00\u6837\u3002"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"economics",src:l(6463).Z,width:"1920",height:"1280"})),(0,n.kt)("p",null,"\u53ef\u4ee5\u8ba4\u4e3a\u5b83\u4eec\u90fd\u662f\u201c\u7ed3\u6784\u5316\u201d\u7684\u7ecf\u6d4e\uff0c\u800c\u4e0d\u662f\u5e02\u573a\u7ecf\u6d4e\u3002"),(0,n.kt)("p",null,"\u771f\u6b63\u7684\u5e02\u573a\u7ecf\u6d4e\u4f1a\u4fc3\u4f7f\u548c\u50ac\u751f\u66f4\u591a\u7684\u597d\u5185\u5bb9\uff0c\u66f4\u591a\u7684\u4eba\u53c2\u4e0e\u3002\u800c\u4f20\u7edf\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u90fd\u662f\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u6216\u83b7\u5229\u3002"),(0,n.kt)("p",null,"\u5728\u771f\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff1b\u800c\u5728\u76ee\u524d\u7684\u81ea\u5a92\u4f53\u65f6\u4ee3\uff0c\u53ea\u6709\u5c11\u6570\u4eba\u5728\u53c2\u4e0e\u7ecf\u6d4e\u8d21\u732e\uff0c\u5927\u90e8\u5206\u90fd\u662f\u6d88\u8d39\u8005\u3002"),(0,n.kt)("p",null,"\u8fd9\u6709\u673a\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6d3b\u529b\u66f4\u5927\uff1a\u4f20\u7edf\u7684\u6570\u5b57\u5316\u7ecf\u6d4e\u90fd\u662f\u9760\u9605\u8bfb\u91cf\u7c7b\u4f3c\u4e0d\u51c6\u786e\u7684\u673a\u5236\uff0c\u5728\u8fd9\u79cd\u673a\u5236\u4e0b\u521b\u4f5c\u8005\u503e\u5411\u4e8e\u4f5c\u5f0a\u4e70\u91cf\uff0c\u800c\u4e0d\u662f\u521b\u4f5c\u66f4\u597d\u7684\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u9605\u8bfb\u91cf\u672c\u8eab\u662f\u4e2a\u4e0d\u51c6\u786e\u7684\u5ea6\u91cf\uff0c\u4f8b\u5982\u7528\u6237\u53ef\u80fd\u53ea\u662f\u6253\u5f00\u4e86\u9875\u9762\u5c31\u5173\u95ed\u4e86\uff0c\u6839\u672c\u5c31\u6ca1\u6709\u6df1\u5165\u4e86\u89e3\u5bf9\u5e94\u7684\u5185\u5bb9\u3002\u800c\u8fd9\u79cd\u901a\u8fc7\u201c\u5b9e\u9645\u4f7f\u7528\u201d\u800c\u4e0d\u662f\u201c\u67e5\u770b\u9875\u9762\u201d\u8f6c\u5316\u800c\u6765\u5bf9\u4ea7\u54c1\u7684\u7ecf\u6d4e\u5b9a\u4e49\uff0c\u66f4\u5bb9\u6613\u4fc3\u8fdb\u7528\u6237\u8fdb\u884c\u66f4\u597d\u7684\u521b\u4f5c\uff0c\u5c31\u50cf\u771f\u5b9e\u4e16\u754c\u4e00\u6837\u3002\u89c14.3\u8282\u66f4\u591a\u63cf\u8ff0\u3002"),(0,n.kt)("h2",{id:"95-\u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u5927\u5e76\u53d1\u7cfb\u7edf"},"9.5 \u600e\u6837\u6784\u5efa\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf"),(0,n.kt)("p",null,"\u5728\u672a\u6765\u7684\u5f00\u653eMetaverse\u4e2d\uff0c\u6574\u4e2a\u7cfb\u7edf\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u4f7f\u5f97\u4e0d\u53ef\u80fd\u4f7f\u7528\u5355\u72ec\u5e94\u7528\u7a0b\u5e8f\u7684\u601d\u7ef4\u548c\u67b6\u6784\u6765\u7ba1\u7406\u8fd9\u6837\u7684\u7cfb\u7edf\u3002\u5728\u8fd9\u6837\u7684\u7cfb\u7edf\u4e2d\uff0c\u7cfb\u7edf\u5185\u90e8\u7684\u4e00\u4e9b\u5b50\u7cfb\u7edf\u65f6\u65f6\u523b\u523b\u90fd\u5728\u8fd0\u884c\uff0c\u4e5f\u65f6\u65f6\u523b\u523b\u90fd\u5728\u53d1\u751f\u53d8\u5316\uff0c\u65e0\u8bba\u662f\u7a0b\u5e8f\u8fd8\u662f\u7528\u6237\u5185\u5bb9\u90fd\u662f\u5982\u6b64\uff0c\u5b83\u4e5f\u5177\u6709\u9ad8\u5ea6\u7684\u5e76\u53d1\u6027\u3001\u5e76\u884c\u6027\uff0c\u4ee5\u53ca\u9ad8\u5ea6\u7684\u67b6\u6784\u590d\u6742\u5ea6\u7279\u5f81\u3002"),(0,n.kt)("p",null,"\u663e\u7136\u73b0\u6709\u7684\u5e95\u5c42\u8ba1\u7b97\u67b6\u6784\uff0c\u4ee5\u53ca\u4e0a\u5c42\u7684\u8f6f\u4ef6\u5efa\u6784\u90fd\u65e0\u6cd5\u652f\u6491\u8fd9\u6837\u7684\u7cfb\u7edf\u3002"),(0,n.kt)("p",null,"\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u3001\u5927\u5e76\u53d1\u7cfb\u7edf\uff0c\u81f3\u5c11\u9700\u8981\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u591a\u5e94\u7528\u4e92\u64cd\u4f5c"),(0,n.kt)("li",{parentName:"ul"},"\u52a8\u6001\u7f16\u8bd1\u548c\u89e3\u91ca"),(0,n.kt)("li",{parentName:"ul"},"\u6309\u9700\u52a0\u8f7d\u7a0b\u5e8f\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316"),(0,n.kt)("li",{parentName:"ul"},"\u6297\u7834\u574f\u6027"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u5b89\u5168")),(0,n.kt)("p",null,"\u5bf9\u4e8e\u591a\u5e94\u7528\u4e92\u64cd\u4f5c\uff0c\u8fd9\u4e0d\u4ec5\u662f\u6280\u672f\u7684\u8981\u6c42\uff0c\u4e5f\u662f\u8fd9\u6837\u7684\u7cfb\u7edf\u7684\u4ef7\u503c\u6240\u5728\u3002\u5fc5\u987b\u5177\u6709\u72ec\u7acb\u5f00\u53d1\u8005\u80fd\u591f\u6269\u5c55\u7cfb\u7edf\u7684\u80fd\u529b\uff0c\u8fd9\u6837\u7684\u5927\u89c4\u6a21\u7a0b\u5e8f\u624d\u6709\u610f\u4e49\uff0c\u5426\u5219\u53ea\u7531\u67d0\u4e2a\u5927\u516c\u53f8\u7ef4\u62a4\u7684\u7a0b\u5e8f\u4e0d\u7ba1\u5728\u89c4\u6a21\u4e0a\u3001\u8fd8\u662f\u529f\u80fd\u4e30\u5bcc\u6027\u4e0a\u90fd\u662f\u4e0d\u8db3\u4ee5\u652f\u6491\u8fd9\u79cd\u9700\u6c42\u3002\u5f53\u7136\u8fd9\u4e48\u591a\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4e5f\u8fd8\u6d89\u53ca\u5230\u66f4\u52a0\u4e25\u683c\u7684\u5b89\u5168\u63a7\u5236\u673a\u5236\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7a0b\u5e8f\u4f53\u975e\u5e38\u5927\uff0c\u4ee5\u53ca\u6240\u6709\u7a0b\u5e8f\u90fd\u6709\u53ef\u80fd\u4e0d\u65ad\u66f4\u65b0\u548c\u53d8\u5316\uff0c\u56e0\u6b64\u6574\u4e2a\u7a0b\u5e8f\u5fc5\u987b\u662f\u52a8\u6001\u7f16\u8bd1\u7684\u3002\u7cfb\u7edf\u5fc5\u987b\u80fd\u591f\u968f\u65f6\u7f16\u8bd1\u5355\u4e2a\u7ec4\u4ef6\uff0c\u800c\u4e0d\u9700\u8981\u52a0\u8f7d\u5176\u4ed6\u6240\u6709\u7a0b\u5e8f\u3002\u6b64\u5916\uff0c\u6bcf\u4e2a\u6e90\u4ee3\u7801\u6216\u8005\u7ec4\u4ef6\u4e4b\u95f4\uff0c\u6700\u597d\u8fd8\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u56e0\u4e3a\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5f15\u7528\u6216\u5bfc\u81f4\u975e\u5e38\u590d\u6742\u7684\u94fe\u63a5\u8fc7\u7a0b\uff0c\u5373\u4f7f\u7ef4\u62a4\u8fd9\u6837\u7684\u5f15\u7528\u5173\u7cfb\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\u4e8b\u60c5\u3002\u8fd9\u4e5f\u51e0\u4e4e\u5bf9\u7f16\u7a0b\u6a21\u578b\u8fdb\u884c\u4e86\u9650\u5236\uff0c\u4f8b\u5982\u5982\u679c\u8ba9\u7528\u6237\u4f7f\u7528\u9762\u5411\u5bf9\u8c61\u7684\u673a\u5236\u8fdb\u884c\u5f00\u53d1\uff0c\u51e0\u4e4e\u5fc5\u7136\u7684\u7ed3\u679c\u662f\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5f88\u96be\u8fdb\u884c\u7f16\u8bd1\u548c\u89e3\u91ca\u3002\u6211\u4eec\u5fc5\u987b\u4ee5\u67d0\u79cd\u8ba1\u7b97\u67b6\u6784\u7ea7\u522b\u7684\u673a\u5236\uff0c\u4f7f\u53ef\u4ee5\u65e2\u4fdd\u8bc1\u5f00\u53d1\u8005\u5f00\u53d1\u529f\u80fd\u4e0d\u53d7\u9650\u5236\uff0c\u540c\u65f6\u53c8\u80fd\u5c06\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ef4\u6301\u4e00\u5b9a\u7684\u72ec\u7acb\u7ed3\u6784\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u52a8\u6001\u8bed\u8a00\u53ef\u80fd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u5b83\u8fd8\u5fc5\u987b\u6709\u67d0\u4e9b\u4e2d\u95f4\u62bd\u8c61\u6765\u51cf\u8f7b\u52a8\u6001\u8bed\u8a00\u7684\u6027\u80fd\u5f00\u9500\u3002"),(0,n.kt)("p",null,"\u4ec5\u4ec5\u80fd\u591f\u72ec\u7acb\u7f16\u8bd1\u8fd8\u4e0d\u591f\uff0c\u5b83\u4eec\u8fd8\u9700\u8981\u80fd\u591f\u6309\u9700\u52a0\u8f7d\uff0c\u53ea\u52a0\u8f7d\u5f53\u524d\u4efb\u52a1\u9700\u8981\u7684\u7a0b\u5e8f\u6307\u4ee4\uff0c\u53ea\u521d\u59cb\u5316\u5f53\u524d\u4efb\u52a1\u9700\u8981\u4f7f\u7528\u5230\u7684\u6570\u636e\u3002\u8fd9\u4e5f\u610f\u5473\u7740\u6240\u6709\u7684\u903b\u8f91\u5fc5\u987b\u5c3d\u53ef\u80fd\u4ee5\u6bd4\u8f83\u5c0f\u7c92\u5ea6\u7684\u7ed3\u6784\u7ec4\u7ec7\uff0c\u56e0\u4e3a\u592a\u5927\u7684\u903b\u8f91\u53ef\u80fd\u4f1a\u5b58\u5728\u4e00\u4e9b\u6d6a\u8d39\uff1a\u5185\u5b58\u4e2d\u53ef\u80fd\u4f1a\u5b58\u50a8\u5927\u91cf\u4e0d\u4f1a\u6267\u884c\u5230\u7684\u6307\u4ee4\u548c\u6570\u636e\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u9700\u8981\u903b\u8f91\u5c0f\u7ec4\u4ef6\u5316\u7684\u53e6\u4e00\u4e2a\u539f\u56e0\u662f\u4e3a\u4e86\u5e76\u884c\u5316\uff0c\u5f53\u7a0b\u5e8f\u67b6\u6784\u975e\u5e38\u590d\u6742\u65f6\uff0c\u662f\u5f88\u96be\u8fdb\u884c\u5e76\u884c\u6027\u548c\u5e76\u53d1\u4f18\u5316\u7684\uff0c\u6240\u4ee5\u5fc5\u987b\u5c06\u903b\u8f91\u5c3d\u53ef\u80fd\u5355\u5143\u5316\u3001\u72ec\u7acb\u5316\u624d\u6709\u53ef\u80fd\u8fdb\u884c\u7edf\u4e00\u7684\u8c03\u5ea6\u548c\u5206\u53d1\u3002\u5e76\u4e14\u8fd9\u79cd\u5206\u53d1\u4e0d\u5e94\u8be5\u662f\u7531\u5f00\u53d1\u8005\u81ea\u5df1\u6765\u5b9e\u73b0\uff0c\u56e0\u4e3a\u5e73\u53f0\u6ca1\u6709\u529e\u6cd5\u63a7\u5236\u5f00\u53d1\u8005\uff0c\u5982\u679c\u5f00\u53d1\u8005\u6ca1\u6709\u5b8c\u6210\u8fd9\u4ef6\u4e8b\u60c5\uff0c\u5c06\u4f1a\u4f7f\u5f97\u6574\u4e2a\u7a0b\u5e8f\u7684\u6267\u884c\u90fd\u53d7\u5230\u5f71\u54cd\u3002\u56e0\u6b64\u5fc5\u987b\u662f\u4e00\u79cd\u5e73\u53f0\u7ea7\u7684\u673a\u5236\u6765\u6267\u884c\u8fd9\u4e2a\u8fc7\u7a0b\u3002"),(0,n.kt)("p",null,"\u7531\u4e8e\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5b58\u5728\u7740\u4e0d\u53d7\u63a7\u7684\u4ee3\u7801\uff0c\u56e0\u6b64\u7a33\u5b9a\u6027\u4f1a\u662f\u4e00\u4e2a\u91cd\u5927\u7684\u95ee\u9898\uff0c\u4e00\u65b9\u9762\u662f\u5e73\u53f0\u8981\u5bf9\u4ee3\u7801\u6709\u4e00\u5b9a\u7684\u5ba1\u6838\u548c\u6d4b\u8bd5\u673a\u5236\uff0c\u53e6\u4e00\u65b9\u9762\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u53ef\u80fd\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u5d29\u6e83\u7684\u95ee\u9898\uff0c\u4f8b\u5982\u7531\u4e8e\u7ec4\u4ef6\u8fc7\u671f\u5bfc\u81f4\u7b26\u53f7\u53d8\u5316\u800c\u65e0\u6cd5\u521d\u59cb\u5316\u53d8\u91cf\u65f6\uff0c\u7cfb\u7edf\u8981\u80fd\u591f\u8bc6\u522b\u548c\u820d\u5f03\u8fd9\u6837\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u4fdd\u8bc1\u7cfb\u7edf\u7684\u7a33\u5b9a\u6027\u3002\u7a33\u5b9a\u6027\u7684\u5f88\u5927\u6765\u6e90\u662f\u6570\u636e\u7c7b\u578b\u95ee\u9898\u4ee5\u53ca\u6570\u636e\u6307\u9488\u7684\u6570\u636e\u5408\u6cd5\u6027\u95ee\u9898\uff0cRealityIS\u4fdd\u8bc1\u6240\u6709\u7684\u6570\u636e\u90fd\u662f\u503c\u7c7b\u578b\uff0c\u5e76\u4e14\u80fd\u591f\u68c0\u67e5\u7b26\u53f7\u8868\u7684\u5339\u914d\u5ea6\u4ece\u800c\u675c\u7edd\u7c7b\u578b\u7684\u95ee\u9898\uff0c\u56e0\u6b64\u907f\u514d\u4e86\u7834\u574f\u6027\u4ee3\u7801\u7684\u6267\u884c\u3002"),(0,n.kt)("h2",{id:"96-\u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"},"9.6 \u51fd\u6570\u5173\u7cfb\u7684\u6f5c\u529b"),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u5927\u591a\u662f\u54cd\u5e94\u5f0f\u3001\u5f02\u6b65\u7684\uff0c\u5b83\u4eec\u5355\u7eaf\u662f\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u6765\u89e3\u8026\u8fdb\u7a0b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6d88\u606f\u53ef\u80fd\u5bf9\u5e94\u7740\u591a\u4e2a\u54cd\u5e94\u8005\uff0c\u8fd9\u4e9b\u54cd\u5e94\u8005\u4e4b\u95f4\u672c\u8eab\u4e5f\u53ef\u80fd\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u8fd9\u4e9b\u590d\u6742\u7684\u5173\u7cfb\u4e0d\u592a\u5bb9\u6613\u68b3\u7406\u6e05\u695a\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u90fd\u9ed8\u8ba4\u4e0d\u5904\u7406\u8fd9\u79cd\u987a\u5e8f\uff0c\u5f00\u53d1\u8005\u9700\u8981\u81ea\u5df1\u5c0f\u5fc3\u5730\u5904\u7406\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u51fd\u6570\u672c\u8eab\u5c31\u662f\u5305\u542b\u65f6\u5e8f\u6027\u4fe1\u606f\u7684\uff0c\u4f8b\u5982\u4f60\u9700\u8981\u4f7f\u7528\u67d0\u4e2a\u53d8\u91cf\u7684\u503c\uff0c\u8fd9\u4e2a\u53d8\u91cf\u7684\u503c\u7684\u8d4b\u503c\u8bed\u53e5\u5fc5\u987b\u9650\u4e8e\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u65b9\u6cd5\u8c03\u7528\uff0c\u800c\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u5f88\u6709\u53ef\u80fd\u5c31\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5f97\u51fa\u4e4b\u524d\u7684\u51fd\u6570\u8c03\u7528\u987a\u5e8f\u5e94\u8be5\u5148\u4e8e\u540e\u9762\u7684\u51fd\u6570\u8c03\u7528\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u7406\u8bba\uff0c\u8fd9\u91cc\u6709\u4e2a\u5de8\u5927\u7684\u7f3a\u9677\uff0c\u51fd\u6570\u672c\u8eab\u662f\u4e00\u4e2a\u4e0e\u53d8\u91cf\u65e0\u5173\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u6211\u5728\u65b9\u6cd5A\u4e4b\u524d\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u7136\u540e\u518d\u5728\u65b9\u6cd5A\u4e4b\u540e\u4e5f\u8c03\u7528\u4e86\u65b9\u6cd5B\uff0c\u90a3\u4e48A\u548cB\u4e4b\u95f4\u7684\u987a\u5e8f\u5b9e\u9645\u4e0a\u662f\u65e0\u6cd5\u901a\u8fc7\u51fd\u6570\u672c\u8eab\u63a8\u5bfc\u800c\u51fa\u7684\u3002"),(0,n.kt)("p",null,"\u4f46\u662f\u5982\u679c\u6211\u4eec\u9996\u5148\u786e\u5b9a\u4e86\u53d8\u91cf\uff0c\u5e76\u4e14\u8fd9\u4e9b\u53d8\u91cf\u5728\u6574\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u540d\u5b57\u662f\u4e0d\u53d8\u7684\uff0c\u6240\u6709\u51fd\u6570\u8981\u4e48\u4ee5\u8fd9\u4e9b\u53d8\u91cf\u4f5c\u4e3a\u8f93\u5165\uff0c\u8981\u4e48\u4f5c\u4e3a\u8f93\u51fa\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u6709\u53ef\u80fd\u63a8\u5bfc\u51fa\u51fd\u6570\u4e4b\u95f4\u7684\u5173\u7cfb\u7684\u3002\u8fd9\u79cd\u5173\u7cfb\u662f\u57fa\u4e8e\u53d8\u91cf\u7684\uff0c\u800c\u4e0d\u662f\u51fd\u6570\u7684\uff0c\u51fd\u6570\u786e\u5b9a\u76f8\u5173\u6027\uff0c\u4f46\u662f\u8ba1\u7b97\u7684\u662f\u9488\u5bf9\u4e00\u4e2a\u53d8\u91cf\uff0c\u5b83\u6240\u5173\u8054\u7684\u51fd\u6570\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u4f46\u901a\u5e38\u8fd9\u6837\u5c31\u8db3\u591f\u4e86\uff0c\u6bd5\u7adf\u6211\u4eec\u8981\u4fdd\u8bc1\u7684\u4e5f\u53ea\u662f\u53d8\u91cf\u7684\u5171\u4eab\u548c\u5e76\u53d1\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u8981\u4e25\u683c\u4fdd\u8bc1\u6240\u6709\u4ee3\u7801\uff08\u65b9\u6cd5\uff09\u7684\u6267\u884c\u987a\u5e8f\u3002"),(0,n.kt)("h3",{id:"961-\u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"},"9.6.1 \u8c01\u6765\u63a7\u5236\u51fd\u6570\u7684\u6267\u884c\u987a\u5e8f"),(0,n.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u7a0b\u5e8f\u4e2d\uff0c\u51fd\u6570\u6267\u884c\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u7531\u7a0b\u5e8f\u5458\u5f00\u53d1\u7684\u65f6\u5019\u901a\u8fc7\u903b\u8f91\u6765\u8bbe\u5b9a\u597d\u51fd\u6570\u8c03\u7528\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u65b9\u5f0f\u7531\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u987a\u5e8f\u9690\u85cf\u4e8e\u4ee3\u7801\u4e2d\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\u903b\u8f91"),(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e5f\u90fd\u662f\u5c40\u90e8\u4e8e\u51fd\u6570\u800c\u8bbe\u5b9a\u7684\uff0c\u7f3a\u4e4f\u5168\u5c40\u63a7\u5236\uff0c\u6570\u636e\u7ba1\u7406\u4e5f\u9690\u85cf\u4e8e\u5c40\u90e8\uff0c\u4e0d\u5229\u4e8e\u5168\u5c40\u7ef4\u62a4")),(0,n.kt)("p",null,"\u4e0a\u8ff0\u7684\u95ee\u9898\u4e5f\u5c31\u5bfc\u81f4\u5f00\u53d1\u8005\u5fc5\u987b\u8981\u53bb\u4e86\u89e3\u7f16\u7a0b\u7684\u77e5\u8bc6\uff0c\u7ba1\u7406\u6781\u5ea6\u590d\u6742\uff0c\u4e14\u4e0d\u5229\u4e8e\u6269\u5c55\u548c\u7ef4\u62a4\u3002"),(0,n.kt)("p",null,"\u8ba1\u7b97\u56fe\uff0c\u5c06\u6570\u636e\u548c\u51fd\u6570\u5206\u79bb\uff0c\u63a8\u5bfc\u51fa\u660e\u786e\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u8fd9\u4e2a\u987a\u5e8f\u4fdd\u5b58\u5728\u4e00\u79cd\u56fe\u6570\u636e\u7ed3\u6784\uff0c\u8fd0\u884c\u65f6\u6839\u636e\u8fd9\u4e2a\u56fe\u7684\u7ed3\u6784\u6765\u63a7\u5236\u8ba1\u7b97\u3002\u8fd9\u5e26\u6765\u4e24\u4e2a\u7f3a\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u56fe\u901a\u5e38\u8868\u73b0\u4e3a\u6811\u5f62\u7ed3\u6784\uff0c\u5bf9\u5176\u8282\u70b9\u7684\u8c03\u7528\u8868\u73b0\u4e3a\u5927\u91cf\u7684\u6811\u7684\u67e5\u8be2\u64cd\u4f5c\uff0c\u5c24\u5176\u5b9e\u9645\u60c5\u51b5\u662f\u51fd\u6570\u6570\u91cf\u975e\u5e38\u591a\uff0c\u8fd9\u79cd\u8fd0\u884c\u65f6\u7684\u67e5\u8be2\u6210\u672c\u4f1a\u975e\u5e38\u9ad8\u3002"),(0,n.kt)("li",{parentName:"ul"},"\u56fe\u662f\u4e00\u79cd\u987a\u5e8f\u7ed3\u6784\uff0c\u4e0d\u5229\u4e8e\u8868\u8fbe\u8868\u8fbe\u5e76\u884c\u6027\uff0c\u4f8b\u5982\u5982\u679c\u72ec\u7acb\u7684\u5b50\u56fe\u4e4b\u95f4\u91c7\u7528\u4e86\u76f8\u540c\u7684\u7ec4\u4ef6\uff0c\u7406\u8bba\u4e0a\u5b83\u4eec\u53ef\u4ee5\u5e76\u884c\u6267\u884c\uff0c\u4f46\u662f\u5355\u7eaf\u7684\u56fe\u662f\u65e0\u6cd5\u8868\u8fbe\u8fd9\u79cd\u4fe1\u606f\u7684\uff0c\u6240\u4ee5\u5b83\u65e0\u6cd5\u5728\u8282\u70b9\u7ea7\u522b\u5b9e\u73b0SIMD\u5e76\u884c\u8ba1\u7b97\u3002")),(0,n.kt)("p",null,"\u4e0e\u4e4b\u76f8\u5e94\u7684\u662f\uff0cRealityIS\u57fa\u4e8e\u51fd\u6570\u4e4b\u95f4\u7684\u8f93\u5165\u8f93\u51fa\u5173\u7cfb\u6784\u5efa\u7c7b\u4f3c\u7684\u8ba1\u7b97\u56fe\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u8ba1\u7b97\u56fe\u6765\u786e\u5b9a\u51fd\u6570\u7684\u8ba1\u7b97\u987a\u5e8f\uff0c\u4f46\u4e0e\u8ba1\u7b97\u56fe\u4e0d\u540c\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u76f4\u63a5\u4fdd\u5b58\u8ba1\u7b97\u56fe\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5c06\u8fd9\u4e9b\u987a\u5e8f\u5c55\u5e73\u4e3a\u4e00\u4e2a\u7ebf\u6027\u7684\u51fd\u6570\u6570\u7ec4\u7ed3\u6784\uff0c\u8fd9\u907f\u514d\u4e86\u8fd0\u884c\u65f6\u7684\u6811\u7ed3\u6784\u67e5\u8be2\u3002"),(0,n.kt)("p",null,"\u5c06\u56fe\u62c9\u5e73\u540c\u6837\u610f\u5473\u7740\u8ba1\u7b97\u56fe\u5fc5\u987b\u662f\u6709\u5411\u65e0\u73af\u56fe\uff0c\u56fe\u4e0d\u80fd\u662f\u8fde\u901a\u7684\uff0c\u90a3\u6837\u5c31\u65e0\u6cd5\u63a8\u5bfc\u4e00\u4e2a\u786e\u5b9a\u7684\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"\u540c\u65f6RealityIS\u5728\u5355\u7eaf\u8868\u793a\u6267\u884c\u987a\u5e8f\u7684\u56fe\u7ed3\u6784\u4fe1\u606f\u4e4b\u5916\uff0c\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u4fe1\u606f\uff1a"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\u7ec4\u4ef6ID")),(0,n.kt)("p",null,"\u4f20\u7edf\u7684\u8ba1\u7b97\u56fe\u53ea\u8003\u8651\u7ec4\u4ef6\u7c7b\u578b\uff0c\u5e76\u4e14\u8fd9\u79cd\u7c7b\u578b\u4fe1\u606f\u4e3b\u8981\u662f\u7528\u6765\u5e2e\u52a9\u5b9e\u73b0Fusion\u4e4b\u7c7b\u7684\u4f18\u5316\u64cd\u4f5c\uff0c\u800c\u4e0d\u662f\u7528\u6765\u8f85\u52a9\u8282\u70b9\u4e4b\u95f4\u7684\u8ba1\u7b97\u987a\u5e8f\u3002"),(0,n.kt)("p",null,"RealityIS\u4f1a\u8003\u8651\u7ec4\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6216\u8005ID\uff0c\u5e76\u8d4b\u4e88\u8fd9\u4e2aID\u4e00\u4e2a\u610f\u4e49\uff1a",(0,n.kt)("strong",{parentName:"p"},"\u5373\u6240\u6709\u5305\u542b\u76f8\u540cID\u7684\u5bf9\u8c61\uff0c\u5b83\u4eec\u5904\u7406\u8be5\u7ec4\u4ef6\u7684\u903b\u8f91\u987a\u5e8f\u662f\u4e00\u6837\u7684"),"\u3002\u6240\u4ee5\u5f00\u53d1\u8005\u5728\u8bbe\u8ba1\u4e00\u4e2a\u7ec4\u4ef6\u65f6\uff0c\u9664\u4e86\u51fd\u6570\u4ee3\u7801\u672c\u8eab\uff0c\u5b83\u8fd8\u6709\u4e00\u5b9a\u7684\u903b\u8f91\u610f\u4e49\uff0c\u8fd9\u4e2a\u662f\u6709\u9053\u7406\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u4e2d\u6211\u4eec\u603b\u662f\u5bf9\u4e00\u4e9b\u6267\u884c\u6b65\u9aa4\u5305\u542b\u4e00\u4e9b\u903b\u8f91\u610f\u4e49\uff0c\u4ed6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u901a\u5e38\u6709\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u79cd\u903b\u8f91\u987a\u5e8f\u6070\u6070\u662f\u4eba\u7c7b\u7528\u6237\u7ba1\u7406\u903b\u8f91\u7684\u6838\u5fc3\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b83\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7ec6\u8282\u3002RealityIS\u901a\u8fc7\u8fd9\u79cd\u673a\u5236\u7ed9\u7528\u6237\u63d0\u4f9b\u4e00\u79cd\u7ba1\u7406\u903b\u8f91\u7684\u65b9\u6cd5\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u6837\u7684\u903b\u8f91\u4f7f\u5f97\u53ef\u4ee5\u4f7f\u7528\u8bed\u4e49\u6765\u8868\u8ff0\u4e00\u4e2a\u7ec4\u4ef6\u3002"),(0,n.kt)("p",null," \u57fa\u4e8e\u8fd9\u7684\u673a\u5236\u548c\u601d\u60f3\uff0cRealityIS\u7684\u51fd\u6570\u6267\u884c\u987a\u5e8f\u6709\u4e00\u4e0b\u7279\u70b9\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6240\u6709\u51fd\u6570\u7684\u987a\u5e8f\u88ab\u9884\u8ba1\u7b97\u6216\u8005\u5b9e\u65f6\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u7ebf\u6027\u6570\u7ec4\uff0c\u8fd9\u6837\u8fd0\u884c\u65f6\u53ea\u9700\u8981\u904d\u5386\u6570\u7ec4\u5373\u53ef\uff0c\u6ca1\u6709\u590d\u6742\u7684\u6570\u636e\u7ed3\u6784\u67e5\u8be2"),(0,n.kt)("li",{parentName:"ul"},"\u51fd\u6570\u9664\u4e86\u4ee3\u7801\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u903b\u8f91\u610f\u4e49"),(0,n.kt)("li",{parentName:"ul"},"\u903b\u8f91\u610f\u4e49\u4f7f\u5f97\u591a\u4e2a\u5bf9\u8c61\u4e4b\u95f4\u53ef\u4ee5\u5e76\u884c\u8ba1\u7b97")),(0,n.kt)("h2",{id:"97-\u8d4b\u503c\u6539\u53d8\u4e16\u754c"},"9.7 \u8d4b\u503c\u6539\u53d8\u4e16\u754c"),(0,n.kt)("h2",{id:"98-\u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"},"9.8 \u53d8\u91cf\u5b9a\u4e49\u5f00\u653e\u7684\u4e16\u754c"),(0,n.kt)("p",null,"\u6700\u7b80\u5355\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u662f\u4f20\u9012\u6d88\u606f\uff0c\u901a\u5e38\u662f\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4f7f\u5f97\u6bcf\u6b21\u51fd\u6570\u8c03\u7528\u90fd\u9700\u8981\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u7f16\u7801\u548c\u89e3\u7801\u3002"),(0,n.kt)("p",null,"Erlang\u4f7f\u7528\u7684\u4fe1\u606f\u901a\u4fe1\uff0c\u4f20\u8f93\u7684\u662f\u539f\u751f\u7684Erlang\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u88ab\u5c01\u88c5\u6210\u95ed\u5305\u7684\u5f62\u5f0f\uff0c\u6574\u4e2a\u4e0a\u4e0b\u6587\u90fd\u88ab\u4fdd\u5b58\u5728\u4e00\u4e2a\u5185\u5b58\u4e2d\uff0c\u5176\u4e2d\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u53ca\u5176\u5404\u81ea\u5bf9\u8c61\u7684\u4f5c\u7528\u57df\u4fe1\u606f\u7b49\u3002\u8fd9\u6837\u7684\u673a\u5236\u907f\u514d\u4e86\u7f16\u89e3\u7801\uff0c\u4f46\u662f\u4e3a\u4e86\u907f\u514d\u5e76\u53d1\u9700\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\uff0c\u6574\u4e2a\u6570\u636e\u57fa\u672c\u4e0a\u662f\u53ef\u8bfb\u7684\u3002\u540c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u4fdd\u5b58\u4e86\u7c7b\u578b\u53ca\u51fd\u6570\u5b9a\u4e49\u4fe1\u606f\u7b49\uff0c\u6240\u4ee5\u8c03\u7528\u8005\u4e0e\u88ab\u8c03\u7528\u8005\u4ecd\u7136\u8fd8\u662f\u9700\u8981\u88ab\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002\u56e0\u6b64\u7f3a\u4e4f\u53ef\u4ea4\u4e92\u80fd\u529b\u3002"),(0,n.kt)("p",null,"RealityIS\u901a\u8fc7\u5171\u4eab\u7b26\u53f7\u8868\uff0c\u4f7f\u5f97\u53ef\u4ee5\u4ece\u516c\u5171\u7684\u5730\u65b9\u83b7\u5f97\u7c7b\u578b\u4fe1\u606f\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u653e\u5728\u4e00\u8d77\u7f16\u8bd1\u3002"),(0,n.kt)("p",null,"\u540c\u65f6\u901a\u8fc7\u8d4b\u503c\u89e3\u8026\u7684\u673a\u5236\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u5206\u5f00\uff0c\u56e0\u6b64\u5929\u751f\u53bb\u6389\u4e86\u5171\u4eab\u5185\u5b58\u7684\u8bfb\u53d6\uff08\u901a\u5e38\u662f\u7531\u4e8e\u65e0\u5e8f\u5bfc\u81f4\u7684\uff09\uff0c\u56e0\u6b64\u5b83\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u6570\u636e\u5bf9\u8c61\uff0c\u800c\u4e0d\u9700\u8981\u6267\u884c\u590d\u5236\u64cd\u4f5c\u3002\u6574\u4e2a\u7a0b\u5e8f\u51e0\u4e4e\u8ddf\u975e\u5e76\u53d1\u7684\u7a0b\u5e8f\u6267\u884c\u903b\u8f91\u4e00\u81f4\u3002"),(0,n.kt)("h2",{id:"99-\u9762\u5411\u6570\u636e\u7f16\u7a0b"},"9.9 \u9762\u5411\u6570\u636e\u7f16\u7a0b"),(0,n.kt)("p",null,"\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u5f97\u51fa\u597d\u7684\u7f16\u7a0b\u6a21\u578b\u7684\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u6570\u636e\u9700\u8981\u4e0e\u529f\u80fd\u76f8\u5173\u8054"),(0,n.kt)("li",{parentName:"ul"},"\u4f46\u529f\u80fd\u4e0d\u80fd\u4e0e\u7ed3\u6784\u76f8\u8026\u5408"),(0,n.kt)("li",{parentName:"ul"},"\u6a21\u5f0f\u5339\u914d\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898")),(0,n.kt)("p",null,"\u6211\u4eec\u518d\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u4e00\u4e0b\u51fd\u6570\u548c\u6570\u636e\u5728\u7a0b\u5e8f\u4e2d\u7684\u4f5c\u7528\uff0c\u7279\u522b\u5730\uff0c\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\u3002"),(0,n.kt)("p",null,"\u4ece\u53ef\u590d\u7528\u7684\u89d2\u5ea6\uff0c\u5b9e\u9645\u4e0a\u4e00\u4e2a\u51fd\u6570\u4ec5\u5173\u5fc3\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\uff0c\u4e0d\u5173\u5fc3\u4efb\u4f55\u5bf9\u4e8e\u8c03\u7528\u8005\u8fd9\u4e9b\u6570\u636e\u5230\u5e95\u4ece\u54ea\u91cc\u6765\u3002\u4f8b\u5982\u5bf9\u4e8e\u5177\u6709\u4e24\u4e2a\u8f93\u5165\u53c2\u6570a\u548cb\u7684\u51fd\u6570fun()\uff0c\u5176\u8f93\u51fa\u53c2\u6570c\uff0c\u5b83\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u8fd9\u4e9b\u53d8\u91cf\u7684\u6765\u6e90\u53ef\u80fd\u6709\u4e09\u79cd\u60c5\u51b5\u3002"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cc\u6765\u81ea\u540c\u4e00\u5bf9\u8c61\uff0cb\u6765\u81ea\u53e6\u4e00\u5bf9\u8c61"),(0,n.kt)("li",{parentName:"ul"},"a\uff0cb\u548cc\u5206\u522b\u6765\u81ea\u4e0d\u540c\u7684\u5bf9\u8c61")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"fun",src:l(9379).Z,width:"2076",height:"474"})),(0,n.kt)("p",null,"\u5bf9\u4e8e\u4e0a\u8ff0\u7684\u4e0d\u540c\u7684\u6570\u636e\u6765\u6e90\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u8c03\u7528\u8005\u7684\u4e0d\u540c\u6570\u636e\u7ed3\u6784\uff0c\u597d\u7684\u8bbe\u8ba1\u662f\uff1a\u6211\u4e0d\u7ba1\u4f60\u4eec\u4ece\u54ea\u91cc\u5f04\u6765\u8fd9\u4e9b\u6570\u636e\uff0c\u53ea\u8981\u4f60\u628aa\uff0cb\u548cc\u4e09\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u7ed9\u6211\u5c31\u884c\u3002"),(0,n.kt)("p",null,"\u5f53\u7136\u4e0a\u8ff0\u7684\u8981\u6c42\u901a\u8fc7\u6a21\u5f0f\u5339\u914d\u662f\u53ef\u4ee5\u5b9e\u73b0\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6ee1\u8db3\u6570\u636e\u4e0e\u529f\u80fd\u76f8\u5173\u8054\u7684\u8981\u6c42\uff0cRealityIS\u4f7f\u7528\u4e86\u4e00\u79cd\u975e\u5e38\u4e0d\u540c\u7684\u601d\u8def\u3002"),(0,n.kt)("p",null,"\u60f3\u4e00\u60f3\uff1a\u6211\u4eec\u6240\u7406\u89e3\u7684\u4e00\u4e2a\u5bf9\u8c61\u901a\u5e38\u7531\u529f\u80fd\u5b9a\u4e49\u7684\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u6570\u636e\uff0c\u6ca1\u6709\u529f\u80fd\u5c31\u6ca1\u6709\u5bf9\u8c61\u3002\u5f53\u6211\u4eec\u5728\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u8c61\u65f6\uff0c\u5bf9\u8c61\u4e2d\u6570\u636e\u548c\u529f\u80fd\u7684\u5173\u7cfb\u901a\u5e38\u662f\u5f88\u6df7\u4e71\u7684\uff1a\u6709\u7684\u6570\u636e\u53ef\u80fd\u538b\u6839\u6ca1\u88ab\u4efb\u4f55\u65b9\u6cd5\u7528\u5230\uff0c\u6709\u4e9b\u65b9\u6cd5\u53ef\u80fd\u6839\u672c\u5c31\u4e0d\u9700\u8981\u67d0\u4e9b\u53c2\u6570\uff0c\u8fd9\u5c31\u51fa\u73b0\u5197\u4f59\uff0c\u4e0d\u5229\u4e8e\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u5982\u679c\u8981\u8fdb\u884c\u7ba1\u7406\uff0c\u662f\u5e94\u8be5\u6839\u636e\u6570\u636e\u6765\u7ba1\u7406\u529f\u80fd\u5462\uff0c\u8fd8\u662f\u5e94\u8be5\u7531\u529f\u80fd\u6765\u7ba1\u7406\u6570\u636e\uff0c\u8fd9\u4e24\u79cd\u770b\u8d77\u6765\u7ba1\u7406\u8d77\u6765\u90fd\u5f88\u590d\u6742\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u5bf9\u4e8e\u7528\u6237\uff0c\u529f\u80fd\u5c5e\u6027\u5e94\u8be5\u662f\u4e3b\u8981\uff0c\u800c\u5bf9\u4e8e\u7a0b\u5e8f\uff0c\u6570\u636e\u5c5e\u6027\u66f4\u91cd\u8981\u3002"),(0,n.kt)("p",null,"RealityIS\u9009\u62e9\u7684\u65b9\u5f0f\u662f\uff0c\u8ba9\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5b8c\u5168\u76f8\u5173\u8054\uff0c\u7ec4\u4ef6\u4e0d\u9700\u8981\u7684\u6570\u636e\u5c31\u4e0d\u9700\u8981\u5b9a\u4e49\uff0c\u7ec4\u4ef6\u5b9a\u4e49\u7684\u6570\u636e\u5fc5\u987b\u5728\u51fd\u6570\u4e2d\u88ab\u4f7f\u7528\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86\u5197\u4f59\uff0c\u5e76\u4e14\u8ba9\u6570\u636e\u8ddf\u529f\u80fd\u662f\u5b8c\u5168\u5bf9\u5e94\u7684\u3002"),(0,n.kt)("p",null,"\u90a3\u600e\u6837\u5b9a\u4e49\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u5462\uff0c\u5c31\u662f\u6839\u636e\u7ec4\u4ef6\u529f\u80fd\u8fdb\u884c\u7ec4\u5408\uff0c\u9009\u62e9\u4e86\u54ea\u4e9b\u7ec4\u4ef6\uff0c\u5b9e\u4f53\u5bf9\u8c61\u5c31\u662f\u76f8\u5e94\u7ec4\u4ef6\u5bf9\u5e94\u5c5e\u6027\u7684\u96c6\u5408\u3002\u8fd9\u6837\u5728\u5b9a\u4e49\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6211\u5176\u5b9e\u662f\u6839\u636e\u529f\u80fd\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\uff0c\u6211\u4eec\u6839\u672c\u6ca1\u6709\u5173\u5fc3\u5176\u4e2d\u7684\u6570\u636e\uff0c\u800cRealityIS\u7684\u673a\u5236\u4fdd\u8bc1\u529f\u80fd\u548c\u6570\u636e\u7684\u5b8c\u5168\u5bf9\u5e94\u800c\u6ca1\u6709\u5197\u4f59\u7684\u3002\u8fd9\u907f\u514d\u4e86ECS\u7684\u95ee\u9898\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53ea\u9700\u8981\u7ef4\u62a4\u529f\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u540c\u65f6\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e"),(0,n.kt)("li",{parentName:"ul"},"\u4e0d\u9700\u8981\u7ef4\u62a4\u548c\u7ba1\u7406\u529f\u80fd\u548c\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb")),(0,n.kt)("p",null,"\u4f46\u9664\u4e86\u4e0a\u9762\u7684\u597d\u5904\uff0cRealityIS\u4e5f\u4e0e\u4e4b\u5e26\u6765\u4e86\u53e6\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff1a\u591a\u4e2a\u7ec4\u4ef6\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u5bfc\u81f4\u4e86\u4e00\u4e2a\u5b9e\u4f53\u5bf9\u8c61\u540c\u4e00\u4e2a\u53c2\u6570\u7684\u591a\u91cd\u5b9a\u4e49\u3002\u4f8b\u5982\u5bf9\u4e8eGlobal.Position\u5c5e\u6027\uff0c\u7ec4\u4ef6A\u548cB\u90fd\u540c\u65f6\u611f\u5174\u8da3\uff0c\u5982\u679c\u5c06A\u548cB\u7ec4\u5408\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff0c\u5c31\u4f1a\u51fa\u73b02\u6b21Position\u7684\u5b9a\u4e49\u3002"),(0,n.kt)("p",null,"\u8fd9\u90e8\u5206\u5c31\u662fCreationScript\u72ec\u7279\u7684\u5730\u65b9\uff0c\u7406\u89e3\u5b83\u7684\u6838\u5fc3\u5728\u4e8e\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u53d8\u91cf\u662f\u6709\u7b26\u53f7\u8868\u5b9a\u4e49\u7684"),(0,n.kt)("li",{parentName:"ul"},"\u800c\u7ec4\u4ef6\u53ea\u662f\u5728\u5f15\u7528\u53d8\u91cf")),(0,n.kt)("p",null,"\u8fd9\u5c31\u662f\u8bf4\uff0c\u8ddf\u4f20\u7edf\u7684\u7f16\u7a0b\u4e0d\u4e00\u6837\uff0cRealityIS\u4e2d\u4e00\u4e2a\u7ec4\u4ef6\u5e76\u4e0d\u4f1a\u5b9a\u4e49\u4efb\u4f55\u53d8\u91cf\uff0c\u6240\u6709\u53d8\u91cf\u90fd\u5fc5\u987b\u5728\u7b26\u53f7\u8868\u4e2d\u5b9a\u4e49\u3002\u5f53\u4e00\u4e2a\u7ec4\u4ef6\u201c\u5b9a\u4e49\u201d\u4e00\u4e2a\u53d8\u91cf\u662f\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f\u5f15\u7528\u4e86\u7b26\u53f7\u8868\u4e2d\u7684\u67d0\u4e2a\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e0d\u662f\u4e2a\u666e\u901a\u7684\u76f4\u63a5\u5f15\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u5e76\u6ca1\u6709\u4e8b\u5148\u5728\u5176\u4ed6\u5730\u65b9\u521d\u59cb\u5316\u3002"),(0,n.kt)("p",null,"\u6240\u4ee5\uff0cCreationScript\u7ec4\u4ef6\u4e2d\u7684\u5c5e\u6027\u58f0\u660e\u8fd8\u9690\u542b\u7740\u4e00\u4e2a\u91cd\u5927\u7684\u610f\u4e49\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u8fd8\u6ca1\u6709\u5b9a\u4e49\u8fc7\u8be5\u53d8\u91cf\uff0c\u90a3\u4e48\u5c31\u6309\u7167\u7b26\u53f7\u8868\u7684\u5b9a\u4e49\u4e3a\u8be5\u5bf9\u8c61\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf"),(0,n.kt)("li",{parentName:"ul"},"\u5982\u679c\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u8fd9\u4e2a\u7b26\u53f7\uff0c\u5219\u5c06\u53d8\u91cf\u6307\u5411\u8fd9\u4e2a\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740")),(0,n.kt)("p",null,"\u8fd9\u79cd\u72ec\u7279\u7684\u8bbe\u8ba1\uff0c\u5b8c\u7f8e\u5730\u6d88\u9664\u4e86\u7531\u7ec4\u4ef6\u7ec4\u5408\u5e26\u6765\u7684\u5197\u4f59\uff0c\u5e76\u4e14\u4fdd\u6301\u4e86\u6570\u636e\u8ddf\u529f\u80fd\u7684\u7d27\u5bc6\u8054\u7cfb\u3002"),(0,n.kt)("h2",{id:"910-\u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"},"9.10 \u9762\u5411\u673a\u5668\u7684\u8bed\u8a00\u673a\u5236"),(0,n.kt)("h3",{id:"9101-\u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"},"9.10.1 \u7a0b\u5e8f\u7684\u7ed3\u6784\u7531\u65e0\u5e8f\u53d8\u6210\u6709\u5e8f"),(0,n.kt)("p",null,"\u8fd9\u662f\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6700\u6838\u5fc3\u7684\u57fa\u7840\u548c\u7406\u5ff5\uff0c\u4e00\u76f4\u4ee5\u6765\uff0c\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\u7684\u7ed3\u6784\u90fd\u662f\u4ee5\u8ba9\u4eba\u4eec\u66f4\u5bb9\u6613\u7406\u89e3\u8f6f\u4ef6\u7684\u6784\u9020\u8fc7\u7a0b\u4e3a\u4e3b\uff0c\u5b83\u7684\u6838\u5fc3\u8fd8\u662f\u56f4\u7ed5\u5e95\u5c42\u7684\u786c\u4ef6\u5bf9\u673a\u5668\u4ee3\u7801\u7684\u6267\u884c\u673a\u5236\uff0c\u6216\u8005\u53ef\u4ee5\u7406\u89e3\u4e3a\u600e\u6837\u8ba9\u4eba\u66f4\u5bb9\u6613\u5730\u7406\u89e3\u673a\u5668\u7684\u6267\u884c\u8fc7\u7a0b\u548c\u903b\u8f91\u3002\u5728\u8fd9\u6837\u7684\u601d\u8def\u80cc\u540e\uff0c\u8bed\u8a00\u5355\u7eaf\u53d8\u6210\u4e3a\u4e00\u4e2a\u673a\u5668\u8bed\u8a00\u7684\u9ad8\u7ea7\u62bd\u8c61\uff0c\u8fd9\u79cd\u62bd\u8c61\u4fdd\u7559\u4e86\u673a\u5668\u6267\u884c\u6307\u4ee4\u7684\u6d41\u7a0b\u548c\u903b\u8f91\uff0c\u800c\u5f00\u53d1\u8005\u8fd8\u9700\u8981\u6309\u7167\u673a\u5668\u7684\u8fd9\u79cd\u903b\u8f91\u53bb\u7f16\u5199\u548c\u7ef4\u62a4\u4ee3\u7801\u3002"),(0,n.kt)("p",null,"\u673a\u5668\u548c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\uff0c\u5bf9\u4e8e\u4e00\u4ef6\u4e8b\u60c5\uff0c\u4eba\u7684\u601d\u7ef4\u903b\u8f91\u4f1a\u628a\u5b83\u4eec\u62c6\u5206\u6210\u5f88\u591a\u6613\u4e8e\u7406\u89e3\u7684\u5b50\u6d41\u7a0b\uff0c\u4f1a\u8fdb\u884c\u4e00\u5b9a\u7684\u89c4\u5212\uff0c\u8bc6\u522b\u5176\u4e2d\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u91cd\u8981\u6027\u7a0b\u5ea6\u7b49\uff0c\u5e76\u53ef\u80fd\u4f1a\u5728\u5b9e\u65bd\u8fc7\u7a0b\u4e2d\u52a8\u6001\u8c03\u6574\uff0c\u6362\u53e5\u8bdd\u8bf4\u4eba\u5904\u7406\u4e8b\u60c5\u65f6\u65f6\u90fd\u8981\u5173\u6ce8\u5168\u5c40\u6027\uff0c\u800c\u964d\u4f4e\u5bf9\u5c40\u90e8\u7ec6\u8282\u7684\u6ce8\u610f\u529b\uff0c\u9664\u975e\u4ed6\u5f00\u59cb\u4e13\u6ce8\u53bb\u5904\u7406\u8fd9\u4e00\u5757\u4e8b\u60c5\uff1b\u673a\u5668\u7684\u903b\u8f91\u5219\u805a\u7126\u4e8e\u4fdd\u8bc1\u628a\u4e8b\u60c5\u505a\u6b63\u786e\uff0c\u5b83\u5fc5\u987b\u8981\u5448\u73b0\u5f88\u6e05\u6670\u7684\u6267\u884c\u6d41\u7a0b\uff0c\u4e3a\u4e86\u66f4\u7cbe\u786e\u5730\u63cf\u8ff0\u6d41\u7a0b\uff0c\u5b83\u4e00\u822c\u4e00\u4ef6\u4e8b\u60c5\u505a\u5b8c\u5c31\u7d27\u63a5\u7740\u5b8c\u6210\u53e6\u4e00\u4ef6\u4e8b\u60c5\uff0c\u539f\u6750\u6599\u4e00\u65e6\u6536\u5230\u5c31\u8981\u7acb\u5373\u8fdb\u884c\u52a0\u5de5\u5904\u7406\uff0c\u5904\u7406\u5b8c\u5c31\u8981\u5f00\u59cb\u8fd0\u8f93\u5165\u5e93\u7b49\u5f85\u3002\u8fd9\u91cc\u9762\u5c31\u4e0d\u7ed9\u7a0b\u5e8f\u5458\u89c4\u5212\u7684\u7a7a\u95f4\uff0c\u5f53\u7136\u7a0b\u5e8f\u5458\u53ef\u4ee5\u53bb\u6784\u5efa\u4e00\u4e9b\u66f4\u6613\u4e8e\u5168\u5c40\u7edf\u7b79\u7ba1\u7406\u3001\u89c4\u5212\u548c\u7406\u89e3\u7684\u67b6\u6784\uff0c\u4f46\u662f\u8fd9\u5f80\u5f80\u9700\u8981\u4ed8\u51fa\u5f88\u5927\u7684\u4ee3\u4ef7\u3002"),(0,n.kt)("p",null,"\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u7684\u601d\u60f3\uff0c\u5c31\u662f\u8981\u5728\u4fdd\u8bc1\u4e0e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u6267\u884c\u673a\u5236\u7b49\u4ef7\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u5c31\u662f\u8981\u4fdd\u8bc1\u56fe\u7075\u5b8c\u5907\u6027\uff0c\u8ba9\u7a0b\u5e8f\u7684\u6267\u884c\u6d41\u7a0b\u53ef\u4ee5\u88ab\u66f4\u597d\u5730\u89c4\u5212\u548c\u63a7\u5236\uff0c\u4f7f\u5f97\u4eba\u4eec\u53ef\u4ee5\u4f7f\u7528\u5927\u8111\u7684\u673a\u5236\u6765\u5bf9\u7a0b\u5e8f\u7684\u903b\u8f91\u8fdb\u884c\u7ba1\u7406\u3002\u53ef\u4ee5\u8ba4\u4e3a\u8fd9\u662f\u4e00\u5957\u6784\u5efa\u4e8e\u73b0\u6709\u7f16\u7a0b\u8bed\u8a00\u4e0a\u7684\u8f6f\u4ef6\u67b6\u6784\uff0c\u4f46\u662f\u90a3\u6837\u7684\u5b9e\u73b0\u7ed3\u679c\u53ef\u80fd\u5c06\u4f1a\u975e\u5e38\u590d\u6742\uff0c\u76f8\u53cd\uff0c\u6211\u4eec\u901a\u8fc7\u6df1\u5165\u5206\u6790\u5e95\u5c42\u51fd\u6570\u6267\u884c\u7684\u673a\u5236\uff0c\u4ece\u8f6f\u4ef6\u6784\u9020\u7684\u8fc7\u7a0b\u4e2d\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\uff0c\u4ece\u800c\u66f4\u7b80\u5355\u5730\u5b9e\u73b0\u8f6f\u4ef6\u6784\u9020\u7684\u53ef\u63a7\u5236\u6027\uff0c\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u539f\u751f\u5c31\u662f\u53ef\u63a7\u7684\u3002"),(0,n.kt)("p",null,"\u8fd9\u6837\u7684\u8f6f\u4ef6\u6784\u9020\u601d\u7ef4\u5728\u8fc7\u53bb\u662f\u4ece\u6765\u6ca1\u6709\u7684\uff0c\u4e5f\u662f\u8ddf\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6709\u7740\u672c\u8d28\u533a\u522b\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u8ba4\u4e3a\u5b83\u662f\u7ee7\u51fd\u6570\u5f0f\u7f16\u7a0b\u548c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u4e4b\u540e\u7684\u7b2c\u4e09\u79cd\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u3002\u8fd9\u6837\u7684\u601d\u7ef4\u8f6c\u53d8\u662f\u975e\u5e38\u57fa\u7840\u3001\u91cd\u8981\u548c\u672c\u8d28\u7684\uff0c\u53ef\u63a7\u6027\u5c06\u7ed9\u8f6f\u4ef6\u5de5\u4e1a\u5e26\u6765\u5de8\u5927\u7684\u5f71\u54cd\u548c\u5168\u65b0\u7684\u672a\u6765\uff0c\u5c24\u5176\u662f\u4ee5\u4e0b\u4e09\u4e2a\u5c42\u9762\uff0c\u8fd9\u4e9b\u5f71\u54cd\u4e5f\u53cd\u5e94\u5728\u540e\u7eed\u7684\u53d8\u9769\u56e0\u7d20\u4e4b\u4e2d\uff1a"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u6709\u5e8f\u548c\u53ef\u63a7\u6027\u4f7f\u5f97\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u903b\u8f91\u7ec4\u7ec7\u548c\u7ba1\u7406\u53d8\u5f97\u66f4\u7b80\u5355\uff0c\u53ef\u4ee5\u9884\u671f\u4f1a\u6709\u76f8\u8f83\u4e8e\u73b0\u5728\u6307\u6570\u7ea7\u589e\u957f\u7684\u5f00\u53d1\u8005\u4f1a\u53c2\u4e0e\u5230\u8f6f\u4ef6\u5de5\u4e1a\u7684\u751f\u4ea7\u4e2d\uff0c\u751f\u4ea7\u529b\u548c\u521b\u65b0\u90fd\u4f1a\u6709\u5927\u5e45\u63d0\u5347\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u65b0\u7684\u7ec4\u7ec7\u548c\u6267\u884c\u6d41\u7a0b\uff0c\u5c06\u4f1a\u5bf9\u5e95\u5c42\u82af\u7247\u8bbe\u8ba1\u5e26\u6765\u542f\u53d1\uff0c\u8fd9\u53ef\u4ee5\u4fc3\u8fdb\u786c\u4ef6\u7684\u5de8\u5927\u521b\u65b0\u3002"),(0,n.kt)("li",{parentName:"ol"},"\u7a0b\u5e8f\u7684\u53ef\u63a7\u6027\u4f7f\u5f97\u7a0b\u5e8f\u7ed3\u6784\u4e0d\u5149\u662f\u6613\u4e8e\u4eba\u7406\u89e3\u7684\uff0c\u4e5f\u662f\u6613\u4e8e\u673a\u5668\u7406\u89e3\u7684\uff0c\u8fd9\u5c06\u5e26\u6765\u4e24\u4e2a\u65b9\u9762\u7684\u7a81\u7834\uff1a\u4e00\u662f\u7f16\u8bd1\u5668\u672c\u8eab\u80fd\u591f\u66f4\u597d\u5730\u8bc6\u522b\u548c\u7ec4\u7ec7\u7a0b\u5e8f\u7684\u903b\u8f91\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7ba1\u7406\u66f4\u591a\u4e0e\u7a0b\u5e8f\u7ed3\u6784\u76f8\u5173\u7684\u7e41\u7410\u903b\u8f91\uff0c\u4f7f\u7a0b\u5e8f\u5458\u805a\u7126\u4e8e\u4e1a\u52a1\u90e8\u5206\uff1b\u4e8c\u662f\u7ed3\u5408\u6df1\u5ea6\u5b66\u4e60\uff0c\u6211\u4eec\u6709\u673a\u4f1a\u8ba9AI\u751f\u6210\u4e00\u5b9a\u903b\u8f91\u7684\u7a0b\u5e8f\u3002")),(0,n.kt)("h3",{id:"9102-\u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"},"9.10.2 \u8ba9\u7cfb\u7edf\u7ba1\u7406\u7a0b\u5e8f\u7ed3\u6784\u548c\u6570\u636e"),(0,n.kt)("p",null,"\u524d\u9762\u7b2c2.1\u8282\u5df2\u7ecf\u8ba8\u8bba\u6700\u7b80\u5355\u7f16\u7a0b\u8bed\u8a00\u7684\u6982\u5ff5\u548c\u7279\u6027\uff0c\u8fd9\u91cc\u8bf4\u660e\u600e\u4e48\u901a\u8fc7\u53ef\u63a7\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u6765\u5b9e\u73b0\u6700\u7b80\u5355\u7684\u7f16\u7a0b\u8bed\u8a00\uff0cCreationScript\u3002\u5177\u4f53\u6765\u8bb2\uff0c\u8fd9\u662f\u901a\u8fc7\u4e24\u4e2a\u65b9\u9762\u6765\u5b9e\u73b0\u7684\uff1a"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u7a0b\u5e8f\u7ed3\u6784\u7684\u81ea\u52a8\u7ba1\u7406")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"\u6570\u636e\u8d44\u6e90\u7684\u81ea\u52a8\u7ba1\u7406"))),(0,n.kt)("p",null,"\u7531\u524d\u9762\u7684\u8ba8\u8bba\u53ef\u77e5\uff0c\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u6700\u590d\u6742\u7684\u90e8\u5206\u5728\u4e8e\u628a\u7a0b\u5e8f\u7ed3\u6784\u7684\u6784\u9020\u548c\u63a7\u5236\u5b8c\u5168\u4ea4\u7ed9\u5f00\u53d1\u4eba\u5458\u53bb\u5904\u7406\uff0c\u7f16\u7a0b\u8bed\u8a00\u4e2d\u66f4\u591a\u9700\u8981\u5173\u6ce8\u7684\u6982\u5ff5\u662f\u5173\u4e8e\u8f6f\u4ef6\u7ed3\u6784\u7684\u6784\u9020\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u903b\u8f91\u7b97\u6cd5\u600e\u4e48\u7f16\u5199\u7684\u95ee\u9898\u3002\u5728RealityIS\u4e2d\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u6765\u63a7\u5236\u7a0b\u5e8f\u7684\u7ed3\u6784\uff1a1\uff09\u6211\u4eec\u52a0\u5f3a\u4e86\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u7684\u6784\u5efa\uff0c\u5e76\u628a\u8fd9\u4e9b\u4fe1\u606f\u4fdd\u5b58\u8d77\u6765\uff0c\u8fd9\u6837\u5c31\u80fd\u591f\u6784\u9020\u51fa\u4efb\u4f55\u51fd\u6570\u7ec4\u5408\u7684\u6267\u884c\u987a\u5e8f\uff1b2\uff09\u5bf9\u4e8e\u5177\u4f53\u7684\u7a0b\u5e8f\u903b\u8f91\u7ec4\u5408\uff0c\u901a\u5b9e\u4f53\u5bf9\u8c61\u6765\u8bb0\u5f55\u7a0b\u5e8f\u7684\u529f\u80fd\u7ed3\u6784\u3002"),(0,n.kt)("p",null,"\u901a\u8fc7\u4e0a\u8ff0\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u548c\u5b9e\u4f53\u529f\u80fd\u7ed3\u6784\u7684\u4fe1\u606f\uff0c\u8fd0\u884c\u65f6\u5c31\u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u6784\u9020\u51fa\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u8fd9\u6837\u5c31\u4e0d\u9700\u8981\u5f00\u53d1\u8005\u53bb\u5173\u5fc3\u7a0b\u5e8f\u7ed3\u6784\u7684\u7ec4\u7ec7\uff0c\u4f8b\u5982\u7ee7\u627f\u5173\u7cfb\u3001\u91cd\u8f7d\u5b9e\u73b0\u3001\u591a\u6001\u51fd\u6570\u6d3e\u53d1\uff0c\u751a\u81f3\u624b\u52a8\u7684\u51fd\u6570\u8c03\u7528\u548c\u53c2\u6570\u4f20\u9012\u7b49\u7b49\u7a0b\u5e8f\u7ed3\u6784\u6784\u9020\u6240\u9700\u8981\u505a\u7684\u4e00\u4e9b\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5c06\u5168\u90e8\u7cbe\u529b\u96c6\u4e2d\u4e8e\u4e1a\u52a1\u903b\u8f91\u7684\u5f00\u53d1\u4e0e\u5b9e\u73b0\u3002"),(0,n.kt)("p",null,"\u53e6\u4e00\u4e2a\u9700\u8981\u7a0b\u5e8f\u5458\u8fdb\u884c\u7e41\u91cd\u7684\u5904\u7406\uff0c\u5e76\u4e14\u4e0e\u903b\u8f91\u6ca1\u6709\u592a\u5927\u5173\u7cfb\u7684\u662f\u6570\u636e\u7684\u7ba1\u7406\u3002\u4ece\u4e1a\u52a1\u903b\u8f91\u6765\u8bf4\uff0c\u5f00\u53d1\u8005\u672c\u6765\u53ea\u9700\u8981\u5173\u6ce8\u4e1a\u52a1\u6d89\u53ca\u54ea\u4e9b\u6570\u636e\uff0c\u4ee5\u53ca\u4e0d\u540c\u7684\u6570\u636e\u8ddf\u51fd\u6570\u4e4b\u95f4\u662f\u5982\u4f55\u4ea4\u4e92\uff0c\u4f46\u5b9e\u9645\u9664\u4e86\u4e0a\u8ff0\u4efb\u52a1\uff0c\u5f00\u53d1\u8005\u82b1\u8d39\u4e86\u66f4\u591a\u7684\u65f6\u95f4\u53bb\u7ba1\u7406\u6570\u636e\u7684\u521b\u5efa\u3001\u4fee\u6539\u3001\u6301\u4e45\u5316\u3001\u5220\u9664\u7b49\uff0c\u8fd9\u4e9b\u5360\u636e\u7684\u7cbe\u529b\u975e\u5e38\u591a\u3002RealityIS\u4f7f\u5f97\u5f00\u53d1\u8005\u4e0d\u9700\u8981\u5173\u6ce8\u6570\u636e\u7684\u7ba1\u7406\u3002"),(0,n.kt)("p",null,"\u8fd9\u79cd\u7279\u6027\u4e5f\u662f\u524d\u9762\u6211\u4eec\u8ba8\u8bba\u8fc7\u7684\uff0c\u901a\u8fc7\u5c06\u7a0b\u5e8f\u7ed3\u6784\u7531\u65e0\u5e8f\u8f6c\u5316\u4e3a\u6709\u5e8f\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u53ef\u4ee5\u88ab\u673a\u5668\u7406\u89e3\uff0c\u4ece\u800c\u53ef\u4ee5\u8ba9\u673a\u5668\u5e2e\u6211\u4eec\u5b8c\u6210\u4e00\u4e9b\u7a0b\u5e8f\u6784\u9020\u7684\u4e8b\u60c5\uff0c\u4f7f\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u9762\u5411\u5927\u8111\u7684\u7406\u89e3\uff0c\u800c\u6709\u66f4\u591a\u9762\u5411\u673a\u5668\u7684\u673a\u5236\uff0c\u5b9e\u73b0\u4eba\u548c\u673a\u5668\u7684\u5b8c\u7f8e\u914d\u5408\u548c\u4e92\u8865\u3002"))}k.isMDXComponent=!0},2979:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/20151227220024116-155826feba0f55da04e0ac574f2637b3.jpg"},7903:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/AST-5592d94cf30e7e24589439feeb587560.jpeg"},4679:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/BMH-Week-2-686bbb717fb4b7ddb419ec738f1ec0ba.jpeg"},8369:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Brain-to-Brain-Communication-a56f385e9f7ffc1c0db5114ebff6c151.jpeg"},9456:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-Creative-Mode-85c81437c59bc60970ef01c6bf6e5e01.png"},6:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Fortnite-bcfc68fd70be596493a83e07ac4978a2.jpeg"},595:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/IMG_2973-05d442834682b06c980380dbfeca49a2.jpg"},4917:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-1-269eb341c1aeb3d47e69340e9f16f58a.png"},8934:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/Interoperability-94b9d092532c47c07b29d9a0a994fc56.png"},5714:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/R-C-1cd6b321f2f0d10c22cb436c82cf89e3.jpeg"},2234:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/RealityIS.005-bbb01a096532b9d457a7cb4fbfb96a40.jpeg"},1377:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/add-c0fef0031b7f32b99f01a937935d1c93.png"},8619:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/blockchain-op-b4a2c1404f3dcf95af920c7cf5ec9147.png"},9300:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/call-stack-d16cc4e022ab0fc0ad74d1f0ecac35d2.jpeg"},3050:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/calling-sequence-6ab7a5989b5667984d84da76e4916b37.jpeg"},326:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/change-5dab6429c98c6c2455ff7bb1f6bc1c61.png"},9460:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/civilization-a7bc89ba9d4cc408d55ea36d809fb337.jpeg"},1077:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc-cannon-af670062d2ec24bad2fb8cd67593bc0c.jpeg"},5813:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/coc2-a0ba60559161227add4794ba0eddd786.jpeg"},9792:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/complex-system.024-9efc11c76285e095cdd0e1d248089c92.png"},4771:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/composition-e57808b6f16a8b1944f4afd1361a0a01.png"},9306:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/distributed-a89c2bd2fe6959eea73acdaf0dc22f30.png"},7635:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/dynamic-a8dcf87f6abb4a4f87fb2786d9f546c1.png"},6463:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/economics-50ff216d275f497eecf25fa18efefab8.jpeg"},7812:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/env-540070781a6ac0d4b6ca8117f89a14a8.png"},3631:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-a403e17499349f0fd4df5b59f437c43f.jpeg"},9379:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/fun-0e16ea82d71123103fa8a738ce65f4eb.png"},8732:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/is-de628dd839078555017aab17db81094d.png"},397:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-1-c9f4f83a6a4594ce09cdc10038fb2f06.png"},105:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/jittor-2-d9c73723eb85ed71a10fae5305f2d51f.png"},6186:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/kokid-fe324d84cfb72dd1040e31aa37ef8aa7.gif"},3405:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/mlp-e52dda254b062984effe40f08310427a.jpeg"},738:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/niantic-opens-lightship-augmented-reality-platform-to-all-developers-fe2e72432380174fb315c4b6f27ea147.webp"},3972:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/obj-com-7f45a33658652fde3b9d4f190300b311.png"},2694:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/pasted-image-21192f0a0fbfabcd68ed3e3b365611e6.jpg"},7216:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/piper-banner-00ac70143f99b2c54633f2a156c5785a.png"},8120:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/reality-7ff4e3bf0a679fda0e1ba07e6c368129.png"},6336:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/realworld-aefc3b13bc81e1f876f6d55fe7fb4087.png"},3896:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/roblox-8225bc76c0c3889f67d33ce4012c6db9.jpg"},7652:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/shortcuts-f64049b04e494cf9bb397dca9f9bee89.png"},4081:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/taichi-kernel-f40d892825bd3ddc34d0a54a5cebca82.png"},2150:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/version-tracking-b45605deef79713e1be373d29c45ad3a.png"},3482:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/virtual-and-reality-881079faa7745b48133693081d1614a6.png"},842:(e,t,l)=>{l.d(t,{Z:()=>a});const a=l.p+"assets/images/vm-il-cd2266988ce34973b9e27af79ae70a1c.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/386fda77.7c7456dc.js b/zh/assets/js/386fda77.7c7456dc.js deleted file mode 100644 index 3ce1f8e..0000000 --- a/zh/assets/js/386fda77.7c7456dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6821],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),s=u(r),d=o,m=s["".concat(l,".").concat(d)]||s[d]||f[d]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[s]="string"==typeof e?e:o,i[1]=c;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(7462),o=(r(7294),r(4137));const a={title:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"},i=void 0,c={unversionedId:"introduction/value",id:"introduction/value",title:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c",description:"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002",source:"@site/docs/introduction/value.md",sourceDirName:"introduction",slug:"/introduction/value",permalink:"/zh/docs/introduction/value",draft:!1,tags:[],version:"current",frontMatter:{title:"1.6 \u521b\u9020\u589e\u91cf\u4ef7\u503c"},sidebar:"docsSidebar",previous:{title:"1.5 \u7528\u6237",permalink:"/zh/docs/introduction/user"}},l={},u=[],p={toc:u},s="wrapper";function f(e){let{components:t,...a}=e;return(0,o.kt)(s,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\u5143\u5b87\u5b99\u4ee3\u8868\u7684\u4e0d\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u4f53\u9a8c\uff0c\u5b83\u5c06\u5bf9\u6574\u4e2a\u793e\u4f1a\u751a\u81f3\u6570\u5b57\u4fe1\u606f\u5316\u7684\u8fdb\u7a0b\u5e26\u6765\u5168\u65b9\u4f4d\u7684\u5f71\u54cd\uff0c\u8fd9\u79cd\u5f71\u54cd\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u65b0\u7684\u6280\u672f\u6216\u8005\u4e00\u79cd\u65b0\u7684\u529f\u80fd\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u5c06\u5305\u62ec\u5bf9\u8ba1\u7b97\u67b6\u6784\u4ee5\u53ca\u5168\u65b0\u7684\u4fe1\u606f\u8868\u8ff0\u65b9\u5f0f\u8fd9\u79cd\u6df1\u5c42\u6b21\u7684\u53d8\u9769\u3002"),(0,o.kt)("p",null,"\u5f88\u663e\u7136\uff0c\u8fd9\u79cd\u7531\u7528\u6237\u9a71\u52a8\u7684\u5168\u65b0\u4f53\u9a8c\u9700\u6c42\uff0c\u7528\u5f53\u4e0b\u7684\u6280\u672f\u67b6\u6784\u662f\u505a\u4e0d\u5230\u7684\uff0c\u800c\u4e14\u5b83\u7684\u9650\u5236\u7684\u6839\u6e90\u6765\u6e90\u4e8e\u66f4\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u3002\u5728\u8fd1\u51e0\u5341\u5e74\u7684\u8ba1\u7b97\u673a\u65f6\u4ee3\u4e2d\uff0c\u5e95\u5c42\u7684\u8ba1\u7b97\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u53d1\u751f\u592a\u6839\u672c\u6027\u53d8\u5316\uff0c\u4f8b\u5982\u6211\u4eec\u80fd\u611f\u77e5\u5230\u7684\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u8bd1\u67b6\u6784\u57fa\u672c\u4e0a\u6ca1\u6709\u592a\u5927\u53d8\u5316\uff0c\u4e00\u4e9b10\u5e74\u524d\u7684\u7ecf\u5178\u8457\u540d\u57fa\u672c\u4e0a\u73b0\u5728\u8fd8\u662f\u9002\u7528\u7684"),(0,o.kt)("li",{parentName:"ul"},"\u8fd110\u5e74\u7f16\u7a0b\u8bed\u8a00\u7684\u53d1\u5c55\u4e5f\u6ca1\u6709\u9769\u547d\u6027\u7684\u53d8\u5316\uff0c\u4e0d\u4ec5\u81f32010\u5e74\u4e4b\u540e\u5f88\u5c11\u63a8\u51fa\u5168\u65b0\u7684\u8bed\u8a00\uff0c\u5927\u90e8\u5206\u8bed\u8a00\u8bbe\u8ba1\u4e5f\u53ea\u662f\u9488\u5bf9\u4e00\u4e9b\u5f00\u53d1\u4f53\u9a8c\u5c42\u9762\u7684\u9009\u62e9\uff0c\u5f88\u591a\u8bed\u8a00\u7684\u6838\u5fc3\u601d\u60f3\u751a\u81f3\u65e9\u57282000\u5e74\u4e4b\u524d\u5c31\u786e\u5b9a")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"add",src:r(910).Z,width:"1920",height:"1080"})),(0,o.kt)("p",null,"\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u662f\u8ba1\u7b97\u67b6\u6784\u6700\u91cd\u8981\u7684\u6307\u5411\uff0c\u56e0\u4e3a\u5b83\u4eec\u8fde\u63a5\u8ba1\u7b97\u673a\u786c\u4ef6\u548c\u5e94\u7528\u8f6f\u4ef6\uff0c\u5b83\u4eec\u7684\u53d8\u9769\u5f80\u5f80\u80fd\u591f\u51b3\u5b9a\u4e0a\u5c42\u8f6f\u4ef6\u5f62\u6001\u7684\u53d8\u9769\uff0c\u4ece\u800c\u51b3\u5b9a\u6280\u672f\u5e26\u7ed9\u6d88\u8d39\u8005\u7684\u53d8\u9769\u3002"),(0,o.kt)("p",null,"\u5f53\u5143\u5b87\u5b99\u5e26\u6765\u771f\u6b63\u5927\u89c4\u6a21\u3001\u4e92\u64cd\u4f5c\u3001\u5927\u5e76\u53d1\u7b49\u7b49\u8fd9\u4e9b\u4f20\u7edf\u8ba1\u7b97\u6a21\u578b\u4e0d\u80fd\u5e94\u4ed8\u7684\u9700\u6c42\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5168\u65b0\u7684\u601d\u8def\uff0c\u5728\u8ba1\u7b97\u67b6\u6784\u5c42\u9762\u521b\u9020\u5168\u65b0\u7684\u589e\u91cf\u4ef7\u503c\uff0c\u624d\u6709\u673a\u4f1a\u9a71\u52a8\u6574\u4e2a\u5143\u5b87\u5b99\u7684\u53d8\u9769\u3002"))}f.isMDXComponent=!0},910:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/add-c0fef0031b7f32b99f01a937935d1c93.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/49b2de74.b79f9acf.js b/zh/assets/js/49b2de74.b79f9acf.js deleted file mode 100644 index 5b7fbfb..0000000 --- a/zh/assets/js/49b2de74.b79f9acf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8712],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/zh/assets/js/6875c492.baf4982b.js b/zh/assets/js/6875c492.baf4982b.js deleted file mode 100644 index dc68ec0..0000000 --- a/zh/assets/js/6875c492.baf4982b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8610],{2605:(e,t,a)=>{a.r(t),a.d(t,{default:()=>Z});var n=a(7294),l=a(4334),r=a(7325),s=a(3777),o=a(5463),i=a(3702),g=a(3699),c=a(6582),m=a(3672);function u(e){const{metadata:t}=e,{previousPage:a,nextPage:l}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,r.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(m.Z,{permalink:a,title:n.createElement(r.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),l&&n.createElement(m.Z,{permalink:l,title:n.createElement(r.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}var p=a(3647),d=a(9107),h=a(339);function E(e){let{items:t,component:a=h.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(d.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}function b(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function f(e){let{tag:t}=e;const a=b(t);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:a}),n.createElement(p.Z,{tag:"blog_tags_posts"}))}function w(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const o=b(t);return n.createElement(c.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(E,{items:a}),n.createElement(u,{metadata:s}))}function Z(e){return n.createElement(o.FG,{className:(0,l.Z)(i.k.wrapper.blogPages,i.k.page.blogTagPostListPage)},n.createElement(f,e),n.createElement(w,e))}},3132:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(1141),r=a(7410);function s(e){return n.createElement(n.Fragment,null,n.createElement(l.Z,e))}(void 0!==a.g?a.g:window).Prism=r.Z,a(9385)}}]); \ No newline at end of file diff --git a/zh/assets/js/831b5c01.07ee4a6a.js b/zh/assets/js/831b5c01.07ee4a6a.js deleted file mode 100644 index ca5f107..0000000 --- a/zh/assets/js/831b5c01.07ee4a6a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8852],{4469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/zh/assets/js/8485.28ee2776.js b/zh/assets/js/8485.28ee2776.js deleted file mode 100644 index 7f5a295..0000000 --- a/zh/assets/js/8485.28ee2776.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[8485],{4137:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=l(n),p=o,f=d["".concat(c,".").concat(p)]||d[p]||m[p]||a;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=p;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[d]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{"use strict";n.d(t,{Z:()=>q});var r=n(7462),o=n(7294),a=n(1048),i=n(4334),s=n(9200),c=n(107);function l(){const{prism:e}=(0,c.L)(),{colorMode:t}=(0,s.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var u=n(3702),d=n(7594),m=n.n(d);const p=/title=(?["'])(?.*?)\1/,f=/\{(?<range>[\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function h(e,t){const n=e.map((e=>{const{start:n,end:r}=g[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function y(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:a}=t;if(a&&f.test(a)){const e=a.match(f).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=m()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return h(["js","jsBlock"],t);case"jsx":case"tsx":return h(["js","jsBlock","jsx"],t);case"html":return h(["js","jsBlock","html"],t);case"python":case"py":case"bash":return h(["bash"],t);case"markdown":case"md":return h(["html","jsx","bash"],t);default:return h(Object.keys(g),t)}}(r,o),s=n.split("\n"),c=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let m=0;m<s.length;){const e=s[m].match(i);if(!e){m+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?c[l[t]].range+=`${m},`:u[t]?c[u[t]].start=m:d[t]&&(c[d[t]].range+=`${c[d[t]].start}-${m-1},`),s.splice(m,1)}n=s.join("\n");const p={};return Object.entries(c).forEach((e=>{let[t,{range:n}]=e;m()(n).forEach((e=>{p[e]??=[],p[e].push(t)}))})),{lineClassNames:p,code:n}}const b={codeBlockContainer:"codeBlockContainer_Ckt0"};function v(e){let{as:t,...n}=e;const a=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[r,o]=e;const a=t[r];a&&"string"==typeof o&&(n[a]=o)})),n}(l());return o.createElement(t,(0,r.Z)({},n,{style:a,className:(0,i.Z)(n.className,b.codeBlockContainer,u.k.common.codeBlock)}))}const E={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function k(e){let{children:t,className:n}=e;return o.createElement(v,{as:"pre",tabIndex:0,className:(0,i.Z)(E.codeBlockStandalone,"thin-scrollbar",n)},o.createElement("code",{className:E.codeBlockLines},t))}var w=n(3768);const N={attributes:!0,characterData:!0,childList:!0,subtree:!0};function C(e,t){const[n,r]=(0,o.useState)(),a=(0,o.useCallback)((()=>{r(e.current?.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,o.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=N);const r=(0,w.zX)(t),a=(0,w.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,a),()=>t.disconnect()}),[e,r,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const B={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var S={Prism:n(7410).Z,theme:B};function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(){return x=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},x.apply(this,arguments)}var Z=/\r\n|\r|\n/,L=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},j=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)};function O(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}var _=function(e){function t(){for(var t=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];e.apply(this,n),T(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?function(e,t){var n=e.plain,r=Object.create(null),o=e.styles.reduce((function(e,n){var r=n.languages,o=n.style;return r&&!r.includes(t)||n.types.forEach((function(t){var n=x({},e[t],o);e[t]=n})),e}),r);return o.root=n,o.plain=x({},n,{backgroundColor:null}),o}(e.theme,e.language):void 0;return t.themeDict=n})),T(this,"getLineProps",(function(e){var n=e.key,r=e.className,o=e.style,a=x({},O(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),i=t.getThemeDict(t.props);return void 0!==i&&(a.style=i.plain),void 0!==o&&(a.style=void 0!==a.style?x({},a.style,o):o),void 0!==n&&(a.key=n),r&&(a.className+=" "+r),a})),T(this,"getStyleForToken",(function(e){var n=e.types,r=e.empty,o=n.length,a=t.getThemeDict(t.props);if(void 0!==a){if(1===o&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===o&&!r)return a[n[0]];var i=r?{display:"inline-block"}:{},s=n.map((function(e){return a[e]}));return Object.assign.apply(Object,[i].concat(s))}})),T(this,"getTokenProps",(function(e){var n=e.key,r=e.className,o=e.style,a=e.token,i=x({},O(e,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:t.getStyleForToken(a),key:void 0});return void 0!==o&&(i.style=void 0!==i.style?x({},i.style,o):o),void 0!==n&&(i.key=n),r&&(i.className+=" "+r),i})),T(this,"tokenize",(function(e,t,n,r){var o={code:t,grammar:n,language:r,tokens:[]};e.hooks.run("before-tokenize",o);var a=o.tokens=e.tokenize(o.code,o.grammar,o.language);return e.hooks.run("after-tokenize",o),a}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,r=e.code,o=e.children,a=this.getThemeDict(this.props),i=t.languages[n];return o({tokens:function(e){for(var t=[[]],n=[e],r=[0],o=[e.length],a=0,i=0,s=[],c=[s];i>-1;){for(;(a=r[i]++)<o[i];){var l=void 0,u=t[i],d=n[i][a];if("string"==typeof d?(u=i>0?u:["plain"],l=d):(u=j(u,d.type),d.alias&&(u=j(u,d.alias)),l=d.content),"string"==typeof l){var m=l.split(Z),p=m.length;s.push({types:u,content:m[0]});for(var f=1;f<p;f++)L(s),c.push(s=[]),s.push({types:u,content:m[f]})}else i++,t.push(u),n.push(l),r.push(0),o.push(l.length)}i--,t.pop(),n.pop(),r.pop(),o.pop()}return L(s),c}(void 0!==i?this.tokenize(t,r,i,n):[r]),className:"prism-code language-"+n,style:void 0!==a?a.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(o.Component);const z=_,A={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function P(e){let{line:t,classNames:n,showLineNumbers:a,getLineProps:s,getTokenProps:c}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const l=s({line:t,className:(0,i.Z)(n,a&&A.codeLine)}),u=t.map(((e,t)=>o.createElement("span",(0,r.Z)({key:t},c({token:e,key:t})))));return o.createElement("span",l,a?o.createElement(o.Fragment,null,o.createElement("span",{className:A.codeLineNumber}),o.createElement("span",{className:A.codeLineContent},u)):u,o.createElement("br",null))}var I=n(7325);function M(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function $(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const D={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function R(e){let{code:t,className:n}=e;const[r,a]=(0,o.useState)(!1),s=(0,o.useRef)(void 0),c=(0,o.useCallback)((()=>{!function(e,{target:t=document.body}={}){if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const n=document.createElement("textarea"),r=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";const o=document.getSelection(),a=o.rangeCount>0&&o.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}n.remove(),a&&(o.removeAllRanges(),o.addRange(a)),r&&r.focus()}(t),a(!0),s.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,o.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),o.createElement("button",{type:"button","aria-label":r?(0,I.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,I.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,I.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,D.copyButton,r&&D.copyButtonCopied),onClick:c},o.createElement("span",{className:D.copyButtonIcons,"aria-hidden":"true"},o.createElement(M,{className:D.copyButtonIcon}),o.createElement($,{className:D.copyButtonSuccessIcon})))}function H(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const W={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function V(e){let{className:t,onClick:n,isEnabled:r}=e;const a=(0,I.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return o.createElement("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,r&&W.wordWrapButtonEnabled),"aria-label":a,title:a},o.createElement(H,{className:W.wordWrapButtonIcon,"aria-hidden":"true"}))}function F(e){let{children:t,className:n="",metastring:a,title:s,showLineNumbers:u,language:d}=e;const{prism:{defaultLanguage:m,magicComments:f}}=(0,c.L)(),g=d??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??m,h=l(),b=function(){const[e,t]=(0,o.useState)(!1),[n,r]=(0,o.useState)(!1),a=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),s=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");r(n)}),[a]);return C(a,s),(0,o.useEffect)((()=>{s()}),[e,s]),(0,o.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:i}}(),k=function(e){return e?.match(p)?.groups.title??""}(a)||s,{lineClassNames:w,code:N}=y(t,{metastring:a,language:g,magicComments:f}),B=u??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return o.createElement(v,{as:"div",className:(0,i.Z)(n,g&&!n.includes(`language-${g}`)&&`language-${g}`)},k&&o.createElement("div",{className:E.codeBlockTitle},k),o.createElement("div",{className:E.codeBlockContent},o.createElement(z,(0,r.Z)({},S,{theme:h,code:N,language:g??"text"}),(e=>{let{className:t,tokens:n,getLineProps:r,getTokenProps:a}=e;return o.createElement("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(t,E.codeBlock,"thin-scrollbar")},o.createElement("code",{className:(0,i.Z)(E.codeBlockLines,B&&E.codeBlockLinesWithNumbering)},n.map(((e,t)=>o.createElement(P,{key:t,line:e,getLineProps:r,getTokenProps:a,classNames:w[t],showLineNumbers:B})))))})),o.createElement("div",{className:E.buttonGroup},(b.isEnabled||b.isCodeScrollable)&&o.createElement(V,{className:E.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),o.createElement(R,{className:E.codeButton,code:N}))))}function q(e){let{children:t,...n}=e;const i=(0,a.Z)(),s=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),c="string"==typeof s?F:k;return o.createElement(c,(0,r.Z)({key:String(i)},n),s)}},495:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(7325),s=n(107),c=n(3699);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function u(e){let{as:t,id:n,...u}=e;const{navbar:{hideOnScroll:d}}=(0,s.L)();if("h1"===t||!n)return o.createElement(t,(0,r.Z)({},u,{id:void 0}));const m=(0,i.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return o.createElement(t,(0,r.Z)({},u,{className:(0,a.Z)("anchor",d?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n}),u.children,o.createElement(c.Z,{className:"hash-link",to:`#${n}`,"aria-label":m,title:m},"\u200b"))}},6220:(e,t,n)=>{"use strict";n.d(t,{Z:()=>A});var r=n(7294),o=n(4137),a=n(7462),i=n(1514);var s=n(3132);var c=n(3699);var l=n(4334),u=n(7459),d=n(1048),m=n(4639);const p={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function f(e){return!!e&&("SUMMARY"===e.tagName||f(e.parentElement))}function g(e,t){return!!e&&(e===t||g(e.parentElement,t))}function h(e){let{summary:t,children:n,...o}=e;const i=(0,d.Z)(),s=(0,r.useRef)(null),{collapsed:c,setCollapsed:l}=(0,m.u)({initialState:!o.open}),[h,y]=(0,r.useState)(o.open),b=r.isValidElement(t)?t:r.createElement("summary",null,t??"Details");return r.createElement("details",(0,a.Z)({},o,{ref:s,open:h,"data-collapsed":c,className:(0,u.Z)(p.details,i&&p.isBrowser,o.className),onMouseDown:e=>{f(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;f(t)&&g(t,s.current)&&(e.preventDefault(),c?(l(!1),y(!0)):l(!0))}}),b,r.createElement(m.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{l(e),y(!e)}},r.createElement("div",{className:p.collapsibleContent},n)))}const y={details:"details_b_Ee"},b="alert alert--info";function v(e){let{...t}=e;return r.createElement(h,(0,a.Z)({},t,{className:(0,l.Z)(b,y.details,t.className)}))}var E=n(495);function k(e){return r.createElement(E.Z,e)}const w={containsTaskList:"containsTaskList_mC6p"};function N(e){if(void 0!==e)return(0,l.Z)(e,e?.includes("contains-task-list")&&w.containsTaskList)}const C={img:"img_ev3q"};var B=n(3702),S=n(7325);const T="admonition_LlT9",x="admonitionHeading_tbUL",Z="admonitionIcon_kALy",L="admonitionContent_S0QG";const j={note:{infimaClassName:"secondary",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:r.createElement(S.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:r.createElement(S.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:r.createElement(S.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:r.createElement(S.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 16 16"},r.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:r.createElement(S.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},O={secondary:"note",important:"info",success:"tip",warning:"danger"};function _(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=r.Children.toArray(e),n=t.find((e=>r.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),o=r.createElement(r.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:o}}(e.children);return{...e,title:e.title??t,children:n}}const z={head:function(e){const t=r.Children.map(e.children,(e=>r.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...o}=e.props;return r.createElement(e.props.originalType,o)}return e}(e):e));return r.createElement(i.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return r.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,r.isValidElement)(e)&&t.includes(e.props?.mdxType)))?r.createElement("code",e):r.createElement(s.Z,e)},a:function(e){return r.createElement(c.Z,e)},pre:function(e){return r.createElement(s.Z,(0,r.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=r.Children.toArray(e.children),n=t.find((e=>r.isValidElement(e)&&"summary"===e.props?.mdxType)),o=r.createElement(r.Fragment,null,t.filter((e=>e!==n)));return r.createElement(v,(0,a.Z)({},e,{summary:n}),o)},ul:function(e){return r.createElement("ul",(0,a.Z)({},e,{className:N(e.className)}))},img:function(e){return r.createElement("img",(0,a.Z)({loading:"lazy"},e,{className:(t=e.className,(0,l.Z)(t,C.img))}));var t},h1:e=>r.createElement(k,(0,a.Z)({as:"h1"},e)),h2:e=>r.createElement(k,(0,a.Z)({as:"h2"},e)),h3:e=>r.createElement(k,(0,a.Z)({as:"h3"},e)),h4:e=>r.createElement(k,(0,a.Z)({as:"h4"},e)),h5:e=>r.createElement(k,(0,a.Z)({as:"h5"},e)),h6:e=>r.createElement(k,(0,a.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:o,icon:a}=_(e),i=function(e){const t=O[e]??e,n=j[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),j.info)}(n),s=o??i.label,{iconComponent:c}=i,u=a??r.createElement(c,null);return r.createElement("div",{className:(0,l.Z)(B.k.common.admonition,B.k.common.admonitionType(e.type),"alert",`alert--${i.infimaClassName}`,T)},r.createElement("div",{className:x},r.createElement("span",{className:Z},u),s),r.createElement("div",{className:L},t))},mermaid:()=>null};function A(e){let{children:t}=e;return r.createElement(o.Zo,{components:z},t)}},7594:(e,t)=>{function n(e){let t,n=[];for(let r of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,o,a]=t;if(r&&a){r=parseInt(r),a=parseInt(a);const e=r<a?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(a+=e);for(let t=r;t!==a;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},9385:()=>{!function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",r=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+r),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+r+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism)}}]); \ No newline at end of file diff --git a/zh/assets/js/927d70e2.bb1d543b.js b/zh/assets/js/927d70e2.bb1d543b.js deleted file mode 100644 index 2062d40..0000000 --- a/zh/assets/js/927d70e2.bb1d543b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[1045],{2190:r=>{r.exports=JSON.parse('{"blogPosts":[{"id":"the-evolution-of-ECS","metadata":{"permalink":"/zh/blog/the-evolution-of-ECS","source":"@site/blog/2023-10-10-the-evolution-of-ECS.md","title":"The Evolution of ECS","description":"","date":"2023-10-10T00:00:00.000Z","formattedDate":"2023\u5e7410\u670810\u65e5","tags":[{"label":"Reality World","permalink":"/zh/blog/tags/reality-world"},{"label":"Cogine","permalink":"/zh/blog/tags/cogine"}],"readingTime":0,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"the-evolution-of-ECS","title":"The Evolution of ECS","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World","Cogine"],"hide_table_of_contents":false,"image":"/img/blog/open-source-conference.jpg"},"nextItem":{"title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","permalink":"/zh/blog/reality-world-open-source-conference"}},"content":""},{"id":"reality-world-open-source-conference","metadata":{"permalink":"/zh/blog/reality-world-open-source-conference","source":"@site/blog/2023-10-09-reality-world-open-source-conference.md","title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","description":"\u5443\uff0c\u8fd9\u53c8\u662f\u4e00\u4e2a\u521b\u4e1a\u516c\u53f8\u8425\u9500\u7684\u5671\u5934\u548c\u65b9\u5f0f\u5417\uff1f","date":"2023-10-09T00:00:00.000Z","formattedDate":"2023\u5e7410\u67089\u65e5","tags":[{"label":"Reality World","permalink":"/zh/blog/tags/reality-world"},{"label":"Open source","permalink":"/zh/blog/tags/open-source"}],"readingTime":27.215,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"reality-world-open-source-conference","title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World","Open source"],"hide_table_of_contents":false,"image":"/img/blog/open-source-conference.jpg"},"prevItem":{"title":"The Evolution of ECS","permalink":"/zh/blog/the-evolution-of-ECS"},"nextItem":{"title":"Conversational computing: a new programming model empower LLM applications","permalink":"/zh/blog/conversational-computing"}},"content":"**\u5443\uff0c\u8fd9\u53c8\u662f\u4e00\u4e2a\u521b\u4e1a\u516c\u53f8\u8425\u9500\u7684\u5671\u5934\u548c\u65b9\u5f0f\u5417\uff1f**\\r\\n\\r\\n**\u53c8\u53bb\u770b\u4ed6\u4eec\u5ba3\u4f20\u4ea7\u54c1\u4e0d\u8bb2\u6280\u672f\u5417\uff1f**\\r\\n\\r\\n**\u4f60\u76f4\u63a5\u5f00\u6e90\u4e0d\u5c31\u5f97\u4e86\uff0c\u8fd8\u641e\u4ec0\u4e48\u7ebf\u4e0b\u6d3b\u52a8\uff1f**\\r\\n\\r\\n## \u5148\u56de\u7b54\u95ee\u9898\\r\\n\\r\\n\u5173\u4e8e\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c[Reality World](https://realityworld.com/)\u5df2\u7ecf\u614e\u91cd\u51b3\u5b9a\u7531\u521b\u4e1a\u9879\u76ee\u8f6c\u4e3a\u7eaf\u5f00\u6e90\u9879\u76ee\uff0c\u4e5f\u5c31\u662f\u8bf4\u5b83\u540e\u9762\u5c06\u4e0d\u4f1a\u6709\u4e00\u4e2a\u521b\u4e1a\u516c\u53f8\u5b9e\u4f53\u6765\u8fd0\u8425\uff0c\u5b83\u4f1a\u771f\u6b63\u4f9d\u9760\u793e\u533a\u53ca\u5176\u7ec4\u7ec7\u8fdb\u884c\u53d1\u5c55\uff0c\u5c31\u50cfBevy\u7b49\u5f00\u6e90\u9879\u76ee\uff0c\u5f53\u7136\u6211\u80af\u5b9a\u4e5f\u4f1a\u6301\u7eed\u5728\u8fd9\u4e2a\u9879\u76ee\u8fdb\u884c\u8fed\u4ee3\u5f00\u53d1\u3002\u8fd9\u4e5f\u610f\u5473\u7740\u5b83\u4e0d\u518d\u6709\u5546\u4e1a\u5229\u76ca\uff0c\u4efb\u610f\u516c\u53f8\u6216\u4e2a\u4eba\u90fd\u53ef\u4ee5\u4f7f\u7528\u6216\u8005\u57fa\u4e8e\u5b83\u8fdb\u884c\u4fee\u6539\u6216\u6269\u5c55\u3002\\r\\n\\r\\n**\u4e4b\u6240\u4ee5\u8fd9\u6837\u7684\u9009\u62e9\uff0c\u5f88\u5927\u4e00\u4e2a\u539f\u56e0\u662f\uff0c\u6211\u89c9\u5f97\u8fd9\u51e0\u5e74\u6280\u672f\u3001\u73af\u5883\u548c\u4ea7\u54c1\u5f62\u6001\u7684\u53d8\u5316\u548c\u53d1\u5c55\u90fd\u5f88\u5feb\uff0c\u5404\u79cd\u6982\u5ff5\u5f25\u6f2b\u7740\u6574\u4e2a\u4e16\u754c\uff0c\u6211\u8ba4\u8bc6\u548c\u4ea4\u6d41\u8fc7\u5f88\u591a\u6295\u8d44\u4eba\u3001\u521b\u4e1a\u8005\u3001\u5f00\u53d1\u8005\u4ee5\u53ca\u884c\u4e1a\u5f88\u591a\u4e0d\u592a\u61c2\u6280\u672f\u7684\u5404\u79cd\u89d2\u8272\uff0c\u5373\u4f7f\u6700\u806a\u660e\u7684\u4eba\uff0c\u5f80\u5f80\u4e5f\u5f88\u96be\u5728\u4e00\u4e9b\u5173\u4e8e\u6280\u672f\u7684\u7406\u89e3\u4e0a\u8fbe\u6210\u5171\u8bc6\uff0c\u800c\u4e14\u56fd\u5185\u7684\u6574\u4e2a\u73af\u5883\u666e\u904d\u8fd8\u662f\u66f4\u5173\u6ce8\u4e0a\u5c42\u7684\u5e94\u7528\uff0c\u800c\u7845\u8c37\u7684\u5f88\u591a\u4ea7\u54c1\u521b\u65b0\u66f4\u591a\u662f\u6e90\u4e8e\u5bf9\u6280\u672f\u7684\u6df1\u523b\u7406\u89e3\u3002\u6240\u4ee5\u6211\u89c9\u5f97\u7ad9\u5728\u8fd9\u4e2a\u5386\u53f2\u9636\u6bb5\uff0c\u6211\u4eec\u6700\u91cd\u8981\u7684\u662f\u8981\u6709\u4e00\u4e9b\u5173\u4e8e\u6280\u672f\u7684\u57fa\u7840\u8ba8\u8bba\u5f62\u6210\u5171\u8bc6\uff0c\u8981\u6709\u4e00\u4e9b\u5177\u4f53\u800c\u7cfb\u7edf\u7684\u5b9e\u8df5\u800c\u4e0d\u662f\u505c\u7559\u5728\u81c6\u60f3\uff0c\u7136\u540e\u8981\u5c06\u8fd9\u6837\u7684\u57fa\u7840\u5171\u8bc6\u5f00\u653e\u4e3a\u516c\u5171\u8d44\u6e90\uff0c\u5f62\u6210\u4e00\u4e9b\u575a\u5f3a\u7684\u5171\u8bc6\u5e95\u5ea7\uff0c\u7136\u540e\u6709\u4e86\u66f4\u6e05\u6670\u7684\u6280\u672f\u7406\u89e3\uff0c\u4e0a\u5c42\u7684\u521b\u65b0\u624d\u4f1a\u771f\u6b63\u7684\u7e41\u8363\u3002Reality World \u73b0\u5728\u7684\u4f7f\u547d\u5c31\u662f\u5c1d\u8bd5\u53bb\u6210\u4e3a\u5176\u4e2d\u7684\u4e00\u80a1\u5f00\u653e\u529b\u91cf\uff0c\u5b83\u9996\u5148\u63d0\u51fa\u81ea\u5df1\u5bf9\u6280\u672f\u548c\u672a\u6765\u7684\u7cfb\u7edf\u7406\u89e3\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e9b\u7406\u89e3\u6784\u5efa\u4e00\u79cd\u53ef\u4f9b\u5927\u5bb6\u5b66\u4e60\u548c\u8ba8\u8bba\u7684\u5b9e\u8df5\uff0c\u6700\u540e\u5f00\u6e90\u51fa\u6765\u4f9b\u5927\u5bb6\u4f20\u64ad\u3001\u5206\u4eab\u3001\u8ba8\u8bba\u548c\u53d1\u5c55\u3002**\\r\\n\\r\\n\u5173\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u5982\u679c\u6709\u670b\u53cb\u53c2\u52a0\u8fc7\u62112018\u5e74\u7684\u5168\u56fd\u56fe\u5f62\u6e32\u67d3\u6280\u672f\u5de1\u8bb2\uff0c\u4e00\u4e2a\u4eba\u56f4\u7ed5\u4e00\u4e2a\u4e3b\u9898\u8bb23\uff5e4\u4e2a\u5c0f\u65f6\uff0c\u5728\u4e2d\u56fd\u8fd9\u79cd\u4f1a\u8bae\u51e0\u4e4e\u662f\u7edd\u65e0\u4ec5\u6709\u7684\uff0c\u90a3\u79cd\u7cfb\u7edf\u548c\u6df1\u5ea6\u8fdc\u4e0d\u662f\u90a3\u79cd15\uff5e45\u5206\u949f\u873b\u8713\u70b9\u6c34\u4e00\u6837\u7684\u611f\u89c9\uff0c\u8fd9\u5c06\u662f\u4e00\u573a\u975e\u5e38\u6df1\u523b\u7684\u6280\u672f\u65c5\u7a0b\uff0c\u6211\u76f8\u4fe1\u6bcf\u4e2a\u4eba\u53ef\u4ee5\u5b66\u5230\u975e\u5e38\u975e\u5e38\u591a\u7684\u77e5\u8bc6\u548c\u7406\u89e3\uff0c\u540e\u9762\u6211\u4f1a\u5927\u6982\u8bf4\u660e\u4f1a\u8bb2\u4ec0\u4e48\u5185\u5bb9\u3002\\r\\n\\r\\n\u5173\u4e8e\u7b2c\u4e09\u4e2a\u95ee\u9898\uff0c\u8fd9\u4e2a\u9879\u76ee\u8ddf\u5176\u5b83\u9879\u76ee\u975e\u5e38\u4e0d\u540c\uff0c\u7b80\u5355\u6765\u8bf4\uff0c\u76f4\u63a5\u5f00\u6e90\u51fa\u6765\u8ba9\u5927\u5bb6\u81ea\u5df1\u7814\u7a76\u4ee3\u7801\u548c\u6587\u6863\u53ef\u80fd\u5e76\u4e0d\u597d\u7406\u89e3\uff0c\u901a\u5e38\u6211\u81ea\u5df1\u6709\u65f6\u5019\u4e5f\u5f88\u96be\u7528\u7b80\u5355\u7684\u51e0\u53e5\u8bdd\u5411\u670b\u53cb\u6216\u6295\u8d44\u4eba\u8bf4\u660eReality World\u662f\u4ec0\u4e48\u3002\u4e00\u65b9\u9762\u662fReality World\u592a\u6280\u672f\uff0c\u6d89\u53ca\u7684\u6bcf\u4e00\u4e2a\u8bbe\u8ba1\u51b3\u7b56\u90fd\u6709\u5f88\u591a\u4e0d\u540c\u5c42\u9762\u7684\u8003\u8651\uff1b\u53e6\u4e00\u65b9\u9762\u5b83\u6d89\u53ca\u7684\u6280\u672f\u9762\u975e\u5e38\u5e7f\uff0c\u4ece\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u7ed3\u6784\u3001\u5230\u7f16\u8bd1/\u89e3\u91ca/\u94fe\u63a5\uff0c\u5230\u8fd0\u884c\u65f6\u7684\u865a\u62df\u673a\u3001\u8c03\u5ea6\u548c\u6c99\u76d2\uff0c\u4ee5\u53ca\u8fd8\u6d89\u53ca\u5230\u600e\u6837\u7528\u8fd9\u4e9b\u6280\u672f\u53bb\u89e3\u51b3\u6bd4\u5982\u5143\u5b87\u5b99\u5e94\u7528\u7684\u4e00\u4e9b\u9700\u6c42\u7b49\u7b49\uff1b\u6700\u540e\u5b83\u7684\u76ee\u6807\u4e5f\u4e0d\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u5e94\u7528\u6216\u8005\u4e00\u4e2a\u6846\u67b6\uff0c\u5b83\u662f\u4ecb\u4e8e\u6846\u67b6\u548c\u7f16\u7a0b\u8bed\u8a00\u4e4b\u95f4\u7684\u4e00\u79cd\u7528\u4e8e\u6784\u5efa\u5e94\u7528\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u4f46\u5b83\u672c\u8eab\u4e5f\u4e0d\u662f\u4e00\u79cd\u7f16\u7a0b\u8bed\u8a00\u3002\\r\\n\\r\\n**\u6240\u4ee5\uff0c\u8fd9\u4e48\u591a\u590d\u6742\u7684\u4e8b\u60c5\u8026\u5408\u5728\u4e00\u8d77\uff0c\u6211\u5fc5\u987b\u7528\u8bed\u97f3\u548c\u89c6\u9891\u7684\u65b9\u5f0f\u624d\u80fd\u66f4\u6e05\u6670\u7684\u8868\u8fbe\u5b83\uff0c\u624d\u80fd\u8ba9\u5927\u5bb6\u66f4\u597d\u5730\u7406\u89e3\u8fd9\u4e2a\u9879\u76ee\u7684\u76ee\u7684\uff0c\u4e0d\u7136\u5f00\u6e90\u4e00\u4e2a\u5927\u5bb6\u90fd\u770b\u4e0d\u61c2\u6216\u8005\u8fde\u770b\u61c2\u76ee\u7684\u90fd\u5f88\u590d\u6742\u7684\u9879\u76ee\u6709\u4ec0\u4e48\u610f\u4e49\u5462\uff1f\u4f46\u597d\u6d88\u606f\u662f\uff0c\u5982\u679c\u4f60\u542c\u6211\u4e00\u6b21\u7cfb\u7edf\u7684\u8bb2\u89e3\uff0c\u5b83\u5176\u5b9e\u7406\u89e3\u8d77\u6765\u975e\u5e38\u7b80\u5355\uff0c\u4f46\u8fd9\u79cd\u7b80\u5355\u5b83\u4e0d\u80fd\u7528\u7b80\u5355\u7684\u6587\u5b57\u8868\u8fbe\uff0c\u5426\u5219\u4f60\u53ef\u80fd\u8981\u82b1\u8d39\u8fdc\u8fdc\u5927\u4e8e3\u4e2a\u5c0f\u65f6\u7684\u65f6\u95f4\u624d\u80fd\u66f4\u6e05\u6670\u7684\u7406\u89e3\u8fd9\u4e2a\u9879\u76ee\u7684\u903b\u8f91\u548c\u76ee\u7684\u3002**\\r\\n\\r\\n## Reality World\u662f\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u5c3d\u7ba1\u8fd9\u4e2a\u95ee\u9898\u56de\u7b54\u8d77\u6765\u5f88\u56f0\u96be\uff0c\u4f46\u6211\u8fd8\u662f\u5fc5\u987b\u8981\u5c1d\u8bd5\u7528\u7b80\u5355\u7684\u51e0\u53e5\u8bdd\u89e3\u91ca\u5b83\uff0c\u5426\u5219\u90fd\u4e0d\u77e5\u9053\u5b83\u662f\u4f55\u7269\uff0c\u6211\u4e3a\u4ec0\u4e48\u8981\u53bb\u5173\u6ce8\u8fd9\u4e2a\u9879\u76ee\u548c\u53c2\u52a0\u8fd9\u6b21\u6d3b\u52a8\u5462\uff1f\\r\\n\\r\\n[Reality World](https://realityworld.com/)\u662f\u4e00\u4e2a\u9762\u5411\u5177\u6709**\u201c\u672a\u6765\u7279\u5f81\u201d**\u5e94\u7528\u7684\u5f00\u53d1\u6846\u67b6\u548c\u8fd0\u884c\u65f6\uff0c\u5f00\u53d1\u6846\u67b6\u662f\u6307\u5b83\u662f\u4e00\u4e2a\u7528\u4e8e\u6784\u5efa\u5e94\u7528\u7684\u5de5\u5177\uff0c\u5c31\u50cf\u4f60\u7528\u6e38\u620f\u5f15\u64ce\u53ef\u4ee5\u6784\u5efa\u6e38\u620f\u7a0b\u5e8f\uff0c\u53ea\u4e0d\u8fc7\u73b0\u5728\u5b83\u8fd8\u4e0d\u652f\u6301\u56fe\u5f62\u548cUI\u663e\u793a\uff0c\u4f46\u662f\u5728\u5c06\u6765\u5b83\u5e94\u8be5\u53ef\u4ee5\u6bd4\u8f83\u7b80\u5355\u5730\u96c6\u6210\u4e00\u4e9b\u6e32\u67d3\u5f15\u64ce\u6216\u8005UI\u6846\u67b6\uff0c\u6bd5\u7adf\u8fd9\u90e8\u5206\u7684\u5185\u5bb9\u548c\u5de5\u4f5c\u6d41\u7a0b\u5927\u90e8\u5206\u662f\u6bd4\u8f83\u6210\u719f\u7684\uff0c\u4e5f\u53ef\u4ee5\u5f88\u5bb9\u6613\u5730\u628a\u5b83\u5d4c\u5165\u5230\u5df2\u6709\u7684\u6e38\u620f\u6216\u8005\u5e94\u7528\u4e2d\uff0c\u7528\u4e8e\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u529f\u80fd\u3002\\r\\n\\r\\n\u6240\u8c13**\u672a\u6765\u7279\u5f81**\uff0c\u6211\u4eec\u4e3b\u8981\u6307\u4e09\u4e2a\u5c42\u9762\uff0c\u540e\u9762\u4f1a\u6709\u66f4\u591a\u8ba8\u8bba\uff1a\\r\\n\\r\\n- **\u4e92\u64cd\u4f5c\u6027**\\r\\n- **\u76f8\u4e92\u534f\u4f5c**\\r\\n- **\u53bb\u4e2d\u5fc3\u5316**\\r\\n\\r\\n\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e09\u4e2a\u7279\u6027\u6b63\u5bf9\u5e94\u7740\u5143\u5b87\u5b99\uff08\u4e92\u64cd\u4f5c\u6027\uff09\uff0c\u5927\u6a21\u578b\u5e94\u7528\uff08\u591a\u667a\u80fd\u4f53\u534f\u4f5c\uff09\u4ee5\u53caWeb 3.0\uff08\u53bb\u4e2d\u5fc3\u5316\uff09\u3002\u5c3d\u7ba1\u8fd9\u4e09\u8005\u4e4b\u95f4\u7684\u6982\u5ff5\u4ee5\u53ca\u6280\u672f\u9700\u6c42\u90fd\u662f\u5f88\u6a21\u7cca\u7684\uff0c\u6211\u4eec\u5219\u5c1d\u8bd5\u5728\u8fd9\u4e09\u8005\u4e4b\u95f4\u5bfb\u627e\u4e00\u79cd\u7edf\u4e00\u7684\u8ba1\u7b97\u67b6\u6784\u548c\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u3002\u6240\u4ee5\u8fd9\u5c31\u662fReality World\u6280\u672f\u4e0a\u7684\u590d\u6742\u6027\uff0c\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u601d\u8003\u7684\u662f\u9762\u5411\u672a\u67655~10\u5e74\u7684\u5e94\u7528\u7684\u5f62\u6001\u3002\\r\\n\\r\\nReality World\u6574\u4e2a\u4f53\u7cfb\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a\\r\\n\\r\\n- **Cogine\uff1a**\u662f\u6574\u4e2a\u5e94\u7528\u6784\u5efa\u65b9\u6cd5\u7684\u5e95\u5ea7\u548c\u8fd0\u884c\u65f6\uff0c\u5b83\u5b9a\u4e49\u8fd9\u79cd\u5e94\u7528\u7684\u8868\u8ff0\u683c\u5f0f\uff0c\u4ee5\u53ca\u5bf9\u8fd9\u79cd\u683c\u5f0f\u7684\u52a8\u6001\u89e3\u91ca\u548c\u8fd0\u884c\u65f6\u7684\u5176\u5b83\u529f\u80fd\u3002\u8be5\u8bcd\u7684\u524d\u7f00 *co-* \u53d6\u81ea**Co**mplexity system\uff0c\u6216\u8005**Co**gnitive computing\uff0c\u6216\u8005**Co**nversational computing\uff0c\u8fd9\u4e9b\u672f\u8bed\u90fd\u662fCogine\u80cc\u540e\u7684\u4e00\u4e9b\u6280\u672f\u601d\u60f3\uff1b\u540e\u7f00 *-gine* \u6765\u81ea\u4e8eEn**gine**\u3002\u6240\u4ee5\u53ef\u4ee5\u79f0\u4e4b\u4e3a\u590d\u6742\u5f15\u64ce\uff0c\u8ba4\u77e5\u8ba1\u7b97\u5f15\u64ce\u6216\u8005\u5bf9\u8bdd\u5f0f\u8ba1\u7b97\u5f15\u64ce\uff0c\u5176\u4e2d\u590d\u6742\u7cfb\u7edf\u76f8\u5173\u7684\u4e00\u4e9b\u7406\u8bba\u662f\u5b83\u91cd\u8981\u7684\u4e00\u4e9b\u8bbe\u8ba1\u539f\u5219\u548c\u76ee\u6807\u3002\\r\\n- **Reality Create\uff1a**\u662f\u8fd9\u79cd\u5e94\u7528\u7684\u7f16\u8f91\u5668\u3002\\r\\n- **Reality World\uff1a**\u662f\u8fd9\u79cd\u5e94\u7528\u7684\u4e00\u4e2a\u6a21\u62df\u5668\uff0c\u4efb\u610f\u4e00\u4e2a\u57fa\u4e8eCogine\u5b9a\u4e49\u7684\u683c\u5f0f\u6784\u5efa\u7684\u5e94\u7528\u7a0b\u5e8f\u5305\uff0c\u90fd\u53ef\u4ee5\u88ab\u5b83\u76f4\u63a5\u52a8\u6001\u52a0\u8f7d\u548c\u8fd0\u884c\u3002\u5f53\u7136\u4f5c\u4e3a\u4e00\u4e2a\u9762\u5411\u7528\u6237\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u5b83\u8fd8\u6709\u5176\u5b83\u4e00\u4e9b\u529f\u80fd\uff0c\u6bd4\u5982\u7a0b\u5e8f\u7684\u5b89\u5168\u6388\u6743\u7ba1\u7406\uff0c\u591a\u7a0b\u5e8f\u7684\u5206\u7ec4\u4ee5\u53ca\u7528\u6237\u4e0e\u7a0b\u5e8f\u7684\u4ea4\u4e92\u754c\u9762\u7b49\u7b49\u529f\u80fd\u3002\\r\\n\\r\\n## \u8bb2\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u57fa\u672c\u4e0a\uff0c\u4f1a\u5206\u4eab\u6240\u6709\u5173\u4e8eReality World\u7684\u4e00\u5207\uff0c\u5305\u62ec\u5b83\u7684\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u601d\u8003\uff0c\u5177\u4f53\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u4e00\u4e2a\u5177\u4f53\u7684\u4ee3\u7801\u5b9e\u73b0\u548cDemo\u6f14\u793a\u7b49\u3002\\r\\n\\r\\n\u8ba1\u7b97\u673a\u548c\u6570\u5b57\u5316\u53d1\u5c55\u8fd9\u4e48\u591a\u5e74\uff0c\u6211\u4eec\u5df2\u7ecf\u79ef\u7d2f\u4e86\u975e\u5e38\u591a\u7684\u77e5\u8bc6\u3001\u7406\u8bba\u548c\u65b9\u6cd5\uff0c\u4ece\u7f16\u7a0b\u8bed\u8a00\u3001\u8f6f\u4ef6\u5de5\u7a0b\u5230\u5404\u79cd\u67b6\u6784\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u800c\u4e14\u51e0\u4e4e\u4efb\u4f55\u4e00\u79cd\u65b0\u7684\u7279\u522b\u662f\u504f\u5e95\u5c42\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u5f80\u5f80\u90fd\u9762\u4e34\u7740\u8ddf\u5176\u5b83\u5f88\u591a\u6a21\u5757\u7684\u4ea4\u4e92\u548c\u534f\u4f5c\uff0c\u6240\u4ee5\u4e0e\u5355\u7eaf\u4e86\u89e3\u4e00\u79cd\u65b9\u6cd5\u672c\u8eab\u7684\u77e5\u8bc6\u76f8\u6bd4\uff0c\u5176\u80cc\u540e\u7684\u903b\u8f91\u548c\u8bbe\u8ba1\u601d\u60f3\u6709\u65f6\u5019\u66f4\u4e3a\u91cd\u8981\u3002\\r\\n\\r\\n\u5927\u4f53\u4e0a\uff0c3~4\u4e2a\u5c0f\u65f6\u7684\u6f14\u8bb2\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\\r\\n\\r\\n- \u7ea6\u670940%\u7684\u5185\u5bb9\u8ba8\u8bba\u4e3a\u4ec0\u4e48\u8981\u8fd9\u4e48\u8bbe\u8ba1\\r\\n- \u5176\u5b8360%\u5219\u4ecb\u7ecd\u5177\u6709\u7684\u67b6\u6784\u8bbe\u8ba1\u53ca\u4ee3\u7801\\r\\n\\r\\nReality World\u7684\u76ee\u6807\uff0c\u662f\u8981\u6784\u5efa\u4e00\u79cd\u65b0\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u548c\u6784\u9020\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5\u6700\u57fa\u7840\u7684\u95ee\u9898\u5c31\u662f\u4e3a\u4ec0\u4e48\u8981\u6784\u5efa\u4e00\u79cd\u65b0\u7684\u65b9\u6cd5\uff1f\u6211\u4eec\u5df2\u7ecf\u6709\u975e\u5e38\u6210\u719f\u7684\u5404\u79cd\u4f53\u7cfb\uff0c\u5728\u4f20\u7edf\u7684\u6d41\u7a0b\u4e2d\uff0c\u6bd4\u5982\u8981\u6784\u5efa\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u9996\u5148\u57fa\u672c\u7684\u5404\u79cd\u7f16\u7a0b\u8bed\u8a00\u5982C++\u3001Rust\u3001Python\u3001Javascript\u3001C#\u3001Go\u7b49\u57fa\u672c\u4e0a\u89e3\u51b3\u4e86\u5927\u90e8\u5206\u7684\u903b\u8f91\u7ec4\u7ec7\u548c\u8868\u8fbe\u7684\u95ee\u9898\uff0c\u5269\u4e0b\u7684\u4e3b\u8981\u5c31\u662f\u5728\u663e\u793a\u5c42\u53c8\u4f1a\u6709\u4e0d\u540c\u7684\u9009\u62e9\uff0c\u6bd4\u5982\u8981\u60f3\u5b9e\u73b03D\u7684\u56fe\u5f62\u754c\u9762\uff0c\u81f3\u5c11\u5f97\u9009\u62e9\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u6216\u8005\u5176\u5b83\u5177\u67093D\u6e32\u67d3\u80fd\u529b\u7684\u7ec4\u4ef6\u6216\u8005\u6846\u67b6\uff0c2D\u7684\u754c\u9762\u5219\u6709\u66f4\u591a\u5404\u5f0f\u5404\u6837\u7684\u9009\u62e9\uff0c\u6bd4\u5982iOS\u548cAndroid\u90fd\u6709\u539f\u751f\u7684UI\u4ea4\u4e92\u6846\u67b6\uff0c\u4e5f\u6709\u5176\u5b83\u4e00\u4e9b\u5982React\u3001Flutter\u7b49\u8de8\u5e73\u53f0\u6216\u8005\u57fa\u4e8eWeb\u7684\u5404\u79cd\u6846\u67b6\u3002\\r\\n\\r\\n\u56e0\u6b64\u8fd9\u4e2a\u5176\u5b9e\u662fReality World\u6700\u6838\u5fc3\u8981\u56de\u7b54\u7684\u95ee\u9898\u3002\u4e3a\u4ec0\u4e48\u8981\u8bbe\u8ba1\u4e00\u79cd\u65b0\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u5c06\u4e3b\u8981\u4ece\u4e24\u4e2a\u5c42\u9762\u6765\u56de\u7b54\uff1a\\r\\n\\r\\n- \u5916\u5728\u5c42\u9762\\r\\n- \u5185\u5728\u5c42\u9762\\r\\n\\r\\n**\u5916\u5728\u5c42\u9762** \u662f\u6307\u5728\u7f16\u7a0b\u8bed\u8a00\u548c\u4f20\u7edf\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u4e4b\u5916\u7684\u9700\u6c42\uff0c\u8fd9\u90e8\u5206\u4e5f\u662f\u66f4\u591a\u5bf9\u5e9440%\u7684\u5185\u5bb9\u4e2d\u4e3a\u4ec0\u4e48\u8981\u8fd9\u4e48\u8bbe\u8ba1\u7684\u95ee\u9898\u3002\u8fc7\u53bb\u51e0\u5341\u5e74\u6765\u5e94\u7528\u6784\u9020\u7684\u4f53\u7cfb\u57fa\u672c\u4e0a\u90fd\u662f\u56f4\u7ed5\u6784\u5efa\u4e00\u4e2a\u5355\u4e00\u7684\u7a0b\u5e8f\u4f53\u88ab\u9694\u79bb\u5728\u5355\u4e00\u7684\u5185\u5b58\u4e2d\u8fd0\u884c\u7684\uff0c\u5728\u8fd9\u79cd\u80cc\u666f\u4e0b\uff0c\u8f6f\u4ef6\u4e4b\u95f4\u7684\u529f\u80fd\u901a\u5e38\u90fd\u662f\u76f8\u4e92\u9694\u79bb\u7684\uff0c\u751a\u81f3\u5373\u4f7f\u662f\u5c5e\u4e8e\u540c\u4e00\u4e2a\u7528\u6237\u4e0d\u540c\u5e94\u7528\u4e4b\u95f4\u7684\u6570\u636e\uff0c\u867d\u7136\u770b\u8d77\u6765\u90fd\u662f\u540c\u4e00\u4e2a\u7528\u6237\u7684\u6570\u636e\uff0c\u4f46\u662f\u4e0d\u540c\u7684\u8f6f\u4ef6\u4e4b\u95f4\u5374\u65e0\u6cd5\u8bbf\u95ee\u3002\u8fd9\u79cd\u673a\u5236\u5728\u8fc7\u53bb\u51e0\u5341\u5e74\u90fd\u80fd\u591f\u5f88\u597d\u5730\u89e3\u51b3\u6211\u4eec\u7684\u6570\u5b57\u5316\u7684\u95ee\u9898\uff0c\u76f4\u5230Web 3.0\u548c\u5143\u5b87\u5b99\u7684\u51fa\u73b0\uff0c\u8fd9\u4e24\u79cd\u65b0\u7684\u5e94\u7528\u5f62\u6001\u4f3c\u4e4e\u90fd\u5728\u5c1d\u8bd5\u6784\u5efa\u4e00\u4e2a\u5171\u4eab\u3001\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c\u3002\u8fd9\u8981\u6c42\u5e94\u7528\u4e4b\u95f4\u9700\u8981\u9ad8\u5ea6\u4ea4\u4e92\u80fd\u529b\uff0c\u7136\u800c\u8fd9\u79cd\u9700\u6c42\u548c\u4f20\u7edf\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u662f\u5929\u751f\u76f8\u6096\u7684\uff0c\u4f20\u7edf\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u5efa\u7acb\u5185\u5b58\u9694\u79bb\u7684\u76ee\u7684\u5c31\u662f\u4fdd\u62a4\u6570\u636e\u548c\u5185\u5b58\u4e2d\u6570\u636e\u7684\u5b89\u5168\uff0c\u5b83\u7684\u4e00\u4e2a\u57fa\u672c\u7684\u5b89\u5168\u5e95\u5ea7\u5c31\u662f\u7cfb\u7edf\u7684\u5185\u5b58\u73af\u5883\u4f1a\u4fdd\u62a4\u7a0b\u5e8f\u5185\u6240\u6709\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u5c31\u6ca1\u6709\u592a\u591a\u4e13\u95e8\u9488\u5bf9\u8fd9\u4e9b\u6570\u636e\u7684\u4fdd\u62a4\u63aa\u65bd\uff0c\u4f46\u662f\u5f53\u6211\u4eec\u53bb\u6389\u8fd9\u4e2a\u5185\u5b58\u4fdd\u62a4\uff0c\u8981\u6c42\u5f88\u591a\u533f\u540d\u7684\u8f6f\u4ef6\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u8fdb\u884c\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u8fd9\u79cd\u5b89\u5168\u6027\u600e\u4e48\u4fdd\u8bc1\u3002\u867d\u7136Web Assembly\u548c\u4e00\u4e9b\u5bb9\u5668\u7b49\u6c99\u76d2\u6280\u672f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u89e3\u51b3\u65b9\u6848\uff0c\u4f46\u662f\u6c99\u76d2\u6280\u672f\u672c\u8eab\u66f4\u591a\u662f\u4e3a\u865a\u62df\u5316\u800c\u8bbe\u8ba1\uff0c\u5b83\u7684\u4e3b\u8981\u65b9\u6cd5\u4e5f\u662f\u5efa\u7acb\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u4fdd\u62a4\u673a\u5236\u3002\\r\\n\\r\\n\u56e0\u6b64\uff0c\u672c\u8d28\u4e0a\u9488\u5bf9\u8fd9\u79cd\u65b0\u7684\u9700\u6c42\uff0c\u6211\u4eec\u8981\u91cd\u65b0\u601d\u8003\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u672c\u8eab\u3002\u800c\u8981\u5f00\u53d1\u4e00\u79cd\u65b0\u7684\u601d\u8def\uff0c\u6211\u4eec\u5c31\u5fc5\u987b\u8981\u5f88\u597d\u5730\u7406\u89e3\u73b0\u6709\u5404\u79cd\u6280\u672f\u7684\u539f\u7406\u53ca\u5176\u95ee\u9898\uff0c\u8fd9\u91cc\u6d89\u53ca\u7684\u6280\u672f\u70b9\u6bd4\u5982\u7f16\u8bd1\u5668\u7684\u5bfb\u5740\u8ba1\u7b97\uff0c\u5185\u5b58\u673a\u5236\uff0c\u6c99\u76d2\u6280\u672f\uff0cUSD/LLVM/MLIR\u7b49\u4e00\u4e9b\u5177\u6709\u4e92\u64cd\u4f5c\u548c\u6a21\u5757\u5316\u80fd\u529b\u7684\u6280\u672f\u601d\u60f3\uff0c\u865a\u62df\u673a\u7684\u4f5c\u7528\uff0c\u533a\u5757\u94fe\u4e2d\u4e92\u64cd\u4f5c\u6027\u67b6\u6784\u7684\u4e00\u4e9b\u601d\u60f3\u3002\\r\\n\\r\\n\u9664\u4e86\u5916\u5728\u7684\u9700\u6c42\u548c\u9a71\u52a8\uff0c\u73b0\u6709\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u5728 **\u5185\u5728\u5c42\u9762** \u4e5f\u5b58\u5728\u5f88\u591a\u95ee\u9898\u3002\u4e00\u4e2a\u73b0\u5b9e\u7684\u95ee\u9898\u662f\u7f16\u7a0b\u4ecd\u7136\u662f\u4e00\u4efd\u95e8\u69db\u975e\u5e38\u9ad8\u7684\u5de5\u4f5c\uff0c\u5168\u4e16\u754c\u4f1a\u7f16\u7a0b\u7684\u4eba\u4e0d\u8db30.5%\uff0c\u6240\u4ee5\u8bf4\u6211\u4eec\u4eca\u5929\u7684\u6570\u5b57\u5316\u7684\u7a0b\u5ea6\u662f\u8fdc\u8fdc\u4e0d\u591f\u7684\uff0c\u56e0\u4e3a\u5269\u4e0b\u90a3\u4e48\u591a\u7fa4\u4f53\u80fd\u5e26\u6765\u591a\u5c11\u53ef\u80fd\u6027\u662f\u4e0d\u53ef\u4f30\u91cf\u7684\u3002\u5c3d\u7ba1\u73b0\u5728\u6709\u5927\u6a21\u578b\u8fd9\u79cd\u63d0\u5347\u7f16\u7a0b\u6548\u7387\u7684\u6280\u672f\u548c\u65b9\u6cd5\uff0c\u4f46\u662f\u5728\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\u672c\u8eab\u6ca1\u6709\u53d8\u5f97\u66f4\u7b80\u5355\u4e4b\u524d\uff0c\u4e5f\u5f88\u96be\u89e3\u51b3\u5b9e\u8d28\u6027\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u8f6f\u4ef6\u5f00\u53d1\u662f\u7531\u4eba\u53bb\u8868\u8fbe\u4eba\u7c7b\u7406\u89e3\u7684\u903b\u8f91\u6d41\u7a0b\uff0c\u7136\u800c\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u7684\u6838\u5fc3\u62bd\u8c61\u90fd\u8fd8\u662f\u9762\u5411\u786c\u4ef6\u548c\u7f16\u8bd1\u5668\u7684\uff0c\u6211\u4e0d\u662f\u8bf4\u7f16\u7a0b\u8bed\u8a00\u4e00\u5b9a\u8981\u662f\u81ea\u7136\u8bed\u8a00\uff0c\u4f46\u662f\u4f20\u7edf\u7684\u7f16\u7a0b\u8bed\u8a00\u4e2d\u6709\u5f88\u591a\u7684\u6982\u5ff5\u548c\u89c4\u5219\u90fd\u662f\u9762\u5411\u8ba1\u7b97\u673a\u7684\u3002\\r\\n\\r\\n\u9996\u5148\uff0c\u6bd4\u5982\u7a0b\u5e8f\u7684\u6570\u636e\u7ba1\u7406\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4f60\u5fc5\u987b\u8981\u5b9a\u4e49\u6570\u636e\u88ab\u5b58\u653e\u5728\u54ea\u91cc\uff0c\u600e\u4e48\u521d\u59cb\u5316\uff0c\u4ec0\u4e48\u65f6\u5019\u5220\u9664\uff0c\u5f53\u4f60\u9700\u8981\u6267\u884c\u67d0\u4e2a\u5177\u4f53\u903b\u8f91\u7684\u65f6\u5019\uff0c\u5f80\u5f80\u9700\u8981\u641c\u96c6\u5404\u79cd\u4e0a\u4e0b\u6587\u4ee5\u8ba1\u7b97\u6761\u4ef6\uff0c\u8fd9\u4e9b\u6570\u636e\u5145\u65a5\u5728\u5404\u79cd\u7ed3\u6784\u5404\u79cd\u5bf9\u8c61\u4e2d\u4f7f\u7528\u5404\u79cd\u4e0d\u540c\u7684\u65b9\u6cd5\u8fdb\u884c\u5c01\u88c5\u3002\u6211\u4eec\u7f16\u7a0b\u5f88\u591a\u65f6\u95f4\u5c31\u662f\u5728\u7ec4\u7ec7\u8fd9\u79cd\u6570\u636e\uff0c\u51b3\u5b9a\u4ed6\u4eec\u88ab\u600e\u6837\u6784\u9020\u3001\u521d\u59cb\u5316\u548c\u5b58\u653e\u624d\u80fd\u4f7f\u5f97\u83b7\u53d6\u5b83\u4eec\u53d8\u5f97\u66f4\u7b80\u5355\u800c\u7075\u6d3b\uff0c\u800c\u4e14\u8fd9\u79cd\u7ed3\u6784\u4e5f\u590d\u6742\u5f80\u5f80\u8d8a\u6df7\u4e71\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u8fd8\u5bf9\u5e94\u7740\u590d\u6742\u7684\u8fd0\u884c\u65f6\u72b6\u6001\uff0c\u8fd9\u6837\u903b\u8f91\u7684\u6267\u884c\u5c31\u4e0d\u5149\u53d6\u51b3\u4e8e\u6570\u636e\uff0c\u8be5\u53d6\u51b3\u4e8e\u6267\u884c\u65f6\u5b83\u4eec\u7684\u72b6\u6001\uff0c\u8fd9\u6837\u4f60\u5c31\u4e0d\u5f97\u4e0d\u5f88\u597d\u5730\u7ef4\u62a4\u5b83\u4eec\u6b63\u786e\u7684\u72b6\u6001\u3002\\r\\n\\r\\n\u5f53\u4e00\u4e2a\u7a0b\u5e8f\u5458\u5728\u601d\u8defTA\u4ee3\u7801\u4e2d\u7684\u903b\u8f91\u8ddfTA\u601d\u8003\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u67d0\u4e2a\u4e8b\u60c5\u65f6\u601d\u8def\u662f\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\uff0c\u5728\u73b0\u5b9e\u4e2d\u6211\u4eec\u5f80\u5f80\u5f88\u5c11\u5173\u6ce8\u4e00\u4e2a\u4e1c\u897f\u7684\u4f4d\u7f6e\u6211\u8981\u628a\u5b83\u653e\u5728\u54ea\u91cc\uff0c\u6211\u53bb\u8bbf\u95ee\u7684\u65f6\u5019\u5b83\u4eec\u7684\u7ec4\u5408\u72b6\u6001\u5bf9\u4e0d\u5bf9\u7b49\uff0c\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u4e00\u5207\u4f3c\u4e4e\u90fd\u662f\u90a3\u4e48\u81ea\u7136\uff0c\u6211\u4eec\u7684\u7cbe\u529b\u90fd\u5728\u5173\u6ce8\u4e8b\u60c5\u7684\u903b\u8f91\u672c\u8eab\u3002\\r\\n\\r\\n\u5176\u6b21\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ec4\u7ec7\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u6211\u4eec\u4eba\u601d\u8def\u73b0\u5b9e\u4e16\u754c\u4e2d\u7684\u95ee\u9898\u901a\u5e38\u662f\u7ebf\u6027\u7684\uff0c\u5148\u505a\u4ec0\u4e48\u518d\u505a\u4ec0\u4e48\uff0c\u6211\u4eec\u5f80\u5f80\u4efb\u610f\u7528\u6d41\u7a0b\u56fe\u628a\u5b83\u753b\u51fa\u6765\uff0c\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4ea4\u6d41\u4e5f\u975e\u5e38\u7b80\u5355\u3002\u7a0b\u5e8f\u7684\u6d41\u7a0b\u5219\u901a\u5e38\u5f88\u96be\u53ef\u89c6\u5316\uff0c\u56e0\u4e3a\u5b83\u7684\u8868\u8fbe\u4e0d\u662f\u7ebf\u6027\u7684\uff0c\u6574\u4e2a\u6d41\u7a0b\u6709\u70b9\u50cf\u4e00\u4e2a\u6df1\u5ea6\u4f18\u5148\u7684\u904d\u5386\u7b97\u6cd5\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u5f00\u59cb\u7684\u8282\u70b9\uff0c\u5b83\u5fc5\u987b\u8fdb\u5165\u6bcf\u4e2a\u51fd\u6570\u7684\u8c03\u7528\u94fe\uff0c\u76f4\u5230\u6240\u6709\u7684\u5b50\u51fd\u6570\u8c03\u7528\u90fd\u7ed3\u675f\u624d\u4f1a\u8fd4\u56de\u6765\u6267\u884c\u4e0b\u4e00\u6b65\u3002\u5c31\u50cf\u6211\u4eec\u4eba\u60f3\u4e8b\u60c5\u662f\u5148\u628a\u603b\u4f53\u6d41\u7a0b\u6b65\u9aa4\u60f3\u597d\uff0c\u518d\u53bb\u89e3\u51b3\u5177\u4f53\u4e00\u4e2a\u4e2a\u7ec6\u8282\u95ee\u9898\uff0c\u8ba1\u7b97\u673a\u7a0b\u5e8f\u662f\u6bcf\u505a\u4e00\u4ef6\u4e8b\u60c5\u90fd\u9700\u8981\u628a\u5b83\u7684\u7ec6\u8282\u5168\u90e8\u505a\u5b8c\uff0c\u7136\u540e\u5f00\u59cb\u4e0b\u4e00\u4ef6\u4e8b\u60c5\u3002\u4f60\u53ef\u4ee5\u8bf4\u6bcf\u4e2a\u51fd\u6570\u5185\u90e8\u5728\u4e0d\u53bb\u770b\u7cfb\u51fd\u6570\u7684\u65f6\u5019\u4e5f\u662f\u7ebf\u6027\u7684\u6d41\u7a0b\uff0c\u4f46\u662f\u4f60\u5f88\u96be\u8fdb\u884c\u53ef\u89c6\u5316\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u51fd\u6570\u5185\u90e8\u7684\u7ec6\u8282\uff0c\u5b83\u4eec\u6ca1\u6709\u4e00\u4e9b\u89c4\u8303\uff0c\u51fd\u6570\u7684\u8f93\u5165\u8f93\u51fa\u53c2\u6570\u5b9a\u4e49\u4e5f\u4e0d\u4e00\u6837\u3002\u66f4\u8981\u547d\u7684\u662f\uff0c\u4f60\u65e0\u6cd5\u5f88\u8f7b\u6613\u5730\u5bf9\u6d41\u7a0b\u8fdb\u884c\u8c03\u8bd5\uff0c\u6bd4\u5982\u60f3\u8df3\u8fc7\u3001\u65b0\u589e\u6216\u8005\u8c03\u6574\u67d0\u4e9b\u6d41\u7a0b\uff0c\u8fd9\u53ef\u80fd\u9700\u8981\u53bb\u4fee\u6539\u6e90\u4ee3\u7801\uff0c\u800c\u6e90\u4ee3\u7801\u901a\u5e38\u4e0d\u662f\u6ce8\u91ca\u90a3\u4e48\u7b80\u5355\uff0c\u56e0\u4e3a\u6709\u4e9b\u6d41\u7a0b\u53ef\u80fd\u4ea7\u751f\u5173\u8054\u6570\u636e\u5bfc\u81f4\u540e\u9762\u7684\u6d41\u7a0b\u6839\u672c\u5c31\u65e0\u6cd5\u6267\u884c\u3002\\r\\n\\r\\n\u6211\u628a\u8fd9\u4e2a\u95ee\u9898\u79f0\u4e3a\u7a0b\u5e8f\u7ed3\u6784\u7684\u95ee\u9898\uff0c\u53ef\u89c1\u6211\u4eec\u4ecd\u7136\u65e0\u6cd5\u7528\u6bd4\u8f83\u7b26\u5408\u76f4\u89c9\u7684\u65b9\u6cd5\u53bb\u6784\u5efa\u903b\u8f91\u6d41\u7a0b\u3002\\r\\n\\r\\n\u6240\u4ee5\u6211\u8ba4\u4e3a\uff0c\u7f16\u7a0b\u8fd9\u4e2a\u4e8b\u60c5\u7684\u95e8\u69db\uff0c\u5176\u5b9e\u5f88\u5927\u7a0b\u5ea6\u4e0a\u5e76\u4e0d\u662f\u6765\u6e90\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u800c\u662f\u5728\u4e0e\u7a0b\u5e8f\u7684\u7ed3\u6784\u7ec4\u7ec7\u548c\u6570\u636e\u7ba1\u7406\u3002\u8fd9\u4e24\u4e2a\u5c42\u9762\u5176\u5b9e\u90fd\u662f\u548c\u7f16\u8bd1\u5668\u548c\u786c\u4ef6\u6709\u5173\uff0c\u6b63\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u9700\u8981\u6309\u7167\u8fd9\u6837\u7684\u65b9\u5f0f\u7f16\u8bd1\u4e3a\u786c\u4ef6\u53ef\u4ee5\u6267\u884c\u7684\u7a0b\u5e8f\uff0c\u6240\u4ee5\u7f16\u7a0b\u8bed\u8a00\u624d\u662f\u8fd9\u4e48\u8bbe\u8ba1\u3002\\r\\n\\r\\n**\u7ed3\u5408\u4e0a\u8ff0\u5916\u5728\u548c\u5185\u5728\u7684\u95ee\u9898\uff0cReality World\u7684\u76ee\u6807\u5c31\u662f\uff0c\u901a\u8fc7\u6df1\u5165\u5206\u6790\u7a0b\u5e8f\u6784\u5efa\u548c\u6267\u884c\u7684\u6574\u4e2a\u8fc7\u7a0b\uff0c\u80fd\u4e0d\u80fd\u8bbe\u8ba1\u51fa\u4e00\u79cd\u65b0\u7684\u65b9\u6cd5\u6d41\u7a0b\u53ef\u4ee5\u540c\u65f6\u89e3\u51b3\u8fd9\u4e24\u4e2a\u95ee\u9898\u3002\u8fd9\u5c31\u662f\u6211\u4eec\u8fd9\u6b21\u6280\u672f\u5206\u4eab\u4f1a\u7684\u91cd\u70b9\u5185\u5bb9**\u3002\\r\\n\\r\\n## \u9762\u5411\u7684\u53d7\u4f17\u7fa4\u4f53\u662f\u8c01\uff1f\\r\\n\\r\\n\u672c\u6b21\u6d3b\u52a8\u4e3b\u8981\u9762\u5411\u4e24\u7c7b\u4eba\u7fa4\uff1a\\r\\n\\r\\n- \u5e0c\u671b\u6df1\u5165\u4e86\u89e3\u76f8\u5173\u6280\u672f\u7684\u5f00\u53d1\u4eba\u5458\\r\\n- \u5e0c\u671b\u901a\u8fc7\u6df1\u5165\u4e86\u89e3\u4e00\u4e9b\u6280\u672f\u7684\u601d\u8def\u6765\u66f4\u597d\u5730\u7406\u89e3\u4e00\u4e9b\u65b0\u7684\u6280\u672f\u6982\u5ff5\u7684\u975e\u6280\u672f\u4eba\u5458\\r\\n\\r\\n\u5bf9\u4e8e\u6280\u672f\u4eba\u5458\uff0c\u5982\u679c\u4f60\u5173\u6ce8\u4ee5\u4e0b\u6280\u672f\uff0c\u4f60\u53ef\u4ee5\u6765\u542c\u542c\u6211\u7684\u7406\u89e3\uff1a\\r\\n\\r\\n- \u6e38\u620f\u5f15\u64ce\u67b6\u6784\\r\\n- ECS/DOTS\\r\\n- USD\\r\\n- LLVM/MLIR\\r\\n- Rust\\r\\n- Web Assembly\\r\\n- \u7f16\u8bd1\u3001\u89e3\u91ca\u3001\u94fe\u63a5\u8fc7\u7a0b\\r\\n- \u9762\u5411\u5bf9\u8c61\\r\\n- \u51fd\u6570\u5f0f\u7f16\u7a0b\\r\\n- LLM\u5e94\u7528\\r\\n- \u5143\u5b87\u5b99\u53ca\u4e92\u64cd\u4f5c\u6027\\r\\n- \u5f00\u653e\u4e16\u754c\u548c\u590d\u6742\u7cfb\u7edf\u67b6\u6784\\r\\n\\r\\n\u5bf9\u4e8e\u975e\u6280\u672f\u4eba\u5458\uff0c\u53ef\u4ee5\u5e2e\u52a9\u4f60\u66f4\u597d\u7684\u7406\u89e3\u4ee5\u4e0b\u6280\u672f\u6982\u5ff5\uff1a\\r\\n\\r\\n- \u5143\u5b87\u5b99\\r\\n- \u5927\u6a21\u578b\u5e94\u7528\u67b6\u6784\\r\\n\\r\\n## \u5f00\u6e90\u7684\u76ee\u7684\u662f\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u6211\u5e0c\u671bReality World\u7684\u5f00\u6e90\u53ef\u4ee5\u5b9e\u73b0\u4ee5\u4e0b\u51e0\u4e2a\u76ee\u7684\uff1a\\r\\n\\r\\n- **\u4e3a\u672a\u67655-10\u5e74\u7684\u6570\u5b57\u4e16\u754c\u57fa\u7840\u67b6\u6784\u7684\u6280\u672f\u53d1\u5c55\u65b9\u5411\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u7684\u89c6\u89d2**\uff0c\u8fd9\u4e2a\u95ee\u9898\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u4e0d\u5149\u662f\u6280\u672f\u672c\u8eab\u5c31\u5145\u6ee1\u590d\u6742\u6027\uff0c\u8981\u8003\u8651\u5f88\u591a\u95ee\u9898\uff0c\u540c\u65f6\u5728\u8ba4\u77e5\u4e0a\u53bb\u7406\u89e3\u4e5f\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u6784\u5efa\u4e00\u5957\u6e05\u6670\u7684\u89c6\u89d2\u53bb\u7406\u89e3\u8fd9\u4e9b\u95ee\u9898\uff0c\u4e3a\u540e\u7eed\u7684\u7814\u7a76\u63d0\u4f9b\u4e00\u4e9b\u6709\u4ef7\u503c\u7684\u53c2\u8003\u601d\u8def\u3002\\r\\n- **\u4e3a\u4e0a\u8ff0\u7684\u67b6\u6784\u4f53\u7cfb\u63d0\u4f9b\u4e00\u79cd\u53ef\u884c\u4e14\u7b80\u6613\u7684\u6280\u672f\u5b9e\u73b0\u65b9\u6848**\uff0c\u63d0\u51fa\u4e00\u79cd\u60f3\u6cd5\u6709\u65f6\u5019\u770b\u8d77\u6765\u5f88\u5bb9\u6613\uff0c\u4f8b\u5982\u5f88\u591a\u79d1\u6280\u5a92\u4f53\u4e5f\u63d0\u51fa\u8bb8\u591a\u5bf9\u4e8e\u672a\u6765\u8f6f\u4ef6\u5e94\u7528\u7684\u7545\u60f3\u3002\u4f46\u4e00\u5957\u53ef\u884c\u7684\u6280\u672f\u65b9\u6848\u6d89\u53ca\u5f88\u591a\u7ec6\u8282\uff0c\u4f8b\u5982\u4f60\u5bf9\u73b0\u6709\u6280\u672f\u4f53\u7cfb\u8fdb\u884c\u600e\u6837\u7684\u8c03\u6574\uff0c\u7406\u7531\u548c\u5fc5\u8981\u6027\u662f\u4ec0\u4e48\uff0c\u8c03\u6574\u4e4b\u540e\u5bf9\u5176\u5b83\u6a21\u5757\u7684\u4ea4\u4e92\u65b9\u5f0f\u662f\u600e\u6837\uff0c\u8c03\u6574\u4e4b\u540e\u600e\u6837\u5efa\u7acb\u65b0\u7684\u751f\u6001\uff0c\u7528\u6237\u600e\u6837\u53bb\u5b66\u4e60\u7b49\u7b49\uff0c\u8fd9\u4e00\u5207\u540e\u9762\u6d89\u53ca\u975e\u5e38\u590d\u6742\u7684\u67b6\u6784\u601d\u8003\u3002\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u6709\u4e00\u4e2a\u53ef\u884c\u7684\u6280\u672f\u5b9e\u73b0\u65b9\u6848\uff0c\u624d\u80fd\u8bf4\u660e\u5b83\u7684\u53ef\u884c\u6027\uff0c\u56e0\u6b64\u624d\u5177\u6709\u53c2\u8003\u4ef7\u503c\u3002\\r\\n- **\u4e3a\u7a0b\u5e8f\u5458\u5bf9\u6280\u672f\u7684\u5b66\u4e60\u63d0\u4f9b\u4e00\u4e9b\u4e0d\u540c\u7ef4\u5ea6\u7684\u7406\u89e3**\uff0c\u6211\u4eec\u7a0b\u5e8f\u5458\u7ec8\u6781\u4e00\u751f\u7684\u52aa\u529b\u53ef\u80fd\u90fd\u662f\u5c1d\u8bd5\u53bb\u66f4\u597d\u5730\u7406\u89e3\u8f6f\u4ef6\u6784\u5efa\u7684\u903b\u8f91\u601d\u7ef4\uff0c\u56e0\u4e3a\u8f6f\u4ef6\u7684\u903b\u8f91\u8868\u8fbe\u662f\u6781\u5ea6\u590d\u6742\u7684\uff0c\u8fd9\u79cd\u590d\u6742\u6027\u968f\u7740\u8f6f\u4ef6\u89c4\u6a21\u7684\u589e\u5927\u800c\u6025\u5267\u4e0a\u5347\u3002\u7a0b\u5e8f\u5458\u5e94\u5bf9\u8fd9\u79cd\u6311\u6218\u7684\u6700\u597d\u65b9\u6cd5\uff0c\u5c31\u662f\u5c3d\u53ef\u80fd\u53bb\u66f4\u597d\u5730\u7406\u89e3\u8f6f\u4ef6\u6784\u9020\u7684\u903b\u8f91\u3002\u8fd9\u79cd\u903b\u8f91\u53ef\u80fd\u8d85\u51fa\u5bf9\u4e00\u4e2a\u6280\u672f\u672c\u8eab\u4f5c\u4e3a\u5de5\u5177\u5c5e\u6027\u7684\u638c\u63e1\uff0c\u66f4\u8981\u7406\u89e3\u8fd9\u4e9b\u6280\u672f\u80cc\u540e\u7684\u601d\u60f3\uff0c\u6211\u8ba4\u4e3a\u638c\u63e1\u6280\u672f\u601d\u60f3\u7684\u8861\u91cf\u65b9\u5f0f\u5c31\u662f\u4f60\u6709\u53ef\u80fd\u628a\u5b83\u7528\u4e8e\u8d85\u51fa\u5b83\u672c\u8eab\u88ab\u5b9a\u4e49\u7528\u6765\u89e3\u51b3\u95ee\u9898\u7684\u8303\u56f4\uff0cReality World\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u8fc7\u7a0b\u5145\u6ee1\u7740\u5927\u91cf\u7684\u8fd9\u7c7b\u5bf9\u6280\u672f\u7684\u4e0d\u540c\u89e3\u8bfb\uff0c\u76f8\u4fe1\u80fd\u591f\u63d0\u4f9b\u5f88\u591a\u4e0d\u540c\u7684\u542f\u793a\u4ece\u800c\u52a9\u529b\u6211\u4eec\u638c\u63e1\u6280\u672f\u80cc\u540e\u7684\u601d\u60f3\u3002\\r\\n- **\u501f\u52a9\u793e\u533a\u7684\u529b\u91cf\u53bb\u6316\u6398\u8fd9\u79cd\u65b0\u578b\u6280\u672f\u67b6\u6784\u80fd\u591f\u652f\u6491\u7684\u4ea7\u54c1\u5f62\u6001**\uff0c\u6700\u8fd1\u51e0\u5e74\u5173\u4e8eWeb 3.0\u3001\u5143\u5b87\u5b99\u3001\u4ee5\u53ca\u5927\u6a21\u578bAI\u5e94\u7528\u7684\u6301\u7eed\u4e0d\u65ad\u51fa\u73b0\uff0c\u4eba\u4eec\u5bf9\u672a\u6765\u6570\u5b57\u5316\u7684\u9884\u671f\u4f1a\u8d8a\u6765\u8d8a\u5927\uff0c\u672a\u6765\u7684\u6570\u5b57\u5316\u5f62\u6001\u5fc5\u7136\u4f1a\u53d1\u751f\u4e00\u4e9b\u53d8\u5316\u3002\u4f46\u662f\u76ee\u524d\u5f88\u591a\u56e0\u7d20\u7cc5\u5408\u5728\u4e00\u8d77\u4f7f\u5f97\u6211\u4eec\u5f88\u96be\u53bb\u770b\u5230\u6e05\u695a\u7684\u8def\u5f84\uff0c\u8fd9\u91cc\u9762\u5fc5\u7136\u6d89\u53ca\u5230\u5e95\u5c42\u6280\u672f\u4ee5\u53ca\u4e0a\u5c42\u4ea7\u54c1\u5f62\u6001\u7684\u76f8\u4e92\u9a71\u52a8\u53ca\u8fdb\u5316\uff0c\u4efb\u4f55\u5355\u4e00\u5b9e\u4f53\u53ef\u80fd\u90fd\u5f88\u96be\u4ece\u8fd9\u79cd\u8026\u5408\u4e2d\u770b\u5230\u6e05\u6670\u7684\u903b\u8f91\u3002\u6240\u4ee5Reality World\u805a\u7126\u4e8e\u6280\u672f\u7684\u601d\u8003\uff0c\u5e76\u5c06\u8fd9\u4e9b\u601d\u8003\u5168\u90e8\u5f00\u6e90\uff0c\u7136\u540e\u4e0d\u540c\u7684\u884c\u4e1a\u53ef\u4ee5\u5438\u53d6\u8fd9\u79cd\u601d\u8003\u53bb\u878d\u5165\u81ea\u5df1\u7684\u4ea7\u54c1\u601d\u7ef4\uff0c\u8fd9\u6837\u4e5f\u8bb8\u6211\u4eec\u53ef\u4ee5\u5171\u540c\u6765\u7406\u6e05\u672a\u6765\u7684\u601d\u8def\u3002\\r\\n\\r\\n### License\\r\\n\\r\\nReality World\u6240\u6709\u7684\u6e90\u4ee3\u7801\u53ca\u5176\u6280\u672f\u67b6\u6784\u601d\u8def\u5747\u91c7\u7528\u975e\u5e38\u5bbd\u677e\u7684MIT\u5f00\u6e90\u534f\u8bae\uff1a\\r\\n\\r\\n- [MIT license](http://opensource.org/licenses/MIT)\\r\\n\\r\\n## \u5f00\u6e90\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u57fa\u672c\u4e0a\uff0cReality World\u76f8\u5173\u7684\u6240\u6709\u4e00\u5207\u90fd\u4f1a\u5f00\u6e90\uff0c\u5305\u62ec\uff1a\\r\\n\\r\\n- \u6838\u5fc3\u4ee3\u7801\\r\\n- \u6574\u7406\u624b\u7a3f\uff1a\u5927\u698220\u591a\u4e07\u5b57\u6211\u6574\u6574\u4e00\u5e74\u8bb0\u5f55\u7684\u4e00\u4e9b\u601d\u8003\u3001\u53c2\u8003\u4fe1\u606f\u548c\u8d44\u6599\\r\\n- \u67b6\u6784\u6587\u6863\uff1a\u91cd\u65b0\u6574\u7406\u7684\u7cfb\u7edf\u6027\u7684\u6280\u672f\u6587\u6863\uff0c\u5927\u698210\u591a\u4e07\u5b57\\r\\n- \u767d\u76ae\u4e66\\r\\n\\r\\n### \u5f00\u6e90\u4fe1\u606f\\r\\n\\r\\n\u6d3b\u52a8\u7ed3\u675f\u540e\u5c06\u4f1a\u4e0a\u4f20\u4ee3\u7801\uff0c\u4ed3\u5e93\u5730\u5740\uff1a\\r\\n\\r\\nhttps://github.com/Cogine/RealityWorld\\r\\n\\r\\n### \u5f00\u6e90\u793e\u533a\u7fa4\\r\\n\\r\\n\u7531\u4e8e\u4eba\u6570\u95ee\u9898\u4ee5\u53ca\u5e7f\u544a\u592a\u591a\uff0c\u8bf7\u5148\u52a0\u6211\u5fae\u4fe1\u518d\u793e\u533a\u7fa4\uff1aARealityWorld\\r\\n\\r\\n## \u6d3b\u52a8\u4fe1\u606f\\r\\n\\r\\n**\u65f6\u95f4**\uff1a2023.10.22\\r\\n\\r\\n**\u5730\u70b9\uff1a**\u4e0a\u6d77\u5e02\u957f\u5b81\u533a\u957f\u5b81\u8def1189\u53f7 \u957f\u5b81\u6765\u798f\u58eb\u529e\u516c\u697cT2\u5ea726\u697c \u4e9a\u9a6c\u900a\u6f14\u64ad\u5385\\r\\n\\r\\n| \u65f6\u95f4 | \u5185\u5bb9 |\\r\\n| :----- | ---- |\\r\\n| 13: 20 | \u7b7e\u5230 |\\r\\n| 14: 00 | \u6280\u672f\u5206\u4eab |\\r\\n| 17: 00 | \u5f00\u653e\u8ba8\u8bba |\\r\\n| 18: 00 | \u6d3b\u52a8\u7ed3\u675f |\\r\\n\\r\\n## \u8054\u7cfb\u6211\\r\\n\\r\\n\u5206\u4eab\u8005\uff1a\u79e6\u6625\u6797\\r\\n\\r\\nReality World \u521b\u59cb\u4eba\uff0c\u524d\u534e\u4e3a\u6cb3\u56fe\u6838\u5fc3\u6210\u5458\uff0c[\u300a\u5168\u5c40\u5149\u7167\u6280\u672f\u300b](https://github.com/ElvisQin/thegibook)\u300a\u6211\u6240\u7406\u89e3\u7684Cocos2d-x\u300b\u4f5c\u8005\u3002\\r\\n\\r\\n\u81ea\u53bb\u5e74\u4ece\u534e\u4e3a\u79bb\u804c\u72ec\u81ea\u521b\u4e1a\u63a2\u7d22\u4e00\u5e74\u534a\uff0c\u81f4\u529b\u4e8e\u601d\u8003\u548c\u63a2\u7d22\u80fd\u591f\u4e3a\u7528\u6237\u4f53\u9a8c\u548c\u751f\u6d3b\u5e26\u6765\u5168\u65b0\u4ef7\u503c\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u73b0\u5c06\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u6beb\u65e0\u4fdd\u7559\u5f00\u6e90\u7ed9\u793e\u533a\uff0c\u6211\u5c06\u75283\u4e2a\u5c0f\u65f6\u975e\u5e38\u7cfb\u7edf\u3001\u5168\u9762\u5730\u5206\u4eab\u6211\u6240\u6709\u7684\u601d\u8003\u548c\u6280\u672f\u7406\u89e3\u3002\\r\\n\\r\\n\u6b22\u8fce\u5404\u4f4d\u670b\u53cb\u4e0e\u6211\u4ea4\u6d41\u548c\u8ba8\u8bba\uff0c\u6211\u7684\u5fae\u4fe1\uff1aARealityWorld\u3002\\r\\n\\r\\n## \u5b98\u7f51\u5730\u5740\\r\\n\\r\\nhttps://realityworld.com/\\r\\n\\r\\n## \u62a5\u540d\u5730\u5740\\r\\n\\r\\nhttps://9371398676573.huodongxing.com/event/1723877940100"},{"id":"conversational-computing","metadata":{"permalink":"/zh/blog/conversational-computing","source":"@site/blog/2023-10-04-conversational-computing/index.md","title":"Conversational computing: a new programming model empower LLM applications","description":"Citation","date":"2023-10-04T00:00:00.000Z","formattedDate":"2023\u5e7410\u67084\u65e5","tags":[{"label":"Reality World","permalink":"/zh/blog/tags/reality-world"},{"label":"Cogine","permalink":"/zh/blog/tags/cogine"}],"readingTime":0.28,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"conversational-computing","title":"Conversational computing: a new programming model empower LLM applications","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World","Cogine"],"hide_table_of_contents":false},"prevItem":{"title":"Reality World \u5f00\u6e90\u6280\u672f\u5206\u4eab\u4f1a","permalink":"/zh/blog/reality-world-open-source-conference"},"nextItem":{"title":"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003","permalink":"/zh/blog/thinking"}},"content":"## Citation\\r\\n\\r\\nCited as:\\r\\n\\r\\n> Qin, Chunlin. (Oct 2023). Conversational computing: a new programming model empower LLM applications. Reality World. https://realityworld.com/blog/conversational-computing.\\r\\n\\r\\nOr\\r\\n\\r\\n```latex\\r\\n@article{qin2023conversational,\\r\\n title = \\"Conversational computing: a new programming model empower LLM applications\\",\\r\\n author = \\"Qin, Chunlin\\",\\r\\n journal = \\"Reality World\\",\\r\\n year = \\"2023\\",\\r\\n month = \\"Oct\\",\\r\\n url = \\"https://realityworld.com/blog/conversational-computing\\"\\r\\n}\\r\\n```\\r\\n\\r\\n## References"},{"id":"thinking","metadata":{"permalink":"/zh/blog/thinking","source":"@site/blog/2021-08-26-thinking/index.md","title":"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003","description":"\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002","date":"2021-08-26T00:00:00.000Z","formattedDate":"2021\u5e748\u670826\u65e5","tags":[{"label":"Reality World","permalink":"/zh/blog/tags/reality-world"}],"readingTime":79.295,"hasTruncateMarker":false,"authors":[{"name":"Chunlin Qin","title":"Creator of Reality World","url":"https://github.com/ElvisQin","imageURL":"https://github.com/ElvisQin.png"}],"frontMatter":{"slug":"thinking","title":"\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003","author":"Chunlin Qin","author_title":"Creator of Reality World","author_url":"https://github.com/ElvisQin","author_image_url":"https://github.com/ElvisQin.png","tags":["Reality World"],"hide_table_of_contents":false,"image":"/img/blog/2.jpg"},"prevItem":{"title":"Conversational computing: a new programming model empower LLM applications","permalink":"/zh/blog/conversational-computing"}},"content":"![](images\\\\2.jpg)\\r\\n\\r\\n\u7ecf\u8fc7\u6574\u6574\u4e00\u5e74\u7684\u7814\u7a76\u3001\u5b66\u4e60\u3001\u601d\u8003\u3001\u8bbe\u8ba1\u4e0e\u5f00\u53d1\uff0c\u7ec8\u4e8e\u5b8c\u6210\u4e86Reality Create v0.1.0\u7248\u672c\u7684\u5f00\u53d1\uff0c\u5b83\u5b9e\u73b0\u4e86Reality World\u6574\u4e2a\u8ba1\u5212\u4e2d\u6700\u6838\u5fc3\u7684\u8fd0\u884c\u65f6\u539f\u578b\uff0c\u4e5f\u540c\u65f6\u9a8c\u8bc1\u4e86\u6211\u8fd9\u4e00\u5e74\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u548c\u8f6f\u4ef6\u6784\u9020\u7684\u601d\u8003\u548c\u63a2\u7d22\u7684\u6700\u6838\u5fc3\u90e8\u5206\u3002\\r\\n\\r\\n\u53ef\u80fd\u6709\u4e00\u4e9b\u670b\u53cb\u5173\u6ce8\u8fc7\u6211\u8fd9\u4e00\u5e74\u4e00\u76f4\u5728\u6298\u817e\u7684Reality World\u521b\u4e1a\u7684\u4e8b\u60c5\uff0c\u7136\u800c\u5f88\u9057\u61be\u7684\u662f\u4e00\u76f4\u6ca1\u6709\u5206\u4eab\u592a\u591a\u5173\u4e8e\u5b83\u7684\u4fe1\u606f\u3002\u4e00\u6765\u662f\u56e0\u4e3a\u5b83\u6240\u6d89\u53ca\u7684\u6280\u672f\u6709\u6bd4\u8f83\u591a\u7684\u521b\u65b0\u5c1d\u8bd5\uff0c\u5728\u8fd8\u6ca1\u6709\u771f\u6b63\u7684\u6280\u672f\u5f00\u53d1\u5b9e\u8df5\u4e4b\u524d\u5bb9\u6613\u5f15\u8d77\u6bd4\u8f83\u591a\u7684\u4e89\u8bae\uff1b\u4e8c\u6765\u662f\u56e0\u4e3a\u53bb\u5e74\u5f97\u5230\u4e86\u4e00\u4e9b\u5927\u8d44\u672c\u6781\u5927\u7684\u5174\u8da3\uff0c\u56e0\u6b64\u6211\u60f3\u7740\u4e00\u9f13\u4f5c\u6c14\u7b49\u62ff\u5230\u6295\u8d44\u4e4b\u540e\u518d\u516c\u5e03\u4e00\u4e9b\u4fe1\u606f\u3002\u5f53\u7136\u56e0\u4e3a\u5404\u79cd\u539f\u56e0\u5230\u73b0\u5728\u4e5f\u8fd8\u6ca1\u6709\u8c08\u5b9a\u6295\u8d44\uff0c\u6240\u4ee5\u8fd1\u51e0\u4e2a\u6708\u6211\u5c31\u5c06\u5168\u90e8\u7cbe\u529b\u7528\u4e8e\u5f00\u53d1\u4e86\u3002\u7ecf\u8fc7\u51e0\u4e2a\u6708\u7684\u8270\u82e6\u594b\u6218\uff0c\u4eca\u5929\u7ec8\u4e8e\u6709\u673a\u4f1a\u53ef\u4ee5\u7ed9\u5927\u5bb6\u5206\u4eab\u4e00\u4e9b\u6211\u7684\u60f3\u6cd5\uff0c\u4ee5\u53ca\u8fd9\u4e00\u5e74\u7684\u63a2\u7d22\u8fc7\u7a0b\u3002\u5f53\u7136Reality World\u8fd8\u5904\u4e8e\u975e\u5e38\u65e9\u671f\u548c\u539f\u578b\u7684\u9636\u6bb5\uff0c\u6211\u9884\u8ba1\u8fd8\u4f1a\u518d\u8fed\u4ee3\u51e0\u4e2a\u7248\u672c\u5230v0.5.0\u5de6\u53f3\u624d\u4f1a\u5f00\u59cb\u6b63\u5f0f\u516c\u5e03\u6216\u8005\u5185\u6d4b\uff0c\u6240\u4ee5\u8fd9\u91cc\u6211\u4e5f\u4e0d\u4f1a\u6d89\u53ca\u592a\u591a\u6280\u672f\u7ec6\u8282\uff0c\u4f46\u662f\u6211\u53ef\u4ee5\u5206\u4eab\u6211\u4eec\u60f3\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff0c\u4ee5\u53ca\u4e3a\u4ec0\u4e48\u8981\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\uff0c\u5e76\u5927\u6982\u8bf4\u660e\u4e00\u4e9b\u601d\u8def\uff0c\u8fd9\u6837\u5927\u5bb6\u5e94\u8be5\u80fd\u591f\u521d\u6b65\u4e86\u89e3Reality World\u662f\u4ec0\u4e48\uff0c\u540c\u65f6\u6211\u89c9\u5f97\uff0c\u5bf9\u8fd9\u4e9b\u95ee\u9898\u7684\u601d\u8003\u5176\u5b9e\u662f\u975e\u5e38\u6709\u4ef7\u503c\u7684\u90e8\u5206\u3002\\r\\n\\r\\n## Reality World\u4e0d\u662f\u4ec0\u4e48\uff1f\\r\\n\\r\\n\u7531\u4e8e\u6211\u8fc7\u53bb\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\uff0c\u4ee5\u53caReality Create\u4e5f\u5305\u542b\u76843D\u652f\u6301\uff0c\u5728\u6211\u4e0e\u6295\u8d44\u4eba\u6216\u8005\u5176\u4ed6\u670b\u53cb\u4ea4\u6d41\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5927\u5bb6\u666e\u904d\u7684\u5370\u8c61\u662f\u8fd9\u662f\u4e00\u4e2a\u65b0\u7684\u6e38\u620f\u5f15\u64ce\uff0c\u6240\u4ee5\u5927\u5bb6\u7684\u601d\u8def\u5c31\u662f\u4f60\u8ddfUnity\uff0cUnreal Engine\u4ee5\u53ca\u751a\u81f3\u5305\u62ec\u56fd\u5185\u8fd1\u51e0\u5e74\u4e5f\u6709\u5f88\u591a\u6e38\u620f\u5f15\u64ce\u521b\u4e1a\u7684\u4e00\u4e9b\u533a\u522b\u6216\u8005\u8bf4\u7ade\u4e89\u5173\u7cfb\uff0c\u800c\u4f1a\u5ffd\u89c6\u6211\u4eec\u6280\u672f\u4e0a\u53cd\u800c\u662f\u66f4\u52a0\u6838\u5fc3\u548c\u521b\u65b0\u7684\u90e8\u5206\uff0c\u6240\u4ee5\u8fd9\u4e2a\u8bef\u533a\u7684\u6f84\u6e05\u975e\u5e38\u91cd\u8981\uff1a\\r\\n\\r\\n### Reality Create\u7684\u6838\u5fc3\u4e0d\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\uff01\\r\\n\\r\\n\u867d\u7136\u6211\u672c\u4eba\u591a\u5e74\u7684\u5de5\u4f5c\u7ecf\u9a8c\u548c\u80cc\u666f\u90fd\u662f\u4e0e\u6e38\u620f\u5f15\u64ce\u548c\u6e32\u67d3\u76f8\u5173\uff0c\u540c\u65f6\u73b0\u4ee3\u6e38\u620f\u5f15\u64ce\u5de5\u4e1a\u7684\u6280\u672f\u4e5f\u5728\u4e0d\u65ad\u53d1\u5c55\uff0c\u4f46\u662f\u6211\u4e00\u76f4\u89c9\u5f97\u5236\u7ea6\u7528\u6237\u968f\u5fc3\u6240\u6b32\u8868\u8fbe\u5185\u5bb9\u548c\u903b\u8f91\u7684\u90e8\u5206\u4e3b\u8981\u8fd8\u662f\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7a0b\u5e8f\u8fd0\u884c\u7684\u673a\u5236\uff0c\u800c\u6e38\u620f\u5f15\u64ce\u67b6\u6784\u548c\u6d41\u7a0b\u672c\u8eab\u867d\u7136\u4e5f\u5f88\u590d\u6742\uff0c\u4f46\u8fd9\u90e8\u5206\u90fd\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u7684\uff0c\u4f8b\u5982\u9664\u4e86\u7f16\u7a0b\u90e8\u5206\uff0c\u4e00\u4e9b\u7f8e\u672f\u751a\u81f3\u7b56\u5212\u4e5f\u662f\u80fd\u591f\u6bd4\u8f83\u597d\u7684\u4f7f\u7528\u5f15\u64ce\u7684\u4e00\u4e9b\u76f8\u5173\u529f\u80fd\uff0c\u4f46\u662f\u4e0e\u4e4b\u76f8\u53cd\u7684\u662f\uff0c\u903b\u8f91\u7684\u8868\u8fbe\u548c\u7f16\u7a0b\u901a\u5e38\u8fd8\u662f\u9700\u8981\u4e13\u95e8\u7684\u7a0b\u5e8f\u5458\u3002\u867d\u7136\u4e00\u4e9b\u7279\u5b9a\u7c7b\u578b\u7684\u6e38\u620f\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u9a71\u52a8\u6216\u8005\u914d\u7f6e\u7684\u5f62\u5f0f\u90e8\u5206\u5b9e\u73b0\u975e\u7a0b\u5e8f\u5458\u7684\u903b\u8f91\u7ec4\u7ec7\uff0c\u4f46\u8fd9\u6837\u7684\u67b6\u6784\u8fd8\u662f\u5f88\u96be\u505a\u5230\u901a\u7528\uff0c\u663e\u7136\u6570\u5b57\u4e16\u754c\u8fd8\u6709\u7740\u975e\u5e38\u591a\u7684\u5404\u5f0f\u5404\u6837\u7684\u9700\u6c42\uff0c\u8fd9\u4e9b\u9700\u6c42\u9700\u8981\u4e00\u4e9b\u901a\u7528\u7684\u903b\u8f91\u8868\u8fbe\u80fd\u529b\u3002\\r\\n\\r\\n\u6240\u4ee5Reality World\u7684\u6838\u5fc3\u662f\u4e00\u5957\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u90e8\u5206\u7406\u89e3\u4e3a\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u4f46\u662f\u4e0e\u4f20\u7edf\u5355\u7eaf\u89e3\u91ca\u6e90\u4ee3\u7801\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u865a\u62df\u673a\u76f8\u6bd4\uff0c\u5b83\u5305\u542b\u4e00\u4e9b\u6e90\u4ee3\u7801\u89e3\u91ca\u7ffb\u8bd1\u4e4b\u5916\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6743\u9650\u9a8c\u8bc1\u3001\u6c99\u76d2\u5b89\u5168\u4e0e\u4e92\u64cd\u4f5c\u3001\u5206\u5e03\u5f0f\u5185\u5bb9\u5206\u53d1\u4e0e\u540c\u6b65\u3001\u7ec4\u4ef6\u7684\u4f9d\u8d56\u7ba1\u7406\u548c\u52a8\u6001\u52a0\u8f7d\u7b49\u7b49\uff0c\u56e0\u6b64\u53ef\u4ee5\u7406\u89e3\u4e3aReality World\u662f\u4e00\u4e2a\u50cf\u533a\u5757\u94fe\u7c7b\u4f3c\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff1b\u540c\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u6e90\u4ee3\u7801\u7684\u7ffb\u8bd1\u89e3\u91ca\u90e8\u5206\uff0cReality World\u4e5f\u6709\u7740\u5f88\u591a\u533a\u522b\u4e8e\u4f20\u7edf\u52a8\u6001\u8bed\u8a00\u865a\u62df\u673a\u89e3\u91ca\u7684\u6d41\u7a0b\u548c\u67b6\u6784\u3002\\r\\n\\r\\n\u57fa\u4e8e\u8fd9\u5957\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6211\u4eec\u4f1a\u6784\u5efa3D\u5f15\u64ce\u7684\u80fd\u529b\u4ee5\u4f7f\u7528\u6237\u53ef\u4ee5\u5f00\u53d13D\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u8fd9\u90e8\u5206\u6280\u672f\u8ddf\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u4f7f\u7528\u7684\u6280\u672f\u4e0d\u4f1a\u6709\u592a\u5927\u5dee\u5f02\uff0c\u5f53\u7136\u56e0\u4e3a\u8fd0\u884c\u65f6\u73af\u5883\u4e0d\u540c\uff0c\u4e0e\u4e4b\u76f8\u5173\u76843D\u5f15\u64ce\u7684\u67b6\u6784\u548c\u6d41\u7a0b\u80af\u5b9a\u4f1a\u6709\u4e00\u4e9b\u53d8\u5316\uff0c\u6240\u4ee5\u6211\u9884\u671f\u5c06\u6765Reality Create\u7684\u6d41\u7a0b\u5e94\u8be5\u662f\u53ef\u4ee5\u6709\u4e00\u4e9b\u4e0d\u540c\u7684\u521b\u65b0\u4f53\u9a8c\u7684\u3002\\r\\n\\r\\n\u9664\u4e863D\u6e32\u67d3\uff0cReality Create\u7684\u8ba1\u5212\u4e5f\u53ef\u4ee5\u5f00\u53d12D\u5e94\u7528\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528\u4e00\u79cd\u7edf\u4e00\u7684\u7f16\u7a0b\u8bed\u8a00\u548c\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u6765\u7edf\u4e003D\u548c\u4f20\u7edf2D\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u6240\u4ee5\u5b83\u786e\u5207\u7684\u5b9a\u4f4d\u5e94\u8be5\u662f\u4e00\u4e2a\u57fa\u4e8e\u5206\u5e03\u5f0f\u7684\u3001\u901a\u7528\u7684\u5e94\u7528\u6784\u9020\u548c\u5f00\u53d1\u5e73\u53f0\uff0c\u800c\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u6e38\u620f\u5f15\u64ce\u3002\\r\\n\\r\\n\u4e0e\u4e4b\u76f8\u5173\u7684\u662f\uff0c\\r\\n\\r\\n### Reality World\u5f53\u7136\u4e5f\u4e0d\u662f\u5143\u5b87\u5b99\u9879\u76ee\\r\\n\\r\\n\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\uff0c\u81f3\u5c11\u76ee\u524d\u7684\u5143\u5b87\u5b99\u5927\u90e8\u5206\u90fd\u662f\u504f\u5411\u4e8e3D\uff0c\u7136\u540e\u671f\u671b\u4eba\u4eec\u6709\u4e9b\u66f4\u591a\u6c89\u6d78\u5f0f\u7684\u865a\u62df\u751f\u6d3b\u3002\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\u8ddfReality World\u7684\u7406\u5ff5\u751a\u81f3\u662f\u76f8\u53cd\u7684\uff0c\u4ece\u540d\u5b57\u5c31\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u9009\u62e9Reality\u8fd9\u4e2a\u8bcd\uff0c\u662f\u5e0c\u671b\u6211\u4eec\u80fd\u591f\u5f15\u5bfc\u7528\u6237\u66f4\u591a\u5173\u6ce8\u73b0\u5b9e\uff0cReality World\u7684\u76ee\u6807\u662f\u5e0c\u671b\u901a\u8fc7\u63d0\u4f9b\u66f4\u7b80\u5316\u3001\u66f4\u5177\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u7f16\u7a0b\u4f53\u9a8c\uff0c\u4f7f\u66f4\u591a\u7684\u4eba\u80fd\u591f\u968f\u5fc3\u6240\u6b32\u5730\u8868\u8fbeTA\u5bf9\u73b0\u5b9e\u4e16\u754c\u7684\u7406\u89e3\uff0c\u5e76\u5c06\u8fd9\u4e9b\u7406\u89e3\u8f6c\u5316\u4e3a\u53ef\u4ea4\u4e92\u7684\u6570\u5b57\u7684\u5f62\u5f0f\uff0c\u4e0e\u5176\u4ed6\u66f4\u591a\u4eba\u5206\u4eab\uff0c\u6211\u89c9\u5f97\u5e94\u7528\u7684\u5f00\u53d1\u548c\u6784\u9020\u4e0e\u6587\u5b57\u3001\u56fe\u7247\u3001\u89c6\u9891\u4ee5\u53ca\u5176\u4ed6\u4fe1\u606f\u8f7d\u4f53\u4e00\u6837\uff0c\u6700\u5927\u7684\u4ef7\u503c\u4ecd\u7136\u662f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u6700\u6df1\u523b\u7684\u601d\u8003\u3001\u667a\u6167\u548c\u903b\u8f91\u3002\\r\\n\\r\\n\u5b9e\u9645\u4e0a\uff0c\u6211\u5fc3\u91cc\u9762\u5bf9Reality World\u7684\u6700\u7cbe\u51c6\u7684\u63cf\u8ff0\u662f\uff1a\\r\\n\\r\\n**A self-evolving interoperable system.**\\r\\n\\r\\n\u6216\u8005\uff1a\\r\\n\\r\\n**Interoperating with multi-applications in a modular and composable system.**\\r\\n\\r\\n\u4e5f\u8bb8\u770b\u4e86\u540e\u9762\u7684\u4e00\u4e9b\u4ecb\u7ecd\u4f60\u80fd\u591f\u5927\u6982\u7406\u89e3\u4e0a\u9762\u4e24\u53e5\u8bdd\u7684\u542b\u4e49\\r\\n\\r\\n## \u6784\u5efa\u4e00\u4e2a\u4e92\u64cd\u4f5c\u7684\u6570\u5b57\u4e16\u754c\\r\\n\\r\\n![img](images\\\\3.jpg)\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u662fReality World\u6700\u6838\u5fc3\u7684\u673a\u5236\\r\\n\\r\\n\u6211\u5370\u8c61\u4e2d\uff0c\u5de5\u4e1a\u754c\u548c\u5a92\u4f53\u5f00\u59cb\u771f\u6b63\u8ba8\u8bba\u4e92\u64cd\u4f5c\u6027\u53ca\u5176\u76f8\u5173\u7684\u4e00\u4e9b\u8bba\u636e\uff0c\u5927\u90e8\u5206\u90fd\u6765\u6e90\u4e8eTim Sweeney\u7684\u90a3\u7bc7\u6f14\u8bb2\uff1a[https://dl.acm.org/doi/10.1145/3306307.3339844](https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/10.1145/3306307.3339844)\\r\\n\\r\\n\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u8bf4\uff0cReality World\u7684\u76ee\u6807\u8ddfTim\u7684\u4e00\u4e9b\u63cf\u8ff0\u548c\u613f\u666f\u662f\u76f8\u4f3c\u7684\uff0c\u4f46\u4e5f\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6839\u672c\u4e0d\u540c\uff0c\u6211\u9996\u5148\u63cf\u8ff0\u8ddfTim\u6f14\u8bb2\u7684\u4e00\u4e9b\u5173\u7cfb\u548c\u903b\u8f91\uff0c\u7136\u540e\u518d\u4ecb\u7ecd\u6211\u4eec\u7684\u601d\u8003\uff0c\u901a\u8fc7\u8fd9\u4e9b\u95ee\u9898\u5c31\u53ef\u4ee5\u6bd4\u8f83\u81ea\u7136\u5730\u7406\u89e3Reality World\u7684\u76ee\u6807\u4ee5\u53ca\u60f3\u89e3\u51b3\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u5b9e\u9645\u4e0a\u6211\u7b2c\u4e00\u6b21\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u662f\u5728\u53bb\u5e747\u6708\u5de6\u53f3\uff0c\u90a3\u4e2a\u65f6\u5019\u6211\u7684\u57fa\u672c\u67b6\u6784\u7684\u6784\u601d\u5df2\u7ecf\u521d\u6b65\u5b8c\u6210\uff0c\u5c24\u5176\u662f\u6700\u6838\u5fc3\u4e5f\u662f\u6700\u91cd\u8981\u7684\u4e00\u6b65\u57fa\u7840\u5df2\u7ecf\u8bbe\u8ba1\u597d\uff0c\u5f53\u65f6\u770b\u5230\u8fd9\u7bc7\u6f14\u8bb2\u611f\u5230\u5f88\u591a\u5171\u9e23\uff0c\u4e5f\u662f\u5bf9\u81ea\u5df1\u7684\u4e00\u79cd\u5f88\u5927\u7684\u6fc0\u52b1\uff0c\u6bd5\u7adf\u6709\u5bf9\u6280\u672f\u548c\u884c\u4e1a\u90fd\u6709\u975e\u5e38\u7ecf\u9a8c\u548c\u5f71\u54cd\u529b\u7684\u5927\u4f6c\u4e5f\u6709\u7c7b\u4f3c\u7684\u601d\u8003\u548c\u884c\u52a8\u3002\u4f46\u4ece\u53bb\u5e74\u5230\u73b0\u5728\uff0c\u6211\u4eec\u8fd8\u662f\u6cbf\u7740\u6211\u4eec\u65e9\u5148\u7684\u6280\u672f\u601d\u8def\uff0c\u57fa\u672c\u4e0a\u5e76\u6ca1\u6709\u53bb\u5173\u6ce8\u548c\u53c2\u8003\u592a\u591aEpic\u7684\u4e1c\u897f\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u4ece\u6280\u672f\u65b9\u6848\u5230\u76ee\u6807\u90fd\u662f\u6709\u5f88\u591a\u4e0d\u540c\u3002\\r\\n\\r\\n\u5728\u6280\u672f\u5c42\u9762\uff0cTim\u8ba4\u4e3a\u8fd9\u6837\u7684\u76ee\u6807\u5927\u6982\u53ef\u80fd\u9700\u898110\u5e74\u624d\u80fd\u5b8c\u6210\uff0c\u4f46Epic\u4f1a\u671d\u7740\u8fd9\u4e2a\u76ee\u6807\u9010\u6b65\u903c\u8fd1\u3002Epic\u7684\u8def\u7ebf\u5927\u6982\u662f\u51e0\u6b65\uff1a\u9996\u5148\u5c06\u4e00\u4e9b\u504f\u793e\u4ea4\u6216\u8005\u73a9\u5bb6\u7684\u975e\u4e13\u4e1a\u6e38\u620f\u5f00\u53d1\u8005\u8f6c\u79fb\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\uff0c\u8fd9\u90e8\u5206\u5f00\u53d1\u8005\u90fd\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u6e38\u620f\u5185\u90e8\u800c\u4e0d\u662f\u5355\u72ec\u4f7f\u7528Unreal Engine\u53bb\u521b\u4f5c\uff0c\u8fd9\u4e2a\u6a21\u5f0f\u5176\u5b9e\u7c7b\u4f3cRoblox\u7684\u6a21\u5f0f\uff0c\u5b83\u4e5f\u662f\u4e00\u79cd\u6e38\u620f\u5f15\u64ce\u8fd9\u79cd\u5546\u4e1a\u6a21\u5f0f\u7684\u8f6c\u578b\uff1a\u4f20\u7edf\u7684\u6e38\u620f\u5f15\u64ce\u53ea\u662f\u4e00\u4e2a\u5355\u673a\u7684\u751f\u6210\u5e94\u7528\u7a0b\u5e8f\u7684\u8f6f\u4ef6\uff0c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5185\u5bb9\u7531\u81ea\u5df1\u53bb\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837\u6e38\u620f\u5f15\u64ce\u4ec5\u4f5c\u4e3a\u4e00\u4e2a\u5de5\u5177\uff0c\u5b83\u53ea\u53c2\u4e0e\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u800c\u65e0\u6cd5\u53c2\u4e0e\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u56e0\u6b64\u65e0\u6cd5\u5f62\u6210\u751f\u6001\uff0c\u6240\u4ee5\u5c3d\u7ba1\u4e00\u4e9b\u5f15\u64ce\u6709\u5e9e\u5927\u7684\u5f00\u53d1\u8005\u6570\u91cf\u548c\u7fa4\u4f53\uff0c\u4f46\u662f\u8fd9\u79cd\u6570\u91cf\u5e76\u6ca1\u6709\u5f88\u6709\u6548\u7684\u65b9\u5f0f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u751f\u6001\u3002\u7136\u800cRoblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f60\u7684\u5185\u5bb9\u5fc5\u987b\u5206\u53d1\u5230\u8fd9\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5e76\u7531\u7279\u5b9a\u7684\u5ba2\u6237\u7aef\u8fd0\u884c\u65f6\u73af\u5883\u6765\u8fd0\u884c\uff0c\u800c\u65e0\u6cd5\u50cf\u5355\u72ec\u7684\u6e38\u620f\u5f15\u64ce\u90a3\u6837\u81ea\u884c\u5206\u53d1\u548c\u8fd0\u8425\uff0c\u8fd9\u6837Roblox\u548c\u300a\u5821\u5792\u4e4b\u591c\u300b\u5c31\u53ef\u4ee5\u53c2\u4e0e\u6574\u4e2a\u5185\u5bb9\u7684\u5168\u90e8\u751f\u547d\u5468\u671f\uff0c\u8fd9\u6837\u5c31\u5f62\u6210\u751f\u6001\uff0c\u5176\u4ed6\u7684\u670d\u52a1\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fd9\u5957\u5206\u5e03\u5f0f\u7cfb\u7edf\u8fdb\u884c\u63d0\u4f9b\uff0c\u800c\u5bf9\u7528\u6237\u7684\u597d\u5904\u4e5f\u662f\u7b80\u5316\u4e86\u5185\u5bb9\u7684\u5206\u53d1\u90e8\u7f72\uff0c\u4ee5\u53ca\u66f4\u591a\u4fbf\u6377\u7684\u96c6\u6210\u670d\u52a1\uff0c\u4f8b\u5982\u4e0e\u5176\u4ed6\u73a9\u5bb6\u7684\u4e92\u52a8\u3002\\r\\n\\r\\n![img](images\\\\island.png)\\r\\n\\r\\n\u300a\u5821\u5792\u4e4b\u591c\u300bCreative\u6a21\u5f0f\\r\\n\\r\\n\u4e3a\u4e86\u8981\u4f7f\u7528\u6237\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fdb\u884c\u5185\u5bb9\u5f00\u53d1\uff0c\u5c31\u5e26\u6765\u4e86\u4e24\u4e2a\u95ee\u9898\uff1a\u4e00\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u95ee\u9898\uff0c\u4e8c\u662f\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\u3002\u8981\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u4e2d\u8fd0\u884c\u4e00\u4e2a\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u672a\u53d7\u4fe1\u4efb\u7684\u4ee3\u7801\uff0c\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u96be\u7684\u95ee\u9898\uff0c\u8fd9\u4e5f\u6d89\u53ca\u5230Reality World\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u6838\u5fc3\u95ee\u9898\u3002\\r\\n\\r\\n\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002\\r\\n\\r\\n\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002\\r\\n\\r\\n\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002\\r\\n\\r\\n![img](images\\\\luau.png)\\r\\n\\r\\n\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002\\r\\n\\r\\nNaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002\\r\\n\\r\\nWeb Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002\\r\\n\\r\\n![img](images\\\\verse.png)\\r\\n\\r\\nEpic\u63a8\u51faVerse language\\r\\n\\r\\n\u56de\u5230\u300a\u5821\u5792\u4e4b\u591c\u300b\uff0cEpic\u663e\u7136\u4e0d\u53ef\u80fd\u8ba9\u73a9\u5bb6\u4f7f\u7528Unreal Engine\u7684C++\u6216\u8005blueprint\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u5728\u300a\u5821\u5792\u4e4b\u591c\u300b\u5185\u5b58\u73af\u5883\u4e2d\u8fd0\u884c\uff0cUnreal Engine\u76ee\u524d\u4e5f\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\u65b9\u6848\uff0c\u56e0\u6b64Epic\u9700\u8981\u5f00\u53d1\u4e00\u5957\u65b0\u7684\u811a\u672c\u8bed\u8a00\uff0c\u8fd9\u5c31\u662f\u4eca\u5e74\u65e9\u4e9b\u65f6\u5019\u53d1\u5e03\u7684Verse programming language\u3002Epic\u4e3a\u6b64\u6316\u6765\u4e86Haskell\u7684\u4f5c\u8005Simon Peyton Jones\uff0c\u4ee5\u53ca\u4e4b\u524d\u6536\u8d2d\u7684\u4e00\u4e2a\u4e3aUnreal Engine\u5f00\u53d1\u811a\u672c\u8bed\u8a00\u7684\u56e2\u961fSkookumScript\uff0c\u636e\u8bf4\u8fd8\u6709\u5199V8\u5185\u6838\u7684\u4f5c\u8005\u3002\\r\\n\\r\\n\u5173\u4e8eVerse language\u672c\u8eab\uff0c\u76ee\u524d\u8fd8\u6ca1\u6709\u592a\u591a\u4fe1\u606f\uff0c\u4f46\u662f\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u7684\u4f7f\u547d\u4e00\u662f\u4e3a\u300a\u5821\u5792\u4e4b\u591c\u300b\u7684\u521b\u4f5c\u63d0\u4f9b\u4e00\u79cd\u5b89\u5168\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u800c\u4e14\u53ef\u4ee5\u60f3\u8c61\u8fd9\u4e2a\u811a\u672c\u8bed\u8a00\u5fc5\u7136\u5305\u542b\u4e00\u5b9a\u7684\u6c99\u76d2\u673a\u5236\uff0c\u6765\u4fdd\u8bc1\u5b89\u5168\u6027\u3002\\r\\n\\r\\n\u534f\u4f5c\u7684\u7b2c\u4e8c\u4e2a\u8981\u6c42\u662f\u4e92\u64cd\u4f5c\uff0c\u4e92\u64cd\u4f5c\u6027\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a\\r\\n\\r\\n> **Interoperability** is a characteristic of a product or system to work with other products or systems\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a\\r\\n\\r\\n> If two or more systems use commondata formatsandcommunication protocolsand are capable of communicating with each other, they exhibit*syntactic interoperability*. XML and SQL are examples of common data formats and protocols.\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u548c\u8f6f\u4ef6\u9694\u79bb\u901a\u5e38\u662f\u76f8\u4e92\u77db\u76fe\u7684\uff0c\u4e92\u64cd\u4f5c\u8868\u73b0\u4e3a\u6211\u5e0c\u671b\u66f4\u7b80\u5355\u66f4\u65b9\u4fbf\u5730\u8bbf\u95ee\u522b\u4eba\u7684\u6570\u636e\u6216\u63a5\u53e3\uff0c\u800c\u9694\u79bb\u5219\u5047\u8bbe\u9664\u6211\u4e4b\u5916\u7684\u4ee3\u7801\u90fd\u662f\u4e0d\u53ef\u4fe1\u7684\uff0c\u4e0d\u8981\u8f7b\u6613\u5730\u8bbf\u95ee\uff0c\u6216\u8005\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\u4f7f\u8fd9\u79cd\u8bbf\u95ee\u7684\u4ee3\u4ef7\u548c\u96be\u5ea6\u589e\u52a0\u3002\u5c24\u5176\u5728\u6e38\u620f\u8fd9\u79cd\u5b9e\u65f6\u7684\u8fd0\u884c\u73af\u5883\uff0c\u8fd9\u79cd\u4ee3\u4ef7\u548c\u96be\u5ea6\u5f80\u5f80\u610f\u5473\u7740\u6027\u80fd\u95ee\u9898\u3002\\r\\n\\r\\nTim\u57282019\u5e74\u7684\u6f14\u8bb2\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u540e\u7eed\u57fa\u4e8eVerse\u7684\u4ee3\u7801\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002\\r\\n\\r\\n\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0cReality World\u90fd\u6709\u7740\u4e0d\u540c\u7684\u6280\u672f\u601d\u8003\u548c\u65b9\u6848\u3002\\r\\n\\r\\n### \u66f4\u8f7b\u91cf\u7ea7\u7684\u9694\u79bb\u6280\u672f\\r\\n\\r\\n\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cReality World\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002\\r\\n\\r\\n\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002\\r\\n\\r\\n### \u4e92\u64cd\u4f5c\u6027\u7684\u672c\u8d28\u662f\u5e94\u7528\u788e\u7247\u5316\u7684\u95ee\u9898\\r\\n\\r\\n\u4e92\u64cd\u4f5c\u6027\u8fd9\u4e2a\u6982\u5ff5\uff0c\u6211\u8ddf\u5927\u90e8\u5206\u6295\u8d44\u4eba\u89e3\u91ca\u57fa\u672c\u4e0a\u90fd\u662f\u5f88\u96be\u7406\u89e3\u7684\uff0c\u5f53\u7136\u8fd9\u91cc\u53ef\u80fd\u6211\u5bf9\u4e92\u64cd\u4f5c\u6027\u8d4b\u4e88\u4e86\u66f4\u591a\u7684\u610f\u4e49\u3002\u4ece\u7a0b\u5e8f\u673a\u5236\u4e0a\u6765\u8bb2\uff0c\u4e92\u64cd\u4f5c\u6027\u4e3b\u8981\u6d89\u53ca\u4e24\u4e2a\u72ec\u7acb\u7684\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c\u76f8\u4e92\u8c03\u7528\u7684\u80fd\u529b\uff0c\u6bd4\u5982\u5927\u90e8\u5206\u8bed\u8a00\u90fd\u53ef\u4ee5\u901a\u8fc7C\u63a5\u53e3\u5b9e\u73b0\u76f8\u4e92\u8c03\u7528\uff0c\u518d\u5f80\u4e0a\u4e00\u70b9\uff0c\u4efb\u4f55\u7a0b\u5e8f\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\u7136\u540e\u5185\u90e8\u8fdb\u884c\u683c\u5f0f\u89e3\u91ca\uff0c\u4e5f\u4ecd\u7136\u662f\u80fd\u591f\u8fdb\u884c\u901a\u4fe1\u7684\u3002\u5b9e\u9645\u4e0a\u4e92\u8054\u7f51\u7684\u673a\u5236\u5c31\u662f\u5982\u6b64\uff0cOSI\uff08Open systems Interconnection\uff09\u7684\u673a\u5236\u5c31\u662f\u5b9e\u73b0\u4e86\u4efb\u4f55\u8ba1\u7b97\u673a\u6216\u8005\u4efb\u610f\u7a0b\u5e8f\u4e4b\u95f4\u7684\u5b57\u7b26\u4e32\u901a\u4fe1\uff0c\u4ece\u800c\u89e3\u51b3\u4e86\u6574\u4e2a\u8ba1\u7b97\u673a\u7f51\u7edc\u4e92\u8054\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002\\r\\n\\r\\n\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002\\r\\n\\r\\n\u56e0\u6b64\uff0cReality World\u7684\u5176\u4e2d\u4e00\u4e2a\u91cd\u8981\u673a\u5236\uff0c\u5c31\u662f\u8981\u8ba9\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\uff0c\u5176\u5b9a\u4e49\u7684\u6570\u636e\u63a5\u53e3\u975e\u5e38\u8f7b\u6613\u5730\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u8bbf\u95ee\uff0c\u540c\u65f6\u7ed3\u5408\u4e0a\u9762\u7684\u6c99\u76d2\u6280\u672f\u4fdd\u8bc1\u8fd9\u79cd\u6570\u636e\u8bbf\u95ee\u7684\u5b89\u5168\uff0c\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u7684\u6c99\u76d2\u6280\u672f\u4e0d\u80fd\u53ea\u662f\u5728\u6700\u5e95\u5c42\u5b9e\u73b0\u3002\\r\\n\\r\\n\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002\\r\\n\\r\\n![img](images\\\\usd.png)\\r\\n\\r\\nPixar USD\\r\\n\\r\\n\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002\\r\\n\\r\\nAPI\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002\\r\\n\\r\\n\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a\\r\\n\\r\\n```text\\r\\ndef Toy_Dialect : Dialect {\\r\\nlet summary = \\"Toy IR Dialect\\"; let description = [{\\r\\n This is a much longer description of the\\r\\n Toy dialect.\\r\\n ...\\r\\n}];\\r\\n // The namespace of our dialect.\\r\\nlet name = \\"toy\\";\\r\\n// The C++ namespace that the dialect class // definition resides in.\\r\\nlet cppNamespace = \\"toy\\";\\r\\n}\\r\\n```\\r\\n\\r\\n\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a\\r\\n\\r\\n```cpp\\r\\nclass ToyDialect : public mlir::Dialect {\\r\\n public:\\r\\nToyDialect(mlir::MLIRContext *context)\\r\\n : mlir::Dialect(\\"toy\\", context,\\r\\n mlir::TypeID::get<ToyDialect>()) {\\r\\n initialize();\\r\\n}\\r\\nstatic llvm::StringRef getDialectNamespace() {\\r\\n return \\"toy\\";\\r\\n}\\r\\nvoid initialize()\\r\\n```\\r\\n\\r\\n\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002\\r\\n\\r\\n![img](images\\\\modular.png)\\r\\n\\r\\nModular\\r\\n\\r\\n\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cReality World\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002\\r\\n\\r\\n\u7ed3\u5408\u524d\u9762\u8ba8\u8bba\u7684\u6c99\u76d2\u6280\u672f\u3001\u4e92\u64cd\u4f5c\u3001\u788e\u7247\u5316\u7b49\u7b49\u673a\u5236\uff0cReality World\u5e0c\u671b\u80fd\u591f\u901a\u8fc7\u4e00\u4e9b\u521b\u65b0\u63a2\u7d22\uff0c\u6784\u5efa\u8d77\u4e00\u4e2a\u66f4\u597d\u7684\u4e92\u64cd\u4f5c\u5e73\u53f0\uff0c\u4f7f\u5f97\u4e0a\u9762\u7684\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u5b83\u770b\u8d77\u6765\u50cf\u662f\u57fa\u4e8eOSI\u4e4b\u4e0a\u6dfb\u52a0\u7684\u4e00\u4e2a\u4e92\u64cd\u4f5c\u5c42\uff0c\u5728\u8fd9\u4e2a\u4e92\u64cd\u4f5c\u5c42\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u64cd\u4f5c\u7684\u662f\u6765\u81ea\u5176\u4ed6\u5e94\u7528\u7684\u5185\u5b58\u6570\u636e\uff0c\u5c31\u50cf\u4f60\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u6570\u636e\u4e00\u6837\u7b80\u5355\uff0c\u5c3d\u7ba1\u8fd9\u4e2a\u6570\u636e\u53ef\u80fd\u6765\u81ea\u4e8e\u5176\u4ed6\u7684\u670d\u52a1\u5668\u3002\\r\\n\\r\\n## \u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5\\r\\n\\r\\n![img](images\\\\pl.jpg)\\r\\n\\r\\nReality World\u5bf9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u5f88\u591a\u8c03\u6574\\r\\n\\r\\n\u6211\u4eec\u7a0b\u5e8f\u5458\uff0c\u7ec8\u5176\u4e00\u751f\u53ef\u80fd\u90fd\u5e0c\u671b\u80fd\u591f\u66f4\u597d\u5730\u7406\u89e3\u7a0b\u5e8f\u5230\u5e95\u662f\u600e\u4e48\u8fd0\u884c\u7684\uff0c\u8fd9\u79cd\u7406\u89e3\u4e0d\u5149\u80fd\u591f\u8ba9\u6211\u4eec\u66f4\u9ad8\u6548\u5730\u7f16\u5199\u66f4\u5065\u58ee\u7684\u4ee3\u7801\uff0c\u4ece\u800c\u521b\u9020\u8f6f\u4ef6\u7684\u4ef7\u503c\uff0c\u540c\u65f6\uff0c\u7f16\u7a0b\u7684\u673a\u5236\u672c\u8eab\u5145\u6ee1\u7740\u65e0\u7a77\u7684\u9b45\u529b\uff0c\u56e0\u4e3a\u5b83\u53ef\u80fd\u662f\u4eba\u7c7b\u6709\u53f2\u4ee5\u6765\u80fd\u591f\u8868\u8fbe\u4eba\u7c7b\u5927\u8111\u4e2d\u590d\u6742\u7684\u601d\u7ef4\u548c\u903b\u8f91\u7684\u6700\u597d\u7684\u673a\u5236\u4e4b\u4e00\uff0c\u5b83\u5c06\u4eba\u7c7b\u5bf9\u7269\u7406\u4e16\u754c\u7684\u7406\u89e3\u53ca\u5176\u5f62\u6210\u7684\u667a\u6167\u8f6c\u5316\u4e3a\u4e3a\u4eba\u7c7b\u670d\u52a1\u7684\u5de5\u5177\u548c\u529b\u91cf\uff0c\u8fd9\u662f\u6211\u4eec\u70ed\u7231\u7f16\u7a0b\u7684\u5176\u4e2d\u4e00\u4e9b\u539f\u56e0\u3002\\r\\n\\r\\n\u5341\u591a\u5e74\u6765\uff0c\u5bf9\u4e8e\u7f16\u7a0b\uff0c\u6211\u4e00\u76f4\u6709\u4e24\u79cd\u4e0d\u4e00\u6837\u7684\u60c5\u611f\uff1a\\r\\n\\r\\n- \u6211\u4e00\u76f4\u4e0d\u559c\u6b22\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u65b9\u5f0f\\r\\n- \u6211\u66f4\u559c\u6b22\u5f00\u53d1\u80fd\u591f\u7528\u4e8e\u6784\u9020\u8f6f\u4ef6\u7684\u8f6f\u4ef6\\r\\n\\r\\n\u4eca\u5929\uff0cReality World\u7684\u7b2c\u4e8c\u4e2a\u6838\u5fc3\u5173\u6ce8\u70b9\u548c\u57fa\u7840\u5c31\u662f\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u65b0\u7684\u63a2\u7d22\u3002\u4e16\u754c\u4e0a\u53ea\u6709\u5927\u7ea6\u4e0d\u52300.5%\u7684\u4eba\u662f\u4f1a\u7f16\u5199\u4ee3\u7801\u7684\uff0c\u7ea63000\u4e07\u5de6\u53f3\uff0c\u6240\u4ee5\u6570\u5b57\u5316\u8868\u8fbe\u7684\u6f5c\u529b\u8fd8\u8fdc\u8fdc\u6ca1\u6709\u88ab\u53d1\u6325\u51fa\u6765\u3002\u5982\u679c\u6211\u4eec\u5c06\u8fd9\u4e2a\u6570\u5b57\u63d0\u5347\u52305\u4ebf~10\u4ebf\uff0c\u770b\u770b\u8fd8\u6709\u54ea\u4e9b\u53d8\u9769\u9700\u8981\u53d1\u751f\uff0c\u53ef\u80fd\u4e0e\u4f60\u60f3\u8c61\u4e2d\u4e0d\u592a\u4e00\u6837\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u672c\u8eab\u53ef\u80fd\u5e76\u4e0d\u662f\u5236\u7ea6\u56e0\u7d20\u3002\\r\\n\\r\\n### \u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u9694\u79bb\\r\\n\\r\\n\u5341\u591a\u5e74\u5de5\u4f5c\u7ecf\u5386\uff0c\u6211\u5199\u8fc7C#\u3001C\u3001C++\u3001Ruby\u3001Lua\u3001Rust\u7b49\uff0c\u4ee5\u53ca\u6700\u8fd1\u4e00\u5e74\u591a\uff0c\u6211\u51e0\u4e4e\u770b\u4e86\u6240\u6709\u80fd\u4e70\u5230\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u7b49\u76f8\u5173\u7684\u4e66\u7c4d\uff08\u540e\u9762\u4f1a\u4ecb\u7ecd\uff09\u3002\u5728\u6211\u5199\u8fc7\u7684\u4ee3\u7801\u4e2d\uff0c\u603b\u6709\u4e00\u79cd\u611f\u89c9\uff0c\u4e0d\u7ba1\u6211\u770b\u8fc7\u591a\u5c11\u8bbe\u8ba1\u6a21\u5f0f\u6216\u8005\u67b6\u6784\u76f8\u5173\u7684\u8d44\u6599\uff0c\u6211\u603b\u662f\u89c9\u5f97\u5f88\u96be\u5199\u51fa\u90a3\u79cd\u903b\u8f91\u7ed3\u6784\u7279\u522b\u6e05\u6670\u7684\u67b6\u6784\u548c\u4ee3\u7801\uff0c\u56e0\u6b64\u7f16\u7a0b\u4f53\u9a8c\u50cf\u662f\u603b\u6709\u4e00\u4e2a\u4ec0\u4e48\u4e1c\u897f\uff0c\u5835\u5728\u6211\u7684\u5fc3\u91cc\u3002\\r\\n\\r\\n\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002\\r\\n\\r\\n\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002\\r\\n\\r\\n\u77e5\u4e4e \\r\\n\\r\\n[@\u5927\u5bbd\u5bbd](https://www.zhihu.com/people/16d0cb25df98c0c909e60b135a5800c5)\\r\\n\\r\\n \u6709\u4e00\u7bc7\u56de\u7b54\uff1a[\u5982\u4f55\u770b\u5f85Erlang\u4e4b\u7236Joe Armstrong\u89c9\u5f97OO\u7f16\u7a0b\u5f88\u70c2\uff1f](https://www.zhihu.com/question/29888990/answer/703226836)\uff0c\u5176\u4e2d\u5f15\u7528\u5230Erlang\u4e4b\u7236Joe Armstrong\u7684\u4e00\u6bb5\u91c7\u8bbf\uff1a[Ralph Johnson, Joe Armstrong on the State of OOP](https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/)\\r\\n\\r\\n\\r\\n\\r\\n> Alan Kay himself wrote this famous thing and said **\\"The notion of object oriented programming is completely** [misunderstood](https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={\\"sourceType\\"%3A\\"answer\\"%2C\\"sourceId\\"%3A703226836})**. It\'s not about objects and classes, it\'s all about messages**\\". He wrote that and he said that the initial [reaction](https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={\\"sourceType\\"%3A\\"answer\\"%2C\\"sourceId\\"%3A703226836}) to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.\\r\\n\\r\\nAlan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002\\r\\n\\r\\n![img](images\\\\Robert_Virding_and_Joe_Armstrong.jpg)\\r\\n\\r\\nErlang\u4e4b\u7236Joe Armstrong\uff08\u53f3\uff09\\r\\n\\r\\nErlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a\\r\\n\\r\\n> Erlang has got all these things. It\'s got isolation, it\'s got polymorphism and it\'s got pure messaging. From that point of view, we might say it\'s the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about\\r\\n\\r\\n\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002\\r\\n\\r\\n\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002\\r\\n\\r\\n\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002Reality World\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002\\r\\n\\r\\n### \u7a0b\u5e8f\u7ed3\u6784\u7684\u590d\u6742\u6027\\r\\n\\r\\n\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u800c\u8a00\uff0c\u5f53\u524d\u6709\u5f88\u591aScratch\u7f16\u7a0b\u5e73\u53f0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7b80\u5355\u7684\u4efb\u52a1\uff1a\u5373\u53ea\u6709\u5c11\u91cf\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u4e14\u901a\u5e38\u53ea\u6709\u4e00\u4e2a\u6216\u5c11\u6570\u51e0\u4e2a\u51fd\u6570\u7684\u4efb\u52a1\uff0c\u5927\u90e8\u5206\u6709\u4e00\u4e9b\u57fa\u672c\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u80fd\u529b\u7684\u4eba\u662f\u53ef\u4ee5\u5728\u5f88\u77ed\u65f6\u95f4\u5185\u5b66\u4f1a\u7684\u3002\u8fd9\u8bf4\u660e\uff0c\u5355\u7eaf\u7684\u903b\u8f91\u8ba1\u7b97\u5e76\u4e0d\u590d\u6742\u3002\\r\\n\\r\\n\u7136\u800c\uff0c\u771f\u6b63\u7684\u8f6f\u4ef6\u89c4\u6a21\u662f\u975e\u5e38\u5927\u7684\uff0c\u5b83\u5f80\u5f80\u662f\u7531\u4f17\u591a\u7684\u5f00\u53d1\u4eba\u5458\uff08\u8fd9\u4e9b\u5f00\u53d1\u4eba\u5458\u751a\u81f3\u53ef\u80fd\u5728\u5730\u7406\u4f4d\u7f6e\u4e0a\u5b8c\u5168\u9694\u79bb\uff09\u5f00\u53d1\u7684\u51e0\u5341\u751a\u81f3\u4e0a\u767e\u4e07\u884c\u4ee3\u7801\u7684\u7ec4\u5408\uff0c\u8fd9\u79cd\u89c4\u6a21\u7684\u8f6f\u4ef6\u7a0b\u5e8f\u663e\u7136\u4e0d\u53ef\u80fd\u4ec5\u7531\u7b80\u5355\u7684\u53d8\u91cf\u548c\u51fd\u6570\u6784\u6210\uff0c\u90a3\u6837\u7684\u8bdd\u6211\u4eec\u5c06\u5f88\u96be\u7ba1\u7406\u9519\u7efc\u4ea4\u7ec7\u3001\u590d\u6742\u7684\u6570\u636e\u548c\u51fd\u6570\u5f15\u7528\u3002\u5728\u300a\u8ba1\u7b97\u673a\u7a0b\u5e8f\u7684\u6784\u9020\u548c\u89e3\u91ca\u300b\u4e00\u4e66\u4e2d\u6307\u51fa\uff0c\u7f16\u7a0b\u6a21\u578b\u672c\u8d28\u4e0a\u8981\u89e3\u51b3\u7684\u662f\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u95ee\u9898\uff0c\u4e0d\u7ba1\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u8fd8\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u3002\\r\\n\\r\\n\u4e3a\u6b64\uff0c\u7f16\u7a0b\u8bed\u8a00\u7684\u8bbe\u8ba1\u8005\u5728\u6570\u636e\u548c\u65b9\u6cd5\u7684\u57fa\u7840\u4e0a\uff0c\u6dfb\u52a0\u4e86\u5927\u91cf\u7684\u62bd\u8c61\u673a\u5236\uff0c\u4f8b\u5982\u7c7b\u578b\u3001\u6570\u636e\u7ed3\u6784\u3001\u7ee7\u627f\u3001\u591a\u6001\u3001\u91cd\u8f7d\u3001\u63a5\u53e3\u7b49\u7b49\u3002\u8fd9\u4e9b\u673a\u5236\u7684\u76ee\u6807\u662f\u8981\u5f62\u6210\u5404\u79cd\u62bd\u8c61\uff0c\u4f7f\u5f97\u5176\u4ed6\u4eba\u5458\u53ef\u4ee5\u4e0d\u9700\u8981\u5173\u5fc3\u4e00\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u9700\u8981\u5173\u5fc3\u4e0e\u4e4b\u4ea4\u4e92\u7684\u90e8\u5206\uff0c\u5373\u63a5\u53e3\uff1b\u5f53\u7136\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u79cd\u62bd\u8c61\u4e5f\u662f\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u81ea\u8eab\u4ece\u903b\u8f91\u4e0a\u66f4\u597d\u5730\u7ba1\u7406\u81ea\u5df1\u6240\u7f16\u5199\u7684\u4f17\u591a\u4ee3\u7801\u3002\\r\\n\\r\\n\u7136\u800c\u6b63\u662f\u8fd9\u4e9b\u4e3a\u4e86\u5e2e\u52a9\u4eba\u4eec\u7ba1\u7406\u5927\u89c4\u6a21\u8f6f\u4ef6\u6784\u9020\u7684\u673a\u5236\uff0c\u63d0\u5347\u4e86\u7f16\u7a0b\u7684\u95e8\u69db\uff0c\u4f8b\u5982\u975e\u7a0b\u5e8f\u5458\u80af\u5b9a\u53ef\u4ee5\u5f88\u5feb\u7406\u89e3\u7c7b\u548c\u5bf9\u8c61\u7684\u6982\u5ff5\uff0c\u4f46\u662f\u7406\u89e3\u865a\u51fd\u6570\u548c\u591a\u6001\u5c31\u662f\u53e6\u5916\u4e00\u56de\u4e8b\u4e86\u3002\u5c3d\u7ba1\u8fd9\u4e9b\u673a\u5236\u7684\u6dfb\u52a0\u770b\u8d77\u6765\u662f\u7406\u6240\u5f53\u7136\u7684\uff0c\u4f46\u662f\u7a0d\u5fae\u6df1\u5165\u7406\u89e3\u4e00\u4e0b\u7f16\u7a0b\u8bed\u8a00\u7684\u7f16\u8bd1\u8fc7\u7a0b\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e9b\u673a\u5236\u901a\u5e38\u662f\u8ddf\u5e95\u5c42\u7684\u7f16\u8bd1\u673a\u5236\u76f8\u5173\u7684\uff0c\u800c\u73b0\u4ee3\u7684\u7f16\u8bd1\u6d41\u7a0b\u53c8\u51e0\u4e4e\u662f\u4e0e\u5e95\u5c42\u7684\u786c\u4ef6\u67b6\u6784\u6709\u5173\u7684\u3002\u4f8b\u5982\u7ee7\u627f\u7684\u673a\u5236\u548c\u9650\u5236\uff0c\u4f7f\u5f97\u7f16\u8bd1\u5668\u53ef\u4ee5\u8ba1\u7b97\u6b63\u786e\u7684\u51fd\u6570\u5730\u5740\uff0c\u4f8b\u5982\u4f60\u5fc5\u987b\u8981\u4ece\u4e00\u5806\u590d\u6742\u7684\u4ee3\u7801\u4e2d\u62ff\u5230\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u8fd9\u4f7f\u5f97\u4f60\u4e0d\u5f97\u4e0d\u628a\u591a\u4e2a\u4ee3\u7801\u6587\u4ef6\u4ea4\u7ec7\u5728\u4e00\u8d77\uff09\u624d\u80fd\u6b63\u786e\u5730\u8bbf\u95ee\u76f8\u5e94\u7684\u65b9\u6cd5\uff0c\u8fd9\u4f7f\u5f97\u7a0b\u5e8f\u51e0\u4e4e\u603b\u662f\u5145\u6ee1\u590d\u6742\u7684\u5f15\u7528\u5173\u7cfb\uff0c\u5c3d\u7ba1\u8fd9\u770b\u8d77\u6765\u50cf\u662f\u5fc5\u987b\u7684\uff0c\u4f8b\u5982\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u4f46\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u5fc5\u987b\u8981\u8fd9\u6837\u624d\u80fd\u83b7\u5f97\u6b63\u786e\u7684\u5bf9\u8c61\u5730\u5740\uff0c\u4ece\u800c\u8bbf\u95ee\u5176\u4e2d\u7684\u6570\u636e\u548c\u65b9\u6cd5\u3002\u4f46\u662f\u5982\u679c\u4ec5\u4ec5\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5b89\u5168\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u6709\u5f88\u591a\u673a\u5236\uff0c\u4e0d\u662f\u8bf4\u6211\u4e00\u5b9a\u8981\u6bcf\u6b21\u4eb2\u81ea\u5230\u4e00\u4e2a\u5e97\u4e70\u5230\u7684\u4e1c\u897f\u624d\u662f\u7edd\u5bf9\u5b89\u5168\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5feb\u9012\u5458\u672c\u8eab\u662f\u67d0\u79cd\u673a\u5236\u80fd\u591f\u4fdd\u8bc1\u5b89\u5168\u7684\uff0c\u6211\u5c31\u53ef\u4ee5\u4e0d\u7528\u4eb2\u81ea\u53bb\u5e97\u91cc\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6211\u60f3\u8981\u7684\u6570\u636e\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u8981\u5173\u6ce8\u7684\u53ea\u662f\u4ec0\u4e48\u4e1c\u897f\uff08\u6570\u636e\u7c7b\u578b\uff09\uff0c\u800c\u4e0d\u662f\u5b9e\u9645\u7269\u7406\u5730\u5740\uff08\u5bf9\u8c61\u5f15\u7528\uff09\u3002\\r\\n\\r\\n\u4ece\u4e0a\u9762\u7684\u5206\u6790\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u7ed3\u6784\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a\u5176\u4e00\u662f\u5355\u4e2a\u51fd\u6570\u6216\u8005\u5355\u4e2a\u5bf9\u8c61\u672c\u8eab\u7684\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\u7684\u903b\u8f91\uff0c\u5176\u4e2d\u53ef\u80fd\u4ec5\u4ec5\u6d89\u53ca\u6700\u57fa\u672c\u7684\u7b97\u672f\u548c\u903b\u8f91\u8ba1\u7b97\uff1b\u800c\u53e6\u4e00\u90e8\u5206\u5219\u662f\u4e3a\u4e86\u5e2e\u52a9\u8ba1\u7b97\u673a\u7f16\u8bd1\u7cfb\u7edf\uff08\u53ef\u80fd\u4e5f\u662f\u5e2e\u52a9\u7a0b\u5e8f\u5458\u7406\u89e3\uff09\u6784\u9020\u5927\u89c4\u6a21\u8f6f\u4ef6\u63d0\u4f9b\u7684\u4e00\u4e9b\u4fe1\u606f\u3002\\r\\n\\r\\n![img](images\\\\create.png)\\r\\n\\r\\nReality World\u5728\u7a0b\u5e8f\u7ed3\u6784\u65b9\u9762\u7684\u76ee\u6807\uff0c\u5c31\u662f\u8981\u63d0\u4f9b\u4e00\u79cd\u7cfb\u7edf\u67b6\u6784\uff0c\u4f7f\u5f97\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u7ec4\u7ec7\u7684\u590d\u6742\u6027\u88ab\u9690\u85cf\u5728\u7f16\u8bd1\u7cfb\u7edf\u548c\u8fd0\u884c\u65f6\u5185\u90e8\uff0c\u8fd9\u6837\u5f00\u53d1\u8005\u5c31\u53ea\u9700\u8981\u5173\u6ce8\u6700\u57fa\u672c\u7684\u903b\u8f91\u548c\u7b97\u672f\u8ba1\u7b97\u3002\u6211\u4eec\u901a\u8fc7\u63d0\u4f9b\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u6765\u4f7f\u5f97\u8fd0\u884c\u65f6\u7cfb\u7edf\u53ef\u4ee5\u52a8\u6001\u63a8\u5bfc\u51fa\u4e00\u4e9b\u6784\u6210\u5927\u89c4\u6a21\u7a0b\u5e8f\u9700\u8981\u7684\u7ed3\u6784\u3002\\r\\n\\r\\n### \u53bb\u4e2d\u5fc3\u5316\u7684\u6570\u636e\u7ba1\u7406\\r\\n\\r\\n\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u548c\u7a0b\u5e8f\u7ed3\u6784\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u901a\u5e38\u5bb9\u6613\u5ffd\u7565\u7684\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u56e0\u4e3a\u76ee\u524d\u7f16\u7a0b\u7684\u5927\u90e8\u5206\u90fd\u662f\u4e13\u4e1a\u7a0b\u5e8f\u5458\uff0c\u8fd9\u4e2a\u95ee\u9898\u770b\u8d77\u6765\u7406\u6240\u5f53\u7136\u3002\u90a3\u5c31\u662f\u5173\u4e8e\u6570\u636e\u7ba1\u7406\u3002\u6570\u636e\u7ba1\u7406\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u5b83\u65e2\u5173\u4e4e\u7a0b\u5e8f\u7684\u590d\u6742\u5ea6\uff0c\u53c8\u5173\u4e4e\u524d\u9762\u63d0\u5230\u7684\u4e92\u64cd\u4f5c\u6027\u3002\\r\\n\\r\\n\u5728\u5e94\u7528\u5f00\u53d1\u4e2d\uff0c\u5f00\u53d1\u8005\u65e2\u9700\u8981\u7f16\u5199\u903b\u8f91\u4ee3\u7801\uff0c\u8fd8\u9700\u8981\u5904\u7406\u6570\u636e\u7ba1\u7406\uff1a\u6570\u636e\u5728\u4ec0\u4e48\u65f6\u5019\u521d\u59cb\u5316\uff0c\u5728\u90a3\u4e2a\u4ee3\u7801\u903b\u8f91\u5904\u521d\u59cb\u5316\uff0c\u4ece\u54ea\u91cc\u83b7\u53d6\u6570\u636e\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u5bf9\u8c61\u88ab\u4fee\u6539\u4e86\u600e\u6837\u4fdd\u5b58\u6570\u636e\u7b49\u7b49\uff0c\u751a\u81f3\u5305\u62ec\u4e3a\u4e86\u8003\u8651\u7f13\u5b58\u6027\u80fd\u6240\u505a\u51fa\u7684\u4e00\u4e9b\u5904\u7406\uff0c\u8fd9\u4e9b\u5de5\u4f5c\u662f\u975e\u5e38\u7e41\u7410\u7684\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u5f00\u53d1\u8005\u51e0\u4e4e\u603b\u662f\u8fd8\u8981\u5173\u5fc3\u5b58\u50a8\uff0c\u9664\u975e\u662f\u4ec5\u5b58\u50a8\u5728\u672c\u5730\uff0c\u5426\u5219\u8fd8\u9700\u8981\u8bbe\u7f6e\u670d\u52a1\u5668\u5b58\u50a8\u548c\u83b7\u53d6\u4e00\u4e9b\u6570\u636e\u3002\u8fd9\u4e9b\u5de5\u4f5c\u5bf9\u4e8e\u666e\u901a\u7684\u7528\u6237\u5f00\u53d1\u5e94\u7528\u7a0b\u5e8f\u800c\u8a00\u90fd\u662f\u6bd4\u8f83\u56f0\u96be\u7684\u4e8b\u60c5\u3002\\r\\n\\r\\n![img](images\\\\graphql.png)\\r\\n\\r\\nGrapQL\\r\\n\\r\\n\u6240\u4ee5\u7ed3\u5408\u4e0a\u8ff0\u7684\u7a0b\u5e8f\u7ed3\u6784\u5316\u7684\u81ea\u52a8\u7ba1\u7406\uff0c\u4e00\u79cd\u597d\u7684\u7b56\u7565\u662f\u7a0b\u5e8f\u7684\u6570\u636e\u4e5f\u53ef\u4ee5\u81ea\u52a8\u7ba1\u7406\uff0c\u8fd9\u6837\u5c31\u4f7f\u5f00\u53d1\u8005\u4ec5\u5173\u6ce8\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u57fa\u672c\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6240\u6709\u6d89\u53ca\u5230\u6216\u8005\u8bf4\u53ea\u662f\u7f16\u8bd1\u5668\u6216\u7f16\u8bd1\u7cfb\u7edf\u9700\u8981\u7684\u7ba1\u7406\u90fd\u5e94\u8be5\u5c3d\u53ef\u80fd\u4ea4\u7ed9\u8fd0\u884c\u65f6\u3002GraphQL\u5728\u8fd9\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u6bd4\u8f83\u597d\u7684\u5c1d\u8bd5\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8981\u544a\u77e5\u4e00\u4e2a\u60f3\u8981\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u83b7\u53d6\u5230\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u800c\u5c06\u8fd9\u4e9b\u6570\u636e\u80cc\u540e\u7684\u590d\u6742\u903b\u8f91\u9690\u85cf\u8d77\u6765\u3002\\r\\n\\r\\n\u9664\u4e86\u6570\u636e\u672c\u8eab\u7684\u7ba1\u7406\uff0c\u6570\u636e\u8fd8\u6d89\u53ca\u5230\u4e92\u64cd\u4f5c\u6027\u7684\u95ee\u9898\uff0c\u7528\u6237\u5e0c\u671b\u81ea\u5df1\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5176\u4ed6\u5e94\u7528\u65b9\u4fbf\u5730\u8bbf\u95ee\uff0c\u8fd9\u4e9b\u673a\u5236\u90fd\u662f\u548c\u6570\u636e\u7684\u7ba1\u7406\u8fc7\u7a0b\u53ca\u5176\u8bbe\u8ba1\u606f\u606f\u76f8\u5173\u7684\u3002\\r\\n\\r\\n## \u4e3aAI\u800c\u751f\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u9020\u65b9\u6cd5\\r\\n\\r\\n![img](images\\\\5.jpg)\\r\\n\\r\\nReality World\u7684\u7a0b\u5e8f\u7ed3\u6784\u4e0e\u6587\u672c\u5408\u6210\u662f\u7c7b\u4f3c\u7684\\r\\n\\r\\nChatGPT\u5e2d\u5377\u4e86\u6574\u4e2a\u4e16\u754c\uff0c\u6216\u8005\u81f3\u5c11\u662f\u79d1\u6280\u5708\uff0c\u4e0d\u7ba1\u662f\u4ece\u8d44\u672c\uff0c\u56fd\u4f01\uff0c\u6c11\u4f01\uff0c\u7a0b\u5e8f\u5458\u4e2a\u4eba\u7b49\u7b49\u90fd\u662f\u53d7\u5230\u5f88\u5927\u7684\u5f71\u54cd\uff0c\u5f53\u7136\u4e5f\u6709\u50cf\u6211\u4eec\u5c0f\u5b69\u7684\u5988\u5988\uff0c\u4ee5\u53ca\u4ed6\u5988\u5988\u7684\u670b\u53cb\uff0c\u76ee\u524d\u8fd8\u4e0d\u592a\u4e86\u89e3ChatGPT\u662f\u5e72\u4ec0\u4e48\u7684\u3002\\r\\n\\r\\n\u6211\u4e8e2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\u5e76\u5f00\u59cb\u7814\u7a76\u548c\u8bbe\u8ba1Reality World\u7684\u67b6\u6784\uff0c\u90a3\u4e2a\u65f6\u5019\u7684\u70ed\u70b9\u8fd8\u662f\u5143\u5b87\u5b99\u3002\u90a3\u4e2a\u65f6\u5019\uff0c\u7531\u4e8e\u6ca1\u6709\u73b0\u5728\u5927\u6a21\u578b\u7684\u8fd9\u79cd\u80fd\u529b\uff0c\u6211\u4eec\u5f53\u7136\u4e5f\u6ca1\u6709\u4e3b\u8981\u53bb\u601d\u8003AI\u65b9\u9762\u7684\uff0c\u4f46\u662f\u4ece\u6211\u4eec\u81ea\u5df1\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\uff0c\u6211\u548c\u6211\u4eec\u516c\u53f8\u76842\u53f7\u5458\u5de5\uff0c\u57282020\u5e74\u7684\u65f6\u5019\u5c31\u601d\u8003\u548c\u8ba8\u8bba\u5c06\u6765\u600e\u6837\u8ba9AI\u5199\u4ee3\u7801\uff0c\u5f53\u7136\u6211\u4eec\u8bf4\u7684\u4e0d\u662f\u73b0\u5728\u8fd9\u79cd\u57fa\u4e8e\u5927\u6a21\u578b\u6765\u751f\u6210\u6587\u672c\u7684\u65b9\u5f0f\u751f\u6210\u4ee3\u7801\u3002\\r\\n\\r\\n\u4f46\u5927\u6a21\u578b\u786e\u5b9e\u52a0\u901f\u4e86\u6211\u4eec\u7684\u4e00\u4e9b\u60f3\u6cd5\u3002\\r\\n\\r\\n### \u8f6f\u4ef6\u590d\u7528\u4e0e\u53ef\u7ec4\u5408\u6027\\r\\n\\r\\n\u6211\u4eec\u8d77\u521d\u7684\u76ee\u6807\u662f\u8ba9\u666e\u901a\u4eba\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u5e76\u6784\u9020\u4e00\u4e2a\u5b8c\u6574\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u4e5f\u662f\u6211\u4eec\u524d\u9762\u7b2c3\u90e8\u5206\u8ba8\u8bba\u7684\u5185\u5bb9\u3002\u7136\u800c\u6bd4\u8f83\u5de7\u5408\u548c\u60ca\u8bb6\u7684\u662f\uff0c\u81f3\u5c11\u4ece\u6211\u4eec\u7684\u8bbe\u8ba1\u601d\u8def\u4e0a\u770b\uff1a**\u8ba9\u666e\u901a\u4eba\u4f1a\u7f16\u5199\u4ee3\u7801\u4e0e\u8ba9AI\u7f16\u5199\u4ee3\u7801\u7684\u903b\u8f91\u662f\u7c7b\u4f3c\u7684\u3002**\\r\\n\\r\\n\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u53ef\u4ee5\u7528\u8bed\u8a00\u8868\u8ff0\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u4eba\u7c7b\u7684\u4efb\u4f55\u4fe1\u606f\u4e0e\u667a\u6167\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528\u81ea\u7136\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u3002\u7136\u800c\u8bed\u8a00\u6587\u5b57\u662f\u4e00\u79cd\u9762\u5411\u4eba\u7c7b\u7684\u4fe1\u606f\u8f7d\u4f53\uff0c\u5b83\u662f\u4e3a\u4e86\u4fbf\u4e8e\u4eba\u7c7b\u4e4b\u95f4\u8fdb\u884c\u4fe1\u606f\u4ea4\u6d41\u800c\u8bbe\u8ba1\u7684\uff0c\u6240\u4ee5\u5b83\u53ef\u80fd\u4e0d\u90a3\u4e48\u4e25\u8c28\uff0c\u751a\u81f3\u6ca1\u6709\u592a\u591a\u7ed3\u6784\u6027\uff0c\u4eba\u4eec\u4e4b\u95f4\u9700\u8981\u4fe1\u606f\u7f16\u89e3\u7801\uff0c\u7f16\u89e3\u7801\u7684\u6548\u7387\u548c\u80fd\u529b\u53ef\u80fd\u5dee\u5f02\u90fd\u975e\u5e38\u5de8\u5927\u3002\u800c\u7a0b\u5e8f\uff0c\u5219\u662f\u5728\u81ea\u7136\u8bed\u8a00\u57fa\u7840\u4e4b\u4e0a\u52a0\u5165\u66f4\u591a\u7684\u7ed3\u6784\u6027\uff0c\u5b83\u5728\u8868\u8ff0\u548c\u8bb0\u8f7d\u903b\u8f91\u7684\u540c\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4e0e\u8ba1\u7b97\u673a\u548c\u5176\u4ed6\u7a0b\u5e8f\u8fdb\u884c\u6c9f\u901a\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u7c7b\u5927\u8111\u4e2d\u7684\u903b\u8f91\u4e0d\u5149\u53ef\u4ee5\u7528\u4e8e\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u6d41\uff0c\u8fd8\u53ef\u4ee5\u66f4\u76f4\u63a5\u5730\u8f6c\u5316\u4e3a\u751f\u4ea7\u529b\u3002\\r\\n\\r\\n\u7136\u800c\u8981\u8ba9AI\u80fd\u591f\u751f\u6210\u4ee3\u7801\uff0c\u8fd9\u4ef6\u4e8b\u60c5\u80af\u5b9a\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u5f53\u7136\u7531\u4e8eChatGPT\u7684\u51fa\u73b0\u76f8\u4fe1\u73b0\u5728\u5927\u90e8\u5206\u7a0b\u5e8f\u5458\u90fd\u80fd\u591f\u611f\u53d7\u5230AI\u7684\u4ee3\u7801\u751f\u6210\u80fd\u529b\uff0c\u6709\u4e9b\u4eba\u6bd4\u8f83\u575a\u4fe1AI\u80fd\u591f\u4ee3\u66ff\u7a0b\u5e8f\u5458\u751f\u6210\u7a0b\u5e8f\uff0c\u6709\u4e9b\u4eba\u5219\u60b2\u89c2\u4e00\u4e9b\uff0c\u81f3\u5c11\u5728\u77ed\u671f\u5185\u3002\\r\\n\\r\\n\u8fd9\u91cc\u6682\u4e14\u4e0d\u4e89\u8bbaAI\u5230\u5e95\u80fd\u4e0d\u80fd\u6216\u8005\u4ec0\u4e48\u65f6\u5019\u66ff\u4ee3\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u56de\u5230\u95ee\u9898\u672c\u8eab\u3002\u4f20\u7edf\u7684\u6587\u672c\u5408\u6210\uff0c\u8ba1\u7b97\u7684\u662f\u6587\u5b57\u4e0e\u6587\u5b57\u4e4b\u95f4\uff0c\u53e5\u5b50\u4e0e\u53e5\u5b50\u4e4b\u95f4\u7684\u7ec4\u5408\u6982\u7387\uff0c\u8fd9\u91cc\u6709\u4e24\u4e2a\u4e8b\u60c5\u503c\u5f97\u6ce8\u610f\uff1a\u7b2c\u4e00\u662f\u4efb\u4f55\u5b57\u4e4b\u95f4\u90fd\u53ef\u4ee5\u7ec4\u5408\uff0c\u6240\u4ee5ChatGPT\u603b\u662f\u53ef\u4ee5\u7ed9\u6211\u4eec\u7b54\u6848\uff0c\u54ea\u6015\u5176\u4e2d\u7684\u53e5\u5b50\u7ec4\u5408\u548c\u903b\u8f91\u662f\u5b8c\u5168\u9519\u8bef\u7684\uff1b\u7b2c\u4e8c\u662f\u4e00\u822c\u5e38\u7528\u4e8e\u8868\u8ff0\u6b63\u786e\u8bed\u6cd5\u548c\u8bed\u4e49\u7684\u54ea\u4e9b\u6587\u5b57\u4fe1\u606f\u662f\u975e\u5e38\u591a\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4ChatGPT\u7406\u89e3\u6211\u4eec\u4e00\u822c\u7684\u6bd4\u8f83\u5927\u4f17\u5316\u7684\u8bed\u4e49\u662f\u5f88\u5bb9\u6613\u505a\u5230\u7684\u3002\\r\\n\\r\\n\u8ba1\u7b97\u673a\u7a0b\u5e8f\u5728\u8fd9\u4e24\u4e2a\u5c42\u9762\u90fd\u4e0e\u4e00\u822c\u7684\u6587\u672c\u77e5\u8bc6\u4fe1\u606f\u4e0d\u540c\uff1a\u9996\u5148\u4e24\u6bb5\u4ee3\u7801\u662f\u4e0d\u80fd\u7b80\u5355\u5408\u6210\u7684\uff0c\u4e24\u4e2a\u4ee3\u7801\u4e4b\u95f4\u5728\u5355\u7eaf\u5730\u50cf\u4e24\u6bb5\u6587\u5b57\u653e\u5728\u4e00\u8d77\u4e4b\u5916\uff0c\u8fd8\u9700\u8981\u5904\u7406\u53c2\u6570\u7684\u6570\u91cf\uff0c\u53c2\u6570\u7684\u540d\u79f0\uff0c\u7c7b\u578b\uff0c\u53d8\u91cf\u4ece\u54ea\u91cc\u83b7\u53d6\uff0cAPI\u4ece\u54ea\u91cc\u83b7\u53d6\u7b49\u7b49\uff0c\u8fd9\u8fdc\u8fdc\u8d85\u51fa\u7b80\u5355\u6587\u5b57\u5408\u6210\u7684\u8303\u56f4\u3002\u4f60\u53ef\u4ee5\u5408\u6210\u4e00\u4e2a\u6587\u672c\u7ec4\u5408\u7684\u6e90\u4ee3\u7801\u7ed3\u679c\uff0c\u4f46\u662f\u5176\u4e2d\u7684\u903b\u8f91\u53ef\u80fd\u5b8c\u5168\u662f\u9519\u8bef\u7684\uff0c\u51fd\u6570\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u53c2\u6570\u662f\u9519\u8bef\u7684\u3002\u56e0\u6b64\u76ee\u524d\u6765\u8bb2\uff0c\u5927\u90e8\u5206AI\u8fd8\u662f\u7528\u4e8e\u8f85\u52a9\u6bd4\u8f83\u5c40\u90e8\u3001\u72ec\u7acb\u7684\u4ee3\u7801\u751f\u6210\uff0c\u68c0\u67e5\uff0c\u63d0\u793a\u7b49\u7b49\uff0c\u8ddd\u79bb\u6784\u9020\u590d\u6742\u4e00\u70b9\u7684\u903b\u8f91\u663e\u7136\u8fd8\u7f3a\u4e4f\u4e00\u4e9b\u57fa\u7840\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u59a8\u788d\u5b83\u73b0\u5728\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u4e0d\u9519\u7684\u52a9\u624b\u3002\\r\\n\\r\\n\u6211\u4eec\u5728Reality World\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u4e2d\uff0c\u4e3a\u4e86\u8981\u8ba9\u666e\u904d\u7528\u6237\u53ef\u4ee5\u6784\u9020\u7a0b\u5e8f\uff0c\u5c06\u7a0b\u5e8f\u7684\u6574\u4e2a\u6784\u9020\u8fc7\u7a0b\u505a\u4e86\u591a\u5904\u8c03\u6574\uff0c\u4ece\u7c7b\u578b\u5b9a\u4e49\uff0c\u6570\u636e\u521d\u59cb\u5316\u548c\u7ba1\u7406\uff0c\u4e92\u64cd\u4f5c\u6027\uff0c\u7a0b\u5e8f\u7ed3\u6784\u7684\u63a8\u6f14\uff0c\u7ebf\u7a0b\u9694\u79bb\u7b49\u7b49\u3002\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\u5c31\u662f\u7ec4\u5408\u6027\uff0c\u8fd9\u79cd\u7ec4\u5408\u6027\u4f7f\u5f97\u4e24\u4e2a\u76f8\u5173\u7684\u7ec4\u4ef6\uff0c\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u6dfb\u52a0\u4efb\u4f55\u53c2\u6570\u6216\u8005\u8f93\u5165\u8f93\u51fa\u7684\u8bbe\u7f6e\uff0c\u5c31\u53ef\u4ee5\u6b63\u786e\u5730\u6784\u9020\u7a0b\u5e8f\uff0c\u4f8b\u5982\u5982\u4e0b\u7684\u8fd9\u6bb5\u590d\u6742\u7684\u903b\u8f91\uff0c\u6574\u4e2aGraph\u7684\u8282\u70b9\u662f\u4e0d\u9700\u8981\u7528\u6237\u8fde\u63a5\u7684\uff0c\u5168\u90e8\u662f\u81ea\u52a8\u751f\u6210\u3002\\r\\n\\r\\n![img](images\\\\4.jpg)\\r\\n\\r\\n\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fde\u63a5\u5173\u7cfb\u662f\u81ea\u52a8\u63a8\u5bfc\u7684\\r\\n\\r\\n\u8fd9\u6837\u7684\u7ec4\u5408\u6027\u770b\u8d77\u6765\u662f\u4e0d\u53ef\u601d\u8bae\u7684\uff0c\u8fd9\u91cc\u6211\u4e0d\u4f1a\u8ba8\u8bba\u5177\u4f53\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fd9\u6837\u60f3\u8c61\u4e00\u4e0b\uff1a\u7f16\u8bd1\u5668\u5bf9\u4e8e\u4e00\u4e2a\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\uff0c\u672c\u6765\u5c31\u662f\u9996\u5148\u5f53\u6210\u4e00\u4e2a\u4e2a\u72ec\u7acb\u7684\u6a21\u5757\u8fdb\u884c\u7f16\u8bd1\u7684\uff0c\u53ea\u4e0d\u8fc7\u7f16\u8bd1\u5668\u9664\u4e86\u7f16\u8bd1\u6bcf\u4e2a\u6307\u4ee4\u672c\u8eab\uff0c\u8fd8\u4f7f\u7528\u4e00\u4e9b\u7b26\u53f7\u8868\u8bb0\u8f7d\u4e86\u6240\u6709\u5916\u90e8\u6a21\u5757\u5f15\u7528\u7684\u5173\u7cfb\u548c\u5730\u5740\uff0c\u7136\u540e\u5728\u94fe\u63a5\u9636\u6bb5\u5c06\u8fd9\u4e9b\u5730\u5740\u4fee\u6539\u4e3a\u6700\u7ec8\u7684\u7edd\u5bf9\u5730\u5740\u3002\u4ece\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\uff0c\u7a0b\u5e8f\u7684\u7ed3\u6784\u662f\u6709\u53ef\u80fd\u4ee5\u66f4\u5e95\u5c42\u7684\u65b9\u5f0f\u53bb\u5b8c\u6210\uff0c\u800c\u4e0d\u662f\u628a\u8fd9\u90e8\u5206\u4ea4\u7ed9\u7a0b\u5e8f\u5458\u3002\\r\\n\\r\\n\u8fd9\u6837\u7684\u7ec4\u5408\u80fd\u529b\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u53d8\u6210\u4e86\u5355\u7eaf\u7684\u5408\u6210\uff0c\u6ca1\u9519\uff0c\u8fd9\u4e2a\u5408\u6210\u7684\u65b9\u5f0f\u8ddf\u6587\u672c\u5408\u6210\u662f\u975e\u5e38\u76f8\u4f3c\u7684\uff1a\u5b83\u4eec\u4ec5\u4ec5\u662f\u653e\u5230\u4e00\u8d77\uff0c\u4e0d\u9700\u8981\u6307\u5b9a\u989d\u5916\u7684\u7a0b\u5e8f\u7ed3\u6784\u4fe1\u606f\uff0c\u4f8b\u5982\u53c2\u6570\uff0c\u53d8\u91cf\uff0c\u51fd\u6570\u5730\u5740\u7b49\u7b49\u3002\u8fd9\u6837\u6211\u4eec\u5c31\u6709\u673a\u4f1a\u8ba9AI\u53bb\u751f\u6210\u7a0b\u5e8f\uff0c\u8fd9\u91ccAI\u53ea\u9700\u8981\u4ece\u4e00\u822c\u7684\u6587\u5b57\u610f\u4e49\u4e0a\u53bb\u7406\u89e3\u7ec4\u4ef6\u7684\u8bed\u4e49\uff0c\u5e76\u7ed9\u51fa\u7ec4\u4ef6\u5408\u6210\u5e8f\u5217\uff0c\u800c\u5e95\u5c42\u7684\u8fd0\u884c\u65f6\u5f15\u64ce\u5c06\u8fd9\u4e9b\u5e8f\u5217\u8f6c\u5316\u4e3a\u771f\u6b63\u7684\u7a0b\u5e8f\u3002\\r\\n\\r\\n\u4e0e\u76f4\u63a5ChatGPT\u6784\u9020\u7a0b\u5e8f\u4ee3\u7801\u4e0d\u540c\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u4ee3\u7801\u4e00\u65e6\u88ab\u6784\u9020\uff0c\u5c31\u662f\u6b63\u786e\u7684\uff0c\u53ef\u4ee5\u8fd0\u884c\u7684\uff0c\u800c\u4e0d\u9700\u8981\u4eba\u53bb\u68c0\u67e5\u5176\u4e2d\u53ef\u80fd\u5b58\u5728\u7684\u7a0b\u5e8f\u903b\u8f91\u7684\u9519\u8bef\u3002\\r\\n\\r\\n### \u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\\r\\n\\r\\n\u663e\u7136\uff0c\u4e0e\u76f4\u63a5\u8ba9AI\u6784\u9020\u590d\u6742\u7684\u7a0b\u5e8f\u903b\u8f91\u76f8\u6bd4\uff0c\u66f4\u597d\u7684\u4f7f\u7528\u65b9\u5f0f\u53ef\u80fd\u662fAutoGPT\u6216\u8005OpenAI\u7684\u63d2\u4ef6\u7cfb\u7edf\uff0c\u5728\u8fd9\u79cd\u67b6\u6784\u4e2d\uff0cAI\u66f4\u591a\u662f\u8d1f\u8d23\u6bd4\u8f83\u901a\u7528\u7684\u4e00\u4e9b\u8bed\u4e49\u7406\u89e3\uff0c\u7136\u540e\u628a\u5177\u4f53\u7684\u4e00\u4e9b\u4e0e\u9886\u57df\u7cfb\u7edf\u7684\u4ea4\u4e92\u4ea4\u7ed9\u4e13\u95e8\u7684\u63d2\u4ef6\u53bb\u89e3\u51b3\u3002\\r\\n\\r\\n\u7136\u800c\u5728OpenAI\u7684Plugin\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2aPlugin\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u5e94\u7528\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u63cf\u8ff0\u597d\u7684\u8c03\u7528\u903b\u8f91\u4f7f\u5f97ChatGPT\u53ef\u4ee5\u6b63\u786e\u5730\u8c03\u7528\u5404\u4e2a\u5e94\u7528\u8f6f\u4ef6\u7684\u63a5\u53e3\uff0c\u4f46\u5982\u679c\u4f60\u7684\u4f7f\u7528\u672c\u8eab\u662f\u8981\u5728\u591a\u4e2aplugin\u4e4b\u95f4\u5efa\u7acb\u4e00\u4e9b\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u548c\u6d41\u7a0b\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u60f3\u6784\u9020\u4efb\u610f\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u628a\u6bcf\u4e2aplugin\u63a5\u53e3\u5f53\u4f5c\u7ec4\u4ef6\uff0c\u8fd9\u5c31\u53c8\u4f1a\u56de\u5230\u8ba9AI\u7f16\u5199\u903b\u8f91\u4ee3\u7801\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u76f8\u5bf9\u4e8e\u8fd9\u79cdPlugin\u7cfb\u7edf\uff0cReality World\u63d0\u4f9b\u7684\u4e0d\u662f\u4e00\u4e2a\u5355\u4e2aplugin\uff0c\u800c\u662f\u4e00\u79cd\u901a\u7528\u7f16\u7a0b\u80fd\u529b\uff0c\u5b83\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u4e00\u79cd\u9762\u5411AI\u7684\u7f16\u7a0b\u7cfb\u7edf\uff0c\u56e0\u4e3aAI\u53d1\u51fa\u7684\u6587\u672c\u5e8f\u5217\uff0c\u4f1a\u88abReality World\u5f53\u4f5c\u8f93\u5165\uff0c\u7136\u540e\u6309\u7167\u7a0b\u5e8f\u6784\u9020\u7684\u903b\u8f91\u53bb\u68c0\u7d22\u76f8\u5e94\u7684\u7ec4\u4ef6\u5e76\u7ec4\u5408\u6784\u9020\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u8981\u4e48\u662f\u6784\u9020\u4e0d\u51fa\u6765\u7684\uff0c\u8981\u4e48\u5c31\u662f\u81f3\u5c11\u80fd\u591f\u6210\u529f\u8fd0\u884c\u7684\uff0c\u800c\u5269\u4e0b\u7684\u6b63\u786e\u6027\u95ee\u9898\u5c31\u53d6\u51b3\u4e8e\u7ec4\u4ef6\u63cf\u8ff0\u7684\u51c6\u786e\u6027\u548cAI\u5bf9\u8bed\u4e49\u7684\u7406\u89e3\u4e86\u3002\\r\\n\\r\\n## \u62e5\u62b1Rust\\r\\n\\r\\n\u6211\u539f\u672c\u4ee5\u4e3a\u7684\u5f00\u53d1\u5468\u671f\u8fd8\u662f\u4f1a\u6bd4\u8f83\u957f\u7684\uff0c\u6bd5\u7adf\u8bbe\u8ba1\u7684\u7cfb\u7edf\u8bbe\u8ba1\u8fd8\u662f\u975e\u5e38\u590d\u6742\u7684\u3002\u65e9\u5148\u6211\u4f7f\u7528\u7684\u662fC++/C\u8fdb\u884c\u5f00\u53d1\uff0c\u8fdb\u884c\u4e86\u4e00\u4e9b\u7b80\u5355\u7684\u8bed\u8a00\u5305\u88c5\u548c\u7f16\u8bd1\u6d41\u7a0b\u5b9a\u5236\u3002\u56e0\u4e3a\u6211\u4eec2\u53f7\u5458\u5de5\u4e00\u76f4\u662fRust\u7231\u597d\u8005\uff0c\u4e00\u76f4\u5728\u9f13\u52a8\u6211\u4f7f\u7528Rust\uff0c\u867d\u7136\u4e4b\u524d\u770b\u8fc7Rust\u7684\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u4f46\u662f\u611f\u89c9\u8fd8\u662f\u6ca1\u6709\u7279\u522b\u7684\u52a8\u529b\u53bb\u5b8c\u5168\u5207\u6362\u5230Rust\u3002\\r\\n\\r\\n\u540e\u6765\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4f7f\u7528Rust\u8fdb\u884c\u5f00\u53d1\uff0c\u5f00\u59cb\u4e5f\u662f\u6709\u4e9b\u4e0d\u4e60\u60ef\uff0c\u4f46\u662f\u5728\u9010\u6b65\u5b66\u4e60\u548c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u611f\u53d7\u5230\u4e86Rust\u7684\u597d\u5904\uff0c\u8fd9\u91cc\u7ed9\u5927\u5bb6\u5206\u4eab\u548c\u63a8\u8350\u4e00\u4e0b\u3002\\r\\n\\r\\nRust\u5bf9\u6211\u800c\u8a00\u6700\u5927\u7684\u597d\u5904\u548c\u4f53\u9a8c\u662f\uff0c\u8fed\u4ee3\u901f\u5ea6\u6bd4\u8f83\u5feb\uff0c\u8fd9\u7b26\u5408\u6211\u73b0\u5728\u7684\u9700\u6c42\u3002\u53ea\u8981\u4ee3\u7801\u7f16\u8bd1\u901a\u8fc7\uff0c\u51e0\u4e4e\u4e0d\u4f1a\u82b1\u65f6\u95f4\u53bb\u6392\u67e5\u4e00\u4e9b\u6bd4\u8f83\u8be1\u5f02\uff0c\u751a\u81f3\u9700\u8981\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u65ad\u6b65\u8c03\u8bd5\u624d\u80fd\u53d1\u73b0\u95ee\u9898\u7684bug\uff0c\u4e00\u822c\u6709bug\u5c31\u57fa\u672c\u4e0a\u5927\u90e8\u5206\u8fd8\u662f\u903b\u8f91\u95ee\u9898\uff0c\u800c\u4e14Rust\u7f16\u8bd1\u5668\u53ef\u4ee5\u6bd4\u8f83\u7cbe\u51c6\u5730\u544a\u8bc9\u4f60\u95ee\u9898\u7684\u4f4d\u7f6e\uff0c\u57fa\u672c\u4e0a\u4e00\u770b\u63d0\u793a\u5c31\u77e5\u9053\u8be5\u600e\u4e48\u6539\u4ee3\u7801\u4e86\u3002\\r\\n\\r\\n\u5f53\u7136\u7f3a\u70b9\u4e3b\u8981\u662f\u5927\u5bb6\u8ba8\u8bba\u6bd4\u8f83\u591a\u7684\u9650\u5236\u4e86\uff0c\u4f60\u5f97\u5f88\u5c0f\u5fc3\u7ffc\u7ffc\u5730\u8bbe\u8ba1\u6574\u4e2a\u7a0b\u5e8f\u7684\u67b6\u6784\uff0c\u5982\u679c\u50cf\u4f20\u7edfC++\u90a3\u6837\u5230\u5904\u662f\u76f8\u4e92\u5f15\u7528\u663e\u7136\u51e0\u4e4e\u80af\u5b9a\u662f\u4f60\u5b8c\u5168\u6ca1\u6cd5\u901a\u8fc7\u7f16\u8bd1\u5668\uff0c\u4f60\u5f97\u8bbe\u8ba1\u597d\u6574\u4e2a\u7a0b\u5e8f\u5bf9\u8c61\u7684\u7ed3\u6784\uff0c\u8fd9\u91cc\u63a8\u8350Bevy\u5f15\u64ce\u5c31\u662f\u975e\u5e38\u597d\u7684\u67b6\u6784\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u51e0\u4e4e\u80fd\u89e3\u51b3\u5927\u90e8\u5206\u76f8\u4e92\u5f15\u7528\u7684\u95ee\u9898\u3002\\r\\n\\r\\n\u7b2c\u4e8c\u4e2a\u6bd4\u8f83\u5927\u7684\u95ee\u9898\u662f\u591a\u6b21\u5f15\u7528\u548c\u501f\u7528\u7684\u95ee\u9898\u4e86\uff0c\u8fd9\u4e2a\u95ee\u9898\u76f8\u5bf9\u597d\u89e3\u51b3\u4e00\u70b9\uff0c\u9996\u5148\u67b6\u6784\u597d\u4f1a\u5c11\u6389\u5f88\u591a\u8fd9\u79cd\u95ee\u9898\uff1b\u5176\u6b21\u5bf9\u4e8e\u5c40\u90e8\u7684\u4e00\u4e9b\u65b9\u6cd5\uff0c\u5b9e\u5728\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u4e07\u80fd\u5927\u6cd5\u5c31\u662f\u590d\u5236\u6570\u636e\u5c31\u597d\uff0c\u8fd9\u4e2a\u4e5f\u4e0d\u9700\u8981\u5b8c\u5168\u56de\u907f\uff0c\u6bd5\u7adf\u5728C++\u4e2d\u4e5f\u7ecf\u5e38\u4f1a\u5b58\u5728\u5bf9\u8c61\u590d\u5236\uff1b\u518d\u6709\u7a0d\u5fae\u590d\u6742\u4e00\u70b9\u5c31\u662f\u4f7f\u7528move\uff0c\u5148\u5c06\u6570\u636emove\u51fa\u6765\uff0c\u7136\u540e\u8fdb\u884c\u64cd\u4f5c\u4e4b\u540e\u518d\u586b\u56de\u53bb\uff0c\u5982\u679c\u4f60\u80fd\u4fdd\u8bc1\u6ca1\u6709\u5e76\u53d1\u95ee\u9898\uff0c\u8fd9\u79cd\u601d\u8def\u4e5f\u662f\u4e00\u79cd\u65b9\u6cd5\u3002\\r\\n\\r\\n\u6700\u540e\uff0c\u5173\u4e8e\u6709\u4e9b\u4eba\u4f1a\u89c9\u5f97\uff0c\u50cfRust\u8fd9\u6837\u5f3a\u8feb\u5f00\u53d1\u8005\u8fc7\u65e9\u5173\u6ce8\u67b6\u6784\u4f1a\u5f71\u54cd\u5feb\u901f\u8fed\u4ee3\u3002\u8fd9\u4e00\u70b9\u6211\u4e0d\u662f\u5f88\u8d5e\u540c\uff0c\u56e0\u4e3a\u4efb\u4f55\u4e00\u4e2a\u9879\u76ee\uff0c\u5feb\u901f\u8fed\u4ee3\u4e5f\u662f\u8981\u6b63\u786e\u8fd0\u884c\u7684\uff0c\u800c\u4e14\u5982\u679c\u9879\u76ee\u672c\u8eab\u601d\u8003\u7740\u8db3\u591f\u591a\uff0c\u6216\u8005\u9879\u76ee\u6700\u7ec8\u80af\u5b9a\u662f\u8981\u4e0a\u7ebf\u4f7f\u7528\u7684\uff0c\u6211\u89c9\u5f97\u6162\u4e00\u70b9\u4e00\u8fb9\u8fed\u4ee3\u4e00\u8fb9\u5c31\u628a\u4ee3\u7801\u67b6\u6784\u5199\u7684\u66f4\u597d\uff0c\u4e5f\u8bb8\u6700\u7ec8\u662f\u4e00\u4ef6\u66f4\u597d\u7684\u4e8b\u60c5\u3002\\r\\n\\r\\n## \u6211\u8fd9\u4e00\u5e74\u7684\u521b\u4f5c\u8fc7\u7a0b\\r\\n\\r\\n\u6211\u4ece2022\u5e744.30\u65e5\u4ece\u534e\u4e3a\u79bb\u804c\uff0c\u51e0\u4e4e\u6574\u6574\u4e00\u5e74\u65f6\u95f4\u5168\u90e8\u90fd\u5728\u601d\u8003\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\uff0c\u4ee5\u53ca\u540e\u671f\u7684\u5f00\u53d1\u3002\u521a\u5f00\u59cb2\u4e2a\u6708\uff0c\u601d\u8def\u8fd8\u4e0d\u662f\u7279\u522b\u6e05\u6670\uff0c\u53ea\u662f\u5728\u4e0d\u505c\u3001\u75af\u72c2\u5730\u770b\u4e66\uff0c\u6211\u51e0\u4e4e\u628a\u6240\u6709\u80fd\u4e70\u5230\u7684\u4e2d\u6587\u8ddf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u76f8\u5173\u7684\u4e66\u90fd\u770b\u4e86\u4e00\u9762\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u9010\u5b57\u9010\u53e5\u6162\u6162\u770b\uff0c\u90fd\u662f\u98de\u5feb\u5730\u6d4f\u89c8\uff0c\u5e76\u4e14\u8111\u888b\u4e2d\u9ad8\u901f\u8fd0\u8f6c\u7740\uff0c\u968f\u65f6\u90fd\u60f3\u7740\u6211\u8111\u888b\u4e2d\u7684\u54ea\u4e9b\u95ee\u9898\u600e\u4e48\u89e3\u51b3\uff0c\u8fd9\u6837\u5e26\u7740\u95ee\u9898\u770b\u4e66\u7684\u597d\u5904\u662f\uff0c\u53ea\u8981\u77e5\u8bc6\u4e4b\u95f4\u6709\u4e00\u70b9\u7684\u76f8\u5173\u6027\uff0c\u5c31\u80fd\u591f\u975e\u5e38\u654f\u9510\u5730\u6355\u6349\u5e76\u5173\u8054\u4e0a\uff0c\u7136\u540e\u518d\u5bf9\u8fd9\u5757\u77e5\u8bc6\u8fdb\u884c\u6df1\u5165\u5b66\u4e60\uff0c\u6700\u7ec8\u53ef\u4ee5\u8df3\u51fa\u5355\u7eaf\u7684\u77e5\u8bc6\u672c\u8eab\u53bb\u5e94\u7528\u8fd9\u4e9b\u77e5\u8bc6\uff0c\u751a\u81f3\u5c06\u4e00\u79cd\u77e5\u8bc6\u7684\u601d\u7ef4\u7528\u6765\u89e3\u51b3\u53e6\u4e00\u4e2a\u95ee\u9898\u3002\\r\\n\\r\\n\u6574\u4e2a\u4e00\u5e74\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8d85\u8fc750\u672c\u76f8\u5173\u7684\u4e66\u7c4d\uff0c\u5e76\u4e14\u5927\u90e8\u5206\u6bd4\u8f83\u76f8\u5173\u7684\u77e5\u8bc6\u90fd\u662f\u53cd\u590d\u9605\u8bfb\u7684\u3002\\r\\n\\r\\n\u65e9\u671f\u6211\u4e60\u60ef\u4f7f\u7528iPhone\u7684\u5907\u5fd8\u5f55app\u8bb0\u5f55\u4e00\u4e9b\u60f3\u6cd5\uff0c\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u65b9\u4fbf\uff0c\u4efb\u4f55\u65f6\u5019\u60f3\u5230\u4e00\u70b9\u4e1c\u897f\u5c31\u53ef\u4ee5\u8bb0\u4e0b\u6765\uff0c\u5f88\u591a\u65f6\u5019\u665a\u4e0a\u534a\u591c\u90fd\u4f1a\u8d77\u6765\u8bb0\u5f55\uff0c\u786e\u5b9e\u6709\u4e9b\u4e1c\u897f\u5f88\u5feb\u5c31\u662f\u53ef\u4ee5\u5fd8\u8bb0\u7684\u3002\u540e\u6765\u4f53\u7cfb\u6bd4\u8f83\u5b8c\u6574\u7684\u65f6\u5019\u6211\u9010\u6b65\u5c06\u8fd9\u4e9b\u4fe1\u606f\u6574\u7406\u5230Markdown\u4e2d\uff0c\u5e76\u9010\u6b65\u79ef\u7d2f\uff0c\u73b0\u5728\u6574\u4e2a\u7cfb\u7edf\u7684\u8bbe\u8ba1\u548c\u601d\u8003\u5df2\u7ecf\u8d85\u8fc722\u4e07\u5b57\uff0c\u6574\u6574400\u591a\u9875\uff0c\u91cc\u9762\u5305\u542b\u4e86\u975e\u5e38\u591a\u7684\u6280\u672f\u7406\u89e3\u548c\u601d\u8003\u3002\u7b49\u9002\u5f53\u7684\u65f6\u5019\u6211\u4f1a\u5c06\u8fd9\u4e9b\u5185\u5bb9\u6574\u7406\u6210\u56fe\u4e66\u51fa\u7248\u3002\\r\\n\\r\\n\u8c46\u74e3\u4e0a\u6211\u5217\u4e86\u4e2atop 10\u7684\u56fe\u4e66\u699c\u5355\uff0c\u7f16\u7a0b\u76f8\u5173\u7684\u662f\uff1a\u300a\u7f16\u8bd1\u539f\u7406\u300b\u3001\u300aErlang\u7a0b\u5e8f\u8bbe\u8ba1\uff08\u7b2c2\u7248\uff09\u300b\u3001\u300a\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u6a21\u5f0f\u300b\u3001\u300a\u6e38\u620f\u673a\u5236\u300b\u3001\u300a\u94fe\u63a5\u5668\u4e0e\u52a0\u8f7d\u5668\u300b\u3001\u300aData-oriented design\u300b\u3001\u300a\u51fd\u6570\u5f0f\u7f16\u7a0b\u601d\u7ef4\u300b\u3001\u300a\u51e4\u51f0\u67b6\u6784\u300b\u3002\\r\\n\\r\\n\u9664\u4e86\u56fe\u4e66\uff0c\u4e00\u4e9b\u6280\u672f\u67b6\u6784\u5bf9\u6211\u5f71\u54cd\u6bd4\u8f83\u5927\u7684\u662f\uff1aErlang\u3001USD\u3001LLVM\u3001MLIR\u3001ECS\u3001Web Assembly\u3001Machinations\u3001\u300a\u5821\u5792\u4e4b\u591c\u300b\u3001Snapchat\u3001Bevy\u7b49\u7b49\u3002\\r\\n\\r\\n## \u5173\u4e8e\u5546\u4e1a\u6a21\u5f0f\\r\\n\\r\\n\u53ef\u80fd\u5f88\u591a\u670b\u53cb\u4f1a\u5173\u5fc3\u4f60\u7684\u5546\u4e1a\u6a21\u5f0f\u662f\u4ec0\u4e48\uff0c\u8fd9\u91cc\u6211\u4e0d\u60f3\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u76ee\u524d\u53ea\u8ddf\u6295\u8d44\u4eba\u4e4b\u95f4\u624d\u4f1a\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u5f53\u7136\u6709\u5f88\u591a\u601d\u8003\uff0c\u4f46\u662f\u5728\u7f3a\u4e4f\u5f88\u591a\u80cc\u666f\u4e0b\uff0c\u6211\u89c9\u5f97\u73b0\u5728\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u8fd8\u662f\u592a\u65e9\u3002\u5f53\u7136\u6211\u4e0d\u4f1a\u4ecb\u610f\u5927\u5bb6\u8ba8\u8bba\u3002\\r\\n\\r\\n## \u53c2\u4e0eReality World\u5f00\u53d1\\r\\n\\r\\n\u6beb\u65e0\u7591\u95ee\uff0cReality World\u6d89\u53ca\u5230\u5f88\u591a\u6280\u672f\u601d\u7ef4\uff0c\u751a\u81f3\u5305\u542b\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u6211\u76f8\u4fe1\u53c2\u4e0e\u8fd9\u4e2a\u9879\u76ee\u672c\u8eab\u80af\u5b9a\u4f1a\u5b66\u5230\u5f88\u591a\u77e5\u8bc6\u3002\u4f46\u73b0\u9636\u6bb5\u8fd8\u4e0d\u80fd\u6b63\u5f0f\u516c\u5e03\uff0c\u6211\u4eec\u9884\u8ba1\u4f1a\u57286\u4e2a\u6708\u5de6\u53f3\uff0c\u5728\u5185\u90e8\u8fed\u4ee3\u4e00\u4e9b\u7248\u672c\u518d\u6b63\u5f0f\u516c\u5e03\uff0c\u6240\u4ee5\u5728\u8fd9\u4e2a\u9636\u6bb5\u6211\u4e5f\u4e0d\u4f1a\u5728\u516c\u4f17\u573a\u5408\u8ba8\u8bba\u592a\u591a\u5177\u4f53\u7684\u6280\u672f\u7ec6\u8282\u3002\u56e0\u4e3a\u5728\u4e2d\u56fd\u505a\u8fd9\u79cd\u4e8b\u60c5\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\uff0c\u7f51\u7edc\u4e0a\u4f1a\u6709\u5404\u79cd\u5404\u6837\u7684\u58f0\u97f3\uff0c\u6211\u4e0d\u5e0c\u671b\u53d7\u8fd9\u79cd\u5e72\u6270\uff0c\u4e3a\u4e86\u628a\u8fd9\u4ef6\u4e8b\u60c5\u505a\u6210\uff0c\u9700\u8981\u4e00\u9897\u5b89\u9759\u7684\u5fc3\u3002\\r\\n\\r\\n\u5982\u679c\u4f60\u5bf9Reality World\u611f\u5174\u8da3\uff0c\u4f60\u53ef\u4ee5\u8054\u7cfb\u6211\uff0c\u79c1\u4eba\u4e4b\u95f4\u6709\u65f6\u5019\u6211\u4f1a\u8ba8\u8bba\u4e00\u4e9b\u6280\u672f\u3002\\r\\n\\r\\n## \u5173\u4e8e\u878d\u8d44\\r\\n\\r\\n\u5766\u767d\u8bf4\uff0c\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u8fd8\u6ca1\u6709\u62ff\u5230\u4efb\u4f55\u6295\u8d44\uff0c\u66fe\u7ecf\u6709\u975e\u5e38\u9876\u7ea7\u7684\u8d44\u672c\u804a\u4e86\u5f88\u4e45\uff0c\u5408\u4f19\u4eba\u4e5f\u975e\u5e38\u8ba4\u53ef\u8fd9\u4e2a\u9879\u76ee\u7684\u4ef7\u503c\uff0c\u4f46\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u8c08\u5b9a\u3002\u5728\u65e9\u671f\uff0c\u6211\u80af\u5b9a\u72af\u4e86\u5f88\u591a\u9519\u8bef\uff0c\u4f8b\u5982\u5bf9\u9879\u76ee\u7684\u89c4\u5212\uff0c\u4f30\u503c\u9884\u671f\uff0c\u751a\u81f3\u8868\u8fbe\u7b49\u7b49\u90fd\u8fd8\u662f\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5f53\u7136\u4e5f\u662f\u4e00\u79cd\u6210\u957f\uff1b\u6b64\u5916\u53bb\u5e74\u53c8\u9047\u5230\u75ab\u60c5\uff0c\u8fd8\u6709\uff0c\u4f60\u61c2\u7684\uff0c\u4eca\u5e74\u7684ChatGPT...\\r\\n\\r\\n\u603b\u4e4b\uff0c\u540e\u7eed\u7684\u5f00\u53d1\u80af\u5b9a\u8fd8\u662f\u9700\u8981\u56e2\u961f\u548c\u8d44\u672c\uff0c\u6211\u4e00\u4e2a\u4eba\u5f88\u96be\u8fd9\u6837\u4e00\u76f4\u6301\u7eed\u4e0b\u5348\uff0c\u6b22\u8fce\u5404\u4f4d\u611f\u5174\u8da3\u7684\u8d44\u672c\u3001\u5f00\u53d1\u8005\u751a\u81f3\u52a0\u6cb9\u52a9\u5a01\u7684\u670b\u53cb\u4e0e\u6211\u8054\u7cfb\u3002\\r\\n\\r\\n\u5fae\u4fe1\uff1aARealityWorld\\r\\n\\r\\n## \u540e\u8bb0\\r\\n\\r\\n\u5728\u8fd9\u4e00\u5e74\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ddf\u5f88\u591a\u4e0d\u540c\u7684\u670b\u53cb\u6709\u8fc7\u5f88\u591a\u4ea4\u6d41\uff0c\u5f88\u591a\u670b\u53cb\u90fd\u5728\u9f13\u52b1\u548c\u652f\u6301\uff0c\u5e0c\u671b\uff0c\u6700\u7ec8\u4e0d\u4f1a\u8f9c\u8d1f\u4f60\u4eec\uff01"}]}')}}]); \ No newline at end of file diff --git a/zh/assets/js/a54713d3.57e90409.js b/zh/assets/js/a54713d3.57e90409.js deleted file mode 100644 index 89a9390..0000000 --- a/zh/assets/js/a54713d3.57e90409.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[9663,6641,2863,7544],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),m=r,f=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return n?a.createElement(f,l(l({ref:t},u),{},{components:n})):a.createElement(f,l({ref:t},u))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:r,l[1]=i;for(var c=2;c<o;c++)l[c]=n[c];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},1005:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},l=void 0,i={type:"mdx",permalink:"/zh/feature/chidori",source:"@site/src/pages/feature/chidori.mdx",frontMatter:{}},s=[],c={toc:s},u="wrapper";function p(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import aiohttp\nimport asyncio\nfrom typing import List, Optional\nimport json\nfrom chidori import Chidori, GraphBuilder\n\n\nclass Story:\n def __init__(self, title: str, url: Optional[str], score: Optional[float]):\n self.title = title\n self.url = url\n self.score = score\n\n\nHN_URL_TOP_STORIES = "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"\n\n\nasync def fetch_story(session, id):\n async with session.get(f"https://hacker-news.firebaseio.com/v0/item/{id}.json?print=pretty") as response:\n return await response.json()\n\n\nasync def fetch_hn() -> List[Story]:\n async with aiohttp.ClientSession() as session:\n async with session.get(HN_URL_TOP_STORIES) as response:\n story_ids = await response.json()\n\n tasks = []\n for id in story_ids[:30]: # Limit to 30 stories\n tasks.append(fetch_story(session, id))\n\n stories = await asyncio.gather(*tasks)\n\n stories_out = []\n for story in stories:\n story_dict = {k: story.get(k, None) for k in (\'title\', \'url\', \'score\')}\n stories_out.append(Story(**story_dict))\n return stories_out\n\n\n# ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n# Methods for fetching hacker news posts via api\n\nclass ChidoriWorker:\n def __init__(self):\n self.c = Chidori("0", "http://localhost:9800")\n\n async def build_graph(self):\n g = GraphBuilder()\n\n # Create a custom node, we will implement our\n # own handler for this node type\n h = await g.custom_node(\n name="FetchTopHN",\n node_type_name="FetchTopHN",\n output="{ output: String }"\n )\n\n # A prompt node, pulling in the value of the output from FetchTopHN\n # and templating that into the prompt for GPT3.5\n h_interpret = await g.prompt_node(\n name="InterpretTheGroup",\n template="""\n Based on the following list of HackerNews threads, \n filter this list to only launches of new AI projects: {{FetchTopHN.output}}\n """\n )\n await h_interpret.run_when(g, h)\n\n h_format_and_rank = await g.prompt_node(\n name="FormatAndRank",\n template="""\n Format this list of new AI projects in markdown, ranking the most \n interesting projects from most interesting to least. \n \n {{InterpretTheGroup.promptResult}}\n """\n )\n await h_format_and_rank.run_when(g, h_interpret)\n\n # Commit the graph, this pushes the configured graph\n # to our durable execution runtime.\n await g.commit(self.c, 0)\n\n async def run(self):\n # Construct the agent graph\n await self.build_graph()\n\n # Start graph execution from the root\n await self.c.play(0, 0)\n\n # Run the node execution loop\n await self.c.run_custom_node_loop()\n\n\nasync def handle_fetch_hn(node_will_exec):\n stories = await fetch_hn()\n result = {"output": json.dumps([story.__dict__ for story in stories])}\n return result\n\n\nasync def main():\n w = ChidoriWorker()\n await w.c.start_server(":memory:")\n await w.c.register_custom_node_handle("FetchTopHN", handle_fetch_hn)\n await w.run()\n\n\nif __name__ == "__main__":\n asyncio.run(main())\n')))}p.isMDXComponent=!0},9532:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},l=void 0,i={type:"mdx",permalink:"/zh/feature/cogine",source:"@site/src/pages/feature/cogine.mdx",description:"First define a Story struct with editor:",frontMatter:{}},s=[],c={toc:s},u="wrapper";function p(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"First define a Story struct with editor:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"std",src:n(452).Z,width:"1362",height:"589"})),(0,r.kt)("p",null,"Then define your component's input and output using the above defined struct also with editor:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"std",src:n(5811).Z,width:"1618",height:"504"})),(0,r.kt)("p",null,"Then define your logic flow:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"std",src:n(6453).Z,width:"1614",height:"303"})),(0,r.kt)("p",null,"Finally write your component's code with Lua:"),(0,r.kt)("p",null,"fetch_top_hn.lua:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local story_ids = get_url("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty")\n for i = 1, #story_ids do\n local url = string.format("https://hacker-news.firebaseio.com/v0/item/%s.json?print=pretty", story_ids[i])\n stories[i] = get_url(url)\n end\nend\n')),(0,r.kt)("p",null,"interpret_the_group.lua:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("Based on the following list of HackerNews threads, filter this list to only launches of new AI projects: %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information", prompt)\n if result["ok"] == true then\n for i = 1, #result["content"] do\n local story = {}\n out_stories[i] = result["content"][i]\n end\n end\nend\n')),(0,r.kt)("p",null,"format_and_rank.lua:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'function updating()\n local prompt = string.format("this list of new AI projects in markdown, ranking the most interesting projects from most interesting to least. %s", table_to_string(stories))\n local result = chat_completions("Please only return the result list as a RFC8259 compliant JSON format with no \'\\\' character, no extra information",prompt)\n\n local msg = "The news with AI topics are:\\n"\n if result["ok"] == true then\n for i = 1, #result["content"] do\n msg = string.format("%s%d. %s\\n",msg,i,result["content"][i]["title"])\n end\n end\n \n message["content"] = msg\n message["receiver"] = "user"\nend\n')))}p.isMDXComponent=!0},2667:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},l=void 0,i={type:"mdx",permalink:"/zh/feature/langchain",source:"@site/src/pages/feature/langchain.mdx",frontMatter:{}},s=[],c={toc:s},u="wrapper";function p(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}))}p.isMDXComponent=!0},7228:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(7294);const r=e=>{let{title:t,description:n,children:r,style:o,titleStyle:l,descriptionStyle:i}=e;return a.createElement("section",{className:"page__section",style:o},a.createElement("div",{className:"container"},a.createElement("h2",{className:"section__header text--center",style:{padding:"10px",...l}},t),n&&a.createElement("p",{className:"text--center",style:{whiteSpace:"pre-wrap",...i}},n),a.createElement("div",{style:{marginTop:"30px"}},r)))}},481:(e,t,n)=>{n.r(t),n.d(t,{default:()=>P});var a=n(7294),r=n(64),o=n(1005),l=n(2667),i=n(9532),s=n(7462),c=n(4137);const u=()=>(0,c.kt)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"#25c2a0",width:"24",height:"24"},(0,c.kt)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})),p=()=>(0,c.kt)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:"#F87272",width:"24",height:"24"},(0,c.kt)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})),d={toc:[],IconYes:u,IconNo:p};function m(e){let{components:t,...n}=e;return(0,c.kt)("wrapper",(0,s.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,c.kt)("table",null,(0,c.kt)("thead",{parentName:"table"},(0,c.kt)("tr",{parentName:"thead"},(0,c.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,c.kt)("th",{parentName:"tr",align:"left"},"Description"),(0,c.kt)("th",{parentName:"tr",align:"center"},"LangChain"),(0,c.kt)("th",{parentName:"tr",align:"center"},"Chidori"),(0,c.kt)("th",{parentName:"tr",align:"center"},"Cogine"))),(0,c.kt)("tbody",{parentName:"table"},(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Decentralized data"),(0,c.kt)("td",{parentName:"tr",align:"left"},"User's data are stored outside of the application and user controls its access permission from the applications"),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Interoperability"),(0,c.kt)("td",{parentName:"tr",align:"left"},"One agent can interoperate with any others even it is not developed by a same developer"),(0,c.kt)("td",{parentName:"tr",align:"center"},"limited to agents developed by a same developer and need to call API manually"),(0,c.kt)("td",{parentName:"tr",align:"center"},"limited to agents developed by a same developer and need to call API manually"),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Multi-agent collaboration"),(0,c.kt)("td",{parentName:"tr",align:"left"},"Has standard collaborating mechanism between User, System and Agents"),(0,c.kt)("td",{parentName:"tr",align:"center"},"No standard mechanism and need to communicate case by case, also limited to a same developer"),(0,c.kt)("td",{parentName:"tr",align:"center"},"No standard mechanism and need to communicate case by case, also limited to a same developer"),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Function/Agent-level sand-boxing"),(0,c.kt)("td",{parentName:"tr",align:"left"},"Every agent and even a function can be isolated so that multi agents come from different can be running in a same memory environment safely"),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Conversational computing"),(0,c.kt)("td",{parentName:"tr",align:"left"},"Code can talk to user, system or other agents to ask more information at any function location, the agent will be paused and continue to run when got response."),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Logic-abstraction"),(0,c.kt)("td",{parentName:"tr",align:"left"},"We re-organized the whole program to make developers focused on logic of busniess and forget about the hardware, data and programing language abstraction."),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Visual graph editing"),(0,c.kt)("td",{parentName:"tr",align:"left"},"We build a graph interaction which is as simple as Houdini and as powerful as any turning completed programming language."),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Agent format standard"),(0,c.kt)("td",{parentName:"tr",align:"left"},"We defined a agent format standard to represent a turing completed agent program which can be loaded and runned dynamically so everyone can develop an agent to handle personal needs."),(0,c.kt)("td",{parentName:"tr",align:"center"},"some runtime in-memory agent object"),(0,c.kt)("td",{parentName:"tr",align:"center"},"some runtime in-memory agent object"),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))),(0,c.kt)("tr",{parentName:"tbody"},(0,c.kt)("td",{parentName:"tr",align:"left"},"Virtual machine & Dynamical loading and running"),(0,c.kt)("td",{parentName:"tr",align:"left"},"Can load and run dynamically"),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(p,{mdxType:"IconNo"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"})),(0,c.kt)("td",{parentName:"tr",align:"center"},(0,c.kt)(u,{mdxType:"IconYes"}))))),(0,c.kt)("br",null))}m.isMDXComponent=!0;var f=n(7228),h=n(4334),g=n(2957),y=n(6550),k=n(5238),b=n(3609),w=n(2560);function N(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function v(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??N(n);return function(e){const t=(0,b.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function _(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function x(e){let{queryString:t=!1,groupId:n}=e;const r=(0,y.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,k._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function T(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=v(e),[l,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!_({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[s,c]=x({queryString:n,groupId:r}),[u,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,w.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),d=(()=>{const e=s??u;return _({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{d&&i(d)}),[d]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!_({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),c(e),p(e)}),[c,p,o]),tabValues:o}}var E=n(1048);const I={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function C(e){let{className:t,block:n,selectedValue:r,selectValue:o,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,g.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==r&&(c(t),o(a))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,h.Z)("tabs",{"tabs--block":n},t)},l.map((e=>{let{value:t,label:n,attributes:o}=e;return a.createElement("li",(0,s.Z)({role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,key:t,ref:e=>i.push(e),onKeyDown:p,onClick:u},o,{className:(0,h.Z)("tabs__item",I.tabItem,o?.className,{"tabs__item--active":r===t})}),n??t)})))}function O(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function j(e){const t=T(e);return a.createElement("div",{className:(0,h.Z)("tabs-container",I.tabList)},a.createElement(C,(0,s.Z)({},e,t)),a.createElement(O,(0,s.Z)({},e,t)))}function S(e){const t=(0,E.Z)();return a.createElement(j,(0,s.Z)({key:String(t)},e))}const Z="tabItem_Ymn6";function L(e){let{children:t,hidden:n,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,h.Z)(Z,r),hidden:n},t)}var D=n(7325);const P=()=>a.createElement(r.Z,null,a.createElement("div",{className:"container",style:{padding:"50px 20px 50px 20px"},id:"page-pricing"},a.createElement("h1",{className:"text--center"},a.createElement(D.Z,null," Features and benefits")),a.createElement("h2",{className:"text--center",style:{fontWeight:"normal"}},a.createElement(D.Z,null,"The following we list the main features of Cogine, for the details please check the technical documentation.")),a.createElement("br",null),a.createElement(m,null),a.createElement(f.Z,{title:a.createElement(D.Z,null,"Development comparison with LangChain and Chidori"),description:a.createElement(D.Z,null,"Basically, in other framework, you have to learn Python language, have to care about the structure of the program and have to learn many architecture design (such as different specific class and its inheritance relationships. In Cogine, the only thing you are care about is your logic, no other programming burden.")},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--8 col--offset-2"},a.createElement("div",{className:"col-demo center"},a.createElement("div",{style:{width:"1020px"}},a.createElement(S,{className:"center"},a.createElement(L,{value:"apple",label:"Cogine",default:!0},a.createElement(i.default,null)),a.createElement(L,{value:"orange",label:"LangChain"},a.createElement(l.default,null)),a.createElement(L,{value:"chidori",label:"Chidori"},a.createElement(o.default,null))))))))))},5811:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/cogine-components-c811dd4b9b3bcee1dcddcd64eeb2e83b.png"},6453:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/cogine-flow-a9536cf3eaca92b6114d933df6f95c55.png"},452:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/cogine-standards-afa43691cf3fe033e9a474df75d9608c.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/a8378f8b.9c5f747b.js b/zh/assets/js/a8378f8b.9c5f747b.js deleted file mode 100644 index 0d08ec2..0000000 --- a/zh/assets/js/a8378f8b.9c5f747b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6330],{2481:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"community"}')}}]); \ No newline at end of file diff --git a/zh/assets/js/c6a65125.9ec47e51.js b/zh/assets/js/c6a65125.9ec47e51.js deleted file mode 100644 index aec1492..0000000 --- a/zh/assets/js/c6a65125.9ec47e51.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[9923],{4137:(e,t,l)=>{l.d(t,{Zo:()=>k,kt:()=>c});var n=l(7294);function a(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,n)}return l}function r(e){for(var t=1;t<arguments.length;t++){var l=null!=arguments[t]?arguments[t]:{};t%2?i(Object(l),!0).forEach((function(t){a(e,t,l[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(l)):i(Object(l)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(l,t))}))}return e}function p(e,t){if(null==e)return{};var l,n,a=function(e,t){if(null==e)return{};var l,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)l=i[n],t.indexOf(l)>=0||(a[l]=e[l]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)l=i[n],t.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(a[l]=e[l])}return a}var u=n.createContext({}),o=function(e){var t=n.useContext(u),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},k=function(e){var t=o(e.components);return n.createElement(u.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var l=e.components,a=e.mdxType,i=e.originalType,u=e.parentName,k=p(e,["components","mdxType","originalType","parentName"]),s=o(l),m=a,c=s["".concat(u,".").concat(m)]||s[m]||d[m]||i;return l?n.createElement(c,r(r({ref:t},k),{},{components:l})):n.createElement(c,r({ref:t},k))}));function c(e,t){var l=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=l.length,r=new Array(i);r[0]=m;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[s]="string"==typeof e?e:a,r[1]=p;for(var o=2;o<i;o++)r[o]=l[o];return n.createElement.apply(null,r)}return n.createElement.apply(null,l)}m.displayName="MDXCreateElement"},7894:(e,t,l)=>{l.r(t),l.d(t,{contentTitle:()=>r,default:()=>s,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var n=l(7462),a=(l(7294),l(4137));const i={},r=void 0,p={type:"mdx",permalink:"/zh/whitepaper/",source:"@site/src/pages/whitepaper/index.md",description:"\u4e00\u79cd\u81ea\u6211\u8fdb\u5316\u7684\u3001\u53ef\u4e92\u64cd\u4f5c\u7684\u5206\u5e03\u5f0f\u5e94\u7528\u7cfb\u7edf",frontMatter:{}},u=[{value:"\u6458\u8981",id:"\u6458\u8981",level:2},{value:"\u95ee\u9898",id:"\u95ee\u9898",level:2},{value:"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168",id:"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168",level:3},{value:"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c",id:"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c",level:3},{value:"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236",id:"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236",level:3},{value:"\u76f8\u5173\u77e5\u8bc6",id:"\u76f8\u5173\u77e5\u8bc6",level:2},{value:"\u4e92\u64cd\u4f5c\u6027",id:"\u4e92\u64cd\u4f5c\u6027",level:3},{value:"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",id:"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b",level:3},{value:"\u865a\u62df\u673a",id:"\u865a\u62df\u673a",level:3},{value:"\u57fa\u4e8e\u7ec4\u5408\u4e0eECS",id:"\u57fa\u4e8e\u7ec4\u5408\u4e0eecs",level:3},{value:"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f",id:"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f",level:3},{value:"\u590d\u6742\u7cfb\u7edf",id:"\u590d\u6742\u7cfb\u7edf",level:3},{value:"RealityIS\u67b6\u6784\u54f2\u5b66",id:"realityis\u67b6\u6784\u54f2\u5b66",level:2},{value:"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61",id:"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61",level:3},{value:"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2",id:"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2",level:4},{value:"\u7c7b\u578b",id:"\u7c7b\u578b",level:5},{value:"\u6570\u636e",id:"\u6570\u636e",level:5},{value:"\u5b89\u5168",id:"\u5b89\u5168",level:5},{value:"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027",id:"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027",level:4},{value:"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784",id:"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784",level:3},{value:"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2",id:"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2",level:4},{value:"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784",id:"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784",level:5},{value:"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784",id:"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784",level:5},{value:"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236",id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236",level:5},{value:"\u52a8\u6001\u6027",id:"\u52a8\u6001\u6027",level:5},{value:"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784",id:"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784",level:6},{value:"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c",id:"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c",level:6},{value:"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd",id:"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd",level:4},{value:"\u667a\u80fd\u6d8c\u73b0",id:"\u667a\u80fd\u6d8c\u73b0",level:5},{value:"\u8ba1\u7b97\u7684\u672c\u8d28",id:"\u8ba1\u7b97\u7684\u672c\u8d28",level:5},{value:"\u8fdb\u5316\u7684\u7cfb\u7edf",id:"\u8fdb\u5316\u7684\u7cfb\u7edf",level:5},{value:"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784",id:"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784",level:3},{value:"RealityIS\u7cfb\u7edf\u67b6\u6784",id:"realityis\u7cfb\u7edf\u67b6\u6784",level:2},{value:"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf",id:"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf",level:3},{value:"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61",id:"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61",level:3},{value:"\u7b80\u5316\u6570\u636e\u83b7\u53d6",id:"\u7b80\u5316\u6570\u636e\u83b7\u53d6",level:3},{value:"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784",id:"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784",level:3},{value:"\u590d\u6742\u7cfb\u7edf\uff1a\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c",id:"\u590d\u6742\u7cfb\u7edf\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c",level:3},{value:"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92",id:"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92",level:3},{value:"\u865a\u62df\u673a",id:"\u865a\u62df\u673a-1",level:3},{value:"\u5b57\u8282\u7801",id:"\u5b57\u8282\u7801",level:4},{value:"inputs",id:"inputs",level:4},{value:"Standard\u7248\u672c\u517c\u5bb9",id:"standard\u7248\u672c\u517c\u5bb9",level:5},{value:"\u5c0f\u7248\u672c\u517c\u5bb9",id:"\u5c0f\u7248\u672c\u517c\u5bb9",level:6},{value:"\u5927\u7248\u672c\u66f4\u65b0",id:"\u5927\u7248\u672c\u66f4\u65b0",level:6},{value:"Lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92",id:"lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92",level:4},{value:"RealityIS\u6280\u672f\u7279\u5f81",id:"realityis\u6280\u672f\u7279\u5f81",level:2},{value:"\u6267\u884c\u6d41\u7a0b",id:"\u6267\u884c\u6d41\u7a0b",level:3},{value:"\u51fd\u6570\u8c03\u7528\u5173\u7cfb",id:"\u51fd\u6570\u8c03\u7528\u5173\u7cfb",level:4},{value:"\u6d41\u7a0b\u987a\u5e8f",id:"\u6d41\u7a0b\u987a\u5e8f",level:4},{value:"ShadeGraph",id:"shadegraph",level:4},{value:"Cogine",id:"cogine",level:4},{value:"\u4e92\u64cd\u4f5c\u6027",id:"\u4e92\u64cd\u4f5c\u6027-1",level:3},{value:"\u53ef\u7ec4\u5408\u6027",id:"\u53ef\u7ec4\u5408\u6027",level:3},{value:"\u4e2a\u6027\u5316",id:"\u4e2a\u6027\u5316",level:3},{value:"\u52a8\u6001\u6027",id:"\u52a8\u6001\u6027-1",level:3},{value:"\u5206\u5e03\u5f0f",id:"\u5206\u5e03\u5f0f",level:3},{value:"\u8bed\u4e49\u5316",id:"\u8bed\u4e49\u5316",level:3},{value:"\u7ec4\u4ef6\u5316",id:"\u7ec4\u4ef6\u5316",level:3},{value:"\u88ab\u52a8\u5f0f",id:"\u88ab\u52a8\u5f0f",level:3},{value:"\u5e94\u7528",id:"\u5e94\u7528",level:2},{value:"\u6311\u6218",id:"\u6311\u6218",level:2},{value:"\u6280\u672f\u6311\u6218",id:"\u6280\u672f\u6311\u6218",level:3},{value:"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898",id:"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898",level:4},{value:"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f",id:"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f",level:4},{value:"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b",id:"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b",level:4},{value:"\u7528\u6237\u4f53\u9a8c\u6311\u6218",id:"\u7528\u6237\u4f53\u9a8c\u6311\u6218",level:3},{value:"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406",id:"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406",level:4},{value:"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c",id:"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c",level:4},{value:"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c",id:"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c",level:4},{value:"\u5c55\u671b",id:"\u5c55\u671b",level:2},{value:"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0",id:"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0",level:3},{value:"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0",id:"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0",level:3},{value:"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0",id:"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0",level:3},{value:"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0",id:"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0",level:3},{value:"\u603b\u7ed3",id:"\u603b\u7ed3",level:2}],o={toc:u},k="wrapper";function s(e){let{components:t,...i}=e;return(0,a.kt)(k,(0,n.Z)({},o,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{align:"center"},"\u4e00\u79cd\u81ea\u6211\u8fdb\u5316\u7684\u3001\u53ef\u4e92\u64cd\u4f5c\u7684\u5206\u5e03\u5f0f\u5e94\u7528\u7cfb\u7edf"),(0,a.kt)("br",null),(0,a.kt)("p",{align:"center"},"\u79e6\u6625\u6797"),(0,a.kt)("br",null),(0,a.kt)("p",null,"Reality World\u662f\u4e00\u4e2a\u4ee5\u4e92\u64cd\u4f5c\u6027\u4e3a\u6838\u5fc3\u76ee\u6807\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u548c\u67b6\u6784\uff0c\u5b83\u7684\u613f\u666f\u662f\u6784\u9020\u4e00\u4e2a\u65e0\u8fb9\u7684\u6570\u5b57\u4e16\u754c\uff0c\u4f7f\u5f97\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u5411\u8fd9\u4e2a\u7cfb\u7edf\u52a8\u6001\u6dfb\u52a0\u65b0\u7684\u5b50\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u5b50\u7a0b\u5e8f\u53ef\u4ee5\u548c\u5176\u5b83\u5b50\u7a0b\u5e8f\u4efb\u610f\u4ea4\u4e92\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u53ef\u4ee5\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u81ea\u6211\u8fdb\u5316\uff0c\u4ece\u800c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u52a0\u667a\u80fd\u3001\u4e30\u5bcc\u548c\u4e2a\u6027\u5316\u7684\u6570\u5b57\u4e16\u754c\u4f53\u9a8c\u3002",(0,a.kt)("br",null),(0,a.kt)("br",null)),(0,a.kt)("h2",{id:"\u6458\u8981"},"\u6458\u8981"),(0,a.kt)("p",null,"\u8fd1\u5e74\u6765\uff0c\u968f\u7740\u533a\u5757\u94fe\u3001\u5143\u5b87\u5b99\u4ee5\u53ca\u5927\u6a21\u578b\u7684\u53d1\u5c55\uff0c\u6570\u5b57\u4e16\u754c\u7684\u6784\u5efa\u903b\u8f91\u548c\u4f7f\u7528\u5f62\u6001\u90fd\u53d1\u751f\u4e86\u5f88\u5927\u53d8\u5316\u3002\u7136\u800c\u603b\u4f53\u800c\u8a00\uff0c\u76ee\u524d\u5e76\u6ca1\u6709\u6bd4\u8f83\u6210\u719f\u7684\u4e13\u95e8\u9762\u5411\u8fd9\u4e9b\u65b0\u578b\u7279\u5f81\u5e94\u7528\u7684\u5e95\u5c42\u67b6\u6784\uff0c\u751a\u81f3\u8fd8\u6ca1\u6709\u5f62\u6210\u6bd4\u8f83\u6e05\u6670\u548c\u7edf\u4e00\u7684\u601d\u8def\uff0c\u6bd4\u5982\u8fd9\u79cd\u67b6\u6784\u5e94\u8be5\u6709\u54ea\u4e9b\u65b0\u7684\u7279\u5f81\u3001\u5f62\u6001\u4ee5\u53ca\u8bbe\u8ba1\u76ee\u6807\u3002\u5c1d\u8bd5\u6784\u5efa\u8fd9\u6837\u7684\u4e00\u5957\u65b0\u7684\u65b9\u6cd5\u4f53\u7cfb\u662f\u975e\u5e38\u590d\u6742\u7684\uff0c\u6211\u8ba4\u4e3a\u6838\u5fc3\u7684\u96be\u70b9\u5728\u4e8e\u5f88\u96be\u5355\u4ece\u8f6f\u4ef6\u67b6\u6784\u7684\u89c6\u89d2\u53bb\u89e3\u51b3\u8fd9\u4e00\u95ee\u9898\u3002\u6bd4\u5982\u5143\u5b87\u5b99\u7c7b\u5e94\u7528\uff0c\u8868\u9762\u4e0a\u770b\u6211\u4eec\u53ef\u4ee5\u5728\u73b0\u6709\u7684\u5f15\u64ce\u67b6\u6784\u4e0a\u53bb\u6784\u5efa\uff0c\u7136\u540e\u5143\u5b87\u5b99\u80cc\u540e\u7684\u6838\u5fc3\u903b\u8f91\u662f\u4e92\u64cd\u4f5c\u6027\uff0c\u5b83\u8981\u6c42\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u521b\u5efa\u7684\u5e94\u7528\u4e4b\u95f4\u80fd\u591f\u8fdb\u884c\u4ea4\u4e92\uff0c\u4ece\u800c\u63d0\u4f9b\u66f4\u52a8\u6001\u3001\u591a\u5143\u548c\u4e2a\u6027\u5316\u7684\u6570\u5b57\u5316\u4f53\u9a8c\uff0c\u7136\u800c\u4e92\u64cd\u4f5c\u6027\u548c\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u903b\u8f91\u662f\u76f8\u6096\u7684\u3002\u518d\u6bd4\u5982\u591a\u667a\u80fd\u4f53\u7c7b\u5e94\u7528\uff0c\u6700\u8fd1\u66f4\u591a\u7684\u5de5\u4f5c\u610f\u8bc6\u5230\u8fd9\u7c7b\u5e94\u7528\u7684\u903b\u8f91\u66f4\u53ef\u80fd\u9700\u8981\u5f88\u591a\u5177\u6709\u72ec\u7acb\u529f\u80fd\u7684\u5c0f\u667a\u80fd\u4f53\u8fdb\u884c\u76f8\u4e92\u534f\u4f5c\u6765\u5b9e\u73b0\uff0c\u8fd9\u79cd\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u7684\u903b\u8f91\u8ddf\u590d\u6742\u7cfb\u7edf\u7684\u884c\u4e3a\u662f\u7c7b\u4f3c\u7684\uff0c\u7136\u800c\u6211\u4eec\u5f53\u524d\u7684\u7f16\u7a0b\u6a21\u5f0f\u5e76\u6ca1\u6709\u9488\u5bf9\u8fd9\u6837\u7684\u601d\u60f3\u8fdb\u884c\u8bbe\u8ba1\u3002\u4ece\u4e0a\u9762\u7684\u8bba\u8ff0\u53ef\u4ee5\u770b\u51fa\uff0c\u672a\u6765\u6570\u5b57\u4e16\u754c\u7684\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u9700\u8981\u8003\u8651\u66f4\u591a\u7684\u8de8\u9886\u57df\u77e5\u8bc6\u4f53\u7cfb\u3002\u672c\u6587\u6b63\u662f\u901a\u8fc7\u5bf9\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u65b9\u6cd5\uff08\u5982\u9762\u5411\u5bf9\u8c61\u548c\u51fd\u6570\u5f0f\u7f16\u7a0b\u6a21\u578b\uff09\u3001\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u7f16\u8bd1\u8fc7\u7a0b\u548c\u94fe\u63a5\u8fc7\u7a0b\u3001\u533a\u5757\u94fe\u3001\u590d\u6742\u7cfb\u7edf\u3001\u6e38\u620f\u5e94\u7528\u67b6\u6784\u7b49\u8de8\u9886\u57df\u77e5\u8bc6\u8fdb\u884c\u7cfb\u7edf\u5206\u6790\uff0c\u7ed3\u5408\u8fd9\u4e9b\u65b0\u578b\u5e94\u7528\u7684\u7279\u5f81\uff0c\u63d0\u51fa\u4e86\u4e00\u5957\u7cfb\u7edf\u7684\u67b6\u6784\u4f53\u7cfb\uff0c\u5b83\u5305\u62ec\u6e05\u6670\u7684\u8bbe\u8ba1\u539f\u5219\u3001\u76ee\u6807\u3001\u65b9\u6cd5\u54f2\u5b66\uff0c\u4ee5\u53ca\u4e00\u4e2a\u5305\u542b\u6838\u5fc3\u673a\u5236\u7684\u6e90\u4ee3\u7801\u5b9e\u73b0\u3002\u5e0c\u671b\u6b64\u5de5\u4f5c\u53ef\u4ee5\u5bf9\u672a\u6765\u6570\u5b57\u4e16\u754c\u57fa\u7840\u67b6\u6784\u7684\u8bbe\u8ba1\u3001\u7814\u7a76\u548c\u5f00\u53d1\u63d0\u4f9b\u6709\u76ca\u7684\u6307\u5f15\u3002"),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"\u95ee\u9898"},"\u95ee\u9898"),(0,a.kt)("p",null,"\u8fd1\u51e0\u5e74\uff0c\u6570\u5b57\u4e16\u754c\u7684\u5f62\u6001\u53d1\u751f\u7740\u5de8\u5927\u7684\u53d8\u5316\uff0c\u4e00\u65b9\u9762\u4f3c\u4e4e\u662f\u9762\u5bf9\u4e92\u8054\u7f51\u7ea2\u5229\u7684\u9010\u6e10\u4e0b\u964d\uff0c\u4eba\u4eec\u9700\u8981\u65b0\u7684\u79d1\u6280\u5f15\u7206\u70b9\uff1b\u4f46\u53e6\u4e00\u65b9\u9762\uff0c\u8fd9\u4e9b\u65b0\u7684\u6982\u5ff5\u4e5f\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u6298\u5c04\u51fa\u4e00\u4e2a\u4fe1\u606f\uff1a\u90a3\u5c31\u662f\u6211\u4eec\u751f\u6d3b\u4e2d\u7684\u6570\u5b57\u5316\u8fd8\u4e0d\u591f\u5f7b\u5e95\uff0c\u8fd8\u4e0d\u591f\u4e30\u5bcc\uff0c\u8fd8\u6ca1\u6709\u5b8c\u5168\u91ca\u653e\u5b83\u5168\u90e8\u7684\u529b\u91cf\u3002"),(0,a.kt)("p",null,"\u4f8b\u5982\u5728Web 3.0\u7684\u6982\u5ff5\u4e2d\uff0c\u6211\u4eec\u5e0c\u671b\u6211\u4eec\u7684\u9690\u79c1\u548c\u8d44\u4ea7\u80fd\u591f\u4e0d\u88ab\u5c11\u6570\u4e2d\u5fc3\u5316\u7684\u5b9e\u4f53\u6240\u63a7\u5236\uff1b\u5728\u5143\u5b87\u5b99\u7684\u6982\u5ff5\u4e2d\uff0c\u6211\u4eec\u5e0c\u671b\u4efb\u4f55\u4eba\u80fd\u591f\u8fdb\u884c\u66f4\u81ea\u7531\u5730\u521b\u9020\u6570\u5b57\u5185\u5bb9\uff0c\u5e76\u4f7f\u6211\u4eec\u7684\u6570\u5b57\u5206\u8eab\u8fde\u540c\u6211\u4eec\u7684\u5f88\u591a\u80fd\u529b\u80fd\u591f\u5728\u8de8\u57df\u591a\u4e2a\u865a\u62df\u4e16\u754c\u4e2d\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u4ece\u800c\u63d0\u4f9b\u63a5\u8fd1\u73b0\u5b9e\u4e16\u754c\u7684\u6570\u5b57\u751f\u6d3b\u4f53\u9a8c\uff1b\u800c\u5728\u5927\u6a21\u578b\u5e94\u7528\u4e2d\uff0c\u968f\u7740\u5927\u6a21\u578b\u5bf9\u4eba\u7c7b\u4efb\u610f\u6307\u4ee4\u7684\u8bed\u4e49\u7406\u89e3\uff0c\u56fa\u5b9a\u7684\u8f6f\u4ef6\u903b\u8f91\u4f3c\u4e4e\u65e0\u6cd5\u5e94\u4ed8\u8fd9\u79cd\u903b\u8f91\u590d\u6742\u5ea6\uff0c\u6211\u4eec\u5e0c\u671b\u5e94\u7528\u5185\u90e8\u80fd\u591f\u66f4\u667a\u80fd\u5730\u534f\u8c03\u548c\u8c03\u5ea6\u6b63\u786e\u7684\u529f\u80fd\u6765\u89e3\u51b3\u4efb\u610f\u7684\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u50cf\u8fc7\u53bb\u90a3\u6837\u63d0\u4f9b\u56fa\u5b9a\u7ed3\u6784\u548c\u529f\u80fd\u7684\u8f6f\u4ef6\u3002"),(0,a.kt)("p",null,"\u6240\u6709\u8fd9\u4e9b\u65b0\u7684\u9700\u6c42\u53ef\u80fd\u90fd\u610f\u5473\u7740\u6211\u4eec\u9700\u8981\u65b0\u7684\u601d\u7ef4\u548c\u65b9\u6cd5\u6765\u6784\u5efa\u5e94\u7528\uff0c\u800c\u4eba\u4eec\u81ea\u7136\u662f\u5e0c\u671b\u57fa\u4e8e\u73b0\u6709\u7684\u8f6f\u4ef6\u5de5\u7a0b\u4f53\u7cfb\uff0c\u80fd\u591f\u8fdb\u884c\u5c11\u91cf\u7684\u67b6\u6784\u8bbe\u8ba1\uff0c\u6765\u5b9e\u73b0\u4e0a\u8ff0\u8fd9\u4e9b\u5e94\u7528\u7684\u5f00\u53d1\u3002\u672c\u8282\u6211\u4eec\u5c31\u6765\u770b\u51e0\u4e2a\u57fa\u672c\u7684\u95ee\u9898\uff0c\u4ece\u800c\u7406\u89e3\u6211\u4eec\u73b0\u884c\u7684\u4f53\u7cfb\u5728\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u65b9\u9762\u4f1a\u9047\u5230\u54ea\u4e9b\u6311\u6218\uff0c\u8fd9\u4e9b\u95ee\u9898\u7684\u7406\u89e3\u4e5f\u4e3a\u540e\u9762\u7684\u67b6\u6784\u8bbe\u8ba1\u63d0\u4f9b\u91cd\u8981\u7684\u4f9d\u636e\u3002"),(0,a.kt)("p",null,"\u5f53\u7136\uff0c\u8fd9\u53ea\u662f\u51e0\u4e2a\u5178\u578b\u95ee\u9898\uff0c\u672c\u6587\u540e\u9762\u7684\u5185\u5bb9\u8fd8\u4f1a\u8ba8\u8bba\u66f4\u591a\u7684\u76f8\u5173\u95ee\u9898\u3002"),(0,a.kt)("h3",{id:"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168"},"\u53bb\u4e2d\u5fc3\u5316\u548c\u6570\u636e\u5b89\u5168"),(0,a.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u6574\u4e2a\u6784\u5efa\u8f6f\u4ef6\u7684\u65b9\u6cd5\u4f53\u7cfb\uff0c\u4e0d\u7ba1\u662f\u5e95\u5c42\u7684\u7f16\u7a0b\u8bed\u8a00\u53ca\u5176\u63d0\u4f9b\u7684\u4e00\u4e9b\u7f16\u7a0b\u6a21\u5f0f\uff0c\u5982\u9762\u5411\u5bf9\u8c61\u6216\u51fd\u6570\u5f0f\u7f16\u7a0b\uff0c\u8fd8\u662f\u4e2d\u95f4\u4e00\u4e9b\u5e2e\u52a9\u6784\u5efa\u5404\u79cd\u5e94\u7528\u7684\u5de5\u5177\uff0c\u5982\u6e38\u620f\u5f15\u64ce\u548c\u5404\u79cd\u5f00\u53d1\u6846\u67b6\uff0c\u90fd\u662f\u57fa\u4e8e\u8fd9\u6837\u4e00\u4e2a\u524d\u63d0\u6216\u5047\u8bbe\uff1a\u5373\u7a0b\u5e8f\u62e5\u6709\u6240\u6709\u7684\u6743\u529b\uff0c\u7a0b\u5e8f\u53ef\u4ee5\u63a7\u5236\u548c\u8bbf\u95ee\u4e00\u5207\u6570\u636e\uff0c\u4e0d\u7ba1\u662f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u8fd8\u662f\u5e94\u7528\u672c\u5730\u6301\u4e45\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u8fd8\u662f\u5e94\u7528\u5b58\u50a8\u5230\u4e91\u7aef\u7684\u6570\u636e\u3002\u8fd9\u6837\u505a\u7684\u76ee\u7684\u662f\u7b80\u5316\u7f16\u7a0b\u6a21\u578b\uff0c\u8fd9\u79cd\u7b80\u5316\u7684\u601d\u60f3\u4f53\u73b0\u5728\u4e24\u4e2a\u5c42\u9762\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u6bcf\u4e2a\u5e94\u7528\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u56e0\u6b64\u901a\u8fc7\u8fd9\u79cd\u7b80\u5355\u7684\u5185\u5b58\u9694\u79bb\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u5e94\u7528\u7684\u6570\u636e\u5b89\u5168"),(0,a.kt)("li",{parentName:"ul"},"\u5c06\u5e94\u7528\u5185\u4ea7\u751f\u7684\u7528\u6237\u6570\u636e\u7684\u7ba1\u7406\u4ea4\u7ed9\u5f00\u53d1\u5546\uff0c\u7531\u4ed6\u4eec\u8d1f\u8d23\u4fdd\u8bc1\u6570\u636e\u7684\u5b89\u5168")),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u673a\u5236\u53ef\u4ee5\u770b\u51fa\uff0c\u5c3d\u7ba1\u73b0\u5728\u5404\u56fd\u90fd\u5e94\u76f8\u5e94\u7684\u5408\u89c4\u6cd5\u5f8b\u6765\u4fdd\u62a4\u7528\u6237\u7684\u9690\u79c1\u6570\u636e\u4e0d\u80fd\u88ab\u975e\u6cd5\u4e0a\u4f20\u6216\u4f7f\u7528\uff0c\u4f46\u5b9e\u9645\u5728\u64cd\u4f5c\u5c42\u9762\uff0c\u5f88\u591a\u6570\u636e\u7684\u4ea4\u4e92\u6d89\u53ca\u5230\u529f\u80fd\u5c42\u9762\uff0c\u4f8b\u5982\u9700\u8981\u5728\u4e91\u7aef\u4e0e\u6765\u81ea\u5176\u5b83\u7528\u6237\u7684\u6570\u636e\u8fdb\u884c\u8ba1\u7b97\uff0c\u6240\u4ee5\u5f88\u591a\u6570\u636e\u5176\u5b9e\u5f88\u96be\u754c\u5b9a\uff0c\u56e0\u6b64\u6211\u4eec\u7684\u9690\u79c1\u6570\u636e\u4e00\u822c\u53ea\u5305\u542b\u90e8\u5206\u6570\u636e\uff0c\u800c\u8fd8\u6709\u5f88\u591a\u5e94\u7528\u6267\u884c\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u6570\u636e\u4e5f\u662f\u5bf9\u7528\u6237\u800c\u8a00\u5f88\u91cd\u8981\u7684\u3002"),(0,a.kt)("p",null,"\u7531\u4e8e\u5e94\u7528\u7a0b\u5e8f\u5bf9\u6570\u636e\u7684\u5929\u751f\u7684\u6743\u9650\uff0c\u4f7f\u5f97\u8f6f\u4ef6\u5f00\u53d1\u5546\u5929\u7136\u7684\u6210\u4e3a\u4e00\u4e2a\u4e2d\u5fc3\u5316\u7684\u5b9e\u4f53\uff0c\u638c\u63a7\u7740\u6240\u6709\u7528\u6237\u7684\u6570\u636e\u3002\u5c3d\u7ba1\u5f88\u591a\u65f6\u5019\uff0c\u8fd9\u79cd\u4e2d\u5fc3\u5316\u7684\u7ba1\u7406\u5e26\u6765\u4e86\u5f88\u591a\u4fbf\u5229\u548c\u6548\u7387\uff0c\u4f46\u662f\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\u635f\u5931\u5219\u662f\u5f88\u5927\u7684\uff0c\u9664\u4e86\u6570\u636e\u88ab\u975e\u5e38\u4f7f\u7528\u7684\u98ce\u9669\uff0c\u8fd8\u6709\u5305\u62ec\u5728\u5e73\u53f0\u83b7\u53d6\u5408\u6cd5\u6536\u76ca\u65f6\u4e0d\u900f\u660e\u6027\uff0c\u6ca1\u6709\u8bdd\u8bed\u6743\uff0c\u540c\u65f6\u51fa\u4e8e\u7ade\u4e89\u8003\u8651\uff0c\u4e00\u4e2a\u5e94\u7528\u7684\u6570\u636e\u5bf9\u540c\u4e00\u4e2a\u7528\u6237\u7684\u5176\u5b83\u5e94\u7528\u901a\u5e38\u662f\u65e0\u6cd5\u4e92\u64cd\u4f5c\u7684\uff0c\u800c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u5f88\u591a\u65f6\u5019\u5bf9\u7528\u6237\u6765\u8bf4\u662f\u5f88\u6709\u4ef7\u503c\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"programming-model",src:l(8242).Z,width:"686",height:"211"})),(0,a.kt)("p",null,"\u8fd9\u91cc\u9762\u7684\u6839\u672c\u95ee\u9898\uff0c\u6211\u89c9\u5f97\u662f\u8fd9\u4e2a\u7f16\u7a0b\u6a21\u578b\u7684\u95ee\u9898\uff0c\u5b83\u5c06\u7a0b\u5e8f\u7684\u529f\u80fd\u548c\u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u6570\u636e\u5173\u8054\u5728\u4e00\u8d77\uff0c\u5f7c\u6b64\u65e0\u6cd5\u5206\u5f00\uff0c\u5982\u4e0a\u56fe\uff08a\uff09\u6240\u793a\u3002\u60f3\u60f3\u6211\u4eec\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u7ecf\u6d4e\u6a21\u5f0f\uff0c\u4e00\u4e2a\u5382\u5546\u751f\u4ea7\u4e86\u67d0\u4ef6\u5546\u54c1\uff0c\u7528\u6237\u8d2d\u4e70\u5546\u54c1\u4e4b\u540e\uff0c\u9664\u4e86\u7b80\u5355\u7684\u552e\u540e\u670d\u52a1\u5173\u7cfb\uff0c\u7528\u6237\u548c\u5382\u5546\u4e4b\u95f4\u5c31\u6ca1\u6709\u5176\u5b83\u5173\u7cfb\uff0c\u8be5\u5546\u54c1\u540e\u7eed\u751f\u4ea7\u7684\u7269\u54c1\u90fd\u6709\u7528\u6237\u81ea\u5df1\u62e5\u6709\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u7269\u54c1\u7528\u4e8e\u4efb\u610f\u81ea\u5df1\u7684\u610f\u56fe\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\uff0c\u4e3a\u4e86\u66f4\u597d\u5730\u4fdd\u62a4\u7528\u6237\u7684\u6743\u76ca\uff0c\u6211\u4eec\u9700\u8981\u4e00\u79cd\u5929\u751f\u80fd\u591f\u5c06\u8f6f\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5206\u5f00\u7684\u673a\u5236\uff0c\u672c\u6587\u5c31\u4f1a\u63d0\u51fa\u4e00\u79cd\u673a\u5236\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u4f7f\u7528\u7c7b\u4f3c\u73b0\u6709\u7684\u65b9\u6cd5\u8fdb\u884c\u8f6f\u4ef6\u5f00\u53d1\uff0c\u4f46\u662f\u5176\u4ea7\u751f\u7684\u6570\u636e\u786e\u5b9e\u5929\u751f\u7531\u7528\u6237\u63a7\u5236\u7684\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u5373\u4f7f\u662f\u540c\u4e00\u4e2a\u5e94\u7528\u4ea7\u751f\u7684\u6570\u636e\uff0c\u7528\u6237\u90fd\u53ef\u4ee5\u5728\u540e\u7eed\u7684\u64cd\u4f5c\u4e2d\u7981\u6b62\u8be5\u5e94\u7528\u5bf9\u4e4b\u524d\u4ea7\u751f\u6570\u636e\u7684\u8bbf\u95ee\uff0c\u800c\u4e14\u8fd9\u79cd\u63a7\u5236\u65b9\u5f0f\u975e\u5e38\u7b80\u5355\uff0c\u5982\u4e0a\u56fe\uff08b\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u7f16\u7a0b\u6a21\u5f0f\u7684\u6539\u53d8\uff0c\u4f1a\u5bf9\u5e94\u7528\u7684\u5f62\u6001\u9020\u6210\u975e\u5e38\u6df1\u523b\u7684\u5f71\u54cd\uff0c\u5b83\u4e5f\u4f1a\u5e26\u6765\u66f4\u591a\u65b0\u7684\u6280\u672f\u4e0a\u7684\u53ef\u80fd\u6027\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u6784\u5efa\u66f4\u52a0\u590d\u6742\u4e30\u5bcc\u7684\u5e94\u7528\u3002\u8fd9\u4e9b\u7279\u6027\u4e5f\u6b63\u662f\u5143\u5b87\u5b99\u548cWeb 3.0\u6570\u5b57\u7ecf\u6d4e\u7684\u6784\u5efa\u6240\u9700\u8981\u7684\u57fa\u672c\u7279\u6027\uff1a\u5b83\u4f7f\u5f97\u4e92\u64cd\u4f5c\u53d8\u5f97\u7b80\u5355\u548c\u53ef\u80fd\u3002"),(0,a.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c"},"\u4e92\u64cd\u4f5c\u548c\u7528\u6237\u5185\u5bb9\u521b\u4f5c"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u5143\u5b87\u5b99\u8fd8\u6ca1\u6709\u660e\u786e\u7684\u5b9a\u4e49\u548c\u5f62\u6001\uff0c\u4f46\u662f\u5b83\u7684\u4e00\u4e9b\u57fa\u672c\u7279\u6027\u4e5f\u6162\u6162\u88ab\u4eba\u4eec\u63a5\u53d7\uff0c\u6bd4\u5982\u865a\u62df\u4e0e\u73b0\u5b9e\u7684\u7ed3\u5408\uff0c\u7528\u6237\u751f\u6210\u5185\u5bb9\uff0c\u53bb\u4e2d\u5fc3\u5316\u548c\u5f00\u653e\u6027\uff0c\u4ee5\u53ca\u6570\u5b57\u8eab\u4efd\uff0c\u793e\u4ea4\u548c\u7ecf\u6d4e\u7cfb\u7edf\u7b49\u7b49\u3002\u5143\u5b87\u5b99\u770b\u8d77\u6765\u5305\u62ec\u4e86Web 3.0\u7684\u601d\u60f3\uff0c\u4f46\u662f\u5b83\u53ef\u80fd\u5e76\u4e0d\u5bfb\u6c42\u6240\u6709\u7684\u6570\u636e\u90fd\u4fdd\u5b58\u5728\u533a\u5757\u94fe\u4e0a\uff0c\u56e0\u4e3a\u90a3\u6837\u5728\u7406\u8bba\u4e0a\u6839\u672c\u65e0\u6cd5\u6ee1\u8db3\u4eba\u4eec\u7684\u4f7f\u7528\u4f53\u9a8c\u9700\u6c42\u3002"),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u8fd9\u4e9b\u7279\u6027\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u51fa\u5b83\u4eec\u5bf9\u73b0\u884c\u7684\u6280\u672f\u4f53\u7cfb\u90fd\u4f1a\u5e26\u6765\u5f88\u5927\u7684\u6311\u6218\u3002\u5176\u4e2d\u5173\u4e8e\u53bb\u4e2d\u5fc3\u5316\u548c\u4ef7\u503c\u4ea4\u6613\u90e8\u5206\u53ef\u4ee5\u7531\u533a\u5757\u94fe\u6280\u672f\u6765\u5b9e\u73b0\uff0c\u4ece\u672c\u6587\u540e\u9762\u4e5f\u53ef\u4ee5\u770b\u51fa\uff0c\u4e92\u64cd\u4f5c\u6027\u548c\u5f00\u653e\u6027\u65b9\u9762\u4e5f\u53ef\u4ee5\u7531\u6211\u4eec\u4e0a\u4e00\u8282\u63d0\u51fa\u7684\u7a0b\u5e8f\u67b6\u6784\u6765\u5b9e\u73b0\uff0c\u7136\u800c\u5bf9\u4e8e\u7528\u6237\u521b\u9020\u7684\u7a0b\u5e8f\u5185\u5bb9\u672c\u8eab\uff0c\u4f9d\u7136\u5b58\u5728\u6bd4\u8f83\u5927\u7684\u6311\u6218\u3002"),(0,a.kt)("p",null,"\u771f\u5b9e\u4e16\u754c\u7684\u7ecf\u6d4e\u7cfb\u7edf\u7684\u6838\u5fc3\uff0c\u662f\u8fd9\u4e2a\u7ecf\u6d4e\u7cfb\u7edf\u7684\u5927\u90e8\u5206\u53c2\u4e0e\u8005\u90fd\u5728\u53c2\u4e0e\u7ecf\u6d4e\u751f\u4ea7\uff0c\u901a\u8fc7\u7ecf\u6d4e\u751f\u4ea7\u521b\u9020\u4ef7\u503c\uff0c\u7136\u540e\u624d\u662f\u4ea4\u6613\u3002\u60f3\u60f3\u6211\u4eec\u6bcf\u4e2a\u4eba\u90fd\u5728\u4e0a\u73ed\uff0c\u521b\u9020\u4e0d\u540c\u7684\u4ea7\u54c1\uff0c\u4ece\u4e8b\u7ecf\u6d4e\u751f\u4ea7\uff0c\u7136\u540e\u4eba\u4eec\u7528\u8d5a\u53d6\u7684\u5de5\u8d44\u901a\u8fc7\u4ea4\u6613\u6765\u6362\u53d6\u5176\u4ed6\u4eba\u751f\u4ea7\u7684\u6709\u4ef7\u503c\u7684\u4e1c\u897f\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u4e2d\u7684\u7ecf\u6d4e\u4ef7\u503c\u4e3b\u8981\u662f\u7531\u6240\u6709\u4eba\u4e00\u8d77\u521b\u9020\u51fa\u6765\u7684\u3002"),(0,a.kt)("p",null,"\u4e00\u4e2a\u7e41\u8363\u7684\u6570\u5b57\u7ecf\u6d4e\u7cfb\u7edf\u4e5f\u4e0d\u4f8b\u5916\uff0c\u7136\u800c\u6211\u4eec\u770b\u73b0\u5728\u7684\u6570\u5b57\u7ecf\u6d4e\uff0c\u4ece\u4e8b\u751f\u4ea7\u6d3b\u52a8\u7684\u4eba\u662f\u6781\u5c11\u7684\uff0c\u6839\u636e",(0,a.kt)("a",{parentName:"p",href:"https://www.developernation.net/developer-reports/de20"},"Deverloper Nation"),"\u7f51\u7ad9\u7edf\u8ba1\uff0c2021\u5e74\u4e16\u754c\u4e0a\u53ea\u67092430\u4e07\u5f00\u53d1\u8005\uff0c\u9884\u8ba1\u52302030\u5e74\u4e5f\u53ea\u67094500\u4e07\u5f00\u53d1\u8005\uff0c\u8fd9\u5728\u4eba\u7c7b\u4eba\u53e3\u6570\u91cf\u4e2d\u4e0d\u8db30.5%\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"img",src:l(6943).Z,width:"1484",height:"311"})),(0,a.kt)("p",null,"\u5c3d\u7ba1\u5728\u4eca\u5e74\u5927\u6a21\u578b\u5728\u4ee3\u7801\u751f\u6210\u4e0a\u8868\u73b0\u51fa\u6781\u5927\u7684\u6f5c\u529b\uff0c\u751a\u81f3\u5fae\u8f6fCEO Satya Nadella\u4e5f\u63d0\u51fa\u672a\u6765\u53ef\u80fd\u501f\u52a9\u5927\u6a21\u578b\u7684\u80fd\u529b\uff0c\u4f7f\u5f9710\u4ebf\u4eba\u53ef\u4ee5\u6210\u4e3a\u5f00\u53d1\u4eba\u5458\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u201cI mean, there can be a billion developers. In fact, the world needs a billion developers\u2026 So the idea that this is actually a democratizing tool to make access to new technology and access to new knowledge easier, so that the ramp-up on the learning curve is easier.\u201d")),(0,a.kt)("p",null,"\u7136\u800c\u968f\u7740\u5927\u6a21\u578b\u5728\u8f85\u52a9\u4ee3\u7801\u7f16\u7a0b\u65b9\u9762\u7684\u4f7f\u7528\uff0c\u4f8b\u5982Github Copilot\uff0c\u6211\u4eec\u4e5f\u9010\u6e10\u610f\u8bc6\u5230\u5927\u6a21\u578b\u867d\u7136\u80fd\u591f\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u63d0\u5347\u5f00\u53d1\u6548\u7387\uff0c\u4f46\u662f\u5b83\u5bf9\u4e13\u4e1a\u4eba\u5458\u7684\u8981\u6c42\u4f9d\u7136\u5f88\u9ad8\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u4f9d\u7136\u53ea\u6709\u6bd4\u8f83\u4e13\u4e1a\u7684\u5f00\u53d1\u4eba\u5458\u624d\u53ef\u4ee5\u66f4\u597d\u5730\u4f7f\u7528\u5b83\u3002\u8fd9\u8fd8\u53ea\u662f\u8003\u8651\u5b83\u5728\u5c40\u90e8\u4ee3\u7801\u6a21\u5757\uff0c\u4f8b\u5982\u5355\u4e2a\u51fd\u6570\u7ea7\u7684\u4ee3\u7801\u751f\u6210\uff0c\u8fd8\u4e0d\u5305\u62ec\u66f4\u590d\u6742\u7684\u7a0b\u5e8f\u7ed3\u6784\u548c\u4e0a\u4e0b\u6587\u903b\u8f91\u7ba1\u7406\u3002\u5b9e\u9645\u4e0a\u5982\u4eca\u7684\u5927\u6a21\u578b\u5728\u7406\u8bba\u4e0a\u4e3b\u8981\u4ee5\u9884\u6d4b\u524d\u540e\u76f8\u5173\u7684\u7ebf\u6027\u5e8f\u5217\u6765\u5b9e\u73b0\u5185\u5bb9\u751f\u6210\uff0c\u8fd9\u79cd\u7406\u8bba\u5728\u9488\u5bf9\u7a0b\u5e8f\u7ed3\u6784\u8fd9\u79cd\u975e\u7ebf\u6027\u3001\u7ec4\u5408\u5f0f\u7684\u590d\u6742\u4efb\u52a1\u4e0a\u4f3c\u4e4e\u5b58\u5728\u4e00\u5b9a\u7684\u7406\u8bba\u9650\u5236\uff0c\u5982 ",(0,a.kt)("a",{parentName:"p",href:"https://arxiv.org/abs/2305.18654"},"Faith and Fate:Limits of Transformers on Compositionality")," \u8fd9\u7bc7\u7814\u7a76\u5de5\u4f5c\u6307\u51fa\u3002"),(0,a.kt)("p",null,"\u9664\u4e86\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u5143\u5b87\u5b99\u7c7b\u7684\u5e94\u7528\u8fd8\u8981\u6c42\u66f4\u591a\u7684\u52a8\u6001\u6027\uff0c\u4ee5\u53ca\u66f4\u91cd\u8981\u7684\u662f\u5728\u4e00\u4e2a\u5bbf\u4e3b\u7a0b\u5e8f\u4e2d\u5b89\u5168\u8fd0\u884c\u7b2c\u4e09\u65b9\u5b50\u7a0b\u5e8f\u7684\u80fd\u529b\uff0c\u8fd9\u4f1a\u5e26\u6765\u975e\u5e38\u5927\u7684\u5b89\u5168\u6027\u6311\u6218\uff0c\u5c3d\u7ba1\u6211\u4eec\u73b0\u5728\u6709\u4e00\u4e9b\u5982Web Assembly\u7b49\u5305\u542b\u7684\u6c99\u76d2\u6280\u672f\u53ef\u4ee5\u5728\u7406\u8bba\u4e0a\u5b9e\u73b0\u8fd9\u4e9b\u673a\u5236\uff0c\u4f46\u662f\u5728\u6839\u636e\u5c42\u9762\u8fd8\u6ca1\u6709\u6bd4\u8f83\u7b80\u6613\u53ef\u9760\u7684\u6846\u67b6\u53ef\u4ee5\u4f7f\u7528\uff0c\u56e0\u4e3a\u8fd9\u79cd\u6846\u67b6\u8fd8\u9700\u8981\u534f\u8c03\u5e94\u7528\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u548c\u8fd0\u884c\u673a\u5236\u3002"),(0,a.kt)("h3",{id:"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236"},"\u591a\u667a\u80fd\u4f53\u76f8\u4e92\u534f\u4f5c\u673a\u5236"),(0,a.kt)("p",null,"\u591a\u667a\u80fd\u4f53\uff08Multi-Agents\uff09\u662fAI\u9886\u57df\u73b0\u5728\u6bd4\u8f83\u70ed\u95e8\u7684\u4e00\u4e2a\u65b9\u5411\u3002\u5927\u6a21\u578b\u5bf9\u4e8e\u81ea\u7136\u8bed\u8a00\u7684\u7406\u89e3\u548c\u5bf9\u8bdd\u80fd\u529b\uff0c\u4f7f\u5f97\u4e00\u4e9b\u501f\u52a9\u5927\u6a21\u578b\u5185\u90e8\u7684\u77e5\u8bc6\u6765\u5b8c\u6210\u63a8\u7406\u548c\u89c4\u5212\u7684Agent\u5e94\u7528\u5e7f\u53d7\u5173\u6ce8\uff0c\u4f8b\u5982AutoGPT\u3001Generative Agents\u3001BabyAGI\u7b49\u7b49\u3002\u7136\u800c\u4eba\u4eec\u5b9e\u9645\u5728\u5f00\u53d1\u4e2d\uff0c\u4e5f\u7531\u4e8e\u9010\u6e10\u53d7\u9650\u4e8e\u5927\u6a21\u578b\u7684\u80fd\u529b\uff0c\u4f7f\u5f97\u5355\u7eaf\u7b80\u5355\u4f9d\u9760\u5927\u6a21\u578b\u6765\u63a8\u7406\u7684Agent\u4f1a\u6bd4\u8f83\u96be\u4ee5\u843d\u5730\uff0c\u5b9e\u9645\u7684Agent\u5f00\u53d1\u5f80\u5f80\u8fd8\u662f\u8981\u6d89\u53ca\u5927\u91cf\u7684\u903b\u8f91\u5f00\u53d1\uff0c\u5f53\u7136\u5176\u4e2d\u7684\u903b\u8f91\u4ea4\u4e92\u4e3b\u8981\u6d89\u53ca\u7684\u662f\u81ea\u7136\u8bed\u8a00\uff0c\u4e5f\u6b63\u662f\u53d7\u9650\u4e8e\u5927\u6a21\u578b\u5728\u81ea\u7136\u8bed\u8a00\u7406\u89e3\u65b9\u9762\u7684\u9c81\u68d2\u6027\uff0c\u5b9e\u9645\u7684\u5f00\u53d1\u90fd\u662f\u9700\u8981\u8bbe\u7f6e\u5927\u91cf\u7cbe\u5de7\u7684\u63d0\u793a\u8bcd\u5de5\u7a0b\u624d\u80fd\u8fbe\u5230\u6bd4\u8f83\u597d\u7684\u6027\u80fd\u3002"),(0,a.kt)("p",null,"\u4e0d\u7ba1\u662f\u53d7\u9650\u4e8e\u5355\u4e00Agent\u5728\u8bb0\u5fc6\u7ba1\u7406\u65b9\u9762\u7684\u4e0d\u53ef\u9760\u6027\uff0c\u8fd8\u662f\u7531\u4e8e\u8d8a\u6765\u8d8a\u590d\u6742\u7684\u4ea4\u4e92\u903b\u8f91\u4f7f\u5f97Agent\u5f00\u53d1\u548c\u7ba1\u7406\u7684\u590d\u6742\u5ea6\u9010\u6e10\u589e\u52a0\uff0c\u8d8a\u6765\u8d8a\u591a\u7684\u5de5\u4f5c\u5c06\u7126\u70b9\u8f6c\u79fb\u5230\u4e86\u591a\u667a\u80fd\u4f53\u7cfb\u7edf\u4e0a\uff0c\u5373\u901a\u8fc7\u5728\u4e00\u4e2a\u5171\u4eab\u7684\u73af\u5883\u4e2d\u8ba9\u591a\u4e2a\u5177\u6709\u4e0d\u540c\u51b3\u7b56\u80fd\u529b\u7684Agent\u5171\u540c\u534f\u4f5c\u6765\u5b8c\u6210\u4e00\u4e9b\u6307\u5b9a\u7684\u4e8b\u60c5\u3002\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4f20\u7edf\u7684\u65b9\u6cd5\u6765\u5f00\u53d1\u8fd9\u7c7b\u591a\u667a\u80fd\u4f53\u7cfb\u7edf\uff0c\u4f8b\u5982\u57fa\u4e8eLangChain\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u591a\u667a\u80fd\u4f53\u534f\u4f5c\u673a\u5236\u6709\u4e00\u4e9b\u65b0\u7684\u6280\u672f\u7279\u5f81\u3002"),(0,a.kt)("p",null,"\u591a\u667a\u80fd\u4f53\u4e3b\u8981\u7684\u6280\u672f\u7279\u5f81\u662f\u52a8\u6001\u6027\uff0c\u7531\u4e8eAgent\u7684\u6570\u91cf\u6781\u591a\uff0c\u6210\u767e\u751a\u81f3\u4e0a\u5343\uff0c\u90a3\u4e48\u8fd9\u7c7b\u7cfb\u7edf\u8981\u5177\u5907\u52a8\u6001\u7684\u80fd\u529b\uff0c\u80fd\u591f\u52a8\u6001\u6dfb\u52a0\u6216\u79fb\u9664\u4e00\u4e9bAgent\uff0c\u540c\u65f6\u5177\u6709\u8f83\u597d\u7684\u5bb9\u9519\u6027\uff0c\u5176\u4e2d\u7684\u67d0\u4e9bAgent\u51fa\u73b0\u8fd0\u884c\u9519\u8bef\u65f6\uff0c\u7cfb\u7edf\u53ef\u80fd\u7f3a\u4e4f\u67d0\u4e9b\u65b9\u9762\u7684\u80fd\u529b\uff0c\u4f46\u662f\u4e0d\u5f71\u54cd\u5176\u5b83\u80fd\u529b\u7684\u6b63\u5e38\u8fd0\u884c\uff0c\u5728\u8fd9\u4e9b\u51fa\u73b0\u8fd0\u884c\u9519\u8bef\u7684Agent\u6062\u590d\u8fd0\u884c\u540e\u6574\u4e2a\u7cfb\u7edf\u80fd\u591f\u52a8\u6001\u5bb9\u7eb3\u8be5\u80fd\u529b\u3002"),(0,a.kt)("p",null,"\u8fd9\u770b\u8d77\u6765\u50cf\u662fActor\u6a21\u578b\u5c1d\u8bd5\u89e3\u51b3\u7684\u95ee\u9898\uff0c",(0,a.kt)("a",{parentName:"p",href:"https://www.erlang.org/"},"Erlang")," \u662fActor\u6a21\u578b\u6bd4\u8f83\u6709\u77e5\u540d\u5ea6\u7684\u4ee3\u8868\uff0c\u5982\u679c\u6211\u4eec\u628a\u4e00\u4e2aAgent\u6bd4\u4f5c\u4e00\u4e2a\u7ebf\u7a0b\u6216\u8005Actor\uff0c\u90a3\u4e48Actor\u6a21\u578b\u7684\u5de5\u4f5c\u673a\u5236\u4f3c\u4e4e\u5c31\u53ef\u4ee5\u5b9e\u73b0\u591a\u667a\u80fd\u4f53\u4ea4\u4e92\u7684\u9700\u6c42\u3002\u5f00\u6e90\u9879\u76ee ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/ThousandBirdsInc/chidori"},"Chidori")," \u4e5f\u6b63\u662f\u57fa\u4e8e\u8be5\u7406\u5ff5\u7684\u4e00\u4e2a\u591a\u667a\u80fd\u4f53\u5f00\u6e90\u9879\u76ee\u3002\u5728\u8fd9\u7c7b\u67b6\u6784\u4e2d\uff0c\u5355\u4e2aAgent\u4f1a\u8ba2\u9605\u67d0\u7c7b\u4fe1\u606f\uff0c\u7136\u540e\u7cfb\u7edf\u4f1a\u7ef4\u62a4\u8fd9\u7c7b\u4fe1\u606f\u7684\u5206\u53d1\uff0c\u4f7f\u5f97\u4e00\u65e6\u6709Agent\u53d1\u51fa\u4e86\u67d0\u7c7b\u4fe1\u606f\uff0c\u8ba2\u9605\u8be5\u4fe1\u606f\u7684Agent\u5c31\u4f1a\u5f97\u5230\u54cd\u5e94\uff0c\u4fe1\u606f\u672c\u8eab\u5145\u5f53\u4e86\u4ea4\u4e92\u7684\u63a5\u53e3\u548c\u673a\u5236\u3002"),(0,a.kt)("p",null,"\u76f8\u5bf9\u4e8e\u591a\u667a\u80fd\u4f53\u7684\u9700\u6c42\uff0c\u8fd9\u7c7b\u67b6\u6784\u8fd8\u5b58\u5728\u7740\u4e24\u70b9\u4e0d\u8db3\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7f3a\u4e4f\u6570\u636e\u4e92\u64cd\u4f5c\u7684\u673a\u5236\u6216Agent\u4e4b\u95f4\u901a\u4fe1\u7684\u534f\u8bae"),"\uff0c\u6bcf\u4e2aAgent\u4e4b\u95f4\u4e3b\u8981\u662f\u901a\u8fc7\u5b57\u7b26\u4e32\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u6837\u4fdd\u8bc1Agent\u548cAgent\u4e4b\u95f4\u7684\u529f\u80fd\u89e3\u8026\u3002\u7136\u800c\u8fd9\u6837\u7684\u9690\u5f0f\u534f\u8bae\u901a\u5e38\u4e0d\u4fbf\u4e8eAgent\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u7279\u522b\u662f\u6765\u81ea\u4e0d\u540c\u7684\u5f00\u53d1\u8005\u4e4b\u95f4\u7684Agent\uff0c\u5b83\u4eec\u5728\u901a\u4fe1\u683c\u5f0f\u4e0a\u6ca1\u6709\u663e\u5f0f\u7684\u4fdd\u969c\u673a\u5236\u3002\u6b64\u5916\uff0cAgent\u76f8\u8f83\u4e8e\u4e00\u4e2aActor\u7b97\u662f\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u7ebf\u7a0b\uff0c\u5185\u90e8\u672c\u8eab\u8fd8\u5305\u62ec\u5f88\u590d\u6742\u7684\u903b\u8f91\uff0c\u4e5f\u5c31\u610f\u5473\u7740Agent\u5185\u90e8\u53ef\u80fd\u8fd8\u5305\u62ec\u7740\u5927\u91cf\u9700\u8981\u83b7\u53d6\u7528\u6237\u6570\u636e\u7684\u903b\u8f91\uff0c\u8fd9\u5176\u4e2d\u6709\u4e9b\u6570\u636e\u662f\u6765\u81ea\u5176\u5b83\u7a0b\u5e8f\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e5f\u9700\u8981\u4e92\u64cd\u4f5c\u6027\u7684\u652f\u6301\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7f3a\u4e4f\u5f00\u53d1\u8fd9\u7c7b\u5e94\u7528\u7cfb\u7edf\u7684\u65b9\u6cd5\u8bba"),"\u3002\u591a\u667a\u80fd\u4f53\u534f\u4f5c\u7c7b\u4f3c\u4e8e\u4e00\u79cd\u590d\u6742\u7cfb\u7edf\uff0c\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e2a\u5178\u578b\u7279\u5f81\u662f\u5b83\u7684\u884c\u4e3a\u6216\u529f\u80fd\u662f\u4e0d\u53ef\u9884\u671f\u7684\uff0c\u5b83\u4eec\u662f\u9760\u5f88\u591a\u903b\u8f91\u7b80\u5355\u7684\u5b50\u7cfb\u7edf\u76f8\u4e92\u4f5c\u7528\u6d8c\u73b0\u51fa\u73b0\u7684\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u6211\u4eec\u4e0d\u5149\u662f\u9700\u8981\u5f00\u53d1\u8fd9\u79cd\u7cfb\u7edf\u7684\u5de5\u5177\uff0c\u8fd8\u9700\u8981\u4e00\u5957\u7cfb\u7edf\u7684\u65b9\u6cd5\u8bba\u6765\u5e2e\u52a9\u6211\u4eec\u6d4b\u8bd5\u6216\u9884\u6d4b\u7cfb\u7edf\u7684\u529f\u80fd\u884c\u4e3a\uff0c\u4f7f\u4e4b\u7b26\u5408\u7528\u6237\u7684\u9884\u671f\uff0c\u5426\u5219\u590d\u6742\u7cfb\u7edf\u5728\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u53ef\u80fd\u4f1a\u8868\u73b0\u51fa\u672a\u77e5\u7684\u884c\u4e3a\u3002")),(0,a.kt)("p",null,"\u7b2c\u4e00\u4e2a\u95ee\u9898\u4e5f\u662f\u4f20\u7edf\u7b80\u5355\u7684Actor\u6a21\u578b\u5728\u590d\u6742\u9879\u76ee\u4e2d\u4f1a\u9047\u5230\u7684\u95ee\u9898\uff0c\u4f20\u7edf\u7684Actor\u6a21\u578b\u4e00\u822c\u6709\u4e24\u4e2a\u5047\u8bbe\uff1a\u4e00\u662fActor\u8db3\u591f\u5c0f\uff0c\u751a\u81f3\u51e0\u4e4e\u5c31\u662f\u4e00\u4e2a\u51fd\u6570\uff1b\u4e8c\u662fActor\u51fd\u6570\u529f\u80fd\u672c\u8eab\u7c7b\u4f3c\u7eaf\u51fd\u6570\uff0c\u8fd9\u6837\u5b83\u5185\u90e8\u5c31\u6ca1\u6709\u72b6\u6001\uff0c\u6574\u4e2a\u95ee\u9898\u5c31\u7b80\u5316\u4e86\u5f88\u591a\u3002\u8fd9\u79cd\u6a21\u578b\u9488\u5bf9\u90a3\u79cd\u53ea\u662f\u4e1a\u52a1\u91cf\u591a\u3001\u4f46\u662f\u4e1a\u52a1\u4e4b\u95f4\u76f8\u5bf9\u72ec\u7acb\u7684\u4e1a\u52a1\u573a\u666f\u662f\u6bd4\u8f83\u5408\u9002\u7684\uff0c\u4f8b\u5982Erlang\u672c\u8eab\u9488\u5bf9\u7684\u7535\u4fe1\u4e1a\u52a1\u573a\u666f\uff0c\u4ee5\u53caWeb\u670d\u52a1\u7c7b\u5e94\u7528\u3002\u4f46\u662f\u9488\u5bf9\u66f4\u4e00\u822c\u7684\u4e1a\u52a1\u573a\u666f\uff0c\u4e1a\u52a1\u4e4b\u95f4\u90fd\u7a7f\u63d2\u7740\u5927\u91cf\u7684\u6570\u636e\u4ea4\u4e92\uff0c\u8fd9\u79cd\u4ea4\u4e92\u6ca1\u6709\u6bd4\u8f83\u7b80\u5355\u7684\u89c4\u5219\uff0c\u6240\u4ee5\u6211\u4eec\u4f20\u7edf\u7684\u7a0b\u5e8f\u5f00\u53d1\uff0c\u6700\u590d\u6742\u7684\u90e8\u5206\uff0c\u4e5f\u8bb8\u5c31\u662f\u8fd9\u79cd\u6570\u636e\u7ba1\u7406\u7684\u590d\u6742\u6027\uff1a\u6bcf\u4e2a\u4e1a\u52a1\u51fd\u6570\u672c\u8eab\u7684\u903b\u8f91\u53ef\u80fd\u662f\u6bd4\u8f83\u6e05\u6670\u7684\uff0c\u4f46\u662f\u4e3a\u4e86\u6267\u884c\u8fd9\u4e2a\u51fd\u6570\u4ee5\u53ca\u4e3a\u4e86\u77e5\u9053\u4ec0\u4e48\u65f6\u5019\u9700\u8981\u6267\u884c\u8fd9\u4e2a\u51fd\u6570\uff0c\u6211\u4eec\u9700\u8981\u4ece\u6574\u4e2a\u7a0b\u5e8f\u5230\u5904\u53bb\u5bfb\u627e\u6761\u4ef6\uff0c\u4f8b\u5982\u6765\u81ea\u5404\u4e2a\u5730\u65b9\u7684\u4e0a\u4e0b\u6587\u6570\u636e\uff0c\u548c\u5404\u4e2a\u903b\u8f91\u7684\u524d\u7f6e\u6761\u4ef6\uff0c\u8fd9\u901a\u5e38\u6ca1\u6709\u4e00\u4e2a\u7b80\u5355\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u8fd9\u53ef\u80fd\u4e5f\u662f\u7f16\u7a0b\u5b66\u4e60\u95e8\u69db\u4e2d\u76f8\u5bf9\u7f16\u7a0b\u8bed\u8a00\u8bed\u6cd5\u672c\u8eab\u66f4\u590d\u6742\u7684\u90e8\u5206\u3002"),(0,a.kt)("p",null,"\u5728\u540e\u9762\u7684\u4ecb\u7ecd\u4e2d\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u7c7b\u578b\u7cfb\u7edf\u4ee5\u53ca\u5bf9\u5e94\u7684\u4e92\u64cd\u4f5c\u673a\u5236\uff0c\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u540c\u65f6\u4e5f\u4f1a\u901a\u8fc7\u66f4\u6df1\u523b\u5730\u6d1e\u5bdf\u548c\u501f\u9274\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u601d\u8def\u6765\u89e3\u51b3\u7b2c\u4e8c\u4e2a\u95ee\u9898\u3002"),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"\u76f8\u5173\u77e5\u8bc6"},"\u76f8\u5173\u77e5\u8bc6"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u4f1a\u7b80\u5355\u4ecb\u7ecd\u4e00\u4e9b\u96f6\u788e\u7684\u5df2\u6709\u76f8\u5173\u77e5\u8bc6\uff0c\u5f53\u7136\u8fd9\u91cc\u4ec5\u4ecb\u7ecd\u5b83\u4eec\u7684\u4e00\u4e9b\u57fa\u672c\u6982\u5ff5\u548c\u601d\u8def\uff0c\u5176\u76ee\u7684\u662f\u4e3a\u4e86\u7406\u89e3\u5176\u4e2d\u7684\u601d\u60f3\uff0c\u4ece\u800c\u66f4\u597d\u5730\u7406\u89e3\u6211\u4eec\u7684\u67b6\u6784\u600e\u6837\u53bb\u91c7\u7528\u8fd9\u4e9b\u601d\u60f3\uff0c\u53c8\u505a\u51fa\u4e86\u4ec0\u4e48\u8c03\u6574\uff0c\u4e3a\u4ec0\u4e48\u8981\u505a\u51fa\u8fd9\u6837\u7684\u8c03\u6574\uff0c\u4ee5\u53ca\u505a\u51fa\u4e86\u8fd9\u4e9b\u8c03\u6574\u4e4b\u540e\u5e26\u6765\u4e86\u4ec0\u4e48\u65b0\u7684\u53d8\u5316\u3002"),(0,a.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027"},"\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("p",null,"\u4e92\u64cd\u4f5c\u6027\u7684 ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Interoperability"},"\u5b9a\u4e49")," \u5982\u4e0b\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("strong",{parentName:"p"},"Interoperability")," is a characteristic of a product or system to work with other products or systems.")),(0,a.kt)("p",null,"\u7531\u5b9a\u4e49\u53ef\u4ee5\u770b\u51fa\uff0c\u4e92\u64cd\u4f5c\u7684\u672c\u610f\u5728\u7a0b\u5e8f\u7684\u73af\u5883\u4e0b\u5c31\u662f\u51fd\u6570\u8c03\u7528\u7684\u80fd\u529b\uff0c\u4f46\u4e92\u64cd\u4f5c\u6027\u5927\u591a\u662f\u6307\u4e24\u4e2a\u76f8\u5bf9\u6bd4\u8f83\u9694\u79bb\u6216\u8005\u4e0d\u540c\u8bed\u8a00\u7684\u7cfb\u7edf\u4e4b\u95f4\u7684\u51fd\u6570\u8c03\u7528\uff0c\u5185\u90e8\u7684\u51fd\u6570\u6216\u7f16\u8bd1\u5230\u7a0b\u5e8f\u5185\u90e8\u7684\u7b2c\u4e09\u65b9\u51fd\u6570\u8c03\u7528\u5219\u4e0d\u9700\u8981\u5f3a\u8c03\u5b83\u7684\u4e92\u64cd\u4f5c\u6027\u610f\u4e49\u3002\u4f8b\u5982\u5bbf\u4e3b\u7a0b\u5e8f\u4e0e\u52a8\u6001\u811a\u672c\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u4f8b\u5982C++\u4e0eC\u6216\u8005Rust\u4e0eC\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\uff0c\u751a\u81f3\u4e00\u4e2a\u865a\u62df\u673a\u652f\u6301\u7684\u591a\u4e2a\u8bed\u8a00\u7f16\u7a0b\u7684\u7a0b\u5e8f\u4e4b\u95f4\u7684\u8c03\u7528\u6216\u901a\u4fe1\u3002\u5728\u8fd9\u7c7b\u60c5\u51b5\u4e0b\uff0c\u88ab\u8c03\u51fd\u6570\u7684\u7c7b\u578b\u662f\u65e0\u6cd5\u88ab\u7f16\u7801\u5230\u7a0b\u5e8f\u4e2d\u7684\uff0c\u8fd9\u901a\u5e38\u9700\u8981\u7a0b\u5e8f\u5185\u90e8\u5b9e\u73b0\u4e00\u4e2a\u5bf9\u5e94\u7684\u5185\u90e8\u7c7b\u578b\uff0c\u7136\u540e\u76f8\u4e92\u4e4b\u95f4\u901a\u8fc7\u67d0\u79cd\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u6765\u4f20\u9012\u4fe1\u606f\u3002\u6240\u4ee5\u4e92\u64cd\u4f5c\u901a\u5e38\u662f\u548c\u6807\u51c6\u76f8\u5173\u7684\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"If two or more systems use common data formats and communication protocolsand are capable of communicating with each other, they exhibit",(0,a.kt)("em",{parentName:"p"},"syntactic interoperability"),". XML and SQL are examples of common data formats and protocols.")),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e16\u754c\u901a\u8fc7\u4e00\u4e9b\u6807\u51c6\u6765\u5efa\u7acb\u4e92\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982HTML\u3001XML\u3001SQL\u3001USD\u7b49\u7b49\uff0c\u6bd4\u5982Nvidia\u5c31\u57fa\u4e8eUSD\u6784\u5efa\u4e86Omniverse\uff0c\u7531\u4e8e\u5176\u5bf9USD\u683c\u5f0f\u7684\u826f\u597d\u652f\u6301\uff0c\u4f7f\u5f97\u5176\u53ef\u4ee5\u517c\u5bb9\u5927\u90e8\u5206\u7684\u5185\u5bb9\u5236\u4f5c\u5de5\u5177\uff0c\u5c31\u6784\u5efa\u8d77\u4e00\u4e2a\u4ee5Omniverse\u4e3a\u4e2d\u5fc3\u7684\u5185\u5bb9\u548c\u5e94\u7528\u751f\u6001\u3002"),(0,a.kt)("p",null,"Tim\u57282019\u5e74\u7684\u6f14\u8bb2",(0,a.kt)("a",{parentName:"p",href:"https://dl.acm.org/doi/10.1145/3306307.3339844"},"\u300aFoundational principles & technologies for the metaverse\u300b"),"\u4e2d\u5927\u91cf\u63d0\u5230\u4e86\u6807\u51c6\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u4e2a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u534f\u4f5c\uff0c\u90a3\u4e48\u5fc5\u7136\u8981\u5efa\u7acb\u5927\u91cf\u7684\u6807\u51c6\uff0c\u6709\u4e86\u8fd9\u4e9b\u6807\u51c6\uff0c\u4e92\u64cd\u4f5c\u5c31\u53d8\u5f97\u7b80\u5355\uff0c\u4f8b\u5982\u300a\u5821\u5792\u4e4b\u591c\u300b\u73b0\u5728\u7684Creative\u6a21\u5f0f\u5b9e\u9645\u4e0a\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u6807\u51c6\uff0c\u6bd4\u5982\u4e00\u4e2a\u7269\u4f53\u600e\u4e48\u6446\u653e\u5728\u73af\u5883\u4e2d\uff0c\u5e76\u53ef\u4ee5\u88ab\u5176\u4ed6\u73a9\u5bb6\u4ea4\u4e92\uff0c\u8fd9\u90fd\u662f\u53ef\u4ee5\u7531Device\u6765\u5b9a\u4e49\u7684\uff0c\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u6216\u8005\u63a5\u53e3\uff0c\u53ea\u8981\u9075\u5faa\u8fd9\u4e9b\u6807\u51c6\uff0c\u5219\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u4e0e\u5176\u4ed6\u7684\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u8fd9\u79cd\u57fa\u4e8e\u6587\u672c\u6807\u51c6\u7684\u65b9\u5f0f\u4ecd\u7136\u6709\u4e00\u4e9b\u7f3a\u9677\uff0c\u4f8b\u5982\u5176\u6570\u91cf\u662f\u975e\u5e38\u5c11\u7684\uff0c\u901a\u5e38\u5fc5\u987b\u7b49\u4e00\u4e2a\u7ec4\u7ec7\u5bf9\u4e00\u4e2a\u6807\u51c6\u6709\u4e00\u5b9a\u5f71\u54cd\u529b\u4e4b\u540e\u624d\u80fd\u5f62\u6210\u5b9e\u65f6\u4e0a\u7684\u6807\u51c6\uff0c\u88ab\u66f4\u591a\u7684\u4e09\u65b9\u517c\u5bb9\u548c\u652f\u6301\u3002\u60f3\u60f3\u73b0\u5b9e\u4e16\u754c\uff0c\u5404\u4e2a\u5b9e\u4f53\u4e4b\u95f4\u7684\u4ea4\u4e92\u548c\u8054\u7cfb\u51e0\u4e4e\u662f\u65e0\u6240\u4e0d\u5728\u7684\uff0c\u4f8b\u5982\u4e00\u4e2a\u4eba\u5728\u8def\u8fb9\u65b0\u5f00\u4e86\u4e00\u5bb6\u996d\u5e97\uff0c\u8def\u8fc7\u7684\u4eba\u968f\u65f6\u53ef\u4ee5\u8fdb\u53bb\u5403\u996d\uff0c\u4e0d\u4f1a\u8bf4\u8fd8\u8981\u5148\u63a5\u4e00\u4e0b\u996d\u5e97\u5b9a\u4e49\u7684\u4e00\u4e2a\u63a5\u53e3\u3002\u800c\u7a0b\u5e8f\u662f\u5fc5\u987b\u6709\u4e25\u683c\u7684\u903b\u8f91\u7684\uff0c\u6bd4\u5982\u4fdd\u8bc1\u5730\u5740\u3001\u53c2\u6570\u548c\u63a5\u53e3\u7684\u4e00\u81f4\u6027\u624d\u80fd\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u7ed9\u8f6f\u4ef6\u4e16\u754c\u7684\u4e92\u64cd\u4f5c\u5e26\u6765\u4e86\u4e00\u5b9a\u7684\u56f0\u96be\u3002\u6211\u4eec\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u7684\u6d41\u7a0b\u901a\u5e38\u90fd\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u8f6f\u4ef6\u529f\u80fd\u4e4b\u540e\uff0c\u518d\u4ee5\u4e00\u5b9a\u7684\u5f62\u5f0f\u5c01\u88c5\u4e00\u4e9b\u63a5\u53e3\uff0c\u5e76\u4ee5\u67d0\u79cd\u65b9\u5f0f\u516c\u5e03\u51fa\u6765\uff0c\u7531\u611f\u5174\u8da3\u7684\u4e09\u65b9\u53bb\u96c6\u6210\u3002\u7136\u800c\u5b9e\u9645\u4e0a\u6709\u5927\u91cf\u7684\u8f6f\u4ef6\u5f00\u53d1\u8005\u662f\u6ca1\u6709\u7cbe\u529b\u6216\u8005\u80fd\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e9b\u63a5\u53e3\u7684\u3002\u60f3\u8c61\u4e00\u4e2a\u573a\u666f\uff1a\u5f00\u53d1\u8005A\u5f00\u53d1\u4e86\u67d0\u4e2a\u5e94\u7528\u7ed9\u7528\u6237\u65b0\u589e\u4e86\u4e00\u79cd\u65b0\u7684\u5065\u5eb7\u7c7b\u7684\u6570\u636e\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6570\u636e\u672c\u6765\u662f\u5c5e\u4e8e\u7528\u6237\u7684\uff0c\u8fd9\u4e2a\u65f6\u5019\u7528\u6237\u60f3\u8981\u7528\u8fd9\u4e2a\u6570\u636e\u6765\u5b9e\u73b0\u53e6\u4e00\u4e2a\u4e8b\u60c5\uff0cTA\u60f3\u81ea\u5df1\u6216\u8005\u8bf4\u8ba9\u5176\u4ed6\u5f00\u53d1\u8005B\u5e2e\u52a9\u5f00\u53d1\u4e00\u4e2a\u5e94\u7528\u6765\u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u662f\u505a\u4e0d\u5230\u7684\uff0c\u56e0\u4e3a\u5f00\u53d1\u8005A\u53ef\u80fd\u5e76\u6ca1\u6709\u592a\u591a\u52a8\u529b\u53bb\u63d0\u4f9b\u8fd9\u4e2a\u63a5\u53e3\uff0c\u56e0\u4e3aTA\u53ef\u80fd\u8981\u8017\u8d39\u5f88\u5927\u7684\u7cbe\u529b\uff0c\u9664\u975e\u5e73\u53f0\u63d0\u4f9b\u4e00\u4e9b\u8fd9\u79cd\u975e\u5e38\u4fbf\u5229\u7684\u673a\u5236\u4f7f\u5f97TA\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u66b4\u9732\u51fa\u6765\u3002"),(0,a.kt)("p",null,"\u5176\u5b9e\u66f4\u6df1\u523b\u4e00\u70b9\u7406\u89e3\uff0c\u4e92\u64cd\u4f5c\u95ee\u9898\u5176\u5b9e\u662f\u4e00\u4e2a\u8f6f\u4ef6\u788e\u7247\u5316\u7684\u95ee\u9898\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u90fd\u662f\u5148\u5f00\u53d1\u5185\u90e8\u6570\u636e\u7ed3\u6784\u548c\u6570\u636e\u5b58\u50a8\uff0c\u7136\u540e\u5728\u5fc5\u8981\u7684\u65f6\u5019\u518d\u628aAPI\u5305\u88c5\u4f7f\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u6807\u51c6\u5305\u88c5\u6210\u5916\u90e8\u63a5\u53e3\uff0c\u8fd9\u6837\u5c31\u9020\u6210\u788e\u7247\u5316\uff0c\u56e0\u4e3a\u5373\u4f7f\u662f\u9488\u5bf9\u540c\u6837\u7684\u4e00\u7c7b\u903b\u8f91\u548c\u6570\u636e\uff0c\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u670d\u52a1\u5f80\u5f80\u4f1a\u5b9a\u4e49\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u6216\u5904\u7406\u903b\u8f91\uff0c\u8fd9\u5c31\u5f62\u6210API\u7684\u788e\u7247\u5316\uff0c\u4f7f\u5f97\u76f8\u4e92\u4e4b\u95f4\u975e\u5e38\u96be\u4ee5\u534f\u4f5c\u3002\u8bd5\u60f3\u4f60\u53ef\u4ee5\u5728\u4e24\u4e2a\u5e94\u7528\u4e4b\u95f4\u534f\u5546\u4fee\u6539\u5404\u81ea\u7684API\u63a5\u53e3\u53ca\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u6216\u8005\u8bf4\u50cf\u652f\u4ed8\u5b9d\u8fd9\u79cd\u5e73\u53f0\u6027\u8d28\u7684\u63a5\u53e3\u4e5f\u662f\u5bb9\u6613\u5b9a\u4e49\uff0c\u8fd9\u662f\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\uff0c\u4e00\u5bf9\u591a\u7684\u5173\u7cfb\u53d1\u5c55\u663e\u7136\u662f\u7f13\u6162\u7684\uff0c\u5fc5\u987b\u8ba9\u8fd9\u4e2a\u201c\u4e00\u201d\u6709\u673a\u4f1a\u4e14\u9700\u8981\u65f6\u95f4\u53d1\u5c55\u58ee\u5927\u3002\u5982\u679c\u6211\u4eec\u5e0c\u671b\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\uff0c\u66f4\u52a0\u4e30\u5bcc\u7684\u534f\u4f5c\u673a\u5236\uff0c\u90a3\u4e48\u663e\u7136\u6211\u4eec\u9700\u8981\u591a\u5bf9\u591a\u673a\u5236\uff0c\u8fd9\u91cc\u9762\u5c31\u8981\u6c42\u6211\u4eec\u5bf9\u8f6f\u4ef6\u5f00\u53d1\u6d41\u7a0b\u505a\u4e00\u4e9b\u8c03\u6574\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"img",src:l(9085).Z,width:"1954",height:"864"})),(0,a.kt)("p",null,"\u8981\u60f3\u5b9e\u73b0\u8fd9\u79cd\u673a\u5236\uff0c\u5176\u5b9e\u73b0\u6709\u7684\u5f88\u591a\u6280\u672f\u53ef\u4ee5\u7ed9\u4e88\u5f88\u591a\u542f\u793a\u3002\u6211\u4eec\u5148\u770bUSD\u683c\u5f0f\uff0c\u5c3d\u7ba1\u4ece\u8868\u9762\u770bUSD\u8ddf\u5176\u4ed6\u7684\u6807\u51c6\u7c7b\u4f3c\u53ea\u662f\u4e00\u79cd\u6570\u636e\u683c\u5f0f\u6216\u534f\u8bae\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b83\u8fdc\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5b83\u8fd8\u662f\u4e00\u79cd\u975e\u5e38\u6613\u4e8e\u6269\u5c55\u7684\u683c\u5f0f\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cdplugin\u7684\u673a\u5236\u4f7f\u5f97\u5f00\u53d1\u8005\u53ef\u4ee5\u5bf9\u683c\u5f0f\u505a\u5f88\u591a\u5b9a\u5236\u548c\u589e\u5f3a\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2aSchema\u5b9a\u4e49\u6765\u751f\u6210\u81ea\u5df1\u5b9a\u4e49\u683c\u5f0f\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u7136\u540e\u901a\u8fc7Plugin\u6765\u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u683c\u5f0f\u89e3\u6790\u548c\u4ee3\u7801\u3002\u8fd9\u5c31\u597d\u6bd4\u5b83\u5e2e\u52a9\u4f60\u7f16\u5199\u4e86\u6587\u672c\u683c\u5f0f\u7684\u7f16\u89e3\u7801\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u4e0d\u8fc7\u5982\u6b64\uff0c\u770b\u8d77\u6765\u53ea\u662f\u4e00\u79cd\u6a21\u677f\u5316\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u4f46\u662f\u5f53\u8fd9\u79cd\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4e0e\u903b\u8f91\u9ad8\u5ea6\u878d\u4e3a\u4e00\u4f53\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u7684\u672c\u8d28\u53d1\u751f\u4e86\u4e00\u4e9b\u53d8\u5316\uff0c\u8bd5\u60f3\u4f7f\u7528USD\u4f60\u7684\u6d41\u7a0b\u662f\u8fd9\u6837\uff1a\u9996\u5148\u9488\u5bf9\u4e00\u79cd\u7279\u5b9a\u6570\u636e\u81ea\u5b9a\u4e49\u4e00\u4e2aSchema\uff0c\u7136\u540e\u8c03\u7528USD\u7684API\u5e2e\u52a9\u6211\u4eec\u751f\u6210\u76f8\u5173\u7684\u89e3\u6790\u4ee3\u7801\uff0c\u5982\u679c\u8fd9\u6bb5\u89e3\u6790\u4ee3\u7801\u80fd\u591f\u4ee5\u67d0\u79cd\u673a\u5236\u88ab\u5176\u4ed6\u5f00\u53d1\u8005\u62ff\u5230\uff0c\u90a3\u4e48TA\u7684\u7a0b\u5e8f\u5c31\u80fd\u591f\u8f7b\u677e\u89e3\u6790\u6211\u4eec\u7684API\u3002\u5f53\u7136\u5982\u679c\u4f60\u4fee\u6539\u4e86Schema\uff0c\u4ecd\u7136\u9700\u8981\u5bf9\u65b9\u8fdb\u884c\u540c\u6b65\uff0c\u4f46\u662f\u8fd9\u79cd\u6d41\u7a0b\u672c\u8d28\u4e0a\u6539\u53d8\u4e86\u6211\u4eec\u7684\u601d\u8def\uff1a\u8fc7\u53bb\u6211\u4eec\u662f\u5148\u5b9a\u4e49\u5185\u90e8\u505a\u6cd5\uff0c\u518d\u4e0e\u5916\u754c\u6c9f\u901a\uff0c\u8fd9\u5c31\u5bb9\u6613\u5e26\u6765\u4e00\u4e9b\u590d\u6742\u5ea6\u548c\u788e\u7247\u5316\uff1b\u73b0\u5728\u662f\u6211\u4eec\u5148\u60f3\u7740\u81ea\u5df1\u5c31\u662f\u57fa\u4e8e\u4e00\u79cd\u6807\u51c6\u5728\u5f00\u53d1\uff0c\u7136\u540e\u9700\u8981\u7684\u65f6\u5019\u5c31\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u66b4\u9732\u51fa\u53bb\uff0c\u8fd9\u91ccUSD\u5145\u5f53\u4e86\u4e00\u79cd\u534f\u8c03\u7684\u673a\u5236\u5e76\u4e3a\u8fd9\u79cd\u534f\u8c03\u7684\u673a\u5236\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8f85\u52a9\u529f\u80fd\u3002\u82f9\u679c\u7684usdz\u683c\u5f0f\u4ee5\u53ca\u82f1\u4f1f\u8fbe\u7684MDL\u90fd\u662f\u57fa\u4e8eUSD\u7684\u8fd9\u79cd\u6269\u5c55\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u8d44\u6e90\u683c\u5f0f\u3002"),(0,a.kt)("p",null,"API\u788e\u7247\u5316\u7684\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u662fLLVM\uff0c\u672c\u8d28\u4e0aLLVM\u5728\u7f16\u8bd1\u5668\u9886\u57df\u7684\u521b\u65b0\u4e3b\u8981\u505a\u7684\u662f\u6a21\u5757\u5316\uff0c\u65e9\u671f\u7684\u7f16\u8bd1\u5668\u5f00\u53d1\uff0c\u5404\u4e2a\u524d\u7aef\u90fd\u8981\u5206\u522b\u96c6\u6210\u5404\u4e2a\u540e\u7aef\uff0c\u7f16\u8bd1\u5668\u5f00\u53d1\u7684\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u8fd9\u91cc\u9762\u5176\u5b9e\u5c31\u662f\u591a\u5bf9\u591a\u7684\u95ee\u9898\uff0c\u770b\u4f3c\u5f88\u7b80\u5355\uff0c\u6bcf\u4e2a\u524d\u7aef\u4e0e\u6bcf\u4e2a\u540e\u7aef\u5206\u522b\u8c03\u4e00\u8c03\uff0c\u4f46\u968f\u4e4b\u4ee3\u7801\u7684\u7ba1\u7406\u548c\u7ef4\u62a4\u6210\u672c\u662f\u5f88\u9ad8\u7684\uff0c\u6709\u65f6\u5019\u67d0\u4e9b\u5185\u90e8\u8bbe\u8ba1\u4e0d\u4e00\u81f4\u5c31\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u91cd\u590d\uff0c\u8fd9\u5c31\u662f\u788e\u7247\u5316\u95ee\u9898\u3002\u7531\u5185\u800c\u5916\u7684\u8bbe\u8ba1\u603b\u662f\u4e0d\u53ef\u907f\u514d\u4f1a\u5bfc\u81f4\u788e\u7247\u5316\uff0c\u788e\u7247\u5316\u5e26\u6765\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u7ba1\u7406\u548c\u7814\u53d1\u6210\u672c\u3002\u5f53LLVM\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u4f4e\u5c42IR\u8868\u8ff0\u4e4b\u540e\uff0c\u7f16\u8bd1\u5668\u7684\u590d\u6742\u5ea6\u5927\u5927\u964d\u4f4e\uff0c\u6bd4\u5982\u73b0\u5728\u80fd\u591f\u5f88\u8f7b\u6613\u5730\u5f00\u53d1\u4e00\u4e9bDSL\u8bed\u8a00\uff0c\u56e0\u4e3a\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u64cd\u5fc3\u540e\u7aef\uff0c\u53ea\u9700\u8981\u628a\u4f60\u7684\u4ee3\u7801\u751f\u6210LLVM IR\u5373\u53ef\u3002"),(0,a.kt)("p",null,"\u5f53\u7136LLVM\u5e76\u6ca1\u6709\u63d0\u4f9b\u7c7b\u4f3cUSD\u90a3\u79cd\u751f\u6210\u683c\u5f0f\u7684\u673a\u5236\uff0c\u90a3\u662f\u56e0\u4e3aLLVM\u53ea\u6709\u4e00\u79cdIR\uff0c\u6240\u4ee5\u5199\u6210\u4e00\u79cd\u56fa\u5b9a\u7684\u683c\u5f0f\u5373\u53ef\uff0c\u8fc7\u53bb\u7684\u7f16\u8bd1\u6d41\u7a0b\u57fa\u672c\u4e0a\u90fd\u6bd4\u8f83\u7b80\u5355\u3001\u56fa\u5b9a\u3002\u4f46\u662f\u968f\u7740\u73b0\u4ee3\u6df1\u5ea6\u5b66\u4e60\u7f16\u8bd1\u5668\u7684\u8fdb\u5c55\uff0c\u7531\u4e8e\u6df1\u5ea6\u5b66\u4e60\u6709\u7740\u76f8\u5bf9\u6bd4\u8f83\u7279\u5b9a\u7684\u6570\u636e\u8868\u8ff0\uff0c\u5404\u4e2a\u516c\u53f8\u5185\u90e8\u90fd\u6709\u5f00\u53d1\u4e00\u4e9b\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u5b83\u662f\u6bd4\u4e00\u822c\u7684LLVM IR\u66f4\u4e0a\u5c42\u7684\u62bd\u8c61\uff0c\u6240\u4ee5\u6211\u4eec\u5bf9\u591a\u5c42\u7ea7IR\u8868\u8ff0\u53c8\u6709\u4e86\u9700\u6c42\uff0c\u4e8e\u662f\u5728LLVM\u7684\u57fa\u7840\u4e0a\u53c8\u53d1\u5c55\u51faMLIR\uff0c\u5b83\u5141\u8bb8\u5f00\u53d1\u8005\u793e\u533a\u80fd\u591f\u81ea\u5b9a\u4e49IR\u3002\u7136\u800c\u4e0eUSD\u7684Schema\u975e\u5e38\u76f8\u4f3c\u7684\u5730\u65b9\u662f\uff0cMLIR\u4e3a\u4e86\u907f\u514d\u788e\u7247\u5316\uff0c\u4f7f\u4e0d\u540c\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u7684IR\u4e4b\u95f4\u80fd\u591f\u66f4\u8f7b\u6613\u7684\u534f\u4f5c\uff0c\u5b83\u4e5f\u63d0\u4f9b\u4e86\u4e00\u79cd\u7c7b\u4f3c\u7684\u4ee3\u7801\u751f\u6210\u673a\u5236\uff0c\u5728MLIR\u4e2d\u79f0\u4e3aDialect \uff0c\u4f8b\u5982\u5982\u4e0b\u7684Dialect\u5b9a\u4e49\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},'def Toy_Dialect : Dialect {\nlet summary = "Toy IR Dialect"; let description = [{\n This is a much longer description of the\n Toy dialect.\n ...\n}];\n // The namespace of our dialect.\nlet name = "toy";\n// The C++ namespace that the dialect class // definition resides in.\nlet cppNamespace = "toy";\n}\n')),(0,a.kt)("p",null,"\u751f\u6210\u7684C++\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'class ToyDialect : public mlir::Dialect {\n public:\nToyDialect(mlir::MLIRContext *context)\n : mlir::Dialect("toy", context,\n mlir::TypeID::get<ToyDialect>()) {\n initialize();\n}\nstatic llvm::StringRef getDialectNamespace() {\n return "toy";\n}\nvoid initialize()\n')),(0,a.kt)("p",null,"\u8fd9\u6837\u591a\u79cdIR\u5c31\u53ef\u4ee5\u80fd\u591f\u88ab\u8f7b\u6613\u7ec4\u5408\u4f7f\u7528\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u793e\u533a\u5404\u79cd\u4e30\u5bcc\u7684\u6a21\u5757\u8fdb\u884c\u7ec4\u5408\uff0c\u6765\u751f\u6210\u7279\u5b9a\u7684\u7f16\u8bd1\u6d41\u7a0b\uff0c\u6240\u4ee5MLIR\u53c8\u79f0\u4f5c\u201c\u751f\u6210\u7f16\u8bd1\u5668\u7684\u7f16\u8bd1\u5668\u201d\u3002\u5b9e\u9645\u4e0a\uff0c\u788e\u7247\u5316\u5728\u5de5\u4e1a\u754c\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u95ee\u9898\uff0c\u6bcf\u5bb6\u516c\u53f8\u5728\u5f00\u53d1\u81ea\u5df1\u7684\u8f6f\u4ef6\u7684\u65f6\u5019\u4e0d\u4f1a\u8003\u8651\u90a3\u4e48\u591a\uff0c\u89c9\u5f97\u6211\u53ea\u8981\u6295\u5165\u7814\u53d1\u8d44\u6e90\u628a\u81ea\u5df1\u8f6f\u4ef6\u505a\u597d\u5c31\u884c\uff0c\u4f46\u662f\u771f\u6b63\u5728\u7528\u6237\u4fa7\u4f7f\u7528\u7684\u65f6\u5019\uff0cTA\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u8f6f\u4ef6\u662f\u53ef\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\uff0c\u751a\u81f3\u4f60\u7684\u7528\u6237\u53ef\u80fd\u5c31\u662f\u5f00\u53d1\u8005\uff0c\u8fd9\u4e2a\u5f00\u53d1\u8005\u53ef\u80fd\u5e0c\u671b\u4e0d\u540c\u7684\u8f6f\u4ef6\u53ef\u4ee5\u88ab\u66f4\u9ad8\u6548\u7684\u96c6\u6210\u548c\u7ba1\u7406\u3002LLVM\u7684\u4f5c\u8005Chris Lattner\u6700\u65b0\u7684\u521b\u4e1a\u516c\u53f8Modular\u5b9e\u9645\u4e0a\u6838\u5fc3\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed6\u7684\u65b0\u7f16\u7a0b\u8bed\u8a00Mojo\uff0c\u9664\u4e86\u4e00\u4e9b\u8bed\u6cd5\u5c42\u9762\u7684\u4f20\u7edf\u4e00\u70b9\u7684\u4e1c\u897f\uff0c\u5f88\u591a\u6838\u5fc3\u80fd\u529b\u90fd\u662f\u6765\u6e90\u4e8e\u5e95\u5c42\u7684MLIR\uff0c\u5176\u4e2dMLIR\u8ddfMojo\u6709\u66f4\u6df1\u5ea6\u7684\u6574\u5408\uff0c\u4f7f\u5f97Mojo\u5177\u6709\u5f88\u5f3a\u7684\u5143\u7f16\u7a0b\u80fd\u529b\u3002Modular\u7684\u6700\u6838\u5fc3\u7684\u903b\u8f91\u5176\u5b9e\u8ddf\u5f53\u5e74\u7684LLVM\u7c7b\u4f3c\uff0c\u89e3\u51b3\u788e\u7247\u5316\u95ee\u9898\uff0c\u5f53\u7136Modular\u6709\u5f88\u591a\u73b0\u5728\u8f6f\u4ef6\u7684\u8fd0\u8425\u601d\u8def\u53ef\u80fd\u4f1a\u5f62\u6210\u66f4\u597d\u7684\u5e73\u53f0\u548c\u751f\u6001\uff0c\u56e0\u6b64\u5b83\u662f\u4e00\u5bb6\u5546\u4e1a\u516c\u53f8\uff0c\u4e0d\u4ec5\u4ec5\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u67b6\u6784\u90fd\u4e3a\u89e3\u51b3\u5e94\u7528\u4e4b\u95f4\u4e92\u64cd\u4f5c\u53ca\u5176\u788e\u7247\u5316\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u601d\u60f3\uff0c\u7136\u800c\u4e3a\u4e86\u66f4\u597d\u7684\u8f6f\u4ef6\u534f\u4f5c\uff0c\u8fd9\u4e9b\u673a\u5236\u8fd8\u4e0d\u591f\u3002\u4e0a\u8ff0\u7684\u8f6f\u4ef6\u90fd\u662f\u6bd4\u8f83\u504f\u5e95\u5c42\u7684\u57fa\u7840\u8f6f\u4ef6\uff0c\u800c\u4e0d\u662f\u9762\u5411\u4e0a\u5c42\u7528\u6237\u4fa7\u7684\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8003\u8651\u5f88\u591a\u5176\u4ed6\u95ee\u9898\uff0c\u6bd4\u5982\u6027\u80fd\u548c\u683c\u5f0f\u7684\u8fdb\u5316\u3002\u5f53\u8fdb\u5165\u5230\u4e00\u4e2a\u66f4\u4e0a\u5c42\u7684\u6d88\u8d39\u7aef\u5e94\u7528\uff0c\u9996\u5148\u4e0a\u8ff0\u7684\u65b9\u5f0f\u5728\u4e0d\u540c\u7684\u6a21\u5757\u4e4b\u95f4\u4ea4\u6362\u7684\u90fd\u662f\u6587\u672c\u6570\u636e\uff0c\u5982\u679c\u4f60\u8ba9\u4e00\u4e2a\u5b9e\u65f6\u7684\u6e38\u620f\u5185\u90e8\u7684\u6bcf\u4e00\u6b21\u4e92\u64cd\u4f5c\u90fd\u9700\u8981\u7f16\u89e3\u7801\u6587\u672c\uff0c\u8fd9\u663e\u7136\u662f\u4f1a\u5f71\u54cd\u6027\u80fd\u7684\uff1b\u6b64\u5916\uff0c\u5e94\u7528\u5c42\u7684\u9700\u6c42\u66f4\u5bb9\u6613\u53d8\u5316\uff0c\u5373\u4f7f\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u7edf\u4e00\u683c\u5f0f\u89e3\u6790\u7684\u4ee3\u7801\u53ca\u5176\u53d1\u73b0\u7684\u673a\u5236\uff0c\u4f46\u662f\u600e\u4e48\u5e94\u5bf9\u8fd9\u4e9b\u683c\u5f0f\u7684\u66f4\u9891\u7e41\u5730\u53d8\u5316\u5462\uff1f\u4e3a\u6b64\uff0cRealityIS\u5728\u8fd9\u4e9b\u65b9\u9762\u505a\u51fa\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\u3002"),(0,a.kt)("h3",{id:"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"},"\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b"),(0,a.kt)("p",null,"\u6211\u4eec\u73b0\u4ee3\u7684\u9879\u76ee\u5f00\u53d1\u4f7f\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u6216\u591a\u6216\u5c11\u5927\u90e8\u5206\u662f\u548c\u9762\u5411\u5bf9\u8c61\u76f8\u5173\u7684\uff0c\u5c3d\u7ba1\u770b\u8d77\u6765\u9762\u5411\u5bf9\u8c61\u7684\u672c\u8d28\u662f\u8ba9\u6211\u4eec\u66f4\u597d\u5730\u5c01\u88c5\u5404\u81ea\u6bd4\u8f83\u72ec\u7acb\u7684\u903b\u8f91\uff0c\u4f7f\u5927\u89c4\u6a21\u8f6f\u4ef6\u7ec4\u7ec7\u8d77\u6765\u66f4\u52a0\u8f7b\u677e\uff1a\u4f60\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u4ed6\u5bf9\u8c61\u7684\u5185\u90e8\u903b\u8f91\u5c31\u53ef\u4ee5\u8f7b\u6613\u5730\u548c\u5b83\u4eec\u4e00\u8d77\u7ec4\u5408\u8d77\u6765\u534f\u4f5c\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\uff0c\u5927\u90e8\u5206\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u4f1a\u8ba9\u4eba\uff08\u7279\u522b\u662f\u521d\u5b66\u8005\uff09\u8bef\u4ee5\u4e3a\u7f16\u7a0b\u5c31\u5e94\u8be5\u8fd9\u6837\uff0c\u5b83\u662f\u5728\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u673a\u5236\u3002\u90a3\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b8c\u7f8e\u7684\u6a21\u578b\u5374\u6ca1\u6709\u4ea7\u751f\u8fd9\u4e48\u5b8c\u7f8e\u7684\u4f53\u9a8c\u5462\uff1f\u76f4\u5230\u6700\u8fd1\u4e00\u5e74\u591a\u5bf9\u9762\u5411\u5bf9\u8c61\u7684\u66f4\u591a\u7406\u89e3\uff08\u7279\u522b\u662fErlang\uff09\u624d\u4f53\u4f1a\u5230\u5176\u4e2d\u4e00\u4e9b\u95ee\u9898\u3002"),(0,a.kt)("p",null,"Erlang\u4e4b\u7236Joe Armstrong\u5728\u4e00\u6b21\u91c7\u8bbf\u4e2d\uff08",(0,a.kt)("a",{parentName:"p",href:"https://link.zhihu.com/?target=https%3A//www.infoq.com/interviews/johnson-armstrong-oop/"},"Ralph Johnson, Joe Armstrong on the State of OOP")," \uff09\u8bb2\u5230\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Alan Kay himself wrote this famous thing and said ",(0,a.kt)("strong",{parentName:"p"},'"The notion of object oriented programming is completely')," ",(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=misunderstood&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"misunderstood"),(0,a.kt)("strong",{parentName:"p"},". It's not about objects and classes, it's all about messages"),'". He wrote that and he said that the initial ',(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/search?q=reaction&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A703226836%7D"},"reaction")," to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.")),(0,a.kt)("p",null,"Alan Kay\u8ba4\u4e3aOOP\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u6d88\u606f\uff0c\u4f46\u662f\u8fd9\u6837\u8bf4\u5176\u5b9e\u6211\u4e2a\u4eba\u89c9\u5f97\u5e76\u4e0d\u592a\u597d\u7406\u89e3\u5230\u672c\u8d28\uff0c\u56e0\u4e3a\u6d88\u606f\u66f4\u50cf\u662fOOP\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u7684\u4e00\u79cd\u673a\u5236\u6216\u7ed3\u679c\uff0c\u800c\u4e0d\u662fOOP\u672c\u8eab\u7684\u5b9a\u4e49\u3002\u6211\u89c9\u5f97OOP\u7684\u672c\u8d28\u5e94\u8be5\u662f\u9694\u79bb\uff0c\u53ea\u6709\u505a\u5230\u771f\u6b63\u7684\u9694\u79bb\uff0c\u624d\u80fd\u771f\u6b63\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u7edd\u5bf9\u7684\u9694\u79bb\u4f7f\u5f97\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e5f\u4e0d\u80fd\u4e86\u89e3\u53e6\u4e00\u4e2a\u7269\u4f53\u5185\u90e8\u7684\u8fd0\u4f5c\uff0c\u4f60\u4eec\u53ea\u9700\u8981\u901a\u8fc7\u4e00\u4e9b\u5916\u5728\u7684\u5c5e\u6027\u8fdb\u884c\u4ea4\u4e92\uff0c\u6211\u4eec\u7684\u5f00\u53d1\u4e5f\u4ec5\u9700\u8981\u4e86\u89e3\u8fd9\u4e9b\u7b80\u5355\u7684\u5916\u5728\u5c5e\u6027\u3002\u73b0\u4ee3\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u66f4\u5f3a\u8c03\u7684\u662fobject\u548cclass\uff0c\u8ba4\u4e3a\u5bf9\u8c61\u7684\u6838\u5fc3\u662f\u5173\u4e8e\u5c01\u88c5\uff0c\u8fd9\u672c\u8eab\u4e5f\u6ca1\u6709\u9519\uff0c\u5c01\u88c5\u7684\u76ee\u7684\u4e5f\u4e00\u5b9a\u662f\u4e3a\u4e86\u8ba9\u522b\u4eba\u4e0d\u9700\u8981\u5173\u6ce8\u4f60\u7684\u5185\u90e8\u7ec6\u8282\uff0c\u4f46\u95ee\u9898\u5728\u4e8e\uff0c\u5f88\u591a\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u5ffd\u7565\u4e86\u9694\u79bb\u7684\u610f\u4e49\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7a0b\u5e8f\u5458\u66f4\u7075\u6d3b\u76f4\u63a5\u5730\u83b7\u53d6\u6570\u636e\u548c\u65b9\u6cd5\uff0c\u63d0\u4f9b\u4e00\u4e9b\u673a\u5236\uff0c\u4f7f\u5f97\u4e00\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5f88\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u5185\u90e8\u7684\u3001\u8ddf\u5176\u5185\u90e8\u8fd0\u4f5c\u76f8\u5173\u7684\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u539f\u672c\u662f\u9700\u8981\u7edd\u5bf9\u9694\u79bb\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4f7f\u5f97\u9694\u79bb\u5931\u53bb\u4e86\u610f\u4e49\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u89c4\u8303\u8981\u6c42\u81ea\u5df1\u4ee5\u5bf9\u8c61\u4e3a\u5355\u4f4d\u8fdb\u884c\u7edd\u5bf9\u9694\u79bb\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5f88\u96be\u505a\u5230\u4e00\u4e2a\u5f88\u597d\u7684\u8bbe\u8ba1\uff0c\u6700\u540e\u7684\u7ed3\u679c\u662f\u7a0b\u5e8f\u5185\u90e8\u5bf9\u8c61\u4e4b\u95f4\u76f8\u4e92\u8026\u5408\u592a\u591a\uff0c\u4e0d\u7ba1\u662f\u7ba1\u7406\u3001\u7ef4\u62a4\u3001\u7406\u89e3\u8d77\u6765\u90fd\u662f\u82b1\u8d39\u5f88\u5927\u7684\u7cbe\u529b\u3002"),(0,a.kt)("p",null,"Erlang\u5c31\u91c7\u7528\u4e86\u4e00\u79cd\u4e0d\u540c\u7684\u673a\u5236\uff0c\u5b83\u4ece\u8bed\u8a00\u4f53\u7cfb\u4e0a\u5c31\u4e0d\u5141\u8bb8\u5bf9\u8c61\u4e4b\u95f4\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u5185\u90e8\u6570\u636e\u6216\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u51fd\u6570\u90fd\u5206\u914d\u4e3a\u72ec\u7acb\u7684\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u4f20\u9012\u548c\u8054\u7cfb\uff0c\u8fd9\u6837\u7a0b\u5e8f\u5458\u5c31\u5f88\u96be\u5199\u51fa\u8026\u5408\u6bd4\u8f83\u6df1\u7684\u4ee3\u7801\uff0c\u540c\u65f6\u8fd9\u79cd\u9694\u79bb\u5bf9\u5e76\u884c\u8ba1\u7b97\u548c\u5206\u5e03\u5f0f\u4e5f\u5e26\u6765\u4e86\u597d\u5904\u3002\u6240\u4ee5Joe Armstrong\u8bf4\uff0c\u6839\u636eAlan Kay\u7684\u63cf\u8ff0\uff0cErlang\u53ef\u80fd\u662f\u552f\u4e00\u771f\u6b63\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u8bed\u8a00\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about")),(0,a.kt)("p",null,"\u518d\u56de\u8fc7\u6765\u770b\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u4e3a\u4ec0\u4e48\u662f\u9694\u79bb\uff0c\u662f\u56e0\u4e3a\u771f\u6b63\u7684\u9694\u79bb\u673a\u5236\u624d\u80fd\u4fdd\u8bc1\u907f\u514d\u8026\u5408\uff0c\u624d\u80fd\u964d\u4f4e\u8f6f\u4ef6\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5927\u578b\u7684\u8f6f\u4ef6\u7cfb\u7edf\u6709\u65e0\u6570\u7684\u5bf9\u8c61\uff0c\u5982\u679c\u5bf9\u8c61\u4e4b\u95f4\u5b58\u5728\u8026\u5408\u7684\u53ef\u80fd\uff0c\u90a3\u7ef4\u62a4\u8d77\u6765\u5c06\u662f\u975e\u5e38\u4e0d\u5bb9\u6613\u7684\u3002\u800c\u5f53\u4f60\u53ea\u63d0\u4f9b\u4e86\u5f3a\u9694\u79bb\u7684\u673a\u5236\uff0c\u4e0d\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u5f88\u65b9\u4fbf\u5730\u83b7\u53d6\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u5269\u4e0b\u7684\u7ed3\u679c\u5c31\u662f\u5bf9\u8c61\u4e4b\u95f4\u53ea\u80fd\u901a\u8fc7\u6d88\u606f\u901a\u4fe1\u4e86\uff0c\u8fd9\u5c31\u662fErlang\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Erlang\u662f\u771f\u6b63\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00\u3002\u4e5f\u56e0\u6b64\uff0c\u6d88\u606f\u66f4\u50cf\u662f\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u7ed3\u679c\u3002"),(0,a.kt)("p",null,"\u5c31\u50cf\u73b0\u5b9e\u4e16\u754c\u4e00\u6837\uff0c\u5fae\u89c2\u7684\u6bcf\u4e2a\u539f\u5b50\u5185\u90e8\u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u7ed3\u6784\uff0c\u539f\u5b50\u4e4b\u95f4\u76f8\u4e92\u4f5c\u7528\u5f62\u6210\u5206\u5b50\uff0c\u8fdb\u4e00\u6b65\u5f62\u6210\u5b8f\u89c2\u7269\u4f53\uff0c\u5b8f\u89c2\u7269\u4f53\u901a\u8fc7\u5185\u90e8\u5206\u5b50\u7ed3\u6784\u5f62\u6210\u7279\u5b9a\u7684\u5916\u5728\u5c5e\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u7269\u4f53\u4e0e\u4e4b\u4ea4\u4e92\u4ece\u6765\u4e0d\u9700\u8981\u4e86\u89e3\u5176\u4e2d\u7684\u5185\u90e8\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u9762\u5411\u5bf9\u8c61\u7684\u7f8e\u597d\u4e16\u754c\uff0c\u7136\u800c\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u5f0f\u5219\u4e3a\u4e86\u4fbf\u5229\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u8bbf\u95ee\u53e6\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784\u5f00\u4e86\u4e00\u4e2a\u53e3\u5b50\uff0c\u8fd9\u4e2a\u53e3\u5b50\u4e0d\u4ec5\u7834\u574f\u4e86\u9762\u5411\u5bf9\u8c61\u7684\u7f16\u7a0b\u601d\u60f3\u548c\u7cbe\u9ad3\uff0c\u4e5f\u5931\u53bb\u4e86\u5176\u5e26\u6765\u7684\u597d\u5904\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1Erlang\u770b\u8d77\u6765\u662f\u4e00\u79cd\u5b8c\u7f8e\u7684\u67b6\u6784\uff0c\u7136\u800c\u6d88\u606f\u901a\u4fe1\u662f\u4e00\u79cd\u64cd\u4f5c\u8d77\u6765\u4e0d\u592a\u4fbf\u5229\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u4e3a\u4e86\u8fdb\u4e00\u6b65\u89e3\u8026\u5b83\u901a\u5e38\u662f\u4f20\u9012\u5b57\u7b26\u4e32\u6d88\u606f\uff0c\u5b57\u7b26\u4e32\u9700\u8981\u7f16\u89e3\u7801\uff0c\u5e26\u6765\u4e86\u6027\u80fd\u95ee\u9898\uff1b\u800c\u53e6\u4e00\u65b9\u9762\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u901a\u5e38\u662f\u5f02\u6b65\u7684\uff0c\u4f7f\u5f97\u5bf9\u903b\u8f91\u7684\u6d41\u7a0b\u7ba1\u7406\u5931\u53bb\u4e86\u63a7\u5236\u529b\u3002RealityIS\u5728\u8fd9\u4e24\u4e2a\u65b9\u9762\u90fd\u505a\u4e86\u4e00\u4e9b\u521b\u65b0\u5c1d\u8bd5\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u65e2\u53ef\u4ee5\u50cf\u4f20\u7edf\u7684\u5c40\u90e8\u53d8\u91cf\u4e00\u6837\u53bb\u65b9\u9762\u5176\u5b83\u5bf9\u8c61\u7684\u6570\u636e\uff0c\u53c8\u53ef\u4ee5\u50cfErlang\u4e00\u6837\u62e5\u6709\u7edd\u5bf9\u7684\u9694\u79bb\uff0c\u8fd9\u79cd\u9694\u79bb\u5e26\u6765\u7f16\u7a0b\u590d\u6742\u5ea6\u4e0a\u7684\u51cf\u5c11\uff0c\u964d\u4f4e\u7f16\u7a0b\u95e8\u69db\u3002"),(0,a.kt)("h3",{id:"\u865a\u62df\u673a"},"\u865a\u62df\u673a"),(0,a.kt)("h3",{id:"\u57fa\u4e8e\u7ec4\u5408\u4e0eecs"},"\u57fa\u4e8e\u7ec4\u5408\u4e0eECS"),(0,a.kt)("p",null,"\u4f8b\u5982\u6e38\u620f\u5c31\u662f\u4e00\u4e2a\u8fd9\u6837\u7684\u4f8b\u5b50\uff0c\u5c3d\u7ba1\u4ecd\u7136\u6709\u57fa\u4e8e\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6a21\u578b\u6765\u5f00\u53d1\u7684\u6e38\u620f\u7a0b\u5e8f\uff0c\u4f46\u662f\u5927\u90e8\u5206\u7684\u6e38\u620f\u6846\u67b6\u6216\u67b6\u6784\u6216\u591a\u6216\u5c11\u90fd\u662f\u57fa\u4e8e\u7ec4\u4ef6\u7684\uff0c\u56e0\u4e3a\u6e38\u620f\u7684\u903b\u8f91\u975e\u5e38\u590d\u6742\uff0c\u6ca1\u6709\u6bd4\u8f83\u7ebf\u6027\u7684\u6d41\u7a0b\uff0c\u7c7b\u4f3c\u4e8e\u590d\u6742\u7cfb\u7edf\uff0c\u7cfb\u7edf\u8ddf\u7cfb\u7edf\u4e4b\u95f4\u5b58\u5728\u975e\u5e38\u590d\u6742\u65e0\u5e8f\u7684\u76f8\u5173\u6027\u3002\u6e38\u620f\u4e2d\u7684\u7ec4\u4ef6\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u7c7b\u4f3c\u4e00\u4e2aActor\uff0c\u5b83\u4eec\u90fd\u5c1d\u8bd5\u628a\u5b50\u7cfb\u7edf\u7684\u903b\u8f91\u90fd\u5c3d\u91cf\u5c01\u88c5\u5728\u5185\u90e8\uff0c\u4e0d\u540c\u7684\u662f\uff0c\u7531\u4e8e\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u590d\u6742\u5ea6\u975e\u5e38\u9ad8\uff0c\u4f8b\u5982\u4e00\u4e2a\u7ec4\u4ef6\u7684\u8f93\u5165\u6d88\u606f\u4f1a\u6765\u81ea\u591a\u4e2a\u5176\u5b83\u7ec4\u4ef6\uff0c\u800c\u4e0d\u662f\u50cf\u7b80\u5355\u7684Actor\u6a21\u578b\u53ea\u662f\u4e00\u5bf9\u4e00\u7684\u901a\u4fe1\uff0c\u56e0\u6b64\u6e38\u620f\u7a0b\u5e8f\u7684\u6267\u884c\u903b\u8f91\u662f\u6309\u7ec4\u4ef6\u8fdb\u884c\u6392\u5e8f\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u6709\u4e2a\u8bed\u4e49\u4e0a\u7684\u987a\u5e8f\uff0c\u8fd9\u6837\u7684\u673a\u5236\u4fdd\u8bc1\u53ea\u8981\u987a\u5e8f\u5b89\u6392\u5f97\u5f53\uff0c\u5c31\u4e0d\u7528\u53bb\u5904\u7406\u590d\u6742\u7684\u4f9d\u8d56\u987a\u5e8f\u95ee\u9898\uff0c\u800c\u4e14\u5f53\u6bcf\u4e2a\u7ec4\u4ef6\u88ab\u6267\u884c\u65f6\uff0c\u5b83\u9700\u8981\u7684\u6570\u636e\u603b\u662f\u80fd\u591f\u5f97\u5230\u6ee1\u8db3\u3002"),(0,a.kt)("h3",{id:"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f"},"\u9694\u79bb\u4e0e\u6c99\u76d2\u6280\u672f"),(0,a.kt)("p",null,"\u73b0\u5728\u6574\u4e2a\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u7f16\u8bd1\u7684\u4f53\u7cfb\u67b6\u6784\uff0c\u90fd\u662f\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff0c\u5373\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u6e90\u4ee3\u7801\u90fd\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u8fd9\u4e5f\u5373\u662f\u7f16\u8bd1\u548c\u6784\u9020\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u4f53\u53ef\u4ee5\u8ba4\u4e3a\u662f\u53ea\u6709\u4e00\u4e2a\u4e3b\u4f53\uff0c\u5373\u5f00\u53d1\u8005\uff0c\u4e0d\u7ba1\u4f60\u80cc\u540e\u662f\u4e00\u4e2a\u5927\u56e2\u961f\u6216\u8005\u5927\u516c\u53f8\uff0c\u6700\u7ec8\u7f16\u8bd1\u53d1\u5e03\u5e94\u7528\u7a0b\u5e8f\u7684\u662f\u4e00\u4e2a\u7279\u5b9a\u7684\u4e2a\u4eba\u3001\u90e8\u95e8\u6216\u8005\u7ec4\u7ec7\u3002\u8fd9\u6837\u8bf4\u6709\u4ec0\u4e48\u610f\u601d\uff0c\u8fd9\u5c31\u610f\u5473\u7740\uff0c\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u7531\u8fd9\u4e2a\u5355\u72ec\u7684\u4e3b\u4f53\u8d1f\u8d23\uff0c\u4f60\u9700\u8981\u89e3\u51b3\u8f6f\u4ef6\u7684bug\uff0c\u68c0\u67e5\u6240\u6709\u53ef\u80fd\u7684\u5b89\u5168\u6f0f\u6d1e\u7b49\u7b49\uff0c\u4fdd\u8bc1\u8f6f\u4ef6\u6700\u7ec8\u8fd0\u884c\u662f\u53ef\u9760\u7684\u3002\u800c\u5bf9\u4e8e\u7f16\u7a0b\u8bed\u8a00\u6765\u8bb2\uff0c\u5b83\u4e0d\u5bf9\u8f6f\u4ef6\u7684\u5b89\u5168\u505a\u4efb\u4f55\u5047\u8bbe\uff1a\u7406\u8bba\u4e0a\uff0c\u53ea\u8981\u4f60\u62e5\u6709\u6e90\u4ee3\u7801\uff0c\u4f60\u5c31\u53ef\u4ee5\u51e0\u4e4e\u8bbf\u95ee\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4f60\u5fc5\u987b\u786e\u4fdd\u4f60\u7a0b\u5e8f\u4e2d\u7684\u6240\u6709\u903b\u8f91\u884c\u4e3a\u662f\u6b63\u5e38\u7684\u3002\u5982\u679c\u6240\u6709\u4ee3\u7801\u90fd\u662f\u7531\u4f60\u81ea\u5df1\u516c\u53f8\u7684\u7a0b\u5e8f\u5458\u7f16\u5199\u7684\uff0c\u8fd9\u5f53\u7136\u662f\u5929\u7ecf\u5730\u4e49\u7684\u4e8b\u60c5\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u7b2c\u4e09\u65b9\u7684\u5f00\u6e90\u4ee3\u7801\u6216\u8005\u95ed\u6e90\u7684\u4e8c\u8fdb\u5236\u5e93\uff0c\u4f60\u5fc5\u987b\u7531\u4f60\u81ea\u5df1\u53bb\u786e\u4fdd\u8fd9\u4e9b\u7b2c\u4e09\u65b9\u7684\u4ee3\u7801\u4e0d\u4f1a\u7834\u574f\u4f60\u7684\u8f6f\u4ef6\u8fd0\u884c\u3002"),(0,a.kt)("p",null,"\u8fd9\u6837\u5929\u751f\u5c31\u5c06\u6bcf\u4e00\u4e2a\u8f6f\u4ef6\u5f53\u4f5c\u4e00\u4e2a\u5c01\u95ed\u3001\u72ec\u7acb\u7684\u73af\u5883\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u5206\u914d\u548c\u7ba1\u7406\u7cfb\u7edf\u4fdd\u8bc1\u4f60\u7684\u5185\u5b58\u4e0d\u4f1a\u88ab\u5176\u4ed6\u8fdb\u7a0b\u7684\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u8fd9\u6837\u8f6f\u4ef6\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u8fd0\u884c\uff0c\u5f53\u7136\u5373\u4f7f\u5982\u6b64\uff0c\u4f60\u7684\u7a0b\u5e8f\u5f53\u4e2d\u6d89\u53ca\u5bf9\u5916\u90e8\u6570\u636e\u8bfb\u53d6\u7684\u90e8\u5206\u4ecd\u7136\u53ef\u80fd\u5bfc\u81f4\u5185\u5b58\u5b89\u5168\u95ee\u9898\u3002\u7136\u800c\u8fd9\u79cd\u9694\u79bb\u662f\u4e0e\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u8fd0\u884c\u65b9\u5f0f\u5b8c\u5168\u76f8\u53cd\u7684\uff0c\u73b0\u5b9e\u4e16\u754c\u6574\u4e2a\u4f53\u7cfb\u662f\u57fa\u4e8e\u534f\u4f5c\u548c\u5206\u5de5\u6765\u5b9e\u73b0\u6587\u660e\u53d1\u5c55\u7684\uff0c\u8ba1\u7b97\u673a\u672c\u6765\u5177\u6709\u66f4\u5f3a\u5927\u7684\u903b\u8f91\u4f53\u7cfb\uff0c\u7136\u800c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u6ca1\u6709\u5728\u8f6f\u4ef6\u4e16\u754c\u5efa\u7acb\u8d77\u6bd4\u8f83\u7b80\u5355\u5730\u5206\u5de5\u4e0e\u534f\u4f5c\u673a\u5236\u3002"),(0,a.kt)("p",null,"\u73b0\u4ee3\u8f6f\u4ef6\u53d8\u5f97\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4f53\u7cfb\u7ed3\u6784\u672c\u6765\u5c31\u5e0c\u671b\u80fd\u591f\u501f\u52a9\u66f4\u591a\u7684\u534f\u4f5c\u4e0e\u5206\u5de5\u7684\u7cbe\u795e\u548c\u601d\u60f3\u6765\u5b9e\u73b0\u66f4\u5927\u7684\u590d\u6742\u5ea6\u548c\u529f\u80fd\uff0c\u8fd9\u79cd\u534f\u4f5c\u7684\u7b2c\u4e00\u4e2a\u8981\u6c42\u662f\u8ba9\u672a\u53d7\u4fe1\u4efb\u7684\u7b2c\u4e09\u65b9\u4ee3\u7801\u53ef\u4ee5\u5728\u4f60\u7684\u5185\u5b58\u73af\u5883\u4e2d\u6267\u884c\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u300a\u5821\u5792\u4e4b\u591c\u300b\u9762\u4e34\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\u3002\u6309\u7167\u73b0\u4ee3\u7f16\u7a0b\u8bed\u8a00\u7684\u4e00\u4e9b\u601d\u8def\uff0c\u4e00\u4e2a\u6e90\u4ee3\u7801\u80fd\u591f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\u88ab\u6267\u884c\uff0c\u90a3\u8868\u793a\u5176\u5bf9\u5e94\u7684\u4e3b\u4f53\u77e5\u9053\u548c\u8d1f\u8d23\u5176\u4e2d\u7684\u5b89\u5168\u95ee\u9898\uff0c\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u6ca1\u6709\u592a\u591a\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u8fd9\u53c8\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\uff1a\u9759\u6001\u8bed\u8a00\u548c\u52a8\u6001\u89e3\u91ca\u6027\u811a\u672c\u8bed\u8a00\u3002\u5bf9\u4e8e\u52a8\u6001\u800c\u8a00\u800c\u8a00\uff0c\u5982lua\uff0c\u5b83\u4eec\u901a\u5e38\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u5185\u5b58\uff0c\u5f00\u53d1\u8005\u6240\u80fd\u64cd\u4f5c\u7684\u90fd\u662f\u5c01\u88c5\u5728\u4e00\u5b9a\u7c7b\u578b\u548c\u5bf9\u8c61\u4e2d\uff0c\u73b0\u4ee3\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u6309\u7167\u7c7b\u578b\u8fdb\u884c\u5bfb\u5740\uff0c\u4e5f\u5373\u662f\u7c7b\u578b\u7cfb\u7edf\u672c\u8eab\u57fa\u672c\u4e0a\u53ef\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u7684\u5b89\u5168\uff0c\u5982\u679c\u4f60\u7684\u6e90\u4ee3\u7801\u4e0d\u77e5\u9053\u4e00\u4e2a\u5bf9\u8c61\u7684\u5730\u5740\uff0c\u4f60\u5c31\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u5b83\u3002\u7136\u800c\u5b9e\u9645\u73b0\u5728\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u90fd\u63d0\u4f9b\u9759\u6001\u53d8\u91cf\u6216\u8005\u5168\u5c40\u5e38\u91cf\u4e4b\u7c7b\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u5f97\u5185\u5b58\u73af\u5883\u4e2d\u7684\u5176\u4ed6\u4ee3\u7801\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e9b\u5171\u4eab\u4fe1\u606f\uff0c\u4ece\u800c\u5bf9\u8f6f\u4ef6\u8fdb\u884c\u7834\u574f\u3002\u4e3a\u4e86\u907f\u514d\u8fd9\u79cd\u95ee\u9898\uff0cRoblox\u5c31\u5bf9Lua\u8fdb\u884c\u4e86\u6539\u9020\uff0c\u53eb\u505aLuau\uff0c\u6bd4\u5982\u901a\u8fc7\u7981\u6b62\u5168\u5c40\u53d8\u91cf\uff0c\u4ee5\u53ca\u7981\u6b62\u4e00\u4e9b\u80fd\u591f\u8bbf\u95ee\u5168\u5c40\u53d8\u91cf\u7684\u5e93\u51fd\u6570\u7b49\u7b49\u673a\u5236\u6765\u5b9e\u73b0\u4e00\u79cd\u6c99\u76d2\u5b89\u5168\uff0c\u8fd9\u6837\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u4ee3\u7801\u5c31\u53ef\u4ee5\u653e\u5fc3\u5730\u5728Roblox app\u4e2d\u8fd0\u884c\u3002"),(0,a.kt)("p",null,"\u5982\u679c\u7b2c\u4e09\u65b9\u672a\u53d7\u4fe1\u4efb\u4ee3\u7801\u662f\u4e8c\u8fdb\u5236\u7684\u673a\u5668\u7801\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u66f4\u4e25\u91cd\u4e86\uff0c\u56e0\u4e3a\u673a\u5668\u7801\u662f\u53ef\u4ee5\u8bbf\u95ee\u5185\u5b58\u5730\u5740\u548c\u5bc4\u5b58\u5668\u7684\uff0c\u90a3\u53ef\u4ee5\u9020\u6210\u7684\u7834\u574f\u662f\u65e0\u6cd5\u60f3\u8c61\u7684\u3002\u7136\u800c\u4eba\u4eec\u4ecd\u7136\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u7c7b\u4f3c\u5206\u5de5\u534f\u4f5c\u7684\u65b9\u5f0f\uff0c\u8fd9\u65b9\u9762\u6700\u5177\u6709\u4ee3\u8868\u6027\u7684\u4f8b\u5b50\u5c31\u662f\u6d4f\u89c8\u5668\uff0c\u6d4f\u89c8\u5668\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u8f6f\u4ef6\uff0c\u73b0\u4ee3\u6d4f\u89c8\u5668\u5f80\u5f80\u90fd\u53ef\u4ee5\u652f\u6301\u7b2c\u4e09\u65b9\u4e8c\u8fdb\u5236\u7684\u63d2\u4ef6\uff0c\u6765\u63d0\u4f9b\u4e00\u4e9b\u66f4\u9ad8\u6027\u80fd\u7684\u589e\u5f3a\u529f\u80fd\uff0c\u4f8b\u5982\u6d4f\u89c8\u5668\u7684\u5b57\u4f53\u6e32\u67d3\u5f80\u5f80\u90fd\u662f\u4f7f\u7528\u7b2c\u4e09\u65b9\u5b57\u4f53\u6e32\u67d3\u5e93\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u79cd\u7531\u4e8e\u672a\u53d7\u4fe1\u4efb\u4e8c\u8fdb\u5236\u4ee3\u7801\u5bfc\u81f4\u7684\u5b89\u5168\u95ee\u9898\uff0c\u4eba\u4eec\u63d0\u51fa\u4e00\u4e9b\u8f6f\u4ef6\u9694\u79bb\uff08software-based fault isolation\uff0cSFI\uff09\u6280\u672f\uff0c\u76f8\u5bf9\u5e94\u64cd\u4f5c\u7cfb\u7edf\u6216\u786c\u4ef6\u7684\u5185\u5b58\u9694\u79bb\uff0cSFI\u662f\u7528\u4e8e\u6784\u5efa\u5305\u542b\u672a\u4fe1\u4efb\u7ec4\u4ef6\u7684\u5b89\u5168\u7cfb\u7edf\u7684\u4e00\u79cd\u8f7b\u91cf\u7ea7\u65b9\u6cd5\uff0c\u80fd\u591f\u7528\u4e8e\u51cf\u5c11\u7531\u4e8e\u5185\u5b58\u5b89\u5168bug\u5bfc\u81f4\u7684\u653b\u51fb\uff0cSFI\u901a\u8fc7\u4e25\u683c\u5c06\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u8f6f\u4ef6\u9650\u5236\u5728\u81ea\u5df1\u7684\u6c99\u76d2\u5185\u5b58\u533a\u57df\uff0c\u6765\u9694\u79bb\u8fd9\u79cd\u5185\u5b58\u5b89\u5168\u5bfc\u81f4\u7684\u7834\u574f\u3002\u7528\u4f8b\u5305\u62ec\u6d4f\u89c8\u5668\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u4f8b\u5982\u7ecf\u5178\u7684Native Client SFI syetem\uff08NaCI\uff09\u4f7f\u7528SFI\u6765\u6269\u5c55\u7b2c\u4e09\u65b9c\u5e93\uff0c\u4f7f\u5f97\u6d4f\u89c8\u5668\u53ef\u4ee5\u4f7f\u7528\u5982\u7b2c\u4e09\u65b9\u7684\u5b57\u4f53\uff0c\u97f3\u9891\uff0cXML\u89e3\u6790\u7b49\u5e93\uff1b\u5728\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\u4e0e\u7b2c\u4e09\u65b9\u672a\u4fe1\u4efb\u5ba2\u6237\u73af\u5883\u8fdb\u884c\u8054\u5408\u8ba1\u7b97\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"NaCI\u5b58\u5728\u8f83\u5927\u7684\u8fd0\u884c\u65f6\u6027\u80fd\uff0c\u56e0\u4e3a\u5b83\u7684\u673a\u5236\u4e00\u822c\u5bf9\u7b2c\u4e09\u65b9\u4ee3\u7801\u4e0d\u505a\u592a\u591a\u8981\u6c42\uff0c\u5047\u8bbe\u5176\u6309\u7167\u4e00\u822c\u7684\u65b9\u6cd5\u8fdb\u884c\u5f00\u53d1\uff0c\u7136\u540e\u4ec5\u4ec5\u5728\u8c03\u7528\u8fd9\u4e9b\u65b9\u6cd5\u7684\u65f6\u5019\u4e3a\u5176\u5206\u914d\u72ec\u7acb\u7684\u5185\u5b58\u533a\u57df\u8fdb\u884c\u9694\u79bb\uff0c\u5b83\u57fa\u672c\u4e0a\u662f\u7528\u8f6f\u4ef6\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u673a\u5236\uff0c\u6bd4\u5982\u6bcf\u6b21\u5207\u6362\u90fd\u9700\u8981\u4fdd\u5b58\u5927\u91cf\u7684\u72b6\u6001\u548c\u5bc4\u5b58\u5668\u5730\u5740\u7b49\u7b49\u3002\u4e3a\u4e86\u51cf\u5c11\u8fd9\u79cd\u9694\u79bb\u5bfc\u81f4\u7684\u4ee3\u4ef7\uff0cWeb Assembly\u5c31\u4f7f\u7528\u53e6\u4e00\u4e2a\u601d\u8def\uff0c\u7531\u4e8eWeb Assembly\u7a0b\u5e8f\u90fd\u4f1a\u7f16\u8bd1\u4e3aWasm\u6587\u4ef6\uff0c\u7531Wasm\u865a\u62df\u673a\u89e3\u91ca\u6267\u884c\uff0c\u800c\u4e0d\u662f\u5e95\u5c42\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u6240\u4ee5Web Assembly\u6709\u673a\u4f1a\u5bf9\u7a0b\u5e8f\u8fdb\u884c\u4e00\u5b9a\u7684\u5206\u6790\uff0c\u901a\u8fc7\u57fa\u4e8eControl-Flow Integrity (CFI)\u6280\u672f\uff0cWeb Assembly\u7684\u7f16\u8bd1\u5668\u53ef\u4ee5\u68c0\u67e5\u51fa\u7a0b\u5e8f\u4e2d\u54ea\u4e9b\u4ee3\u7801\u53ef\u80fd\u4f1a\u5bf9\u8fd9\u79cd\u6c99\u76d2\u73af\u5883\u9020\u6210\u7834\u574f\uff0c\u4ece\u800c\u7981\u6b62\u8fd9\u6837\u7684\u4ee3\u7801\u751f\u6210\u5408\u6cd5\u7684Wasm\u7a0b\u5e8f\uff0c\u56e0\u6b64\u4e5f\u5c31\u5b9e\u73b0\u4e86\u6c99\u76d2\u5b89\u5168\u3002\u4f46\u662f\u7531\u4e8e\u8fd9\u79cd\u68c0\u67e5\u662f\u5728\u7f16\u8bd1\u671f\uff0c\u5e76\u5bf9\u7b2c\u4e09\u65b9\u7a0b\u5e8f\u7684\u6784\u9020\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u56e0\u6b64\u5728\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u907f\u514d\u5728\u8fd9\u79cd\u9694\u79bb\u5b89\u5168\u7684\u4fdd\u62a4\u673a\u5236\u4e0a\u82b1\u8d39\u8fc7\u591a\u7684\u5f00\u9500\u3002"),(0,a.kt)("p",null,"Web Assembly\u4e4b\u6240\u4ee5\u662f\u4e00\u79cd\u672a\u6765\u975e\u5e38\u6709\u6f5c\u529b\u7684\u6280\u672f\uff0c\u4e0d\u4ec5\u4ec5\u5f97\u76ca\u4e8e\u5bf9Web\u7684\u53cb\u597d\uff0c\u63a5\u8fd1\u673a\u5668\u7801\u7684\u5b57\u8282\u7801\uff0c\u591a\u8bed\u8a00\u652f\u6301\u7b49\u7b49\uff0c\u8fd9\u79cd\u6c99\u76d2\u6280\u672f\u4e5f\u662f\u5f88\u5927\u7684\u4e00\u4e2a\u6280\u672f\u70b9\u3002\u5728Web Assembly\u4e4b\u524d\u8fd8\u6ca1\u6709\u4e00\u79cd\u6280\u672f\u53ef\u4ee5\u5f88\u597d\u5730\u666e\u53ca\u548c\u8fd0\u7528\u6c99\u76d2\u6280\u672f\uff0c\u4f8b\u5982JVM\u4e0a\u6709\u4e00\u4e9b\u65b9\u6848\uff0c\u4f46\u5927\u591a\u6709\u4e9b\u6027\u80fd\u95ee\u9898\uff0c\u6216\u8005\u4e0d\u80fd\u5b8c\u5168\u4fdd\u8bc1\u5b89\u5168\uff0c\u6216\u8005\u65b9\u6848\u6bd4\u8f83\u91cd\u3002Web Assembly\u8fd9\u79cd\u4f18\u79c0\u7684\u6c99\u76d2\u6280\u672f\u4f7f\u5f97\u6c99\u76d2\u6a21\u5f0f\u5728\u4ee5\u540e\u7684\u8f6f\u4ef6\u6784\u9020\u4e2d\u53ef\u80fd\u88ab\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u4e5f\u5c31\u4f1a\u5b9e\u73b0\u66f4\u591a\u7684\u8f6f\u4ef6\u534f\u4f5c\u4e0e\u5206\u5de5\uff0c\u4e8b\u5b9e\u4e0a\u6bd4\u5982\u73b0\u5728\u5bf9\u672a\u53d7\u4fe1\u4efb\u591a\u5e94\u7528\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u5982\u533a\u5757\u94fe\u5c31\u5927\u591a\u8f6c\u578bWeb Assembly\uff0c\u800c\u5982Docker\u548cSeverless\u8fd9\u79cd\u5bf9\u865a\u62df\u73af\u5883\u8981\u6c42\u6bd4\u8f83\u9ad8\u7684\u73af\u5883\u4e5f\u5728\u9010\u6b65\u8f6c\u5411Web Assembly\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1Web Assembly\u7684\u9694\u79bb\u6280\u672f\u975e\u5e38\u4f18\u5f02\uff0c\u4f46\u662f\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u7a0b\u5e8f\u672c\u8eab\u7684\u6784\u9020\u65b9\u5f0f\uff0c\u5373\u5982\u679c\u4f60\u7684\u4ee3\u7801\u672c\u8eab\u5c31\u4e0d\u542b\u7834\u574f\u522b\u4eba\u7684\u6076\u610f\u4ee3\u7801\uff0c\u90a3\u4e48\u5176\u5b9e\u4f60\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e0e\u8fc7\u53bb\u7684\u65b9\u5f0f\u5e76\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\u3002\u800cRealityIS\u5e0c\u671b\u7b80\u5316\u7f16\u7a0b\u7684\u5f00\u53d1\uff0c\u5982\u672c\u6587\u540e\u9762\u7f16\u7a0b\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u8fd8\u5e0c\u671b\u5bf9\u7f16\u7a0b\u7684\u4f53\u7cfb\u505a\u51fa\u4e00\u4e9b\u8c03\u6574\u3002\u56e0\u6b64\u6211\u4eec\u4f1a\u628a\u5404\u79cd\u95ee\u9898\u653e\u5230\u4e00\u8d77\u8003\u8651\uff0c\u800c\u4e0d\u662f\u5355\u7eaf\u4e00\u4e2a\u4e00\u4e2a\u5730\u89e3\u51b3\u95ee\u9898\u3002\u4f8b\u5982\u8f6f\u4ef6\u7684\u53ef\u7ec4\u5408\u6027\u3001\u6a21\u5757\u5316\u3001\u7f16\u7a0b\u590d\u6742\u5ea6\u7684\u964d\u4f4e\u3001\u4e92\u64cd\u4f5c\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"\u5982\u540e\u9762\u7684\u5185\u5bb9\u6240\u77e5\uff0c\u6211\u4eec\u8fd8\u5bf9\u5e94\u7528\u7a0b\u5e8f\u7684\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u4e86\u8c03\u6574\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628a\u7a0b\u5e8f\u5f53\u4f5c\u4e00\u4e2a\u9ed1\u76d2\u5b50\u6765\u8fdb\u884c\u7edf\u4e00\u7684\u9694\u79bb\uff0c\u4f8b\u5982\u4f20\u7edf\u7684\u9694\u79bb\u6280\u672f\u5927\u90fd\u662f\u57fa\u4e8e\u6bd4\u8f83\u5e95\u5c42\u7684\u7f16\u8bd1\u60ef\u4f8b\uff0c\u5982\u65b9\u6cd5\u8c03\u7528\uff08Calling Convention\uff09\u6765\u8bbe\u8ba1\u9694\u79bb\u673a\u5236\uff0c\u8fd9\u6837\u4f7f\u5f97\u4e0d\u9700\u8981\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u9020\u6210\u592a\u5927\u7684\u5f71\u54cd\u3002\u5728Reality Create\u4e2d\uff0c\u6211\u4eec\u7684\u6bcf\u4e2a\u7ec4\u4ef6\u7684\u5f88\u591a\u884c\u4e3a\u548c\u6784\u9020\u8fc7\u7a0b\u662f\u7531\u8fd0\u884c\u65f6\u81ea\u52a8\u63a8\u5bfc\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u672c\u8eab\u5df2\u7ecf\u5bf9\u7528\u6237\u7684\u5f00\u53d1\u8fc7\u7a0b\u6709\u4e00\u5b9a\u7684\u5f71\u54cd\uff0c\u8fd9\u540c\u65f6\u4e5f\u610f\u5473\u7740\u6211\u4eec\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u7740\u66f4\u591a\u4fe1\u606f\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5728\u66f4\u4e0a\u5c42\u7684\u5730\u65b9\u5b9e\u73b0\u4e00\u4e9b\u9694\u79bb\u673a\u5236\uff0c\u540c\u65f6\u7531\u4e8e\u4e0a\u5c42\u7684\u673a\u6784\u5305\u542b\u5bf9\u7a0b\u5e8f\u7684\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u4e00\u4e9b\u65b0\u7684\u7075\u6d3b\u6027\u548c\u80fd\u529b\u3002"),(0,a.kt)("h3",{id:"\u590d\u6742\u7cfb\u7edf"},"\u590d\u6742\u7cfb\u7edf"),(0,a.kt)("p",null,"\u4ece\u4e24\u4e2a\u65b9\u9762\u7406\u89e3\uff0c\u5185\u5728\u7ed3\u6784\u548c\u5916\u5728\u7279\u5f81\uff0c\u5185\u5728\u7ed3\u6784\u901a\u5e38\u5728\u5de5\u4e1a\u8bbe\u8ba1\u65b9\u9762\u6709\u5f88\u591a\u5b9e\u8df5\u3002\u5916\u5728\u7279\u5f81\u5219\u66f4\u504f\u7406\u8bba\u3002"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"A complex system is a system composed of many components which may interact with each other. Examples of complex systems are Earth's global climate, organisms, the human brain, infrastructure such as power grid, transportation or communication systems, complex software and electronic systems, social and economic organizations (like cities), an ecosystem, a living cell, and ultimately the entire universe.")),(0,a.kt)("p",null,"Complex systems are ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/System"},"systems"),' whose behavior is intrinsically difficult to model due to the dependencies, competitions, relationships, or other types of interactions between their parts or between a given system and its environment. Systems that are "',(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Complexity"},"complex"),'" have distinct properties that arise from these relationships, such as ',(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Nonlinear_system"},"nonlinearity"),", ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Emergence"},"emergence"),", ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Spontaneous_order"},"spontaneous order"),", ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Complex_adaptive_system"},"adaptation"),", and ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Feedback"},"feedback loops"),", among others. Because such systems appear in a wide variety of fields, the commonalities among them have become the topic of their independent area of research. In many cases, it is useful to represent such a system as a network where the nodes represent the components and links to their interactions."),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"realityis\u67b6\u6784\u54f2\u5b66"},"RealityIS\u67b6\u6784\u54f2\u5b66"),(0,a.kt)("p",null,"RealityIS\u7684\u6574\u4e2a\u67b6\u6784\u8bbe\u8ba1\u7ecf\u5386\u4e86\u6574\u6574\u4e00\u5e74\u591a\u7684\u65f6\u95f4\uff0c\u53ef\u4ee5\u53c2\u770b\u53e6\u4e00\u7bc7\u6587\u6863\u8bb0\u5f55\u4e86\u6574\u4e2a\u601d\u8003\u8fc7\u7a0b\u3002\u6574\u4e2a\u8fc7\u7a0b\u5176\u5b9e\u662f\u4e00\u4e2a\u975e\u5e38\u590d\u6742\u7684\u601d\u8003\u8fc7\u7a0b\uff0c\u4e00\u5f00\u59cb\u53ea\u6709\u90e8\u5206\u6b8b\u7f3a\u7684\u601d\u60f3\uff0c\u4e0d\u65ad\u5728\u7ec6\u8282\u548c\u603b\u4f53\u4e4b\u95f4\u4e0d\u65ad\u6765\u56de\u5207\u6362\uff0c\u6162\u6162\u6784\u7b51\u8d77\u66f4\u5b8c\u6574\u7684\u4f53\u7cfb\uff08\u6211\u4f1a\u7528\u4e00\u7bc7\u535a\u6587\u4ecb\u7ecd\u6574\u4e2a\u601d\u8003\u7684\u8fc7\u7a0b\uff09\u3002\u6240\u4ee5\u5f53\u56de\u6765\u518d\u6765\u770b\u6574\u4e2a\u67b6\u6784\u65f6\uff0c\u6211\u4eec\u5fc5\u987b\u8981\u5f62\u6210\u6e05\u6670\u800c\u7b80\u6d01\u7684\u65b9\u6cd5\u8bba\u751a\u81f3\u54f2\u5b66\u601d\u60f3\u3002\u8fd9\u4e0d\u4ec5\u6709\u52a9\u4e8e\u540e\u6765\u8005\u66f4\u597d\u5730\u7406\u89e3\u5b83\uff0c\u800c\u4e0d\u9700\u8981\u9677\u5165\u5f88\u591a\u7ec6\u8282\uff0c\u540c\u65f6\u8fd9\u4e5f\u5c24\u5176\u662f\u8fd9\u6837\u4e00\u4e2a\u9762\u5411\u672a\u6765\u7684\u6280\u672f\u67b6\u6784\u5177\u6709\u5b66\u4e60\u548c\u7814\u7a76\u4ef7\u503c\u7684\u5730\u65b9\u3002"),(0,a.kt)("p",null,"\u5b9a\u4e49\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"RealityIS\u662f\u4e00\u4e2a\u4ee5\u4e92\u64cd\u4f5c\u6027\u4e3a\u6838\u5fc3\u76ee\u6807\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\u548c\u67b6\u6784\uff0c\u5b83\u7684\u613f\u666f\u662f\u6784\u9020\u4e00\u4e2a\u65e0\u8fb9\u7684\u6570\u5b57\u4e16\u754c\uff0c\u4f7f\u5f97\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u5411\u8fd9\u4e2a\u7cfb\u7edf\u52a8\u6001\u6dfb\u52a0\u65b0\u7684\u5b50\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u5b50\u7a0b\u5e8f\u53ef\u4ee5\u548c\u5176\u5b83\u5b50\u7a0b\u5e8f\u4efb\u610f\u4ea4\u4e92\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u53ef\u4ee5\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u81ea\u6211\u8fdb\u5316\uff0c\u4ece\u800c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u52a0\u667a\u80fd\u3001\u4e30\u5bcc\u548c\u4e2a\u6027\u5316\u7684\u6570\u5b57\u4e16\u754c\u4f53\u9a8c"),"\u3002"),(0,a.kt)("p",null,"RealityIS\u901a\u8fc7\u4ee5\u4e0b\u4e24\u79cd\u7406\u8bba\u4f9d\u636e\u6765\u6784\u7b51\u4e0a\u8ff0\u7684\u76ee\u6807\uff0c\u4e5f\u5373\u662f\u5b83\u7684\u67b6\u6784\u54f2\u5b66\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5b83\u662f\u533a\u5757\u94fe\u53bb\u4e2d\u5fc3\u5316\u601d\u60f3\u7684\u4e00\u822c\u5316\uff0c\u5b83\u5c06\u533a\u5757\u94fe\u7684\u6570\u5b57\u7c7b\u578b\u5ef6\u5347\u4e3a\u901a\u7528\u6570\u636e\u7c7b\u578b\uff0c\u7136\u540e\u901a\u8fc7\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf\u4f7f\u5f97\u6240\u6709\u865a\u62df\u673a\u548c\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u8bbf\u95ee\u7528\u6237\u4efb\u610f\u6570\u636e\uff0c\u6700\u540e\u901a\u8fc7\u6570\u636e\u4e0e\u529f\u80fd\u5206\u79bb\u4f7f\u5f97\u8fd9\u79cd\u8bbf\u95ee\u80fd\u591f\u88ab\u7528\u6237\u6388\u6743\u7cbe\u786e\u63a7\u5236"),"\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5b83\u4ee5\u590d\u6742\u7cfb\u7edf\u4e3a\u7406\u8bba\u57fa\u7840\u6765\u6784\u7b51\u6574\u4e2a\u8ba1\u7b97\u6846\u67b6\uff0c\u7528\u6237\u5f00\u53d1\u7684\u7a0b\u5e8f\u4ee5\u5c0f\u7c92\u5ea6\u7684\u7ec4\u4ef6\u4e3a\u5355\u4f4d\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\u4e0d\u9700\u8981\u5168\u5c40\u7684\u4e2d\u592e\u63a7\u5236\uff0c\u800c\u662f\u901a\u8fc7\u7c7b\u578b\u7cfb\u7edf\u5b9e\u73b0\u5c40\u90e8\u7684\u81ea\u52a8\u4ea4\u4e92\uff0c\u7cfb\u7edf\u5185\u7684\u7ec4\u4ef6\u53ef\u4ee5\u4efb\u610f\u52a8\u6001\u7ec4\u5408"),"\u3002")),(0,a.kt)("p",null,"\u5728\u4e0a\u8ff0\u7684\u54f2\u5b66\u601d\u60f3\u4e2d\uff0c\u53bb\u4e2d\u5fc3\u5316\u7684\u601d\u60f3\u5b9a\u4e49\u4e86\u5916\u5728\u7ed3\u6784\uff0c\u800c\u590d\u6742\u7cfb\u7edf\u7684\u7406\u8bba\u5b9a\u4e49\u4e86\u5185\u5728\u7ed3\u6784\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u7684\u5185\u5bb9\u4e2d\u8be6\u7ec6\u5206\u6790\u3002"),(0,a.kt)("p",null,"\u4ece\u524d\u9762\u7684\u5b9a\u4e49\u53ef\u4ee5\u770b\u51faRealityIS\u7684\u4e24\u4e2a\u4e3b\u8981\u76ee\u6807\u662f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("li",{parentName:"ul"},"\u81ea\u6211\u8fdb\u5316")),(0,a.kt)("p",null,"\u8fd9\u4e24\u4e2a\u76ee\u6807\u7684\u76ee\u6807\u5219\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u5b9e\u73b0\u66f4\u5f7b\u5e95\u66f4\u4e30\u5bcc\u7684\u6570\u5b57\u5316\uff0c\u4f7f\u4e4b\u771f\u6b63\u6210\u4e3a\u4e00\u79cd\u4eba\u4eba\u53c2\u4e0e\u7684\u6570\u5b57\u7ecf\u6d4e\u3002\u8fd9\u4e24\u4e2a\u76ee\u6807\u4e5f\u662fRealityIS\u80fd\u591f\u533a\u5206\u8fc7\u53bb\u7684\u5404\u79cd\u8f6f\u4ef6\u6216\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u5b8c\u5168\u7684\u4e92\u64cd\u4f5c\u6027\u662f\u6570\u5b57\u7ecf\u6d4e\u7684\u57fa\u7840\uff0c\u6709\u4e86\u8fd9\u4e2a\u57fa\u7840\uff0c\u66f4\u591a\u7684\u6570\u5b57\u5185\u5bb9\u624d\u53ef\u4ee5\u66f4\u597d\u5730\u534f\u4f5c\uff0c\u4ece\u800c\u4ea7\u751f\u7ecf\u6d4e\u884c\u4e3a\u3002\u800c\u81ea\u6211\u8fdb\u5316\u5219\u610f\u5473\u7740\uff0c\u5f53\u6211\u4eec\u7531\u73b0\u5728\u8fd9\u79cd\u56fa\u5b9a\u529f\u80fd\u7684\u8f6f\u4ef6\u8d70\u5411\u66f4\u52a0\u52a8\u6001\u3001\u4e30\u5bcc\u7684\u6570\u5b57\u4e16\u754c\uff0c\u8fd9\u79cd\u590d\u6742\u7684\u4ea4\u4e92\u5fc5\u987b\u8981\u6d8c\u73b0\u51fa\u65b0\u7684\u66f4\u9ad8\u7684\u6570\u5b57\u667a\u80fd\uff0c\u8fd9\u79cd\u667a\u80fd\u8981\u8d85\u8fc7\u4f20\u7edf\u5355\u4e00\u8f6f\u4ef6\u7684\u529f\u80fd\u3002"),(0,a.kt)("p",null,"\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e24\u4e2a\u76ee\u6807\uff0c\u6211\u4eec\u4ee5\u533a\u5757\u94fe\u548c\u590d\u6742\u7cfb\u7edf\u4e24\u4e2a\u6bd4\u8f83\u5b8c\u5584\u7684\u7406\u5ff5\u4f5c\u4e3a\u7406\u8bba\u57fa\u7840\u3002\u5c3d\u7ba1\u533a\u5757\u94fe\u5e76\u4e0d\u662f\u4e13\u4e3a\u4e92\u64cd\u4f5c\u6027\u800c\u8bbe\u8ba1\u7684\uff0c\u4f46\u4ece\u4e0b\u4e00\u8282\u7684\u5206\u6790\u53ef\u4ee5\u770b\u51fa\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u533a\u5757\u94fe\u7684\u4e00\u4e9b\u601d\u60f3\u4e2d\u5ef6\u5347\u51fa\u4e00\u79cd\u4e00\u822c\u5316\u7684\u4e92\u64cd\u4f5c\u601d\u60f3\uff0c\u540c\u65f6\u53c8\u517c\u5177\u53bb\u4e2d\u5fc3\u7684\u80fd\u529b\u3002\u800c\u590d\u6742\u7cfb\u7edf\u7684\u539f\u7406\u548c\u65b9\u6cd5\u8bba\u5219\u4e3a\u8fd9\u79cd\u52a8\u6001\u7684\u5927\u89c4\u6a21\u7a0b\u5e8f\u7684\u7ec4\u7ec7\u548c\u529f\u80fd\u6d8c\u73b0\u63d0\u4f9b\u4e86\u6bd4\u8f83\u7a33\u56fa\u7684\u7406\u8bba\u6307\u5bfc\u3002"),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5b9a\u4e49\u4e5f\u53ef\u4ee5\u770b\u51fa\u53e6\u4e00\u4e2a\u91cd\u8981\u7684\u65b9\u9762\uff0c\u5373\u5c3d\u7ba1RealityIS\u6d89\u53ca\u8f6f\u4ef6\u6784\u9020\u65b9\u6cd5\uff0c\u4f46\u6211\u4eec\u5e76\u6ca1\u6709\u6d89\u53ca\u8f83\u4f4e\u5c42\u7684\u7f16\u8bd1\u548c\u7f16\u7a0b\u8bed\u8a00\u5c42\u9762\u3002\u5f53\u7136\u540e\u9762\u4f1a\u5206\u6790\uff0cReallityIS\u4e5f\u7edd\u4e0d\u5355\u7eaf\u662f\u4e00\u4e2a\u8f6f\u4ef6\u67b6\u6784\uff0c\u5b83\u4e5f\u6d89\u53ca\u5230\u5bf9\u7f16\u8bd1\u8fc7\u7a0b\u548c\u7f16\u7a0b\u8bed\u8a00\u4e00\u4e9b\u601d\u60f3\u7684\u91cd\u65b0\u89e3\u8bfb\uff0c\u4ee5\u53ca\u5c06\u6765\u4e5f\u6d89\u53ca\u5bf9\u7f16\u8bd1\u5668\u548c\u7f16\u7a0b\u8bed\u8a00\u7684\u67d0\u4e9b\u6539\u9020\uff0c\u4f46\u662f\u8fd9\u79cd\u6539\u9020\u4e3b\u8981\u662f\u7ed3\u6784\u6027\u7684\uff0c\u6216\u8005\u8bf4\u4e0d\u4f1a\u5bf9\u4f20\u7edf\u7f16\u7a0b\u8bed\u8a00\u548c\u7f16\u8bd1\u5668\u7684\u6838\u5fc3\u90e8\u5206\u8fdb\u884c\u4fee\u6539\u3002"),(0,a.kt)("h3",{id:"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61"},"\u5efa\u7acb\u4e92\u64cd\u4f5c\u6570\u636e\u62bd\u8c61"),(0,a.kt)("p",null,"\u533a\u5757\u94fe\u662f\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u5c3d\u7ba1\u8fd9\u79cd\u7cfb\u7edf\u51fa\u73b0\u7684\u76ee\u6807\u5e76\u4e0d\u662f\u4e3a\u4e86\u89e3\u51b3\u4e00\u822c\u8f6f\u4ef6\u5f00\u53d1\u4e2d\u7684\u4e92\u64cd\u4f5c\u6027\u95ee\u9898\uff0c\u5b83\u4e5f\u4e0d\u662f\u4e3a\u89e3\u51b3\u4f20\u7edf\u5206\u5e03\u5f0f\u8ba1\u7b97\u95ee\u9898\u800c\u8bbe\u8ba1\u7684\u5206\u5e03\u5f0f\u8f6f\u4ef6\u67b6\u6784\u3002\u4f46\u901a\u8fc7\u6d1e\u5bdf\u5b83\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u7ed3\u5408\u4e92\u64cd\u4f5c\u6027\u7684\u4e00\u4e9b\u6280\u672f\u9700\u6c42\u548c\u7279\u5f81\uff0c\u6211\u4eec\u5219\u53ef\u4ee5\u5f97\u5230\u4e0d\u540c\u7684\u542f\u793a\u3002\u8fd9\u79cd\u542f\u793a\u53ef\u4ee5\u8bf4\u662fRealityIS\u6700\u6838\u5fc3\u7684\u90e8\u5206\u3002"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u5c06\u4ece\u4e0d\u540c\u7684\u89d2\u5ea6\u6765\u89e3\u8bfb\u533a\u5757\u94fe\u7cfb\u7edf\uff0c\u4ee5\u53ca\u600e\u6837\u4ece\u8fd9\u79cd\u89e3\u8bfb\u4e2d\u53d1\u73b0\u5efa\u7acb\u4e92\u64cd\u4f5c\u7cfb\u7edf\u7684\u65b9\u6848\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u533a\u5757\u94fe\u7cfb\u7edf\u6709\u4e09\u4e2a\u6280\u672f\u7279\u5f81\uff0c\u6216\u8005\u8bf4\u53ef\u4ee5\u4ece\u8fd9\u4e09\u4e2a\u65b9\u9762\u6765\u89e3\u8bfb\u533a\u5757\u94fe\u7cfb\u7edf\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},"\u6570\u636e"),(0,a.kt)("li",{parentName:"ul"},"\u5b89\u5168")),(0,a.kt)("p",null,"\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u4e09\u4e2a\u5c42\u9762\u5173\u6ce8\u7684\u5e76\u4e0d\u662f\u533a\u5757\u94fe\u6838\u5fc3\u7684\u5171\u8bc6\u673a\u5236\u7684\u90e8\u5206\uff0c\u800c\u662f\u5b83\u4f5c\u4e3a\u4e00\u4e2a\u8f6f\u4ef6\u67b6\u6784\u7684\u5c42\u9762\u3002\u540c\u65f6\u8fd9\u91cc\u5c3d\u7ba1\u6211\u4eec\u4e5f\u4f1a\u6d89\u53ca\u53bb\u4e2d\u5fc3\u5316\u7684\u601d\u60f3\uff0c\u4f46\u662f\u8fd9\u4e5f\u5e76\u4e0d\u662f\u6307\u533a\u5757\u94fe\u4e2d\u4f7f\u7528\u5206\u5e03\u5f0f\u8d26\u672c\u5b58\u50a8\u7684\u53bb\u4e2d\u5fc3\u5316\u65b9\u5f0f\uff0c\u6211\u4eec\u8003\u8651\u7684\u53bb\u4e2d\u5fc3\u5316\u662f\u6307\u901a\u8fc7\u4e00\u79cd\u5c06\u8f6f\u4ef6\u529f\u80fd\u548c\u7528\u6237\u6570\u636e\u9694\u79bb\u7684\u5e94\u7528\u7a0b\u5e8f\u6784\u5efa\u673a\u5236\uff0c\u4f7f\u5f97\u5e94\u7528\u5f00\u53d1\u5546\u4e0d\u518d\u5177\u6709\u638c\u63a7\u7528\u6237\u6570\u636e\u7684\u80fd\u529b\uff0c\u4ece\u800c\u4e5f\u662f\u4e00\u79cd\u53bb\u4e2d\u5fc3\u5316\u7684\u6982\u5ff5\u3002\u4f46\u662f\u8fd9\u79cd\u53bb\u4e2d\u5fc3\u5316\u4f9d\u7136\u9700\u8981\u501f\u52a9\u67d0\u79cd\u65b9\u5f0f\u7684\u4e2d\u5fc3\u5316\u8ba1\u7b97\uff0c\u4e0d\u8fc7\u5728\u8fd9\u79cd\u67b6\u6784\u4e0b\u7528\u6237\u5bf9\u6570\u636e\u5177\u6709\u66f4\u900f\u660e\u7684\u63a7\u5236\u3002"),(0,a.kt)("h4",{id:"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2"},"\u533a\u5757\u94fe\u7684\u8f6f\u4ef6\u6784\u9020\u89c6\u89d2"),(0,a.kt)("p",null,"\u5982\u679c\u6211\u4eec\u4ece\u533a\u5757\u94fe\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u7684\u4efb\u4e00\u8282\u70b9\u53bb\u770b\uff0c\u8fd9\u4e2a\u8282\u70b9\u53ef\u4ee5\u770b\u4f5c\u4e00\u4e2a\u7b80\u5355\u7684\u865a\u62df\u673a\uff0c\u8fd9\u4e2a\u865a\u62df\u673a\u6bcf\u6b21\u8ba1\u7b97\u6267\u884c\u4e00\u4e2a\u975e\u5e38\u7b80\u5355\u7684\u7a0b\u5e8f\uff0c\u5373\u5bf9\u67d0\u4e24\u4e2a\u8d26\u6237\u6267\u884c\u4ef7\u503c\u4ea4\u6613\u3002\u6211\u4eec\u8fd9\u91cc\u4e0d\u8003\u8651\u8fd9\u4e2a\u4ef7\u503c\u4ea4\u6613\u7684\u7b97\u6cd5\u672c\u8eab\uff0c\u4ec5\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u7136\u540e\u601d\u8003\u4e3a\u4e86\u652f\u6301\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u5f00\u53d1\u548c\u8fd0\u884c\uff0c\u533a\u5757\u94fe\u4e0a\u7684\u865a\u62df\u673a\u5e94\u8be5\u5177\u5907\u4ec0\u4e48\u529f\u80fd\uff1f"),(0,a.kt)("p",null,"\u6211\u4eec\u77e5\u9053\u4f20\u7edf\u7684\u865a\u62df\u673a\u7684\u6838\u5fc3\u673a\u5236\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u5177\u6709\u67d0\u79cd\u8bed\u6cd5\u7684\u7f16\u7a0b\u8bed\u8a00\u7684\u89e3\u91ca\u5668\uff0c\u7136\u540e\u4f7f\u7528\u8fd9\u79cd\u8bed\u6cd5\u7f16\u7a0b\u7684\u7a0b\u5e8f\u6e90\u4ee3\u7801\u4f5c\u4e3a\u8f93\u5165\uff0c\u865a\u62df\u673a\u5bf9\u6e90\u4ee3\u7801\u8fdb\u884c\u89e3\u91ca\u5e76\u6267\u884c\uff0c\u8fd9\u79cd\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u901a\u5e38\u652f\u6301\u73b0\u4ee3\u6bd4\u8f83\u9ad8\u7ea7\u7684\u4e00\u4e9b\u8bed\u6cd5\uff0c\u4f8b\u5982Lua\uff0cPython\uff0cJava\u7b49\u7f16\u7a0b\u8bed\u8a00\u90fd\u652f\u6301\u8fd9\u79cd\u865a\u62df\u673a\u7684\u6267\u884c\u65b9\u5f0f\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"img",src:l(1505).Z,width:"626",height:"258"})),(0,a.kt)("p",null,"\u5c3d\u7ba1\u4e0d\u662f\u5f88\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u6211\u4eec\u53ef\u4ee5\u628a\u4e00\u4e2a\u7a0b\u5e8f\u7684\u7ed3\u6784\u770b\u6210\u662f\u8fd9\u6837\u7684\u62bd\u8c61\uff1a\u5373\u7a0b\u5e8f\u7531\u6570\u636e\u3001\u7c7b\u578b\u548c\u4ee3\u7801\u7ec4\u6210\uff0c\u5982\u4e0a\u56fe\uff08a\uff09\u6240\u793a\uff0c\u5f53\u7136\u8fd9\u91cc\u7684\u6570\u636e\u4e3b\u8981\u662f\u4f5c\u4e3a\u7a0b\u5e8f\u8f93\u5165\u7684\u6570\u636e\uff0c\u800c\u4e0d\u662f\u6307\u4ee3\u7801\u5185\u90e8\u4e5f\u53ef\u4ee5\u4ea7\u751f\u7684\u5f88\u591a\u7684\u5185\u90e8\u6570\u636e\u7ed3\u6784\u53ca\u5185\u5b58\u5b58\u50a8\uff0c\u90a3\u4e48\u8fd9\u91cc\u7684\u7c7b\u578b\u81ea\u7136\u4e5f\u662f\u6307\u8fd9\u79cd\u5916\u90e8\u8f93\u5165\u7684\u6570\u636e\u7ed3\u6784\u7684\u7c7b\u578b\u3002\u4e00\u822c\u7684\u7a0b\u5e8f\uff0c\u5176\u6570\u636e\u548c\u7c7b\u578b\u90fd\u662f\u5b9a\u4e49\u548c\u5b58\u50a8\u5728\u7a0b\u5e8f\u5185\u90e8\u7684\uff0c\u7528\u6237\u53ea\u662f\u5728\u4f7f\u7528\u5176\u4e2d\u7684\u529f\u80fd\u3002"),(0,a.kt)("p",null,"\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u533a\u5757\u94fe\u7684\u8d26\u672c\u770b\u6210\u6570\u636e\uff0c\u7136\u540e\u8d26\u672c\u5bf9\u5e94\u7684\u7c7b\u578b\u662ffloat\u7c7b\u578b\uff0c\u5bf9\u5e94\u7684\u4ee3\u7801\u5219\u662f\u533a\u5757\u94fe\u865a\u62df\u673a\u6267\u884c\u7684\u5171\u8bc6\u7b97\u6cd5\u3002"),(0,a.kt)("p",null,"\u4f46\u6bd4\u8f83\u9690\u6666\u7684\u5730\u65b9\u5728\u4e8e\uff0cfloat\u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u5355\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5e76\u4e14\u533a\u5757\u94fe\u53ea\u5904\u7406\u8fd9\u79cd\u7b80\u5355\u7684\u5916\u90e8\u8f93\u5165\u6570\u636e\uff0c\u6240\u4ee5\u5b83\u770b\u8d77\u6765\u5e76\u4e0d\u5305\u542b\u4e00\u4e2a\u7c7b\u578b\u5b9a\u4e49\u3002\u5982\u679c\u6211\u4eec\u628a\u8fd9\u4e2a\u590d\u6742\u5ea6\u5ef6\u5347\u4e00\u4e0b\uff0c\u5373\u5982\u679c\u533a\u5757\u94fe\u80fd\u5904\u7406\u4efb\u610f\u7c7b\u578b\u7684\u6570\u636e\uff0c\u90a3\u4e48\u5c31\u5fc5\u987b\u8981\u5b9a\u4e49\u7c7b\u578b\u7ed3\u6784\uff0c\u7136\u540e\u865a\u62df\u673a\u4ee5\u67d0\u79cd\u65b9\u5f0f\u6309\u7167\u7c7b\u578b\u5b9a\u4e49\u8fdb\u884c\u89e3\u6790\u3002\u8fd9\u5176\u5b9e\u5c31\u662f\u4f20\u7edf\u7684\u865a\u62df\u673a\u673a\u5236\uff0c\u5373\u8f93\u5165\u865a\u62df\u673a\u7684\u6e90\u4ee3\u7801\u4e2d\u5305\u542b\u5bf9\u4e8e\u5904\u7406\u7684\u4efb\u4f55\u6570\u636e\u7684\u7c7b\u578b\u5b9a\u4e49\u3002\u6bd4\u5982\u4ee5\u592a\u574a\u7684\u667a\u80fd\u5408\u7ea6\u5c31\u662f\u6bd4\u533a\u5757\u94fe\u66f4\u590d\u6742\u7684\u811a\u672c\u8bed\u8a00\uff0c\u5b83\u5c31\u53ef\u4ee5\u5305\u542b\u66f4\u590d\u6742\u7684\u7c7b\u578b\u5b9a\u4e49\u3002"),(0,a.kt)("p",null,"\u4f46\u662f\u6211\u4eec\u8fd9\u91cc\u5374\u4e0d\u60f3\u8fd9\u4e48\u505a\uff0c\u56e0\u4e3a\u6211\u4eec\u770b\u5230\u4e86\u533a\u5757\u94fe\u7684\u53e6\u4e00\u4e2a\u4e0d\u540c\u5bfb\u5e38\u7684\u7279\u6027\uff0c\u4e5f\u5c31\u662f\u5b83\u7684\u53bb\u4e2d\u5fc3\u5316\u7279\u6027\u7684\u6765\u6e90\uff0c\u5373\u5b83\u7684\u6570\u636e\uff08\u5373\u8d26\u672c\uff09\u5b58\u50a8\u5728\u4e00\u4e2a\u72ec\u7acb\u4e8e\u7a0b\u5e8f\uff08\u865a\u62df\u673a\u4e0a\u7684\u5171\u8bc6\u7b97\u6cd5\u7a0b\u5e8f\uff09\u7684\u5730\u65b9\uff0c\u5373\u6570\u636e\u548c\u7a0b\u5e8f\u662f\u89e3\u8026\u7684\u3002\u6240\u4ee5\u8fd9\u9a71\u4f7f\u6211\u4eec\u60f3\u8981\u8fdb\u4e00\u6b65\u5f04\u6e05\u695a\u5b83\u7684\u72ec\u7279\u7684\u7a0b\u5e8f\u7ec4\u7ec7\u80cc\u540e\u7684\u601d\u60f3\u3002"),(0,a.kt)("p",null,"\u5982\u679c\u53ea\u662f\u60f3\u8981\u5355\u7eaf\u5730\u628a\u6570\u636e\u4e0e\u7a0b\u5e8f\u4ee3\u7801\u5206\u79bb\uff0c\u76f4\u63a5\u628a\u6570\u636e\u5b58\u50a8\u5230\u5916\u90e8\u5e76\u4e0d\u662f\u4e00\u4e2a\u597d\u7684\u65b9\u6cd5\uff0c\u8fd9\u91cc\u9762\u6709\u51e0\u4e2a\u95ee\u9898\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u5185\u90e8\u4ecd\u7136\u4f1a\u5b9a\u4e49\u89e3\u6790\u7684\u6570\u636e\u7c7b\u578b\uff0c\u6240\u4ee5\u4e0d\u5229\u4e8e\u865a\u62df\u673a\u6269\u5c55\u5904\u7406\u4efb\u610f\u52a8\u6001\u7684\u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},"\u5b58\u50a8\u5728\u5916\u90e8\u7684\u6570\u636e\u53ea\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u6570\u636e\uff0c\u5b83\u4eec\u5e76\u6ca1\u6709\u591a\u5c11\u8bed\u4e49\u7684\u4fe1\u606f\uff0c\u6240\u4ee5\u7528\u6237\u65e2\u4e0d\u77e5\u9053\u600e\u4e48\u7ba1\u7406\u5b83\u4eec\uff0c\u4e5f\u65e0\u6cd5\u7406\u89e3\u5b83\u4eec\u3002\u60f3\u60f3\u7406\u8bba\u4e0a\u6211\u4eec\u4efb\u4f55\u5e94\u7528\u7684\u7528\u6237\u90fd\u53ef\u4ee5\u6253\u5f00\u5b58\u50a8\u5728\u5e94\u7528\u5185\u90e8\u6587\u4ef6\u5939\u4e2dSqlite\u7684\u6570\u636e\u5e93\uff0c\u4f46\u662f\u54ea\u4e9b\u6570\u636e\u53ef\u80fd\u5bf9\u7528\u6237\u5e76\u65e0\u592a\u5927\u610f\u4e49\u3002")),(0,a.kt)("p",null,"\u7528\u6237\u5bf9\u6570\u636e\u6700\u901a\u5e38\u7684\u7ba1\u7406\u662f\u6388\u6743\uff0c\u4fdd\u8bc1\u53ea\u6709\u7ecf\u8fc7\u7528\u6237\u8bb8\u53ef\u7684\u8f6f\u4ef6\u624d\u53ef\u4ee5\u8bbf\u95ee\u8fd9\u4e9b\u6570\u636e\u3002\u6240\u4ee5\u4ed4\u7ec6\u601d\u8003\u533a\u5757\u94fe\u7cfb\u7edf\u80cc\u540e\u7684\u601d\u60f3\uff1a",(0,a.kt)("strong",{parentName:"p"},"\u5373\u533a\u5757\u94fe\u53ef\u4ee5\u505a\u5230\u5bf9\u6570\u636e\u7684\u6388\u6743\u7ba1\u7406"),"\uff0c\u5c3d\u7ba1\u533a\u5757\u94fe\u7684\u6570\u636e\u4e5f\u662f\u5b58\u50a8\u5728\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u7684\u5730\u65b9\uff0c\u4f46\u662f\u5b83\u53ef\u4ee5\u505a\u5230\u5bf9\u6570\u636e\u7684\u6743\u9650\u7ba1\u7406\uff0c\u5c3d\u7ba1\u8fd9\u9700\u8981\u5171\u8bc6\u673a\u5236\u534f\u4f5c\u6765\u4fdd\u8bc1\uff0c\u4f46\u4ece\u7a0b\u5e8f\u7684\u673a\u5236\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u79cd\u4f7f\u5bf9\u6570\u636e\u7684\u6743\u9650\u7ba1\u7406\u53d8\u5f97\u53ef\u80fd\u7684\u539f\u56e0\u5728\u4e8e\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u7528\u6237\u4e86\u89e3\u6570\u636e\u7684\u610f\u4e49\uff0c\u7136\u540e\u5728\u4ea4\u6613\u7684\u65f6\u5019\u7528\u6237\u5c06\u8fd9\u4e2a\u8bed\u4e49\u4f20\u8fbe\u7ed9\u865a\u62df\u673a\uff0c\u865a\u62df\u673a\u6309\u7167\u7528\u6237\u6307\u5b9a\u7684\u610f\u4e49\u53ca\u6743\u9650\u673a\u5236\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\u3002"),"\u8fd9\u4e2a\u610f\u4e49\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u5c31\u662f\u7c7b\u578b\uff0c\u7528\u6237\u5bf9\u4e00\u4e2a\u201c\u7c7b\u578b+\u6570\u636e\u201d\u8fdb\u884c\u6388\u6743\uff0c\u7c7b\u578b\u5728\u8fd9\u91cc\u5347\u534e\u4e3a\u67d0\u79cd\u8bed\u4e49\u4fe1\u606f\u6216\u8005\u610f\u4e49\uff0c\u56e0\u4e3a\u6211\u4eec\u5728\u65e5\u5e38\u751f\u6d3b\u4e2d\u6240\u4f5c\u7684\u4e8b\u60c5\uff0c\u5176\u5b9e\u5927\u591a\u6570\u90fd\u662f\u5bf9\u67d0\u7c7b\u4e8b\u60c5\u8fdb\u884c\u5904\u7406\uff0c\u800c\u8fd9\u4e2a\u7c7b\u578b\u5728\u6211\u4eec\u751f\u6d3b\u4e2d\u5c31\u662f\u5305\u542b\u7279\u5b9a\u610f\u4e49\u7684\u4e8b\u7269\uff0c\u8fd9\u4e9b\u4e8b\u7269\u6211\u4eec\u90fd\u53ef\u4ee5\u901a\u8fc7\u540d\u5b57\u6216\u7c7b\u578b\u6765\u533a\u5206\uff0c\u7c7b\u578b\u5145\u5f53\u4e86\u4ee3\u8868\u4e00\u4ef6\u4e8b\u7269\u7684\u8bed\u4e49\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\u5f53\u7528\u6237\u5728\u770b\u5f85\u81ea\u5df1\u94fe\u4e0a\u7684\u4e00\u4e2a\u8d26\u672c\u6570\u636e\u65f6\uff0c\u8fd9\u4e2a\u6570\u636e\u4e0d\u5149\u53ea\u662f\u4e00\u4e2a\u6570\u503c\uff0c\u540c\u65f6\u4e5f\u4ee3\u8868\u4e86\u8d26\u672c\u8fd9\u4e2a\u7c7b\u578b\uff0c\u53ea\u4e0d\u8fc7\u7531\u4e8e\u533a\u5757\u94fe\u7684\u865a\u62df\u673a\u4ec5\u5904\u7406\u8fd9\u4e00\u79cd\u6570\u636e\u7c7b\u578b\uff0c\u6240\u4ee5\u8fd9\u4e2a\u7c7b\u578b\u88ab\u9690\u5f0f\u8868\u8ff0\u4e86\uff0c\u5373\u4f7f\u6ca1\u6709\u4efb\u4f55\u5730\u65b9\u5b9a\u4e49\u8fd9\u4e2a\u7c7b\u578b\uff0c\u533a\u5757\u94fe\u865a\u62df\u673a\u4e5f\u603b\u662f\u80fd\u591f\u6b63\u786e\u89e3\u6790\u8fd9\u4e2a\u6570\u636e\u3002\u5e76\u4e14\u5f53\u7528\u6237\u901a\u8fc7\u7ed9\u51fa\u5bc6\u94a5\u8fdb\u884c\u6388\u6743\u8ba1\u7b97\u7684\u65f6\u5019\uff0cTA\u8868\u8fbe\u7684\u5c31\u662f\u5bf9\u8d26\u672c\u8fd9\u4e2a\u7c7b\u578b\u7684\u6570\u636e\u8fdb\u884c\u6388\u6743\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\u8981\u60f3\u628a\u533a\u5757\u94fe\u4e0a\u8ff0\u8fd9\u79cd\u7a0b\u5e8f\u89c6\u89d2\u7684\u610f\u4e49\u6269\u5c55\u5230\u4e00\u822c\u7a0b\u5e8f\uff0c\u5373\u8ba9\u4efb\u4f55\u7a0b\u5e8f\u7684\u6570\u636e\u90fd\u53ef\u4ee5\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u7684\u4ee3\u7801\u800c\u5b58\u50a8\uff0c\u5e76\u4e14\u7528\u6237\u53ef\u4ee5\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7ba1\u7406\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u4ece\u4e00\u4e0b\u4e09\u4e2a\u65b9\u9762\u5bf9\u533a\u5757\u94fe\u8fdb\u884c\u6269\u5c55\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5c06\u5355\u4e00\u7684float\u7c7b\u578b\u6269\u5c55\u4e3a\u4e00\u5957\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf"),(0,a.kt)("li",{parentName:"ul"},"\u5c06\u6570\u636e\u6309\u7c7b\u578b\u5b58\u50a8\u5728\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u4ee3\u7801\u7684\u5730\u65b9"),(0,a.kt)("li",{parentName:"ul"},"\u865a\u62df\u673a\u5728\u8fd0\u884c\u65f6\u914d\u5408\u7528\u6237\u7684\u6743\u9650\u8bbe\u7f6e\u5bf9\u6570\u636e\u8fdb\u884c\u8bbf\u95ee")),(0,a.kt)("p",null,"\u4e00\u4e0b\u6211\u4eec\u5206\u522b\u6df1\u5165\u5206\u6790\u8fd9\u4e09\u4e2a\u65b9\u9762\u7684\u6269\u5c55\u6d89\u53ca\u5230\u7684\u4e00\u4e9b\u601d\u8003\u548c\u903b\u8f91\u3002"),(0,a.kt)("h5",{id:"\u7c7b\u578b"},"\u7c7b\u578b"),(0,a.kt)("p",null,"\u7a0b\u5e8f\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\uff0c\u5f53\u7136\u5fc5\u987b\u8981\u77e5\u9053\u6b63\u786e\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5373\u77e5\u9053\u6570\u636e\u5185\u90e8\u7684\u6bcf\u4e2a\u5b57\u8282\u8868\u793a\u4ec0\u4e48\u542b\u4e49\u3002\u901a\u5e38\u5916\u90e8\u4f20\u5165\u4e00\u4e2ajson\u5b57\u7b26\u4e32\uff0c\u7136\u540e\u7a0b\u5e8f\u5185\u90e8\u9996\u5148\u4f1a\u5b9a\u4e49\u4e00\u4e2a\u5bf9\u5e94\u7684\u6570\u636e\u7ed3\u6784\u7c7b\u578b\uff0c\u7136\u540e\u6709\u4e00\u4e2a\u89e3\u6790\u51fd\u6570\u5bf9json\u5b57\u7b26\u4e32\u8fdb\u884c\u89e3\u6790\u5e76\u5c06\u4e4b\u8f6c\u5316\u4e3a\u5185\u90e8\u6570\u636e\u7ed3\u6784\u7684\u4e00\u4e2a\u5bf9\u8c61\u3002\u5982\u4e0b\u56fe\uff08a\uff09\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(9802).Z,width:"833",height:"259"})),(0,a.kt)("p",null,"\u4f46\u5982\u524d\u9762\u7684\u5206\u6790\u6240\u77e5\uff0c\u8fd9\u91cc\u4f1a\u5e26\u6765\u4e24\u4e2a\u95ee\u9898\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7528\u6237\u6570\u636e\u7ba1\u7406\u548c\u6388\u6743\u7684\u95ee\u9898"),(0,a.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u6839\u636e\u7528\u6237\u6388\u6743\u8fdb\u884c\u5b89\u5168\u63a7\u5236")),(0,a.kt)("p",null,"\u7531\u4e8e\u89e3\u6790\u5668\u5728\u7a0b\u5e8f\u5185\u90e8\uff0c\u6240\u4ee5\u6570\u636e\u5bf9\u4e8e\u7528\u6237\u800c\u8a00\u4ec5\u4ec5\u662f\u4e00\u4e9b\u5b57\u8282\uff0c\u5982\u679c\u6709\u975e\u5e38\u591a\u7684\u6570\u636e\uff0c\u7528\u6237\u6839\u672c\u4e0d\u77e5\u9053\u54ea\u4e9b\u6570\u636e\u662f\u5bf9\u5e94\u4ec0\u4e48\u610f\u4e49\uff0c\u5373\u4f7f\u7528\u6237\u53ef\u4ee5\u81ea\u5df1\u53bb\u6839\u636e\u6587\u672c\u5185\u5bb9\u81ea\u884c\u5224\u65ad\uff0c\u751a\u81f3\u7ed9\u8fd9\u4e9b\u6587\u672c\u6570\u636e\u52a0\u4e0a\u4e00\u4e9b\u6807\u7b7e\u6216\u540d\u5b57\uff0c\u4f46\u662f\u8fd9\u4e0d\u4ec5\u4f1a\u589e\u5f3a\u7528\u6237\u5bf9\u6570\u636e\u7684\u7ba1\u7406\u590d\u6742\u5ea6\uff0c\u800c\u4e14\u8fd9\u79cd\u5206\u7c7b\u884c\u4e3a\u6216\u7ed3\u679c\u4e0e\u5b9e\u9645\u7684\u6570\u636e\u610f\u4e49\u53ef\u80fd\u8fd8\u662f\u4e0d\u4e00\u81f4\u7684\u3002",(0,a.kt)("strong",{parentName:"p"},"\u56e0\u6b64\uff0c\u7528\u6237\u65e0\u6cd5\u9488\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7ba1\u7406"),"\u3002"),(0,a.kt)("p",null,"\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u95ee\u9898\uff0c\u7531\u4e8e\u89e3\u6790\u5668\u5904\u4e8e\u7a0b\u5e8f\u5185\u90e8\uff0c\u90a3\u4e48\u5c31\u65e0\u6cd5\u4fdd\u8bc1\u7a0b\u5e8f\u4f1a\u9075\u7167\u7528\u6237\u7684\u6388\u6743\u7ed3\u679c\u8fdb\u884c\u5904\u7406\u3002\u9996\u5148\u540c\u6837\u56e0\u4e3a\u4e0a\u9762\u65e0\u6cd5\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7684\u539f\u56e0\uff0c\u4e5f\u4e0d\u5b58\u5728\u4e00\u4e2a\u5916\u90e8\u7a0b\u5e8f\u53ef\u4ee5\u786e\u4fdd\u6570\u636e\u4f1a\u6309\u7167\u7528\u6237\u7684\u65e8\u610f\u88ab\u67d0\u4e2a\u7a0b\u5e8f\u5904\u7406\uff0c\u56e0\u4e3a\u8c01\u90fd\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6570\u636e\u7684\u610f\u4e49\u7684\u4ec0\u4e48\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u53ea\u6709\u5c06\u6570\u636e\u4f20\u9012\u5230\u7a0b\u5e8f\u5185\u90e8\uff0c\u7531\u7a0b\u5e8f\u5185\u90e8\u7684\u89e3\u6790\u5668\u53bb\u505a\u7c7b\u578b\u89e3\u6790\u548c\u5206\u6790\u624d\u77e5\u9053\u6570\u636e\u7684\u610f\u4e49\uff0c\u4e5f\u5c31\u662f\u8bf4\u53ea\u6709\u7a0b\u5e8f\u624d\u77e5\u9053\u6570\u636e\u7684\u610f\u4e49\uff0c\u4f46\u662f\u8fd9\u4e2a\u65f6\u5019\u6570\u636e\u5df2\u7ecf\u88ab\u4f20\u9012\u7ed9\u7a0b\u5e8f\u4e86\u3002",(0,a.kt)("strong",{parentName:"p"},"\u56e0\u6b64\uff0c\u7cfb\u7edf\u4e5f\u65e0\u6cd5\u6839\u636e\u7528\u6237\u7684\u6388\u6743\u65e8\u610f\u5c06\u6570\u636e\u5206\u914d\u7ed9\u5408\u6cd5\u7684\u7a0b\u5e8f"),"\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u7684\u5206\u6790\u8981\u6c42\uff0c\u6570\u636e\u7684\u5f62\u5f0f\u53ca\u5176\u5b9a\u4e49\u5e94\u8be5\u5728\u4e00\u8d77\u88ab\u7ba1\u7406\uff0c\u4e5f\u5c31\u7c7b\u578b\u7684\u5b9a\u4e49\u5e94\u8be5\u5904\u4e8e\u7a0b\u5e8f\u4e4b\u5916\uff0c\u8fd9\u6837\u4e0d\u4ec5\u7528\u6237\u80fd\u591f\u77e5\u9053\u6570\u636e\u7684\u610f\u4e49\uff0c\u4ece\u800c\u80fd\u591f\u6b63\u786e\u5730\u505a\u51fa\u6743\u9650\u63a7\u5236\uff0c\u800c\u4e14\u7cfb\u7edf\u53ef\u4ee5\u501f\u52a9\u7c7b\u578b\u7cfb\u7edf\u4ee5\u53ca\u7528\u6237\u7684\u6388\u6743\u7ec4\u7ec7\u6570\u636e\u88ab\u4f20\u5165\u672a\u7ecf\u6388\u6743\u7684\u7a0b\u5e8f\u3002\u5373\u5982\u4e0a\u56fe\uff08b\uff09\u4e2d\u6240\u793a\u3002\u8fd9\u5c31\u8981\u6c42\u7c7b\u578b\u7cfb\u7edf\u662f\u72ec\u7acb\u4e8e\u7a0b\u5e8f\u7684\u3002"),(0,a.kt)("p",null,"\u8fd9\u662f\u4e00\u79cd\u975e\u5e38\u6709\u542f\u53d1\u610f\u4e49\u7684\u89c6\u89d2\uff0c\u6211\u4eec\u5355\u7eaf\u53bb\u770b\u533a\u5757\u94fe\u7cfb\u7edf\uff0c\u5f88\u96be\u5f97\u51fa\u8fd9\u6837\u7684\u601d\u7ef4\uff0c\u4f46\u662f\u5176\u5b9e\u4ed4\u7ec6\u5206\u6790\u4e5f\u662f\u5408\u7406\u7684\u3002\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u533a\u5757\u94fe\u5176\u5b9e\u5305\u542b\u4e86\u4e00\u4e2a\u516c\u5171\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u4e2a\u7c7b\u578b\u7cfb\u7edf\u53ea\u662f\u5305\u542b\u6570\u503c\u7c7b\u578b\uff0c\u4e5f\u81f3\u4e8e\u6211\u4eec\u751a\u81f3\u4e0d\u9700\u8981\u53bb\u5b9a\u4e49\u8fd9\u4e2a\u7c7b\u578b\u7cfb\u7edf\uff0c\u8fd9\u6837\u5bfc\u81f4\u4eba\u4eec\u5bf9\u5b83\u7684\u7c7b\u578b\u7cfb\u7edf\u53ef\u80fd\u6ca1\u6709\u611f\u77e5\uff1b\u7136\u540e\u533a\u5757\u94fe\u7c7b\u578b\u7cfb\u7edf\u7684\u89e3\u6790\u5668\u662f\u4f4d\u4e8e\u865a\u62df\u673a\u4e0a\u7684\uff0c\u5373\u7531\u7cfb\u7edf\u63a7\u5236\uff0c\u7cfb\u7edf\u5728\u5bf9\u6570\u636e\u6309\u7167\u7528\u6237\u7684\u6388\u6743\u6267\u884c\u6743\u9650\u63a7\u5236\uff0c\u6700\u540e\u83b7\u5f97\u6388\u6743\u7684\u8bf7\u6c42\u624d\u4f1a\u6267\u884c\u6700\u7ec8\u7684\u4ea4\u6613\u8ba1\u7b97\uff0c\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u4ea4\u6613\u624d\u662f\u771f\u6b63\u7684\u5ba2\u6237\u7a0b\u5e8f\uff0c\u800c\u4ea4\u6613\u4e4b\u524d\u7684\u7c7b\u578b\u7cfb\u7edf\u548c\u6388\u6743\u8ba1\u7b97\u662f\u5c5e\u4e8e\u5e73\u53f0\u865a\u62df\u673a\u90e8\u5206\uff0c\u8fd9\u90e8\u5206\u5ba2\u6237\u7a0b\u5e8f\u662f\u65e0\u6cd5\u63a7\u5236\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(9780).Z,width:"833",height:"248"})),(0,a.kt)("p",null,"\u6700\u7ec8\u6211\u4eec\u770b\u6574\u4e2a\u7c7b\u578b\u7cfb\u7edf\u7684\u67b6\u6784\uff0c\u5b83\u7c7b\u4f3c\u4e8e\u4e0a\u56fe\u6240\u793a\uff0c\u8fd9\u91cc\u5ba2\u6237\u7a0b\u5e8f\uff08program\uff09\u4ec5\u4ec5\u662f\u5305\u542b\u4ee3\u7801\uff0c\u6570\u636e\u88ab\u5b58\u50a8\u5728\u5176\u5b83\u5730\u65b9\uff0c\u7528\u6237\u53ef\u4ee5\u79bb\u7ebf\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\uff0c\u6307\u5b9a\u54ea\u4e9b\u7a0b\u5e8f\u53ef\u4ee5\u8bbf\u95ee\u54ea\u4e9b\u7c7b\u578b\u7684\u6570\u636e\u3002\u7136\u540e\u8fd0\u884c\u65f6\u8fd9\u4e9b\u6570\u636e\u88ab\u9996\u5148\u52a0\u8f7d\u7684\u865a\u62df\u673aVM\uff0c\u865a\u62df\u673a\u9996\u5148\u6839\u636e\u7c7b\u578b\u4fe1\u606f\u5bf9\u6570\u636e\u7684\u6743\u9650\u8fdb\u884c\u5224\u65ad\uff0c\u5982\u679c\u8fd9\u4e2a\u7a0b\u5e8f\u88ab\u6388\u6743\uff0c\u5219\u8c03\u7528\u89e3\u6790\u5668\u5e2e\u52a9\u7a0b\u5e8f\u89e3\u6790\u683c\u5f0f\uff0c\u5e76\u6700\u7ec8\u5c06\u7a0b\u5e8f\u653e\u5165\u5230\u67d0\u4e2a\u7ea6\u5b9a\u7684\u5185\u5b58\u5730\u5740\uff0c\u6700\u540e\u7a0b\u5e8f\u4ece\u8fd9\u4e2a\u5185\u5b58\u5730\u5740\u53d6\u503c\u8fdb\u884c\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u5f53\u7136\u5b9e\u9645\u6574\u4e2a\u7c7b\u578b\u7cfb\u7edf\u7684\u5de5\u4f5c\u673a\u5236\u8fd8\u6d89\u53ca\u5f88\u591a\u5185\u5bb9\uff0c\u6211\u4eec\u5728\u540e\u9762\u67b6\u6784\u8bbe\u8ba1\u4e00\u8282\u5c06\u8be6\u7ec6\u4ecb\u7ecd\u3002"),(0,a.kt)("h5",{id:"\u6570\u636e"},"\u6570\u636e"),(0,a.kt)("p",null,"\u533a\u5757\u94fe\u7684\u53e6\u4e00\u4e2a\u7279\u70b9\u662f\u6570\u636e\u7684\u5b58\u50a8\u662f\u672a\u53d7\u4fdd\u62a4\u7684\uff0c\u751a\u81f3\u662f\u660e\u6587\u7684\uff0c\u4efb\u4f55\u7a0b\u5e8f\u90fd\u53ef\u4ee5\u83b7\u53d6\u7528\u6237\u7684\u8d26\u672c\u4fe1\u606f\u3002\u8fd9\u8ddf\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784\u601d\u60f3\u4e5f\u662f\u622a\u7136\u4e0d\u540c\u7684\uff0c\u4f20\u7edf\u7684\u5e94\u7528\u67b6\u6784\u5c31\u662f\u4e3a\u4e86\u4fdd\u62a4\u7528\u6237\u6570\u636e\u800c\u5c06\u6570\u636e\u5b8c\u5168\u9694\u79bb\uff0c\u751a\u81f3\u52a0\u5bc6\u4ee5\u9632\u6b62\u5176\u5b83\u7a0b\u5e8f\u89e6\u78b0\u5230\u6570\u636e\uff0c\u4f46\u662f\u5b83\u4eec\u901a\u5e38\u5728\u5185\u90e8\u5219\u4e0d\u505a\u592a\u591a\u5b89\u5168\u68c0\u67e5\uff0c\u5047\u8bbe\u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u90fd\u662f\u5408\u6cd5\u7684\uff1b\u800c\u533a\u5757\u94fe\u7684\u54f2\u5b66\u5374\u4e0d\u4e00\u6837\uff0c\u5b83\u8ba4\u4e3a\u6570\u636e\u7684\u5b58\u50a8\u4e0d\u91cd\u8981\uff0c\u91cd\u8981\u7684\u662f\u6570\u636e\u7684\u6240\u6709\u6743\uff0c\u6240\u4ee5\u5b83\u7684\u6838\u5fc3\u662f\u5728\u8fd0\u884c\u65f6\u505a\u6388\u6743\u68c0\u67e5\u3002\u5f53\u7136\u8fd9\u91cc\u53ea\u662f\u4e00\u79cd\u67b6\u6784\u4e0a\u7684\u7c7b\u6bd4\uff0c\u533a\u5757\u94fe\u516c\u5f00\u660e\u6587\u6570\u636e\u7684\u673a\u5236\u4e5f\u662f\u7531\u4e8e\u5176\u6838\u5fc3\u7684\u5171\u8bc6\u673a\u5236\u51b3\u5b9a\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(3459).Z,width:"816",height:"218"})),(0,a.kt)("p",null,"\u5982\u4e0a\u56fe\uff08a\uff09\u6240\u793a\uff0c\u4f20\u7edf\u7684\u7a0b\u5e8f\u5c06\u6570\u636e\u9694\u79bb\u8d77\u6765\uff0c\u4ee5\u9632\u6b62\u5176\u5b83\u7a0b\u5e8f\u8bbf\u95ee\uff0c\u8fd9\u79cd\u9694\u79bb\u673a\u5236\u5f80\u5f80\u662f\u5728\u7f16\u7a0b\u6a21\u578b\u4e4b\u5916\u7684\u673a\u5236\uff0c\u7531\u64cd\u7cfb\u7edf\u6765\u63d0\u4f9b\uff0c\u56e0\u6b64\u7a0b\u5e8f\u4e0d\u9700\u8981\u62c5\u5fc3\u6570\u636e\u7684\u5b89\u5168\u6027\u3002\u4f8b\u5982\u5e38\u89c1\u81f3\u5c11\u6709\u4e09\u79cd\u6570\u636e\u4fdd\u62a4\u673a\u5236\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u6587\u4ef6\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u6c99\u76d2\u73af\u5883"),"\uff0c\u5728\u73b0\u4ee3\u79fb\u52a8\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u6bcf\u4e2a\u5e94\u7528\u5f80\u5f80\u90fd\u5206\u914d\u6709\u72ec\u7acb\u7684\u6570\u636e\u5b58\u50a8\u7a7a\u95f4\uff0c\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u5c06\u5176\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u6570\u636e\u5b58\u653e\u81f3\u8fd9\u91cc\u3002\u50cfiOS\u64cd\u4f5c\u7cfb\u7edf\u5219\u4f1a\u4e3a\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u7a7a\u95f4\u521b\u9020\u4e00\u4e2a\u6c99\u76d2\u73af\u5883\uff0c\u4f7f\u5f97\u53ea\u6709\u6240\u5c5e\u7684\u5e94\u7528\u7a0b\u5e8f\u624d\u80fd\u8bbf\u95ee\u8fd9\u4e2a\u73af\u5883\u4e2d\u7684\u4e00\u5207\u6570\u636e\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u64cd\u4f5c\u7cfb\u7edf\u5185\u5b58\u9694\u79bb"),"\uff0c\u5f53\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u540e\uff0c\u5c3d\u7ba1\u7406\u8bba\u4e0a\u6240\u6709\u7684\u5e94\u7528\u7a0b\u5e8f\u90fd\u662f\u5171\u4eab\u8ba1\u7b97\u673a\u786c\u4ef6\u7684\u5185\u5b58\uff0c\u4f46\u662f\u73b0\u4ee3\u64cd\u4f5c\u7cfb\u7edf\u53ca\u786c\u4ef6\u63d0\u4f9b\u4e86\u5f88\u591a\u9694\u79bb\u673a\u5236\uff0c\u4f7f\u5f97\u6bcf\u4e2a\u7a0b\u5e8f\u88ab\u5206\u914d\u4e00\u5757\u5185\u5b58\u7684\u533a\u57df\uff0c\u5e76\u4e14\u4e0d\u7ba1\u5176\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u8bbf\u95ee\u7684\u5185\u5b58\u5730\u5740\u6307\u5411\u4f55\u5904\uff0c\u90fd\u4e0d\u53ef\u80fd\u8bbf\u95ee\u5230\u7a0b\u5e8f\u4e4b\u5916\u7684\u9694\u79bb\u533a\u57df\u3002\u6211\u4eec\u5c06\u5728\u540e\u9762\u8ba8\u8bba\u8fd9\u4e9b\u673a\u5236\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u865a\u62df\u673a\u6c99\u76d2\u73af\u5883"),"\uff0c\u50cfJava\u3001Web Assembly\u3001.NET CLR\u7b49\u73b0\u4ee3\u865a\u62df\u673a\u73af\u5883\uff0c\u5b83\u4eec\u5f80\u5f80\u63d0\u4f9b\u4e00\u79cd\u591a\u79cd\u7f16\u7a0b\u8bed\u8a00\u7684\u7a0b\u5e8f\u4e92\u64cd\u4f5c\u7684\u80fd\u529b\uff0c\u5c3d\u7ba1\u4fdd\u62a4\u529b\u5ea6\u548c\u6027\u80fd\u4e0d\u4e00\u6837\uff0c\u5b83\u4eec\u8fd8\u6216\u591a\u6216\u5c11\u63d0\u4f9b\u4e86\u4e00\u4e9b\u5728\u540c\u4e00\u4e2a\u5e94\u7528\u5185\u90e8\u9694\u79bb\u4e0d\u540c\u5b50\u7a0b\u5e8f\u7684\u80fd\u529b\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u56e0\u4e3a\u6574\u4e2a\u865a\u62df\u673a\u53ca\u8fd0\u884c\u5728\u5176\u4e0a\u9762\u7684\u6240\u6709\u7684\u7a0b\u5e8f\u90fd\u662f\u5728\u4e00\u4e2a\u5185\u5b58\u73af\u5883\u4e2d\uff0c\u6240\u4ee5\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u9694\u79bb\u65e0\u6cd5\u63d0\u4f9b\u4fdd\u62a4\uff0c\u865a\u62df\u673a\u5f80\u5f80\u9700\u8981\u6a21\u62df\u64cd\u4f5c\u7cfb\u7edf\u7684\u67d0\u4e9b\u673a\u5236\u6765\u5b9e\u73b0\u5e94\u7528\u5185\u7684\u5185\u5b58\u9694\u79bb\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u865a\u62df\u673a\u4e0a\u7684\u6bcf\u4e2a\u5b50\u7a0b\u5e8f\u6765\u8bb2\uff0c\u865a\u62df\u673a\u73af\u5883\u672c\u8eab\u6709\u70b9\u7c7b\u4f3c\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u6982\u5ff5\u4e86\u3002")),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u5206\u6790\u53ef\u4ee5\u770b\u51fa\uff0c\u8fc7\u53bb\u51e0\u5341\u5e74\u8ba1\u7b97\u673a\u8f6f\u4ef6\u6784\u9020\u7684\u53d1\u5c55\u5386\u53f2\uff0c\u9010\u6e10\u5f62\u6210\u8fd9\u79cd\u64cd\u4f5c\u7cfb\u7edf\u4e0e\u7f16\u7a0b\u6a21\u578b\u7684\u5206\u5de5\u534f\u4f5c\uff0c\u4e5f\u662f\u4e00\u79cd\u786c\u4ef6\u4e0a\u7684\u62bd\u8c61\uff0c\u5728\u8fd9\u79cd\u62bd\u8c61\u6a21\u578b\u4e2d\uff0c\u786c\u4ef6\u6216\u64cd\u4f5c\u7cfb\u7edf\u53ea\u9700\u8981\u63d0\u4f9b\u5982\u6587\u4ef6\u6216\u5185\u5b58\u7ea7\u522b\u7684\u5b89\u5168\u8bbf\u95ee\u673a\u5236\uff0c\u800c\u4e0d\u9700\u8981\u5173\u6ce8\u5e94\u7528\u5b9e\u9645\u7684\u6570\u636e\u548c\u6570\u636e\u7ed3\u6784\uff0c\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\uff1b\u800c\u5bf9\u4e8e\u5e94\u7528\u7a0b\u5e8f\uff0c\u7531\u4e8e\u786c\u4ef6\u6216\u64cd\u4f5c\u7cfb\u7edf\u5df2\u7ecf\u4fdd\u8bc1\u4e86\u6570\u636e\u4e0d\u4f1a\u88ab\u5176\u5b83\u7a0b\u5e8f\u975e\u6cd5\u8bbf\u95ee\uff0c\u90a3\u4e48\u6574\u4e2a\u7f16\u7a0b\u6a21\u578b\u6d89\u53ca\u7684\u673a\u5236\u53ea\u9700\u8981\u8003\u8651\u5e94\u7528\u4e1a\u52a1\u903b\u8f91\u7684\u6784\u9020\uff0c\u800c\u4e0d\u9700\u8981\u8003\u8651\u6570\u636e\u7684\u8bbf\u95ee\u5b89\u5168\uff0c\u5e76\u4e14\u73b0\u4ee3\u7f16\u7a0b\u6a21\u578b\u57fa\u672c\u4e0a\u90fd\u57fa\u4e8e\u4e00\u4e2a\u5047\u8bbe\uff1a\u5373\u4ee3\u7801\u53ef\u4ee5\u8bbf\u95ee\u8be5\u5e94\u7528\u7a0b\u5e8f\u5185\u7684\u4efb\u4f55\u8d44\u6e90\uff0c\u53ea\u8981\u5b83\u80fd\u83b7\u53d6\u5230\u76f8\u5e94\u7684\u5185\u5b58\u5730\u5740\uff0c\u4f8b\u5982\u5728C++\u4ee3\u7801\u4e2d\uff0c\u4e00\u4e2a\u6307\u9488\u53ef\u4ee5\u6307\u5411\u548c\u8bbf\u95ee\u4efb\u610f\u5e94\u7528\u7a0b\u5e8f\u5185\u90e8\u7684\u5185\u5b58\u5730\u5740\uff0c\u5373\u4f7f\u662f\u90a3\u4e9b\u4e0d\u80fd\u4f7f\u7528\u6307\u9488\u7684\u811a\u672c\u7f16\u7a0b\u8bed\u8a00\uff0c\u5b83\u4eec\u7684\u6838\u5fc3\u4e5f\u4e3b\u8981\u662f\u5728\u5e2e\u52a9\u7b80\u5316\u5185\u5b58\u7ba1\u7406\uff0c\u800c\u4e0d\u662f\u963b\u6b62\u5bf9\u5e94\u7528\u7a0b\u5e8f\u5185\u4efb\u610f\u6570\u636e\u7684\u8bbf\u95ee\uff0c\u4f8b\u5982\u4e00\u4e2a\u5bf9\u8c61\u7684\u5f15\u7528\u4f60\u53ef\u4ee5\u4f20\u9012\u7ed9\u4efb\u4f55\u53d8\u91cf\u4ece\u800c\u88ab\u4f7f\u7528\u3002"),(0,a.kt)("p",null,"\u8fc7\u53bb\u51e0\u5341\u5e74\uff0c\u8fd9\u4e00\u5957\u673a\u5236\u8fd0\u8f6c\u826f\u597d\uff0c\u4e5f\u4f53\u73b0\u51fa\u8fd9\u79cd\u62bd\u8c61\u5e26\u6765\u7684\u9ad8\u6548\u7387\u3002\u4f46\u662f\u8fd9\u79cd\u62bd\u8c61\u53ea\u8003\u8651\u4e00\u4e2a\u7a0b\u5e8f\u53ca\u5176\u7a0b\u5e8f\u7684\u6267\u884c\uff0c\u800c\u6ca1\u6709\u8003\u8651\u7a0b\u5e8f\u5185\u90e8\u6570\u636e\u5bf9\u4e8e\u7528\u6237\u7684\u610f\u4e49\u3002\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e2d\uff0c\u8f6f\u4ef6\u4e3b\u8981\u662f\u4f5c\u4e3a\u4e00\u79cd\u5355\u4e00\u7684\u529f\u80fd\u4f7f\u7528\uff0c\u8fd9\u79cd\u529f\u80fd\u5f88\u5c11\u6d89\u53ca\u9700\u8981\u8ddf\u5916\u90e8\u4ea4\u4e92\uff0c\u5b83\u4eec\u6574\u4f53\u5728\u5185\u90e8\u662f\u81ea\u6d3d\u7684\uff0c\u5982\u679c\u7528\u6237\u9700\u8981\u53e6\u4e00\u4e2a\u529f\u80fd\uff0cTA\u5c31\u53bb\u6253\u5f00\u4f7f\u7528\u53e6\u4e00\u4e2a\u8f6f\u4ef6\u5c31\u597d\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u8fd1\u51e0\u5e74\u968f\u7740Web 3.0\u3001\u5143\u5b87\u5b99\u548c\u591a\u667a\u80fd\u4f53\u7c7b\u5e94\u7528\u7684\u51fa\u73b0\uff0c\u8fd9\u4e9b\u5e94\u7528\u8d8a\u6765\u8d8a\u51f8\u663e\u51fa\u76f8\u4e92\u4ea4\u4e92\u548c\u534f\u4f5c\u7684\u7279\u6027\u548c\u9700\u6c42\uff0c\u8fd9\u8ddf\u6211\u4eec\u4f20\u7edf\u7684\u5e94\u7528\u6784\u6210\u6a21\u578b\u662f\u76f8\u6096\u7684\uff0c\u6570\u636e\u9694\u79bb\u5c31\u5931\u53bb\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u5c3d\u7ba1\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u673a\u5236\u53bb\u63d0\u4f9b\u4e00\u4e9b\u63a5\u53e3\u8ba9\u5176\u5b83\u5e94\u7528\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u4f46\u662f\u8fd9\u4e9b\u673a\u5236\u67b6\u6784\u901a\u5e38\u90fd\u5f88\u590d\u6742\u3001\u4e0d\u53ef\u6269\u5c55\u3001\u6548\u7387\u4f4e\u4e0b\u3002"),(0,a.kt)("p",null,"\u56e0\u6b64\uff0c\u6216\u8bb8\u6211\u4eec\u5e94\u8be5\u50cf\u533a\u5757\u94fe\u7cfb\u7edf\u4e00\u6837\uff0c\u5efa\u7acb\u4e00\u5c42\u6570\u636e\u62bd\u8c61\u3002\u5b83\u53ef\u4ee5\u5e26\u6765\u5929\u751f\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u540c\u65f6\u540e\u9762\u6211\u4eec\u5c06\u770b\u5230\uff0c\u8fd9\u6837\u7684\u67b6\u6784\u8c03\u6574\u8fd8\u53ef\u4ee5\u5e26\u6765\u5f88\u591a\u65b0\u7684\u8ba1\u7b97\u7279\u6027\u3002\u4f46\u662f\u9996\u5148\u6765\u770b\u5c06\u6570\u636e\u4e0e\u5e94\u7528\u7a0b\u5e8f\u5206\u79bb\u4e4b\u540e\u600e\u6837\u4fdd\u8bc1\u6570\u636e\u7684\u5b89\u5168\u3002"),(0,a.kt)("h5",{id:"\u5b89\u5168"},"\u5b89\u5168"),(0,a.kt)("p",null,"\u5c06\u6570\u636e\u5b58\u50a8\u5728\u5e94\u7528\u7a0b\u5e8f\u4e4b\u5916\u7684\u5730\u65b9\uff0c\u5c31\u5931\u53bb\u4e86\u786c\u4ef6\u548c\u64cd\u4f5c\u7cfb\u7edf\u7684\u4fdd\u62a4\uff0c\u90a3\u4e48\u5e73\u53f0\u6216\u8005\u5e94\u7528\u7a0b\u5e8f\u5c31\u5fc5\u987b\u989d\u5916\u63d0\u4f9b\u4fdd\u62a4\u673a\u5236\u3002\u8fd9\u65b9\u9762\u6211\u4eec\u4e5f\u53ef\u4ee5\u4ece\u533a\u5757\u94fe\u7cfb\u7edf\u5f97\u5230\u4e00\u4e9b\u542f\u793a\uff0c\u518d\u7ed3\u5408\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u6280\u672f\u7684\u4e00\u4e9b\u53d1\u5c55\uff0c\u627e\u5230\u4e00\u4e2a\u5408\u9002\u7684\u6280\u672f\u65b9\u5411\u3002"),(0,a.kt)("p",null,"\u4e0d\u8003\u8651\u5206\u5e03\u5f0f\u73af\u5883\uff0c\u4ec5\u8003\u8651\u5355\u4e2a\u865a\u62df\u673a\uff0c\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u533a\u5757\u94fe\u8ba1\u7b97\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a\u9996\u5148\u865a\u62df\u673a\u4ece\u5916\u90e8\u73af\u5883\u4e2d\u83b7\u53d6\u5230\u7528\u6237\u8d26\u672c\uff0c\u7136\u540e\u57fa\u4e8e\u7528\u6237\u6388\u6743\u6267\u884c\u9a8c\u8bc1\u8ba1\u7b97\uff0c\u9a8c\u8bc1\u901a\u8fc7\u5219\u6267\u884c\u5177\u4f53\u7684\u4ea4\u6613\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e09\u90e8\u5206\u5206\u522b\u770b\u4f5c\u6570\u636e\u3001\u865a\u62df\u673a\u548c\u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u4e0b\u56fe\uff08b\uff09\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image-20230901145523283",src:l(3459).Z,width:"816",height:"218"})),(0,a.kt)("p",null,"\u9996\u5148\u6570\u636e\u5b58\u50a8\u5728\u5e94\u7528\u7a0b\u5e8f\u7684\u5916\u90e8\uff0c\u4ece\u524d\u9762\u6570\u636e\u90e8\u5206\u7684\u5206\u6790\u4e5f\u53ef\u4ee5\u770b\u51fa\uff0c\u6240\u4ee5\u5728\u7a0b\u5e8f\u8fd0\u884c\u7684\u65f6\u5019\u5c31\u6d89\u53ca\u5230\u4e00\u4e2a\u6570\u636e\u7684\u4f20\u8f93\u8fc7\u7a0b\u3002\u5173\u4e8e\u7f51\u7edc\u4f20\u8f93\u7684\u5b89\u5168\u6027\uff0c\u6211\u4eec\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u5e74\u7684\u8f6f\u4ef6\u5de5\u7a0b\u5b9e\u8df5\uff0c\u8fd9\u5757\u5e76\u4e0d\u4f1a\u5e26\u6765\u5f88\u5927\u7684\u95ee\u9898\u3002\u800c\u5b9e\u9645\u4e0a\uff0c\u6bd4\u5982\u5728\u79fb\u52a8\u7aef\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u7684\u6570\u636e\u5927\u90e8\u5206\u662f\u5b58\u50a8\u5728\u672c\u5730\u7684\uff0c\u8fd9\u5e76\u4e0d\u9700\u8981\u7ecf\u8fc7\u7f51\u7edc\u4f20\u8f93\uff0c\u5b9e\u9645\u4e0a\u6574\u4e2a\u7cfb\u7edf\u53ea\u6709\u9700\u8981\u4e0e\u5176\u5b83\u7528\u6237\u8fdb\u884c\u4ea4\u4e92\u7684\u6570\u636e\u624d\u4f1a\u8fdb\u884c\u7f51\u7edc\u4f20\u8f93\u3002"),(0,a.kt)("p",null,"\u5f53\u6570\u636e\u5230\u8fbe\u672c\u5730\u865a\u62df\u673a\u65f6\uff0c\u865a\u62df\u673a\u9996\u5148\u6267\u884c\u6743\u9650\u8ba1\u7b97\uff0c\u7136\u540e\u518d\u51b3\u5b9a\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u662f\u5426\u53ef\u4ee5\u83b7\u53d6\u8fd9\u4e2a\u6570\u636e\u4ee5\u6267\u884c\u67d0\u79cd\u8ba1\u7b97\u3002\u8fd9\u91cc\u7531\u4e8e\u865a\u62df\u673a\u5df2\u77e5\u7528\u6237\u7684\u6570\u636e\u7c7b\u578b\uff0c\u6240\u4ee5\u5b83\u80fd\u591f\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7ba1\u7406\uff0c\u7528\u6237\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u5bf9\u6bcf\u79cd\u8bed\u4e49\u6570\u636e\u5bf9\u6bcf\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u6388\u6743\uff0c\u53ea\u6709\u76f8\u5e94\u7c7b\u578b\u88ab\u6388\u6743\u7684\u5e94\u7528\u624d\u53ef\u4ee5\u8bbf\u95ee\u5230\u5bf9\u5e94\u7c7b\u578b\u7684\u6570\u636e\u3002\u6240\u4ee5\u8fd9\u91cc\u865a\u62df\u673a\u5b8c\u5168\u53ef\u4ee5\u6267\u884c\u6574\u4e2a\u6388\u6743\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u968f\u540e\uff0c\u88ab\u6388\u6743\u7684\u5e94\u7528\u6700\u7ec8\u53ef\u4ee5\u83b7\u53d6\u5230\u6570\u636e\u6267\u884c\u67d0\u4e2a\u903b\u8f91\u8ba1\u7b97\u3002\u5c3d\u7ba1\u6570\u636e\u9700\u8981\u6267\u884c\u6743\u9650\u8ba1\u7b97\uff0c\u4f46\u662f\u5e94\u7528\u7a0b\u5e8f\u5bf9\u8fd9\u79cd\u8ba1\u7b97\u5e76\u65e0\u611f\u77e5\uff0c\u5b83\u8fd8\u662f\u50cf\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u4e00\u6837\u8fdb\u884c\u5f00\u53d1\uff0c\u4f8b\u5982\u5b83\u58f0\u660e\u9700\u8981\u8bbf\u95ee\u67d0\u4e2a\u6570\u636e\uff0c\u5982\u679c\u8fd9\u4e2a\u6570\u636e\u6ca1\u6709\u88ab\u6388\u6743\uff0c\u5b83\u6839\u672c\u5c31\u4e0d\u4f1a\u88ab\u8c03\u7528\u6267\u884c\uff1b\u5982\u679c\u6570\u636e\u88ab\u5408\u6cd5\u6388\u6743\uff0c\u5219\u5b83\u7684\u8ba1\u7b97\u8fc7\u7a0b\u8ddf\u4f20\u7edf\u7684\u8ba1\u7b97\u662f\u4e00\u6837\u7684\u3002\u6574\u4e2a\u6388\u6743\u7684\u884c\u4e3a\u5bf9\u5e94\u7528\u7a0b\u5e8f\u662f\u900f\u660e\u7684\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u6570\u636e\u53ca\u5176\u5b89\u5168\u7684\u62bd\u8c61\uff0c\u4f7f\u5f97\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u8fd8\u662f\u5229\u7528\u5b8c\u6574\u7684\u4f20\u7edf\u5e94\u7528\u5f00\u53d1\u6d41\u7a0b\uff0c\u4fdd\u8bc1\u5bf9\u5f00\u53d1\u8005\u6d41\u7a0b\u548c\u4e60\u60ef\u7684\u5f71\u54cd\u5e26\u6765\u65b0\u7684\u5b66\u4e60\u6210\u672c\u548c\u601d\u7ef4\u6a21\u5f0f\u8f6c\u53d8\u3002\u800c\u8fd9\u91cc\u7684\u865a\u62df\u673a\u5219\u4ec5\u6709\u5e73\u53f0\u8fdb\u884c\u5f00\u53d1\u5373\u53ef\u3002"),(0,a.kt)("p",null,"\u5bf9\u4e8e\u865a\u62df\u673a\u7684\u5b89\u5168\u90e8\u5206\uff0c\u4f20\u7edf\u7684\u4e00\u4e9b\u865a\u62df\u673a\u6280\u672f\u5982Java\u3001Web Assembly\u7b49\u5df2\u7ecf\u6709\u4e86\u5f88\u591a\u7684\u5b9e\u8df5\u53ef\u4ee5\u501f\u9274\u3002\u672c\u6587\u540e\u9762\u4e5f\u4f1a\u63d0\u51fa\u4e00\u4e9b\u65b0\u7684\u8c03\u6574\u601d\u8def\uff0c\u4ee5\u89e3\u51b3\u4e00\u4e9b\u65b0\u7684\u95ee\u9898\u548c\u65b0\u7684\u601d\u8003\u3002"),(0,a.kt)("h4",{id:"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027"},"\u6570\u636e\u62bd\u8c61\u5e26\u6765\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("p",null,"Reality World\u663e\u7136\u4e0d\u662f\u4e00\u4e2a\u533a\u5757\u94fe\u7684\u67b6\u6784\uff0c\u6bd4\u5982\u6211\u4eec\u6bcf\u4e2a\u5e94\u7528\u7684\u4e3b\u4f53\u903b\u8f91\u8ba1\u7b97\u4e3b\u8981\u8fd8\u662f\u5728\u5355\u673a\u4e0a\u8ba1\u7b97\uff0c\u5c31\u50cf\u4f20\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u4e00\u6837\uff0c\u4f46\u662f\u5b83\u4ece\u533a\u5757\u94fe\u80cc\u540e\u7684\u6280\u672f\u4f53\u7cfb\u4e2d\u63d0\u53d6\u4e2d\u4e86\u4e00\u79cd\u5f88\u6709\u4ef7\u503c\u7684\u601d\u60f3\u3002\u8fd9\u79cd\u601d\u60f3\u6765\u6e90\u4e8e\u533a\u5757\u94fe\u6838\u5fc3\u7684\u5171\u8bc6\u673a\u5236\uff0c\u5373\u5b83\u9700\u8981\u5728\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u7684\u6240\u6709\u865a\u62df\u673a\u4e0a\u6267\u884c\u76f8\u540c\u7684\u8ba1\u7b97\u6765\u8fbe\u6210\u5171\u8bc6\uff0c\u8fd9\u5c31\u8981\u6c42\u865a\u62df\u673a\u4e0a\u6bcf\u6b21\u8ba1\u7b97\u7684\u8f93\u5165\u6570\u636e\uff0c\u5373\u6267\u884c\u4ea4\u6613\u7684\u4e24\u4e2a\u7528\u6237\u7684\u8d26\u672c\u6570\u636e\uff0c\u9996\u5148\u5fc5\u987b\u5bf9\u6bcf\u4e2a\u865a\u62df\u673a\u662f\u516c\u5f00\u7684\uff0c\u8fd9\u6837\u5b83\u4eec\u624d\u80fd\u987a\u5229\u5730\u83b7\u53d6\u5230\u6570\u636e\uff0c\u4e5f\u5373\u662f\u53ef\u4ee5\u4e92\u64cd\u4f5c\u3002\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u667a\u6167\u548c\u5de7\u5999\u7684\u601d\u60f3\uff0c\u4efb\u4f55\u5c1d\u8bd5\u50cf\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u90a3\u6837\u628a\u6570\u636e\u653e\u5728\u4e00\u4e2a\u53d7\u4fdd\u62a4\u7684\u5730\u65b9\uff0c\u7136\u540e\u901a\u8fc7\u5b9a\u4e49API\u7b49\u7b49\u65b9\u5f0f\u63d0\u4f9b\u8bbf\u95ee\u90fd\u4f1a\u5e26\u6765\u5de8\u5927\u7684\u8f6f\u4ef6\u67b6\u6784\u4e0a\u7684\u590d\u6742\u6027\uff0c\u6bd4\u5982\u4f60\u7684\u7f16\u89e3\u7801\u65b9\u5f0f\u3001\u4f20\u8f93\u5185\u5bb9\u7684\u683c\u5f0f\u90fd\u9700\u8981\u4e24\u8fb9\u8fdb\u884c\u5f88\u591a\u914d\u5408\uff0c\u5e26\u6765\u5f88\u591a\u7684\u788e\u7247\u5316\u3002\u540c\u65f6\uff0c\u6570\u636e\u7684\u89e3\u7801\u4e00\u5b9a\u4e0d\u80fd\u5728\u5ba2\u6237\u5e94\u7528\u7a0b\u5e8f\u5185\u53d1\u751f\uff0c\u8fd9\u6837\u5ba2\u6237\u7a0b\u5e8f\u5c31\u59cb\u7ec8\u4f1a\u62ff\u5230\u6570\u636e\uff0c\u8fdb\u884c\u4e0d\u53ef\u80fd\u9884\u671f\u7684\u64cd\u4f5c\uff0c\u89e3\u7801\u64cd\u4f5c\u5fc5\u987b\u53d1\u751f\u5728\u5e73\u53f0\u3002\u5982\u679c\u89e3\u7801\u64cd\u4f5c\u53d1\u751f\u5728\u5e73\u53f0\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u8bbe\u7f6e\u590d\u6742\u7684\u6570\u636e\u4fdd\u62a4\u63aa\u65bd\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u7684\u5b58\u50a8\u4ee5\u53ca\u89e3\u7801\u7684\u8fc7\u7a0b\uff0c\u542f\u793a\u5c31\u53d1\u751f\u5728\u5e73\u53f0\u5185\u90e8\uff0c\u5bf9\u5ba2\u6237\u5e94\u7528\u7a0b\u5e8f\u662f\u4e0d\u53ef\u89c1\u7684\u3002"),(0,a.kt)("p",null,"\u6570\u636e\u53ef\u80fd\u4e0d\u91cd\u8981\uff0c\u6240\u6709\u6743\u624d\u662f\u6700\u91cd\u8981\u7684\uff0c\u8fd9\u662f\u533a\u5757\u94fe\u601d\u60f3\u5bf9\u4e8e\u4f20\u7edf\u5e94\u7528\u67b6\u6784\u7684\u4e0d\u540c\u89c6\u89d2\uff0c\u5b83\u5e26\u6765\u4e86\u65b0\u7684\u5e94\u7528\u5f62\u6001\u548c\u4f53\u9a8c\uff0c\u4e0e\u4e4b\u540c\u65f6\u4e5f\u5e26\u6765\u4e86\u65b0\u7684\u8f6f\u4ef6\u67b6\u6784\u601d\u60f3\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u533a\u5757\u94fe\u5e76\u6ca1\u6709\u5f88\u5f3a\u8c03\u4e92\u64cd\u4f5c\u6027\uff0c\u56e0\u4e3a\u5b83\u7684\u683c\u5f0f\u548c\u7cfb\u7edf\u8db3\u591f\u7b80\u5355\uff0c\u4f46\u6211\u4eec\u5c1d\u8bd5\u628a\u8fd9\u79cd\u601d\u60f3\u5f80\u901a\u7528\u8ba1\u7b97\u4e0a\u53bb\u601d\u8003\u7684\u65f6\u5019\uff0c\u5b83\u5c31\u4f1a\u6f14\u53d8\u6210\u4e92\u64cd\u4f5c\u6027\u7684\u6982\u5ff5\uff0c\u60f3\u60f3\u4f60\u5728\u533a\u5757\u94fe\u7684\u865a\u62df\u673a\u4e0a\u600e\u6837\u89e3\u6790\u7528\u6237\u7684\u53e6\u4e00\u4e2a\u975e\u8d26\u672c\u7684\u590d\u6742\u6570\u636e\u7ed3\u6784\uff1f"),(0,a.kt)("p",null,"\u8fd9\u79cd\u4ece\u4e92\u64cd\u4f5c\u6027\u7684\u89d2\u5ea6\u53bb\u601d\u8003\u533a\u5757\u94fe\uff0c\u4ee5\u53ca\u4ece\u4e2d\u5f97\u5230\u5bf9\u8f6f\u4ef6\u67b6\u6784\u7684\u542f\u793a\uff0c\u5b83\u4e3a\u672a\u6765\u7684\u6570\u5b57\u4e16\u754c\u8f6f\u4ef6\u67b6\u6784\u5e26\u6765\u4e86\u5168\u65b0\u7684\u4e16\u754c\u548c\u53ef\u80fd\u6027\u3002\u5b83\u751a\u81f3\u6253\u7834\u4e86\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u51e0\u5341\u5e74\u53d1\u5c55\u7684\u601d\u7ef4\uff0c\u672a\u6765\u7684\u6570\u5b57\u4e16\u754c\u4f1a\u56e0\u4e3a\u4e92\u64cd\u4f5c\u6027\u5448\u73b0\u5b8c\u5168\u4e0d\u80fd\u7684\u80fd\u529b\u548c\u5f62\u6001\u3002\u4ece\u540e\u9762\u7684\u5185\u5bb9\u4f1a\u65e0\u5904\u4e0d\u5728\u5730\u770b\u5230\u8fd9\u79cd\u4e92\u64cd\u4f5c\u6027\u5e26\u6765\u7684\u5404\u79cd\u65b0\u7684\u53ef\u80fd\u6027\u3002"),(0,a.kt)("p",null,"\u66f4\u91cd\u8981\u7684\u662f\uff0c\u6211\u8ba4\u4e3a\u8fd9\u662f\u672a\u6765\u5b9e\u73b0\u66f4\u52a0\u667a\u80fd\u6570\u5b57\u4e16\u754c\u7684\u57fa\u7840\uff0c\u5373\u6570\u5b57\u8fdb\u5316\u3002"),(0,a.kt)("h3",{id:"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784"},"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u67b6\u6784"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u8ba8\u8bba\u4e86\u5728\u4e00\u4e2a\u591a\u5e94\u7528\u7a0b\u5e8f\u73af\u5883\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u601d\u60f3\u548c\u673a\u5236\uff0c\u5373\u7cfb\u7edf\u67b6\u6784\u7684\u5916\u5728\u7ed3\u6784\u3002\u672c\u8282\u6211\u4eec\u5173\u6ce8\u7684\u5185\u5bb9\u662f\u7cfb\u7edf\u5185\u90e8\u903b\u8f91\u7684\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u5373\u5185\u5728\u7ed3\u6784\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u89c6\u89d2\uff0c\u8fd9\u4e24\u4e2a\u89c6\u89d2\u90fd\u6765\u6e90\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u5927\u89c4\u6a21\u590d\u6742\u7cfb\u7edf\u5185\u90e8\u7684\u4ea4\u4e92\u548c\u903b\u8f91\u7ec4\u7ec7\u95ee\u9898"),(0,a.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\u600e\u6837\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u6d8c\u73b0\u673a\u5236\u4ea7\u751f\u66f4\u52a0\u667a\u80fd\u7684\u6570\u5b57\u4e16\u754c")),(0,a.kt)("p",null,"\u8fd9\u4e24\u4e2a\u89c6\u89d2\u5c06\u4f1a\u8ba9\u6211\u4eec\u91cd\u65b0\u53bb\u5ba1\u89c6\u8fc7\u53bb\u51e0\u5341\u5e74\u6765\u5f62\u6210\u7684\u8f6f\u4ef6\u67b6\u6784\u53ca\u5176\u7f16\u7a0b\u6a21\u578b\u7684\u601d\u60f3\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u628a\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u7406\u8bba\u548c\u601d\u60f3\u5f15\u5165\u5230\u8f6f\u4ef6\u67b6\u6784\u4e2d\uff0c\u4ece\u800c\u5f62\u6210\u4e00\u5957\u5f00\u53d1\u5177\u6709\u590d\u6742\u4ea4\u4e92\u7684\u8f6f\u4ef6\u67b6\u6784\u65b9\u6cd5\u548c\u903b\u8f91\uff0c\u66f4\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u79cd\u65b0\u7684\u89c6\u89d2\u53ef\u80fd\u6709\u52a9\u4e8e\u672a\u6765\u6211\u4eec\u5f00\u53d1\u51fa\u66f4\u667a\u80fd\u3001\u66f4\u4e30\u5bcc\u7684\u3001\u66f4\u590d\u6742\u7684\u6570\u5b57\u4e16\u754c\u4f53\u9a8c\u3002"),(0,a.kt)("h4",{id:"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2"},"\u6e38\u620f\u7684\u590d\u6742\u7cfb\u7edf\u89c6\u89d2"),(0,a.kt)("p",null,"\u4e0a\u4e00\u8282\u6211\u4eec\u5206\u6790\u4e86\uff0c\u73b0\u4ee3\u8f6f\u4ef6\u5f00\u53d1\u7684\u5176\u4e2d\u4e00\u4e2a\u57fa\u672c\u7684\u5047\u8bbe\u662f\u7a0b\u5e8f\u6240\u6709\u7684\u6570\u636e\u548c\u4ee3\u7801\u90fd\u662f\u53d7\u7a0b\u5e8f\u5f00\u53d1\u8005\u63a7\u5236\u7684\uff0c\u8fd9\u5e26\u6765\u4e86\u4e2d\u5fc3\u5316\u7684\u8f6f\u4ef6\u6cbb\u7406\u6a21\u5f0f\uff0c\u8fdb\u800c\u5f62\u6210\u4e2d\u5fc3\u5316\u7684\u6570\u5b57\u751f\u6001\u3002\u4e2d\u5fc3\u5316\u6709\u6548\u7387\u7684\u4f18\u52bf\uff0c\u53bb\u4e2d\u5fc3\u5316\u6709\u6570\u636e\u5b89\u5168\u7684\u4f18\u52bf\uff0c\u6211\u4eec\u5219\u4ece\u4e24\u8005\u4e2d\u505a\u51fa\u4e00\u4e9b\u67b6\u6784\u8c03\u6574\u5f62\u6210\u4e00\u5957\u96c6\u4e24\u79cd\u4f18\u52bf\u7684\u67b6\u6784\u3002"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u5c06\u5206\u6790\u4f20\u7edf\u8f6f\u4ef6\u67b6\u6784\u7684\u53e6\u4e00\u4e2a\u673a\u5236\u7684\u7f3a\u9677\u53ca\u5176\u5e26\u6765\u7684\u5f71\u54cd\u3002"),(0,a.kt)("p",null,"\u5728\u73b0\u4ee3\u7684\u7f16\u7a0b\u6a21\u578b\u4e2d\uff0c\u4e0d\u7ba1\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\u5bf9\u786c\u4ef6\u7684\u62bd\u8c61\u5ea6\u5982\u4f55\uff0c\u6574\u4e2a\u7a0b\u5e8f\u6700\u540e\u8981\u88ab\u786c\u4ef6\u6267\u884c\uff0c\u90fd\u4f1a\u88ab\u7f16\u8bd1\u6216\u89e3\u91ca\u6210\u8fd9\u6837\u4e00\u4e2a\u673a\u5668\u7801\u6216\u5b57\u8282\u7801\u7684\u5b57\u7b26\u6307\u4ee4\u96c6\u5408\uff0c\u8fd9\u4e9b\u6307\u4ee4\u4e00\u822c\u7531\u64cd\u4f5c\u7b26\u548c\u64cd\u4f5c\u6570\u7ec4\u6210\uff0c\u64cd\u4f5c\u7b26\u662f\u5176\u8ba1\u7b97\u5e73\u53f0\u652f\u6301\u7684\u8ba1\u7b97\u7c7b\u578b\uff0c\u800c\u64cd\u4f5c\u6570\u5927\u90e8\u5206\u662f\u6d89\u53ca\u5230\u786c\u4ef6\u7684\u5730\u5740\u7684\uff0c\u4e00\u4e2a\u7a0b\u5e8f\u901a\u5e38\u5305\u542b\u4e09\u7c7b\u5730\u5740\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5bc4\u5b58\u5668"),(0,a.kt)("li",{parentName:"ul"},"\u5185\u5b58\u5730\u5740"),(0,a.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u673a\u5668\u7801\u4e2d\u7684\u4ee3\u7801\u5730\u5740")),(0,a.kt)("p",null,"\u8fd9\u5176\u4e2d\u5bc4\u5b58\u5668\u5730\u5740\u5927\u90e8\u5206\u662f\u7531\u7f16\u8bd1\u5668\u6765\u5206\u914d\u7684\uff0c\u800c\u5185\u5b58\u5730\u5740\u548c\u4ee3\u7801\u5730\u5740\u5219\u662f\u548c\u7a0b\u5e8f\u7684\u7ed3\u6784\u6709\u4e00\u5b9a\u7684\u5173\u7cfb\u3002\u5176\u4e2d\u5185\u5b58\u5730\u5740\u901a\u5e38\u662f\u6211\u4eec\u7a0b\u5e8f\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u521b\u5efa\u7684\u6570\u636e\u5bf9\u8c61\u5728\u5185\u5b58\u4e2d\u7684\u5730\u5740\uff0c\u7136\u540e\u5176\u5b83\u4e00\u4e9b\u9700\u8981\u8bbf\u95ee\u8fd9\u4e2a\u5bf9\u8c61\u7684\u6307\u4ee4\u901a\u5e38\u5c31\u9700\u8981\u6307\u5411\u8fd9\u4e9b\u5bf9\u8c61\u7684\u5730\u5740\uff1b\u800c\u4ee3\u7801\u5730\u5740\u5219\u901a\u5e38\u8ddf\u65b9\u6cd5\u8c03\u7528\u6709\u5173\uff0c\u6211\u4eec\u7f16\u5199\u7684\u4ee3\u7801\u6700\u540e\u4f1a\u88ab\u7f16\u8bd1\u4e3a\u4e00\u4e2a\u673a\u5668\u7801\u683c\u5f0f\u7684\u6570\u636e\u8868\u8ff0\uff0c\u7a0b\u5e8f\u8fd0\u884c\u542f\u52a8\u65f6\u5219\u4f1a\u9996\u5148\u5c06\u8fd9\u4e9b\u4ee3\u7801\u6570\u636e\u52a0\u8f7d\u5230\u4e00\u7247\u56fa\u5b9a\u7684\u5185\u5b58\u5730\u5740\uff0c\u540e\u7eed\u6240\u6709\u4ee3\u7801\u7684\u6267\u884c\u5b9e\u9645\u4e0a\u90fd\u662f\u9700\u8981\u9996\u5148\u4ece\u8fd9\u91cc\u83b7\u53d6\u4ee3\u7801\u6307\u4ee4\u7684\u6570\u636e\uff0c\u7136\u540e\u6839\u636e\u6307\u4ee4\u7684\u5b9a\u4e49\u6267\u884c\u8ba1\u7b97\uff0c\u7136\u800c\u5b9e\u9645\u4ee3\u7801\u7684\u6267\u884c\u5e76\u4e0d\u662f\u5b8c\u5168\u6309\u987a\u5e8f\u6267\u884c\u7684\uff0c\u6211\u4eec\u7684\u903b\u8f91\u4e2d\u5145\u6ee1\u5f88\u591a\u63a7\u5236\u6d41\uff0c\u4f8b\u5982\u4e00\u4e2a\u51fd\u6570\u9700\u8981\u8c03\u7528\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u8fd9\u4e2a\u65f6\u5019\u5c31\u9700\u8981\u9996\u5148\u5c06\u6307\u4ee4\u7684\u6307\u9488\u6307\u5411\u53e6\u4e00\u4e2a\u51fd\u6570\u7684\u5730\u5740\uff0c\u5e76\u5728\u6307\u5411\u5b8c\u6bd5\u4e4b\u540e\u8df3\u8f6c\u56de\u539f\u6765\u7684\u4f4d\u7f6e\u3002\u6240\u4ee5\u6211\u4eec\u7684\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u8fd8\u9700\u8981\u6839\u636e\u903b\u8f91\u63a7\u5236\u6d41\u5c06\u8fd9\u79cd\u4ee3\u7801\u5730\u5740\u7f16\u7801\u5728\u6307\u4ee4\u7684\u64cd\u4f5c\u6570\u4e2d\u3002\u6211\u4eec\u5c06\u5728\u540e\u7eed\u7684\u6280\u672f\u67b6\u6784\u90e8\u5206\u66f4\u8be6\u7ec6\u7684\u8ba8\u8bba\u8fd9\u4e2a\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u4e0a\u8ff0\u7684\u8fc7\u7a0b\u4e00\u822c\u4e3b\u8981\u662f\u7531\u7f16\u8bd1\u5668\u3001\u94fe\u63a5\u5668\u548c\u52a0\u8f7d\u5668\u6765\u534f\u540c\u5b8c\u6210\uff0c\u4f46\u662f\u4ece\u672c\u8d28\u4e0a\u6765\u8bf4\uff0c\u4e00\u53e5\u4ee3\u7801\u8981\u8bbf\u95ee\u90a3\u4e2a\u5bf9\u8c61\u7684\u5185\u5b58\u5730\u5740\uff0c\u4ee5\u53ca\u4e0b\u4e00\u4e2a\u8bed\u53e5\u8981\u8df3\u8f6c\u5230\u54ea\u4e00\u6761\u8bed\u53e5\uff0c\u8fd9\u5176\u5b9e\u662f\u5e94\u7528\u7684\u903b\u8f91\u89c4\u5219\uff0c\u56e0\u6b64\u8fd9\u4e9b\u903b\u8f91\u5b9a\u4e49\u662f\u7531\u7a0b\u5e8f\u5458\u6765\u5b9a\u4e49\u7684\uff0c\u7f16\u8bd1\u5668\u53ea\u4e0d\u8fc7\u662f\u6839\u636e\u7f16\u7a0b\u8bed\u8a00\u7684\u8bed\u6cd5\u63cf\u8ff0\uff0c\u5c06\u8fd9\u79cd\u7a0b\u5e8f\u5458\u5728\u7f16\u7a0b\u8bed\u8a00\u7ea7\u522b\u7684\u5b9a\u4e49\uff0c\u8f6c\u5316\u4e3a\u673a\u5668\u7ea7\u522b\u7684\u5b9a\u4e49\u3002"),(0,a.kt)("p",null,"\u6309\u7167\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u65b9\u6cd5\u5b9e\u8df5\uff0c\u8fd9\u91cc\u5c31\u4f1a\u51fa\u73b0\u4e24\u79cd\u95ee\u9898\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e00\u65e6\u67d0\u53e5\u4ee3\u7801\u8bbf\u95ee\u6307\u5411\u4e86\u67d0\u4e2a\u5bf9\u8c61\u5730\u5740\uff0c\u8fd9\u4e2a\u884c\u4e3a\u5c31\u4e0d\u5bb9\u6613\u4fee\u6539"),(0,a.kt)("li",{parentName:"ul"},"\u4e00\u65e6\u67d0\u4e2a\u8df3\u8f6c\u8bed\u53e5\u6307\u5411\u4e86\u67d0\u4e2a\u51fd\u6570\u7684\u5730\u5740\uff0c\u8fd9\u4e2a\u903b\u8f91\u6d41\u7a0b\u5c31\u4e0d\u5bb9\u6613\u8c03\u6574")),(0,a.kt)("p",null,"\u5c3d\u7ba1\u6211\u4eec\u6709\u5f88\u591a\u8f6f\u4ef6\u67b6\u6784\u5b9e\u8df5\u6765\u90e8\u5206\u7f13\u89e3\u4e0a\u8ff0\u4e24\u79cd\u60c5\u51b5\u5e26\u6765\u7684\u95ee\u9898\uff0c\u4f46\u901a\u5e38\u90fd\u6ca1\u6709\u7406\u60f3\u7684\u65b9\u6848\u3002\u8fd9\u9020\u6210\u7684\u4e00\u4e2a\u4e3b\u8981\u7ed3\u679c\u5c31\u662f\uff0c\u6211\u4eec\u7684\u7a0b\u5e8f\u4e00\u65e6\u5f00\u53d1\u7f16\u8bd1\u5b8c\u6210\uff0c\u5176\u884c\u4e3a\u5c31\u4e0d\u5bb9\u6613\u52a8\u6001\u8c03\u6574\u6216\u4fee\u6539\uff0c\u4e00\u65e6\u8fdb\u884c\u4fee\u6539\uff0c\u5219\u9700\u8981\u91cd\u65b0\u8fdb\u884c\u7f16\u8bd1\u53d1\u5e03\uff0c\u5e76\u8981\u6c42\u7528\u6237\u91cd\u65b0\u66f4\u65b0\u6574\u4e2a\u7a0b\u5e8f\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u6280\u672f\u5c42\u9762\u7684\u56e0\u7d20\u53cd\u6620\u5230\u7528\u6237\u4f53\u9a8c\u6216\u8005\u8f6f\u4ef6\u5f62\u6001\u5c42\u9762\uff0c\u5c31\u662f\u5f53\u524d\u7684\u8f6f\u4ef6\u5f62\u6001\u5927\u90e8\u5206\u90fd\u662f\u4e00\u79cd\u56fa\u5b9a\u7684\u5f62\u6001\uff0c\u6bcf\u4e2a\u8f6f\u4ef6\u7684\u529f\u80fd\u548c\u7ed3\u6784\u57fa\u672c\u4e0a\u90fd\u662f\u56fa\u5b9a\u7684\u3002\u4e0e\u8f6f\u4ef6\u7684\u6570\u636e\u548c\u4ee3\u7801\u8026\u5408\u5728\u4e00\u8d77\u5bfc\u81f4\u8f6f\u4ef6\u5931\u53bb\u4e92\u64cd\u4f5c\u6027\u7c7b\u4f3c\uff0c\u8f6f\u4ef6\u4e2d\u6570\u636e\u7684\u5730\u5740\u4e0e\u8f6f\u4ef6\u7ed3\u6784\u7684\u8026\u5408\u4f7f\u8f6f\u4ef6\u5931\u53bb\u4e86\u52a8\u6001\u6027\u3002\u5173\u4e8e\u8f6f\u4ef6\u7684\u52a8\u6001\u6027\u6709\u4e24\u4e2a\u65b9\u9762\u7684\u610f\u4e49\uff0c\u4e0b\u4e00\u8282\u6211\u4eec\u56de\u8ba8\u8bba\u52a8\u6001\u6027\u5bf9\u4e8e\u667a\u80fd\u8fdb\u5316\u7684\u610f\u4e49\uff0c\u672c\u8282\u6211\u4eec\u5148\u8ba8\u8bba\u52a8\u6001\u6027\u5bf9\u4e8e\u8f6f\u4ef6\u903b\u8f91\u6784\u9020\u7684\u610f\u4e49\u3002"),(0,a.kt)("h5",{id:"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784"},"\u590d\u6742\u7cfb\u7edf\u7ed3\u6784"),(0,a.kt)("p",null,"\u5982\u679c\u4e00\u4e2a\u8f6f\u4ef6\u7684\u4e1a\u52a1\u903b\u8f91\u662f\u76f8\u5bf9\u6bd4\u8f83\u786e\u5b9a\u4e14\u7b80\u5355\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u4f20\u7edf\u7684\u8f6f\u4ef6\u5f00\u53d1\u6a21\u5f0f\u662f\u53ef\u4ee5\u5f88\u597d\u5730\u5de5\u4f5c\u7684\uff0c\u6bd4\u5982\u770b\u770b\u6211\u4eec\u73b0\u5728\u624b\u673a\u4e0a\u5927\u90e8\u5206\u5e94\u7528\uff0c\u6bcf\u4e2a\u5e94\u7528\u5185\u90e8\u7684\u529f\u80fd\u76f8\u5bf9\u8fd8\u662f\u6bd4\u8f83\u7b80\u5355\u7684\uff0c\u5c3d\u7ba1\u6709\u6bd4\u5982\u9ad8\u5e76\u53d1\u7b49\u7c7b\u7684\u8f6f\u4ef6\u67b6\u6784\u95ee\u9898\uff0c\u4f46\u8fd9\u7c7b\u95ee\u9898\u8ddf\u590d\u6742\u5ea6\u672c\u8eab\u6ca1\u6709\u592a\u5927\u5173\u7cfb\uff0c\u66f4\u591a\u662f\u6280\u672f\u67b6\u6784\u7684\u95ee\u9898\u3002\u8fd9\u7c7b\u5e94\u7528\u7684\u7279\u5f81\u662f\u5176\u4e1a\u52a1\u903b\u8f91\u7684\u590d\u6742\u5ea6\u57fa\u672c\u5728\u4eba\u8111\u80fd\u591f\u7406\u89e3\u7684\u590d\u6742\u5ea6\u8303\u56f4\u4e4b\u7c7b\uff0c\u5185\u90e8\u5f00\u53d1\u4eba\u5458\u901a\u5e38\u4e0d\u9700\u8981\u592a\u590d\u6742\u7684\u63a8\u7406\u548c\u601d\u8003\u5c31\u80fd\u591f\u7406\u89e3\u8f6f\u4ef6\u5185\u90e8\u4e1a\u52a1\u7684\u6d41\u7a0b\u3001\u903b\u8f91\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u770b\u53e6\u4e00\u4e2a\u7c7b\u578b\u7684\u5e94\u7528\uff1a\u5373\u6e38\u620f\uff0c\u5219\u4e0d\u4e00\u6837\u3002\u6211\u4eec\u5728\u540e\u9762\u8fd8\u4f1a\u5206\u6790\u5f88\u591a\u6e38\u620f\u67b6\u6784\u7684\u7279\u5f81\uff0c\u4f46\u662f\u8fd9\u91cc\u5148\u91cd\u70b9\u5173\u6ce8\u5176\u4e2d\u4e00\u4e2a\u7279\u5f81\uff0c\u5373\u5b83\u7684\u4e1a\u52a1\u903b\u8f91\u7684\u590d\u6742\u5ea6\u3002\u603b\u4f53\u4e0a\u5b83\u7684\u590d\u6742\u5ea6\u76f8\u8f83\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u6709\u4e24\u4e2a\u7279\u70b9\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5b83\u7531\u975e\u5e38\u591a\u7684\u903b\u8f91\u5173\u7cfb\u6ca1\u6709\u90a3\u4e48\u6e05\u6670\u7684\u5b50\u7cfb\u7edf\u7ec4\u6210"),(0,a.kt)("li",{parentName:"ul"},"\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u5448\u73b0\u9ad8\u5ea6\u7684\u52a8\u6001\u6027\u548c\u5c40\u90e8\u6027")),(0,a.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u51e0\u4e4e\u5f88\u96be\u50cf\u4f20\u7edf\u7684\u8f6f\u4ef6\u90a3\u6837\u8fdb\u884c\u7f16\u7a0b\uff0c\u5b83\u6ca1\u6709\u6bd4\u8f83\u660e\u786e\u56fa\u5b9a\u7684\u903b\u8f91\u8bf4\u4ec0\u4e48\u6d41\u7a0b\u4e4b\u540e\u5c31\u4f1a\u6267\u884c\u53e6\u5916\u4e00\u4e2a\u6d41\u7a0b\uff0c\u5b83\u66f4\u591a\u662f\u6839\u636e\u5f88\u591a\u6765\u6e90\u4e0d\u540c\u7684\u6761\u4ef6\u6765\u51b3\u5b9a\u6267\u884c\u4ec0\u4e48\u6d41\u7a0b\uff1b\u5b83\u4e5f\u4e0d\u80fd\u5c06\u6307\u9488\u6307\u5411\u67d0\u4e9b\u56fa\u5b9a\u7684\u5185\u5b58\u5730\u5740\uff0c\u5b83\u6709\u5f88\u591a\u4e0d\u540c\u4e0d\u540c\u7684\u5bf9\u8c61\u5b9e\u4f8b\u9700\u8981\u6267\u884c\u76f8\u540c\u7684\u903b\u8f91\u3002\u603b\u4e4b\u8fd9\u79cd\u8f6f\u4ef6\u7684\u590d\u6742\u5ea6\u662f\u975e\u5e38\u9ad8\u7684\uff0c\u6211\u4eec\u901a\u5e38\u65e0\u6cd5\u5f88\u76f4\u89c2\u5730\u7528\u5927\u8111\u53bb\u601d\u8003\u5b83\u5185\u90e8\u7684\u4ea4\u4e92\u903b\u8f91\u3002"),(0,a.kt)("p",null,"\u5177\u6709\u8fd9\u6837\u7279\u5f81\u7684\u7cfb\u7edf\u901a\u5e38\u79f0\u4e3a\u590d\u6742\u7cfb\u7edf\uff0c\u5b9e\u9645\u4e0a\u5173\u4e8e\u6e38\u620f\u8bbe\u8ba1\u7684\u7406\u8bba\uff0c\u5927\u90e8\u5206\u90fd\u662f\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u601d\u7ef4\u6765\u601d\u8003\u7684\u3002\u524d\u9762\u6211\u4eec\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u590d\u6742\u7cfb\u7edf\u76f8\u5173\u7684\u57fa\u672c\u6982\u5ff5\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u53bb\u7406\u89e3\u5b83\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5185\u5728\u7ed3\u6784\uff0c\u5185\u5728\u7ed3\u6784\u901a\u5e38\u4fa7\u91cd\u5728\u63cf\u8ff0\u6784\u5efa\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u7684\u67b6\u6784\u601d\u7ef4\uff0c\u6bd4\u5982\u5b83\u4eec\u7684\u5b50\u7cfb\u7edf\u7684\u4ea4\u4e92\u673a\u5236\u662f\u600e\u6837\uff0c\u6574\u4e2a\u7cfb\u7edf\u662f\u600e\u4e48\u7ec4\u7ec7\u7684\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u5916\u5728\u7279\u5f81\uff0c\u5916\u5728\u7279\u5f81\u66f4\u5173\u6ce8\u7684\u662f\u89c2\u5bdf\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u4f1a\u5448\u73b0\u51fa\u4ec0\u4e48\u7279\u5f81\uff0c\u8fd9\u65b9\u9762\u901a\u5e38\u662f\u8bbe\u8ba1\u590d\u6742\u7cfb\u7edf\u7684\u7406\u8bba\uff0c\u56e0\u4e3a\u4e00\u822c\u7684\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u66f4\u504f\u91cd\u5bfb\u627e\u590d\u6742\u7cfb\u7edf\u7684\u539f\u7406\u800c\u4e0d\u662f\u5173\u6ce8\u5b83\u5185\u90e8\u7684\u7ed3\u6784\u3002")),(0,a.kt)("p",null,"\u6211\u4eec\u4e5f\u4ece\u8fd9\u4e24\u4e2a\u65b9\u9762\u6765\u601d\u8003\u8f6f\u4ef6\u67b6\u6784\uff0c\u9996\u5148\u8ba8\u8bba\u5b83\u7684\u5185\u5728\u7ed3\u6784\uff0c\u540e\u9762\u518d\u8ba8\u8bba\u5b83\u7684\u5916\u5728\u7279\u5f81\u3002"),(0,a.kt)("h5",{id:"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784"},"\u6e38\u620f\u4e2d\u7684\u7ec4\u5408\u67b6\u6784"),(0,a.kt)("p",null,"\u4e3a\u4e86\u89e3\u51b3\u7a0b\u5e8f\u903b\u8f91\u4e2d\u7684\u52a8\u6001\u6027\u7684\u95ee\u9898\uff0c\u4e00\u822c\u7684\u6e38\u620f\u5e94\u7528\u67b6\u6784\u90fd\u9009\u62e9\u4f7f\u7528\u975e\u5e38\u4e0d\u540c\u4e8e\u4f20\u7edf\u8f6f\u4ef6\u5f00\u53d1\u7684\u67b6\u6784\uff0c\u8fd9\u4e9b\u67b6\u6784\u5927\u90e8\u5206\u90fd\u6d89\u53ca\u7528\u67d0\u79cd\u5f62\u5f0f\u7684\u7ec4\u5408\u6765\u4ee3\u66ff\u7ee7\u627f\u3002\u8fd9\u5176\u4e2d\u4e0d\u5149\u662f\u7531\u4e8e\u7ee7\u627f\u5e26\u6765\u7684\u903b\u8f91\u8868\u8fbe\u7684\u590d\u6742\u6027\uff0c\u4f7f\u7528\u7ec4\u5408\u8fd8\u53ef\u4ee5\u66f4\u7075\u6d3b\u5730\u8c03\u6574\u7a0b\u5e8f\u7684\u7ed3\u6784\u548c\u529f\u80fd\u3002"),(0,a.kt)("p",null,"\u6700\u7b80\u5355\u7684\u7ec4\u5408\u673a\u5236\u5982\u4e0b\u56fe\uff08a\uff09\u6240\u793a\uff0c\u5bf9\u8c61A\u5e76\u4e0d\u662f\u7531\u67d0\u4e2a\u5177\u4f53\u7684\u7c7b\u901a\u8fc7\u7ee7\u627f\u7b49\u65b9\u5f0f\u6765\u7ee7\u627f\uff0c\u800c\u662f\u901a\u8fc7\u628a\u4e0d\u540c\u7684\u7ec4\u4ef6\u7ec4\u7ec7\u5728\u4e00\u8d77\u901a\u8fc7\u7ec4\u5408\u7684\u5f62\u5f0f\u6765\u6784\u5efa\u3002\u8fd9\u79cd\u7ec4\u5408\u65b9\u5f0f\u901a\u5e38\u4e0d\u662f\u7f16\u7a0b\u8bed\u8a00\u7684\u673a\u5236\uff0c\u800c\u662f\u4f7f\u7528\u7c7b\u4f3c\u4e00\u4e2a\u914d\u7f6e\u8868\u683c\u6765\u8bb0\u5f55\u8fd9\u79cd\u7ec4\u5408\u5173\u7cfb\uff0c\u7136\u540e\u7a0b\u5e8f\u8fd0\u884c\u7684\u65f6\u5019\u6839\u636e\u8fd9\u4e2a\u914d\u7f6e\u5206\u914d\u76f8\u5e94\u7684\u7ec4\u4ef6\u5bf9\u8c61\u5730\u5740\uff0c\u5e76\u5728\u7ec4\u5408\u7684\u5bf9\u8c61\u4e2d\u4ee5\u67d0\u79cd\u5f62\u5f0f\u8bb0\u5f55\u8fd9\u4e9b\u5730\u5740\uff0c\u4ee5\u65b9\u4fbf\u53ef\u4ee5\u5feb\u901f\u5730\u8bbf\u95ee\u8fd9\u4e9b\u7ec4\u4ef6\u5bf9\u8c61\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(4187).Z,width:"833",height:"248"})),(0,a.kt)("p",null,"\u7ec4\u4ef6\u5bf9\u8c61\u672c\u8eab\u7684\u5b9a\u4e49\u6ca1\u6709\u592a\u591a\u9650\u5b9a\uff0c\u4e00\u822c\u7b80\u5355\u7684\u65b9\u5f0f\u662f\u6bcf\u4e2a\u7ec4\u4ef6\u5305\u62ec\u81ea\u5df1\u7684\u5c5e\u6027\u3001\u72b6\u6001\u548c\u4ee3\u7801\uff0c\u53e6\u5916\u4e00\u4e9b\u66f4\u597d\u7684\u67b6\u6784\u6bd4\u5982ECS\u5219\u662f\u5c06\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u5206\u5f00\uff0c\u8fd9\u6837\u65b9\u4fbf\u7ec4\u4ef6\u4e4b\u95f4\u7684\u6570\u636e\u4e92\u64cd\u4f5c\u3002\u4f46\u4e0d\u7ba1\u600e\u6837\uff0c\u5bf9\u8c61\u5185\u90e8\u7684\u7ec4\u4ef6\u4e4b\u95f4\u662f\u9700\u8981\u901a\u4fe1\u7684\uff0c\u5bf9\u8c61\u548c\u5bf9\u8c61\u4e4b\u95f4\u7684\u67d0\u4e9b\u7ec4\u4ef6\u6216\u8005\u5c5e\u6027\u4e4b\u95f4\u4e5f\u662f\u9700\u8981\u901a\u4fe1\u7684\u3002\u5982\u4e0a\u56fe\uff08b\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,"\u4e00\u822c\u7b80\u5355\u5e38\u7528\u7684\u65b9\u6cd5\u5c31\u662f\u8bbe\u7f6e\u53ef\u4ee5\u80fd\u591f\u88ab\u5168\u90e8\u5bf9\u8c61\u8bbf\u95ee\u7684Manager\u7c7b\uff0c\u8fd9\u4e2a\u7c7b\u80fd\u591f\u6839\u636e\u7c7b\u578b\u6216\u8005\u540d\u5b57\u67e5\u8be2\u5230\u5176\u5b83\u7ec4\u4ef6\u6216\u8005\u5bf9\u8c61\u7684\u5b9e\u4f8b\u53d8\u91cf\uff0c\u4f8b\u5982\u4f2a\u4ee3\u7801\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c++"},'manager.getChild("A");\nmanager.getComponent<Attack>();\n')),(0,a.kt)("p",null,"\u8fd9\u6837\u7684\u65b9\u5f0f\u5f88\u7075\u6d3b\uff0c\u5b83\u907f\u514d\u5728\u6211\u4eec\u7684\u4ee3\u7801\u4e2d\u5230\u5904\u53bb\u5bfb\u627e\u6bcf\u4e2a\u5bf9\u8c61\u6216\u7ec4\u4ef6\u5b9e\u4f8b\u7684\u4f4d\u7f6e\u548c\u5730\u5740\uff0c\u7b80\u5316\u4e3a\u901a\u8fc7\u5bf9\u8c61\u540d\u79f0\u6216\u8005\u7c7b\u578b\u4fe1\u606f\u6765\u83b7\u53d6\u5bf9\u8c61\u3002\u4f46\u662f\u5b83\u7684\u7f3a\u70b9\u662f\u6211\u4eec\u66b4\u9732\u4e86\u4e00\u4e2a\u6743\u9650\u5f88\u9ad8\u7684\u8bbf\u95ee\u5165\u53e3\u7ed9\u6bcf\u4e2a\u5bf9\u8c61\u6216\u7ec4\u4ef6\uff0c\u5c3d\u7ba1\u5bf9\u4e8e\u6e38\u620f\u5f00\u53d1\u5546\u5185\u90e8\u6765\u8bb2\u8fd9\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u5e0c\u671b\u6e38\u620f\u7a0b\u5e8f\u80fd\u591f\u63d0\u4f9b\u7ed9\u73a9\u5bb6\u4e00\u4e9b\u81ea\u5b9a\u4e49\u7684\u9009\u9879\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u73a9\u5bb6\u53ef\u4ee5\u81ea\u884c\u5411\u7a0b\u5e8f\u6ce8\u5165\u4e00\u4e9b\u52a8\u6001\u7684\u811a\u672c\u7a0b\u5e8f\u6765\u5b9e\u73b0\u4e0d\u540c\u7684\u73a9\u6cd5\u548c\u76ee\u7684\uff0c\u8fd9\u79cd\u67b6\u6784\u5374\u662f\u4e0d\u53ef\u884c\u7684\uff0c\u800c\u8fd9\u4e5f\u662f\u5143\u5b87\u5b99\u6240\u63cf\u8ff0\u7684\u4e16\u754c\u5c1d\u8bd5\u6784\u5efa\u7684\u67b6\u6784\u3002"),(0,a.kt)("h5",{id:"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236"},"\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236"),(0,a.kt)("p",null,"\u6784\u5efa\u5f00\u653e\u7684\u7a0b\u5e8f\u67b6\u6784\u4e0d\u5149\u6d89\u53ca\u5bf9\u5176\u5b83\u8d44\u6e90\u7684\u8bbf\u95ee\u6743\u9650\u63a7\u5236\u95ee\u9898\uff0c\u8fd8\u6d89\u53ca\u5230\u53bb\u4e2d\u5fc3\u5316\u7684\u5b50\u7a0b\u5e8f\u4ea4\u4e92\u63a7\u5236\u95ee\u9898\u3002"),(0,a.kt)("p",null,"\u8fd9\u662f\u4ec0\u4e48\u610f\u601d\uff0c\u7531\u4e8e\u7cfb\u7edf\u7684\u529f\u80fd\u548c\u72b6\u6001\u90fd\u662f\u5b8c\u5168\u52a8\u6001\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u65e0\u6cd5\u9884\u6d4b\u4e00\u4e2a\u7ec4\u4ef6\u6267\u884c\u65f6\u5b83\u9700\u8981\u7684\u6761\u4ef6\u662f\u5426\u5b8c\u5168\u6ee1\u8db3\uff0c\u5728\u4e0a\u8ff0\u4f2a\u4ee3\u7801\u793a\u4f8b\u4e2d\uff0c\u7ec4\u4ef6\u83b7\u53d6\u5230\u7684\u5bf9\u8c61\u53ef\u80fd\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u5f53\u7136\u6211\u4eec\u53ef\u4ee5\u5728\u6bcf\u4e2a\u7ec4\u4ef6\u5185\u90e8\u505a\u662f\u5426\u4e3a\u7a7a\u7684\u5224\u65ad\uff0c\u4f46\u662f\u6211\u4eec\u6709\u6ca1\u6709\u4e00\u4e9b\u66f4\u597d\u7684\u67b6\u6784\u65b9\u6cd5\u5462\uff1f"),(0,a.kt)("p",null,"\u8fd1\u51e0\u5e74\u6539\u8fdb\u51fa\u6765\u7684ECS\u67b6\u6784\u53ef\u4ee5\u627e\u5230\u4e00\u4e9b\u542f\u793a\u3002\u5728\u4f8b\u5982",(0,a.kt)("a",{parentName:"p",href:"https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/index.html"},"Unity DOTS"),"\u6216",(0,a.kt)("a",{parentName:"p",href:"https://bevyengine.org/learn/book/getting-started/ecs/"},"Bevy ECS"),"\u67b6\u6784\u4e2d\uff0c\u5728\u8fd9\u4e9bECS\u67b6\u6784\uff0c\u7ec4\u4ef6\u7684\u6570\u636e\u548c\u529f\u80fd\u88ab\u5206\u79bb\u5f00\u6765\uff0c\u5206\u522b\u5bf9\u5e94Component\u548cSystem\uff0c\u6bcf\u4e2aSystem\u5bf9\u6570\u636e\u7684\u4f7f\u7528\uff0c\u7531\u4e0a\u9762\u90a3\u79cd\u81ea\u5df1\u9700\u8981\u901a\u8fc7\u5168\u5c40\u5171\u4eab\u7684manager\u53d8\u91cf\u53bb\u67e5\u8be2\u83b7\u53d6\uff0c\u6539\u53d8\u4e3a\u901a\u8fc7\u4e00\u4e2aquery\u53c2\u6570\u6765\u58f0\u660e\u5bf9\u6570\u636e\u7684\u9700\u6c42\uff0c\u4f8b\u5982\u5982\u4e0b\u7684System\u58f0\u660e\u5b83\u9700\u8981\u4f7f\u7528Transform\u6570\u636e\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},'fn print_position_system(query: Query<&Transform>) {\n for transform in &query {\n println!("position: {:?}", transform.translation);\n }\n}\n')),(0,a.kt)("p",null,"\u8fd9\u79cdQuery\u5f62\u5f0f\u7684\u58f0\u660e\uff0c\u501f\u52a9Rust\u7f16\u8bd1\u5668\u5bf9\u5b8f\u7684\u4e00\u4e9b\u5f3a\u5927\u652f\u6301\uff0c\u4f7f\u5f97\u6211\u4eec\u4e0d\u9700\u8981\u5199\u4e00\u4e9b\u989d\u5916\u7684\u67e5\u8be2\u8bed\u53e5\uff0c\u57fa\u4e8e\u7c7b\u578b\u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u6b63\u786e\u7684\u5bf9\u8c61\u53d8\u91cf\uff0c\u8fd9\u79cd\u65b9\u5f0f\u751a\u81f3\u6bd4\u51fd\u6570\u8c03\u7528\u8fd8\u8981\u7b80\u5355\uff1a\u90fd\u4e0d\u9700\u8981\u6211\u4eec\u624b\u52a8\u4f20\u9012\u51fd\u6570\u53c2\u6570\uff0c\u53ea\u9700\u8981\u58f0\u660e\u7c7b\u578b\u5c31\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u88ab\u81ea\u52a8\u8d4b\u4e88\u6b63\u786e\u7684\u51fd\u6570\u53d8\u91cf\u3002\u5f53\u7136Unity\u4f7f\u7528\u7684C#\u8bed\u8a00\u7f16\u8bd1\u5668\u7684\u673a\u5236\u6ca1\u6709\u90a3\u4e48\u5f3a\u5927\uff0c\u4f46\u5bf9\u5e94\u7684\u601d\u8def\u662f\u5dee\u4e0d\u591a\u7684\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u673a\u5236\u5e26\u6765\u7684\u610f\u4e49\u662f\u975e\u5e38\u6df1\u8fdc\u7684\uff0c\u5b83\u4e0d\u5149\u7b80\u5316\u4e86\u4f20\u7edf\u7f16\u7a0b\u5f00\u53d1\u4e2d\uff0c\u4e00\u4e2a\u903b\u8f91\u5728\u6267\u884c\u65f6\u9700\u8981\u6536\u96c6\u5927\u91cf",(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/26387327/answer/3158798538"},"\u590d\u6742\u4e0a\u4e0b\u6587"),"\u6570\u636e\u7684\u6d41\u7a0b\uff0c\u66f4\u6df1\u8fdc\u7684\u610f\u4e49\u5728\u4e8e\uff0c\u901a\u8fc7\u5206\u79bb\u6570\u636e\u7684\u58f0\u660e\u548c\u6570\u636e\u7684\u5b9e\u9645\u83b7\u53d6\u7684\u8fc7\u7a0b\uff0c\u5c06\u6570\u636e\u7684\u83b7\u53d6\u8fc7\u7a0b\u8f6c\u4ea4\u7ed9\u7cfb\u7edf\uff0c\u4f7f\u5f97\u7cfb\u7edf\u6709\u673a\u4f1a\u53bb\u63a7\u5236\u7ec4\u4ef6\u5bf9\u6570\u636e\u83b7\u53d6\u7684\u5b89\u5168\u63a7\u5236\uff0c\u540c\u65f6\u53c8\u4e0d\u4f1a\u7ed9\u5ba2\u6237\u7a0b\u5e8f\u7684\u5f00\u53d1\u5e26\u6765\u590d\u6742\u5ea6\uff0c\u751a\u81f3\u8fd8\u5927\u5927\u7b80\u5316\u4e86\u3002"),(0,a.kt)("p",null,"\u7ed3\u5408\u6211\u4eec\u524d\u9762\u7684\u533a\u5757\u94fe\u7684\u601d\u8def\uff0c\u7531\u4e8e\u6211\u4eec\u7684\u6570\u636e\u7684\u83b7\u53d6\u662f\u6ca1\u6709\u505a\u4fdd\u62a4\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u8fd9\u4e2a\u6570\u636e\u83b7\u53d6\u5230\u7ec4\u4ef6\u7684\u4f7f\u7528\u4e4b\u95f4\uff0c\u865a\u62df\u673a\u4f1a\u6839\u636e\u7ec4\u4ef6\u7684\u7c7b\u578b\u58f0\u660e\u6267\u884c\u5b89\u5168\u68c0\u67e5\uff0c\u6b64\u65f6\u6211\u4eec\u77e5\u9053\u7ec4\u4ef6\u58f0\u660e\u7684\u7c7b\u578b\uff0c\u8fd9\u4e2a\u7c7b\u578b\u662f\u865a\u62df\u673a\u53ef\u4ee5\u89e3\u6790\u7684\uff0c\u6211\u4eec\u4e5f\u5df2\u77e5\u9053\u7528\u6237\u5bf9\u4e8e\u8be5\u7ec4\u4ef6\u5bf9\u4e8e\u8be5\u6570\u636e\u7684\u6388\u6743\u60c5\u51b5\uff0c\u6211\u4eec\u5b8c\u5168\u5c31\u53ef\u4ee5\u5728\u865a\u62df\u673a\u5c42\u9762\u975e\u5e38\u7b80\u5355\u5730\u505a\u51fa\u5b89\u5168\u5224\u5b9a\uff0c\u5982\u679c\u6211\u4eec\u8fd8\u80fd\u591f\u6839\u636e\u5224\u5b9a\u7ed3\u679c\u6765\u6267\u884c\u51fd\u6570\u529f\u80fd\uff0c\u90a3\u4e48\u975e\u6cd5\u7684\u7ec4\u4ef6\u5b8c\u5168\u5c31\u6ca1\u6709\u53ef\u80fd\u88ab\u6267\u884c\uff0c\u5373\u4f7f\u5b83\u770b\u8d77\u6765\u53ef\u4ee5\u58f0\u660e\u83b7\u53d6\u7528\u6237\u7684\u4efb\u610f\u6570\u636e\uff0c\u6240\u6709\u7684\u6570\u636e\u6240\u6709\u6743\u90fd\u5728\u7528\u6237\u7684\u7cbe\u786e\u63a7\u5236\u4e4b\u4e0b\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u673a\u5236\u4e5f\u4e3a\u6211\u4eec\u5e26\u6765\u53bb\u4e2d\u5fc3\u5316\u7684\u4ea4\u4e92\u63a7\u5236\u4fbf\u5229\u3002\u7531\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u5b50\u7cfb\u7edf\u975e\u5e38\u591a\uff0c\u4e14\u6574\u4e2a\u7cfb\u7edf\u662f\u9ad8\u5ea6\u52a8\u6001\u7684\uff1a\u968f\u65f6\u53ef\u4ee5\u6709\u4efb\u610f\u7684\u5b50\u7cfb\u7edf\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u88ab\u505c\u6b62\u6267\u884c\uff0c\u4e5f\u968f\u65f6\u53ef\u80fd\u65b0\u589e\u67d0\u4e9b\u65b0\u529f\u80fd\u7684\u5b50\u7cfb\u7edf\uff0c\u6240\u4ee5\u6211\u4eec\u5f88\u96be\u7528\u5168\u5c40\u7684\u63a7\u5236\u5668\u53bb\u7ba1\u7406\u8fd9\u4e9b\u52a8\u6001\u7684\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u5b9e\u9645\u4e0a\u6240\u6709\u590d\u6742\u7cfb\u7edf\u7684\u6838\u5fc3\u5c31\u662f\u6574\u4e2a\u590d\u6742\u7cfb\u7edf\u6ca1\u6709\u4e2d\u592e\u7684\u63a7\u5236\u673a\u5236\uff0c\u6240\u6709\u5b50\u7cfb\u7edf\u4e4b\u95f4\u90fd\u662f\u5c40\u90e8\u7684\u4ea4\u4e92\uff0c\u6574\u4f53\u6d8c\u73b0\u51fa\u667a\u80fd\u884c\u4e3a\u3002"),(0,a.kt)("p",null,"\u5982\u679c\u7ec4\u4ef6\u53ea\u662f\u58f0\u660e\u4ea4\u4e92\u5173\u7cfb\uff0c\u6ca1\u6709\u4e0e\u67d0\u4e2a\u4e2d\u592e\u63a7\u5236\u5668\u6216\u8005\u5168\u5c40\u7684\u5171\u4eab\u53d8\u91cf\u4ea4\u4e92\u7684\u673a\u4f1a\uff0c\u7cfb\u7edf\u6216\u5e73\u53f0\u5c31\u6709\u673a\u4f1a\u6839\u636e\u7c7b\u578b\u7b49\u4fe1\u606f\u8fdb\u884c\u52a8\u6001\u5224\u65ad\u548c\u89c4\u5212\uff0c\u4f7f\u5f97\u4e0d\u6ee1\u8db3\u6761\u4ef6\u7684\u7ec4\u4ef6\u6839\u672c\u5c31\u4e0d\u4f1a\u88ab\u6267\u884c\u3002\u8fd9\u6837\u5728\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u770b\u8d77\u6765\uff0c\u6574\u4e2a\u7cfb\u7edf\u5e76\u6ca1\u6709\u4e00\u4e2a\u4e2d\u592e\u63a7\u5236\u5668\uff0c\u80fd\u591f\u6700\u5927\u9650\u5ea6\u652f\u6301\u590d\u6742\u7cfb\u7edf\u7684\u52a8\u6001\u6027\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u7b80\u5355\u5bf9\u7c7b\u578b\u7684\u58f0\u660e\uff0c\u7136\u540e\u7531\u7cfb\u7edf\u6765\u5206\u914d\u6570\u636e\u7684\u67b6\u6784\uff0c\u4e5f\u652f\u6491\u4e86\u6211\u4eec\u6700\u6838\u5fc3\u7684\u4e92\u64cd\u4f5c\u6027\u7279\u6027\u3002"),(0,a.kt)("h5",{id:"\u52a8\u6001\u6027"},"\u52a8\u6001\u6027"),(0,a.kt)("p",null,"\u6e38\u620f\u7a0b\u5e8f\u6216\u8005\u8bf4\u4e00\u822c\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u76f8\u5bf9\u4e8e\u4f20\u7edf\u7684\u5e94\u7528\u67b6\u6784\u8fd8\u6709\u53e6\u4e00\u4e2a\u7279\u5f81\uff0c\u90a3\u5c31\u662f\u4fe1\u606f\u662f\u5b8c\u5168\u52a8\u6001\u7684\u3002"),(0,a.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u5e94\u7528\u4e2d\uff0c\u8f6f\u4ef6\u4e3b\u8981\u5145\u5f53\u7684\u662f\u4e00\u4e2a\u529f\u80fd\u8ba1\u7b97\u5668\uff0c\u5b83\u7684\u529f\u80fd\u5927\u591a\u6570\u65f6\u5019\u90fd\u662f\u9759\u6b62\u72b6\u6001\u7684\uff0c\u53ea\u6709\u5f53\u7528\u6237\u53d1\u8d77\u67d0\u4e2a\u4e8b\u4ef6\uff0c\u4f8b\u5982\u70b9\u901a\u8fc7\u9f20\u6807\u6216\u89e6\u6478\u5c4f\u70b9\u51fb\u67d0\u4e2aUI\u5143\u7d20\uff0c\u8fd9\u4e2aUI\u5143\u7d20\u88ab\u7a0b\u5e8f\u5b9a\u4e49\u4e3a\u7ed1\u5b9a\u5230\u67d0\u4e2a\u529f\u80fd\uff0c\u4e00\u65e6\u7528\u6237\u53d1\u51fa\u8f93\u5165\u4e8b\u4ef6\uff0c\u5bf9\u5e94\u7684\u529f\u80fd\u8ba1\u7b97\u5c31\u4f1a\u6267\u884c\uff0c\u7136\u540e\u7a0b\u5e8f\u4f1a\u5448\u73b0\u76f8\u5e94\u7684\u8ba1\u7b97\u7ed3\u679c\u7ed9\u7528\u6237\u3002\u6b64\u540e\u7a0b\u5e8f\u53c8\u8fdb\u5165\u9759\u6b62\u72b6\u6001\u76f4\u5230\u7528\u6237\u7684\u4e0b\u6b21\u8f93\u5165\u3002\u8fd9\u79cd\u6a21\u5f0f\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a\u8f93\u5165--\x3e\u8ba1\u7b97--\x3e\u8f93\u51fa\uff0c\u5982\u4e0b\u56fe\uff081\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(9955).Z,width:"765",height:"148"})),(0,a.kt)("p",null,"\u800c\u6e38\u620f\u5e76\u4e0d\u7b80\u5355\u7684\u8fd9\u79cd\u6a21\u5f0f\uff0c\u6e38\u620f\u4e16\u754c\u7684\u4e00\u5207\u90fd\u662f\u52a8\u6001\u7684\uff0c\u5b83\u80cc\u540e\u6709\u4e00\u4e2a\u5faa\u73af\u9a71\u52a8\u7740\u6574\u4e2a\u7cfb\u7edf\u6301\u7eed\u5728\u8fd0\u884c\uff0c\u5373\u4f7f\u7528\u6237\u4e0d\u505a\u4efb\u4f55\u8f93\u5165\uff0c\u5b83\u7684\u72b6\u6001\u4e5f\u5728\u65f6\u65f6\u523b\u523b\u53d1\u751f\u53d8\u5316\uff0c\u4f8b\u5982\u5927\u90e8\u5206\u6e38\u620f\u7684\u5173\u5361\u90fd\u6709\u65f6\u95f4\u9650\u5236\uff0c\u5373\u4f7f\u73a9\u5bb6\u4ec0\u4e48\u4e5f\u4e0d\u505a\uff0c\u6e38\u620f\u4e5f\u4f1a\u4ee5\u5931\u8d25\u7ed3\u675f\uff1b\u4f8b\u5982\u5728\u4e00\u4e2aRPG\u6e38\u620f\u4e2d\uff0c\u5373\u4f7f\u73a9\u5bb6\u7ad9\u7740\u4e0d\u52a8\uff0c\u5468\u56f4\u7684\u602a\u7269\u4e5f\u6709\u53ef\u80fd\u8d70\u8fc7\u6765\u653b\u51fb\u73a9\u5bb6\uff0c\u5bfc\u81f4\u4e00\u8fde\u4e32\u7684\u540e\u679c\u3002"),(0,a.kt)("p",null,"\u6e38\u620f\u7a0b\u5e8f\u5c31\u50cf\u5185\u90e8\u6709\u4e00\u4e2a\u9a71\u52a8\u5668\uff0c\u5b83\u6301\u7eed\u9a71\u52a8\u7740\u6240\u6709\u7cfb\u7edf\u7684\u8fd0\u884c\uff0c\u8fd9\u4e9b\u7cfb\u7edf\u4e0e\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u4f1a\u5bfc\u81f4\u5f88\u591a\u72b6\u6001\u53d8\u5316\uff0c\u8fd9\u4e9b\u53d8\u5316\u7684\u72b6\u6001\u4fe1\u606f\u6e90\u6e90\u4e0d\u65ad\u5730\u8f93\u5165\u7ed9\u73a9\u5bb6\uff0c\u5982\u4e0a\u56fe\uff08b\uff09\u6240\u793a\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u884c\u4e3a\u4e5f\u662f\u66f4\u63a5\u8fd1\u771f\u5b9e\u4e16\u754c\u884c\u4e3a\u7684\uff0c\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\uff0c\u4e0d\u7ba1\u662f\u751f\u7269\u7cfb\u7edf\u8fd8\u662f\u4eba\u5de5\u5f71\u54cd\u7684\u5982\u7ecf\u6d4e\u7cfb\u7edf\u7b49\uff0c\u73af\u5883\u65f6\u65f6\u523b\u523b\u5728\u53d1\u751f\u53d8\u5316\uff0c\u6574\u4e2a\u4e16\u754c\u7684\u4fe1\u606f\u7edd\u4e0d\u4ec5\u4ec5\u662f\u6211\u4eec\u81ea\u5df1\u53bb\u5f71\u54cd\u7684\uff0c\u4e8b\u5b9e\u4e0a\u66f4\u662f\u53cd\u8fc7\u6765\u6211\u4eec\u7684\u884c\u4e3a\u90fd\u662f\u53d7\u73af\u5883\u7684\u4fe1\u606f\u5f71\u54cd\u7684\uff0c\u6211\u4eec\u6240\u4f5c\u7684\u4efb\u4f55\u51b3\u7b56\u90fd\u8981\u5b9e\u65f6\u53bb\u89c2\u5bdf\u73af\u5883\u7684\u4fe1\u606f\uff0c\u6709\u4e9b\u4e0a\u4e00\u523b\u770b\u8d77\u6765\u8fd8\u7406\u6240\u5f53\u7136\u7684\u51b3\u7b56\uff0c\u5728\u4e0b\u4e00\u523b\u968f\u7740\u67d0\u4e9b\u73af\u5883\u53d1\u751f\u53d8\u5316\u5c31\u53d8\u5f97\u6beb\u65e0\u610f\u4e49\u3002"),(0,a.kt)("p",null,"\u8fd9\u6837\u7684\u4fe1\u606f\u7cfb\u7edf\u7279\u5f81\u4e0e\u6211\u4eec\u7684\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u76f8\u6bd4\uff0c\u8868\u73b0\u51fa\u4e24\u4e2a\u5728\u8ba1\u7b97\u4e0a\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u7279\u5f81\uff0c\u5373\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u5b8c\u5168\u88ab\u52a8\u5f0f\u7684"),(0,a.kt)("li",{parentName:"ul"},"\u8f6f\u4ef6\u7ed9\u7528\u6237\u5448\u73b0\u7684\u662f\u4e00\u4e2a\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c")),(0,a.kt)("h6",{id:"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784"},"\u88ab\u52a8\u5f0f\u8ba1\u7b97\u67b6\u6784"),(0,a.kt)("p",null,"\u5f53\u4e00\u4e2a\u4fe1\u606f\u7cfb\u7edf\u7684\u4ea4\u4e92\u63a7\u5236\u662f\u53bb\u4e2d\u5fc3\u5316\u7684\u65f6\u5019\uff0c\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u770b\u8d77\u6765\u90fd\u662f\u201c\u81ea\u53d1\u7684\u201d\uff0c\u6ca1\u6709\u8c01\u6765\u9a71\u52a8\uff0c\u8fd9\u6837\u7684\u673a\u5236\u600e\u4e48\u6267\u884c\u7684\uff0c\u6211\u4eec\u5c06\u5728\u540e\u9762\u8ba8\u8bba\u6574\u4e2a\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\uff0c\u8fd9\u91cc\u6211\u4eec\u5148\u6765\u770b\u770b\u8fd9\u79cd\u884c\u4e3a\u5bf9\u7f16\u7a0b\u6709\u4ec0\u4e48\u5f71\u54cd\u3002"),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\u7f16\u7a0b\u6a21\u5f0f\u90fd\u53ef\u4ee5\u79f0\u4f5c\u4e3a\u4e3b\u52a8\u5f0f\uff0c\u5927\u90e8\u5206\u7684\u4ee3\u7801\u6d41\u7a0b\u53ef\u4ee5\u603b\u7ed3\u4e3a\uff1a\u7528\u6237\u8f93\u5165-\u300b\u51b3\u7b56\u5224\u65ad-\u300b\u6267\u884c\u52a8\u4f5c\uff0c\u8fd9\u91cc\u7684\u51b3\u7b56\u5224\u65ad\u662f\u7a0b\u5e8f\u4e2d\u6700\u590d\u6742\u7684\u90e8\u5206\uff0c\u56e0\u4e3a\u5b83\u6d89\u53ca\u5230\u5f88\u591a\u4e0a\u4e0b\u6587\u4fe1\u606f\u7684\u7ec4\u7ec7\u548c\u67e5\u8be2\uff0c\u5173\u4e8e\u4e0a\u4e0b\u6587\u7684\u7406\u89e3\u77e5\u4e4e",(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/26387327/answer/3158798538"},"\u6709\u4e00\u7bc7"),"\u5f88\u7cbe\u5f69\u7684\u63cf\u8ff0\u3002\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u67b6\u6784\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u90fd\u4f1a\u6709\u5f88\u591a\u4e0d\u540c\u7684\u6a21\u5f0f\u548c\u7ecf\u9a8c\u6765\u5b9e\u73b0\u8fd9\u79cd\u4e0a\u4e0b\u6587\u7ba1\u7406\uff0c\u4f46\u662f\u8fd9\u91cc\u6211\u4eec\u5728\u590d\u6742\u7cfb\u7edf\u7684\u89c6\u89d2\u4e0b\uff0c\u5374\u4f1a\u63d0\u51fa\u53e6\u4e00\u79cd\u53ef\u80fd\u662f\u66f4\u597d\u7684\u65b9\u6cd5\u3002"),(0,a.kt)("p",null,"\u4e00\u822c\u7684\u51b3\u7b56\u5224\u65ad\u6d41\u7a0b\u5927\u6982\u662f\u8fd9\u6837\uff0c\u5f53\u5bf9\u5e94\u7684\u4ee3\u7801\u63a5\u6536\u5230\u7528\u6237\u8f93\u5165\u8bf7\u6c42\u7684\u65f6\u5019\uff0c\u51b3\u7b56\u4ee3\u7801\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u53bb\u67e5\u8be2\u548c\u6536\u96c6\u4e0a\u9762\u8bb2\u5230\u7684\u8fd9\u79cd\u4e0a\u4e0b\u6587\u4fe1\u606f\uff0c\u4ee5\u5e2e\u52a9\u505a\u51fa\u51b3\u7b56\u5224\u65ad\uff0c\u4e0d\u8003\u8651\u8fd9\u4e9b\u4e0a\u4e0b\u6587\u5185\u90e8\u662f\u600e\u4e48\u7ec4\u7ec7\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u6574\u4e2a\u6839\u636e\u4e0a\u4e0b\u6587\u8fdb\u884c\u51b3\u7b56\u5224\u65ad\u7684\u8fc7\u7a0b\u770b\u505a\u4e00\u4e2a\u51fd\u6570makingDecision()\uff0cmakingDecision\u8981\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u53bb\u8c03\u7528\u5927\u91cf\u9884\u7f6e\u7684\u5224\u65ad\u51fd\u6570\uff0c\u6839\u636e\u5404\u79cd\u903b\u8f91\u6761\u4ef6\uff0c\u52a8\u6001\u5730\u8ba1\u7b97\u51fa\u4e00\u4e2a\u5224\u65ad\u7ed3\u679c\u3002\u8fd9\u79cd\u8ba1\u7b97\u67b6\u6784\u5e26\u6765\u4e86\u4e24\u79cd\u4e0d\u597d\u7684\u7ed3\u679c\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9020\u6210\u4e86\u6a21\u5757\u4e4b\u95f4\u7684\u8026\u5408\uff0c\u5373\u6240\u6709\u5b50\u6a21\u5757\u90fd\u9700\u8981\u5f15\u7528\u6216\u8005\u4e86\u89e3\u54ea\u4e9b\u903b\u8f91\u5224\u65ad\u7684\u4ee3\u7801"),(0,a.kt)("li",{parentName:"ul"},"\u9020\u6210\u903b\u8f91\u5224\u65ad\u8ba1\u7b97\u7684\u91cd\u590d\u6267\u884c\uff0c\u8bbe\u60f3\u6709\u4e24\u4e2a\u72ec\u7acb\u7684\u7528\u6237\u8f93\u5165\uff0c\u5176\u4e2d\u7684\u903b\u8f91\u5224\u65ad\u670980%\u662f\u91cd\u5408\u7684\uff0c\u7a0b\u5e8f\u5fc5\u987b\u9488\u5bf9\u4e24\u4e2a\u72ec\u7acb\u7684\u8f93\u5165\u8fdb\u884c\u8fd9\u90e8\u5206\u91cd\u590d\u8ba1\u7b97\u3002")),(0,a.kt)("p",null,"\u770b\u770b\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u7684\u7cfb\u7edf\u5f80\u5f80\u4e0d\u662f\u8fd9\u4e48\u5de5\u4f5c\u7684\uff0c\u5404\u79cd\u7cfb\u7edf\u5f80\u5f80\u5b9a\u4e49\u597d\u81ea\u5df1\u7684\u6d41\u7a0b\uff0c\u6bcf\u4e2a\u6d41\u7a0b\u4f1a\u8f93\u5165\u6570\u636e\uff0c\u540e\u7eed\u6d41\u7a0b\u5f80\u5f80\u4ee5\u8fd9\u79cd\u8f93\u51fa\u7684\u5b9e\u7269\u6570\u636e\u4f5c\u4e3a\u5b83\u53ef\u4ee5\u6267\u884c\u6d41\u7a0b\u7684\u5224\u65ad\u6761\u4ef6\uff0c\u800c\u4e0d\u662f\u5f53\u5b83\u9700\u8981\u6267\u884c\u7684\u65f6\u5019\uff0c\u53d1\u73b0\u524d\u9762\u7684\u6d41\u7a0b\u8fd8\u6ca1\u6709\u6267\u884c\uff0c\u7531\u4e0b\u6e38\u7684\u6d41\u7a0b\u518d\u53bb\u9a71\u52a8\u4e0a\u6e38\u7684\u6d41\u7a0b\u53bb\u6267\u884c\u3002\u5728\u8fd9\u6837\u7684\u6a21\u5f0f\u79cd\uff0c\u4e0a\u6e38\u6d41\u7a0b\u8ba1\u7b97\u7684\u6570\u636e\u7ed3\u679c\u4e0d\u4ec5\u5145\u5f53\u4e86\u4e00\u4e2a\u6761\u4ef6\uff0c\u5b83\u66f4\u5145\u5f53\u4e86\u4e0a\u6e38\u7684\u90a3\u4e2a\u8ba1\u7b97\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u7ed3\u5408\u6211\u4eec\u524d\u9762\u7684\u4e92\u64cd\u4f5c\u80fd\u529b\uff0c\u5373\u5b50\u7cfb\u7edf\u5728\u4e0d\u7ecf\u8fc7\u67d0\u4e2a\u4e2d\u592e\u63a7\u5236\u6a21\u5757\u7684\u60c5\u51b5\u4e0b\uff0c\u80fd\u591f\u975e\u5e38\u7b80\u5355\u5730\u8bbf\u95ee\u6240\u6709\u6570\u636e\u7684\u80fd\u529b\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5404\u79cd\u53ef\u80fd\u7684\u51b3\u7b56\u8ba1\u7b97\u63d0\u524d\u8ba1\u7b97\u4e3a\u4e00\u4e2a\u6570\u636e\uff0c\u8fd9\u6837\u4e0b\u6e38\u7684\u6d41\u7a0b\u7531\u4e8e\u5b9a\u4e49\u548c\u6570\u636e\u4f9d\u8d56\u5173\u7cfb\uff0c\u7cfb\u7edf\u53ef\u4ee5\u5728\u6761\u4ef6\u6ee1\u8db3\u7684\u65f6\u5019\u81ea\u52a8\u8c03\u7528\u5b83\u53bb\u6267\u884c\u81ea\u5df1\u7684\u903b\u8f91\u3002\u6574\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51b3\u7b56\u5224\u65ad\u548c\u5b50\u7cfb\u7edf\u5b8c\u5168\u89e3\u8026\u3002"),(0,a.kt)("p",null,"\u8fd9\u6837\u7684\u67b6\u6784\u8c03\u6574\u5c06\u4f20\u7edf\u8f6f\u4ef6\u79cd\u7684\u6a21\u5f0f\u7531\u4e3b\u52a8\u5f0f\u8f6c\u53d8\u4e3a\u88ab\u52a8\u5f0f\u3002"),(0,a.kt)("h6",{id:"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c"},"\u52a8\u6001\u7684\u4fe1\u606f\u4e16\u754c"),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\uff1a\u8f93\u5165-\u300b\u8ba1\u7b97-\u300b\u53cd\u9988\u7684\u8ba1\u7b97\u6a21\u5f0f\uff0c\u7528\u6237\u80fd\u591f\u5b8c\u5168\u4e86\u89e3\u6216\u8005\u8bf4\u201c\u8bb0\u4f4f\u201d\u4e00\u4e2a\u8f6f\u4ef6\u7684\u72b6\u4f53\uff0c\u7528\u6237\u77e5\u9053\u81ea\u5df1\u505a\u8fc7\u4ec0\u4e48\uff0c\u5f53\u524d\u7684\u8f6f\u4ef6\u72b6\u6001\u662f\u4ec0\u4e48\uff0c\u7528\u6237\u4e5f\u77e5\u9053TA\u53ea\u8981\u6267\u884c\u67d0\u4e2a\u529f\u80fd\uff0c\u5c31\u4f1a\u5e26\u6765\u4ec0\u4e48\u53ef\u9884\u671f\u7684\u7ed3\u679c\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u8fd9\u6837\u7684\u65b9\u5f0f\u6709\u52a9\u4e8e\u4eba\u4eec\u7ba1\u7406\u65e5\u5e38\u7684\u4efb\u52a1\u548c\u5de5\u4f5c\uff0c\u4f46\u662f\u8fd9\u65e2\u4e0d\u662f\u771f\u5b9e\u4e16\u754c\u7684\u5de5\u4f5c\u65b9\u5f0f\uff0c\u540c\u65f6\u6240\u6709\u4e8b\u60c5\u90fd\u9760\u4eba\u53bb\u8f93\u5165\u9a71\u52a8\uff0c\u90a3\u4e48\u4fe1\u606f\u7cfb\u7edf\u6240\u80fd\u5b8c\u6210\u7684\u4e8b\u60c5\u7684\u6570\u91cf\u5c31\u4f1a\u975e\u5e38\u5c11\uff0c\u56e0\u4e3a\u4eba\u7684\u7cbe\u529b\u548c\u6ce8\u610f\u529b\u90fd\u662f\u975e\u5e38\u5b9d\u8d35\u548c\u6709\u9650\u7684\u8d44\u6e90\u3002\u800c\u73b0\u5b9e\u4e16\u754c\u7684\u4fe1\u606f\u7cfb\u7edf\u603b\u662f\u5728\u81ea\u53d1\u3001\u52a8\u6001\u53d1\u5c55\u7684\uff0c\u5373\u4f7f\u6211\u4eec\u67d0\u5929\u4ec0\u4e48\u4e8b\u60c5\u4e5f\u6ca1\u6709\u505a\uff0c\u4f46\u662f\u4e16\u754c\u53d1\u751f\u4e86\u5f88\u591a\u7684\u7ecf\u6d4e\u548c\u751f\u4ea7\u884c\u4e3a\uff0c\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u6a21\u62df\u771f\u5b9e\u4e16\u754c\u7684\u52a8\u6001\u884c\u4e3a\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u4f7f\u5f97\u6570\u5b57\u4e16\u754c\u7684\u8ba1\u7b97\u4e0d\u4ee5\u4eba\u7684\u6ce8\u610f\u529b\u4e3a\u9a71\u52a8\u57fa\u7840"),"\uff0c\u8fd9\u6837\u5373\u4f7f\u5f53\u6211\u4eec\u7684\u6ce8\u610f\u529b\u4e0d\u5728\u8f6f\u4ef6\u548c\u5e94\u7528\u4e0a\uff0c\u4f46\u662f\u5b83\u4eec\u4f1a\u5728\u540e\u5929\u65f6\u65f6\u523b\u523b\u90fd\u8fdb\u884c\u7740\u4e0e\u7528\u6237\u76f8\u5173\u6216\u8005\u6307\u5b9a\u7684\u8ba1\u7b97\u4efb\u52a1\u3002"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u5df2\u7ecf\u63cf\u8ff0\u4e86\u5b9e\u73b0\u8fd9\u6837\u7684\u8ba1\u7b97\u67b6\u6784\u7684\u673a\u5236\uff0c\u8fd9\u91cc\u8981\u5f3a\u8c03\u7684\u662f\u8fd9\u5bf9\u7528\u6237\u4f53\u9a8c\u5e26\u6765\u7684\u53d8\u5316\u3002\u4f20\u7edf\u7684\u8f6f\u4ef6\u7684\u4fe1\u606f\u72b6\u6001\u90fd\u662f\u8ddf\u7528\u6237\u7684\u8f93\u5165\u6709\u5173\uff0c\u56e0\u6b64\u5373\u4f7f\u4e0d\u7528\u6253\u5f00\u8f6f\u4ef6\uff0c\u7528\u6237\u5927\u81f4\u662f\u77e5\u9053\u91cc\u9762\u7684\u72b6\u6001\u4fe1\u606f\u7684\u3002\u4f46\u662f\u5982\u679c\u4e00\u4e2a\u4fe1\u606f\u7cfb\u7edf\u5728\u540e\u53f0\u52a8\u6001\u8fd0\u884c\uff0c\u5c31\u4f1a\u5b58\u5728\u5927\u91cf\u7684\u4fe1\u606f\u72b6\u6001\u662f\u7528\u6237\u4e0d\u77e5\u9053\u7684\uff0c\u5b83\u5fc5\u987b\u50cf\u89c2\u5bdf\u8fd9\u4e2a\u52a8\u6001\u7684\u4e16\u754c\u4e00\u6837\u53bb\u89c2\u5bdf\u8f6f\u4ef6\u5185\u90e8\u7684\u4fe1\u606f\u72b6\u6001\uff0c\u5f53\u7136\u8fd9\u91cc\u7684\u4ea4\u4e92\u53ef\u4ee5\u6709\u5f88\u591a\u5f62\u5f0f\u3002"),(0,a.kt)("p",null,"\u6e38\u620f\u5c31\u662f\u8fd9\u6837\u4e00\u4e2a\u4fe1\u606f\u7cfb\u7edf\uff0c\u6e38\u620f\u5185\u90e8\u6709\u8bb8\u591a\u5b50\u7cfb\u7edf\u7684\u8fd0\u884c\u90fd\u4e0d\u662f\u76f4\u63a5\u4e0e\u7528\u6237\u7684\u8f93\u5165\u76f8\u5173\u7684\uff0c\u56e0\u6b64\u6e38\u620f\u7684\u4ea4\u4e92\u5fc5\u987b\u8981\u5f88\u597d\u5730\u5448\u73b0\u6bd4\u8f83\u5b8c\u6574\u7684\u72b6\u6001\u4fe1\u606f\uff0c\u6bd4\u5982\u76f8\u5bf9\u4e8e\u4f20\u7edf\u5e94\u7528\u7b80\u6d01\u7684\u754c\u9762\uff0c\u6e38\u620f\u7684\u754c\u9762\u901a\u5e38\u4f1a\u5305\u542b\u5f88\u591a\u5168\u5c40\u7684\u6570\u636e\u4fe1\u606f\uff0c\u9664\u4e86\u5177\u4f53\u7684\u6570\u636e\u4fe1\u606f\uff0c\u6e38\u620f\u573a\u666f\u7684\u5143\u7d20\u5728\u89c6\u89c9\u4e0a\u901a\u5e38\u4e5f\u88ab\u8bbe\u8ba1\u4e3a\u6613\u4e8e\u5e2e\u52a9\u7528\u6237\u53bb\u533a\u5206\u4e0d\u540c\u7684\u573a\u666f\u72b6\u6001\uff0c\u5982\u4e0b\u56fe\u300a\u6587\u660e\u300b\u8fd9\u6b3e\u6e38\u620f\u4e00\u4e2a\u6e38\u620f\u753b\u9762\u3002"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(4413).Z,width:"1366",height:"768"})),(0,a.kt)("p",null,"\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u7684\u4e0b\u4e00\u4e2a\u8f93\u5165\u6216\u8005\u51b3\u7b56\uff0c\u5c31\u4e0d\u80fd\u5355\u7eaf\u51ed\u501f\u81ea\u5df1\u5927\u8111\u79cd\u7684\u8bb0\u5fc6\uff0c\u800c\u662f\u9700\u8981\u89c2\u5bdf\u6574\u4e2a\u7cfb\u7edf\u7684\u4fe1\u606f\u72b6\u6001\uff0c\u8fd9\u4e9b\u72b6\u6001\u53ef\u80fd\u4f1a\u5b9e\u65f6\u53d8\u5316\uff0c\u751a\u81f3\u5927\u90e8\u5206\u53d8\u5316\u90fd\u4e0d\u662f\u7528\u6237\u76f4\u63a5\u8f93\u5165\u5bfc\u81f4\u7684\u7ed3\u679c\uff0c\u751a\u81f3\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u7528\u6237\u7684\u64cd\u4f5c\u66f4\u591a\u662f\u5728\u54cd\u5e94\u4fe1\u606f\u4e16\u754c\u7684\u72b6\u6001\u53d8\u5316\u3002"),(0,a.kt)("p",null,"\u8868\u9762\u4e0a\u8fd9\u770b\u8d77\u6765\u662f\u66f4\u590d\u6742\u7684\uff0c\u4f46\u662f\u8fd9\u6837\u7684\u4fe1\u606f\u7cfb\u7edf\u80fd\u591f\u5904\u7406\u7684\u4fe1\u606f\u8ba1\u7b97\u5c06\u4f1a\u8fdc\u8fdc\u8d85\u8fc7\u4f20\u7edf\u7684\u4fe1\u606f\u8ba1\u7b97\uff0c\u56e0\u6b64\u5b83\u80fd\u5b9e\u73b0\u7684\u4fe1\u606f\u8ba1\u7b97\u7684\u590d\u6742\u5ea6\u4e5f\u66f4\u9ad8\uff0c\u60f3\u60f3\u770b\u4e00\u4e2a\u6e38\u620f\u4e2d\u6d89\u53ca\u7684\u90a3\u4e48\u591a\u8ba1\u7b97\u548c\u903b\u8f91\uff0c\u4f7f\u7528\u4f20\u7edf\u7684\u5e94\u7528\u6a21\u5f0f\u51e0\u4e4e\u662f\u65e0\u6cd5\u5b9e\u73b0\u7684\u3002"),(0,a.kt)("p",null,"\u800c\u4e14\u8fd9\u79cd\u590d\u6742\u5ea6\u5bf9\u4e8e\u4eba\u7c7b\u6765\u8bb2\uff0c\u6216\u8bb8\u5e76\u6ca1\u6709\u90a3\u4e48\u590d\u6742\uff0c\u4eba\u7c7b\u5728\u793e\u4f1a\u4e2d\u5929\u751f\u5c31\u662f\u88ab\u8bad\u7ec3\u4e3a\u9002\u5e94\u53d8\u5316\u7684\u73af\u5883\u7684\uff0c\u6211\u4eec\u4e0d\u65ad\u5728\u89c2\u5bdf\u8857\u4e0a\u7684\u884c\u4eba\u3001\u7ea2\u8def\u706f\u53ca\u8f66\u8f86\u60c5\u51b5\uff0c\u4ee5\u51b3\u5b9a\u4e0b\u4e00\u6b65\u7684\u884c\u52a8\u7b56\u7565\uff1b\u8d5b\u573a\u4e0a\u7403\u5458\u4e4b\u95f4\u4e0d\u65ad\u89c2\u5bdf\u5176\u5b83\u8fd0\u884c\u5458\u52a8\u6001\u7684\u60c5\u51b5\uff0c\u4ee5\u51b3\u5b9a\u4e0b\u4e00\u6b65\u884c\u52a8\uff1b\u751a\u81f3\u5728\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u6211\u4eec\u4e5f\u8981\u6839\u636e\u80a1\u7968\u5e02\u573a\u7684\u53d8\u5316\uff0c\u51b3\u5b9a\u4e0b\u4e00\u90e8\u5206\u7684\u6295\u8d44\u51b3\u7b56\u7b49\u7b49\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\u8fd9\u91cc\u66f4\u591a\u7684\u662f\u8bbe\u8ba1\u548c\u4ea4\u4e92\u7684\u95ee\u9898\uff0c\u6bd4\u5982\u4eba\u7684\u6709\u4e9b\u54cd\u5e94\u80fd\u529b\u662f\u5929\u751f\u7684\uff0c\u6bd4\u5982\u5bf9\u5371\u9669\u4e8b\u7269\u7684\u5bdf\u89c9\uff0c\u6709\u4e9b\u5219\u662f\u9700\u8981\u5b9a\u4e49\u4e00\u5b9a\u7684\u89c4\u5219\u7136\u540e\u8fdb\u884c\u9002\u5f53\u7684\u8bad\u7ec3\u7684\uff0c\u6bd4\u5982\u5f00\u8f66\u65f6\u5bf9\u73af\u5883\u7684\u53cd\u6620\u7b49\u7b49\u3002\u8fd9\u6bd4\u5982\u5c31\u8981\u6c42\u6211\u4eec\u8981\u7cbe\u5fc3\u9009\u62e9\u5448\u73b0\u4fe1\u606f\u7684\u903b\u8f91\u3001\u6a21\u5f0f\u3001\u89c4\u5219\uff0c\u800c\u4e0d\u662f\u4e00\u80a1\u8111\u751a\u81f3\u968f\u673a\u9009\u62e9\u5927\u91cf\u6742\u4e71\u65e0\u7ae0\u7684\u4fe1\u606f\uff1b\u6bd4\u5982\u4e00\u6bb5\u65f6\u95f4\u5185\u67d0\u4e9b\u76f8\u5173\u4fe1\u606f\u7684\u89c4\u5219\u548c\u903b\u8f91\u53d8\u5316\u4e0d\u80fd\u592a\u5927\uff0c\u56e0\u4e3a\u8fd9\u53ef\u80fd\u9700\u8981\u7528\u6237\u91cd\u65b0\u53bb\u5efa\u7acb\u5bf9\u52a8\u6001\u4fe1\u606f\u7684\u54cd\u5e94\u6a21\u5f0f\u3002"),(0,a.kt)("p",null,"\u5728\u8fd9\u79cd\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u4fe1\u606f\u7684\u5448\u73b0\u3001\u89c4\u5219\u548c\u4ea4\u4e92\u4f1a\u53d8\u5f97\u5f88\u91cd\u8981\uff0c\u4f46\u662f\u76f8\u6bd4\u4e8e\u8fd9\u6837\u7684\u590d\u6742\u4fe1\u606f\u7cfb\u7edf\u5448\u73b0\u7684\u4ef7\u503c\uff1a",(0,a.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u529b\u7684\u91ca\u653e\u4ee5\u53ca\u5b9e\u73b0\u66f4\u590d\u6742\u8ba1\u7b97\u7684\u80fd\u529b"),"\uff0c\u4ee5\u53ca\u4eba\u7c7b\u5bf9\u8fd9\u79cd\u52a8\u6001\u4fe1\u606f\u7cfb\u7edf\u7684\u9002\u5e94\u80fd\u529b\uff0c\u8fd9\u6837\u7684\u8f6c\u53d8\u5b8c\u5168\u662f\u6709\u4ef7\u503c\u7684\u3002"),(0,a.kt)("h4",{id:"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd"},"\u8fdb\u5316\u4ea7\u751f\u6570\u5b57\u667a\u80fd"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u4ece\u673a\u5236\u4e0a\u8ba8\u8bba\u4e86\u5f88\u591a\u601d\u8def\uff0c\u4ee5\u5b9e\u73b0\u4e00\u4e2a\u53ef\u4ee5\u591a\u5b50\u7cfb\u7edf\u4e92\u64cd\u4f5c\u3001\u9760\u5b50\u7cfb\u7edf\u5c40\u90e8\u4ea4\u4e92\u5b9e\u73b0\u66f4\u590d\u6742\u529f\u80fd\u7684\u6570\u5b57\u4e16\u754c\u3002\u4f46\u6211\u4eec\u82b1\u8d39\u4e86\u8fd9\u4e48\u5927\u7684\u7cbe\u529b\u53bb\u91cd\u6784\u8f6f\u4ef6\u5f00\u53d1\u7684\u6d41\u7a0b\uff0c\u4ee5\u53ca\u8ba9\u7528\u6237\u53bb\u5b66\u4e60\u65b0\u7684\u4fe1\u606f\u7cfb\u7edf\u4ea4\u4e92\u65b9\u5f0f\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u8fd9\u6837\u7684\u4ee3\u4ef7\u5230\u5e95\u503c\u4e0d\u503c\u5f97\uff1f\u5b83\u6709\u6ca1\u6709\u66f4\u6df1\u5c42\u6b21\u7684\u4ef7\u503c\u4f53\u7cfb\u6765\u652f\u6491\u8fd9\u79cd\u6280\u672f\u53d8\u9769\uff1f"),"\u8fd9\u4e9b\u662f\u672c\u8282\u8981\u8ba8\u8bba\u7684\u95ee\u9898\u3002"),(0,a.kt)("p",null,"\u672c\u8282\u6211\u4eec\u8981\u8ba8\u8bba\u4e24\u4e2a\u5f88\u6df1\u523b\u7684\u95ee\u9898\uff0c\u5373\u6570\u5b57\u667a\u80fd\u548c\u8ba1\u7b97\u7684\u672c\u8d28\uff0c\u8fd9\u4e9b\u6982\u5ff5\u53ef\u80fd\u6027\u9a71\u52a8\u672a\u6765\u6570\u5b57\u53d8\u9769\u7684\u6838\u5fc3\u4ef7\u503c\u3002"),(0,a.kt)("h5",{id:"\u667a\u80fd\u6d8c\u73b0"},"\u667a\u80fd\u6d8c\u73b0"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u5df2\u7ecf\u7b80\u5355\u4ecb\u7ecd\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u57fa\u672c\u77e5\u8bc6\uff0c\u6211\u4eec\u518d\u6765\u770b\u4e00\u4e2a\u6bcf\u4e2a\u4eba\u53ef\u80fd\u6df1\u6709\u4f53\u4f1a\u7684\u4f8b\u5b50\u3002"),(0,a.kt)("p",null,"\u8003\u8651\u6211\u4eec\u73b0\u5728\u7684\u6574\u4e2a\u7f51\u4e0a\u6d88\u8d39\u8d2d\u7269\u7684\u7cfb\u7edf\uff0c\u5b83\u662f\u7531\u8fd9\u6837\u51e0\u4e2a\u5b50\u7cfb\u7edf\u6784\u6210\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u5305\u62ec\u751f\u4ea7\u4ea7\u54c1\u7684\u5382\u5546\u3001\u7269\u6d41\u5feb\u9012\u3001\u56fd\u5bb6\u4ea4\u901a\u516c\u5171\u57fa\u7840\u8bbe\u65bd\u3001\u7535\u5546\u7f51\u7ad9\u3001\u9001\u8d27\u7684\u5feb\u9012\u5458\u548c\u7528\u6237\u7b49\u3002\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u6bcf\u4e00\u4e2a\u5355\u72ec\u770b\u90fd\u6bd4\u8f83\u7b80\u5355\uff0c\u5b83\u4eec\u7684\u529f\u80fd\u6709\u81ea\u5df1\u7684\u8fb9\u754c\uff0c\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u4e5f\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\uff0c\u6700\u91cd\u8981\u7684\u662f\uff0c\u8fd9\u4e00\u5207\u6ca1\u6709\u4e00\u4e2a\u516c\u5171\u3001\u7edf\u4e00\u7684\u4e2d\u592e\u63a7\u5236\u5668\uff0c\u6574\u4e2a\u7cfb\u7edf\u90fd\u662f\u7531\u5c40\u90e8\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c\u7b80\u5355\u7684\u76f8\u4e92\u4ea4\u4e92\uff0c\u4ece\u800c\u5448\u73b0\u6574\u4f53\u7cfb\u7edf\u529f\u80fd\u7684\u3002"),(0,a.kt)("p",null,"\u867d\u7136\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u76f8\u5bf9\u90fd\u6bd4\u8f83\u7b80\u5355\u4e14\u5bb9\u6613\u7406\u89e3\uff0c\u4f46\u662f\u6574\u4e2a\u7cfb\u7edf\u5b9e\u9645\u8868\u73b0\u51fa\u6765\u7684\u529f\u80fd\u6027\u662f\u8fdc\u8fdc\u5927\u4e8e\u6211\u4eec\u7684\u9884\u671f\u7684\uff0c\u4f8b\u5982\u6700\u5f00\u59cb\u7f51\u4e0a\u8d2d\u7269\u4e3b\u8981\u662f\u4ee5\u6dd8\u5b9d\u7b49\u5c11\u6570\u7535\u5546\u7f51\u7ad9\u4e3a\u4e3b\uff0c\u7136\u540e\u73b0\u5728\u5feb\u9012\u79f0\u4e3a\u4e00\u79cd\u516c\u5171\u5b50\u7cfb\u7edf\uff0c\u4f7f\u5f97\u4efb\u610f\u5176\u5b83\u7684\u7535\u5546\u7f51\u7ad9\u90fd\u53ef\u4ee5\u63a5\u5165\uff0c\u8fd9\u5c31\u4f7f\u5f97\u4eba\u4eec\u8d2d\u4e70\u7269\u54c1\u8fd9\u4e2a\u4f53\u9a8c\u5927\u5927\u5347\u7ea7\uff0c\u4f8b\u5982\u5c0f\u5230\u9644\u8fd1\u7684\u9910\u5385\u3001\u6c34\u679c\u5e97\u548c\u836f\u5e97\u7b49\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u8d2d\u4e70\uff0c\u751a\u81f3\u5305\u62ec\u8dd1\u817f\u8fd9\u79cd\u7075\u6d3b\u7684\u5f62\u5f0f\uff0c\u4ece\u6211\u4eec\u7684\u4f53\u9a8c\u4e0a\u8bf4\u8fd9\u5df2\u7ecf\u4e0d\u5355\u5355\u662f\u4e00\u4e2a\u5feb\u9012\u6216\u8005\u8d2d\u7269\u7f51\u7ad9\u90a3\u4e48\u7b80\u5355\uff0c\u5b83\u7b80\u76f4\u662f\u4e00\u5957\u975e\u5e38\u667a\u80fd\u7684\u6d88\u8d39\u4f53\u7cfb\uff0c\u56e0\u4e3a\u51e0\u4e4e\u6240\u6709\u7684\u7535\u5b50\u6d88\u8d39\u5f62\u5f0f\u5b83\u90fd\u53ef\u4ee5\u5b9e\u73b0\uff0c\u8fd9\u79cd\u667a\u80fd\u5c31\u662f\u901a\u8fc7\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u6784\u6210\u7684\u590d\u6742\u7cfb\u7edf\u6d8c\u73b0\u51fa\u6765\u7684\u3002"),(0,a.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u4e8e\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u5f62\u5f0f\u662f\u76f8\u5bf9\u6bd4\u8f83\u72ec\u7acb\u7684\uff0c\u6240\u4ee5\u5b50\u7cfb\u7edf\u90fd\u5728\u8fdb\u884c\u81ea\u6211\u8fed\u4ee3\uff0c\u4f8b\u5982\u8fc7\u53bb\u7684\u7269\u6d41\u4f53\u7cfb\u4e3b\u8981\u662f\u4f9d\u8d56\u706b\u8f66\uff0c\u5176\u8fd0\u8f7d\u7684\u65f6\u6548\u6027\u662f\u975e\u5e38\u4f4e\u7684\uff0c\u968f\u7740\u73b0\u5728\u4ea4\u901a\u5b50\u7cfb\u7edf\u5185\u90e8\u7684\u8fed\u4ee3\uff0c\u4f8b\u5982\u706b\u8f66\u5347\u7ea7\u4e3a\u9ad8\u94c1\u548c\u52a8\u8f66\uff0c\u5927\u89c4\u6a21\u9ad8\u901f\u516c\u8def\u7f51\u7684\u4fee\u5efa\uff0c\u5176\u5b83\u7684\u5b50\u7cfb\u7edf\u751a\u81f3\u5728\u6ca1\u6709\u53d8\u5316\u7684\u60c5\u51b5\u4e0b\u5c31\u80fd\u4eab\u53d7\u5230\u4ea4\u901a\u5b50\u7cfb\u7edf\u7684\u6027\u80fd\u63d0\u5347\uff0c\u6700\u540e\u5bfc\u81f4\u6574\u4e2a\u6d88\u8d39\u7684\u4f53\u9a8c\u5927\u5e45\u63d0\u5347\u3002\u518d\u6bd4\u5982\u8bf4\u5feb\u9012\u8fd9\u4e2a\u5b50\u7cfb\u7edf\uff0c\u8fc7\u53bb\u5feb\u9012\u53ef\u80fd\u5c31\u662f\u9001\u5230\u7ad9\u9700\u8981\u7528\u6237\u81ea\u53d6\uff0c\u4f46\u662f\u968f\u7740\u6d88\u8d39\u91cf\u7684\u589e\u52a0\uff0c\u5feb\u9012\u516c\u53f8\u4e3a\u4e86\u6539\u5584\u4f53\u9a8c\uff0c\u9010\u6b65\u589e\u52a0\u4e86\u914d\u9001\u5230\u5bb6\u91cc\u7684\u6700\u540e\u4e00\u516c\u91cc\uff0c\u751a\u81f3\u5728\u5927\u57ce\u5e02\u901a\u8fc7\u5206\u7247\u533a\u914d\u5907\u66f4\u591a\u7684\u5feb\u9012\u5458\u6765\u7f29\u77ed\u914d\u9001\u65f6\u95f4\u3002\u6240\u6709\u8fd9\u4e00\u5207\uff0c\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u5185\u90e8\u90fd\u5728\u8fed\u4ee3\u548c\u8fdb\u5316\uff0c\u6700\u540e\u6574\u4e2a\u7cfb\u7edf\u7684\u6027\u80fd\u548c\u80fd\u529b\u90fd\u4e0d\u65ad\u7a81\u7834\uff0c\u5b50\u7cfb\u7edf\u5185\u90e8\u9010\u6b65\u7684\u8fed\u4ee3\u6539\u5584\u4e0d\u5355\u5355\u662f\u63d0\u5347\u4e86\u6027\u80fd\uff0c\u5b83\u4f7f\u5f97\u6574\u4e2a\u7cfb\u7edf\u6d8c\u73b0\u51fa\u4e00\u4e9b\u65b0\u7684\u4f53\u9a8c\u548c\u80fd\u529b\u3002\u4f8b\u5982\u5feb\u9012\u5458\u7684\u914d\u9001\u65f6\u95f4\u4e0d\u80fd\u63a7\u5236\u5728\u5f88\u77ed\u7684\u65f6\u95f4\u5185\uff0c\u90a3\u4e48\u8fd9\u79cd\u77ed\u65f6\u7684\u5916\u5356\u6d88\u8d39\u5f62\u5f0f\u5c31\u4e0d\u53ef\u80fd\u5f62\u6210\u3002"),(0,a.kt)("p",null,"\u4ece\u8fd9\u91cc\u6211\u4eec\u5c31\u53ef\u4ee5\u770b\u5230\u590d\u6742\u7cfb\u7edf\u7684\u529b\u91cf\uff0c\u5b83\u901a\u8fc7\u5c06\u6574\u4e2a\u7cfb\u7edf\u5212\u5206\u4e3a\u81ea\u6cbb\u7684\u5b50\u7cfb\u7edf\uff0c\u5e76\u5141\u8bb8\u5b50\u7cfb\u7edf\u5185\u90e8\u8fdb\u884c\u8fdb\u5316\u8fed\u4ee3\uff0c\u4ece\u800c\u6d8c\u73b0\u51fa\u66f4\u667a\u80fd\u7684\u529f\u80fd\u3002\u6211\u4eec\u53ef\u4ee5\u4ece\u4eba\u7c7b\u793e\u4f1a\u7684\u5404\u4e2a\u5c42\u9762\u90fd\u770b\u5230\u8fd9\u79cd\u590d\u6742\u7cfb\u7edf\u673a\u5236\u6d8c\u73b0\u667a\u80fd\u7684\u4f8b\u5b50\uff0c\u4ece\u751f\u7269\u7cfb\u7edf\u3001\u5230\u4eba\u9020\u7684\u5404\u79cd\u7cfb\u7edf\uff0c\u5982\u4e0a\u9762\u63cf\u8ff0\u7684\u8fd9\u79cd\u7535\u5b50\u8d2d\u7269\u7684\u7cfb\u7edf\uff0c\u518d\u5230\u5929\u6c14\u5b87\u5b99\u8fd9\u79cd\u5927\u81ea\u7136\u7684\u590d\u6742\u7cfb\u7edf\u3002"),(0,a.kt)("p",null,"\u5c3d\u7ba1\u4fe1\u606f\u5316\u4ee5\u53ca\u8ba1\u7b97\u673a\u7684\u901a\u7528\u8ba1\u7b97\u80fd\u529b\u5177\u5907\u8868\u8fbe\u548c\u6a21\u62df\u4eba\u7c7b\u4e00\u5207\u53ef\u8ba1\u7b97\u7684\u903b\u8f91\u7684\u80fd\u529b\u3002\u7136\u800c\u5728\u6570\u5b57\u4e16\u754c\u6211\u4eec\u4f3c\u4e4e\u8fd8\u6ca1\u6709\u611f\u53d7\u5230\u8fd9\u79cd\u7531\u590d\u6742\u7cfb\u7edf\u673a\u5236\u5bfc\u81f4\u7684\u8ba1\u7b97\u667a\u80fd\u7684\u80fd\u529b\uff0c\u8fd9\u4e3b\u8981\u662f\u56e0\u4e3a\u524d\u9762\u8bba\u8ff0\u7684\u73b0\u4ee3\u8f6f\u4ef6\u6784\u9020\u7684\u57fa\u7840\u67b6\u6784\u4f7f\u5f97\u5e94\u7528\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u6027\u5f88\u4f4e\uff0c\u4ece\u800c\u4e0d\u5229\u4e8e\u5b9e\u73b0\u76f8\u4e92\u4ea4\u4e92\u6765\u5f62\u6210\u590d\u6742\u7cfb\u7edf\u3002\u6bd4\u5982\u770b\u770b\u6211\u4eec\u624b\u673a\u4e0a\u7684\u5e94\u7528\uff0c\u51e0\u4e4e\u6bcf\u4e2a\u5e94\u7528\u4e4b\u95f4\u90fd\u662f\u5b8c\u5168\u9694\u79bb\u7684\uff0c\u5c3d\u7ba1\u7406\u8bba\u4e0a\u7528\u6237\u7684\u6570\u636e\u672c\u8eab\u5e94\u8be5\u5728\u4e0d\u540c\u5e94\u7528\u4e4b\u95f4\u53ef\u4ee5\u5171\u4eab\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u4e00\u4e2a\u5e94\u7528\u5f88\u96be\u4f7f\u7528\u6216\u83b7\u53d6\u53e6\u4e00\u4e2a\u5e94\u7528\u4ea7\u751f\u7684\u6570\u636e\u3002\u8fd9\u9020\u6210\u7684\u7ed3\u679c\u5c31\u662f\uff0c\u867d\u7136\u73b0\u5728\u7684\u5e94\u7528\u5546\u5e97\u6709\u6210\u5343\u4e0a\u4e07\u7684\u5e94\u7528\uff0c\u6bcf\u4e2a\u7528\u6237\u4e5f\u4e0b\u8f7d\u4e86\u975e\u5e38\u591a\u5728\u529f\u80fd\u548c\u610f\u4e49\u4e0a\u5177\u6709\u76f8\u5173\u6027\u7684\u5e94\u7528\uff0c\u4f46\u662f\u8fd9\u4e9b\u5e94\u7528\u4e4b\u95f4\u4ece\u4e0d\u80fd\u771f\u6b63\u8fdb\u884c\u4ea4\u4e92\uff0c\u4f7f\u5f97\u8fd9\u79cd\u201c\u591a\u5e94\u7528\u201d\u7684\u5f62\u6001\u6700\u7ec8\u6ca1\u6709\u6d8c\u73b0\u51fa\u66f4\u590d\u6742\u3001\u66f4\u4e30\u5bcc\u3001\u66f4\u667a\u80fd\u7684\u6570\u5b57\u4f53\u9a8c\u3002\u6bcf\u4e2a\u5e94\u7528\u672c\u8eab\u5c31\u50cf\u4e00\u4e2a\u5b8c\u5168\u72ec\u7acb\u7684\u5c0f\u529f\u80fd\uff0c\u751a\u81f3\u5e94\u7528\u4e4b\u95f4\u7531\u4e8e\u6570\u636e\u683c\u5f0f\u7684\u4e0d\u540c\uff0c\u5373\u4f7f\u662f\u7528\u6237\u60f3\u8981\u624b\u52a8\u5728\u5e94\u7528\u4e4b\u95f4\u5f62\u6210\u8fd9\u79cd\u534f\u4f5c\uff0c\u4e5f\u65e0\u6cd5\u64cd\u4f5c\uff0c\u5f53\u7136\u9664\u4e86\u7b80\u5355\u7684\u56fe\u7247\u3001\u89c6\u9891\u3001\u6587\u5b57\u7b49\u8fd9\u51e0\u79cd\u6807\u51c6\u7684\u683c\u5f0f\u4e4b\u95f4\u53ef\u4ee5\u624b\u52a8\u5b9e\u73b0\u4ea4\u4e92\uff0c\u5176\u5b83\u66f4\u591a\u7684\u6570\u636e\u662f\u6ca1\u6709\u901a\u7528\u683c\u5f0f\u7684\u3002"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u8bf4\u660e\uff1a\u8fd9\u91cc\u5e76\u4e0d\u662f\u8bf4\u6570\u5b57\u4e16\u754c\u5b8c\u5168\u6ca1\u6709\u590d\u6742\u7cfb\u7edf\u4ea7\u751f\uff0c\u4f46\u8fd9\u91cc\u672c\u6587\u8bf4\u7684\u4e3b\u8981\u662f\u9762\u5411C\u7aef\u6d88\u8d39\u8005\u7684\u5e94\u7528\u4e4b\u95f4\u3002\u5176\u5b83\u7684\u4e0d\u540c\u5c42\u5ea6\u7684\u4e92\u64cd\u4f5c\u8fd8\u662f\u6709\u7684\uff0c\u4f46\u662f\u7531\u4e8e\u4f20\u7edf\u8f6f\u4ef6\u6784\u9020\u67b6\u6784\u7684\u4e00\u4e9b\u57fa\u672c\u7684\u80fd\u529b\u9650\u5236\uff0c\u6240\u4ee5\u5927\u90e8\u5206\u8fd9\u79cd\u4e92\u64cd\u4f5c\u6027\u7684\u67b6\u6784\u90fd\u53d1\u751f\u5728web\u4e4b\u95f4\uff0cWeb\u901a\u8fc7HTTP\u7b49\u534f\u8bae\u63d0\u4f9b\u4e86\u4e00\u4e9b\u57fa\u672c\u4f46\u76f8\u5bf9\u6bd4\u8f83\u590d\u6742\u7684\u4e92\u64cd\u4f5c\u673a\u5236\uff0c\u5927\u90e8\u5206\u4f01\u4e1a\u5185\u90e8\u7684\u4e1a\u52a1\u4e4b\u95f4\u90fd\u662f\u57fa\u4e8e\u7f51\u7edc\u4f20\u8f93\u534f\u8bae\u6765\u5b9e\u73b0\u7684\u5fae\u670d\u52a1\u7684\u5f62\u5f0f\u6784\u6210\u7684\uff0c\u8fd9\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u5f62\u6210\u4e86\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u3002\u6b64\u5916\uff0c\u8d85\u94fe\u63a5URL\u4f7f\u5f97\u4e92\u8054\u7f51\u4e0a\u7684\u4fe1\u606f\u4e4b\u95f4\u90fd\u53ef\u4ee5\u8fde\u63a5\u8d77\u6765\uff0c\u5c3d\u7ba1\u5b83\u53ea\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u94fe\u63a5\uff0c\u4f46\u662f\u8fd9\u4e9b\u94fe\u63a5\u6784\u6210\u7684\u4fe1\u606f\u80cc\u540e\u7684\u76f8\u5173\u6027\u6784\u6210\u4e86\u4e00\u4e9b\u903b\u8f91\u5173\u7cfb\uff0c\u4f7f\u5f97\u5b83\u4eec\u4e5f\u6d8c\u73b0\u51fa\u4e86\u667a\u80fd\uff0c\u4f8b\u5982\u6211\u4eec\u6cbf\u7740\u8fd9\u4e9b\u94fe\u63a5\u53ef\u4ee5\u5bfb\u627e\u5230\u5f88\u591a\u5f88\u6df1\u5c42\u6b21\u6709\u4ef7\u503c\u7684\u4fe1\u606f\uff0c\u8fd9\u4e9b\u4fe1\u606f\u4f5c\u4e3a\u77e5\u8bc6\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u89e3\u51b3\u4e00\u4e9b\u751f\u6d3b\u4e2d\u7684\u91cd\u5927\u95ee\u9898\u3002")),(0,a.kt)("p",null,"\u6240\u4ee5\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u6784\u5efa\u4e00\u5957\u65b0\u7684\u8f6f\u4ef6\u6784\u9020\u7684\u65b9\u6cd5\uff0c\u4f7f\u5f97\u4eba\u4eec\u53ef\u4ee5\u66f4\u65b9\u4fbf\u5730\u53bb\u6784\u9020\u590d\u6742\u7cfb\u7edf\u5f62\u5f0f\u7684\u4fe1\u606f\u7cfb\u7edf\uff0c\u8fd9\u5c06\u5e26\u6765\u5e27\u6570\u7684\u6570\u5b57\u667a\u80fd\u7684\u53d8\u9769\uff0c\u8fd9\u5c06\u4f7f\u5f97\u8ba1\u7b97\u7684\u80fd\u529b\u8fdc\u8fdc\u8d85\u8d8a\u4e00\u822c\u7684\u903b\u8f91\u8ba1\u7b97\u3002"),(0,a.kt)("h5",{id:"\u8ba1\u7b97\u7684\u672c\u8d28"},"\u8ba1\u7b97\u7684\u672c\u8d28"),(0,a.kt)("p",null,"\u5728\u8ba1\u7b97\u673a\u548c\u4fe1\u606f\u9886\u57df\uff0c\u6211\u4eec\u7406\u89e3\u7684\u8ba1\u7b97\u901a\u5e38\u662f\u6307\u6309\u7167\u4e00\u5b9a\u7684\u903b\u8f91\u548c\u6d41\u7a0b\u6267\u884c\u4e00\u4e9b\u64cd\u4f5c\uff0c\u7f16\u7a0b\u8bed\u8a00\u5b9a\u4e49\u4e86\u6211\u4eec\u63cf\u8ff0\u903b\u8f91\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u7684\u903b\u8f91\u7528\u8fd9\u79cd\u7f16\u7a0b\u8bed\u8a00\u8fdb\u884c\u63cf\u8ff0\u5e76\u5f62\u6210\u4ee3\u7801\u7a0b\u5e8f\uff0c\u6700\u540e\u5728\u8ba1\u7b97\u673a\u4e0a\u88ab\u6267\u884c\u4ee5\u5b8c\u6210\u8fd9\u4e2a\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u7136\u800c\u5f53\u6211\u4eec\u6784\u5efa\u4e86\u4e00\u4e2a\u5177\u6709\u590d\u6742\u7cfb\u7edf\u7279\u6027\u7684\u4fe1\u606f\u7cfb\u7edf\u7684\u65f6\u5019\uff0c\u8fd9\u4e9b\u6d8c\u73b0\u7684\u80fd\u529b\u662f\u6211\u4eec\u201c\u8ba1\u7b97\u201d\u51fa\u6765\u7684\u5417\uff1f\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\uff0c\u53ef\u80fd\u8ba1\u7b97\u7684\u672c\u8d28\u5e76\u6ca1\u6709\u90a3\u4e48\u7b80\u5355\u3002"),(0,a.kt)("p",null,"\u5728\u751f\u7269\u5b66\u3001\u6570\u5b66\u3001\u7edf\u8ba1\u5b66\u3001\u7269\u7406\u5b66\u7b49\u8ddf\u590d\u6742\u7cfb\u7edf\u76f8\u5173\u7684\u79d1\u5b66\u9886\u57df\uff0c\u79d1\u5b66\u5bb6\u4e00\u76f4\u5728\u5c1d\u8bd5\u4e3a\u590d\u6742\u7cfb\u7edf\u5bfb\u627e\u4e00\u4e9b\u6570\u5b66\u4e0a\u7684\u7406\u8bba\uff0c\u590d\u6742\u7cfb\u7edf\u7684\u89c6\u89d2\u81f3\u5c11\u4ece\u4e0a\u4e2a\u4e16\u7eaa50\u5e74\u4ee3\u5c31\u5df2\u7ecf\u5728\u79d1\u5b66\u7814\u7a76\u8005\u4e2d\u95f4\u88ab\u5e7f\u6cdb\u601d\u8003\u548c\u63a5\u53d7\uff0c\u4f8b\u5982\u8457\u540d\u7684\u4eba\u5de5\u667a\u80fd\u5148\u9a71 ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Herbert_A._Simon"},"Herbert A. Simon")," \u5c31\u662f\u6700\u65e9\u5bf9\u590d\u6742\u7cfb\u7edf\u7684\u67b6\u6784\u8fdb\u884c\u5206\u6790\u7684\u79d1\u5b66\u5bb6\uff0c\u5728\u4ed6\u7684\u8457\u4f5c\u300a",(0,a.kt)("em",{parentName:"p"},(0,a.kt)("a",{parentName:"em",href:"https://en.wikipedia.org/wiki/The_Sciences_of_the_Artificial"},"The Sciences of the Artificial")),"\u300b\u5c31\u5927\u91cf\u4f7f\u7528\u590d\u6742\u7cfb\u7edf\u7684\u89c6\u89d2\u6765\u5206\u6790\u6240\u6709\u7531\u4eba\u7c7b\u53c2\u4e0e\u7684\u4eba\u5de5\u7cfb\u7edf\u3002\u4ed6\u63d0\u51fa\u4e86\u4e00\u4e9b\u6784\u5efa\u8fd9\u79cd\u7cfb\u7edf\u7684\u539f\u5219\u3001\u65b9\u6cd5\u548c\u601d\u7ef4\uff0c\u6bd4\u5982\u901a\u8fc7\u76ee\u6807\u3001\u754c\u9762\u548c\u73af\u5883\u7684\u5173\u7cfb\u6765\u63cf\u8ff0\u4eba\u5de5\u7cfb\u7edf\uff0c\u5176\u4e2d\u7684\u754c\u9762\u5176\u5b9e\u5c31\u76f8\u5f53\u4e8e\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u8fb9\u754c\uff0c\u754c\u9762\u5185\u90e8\u7684\u5c31\u662f\u5185\u90e8\u529f\u80fd\uff0c\u7cfb\u7edf\u9762\u5bf9\u7684\u5916\u90e8\u73af\u5883\u5c31\u662f\u5176\u4ea4\u4e92\u90e8\u5206\uff0c\u800c\u76ee\u6807\u6765\u6e90\u4e8e\u8fdb\u5316\u8bba\u91cc\u9762\u7684\u9009\u62e9\u3002\u8fd9\u4e9b\u7814\u7a76\u5de5\u4f5c\u4e5f\u4e3a\u540e\u6765\u7684\u590d\u6742\u7cfb\u7edf\u5728\u5de5\u7a0b\u4e0a\u5b9e\u65bd\u63d0\u4f9b\u4e86\u8bb8\u591a\u5b9d\u8d35\u7684\u4ef7\u503c\u3002"),(0,a.kt)("p",null,"\u7136\u800c\uff0c\u6700\u8fd1\u51e0\u5341\u5e74\u6765\uff0c\u5c3d\u7ba1\u968f\u7740\u751f\u7269\u5b66\u3001\u7269\u7406\u3001\u5316\u5b66\u7b49\u5b66\u79d1\u7684\u98de\u901f\u53d1\u5c55\u7ed9\u590d\u6742\u7cfb\u7edf\u7684\u7814\u7a76\u63d0\u4f9b\u4e86\u5f88\u591a\u4f9d\u636e\uff0c\u4f46\u662f\u4eba\u4eec\u81f3\u4eca\u4f9d\u7136\u6ca1\u6709\u627e\u5230\u5173\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u7edf\u4e00\u7684\u6570\u5b66\u7406\u8bba\u3002\u66f4\u591a\u7684\u7814\u7a76\u8005\u90fd\u504f\u5411\u4e8e\u590d\u6742\u7cfb\u7edf\u53ef\u80fd\u6ca1\u6709\u50cf\u5176\u5b83\u81ea\u7136\u79d1\u5b66\u4e00\u6837\u5177\u6709\u6bd4\u8f83\u660e\u786e\u7684\u7edf\u4e00\u7684\u6570\u5b66\u7406\u8bba\u3002\u66f4\u591a\u662f\u4ece\u590d\u6742\u7cfb\u7edf\u7684\u4e00\u4e9b\u6bd4\u8f83\u5177\u6709\u5171\u6027\u7684\u4e00\u4e9b\u7279\u5f81\u53bb\u7814\u7a76\u548c\u4f7f\u7528\u590d\u6742\u7cfb\u7edf\u3002"),(0,a.kt)("p",null,"\u5206\u5b50\u751f\u7269\u5b66John E Mayfield\u5728\u4ed6\u7684\u8457\u4f5c\u300aThe Engine of Complexity: Evolution as Computation\u300b\u4e2d\u63d0\u51fa\u4e86\u4e00\u79cd\u5173\u4e8e\u590d\u6742\u7cfb\u7edf\u7684\u89e3\u91ca\uff0c\u5373\u5c06\u8fdb\u5316\u770b\u4f5c\u4e00\u79cd\u8ba1\u7b97\uff0c\u8fd9\u6837\u8ba1\u7b97\u5c31\u662f\u6240\u6709\u590d\u6742\u7cfb\u7edf\u80cc\u540e\u7684\u5f15\u64ce\u3002\u8fd9\u672c\u4e66\u7684 ",(0,a.kt)("a",{parentName:"p",href:"https://www.amazon.com/stores/author/B00DO8488U/about"},"\u4f5c\u8005\u4ecb\u7ecd")," \u5982\u4e0b\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"From an early age John E Mayfield was fascinated with science of all kinds. This broad interest led to a BA in physics, a PhD in biophysics, and an academic career in the area of molecular biology. In the late 1990s he was introduced to evolutionary computer algorithms and became fascinated by the relationships between biological evolution and computer based evolution and more generally in the linkages between computation and biological process. The Engine of Complexity, Evolution as Computation is based on his consequent studies. The book shows how biological evolution is a special case of a more general computational notion of evolution, and how that general view of evolution explains not only how life is possible but also how human technology and most or all complex outcomes of human society are possible. It is his first book.")),(0,a.kt)("p",null,"John E Mayfield\u7684\u4e3b\u8981\u7814\u7a76\u65b9\u5411\u662f\u5173\u4e8e\u8fdb\u5316\u7684\u4e00\u822c\u6027\u7406\u8bba\uff0c\u4ed6\u6307\u51fa\uff0c\u4f20\u7edf\u7684\u590d\u6742\u7cfb\u7edf\u4e4b\u6240\u4ee5\u5f88\u96be\u5f62\u6210\u7edf\u4e00\u7684\u6570\u5b66\u7406\u8bba\uff0c\u4e3b\u8981\u662f\u56e0\u4e3a\u7cfb\u7edf\u4e4b\u95f4\u4ea4\u4e92\u5173\u7cfb\u662f\u975e\u7ebf\u6027\u7684\uff0c\u800c\u8ba1\u7b97\u673a\u7684\u903b\u8f91\u8ba1\u7b97\u80fd\u529b\u6b63\u662f\u89e3\u51b3\u975e\u7ebf\u6027\u5173\u7cfb\u7684\u65b9\u6cd5\uff0c\u4e14\u5177\u6709\u5f88\u5f3a\u5927\u8868\u8fbe\u80fd\u529b\uff0c\u6240\u4ee5\u4ed6\u53d1\u73b0\u5c06\u8fd9\u4e24\u79cd\u89c6\u89d2\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u7528\u8ba1\u7b97\u7684\u89c2\u70b9\u5c31\u53ef\u4ee5\u89e3\u91ca\u51e0\u4e4e\u6240\u6709\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u3002"),(0,a.kt)("p",null,"\u4f5c\u8005\u6307\u51fa\uff0c\u8ba1\u7b97\u673a\u7a0b\u5e8f\u662f\u7531\u80fd\u591f\u5bfc\u81f4\u8ba1\u7b97\u673a\u5185\u90e8\u53d1\u751f\u7279\u5b9a\u7684\u72b6\u6001\u5e8f\u5217\u5e76\u4ea7\u751f\u8f93\u51fa\u7684\u547d\u4ee4\u7ec4\u6210\u3002\u6570\u636e\u53ef\u4ee5\u89c6\u4e3a\u5bf9\u5916\u90e8\u4e16\u754c\u67d0\u65b9\u9762\u7684\u8868\u793a\uff0c\u8fd9\u6837\u770b\u6765\uff0c\u8ba1\u7b97\u5c31\u662f\u5c06\u65b9\u6cd5\u7684\u8868\u793a\uff08\u7b97\u6cd5\uff09\u4f5c\u7528\u4e8e\u5bf9\u4e16\u754c\u67d0\u65b9\u9762\u7684\u8868\u793a\uff08\u6570\u636e\uff09\u4ea7\u751f\u5185\u90e8\u8868\u793a\uff08\u673a\u5668\u72b6\u6001\uff09\u7684\u5e8f\u5217\uff0c\u5e76\u5f97\u5230\u6700\u7ec8\u7684\u8868\u793a\uff08\u8f93\u51fa\uff09\u3002\u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u5185\u90e8\u72b6\u6001\u4e0e\u8f93\u5165\u72b6\u6001\u4e92\u52a8\u4ea7\u751f\u65b0\u7684\u5185\u90e8\u72b6\u6001\uff0c\u6700\u7ec8\u72b6\u6001\u5c31\u662f\u8f93\u51fa\u3002"),(0,a.kt)("p",null,"\u90a3\u4e48\u5982\u679c\u7269\u7406\u7684\u8fc7\u7a0b\u4e5f\u662f\u8ba1\u7b97\uff0c\u7a0b\u5e8f\u5728\u54ea\uff1f\u4f5c\u8005\u4ee5\u5982\u4f55\u89e3\u91ca\u4e00\u7c92\u76d0\u4e3a\u4f8b\u7528\u8ba1\u7b97\u7684\u89c2\u70b9\u6765\u89e3\u91ca\u5316\u5b66\u53cd\u5e94\uff0c\u98df\u76d0\u662f\u7531\u94a0\u548c\u6c2f\u7ec4\u6210\uff0c\u5f53\u7b49\u91cf\u7684\u94a0\u539f\u5b50\u548c\u6c2f\u539f\u5b50\u6df7\u5408\u5230\u4e00\u8d77\uff0c\u5c31\u4f1a\u53d1\u751f\u81ea\u53d1\u7684\u53cd\u5e94\uff0c\u8fd9\u4e2a\u5316\u5b66\u53cd\u5e94\u4f1a\u91ca\u653e\u70ed\u80fd\u91cf\uff0c\u6bcf\u4e2a\u94a0\u539f\u5b50\u5931\u53bb\u4e00\u4e2a\u7535\u5b50\uff0c\u6bcf\u4e2a\u6c2f\u539f\u5b50\u83b7\u5f97\u4e00\u4e2a\u7535\u5b50\u3002\u6839\u636e\u5e93\u4ed1\u5b9a\u5f8b\uff0c\u5e26\u6b63\u7535\u7684\u94a0\u79bb\u5b50\u548c\u5e26\u8d1f\u7535\u7684\u6c2f\u79bb\u5b50\u76f8\u4e92\u5438\u5f15\uff0c\u4f46\u4e0d\u80fd\u8ddd\u79bb\u592a\u8fd1\uff0c\u56e0\u4e3a\u586b\u5145\u7684\u80fd\u7ea7\uff08\u5316\u5b66\u7684\u8f68\u9053\uff09\u4e0d\u80fd\u76f8\u4e92\u6e17\u900f\u3002\u5f53\u6240\u6709\u94a0\u79bb\u5b50\u90fd\u88ab\u6c2f\u79bb\u5b50\u5305\u56f4\uff0c\u6c2f\u79bb\u5b50\u4e5f\u88ab\u94a0\u79bb\u5b50\u5305\u56f4\uff0c\u5f62\u6210\u975e\u5e38\u89c4\u5219\u76843\u7ef4\u7ed3\u6784\uff0c\u76f8\u62b5\u89e6\u7684\u89c4\u5219\u65f6\u95f4\u5c31\u4f1a\u8fbe\u5230\u6700\u4f18\u5e73\u8861\u3002\u80fd\u7ea7\u7684\u7269\u7406\u7ef4\u5ea6\u51b3\u5b9a\u4e86\u4f8b\u5b50\u4e4b\u95f4\u7684\u6700\u4f18\u8ddd\u79bb\u3002\u94a0\u79bb\u5b50\u548c\u6c2f\u79bb\u5b50\u5177\u6709\u4e0d\u540c\u7684\u5927\u5c0f\uff0c\u80fd\u5e73\u8861\u7269\u7406\u548c\u51e0\u4f55\u4e0d\u540c\u9700\u6c42\u7684\u72b6\u6001\u662f\u4e00\u4e2a\u89c4\u5219\u7684\u7f51\u683c\uff0c\u6bcf\u4e2a\u6c2f\u79bb\u5b50\u5468\u56f4\u67096\u4e2a\u94a0\u79bb\u5b50\uff0c\u6bcf\u4e2a\u94a0\u79bb\u5b50\u5468\u56f4\u4e5f\u67096\u4e2a\u6c2f\u79bb\u5b50\u3002\u8fd9\u4e2a\u89c4\u5219\u7684\u7acb\u65b9\u4f53\u7ed3\u6784\u5411\u5404\u4e2a\u65b9\u5411\u5ef6\u4f38\uff0c\u4ece\u800c\u5f62\u6210\u6211\u4eec\u6240\u719f\u6089\u7684\u76d0\u6676\u3002\u5728\u9002\u5f53\u7684\u6e29\u5ea6\u548c\u6d53\u5ea6\u6761\u4ef6\u4e0b\u94a0\u79bb\u5b50\u548c\u6c2f\u79bb\u5b50\u76f8\u9047\u5c31\u4f1a\u81ea\u53d1\u5f62\u6210\u8fd9\u79cd\u7ed3\u6784\u3002"),(0,a.kt)("p",null,"\u5728\u4e0a\u8ff0\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6d89\u53ca\u4e24\u4e2a\u57fa\u672c\u7269\u7406\u5b9a\u5f8b\uff0c\u4e00\u4e2a\u662f\u5e93\u4ed1\u5b9a\u5f8b\uff0c\u5b83\u8bf4\u660e\u7535\u8377\u8d8a\u63a5\u8fd1\uff0c\u4f5c\u7528\u529b\u5c31\u8d8a\u5927\u3002\u4f46\u5982\u679c\u4ec5\u4ec5\u662f\u8fd9\u6837\uff0c\u94a0\u79bb\u5b50\u548c\u6c2f\u79bb\u5b50\u5c31\u4f1a\u6324\u788e\u5728\u4e00\u8d77\u3002\u800c\u8fd9\u4e00\u5207\u6ca1\u6709\u53d1\u751f\u662f\u56e0\u4e3a\u53e6\u4e00\u4e2a\u91cf\u5b50\u529b\u5b66\u4e2d\u7684\u88ab\u79f0\u4e3a\u6ce1\u5229\u4e0d\u76f8\u5bb9\u539f\u7406\u7684\u89c4\u5219\u3002\u91cf\u5b50\u529b\u5b66\u89c4\u5219\u7684\u4e00\u4e2a\u7279\u70b9\u662f\u7cfb\u7edf\u662f\u6309\u201c\u80fd\u7ea7\u201d\u5212\u5206\u7684\uff0c\u5bf9\u4e8e\u539f\u5b50\u8fd9\u610f\u5473\u7740\u7535\u5b50\u5904\u4e8e\u67d0\u4e2a\u80fd\u7ea7\u5e76\u4e14\u4e0e\u8d28\u5b50\u7684\u8ddd\u79bb\u4e0d\u80fd\u4f4e\u4e8e\u6700\u4f4e\u7684\u80fd\u7ea7\u3002\u8fd9\u79cd\u89c4\u5219\u7684\u7ed3\u679c\u662f\u4f7f\u5f97\u4e0d\u540c\u7684\u80fd\u7ea7\u53ea\u80fd\u5360\u636e\u4e00\u5b9a\u6570\u91cf\u7684\u7535\u5b50\u3002"),(0,a.kt)("p",null,"\u91cf\u5b50\u529b\u5b66\u3001\u5e93\u4ed1\u5b9a\u5f8b\u4ee5\u53ca\u6570\u5b57\u7684\u76f8\u4e92\u4f5c\u7528\u8d4b\u4e88\u4e86\u6bcf\u79cd\u5316\u5b66\u5143\u7d20\u72ec\u6709\u7684\u7279\u5f81\u3002John E Mayfield\u4ece\u8ba1\u7b97\u7684\u89c2\u70b9\u770b\uff0c\u94a0\u548c\u6c2f\u539f\u5b50\u5404\u81ea\u5e26\u6709\u81ea\u8eab\u8868\u793a\u7684\u4fe1\u606f\uff0c\u5f53\u4e00\u5b9a\u7684\u6761\u4ef6\u53d1\u751f\u65f6\uff0c\u5b83\u4eec\u4f1a\u76f8\u4e92\u4f5c\u7528\uff0c\u53d1\u751f\u76f8\u4e92\u4f5c\u7528\u7684\u8ba1\u7b97\u8fc7\u7a0b\u6b63\u662f\u7531\u57fa\u672c\u7684\u7269\u7406\u89c4\u5219\u5f15\u8d77\u7684\uff0c\u4f8b\u5982\u8fd9\u91cc\u7684\u5e93\u4ed1\u5b9a\u5f8b\u548c\u91cf\u5b50\u529b\u5b66\u89c4\u5219\uff0c\u8fd9\u4e9b\u57fa\u7840\u7684\u7269\u7406\u89c4\u5f8b\u7f16\u7801\u4e86\u5176\u4e2d\u7684\u8ba1\u7b97\u7b97\u6cd5\u3002"),(0,a.kt)("p",null,"\u6309\u7167\u8fd9\u79cd\u89c6\u89d2\uff0c\u6240\u6709\u7684\u8fdb\u5316\u7cfb\u7edf\u6216\u8005\u590d\u6742\u7cfb\u7edf\u90fd\u53ef\u4ee5\u7528\u8ba1\u7b97\u7684\u89c2\u70b9\u8fdb\u884c\u89e3\u91ca\u3002\u8fd9\u79cd\u8ba1\u7b97\u7684\u89c6\u89d2\u5bf9\u4e8e\u6211\u4eec\u6784\u5efa\u8f6f\u4ef6\u8ba1\u7b97\u67b6\u6784\u6700\u6838\u5fc3\u7684\u610f\u4e49\u5728\u4e8e\uff0c\u8fd9\u79cd\u7cfb\u7edf\u7684\u8ba1\u7b97\u662f\u81ea\u52a8\u53d1\u751f\u7684\uff0c\u5b83\u6ca1\u6709\u67d0\u4e2a\u4e2d\u592e\u63a7\u5236\u5668\u3002\u5728\u7269\u7406\u8fc7\u7a0b\u79cd\uff0c\u4f5c\u8005\u5c06\u7269\u7406\u89c4\u5f8b\u5728\u6574\u4e2a\u8fdb\u5316\u8ba1\u7b97\u8fc7\u7a0b\u79cd\u5145\u5f53\u7684\u9a71\u52a8\u81ea\u53d1\u8ba1\u7b97\u7684\u65b9\u5f0f\u79f0\u4e3a\u201c\u514d\u8d39\u7684\u7ed3\u6784\u201d\uff0c\u5373\u6211\u4eec\u81ea\u7136\u754c\u7684\u6240\u6709\u57fa\u672c\u7684\u7269\u7406\u89c4\u5219\u9a71\u52a8\u7740\u6574\u4e2a\u5b87\u5b99\u79cd\u590d\u6742\u7cfb\u7edf\u7684\u8ba1\u7b97\u3002"),(0,a.kt)("p",null,"\u56de\u5230\u6211\u4eec\u7684\u8f6f\u4ef6\u67b6\u6784\uff0c\u6211\u4eec\u5df2\u7ecf\u5177\u5907\u4e86\u5b9a\u4e49\u5b50\u7cfb\u7edf\u4ee5\u53ca\u8ba9\u5b50\u7cfb\u7edf\u4e4b\u95f4\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u80fd\u529b\uff0c\u90a3\u4e48\u5728\u6ca1\u6709\u4e2d\u592e\u63a7\u5236\u5668\u7684\u60c5\u51b5\u4e0b\uff0c\u600e\u6837\u5f62\u6210\u8fd9\u79cd\u81ea\u53d1\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u5462\uff1f\u8fd9\u5c31\u6d89\u53ca\u6211\u4eec\u7684\u7ec4\u4ef6\u53c2\u6570\u58f0\u660e\u4e0e\u5168\u5c40\u53d8\u91cf\u4e4b\u95f4\u7684\u89e3\u8026\uff0c\u5f53\u6211\u4eec\u7684\u7ec4\u4ef6\u53ea\u662f\u58f0\u660e\u5bf9\u67d0\u4e9b\u6570\u636e\u611f\u5174\u8da3\uff0c\u800c\u4e0d\u9700\u8981\u81ea\u5df1\u53bb\u83b7\u53d6\u8fd9\u4e9b\u6570\u636e\u7684\u5730\u5740\u7684\u65f6\u5019\uff0c\u501f\u52a9\u6211\u4eec\u7684\u7c7b\u578b\u7cfb\u7edf\uff0c\u7cfb\u7edf\u5c31\u53ef\u4ee5\u81ea\u52a8\u63a8\u5bfc\u51fa\u5b83\u9700\u8981\u4e0e\u54ea\u4e9b\u5b50\u7cfb\u7edf\u8fdb\u884c\u4ea4\u4e92\uff0c\u6240\u4ee5\u7cfb\u7edf\u80fd\u591f\u52a8\u6001\u6839\u636e\u8fd9\u79cd\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u53d8\u5316\u6765\u51b3\u5b9a\u8fd9\u79cd\u4ea4\u4e92\u4e1c\u897f\uff0c\u5c3d\u7ba1\u7cfb\u7edf\u5728\u4e0d\u8fd8\u662f\u6709\u4e00\u4e2a\u7c7b\u4f3c\u7684\u5206\u914d\u5668\u5728\u5de5\u4f5c\uff0c\u4f46\u662f\u4ece\u7ec4\u4ef6\u6216\u8005\u5b50\u7cfb\u7edf\u770b\u6765\uff0c\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e0e\u5176\u5b83\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f",(0,a.kt)("strong",{parentName:"p"},"\u201c\u81ea\u53d1\u7684\u201d"),"\uff0c\u5373\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u58f0\u660e\u81ea\u5df1\u611f\u5174\u8da3\u7684\u6570\u636e\uff0c\u5c31\u50cf\u539f\u5b50\u58f0\u660e\u4e86\u81ea\u5df1\u7684\u8868\u793a\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u53ea\u8981\u6761\u4ef6\u6ee1\u8db3\uff0c\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5c31\u53ef\u4ee5\u8fdb\u884c\u4ea4\u4e92\uff0c\u8fd9\u4e2a\u6761\u4ef6\u5728\u7269\u7406\u8fc7\u7a0b\u4e2d\u662f\u81ea\u53d1\u8fdb\u884c\u7684\uff0c\u5728\u6211\u4eec\u7684\u7cfb\u7edf\u4e2d\u5b83\u4e5f\u662f\u81ea\u53d1\u8fdb\u884c\u7684\uff0c\u56e0\u4e3a\u7cfb\u7edf\u4f1a\u6839\u636e\u591a\u4e2a\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u6761\u4ef6\u8fdb\u884c\u5224\u65ad\uff0c\u6ee1\u8db3\u6761\u4ef6\u7684\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5c31\u4f1a\u88ab\u6267\u884c\u8ba1\u7b97\u3002")),(0,a.kt)("p",null,"\u8fd9\u91cc\u7cfb\u7edf\u7684\u8c03\u5ea6\u5145\u5f53\u4e86\u7269\u7406\u8fc7\u7a0b\u4e2d\u90a3\u4e9b\u7269\u7406\u5b9a\u5f8b\u5bf9\u5e94\u7684\u514d\u8d39\u7684\u7ed3\u6784\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u4e0d\u662f\u50cf\u7269\u7406\u8fc7\u7a0b\u90a3\u6837\u5177\u6709\u5404\u5f0f\u5404\u6837\u7684\u7269\u7406\u5b9a\u5f8b\u6765\u5b9a\u4e49\u4e0d\u540c\u7684\u7ed3\u6784\uff0c\u800c\u662f\u5b9a\u4e49\u4e00\u4e2a\u7edf\u4e00\u7684\u89c4\u5219\uff0c\u8fd9\u4e2a\u89c4\u5219\u6839\u636e\u8f93\u5165\u8f93\u51fa\u7c7b\u578b\u6765\u8ba1\u7b97\u4ea4\u4e92\u7684\u6761\u4ef6\uff0c\u800c\u8fd9\u4e9b\u7c7b\u578b\u672c\u8eab\u7f16\u7801\u4e86\u5404\u79cd\u5404\u6837\u7684\u89c4\u5219\u3002"),(0,a.kt)("h5",{id:"\u8fdb\u5316\u7684\u7cfb\u7edf"},"\u8fdb\u5316\u7684\u7cfb\u7edf"),(0,a.kt)("p",null,"\u524d\u9762\u4e24\u8282\u8bba\u8ff0\u4e86\u590d\u6742\u7cfb\u7edf\u600e\u6837\u901a\u8fc7\u591a\u7cfb\u7edf\u975e\u7ebf\u6027\u548c\u81ea\u53d1\u7684\u7684\u4ea4\u4e92\uff0c\u6765\u6d8c\u73b0\u6574\u4e2a\u7cfb\u7edf\u7684\u667a\u80fd\uff0c\u4ee5\u53ca\u6211\u4eec\u7684\u8f6f\u4ef6\u67b6\u6784\u4f7f\u7528\u600e\u6837\u7684\u673a\u5236\u6765\u652f\u6491\u590d\u6742\u7cfb\u7edf\u7684\u8fd9\u79cd\u7ed3\u6784\u7279\u5f81\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u7136\u800c\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u662f\u600e\u4e48\u5f62\u6210\u7684\uff0c\u8fd9\u662f\u53e6\u4e00\u4e2a\u975e\u5e38\u6df1\u523b\u7684\u8bdd\u9898"),"\u3002\u4f20\u7edf\u7684\u4e00\u4e2a\u8f6f\u4ef6\u90fd\u662f\u7531\u67d0\u4e2a\u516c\u53f8\u5185\u90e8\u5927\u91cf\u7684\u7814\u53d1\u56e2\u961f\u901a\u8fc7\u6570\u4e2a\u6708\u4ee5\u53ca\u6570\u4e2a\u4e0d\u540c\u804c\u80fd\u7684\u56e2\u961f\u7684\u534f\u4f5c\u5171\u540c\u5b8c\u6210\u7684\uff0c\u5b83\u4eec\u7684\u4e00\u4e2a\u88ab\u8ba4\u4e3a\u7406\u6240\u5f53\u7136\u4ee5\u81f3\u4e8e\u6211\u4eec\u4e00\u822c\u90fd\u4e0d\u4f1a\u53bb\u601d\u8003\u7684\u7279\u5f81\u662f\uff1a\u4e00\u65e6\u5f00\u53d1\u5546\u53d1\u5e03\u4ea7\u54c1\uff0c\u5219\u610f\u5473\u7740\u6574\u4e2a\u8f6f\u4ef6\u4ea7\u54c1\u7684\u529f\u80fd\u5168\u90e8\u5f00\u653e\u5b8c\u6bd5\uff0c\u4ece\u5916\u754c\u7528\u6237\u611f\u77e5\u6765\u770b\uff0c\u4ed6\u4eec\u4e00\u4e0b\u5b50\u5c31\u5f00\u53d1\u51fa\u4e86\u4e00\u4e2a\u529f\u80fd\u786e\u5b9a\u4e14\u5b8c\u6574\u7684\u4ea7\u54c1\u3002"),(0,a.kt)("p",null,"\u5728\u4e0a\u8ff0\u8fd9\u6837\u4f20\u7edf\u7684\u8f6f\u4ef6\u4ea7\u54c1\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u8ba4\u4e3a\u5b83\u7684\u4e1a\u52a1\u903b\u8f91\u662f\u76f8\u5bf9\u5bb9\u6613\u88ab\u5f00\u53d1\u56e2\u961f\u7406\u89e3\u7684\uff0c\u56e0\u4e3a\u5c3d\u7ba1\u4e1a\u52a1\u7ec6\u8282\u90fd\u5e26\u6709\u5f88\u591a\u590d\u6742\u6027\uff0c\u4f46\u662f\u4e00\u4e2a\u56e2\u961f\u7814\u53d1\u7684\u67d0\u4e2a\u8f6f\u4ef6\u4ea7\u54c1\u5728\u6574\u4f53\u903b\u8f91\u4e0a\u5904\u4e8e\u67d0\u4e2a\u7279\u5b9a\u9886\u57df\uff0c\u6709\u4e00\u4e9b\u7279\u5b9a\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u5176\u590d\u6742\u5ea6\u57fa\u672c\u4e0a\u90fd\u662f\u5728\u53ef\u7ba1\u7406\u7684\u8303\u56f4\u4e4b\u5185\u3002\u4f46\u5982\u524d\u9762\u6240\u8ff0\uff0c\u5982\u679c\u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\uff0c\u5b83\u7684\u590d\u6742\u5ea6\u662f\u5f88\u96be\u88ab\u4eba\u7406\u89e3\u548c\u7ba1\u7406\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5e94\u8be5\u600e\u6837\u53bb\u5f00\u53d1\u4e00\u4e2a\u4f60\u751a\u81f3\u90fd\u4e0d\u80fd\u7406\u89e3\u6574\u4f53\u529f\u80fd\u7684\u590d\u6742\u7cfb\u7edf\u4ea7\u54c1\u5462\uff1f"),(0,a.kt)("p",null,"\u56de\u5230\u524d\u9762\u7535\u5b50\u8d2d\u7269\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u5b83\u5448\u73b0\u4e09\u4e2a\u7279\u5f81\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9996\u5148\u662f\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u90fd\u662f\u7531\u72ec\u7acb\u7684\u5b9e\u4f53\u5728\u5f00\u53d1\u53ca\u8fd0\u884c\uff0c\u8fd9\u662f\u590d\u6742\u7cfb\u7edf\u7684\u57fa\u672c\u7279\u5f81\uff1b"),(0,a.kt)("li",{parentName:"ul"},"\u5176\u6b21\u662f\u6bcf\u4e2a\u5b50\u7cfb\u7edf\u5185\u90e8\u90fd\u5728\u72ec\u7acb\u8fed\u4ee3\uff0c\u4f8b\u5982\u4ea4\u901a\u5b50\u7cfb\u7edf\u7531\u706b\u8f66\u5230\u52a8\u8f66\uff0c\u7531\u666e\u901a\u7684\u516c\u8def\u5230\u5168\u56fd\u9ad8\u901f\u8def\u7f51\uff1b\u7269\u6d41\u516c\u53f8\u7531\u4ee5\u524d\u7684\u957f\u9014\u914d\u9001\uff0c\u5230\u589e\u52a0\u6700\u540e\u4e00\u516c\u91cc\u7684\u9001\u8d27\u4e0a\u95e8\uff0c\u4e0a\u95e8\u53d6\u4ef6\uff1b"),(0,a.kt)("li",{parentName:"ul"},"\u518d\u6b21\uff0c\u6574\u4e2a\u7cfb\u7edf\u4e2d\u4e0d\u65ad\u6709\u65b0\u7684\u5b50\u7cfb\u7edf\u52a0\u5165\uff0c\u8fd9\u4e9b\u53ef\u80fd\u662f\u8ddf\u5176\u5b83\u67d0\u4e9b\u5b50\u7cfb\u7edf\u529f\u80fd\u76f8\u4f3c\u4f46\u662f\u5904\u7406\u4e0d\u540c\u7c7b\u578b\u4efb\u52a1\u7684\u5b50\u7cfb\u7edf\uff0c\u5982\u65b0\u589e\u4e0d\u540c\u7684\u7535\u5546\u5e73\u53f0\uff0c\u4ee5\u53ca\u65b0\u589e\u5feb\u9012\u516c\u53f8\uff1b\u4e5f\u53ef\u80fd\u662f\u57fa\u4e8e\u73b0\u6709\u6574\u4f53\u7cfb\u7edf\u80fd\u529b\u5ef6\u5347\u51fa\u6765\u7684\u5904\u7406\u65b0\u7684\u7c7b\u578b\u4e1a\u52a1\u7684\u5b50\u7cfb\u7edf\uff0c\u6bd4\u5982\u5916\u5356\u5c31\u662f\u4e00\u79cd\u4e0d\u540c\u4e8e\u4f20\u7edf\u7535\u5546\u7684\u670d\u52a1\u7c7b\u578b\uff0c\u4f46\u5b83\u662f\u57fa\u4e8e\u5728\u7ebf\u8d2d\u7269\u548c\u5feb\u9012\u53d1\u5c55\u5230\u4e00\u5b9a\u6210\u90fd\u65f6\u5019\u624d\u4f1a\u4ea7\u751f\u7684\u65b0\u7684\u670d\u52a1\u7c7b\u578b\uff0c\u53ca\u5b83\u7684\u51fa\u73b0\u9700\u8981\u57fa\u4e8e\u5176\u5b83\u7cfb\u7edf\u7684\u6f14\u8fdb\u3002")),(0,a.kt)("p",null,"\u4ece\u4e0a\u9762\u7684\u8fc7\u7a0b\u6211\u4eec\u53ef\u4ee5\u770b\u51fa\uff0c\u6574\u4e2a\u7535\u5b50\u8d2d\u7269\u7684\u590d\u6742\u7cfb\u7edf\u4e0d\u662f\u50cf\u4f20\u7edf\u8f6f\u4ef6\u90a3\u6837\u4e00\u6b21\u6027\u6784\u5efa\u51fa\u6765\u7684\uff0c\u5b83\u4eec\u662f\u8fdb\u5316\u51fa\u6765\u7684\u3002\u6240\u6709\u590d\u6742\u7cfb\u7edf\u7684\u529f\u80fd\u6f14\u8fdb\u90fd\u662f\u4e00\u4e2a\u8fdb\u5316\u7684\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u4e0b\u9762\u6211\u4eec\u6765\u5206\u6790\u6211\u4eec\u7684\u8f6f\u4ef6\u67b6\u6784\u5728\u4e00\u4e2a\u8fdb\u5316\u7cfb\u7edf\u7684\u6846\u67b6\u4e0b\u662f\u600e\u4e48\u5de5\u4f5c\u7684\u3002\u6839\u636e\u300a\u590d\u6742\u7684\u5f15\u64ce\u300b\u4e00\u4e66\uff0c\u6240\u6709\u8fdb\u5316\u8fc7\u7a0b\u7684\u5171\u540c\u7279\u5f81\u5305\u62ec\u4ee5\u4e0b5\u4e2a\u8981\u7d20\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u4e2a\u4f53"),"\uff0c\u5b83\u4eec\u4e00\u822c\u6709\u5404\u79cd\u540d\u5b57\uff0c\u6bd4\u5982\uff1a\u751f\u7269\u3001\u81ea\u4e3b\u4f53\u3001\u57fa\u56e0\u3001\u6982\u5ff5\u548c\u516c\u53f8\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u53ef\u9057\u4f20\u7684\u7279\u5f81"),"\uff0c\u4e2a\u4f53\u7684\u63cf\u8ff0\u4fe1\u606f\u3002\u4ee5\u67d0\u79cd\u5f62\u5f0f\u7f16\u7801\u4e3a\u4e2a\u4f53\u672c\u8eab\u7684\u4e00\u90e8\u5206\uff0c\u751f\u7269\u7684\u8fd9\u79cd\u4fe1\u606f\u7f16\u7801\u4e3aDNA\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u4e2a\u4f53\u53ef\u4ee5\u7e41\u6b96\u6216\u590d\u5236"),"\uff0c\u901a\u8fc7\u8fd9\u4e2a\u673a\u5236\uff0c\u4e2a\u4f53\u4ece\u7236\u8f88\u6216\u4e4b\u524d\u7684\u4e2a\u4f53\u62f7\u8d1d\u7f16\u7801\u4fe1\u606f\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u53d8\u5316\u673a\u5236"),"\uff0c\u4fe1\u606f\u5728\u590d\u5236\u3001\u7e41\u6b96\u6216\u7ef4\u62a4\u8fc7\u7a0b\u4e2d\u5fc5\u987b\u6709\u673a\u4f1a\u4ea7\u751f\u9002\u5e94\u5ea6\u7684\u6539\u53d8\u3002\u5728\u8bb8\u591a\u7cfb\u7edf\u4e2d\u53d8\u5316\u673a\u5236\u5c31\u662f\u590d\u5236\u8fc7\u7a0b\u4e2d\u4ea7\u751f\u7684\u9519\u8bef\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u57fa\u4e8e\u7279\u5f81\u7684\u9009\u62e9"),"\uff0c\u7e41\u6b96\uff08\u6216\u590d\u5236\uff09\u7684\u6210\u529f\u5fc5\u987b\u90e8\u5206\u53d6\u51b3\u4e8e\u5404\u4e2a\u4f53\u7f16\u7801\u4fe1\u606f\u6240\u63cf\u8ff0\u7684\u7279\u5f81\u3002")),(0,a.kt)("p",null,"\u53ea\u8981\u7cfb\u7edf\u540c\u65f6\u5177\u5907\u4e86\u8fd95\u4e2a\u8981\u7d20\uff0c\u4e2a\u4f53\u7ec4\u6210\u7684\u7fa4\u4f53\u4e2d\u7684\u7f16\u7801\u4fe1\u606f\u4ee5\u53ca\u76f8\u5e94\u7684\u4e2a\u4f53\u7279\u5f81\u5c31\u4f1a\u968f\u7740\u65f6\u95f4\u6539\u53d8\uff1b\u9057\u4f20\u7684\u4e2a\u4f53\u7279\u6027\u4e5f\u5fc5\u7136\u4f1a\u8d8a\u6765\u8d8a\u9002\u5e94\u51b3\u5b9a\u7e41\u6b96\uff08\u590d\u5236\uff09\u6210\u529f\u7387\u7684\u6807\u51c6\u3002"),(0,a.kt)("p",null,"\u4e0a\u8ff0\u8fd9\u662f\u8fdb\u5316\u8bba\u4e2d\u7684\u77e5\u8bc6\uff0c\u6bd4\u5982\u5728\u751f\u7269\u7684\u8fdb\u5316\u8bba\u4e2d\uff0c\u751f\u7269\u4e2a\u4f53\u643a\u5e26DNA\uff0c\u5176\u4e2d\u7f16\u7801\u4e86\u4e2a\u4f53\u672c\u8eab\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u7279\u5f81\u53ef\u4ee5\u901a\u8fc7\u7e41\u6b96\u88ab\u590d\u5236\u5230\u65b0\u7684\u4e2a\u4f53\u4e2d\uff0c\u5e76\u4e14\u8fd9\u4e2a\u590d\u5236\u7684\u8fc7\u7a0b\u4e2d\u53ef\u4ee5\u4ea7\u751f\u4e00\u5b9a\u7684\u53d8\u5f02\uff0c\u8fd9\u79cd\u53d8\u5f02\u901a\u5e38\u662f\u968f\u673a\u7684\uff0c\u8fdb\u800c\u5f62\u6210\u4e00\u4e9b\u65b0\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u65b0\u7684\u7279\u5f81\u80fd\u5426\u88ab\u4fdd\u7559\u4e0b\u6765\uff0c\u53d6\u51b3\u4e8e\u81ea\u7136\u9009\u62e9\uff0c\u5373\u5b83\u80fd\u4e0d\u80fd\u5177\u6709\u66f4\u5927\u7684\u4f18\u52bf\u4fdd\u969c\u4e2a\u4f53\u7684\u751f\u5b58\u3002\u5177\u6709\u8fd9\u79cd\u903b\u8f91\u7ed3\u6784\u7684\u7cfb\u7edf\u4f1a\u7d2f\u79ef\u9002\u5e94\u9009\u62e9\u6807\u51c6\u7684\u7f16\u7801\u4fe1\u606f\u3002\u5728\u81ea\u7136\u548c\u751f\u7269\u7cfb\u7edf\u4e2d\uff0c\u5b83\u4eec\u901a\u5e38\u5229\u7528\u968f\u673a\u53d8\u5316\u505a\u5230\u8fd9\u4e00\u70b9\uff0c\u6709\u65f6\u5019\u4e5f\u4f1a\u5229\u7528\u975e\u968f\u673a\u53d8\u5316\uff0c\u4ee5\u514d\u5076\u7136\u6027\u8fc7\u5927\uff0c\u4e0d\u5229\u4e8e\u4ea7\u751f\u6709\u7528\u6216\u6709\u8da3\u7684\u4e1c\u897f\u3002\u56e0\u6b64\u8fd9\u4e2a\u4fe1\u606f\u7d2f\u79ef\u548c\u6539\u8fdb\u7684\u8fc7\u7a0b\u5c31\u662f\u6982\u7387\u8ba1\u7b97\uff0c\u5b83\u6709\u6548\u7684\u539f\u56e0\u5f88\u7b80\u5355\uff0c\u5f88\u5c0f\u7684\u53d8\u5316\u901a\u5e38\u662f\u6709\u53ef\u80fd\u7684\uff0c\u800c\u65e0\u76ee\u7684\u7684\u5927\u53d8\u5316\u57fa\u672c\u4e0d\u53ef\u80fd\u53d1\u751f\uff0c\u901a\u8fc7\u5c0f\u7684\u5e76\u975e\u5f88\u4e0d\u53ef\u80fd\u7684\u53d8\u5316\uff0c\u5e76\u7d2f\u79ef\u597d\u7684\u53d8\u5316\uff0c\u5c31\u6709\u53ef\u80fd\u8fbe\u5230\u672c\u6765\u5f88\u96be\u8fbe\u5230\u7684\u76ee\u6807\u3002"),(0,a.kt)("p",null,"\u8fdb\u5316\u8bba\u7684\u601d\u60f3\u51e0\u4e4e\u53ef\u4ee5\u89e3\u91ca\u4e00\u5207\u751f\u7269\u548c\u5927\u81ea\u7136\u7684\u590d\u6742\u7cfb\u7edf\uff0c\u4f46\u5982\u679c\u76f4\u63a5\u5c06\u8fd9\u4e00\u5957\u65b9\u5f0f\u4f5c\u7528\u4e8e\u6211\u4eec\u7684\u8f6f\u4ef6\u5f00\u53d1\u5219\u662f\u4e0d\u5408\u9002\u7684\uff0c\u9996\u5148\u5b8c\u5168\u4f9d\u8d56\u4e8e\u968f\u673a\u53d8\u5316\u7684\u6548\u7387\u4f1a\u6bd4\u8f83\u4f4e\uff0c\u5176\u6b21\u901a\u8fc7\u6f2b\u957f\u7684\u81ea\u7136\u9009\u62e9\u5219\u4f1a\u4f7f\u7cfb\u7edf\u7684\u6f14\u8fdb\u5f88\u6162\uff0c\u60f3\u60f3\u6211\u4eec\u4eba\u7c7b\u7684\u667a\u529b\u6f14\u8fdb\u662f\u591a\u4e48\u6f2b\u957f\u7684\u4e00\u4e2a\u8fc7\u7a0b\u3002"),(0,a.kt)("p",null,"\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u4fdd\u7559\u8fdb\u5316\u8bba\u7684\u7cbe\u9ad3\uff0c\u540c\u65f6\u8981\u5728\u6548\u7387\u90e8\u5206\u505a\u51fa\u4e0d\u540c\u7684\u5904\u7406\u3002\u4e0b\u9762\u5206\u6790\u6211\u4eec\u7684\u67b6\u6784\u5176\u4e2d\u5305\u542b\u7684\u8fdb\u5316\u601d\u60f3\u3002"),(0,a.kt)("p",null,"\u5bf9\u4e8e\u8ba1\u7b97\u673a\uff0c\u8fdb\u5316\u7684\u4fe1\u606f\u662f\u8f6f\u4ef6\u4ee3\u7801\u3002\u6211\u4eec\u6765\u770b\u5728\u6211\u4eec\u7684\u7cfb\u7edf\u4e2d\u600e\u6837\u5bf9\u5e94\u548c\u89e3\u91ca\u8fd95\u4e2a\u8981\u7d20\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4e2a\u4f53"),"\uff1a\u5c31\u662f\u5305\u542b\u4e86\u81ea\u8eab\u529f\u80fd\u4ee3\u7801\u7684\u5404\u4e2a\u5b50\u7cfb\u7edf\uff0c\u4f8b\u5982\u4e00\u4e2a\u667a\u80fd\u4f53\uff08Agent\uff09\u7a0b\u5e8f\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u53ef\u9057\u4f20\u7684\u7279\u5f81"),"\uff1a\u6211\u4eec\u7684\u4ee3\u7801\u663e\u7136\u50cfDNA\u7f16\u7801\u4e86\u751f\u7269\u4e2a\u4f53\u7279\u5f81\u610f\u4e49\uff0c\u5b83\u7f16\u7801\u7684\u6574\u4e2a\u7a0b\u5e8f\u7684\u7279\u5f81\uff08\u529f\u80fd\uff09\uff0c\u5f88\u663e\u7136\uff0c\u4ee3\u7801\u662f\u53ef\u4ee5\u590d\u5236\u548c\u9057\u4f20\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4e2a\u4f53\u53ef\u4ee5\u7e41\u6b96\u6216\u590d\u5236"),"\uff1a\u4f60\u53ea\u8981\u590d\u5236\u4e86\u53e6\u4e00\u4e2a\u667a\u80fd\u4f53\u7684\u4ee3\u7801\u6216\u8005\u8bf4\u4f60\u7684\u7cfb\u7edf\u4ee5\u67d0\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5305\u542b\u6216\u8005\u8c03\u7528\u53e6\u4e00\u4e2a\u5b50\u7cfb\u7edf\u7684\u4ee3\u7801\uff0c\u5176\u5b9e\u8fd9\u5728\u8f6f\u4ef6\u4e2d\u4e5f\u662f\u4e00\u79cd\u5f62\u5f0f\u7684\u590d\u5236\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u53d8\u5316\u7684\u673a\u5236"),"\uff1a\u751f\u7269\u6216\u81ea\u7136\u7cfb\u7edf\u7684\u53d8\u5316\u673a\u5236\u4e3b\u8981\u662f\u9760\u968f\u673a\u8fc7\u7a0b\uff0c\u5b83\u4e3b\u8981\u4f53\u73b0\u5728\u5bf9\u7f16\u7801\u4fe1\u606f\u7684\u90e8\u5206\u968f\u673a\u4fee\u6539\u3002\u6211\u4eec\u7684\u8f6f\u4ef6\u7cfb\u7edf\u663e\u7136\u4e0d\u662f\u5bf9\u5df2\u6709\u7684\u7a0b\u5e8f\u53bb\u6dfb\u52a0\u4e00\u4e9b\u968f\u673a\u7684\u4fee\u6539\uff0c\u56e0\u4e3a\u90a3\u6837\u7684\u7a0b\u5e8f\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u6839\u672c\u5c31\u65e0\u6cd5\u8fd0\u884c\u3002\u6211\u4eec\u7684\u968f\u673a\u6027\u4e3b\u8981\u6765\u6e90\u4e8e\u4e00\u4e2a\u65b0\u7684\u5f00\u53d1\u8005\u50cf\u4e00\u4e2a\u5df2\u6709\u7684\u7a0b\u5e8f\u4e2d\u6dfb\u52a0\u90e8\u5206\u80fd\u591f\u4fee\u6539\u7a0b\u5e8f\u884c\u4e3a\u7684\u4ee3\u7801\uff0c\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u539f\u6765\u7684\u7a0b\u5e8f\u5305\u542bA\u7ec4\u4ef6\uff0c\u73b0\u5728\u501f\u52a9\u6211\u4eec\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u8fd9\u6837\u7684\u7a0b\u5e8f\u53ef\u4ee5\u5f88\u65b9\u4fbf\u4e0e\u5176\u5b83\u7a0b\u5e8f\u8fdb\u884c\u4ea4\u4e92\uff0c\u73b0\u5728\u6709\u53e6\u4e00\u4e2a\u5f00\u53d1\u8005\u5f00\u53d1\u4e86\u4e00\u4e2a\u80fd\u591f\u4e0eA\u7ec4\u4ef6\u8fdb\u884c\u4e92\u64cd\u4f5c\u7684\u7a0b\u5e8f\uff0c\u7136\u540e\u67d0\u4e2a\u7528\u6237\u540c\u65f6\u8d2d\u4e70\u4e86A\u548cB\u4e24\u4e2a\u7ec4\u4ef6\uff0c\u90a3\u4e48\u5b83\u4eec\u6574\u4f53\u770b\u5c31\u662f\u4ea7\u751f\u4e86\u53d8\u5316\u3002\u6240\u4ee5\u6211\u4eec\u7684\u5b50\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u6027\uff0c\u4ee5\u53ca\u51fd\u6570\u7ea7\u7684\u53ef\u7ec4\u5408\u6027\uff0c\u8fd9\u4e9b\u90fd\u662f\u53d8\u5316\u7684\u673a\u5236\uff0c\u6211\u4eec\u540e\u9762\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u5176\u4e2d\u7684\u6280\u672f\u7ec6\u8282\u3002"),(0,a.kt)("p",null,"\u5728\u4f20\u7edf\u7684\u8f6f\u4ef6\u4e2d\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5bf9\u5df2\u6709\u7684\u8f6f\u4ef6\u8fdb\u884c\u4fee\u6539\uff0c\u4ece\u800c\u5b9e\u73b0\u7c7b\u4f3c\u4e0a\u9762\u8fd9\u79cd\u53d8\u5316\u3002\u4f46\u662f\u56e0\u4e3a\u4f20\u7edf\u7684\u8f6f\u4ef6\u53ea\u662f\u5bf9\u5f00\u53d1\u5546\u5185\u90e8\u662f\u516c\u5f00\u7684\uff0c\u6240\u4ee5\u53ea\u6709\u4e00\u4e2a\u5f88\u5c0f\u7684\u56e2\u4f53\u80fd\u591f\u6539\u8fdb\u8f6f\u4ef6\uff0c\u8fd9\u5c31\u4f1a\u4f7f\u5f97\u8f6f\u4ef6\u7684\u53d8\u5316\u7684\u6982\u7387\u975e\u5e38\u5c0f\uff0c\u751a\u81f3\u5728\u67d0\u4e2a\u7a0b\u5ea6\u4e4b\u540e\u505c\u6b62\u53d8\u5316\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u5f00\u53d1\u5546\u7684\u7814\u53d1\u4eba\u5458\u6570\u91cf\u5728\u6574\u4e2a\u4eba\u7c7b\u5b8c\u5168\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u3002\u800c\u5728\u4e00\u4e2a\u5f00\u653e\u7684\u8f6f\u4ef6\u65f6\u95f4\uff0c\u8fd9\u6837\u7684\u53d8\u5316\u662f\u5b8c\u5168\u4e0d\u53d7\u9650\u5236\u7684\uff0c\u56e0\u6b64\u8fdb\u5316\u7684\u6982\u7387\u66f4\u5927\uff0c\u66f4\u6709\u53ef\u80fd\u8fdb\u5316\u51fa\u5b8c\u5168\u610f\u60f3\u4e0d\u5230\u7684\u7ed3\u679c\uff0c\u56e0\u4e3a\u8fd9\u91cc\u9762\u80fd\u591f\u5bfc\u81f4\u53d8\u5316\u7684\u5f00\u53d1\u8005\u4eba\u5458\u7684\u6570\u91cf\u57fa\u6570\u662f\u975e\u5e38\u5927\u7684\uff0c\u540e\u9762\u6211\u4eec\u4e5f\u5c06\u8be6\u7ec6\u5206\u6790\u6211\u4eec\u600e\u6837\u901a\u8fc7\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784\u6765\u4f7f\u5f97\u66f4\u591a\u7684\u975e\u7a0b\u5e8f\u5458\u53ef\u4ee5\u7f16\u5199\u7a0b\u5e8f\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u57fa\u4e8e\u7279\u5f81\u7684\u9009\u62e9"),"\uff1a\u8fd9\u4e9b\u53d8\u5316\u51fa\u7684\u673a\u5236\u662f\u5426\u6709\u6548\uff0c\u53d6\u51b3\u4e8e\u5b83\u4eec\u662f\u5426\u9002\u5e94\u548c\u6ee1\u8db3\u4eba\u4eec\u7684\u67d0\u4e9b\u76ee\u6807\u3002\u6240\u4ee5\u5f53\u8fd9\u4e9b\u53d8\u5316\u53d1\u751f\u4e4b\u540e\uff0c\u65b0\u7684\u5b50\u7cfb\u7edf\u4f1a\u4ea7\u751f\uff0c\u7136\u540e\u4f1a\u6709\u4e00\u90e8\u5206\u7528\u6237\u6709\u673a\u4f1a\u662f\u4f7f\u7528\u8fd9\u4e9b\u65b0\u7684\u5b50\u7cfb\u7edf\uff0c\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u5f88\u597d\u5730\u89e3\u51b3\u4e86\u4eba\u4eec\u5bf9\u6570\u5b57\u4e16\u754c\u7684\u4e00\u4e9b\u9700\u6c42\uff0c\u90a3\u4e48\u5b83\u4eec\u5c31\u4f1a\u88ab\u9009\u62e9\uff0c\u5373\u5b83\u4eec\u9002\u5e94\u4e86\u9009\u62e9\uff0c\u5426\u5219\u8fd9\u6837\u7684\u65b0\u7684\u5b50\u7cfb\u7edf\u5219\u4f1a\u5f88\u5feb\u88ab\u6dd8\u6c70\u3002"),(0,a.kt)("p",null,"\u8fd9\u79cd\u9009\u62e9\u673a\u5236\u5728\u8f6f\u4ef6\u7684\u6d88\u8d39\u4e2d\u5012\u662f\u975e\u5e38\u6709\u6548\uff0c\u4f46\u662f\u8fd9\u79cd\u65b9\u5f0f\u663e\u7136\u8fd8\u6ca1\u6709\u771f\u6b63\u4fc3\u8fdb\u8f6f\u4ef6\u5927\u89c4\u6a21\u7684\u8fdb\u5316\uff0c\u4f8b\u5982\u770b\u770b\u6211\u4eec\u624b\u673a\u91cc\u7684\u5e94\u7528\u53ca\u5176\u5f62\u6001\uff0c\u5927\u90e8\u5206\u7684\u5e94\u7528\u5df2\u7ecf\u6709\u5f88\u591a\u5e74\u6ca1\u6709\u592a\u5927\u7684\u8fdb\u5316\u4e86\uff0c\u800c\u76f8\u53cd\uff0c\u6211\u4eec\u7684\u6570\u5b57\u4e16\u754c\u7684\u529f\u80fd\u4e5f\u6ca1\u6709\u53d8\u5f97\u975e\u5e38\u7684\u4e30\u5bcc\u548c\u667a\u80fd\u3002\u8fd9\u79cd\u7f13\u6162\u7684\u8fdb\u5316\u4e0e\u4e24\u4e2a\u8981\u7d20\u6709\u5173\uff0c\u4e00\u662f\u4e0a\u9762\u8bb2\u5230\u7684\u53d8\u5316\u7684\u7f13\u6162\uff0c\u4e8c\u662f\u8ddf\u8fd9\u91cc\u7684\u9009\u62e9\u673a\u5236\u6709\u5173\uff0c\u5373\u4eba\u4eec\u5176\u5b9e\u6ca1\u6709\u592a\u591a\u9009\u62e9\uff0c\u5c31\u5bfc\u81f4\u9009\u62e9\u5e76\u6ca1\u6709\u5728\u6574\u4e2a\u7cfb\u7edf\u4e2d\u8868\u73b0\u51fa\u5f88\u5f3a\u7684\u529b\u91cf\u3002"),(0,a.kt)("p",null,"\u73b0\u4ee3\u7684\u8f6f\u4ef6\u90fd\u7d2f\u79ef\u4e86\u5f88\u591a\u7684\u529f\u80fd\uff0c\u7528\u6237\u8981\u4e48\u8d2d\u4e70\u53ca\u4f7f\u7528\u6574\u4e2a\u8f6f\u4ef6\uff0c\u8981\u4e48\u5c31\u4f7f\u7528\u4e0d\u4e86\u8f6f\u4ef6\uff0c\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u6211\u4eec\u5fc5\u987b\u8981\u4f7f\u7528\u5176\u4e2d\u7684\u6838\u5fc3\u4ea7\u54c1\u529f\u80fd\uff0c\u6240\u4ee5\u4e0d\u5f97\u4e0d\u5b89\u88c5\uff0c\u4f46\u662f\u5176\u4e2d\u5305\u542b\u7684\u5927\u91cf\u529f\u80fd\u6211\u4eec\u5b8c\u5168\u65e0\u6cd5\u9009\u62e9\uff0c\u56e0\u4e3a\u6ca1\u6709\u9009\u62e9\u8fd9\u4e5f\u4f1a\u5bfc\u81f4\u5f00\u53d1\u5546\u5e76\u6ca1\u6709\u90a3\u4e48\u5927\u7684\u9009\u62e9\u538b\u529b\u3002"),(0,a.kt)("p",null,"\u6211\u4eec\u7684\u7cfb\u7edf\u662f\u4e00\u4e2a\u5b8c\u5168\u52a8\u6001\u7684\u7cfb\u7edf\uff0c\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u5b8c\u5168\u4e0d\u540c\u7684\u5b50\u7cfb\u7edf\u7ec4\u5408\uff0c\u8fd9\u4e5f\u5c31\u610f\u5473\u7740\u7528\u6237\u5bf9\u6bcf\u4e2a\u5f88\u5c0f\u7684\u5b50\u7cfb\u7edf\u6709\u5f88\u9ad8\u6548\u7684\u9009\u62e9\u673a\u5236\uff0c\u8fd9\u5c31\u4f1a\u50ac\u751f\u4e00\u4e2a\u5b8c\u5168\u4e0d\u540c\u6548\u7387\u7684\u8fdb\u5316\u7cfb\u7edf\u3002\u5728\u6211\u4eec\u7cfb\u7edf\u67b6\u6784\u4e2d\uff0c\u52a8\u6001\u6027\u548c\u4e92\u64cd\u4f5c\u6027\u5728\u9057\u4f20\u3001\u53d8\u5316\u548c\u9009\u62e9\u8fd9\u4e09\u4e2a\u91cd\u8981\u7684\u8fdb\u5316\u8981\u7d20\u4e2d\u90fd\u53d1\u6325\u4e86\u91cd\u8981\u4f5c\u7528\uff0c\u4ece\u800c\u6574\u4f53\u5448\u73b0\u51fa\u66f4\u9ad8\u6548\u7684\u8fdb\u5316\u6548\u7387\u3002\u901a\u8fc7\u8fd9\u79cd\u8fdb\u5316\u7684\u529b\u91cf\uff0c\u6f14\u8fdb\u51fa\u590d\u6742\u7684\u7cfb\u7edf\u529f\u80fd\uff0c\u4ece\u800c\u4f7f\u6570\u5b57\u4e16\u754c\u8868\u73b0\u51fa\u66f4\u52a0\u667a\u80fd\u3001\u590d\u6742\u548c\u4e30\u5bcc\u3002"),(0,a.kt)("h3",{id:"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784"},"\u5916\u5728\u7ed3\u6784\u548c\u5185\u5728\u7ed3\u6784"),(0,a.kt)("p",null,"\u524d\u9762\u6211\u4eec\u4ece\u4e92\u64cd\u4f5c\u548c\u590d\u6742\u7cfb\u7edf\u673a\u5236\u7684\u5c42\u9762\u5bf9RealityIS\u7684\u67b6\u6784\u54f2\u5b66\u8fdb\u884c\u4e86\u4e00\u4e9b\u4ecb\u7ecd\uff0c\u5728\u4e86\u89e3\u8fd9\u4e24\u4e2a\u90e8\u5206\u7684\u5185\u5bb9\u4e4b\u540e\uff0c\u6211\u4eec\u518d\u6765\u7cfb\u7edf\u5730\u68b3\u7406\u4e00\u4e0b\u5176\u4e2d\u7684\u903b\u8f91\uff0c\u4f7f\u6211\u4eec\u5bf9\u6574\u4e2a\u7cfb\u7edf\u67b6\u6784\u6709\u66f4\u6e05\u6670\u7684\u8ba4\u8bc6\u3002"),(0,a.kt)("p",null,"\u4ece\u6574\u4f53\u770b\uff0cRealityIS\u7684\u4e24\u4e2a\u8bbe\u8ba1\u76ee\u6807\u6216\u7279\u6027\u662f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u4e92\u64cd\u4f5c\u6027")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u81ea\u6211\u8fdb\u5316"))),(0,a.kt)("p",null,"\u6240\u6709\u7684\u6280\u672f\u601d\u60f3\u548c\u5bf9\u73b0\u6709\u6280\u672f\u7684\u6539\u8fdb\u601d\u8def\u90fd\u662f\u56f4\u7ed5\u4e0a\u8ff0\u4e24\u5927\u76ee\u6807\u7684\uff0c\u5176\u4e2d\u4e92\u64cd\u4f5c\u6027\u89e3\u51b3\u7684\u95ee\u9898\u662f\u8981\u8ba9\u4efb\u4f55\u5b50\u7a0b\u5e8f\u80fd\u591f\u975e\u5e38\u8f7b\u6613\u5730\u8ddf\u5916\u754c\u901a\u4fe1\u548c\u4ea4\u4e92\uff0c\u8fd9\u65e2\u662f\u590d\u6742\u7cfb\u7edf\u7ed3\u6784\u6240\u9700\u8981\u7684\u57fa\u672c\u7279\u6027\uff0c\u4e5f\u662f\u5b9e\u73b0\u4e00\u4e2a\u5e7f\u6cdb\u76f8\u4e92\u534f\u4f5c\u800c\u7e41\u8363\u7684\u6570\u5b57\u7ecf\u6d4e\u7684\u57fa\u7840\uff0c\u60f3\u60f3\u6211\u4eec\u73b0\u5b9e\u4e16\u754c\u4eba\u4e0e\u4eba\u3001\u5b9e\u4f53\u4e0e\u5b9e\u4f53\u3001\u4eba\u4e0e\u793e\u4f1a\u7b49\u5404\u79cd\u5173\u7cfb\u90fd\u662f\u6709\u975e\u5e38\u5e7f\u6cdb\u800c\u6df1\u523b\u7684\u4ea4\u4e92\u7684\uff0c\u5728\u8ba1\u7b97\u673a\u7684\u4e16\u754c\uff0c\u4ea4\u4e92\u5c31\u662f\u4e92\u64cd\u4f5c\u3002"),(0,a.kt)("p",null,"\u81ea\u6211\u8fdb\u5316\uff0c\u662f\u590d\u6742\u7cfb\u7edf\u6784\u5efa\u548c\u6f14\u5316\u7684\u6838\u5fc3\u673a\u5236\uff0c\u6211\u4eec\u4e0d\u662f\u4e00\u6b21\u6027\u901a\u8fc7\u67d0\u4e2a\u5b9e\u4f53\u5c31\u5f00\u53d1\u4e86\u6574\u4e2a\u7cfb\u7edf\u7684\u529f\u80fd\uff0c\u800c\u662f\u901a\u8fc7\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u76f8\u4e92\u534f\u4f5c\u6765\u8fdb\u5316\u51fa\u5404\u79cd\u66f4\u590d\u6742\u7684\u529f\u80fd\uff0c\u5bf9\u5e94\u7684\u8f6f\u4ef6\u5f00\u53d1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u8fd9\u8981\u6c42\u7cfb\u7edf\u5177\u6709\u975e\u5e38\u52a8\u6001\u7684\u80fd\u529b\uff0c\u80fd\u591f\u52a8\u6001\u5730\u65b0\u589e\u6216\u8005\u5220\u9664\u5b50\u7cfb\u7edf\uff0c\u540c\u65f6\u4e5f\u8981\u6c42\u8fd9\u4e9b\u5b50\u7cfb\u7edf\u4e4b\u95f4\u5177\u6709\u81ea\u6cbb\u7684\u80fd\u529b\uff0c\u8fd9\u6837\u7cfb\u7edf\u624d\u80fd\u81ea\u53d1\u5730\u8fdb\u884c\u8fdb\u5316\uff0c\u800c\u4e0d\u9700\u8981\u5168\u5c40\u5e72\u9884\u3002"),(0,a.kt)("p",null,"\u56f4\u7ed5\u7740\u4e24\u4e2a\u76ee\u6807\uff0c\u6211\u4eec\u53d1\u73b0\u4f20\u7edf\u7684\u8f6f\u4ef6\u6784\u9020\u4f53\u7cfb\u6839\u672c\u5c31\u662f\u8ddf\u8fd9\u4e24\u4e2a\u76ee\u6807\u76f8\u6096\u7684\uff0c\u8fd9\u4e3b\u8981\u4f53\u73b0\u5728\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u6570\u636e\u4e0e\u4ee3\u7801\u7684\u8026\u5408\u4f7f\u8f6f\u4ef6\u5931\u53bb\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u540c\u65f6\u4e5f\u9020\u6210\u4e86\u4e2d\u5fc3\u5316\u6cbb\u7406\u7684\u7ed3\u679c"),(0,a.kt)("li",{parentName:"ul"},"\u5c40\u90e8\u4ee3\u7801\u5728\u83b7\u53d6\u51b3\u7b56\u4e0a\u4e0b\u6587\u65f6\u4e0e\u5168\u5c40\u4fe1\u606f\u7684\u8026\u5408\u4f7f\u8f6f\u4ef6\u5931\u53bb\u4e86\u81ea\u6cbb\u7684\u80fd\u529b")),(0,a.kt)("p",null,"\u9488\u5bf9\u8fd9\u4e24\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u5206\u522b\u4ece\u533a\u5757\u94fe\u548c\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u4e2d\u5bfb\u627e\u5230\u5bf9\u5e94\u7684\u7406\u8bba\u652f\u6301\uff0c\u4f7f\u6211\u4eec\u53ef\u4ee5\u83b7\u5f97\u4e00\u4e2a\u975e\u5e38\u7b80\u6d01\u3001\u5e72\u51c0\u3001\u7a33\u5b9a\u3001\u800c\u53c8\u529f\u80fd\u5f3a\u5927\u7684\u6280\u672f\u67b6\u6784\u3002\u5b83\u4eec\u5f62\u6210\u6574\u4e2a\u6280\u672f\u67b6\u6784\u7684\u4e24\u4e2a\u7ed3\u6784\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u5916\u90e8\u7ed3\u6784\u548c\u5185\u90e8\u7ed3\u6784\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("p",null,(0,a.kt)("img",{src:l(4563).Z,width:"765",height:"235"})),(0,a.kt)("p",null,"\u9488\u5bf9\u4e92\u64cd\u4f5c\u6027\uff0c\u6211\u4eec\u4ece\u533a\u5757\u94fe\u4e2d\u5f97\u5230\u542f\u793a\uff0c\u5c3d\u7ba1\u4e0d\u662f\u5f88\u76f4\u63a5\uff0c\u4f46\u662f\u5b83\u4e3a\u4e86\u5b9e\u73b0\u53bb\u4e2d\u5fc3\u5316\u91c7\u53d6\u7684\u5c06\u6570\u636e\u4e0e\u8ba1\u7b97\u5206\u79bb\uff0c\u5e76\u5728\u865a\u62df\u673a\u4e2d\u5728\u8fd0\u884c\u65f6\u5bf9\u6570\u636e\u8fdb\u884c\u6388\u6743\u7684\u6280\u672f\u6d41\u7a0b\uff0c\u88ab\u6211\u4eec\u5f88\u5de7\u5999\u5730\u7528\u4e00\u5957\u52a8\u6001\u7684\u7c7b\u578b\u7cfb\u7edf\u8fdb\u884c\u4e00\u822c\u5316\uff0c\u4f7f\u4e4b\u80fd\u591f\u652f\u6301\u66f4\u5e7f\u6cdb\u7684\u6570\u636e\u7c7b\u578b\uff0c\u540c\u65f6\u53c8\u80fd\u786e\u4fdd\u7528\u6237\u7684\u6570\u636e\u5b89\u5168\u3002\u8fd9\u6837\u7684\u8c03\u6574\u4f7f\u5f97\u6211\u4eec\u5b8c\u5168\u5b9e\u73b0\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u6027\u4e0d\u5149\u4f7f\u5f97\u4e0d\u540c\u5f00\u53d1\u8005\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u5728\u4e00\u4e9b\u534f\u540c\u8ba1\u7b97\uff0c\u76f8\u4e92\u4ea4\u4e92\uff0c\u66f4\u91cd\u8981\u7684\u662f\u4e3a\u590d\u6742\u7cfb\u7edf\u7684\u6784\u5efa\u5960\u5b9a\u4e86\u57fa\u7840\uff1a\u8fd9\u6837\u4e00\u4e2a\u7cfb\u7edf\u7684\u529f\u80fd\u6709\u673a\u4f1a\u88ab\u591a\u4e2a\u81ea\u6cbb\u7684\u5b50\u7cfb\u7edf\u8fdb\u884c\u878d\u5408\u800c\u5f62\u6210\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u53ea\u6709\u4e00\u5bb6\u5f00\u53d1\u5546\u6784\u5efa\uff0c\u90a3\u6837\u5176\u80fd\u63d0\u4f9b\u7684\u529f\u80fd\u7684\u590d\u6742\u5ea6\u5c06\u4f1a\u8fdc\u8fdc\u4f4e\u4e8e\u590d\u6742\u7cfb\u7edf\u3002\u6211\u4eec\u79f0\u8fd9\u4e9b\u7531\u4e92\u64cd\u4f5c\u6027\u5e26\u6765\u7684\u7ed3\u6784\u4e3a\u5916\u90e8\u7ed3\u6784\uff0c\u5b83\u53cd\u5e94\u7684\u662f\u5b50\u7cfb\u7edf\u4e0e\u5916\u754c\u4ea4\u4e92\u7684\u80fd\u529b\u3002"),(0,a.kt)("p",null,"\u9488\u5bf9\u81ea\u6211\u8fdb\u5316\uff0c\u6211\u4eec\u4ece\u590d\u6742\u7cfb\u7edf\u7684\u7406\u8bba\u4e2d\u5f97\u5230\u542f\u793a\uff0c\u5176\u6838\u5fc3\u7684\u601d\u60f3\u662f\u81ea\u6cbb\u80fd\u529b\uff0c\u5373\u5b50\u7cfb\u7edf\u53ef\u4ee5\u5728\u4e0d\u7ecf\u8fc7\u4e2d\u592e\u6216\u8005\u5168\u5c40\u63a7\u5236\u7684\u60c5\u51b5\u4e0b\u5b9e\u73b0\u5c40\u90e8\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u56e0\u4e3a\u8fd9\u79cd\u4ea4\u4e92\u4e0d\u5149\u5e26\u6765\u5b89\u5168\u9690\u60a3\uff0c\u8fd8\u4f7f\u5f97\u5b50\u7cfb\u7edf\u53ef\u80fd\u4f1a\u53d7\u9650\u4e8e\u4e2d\u592e\u63a7\u5236\u5668\u800c\u4e0d\u5bb9\u6613\u53bb\u5355\u72ec\u6269\u5c55\u80fd\u529b\uff0c\u800c\u8fd9\u662f\u8fdb\u5316\u7cfb\u7edf\u7684\u57fa\u7840\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u6211\u4eec\uff0c\u6211\u4eec\u4ece\u6e38\u620f\u5f00\u53d1\u754c\u6700\u65b0\u7684ECS\u67b6\u6784\u5f97\u5230\u542f\u793a\uff0c\u5e76\u7ed3\u5408\u6211\u4eec\u7684\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf\uff0c\u5b9e\u73b0\u4e00\u4e2a\u57fa\u4e8e\u7c7b\u578b\u7684\u5c40\u90e8\u81ea\u6cbb\u67b6\u6784\uff0c\u5728\u8fd9\u6837\u7684\u67b6\u6784\u4e2d\uff0c\u5b50\u7cfb\u7edf\u53ea\u9700\u8981\u58f0\u660e\u5173\u6ce8\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5373\u53ef\u4ee5\u5b9a\u4e49\u4e0e\u5176\u5b83\u5b50\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u5173\u7cfb\u3002\u56f4\u7ed5\u8fd9\u4e9b\u673a\u5236\uff0c\u6211\u4eec\u8fd8\u8fdb\u4e00\u6b65\u5206\u6790\u4e86\u6574\u4e2a\u7cfb\u7edf\u7684\u8fdb\u5316\u8fc7\u7a0b\uff0c\u5b83\u9075\u5faa\u751f\u7269\u6216\u81ea\u7136\u754c\u4e2d\u590d\u6742\u7cfb\u7edf\u8fdb\u5316\u76f8\u4f3c\u7684\u539f\u7406\u6216\u8fc7\u7a0b\u3002\u6211\u4eec\u79f0\u8fd9\u90e8\u5206\u7ed3\u6784\u4e3a\u5185\u5728\u7ed3\u6784\uff0c\u5b83\u51b3\u5b9a\u7740\u4e00\u4e2a\u5b50\u7cfb\u7edf\u5185\u90e8\u600e\u6837\u53bb\u6f14\u8fdb\u548c\u8fdb\u5316\u3002"),(0,a.kt)("p",null,"\u5728\u5185\u90e8\u7ed3\u6784\u548c\u5916\u90e8\u7ed3\u6784\u4e4b\u5916\u7684\u7cfb\u7edf\u4e2d\uff0c\u7528\u6237\u5219\u7262\u7262\u638c\u63e1\u7740\u6240\u6709\u7684\u6570\u636e\u6743\u9650\uff0c\u5e76\u901a\u8fc7\u6570\u636e\u6743\u9650\u63a7\u5236\u7740\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fd0\u884c\uff0c\u5305\u62ec\u4e00\u4e2a\u5b50\u7cfb\u7edf\u662f\u5426\u53ef\u4ee5\u8bbf\u95ee\u7528\u6237\u7684\u67d0\u4e9b\u6570\u636e\uff0c\u4ee5\u53ca\u4e00\u4e2a\u5b50\u7cfb\u7edf\u662f\u5426\u53ef\u4ee5\u4e0e\u5176\u5b83\u5b50\u7cfb\u7edf\u8fdb\u884c\u4ea4\u4e92\uff0c\u751a\u81f3\u4e00\u4e2a\u5b50\u7cfb\u7edf\u5373\u4f7f\u5df2\u7ecf\u88ab\u7528\u6237\u5b89\u88c5\u5230\u7528\u6237\u7684\u5e94\u7528\u73af\u5883\uff0c\u5b83\u4ecd\u7136\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u88ab\u5b8c\u5168\u7981\u6b62\u8fd0\u884c\u3002\u7528\u6237\u5bf9\u6570\u636e\u7684\u6743\u9650\u88ab\u7262\u7262\u5730\u96c6\u6210\u5230\u7cfb\u7edf\u7684\u865a\u62df\u673a\u4e2d\uff0c"),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"realityis\u7cfb\u7edf\u67b6\u6784"},"RealityIS\u7cfb\u7edf\u67b6\u6784"),(0,a.kt)("p",null,"\u5bf9\u4e92\u64cd\u4f5c\u6027\u7684\u6539\u8fdb\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7531\u8c03\u7528\u8fc7\u7a0b\u83b7\u53d6\u7ed3\u679c\uff0c\u53d8\u4e3a\u76f4\u63a5\u83b7\u53d6\u5176\u8fc7\u7a0b\uff0c\u5373\u5c06\u88ab\u8c03\u8fc7\u7a0b\u6267\u884c\u7684\u7ed3\u679c\u5b58\u50a8\u5728\u4e00\u4e2a\u8bed\u4e49\u6570\u636e\uff0c\u8fd9\u6837\u5c31\u662f\u4e00\u4e2a\u7c7b\u578b\u6216\u8005\u6570\u636e\u672c\u8eab\u5305\u542b\u4e86\u4e92\u64cd\u4f5c\u6027\uff0c\u5c31\u7b80\u5316\u4e3a\u6570\u636e\u7ba1\u7406\u7684\u95ee\u9898\uff08\u6e38\u620f\u4e2d\u7684\u673a\u5236\uff09")),(0,a.kt)("h3",{id:"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf"},"\u6784\u5efa\u4e00\u4e2a\u52a8\u6001\u7c7b\u578b\u7cfb\u7edf"),(0,a.kt)("p",null,"\u4e24\u4e2a\u76ee\u7684\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7c7b\u578b\u89e3\u6790\uff0c\u505a\u4f9d\u8d56\u5206\u79bb"),(0,a.kt)("li",{parentName:"ul"},"\u6570\u636e\u548c\u529f\u80fd\u5206\u79bb\uff0c\u901a\u8fc7\u7c7b\u578b\u7684\u89e3\u6790\u63a7\u5236\uff0c\u6765\u963b\u6b62\u672a\u6388\u6743\u7a0b\u5e8f\u7684\u8bbf\u95ee\uff0c\u5f53\u7136\u5b9e\u9645\u4e0d\u662f\u8fd0\u884c\u5230\u67d0\u4e2a\u51fd\u6570\u65f6\u5728\u68c0\u67e5\uff0c\u800c\u662f\u7ec4\u4ef6\u53ef\u4ee5\u6839\u636e\u7c7b\u578b\u4fe1\u606f\u63d0\u524d\u68c0\u67e5\u51fa\u6765")),(0,a.kt)("p",null,"\u52a8\u6001\u6388\u6743\u5f88\u91cd\u8981\uff0c\u5982\u679c\u6ca1\u6709\u8fd9\u4e2a\u63a7\u5236\uff0c\u53ea\u662f\u5728Actor\u4e4b\u95f4\u4f20\u9012\u5b57\u7b26\u4e32\uff0c\u610f\u5473\u7740\u67d0\u4e2aActor\u88ab\u6267\u884c\uff0c\u5c31\u65e0\u6cd5\u63a7\u5236\u5b83\u8bbf\u95ee\u6570\u636e\u3002"),(0,a.kt)("h3",{id:"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61"},"\u5efa\u7acb\u4e00\u4e2a\u4e92\u64cd\u4f5c\u62bd\u8c61"),(0,a.kt)("p",null,"\u903b\u8f91\u62bd\u8c61\uff0c\u4e0d\u6d89\u53ca\u7f16\u7a0b\u8bed\u8a00\u4e0e\u7f16\u8bd1\u5668\u5f00\u53d1"),(0,a.kt)("h3",{id:"\u7b80\u5316\u6570\u636e\u83b7\u53d6"},"\u7b80\u5316\u6570\u636e\u83b7\u53d6"),(0,a.kt)("h3",{id:"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784"},"\u7b80\u5316\u7a0b\u5e8f\u7ed3\u6784"),(0,a.kt)("h3",{id:"\u590d\u6742\u7cfb\u7edf\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c"},"\u590d\u6742\u7cfb\u7edf\uff1a\u7531\u4e3b\u52a8\u5230\u88ab\u52a8\u81ea\u52a8\u8fd0\u884c"),(0,a.kt)("p",null,"\u5c40\u90e8\u9a71\u52a8"),(0,a.kt)("p",null,"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c\uff0c\u8ddf\u7528\u6237\u7684\u4e3b\u52a8\u8f93\u5165\u4e0d\u662f\u540c\u6b65\u7684\uff0c\u53ef\u80fd\u662f\u81ea\u52a8\u6267\u884c\u7684\uff0c\u7528\u6237\u600e\u4e48\u611f\u77e5\u7cfb\u7edf\u53d8\u5316\u72b6\u6001"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c\uff0c\u8ddf\u7528\u6237\u7684\u4e3b\u52a8\u8f93\u5165\u4e0d\u662f\u540c\u6b65\u7684\uff0c\u53ef\u80fd\u662f\u81ea\u52a8\u6267\u884c\u7684\uff0c\u7528\u6237\u600e\u4e48\u611f\u77e5\u7cfb\u7edf\u53d8\u5316\u72b6\u6001"),(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("a",{parentName:"p",href:"https://www.zhihu.com/question/26387327/answer/3158798538"},"https://www.zhihu.com/question/26387327/answer/3158798538"))),(0,a.kt)("h3",{id:"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92"},"\u975e\u4e2d\u5fc3\u5316\u7684\u7cfb\u7edf\u4ea4\u4e92"),(0,a.kt)("h3",{id:"\u865a\u62df\u673a-1"},"\u865a\u62df\u673a"),(0,a.kt)("h4",{id:"\u5b57\u8282\u7801"},"\u5b57\u8282\u7801"),(0,a.kt)("p",null,"\u672c\u8d28\u4e0a\u7ed3\u6784\u8ddfWasm\u76f8\u4f3c\uff0c\u53ef\u4ee5\u505a\u5230\u5f88\u5e95\u5c42\uff0c\u90fd\u662f\u51fd\u6570\u7ea7\u7684\u6570\u636e\uff0c\u53ea\u662f\u51fd\u6570\u8c03\u8f6c\u7684\u673a\u5236\u4e0d\u4e00\u6837\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'{\n "magic": "0",\n "version": "1.0.0", // VM\u7684\u7248\u672c\u53f7\uff0c\u7c7b\u578b\u7684\u89e3\u91ca\u65b9\u6cd5\u4e00\u822c\u4e0d\u53d8\n "inputs": [ // \u5185\u90e8Standard\u683c\u5f0f\u53ef\u80fd\u5b58\u5728\u548c\u7528\u6237\u7248\u672c\u4e0d\u517c\u5bb9\uff0c\u8fd0\u884c\u65f6\u68c0\u67e5\n {\n "User":{\n "version": "1.0.0",\n "name": "String"\uff0c\n "age": "int"\n }\n }\n ],\n "standards":[\n "Car":{\n \n }\n ]\n "components": [\n {\n "name":"add_com",\n "inputs":[\n "User"\n ]\n "output":[]\n }\n ], // \u5185\u90e8\u65b9\u6cd5\n "outputs": [], // \u53ef\u80fd\u5b58\u5728\u7248\u672c\u4e0d\u517c\u5bb9\n "codes"" [] // \u5c06\u6240\u6709\u4ee3\u7801\u653e\u5728\u4e00\u8d77\uff0cComponent\u8fd8\u6709\u5176\u5b83\u53c2\u6570\u4fe1\u606f\u5f71\u54cd\u7f13\u5b58\u8fde\u8d2f\u6027\n}\n')),(0,a.kt)("h4",{id:"inputs"},"inputs"),(0,a.kt)("p",null,"\u5c06\u5c5e\u6027\u5b9a\u4e49\u90fd\u62f7\u8d1d\u8fdbAgent\u5185\u90e8\uff0c\u4e00\u662f\u65b9\u4fbfAgent\u7f16\u8f91\uff0c\u540c\u65f6\u8003\u8651\u5230\u540e\u9762Component\u7684\u53c2\u6570\u7b7e\u540d\u662f\u8ddfStandard\u7684\u5c5e\u6027\u540d\u5b57\u7ed1\u5b9a\u7684\uff0c\u5e76\u6ca1\u6709\u50cf\u4f20\u7edf\u7f16\u8bd1\u5668\u90a3\u6837\u7f16\u8bd1\u4e3a\u5730\u5740\uff0c\u4f8b\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'{\n "inputs":[\n "User":{\n "version": "1.0.0",\n "name": "String"\uff0c\n "age": "int"\n }\n ]\n}\n')),(0,a.kt)("p",null,"\u4f46\u662f\u8fd0\u884c\u65f6\u68c0\u67e5\u5230\u7248\u672c\u4e0d\u4e00\u81f4\u65f6\uff0c\u81ea\u52a8\u505a\u4e00\u4e9b\u8f6c\u5316\u3002"),(0,a.kt)("h5",{id:"standard\u7248\u672c\u517c\u5bb9"},"Standard\u7248\u672c\u517c\u5bb9"),(0,a.kt)("p",null,"\u4e3a\u4e86\u907f\u514d\u4e0d\u65ad\u7684\u66f4\u65b0\uff0c\u5b9e\u884c\u4e24\u4e2a\u7b56\u7565\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5c0f\u7248\u672c\u5fc5\u987b\u517c\u5bb9"),(0,a.kt)("li",{parentName:"ul"},"\u5927\u7248\u672c\u5fc5\u987b\u66f4\u65b0Agent\uff0c\u5426\u5219\u4e0d\u8ba9\u8fd0\u884c")),(0,a.kt)("h6",{id:"\u5c0f\u7248\u672c\u517c\u5bb9"},"\u5c0f\u7248\u672c\u517c\u5bb9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4fee\u6539\u5b57\u6bb5\u540d\u5b57")),(0,a.kt)("h6",{id:"\u5927\u7248\u672c\u66f4\u65b0"},"\u5927\u7248\u672c\u66f4\u65b0"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u589e\u52a0\u5b57\u6bb5"),(0,a.kt)("li",{parentName:"ul"},"\u5220\u9664\u5b57\u6bb5"),(0,a.kt)("li",{parentName:"ul"},"\u4fee\u6539\u5b57\u6bb5\u7c7b\u578b = \u5220\u9664\u5b57\u6bb5 + \u589e\u52a0\u5b57\u6bb5")),(0,a.kt)("h4",{id:"lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92"},"Lua\u4e0e\u5bbf\u4e3b\u4ea4\u4e92"),(0,a.kt)("p",null,"\u7c7b\u578b\u89e3\u8026\uff0c"),(0,a.kt)("p",null,"Python\u6ca1\u6709Lua\u90a3\u6837\u7684\u52a8\u6001\u7c7b\u578b\uff0c\u5148\u652f\u6301Lua"),(0,a.kt)("h2",{id:"realityis\u6280\u672f\u7279\u5f81"},"RealityIS\u6280\u672f\u7279\u5f81"),(0,a.kt)("h3",{id:"\u6267\u884c\u6d41\u7a0b"},"\u6267\u884c\u6d41\u7a0b"),(0,a.kt)("p",null,"\u4f20\u7edf\u51e0\u79cd\u6a21\u5f0f\uff1a"),(0,a.kt)("h4",{id:"\u51fd\u6570\u8c03\u7528\u5173\u7cfb"},"\u51fd\u6570\u8c03\u7528\u5173\u7cfb"),(0,a.kt)("p",null,"\u5b9e\u9645\u4e0a\u662f\u8f6c\u5316\u4e3a\u7a0b\u5e8f\u7684\u4f20\u7edf\u7ed3\u6784"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9700\u8981\u7ba1\u7406\u51fd\u6570\u5b9e\u4f8b\u53ca\u5176\u5730\u5740"),(0,a.kt)("li",{parentName:"ul"},"\u9700\u8981\u5173\u7cfb\u53c2\u6570\u7684\u94fe\u63a5")),(0,a.kt)("h4",{id:"\u6d41\u7a0b\u987a\u5e8f"},"\u6d41\u7a0b\u987a\u5e8f"),(0,a.kt)("p",null,"Hodini\u7684\u65b9\u5f0f"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u7528\u7ba1\u7406\u51fd\u6570\u5b9e\u4f8b"),(0,a.kt)("li",{parentName:"ul"},"\u6309\u7c7b\u578b\u540d\u5b57\u8fdb\u884c\u83b7\u53d6\u6570\u636e")),(0,a.kt)("h4",{id:"shadegraph"},"ShadeGraph"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7ba1\u7406\u4f9d\u8d56\u5173\u7cfb"),(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u5173\u7cfb\u7531\u53d8\u91cf\u540d\u79f0\u786e\u5b9a\uff0c\u5373\u662f\u7c7b\u578b\u7684\u5b9e\u4f8b\uff0c\u5373\u662f\u53c2\u6570\u7684\u8fde\u63a5\uff0c\u53ea\u4e0d\u8fc7\u5b9a\u4e49\u4e86\u5168\u5c40\u53c2\u6570\uff0c\u800c\u4e0d\u662f\u4ece\u51fd\u6570\u7684\u8f93\u5165\u8f93\u5165\u53bb\u8fde")),(0,a.kt)("p",null,"\u53d8\u91cf\u540d\u5b57\u4e0d\u6613\u4e8e\u590d\u7528"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c++"},"// Create the graph - it starts out empty\ncudaGraphCreate(&graph, 0);\n\n// For the purpose of this example, we'll create\n// the nodes separately from the dependencies to\n// demonstrate that it can be done in two stages.\n// Note that dependencies can also be specified\n// at node creation.\ncudaGraphAddKernelNode(&a, graph, NULL, 0, &nodeParams);\ncudaGraphAddKernelNode(&b, graph, NULL, 0, &nodeParams);\ncudaGraphAddKernelNode(&c, graph, NULL, 0, &nodeParams);\ncudaGraphAddKernelNode(&d, graph, NULL, 0, &nodeParams);\n\n// Now set up dependencies on each node\ncudaGraphAddDependencies(graph, &a, &b, 1); // A->B\ncudaGraphAddDependencies(graph, &a, &c, 1); // A->C\ncudaGraphAddDependencies(graph, &b, &d, 1); // B->D\ncudaGraphAddDependencies(graph, &c, &d, 1); // C->D\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u5230\u76ee\u524d\u4e3a\u6b62",(0,a.kt)("strong",{parentName:"p"},"cuda graph"),"\u7684\u4f9d\u8d56\u9700\u8981\u7528\u6237\u624b\u52a8\u8bbe\u7f6e\u3002\u5f53kernel\u6216\u5176\u4ed6\u64cd\u4f5c\u8f93\u5165\u53d8\u91cf\u53d8\u5316\u65f6\uff0c",(0,a.kt)("strong",{parentName:"p"},"cuda graph"),"\u9700\u8981\u7528\u6237\u624b\u52a8\u66f4\u65b0\u8282\u70b9\u53c2\u6570\u3002"),(0,a.kt)("p",{parentName:"blockquote"},"\u5f53\u6211\u4eec\u9762\u5bf9\u5927\u91cf\u8282\u70b9\u4e0e\u8f93\u5165\u53c2\u6570\u65f6\uff0c\u624b\u52a8\u6765\u6784\u9020",(0,a.kt)("strong",{parentName:"p"},"cuda graph"),"\u548c\u66f4\u65b0\u8282\u70b9\u5c31\u4e0d\u592a\u73b0\u5b9e\uff0c\u4e8e\u662f",(0,a.kt)("strong",{parentName:"p"},"muda"),"\u81ea\u52a8\u8ba1\u7b97\u56fe\u5c31\u5e94\u8fd0\u800c\u751f\u4e86\u3002")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u57281\uff09\u90e8\u5206\u6211\u4eec\u5b9a\u4e49\u4e86",(0,a.kt)("strong",{parentName:"p"},"graph var"),"\uff0c\u8fd9\u4e9b",(0,a.kt)("strong",{parentName:"p"},"graph var"),"\u5728",(0,a.kt)("strong",{parentName:"p"},"muda")," ",(0,a.kt)("strong",{parentName:"p"},"compute graph"),"\u4e2d\u53ea\u8868\u793a\u4e00\u79cd\u865a\u62df\u8d44\u6e90\uff08",(0,a.kt)("strong",{parentName:"p"},"muda compute graph")," \u9ed8\u8ba4\u6240\u6709\u7684\u865a\u62df\u8d44\u6e90\u76f8\u4e92\u4e4b\u95f4\u4e0d\u4ea7\u751f\u91cd\u53e0\uff0c\u5373\u5185\u5b58\u4e0d\u53d1\u751foverlap\uff09\u3002\u4e00\u822c\u6211\u4eec\u4f1a\u8981\u6c42\u56fe\u7684\u8f93\u5165\u53d8\u91cf\u4e3a\u4e00\u4e2aviewer\uff08\u4ed6\u672c\u8eab\u4e0d\u62e5\u6709\u8d44\u6e90\uff0c\u53ea\u662f\u4e00\u4e2a\u8d44\u6e90\u7684\u8bbf\u95ee\u5668\uff0c\u662ftrivially copyable\u7684\uff09\uff0c\u6216\u662f\u4e00\u4e2a\u503c\u7c7b\u578b\u3002\u5982\u679c\u4f60\u77e5\u9053\u4f60\u5728\u5e72\u4ec0\u4e48\uff0c\u90a3\u4e48\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528\u5947\u6280\u6deb\u5de7\u3002")),(0,a.kt)("p",null,"\u57282\uff09\u90e8\u5206\uff0c\u6211\u4eec\u5b9a\u4e49\u4e86",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u3002\u6ce8\u610f\uff0c",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u7684\u5b9a\u4e49\u987a\u5e8f\u4f1a\u5f71\u54cd",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c",(0,a.kt)("strong",{parentName:"p"},"graph nodes"),"\u7684\u5b9a\u4e49\u987a\u5e8f\u5e94\u8be5\u662f\u6240\u6709\u4efb\u52a1\u7684\u903b\u8f91\u987a\u5e8f\uff0c\u8fd9\u975e\u5e38\u7684intuitive\uff01\u6211\u4eec\u7684\u6240\u6709\u4e32\u884c\u4ee3\u7801\u90fd\u662f\u8fd9\u4e48\u5199\u7684\u3002"),(0,a.kt)("h4",{id:"cogine"},"Cogine"),(0,a.kt)("p",null,"\u4ece\u4e0a\u8ff0\u7684\u65b9\u6848\u4e2d\u603b\u7ed3\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u8981\u60f3\u7b80\u5316\uff0c\u90fd\u9700\u8981\u5168\u5c40\u6570\u636e\uff0c\u4e0d\u7ba1\u662fHoudini\u4e2d\u7684\u51e0\u4f55\u6570\u636e\uff0c\u8fd8\u662fShaderGraph\u4e2d\u7531\u53d8\u91cf\u540d\u5b57\u786e\u5b9a\u7684\u5168\u5c40\u6570\u636e\uff0c\u8fd9\u6837\u907f\u514d\u7275\u6d89\u5bf9\u51fd\u6570\u7ec6\u8282\u7684\u4e86\u89e3"),(0,a.kt)("li",{parentName:"ul"},"\u6d41\u7a0b\u6bd4\u5b9e\u9645\u7684\u51fd\u6570\u8c03\u7528\u66f4\u7b80\u5355\uff0c\u5982Houdini\u548cShaderGraph"),(0,a.kt)("li",{parentName:"ul"},"\u7528\u6237\u7406\u89e3\u6d41\u7a0b\u5f88\u91cd\u8981\uff0c\u76f8\u6bd4\u7531\u8f93\u5165\u8f93\u51fa\u6765\u786e\u5b9a\u53c2\u6570\u4e0d\u592a\u5229\u4e8e\u7ba1\u7406\u548c\u63a7\u5236\uff0c\u6bd4\u5982\u4f60\u8981\u4fee\u6539\u6d41\u7a0b\u5c31\u5fc5\u987b\u53bb\u4fee\u6539\u53d8\u91cf\u540d\u5b57\uff1b\u76f8\u540c\u7684\u6d41\u7a0b\u5728\u4e00\u4e2a\u7cfb\u7edf\u4e2d\u591a\u6b21\u6267\u884c\u5219\u8981\u5b9a\u4e49\u4e0d\u540c\u8bed\u4e49\u7684\u53d8\u91cf\u540d\u5b57")),(0,a.kt)("p",null,"\u50cfShaderGraph\u901a\u5e38\u662f\u56fa\u5b9a\u7684\u6d41\u7a0b\uff0c\u6ca1\u6709Control FLow\uff0c\u5373\u6bcf\u4e2a\u6d41\u7a0b\u90fd\u4f1a\u88ab\u6267\u884c\uff0c\u5e76\u4e14\u901a\u5e38\u80fd\u88ab\u8ba1\u7b97\u51fa\u4e00\u4e2a\u7ebf\u6027\u7684\u6267\u884c\u987a\u5e8f\u4f7f\u5176\u53ef\u4ee5\u4fdd\u8bc1\u5176\u4e2d\u5b9a\u4e49\u7684\u4f9d\u8d56\u5173\u7cfb\u3002"),(0,a.kt)("h3",{id:"\u4e92\u64cd\u4f5c\u6027-1"},"\u4e92\u64cd\u4f5c\u6027"),(0,a.kt)("h3",{id:"\u53ef\u7ec4\u5408\u6027"},"\u53ef\u7ec4\u5408\u6027"),(0,a.kt)("p",null,"\u4f20\u7edf\u4e24\u79cd\u7ec4\u5408\u65b9\u5f0f\uff0c\u4e00\u79cd\u662f\u5355\u7eaf\u5bf9\u8c61\u7ea7\u522b\u7684\u7ec4\u5408\uff0c\u4f8b\u5982Unity\u7684Component\uff0c\u4e00\u79cd\u662f\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684\u7ec4\u5408\uff0c\u901a\u8fc7\u9ad8\u9636\u51fd\u6570"),(0,a.kt)("h3",{id:"\u4e2a\u6027\u5316"},"\u4e2a\u6027\u5316"),(0,a.kt)("h3",{id:"\u52a8\u6001\u6027-1"},"\u52a8\u6001\u6027"),(0,a.kt)("h3",{id:"\u5206\u5e03\u5f0f"},"\u5206\u5e03\u5f0f"),(0,a.kt)("h3",{id:"\u8bed\u4e49\u5316"},"\u8bed\u4e49\u5316"),(0,a.kt)("h3",{id:"\u7ec4\u4ef6\u5316"},"\u7ec4\u4ef6\u5316"),(0,a.kt)("h3",{id:"\u88ab\u52a8\u5f0f"},"\u88ab\u52a8\u5f0f"),(0,a.kt)("p",null,"\u88ab\u901a\u77e5\uff0c\u6301\u7eed\u8fd0\u884c"),(0,a.kt)("h2",{id:"\u5e94\u7528"},"\u5e94\u7528"),(0,a.kt)("h2",{id:"\u6311\u6218"},"\u6311\u6218"),(0,a.kt)("h3",{id:"\u6280\u672f\u6311\u6218"},"\u6280\u672f\u6311\u6218"),(0,a.kt)("h4",{id:"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898"},"\u52a8\u6001\u7c7b\u578b\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898"),(0,a.kt)("p",null,"\u6539\u8fdb\u8bed\u8a00\u865a\u62df\u673a\uff0c\u53bb\u6389\u51fd\u6570\u6808\u7b49\u63a7\u5236\u7684\u673a\u5236\uff0c\u4ec5\u4fdd\u7559\u4ee3\u7801\u6267\u884c"),(0,a.kt)("p",null,"\u7f16\u8bd1\u4e3a\u50cfWASM\u7684\u5b57\u8282\u7801\uff0cWASM\u672c\u8eab\u5c31\u662f\u6309\u51fd\u6570\u7ea7\u5b9a\u4e49\u7684\uff0c\u5176\u5b9e\u6211\u4eec\u7684\u673a\u5236\u6b63\u662f\u5bf9\u5e94\u8fd9\u79cd\uff0c\u53ea\u4e0d\u8fc7\u51fd\u6570\u6362\u6210\u6211\u4eec\u7684\u7ec4\u4ef6"),(0,a.kt)("h4",{id:"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f"},"\u7a0b\u5e8f\u7684\u6301\u7eed\u8fd0\u884c\u6a21\u5f0f"),(0,a.kt)("h4",{id:"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b"},"\u5bf9\u6d8c\u73b0\u80fd\u529b\u7684\u9884\u6d4b"),(0,a.kt)("p",null,"\u7c7b\u4f3c\u4e8e\u6e38\u620f\u6d4b\u8bd5"),(0,a.kt)("p",null,"\u53ef\u80fd\u5f88\u591a\u4eba\u7684\u7ecf\u9a8c\u548c\u77e5\u8bc6\u5728\u4e8e\u53bb\u63a7\u5236\u548c\u53d1\u73b0\u8fd9\u79cd\u7ed3\u6784\uff0c\u7136\u540e\u7b5b\u9009\u51fa\u66f4\u6709\u4ef7\u503c\u7684\u7ed3\u6784\uff0c\u8fd9\u5c31\u662f\u8fdb\u5316\u8bba\u91cc\u9762\u7684\u9009\u62e9\u3002"),(0,a.kt)("p",null,"\u667a\u80fd\u5fc5\u987b\u4f9d\u8d56\u4e8e\u8f83\u5927\u7684\u7a81\u53d8\u548c\u9009\u62e9\uff0c\u8f83\u5927\u7684\u7a81\u53d8\u5fc5\u987b\u8981\u6709\u6761\u4ef6\u80fd\u591f\u751f\u4ea7\u975e\u5e38\u591a\u9519\u8bef\u7684\u7ed3\u679c\u3002"),(0,a.kt)("h3",{id:"\u7528\u6237\u4f53\u9a8c\u6311\u6218"},"\u7528\u6237\u4f53\u9a8c\u6311\u6218"),(0,a.kt)("h4",{id:"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406"},"\u7528\u6237\u4ece\u529f\u80fd\u7ba1\u7406\u5230\u6570\u636e\u7ba1\u7406"),(0,a.kt)("p",null,"\u542f\u793a\u8fd9\u5df2\u7ecf\u6bd4\u8f83\u666e\u904d\uff0c\u53ea\u662f\u7ba1\u63a7\u7684\u662fAPI\uff0c\u4f46\u662fAPI\u4ee3\u8868\u7684\u5c31\u662f\u4e00\u79cd\u6570\u636e\u7684\u83b7\u53d6\uff0c"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"phone-setting",src:l(1683).Z,width:"1170",height:"2532"})),(0,a.kt)("h4",{id:"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c"},"\u5e94\u7528\u7531\u4e3b\u52a8\u6267\u884c\u5230\u88ab\u52a8\u6301\u7eed\u6267\u884c"),(0,a.kt)("p",null,"\u8ddf\u7528\u6237\u7684\u4e3b\u52a8\u8f93\u5165\u4e0d\u662f\u540c\u6b65\u7684\uff0c\u53ef\u80fd\u662f\u81ea\u52a8\u6267\u884c\u7684\uff0c\u7528\u6237\u600e\u4e48\u611f\u77e5\u7cfb\u7edf\u53d8\u5316\u72b6\u6001"),(0,a.kt)("p",null,"\u6211\u4eec\u9700\u8981\u88ab\u901a\u77e5\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u6211\u8981\u505a\u4ec0\u4e48\u7684\u6570\u5b57\u4e16\u754c"),(0,a.kt)("h4",{id:"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c"},"\u52a8\u6001\u7684\u6570\u5b57\u4e16\u754c"),(0,a.kt)("p",null,"\u4eba\u5929\u751f\u5c31\u662f\u4f7f\u7528\u89c2\u5bdf\u52a8\u6001\u4e16\u754c\u7684\uff0c\u53ea\u662f\u4f60\u8981\u7ed9\u51fa\u5408\u9002\u7684\u65b9\u5f0f\uff0c\u6bd4\u5982\u5c24\u5176\u662f\u8003\u8651\u5230\u5c4f\u5e55\u7684\u4ea4\u4e92\uff0c\u4ee5\u53ca\u6570\u5b57\u4e16\u754c\u7684\u4fe1\u606f\u91cf\u8fdc\u591a\u4e8e\u73b0\u5b9e\u4e16\u754c"),(0,a.kt)("p",null,"\u4f8b\u5982\u80a1\u7968\u5c31\u662f\u8fd9\u6837"),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\u6570\u5b57\u4e16\u754c\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u800c\u4e14\u4e8b\u5b9e\u8bc1\u660e\u7528\u6237\u5728\u4f7f\u7528\u4e00\u4e2a\u65b0\u5e94\u7528\u7684\u65f6\u5019\uff0c\u65b0\u5e94\u7528\u5e26\u6765\u7684\u963b\u788d\u90fd\u5f88\u5927\u7684\uff0c\u4e0d\u7ba1\u662f\u8ba4\u77e5\u3001\u4f53\u9a8c\u3001\u4ea4\u4e92\u7b49\u7b49"),(0,a.kt)("p",null,"\u6240\u4ee5\u9700\u8981\u4e00\u81f4\u7684\u4ea4\u4e92\u4f53\u9a8c\uff0c\u5927\u6a21\u578b\u5bf9\u8bdd\u5f0f\u7684\u4ea4\u4e92\u65b9\u5f0f\u53ef\u4ee5\u5927\u5927\u7b80\u5316\u4f20\u7edfGUI\u65b9\u9762\u7684\u590d\u6742\u5ea6\u548c\u4e30\u5bcc\u6027\uff0c\u6bd4\u5982\u5c0f\u7a0b\u5e8f\u5c31\u662f\u4e00\u79cd\u7c7b\u4f3c\u7684\u4f53\u9a8c\uff0c\u867d\u7136\u5e94\u7528\u5185\u5bb9\u4e0d\u4e00\u6837\uff0c\u4f46\u662f\u7528\u6237\u4f7f\u7528\u65b0\u7684\u5e94\u7528\u7684\u6d41\u7a0b\u6bd4\u8f83\u4e00\u81f4\uff0c\u6240\u4ee5\u5e76\u6ca1\u6709\u9020\u6210\u592a\u5927\u7684\u963b\u788d\u3002"),(0,a.kt)("p",null,"\u5f53\u7136\u7528\u6237\u4e5f\u4e0d\u662f\u4e00\u76f4\u5728\u6362\uff0c\u5927\u4f53\u8bf4\u5f88\u957f\u4e00\u6bb5\u65f6\u95f4\u8fd8\u662f\u7a33\u5b9a\u7684\uff0c\u4f46\u662f\u793e\u4f1a\u53d1\u73b0\u6709\u65b0\u7684\u6709\u4ef7\u503c\u7684\u5e94\u7528\u65f6\u4f20\u64ad\u5f97\u4f1a\u66f4\u5feb\u3002"),(0,a.kt)("p",null,"\u5c11\u91cf\u7684\u6bd4\u8f83\u8ffd\u8e2a\u79d1\u6280\u7684\u7528\u6237\u5219\u4f1a\u66f4\u4e60\u60ef\u8fd9\u79cd\u80fd\u591f\u5feb\u901f\u4f53\u9a8c\u5230\u65b0\u4ea7\u54c1\u7684\u8282\u594f\u548c\u611f\u89c9\u3002"),(0,a.kt)("h2",{id:"\u5c55\u671b"},"\u5c55\u671b"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0"},"\u9a71\u52a8\u786c\u4ef6\u521b\u65b0"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0"},"\u9a71\u52a8\u8f6f\u4ef6\u67b6\u6784\u521b\u65b0"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0"},"\u9a71\u52a8\u6570\u5b57\u5f62\u6001\u521b\u65b0"),(0,a.kt)("h3",{id:"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0"},"\u9a71\u52a8\u64cd\u4f5c\u7cfb\u7edf\u521b\u65b0"),(0,a.kt)("h2",{id:"\u603b\u7ed3"},"\u603b\u7ed3"),(0,a.kt)("p",null,"\u672a\u6765\u53ef\u80fd\u7c7b\u578b\u7cfb\u7edf\u548c\u6570\u636e\u96c6\u6210\u5230\u64cd\u4f5c\u7cfb\u7edf\u6216\u624b\u673a\u672c\u5730\u7684\u57fa\u7840\u8bbe\u65bd"),(0,a.kt)("p",null,"\u6216\u8005\u4e00\u4e2a\u6216\u591a\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u4f46\u603b\u5f52\u5206\u5e03\u5f0f\u7cfb\u7edf\u7684\u80fd\u529b\u662f\u66f4\u5f3a\u5927\u7684\uff0c\u64cd\u4f5c\u7cfb\u7edf\u652f\u6301\u4f1a\u7b80\u5316\u6570\u636e\u7684\u7ba1\u7406"))}s.isMDXComponent=!0},4413:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/Civilization-7255faa2a66f9ab156613b9e0e185032.jpg"},1505:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-arch-e9c849fb7a81df7821f43c49b27f46b7.svg"},3459:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-data-67cd9f631367cc39f743e38daea7c377.svg"},9802:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-type-3118cd5f279e72ce2768e9b698a142d8.svg"},9780:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/blockchain-vm-a08b66af2c866b714e05aa6a4066bd14.svg"},4187:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/decenterlized-interaction-a92ecdda4e229b9078273b25e7303a17.svg"},9955:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/dynamic-system-bc4a8ceadac821add490057854417ab5.svg"},1683:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/phone-setting-7be5932f5b259dc09827086754bdb118.jpg"},8242:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/programming-model-46f5640406a1caae8e0ab67c5251807a.svg"},6943:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/programming-number-99509bb159c101481192c8f045ea9d79.jpg"},4563:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/two-level-arch-7e37f36117f6d26629aad4ef6d6d65d3.svg"},9085:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/usd-1109031da5c391a7ac8194a67e234d38.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/ccc49370.80aafd6b.js b/zh/assets/js/ccc49370.80aafd6b.js deleted file mode 100644 index c29d790..0000000 --- a/zh/assets/js/ccc49370.80aafd6b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6103],{324:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),l=n(4334),r=n(5463),o=n(3702),i=n(9107),c=n(6582),s=n(339),m=n(7462),d=n(7325),u=n(3672);function g(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function f(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:o,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(r.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:o}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(3811);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:r}=(0,i.C)(),{nextItem:o,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:f,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&r.length>0?a.createElement(v.Z,{toc:r,minHeadingLevel:f,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(o||m)&&a.createElement(g,{nextItem:o,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage)},a.createElement(f,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},2728:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(7462),l=n(7294),r=n(107);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function s(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(c(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function m(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,r.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,l.useRef)(void 0),n=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=s(i,{anchorTopOffset:n.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const g=l.memo(u);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...f}=e;const v=(0,r.L)(),p=m??v.tableOfContents.minHeadingLevel,h=u??v.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:h});return d((0,l.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:h}}),[c,s,p,h])),l.createElement(g,(0,a.Z)({toc:b,className:n,linkClassName:c},f))}},3811:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),l=n(7294),r=n(4334),o=n(2728);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(i.tableOfContents,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:s})))}},3132:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(7294),l=n(1141),r=n(7410);function o(e){return a.createElement(a.Fragment,null,a.createElement(l.Z,e))}(void 0!==n.g?n.g:window).Prism=r.Z,n(9385)}}]); \ No newline at end of file diff --git a/zh/assets/js/ec0679b0.a7d27dc2.js b/zh/assets/js/ec0679b0.a7d27dc2.js deleted file mode 100644 index f7cfe82..0000000 --- a/zh/assets/js/ec0679b0.a7d27dc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[4572],{2481:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"community"}')}}]); \ No newline at end of file diff --git a/zh/assets/js/edc931f8.45b93a45.js b/zh/assets/js/edc931f8.45b93a45.js deleted file mode 100644 index 45ec1ba..0000000 --- a/zh/assets/js/edc931f8.45b93a45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[6160],{4137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},f="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},y=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=p(r),y=o,m=f["".concat(l,".").concat(y)]||f[y]||s[y]||a;return r?n.createElement(m,c(c({ref:t},u),{},{components:r})):n.createElement(m,c({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=y;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[f]="string"==typeof e?e:o,c[1]=i;for(var p=2;p<a;p++)c[p]=r[p];return n.createElement.apply(null,c)}return n.createElement.apply(null,r)}y.displayName="MDXCreateElement"},5236:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>s,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(4137));const a={},c=void 0,i={unversionedId:"index",id:"index",title:"index",description:"",source:"@site/community/index.md",sourceDirName:".",slug:"/",permalink:"/zh/community/",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"community"},l={},p=[],u={toc:p},f="wrapper";function s(e){let{components:t,...r}=e;return(0,o.kt)(f,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/zh/assets/js/main.111c70cd.js b/zh/assets/js/main.111c70cd.js deleted file mode 100644 index fcb852e..0000000 --- a/zh/assets/js/main.111c70cd.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.111c70cd.js.LICENSE.txt */ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"087bcfde":[()=>n.e(3111).then(n.t.bind(n,3769,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-docs\\default\\plugin-route-context-module-100.json",3769],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"129facaa":[()=>n.e(5674).then(n.t.bind(n,3048,19)),"~blog/default/zh-blog-tags-reality-world-399.json",3048],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(8485),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(8485),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"306a8c6c":[()=>n.e(7616).then(n.t.bind(n,9479,19)),"~docs/community/version-current-metadata-prop-751.json",9479],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"3a332aed":[()=>n.e(8800).then(n.t.bind(n,9567,19)),"~blog/default/zh-blog-ea2.json",9567],"3b8538cb":[()=>n.e(236).then(n.t.bind(n,3179,19)),"~blog/default/zh-blog-tags-cogine-4f3-list.json",3179],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"49b2de74":[()=>n.e(8712).then(n.t.bind(n,5745,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-pages\\default\\plugin-route-context-module-100.json",5745],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"831b5c01":[()=>n.e(8852).then(n.t.bind(n,4469,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-blog\\default\\plugin-route-context-module-100.json",4469],"927d70e2":[()=>n.e(1045).then(n.t.bind(n,2190,19)),"~blog/default/zh-blog-archive-8d7.json",2190],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"956d92de":[()=>n.e(8778).then(n.bind(n,3878)),"@site/i18n/zh/docusaurus-plugin-content-pages/feature/features.mdx",3878],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,481)),"@site/src/pages/features.js",481],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],bfb16af5:[()=>n.e(5909).then(n.t.bind(n,5392,19)),"~blog/default/zh-blog-tags-tags-906.json",5392],c4113809:[()=>n.e(1545).then(n.t.bind(n,4144,19)),"~blog/default/zh-blog-tags-open-source-285.json",4144],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],d2080cbe:[()=>n.e(9221).then(n.t.bind(n,931,19)),"~blog/default/zh-blog-tags-open-source-285-list.json",931],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],e121e550:[()=>n.e(4916).then(n.t.bind(n,668,19)),"~blog/default/zh-blog-tags-cogine-4f3.json",668],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec0679b0:[()=>n.e(4572).then(n.t.bind(n,2481,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-docs\\community\\plugin-route-context-module-100.json",2481],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],edc931f8:[()=>n.e(6160).then(n.bind(n,5236)),"@site/community/index.md",5236],f0f7ee06:[()=>n.e(8342).then(n.t.bind(n,4151,19)),"~blog/default/zh-blog-tags-reality-world-399-list.json",4151],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/zh/app",component:f("/zh/app","f51"),exact:!0},{path:"/zh/blog",component:f("/zh/blog","42a"),exact:!0},{path:"/zh/blog/archive",component:f("/zh/blog/archive","aaf"),exact:!0},{path:"/zh/blog/conversational-computing",component:f("/zh/blog/conversational-computing","1c0"),exact:!0},{path:"/zh/blog/reality-world-open-source-conference",component:f("/zh/blog/reality-world-open-source-conference","c19"),exact:!0},{path:"/zh/blog/tags",component:f("/zh/blog/tags","02a"),exact:!0},{path:"/zh/blog/tags/cogine",component:f("/zh/blog/tags/cogine","e43"),exact:!0},{path:"/zh/blog/tags/open-source",component:f("/zh/blog/tags/open-source","bf1"),exact:!0},{path:"/zh/blog/tags/reality-world",component:f("/zh/blog/tags/reality-world","7f0"),exact:!0},{path:"/zh/blog/the-evolution-of-ECS",component:f("/zh/blog/the-evolution-of-ECS","714"),exact:!0},{path:"/zh/blog/thinking",component:f("/zh/blog/thinking","838"),exact:!0},{path:"/zh/cogine",component:f("/zh/cogine","e3d"),exact:!0},{path:"/zh/community/about-open-source",component:f("/zh/community/about-open-source","285"),exact:!0},{path:"/zh/community/about-reality-world",component:f("/zh/community/about-reality-world","d54"),exact:!0},{path:"/zh/community/contact",component:f("/zh/community/contact","9c8"),exact:!0},{path:"/zh/community/questions",component:f("/zh/community/questions","d15"),exact:!0},{path:"/zh/community/resources",component:f("/zh/community/resources","6c5"),exact:!0},{path:"/zh/community/roadmap",component:f("/zh/community/roadmap","422"),exact:!0},{path:"/zh/feature/chidori",component:f("/zh/feature/chidori","54a"),exact:!0},{path:"/zh/feature/cogine",component:f("/zh/feature/cogine","95c"),exact:!0},{path:"/zh/feature/features",component:f("/zh/feature/features","0c8"),exact:!0},{path:"/zh/feature/langchain",component:f("/zh/feature/langchain","add"),exact:!0},{path:"/zh/features",component:f("/zh/features","d0e"),exact:!0},{path:"/zh/reality-create",component:f("/zh/reality-create","221"),exact:!0},{path:"/zh/reality-world-paper/",component:f("/zh/reality-world-paper/","974"),exact:!0},{path:"/zh/self-deploying",component:f("/zh/self-deploying","830"),exact:!0},{path:"/zh/whitepaper/",component:f("/zh/whitepaper/","c84"),exact:!0},{path:"/zh/community",component:f("/zh/community","841"),routes:[{path:"/zh/community/",component:f("/zh/community/","080"),exact:!0,sidebar:"community"}]},{path:"/zh/docs",component:f("/zh/docs","11f"),routes:[{path:"/zh/docs/intro",component:f("/zh/docs/intro","743"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/",component:f("/zh/docs/introduction/","71f"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/advantage",component:f("/zh/docs/introduction/advantage","812"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/business-model",component:f("/zh/docs/introduction/business-model","4bc"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/current",component:f("/zh/docs/introduction/current","71b"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/evolution",component:f("/zh/docs/introduction/evolution","75d"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/user",component:f("/zh/docs/introduction/user","cd6"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/value",component:f("/zh/docs/introduction/value","e8d"),exact:!0,sidebar:"docsSidebar"}]},{path:"/zh/",component:f("/zh/","5f6"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x,O,P,C,T,I,A,L,N,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(l>0){var s=R.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new R.Token(n.slice(i,a),s))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),b=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,L=/ll$/,N=new RegExp("^"+u+s+"[^aeiouwxy]$"),j=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=b).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=N,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=L).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(j)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new R.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new R.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new R.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=R.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=R.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===R.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=R.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],b=this.invertedIndex[y],v=b._index;for(h=0;h<s.fields.length;h++){var w=b[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new R.Set(E);if(s.presence==R.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=R.Set.complete)),s.presence!=R.Query.presence.PROHIBITED){if(r[A].upsert(v,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new R.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new R.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=R.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===R.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=R.Set.complete,I=R.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var L=Object.keys(n),N=[],j=Object.create(null);if(t.isNegated()){L=Object.keys(this.fieldVectors);for(l=0;l<L.length;l++){P=L[l];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(l=0;l<L.length;l++){var M=(D=R.FieldRef.fromString(L[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=j[M]))F.score+=z,F.matchData.combine(n[D]);else{var U={ref:M,score:z,matchData:n[D]};j[M]=U,N.push(U)}}}return N.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,l=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new R.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new R.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var b=this.metadataWhitelist[y],v=m.metadata[b];null==this.invertedIndex[m][a][n][b]&&(this.invertedIndex[m][a][n][b]=[]),this.invertedIndex[m][a][n][b].push(v)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new R.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,b=c[m],v=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(h=R.idf(this.invertedIndex[b],this.documentCount),r[b]=h):h=r[b],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+v),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),b=n(5463),v=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const L=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(L,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=j,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(U,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var W=n(3256),Z=n(1048);function V(){const e=(0,Z.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Q(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(W.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement($,null),r.createElement(R,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),N(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(Q,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"community":{"path":"/zh/community","versions":[{"name":"current","label":"Next","isLast":true,"path":"/zh/community","mainDocId":"index","docs":[{"id":"index","path":"/zh/community/","sidebar":"community"}],"draftIds":[],"sidebars":{"community":{"link":{"path":"/zh/community/","label":"index"}}}}],"breadcrumbs":true},"default":{"path":"/zh/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/zh/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/zh/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/zh/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/zh/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/zh/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/zh/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/zh/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/zh/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/zh/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/zh/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"zh","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:v,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,L=(0,o.useRef)(),N=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&L.current&&L.current.disconnect()})),[L,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||g||S.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},b)):o.createElement(I,(0,r.Z)({},b,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{k.current=e,A&&e&&x&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),L.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const b={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:b.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),L=n(3086);const N=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(N.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(N);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const W=r.memo(H),Z={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(W,{className:t,buttonClassName:"dark"===n?Z.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Q=n(6811);function q(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function be(e){return{current:e}}function ve(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(ve(e)||ve(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Le(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Ne(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ne(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Le(Le({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Le(Le({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Le(Le({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ue(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var We="2.6.0",Ze="https://cdn.jsdelivr.net/npm/search-insights@".concat(We,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return $e({eventName:"Items Viewed"},e)})),state:o})}),400);function Qe(e){var t=function(e){return $e({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=We,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Ze,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=Re(i),s=be([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:$e({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[$e({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[$e({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function bt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(jt(t,n,e),jt(r,n,e)),n)},catch:function(t){return At(e.catch(jt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(jt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Lt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Nt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function jt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Rt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Lt.resolve=function(e){return Nt(Promise.resolve(e))},Lt.reject=function(e){return Nt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ut(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var $t,Ht,Wt,Zt=null,Vt=($t=-1,Ht=-1,Wt=void 0,function(e){var t=++$t;return Promise.resolve(e).then((function(e){return Wt&&t<Ht?Wt:(Ht=t,Wt=e,e)}))});function Qt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=Ut(e,Mt);Zt&&o.environment.clearTimeout(Zt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Nt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Zt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Nt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return vt(vt({},e),{},wt({},t.source.sourceId,vt(vt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=Rt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Zt&&o.environment.clearTimeout(Zt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Qt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=Rt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Qt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=Rt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Qt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=Rt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Qt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Rt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Qt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:vn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Rt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Ln(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ln(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Nn(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Qt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(Qe(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var jn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,jn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},Rn=new Map;function Dn(e){var t=Rn.get(this);return t||(t=new Map,Rn.set(this,t)),(t=jn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Un(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function $n(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Un(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,$n,r):e.removeEventListener(t,$n,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Wn(e){return"onChange"===e?"onInput":e}function Zn(e,t){for(var n in t)Hn(e,Wn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Wn(n),t[n])}var Qn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Qn),i=e.document.createElement(t);return Zn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Zn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],br=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,vr=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,b,v,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):vr(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(b=Nr(m,E,y=d+w,k))?p=gr:(p=E[b]||gr,E[b]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&Ur(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(v=p===gr||null===p.__v)?-1==b&&w--:b!==y&&(b===y+1?w++:b>y?k>_-y?w+=b-y:w--:w=b<y&&b==y-1?b-y:0),y=d+w,"function"!=typeof m.type||b===y&&p.__k!==m.__k?"function"==typeof m.type||b===y&&!v?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Lr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),$r(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),$r(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Lr(n,r.__e,t));return t}function Lr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Nr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function jr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||br.test(t)?n:n+"px"}function Rr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||jr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||jr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,b=(c=x.contextType)&&r[c.__c],v=c?b?b.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,v):(t.__c=d=new xr(y,v),d.constructor=x,d.render=Hr),b&&b.sub(d),d.props=y,d.state||(d.state={}),d.context=v,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,v),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,v)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,v),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=v,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,vr(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)Ur(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Rr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Rr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,vr(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&Rr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&Rr(e,"checked",h,f.checked,!1))}return e}function Ur(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function $r(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||Ur(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&$r(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Wr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Zr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Qr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Qr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function bo(e){return bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bo(e)}var vo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Wr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){Lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var No=[{segment:"autocomplete-js",version:hn}];function jo(e){return function(e){if(Array.isArray(e))return Ro(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ro(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ro(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ro(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,jo(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Uo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){$o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Wo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Zo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Qo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=be(!1),c=be(e),d=be(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,b=e.components,v=e.translations,w=ko(e,vo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),b),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),v)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Nn(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:No,options:e}}))})),h=be(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},b=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),v=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),b=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),v=f("label",lr({class:r.label,children:[b]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[v,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var L=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),N=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[L,A,I]}),j=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=f("div",{class:r.detachedFormContainer,children:[P,j]});h.appendChild(R),m.appendChild(N)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:v,submitButton:b,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Zn(v.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:b.value,dom:v.value,panelContainer:p.value?v.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Zn(r.label,{hidden:"stalled"===a.status}),Zn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Zn(r.clearButton,{hidden:!a.query}),Zn(r.detachedSearchButtonQuery,{textContent:a.query}),Zn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Qo(r,Zo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Uo(Uo({},e),{},$o({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(v.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(f.value.core.environment.document.body.removeChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return Zn(f.value.core.environment,e),function(){Zn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?v.value.detachedOverlay:v.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},b=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),v=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(v.current)return w.current=Ko({container:v.current,placeholder:b,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:v,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],b=(0,fa.lO)(n)[0],v=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,w=t&&y.length>1?void 0:ma(b).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:v,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function ba(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function va(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(va,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(ba,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function La(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const Na={colorModeToggle:"colorModeToggle_DEke"};function ja(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function Ra(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ra,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(La,null),r.createElement(q,null),r.createElement(ja,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ja,{items:o}),r.createElement(V,{className:Na.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function Ua(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function $a(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Wa(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement($a,null))))))}function Za(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ua,{columns:t}):r.createElement(Wa,{links:t})}var Va=n(6753);const Qa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Qa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Za,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(L.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(v,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g,Oh:()=>v});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>b,oz:()=>v,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function v(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",b="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)(U,e),U.length=n.length,C.notifyListeners(U.location,U.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(O(e.state))}function A(){N(O(v()))}var L=!1;function N(e){if(L)L=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=U.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,M(o))}(e)}))}}var j=O(v()),R=[j.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(b,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(b,A))}var z=!1;var U={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=R.indexOf(U.location.key),u=R.slice(0,s+1);u.push(a.key),R=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=R.indexOf(U.location.key);-1!==s&&(R[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",b=S[u],v=b.encodePath,w=b.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=v(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(f(t));-1===n&&(n=0);var r=R.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var L=_(),N=v(L);L!==N&&x(N);var j=O(),R=[f(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+v(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(f(z.location)),i=R.slice(0,a+1);i.push(t),R=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);_()!==o&&(I=t,x(o));var a=R.indexOf(f(z.location));-1!==a&&(R[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),b=f;function v(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:b,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var b=f(n,y);try{u(t,y,b)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,b=!!h.greedy,v=h.alias;if(b&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(b){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],L=_.slice(0,P),N=_.slice(P+A.length),j=k+_.length;d&&j>d.reach&&(d.reach=j);var R=S.prev;if(L&&(R=s(t,R,L),k+=L.length),u(t,R,O),S=s(t,R,new o(f,g?r.tokenize(A,g):A,v,A)),N&&s(t,S,N),O>1){var D={cause:f+","+m,reach:j};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,L=60115,N=60116,j=60121,R=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),L=B("react.memo"),N=B("react.lazy"),j=B("react.block"),B("react.scope"),R=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var W=!1;function Z(e,t){if(!e||W)return"";W=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{W=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Z(e.type,!1);case 11:return e=Z(e.type.render,!1);case 22:return e=Z(e.type._render,!1);case 1:return e=Z(e.type,!0);default:return""}}function Q(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case L:return Q(e.type);case j:return Q(e._render);case N:t=e._payload,e=e._init;try{return Q(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ve=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){ve.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Le(e,t){return e(t)}function Ne(e,t,n,r,o){return e(t,n,r,o)}function je(){}var Re=Le,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(je(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){ze=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(he){ze=!1}function $e(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,We=null,Ze=!1,Ve=null,Qe={onError:function(e){He=!0,We=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,We=null,$e.apply(Qe,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){yt(e)&&n.delete(t)}function vt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(bt),ct.forEach(bt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,vt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Lt=new Map,Nt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function jt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Lt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var Rt=8;function Dt(e){if(0!=(1&e))return Rt=15,1;if(0!=(2&e))return Rt=14,2;if(0!=(4&e))return Rt=13,4;var t=24&e;return 0!==t?(Rt=12,t):0!=(32&e)?(Rt=11,32):0!==(t=192&e)?(Rt=10,t):0!=(256&e)?(Rt=9,256):0!==(t=3584&e)?(Rt=8,t):0!=(4096&e)?(Rt=7,4096):0!==(t=4186112&e)?(Rt=6,t):0!==(t=62914560&e)?(Rt=5,t):67108864&e?(Rt=4,67108864):0!=(134217728&e)?(Rt=3,134217728):0!==(t=805306368&e)?(Rt=2,t):0!=(1073741824&e)?(Rt=1,1073741824):(Rt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return Rt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=Rt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=Rt):0!==(l&=a)&&(r=Dt(l),o=Rt)}else 0!==(a=n&~i)?(r=Dt(a),o=Rt):0!==l&&(r=Dt(l),o=Rt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Rt)return t;Rt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function $t(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wt(e)/Zt|0)|0},Wt=Math.log,Zt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Qt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||je();var o=Kt,a=De;De=!0;try{Ne(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Qt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}jr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return jr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),bn=ln(o({},pn,{relatedTarget:0})),vn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Ln=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Nn=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=ln(Nn),Rn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),Un=!1;function $n(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Wn=!1;var Zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Zn[e.type]:"textarea"===t}function Qn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Qn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Le(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,br=null,vr=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==br||br!==X(r)||("selectionStart"in(r=br)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(vr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=br)))}jt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),jt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),jt(Nt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Lt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=We;He=!1,We=null,Ze||(Ze=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Ze)throw e=Ve,Ze=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Nr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Lr(t,!1,e,null),Lr(t,!0,e,null)})))}function Lr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Nr(a,e,o,t),i.add(l))}function Nr(e,t,n,r){var o=Lt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function jr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Re(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=bn;break;case"focusout":u="blur",s=bn;break;case"beforeblur":case"afterblur":s=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=vn;break;case It:s=Ln;break;case"scroll":s=mn;break;case"wheel":s=jn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(Rr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Qn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(br=y,vr=r,wr=null);break;case"focusout":wr=vr=br=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var b;if(Dn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Wn?$n(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Bn&&"ko"!==n.locale&&(Wn||"onCompositionStart"!==v?"onCompositionEnd"===v&&Wn&&(b=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Wn=!0)),0<(y=Dr(r,v)).length&&(v=new Sn(v,e,null,n,o),i.push({event:v,listeners:y}),b?v.data=b:null!==(b=Hn(n))&&(v.data=b))),(b=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(Un=!0,zn);case"textInput":return(e=t.data)===zn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Wn)return"compositionend"===e||!Dn&&$n(e,t)?(e=nn(),tn=en=Jt=null,Wn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Cr(i,t)}))}function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Rr(e,a,o)),null!=(a=Be(e,t))&&r.push(Rr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(Rr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(Rr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,Ur=null;function $r(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Wr="function"==typeof setTimeout?setTimeout:void 0,Zr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Qr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function bo(){uo(mo),uo(po)}function vo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,Q(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,Lo=a.unstable_ImmediatePriority,No=a.unstable_UserBlockingPriority,jo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,Uo=!1,$o=Io(),Ho=1e4>$o?Io:function(){return Io()-$o};function Wo(){switch(Ao()){case Lo:return 99;case No:return 98;case jo:return 97;case Ro:return 96;case Do:return 95;default:throw Error(i(332))}}function Zo(e){switch(e){case 99:return Lo;case 98:return No;case 97:return jo;case 96:return Ro;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Zo(e),xo(e,t)}function Qo(e,t,n){return e=Zo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!Uo&&null!==Bo){Uo=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(Lo,qo),n}finally{Uo=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function ba(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function va(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Qs(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Qs(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||$(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||$(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||$(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=$(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var v=p(o,h,b.value,u);if(null===v){null===h&&(h=y);break}e&&h&&null===v.alternate&&t(o,h),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v,h=y}if(b.done)return n(o,h),c;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,u))&&(l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(h=r(o,h);!b.done;g++,b=s.next())null!==(b=m(h,o,g,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Qs(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if($(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,Q(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function La(e){if(e===Ca)throw Error(i(174));return e}function Na(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function ja(){uo(Ta),uo(Ia),uo(Aa)}function Ra(e){La(Aa.current);var t=La(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,Ua=!1;function $a(e,t){var n=Ws(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Wa(e){if(Ua){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Qr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,Ua=!1,void(Ba=e);$a(Ba,n)}Ba=e,za=Qr(t.firstChild)}else e.flags=-1025&e.flags|2,Ua=!1,Ba=e}}function Za(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!Ua)return Za(e),Ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)$a(e,t),t=Qr(t.nextSibling);if(Za(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Qr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Qr(e.stateNode.nextSibling):null;return!0}function Qa(){za=Ba=null,Ua=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Li:Ni,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=ji,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Nl;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function bi(){return si().memoizedState}function vi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return vi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Wo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,vi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if(Ua){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:bi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},ji={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:bi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Ri=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Zs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Qs(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function Ui(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function $i(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Wi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),va(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||ba(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||ba(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Zi(e,t,n,r,a,o)}function Zi(e,t,n,r,o,a){$i(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,Ri.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),Na(e,t.containerInfo)}var Qi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Wa(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Ua)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&bo(),null;case 3:return ja(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=La(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=La(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Qi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}$r(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=La(Aa.current),La(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Nl||0==(134217727&Ul)&&0==(134217727&$l)||bs(Nl,Rl))),(r||n)&&(t.flags|=4),null);case 4:return ja(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Ua)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&bo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(ja(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return ja(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Qi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,La(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&$r(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function bl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function vl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(vl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(vl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Zl=Ho(),bl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=$s.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Ll=0,Nl=null,jl=null,Rl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,Ul=0,$l=0,Hl=0,Wl=null,Zl=0,Vl=1/0;function Ql(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Ll)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Wo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Wl?Wl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Wo(),0!=(4&Ll)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;$t(e,t,n),e===Nl&&($l|=t,4===Fl&&bs(e,Rl));var r=Wo();1===t?0!=(8&Ll)&&0==(48&Ll)?vs(e):(gs(e,n),0===Ll&&(Ql(),qo())):(0==(4&Ll)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Wl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=Rt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Nl?Rl:0),t=Rt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=vs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(Lo,Go)):Bo.push(n),n=Mo):14===t?n=Qo(99,vs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Qo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Ll))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Mt(e,e===Nl?Rl:0);if(0===n)return null;var r=n,o=Ll;Ll|=16;var a=Os();for(Nl===e&&Rl===r||(Ql(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Ll=o,null!==jl?r=0:(Nl=null,Rl=0,r=Fl),0!=(zl&$l))_s(e,0);else if(0!==r){if(2===r&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),bs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ls(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=Zl+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Wr(Ls.bind(null,e),r);break}Ls(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Wr(Ls.bind(null,e),n);break}Ls(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function bs(e,t){for(t&=~Hl,t&=~$l,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function vs(e){if(0!=(48&Ll))throw Error(i(327));if(Rs(),e===Nl&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ps(e,t);0!=(zl&$l)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),bs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ls(e),gs(e,Ho()),null}function ws(e,t){var n=Ll;Ll|=1;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Es(e,t){var n=Ll;Ll&=-2,Ll|=8;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Zr(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&bo();break;case 3:ja(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:ja();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Nl=e,jl=Vs(e.current,null),Rl=Dl=zl=t,Fl=0,Bl=null,Hl=$l=Ul=0}function xs(e,t){for(;;){var n=jl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,jl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=ca(-1,1);b.tag=2,da(l,b)}l.lanes|=1;break e}s=void 0,l=t;var v=a.pingCache;if(null===v?(v=a.pingCache=new dl,s=new Set,v.set(u,s)):void 0===(s=v.get(u))&&(s=new Set,v.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((Q(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Ll;Ll|=16;var r=Os();for(Nl===e&&Rl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Ll=n,Il.current=r,null!==jl)throw Error(i(261));return Nl=null,Rl=0,Fl}function Cs(){for(;null!==jl;)Is(jl)}function Ts(){for(;null!==jl&&!Co();)Is(jl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):jl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(jl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(jl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ls(e){var t=Wo();return Vo(99,Ns.bind(null,e,t)),null}function Ns(e,t){do{Rs()}while(null!==es);if(0!=(48&Ll))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Nl&&(jl=Nl=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ll,Ll|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var b;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)y=g,g=b;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(b=g.nextSibling))break;y=(g=y).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{js()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var v=Gl.flags;if(16&v&&ye(Gl.stateNode,""),128&v){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&v){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=Ur,w=hr(),v=E.focusedElem,l=E.selectionRange,w!==v&&v&&v.ownerDocument&&mr(v.ownerDocument.documentElement,v)){null!==l&&gr(v)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in v?(v.selectionStart=w,v.selectionEnd=Math.min(E,v.value.length)):(E=(w=v.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=v.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(v,S),a=pr(v,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=v;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof v.focus&&v.focus(),v=0;v<w.length;v++)(E=w[v]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,Ur=zr=null,e.current=n,Gl=r;do{try{for(v=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(v,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Ll=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Ll)||qo(),null}function js(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Qo(97,(function(){return Rs(),null}))),Gl=Gl.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Ll))throw Error(i(331));var t=Ll;Ll|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Ll=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&($t(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))$t(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Nl===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Ho()-Zl?_s(e,0):Hl|=n),gs(e,t)}function $s(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Wo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&($t(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Ws(e,t,n,r){return new Hs(e,t,n,r)}function Zs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Ws(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Qs(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Zs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Ws(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Ws(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Ws(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Ws(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case L:l=14;break e;case N:l=16,r=null;break e;case j:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Ws(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Ws(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Ws(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Ws(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Ws(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Ws(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Qa();break;case 5:Ra(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:Na(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Zi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Zs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===L)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Wi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Wi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Qa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Qr(t.stateNode.containerInfo.firstChild),Ba=t,a=Ua=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Qa();t=t.child}return t;case 5:return Ra(t),null===e&&Wa(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),$i(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Wa(t),null;case 13:return Xi(e,t,n);case 4:return Na(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),va(t,r,o),Ea(t,r,o,n),Zi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Le=ws,Ne=function(e,t,n,r,o){var a=Ll;Ll|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Ll=a)&&(Ql(),qo())}},je=function(){0==(49&Ll)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),Rs())},Re=function(e,t){var n=Ll;Ll|=2;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,Rs,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Z,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+j(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+j(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,y),i=A(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),W="undefined"!=typeof document,Z=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Z.canUseDOM=W,Z.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Z.defaultProps={context:{}},Z.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;Q(g.BODY,e.bodyAttributes),Q(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),Q(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Z.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===v||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},b=a.forwardRef;void 0===b&&(b=y);var v=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(v?v(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var L=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==b?L.ref=t||x:L.innerRef=x,a.createElement(g,L)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>v,LX:()=>k,TH:()=>N,k6:()=>L,rs:()=>I,s6:()=>b});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),b=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(b.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(b.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function L(){return A(y)}function N(){return A(b).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===v||"*"===v,k="?"===v||"*"===v,_=n[2]||c,x=y||b;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var v=b.prototype=new y;v.constructor=b,r(v,g.prototype),v.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var L={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=L,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,b=5,v=0;t.unstable_shouldYield=function(){return t.unstable_now()>=v},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();v=e+b;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,L=!1,N=!1;function j(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function R(e){if(N=!1,j(e),!L)if(null!==k(O))L=!0,n(D);else{var t=k(P);null!==t&&r(R,t.startTime-e)}}function D(e,n){L=!1,N&&(N=!1,o()),A=!0;var a=I;try{for(j(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),j(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){L||A||(L=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(N?o():N=!0,r(R,i-l))):(e.sortIndex=s,S(O,e),L||A||(L=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/zh/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"\u4ea7\u54c1",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"\u81ea\u6211\u90e8\u7f72"}],position:"left"},{label:"\u5f00\u53d1\u8005",type:"dropdown",items:[{to:"/whitepaper",label:"\u767d\u76ae\u4e66"},{to:"/docs/intro",label:"\u6280\u672f\u6587\u6863"},{to:"/thinking",label:"\u601d\u8003\u8fc7\u7a0b"}],position:"left"},{to:"/blog",label:"\u535a\u5ba2",position:"left"},{to:"/features",label:"\u7279\u6027 & \u6bd4\u8f83",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"\u793e\u533a",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"\u5173\u4e8e\u5f00\u6e90"},{to:"/community/about-reality-world",label:"\u5173\u4e8e Reality World"},{to:"/community/roadmap",label:"\u8def\u7ebf\u56fe"},{to:"/community/contact",label:"\u8054\u7cfb"},{to:"/community/questions",label:"\u5e38\u89c1\u95ee\u9898"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"D:\\Github\\cogine.github.io\\sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"D:\\Github\\cogine.github.io\\src\\css\\custom.css"}}]],plugins:[["content-docs",{id:"community",path:"community",routeBasePath:"community",sidebarPath:"D:\\Github\\cogine.github.io\\sidebarsCommunity.js"}],["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"theme.AnnouncementBar.closeButtonAriaLabel":"\u5173\u95ed","theme.BackToTopButton.buttonAriaLabel":"\u56de\u5230\u9876\u90e8","theme.CodeBlock.copied":"\u590d\u5236\u6210\u529f","theme.CodeBlock.copy":"\u590d\u5236","theme.CodeBlock.copyButtonAriaLabel":"\u590d\u5236\u4ee3\u7801\u5230\u526a\u8d34\u677f","theme.CodeBlock.wordWrapToggle":"\u5207\u6362\u81ea\u52a8\u6362\u884c","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"\u6253\u5f00/\u6536\u8d77\u4fa7\u8fb9\u680f\u83dc\u5355\u300c{label}\u300d","theme.ErrorPageContent.title":"\u9875\u9762\u5df2\u5d29\u6e83\u3002","theme.ErrorPageContent.tryAgain":"\u91cd\u8bd5","theme.NavBar.navAriaLabel":"\u4e3b\u5bfc\u822a","theme.NotFound.p1":"\u6211\u4eec\u627e\u4e0d\u5230\u60a8\u8981\u627e\u7684\u9875\u9762\u3002","theme.NotFound.p2":"\u8bf7\u8054\u7cfb\u539f\u59cb\u94fe\u63a5\u6765\u6e90\u7f51\u7ad9\u7684\u6240\u6709\u8005\uff0c\u5e76\u544a\u77e5\u4ed6\u4eec\u94fe\u63a5\u5df2\u635f\u574f\u3002","theme.NotFound.title":"\u627e\u4e0d\u5230\u9875\u9762","theme.TOCCollapsible.toggleButtonLabel":"\u672c\u9875\u603b\u89c8","theme.admonition.caution":"\u8b66\u544a","theme.admonition.danger":"\u5371\u9669","theme.admonition.info":"\u4fe1\u606f","theme.admonition.note":"\u5907\u6ce8","theme.admonition.tip":"\u63d0\u793a","theme.blog.archive.description":"\u5386\u53f2\u535a\u6587","theme.blog.archive.title":"\u5386\u53f2\u535a\u6587","theme.blog.paginator.navAriaLabel":"\u535a\u6587\u5217\u8868\u5206\u9875\u5bfc\u822a","theme.blog.paginator.newerEntries":"\u8f83\u65b0\u7684\u535a\u6587","theme.blog.paginator.olderEntries":"\u8f83\u65e7\u7684\u535a\u6587","theme.blog.post.paginator.navAriaLabel":"\u535a\u6587\u5206\u9875\u5bfc\u822a","theme.blog.post.paginator.newerPost":"\u8f83\u65b0\u4e00\u7bc7","theme.blog.post.paginator.olderPost":"\u8f83\u65e7\u4e00\u7bc7","theme.blog.post.plurals":"{count} \u7bc7\u535a\u6587","theme.blog.post.readMore":"\u9605\u8bfb\u66f4\u591a","theme.blog.post.readMoreLabel":"\u9605\u8bfb {title} \u7684\u5168\u6587","theme.blog.post.readingTime.plurals":"\u9605\u8bfb\u9700 {readingTime} \u5206\u949f","theme.blog.sidebar.navAriaLabel":"\u6700\u8fd1\u535a\u6587\u5bfc\u822a","theme.blog.tagTitle":"{nPosts} \u542b\u6709\u6807\u7b7e\u300c{tagName}\u300d","theme.colorToggle.ariaLabel":"\u5207\u6362\u6d45\u8272/\u6697\u9ed1\u6a21\u5f0f\uff08\u5f53\u524d\u4e3a{mode}\uff09","theme.colorToggle.ariaLabel.mode.dark":"\u6697\u9ed1\u6a21\u5f0f","theme.colorToggle.ariaLabel.mode.light":"\u6d45\u8272\u6a21\u5f0f","theme.common.editThisPage":"\u7f16\u8f91\u6b64\u9875","theme.common.headingLinkTitle":"{heading}\u7684\u76f4\u63a5\u94fe\u63a5","theme.common.skipToMainContent":"\u8df3\u5230\u4e3b\u8981\u5185\u5bb9","theme.docs.DocCard.categoryDescription":"{count} \u4e2a\u9879\u76ee","theme.docs.breadcrumbs.home":"\u4e3b\u9875\u9762","theme.docs.breadcrumbs.navAriaLabel":"\u9875\u9762\u8def\u5f84","theme.docs.paginator.navAriaLabel":"\u6587\u4ef6\u9009\u9879\u5361","theme.docs.paginator.next":"\u4e0b\u4e00\u9875","theme.docs.paginator.previous":"\u4e0a\u4e00\u9875","theme.docs.sidebar.closeSidebarButtonAriaLabel":"\u5173\u95ed\u5bfc\u822a\u680f","theme.docs.sidebar.collapseButtonAriaLabel":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.collapseButtonTitle":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonAriaLabel":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonTitle":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.navAriaLabel":"\u6587\u6863\u4fa7\u8fb9\u680f","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"\u5207\u6362\u5bfc\u822a\u680f","theme.docs.tagDocListPageTitle":"{nDocsTagged}\u300c{tagName}\u300d","theme.docs.tagDocListPageTitle.nDocsTagged":"{count} \u7bc7\u6587\u6863\u5e26\u6709\u6807\u7b7e","theme.docs.versionBadge.label":"\u7248\u672c\uff1a{versionLabel}","theme.docs.versions.latestVersionLinkLabel":"\u6700\u65b0\u7248\u672c","theme.docs.versions.latestVersionSuggestionLabel":"\u6700\u65b0\u7684\u6587\u6863\u8bf7\u53c2\u9605 {latestVersionLink} ({versionLabel})\u3002","theme.docs.versions.unmaintainedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u7684\u6587\u6863\uff0c\u73b0\u5df2\u4e0d\u518d\u79ef\u6781\u7ef4\u62a4\u3002","theme.docs.versions.unreleasedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u5c1a\u672a\u53d1\u884c\u7684\u6587\u6863\u3002","theme.lastUpdated.atDate":"\u4e8e {date} ","theme.lastUpdated.byUser":"\u7531 {user} ","theme.lastUpdated.lastUpdatedAtBy":"\u6700\u540e{byUser}{atDate}\u66f4\u65b0","theme.navbar.mobileLanguageDropdown.label":"\u9009\u62e9\u8bed\u8a00","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 \u56de\u5230\u4e3b\u83dc\u5355","theme.navbar.mobileVersionsDropdown.label":"\u9009\u62e9\u7248\u672c","theme.tags.tagsListLabel":"\u6807\u7b7e\uff1a","theme.tags.tagsPageLink":"\u67e5\u770b\u6240\u6709\u6807\u7b7e","theme.tags.tagsPageTitle":"\u6807\u7b7e","cmfcmf/d-s-l.searchBar.placeholder":"\u641c\u7d22...","cmfcmf/d-s-l.searchBar.noResults":"\u65e0\u641c\u7d22\u7ed3\u679c","cmfcmf/d-s-l.searchBar.clearButtonTitle":"\u6e05\u9664","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"\u53d6\u6d88","cmfcmf/d-s-l.searchBar.submitButtonTitle":"\u641c\u7d22","Whitepaper":"\u767d\u76ae\u4e66","Read More":"\u9605\u8bfb\u66f4\u591a","Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It\'s like a complex system and emerges digital intelligence.":"Reality World\u662f\u4e00\u4e2a\u591a\u7a0b\u5e8f\uff08\u5982\u591a\u667a\u80fd\u4f53\uff09\u52a8\u6001\u8fd0\u884c\u7684\u5e73\u53f0\u548c\u6a21\u62df\u5668\uff0c \u5b83\u7684\u6838\u5fc3\u662f\u89e3\u51b3\u8fd9\u4e9b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3001\u5b89\u5168\u548c\u8c03\u5ea6\u3002\u5b83\u50cf\u590d\u6742\u7cfb\u7edf\u4e00\u6837\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u7a0b\u5e8f\u7ec4\u5408\uff0c\u4f7f\u5f97\u6574\u4f53\u7a0b\u5e8f\u76f8\u6bd4\u4f20\u7edf\u7a0b\u5e8f\u80fd\u591f\u6d8c\u73b0\u51fa\u6570\u5b57\u667a\u80fd\u3002","Get Started":"\u5f00\u59cb\u5165\u95e8","Let everyone can write AI agent":"\u8ba9\u6bcf\u4e2a\u4eba\u90fd\u53ef\u4ee5\u7f16\u5199AI\u667a\u80fd\u4f53\u7a0b\u5e8f","Programming is not easy, but the hardest part is not the programming language itself, its the program structure organizing. We build a high level logic-abstraction to hide the structure and let developer focused on logic only.":"\u7f16\u5199\u7a0b\u5e8f\u5e76\u4e0d\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4e2d\u6700\u96be\u7684\u90e8\u5206\u5e76\u4e0d\u662f\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u800c\u662f\u5173\u4e8e\u5927\u89c4\u6a21\u7a0b\u5e8f\u600e\u6837\u7ec4\u7ec7\u7684\u65b9\u6cd5\uff0c\u4e5f\u5373\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u901a\u8fc7\u5efa\u7acb\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u7684\u903b\u8f91\u62bd\u8c61\u5c42\u6765\u9690\u85cf\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u6027\uff0c\u4f7f\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5c06\u6ce8\u610f\u529b\u653e\u5230\u4e1a\u52a1\u6d41\u7a0b\u4e0a\u3002","Most visual graph editting is just a visual wrapper of the original codes. We build a graph interaction which is as simple as Houdini and as powerful as any turning completed programming language.":"\u5927\u90e8\u5206\u57fa\u4e8eGraph\u7684\u53ef\u89c6\u7a0b\u5e8f\u7f16\u8f91\u53ea\u662f\u5bf9\u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801\u7684\u4e00\u79cd\u53ef\u89c6\u5316\uff0c\u8fd9\u610f\u5473\u7740\u5f00\u53d1\u8005\u4ecd\u7136\u9700\u8981\u5173\u6ce8\u7ed3\u6784\u6027\uff0c\u57fa\u4e8e\u6211\u4eec\u8c03\u6574\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u6211\u4eec\u6784\u5efa\u51fa\u4e00\u79cd\u50cfHoudini\u4e00\u6837\u7b80\u5355\u7684\u53ef\u89c6\u903b\u8f91\u7f16\u8f91\u4ea4\u4e92\uff0c\u540c\u65f6\u53c8\u548c\u5176\u5b83\u4efb\u4f55\u56fe\u7075\u5b8c\u5907\u7684\u7f16\u7a0b\u8bed\u8a00\u4e00\u6837\u5177\u6709\u7075\u6d3b\u7684\u8868\u8fbe\u80fd\u529b\u3002","An agent VM, platform and simulator":"\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u865a\u62df\u673a\u3001\u5e73\u53f0\u548c\u6a21\u62df\u5668","We then build a platform with a virtual machine to interpret and execute the above agent format program dynamically. By this dynamical capability, developer can create and share agent with users as simple as share a url.":"\u57fa\u4e8e\u8fd9\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u6211\u4eec\u5f00\u53d1\u4e86\u4e00\u4e2a\u865a\u62df\u673a\u7528\u4e8e\u52a8\u6001\u89e3\u91ca\u548c\u6267\u884c\u8fd9\u79cd\u7a0b\u5e8f\uff0c\u8fd9\u79cd\u52a8\u6001\u6027\u4f7f\u5f97\u4efb\u4f55\u4e2a\u4eba\u90fd\u53ef\u4ee5\u5f00\u53d1\u548c\u5206\u4eab\u81ea\u5df1\u7684\u4e2a\u6027\u5316\u7a0b\u5e8f\uff0c\u5c31\u50cf\u5206\u4eab\u4e00\u4e2aURL\u90a3\u4e48\u7b80\u5355\uff0c\u8fd9\u5c06\u5927\u5927\u7b80\u5316\u7a0b\u5e8f\u7684\u521b\u5efa\u548c\u53d1\u5e03\u6d41\u7a0b\u3002","Multi-agent conversational collaborating framework":"\u591a\u7a0b\u5e8f\u5bf9\u8bdd\u5f0f\u534f\u4f5c\u6846\u67b6","Agents can commnuicating with user, system and other agents in a very simple way which provides the ability to finish a task in a collaberating way.":"\u4efb\u4f55\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u4ee5\u975e\u5e38\u7b80\u5355\u7684\u65b9\u5f0f\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u548c\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u63d0\u4f9b\u4e00\u79cd\u80fd\u529b\u901a\u8fc7\u4f7f\u5f97\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u534f\u4f5c\u7684\u65b9\u5f0f\u6765\u5b8c\u6210\u590d\u6742\u7684\u4efb\u52a1\u3002","In a LLM-powered application, the inputs of a function is semantic instead of structured data, which brings uncertainty and needs conversational way to get more information. For solve this problem, we propose a new concept and a novel architecture called \\"Conversational computing\\" for the first time in the world, to make any function can be paused and conversational commnuicating with user, system and other agents to get full information it needs without extra works.":"\u57fa\u4e8e\u5927\u6a21\u578b\uff08LLM\uff09\u7684\u5e94\u7528\uff0c\u4e00\u4e2a\u51fd\u6570\u7684\u8f93\u5165\u662f\u8bed\u4e49\u5316\u7684\u6587\u672c\u800c\u4e0d\u662f\u7ed3\u6784\u5316\u7684\u6570\u636e\uff0c\u8fd9\u7ed9\u7a0b\u5e8f\u5e26\u6765\u4e86\u5f88\u591a\u4e0d\u786e\u5b9a\u6027\uff0c\u8fd9\u9700\u8981\u901a\u8fc7\u591a\u8f6e\u5bf9\u8bdd\u6765\u6f84\u6e05\u66f4\u591a\u4fe1\u606f\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u9996\u6b21\u63d0\u51fa\u4e00\u79cd\u79f0\u4e3a\u5bf9\u8bdd\u5f0f\u8ba1\u7b97\uff08Conversational Computing\uff09\u7684\u6982\u5ff5\u548c\u6280\u672f\uff0c\u4f7f\u5f97\u4efb\u4f55\u51fd\u6570\u90fd\u53ef\u4ee5\u4efb\u610f\u88ab\u6682\u505c\u4ee5\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u6216\u8005\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u5bf9\u8bdd\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u5e76\u5728\u6761\u4ef6\u6ee1\u8db3\u4e4b\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u6574\u4e2a\u8fc7\u7a0b\u5c31\u50cf\u7f16\u5199\u4f20\u7edf\u4e32\u884c\u7a0b\u5e8f\u4e00\u6837\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u505a\u4e00\u4e9b\u989d\u5916\u7e41\u7410\u7684\u5de5\u4f5c\u3002","An engine of complexity to emerge intelligence":"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u6784\u5efa\u7684\u590d\u6742\u5f15\u64ce","In biology or social economic syetm, many agreements have come to that the intelligence of the system come from the emergence mechanism of the complex system theory.":"\u5728\u751f\u7269\u548c\u793e\u4f1a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\uff0c\u4eba\u4eec\u666e\u904d\u7684\u5171\u8bc6\u662f\u6574\u4e2a\u7cfb\u7edf\u7684\u667a\u80fd\u6765\u6e90\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u4e2d\u7684\u6d8c\u73b0\u673a\u5236\uff0c\u8fd9\u79cd\u6d8c\u73b0\u673a\u5236\u901a\u8fc7\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5c40\u90e8\u534f\u4f5c\u3001\u590d\u5236\u53d8\u5f02\u4ee5\u53ca\u9009\u62e9\u6765\u5b9e\u73b0\u3002","In computer science and engineering, applications are isolated each other for data security and some other business reasons. The lack of interoperability make the applications non-cooperative and hence none-intelligent. We re-organized the structure and execution of software contruction process to provide a interopability-native architecture to form an engine of complexity.":"\u5728\u8ba1\u7b97\u673a\u79d1\u5b66\u548c\u5de5\u7a0b\u4e2d\uff0c\u5e94\u7528\u4e4b\u95f4\u901a\u5e38\u662f\u76f8\u4e92\u9694\u79bb\u4ee5\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\uff0c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u80fd\u529b\u7684\u7f3a\u5931\u4f7f\u5f97\u5e94\u7528\u4e4b\u95f4\u4ee5\u975e\u534f\u4f5c\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4ece\u800c\u7f3a\u4e4f\u667a\u80fd\u3002\u6211\u4eec\u901a\u8fc7\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u548c\u8fd0\u884c\u8fc7\u7a0b\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\u4ee5\u63d0\u4f9b\u4e00\u4e2a\u539f\u751f\u4e92\u64cd\u4f5c\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u4f7f\u6574\u4e2a\u7cfb\u7edf\u50cf\u4e00\u4e2a\u590d\u6742\u5f15\u64ce\u3002","Conversational":"\u5bf9\u8bdd\u5f0f\u8ba1\u7b97","Code can talk to user, system or other agents to ask more information at any function location, the agent will be paused and continue to run when got response.":"\u6bcf\u4e2a\u51fd\u6570\u53ef\u4ee5\u4efb\u610f\u8ddf\u7528\u6237\u3001\u7cfb\u7edf\u6216\u5176\u5b83\u7a0b\u5e8f\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u8be5\u7a0b\u5e8f\u4f1a\u88ab\u7cfb\u7edf\u6682\u505c\u76f4\u5230\u83b7\u5f97\u54cd\u5e94\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u8fd9\u79cd\u8ba1\u7b97\u6a21\u578b\u5bf9LLM\u5e94\u7528\u975e\u5e38\u91cd\u8981\u3002","Interoperability":"\u4e92\u64cd\u4f5c\u6027","Agents written by different developers could be running in a same memory environment and interoperate with each other with the permission of user.":"\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u4e4b\u95f4\u7f16\u5199\u7684\u7a0b\u5e8f\u53ef\u4ee5\u8fd0\u884c\u5728\u540c\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5e76\u5728\u7528\u6237\u7684\u8bb8\u53ef\u4e0b\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u79cd\u5e94\u7528\u4e4b\u95f4\u7684\u534f\u4f5c\u80fd\u529b\u662f\u672a\u6765\u5143\u5b87\u5b99\u548cAI\u591a\u667a\u80fd\u4f53\u5e94\u7528\u7684\u6838\u5fc3\u57fa\u7840\u9700\u6c42\u3002","Self-evolving":"\u81ea\u6211\u8fdb\u5316","The agents are working in a collaborated way and user could custimize it\'s personal composation to make the whole system self-evolving and emerge digital intelligence.":"\u6240\u6709\u7a0b\u5e8f\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\u65b9\u5f0f\u8fdb\u884c\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u5b9a\u5236\u4e2a\u6027\u5316\u7684\u7ec4\u5408\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7684\u4e2a\u6027\u9700\u6c42\uff0c\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\uff0c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u9ad8\u7684\u6570\u5b57\u667a\u80fd\u3002","Logic-abstraction":"\u903b\u8f91\u62bd\u8c61","We re-organized the whole program to make developers focused on logic of busniess and forget about the hardware, data and programing language abstraction.":"\u8fd0\u884c\u65f6\u5c06\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\uff0c\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5173\u6ce8\u903b\u8f91\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u786c\u4ef6\u3001\u5185\u5b58\u6570\u636e\u7ba1\u7406\u4ee5\u53ca\u5176\u5b83\u7f16\u7a0b\u8bed\u8a00\u76f8\u5173\u7684\u7ec6\u8282\uff0c\u4ece\u800c\u5efa\u7acb\u4e00\u79cd\u903b\u8f91\u62bd\u8c61\u3002","Computing Innovation":"\u8ba1\u7b97\u67b6\u6784\u521b\u65b0","We defined a agent format standard to represent a turing completed agent program which can be loaded and runned dynamically so everyone can develop an agent to handle personal needs.":"\u6211\u4eec\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5fae\u7a0b\u5e8f\uff08\u5982AI\u667a\u80fd\u4f53\uff09\u7684\u6807\u51c6\u683c\u5f0f\uff0c\u5b83\u662f\u56fe\u7075\u5b8c\u5907\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u52a0\u8f7d\u548c\u8fd0\u884c\u3002","Join our developer community":"\u52a0\u5165\u5f00\u53d1\u8005\u793e\u533a","Cogine is the virtual machine and base framework of Reality World, it defined a standard agent(a micro-program) format, and it can load and run multi-agent dynamically with the ability to interoperate and communicate with each other.":"Cogine\u662fReality World\u7684\u865a\u62df\u673a\u548c\u5e95\u5c42\u6846\u67b6, \u5b83\u5b9a\u4e49\u4e86\u4e00\u5957\u6807\u51c6\u7684\u5fae\u7a0b\u5e8f\uff08\u4f8b\u5982\u4e00\u4e2aLLM\u667a\u80fd\u4f53\uff09\u683c\u5f0f\uff0c\u8fd9\u4e9b\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u7684\u52a0\u8f7d\u548c\u8fd0\u884c\uff0c \u5fae\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u4ee5\u5f88\u7b80\u5355\u7edf\u4e00\u7684\u65b9\u5f0f\u8fdb\u884c\u901a\u4fe1\u3002","The term Cogine stands for An engine of complexity, or an cognitive computing engine, or conversational computing engine.":"Cogine\u4e00\u8bcd\u6765\u6e90\u4e8e\u51e0\u4e2a\u76f8\u5173\u7684\u610f\u601d\uff1aAn engine of complexity\uff0c \u6216\u8005an cognitive computing engine, \u6216\u8005 conversational computing engine\u3002","And you can deploy it yourself within your own application.":"\u4f60\u4e5f\u53ef\u4ee5\u5c06Cogine\u90e8\u7f72\u96c6\u6210\u5230\u81ea\u5df1\u7684\u5e94\u7528\u4e2d\u3002","Reality World is an app which can load and run any agent defined by the Cogine agent format, it\'s also a simulator you can used to debug your agent program.":"Reality World\u662f\u4e00\u4e2a\u53ef\u4ee5\u52a0\u8f7d\u548c\u8fd0\u884c\u9075\u5faaCogine\u5b9a\u4e49\u7684Agent\u683c\u5f0f\u7684\u5e94\u7528\uff0c \u5b83\u4e5f\u662f\u4e00\u4e2a\u6a21\u62df\u5668\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u5b83\u8c03\u8bd5Agent\u7a0b\u5e8f\u3002","User who installed the Reality World app can create and share agent each other. It makes Reality World a agent platform.":"\u4efb\u4f55\u5b89\u88c5Reality World \u5e94\u7528\u7684\u7528\u6237\u4e4b\u95f4\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u521b\u5efa\u548c\u5206\u4eabAgent\u7a0b\u5e8f\uff0c\u8fd9\u4f7f\u5f97\u5b83\u6210\u4e3a\u4e00\u4e2aAgent\u5f00\u53d1\u548c\u90e8\u7f72\u7684\u5e73\u53f0\u3002","Reality Create is a graph-based editor, it can create and define an agent program which will can be running in Reality World app or by the Cogine virtual machine":"Reality Create\u662f\u4e00\u4e2a\u57fa\u4e8e\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4f7f\u7528\u5b83\u53ef\u4ee5\u521b\u5efa\u7531Cogine\u5b9a\u4e49\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u7a0b\u5e8f\u53ef\u4ee5\u88abReality World\u52a0\u8f7d\u6216\u8005Cogine\u865a\u62df\u673a\u52a0\u8f7d\u8fd0\u884c\u3002","Features and benefits":"\u7279\u6027 \u548c \u597d\u5904","The following we list the main features of Cogine, for the details please check the technical documentation.":"\u4ee5\u4e0b\u662fCogine\u7684\u4e00\u4e9b\u4e3b\u8981\u7279\u6027\uff0c\u66f4\u8be6\u7ec6\u7684\u4ecb\u7ecd\u53c2\u89c1\u6280\u672f\u6587\u6863","Development comparison with LangChain and Chidori":"\u4e0e LangChain \u548c Chidori \u5728\u5f00\u53d1\u4f53\u9a8c\u4e0a\u7684\u6bd4\u8f83","Basically, in other framework, you have to learn Python language, have to care about the structure of the program and have to learn many architecture design (such as different specific class and its inheritance relationships. In Cogine, the only thing you are care about is your logic, no other programming burden.":"\u57fa\u672c\u4e0a\uff0c\u5728\u4f7f\u7528\u5176\u5b83\u6846\u67b6\u7684\u65f6\u5019\uff0c\u7528\u6237\u5fc5\u987b\u8981\u5168\u9762\u5b66\u4e60Python\uff0c\u5173\u6ce8\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u4ee5\u53ca\u8fd9\u4e9b\u6846\u67b6\u672c\u8eab\u5b9a\u4e49\u7684\u5404\u79cd\u590d\u6742\u7684\u7c7b\u53ca\u5176\u590d\u6742\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u7136\u540e\u4f7f\u7528\u8fd9\u4e9b\u7279\u5b9a\u7684\u67b6\u6784\u89c4\u5219\u6784\u5efa\u7a0b\u5e8f\u3002 \u4f7f\u7528Cogine\uff0c\u4f60\u552f\u4e00\u9700\u8981\u5173\u5fc3\u7684\u5c31\u662f\u903b\u8f91\u672c\u8eab\uff0c \u6ca1\u6709\u592a\u591a\u8f6f\u4ef6\u6784\u9020\u65b9\u9762\u7684\u8d1f\u62c5\u3002"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/zh/app-f51":{"__comp":"7fa55123","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/blog-42a":{"__comp":"a6aa9e1f","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"3a332aed"},"/zh/blog/archive-aaf":{"__comp":"9e4087bc","__context":{"plugin":"831b5c01"},"archive":"927d70e2"},"/zh/blog/conversational-computing-1c0":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"ec9b07e8"},"/zh/blog/reality-world-open-source-conference-c19":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"92f86187"},"/zh/blog/tags-02a":{"__comp":"01a85c17","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","tags":"bfb16af5"},"/zh/blog/tags/cogine-e43":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"e121e550","listMetadata":"3b8538cb"},"/zh/blog/tags/open-source-bf1":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"c4113809","listMetadata":"d2080cbe"},"/zh/blog/tags/reality-world-7f0":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"129facaa","listMetadata":"f0f7ee06"},"/zh/blog/the-evolution-of-ECS-714":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"cede0149"},"/zh/blog/thinking-838":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"0c125c2b"},"/zh/cogine-e3d":{"__comp":"28207210","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/community/about-open-source-285":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"14fa4984"},"/zh/community/about-reality-world-d54":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"a394719f"},"/zh/community/contact-9c8":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2c22cdfb"},"/zh/community/questions-d15":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"df434585"},"/zh/community/resources-6c5":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6ba9ce7"},"/zh/community/roadmap-422":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"68bfee64"},"/zh/feature/chidori-54a":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"5503d724"},"/zh/feature/cogine-95c":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2ae76f65"},"/zh/feature/features-0c8":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"956d92de"},"/zh/feature/langchain-add":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6e914c2"},"/zh/features-d0e":{"__comp":"a54713d3","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/reality-create-221":{"__comp":"a6d44343","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/reality-world-paper/-974":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"be3188a8"},"/zh/self-deploying-830":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"0b68990b"},"/zh/whitepaper/-c84":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"c6a65125"},"/zh/community-841":{"__comp":"1be78505","__context":{"plugin":"ec0679b0"},"versionMetadata":"306a8c6c"},"/zh/community/-080":{"__comp":"17896441","content":"edc931f8"},"/zh/docs-11f":{"__comp":"1be78505","__context":{"plugin":"087bcfde"},"versionMetadata":"935f2afb"},"/zh/docs/intro-743":{"__comp":"17896441","content":"0e384e19"},"/zh/docs/introduction/-71f":{"__comp":"17896441","content":"c62485b9"},"/zh/docs/introduction/advantage-812":{"__comp":"17896441","content":"16c820cc"},"/zh/docs/introduction/business-model-4bc":{"__comp":"17896441","content":"eb4e993a"},"/zh/docs/introduction/current-71b":{"__comp":"17896441","content":"1e248c61"},"/zh/docs/introduction/evolution-75d":{"__comp":"17896441","content":"c84e1d07"},"/zh/docs/introduction/user-cd6":{"__comp":"17896441","content":"1e8a94b6"},"/zh/docs/introduction/value-e8d":{"__comp":"17896441","content":"386fda77"},"/zh/-5f6":{"__comp":"c4f5d8e4","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/zh/assets/js/main.111c70cd.js.LICENSE.txt b/zh/assets/js/main.111c70cd.js.LICENSE.txt deleted file mode 100644 index fbc0635..0000000 --- a/zh/assets/js/main.111c70cd.js.LICENSE.txt +++ /dev/null @@ -1,132 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ - -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ - -/** - * @license React - * use-sync-external-store-shim.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ - -/** @license React v0.20.2 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/zh/assets/js/main.85e16a82.js b/zh/assets/js/main.85e16a82.js new file mode 100644 index 0000000..723558d --- /dev/null +++ b/zh/assets/js/main.85e16a82.js @@ -0,0 +1,2 @@ +/*! For license information please see main.85e16a82.js.LICENSE.txt */ +(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"088d37c1":[()=>n.e(4982).then(n.t.bind(n,4469,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"129facaa":[()=>n.e(5674).then(n.t.bind(n,3048,19)),"~blog/default/zh-blog-tags-reality-world-399.json",3048],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(4474),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(4474),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"308394e9":[()=>n.e(3650).then(n.bind(n,4317)),"@site/src/pages/learning/Reality-World.md",4317],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"3a332aed":[()=>n.e(8800).then(n.t.bind(n,9567,19)),"~blog/default/zh-blog-ea2.json",9567],"3b8538cb":[()=>n.e(236).then(n.t.bind(n,3179,19)),"~blog/default/zh-blog-tags-cogine-4f3-list.json",3179],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"5062db26":[()=>n.e(990).then(n.t.bind(n,5745,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"927d70e2":[()=>n.e(1045).then(n.t.bind(n,2190,19)),"~blog/default/zh-blog-archive-8d7.json",2190],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"956d92de":[()=>n.e(8778).then(n.bind(n,3878)),"@site/i18n/zh/docusaurus-plugin-content-pages/feature/features.mdx",3878],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,481)),"@site/src/pages/features.js",481],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],bfb16af5:[()=>n.e(5909).then(n.t.bind(n,5392,19)),"~blog/default/zh-blog-tags-tags-906.json",5392],c4113809:[()=>n.e(1545).then(n.t.bind(n,4144,19)),"~blog/default/zh-blog-tags-open-source-285.json",4144],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],d2080cbe:[()=>n.e(9221).then(n.t.bind(n,931,19)),"~blog/default/zh-blog-tags-open-source-285-list.json",931],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],e121e550:[()=>n.e(4916).then(n.t.bind(n,668,19)),"~blog/default/zh-blog-tags-cogine-4f3.json",668],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],f0f7ee06:[()=>n.e(8342).then(n.t.bind(n,4151,19)),"~blog/default/zh-blog-tags-reality-world-399-list.json",4151],fb33060d:[()=>n.e(8287).then(n.t.bind(n,3769,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/zh/app",component:f("/zh/app","fbb"),exact:!0},{path:"/zh/blog",component:f("/zh/blog","940"),exact:!0},{path:"/zh/blog/archive",component:f("/zh/blog/archive","503"),exact:!0},{path:"/zh/blog/conversational-computing",component:f("/zh/blog/conversational-computing","6f6"),exact:!0},{path:"/zh/blog/reality-world-open-source-conference",component:f("/zh/blog/reality-world-open-source-conference","7c7"),exact:!0},{path:"/zh/blog/tags",component:f("/zh/blog/tags","b75"),exact:!0},{path:"/zh/blog/tags/cogine",component:f("/zh/blog/tags/cogine","e77"),exact:!0},{path:"/zh/blog/tags/open-source",component:f("/zh/blog/tags/open-source","370"),exact:!0},{path:"/zh/blog/tags/reality-world",component:f("/zh/blog/tags/reality-world","59e"),exact:!0},{path:"/zh/blog/the-evolution-of-ECS",component:f("/zh/blog/the-evolution-of-ECS","50d"),exact:!0},{path:"/zh/blog/thinking",component:f("/zh/blog/thinking","591"),exact:!0},{path:"/zh/cogine",component:f("/zh/cogine","d8f"),exact:!0},{path:"/zh/community/about-open-source",component:f("/zh/community/about-open-source","b76"),exact:!0},{path:"/zh/community/about-reality-world",component:f("/zh/community/about-reality-world","d65"),exact:!0},{path:"/zh/community/contact",component:f("/zh/community/contact","954"),exact:!0},{path:"/zh/community/questions",component:f("/zh/community/questions","17e"),exact:!0},{path:"/zh/community/resources",component:f("/zh/community/resources","5d5"),exact:!0},{path:"/zh/community/roadmap",component:f("/zh/community/roadmap","b8c"),exact:!0},{path:"/zh/feature/chidori",component:f("/zh/feature/chidori","5be"),exact:!0},{path:"/zh/feature/cogine",component:f("/zh/feature/cogine","d29"),exact:!0},{path:"/zh/feature/features",component:f("/zh/feature/features","a74"),exact:!0},{path:"/zh/feature/langchain",component:f("/zh/feature/langchain","cb1"),exact:!0},{path:"/zh/features",component:f("/zh/features","58e"),exact:!0},{path:"/zh/learning/Reality-World",component:f("/zh/learning/Reality-World","917"),exact:!0},{path:"/zh/reality-create",component:f("/zh/reality-create","ed1"),exact:!0},{path:"/zh/reality-world-paper/",component:f("/zh/reality-world-paper/","c13"),exact:!0},{path:"/zh/self-deploying",component:f("/zh/self-deploying","f8a"),exact:!0},{path:"/zh/whitepaper/",component:f("/zh/whitepaper/","a89"),exact:!0},{path:"/zh/docs",component:f("/zh/docs","704"),routes:[{path:"/zh/docs/intro",component:f("/zh/docs/intro","743"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/",component:f("/zh/docs/introduction/","71f"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/advantage",component:f("/zh/docs/introduction/advantage","812"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/business-model",component:f("/zh/docs/introduction/business-model","4bc"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/current",component:f("/zh/docs/introduction/current","71b"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/evolution",component:f("/zh/docs/introduction/evolution","75d"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/user",component:f("/zh/docs/introduction/user","cd6"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/value",component:f("/zh/docs/introduction/value","e8d"),exact:!0,sidebar:"docsSidebar"}]},{path:"/zh/",component:f("/zh/","010"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x,O,P,C,T,I,A,L,N,R,j=function(e){var t=new j.Builder;return t.pipeline.add(j.trimmer,j.stopWordFilter,j.stemmer),t.searchPipeline.add(j.stemmer),e.call(t,t),t.build()};j.version="2.3.9",j.utils={},j.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),j.utils.asString=function(e){return null==e?"":e.toString()},j.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},j.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},j.FieldRef.joiner="/",j.FieldRef.fromString=function(e){var t=e.indexOf(j.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new j.FieldRef(r,n,e)},j.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+j.FieldRef.joiner+this.docRef),this._stringValue},j.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},j.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},j.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},j.Set.prototype.contains=function(e){return!!this.elements[e]},j.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===j.Set.complete)return this;if(e===j.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new j.Set(o)},j.Set.prototype.union=function(e){return e===j.Set.complete?j.Set.complete:e===j.Set.empty?this:new j.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},j.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},j.Token=function(e,t){this.str=e||"",this.metadata=t||{}},j.Token.prototype.toString=function(){return this.str},j.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},j.Token.prototype.clone=function(e){return e=e||function(e){return e},new j.Token(e(this.str,this.metadata),this.metadata)},j.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new j.Token(j.utils.asString(e).toLowerCase(),j.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(j.tokenizer.separator)||a==r){if(l>0){var s=j.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new j.Token(n.slice(i,a),s))}i=a+1}}return o},j.tokenizer.separator=/[\s\-]+/,j.Pipeline=function(){this._stack=[]},j.Pipeline.registeredFunctions=Object.create(null),j.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&j.utils.warn("Overwriting existing registered function: "+t),e.label=t,j.Pipeline.registeredFunctions[e.label]=e},j.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||j.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},j.Pipeline.load=function(e){var t=new j.Pipeline;return e.forEach((function(e){var n=j.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},j.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){j.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},j.Pipeline.prototype.after=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},j.Pipeline.prototype.before=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},j.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},j.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},j.Pipeline.prototype.runString=function(e,t){var n=new j.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},j.Pipeline.prototype.reset=function(){this._stack=[]},j.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return j.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},j.Vector=function(e){this._magnitude=0,this.elements=e||[]},j.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},j.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},j.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},j.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},j.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},j.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},j.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},j.Vector.prototype.toJSON=function(){return this.elements},j.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),b=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,L=/ll$/,N=new RegExp("^"+u+s+"[^aeiouwxy]$"),R=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=b).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=N,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=L).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(R)}),j.Pipeline.registerFunction(j.stemmer,"stemmer"),j.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},j.stopWordFilter=j.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),j.Pipeline.registerFunction(j.stopWordFilter,"stopWordFilter"),j.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},j.Pipeline.registerFunction(j.trimmer,"trimmer"),j.TokenSet=function(){this.final=!1,this.edges={},this.id=j.TokenSet._nextId,j.TokenSet._nextId+=1},j.TokenSet._nextId=1,j.TokenSet.fromArray=function(e){for(var t=new j.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},j.TokenSet.fromClause=function(e){return"editDistance"in e?j.TokenSet.fromFuzzyString(e.term,e.editDistance):j.TokenSet.fromString(e.term)},j.TokenSet.fromFuzzyString=function(e,t){for(var n=new j.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new j.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new j.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new j.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new j.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},j.TokenSet.fromString=function(e){for(var t=new j.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new j.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},j.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},j.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},j.TokenSet.prototype.intersect=function(e){for(var t=new j.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new j.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},j.TokenSet.Builder=function(){this.previousWord="",this.root=new j.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},j.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new j.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},j.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},j.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},j.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},j.Index.prototype.search=function(e){return this.query((function(t){new j.QueryParser(e,t).parse()}))},j.Index.prototype.query=function(e){for(var t=new j.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new j.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=j.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=j.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===j.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=j.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],b=this.invertedIndex[y],v=b._index;for(h=0;h<s.fields.length;h++){var w=b[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new j.Set(E);if(s.presence==j.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=j.Set.complete)),s.presence!=j.Query.presence.PROHIBITED){if(r[A].upsert(v,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new j.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new j.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=j.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===j.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=j.Set.complete,I=j.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var L=Object.keys(n),N=[],R=Object.create(null);if(t.isNegated()){L=Object.keys(this.fieldVectors);for(l=0;l<L.length;l++){P=L[l];var D=j.FieldRef.fromString(P);n[P]=new j.MatchData}}for(l=0;l<L.length;l++){var M=(D=j.FieldRef.fromString(L[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=R[M]))F.score+=z,F.matchData.combine(n[D]);else{var U={ref:M,score:z,matchData:n[D]};R[M]=U,N.push(U)}}}return N.sort((function(e,t){return t.score-e.score}))},j.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:j.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},j.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new j.TokenSet.Builder,l=j.Pipeline.load(e.pipeline);e.version!=j.version&&j.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+j.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new j.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new j.Index(t)},j.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=j.tokenizer,this.pipeline=new j.Pipeline,this.searchPipeline=new j.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},j.Builder.prototype.ref=function(e){this._ref=e},j.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},j.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},j.Builder.prototype.k1=function(e){this._k1=e},j.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new j.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var b=this.metadataWhitelist[y],v=m.metadata[b];null==this.invertedIndex[m][a][n][b]&&(this.invertedIndex[m][a][n][b]=[]),this.invertedIndex[m][a][n][b].push(v)}}}},j.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=j.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},j.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=j.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new j.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,b=c[m],v=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(h=j.idf(this.invertedIndex[b],this.documentCount),r[b]=h):h=r[b],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+v),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},j.Builder.prototype.createTokenSet=function(){this.tokenSet=j.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},j.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new j.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},j.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},j.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},j.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},j.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},j.Query=function(e){this.clauses=[],this.allFields=e},j.Query.wildcard=new String("*"),j.Query.wildcard.NONE=0,j.Query.wildcard.LEADING=1,j.Query.wildcard.TRAILING=2,j.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},j.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=j.Query.wildcard.NONE),e.wildcard&j.Query.wildcard.LEADING&&e.term.charAt(0)!=j.Query.wildcard&&(e.term="*"+e.term),e.wildcard&j.Query.wildcard.TRAILING&&e.term.slice(-1)!=j.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=j.Query.presence.OPTIONAL),this.clauses.push(e),this},j.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=j.Query.presence.PROHIBITED)return!1;return!0},j.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,j.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},j.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},j.QueryParseError.prototype=new Error,j.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},j.QueryLexer.prototype.run=function(){for(var e=j.QueryLexer.lexText;e;)e=e(this)},j.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},j.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},j.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},j.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return j.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},j.QueryLexer.prototype.width=function(){return this.pos-this.start},j.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},j.QueryLexer.prototype.backup=function(){this.pos-=1},j.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=j.QueryLexer.EOS&&this.backup()},j.QueryLexer.prototype.more=function(){return this.pos<this.length},j.QueryLexer.EOS="EOS",j.QueryLexer.FIELD="FIELD",j.QueryLexer.TERM="TERM",j.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",j.QueryLexer.BOOST="BOOST",j.QueryLexer.PRESENCE="PRESENCE",j.QueryLexer.lexField=function(e){return e.backup(),e.emit(j.QueryLexer.FIELD),e.ignore(),j.QueryLexer.lexText},j.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(j.QueryLexer.TERM)),e.ignore(),e.more())return j.QueryLexer.lexText},j.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.EDIT_DISTANCE),j.QueryLexer.lexText},j.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.BOOST),j.QueryLexer.lexText},j.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(j.QueryLexer.TERM)},j.QueryLexer.termSeparator=j.tokenizer.separator,j.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==j.QueryLexer.EOS)return j.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return j.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if(t.match(j.QueryLexer.termSeparator))return j.QueryLexer.lexTerm}else e.escapeCharacter()}},j.QueryParser=function(e,t){this.lexer=new j.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},j.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=j.QueryParser.parseClause;e;)e=e(this);return this.query},j.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},j.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},j.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},j.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case j.QueryLexer.PRESENCE:return j.QueryParser.parsePresence;case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new j.QueryParseError(n,t.start,t.end)}},j.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=j.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=j.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new j.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new j.QueryParseError(n,t.start,t.end)}switch(r.type){case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new j.QueryParseError(n,r.start,r.end)}}},j.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new j.QueryParseError(r,t.start,t.end)}if(o.type===j.QueryLexer.TERM)return j.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}},j.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new j.QueryParseError(r,n.start,n.end)}else e.nextClause()}},j.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},j.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return j})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),b=n(5463),v=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const L=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(L,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const j=R,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(U,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var W=n(3256),Z=n(1048);function V(){const e=(0,Z.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Q(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(W.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement($,null),r.createElement(j,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),N(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(Q,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/zh/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/zh/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/zh/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/zh/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/zh/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/zh/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/zh/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/zh/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/zh/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/zh/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/zh/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"zh","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:v,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,L=(0,o.useRef)(),N=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&L.current&&L.current.disconnect()})),[L,P,A,x]);const R=P?.startsWith("#")??!1,j=!P||!x||R;return j||g||S.collectLink(P),j?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},b)):o.createElement(I,(0,r.Z)({},b,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{k.current=e,A&&e&&x&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),L.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const b={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:b.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),L=n(3086);const N=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(N.Provider,{value:n},t)}function j(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(N);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:j(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const W=r.memo(H),Z={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(W,{className:t,buttonClassName:"dark"===n?Z.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Q=n(6811);function q(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function be(e){return{current:e}}function ve(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(ve(e)||ve(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Le(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Ne(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ne(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Re(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Le(Le({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function je(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",Re(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",Re(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",Re(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",Re(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Le(Le({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Le(Le({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ue(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var We="2.6.0",Ze="https://cdn.jsdelivr.net/npm/search-insights@".concat(We,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return $e({eventName:"Items Viewed"},e)})),state:o})}),400);function Qe(e){var t=function(e){return $e({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=We,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Ze,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=je(i),s=be([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:$e({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[$e({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[$e({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function bt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(Rt(t,n,e),Rt(r,n,e)),n)},catch:function(t){return At(e.catch(Rt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(Rt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Lt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Nt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function Rt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function jt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Lt.resolve=function(e){return Nt(Promise.resolve(e))},Lt.reject=function(e){return Nt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ut(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var $t,Ht,Wt,Zt=null,Vt=($t=-1,Ht=-1,Wt=void 0,function(e){var t=++$t;return Promise.resolve(e).then((function(e){return Wt&&t<Ht?Wt:(Ht=t,Wt=e,e)}))});function Qt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=Ut(e,Mt);Zt&&o.environment.clearTimeout(Zt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Nt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Zt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Nt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return vt(vt({},e),{},wt({},t.source.sourceId,vt(vt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=jt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Zt&&o.environment.clearTimeout(Zt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Qt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=jt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Qt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=jt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Qt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=jt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Qt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=jt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Qt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:vn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=jt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Ln(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ln(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Nn(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Qt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(Qe(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var Rn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,Rn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},jn=new Map;function Dn(e){var t=jn.get(this);return t||(t=new Map,jn.set(this,t)),(t=Rn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Un(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function $n(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Un(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,$n,r):e.removeEventListener(t,$n,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Wn(e){return"onChange"===e?"onInput":e}function Zn(e,t){for(var n in t)Hn(e,Wn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Wn(n),t[n])}var Qn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Qn),i=e.document.createElement(t);return Zn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Zn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],br=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,vr=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,b,v,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):vr(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(b=Nr(m,E,y=d+w,k))?p=gr:(p=E[b]||gr,E[b]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&Ur(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(v=p===gr||null===p.__v)?-1==b&&w--:b!==y&&(b===y+1?w++:b>y?k>_-y?w+=b-y:w--:w=b<y&&b==y-1?b-y:0),y=d+w,"function"!=typeof m.type||b===y&&p.__k!==m.__k?"function"==typeof m.type||b===y&&!v?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Lr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),$r(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),$r(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Lr(n,r.__e,t));return t}function Lr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Nr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function Rr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||br.test(t)?n:n+"px"}function jr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||Rr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||Rr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,b=(c=x.contextType)&&r[c.__c],v=c?b?b.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,v):(t.__c=d=new xr(y,v),d.constructor=x,d.render=Hr),b&&b.sub(d),d.props=y,d.state||(d.state={}),d.context=v,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,v),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,v)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,v),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=v,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,vr(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)Ur(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||jr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||jr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,vr(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&jr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&jr(e,"checked",h,f.checked,!1))}return e}function Ur(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function $r(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||Ur(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&$r(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Wr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Zr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Qr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Qr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function bo(e){return bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bo(e)}var vo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Wr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){Lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var No=[{segment:"autocomplete-js",version:hn}];function Ro(e){return function(e){if(Array.isArray(e))return jo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return jo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return jo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function jo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,Ro(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Uo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){$o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Wo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Zo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Qo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=be(!1),c=be(e),d=be(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,b=e.components,v=e.translations,w=ko(e,vo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),b),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),v)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Nn(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:No,options:e}}))})),h=be(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},b=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),v=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),b=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),v=f("label",lr({class:r.label,children:[b]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[v,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var L=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),N=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[L,A,I]}),R=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),j=f("div",{class:r.detachedFormContainer,children:[P,R]});h.appendChild(j),m.appendChild(N)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:v,submitButton:b,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Zn(v.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:b.value,dom:v.value,panelContainer:p.value?v.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Zn(r.label,{hidden:"stalled"===a.status}),Zn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Zn(r.clearButton,{hidden:!a.query}),Zn(r.detachedSearchButtonQuery,{textContent:a.query}),Zn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Qo(r,Zo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Uo(Uo({},e),{},$o({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(v.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(f.value.core.environment.document.body.removeChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return Zn(f.value.core.environment,e),function(){Zn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?v.value.detachedOverlay:v.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},b=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),v=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(v.current)return w.current=Ko({container:v.current,placeholder:b,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:v,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],b=(0,fa.lO)(n)[0],v=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,w=t&&y.length>1?void 0:ma(b).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:v,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function ba(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function va(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(va,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(ba,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function La(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const Na={colorModeToggle:"colorModeToggle_DEke"};function Ra(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function ja(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(ja,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(La,null),r.createElement(q,null),r.createElement(Ra,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ra,{items:o}),r.createElement(V,{className:Na.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function Ua(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function $a(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Wa(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement($a,null))))))}function Za(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ua,{columns:t}):r.createElement(Wa,{links:t})}var Va=n(6753);const Qa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Qa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Za,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(L.n2,null,r.createElement(T.M,null,r.createElement(R,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(v,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g,Oh:()=>v});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>b,oz:()=>v,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function v(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",b="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)(U,e),U.length=n.length,C.notifyListeners(U.location,U.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(O(e.state))}function A(){N(O(v()))}var L=!1;function N(e){if(L)L=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=U.location,n=j.indexOf(t.key);-1===n&&(n=0);var r=j.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,M(o))}(e)}))}}var R=O(v()),j=[R.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(b,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(b,A))}var z=!1;var U={length:n.length,action:"POP",location:R,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=j.indexOf(U.location.key),u=j.slice(0,s+1);u.push(a.key),j=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=j.indexOf(U.location.key);-1!==s&&(j[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",b=S[u],v=b.encodePath,w=b.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=v(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=j.lastIndexOf(f(t));-1===n&&(n=0);var r=j.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var L=_(),N=v(L);L!==N&&x(N);var R=O(),j=[f(R)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+v(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=j.lastIndexOf(f(z.location)),i=j.slice(0,a+1);i.push(t),j=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);_()!==o&&(I=t,x(o));var a=j.indexOf(f(z.location));-1!==a&&(j[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),b=f;function v(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:b,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var b=f(n,y);try{u(t,y,b)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,b=!!h.greedy,v=h.alias;if(b&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(b){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],L=_.slice(0,P),N=_.slice(P+A.length),R=k+_.length;d&&R>d.reach&&(d.reach=R);var j=S.prev;if(L&&(j=s(t,j,L),k+=L.length),u(t,j,O),S=s(t,j,new o(f,g?r.tokenize(A,g):A,v,A)),N&&s(t,S,N),O>1){var D={cause:f+","+m,reach:R};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,L=60115,N=60116,R=60121,j=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),L=B("react.memo"),N=B("react.lazy"),R=B("react.block"),B("react.scope"),j=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var W=!1;function Z(e,t){if(!e||W)return"";W=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{W=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Z(e.type,!1);case 11:return e=Z(e.type.render,!1);case 22:return e=Z(e.type._render,!1);case 1:return e=Z(e.type,!0);default:return""}}function Q(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case L:return Q(e.type);case R:return Q(e._render);case N:t=e._payload,e=e._init;try{return Q(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ve=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){ve.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Le(e,t){return e(t)}function Ne(e,t,n,r,o){return e(t,n,r,o)}function Re(){}var je=Le,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(Re(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){ze=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(he){ze=!1}function $e(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,We=null,Ze=!1,Ve=null,Qe={onError:function(e){He=!0,We=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,We=null,$e.apply(Qe,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){yt(e)&&n.delete(t)}function vt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(bt),ct.forEach(bt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,vt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Lt=new Map,Nt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function Rt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Lt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var jt=8;function Dt(e){if(0!=(1&e))return jt=15,1;if(0!=(2&e))return jt=14,2;if(0!=(4&e))return jt=13,4;var t=24&e;return 0!==t?(jt=12,t):0!=(32&e)?(jt=11,32):0!==(t=192&e)?(jt=10,t):0!=(256&e)?(jt=9,256):0!==(t=3584&e)?(jt=8,t):0!=(4096&e)?(jt=7,4096):0!==(t=4186112&e)?(jt=6,t):0!==(t=62914560&e)?(jt=5,t):67108864&e?(jt=4,67108864):0!=(134217728&e)?(jt=3,134217728):0!==(t=805306368&e)?(jt=2,t):0!=(1073741824&e)?(jt=1,1073741824):(jt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return jt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=jt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=jt):0!==(l&=a)&&(r=Dt(l),o=jt)}else 0!==(a=n&~i)?(r=Dt(a),o=jt):0!==l&&(r=Dt(l),o=jt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=jt)return t;jt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function $t(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wt(e)/Zt|0)|0},Wt=Math.log,Zt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Qt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||Re();var o=Kt,a=De;De=!0;try{Ne(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Qt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}Rr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return Rr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),bn=ln(o({},pn,{relatedTarget:0})),vn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Ln=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Nn=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=ln(Nn),jn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),Un=!1;function $n(e,t){switch(e){case"keyup":return-1!==jn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Wn=!1;var Zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Zn[e.type]:"textarea"===t}function Qn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Qn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Le(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,br=null,vr=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==br||br!==X(r)||("selectionStart"in(r=br)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(vr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=br)))}Rt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Rt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Rt(Nt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Lt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=We;He=!1,We=null,Ze||(Ze=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Ze)throw e=Ve,Ze=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Nr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Lr(t,!1,e,null),Lr(t,!0,e,null)})))}function Lr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Nr(a,e,o,t),i.add(l))}function Nr(e,t,n,r){var o=Lt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Rr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return je(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=bn;break;case"focusout":u="blur",s=bn;break;case"beforeblur":case"afterblur":s=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=vn;break;case It:s=Ln;break;case"scroll":s=mn;break;case"wheel":s=Rn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(jr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Qn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(br=y,vr=r,wr=null);break;case"focusout":wr=vr=br=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var b;if(Dn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Wn?$n(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Bn&&"ko"!==n.locale&&(Wn||"onCompositionStart"!==v?"onCompositionEnd"===v&&Wn&&(b=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Wn=!0)),0<(y=Dr(r,v)).length&&(v=new Sn(v,e,null,n,o),i.push({event:v,listeners:y}),b?v.data=b:null!==(b=Hn(n))&&(v.data=b))),(b=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(Un=!0,zn);case"textInput":return(e=t.data)===zn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Wn)return"compositionend"===e||!Dn&&$n(e,t)?(e=nn(),tn=en=Jt=null,Wn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Cr(i,t)}))}function jr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(jr(e,a,o)),null!=(a=Be(e,t))&&r.push(jr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(jr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(jr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,Ur=null;function $r(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Wr="function"==typeof setTimeout?setTimeout:void 0,Zr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Qr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function bo(){uo(mo),uo(po)}function vo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,Q(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,Lo=a.unstable_ImmediatePriority,No=a.unstable_UserBlockingPriority,Ro=a.unstable_NormalPriority,jo=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,Uo=!1,$o=Io(),Ho=1e4>$o?Io:function(){return Io()-$o};function Wo(){switch(Ao()){case Lo:return 99;case No:return 98;case Ro:return 97;case jo:return 96;case Do:return 95;default:throw Error(i(332))}}function Zo(e){switch(e){case 99:return Lo;case 98:return No;case 97:return Ro;case 96:return jo;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Zo(e),xo(e,t)}function Qo(e,t,n){return e=Zo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!Uo&&null!==Bo){Uo=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(Lo,qo),n}finally{Uo=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function ba(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function va(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Qs(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Qs(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||$(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||$(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||$(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=$(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var v=p(o,h,b.value,u);if(null===v){null===h&&(h=y);break}e&&h&&null===v.alternate&&t(o,h),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v,h=y}if(b.done)return n(o,h),c;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,u))&&(l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(h=r(o,h);!b.done;g++,b=s.next())null!==(b=m(h,o,g,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Qs(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if($(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,Q(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function La(e){if(e===Ca)throw Error(i(174));return e}function Na(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function Ra(){uo(Ta),uo(Ia),uo(Aa)}function ja(e){La(Aa.current);var t=La(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,Ua=!1;function $a(e,t){var n=Ws(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Wa(e){if(Ua){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Qr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,Ua=!1,void(Ba=e);$a(Ba,n)}Ba=e,za=Qr(t.firstChild)}else e.flags=-1025&e.flags|2,Ua=!1,Ba=e}}function Za(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!Ua)return Za(e),Ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)$a(e,t),t=Qr(t.nextSibling);if(Za(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Qr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Qr(e.stateNode.nextSibling):null;return!0}function Qa(){za=Ba=null,Ua=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Li:Ni,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=Ri,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Nl;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function bi(){return si().memoizedState}function vi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return vi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Wo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,vi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if(Ua){var e=!1,t=function(e){return{$$typeof:j,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:bi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},Ri={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:bi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},ji=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Zs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Qs(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function Ui(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function $i(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Wi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),va(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||ba(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||ba(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Zi(e,t,n,r,a,o)}function Zi(e,t,n,r,o,a){$i(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,ji.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),Na(e,t.containerInfo)}var Qi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Wa(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Ua)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&bo(),null;case 3:return Ra(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=La(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=La(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Qi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}$r(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=La(Aa.current),La(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Nl||0==(134217727&Ul)&&0==(134217727&$l)||bs(Nl,jl))),(r||n)&&(t.flags|=4),null);case 4:return Ra(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Ua)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&bo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ra(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return Ra(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Qi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,La(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===j?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&$r(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function bl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function vl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(vl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(vl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Zl=Ho(),bl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=$s.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Ll=0,Nl=null,Rl=null,jl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,Ul=0,$l=0,Hl=0,Wl=null,Zl=0,Vl=1/0;function Ql(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Ll)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Wo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Wl?Wl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Wo(),0!=(4&Ll)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;$t(e,t,n),e===Nl&&($l|=t,4===Fl&&bs(e,jl));var r=Wo();1===t?0!=(8&Ll)&&0==(48&Ll)?vs(e):(gs(e,n),0===Ll&&(Ql(),qo())):(0==(4&Ll)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Wl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=jt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Nl?jl:0),t=jt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=vs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(Lo,Go)):Bo.push(n),n=Mo):14===t?n=Qo(99,vs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Qo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Ll))throw Error(i(327));var t=e.callbackNode;if(js()&&e.callbackNode!==t)return null;var n=Mt(e,e===Nl?jl:0);if(0===n)return null;var r=n,o=Ll;Ll|=16;var a=Os();for(Nl===e&&jl===r||(Ql(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Ll=o,null!==Rl?r=0:(Nl=null,jl=0,r=Fl),0!=(zl&$l))_s(e,0);else if(0!==r){if(2===r&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),bs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ls(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=Zl+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Wr(Ls.bind(null,e),r);break}Ls(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Wr(Ls.bind(null,e),n);break}Ls(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function bs(e,t){for(t&=~Hl,t&=~$l,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function vs(e){if(0!=(48&Ll))throw Error(i(327));if(js(),e===Nl&&0!=(e.expiredLanes&jl)){var t=jl,n=Ps(e,t);0!=(zl&$l)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),bs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ls(e),gs(e,Ho()),null}function ws(e,t){var n=Ll;Ll|=1;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Es(e,t){var n=Ll;Ll&=-2,Ll|=8;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Zr(n)),null!==Rl)for(n=Rl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&bo();break;case 3:Ra(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:Ra();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Nl=e,Rl=Vs(e.current,null),jl=Dl=zl=t,Fl=0,Bl=null,Hl=$l=Ul=0}function xs(e,t){for(;;){var n=Rl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,Rl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=jl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=ca(-1,1);b.tag=2,da(l,b)}l.lanes|=1;break e}s=void 0,l=t;var v=a.pingCache;if(null===v?(v=a.pingCache=new dl,s=new Set,v.set(u,s)):void 0===(s=v.get(u))&&(s=new Set,v.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((Q(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,Rl===n&&null!==n&&(Rl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Ll;Ll|=16;var r=Os();for(Nl===e&&jl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Ll=n,Il.current=r,null!==Rl)throw Error(i(261));return Nl=null,jl=0,Fl}function Cs(){for(;null!==Rl;)Is(Rl)}function Ts(){for(;null!==Rl&&!Co();)Is(Rl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):Rl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(Rl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Rl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Rl=t);Rl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ls(e){var t=Wo();return Vo(99,Ns.bind(null,e,t)),null}function Ns(e,t){do{js()}while(null!==es);if(0!=(48&Ll))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Nl&&(Rl=Nl=null,jl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ll,Ll|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var b;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)y=g,g=b;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(b=g.nextSibling))break;y=(g=y).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{Rs()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var v=Gl.flags;if(16&v&&ye(Gl.stateNode,""),128&v){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&v){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=Ur,w=hr(),v=E.focusedElem,l=E.selectionRange,w!==v&&v&&v.ownerDocument&&mr(v.ownerDocument.documentElement,v)){null!==l&&gr(v)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in v?(v.selectionStart=w,v.selectionEnd=Math.min(E,v.value.length)):(E=(w=v.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=v.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(v,S),a=pr(v,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=v;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof v.focus&&v.focus(),v=0;v<w.length;v++)(E=w[v]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,Ur=zr=null,e.current=n,Gl=r;do{try{for(v=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(v,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Ll=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Ll)||qo(),null}function Rs(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Qo(97,(function(){return js(),null}))),Gl=Gl.nextEffect}}function js(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return js(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return js(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Ll))throw Error(i(331));var t=Ll;Ll|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Ll=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&($t(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))$t(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Nl===e&&(jl&n)===n&&(4===Fl||3===Fl&&(62914560&jl)===jl&&500>Ho()-Zl?_s(e,0):Hl|=n),gs(e,t)}function $s(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Wo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&($t(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Ws(e,t,n,r){return new Hs(e,t,n,r)}function Zs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Ws(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Qs(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Zs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Ws(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Ws(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Ws(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Ws(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case L:l=14;break e;case N:l=16,r=null;break e;case R:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Ws(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Ws(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Ws(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Ws(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Ws(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Ws(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Qa();break;case 5:ja(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:Na(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Zi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Zs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===L)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Wi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Wi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Qa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Qr(t.stateNode.containerInfo.firstChild),Ba=t,a=Ua=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Qa();t=t.child}return t;case 5:return ja(t),null===e&&Wa(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),$i(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Wa(t),null;case 13:return Xi(e,t,n);case 4:return Na(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),va(t,r,o),Ea(t,r,o,n),Zi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Le=ws,Ne=function(e,t,n,r,o){var a=Ll;Ll|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Ll=a)&&(Ql(),qo())}},Re=function(){0==(49&Ll)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),js())},je=function(e,t){var n=Ll;Ll|=2;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,js,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Z,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},j=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=j(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+R(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return j(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,y),i=A(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),W="undefined"!=typeof document,Z=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Z.canUseDOM=W,Z.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Z.defaultProps={context:{}},Z.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;Q(g.BODY,e.bodyAttributes),Q(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),Q(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Z.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===v||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},b=a.forwardRef;void 0===b&&(b=y);var v=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(v?v(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var L=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==b?L.ref=t||x:L.innerRef=x,a.createElement(g,L)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>v,LX:()=>k,TH:()=>N,k6:()=>L,rs:()=>I,s6:()=>b});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),b=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(b.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(b.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function L(){return A(y)}function N(){return A(b).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===v||"*"===v,k="?"===v||"*"===v,_=n[2]||c,x=y||b;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var v=b.prototype=new y;v.constructor=b,r(v,g.prototype),v.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var L={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=L,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,b=5,v=0;t.unstable_shouldYield=function(){return t.unstable_now()>=v},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();v=e+b;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,L=!1,N=!1;function R(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function j(e){if(N=!1,R(e),!L)if(null!==k(O))L=!0,n(D);else{var t=k(P);null!==t&&r(j,t.startTime-e)}}function D(e,n){L=!1,N&&(N=!1,o()),A=!0;var a=I;try{for(R(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),R(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(j,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){L||A||(L=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(N?o():N=!0,r(j,i-l))):(e.sortIndex=s,S(O,e),L||A||(L=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/zh/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"\u4ea7\u54c1",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"\u81ea\u6211\u90e8\u7f72"}],position:"left"},{label:"\u5f00\u53d1\u8005",type:"dropdown",items:[{to:"/whitepaper",label:"\u767d\u76ae\u4e66"},{to:"/docs/intro",label:"\u6280\u672f\u6587\u6863"},{to:"/learning/Reality-World",label:"Learning"}],position:"left"},{to:"/blog",label:"\u535a\u5ba2",position:"left"},{to:"/features",label:"\u7279\u6027 & \u6bd4\u8f83",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"\u793e\u533a",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"\u5173\u4e8e\u5f00\u6e90"},{to:"/community/about-reality-world",label:"\u5173\u4e8e Reality World"},{to:"/community/roadmap",label:"\u8def\u7ebf\u56fe"},{to:"/community/contact",label:"\u8054\u7cfb"},{to:"/community/questions",label:"\u5e38\u89c1\u95ee\u9898"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/home/runner/work/cogine.github.io/cogine.github.io/sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"/home/runner/work/cogine.github.io/cogine.github.io/src/css/custom.css"}}]],plugins:[["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"theme.AnnouncementBar.closeButtonAriaLabel":"\u5173\u95ed","theme.BackToTopButton.buttonAriaLabel":"\u56de\u5230\u9876\u90e8","theme.CodeBlock.copied":"\u590d\u5236\u6210\u529f","theme.CodeBlock.copy":"\u590d\u5236","theme.CodeBlock.copyButtonAriaLabel":"\u590d\u5236\u4ee3\u7801\u5230\u526a\u8d34\u677f","theme.CodeBlock.wordWrapToggle":"\u5207\u6362\u81ea\u52a8\u6362\u884c","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"\u6253\u5f00/\u6536\u8d77\u4fa7\u8fb9\u680f\u83dc\u5355\u300c{label}\u300d","theme.ErrorPageContent.title":"\u9875\u9762\u5df2\u5d29\u6e83\u3002","theme.ErrorPageContent.tryAgain":"\u91cd\u8bd5","theme.NavBar.navAriaLabel":"\u4e3b\u5bfc\u822a","theme.NotFound.p1":"\u6211\u4eec\u627e\u4e0d\u5230\u60a8\u8981\u627e\u7684\u9875\u9762\u3002","theme.NotFound.p2":"\u8bf7\u8054\u7cfb\u539f\u59cb\u94fe\u63a5\u6765\u6e90\u7f51\u7ad9\u7684\u6240\u6709\u8005\uff0c\u5e76\u544a\u77e5\u4ed6\u4eec\u94fe\u63a5\u5df2\u635f\u574f\u3002","theme.NotFound.title":"\u627e\u4e0d\u5230\u9875\u9762","theme.TOCCollapsible.toggleButtonLabel":"\u672c\u9875\u603b\u89c8","theme.admonition.caution":"\u8b66\u544a","theme.admonition.danger":"\u5371\u9669","theme.admonition.info":"\u4fe1\u606f","theme.admonition.note":"\u5907\u6ce8","theme.admonition.tip":"\u63d0\u793a","theme.blog.archive.description":"\u5386\u53f2\u535a\u6587","theme.blog.archive.title":"\u5386\u53f2\u535a\u6587","theme.blog.paginator.navAriaLabel":"\u535a\u6587\u5217\u8868\u5206\u9875\u5bfc\u822a","theme.blog.paginator.newerEntries":"\u8f83\u65b0\u7684\u535a\u6587","theme.blog.paginator.olderEntries":"\u8f83\u65e7\u7684\u535a\u6587","theme.blog.post.paginator.navAriaLabel":"\u535a\u6587\u5206\u9875\u5bfc\u822a","theme.blog.post.paginator.newerPost":"\u8f83\u65b0\u4e00\u7bc7","theme.blog.post.paginator.olderPost":"\u8f83\u65e7\u4e00\u7bc7","theme.blog.post.plurals":"{count} \u7bc7\u535a\u6587","theme.blog.post.readMore":"\u9605\u8bfb\u66f4\u591a","theme.blog.post.readMoreLabel":"\u9605\u8bfb {title} \u7684\u5168\u6587","theme.blog.post.readingTime.plurals":"\u9605\u8bfb\u9700 {readingTime} \u5206\u949f","theme.blog.sidebar.navAriaLabel":"\u6700\u8fd1\u535a\u6587\u5bfc\u822a","theme.blog.tagTitle":"{nPosts} \u542b\u6709\u6807\u7b7e\u300c{tagName}\u300d","theme.colorToggle.ariaLabel":"\u5207\u6362\u6d45\u8272/\u6697\u9ed1\u6a21\u5f0f\uff08\u5f53\u524d\u4e3a{mode}\uff09","theme.colorToggle.ariaLabel.mode.dark":"\u6697\u9ed1\u6a21\u5f0f","theme.colorToggle.ariaLabel.mode.light":"\u6d45\u8272\u6a21\u5f0f","theme.common.editThisPage":"\u7f16\u8f91\u6b64\u9875","theme.common.headingLinkTitle":"{heading}\u7684\u76f4\u63a5\u94fe\u63a5","theme.common.skipToMainContent":"\u8df3\u5230\u4e3b\u8981\u5185\u5bb9","theme.docs.DocCard.categoryDescription":"{count} \u4e2a\u9879\u76ee","theme.docs.breadcrumbs.home":"\u4e3b\u9875\u9762","theme.docs.breadcrumbs.navAriaLabel":"\u9875\u9762\u8def\u5f84","theme.docs.paginator.navAriaLabel":"\u6587\u4ef6\u9009\u9879\u5361","theme.docs.paginator.next":"\u4e0b\u4e00\u9875","theme.docs.paginator.previous":"\u4e0a\u4e00\u9875","theme.docs.sidebar.closeSidebarButtonAriaLabel":"\u5173\u95ed\u5bfc\u822a\u680f","theme.docs.sidebar.collapseButtonAriaLabel":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.collapseButtonTitle":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonAriaLabel":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonTitle":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.navAriaLabel":"\u6587\u6863\u4fa7\u8fb9\u680f","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"\u5207\u6362\u5bfc\u822a\u680f","theme.docs.tagDocListPageTitle":"{nDocsTagged}\u300c{tagName}\u300d","theme.docs.tagDocListPageTitle.nDocsTagged":"{count} \u7bc7\u6587\u6863\u5e26\u6709\u6807\u7b7e","theme.docs.versionBadge.label":"\u7248\u672c\uff1a{versionLabel}","theme.docs.versions.latestVersionLinkLabel":"\u6700\u65b0\u7248\u672c","theme.docs.versions.latestVersionSuggestionLabel":"\u6700\u65b0\u7684\u6587\u6863\u8bf7\u53c2\u9605 {latestVersionLink} ({versionLabel})\u3002","theme.docs.versions.unmaintainedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u7684\u6587\u6863\uff0c\u73b0\u5df2\u4e0d\u518d\u79ef\u6781\u7ef4\u62a4\u3002","theme.docs.versions.unreleasedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u5c1a\u672a\u53d1\u884c\u7684\u6587\u6863\u3002","theme.lastUpdated.atDate":"\u4e8e {date} ","theme.lastUpdated.byUser":"\u7531 {user} ","theme.lastUpdated.lastUpdatedAtBy":"\u6700\u540e{byUser}{atDate}\u66f4\u65b0","theme.navbar.mobileLanguageDropdown.label":"\u9009\u62e9\u8bed\u8a00","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 \u56de\u5230\u4e3b\u83dc\u5355","theme.navbar.mobileVersionsDropdown.label":"\u9009\u62e9\u7248\u672c","theme.tags.tagsListLabel":"\u6807\u7b7e\uff1a","theme.tags.tagsPageLink":"\u67e5\u770b\u6240\u6709\u6807\u7b7e","theme.tags.tagsPageTitle":"\u6807\u7b7e","cmfcmf/d-s-l.searchBar.placeholder":"\u641c\u7d22...","cmfcmf/d-s-l.searchBar.noResults":"\u65e0\u641c\u7d22\u7ed3\u679c","cmfcmf/d-s-l.searchBar.clearButtonTitle":"\u6e05\u9664","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"\u53d6\u6d88","cmfcmf/d-s-l.searchBar.submitButtonTitle":"\u641c\u7d22","Whitepaper":"\u767d\u76ae\u4e66","Read More":"\u9605\u8bfb\u66f4\u591a","Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It\'s like a complex system and emerges digital intelligence.":"Reality World\u662f\u4e00\u4e2a\u591a\u7a0b\u5e8f\uff08\u5982\u591a\u667a\u80fd\u4f53\uff09\u52a8\u6001\u8fd0\u884c\u7684\u5e73\u53f0\u548c\u6a21\u62df\u5668\uff0c \u5b83\u7684\u6838\u5fc3\u662f\u89e3\u51b3\u8fd9\u4e9b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3001\u5b89\u5168\u548c\u8c03\u5ea6\u3002\u5b83\u50cf\u590d\u6742\u7cfb\u7edf\u4e00\u6837\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u7a0b\u5e8f\u7ec4\u5408\uff0c\u4f7f\u5f97\u6574\u4f53\u7a0b\u5e8f\u76f8\u6bd4\u4f20\u7edf\u7a0b\u5e8f\u80fd\u591f\u6d8c\u73b0\u51fa\u6570\u5b57\u667a\u80fd\u3002","Get Started":"\u5f00\u59cb\u5165\u95e8","Let everyone can write AI agent":"\u8ba9\u6bcf\u4e2a\u4eba\u90fd\u53ef\u4ee5\u7f16\u5199AI\u667a\u80fd\u4f53\u7a0b\u5e8f","Programming is not easy, but the hardest part is not the programming language itself, its the program structure organizing. We build a high level logic-abstraction to hide the structure and let developer focused on logic only.":"\u7f16\u5199\u7a0b\u5e8f\u5e76\u4e0d\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4e2d\u6700\u96be\u7684\u90e8\u5206\u5e76\u4e0d\u662f\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u800c\u662f\u5173\u4e8e\u5927\u89c4\u6a21\u7a0b\u5e8f\u600e\u6837\u7ec4\u7ec7\u7684\u65b9\u6cd5\uff0c\u4e5f\u5373\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u901a\u8fc7\u5efa\u7acb\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u7684\u903b\u8f91\u62bd\u8c61\u5c42\u6765\u9690\u85cf\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u6027\uff0c\u4f7f\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5c06\u6ce8\u610f\u529b\u653e\u5230\u4e1a\u52a1\u6d41\u7a0b\u4e0a\u3002","Most visual graph editting is just a visual wrapper of the original codes. We build a graph interaction which is as simple as Houdini and as powerful as any turning completed programming language.":"\u5927\u90e8\u5206\u57fa\u4e8eGraph\u7684\u53ef\u89c6\u7a0b\u5e8f\u7f16\u8f91\u53ea\u662f\u5bf9\u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801\u7684\u4e00\u79cd\u53ef\u89c6\u5316\uff0c\u8fd9\u610f\u5473\u7740\u5f00\u53d1\u8005\u4ecd\u7136\u9700\u8981\u5173\u6ce8\u7ed3\u6784\u6027\uff0c\u57fa\u4e8e\u6211\u4eec\u8c03\u6574\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u6211\u4eec\u6784\u5efa\u51fa\u4e00\u79cd\u50cfHoudini\u4e00\u6837\u7b80\u5355\u7684\u53ef\u89c6\u903b\u8f91\u7f16\u8f91\u4ea4\u4e92\uff0c\u540c\u65f6\u53c8\u548c\u5176\u5b83\u4efb\u4f55\u56fe\u7075\u5b8c\u5907\u7684\u7f16\u7a0b\u8bed\u8a00\u4e00\u6837\u5177\u6709\u7075\u6d3b\u7684\u8868\u8fbe\u80fd\u529b\u3002","An agent VM, platform and simulator":"\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u865a\u62df\u673a\u3001\u5e73\u53f0\u548c\u6a21\u62df\u5668","We then build a platform with a virtual machine to interpret and execute the above agent format program dynamically. By this dynamical capability, developer can create and share agent with users as simple as share a url.":"\u57fa\u4e8e\u8fd9\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u6211\u4eec\u5f00\u53d1\u4e86\u4e00\u4e2a\u865a\u62df\u673a\u7528\u4e8e\u52a8\u6001\u89e3\u91ca\u548c\u6267\u884c\u8fd9\u79cd\u7a0b\u5e8f\uff0c\u8fd9\u79cd\u52a8\u6001\u6027\u4f7f\u5f97\u4efb\u4f55\u4e2a\u4eba\u90fd\u53ef\u4ee5\u5f00\u53d1\u548c\u5206\u4eab\u81ea\u5df1\u7684\u4e2a\u6027\u5316\u7a0b\u5e8f\uff0c\u5c31\u50cf\u5206\u4eab\u4e00\u4e2aURL\u90a3\u4e48\u7b80\u5355\uff0c\u8fd9\u5c06\u5927\u5927\u7b80\u5316\u7a0b\u5e8f\u7684\u521b\u5efa\u548c\u53d1\u5e03\u6d41\u7a0b\u3002","Multi-agent conversational collaborating framework":"\u591a\u7a0b\u5e8f\u5bf9\u8bdd\u5f0f\u534f\u4f5c\u6846\u67b6","Agents can commnuicating with user, system and other agents in a very simple way which provides the ability to finish a task in a collaberating way.":"\u4efb\u4f55\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u4ee5\u975e\u5e38\u7b80\u5355\u7684\u65b9\u5f0f\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u548c\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u63d0\u4f9b\u4e00\u79cd\u80fd\u529b\u901a\u8fc7\u4f7f\u5f97\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u534f\u4f5c\u7684\u65b9\u5f0f\u6765\u5b8c\u6210\u590d\u6742\u7684\u4efb\u52a1\u3002","In a LLM-powered application, the inputs of a function is semantic instead of structured data, which brings uncertainty and needs conversational way to get more information. For solve this problem, we propose a new concept and a novel architecture called \\"Conversational computing\\" for the first time in the world, to make any function can be paused and conversational commnuicating with user, system and other agents to get full information it needs without extra works.":"\u57fa\u4e8e\u5927\u6a21\u578b\uff08LLM\uff09\u7684\u5e94\u7528\uff0c\u4e00\u4e2a\u51fd\u6570\u7684\u8f93\u5165\u662f\u8bed\u4e49\u5316\u7684\u6587\u672c\u800c\u4e0d\u662f\u7ed3\u6784\u5316\u7684\u6570\u636e\uff0c\u8fd9\u7ed9\u7a0b\u5e8f\u5e26\u6765\u4e86\u5f88\u591a\u4e0d\u786e\u5b9a\u6027\uff0c\u8fd9\u9700\u8981\u901a\u8fc7\u591a\u8f6e\u5bf9\u8bdd\u6765\u6f84\u6e05\u66f4\u591a\u4fe1\u606f\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u9996\u6b21\u63d0\u51fa\u4e00\u79cd\u79f0\u4e3a\u5bf9\u8bdd\u5f0f\u8ba1\u7b97\uff08Conversational Computing\uff09\u7684\u6982\u5ff5\u548c\u6280\u672f\uff0c\u4f7f\u5f97\u4efb\u4f55\u51fd\u6570\u90fd\u53ef\u4ee5\u4efb\u610f\u88ab\u6682\u505c\u4ee5\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u6216\u8005\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u5bf9\u8bdd\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u5e76\u5728\u6761\u4ef6\u6ee1\u8db3\u4e4b\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u6574\u4e2a\u8fc7\u7a0b\u5c31\u50cf\u7f16\u5199\u4f20\u7edf\u4e32\u884c\u7a0b\u5e8f\u4e00\u6837\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u505a\u4e00\u4e9b\u989d\u5916\u7e41\u7410\u7684\u5de5\u4f5c\u3002","An engine of complexity to emerge intelligence":"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u6784\u5efa\u7684\u590d\u6742\u5f15\u64ce","In biology or social economic syetm, many agreements have come to that the intelligence of the system come from the emergence mechanism of the complex system theory.":"\u5728\u751f\u7269\u548c\u793e\u4f1a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\uff0c\u4eba\u4eec\u666e\u904d\u7684\u5171\u8bc6\u662f\u6574\u4e2a\u7cfb\u7edf\u7684\u667a\u80fd\u6765\u6e90\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u4e2d\u7684\u6d8c\u73b0\u673a\u5236\uff0c\u8fd9\u79cd\u6d8c\u73b0\u673a\u5236\u901a\u8fc7\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5c40\u90e8\u534f\u4f5c\u3001\u590d\u5236\u53d8\u5f02\u4ee5\u53ca\u9009\u62e9\u6765\u5b9e\u73b0\u3002","In computer science and engineering, applications are isolated each other for data security and some other business reasons. The lack of interoperability make the applications non-cooperative and hence none-intelligent. We re-organized the structure and execution of software contruction process to provide a interopability-native architecture to form an engine of complexity.":"\u5728\u8ba1\u7b97\u673a\u79d1\u5b66\u548c\u5de5\u7a0b\u4e2d\uff0c\u5e94\u7528\u4e4b\u95f4\u901a\u5e38\u662f\u76f8\u4e92\u9694\u79bb\u4ee5\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\uff0c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u80fd\u529b\u7684\u7f3a\u5931\u4f7f\u5f97\u5e94\u7528\u4e4b\u95f4\u4ee5\u975e\u534f\u4f5c\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4ece\u800c\u7f3a\u4e4f\u667a\u80fd\u3002\u6211\u4eec\u901a\u8fc7\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u548c\u8fd0\u884c\u8fc7\u7a0b\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\u4ee5\u63d0\u4f9b\u4e00\u4e2a\u539f\u751f\u4e92\u64cd\u4f5c\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u4f7f\u6574\u4e2a\u7cfb\u7edf\u50cf\u4e00\u4e2a\u590d\u6742\u5f15\u64ce\u3002","Conversational":"\u5bf9\u8bdd\u5f0f\u8ba1\u7b97","Code can talk to user, system or other agents to ask more information at any function location, the agent will be paused and continue to run when got response.":"\u6bcf\u4e2a\u51fd\u6570\u53ef\u4ee5\u4efb\u610f\u8ddf\u7528\u6237\u3001\u7cfb\u7edf\u6216\u5176\u5b83\u7a0b\u5e8f\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u8be5\u7a0b\u5e8f\u4f1a\u88ab\u7cfb\u7edf\u6682\u505c\u76f4\u5230\u83b7\u5f97\u54cd\u5e94\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u8fd9\u79cd\u8ba1\u7b97\u6a21\u578b\u5bf9LLM\u5e94\u7528\u975e\u5e38\u91cd\u8981\u3002","Interoperability":"\u4e92\u64cd\u4f5c\u6027","Agents written by different developers could be running in a same memory environment and interoperate with each other with the permission of user.":"\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u4e4b\u95f4\u7f16\u5199\u7684\u7a0b\u5e8f\u53ef\u4ee5\u8fd0\u884c\u5728\u540c\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5e76\u5728\u7528\u6237\u7684\u8bb8\u53ef\u4e0b\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u79cd\u5e94\u7528\u4e4b\u95f4\u7684\u534f\u4f5c\u80fd\u529b\u662f\u672a\u6765\u5143\u5b87\u5b99\u548cAI\u591a\u667a\u80fd\u4f53\u5e94\u7528\u7684\u6838\u5fc3\u57fa\u7840\u9700\u6c42\u3002","Self-evolving":"\u81ea\u6211\u8fdb\u5316","The agents are working in a collaborated way and user could custimize it\'s personal composation to make the whole system self-evolving and emerge digital intelligence.":"\u6240\u6709\u7a0b\u5e8f\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\u65b9\u5f0f\u8fdb\u884c\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u5b9a\u5236\u4e2a\u6027\u5316\u7684\u7ec4\u5408\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7684\u4e2a\u6027\u9700\u6c42\uff0c\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\uff0c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u9ad8\u7684\u6570\u5b57\u667a\u80fd\u3002","Logic-abstraction":"\u903b\u8f91\u62bd\u8c61","We re-organized the whole program to make developers focused on logic of busniess and forget about the hardware, data and programing language abstraction.":"\u8fd0\u884c\u65f6\u5c06\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\uff0c\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5173\u6ce8\u903b\u8f91\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u786c\u4ef6\u3001\u5185\u5b58\u6570\u636e\u7ba1\u7406\u4ee5\u53ca\u5176\u5b83\u7f16\u7a0b\u8bed\u8a00\u76f8\u5173\u7684\u7ec6\u8282\uff0c\u4ece\u800c\u5efa\u7acb\u4e00\u79cd\u903b\u8f91\u62bd\u8c61\u3002","Computing Innovation":"\u8ba1\u7b97\u67b6\u6784\u521b\u65b0","We defined a agent format standard to represent a turing completed agent program which can be loaded and runned dynamically so everyone can develop an agent to handle personal needs.":"\u6211\u4eec\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5fae\u7a0b\u5e8f\uff08\u5982AI\u667a\u80fd\u4f53\uff09\u7684\u6807\u51c6\u683c\u5f0f\uff0c\u5b83\u662f\u56fe\u7075\u5b8c\u5907\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u52a0\u8f7d\u548c\u8fd0\u884c\u3002","Join our developer community":"\u52a0\u5165\u5f00\u53d1\u8005\u793e\u533a","Cogine is the virtual machine and base framework of Reality World, it defined a standard agent(a micro-program) format, and it can load and run multi-agent dynamically with the ability to interoperate and communicate with each other.":"Cogine\u662fReality World\u7684\u865a\u62df\u673a\u548c\u5e95\u5c42\u6846\u67b6, \u5b83\u5b9a\u4e49\u4e86\u4e00\u5957\u6807\u51c6\u7684\u5fae\u7a0b\u5e8f\uff08\u4f8b\u5982\u4e00\u4e2aLLM\u667a\u80fd\u4f53\uff09\u683c\u5f0f\uff0c\u8fd9\u4e9b\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u7684\u52a0\u8f7d\u548c\u8fd0\u884c\uff0c \u5fae\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u4ee5\u5f88\u7b80\u5355\u7edf\u4e00\u7684\u65b9\u5f0f\u8fdb\u884c\u901a\u4fe1\u3002","The term Cogine stands for An engine of complexity, or an cognitive computing engine, or conversational computing engine.":"Cogine\u4e00\u8bcd\u6765\u6e90\u4e8e\u51e0\u4e2a\u76f8\u5173\u7684\u610f\u601d\uff1aAn engine of complexity\uff0c \u6216\u8005an cognitive computing engine, \u6216\u8005 conversational computing engine\u3002","And you can deploy it yourself within your own application.":"\u4f60\u4e5f\u53ef\u4ee5\u5c06Cogine\u90e8\u7f72\u96c6\u6210\u5230\u81ea\u5df1\u7684\u5e94\u7528\u4e2d\u3002","Reality World is an app which can load and run any agent defined by the Cogine agent format, it\'s also a simulator you can used to debug your agent program.":"Reality World\u662f\u4e00\u4e2a\u53ef\u4ee5\u52a0\u8f7d\u548c\u8fd0\u884c\u9075\u5faaCogine\u5b9a\u4e49\u7684Agent\u683c\u5f0f\u7684\u5e94\u7528\uff0c \u5b83\u4e5f\u662f\u4e00\u4e2a\u6a21\u62df\u5668\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u5b83\u8c03\u8bd5Agent\u7a0b\u5e8f\u3002","User who installed the Reality World app can create and share agent each other. It makes Reality World a agent platform.":"\u4efb\u4f55\u5b89\u88c5Reality World \u5e94\u7528\u7684\u7528\u6237\u4e4b\u95f4\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u521b\u5efa\u548c\u5206\u4eabAgent\u7a0b\u5e8f\uff0c\u8fd9\u4f7f\u5f97\u5b83\u6210\u4e3a\u4e00\u4e2aAgent\u5f00\u53d1\u548c\u90e8\u7f72\u7684\u5e73\u53f0\u3002","Reality Create is a graph-based editor, it can create and define an agent program which will can be running in Reality World app or by the Cogine virtual machine":"Reality Create\u662f\u4e00\u4e2a\u57fa\u4e8e\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4f7f\u7528\u5b83\u53ef\u4ee5\u521b\u5efa\u7531Cogine\u5b9a\u4e49\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u7a0b\u5e8f\u53ef\u4ee5\u88abReality World\u52a0\u8f7d\u6216\u8005Cogine\u865a\u62df\u673a\u52a0\u8f7d\u8fd0\u884c\u3002","Features and benefits":"\u7279\u6027 \u548c \u597d\u5904","The following we list the main features of Cogine, for the details please check the technical documentation.":"\u4ee5\u4e0b\u662fCogine\u7684\u4e00\u4e9b\u4e3b\u8981\u7279\u6027\uff0c\u66f4\u8be6\u7ec6\u7684\u4ecb\u7ecd\u53c2\u89c1\u6280\u672f\u6587\u6863","Development comparison with LangChain and Chidori":"\u4e0e LangChain \u548c Chidori \u5728\u5f00\u53d1\u4f53\u9a8c\u4e0a\u7684\u6bd4\u8f83","Basically, in other framework, you have to learn Python language, have to care about the structure of the program and have to learn many architecture design (such as different specific class and its inheritance relationships. In Cogine, the only thing you are care about is your logic, no other programming burden.":"\u57fa\u672c\u4e0a\uff0c\u5728\u4f7f\u7528\u5176\u5b83\u6846\u67b6\u7684\u65f6\u5019\uff0c\u7528\u6237\u5fc5\u987b\u8981\u5168\u9762\u5b66\u4e60Python\uff0c\u5173\u6ce8\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u4ee5\u53ca\u8fd9\u4e9b\u6846\u67b6\u672c\u8eab\u5b9a\u4e49\u7684\u5404\u79cd\u590d\u6742\u7684\u7c7b\u53ca\u5176\u590d\u6742\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u7136\u540e\u4f7f\u7528\u8fd9\u4e9b\u7279\u5b9a\u7684\u67b6\u6784\u89c4\u5219\u6784\u5efa\u7a0b\u5e8f\u3002 \u4f7f\u7528Cogine\uff0c\u4f60\u552f\u4e00\u9700\u8981\u5173\u5fc3\u7684\u5c31\u662f\u903b\u8f91\u672c\u8eab\uff0c \u6ca1\u6709\u592a\u591a\u8f6f\u4ef6\u6784\u9020\u65b9\u9762\u7684\u8d1f\u62c5\u3002"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/zh/app-fbb":{"__comp":"7fa55123","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/blog-940":{"__comp":"a6aa9e1f","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"3a332aed"},"/zh/blog/archive-503":{"__comp":"9e4087bc","__context":{"plugin":"088d37c1"},"archive":"927d70e2"},"/zh/blog/conversational-computing-6f6":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"ec9b07e8"},"/zh/blog/reality-world-open-source-conference-7c7":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"92f86187"},"/zh/blog/tags-b75":{"__comp":"01a85c17","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","tags":"bfb16af5"},"/zh/blog/tags/cogine-e77":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"e121e550","listMetadata":"3b8538cb"},"/zh/blog/tags/open-source-370":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"c4113809","listMetadata":"d2080cbe"},"/zh/blog/tags/reality-world-59e":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"129facaa","listMetadata":"f0f7ee06"},"/zh/blog/the-evolution-of-ECS-50d":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"cede0149"},"/zh/blog/thinking-591":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"0c125c2b"},"/zh/cogine-d8f":{"__comp":"28207210","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/community/about-open-source-b76":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"14fa4984"},"/zh/community/about-reality-world-d65":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"a394719f"},"/zh/community/contact-954":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2c22cdfb"},"/zh/community/questions-17e":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"df434585"},"/zh/community/resources-5d5":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6ba9ce7"},"/zh/community/roadmap-b8c":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"68bfee64"},"/zh/feature/chidori-5be":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"5503d724"},"/zh/feature/cogine-d29":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2ae76f65"},"/zh/feature/features-a74":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"956d92de"},"/zh/feature/langchain-cb1":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6e914c2"},"/zh/features-58e":{"__comp":"a54713d3","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/learning/Reality-World-917":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"308394e9"},"/zh/reality-create-ed1":{"__comp":"a6d44343","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/reality-world-paper/-c13":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"be3188a8"},"/zh/self-deploying-f8a":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"0b68990b"},"/zh/whitepaper/-a89":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"c6a65125"},"/zh/docs-704":{"__comp":"1be78505","__context":{"plugin":"fb33060d"},"versionMetadata":"935f2afb"},"/zh/docs/intro-743":{"__comp":"17896441","content":"0e384e19"},"/zh/docs/introduction/-71f":{"__comp":"17896441","content":"c62485b9"},"/zh/docs/introduction/advantage-812":{"__comp":"17896441","content":"16c820cc"},"/zh/docs/introduction/business-model-4bc":{"__comp":"17896441","content":"eb4e993a"},"/zh/docs/introduction/current-71b":{"__comp":"17896441","content":"1e248c61"},"/zh/docs/introduction/evolution-75d":{"__comp":"17896441","content":"c84e1d07"},"/zh/docs/introduction/user-cd6":{"__comp":"17896441","content":"1e8a94b6"},"/zh/docs/introduction/value-e8d":{"__comp":"17896441","content":"386fda77"},"/zh/-010":{"__comp":"c4f5d8e4","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.6cbf0c8c.js.LICENSE.txt b/zh/assets/js/main.85e16a82.js.LICENSE.txt similarity index 100% rename from assets/js/main.6cbf0c8c.js.LICENSE.txt rename to zh/assets/js/main.85e16a82.js.LICENSE.txt diff --git a/zh/assets/js/main.c0db0840.js b/zh/assets/js/main.c0db0840.js deleted file mode 100644 index 151bcdd..0000000 --- a/zh/assets/js/main.c0db0840.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.c0db0840.js.LICENSE.txt */ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"087bcfde":[()=>n.e(3111).then(n.t.bind(n,3769,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-docs\\default\\plugin-route-context-module-100.json",3769],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"129facaa":[()=>n.e(5674).then(n.t.bind(n,3048,19)),"~blog/default/zh-blog-tags-reality-world-399.json",3048],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(8485),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(8485),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"308394e9":[()=>n.e(3650).then(n.bind(n,4317)),"@site/src/pages/learning/Reality-World.md",4317],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"3a332aed":[()=>n.e(8800).then(n.t.bind(n,9567,19)),"~blog/default/zh-blog-ea2.json",9567],"3b8538cb":[()=>n.e(236).then(n.t.bind(n,3179,19)),"~blog/default/zh-blog-tags-cogine-4f3-list.json",3179],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"49b2de74":[()=>n.e(8712).then(n.t.bind(n,5745,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-pages\\default\\plugin-route-context-module-100.json",5745],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"831b5c01":[()=>n.e(8852).then(n.t.bind(n,4469,19)),"D:\\Github\\cogine.github.io\\.docusaurus\\docusaurus-plugin-content-blog\\default\\plugin-route-context-module-100.json",4469],"927d70e2":[()=>n.e(1045).then(n.t.bind(n,2190,19)),"~blog/default/zh-blog-archive-8d7.json",2190],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"956d92de":[()=>n.e(8778).then(n.bind(n,3878)),"@site/i18n/zh/docusaurus-plugin-content-pages/feature/features.mdx",3878],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,481)),"@site/src/pages/features.js",481],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],bfb16af5:[()=>n.e(5909).then(n.t.bind(n,5392,19)),"~blog/default/zh-blog-tags-tags-906.json",5392],c4113809:[()=>n.e(1545).then(n.t.bind(n,4144,19)),"~blog/default/zh-blog-tags-open-source-285.json",4144],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(8485),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],d2080cbe:[()=>n.e(9221).then(n.t.bind(n,931,19)),"~blog/default/zh-blog-tags-open-source-285-list.json",931],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],e121e550:[()=>n.e(4916).then(n.t.bind(n,668,19)),"~blog/default/zh-blog-tags-cogine-4f3.json",668],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],f0f7ee06:[()=>n.e(8342).then(n.t.bind(n,4151,19)),"~blog/default/zh-blog-tags-reality-world-399-list.json",4151],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/zh/app",component:f("/zh/app","f51"),exact:!0},{path:"/zh/blog",component:f("/zh/blog","42a"),exact:!0},{path:"/zh/blog/archive",component:f("/zh/blog/archive","aaf"),exact:!0},{path:"/zh/blog/conversational-computing",component:f("/zh/blog/conversational-computing","1c0"),exact:!0},{path:"/zh/blog/reality-world-open-source-conference",component:f("/zh/blog/reality-world-open-source-conference","c19"),exact:!0},{path:"/zh/blog/tags",component:f("/zh/blog/tags","02a"),exact:!0},{path:"/zh/blog/tags/cogine",component:f("/zh/blog/tags/cogine","e43"),exact:!0},{path:"/zh/blog/tags/open-source",component:f("/zh/blog/tags/open-source","bf1"),exact:!0},{path:"/zh/blog/tags/reality-world",component:f("/zh/blog/tags/reality-world","7f0"),exact:!0},{path:"/zh/blog/the-evolution-of-ECS",component:f("/zh/blog/the-evolution-of-ECS","714"),exact:!0},{path:"/zh/blog/thinking",component:f("/zh/blog/thinking","838"),exact:!0},{path:"/zh/cogine",component:f("/zh/cogine","e3d"),exact:!0},{path:"/zh/community/about-open-source",component:f("/zh/community/about-open-source","285"),exact:!0},{path:"/zh/community/about-reality-world",component:f("/zh/community/about-reality-world","d54"),exact:!0},{path:"/zh/community/contact",component:f("/zh/community/contact","9c8"),exact:!0},{path:"/zh/community/questions",component:f("/zh/community/questions","d15"),exact:!0},{path:"/zh/community/resources",component:f("/zh/community/resources","6c5"),exact:!0},{path:"/zh/community/roadmap",component:f("/zh/community/roadmap","422"),exact:!0},{path:"/zh/feature/chidori",component:f("/zh/feature/chidori","54a"),exact:!0},{path:"/zh/feature/cogine",component:f("/zh/feature/cogine","95c"),exact:!0},{path:"/zh/feature/features",component:f("/zh/feature/features","0c8"),exact:!0},{path:"/zh/feature/langchain",component:f("/zh/feature/langchain","add"),exact:!0},{path:"/zh/features",component:f("/zh/features","d0e"),exact:!0},{path:"/zh/learning/Reality-World",component:f("/zh/learning/Reality-World","cf0"),exact:!0},{path:"/zh/reality-create",component:f("/zh/reality-create","221"),exact:!0},{path:"/zh/reality-world-paper/",component:f("/zh/reality-world-paper/","974"),exact:!0},{path:"/zh/self-deploying",component:f("/zh/self-deploying","830"),exact:!0},{path:"/zh/whitepaper/",component:f("/zh/whitepaper/","c84"),exact:!0},{path:"/zh/docs",component:f("/zh/docs","11f"),routes:[{path:"/zh/docs/intro",component:f("/zh/docs/intro","743"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/",component:f("/zh/docs/introduction/","71f"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/advantage",component:f("/zh/docs/introduction/advantage","812"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/business-model",component:f("/zh/docs/introduction/business-model","4bc"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/current",component:f("/zh/docs/introduction/current","71b"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/evolution",component:f("/zh/docs/introduction/evolution","75d"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/user",component:f("/zh/docs/introduction/user","cd6"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/value",component:f("/zh/docs/introduction/value","e8d"),exact:!0,sidebar:"docsSidebar"}]},{path:"/zh/",component:f("/zh/","5f6"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x,O,P,C,T,I,A,L,N,R,j=function(e){var t=new j.Builder;return t.pipeline.add(j.trimmer,j.stopWordFilter,j.stemmer),t.searchPipeline.add(j.stemmer),e.call(t,t),t.build()};j.version="2.3.9",j.utils={},j.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),j.utils.asString=function(e){return null==e?"":e.toString()},j.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},j.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},j.FieldRef.joiner="/",j.FieldRef.fromString=function(e){var t=e.indexOf(j.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new j.FieldRef(r,n,e)},j.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+j.FieldRef.joiner+this.docRef),this._stringValue},j.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},j.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},j.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},j.Set.prototype.contains=function(e){return!!this.elements[e]},j.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===j.Set.complete)return this;if(e===j.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new j.Set(o)},j.Set.prototype.union=function(e){return e===j.Set.complete?j.Set.complete:e===j.Set.empty?this:new j.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},j.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},j.Token=function(e,t){this.str=e||"",this.metadata=t||{}},j.Token.prototype.toString=function(){return this.str},j.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},j.Token.prototype.clone=function(e){return e=e||function(e){return e},new j.Token(e(this.str,this.metadata),this.metadata)},j.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new j.Token(j.utils.asString(e).toLowerCase(),j.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(j.tokenizer.separator)||a==r){if(l>0){var s=j.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new j.Token(n.slice(i,a),s))}i=a+1}}return o},j.tokenizer.separator=/[\s\-]+/,j.Pipeline=function(){this._stack=[]},j.Pipeline.registeredFunctions=Object.create(null),j.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&j.utils.warn("Overwriting existing registered function: "+t),e.label=t,j.Pipeline.registeredFunctions[e.label]=e},j.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||j.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},j.Pipeline.load=function(e){var t=new j.Pipeline;return e.forEach((function(e){var n=j.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},j.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){j.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},j.Pipeline.prototype.after=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},j.Pipeline.prototype.before=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},j.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},j.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},j.Pipeline.prototype.runString=function(e,t){var n=new j.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},j.Pipeline.prototype.reset=function(){this._stack=[]},j.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return j.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},j.Vector=function(e){this._magnitude=0,this.elements=e||[]},j.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},j.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},j.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},j.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},j.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},j.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},j.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},j.Vector.prototype.toJSON=function(){return this.elements},j.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),b=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,L=/ll$/,N=new RegExp("^"+u+s+"[^aeiouwxy]$"),R=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=b).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=N,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=L).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(R)}),j.Pipeline.registerFunction(j.stemmer,"stemmer"),j.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},j.stopWordFilter=j.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),j.Pipeline.registerFunction(j.stopWordFilter,"stopWordFilter"),j.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},j.Pipeline.registerFunction(j.trimmer,"trimmer"),j.TokenSet=function(){this.final=!1,this.edges={},this.id=j.TokenSet._nextId,j.TokenSet._nextId+=1},j.TokenSet._nextId=1,j.TokenSet.fromArray=function(e){for(var t=new j.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},j.TokenSet.fromClause=function(e){return"editDistance"in e?j.TokenSet.fromFuzzyString(e.term,e.editDistance):j.TokenSet.fromString(e.term)},j.TokenSet.fromFuzzyString=function(e,t){for(var n=new j.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new j.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new j.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new j.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new j.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},j.TokenSet.fromString=function(e){for(var t=new j.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new j.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},j.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},j.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},j.TokenSet.prototype.intersect=function(e){for(var t=new j.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new j.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},j.TokenSet.Builder=function(){this.previousWord="",this.root=new j.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},j.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new j.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},j.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},j.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},j.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},j.Index.prototype.search=function(e){return this.query((function(t){new j.QueryParser(e,t).parse()}))},j.Index.prototype.query=function(e){for(var t=new j.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new j.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=j.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=j.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===j.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=j.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],b=this.invertedIndex[y],v=b._index;for(h=0;h<s.fields.length;h++){var w=b[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new j.Set(E);if(s.presence==j.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=j.Set.complete)),s.presence!=j.Query.presence.PROHIBITED){if(r[A].upsert(v,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new j.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new j.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=j.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===j.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=j.Set.complete,I=j.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var L=Object.keys(n),N=[],R=Object.create(null);if(t.isNegated()){L=Object.keys(this.fieldVectors);for(l=0;l<L.length;l++){P=L[l];var D=j.FieldRef.fromString(P);n[P]=new j.MatchData}}for(l=0;l<L.length;l++){var M=(D=j.FieldRef.fromString(L[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=R[M]))F.score+=z,F.matchData.combine(n[D]);else{var U={ref:M,score:z,matchData:n[D]};R[M]=U,N.push(U)}}}return N.sort((function(e,t){return t.score-e.score}))},j.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:j.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},j.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new j.TokenSet.Builder,l=j.Pipeline.load(e.pipeline);e.version!=j.version&&j.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+j.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new j.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new j.Index(t)},j.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=j.tokenizer,this.pipeline=new j.Pipeline,this.searchPipeline=new j.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},j.Builder.prototype.ref=function(e){this._ref=e},j.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},j.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},j.Builder.prototype.k1=function(e){this._k1=e},j.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new j.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var b=this.metadataWhitelist[y],v=m.metadata[b];null==this.invertedIndex[m][a][n][b]&&(this.invertedIndex[m][a][n][b]=[]),this.invertedIndex[m][a][n][b].push(v)}}}},j.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=j.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},j.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=j.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new j.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,b=c[m],v=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(h=j.idf(this.invertedIndex[b],this.documentCount),r[b]=h):h=r[b],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+v),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},j.Builder.prototype.createTokenSet=function(){this.tokenSet=j.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},j.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new j.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},j.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},j.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},j.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},j.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},j.Query=function(e){this.clauses=[],this.allFields=e},j.Query.wildcard=new String("*"),j.Query.wildcard.NONE=0,j.Query.wildcard.LEADING=1,j.Query.wildcard.TRAILING=2,j.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},j.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=j.Query.wildcard.NONE),e.wildcard&j.Query.wildcard.LEADING&&e.term.charAt(0)!=j.Query.wildcard&&(e.term="*"+e.term),e.wildcard&j.Query.wildcard.TRAILING&&e.term.slice(-1)!=j.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=j.Query.presence.OPTIONAL),this.clauses.push(e),this},j.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=j.Query.presence.PROHIBITED)return!1;return!0},j.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,j.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},j.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},j.QueryParseError.prototype=new Error,j.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},j.QueryLexer.prototype.run=function(){for(var e=j.QueryLexer.lexText;e;)e=e(this)},j.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},j.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},j.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},j.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return j.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},j.QueryLexer.prototype.width=function(){return this.pos-this.start},j.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},j.QueryLexer.prototype.backup=function(){this.pos-=1},j.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=j.QueryLexer.EOS&&this.backup()},j.QueryLexer.prototype.more=function(){return this.pos<this.length},j.QueryLexer.EOS="EOS",j.QueryLexer.FIELD="FIELD",j.QueryLexer.TERM="TERM",j.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",j.QueryLexer.BOOST="BOOST",j.QueryLexer.PRESENCE="PRESENCE",j.QueryLexer.lexField=function(e){return e.backup(),e.emit(j.QueryLexer.FIELD),e.ignore(),j.QueryLexer.lexText},j.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(j.QueryLexer.TERM)),e.ignore(),e.more())return j.QueryLexer.lexText},j.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.EDIT_DISTANCE),j.QueryLexer.lexText},j.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.BOOST),j.QueryLexer.lexText},j.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(j.QueryLexer.TERM)},j.QueryLexer.termSeparator=j.tokenizer.separator,j.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==j.QueryLexer.EOS)return j.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return j.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if(t.match(j.QueryLexer.termSeparator))return j.QueryLexer.lexTerm}else e.escapeCharacter()}},j.QueryParser=function(e,t){this.lexer=new j.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},j.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=j.QueryParser.parseClause;e;)e=e(this);return this.query},j.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},j.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},j.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},j.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case j.QueryLexer.PRESENCE:return j.QueryParser.parsePresence;case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new j.QueryParseError(n,t.start,t.end)}},j.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=j.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=j.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new j.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new j.QueryParseError(n,t.start,t.end)}switch(r.type){case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new j.QueryParseError(n,r.start,r.end)}}},j.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new j.QueryParseError(r,t.start,t.end)}if(o.type===j.QueryLexer.TERM)return j.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}},j.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new j.QueryParseError(r,n.start,n.end)}else e.nextClause()}},j.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},j.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return j})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),b=n(5463),v=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const L=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(L,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const j=R,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(U,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var W=n(3256),Z=n(1048);function V(){const e=(0,Z.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Q(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(W.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement($,null),r.createElement(j,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),N(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(Q,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/zh/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/zh/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/zh/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/zh/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/zh/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/zh/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/zh/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/zh/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/zh/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/zh/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/zh/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"zh","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:v,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,L=(0,o.useRef)(),N=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&L.current&&L.current.disconnect()})),[L,P,A,x]);const R=P?.startsWith("#")??!1,j=!P||!x||R;return j||g||S.collectLink(P),j?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},b)):o.createElement(I,(0,r.Z)({},b,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{k.current=e,A&&e&&x&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),L.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const b={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:b.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),L=n(3086);const N=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(N.Provider,{value:n},t)}function j(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(N);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:j(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const W=r.memo(H),Z={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(W,{className:t,buttonClassName:"dark"===n?Z.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Q=n(6811);function q(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function be(e){return{current:e}}function ve(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(ve(e)||ve(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Le(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Ne(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ne(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Re(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Le(Le({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function je(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",Re(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",Re(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",Re(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",Re(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Le(Le({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Le(Le({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ue(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var We="2.6.0",Ze="https://cdn.jsdelivr.net/npm/search-insights@".concat(We,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return $e({eventName:"Items Viewed"},e)})),state:o})}),400);function Qe(e){var t=function(e){return $e({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=We,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Ze,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=je(i),s=be([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:$e({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[$e({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[$e({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function bt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(Rt(t,n,e),Rt(r,n,e)),n)},catch:function(t){return At(e.catch(Rt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(Rt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Lt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Nt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function Rt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function jt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Lt.resolve=function(e){return Nt(Promise.resolve(e))},Lt.reject=function(e){return Nt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ut(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var $t,Ht,Wt,Zt=null,Vt=($t=-1,Ht=-1,Wt=void 0,function(e){var t=++$t;return Promise.resolve(e).then((function(e){return Wt&&t<Ht?Wt:(Ht=t,Wt=e,e)}))});function Qt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=Ut(e,Mt);Zt&&o.environment.clearTimeout(Zt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Nt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Zt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Nt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return vt(vt({},e),{},wt({},t.source.sourceId,vt(vt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=jt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Zt&&o.environment.clearTimeout(Zt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Qt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=jt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Qt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=jt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Qt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=jt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Qt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=jt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Qt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:vn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=jt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Ln(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ln(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Nn(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Qt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(Qe(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var Rn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,Rn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},jn=new Map;function Dn(e){var t=jn.get(this);return t||(t=new Map,jn.set(this,t)),(t=Rn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Un(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function $n(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Un(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,$n,r):e.removeEventListener(t,$n,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Wn(e){return"onChange"===e?"onInput":e}function Zn(e,t){for(var n in t)Hn(e,Wn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Wn(n),t[n])}var Qn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Qn),i=e.document.createElement(t);return Zn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Zn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],br=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,vr=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,b,v,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):vr(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(b=Nr(m,E,y=d+w,k))?p=gr:(p=E[b]||gr,E[b]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&Ur(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(v=p===gr||null===p.__v)?-1==b&&w--:b!==y&&(b===y+1?w++:b>y?k>_-y?w+=b-y:w--:w=b<y&&b==y-1?b-y:0),y=d+w,"function"!=typeof m.type||b===y&&p.__k!==m.__k?"function"==typeof m.type||b===y&&!v?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Lr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),$r(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),$r(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Lr(n,r.__e,t));return t}function Lr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Nr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function Rr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||br.test(t)?n:n+"px"}function jr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||Rr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||Rr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,b=(c=x.contextType)&&r[c.__c],v=c?b?b.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,v):(t.__c=d=new xr(y,v),d.constructor=x,d.render=Hr),b&&b.sub(d),d.props=y,d.state||(d.state={}),d.context=v,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,v),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,v)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,v),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=v,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,vr(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)Ur(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||jr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||jr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,vr(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&jr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&jr(e,"checked",h,f.checked,!1))}return e}function Ur(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function $r(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||Ur(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&$r(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Wr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Zr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Qr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Qr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function bo(e){return bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bo(e)}var vo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Wr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){Lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var No=[{segment:"autocomplete-js",version:hn}];function Ro(e){return function(e){if(Array.isArray(e))return jo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return jo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return jo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function jo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,Ro(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Uo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){$o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Wo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Zo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Qo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=be(!1),c=be(e),d=be(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,b=e.components,v=e.translations,w=ko(e,vo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),b),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),v)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Nn(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:No,options:e}}))})),h=be(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},b=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),v=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),b=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),v=f("label",lr({class:r.label,children:[b]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[v,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var L=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),N=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[L,A,I]}),R=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),j=f("div",{class:r.detachedFormContainer,children:[P,R]});h.appendChild(j),m.appendChild(N)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:v,submitButton:b,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Zn(v.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:b.value,dom:v.value,panelContainer:p.value?v.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Zn(r.label,{hidden:"stalled"===a.status}),Zn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Zn(r.clearButton,{hidden:!a.query}),Zn(r.detachedSearchButtonQuery,{textContent:a.query}),Zn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Qo(r,Zo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Uo(Uo({},e),{},$o({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(v.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(f.value.core.environment.document.body.removeChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return Zn(f.value.core.environment,e),function(){Zn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?v.value.detachedOverlay:v.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},b=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),v=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(v.current)return w.current=Ko({container:v.current,placeholder:b,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:v,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],b=(0,fa.lO)(n)[0],v=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,w=t&&y.length>1?void 0:ma(b).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:v,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function ba(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function va(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(va,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(ba,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function La(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const Na={colorModeToggle:"colorModeToggle_DEke"};function Ra(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function ja(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(ja,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(La,null),r.createElement(q,null),r.createElement(Ra,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ra,{items:o}),r.createElement(V,{className:Na.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function Ua(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function $a(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Wa(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement($a,null))))))}function Za(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ua,{columns:t}):r.createElement(Wa,{links:t})}var Va=n(6753);const Qa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Qa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Za,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(L.n2,null,r.createElement(T.M,null,r.createElement(R,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(v,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g,Oh:()=>v});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>b,oz:()=>v,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function v(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",b="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)(U,e),U.length=n.length,C.notifyListeners(U.location,U.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(O(e.state))}function A(){N(O(v()))}var L=!1;function N(e){if(L)L=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=U.location,n=j.indexOf(t.key);-1===n&&(n=0);var r=j.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,M(o))}(e)}))}}var R=O(v()),j=[R.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(b,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(b,A))}var z=!1;var U={length:n.length,action:"POP",location:R,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=j.indexOf(U.location.key),u=j.slice(0,s+1);u.push(a.key),j=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=j.indexOf(U.location.key);-1!==s&&(j[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",b=S[u],v=b.encodePath,w=b.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=v(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=j.lastIndexOf(f(t));-1===n&&(n=0);var r=j.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var L=_(),N=v(L);L!==N&&x(N);var R=O(),j=[f(R)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+v(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=j.lastIndexOf(f(z.location)),i=j.slice(0,a+1);i.push(t),j=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);_()!==o&&(I=t,x(o));var a=j.indexOf(f(z.location));-1!==a&&(j[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),b=f;function v(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:b,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var b=f(n,y);try{u(t,y,b)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,b=!!h.greedy,v=h.alias;if(b&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(b){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],L=_.slice(0,P),N=_.slice(P+A.length),R=k+_.length;d&&R>d.reach&&(d.reach=R);var j=S.prev;if(L&&(j=s(t,j,L),k+=L.length),u(t,j,O),S=s(t,j,new o(f,g?r.tokenize(A,g):A,v,A)),N&&s(t,S,N),O>1){var D={cause:f+","+m,reach:R};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,L=60115,N=60116,R=60121,j=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),L=B("react.memo"),N=B("react.lazy"),R=B("react.block"),B("react.scope"),j=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var W=!1;function Z(e,t){if(!e||W)return"";W=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{W=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Z(e.type,!1);case 11:return e=Z(e.type.render,!1);case 22:return e=Z(e.type._render,!1);case 1:return e=Z(e.type,!0);default:return""}}function Q(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case L:return Q(e.type);case R:return Q(e._render);case N:t=e._payload,e=e._init;try{return Q(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ve=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){ve.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Le(e,t){return e(t)}function Ne(e,t,n,r,o){return e(t,n,r,o)}function Re(){}var je=Le,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(Re(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){ze=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(he){ze=!1}function $e(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,We=null,Ze=!1,Ve=null,Qe={onError:function(e){He=!0,We=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,We=null,$e.apply(Qe,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){yt(e)&&n.delete(t)}function vt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(bt),ct.forEach(bt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,vt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Lt=new Map,Nt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function Rt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Lt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var jt=8;function Dt(e){if(0!=(1&e))return jt=15,1;if(0!=(2&e))return jt=14,2;if(0!=(4&e))return jt=13,4;var t=24&e;return 0!==t?(jt=12,t):0!=(32&e)?(jt=11,32):0!==(t=192&e)?(jt=10,t):0!=(256&e)?(jt=9,256):0!==(t=3584&e)?(jt=8,t):0!=(4096&e)?(jt=7,4096):0!==(t=4186112&e)?(jt=6,t):0!==(t=62914560&e)?(jt=5,t):67108864&e?(jt=4,67108864):0!=(134217728&e)?(jt=3,134217728):0!==(t=805306368&e)?(jt=2,t):0!=(1073741824&e)?(jt=1,1073741824):(jt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return jt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=jt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=jt):0!==(l&=a)&&(r=Dt(l),o=jt)}else 0!==(a=n&~i)?(r=Dt(a),o=jt):0!==l&&(r=Dt(l),o=jt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=jt)return t;jt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function $t(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wt(e)/Zt|0)|0},Wt=Math.log,Zt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Qt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||Re();var o=Kt,a=De;De=!0;try{Ne(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Qt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}Rr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return Rr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),bn=ln(o({},pn,{relatedTarget:0})),vn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Ln=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Nn=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=ln(Nn),jn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),Un=!1;function $n(e,t){switch(e){case"keyup":return-1!==jn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Wn=!1;var Zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Zn[e.type]:"textarea"===t}function Qn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Qn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Le(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,br=null,vr=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==br||br!==X(r)||("selectionStart"in(r=br)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(vr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=br)))}Rt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Rt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Rt(Nt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Lt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=We;He=!1,We=null,Ze||(Ze=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Ze)throw e=Ve,Ze=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Nr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Lr(t,!1,e,null),Lr(t,!0,e,null)})))}function Lr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Nr(a,e,o,t),i.add(l))}function Nr(e,t,n,r){var o=Lt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Rr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return je(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=bn;break;case"focusout":u="blur",s=bn;break;case"beforeblur":case"afterblur":s=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=vn;break;case It:s=Ln;break;case"scroll":s=mn;break;case"wheel":s=Rn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(jr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Qn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(br=y,vr=r,wr=null);break;case"focusout":wr=vr=br=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var b;if(Dn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Wn?$n(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Bn&&"ko"!==n.locale&&(Wn||"onCompositionStart"!==v?"onCompositionEnd"===v&&Wn&&(b=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Wn=!0)),0<(y=Dr(r,v)).length&&(v=new Sn(v,e,null,n,o),i.push({event:v,listeners:y}),b?v.data=b:null!==(b=Hn(n))&&(v.data=b))),(b=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(Un=!0,zn);case"textInput":return(e=t.data)===zn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Wn)return"compositionend"===e||!Dn&&$n(e,t)?(e=nn(),tn=en=Jt=null,Wn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Cr(i,t)}))}function jr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(jr(e,a,o)),null!=(a=Be(e,t))&&r.push(jr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(jr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(jr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,Ur=null;function $r(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Wr="function"==typeof setTimeout?setTimeout:void 0,Zr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Qr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function bo(){uo(mo),uo(po)}function vo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,Q(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,Lo=a.unstable_ImmediatePriority,No=a.unstable_UserBlockingPriority,Ro=a.unstable_NormalPriority,jo=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,Uo=!1,$o=Io(),Ho=1e4>$o?Io:function(){return Io()-$o};function Wo(){switch(Ao()){case Lo:return 99;case No:return 98;case Ro:return 97;case jo:return 96;case Do:return 95;default:throw Error(i(332))}}function Zo(e){switch(e){case 99:return Lo;case 98:return No;case 97:return Ro;case 96:return jo;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Zo(e),xo(e,t)}function Qo(e,t,n){return e=Zo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!Uo&&null!==Bo){Uo=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(Lo,qo),n}finally{Uo=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function ba(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function va(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Qs(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Qs(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||$(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||$(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||$(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=$(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var v=p(o,h,b.value,u);if(null===v){null===h&&(h=y);break}e&&h&&null===v.alternate&&t(o,h),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v,h=y}if(b.done)return n(o,h),c;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,u))&&(l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(h=r(o,h);!b.done;g++,b=s.next())null!==(b=m(h,o,g,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Qs(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if($(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,Q(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function La(e){if(e===Ca)throw Error(i(174));return e}function Na(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function Ra(){uo(Ta),uo(Ia),uo(Aa)}function ja(e){La(Aa.current);var t=La(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,Ua=!1;function $a(e,t){var n=Ws(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Wa(e){if(Ua){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Qr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,Ua=!1,void(Ba=e);$a(Ba,n)}Ba=e,za=Qr(t.firstChild)}else e.flags=-1025&e.flags|2,Ua=!1,Ba=e}}function Za(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!Ua)return Za(e),Ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)$a(e,t),t=Qr(t.nextSibling);if(Za(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Qr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Qr(e.stateNode.nextSibling):null;return!0}function Qa(){za=Ba=null,Ua=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Li:Ni,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=Ri,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Nl;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function bi(){return si().memoizedState}function vi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return vi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Wo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,vi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if(Ua){var e=!1,t=function(e){return{$$typeof:j,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:bi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},Ri={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:bi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},ji=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Zs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Qs(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function Ui(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function $i(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Wi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),va(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||ba(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||ba(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Zi(e,t,n,r,a,o)}function Zi(e,t,n,r,o,a){$i(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,ji.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),Na(e,t.containerInfo)}var Qi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Wa(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Ua)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&bo(),null;case 3:return Ra(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=La(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=La(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Qi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}$r(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=La(Aa.current),La(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Nl||0==(134217727&Ul)&&0==(134217727&$l)||bs(Nl,jl))),(r||n)&&(t.flags|=4),null);case 4:return Ra(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Ua)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&bo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ra(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return Ra(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Qi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,La(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===j?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&$r(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function bl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function vl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(vl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(vl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Zl=Ho(),bl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=$s.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Ll=0,Nl=null,Rl=null,jl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,Ul=0,$l=0,Hl=0,Wl=null,Zl=0,Vl=1/0;function Ql(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Ll)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Wo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Wl?Wl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Wo(),0!=(4&Ll)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;$t(e,t,n),e===Nl&&($l|=t,4===Fl&&bs(e,jl));var r=Wo();1===t?0!=(8&Ll)&&0==(48&Ll)?vs(e):(gs(e,n),0===Ll&&(Ql(),qo())):(0==(4&Ll)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Wl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=jt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Nl?jl:0),t=jt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=vs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(Lo,Go)):Bo.push(n),n=Mo):14===t?n=Qo(99,vs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Qo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Ll))throw Error(i(327));var t=e.callbackNode;if(js()&&e.callbackNode!==t)return null;var n=Mt(e,e===Nl?jl:0);if(0===n)return null;var r=n,o=Ll;Ll|=16;var a=Os();for(Nl===e&&jl===r||(Ql(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Ll=o,null!==Rl?r=0:(Nl=null,jl=0,r=Fl),0!=(zl&$l))_s(e,0);else if(0!==r){if(2===r&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),bs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ls(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=Zl+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Wr(Ls.bind(null,e),r);break}Ls(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Wr(Ls.bind(null,e),n);break}Ls(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function bs(e,t){for(t&=~Hl,t&=~$l,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function vs(e){if(0!=(48&Ll))throw Error(i(327));if(js(),e===Nl&&0!=(e.expiredLanes&jl)){var t=jl,n=Ps(e,t);0!=(zl&$l)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),bs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ls(e),gs(e,Ho()),null}function ws(e,t){var n=Ll;Ll|=1;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Es(e,t){var n=Ll;Ll&=-2,Ll|=8;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Zr(n)),null!==Rl)for(n=Rl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&bo();break;case 3:Ra(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:Ra();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Nl=e,Rl=Vs(e.current,null),jl=Dl=zl=t,Fl=0,Bl=null,Hl=$l=Ul=0}function xs(e,t){for(;;){var n=Rl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,Rl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=jl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=ca(-1,1);b.tag=2,da(l,b)}l.lanes|=1;break e}s=void 0,l=t;var v=a.pingCache;if(null===v?(v=a.pingCache=new dl,s=new Set,v.set(u,s)):void 0===(s=v.get(u))&&(s=new Set,v.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((Q(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,Rl===n&&null!==n&&(Rl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Ll;Ll|=16;var r=Os();for(Nl===e&&jl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Ll=n,Il.current=r,null!==Rl)throw Error(i(261));return Nl=null,jl=0,Fl}function Cs(){for(;null!==Rl;)Is(Rl)}function Ts(){for(;null!==Rl&&!Co();)Is(Rl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):Rl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(Rl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Rl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Rl=t);Rl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ls(e){var t=Wo();return Vo(99,Ns.bind(null,e,t)),null}function Ns(e,t){do{js()}while(null!==es);if(0!=(48&Ll))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Nl&&(Rl=Nl=null,jl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ll,Ll|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var b;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)y=g,g=b;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(b=g.nextSibling))break;y=(g=y).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{Rs()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var v=Gl.flags;if(16&v&&ye(Gl.stateNode,""),128&v){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&v){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=Ur,w=hr(),v=E.focusedElem,l=E.selectionRange,w!==v&&v&&v.ownerDocument&&mr(v.ownerDocument.documentElement,v)){null!==l&&gr(v)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in v?(v.selectionStart=w,v.selectionEnd=Math.min(E,v.value.length)):(E=(w=v.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=v.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(v,S),a=pr(v,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=v;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof v.focus&&v.focus(),v=0;v<w.length;v++)(E=w[v]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,Ur=zr=null,e.current=n,Gl=r;do{try{for(v=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(v,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Ll=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Ll)||qo(),null}function Rs(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Qo(97,(function(){return js(),null}))),Gl=Gl.nextEffect}}function js(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return js(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return js(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Ll))throw Error(i(331));var t=Ll;Ll|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Ll=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&($t(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))$t(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Nl===e&&(jl&n)===n&&(4===Fl||3===Fl&&(62914560&jl)===jl&&500>Ho()-Zl?_s(e,0):Hl|=n),gs(e,t)}function $s(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Wo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&($t(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Ws(e,t,n,r){return new Hs(e,t,n,r)}function Zs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Ws(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Qs(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Zs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Ws(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Ws(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Ws(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Ws(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case L:l=14;break e;case N:l=16,r=null;break e;case R:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Ws(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Ws(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Ws(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Ws(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Ws(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Ws(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Qa();break;case 5:ja(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:Na(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Zi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Zs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===L)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Wi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Wi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Qa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Qr(t.stateNode.containerInfo.firstChild),Ba=t,a=Ua=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Qa();t=t.child}return t;case 5:return ja(t),null===e&&Wa(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),$i(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Wa(t),null;case 13:return Xi(e,t,n);case 4:return Na(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),va(t,r,o),Ea(t,r,o,n),Zi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Le=ws,Ne=function(e,t,n,r,o){var a=Ll;Ll|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Ll=a)&&(Ql(),qo())}},Re=function(){0==(49&Ll)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),js())},je=function(e,t){var n=Ll;Ll|=2;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,js,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Z,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},j=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=j(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+R(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return j(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,y),i=A(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),W="undefined"!=typeof document,Z=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Z.canUseDOM=W,Z.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Z.defaultProps={context:{}},Z.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;Q(g.BODY,e.bodyAttributes),Q(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),Q(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Z.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===v||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},b=a.forwardRef;void 0===b&&(b=y);var v=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(v?v(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var L=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==b?L.ref=t||x:L.innerRef=x,a.createElement(g,L)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>v,LX:()=>k,TH:()=>N,k6:()=>L,rs:()=>I,s6:()=>b});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),b=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(b.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(b.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function L(){return A(y)}function N(){return A(b).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===v||"*"===v,k="?"===v||"*"===v,_=n[2]||c,x=y||b;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var v=b.prototype=new y;v.constructor=b,r(v,g.prototype),v.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var L={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=L,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,b=5,v=0;t.unstable_shouldYield=function(){return t.unstable_now()>=v},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();v=e+b;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,L=!1,N=!1;function R(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function j(e){if(N=!1,R(e),!L)if(null!==k(O))L=!0,n(D);else{var t=k(P);null!==t&&r(j,t.startTime-e)}}function D(e,n){L=!1,N&&(N=!1,o()),A=!0;var a=I;try{for(R(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),R(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(j,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){L||A||(L=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(N?o():N=!0,r(j,i-l))):(e.sortIndex=s,S(O,e),L||A||(L=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/zh/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"\u4ea7\u54c1",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"\u81ea\u6211\u90e8\u7f72"}],position:"left"},{label:"\u5f00\u53d1\u8005",type:"dropdown",items:[{to:"/whitepaper",label:"\u767d\u76ae\u4e66"},{to:"/docs/intro",label:"\u6280\u672f\u6587\u6863"},{to:"/learning/Reality-World",label:"Learning"}],position:"left"},{to:"/blog",label:"\u535a\u5ba2",position:"left"},{to:"/features",label:"\u7279\u6027 & \u6bd4\u8f83",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"\u793e\u533a",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"\u5173\u4e8e\u5f00\u6e90"},{to:"/community/about-reality-world",label:"\u5173\u4e8e Reality World"},{to:"/community/roadmap",label:"\u8def\u7ebf\u56fe"},{to:"/community/contact",label:"\u8054\u7cfb"},{to:"/community/questions",label:"\u5e38\u89c1\u95ee\u9898"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"D:\\Github\\cogine.github.io\\sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"D:\\Github\\cogine.github.io\\src\\css\\custom.css"}}]],plugins:[["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"theme.AnnouncementBar.closeButtonAriaLabel":"\u5173\u95ed","theme.BackToTopButton.buttonAriaLabel":"\u56de\u5230\u9876\u90e8","theme.CodeBlock.copied":"\u590d\u5236\u6210\u529f","theme.CodeBlock.copy":"\u590d\u5236","theme.CodeBlock.copyButtonAriaLabel":"\u590d\u5236\u4ee3\u7801\u5230\u526a\u8d34\u677f","theme.CodeBlock.wordWrapToggle":"\u5207\u6362\u81ea\u52a8\u6362\u884c","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"\u6253\u5f00/\u6536\u8d77\u4fa7\u8fb9\u680f\u83dc\u5355\u300c{label}\u300d","theme.ErrorPageContent.title":"\u9875\u9762\u5df2\u5d29\u6e83\u3002","theme.ErrorPageContent.tryAgain":"\u91cd\u8bd5","theme.NavBar.navAriaLabel":"\u4e3b\u5bfc\u822a","theme.NotFound.p1":"\u6211\u4eec\u627e\u4e0d\u5230\u60a8\u8981\u627e\u7684\u9875\u9762\u3002","theme.NotFound.p2":"\u8bf7\u8054\u7cfb\u539f\u59cb\u94fe\u63a5\u6765\u6e90\u7f51\u7ad9\u7684\u6240\u6709\u8005\uff0c\u5e76\u544a\u77e5\u4ed6\u4eec\u94fe\u63a5\u5df2\u635f\u574f\u3002","theme.NotFound.title":"\u627e\u4e0d\u5230\u9875\u9762","theme.TOCCollapsible.toggleButtonLabel":"\u672c\u9875\u603b\u89c8","theme.admonition.caution":"\u8b66\u544a","theme.admonition.danger":"\u5371\u9669","theme.admonition.info":"\u4fe1\u606f","theme.admonition.note":"\u5907\u6ce8","theme.admonition.tip":"\u63d0\u793a","theme.blog.archive.description":"\u5386\u53f2\u535a\u6587","theme.blog.archive.title":"\u5386\u53f2\u535a\u6587","theme.blog.paginator.navAriaLabel":"\u535a\u6587\u5217\u8868\u5206\u9875\u5bfc\u822a","theme.blog.paginator.newerEntries":"\u8f83\u65b0\u7684\u535a\u6587","theme.blog.paginator.olderEntries":"\u8f83\u65e7\u7684\u535a\u6587","theme.blog.post.paginator.navAriaLabel":"\u535a\u6587\u5206\u9875\u5bfc\u822a","theme.blog.post.paginator.newerPost":"\u8f83\u65b0\u4e00\u7bc7","theme.blog.post.paginator.olderPost":"\u8f83\u65e7\u4e00\u7bc7","theme.blog.post.plurals":"{count} \u7bc7\u535a\u6587","theme.blog.post.readMore":"\u9605\u8bfb\u66f4\u591a","theme.blog.post.readMoreLabel":"\u9605\u8bfb {title} \u7684\u5168\u6587","theme.blog.post.readingTime.plurals":"\u9605\u8bfb\u9700 {readingTime} \u5206\u949f","theme.blog.sidebar.navAriaLabel":"\u6700\u8fd1\u535a\u6587\u5bfc\u822a","theme.blog.tagTitle":"{nPosts} \u542b\u6709\u6807\u7b7e\u300c{tagName}\u300d","theme.colorToggle.ariaLabel":"\u5207\u6362\u6d45\u8272/\u6697\u9ed1\u6a21\u5f0f\uff08\u5f53\u524d\u4e3a{mode}\uff09","theme.colorToggle.ariaLabel.mode.dark":"\u6697\u9ed1\u6a21\u5f0f","theme.colorToggle.ariaLabel.mode.light":"\u6d45\u8272\u6a21\u5f0f","theme.common.editThisPage":"\u7f16\u8f91\u6b64\u9875","theme.common.headingLinkTitle":"{heading}\u7684\u76f4\u63a5\u94fe\u63a5","theme.common.skipToMainContent":"\u8df3\u5230\u4e3b\u8981\u5185\u5bb9","theme.docs.DocCard.categoryDescription":"{count} \u4e2a\u9879\u76ee","theme.docs.breadcrumbs.home":"\u4e3b\u9875\u9762","theme.docs.breadcrumbs.navAriaLabel":"\u9875\u9762\u8def\u5f84","theme.docs.paginator.navAriaLabel":"\u6587\u4ef6\u9009\u9879\u5361","theme.docs.paginator.next":"\u4e0b\u4e00\u9875","theme.docs.paginator.previous":"\u4e0a\u4e00\u9875","theme.docs.sidebar.closeSidebarButtonAriaLabel":"\u5173\u95ed\u5bfc\u822a\u680f","theme.docs.sidebar.collapseButtonAriaLabel":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.collapseButtonTitle":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonAriaLabel":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonTitle":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.navAriaLabel":"\u6587\u6863\u4fa7\u8fb9\u680f","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"\u5207\u6362\u5bfc\u822a\u680f","theme.docs.tagDocListPageTitle":"{nDocsTagged}\u300c{tagName}\u300d","theme.docs.tagDocListPageTitle.nDocsTagged":"{count} \u7bc7\u6587\u6863\u5e26\u6709\u6807\u7b7e","theme.docs.versionBadge.label":"\u7248\u672c\uff1a{versionLabel}","theme.docs.versions.latestVersionLinkLabel":"\u6700\u65b0\u7248\u672c","theme.docs.versions.latestVersionSuggestionLabel":"\u6700\u65b0\u7684\u6587\u6863\u8bf7\u53c2\u9605 {latestVersionLink} ({versionLabel})\u3002","theme.docs.versions.unmaintainedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u7684\u6587\u6863\uff0c\u73b0\u5df2\u4e0d\u518d\u79ef\u6781\u7ef4\u62a4\u3002","theme.docs.versions.unreleasedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u5c1a\u672a\u53d1\u884c\u7684\u6587\u6863\u3002","theme.lastUpdated.atDate":"\u4e8e {date} ","theme.lastUpdated.byUser":"\u7531 {user} ","theme.lastUpdated.lastUpdatedAtBy":"\u6700\u540e{byUser}{atDate}\u66f4\u65b0","theme.navbar.mobileLanguageDropdown.label":"\u9009\u62e9\u8bed\u8a00","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 \u56de\u5230\u4e3b\u83dc\u5355","theme.navbar.mobileVersionsDropdown.label":"\u9009\u62e9\u7248\u672c","theme.tags.tagsListLabel":"\u6807\u7b7e\uff1a","theme.tags.tagsPageLink":"\u67e5\u770b\u6240\u6709\u6807\u7b7e","theme.tags.tagsPageTitle":"\u6807\u7b7e","cmfcmf/d-s-l.searchBar.placeholder":"\u641c\u7d22...","cmfcmf/d-s-l.searchBar.noResults":"\u65e0\u641c\u7d22\u7ed3\u679c","cmfcmf/d-s-l.searchBar.clearButtonTitle":"\u6e05\u9664","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"\u53d6\u6d88","cmfcmf/d-s-l.searchBar.submitButtonTitle":"\u641c\u7d22","Whitepaper":"\u767d\u76ae\u4e66","Read More":"\u9605\u8bfb\u66f4\u591a","Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It\'s like a complex system and emerges digital intelligence.":"Reality World\u662f\u4e00\u4e2a\u591a\u7a0b\u5e8f\uff08\u5982\u591a\u667a\u80fd\u4f53\uff09\u52a8\u6001\u8fd0\u884c\u7684\u5e73\u53f0\u548c\u6a21\u62df\u5668\uff0c \u5b83\u7684\u6838\u5fc3\u662f\u89e3\u51b3\u8fd9\u4e9b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3001\u5b89\u5168\u548c\u8c03\u5ea6\u3002\u5b83\u50cf\u590d\u6742\u7cfb\u7edf\u4e00\u6837\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u7a0b\u5e8f\u7ec4\u5408\uff0c\u4f7f\u5f97\u6574\u4f53\u7a0b\u5e8f\u76f8\u6bd4\u4f20\u7edf\u7a0b\u5e8f\u80fd\u591f\u6d8c\u73b0\u51fa\u6570\u5b57\u667a\u80fd\u3002","Get Started":"\u5f00\u59cb\u5165\u95e8","Let everyone can write AI agent":"\u8ba9\u6bcf\u4e2a\u4eba\u90fd\u53ef\u4ee5\u7f16\u5199AI\u667a\u80fd\u4f53\u7a0b\u5e8f","Programming is not easy, but the hardest part is not the programming language itself, its the program structure organizing. We build a high level logic-abstraction to hide the structure and let developer focused on logic only.":"\u7f16\u5199\u7a0b\u5e8f\u5e76\u4e0d\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4e2d\u6700\u96be\u7684\u90e8\u5206\u5e76\u4e0d\u662f\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u800c\u662f\u5173\u4e8e\u5927\u89c4\u6a21\u7a0b\u5e8f\u600e\u6837\u7ec4\u7ec7\u7684\u65b9\u6cd5\uff0c\u4e5f\u5373\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u901a\u8fc7\u5efa\u7acb\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u7684\u903b\u8f91\u62bd\u8c61\u5c42\u6765\u9690\u85cf\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u6027\uff0c\u4f7f\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5c06\u6ce8\u610f\u529b\u653e\u5230\u4e1a\u52a1\u6d41\u7a0b\u4e0a\u3002","Most visual graph editting is just a visual wrapper of the original codes. We build a graph interaction which is as simple as Houdini and as powerful as any turning completed programming language.":"\u5927\u90e8\u5206\u57fa\u4e8eGraph\u7684\u53ef\u89c6\u7a0b\u5e8f\u7f16\u8f91\u53ea\u662f\u5bf9\u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801\u7684\u4e00\u79cd\u53ef\u89c6\u5316\uff0c\u8fd9\u610f\u5473\u7740\u5f00\u53d1\u8005\u4ecd\u7136\u9700\u8981\u5173\u6ce8\u7ed3\u6784\u6027\uff0c\u57fa\u4e8e\u6211\u4eec\u8c03\u6574\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u6211\u4eec\u6784\u5efa\u51fa\u4e00\u79cd\u50cfHoudini\u4e00\u6837\u7b80\u5355\u7684\u53ef\u89c6\u903b\u8f91\u7f16\u8f91\u4ea4\u4e92\uff0c\u540c\u65f6\u53c8\u548c\u5176\u5b83\u4efb\u4f55\u56fe\u7075\u5b8c\u5907\u7684\u7f16\u7a0b\u8bed\u8a00\u4e00\u6837\u5177\u6709\u7075\u6d3b\u7684\u8868\u8fbe\u80fd\u529b\u3002","An agent VM, platform and simulator":"\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u865a\u62df\u673a\u3001\u5e73\u53f0\u548c\u6a21\u62df\u5668","We then build a platform with a virtual machine to interpret and execute the above agent format program dynamically. By this dynamical capability, developer can create and share agent with users as simple as share a url.":"\u57fa\u4e8e\u8fd9\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u6211\u4eec\u5f00\u53d1\u4e86\u4e00\u4e2a\u865a\u62df\u673a\u7528\u4e8e\u52a8\u6001\u89e3\u91ca\u548c\u6267\u884c\u8fd9\u79cd\u7a0b\u5e8f\uff0c\u8fd9\u79cd\u52a8\u6001\u6027\u4f7f\u5f97\u4efb\u4f55\u4e2a\u4eba\u90fd\u53ef\u4ee5\u5f00\u53d1\u548c\u5206\u4eab\u81ea\u5df1\u7684\u4e2a\u6027\u5316\u7a0b\u5e8f\uff0c\u5c31\u50cf\u5206\u4eab\u4e00\u4e2aURL\u90a3\u4e48\u7b80\u5355\uff0c\u8fd9\u5c06\u5927\u5927\u7b80\u5316\u7a0b\u5e8f\u7684\u521b\u5efa\u548c\u53d1\u5e03\u6d41\u7a0b\u3002","Multi-agent conversational collaborating framework":"\u591a\u7a0b\u5e8f\u5bf9\u8bdd\u5f0f\u534f\u4f5c\u6846\u67b6","Agents can commnuicating with user, system and other agents in a very simple way which provides the ability to finish a task in a collaberating way.":"\u4efb\u4f55\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u4ee5\u975e\u5e38\u7b80\u5355\u7684\u65b9\u5f0f\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u548c\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u63d0\u4f9b\u4e00\u79cd\u80fd\u529b\u901a\u8fc7\u4f7f\u5f97\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u534f\u4f5c\u7684\u65b9\u5f0f\u6765\u5b8c\u6210\u590d\u6742\u7684\u4efb\u52a1\u3002","In a LLM-powered application, the inputs of a function is semantic instead of structured data, which brings uncertainty and needs conversational way to get more information. For solve this problem, we propose a new concept and a novel architecture called \\"Conversational computing\\" for the first time in the world, to make any function can be paused and conversational commnuicating with user, system and other agents to get full information it needs without extra works.":"\u57fa\u4e8e\u5927\u6a21\u578b\uff08LLM\uff09\u7684\u5e94\u7528\uff0c\u4e00\u4e2a\u51fd\u6570\u7684\u8f93\u5165\u662f\u8bed\u4e49\u5316\u7684\u6587\u672c\u800c\u4e0d\u662f\u7ed3\u6784\u5316\u7684\u6570\u636e\uff0c\u8fd9\u7ed9\u7a0b\u5e8f\u5e26\u6765\u4e86\u5f88\u591a\u4e0d\u786e\u5b9a\u6027\uff0c\u8fd9\u9700\u8981\u901a\u8fc7\u591a\u8f6e\u5bf9\u8bdd\u6765\u6f84\u6e05\u66f4\u591a\u4fe1\u606f\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u9996\u6b21\u63d0\u51fa\u4e00\u79cd\u79f0\u4e3a\u5bf9\u8bdd\u5f0f\u8ba1\u7b97\uff08Conversational Computing\uff09\u7684\u6982\u5ff5\u548c\u6280\u672f\uff0c\u4f7f\u5f97\u4efb\u4f55\u51fd\u6570\u90fd\u53ef\u4ee5\u4efb\u610f\u88ab\u6682\u505c\u4ee5\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u6216\u8005\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u5bf9\u8bdd\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u5e76\u5728\u6761\u4ef6\u6ee1\u8db3\u4e4b\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u6574\u4e2a\u8fc7\u7a0b\u5c31\u50cf\u7f16\u5199\u4f20\u7edf\u4e32\u884c\u7a0b\u5e8f\u4e00\u6837\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u505a\u4e00\u4e9b\u989d\u5916\u7e41\u7410\u7684\u5de5\u4f5c\u3002","An engine of complexity to emerge intelligence":"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u6784\u5efa\u7684\u590d\u6742\u5f15\u64ce","In biology or social economic syetm, many agreements have come to that the intelligence of the system come from the emergence mechanism of the complex system theory.":"\u5728\u751f\u7269\u548c\u793e\u4f1a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\uff0c\u4eba\u4eec\u666e\u904d\u7684\u5171\u8bc6\u662f\u6574\u4e2a\u7cfb\u7edf\u7684\u667a\u80fd\u6765\u6e90\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u4e2d\u7684\u6d8c\u73b0\u673a\u5236\uff0c\u8fd9\u79cd\u6d8c\u73b0\u673a\u5236\u901a\u8fc7\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5c40\u90e8\u534f\u4f5c\u3001\u590d\u5236\u53d8\u5f02\u4ee5\u53ca\u9009\u62e9\u6765\u5b9e\u73b0\u3002","In computer science and engineering, applications are isolated each other for data security and some other business reasons. The lack of interoperability make the applications non-cooperative and hence none-intelligent. We re-organized the structure and execution of software contruction process to provide a interopability-native architecture to form an engine of complexity.":"\u5728\u8ba1\u7b97\u673a\u79d1\u5b66\u548c\u5de5\u7a0b\u4e2d\uff0c\u5e94\u7528\u4e4b\u95f4\u901a\u5e38\u662f\u76f8\u4e92\u9694\u79bb\u4ee5\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\uff0c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u80fd\u529b\u7684\u7f3a\u5931\u4f7f\u5f97\u5e94\u7528\u4e4b\u95f4\u4ee5\u975e\u534f\u4f5c\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4ece\u800c\u7f3a\u4e4f\u667a\u80fd\u3002\u6211\u4eec\u901a\u8fc7\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u548c\u8fd0\u884c\u8fc7\u7a0b\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\u4ee5\u63d0\u4f9b\u4e00\u4e2a\u539f\u751f\u4e92\u64cd\u4f5c\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u4f7f\u6574\u4e2a\u7cfb\u7edf\u50cf\u4e00\u4e2a\u590d\u6742\u5f15\u64ce\u3002","Conversational":"\u5bf9\u8bdd\u5f0f\u8ba1\u7b97","Code can talk to user, system or other agents to ask more information at any function location, the agent will be paused and continue to run when got response.":"\u6bcf\u4e2a\u51fd\u6570\u53ef\u4ee5\u4efb\u610f\u8ddf\u7528\u6237\u3001\u7cfb\u7edf\u6216\u5176\u5b83\u7a0b\u5e8f\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u8be5\u7a0b\u5e8f\u4f1a\u88ab\u7cfb\u7edf\u6682\u505c\u76f4\u5230\u83b7\u5f97\u54cd\u5e94\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u8fd9\u79cd\u8ba1\u7b97\u6a21\u578b\u5bf9LLM\u5e94\u7528\u975e\u5e38\u91cd\u8981\u3002","Interoperability":"\u4e92\u64cd\u4f5c\u6027","Agents written by different developers could be running in a same memory environment and interoperate with each other with the permission of user.":"\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u4e4b\u95f4\u7f16\u5199\u7684\u7a0b\u5e8f\u53ef\u4ee5\u8fd0\u884c\u5728\u540c\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5e76\u5728\u7528\u6237\u7684\u8bb8\u53ef\u4e0b\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u79cd\u5e94\u7528\u4e4b\u95f4\u7684\u534f\u4f5c\u80fd\u529b\u662f\u672a\u6765\u5143\u5b87\u5b99\u548cAI\u591a\u667a\u80fd\u4f53\u5e94\u7528\u7684\u6838\u5fc3\u57fa\u7840\u9700\u6c42\u3002","Self-evolving":"\u81ea\u6211\u8fdb\u5316","The agents are working in a collaborated way and user could custimize it\'s personal composation to make the whole system self-evolving and emerge digital intelligence.":"\u6240\u6709\u7a0b\u5e8f\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\u65b9\u5f0f\u8fdb\u884c\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u5b9a\u5236\u4e2a\u6027\u5316\u7684\u7ec4\u5408\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7684\u4e2a\u6027\u9700\u6c42\uff0c\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\uff0c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u9ad8\u7684\u6570\u5b57\u667a\u80fd\u3002","Logic-abstraction":"\u903b\u8f91\u62bd\u8c61","We re-organized the whole program to make developers focused on logic of busniess and forget about the hardware, data and programing language abstraction.":"\u8fd0\u884c\u65f6\u5c06\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\uff0c\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5173\u6ce8\u903b\u8f91\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u786c\u4ef6\u3001\u5185\u5b58\u6570\u636e\u7ba1\u7406\u4ee5\u53ca\u5176\u5b83\u7f16\u7a0b\u8bed\u8a00\u76f8\u5173\u7684\u7ec6\u8282\uff0c\u4ece\u800c\u5efa\u7acb\u4e00\u79cd\u903b\u8f91\u62bd\u8c61\u3002","Computing Innovation":"\u8ba1\u7b97\u67b6\u6784\u521b\u65b0","We defined a agent format standard to represent a turing completed agent program which can be loaded and runned dynamically so everyone can develop an agent to handle personal needs.":"\u6211\u4eec\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5fae\u7a0b\u5e8f\uff08\u5982AI\u667a\u80fd\u4f53\uff09\u7684\u6807\u51c6\u683c\u5f0f\uff0c\u5b83\u662f\u56fe\u7075\u5b8c\u5907\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u52a0\u8f7d\u548c\u8fd0\u884c\u3002","Join our developer community":"\u52a0\u5165\u5f00\u53d1\u8005\u793e\u533a","Cogine is the virtual machine and base framework of Reality World, it defined a standard agent(a micro-program) format, and it can load and run multi-agent dynamically with the ability to interoperate and communicate with each other.":"Cogine\u662fReality World\u7684\u865a\u62df\u673a\u548c\u5e95\u5c42\u6846\u67b6, \u5b83\u5b9a\u4e49\u4e86\u4e00\u5957\u6807\u51c6\u7684\u5fae\u7a0b\u5e8f\uff08\u4f8b\u5982\u4e00\u4e2aLLM\u667a\u80fd\u4f53\uff09\u683c\u5f0f\uff0c\u8fd9\u4e9b\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u7684\u52a0\u8f7d\u548c\u8fd0\u884c\uff0c \u5fae\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u4ee5\u5f88\u7b80\u5355\u7edf\u4e00\u7684\u65b9\u5f0f\u8fdb\u884c\u901a\u4fe1\u3002","The term Cogine stands for An engine of complexity, or an cognitive computing engine, or conversational computing engine.":"Cogine\u4e00\u8bcd\u6765\u6e90\u4e8e\u51e0\u4e2a\u76f8\u5173\u7684\u610f\u601d\uff1aAn engine of complexity\uff0c \u6216\u8005an cognitive computing engine, \u6216\u8005 conversational computing engine\u3002","And you can deploy it yourself within your own application.":"\u4f60\u4e5f\u53ef\u4ee5\u5c06Cogine\u90e8\u7f72\u96c6\u6210\u5230\u81ea\u5df1\u7684\u5e94\u7528\u4e2d\u3002","Reality World is an app which can load and run any agent defined by the Cogine agent format, it\'s also a simulator you can used to debug your agent program.":"Reality World\u662f\u4e00\u4e2a\u53ef\u4ee5\u52a0\u8f7d\u548c\u8fd0\u884c\u9075\u5faaCogine\u5b9a\u4e49\u7684Agent\u683c\u5f0f\u7684\u5e94\u7528\uff0c \u5b83\u4e5f\u662f\u4e00\u4e2a\u6a21\u62df\u5668\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u5b83\u8c03\u8bd5Agent\u7a0b\u5e8f\u3002","User who installed the Reality World app can create and share agent each other. It makes Reality World a agent platform.":"\u4efb\u4f55\u5b89\u88c5Reality World \u5e94\u7528\u7684\u7528\u6237\u4e4b\u95f4\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u521b\u5efa\u548c\u5206\u4eabAgent\u7a0b\u5e8f\uff0c\u8fd9\u4f7f\u5f97\u5b83\u6210\u4e3a\u4e00\u4e2aAgent\u5f00\u53d1\u548c\u90e8\u7f72\u7684\u5e73\u53f0\u3002","Reality Create is a graph-based editor, it can create and define an agent program which will can be running in Reality World app or by the Cogine virtual machine":"Reality Create\u662f\u4e00\u4e2a\u57fa\u4e8e\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4f7f\u7528\u5b83\u53ef\u4ee5\u521b\u5efa\u7531Cogine\u5b9a\u4e49\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u7a0b\u5e8f\u53ef\u4ee5\u88abReality World\u52a0\u8f7d\u6216\u8005Cogine\u865a\u62df\u673a\u52a0\u8f7d\u8fd0\u884c\u3002","Features and benefits":"\u7279\u6027 \u548c \u597d\u5904","The following we list the main features of Cogine, for the details please check the technical documentation.":"\u4ee5\u4e0b\u662fCogine\u7684\u4e00\u4e9b\u4e3b\u8981\u7279\u6027\uff0c\u66f4\u8be6\u7ec6\u7684\u4ecb\u7ecd\u53c2\u89c1\u6280\u672f\u6587\u6863","Development comparison with LangChain and Chidori":"\u4e0e LangChain \u548c Chidori \u5728\u5f00\u53d1\u4f53\u9a8c\u4e0a\u7684\u6bd4\u8f83","Basically, in other framework, you have to learn Python language, have to care about the structure of the program and have to learn many architecture design (such as different specific class and its inheritance relationships. In Cogine, the only thing you are care about is your logic, no other programming burden.":"\u57fa\u672c\u4e0a\uff0c\u5728\u4f7f\u7528\u5176\u5b83\u6846\u67b6\u7684\u65f6\u5019\uff0c\u7528\u6237\u5fc5\u987b\u8981\u5168\u9762\u5b66\u4e60Python\uff0c\u5173\u6ce8\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u4ee5\u53ca\u8fd9\u4e9b\u6846\u67b6\u672c\u8eab\u5b9a\u4e49\u7684\u5404\u79cd\u590d\u6742\u7684\u7c7b\u53ca\u5176\u590d\u6742\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u7136\u540e\u4f7f\u7528\u8fd9\u4e9b\u7279\u5b9a\u7684\u67b6\u6784\u89c4\u5219\u6784\u5efa\u7a0b\u5e8f\u3002 \u4f7f\u7528Cogine\uff0c\u4f60\u552f\u4e00\u9700\u8981\u5173\u5fc3\u7684\u5c31\u662f\u903b\u8f91\u672c\u8eab\uff0c \u6ca1\u6709\u592a\u591a\u8f6f\u4ef6\u6784\u9020\u65b9\u9762\u7684\u8d1f\u62c5\u3002"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/zh/app-f51":{"__comp":"7fa55123","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/blog-42a":{"__comp":"a6aa9e1f","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"3a332aed"},"/zh/blog/archive-aaf":{"__comp":"9e4087bc","__context":{"plugin":"831b5c01"},"archive":"927d70e2"},"/zh/blog/conversational-computing-1c0":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"ec9b07e8"},"/zh/blog/reality-world-open-source-conference-c19":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"92f86187"},"/zh/blog/tags-02a":{"__comp":"01a85c17","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","tags":"bfb16af5"},"/zh/blog/tags/cogine-e43":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"e121e550","listMetadata":"3b8538cb"},"/zh/blog/tags/open-source-bf1":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"c4113809","listMetadata":"d2080cbe"},"/zh/blog/tags/reality-world-7f0":{"__comp":"6875c492","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"129facaa","listMetadata":"f0f7ee06"},"/zh/blog/the-evolution-of-ECS-714":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"cede0149"},"/zh/blog/thinking-838":{"__comp":"ccc49370","__context":{"plugin":"831b5c01"},"sidebar":"814f3328","content":"0c125c2b"},"/zh/cogine-e3d":{"__comp":"28207210","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/community/about-open-source-285":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"14fa4984"},"/zh/community/about-reality-world-d54":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"a394719f"},"/zh/community/contact-9c8":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2c22cdfb"},"/zh/community/questions-d15":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"df434585"},"/zh/community/resources-6c5":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6ba9ce7"},"/zh/community/roadmap-422":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"68bfee64"},"/zh/feature/chidori-54a":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"5503d724"},"/zh/feature/cogine-95c":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"2ae76f65"},"/zh/feature/features-0c8":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"956d92de"},"/zh/feature/langchain-add":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"b6e914c2"},"/zh/features-d0e":{"__comp":"a54713d3","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/learning/Reality-World-cf0":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"308394e9"},"/zh/reality-create-221":{"__comp":"a6d44343","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"},"/zh/reality-world-paper/-974":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"be3188a8"},"/zh/self-deploying-830":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"0b68990b"},"/zh/whitepaper/-c84":{"__comp":"1f391b9e","__context":{"plugin":"49b2de74"},"content":"c6a65125"},"/zh/docs-11f":{"__comp":"1be78505","__context":{"plugin":"087bcfde"},"versionMetadata":"935f2afb"},"/zh/docs/intro-743":{"__comp":"17896441","content":"0e384e19"},"/zh/docs/introduction/-71f":{"__comp":"17896441","content":"c62485b9"},"/zh/docs/introduction/advantage-812":{"__comp":"17896441","content":"16c820cc"},"/zh/docs/introduction/business-model-4bc":{"__comp":"17896441","content":"eb4e993a"},"/zh/docs/introduction/current-71b":{"__comp":"17896441","content":"1e248c61"},"/zh/docs/introduction/evolution-75d":{"__comp":"17896441","content":"c84e1d07"},"/zh/docs/introduction/user-cd6":{"__comp":"17896441","content":"1e8a94b6"},"/zh/docs/introduction/value-e8d":{"__comp":"17896441","content":"386fda77"},"/zh/-5f6":{"__comp":"c4f5d8e4","__context":{"plugin":"49b2de74"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/zh/assets/js/main.c0db0840.js.LICENSE.txt b/zh/assets/js/main.c0db0840.js.LICENSE.txt deleted file mode 100644 index fbc0635..0000000 --- a/zh/assets/js/main.c0db0840.js.LICENSE.txt +++ /dev/null @@ -1,132 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ - -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ - -/** - * @license React - * use-sync-external-store-shim.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ - -/** @license React v0.20.2 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/zh/assets/js/main.d44be7d9.js b/zh/assets/js/main.d44be7d9.js deleted file mode 100644 index fd249f1..0000000 --- a/zh/assets/js/main.d44be7d9.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.d44be7d9.js.LICENSE.txt */ -(self.webpackChunkrealityworld=self.webpackChunkrealityworld||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1003)),"@theme/BlogTagsListPage",1003],"088d37c1":[()=>n.e(4982).then(n.t.bind(n,4469,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"0b68990b":[()=>n.e(9008).then(n.bind(n,3525)),"@site/src/pages/self-deploying.md",3525],"0c125c2b":[()=>n.e(6259).then(n.bind(n,1592)),"@site/blog/2021-08-26-thinking/index.md",1592],"0e384e19":[()=>n.e(9671).then(n.bind(n,1039)),"@site/docs/intro.md",1039],"129facaa":[()=>n.e(5674).then(n.t.bind(n,3048,19)),"~blog/default/zh-blog-tags-reality-world-399.json",3048],"13c002e8":[()=>n.e(3915).then(n.bind(n,2759)),"@site/blog/2021-08-26-thinking/index.md?truncated=true",2759],"14fa4984":[()=>n.e(2116).then(n.bind(n,9863)),"@site/src/pages/community/about-open-source.md",9863],"16c820cc":[()=>n.e(8341).then(n.bind(n,9234)),"@site/docs/introduction/advantage.md",9234],17896441:[()=>Promise.all([n.e(532),n.e(4474),n.e(7918)]).then(n.bind(n,7562)),"@theme/DocItem",7562],"1b8901bf":[()=>n.e(3075).then(n.bind(n,1459)),"@site/blog/2023-10-04-conversational-computing/index.md?truncated=true",1459],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4739)),"@theme/DocPage",4739],"1e248c61":[()=>n.e(5885).then(n.bind(n,8643)),"@site/docs/introduction/current.md",8643],"1e8a94b6":[()=>n.e(5647).then(n.bind(n,448)),"@site/docs/introduction/user.md",448],"1f391b9e":[()=>Promise.all([n.e(532),n.e(4474),n.e(3085)]).then(n.bind(n,2865)),"@theme/MDXPage",2865],28207210:[()=>n.e(7450).then(n.bind(n,5875)),"@site/src/pages/cogine.js",5875],"2ae76f65":[()=>n.e(6641).then(n.bind(n,9532)),"@site/src/pages/feature/cogine.mdx",9532],"2c22cdfb":[()=>n.e(3819).then(n.bind(n,4059)),"@site/src/pages/community/contact.md",4059],"306a8c6c":[()=>n.e(7616).then(n.t.bind(n,9479,19)),"~docs/community/version-current-metadata-prop-751.json",9479],"386fda77":[()=>n.e(6821).then(n.bind(n,7070)),"@site/docs/introduction/value.md",7070],"3a332aed":[()=>n.e(8800).then(n.t.bind(n,9567,19)),"~blog/default/zh-blog-ea2.json",9567],"3b8538cb":[()=>n.e(236).then(n.t.bind(n,3179,19)),"~blog/default/zh-blog-tags-cogine-4f3-list.json",3179],"3cdbf76c":[()=>n.e(3028).then(n.bind(n,940)),"@site/blog/2023-10-10-the-evolution-of-ECS.md?truncated=true",940],"5062db26":[()=>n.e(990).then(n.t.bind(n,5745,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"5503d724":[()=>n.e(2863).then(n.bind(n,1005)),"@site/src/pages/feature/chidori.mdx",1005],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(8610)]).then(n.bind(n,2605)),"@theme/BlogTagsPostsPage",2605],"68bfee64":[()=>n.e(7541).then(n.bind(n,8059)),"@site/src/pages/community/roadmap.md",8059],"7fa55123":[()=>n.e(6525).then(n.bind(n,1080)),"@site/src/pages/app.js",1080],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"927d70e2":[()=>n.e(1045).then(n.t.bind(n,2190,19)),"~blog/default/zh-blog-archive-8d7.json",2190],"92f86187":[()=>n.e(5119).then(n.bind(n,6914)),"@site/blog/2023-10-09-reality-world-open-source-conference.md",6914],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"956d92de":[()=>n.e(8778).then(n.bind(n,3878)),"@site/i18n/zh/docusaurus-plugin-content-pages/feature/features.mdx",3878],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a394719f:[()=>n.e(5202).then(n.bind(n,146)),"@site/src/pages/community/about-reality-world.md",146],a54713d3:[()=>Promise.all([n.e(532),n.e(9663)]).then(n.bind(n,481)),"@site/src/pages/features.js",481],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(3089)]).then(n.bind(n,6569)),"@theme/BlogListPage",6569],a6d44343:[()=>n.e(9500).then(n.bind(n,6650)),"@site/src/pages/reality-create.js",6650],a8378f8b:[()=>n.e(6330).then(n.t.bind(n,2481,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-docs/community/plugin-route-context-module-100.json",2481],b6ba9ce7:[()=>n.e(1218).then(n.bind(n,94)),"@site/src/pages/community/resources.md",94],b6e914c2:[()=>n.e(7544).then(n.bind(n,2667)),"@site/src/pages/feature/langchain.mdx",2667],be3188a8:[()=>n.e(9348).then(n.bind(n,6955)),"@site/src/pages/reality-world-paper/index.md",6955],bfb16af5:[()=>n.e(5909).then(n.t.bind(n,5392,19)),"~blog/default/zh-blog-tags-tags-906.json",5392],c4113809:[()=>n.e(1545).then(n.t.bind(n,4144,19)),"~blog/default/zh-blog-tags-open-source-285.json",4144],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,2188)),"@site/src/pages/index.js",2188],c62485b9:[()=>n.e(3493).then(n.bind(n,4685)),"@site/docs/introduction/introduction.md",4685],c6a65125:[()=>n.e(9923).then(n.bind(n,7894)),"@site/src/pages/whitepaper/index.md",7894],c84e1d07:[()=>n.e(2966).then(n.bind(n,8100)),"@site/docs/introduction/evolution.md",8100],ccc49370:[()=>Promise.all([n.e(532),n.e(4474),n.e(3826),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cede0149:[()=>n.e(7424).then(n.bind(n,7002)),"@site/blog/2023-10-10-the-evolution-of-ECS.md",7002],d2080cbe:[()=>n.e(9221).then(n.t.bind(n,931,19)),"~blog/default/zh-blog-tags-open-source-285-list.json",931],df434585:[()=>n.e(9505).then(n.bind(n,8237)),"@site/src/pages/community/questions.md",8237],e121e550:[()=>n.e(4916).then(n.t.bind(n,668,19)),"~blog/default/zh-blog-tags-cogine-4f3.json",668],eb4e993a:[()=>n.e(9659).then(n.bind(n,9805)),"@site/docs/introduction/business-model.md",9805],ec9b07e8:[()=>n.e(8857).then(n.bind(n,2898)),"@site/blog/2023-10-04-conversational-computing/index.md",2898],edc931f8:[()=>n.e(6160).then(n.bind(n,5236)),"@site/community/index.md",5236],f0f7ee06:[()=>n.e(8342).then(n.t.bind(n,4151,19)),"~blog/default/zh-blog-tags-reality-world-399-list.json",4151],fb33060d:[()=>n.e(8287).then(n.t.bind(n,3769,19)),"/home/runner/work/cogine.github.io/cogine.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],fda7c27e:[()=>n.e(3529).then(n.bind(n,5950)),"@site/blog/2023-10-09-reality-world-open-source-conference.md?truncated=true",5950]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/zh/app",component:f("/zh/app","fbb"),exact:!0},{path:"/zh/blog",component:f("/zh/blog","940"),exact:!0},{path:"/zh/blog/archive",component:f("/zh/blog/archive","503"),exact:!0},{path:"/zh/blog/conversational-computing",component:f("/zh/blog/conversational-computing","6f6"),exact:!0},{path:"/zh/blog/reality-world-open-source-conference",component:f("/zh/blog/reality-world-open-source-conference","7c7"),exact:!0},{path:"/zh/blog/tags",component:f("/zh/blog/tags","b75"),exact:!0},{path:"/zh/blog/tags/cogine",component:f("/zh/blog/tags/cogine","e77"),exact:!0},{path:"/zh/blog/tags/open-source",component:f("/zh/blog/tags/open-source","370"),exact:!0},{path:"/zh/blog/tags/reality-world",component:f("/zh/blog/tags/reality-world","59e"),exact:!0},{path:"/zh/blog/the-evolution-of-ECS",component:f("/zh/blog/the-evolution-of-ECS","50d"),exact:!0},{path:"/zh/blog/thinking",component:f("/zh/blog/thinking","591"),exact:!0},{path:"/zh/cogine",component:f("/zh/cogine","d8f"),exact:!0},{path:"/zh/community/about-open-source",component:f("/zh/community/about-open-source","b76"),exact:!0},{path:"/zh/community/about-reality-world",component:f("/zh/community/about-reality-world","d65"),exact:!0},{path:"/zh/community/contact",component:f("/zh/community/contact","954"),exact:!0},{path:"/zh/community/questions",component:f("/zh/community/questions","17e"),exact:!0},{path:"/zh/community/resources",component:f("/zh/community/resources","5d5"),exact:!0},{path:"/zh/community/roadmap",component:f("/zh/community/roadmap","b8c"),exact:!0},{path:"/zh/feature/chidori",component:f("/zh/feature/chidori","5be"),exact:!0},{path:"/zh/feature/cogine",component:f("/zh/feature/cogine","d29"),exact:!0},{path:"/zh/feature/features",component:f("/zh/feature/features","a74"),exact:!0},{path:"/zh/feature/langchain",component:f("/zh/feature/langchain","cb1"),exact:!0},{path:"/zh/features",component:f("/zh/features","58e"),exact:!0},{path:"/zh/reality-create",component:f("/zh/reality-create","ed1"),exact:!0},{path:"/zh/reality-world-paper/",component:f("/zh/reality-world-paper/","c13"),exact:!0},{path:"/zh/self-deploying",component:f("/zh/self-deploying","f8a"),exact:!0},{path:"/zh/whitepaper/",component:f("/zh/whitepaper/","a89"),exact:!0},{path:"/zh/community",component:f("/zh/community","b75"),routes:[{path:"/zh/community/",component:f("/zh/community/","080"),exact:!0,sidebar:"community"}]},{path:"/zh/docs",component:f("/zh/docs","704"),routes:[{path:"/zh/docs/intro",component:f("/zh/docs/intro","743"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/",component:f("/zh/docs/introduction/","71f"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/advantage",component:f("/zh/docs/introduction/advantage","812"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/business-model",component:f("/zh/docs/introduction/business-model","4bc"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/current",component:f("/zh/docs/introduction/current","71b"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/evolution",component:f("/zh/docs/introduction/evolution","75d"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/user",component:f("/zh/docs/introduction/user","cd6"),exact:!0,sidebar:"docsSidebar"},{path:"/zh/docs/introduction/value",component:f("/zh/docs/introduction/value","e8d"),exact:!0,sidebar:"docsSidebar"}]},{path:"/zh/",component:f("/zh/","010"),exact:!0},{path:"*",component:f("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x,O,P,C,T,I,A,L,N,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(l>0){var s=R.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new R.Token(n.slice(i,a),s))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(s="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+s,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(f),g=new RegExp(d),y=new RegExp(p),b=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,E=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,L=/ll$/,N=new RegExp("^"+u+s+"[^aeiouwxy]$"),j=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=b).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=E,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=y).test(t)&&(s=_,u=x,(a=k).test(e=t)?e+="e":s.test(e)?(o=S,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+l[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,s=N,((o=h).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=h,(o=L).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(j)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new R.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],m=f.final&&p.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new R.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:p,output:h,node:f})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new R.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=R.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=R.TokenSet.fromClause(s),m=this.tokenSet.intersect(p).toArray();if(0===m.length&&s.presence===R.Query.presence.REQUIRED){for(var h=0;h<s.fields.length;h++){a[A=s.fields[h]]=R.Set.empty}break}for(var g=0;g<m.length;g++){var y=m[g],b=this.invertedIndex[y],v=b._index;for(h=0;h<s.fields.length;h++){var w=b[A=s.fields[h]],E=Object.keys(w),S=y+"/"+A,k=new R.Set(E);if(s.presence==R.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[A]&&(a[A]=R.Set.complete)),s.presence!=R.Query.presence.PROHIBITED){if(r[A].upsert(v,s.boost,(function(e,t){return e+t})),!o[S]){for(var _=0;_<E.length;_++){var x,O=E[_],P=new R.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new R.MatchData(y,A,C):x.add(y,A,C)}o[S]=!0}}else void 0===i[A]&&(i[A]=R.Set.empty),i[A]=i[A].union(k)}}}if(s.presence===R.Query.presence.REQUIRED)for(h=0;h<s.fields.length;h++){a[A=s.fields[h]]=a[A].intersect(c)}}var T=R.Set.complete,I=R.Set.empty;for(l=0;l<this.fields.length;l++){var A;a[A=this.fields[l]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var L=Object.keys(n),N=[],j=Object.create(null);if(t.isNegated()){L=Object.keys(this.fieldVectors);for(l=0;l<L.length;l++){P=L[l];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(l=0;l<L.length;l++){var M=(D=R.FieldRef.fromString(L[l])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=j[M]))F.score+=z,F.matchData.combine(n[D]);else{var U={ref:M,score:z,matchData:n[D]};j[M]=U,N.push(U)}}}return N.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,l=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new R.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=this._fields[a].isLiteral??!1,s=i?i(e):e[a],u=l?[s]:this.tokenizer(s,{fields:[a]}),c=l?u:this.pipeline.run(u),d=new R.FieldRef(n,a),f=Object.create(null);this.fieldTermFrequencies[d]=f,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var p=0;p<c.length;p++){var m=c[p];if(null==f[m]&&(f[m]=0),f[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var b=this.metadataWhitelist[y],v=m.metadata[b];null==this.invertedIndex[m][a][n][b]&&(this.invertedIndex[m][a][n][b]=[]),this.invertedIndex[m][a][n][b].push(v)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new R.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,y,b=c[m],v=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(h=R.idf(this.invertedIndex[b],this.documentCount),r[b]=h):h=r[b],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+v),g*=f,g*=p,y=Math.round(1e3*g)/1e3,s.insert(w,y)}e[a]=s}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},8606:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(6136);const s=[n(4998),n(2251),n(9957),n(470)];var u=n(997),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(1514),h=n(9962),g=n(9524),y=n(107),b=n(5463),v=n(626),w=n(408),E=n(246),S=n(3905),k=n(3647);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,S.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function O(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const P=new Map;function C(e){if(P.has(e.pathname))return{...e,pathname:P.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}var T=n(8121),I=n(694);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const L=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),A("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(L,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=j,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(U,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var W=n(3256),Z=n(1048);function V(){const e=(0,Z.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Q(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(W.Z,null,r.createElement(I.M,null,r.createElement(T.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(O,null),r.createElement($,null),r.createElement(R,{location:C(t)},e)),r.createElement(V,null))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),N(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(Q,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/zh/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/zh/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/zh/docs/intro","sidebar":"docsSidebar"},{"id":"introduction/advantage","path":"/zh/docs/introduction/advantage","sidebar":"docsSidebar"},{"id":"introduction/business-model","path":"/zh/docs/introduction/business-model","sidebar":"docsSidebar"},{"id":"introduction/current","path":"/zh/docs/introduction/current","sidebar":"docsSidebar"},{"id":"introduction/evolution","path":"/zh/docs/introduction/evolution","sidebar":"docsSidebar"},{"id":"introduction/introduction","path":"/zh/docs/introduction/","sidebar":"docsSidebar"},{"id":"introduction/user","path":"/zh/docs/introduction/user","sidebar":"docsSidebar"},{"id":"introduction/value","path":"/zh/docs/introduction/value","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/zh/docs/intro","label":"intro"}}}}],"breadcrumbs":true},"community":{"path":"/zh/community","versions":[{"name":"current","label":"Next","isLast":true,"path":"/zh/community","mainDocId":"index","docs":[{"id":"index","path":"/zh/community/","sidebar":"community"}],"draftIds":[],"sidebars":{"community":{"link":{"path":"/zh/community/","label":"index"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"zh","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),l=n(64);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),l=n(9962),s=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),S=(0,o.useContext)(c),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const _=f||p;const x=(0,s.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,y&&(e=>e.startsWith("/"))(C)?E(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:v,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,L=(0,o.useRef)(),N=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&L.current&&L.current.disconnect()})),[L,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||g||S.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:k,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},b)):o.createElement(I,(0,r.Z)({},b,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{k.current=e,A&&e&&x&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),L.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>f,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>p});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const s={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function p(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(3997)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},3:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(4334),a=n(3256),i=n(5463),l=n(7462),s=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),y=n(408);const b={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:b.skipToContent})}var w=n(107),E=n(5830);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(735),I=n(2957);var A=n(3768),L=n(3086);const N=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(N.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(N);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const W=r.memo(H),Z={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(W,{className:t,buttonClassName:"dark"===n?Z.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Q=n(6811);function q(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(G,null))}var K=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(K.Z,(0,l.Z)({href:c?m:a},d,g)):r.createElement(K.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(ya,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function be(e){return{current:e}}function ve(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(ve(e)||ve(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Ee=function(){};function Se(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Le(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Ne(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ne(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Le(Le({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=ke((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Le(Le({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Le(Le({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ue(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var We="2.6.0",Ze="https://cdn.jsdelivr.net/npm/search-insights@".concat(We,"/dist/search-insights.min.js"),Ve=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return $e({eventName:"Items Viewed"},e)})),state:o})}),400);function Qe(e){var t=function(e){return $e({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Ee},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=We,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Ze,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var l=Re(i),s=be([]),u=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(s.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(s.current=n,n.length>0&&Ve({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function s(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:$e({clickAnalytics:!0},e?{userToken:e}:{}),insights:l}})}i("addAlgoliaAgent","insights-plugin"),s(),i("onUserTokenChange",s),i("getUserToken",null,(function(e,t){s(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[$e({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[$e({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return ft(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ft(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Ee,onResolve:Ee};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=lt(lt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function yt(e){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yt(e)}function bt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e){return Et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?St(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):St(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return kt(kt({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?kt(kt({},n),{},{params:kt(kt({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var l;(l=i.items).push.apply(l,xt(a))}else{var s={execute:r,requesterId:o,items:a,searchClient:n};e.push(s)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,l=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:l,state:n.getState()}),Array.isArray(l),l.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:l}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(jt(t,n,e),jt(r,n,e)),n)},catch:function(t){return At(e.catch(jt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(jt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Lt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Nt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function jt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Rt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(e)}Lt.resolve=function(e){return Nt(Promise.resolve(e))},Lt.reject=function(e){return Nt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ut(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var $t,Ht,Wt,Zt=null,Vt=($t=-1,Ht=-1,Wt=void 0,function(e){var t=++$t;return Promise.resolve(e).then((function(e){return Wt&&t<Ht?Wt:(Ht=t,Wt=e,e)}))});function Qt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,l=e.store,s=Ut(e,Mt);Zt&&o.environment.clearTimeout(Zt);var u=s.setCollections,c=s.setIsOpen,d=s.setQuery,f=s.setActiveItemId,p=s.setStatus;if(d(a),f(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=l.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));p("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:l.getState()}));var g=Nt(Vt(h).then((function(){return Promise.resolve()})));return l.pendingRequests.add(g)}p("loading"),Zt=o.environment.setTimeout((function(){p("stalled")}),o.stallThreshold);var y=Nt(Vt(o.getSources(Bt({query:a,refresh:i,state:l.getState()},s)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:l.getState()},s))).then((function(t){return Ct(t,e.sourceId,l.getState())}))}))).then(Tt).then((function(t){return It(t,e,l)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return vt(vt({},e),{},wt({},t.source.sourceId,vt(vt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=o.shouldPanelOpen({state:l.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var f=Rt(l.getState());if(null!==l.getState().activeItemId&&f){var m=f.item,h=f.itemInputValue,g=f.itemUrl,y=f.source;y.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:y,state:l.getState()},s))}})).finally((function(){p("idle"),Zt&&o.environment.clearTimeout(Zt)}));return l.pendingRequests.add(y)}function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}var Gt=["event","props","refresh","store"];function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==qt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==qt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===qt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],ln=["sourceIndex"],sn=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){fn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=pn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},pn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},pn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,ln);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Qt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var l=e||{},s=(l.inputElement,l.maxLength),u=void 0===s?512:s,c=pn(l,an),d=Rt(r.getState()),f=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),p=t.enterKeyHint||(null!=d&&d.itemUrl&&!f?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Qt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Gt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},l=function(){var e=Rt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,l=e.itemUrl,s=e.source;s.onActive(Kt({event:t,item:n,itemInputValue:i,itemUrl:l,refresh:r,source:s,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Qt(Kt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),l(),setTimeout(i,0)})):(o.dispatch(t.key,{}),l(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var s=Rt(o.getState()),u=s.item,c=s.itemInputValue,d=s.itemUrl,f=s.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Qt(Kt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){f.onSelect(Kt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Ee,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=pn(n,sn);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,l=e.source,s=e.sourceIndex,u=pn(e,un);return dn({id:"".concat(a(t.id,s),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Rt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,l=t.itemInputValue,s=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:l,itemUrl:s,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=l.getItemInputValue({item:i,state:r.getState()}),s=l.getItemUrl({item:i,state:r.getState()});(s?Promise.resolve():Qt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){l.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:s,refresh:n,source:l,state:r.getState()},o))}))}},u)}}}var hn="1.11.0",gn=[{segment:"autocomplete-core",version:hn}];function yn(e){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yn(e)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==yn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==yn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===yn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e){var t,n,r,o,a=e.plugins,i=e.options,l=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,s=l?wn({},l,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:vn({"autocomplete-core":Object.keys(i)},s),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function Sn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Rt(n))||void 0===t?void 0:t.itemInputValue)||null}function kn(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function _n(e){return _n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_n(e)}function xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:kn(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:Sn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:kn(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:Sn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Ln(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ln(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Nn(e){var t=[],n=gt(e,t),r=Ke(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Qt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var l="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(Qe(l))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:En({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var jn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],l=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=l:4===i?r[1]=Object.assign(r[1]||{},l):5===i?(r[1]=r[1]||{})[t[++a]]=l:6===i?r[1][t[++a]]+=l+"":i?(o=e.apply(l,jn(e,l,n,["",null])),r.push(o),l[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(l)}return r},Rn=new Map;function Dn(e){var t=Rn.get(this);return t||(t=new Map,Rn.set(this,t)),(t=jn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],l=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},s=0;s<e.length;s++){s&&(1===r&&l(),l(s));for(var u=0;u<e[s].length;u++)t=e[s][u],1===r?"<"===t?(l(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(l(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[s][u+1])?(l(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(l(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return l(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Un(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function $n(e){this._listeners[e.type](e)}function Hn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Un(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,$n,r):e.removeEventListener(t,$n,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Wn(e){return"onChange"===e?"onInput":e}function Zn(e,t){for(var n in t)Hn(e,Wn(n),t[n])}function Vn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Hn(e,Wn(n),t[n])}var Qn=["children"];function qn(e){return function(e){if(Array.isArray(e))return Gn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Gn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Yn(n,Qn),i=e.document.createElement(t);return Zn(i,a),i.append.apply(i,qn(o)),i}}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,l=rr(e,Jn),s=Kn(n)("input",l),u=r(tr({state:i,props:o({inputElement:s}),inputElement:s},t));return Zn(s,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),s};function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,fr,pr,mr,hr,gr={},yr=[],br=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,vr=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Er(e){var t=e.parentNode;t&&t.removeChild(e)}function Sr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return kr(e,i,r,o,null)}function kr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__d||n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&fr.push(e)&&!Tr.__r++||pr!==cr.debounceRendering)&&((pr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,l,s;for(fr.sort(hr);e=fr.shift();)e.__d&&(t=fr.length,r=void 0,o=void 0,a=void 0,l=(i=(n=e).__v).__e,(s=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(s,i,a,n.__n,void 0!==s.ownerSVGElement,null!=i.__h?[l]:null,r,null==l?Or(i):l,i.__h,o),Br(r,i,o),i.__e!=l&&Pr(i)),fr.length>t&&fr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,l,s,u,c){var d,f,p,m,h,g,y,b,v,w=0,E=r&&r.__k||yr,S=E.length,k=S,_=t.length;for(n.__k=[],d=0;d<_;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?kr(null,m,null,null,m):vr(m)?kr(_r,{children:m},null,null,null):m.__b>0?kr(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)?(m.__=n,m.__b=n.__b+1,-1===(b=Nr(m,E,y=d+w,k))?p=gr:(p=E[b]||gr,E[b]=void 0,k--),Fr(e,m,p,o,a,i,l,s,u,c),h=m.__e,(f=m.ref)&&p.ref!=f&&(p.ref&&Ur(p.ref,null,m),c.push(f,m.__c||h,m)),null!=h&&(null==g&&(g=h),(v=p===gr||null===p.__v)?-1==b&&w--:b!==y&&(b===y+1?w++:b>y?k>_-y?w+=b-y:w--:w=b<y&&b==y-1?b-y:0),y=d+w,"function"!=typeof m.type||b===y&&p.__k!==m.__k?"function"==typeof m.type||b===y&&!v?void 0!==m.__d?(s=m.__d,m.__d=void 0):s=h.nextSibling:s=Lr(e,h,s):s=Ar(m,s,e),"function"==typeof n.type&&(n.__d=s))):(p=E[d])&&null==p.key&&p.__e&&(p.__e==s&&(p.__=r,s=Or(p)),$r(p,p,!1),E[d]=null);for(n.__e=g,d=S;d--;)null!=E[d]&&("function"==typeof n.type&&null!=E[d].__e&&E[d].__e==n.__d&&(n.__d=E[d].__e.nextSibling),$r(E[d],E[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Lr(n,r.__e,t));return t}function Lr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Nr(e,t,n,r){var o=e.key,a=e.type,i=n-1,l=n+1,s=t[n];if(null===s||s&&o==s.key&&a===s.type)return n;if(r>(null!=s?1:0))for(;i>=0||l<t.length;){if(i>=0){if((s=t[i])&&o==s.key&&a===s.type)return i;i--}if(l<t.length){if((s=t[l])&&o==s.key&&a===s.type)return l;l++}}return-1}function jr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||br.test(t)?n:n+"px"}function Rr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||jr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||jr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/(PointerCapture)$|Capture$/,"$1")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r?n.u=r.u:(n.u=Date.now(),e.addEventListener(t,a?Mr:Dr,a)):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&"role"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){var t=this.l[e.type+!1];if(e.t){if(e.t<=t.u)return}else e.t=Date.now();return t(cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,l,s,u){var c,d,f,p,m,h,g,y,b,v,w,E,S,k,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(s=n.__h,l=t.__e=n.__e,t.__h=null,a=[l]),(c=cr.__b)&&c(t);e:if("function"==typeof x)try{if(y=t.props,b=(c=x.contextType)&&r[c.__c],v=c?b?b.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(y,v):(t.__c=d=new xr(y,v),d.constructor=x,d.render=Hr),b&&b.sub(d),d.props=y,d.state||(d.state={}),d.context=v,d.__n=r,f=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(y,d.__s))),p=d.props,m=d.state,d.__v=t,f)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&y!==p&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,v),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,v)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=y,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,v),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(p,m,h)}))}if(d.context=v,d.props=y,d.__P=e,d.__e=!1,E=cr.__r,S=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),k=0;k<d._sb.length;k++)d.__h.push(d._sb[k]);d._sb=[]}else do{d.__d=!1,E&&E(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++S<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),f||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(p,m)),Ir(e,vr(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,l,s,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}catch(e){t.__v=null,(s||null!=a)&&(t.__e=l,t.__h=!!s,a[a.indexOf(l)]=null),cr.__e(e,t,n)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,s,u);(c=cr.diffed)&&c(t)}function Br(e,t,n){for(var r=0;r<n.length;r++)Ur(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,l,s){var u,c,d,f=n.props,p=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),a=null,l=!1}if(null===m)f===p||l&&e.data===p||(e.data=p);else{if(a=a&&ur.call(e.childNodes),c=(f=n.props||gr).dangerouslySetInnerHTML,d=p.dangerouslySetInnerHTML,!l){if(null!=a)for(f={},h=0;h<e.attributes.length;h++)f[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Rr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Rr(e,a,t[a],n[a],r)}(e,p,f,o,l),d)t.__k=[];else if(Ir(e,vr(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),l,s),null!=a)for(h=a.length;h--;)null!=a[h]&&Er(a[h]);l||("value"in p&&void 0!==(h=p.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==f.value)&&Rr(e,"value",h,f.value,!1),"checked"in p&&void 0!==(h=p.checked)&&h!==e.checked&&Rr(e,"checked",h,f.checked,!1))}return e}function Ur(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function $r(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||Ur(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&$r(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Er(e.__e),e.__=e.__e=e.__d=void 0}function Hr(e,t,n){return this.constructor(e,n)}function Wr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=Sr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Zr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=yr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,fr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Vr="__aa-highlight__",Qr="__/aa-highlight__";function qr(e){var t=e.highlightedValue.split(Vr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Qr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Gr(e){return function(e){if(Array.isArray(e))return Yr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Yr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_highlightResult"].concat(Gr(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Kr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,l=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||l!==i?a.isHighlighted:l}function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function so(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(Kr(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return fo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function po(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Zr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Zr(t,r)||""),qr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,l=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},so(po(r))).map((function(e,n){return e.isHighlighted?t(l,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},po({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function yo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function bo(e){return bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bo(e)}var vo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){So(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function So(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ko(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:Sr,Fragment:_r,render:Wr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var l=r.getBoundingClientRect();return{top:i,left:l.left,right:o.document.documentElement.clientWidth-(l.left+l.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){Lo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Lo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var No=[{segment:"autocomplete-js",version:hn}];function jo(e){return function(e){if(Array.isArray(e))return Ro(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ro(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ro(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ro(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,jo(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Uo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){$o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ho(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],s=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(c){u=!0,o=c}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Wo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Zo=["components"];function Vo(e){return Vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vo(e)}function Qo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qo(Object(n),!0).forEach((function(t){Yo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Yo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ko(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),l=i.reactive,s=i.runReactives,u=be(!1),c=be(e),d=be(void 0),f=l((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,l=e.getItemProps,s=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,f=e.panelContainer,p=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,y=e.detachedMediaQuery,b=e.components,v=e.translations,w=ko(e,vo),E="undefined"!=typeof window?window:{},S=go(E,r);S.tagName;var k=Eo(Eo({},Oo),g),_={Highlight:Xr(k),ReverseHighlight:uo(k),ReverseSnippet:mo(k),Snippet:ho(k)};return{renderer:{classNames:yo(_o,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=l?l:function(e){return e.props},getLabelProps:null!=s?s:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:f?go(E,f):E.document.body,panelPlacement:null!=p?p:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:k,detachedMediaQuery:null!=y?y:getComputedStyle(E.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Eo(Eo({},_),b),translations:Eo(Eo({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),v)},core:Eo(Eo({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:E})}}(c.current)})),p=l((function(){return f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches})),m=l((function(){return Nn(Go(Go({},f.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=f.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(p.value)return!0;var n=rt(t)>0;if(!f.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||f.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:No,options:e}}))})),h=be(Go({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},f.value.core.initialState)),g={getEnvironmentProps:f.value.renderer.getEnvironmentProps,getFormProps:f.value.renderer.getFormProps,getInputProps:f.value.renderer.getInputProps,getItemProps:f.value.renderer.getItemProps,getLabelProps:f.value.renderer.getLabelProps,getListProps:f.value.renderer.getListProps,getPanelProps:f.value.renderer.getPanelProps,getRootProps:f.value.renderer.getRootProps},y={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},b=l((function(){return Dn.bind(f.value.renderer.renderer.createElement)})),v=l((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,l=void 0===i?"Search":i,s=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,f=Kn(o),p=s.getRootProps(lr({state:c,props:t.getRootProps({})},n)),m=f("div",lr({class:r.root},p)),h=f("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=f("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),y=s.getLabelProps(lr({state:c,props:t.getLabelProps({})},n)),b=f("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),v=f("label",lr({class:r.label,children:[b]},y)),w=f("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),E=f("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),S=or({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),k=f("div",{class:r.inputWrapperPrefix,children:[v,E]}),_=f("div",{class:r.inputWrapperSuffix,children:[w]}),x=f("div",{class:r.inputWrapper,children:[S]}),O=s.getFormProps(lr({state:c,props:t.getFormProps({inputElement:S})},n)),P=f("form",lr({class:r.form,children:[k,x,_]},O)),C=s.getPanelProps(lr({state:c,props:t.getPanelProps({})},n)),T=f("div",lr({class:r.panel},C)),I=f("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=f("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:l});if(a){var L=f("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),N=f("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[L,A,I]}),j=f("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=f("div",{class:r.detachedFormContainer,children:[P,j]});h.appendChild(R),m.appendChild(N)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:v,submitButton:b,clearButton:w,loadingIndicator:E,panel:T}}({autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,environment:f.value.core.environment,isDetached:p.value,placeholder:f.value.core.placeholder,propGetters:g,setIsModalOpen:k,state:h.current,translations:f.value.renderer.translations})}));function w(){Zn(v.value.panel,{style:p.value?{}:Po({panelPlacement:f.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:f.value.core.environment})})}function E(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:y,classNames:f.value.renderer.classNames,components:f.value.renderer.components,container:f.value.renderer.container,html:b.value,dom:v.value,panelContainer:p.value?v.value.detachedContainer:f.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:f.value.renderer.renderer},n=!rt(e)&&!u.current&&f.value.renderer.renderNoResults||f.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Vn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Vn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Zn(r.label,{hidden:"stalled"===a.status}),Zn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Zn(r.clearButton,{hidden:!a.query}),Zn(r.detachedSearchButtonQuery,{textContent:a.query}),Zn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,l=t.panelContainer,s=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){l.contains(i.panel)||"loading"===u.status||l.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var f=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,l=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})),i.templates.noResults&&0===l.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},s.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),l.map((function(e){var l=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:l.id,className:o.item},s.getItemProps(Ao({state:u,props:l},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:l,source:i,state:u,html:a})))})),p=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},f),d.createElement("div",{className:"aa-GradientBottom"})),m=f.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:p,state:u,sections:f,elements:m},d),{},{components:c,html:a},r),i.panel)}else l.contains(i.panel)&&l.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=f.value.renderer,i=r.components,l=Qo(r,Zo);c.current=Fo(l,f.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Ho(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Uo(Uo({},e),{},$o({},o,a)):e}),{})),initialState:h.current},e),s(),a(),m.value.refresh().then((function(){E(h.current)}))}function k(e){requestAnimationFrame((function(){var t=f.value.core.environment.document.body.contains(v.value.detachedOverlay);e!==t&&(e?(f.value.core.environment.document.body.appendChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(f.value.core.environment.document.body.removeChild(v.value.detachedOverlay),f.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return Zn(f.value.core.environment,e),function(){Zn(f.value.core.environment,Object.keys(e).reduce((function(e,t){return Go(Go({},e),{},Yo({},t,void 0))}),{}))}})),r((function(){var e=p.value?f.value.core.environment.document.body:f.value.renderer.panelContainer,t=p.value?v.value.detachedOverlay:v.value.panel;return p.value&&h.current.isOpen&&k(!0),E(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=f.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}})),r((function(){var e=ye((function(e){E(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(p.value&&r.isOpen!==n.isOpen&&k(n.isOpen),p.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&f.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=p.value;p.value=f.value.core.environment.matchMedia(f.value.renderer.detachedMediaQuery).matches,e!==p.value?S({}):requestAnimationFrame(w)}),20);return f.value.core.environment.addEventListener("resize",e),function(){f.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!p.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=f.value.core.environment.matchMedia(getComputedStyle(f.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Go(Go({},y),{},{update:S,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,se.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const la={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const sa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,se.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:l,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:f}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),p=(0,s.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),y=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return la;r=await n.json()}catch(n){return la}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},b=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),v=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(v.current)return w.current=Ko({container:v.current,placeholder:b,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),p.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:l}),e.term(r,{fields:["tags"],boost:l,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:v,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),fa=n(8259);var pa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(sa,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),s=(0,fa.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,fa.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,pa.J)(n),g=m.map((e=>{const t=p.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),y=[...a,...g,...i],b=(0,fa.lO)(n)[0],v=t&&y.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,w=t&&y.length>1?void 0:ma(b).path;return y.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:v,to:w,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:w,items:y,isActive:o?()=>!1:void 0}))}},ga=ha;function ya(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function ba(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ya,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function va(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(va,{onClick:()=>t.hide()}),t.content)}function Ea(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(ba,null),secondaryMenu:r.createElement(wa,null)}):null}const Sa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ka(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-a.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Sa.navbarHideable,!s&&Sa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(ka,{onClick:i.toggle}),r.createElement(Ea,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function La(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const Na={colorModeToggle:"colorModeToggle_DEke"};function ja(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ya,e)))))}function Ra(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ra,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(La,null),r.createElement(q,null),r.createElement(ja,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ja,{items:o}),r.createElement(V,{className:Na.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(sa,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(K.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function Ua(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function $a(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ha(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Wa(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ha,{item:e}),t.length!==n+1&&r.createElement($a,null))))))}function Za(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ua,{columns:t}):r.createElement(Wa,{links:t})}var Va=n(6753);const Qa={footerLogoLink:"footerLogoLink_BH7S"};function qa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Va.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ga(e){let{logo:t}=e;return t.href?r.createElement(K.Z,{href:t.href,className:Qa.footerLogoLink,target:t.target},r.createElement(qa,{logo:t})):r.createElement(qa,{logo:t})}function Ya(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ka(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ka,{style:a,links:n&&n.length>0&&r.createElement(Za,{links:n}),logo:o&&r.createElement(Ga,{logo:o}),copyright:t&&r.createElement(Ya,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,E.pl,I.OC,pa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(L.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,y.t)(),r.createElement(ti,null,r.createElement(i.d,{title:s,description:u}),r.createElement(v,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),l=n(9962),s=n(107),u=n(6753);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},6753:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(4334),i=n(1048),l=n(9200);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g,Oh:()=>v});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function y(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},408:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>E,lO:()=>b,oz:()=>v,s1:()=>y,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(4432),u=n(3609),c=n(9003);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function y(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function v(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(3768);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(7459),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(868),o=n(9962),a=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),o=n(6550),a=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>p,PP:()=>C,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var y="popstate",b="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,S=void 0===E?g:E,k=i.keyLength,_=void 0===k?6:k,x=e.basename?d(s(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),p(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)(U,e),U.length=n.length,C.notifyListeners(U.location,U.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(O(e.state))}function A(){N(O(v()))}var L=!1;function N(e){if(L)L=!1,T();else{C.confirmTransitionTo(e,"POP",S,(function(t){t?T({action:"POP",location:e}):function(e){var t=U.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,M(o))}(e)}))}}var j=O(v()),R=[j.key];function D(e){return x+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(y,I),a&&window.addEventListener(b,A)):0===F&&(window.removeEventListener(y,I),a&&window.removeEventListener(b,A))}var z=!1;var U={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=R.indexOf(U.location.key),u=R.slice(0,s+1);u.push(a.key),R=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,P(),U.location);C.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=R.indexOf(U.location.key);-1!==s&&(R[s]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function k(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(k(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",b=S[u],v=b.encodePath,w=b.decodePath;function O(){var e=w(_());return y&&(e=c(e,y)),p(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=v(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===f(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(f(t));-1===n&&(n=0);var r=R.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var L=_(),N=v(L);L!==N&&x(N);var j=O(),R=[f(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,A):0===M&&window.removeEventListener(E,A)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=k(window.location.href)),n+"#"+v(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(f(z.location)),i=R.slice(0,a+1);i.push(t),R=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=f(r),o=v(y+t);_()!==o&&(I=t,x(o));var a=R.indexOf(f(z.location));-1!==a&&(R[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(l,0,a.length-1),y=a.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),b=f;function v(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:y.length,action:"POP",location:y[g],index:g,entries:y,createHref:b,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var y=i[g];if(!(a[y]||r&&r[y]||h&&h[y]||l&&l[y])){var b=f(n,y);try{u(t,y,b)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(l){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),l=i.length,s=0;i=Array.prototype.slice.call(i);var u=function(){--l<=0&&a(s)};l||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(s++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),l=[],s=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,l)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),r)})),s.push(u);s.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var l=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,l):l()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),l="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==l&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(l)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(l)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,l=parseInt(e.start,10)-i;return(r=(l=l>a?a:l)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),l<0||r-l<0||l>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(l,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,l){var s=e.nodes[l+1];if(void 0===s||s.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),f=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+f,e.nodes.forEach((function(t,n){n>=l&&(e.nodes[n].start>0&&n!==l&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var l=o.index;if(0!==i)for(var s=1;s<i;s++)l+=o[s].length;t=a.wrapRangeInTextNode(t,l,l+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var l=void 0;null!==(l=e.exec(t.value))&&""!==l[i];){var s=l.index;if(0!==i)for(var u=1;u<i;u++)s+=l[u].length;var c=s+l[i].length;a.wrapRangeInMappedTextNode(t,s,c,(function(e){return n(l[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var l=o.checkWhitespaceRanges(e,i,a.value),s=l.start,u=l.end;l.valid&&o.wrapRangeInMappedTextNode(a,s,u,(function(n){return t(n,e,a.value.substring(s,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,l=a.length,s=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+s),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[l-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===l?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},4998:(e,t,n)=>{"use strict";n.r(t)},470:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in a=Object(arguments[s]))n.call(a,u)&&(l[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(l[i[c]]=a[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,y=!!h.lookbehind,b=!!h.greedy,v=h.alias;if(b&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var E=h.pattern||h,S=l.next,k=c;S!==t.tail&&!(d&&k>=d.reach);k+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(b){if(!(x=a(E,k,e,y))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=k;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(k=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(k,T),x.index-=k}else if(!(x=a(E,0,_,y)))continue;P=x.index;var A=x[0],L=_.slice(0,P),N=_.slice(P+A.length),j=k+_.length;d&&j>d.reach&&(d.reach=j);var R=S.prev;if(L&&(R=s(t,R,L),k+=L.length),u(t,R,O),S=s(t,R,new o(f,g?r.tokenize(A,g):A,v,A)),N&&s(t,S,N),O>1){var D={cause:f+","+m,reach:j};i(e,t,n,S.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9945:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:a};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},3997:(e,t,n)=>{var r={"./prism-php":9945};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3997},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);y[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=60103,k=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,L=60115,N=60116,j=60121,R=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;S=B("react.element"),k=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),L=B("react.memo"),N=B("react.lazy"),j=B("react.block"),B("react.scope"),R=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var W=!1;function Z(e,t){if(!e||W)return"";W=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{W=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function V(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=Z(e.type,!1);case 11:return e=Z(e.type.render,!1);case 22:return e=Z(e.type._render,!1);case 1:return e=Z(e.type,!0);default:return""}}function Q(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case k:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case L:return Q(e.type);case j:return Q(e._render);case N:t=e._payload,e=e._init;try{return Q(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function G(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=G(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ve=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){ve.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var Se=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Se[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Le(e,t){return e(t)}function Ne(e,t,n,r,o){return e(t,n,r,o)}function je(){}var Re=Le,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(je(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){ze=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(he){ze=!1}function $e(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,We=null,Ze=!1,Ve=null,Qe={onError:function(e){He=!0,We=e}};function qe(e,t,n,r,o,a,i,l,s){He=!1,We=null,$e.apply(Qe,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=pt(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){yt(e)&&n.delete(t)}function vt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&yt(it)&&(it=null),null!==lt&&yt(lt)&&(lt=null),null!==st&&yt(st)&&(st=null),ut.forEach(bt),ct.forEach(bt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,vt)))}function Et(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Lt=new Map,Nt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function jt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Lt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var Rt=8;function Dt(e){if(0!=(1&e))return Rt=15,1;if(0!=(2&e))return Rt=14,2;if(0!=(4&e))return Rt=13,4;var t=24&e;return 0!==t?(Rt=12,t):0!=(32&e)?(Rt=11,32):0!==(t=192&e)?(Rt=10,t):0!=(256&e)?(Rt=9,256):0!==(t=3584&e)?(Rt=8,t):0!=(4096&e)?(Rt=7,4096):0!==(t=4186112&e)?(Rt=6,t):0!==(t=62914560&e)?(Rt=5,t):67108864&e?(Rt=4,67108864):0!=(134217728&e)?(Rt=3,134217728):0!==(t=805306368&e)?(Rt=2,t):0!=(1073741824&e)?(Rt=1,1073741824):(Rt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return Rt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=Rt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Dt(s),o=Rt):0!==(l&=a)&&(r=Dt(l),o=Rt)}else 0!==(a=n&~i)?(r=Dt(a),o=Rt):0!==l&&(r=Dt(l),o=Rt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Rt)return t;Rt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Ht(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function $t(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wt(e)/Zt|0)|0},Wt=Math.log,Zt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Qt=a.unstable_runWithPriority,qt=!0;function Gt(e,t,n,r){De||je();var o=Kt,a=De;De=!0;try{Ne(o,e,t,n,r)}finally{(De=a)||Fe()}}function Yt(e,t,n,r){Qt(Vt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(qt)if((o=0==(4&t))&&0<at.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<ft.indexOf(e))return e=pt(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return lt=ht(lt,e,t,n,r,o),!0;case"mouseover":return st=ht(st,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}jr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=Ge(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return jr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function ln(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=o({},dn,{view:0,detail:0}),mn=ln(pn),hn=o({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=ln(hn),yn=ln(o({},hn,{dataTransfer:0})),bn=ln(o({},pn,{relatedTarget:0})),vn=ln(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),Sn=ln(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},pn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=ln(Cn),In=ln(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=ln(o({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Ln=ln(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Nn=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=ln(Nn),Rn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),Un=!1;function $n(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Wn=!1;var Zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Zn[e.type]:"textarea"===t}function Qn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Gn=null;function Yn(e){Cr(e,0)}function Kn(e){if(K(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",or),Gn=qn=null)}function or(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];if(Qn(t,Gn,e,xe(e)),e=Yn,De)e(t);else{De=!0;try{Le(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Gn=n,(qn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function lr(e,t){if("click"===e)return Kn(t)}function sr(e,t){if("input"===e||"change"===e)return Kn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=d&&"documentMode"in document&&11>=document.documentMode,br=null,vr=null,wr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==br||br!==X(r)||("selectionStart"in(r=br)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(vr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=br)))}jt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),jt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),jt(Nt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<kr.length;_r++)Lt.set(kr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(qe.apply(this,arguments),He){if(!He)throw Error(i(198));var c=We;He=!1,We=null,Ze||(Ze=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Pr(o,l,u),a=s}}}if(Ze)throw e=Ve,Ze=!1,Ve=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Nr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,l.forEach((function(t){Or.has(t)||Lr(t,!1,e,null),Lr(t,!0,e,null)})))}function Lr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Nr(a,e,o,t),i.add(l))}function Nr(e,t,n,r){var o=Lt.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Yt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function jr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=to(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Re(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var l=At.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=Tn;break;case"focusin":u="focus",s=bn;break;case"focusout":u="blur",s=bn;break;case"beforeblur":case"afterblur":s=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=yn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=An;break;case Pt:case Ct:case Tt:s=vn;break;case It:s=Ln;break;case"scroll":s=mn;break;case"wheel":s=jn;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=In}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=Be(m,f))&&c.push(Rr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=Ge(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=gn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ro(s),p=null==u?l:ro(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,to(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Mr(p))m++;for(p=0,h=f;h;h=Mr(h))p++;for(;0<m-p;)c=Mr(c),m--;for(;0<p-m;)f=Mr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Mr(c),f=Mr(f)}c=null}else c=null;null!==s&&Fr(i,l,s,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(s=(l=r?ro(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Xn;else if(Vn(l))if(Jn)g=sr;else{g=ir;var y=ar}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=lr);switch(g&&(g=g(e,r))?Qn(i,g,n,o):(y&&y(e,l,r),"focusout"===e&&(y=l._wrapperState)&&y.controlled&&"number"===l.type&&oe(l,"number",l.value)),y=r?ro(r):window,e){case"focusin":(Vn(y)||"true"===y.contentEditable)&&(br=y,vr=r,wr=null);break;case"focusout":wr=vr=br=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":Sr(i,n,o)}var b;if(Dn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Wn?$n(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Bn&&"ko"!==n.locale&&(Wn||"onCompositionStart"!==v?"onCompositionEnd"===v&&Wn&&(b=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Wn=!0)),0<(y=Dr(r,v)).length&&(v=new Sn(v,e,null,n,o),i.push({event:v,listeners:y}),b?v.data=b:null!==(b=Hn(n))&&(v.data=b))),(b=Fn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(Un=!0,zn);case"textInput":return(e=t.data)===zn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Wn)return"compositionend"===e||!Dn&&$n(e,t)?(e=nn(),tn=en=Jt=null,Wn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new Sn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Cr(i,t)}))}function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Rr(e,a,o)),null!=(a=Be(e,t))&&r.push(Rr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Be(n,a))&&i.unshift(Rr(n,s,l)):o||null!=(s=Be(n,a))&&i.push(Rr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,Ur=null;function $r(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Wr="function"==typeof setTimeout?setTimeout:void 0,Zr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Qr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Yr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Kr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Kr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],lo=-1;function so(e){return{current:e}}function uo(e){0>lo||(e.current=io[lo],io[lo]=null,lo--)}function co(e,t){lo++,io[lo]=e.current,e.current=t}var fo={},po=so(fo),mo=so(!1),ho=fo;function go(e,t){var n=e.type.contextTypes;if(!n)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function yo(e){return null!=(e=e.childContextTypes)}function bo(){uo(mo),uo(po)}function vo(e,t,n){if(po.current!==fo)throw Error(i(168));co(po,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,Q(t)||"Unknown",a));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,co(po,e),co(mo,mo.current),!0}function So(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(po),co(po,e)):uo(mo),co(mo,n)}var ko=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,Lo=a.unstable_ImmediatePriority,No=a.unstable_UserBlockingPriority,jo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,Uo=!1,$o=Io(),Ho=1e4>$o?Io:function(){return Io()-$o};function Wo(){switch(Ao()){case Lo:return 99;case No:return 98;case jo:return 97;case Ro:return 96;case Do:return 95;default:throw Error(i(332))}}function Zo(e){switch(e){case 99:return Lo;case 98:return No;case 97:return jo;case 96:return Ro;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=Zo(e),xo(e,t)}function Qo(e,t,n){return e=Zo(e),Oo(e,t,n)}function qo(){if(null!==zo){var e=zo;zo=null,Po(e)}Go()}function Go(){if(!Uo&&null!==Bo){Uo=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(Lo,qo),n}finally{Uo=!1}}}var Yo=E.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=so(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var la=!1;function sa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function pa(e,t,n,r){var a=e.updateQueue;la=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=o({},f,s);break e;case 2:la=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ya={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ms(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ms(e,r,n)}};function ba(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function va(e,t,n){var r=!1,o=fo,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=yo(t)?ho:po.current,a=(r=null!=(r=t.contextTypes))?go(e,o):fo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ya,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ya.enqueueReplaceState(t,t.state,null)}function Ea(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,sa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=yo(t)?ho:po.current,o.context=go(e,a)),pa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ya.enqueueReplaceState(o,o.state,null),pa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Sa=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Qs(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ks(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=qs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case S:return(n=Qs(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Ks(t,e.mode,n)).return=e,t}if(Sa(t)||$(t))return(t=qs(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case S:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(Sa(n)||$(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case S:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Sa(r)||$(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var y=p(o,d,l[h],s);if(null===y){null===d&&(d=g);break}e&&d&&null===y.alternate&&t(o,d),i=a(y,i,h),null===c?u=y:c.sibling=y,c=y,d=g}if(h===l.length)return n(o,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=$(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,y=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(y=h,h=null):y=h.sibling;var v=p(o,h,b.value,u);if(null===v){null===h&&(h=y);break}e&&h&&null===v.alternate&&t(o,h),l=a(v,l,g),null===d?c=v:d.sibling=v,d=v,h=y}if(b.done)return n(o,h),c;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,u))&&(l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(h=r(o,h);!b.done;g++,b=s.next())null!==(b=m(h,o,g,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case S:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=ka(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=qs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Qs(a.type,a.key,a.props,null,e.mode,s)).ref=ka(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ks(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(Sa(a))return h(e,r,a,s);if($(a))return g(e,r,a,s);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,Q(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=so(Ca),Ia=so(Ca),Aa=so(Ca);function La(e){if(e===Ca)throw Error(i(174));return e}function Na(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function ja(){uo(Ta),uo(Ia),uo(Aa)}function Ra(e){La(Aa.current);var t=La(Ta.current),n=pe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=so(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,Ua=!1;function $a(e,t){var n=Ws(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ha(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Wa(e){if(Ua){var t=za;if(t){var n=t;if(!Ha(e,t)){if(!(t=Qr(n.nextSibling))||!Ha(e,t))return e.flags=-1025&e.flags|2,Ua=!1,void(Ba=e);$a(Ba,n)}Ba=e,za=Qr(t.firstChild)}else e.flags=-1025&e.flags|2,Ua=!1,Ba=e}}function Za(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!Ua)return Za(e),Ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=za;t;)$a(e,t),t=Qr(t.nextSibling);if(Za(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Qr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Qr(e.stateNode.nextSibling):null;return!0}function Qa(){za=Ba=null,Ua=!1}var qa=[];function Ga(){for(var e=0;e<qa.length;e++)qa[e]._workInProgressVersionPrimary=null;qa.length=0}var Ya=E.ReactCurrentDispatcher,Ka=E.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Li:Ni,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=ji,e=n(r,o)}while(ri)}if(Ya.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,Ja.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,qa.push(t))),e)return n(t._source);throw qa.push(t),Error(i(350))}function pi(e,t,n,r){var o=Nl;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Ya.current,u=s.useState((function(){return fi(o,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=Ja;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=fi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function hi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},li().memoizedState=e}function bi(){return si().memoizedState}function vi(e,t,n,r){var o=li();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=si();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Ei(e,t){return vi(516,4,e,t)}function Si(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Wo();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ii(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,ur(s,l))return}catch(u){}ms(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,vi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:yi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Ei((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return yi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if(Ua){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Gr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Gr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:ci,useRef:bi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},ji={readContext:ia,useCallback:Pi,useContext:ia,useEffect:Si,useImperativeHandle:xi,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:bi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return Si((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Ri=E.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Zs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Qs(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Vs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Hi(e,t,n,r,a)}function Ui(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},Ss(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Ss(t,e),null;t.memoizedState={baseLanes:0},Ss(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ss(t,r);return Mi(e,t,o,n),t.child}function $i(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,o){var a=yo(n)?ho:po.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function Wi(e,t,n,r,o){if(yo(n)){var a=!0;Eo(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),va(t,n,r),Ea(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=yo(n)?ho:po.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wa(t,i,r,u),la=!1;var f=t.memoizedState;i.state=f,pa(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||la?("function"==typeof c&&(ga(t,n,c,r),s=t.memoizedState),(l=la||ba(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=ia(s):s=go(t,s=yo(n)?ho:po.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wa(t,i,r,s),la=!1,f=t.memoizedState,i.state=f,pa(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||mo.current||la?("function"==typeof p&&(ga(t,n,p,r),m=t.memoizedState),(u=la||ba(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Zi(e,t,n,r,a,o)}function Zi(e,t,n,r,o,a){$i(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&So(t,n,!1),al(e,t,a);r=t.stateNode,Ri.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,l,a)):Mi(e,t,l,a),t.memoizedState=r.state,o&&So(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),Na(e,t.containerInfo)}var Qi,qi,Gi,Yi,Ki={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Wa(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Ki,t.lanes=33554432,e):((n=Gs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Ki,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Gs(t,o,0,null),n=qs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Vs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vs(i,l),null!==e?r=Vs(e,r):(r=qs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Ua)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&bo(),null;case 3:return ja(),uo(mo),uo(po),Ga(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Da(t);var a=La(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=La(Ta.current),Va(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Xr]=l,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,l),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Tr("invalid",r);break;case"textarea":se(r,l),Tr("invalid",r)}for(var u in ke(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Xr]=r,Qi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Tr("invalid",e);break;default:a=r}ke(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ye(e,d):"number"==typeof d&&ye(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Tr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}$r(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=La(Aa.current),La(Ta.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Nl||0==(134217727&Ul)&&0==(134217727&$l)||bs(Nl,Rl))),(r||n)&&(t.flags|=4),null);case 4:return ja(),qi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>Vl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Fa(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Ua)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>Vl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Ma.current,co(Ma,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:yo(e.type)&&bo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(ja(),uo(mo),uo(po),Ga(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return ja(),null;case 10:return ra(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Qi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Gi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,La(Ta.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Kl=r),cl(0,t)},n}function pl(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function yl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&$r(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function bl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function vl(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:hl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function Sl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):_l(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function _l(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(vl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(vl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Ol(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ge(n,s):"children"===l?ye(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Zl=Ho(),bl(t.child,!0)),void Pl(t);case 19:return void Pl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=$s.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Tl=Math.ceil,Il=E.ReactCurrentDispatcher,Al=E.ReactCurrentOwner,Ll=0,Nl=null,jl=null,Rl=0,Dl=0,Ml=so(0),Fl=0,Bl=null,zl=0,Ul=0,$l=0,Hl=0,Wl=null,Zl=0,Vl=1/0;function Ql(){Vl=Ho()+500}var ql,Gl=null,Yl=!1,Kl=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Ll)?Ho():-1!==ls?ls:ls=Ho()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Wo()?1:2;if(0===ss&&(ss=zl),0!==Yo.transition){0!==us&&(us=null!==Wl?Wl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Wo(),0!=(4&Ll)&&98===e?e=Bt(12,ss):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;$t(e,t,n),e===Nl&&($l|=t,4===Fl&&bs(e,Rl));var r=Wo();1===t?0!=(8&Ll)&&0==(48&Ll)?vs(e):(gs(e,n),0===Ll&&(Ql(),qo())):(0==(4&Ll)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Wl=e}function hs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=Rt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Mt(e,e===Nl?Rl:0),t=Rt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=vs.bind(null,e),null===Bo?(Bo=[n],zo=Oo(Lo,Go)):Bo.push(n),n=Mo):14===t?n=Qo(99,vs.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Qo(n,ys.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function ys(e){if(ls=-1,us=ss=0,0!=(48&Ll))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Mt(e,e===Nl?Rl:0);if(0===n)return null;var r=n,o=Ll;Ll|=16;var a=Os();for(Nl===e&&Rl===r||(Ql(),_s(e,r));;)try{Ts();break}catch(s){xs(e,s)}if(na(),Il.current=a,Ll=o,null!==jl?r=0:(Nl=null,Rl=0,r=Fl),0!=(zl&$l))_s(e,0);else if(0!==r){if(2===r&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ft(e))&&(r=Ps(e,n))),1===r)throw t=Bl,_s(e,0),bs(e,n),gs(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ls(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=Zl+500-Ho())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Wr(Ls.bind(null,e),r);break}Ls(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Ht(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Tl(n/1960))-n)){e.timeoutHandle=Wr(Ls.bind(null,e),n);break}Ls(e);break;default:throw Error(i(329))}}return gs(e,Ho()),e.callbackNode===t?ys.bind(null,e):null}function bs(e,t){for(t&=~Hl,t&=~$l,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function vs(e){if(0!=(48&Ll))throw Error(i(327));if(Rs(),e===Nl&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ps(e,t);0!=(zl&$l)&&(n=Ps(e,t=Mt(e,t)))}else n=Ps(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Ll|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ft(e))&&(n=Ps(e,t))),1===n)throw n=Bl,_s(e,0),bs(e,t),gs(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ls(e),gs(e,Ho()),null}function ws(e,t){var n=Ll;Ll|=1;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Es(e,t){var n=Ll;Ll&=-2,Ll|=8;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}}function Ss(e,t){co(Ml,Dl),Dl|=t,zl|=t}function ks(){Dl=Ml.current,uo(Ml)}function _s(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Zr(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&bo();break;case 3:ja(),uo(mo),uo(po),Ga();break;case 5:Da(r);break;case 4:ja();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:ks()}n=n.return}Nl=e,jl=Vs(e.current,null),Rl=Dl=zl=t,Fl=0,Bl=null,Hl=$l=Ul=0}function xs(e,t){for(;;){var n=jl;try{if(na(),Ya.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,Al.current=null,null===n||null===n.return){Fl=1,Bl=t,jl=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Ma.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var y=new Set;y.add(u),f.updateQueue=y}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=ca(-1,1);b.tag=2,da(l,b)}l.lanes|=1;break e}s=void 0,l=t;var v=a.pingCache;if(null===v?(v=a.pingCache=new dl,s=new Set,v.set(u,s)):void 0===(s=v.get(u))&&(s=new Set,v.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((Q(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,fa(f,fl(0,a,t));break e;case 1:a=s;var E=f.type,S=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==S&&"function"==typeof S.componentDidCatch&&(null===Xl||!Xl.has(S)))){f.flags|=4096,t&=-t,f.lanes|=t,fa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}As(n)}catch(k){t=k,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function Os(){var e=Il.current;return Il.current=Ai,null===e?Ai:e}function Ps(e,t){var n=Ll;Ll|=16;var r=Os();for(Nl===e&&Rl===t||_s(e,t);;)try{Cs();break}catch(o){xs(e,o)}if(na(),Ll=n,Il.current=r,null!==jl)throw Error(i(261));return Nl=null,Rl=0,Fl}function Cs(){for(;null!==jl;)Is(jl)}function Ts(){for(;null!==jl&&!Co();)Is(jl)}function Is(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?As(e):jl=t,Al.current=null}function As(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(jl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(jl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ls(e){var t=Wo();return Vo(99,Ns.bind(null,e,t)),null}function Ns(e,t){do{Rs()}while(null!==es);if(0!=(48&Ll))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Ht(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Nl&&(jl=Nl=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ll,Ll|=32,Al.current=null,zr=qt,gr(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(O){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,y=null;t:for(;;){for(var b;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)y=g,g=b;for(;;){if(g===l)break t;if(y===s&&++m===a&&(f=d),y===u&&++h===c&&(p=d),null!==(b=g.nextSibling))break;y=(g=y).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Gl=r;do{try{js()}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);cs=null,Gl=r;do{try{for(l=e;null!==Gl;){var v=Gl.flags;if(16&v&&ye(Gl.stateNode,""),128&v){var w=Gl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&v){case 2:Sl(Gl),Gl.flags&=-3;break;case 6:Sl(Gl),Gl.flags&=-3,Ol(Gl.alternate,Gl);break;case 1024:Gl.flags&=-1025;break;case 1028:Gl.flags&=-1025,Ol(Gl.alternate,Gl);break;case 4:Ol(Gl.alternate,Gl);break;case 8:xl(l,s=Gl);var S=s.alternate;wl(s),null!==S&&wl(S)}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);if(E=Ur,w=hr(),v=E.focusedElem,l=E.selectionRange,w!==v&&v&&v.ownerDocument&&mr(v.ownerDocument.documentElement,v)){null!==l&&gr(v)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in v?(v.selectionStart=w,v.selectionEnd=Math.min(E,v.value.length)):(E=(w=v.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=v.textContent.length,S=Math.min(l.start,s),l=void 0===l.end?S:Math.min(l.end,s),!E.extend&&S>l&&(s=l,l=S,S=s),s=pr(v,S),a=pr(v,l),s&&a&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==a.node||E.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),S>l?(E.addRange(w),E.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),E.addRange(w))))),w=[];for(E=v;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof v.focus&&v.focus(),v=0;v<w.length;v++)(E=w[v]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,Ur=zr=null,e.current=n,Gl=r;do{try{for(v=e;null!==Gl;){var k=Gl.flags;if(36&k&&yl(v,Gl.alternate,Gl),128&k){w=void 0;var _=Gl.ref;if(null!==_){var x=Gl.stateNode;Gl.tag,w=x,"function"==typeof _?_(w):_.current=w}}Gl=Gl.nextEffect}}catch(O){if(null===Gl)throw Error(i(330));zs(Gl,O),Gl=Gl.nextEffect}}while(null!==Gl);Gl=null,Fo(),Ll=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Gl=r;null!==Gl;)t=Gl.nextEffect,Gl.nextEffect=null,8&Gl.flags&&((k=Gl).sibling=null,k.stateNode=null),Gl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(O){}if(gs(e,Ho()),Yl)throw Yl=!1,e=Kl,Kl=null,e;return 0!=(8&Ll)||qo(),null}function js(){for(;null!==Gl;){var e=Gl.alternate;ds||null===cs||(0!=(8&Gl.flags)?Je(Gl,cs)&&(ds=!0):13===Gl.tag&&Cl(e,Gl)&&Je(Gl,cs)&&(ds=!0));var t=Gl.flags;0!=(256&t)&&gl(e,Gl),0==(512&t)||Jl||(Jl=!0,Qo(97,(function(){return Rs(),null}))),Gl=Gl.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Vo(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Qo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Ll))throw Error(i(331));var t=Ll;Ll|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Ll=t,qo(),!0}function Bs(e,t,n){da(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&($t(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var o=pl(n,e=ul(t,e),1);if(da(n,o),o=fs(),null!==(n=hs(n,1)))$t(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Nl===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Ho()-Zl?_s(e,0):Hl|=n),gs(e,t)}function $s(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Wo()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&($t(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Ws(e,t,n,r){return new Hs(e,t,n,r)}function Zs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vs(e,t){var n=e.alternate;return null===n?((n=Ws(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Qs(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)Zs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case _:return qs(n.children,o,a,t);case D:l=8,o|=16;break;case x:l=8,o|=1;break;case O:return(e=Ws(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Ws(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Ws(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Gs(n,o,a,t);case F:return(e=Ws(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:l=10;break e;case C:l=9;break e;case T:l=11;break e;case L:l=14;break e;case N:l=16,r=null;break e;case j:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Ws(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function qs(e,t,n,r){return(e=Ws(7,e,r,t)).lanes=n,e}function Gs(e,t,n,r){return(e=Ws(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Ws(6,e,null,t)).lanes=n,e}function Ks(e,t,n){return(t=Ws(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(yo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(yo(u)){n=wo(n,u,s);break e}}n=s}else n=fo;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ms(o,l,a),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Ws(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,sa(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Js(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Qa();break;case 5:Ra(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:Na(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=al(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return al(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,po.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var a=!0;Eo(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,sa(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ga(t,r,l,e),o.updater=ya,t.stateNode=o,o._reactInternals=t,Ea(t,r,e,n),t=Zi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Zs(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===L)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Hi(null,t,o,e,n);break e;case 1:t=Wi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,Wi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),pa(t,r,null,n),(r=t.memoizedState.element)===o)Qa(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Qr(t.stateNode.containerInfo.firstChild),Ba=t,a=Ua=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],qa.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Qa();t=t.child}return t;case 5:return Ra(t),null===e&&Wa(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Hr(r,o)?l=null:null!==a&&Hr(r,a)&&(t.flags|=16),$i(e,t),Mi(e,t,l,n),t.child;case 6:return null===e&&Wa(t),null;case 13:return Xi(e,t,n);case 4:return Na(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(co(Xo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=ur(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=ca(-1,n&-n)).tag=2,da(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),oa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),Bi(e,t,o,a=Ko(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,aa(t,n),va(t,r,o),Ea(t,r,o,n),Zi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));K(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Le=ws,Ne=function(e,t,n,r,o){var a=Ll;Ll|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Ll=a)&&(Ql(),qo())}},je=function(){0==(49&Ll)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Ho())}))}qo()}(),Rs())},Re=function(e,t){var n=Ll;Ll|=2;try{return e(t)}finally{0===(Ll=n)&&(Ql(),qo())}};var lu={Events:[no,ro,oo,Ie,Ae,Rs,{current:!1}]},su={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ko=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Z,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},x=function(e){return k(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+j(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+j(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,y),i=A(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),W="undefined"!=typeof document,Z=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Z.canUseDOM=W,Z.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Z.defaultProps={context:{}},Z.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;Q(g.BODY,e.bodyAttributes),Q(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),Q(g.TITLE,t)}(c,d);var f={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,s),styleTags:V(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});Z.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,K),l=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return S(e)||E(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===g},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===v||e.$$typeof===w||e.$$typeof===y)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){y(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){y(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=a.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,y=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||y:h.innerRef=y,a.createElement(o,h)}))})),y=function(e){return e},b=a.forwardRef;void 0===b&&(b=y);var v=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,E=e.sensitive,S=e.strict,k=e.style,_=e.to,x=e.innerRef,O=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(_,n),n),s=i.pathname,P=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:E,strict:S}):null,T=!!(v?v(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof k?k(T):k;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,l.Z)({},A,p));var L=(0,l.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return y!==b?L.ref=t||x:L.innerRef=x,a.createElement(g,L)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>v,LX:()=>k,TH:()=>N,k6:()=>L,rs:()=>I,s6:()=>b});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},y=g("Router-History"),b=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(b.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},E=1e4,S=0;function k(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<E&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?k(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(b.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,l.Ep)(e)}function C(e){return function(){(0,s.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?k(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function L(){return A(y)}function N(){return A(b).location}},6585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},9658:(e,t,n)=>{var r=n(6585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=h&&null!=m&&m!==h,S="+"===v||"*"===v,k="?"===v||"*"===v,_=n[2]||c,x=y||b;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:k,repeat:S,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var v=b.prototype=new y;v.constructor=b,r(v,g.prototype),v.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!S.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+O(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(l=e[u],u);s+=P(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,n,c=r+O(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(p(321));return e}var L={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=L,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!S.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,y=-1,b=5,v=0;t.unstable_shouldYield=function(){return t.unstable_now()>=v},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();v=e+b;try{g(!0,e)?E.postMessage(null):(h=!1,g=null)}catch(n){throw E.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,E.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){p(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,L=!1,N=!1;function j(e){for(var t=k(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,S(O,t)}t=k(P)}}function R(e){if(N=!1,j(e),!L)if(null!==k(O))L=!0,n(D);else{var t=k(P);null!==t&&r(R,t.startTime-e)}}function D(e,n){L=!1,N&&(N=!1,o()),A=!0;var a=I;try{for(j(n),T=k(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var l=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?T.callback=l:T===k(O)&&_(O),j(n)}else _(O);T=k(O)}if(null!==T)var s=!0;else{var u=k(P);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){L||A||(L=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return k(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,S(P,e),null===k(O)&&e===k(P)&&(N?o():N=!0,r(R,i-l))):(e.sortIndex=s,S(O,e),L||A||(L=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Creating an intelligent reality with AI",tagline:"Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It's like a complex system and emerges digital intelligence.",url:"https://realityworld.com",baseUrl:"/zh/",onBrokenLinks:"ignore",onBrokenMarkdownLinks:"ignore",favicon:"img/logo/reality-world.svg",organizationName:"cogine",projectName:"cogine.github.io",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en","zh"],path:"i18n",localeConfigs:{}},scripts:[],themeConfig:{prism:{theme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["php"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".markdown :not(em) > img",config:{background:{light:"rgb(255, 255, 255)",dark:"rgb(50, 50, 50)"}}},announcementBar:{id:"announcement-bar",content:'<a target="_blank" rel="nofollow noopener noreferrer" href="https://github.com/Cogine/RealityWorld">\u2b50 We are going open source on GitHub</a>',isCloseable:!1},image:"img/website-preview-image.png",colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},navbar:{title:"Reality World",logo:{alt:"Reality World",width:"32px",height:"32px",src:"img/logo/reality-world.svg",srcDark:"img/logo/reality-world.svg"},items:[{label:"\u4ea7\u54c1",type:"dropdown",items:[{to:"/cogine",label:"Cogine"},{to:"/reality-create",label:"Reality Create"},{to:"/app",label:"Reality World"},{to:"/self-deploying",label:"\u81ea\u6211\u90e8\u7f72"}],position:"left"},{label:"\u5f00\u53d1\u8005",type:"dropdown",items:[{to:"/whitepaper",label:"\u767d\u76ae\u4e66"},{to:"/docs/intro",label:"\u6280\u672f\u6587\u6863"},{to:"/thinking",label:"\u601d\u8003\u8fc7\u7a0b"}],position:"left"},{to:"/blog",label:"\u535a\u5ba2",position:"left"},{to:"/features",label:"\u7279\u6027 & \u6bd4\u8f83",position:"left"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{label:"\u793e\u533a",type:"dropdown",position:"right",items:[{to:"/community/about-open-source",label:"\u5173\u4e8e\u5f00\u6e90"},{to:"/community/about-reality-world",label:"\u5173\u4e8e Reality World"},{to:"/community/roadmap",label:"\u8def\u7ebf\u56fe"},{to:"/community/contact",label:"\u8054\u7cfb"},{to:"/community/questions",label:"\u5e38\u89c1\u95ee\u9898"}]},{href:"https://github.com/Cogine/RealityWorld",position:"right",className:"header-github-link"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Cogine",items:[{label:"Introduction",href:"/docs/introduction"},{label:"Architecture philosophy",href:"/philosophy"},{label:"Questions",href:"/community/questions"}]},{title:"Social",items:[{html:'\n <span>Wechat \u5f00\u6e90\u793e\u533a\u7fa4:</span><br/>\n <img src="/img/home/wechat.jpg" alt="Reality World\u5f00\u6e90\u793e\u533a\u7fa4" width="150" height="150" />\n <br/><span>\u8fc7\u671f\u8bf7\u52a0\uff1aARealityWorld</span>\n '}]},{title:"Community",items:[{label:"Github",href:"https://github.com/Cogine/RealityWorld"},{label:"License",href:"/"}]},{title:"About",items:[{label:"Reality World",href:"/commnuity/about-reality-world"},{label:"Contact",href:"/community/contact"}]}],copyright:"2023 \xa9 Reality World."},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/home/runner/work/cogine.github.io/cogine.github.io/sidebars.js"},blog:{blogTitle:"Blog",blogDescription:"The Reality World blog is where our team shares our thoughts and ideas about everything from our products to industry news and insights. We also welcome guest posts so please do get in touch if you have any thoughts you would like to share on our blog.",showReadingTime:!0,feedOptions:{type:"all",copyright:"2023 \xa9 Reality World."},blogSidebarTitle:"Recent posts",blogSidebarCount:5,postsPerPage:"ALL"},theme:{customCss:"/home/runner/work/cogine.github.io/cogine.github.io/src/css/custom.css"}}]],plugins:[["content-docs",{id:"community",path:"community",routeBasePath:"community",sidebarPath:"/home/runner/work/cogine.github.io/cogine.github.io/sidebarsCommunity.js"}],["@cmfcmf/docusaurus-search-local",{}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"theme.AnnouncementBar.closeButtonAriaLabel":"\u5173\u95ed","theme.BackToTopButton.buttonAriaLabel":"\u56de\u5230\u9876\u90e8","theme.CodeBlock.copied":"\u590d\u5236\u6210\u529f","theme.CodeBlock.copy":"\u590d\u5236","theme.CodeBlock.copyButtonAriaLabel":"\u590d\u5236\u4ee3\u7801\u5230\u526a\u8d34\u677f","theme.CodeBlock.wordWrapToggle":"\u5207\u6362\u81ea\u52a8\u6362\u884c","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"\u6253\u5f00/\u6536\u8d77\u4fa7\u8fb9\u680f\u83dc\u5355\u300c{label}\u300d","theme.ErrorPageContent.title":"\u9875\u9762\u5df2\u5d29\u6e83\u3002","theme.ErrorPageContent.tryAgain":"\u91cd\u8bd5","theme.NavBar.navAriaLabel":"\u4e3b\u5bfc\u822a","theme.NotFound.p1":"\u6211\u4eec\u627e\u4e0d\u5230\u60a8\u8981\u627e\u7684\u9875\u9762\u3002","theme.NotFound.p2":"\u8bf7\u8054\u7cfb\u539f\u59cb\u94fe\u63a5\u6765\u6e90\u7f51\u7ad9\u7684\u6240\u6709\u8005\uff0c\u5e76\u544a\u77e5\u4ed6\u4eec\u94fe\u63a5\u5df2\u635f\u574f\u3002","theme.NotFound.title":"\u627e\u4e0d\u5230\u9875\u9762","theme.TOCCollapsible.toggleButtonLabel":"\u672c\u9875\u603b\u89c8","theme.admonition.caution":"\u8b66\u544a","theme.admonition.danger":"\u5371\u9669","theme.admonition.info":"\u4fe1\u606f","theme.admonition.note":"\u5907\u6ce8","theme.admonition.tip":"\u63d0\u793a","theme.blog.archive.description":"\u5386\u53f2\u535a\u6587","theme.blog.archive.title":"\u5386\u53f2\u535a\u6587","theme.blog.paginator.navAriaLabel":"\u535a\u6587\u5217\u8868\u5206\u9875\u5bfc\u822a","theme.blog.paginator.newerEntries":"\u8f83\u65b0\u7684\u535a\u6587","theme.blog.paginator.olderEntries":"\u8f83\u65e7\u7684\u535a\u6587","theme.blog.post.paginator.navAriaLabel":"\u535a\u6587\u5206\u9875\u5bfc\u822a","theme.blog.post.paginator.newerPost":"\u8f83\u65b0\u4e00\u7bc7","theme.blog.post.paginator.olderPost":"\u8f83\u65e7\u4e00\u7bc7","theme.blog.post.plurals":"{count} \u7bc7\u535a\u6587","theme.blog.post.readMore":"\u9605\u8bfb\u66f4\u591a","theme.blog.post.readMoreLabel":"\u9605\u8bfb {title} \u7684\u5168\u6587","theme.blog.post.readingTime.plurals":"\u9605\u8bfb\u9700 {readingTime} \u5206\u949f","theme.blog.sidebar.navAriaLabel":"\u6700\u8fd1\u535a\u6587\u5bfc\u822a","theme.blog.tagTitle":"{nPosts} \u542b\u6709\u6807\u7b7e\u300c{tagName}\u300d","theme.colorToggle.ariaLabel":"\u5207\u6362\u6d45\u8272/\u6697\u9ed1\u6a21\u5f0f\uff08\u5f53\u524d\u4e3a{mode}\uff09","theme.colorToggle.ariaLabel.mode.dark":"\u6697\u9ed1\u6a21\u5f0f","theme.colorToggle.ariaLabel.mode.light":"\u6d45\u8272\u6a21\u5f0f","theme.common.editThisPage":"\u7f16\u8f91\u6b64\u9875","theme.common.headingLinkTitle":"{heading}\u7684\u76f4\u63a5\u94fe\u63a5","theme.common.skipToMainContent":"\u8df3\u5230\u4e3b\u8981\u5185\u5bb9","theme.docs.DocCard.categoryDescription":"{count} \u4e2a\u9879\u76ee","theme.docs.breadcrumbs.home":"\u4e3b\u9875\u9762","theme.docs.breadcrumbs.navAriaLabel":"\u9875\u9762\u8def\u5f84","theme.docs.paginator.navAriaLabel":"\u6587\u4ef6\u9009\u9879\u5361","theme.docs.paginator.next":"\u4e0b\u4e00\u9875","theme.docs.paginator.previous":"\u4e0a\u4e00\u9875","theme.docs.sidebar.closeSidebarButtonAriaLabel":"\u5173\u95ed\u5bfc\u822a\u680f","theme.docs.sidebar.collapseButtonAriaLabel":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.collapseButtonTitle":"\u6536\u8d77\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonAriaLabel":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.expandButtonTitle":"\u5c55\u5f00\u4fa7\u8fb9\u680f","theme.docs.sidebar.navAriaLabel":"\u6587\u6863\u4fa7\u8fb9\u680f","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"\u5207\u6362\u5bfc\u822a\u680f","theme.docs.tagDocListPageTitle":"{nDocsTagged}\u300c{tagName}\u300d","theme.docs.tagDocListPageTitle.nDocsTagged":"{count} \u7bc7\u6587\u6863\u5e26\u6709\u6807\u7b7e","theme.docs.versionBadge.label":"\u7248\u672c\uff1a{versionLabel}","theme.docs.versions.latestVersionLinkLabel":"\u6700\u65b0\u7248\u672c","theme.docs.versions.latestVersionSuggestionLabel":"\u6700\u65b0\u7684\u6587\u6863\u8bf7\u53c2\u9605 {latestVersionLink} ({versionLabel})\u3002","theme.docs.versions.unmaintainedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u7684\u6587\u6863\uff0c\u73b0\u5df2\u4e0d\u518d\u79ef\u6781\u7ef4\u62a4\u3002","theme.docs.versions.unreleasedVersionLabel":"\u6b64\u4e3a {siteTitle} {versionLabel} \u7248\u5c1a\u672a\u53d1\u884c\u7684\u6587\u6863\u3002","theme.lastUpdated.atDate":"\u4e8e {date} ","theme.lastUpdated.byUser":"\u7531 {user} ","theme.lastUpdated.lastUpdatedAtBy":"\u6700\u540e{byUser}{atDate}\u66f4\u65b0","theme.navbar.mobileLanguageDropdown.label":"\u9009\u62e9\u8bed\u8a00","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 \u56de\u5230\u4e3b\u83dc\u5355","theme.navbar.mobileVersionsDropdown.label":"\u9009\u62e9\u7248\u672c","theme.tags.tagsListLabel":"\u6807\u7b7e\uff1a","theme.tags.tagsPageLink":"\u67e5\u770b\u6240\u6709\u6807\u7b7e","theme.tags.tagsPageTitle":"\u6807\u7b7e","cmfcmf/d-s-l.searchBar.placeholder":"\u641c\u7d22...","cmfcmf/d-s-l.searchBar.noResults":"\u65e0\u641c\u7d22\u7ed3\u679c","cmfcmf/d-s-l.searchBar.clearButtonTitle":"\u6e05\u9664","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"\u53d6\u6d88","cmfcmf/d-s-l.searchBar.submitButtonTitle":"\u641c\u7d22","Whitepaper":"\u767d\u76ae\u4e66","Read More":"\u9605\u8bfb\u66f4\u591a","Reality World is a multi-agent platform built with interoperability as its core, in which a dynamic agent or program can be added and interoperated with all other agents. It\'s like a complex system and emerges digital intelligence.":"Reality World\u662f\u4e00\u4e2a\u591a\u7a0b\u5e8f\uff08\u5982\u591a\u667a\u80fd\u4f53\uff09\u52a8\u6001\u8fd0\u884c\u7684\u5e73\u53f0\u548c\u6a21\u62df\u5668\uff0c \u5b83\u7684\u6838\u5fc3\u662f\u89e3\u51b3\u8fd9\u4e9b\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u7684\u7a0b\u5e8f\u4e4b\u95f4\u7684\u4e92\u64cd\u4f5c\u3001\u5b89\u5168\u548c\u8c03\u5ea6\u3002\u5b83\u50cf\u590d\u6742\u7cfb\u7edf\u4e00\u6837\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u9009\u62e9\u4e0d\u540c\u7684\u7a0b\u5e8f\u7ec4\u5408\uff0c\u4f7f\u5f97\u6574\u4f53\u7a0b\u5e8f\u76f8\u6bd4\u4f20\u7edf\u7a0b\u5e8f\u80fd\u591f\u6d8c\u73b0\u51fa\u6570\u5b57\u667a\u80fd\u3002","Get Started":"\u5f00\u59cb\u5165\u95e8","Let everyone can write AI agent":"\u8ba9\u6bcf\u4e2a\u4eba\u90fd\u53ef\u4ee5\u7f16\u5199AI\u667a\u80fd\u4f53\u7a0b\u5e8f","Programming is not easy, but the hardest part is not the programming language itself, its the program structure organizing. We build a high level logic-abstraction to hide the structure and let developer focused on logic only.":"\u7f16\u5199\u7a0b\u5e8f\u5e76\u4e0d\u7b80\u5355\uff0c\u4f46\u662f\u5176\u4e2d\u6700\u96be\u7684\u90e8\u5206\u5e76\u4e0d\u662f\u7f16\u7a0b\u8bed\u8a00\u672c\u8eab\uff0c\u800c\u662f\u5173\u4e8e\u5927\u89c4\u6a21\u7a0b\u5e8f\u600e\u6837\u7ec4\u7ec7\u7684\u65b9\u6cd5\uff0c\u4e5f\u5373\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u901a\u8fc7\u5efa\u7acb\u4e00\u4e2a\u66f4\u9ad8\u5c42\u6b21\u7684\u903b\u8f91\u62bd\u8c61\u5c42\u6765\u9690\u85cf\u8fd9\u79cd\u7a0b\u5e8f\u7ed3\u6784\u6027\uff0c\u4f7f\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5c06\u6ce8\u610f\u529b\u653e\u5230\u4e1a\u52a1\u6d41\u7a0b\u4e0a\u3002","Most visual graph editting is just a visual wrapper of the original codes. We build a graph interaction which is as simple as Houdini and as powerful as any turning completed programming language.":"\u5927\u90e8\u5206\u57fa\u4e8eGraph\u7684\u53ef\u89c6\u7a0b\u5e8f\u7f16\u8f91\u53ea\u662f\u5bf9\u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801\u7684\u4e00\u79cd\u53ef\u89c6\u5316\uff0c\u8fd9\u610f\u5473\u7740\u5f00\u53d1\u8005\u4ecd\u7136\u9700\u8981\u5173\u6ce8\u7ed3\u6784\u6027\uff0c\u57fa\u4e8e\u6211\u4eec\u8c03\u6574\u7684\u7a0b\u5e8f\u7ed3\u6784\uff0c\u6211\u4eec\u6784\u5efa\u51fa\u4e00\u79cd\u50cfHoudini\u4e00\u6837\u7b80\u5355\u7684\u53ef\u89c6\u903b\u8f91\u7f16\u8f91\u4ea4\u4e92\uff0c\u540c\u65f6\u53c8\u548c\u5176\u5b83\u4efb\u4f55\u56fe\u7075\u5b8c\u5907\u7684\u7f16\u7a0b\u8bed\u8a00\u4e00\u6837\u5177\u6709\u7075\u6d3b\u7684\u8868\u8fbe\u80fd\u529b\u3002","An agent VM, platform and simulator":"\u4e00\u4e2a\u5b50\u7a0b\u5e8f\u7684\u865a\u62df\u673a\u3001\u5e73\u53f0\u548c\u6a21\u62df\u5668","We then build a platform with a virtual machine to interpret and execute the above agent format program dynamically. By this dynamical capability, developer can create and share agent with users as simple as share a url.":"\u57fa\u4e8e\u8fd9\u79cd\u6807\u51c6\u683c\u5f0f\uff0c\u6211\u4eec\u5f00\u53d1\u4e86\u4e00\u4e2a\u865a\u62df\u673a\u7528\u4e8e\u52a8\u6001\u89e3\u91ca\u548c\u6267\u884c\u8fd9\u79cd\u7a0b\u5e8f\uff0c\u8fd9\u79cd\u52a8\u6001\u6027\u4f7f\u5f97\u4efb\u4f55\u4e2a\u4eba\u90fd\u53ef\u4ee5\u5f00\u53d1\u548c\u5206\u4eab\u81ea\u5df1\u7684\u4e2a\u6027\u5316\u7a0b\u5e8f\uff0c\u5c31\u50cf\u5206\u4eab\u4e00\u4e2aURL\u90a3\u4e48\u7b80\u5355\uff0c\u8fd9\u5c06\u5927\u5927\u7b80\u5316\u7a0b\u5e8f\u7684\u521b\u5efa\u548c\u53d1\u5e03\u6d41\u7a0b\u3002","Multi-agent conversational collaborating framework":"\u591a\u7a0b\u5e8f\u5bf9\u8bdd\u5f0f\u534f\u4f5c\u6846\u67b6","Agents can commnuicating with user, system and other agents in a very simple way which provides the ability to finish a task in a collaberating way.":"\u4efb\u4f55\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u4ee5\u975e\u5e38\u7b80\u5355\u7684\u65b9\u5f0f\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u548c\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u901a\u4fe1\uff0c\u8fd9\u63d0\u4f9b\u4e00\u79cd\u80fd\u529b\u901a\u8fc7\u4f7f\u5f97\u7a0b\u5e8f\u4e4b\u95f4\u901a\u8fc7\u534f\u4f5c\u7684\u65b9\u5f0f\u6765\u5b8c\u6210\u590d\u6742\u7684\u4efb\u52a1\u3002","In a LLM-powered application, the inputs of a function is semantic instead of structured data, which brings uncertainty and needs conversational way to get more information. For solve this problem, we propose a new concept and a novel architecture called \\"Conversational computing\\" for the first time in the world, to make any function can be paused and conversational commnuicating with user, system and other agents to get full information it needs without extra works.":"\u57fa\u4e8e\u5927\u6a21\u578b\uff08LLM\uff09\u7684\u5e94\u7528\uff0c\u4e00\u4e2a\u51fd\u6570\u7684\u8f93\u5165\u662f\u8bed\u4e49\u5316\u7684\u6587\u672c\u800c\u4e0d\u662f\u7ed3\u6784\u5316\u7684\u6570\u636e\uff0c\u8fd9\u7ed9\u7a0b\u5e8f\u5e26\u6765\u4e86\u5f88\u591a\u4e0d\u786e\u5b9a\u6027\uff0c\u8fd9\u9700\u8981\u901a\u8fc7\u591a\u8f6e\u5bf9\u8bdd\u6765\u6f84\u6e05\u66f4\u591a\u4fe1\u606f\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u9996\u6b21\u63d0\u51fa\u4e00\u79cd\u79f0\u4e3a\u5bf9\u8bdd\u5f0f\u8ba1\u7b97\uff08Conversational Computing\uff09\u7684\u6982\u5ff5\u548c\u6280\u672f\uff0c\u4f7f\u5f97\u4efb\u4f55\u51fd\u6570\u90fd\u53ef\u4ee5\u4efb\u610f\u88ab\u6682\u505c\u4ee5\u4e0e\u7528\u6237\u3001\u7cfb\u7edf\u6216\u8005\u5176\u5b83\u5fae\u7a0b\u5e8f\u8fdb\u884c\u5bf9\u8bdd\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u5e76\u5728\u6761\u4ef6\u6ee1\u8db3\u4e4b\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u6574\u4e2a\u8fc7\u7a0b\u5c31\u50cf\u7f16\u5199\u4f20\u7edf\u4e32\u884c\u7a0b\u5e8f\u4e00\u6837\u7b80\u5355\uff0c\u4e0d\u9700\u8981\u505a\u4e00\u4e9b\u989d\u5916\u7e41\u7410\u7684\u5de5\u4f5c\u3002","An engine of complexity to emerge intelligence":"\u57fa\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u6784\u5efa\u7684\u590d\u6742\u5f15\u64ce","In biology or social economic syetm, many agreements have come to that the intelligence of the system come from the emergence mechanism of the complex system theory.":"\u5728\u751f\u7269\u548c\u793e\u4f1a\u7ecf\u6d4e\u7cfb\u7edf\u4e2d\uff0c\u4eba\u4eec\u666e\u904d\u7684\u5171\u8bc6\u662f\u6574\u4e2a\u7cfb\u7edf\u7684\u667a\u80fd\u6765\u6e90\u4e8e\u590d\u6742\u7cfb\u7edf\u7406\u8bba\u4e2d\u7684\u6d8c\u73b0\u673a\u5236\uff0c\u8fd9\u79cd\u6d8c\u73b0\u673a\u5236\u901a\u8fc7\u72ec\u7acb\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5c40\u90e8\u534f\u4f5c\u3001\u590d\u5236\u53d8\u5f02\u4ee5\u53ca\u9009\u62e9\u6765\u5b9e\u73b0\u3002","In computer science and engineering, applications are isolated each other for data security and some other business reasons. The lack of interoperability make the applications non-cooperative and hence none-intelligent. We re-organized the structure and execution of software contruction process to provide a interopability-native architecture to form an engine of complexity.":"\u5728\u8ba1\u7b97\u673a\u79d1\u5b66\u548c\u5de5\u7a0b\u4e2d\uff0c\u5e94\u7528\u4e4b\u95f4\u901a\u5e38\u662f\u76f8\u4e92\u9694\u79bb\u4ee5\u4fdd\u8bc1\u6570\u636e\u5b89\u5168\uff0c\u8fd9\u79cd\u4e92\u64cd\u4f5c\u80fd\u529b\u7684\u7f3a\u5931\u4f7f\u5f97\u5e94\u7528\u4e4b\u95f4\u4ee5\u975e\u534f\u4f5c\u7684\u65b9\u5f0f\u8fd0\u884c\uff0c\u4ece\u800c\u7f3a\u4e4f\u667a\u80fd\u3002\u6211\u4eec\u901a\u8fc7\u5bf9\u7a0b\u5e8f\u7684\u7ed3\u6784\u548c\u8fd0\u884c\u8fc7\u7a0b\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\u4ee5\u63d0\u4f9b\u4e00\u4e2a\u539f\u751f\u4e92\u64cd\u4f5c\u7684\u8ba1\u7b97\u67b6\u6784\uff0c\u4f7f\u6574\u4e2a\u7cfb\u7edf\u50cf\u4e00\u4e2a\u590d\u6742\u5f15\u64ce\u3002","Conversational":"\u5bf9\u8bdd\u5f0f\u8ba1\u7b97","Code can talk to user, system or other agents to ask more information at any function location, the agent will be paused and continue to run when got response.":"\u6bcf\u4e2a\u51fd\u6570\u53ef\u4ee5\u4efb\u610f\u8ddf\u7528\u6237\u3001\u7cfb\u7edf\u6216\u5176\u5b83\u7a0b\u5e8f\u8fdb\u884c\u4efb\u610f\u901a\u4fe1\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\uff0c\u8be5\u7a0b\u5e8f\u4f1a\u88ab\u7cfb\u7edf\u6682\u505c\u76f4\u5230\u83b7\u5f97\u54cd\u5e94\u540e\u81ea\u52a8\u6062\u590d\u6267\u884c\uff0c\u8fd9\u79cd\u8ba1\u7b97\u6a21\u578b\u5bf9LLM\u5e94\u7528\u975e\u5e38\u91cd\u8981\u3002","Interoperability":"\u4e92\u64cd\u4f5c\u6027","Agents written by different developers could be running in a same memory environment and interoperate with each other with the permission of user.":"\u6765\u81ea\u4e0d\u540c\u5f00\u53d1\u8005\u4e4b\u95f4\u7f16\u5199\u7684\u7a0b\u5e8f\u53ef\u4ee5\u8fd0\u884c\u5728\u540c\u4e00\u4e2a\u5185\u5b58\u73af\u5883\uff0c\u5e76\u5728\u7528\u6237\u7684\u8bb8\u53ef\u4e0b\u8fdb\u884c\u4e92\u64cd\u4f5c\uff0c\u8fd9\u79cd\u5e94\u7528\u4e4b\u95f4\u7684\u534f\u4f5c\u80fd\u529b\u662f\u672a\u6765\u5143\u5b87\u5b99\u548cAI\u591a\u667a\u80fd\u4f53\u5e94\u7528\u7684\u6838\u5fc3\u57fa\u7840\u9700\u6c42\u3002","Self-evolving":"\u81ea\u6211\u8fdb\u5316","The agents are working in a collaborated way and user could custimize it\'s personal composation to make the whole system self-evolving and emerge digital intelligence.":"\u6240\u6709\u7a0b\u5e8f\u4ee5\u76f8\u4e92\u534f\u4f5c\u7684\u65b9\u5f0f\u8fdb\u884c\u5de5\u4f5c\uff0c\u7528\u6237\u53ef\u4ee5\u5b9a\u5236\u4e2a\u6027\u5316\u7684\u7ec4\u5408\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7684\u4e2a\u6027\u9700\u6c42\uff0c\u50cf\u751f\u7269\u7cfb\u7edf\u4e00\u6837\u8fdb\u884c\u81ea\u6211\u8fdb\u5316\uff0c\u901a\u8fc7\u590d\u6742\u7cfb\u7edf\u7684\u673a\u5236\u6d8c\u73b0\u51fa\u66f4\u9ad8\u7684\u6570\u5b57\u667a\u80fd\u3002","Logic-abstraction":"\u903b\u8f91\u62bd\u8c61","We re-organized the whole program to make developers focused on logic of busniess and forget about the hardware, data and programing language abstraction.":"\u8fd0\u884c\u65f6\u5c06\u5bf9\u6574\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u91cd\u65b0\u7ec4\u7ec7\uff0c\u8fd9\u4f7f\u5f97\u5f00\u53d1\u8005\u4ec5\u9700\u8981\u5173\u6ce8\u903b\u8f91\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u786c\u4ef6\u3001\u5185\u5b58\u6570\u636e\u7ba1\u7406\u4ee5\u53ca\u5176\u5b83\u7f16\u7a0b\u8bed\u8a00\u76f8\u5173\u7684\u7ec6\u8282\uff0c\u4ece\u800c\u5efa\u7acb\u4e00\u79cd\u903b\u8f91\u62bd\u8c61\u3002","Computing Innovation":"\u8ba1\u7b97\u67b6\u6784\u521b\u65b0","We defined a agent format standard to represent a turing completed agent program which can be loaded and runned dynamically so everyone can develop an agent to handle personal needs.":"\u6211\u4eec\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5fae\u7a0b\u5e8f\uff08\u5982AI\u667a\u80fd\u4f53\uff09\u7684\u6807\u51c6\u683c\u5f0f\uff0c\u5b83\u662f\u56fe\u7075\u5b8c\u5907\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u52a0\u8f7d\u548c\u8fd0\u884c\u3002","Join our developer community":"\u52a0\u5165\u5f00\u53d1\u8005\u793e\u533a","Cogine is the virtual machine and base framework of Reality World, it defined a standard agent(a micro-program) format, and it can load and run multi-agent dynamically with the ability to interoperate and communicate with each other.":"Cogine\u662fReality World\u7684\u865a\u62df\u673a\u548c\u5e95\u5c42\u6846\u67b6, \u5b83\u5b9a\u4e49\u4e86\u4e00\u5957\u6807\u51c6\u7684\u5fae\u7a0b\u5e8f\uff08\u4f8b\u5982\u4e00\u4e2aLLM\u667a\u80fd\u4f53\uff09\u683c\u5f0f\uff0c\u8fd9\u4e9b\u5fae\u7a0b\u5e8f\u53ef\u4ee5\u88ab\u52a8\u6001\u7684\u52a0\u8f7d\u548c\u8fd0\u884c\uff0c \u5fae\u7a0b\u5e8f\u4e4b\u95f4\u53ef\u4ee5\u4ee5\u5f88\u7b80\u5355\u7edf\u4e00\u7684\u65b9\u5f0f\u8fdb\u884c\u901a\u4fe1\u3002","The term Cogine stands for An engine of complexity, or an cognitive computing engine, or conversational computing engine.":"Cogine\u4e00\u8bcd\u6765\u6e90\u4e8e\u51e0\u4e2a\u76f8\u5173\u7684\u610f\u601d\uff1aAn engine of complexity\uff0c \u6216\u8005an cognitive computing engine, \u6216\u8005 conversational computing engine\u3002","And you can deploy it yourself within your own application.":"\u4f60\u4e5f\u53ef\u4ee5\u5c06Cogine\u90e8\u7f72\u96c6\u6210\u5230\u81ea\u5df1\u7684\u5e94\u7528\u4e2d\u3002","Reality World is an app which can load and run any agent defined by the Cogine agent format, it\'s also a simulator you can used to debug your agent program.":"Reality World\u662f\u4e00\u4e2a\u53ef\u4ee5\u52a0\u8f7d\u548c\u8fd0\u884c\u9075\u5faaCogine\u5b9a\u4e49\u7684Agent\u683c\u5f0f\u7684\u5e94\u7528\uff0c \u5b83\u4e5f\u662f\u4e00\u4e2a\u6a21\u62df\u5668\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u5b83\u8c03\u8bd5Agent\u7a0b\u5e8f\u3002","User who installed the Reality World app can create and share agent each other. It makes Reality World a agent platform.":"\u4efb\u4f55\u5b89\u88c5Reality World \u5e94\u7528\u7684\u7528\u6237\u4e4b\u95f4\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u521b\u5efa\u548c\u5206\u4eabAgent\u7a0b\u5e8f\uff0c\u8fd9\u4f7f\u5f97\u5b83\u6210\u4e3a\u4e00\u4e2aAgent\u5f00\u53d1\u548c\u90e8\u7f72\u7684\u5e73\u53f0\u3002","Reality Create is a graph-based editor, it can create and define an agent program which will can be running in Reality World app or by the Cogine virtual machine":"Reality Create\u662f\u4e00\u4e2a\u57fa\u4e8e\u56fe\u7684\u7f16\u8f91\u5668\uff0c\u4f7f\u7528\u5b83\u53ef\u4ee5\u521b\u5efa\u7531Cogine\u5b9a\u4e49\u7684\u7a0b\u5e8f\uff0c\u8fd9\u4e9b\u7a0b\u5e8f\u53ef\u4ee5\u88abReality World\u52a0\u8f7d\u6216\u8005Cogine\u865a\u62df\u673a\u52a0\u8f7d\u8fd0\u884c\u3002","Features and benefits":"\u7279\u6027 \u548c \u597d\u5904","The following we list the main features of Cogine, for the details please check the technical documentation.":"\u4ee5\u4e0b\u662fCogine\u7684\u4e00\u4e9b\u4e3b\u8981\u7279\u6027\uff0c\u66f4\u8be6\u7ec6\u7684\u4ecb\u7ecd\u53c2\u89c1\u6280\u672f\u6587\u6863","Development comparison with LangChain and Chidori":"\u4e0e LangChain \u548c Chidori \u5728\u5f00\u53d1\u4f53\u9a8c\u4e0a\u7684\u6bd4\u8f83","Basically, in other framework, you have to learn Python language, have to care about the structure of the program and have to learn many architecture design (such as different specific class and its inheritance relationships. In Cogine, the only thing you are care about is your logic, no other programming burden.":"\u57fa\u672c\u4e0a\uff0c\u5728\u4f7f\u7528\u5176\u5b83\u6846\u67b6\u7684\u65f6\u5019\uff0c\u7528\u6237\u5fc5\u987b\u8981\u5168\u9762\u5b66\u4e60Python\uff0c\u5173\u6ce8\u7a0b\u5e8f\u7684\u7ed3\u6784\uff0c\u4ee5\u53ca\u8fd9\u4e9b\u6846\u67b6\u672c\u8eab\u5b9a\u4e49\u7684\u5404\u79cd\u590d\u6742\u7684\u7c7b\u53ca\u5176\u590d\u6742\u7684\u7ee7\u627f\u5173\u7cfb\uff0c\u7136\u540e\u4f7f\u7528\u8fd9\u4e9b\u7279\u5b9a\u7684\u67b6\u6784\u89c4\u5219\u6784\u5efa\u7a0b\u5e8f\u3002 \u4f7f\u7528Cogine\uff0c\u4f60\u552f\u4e00\u9700\u8981\u5173\u5fc3\u7684\u5c31\u662f\u903b\u8f91\u672c\u8eab\uff0c \u6ca1\u6709\u592a\u591a\u8f6f\u4ef6\u6784\u9020\u65b9\u9762\u7684\u8d1f\u62c5\u3002"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/zh/app-fbb":{"__comp":"7fa55123","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/blog-940":{"__comp":"a6aa9e1f","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"metadata":"3a332aed"},"/zh/blog/archive-503":{"__comp":"9e4087bc","__context":{"plugin":"088d37c1"},"archive":"927d70e2"},"/zh/blog/conversational-computing-6f6":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"ec9b07e8"},"/zh/blog/reality-world-open-source-conference-7c7":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"92f86187"},"/zh/blog/tags-b75":{"__comp":"01a85c17","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","tags":"bfb16af5"},"/zh/blog/tags/cogine-e77":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"1b8901bf"}],"tag":"e121e550","listMetadata":"3b8538cb"},"/zh/blog/tags/open-source-370":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"fda7c27e"}],"tag":"c4113809","listMetadata":"d2080cbe"},"/zh/blog/tags/reality-world-59e":{"__comp":"6875c492","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","items":[{"content":"3cdbf76c"},{"content":"fda7c27e"},{"content":"1b8901bf"},{"content":"13c002e8"}],"tag":"129facaa","listMetadata":"f0f7ee06"},"/zh/blog/the-evolution-of-ECS-50d":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"cede0149"},"/zh/blog/thinking-591":{"__comp":"ccc49370","__context":{"plugin":"088d37c1"},"sidebar":"814f3328","content":"0c125c2b"},"/zh/cogine-d8f":{"__comp":"28207210","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/community/about-open-source-b76":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"14fa4984"},"/zh/community/about-reality-world-d65":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"a394719f"},"/zh/community/contact-954":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2c22cdfb"},"/zh/community/questions-17e":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"df434585"},"/zh/community/resources-5d5":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6ba9ce7"},"/zh/community/roadmap-b8c":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"68bfee64"},"/zh/feature/chidori-5be":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"5503d724"},"/zh/feature/cogine-d29":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"2ae76f65"},"/zh/feature/features-a74":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"956d92de"},"/zh/feature/langchain-cb1":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"b6e914c2"},"/zh/features-58e":{"__comp":"a54713d3","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/reality-create-ed1":{"__comp":"a6d44343","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"},"/zh/reality-world-paper/-c13":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"be3188a8"},"/zh/self-deploying-f8a":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"0b68990b"},"/zh/whitepaper/-a89":{"__comp":"1f391b9e","__context":{"plugin":"5062db26"},"content":"c6a65125"},"/zh/community-b75":{"__comp":"1be78505","__context":{"plugin":"a8378f8b"},"versionMetadata":"306a8c6c"},"/zh/community/-080":{"__comp":"17896441","content":"edc931f8"},"/zh/docs-704":{"__comp":"1be78505","__context":{"plugin":"fb33060d"},"versionMetadata":"935f2afb"},"/zh/docs/intro-743":{"__comp":"17896441","content":"0e384e19"},"/zh/docs/introduction/-71f":{"__comp":"17896441","content":"c62485b9"},"/zh/docs/introduction/advantage-812":{"__comp":"17896441","content":"16c820cc"},"/zh/docs/introduction/business-model-4bc":{"__comp":"17896441","content":"eb4e993a"},"/zh/docs/introduction/current-71b":{"__comp":"17896441","content":"1e248c61"},"/zh/docs/introduction/evolution-75d":{"__comp":"17896441","content":"c84e1d07"},"/zh/docs/introduction/user-cd6":{"__comp":"17896441","content":"1e8a94b6"},"/zh/docs/introduction/value-e8d":{"__comp":"17896441","content":"386fda77"},"/zh/-010":{"__comp":"c4f5d8e4","__context":{"plugin":"5062db26"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=8606,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/zh/assets/js/main.d44be7d9.js.LICENSE.txt b/zh/assets/js/main.d44be7d9.js.LICENSE.txt deleted file mode 100644 index fbc0635..0000000 --- a/zh/assets/js/main.d44be7d9.js.LICENSE.txt +++ /dev/null @@ -1,132 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ - -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ - -/** - * @license React - * use-sync-external-store-shim.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ - -/** @license React v0.20.2 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/zh/assets/js/runtime~main.7f3ba15c.js b/zh/assets/js/runtime~main.4c614863.js similarity index 51% rename from zh/assets/js/runtime~main.7f3ba15c.js rename to zh/assets/js/runtime~main.4c614863.js index e3e5201..13f588c 100644 --- a/zh/assets/js/runtime~main.7f3ba15c.js +++ b/zh/assets/js/runtime~main.4c614863.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,f,t,r={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var c=d[e]={exports:{}};return r[e].call(c.exports,c,c.exports,b),c.exports}b.m=r,e=[],b.O=(a,c,f,t)=>{if(!c){var r=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],t=e[i][2];for(var d=!0,o=0;o<c.length;o++)(!1&t||r>=t)&&Object.keys(b.O).every((e=>b.O[e](c[o])))?c.splice(o--,1):(d=!1,t<r&&(r=t));if(d){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}t=t||0;for(var i=e.length;i>0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[c,f,t]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var r={};a=a||[null,c({}),c([]),c(c)];for(var d=2&f&&e;"object"==typeof d&&!~a.indexOf(d);d=c(d))Object.getOwnPropertyNames(d).forEach((a=>r[a]=()=>e[a]));return r.default=()=>e,b.d(t,r),t},b.d=(e,a)=>{for(var c in a)b.o(a,c)&&!b.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,c)=>(b.f[c](e,a),a)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",236:"3b8538cb",990:"5062db26",1045:"927d70e2",1218:"b6ba9ce7",1545:"c4113809",2116:"14fa4984",2535:"814f3328",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3819:"2c22cdfb",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",4916:"e121e550",4982:"088d37c1",5119:"92f86187",5202:"a394719f",5647:"1e8a94b6",5674:"129facaa",5885:"1e248c61",5909:"bfb16af5",6103:"ccc49370",6160:"edc931f8",6259:"0c125c2b",6330:"a8378f8b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7616:"306a8c6c",7918:"17896441",8287:"fb33060d",8341:"16c820cc",8342:"f0f7ee06",8610:"6875c492",8778:"956d92de",8800:"3a332aed",8857:"ec9b07e8",9008:"0b68990b",9221:"d2080cbe",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"e9f4783a",236:"cce551f3",990:"67e98b2f",1045:"291b5be2",1218:"03bbc908",1545:"ae8c7c3f",2116:"a69a4cf5",2535:"23856c0e",2863:"46446507",2966:"0cc50bc5",3028:"a31010eb",3075:"aaa5d38a",3085:"0e5f3c11",3089:"79326d13",3493:"6755d2ef",3529:"1af795d7",3608:"14550a7b",3819:"d9aba373",3826:"92d6b3b9",3915:"49f06cf6",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",4474:"cf4b5b39",4916:"e3555060",4982:"f190df57",5119:"c1f1f63c",5202:"fec631df",5647:"6f8da3f5",5674:"0f319b9d",5885:"d92d6af5",5909:"c5e60e4f",6103:"c8bcaa36",6160:"45b93a45",6259:"4e71ab0b",6330:"9c5f747b",6525:"be52a978",6641:"8a053b09",6821:"ca18a479",7424:"29a5ecf5",7450:"b26a76bf",7541:"328855b1",7544:"dbbb6b7d",7616:"6f9f76f5",7918:"912fe004",8287:"64b27540",8341:"9e5ec1e7",8342:"81223b55",8610:"6bc59e7c",8778:"d38c8928",8800:"046cb047",8857:"4b5a8fe0",9008:"703ffbd2",9221:"bca4e3ee",9348:"323812df",9500:"ed67a2d6",9505:"e262c15b",9514:"3958b6d2",9659:"6791a9af",9663:"a52d2d49",9671:"1c63ab26",9923:"ca4b699b"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},t="realityworld:",b.l=(e,a,c,r)=>{if(f[e])f[e].push(a);else{var d,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==t+c){d=l;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",t+c),d.src=e),f[e]=[a];var u=(a,c)=>{d.onerror=d.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],d.parentNode&&d.parentNode.removeChild(d),t&&t.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/zh/",b.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53","3b8538cb":"236","5062db26":"990","927d70e2":"1045",b6ba9ce7:"1218",c4113809:"1545","14fa4984":"2116","814f3328":"2535","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","2c22cdfb":"3819","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195",e121e550:"4916","088d37c1":"4982","92f86187":"5119",a394719f:"5202","1e8a94b6":"5647","129facaa":"5674","1e248c61":"5885",bfb16af5:"5909",ccc49370:"6103",edc931f8:"6160","0c125c2b":"6259",a8378f8b:"6330","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544","306a8c6c":"7616",fb33060d:"8287","16c820cc":"8341",f0f7ee06:"8342","6875c492":"8610","956d92de":"8778","3a332aed":"8800",ec9b07e8:"8857","0b68990b":"9008",d2080cbe:"9221",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,c)=>{var f=b.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var t=new Promise(((c,t)=>f=e[a]=[c,t]));c.push(f[2]=t);var r=b.p+b.u(a),d=new Error;b.l(r,(c=>{if(b.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var t=c&&("load"===c.type?"missing":c.type),r=c&&c.target&&c.target.src;d.message="Loading chunk "+a+" failed.\n("+t+": "+r+")",d.name="ChunkLoadError",d.type=t,d.request=r,f[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,c)=>{var f,t,r=c[0],d=c[1],o=c[2],n=0;if(r.some((a=>0!==e[a]))){for(f in d)b.o(d,f)&&(b.m[f]=d[f]);if(o)var i=o(b)}for(a&&a(c);n<r.length;n++)t=r[n],b.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return b.O(i)},c=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file +(()=>{"use strict";var e,a,c,f,t,r={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var c=d[e]={exports:{}};return r[e].call(c.exports,c,c.exports,b),c.exports}b.m=r,e=[],b.O=(a,c,f,t)=>{if(!c){var r=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],t=e[i][2];for(var d=!0,o=0;o<c.length;o++)(!1&t||r>=t)&&Object.keys(b.O).every((e=>b.O[e](c[o])))?c.splice(o--,1):(d=!1,t<r&&(r=t));if(d){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}t=t||0;for(var i=e.length;i>0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[c,f,t]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var r={};a=a||[null,c({}),c([]),c(c)];for(var d=2&f&&e;"object"==typeof d&&!~a.indexOf(d);d=c(d))Object.getOwnPropertyNames(d).forEach((a=>r[a]=()=>e[a]));return r.default=()=>e,b.d(t,r),t},b.d=(e,a)=>{for(var c in a)b.o(a,c)&&!b.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,c)=>(b.f[c](e,a),a)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",236:"3b8538cb",990:"5062db26",1045:"927d70e2",1218:"b6ba9ce7",1545:"c4113809",2116:"14fa4984",2535:"814f3328",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3650:"308394e9",3819:"2c22cdfb",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",4916:"e121e550",4982:"088d37c1",5119:"92f86187",5202:"a394719f",5647:"1e8a94b6",5674:"129facaa",5885:"1e248c61",5909:"bfb16af5",6103:"ccc49370",6259:"0c125c2b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7918:"17896441",8287:"fb33060d",8341:"16c820cc",8342:"f0f7ee06",8610:"6875c492",8778:"956d92de",8800:"3a332aed",8857:"ec9b07e8",9008:"0b68990b",9221:"d2080cbe",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"e9f4783a",236:"cce551f3",990:"67e98b2f",1045:"291b5be2",1218:"03bbc908",1545:"ae8c7c3f",2116:"a69a4cf5",2535:"23856c0e",2863:"46446507",2966:"0cc50bc5",3028:"a31010eb",3075:"aaa5d38a",3085:"0e5f3c11",3089:"79326d13",3493:"6755d2ef",3529:"1af795d7",3608:"14550a7b",3650:"e298d7e2",3819:"d9aba373",3826:"92d6b3b9",3915:"49f06cf6",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",4474:"cf4b5b39",4916:"e3555060",4982:"f190df57",5119:"c1f1f63c",5202:"fec631df",5647:"6f8da3f5",5674:"0f319b9d",5885:"d92d6af5",5909:"c5e60e4f",6103:"c8bcaa36",6259:"4e71ab0b",6525:"be52a978",6641:"8a053b09",6821:"ca18a479",7424:"29a5ecf5",7450:"b26a76bf",7541:"328855b1",7544:"dbbb6b7d",7918:"912fe004",8287:"64b27540",8341:"9e5ec1e7",8342:"81223b55",8610:"6bc59e7c",8778:"d38c8928",8800:"046cb047",8857:"4b5a8fe0",9008:"703ffbd2",9221:"bca4e3ee",9348:"323812df",9500:"ed67a2d6",9505:"e262c15b",9514:"3958b6d2",9659:"6791a9af",9663:"a52d2d49",9671:"1c63ab26",9923:"ca4b699b"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},t="realityworld:",b.l=(e,a,c,r)=>{if(f[e])f[e].push(a);else{var d,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==t+c){d=l;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",t+c),d.src=e),f[e]=[a];var u=(a,c)=>{d.onerror=d.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],d.parentNode&&d.parentNode.removeChild(d),t&&t.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/zh/",b.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53","3b8538cb":"236","5062db26":"990","927d70e2":"1045",b6ba9ce7:"1218",c4113809:"1545","14fa4984":"2116","814f3328":"2535","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","308394e9":"3650","2c22cdfb":"3819","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195",e121e550:"4916","088d37c1":"4982","92f86187":"5119",a394719f:"5202","1e8a94b6":"5647","129facaa":"5674","1e248c61":"5885",bfb16af5:"5909",ccc49370:"6103","0c125c2b":"6259","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544",fb33060d:"8287","16c820cc":"8341",f0f7ee06:"8342","6875c492":"8610","956d92de":"8778","3a332aed":"8800",ec9b07e8:"8857","0b68990b":"9008",d2080cbe:"9221",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,c)=>{var f=b.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var t=new Promise(((c,t)=>f=e[a]=[c,t]));c.push(f[2]=t);var r=b.p+b.u(a),d=new Error;b.l(r,(c=>{if(b.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var t=c&&("load"===c.type?"missing":c.type),r=c&&c.target&&c.target.src;d.message="Loading chunk "+a+" failed.\n("+t+": "+r+")",d.name="ChunkLoadError",d.type=t,d.request=r,f[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,c)=>{var f,t,r=c[0],d=c[1],o=c[2],n=0;if(r.some((a=>0!==e[a]))){for(f in d)b.o(d,f)&&(b.m[f]=d[f]);if(o)var i=o(b)}for(a&&a(c);n<r.length;n++)t=r[n],b.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return b.O(i)},c=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/zh/assets/js/runtime~main.55716104.js b/zh/assets/js/runtime~main.55716104.js deleted file mode 100644 index f7cef20..0000000 --- a/zh/assets/js/runtime~main.55716104.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,c,t,r,f={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var c=b[e]={exports:{}};return f[e].call(c.exports,c,c.exports,d),c.exports}d.m=f,e=[],d.O=(a,c,t,r)=>{if(!c){var f=1/0;for(i=0;i<e.length;i++){c=e[i][0],t=e[i][1],r=e[i][2];for(var b=!0,o=0;o<c.length;o++)(!1&r||f>=r)&&Object.keys(d.O).every((e=>d.O[e](c[o])))?c.splice(o--,1):(b=!1,r<f&&(f=r));if(b){e.splice(i--,1);var n=t();void 0!==n&&(a=n)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[c,t,r]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var r=Object.create(null);d.r(r);var f={};a=a||[null,c({}),c([]),c(c)];for(var b=2&t&&e;"object"==typeof b&&!~a.indexOf(b);b=c(b))Object.getOwnPropertyNames(b).forEach((a=>f[a]=()=>e[a]));return f.default=()=>e,d.d(r,f),r},d.d=(e,a)=>{for(var c in a)d.o(a,c)&&!d.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,c)=>(d.f[c](e,a),a)),[])),d.u=e=>"assets/js/"+({53:"935f2afb",236:"3b8538cb",1045:"927d70e2",1218:"b6ba9ce7",1545:"c4113809",2116:"14fa4984",2535:"814f3328",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3111:"087bcfde",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3819:"2c22cdfb",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",4572:"ec0679b0",4916:"e121e550",5119:"92f86187",5202:"a394719f",5647:"1e8a94b6",5674:"129facaa",5885:"1e248c61",5909:"bfb16af5",6103:"ccc49370",6160:"edc931f8",6259:"0c125c2b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7616:"306a8c6c",7918:"17896441",8341:"16c820cc",8342:"f0f7ee06",8610:"6875c492",8712:"49b2de74",8778:"956d92de",8800:"3a332aed",8852:"831b5c01",8857:"ec9b07e8",9008:"0b68990b",9221:"d2080cbe",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"e9f4783a",236:"cce551f3",1045:"bb1d543b",1218:"03bbc908",1545:"ae8c7c3f",2116:"a69a4cf5",2535:"23856c0e",2863:"46446507",2966:"0cc50bc5",3028:"a31010eb",3075:"aaa5d38a",3085:"28f273ba",3089:"79326d13",3111:"00fb6169",3493:"6755d2ef",3529:"1af795d7",3608:"14550a7b",3819:"d9aba373",3826:"92d6b3b9",3915:"5db7e18c",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",4572:"a7d27dc2",4916:"e3555060",5119:"c1f1f63c",5202:"fec631df",5647:"6f8da3f5",5674:"0f319b9d",5885:"d92d6af5",5909:"c5e60e4f",6103:"80aafd6b",6160:"45b93a45",6259:"b8426788",6525:"be52a978",6641:"e0ceff67",6821:"7c7456dc",7424:"29a5ecf5",7450:"b26a76bf",7541:"328855b1",7544:"dbbb6b7d",7616:"6f9f76f5",7918:"2d94139d",8341:"9e5ec1e7",8342:"81223b55",8485:"28ee2776",8610:"baf4982b",8712:"b79f9acf",8778:"d38c8928",8800:"046cb047",8852:"07ee4a6a",8857:"4b5a8fe0",9008:"703ffbd2",9221:"bca4e3ee",9348:"323812df",9500:"ed67a2d6",9505:"e262c15b",9514:"3958b6d2",9659:"6791a9af",9663:"57e90409",9671:"1c63ab26",9923:"9ec47e51"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},r="realityworld:",d.l=(e,a,c,f)=>{if(t[e])t[e].push(a);else{var b,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==r+c){b=l;break}}b||(o=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,d.nc&&b.setAttribute("nonce",d.nc),b.setAttribute("data-webpack",r+c),b.src=e),t[e]=[a];var u=(a,c)=>{b.onerror=b.onload=null,clearTimeout(s);var r=t[e];if(delete t[e],b.parentNode&&b.parentNode.removeChild(b),r&&r.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),o&&document.head.appendChild(b)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/zh/",d.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53","3b8538cb":"236","927d70e2":"1045",b6ba9ce7:"1218",c4113809:"1545","14fa4984":"2116","814f3328":"2535","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089","087bcfde":"3111",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","2c22cdfb":"3819","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195",ec0679b0:"4572",e121e550:"4916","92f86187":"5119",a394719f:"5202","1e8a94b6":"5647","129facaa":"5674","1e248c61":"5885",bfb16af5:"5909",ccc49370:"6103",edc931f8:"6160","0c125c2b":"6259","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544","306a8c6c":"7616","16c820cc":"8341",f0f7ee06:"8342","6875c492":"8610","49b2de74":"8712","956d92de":"8778","3a332aed":"8800","831b5c01":"8852",ec9b07e8:"8857","0b68990b":"9008",d2080cbe:"9221",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,d.p+d.u(e)},(()=>{var e={1303:0,532:0};d.f.j=(a,c)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)c.push(t[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var r=new Promise(((c,r)=>t=e[a]=[c,r]));c.push(t[2]=r);var f=d.p+d.u(a),b=new Error;d.l(f,(c=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var r=c&&("load"===c.type?"missing":c.type),f=c&&c.target&&c.target.src;b.message="Loading chunk "+a+" failed.\n("+r+": "+f+")",b.name="ChunkLoadError",b.type=r,b.request=f,t[1](b)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,c)=>{var t,r,f=c[0],b=c[1],o=c[2],n=0;if(f.some((a=>0!==e[a]))){for(t in b)d.o(b,t)&&(d.m[t]=b[t]);if(o)var i=o(d)}for(a&&a(c);n<f.length;n++)r=f[n],d.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return d.O(i)},c=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/zh/assets/js/runtime~main.ccfa2fff.js b/zh/assets/js/runtime~main.ccfa2fff.js deleted file mode 100644 index 6aebe18..0000000 --- a/zh/assets/js/runtime~main.ccfa2fff.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,t,c,r,f={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var t=b[e]={exports:{}};return f[e].call(t.exports,t,t.exports,d),t.exports}d.m=f,e=[],d.O=(a,t,c,r)=>{if(!t){var f=1/0;for(i=0;i<e.length;i++){t=e[i][0],c=e[i][1],r=e[i][2];for(var b=!0,o=0;o<t.length;o++)(!1&r||f>=r)&&Object.keys(d.O).every((e=>d.O[e](t[o])))?t.splice(o--,1):(b=!1,r<f&&(f=r));if(b){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[t,c,r]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var r=Object.create(null);d.r(r);var f={};a=a||[null,t({}),t([]),t(t)];for(var b=2&c&&e;"object"==typeof b&&!~a.indexOf(b);b=t(b))Object.getOwnPropertyNames(b).forEach((a=>f[a]=()=>e[a]));return f.default=()=>e,d.d(r,f),r},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,t)=>(d.f[t](e,a),a)),[])),d.u=e=>"assets/js/"+({53:"935f2afb",236:"3b8538cb",1045:"927d70e2",1218:"b6ba9ce7",1545:"c4113809",2116:"14fa4984",2535:"814f3328",2863:"5503d724",2966:"c84e1d07",3028:"3cdbf76c",3075:"1b8901bf",3085:"1f391b9e",3089:"a6aa9e1f",3111:"087bcfde",3493:"c62485b9",3529:"fda7c27e",3608:"9e4087bc",3650:"308394e9",3819:"2c22cdfb",3915:"13c002e8",4013:"01a85c17",4195:"c4f5d8e4",4916:"e121e550",5119:"92f86187",5202:"a394719f",5647:"1e8a94b6",5674:"129facaa",5885:"1e248c61",5909:"bfb16af5",6103:"ccc49370",6259:"0c125c2b",6525:"7fa55123",6641:"2ae76f65",6821:"386fda77",7424:"cede0149",7450:"28207210",7541:"68bfee64",7544:"b6e914c2",7918:"17896441",8341:"16c820cc",8342:"f0f7ee06",8610:"6875c492",8712:"49b2de74",8778:"956d92de",8800:"3a332aed",8852:"831b5c01",8857:"ec9b07e8",9008:"0b68990b",9221:"d2080cbe",9348:"be3188a8",9500:"a6d44343",9505:"df434585",9514:"1be78505",9659:"eb4e993a",9663:"a54713d3",9671:"0e384e19",9923:"c6a65125"}[e]||e)+"."+{53:"e9f4783a",236:"cce551f3",1045:"bb1d543b",1218:"03bbc908",1545:"ae8c7c3f",2116:"a69a4cf5",2535:"23856c0e",2863:"46446507",2966:"0cc50bc5",3028:"a31010eb",3075:"aaa5d38a",3085:"28f273ba",3089:"79326d13",3111:"00fb6169",3493:"6755d2ef",3529:"1af795d7",3608:"14550a7b",3650:"5d6b53fc",3819:"d9aba373",3826:"92d6b3b9",3915:"5db7e18c",4013:"7b4818eb",4195:"49dd55b7",4248:"84f5c9ca",4916:"e3555060",5119:"c1f1f63c",5202:"fec631df",5647:"6f8da3f5",5674:"0f319b9d",5885:"d92d6af5",5909:"c5e60e4f",6103:"80aafd6b",6259:"b8426788",6525:"be52a978",6641:"e0ceff67",6821:"7c7456dc",7424:"29a5ecf5",7450:"b26a76bf",7541:"328855b1",7544:"dbbb6b7d",7918:"2d94139d",8341:"9e5ec1e7",8342:"81223b55",8485:"28ee2776",8610:"baf4982b",8712:"b79f9acf",8778:"d38c8928",8800:"046cb047",8852:"07ee4a6a",8857:"4b5a8fe0",9008:"703ffbd2",9221:"bca4e3ee",9348:"323812df",9500:"ed67a2d6",9505:"e262c15b",9514:"3958b6d2",9659:"6791a9af",9663:"57e90409",9671:"1c63ab26",9923:"9ec47e51"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},r="realityworld:",d.l=(e,a,t,f)=>{if(c[e])c[e].push(a);else{var b,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==r+t){b=l;break}}b||(o=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,d.nc&&b.setAttribute("nonce",d.nc),b.setAttribute("data-webpack",r+t),b.src=e),c[e]=[a];var u=(a,t)=>{b.onerror=b.onload=null,clearTimeout(s);var r=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),r&&r.forEach((e=>e(t))),a)return a(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),o&&document.head.appendChild(b)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/zh/",d.gca=function(e){return e={17896441:"7918",28207210:"7450","935f2afb":"53","3b8538cb":"236","927d70e2":"1045",b6ba9ce7:"1218",c4113809:"1545","14fa4984":"2116","814f3328":"2535","5503d724":"2863",c84e1d07:"2966","3cdbf76c":"3028","1b8901bf":"3075","1f391b9e":"3085",a6aa9e1f:"3089","087bcfde":"3111",c62485b9:"3493",fda7c27e:"3529","9e4087bc":"3608","308394e9":"3650","2c22cdfb":"3819","13c002e8":"3915","01a85c17":"4013",c4f5d8e4:"4195",e121e550:"4916","92f86187":"5119",a394719f:"5202","1e8a94b6":"5647","129facaa":"5674","1e248c61":"5885",bfb16af5:"5909",ccc49370:"6103","0c125c2b":"6259","7fa55123":"6525","2ae76f65":"6641","386fda77":"6821",cede0149:"7424","68bfee64":"7541",b6e914c2:"7544","16c820cc":"8341",f0f7ee06:"8342","6875c492":"8610","49b2de74":"8712","956d92de":"8778","3a332aed":"8800","831b5c01":"8852",ec9b07e8:"8857","0b68990b":"9008",d2080cbe:"9221",be3188a8:"9348",a6d44343:"9500",df434585:"9505","1be78505":"9514",eb4e993a:"9659",a54713d3:"9663","0e384e19":"9671",c6a65125:"9923"}[e]||e,d.p+d.u(e)},(()=>{var e={1303:0,532:0};d.f.j=(a,t)=>{var c=d.o(e,a)?e[a]:void 0;if(0!==c)if(c)t.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var r=new Promise(((t,r)=>c=e[a]=[t,r]));t.push(c[2]=r);var f=d.p+d.u(a),b=new Error;d.l(f,(t=>{if(d.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var r=t&&("load"===t.type?"missing":t.type),f=t&&t.target&&t.target.src;b.message="Loading chunk "+a+" failed.\n("+r+": "+f+")",b.name="ChunkLoadError",b.type=r,b.request=f,c[1](b)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var c,r,f=t[0],b=t[1],o=t[2],n=0;if(f.some((a=>0!==e[a]))){for(c in b)d.o(b,c)&&(d.m[c]=b[c]);if(o)var i=o(d)}for(a&&a(t);n<f.length;n++)r=f[n],d.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return d.O(i)},t=self.webpackChunkrealityworld=self.webpackChunkrealityworld||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))})()})(); \ No newline at end of file diff --git a/zh/blog/archive/index.html b/zh/blog/archive/index.html index 7e3c537..9d91a67 100644 --- a/zh/blog/archive/index.html +++ b/zh/blog/archive/index.html @@ -6,8 +6,8 @@ <title data-rh="true">历史博文 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/conversational-computing/index.html b/zh/blog/conversational-computing/index.html index 5da7209..42c53a4 100644 --- a/zh/blog/conversational-computing/index.html +++ b/zh/blog/conversational-computing/index.html @@ -6,8 +6,8 @@ Conversational computing: a new programming model empower LLM applications | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/index.html b/zh/blog/index.html index bb22a40..37bae9e 100644 --- a/zh/blog/index.html +++ b/zh/blog/index.html @@ -6,8 +6,8 @@ Blog | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/reality-world-open-source-conference/index.html b/zh/blog/reality-world-open-source-conference/index.html index f85a99e..ba1d503 100644 --- a/zh/blog/reality-world-open-source-conference/index.html +++ b/zh/blog/reality-world-open-source-conference/index.html @@ -6,8 +6,8 @@ Reality World 开源技术分享会 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/tags/cogine/index.html b/zh/blog/tags/cogine/index.html index 63ee4a3..1450f33 100644 --- a/zh/blog/tags/cogine/index.html +++ b/zh/blog/tags/cogine/index.html @@ -6,8 +6,8 @@ 2 篇博文 含有标签「Cogine」 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/tags/index.html b/zh/blog/tags/index.html index 319d49f..81ed13b 100644 --- a/zh/blog/tags/index.html +++ b/zh/blog/tags/index.html @@ -6,8 +6,8 @@ 标签 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/tags/open-source/index.html b/zh/blog/tags/open-source/index.html index eff90f4..b266103 100644 --- a/zh/blog/tags/open-source/index.html +++ b/zh/blog/tags/open-source/index.html @@ -6,8 +6,8 @@ 1 篇博文 含有标签「Open source」 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/tags/reality-world/index.html b/zh/blog/tags/reality-world/index.html index b905071..fba6165 100644 --- a/zh/blog/tags/reality-world/index.html +++ b/zh/blog/tags/reality-world/index.html @@ -6,8 +6,8 @@ 4 篇博文 含有标签「Reality World」 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/the-evolution-of-ECS/index.html b/zh/blog/the-evolution-of-ECS/index.html index 6983137..278bf02 100644 --- a/zh/blog/the-evolution-of-ECS/index.html +++ b/zh/blog/the-evolution-of-ECS/index.html @@ -6,8 +6,8 @@ The Evolution of ECS | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/blog/thinking/index.html b/zh/blog/thinking/index.html index aa50c35..8cbbd43 100644 --- a/zh/blog/thinking/index.html +++ b/zh/blog/thinking/index.html @@ -6,8 +6,8 @@ 对未来数字世界和软件构造的思考 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/cogine/index.html b/zh/cogine/index.html index 6307aee..99a100b 100644 --- a/zh/cogine/index.html +++ b/zh/cogine/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -17,7 +17,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/community/about-open-source/index.html b/zh/community/about-open-source/index.html index 5de7c00..ac2d7e6 100644 --- a/zh/community/about-open-source/index.html +++ b/zh/community/about-open-source/index.html @@ -6,8 +6,8 @@ 关于开源 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/community/about-reality-world/index.html b/zh/community/about-reality-world/index.html index d2a8de4..20e63b4 100644 --- a/zh/community/about-reality-world/index.html +++ b/zh/community/about-reality-world/index.html @@ -6,8 +6,8 @@ 关于 Reality World | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/community/contact/index.html b/zh/community/contact/index.html index f92670c..a54fd83 100644 --- a/zh/community/contact/index.html +++ b/zh/community/contact/index.html @@ -6,8 +6,8 @@ 联系我们 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/community/index.html b/zh/community/index.html deleted file mode 100644 index 0bfd9d9..0000000 --- a/zh/community/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -index | Creating an intelligent reality with AI - - - - - - - - - - - \ No newline at end of file diff --git a/zh/community/questions/index.html b/zh/community/questions/index.html index 6bf48d4..39489bf 100644 --- a/zh/community/questions/index.html +++ b/zh/community/questions/index.html @@ -6,8 +6,8 @@ 常见问题 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/community/resources/index.html b/zh/community/resources/index.html index ef3c44f..7993028 100644 --- a/zh/community/resources/index.html +++ b/zh/community/resources/index.html @@ -6,8 +6,8 @@ 推荐资源 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/community/roadmap/index.html b/zh/community/roadmap/index.html index 0dc57ac..1c42df9 100644 --- a/zh/community/roadmap/index.html +++ b/zh/community/roadmap/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/intro/index.html b/zh/docs/intro/index.html index 1d2286d..978a41b 100644 --- a/zh/docs/intro/index.html +++ b/zh/docs/intro/index.html @@ -6,8 +6,8 @@ 文档说明 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/introduction/advantage/index.html b/zh/docs/introduction/advantage/index.html index 19b617b..72670a0 100644 --- a/zh/docs/introduction/advantage/index.html +++ b/zh/docs/introduction/advantage/index.html @@ -6,8 +6,8 @@ 1.3 技术优势 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/introduction/business-model/index.html b/zh/docs/introduction/business-model/index.html index bafe854..15cdb6a 100644 --- a/zh/docs/introduction/business-model/index.html +++ b/zh/docs/introduction/business-model/index.html @@ -6,8 +6,8 @@ 1.4 商业模式 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/introduction/current/index.html b/zh/docs/introduction/current/index.html index 49abbf5..d870040 100644 --- a/zh/docs/introduction/current/index.html +++ b/zh/docs/introduction/current/index.html @@ -6,8 +6,8 @@ 1.2 现状 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/introduction/evolution/index.html b/zh/docs/introduction/evolution/index.html index 1b56a18..6368964 100644 --- a/zh/docs/introduction/evolution/index.html +++ b/zh/docs/introduction/evolution/index.html @@ -6,8 +6,8 @@ 1.1 变革 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/introduction/index.html b/zh/docs/introduction/index.html index 147cd13..b483a93 100644 --- a/zh/docs/introduction/index.html +++ b/zh/docs/introduction/index.html @@ -6,8 +6,8 @@ 1. Introduction | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/introduction/user/index.html b/zh/docs/introduction/user/index.html index 2b5cfac..4cacbd7 100644 --- a/zh/docs/introduction/user/index.html +++ b/zh/docs/introduction/user/index.html @@ -6,8 +6,8 @@ 1.5 用户 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/docs/introduction/value/index.html b/zh/docs/introduction/value/index.html index 8258011..f34b920 100644 --- a/zh/docs/introduction/value/index.html +++ b/zh/docs/introduction/value/index.html @@ -6,8 +6,8 @@ 1.6 创造增量价值 | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/feature/chidori/index.html b/zh/feature/chidori/index.html index 67dcf16..0dd2a76 100644 --- a/zh/feature/chidori/index.html +++ b/zh/feature/chidori/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/feature/cogine/index.html b/zh/feature/cogine/index.html index 1d49248..4f93695 100644 --- a/zh/feature/cogine/index.html +++ b/zh/feature/cogine/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/feature/features/index.html b/zh/feature/features/index.html index b4cc4e9..b5bf77e 100644 --- a/zh/feature/features/index.html +++ b/zh/feature/features/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/feature/langchain/index.html b/zh/feature/langchain/index.html index fd9a90f..4ce9487 100644 --- a/zh/feature/langchain/index.html +++ b/zh/feature/langchain/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/features/index.html b/zh/features/index.html index 26e3243..5b4cac0 100644 --- a/zh/features/index.html +++ b/zh/features/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -157,7 +157,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/index.html b/zh/index.html index a744130..fe34a7e 100644 --- a/zh/index.html +++ b/zh/index.html @@ -6,8 +6,8 @@ Reality World | Creating an intelligent reality with AI - - + +
    @@ -17,7 +17,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/learning/Reality-World/index.html b/zh/learning/Reality-World/index.html index bf6f305..e054b0c 100644 --- a/zh/learning/Reality-World/index.html +++ b/zh/learning/Reality-World/index.html @@ -6,8 +6,8 @@ 文档说明 | Creating an intelligent reality with AI - - + +
    @@ -57,7 +57,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/reality-create/index.html b/zh/reality-create/index.html index bac1eba..2a2a854 100644 --- a/zh/reality-create/index.html +++ b/zh/reality-create/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -17,7 +17,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/reality-world-paper/index.html b/zh/reality-world-paper/index.html index 069c3a6..66a9205 100644 --- a/zh/reality-world-paper/index.html +++ b/zh/reality-world-paper/index.html @@ -6,8 +6,8 @@ Creating an intelligent reality with AI - - + +
    @@ -21,7 +21,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/search-index-default.json b/zh/search-index-default.json index fec2d13..4290c5b 100644 --- a/zh/search-index-default.json +++ b/zh/search-index-default.json @@ -1 +1 @@ -{"documents":[{"id":3,"pageTitle":"Conversational computing: a new programming model empower LLM applications","sectionTitle":"Conversational computing: a new programming model empower LLM applications","sectionRoute":"/zh/blog/conversational-computing","type":"blog"},{"id":4,"pageTitle":"Conversational computing: a new programming model empower LLM applications","sectionTitle":"Citation","sectionRoute":"/zh/blog/conversational-computing#citation","type":"blog"},{"id":5,"pageTitle":"Conversational computing: a new programming model empower LLM applications","sectionTitle":"References","sectionRoute":"/zh/blog/conversational-computing#references","type":"blog"},{"id":6,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"Reality World 开源技术分享会","sectionRoute":"/zh/blog/reality-world-open-source-conference","type":"blog"},{"id":7,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"先回答问题","sectionRoute":"/zh/blog/reality-world-open-source-conference#先回答问题","type":"blog"},{"id":8,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"Reality World是什么?","sectionRoute":"/zh/blog/reality-world-open-source-conference#reality-world是什么","type":"blog"},{"id":9,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"讲什么?","sectionRoute":"/zh/blog/reality-world-open-source-conference#讲什么","type":"blog"},{"id":10,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"面向的受众群体是谁?","sectionRoute":"/zh/blog/reality-world-open-source-conference#面向的受众群体是谁","type":"blog"},{"id":11,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源的目的是什么?","sectionRoute":"/zh/blog/reality-world-open-source-conference#开源的目的是什么","type":"blog"},{"id":12,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"License","sectionRoute":"/zh/blog/reality-world-open-source-conference#license","type":"blog"},{"id":13,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源什么?","sectionRoute":"/zh/blog/reality-world-open-source-conference#开源什么","type":"blog"},{"id":14,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源信息","sectionRoute":"/zh/blog/reality-world-open-source-conference#开源信息","type":"blog"},{"id":15,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"开源社区群","sectionRoute":"/zh/blog/reality-world-open-source-conference#开源社区群","type":"blog"},{"id":16,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"活动信息","sectionRoute":"/zh/blog/reality-world-open-source-conference#活动信息","type":"blog"},{"id":17,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"联系我","sectionRoute":"/zh/blog/reality-world-open-source-conference#联系我","type":"blog"},{"id":18,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"官网地址","sectionRoute":"/zh/blog/reality-world-open-source-conference#官网地址","type":"blog"},{"id":19,"pageTitle":"Reality World 开源技术分享会","sectionTitle":"报名地址","sectionRoute":"/zh/blog/reality-world-open-source-conference#报名地址","type":"blog"},{"id":1,"pageTitle":"The Evolution of ECS","sectionTitle":"The Evolution of ECS","sectionRoute":"/zh/blog/the-evolution-of-ECS","type":"blog"},{"id":34,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"对未来数字世界和软件构造的思考","sectionRoute":"/zh/blog/thinking","type":"blog"},{"id":35,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"Reality World不是什么?","sectionRoute":"/zh/blog/thinking#reality-world不是什么","type":"blog"},{"id":36,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"Reality Create的核心不是一个游戏引擎!","sectionRoute":"/zh/blog/thinking#reality-create的核心不是一个游戏引擎","type":"blog"},{"id":37,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"Reality World当然也不是元宇宙项目","sectionRoute":"/zh/blog/thinking#reality-world当然也不是元宇宙项目","type":"blog"},{"id":38,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"构建一个互操作的数字世界","sectionRoute":"/zh/blog/thinking#构建一个互操作的数字世界","type":"blog"},{"id":39,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"更轻量级的隔离技术","sectionRoute":"/zh/blog/thinking#更轻量级的隔离技术","type":"blog"},{"id":40,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"互操作性的本质是应用碎片化的问题","sectionRoute":"/zh/blog/thinking#互操作性的本质是应用碎片化的问题","type":"blog"},{"id":41,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"新的应用程序构造方法","sectionRoute":"/zh/blog/thinking#新的应用程序构造方法","type":"blog"},{"id":42,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"面向对象的本质是隔离","sectionRoute":"/zh/blog/thinking#面向对象的本质是隔离","type":"blog"},{"id":43,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"程序结构的复杂性","sectionRoute":"/zh/blog/thinking#程序结构的复杂性","type":"blog"},{"id":44,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"去中心化的数据管理","sectionRoute":"/zh/blog/thinking#去中心化的数据管理","type":"blog"},{"id":45,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"为AI而生的应用程序构造方法","sectionRoute":"/zh/blog/thinking#为ai而生的应用程序构造方法","type":"blog"},{"id":46,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"软件复用与可组合性","sectionRoute":"/zh/blog/thinking#软件复用与可组合性","type":"blog"},{"id":47,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"面向AI的编程系统","sectionRoute":"/zh/blog/thinking#面向ai的编程系统","type":"blog"},{"id":48,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"拥抱Rust","sectionRoute":"/zh/blog/thinking#拥抱rust","type":"blog"},{"id":49,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"我这一年的创作过程","sectionRoute":"/zh/blog/thinking#我这一年的创作过程","type":"blog"},{"id":50,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"关于商业模式","sectionRoute":"/zh/blog/thinking#关于商业模式","type":"blog"},{"id":51,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"参与Reality World开发","sectionRoute":"/zh/blog/thinking#参与reality-world开发","type":"blog"},{"id":52,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"关于融资","sectionRoute":"/zh/blog/thinking#关于融资","type":"blog"},{"id":53,"pageTitle":"对未来数字世界和软件构造的思考","sectionTitle":"后记","sectionRoute":"/zh/blog/thinking#后记","type":"blog"}],"index":{"version":"2.3.9","fields":["title","content","tags"],"fieldVectors":[["title/3",[0,0.935,1,0.935,2,0.935,3,0.735,4,0.935,5,0.935,6,0.821,7,0.821]],["content/3",[]],["tags/3",[8,0.429,9,0.429]],["title/4",[10,3.685]],["content/4",[0,2.329,1,3.362,2,2.329,3,1.83,4,2.329,5,2.329,6,2.043,7,2.043,11,1.71,12,2.762,13,2.762,14,2.762,15,2.762,16,0.328,17,0.429,18,2.762,19,1.71,20,1.71,21,0.291,22,1.71,23,1.71,24,1.71,25,1.71,26,1.71]],["tags/4",[]],["title/5",[27,3.685]],["content/5",[]],["tags/5",[]],["title/6",[16,0.263,17,0.344,21,0.131]],["content/6",[21,0.364]],["tags/6",[8,0.429,28,0.647]],["title/7",[21,0.218]],["content/7",[16,0.651,17,0.765,21,0.221,29,3.743,30,3.743,31,3.743,32,3.156]],["tags/7",[]],["title/8",[16,0.328,17,0.43]],["content/8",[9,1.711,16,0.589,17,0.401,21,0.312,33,2.582,34,1.552,35,2.582,36,2.582,37,2.582,38,2.582,39,2.582,40,2.582,41,2.582,42,2.582,43,2.177,44,1.552,45,2.582]],["tags/8",[]],["title/9",[21,0.218]],["content/9",[16,0.565,17,0.554,21,0.357,46,2.372,47,2.372,48,2.372,49,2.372,50,2.372,51,2.372,52,2.372,53,1.755,54,2.372,55,2.372,56,2.372]],["tags/9",[]],["title/10",[21,0.218]],["content/10",[6,2.096,21,0.379,34,1.703,53,2.096,57,2.833,58,2.389,59,2.833,60,2.096]],["tags/10",[]],["title/11",[21,0.218]],["content/11",[16,0.583,17,0.854,21,0.221,34,2.25,61,3.743,62,3.156,63,3.743]],["tags/11",[]],["title/12",[64,3.107]],["content/12",[16,0.55,64,3.909,65,4.636,66,4.636]],["tags/12",[]],["title/13",[21,0.218]],["content/13",[16,0.509,17,0.668,21,0.317,62,3.621,67,3.621]],["tags/13",[]],["title/14",[21,0.218]],["content/14",[21,0.297,68,5.037]],["tags/14",[]],["title/15",[21,0.218]],["content/15",[69,3.895]],["tags/15",[]],["title/16",[21,0.218]],["content/16",[21,0.352,67,2.511,70,2.978,71,2.978,72,2.978,73,2.978,74,2.978,75,4.879,76,2.978,77,2.978]],["tags/16",[]],["title/17",[21,0.218]],["content/17",[16,0.491,17,0.644,21,0.245,32,3.492,69,3.065,78,4.142,79,4.142]],["tags/17",[]],["title/18",[21,0.218]],["content/18",[80,5.265]],["tags/18",[]],["title/19",[21,0.218]],["content/19",[81,5.265]],["tags/19",[]],["title/1",[82,2.767,83,2.767]],["content/1",[9,3.2,16,0.573,17,0.751]],["tags/1",[8,0.429,9,0.429]],["title/34",[21,0.218]],["content/34",[16,0.609,17,0.798,44,2.405,84,4,85,4,86,4]],["tags/34",[8,0.768]],["title/35",[16,0.328,17,0.43]],["content/35",[16,0.573,43,4.071,87,4.828]],["tags/35",[]],["title/36",[16,0.328,44,1.663]],["content/36",[16,0.444,17,0.582,21,0.29,44,2.25,88,3.743,89,3.743,90,3.743,91,3.743,92,3.743]],["tags/36",[]],["title/37",[16,0.328,17,0.43]],["content/37",[7,2.261,16,0.362,17,0.475,21,0.253,93,3.056,94,3.056,95,3.056,96,3.056,97,3.056,98,3.613,99,3.171,100,3.056,101,2.577,102,3.056]],["tags/37",[]],["title/38",[21,0.218]],["content/38",[3,0.749,16,0.364,17,0.477,21,0.181,34,0.679,53,0.836,98,1.646,99,1.907,103,1.13,104,1.13,105,1.13,106,1.13,107,1.13,108,1.13,109,1.13,110,1.13,111,1.13,112,1.13,113,1.13,114,1.13,115,1.13,116,1.13,117,1.13,118,1.13,119,1.13,120,1.13,121,1.13,122,1.13,123,1.13,124,1.13,125,1.13,126,1.13,127,1.13,128,1.13,129,1.13,130,1.13,131,1.13,132,1.13,133,1.646,134,1.13,135,1.13,136,1.13,137,1.13,138,1.13,139,1.13,140,1.13,141,1.13,142,1.13,143,1.952,144,1.13,145,1.13,146,0.953,147,1.13,148,1.13,149,1.13,150,1.13,151,1.13,152,1.13,153,1.13,154,1.13,155,1.13,156,1.13,157,1.13,158,1.13,159,1.13,160,1.13,161,1.13,162,1.13]],["tags/38",[]],["title/39",[21,0.218]],["content/39",[17,0.668,34,2.582,44,2.582,163,4.295,164,4.295,165,4.295]],["tags/39",[]],["title/40",[21,0.218]],["content/40",[16,0.295,17,0.291,21,0.33,58,0.909,99,0.797,101,0.909,166,1.078,167,1.078,168,1.078,169,1.078,170,1.078,171,1.078,172,1.078,173,1.078,174,1.874,175,1.078,176,1.078,177,3.691,178,1.078,179,1.078,180,1.078,181,3.365,182,1.874,183,0.909,184,1.078,185,1.874,186,1.078,187,1.874,188,1.58,189,1.078,190,1.078,191,1.078,192,1.078,193,1.874,194,1.078,195,1.078,196,1.874,197,1.078,198,1.078,199,1.58,200,1.078,201,1.078,202,1.078,203,1.078,204,1.078,205,1.078,206,1.078,207,1.078]],["tags/40",[]],["title/41",[21,0.218]],["content/41",[16,0.609,17,0.622,21,0.353,208,4]],["tags/41",[]],["title/42",[21,0.218]],["content/42",[3,1.194,21,0.17,133,1.519,146,0.869,183,0.869,188,1.519,199,0.869,209,1.03,210,1.801,211,1.801,212,1.03,213,1.03,214,1.03,215,1.03,216,1.801,217,1.03,218,1.03,219,1.801,220,1.03,221,1.03,222,1.801,223,1.03,224,1.801,225,1.03,226,3.596,227,2.428,228,1.03,229,1.03,230,3.596,231,3.596,232,1.03,233,1.03,234,1.03,235,1.03,236,1.03,237,1.801,238,1.03,239,1.03,240,1.03,241,1.03,242,1.03,243,1.03,244,1.03,245,1.03,246,1.03,247,1.03,248,1.03,249,1.03,250,1.03,251,1.03,252,1.03,253,1.03,254,1.03,255,1.03,256,1.03,257,1.03,258,1.03,259,1.03,260,1.03,261,1.03,262,1.03]],["tags/42",[]],["title/43",[21,0.218]],["content/43",[16,0.491,17,0.644,21,0.358,263,4.142]],["tags/43",[]],["title/44",[21,0.218]],["content/44",[21,0.352,264,4.459,265,4.459]],["tags/44",[]],["title/45",[266,3.107]],["content/45",[16,0.509,17,0.668,21,0.254,267,4.295,268,4.295,269,4.295]],["tags/45",[]],["title/46",[21,0.218]],["content/46",[16,0.43,21,0.319,270,3.626,271,3.626,272,3.626,273,3.626,274,3.626,275,3.626,276,3.058]],["tags/46",[]],["title/47",[266,3.107]],["content/47",[277,4.459,278,4.459,279,4.459,280,4.459,281,4.459]],["tags/47",[]],["title/48",[60,2.726]],["content/48",[60,3.178,282,4.295,283,4.295,284,4.295,285,4.295,286,4.295]],["tags/48",[]],["title/49",[21,0.218]],["content/49",[227,3.261,287,3.867,288,3.867,289,3.867,290,3.867,291,3.867,292,3.867,293,3.867,294,3.867]],["tags/49",[]],["title/50",[21,0.218]],["content/50",[21,0.311]],["tags/50",[]],["title/51",[16,0.328,17,0.43]],["content/51",[16,0.668,17,0.721,295,4.636]],["tags/51",[]],["title/52",[21,0.218]],["content/52",[21,0.285,69,3.573,276,4.071]],["tags/52",[]],["title/53",[21,0.218]],["content/53",[21,0.311]],["tags/53",[]]],"invertedIndex":[["",{"_index":21,"title":{"6":{},"7":{},"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"34":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"46":{},"49":{},"50":{},"52":{},"53":{}},"content":{"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"16":{},"17":{},"36":{},"37":{},"38":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"50":{},"52":{},"53":{}},"tags":{}}],["0.5",{"_index":55,"title":{},"content":{"9":{}},"tags":{}}],["00",{"_index":75,"title":{},"content":{"16":{}},"tags":{}}],["10",{"_index":62,"title":{},"content":{"11":{},"13":{}},"tags":{}}],["10的图书榜单,编程相关的是:《编译原理》、《erlang程序设计(第2版)》、《编程语言实现模式》、《游戏机制》、《链接器与加载器》、《data",{"_index":291,"title":{},"content":{"49":{}},"tags":{}}],["1189",{"_index":71,"title":{},"content":{"16":{}},"tags":{}}],["13",{"_index":73,"title":{},"content":{"16":{}},"tags":{}}],["14",{"_index":74,"title":{},"content":{"16":{}},"tags":{}}],["17",{"_index":76,"title":{},"content":{"16":{}},"tags":{}}],["18",{"_index":77,"title":{},"content":{"16":{}},"tags":{}}],["20",{"_index":67,"title":{},"content":{"13":{},"16":{}},"tags":{}}],["2018年的全国图形渲染技术巡讲,一个人围绕一个主题讲3~4个小时,在中国这种会议几乎是绝无仅有的,那种系统和深度远不是那种15~45",{"_index":30,"title":{},"content":{"7":{}},"tags":{}}],["2022年4.30日从华为离职并开始研究和设计realiti",{"_index":268,"title":{},"content":{"45":{}},"tags":{}}],["2022年4.30日从华为离职,几乎整整一年时间全部都在思考整个系统的设计,以及后期的开发。刚开始2",{"_index":287,"title":{},"content":{"49":{}},"tags":{}}],["2023",{"_index":15,"title":{},"content":{"4":{}},"tags":{}}],["2023.10.22",{"_index":70,"title":{},"content":{"16":{}},"tags":{}}],["3",{"_index":32,"title":{},"content":{"7":{},"17":{}},"tags":{}}],["3.0、元宇宙、以及大模型ai应用的持续不断出现,人们对未来数字化的预期会越来越大,未来的数字化形态必然会发生一些变化。但是目前很多因素糅合在一起使得我们很难去看到清楚的路径,这里面必然涉及到底层技术以及上层产品形态的相互驱动及进化,任何单一实体可能都很难从这种耦合中看到清晰的逻辑。所以real",{"_index":63,"title":{},"content":{"11":{}},"tags":{}}],["3.0和元宇宙的出现,这两种新的应用形态似乎都在尝试构建一个共享、互操作的数字世界。这要求应用之间需要高度交互能力,然而这种需求和传统的软件构造方法是天生相悖的,传统软件构造方法建立内存隔离的目的就是保护数据和内存中数据的安全,它的一个基本的安全底座就是系统的内存环境会保护程序内所有的数据,因此传统的编程语言和软件构造方法就没有太多专门针对这些数据的保护措施,但是当我们去掉这个内存保护,要求很多匿名的软件在一个内存环境中进行运行的时候,这种安全性怎么保证。虽然web",{"_index":52,"title":{},"content":{"9":{}},"tags":{}}],["3.0(去中心化)。尽管这三者之间的概念以及技术需求都是很模糊的,我们则尝试在这三者之间寻找一种统一的计算架构和软件构造方法。所以这就是realiti",{"_index":35,"title":{},"content":{"8":{}},"tags":{}}],["3d引擎的能力以使用户可以开发3d应用程序,但这部分技术跟传统的游戏引擎使用的技术不会有太大差异,当然因为运行时环境不同,与之相关的3d引擎的架构和流程肯定会有一些变化,所以我预期将来realiti",{"_index":90,"title":{},"content":{"36":{}},"tags":{}}],["3d渲染,realiti",{"_index":91,"title":{},"content":{"36":{}},"tags":{}}],["3d,然后期望人们有些更多沉浸式的虚拟生活。这在某种程度上说跟realiti",{"_index":93,"title":{},"content":{"37":{}},"tags":{}}],["3~4",{"_index":47,"title":{},"content":{"9":{}},"tags":{}}],["3部分讨论的内容。然而比较巧合和惊讶的是,至少从我们的设计思路上看:让普通人会编写代码与让ai",{"_index":270,"title":{},"content":{"46":{}},"tags":{}}],["40",{"_index":48,"title":{},"content":{"9":{}},"tags":{}}],["40%的内容中为什么要这么设计的问题。过去几十年来应用构造的体系基本上都是围绕构建一个单一的程序体被隔离在单一的内存中运行的,在这种背景下,软件之间的功能通常都是相互隔离的,甚至即使是属于同一个用户不同应用之间的数据,虽然看起来都是同一个用户的数据,但是不同的软件之间却无法访问。这种机制在过去几十年都能够很好地解决我们的数字化的问题,直到web",{"_index":51,"title":{},"content":{"9":{}},"tags":{}}],["5",{"_index":61,"title":{},"content":{"11":{}},"tags":{}}],["50",{"_index":288,"title":{},"content":{"49":{}},"tags":{}}],["60",{"_index":49,"title":{},"content":{"9":{}},"tags":{}}],["7月左右,那个时候我的基本架构的构思已经初步完成,尤其是最核心也是最重要的一步基础已经设计好,当时看到这篇演讲感到很多共鸣,也是对自己的一种很大的激励,毕竟有对技术和行业都有非常经验和影响力的大佬也有类似的思考和行动。但从去年到现在,我们还是沿着我们早先的技术思路,基本上并没有去关注和参考太多epic",{"_index":106,"title":{},"content":{"38":{}},"tags":{}}],["ai",{"_index":266,"title":{"45":{},"47":{}},"content":{},"tags":{}}],["ai到底能不能或者什么时候替代程序员,我们回到问题本身。传统的文本合成,计算的是文字与文字之间,句子与句子之间的组合概率,这里有两个事情值得注意:第一是任何字之间都可以组合,所以chatgpt总是可以给我们答案,哪怕其中的句子组合和逻辑是完全错误的;第二是一般常用于表述正确语法和语义的哪些文字信息是非常多的,也就是说chatgpt",{"_index":272,"title":{},"content":{"46":{}},"tags":{}}],["ai去生成程序,这里ai",{"_index":275,"title":{},"content":{"46":{}},"tags":{}}],["ai构造复杂的程序逻辑相比,更好的使用方式可能是autogpt或者openai的插件系统,在这种架构中,ai",{"_index":277,"title":{},"content":{"47":{}},"tags":{}}],["ai能够生成代码,这件事情肯定是非常复杂的,当然由于chatgpt的出现相信现在大部分程序员都能够感受到ai的代码生成能力,有些人比较坚信ai",{"_index":271,"title":{},"content":{"46":{}},"tags":{}}],["alan",{"_index":219,"title":{},"content":{"42":{}},"tags":{}}],["alway",{"_index":242,"title":{},"content":{"42":{}},"tags":{}}],["api从哪里获取等等,这远远超出简单文字合成的范围。你可以合成一个文本组合的源代码结果,但是其中的逻辑可能完全是错误的,函数是不存在的,参数是错误的。因此目前来讲,大部分ai",{"_index":273,"title":{},"content":{"46":{}},"tags":{}}],["api包装使用某种形式的标准包装成外部接口,这样就造成碎片化,因为即使是针对同样的一类逻辑和数据,不同的应用程序或服务往往会定义不同的数据结构或处理逻辑,这就形成api的碎片化,使得相互之间非常难以协作。试想你可以在两个应用之间协商修改各自的api",{"_index":170,"title":{},"content":{"40":{}},"tags":{}}],["api碎片化的第二个例子是llvm,本质上llvm在编译器领域的创新主要做的是模块化,早期的编译器开发,各个前端都要分别集成各个后端,编译器开发的复杂度非常高,这里面其实就是多对多的问题,看似很简单,每个前端与每个后端分别调一调,但随之代码的管理和维护成本是很高的,有时候某些内部设计不一致就会导致大量的重复,这就是碎片化问题。由内而外的设计总是不可避免会导致碎片化,碎片化带来软件复杂度,管理和研发成本。当llvm提供了一个统一的低层ir表述之后,编译器的复杂度大大降低,比如现在能够很轻易地开发一些dsl语言,因为你完全不需要操心后端,只需要把你的代码生成llvm",{"_index":173,"title":{},"content":{"40":{}},"tags":{}}],["app",{"_index":112,"title":{},"content":{"38":{}},"tags":{}}],["applic",{"_index":7,"title":{"3":{}},"content":{"4":{},"37":{}},"tags":{}}],["arealityworld",{"_index":69,"title":{},"content":{"15":{},"17":{},"52":{}},"tags":{}}],["armstrong",{"_index":216,"title":{},"content":{"42":{}},"tags":{}}],["armstrong的一段采访:ralph",{"_index":213,"title":{},"content":{"42":{}},"tags":{}}],["armstrong觉得oo编程很烂?,其中引用到erlang之父jo",{"_index":212,"title":{},"content":{"42":{}},"tags":{}}],["armstrong说,根据alan",{"_index":249,"title":{},"content":{"42":{}},"tags":{}}],["article{qin2023convers",{"_index":19,"title":{},"content":{"4":{}},"tags":{}}],["assembl",{"_index":53,"title":{},"content":{"9":{},"10":{},"38":{}},"tags":{}}],["assembly、machinations、《堡垒之夜》、snapchat、bevi",{"_index":294,"title":{},"content":{"49":{}},"tags":{}}],["assembly之前还没有一种技术可以很好地普及和运用沙盒技术,例如jvm上有一些方案,但大多有些性能问题,或者不能完全保证安全,或者方案比较重。web",{"_index":129,"title":{},"content":{"38":{}},"tags":{}}],["assembly之所以是一种未来非常有潜力的技术,不仅仅得益于对web的友好,接近机器码的字节码,多语言支持等等,这种沙盒技术也是很大的一个技术点。在web",{"_index":128,"title":{},"content":{"38":{}},"tags":{}}],["assembly就使用另一个思路,由于web",{"_index":121,"title":{},"content":{"38":{}},"tags":{}}],["assembly有机会对程序进行一定的分析,通过基于control",{"_index":123,"title":{},"content":{"38":{}},"tags":{}}],["assembly的编译器可以检查出程序中哪些代码可能会对这种沙盒环境造成破坏,从而禁止这样的代码生成合法的wasm",{"_index":127,"title":{},"content":{"38":{}},"tags":{}}],["assembly的隔离技术非常优异,但是它并没有改变程序本身的构造方式,即如果你的代码本身就不含破坏别人的恶意代码,那么其实你的开发过程与过去的方式并没有什么区别。而r",{"_index":163,"title":{},"content":{"39":{}},"tags":{}}],["assembly程序都会编译为wasm文件,由wasm虚拟机解释执行,而不是底层的二进制代码,所以web",{"_index":122,"title":{},"content":{"38":{}},"tags":{}}],["assembly这种优秀的沙盒技术使得沙盒模式在以后的软件构造中可能被大规模使用,也就会实现更多的软件协作与分工,事实上比如现在对未受信任多应用环境要求比较高的环境如区块链就大多转型web",{"_index":130,"title":{},"content":{"38":{}},"tags":{}}],["assembly,而如docker和severless这种对虚拟环境要求比较高的环境也在逐步转向web",{"_index":131,"title":{},"content":{"38":{}},"tags":{}}],["author",{"_index":22,"title":{},"content":{"4":{}},"tags":{}}],["a开发了某个应用给用户新增了一种新的健康类的数据信息,这个数据本来是属于用户的,这个时候用户想要用这个数据来实现另一个事情,ta想自己或者说让其他开发者b帮助开发一个应用来使用这些数据,这种情况下通常是做不到的,因为开发者a可能并没有太多动力去提供这个接口,因为ta可能要耗费很大的精力,除非平台提供一些这种非常便利的机制使得ta",{"_index":169,"title":{},"content":{"40":{}},"tags":{}}],["back",{"_index":246,"title":{},"content":{"42":{}},"tags":{}}],["base",{"_index":114,"title":{},"content":{"38":{}},"tags":{}}],["bit",{"_index":257,"title":{},"content":{"42":{}},"tags":{}}],["bug",{"_index":110,"title":{},"content":{"38":{}},"tags":{}}],["c",{"_index":187,"title":{},"content":{"40":{}},"tags":{}}],["c#、c、c++、ruby、lua、rust",{"_index":209,"title":{},"content":{"42":{}},"tags":{}}],["c++/c进行开发,进行了一些简单的语言包装和编译流程定制。因为我们2号员工一直是rust爱好者,一直在鼓动我使用rust,虽然之前看过rust的一些介绍,但是感觉还是没有特别的动力去完全切换到rust",{"_index":282,"title":{},"content":{"48":{}},"tags":{}}],["c++中也经常会存在对象复制;再有稍微复杂一点就是使用move,先将数据mov",{"_index":286,"title":{},"content":{"48":{}},"tags":{}}],["c++那样到处是相互引用显然几乎肯定是你完全没法通过编译器,你得设计好整个程序对象的结构,这里推荐bevi",{"_index":285,"title":{},"content":{"48":{}},"tags":{}}],["call",{"_index":164,"title":{},"content":{"39":{}},"tags":{}}],["capabl",{"_index":151,"title":{},"content":{"38":{}},"tags":{}}],["cfi)技术,web",{"_index":126,"title":{},"content":{"38":{}},"tags":{}}],["characterist",{"_index":142,"title":{},"content":{"38":{}},"tags":{}}],["chatgpt",{"_index":276,"title":{},"content":{"46":{},"52":{}},"tags":{}}],["chatgpt席卷了整个世界,或者至少是科技圈,不管是从资本,国企,民企,程序员个人等等都是受到很大的影响,当然也有像我们小孩的妈妈,以及他妈妈的朋友,目前还不太了解chatgpt",{"_index":267,"title":{},"content":{"45":{}},"tags":{}}],["chunlin",{"_index":13,"title":{},"content":{"4":{}},"tags":{}}],["citat",{"_index":10,"title":{"4":{}},"content":{},"tags":{}}],["cite",{"_index":11,"title":{},"content":{"4":{}},"tags":{}}],["class",{"_index":188,"title":{},"content":{"40":{},"42":{}},"tags":{}}],["client",{"_index":117,"title":{},"content":{"38":{}},"tags":{}}],["co",{"_index":37,"title":{},"content":{"8":{}},"tags":{}}],["cocos2d",{"_index":78,"title":{},"content":{"17":{}},"tags":{}}],["cogin",{"_index":9,"title":{},"content":{"1":{},"8":{}},"tags":{"1":{},"3":{}}}],["common",{"_index":158,"title":{},"content":{"38":{}},"tags":{}}],["commondata",{"_index":148,"title":{},"content":{"38":{}},"tags":{}}],["commun",{"_index":152,"title":{},"content":{"38":{}},"tags":{}}],["complet",{"_index":228,"title":{},"content":{"42":{}},"tags":{}}],["complex",{"_index":38,"title":{},"content":{"8":{}},"tags":{}}],["compos",{"_index":102,"title":{},"content":{"37":{}},"tags":{}}],["comput",{"_index":1,"title":{"3":{}},"content":{"4":{}},"tags":{}}],["computing,或者convers",{"_index":40,"title":{},"content":{"8":{}},"tags":{}}],["computing,这些术语都是cogin",{"_index":41,"title":{},"content":{"8":{}},"tags":{}}],["context",{"_index":196,"title":{},"content":{"40":{}},"tags":{}}],["convention)来设计隔离机制,这样使得不需要对用户的开发过程造成太大的影响。在r",{"_index":165,"title":{},"content":{"39":{}},"tags":{}}],["convers",{"_index":0,"title":{"3":{}},"content":{"4":{}},"tags":{}}],["cppnamespac",{"_index":191,"title":{},"content":{"40":{}},"tags":{}}],["creat",{"_index":44,"title":{"36":{}},"content":{"8":{},"34":{},"36":{},"39":{}},"tags":{}}],["create也包含的3d支持,在我与投资人或者其他朋友交流的过程中,大家普遍的印象是这是一个新的游戏引擎,所以大家的思路就是你跟unity,unr",{"_index":87,"title":{},"content":{"35":{}},"tags":{}}],["create的计划也可以开发2d应用程序,所以我们是用一种统一的编程语言和运行时环境,来统一3d和传统2d",{"_index":92,"title":{},"content":{"36":{}},"tags":{}}],["creativ",{"_index":109,"title":{},"content":{"38":{}},"tags":{}}],["c接口实现相互调用,再往上一点,任何程序之间传递字符串然后内部进行格式解释,也仍然是能够进行通信的。实际上互联网的机制就是如此,osi(open",{"_index":166,"title":{},"content":{"40":{}},"tags":{}}],["data",{"_index":159,"title":{},"content":{"38":{}},"tags":{}}],["def",{"_index":178,"title":{},"content":{"40":{}},"tags":{}}],["definit",{"_index":189,"title":{},"content":{"40":{}},"tags":{}}],["descript",{"_index":182,"title":{},"content":{"40":{}},"tags":{}}],["design",{"_index":292,"title":{},"content":{"49":{}},"tags":{}}],["dialect",{"_index":177,"title":{},"content":{"40":{}},"tags":{}}],["each",{"_index":153,"title":{},"content":{"38":{}},"tags":{}}],["ec",{"_index":83,"title":{"1":{}},"content":{},"tags":{}}],["ecs/dot",{"_index":57,"title":{},"content":{"10":{}},"tags":{}}],["emphas",{"_index":236,"title":{},"content":{"42":{}},"tags":{}}],["empow",{"_index":5,"title":{"3":{}},"content":{"4":{}},"tags":{}}],["engin",{"_index":43,"title":{},"content":{"8":{},"35":{}},"tags":{}}],["engine去创作,这个模式其实类似roblox的模式,它也是一种游戏引擎这种商业模式的转型:传统的游戏引擎只是一个单机的生成应用程序的软件,开发者开发的内容由自己去分发和运营,这样游戏引擎仅作为一个工具,它只参与程序的开发,而无法参与分发和运营,因此无法形成生态,所以尽管一些引擎有庞大的开发者数量和群体,但是这种数量并没有很有效的方式可以转化为生态。然而roblox和《堡垒之夜》是一个分布式系统,你的内容必须分发到这个分布式系统中并由特定的客户端运行时环境来运行,而无法像单独的游戏引擎那样自行分发和运营,这样roblox",{"_index":108,"title":{},"content":{"38":{}},"tags":{}}],["engine开发脚本语言的团队skookumscript,据说还有写v8",{"_index":140,"title":{},"content":{"38":{}},"tags":{}}],["engine的c++或者blueprint开发的应用程序在《堡垒之夜》内存环境中运行,unr",{"_index":135,"title":{},"content":{"38":{}},"tags":{}}],["engine目前也没有比较成熟的脚本编程语言方案,因此epic需要开发一套新的脚本语言,这就是今年早些时候发布的vers",{"_index":136,"title":{},"content":{"38":{}},"tags":{}}],["epic推出vers",{"_index":132,"title":{},"content":{"38":{}},"tags":{}}],["epic显然不可能让玩家使用unr",{"_index":134,"title":{},"content":{"38":{}},"tags":{}}],["erlang",{"_index":210,"title":{},"content":{"42":{}},"tags":{}}],["erlang、usd、llvm、mlir、ecs、web",{"_index":293,"title":{},"content":{"49":{}},"tags":{}}],["erlang之父jo",{"_index":211,"title":{},"content":{"42":{}},"tags":{}}],["erlang就采用了一种不同的机制,它从语言体系上就不允许对象之间能够直接访问内部数据或方法,每个函数都分配为独立的线程,线程之间只能通过消息进行传递和联系,这样程序员就很难写出耦合比较深的代码,同时这种隔离对并行计算和分布式也带来了好处。所以jo",{"_index":248,"title":{},"content":{"42":{}},"tags":{}}],["erlang的整个架构设计,这也是为什么erlang",{"_index":260,"title":{},"content":{"42":{}},"tags":{}}],["erlang看起来是一种完美的架构,然而消息通信是一种操作起来不太便利的方式,比如为了进一步解耦它通常是传递字符串消息,字符串需要编解码,带来了性能问题;而另一方面消息编程模型通常是异步的,使得对逻辑的流程管理失去了控制力。r",{"_index":261,"title":{},"content":{"42":{}},"tags":{}}],["evolut",{"_index":82,"title":{"1":{}},"content":{},"tags":{}}],["evolv",{"_index":97,"title":{},"content":{"37":{}},"tags":{}}],["exampl",{"_index":157,"title":{},"content":{"38":{}},"tags":{}}],["exhibitsyntact",{"_index":154,"title":{},"content":{"38":{}},"tags":{}}],["famou",{"_index":223,"title":{},"content":{"42":{}},"tags":{}}],["fault",{"_index":115,"title":{},"content":{"38":{}},"tags":{}}],["flow",{"_index":124,"title":{},"content":{"38":{}},"tags":{}}],["format",{"_index":160,"title":{},"content":{"38":{}},"tags":{}}],["formatsandcommun",{"_index":149,"title":{},"content":{"38":{}},"tags":{}}],["getdialectnamespac",{"_index":202,"title":{},"content":{"40":{}},"tags":{}}],["gine",{"_index":42,"title":{},"content":{"8":{}},"tags":{}}],["graphql",{"_index":265,"title":{},"content":{"44":{}},"tags":{}}],["grapql",{"_index":264,"title":{},"content":{"44":{}},"tags":{}}],["himself",{"_index":221,"title":{},"content":{"42":{}},"tags":{}}],["html、xml、sql、usd等等,比如nvidia就基于usd构建了omniverse,由于其对usd格式的良好支持,使得其可以兼容大部分的内容制作工具,就构建起一个以omnivers",{"_index":168,"title":{},"content":{"40":{}},"tags":{}}],["https://9371398676573.huodongxing.com/event/1723877940100",{"_index":81,"title":{},"content":{"19":{}},"tags":{}}],["https://github.com/cogine/realityworld",{"_index":68,"title":{},"content":{"14":{}},"tags":{}}],["https://realityworld.com",{"_index":80,"title":{},"content":{"18":{}},"tags":{}}],["https://realityworld.com/blog/convers",{"_index":18,"title":{},"content":{"4":{}},"tags":{}}],["initi",{"_index":199,"title":{},"content":{"40":{},"42":{}},"tags":{}}],["integr",{"_index":125,"title":{},"content":{"38":{}},"tags":{}}],["interconnect",{"_index":167,"title":{},"content":{"40":{}},"tags":{}}],["interoper",{"_index":98,"title":{},"content":{"37":{},"38":{}},"tags":{}}],["iphone的备忘录app记录一些想法,这种方式比较方便,任何时候想到一点东西就可以记下来,很多时候晚上半夜都会起来记录,确实有些东西很快就是可以忘记的。后来体系比较完整的时候我逐步将这些信息整理到markdown中,并逐步积累,现在整个系统的设计和思考已经超过22万字,整整400",{"_index":289,"title":{},"content":{"49":{}},"tags":{}}],["ir",{"_index":174,"title":{},"content":{"40":{}},"tags":{}}],["ir就可以能够被轻易组合使用,你可以选择社区各种丰富的模块进行组合,来生成特定的编译流程,所以mlir又称作“生成编译器的编译器”。实际上,碎片化在工业界是一个很大的问题,每家公司在开发自己的软件的时候不会考虑那么多,觉得我只要投入研发资源把自己软件做好就行,但是真正在用户侧使用的时候,ta可能需要多个软件是可以相互协作的,甚至你的用户可能就是开发者,这个开发者可能希望不同的软件可以被更高效的集成和管理。llvm的作者chri",{"_index":205,"title":{},"content":{"40":{}},"tags":{}}],["ir更上层的抽象,所以我们对多层级ir表述又有了需求,于是在llvm的基础上又发展出mlir,它允许开发者社区能够自定义ir。然而与usd的schema非常相似的地方是,mlir为了避免碎片化,使不同开发者自定义的ir之间能够更轻易的协作,它也提供了一种类似的代码生成机制,在mlir中称为dialect",{"_index":176,"title":{},"content":{"40":{}},"tags":{}}],["isol",{"_index":251,"title":{},"content":{"42":{}},"tags":{}}],["isolation,sfi)技术,相对应操作系统或硬件的内存隔离,sfi是用于构建包含未信任组件的安全系统的一种轻量级方法,能够用于减少由于内存安全bug导致的攻击,sfi通过严格将第三方未信任软件限制在自己的沙盒内存区域,来隔离这种内存安全导致的破坏。用例包括浏览器使用sfi来扩展第三方组件,例如经典的n",{"_index":116,"title":{},"content":{"38":{}},"tags":{}}],["it'",{"_index":230,"title":{},"content":{"42":{}},"tags":{}}],["joe",{"_index":215,"title":{},"content":{"42":{}},"tags":{}}],["johnson",{"_index":214,"title":{},"content":{"42":{}},"tags":{}}],["jones,以及之前收购的一个为unr",{"_index":139,"title":{},"content":{"38":{}},"tags":{}}],["journal",{"_index":23,"title":{},"content":{"4":{}},"tags":{}}],["kay",{"_index":220,"title":{},"content":{"42":{}},"tags":{}}],["kay的描述,erlang",{"_index":250,"title":{},"content":{"42":{}},"tags":{}}],["kay认为oop的核心是关于消息,但是这样说其实我个人觉得并不太好理解到本质,因为消息更像是oop这种设计下的一种机制或结果,而不是oop本身的定义。我觉得oop的本质应该是隔离,只有做到真正的隔离,才能真正降低系统的复杂度,因为绝对的隔离使得你完全不需要也不能了解另一个物体内部的运作,你们只需要通过一些外在的属性进行交互,我们的开发也仅需要了解这些简单的外在属性。现代大部分编程语言更强调的是object和class",{"_index":247,"title":{},"content":{"42":{}},"tags":{}}],["languag",{"_index":133,"title":{},"content":{"38":{},"42":{}},"tags":{}}],["language。epic为此挖来了haskell的作者simon",{"_index":137,"title":{},"content":{"38":{}},"tags":{}}],["lattner最新的创业公司modular实际上核心就是解决这个问题,他的新编程语言mojo,除了一些语法层面的传统一点的东西,很多核心能力都是来源于底层的mlir,其中mlir跟mojo有更深度的整合,使得mojo具有很强的元编程能力。modular的最核心的逻辑其实跟当年的llvm类似,解决碎片化问题,当然modular",{"_index":206,"title":{},"content":{"40":{}},"tags":{}}],["licens",{"_index":64,"title":{"12":{}},"content":{"12":{}},"tags":{}}],["llm",{"_index":6,"title":{"3":{}},"content":{"4":{},"10":{}},"tags":{}}],["llvm/mlir",{"_index":59,"title":{},"content":{"10":{}},"tags":{}}],["llvm::stringref",{"_index":201,"title":{},"content":{"40":{}},"tags":{}}],["llvm并没有提供类似usd那种生成格式的机制,那是因为llvm只有一种ir,所以写成一种固定的格式即可,过去的编译流程基本上都比较简单、固定。但是随着现代深度学习编译器的进展,由于深度学习有着相对比较特定的数据表述,各个公司内部都有开发一些特定的编译流程,它是比一般的llvm",{"_index":175,"title":{},"content":{"40":{}},"tags":{}}],["longer",{"_index":184,"title":{},"content":{"40":{}},"tags":{}}],["lot",{"_index":238,"title":{},"content":{"42":{}},"tags":{}}],["lua,它们通常不能直接访问内存,开发者所能操作的都是封装在一定类型和对象中,现代大多数编程语言都按照类型进行寻址,也即是类型系统本身基本上可以保证程序的安全,如果你的源代码不知道一个对象的地址,你就不可能访问到它。然而实际现在大多数编程语言都提供静态变量或者全局常量之类的方式,这种方式使得内存环境中的其他代码可以获取到这些共享信息,从而对软件进行破坏。为了避免这种问题,roblox就对lua进行了改造,叫做luau,比如通过禁止全局变量,以及禁止一些能够访问全局变量的库函数等等机制来实现一种沙盒安全,这样第三方开发者开发的代码就可以放心地在roblox",{"_index":111,"title":{},"content":{"38":{}},"tags":{}}],["messag",{"_index":231,"title":{},"content":{"42":{}},"tags":{}}],["method",{"_index":234,"title":{},"content":{"42":{}},"tags":{}}],["misunderstood",{"_index":229,"title":{},"content":{"42":{}},"tags":{}}],["mit",{"_index":66,"title":{},"content":{"12":{}},"tags":{}}],["mlir::dialect",{"_index":194,"title":{},"content":{"40":{}},"tags":{}}],["mlir::dialect(\"toy",{"_index":197,"title":{},"content":{"40":{}},"tags":{}}],["mlir::typeid::getSelf-deploying | Creating an intelligent reality with AI - - + +
    @@ -16,7 +16,7 @@ Reality World开源社区群
    过期请加:ARealityWorld
    - - + + \ No newline at end of file diff --git a/zh/whitepaper/index.html b/zh/whitepaper/index.html index e7d9d6c..fa4c947 100644 --- a/zh/whitepaper/index.html +++ b/zh/whitepaper/index.html @@ -6,17 +6,17 @@ Creating an intelligent reality with AI - - + +
    -

    一种自我进化的、可互操作的分布式应用系统


    秦春林


    Reality World是一个以互操作性为核心目标的分布式系统和架构,它的愿景是构造一个无边的数字世界,使得任何人都可以向这个系统动态添加新的子程序,这些子程序可以和其它子程序任意交互,这个系统可以像生物系统一样自我进化,从而通过复杂系统的机制涌现出更加智能、丰富和个性化的数字世界体验。

    摘要

    近年来,随着区块链、元宇宙以及大模型的发展,数字世界的构建逻辑和使用形态都发生了很大变化。然而总体而言,目前并没有比较成熟的专门面向这些新型特征应用的底层架构,甚至还没有形成比较清晰和统一的思路,比如这种架构应该有哪些新的特征、形态以及设计目标。尝试构建这样的一套新的方法体系是非常复杂的,我认为核心的难点在于很难单从软件架构的视角去解决这一问题。比如元宇宙类应用,表面上看我们可以在现有的引擎架构上去构建,然后元宇宙背后的核心逻辑是互操作性,它要求来自不同开发者创建的应用之间能够进行交互,从而提供更动态、多元和个性化的数字化体验,然而互操作性和传统的软件开发逻辑是相悖的。再比如多智能体类应用,最近更多的工作意识到这类应用的逻辑更可能需要很多具有独立功能的小智能体进行相互协作来实现,这种多智能体相互协作的逻辑跟复杂系统的行为是类似的,然而我们当前的编程模式并没有针对这样的思想进行设计。从上面的论述可以看出,未来数字世界的软件构造方法,需要考虑更多的跨领域知识体系。本文正是通过对传统的软件架构方法(如面向对象和函数式编程模型)、编程语言及其编译过程和链接过程、区块链、复杂系统、游戏应用架构等跨领域知识进行系统分析,结合这些新型应用的特征,提出了一套系统的架构体系,它包括清晰的设计原则、目标、方法哲学,以及一个包含核心机制的源代码实现。希望此工作可以对未来数字世界基础架构的设计、研究和开发提供有益的指引。


    问题

    近几年,数字世界的形态发生着巨大的变化,一方面似乎是面对互联网红利的逐渐下降,人们需要新的科技引爆点;但另一方面,这些新的概念也在某种程度上折射出一个信息:那就是我们生活中的数字化还不够彻底,还不够丰富,还没有完全释放它全部的力量。

    例如在Web 3.0的概念中,我们希望我们的隐私和资产能够不被少数中心化的实体所控制;在元宇宙的概念中,我们希望任何人能够进行更自由地创造数字内容,并使我们的数字分身连同我们的很多能力能够在跨域多个虚拟世界中进行互操作,从而提供接近现实世界的数字生活体验;而在大模型应用中,随着大模型对人类任意指令的语义理解,固定的软件逻辑似乎无法应付这种逻辑复杂度,我们希望应用内部能够更智能地协调和调度正确的功能来解决任意的问题,而不是像过去那样提供固定结构和功能的软件。

    所有这些新的需求可能都意味着我们需要新的思维和方法来构建应用,而人们自然是希望基于现有的软件工程体系,能够进行少量的架构设计,来实现上述这些应用的开发。本节我们就来看几个基本的问题,从而理解我们现行的体系在解决这些问题方面会遇到哪些挑战,这些问题的理解也为后面的架构设计提供重要的依据。

    当然,这只是几个典型问题,本文后面的内容还会讨论更多的相关问题。

    去中心化和数据安全

    我们现代整个构建软件的方法体系,不管是底层的编程语言及其提供的一些编程模式,如面向对象或函数式编程,还是中间一些帮助构建各种应用的工具,如游戏引擎和各种开发框架,都是基于这样一个前提或假设:即程序拥有所有的权力,程序可以控制和访问一切数据,不管是内存中的数据,还是应用本地持久化存储的数据,还是应用存储到云端的数据。这样做的目的是简化编程模型,这种简化的思想体现在两个层面:

    • 操作系统为每个应用分配独立的内存空间,因此通过这种简单的内存隔离就可以保证应用的数据安全
    • 将应用内产生的用户数据的管理交给开发商,由他们负责保证数据的安全

    从上面的机制可以看出,尽管现在各国都应相应的合规法律来保护用户的隐私数据不能被非法上传或使用,但实际在操作层面,很多数据的交互涉及到功能层面,例如需要在云端与来自其它用户的数据进行计算,所以很多数据其实很难界定,因此我们的隐私数据一般只包含部分数据,而还有很多应用执行过程中产生的数据也是对用户而言很重要的。

    由于应用程序对数据的天生的权限,使得软件开发商天然的成为一个中心化的实体,掌控着所有用户的数据。尽管很多时候,这种中心化的管理带来了很多便利和效率,但是对于用户而言损失则是很大的,除了数据被非常使用的风险,还有包括在平台获取合法收益时不透明性,没有话语权,同时出于竞争考虑,一个应用的数据对同一个用户的其它应用通常是无法互操作的,而这种互操作很多时候对用户来说是很有价值的。

    programming-model

    这里面的根本问题,我觉得是这个编程模型的问题,它将程序的功能和程序执行过程中产生的数据关联在一起,彼此无法分开,如上图(a)所示。想想我们现实生活中的经济模式,一个厂商生产了某件商品,用户购买商品之后,除了简单的售后服务关系,用户和厂商之间就没有其它关系,该商品后续生产的物品都有用户自己拥有,用户可以将这些物品用于任意自己的意图。

    所以,为了更好地保护用户的权益,我们需要一种天生能够将软件的数据和功能分开的机制,本文就会提出一种机制,使得开发者使用类似现有的方法进行软件开发,但是其产生的数据确实天生由用户控制的,换句话说,即使是同一个应用产生的数据,用户都可以在后续的操作中禁止该应用对之前产生数据的访问,而且这种控制方式非常简单,如上图(b)所示。

    这种编程模式的改变,会对应用的形态造成非常深刻的影响,它也会带来更多新的技术上的可能性,使得我们可以构建更加复杂丰富的应用。这些特性也正是元宇宙和Web 3.0数字经济的构建所需要的基本特性:它使得互操作变得简单和可能。

    互操作和用户内容创作

    尽管元宇宙还没有明确的定义和形态,但是它的一些基本特性也慢慢被人们接受,比如虚拟与现实的结合,用户生成内容,去中心化和开放性,以及数字身份,社交和经济系统等等。元宇宙看起来包括了Web 3.0的思想,但是它可能并不寻求所有的数据都保存在区块链上,因为那样在理论上根本无法满足人们的使用体验需求。

    从上面这些特性中,我们可以看出它们对现行的技术体系都会带来很大的挑战。其中关于去中心化和价值交易部分可以由区块链技术来实现,从本文后面也可以看出,互操作性和开放性方面也可以由我们上一节提出的程序架构来实现,然而对于用户创造的程序内容本身,依然存在比较大的挑战。

    真实世界的经济系统的核心,是这个经济系统的大部分参与者都在参与经济生产,通过经济生产创造价值,然后才是交易。想想我们每个人都在上班,创造不同的产品,从事经济生产,然后人们用赚取的工资通过交易来换取其他人生产的有价值的东西,这个系统中的经济价值主要是由所有人一起创造出来的。

    一个繁荣的数字经济系统也不例外,然而我们看现在的数字经济,从事生产活动的人是极少的,根据Deverloper Nation网站统计,2021年世界上只有2430万开发者,预计到2030年也只有4500万开发者,这在人类人口数量中不足0.5%,如下图所示:

    img

    尽管在今年大模型在代码生成上表现出极大的潜力,甚至微软CEO Satya Nadella也提出未来可能借助大模型的能力,使得10亿人可以成为开发人员:

    “I mean, there can be a billion developers. In fact, the world needs a billion developers… So the idea that this is actually a democratizing tool to make access to new technology and access to new knowledge easier, so that the ramp-up on the learning curve is easier.”

    然而随着大模型在辅助代码编程方面的使用,例如Github Copilot,我们也逐渐意识到大模型虽然能够在一定程度上提升开发效率,但是它对专业人员的要求依然很高,换句话说,依然只有比较专业的开发人员才可以更好地使用它。这还只是考虑它在局部代码模块,例如单个函数级的代码生成,还不包括更复杂的程序结构和上下文逻辑管理。实际上如今的大模型在理论上主要以预测前后相关的线性序列来实现内容生成,这种理论在针对程序结构这种非线性、组合式的复杂任务上似乎存在一定的理论限制,如 Faith and Fate:Limits of Transformers on Compositionality 这篇研究工作指出。

    除了编程语言本身,元宇宙类的应用还要求更多的动态性,以及更重要的是在一个宿主程序中安全运行第三方子程序的能力,这会带来非常大的安全性挑战,尽管我们现在有一些如Web Assembly等包含的沙盒技术可以在理论上实现这些机制,但是在根据层面还没有比较简易可靠的框架可以使用,因为这种框架还需要协调应用程序本身的构造和运行机制。

    多智能体相互协作机制

    多智能体(Multi-Agents)是AI领域现在比较热门的一个方向。大模型对于自然语言的理解和对话能力,使得一些借助大模型内部的知识来完成推理和规划的Agent应用广受关注,例如AutoGPT、Generative Agents、BabyAGI等等。然而人们实际在开发中,也由于逐渐受限于大模型的能力,使得单纯简单依靠大模型来推理的Agent会比较难以落地,实际的Agent开发往往还是要涉及大量的逻辑开发,当然其中的逻辑交互主要涉及的是自然语言,也正是受限于大模型在自然语言理解方面的鲁棒性,实际的开发都是需要设置大量精巧的提示词工程才能达到比较好的性能。

    不管是受限于单一Agent在记忆管理方面的不可靠性,还是由于越来越复杂的交互逻辑使得Agent开发和管理的复杂度逐渐增加,越来越多的工作将焦点转移到了多智能体系统上,即通过在一个共享的环境中让多个具有不同决策能力的Agent共同协作来完成一些指定的事情。尽管我们可以使用传统的方法来开发这类多智能体系统,例如基于LangChain,然而实际上多智能体协作机制有一些新的技术特征。

    多智能体主要的技术特征是动态性,由于Agent的数量极多,成百甚至上千,那么这类系统要具备动态的能力,能够动态添加或移除一些Agent,同时具有较好的容错性,其中的某些Agent出现运行错误时,系统可能缺乏某些方面的能力,但是不影响其它能力的正常运行,在这些出现运行错误的Agent恢复运行后整个系统能够动态容纳该能力。

    这看起来像是Actor模型尝试解决的问题,Erlang 是Actor模型比较有知名度的代表,如果我们把一个Agent比作一个线程或者Actor,那么Actor模型的工作机制似乎就可以实现多智能体交互的需求。开源项目 Chidori 也正是基于该理念的一个多智能体开源项目。在这类架构中,单个Agent会订阅某类信息,然后系统会维护这类信息的分发,使得一旦有Agent发出了某类信息,订阅该信息的Agent就会得到响应,信息本身充当了交互的接口和机制。

    相对于多智能体的需求,这类架构还存在着两点不足:

    • 缺乏数据互操作的机制或Agent之间通信的协议,每个Agent之间主要是通过字符串进行通信,这样保证Agent和Agent之间的功能解耦。然而这样的隐式协议通常不便于Agent之间的协作,特别是来自不同的开发者之间的Agent,它们在通信格式上没有显式的保障机制。此外,Agent相较于一个Actor算是一个比较大的线程,内部本身还包括很复杂的逻辑,也就意味着Agent内部可能还包括着大量需要获取用户数据的逻辑,这其中有些数据是来自其它程序的定义,这也需要互操作性的支持。
    • 缺乏开发这类应用系统的方法论。多智能体协作类似于一种复杂系统,复杂系统的一个典型特征是它的行为或功能是不可预期的,它们是靠很多逻辑简单的子系统相互作用涌现出现的,这就意味着我们不光是需要开发这种系统的工具,还需要一套系统的方法论来帮助我们测试或预测系统的功能行为,使之符合用户的预期,否则复杂系统在大部分情况下可能会表现出未知的行为。

    第一个问题也是传统简单的Actor模型在复杂项目中会遇到的问题,传统的Actor模型一般有两个假设:一是Actor足够小,甚至几乎就是一个函数;二是Actor函数功能本身类似纯函数,这样它内部就没有状态,整个问题就简化了很多。这种模型针对那种只是业务量多、但是业务之间相对独立的业务场景是比较合适的,例如Erlang本身针对的电信业务场景,以及Web服务类应用。但是针对更一般的业务场景,业务之间都穿插着大量的数据交互,这种交互没有比较简单的规则,所以我们传统的程序开发,最复杂的部分,也许就是这种数据管理的复杂性:每个业务函数本身的逻辑可能是比较清晰的,但是为了执行这个函数以及为了知道什么时候需要执行这个函数,我们需要从整个程序到处去寻找条件,例如来自各个地方的上下文数据,和各个逻辑的前置条件,这通常没有一个简单的解决方案,这可能也是编程学习门槛中相对编程语言语法本身更复杂的部分。

    在后面的介绍中,我们将通过类型系统以及对应的互操作机制,来解决这个问题。同时也会通过更深刻地洞察和借鉴复杂系统的一些思路来解决第二个问题。


    相关知识

    本节我们会简单介绍一些零碎的已有相关知识,当然这里仅介绍它们的一些基本概念和思路,其目的是为了理解其中的思想,从而更好地理解我们的架构怎样去采用这些思想,又做出了什么调整,为什么要做出这样的调整,以及做出了这些调整之后带来了什么新的变化。

    互操作性

    互操作性的 定义 如下:

    Interoperability is a characteristic of a product or system to work with other products or systems.

    由定义可以看出,互操作的本意在程序的环境下就是函数调用的能力,但互操作性大多是指两个相对比较隔离或者不同语言的系统之间的函数调用,内部的函数或编译到程序内部的第三方函数调用则不需要强调它的互操作性意义。例如宿主程序与动态脚本程序之间的互操作,例如C++与C或者Rust与C之间的互操作,甚至一个虚拟机支持的多个语言编程的程序之间的调用或通信。在这类情况下,被调函数的类型是无法被编码到程序中的,这通常需要程序内部实现一个对应的内部类型,然后相互之间通过某种格式的字符串来传递信息。所以互操作通常是和标准相关的:

    If two or more systems use common data formats and communication protocolsand are capable of communicating with each other, they exhibitsyntactic interoperability. XML and SQL are examples of common data formats and protocols.

    传统的软件世界通过一些标准来建立互操作的基础,例如HTML、XML、SQL、USD等等,比如Nvidia就基于USD构建了Omniverse,由于其对USD格式的良好支持,使得其可以兼容大部分的内容制作工具,就构建起一个以Omniverse为中心的内容和应用生态。

    Tim在2019年的演讲《Foundational principles & technologies for the metaverse》中大量提到了标准,为了实现多个独立应用程序之间的协作,那么必然要建立大量的标准,有了这些标准,互操作就变得简单,例如《堡垒之夜》现在的Creative模式实际上已经有了很多标准,比如一个物体怎么摆放在环境中,并可以被其他玩家交互,这都是可以由Device来定义的,这实际上就是一种形式的标准或者接口,只要遵循这些标准,则可以很轻易的与其他的环境进行交互。

    然而这种基于文本标准的方式仍然有一些缺陷,例如其数量是非常少的,通常必须等一个组织对一个标准有一定影响力之后才能形成实时上的标准,被更多的三方兼容和支持。想想现实世界,各个实体之间的交互和联系几乎是无所不在的,例如一个人在路边新开了一家饭店,路过的人随时可以进去吃饭,不会说还要先接一下饭店定义的一个接口。而程序是必须有严格的逻辑的,比如保证地址、参数和接口的一致性才能进行互操作,这给软件世界的互操作带来了一定的困难。我们应用程序开发的流程通常都是先定义内部数据结构,实现软件功能之后,再以一定的形式封装一些接口,并以某种方式公布出来,由感兴趣的三方去集成。然而实际上有大量的软件开发者是没有精力或者能力去提供这些接口的。想象一个场景:开发者A开发了某个应用给用户新增了一种新的健康类的数据信息,这个数据本来是属于用户的,这个时候用户想要用这个数据来实现另一个事情,TA想自己或者说让其他开发者B帮助开发一个应用来使用这些数据,这种情况下通常是做不到的,因为开发者A可能并没有太多动力去提供这个接口,因为TA可能要耗费很大的精力,除非平台提供一些这种非常便利的机制使得TA可以很轻易地暴露出来。

    其实更深刻一点理解,互操作问题其实是一个软件碎片化的问题。传统的软件开发都是先开发内部数据结构和数据存储,然后在必要的时候再把API包装使用某种形式的标准包装成外部接口,这样就造成碎片化,因为即使是针对同样的一类逻辑和数据,不同的应用程序或服务往往会定义不同的数据结构或处理逻辑,这就形成API的碎片化,使得相互之间非常难以协作。试想你可以在两个应用之间协商修改各自的API接口及定义,这是一对一的关系,或者说像支付宝这种平台性质的接口也是容易定义,这是一对多的关系,一对多的关系发展显然是缓慢的,必须让这个“一”有机会且需要时间发展壮大。如果我们希望一种更加高效,更加丰富的协作机制,那么显然我们需要多对多机制,这里面就要求我们对软件开发流程做一些调整。

    img

    要想实现这种机制,其实现有的很多技术可以给予很多启示。我们先看USD格式,尽管从表面看USD跟其他的标准类似只是一种数据格式或协议,但实际上它远远不止如此,它还是一种非常易于扩展的格式,它提供了一种plugin的机制使得开发者可以对格式做很多定制和增强功能,并且可以通过一个Schema定义来生成自己定义格式的解析代码,然后通过Plugin来调用自定义的格式解析和代码。这就好比它帮助你编写了文本格式的编解码,尽管看起来不过如此,看起来只是一种模板化的代码生成机制,但是当这种解析代码能够与逻辑高度融为一体的时候,事情的本质发生了一些变化,试想使用USD你的流程是这样:首先针对一种特定数据自定义一个Schema,然后调用USD的API帮助我们生成相关的解析代码,如果这段解析代码能够以某种机制被其他开发者拿到,那么TA的程序就能够轻松解析我们的API。当然如果你修改了Schema,仍然需要对方进行同步,但是这种流程本质上改变了我们的思路:过去我们是先定义内部做法,再与外界沟通,这就容易带来一些复杂度和碎片化;现在是我们先想着自己就是基于一种标准在开发,然后需要的时候就能够很方便地暴露出去,这里USD充当了一种协调的机制并为这种协调的机制提供了一些辅助功能。苹果的usdz格式以及英伟达的MDL都是基于USD的这种扩展能力来实现自定义的资源格式。

    API碎片化的第二个例子是LLVM,本质上LLVM在编译器领域的创新主要做的是模块化,早期的编译器开发,各个前端都要分别集成各个后端,编译器开发的复杂度非常高,这里面其实就是多对多的问题,看似很简单,每个前端与每个后端分别调一调,但随之代码的管理和维护成本是很高的,有时候某些内部设计不一致就会导致大量的重复,这就是碎片化问题。由内而外的设计总是不可避免会导致碎片化,碎片化带来软件复杂度,管理和研发成本。当LLVM提供了一个统一的低层IR表述之后,编译器的复杂度大大降低,比如现在能够很轻易地开发一些DSL语言,因为你完全不需要操心后端,只需要把你的代码生成LLVM IR即可。

    当然LLVM并没有提供类似USD那种生成格式的机制,那是因为LLVM只有一种IR,所以写成一种固定的格式即可,过去的编译流程基本上都比较简单、固定。但是随着现代深度学习编译器的进展,由于深度学习有着相对比较特定的数据表述,各个公司内部都有开发一些特定的编译流程,它是比一般的LLVM IR更上层的抽象,所以我们对多层级IR表述又有了需求,于是在LLVM的基础上又发展出MLIR,它允许开发者社区能够自定义IR。然而与USD的Schema非常相似的地方是,MLIR为了避免碎片化,使不同开发者自定义的IR之间能够更轻易的协作,它也提供了一种类似的代码生成机制,在MLIR中称为Dialect ,例如如下的Dialect定义:

    def Toy_Dialect : Dialect {
    let summary = "Toy IR Dialect"; let description = [{
    This is a much longer description of the
    Toy dialect.
    ...
    }];
    // The namespace of our dialect.
    let name = "toy";
    // The C++ namespace that the dialect class // definition resides in.
    let cppNamespace = "toy";
    }

    生成的C++代码如下:

    class ToyDialect : public mlir::Dialect {
    public:
    ToyDialect(mlir::MLIRContext *context)
    : mlir::Dialect("toy", context,
    mlir::TypeID::get<ToyDialect>()) {
    initialize();
    }
    static llvm::StringRef getDialectNamespace() {
    return "toy";
    }
    void initialize()

    这样多种IR就可以能够被轻易组合使用,你可以选择社区各种丰富的模块进行组合,来生成特定的编译流程,所以MLIR又称作“生成编译器的编译器”。实际上,碎片化在工业界是一个很大的问题,每家公司在开发自己的软件的时候不会考虑那么多,觉得我只要投入研发资源把自己软件做好就行,但是真正在用户侧使用的时候,TA可能需要多个软件是可以相互协作的,甚至你的用户可能就是开发者,这个开发者可能希望不同的软件可以被更高效的集成和管理。LLVM的作者Chris Lattner最新的创业公司Modular实际上核心就是解决这个问题,他的新编程语言Mojo,除了一些语法层面的传统一点的东西,很多核心能力都是来源于底层的MLIR,其中MLIR跟Mojo有更深度的整合,使得Mojo具有很强的元编程能力。Modular的最核心的逻辑其实跟当年的LLVM类似,解决碎片化问题,当然Modular有很多现在软件的运营思路可能会形成更好的平台和生态,因此它是一家商业公司,不仅仅是一个开源项目。

    上述的软件架构都为解决应用之间互操作及其碎片化提供了很好的思想,然而为了更好的软件协作,这些机制还不够。上述的软件都是比较偏底层的基础软件,而不是面向上层用户侧的,因此不需要考虑很多其他问题,比如性能和格式的进化。当进入到一个更上层的消费端应用,首先上述的方式在不同的模块之间交换的都是文本数据,如果你让一个实时的游戏内部的每一次互操作都需要编解码文本,这显然是会影响性能的;此外,应用层的需求更容易变化,即使平台提供了一种生成统一格式解析的代码及其发现的机制,但是怎么应对这些格式的更频繁地变化呢?为此,RealityIS在这些方面做出了一些创新尝试。

    面向对象编程模型

    我们现代的项目开发使用的编程语言,或多或少大部分是和面向对象相关的,尽管看起来面向对象的本质是让我们更好地封装各自比较独立的逻辑,使大规模软件组织起来更加轻松:你不需要关心其他对象的内部逻辑就可以轻易地和它们一起组合起来协作。

    然而实际上并不是这样,大部分面向对象编程语言会让人(特别是初学者)误以为编程就应该这样,它是在模拟真实世界的运行机制。那为什么这么完美的模型却没有产生这么完美的体验呢?直到最近一年多对面向对象的更多理解(特别是Erlang)才体会到其中一些问题。

    Erlang之父Joe Armstrong在一次采访中(Ralph Johnson, Joe Armstrong on the State of OOP )讲到:

    Alan Kay himself wrote this famous thing and said "The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.

    Alan Kay认为OOP的核心是关于消息,但是这样说其实我个人觉得并不太好理解到本质,因为消息更像是OOP这种设计下的一种机制或结果,而不是OOP本身的定义。我觉得OOP的本质应该是隔离,只有做到真正的隔离,才能真正降低系统的复杂度,因为绝对的隔离使得你完全不需要也不能了解另一个物体内部的运作,你们只需要通过一些外在的属性进行交互,我们的开发也仅需要了解这些简单的外在属性。现代大部分编程语言更强调的是object和class,认为对象的核心是关于封装,这本身也没有错,封装的目的也一定是为了让别人不需要关注你的内部细节,但问题在于,很多面向对象编程语言忽略了隔离的意义,为了方便程序员更灵活直接地获取数据和方法,提供一些机制,使得一个对象可以很轻易地访问到另一个对象内部的、跟其内部运作相关的数据或方法,这些原本是需要绝对隔离的。这种设计就使得隔离失去了意义,尽管我们可以指定规范要求自己以对象为单位进行绝对隔离,但是大部分情况下,我们很难做到一个很好的设计,最后的结果是程序内部对象之间相互耦合太多,不管是管理、维护、理解起来都是花费很大的精力。

    Erlang就采用了一种不同的机制,它从语言体系上就不允许对象之间能够直接访问内部数据或方法,每个函数都分配为独立的线程,线程之间只能通过消息进行传递和联系,这样程序员就很难写出耦合比较深的代码,同时这种隔离对并行计算和分布式也带来了好处。所以Joe Armstrong说,根据Alan Kay的描述,Erlang可能是唯一真正面向对象的编程语言:

    Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about

    再回过来看面向对象的核心为什么是隔离,是因为真正的隔离机制才能保证避免耦合,才能降低软件复杂度,因为一个大型的软件系统有无数的对象,如果对象之间存在耦合的可能,那维护起来将是非常不容易的。而当你只提供了强隔离的机制,不让程序员能够很方便地获取另一个对象的引用,剩下的结果就是对象之间只能通过消息通信了,这就是Erlang的整个架构设计,这也是为什么Erlang是真正的面向对象编程语言。也因此,消息更像是隔离机制带来的结果。

    就像现实世界一样,微观的每个原子内部都有自己特定的结构,原子之间相互作用形成分子,进一步形成宏观物体,宏观物体通过内部分子结构形成特定的外在属性,但是其他物体与之交互从来不需要了解其中的内部结构,这就是面向对象的美好世界,然而传统的面向对象编程模式则为了便利为一个对象访问另一个对象的内部结构开了一个口子,这个口子不仅破坏了面向对象的编程思想和精髓,也失去了其带来的好处。

    尽管Erlang看起来是一种完美的架构,然而消息通信是一种操作起来不太便利的方式,比如为了进一步解耦它通常是传递字符串消息,字符串需要编解码,带来了性能问题;而另一方面消息编程模型通常是异步的,使得对逻辑的流程管理失去了控制力。RealityIS在这两个方面都做了一些创新尝试,使得开发者既可以像传统的局部变量一样去方面其它对象的数据,又可以像Erlang一样拥有绝对的隔离,这种隔离带来编程复杂度上的减少,降低编程门槛。

    虚拟机

    基于组合与ECS

    例如游戏就是一个这样的例子,尽管仍然有基于传统的面向对象编程模型来开发的游戏程序,但是大部分的游戏框架或架构或多或少都是基于组件的,因为游戏的逻辑非常复杂,没有比较线性的流程,类似于复杂系统,系统跟系统之间存在非常复杂无序的相关性。游戏中的组件某种程度上类似一个Actor,它们都尝试把子系统的逻辑都尽量封装在内部,不同的是,由于组件之间的交互复杂度非常高,例如一个组件的输入消息会来自多个其它组件,而不是像简单的Actor模型只是一对一的通信,因此游戏程序的执行逻辑是按组件进行排序,每个组件有个语义上的顺序,这样的机制保证只要顺序安排得当,就不用去处理复杂的依赖顺序问题,而且当每个组件被执行时,它需要的数据总是能够得到满足。

    隔离与沙盒技术

    现在整个编程语言以及编译的体系架构,都是基于一个假设,即整个应用程序的所有源代码都被编译为一个单一的应用程序,这也即是编译和构造一个应用程序的主体可以认为是只有一个主体,即开发者,不管你背后是一个大团队或者大公司,最终编译发布应用程序的是一个特定的个人、部门或者组织。这样说有什么意思,这就意味着,整个应用程序的安全性由这个单独的主体负责,你需要解决软件的bug,检查所有可能的安全漏洞等等,保证软件最终运行是可靠的。而对于编程语言来讲,它不对软件的安全做任何假设:理论上,只要你拥有源代码,你就可以几乎访问整个应用程序内存中的数据,所以你必须确保你程序中的所有逻辑行为是正常的。如果所有代码都是由你自己公司的程序员编写的,这当然是天经地义的事情,如果你使用了第三方的开源代码或者闭源的二进制库,你必须由你自己去确保这些第三方的代码不会破坏你的软件运行。

    这样天生就将每一个软件当作一个封闭、独立的环境,操作系统的内存分配和管理系统保证你的内存不会被其他进程的程序非法访问,这样软件就可以安全地运行,当然即使如此,你的程序当中涉及对外部数据读取的部分仍然可能导致内存安全问题。然而这种隔离是与我们现实世界的运行方式完全相反的,现实世界整个体系是基于协作和分工来实现文明发展的,计算机本来具有更强大的逻辑体系,然而实际上我们并没有在软件世界建立起比较简单地分工与协作机制。

    现代软件变得越来越复杂,这种复杂的体系结构本来就希望能够借助更多的协作与分工的精神和思想来实现更大的复杂度和功能,这种协作的第一个要求是让未受信任的第三方代码可以在你的内存环境中执行代码。这也是《堡垒之夜》面临的第一个问题。按照现代编程语言的一些思路,一个源代码能够在一个内存环境中被执行,那表示其对应的主体知道和负责其中的安全问题,编程语言本身没有太多机制来解决这个问题。这又分为两种情况:静态语言和动态解释性脚本语言。对于动态而言而言,如lua,它们通常不能直接访问内存,开发者所能操作的都是封装在一定类型和对象中,现代大多数编程语言都按照类型进行寻址,也即是类型系统本身基本上可以保证程序的安全,如果你的源代码不知道一个对象的地址,你就不可能访问到它。然而实际现在大多数编程语言都提供静态变量或者全局常量之类的方式,这种方式使得内存环境中的其他代码可以获取到这些共享信息,从而对软件进行破坏。为了避免这种问题,Roblox就对Lua进行了改造,叫做Luau,比如通过禁止全局变量,以及禁止一些能够访问全局变量的库函数等等机制来实现一种沙盒安全,这样第三方开发者开发的代码就可以放心地在Roblox app中运行。

    如果第三方未受信任代码是二进制的机器码,这个问题就更严重了,因为机器码是可以访问内存地址和寄存器的,那可以造成的破坏是无法想象的。然而人们仍然希望能够实现类似分工协作的方式,这方面最具有代表性的例子就是浏览器,浏览器是一个非常复杂的软件,现代浏览器往往都可以支持第三方二进制的插件,来提供一些更高性能的增强功能,例如浏览器的字体渲染往往都是使用第三方字体渲染库。为了解决这种由于未受信任二进制代码导致的安全问题,人们提出一些软件隔离(software-based fault isolation,SFI)技术,相对应操作系统或硬件的内存隔离,SFI是用于构建包含未信任组件的安全系统的一种轻量级方法,能够用于减少由于内存安全bug导致的攻击,SFI通过严格将第三方未信任软件限制在自己的沙盒内存区域,来隔离这种内存安全导致的破坏。用例包括浏览器使用SFI来扩展第三方组件,例如经典的Native Client SFI syetem(NaCI)使用SFI来扩展第三方c库,使得浏览器可以使用如第三方的字体,音频,XML解析等库;在边缘计算节点与第三方未信任客户环境进行联合计算等等。

    NaCI存在较大的运行时性能,因为它的机制一般对第三方代码不做太多要求,假设其按照一般的方法进行开发,然后仅仅在调用这些方法的时候为其分配独立的内存区域进行隔离,它基本上是用软件模拟操作系统的内存隔离机制,比如每次切换都需要保存大量的状态和寄存器地址等等。为了减少这种隔离导致的代价,Web Assembly就使用另一个思路,由于Web Assembly程序都会编译为Wasm文件,由Wasm虚拟机解释执行,而不是底层的二进制代码,所以Web Assembly有机会对程序进行一定的分析,通过基于Control-Flow Integrity (CFI)技术,Web Assembly的编译器可以检查出程序中哪些代码可能会对这种沙盒环境造成破坏,从而禁止这样的代码生成合法的Wasm程序,因此也就实现了沙盒安全。但是由于这种检查是在编译期,并对第三方程序的构造过程有一定的要求,因此在实际执行的时候就可以避免在这种隔离安全的保护机制上花费过多的开销。

    Web Assembly之所以是一种未来非常有潜力的技术,不仅仅得益于对Web的友好,接近机器码的字节码,多语言支持等等,这种沙盒技术也是很大的一个技术点。在Web Assembly之前还没有一种技术可以很好地普及和运用沙盒技术,例如JVM上有一些方案,但大多有些性能问题,或者不能完全保证安全,或者方案比较重。Web Assembly这种优秀的沙盒技术使得沙盒模式在以后的软件构造中可能被大规模使用,也就会实现更多的软件协作与分工,事实上比如现在对未受信任多应用环境要求比较高的环境如区块链就大多转型Web Assembly,而如Docker和Severless这种对虚拟环境要求比较高的环境也在逐步转向Web Assembly。

    尽管Web Assembly的隔离技术非常优异,但是它并没有改变程序本身的构造方式,即如果你的代码本身就不含破坏别人的恶意代码,那么其实你的开发过程与过去的方式并没有什么区别。而RealityIS希望简化编程的开发,如本文后面编程方面的内容,我们还希望对编程的体系做出一些调整。因此我们会把各种问题放到一起考虑,而不是单纯一个一个地解决问题。例如软件的可组合性、模块化、编程复杂度的降低、互操作等等。

    如后面的内容所知,我们还对应用程序的构造方法进行了调整,而不是仅仅把程序当作一个黑盒子来进行统一的隔离,例如传统的隔离技术大都是基于比较底层的编译惯例,如方法调用(Calling Convention)来设计隔离机制,这样使得不需要对用户的开发过程造成太大的影响。在Reality Create中,我们的每个组件的很多行为和构造过程是由运行时自动推导进行的,因此我们本身已经对用户的开发过程有一定的影响,这同时也意味着我们对程序的结构有着更多信息,因此我们可以在更上层的地方实现一些隔离机制,同时由于上层的机构包含对程序的更多的信息,因此会带来一些新的灵活性和能力。

    复杂系统

    从两个方面理解,内在结构和外在特征,内在结构通常在工业设计方面有很多实践。外在特征则更偏理论。

    A complex system is a system composed of many components which may interact with each other. Examples of complex systems are Earth's global climate, organisms, the human brain, infrastructure such as power grid, transportation or communication systems, complex software and electronic systems, social and economic organizations (like cities), an ecosystem, a living cell, and ultimately the entire universe.

    Complex systems are systems whose behavior is intrinsically difficult to model due to the dependencies, competitions, relationships, or other types of interactions between their parts or between a given system and its environment. Systems that are "complex" have distinct properties that arise from these relationships, such as nonlinearity, emergence, spontaneous order, adaptation, and feedback loops, among others. Because such systems appear in a wide variety of fields, the commonalities among them have become the topic of their independent area of research. In many cases, it is useful to represent such a system as a network where the nodes represent the components and links to their interactions.


    RealityIS架构哲学

    RealityIS的整个架构设计经历了整整一年多的时间,可以参看另一篇文档记录了整个思考过程。整个过程其实是一个非常复杂的思考过程,一开始只有部分残缺的思想,不断在细节和总体之间不断来回切换,慢慢构筑起更完整的体系(我会用一篇博文介绍整个思考的过程)。所以当回来再来看整个架构时,我们必须要形成清晰而简洁的方法论甚至哲学思想。这不仅有助于后来者更好地理解它,而不需要陷入很多细节,同时这也尤其是这样一个面向未来的技术架构具有学习和研究价值的地方。

    定义:

    RealityIS是一个以互操作性为核心目标的分布式系统和架构,它的愿景是构造一个无边的数字世界,使得任何人都可以向这个系统动态添加新的子程序,这些子程序可以和其它子程序任意交互,这个系统可以像生物系统一样自我进化,从而通过复杂系统的机制涌现出更加智能、丰富和个性化的数字世界体验

    RealityIS通过以下两种理论依据来构筑上述的目标,也即是它的架构哲学:

    • 它是区块链去中心化思想的一般化,它将区块链的数字类型延升为通用数据类型,然后通过动态类型系统使得所有虚拟机和程序都可以访问用户任意数据,最后通过数据与功能分离使得这种访问能够被用户授权精确控制
    • 它以复杂系统为理论基础来构筑整个计算框架,用户开发的程序以小粒度的组件为单位,组件之间的交互不需要全局的中央控制,而是通过类型系统实现局部的自动交互,系统内的组件可以任意动态组合

    在上述的哲学思想中,去中心化的思想定义了外在结构,而复杂系统的理论定义了内在结构,我们将在后面的内容中详细分析。

    从前面的定义可以看出RealityIS的两个主要目标是:

    • 互操作性
    • 自我进化

    这两个目标的目标则是为了进一步实现更彻底更丰富的数字化,使之真正成为一种人人参与的数字经济。这两个目标也是RealityIS能够区分过去的各种软件或分布式系统,完全的互操作性是数字经济的基础,有了这个基础,更多的数字内容才可以更好地协作,从而产生经济行为。而自我进化则意味着,当我们由现在这种固定功能的软件走向更加动态、丰富的数字世界,这种复杂的交互必须要涌现出新的更高的数字智能,这种智能要超过传统单一软件的功能。

    为了实现这两个目标,我们以区块链和复杂系统两个比较完善的理念作为理论基础。尽管区块链并不是专为互操作性而设计的,但从下一节的分析可以看出,我们可以从区块链的一些思想中延升出一种一般化的互操作思想,同时又兼具去中心的能力。而复杂系统的原理和方法论则为这种动态的大规模程序的组织和功能涌现提供了比较稳固的理论指导。

    从上面的定义也可以看出另一个重要的方面,即尽管RealityIS涉及软件构造方法,但我们并没有涉及较低层的编译和编程语言层面。当然后面会分析,ReallityIS也绝不单纯是一个软件架构,它也涉及到对编译过程和编程语言一些思想的重新解读,以及将来也涉及对编译器和编程语言的某些改造,但是这种改造主要是结构性的,或者说不会对传统编程语言和编译器的核心部分进行修改。

    建立互操作数据抽象

    区块链是一个分布式系统,尽管这种系统出现的目标并不是为了解决一般软件开发中的互操作性问题,它也不是为解决传统分布式计算问题而设计的分布式软件架构。但通过洞察它的一些特性,结合互操作性的一些技术需求和特征,我们则可以得到不同的启示。这种启示可以说是RealityIS最核心的部分。

    本节我们将从不同的角度来解读区块链系统,以及怎样从这种解读中发现建立互操作系统的方案。

    我们可以认为区块链系统有三个技术特征,或者说可以从这三个方面来解读区块链系统:

    • 类型
    • 数据
    • 安全

    需要注意的是,这三个层面关注的并不是区块链核心的共识机制的部分,而是它作为一个软件架构的层面。同时这里尽管我们也会涉及去中心化的思想,但是这也并不是指区块链中使用分布式账本存储的去中心化方式,我们考虑的去中心化是指通过一种将软件功能和用户数据隔离的应用程序构建机制,使得应用开发商不再具有掌控用户数据的能力,从而也是一种去中心化的概念。但是这种去中心化依然需要借助某种方式的中心化计算,不过在这种架构下用户对数据具有更透明的控制。

    区块链的软件构造视角

    如果我们从区块链分布式系统中的任一节点去看,这个节点可以看作一个简单的虚拟机,这个虚拟机每次计算执行一个非常简单的程序,即对某两个账户执行价值交易。我们这里不考虑这个价值交易的算法本身,仅把它当作一个程序,然后思考为了支持这个程序的开发和运行,区块链上的虚拟机应该具备什么功能?

    我们知道传统的虚拟机的核心机制实际上就是一个具有某种语法的编程语言的解释器,然后使用这种语法编程的程序源代码作为输入,虚拟机对源代码进行解释并执行,这种编程语言的语法通常支持现代比较高级的一些语法,例如Lua,Python,Java等编程语言都支持这种虚拟机的执行方式。

    img

    尽管不是很容易理解,但我们可以把一个程序的结构看成是这样的抽象:即程序由数据、类型和代码组成,如上图(a)所示,当然这里的数据主要是作为程序输入的数据,而不是指代码内部也可以产生的很多的内部数据结构及内存存储,那么这里的类型自然也是指这种外部输入的数据结构的类型。一般的程序,其数据和类型都是定义和存储在程序内部的,用户只是在使用其中的功能。

    从这个角度看,我们可以把区块链的账本看成数据,然后账本对应的类型是float类型,对应的代码则是区块链虚拟机执行的共识算法。

    但比较隐晦的地方在于,float是一个非常简单的数据类型,并且区块链只处理这种简单的外部输入数据,所以它看起来并不包含一个类型定义。如果我们把这个复杂度延升一下,即如果区块链能处理任意类型的数据,那么就必须要定义类型结构,然后虚拟机以某种方式按照类型定义进行解析。这其实就是传统的虚拟机机制,即输入虚拟机的源代码中包含对于处理的任何数据的类型定义。比如以太坊的智能合约就是比区块链更复杂的脚本语言,它就可以包含更复杂的类型定义。

    但是我们这里却不想这么做,因为我们看到了区块链的另一个不同寻常的特性,也就是它的去中心化特性的来源,即它的数据(即账本)存储在一个独立于程序(虚拟机上的共识算法程序)的地方,即数据和程序是解耦的。所以这驱使我们想要进一步弄清楚它的独特的程序组织背后的思想。

    如果只是想要单纯地把数据与程序代码分离,直接把数据存储到外部并不是一个好的方法,这里面有几个问题:

    • 程序内部仍然会定义解析的数据类型,所以不利于虚拟机扩展处理任意动态的类型
    • 存储在外部的数据只是一个单纯的数据,它们并没有多少语义的信息,所以用户既不知道怎么管理它们,也无法理解它们。想想理论上我们任何应用的用户都可以打开存储在应用内部文件夹中Sqlite的数据库,但是哪些数据可能对用户并无太大意义。

    用户对数据最通常的管理是授权,保证只有经过用户许可的软件才可以访问这些数据。所以仔细思考区块链系统背后的思想:即区块链可以做到对数据的授权管理,尽管区块链的数据也是存储在独立于程序的地方,但是它可以做到对数据的权限管理,尽管这需要共识机制协作来保证,但从程序的机制来看,我们可以理解为这种使对数据的权限管理变得可能的原因在于:

    用户了解数据的意义,然后在交易的时候用户将这个语义传达给虚拟机,虚拟机按照用户指定的意义及权限机制对数据进行处理。这个意义某种程度上就是类型,用户对一个“类型+数据”进行授权,类型在这里升华为某种语义信息或者意义,因为我们在日常生活中所作的事情,其实大多数都是对某类事情进行处理,而这个类型在我们生活中就是包含特定意义的事物,这些事物我们都可以通过名字或类型来区分,类型充当了代表一件事物的语义。

    所以当用户在看待自己链上的一个账本数据时,这个数据不光只是一个数值,同时也代表了账本这个类型,只不过由于区块链的虚拟机仅处理这一种数据类型,所以这个类型被隐式表述了,即使没有任何地方定义这个类型,区块链虚拟机也总是能够正确解析这个数据。并且当用户通过给出密钥进行授权计算的时候,TA表达的就是对账本这个类型的数据进行授权。

    所以要想把区块链上述这种程序视角的意义扩展到一般程序,即让任何程序的数据都可以独立于程序的代码而存储,并且用户可以对数据进行授权管理,那么我们可以从一下三个方面对区块链进行扩展:

    • 将单一的float类型扩展为一套动态类型系统
    • 将数据按类型存储在独立于程序代码的地方
    • 虚拟机在运行时配合用户的权限设置对数据进行访问

    一下我们分别深入分析这三个方面的扩展涉及到的一些思考和逻辑。

    类型

    程序要对数据进行处理,当然必须要知道正确的数据类型,即知道数据内部的每个字节表示什么含义。通常外部传入一个json字符串,然后程序内部首先会定义一个对应的数据结构类型,然后有一个解析函数对json字符串进行解析并将之转化为内部数据结构的一个对象。如下图(a)所示:

    image-20230901145523283

    但如前面的分析所知,这里会带来两个问题:

    • 用户数据管理和授权的问题
    • 程序根据用户授权进行安全控制

    由于解析器在程序内部,所以数据对于用户而言仅仅是一些字节,如果有非常多的数据,用户根本不知道哪些数据是对应什么意义,即使用户可以自己去根据文本内容自行判断,甚至给这些文本数据加上一些标签或名字,但是这不仅会增强用户对数据的管理复杂度,而且这种分类行为或结果与实际的数据意义可能还是不一致的。因此,用户无法针对数据进行授权管理

    对于第二个问题,由于解析器处于程序内部,那么就无法保证程序会遵照用户的授权结果进行处理。首先同样因为上面无法对数据进行授权的原因,也不存在一个外部程序可以确保数据会按照用户的旨意被某个程序处理,因为谁都不知道这个数据的意义的什么,这种情况下只有将数据传递到程序内部,由程序内部的解析器去做类型解析和分析才知道数据的意义,也就是说只有程序才知道数据的意义,但是这个时候数据已经被传递给程序了。因此,系统也无法根据用户的授权旨意将数据分配给合法的程序

    上述的分析要求,数据的形式及其定义应该在一起被管理,也就类型的定义应该处于程序之外,这样不仅用户能够知道数据的意义,从而能够正确地做出权限控制,而且系统可以借助类型系统以及用户的授权组织数据被传入未经授权的程序。即如上图(b)中所示。这就要求类型系统是独立于程序的。

    这是一种非常有启发意义的视角,我们单纯去看区块链系统,很难得出这样的思维,但是其实仔细分析也是合理的。我们可以认为区块链其实包含了一个公共的类型系统,只不过这个类型系统只是包含数值类型,也至于我们甚至不需要去定义这个类型系统,这样导致人们对它的类型系统可能没有感知;然后区块链类型系统的解析器是位于虚拟机上的,即由系统控制,系统在对数据按照用户的授权执行权限控制,最后获得授权的请求才会执行最终的交易计算,我们可以认为交易才是真正的客户程序,而交易之前的类型系统和授权计算是属于平台虚拟机部分,这部分客户程序是无法控制的。

    image-20230901145523283

    最终我们看整个类型系统的架构,它类似于上图所示,这里客户程序(program)仅仅是包含代码,数据被存储在其它地方,用户可以离线对数据进行授权,指定哪些程序可以访问哪些类型的数据。然后运行时这些数据被首先加载的虚拟机VM,虚拟机首先根据类型信息对数据的权限进行判断,如果这个程序被授权,则调用解析器帮助程序解析格式,并最终将程序放入到某个约定的内存地址,最后程序从这个内存地址取值进行计算。

    当然实际整个类型系统的工作机制还涉及很多内容,我们在后面架构设计一节将详细介绍。

    数据

    区块链的另一个特点是数据的存储是未受保护的,甚至是明文的,任何程序都可以获取用户的账本信息。这跟传统的应用程序架构思想也是截然不同的,传统的应用架构就是为了保护用户数据而将数据完全隔离,甚至加密以防止其它程序触碰到数据,但是它们通常在内部则不做太多安全检查,假设对数据的访问都是合法的;而区块链的哲学却不一样,它认为数据的存储不重要,重要的是数据的所有权,所以它的核心是在运行时做授权检查。当然这里只是一种架构上的类比,区块链公开明文数据的机制也是由于其核心的共识机制决定的。

    image-20230901145523283

    如上图(a)所示,传统的程序将数据隔离起来,以防止其它程序访问,这种隔离机制往往是在编程模型之外的机制,由操系统来提供,因此程序不需要担心数据的安全性。例如常见至少有三种数据保护机制:

    • 文件系统和应用程序沙盒环境,在现代移动操作系统中,每个应用往往都分配有独立的数据存储空间,应用程序可以将其运行过程中产生的数据存放至这里。像iOS操作系统则会为这个程序的空间创造一个沙盒环境,使得只有所属的应用程序才能访问这个环境中的一切数据。
    • 操作系统内存隔离,当一个应用程序启动后,尽管理论上所有的应用程序都是共享计算机硬件的内存,但是现代操作系统及硬件提供了很多隔离机制,使得每个程序被分配一块内存的区域,并且不管其程序代码中访问的内存地址指向何处,都不可能访问到程序之外的隔离区域。我们将在后面讨论这些机制。
    • 虚拟机沙盒环境,像Java、Web Assembly、.NET CLR等现代虚拟机环境,它们往往提供一种多种编程语言的程序互操作的能力,尽管保护力度和性能不一样,它们还或多或少提供了一些在同一个应用内部隔离不同子程序的能力。这种情况下,因为整个虚拟机及运行在其上面的所有的程序都是在一个内存环境中,所以操作系统的内存隔离无法提供保护,虚拟机往往需要模拟操作系统的某些机制来实现应用内的内存隔离。这种情况下,对于虚拟机上的每个子程序来讲,虚拟机环境本身有点类似于操作系统的概念了。

    从上面的分析可以看出,过去几十年计算机软件构造的发展历史,逐渐形成这种操作系统与编程模型的分工协作,也是一种硬件上的抽象,在这种抽象模型中,硬件或操作系统只需要提供如文件或内存级别的安全访问机制,而不需要关注应用实际的数据和数据结构,就可以保证数据安全;而对于应用程序,由于硬件或操作系统已经保证了数据不会被其它程序非法访问,那么整个编程模型涉及的机制只需要考虑应用业务逻辑的构造,而不需要考虑数据的访问安全,并且现代编程模型基本上都基于一个假设:即代码可以访问该应用程序内的任何资源,只要它能获取到相应的内存地址,例如在C++代码中,一个指针可以指向和访问任意应用程序内部的内存地址,即使是那些不能使用指针的脚本编程语言,它们的核心也主要是在帮助简化内存管理,而不是阻止对应用程序内任意数据的访问,例如一个对象的引用你可以传递给任何变量从而被使用。

    过去几十年,这一套机制运转良好,也体现出这种抽象带来的高效率。但是这种抽象只考虑一个程序及其程序的执行,而没有考虑程序内部数据对于用户的意义。在传统的软件中,软件主要是作为一种单一的功能使用,这种功能很少涉及需要跟外部交互,它们整体在内部是自洽的,如果用户需要另一个功能,TA就去打开使用另一个软件就好。

    然而近几年随着Web 3.0、元宇宙和多智能体类应用的出现,这些应用越来越凸显出相互交互和协作的特性和需求,这跟我们传统的应用构成模型是相悖的,数据隔离就失去了互操作性,尽管我们可以通过一些机制去提供一些接口让其它应用进行互操作,但是这些机制架构通常都很复杂、不可扩展、效率低下。

    因此,或许我们应该像区块链系统一样,建立一层数据抽象。它可以带来天生的互操作性,同时后面我们将看到,这样的架构调整还可以带来很多新的计算特性。但是首先来看将数据与应用程序分离之后怎样保证数据的安全。

    安全

    将数据存储在应用程序之外的地方,就失去了硬件和操作系统的保护,那么平台或者应用程序就必须额外提供保护机制。这方面我们也可以从区块链系统得到一些启示,再结合传统软件架构技术的一些发展,找到一个合适的技术方向。

    不考虑分布式环境,仅考虑单个虚拟机,我们可以认为区块链计算的过程如下:首先虚拟机从外部环境中获取到用户账本,然后基于用户授权执行验证计算,验证通过则执行具体的交易,我们可以把这三部分分别看作数据、虚拟机和应用程序,如下图(b)所示:

    image-20230901145523283

    首先数据存储在应用程序的外部,从前面数据部分的分析也可以看出,所以在程序运行的时候就涉及到一个数据的传输过程。关于网络传输的安全性,我们已经有了很多年的软件工程实践,这块并不会带来很大的问题。而实际上,比如在移动端这种情况下,用户的数据大部分是存储在本地的,这并不需要经过网络传输,实际上整个系统只有需要与其它用户进行交互的数据才会进行网络传输。

    当数据到达本地虚拟机时,虚拟机首先执行权限计算,然后再决定一个应用程序是否可以获取这个数据以执行某种计算。这里由于虚拟机已知用户的数据类型,所以它能够对数据进行授权管理,用户可以很简单地对每种语义数据对每个应用程序进行授权,只有相应类型被授权的应用才可以访问到对应类型的数据。所以这里虚拟机完全可以执行整个授权计算。

    随后,被授权的应用最终可以获取到数据执行某个逻辑计算。尽管数据需要执行权限计算,但是应用程序对这种计算并无感知,它还是像传统应用程序一样进行开发,例如它声明需要访问某个数据,如果这个数据没有被授权,它根本就不会被调用执行;如果数据被合法授权,则它的计算过程跟传统的计算是一样的。整个授权的行为对应用程序是透明的。

    这种数据及其安全的抽象,使得应用程序的开发还是利用完整的传统应用开发流程,保证对开发者流程和习惯的影响带来新的学习成本和思维模式转变。而这里的虚拟机则仅有平台进行开发即可。

    对于虚拟机的安全部分,传统的一些虚拟机技术如Java、Web Assembly等已经有了很多的实践可以借鉴。本文后面也会提出一些新的调整思路,以解决一些新的问题和新的思考。

    数据抽象带来互操作性

    Reality World显然不是一个区块链的架构,比如我们每个应用的主体逻辑计算主要还是在单机上计算,就像传统的应用程序一样,但是它从区块链背后的技术体系中提取中了一种很有价值的思想。这种思想来源于区块链核心的共识机制,即它需要在一个分布式系统中的所有虚拟机上执行相同的计算来达成共识,这就要求虚拟机上每次计算的输入数据,即执行交易的两个用户的账本数据,首先必须对每个虚拟机是公开的,这样它们才能顺利地获取到数据,也即是可以互操作。这是一个非常智慧和巧妙的思想,任何尝试像传统软件架构那样把数据放在一个受保护的地方,然后通过定义API等等方式提供访问都会带来巨大的软件架构上的复杂性,比如你的编解码方式、传输内容的格式都需要两边进行很多配合,带来很多的碎片化。同时,数据的解码一定不能在客户应用程序内发生,这样客户程序就始终会拿到数据,进行不可能预期的操作,解码操作必须发生在平台。如果解码操作发生在平台,我们就不需要设置复杂的数据保护措施,因为这些数据的存储以及解码的过程,启示就发生在平台内部,对客户应用程序是不可见的。

    数据可能不重要,所有权才是最重要的,这是区块链思想对于传统应用架构的不同视角,它带来了新的应用形态和体验,与之同时也带来了新的软件架构思想。

    尽管区块链并没有很强调互操作性,因为它的格式和系统足够简单,但我们尝试把这种思想往通用计算上去思考的时候,它就会演变成互操作性的概念,想想你在区块链的虚拟机上怎样解析用户的另一个非账本的复杂数据结构?

    这种从互操作性的角度去思考区块链,以及从中得到对软件架构的启示,它为未来的数字世界软件架构带来了全新的世界和可能性。它甚至打破了传统软件架构几十年发展的思维,未来的数字世界会因为互操作性呈现完全不能的能力和形态。从后面的内容会无处不在地看到这种互操作性带来的各种新的可能性。

    更重要的是,我认为这是未来实现更加智能数字世界的基础,即数字进化。

    基于复杂系统的计算架构

    前面我们讨论了在一个多应用程序环境中,应用程序之间的互操作思想和机制,即系统架构的外在结构。本节我们关注的内容是系统内部逻辑的组织方式,即内在结构。

    我们关注两个视角,这两个视角都来源于复杂系统理论:

    • 首先是大规模复杂系统内部的交互和逻辑组织问题
    • 其次是怎样通过复杂系统的涌现机制产生更加智能的数字世界

    这两个视角将会让我们重新去审视过去几十年来形成的软件架构及其编程模型的思想,我们将通过把复杂系统的一些理论和思想引入到软件架构中,从而形成一套开发具有复杂交互的软件架构方法和逻辑,更重要的是,这种新的视角可能有助于未来我们开发出更智能、更丰富的、更复杂的数字世界体验。

    游戏的复杂系统视角

    上一节我们分析了,现代软件开发的其中一个基本的假设是程序所有的数据和代码都是受程序开发者控制的,这带来了中心化的软件治理模式,进而形成中心化的数字生态。中心化有效率的优势,去中心化有数据安全的优势,我们则从两者中做出一些架构调整形成一套集两种优势的架构。

    本节我们将分析传统软件架构的另一个机制的缺陷及其带来的影响。

    在现代的编程模型中,不管编程语言本身对硬件的抽象度如何,整个程序最后要被硬件执行,都会被编译或解释成这样一个机器码或字节码的字符指令集合,这些指令一般由操作符和操作数组成,操作符是其计算平台支持的计算类型,而操作数大部分是涉及到硬件的地址的,一个程序通常包含三类地址:

    • 寄存器
    • 内存地址
    • 程序机器码中的代码地址

    这其中寄存器地址大部分是由编译器来分配的,而内存地址和代码地址则是和程序的结构有一定的关系。其中内存地址通常是我们程序在运行过程中创建的数据对象在内存中的地址,然后其它一些需要访问这个对象的指令通常就需要指向这些对象的地址;而代码地址则通常跟方法调用有关,我们编写的代码最后会被编译为一个机器码格式的数据表述,程序运行启动时则会首先将这些代码数据加载到一片固定的内存地址,后续所有代码的执行实际上都是需要首先从这里获取代码指令的数据,然后根据指令的定义执行计算,然而实际代码的执行并不是完全按顺序执行的,我们的逻辑中充满很多控制流,例如一个函数需要调用另一个函数,这个时候就需要首先将指令的指针指向另一个函数的地址,并在指向完毕之后跳转回原来的位置。所以我们的程序代码中还需要根据逻辑控制流将这种代码地址编码在指令的操作数中。我们将在后续的技术架构部分更详细的讨论这个过程。

    尽管上述的过程一般主要是由编译器、链接器和加载器来协同完成,但是从本质上来说,一句代码要访问那个对象的内存地址,以及下一个语句要跳转到哪一条语句,这其实是应用的逻辑规则,因此这些逻辑定义是由程序员来定义的,编译器只不过是根据编程语言的语法描述,将这种程序员在编程语言级别的定义,转化为机器级别的定义。

    按照传统的软件架构方法实践,这里就会出现两种问题:

    • 一旦某句代码访问指向了某个对象地址,这个行为就不容易修改
    • 一旦某个跳转语句指向了某个函数的地址,这个逻辑流程就不容易调整

    尽管我们有很多软件架构实践来部分缓解上述两种情况带来的问题,但通常都没有理想的方案。这造成的一个主要结果就是,我们的程序一旦开发编译完成,其行为就不容易动态调整或修改,一旦进行修改,则需要重新进行编译发布,并要求用户重新更新整个程序。

    上述技术层面的因素反映到用户体验或者软件形态层面,就是当前的软件形态大部分都是一种固定的形态,每个软件的功能和结构基本上都是固定的。与软件的数据和代码耦合在一起导致软件失去互操作性类似,软件中数据的地址与软件结构的耦合使软件失去了动态性。关于软件的动态性有两个方面的意义,下一节我们回讨论动态性对于智能进化的意义,本节我们先讨论动态性对于软件逻辑构造的意义。

    复杂系统结构

    如果一个软件的业务逻辑是相对比较确定且简单的,那么我们传统的软件开发模式是可以很好地工作的,比如看看我们现在手机上大部分应用,每个应用内部的功能相对还是比较简单的,尽管有比如高并发等类的软件架构问题,但这类问题跟复杂度本身没有太大关系,更多是技术架构的问题。这类应用的特征是其业务逻辑的复杂度基本在人脑能够理解的复杂度范围之类,内部开发人员通常不需要太复杂的推理和思考就能够理解软件内部业务的流程、逻辑等等。

    我们看另一个类型的应用:即游戏,则不一样。我们在后面还会分析很多游戏架构的特征,但是这里先重点关注其中一个特征,即它的业务逻辑的复杂度。总体上它的复杂度相较于传统的应用有两个特点:

    • 它由非常多的逻辑关系没有那么清晰的子系统组成
    • 这些子系统之间的交互呈现高度的动态性和局部性

    在这种情况下,我们几乎很难像传统的软件那样进行编程,它没有比较明确固定的逻辑说什么流程之后就会执行另外一个流程,它更多是根据很多来源不同的条件来决定执行什么流程;它也不能将指针指向某些固定的内存地址,它有很多不同不同的对象实例需要执行相同的逻辑。总之这种软件的复杂度是非常高的,我们通常无法很直观地用大脑去思考它内部的交互逻辑。

    具有这样特征的系统通常称为复杂系统,实际上关于游戏设计的理论,大部分都是基于复杂系统的思维来思考的。前面我们已经介绍过复杂系统相关的基本概念,我们可以从两个维度去理解它:

    • 内在结构,内在结构通常侧重在描述构建一个复杂系统的架构思维,比如它们的子系统的交互机制是怎样,整个系统是怎么组织的。
    • 外在特征,外在特征更关注的是观察一个复杂系统,它会呈现出什么特征,这方面通常是设计复杂系统的理论,因为一般的复杂系统理论更偏重寻找复杂系统的原理而不是关注它内部的结构。

    我们也从这两个方面来思考软件架构,首先讨论它的内在结构,后面再讨论它的外在特征。

    游戏中的组合架构

    为了解决程序逻辑中的动态性的问题,一般的游戏应用架构都选择使用非常不同于传统软件开发的架构,这些架构大部分都涉及用某种形式的组合来代替继承。这其中不光是由于继承带来的逻辑表达的复杂性,使用组合还可以更灵活地调整程序的结构和功能。

    最简单的组合机制如下图(a)所示,对象A并不是由某个具体的类通过继承等方式来继承,而是通过把不同的组件组织在一起通过组合的形式来构建。这种组合方式通常不是编程语言的机制,而是使用类似一个配置表格来记录这种组合关系,然后程序运行的时候根据这个配置分配相应的组件对象地址,并在组合的对象中以某种形式记录这些地址,以方便可以快速地访问这些组件对象。

    组件对象本身的定义没有太多限定,一般简单的方式是每个组件包括自己的属性、状态和代码,另外一些更好的架构比如ECS则是将组件的数据和功能分开,这样方便组件之间的数据互操作。但不管怎样,对象内部的组件之间是需要通信的,对象和对象之间的某些组件或者属性之间也是需要通信的。如上图(b)所示。

    一般简单常用的方法就是设置可以能够被全部对象访问的Manager类,这个类能够根据类型或者名字查询到其它组件或者对象的实例变量,例如伪代码:

    manager.getChild("A");
    manager.getComponent<Attack>();

    这样的方式很灵活,它避免在我们的代码中到处去寻找每个对象或组件实例的位置和地址,简化为通过对象名称或者类型信息来获取对象。但是它的缺点是我们暴露了一个权限很高的访问入口给每个对象或组件,尽管对于游戏开发商内部来讲这没有问题,但是如果我们希望游戏程序能够提供给玩家一些自定义的选项,在这种情况下,玩家可以自行向程序注入一些动态的脚本程序来实现不同的玩法和目的,这种架构却是不可行的,而这也是元宇宙所描述的世界尝试构建的架构。

    去中心化的交互控制

    构建开放的程序架构不光涉及对其它资源的访问权限控制问题,还涉及到去中心化的子程序交互控制问题。

    这是什么意思,由于系统的功能和状态都是完全动态的,因此我们无法预测一个组件执行时它需要的条件是否完全满足,在上述伪代码示例中,组件获取到的对象可能是不存在的,当然我们可以在每个组件内部做是否为空的判断,但是我们有没有一些更好的架构方法呢?

    近几年改进出来的ECS架构可以找到一些启示。在例如Unity DOTSBevy ECS架构中,在这些ECS架构,组件的数据和功能被分离开来,分别对应Component和System,每个System对数据的使用,由上面那种自己需要通过全局共享的manager变量去查询获取,改变为通过一个query参数来声明对数据的需求,例如如下的System声明它需要使用Transform数据:

    fn print_position_system(query: Query<&Transform>) {
    for transform in &query {
    println!("position: {:?}", transform.translation);
    }
    }

    这种Query形式的声明,借助Rust编译器对宏的一些强大支持,使得我们不需要写一些额外的查询语句,基于类型就可以获取到正确的对象变量,这种方式甚至比函数调用还要简单:都不需要我们手动传递函数参数,只需要声明类型就可以在运行时被自动赋予正确的函数变量。当然Unity使用的C#语言编译器的机制没有那么强大,但对应的思路是差不多的。

    这种机制带来的意义是非常深远的,它不光简化了传统编程开发中,一个逻辑在执行时需要收集大量复杂上下文数据的流程,更深远的意义在于,通过分离数据的声明和数据的实际获取的过程,将数据的获取过程转交给系统,使得系统有机会去控制组件对数据获取的安全控制,同时又不会给客户程序的开发带来复杂度,甚至还大大简化了。

    结合我们前面的区块链的思路,由于我们的数据的获取是没有做保护的,但是我们在这个数据获取到组件的使用之间,虚拟机会根据组件的类型声明执行安全检查,此时我们知道组件声明的类型,这个类型是虚拟机可以解析的,我们也已知道用户对于该组件对于该数据的授权情况,我们完全就可以在虚拟机层面非常简单地做出安全判定,如果我们还能够根据判定结果来执行函数功能,那么非法的组件完全就没有可能被执行,即使它看起来可以声明获取用户的任意数据,所有的数据所有权都在用户的精确控制之下。

    这种机制也为我们带来去中心化的交互控制便利。由于复杂系统的子系统非常多,且整个系统是高度动态的:随时可以有任意的子系统因为某些原因被停止执行,也随时可能新增某些新功能的子系统,所以我们很难用全局的控制器去管理这些动态的组件之间的交互,实际上所有复杂系统的核心就是整个复杂系统没有中央的控制机制,所有子系统之间都是局部的交互,整体涌现出智能行为。

    如果组件只是声明交互关系,没有与某个中央控制器或者全局的共享变量交互的机会,系统或平台就有机会根据类型等信息进行动态判断和规划,使得不满足条件的组件根本就不会被执行。这样在每个子系统看起来,整个系统并没有一个中央控制器,能够最大限度支持复杂系统的动态性。

    这种简单对类型的声明,然后由系统来分配数据的架构,也支撑了我们最核心的互操作性特性。

    动态性

    游戏程序或者说一般的复杂系统,相对于传统的应用架构还有另一个特征,那就是信息是完全动态的。

    在传统的应用中,软件主要充当的是一个功能计算器,它的功能大多数时候都是静止状态的,只有当用户发起某个事件,例如点通过鼠标或触摸屏点击某个UI元素,这个UI元素被程序定义为绑定到某个功能,一旦用户发出输入事件,对应的功能计算就会执行,然后程序会呈现相应的计算结果给用户。此后程序又进入静止状态直到用户的下次输入。这种模式可以描述为:输入-->计算-->输出,如下图(1)所示。

    而游戏并不简单的这种模式,游戏世界的一切都是动态的,它背后有一个循环驱动着整个系统持续在运行,即使用户不做任何输入,它的状态也在时时刻刻发生变化,例如大部分游戏的关卡都有时间限制,即使玩家什么也不做,游戏也会以失败结束;例如在一个RPG游戏中,即使玩家站着不动,周围的怪物也有可能走过来攻击玩家,导致一连串的后果。

    游戏程序就像内部有一个驱动器,它持续驱动着所有系统的运行,这些系统与系统之间的交互会导致很多状态变化,这些变化的状态信息源源不断地输入给玩家,如上图(b)所示。

    这种行为也是更接近真实世界行为的,在真实世界中,不管是生物系统还是人工影响的如经济系统等,环境时时刻刻在发生变化,整个世界的信息绝不仅仅是我们自己去影响的,事实上更是反过来我们的行为都是受环境的信息影响的,我们所作的任何决策都要实时去观察环境的信息,有些上一刻看起来还理所当然的决策,在下一刻随着某些环境发生变化就变得毫无意义。

    这样的信息系统特征与我们的传统应用程序相比,表现出两个在计算上完全不一样的特征,即:

    • 系统之间的交互是完全被动式的
    • 软件给用户呈现的是一个动态的信息世界
    被动式计算架构

    当一个信息系统的交互控制是去中心化的时候,子系统之间的交互看起来都是“自发的”,没有谁来驱动,这样的机制怎么执行的,我们将在后面讨论整个复杂系统的机制,这里我们先来看看这种行为对编程有什么影响。

    传统的编程模式都可以称作为主动式,大部分的代码流程可以总结为:用户输入-》决策判断-》执行动作,这里的决策判断是程序中最复杂的部分,因为它涉及到很多上下文信息的组织和查询,关于上下文的理解知乎有一篇很精彩的描述。在传统的软件架构中,我们一般都会有很多不同的模式和经验来实现这种上下文管理,但是这里我们在复杂系统的视角下,却会提出另一种可能是更好的方法。

    一般的决策判断流程大概是这样,当对应的代码接收到用户输入请求的时候,决策代码要做的事情就是去查询和收集上面讲到的这种上下文信息,以帮助做出决策判断,不考虑这些上下文内部是怎么组织的,我们可以把整个根据上下文进行决策判断的过程看做一个函数makingDecision(),makingDecision要做的事情就是去调用大量预置的判断函数,根据各种逻辑条件,动态地计算出一个判断结果。这种计算架构带来了两种不好的结果:

    • 造成了模块之间的耦合,即所有子模块都需要引用或者了解哪些逻辑判断的代码
    • 造成逻辑判断计算的重复执行,设想有两个独立的用户输入,其中的逻辑判断有80%是重合的,程序必须针对两个独立的输入进行这部分重复计算。

    看看我们现实世界的系统往往不是这么工作的,各种系统往往定义好自己的流程,每个流程会输入数据,后续流程往往以这种输出的实物数据作为它可以执行流程的判断条件,而不是当它需要执行的时候,发现前面的流程还没有执行,由下游的流程再去驱动上游的流程去执行。在这样的模式种,上游流程计算的数据结果不仅充当了一个条件,它更充当了上游的那个计算过程。

    结合我们前面的互操作能力,即子系统在不经过某个中央控制模块的情况下,能够非常简单地访问所有数据的能力,我们可以把各种可能的决策计算提前计算为一个数据,这样下游的流程由于定义和数据依赖关系,系统可以在条件满足的时候自动调用它去执行自己的逻辑。整个过程中,决策判断和子系统完全解耦。

    这样的架构调整将传统软件种的模式由主动式转变为被动式。

    动态的信息世界

    传统的:输入-》计算-》反馈的计算模式,用户能够完全了解或者说“记住”一个软件的状体,用户知道自己做过什么,当前的软件状态是什么,用户也知道TA只要执行某个功能,就会带来什么可预期的结果。

    尽管这样的方式有助于人们管理日常的任务和工作,但是这既不是真实世界的工作方式,同时所有事情都靠人去输入驱动,那么信息系统所能完成的事情的数量就会非常少,因为人的精力和注意力都是非常宝贵和有限的资源。而现实世界的信息系统总是在自发、动态发展的,即使我们某天什么事情也没有做,但是世界发生了很多的经济和生产行为,所以我们应该模拟真实世界的动态行为,使得数字世界的计算不以人的注意力为驱动基础,这样即使当我们的注意力不在软件和应用上,但是它们会在后天时时刻刻都进行着与用户相关或者指定的计算任务。

    前面我们已经描述了实现这样的计算架构的机制,这里要强调的是这对用户体验带来的变化。传统的软件的信息状态都是跟用户的输入有关,因此即使不用打开软件,用户大致是知道里面的状态信息的。但是如果一个信息系统在后台动态运行,就会存在大量的信息状态是用户不知道的,它必须像观察这个动态的世界一样去观察软件内部的信息状态,当然这里的交互可以有很多形式。

    游戏就是这样一个信息系统,游戏内部有许多子系统的运行都不是直接与用户的输入相关的,因此游戏的交互必须要很好地呈现比较完整的状态信息,比如相对于传统应用简洁的界面,游戏的界面通常会包含很多全局的数据信息,除了具体的数据信息,游戏场景的元素在视觉上通常也被设计为易于帮助用户去区分不同的场景状态,如下图《文明》这款游戏一个游戏画面。

    在这种情况下,用户的下一个输入或者决策,就不能单纯凭借自己大脑种的记忆,而是需要观察整个系统的信息状态,这些状态可能会实时变化,甚至大部分变化都不是用户直接输入导致的结果,甚至某种程度上用户的操作更多是在响应信息世界的状态变化。

    表面上这看起来是更复杂的,但是这样的信息系统能够处理的信息计算将会远远超过传统的信息计算,因此它能实现的信息计算的复杂度也更高,想想看一个游戏中涉及的那么多计算和逻辑,使用传统的应用模式几乎是无法实现的。

    而且这种复杂度对于人类来讲,或许并没有那么复杂,人类在社会中天生就是被训练为适应变化的环境的,我们不断在观察街上的行人、红路灯及车辆情况,以决定下一步的行动策略;赛场上球员之间不断观察其它运行员动态的情况,以决定下一步行动;甚至在信息系统中,我们也要根据股票市场的变化,决定下一部分的投资决策等等。

    所以这里更多的是设计和交互的问题,比如人的有些响应能力是天生的,比如对危险事物的察觉,有些则是需要定义一定的规则然后进行适当的训练的,比如开车时对环境的反映等等。这比如就要求我们要精心选择呈现信息的逻辑、模式、规则,而不是一股脑甚至随机选择大量杂乱无章的信息;比如一段时间内某些相关信息的规则和逻辑变化不能太大,因为这可能需要用户重新去建立对动态信息的响应模式。

    在这种信息系统中,信息的呈现、规则和交互会变得很重要,但是相比于这样的复杂信息系统呈现的价值:注意力的释放以及实现更复杂计算的能力,以及人类对这种动态信息系统的适应能力,这样的转变完全是有价值的。

    进化产生数字智能

    前面我们从机制上讨论了很多思路,以实现一个可以多子系统互操作、靠子系统局部交互实现更复杂功能的数字世界。但我们花费了这么大的精力去重构软件开发的流程,以及让用户去学习新的信息系统交互方式,这样的代价到底值不值得?它有没有更深层次的价值体系来支撑这种技术变革?这些是本节要讨论的问题。

    本节我们要讨论两个很深刻的问题,即数字智能和计算的本质,这些概念可能性驱动未来数字变革的核心价值。

    智能涌现

    前面我们已经简单介绍过复杂系统的一些基本知识,我们再来看一个每个人可能深有体会的例子。

    考虑我们现在的整个网上消费购物的系统,它是由这样几个子系统构成的复杂系统,包括生产产品的厂商、物流快递、国家交通公共基础设施、电商网站、送货的快递员和用户等。这些子系统每一个单独看都比较简单,它们的功能有自己的边界,这些子系统之间的交互也相对比较简单,最重要的是,这一切没有一个公共、统一的中央控制器,整个系统都是由局部的子系统之间进行简单的相互交互,从而呈现整体系统功能的。

    虽然每个子系统相对都比较简单且容易理解,但是整个系统实际表现出来的功能性是远远大于我们的预期的,例如最开始网上购物主要是以淘宝等少数电商网站为主,然后现在快递称为一种公共子系统,使得任意其它的电商网站都可以接入,这就使得人们购买物品这个体验大大升级,例如小到附近的餐厅、水果店和药店等都可以很方便的购买,甚至包括跑腿这种灵活的形式,从我们的体验上说这已经不单单是一个快递或者购物网站那么简单,它简直是一套非常智能的消费体系,因为几乎所有的电子消费形式它都可以实现,这种智能就是通过这些子系统构成的复杂系统涌现出来的。

    除此之外,由于这些子系统之间的形式是相对比较独立的,所以子系统都在进行自我迭代,例如过去的物流体系主要是依赖火车,其运载的时效性是非常低的,随着现在交通子系统内部的迭代,例如火车升级为高铁和动车,大规模高速公路网的修建,其它的子系统甚至在没有变化的情况下就能享受到交通子系统的性能提升,最后导致整个消费的体验大幅提升。再比如说快递这个子系统,过去快递可能就是送到站需要用户自取,但是随着消费量的增加,快递公司为了改善体验,逐步增加了配送到家里的最后一公里,甚至在大城市通过分片区配备更多的快递员来缩短配送时间。所有这一切,每个子系统内部都在迭代和进化,最后整个系统的性能和能力都不断突破,子系统内部逐步的迭代改善不单单是提升了性能,它使得整个系统涌现出一些新的体验和能力。例如快递员的配送时间不能控制在很短的时间内,那么这种短时的外卖消费形式就不可能形成。

    从这里我们就可以看到复杂系统的力量,它通过将整个系统划分为自治的子系统,并允许子系统内部进行进化迭代,从而涌现出更智能的功能。我们可以从人类社会的各个层面都看到这种复杂系统机制涌现智能的例子,从生物系统、到人造的各种系统,如上面描述的这种电子购物的系统,再到天气宇宙这种大自然的复杂系统。

    尽管信息化以及计算机的通用计算能力具备表达和模拟人类一切可计算的逻辑的能力。然而在数字世界我们似乎还没有感受到这种由复杂系统机制导致的计算智能的能力,这主要是因为前面论述的现代软件构造的基础架构使得应用之间的互操作性很低,从而不利于实现相互交互来形成复杂系统。比如看看我们手机上的应用,几乎每个应用之间都是完全隔离的,尽管理论上用户的数据本身应该在不同应用之间可以共享,但是实际上一个应用很难使用或获取另一个应用产生的数据。这造成的结果就是,虽然现在的应用商店有成千上万的应用,每个用户也下载了非常多在功能和意义上具有相关性的应用,但是这些应用之间从不能真正进行交互,使得这种“多应用”的形态最终没有涌现出更复杂、更丰富、更智能的数字体验。每个应用本身就像一个完全独立的小功能,甚至应用之间由于数据格式的不同,即使是用户想要手动在应用之间形成这种协作,也无法操作,当然除了简单的图片、视频、文字等这几种标准的格式之间可以手动实现交互,其它更多的数据是没有通用格式的。

    说明:这里并不是说数字世界完全没有复杂系统产生,但这里本文说的主要是面向C端消费者的应用之间。其它的不同层度的互操作还是有的,但是由于传统软件构造架构的一些基本的能力限制,所以大部分这种互操作性的架构都发生在web之间,Web通过HTTP等协议提供了一些基本但相对比较复杂的互操作机制,大部分企业内部的业务之间都是基于网络传输协议来实现的微服务的形式构成的,这在某种程度上形成了一个复杂系统。此外,超链接URL使得互联网上的信息之间都可以连接起来,尽管它只是一个简单的链接,但是这些链接构成的信息背后的相关性构成了一些逻辑关系,使得它们也涌现出了智能,例如我们沿着这些链接可以寻找到很多很深层次有价值的信息,这些信息作为知识使得我们可以解决一些生活中的重大问题。

    所以从这个角度看,构建一套新的软件构造的方法,使得人们可以更方便地去构造复杂系统形式的信息系统,这将带来帧数的数字智能的变革,这将使得计算的能力远远超越一般的逻辑计算。

    计算的本质

    在计算机和信息领域,我们理解的计算通常是指按照一定的逻辑和流程执行一些操作,编程语言定义了我们描述逻辑的方式,我们的逻辑用这种编程语言进行描述并形成代码程序,最后在计算机上被执行以完成这个计算。

    然而当我们构建了一个具有复杂系统特性的信息系统的时候,这些涌现的能力是我们“计算”出来的吗?从这个角度看,可能计算的本质并没有那么简单。

    在生物学、数学、统计学、物理学等跟复杂系统相关的科学领域,科学家一直在尝试为复杂系统寻找一些数学上的理论,复杂系统的视角至少从上个世纪50年代就已经在科学研究者中间被广泛思考和接受,例如著名的人工智能先驱 Herbert A. Simon 就是最早对复杂系统的架构进行分析的科学家,在他的著作《The Sciences of the Artificial》就大量使用复杂系统的视角来分析所有由人类参与的人工系统。他提出了一些构建这种系统的原则、方法和思维,比如通过目标、界面和环境的关系来描述人工系统,其中的界面其实就相当于子系统之间的边界,界面内部的就是内部功能,系统面对的外部环境就是其交互部分,而目标来源于进化论里面的选择。这些研究工作也为后来的复杂系统在工程上实施提供了许多宝贵的价值。

    然而,最近几十年来,尽管随着生物学、物理、化学等学科的飞速发展给复杂系统的研究提供了很多依据,但是人们至今依然没有找到关于复杂系统的统一的数学理论。更多的研究者都偏向于复杂系统可能没有像其它自然科学一样具有比较明确的统一的数学理论。更多是从复杂系统的一些比较具有共性的一些特征去研究和使用复杂系统。

    分子生物学John E Mayfield在他的著作《The Engine of Complexity: Evolution as Computation》中提出了一种关于复杂系统的解释,即将进化看作一种计算,这样计算就是所有复杂系统背后的引擎。这本书的 作者介绍 如下:

    From an early age John E Mayfield was fascinated with science of all kinds. This broad interest led to a BA in physics, a PhD in biophysics, and an academic career in the area of molecular biology. In the late 1990s he was introduced to evolutionary computer algorithms and became fascinated by the relationships between biological evolution and computer based evolution and more generally in the linkages between computation and biological process. The Engine of Complexity, Evolution as Computation is based on his consequent studies. The book shows how biological evolution is a special case of a more general computational notion of evolution, and how that general view of evolution explains not only how life is possible but also how human technology and most or all complex outcomes of human society are possible. It is his first book.

    John E Mayfield的主要研究方向是关于进化的一般性理论,他指出,传统的复杂系统之所以很难形成统一的数学理论,主要是因为系统之间交互关系是非线性的,而计算机的逻辑计算能力正是解决非线性关系的方法,且具有很强大表达能力,所以他发现将这两种视角结合在一起,用计算的观点就可以解释几乎所有复杂系统的机制。

    作者指出,计算机程序是由能够导致计算机内部发生特定的状态序列并产生输出的命令组成。数据可以视为对外部世界某方面的表示,这样看来,计算就是将方法的表示(算法)作用于对世界某方面的表示(数据)产生内部表示(机器状态)的序列,并得到最终的表示(输出)。在计算机中,内部状态与输入状态互动产生新的内部状态,最终状态就是输出。

    那么如果物理的过程也是计算,程序在哪?作者以如何解释一粒盐为例用计算的观点来解释化学反应,食盐是由钠和氯组成,当等量的钠原子和氯原子混合到一起,就会发生自发的反应,这个化学反应会释放热能量,每个钠原子失去一个电子,每个氯原子获得一个电子。根据库仑定律,带正电的钠离子和带负电的氯离子相互吸引,但不能距离太近,因为填充的能级(化学的轨道)不能相互渗透。当所有钠离子都被氯离子包围,氯离子也被钠离子包围,形成非常规则的3维结构,相抵触的规则时间就会达到最优平衡。能级的物理维度决定了例子之间的最优距离。钠离子和氯离子具有不同的大小,能平衡物理和几何不同需求的状态是一个规则的网格,每个氯离子周围有6个钠离子,每个钠离子周围也有6个氯离子。这个规则的立方体结构向各个方向延伸,从而形成我们所熟悉的盐晶。在适当的温度和浓度条件下钠离子和氯离子相遇就会自发形成这种结构。

    在上述的过程中,涉及两个基本物理定律,一个是库仑定律,它说明电荷越接近,作用力就越大。但如果仅仅是这样,钠离子和氯离子就会挤碎在一起。而这一切没有发生是因为另一个量子力学中的被称为泡利不相容原理的规则。量子力学规则的一个特点是系统是按“能级”划分的,对于原子这意味着电子处于某个能级并且与质子的距离不能低于最低的能级。这种规则的结果是使得不同的能级只能占据一定数量的电子。

    量子力学、库仑定律以及数字的相互作用赋予了每种化学元素独有的特征。John E Mayfield从计算的观点看,钠和氯原子各自带有自身表示的信息,当一定的条件发生时,它们会相互作用,发生相互作用的计算过程正是由基本的物理规则引起的,例如这里的库仑定律和量子力学规则,这些基础的物理规律编码了其中的计算算法。

    按照这种视角,所有的进化系统或者复杂系统都可以用计算的观点进行解释。这种计算的视角对于我们构建软件计算架构最核心的意义在于,这种系统的计算是自动发生的,它没有某个中央控制器。在物理过程种,作者将物理规律在整个进化计算过程种充当的驱动自发计算的方式称为“免费的结构”,即我们自然界的所有基本的物理规则驱动着整个宇宙种复杂系统的计算。

    回到我们的软件架构,我们已经具备了定义子系统以及让子系统之间进行互操作的能力,那么在没有中央控制器的情况下,怎样形成这种自发的子系统之间的交互呢?这就涉及我们的组件参数声明与全局变量之间的解耦,当我们的组件只是声明对某些数据感兴趣,而不需要自己去获取这些数据的地址的时候,借助我们的类型系统,系统就可以自动推导出它需要与哪些子系统进行交互,所以系统能够动态根据这种子系统之间的变化来决定这种交互东西,尽管系统在不还是有一个类似的分配器在工作,但是从组件或者子系统看来,这些子系统与其它子系统之间的交互是“自发的”,即:

    • 子系统只需要声明自己感兴趣的数据,就像原子声明了自己的表示。
    • 只要条件满足,子系统之间就可以进行交互,这个条件在物理过程中是自发进行的,在我们的系统中它也是自发进行的,因为系统会根据多个子系统之间的条件进行判断,满足条件的子系统之间就会被执行计算。

    这里系统的调度充当了物理过程中那些物理定律对应的免费的结构,只不过我们不是像物理过程那样具有各式各样的物理定律来定义不同的结构,而是定义一个统一的规则,这个规则根据输入输出类型来计算交互的条件,而这些类型本身编码了各种各样的规则。

    进化的系统

    前面两节论述了复杂系统怎样通过多系统非线性和自发的的交互,来涌现整个系统的智能,以及我们的软件架构使用怎样的机制来支撑复杂系统的这种结构特征。

    然而一个复杂系统是怎么形成的,这是另一个非常深刻的话题。传统的一个软件都是由某个公司内部大量的研发团队通过数个月以及数个不同职能的团队的协作共同完成的,它们的一个被认为理所当然以至于我们一般都不会去思考的特征是:一旦开发商发布产品,则意味着整个软件产品的功能全部开放完毕,从外界用户感知来看,他们一下子就开发出了一个功能确定且完整的产品。

    在上述这样传统的软件产品中,我们一般认为它的业务逻辑是相对容易被开发团队理解的,因为尽管业务细节都带有很多复杂性,但是一个团队研发的某个软件产品在整体逻辑上处于某个特定领域,有一些特定的逻辑,因此其复杂度基本上都是在可管理的范围之内。但如前面所述,如果一个复杂系统作为一个整体,它的复杂度是很难被人理解和管理的,那么我们应该怎样去开发一个你甚至都不能理解整体功能的复杂系统产品呢?

    回到前面电子购物的复杂系统,它呈现三个特征:

    • 首先是每个子系统都是由独立的实体在开发及运行,这是复杂系统的基本特征;
    • 其次是每个子系统内部都在独立迭代,例如交通子系统由火车到动车,由普通的公路到全国高速路网;物流公司由以前的长途配送,到增加最后一公里的送货上门,上门取件;
    • 再次,整个系统中不断有新的子系统加入,这些可能是跟其它某些子系统功能相似但是处理不同类型任务的子系统,如新增不同的电商平台,以及新增快递公司;也可能是基于现有整体系统能力延升出来的处理新的类型业务的子系统,比如外卖就是一种不同于传统电商的服务类型,但它是基于在线购物和快递发展到一定成都时候才会产生的新的服务类型,及它的出现需要基于其它系统的演进。

    从上面的过程我们可以看出,整个电子购物的复杂系统不是像传统软件那样一次性构建出来的,它们是进化出来的。所有复杂系统的功能演进都是一个进化的过程。

    下面我们来分析我们的软件架构在一个进化系统的框架下是怎么工作的。根据《复杂的引擎》一书,所有进化过程的共同特征包括以下5个要素:

    • 个体,它们一般有各种名字,比如:生物、自主体、基因、概念和公司。
    • 可遗传的特征,个体的描述信息。以某种形式编码为个体本身的一部分,生物的这种信息编码为DNA。
    • 个体可以繁殖或复制,通过这个机制,个体从父辈或之前的个体拷贝编码信息。
    • 变化机制,信息在复制、繁殖或维护过程中必须有机会产生适应度的改变。在许多系统中变化机制就是复制过程中产生的错误。
    • 基于特征的选择,繁殖(或复制)的成功必须部分取决于各个体编码信息所描述的特征。

    只要系统同时具备了这5个要素,个体组成的群体中的编码信息以及相应的个体特征就会随着时间改变;遗传的个体特性也必然会越来越适应决定繁殖(复制)成功率的标准。

    上述这是进化论中的知识,比如在生物的进化论中,生物个体携带DNA,其中编码了个体本身的特征,这些特征可以通过繁殖被复制到新的个体中,并且这个复制的过程中可以产生一定的变异,这种变异通常是随机的,进而形成一些新的特征,这些新的特征能否被保留下来,取决于自然选择,即它能不能具有更大的优势保障个体的生存。具有这种逻辑结构的系统会累积适应选择标准的编码信息。在自然和生物系统中,它们通常利用随机变化做到这一点,有时候也会利用非随机变化,以免偶然性过大,不利于产生有用或有趣的东西。因此这个信息累积和改进的过程就是概率计算,它有效的原因很简单,很小的变化通常是有可能的,而无目的的大变化基本不可能发生,通过小的并非很不可能的变化,并累积好的变化,就有可能达到本来很难达到的目标。

    进化论的思想几乎可以解释一切生物和大自然的复杂系统,但如果直接将这一套方式作用于我们的软件开发则是不合适的,首先完全依赖于随机变化的效率会比较低,其次通过漫长的自然选择则会使系统的演进很慢,想想我们人类的智力演进是多么漫长的一个过程。

    因此我们必须保留进化论的精髓,同时要在效率部分做出不同的处理。下面分析我们的架构其中包含的进化思想。

    对于计算机,进化的信息是软件代码。我们来看在我们的系统中怎样对应和解释这5个要素:

    个体:就是包含了自身功能代码的各个子系统,例如一个智能体(Agent)程序。

    可遗传的特征:我们的代码显然像DNA编码了生物个体特征意义,它编码的整个程序的特征(功能),很显然,代码是可以复制和遗传的。

    个体可以繁殖或复制:你只要复制了另一个智能体的代码或者说你的系统以某种方式可以包含或者调用另一个子系统的代码,其实这在软件中也是一种形式的复制。

    变化的机制:生物或自然系统的变化机制主要是靠随机过程,它主要体现在对编码信息的部分随机修改。我们的软件系统显然不是对已有的程序去添加一些随机的修改,因为那样的程序大部分情况下根本就无法运行。我们的随机性主要来源于一个新的开发者像一个已有的程序中添加部分能够修改程序行为的代码,举个例子,原来的程序包含A组件,现在借助我们的互操作性,这样的程序可以很方便与其它程序进行交互,现在有另一个开发者开发了一个能够与A组件进行互操作的程序,然后某个用户同时购买了A和B两个组件,那么它们整体看就是产生了变化。所以我们的子程序之间的互操作性,以及函数级的可组合性,这些都是变化的机制,我们后面会详细介绍其中的技术细节。

    在传统的软件中,我们也可以对已有的软件进行修改,从而实现类似上面这种变化。但是因为传统的软件只是对开发商内部是公开的,所以只有一个很小的团体能够改进软件,这就会使得软件的变化的概率非常小,甚至在某个程度之后停止变化,因为这个开发商的研发人员数量在整个人类完全是可以忽略的。而在一个开放的软件时间,这样的变化是完全不受限制的,因此进化的概率更大,更有可能进化出完全意想不到的结果,因为这里面能够导致变化的开发者人员的数量基数是非常大的,后面我们也将详细分析我们怎样通过简化程序结构来使得更多的非程序员可以编写程序。

    基于特征的选择:这些变化出的机制是否有效,取决于它们是否适应和满足人们的某些目标。所以当这些变化发生之后,新的子系统会产生,然后会有一部分用户有机会是使用这些新的子系统,在使用过程中,如果这些子系统很好地解决了人们对数字世界的一些需求,那么它们就会被选择,即它们适应了选择,否则这样的新的子系统则会很快被淘汰。

    这种选择机制在软件的消费中倒是非常有效,但是这种方式显然还没有真正促进软件大规模的进化,例如看看我们手机里的应用及其形态,大部分的应用已经有很多年没有太大的进化了,而相反,我们的数字世界的功能也没有变得非常的丰富和智能。这种缓慢的进化与两个要素有关,一是上面讲到的变化的缓慢,二是跟这里的选择机制有关,即人们其实没有太多选择,就导致选择并没有在整个系统中表现出很强的力量。

    现代的软件都累积了很多的功能,用户要么购买及使用整个软件,要么就使用不了软件,大部分情况下我们必须要使用其中的核心产品功能,所以不得不安装,但是其中包含的大量功能我们完全无法选择,因为没有选择这也会导致开发商并没有那么大的选择压力。

    我们的系统是一个完全动态的系统,用户可以选择完全不同的子系统组合,这也就意味着用户对每个很小的子系统有很高效的选择机制,这就会催生一个完全不同效率的进化系统。在我们系统架构中,动态性和互操作性在遗传、变化和选择这三个重要的进化要素中都发挥了重要作用,从而整体呈现出更高效的进化效率。通过这种进化的力量,演进出复杂的系统功能,从而使数字世界表现出更加智能、复杂和丰富。

    外在结构和内在结构

    前面我们从互操作和复杂系统机制的层面对RealityIS的架构哲学进行了一些介绍,在了解这两个部分的内容之后,我们再来系统地梳理一下其中的逻辑,使我们对整个系统架构有更清晰的认识。

    从整体看,RealityIS的两个设计目标或特性是:

    • 互操作性
    • 自我进化

    所有的技术思想和对现有技术的改进思路都是围绕上述两大目标的,其中互操作性解决的问题是要让任何子程序能够非常轻易地跟外界通信和交互,这既是复杂系统结构所需要的基本特性,也是实现一个广泛相互协作而繁荣的数字经济的基础,想想我们现实世界人与人、实体与实体、人与社会等各种关系都是有非常广泛而深刻的交互的,在计算机的世界,交互就是互操作。

    自我进化,是复杂系统构建和演化的核心机制,我们不是一次性通过某个实体就开发了整个系统的功能,而是通过子系统之间的相互协作来进化出各种更复杂的功能,对应的软件开发的过程中,这要求系统具有非常动态的能力,能够动态地新增或者删除子系统,同时也要求这些子系统之间具有自治的能力,这样系统才能自发地进行进化,而不需要全局干预。

    围绕着两个目标,我们发现传统的软件构造体系根本就是跟这两个目标相悖的,这主要体现在:

    • 数据与代码的耦合使软件失去了互操作性,同时也造成了中心化治理的结果
    • 局部代码在获取决策上下文时与全局信息的耦合使软件失去了自治的能力

    针对这两个问题,我们分别从区块链和复杂系统理论中寻找到对应的理论支持,使我们可以获得一个非常简洁、干净、稳定、而又功能强大的技术架构。它们形成整个技术架构的两个结构,我们称之为外部结构和内部结构,如下图所示:

    针对互操作性,我们从区块链中得到启示,尽管不是很直接,但是它为了实现去中心化采取的将数据与计算分离,并在虚拟机中在运行时对数据进行授权的技术流程,被我们很巧妙地用一套动态的类型系统进行一般化,使之能够支持更广泛的数据类型,同时又能确保用户的数据安全。这样的调整使得我们完全实现了互操作性,这种互操作性不光使得不同开发者开发的应用程序可以在一些协同计算,相互交互,更重要的是为复杂系统的构建奠定了基础:这样一个系统的功能有机会被多个自治的子系统进行融合而形成,而不是仅仅只有一家开发商构建,那样其能提供的功能的复杂度将会远远低于复杂系统。我们称这些由互操作性带来的结构为外部结构,它反应的是子系统与外界交互的能力。

    针对自我进化,我们从复杂系统的理论中得到启示,其核心的思想是自治能力,即子系统可以在不经过中央或者全局控制的情况下实现局部子系统之间的交互,因为这种交互不光带来安全隐患,还使得子系统可能会受限于中央控制器而不容易去单独扩展能力,而这是进化系统的基础。为了解决这个我们,我们从游戏开发界最新的ECS架构得到启示,并结合我们的动态类型系统,实现一个基于类型的局部自治架构,在这样的架构中,子系统只需要声明关注的数据类型,即可以定义与其它子系统之间的交互关系。围绕这些机制,我们还进一步分析了整个系统的进化过程,它遵循生物或自然界中复杂系统进化相似的原理或过程。我们称这部分结构为内在结构,它决定着一个子系统内部怎样去演进和进化。

    在内部结构和外部结构之外的系统中,用户则牢牢掌握着所有的数据权限,并通过数据权限控制着整个程序的运行,包括一个子系统是否可以访问用户的某些数据,以及一个子系统是否可以与其它子系统进行交互,甚至一个子系统即使已经被用户安装到用户的应用环境,它仍然可以通过数据被完全禁止运行。用户对数据的权限被牢牢地集成到系统的虚拟机中,


    RealityIS系统架构

    对互操作性的改进:

    • 由调用过程获取结果,变为直接获取其过程,即将被调过程执行的结果存储在一个语义数据,这样就是一个类型或者数据本身包含了互操作性,就简化为数据管理的问题(游戏中的机制)

    构建一个动态类型系统

    两个目的:

    • 类型解析,做依赖分离
    • 数据和功能分离,通过类型的解析控制,来阻止未授权程序的访问,当然实际不是运行到某个函数时在检查,而是组件可以根据类型信息提前检查出来

    动态授权很重要,如果没有这个控制,只是在Actor之间传递字符串,意味着某个Actor被执行,就无法控制它访问数据。

    建立一个互操作抽象

    逻辑抽象,不涉及编程语言与编译器开发

    简化数据获取

    简化程序结构

    复杂系统:由主动到被动自动运行

    局部驱动

    应用由主动执行到被动持续执行,跟用户的主动输入不是同步的,可能是自动执行的,用户怎么感知系统变化状态

    应用由主动执行到被动持续执行,跟用户的主动输入不是同步的,可能是自动执行的,用户怎么感知系统变化状态

    https://www.zhihu.com/question/26387327/answer/3158798538

    非中心化的系统交互

    虚拟机

    字节码

    本质上结构跟Wasm相似,可以做到很底层,都是函数级的数据,只是函数调转的机制不一样。

    {
    "magic": "0",
    "version": "1.0.0", // VM的版本号,类型的解释方法一般不变
    "inputs": [ // 内部Standard格式可能存在和用户版本不兼容,运行时检查
    {
    "User":{
    "version": "1.0.0",
    "name": "String"
    "age": "int"
    }
    }
    ],
    "standards":[
    "Car":{

    }
    ]
    "components": [
    {
    "name":"add_com",
    "inputs":[
    "User"
    ]
    "output":[]
    }
    ], // 内部方法
    "outputs": [], // 可能存在版本不兼容
    "codes"" [] // 将所有代码放在一起,Component还有其它参数信息影响缓存连贯性
    }

    inputs

    将属性定义都拷贝进Agent内部,一是方便Agent编辑,同时考虑到后面Component的参数签名是跟Standard的属性名字绑定的,并没有像传统编译器那样编译为地址,例如:

    {
    "inputs":[
    "User":{
    "version": "1.0.0",
    "name": "String"
    "age": "int"
    }
    ]
    }

    但是运行时检查到版本不一致时,自动做一些转化。

    Standard版本兼容

    为了避免不断的更新,实行两个策略:

    • 小版本必须兼容
    • 大版本必须更新Agent,否则不让运行
    小版本兼容
    • 修改字段名字
    大版本更新
    • 增加字段
    • 删除字段
    • 修改字段类型 = 删除字段 + 增加字段

    Lua与宿主交互

    类型解耦,

    Python没有Lua那样的动态类型,先支持Lua

    RealityIS技术特征

    执行流程

    传统几种模式:

    函数调用关系

    实际上是转化为程序的传统结构

    • 需要管理函数实例及其地址
    • 需要关系参数的链接

    流程顺序

    Hodini的方式

    • 不用管理函数实例
    • 按类型名字进行获取数据

    ShadeGraph

    • 管理依赖关系
    • 依赖关系由变量名称确定,即是类型的实例,即是参数的连接,只不过定义了全局参数,而不是从函数的输入输入去连

    变量名字不易于复用

    // Create the graph - it starts out empty
    cudaGraphCreate(&graph, 0);

    // For the purpose of this example, we'll create
    // the nodes separately from the dependencies to
    // demonstrate that it can be done in two stages.
    // Note that dependencies can also be specified
    // at node creation.
    cudaGraphAddKernelNode(&a, graph, NULL, 0, &nodeParams);
    cudaGraphAddKernelNode(&b, graph, NULL, 0, &nodeParams);
    cudaGraphAddKernelNode(&c, graph, NULL, 0, &nodeParams);
    cudaGraphAddKernelNode(&d, graph, NULL, 0, &nodeParams);

    // Now set up dependencies on each node
    cudaGraphAddDependencies(graph, &a, &b, 1); // A->B
    cudaGraphAddDependencies(graph, &a, &c, 1); // A->C
    cudaGraphAddDependencies(graph, &b, &d, 1); // B->D
    cudaGraphAddDependencies(graph, &c, &d, 1); // C->D

    到目前为止cuda graph的依赖需要用户手动设置。当kernel或其他操作输入变量变化时,cuda graph需要用户手动更新节点参数。

    当我们面对大量节点与输入参数时,手动来构造cuda graph和更新节点就不太现实,于是muda自动计算图就应运而生了。

    在1)部分我们定义了graph var,这些graph varmuda compute graph中只表示一种虚拟资源(muda compute graph 默认所有的虚拟资源相互之间不产生重叠,即内存不发生overlap)。一般我们会要求图的输入变量为一个viewer(他本身不拥有资源,只是一个资源的访问器,是trivially copyable的),或是一个值类型。如果你知道你在干什么,那么你也可以使用奇技淫巧。

    在2)部分,我们定义了graph nodes。注意,graph nodes的定义顺序会影响graph nodes的依赖关系,graph nodes的定义顺序应该是所有任务的逻辑顺序,这非常的intuitive!我们的所有串行代码都是这么写的。

    Cogine

    从上述的方案中总结:

    • 要想简化,都需要全局数据,不管是Houdini中的几何数据,还是ShaderGraph中由变量名字确定的全局数据,这样避免牵涉对函数细节的了解
    • 流程比实际的函数调用更简单,如Houdini和ShaderGraph
    • 用户理解流程很重要,相比由输入输出来确定参数不太利于管理和控制,比如你要修改流程就必须去修改变量名字;相同的流程在一个系统中多次执行则要定义不同语义的变量名字

    像ShaderGraph通常是固定的流程,没有Control FLow,即每个流程都会被执行,并且通常能被计算出一个线性的执行顺序使其可以保证其中定义的依赖关系。

    互操作性

    可组合性

    传统两种组合方式,一种是单纯对象级别的组合,例如Unity的Component,一种是函数式编程中的组合,通过高阶函数

    个性化

    动态性

    分布式

    语义化

    组件化

    被动式

    被通知,持续运行

    应用

    挑战

    技术挑战

    动态类型带来的性能问题

    改进语言虚拟机,去掉函数栈等控制的机制,仅保留代码执行

    编译为像WASM的字节码,WASM本身就是按函数级定义的,其实我们的机制正是对应这种,只不过函数换成我们的组件

    程序的持续运行模式

    对涌现能力的预测

    类似于游戏测试

    可能很多人的经验和知识在于去控制和发现这种结构,然后筛选出更有价值的结构,这就是进化论里面的选择。

    智能必须依赖于较大的突变和选择,较大的突变必须要有条件能够生产非常多错误的结果。

    用户体验挑战

    用户从功能管理到数据管理

    启示这已经比较普遍,只是管控的是API,但是API代表的就是一种数据的获取,

    phone-setting

    应用由主动执行到被动持续执行

    跟用户的主动输入不是同步的,可能是自动执行的,用户怎么感知系统变化状态

    我们需要被通知,而不是一个我要做什么的数字世界

    动态的数字世界

    人天生就是使用观察动态世界的,只是你要给出合适的方式,比如尤其是考虑到屏幕的交互,以及数字世界的信息量远多于现实世界

    例如股票就是这样

    传统的数字世界都是一致的,而且事实证明用户在使用一个新应用的时候,新应用带来的阻碍都很大的,不管是认知、体验、交互等等

    所以需要一致的交互体验,大模型对话式的交互方式可以大大简化传统GUI方面的复杂度和丰富性,比如小程序就是一种类似的体验,虽然应用内容不一样,但是用户使用新的应用的流程比较一致,所以并没有造成太大的阻碍。

    当然用户也不是一直在换,大体说很长一段时间还是稳定的,但是社会发现有新的有价值的应用时传播得会更快。

    少量的比较追踪科技的用户则会更习惯这种能够快速体验到新产品的节奏和感觉。

    展望

    驱动硬件创新

    驱动软件架构创新

    驱动数字形态创新

    驱动操作系统创新

    总结

    未来可能类型系统和数据集成到操作系统或手机本地的基础设施

    或者一个或多个分布式系统,但总归分布式系统的能力是更强大的,操作系统支持会简化数据的管理